Tugas Minggu 14 ~ Statistical Inferences

Logo

Chandra Rizal Alamsyah

Student Majoring in Data Science at ITSB

NIM: 52250068

Email:

R Programming Data Science Statistics

1 Studi Kasus 1

1.1 Uji Z Satu Sampel (Hipotesis Statistik)

Sebuah platform pembelajaran digital mengklaim bahwa rata-rata waktu belajar harian penggunanya adalah 120 menit. Berdasarkan catatan historis, standar deviasi populasi diketahui sebesar 15 menit.Sebuah sampel acak dari 64 pengguna menunjukkan rata-rata waktu belajar sebesar 116 menit.

1.2 Tugas

  1. Susunlah Hipotesis Nol (\(H_0\)) dan Hipotesis Alternatif (\(H_1\)).
  2. Identifikasi uji statistik yang tepat dan berikan alasan atas pilihanmu.
  3. Hitung statistik uji dan p-value dengan menggunakan \(\alpha = 0,05\).
  4. Nyatakan keputusan statistik-nya (apakah menolak atau gagal menolak \(H_0\)).
  5. Interpretasikan hasilnya dalam konteks analitik bisnis.

1.3 Jawaban

1.3.1 Menyusun Hipotesis Nol (\(H_0\)) dan Hipotesis Alternatif (\(H_1\))

Dalam konteks ini, kita ingin menguji apakah klaim rata-rata waktu belajar 120 menit masih berlaku atau sudah berubah.

  • Hipotesis Nol (\(H_0\)): \(\mu = 120\)(Rata-rata waktu belajar harian pengguna sama dengan 120 menit).
  • Hipotesis Alternatif (\(H_1\)): \(\mu \neq 120\)(Rata-rata waktu belajar harian pengguna sudah tidak sama lagi dengan 120 menit - Uji Dua Arah).

1.3.2 Identifikasi Uji Statistik yang Tepat

Uji statistik yang tepat adalah Uji Z Satu Sampel (One-Sample Z-Test).

Alasan:

  • Standar deviasi populasi (\(\sigma\)) diketahui, yaitu sebesar 15 menit.
  • Ukuran sampel cukup besar (\(n \geq 30\)), dalam kasus ini \(n = 64\), sehingga menurut Teorema Limit Pusat, distribusi rata-rata sampel akan mendekati distribusi normal.

1.3.3 Perhitungan Statistik Uji dan P-Value

Mari kita hitung menggunakan data yang tersedia:

  • \(\mu_0 = 120\)
  • \(\sigma = 15\)
  • \(n = 64\)
  • \(\bar{x} = 116\)
  • \(\alpha = 0,05\)

A. Menghitung Nilai Z (Statistik Uji)

Rumus yang digunakan adalah:

\[Z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}}\]\[Z = \frac{116 - 120}{15 / \sqrt{64}}\]\[Z = \frac{-4}{15 / 8}\]\[Z = \frac{-4}{1,875}\]\(Z \approx -2,133\)

B. Menghitung P-Value

Untuk uji dua arah dengan \(Z = -2,13\):

  • Cari nilai peluang \(P(Z < -2,13)\) pada tabel distribusi Z, yaitu sekitar 0,0166.
  • Karena ini uji dua arah, maka p-value = \(2 \times 0,0166\).p-value = 0,0332

1.3.4 Keputusan Statistik

Bandingkan p-value dengan nilai signifikansi (\(\alpha\)):

  • \(\alpha = 0,05\)
  • p-value = 0,0332

Keputusan: Karena p-value (0,0332) < \(\alpha\) (0,05), maka keputusannya adalah Tolak \(H_0\).

1.3.5 Interpretasi dalam Konteks Analitik Bisnis

Berdasarkan analisis statistik yang dilakukan, terdapat bukti yang cukup kuat (pada tingkat signifikansi 5%) untuk menyatakan bahwa klaim platform pembelajaran digital mengenai rata-rata waktu belajar 120 menit tidak akurat.

Rekomendasi Bisnis: Data menunjukkan bahwa rata-rata waktu belajar pengguna (116 menit) secara signifikan lebih rendah dari yang diklaim. Bagi tim analitik bisnis, ini adalah sinyal untuk:

  1. Evaluasi Strategi: Meninjau kembali apakah konten pembelajaran saat ini kurang menarik sehingga waktu belajar menurun.

  2. Koreksi Marketing: Menyesuaikan klaim pemasaran agar lebih transparan dan sesuai fakta lapangan guna menjaga kepercayaan pengguna.

  3. Analisis Kohort: Mengidentifikasi segmen pengguna mana yang waktu belajarnya paling rendah untuk diberikan intervensi atau notifikasi pengingat.

1.3.6 Visualisasi

Interpretasi Visualisasi Grafik Distribusi Normal

Grafik tersebut menggambarkan Distribusi Normal Standar (Z) yang menjadi dasar pengambilan keputusan uji statistik kita. Berikut adalah komponen utama dan maknanya:

  1. Area Penolakan (Zona Merah)Area berwarna merah pada kedua ujung (ekor) kurva mewakili Tingkat Signifikansi (\(\alpha = 0,05\)).

    • Karena ini adalah uji dua arah, total 5% area dibagi menjadi dua, yaitu 2,5% di ujung kiri dan 2,5% di ujung kanan.
    • Garis batas yang memisahkan zona putih (penerimaan) dan zona merah (penolakan) disebut Nilai Kritis, yaitu \(-1,96\) dan \(+1,96\).
  2. Posisi Statistik Uji (Garis Biru Putus-putus)

Garis biru vertikal menunjukkan hasil perhitungan kita, yaitu \(Z = -2,133\).

  • Secara Visual: Garis ini jatuh di dalam Zona Merah (sisi kiri).

  • Hal ini menunjukkan bahwa rata-rata sampel sebesar 116 menit berada sangat jauh di luar jangkauan yang bisa dianggap “normal” atau “wajar” jika klaim 120 menit memang benar.

  1. Makna P-Value (Luas Area)

    • P-value sebesar 0,0332 direpresentasikan oleh luas area di sebelah kiri garis biru (dan area yang setara di sisi kanan).
    • Karena luas area biru (p-value) lebih kecil daripada total luas area merah (\(\alpha\)), maka deviasi data sampel ini dianggap signifikan secara statistik.

2 Studi Kasus 2

2.1 Uji-t Satu Sampel (Tidak Diketahui, Sampel Kecil)

Sebuah Tim Riset UX menyelidiki apakah rata-rata waktu penyelesaian tugas dari aplikasi seluler baru berbeda dari 10 menit.

Data berikut dikumpulkan dari 10 pengguna (dalam menit):

\(9.2, 10.5, 9.8, 10.1, 9.6, 10.3, 9.9, 9.7, 10.0, 9.5\)

2.2 Tugas

  1. Tentukan H_0 dan H_1 (uji dua arah/two-tailed).
  2. Tentukan uji hipotesis yang tepat.
  3. Hitung statistik-t dan p-value pada \(\alpha=0.05\).
  4. Buat keputusan statistik.
  5. Jelaskan bagaimana ukuran sampel memengaruhi keandalan inferensial.

2.3 Jawaban

2.3.1 Definisi Hipotesis (\(H_0\) dan \(H_1\))

Pengujian ini dilakukan secara dua arah (two-tailed) untuk mendeteksi apakah rata-rata waktu penyelesaian tugas berbeda (bisa lebih cepat atau lebih lambat) dari standar 10 menit.

  • Hipotesis Nol (\(H_0\)): \(\mu = 10\) (Rata-rata waktu penyelesaian tugas sama dengan 10 menit).
  • Hipotesis Alternatif (\(H_1\)): \(\mu \neq 10\) (Rata-rata waktu penyelesaian tugas tidak sama dengan 10 menit).

2.3.2 Identifikasi Uji Statistik yang Tepat

Uji statistik yang digunakan adalah Uji-t Satu Sampel (One-Sample T-Test).

Alasan Pemilihan:

  1. Standar deviasi populasi (\(\sigma\)) tidak diketahui.
  2. Ukuran sampel kecil (\(n < 30\)), dalam kasus ini \(n = 10\).
  3. Data dianggap berasal dari distribusi normal (asumsi dasar untuk data durasi dalam sampel kecil).

2.3.3 Perhitungan Statistik dan P-Value (\(\alpha = 0,05\))

Data Sampel (\(n=10\)): 9.2, 10.5, 9.8, 10.1, 9.6, 10.3, 9.9, 9.7, 10.0, 9.5

A. Langkah Perhitungan Dasar:

  • Rata-rata Sampel (\(\bar{x}\)): \(9,86\) menit.
  • Standar Deviasi Sampel (\(s\)): \(\approx 0,395\) menit.
  • Derajat Kebebasan (\(df\)): \(n - 1 = 9\).

B. Menghitung Statistik-t (\(t_{hitung}\)):

Rumus: \[t = \frac{\bar{x} - \mu_0}{s / \sqrt{n}}\]\[t = \frac{9,86 - 10}{0,395 / \sqrt{10}}\]\[t = \frac{-0,14}{0,125}\]\(t_{hitung} \approx -1,12\)

C. Menentukan P-Value:

Berdasarkan tabel distribusi-t dengan \(df = 9\) dan \(t = -1,12\): * \(P\text{-value} \approx 0,291\) (Dua arah).

2.3.4 Keputusan Statistik

Kita membandingkan \(P\text{-value}\) dengan \(\alpha\):

  • \(P\text{-value} (0,291) > \alpha (0,05)\).

Keputusan: Gagal Menolak \(H_0\).

Kesimpulan: Tidak ada bukti statistik yang cukup pada tingkat signifikansi 5% untuk menyatakan bahwa rata-rata waktu penyelesaian tugas pada aplikasi baru berbeda secara signifikan dari 10 menit.

2.3.5 Pengaruh Ukuran Sampel terhadap Reliabilitas Inferensial

Ukuran sampel memiliki peran krusial dalam keandalan hasil statistik:

  1. Margin of Error: Sampel kecil (\(n=10\)) menghasilkan standar error yang lebih besar. Hal ini membuat interval kepercayaan menjadi lebih lebar dan uji statistik menjadi kurang sensitif (kurang powerful) dalam mendeteksi perbedaan yang sebenarnya ada.
  2. Stabilitas Estimasi: Semakin besar sampel, semakin stabil nilai rata-rata dan standar deviasinya dalam merepresentasikan populasi yang sebenarnya.
  3. Hukum Bilangan Besar: Dengan menambah ukuran sampel, distribusi rata-rata sampel akan semakin mendekati distribusi normal secara sempurna, sehingga hasil inferensinya menjadi lebih reliabel dan objektif.

2.3.6 Visualisasi

Visualisasi Teoretis: Kurva Distribusi-t

Visualisasi ini digunakan untuk menjelaskan logika pengambilan keputusan (Uji Hipotesis).

Interpretasi Visualisasi Teoretis (Kurva Distribusi-t)

Visualisasi ini berfokus pada validitas ilmiah dari pengujian yang ada.

  • Zona Kritis (Area Merah): Area merah di ujung kiri dan kanan merupakan batas toleransi kesalahan (\(\alpha = 0,05\)). Karena sampel Anda kecil (\(n=10\)), kurva ini lebih “lebar” dibandingkan kurva normal standar. Batas amannya berada di antara -2,262 dan +2,262.
  • Posisi t-Hitung (Garis Biru): Nilai \(t\) yang kita peroleh adalah -1,121. Secara visual, garis biru ini jatuh tepat di wilayah putih (wilayah penerimaan).
  • Kesimpulan Statistik: Karena garis biru tidak menyentuh atau melewati area merah, kita menyimpulkan bahwa perbedaan antara rata-rata sampel (9,86) dan target (10,0) tidak cukup ekstrem untuk dianggap sebagai sebuah anomali. Oleh karena itu, kita Gagal Menolak \(H_0\).

Visualisasi Deskriptif: Boxplot & Sebaran Data

Visualisasi ini digunakan untuk menunjukkan kondisi nyata data lapangan dari 10 pengguna.

Interpretasi Visualisasi Deskriptif (Boxplot & Jitter Plot)

Visualisasi ini berfokus pada realitas data di lapangan untuk kebutuhan riset UX.

  • Konsistensi Pengguna: Titik-titik biru (jitter) menunjukkan bahwa waktu penyelesaian tugas antar pengguna cukup bervariasi (rentang 9,2 hingga 10,5 menit). Namun, tidak ada data yang terlihat sebagai outlier (pencilan) yang ekstrem.

  • Hubungan dengan Target (Garis Merah): Garis merah menunjukkan standar 10 menit. Kotak biru (boxplot) membagi data menjadi kuartil, di mana garis tengah kotak (median) berada sedikit di bawah garis merah.

  • Makna Praktis bagi Tim UX: Meskipun secara rata-rata pengguna sedikit lebih cepat (9,86 menit), sebarannya masih sangat dekat dengan target 10 menit. Secara desain, ini menunjukkan bahwa aplikasi baru tersebut memiliki performa yang stabil dan sesuai dengan ekspektasi durasi yang diinginkan oleh tim riset.

3 Studi Kasus 3

3.1 Uji-t Dua Sampel (A/B Testing)

Tim analis produk melakukan uji A/B (A/B test) untuk membandingkan rata-rata durasi sesi (dalam menit) antara dua versi halaman landas (landing page).

Versi Ukuran Sampel (\(n\)) Rata-rata (\(\bar{x}\)) Standar Deviasi (\(s\))
A 25 4,8 1,2
B 25 5,4 1,4

3.2 Tugas

  1. Rumuskan hipotesis nol (\(H_0\)) dan hipotesis alternatif (\(H_a\)).
  2. Identifikasi jenis uji-t yang diperlukan.
  3. Hitung statistik uji dan nilai-\(p\) (p-value).
  4. Tarik kesimpulan statistik pada tingkat signifikansi \(\alpha = 0,05\).
  5. Interpretasikan hasil tersebut untuk pengambilan keputusan produk.

3.3 Jawaban

3.3.1 Formulasi Hipotesis

Dalam statistika, kita harus menentukan “dugaan awal” (nol) dan “apa yang ingin kita buktikan” (alternatif).

  • Hipotesis Nol (\(H_0\)): \(\mu_A = \mu_B\)(Tidak ada perbedaan signifikan antara rata-rata durasi sesi Versi A dan Versi B).
  • Hipotesis Alternatif (\(H_a\)): \(\mu_A \neq \mu_B\)(Ada perbedaan signifikan antara rata-rata durasi sesi Versi A dan Versi B).

3.3.2 Identifikasi Jenis Uji-t

Jenis uji yang digunakan adalah Independent Two-Sample T-Test (Uji-t dua sampel independen). Karena ukuran sampel sama (\(n_A = n_B = 25\)) dan standar deviasi tidak terpaut jauh, kita dapat menggunakan asumsi Equal Variance (varians dianggap sama).

3.3.3 Komputasi Statistik Uji dan Nilai-\(p\)

A. Hitung Pooled Standard Deviation (\(s_p\)):Karena jumlah sampel sama, kita gunakan rumus:\[s_p = \sqrt{\frac{s_A^2 + s_B^2}{2}} = \sqrt{\frac{1,2^2 + 1,4^2}{2}} = \sqrt{\frac{1,44 + 1,96}{2}} = \sqrt{1,7} \approx 1,304\]

B. Hitung Nilai t (t-score):Rumusnya adalah:\[t = \frac{\bar{x}_B - \bar{x}_A}{s_p \sqrt{\frac{1}{n_A} + \frac{1}{n_B}}}\]\[t = \frac{5,4 - 4,8}{1,304 \sqrt{\frac{1}{25} + \frac{1}{25}}} = \frac{0,6}{1,304 \sqrt{0,08}} = \frac{0,6}{1,304 \times 0,2828} \approx \frac{0,6}{0,3688} \approx 1,627\]

C. Mencari Nilai-p:

  • Derajat Kebebasan (\(df\)): \(n_A + n_B - 2 = 25 + 25 - 2 = 48\).
  • Menggunakan tabel distribusi-t atau kalkulator, untuk \(t = 1,627\) dengan \(df = 48\) pada uji dua arah (two-tailed), didapatkan p-value \(\approx 0,110\).

3.3.4 Kesimpulan Statistik

Kita bandingkan nilai-\(p\) dengan tingkat signifikansi (\(\alpha = 0,05\)):

  • Aturan: Jika p-value < \(\alpha\), tolak \(H_0\). Jika p-value > \(\alpha\), gagal tolak \(H_0\).
  • Hasil: \(0,110 > 0,05\).
  • Kesimpulan: Gagal menolak \(H_0\). Secara statistik, tidak ada cukup bukti untuk menyatakan bahwa kedua versi halaman landas memiliki durasi sesi yang berbeda secara nyata.

3.3.5 Interpretasi untuk Keputusan Produk

Bagi tim produk, hasil ini berarti:

  1. Perubahan Belum Signifikan: Meskipun rata-rata Versi B (5,4) terlihat lebih tinggi dari Versi A (4,8), perbedaan ini bisa saja terjadi karena faktor kebetulan (random chance) dan bukan karena desain halaman yang lebih baik.

  2. Rekomendasi: Jangan terburu-buru mengganti seluruh halaman ke Versi B. Tim bisa memilih untuk:

    • Melanjutkan tes dengan ukuran sampel yang lebih besar untuk mendapatkan kekuatan statistik (statistical power) yang lebih tinggi.

    • Mencoba iterasi desain lain jika peningkatan durasi sesi adalah tujuan utama.

3.3.6 Visualisasi

1. Visualisasi Distribusi (Box Plot)

Visualisasi ini sangat penting untuk menunjukkan sebaran data dan mendeteksi apakah ada outlier (data pencilan). Box plot membantu audiens melihat bahwa meskipun rata-ratanya berbeda, rentang durasi sesi antara Versi A dan B sebenarnya sangat mirip.

Interpretasi Box Plot (Analisis Sebaran & Outlier)

Visualisasi ini memberikan gambaran tentang “kesehatan” dan karakteristik data secara individu.

  • Tumpang Tindih Data (Overlap): Terlihat bahwa area kotak (Interquartile Range) antara Versi A dan Versi B saling tumpang tindih secara signifikan. Ini menunjukkan bahwa meskipun rata-ratanya berbeda, sebagian besar pengguna di kedua versi memiliki perilaku durasi sesi yang serupa.

  • Variabilitas: Versi B memiliki “kotak” yang sedikit lebih panjang dan rentang garis (whiskers) yang lebih lebar. Ini menandakan bahwa durasi sesi pada Versi B lebih bervariasi (kurang konsisten) dibandingkan Versi A.

  • Deteksi Outlier: Titik-titik individu di luar garis menunjukkan adanya beberapa pengguna dengan durasi sesi yang sangat lama atau sangat singkat. Namun, karena sebarannya masih wajar, data ini tetap valid untuk diuji.

2. Visualisasi Perbandingan Rata-Rata (Bar Chart dengan Error Bars)

Grafik ini adalah standar dalam laporan eksperimen. Batang menunjukkan rata-rata, sedangkan garis vertikal (Error Bar) menunjukkan Standar Deviasi. Secara visual, jika error bar antara dua batang saling tumpang tindih secara signifikan, itu adalah indikasi awal bahwa perbedaan tersebut tidak signifikan secara statistik.

Interpretasi Bar Chart dengan Error Bars (Analisis Rata-rata)

Visualisasi ini berfokus pada performa agregat yang biasanya menjadi acuan utama pengambil keputusan.

  • Perbedaan Rata-rata (Mean): Secara visual, batang Versi B (5,4) memang lebih tinggi daripada Versi A (4,8). Ada selisih 0,6 menit yang secara sekilas terlihat seperti sebuah peningkatan.

  • Signifikansi via Error Bars: Garis vertikal (Error Bar) di atas setiap batang mewakili standar deviasi. Perhatikan bahwa ujung bawah garis Versi B jauh lebih rendah daripada ujung atas garis Versi A.

    • Penting: Karena kedua garis ini “saling bersilangan” (tumpang tindih), ini merupakan indikator visual yang kuat bahwa perbedaan 0,6 menit tersebut tidak cukup signifikan secara statistik.
  • Kesimpulan Visual: Perbedaan yang terlihat kemungkinan besar hanya fluktuasi dari sampel kecil (\(n=25\)) dan bukan karena perubahan desain yang benar-benar efektif bagi seluruh populasi pengguna.

4 Studi Kasus 4

4.1 Uji Chi-Square untuk Independensi

Sebuah perusahaan e-commerce meneliti apakah terdapat hubungan antara jenis perangkat yang digunakan dengan preferensi metode pembayaran.

Perangkat / Pembayaran E-Wallet Kartu Kredit COD (Cash on Delivery)
Mobile (HP) 120 80 50
Desktop 60 90 40

4.2 Tugas

  1. Nyatakan Hipotesis Nol (\(H_0\)) dan Hipotesis Alternatif (\(H_1\)).
  2. Identifikasi uji statistik yang tepat.
  3. Hitung statistik Chi-Square (\(\chi^2\)).
  4. Tentukan nilai-\(p\) (p-value) pada tingkat signifikansi \(\alpha = 0,05\).
  5. Interpretasikan hasil tersebut dalam konteks strategi pembayaran digital.

4.3 Jawaban

4.3.1 Formulasi Hipotesis (Null & Alternatif)

Dalam uji independensi Chi-Square, kita menetapkan dua pernyataan yang saling bertolak belakang:

  • Hipotesis Nol (\(H_0\)):“Jenis perangkat dan preferensi metode pembayaran saling bebas (independen).”Artinya: Perangkat yang digunakan pengguna (Mobile atau Desktop) tidak mempengaruhi pilihan metode pembayaran mereka. Pola pembayaran yang kita lihat di data hanyalah kebetulan semata.
  • Hipotesis Alternatif (\(H_1\) atau \(H_a\)):“Jenis perangkat dan preferensi metode pembayaran saling berhubungan (dependen).”Artinya: Terdapat asosiasi yang signifikan antara jenis perangkat dengan metode pembayaran yang dipilih. Pengguna cenderung memilih metode pembayaran tertentu berdasarkan perangkat yang mereka gunakan saat itu.

4.3.2 Identifikasi Uji Statistik

Uji yang tepat adalah Chi-Square Test of Independence. Uji ini digunakan karena kedua variabel (Perangkat dan Metode Pembayaran) adalah data kategorikal (nominal).

4.3.3 Komputasi Statistik Chi-Square (\(\chi^2\))

Pertama, kita hitung total baris dan kolom:

Perangkat E-Wallet Kartu Kredit COD
Mobile 120 80 50
Desktopc 60 90 40
Total Kolom 180 170 90

A. Hitung Nilai Ekspektasi (\(E\)):Rumus: \(E = \frac{(\text{Total Baris} \times \text{Total Kolom})}{\text{Grand Total}}\)

  • \(E_{Mobile, E-Wallet} = \frac{250 \times 180}{440} = 102,27\)
  • \(E_{Mobile, Credit} = \frac{250 \times 170}{440} = 96,59\)
  • \(E_{Mobile, COD} = \frac{250 \times 90}{440} = 51,14\)
  • \(E_{Desktop, E-Wallet} = \frac{190 \times 180}{440} = 77,73\)
  • \(E_{Desktop, Credit} = \frac{190 \times 170}{440} = 73,41\)
  • \(E_{Desktop, COD} = \frac{190 \times 90}{440} = 38,86\)

B. Hitung Nilai \(\chi^2\):Rumus: \(\chi^2 = \sum \frac{(O - E)^2}{E}\)

  • \((120 - 102,27)^2 / 102,27 = 3,07\)
  • \((80 - 96,59)^2 / 96,59 = 2,85\)
  • \((50 - 51,14)^2 / 51,14 = 0,03\)
  • \((60 - 77,73)^2 / 77,73 = 4,04\)
  • \((90 - 73,41)^2 / 73,41 = 3,75\)
  • \((40 - 38,86)^2 / 38,86 = 0,03\)

Total \(\chi^2 \approx 13,77\)

4.3.4 Menentukan Nilai-\(p\) (\(p\)-value)

  • Derajat Kebebasan (\(df\)): \((\text{baris}-1) \times (\text{kolom}-1) = (2-1) \times (3-1) = 2\).
  • Dengan \(\chi^2 = 13,77\) dan \(df = 2\), kita lihat tabel distribusi Chi-Square.
  • Nilai-\(p \approx 0,0010\) (sangat kecil).

Pada \(\alpha = 0,05\), karena \(p\)-value (0,001) < 0,05, maka kita Tolak \(H_0\).

4.3.5 Interpretasi dalam Strategi Pembayaran Digital

Hasil ini menunjukkan ada hubungan yang signifikan antara perangkat yang digunakan dengan cara pembayaran.

  • Temuan Utama: Pengguna Mobile jauh lebih cenderung menggunakan E-Wallet (120 observasi vs 102 ekspektasi), sementara pengguna Desktop lebih memilih Kartu Kredit (90 observasi vs 73 ekspektasi).

  • Strategi Bisnis:

    1. Optimasi Mobile: Tingkatkan kampanye cashback atau promo khusus E-Wallet pada aplikasi mobile karena audiensnya sangat reseptif.

    2. Keamanan Desktop: Karena pengguna desktop lebih menyukai kartu kredit, pastikan antarmuka input data kartu di desktop sangat aman dan memiliki fitur autofill yang lancar.

    3. Cross-Promotion: Dorong pengguna desktop untuk mencoba e-wallet melalui skema integrasi QR code yang bisa di-scan via HP saat mereka checkout di desktop.

4.3.6 Visualisasi

1. Staked Bar Chart

Interpretasi Visualisasi

Visualisasi di atas menyajikan distribusi metode pembayaran secara relatif terhadap jenis perangkat yang digunakan. Meskipun total pengguna berbeda, grafik ini menstandarisasi data ke dalam skala 100% untuk mempermudah perbandingan perilaku.

Terlihat jelas bahwa E-Wallet mendominasi segmen Mobile (warna E-Wallet jauh lebih luas di batang Mobile), sedangkan Kartu Kredit menjadi pilihan utama di segmen Desktop. Perbedaan proporsi yang mencolok ini secara visual mendukung hasil uji Chi-Square yang menyatakan adanya hubungan signifikan antara perangkat dan pilihan pembayaran.

5 Studi Kasus 5

5.1 Kesalahan Tipe I dan Tipe II (Konseptual)

Sebuah perusahaan fintech sedang menguji apakah algoritma deteksi penipuan (fraud detection) yang baru dapat mengurangi transaksi penipuan.

  • \(H_0\): Algoritma baru tidak mengurangi penipuan.
  • \(H_1\): Algoritma baru mengurangi penipuan.

5.2 Tugas

  1. Jelaskan apa yang dimaksud dengan Kesalahan Tipe I \((\alpha)\) dalam konteks ini.
  2. Jelaskan apa yang dimaksud dengan Kesalahan Tipe II \((\beta)\) dalam konteks ini.
  3. Identifikasi kesalahan mana yang lebih merugikan dari perspektif bisnis.
  4. Diskusikan bagaimana ukuran sampel memengaruhi Kesalahan Tipe II.
  5. Jelaskan hubungan antara \(\alpha\), \(\beta\), dan kekuatan statistik (statistical power).

5.3 Jawaban

5.3.1 Kesalahan Tipe I (\(\alpha\)) dalam Konteks Algoritma Baru

Kesalahan Tipe I terjadi jika kita menolak Hipotesis Nol (\(H_0\)), padahal sebenarnya \(H_0\) benar.

  • Dalam konteks ini: Perusahaan menyimpulkan bahwa algoritma baru berhasil mengurangi penipuan, padahal kenyataannya algoritma tersebut tidak memberikan perubahan apa pun.
  • Istilah awam: False Positive. Anda merasa telah menemukan solusi, namun sebenarnya itu hanya kebetulan.

5.3.2 Kesalahan Tipe II (\(\beta\)) dalam Konteks Algoritma Baru

Kesalahan Tipe II terjadi jika kita gagal menolak Hipotesis Nol (\(H_0\)), padahal sebenarnya \(H_0\) salah.

  • Dalam konteks ini: Perusahaan menyimpulkan bahwa algoritma baru gagal mengurangi penipuan, padahal kenyataannya algoritma tersebut sangat efektif dalam mengurangi penipuan.
  • Istilah awam: False Negative. Anda melewatkan solusi yang sebenarnya bagus.

5.3.3 Identifikasi Kesalahan yang Lebih Merugikan (Perspektif Bisnis)

Dari perspektif bisnis fintech, Kesalahan Tipe II (\(\beta\)) biasanya dianggap lebih merugikan, namun tergantung pada biaya operasional:

  • Jika Kesalahan Tipe I terjadi: Perusahaan membuang waktu dan biaya untuk mengimplementasikan sistem baru yang ternyata tidak berguna.
  • Jika Kesalahan Tipe II terjadi (Lebih Berisiko): Perusahaan melewatkan kesempatan untuk menghentikan penipuan. Hal ini menyebabkan kerugian finansial yang berkelanjutan dari transaksi penipuan yang tidak terdeteksi, serta risiko rusaknya reputasi perusahaan di mata nasabah.

5.3.4 Pengaruh Ukuran Sampel terhadap Kesalahan Tipe II

Terdapat hubungan terbalik antara ukuran sampel (\(n\)) dan Kesalahan Tipe II (\(\beta\)):

  • Semakin besar ukuran sampel, maka Kesalahan Tipe II akan semakin kecil.
  • Dengan data yang lebih banyak, uji statistik menjadi lebih sensitif untuk mendeteksi perbedaan atau efek yang sebenarnya ada (sekecil apa pun itu). Dengan kata lain, sampel yang besar memperkecil kemungkinan kita “melewatkan” algoritma yang sebenarnya bagus.

5.3.5 Hubungan antara \(\alpha\), \(\beta\), dan Kekuatan Statistik (Statistical Power)

Ketiga konsep ini saling berkaitan dalam sebuah keseimbangan:

  • Kekuatan Statistik (Power): Didefinisikan sebagai \(1 - \beta\). Ini adalah probabilitas untuk menolak \(H_0\) dengan benar (kemampuan mendeteksi efek yang nyata).
  • Trade-off \(\alpha\) dan \(\beta\): Jika kita mencoba memperkecil \(\alpha\) (agar sangat hati-hati dalam menyimpulkan kesuksesan), maka risiko \(\beta\) akan cenderung meningkat (kita jadi lebih sering melewatkan kesuksesan yang nyata).
  • Meningkatkan Power: Untuk meningkatkan kekuatan statistik (memperkecil \(\beta\)) tanpa mengorbankan \(\alpha\), cara terbaik adalah dengan meningkatkan ukuran sampel.

6 Studi Kasus 6

6.1 P-Value dan Pengambilan Keputusan Statistik

Sebuah evaluasi model prediksi churn (perpindahan pelanggan) menghasilkan hasil sebagai berikut:

  • Statistik Uji (Test Statistic): 2,31
  • P-value: 0,021
  • Tingkat Signifikansi \(\alpha\): 0,05

6.2 Tugas

  1. Jelaskan arti dari p-value dalam konteks ini.
  2. Buatlah sebuah keputusan statistik (apakah menolak atau gagal menolak hipotesis nol).
  3. Terjemahkan keputusan tersebut ke dalam bahasa non-teknis untuk pihak manajemen.
  4. Diskusikan risiko yang muncul jika sampel yang digunakan tidak representatif.
  5. Jelaskan mengapa p-value tidak mengukur besarnya efek (effect size).

6.3 Jawaban

6.3.1 Arti P-value dalam Konteks Ini

P-value sebesar 0,021 berarti: Jika kita berasumsi bahwa model prediksi churn sebenarnya tidak efektif (Hipotesis Nol benar), maka probabilitas untuk mendapatkan hasil uji sebesar 2,31 atau lebih secara kebetulan hanya sebesar 2,1%. Dengan kata lain, hasil yang kita peroleh cukup ekstrem sehingga kecil kemungkinannya terjadi karena faktor kebetulan saja.

6.3.2 Keputusan Statistik

Berdasarkan data yang diperoleh, keputusan statistik yang diambil adalah Menolak Hipotesis Nol (\(H_0\)). Keputusan ini didasarkan pada perbandingan antara P-value (0,021) dengan tingkat signifikansi \(\alpha\) (0,05). Karena \(0,021 < 0,05\), hasil ini berada di dalam wilayah penolakan. Secara lebih mendalam, statistik uji sebesar 2,31 menunjukkan bahwa model prediksi kita berada lebih dari dua standar deviasi dari titik nol, yang memberikan Tingkat Kepercayaan sebesar 97,9% bahwa efektivitas model ini nyata dan bukan sekadar fluktuasi data acak.

Tabel Ringkasan Keputusan

Indikator Nilai Status
Statistik Uji \((Z-score)\) 2,31 Signifikan
P-Value 0,021 Signifikan
Alpha 0,05 Standar
Kesimpulan P-Value < \(\alpha\) TOLAK H0

6.3.3 Interpretasi Bahasa Non-Teknis (Manajemen)

Hasil analisis menunjukkan bahwa model prediksi churn kita bekerja dengan sangat baik. Kita memiliki bukti yang kuat (tingkat keyakinan sekitar 98%) bahwa model ini mampu mendeteksi pelanggan yang akan pindah secara signifikan, bukan hanya sekadar tebakan acak. Oleh karena itu, model ini layak untuk segera diimplementasikan dalam strategi retensi pelanggan kita.

6.3.4 Risiko Sampel Tidak Representatif

Jika sampel yang digunakan tidak mewakili seluruh populasi (misalnya hanya mengambil data pelanggan lama), maka muncul risiko besar:

  • Generalisasi yang Salah: Model mungkin terlihat sangat akurat pada data sampel, namun gagal total saat diterapkan pada pelanggan baru atau segmen pasar yang berbeda.

  • Bias Hasil: Keputusan statistik menjadi tidak valid karena P-value yang rendah bisa jadi merupakan hasil dari bias seleksi, bukan karena efektivitas model yang sebenarnya.

6.3.5 Mengapa P-value Tidak Mengukur Besarnya Efek (Effect Size)?

P-value hanya memberi tahu kita apakah ada bukti bahwa sebuah efek itu nyata (signifikansi), tetapi tidak memberi tahu seberapa besar dampak efek tersebut.

  • Contoh: Sebuah model bisa memiliki P-value yang sangat kecil (sangat signifikan) karena ukuran sampel yang masif, namun ternyata hanya mampu mengurangi churn sebesar 0,001%. Secara statistik itu signifikan, namun secara bisnis efek tersebut mungkin terlalu kecil untuk dianggap berharga.

6.3.6 Visualisasi Kurva Distribusi Normal

Visualisasi ini secara intuitif menunjukkan di mana posisi hasil uji kita (2,31) terhadap batas kritis yang ditentukan oleh \(\alpha\) (0,05).

Grafik di atas menunjukkan distribusi normal standar yang mewakili pengujian model churn. Garis putus-putus biru mewakili Statistik Uji (2,31) kita, yang terlihat masuk jauh ke dalam Area Penolakan merah (batas kritis \(\alpha = 0,05\)). Karena posisi statistik uji berada di area merah dan P-value (0,021) lebih kecil dari 0,05, kita secara visual dapat mengonfirmasi bahwa efektivitas model ini nyata dan signifikan secara statistik.

7 Referensi

  1. Walpole, R. E., Myers, R. H., Myers, S. L., & Ye, K. (2012). Probability & Statistics for Engineers & Scientists (9th ed.). Pearson Education.
  • Link Akses: https://archive.org/details/probabilitystati0000walp_h7o1

  • Relevansi: Digunakan untuk menjawab Tugas 1.3 dan Tugas 2.3. Buku ini menyediakan rumus dasar perhitungan statistik Z dan statistik t. Selain itu, buku ini menjadi referensi utama dalam menentukan nilai kritis (seperti 1,96 untuk Z dan 2,262 untuk t) melalui tabel distribusi statistik yang terdapat di bagian lampirannya.

2.Montgomery, D. C., & Runger, G. C. (2010). Applied Statistics and Probability for Engineers (5th ed.). John Wiley & Sons.

  1. Anderson, D. R., Sweeney, D. J., Williams, T. A., Camm, J. D., & Cochran, J. J. (2018). Statistics for Business & Economics. Cengage Learning.
  1. Albert, W., & Tullis, T. (2013). Measuring the User Experience: Collecting, Analyzing, and Presenting Usability Metrics. Morgan Kaufmann.
  1. OpenStax. (2022). Introductory Statistics. Rice University.
  • Link Akses: https://openstax.org/details/books/introductory-statistics

  • Relevansi: Digunakan untuk menjawab Studi Kasus 1, 3, dan 4. Referensi ini memberikan landasan teori mengenai distribusi data, penghitungan Standard Deviation, dan prosedur formal dalam uji hipotesis untuk membandingkan dua kelompok data.

  1. Investopedia Staff. (2023). Type I and Type II Errors in Statistical Hypothesis Testing.
  • Link Akses: https://www.investopedia.com/terms/t/type-1-error.asp

  • Relevansi: Digunakan untuk menjawab Studi Kasus 5. Referensi ini sangat relevan untuk mengidentifikasi kerugian dari perspektif bisnis (fintech) ketika terjadi kesalahan deteksi penipuan (fraud detection).

  1. Gallo, A. (2016). A Refresher on Statistical Significance. Harvard Business Review.
  1. Bakti Siregar, M.Sc., CDS. Statistical Inference
LS0tDQp0aXRsZTogIiINCmF1dGhvcjogIkNoYW5kcmEgUml6YWwgQWxhbXN5YWggKDUyMjUwMDY4KSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZSANCiAgICBjc3M6IGNzcyBwbHVzIGh0bWwuY3NzDQogICAgdGh1bWJuYWlsczogdHJ1ZSAgICANCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIA0KLS0tDQo8c3R5bGU+DQovKiA2LiBNZW1wZXJiYWlraSB0YW1waWxhbiB0YWJlbCBqaWthIGFkYSAqLw0KICB0YWJsZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzI1MjUyNSAhaW1wb3J0YW50Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQgIWltcG9ydGFudDsNCiAgfQ0KICB0aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogICMyZDhjZmYgIWltcG9ydGFudDsNCiAgfQ0KPC9zdHlsZT4NCjxoMSBjbGFzcz0iaGVhZGVyLXRpdGxlIj5UdWdhcyBNaW5nZ3UgMTQgfiBTdGF0aXN0aWNhbCBJbmZlcmVuY2VzPC9oMT4NCiAgDQogIDxkaXYgY2xhc3M9InByb2ZpbGUtY2FyZCI+DQogIDxkaXYgY2xhc3M9InByb2ZpbGUtaW1hZ2UiPg0KICA8aW1nIGlkPSJGb3RvIiBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jaGFuZHJhMjQwMjA1LXN1ZG8vQ2hhbmRyYTMvbWFpbi9HYW50ZW5nLmpwZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCiAgPC9kaXY+DQogIA0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWluZm8iPg0KICA8aDI+Q2hhbmRyYSBSaXphbCBBbGFtc3lhaDwvaDI+DQogIDxwPlN0dWRlbnQgTWFqb3JpbmcgaW4gRGF0YSBTY2llbmNlIGF0IElUU0I8L3A+DQogIDxwPioqTklNKio6IDUyMjUwMDY4PC9QPg0KICA8UD4qKkVtYWlsKio6IGNoYW5kcmEyNDAyMDVAZ21haWwuY29tPC9wPg0KICANCiAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWJsdWUiPlIgUHJvZ3JhbW1pbmc8L3NwYW4+DQogIDxzcGFuIGNsYXNzPSJiYWRnZSBiYWRnZS1yZWQiPkRhdGEgU2NpZW5jZTwvc3Bhbj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLWdyZWVuIj5TdGF0aXN0aWNzPC9zcGFuPg0KICA8L2Rpdj4NCiAgPC9kaXY+DQogIDwvZGl2Pg0KLS0tICANCg0KIyBTdHVkaSBLYXN1cyAxDQoNCiMjIFVqaSBaIFNhdHUgU2FtcGVsIChIaXBvdGVzaXMgU3RhdGlzdGlrKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KDQpTZWJ1YWggcGxhdGZvcm0gcGVtYmVsYWphcmFuIGRpZ2l0YWwgbWVuZ2tsYWltIGJhaHdhIHJhdGEtcmF0YSB3YWt0dSBiZWxhamFyIGhhcmlhbiBwZW5nZ3VuYW55YSBhZGFsYWggMTIwIG1lbml0LiBCZXJkYXNhcmthbiBjYXRhdGFuIGhpc3RvcmlzLCBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgZGlrZXRhaHVpIHNlYmVzYXIgMTUgbWVuaXQuU2VidWFoIHNhbXBlbCBhY2FrIGRhcmkgNjQgcGVuZ2d1bmEgbWVudW5qdWtrYW4gcmF0YS1yYXRhIHdha3R1IGJlbGFqYXIgc2ViZXNhciAxMTYgbWVuaXQuDQoNCjwvZGl2Pg0KDQojIyBUdWdhcw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KDQoxLiBTdXN1bmxhaCBIaXBvdGVzaXMgTm9sICgkSF8wJCkgZGFuIEhpcG90ZXNpcyBBbHRlcm5hdGlmICgkSF8xJCkuDQoyLiBJZGVudGlmaWthc2kgdWppIHN0YXRpc3RpayB5YW5nIHRlcGF0IGRhbiBiZXJpa2FuIGFsYXNhbiBhdGFzIHBpbGloYW5tdS4NCjMuIEhpdHVuZyBzdGF0aXN0aWsgdWppIGRhbiBwLXZhbHVlIGRlbmdhbiBtZW5nZ3VuYWthbiAkXGFscGhhID0gMCwwNSQuDQo0LiBOeWF0YWthbiBrZXB1dHVzYW4gc3RhdGlzdGlrLW55YSAoYXBha2FoIG1lbm9sYWsgYXRhdSBnYWdhbCBtZW5vbGFrICRIXzAkKS4NCjUuIEludGVycHJldGFzaWthbiBoYXNpbG55YSBkYWxhbSBrb250ZWtzIGFuYWxpdGlrIGJpc25pcy4NCg0KPC9kaXY+DQoNCiMjIEphd2FiYW4NCg0KIyMjIE1lbnl1c3VuIEhpcG90ZXNpcyBOb2wgKCRIXzAkKSBkYW4gSGlwb3Rlc2lzIEFsdGVybmF0aWYgKCRIXzEkKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KDQpEYWxhbSBrb250ZWtzIGluaSwga2l0YSBpbmdpbiBtZW5ndWppIGFwYWthaCBrbGFpbSByYXRhLXJhdGEgd2FrdHUgYmVsYWphciAxMjAgbWVuaXQgbWFzaWggYmVybGFrdSBhdGF1IHN1ZGFoIGJlcnViYWguDQoNCiogSGlwb3Rlc2lzIE5vbCAoJEhfMCQpOiAkXG11ID0gMTIwJChSYXRhLXJhdGEgd2FrdHUgYmVsYWphciBoYXJpYW4gcGVuZ2d1bmEgc2FtYSBkZW5nYW4gMTIwIG1lbml0KS4NCiogSGlwb3Rlc2lzIEFsdGVybmF0aWYgKCRIXzEkKTogJFxtdSBcbmVxIDEyMCQoUmF0YS1yYXRhIHdha3R1IGJlbGFqYXIgaGFyaWFuIHBlbmdndW5hIHN1ZGFoIHRpZGFrIHNhbWEgbGFnaSBkZW5nYW4gMTIwIG1lbml0IC0gVWppIER1YSBBcmFoKS4NCg0KDQo8L2Rpdj4NCg0KIyMjIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrIHlhbmcgVGVwYXQNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCg0KVWppIHN0YXRpc3RpayB5YW5nIHRlcGF0IGFkYWxhaCBVamkgWiBTYXR1IFNhbXBlbCAoT25lLVNhbXBsZSBaLVRlc3QpLg0KDQpBbGFzYW46DQoNCiogU3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgZGlrZXRhaHVpLCB5YWl0dSBzZWJlc2FyIDE1IG1lbml0Lg0KKiBVa3VyYW4gc2FtcGVsIGN1a3VwIGJlc2FyICgkbiBcZ2VxIDMwJCksIGRhbGFtIGthc3VzIGluaSAkbiA9IDY0JCwgc2VoaW5nZ2EgbWVudXJ1dCBUZW9yZW1hIExpbWl0IFB1c2F0LCBkaXN0cmlidXNpIHJhdGEtcmF0YSBzYW1wZWwgYWthbiBtZW5kZWthdGkgZGlzdHJpYnVzaSBub3JtYWwuDQoNCg0KPC9kaXY+DQoNCiMjIyBQZXJoaXR1bmdhbiBTdGF0aXN0aWsgVWppIGRhbiBQLVZhbHVlDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoNCk1hcmkga2l0YSBoaXR1bmcgbWVuZ2d1bmFrYW4gZGF0YSB5YW5nIHRlcnNlZGlhOg0KDQoqICRcbXVfMCA9IDEyMCQNCiogJFxzaWdtYSA9IDE1JA0KKiAkbiA9IDY0JA0KKiAkXGJhcnt4fSA9IDExNiQNCiogJFxhbHBoYSA9IDAsMDUkDQoNCkEuIE1lbmdoaXR1bmcgTmlsYWkgWiAoU3RhdGlzdGlrIFVqaSkNCg0KUnVtdXMgeWFuZyBkaWd1bmFrYW4gYWRhbGFoOg0KDQokJFogPSBcZnJhY3tcYmFye3h9IC0gXG11XzB9e1xzaWdtYSAvIFxzcXJ0e259fSQkJCRaID0gXGZyYWN7MTE2IC0gMTIwfXsxNSAvIFxzcXJ0ezY0fX0kJCQkWiA9IFxmcmFjey00fXsxNSAvIDh9JCQkJFogPSBcZnJhY3stNH17MSw4NzV9JCQkWiBcYXBwcm94IC0yLDEzMyQNCg0KQi4gTWVuZ2hpdHVuZyBQLVZhbHVlDQoNClVudHVrIHVqaSBkdWEgYXJhaCBkZW5nYW4gJFogPSAtMiwxMyQ6DQoNCiogQ2FyaSBuaWxhaSBwZWx1YW5nICRQKFogPCAtMiwxMykkIHBhZGEgdGFiZWwgZGlzdHJpYnVzaSBaLCB5YWl0dSBzZWtpdGFyIDAsMDE2Ni4NCiogS2FyZW5hIGluaSB1amkgZHVhIGFyYWgsIG1ha2EgcC12YWx1ZSA9ICQyIFx0aW1lcyAwLDAxNjYkLnAtdmFsdWUgPSAwLDAzMzINCg0KDQo8L2Rpdj4NCg0KIyMjIEtlcHV0dXNhbiBTdGF0aXN0aWsNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCg0KQmFuZGluZ2thbiBwLXZhbHVlIGRlbmdhbiBuaWxhaSBzaWduaWZpa2Fuc2kgKCRcYWxwaGEkKToNCg0KKiAkXGFscGhhID0gMCwwNSQNCiogcC12YWx1ZSA9IDAsMDMzMg0KDQpLZXB1dHVzYW46IEthcmVuYSBwLXZhbHVlICgwLDAzMzIpIDwgJFxhbHBoYSQgKDAsMDUpLCBtYWthIGtlcHV0dXNhbm55YSBhZGFsYWggVG9sYWsgJEhfMCQuDQoNCjwvZGl2Pg0KDQojIyMgSW50ZXJwcmV0YXNpIGRhbGFtIEtvbnRla3MgQW5hbGl0aWsgQmlzbmlzDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoNCkJlcmRhc2Fya2FuIGFuYWxpc2lzIHN0YXRpc3RpayB5YW5nIGRpbGFrdWthbiwgdGVyZGFwYXQgYnVrdGkgeWFuZyBjdWt1cCBrdWF0IChwYWRhIHRpbmdrYXQgc2lnbmlmaWthbnNpIDUlKSB1bnR1ayBtZW55YXRha2FuIGJhaHdhIGtsYWltIHBsYXRmb3JtIHBlbWJlbGFqYXJhbiBkaWdpdGFsIG1lbmdlbmFpIHJhdGEtcmF0YSB3YWt0dSBiZWxhamFyIDEyMCBtZW5pdCB0aWRhayBha3VyYXQuDQoNClJla29tZW5kYXNpIEJpc25pczogRGF0YSBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEgd2FrdHUgYmVsYWphciBwZW5nZ3VuYSAoMTE2IG1lbml0KSBzZWNhcmEgc2lnbmlmaWthbiBsZWJpaCByZW5kYWggZGFyaSB5YW5nIGRpa2xhaW0uIEJhZ2kgdGltIGFuYWxpdGlrIGJpc25pcywgaW5pIGFkYWxhaCBzaW55YWwgdW50dWs6DQoNCjEuIEV2YWx1YXNpIFN0cmF0ZWdpOiBNZW5pbmphdSBrZW1iYWxpIGFwYWthaCBrb250ZW4gcGVtYmVsYWphcmFuIHNhYXQgaW5pIGt1cmFuZyBtZW5hcmlrIHNlaGluZ2dhIHdha3R1IGJlbGFqYXIgbWVudXJ1bi4NCg0KMi4gS29yZWtzaSBNYXJrZXRpbmc6IE1lbnllc3VhaWthbiBrbGFpbSBwZW1hc2FyYW4gYWdhciBsZWJpaCB0cmFuc3BhcmFuIGRhbiBzZXN1YWkgZmFrdGEgbGFwYW5nYW4gZ3VuYSBtZW5qYWdhIGtlcGVyY2F5YWFuIHBlbmdndW5hLg0KDQozLiBBbmFsaXNpcyBLb2hvcnQ6IE1lbmdpZGVudGlmaWthc2kgc2VnbWVuIHBlbmdndW5hIG1hbmEgeWFuZyB3YWt0dSBiZWxhamFybnlhIHBhbGluZyByZW5kYWggdW50dWsgZGliZXJpa2FuIGludGVydmVuc2kgYXRhdSBub3RpZmlrYXNpIHBlbmdpbmdhdC4NCg0KDQo8L2Rpdj4NCg0KIyMjIFZpc3VhbGlzYXNpDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgMS4gTG9hZCBMaWJyYXJ5IHlhbmcgZGlidXR1aGthbg0KIyBKaWthIGJlbHVtIHRlcmluc3RhbGwsIGphbGFua2FuOiBpbnN0YWxsLnBhY2thZ2VzKGMoImdncGxvdDIiLCAicGxvdGx5IikpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHBsb3RseSkNCg0KIyAyLiBQYXJhbWV0ZXIgU3RhdGlzdGlrIChCZXJkYXNhcmthbiBTb2FsKQ0KbXVfbm9sIDwtIDAgICAgICAgICAgIyBTdGFuZGFyIE5vcm1hbCAoWikgbWVtaWxpa2kgbWVhbiAwDQpzaWdtYSA8LSAxICAgICAgICAgICAjIFN0YW5kYXIgTm9ybWFsIChaKSBtZW1pbGlraSBTRCAxDQphbHBoYSA8LSAwLjA1DQp6X2hpdHVuZyA8LSAtMi4xMzMNCnpfa3JpdGlzIDwtIHFub3JtKDEgLSBhbHBoYS8yKSAjIE5pbGFpIGtyaXRpcyB1bnR1ayAwLjA1ICjCsTEuOTYpDQoNCiMgMy4gTWVtYnVhdCBEYXRhIHVudHVrIEt1cnZhIE5vcm1hbA0KeCA8LSBzZXEoLTQsIDQsIGxlbmd0aC5vdXQgPSAxMDAwKQ0KeSA8LSBkbm9ybSh4KQ0KZGYgPC0gZGF0YS5mcmFtZSh4LCB5KQ0KDQojIDQuIE1lbWJ1YXQgUGxvdCBkZW5nYW4gZ2dwbG90Mg0KcCA8LSBnZ3Bsb3QoZGYsIGFlcyh4ID0geCwgeSA9IHkpKSArDQogICMgR2FtYmFyIGt1cnZhIHV0YW1hDQogIGdlb21fbGluZShjb2xvciA9ICJibGFjayIsIHNpemUgPSAwLjgpICsNCiAgDQogICMgQXJzaXIgV2lsYXlhaCBQZW5vbGFrYW4gKFNpc2kgS2lyaSkNCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoZGYsIHggPD0gLXpfa3JpdGlzKSwgYWVzKGZpbGwgPSAiV2lsYXlhaCBQZW5vbGFrYW4iKSwgYWxwaGEgPSAwLjUpICsNCiAgDQogICMgQXJzaXIgV2lsYXlhaCBQZW5vbGFrYW4gKFNpc2kgS2FuYW4pDQogIGdlb21fYXJlYShkYXRhID0gc3Vic2V0KGRmLCB4ID49IHpfa3JpdGlzKSwgYWVzKGZpbGwgPSAiV2lsYXlhaCBQZW5vbGFrYW4iKSwgYWxwaGEgPSAwLjUpICsNCiAgDQogICMgR2FyaXMgWi1IaXR1bmcNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IHpfaGl0dW5nLCBjb2xvciA9ICJaLUhpdHVuZyAoLTIuMTMzKSIpLCANCiAgICAgICAgICAgICBsaW5ldHlwZSA9ICJkYXNoZWQiLCBzaXplID0gMSkgKw0KICANCiAgIyBQZW5nYXR1cmFuIFdhcm5hIGRhbiBUZW1hDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIldpbGF5YWggUGVub2xha2FuIiA9ICJyZWQiKSkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiWi1IaXR1bmcgKC0yLjEzMykiID0gImJsdWUiKSkgKw0KICBsYWJzKHRpdGxlID0gIlZpc3VhbGlzYXNpIFVqaSBaIFNhdHUgU2FtcGVsIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJaLUhpdHVuZyBqYXR1aCBkaSBXaWxheWFoIFBlbm9sYWthbiIsDQogICAgICAgeCA9ICJOaWxhaSBaIiwNCiAgICAgICB5ID0gIkRlbnNpdHkiLA0KICAgICAgIGZpbGwgPSAiIiwgY29sb3IgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCg0KIyA1LiBNZW5ndWJhaCBnZ3Bsb3QgbWVuamFkaSBQbG90IEludGVyYWt0aWYgZGVuZ2FuIFBsb3RseQ0KZ2dwbG90bHkocCkgJT4lIA0KICBsYXlvdXQoYW5ub3RhdGlvbnMgPSBsaXN0KA0KICAgIGxpc3QoeCA9IHpfaGl0dW5nLCB5ID0gMC4xLCB0ZXh0ID0gIlotSGl0dW5nIiwgc2hvd2Fycm93ID0gVFJVRSwgYXJyb3doZWFkID0gMiksDQogICAgbGlzdCh4ID0gLXpfa3JpdGlzLCB5ID0gMC4wMiwgdGV4dCA9ICItMS45NiIsIHNob3dhcnJvdyA9IEZBTFNFKSwNCiAgICBsaXN0KHggPSB6X2tyaXRpcywgeSA9IDAuMDIsIHRleHQgPSAiMS45NiIsIHNob3dhcnJvdyA9IEZBTFNFKQ0KICApKQ0KYGBgDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnByZXRhc2kgVmlzdWFsaXNhc2kgR3JhZmlrIERpc3RyaWJ1c2kgTm9ybWFsDQoNCkdyYWZpayB0ZXJzZWJ1dCBtZW5nZ2FtYmFya2FuIERpc3RyaWJ1c2kgTm9ybWFsIFN0YW5kYXIgKFopIHlhbmcgbWVuamFkaSBkYXNhciBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gdWppIHN0YXRpc3RpayBraXRhLiBCZXJpa3V0IGFkYWxhaCBrb21wb25lbiB1dGFtYSBkYW4gbWFrbmFueWE6DQoNCjEuIEFyZWEgUGVub2xha2FuIChab25hIE1lcmFoKUFyZWEgYmVyd2FybmEgbWVyYWggcGFkYSBrZWR1YSB1anVuZyAoZWtvcikga3VydmEgbWV3YWtpbGkgVGluZ2thdCBTaWduaWZpa2Fuc2kgKCRcYWxwaGEgPSAwLDA1JCkuDQoNCiAgICAqIEthcmVuYSBpbmkgYWRhbGFoIHVqaSBkdWEgYXJhaCwgdG90YWwgNSUgYXJlYSBkaWJhZ2kgbWVuamFkaSBkdWEsIHlhaXR1IDIsNSUgZGkgdWp1bmcga2lyaSBkYW4gMiw1JSBkaSB1anVuZyBrYW5hbi4NCiAgICAqIEdhcmlzIGJhdGFzIHlhbmcgbWVtaXNhaGthbiB6b25hIHB1dGloIChwZW5lcmltYWFuKSBkYW4gem9uYSBtZXJhaCAocGVub2xha2FuKSBkaXNlYnV0IE5pbGFpIEtyaXRpcywgeWFpdHUgJC0xLDk2JCBkYW4gJCsxLDk2JC4NCg0KMi4gUG9zaXNpIFN0YXRpc3RpayBVamkgKEdhcmlzIEJpcnUgUHV0dXMtcHV0dXMpDQoNCiAgR2FyaXMgYmlydSB2ZXJ0aWthbCBtZW51bmp1a2thbiBoYXNpbCBwZXJoaXR1bmdhbiBraXRhLCB5YWl0dSAkWiA9IC0yLDEzMyQuDQoNCiAgKiBTZWNhcmEgVmlzdWFsOiBHYXJpcyBpbmkgamF0dWggZGkgZGFsYW0gWm9uYSBNZXJhaCAoc2lzaSBraXJpKS4NCiAgICANCiAgKiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHJhdGEtcmF0YSBzYW1wZWwgc2ViZXNhciAxMTYgbWVuaXQgYmVyYWRhIHNhbmdhdCBqYXVoIGRpIGx1YXIgamFuZ2thdWFuIHlhbmcgYmlzYSBkaWFuZ2dhcCAibm9ybWFsIiBhdGF1ICJ3YWphciIgamlrYSBrbGFpbSAxMjAgbWVuaXQgbWVtYW5nIGJlbmFyLg0KDQozLiBNYWtuYSBQLVZhbHVlIChMdWFzIEFyZWEpDQoNCiAgICAqIFAtdmFsdWUgc2ViZXNhciAwLDAzMzIgZGlyZXByZXNlbnRhc2lrYW4gb2xlaCBsdWFzIGFyZWEgZGkgc2ViZWxhaCBraXJpIGdhcmlzIGJpcnUgKGRhbiBhcmVhIHlhbmcgc2V0YXJhIGRpIHNpc2kga2FuYW4pLg0KICAgICogS2FyZW5hIGx1YXMgYXJlYSBiaXJ1IChwLXZhbHVlKSBsZWJpaCBrZWNpbCBkYXJpcGFkYSB0b3RhbCBsdWFzIGFyZWEgbWVyYWggKCRcYWxwaGEkKSwgbWFrYSBkZXZpYXNpIGRhdGEgc2FtcGVsIGluaSBkaWFuZ2dhcCBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsuDQo8L2Rpdj4NCg0KDQojIFN0dWRpIEthc3VzIDINCg0KIyMgVWppLXQgU2F0dSBTYW1wZWwgKFxzaWdtYSBUaWRhayBEaWtldGFodWksIFNhbXBlbCBLZWNpbCkNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NClNlYnVhaCBUaW0gUmlzZXQgVVggbWVueWVsaWRpa2kgYXBha2FoIHJhdGEtcmF0YSB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgZGFyaSBhcGxpa2FzaSBzZWx1bGVyIGJhcnUgYmVyYmVkYSBkYXJpIDEwIG1lbml0Lg0KDQpEYXRhIGJlcmlrdXQgZGlrdW1wdWxrYW4gZGFyaSAxMCBwZW5nZ3VuYSAoZGFsYW0gbWVuaXQpOg0KDQokOS4yLCAxMC41LCA5LjgsIDEwLjEsIDkuNiwgMTAuMywgOS45LCA5LjcsIDEwLjAsIDkuNSQNCiAgICANCjwvZGl2Pg0KDQojIyBUdWdhcw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KMS4gVGVudHVrYW4gSF8wIGRhbiBIXzEgKHVqaSBkdWEgYXJhaC90d28tdGFpbGVkKS4NCjIuIFRlbnR1a2FuIHVqaSBoaXBvdGVzaXMgeWFuZyB0ZXBhdC4NCjMuIEhpdHVuZyBzdGF0aXN0aWstdCBkYW4gcC12YWx1ZSBwYWRhICRcYWxwaGE9MC4wNSQuDQo0LiBCdWF0IGtlcHV0dXNhbiBzdGF0aXN0aWsuDQo1LiBKZWxhc2thbiBiYWdhaW1hbmEgdWt1cmFuIHNhbXBlbCBtZW1lbmdhcnVoaSBrZWFuZGFsYW4gaW5mZXJlbnNpYWwuDQo8L2Rpdj4NCg0KIyMgSmF3YWJhbg0KDQojIyMgIERlZmluaXNpIEhpcG90ZXNpcyAoJEhfMCQgZGFuICRIXzEkKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KUGVuZ3VqaWFuIGluaSBkaWxha3VrYW4gc2VjYXJhIGR1YSBhcmFoICh0d28tdGFpbGVkKSB1bnR1ayBtZW5kZXRla3NpIGFwYWthaCByYXRhLXJhdGEgd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzIGJlcmJlZGEgKGJpc2EgbGViaWggY2VwYXQgYXRhdSBsZWJpaCBsYW1iYXQpIGRhcmkgc3RhbmRhciAxMCBtZW5pdC4NCg0KKiBIaXBvdGVzaXMgTm9sICgkSF8wJCk6ICRcbXUgPSAxMCQgKFJhdGEtcmF0YSB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgc2FtYSBkZW5nYW4gMTAgbWVuaXQpLg0KKiBIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoJEhfMSQpOiAkXG11IFxuZXEgMTAkIChSYXRhLXJhdGEgd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzIHRpZGFrIHNhbWEgZGVuZ2FuIDEwIG1lbml0KS4NCjwvZGl2Pg0KDQojIyMgIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrIHlhbmcgVGVwYXQNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NClVqaSBzdGF0aXN0aWsgeWFuZyBkaWd1bmFrYW4gYWRhbGFoIFVqaS10IFNhdHUgU2FtcGVsIChPbmUtU2FtcGxlIFQtVGVzdCkuDQoNCkFsYXNhbiBQZW1pbGloYW46DQoNCjEuIFN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoJFxzaWdtYSQpIHRpZGFrIGRpa2V0YWh1aS4NCjIuIFVrdXJhbiBzYW1wZWwga2VjaWwgKCRuIDwgMzAkKSwgZGFsYW0ga2FzdXMgaW5pICRuID0gMTAkLg0KMy4gRGF0YSBkaWFuZ2dhcCBiZXJhc2FsIGRhcmkgZGlzdHJpYnVzaSBub3JtYWwgKGFzdW1zaSBkYXNhciB1bnR1ayBkYXRhIGR1cmFzaSBkYWxhbSBzYW1wZWwga2VjaWwpLg0KPC9kaXY+DQoNCiMjIyBQZXJoaXR1bmdhbiBTdGF0aXN0aWsgZGFuIFAtVmFsdWUgKCRcYWxwaGEgPSAwLDA1JCkNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCkRhdGEgU2FtcGVsICgkbj0xMCQpOiA5LjIsIDEwLjUsIDkuOCwgMTAuMSwgOS42LCAxMC4zLCA5LjksIDkuNywgMTAuMCwgOS41DQoNCkEuIExhbmdrYWggUGVyaGl0dW5nYW4gRGFzYXI6DQoNCiAgICogUmF0YS1yYXRhIFNhbXBlbCAoJFxiYXJ7eH0kKTogJDksODYkIG1lbml0Lg0KICAgKiBTdGFuZGFyIERldmlhc2kgU2FtcGVsICgkcyQpOiAkXGFwcHJveCAwLDM5NSQgbWVuaXQuDQogICAqIERlcmFqYXQgS2ViZWJhc2FuICgkZGYkKTogJG4gLSAxID0gOSQuDQogICANCkIuIE1lbmdoaXR1bmcgU3RhdGlzdGlrLXQgKCR0X3toaXR1bmd9JCk6DQoNClJ1bXVzOg0KJCR0ID0gXGZyYWN7XGJhcnt4fSAtIFxtdV8wfXtzIC8gXHNxcnR7bn19JCQkJHQgPSBcZnJhY3s5LDg2IC0gMTB9ezAsMzk1IC8gXHNxcnR7MTB9fSQkJCR0ID0gXGZyYWN7LTAsMTR9ezAsMTI1fSQkJHRfe2hpdHVuZ30gXGFwcHJveCAtMSwxMiQNCg0KQy4gTWVuZW50dWthbiBQLVZhbHVlOg0KDQpCZXJkYXNhcmthbiB0YWJlbCBkaXN0cmlidXNpLXQgZGVuZ2FuICRkZiA9IDkkIGRhbiAkdCA9IC0xLDEyJDoNCiogJFBcdGV4dHstdmFsdWV9IFxhcHByb3ggMCwyOTEkIChEdWEgYXJhaCkuDQo8L2Rpdj4NCg0KIyMjICBLZXB1dHVzYW4gU3RhdGlzdGlrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpLaXRhIG1lbWJhbmRpbmdrYW4gJFBcdGV4dHstdmFsdWV9JCBkZW5nYW4gJFxhbHBoYSQ6DQoNCiogJFBcdGV4dHstdmFsdWV9ICgwLDI5MSkgPiBcYWxwaGEgKDAsMDUpJC4NCg0KS2VwdXR1c2FuOiBHYWdhbCBNZW5vbGFrICRIXzAkLg0KDQpLZXNpbXB1bGFuOiBUaWRhayBhZGEgYnVrdGkgc3RhdGlzdGlrIHlhbmcgY3VrdXAgcGFkYSB0aW5na2F0IHNpZ25pZmlrYW5zaSA1JSB1bnR1ayBtZW55YXRha2FuIGJhaHdhIHJhdGEtcmF0YSB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgcGFkYSBhcGxpa2FzaSBiYXJ1IGJlcmJlZGEgc2VjYXJhIHNpZ25pZmlrYW4gZGFyaSAxMCBtZW5pdC4NCjwvZGl2Pg0KDQojIyMgUGVuZ2FydWggVWt1cmFuIFNhbXBlbCB0ZXJoYWRhcCBSZWxpYWJpbGl0YXMgSW5mZXJlbnNpYWwNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NClVrdXJhbiBzYW1wZWwgbWVtaWxpa2kgcGVyYW4ga3J1c2lhbCBkYWxhbSBrZWFuZGFsYW4gaGFzaWwgc3RhdGlzdGlrOg0KDQoxLiBNYXJnaW4gb2YgRXJyb3I6IFNhbXBlbCBrZWNpbCAoJG49MTAkKSBtZW5naGFzaWxrYW4gc3RhbmRhciBlcnJvciB5YW5nIGxlYmloIGJlc2FyLiBIYWwgaW5pIG1lbWJ1YXQgaW50ZXJ2YWwga2VwZXJjYXlhYW4gbWVuamFkaSBsZWJpaCBsZWJhciBkYW4gdWppIHN0YXRpc3RpayBtZW5qYWRpIGt1cmFuZyBzZW5zaXRpZiAoa3VyYW5nIHBvd2VyZnVsKSBkYWxhbSBtZW5kZXRla3NpIHBlcmJlZGFhbiB5YW5nIHNlYmVuYXJueWEgYWRhLg0KMi4gU3RhYmlsaXRhcyBFc3RpbWFzaTogU2VtYWtpbiBiZXNhciBzYW1wZWwsIHNlbWFraW4gc3RhYmlsIG5pbGFpIHJhdGEtcmF0YSBkYW4gc3RhbmRhciBkZXZpYXNpbnlhIGRhbGFtIG1lcmVwcmVzZW50YXNpa2FuIHBvcHVsYXNpIHlhbmcgc2ViZW5hcm55YS4NCjMuIEh1a3VtIEJpbGFuZ2FuIEJlc2FyOiBEZW5nYW4gbWVuYW1iYWggdWt1cmFuIHNhbXBlbCwgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGFrYW4gc2VtYWtpbiBtZW5kZWthdGkgZGlzdHJpYnVzaSBub3JtYWwgc2VjYXJhIHNlbXB1cm5hLCBzZWhpbmdnYSBoYXNpbCBpbmZlcmVuc2lueWEgbWVuamFkaSBsZWJpaCByZWxpYWJlbCBkYW4gb2JqZWt0aWYuDQo8L2Rpdj4NCg0KIyMjIFZpc3VhbGlzYXNpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoqKlZpc3VhbGlzYXNpIFRlb3JldGlzOiBLdXJ2YSBEaXN0cmlidXNpLXQqKg0KDQpWaXN1YWxpc2FzaSBpbmkgZGlndW5ha2FuIHVudHVrIG1lbmplbGFza2FuIGxvZ2lrYSBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gKFVqaSBIaXBvdGVzaXMpLg0KPC9kaXY+DQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgLS0tIEtvZGluZ2FuIDE6IEt1cnZhIERpc3RyaWJ1c2ktdCAtLS0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KDQojIFBhcmFtZXRlciBkYXJpIFN0dWRpIEthc3VzIDINCmFscGhhIDwtIDAuMDUNCmRmIDwtIDkgIyAobiAtIDEpDQp0X2hpdHVuZyA8LSAtMS4xMjENCnRfa3JpdGlzIDwtIHF0KDEgLSBhbHBoYS8yLCBkZikgIyBCYXRhcyDCsTIuMjYyDQoNCiMgTWVtYnVhdCBkYXRhIGt1cnZhDQp4X3ZhbHMgPC0gc2VxKC00LCA0LCBsZW5ndGgub3V0ID0gMTAwMCkNCnlfdmFscyA8LSBkdCh4X3ZhbHMsIGRmKQ0KZGZfcGxvdCA8LSBkYXRhLmZyYW1lKHggPSB4X3ZhbHMsIHkgPSB5X3ZhbHMpDQoNCiMgTWVtYnVhdCBQbG90DQpwMSA8LSBnZ3Bsb3QoZGZfcGxvdCwgYWVzKHggPSB4LCB5ID0geSkpICsNCiAgZ2VvbV9saW5lKHNpemUgPSAxLCBjb2xvciA9ICJncmV5MjAiKSArDQogICMgTWV3YXJuYWkgV2lsYXlhaCBQZW5vbGFrYW4NCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoZGZfcGxvdCwgeCA8PSAtdF9rcml0aXMpLCBhZXMoZmlsbCA9ICJXaWxheWFoIFBlbm9sYWthbiIpLCBhbHBoYSA9IDAuNSkgKw0KICBnZW9tX2FyZWEoZGF0YSA9IHN1YnNldChkZl9wbG90LCB4ID49IHRfa3JpdGlzKSwgYWVzKGZpbGwgPSAiV2lsYXlhaCBQZW5vbGFrYW4iKSwgYWxwaGEgPSAwLjUpICsNCiAgIyBNZW5hbWJhaGthbiBnYXJpcyB0LWhpdHVuZw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gdF9oaXR1bmcsIGNvbG9yID0gInQtSGl0dW5nICgtMS4xMjEpIiksIA0KICAgICAgICAgICAgIGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAxKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9ICJyZWQiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSAiYmx1ZSIpICsNCiAgbGFicyh0aXRsZSA9ICJLdXJ2YSBEaXN0cmlidXNpLXQgKERlcmFqYXQgS2ViZWJhc2FuID0gOSkiLA0KICAgICAgIHN1YnRpdGxlID0gIkdhcmlzIGJpcnUgYmVyYWRhIGRpIHdpbGF5YWggcHV0aWggKEdhZ2FsIFRvbGFrIEgwKSIsDQogICAgICAgeCA9ICJOaWxhaSB0IiwgeSA9ICJEZW5zaXR5IiwgZmlsbCA9ICIiLCBjb2xvciA9ICIiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQojIFJlbmRlciBJbnRlcmFrdGlmDQpnZ3Bsb3RseShwMSkNCmBgYA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSW50ZXJwcmV0YXNpIFZpc3VhbGlzYXNpIFRlb3JldGlzIChLdXJ2YSBEaXN0cmlidXNpLXQpDQoNClZpc3VhbGlzYXNpIGluaSBiZXJmb2t1cyBwYWRhIHZhbGlkaXRhcyBpbG1pYWggZGFyaSBwZW5ndWppYW4geWFuZyBhZGEuDQoNCiogWm9uYSBLcml0aXMgKEFyZWEgTWVyYWgpOiBBcmVhIG1lcmFoIGRpIHVqdW5nIGtpcmkgZGFuIGthbmFuIG1lcnVwYWthbiBiYXRhcyB0b2xlcmFuc2kga2VzYWxhaGFuICgkXGFscGhhID0gMCwwNSQpLiBLYXJlbmEgc2FtcGVsIEFuZGEga2VjaWwgKCRuPTEwJCksIGt1cnZhIGluaSBsZWJpaCAibGViYXIiIGRpYmFuZGluZ2thbiBrdXJ2YSBub3JtYWwgc3RhbmRhci4gQmF0YXMgYW1hbm55YSBiZXJhZGEgZGkgYW50YXJhIC0yLDI2MiBkYW4gKzIsMjYyLg0KKiBQb3Npc2kgdC1IaXR1bmcgKEdhcmlzIEJpcnUpOiBOaWxhaSAkdCQgeWFuZyBraXRhIHBlcm9sZWggYWRhbGFoIC0xLDEyMS4gU2VjYXJhIHZpc3VhbCwgZ2FyaXMgYmlydSBpbmkgamF0dWggdGVwYXQgZGkgd2lsYXlhaCBwdXRpaCAod2lsYXlhaCBwZW5lcmltYWFuKS4NCiogS2VzaW1wdWxhbiBTdGF0aXN0aWs6IEthcmVuYSBnYXJpcyBiaXJ1IHRpZGFrIG1lbnllbnR1aCBhdGF1IG1lbGV3YXRpIGFyZWEgbWVyYWgsIGtpdGEgbWVueWltcHVsa2FuIGJhaHdhIHBlcmJlZGFhbiBhbnRhcmEgcmF0YS1yYXRhIHNhbXBlbCAoOSw4NikgZGFuIHRhcmdldCAoMTAsMCkgdGlkYWsgY3VrdXAgZWtzdHJlbSB1bnR1ayBkaWFuZ2dhcCBzZWJhZ2FpIHNlYnVhaCBhbm9tYWxpLiBPbGVoIGthcmVuYSBpdHUsIGtpdGEgR2FnYWwgTWVub2xhayAkSF8wJC4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KKipWaXN1YWxpc2FzaSBEZXNrcmlwdGlmOiBCb3hwbG90ICYgU2ViYXJhbiBEYXRhKioNCg0KVmlzdWFsaXNhc2kgaW5pIGRpZ3VuYWthbiB1bnR1ayBtZW51bmp1a2thbiBrb25kaXNpIG55YXRhIGRhdGEgbGFwYW5nYW4gZGFyaSAxMCBwZW5nZ3VuYS4NCjwvZGl2Pg0KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQojIC0tLSBLb2RpbmdhbiAyOiBCb3hwbG90ICYgU2ViYXJhbiBEYXRhIChKaXR0ZXIpIC0tLQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQoNCiMgSW5wdXQgRGF0YSBBc2xpDQp3YWt0dV90dWdhcyA8LSBjKDkuMiwgMTAuNSwgOS44LCAxMC4xLCA5LjYsIDEwLjMsIDkuOSwgOS43LCAxMC4wLCA5LjUpDQpkZl9kYXRhIDwtIGRhdGEuZnJhbWUod2FrdHUgPSB3YWt0dV90dWdhcykNCnRhcmdldF93YWt0dSA8LSAxMA0KDQojIE1lbWJ1YXQgUGxvdA0KcDIgPC0gZ2dwbG90KGRmX2RhdGEsIGFlcyh4ID0gIldha3R1IEJlbGFqYXIiLCB5ID0gd2FrdHUpKSArDQogICMgQm94cGxvdCB1bnR1ayBtZWxpaGF0IHN0YXRpc3RpayByaW5na2FzYW4NCiAgZ2VvbV9ib3hwbG90KHdpZHRoID0gMC40LCBmaWxsID0gImxpZ2h0Ymx1ZSIsIGFscGhhID0gMC42LCBvdXRsaWVyLnNoYXBlID0gTkEpICsNCiAgIyBKaXR0ZXIgdW50dWsgbWVsaWhhdCBzZWJhcmFuIHRpYXAgaW5kaXZpZHUgcGVuZ2d1bmENCiAgZ2VvbV9qaXR0ZXIod2lkdGggPSAwLjEsIGNvbG9yID0gImRhcmtibHVlIiwgc2l6ZSA9IDIsIGFscGhhID0gMC44KSArIA0KICAjIEdhcmlzIHRhcmdldCAxMCBtZW5pdA0KICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0ID0gdGFyZ2V0X3dha3R1LCBjb2xvciA9ICJUYXJnZXQgKDEwIE1lbml0KSIpLCANCiAgICAgICAgICAgICBzaXplID0gMSwgbGluZXR5cGUgPSAic29saWQiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSAicmVkIikgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgV2FrdHUgUGVueWVsZXNhaWFuIFR1Z2FzIChuPTEwKSIsDQogICAgICAgc3VidGl0bGUgPSAiTWVtYmFuZGluZ2thbiBkYXRhIHBlbmdndW5hIGRlbmdhbiBuaWxhaSB0YXJnZXQiLA0KICAgICAgIHkgPSAiTWVuaXQiLCB4ID0gIiIsIGNvbG9yID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCiMgUmVuZGVyIEludGVyYWt0aWYNCmdncGxvdGx5KHAyKQ0KYGBgDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnByZXRhc2kgVmlzdWFsaXNhc2kgRGVza3JpcHRpZiAoQm94cGxvdCAmIEppdHRlciBQbG90KQ0KDQpWaXN1YWxpc2FzaSBpbmkgYmVyZm9rdXMgcGFkYSByZWFsaXRhcyBkYXRhIGRpIGxhcGFuZ2FuIHVudHVrIGtlYnV0dWhhbiByaXNldCBVWC4NCg0KKiBLb25zaXN0ZW5zaSBQZW5nZ3VuYTogVGl0aWstdGl0aWsgYmlydSAoaml0dGVyKSBtZW51bmp1a2thbiBiYWh3YSB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgYW50YXIgcGVuZ2d1bmEgY3VrdXAgYmVydmFyaWFzaSAocmVudGFuZyA5LDIgaGluZ2dhIDEwLDUgbWVuaXQpLiBOYW11biwgdGlkYWsgYWRhIGRhdGEgeWFuZyB0ZXJsaWhhdCBzZWJhZ2FpIG91dGxpZXIgKHBlbmNpbGFuKSB5YW5nIGVrc3RyZW0uDQoNCiogSHVidW5nYW4gZGVuZ2FuIFRhcmdldCAoR2FyaXMgTWVyYWgpOiBHYXJpcyBtZXJhaCBtZW51bmp1a2thbiBzdGFuZGFyIDEwIG1lbml0LiBLb3RhayBiaXJ1IChib3hwbG90KSBtZW1iYWdpIGRhdGEgbWVuamFkaSBrdWFydGlsLCBkaSBtYW5hIGdhcmlzIHRlbmdhaCBrb3RhayAobWVkaWFuKSBiZXJhZGEgc2VkaWtpdCBkaSBiYXdhaCBnYXJpcyBtZXJhaC4NCg0KKiBNYWtuYSBQcmFrdGlzIGJhZ2kgVGltIFVYOiBNZXNraXB1biBzZWNhcmEgcmF0YS1yYXRhIHBlbmdndW5hIHNlZGlraXQgbGViaWggY2VwYXQgKDksODYgbWVuaXQpLCBzZWJhcmFubnlhIG1hc2loIHNhbmdhdCBkZWthdCBkZW5nYW4gdGFyZ2V0IDEwIG1lbml0LiBTZWNhcmEgZGVzYWluLCBpbmkgbWVudW5qdWtrYW4gYmFod2EgYXBsaWthc2kgYmFydSB0ZXJzZWJ1dCBtZW1pbGlraSBwZXJmb3JtYSB5YW5nIHN0YWJpbCBkYW4gc2VzdWFpIGRlbmdhbiBla3NwZWt0YXNpIGR1cmFzaSB5YW5nIGRpaW5naW5rYW4gb2xlaCB0aW0gcmlzZXQuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyAzDQoNCiMjIFVqaS10IER1YSBTYW1wZWwgKEEvQiBUZXN0aW5nKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KVGltIGFuYWxpcyBwcm9kdWsgbWVsYWt1a2FuIHVqaSBBL0IgKEEvQiB0ZXN0KSB1bnR1ayBtZW1iYW5kaW5na2FuIHJhdGEtcmF0YSBkdXJhc2kgc2VzaSAoZGFsYW0gbWVuaXQpIGFudGFyYSBkdWEgdmVyc2kgaGFsYW1hbiBsYW5kYXMgKGxhbmRpbmcgcGFnZSkuDQoNCg0KfCAqVmVyc2kqIHwgKlVrdXJhbiBTYW1wZWwgKCRuJCkqIHwgKlJhdGEtcmF0YSAoJFxiYXJ7eH0kKSogfCAqU3RhbmRhciBEZXZpYXNpICgkcyQpKiB8DQp8Oi0tLXw6LS0tfDotLS18Oi0tLXwNCnwgQSB8IDI1IHwgNCw4IHwgMSwyIHwNCnwgQiB8IDI1IHwgNSw0IHwgMSw0IHwNCg0KPC9kaXY+DQoNCiMjIFR1Z2FzDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoxLiBSdW11c2thbiBoaXBvdGVzaXMgbm9sICgkSF8wJCkgZGFuIGhpcG90ZXNpcyBhbHRlcm5hdGlmICgkSF9hJCkuDQoyLiBJZGVudGlmaWthc2kgamVuaXMgdWppLXQgeWFuZyBkaXBlcmx1a2FuLg0KMy4gSGl0dW5nIHN0YXRpc3RpayB1amkgZGFuIG5pbGFpLSRwJCAocC12YWx1ZSkuDQo0LiBUYXJpayBrZXNpbXB1bGFuIHN0YXRpc3RpayBwYWRhIHRpbmdrYXQgc2lnbmlmaWthbnNpICRcYWxwaGEgPSAwLDA1JC4NCjUuIEludGVycHJldGFzaWthbiBoYXNpbCB0ZXJzZWJ1dCB1bnR1ayBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gcHJvZHVrLg0KPC9kaXY+DQoNCiMjIEphd2FiYW4NCg0KIyMjIEZvcm11bGFzaSBIaXBvdGVzaXMNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCkRhbGFtIHN0YXRpc3Rpa2EsIGtpdGEgaGFydXMgbWVuZW50dWthbiAiZHVnYWFuIGF3YWwiIChub2wpIGRhbiAiYXBhIHlhbmcgaW5naW4ga2l0YSBidWt0aWthbiIgKGFsdGVybmF0aWYpLg0KDQoqIEhpcG90ZXNpcyBOb2wgKCRIXzAkKTogJFxtdV9BID0gXG11X0IkKFRpZGFrIGFkYSBwZXJiZWRhYW4gc2lnbmlmaWthbiBhbnRhcmEgcmF0YS1yYXRhIGR1cmFzaSBzZXNpIFZlcnNpIEEgZGFuIFZlcnNpIEIpLg0KKiBIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoJEhfYSQpOiAkXG11X0EgXG5lcSBcbXVfQiQoQWRhIHBlcmJlZGFhbiBzaWduaWZpa2FuIGFudGFyYSByYXRhLXJhdGEgZHVyYXNpIHNlc2kgVmVyc2kgQSBkYW4gVmVyc2kgQikuDQo8L2Rpdj4NCg0KIyMjIElkZW50aWZpa2FzaSBKZW5pcyBVamktdA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSmVuaXMgdWppIHlhbmcgZGlndW5ha2FuIGFkYWxhaCBJbmRlcGVuZGVudCBUd28tU2FtcGxlIFQtVGVzdCAoVWppLXQgZHVhIHNhbXBlbCBpbmRlcGVuZGVuKS4gS2FyZW5hIHVrdXJhbiBzYW1wZWwgc2FtYSAoJG5fQSA9IG5fQiA9IDI1JCkgZGFuIHN0YW5kYXIgZGV2aWFzaSB0aWRhayB0ZXJwYXV0IGphdWgsIGtpdGEgZGFwYXQgbWVuZ2d1bmFrYW4gYXN1bXNpIEVxdWFsIFZhcmlhbmNlICh2YXJpYW5zIGRpYW5nZ2FwIHNhbWEpLg0KPC9kaXY+DQoNCiMjIyBLb21wdXRhc2kgU3RhdGlzdGlrIFVqaSBkYW4gTmlsYWktJHAkDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpBLiBIaXR1bmcgUG9vbGVkIFN0YW5kYXJkIERldmlhdGlvbiAoJHNfcCQpOkthcmVuYSBqdW1sYWggc2FtcGVsIHNhbWEsIGtpdGEgZ3VuYWthbiBydW11czokJHNfcCA9IFxzcXJ0e1xmcmFje3NfQV4yICsgc19CXjJ9ezJ9fSA9IFxzcXJ0e1xmcmFjezEsMl4yICsgMSw0XjJ9ezJ9fSA9IFxzcXJ0e1xmcmFjezEsNDQgKyAxLDk2fXsyfX0gPSBcc3FydHsxLDd9IFxhcHByb3ggMSwzMDQkJA0KDQpCLiBIaXR1bmcgTmlsYWkgdCAodC1zY29yZSk6UnVtdXNueWEgYWRhbGFoOiQkdCA9IFxmcmFje1xiYXJ7eH1fQiAtIFxiYXJ7eH1fQX17c19wIFxzcXJ0e1xmcmFjezF9e25fQX0gKyBcZnJhY3sxfXtuX0J9fX0kJCQkdCA9IFxmcmFjezUsNCAtIDQsOH17MSwzMDQgXHNxcnR7XGZyYWN7MX17MjV9ICsgXGZyYWN7MX17MjV9fX0gPSBcZnJhY3swLDZ9ezEsMzA0IFxzcXJ0ezAsMDh9fSA9IFxmcmFjezAsNn17MSwzMDQgXHRpbWVzIDAsMjgyOH0gXGFwcHJveCBcZnJhY3swLDZ9ezAsMzY4OH0gXGFwcHJveCAxLDYyNyQkDQoNCkMuIE1lbmNhcmkgTmlsYWktcDoNCg0KKiBEZXJhamF0IEtlYmViYXNhbiAoJGRmJCk6ICRuX0EgKyBuX0IgLSAyID0gMjUgKyAyNSAtIDIgPSA0OCQuDQoqIE1lbmdndW5ha2FuIHRhYmVsIGRpc3RyaWJ1c2ktdCBhdGF1IGthbGt1bGF0b3IsIHVudHVrICR0ID0gMSw2MjckIGRlbmdhbiAkZGYgPSA0OCQgcGFkYSB1amkgZHVhIGFyYWggKHR3by10YWlsZWQpLCBkaWRhcGF0a2FuIHAtdmFsdWUgJFxhcHByb3ggMCwxMTAkLg0KPC9kaXY+DQoNCiMjIyBLZXNpbXB1bGFuIFN0YXRpc3Rpaw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KS2l0YSBiYW5kaW5na2FuIG5pbGFpLSRwJCBkZW5nYW4gdGluZ2thdCBzaWduaWZpa2Fuc2kgKCRcYWxwaGEgPSAwLDA1JCk6DQoNCiogQXR1cmFuOiBKaWthIHAtdmFsdWUgPCAkXGFscGhhJCwgdG9sYWsgJEhfMCQuIEppa2EgcC12YWx1ZSA+ICRcYWxwaGEkLCBnYWdhbCB0b2xhayAkSF8wJC4NCiogSGFzaWw6ICQwLDExMCA+IDAsMDUkLg0KKiBLZXNpbXB1bGFuOiBHYWdhbCBtZW5vbGFrICRIXzAkLiBTZWNhcmEgc3RhdGlzdGlrLCB0aWRhayBhZGEgY3VrdXAgYnVrdGkgdW50dWsgbWVueWF0YWthbiBiYWh3YSBrZWR1YSB2ZXJzaSBoYWxhbWFuIGxhbmRhcyBtZW1pbGlraSBkdXJhc2kgc2VzaSB5YW5nIGJlcmJlZGEgc2VjYXJhIG55YXRhLg0KPC9kaXY+DQoNCiMjIyBJbnRlcnByZXRhc2kgdW50dWsgS2VwdXR1c2FuIFByb2R1aw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KQmFnaSB0aW0gcHJvZHVrLCBoYXNpbCBpbmkgYmVyYXJ0aToNCg0KMS4gUGVydWJhaGFuIEJlbHVtIFNpZ25pZmlrYW46IE1lc2tpcHVuIHJhdGEtcmF0YSBWZXJzaSBCICg1LDQpIHRlcmxpaGF0IGxlYmloIHRpbmdnaSBkYXJpIFZlcnNpIEEgKDQsOCksIHBlcmJlZGFhbiBpbmkgYmlzYSBzYWphIHRlcmphZGkga2FyZW5hIGZha3RvciBrZWJldHVsYW4gKHJhbmRvbSBjaGFuY2UpIGRhbiBidWthbiBrYXJlbmEgZGVzYWluIGhhbGFtYW4geWFuZyBsZWJpaCBiYWlrLg0KDQoyLiBSZWtvbWVuZGFzaTogSmFuZ2FuIHRlcmJ1cnUtYnVydSBtZW5nZ2FudGkgc2VsdXJ1aCBoYWxhbWFuIGtlIFZlcnNpIEIuIFRpbSBiaXNhIG1lbWlsaWggdW50dWs6DQoNCiAgICogTWVsYW5qdXRrYW4gdGVzIGRlbmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcgbGViaWggYmVzYXIgdW50dWsgbWVuZGFwYXRrYW4ga2VrdWF0YW4gc3RhdGlzdGlrIChzdGF0aXN0aWNhbCBwb3dlcikgeWFuZyBsZWJpaCB0aW5nZ2kuDQoNCiAgICogTWVuY29iYSBpdGVyYXNpIGRlc2FpbiBsYWluIGppa2EgcGVuaW5na2F0YW4gZHVyYXNpIHNlc2kgYWRhbGFoIHR1anVhbiB1dGFtYS4NCjwvZGl2PiAgIA0KICAgDQojIyMgVmlzdWFsaXNhc2kNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCioqMS4gVmlzdWFsaXNhc2kgRGlzdHJpYnVzaSAoQm94IFBsb3QpKioNCg0KVmlzdWFsaXNhc2kgaW5pIHNhbmdhdCBwZW50aW5nIHVudHVrIG1lbnVuanVra2FuIHNlYmFyYW4gZGF0YSBkYW4gbWVuZGV0ZWtzaSBhcGFrYWggYWRhIG91dGxpZXIgKGRhdGEgcGVuY2lsYW4pLiBCb3ggcGxvdCBtZW1iYW50dSBhdWRpZW5zIG1lbGloYXQgYmFod2EgbWVza2lwdW4gcmF0YS1yYXRhbnlhIGJlcmJlZGEsIHJlbnRhbmcgZHVyYXNpIHNlc2kgYW50YXJhIFZlcnNpIEEgZGFuIEIgc2ViZW5hcm55YSBzYW5nYXQgbWlyaXAuDQo8L2Rpdj4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBMaWJyYXJ5DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIFNldHVwDQpkYXRhX2EgPC0gYyg0LjgpICMgSW5pIGhhbnlhIHJlcHJlc2VudGFzaSByYXRhLXJhdGEgamlrYSBkYXRhIG1lbnRhaCB0aWRhayBhZGENCiMgTmFtdW4gdW50dWsgYm94cGxvdCwga2l0YSBzaW11bGFzaWthbiBkYXRhIGJlcmRhc2Fya2FuIFNEIGRhcmkgc29hbDoNCnNldC5zZWVkKDEyMykNCmRmIDwtIGRhdGEuZnJhbWUoDQogIFZlcnNpb24gPSByZXAoYygiVmVyc2lvbiBBIiwgIlZlcnNpb24gQiIpLCBlYWNoID0gMjUpLA0KICBEdXJhdGlvbiA9IGMocm5vcm0oMjUsIDQuOCwgMS4yKSwgcm5vcm0oMjUsIDUuNCwgMS40KSkNCikNCg0KIyBQbG90IDE6IEJveCBQbG90DQpmaWdfYm94IDwtIHBsb3RfbHkoZGYsIHkgPSB+RHVyYXRpb24sIGNvbG9yID0gflZlcnNpb24sIA0KICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiYm94IiwgDQogICAgICAgICAgICAgICAgICAgYm94cG9pbnRzID0gImFsbCIsIA0KICAgICAgICAgICAgICAgICAgIGppdHRlciA9IDAuMywNCiAgICAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KG9wYWNpdHkgPSAwLjYpKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIkFuYWxpc2lzIFNlYmFyYW4gRHVyYXNpIFNlc2k6IFZlcnNpIEEgdnMgVmVyc2kgQiIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIkR1cmFzaSAoTWVuaXQpIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlZlcnNpIExhbmRpbmcgUGFnZSIpLA0KICAgIGhvdmVybW9kZSA9ICJjbG9zZXN0Ig0KICApDQoNCiMgVGFtcGlsa2FuIFBsb3QNCmZpZ19ib3gNCmBgYA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSW50ZXJwcmV0YXNpIEJveCBQbG90IChBbmFsaXNpcyBTZWJhcmFuICYgT3V0bGllcikNCg0KVmlzdWFsaXNhc2kgaW5pIG1lbWJlcmlrYW4gZ2FtYmFyYW4gdGVudGFuZyAia2VzZWhhdGFuIiBkYW4ga2FyYWt0ZXJpc3RpayBkYXRhIHNlY2FyYSBpbmRpdmlkdS4NCg0KKiBUdW1wYW5nIFRpbmRpaCBEYXRhIChPdmVybGFwKTogVGVybGloYXQgYmFod2EgYXJlYSBrb3RhayAoSW50ZXJxdWFydGlsZSBSYW5nZSkgYW50YXJhIFZlcnNpIEEgZGFuIFZlcnNpIEIgc2FsaW5nIHR1bXBhbmcgdGluZGloIHNlY2FyYSBzaWduaWZpa2FuLiBJbmkgbWVudW5qdWtrYW4gYmFod2EgbWVza2lwdW4gcmF0YS1yYXRhbnlhIGJlcmJlZGEsIHNlYmFnaWFuIGJlc2FyIHBlbmdndW5hIGRpIGtlZHVhIHZlcnNpIG1lbWlsaWtpIHBlcmlsYWt1IGR1cmFzaSBzZXNpIHlhbmcgc2VydXBhLg0KDQoqIFZhcmlhYmlsaXRhczogVmVyc2kgQiBtZW1pbGlraSAia290YWsiIHlhbmcgc2VkaWtpdCBsZWJpaCBwYW5qYW5nIGRhbiByZW50YW5nIGdhcmlzICh3aGlza2VycykgeWFuZyBsZWJpaCBsZWJhci4gSW5pIG1lbmFuZGFrYW4gYmFod2EgZHVyYXNpIHNlc2kgcGFkYSBWZXJzaSBCIGxlYmloIGJlcnZhcmlhc2kgKGt1cmFuZyBrb25zaXN0ZW4pIGRpYmFuZGluZ2thbiBWZXJzaSBBLg0KDQoqIERldGVrc2kgT3V0bGllcjogVGl0aWstdGl0aWsgaW5kaXZpZHUgZGkgbHVhciBnYXJpcyBtZW51bmp1a2thbiBhZGFueWEgYmViZXJhcGEgcGVuZ2d1bmEgZGVuZ2FuIGR1cmFzaSBzZXNpIHlhbmcgc2FuZ2F0IGxhbWEgYXRhdSBzYW5nYXQgc2luZ2thdC4gTmFtdW4sIGthcmVuYSBzZWJhcmFubnlhIG1hc2loIHdhamFyLCBkYXRhIGluaSB0ZXRhcCB2YWxpZCB1bnR1ayBkaXVqaS4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KKioyLiBWaXN1YWxpc2FzaSBQZXJiYW5kaW5nYW4gUmF0YS1SYXRhIChCYXIgQ2hhcnQgZGVuZ2FuIEVycm9yIEJhcnMpKioNCg0KR3JhZmlrIGluaSBhZGFsYWggc3RhbmRhciBkYWxhbSBsYXBvcmFuIGVrc3BlcmltZW4uIEJhdGFuZyBtZW51bmp1a2thbiByYXRhLXJhdGEsIHNlZGFuZ2thbiBnYXJpcyB2ZXJ0aWthbCAoRXJyb3IgQmFyKSBtZW51bmp1a2thbiBTdGFuZGFyIERldmlhc2kuIFNlY2FyYSB2aXN1YWwsIGppa2EgZXJyb3IgYmFyIGFudGFyYSBkdWEgYmF0YW5nIHNhbGluZyB0dW1wYW5nIHRpbmRpaCBzZWNhcmEgc2lnbmlmaWthbiwgaXR1IGFkYWxhaCBpbmRpa2FzaSBhd2FsIGJhaHdhIHBlcmJlZGFhbiB0ZXJzZWJ1dCB0aWRhayBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsuDQo8L2Rpdj4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBQZXJzaWFwYW4gRGF0YSBTdW1tYXJ5DQpzdW1tYXJ5X2RhdGEgPC0gZGF0YS5mcmFtZSgNCiAgVmVyc2lvbiA9IGMoIlZlcnNpb24gQSIsICJWZXJzaW9uIEIiKSwNCiAgTWVhbiA9IGMoNC44LCA1LjQpLA0KICBTRCA9IGMoMS4yLCAxLjQpDQopDQoNCiMgUGxvdCAyOiBCYXIgQ2hhcnQNCmZpZ19iYXIgPC0gcGxvdF9seShzdW1tYXJ5X2RhdGEsIHggPSB+VmVyc2lvbiwgeSA9IH5NZWFuLCANCiAgICAgICAgICAgICAgICAgICB0eXBlID0gJ2JhcicsIA0KICAgICAgICAgICAgICAgICAgIGNvbG9yID0gflZlcnNpb24sDQogICAgICAgICAgICAgICAgICAgY29sb3JzID0gYygiIzM0OThkYiIsICIjZTc0YzNjIiksICMgQmlydSBkYW4gTWVyYWggUHJvZmVzaW9uYWwNCiAgICAgICAgICAgICAgICAgICBlcnJvcl95ID0gfmxpc3QoYXJyYXkgPSBTRCwgY29sb3IgPSAnIzJjM2U1MCcpKSAlPiUNCiAgbGF5b3V0KA0KICAgIHRpdGxlID0gIlBlcmJhbmRpbmdhbiBSYXRhLXJhdGEgRHVyYXNpIFNlc2kgKGRlbmdhbiBTdGFuZGFyIERldmlhc2kpIiwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUmF0YS1yYXRhIER1cmFzaSAoTWVuaXQpIiwgcmFuZ2UgPSBjKDAsIDgpKSwNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiVmVyc2kgTGFuZGluZyBQYWdlIiksDQogICAgc2hvd2xlZ2VuZCA9IEZBTFNFDQogICkNCg0KIyBUYW1waWxrYW4gUGxvdA0KZmlnX2Jhcg0KYGBgDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpJbnRlcnByZXRhc2kgQmFyIENoYXJ0IGRlbmdhbiBFcnJvciBCYXJzIChBbmFsaXNpcyBSYXRhLXJhdGEpDQoNClZpc3VhbGlzYXNpIGluaSBiZXJmb2t1cyBwYWRhIHBlcmZvcm1hIGFncmVnYXQgeWFuZyBiaWFzYW55YSBtZW5qYWRpIGFjdWFuIHV0YW1hIHBlbmdhbWJpbCBrZXB1dHVzYW4uDQoNCiogUGVyYmVkYWFuIFJhdGEtcmF0YSAoTWVhbik6IFNlY2FyYSB2aXN1YWwsIGJhdGFuZyBWZXJzaSBCICg1LDQpIG1lbWFuZyBsZWJpaCB0aW5nZ2kgZGFyaXBhZGEgVmVyc2kgQSAoNCw4KS4gQWRhIHNlbGlzaWggMCw2IG1lbml0IHlhbmcgc2VjYXJhIHNla2lsYXMgdGVybGloYXQgc2VwZXJ0aSBzZWJ1YWggcGVuaW5na2F0YW4uDQoqIFNpZ25pZmlrYW5zaSB2aWEgRXJyb3IgQmFyczogR2FyaXMgdmVydGlrYWwgKEVycm9yIEJhcikgZGkgYXRhcyBzZXRpYXAgYmF0YW5nIG1ld2FraWxpIHN0YW5kYXIgZGV2aWFzaS4gUGVyaGF0aWthbiBiYWh3YSB1anVuZyBiYXdhaCBnYXJpcyBWZXJzaSBCIGphdWggbGViaWggcmVuZGFoIGRhcmlwYWRhIHVqdW5nIGF0YXMgZ2FyaXMgVmVyc2kgQS4NCg0KICAqIFBlbnRpbmc6IEthcmVuYSBrZWR1YSBnYXJpcyBpbmkgInNhbGluZyBiZXJzaWxhbmdhbiIgKHR1bXBhbmcgdGluZGloKSwgaW5pIG1lcnVwYWthbiBpbmRpa2F0b3IgdmlzdWFsIHlhbmcga3VhdCBiYWh3YSBwZXJiZWRhYW4gMCw2IG1lbml0IHRlcnNlYnV0IHRpZGFrIGN1a3VwIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3Rpay4NCiAgDQoqIEtlc2ltcHVsYW4gVmlzdWFsOiBQZXJiZWRhYW4geWFuZyB0ZXJsaWhhdCBrZW11bmdraW5hbiBiZXNhciBoYW55YSBmbHVrdHVhc2kgZGFyaSBzYW1wZWwga2VjaWwgKCRuPTI1JCkgZGFuIGJ1a2FuIGthcmVuYSBwZXJ1YmFoYW4gZGVzYWluIHlhbmcgYmVuYXItYmVuYXIgZWZla3RpZiBiYWdpIHNlbHVydWggcG9wdWxhc2kgcGVuZ2d1bmEuDQo8L2Rpdj4NCg0KIyBTdHVkaSBLYXN1cyA0DQoNCiMjIFVqaSBDaGktU3F1YXJlIHVudHVrIEluZGVwZW5kZW5zaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KU2VidWFoIHBlcnVzYWhhYW4gZS1jb21tZXJjZSBtZW5lbGl0aSBhcGFrYWggdGVyZGFwYXQgaHVidW5nYW4gYW50YXJhIGplbmlzIHBlcmFuZ2thdCB5YW5nIGRpZ3VuYWthbiBkZW5nYW4gcHJlZmVyZW5zaSBtZXRvZGUgcGVtYmF5YXJhbi4NCg0KfCBQZXJhbmdrYXQgLyBQZW1iYXlhcmFuIHwgRS1XYWxsZXQgfCBLYXJ0dSBLcmVkaXQgfCBDT0QgKENhc2ggb24gRGVsaXZlcnkpIHwNCnw6LS0tfDotLS18Oi0tLXw6LS0tfA0KfCBNb2JpbGUgKEhQKSB8IDEyMCB8IDgwIHwgNTAgfA0KfCBEZXNrdG9wIHwgNjAJfCA5MCB8IDQwIHwNCjwvZGl2Pg0KDQojIyBUdWdhcw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KMS4gTnlhdGFrYW4gSGlwb3Rlc2lzIE5vbCAoJEhfMCQpIGRhbiBIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoJEhfMSQpLg0KMi4gSWRlbnRpZmlrYXNpIHVqaSBzdGF0aXN0aWsgeWFuZyB0ZXBhdC4NCjMuIEhpdHVuZyBzdGF0aXN0aWsgQ2hpLVNxdWFyZSAoJFxjaGleMiQpLg0KNC4gVGVudHVrYW4gbmlsYWktJHAkIChwLXZhbHVlKSBwYWRhIHRpbmdrYXQgc2lnbmlmaWthbnNpICRcYWxwaGEgPSAwLDA1JC4NCjUuIEludGVycHJldGFzaWthbiBoYXNpbCB0ZXJzZWJ1dCBkYWxhbSBrb250ZWtzIHN0cmF0ZWdpIHBlbWJheWFyYW4NCmRpZ2l0YWwuDQo8L2Rpdj4NCg0KIyMgSmF3YWJhbg0KDQojIyMgIEZvcm11bGFzaSBIaXBvdGVzaXMgKE51bGwgJiBBbHRlcm5hdGlmKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KRGFsYW0gdWppIGluZGVwZW5kZW5zaSBDaGktU3F1YXJlLCBraXRhIG1lbmV0YXBrYW4gZHVhIHBlcm55YXRhYW4geWFuZyBzYWxpbmcgYmVydG9sYWsgYmVsYWthbmc6DQoNCiogSGlwb3Rlc2lzIE5vbCAoJEhfMCQpOiJKZW5pcyBwZXJhbmdrYXQgZGFuIHByZWZlcmVuc2kgbWV0b2RlIHBlbWJheWFyYW4gc2FsaW5nIGJlYmFzIChpbmRlcGVuZGVuKS4iQXJ0aW55YTogUGVyYW5na2F0IHlhbmcgZGlndW5ha2FuIHBlbmdndW5hIChNb2JpbGUgYXRhdSBEZXNrdG9wKSB0aWRhayBtZW1wZW5nYXJ1aGkgcGlsaWhhbiBtZXRvZGUgcGVtYmF5YXJhbiBtZXJla2EuIFBvbGEgcGVtYmF5YXJhbiB5YW5nIGtpdGEgbGloYXQgZGkgZGF0YSBoYW55YWxhaCBrZWJldHVsYW4gc2VtYXRhLg0KKiBIaXBvdGVzaXMgQWx0ZXJuYXRpZiAoJEhfMSQgYXRhdSAkSF9hJCk6IkplbmlzIHBlcmFuZ2thdCBkYW4gcHJlZmVyZW5zaSBtZXRvZGUgcGVtYmF5YXJhbiBzYWxpbmcgYmVyaHVidW5nYW4gKGRlcGVuZGVuKS4iQXJ0aW55YTogVGVyZGFwYXQgYXNvc2lhc2kgeWFuZyBzaWduaWZpa2FuIGFudGFyYSBqZW5pcyBwZXJhbmdrYXQgZGVuZ2FuIG1ldG9kZSBwZW1iYXlhcmFuIHlhbmcgZGlwaWxpaC4gUGVuZ2d1bmEgY2VuZGVydW5nIG1lbWlsaWggbWV0b2RlIHBlbWJheWFyYW4gdGVydGVudHUgYmVyZGFzYXJrYW4gcGVyYW5na2F0IHlhbmcgbWVyZWthIGd1bmFrYW4gc2FhdCBpdHUuDQo8L2Rpdj4NCg0KIyMjIElkZW50aWZpa2FzaSBVamkgU3RhdGlzdGlrDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpVamkgeWFuZyB0ZXBhdCBhZGFsYWggQ2hpLVNxdWFyZSBUZXN0IG9mIEluZGVwZW5kZW5jZS4gVWppIGluaSBkaWd1bmFrYW4ga2FyZW5hIGtlZHVhIHZhcmlhYmVsIChQZXJhbmdrYXQgZGFuIE1ldG9kZSBQZW1iYXlhcmFuKSBhZGFsYWggZGF0YSBrYXRlZ29yaWthbCAobm9taW5hbCkuDQo8L2Rpdj4NCg0KIyMjIEtvbXB1dGFzaSBTdGF0aXN0aWsgQ2hpLVNxdWFyZSAoJFxjaGleMiQpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpQZXJ0YW1hLCBraXRhIGhpdHVuZyB0b3RhbCBiYXJpcyBkYW4ga29sb206DQoNCnwgUGVyYW5na2F0IHwgRS1XYWxsZXQgfEthcnR1IEtyZWRpdCB8IENPRCB8IFRvdGFsIEJhcmlzIHwNCnw6LS0tfDotLS18Oi0tLXw6LS0tfA0KfCBNb2JpbGUgfCAxMjAgfCA4MCB8IDUwIHwgMjUwIHwNCnwgRGVza3RvcGMgfCA2MCB8IDkwIHwgNDAgfCAxOTAgfA0KfCBUb3RhbCBLb2xvbSB8IDE4MCB8IDE3MCB8IDkwIHwgNDQwIHwgKEdyYW5kIFRvdGFsKQ0KDQpBLiBIaXR1bmcgTmlsYWkgRWtzcGVrdGFzaSAoJEUkKTpSdW11czogJEUgPSBcZnJhY3soXHRleHR7VG90YWwgQmFyaXN9IFx0aW1lcyBcdGV4dHtUb3RhbCBLb2xvbX0pfXtcdGV4dHtHcmFuZCBUb3RhbH19JA0KDQogICAqICRFX3tNb2JpbGUsIEUtV2FsbGV0fSA9IFxmcmFjezI1MCBcdGltZXMgMTgwfXs0NDB9ID0gMTAyLDI3JA0KICAgKiAkRV97TW9iaWxlLCBDcmVkaXR9ID0gXGZyYWN7MjUwIFx0aW1lcyAxNzB9ezQ0MH0gPSA5Niw1OSQNCiAgICogJEVfe01vYmlsZSwgQ09EfSA9IFxmcmFjezI1MCBcdGltZXMgOTB9ezQ0MH0gPSA1MSwxNCQNCiAgICogJEVfe0Rlc2t0b3AsIEUtV2FsbGV0fSA9IFxmcmFjezE5MCBcdGltZXMgMTgwfXs0NDB9ID0gNzcsNzMkDQogICAqICRFX3tEZXNrdG9wLCBDcmVkaXR9ID0gXGZyYWN7MTkwIFx0aW1lcyAxNzB9ezQ0MH0gPSA3Myw0MSQNCiAgICogJEVfe0Rlc2t0b3AsIENPRH0gPSBcZnJhY3sxOTAgXHRpbWVzIDkwfXs0NDB9ID0gMzgsODYkDQogICANCkIuIEhpdHVuZyBOaWxhaSAkXGNoaV4yJDpSdW11czogJFxjaGleMiA9IFxzdW0gXGZyYWN7KE8gLSBFKV4yfXtFfSQNCg0KICAgKiAkKDEyMCAtIDEwMiwyNyleMiAvIDEwMiwyNyA9IDMsMDckDQogICAqICQoODAgLSA5Niw1OSleMiAvIDk2LDU5ID0gMiw4NSQNCiAgICogJCg1MCAtIDUxLDE0KV4yIC8gNTEsMTQgPSAwLDAzJA0KICAgKiAkKDYwIC0gNzcsNzMpXjIgLyA3Nyw3MyA9IDQsMDQkDQogICAqICQoOTAgLSA3Myw0MSleMiAvIDczLDQxID0gMyw3NSQNCiAgICogJCg0MCAtIDM4LDg2KV4yIC8gMzgsODYgPSAwLDAzJA0KICAgDQpUb3RhbCAkXGNoaV4yIFxhcHByb3ggMTMsNzckDQo8L2Rpdj4NCg0KIyMjICBNZW5lbnR1a2FuIE5pbGFpLSRwJCAoJHAkLXZhbHVlKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KKiBEZXJhamF0IEtlYmViYXNhbiAoJGRmJCk6ICQoXHRleHR7YmFyaXN9LTEpIFx0aW1lcyAoXHRleHR7a29sb219LTEpID0gKDItMSkgXHRpbWVzICgzLTEpID0gMiQuDQoqIERlbmdhbiAkXGNoaV4yID0gMTMsNzckIGRhbiAkZGYgPSAyJCwga2l0YSBsaWhhdCB0YWJlbCBkaXN0cmlidXNpIENoaS1TcXVhcmUuDQoqIE5pbGFpLSRwIFxhcHByb3ggMCwwMDEwJCAoc2FuZ2F0IGtlY2lsKS4NCg0KUGFkYSAkXGFscGhhID0gMCwwNSQsIGthcmVuYSAkcCQtdmFsdWUgKDAsMDAxKSA8IDAsMDUsIG1ha2Ega2l0YSBUb2xhayAkSF8wJC4NCjwvZGl2Pg0KDQojIyMgSW50ZXJwcmV0YXNpIGRhbGFtIFN0cmF0ZWdpIFBlbWJheWFyYW4gRGlnaXRhbA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSGFzaWwgaW5pIG1lbnVuanVra2FuIGFkYSBodWJ1bmdhbiB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIHBlcmFuZ2thdCB5YW5nIGRpZ3VuYWthbiBkZW5nYW4gY2FyYSBwZW1iYXlhcmFuLg0KDQoqIFRlbXVhbiBVdGFtYTogUGVuZ2d1bmEgTW9iaWxlIGphdWggbGViaWggY2VuZGVydW5nIG1lbmdndW5ha2FuIEUtV2FsbGV0ICgxMjAgb2JzZXJ2YXNpIHZzIDEwMiBla3NwZWt0YXNpKSwgc2VtZW50YXJhIHBlbmdndW5hIERlc2t0b3AgbGViaWggbWVtaWxpaCBLYXJ0dSBLcmVkaXQgKDkwIG9ic2VydmFzaSB2cyA3MyBla3NwZWt0YXNpKS4NCg0KKiBTdHJhdGVnaSBCaXNuaXM6DQoNCiAgMS4gT3B0aW1hc2kgTW9iaWxlOiBUaW5na2F0a2FuIGthbXBhbnllIGNhc2hiYWNrIGF0YXUgcHJvbW8ga2h1c3VzIEUtV2FsbGV0IHBhZGEgYXBsaWthc2kgbW9iaWxlIGthcmVuYSBhdWRpZW5zbnlhIHNhbmdhdCByZXNlcHRpZi4NCg0KICAyLiBLZWFtYW5hbiBEZXNrdG9wOiBLYXJlbmEgcGVuZ2d1bmEgZGVza3RvcCBsZWJpaCBtZW55dWthaSBrYXJ0dSBrcmVkaXQsIHBhc3Rpa2FuIGFudGFybXVrYSBpbnB1dCBkYXRhIGthcnR1IGRpIGRlc2t0b3Agc2FuZ2F0IGFtYW4gZGFuIG1lbWlsaWtpIGZpdHVyIGF1dG9maWxsIHlhbmcgbGFuY2FyLg0KDQogIDMuIENyb3NzLVByb21vdGlvbjogRG9yb25nIHBlbmdndW5hIGRlc2t0b3AgdW50dWsgbWVuY29iYSBlLXdhbGxldCBtZWxhbHVpIHNrZW1hIGludGVncmFzaSBRUiBjb2RlIHlhbmcgYmlzYSBkaS1zY2FuIHZpYSBIUCBzYWF0IG1lcmVrYSBjaGVja291dCBkaSBkZXNrdG9wLg0KPC9kaXY+DQoNCiMjIyBWaXN1YWxpc2FzaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KKioxLiBTdGFrZWQgQmFyIENoYXJ0KioNCjwvZGl2Pg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShkcGx5cikNCg0KIyAxLiBNZW55aWFwa2FuIERhdGENCmRmIDwtIGRhdGEuZnJhbWUoDQogIERldmljZSA9IGMoIk1vYmlsZSIsICJNb2JpbGUiLCAiTW9iaWxlIiwgIkRlc2t0b3AiLCAiRGVza3RvcCIsICJEZXNrdG9wIiksDQogIFBheW1lbnQgPSBjKCJFLVdhbGxldCIsICJDcmVkaXQgQ2FyZCIsICJDT0QiLCAiRS1XYWxsZXQiLCAiQ3JlZGl0IENhcmQiLCAiQ09EIiksDQogIENvdW50ID0gYygxMjAsIDgwLCA1MCwgNjAsIDkwLCA0MCkNCikNCg0KIyAyLiBNZW5naGl0dW5nIFBlcnNlbnRhc2UgdW50dWsgdGlhcCBrYXRlZ29yaSBkaSBkYWxhbSBwZXJhbmdrYXQNCmRmX3BjdCA8LSBkZiAlPiUNCiAgZ3JvdXBfYnkoRGV2aWNlKSAlPiUNCiAgbXV0YXRlKFBlcmNlbnRhZ2UgPSAoQ291bnQgLyBzdW0oQ291bnQpKSAqIDEwMCkNCg0KIyAzLiBNZW1idWF0IFZpc3VhbGlzYXNpIEludGVyYWt0aWYNCmZpZyA8LSBwbG90X2x5KGRmX3BjdCwgDQogICAgICAgICAgICAgICB4ID0gfkRldmljZSwgDQogICAgICAgICAgICAgICB5ID0gflBlcmNlbnRhZ2UsIA0KICAgICAgICAgICAgICAgY29sb3IgPSB+UGF5bWVudCwgDQogICAgICAgICAgICAgICB0eXBlID0gJ2JhcicsDQogICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCJKdW1sYWg6IiwgQ291bnQsICI8YnI+UGVyc2VudGFzZToiLCByb3VuZChQZXJjZW50YWdlLCAxKSwgIiUiKSwNCiAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICJ0ZXh0IikgJT4lDQogIGxheW91dCgNCiAgICB0aXRsZSA9ICJEaXN0cmlidXNpIE1ldG9kZSBQZW1iYXlhcmFuIEJlcmRhc2Fya2FuIFBlcmFuZ2thdCIsDQogICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIlBlcnNlbnRhc2UgKCUpIiwgdGlja3N1ZmZpeCA9ICIlIiksDQogICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIkplbmlzIFBlcmFuZ2thdCIpLA0KICAgIGJhcm1vZGUgPSAnc3RhY2snDQogICkNCg0KZmlnDQpgYGANCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCioqSW50ZXJwcmV0YXNpIFZpc3VhbGlzYXNpKioNCg0KVmlzdWFsaXNhc2kgZGkgYXRhcyBtZW55YWppa2FuIGRpc3RyaWJ1c2kgbWV0b2RlIHBlbWJheWFyYW4gc2VjYXJhIHJlbGF0aWYgdGVyaGFkYXAgamVuaXMgcGVyYW5na2F0IHlhbmcgZGlndW5ha2FuLiBNZXNraXB1biB0b3RhbCBwZW5nZ3VuYSBiZXJiZWRhLCBncmFmaWsgaW5pIG1lbnN0YW5kYXJpc2FzaSBkYXRhIGtlIGRhbGFtIHNrYWxhIDEwMCUgdW50dWsgbWVtcGVybXVkYWggcGVyYmFuZGluZ2FuIHBlcmlsYWt1Lg0KDQpUZXJsaWhhdCBqZWxhcyBiYWh3YSBFLVdhbGxldCBtZW5kb21pbmFzaSBzZWdtZW4gTW9iaWxlICh3YXJuYSBFLVdhbGxldCBqYXVoIGxlYmloIGx1YXMgZGkgYmF0YW5nIE1vYmlsZSksIHNlZGFuZ2thbiBLYXJ0dSBLcmVkaXQgbWVuamFkaSBwaWxpaGFuIHV0YW1hIGRpIHNlZ21lbiBEZXNrdG9wLiBQZXJiZWRhYW4gcHJvcG9yc2kgeWFuZyBtZW5jb2xvayBpbmkgc2VjYXJhIHZpc3VhbCBtZW5kdWt1bmcgaGFzaWwgdWppIENoaS1TcXVhcmUgeWFuZyBtZW55YXRha2FuIGFkYW55YSBodWJ1bmdhbiBzaWduaWZpa2FuIGFudGFyYSBwZXJhbmdrYXQgZGFuIHBpbGloYW4gcGVtYmF5YXJhbi4NCg0KPC9kaXY+DQoNCiMgU3R1ZGkgS2FzdXMgNQ0KDQojIyBLZXNhbGFoYW4gVGlwZSBJIGRhbiBUaXBlIElJIChLb25zZXB0dWFsKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KU2VidWFoIHBlcnVzYWhhYW4gZmludGVjaCBzZWRhbmcgbWVuZ3VqaSBhcGFrYWggYWxnb3JpdG1hIGRldGVrc2kgcGVuaXB1YW4gKGZyYXVkIGRldGVjdGlvbikgeWFuZyBiYXJ1IGRhcGF0IG1lbmd1cmFuZ2kgdHJhbnNha3NpIHBlbmlwdWFuLg0KDQoqICRIXzAkOiBBbGdvcml0bWEgYmFydSB0aWRhayBtZW5ndXJhbmdpIHBlbmlwdWFuLg0KKiAkSF8xJDogQWxnb3JpdG1hIGJhcnUgbWVuZ3VyYW5naSBwZW5pcHVhbi4NCjwvZGl2Pg0KDQojIyBUdWdhcw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KMS4gSmVsYXNrYW4gYXBhIHlhbmcgZGltYWtzdWQgZGVuZ2FuIEtlc2FsYWhhbiBUaXBlIEkgJChcYWxwaGEpJCBkYWxhbSBrb250ZWtzIGluaS4NCjIuIEplbGFza2FuIGFwYSB5YW5nIGRpbWFrc3VkIGRlbmdhbiBLZXNhbGFoYW4gVGlwZSBJSSAkKFxiZXRhKSQgZGFsYW0ga29udGVrcyBpbmkuDQozLiBJZGVudGlmaWthc2kga2VzYWxhaGFuIG1hbmEgeWFuZyBsZWJpaCBtZXJ1Z2lrYW4gZGFyaSBwZXJzcGVrdGlmIGJpc25pcy4NCjQuIERpc2t1c2lrYW4gYmFnYWltYW5hIHVrdXJhbiBzYW1wZWwgbWVtZW5nYXJ1aGkgS2VzYWxhaGFuIFRpcGUgSUkuDQo1LiBKZWxhc2thbiBodWJ1bmdhbiBhbnRhcmEgJFxhbHBoYSQsICRcYmV0YSQsIGRhbiBrZWt1YXRhbiBzdGF0aXN0aWsgKHN0YXRpc3RpY2FsIHBvd2VyKS4NCjwvZGl2Pg0KDQojIyBKYXdhYmFuDQoNCiMjIyBLZXNhbGFoYW4gVGlwZSBJICgkXGFscGhhJCkgZGFsYW0gS29udGVrcyBBbGdvcml0bWEgQmFydQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KS2VzYWxhaGFuIFRpcGUgSSB0ZXJqYWRpIGppa2Ega2l0YSBtZW5vbGFrIEhpcG90ZXNpcyBOb2wgKCRIXzAkKSwgcGFkYWhhbCBzZWJlbmFybnlhICRIXzAkIGJlbmFyLg0KDQoqIERhbGFtIGtvbnRla3MgaW5pOiBQZXJ1c2FoYWFuIG1lbnlpbXB1bGthbiBiYWh3YSBhbGdvcml0bWEgYmFydSBiZXJoYXNpbCBtZW5ndXJhbmdpIHBlbmlwdWFuLCBwYWRhaGFsIGtlbnlhdGFhbm55YSBhbGdvcml0bWEgdGVyc2VidXQgdGlkYWsgbWVtYmVyaWthbiBwZXJ1YmFoYW4gYXBhIHB1bi4NCiogSXN0aWxhaCBhd2FtOiBGYWxzZSBQb3NpdGl2ZS4gQW5kYSBtZXJhc2EgdGVsYWggbWVuZW11a2FuIHNvbHVzaSwgbmFtdW4gc2ViZW5hcm55YSBpdHUgaGFueWEga2ViZXR1bGFuLg0KPC9kaXY+DQoNCiMjIyBLZXNhbGFoYW4gVGlwZSBJSSAoJFxiZXRhJCkgZGFsYW0gS29udGVrcyBBbGdvcml0bWEgQmFydQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KS2VzYWxhaGFuIFRpcGUgSUkgdGVyamFkaSBqaWthIGtpdGEgZ2FnYWwgbWVub2xhayBIaXBvdGVzaXMgTm9sICgkSF8wJCksIHBhZGFoYWwgc2ViZW5hcm55YSAkSF8wJCBzYWxhaC4NCg0KKiBEYWxhbSBrb250ZWtzIGluaTogUGVydXNhaGFhbiBtZW55aW1wdWxrYW4gYmFod2EgYWxnb3JpdG1hIGJhcnUgZ2FnYWwgbWVuZ3VyYW5naSBwZW5pcHVhbiwgcGFkYWhhbCBrZW55YXRhYW5ueWEgYWxnb3JpdG1hIHRlcnNlYnV0IHNhbmdhdCBlZmVrdGlmIGRhbGFtIG1lbmd1cmFuZ2kgcGVuaXB1YW4uDQoqIElzdGlsYWggYXdhbTogRmFsc2UgTmVnYXRpdmUuIEFuZGEgbWVsZXdhdGthbiBzb2x1c2kgeWFuZyBzZWJlbmFybnlhIGJhZ3VzLg0KPC9kaXY+DQoNCiMjIyBJZGVudGlmaWthc2kgS2VzYWxhaGFuIHlhbmcgTGViaWggTWVydWdpa2FuIChQZXJzcGVrdGlmIEJpc25pcykNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCkRhcmkgcGVyc3Bla3RpZiBiaXNuaXMgZmludGVjaCwgS2VzYWxhaGFuIFRpcGUgSUkgKCRcYmV0YSQpIGJpYXNhbnlhIGRpYW5nZ2FwIGxlYmloIG1lcnVnaWthbiwgbmFtdW4gdGVyZ2FudHVuZyBwYWRhIGJpYXlhIG9wZXJhc2lvbmFsOg0KDQoqIEppa2EgS2VzYWxhaGFuIFRpcGUgSSB0ZXJqYWRpOiBQZXJ1c2FoYWFuIG1lbWJ1YW5nIHdha3R1IGRhbiBiaWF5YSB1bnR1ayBtZW5naW1wbGVtZW50YXNpa2FuIHNpc3RlbSBiYXJ1IHlhbmcgdGVybnlhdGEgdGlkYWsgYmVyZ3VuYS4NCiogSmlrYSBLZXNhbGFoYW4gVGlwZSBJSSB0ZXJqYWRpIChMZWJpaCBCZXJpc2lrbyk6IFBlcnVzYWhhYW4gbWVsZXdhdGthbiBrZXNlbXBhdGFuIHVudHVrIG1lbmdoZW50aWthbiBwZW5pcHVhbi4gSGFsIGluaSBtZW55ZWJhYmthbiBrZXJ1Z2lhbiBmaW5hbnNpYWwgeWFuZyBiZXJrZWxhbmp1dGFuIGRhcmkgdHJhbnNha3NpIHBlbmlwdWFuIHlhbmcgdGlkYWsgdGVyZGV0ZWtzaSwgc2VydGEgcmlzaWtvIHJ1c2FrbnlhIHJlcHV0YXNpIHBlcnVzYWhhYW4gZGkgbWF0YSBuYXNhYmFoLg0KPC9kaXY+DQoNCiMjIyBQZW5nYXJ1aCBVa3VyYW4gU2FtcGVsIHRlcmhhZGFwIEtlc2FsYWhhbiBUaXBlIElJDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpUZXJkYXBhdCBodWJ1bmdhbiB0ZXJiYWxpayBhbnRhcmEgdWt1cmFuIHNhbXBlbCAoJG4kKSBkYW4gS2VzYWxhaGFuIFRpcGUgSUkgKCRcYmV0YSQpOg0KDQoqIFNlbWFraW4gYmVzYXIgdWt1cmFuIHNhbXBlbCwgbWFrYSBLZXNhbGFoYW4gVGlwZSBJSSBha2FuIHNlbWFraW4ga2VjaWwuDQoqIERlbmdhbiBkYXRhIHlhbmcgbGViaWggYmFueWFrLCB1amkgc3RhdGlzdGlrIG1lbmphZGkgbGViaWggc2Vuc2l0aWYgdW50dWsgbWVuZGV0ZWtzaSBwZXJiZWRhYW4gYXRhdSBlZmVrIHlhbmcgc2ViZW5hcm55YSBhZGEgKHNla2VjaWwgYXBhIHB1biBpdHUpLiBEZW5nYW4ga2F0YSBsYWluLCBzYW1wZWwgeWFuZyBiZXNhciBtZW1wZXJrZWNpbCBrZW11bmdraW5hbiBraXRhICJtZWxld2F0a2FuIiBhbGdvcml0bWEgeWFuZyBzZWJlbmFybnlhIGJhZ3VzLg0KPC9kaXY+DQoNCiMjIyBIdWJ1bmdhbiBhbnRhcmEgJFxhbHBoYSQsICRcYmV0YSQsIGRhbiBLZWt1YXRhbiBTdGF0aXN0aWsgKFN0YXRpc3RpY2FsIFBvd2VyKQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KS2V0aWdhIGtvbnNlcCBpbmkgc2FsaW5nIGJlcmthaXRhbiBkYWxhbSBzZWJ1YWgga2VzZWltYmFuZ2FuOg0KDQoqIEtla3VhdGFuIFN0YXRpc3RpayAoUG93ZXIpOiBEaWRlZmluaXNpa2FuIHNlYmFnYWkgJDEgLSBcYmV0YSQuIEluaSBhZGFsYWggcHJvYmFiaWxpdGFzIHVudHVrIG1lbm9sYWsgJEhfMCQgZGVuZ2FuIGJlbmFyIChrZW1hbXB1YW4gbWVuZGV0ZWtzaSBlZmVrIHlhbmcgbnlhdGEpLg0KKiBUcmFkZS1vZmYgJFxhbHBoYSQgZGFuICRcYmV0YSQ6IEppa2Ega2l0YSBtZW5jb2JhIG1lbXBlcmtlY2lsICRcYWxwaGEkIChhZ2FyIHNhbmdhdCBoYXRpLWhhdGkgZGFsYW0gbWVueWltcHVsa2FuIGtlc3Vrc2VzYW4pLCBtYWthIHJpc2lrbyAkXGJldGEkIGFrYW4gY2VuZGVydW5nIG1lbmluZ2thdCAoa2l0YSBqYWRpIGxlYmloIHNlcmluZyBtZWxld2F0a2FuIGtlc3Vrc2VzYW4geWFuZyBueWF0YSkuDQoqIE1lbmluZ2thdGthbiBQb3dlcjogVW50dWsgbWVuaW5na2F0a2FuIGtla3VhdGFuIHN0YXRpc3RpayAobWVtcGVya2VjaWwgJFxiZXRhJCkgdGFucGEgbWVuZ29yYmFua2FuICRcYWxwaGEkLCBjYXJhIHRlcmJhaWsgYWRhbGFoIGRlbmdhbiBtZW5pbmdrYXRrYW4gdWt1cmFuIHNhbXBlbC4NCjwvZGl2Pg0KDQojIFN0dWRpIEthc3VzIDYNCg0KIyMgUC1WYWx1ZSBkYW4gUGVuZ2FtYmlsYW4gS2VwdXR1c2FuIFN0YXRpc3Rpaw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KU2VidWFoIGV2YWx1YXNpIG1vZGVsIHByZWRpa3NpIGNodXJuIChwZXJwaW5kYWhhbiBwZWxhbmdnYW4pIG1lbmdoYXNpbGthbiBoYXNpbCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiogU3RhdGlzdGlrIFVqaSAoVGVzdCBTdGF0aXN0aWMpOiAyLDMxDQoqIFAtdmFsdWU6IDAsMDIxDQoqIFRpbmdrYXQgU2lnbmlmaWthbnNpICRcYWxwaGEkOiAwLDA1DQo8L2Rpdj4NCg0KIyMgVHVnYXMNCjxkaXYgY2xhc3M9ImluZm8tYm94Ij4NCjEuIEplbGFza2FuIGFydGkgZGFyaSBwLXZhbHVlIGRhbGFtIGtvbnRla3MgaW5pLg0KMi4gQnVhdGxhaCBzZWJ1YWgga2VwdXR1c2FuIHN0YXRpc3RpayAoYXBha2FoIG1lbm9sYWsgYXRhdSBnYWdhbCBtZW5vbGFrIGhpcG90ZXNpcyBub2wpLg0KMy4gVGVyamVtYWhrYW4ga2VwdXR1c2FuIHRlcnNlYnV0IGtlIGRhbGFtIGJhaGFzYSBub24tdGVrbmlzIHVudHVrIHBpaGFrIG1hbmFqZW1lbi4NCjQuIERpc2t1c2lrYW4gcmlzaWtvIHlhbmcgbXVuY3VsIGppa2Egc2FtcGVsIHlhbmcgZGlndW5ha2FuIHRpZGFrIHJlcHJlc2VudGF0aWYuDQo1LiBKZWxhc2thbiBtZW5nYXBhIHAtdmFsdWUgdGlkYWsgbWVuZ3VrdXIgYmVzYXJueWEgZWZlayAoZWZmZWN0IHNpemUpLg0KPC9kaXY+DQoNCiMjIEphd2FiYW4NCg0KIyMjIEFydGkgUC12YWx1ZSBkYWxhbSBLb250ZWtzIEluaQ0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KUC12YWx1ZSBzZWJlc2FyIDAsMDIxIGJlcmFydGk6IEppa2Ega2l0YSBiZXJhc3Vtc2kgYmFod2EgbW9kZWwgcHJlZGlrc2kgY2h1cm4gc2ViZW5hcm55YSB0aWRhayBlZmVrdGlmIChIaXBvdGVzaXMgTm9sIGJlbmFyKSwgbWFrYSBwcm9iYWJpbGl0YXMgdW50dWsgbWVuZGFwYXRrYW4gaGFzaWwgdWppIHNlYmVzYXIgMiwzMSBhdGF1IGxlYmloIHNlY2FyYSBrZWJldHVsYW4gaGFueWEgc2ViZXNhciAyLDElLiBEZW5nYW4ga2F0YSBsYWluLCBoYXNpbCB5YW5nIGtpdGEgcGVyb2xlaCBjdWt1cCBla3N0cmVtIHNlaGluZ2dhIGtlY2lsIGtlbXVuZ2tpbmFubnlhIHRlcmphZGkga2FyZW5hIGZha3RvciBrZWJldHVsYW4gc2FqYS4NCjwvZGl2Pg0KDQojIyMgS2VwdXR1c2FuIFN0YXRpc3Rpaw0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KQmVyZGFzYXJrYW4gZGF0YSB5YW5nIGRpcGVyb2xlaCwga2VwdXR1c2FuIHN0YXRpc3RpayB5YW5nIGRpYW1iaWwgYWRhbGFoIE1lbm9sYWsgSGlwb3Rlc2lzIE5vbCAoJEhfMCQpLiBLZXB1dHVzYW4gaW5pIGRpZGFzYXJrYW4gcGFkYSBwZXJiYW5kaW5nYW4gYW50YXJhIFAtdmFsdWUgKDAsMDIxKSBkZW5nYW4gdGluZ2thdCBzaWduaWZpa2Fuc2kgJFxhbHBoYSQgKDAsMDUpLiBLYXJlbmEgJDAsMDIxIDwgMCwwNSQsIGhhc2lsIGluaSBiZXJhZGEgZGkgZGFsYW0gd2lsYXlhaCBwZW5vbGFrYW4uIFNlY2FyYSBsZWJpaCBtZW5kYWxhbSwgc3RhdGlzdGlrIHVqaSBzZWJlc2FyIDIsMzEgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgcHJlZGlrc2kga2l0YSBiZXJhZGEgbGViaWggZGFyaSBkdWEgc3RhbmRhciBkZXZpYXNpIGRhcmkgdGl0aWsgbm9sLCB5YW5nIG1lbWJlcmlrYW4gVGluZ2thdCBLZXBlcmNheWFhbiBzZWJlc2FyIDk3LDklIGJhaHdhIGVmZWt0aXZpdGFzIG1vZGVsIGluaSBueWF0YSBkYW4gYnVrYW4gc2VrYWRhciBmbHVrdHVhc2kgZGF0YSBhY2FrLg0KDQoqKlRhYmVsIFJpbmdrYXNhbiBLZXB1dHVzYW4qKiANCg0KfCAqKkluZGlrYXRvcioqCXwgKipOaWxhaSoqIHwJKipTdGF0dXMqKiB8DQp8Oi0tLXw6LS0tfDotLS18DQp8IFN0YXRpc3RpayBVamkgJChaLXNjb3JlKSQgfAkyLDMxCXwgU2lnbmlmaWthbiB8DQp8IFAtVmFsdWUJfCAwLDAyMQl8IFNpZ25pZmlrYW4gfA0KfCBBbHBoYQl8IDAsMDUJfCBTdGFuZGFyIHwNCnwgKipLZXNpbXB1bGFuKioJfCAqKlAtVmFsdWUgPCAkXGFscGhhJCAqKgl8ICoqVE9MQUsgSDAqKiB8DQoNCjwvZGl2Pg0KDQojIyMgSW50ZXJwcmV0YXNpIEJhaGFzYSBOb24tVGVrbmlzIChNYW5hamVtZW4pDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpIYXNpbCBhbmFsaXNpcyBtZW51bmp1a2thbiBiYWh3YSBtb2RlbCBwcmVkaWtzaSBjaHVybiBraXRhIGJla2VyamEgZGVuZ2FuIHNhbmdhdCBiYWlrLiBLaXRhIG1lbWlsaWtpIGJ1a3RpIHlhbmcga3VhdCAodGluZ2thdCBrZXlha2luYW4gc2VraXRhciA5OCUpIGJhaHdhIG1vZGVsIGluaSBtYW1wdSBtZW5kZXRla3NpIHBlbGFuZ2dhbiB5YW5nIGFrYW4gcGluZGFoIHNlY2FyYSBzaWduaWZpa2FuLCBidWthbiBoYW55YSBzZWthZGFyIHRlYmFrYW4gYWNhay4gT2xlaCBrYXJlbmEgaXR1LCBtb2RlbCBpbmkgbGF5YWsgdW50dWsgc2VnZXJhIGRpaW1wbGVtZW50YXNpa2FuIGRhbGFtIHN0cmF0ZWdpIHJldGVuc2kgcGVsYW5nZ2FuIGtpdGEuDQo8L2Rpdj4NCg0KIyMjIFJpc2lrbyBTYW1wZWwgVGlkYWsgUmVwcmVzZW50YXRpZg0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KSmlrYSBzYW1wZWwgeWFuZyBkaWd1bmFrYW4gdGlkYWsgbWV3YWtpbGkgc2VsdXJ1aCBwb3B1bGFzaSAobWlzYWxueWEgaGFueWEgbWVuZ2FtYmlsIGRhdGEgcGVsYW5nZ2FuIGxhbWEpLCBtYWthIG11bmN1bCByaXNpa28gYmVzYXI6DQoNCiogR2VuZXJhbGlzYXNpIHlhbmcgU2FsYWg6IE1vZGVsIG11bmdraW4gdGVybGloYXQgc2FuZ2F0IGFrdXJhdCBwYWRhIGRhdGEgc2FtcGVsLCBuYW11biBnYWdhbCB0b3RhbCBzYWF0IGRpdGVyYXBrYW4gcGFkYSBwZWxhbmdnYW4gYmFydSBhdGF1IHNlZ21lbiBwYXNhciB5YW5nIGJlcmJlZGEuDQoNCiogQmlhcyBIYXNpbDogS2VwdXR1c2FuIHN0YXRpc3RpayBtZW5qYWRpIHRpZGFrIHZhbGlkIGthcmVuYSBQLXZhbHVlIHlhbmcgcmVuZGFoIGJpc2EgamFkaSBtZXJ1cGFrYW4gaGFzaWwgZGFyaSBiaWFzIHNlbGVrc2ksIGJ1a2FuIGthcmVuYSBlZmVrdGl2aXRhcyBtb2RlbCB5YW5nIHNlYmVuYXJueWEuDQo8L2Rpdj4NCg0KIyMjIE1lbmdhcGEgUC12YWx1ZSBUaWRhayBNZW5ndWt1ciBCZXNhcm55YSBFZmVrIChFZmZlY3QgU2l6ZSk/DQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpQLXZhbHVlIGhhbnlhIG1lbWJlcmkgdGFodSBraXRhIGFwYWthaCBhZGEgYnVrdGkgYmFod2Egc2VidWFoIGVmZWsgaXR1IG55YXRhIChzaWduaWZpa2Fuc2kpLCB0ZXRhcGkgdGlkYWsgbWVtYmVyaSB0YWh1IHNlYmVyYXBhIGJlc2FyIGRhbXBhayBlZmVrIHRlcnNlYnV0Lg0KDQoqIENvbnRvaDogU2VidWFoIG1vZGVsIGJpc2EgbWVtaWxpa2kgUC12YWx1ZSB5YW5nIHNhbmdhdCBrZWNpbCAoc2FuZ2F0IHNpZ25pZmlrYW4pIGthcmVuYSB1a3VyYW4gc2FtcGVsIHlhbmcgbWFzaWYsIG5hbXVuIHRlcm55YXRhIGhhbnlhIG1hbXB1IG1lbmd1cmFuZ2kgY2h1cm4gc2ViZXNhciAwLDAwMSUuIFNlY2FyYSBzdGF0aXN0aWsgaXR1IHNpZ25pZmlrYW4sIG5hbXVuIHNlY2FyYSBiaXNuaXMgZWZlayB0ZXJzZWJ1dCBtdW5na2luIHRlcmxhbHUga2VjaWwgdW50dWsgZGlhbmdnYXAgYmVyaGFyZ2EuDQo8L2Rpdj4NCg0KIyMjIFZpc3VhbGlzYXNpIEt1cnZhIERpc3RyaWJ1c2kgTm9ybWFsDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQpWaXN1YWxpc2FzaSBpbmkgc2VjYXJhIGludHVpdGlmIG1lbnVuanVra2FuIGRpIG1hbmEgcG9zaXNpIGhhc2lsIHVqaSBraXRhICgyLDMxKSB0ZXJoYWRhcCBiYXRhcyBrcml0aXMgeWFuZyBkaXRlbnR1a2FuIG9sZWggJFxhbHBoYSQgKDAsMDUpLg0KPC9kaXY+DQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KDQojIDEuIFBlcnNpYXBhbiBEYXRhIEt1cnZhDQp4IDwtIHNlcSgtNCwgNCwgbGVuZ3RoLm91dCA9IDEwMDApDQp5IDwtIGRub3JtKHgpDQpkZiA8LSBkYXRhLmZyYW1lKHgsIHkpDQoNCiMgMi4gTWVuZW50dWthbiBUaXRpayBLcml0aXMgdW50dWsgYWxwaGEgPSAwLjA1IChPbmUtdGFpbGVkKQ0Kel9jcml0aWNhbCA8LSBxbm9ybSgxIC0gMC4wNSkNCnpfc2NvcmUgPC0gMi4zMSAjIERhcmkgS2FzdXMgNg0KDQojIDMuIE1lbWJ1YXQgUGxvdA0KcCA8LSBnZ3Bsb3QoZGYsIGFlcyh4ID0geCwgeSA9IHkpKSArDQogIGdlb21fbGluZShjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IDEpICsNCiAgIyBBcmVhIFBlbm9sYWthbiAoQWxwaGEgMC4wNSkNCiAgZ2VvbV9hcmVhKGRhdGEgPSBmaWx0ZXIoZGYsIHggPj0gel9jcml0aWNhbCksIGFlcyhmaWxsID0gIkFyZWEgUGVub2xha2FuIChBbHBoYSAwLjA1KSIpLCBhbHBoYSA9IDAuNCkgKw0KICAjIEdhcmlzIFN0YXRpc3RpayBVamkNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IHpfc2NvcmUsIGNvbG9yID0gIlN0YXRpc3RpayBVamkgKDIuMzEpIiksIGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAxKSArDQogICMgQW5vdGFzaSBQLVZhbHVlDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IDMsIHkgPSAwLjA1LCBsYWJlbCA9ICJQLVZhbHVlID0gMC4wMjEiLCBjb2xvciA9ICJkYXJrcmVkIiwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gInJlZCIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9ICJibHVlIikgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgUC1WYWx1ZTogRXZhbHVhc2kgTW9kZWwgQ2h1cm4iLA0KICAgICAgIHN1YnRpdGxlID0gIlotU2NvcmUgYmVyYWRhIGRpIGRhbGFtIEFyZWEgUGVub2xha2FuIiwNCiAgICAgICB4ID0gIlotU2NvcmUiLCB5ID0gIkRlbnNpdHkiLA0KICAgICAgIGZpbGwgPSAiIiwgY29sb3IgPSAiIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KIyA0LiBVYmFoIE1lbmphZGkgSW50ZXJha3RpZg0KZmlnIDwtIGdncGxvdGx5KHApICU+JQ0KICBsYXlvdXQobGVnZW5kID0gbGlzdChvcmllbnRhdGlvbiA9ICJoIiwgeSA9IC0wLjIpKQ0KDQpmaWcNCmBgYA0KPGRpdiBjbGFzcz0iaW5mby1ib3giPg0KR3JhZmlrIGRpIGF0YXMgbWVudW5qdWtrYW4gZGlzdHJpYnVzaSBub3JtYWwgc3RhbmRhciB5YW5nIG1ld2FraWxpIHBlbmd1amlhbiBtb2RlbCBjaHVybi4gR2FyaXMgcHV0dXMtcHV0dXMgYmlydSBtZXdha2lsaSBTdGF0aXN0aWsgVWppICgyLDMxKSBraXRhLCB5YW5nIHRlcmxpaGF0IG1hc3VrIGphdWgga2UgZGFsYW0gQXJlYSBQZW5vbGFrYW4gbWVyYWggKGJhdGFzIGtyaXRpcyAkXGFscGhhID0gMCwwNSQpLiBLYXJlbmEgcG9zaXNpIHN0YXRpc3RpayB1amkgYmVyYWRhIGRpIGFyZWEgbWVyYWggZGFuIFAtdmFsdWUgKDAsMDIxKSBsZWJpaCBrZWNpbCBkYXJpIDAsMDUsIGtpdGEgc2VjYXJhIHZpc3VhbCBkYXBhdCBtZW5nb25maXJtYXNpIGJhaHdhIGVmZWt0aXZpdGFzIG1vZGVsIGluaSBueWF0YSBkYW4gc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrLg0KPC9kaXY+DQoNCiMgUmVmZXJlbnNpDQo8ZGl2IGNsYXNzPSJpbmZvLWJveCI+DQoxLiBXYWxwb2xlLCBSLiBFLiwgTXllcnMsIFIuIEguLCBNeWVycywgUy4gTC4sICYgWWUsIEsuICgyMDEyKS4gUHJvYmFiaWxpdHkgJiBTdGF0aXN0aWNzIGZvciBFbmdpbmVlcnMgJiBTY2llbnRpc3RzICg5dGggZWQuKS4gUGVhcnNvbiBFZHVjYXRpb24uDQoNCiogTGluayBBa3NlczogaHR0cHM6Ly9hcmNoaXZlLm9yZy9kZXRhaWxzL3Byb2JhYmlsaXR5c3RhdGkwMDAwd2FscF9oN28xDQoNCiogUmVsZXZhbnNpOiBEaWd1bmFrYW4gdW50dWsgbWVuamF3YWIgVHVnYXMgMS4zIGRhbiBUdWdhcyAyLjMuIEJ1a3UgaW5pIG1lbnllZGlha2FuIHJ1bXVzIGRhc2FyIHBlcmhpdHVuZ2FuIHN0YXRpc3RpayBaIGRhbiBzdGF0aXN0aWsgdC4gU2VsYWluIGl0dSwgYnVrdSBpbmkgbWVuamFkaSByZWZlcmVuc2kgdXRhbWEgZGFsYW0gbWVuZW50dWthbiBuaWxhaSBrcml0aXMgKHNlcGVydGkgMSw5NiB1bnR1ayBaIGRhbiAyLDI2MiB1bnR1ayB0KSBtZWxhbHVpIHRhYmVsIGRpc3RyaWJ1c2kgc3RhdGlzdGlrIHlhbmcgdGVyZGFwYXQgZGkgYmFnaWFuIGxhbXBpcmFubnlhLg0KDQoyLk1vbnRnb21lcnksIEQuIEMuLCAmIFJ1bmdlciwgRy4gQy4gKDIwMTApLiBBcHBsaWVkIFN0YXRpc3RpY3MgYW5kIFByb2JhYmlsaXR5IGZvciBFbmdpbmVlcnMgKDV0aCBlZC4pLiBKb2huIFdpbGV5ICYgU29ucy4NCg0KKiBMaW5rIEFrc2VzOiBodHRwczovL3d3dy53aWxleS5jb20vZW4tdXMvQXBwbGllZCtTdGF0aXN0aWNzK2FuZCtQcm9iYWJpbGl0eStmb3IrRW5naW5lZXJzJTJDKzd0aCtFZGl0aW9uLXAtOTc4MTExOTQwMDM2Mw0KDQoqIFJlbGV2YW5zaTogRGlndW5ha2FuIHVudHVrIG1lbmphd2FiIFR1Z2FzIDEuMSwgMS40LCAyLjEsIGRhbiAyLjQuIFJlZmVyZW5zaSBpbmkgbWVtYmVyaWthbiBwcm9zZWR1ciBzaXN0ZW1hdGlzIGRhbGFtIG1lbnl1c3VuIGhpcG90ZXNpcyBzdGF0aXN0aWsgKCRIXzAkIGRhbiAkSF8xJCkgc2VydGEgbWVuZXRhcGthbiBrcml0ZXJpYSBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gYmVyZGFzYXJrYW4gcGVyYmFuZGluZ2FuIGFudGFyYSAkcC12YWx1ZSQgZGVuZ2FuIHRpbmdrYXQgc2lnbmlmaWthbnNpICgkXGFscGhhJCkuDQoNCjMuIEFuZGVyc29uLCBELiBSLiwgU3dlZW5leSwgRC4gSi4sIFdpbGxpYW1zLCBULiBBLiwgQ2FtbSwgSi4gRC4sICYgQ29jaHJhbiwgSi4gSi4gKDIwMTgpLiBTdGF0aXN0aWNzIGZvciBCdXNpbmVzcyAmIEVjb25vbWljcy4gQ2VuZ2FnZSBMZWFybmluZy4NCg0KKiBMaW5rIEFrc2VzOiBodHRwczovL3d3dy5jZW5nYWdlLmNvbS9jL3N0YXRpc3RpY3MtZm9yLWJ1c2luZXNzLWVjb25vbWljcy0xNGUtYW5kZXJzb24vDQoNCiogUmVsZXZhbnNpOiBEaWd1bmFrYW4gdW50dWsgbWVuamF3YWIgVHVnYXMgMS41LiBCdWt1IGluaSBtZW1iYW50dSBkYWxhbSBtZW5lcmplbWFoa2FuIGFuZ2thLWFuZ2thIHN0YXRpc3RpayBtZW5qYWRpIGJhaGFzYSBhbmFsaXRpayBiaXNuaXMgeWFuZyBkYXBhdCBkaXBhaGFtaSBvbGVoIG1hbmFqZW1lbiwga2h1c3VzbnlhIGRhbGFtIGtvbnRla3MgcGxhdGZvcm0gcGVtYmVsYWphcmFuIGRpZ2l0YWwuDQoNCjQuIEFsYmVydCwgVy4sICYgVHVsbGlzLCBULiAoMjAxMykuIE1lYXN1cmluZyB0aGUgVXNlciBFeHBlcmllbmNlOiBDb2xsZWN0aW5nLCBBbmFseXppbmcsIGFuZCBQcmVzZW50aW5nIFVzYWJpbGl0eSBNZXRyaWNzLiBNb3JnYW4gS2F1Zm1hbm4uDQoNCiogTGluayBBa3NlczogaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vYm9vay85NzgwMTI0MTU3ODExL21lYXN1cmluZy10aGUtdXNlci1leHBlcmllbmNlDQoNCiogUmVsZXZhbnNpOiBEaWd1bmFrYW4gdW50dWsgbWVuamF3YWIgVHVnYXMgMi4xIGRhbiBUdWdhcyAyLjUuIFJlZmVyZW5zaSBpbmkgbWVtYmVyaWthbiBrb250ZWtzIGluZHVzdHJpIG1lbmdlbmFpIG1ldHJpayB3YWt0dSBwZW55ZWxlc2FpYW4gdHVnYXMgKHRhc2sgY29tcGxldGlvbiB0aW1lKSBkYW4gdmFsaWRpdGFzIHBlbmd1amlhbiBwYWRhIHNhbXBlbCBwZW5nZ3VuYSB5YW5nIGJlcmp1bWxhaCBzZWRpa2l0IChzYW1wZWwga2VjaWwpIGRhbGFtIHJpc2V0IFVYLg0KDQo1LiBPcGVuU3RheC4gKDIwMjIpLiBJbnRyb2R1Y3RvcnkgU3RhdGlzdGljcy4gUmljZSBVbml2ZXJzaXR5Lg0KDQoqIExpbmsgQWtzZXM6IGh0dHBzOi8vb3BlbnN0YXgub3JnL2RldGFpbHMvYm9va3MvaW50cm9kdWN0b3J5LXN0YXRpc3RpY3MNCg0KKiBSZWxldmFuc2k6IERpZ3VuYWthbiB1bnR1ayBtZW5qYXdhYiBTdHVkaSBLYXN1cyAxLCAzLCBkYW4gNC4gUmVmZXJlbnNpIGluaSBtZW1iZXJpa2FuIGxhbmRhc2FuIHRlb3JpIG1lbmdlbmFpIGRpc3RyaWJ1c2kgZGF0YSwgcGVuZ2hpdHVuZ2FuIFN0YW5kYXJkIERldmlhdGlvbiwgZGFuIHByb3NlZHVyIGZvcm1hbCBkYWxhbSB1amkgaGlwb3Rlc2lzIHVudHVrIG1lbWJhbmRpbmdrYW4gZHVhIGtlbG9tcG9rIGRhdGEuDQoNCjYuIEludmVzdG9wZWRpYSBTdGFmZi4gKDIwMjMpLiBUeXBlIEkgYW5kIFR5cGUgSUkgRXJyb3JzIGluIFN0YXRpc3RpY2FsIEh5cG90aGVzaXMgVGVzdGluZy4NCg0KKiBMaW5rIEFrc2VzOiBodHRwczovL3d3dy5pbnZlc3RvcGVkaWEuY29tL3Rlcm1zL3QvdHlwZS0xLWVycm9yLmFzcA0KDQoqIFJlbGV2YW5zaTogRGlndW5ha2FuIHVudHVrIG1lbmphd2FiIFN0dWRpIEthc3VzIDUuIFJlZmVyZW5zaSBpbmkgc2FuZ2F0IHJlbGV2YW4gdW50dWsgbWVuZ2lkZW50aWZpa2FzaSBrZXJ1Z2lhbiBkYXJpIHBlcnNwZWt0aWYgYmlzbmlzIChmaW50ZWNoKSBrZXRpa2EgdGVyamFkaSBrZXNhbGFoYW4gZGV0ZWtzaSBwZW5pcHVhbiAoZnJhdWQgZGV0ZWN0aW9uKS4NCg0KNy4gR2FsbG8sIEEuICgyMDE2KS4gQSBSZWZyZXNoZXIgb24gU3RhdGlzdGljYWwgU2lnbmlmaWNhbmNlLiBIYXJ2YXJkIEJ1c2luZXNzIFJldmlldy4NCg0KKiBMaW5rIEFrc2VzOiBodHRwczovL2hici5vcmcvMjAxNi8wMi9hLXJlZnJlc2hlci1vbi1zdGF0aXN0aWNhbC1zaWduaWZpY2FuY2UNCg0KKiBSZWxldmFuc2k6IERpZ3VuYWthbiB1bnR1ayBtZW5qYXdhYiBTdHVkaSBLYXN1cyA2LiBNZW1iYW50dSBtZW5lcmplbWFoa2FuIGhhc2lsIHN0YXRpc3RpayB5YW5nIGtvbXBsZWtzIChzZXBlcnRpIFAtdmFsdWUpIGtlIGRhbGFtIG5hcmFzaSB5YW5nIGRhcGF0IGRpcGFoYW1pIG9sZWggbWFuYWplbWVuIHVudHVrIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBzdHJhdGVnaXMuDQoNCjguIEJha3RpIFNpcmVnYXIsIE0uU2MuLCBDRFMuIFN0YXRpc3RpY2FsIEluZmVyZW5jZQ0KDQoqIExpbmsgQWtzZXMgOiBodHRwczovL2Jvb2tkb3duLm9yZy9kc2NpZW5jZWxhYnMvaW50cm9fc3RhdGlzdGljcy8wOS1TdGF0aXN0aWNhbF9JbmZlcmVuY2UuaHRtbA0KDQo8L2Rpdj4=