Statistical Inferences ~ Assignment week 14

Ignasius Rabi Blolong

Student Majoring in Data Science at ITSB

R Programming Data Science Statistics

1 Cases Study Uji Z Satu Sampel

1.1 Identifikasi Masalah

Platform pembelajaran digital mengklaim rata-rata waktu belajar harian penggunanya adalah 120 menit. Berdasarkan data historis, standar deviasi populasi diketahui sebesar 15 menit. Sampel acak sebanyak 64 pengguna menunjukkan rata-rata waktu belajar 116 menit.

1.2 Jawaban Tugas

1.2.1 Formulasi Hipotesis

Kita ingin menguji apakah rata-rata populasi (\(\mu\)) berbeda dari klaim 120 menit:

  • Null Hypothesis (\(H_0\)): \(\mu = 120\)

  • Alternative Hypothesis (\(H_1\)): \(\mu \neq 120\) (Uji Dua Arah)

1.2.2 Uji Statistik yang Tepat

Uji Z Satu Sampel : Karena Standar deviasi Populasi (\(\sigma\)) diketahui dan ukuran sampel besar(\(n > 30\))

1.2.3 Statistik Uji (Z-Test) dan P-Value

Karena standar deviasi populasi (\(\sigma\)) diketahui dan ukuran sampel besar (\(n > 30\)), kita menggunakan formula:

\[Z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}}\]

Diketahui:

  • \(\bar{x} = 116\)

  • \(\mu_0 = 120\)

  • \(\sigma = 15\)

  • \(n = 64\)

Perhitungan Z- score

\[Z = \frac{116 - 120}{15 / \sqrt{64}} = \frac{-4}{15 / 8} = \frac{-4}{1.875} = -2.133\]

Perhitungan P-value Untuk uji dua arah dengan \(Z= -2.133\),P-value adalah \(P(|Z|>2.133) \approx 0.0329\)

1.2.4 Keputusan Statistik

Pada tingkat signifikansi \(\alpha = 0.05\), nilai kritis \(Z\) adalah \(\pm 1.96\). Karena \(|-2.133| > 1.96\), maka: \[\text{Keputusan: Tolak } H_0\]

1.2.5 Interpretasi Konteks Bisnis

Ada bukti statistik yang cukup untuk menyatakan bahwa klaim platform (120 menit) tidak akurat. Secara rata-rata, pengguna belajar lebih sedikit daripada yang diklaim oleh perusahaan.

2 Case Study One-Sample T-Test

2.1 Identifikasi Masalah

Tim UX Research menyelidiki apakah rata-rata waktu penyelesaian tugas aplikasi baru berbeda dari 10 menit. Data dari 10 pengguna adalah: \(9.2,10.5,9.8,10.1,9.6,10.3,9.9,9.7,10.0,9.5.\)

Data Diketahui:

  • \(μ_0=10\)

  • \(n=10\)

  • \(α=0.05\)

  • \(Nilai Rata-rata (\bar{x}) = 9.86\)

  • \(Standar Deviasi Sampel (s) \approx 0.395\)

2.2 Jawaban Tugas

2.2.1 Formulasi Hipotesis

Menguji apakah rata-rata waktu tugas berbeda dari 10 menit:

  • Null Hypothesis (\(H_0\)): \(\mu = 10\)

  • Alternative Hypothesis (\(H_1\)): \(\mu \neq 10\)

2.2.2 Statistik Uji (T-Test)

Karena \(\sigma\) tidak diketahui dan sampel kecil (\(n = 10\)), kita menggunakan distribusi-t:

\[t = \frac{\bar{x} - \mu_0}{s / \sqrt{n}}\]

2.2.3 Langkah Perhitungan Parameter Sampel:

  • Mean (\(\bar{x}\)): \[\bar{x} = \frac{\sum x_i}{n} = 9.86\]

  • Standar Deviasi Sampel (\(s\)):

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

2.2.4 Perhitungan T-Statistic:

\[t = \frac{9.86 - 10}{0.395 / \sqrt{10}} = \frac{-0.14}{0.1249} \approx -1.121\]

2.2.5 Keputusan Statistik

Dengan \(df = n - 1 = 9\) dan \(\alpha = 0.05\), nilai kritis \(t\) dari tabel adalah \(\pm 2.262\). Karena \(|-1.121| < 2.262\), maka: \[\text{Keputusan: Gagal Tolak } H_0\]

2.2.6 Interpretasi Bisnis

Pengaruh Ukuran Sampel terhadap Reliabilitas Inferensial ;Sampel yang kecil (seperti n=10) meningkatkan Standard Error. Ini berarti hasil kurang presisi dan memiliki kekuatan statistik (power) yang lebih rendah untuk mendeteksi perbedaan nyata. Sampel yang lebih besar akan memberikan estimasi yang lebih stabil dan reliabel terhadap parameter populasi.

3 Case Study Two-Sample T-Test (A/B Testing)

3.1 Identifikasi Masalah

Membandingkan rata-rata durasi sesi antara dua versi landing page.

  • \(Versi A: n1=25, \bar{x}_1=4.8, s_1=1.2\)

  • \(Versi B: n2=25, \bar{x}_2=5.4, s_2=1.4\)

  • \(α=0.05\)

3.2 Jawaban Tugas

3.2.1 Formulasi Hipotesis

Menguji apakah ada perbedaan rata-rata durasi sesi antara Versi A dan Versi B:

  • Null Hypothesis (\(H_0\)): \(\mu_A = \mu_B\)

  • Alternative Hypothesis (\(H_1\)): \(\mu_A \neq \mu_B\)

3.3 Statistik Uji (Independent T-Test)

Karena kita membandingkan dua kelompok independen dengan varians yang diasumsikan sama, kita menggunakan Pooled Variance:

  • Varians Gabungan (\(s_p^2\)):

    \[s_p^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}\] \[s_p^2 = \frac{(25-1)1.2^2 + (25-1)1.4^2}{25 + 25 - 2} = \frac{34.56 + 47.04}{48} = 1.7\]

  • T-Statistic (\(t\)):

    \[t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{s_p^2 \left(\frac{1}{n_1} + \frac{1}{n_2}\right)}}\] \[t = \frac{4.8 - 5.4}{\sqrt{1.7 \left(\frac{1}{25} + \frac{1}{25}\right)}} = \frac{-0.6}{\sqrt{0.136}} \approx -1.627\]

3.3.1 Keputusan Statistik

Dengan \(df = 48\) dan \(\alpha = 0.05\), nilai kritis \(t\) adalah sekitar \(\pm 2.01\). Karena \(|-1.627| < 2.01\), maka: \[\text{Keputusan: Gagal Tolak } H_0\]

3.3.2 Interpretasi Bisnis

Keputusan Produk: Tidak ada perbedaan signifikan secara statistik. Perubahan desain belum tentu meningkatkan durasi sesi secara nyata.

4 Case Study Chi-Square Test of Independence

4.1 Data Observasi

Tabel 1: Data Observasi Penggunaan Perangkat dan Pembayaran
Perangkat E.Wallet Credit.Card Cash.on.Delivery
Mobile 120 80 50
Desktop 60 90 40

4.2 Jawaban Tugas

4.2.1 Hipotesis Nol dan Hipotesis Alternatif

Menguji keterkaitan antara jenis perangkat dan metode pembayaran:

  • Null Hypothesis (\(H_0\)): Perangkat dan metode pembayaran bersifat independen (tidak berhubungan).

  • Alternative Hypothesis (\(H_1\)): Ada hubungan signifikan antara perangkat dan metode pembayaran.

4.2.2 Uji Statistik (\(\chi^2\))

Uji Statistik yang Tepat: Uji Chi-Square untuk Independensi (\(\chi^2\)), karena kita menguji hubungan antara dua variabel kategorikal.

4.2.3 Perhitungan Statistik (\(\chi^2\))

Rumus dasar Chi-Square adalah perbandingan antara nilai observasi (\(O\)) dan nilai harapan (\(E\)):

\[\chi^2 = \sum \frac{(O_{i} - E_{i})^2}{E_{i}}\]

Perhitungan Nilai Harapan (\(E\)): Untuk setiap sel dalam tabel, nilai harapan dihitung dengan:

\[E = \frac{(\text{Total Baris} \times \text{Total Kolom})}{\text{Grand Total}}\]

Contoh Perhitungan Sel (Mobile, E-Wallet):

\[E_{1,1} = \frac{250 \times 180}{440} \approx 102.27\]

4.2.4 Menentukan p-value pada \(α=0.05\):

  • Berdasarkan perhitungan R di atas, \(p-value = 0.003102\).

  • Karena \(0.0031<0.05\), maka kita Tolak \(H_0\)

4.2.5 Interpretasi dalam Strategi Pembayaran Digital:

Hasil menunjukkan bahwa tipe perangkat secara signifikan memengaruhi pilihan pembayaran. Pengguna Mobile cenderung lebih banyak menggunakan E-Wallet, sedangkan pengguna Desktop memiliki proporsi penggunaan Kartu Kredit yang lebih tinggi. Perusahaan harus mengoptimalkan antarmuka pembayaran digital sesuai dengan perangkat yang digunakan pelanggan.

5 Case Study Type I and Type II Errors (Conceptual)

5.1 Definisi Masalah

Sebuah startup fintech sedang menguji apakah algoritma deteksi fraud yang baru dapat mengurangi transaksi penipuan.

  • \(H_0\) (Hipotesis Nol): Algoritma baru tidak mengurangi fraud.
  • \(H_1\) (Hipotesis Alternatif): Algoritma baru mengurangi fraud.

5.2 Jawaban tugas

5.2.1 Penjelasan Kesalahan Tipe I (\(\alpha\))

Kesalahan Tipe I terjadi ketika kita menolak \(H_0\), padahal \(H_0\) sebenarnya benar.

  • Dalam konteks ini: Kita menyimpulkan bahwa algoritma baru efektif mengurangi fraud, padahal kenyataannya algoritma tersebut tidak memberikan perubahan apa pun.

  • Dampak: Perusahaan membuang sumber daya untuk mengimplementasikan teknologi yang tidak berguna.

5.2.2 Penjelasan Kesalahan Tipe II (\(\beta\))

Kesalahan Tipe II terjadi ketika kita gagal menolak \(H_0\), padahal \(H_1\) benar.

  • Dalam konteks ini: Kita menyimpulkan bahwa algoritma baru tidak efektif, padahal kenyataannya algoritma tersebut berhasil mengurangi fraud.

  • Dampak: Perusahaan melewatkan peluang besar untuk mengamankan transaksi pelanggan dari penipuan.

5.2.3 Mana yang Lebih Merugikan secara Bisnis?

Secara umum bagi startup fintech, Kesalahan Tipe II (\(\beta\)) seringkali dianggap lebih mahal. * Jika terjadi Kesalahan Tipe II, sistem keamanan tetap lemah sehingga transaksi fraud terus terjadi. Ini menyebabkan kerugian finansial langsung bagi pelanggan dan merusak reputasi/kepercayaan terhadap perusahaan.

5.2.4 Pengaruh Ukuran Sampel (Sample Size) terhadap Kesalahan Tipe II

Terdapat hubungan terbalik antara ukuran sampel dan \(\beta\):

  • Semakin besar ukuran sampel (\(n\)), maka probabilitas terjadinya Kesalahan Tipe II (\(\beta\)) akan semakin mengecil.

  • Sampel yang lebih besar memberikan lebih banyak informasi, sehingga tes statistik menjadi lebih sensitif dalam mendeteksi adanya efek nyata (perubahan) dari algoritma baru.

5.2.5 Visualisasi Statistik

5.2.6 Hubungan antara \(\alpha\), \(\beta\), dan Statistical Power

Ketiga konsep ini saling berkaitan erat:

  • Statistical Power (\(1 - \beta\)): Adalah kemampuan tes untuk mendeteksi efek yang benar-benar ada (menolak \(H_0\) yang salah).

  • Trade-off \(\alpha\) dan \(\beta\): Jika kita memperketat \(\alpha\) (misalnya dari 0.05 ke 0.01) untuk menghindari kesalahan Tipe I, maka probabilitas Kesalahan Tipe II (\(\beta\)) biasanya akan meningkat, yang berarti Power menurun.

  • Meningkatkan Power: Cara paling efektif untuk menurunkan \(\beta\) tanpa meningkatkan \(\alpha\) adalah dengan memperbesar ukuran sampel.

6 Case Study P-Value and Statistical Decision Making

6.1 Analisis Hasil Evaluasi Model

Berdasarkan evaluasi model prediksi churn, didapatkan data berikut:

  • Test Statistic: \(2.31\)

  • P-Value: \(0.021\)

  • Significance Level (\(\alpha\)): \(0.05\)

6.2 Jawaban Tugas

6.2.1 Makna dari p-value

\(p\text{-value}\) sebesar 0.021 berarti jika kita mengasumsikan hipotesis nol (\(H_0\)) benar (artinya model tidak memiliki kemampuan prediksi), maka probabilitas untuk mendapatkan hasil statistik uji sebesar 2.31 atau lebih secara tidak sengaja hanyalah 2.1%. Karena probabilitas ini sangat kecil, kita meragukan kebenaran \(H_0\).

6.2.2 Keputusan Statistik

Untuk mengambil keputusan, kita membandingkan nilai \(p\) dengan ambang batas \(\alpha\):

Kriteria Keputusan: * Jika \(p\text{-value} \le \alpha \Rightarrow\) Tolak \(H_0\) * Jika \(p\text{-value} > \alpha \Rightarrow\) Gagal Tolak \(H_0\)

Perhitungan: \[0.021 \le 0.05\]

Keputusan: Tolak \(H_0\). Hasil pengujian ini dinyatakan signifikan secara statistik pada tingkat kepercayaan 95%.

6.2.3 Interpretasi Manajerial (Bahasa Non-Teknis)

“Hasil analisis kami menunjukkan bahwa model prediksi churn ini bekerja dengan sangat baik. Kemungkinan hasil ini benar hanya karena kebetulan sangatlah rendah (kurang dari 3%). Oleh karena itu, kita dapat menggunakan model ini dengan percaya diri untuk mengidentifikasi pelanggan yang berisiko berhenti berlangganan.”

6.2.4 Risiko Sampel Tidak Representatif

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

  • Bias Generalisasi: Model mungkin terlihat akurat dalam pengujian, namun gagal saat diterapkan pada pelanggan baru atau segmen yang berbeda.

  • Kesalahan Strategi: Manajemen mungkin salah mengalokasikan anggaran promosi karena prediksi model yang tidak akurat di lapangan.

6.2.5 Mengapa p-value Tidak Mengukur Effect Size?

\(p\text{-value}\) hanya menginformasikan apakah sebuah efek ada atau tidak (signifikansi), bukan seberapa besar dampak efek tersebut terhadap bisnis.

Hubungan matematisnya secara konseptual adalah: \[\text{Test Statistic} = \text{Effect Size} \times \sqrt{\text{Sample Size}}\]

Dengan jumlah sampel (\(n\)) yang sangat besar, efek yang sangat kecil pun dapat menghasilkan \(p\text{-value}\) yang signifikan secara statistik, meskipun secara praktis efek tersebut tidak memberikan keuntungan finansial yang berarti bagi perusahaan.

LS0tDQp0aXRsZTogIiINCmF1dGhvcjogIklnbmFzaXVzIFJhYmkgQmxvbG9uZyAoNTIyNTAwNzMpIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJWQgJUIgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlIA0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogZmxhdGx5DQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQo8c3R5bGU+DQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi8qIDEuIEZPTkRBU0kgREFOIFRJUE9HUkFGSSAoTWVtYnVhdCBUZWtzIExlYmloIFJhcGkpICovDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCmJvZHkgew0KICAgIC8qIE1lbmdndW5ha2FuIGZvbnQgeWFuZyBiZXJzaWggZGFuIG11ZGFoIGRpYmFjYSAqLw0KICAgIGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBBcmlhbCwgc2Fucy1zZXJpZjsgDQogICAgbGluZS1oZWlnaHQ6IDEuNjsgLyogSmFyYWsgYW50YXIgYmFyaXMgeWFuZyBueWFtYW4gKi8NCiAgICBjb2xvcjogIzMzMzsgLyogV2FybmEgdGVrcyB1dGFtYSB5YW5nIGxlbWJ1dCAqLw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmM7IC8qIExhdGFyIGJlbGFrYW5nIGhhbGFtYW4geWFuZyBzYW5nYXQgbGVtYnV0ICovDQogICAgcGFkZGluZzogMjBweDsNCn0NCg0KLyogUmF0YSBraXJpLWthbmFuIChKdXN0aWZ5KSB1bnR1ayBrb250ZW4gdXRhbWEgKi8NCnAgew0KICAgIHRleHQtYWxpZ246IGp1c3RpZnk7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLyogMi4gSEVBRElORyAoSnVkdWwgZGFuIFN1Ymp1ZHVsKSAqLw0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQpoMSwgaDIsIGgzIHsNCiAgICBjb2xvcjogIzAwN2JmZjsgLyogV2FybmEgYmlydSB1bnR1ayBqdWR1bCB1dGFtYSAqLw0KICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZTllY2VmOyAvKiBHYXJpcyBiYXdhaCB0aXBpcyB1bnR1ayBtZW1pc2Foa2FuICovDQogICAgcGFkZGluZy1ib3R0b206IDVweDsNCiAgICBtYXJnaW4tdG9wOiAzMHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLyogMy4gVEFCTEUgKFRhYmVsIERhdGEpICovDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi50YWJsZSB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgICBtYXJnaW46IDIwcHggMDsNCiAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpOyAvKiBCYXlhbmdhbiBsZW1idXQgcGFkYSB0YWJlbCAqLw0KfQ0KDQovKiBIZWFkZXIgVGFiZWwgKi8NCi50aGVhZCB0aCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwN2JmZjsNCiAgICBjb2xvcjogYmx1ZTsNCiAgICBwYWRkaW5nOiAxMHB4Ow0KICAgIHRleHQtYWxpZ246bGVmdDsNCn0NCg0KLyogQmFyaXMgR2FuamlsLUdlbmFwIChTdHJpcGluZykgKi8NCi50Ym9keSB0cjpudGgtY2hpbGQoZXZlbikgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7IC8qIFdhcm5hIGFidS1hYnUgc2FuZ2F0IG11ZGEgKi8NCn0NCg0KLyogSG92ZXIgSW50ZXJha3RpZiAqLw0KLnRib2R5IHRyOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmOyAvKiBTZWRpa2l0IGxlYmloIGdlbGFwIHNhYXQgZGktaG92ZXIgKi8NCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQovKiA0LiBDT0RFIEJMT0NLUyBEQU4gT1VUUFVUUyBSICovDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi8qIENvZGUgQmxvY2tzIChDaHVuayBDb2RlKSAqLw0KLnByZSwgY29kZSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzM0ZDMzOTsgLyogTGF0YXIgYmVsYWthbmcga29kZSBsZWJpaCB0ZXJhbmcgKi8NCiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2Ow0KICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAwN2JmZjsgLyogR2FyaXMgYmlydSB0ZWJhbCBkaSBraXJpICovDQogICAgcGFkZGluZzogMTBweDsNCiAgICBib3JkZXItcmFkaXVzOiA0cHg7DQogICAgb3ZlcmZsb3cteDogYXV0bzsgLyogTWVtYXN0aWthbiBrb2RlIGJpc2EgZGlndWxpciBqaWthIHRlcmxhbHUgcGFuamFuZyAqLw0KfQ0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICA1LiBTVFlMSU5HIFVOVFVLIENPTlRBSU5FUiBVVEFNQSAoTFVBUikNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLm91dGVyLWNhcmQgew0KICAvKiBXYXJuYSBsYXRhciBiZWxha2FuZyBtZXJhaCBtdWRhL2tyZW0geWFuZyBsZW1idXQgKi8NCiAgYmFja2dyb3VuZC1jb2xvcjogIzJkOGNmZjsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsgLyogU3VkdXQgbWVtYnVsYXQgKi8NCiAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMTUpOyAvKiBCYXlhbmdhbiB1bnR1ayBtZW5nYW5na2F0IGtvbnRhaW5lciAqLw0KICBtYXJnaW46IDIwcHggYXV0bzsgLyogSmFyYWsgZGFyaSBrb250ZW4gbGFpbiwgZGFuIGF1dG8gdW50dWsgbWVuZW5nYWhrYW4gKGppa2EgYWRhIHdpZHRoKSAqLw0KICBib3JkZXI6IDFweCBzb2xpZCAjZDRhMzMyOyAvKiBCb3JkZXIgdGlwaXMgKi8NCiAgbWF4LXdpZHRoOiA3MDBweDsgLyogT3BzaW9uYWw6IEF0dXIgbGViYXIgbWFrc2ltdW0gYWdhciBjYXJkIHRpZGFrIHRlcmxhbHUgbGViYXIgZGkgbGF5YXIgYmVzYXIgKi8NCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICA2LiBTVFlMSU5HIFVOVFVLIEtPVEFLIEtPTlRFTiAoREFMQU0pDQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi5pbm5lci1jYXJkIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjJmZTsgLyogTGF0YXIgYmVsYWthbmcgYmlydSBsYW5naXQgKi8NCiAgcGFkZGluZzogMTVweDsNCiAgbWFyZ2luLWJvdHRvbTogMjBweDsgLyogSmFyYWsgYW50YXIgY2FyZCBkYWxhbSAqLw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOyAvKiBCYXlhbmdhbiB5YW5nIGxlYmloIGt1YXQgKi8NCiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsgDQogIHRleHQtYWxpZ246IGxlZnQ7IC8qIFRla3MgZGkgZGFsYW0gY2FyZCBrZW1iYWxpIGtlIGtpcmkgKi8NCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQovKiA3LiBMSU5LIERBTiBCVVRUT05TIChJbnRlcmFrdGl2aXRhcykgKi8NCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KYSB7DQogICAgY29sb3I6ICMwMDdiZmY7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAvKiBNZW5naGlsYW5na2FuIGdhcmlzIGJhd2FoIGRlZmF1bHQgKi8NCiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzOw0KfQ0KDQphOmhvdmVyIHsNCiAgICBjb2xvcjogIzAwNTZiMzsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLyogTXVuY3Vsa2FuIGdhcmlzIGJhd2FoIHNhYXQgZGktaG92ZXIgKi8NCn0NCi8qIE1lcmF0YWthbiBLb250ZW4gVmlkZW8ga2UgVGVuZ2FoICovDQoudmlkZW8tY29udGFpbmVyIHsNCiAgICAvKiBNZW5nYXR1ciBsZWJhciBtYWtzaW11bSBhZ2FyIHZpZGVvIHRpZGFrIHRlcmxhbHUgYmVzYXIgKi8NCiAgICBtYXgtd2lkdGg6IDc2MHB4OyANCiAgICANCiAgICAvKiBBdXRvIG1hcmdpbiBraXJpIGRhbiBrYW5hbiBha2FuIG1lcmF0YWthbiBrb250YWluZXIgaW5pIGtlIHRlbmdhaCAqLw0KICAgIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICAgIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgICANCiAgICAvKiBKYXJhayBhbnRhcmEgdmlkZW8gZGVuZ2FuIGtvbnRlbiBkaSBhdGFzL2Jhd2FoICovDQogICAgbWFyZ2luLXRvcDogMjVweDsNCiAgICBtYXJnaW4tYm90dG9tOiAyNXB4Ow0KfQ0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQovKiBTdHlsaW5nIEp1ZHVsIFR1Z2FzIFV0YW1hIChNZW5pcnUgVGFtcGlsYW4gR2FtYmFyKSAqLw0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi8qIE1lbmFyZ2V0a2FuIEp1ZHVsIERva3VtZW4gVXRhbWEgKEJpYXNhbnlhIGgxIGF0YXUgaDIgZGkgUlB1YnMvcm1kZm9ybWF0cykgKi8NCi8qIEthcmVuYSBybWRmb3JtYXRzIGJlcmJlZGEtYmVkYSwga2l0YSBjb2JhIG1lbmFyZ2V0a2FuIGgxIGF0YXUgaGVhZGVyIGdsb2JhbCAqLw0KLnRpdGxlLWNvbnRhaW5lciwgaDEudGl0bGUgew0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsgLyogUmF0YSBUZW5nYWggKi8NCiAgICBtYXJnaW4tdG9wOiAyMHB4Ow0KICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoNCi8qIFN0eWxpbmcgS2h1c3VzIHVudHVrIFRla3MgSnVkdWwgKi8NCi8qIEppa2EganVkdWwgQW5kYSBhZGFsYWggaDEgYXRhdSBoMiBwZXJ0YW1hIGRpIGRva3VtZW46ICovDQpoMTpmaXJzdC1vZi10eXBlLCBoMjpmaXJzdC1vZi10eXBlLCAudGl0bGUtY29udGFpbmVyIGgxIHsNCiAgICAvKiBNZW5nZ3VuYWthbiBmb250IHlhbmcgbWVueWVydXBhaSAnc2VyaWYnIGF0YXUgJ3NjcmlwdCcgeWFuZyB0ZWJhbCAqLw0KICAgIGZvbnQtZmFtaWx5OiAnVGltZXMgTmV3IFJvbWFuJywgVGltZXMsIHNlcmlmOyANCiAgICBmb250LXNpemU6IDMycHg7IC8qIFVrdXJhbiB5YW5nIGN1a3VwIGJlc2FyICovDQogICAgZm9udC13ZWlnaHQ6IDcwMDsgLyogVGViYWwgKi8NCiAgICANCiAgICAvKiBXYXJuYSBiaXJ1IHR1YSAqLw0KICAgIGNvbG9yOiAjMDA1NmIzICFpbXBvcnRhbnQ7IA0KICAgIA0KICAgIC8qIEVmZWsgdGVrczogc2VkaWtpdCBiYXlhbmdhbiB1bnR1ayBtZW1idWF0bnlhIG1lbm9uam9sICovDQogICAgdGV4dC1zaGFkb3c6IDFweCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgDQogICAgDQogICAgLyogTWVuZ2hpbGFuZ2thbiBnYXJpcyBiYXdhaCBhdGF1IGJvcmRlciB5YW5nIG11bmdraW4gZGl0YW1iYWhrYW4gb2xlaCB0aGVtZSAqLw0KICAgIGJvcmRlci1ib3R0b206IG5vbmUgIWltcG9ydGFudDsgDQogICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsNCn0NCg0KLyogSmlrYSBBbmRhIG1lbWFzdWtrYW4gSnVkdWwgVHVnYXMgc2ViYWdhaSBIMiBkaSBsdWFyIFlBTUwsIGd1bmFrYW4gaW5pOiAqLw0KLmFzc2lnbm1lbnQtdGl0bGUgew0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbicsIFRpbWVzLCBzZXJpZjsgDQogICAgZm9udC1zaXplOiAzMnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgY29sb3I6ICMwMDU2YjM7DQogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsNCn0NCi8qID09PT09PSBHTE9CQUwgU1RZTEUgPT09PT09ICovDQpib2R5IHsNCiAgICBmb250LWZhbWlseTogIlBvcHBpbnMiLCBzYW5zLXNlcmlmOw0KICAgIGJhY2tncm91bmQ6ICNmNWY3ZmI7DQogICAgbWFyZ2luOiAwOw0KICAgIHBhZGRpbmc6IDA7DQp9DQoNCi8qID09PT09PSBIRUFERVIgVElUTEUgPT09PT09ICovDQouaGVhZGVyLXRpdGxlIHsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgZm9udC1zaXplOiAzMnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgY29sb3I6ICMxZjRlNzk7DQogICAgbWFyZ2luLXRvcDogMzBweDsNCiAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAycHggcmdiYSgwLDAsMCwwLjE1KTsNCn0NCg0KLyogPT09PT09IFBST0ZJTEUgQ0FSRCBXUkFQUEVSID09PT09PSAqLw0KLnByb2ZpbGUtY2FyZCB7DQogICAgbWF4LXdpZHRoOiA5MDBweDsNCiAgICBtYXJnaW46IDQwcHggYXV0bzsNCiAgICBiYWNrZ3JvdW5kOiAjZTllZWY3Ow0KICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7DQogICAgcGFkZGluZzogNDBweCA1MHB4Ow0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IDQwcHg7DQogICAgYm94LXNoYWRvdzogMHB4IDhweCAxOHB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi8qID09PT09PSBQUk9GSUxFIElNQUdFID09PT09PSAqLw0KLnByb2ZpbGUtaW1hZ2Ugew0KICAgIGZsZXg6IDAgMCAyMjBweDsNCn0NCg0KLnByb2ZpbGUtaW1hZ2UgaW1nIHsNCiAgICB3aWR0aDogMjIwcHg7DQogICAgaGVpZ2h0OiBhdXRvOw0KICAgIG9iamVjdC1maXQ6IGNvdmVyOw0KICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogICAgYm9yZGVyOiA4cHggc29saWQgd2hpdGU7DQogICAgYm94LXNoYWRvdzogMHB4IDZweCAxNHB4IHJnYmEoMCwwLDAsMC4xNSk7DQp9DQoNCi8qID09PT09PSBURVhUIElORk9STUFUSU9OID09PT09PSAqLw0KLnByb2ZpbGUtaW5mbyB7DQogICAgZmxleDogMTsNCn0NCg0KLnByb2ZpbGUtaW5mbyBoMiB7DQogICAgZm9udC1zaXplOiAzMnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgbWFyZ2luOiAwOw0KICAgIGNvbG9yOiAjMWExYTFhOw0KfQ0KDQoucHJvZmlsZS1pbmZvIHAgew0KICAgIG1hcmdpbi10b3A6IDhweDsNCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgY29sb3I6ICM1NTU7DQp9DQoNCi8qID09PT09PSBCQURHRVMgPT09PT09ICovDQouYmFkZ2VzIHsNCiAgICBtYXJnaW4tdG9wOiAxOHB4Ow0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZ2FwOiAxNXB4Ow0KfQ0KDQouYmFkZ2Ugew0KICAgIHBhZGRpbmc6IDEwcHggMjBweDsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICBmb250LXdlaWdodDogNjAwOw0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQp9DQoNCi5iYWRnZS1ibHVlIHsNCiAgICBiYWNrZ3JvdW5kOiAjMmQ4Y2ZmOw0KfQ0KDQouYmFkZ2UtcmVkIHsNCiAgICBiYWNrZ3JvdW5kOiAjZTc0YzNjOw0KfQ0KDQouYmFkZ2UtZ3JlZW4gew0KICAgIGJhY2tncm91bmQ6ICMyZWNjNzE7DQp9DQouY2FyZCB7DQogICAgcGFkZGluZzogMjBweDsNCiAgICBtYXJnaW46IDIwcHggMDsNCiAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7DQogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMSk7DQogICAgdHJhbnNpdGlvbjogMC4zczsNCn0NCg0KLmNhcmQ6aG92ZXIgew0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNXB4KTsNCiAgICBib3gtc2hhZG93OiAwIDhweCAyMHB4IHJnYmEoMCwwLDAsMC4yKTsNCn0NCi8qIEJhcmlzIGdhbmppbC1nZW5hcCB1bnR1ayBrZXRlcmJhY2FhbiAoU3RyaXBpbmcpICovDQp0Ym9keSB0cjpudGgtY2hpbGQoZXZlbikgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7IA0KfQ0KDQovKiBJbnRlcmFrc2k6IEVmZWsgSG92ZXIgcGFkYSBCYXJpcyBUYWJlbCAqLw0KdGJvZHkgdHI6aG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWYgIWltcG9ydGFudDsgLyogU29yb3QgYmFyaXMgeWFuZyBkaXR1bmp1ayAqLw0KICAgIGN1cnNvcjogcG9pbnRlcjsgLyogTWVuZ3ViYWgga3Vyc29yIG1lbmphZGkgcG9pbnRlciwgbWVtYmVyaWthbiBrZXNhbiBpbnRlcmFrdGlmICovDQogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsgLyogU2VkaWtpdCBiYXlhbmdhbiAqLw0KICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMDUpOyAvKiBNZW1wZXJiZXNhciBzZWRpa2l0IHVudHVrIHBlbmVrYW5hbiAqLw0KICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0OyANCn0NCmltZyB7DQogICAgbWF4LXdpZHRoOiAxMDAlOw0KICAgIGhlaWdodDogYXV0bzsNCiAgICBib3JkZXItcmFkaXVzOiA4cHg7DQogICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTsgLyogQmF5YW5nYW4gZGVmYXVsdCAqLw0KICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2UtaW4tb3V0OyAvKiBUcmFuc2lzaSBoYWx1cyB1bnR1ayBzZW11YSBwZXJ1YmFoYW4gKi8NCn0NCg0KLyogRWZlayBzYWF0IGt1cnNvciBkaWFyYWhrYW4gKGhvdmVyKSBwYWRhIGdhbWJhciAqLw0KaW1nOmhvdmVyIHsNCiAgICBib3gtc2hhZG93OiAwIDhweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsgLyogQmF5YW5nYW4gbGViaWggZ2VsYXAgKi8NCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpOyAvKiBTZWRpa2l0IHpvb20gKG1lbXBlcmJlc2FyKSAqLw0KfQ0KDQoNCg0KDQoNCjwvc3R5bGU+DQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQoNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa25pdHIpDQoNCmBgYA0KDQo8aDEgY2xhc3M9ImhlYWRlci10aXRsZSI+U3RhdGlzdGljYWwgSW5mZXJlbmNlcyB+IEFzc2lnbm1lbnQgd2VlayAxNDwvaDE+DQogIA0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWNhcmQiPg0KICA8ZGl2IGNsYXNzPSJwcm9maWxlLWltYWdlIj4NCiAgPGltZyBzcmM9InByb2ZpbC5qcGVnIiB3aWR0aD0iMTUwIiBzdHlsZT0iYm9yZGVyLXJhZGl1czogMTBweDsiPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbmZvIj4NCiAgPGgyPklnbmFzaXVzIFJhYmkgQmxvbG9uZzwvaDI+DQogIDxwPlN0dWRlbnQgTWFqb3JpbmcgaW4gRGF0YSBTY2llbmNlIGF0IElUU0I8L3A+DQogIA0KICA8ZGl2IGNsYXNzPSJiYWRnZXMiPg0KICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2UtYmx1ZSI+UiBQcm9ncmFtbWluZzwvc3Bhbj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXJlZCI+RGF0YSBTY2llbmNlPC9zcGFuPg0KICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2UtZ3JlZW4iPlN0YXRpc3RpY3M8L3NwYW4+DQogIDwvZGl2Pg0KICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiMgQ2FzZXMgU3R1ZHkgVWppIFogU2F0dSBTYW1wZWwNCg0KIyMgSWRlbnRpZmlrYXNpICBNYXNhbGFoDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KUGxhdGZvcm0gcGVtYmVsYWphcmFuIGRpZ2l0YWwgbWVuZ2tsYWltIHJhdGEtcmF0YSB3YWt0dSBiZWxhamFyIGhhcmlhbiBwZW5nZ3VuYW55YSBhZGFsYWggMTIwIG1lbml0LiBCZXJkYXNhcmthbiBkYXRhIGhpc3RvcmlzLCBzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgZGlrZXRhaHVpIHNlYmVzYXIgMTUgbWVuaXQuIFNhbXBlbCBhY2FrIHNlYmFueWFrIDY0IHBlbmdndW5hIG1lbnVuanVra2FuIHJhdGEtcmF0YSB3YWt0dSBiZWxhamFyIDExNiBtZW5pdC4NCjwvZGl2Pg0KDQojIyBKYXdhYmFuIFR1Z2FzDQoNCiMjIyBGb3JtdWxhc2kgSGlwb3Rlc2lzDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KS2l0YSBpbmdpbiBtZW5ndWppIGFwYWthaCByYXRhLXJhdGEgcG9wdWxhc2kgKCRcbXUkKSBiZXJiZWRhIGRhcmkga2xhaW0gMTIwIG1lbml0Og0KDQoqICoqTnVsbCBIeXBvdGhlc2lzICgkSF8wJCk6KiogJFxtdSA9IDEyMCQNCg0KKiAqKkFsdGVybmF0aXZlIEh5cG90aGVzaXMgKCRIXzEkKToqKiAkXG11IFxuZXEgMTIwJCAoVWppIER1YSBBcmFoKQ0KPC9kaXY+DQoNCiMjIyBVamkgU3RhdGlzdGlrIHlhbmcgVGVwYXQNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpVamkgWiBTYXR1IFNhbXBlbCA6IEthcmVuYSBTdGFuZGFyIGRldmlhc2kgUG9wdWxhc2kgKCRcc2lnbWEkKSBkaWtldGFodWkgZGFuIHVrdXJhbiBzYW1wZWwgYmVzYXIoJG4gPiAzMCQpDQo8L2Rpdj4NCg0KIyMjIFN0YXRpc3RpayBVamkgKFotVGVzdCkgZGFuIFAtVmFsdWUNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpLYXJlbmEgc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpICgkXHNpZ21hJCkgZGlrZXRhaHVpIGRhbiB1a3VyYW4gc2FtcGVsIGJlc2FyICgkbiA+IDMwJCksIGtpdGEgbWVuZ2d1bmFrYW4gZm9ybXVsYToNCg0KJCRaID0gXGZyYWN7XGJhcnt4fSAtIFxtdV8wfXtcc2lnbWEgLyBcc3FydHtufX0kJA0KDQoqKkRpa2V0YWh1aToqKg0KDQoqICRcYmFye3h9ID0gMTE2JA0KDQoqICRcbXVfMCA9IDEyMCQNCg0KKiAkXHNpZ21hID0gMTUkDQoNCiogJG4gPSA2NCQNCg0KKipQZXJoaXR1bmdhbiBaLSBzY29yZSoqDQoNCiQkWiA9IFxmcmFjezExNiAtIDEyMH17MTUgLyBcc3FydHs2NH19ID0gXGZyYWN7LTR9ezE1IC8gOH0gPSBcZnJhY3stNH17MS44NzV9ID0gLTIuMTMzJCQNCg0KKipQZXJoaXR1bmdhbiBQLXZhbHVlKioNClVudHVrIHVqaSBkdWEgYXJhaCBkZW5nYW4gJFo9IC0yLjEzMyQsUC12YWx1ZSBhZGFsYWggJFAofFp8PjIuMTMzKSBcYXBwcm94IDAuMDMyOSQNCg0KPC9kaXY+DQoNCiMjIyBLZXB1dHVzYW4gU3RhdGlzdGlrDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KUGFkYSB0aW5na2F0IHNpZ25pZmlrYW5zaSAkXGFscGhhID0gMC4wNSQsIG5pbGFpIGtyaXRpcyAkWiQgYWRhbGFoICRccG0gMS45NiQuDQpLYXJlbmEgJHwtMi4xMzN8ID4gMS45NiQsIG1ha2E6DQokJFx0ZXh0e0tlcHV0dXNhbjogVG9sYWsgfSBIXzAkJA0KPC9kaXY+DQoNCiMjIyBJbnRlcnByZXRhc2kgS29udGVrcyBCaXNuaXMNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpBZGEgYnVrdGkgc3RhdGlzdGlrIHlhbmcgY3VrdXAgdW50dWsgbWVueWF0YWthbiBiYWh3YSBrbGFpbSBwbGF0Zm9ybSAoMTIwIG1lbml0KSB0aWRhayBha3VyYXQuIFNlY2FyYSByYXRhLXJhdGEsIHBlbmdndW5hIGJlbGFqYXIgbGViaWggc2VkaWtpdCBkYXJpcGFkYSB5YW5nIGRpa2xhaW0gb2xlaCBwZXJ1c2FoYWFuLg0KDQo8L2Rpdj4NCg0KIyBDYXNlIFN0dWR5IE9uZS1TYW1wbGUgVC1UZXN0DQoNCiMjIElkZW50aWZpa2FzaSBNYXNhbGFoDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KVGltIFVYIFJlc2VhcmNoIG1lbnllbGlkaWtpIGFwYWthaCByYXRhLXJhdGEgd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzIGFwbGlrYXNpIGJhcnUgYmVyYmVkYSBkYXJpIDEwIG1lbml0LiBEYXRhIGRhcmkgMTAgcGVuZ2d1bmEgYWRhbGFoOiAkOS4yLDEwLjUsOS44LDEwLjEsOS42LDEwLjMsOS45LDkuNywxMC4wLDkuNS4kDQoNCkRhdGEgRGlrZXRhaHVpOg0KDQogICogICTOvF8wPTEwJA0KDQogICogICRuPTEwJA0KDQogICogICTOsT0wLjA1JA0KDQogICogICROaWxhaSBSYXRhLXJhdGEgKFxiYXJ7eH0pID0gOS44NiQNCg0KICAqICAkU3RhbmRhciBEZXZpYXNpIFNhbXBlbCAocykgXGFwcHJveCAwLjM5NSQNCjwvZGl2Pg0KDQojIyBKYXdhYmFuIFR1Z2FzDQoNCiMjIyBGb3JtdWxhc2kgSGlwb3Rlc2lzDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KTWVuZ3VqaSBhcGFrYWggcmF0YS1yYXRhIHdha3R1IHR1Z2FzIGJlcmJlZGEgZGFyaSAxMCBtZW5pdDoNCg0KKiAqKk51bGwgSHlwb3RoZXNpcyAoJEhfMCQpOioqICRcbXUgPSAxMCQNCg0KKiAqKkFsdGVybmF0aXZlIEh5cG90aGVzaXMgKCRIXzEkKToqKiAkXG11IFxuZXEgMTAkDQo8L2Rpdj4NCg0KIyMjIFN0YXRpc3RpayBVamkgKFQtVGVzdCkNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpLYXJlbmEgJFxzaWdtYSQgdGlkYWsgZGlrZXRhaHVpIGRhbiBzYW1wZWwga2VjaWwgKCRuID0gMTAkKSwga2l0YSBtZW5nZ3VuYWthbiBkaXN0cmlidXNpLXQ6DQoNCiQkdCA9IFxmcmFje1xiYXJ7eH0gLSBcbXVfMH17cyAvIFxzcXJ0e259fSQkDQoNCiMjIyAqKkxhbmdrYWggUGVyaGl0dW5nYW4gUGFyYW1ldGVyIFNhbXBlbDoqKg0KDQoqICAqKk1lYW4gKCRcYmFye3h9JCk6KiogJCRcYmFye3h9ID0gXGZyYWN7XHN1bSB4X2l9e259ID0gOS44NiQkDQoNCiogICoqU3RhbmRhciBEZXZpYXNpIFNhbXBlbCAoJHMkKToqKg0KDQogICAgJCRzID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXGJhcnt4fSleMn17biAtIDF9fSBcYXBwcm94IDAuMzk1JCQNCg0KIyMjICoqUGVyaGl0dW5nYW4gVC1TdGF0aXN0aWM6KioNCg0KJCR0ID0gXGZyYWN7OS44NiAtIDEwfXswLjM5NSAvIFxzcXJ0ezEwfX0gPSBcZnJhY3stMC4xNH17MC4xMjQ5fSBcYXBwcm94IC0xLjEyMSQkDQo8L2Rpdj4NCg0KIyMjIEtlcHV0dXNhbiBTdGF0aXN0aWsNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpEZW5nYW4gJGRmID0gbiAtIDEgPSA5JCBkYW4gJFxhbHBoYSA9IDAuMDUkLCBuaWxhaSBrcml0aXMgJHQkIGRhcmkgdGFiZWwgYWRhbGFoICRccG0gMi4yNjIkLg0KS2FyZW5hICR8LTEuMTIxfCA8IDIuMjYyJCwgbWFrYToNCiQkXHRleHR7S2VwdXR1c2FuOiBHYWdhbCBUb2xhayB9IEhfMCQkDQo8L2Rpdj4NCg0KIyMjIEludGVycHJldGFzaSBCaXNuaXMNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpQZW5nYXJ1aCBVa3VyYW4gU2FtcGVsIHRlcmhhZGFwIFJlbGlhYmlsaXRhcyBJbmZlcmVuc2lhbCA7U2FtcGVsIHlhbmcga2VjaWwgKHNlcGVydGkgbj0xMCkgbWVuaW5na2F0a2FuIFN0YW5kYXJkIEVycm9yLiBJbmkgYmVyYXJ0aSBoYXNpbCBrdXJhbmcgcHJlc2lzaSBkYW4gbWVtaWxpa2kga2VrdWF0YW4gc3RhdGlzdGlrIChwb3dlcikgeWFuZyBsZWJpaCByZW5kYWggdW50dWsgbWVuZGV0ZWtzaSBwZXJiZWRhYW4gbnlhdGEuIFNhbXBlbCB5YW5nIGxlYmloIGJlc2FyIGFrYW4gbWVtYmVyaWthbiBlc3RpbWFzaSB5YW5nIGxlYmloIHN0YWJpbCBkYW4gcmVsaWFiZWwgdGVyaGFkYXAgcGFyYW1ldGVyIHBvcHVsYXNpLg0KPC9kaXY+DQoNCiMgQ2FzZSBTdHVkeSBUd28tU2FtcGxlIFQtVGVzdCAoQS9CIFRlc3RpbmcpDQoNCiMjIElkZW50aWZpa2FzaSBNYXNhbGFoDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KTWVtYmFuZGluZ2thbiByYXRhLXJhdGEgZHVyYXNpIHNlc2kgYW50YXJhIGR1YSB2ZXJzaSBsYW5kaW5nIHBhZ2UuDQoNCiAgKiAgJFZlcnNpIEE6IG4xPTI1LCBcYmFye3h9XzE9NC44LCBzXzE9MS4yJA0KDQogICogICRWZXJzaSBCOiBuMj0yNSwgXGJhcnt4fV8yPTUuNCwgc18yPTEuNCQNCg0KICAqICAkzrE9MC4wNSQNCjwvZGl2Pg0KDQojIyBKYXdhYmFuIFR1Z2FzDQoNCiMjIyBGb3JtdWxhc2kgSGlwb3Rlc2lzDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KTWVuZ3VqaSBhcGFrYWggYWRhIHBlcmJlZGFhbiByYXRhLXJhdGEgZHVyYXNpIHNlc2kgYW50YXJhIFZlcnNpIEEgZGFuIFZlcnNpIEI6DQoNCiogKipOdWxsIEh5cG90aGVzaXMgKCRIXzAkKToqKiAkXG11X0EgPSBcbXVfQiQNCg0KKiAqKkFsdGVybmF0aXZlIEh5cG90aGVzaXMgKCRIXzEkKToqKiAkXG11X0EgXG5lcSBcbXVfQiQNCjwvZGl2Pg0KDQojIyBTdGF0aXN0aWsgVWppIChJbmRlcGVuZGVudCBULVRlc3QpDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KS2FyZW5hIGtpdGEgbWVtYmFuZGluZ2thbiBkdWEga2Vsb21wb2sgaW5kZXBlbmRlbiBkZW5nYW4gdmFyaWFucyB5YW5nIGRpYXN1bXNpa2FuIHNhbWEsIGtpdGEgbWVuZ2d1bmFrYW4gKlBvb2xlZCBWYXJpYW5jZSo6DQoNCiogKipWYXJpYW5zIEdhYnVuZ2FuICgkc19wXjIkKToqKg0KDQogICAgJCRzX3BeMiA9IFxmcmFjeyhuXzEtMSlzXzFeMiArIChuXzItMSlzXzJeMn17bl8xICsgbl8yIC0gMn0kJA0KICAgICQkc19wXjIgPSBcZnJhY3soMjUtMSkxLjJeMiArICgyNS0xKTEuNF4yfXsyNSArIDI1IC0gMn0gPSBcZnJhY3szNC41NiArIDQ3LjA0fXs0OH0gPSAxLjckJA0KDQoqICoqVC1TdGF0aXN0aWMgKCR0JCk6KioNCg0KICAgICQkdCA9IFxmcmFje1xiYXJ7eH1fMSAtIFxiYXJ7eH1fMn17XHNxcnR7c19wXjIgXGxlZnQoXGZyYWN7MX17bl8xfSArIFxmcmFjezF9e25fMn1ccmlnaHQpfX0kJA0KICAgICQkdCA9IFxmcmFjezQuOCAtIDUuNH17XHNxcnR7MS43IFxsZWZ0KFxmcmFjezF9ezI1fSArIFxmcmFjezF9ezI1fVxyaWdodCl9fSA9IFxmcmFjey0wLjZ9e1xzcXJ0ezAuMTM2fX0gXGFwcHJveCAtMS42MjckJA0KDQo8L2Rpdj4NCg0KIyMjIEtlcHV0dXNhbiBTdGF0aXN0aWsNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpEZW5nYW4gJGRmID0gNDgkIGRhbiAkXGFscGhhID0gMC4wNSQsIG5pbGFpIGtyaXRpcyAkdCQgYWRhbGFoIHNla2l0YXIgJFxwbSAyLjAxJC4gDQpLYXJlbmEgJHwtMS42Mjd8IDwgMi4wMSQsIG1ha2E6DQokJFx0ZXh0e0tlcHV0dXNhbjogR2FnYWwgVG9sYWsgfSBIXzAkJA0KPC9kaXY+DQoNCiMjIyBJbnRlcnByZXRhc2kgQmlzbmlzDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KS2VwdXR1c2FuIFByb2R1azogVGlkYWsgYWRhIHBlcmJlZGFhbiBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsuIFBlcnViYWhhbiBkZXNhaW4gYmVsdW0gdGVudHUgbWVuaW5na2F0a2FuIGR1cmFzaSBzZXNpIHNlY2FyYSBueWF0YS4NCjwvZGl2Pg0KDQojIENhc2UgU3R1ZHkgQ2hpLVNxdWFyZSBUZXN0IG9mIEluZGVwZW5kZW5jZQ0KDQojIyBEYXRhIE9ic2VydmFzaQ0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCmBgYHtyfQ0KIyB0YWJlbCBkYXRhIG9ic2VydmFzaQ0KdGFiZWxfZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBQZXJhbmdrYXQgPSBjKCJNb2JpbGUiLCAiRGVza3RvcCIpLA0KICBgRS1XYWxsZXRgID0gYygxMjAsIDYwKSwNCiAgYENyZWRpdCBDYXJkYCA9IGMoODAsIDkwKSwNCiAgYENhc2ggb24gRGVsaXZlcnlgID0gYyg1MCwgNDApDQopIA0KDQojIE1lbXVuY3Vsa2FuIHRhYmVsDQprYWJsZSh0YWJlbF9kYXRhLCBjYXB0aW9uID0gIlRhYmVsIDE6IERhdGEgT2JzZXJ2YXNpIFBlbmdndW5hYW4gUGVyYW5na2F0IGRhbiBQZW1iYXlhcmFuIikNCmBgYA0KPC9kaXY+DQoNCiMjIEphd2FiYW4gVHVnYXMNCg0KIyMjIEhpcG90ZXNpcyBOb2wgZGFuIEhpcG90ZXNpcyBBbHRlcm5hdGlmIA0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCk1lbmd1amkga2V0ZXJrYWl0YW4gYW50YXJhIGplbmlzIHBlcmFuZ2thdCBkYW4gbWV0b2RlIHBlbWJheWFyYW46DQoNCiogKipOdWxsIEh5cG90aGVzaXMgKCRIXzAkKToqKiBQZXJhbmdrYXQgZGFuIG1ldG9kZSBwZW1iYXlhcmFuIGJlcnNpZmF0IGluZGVwZW5kZW4gKHRpZGFrIGJlcmh1YnVuZ2FuKS4NCg0KKiAqKkFsdGVybmF0aXZlIEh5cG90aGVzaXMgKCRIXzEkKToqKiBBZGEgaHVidW5nYW4gc2lnbmlmaWthbiBhbnRhcmEgcGVyYW5na2F0IGRhbiBtZXRvZGUgcGVtYmF5YXJhbi4NCjwvZGl2Pg0KDQojIyMgVWppIFN0YXRpc3RpayAoJFxjaGleMiQpDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KVWppIFN0YXRpc3RpayB5YW5nIFRlcGF0Og0KICBVamkgQ2hpLVNxdWFyZSB1bnR1ayBJbmRlcGVuZGVuc2kgKCRcY2hpXjIkKSwga2FyZW5hIGtpdGEgbWVuZ3VqaSBodWJ1bmdhbiBhbnRhcmEgZHVhIHZhcmlhYmVsIGthdGVnb3Jpa2FsLg0KPC9kaXY+DQoNCiMjIyBQZXJoaXR1bmdhbiBTdGF0aXN0aWsgKCRcY2hpXjIkKQ0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NClJ1bXVzIGRhc2FyIENoaS1TcXVhcmUgYWRhbGFoIHBlcmJhbmRpbmdhbiBhbnRhcmEgbmlsYWkgb2JzZXJ2YXNpICgkTyQpIGRhbiBuaWxhaSBoYXJhcGFuICgkRSQpOg0KDQokJFxjaGleMiA9IFxzdW0gXGZyYWN7KE9fe2l9IC0gRV97aX0pXjJ9e0Vfe2l9fSQkDQoNCioqUGVyaGl0dW5nYW4gTmlsYWkgSGFyYXBhbiAoJEUkKToqKg0KVW50dWsgc2V0aWFwIHNlbCBkYWxhbSB0YWJlbCwgbmlsYWkgaGFyYXBhbiBkaWhpdHVuZyBkZW5nYW46DQoNCiQkRSA9IFxmcmFjeyhcdGV4dHtUb3RhbCBCYXJpc30gXHRpbWVzIFx0ZXh0e1RvdGFsIEtvbG9tfSl9e1x0ZXh0e0dyYW5kIFRvdGFsfX0kJA0KDQoqKkNvbnRvaCBQZXJoaXR1bmdhbiBTZWwgKE1vYmlsZSwgRS1XYWxsZXQpOioqDQoNCiQkRV97MSwxfSA9IFxmcmFjezI1MCBcdGltZXMgMTgwfXs0NDB9IFxhcHByb3ggMTAyLjI3JCQNCjwvZGl2Pg0KDQojIyMgTWVuZW50dWthbiBwLXZhbHVlIHBhZGEgJM6xPTAuMDUkOg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCg0KICogQmVyZGFzYXJrYW4gcGVyaGl0dW5nYW4gUiBkaSBhdGFzLCAkcC12YWx1ZSA9IDAuMDAzMTAyJC4NCg0KICogS2FyZW5hICQwLjAwMzE8MC4wNSQsIG1ha2Ega2l0YSBUb2xhayAkSF8wJA0KPC9kaXY+DQoNCiMjIyBJbnRlcnByZXRhc2kgZGFsYW0gU3RyYXRlZ2kgUGVtYmF5YXJhbiBEaWdpdGFsOg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCkhhc2lsIG1lbnVuanVra2FuIGJhaHdhIHRpcGUgcGVyYW5na2F0IHNlY2FyYSBzaWduaWZpa2FuIG1lbWVuZ2FydWhpIHBpbGloYW4gcGVtYmF5YXJhbi4gUGVuZ2d1bmEgTW9iaWxlIGNlbmRlcnVuZyBsZWJpaCBiYW55YWsgbWVuZ2d1bmFrYW4gRS1XYWxsZXQsIHNlZGFuZ2thbiBwZW5nZ3VuYSBEZXNrdG9wIG1lbWlsaWtpIHByb3BvcnNpIHBlbmdndW5hYW4gS2FydHUgS3JlZGl0IHlhbmcgbGViaWggdGluZ2dpLiBQZXJ1c2FoYWFuIGhhcnVzIG1lbmdvcHRpbWFsa2FuIGFudGFybXVrYSBwZW1iYXlhcmFuIGRpZ2l0YWwgc2VzdWFpIGRlbmdhbiBwZXJhbmdrYXQgeWFuZyBkaWd1bmFrYW4gcGVsYW5nZ2FuLg0KPC9kaXY+DQoNCiMgQ2FzZSBTdHVkeSBUeXBlIEkgYW5kIFR5cGUgSUkgRXJyb3JzIChDb25jZXB0dWFsKQ0KDQojIyBEZWZpbmlzaSBNYXNhbGFoDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KU2VidWFoIHN0YXJ0dXAgKmZpbnRlY2gqIHNlZGFuZyBtZW5ndWppIGFwYWthaCBhbGdvcml0bWEgZGV0ZWtzaSBmcmF1ZCB5YW5nIGJhcnUgZGFwYXQgbWVuZ3VyYW5naSB0cmFuc2Frc2kgcGVuaXB1YW4uDQoNCiogKiokSF8wJCAoSGlwb3Rlc2lzIE5vbCk6KiogQWxnb3JpdG1hIGJhcnUgKip0aWRhayoqIG1lbmd1cmFuZ2kgZnJhdWQuDQoqICoqJEhfMSQgKEhpcG90ZXNpcyBBbHRlcm5hdGlmKToqKiBBbGdvcml0bWEgYmFydSAqKm1lbmd1cmFuZ2kqKiBmcmF1ZC4NCjwvZGl2Pg0KDQojIyBKYXdhYmFuIHR1Z2FzDQoNCiMjIyBQZW5qZWxhc2FuIEtlc2FsYWhhbiBUaXBlIEkgKCRcYWxwaGEkKQ0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCioqS2VzYWxhaGFuIFRpcGUgSSoqIHRlcmphZGkga2V0aWthIGtpdGEgbWVub2xhayAkSF8wJCwgcGFkYWhhbCAkSF8wJCBzZWJlbmFybnlhIGJlbmFyLg0KDQoqICoqRGFsYW0ga29udGVrcyBpbmk6KiogS2l0YSBtZW55aW1wdWxrYW4gYmFod2EgYWxnb3JpdG1hIGJhcnUgZWZla3RpZiBtZW5ndXJhbmdpIGZyYXVkLCBwYWRhaGFsIGtlbnlhdGFhbm55YSBhbGdvcml0bWEgdGVyc2VidXQgKip0aWRhayBtZW1iZXJpa2FuIHBlcnViYWhhbiBhcGEgcHVuKiouDQoNCiogKipEYW1wYWs6KiogUGVydXNhaGFhbiBtZW1idWFuZyBzdW1iZXIgZGF5YSB1bnR1ayBtZW5naW1wbGVtZW50YXNpa2FuIHRla25vbG9naSB5YW5nIHRpZGFrIGJlcmd1bmEuDQo8L2Rpdj4NCg0KIyMjIFBlbmplbGFzYW4gS2VzYWxhaGFuIFRpcGUgSUkgKCRcYmV0YSQpDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KDQoqKktlc2FsYWhhbiBUaXBlIElJKiogdGVyamFkaSBrZXRpa2Ega2l0YSBnYWdhbCBtZW5vbGFrICRIXzAkLCBwYWRhaGFsICRIXzEkIGJlbmFyLg0KDQoqICoqRGFsYW0ga29udGVrcyBpbmk6KiogS2l0YSBtZW55aW1wdWxrYW4gYmFod2EgYWxnb3JpdG1hIGJhcnUgdGlkYWsgZWZla3RpZiwgcGFkYWhhbCBrZW55YXRhYW5ueWEgYWxnb3JpdG1hIHRlcnNlYnV0ICoqYmVyaGFzaWwgbWVuZ3VyYW5naSBmcmF1ZCoqLg0KDQoqICoqRGFtcGFrOioqIFBlcnVzYWhhYW4gbWVsZXdhdGthbiBwZWx1YW5nIGJlc2FyIHVudHVrIG1lbmdhbWFua2FuIHRyYW5zYWtzaSBwZWxhbmdnYW4gZGFyaSBwZW5pcHVhbi4NCjwvZGl2Pg0KDQojIyMgTWFuYSB5YW5nIExlYmloIE1lcnVnaWthbiBzZWNhcmEgQmlzbmlzPw0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NClNlY2FyYSB1bXVtIGJhZ2kgc3RhcnR1cCAqZmludGVjaCosICoqS2VzYWxhaGFuIFRpcGUgSUkgKCRcYmV0YSQpKiogc2VyaW5na2FsaSBkaWFuZ2dhcCBsZWJpaCBtYWhhbC4NCiogSmlrYSB0ZXJqYWRpIEtlc2FsYWhhbiBUaXBlIElJLCBzaXN0ZW0ga2VhbWFuYW4gdGV0YXAgbGVtYWggc2VoaW5nZ2EgdHJhbnNha3NpIGZyYXVkIHRlcnVzIHRlcmphZGkuIEluaSBtZW55ZWJhYmthbiBrZXJ1Z2lhbiBmaW5hbnNpYWwgbGFuZ3N1bmcgYmFnaSBwZWxhbmdnYW4gZGFuIG1lcnVzYWsgcmVwdXRhc2kva2VwZXJjYXlhYW4gdGVyaGFkYXAgcGVydXNhaGFhbi4NCjwvZGl2Pg0KDQojIyMgUGVuZ2FydWggVWt1cmFuIFNhbXBlbCAoKlNhbXBsZSBTaXplKikgdGVyaGFkYXAgS2VzYWxhaGFuIFRpcGUgSUkNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpUZXJkYXBhdCBodWJ1bmdhbiB0ZXJiYWxpayBhbnRhcmEgdWt1cmFuIHNhbXBlbCBkYW4gJFxiZXRhJDoNCg0KKiAqKlNlbWFraW4gYmVzYXIgdWt1cmFuIHNhbXBlbCAoJG4kKSwgbWFrYSBwcm9iYWJpbGl0YXMgdGVyamFkaW55YSBLZXNhbGFoYW4gVGlwZSBJSSAoJFxiZXRhJCkgYWthbiBzZW1ha2luIG1lbmdlY2lsLioqDQoNCiogU2FtcGVsIHlhbmcgbGViaWggYmVzYXIgbWVtYmVyaWthbiBsZWJpaCBiYW55YWsgaW5mb3JtYXNpLCBzZWhpbmdnYSB0ZXMgc3RhdGlzdGlrIG1lbmphZGkgbGViaWggc2Vuc2l0aWYgZGFsYW0gbWVuZGV0ZWtzaSBhZGFueWEgZWZlayBueWF0YSAocGVydWJhaGFuKSBkYXJpIGFsZ29yaXRtYSBiYXJ1Lg0KPC9kaXY+DQoNCiMjIyBWaXN1YWxpc2FzaSBTdGF0aXN0aWsNCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQoNCmBgYHtyfQ0KIyBWaXN1YWxpc2FzaSBEaXN0cmlidXNpIE5vcm1hbCB1bnR1ayBBbHBoYSBkYW4gQmV0YQ0KeCA8LSBzZXEoLTQsIDcsIGxlbmd0aD0yMDApDQp5MSA8LSBkbm9ybSh4LCBtZWFuPTAsIHNkPTEpDQp5MiA8LSBkbm9ybSh4LCBtZWFuPTMsIHNkPTEpDQoNCmRmIDwtIGRhdGEuZnJhbWUoeCwgeTEsIHkyKQ0KDQpnZ3Bsb3QoZGYsIGFlcyh4PXgpKSArDQogIGdlb21fbGluZShhZXMoeT15MSksIGNvbG9yPSJibHVlIiwgc2l6ZT0xKSArDQogIGdlb21fbGluZShhZXMoeT15MiksIGNvbG9yPSJyZWQiLCBzaXplPTEpICsNCiAgZ2VvbV9hcmVhKGRhdGE9c3Vic2V0KGRmLCB4ID4gMS42NCksIGFlcyh5PXkxKSwgZmlsbD0iYmx1ZSIsIGFscGhhPTAuMykgKw0KICBnZW9tX2FyZWEoZGF0YT1zdWJzZXQoZGYsIHggPCAxLjY0KSwgYWVzKHk9eTIpLCBmaWxsPSJyZWQiLCBhbHBoYT0wLjMpICsNCiAgYW5ub3RhdGUoInRleHQiLCB4PTAsIHk9MC40MiwgbGFiZWw9IkgwIEJlbmFyIiwgY29sb3I9ImJsdWUiKSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeD0zLCB5PTAuNDIsIGxhYmVsPSJIMSBCZW5hciIsIGNvbG9yPSJyZWQiKSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeD0yLjIsIHk9MC4wNSwgbGFiZWw9IkFscGhhIChUaXBlIEkpIikgKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9MC44LCB5PTAuMDUsIGxhYmVsPSJCZXRhIChUaXBlIElJKSIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZT0iVmlzdWFsaXNhc2kgS2VzYWxhaGFuIFRpcGUgSSBkYW4gVGlwZSBJSSIsIHk9IlByb2JhYmlsaXRhcyIsIHg9Ik5pbGFpIFN0YXRpc3RpayIpDQpgYGANCjwvZGl2Pg0KDQojIyMgSHVidW5nYW4gYW50YXJhICRcYWxwaGEkLCAkXGJldGEkLCBkYW4gU3RhdGlzdGljYWwgUG93ZXINCjxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzI4YTc0NTsgbWFyZ2luLWJvdHRvbTogMjBweDsgYm9yZGVyLXJhZGl1czogNXB4OyI+DQpLZXRpZ2Ega29uc2VwIGluaSBzYWxpbmcgYmVya2FpdGFuIGVyYXQ6DQoNCiogKipTdGF0aXN0aWNhbCBQb3dlciAoJDEgLSBcYmV0YSQpOioqIEFkYWxhaCBrZW1hbXB1YW4gdGVzIHVudHVrIG1lbmRldGVrc2kgZWZlayB5YW5nIGJlbmFyLWJlbmFyIGFkYSAobWVub2xhayAkSF8wJCB5YW5nIHNhbGFoKS4NCg0KKiAqKlRyYWRlLW9mZiAkXGFscGhhJCBkYW4gJFxiZXRhJDoqKiBKaWthIGtpdGEgbWVtcGVya2V0YXQgJFxhbHBoYSQgKG1pc2FsbnlhIGRhcmkgMC4wNSBrZSAwLjAxKSB1bnR1ayBtZW5naGluZGFyaSBrZXNhbGFoYW4gVGlwZSBJLCBtYWthIHByb2JhYmlsaXRhcyBLZXNhbGFoYW4gVGlwZSBJSSAoJFxiZXRhJCkgYmlhc2FueWEgYWthbiBtZW5pbmdrYXQsIHlhbmcgYmVyYXJ0aSAqUG93ZXIqIG1lbnVydW4uDQoNCiogKipNZW5pbmdrYXRrYW4gUG93ZXI6KiogQ2FyYSBwYWxpbmcgZWZla3RpZiB1bnR1ayBtZW51cnVua2FuICRcYmV0YSQgdGFucGEgbWVuaW5na2F0a2FuICRcYWxwaGEkIGFkYWxhaCBkZW5nYW4gbWVtcGVyYmVzYXIgKip1a3VyYW4gc2FtcGVsKiouDQo8L2Rpdj4NCg0KIyBDYXNlIFN0dWR5IFAtVmFsdWUgYW5kIFN0YXRpc3RpY2FsIERlY2lzaW9uIE1ha2luZw0KDQojIyBBbmFsaXNpcyBIYXNpbCBFdmFsdWFzaSBNb2RlbA0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCkJlcmRhc2Fya2FuIGV2YWx1YXNpIG1vZGVsIHByZWRpa3NpICpjaHVybiosIGRpZGFwYXRrYW4gZGF0YSBiZXJpa3V0Og0KDQoqICoqVGVzdCBTdGF0aXN0aWM6KiogJDIuMzEkDQoNCiogKipQLVZhbHVlOioqICQwLjAyMSQNCg0KKiAqKlNpZ25pZmljYW5jZSBMZXZlbCAoJFxhbHBoYSQpOioqICQwLjA1JA0KPC9kaXY+DQoNCiMjIEphd2FiYW4gVHVnYXMNCg0KIyMjIE1ha25hIGRhcmkgcC12YWx1ZQ0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCiRwXHRleHR7LXZhbHVlfSQgc2ViZXNhciAqKjAuMDIxKiogYmVyYXJ0aSBqaWthIGtpdGEgbWVuZ2FzdW1zaWthbiBoaXBvdGVzaXMgbm9sICgkSF8wJCkgYmVuYXIgKGFydGlueWEgbW9kZWwgdGlkYWsgbWVtaWxpa2kga2VtYW1wdWFuIHByZWRpa3NpKSwgbWFrYSBwcm9iYWJpbGl0YXMgdW50dWsgbWVuZGFwYXRrYW4gaGFzaWwgc3RhdGlzdGlrIHVqaSBzZWJlc2FyIDIuMzEgYXRhdSBsZWJpaCBzZWNhcmEgdGlkYWsgc2VuZ2FqYSBoYW55YWxhaCAqKjIuMSUqKi4gS2FyZW5hIHByb2JhYmlsaXRhcyBpbmkgc2FuZ2F0IGtlY2lsLCBraXRhIG1lcmFndWthbiBrZWJlbmFyYW4gJEhfMCQuDQo8L2Rpdj4NCiMjIyBLZXB1dHVzYW4gU3RhdGlzdGlrDQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KVW50dWsgbWVuZ2FtYmlsIGtlcHV0dXNhbiwga2l0YSBtZW1iYW5kaW5na2FuIG5pbGFpICRwJCBkZW5nYW4gYW1iYW5nIGJhdGFzICRcYWxwaGEkOg0KDQoqKktyaXRlcmlhIEtlcHV0dXNhbjoqKg0KKiBKaWthICRwXHRleHR7LXZhbHVlfSBcbGUgXGFscGhhIFxSaWdodGFycm93JCBUb2xhayAkSF8wJA0KKiBKaWthICRwXHRleHR7LXZhbHVlfSA+IFxhbHBoYSBcUmlnaHRhcnJvdyQgR2FnYWwgVG9sYWsgJEhfMCQNCg0KKipQZXJoaXR1bmdhbjoqKg0KJCQwLjAyMSBcbGUgMC4wNSQkDQoNCioqS2VwdXR1c2FuOioqICoqVG9sYWsgJEhfMCQqKi4gSGFzaWwgcGVuZ3VqaWFuIGluaSBkaW55YXRha2FuICoqc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrKiogcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JS4NCjwvZGl2Pg0KDQojIyMgSW50ZXJwcmV0YXNpIE1hbmFqZXJpYWwgKEJhaGFzYSBOb24tVGVrbmlzKQ0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCiJIYXNpbCBhbmFsaXNpcyBrYW1pIG1lbnVuanVra2FuIGJhaHdhIG1vZGVsIHByZWRpa3NpICpjaHVybiogaW5pIGJla2VyamEgZGVuZ2FuIHNhbmdhdCBiYWlrLiBLZW11bmdraW5hbiBoYXNpbCBpbmkgYmVuYXIgaGFueWEga2FyZW5hIGtlYmV0dWxhbiBzYW5nYXRsYWggcmVuZGFoIChrdXJhbmcgZGFyaSAzJSkuIE9sZWgga2FyZW5hIGl0dSwga2l0YSBkYXBhdCBtZW5nZ3VuYWthbiBtb2RlbCBpbmkgZGVuZ2FuIHBlcmNheWEgZGlyaSB1bnR1ayBtZW5naWRlbnRpZmlrYXNpIHBlbGFuZ2dhbiB5YW5nIGJlcmlzaWtvIGJlcmhlbnRpIGJlcmxhbmdnYW5hbi4iDQo8L2Rpdj4NCg0KIyMjIFJpc2lrbyBTYW1wZWwgVGlkYWsgUmVwcmVzZW50YXRpZg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsgcGFkZGluZzogMTVweDsgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMjhhNzQ1OyBtYXJnaW4tYm90dG9tOiAyMHB4OyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCkppa2Egc2FtcGVsIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmdldmFsdWFzaSBtb2RlbCB0aWRhayBtZXdha2lsaSBzZWx1cnVoIHBvcHVsYXNpIHBlbGFuZ2dhbiAobWlzYWxueWEgaGFueWEgbWVuZ2FtYmlsIGRhdGEgZGFyaSBwZWxhbmdnYW4gbGFtYSksIG1ha2EgbXVuY3VsIHJpc2lrbzoNCg0KKiAqKkJpYXMgR2VuZXJhbGlzYXNpOioqIE1vZGVsIG11bmdraW4gdGVybGloYXQgYWt1cmF0IGRhbGFtIHBlbmd1amlhbiwgbmFtdW4gZ2FnYWwgc2FhdCBkaXRlcmFwa2FuIHBhZGEgcGVsYW5nZ2FuIGJhcnUgYXRhdSBzZWdtZW4geWFuZyBiZXJiZWRhLg0KDQoqICoqS2VzYWxhaGFuIFN0cmF0ZWdpOioqIE1hbmFqZW1lbiBtdW5na2luIHNhbGFoIG1lbmdhbG9rYXNpa2FuIGFuZ2dhcmFuIHByb21vc2kga2FyZW5hIHByZWRpa3NpIG1vZGVsIHlhbmcgdGlkYWsgYWt1cmF0IGRpIGxhcGFuZ2FuLg0KPC9kaXY+DQoNCiMjIyBNZW5nYXBhIHAtdmFsdWUgVGlkYWsgTWVuZ3VrdXIgRWZmZWN0IFNpemU/DQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZDRlZGRhOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItbGVmdDogNXB4IHNvbGlkICMyOGE3NDU7IG1hcmdpbi1ib3R0b206IDIwcHg7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KJHBcdGV4dHstdmFsdWV9JCBoYW55YSBtZW5naW5mb3JtYXNpa2FuIGFwYWthaCBzZWJ1YWggZWZlayAqKmFkYSoqIGF0YXUgdGlkYWsgKHNpZ25pZmlrYW5zaSksIGJ1a2FuIHNlYmVyYXBhICoqYmVzYXIqKiBkYW1wYWsgZWZlayB0ZXJzZWJ1dCB0ZXJoYWRhcCBiaXNuaXMuIA0KDQpIdWJ1bmdhbiBtYXRlbWF0aXNueWEgc2VjYXJhIGtvbnNlcHR1YWwgYWRhbGFoOg0KJCRcdGV4dHtUZXN0IFN0YXRpc3RpY30gPSBcdGV4dHtFZmZlY3QgU2l6ZX0gXHRpbWVzIFxzcXJ0e1x0ZXh0e1NhbXBsZSBTaXplfX0kJA0KDQpEZW5nYW4ganVtbGFoIHNhbXBlbCAoJG4kKSB5YW5nIHNhbmdhdCBiZXNhciwgZWZlayB5YW5nIHNhbmdhdCBrZWNpbCBwdW4gZGFwYXQgbWVuZ2hhc2lsa2FuICRwXHRleHR7LXZhbHVlfSQgeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWssIG1lc2tpcHVuIHNlY2FyYSBwcmFrdGlzIGVmZWsgdGVyc2VidXQgdGlkYWsgbWVtYmVyaWthbiBrZXVudHVuZ2FuIGZpbmFuc2lhbCB5YW5nIGJlcmFydGkgYmFnaSBwZXJ1c2FoYWFuLg0KDQo8L2Rpdj4=