Laporan Perbandingan Probability Sampling dan Non-Probability Sampling dalam Mengestimasi Pengeluaran Makanan Bulanan Mahasiswa

Tugas 3 Sampling & Survey Techniques

Logo

1 Pendahuluan

1.1 Tujuan Penelitian

Penelitian ini bertujuan untuk membandingkan metode Probability Sampling dan Non-Probability Sampling dalam menangani Margin of Error (MoE) saat memperkirakan pengeluaran makanan bulanan mahasiswa. Dengan memahami perbedaan efektivitas setiap metode, penelitian ini memberikan wawasan dalam memilih teknik sampling yang tepat untuk studi serupa.

1.2 Pentingnya MoE dalam Pengambilan Sampel

Margin of Error (MoE) merupakan faktor penting dalam pengambilan sampel karena menentukan seberapa dekat hasil sampel dengan populasi sebenarnya. MoE membantu dalam mengukur keandalan estimasi yang diperoleh dari sampel, serta memberikan batas toleransi terhadap kesalahan yang mungkin terjadi dalam proses pengambilan sampel. Dalam penelitian ini, perhitungan MoE akan digunakan untuk menilai efektivitas masing-masing metode sampling dalam memberikan estimasi yang akurat dan dapat diandalkan.

2 Metode Pengambilan Sampel yang Digunakan

Dataset Pengeluaran Bulanan Mahasiswa

2.1 Probability Sampling

Probability Sampling memastikan bahwa setiap mahasiswa dalam populasi memiliki peluang yang diketahui dan tidak nol untuk dipilih. Hal ini memungkinkan hasil yang dapat digeneralisasikan dan tidak bias.

2.1.1 Simple Random Sampling (SRS)

Simple Random Sampling (SRS) adalah metode di mana setiap mahasiswa memiliki peluang yang sama untuk dipilih. Mahasiswa dipilih secara acak dari populasi menggunakan generator angka acak.

2.1.2 Stratified Sampling

Stratified Sampling adalah teknik pengambilan sampel probabilitas di mana populasi mahasiswa dibagi menjadi beberapa subkelompok (Fakultas).Populasi dikelompokkan berdasarkan fakultas, kemudian sampel diambil secara acak dari setiap strata secara proporsional.

2.1.3 Systematic Sampling

Systematic Sampling adalah teknik pengambilan sampel probabiliti dimana elemen-elemen dipilih dari suatu populasi pada interval teertentu (k) setelah memilih titik awal yang acak. Alih-alih memilih sampel secara acak, metode ini menggunakan pendekatan terstruktur, sehingga lebih efeisien dan mudah diterapkan. Pemilihan sampel dilakukan dengan mengambil setiap mahasiswa ke-k dari daftar yang telah diurutkan.

2.1.4 Cluster Sampling

Cluster Sampling adalah teknik pengambilan sampel dimana alih-alih memilih individu secara acak, namun memilih seluruh krlompok (cluster). Setelah satu cluster terpilih, semua individu dalah cluster tersebut dimasukkan ke dalam sampel. Beberapa fakultas dipilih secara acak, lalu semua mahasiswa dalam fakultas tersebut diwawancarai.

2.1.5 Multi-Stage Sampling

Memilih beberapa fakultas secara acak. Dari fakultas yang terpilih, memilih beberapa mahasiswa secara acak berdasarkan ID.

2.2 Non-Probability Sampling

Non Probability Sampling tidak memberikan setiap individu peluang seleksi diketahui, membuatnya rentan terhadap bias tetapi berguna dalam penelitian eksploratif.

2.2.1 Convenience Sampling

Convenience Sampling adalah metode pengambilan sampel non probabilitas dimana subjek dipilih berdasarkan kemudahan akses, ketersediaan, dan kedekatan.Memilih mahasiswa yang mudah dijangkau diwawancarai, seperti di kafetaria atau perpustakaan.

2.2.2 Quota Sampling

Quota Sampling adalah metode pengambilan sampel non probabilitas di mana membagi populasi menjadi subkelompok (kuota) berdasarkan karakteristik tertentu dan memilih peserta secara tidak acak untuk memenuhi kuota yang telah ditentukan sebelumnya untuk setiap subkelompok. Sejumlah mahasiswa tetap dari setiap fakultas diwawancarai tanpa pemilihan acak.

2.2.3 Judgmental (Purposive) Sampling

Mahasiswa dipilih berdasarkan kriteria tertentu, misalnya penghuni asrama yang memiliki pola konsumsi lebih stabil. Pola konsumsi yang dianggap stabil adalah mahasiswa yang memiliki pengeluaran > Rp 1.500.000 dan < Rp 2.500.000.

2.2.4 Snowball Sampling

Snowball Sampling adalah metode pengambilan sampel non probabilitas yang digunakan untuk mempelajari populasi yang sulit dijangkau atau tersembunya. Dimulai dengan memilih beberapa mahasiswa yang kemudian mereka merekomendasikan mahasiswa lain.

3 Perhitungan MoE untuk Pengambilan Sampel Probabilitas

Margin of Error (MoE) adalah konsep statistik yang mengukur ketidak pastian dalam hasil survei atau estimasi berbasis sampel. Konsep ini memberikan rentang di mana parameter populasi sebenarnya cenderung menurun.

Secara umum, MoE dihitung dengan rumus: \[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \] Dimana:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(n\) = 100 (jumlah sampel)

  • \(\sigma\) = Simpangan baku sampel

Simpangan baku (\(\sigma\)) dihitung dengan rumus: \[ \sigma = \sqrt{\frac{\sum (X_i - \bar{X})^2}{n-1}} \]

Dimana:

  • \(X_i\) = Pengeluaran makanan mahasiswa ke-i

  • \(\bar{X}\) = Rata-rata pengeluaran makanan mahasiswa

  • \(n\) = Ukuran sampel

3.1 Simple Random Sampling (SRS)

## [1] "Simpangan Baku (SRS): 574312"

Diketahui:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(n\) = 100 (jumlah sampel)

  • \(\sigma\) = Rp 574.312

Maka:

\[ MoE = 1.96 \times \frac{574.312}{\sqrt{100}}\\ MoE = 1.96 \times \frac{574.312}{10}\\ MoE = 112.565,2\\ \]

## [1] "MoE SRS: 112565.2"

Hasil ini berarti bahwa perkiraan rata-rata pengeluaran mahasiswa dari sampel SRS memiliki kemungkinan selisih sekitar Rp 112.565,2 dari rata-rata pengeluaran mahasiswa di populasi sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa jika penelitian ini diulang berkali-kali dengan metode yang sama, rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada dalam rentang ± Rp 112.565,2 dari nilai sebenarnya sebanyak 95% dari waktu.

Dengan kata lain:

Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada dalam rentang antara Rp 1.387.435 dan Rp 1.612.565.

3.2 Stratified Random Sampling

## [1] "Simpangan Baku Strata: Rp 579233.97"

Diketahui:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(n\) = 100 (jumlah sampel)

  • \(\sigma\) = Rp 579.233,97

Maka:

\[ MoE = 1.96 \times \frac{579.233,97}{\sqrt{100}}\\ MoE = 1.96 \times \frac{579.233,97}{10}\\ MoE = 113.529,86\\ \]

## [1] "Margin of Error (MoE): Rp 113529.86"

Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung dari sampel metode Stratified Random Sampling memiliki kemungkinan selisih sekitar Rp 113.529,86 dari rata-rata pengeluaran mahasiswa di populasi sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa jika penelitian ini diulang berkali-kali dengan metode yang sama, rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada dalam rentang ± Rp 113.529,86 dari nilai sebenarnya sebanyak 95% dari waktu.

Dengan kata lain:

Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada dalam rentang antara Rp 1.386.470,14 hingga Rp 1.613.529,86.

3.3 Systematic Sampling

## [1] "Simpangan Baku Systematic: Rp 578276.14"

Diketahui:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(n\) = 100 (jumlah sampel)

  • \(\sigma\) = Rp 578.276,14

Maka:

\[ MoE = 1.96 \times \frac{578.276,14}{\sqrt{100}}\\ MoE = 1.96 \times \frac{578.276,14}{10}\\ MoE = 113.342,12\\ \]

## [1] "MoE Sampel Sistematis: 113342.12"

Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung dari sampel metode Systematic Sampling memiliki kemungkinan selisih sekitar Rp 113.342,12 dari rata-rata pengeluaran mahasiswa di populasi sebenarnya.Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa jika penelitian ini diulang berkali-kali dengan metode yang sama, rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada dalam rentang ± Rp 113.342,12 dari nilai sebenarnya sebanyak 95% dari waktu.

Dengan kata lain:

Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada dalam rentang antara Rp 1.386.657,88 hingga Rp 1.613.342,12.

3.4 Cluster Sampling

## [1] "Simpangan Baku Cluster: Rp 564600.62"

Diketahui:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(n\) = 100 (jumlah sampel)

  • \(\sigma\) = Rp 564.600,62

Maka:

\[ MoE = 1.96 \times \frac{564.600,62}{\sqrt{100}}\\ MoE = 1.96 \times \frac{564.600,62}{10}\\ MoE = 110.661,72\\ \]

## [1] "MoE Cluster Sampling: Rp 110661.72"

Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung dari sampel metode Cluster Sampling memiliki kemungkinan selisih sekitar Rp 110.661,72 dari rata-rata pengeluaran mahasiswa di populasi sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa jika penelitian ini diulang berkali-kali dengan metode yang sama, rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada dalam rentang ± Rp 110.661,72 dari nilai sebenarnya sebanyak 95% dari waktu.

Dengan kata lain:

Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada dalam rentang antara Rp 1.389.338,28 hingga Rp 1.610.661,72.

3.5 Multi-Stage Sampling

## [1] "Simpangan Baku Cluster: Rp 584690.4"

Diketahui:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(n\) = 100 (jumlah sampel)

  • \(\sigma\) = Rp 584.690,4

Maka:

\[ MoE = 1.96 \times \frac{584.690,4}{\sqrt{100}}\\ MoE = 1.96 \times \frac{584.690,4}{10}\\ MoE = 114.599,32\\ \]

## [1] "MoE Multi Stage: Rp 114599.32"

Hasil ini berarti bahwa rata-rata pengeluaran mahasiswa yang dihitung dari sampel metode Multi-Stage Sampling memiliki kemungkinan selisih sekitar Rp 114.599,32 dari rata-rata pengeluaran mahasiswa di populasi sebenarnya. Dengan tingkat kepercayaan 95%, kita bisa mengatakan bahwa jika penelitian ini diulang berkali-kali dengan metode yang sama, rata-rata pengeluaran mahasiswa yang dihitung dari sampel akan berada dalam rentang ± Rp 114.599,32 dari nilai sebenarnya sebanyak 95% dari waktu.

Dengan kata lain:

Jika hasil penelitian menunjukkan bahwa rata-rata pengeluaran mahasiswa dalam sampel adalah Rp 1.500.000, maka kita bisa yakin bahwa rata-rata pengeluaran mahasiswa di seluruh populasi kemungkinan berada dalam rentang antara Rp 1.385.400,68 hingga Rp 1.614.599,32.

4 Analisis Bias dalam Pengambilan Sampel Non-Probabilitas

4.1 Convenience Sampling

Sumber Bias:

Jika hanya mahasiswa yang berada di satu kantin universitas diwawancarai, maka sampel ini tidak mencerminkan mahasiswa yang lebih sering memasak di rumah atau makan di tempat lain.

Dampak:

  • Hasil survei kemungkinan besar tidak dapat digeneralisasi ke seluruh populasi mahasiswa.

  • Data yang dikumpulkan mungkin lebih menggambarkan kebiasaan konsumsi mahasiswa tertentu daripada populasi yang lebih luas.

Perbedaan dengan Probability Sampling:

Dalam Probability Sampling, setiap individu dalam populasi memiliki peluang yang sama untuk terpilih, sehingga bias akibat pemilihan berdasarkan kenyamanan dapat dihindari.

4.2 Judgmental (Purposive) Sampling

Sumber Bias:

Jika hanya mahasiswa ekonomi yang diwawancarai dalam studi pengeluaran makanan karena dianggap lebih paham tentang keuangan, hasilnya bisa bias karena mahasiswa dari jurusan lain mungkin memiliki pola pengeluaran yang berbeda.

Dampak:

  • Penelitian mungkin hanya mencerminkan karakteristik kelompok tertentu dan tidak mencerminkan populasi mahasiswa secara keseluruhan.

  • Generalisasi menjadi terbatas karena pemilihan subjek yang sudah dipengaruhi oleh subjektivitas peneliti.

Perbedaan dengan Probability Sampling:

Probability Sampling menggunakan metode acak, yang menghindari pengaruh subjektivitas peneliti dalam pemilihan sampel.

4.3 Quota Sampling

Sumber Bias:

Dalam survei pengeluaran makanan, kuota dibuat berdasarkan gender (misalnya 50% laki-laki, 50% perempuan), tetapi responden dipilih berdasarkan siapa yang tersedia terlebih dahulu.

Dampak:

  • Meskipun terlihat seimbang dalam proporsi, individu dalam setiap kategori mungkin tidak mewakili keseluruhan populasi dari kategori tersebut.

  • Bisa ada bias dari kelompok yang lebih mudah dijangkau, sementara kelompok yang sulit diakses kurang terwakili.

Perbedaan dengan Probability Sampling:

Stratified Random Sampling dalam Probability Sampling lebih unggul karena pemilihan sampel dalam setiap strata tetap dilakukan secara acak, bukan berdasarkan kemudahan akses.

4.4 Snowball Sampling

Sumber Bias:

Jika seorang mahasiswa direkrut untuk wawancara dan kemudian merekomendasikan teman-temannya untuk ikut serta, maka kemungkinan besar semua peserta survei berasal dari kelompok pertemanan yang serupa dalam gaya hidup dan pengeluaran.

Dampak:

  • Hasil survei tidak mewakili populasi mahasiswa secara keseluruhan karena hanya melibatkan kelompok yang saling terhubung.

  • Variasi dalam data menjadi lebih kecil dari yang seharusnya karena hanya mencerminkan kelompok tertentu.

Perbedaan dengan Probability Sampling:

Dalam Simple Random Sampling, pemilihan dilakukan tanpa bergantung pada jaringan sosial, sehingga distribusi sampel lebih beragam dan representatif.

4.5 Perbandingan Bias dalam Non-Probability dengan Probability Sampling

Aspek Non-Probability Sampling Probability Sampling
Peluang Terpilih Tidak semua individu memiliki peluang yang sama Semua individu memiliki peluang yang diketahui untuk dipilih
Bias dalam Pemilihan Tinggi, tergantung aksesibilitas dan subjektivitas Rendah, karena pemilihan dilakukan secara acak
Representatif atau Tidak Kurang representatif Lebih representatif
Bias yang Sering Muncul Selection Bias, Researcher Bias, Network Bias Minimal, karena distribusi acak memastikan keragaman sampel
Generalizability Rendah, sulit digeneralisasi ke populasi Tinggi, hasil dapat digeneralisasi ke seluruh populasi
Margin of Error (MoE) Tidak dapat dihitung dengan akurat Dapat dihitung dan dikontrol dengan baik

Metode Non-Probability Sampling memiliki keterbatasan dalam menangani bias, yang dapat menyebabkan hasil survei kurang akurat dan kurang dapat digeneralisasi ke populasi yang lebih luas. Bias dalam metode ini muncul dari pemilihan sampel yang tidak acak, aksesibilitas terbatas, dan subjektivitas dalam penentuan sampel. Akibatnya, Margin of Error (MoE) sulit dikontrol dan hasil survei bisa menjadi tidak representatif.

Sebaliknya, Probability Sampling lebih unggul dalam mengurangi bias karena menggunakan metode pemilihan acak yang memberikan peluang yang sama bagi setiap individu dalam populasi untuk terpilih. Dengan demikian, hasilnya lebih representatif, Margin of Error lebih kecil dan dapat dihitung dengan akurat, serta generalisasi hasil lebih kuat dibandingkan dengan Non-Probability Sampling.

5 Perbandingan Semua Metode

5.1 Perbandingan Metode Probability Sampling

Dalam penelitian ini, beberapa metode sampling digunakan untuk memahami variasi pengeluaran mahasiswa. Untuk menilai akurasi setiap metode, kita membandingkan simpangan baku (\(\sigma\)) dan Margin of Error (MoE). Margin of Error menunjukkan seberapa jauh hasil sampel dapat menyimpang dari populasi sebenarnya dengan tingkat kepercayaan 95%.

Metode Sampling Simpangan Baku (\(\sigma\)) MoE (Rp)
Simple Random Sampling (SRS) Rp 574.312,00 Rp 112.565,20
Stratified Sampling Rp 579.233,97 Rp 113.529,86
Systematic Sampling Rp 578.276,14 Rp 113.342,12
Cluster Sampling Rp 564.600,62 Rp 110.661,72
Multi-Stage Sampling Rp 584.690,40 Rp 114.599,32

5.1.1 Analisis dan Penjelasan Setiap Metode Probability Sampling

1. Simple Random Sampling (SRS)

  • Konsep:

    Dalam metode ini, 100 mahasiswa dipilih secara acak tanpa mempertimbangkan fakultas atau faktor lain.

  • Hasil:

    • Simpangan baku: Rp 574.312,00

    • MoE: Rp 112.565,20

  • Interpretasi:

    • Simpangan baku menunjukkan bahwa pengeluaran mahasiswa dalam sampel memiliki variasi yang cukup besar.

    • MoE Rp 112.565,20 berarti jika kita melakukan survei ulang dengan metode yang sama, selisih hasil dengan populasi sebenarnya masih dalam kisaran tersebut.

  • Keunggulan:

    • Sederhana dan mudah diterapkan.

    • Jika dilakukan dengan benar, memberikan estimasi yang tidak bias terhadap populasi.

  • Kelemahan:

    • Tidak mempertimbangkan variasi antar kelompok (misalnya, perbedaan antara fakultas).

    • Bisa menghasilkan sampel yang kurang representatif jika distribusi populasi tidak merata.

2. Stratified Sampling

  • Konsep:

    Dalam metode ini, mahasiswa dikelompokkan berdasarkan fakultas (strata), kemudian dipilih secara proporsional dari setiap kelompok untuk memastikan representasi yang lebih baik.

  • Hasil:

    • Simpangan baku: Rp 579.233,97

    • MoE: Rp 113.529,86

  • Interpretasi:

    • Simpangan baku sedikit lebih tinggi dibandingkan SRS, yang berarti terdapat variasi yang lebih besar dalam data yang dikumpulkan.

    • MoE sedikit lebih besar dari SRS, tetapi metode ini lebih representatif karena mempertimbangkan variasi antar fakultas.

  • Keunggulan:

    • Lebih akurat daripada SRS jika populasi sangat heterogen.

    • Memastikan bahwa setiap fakultas memiliki representasi yang memadai dalam sampel.

  • Kelemahan:

    • Memerlukan informasi awal tentang populasi untuk melakukan stratifikasi.

    • Proses pembagian strata bisa kompleks jika terdapat banyak kategori.

3. Systematic Sampling

  • Konsep:

    Dalam metode ini, mahasiswa dipilih dengan pola tertentu, misalnya setiap mahasiswa ke-10 dari daftar yang telah diurutkan.

  • Hasil:

    • Simpangan baku: Rp 578.276,14

    • MoE: Rp 113.342,12

  • Interpretasi:

    • Simpangan baku hampir sama dengan Stratified Sampling.

    • MoE sedikit lebih kecil dari Stratified Sampling, menunjukkan bahwa metode ini cukup baik dalam menangkap variasi dalam populasi.

  • Keunggulan:

    • Mudah dilakukan tanpa perlu daftar lengkap populasi sebelum pengambilan sampel.

    • Efektif dalam survei lapangan yang membutuhkan efisiensi waktu.

  • Kelemahan:

    • Jika ada pola tersembunyi dalam data (misalnya daftar urut pengeluaran mahasiswa dibuat berdasarkan pola tertentu), hasilnya bisa menjadi bias.

4. Cluster Sampling

  • Konsep:

    Dalam metode ini, beberapa fakultas dipilih secara acak, lalu semua mahasiswa dalam fakultas tersebut disurvei.

  • Hasil:

    • Simpangan baku: Rp 564.600,62 (paling rendah dibanding metode lain).

    • MoE: Rp 110.661,72 (MoE terkecil).

  • Interpretasi:

    • Simpangan baku yang lebih rendah menunjukkan bahwa data dalam fakultas yang dipilih lebih seragam.

    • MoE terkecil berarti estimasi lebih dekat dengan nilai populasi dibandingkan metode lain.

  • Keunggulan:

    • Lebih hemat biaya dan waktu karena hanya perlu mensurvei beberapa fakultas.

    • Berguna jika populasi terbagi dalam kelompok geografis atau institusional.

  • Kelemahan:

    • Jika fakultas yang dipilih tidak representatif, hasilnya bisa bias.

    • Cenderung menghasilkan variasi data yang lebih kecil dibandingkan metode lain karena hanya beberapa klaster yang digunakan.

5. Multi-Stage Sampling

  • Konsep:

    Metode ini melibatkan lebih dari satu tahap pemilihan sampel. Pertama, beberapa fakultas dipilih secara acak, kemudian dari setiap fakultas tersebut, mahasiswa dipilih secara acak untuk survei.

  • Hasil:

    • Simpangan baku: Rp 584.690,40 (paling tinggi dibanding metode lain).

    • MoE: Rp 114.599,32 (MoE terbesar).

  • Interpretasi:

    • Simpangan baku yang tinggi menunjukkan bahwa mahasiswa dalam sampel memiliki variasi pengeluaran yang lebih besar.

    • MoE terbesar berarti hasil survei lebih berisiko mengalami penyimpangan dari populasi sebenarnya.

  • Keunggulan:

    • Cocok untuk populasi yang sangat besar dan kompleks.

    • Menghemat waktu dibandingkan Stratified Sampling karena tidak perlu data lengkap dari semua fakultas.

  • Kelemahan:

    • Kompleksitas lebih tinggi dibanding metode lainnya.

    • MoE terbesar menunjukkan bahwa estimasi lebih mungkin meleset dari nilai populasi sebenarnya.

5.2 Perbandingan Metode Non-Probability Sampling

Kriteria Convenience Sampling Purposive Sampling Quota Sampling Snowball Sampling
Definisi Pemilihan sampel berdasarkan kemudahan akses. Sampel dipilih berdasarkan kriteria tertentu yang ditetapkan oleh peneliti. Sampel dipilih berdasarkan karakteristik tertentu yang harus memenuhi kuota. Sampel diperoleh melalui referensi dari responden sebelumnya.
Proses Pemilihan Berdasarkan aksesibilitas (siapa yang mudah dijangkau). Berdasarkan pertimbangan subjektif peneliti. Berdasarkan kategori tertentu, tetapi dalam kategori itu pemilihan tidak acak. Berdasarkan jaringan sosial responden sebelumnya.
Tingkat Bias Tinggi (Selection Bias & Sampling Bias). Tinggi (Researcher Bias & Subjective Judgment). Sedang (terkendali dalam kuota, tetapi tidak acak dalam pemilihannya). Tinggi (Network Bias & Homogeneity Bias).
Kemudahan Penggunaan Sangat Mudah Mudah Sedang (butuh pengelompokan kuota terlebih dahulu). Sulit (tergantung keterlibatan responden).
Representatif atau Tidak? Tidak representatif, karena hanya menggambarkan kelompok tertentu. Kurang representatif, karena bergantung pada kriteria yang ditetapkan peneliti. Relatif lebih representatif dibandingkan convenience dan purposive, tetapi tetap tidak sepenuhnya acak. Tidak representatif karena hanya melibatkan jaringan tertentu.
Cocok Digunakan untuk? Studi eksploratif, survei awal. Studi yang membutuhkan karakteristik responden tertentu. Studi demografi dengan karakteristik spesifik. Studi pada populasi tersembunyi (misalnya komunitas tertentu).
Kecepatan Pengumpulan Data Cepat Cepat Sedang (karena harus memenuhi kuota). Lambat (tergantung rekomendasi responden).
Kelebihan Mudah, murah, dan cepat. Bisa mendapatkan sampel yang sesuai dengan kebutuhan penelitian. Bisa menyeimbangkan distribusi kategori dalam populasi. Bisa digunakan untuk populasi yang sulit dijangkau.
Kekurangan Tidak representatif dan rawan bias. Subjektif dan bergantung pada peneliti. Tidak benar-benar acak dan masih memiliki bias. Responden yang dipilih cenderung memiliki karakteristik serupa.

5.2.1 Analisis dan Penjelasan Setiap Metode Non-Probability Sampling

1. Convenience Sampling (Sampel Kemudahan)

  • Keunggulan:

    • Cepat dan mudah dilakukan tanpa banyak sumber daya.

    • Cocok untuk studi eksplorasi awal atau penelitian dengan keterbatasan waktu.

  • Kelemahan:

    • Bias seleksi tinggi karena hanya mencakup individu yang mudah diakses.

    • Tidak representatif, sehingga hasilnya sulit digeneralisasi ke seluruh populasi.

  • Dampak terhadap penelitian:

    • Misalnya, jika survei dilakukan di kafetaria, mahasiswa yang sering makan di luar kampus tidak akan terwakili, sehingga estimasi pengeluaran makanan bisa lebih tinggi/rendah dari nilai sebenarnya.
  • Kesimpulan:

    • Kurang cocok untuk penelitian yang membutuhkan estimasi populasi yang akurat. Namun, bisa digunakan sebagai langkah awal untuk memahami pola dasar populasi.

2. Judgmental (Purposive) Sampling

  • Keunggulan:

    • Memungkinkan peneliti memilih individu yang dianggap paling relevan untuk studi.

    • Berguna untuk penelitian kualitatif atau eksplorasi kelompok tertentu dalam populasi.

  • Kelemahan:

    • Bias pemilih terjadi karena peneliti menggunakan subjektivitas dalam memilih sampel.

    • Kurang representatif, terutama jika hanya satu kriteria yang digunakan dalam pemilihan sampel.

  • Dampak terhadap penelitian:

    • Jika hanya memilih mahasiswa penghuni asrama sebagai sampel, data tidak akan mencerminkan mahasiswa yang tinggal di luar kampus, yang mungkin memiliki pola pengeluaran berbeda.
  • Kesimpulan:

    • Cocok untuk studi kualitatif yang memerlukan wawasan mendalam tentang kelompok tertentu.

    • Tidak ideal untuk penelitian yang memerlukan estimasi statistik populasi yang akurat.

3. Quota Sampling

  • Keunggulan:

    • Memastikan adanya representasi dari kelompok tertentu (misalnya, proporsi tiap fakultas).

    • Lebih terstruktur dibandingkan Convenience Sampling, sehingga hasilnya lebih mendekati populasi.

  • Kelemahan:

    • Bias pemilih masih ada karena individu dalam kuota tidak dipilih secara acak.

    • Bias subjektif bisa terjadi karena peneliti memiliki kebebasan dalam memilih individu dalam kelompok.

  • Dampak terhadap penelitian:

    • Misalnya, meskipun jumlah sampel dari tiap fakultas sudah ditentukan, peneliti bisa memilih hanya mahasiswa yang mudah dijangkau, sehingga variasi dalam kelompok tidak tercermin dengan baik.
  • Kesimpulan:

    • Lebih baik daripada Convenience atau Judgmental Sampling, tetapi masih memiliki potensi bias.

    • Cocok untuk penelitian yang ingin menjaga distribusi kelompok tertentu, tetapi tidak memerlukan keacakan penuh.

4. Snowball Sampling

  • Keunggulan:

    • Efektif untuk meneliti kelompok yang sulit dijangkau, seperti mahasiswa dengan kondisi ekonomi tertentu atau komunitas khusus.

    • Menghemat waktu dan sumber daya karena responden membantu menemukan sampel lainnya.

  • Kelemahan:

    • Bias jaringan sosial terjadi karena individu cenderung merekomendasikan orang dengan karakteristik serupa.

    • Kurang representatif karena sampel berasal dari lingkaran sosial yang terbatas.

  • Dampak terhadap penelitian:

    • Misalnya, jika penelitian dimulai dengan mahasiswa yang berasal dari keluarga ekonomi menengah ke atas, mereka kemungkinan besar akan merekomendasikan teman-teman dengan kondisi serupa. Ini menyebabkan data tidak mencerminkan populasi mahasiswa secara keseluruhan.
  • Kesimpulan:

    • Bagus untuk penelitian kualitatif atau kelompok yang sulit ditemukan.

    • Tidak cocok untuk studi yang memerlukan distribusi data yang lebih luas dan representatif.

5.3 Perbandingan Semua Metode

Aspek Simple Random Sampling (SRS) Stratified Sampling Systematic Sampling Cluster Sampling Multi-Stage Sampling Convenience Sampling Judgmental (Purposive) Sampling Quota Sampling Snowball Sampling
Keacakan Ya Ya Ya, tetapi rentan bias jika ada pola Ya, tetapi terbatas Ya, tetapi terbatas Tidak Tidak Tidak Tidak
Representativitas Sedang Tinggi Sedang Rendah - Sedang Sedang - Tinggi Rendah Rendah Sedang Rendah
Bias Rendah Rendah Rendah - Sedang Sedang Sedang Tinggi Tinggi Sedang Tinggi
Kemudahan Pelaksanaan Sedang Sulit Mudah Mudah Sulit Sangat Mudah Mudah Sedang Sedang
Biaya Sedang Tinggi Rendah Rendah Tinggi Sangat Rendah Rendah Sedang Sedang
Cocok untuk Populasi Homogen & besar Heterogen Homogen & besar Berkelompok (Cluster) Sangat besar & kompleks Tidak spesifik Spesifik (sesuai tujuan penelitian) Beragam Populasi Tersembunyi

6 Ukuran Sampel yang Diperlukan untuk MoE = 5

6.1 Rumus Pertama

\[ n = \frac{(Z \times \sigma)^2}{MoE^2} \]

Dengan:

  • \(Z\) = 1.96 (Z-score untuk tingkat kepercayaan 95%)

  • \(MoE\) = 5 (Margin of Error)

  • \(\sigma\) = simpangan baku

6.1.1 Simple Random Sampling (SRS)

Diketahui :

  • \(Z\) = 1.96

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 574.312

Maka:

\[ n = \frac{(1.96 \times 574312)^2}{5^2}\\ n = \frac{(1125651.52)^2}{25}\\ n = \frac{1.266.112.916.792.310}{25}\\ n = 50.683.653.779 \]

## [1] 50683653779

Simple Random Sampling (SRS) didasarkan pada pemilihan acak tanpa mempertimbangkan karakteristik tertentu dari populasi. Hasil perhitungan yang sangat besar menunjukkan bahwa dengan variabilitas pengeluaran yang tinggi (𝜎=574.312), kita memerlukan sampel dalam jumlah sangat besar untuk mencapai margin of error sebesar Rp 5. Dalam praktiknya, angka ini tidak realistis, yang berarti perlu penyesuaian, seperti meningkatkan margin of error atau menggunakan metode sampling lain yang lebih efisien.

6.1.2 Stratified Random Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 579.233,97

Maka:

\[ n = \frac{(1.96 \times 579233.97)^2}{5^2}\\ n = \frac{(1135209.59)^2}{25}\\ n = \frac{1.289.181.370.509.667}{25}\\ n = 51.556.114.739 \]

## [1] 51556114739

Stratified Sampling membagi populasi ke dalam kelompok (strata) berdasarkan karakteristik tertentu sebelum pengambilan sampel dilakukan dalam setiap strata. Simpangan baku sedikit lebih tinggi dibandingkan SRS (σ=579.233,97), yang menunjukkan bahwa terdapat perbedaan antar kelompok yang menyebabkan perlunya ukuran sampel lebih besar. Jika stratifikasi dilakukan dengan baik, jumlah sampel seharusnya bisa dikurangi sambil tetap menjaga representativitas data.

6.1.3 Systematic Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(N\) = 500

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 578.276,14

Maka:

\[ n = \frac{(1.96 \times 578276.14)^2}{5^2}\\ n = \frac{(1133331.23)^2}{25}\\ n = \frac{1.283.937.694.591.158}{25}\\ n = 51.385.747.784 \]

## [1] 51385747784

Systematic Sampling memilih sampel berdasarkan interval tetap, misalnya setiap ke-𝑘dari daftar populasi. Simpangan bakunya (σ=578.276,14) juga cukup tinggi, menyebabkan perhitungan ukuran sampel hampir sama. Jika populasi memiliki pola tertentu dalam data (misalnya ada siklus dalam pengeluaran), metode ini dapat memberikan hasil yang kurang akurat dibandingkan SRS atau Stratified Sampling.

6.1.4 Cluster Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 564.600,62

Maka:

\[ n = \frac{(1.96 \times 564600.62)^2}{5^2}\\ n = \frac{(1106651.22)^2}{25}\\ n = \frac{1.224.601.660.986.007}{25}\\ n = 48.984.066.439 \]

## [1] 48984066439

Cluster Sampling memilih kelompok (cluster) secara acak dan mengumpulkan data dari semua individu dalam cluster tersebut. Mengapa lebih kecil dari metode lain? Simpangan bakunya lebih rendah (σ=564.600,62), menunjukkan bahwa variabilitas dalam cluster lebih kecil dibandingkan metode lainnya, sehingga ukuran sampel yang dihitung sedikit lebih rendah. Cluster Sampling cenderung lebih efisien dalam hal biaya dan waktu, tetapi bisa menghasilkan bias jika cluster yang dipilih tidak benar-benar mewakili populasi secara keseluruhan.

6.1.5 Multi-Stage Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 584.690,4

Maka:

\[ n = \frac{(1.96 \times 584690.40)^2}{5^2}\\ n = \frac{(1145809.18)^2}{25}\\ n = \frac{1.313.300.377.790.071}{25}\\ n = 52.532.015.111 \]

## [1] 52532015111

Multi-Stage Sampling adalah variasi dari Cluster Sampling di mana pengambilan sampel dilakukan dalam beberapa tahap, misalnya memilih wilayah tertentu, lalu memilih rumah tangga di dalamnya. Mengapa paling besar? Simpangan baku tertinggi (σ=584.690,40) menunjukkan adanya variabilitas yang sangat besar antar kelompok yang dipilih, sehingga ukuran sampel yang dihitung lebih besar dibandingkan metode lainnya. Jika Multi-Stage Sampling dilakukan dengan baik, dapat menjadi metode yang efisien untuk survei besar, tetapi jika variabilitas antar kelompok tinggi, hasil bisa kurang akurat.

6.2 Rumus Kedua

Didapatkan hasil apabila menggunakan rumus pertama, maka hasilnya memiliki angka yang tidak realistis karena memiliki jumlah yang sangat besar. Sedangkan hanya memiliki populasi sebesar 500, sehingga untuk perhitungan menggunakan rumus pertama memiliki hasil yang tidak akurat.

Maka dari itu untuk mengkoreksi perhitungan pertama, kita bisa menerapkan Finite Population Correction (FPC) untuk menyesuaikan ukuran sampel dengan keterbatasan populasi. Disini kita bisa menggunakan 2 cara, yaitu dengan cara mengkoreksi langsung dan menghitung ulang namun tetap menerapkan FPC.

6.2.1 Koreksi Langsung

Pada cara pertama yaitu mengkoreksi langsung, bisa menggunakan rumus:

\[ n_{adj} = \frac{n}{1 + \frac{n - 1}{N}} \]

di mana:
- \(n\) = ukuran sampel yang dihitung sebelumnya
- \(N\) = 500 (ukuran populasi)

6.2.1.1 Simple Random Sampling (SRS)

\[ n_{adj} = \frac{50.683.653.779}{1 + \frac{50.683.653.779 - 1}{500}}\\ n_{adj} \approx 499.999995 \approx 500 \]

6.2.1.2 Stratified Sampling

\[ n_{adj} = \frac{51.556.114.739}{1 + \frac{51.556.114.739 - 1}{500}}\\ n_{adj} \approx 499.999995 \approx 500 \]

6.2.1.3 Systematic Sampling

\[ n_{adj} = \frac{51.385.747.784}{1 + \frac{51.385.747.784 - 1}{500}}\\ n_{adj} \approx 499.999995 \approx 500 \]

6.2.1.4 Cluster Sampling

\[ n_{adj} = \frac{48.984.066.439}{1 + \frac{48.984.066.439 - 1}{500}}\\ n_{adj} \approx 499.999995 \approx 500 \]

6.2.1.5 Multi-Stage Sampling

\[n_{adj} = \frac{52.532.015.111}{1 + \frac{52.532.015.111 - 1}{500}}\\ n_{adj} \approx 499.999995 \approx 500 \]

6.2.2 Koreksi dengan Menghitung Ulang

Pada cara kedua, yaitu menghitung ulang. Maka dapat menggunakan rumus:

\[ n = \frac{Z^2 \cdot \sigma^2 \cdot N}{(MoE^2 \cdot (N - 1)) + (Z^2 \cdot \sigma^2)} \]

dengan:

  • \(Z\) = 1.96 (untuk tingkat kepercayaan 95%)

  • \(N\) = 500 (jumlah populasi)

  • \(MoE\) = 5 (Margin of Error)

  • \(\sigma\) = Simpangan baku

6.2.2.1 Simple Random Sampling (SRS)

Diketahui :

  • \(Z\) = 1.96

  • \(N\) = 500

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 574.312

Maka:

\[ n = \frac{Z^2 \cdot \sigma^2 \cdot N}{(MoE^2 \cdot (N - 1)) + (Z^2 \cdot \sigma^2)}\\ n = \frac{1,96^2 \cdot 574312^2 \cdot 500}{(5^2 \cdot (500 - 1)) + (1,96^2 \cdot574312^2)}\\ n = 499,999995 \]

## [1] 499.9999951

Berdasarkan perhitungan Simple Random Sampling (SRS), ukuran sampel yang diperlukan untuk mencapai Margin of Error (MoE) sebesar Rp 5 dengan simpangan baku Rp 574.312 dan populasi 500 adalah sekitar 500. Hal ini menunjukkan bahwa untuk mencapai tingkat presisi yang sangat tinggi, hampir seluruh populasi harus disurvei, membuat metode sampling ini tidak lagi efisien dan mendekati sensus penuh.

6.2.2.2 Stratified Random Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(N\) = 500

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 579.233,97

Maka:

\[ n = \frac{Z^2 \cdot \sigma^2 \cdot N}{(MoE^2 \cdot (N - 1)) + (Z^2 \cdot \sigma^2)}\\ n = \frac{1,96^2 \cdot 579233,97^2 \cdot 500}{(5^2 \cdot (500 - 1)) + (1,96^2 \cdot 579233,97^2)}\\ n = 499,999995 \]

## [1] 499.9999952

Berdasarkan perhitungan untuk metode Stratified Random Sampling, ukuran sampel yang diperlukan untuk mencapai Margin of Error (MoE) sebesar Rp 5 dengan simpangan baku Rp 579.233,97 dan populasi 500 adalah sekitar 500. Hal ini menunjukkan bahwa, seperti dalam metode Simple Random Sampling (SRS), hampir seluruh populasi harus disurvei untuk mencapai tingkat ketepatan yang sangat tinggi. Stratified Sampling biasanya lebih efisien dibandingkan SRS karena membagi populasi ke dalam strata yang lebih homogen, namun dalam kasus ini, karena MoE yang sangat kecil, metode ini tetap membutuhkan hampir seluruh populasi. Oleh karena itu, untuk meningkatkan efisiensi penelitian, Margin of Error perlu diperbesar agar ukuran sampel yang dibutuhkan lebih kecil dan lebih realistis untuk diimplementasikan.

6.2.2.3 Systematic Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(N\) = 500

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 578.276,14

Maka:

\[ n = \frac{Z^2 \cdot \sigma^2 \cdot N}{(MoE^2 \cdot (N - 1)) + (Z^2 \cdot \sigma^2)}\\ n = \frac{1,96^2 \cdot 578276,14^2 \cdot 500}{(5^2 \cdot (500 - 1)) + (1,96^2 \cdot 578276,14^2)}\\ n = 499,999995 \]

## [1] 499.9999951

Berdasarkan perhitungan untuk metode Systematic Sampling, jumlah sampel yang dibutuhkan untuk mencapai Margin of Error (MoE) sebesar Rp 5 dengan simpangan baku Rp 578.276,14 dan populasi 500 adalah sekitar 500. Hal ini menunjukkan bahwa hampir seluruh populasi harus diambil sebagai sampel untuk mencapai tingkat presisi yang sangat tinggi. Systematic Sampling sering digunakan karena kemudahannya dalam pemilihan sampel secara berkala dari daftar yang telah diurutkan. Namun, dalam kasus ini, dengan MoE yang sangat kecil, metode ini tetap membutuhkan hampir seluruh populasi, mirip dengan Simple Random Sampling (SRS) dan Stratified Sampling. Oleh karena itu, agar penelitian lebih efisien dan praktis, perlu mempertimbangkan Margin of Error yang lebih besar sehingga ukuran sampel yang diperlukan dapat dikurangi tanpa mengorbankan akurasi secara signifikan.

6.2.2.4 Cluster Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(N\) = 500

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 564.600,62

Maka:

\[ n = \frac{Z^2 \cdot \sigma^2 \cdot N}{(MoE^2 \cdot (N - 1)) + (Z^2 \cdot \sigma^2)}\\ n = \frac{1,96^2 \cdot 564600,62^2 \cdot 500}{(5^2 \cdot (500 - 1)) + (1,96^2 \cdot 564600,62^2)}\\ n = 499,999995 \]

## [1] 499.9999951

Berdasarkan hasil perhitungan untuk metode Cluster Sampling, jumlah sampel yang diperlukan untuk mencapai Margin of Error (MoE) sebesar Rp 5 dengan simpangan baku Rp 564.600,62 dan populasi 500 adalah sekitar 500. Ini berarti bahwa hampir seluruh populasi harus disertakan dalam sampel agar mencapai tingkat presisi yang diinginkan. Cluster Sampling sering digunakan untuk mengurangi biaya dan waktu dengan memilih kelompok (klaster) secara acak daripada individu, tetapi dalam kasus ini, karena MoE yang sangat kecil, jumlah sampel yang dibutuhkan tetap mendekati seluruh populasi. Oleh karena itu, untuk penelitian yang lebih efisien, perlu mempertimbangkan peningkatan Margin of Error agar jumlah sampel yang dibutuhkan bisa lebih realistis dan tetap memberikan hasil yang akurat.

6.2.2.5 Multi-Stage Sampling

Diketahui :

  • \(Z\) = 1.96

  • \(N\) = 500

  • \(MoE\) = Rp 5

  • \(\sigma\) = Rp 584.690,4

Maka:

\[ n = \frac{Z^2 \cdot \sigma^2 \cdot N}{(MoE^2 \cdot (N - 1)) + (Z^2 \cdot \sigma^2)}\\ n = \frac{1,96^2 \cdot 584690,4^2 \cdot 500}{(5^2 \cdot (500 - 1)) + (1,96^2 \cdot 584690,4^2)}\\ n = 499,999995 \]

## [1] 499.9999951

Berdasarkan hasil perhitungan untuk metode Multi-Stage Sampling, jumlah sampel yang diperlukan untuk mencapai Margin of Error (MoE) sebesar Rp 5 dengan simpangan baku Rp 584.690,4 dan populasi 500 adalah sekitar 500. Hal ini menunjukkan bahwa hampir seluruh populasi harus disertakan dalam sampel untuk mencapai tingkat presisi yang sangat tinggi. Multi-Stage Sampling biasanya digunakan untuk menyederhanakan proses pengambilan sampel dengan memilih kelompok bertahap sebelum memilih individu dalam kelompok tersebut. Namun, dalam kasus ini, karena MoE yang sangat kecil, metode ini tetap membutuhkan hampir seluruh populasi. Oleh karena itu, dalam praktiknya, peneliti perlu mempertimbangkan peningkatan Margin of Error atau menyesuaikan strategi pengambilan sampel agar lebih efisien tanpa mengorbankan representativitas data.

7 Kesimpulan dan Rekomendasi

Dalam penelitian ini, berbagai metode probability sampling dan non-probability sampling telah dibandingkan untuk menilai keakuratan serta efisiensinya dalam mengestimasi pengeluaran mahasiswa. Dari hasil analisis, metode probability sampling terbukti lebih unggul dalam hal keakuratan karena memungkinkan setiap individu dalam populasi memiliki peluang yang sama untuk terpilih sebagai sampel. Sebaliknya, metode non-probability sampling lebih mudah dan cepat diterapkan, tetapi memiliki risiko bias yang lebih tinggi sehingga hasilnya kurang dapat digeneralisasi ke seluruh populasi.

Di antara metode probability sampling, Stratified Sampling memiliki keunggulan dalam menangkap variasi antar kelompok karena populasi dibagi menjadi strata sebelum pemilihan sampel dilakukan. Hal ini menjadikannya salah satu metode paling akurat untuk populasi yang heterogen, seperti mahasiswa dari berbagai fakultas dengan pola pengeluaran yang berbeda-beda. Cluster Sampling, meskipun lebih hemat biaya dan waktu, memiliki kelemahan karena hanya memilih beberapa kelompok tertentu, yang bisa membuat hasilnya kurang representatif jika klaster yang dipilih tidak cukup mencerminkan populasi secara keseluruhan. Systematic Sampling menawarkan efisiensi dalam pemilihan sampel, tetapi rentan terhadap bias jika terdapat pola tertentu dalam urutan data populasi. Simple Random Sampling (SRS) memberikan hasil yang tidak bias secara teori, tetapi kurang efektif dalam populasi yang heterogen karena tidak mempertimbangkan variasi antar kelompok. Multi-Stage Sampling menjadi pilihan yang baik untuk populasi yang besar dan kompleks, meskipun memiliki margin of error yang lebih besar dibandingkan metode lain karena pemilihan dilakukan dalam beberapa tahap yang meningkatkan kemungkinan variasi dalam sampel.

Sementara itu, metode non-probability sampling lebih sering digunakan dalam penelitian eksploratif atau ketika terdapat keterbatasan dalam sumber daya dan waktu. Convenience Sampling adalah metode yang paling mudah dilakukan karena hanya melibatkan individu yang mudah dijangkau, tetapi memiliki bias seleksi yang tinggi sehingga hasilnya tidak dapat mewakili populasi dengan baik. Judgmental (Purposive) Sampling memberikan keleluasaan bagi peneliti untuk memilih sampel yang dianggap paling relevan, tetapi tetap rentan terhadap bias subjektif yang bisa mengurangi objektivitas penelitian. Quota Sampling mencoba mengatasi bias representasi dengan menetapkan proporsi tertentu dalam sampel, tetapi masih memungkinkan bias dalam pemilihan individu dalam setiap kelompok. Snowball Sampling berguna untuk meneliti kelompok yang sulit dijangkau, tetapi berisiko tinggi menghasilkan sampel yang terlalu homogen karena individu cenderung merekrut orang lain yang memiliki karakteristik serupa dengan mereka.

Selain pemilihan metode sampling, perhitungan ukuran sampel yang diperlukan untuk Margin of Error (MoE) sebesar 5 menunjukkan bahwa untuk populasi hanya 500 orang, hampir seluruh populasi harus disurvei (499.999995 orang). Hal ini menunjukkan bahwa semakin kecil margin of error yang diinginkan, semakin besar jumlah sampel yang dibutuhkan untuk mendapatkan estimasi yang akurat. Dalam praktiknya, tidak selalu memungkinkan untuk mensurvei hampir seluruh populasi, sehingga perlu dilakukan kompromi antara ukuran sampel dan tingkat ketepatan hasil yang diharapkan. Jika sumber daya terbatas, MoE yang lebih besar dapat diterima untuk mendapatkan ukuran sampel yang lebih realistis.

Secara keseluruhan, probability sampling lebih direkomendasikan dalam penelitian yang membutuhkan hasil yang akurat dan dapat digeneralisasi, terutama jika heterogenitas dalam populasi cukup tinggi. Metode seperti Stratified Sampling atau Systematic Sampling dapat menjadi pilihan yang baik untuk meningkatkan keakuratan tanpa meningkatkan biaya secara signifikan. Di sisi lain, non-probability sampling tetap berguna dalam situasi tertentu, terutama jika penelitian bertujuan untuk eksplorasi awal atau jika terdapat keterbatasan sumber daya yang membuat probability sampling sulit dilakukan. Namun, dalam penggunaan metode ini, peneliti perlu menyadari potensi bias yang ada dan mempertimbangkan strategi mitigasi yang dapat diterapkan.

Selain itu, penentuan ukuran sampel sangat berpengaruh terhadap kualitas hasil penelitian. Jika jumlah sampel terlalu kecil, hasil penelitian bisa menjadi tidak akurat dan memiliki margin of error yang besar. Sebaliknya, jika jumlah sampel terlalu besar, penelitian bisa menjadi lebih mahal dan memakan waktu lebih lama tanpa memberikan peningkatan manfaat yang signifikan. Oleh karena itu, perencanaan yang matang dalam memilih metode sampling serta menentukan ukuran sampel yang tepat sangat penting untuk memastikan hasil penelitian yang valid dan dapat diandalkan.

LS0tDQp0aXRsZTogIkxhcG9yYW4gUGVyYmFuZGluZ2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nIGRhbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFsYW0gTWVuZ2VzdGltYXNpIFBlbmdlbHVhcmFuIE1ha2FuYW4gQnVsYW5hbiBNYWhhc2lzd2EiDQpzdWJ0aXRsZTogIlR1Z2FzIDMgU2FtcGxpbmcgJiBTdXJ2ZXkgVGVjaG5pcXVlcyINCmF1dGhvcjogDQogICJJc25haW5pIE51ciBIYXNhbmFoICg1MjI0MDAwNSkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyb2JvYm9vazogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlICgxKS5jc3MiDQogICAgcGFyYW1zOg0KICBlY2hvOiBmYWxzZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBtYXJrZG93bjogDQogICAgd3JhcDogNzINCi0tLQ0KDQo8aW1nIGlkPSJJc25hIiBzcmM9IkM6XFVzZXJzXEFTVVNcRGVza3RvcFxTdGF0aXN0aWthIERhc2FyXElzbmEucG5nIiBhbHQ9IkxvZ28iIHN0eWxlPSJ3aWR0aDoyMDBweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiPg0KDQojICoqUGVuZGFodWx1YW4qKg0KDQojIyAqKlR1anVhbiBQZW5lbGl0aWFuKioNCg0KUGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbWJhbmRpbmdrYW4gbWV0b2RlIFByb2JhYmlsaXR5IFNhbXBsaW5nIGRhbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFsYW0gbWVuYW5nYW5pIE1hcmdpbiBvZiBFcnJvciAoTW9FKSBzYWF0IG1lbXBlcmtpcmFrYW4gcGVuZ2VsdWFyYW4gbWFrYW5hbiBidWxhbmFuIG1haGFzaXN3YS4gRGVuZ2FuIG1lbWFoYW1pIHBlcmJlZGFhbiBlZmVrdGl2aXRhcyBzZXRpYXAgbWV0b2RlLCBwZW5lbGl0aWFuIGluaSBtZW1iZXJpa2FuIHdhd2FzYW4gZGFsYW0gbWVtaWxpaCB0ZWtuaWsgc2FtcGxpbmcgeWFuZyB0ZXBhdCB1bnR1ayBzdHVkaSBzZXJ1cGEuDQoNCiMjICoqUGVudGluZ255YSBNb0UgZGFsYW0gUGVuZ2FtYmlsYW4gU2FtcGVsKioNCg0KTWFyZ2luIG9mIEVycm9yIChNb0UpIG1lcnVwYWthbiBmYWt0b3IgcGVudGluZyBkYWxhbSBwZW5nYW1iaWxhbiBzYW1wZWwga2FyZW5hIG1lbmVudHVrYW4gc2ViZXJhcGEgZGVrYXQgaGFzaWwgc2FtcGVsIGRlbmdhbiBwb3B1bGFzaSBzZWJlbmFybnlhLiBNb0UgbWVtYmFudHUgZGFsYW0gbWVuZ3VrdXIga2VhbmRhbGFuIGVzdGltYXNpIHlhbmcgZGlwZXJvbGVoIGRhcmkgc2FtcGVsLCBzZXJ0YSBtZW1iZXJpa2FuIGJhdGFzIHRvbGVyYW5zaSB0ZXJoYWRhcCBrZXNhbGFoYW4geWFuZyBtdW5na2luIHRlcmphZGkgZGFsYW0gcHJvc2VzIHBlbmdhbWJpbGFuIHNhbXBlbC4gRGFsYW0gcGVuZWxpdGlhbiBpbmksIHBlcmhpdHVuZ2FuIE1vRSBha2FuIGRpZ3VuYWthbiB1bnR1ayBtZW5pbGFpIGVmZWt0aXZpdGFzIG1hc2luZy1tYXNpbmcgbWV0b2RlIHNhbXBsaW5nIGRhbGFtIG1lbWJlcmlrYW4gZXN0aW1hc2kgeWFuZyBha3VyYXQgZGFuIGRhcGF0IGRpYW5kYWxrYW4uDQoNCiMgKipNZXRvZGUgUGVuZ2FtYmlsYW4gU2FtcGVsIHlhbmcgRGlndW5ha2FuKioNCg0KKipEYXRhc2V0IFBlbmdlbHVhcmFuIEJ1bGFuYW4gTWFoYXNpc3dhKioNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW1iYWNhIGRhdGEgZGFyaSBmaWxlIENTVg0KZGF0YSA8LSByZWFkLmNzdigiZGF0YV9wZW5nZWx1YXJhbl9tYWhhc2lzd2EuY3N2IikNCmhlYWQoZGF0YSkNCmBgYA0KDQojIyAqKlByb2JhYmlsaXR5IFNhbXBsaW5nKioNCg0KUHJvYmFiaWxpdHkgU2FtcGxpbmcgbWVtYXN0aWthbiBiYWh3YSBzZXRpYXAgbWFoYXNpc3dhIGRhbGFtIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBkaWtldGFodWkgZGFuIHRpZGFrIG5vbCB1bnR1ayBkaXBpbGloLiBIYWwgaW5pIG1lbXVuZ2tpbmthbiBoYXNpbCB5YW5nIGRhcGF0IGRpZ2VuZXJhbGlzYXNpa2FuIGRhbiB0aWRhayBiaWFzLg0KDQojIyMgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKioNClNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykgYWRhbGFoIG1ldG9kZSBkaSBtYW5hIHNldGlhcCBtYWhhc2lzd2EgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEgdW50dWsgZGlwaWxpaC4gTWFoYXNpc3dhIGRpcGlsaWggc2VjYXJhIGFjYWsgZGFyaSBwb3B1bGFzaSBtZW5nZ3VuYWthbiBnZW5lcmF0b3IgYW5na2EgYWNhay4NCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW11YXQgbGlicmFyeQ0Kc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGRwbHlyKSkNCg0KIyBNZW5lbnR1a2FuIHVrdXJhbiBzYW1wZWwNCnNldC5zZWVkKDQyKQ0Kc2FtcGxlX3NpemUgPC0gMTAwDQoNCiMgTWVsYWt1a2FuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykNCnNhbXBsZV9kYXRhIDwtIGRhdGEgJT4lIHNhbXBsZV9uKHNhbXBsZV9zaXplKQ0KDQojIE1lbnlpbXBhbiBoYXNpbCBrZSBmaWxlIENTViBiYXJ1DQp3cml0ZS5jc3Yoc2FtcGxlX2RhdGEsICJzYW1wbGVkX2RhdGEuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIGhhc2lsIHNhbXBlbA0KaGVhZChzYW1wbGVfZGF0YSkNCmBgYA0KDQojIyMgKipTdHJhdGlmaWVkIFNhbXBsaW5nKioNClN0cmF0aWZpZWQgU2FtcGxpbmcgYWRhbGFoIHRla25payBwZW5nYW1iaWxhbiBzYW1wZWwgcHJvYmFiaWxpdGFzIGRpIG1hbmEgcG9wdWxhc2kgbWFoYXNpc3dhIGRpYmFnaSBtZW5qYWRpIGJlYmVyYXBhIHN1YmtlbG9tcG9rIChGYWt1bHRhcykuUG9wdWxhc2kgZGlrZWxvbXBva2thbiBiZXJkYXNhcmthbiBmYWt1bHRhcywga2VtdWRpYW4gc2FtcGVsIGRpYW1iaWwgc2VjYXJhIGFjYWsgZGFyaSBzZXRpYXAgc3RyYXRhIHNlY2FyYSBwcm9wb3JzaW9uYWwuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHNhbXBsaW5nKQ0KDQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbCB0b3RhbA0Kc2V0LnNlZWQoNDIpDQpzYW1wbGVfc2l6ZSA8LSAxMDANCg0KIyBNZW5naGl0dW5nIGp1bWxhaCBtYWhhc2lzd2EgcGVyIGZha3VsdGFzDQpzdHJhdGFfY291bnRzIDwtIGRhdGEgJT4lIGNvdW50KEZha3VsdGFzKQ0KDQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbCBwZXIgZmFrdWx0YXMgZGVuZ2FuIGJhdGFzIG1ha3NpbXVtDQpzdHJhdGFfY291bnRzIDwtIHN0cmF0YV9jb3VudHMgJT4lDQogIG11dGF0ZShwcm9wb3JzaSA9IG4gLyBzdW0obiksDQogICAgICAgICBzYW1wZWxfcGVyX3N0cmF0YSA9IHBtaW4ocm91bmQocHJvcG9yc2kgKiBzYW1wbGVfc2l6ZSksIG4pKSAgIyBCYXRhcyBtYWtzaW11bQ0KDQojIE1lbGFrdWthbiBTdHJhdGlmaWVkIFNhbXBsaW5nIG1lbmdndW5ha2FuIGZ1bmdzaSBzdHJhdGEoKSBkYXJpIHBhY2thZ2UgInNhbXBsaW5nIg0Kc3RyYXRpZmllZF9zYW1wbGUgPC0gc3RyYXRhKGRhdGEsIHN0cmF0YW5hbWVzID0gYygiRmFrdWx0YXMiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc3RyYXRhX2NvdW50cyRzYW1wZWxfcGVyX3N0cmF0YSwgbWV0aG9kID0gInNyc3dvciIpDQoNCiMgTWVuZ2FtYmlsIGRhdGEgc2FtcGVsIGJlcmRhc2Fya2FuIGhhc2lsIHN0cmF0aWZpa2FzaQ0Kc2FtcGxlX2RhdGEgPC0gZGF0YVtzdHJhdGlmaWVkX3NhbXBsZSRJRF91bml0LCBdDQoNCiMgTWVueWltcGFuIGhhc2lsIGtlIGZpbGUgQ1NWIGJhcnUNCndyaXRlLmNzdihzYW1wbGVfZGF0YSwgInNhbXBsZWRfc3RyYXRpZmllZF9kYXRhLmNzdiIsIHJvdy5uYW1lcz1GQUxTRSkNCg0KIyBNZW5hbXBpbGthbiBiZWJlcmFwYSBiYXJpcyBoYXNpbCBzYW1wZWwNCmhlYWQoc2FtcGxlX2RhdGEpDQpgYGANCg0KIyMjICoqU3lzdGVtYXRpYyBTYW1wbGluZyoqDQpTeXN0ZW1hdGljIFNhbXBsaW5nIGFkYWxhaCB0ZWtuaWsgcGVuZ2FtYmlsYW4gc2FtcGVsIHByb2JhYmlsaXRpIGRpbWFuYSBlbGVtZW4tZWxlbWVuIGRpcGlsaWggZGFyaSBzdWF0dSBwb3B1bGFzaSBwYWRhIGludGVydmFsIHRlZXJ0ZW50dSAoaykgc2V0ZWxhaCBtZW1pbGloIHRpdGlrIGF3YWwgeWFuZyBhY2FrLiBBbGloLWFsaWggbWVtaWxpaCBzYW1wZWwgc2VjYXJhIGFjYWssIG1ldG9kZSBpbmkgbWVuZ2d1bmFrYW4gcGVuZGVrYXRhbiB0ZXJzdHJ1a3R1ciwgc2VoaW5nZ2EgbGViaWggZWZlaXNpZW4gZGFuIG11ZGFoIGRpdGVyYXBrYW4uIFBlbWlsaWhhbiBzYW1wZWwgZGlsYWt1a2FuIGRlbmdhbiBtZW5nYW1iaWwgc2V0aWFwIG1haGFzaXN3YSBrZS1rIGRhcmkgZGFmdGFyIHlhbmcgdGVsYWggZGl1cnV0a2FuLg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIE1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbA0Kc2V0LnNlZWQoNDIpDQpzYW1wbGVfc2l6ZSA8LSAxMDANCg0KIyBNZW5lbnR1a2FuIGludGVydmFsIHNpc3RlbWF0aXMNCk4gPC0gbnJvdyhkYXRhKSAgIyBKdW1sYWggdG90YWwgcG9wdWxhc2kNCmsgPC0gZmxvb3IoTiAvIHNhbXBsZV9zaXplKSAgIyBJbnRlcnZhbCBzaXN0ZW1hdGlzDQoNCiMgTWVtaWxpaCB0aXRpayBhd2FsIHNlY2FyYSBhY2FrIGFudGFyYSAxIGRhbiBrDQpzdGFydCA8LSBzYW1wbGUoMTprLCAxKQ0KDQojIE1lbmdhbWJpbCBzYW1wZWwgZGVuZ2FuIGludGVydmFsIHNpc3RlbWF0aXMNCnN5c3RlbWF0aWNfc2FtcGxlX2luZGljZXMgPC0gc2VxKHN0YXJ0LCBOLCBieSA9IGspDQpzYW1wbGVfZGF0YSA8LSBkYXRhW3N5c3RlbWF0aWNfc2FtcGxlX2luZGljZXMsIF0NCg0KIyBNZW55aW1wYW4gaGFzaWwga2UgZmlsZSBDU1YgYmFydQ0Kd3JpdGUuY3N2KHNhbXBsZV9kYXRhLCAic2FtcGxlZF9zeXN0ZW1hdGljX2RhdGEuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIGhhc2lsIHNhbXBlbA0KaGVhZChzYW1wbGVfZGF0YSkNCmBgYA0KDQojIyMgKipDbHVzdGVyIFNhbXBsaW5nKioNCkNsdXN0ZXIgU2FtcGxpbmcgYWRhbGFoIHRla25payBwZW5nYW1iaWxhbiBzYW1wZWwgZGltYW5hIGFsaWgtYWxpaCBtZW1pbGloIGluZGl2aWR1IHNlY2FyYSBhY2FrLCBuYW11biBtZW1pbGloIHNlbHVydWgga3Jsb21wb2sgKGNsdXN0ZXIpLiBTZXRlbGFoIHNhdHUgY2x1c3RlciB0ZXJwaWxpaCwgc2VtdWEgaW5kaXZpZHUgZGFsYWggY2x1c3RlciB0ZXJzZWJ1dCBkaW1hc3Vra2FuIGtlIGRhbGFtIHNhbXBlbC4gQmViZXJhcGEgZmFrdWx0YXMgZGlwaWxpaCBzZWNhcmEgYWNhaywgbGFsdSBzZW11YSBtYWhhc2lzd2EgZGFsYW0gZmFrdWx0YXMgdGVyc2VidXQgZGl3YXdhbmNhcmFpLg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIFBhc3Rpa2FuIGRhdGEgc3VkYWggYWRhIGRhbiBGYWt1bHRhcyBkYWxhbSBmb3JtYXQga2FyYWt0ZXINCmRhdGEkRmFrdWx0YXMgPC0gYXMuY2hhcmFjdGVyKGRhdGEkRmFrdWx0YXMpDQoNCiMgSGFwdXMgbmlsYWkgTkEgYXRhdSBrb3NvbmcgcGFkYSBrb2xvbSAiRmFrdWx0YXMiDQpkYXRhIDwtIGRhdGEgJT4lIGZpbHRlcighaXMubmEoRmFrdWx0YXMpICYgRmFrdWx0YXMgIT0gIiIpDQoNCiMgRGFwYXRrYW4gZGFmdGFyIHVuaWsgZmFrdWx0YXMNCmZha3VsdGFzX3VuaWsgPC0gdW5pcXVlKGRhdGEkRmFrdWx0YXMpDQoNCiMgTWVuZW50dWthbiBqdW1sYWggZmFrdWx0YXMgeWFuZyBkaXBpbGloDQpzZXQuc2VlZCg0MikgDQpqdW1sYWhfZmFrdWx0YXMgPC0gbWluKDUsIGxlbmd0aChmYWt1bHRhc191bmlrKSkNCg0KIyBNZW1pbGloIGZha3VsdGFzIHNlY2FyYSBhY2FrDQpmYWt1bHRhc190ZXJwaWxpaCA8LSBzYW1wbGUoZmFrdWx0YXNfdW5paywganVtbGFoX2Zha3VsdGFzLCByZXBsYWNlID0gRkFMU0UpDQoNCiMgTWVuZ2FtYmlsIHNlbXVhIG1haGFzaXN3YSBkYXJpIGZha3VsdGFzIHlhbmcgZGlwaWxpaA0KY2x1c3Rlcl9zYW1wbGUgPC0gZGF0YSAlPiUgZmlsdGVyKEZha3VsdGFzICVpbiUgZmFrdWx0YXNfdGVycGlsaWgpDQoNCiMgTWVueWltcGFuIGhhc2lsIGtlIGZpbGUgQ1NWIGJhcnUNCndyaXRlLmNzdihjbHVzdGVyX3NhbXBsZSwgInNhbXBsZWRfY2x1c3Rlcl9mYWt1bHRhcy5jc3YiLCByb3cubmFtZXM9RkFMU0UpDQoNCiMgTWVuYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgaGFzaWwgc2FtcGVsDQpoZWFkKGNsdXN0ZXJfc2FtcGxlKQ0KYGBgDQoNCiMjIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCk1lbWlsaWggYmViZXJhcGEgZmFrdWx0YXMgc2VjYXJhIGFjYWsuIERhcmkgZmFrdWx0YXMgeWFuZyB0ZXJwaWxpaCwgbWVtaWxpaCBiZWJlcmFwYSBtYWhhc2lzd2Egc2VjYXJhIGFjYWsgYmVyZGFzYXJrYW4gSUQuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUGFzdGlrYW4ga29sb20gZGFsYW0gZm9ybWF0IGthcmFrdGVyDQpkYXRhJEZha3VsdGFzIDwtIGFzLmNoYXJhY3RlcihkYXRhJEZha3VsdGFzKQ0KZGF0YSRUYWh1bi5Ba2FkZW1payA8LSBhcy5jaGFyYWN0ZXIoZGF0YSRUYWh1bi5Ba2FkZW1paykNCg0KIyBIYXB1cyBuaWxhaSBOQSBhdGF1IGtvc29uZw0KZGF0YSA8LSBkYXRhICU+JSBmaWx0ZXIoIWlzLm5hKEZha3VsdGFzKSAmIEZha3VsdGFzICE9ICIiICYgIWlzLm5hKFRhaHVuLkFrYWRlbWlrKSAmIFRhaHVuLkFrYWRlbWlrICE9ICIiKQ0KDQojIFRhaGFwIDE6IFBpbGloIGJlYmVyYXBhIGZha3VsdGFzIHNlY2FyYSBhY2FrDQpzZXQuc2VlZCg0MikgICMgVW50dWsgaGFzaWwgeWFuZyBrb25zaXN0ZW4NCmp1bWxhaF9mYWt1bHRhcyA8LSA1ICAjIEp1bWxhaCBmYWt1bHRhcyB5YW5nIGluZ2luIGRpcGlsaWgNCmZha3VsdGFzX3VuaWsgPC0gdW5pcXVlKGRhdGEkRmFrdWx0YXMpDQoNCmlmIChsZW5ndGgoZmFrdWx0YXNfdW5paykgPCBqdW1sYWhfZmFrdWx0YXMpIHsNCiAgc3RvcCgiRXJyb3I6IEp1bWxhaCBmYWt1bHRhcyB5YW5nIHRlcnNlZGlhIGxlYmloIHNlZGlraXQgZGFyaSB5YW5nIGluZ2luIGRpcGlsaWguIikNCn0NCg0KZmFrdWx0YXNfdGVycGlsaWggPC0gc2FtcGxlKGZha3VsdGFzX3VuaWssIGp1bWxhaF9mYWt1bHRhcywgcmVwbGFjZSA9IEZBTFNFKQ0KDQojIEZpbHRlciBkYXRhIGJlcmRhc2Fya2FuIGZha3VsdGFzIHlhbmcgZGlwaWxpaA0KZGF0YV9mYWt1bHRhcyA8LSBkYXRhICU+JSBmaWx0ZXIoRmFrdWx0YXMgJWluJSBmYWt1bHRhc190ZXJwaWxpaCkNCg0KIyBUYWhhcCAyOiBQaWxpaCBiZWJlcmFwYSBtYWhhc2lzd2Egc2VjYXJhIGFjYWsgZGFyaSBzZXRpYXAgZmFrdWx0YXMNCmp1bWxhaF9tYWhhc2lzd2FfcGVyX2Zha3VsdGFzIDwtIDUgICMgQmlzYSBkaXViYWggc2VzdWFpIGtlYnV0dWhhbg0KbWFoYXNpc3dhX3NhbXBsZSA8LSBkYXRhX2Zha3VsdGFzICU+JQ0KICBncm91cF9ieShGYWt1bHRhcykgJT4lDQogIHNhbXBsZV9uKHNpemUgPSBtaW4oanVtbGFoX21haGFzaXN3YV9wZXJfZmFrdWx0YXMsIG4oKSksIHJlcGxhY2UgPSBGQUxTRSkNCg0KIyBNZW55aW1wYW4gaGFzaWwga2UgZmlsZSBDU1YgYmFydQ0Kd3JpdGUuY3N2KG1haGFzaXN3YV9zYW1wbGUsICJzYW1wbGVkX211bHRpc3RhZ2UuY3N2Iiwgcm93Lm5hbWVzPUZBTFNFKQ0KDQojIE1lbmFtcGlsa2FuIGJlYmVyYXBhIGJhcmlzIGhhc2lsIHNhbXBlbA0KaGVhZChtYWhhc2lzd2Ffc2FtcGxlKQ0KYGBgDQoNCiMjICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKioNCg0KTm9uIFByb2JhYmlsaXR5IFNhbXBsaW5nIHRpZGFrIG1lbWJlcmlrYW4gc2V0aWFwIGluZGl2aWR1IHBlbHVhbmcgc2VsZWtzaSBkaWtldGFodWksIG1lbWJ1YXRueWEgcmVudGFuIHRlcmhhZGFwIGJpYXMgdGV0YXBpIGJlcmd1bmEgZGFsYW0gcGVuZWxpdGlhbiBla3NwbG9yYXRpZi4gDQoNCiMjIyAqKkNvbnZlbmllbmNlIFNhbXBsaW5nKioNCkNvbnZlbmllbmNlIFNhbXBsaW5nIGFkYWxhaCBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsIG5vbiBwcm9iYWJpbGl0YXMgZGltYW5hIHN1YmplayBkaXBpbGloIGJlcmRhc2Fya2FuIGtlbXVkYWhhbiBha3Nlcywga2V0ZXJzZWRpYWFuLCBkYW4ga2VkZWthdGFuLk1lbWlsaWggbWFoYXNpc3dhIHlhbmcgbXVkYWggZGlqYW5na2F1IGRpd2F3YW5jYXJhaSwgc2VwZXJ0aSBkaSBrYWZldGFyaWEgYXRhdSBwZXJwdXN0YWthYW4uDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShkcGx5cikpDQoNCiMgTWVuZW50dWthbiBqdW1sYWggc2FtcGVsDQpqdW1sYWhfc2FtcGVsIDwtIDEwMA0KDQojIENvbnZlbmllbmNlIFNhbXBsaW5nOiBNZW5nYW1iaWwgbWFoYXNpc3dhIHBlcnRhbWEgZGFsYW0gdXJ1dGFuIGRhdGFzZXQNCnNhbXBlbF9rZW55YW1hbmFuIDwtIGhlYWQoZGF0YSwganVtbGFoX3NhbXBlbCkNCg0KIyBNZW55aW1wYW4gaGFzaWwga2UgZmlsZSBDU1YgYmFydQ0Kd3JpdGUuY3N2KHNhbXBlbF9rZW55YW1hbmFuLCAic2FtcGxlZF9jb252ZW5pZW5jZS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBNZW5hbXBpbGthbiBiZWJlcmFwYSBiYXJpcyBoYXNpbCBzYW1wZWwNCmhlYWQoc2FtcGVsX2tlbnlhbWFuYW4pDQpgYGANCg0KIyMjICoqUXVvdGEgU2FtcGxpbmcqKg0KUXVvdGEgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW5nYW1iaWxhbiBzYW1wZWwgbm9uIHByb2JhYmlsaXRhcyBkaSBtYW5hIG1lbWJhZ2kgcG9wdWxhc2kgbWVuamFkaSBzdWJrZWxvbXBvayAoa3VvdGEpIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgZGFuIG1lbWlsaWggcGVzZXJ0YSBzZWNhcmEgdGlkYWsgYWNhayB1bnR1ayBtZW1lbnVoaSBrdW90YSB5YW5nIHRlbGFoIGRpdGVudHVrYW4gc2ViZWx1bW55YSB1bnR1ayBzZXRpYXAgc3Via2Vsb21wb2suIFNlanVtbGFoIG1haGFzaXN3YSB0ZXRhcCBkYXJpIHNldGlhcCBmYWt1bHRhcyBkaXdhd2FuY2FyYWkgdGFucGEgcGVtaWxpaGFuIGFjYWsuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUGFzdGlrYW4gZGF0YXNldCBtZW1pbGlraSBrb2xvbSB5YW5nIGRpcGVybHVrYW4NCmlmICghIkZha3VsdGFzIiAlaW4lIGNvbG5hbWVzKGRhdGEpKSB7DQogIHN0b3AoIkVycm9yOiBLb2xvbSAnRmFrdWx0YXMnIHRpZGFrIGRpdGVtdWthbiBkYWxhbSBkYXRhc2V0LiBQYXN0aWthbiBuYW1hIGtvbG9tIHNlc3VhaSBkZW5nYW4gQ1NWLiIpDQp9DQoNCiMgSnVtbGFoIHNhbXBlbCB5YW5nIGRpYW1iaWwgcGVyIGZha3VsdGFzDQpqdW1sYWhfc2FtcGVsX3Blcl9mYWt1bHRhcyA8LSA1MCAgDQoNCiMgQ29udmVuaWVuY2UgU2FtcGxpbmc6IE1lbmdhbWJpbCA1MCBzaXN3YSBwZXJ0YW1hIGRhcmkgc2V0aWFwIGZha3VsdGFzDQpzYW1wZWxfa3VvdGEgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoRmFrdWx0YXMpICU+JQ0KICBzbGljZV9oZWFkKG4gPSBqdW1sYWhfc2FtcGVsX3Blcl9mYWt1bHRhcykgJT4lDQogIHVuZ3JvdXAoKQ0KDQojIE1lbnlpbXBhbiBoYXNpbCBrZSBmaWxlIENTViBiYXJ1DQp3cml0ZS5jc3Yoc2FtcGVsX2t1b3RhLCAic2FtcGxlZF9jb252ZW5pZW5jZV9xdW90YS5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBNZW5hbXBpbGthbiBiZWJlcmFwYSBiYXJpcyBoYXNpbCBzYW1wZWwNCmhlYWQoc2FtcGVsX2t1b3RhKQ0KYGBgDQoNCiMjIyAqKkp1ZGdtZW50YWwgKFB1cnBvc2l2ZSkgU2FtcGxpbmcqKg0KTWFoYXNpc3dhIGRpcGlsaWggYmVyZGFzYXJrYW4ga3JpdGVyaWEgdGVydGVudHUsIG1pc2FsbnlhIHBlbmdodW5pIGFzcmFtYSB5YW5nIG1lbWlsaWtpIHBvbGEga29uc3Vtc2kgbGViaWggc3RhYmlsLiBQb2xhIGtvbnN1bXNpIHlhbmcgZGlhbmdnYXAgc3RhYmlsIGFkYWxhaCBtYWhhc2lzd2EgeWFuZyBtZW1pbGlraSBwZW5nZWx1YXJhbiA+IFJwIDEuNTAwLjAwMCBkYW4gPCBScCAyLjUwMC4wMDAuDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgTWVtdWF0IGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgUGFzdGlrYW4gZGF0YXNldCBtZW1pbGlraSBrb2xvbSB5YW5nIGRpcGVybHVrYW4NCmlmICghIlBlbmdlbHVhcmFuLi5ScC4iICVpbiUgY29sbmFtZXMoZGF0YSkpIHsNCiAgc3RvcCgiRXJyb3I6IEtvbG9tICdQZW5nZWx1YXJhbiAoUnApJyB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YXNldC4gUGFzdGlrYW4gbmFtYSBrb2xvbSBzZXN1YWkgZGVuZ2FuIENTVi4iKQ0KfQ0KDQojIE1lbmVudHVrYW4ga3JpdGVyaWEganVkZ21lbnRhbCBzYW1wbGluZw0KcGVuZ2VsdWFyYW5fbWluIDwtIDE1MDAwMDAgICMgUGVuZ2VsdWFyYW4gbWluaW11bSB5YW5nIGRpYW5nZ2FwIHN0YWJpbA0KcGVuZ2VsdWFyYW5fbWF4IDwtIDI1MDAwMDAgICMgUGVuZ2VsdWFyYW4gbWFrc2ltdW0geWFuZyBkaWFuZ2dhcCBzdGFiaWwNCg0KIyBNZW1pbGloIG1haGFzaXN3YSBkZW5nYW4gcGVuZ2VsdWFyYW4gZGFsYW0gcmVudGFuZyB5YW5nIHRlbGFoIGRpdGVudHVrYW4NCnNhbXBlbF9wdXJwb3NpdmUgPC0gZGF0YSAlPiUNCiAgZmlsdGVyKFBlbmdlbHVhcmFuLi5ScC4gPj0gcGVuZ2VsdWFyYW5fbWluICYgUGVuZ2VsdWFyYW4uLlJwLiA8PSBwZW5nZWx1YXJhbl9tYXgpDQoNCiMgTWVueWltcGFuIGhhc2lsIGtlIGZpbGUgQ1NWIGJhcnUNCndyaXRlLmNzdihzYW1wZWxfcHVycG9zaXZlLCAic2FtcGxlZF9wdXJwb3NpdmUuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpDQoNCiMgTWVuYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgaGFzaWwgc2FtcGVsDQpoZWFkKHNhbXBlbF9wdXJwb3NpdmUpDQpgYGANCg0KIyMjICoqU25vd2JhbGwgU2FtcGxpbmcqKg0KU25vd2JhbGwgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW5nYW1iaWxhbiBzYW1wZWwgbm9uIHByb2JhYmlsaXRhcyB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1wZWxhamFyaSBwb3B1bGFzaSB5YW5nIHN1bGl0IGRpamFuZ2thdSBhdGF1IHRlcnNlbWJ1bnlhLiBEaW11bGFpIGRlbmdhbiBtZW1pbGloIGJlYmVyYXBhIG1haGFzaXN3YSB5YW5nIGtlbXVkaWFuIG1lcmVrYSBtZXJla29tZW5kYXNpa2FuIG1haGFzaXN3YSBsYWluLg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbXVhdCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIFBhc3Rpa2FuIGRhdGFzZXQgbWVtaWxpa2kga29sb20geWFuZyBkaXBlcmx1a2FuDQppZiAoISJJRCIgJWluJSBjb2xuYW1lcyhkYXRhKSkgew0KICBzdG9wKCJFcnJvcjogS29sb20gJ0lEJyB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YXNldC4gUGFzdGlrYW4gbmFtYSBrb2xvbSBzZXN1YWkgZGVuZ2FuIENTVi4iKQ0KfQ0KDQojIE1lbmVudHVrYW4ganVtbGFoIHNhbXBlbCB5YW5nIGRpaW5naW5rYW4NCmp1bWxhaF9zYW1wZWwgPC0gMTAwICANCg0KIyBNZW1pbGloIHNlanVtbGFoIGtlY2lsIHNpc3dhIGF3YWwgc2VjYXJhIGFjYWsNCnNldC5zZWVkKDEyMykgIA0Kc2VlZF9zaXplIDwtIDUgICMgSnVtbGFoIHNpc3dhIGF3YWwNCnNhbXBlbF9hd2FsIDwtIHNhbXBsZV9uKGRhdGEsIHNlZWRfc2l6ZSkNCg0KIyBJbmlzaWFsaXNhc2kgZGFmdGFyIGhhc2lsIHNhbXBlbA0Kc2FtcGVsX3Nub3diYWxsIDwtIHNhbXBlbF9hd2FsDQoNCiMgUHJvc2VzIHNub3diYWxsIHNhbXBsaW5nDQp3aGlsZSAobnJvdyhzYW1wZWxfc25vd2JhbGwpIDwganVtbGFoX3NhbXBlbCkgew0KICAjIFBpbGloIHNpc3dhIGJhcnUgeWFuZyBkaXJla29tZW5kYXNpa2FuIG9sZWggcGVzZXJ0YSBzZWJlbHVtbnlhDQogIHNpc3dhX2JhcnUgPC0gZGF0YSAlPiUNCiAgICBmaWx0ZXIoIUlEICVpbiUgc2FtcGVsX3Nub3diYWxsJElEKSAlPiUgICMgSGluZGFyaSBkdXBsaWthc2kNCiAgICBzYW1wbGVfbihtaW4oNSwgbnJvdyguKSkpICAjIFNldGlhcCBwZXNlcnRhIG1lcmVrb21lbmRhc2lrYW4gNSBvcmFuZw0KDQogICMgVGFtYmFoa2FuIHNpc3dhIGJhcnUga2Ugc2FtcGVsDQogIHNhbXBlbF9zbm93YmFsbCA8LSBiaW5kX3Jvd3Moc2FtcGVsX3Nub3diYWxsLCBzaXN3YV9iYXJ1KQ0KDQogICMgSmlrYSBqdW1sYWggc2FtcGVsIHN1ZGFoIGN1a3VwLCBoZW50aWthbiBwcm9zZXMNCiAgaWYgKG5yb3coc2FtcGVsX3Nub3diYWxsKSA+PSBqdW1sYWhfc2FtcGVsKSB7DQogICAgYnJlYWsNCiAgfQ0KfQ0KDQojIFNpbXBhbiBoYXNpbCBrZSBmaWxlIENTViBiYXJ1DQp3cml0ZS5jc3Yoc2FtcGVsX3Nub3diYWxsLCAic2FtcGxlZF9zbm93YmFsbC5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkNCg0KIyBUYW1waWxrYW4gYmViZXJhcGEgYmFyaXMgaGFzaWwgc2FtcGVsDQpoZWFkKHNhbXBlbF9zbm93YmFsbCkNCmBgYA0KDQojICoqUGVyaGl0dW5nYW4gTW9FIHVudHVrIFBlbmdhbWJpbGFuIFNhbXBlbCBQcm9iYWJpbGl0YXMqKg0KTWFyZ2luIG9mIEVycm9yIChNb0UpIGFkYWxhaCBrb25zZXAgc3RhdGlzdGlrIHlhbmcgbWVuZ3VrdXIga2V0aWRhayBwYXN0aWFuIGRhbGFtIGhhc2lsIHN1cnZlaSBhdGF1IGVzdGltYXNpIGJlcmJhc2lzIHNhbXBlbC4gS29uc2VwIGluaSBtZW1iZXJpa2FuIHJlbnRhbmcgZGkgbWFuYSBwYXJhbWV0ZXIgcG9wdWxhc2kgc2ViZW5hcm55YSBjZW5kZXJ1bmcgbWVudXJ1bi4NCg0KKipTZWNhcmEgdW11bSwgTW9FIGRpaGl0dW5nIGRlbmdhbiBydW11czoqKg0KJCQNCk1vRSA9IFogXHRpbWVzIFxmcmFje1xzaWdtYX17XHNxcnR7bn19DQokJA0KRGltYW5hOg0KDQotICRaJCA9IDEuOTYgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKQ0KDQotICRuJCA9IDEwMCAoanVtbGFoIHNhbXBlbCkNCg0KLSAkXHNpZ21hJCA9IFNpbXBhbmdhbiBiYWt1IHNhbXBlbA0KDQoqKlNpbXBhbmdhbiBiYWt1ICgkXHNpZ21hJCkgZGloaXR1bmcgZGVuZ2FuIHJ1bXVzOioqDQokJA0KXHNpZ21hID0gXHNxcnR7XGZyYWN7XHN1bSAoWF9pIC0gXGJhcntYfSleMn17bi0xfX0NCiQkDQoNCkRpbWFuYToNCg0KLSAkWF9pJCA9IFBlbmdlbHVhcmFuIG1ha2FuYW4gbWFoYXNpc3dhIGtlLWkNCg0KLSAkXGJhcntYfSQgPSBSYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFrYW5hbiBtYWhhc2lzd2ENCg0KLSAkbiQgPSBVa3VyYW4gc2FtcGVsDQoNCiMjICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCnNldC5zZWVkKDQyKSAgIyBQYXN0aWthbiBoYXNpbCBrb25zaXN0ZW4NCnNyc19zYW1wbGUgPC0gZGF0YSAlPiUgc2FtcGxlX24oMTAwLCByZXBsYWNlID0gRkFMU0UpICAjIEFtYmlsIDEwMCBzYW1wZWwNCg0Kc3JzX3NkIDwtIHNkKHNyc19zYW1wbGUkUGVuZ2VsdWFyYW4uLlJwLikNCnByaW50KHBhc3RlKCJTaW1wYW5nYW4gQmFrdSAoU1JTKToiLCByb3VuZChzcnNfc2QsIDApKSkgICMgRGlidWxhdGthbg0KYGBgDQpEaWtldGFodWk6DQoNCi0gJFokID0gMS45NiAodW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUpDQoNCi0gJG4kID0gMTAwIChqdW1sYWggc2FtcGVsKQ0KDQotICRcc2lnbWEkID0gUnAgNTc0LjMxMg0KDQpNYWthOg0KDQokJA0KTW9FID0gMS45NiBcdGltZXMgXGZyYWN7NTc0LjMxMn17XHNxcnR7MTAwfX1cXA0KTW9FID0gMS45NiBcdGltZXMgXGZyYWN7NTc0LjMxMn17MTB9XFwNCk1vRSA9IDExMi41NjUsMlxcDQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvcg0KaGl0dW5nX21vZSA8LSBmdW5jdGlvbihkYXRhX3NhbXBsZSwgel9zY29yZSA9IDEuOTYpIHsNCiAgbiA8LSBucm93KGRhdGFfc2FtcGxlKSAgIyBVa3VyYW4gc2FtcGVsDQogIHNpZ21hIDwtIHNkKGRhdGFfc2FtcGxlJFBlbmdlbHVhcmFuLi5ScC4pICAjIFNpbXBhbmdhbiBiYWt1DQogIG1vZSA8LSB6X3Njb3JlICogKHNpZ21hIC8gc3FydChuKSkgICMgUnVtdXMgTW9FDQogIHJldHVybihtb2UpDQp9DQoNCiMgU2FtcGVsIEFjYWsgU2VkZXJoYW5hDQpzZXQuc2VlZCg0MikNCnNyc19zYW1wbGUgPC0gZGF0YSAlPiUgc2FtcGxlX24oMTAwKSAgIyBBbWJpbCAxMDAgc2FtcGVsIGFjYWsNCm1vZV9zcnMgPC0gaGl0dW5nX21vZShzcnNfc2FtcGxlKQ0KcHJpbnQocGFzdGUoIk1vRSBTUlM6Iiwgcm91bmQobW9lX3NycywgMikpKQ0KYGBgDQpIYXNpbCBpbmkgYmVyYXJ0aSBiYWh3YSBwZXJraXJhYW4gcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYXJpIHNhbXBlbCBTUlMgbWVtaWxpa2kga2VtdW5na2luYW4gc2VsaXNpaCBzZWtpdGFyIFJwIDExMi41NjUsMiBkYXJpIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGkgcG9wdWxhc2kgc2ViZW5hcm55YS4gRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlLCBraXRhIGJpc2EgbWVuZ2F0YWthbiBiYWh3YSBqaWthIHBlbmVsaXRpYW4gaW5pIGRpdWxhbmcgYmVya2FsaS1rYWxpIGRlbmdhbiBtZXRvZGUgeWFuZyBzYW1hLCByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgYWthbiBiZXJhZGEgZGFsYW0gcmVudGFuZyDCsSBScCAxMTIuNTY1LDIgZGFyaSBuaWxhaSBzZWJlbmFybnlhIHNlYmFueWFrIDk1JSBkYXJpIHdha3R1Lg0KDQpEZW5nYW4ga2F0YSBsYWluOg0KDQpKaWthIGhhc2lsIHBlbmVsaXRpYW4gbWVudW5qdWtrYW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgYWRhbGFoIFJwIDEuNTAwLjAwMCwgbWFrYSBraXRhIGJpc2EgeWFraW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBzZWx1cnVoIHBvcHVsYXNpIGtlbXVuZ2tpbmFuIGJlcmFkYSBkYWxhbSByZW50YW5nIGFudGFyYSBScCAxLjM4Ny40MzUgZGFuIFJwIDEuNjEyLjU2NS4gDQoNCiMjICoqU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcqKg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbWJhY2EgZGF0YSBkYXJpIGZpbGUgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJzYW1wbGVkX3N0cmF0aWZpZWRfZGF0YS5jc3YiKQ0KDQojIFBhc3Rpa2FuIGtvbG9tICJQZW5nZWx1YXJhbiAoUnApIiBhZGEgZGFuIGJlcnRpcGUgbnVtZXJpaw0KZGF0YSRQZW5nZWx1YXJhbi4uUnAuIDwtIGFzLm51bWVyaWMoZGF0YSRQZW5nZWx1YXJhbi4uUnAuKQ0KDQojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3Uga2VzZWx1cnVoYW4NCnNpbXBhbmdhbl9iYWt1X3RvdGFsIDwtIHNkKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLiwgbmEucm0gPSBUUlVFKQ0KDQojIE1lbmFtcGlsa2FuIGhhc2lsIHNpbXBhbmdhbiBiYWt1DQpwcmludChwYXN0ZSgiU2ltcGFuZ2FuIEJha3UgU3RyYXRhOiBScCIsIHJvdW5kKHNpbXBhbmdhbl9iYWt1X3RvdGFsLCAyKSkpDQpgYGANCkRpa2V0YWh1aToNCg0KLSAkWiQgPSAxLjk2ICh1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSkNCg0KLSAkbiQgPSAxMDAgKGp1bWxhaCBzYW1wZWwpDQoNCi0gJFxzaWdtYSQgPSBScCA1NzkuMjMzLDk3DQoNCk1ha2E6DQoNCiQkDQpNb0UgPSAxLjk2IFx0aW1lcyBcZnJhY3s1NzkuMjMzLDk3fXtcc3FydHsxMDB9fVxcDQpNb0UgPSAxLjk2IFx0aW1lcyBcZnJhY3s1NzkuMjMzLDk3fXsxMH1cXA0KTW9FID0gMTEzLjUyOSw4NlxcDQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3UgKM+DKQ0Kc2ltcGFuZ2FuX2Jha3UgPC0gc2QoZGF0YSRQZW5nZWx1YXJhbi4uUnAuLCBuYS5ybSA9IFRSVUUpDQoNCiMgTWVuZW50dWthbiB1a3VyYW4gc2FtcGVsIChuKQ0KbiA8LSAxMDANCg0KIyBNZW5lbnR1a2FuIFotc2NvcmUgdW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUgKDEsOTYpDQpaIDwtIDEuOTYNCg0KIyBNZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKQ0KTW9FIDwtIFogKiAoc2ltcGFuZ2FuX2Jha3UgLyBzcXJ0KG4pKQ0KDQojIE1lbmFtcGlsa2FuIGhhc2lsDQpwcmludChwYXN0ZSgiTWFyZ2luIG9mIEVycm9yIChNb0UpOiBScCIsIHJvdW5kKE1vRSwgMikpKQ0KYGBgDQpIYXNpbCBpbmkgYmVyYXJ0aSBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgbWV0b2RlIFN0cmF0aWZpZWQgUmFuZG9tIFNhbXBsaW5nIG1lbWlsaWtpIGtlbXVuZ2tpbmFuIHNlbGlzaWggc2VraXRhciBScCAxMTMuNTI5LDg2IGRhcmkgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBwb3B1bGFzaSBzZWJlbmFybnlhLiBEZW5nYW4gdGluZ2thdCBrZXBlcmNheWFhbiA5NSUsIGtpdGEgYmlzYSBtZW5nYXRha2FuIGJhaHdhIGppa2EgcGVuZWxpdGlhbiBpbmkgZGl1bGFuZyBiZXJrYWxpLWthbGkgZGVuZ2FuIG1ldG9kZSB5YW5nIHNhbWEsIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgeWFuZyBkaWhpdHVuZyBkYXJpIHNhbXBlbCBha2FuIGJlcmFkYSBkYWxhbSByZW50YW5nIMKxIFJwIDExMy41MjksODYgZGFyaSBuaWxhaSBzZWJlbmFybnlhIHNlYmFueWFrIDk1JSBkYXJpIHdha3R1Lg0KDQpEZW5nYW4ga2F0YSBsYWluOg0KDQpKaWthIGhhc2lsIHBlbmVsaXRpYW4gbWVudW5qdWtrYW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgYWRhbGFoIFJwIDEuNTAwLjAwMCwgbWFrYSBraXRhIGJpc2EgeWFraW4gYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBzZWx1cnVoIHBvcHVsYXNpIGtlbXVuZ2tpbmFuIGJlcmFkYSBkYWxhbSByZW50YW5nIGFudGFyYSBScCAxLjM4Ni40NzAsMTQgaGluZ2dhIFJwIDEuNjEzLjUyOSw4Ni4NCg0KIyMgKipTeXN0ZW1hdGljIFNhbXBsaW5nKioNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW1iYWNhIGRhdGEgZGFyaSBmaWxlIENTVg0KZGF0YSA8LSByZWFkLmNzdigic2FtcGxlZF9zeXN0ZW1hdGljX2RhdGEuY3N2IikNCg0KIyBQYXN0aWthbiBrb2xvbSAiUGVuZ2VsdWFyYW4gKFJwKSIgYWRhIGRhbiBiZXJ0aXBlIG51bWVyaWsNCmRhdGEkUGVuZ2VsdWFyYW4uLlJwLiA8LSBhcy5udW1lcmljKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLikNCg0KIyBNZW5naGl0dW5nIHNpbXBhbmdhbiBiYWt1IGtlc2VsdXJ1aGFuDQpzaW1wYW5nYW5fYmFrdV90b3RhbCA8LSBzZChkYXRhJFBlbmdlbHVhcmFuLi5ScC4sIG5hLnJtID0gVFJVRSkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBzaW1wYW5nYW4gYmFrdQ0KcHJpbnQocGFzdGUoIlNpbXBhbmdhbiBCYWt1IFN5c3RlbWF0aWM6IFJwIiwgcm91bmQoc2ltcGFuZ2FuX2Jha3VfdG90YWwsIDIpKSkNCmBgYA0KRGlrZXRhaHVpOg0KDQotICRaJCA9IDEuOTYgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKQ0KDQotICRuJCA9IDEwMCAoanVtbGFoIHNhbXBlbCkNCg0KLSAkXHNpZ21hJCA9IFJwIDU3OC4yNzYsMTQNCg0KTWFrYToNCg0KJCQNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU3OC4yNzYsMTR9e1xzcXJ0ezEwMH19XFwNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU3OC4yNzYsMTR9ezEwfVxcDQpNb0UgPSAxMTMuMzQyLDEyXFwNCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgTWFyZ2luIG9mIEVycm9yDQpoaXR1bmdfbW9lIDwtIGZ1bmN0aW9uKGRhdGFfc2FtcGxlLCB6X3Njb3JlID0gMS45Nikgew0KICBuIDwtIG5yb3coZGF0YV9zYW1wbGUpICAjIFVrdXJhbiBzYW1wZWwNCiAgc2lnbWEgPC0gc2QoZGF0YV9zYW1wbGUkUGVuZ2VsdWFyYW4uLlJwLikgICMgU2ltcGFuZ2FuIGJha3UNCiAgbW9lIDwtIHpfc2NvcmUgKiAoc2lnbWEgLyBzcXJ0KG4pKSAgIyBSdW11cyBNb0UNCiAgcmV0dXJuKG1vZSkNCn0NCg0KIyBTYW1wZWwgU2lzdGVtYXRpcyAoU2V0aWFwIGstdGggZWxlbWVuKQ0KayA8LSBucm93KGRhdGEpICUvJSAxMDAgICMgVGVudHVrYW4gaW50ZXJ2YWwNCnN5c19zYW1wbGUgPC0gZGF0YVtzZXEoMSwgbnJvdyhkYXRhKSwgYnkgPSBrKSwgXSAgIyBBbWJpbCBzZXRpYXAga2UtayBiYXJpcw0KbW9lX3N5cyA8LSBoaXR1bmdfbW9lKHN5c19zYW1wbGUpDQpwcmludChwYXN0ZSgiTW9FIFNhbXBlbCBTaXN0ZW1hdGlzOiIsIHJvdW5kKG1vZV9zeXMsIDIpKSkNCmBgYA0KSGFzaWwgaW5pIGJlcmFydGkgYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIG1ldG9kZSBTeXN0ZW1hdGljIFNhbXBsaW5nIG1lbWlsaWtpIGtlbXVuZ2tpbmFuIHNlbGlzaWggc2VraXRhciBScCAxMTMuMzQyLDEyIGRhcmkgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkaSBwb3B1bGFzaSBzZWJlbmFybnlhLkRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSwga2l0YSBiaXNhIG1lbmdhdGFrYW4gYmFod2EgamlrYSBwZW5lbGl0aWFuIGluaSBkaXVsYW5nIGJlcmthbGkta2FsaSBkZW5nYW4gbWV0b2RlIHlhbmcgc2FtYSwgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIGFrYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgwrEgUnAgMTEzLjM0MiwxMiBkYXJpIG5pbGFpIHNlYmVuYXJueWEgc2ViYW55YWsgOTUlIGRhcmkgd2FrdHUuDQoNCkRlbmdhbiBrYXRhIGxhaW46DQoNCkppa2EgaGFzaWwgcGVuZWxpdGlhbiBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRhbGFtIHNhbXBlbCBhZGFsYWggUnAgMS41MDAuMDAwLCBtYWthIGtpdGEgYmlzYSB5YWtpbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRpIHNlbHVydWggcG9wdWxhc2kga2VtdW5na2luYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgYW50YXJhIFJwIDEuMzg2LjY1Nyw4OCBoaW5nZ2EgUnAgMS42MTMuMzQyLDEyLg0KDQojIyAqKkNsdXN0ZXIgU2FtcGxpbmcqKg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIE1lbWJhY2EgZGF0YSBkYXJpIGZpbGUgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJzYW1wbGVkX2NsdXN0ZXJfZmFrdWx0YXMuY3N2IikNCg0KIyBQYXN0aWthbiBrb2xvbSAiUGVuZ2VsdWFyYW4gKFJwKSIgYWRhIGRhbiBiZXJ0aXBlIG51bWVyaWsNCmRhdGEkUGVuZ2VsdWFyYW4uLlJwLiA8LSBhcy5udW1lcmljKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLikNCg0KIyBNZW5naGl0dW5nIHNpbXBhbmdhbiBiYWt1IGtlc2VsdXJ1aGFuDQpzaW1wYW5nYW5fYmFrdV90b3RhbCA8LSBzZChkYXRhJFBlbmdlbHVhcmFuLi5ScC4sIG5hLnJtID0gVFJVRSkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBzaW1wYW5nYW4gYmFrdQ0KcHJpbnQocGFzdGUoIlNpbXBhbmdhbiBCYWt1IENsdXN0ZXI6IFJwIiwgcm91bmQoc2ltcGFuZ2FuX2Jha3VfdG90YWwsIDIpKSkNCmBgYA0KRGlrZXRhaHVpOg0KDQotICRaJCA9IDEuOTYgKHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKQ0KDQotICRuJCA9IDEwMCAoanVtbGFoIHNhbXBlbCkNCg0KLSAkXHNpZ21hJCA9IFJwIDU2NC42MDAsNjINCg0KTWFrYToNCg0KJCQNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU2NC42MDAsNjJ9e1xzcXJ0ezEwMH19XFwNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU2NC42MDAsNjJ9ezEwfVxcDQpNb0UgPSAxMTAuNjYxLDcyXFwNCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgUGFzdGlrYW4ga29sb20gIlBlbmdlbHVhcmFuIChScCkiIGFkYSBkYW4gYmVydGlwZSBudW1lcmlrDQpkYXRhJFBlbmdlbHVhcmFuLi5ScC4gPC0gYXMubnVtZXJpYyhkYXRhJFBlbmdlbHVhcmFuLi5ScC4pDQoNCiMgTWVuZ2hpdHVuZyBzaW1wYW5nYW4gYmFrdSBrZXNlbHVydWhhbiBkYXJpIHNhbXBlbCBrbGFzdGVyDQpzaW1wYW5nYW5fYmFrdV90b3RhbCA8LSBzZChkYXRhJFBlbmdlbHVhcmFuLi5ScC4sIG5hLnJtID0gVFJVRSkNCg0KIyBGdW5nc2kgdW50dWsgbWVuZ2hpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1vRSkNCmhpdHVuZ19tb2UgPC0gZnVuY3Rpb24oc2lnbWEsIG4sIHpfc2NvcmUgPSAxLjk2KSB7DQogIG1vZSA8LSB6X3Njb3JlICogKHNpZ21hIC8gc3FydChuKSkgICMgUnVtdXMgTW9FDQogIHJldHVybihtb2UpDQp9DQoNCiMgTWVuZW50dWthbiB1a3VyYW4gc2FtcGVsIChuKQ0KbiA8LSAxMDANCg0KIyBNZW5naGl0dW5nIE1vRSBiZXJkYXNhcmthbiBzaW1wYW5nYW4gYmFrdSB0b3RhbA0KbW9lX2NsdXN0ZXIgPC0gaGl0dW5nX21vZShzaW1wYW5nYW5fYmFrdV90b3RhbCwgbikNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBNYXJnaW4gb2YgRXJyb3INCnByaW50KHBhc3RlKCJNb0UgQ2x1c3RlciBTYW1wbGluZzogUnAiLCByb3VuZChtb2VfY2x1c3RlciwgMikpKQ0KYGBgDQpIYXNpbCBpbmkgYmVyYXJ0aSBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgbWV0b2RlIENsdXN0ZXIgU2FtcGxpbmcgbWVtaWxpa2kga2VtdW5na2luYW4gc2VsaXNpaCBzZWtpdGFyIFJwIDExMC42NjEsNzIgZGFyaSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRpIHBvcHVsYXNpIHNlYmVuYXJueWEuIERlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSwga2l0YSBiaXNhIG1lbmdhdGFrYW4gYmFod2EgamlrYSBwZW5lbGl0aWFuIGluaSBkaXVsYW5nIGJlcmthbGkta2FsaSBkZW5nYW4gbWV0b2RlIHlhbmcgc2FtYSwgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIGFrYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgwrEgUnAgMTEwLjY2MSw3MiBkYXJpIG5pbGFpIHNlYmVuYXJueWEgc2ViYW55YWsgOTUlIGRhcmkgd2FrdHUuDQoNCkRlbmdhbiBrYXRhIGxhaW46DQoNCkppa2EgaGFzaWwgcGVuZWxpdGlhbiBtZW51bmp1a2thbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRhbGFtIHNhbXBlbCBhZGFsYWggUnAgMS41MDAuMDAwLCBtYWthIGtpdGEgYmlzYSB5YWtpbiBiYWh3YSByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIGRpIHNlbHVydWggcG9wdWxhc2kga2VtdW5na2luYW4gYmVyYWRhIGRhbGFtIHJlbnRhbmcgYW50YXJhIFJwIDEuMzg5LjMzOCwyOCBoaW5nZ2EgUnAgMS42MTAuNjYxLDcyLg0KDQojIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBNZW1iYWNhIGRhdGEgZGFyaSBmaWxlIENTVg0KZGF0YSA8LSByZWFkLmNzdigic2FtcGxlZF9tdWx0aXN0YWdlLmNzdiIpDQoNCiMgUGFzdGlrYW4ga29sb20gIlBlbmdlbHVhcmFuIChScCkiIGFkYSBkYW4gYmVydGlwZSBudW1lcmlrDQpkYXRhJFBlbmdlbHVhcmFuLi5ScC4gPC0gYXMubnVtZXJpYyhkYXRhJFBlbmdlbHVhcmFuLi5ScC4pDQoNCiMgTWVuZ2hpdHVuZyBzaW1wYW5nYW4gYmFrdSBrZXNlbHVydWhhbg0Kc2ltcGFuZ2FuX2Jha3VfdG90YWwgPC0gc2QoZGF0YSRQZW5nZWx1YXJhbi4uUnAuLCBuYS5ybSA9IFRSVUUpDQoNCiMgTWVuYW1waWxrYW4gaGFzaWwgc2ltcGFuZ2FuIGJha3UNCnByaW50KHBhc3RlKCJTaW1wYW5nYW4gQmFrdSBDbHVzdGVyOiBScCIsIHJvdW5kKHNpbXBhbmdhbl9iYWt1X3RvdGFsLCAyKSkpDQpgYGANCkRpa2V0YWh1aToNCg0KLSAkWiQgPSAxLjk2ICh1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JSkNCg0KLSAkbiQgPSAxMDAgKGp1bWxhaCBzYW1wZWwpDQoNCi0gJFxzaWdtYSQgPSBScCA1ODQuNjkwLDQNCg0KTWFrYToNCg0KJCQNCk1vRSA9IDEuOTYgXHRpbWVzIFxmcmFjezU4NC42OTAsNH17XHNxcnR7MTAwfX1cXA0KTW9FID0gMS45NiBcdGltZXMgXGZyYWN7NTg0LjY5MCw0fXsxMH1cXA0KTW9FID0gMTE0LjU5OSwzMlxcDQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIFBhc3Rpa2FuIGtvbG9tICJQZW5nZWx1YXJhbiAoUnApIiBhZGEgZGFuIGJlcnRpcGUgbnVtZXJpaw0KZGF0YSRQZW5nZWx1YXJhbi4uUnAuIDwtIGFzLm51bWVyaWMoZGF0YSRQZW5nZWx1YXJhbi4uUnAuKQ0KDQojIE1lbmdoaXR1bmcgc2ltcGFuZ2FuIGJha3Uga2VzZWx1cnVoYW4gZGFyaSBzYW1wZWwgbXVsdGktdGFoYXANCnNpbXBhbmdhbl9iYWt1X3RvdGFsIDwtIHNkKGRhdGEkUGVuZ2VsdWFyYW4uLlJwLiwgbmEucm0gPSBUUlVFKQ0KDQojIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKQ0KaGl0dW5nX21vZSA8LSBmdW5jdGlvbihzaWdtYSwgbiwgel9zY29yZSA9IDEuOTYpIHsNCiAgbW9lIDwtIHpfc2NvcmUgKiAoc2lnbWEgLyBzcXJ0KG4pKSAgIyBSdW11cyBNb0UNCiAgcmV0dXJuKG1vZSkNCn0NCg0KIyBNZW5lbnR1a2FuIHVrdXJhbiBzYW1wZWwgKG4pDQpuIDwtIDEwMA0KDQojIE1lbmdoaXR1bmcgTW9FIGJlcmRhc2Fya2FuIHNpbXBhbmdhbiBiYWt1IHRvdGFsDQptb2VfbXVsdGlfc3RhZ2UgPC0gaGl0dW5nX21vZShzaW1wYW5nYW5fYmFrdV90b3RhbCwgbikNCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0KcHJpbnQocGFzdGUoIk1vRSBNdWx0aSBTdGFnZTogUnAiLCByb3VuZChtb2VfbXVsdGlfc3RhZ2UsIDIpKSkNCmBgYA0KSGFzaWwgaW5pIGJlcmFydGkgYmFod2EgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSB5YW5nIGRpaGl0dW5nIGRhcmkgc2FtcGVsIG1ldG9kZSBNdWx0aS1TdGFnZSBTYW1wbGluZyBtZW1pbGlraSBrZW11bmdraW5hbiBzZWxpc2loIHNla2l0YXIgUnAgMTE0LjU5OSwzMiBkYXJpIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGkgcG9wdWxhc2kgc2ViZW5hcm55YS4gRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlLCBraXRhIGJpc2EgbWVuZ2F0YWthbiBiYWh3YSBqaWthIHBlbmVsaXRpYW4gaW5pIGRpdWxhbmcgYmVya2FsaS1rYWxpIGRlbmdhbiBtZXRvZGUgeWFuZyBzYW1hLCByYXRhLXJhdGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgYWthbiBiZXJhZGEgZGFsYW0gcmVudGFuZyDCsSBScCAxMTQuNTk5LDMyIGRhcmkgbmlsYWkgc2ViZW5hcm55YSBzZWJhbnlhayA5NSUgZGFyaSB3YWt0dS4NCg0KRGVuZ2FuIGthdGEgbGFpbjoNCg0KSmlrYSBoYXNpbCBwZW5lbGl0aWFuIG1lbnVuanVra2FuIGJhaHdhIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGFsYW0gc2FtcGVsIGFkYWxhaCBScCAxLjUwMC4wMDAsIG1ha2Ega2l0YSBiaXNhIHlha2luIGJhaHdhIHJhdGEtcmF0YSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGkgc2VsdXJ1aCBwb3B1bGFzaSBrZW11bmdraW5hbiBiZXJhZGEgZGFsYW0gcmVudGFuZyBhbnRhcmEgUnAgMS4zODUuNDAwLDY4IGhpbmdnYSBScCAxLjYxNC41OTksMzIuDQoNCiMgKipBbmFsaXNpcyBCaWFzIGRhbGFtIFBlbmdhbWJpbGFuIFNhbXBlbCBOb24tUHJvYmFiaWxpdGFzKioNCg0KIyMgQ29udmVuaWVuY2UgU2FtcGxpbmcNCg0KKipTdW1iZXIgQmlhczoqKg0KDQpKaWthIGhhbnlhIG1haGFzaXN3YSB5YW5nIGJlcmFkYSBkaSBzYXR1IGthbnRpbiB1bml2ZXJzaXRhcyBkaXdhd2FuY2FyYWksIG1ha2Egc2FtcGVsIGluaSB0aWRhayBtZW5jZXJtaW5rYW4gbWFoYXNpc3dhIHlhbmcgbGViaWggc2VyaW5nIG1lbWFzYWsgZGkgcnVtYWggYXRhdSBtYWthbiBkaSB0ZW1wYXQgbGFpbi4NCg0KKipEYW1wYWs6KioNCg0KLSBIYXNpbCBzdXJ2ZWkga2VtdW5na2luYW4gYmVzYXIgdGlkYWsgZGFwYXQgZGlnZW5lcmFsaXNhc2kga2Ugc2VsdXJ1aCBwb3B1bGFzaSBtYWhhc2lzd2EuDQoNCi0gRGF0YSB5YW5nIGRpa3VtcHVsa2FuIG11bmdraW4gbGViaWggbWVuZ2dhbWJhcmthbiBrZWJpYXNhYW4ga29uc3Vtc2kgbWFoYXNpc3dhIHRlcnRlbnR1IGRhcmlwYWRhIHBvcHVsYXNpIHlhbmcgbGViaWggbHVhcy4NCg0KKipQZXJiZWRhYW4gZGVuZ2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nOioqDQoNCkRhbGFtIFByb2JhYmlsaXR5IFNhbXBsaW5nLCBzZXRpYXAgaW5kaXZpZHUgZGFsYW0gcG9wdWxhc2kgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEgdW50dWsgdGVycGlsaWgsIHNlaGluZ2dhIGJpYXMgYWtpYmF0IHBlbWlsaWhhbiBiZXJkYXNhcmthbiBrZW55YW1hbmFuIGRhcGF0IGRpaGluZGFyaS4NCg0KIyMgSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZw0KDQoqKlN1bWJlciBCaWFzOioqDQoNCkppa2EgaGFueWEgbWFoYXNpc3dhIGVrb25vbWkgeWFuZyBkaXdhd2FuY2FyYWkgZGFsYW0gc3R1ZGkgcGVuZ2VsdWFyYW4gbWFrYW5hbiBrYXJlbmEgZGlhbmdnYXAgbGViaWggcGFoYW0gdGVudGFuZyBrZXVhbmdhbiwgaGFzaWxueWEgYmlzYSBiaWFzIGthcmVuYSBtYWhhc2lzd2EgZGFyaSBqdXJ1c2FuIGxhaW4gbXVuZ2tpbiBtZW1pbGlraSBwb2xhIHBlbmdlbHVhcmFuIHlhbmcgYmVyYmVkYS4NCg0KKipEYW1wYWs6KioNCg0KLSBQZW5lbGl0aWFuIG11bmdraW4gaGFueWEgbWVuY2VybWlua2FuIGthcmFrdGVyaXN0aWsga2Vsb21wb2sgdGVydGVudHUgZGFuIHRpZGFrIG1lbmNlcm1pbmthbiBwb3B1bGFzaSBtYWhhc2lzd2Egc2VjYXJhIGtlc2VsdXJ1aGFuLg0KDQotIEdlbmVyYWxpc2FzaSBtZW5qYWRpIHRlcmJhdGFzIGthcmVuYSBwZW1pbGloYW4gc3ViamVrIHlhbmcgc3VkYWggZGlwZW5nYXJ1aGkgb2xlaCBzdWJqZWt0aXZpdGFzIHBlbmVsaXRpLg0KDQoqKlBlcmJlZGFhbiBkZW5nYW4gUHJvYmFiaWxpdHkgU2FtcGxpbmc6KioNCg0KUHJvYmFiaWxpdHkgU2FtcGxpbmcgbWVuZ2d1bmFrYW4gbWV0b2RlIGFjYWssIHlhbmcgbWVuZ2hpbmRhcmkgcGVuZ2FydWggc3ViamVrdGl2aXRhcyBwZW5lbGl0aSBkYWxhbSBwZW1pbGloYW4gc2FtcGVsLg0KDQojIyBRdW90YSBTYW1wbGluZw0KDQoqKlN1bWJlciBCaWFzOioqDQoNCkRhbGFtIHN1cnZlaSBwZW5nZWx1YXJhbiBtYWthbmFuLCBrdW90YSBkaWJ1YXQgYmVyZGFzYXJrYW4gZ2VuZGVyIChtaXNhbG55YSA1MCUgbGFraS1sYWtpLCA1MCUgcGVyZW1wdWFuKSwgdGV0YXBpIHJlc3BvbmRlbiBkaXBpbGloIGJlcmRhc2Fya2FuIHNpYXBhIHlhbmcgdGVyc2VkaWEgdGVybGViaWggZGFodWx1Lg0KDQoqKkRhbXBhazoqKg0KDQotIE1lc2tpcHVuIHRlcmxpaGF0IHNlaW1iYW5nIGRhbGFtIHByb3BvcnNpLCBpbmRpdmlkdSBkYWxhbSBzZXRpYXAga2F0ZWdvcmkgbXVuZ2tpbiB0aWRhayBtZXdha2lsaSBrZXNlbHVydWhhbiBwb3B1bGFzaSBkYXJpIGthdGVnb3JpIHRlcnNlYnV0Lg0KDQotIEJpc2EgYWRhIGJpYXMgZGFyaSBrZWxvbXBvayB5YW5nIGxlYmloIG11ZGFoIGRpamFuZ2thdSwgc2VtZW50YXJhIGtlbG9tcG9rIHlhbmcgc3VsaXQgZGlha3NlcyBrdXJhbmcgdGVyd2FraWxpLg0KDQoqKlBlcmJlZGFhbiBkZW5nYW4gUHJvYmFiaWxpdHkgU2FtcGxpbmc6KioNCg0KU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcgZGFsYW0gUHJvYmFiaWxpdHkgU2FtcGxpbmcgbGViaWggdW5nZ3VsIGthcmVuYSBwZW1pbGloYW4gc2FtcGVsIGRhbGFtIHNldGlhcCBzdHJhdGEgdGV0YXAgZGlsYWt1a2FuIHNlY2FyYSBhY2FrLCBidWthbiBiZXJkYXNhcmthbiBrZW11ZGFoYW4gYWtzZXMuDQoNCiMjIFNub3diYWxsIFNhbXBsaW5nDQoNCioqU3VtYmVyIEJpYXM6KioNCg0KSmlrYSBzZW9yYW5nIG1haGFzaXN3YSBkaXJla3J1dCB1bnR1ayB3YXdhbmNhcmEgZGFuIGtlbXVkaWFuIG1lcmVrb21lbmRhc2lrYW4gdGVtYW4tdGVtYW5ueWEgdW50dWsgaWt1dCBzZXJ0YSwgbWFrYSBrZW11bmdraW5hbiBiZXNhciBzZW11YSBwZXNlcnRhIHN1cnZlaSBiZXJhc2FsIGRhcmkga2Vsb21wb2sgcGVydGVtYW5hbiB5YW5nIHNlcnVwYSBkYWxhbSBnYXlhIGhpZHVwIGRhbiBwZW5nZWx1YXJhbi4NCg0KKipEYW1wYWs6KioNCg0KLSBIYXNpbCBzdXJ2ZWkgdGlkYWsgbWV3YWtpbGkgcG9wdWxhc2kgbWFoYXNpc3dhIHNlY2FyYSBrZXNlbHVydWhhbiBrYXJlbmEgaGFueWEgbWVsaWJhdGthbiBrZWxvbXBvayB5YW5nIHNhbGluZyB0ZXJodWJ1bmcuDQoNCi0gVmFyaWFzaSBkYWxhbSBkYXRhIG1lbmphZGkgbGViaWgga2VjaWwgZGFyaSB5YW5nIHNlaGFydXNueWEga2FyZW5hIGhhbnlhIG1lbmNlcm1pbmthbiBrZWxvbXBvayB0ZXJ0ZW50dS4NCg0KKipQZXJiZWRhYW4gZGVuZ2FuIFByb2JhYmlsaXR5IFNhbXBsaW5nOioqDQoNCkRhbGFtIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcsIHBlbWlsaWhhbiBkaWxha3VrYW4gdGFucGEgYmVyZ2FudHVuZyBwYWRhIGphcmluZ2FuIHNvc2lhbCwgc2VoaW5nZ2EgZGlzdHJpYnVzaSBzYW1wZWwgbGViaWggYmVyYWdhbSBkYW4gcmVwcmVzZW50YXRpZi4NCg0KIyMgUGVyYmFuZGluZ2FuIEJpYXMgZGFsYW0gTm9uLVByb2JhYmlsaXR5IGRlbmdhbiBQcm9iYWJpbGl0eSBTYW1wbGluZw0KDQp8ICoqQXNwZWsqKiAgICAgICAgICAgICAgICB8ICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKiogfCAqKlByb2JhYmlsaXR5IFNhbXBsaW5nKiogfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqUGVsdWFuZyBUZXJwaWxpaCoqICAgICAgfCBUaWRhayBzZW11YSBpbmRpdmlkdSBtZW1pbGlraSBwZWx1YW5nIHlhbmcgc2FtYSB8IFNlbXVhIGluZGl2aWR1IG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBkaWtldGFodWkgdW50dWsgZGlwaWxpaCB8DQp8ICoqQmlhcyBkYWxhbSBQZW1pbGloYW4qKiAgfCBUaW5nZ2ksIHRlcmdhbnR1bmcgYWtzZXNpYmlsaXRhcyBkYW4gc3ViamVrdGl2aXRhcyB8IFJlbmRhaCwga2FyZW5hIHBlbWlsaWhhbiBkaWxha3VrYW4gc2VjYXJhIGFjYWsgfA0KfCAqKlJlcHJlc2VudGF0aWYgYXRhdSBUaWRhayoqIHwgS3VyYW5nIHJlcHJlc2VudGF0aWYgfCBMZWJpaCByZXByZXNlbnRhdGlmIHwNCnwgKipCaWFzIHlhbmcgU2VyaW5nIE11bmN1bCoqIHwgU2VsZWN0aW9uIEJpYXMsIFJlc2VhcmNoZXIgQmlhcywgTmV0d29yayBCaWFzIHwgTWluaW1hbCwga2FyZW5hIGRpc3RyaWJ1c2kgYWNhayBtZW1hc3Rpa2FuIGtlcmFnYW1hbiBzYW1wZWwgfA0KfCAqKkdlbmVyYWxpemFiaWxpdHkqKiAgICAgfCBSZW5kYWgsIHN1bGl0IGRpZ2VuZXJhbGlzYXNpIGtlIHBvcHVsYXNpIHwgVGluZ2dpLCBoYXNpbCBkYXBhdCBkaWdlbmVyYWxpc2FzaSBrZSBzZWx1cnVoIHBvcHVsYXNpIHwNCnwgKipNYXJnaW4gb2YgRXJyb3IgKE1vRSkqKiB8IFRpZGFrIGRhcGF0IGRpaGl0dW5nIGRlbmdhbiBha3VyYXQgfCBEYXBhdCBkaWhpdHVuZyBkYW4gZGlrb250cm9sIGRlbmdhbiBiYWlrIHwNCg0KTWV0b2RlIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZyBtZW1pbGlraSBrZXRlcmJhdGFzYW4gZGFsYW0gbWVuYW5nYW5pIGJpYXMsIHlhbmcgZGFwYXQgbWVueWViYWJrYW4gaGFzaWwgc3VydmVpIGt1cmFuZyBha3VyYXQgZGFuIGt1cmFuZyBkYXBhdCBkaWdlbmVyYWxpc2FzaSBrZSBwb3B1bGFzaSB5YW5nIGxlYmloIGx1YXMuIEJpYXMgZGFsYW0gbWV0b2RlIGluaSBtdW5jdWwgZGFyaSBwZW1pbGloYW4gc2FtcGVsIHlhbmcgdGlkYWsgYWNhaywgYWtzZXNpYmlsaXRhcyB0ZXJiYXRhcywgZGFuIHN1Ympla3Rpdml0YXMgZGFsYW0gcGVuZW50dWFuIHNhbXBlbC4gQWtpYmF0bnlhLCBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgc3VsaXQgZGlrb250cm9sIGRhbiBoYXNpbCBzdXJ2ZWkgYmlzYSBtZW5qYWRpIHRpZGFrIHJlcHJlc2VudGF0aWYuDQoNClNlYmFsaWtueWEsIFByb2JhYmlsaXR5IFNhbXBsaW5nIGxlYmloIHVuZ2d1bCBkYWxhbSBtZW5ndXJhbmdpIGJpYXMga2FyZW5hIG1lbmdndW5ha2FuIG1ldG9kZSBwZW1pbGloYW4gYWNhayB5YW5nIG1lbWJlcmlrYW4gcGVsdWFuZyB5YW5nIHNhbWEgYmFnaSBzZXRpYXAgaW5kaXZpZHUgZGFsYW0gcG9wdWxhc2kgdW50dWsgdGVycGlsaWguIERlbmdhbiBkZW1pa2lhbiwgaGFzaWxueWEgbGViaWggcmVwcmVzZW50YXRpZiwgTWFyZ2luIG9mIEVycm9yIGxlYmloIGtlY2lsIGRhbiBkYXBhdCBkaWhpdHVuZyBkZW5nYW4gYWt1cmF0LCBzZXJ0YSBnZW5lcmFsaXNhc2kgaGFzaWwgbGViaWgga3VhdCBkaWJhbmRpbmdrYW4gZGVuZ2FuIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZy4NCg0KIyAqKlBlcmJhbmRpbmdhbiBTZW11YSBNZXRvZGUqKg0KDQojIyAqKlBlcmJhbmRpbmdhbiBNZXRvZGUgUHJvYmFiaWxpdHkgU2FtcGxpbmcqKg0KDQpEYWxhbSBwZW5lbGl0aWFuIGluaSwgYmViZXJhcGEgbWV0b2RlIHNhbXBsaW5nIGRpZ3VuYWthbiB1bnR1ayBtZW1haGFtaSB2YXJpYXNpIHBlbmdlbHVhcmFuIG1haGFzaXN3YS4gVW50dWsgbWVuaWxhaSBha3VyYXNpIHNldGlhcCBtZXRvZGUsIGtpdGEgbWVtYmFuZGluZ2thbiBzaW1wYW5nYW4gYmFrdSAoXChcc2lnbWFcKSkgZGFuIE1hcmdpbiBvZiBFcnJvciAoTW9FKS4gTWFyZ2luIG9mIEVycm9yIG1lbnVuanVra2FuIHNlYmVyYXBhIGphdWggaGFzaWwgc2FtcGVsIGRhcGF0IG1lbnlpbXBhbmcgZGFyaSBwb3B1bGFzaSBzZWJlbmFybnlhIGRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JS4gIA0KDQp8ICoqTWV0b2RlIFNhbXBsaW5nKiogICAgICAgICAgIHwgKipTaW1wYW5nYW4gQmFrdSAoXChcc2lnbWFcKSkqKiB8ICoqTW9FIChScCkqKiB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwNCnwgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKiogIHwgUnAgNTc0LjMxMiwwMCAgfCBScCAxMTIuNTY1LDIwIHwNCnwgKipTdHJhdGlmaWVkIFNhbXBsaW5nKiogICAgICAgIHwgUnAgNTc5LjIzMyw5NyAgfCBScCAxMTMuNTI5LDg2IHwNCnwgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogICAgICAgIHwgUnAgNTc4LjI3NiwxNCAgfCBScCAxMTMuMzQyLDEyIHwNCnwgKipDbHVzdGVyIFNhbXBsaW5nKiogICAgICAgICAgIHwgUnAgNTY0LjYwMCw2MiAgfCBScCAxMTAuNjYxLDcyIHwNCnwgKipNdWx0aS1TdGFnZSBTYW1wbGluZyoqICAgICAgIHwgUnAgNTg0LjY5MCw0MCAgfCBScCAxMTQuNTk5LDMyIHwNCg0KDQojIyMgKipBbmFsaXNpcyBkYW4gUGVuamVsYXNhbiBTZXRpYXAgTWV0b2RlIFByb2JhYmlsaXR5IFNhbXBsaW5nKiogIA0KDQoqKjEuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykqKg0KDQotICoqS29uc2VwOioqICANCg0KICBEYWxhbSBtZXRvZGUgaW5pLCAxMDAgbWFoYXNpc3dhIGRpcGlsaWggc2VjYXJhIGFjYWsgdGFucGEgbWVtcGVydGltYmFuZ2thbiBmYWt1bHRhcyBhdGF1IGZha3RvciBsYWluLiAgDQoNCi0gKipIYXNpbDoqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdTogUnAgNTc0LjMxMiwwMCAgDQoNCiAgLSBNb0U6IFJwIDExMi41NjUsMjAgIA0KDQotICoqSW50ZXJwcmV0YXNpOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1IG1lbnVuanVra2FuIGJhaHdhIHBlbmdlbHVhcmFuIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgbWVtaWxpa2kgdmFyaWFzaSB5YW5nIGN1a3VwIGJlc2FyLiAgDQoNCiAgLSBNb0UgUnAgMTEyLjU2NSwyMCBiZXJhcnRpIGppa2Ega2l0YSBtZWxha3VrYW4gc3VydmVpIHVsYW5nIGRlbmdhbiBtZXRvZGUgeWFuZyBzYW1hLCBzZWxpc2loIGhhc2lsIGRlbmdhbiBwb3B1bGFzaSBzZWJlbmFybnlhIG1hc2loIGRhbGFtIGtpc2FyYW4gdGVyc2VidXQuICANCg0KLSAqKktldW5nZ3VsYW46KiogIA0KDQogIC0gU2VkZXJoYW5hIGRhbiBtdWRhaCBkaXRlcmFwa2FuLiAgDQoNCiAgLSBKaWthIGRpbGFrdWthbiBkZW5nYW4gYmVuYXIsIG1lbWJlcmlrYW4gZXN0aW1hc2kgeWFuZyB0aWRhayBiaWFzIHRlcmhhZGFwIHBvcHVsYXNpLiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gVGlkYWsgbWVtcGVydGltYmFuZ2thbiB2YXJpYXNpIGFudGFyIGtlbG9tcG9rIChtaXNhbG55YSwgcGVyYmVkYWFuIGFudGFyYSBmYWt1bHRhcykuICANCg0KICAtIEJpc2EgbWVuZ2hhc2lsa2FuIHNhbXBlbCB5YW5nIGt1cmFuZyByZXByZXNlbnRhdGlmIGppa2EgZGlzdHJpYnVzaSBwb3B1bGFzaSB0aWRhayBtZXJhdGEuICANCg0KKioyLiBTdHJhdGlmaWVkIFNhbXBsaW5nKiogIA0KDQotICoqS29uc2VwOioqICANCg0KICBEYWxhbSBtZXRvZGUgaW5pLCBtYWhhc2lzd2EgZGlrZWxvbXBva2thbiBiZXJkYXNhcmthbiBmYWt1bHRhcyAoc3RyYXRhKSwga2VtdWRpYW4gZGlwaWxpaCBzZWNhcmEgcHJvcG9yc2lvbmFsIGRhcmkgc2V0aWFwIGtlbG9tcG9rIHVudHVrIG1lbWFzdGlrYW4gcmVwcmVzZW50YXNpIHlhbmcgbGViaWggYmFpay4gIA0KDQotICoqSGFzaWw6KiogIA0KDQogIC0gU2ltcGFuZ2FuIGJha3U6IFJwIDU3OS4yMzMsOTcgIA0KDQogIC0gTW9FOiBScCAxMTMuNTI5LDg2ICANCg0KLSAqKkludGVycHJldGFzaToqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdSBzZWRpa2l0IGxlYmloIHRpbmdnaSBkaWJhbmRpbmdrYW4gU1JTLCB5YW5nIGJlcmFydGkgdGVyZGFwYXQgdmFyaWFzaSB5YW5nIGxlYmloIGJlc2FyIGRhbGFtIGRhdGEgeWFuZyBkaWt1bXB1bGthbi4gIA0KDQogIC0gTW9FIHNlZGlraXQgbGViaWggYmVzYXIgZGFyaSBTUlMsIHRldGFwaSBtZXRvZGUgaW5pIGxlYmloIHJlcHJlc2VudGF0aWYga2FyZW5hIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFzaSBhbnRhciBmYWt1bHRhcy4gIA0KDQotICoqS2V1bmdndWxhbjoqKiAgDQoNCiAgLSBMZWJpaCBha3VyYXQgZGFyaXBhZGEgU1JTIGppa2EgcG9wdWxhc2kgc2FuZ2F0IGhldGVyb2dlbi4gIA0KDQogIC0gTWVtYXN0aWthbiBiYWh3YSBzZXRpYXAgZmFrdWx0YXMgbWVtaWxpa2kgcmVwcmVzZW50YXNpIHlhbmcgbWVtYWRhaSBkYWxhbSBzYW1wZWwuICANCg0KLSAqKktlbGVtYWhhbjoqKiAgDQoNCiAgLSBNZW1lcmx1a2FuIGluZm9ybWFzaSBhd2FsIHRlbnRhbmcgcG9wdWxhc2kgdW50dWsgbWVsYWt1a2FuIHN0cmF0aWZpa2FzaS4gIA0KDQogIC0gUHJvc2VzIHBlbWJhZ2lhbiBzdHJhdGEgYmlzYSBrb21wbGVrcyBqaWthIHRlcmRhcGF0IGJhbnlhayBrYXRlZ29yaS4gIA0KDQoqKjMuIFN5c3RlbWF0aWMgU2FtcGxpbmcqKiAgDQoNCi0gKipLb25zZXA6KiogIA0KDQogIERhbGFtIG1ldG9kZSBpbmksIG1haGFzaXN3YSBkaXBpbGloIGRlbmdhbiBwb2xhIHRlcnRlbnR1LCBtaXNhbG55YSBzZXRpYXAgbWFoYXNpc3dhIGtlLTEwIGRhcmkgZGFmdGFyIHlhbmcgdGVsYWggZGl1cnV0a2FuLiAgDQoNCi0gKipIYXNpbDoqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdTogUnAgNTc4LjI3NiwxNCAgDQoNCiAgLSBNb0U6IFJwIDExMy4zNDIsMTIgIA0KDQotICoqSW50ZXJwcmV0YXNpOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1IGhhbXBpciBzYW1hIGRlbmdhbiBTdHJhdGlmaWVkIFNhbXBsaW5nLiAgDQoNCiAgLSBNb0Ugc2VkaWtpdCBsZWJpaCBrZWNpbCBkYXJpIFN0cmF0aWZpZWQgU2FtcGxpbmcsIG1lbnVuanVra2FuIGJhaHdhIG1ldG9kZSBpbmkgY3VrdXAgYmFpayBkYWxhbSBtZW5hbmdrYXAgdmFyaWFzaSBkYWxhbSBwb3B1bGFzaS4gIA0KDQotICoqS2V1bmdndWxhbjoqKiAgDQoNCiAgLSBNdWRhaCBkaWxha3VrYW4gdGFucGEgcGVybHUgZGFmdGFyIGxlbmdrYXAgcG9wdWxhc2kgc2ViZWx1bSBwZW5nYW1iaWxhbiBzYW1wZWwuICANCg0KICAtIEVmZWt0aWYgZGFsYW0gc3VydmVpIGxhcGFuZ2FuIHlhbmcgbWVtYnV0dWhrYW4gZWZpc2llbnNpIHdha3R1LiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gSmlrYSBhZGEgcG9sYSB0ZXJzZW1idW55aSBkYWxhbSBkYXRhIChtaXNhbG55YSBkYWZ0YXIgdXJ1dCBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGlidWF0IGJlcmRhc2Fya2FuIHBvbGEgdGVydGVudHUpLCBoYXNpbG55YSBiaXNhIG1lbmphZGkgYmlhcy4gIA0KDQoqKjQuIENsdXN0ZXIgU2FtcGxpbmcqKiAgDQoNCi0gKipLb25zZXA6KiogIA0KDQogIERhbGFtIG1ldG9kZSBpbmksIGJlYmVyYXBhIGZha3VsdGFzIGRpcGlsaWggc2VjYXJhIGFjYWssIGxhbHUgc2VtdWEgbWFoYXNpc3dhIGRhbGFtIGZha3VsdGFzIHRlcnNlYnV0IGRpc3VydmVpLiAgDQoNCi0gKipIYXNpbDoqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdTogUnAgNTY0LjYwMCw2MiAocGFsaW5nIHJlbmRhaCBkaWJhbmRpbmcgbWV0b2RlIGxhaW4pLiAgDQoNCiAgLSBNb0U6IFJwIDExMC42NjEsNzIgKE1vRSB0ZXJrZWNpbCkuICANCg0KLSAqKkludGVycHJldGFzaToqKiAgDQoNCiAgLSBTaW1wYW5nYW4gYmFrdSB5YW5nIGxlYmloIHJlbmRhaCBtZW51bmp1a2thbiBiYWh3YSBkYXRhIGRhbGFtIGZha3VsdGFzIHlhbmcgZGlwaWxpaCBsZWJpaCBzZXJhZ2FtLiAgDQoNCiAgLSBNb0UgdGVya2VjaWwgYmVyYXJ0aSBlc3RpbWFzaSBsZWJpaCBkZWthdCBkZW5nYW4gbmlsYWkgcG9wdWxhc2kgZGliYW5kaW5na2FuIG1ldG9kZSBsYWluLiAgDQoNCi0gKipLZXVuZ2d1bGFuOioqICANCg0KICAtIExlYmloIGhlbWF0IGJpYXlhIGRhbiB3YWt0dSBrYXJlbmEgaGFueWEgcGVybHUgbWVuc3VydmVpIGJlYmVyYXBhIGZha3VsdGFzLiAgDQoNCiAgLSBCZXJndW5hIGppa2EgcG9wdWxhc2kgdGVyYmFnaSBkYWxhbSBrZWxvbXBvayBnZW9ncmFmaXMgYXRhdSBpbnN0aXR1c2lvbmFsLiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gSmlrYSBmYWt1bHRhcyB5YW5nIGRpcGlsaWggdGlkYWsgcmVwcmVzZW50YXRpZiwgaGFzaWxueWEgYmlzYSBiaWFzLiAgDQoNCiAgLSBDZW5kZXJ1bmcgbWVuZ2hhc2lsa2FuIHZhcmlhc2kgZGF0YSB5YW5nIGxlYmloIGtlY2lsIGRpYmFuZGluZ2thbiBtZXRvZGUgbGFpbiBrYXJlbmEgaGFueWEgYmViZXJhcGEga2xhc3RlciB5YW5nIGRpZ3VuYWthbi4gIA0KDQoqKjUuIE11bHRpLVN0YWdlIFNhbXBsaW5nKiogIA0KDQotICoqS29uc2VwOioqICANCg0KICBNZXRvZGUgaW5pIG1lbGliYXRrYW4gbGViaWggZGFyaSBzYXR1IHRhaGFwIHBlbWlsaWhhbiBzYW1wZWwuIFBlcnRhbWEsIGJlYmVyYXBhIGZha3VsdGFzIGRpcGlsaWggc2VjYXJhIGFjYWssIGtlbXVkaWFuIGRhcmkgc2V0aWFwIGZha3VsdGFzIHRlcnNlYnV0LCBtYWhhc2lzd2EgZGlwaWxpaCBzZWNhcmEgYWNhayB1bnR1ayBzdXJ2ZWkuICANCg0KLSAqKkhhc2lsOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1OiBScCA1ODQuNjkwLDQwIChwYWxpbmcgdGluZ2dpIGRpYmFuZGluZyBtZXRvZGUgbGFpbikuICANCg0KICAtIE1vRTogUnAgMTE0LjU5OSwzMiAoTW9FIHRlcmJlc2FyKS4gIA0KDQotICoqSW50ZXJwcmV0YXNpOioqICANCg0KICAtIFNpbXBhbmdhbiBiYWt1IHlhbmcgdGluZ2dpIG1lbnVuanVra2FuIGJhaHdhIG1haGFzaXN3YSBkYWxhbSBzYW1wZWwgbWVtaWxpa2kgdmFyaWFzaSBwZW5nZWx1YXJhbiB5YW5nIGxlYmloIGJlc2FyLiAgDQoNCiAgLSBNb0UgdGVyYmVzYXIgYmVyYXJ0aSBoYXNpbCBzdXJ2ZWkgbGViaWggYmVyaXNpa28gbWVuZ2FsYW1pIHBlbnlpbXBhbmdhbiBkYXJpIHBvcHVsYXNpIHNlYmVuYXJueWEuICANCg0KLSAqKktldW5nZ3VsYW46KiogIA0KDQogIC0gQ29jb2sgdW50dWsgcG9wdWxhc2kgeWFuZyBzYW5nYXQgYmVzYXIgZGFuIGtvbXBsZWtzLiAgDQoNCiAgLSBNZW5naGVtYXQgd2FrdHUgZGliYW5kaW5na2FuIFN0cmF0aWZpZWQgU2FtcGxpbmcga2FyZW5hIHRpZGFrIHBlcmx1IGRhdGEgbGVuZ2thcCBkYXJpIHNlbXVhIGZha3VsdGFzLiAgDQoNCi0gKipLZWxlbWFoYW46KiogIA0KDQogIC0gS29tcGxla3NpdGFzIGxlYmloIHRpbmdnaSBkaWJhbmRpbmcgbWV0b2RlIGxhaW5ueWEuICANCg0KICAtIE1vRSB0ZXJiZXNhciBtZW51bmp1a2thbiBiYWh3YSBlc3RpbWFzaSBsZWJpaCBtdW5na2luIG1lbGVzZXQgZGFyaSBuaWxhaSBwb3B1bGFzaSBzZWJlbmFybnlhLiAgDQoNCiMjICoqUGVyYmFuZGluZ2FuIE1ldG9kZSBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKg0KDQp8ICoqS3JpdGVyaWEqKiAgICAgICAgICAgIHwgKipDb252ZW5pZW5jZSBTYW1wbGluZyoqIHwgKipQdXJwb3NpdmUgU2FtcGxpbmcqKiB8ICoqUXVvdGEgU2FtcGxpbmcqKiB8ICoqU25vd2JhbGwgU2FtcGxpbmcqKiB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkRlZmluaXNpKiogICAgICAgICAgICB8IFBlbWlsaWhhbiBzYW1wZWwgYmVyZGFzYXJrYW4ga2VtdWRhaGFuIGFrc2VzLiB8IFNhbXBlbCBkaXBpbGloIGJlcmRhc2Fya2FuIGtyaXRlcmlhIHRlcnRlbnR1IHlhbmcgZGl0ZXRhcGthbiBvbGVoIHBlbmVsaXRpLiB8IFNhbXBlbCBkaXBpbGloIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgeWFuZyBoYXJ1cyBtZW1lbnVoaSBrdW90YS4gfCBTYW1wZWwgZGlwZXJvbGVoIG1lbGFsdWkgcmVmZXJlbnNpIGRhcmkgcmVzcG9uZGVuIHNlYmVsdW1ueWEuIHwNCnwgKipQcm9zZXMgUGVtaWxpaGFuKiogICAgIHwgQmVyZGFzYXJrYW4gYWtzZXNpYmlsaXRhcyAoc2lhcGEgeWFuZyBtdWRhaCBkaWphbmdrYXUpLiB8IEJlcmRhc2Fya2FuIHBlcnRpbWJhbmdhbiBzdWJqZWt0aWYgcGVuZWxpdGkuIHwgQmVyZGFzYXJrYW4ga2F0ZWdvcmkgdGVydGVudHUsIHRldGFwaSBkYWxhbSBrYXRlZ29yaSBpdHUgcGVtaWxpaGFuIHRpZGFrIGFjYWsuIHwgQmVyZGFzYXJrYW4gamFyaW5nYW4gc29zaWFsIHJlc3BvbmRlbiBzZWJlbHVtbnlhLiB8DQp8ICoqVGluZ2thdCBCaWFzKiogICAgICAgIHwgVGluZ2dpIChTZWxlY3Rpb24gQmlhcyAmIFNhbXBsaW5nIEJpYXMpLiB8IFRpbmdnaSAoUmVzZWFyY2hlciBCaWFzICYgU3ViamVjdGl2ZSBKdWRnbWVudCkuIHwgU2VkYW5nICh0ZXJrZW5kYWxpIGRhbGFtIGt1b3RhLCB0ZXRhcGkgdGlkYWsgYWNhayBkYWxhbSBwZW1pbGloYW5ueWEpLiB8IFRpbmdnaSAoTmV0d29yayBCaWFzICYgSG9tb2dlbmVpdHkgQmlhcykuIHwNCnwgKipLZW11ZGFoYW4gUGVuZ2d1bmFhbioqIHwgU2FuZ2F0IE11ZGFoIHwgTXVkYWggfCBTZWRhbmcgKGJ1dHVoIHBlbmdlbG9tcG9rYW4ga3VvdGEgdGVybGViaWggZGFodWx1KS4gfCBTdWxpdCAodGVyZ2FudHVuZyBrZXRlcmxpYmF0YW4gcmVzcG9uZGVuKS4gfA0KfCAqKlJlcHJlc2VudGF0aWYgYXRhdSBUaWRhaz8qKiB8IFRpZGFrIHJlcHJlc2VudGF0aWYsIGthcmVuYSBoYW55YSBtZW5nZ2FtYmFya2FuIGtlbG9tcG9rIHRlcnRlbnR1LiB8IEt1cmFuZyByZXByZXNlbnRhdGlmLCBrYXJlbmEgYmVyZ2FudHVuZyBwYWRhIGtyaXRlcmlhIHlhbmcgZGl0ZXRhcGthbiBwZW5lbGl0aS4gfCBSZWxhdGlmIGxlYmloIHJlcHJlc2VudGF0aWYgZGliYW5kaW5na2FuIGNvbnZlbmllbmNlIGRhbiBwdXJwb3NpdmUsIHRldGFwaSB0ZXRhcCB0aWRhayBzZXBlbnVobnlhIGFjYWsuIHwgVGlkYWsgcmVwcmVzZW50YXRpZiBrYXJlbmEgaGFueWEgbWVsaWJhdGthbiBqYXJpbmdhbiB0ZXJ0ZW50dS4gfA0KfCAqKkNvY29rIERpZ3VuYWthbiB1bnR1az8qKiB8IFN0dWRpIGVrc3Bsb3JhdGlmLCBzdXJ2ZWkgYXdhbC4gfCBTdHVkaSB5YW5nIG1lbWJ1dHVoa2FuIGthcmFrdGVyaXN0aWsgcmVzcG9uZGVuIHRlcnRlbnR1LiB8IFN0dWRpIGRlbW9ncmFmaSBkZW5nYW4ga2FyYWt0ZXJpc3RpayBzcGVzaWZpay4gfCBTdHVkaSBwYWRhIHBvcHVsYXNpIHRlcnNlbWJ1bnlpIChtaXNhbG55YSBrb211bml0YXMgdGVydGVudHUpLiB8DQp8ICoqS2VjZXBhdGFuIFBlbmd1bXB1bGFuIERhdGEqKiB8IENlcGF0IHwgQ2VwYXQgfCBTZWRhbmcgKGthcmVuYSBoYXJ1cyBtZW1lbnVoaSBrdW90YSkuIHwgTGFtYmF0ICh0ZXJnYW50dW5nIHJla29tZW5kYXNpIHJlc3BvbmRlbikuIHwNCnwgKipLZWxlYmloYW4qKiAgICAgICAgICAgfCBNdWRhaCwgbXVyYWgsIGRhbiBjZXBhdC4gfCBCaXNhIG1lbmRhcGF0a2FuIHNhbXBlbCB5YW5nIHNlc3VhaSBkZW5nYW4ga2VidXR1aGFuIHBlbmVsaXRpYW4uIHwgQmlzYSBtZW55ZWltYmFuZ2thbiBkaXN0cmlidXNpIGthdGVnb3JpIGRhbGFtIHBvcHVsYXNpLiB8IEJpc2EgZGlndW5ha2FuIHVudHVrIHBvcHVsYXNpIHlhbmcgc3VsaXQgZGlqYW5na2F1LiB8DQp8ICoqS2VrdXJhbmdhbioqICAgICAgICAgfCBUaWRhayByZXByZXNlbnRhdGlmIGRhbiByYXdhbiBiaWFzLiB8IFN1Ympla3RpZiBkYW4gYmVyZ2FudHVuZyBwYWRhIHBlbmVsaXRpLiB8IFRpZGFrIGJlbmFyLWJlbmFyIGFjYWsgZGFuIG1hc2loIG1lbWlsaWtpIGJpYXMuIHwgUmVzcG9uZGVuIHlhbmcgZGlwaWxpaCBjZW5kZXJ1bmcgbWVtaWxpa2kga2FyYWt0ZXJpc3RpayBzZXJ1cGEuIHwNCg0KIyMjICoqQW5hbGlzaXMgZGFuIFBlbmplbGFzYW4gU2V0aWFwIE1ldG9kZSBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiANCg0KKioxLiBDb252ZW5pZW5jZSBTYW1wbGluZyAoU2FtcGVsIEtlbXVkYWhhbikqKg0KDQotICoqS2V1bmdndWxhbioqOiANCg0KICAtIENlcGF0IGRhbiBtdWRhaCBkaWxha3VrYW4gdGFucGEgYmFueWFrIHN1bWJlciBkYXlhLg0KDQogIC0gQ29jb2sgdW50dWsgc3R1ZGkgZWtzcGxvcmFzaSBhd2FsIGF0YXUgcGVuZWxpdGlhbiBkZW5nYW4ga2V0ZXJiYXRhc2FuIHdha3R1Lg0KDQotICoqS2VsZW1haGFuKio6IA0KDQogIC0gQmlhcyBzZWxla3NpIHRpbmdnaSBrYXJlbmEgaGFueWEgbWVuY2FrdXAgaW5kaXZpZHUgeWFuZyBtdWRhaCBkaWFrc2VzLg0KDQogIC0gVGlkYWsgcmVwcmVzZW50YXRpZiwgc2VoaW5nZ2EgaGFzaWxueWEgc3VsaXQgZGlnZW5lcmFsaXNhc2kga2Ugc2VsdXJ1aCBwb3B1bGFzaS4NCg0KLSAqKkRhbXBhayB0ZXJoYWRhcCBwZW5lbGl0aWFuKio6IA0KDQogIC0gTWlzYWxueWEsIGppa2Egc3VydmVpIGRpbGFrdWthbiBkaSBrYWZldGFyaWEsIG1haGFzaXN3YSB5YW5nIHNlcmluZyBtYWthbiBkaSBsdWFyIGthbXB1cyB0aWRhayBha2FuIHRlcndha2lsaSwgc2VoaW5nZ2EgZXN0aW1hc2kgcGVuZ2VsdWFyYW4gbWFrYW5hbiBiaXNhIGxlYmloIHRpbmdnaS9yZW5kYWggZGFyaSBuaWxhaSBzZWJlbmFybnlhLg0KDQotICoqS2VzaW1wdWxhbioqOiANCg0KICAtIEt1cmFuZyBjb2NvayB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbWVtYnV0dWhrYW4gZXN0aW1hc2kgcG9wdWxhc2kgeWFuZyBha3VyYXQuIE5hbXVuLCBiaXNhIGRpZ3VuYWthbiBzZWJhZ2FpIGxhbmdrYWggYXdhbCB1bnR1ayBtZW1haGFtaSBwb2xhIGRhc2FyIHBvcHVsYXNpLg0KDQoqKjIuIEp1ZGdtZW50YWwgKFB1cnBvc2l2ZSkgU2FtcGxpbmcqKg0KDQotICoqS2V1bmdndWxhbioqOiANCg0KICAtIE1lbXVuZ2tpbmthbiBwZW5lbGl0aSBtZW1pbGloIGluZGl2aWR1IHlhbmcgZGlhbmdnYXAgcGFsaW5nIHJlbGV2YW4gdW50dWsgc3R1ZGkuDQoNCiAgLSBCZXJndW5hIHVudHVrIHBlbmVsaXRpYW4ga3VhbGl0YXRpZiBhdGF1IGVrc3Bsb3Jhc2kga2Vsb21wb2sgdGVydGVudHUgZGFsYW0gcG9wdWxhc2kuDQoNCi0gKipLZWxlbWFoYW4qKjogDQoNCiAgLSBCaWFzIHBlbWlsaWggdGVyamFkaSBrYXJlbmEgcGVuZWxpdGkgbWVuZ2d1bmFrYW4gc3ViamVrdGl2aXRhcyBkYWxhbSBtZW1pbGloIHNhbXBlbC4NCg0KICAtIEt1cmFuZyByZXByZXNlbnRhdGlmLCB0ZXJ1dGFtYSBqaWthIGhhbnlhIHNhdHUga3JpdGVyaWEgeWFuZyBkaWd1bmFrYW4gZGFsYW0gcGVtaWxpaGFuIHNhbXBlbC4NCg0KLSAqKkRhbXBhayB0ZXJoYWRhcCBwZW5lbGl0aWFuKio6IA0KDQogIC0gSmlrYSBoYW55YSBtZW1pbGloIG1haGFzaXN3YSBwZW5naHVuaSBhc3JhbWEgc2ViYWdhaSBzYW1wZWwsIGRhdGEgdGlkYWsgYWthbiBtZW5jZXJtaW5rYW4gbWFoYXNpc3dhIHlhbmcgdGluZ2dhbCBkaSBsdWFyIGthbXB1cywgeWFuZyBtdW5na2luIG1lbWlsaWtpIHBvbGEgcGVuZ2VsdWFyYW4gYmVyYmVkYS4NCg0KLSAqKktlc2ltcHVsYW4qKjogDQoNCiAgLSBDb2NvayB1bnR1ayBzdHVkaSBrdWFsaXRhdGlmIHlhbmcgbWVtZXJsdWthbiB3YXdhc2FuIG1lbmRhbGFtIHRlbnRhbmcga2Vsb21wb2sgdGVydGVudHUuDQoNCiAgLSBUaWRhayBpZGVhbCB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbWVtZXJsdWthbiBlc3RpbWFzaSBzdGF0aXN0aWsgcG9wdWxhc2kgeWFuZyBha3VyYXQuDQoNCioqMy4gUXVvdGEgU2FtcGxpbmcqKg0KDQotICoqS2V1bmdndWxhbioqOiANCg0KICAtIE1lbWFzdGlrYW4gYWRhbnlhIHJlcHJlc2VudGFzaSBkYXJpIGtlbG9tcG9rIHRlcnRlbnR1IChtaXNhbG55YSwgcHJvcG9yc2kgdGlhcCBmYWt1bHRhcykuDQoNCiAgLSBMZWJpaCB0ZXJzdHJ1a3R1ciBkaWJhbmRpbmdrYW4gQ29udmVuaWVuY2UgU2FtcGxpbmcsIHNlaGluZ2dhIGhhc2lsbnlhIGxlYmloIG1lbmRla2F0aSBwb3B1bGFzaS4NCg0KLSAqKktlbGVtYWhhbioqOiANCg0KICAtIEJpYXMgcGVtaWxpaCBtYXNpaCBhZGEga2FyZW5hIGluZGl2aWR1IGRhbGFtIGt1b3RhIHRpZGFrIGRpcGlsaWggc2VjYXJhIGFjYWsuDQoNCiAgLSBCaWFzIHN1Ympla3RpZiBiaXNhIHRlcmphZGkga2FyZW5hIHBlbmVsaXRpIG1lbWlsaWtpIGtlYmViYXNhbiBkYWxhbSBtZW1pbGloIGluZGl2aWR1IGRhbGFtIGtlbG9tcG9rLg0KDQotICoqRGFtcGFrIHRlcmhhZGFwIHBlbmVsaXRpYW4qKjogDQoNCiAgLSBNaXNhbG55YSwgbWVza2lwdW4ganVtbGFoIHNhbXBlbCBkYXJpIHRpYXAgZmFrdWx0YXMgc3VkYWggZGl0ZW50dWthbiwgcGVuZWxpdGkgYmlzYSBtZW1pbGloIGhhbnlhIG1haGFzaXN3YSB5YW5nIG11ZGFoIGRpamFuZ2thdSwgc2VoaW5nZ2EgdmFyaWFzaSBkYWxhbSBrZWxvbXBvayB0aWRhayB0ZXJjZXJtaW4gZGVuZ2FuIGJhaWsuDQoNCi0gKipLZXNpbXB1bGFuKio6IA0KDQogIC0gTGViaWggYmFpayBkYXJpcGFkYSBDb252ZW5pZW5jZSBhdGF1IEp1ZGdtZW50YWwgU2FtcGxpbmcsIHRldGFwaSBtYXNpaCBtZW1pbGlraSBwb3RlbnNpIGJpYXMuDQoNCiAgLSBDb2NvayB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgaW5naW4gbWVuamFnYSBkaXN0cmlidXNpIGtlbG9tcG9rIHRlcnRlbnR1LCB0ZXRhcGkgdGlkYWsgbWVtZXJsdWthbiBrZWFjYWthbiBwZW51aC4NCg0KKio0LiBTbm93YmFsbCBTYW1wbGluZyoqDQoNCi0gKipLZXVuZ2d1bGFuKio6IA0KDQogIC0gRWZla3RpZiB1bnR1ayBtZW5lbGl0aSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpamFuZ2thdSwgc2VwZXJ0aSBtYWhhc2lzd2EgZGVuZ2FuIGtvbmRpc2kgZWtvbm9taSB0ZXJ0ZW50dSBhdGF1IGtvbXVuaXRhcyBraHVzdXMuDQoNCiAgLSBNZW5naGVtYXQgd2FrdHUgZGFuIHN1bWJlciBkYXlhIGthcmVuYSByZXNwb25kZW4gbWVtYmFudHUgbWVuZW11a2FuIHNhbXBlbCBsYWlubnlhLg0KDQotICoqS2VsZW1haGFuKio6IA0KDQogIC0gQmlhcyBqYXJpbmdhbiBzb3NpYWwgdGVyamFkaSBrYXJlbmEgaW5kaXZpZHUgY2VuZGVydW5nIG1lcmVrb21lbmRhc2lrYW4gb3JhbmcgZGVuZ2FuIGthcmFrdGVyaXN0aWsgc2VydXBhLg0KDQogIC0gS3VyYW5nIHJlcHJlc2VudGF0aWYga2FyZW5hIHNhbXBlbCBiZXJhc2FsIGRhcmkgbGluZ2thcmFuIHNvc2lhbCB5YW5nIHRlcmJhdGFzLg0KDQotICoqRGFtcGFrIHRlcmhhZGFwIHBlbmVsaXRpYW4qKjogDQoNCiAgLSBNaXNhbG55YSwgamlrYSBwZW5lbGl0aWFuIGRpbXVsYWkgZGVuZ2FuIG1haGFzaXN3YSB5YW5nIGJlcmFzYWwgZGFyaSBrZWx1YXJnYSBla29ub21pIG1lbmVuZ2FoIGtlIGF0YXMsIG1lcmVrYSBrZW11bmdraW5hbiBiZXNhciBha2FuIG1lcmVrb21lbmRhc2lrYW4gdGVtYW4tdGVtYW4gZGVuZ2FuIGtvbmRpc2kgc2VydXBhLiBJbmkgbWVueWViYWJrYW4gZGF0YSB0aWRhayBtZW5jZXJtaW5rYW4gcG9wdWxhc2kgbWFoYXNpc3dhIHNlY2FyYSBrZXNlbHVydWhhbi4NCg0KLSAqKktlc2ltcHVsYW4qKjogDQoNCiAgLSBCYWd1cyB1bnR1ayBwZW5lbGl0aWFuIGt1YWxpdGF0aWYgYXRhdSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpdGVtdWthbi4NCg0KICAtIFRpZGFrIGNvY29rIHVudHVrIHN0dWRpIHlhbmcgbWVtZXJsdWthbiBkaXN0cmlidXNpIGRhdGEgeWFuZyBsZWJpaCBsdWFzIGRhbiByZXByZXNlbnRhdGlmLg0KDQojIyAqKlBlcmJhbmRpbmdhbiBTZW11YSBNZXRvZGUqKg0KDQp8ICoqQXNwZWsqKiAgICAgICAgICAgICAgICAgfCAqKlNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykqKiB8ICoqU3RyYXRpZmllZCBTYW1wbGluZyoqIHwgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogfCAqKkNsdXN0ZXIgU2FtcGxpbmcqKiB8ICoqTXVsdGktU3RhZ2UgU2FtcGxpbmcqKiB8ICoqQ29udmVuaWVuY2UgU2FtcGxpbmcqKiB8ICoqSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZyoqIHwgKipRdW90YSBTYW1wbGluZyoqIHwgKipTbm93YmFsbCBTYW1wbGluZyoqIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqS2VhY2FrYW4qKiAgICAgICAgICAgICAgfCBZYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZYSAgICAgICAgICAgICAgICAgICAgIHwgWWEsIHRldGFwaSByZW50YW4gYmlhcyBqaWthIGFkYSBwb2xhIHwgWWEsIHRldGFwaSB0ZXJiYXRhcyB8IFlhLCB0ZXRhcGkgdGVyYmF0YXMgfCBUaWRhayAgICAgICAgICAgICAgIHwgVGlkYWsgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRpZGFrICAgICAgICAgIHwgVGlkYWsgICAgICAgICAgfA0KfCAqKlJlcHJlc2VudGF0aXZpdGFzKiogICAgICB8IFNlZGFuZyAgICAgICAgICAgICAgICAgICAgICAgIHwgVGluZ2dpICAgICAgICAgICAgICAgICB8IFNlZGFuZyAgICAgICAgICAgICAgICAgfCBSZW5kYWggLSBTZWRhbmcgICAgICB8IFNlZGFuZyAtIFRpbmdnaSAgICAgIHwgUmVuZGFoICAgICAgICAgICAgICB8IFJlbmRhaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8IFJlbmRhaCAgICAgICAgIHwNCnwgKipCaWFzKiogICAgICAgICAgICAgICAgICB8IFJlbmRhaCAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVuZGFoICAgICAgICAgICAgICAgICB8IFJlbmRhaCAtIFNlZGFuZyAgICAgICAgfCBTZWRhbmcgICAgICAgICAgICAgICB8IFNlZGFuZyAgICAgICAgICAgICAgIHwgVGluZ2dpICAgICAgICAgICAgICB8IFRpbmdnaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8IFRpbmdnaSAgICAgICAgIHwNCnwgKipLZW11ZGFoYW4gUGVsYWtzYW5hYW4qKiAgfCBTZWRhbmcgICAgICAgICAgICAgICAgICAgICAgICB8IFN1bGl0ICAgICAgICAgICAgICAgICAgfCBNdWRhaCAgICAgICAgICAgICAgICAgIHwgTXVkYWggICAgICAgICAgICAgICAgfCBTdWxpdCAgICAgICAgICAgICAgICB8IFNhbmdhdCBNdWRhaCAgICAgICAgfCBNdWRhaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VkYW5nICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8DQp8ICoqQmlheWEqKiAgICAgICAgICAgICAgICAgfCBTZWRhbmcgICAgICAgICAgICAgICAgICAgICAgICB8IFRpbmdnaSAgICAgICAgICAgICAgICAgfCBSZW5kYWggICAgICAgICAgICAgICAgIHwgUmVuZGFoICAgICAgICAgICAgICAgfCBUaW5nZ2kgICAgICAgICAgICAgICB8IFNhbmdhdCBSZW5kYWggICAgICAgfCBSZW5kYWggICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VkYW5nICAgICAgICAgfCBTZWRhbmcgICAgICAgICB8DQp8ICoqQ29jb2sgdW50dWsgUG9wdWxhc2kqKiAgIHwgSG9tb2dlbiAmIGJlc2FyICAgICAgICAgICAgICAgfCBIZXRlcm9nZW4gICAgICAgICAgICAgIHwgSG9tb2dlbiAmIGJlc2FyICAgICAgICB8IEJlcmtlbG9tcG9rIChDbHVzdGVyKXwgU2FuZ2F0IGJlc2FyICYga29tcGxla3MgfCBUaWRhayBzcGVzaWZpayAgICAgIHwgU3Blc2lmaWsgKHNlc3VhaSB0dWp1YW4gcGVuZWxpdGlhbikgfCBCZXJhZ2FtICAgICAgICB8IFBvcHVsYXNpIFRlcnNlbWJ1bnlpIHwNCg0KDQojICoqVWt1cmFuIFNhbXBlbCB5YW5nIERpcGVybHVrYW4gdW50dWsgTW9FID0gNSoqDQoNCiMjIFJ1bXVzIFBlcnRhbWENCg0KJCQNCm4gPSBcZnJhY3soWiBcdGltZXMgXHNpZ21hKV4yfXtNb0VeMn0NCiQkDQoNCkRlbmdhbjogIA0KDQotICRaJCA9IDEuOTYgIChaLXNjb3JlIHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlKSAgDQoNCi0gJE1vRSQgPSA1ICAgKE1hcmdpbiBvZiBFcnJvcikNCg0KLSAkXHNpZ21hJCA9IHNpbXBhbmdhbiBiYWt1IA0KDQojIyMgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKioNCg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzQuMzEyDQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7KDEuOTYgXHRpbWVzIDU3NDMxMileMn17NV4yfVxcDQpuID0gXGZyYWN7KDExMjU2NTEuNTIpXjJ9ezI1fVxcDQpuID0gXGZyYWN7MS4yNjYuMTEyLjkxNi43OTIuMzEwfXsyNX1cXA0KbiA9IDUwLjY4My42NTMuNzc5DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpaIDwtIDEuOTYNCnNpZ21hIDwtIDU3NDMxMg0KTW9FIDwtIDUNCg0KbiA8LSAoWiAqIHNpZ21hKV4yIC8gKE1vRV4yKQ0KcHJpbnQobikNCmBgYA0KDQpTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpIGRpZGFzYXJrYW4gcGFkYSBwZW1pbGloYW4gYWNhayB0YW5wYSBtZW1wZXJ0aW1iYW5na2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgZGFyaSBwb3B1bGFzaS4gSGFzaWwgcGVyaGl0dW5nYW4geWFuZyBzYW5nYXQgYmVzYXIgbWVudW5qdWtrYW4gYmFod2EgZGVuZ2FuIHZhcmlhYmlsaXRhcyBwZW5nZWx1YXJhbiB5YW5nIHRpbmdnaSAo8J2cjj01NzQuMzEyKSwga2l0YSBtZW1lcmx1a2FuIHNhbXBlbCBkYWxhbSBqdW1sYWggc2FuZ2F0IGJlc2FyIHVudHVrIG1lbmNhcGFpIG1hcmdpbiBvZiBlcnJvciBzZWJlc2FyIFJwIDUuIERhbGFtIHByYWt0aWtueWEsIGFuZ2thIGluaSB0aWRhayByZWFsaXN0aXMsIHlhbmcgYmVyYXJ0aSBwZXJsdSBwZW55ZXN1YWlhbiwgc2VwZXJ0aSBtZW5pbmdrYXRrYW4gbWFyZ2luIG9mIGVycm9yIGF0YXUgbWVuZ2d1bmFrYW4gbWV0b2RlIHNhbXBsaW5nIGxhaW4geWFuZyBsZWJpaCBlZmlzaWVuLg0KDQojIyMgKipTdHJhdGlmaWVkIFJhbmRvbSBTYW1wbGluZyoqDQpEaWtldGFodWkgOg0KDQotICRaJCA9IDEuOTYgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzkuMjMzLDk3DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7KDEuOTYgXHRpbWVzIDU3OTIzMy45NyleMn17NV4yfVxcDQpuID0gXGZyYWN7KDExMzUyMDkuNTkpXjJ9ezI1fVxcDQpuID0gXGZyYWN7MS4yODkuMTgxLjM3MC41MDkuNjY3fXsyNX1cXA0KbiA9IDUxLjU1Ni4xMTQuNzM5DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpzaWdtYSA8LSA1NzkyMzMuOTcNCm4gPC0gKFogKiBzaWdtYSleMiAvIChNb0VeMikNCnByaW50KG4pDQpgYGANCg0KU3RyYXRpZmllZCBTYW1wbGluZyBtZW1iYWdpIHBvcHVsYXNpIGtlIGRhbGFtIGtlbG9tcG9rIChzdHJhdGEpIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUgc2ViZWx1bSBwZW5nYW1iaWxhbiBzYW1wZWwgZGlsYWt1a2FuIGRhbGFtIHNldGlhcCBzdHJhdGEuIFNpbXBhbmdhbiBiYWt1IHNlZGlraXQgbGViaWggdGluZ2dpIGRpYmFuZGluZ2thbiBTUlMgKM+DPTU3OS4yMzMsOTcpLCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIHRlcmRhcGF0IHBlcmJlZGFhbiBhbnRhciBrZWxvbXBvayB5YW5nIG1lbnllYmFia2FuIHBlcmx1bnlhIHVrdXJhbiBzYW1wZWwgbGViaWggYmVzYXIuIEppa2Egc3RyYXRpZmlrYXNpIGRpbGFrdWthbiBkZW5nYW4gYmFpaywganVtbGFoIHNhbXBlbCBzZWhhcnVzbnlhIGJpc2EgZGlrdXJhbmdpIHNhbWJpbCB0ZXRhcCBtZW5qYWdhIHJlcHJlc2VudGF0aXZpdGFzIGRhdGEuDQoNCiMjIyAqKlN5c3RlbWF0aWMgU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTiQgPSA1MDAgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzguMjc2LDE0DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7KDEuOTYgXHRpbWVzIDU3ODI3Ni4xNCleMn17NV4yfVxcDQpuID0gXGZyYWN7KDExMzMzMzEuMjMpXjJ9ezI1fVxcDQpuID0gXGZyYWN7MS4yODMuOTM3LjY5NC41OTEuMTU4fXsyNX1cXA0KbiA9IDUxLjM4NS43NDcuNzg0DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpzaWdtYSA8LSA1NzgyNzYuMTQNCm4gPC0gKFogKiBzaWdtYSleMiAvIChNb0VeMikNCnByaW50KG4pDQpgYGANCg0KU3lzdGVtYXRpYyBTYW1wbGluZyBtZW1pbGloIHNhbXBlbCBiZXJkYXNhcmthbiBpbnRlcnZhbCB0ZXRhcCwgbWlzYWxueWEgc2V0aWFwIGtlLfCdkZhkYXJpIGRhZnRhciBwb3B1bGFzaS4gU2ltcGFuZ2FuIGJha3VueWEgKM+DPTU3OC4yNzYsMTQpIGp1Z2EgY3VrdXAgdGluZ2dpLCBtZW55ZWJhYmthbiBwZXJoaXR1bmdhbiB1a3VyYW4gc2FtcGVsIGhhbXBpciBzYW1hLiBKaWthIHBvcHVsYXNpIG1lbWlsaWtpIHBvbGEgdGVydGVudHUgZGFsYW0gZGF0YSAobWlzYWxueWEgYWRhIHNpa2x1cyBkYWxhbSBwZW5nZWx1YXJhbiksIG1ldG9kZSBpbmkgZGFwYXQgbWVtYmVyaWthbiBoYXNpbCB5YW5nIGt1cmFuZyBha3VyYXQgZGliYW5kaW5na2FuIFNSUyBhdGF1IFN0cmF0aWZpZWQgU2FtcGxpbmcuDQoNCiMjIyAqKkNsdXN0ZXIgU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTY0LjYwMCw2Mg0KDQpNYWthOg0KDQokJA0KbiA9IFxmcmFjeygxLjk2IFx0aW1lcyA1NjQ2MDAuNjIpXjJ9ezVeMn1cXA0KbiA9IFxmcmFjeygxMTA2NjUxLjIyKV4yfXsyNX1cXA0KbiA9IFxmcmFjezEuMjI0LjYwMS42NjAuOTg2LjAwN317MjV9XFwNCm4gPSA0OC45ODQuMDY2LjQzOQ0KJCQNCmBgYHtyLCBtYXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQ0Kc2lnbWEgPC0gNTY0NjAwLjYyDQpuIDwtIChaICogc2lnbWEpXjIgLyAoTW9FXjIpDQpwcmludChuKQ0KYGBgDQoNCkNsdXN0ZXIgU2FtcGxpbmcgbWVtaWxpaCBrZWxvbXBvayAoY2x1c3Rlcikgc2VjYXJhIGFjYWsgZGFuIG1lbmd1bXB1bGthbiBkYXRhIGRhcmkgc2VtdWEgaW5kaXZpZHUgZGFsYW0gY2x1c3RlciB0ZXJzZWJ1dC4NCk1lbmdhcGEgbGViaWgga2VjaWwgZGFyaSBtZXRvZGUgbGFpbj8gU2ltcGFuZ2FuIGJha3VueWEgbGViaWggcmVuZGFoICjPgz01NjQuNjAwLDYyKSwgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFiaWxpdGFzIGRhbGFtIGNsdXN0ZXIgbGViaWgga2VjaWwgZGliYW5kaW5na2FuIG1ldG9kZSBsYWlubnlhLCBzZWhpbmdnYSB1a3VyYW4gc2FtcGVsIHlhbmcgZGloaXR1bmcgc2VkaWtpdCBsZWJpaCByZW5kYWguIENsdXN0ZXIgU2FtcGxpbmcgY2VuZGVydW5nIGxlYmloIGVmaXNpZW4gZGFsYW0gaGFsIGJpYXlhIGRhbiB3YWt0dSwgdGV0YXBpIGJpc2EgbWVuZ2hhc2lsa2FuIGJpYXMgamlrYSBjbHVzdGVyIHlhbmcgZGlwaWxpaCB0aWRhayBiZW5hci1iZW5hciBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uDQoNCiMjIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45Ng0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1ODQuNjkwLDQNCg0KTWFrYToNCg0KJCQNCm4gPSBcZnJhY3soMS45NiBcdGltZXMgNTg0NjkwLjQwKV4yfXs1XjJ9XFwNCm4gPSBcZnJhY3soMTE0NTgwOS4xOCleMn17MjV9XFwNCm4gPSBcZnJhY3sxLjMxMy4zMDAuMzc3Ljc5MC4wNzF9ezI1fVxcDQpuID0gNTIuNTMyLjAxNS4xMTENCiQkDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCnNpZ21hIDwtIDU4NDY5MC40MA0KbiA8LSAoWiAqIHNpZ21hKV4yIC8gKE1vRV4yKQ0KcHJpbnQobikNCmBgYA0KDQpNdWx0aS1TdGFnZSBTYW1wbGluZyBhZGFsYWggdmFyaWFzaSBkYXJpIENsdXN0ZXIgU2FtcGxpbmcgZGkgbWFuYSBwZW5nYW1iaWxhbiBzYW1wZWwgZGlsYWt1a2FuIGRhbGFtIGJlYmVyYXBhIHRhaGFwLCBtaXNhbG55YSBtZW1pbGloIHdpbGF5YWggdGVydGVudHUsIGxhbHUgbWVtaWxpaCBydW1haCB0YW5nZ2EgZGkgZGFsYW1ueWEuDQpNZW5nYXBhIHBhbGluZyBiZXNhcj8gU2ltcGFuZ2FuIGJha3UgdGVydGluZ2dpICjPgz01ODQuNjkwLDQwKSBtZW51bmp1a2thbiBhZGFueWEgdmFyaWFiaWxpdGFzIHlhbmcgc2FuZ2F0IGJlc2FyIGFudGFyIGtlbG9tcG9rIHlhbmcgZGlwaWxpaCwgc2VoaW5nZ2EgdWt1cmFuIHNhbXBlbCB5YW5nIGRpaGl0dW5nIGxlYmloIGJlc2FyIGRpYmFuZGluZ2thbiBtZXRvZGUgbGFpbm55YS4gSmlrYSBNdWx0aS1TdGFnZSBTYW1wbGluZyBkaWxha3VrYW4gZGVuZ2FuIGJhaWssIGRhcGF0IG1lbmphZGkgbWV0b2RlIHlhbmcgZWZpc2llbiB1bnR1ayBzdXJ2ZWkgYmVzYXIsIHRldGFwaSBqaWthIHZhcmlhYmlsaXRhcyBhbnRhciBrZWxvbXBvayB0aW5nZ2ksIGhhc2lsIGJpc2Ega3VyYW5nIGFrdXJhdC4NCg0KIyMgUnVtdXMgS2VkdWENCg0KRGlkYXBhdGthbiBoYXNpbCBhcGFiaWxhIG1lbmdndW5ha2FuIHJ1bXVzIHBlcnRhbWEsIG1ha2EgaGFzaWxueWEgbWVtaWxpa2kgYW5na2EgeWFuZyB0aWRhayByZWFsaXN0aXMga2FyZW5hIG1lbWlsaWtpIGp1bWxhaCB5YW5nIHNhbmdhdCBiZXNhci4gU2VkYW5na2FuIGhhbnlhIG1lbWlsaWtpIHBvcHVsYXNpIHNlYmVzYXIgNTAwLCBzZWhpbmdnYSB1bnR1ayBwZXJoaXR1bmdhbiBtZW5nZ3VuYWthbiBydW11cyBwZXJ0YW1hIG1lbWlsaWtpIGhhc2lsIHlhbmcgdGlkYWsgYWt1cmF0Lg0KDQpNYWthIGRhcmkgaXR1IHVudHVrIG1lbmdrb3Jla3NpIHBlcmhpdHVuZ2FuIHBlcnRhbWEsIGtpdGEgYmlzYSBtZW5lcmFwa2FuIEZpbml0ZSBQb3B1bGF0aW9uIENvcnJlY3Rpb24gKEZQQykgdW50dWsgbWVueWVzdWFpa2FuIHVrdXJhbiBzYW1wZWwgZGVuZ2FuIGtldGVyYmF0YXNhbiBwb3B1bGFzaS4gRGlzaW5pIGtpdGEgYmlzYSBtZW5nZ3VuYWthbiAyIGNhcmEsIHlhaXR1IGRlbmdhbiBjYXJhIG1lbmdrb3Jla3NpIGxhbmdzdW5nIGRhbiBtZW5naGl0dW5nIHVsYW5nIG5hbXVuIHRldGFwIG1lbmVyYXBrYW4gRlBDLg0KDQojIyMgS29yZWtzaSBMYW5nc3VuZw0KDQpQYWRhIGNhcmEgcGVydGFtYSB5YWl0dSBtZW5na29yZWtzaSBsYW5nc3VuZywgYmlzYSBtZW5nZ3VuYWthbiBydW11czoNCg0KJCQNCm5fe2Fkan0gPSBcZnJhY3tufXsxICsgXGZyYWN7biAtIDF9e059fQ0KJCQNCg0KZGkgbWFuYTogIA0KLSAkbiQgPSB1a3VyYW4gc2FtcGVsIHlhbmcgZGloaXR1bmcgc2ViZWx1bW55YSAgDQotICROJCA9IDUwMCAodWt1cmFuIHBvcHVsYXNpKSAgDQoNCiMjIyMgKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s1MC42ODMuNjUzLjc3OX17MSArIFxmcmFjezUwLjY4My42NTMuNzc5IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipTdHJhdGlmaWVkIFNhbXBsaW5nKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s1MS41NTYuMTE0LjczOX17MSArIFxmcmFjezUxLjU1Ni4xMTQuNzM5IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s1MS4zODUuNzQ3Ljc4NH17MSArIFxmcmFjezUxLjM4NS43NDcuNzg0IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipDbHVzdGVyIFNhbXBsaW5nKiogIA0KJCQNCm5fe2Fkan0gPSBcZnJhY3s0OC45ODQuMDY2LjQzOX17MSArIFxmcmFjezQ4Ljk4NC4wNjYuNDM5IC0gMX17NTAwfX1cXA0Kbl97YWRqfSBcYXBwcm94IDQ5OS45OTk5OTUgXGFwcHJveCA1MDANCiQkDQoNCiMjIyMgKipNdWx0aS1TdGFnZSBTYW1wbGluZyoqICANCiQkbl97YWRqfSA9IFxmcmFjezUyLjUzMi4wMTUuMTExfXsxICsgXGZyYWN7NTIuNTMyLjAxNS4xMTEgLSAxfXs1MDB9fVxcDQpuX3thZGp9IFxhcHByb3ggNDk5Ljk5OTk5NSBcYXBwcm94IDUwMA0KJCQNCg0KIyMjIEtvcmVrc2kgZGVuZ2FuIE1lbmdoaXR1bmcgVWxhbmcNCg0KUGFkYSBjYXJhIGtlZHVhLCB5YWl0dSBtZW5naGl0dW5nIHVsYW5nLiBNYWthIGRhcGF0IG1lbmdndW5ha2FuIHJ1bXVzOiANCg0KJCQNCm4gPSBcZnJhY3taXjIgXGNkb3QgXHNpZ21hXjIgXGNkb3QgTn17KE1vRV4yIFxjZG90IChOIC0gMSkpICsgKFpeMiBcY2RvdCBcc2lnbWFeMil9DQokJA0KDQpkZW5nYW46ICANCg0KLSAkWiQgPSAxLjk2ICAodW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUpICANCg0KLSAkTiQgPSA1MDAgIChqdW1sYWggcG9wdWxhc2kpICANCg0KLSAkTW9FJCA9IDUgIChNYXJnaW4gb2YgRXJyb3IpDQoNCi0gJFxzaWdtYSQgPSBTaW1wYW5nYW4gYmFrdQ0KDQojIyMjICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqDQoNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45NiAgDQoNCi0gJE4kID0gNTAwICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTc0LjMxMg0KDQpNYWthOg0KDQokJA0KbiA9IFxmcmFje1peMiBcY2RvdCBcc2lnbWFeMiBcY2RvdCBOfXsoTW9FXjIgXGNkb3QgKE4gLSAxKSkgKyAoWl4yIFxjZG90IFxzaWdtYV4yKX1cXA0KbiA9IFxmcmFjezEsOTZeMiBcY2RvdCA1NzQzMTJeMiBcY2RvdCA1MDB9eyg1XjIgXGNkb3QgKDUwMCAtIDEpKSArICgxLDk2XjIgXGNkb3Q1NzQzMTJeMil9XFwNCm4gPSA0OTksOTk5OTk1DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpLCB1a3VyYW4gc2FtcGVsIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5jYXBhaSBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgc2ViZXNhciBScCA1IGRlbmdhbiBzaW1wYW5nYW4gYmFrdSBScCA1NzQuMzEyIGRhbiBwb3B1bGFzaSA1MDAgYWRhbGFoIHNla2l0YXIgNTAwLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHVudHVrIG1lbmNhcGFpIHRpbmdrYXQgcHJlc2lzaSB5YW5nIHNhbmdhdCB0aW5nZ2ksIGhhbXBpciBzZWx1cnVoIHBvcHVsYXNpIGhhcnVzIGRpc3VydmVpLCBtZW1idWF0IG1ldG9kZSBzYW1wbGluZyBpbmkgdGlkYWsgbGFnaSBlZmlzaWVuIGRhbiBtZW5kZWthdGkgc2Vuc3VzIHBlbnVoLg0KDQojIyMjICoqU3RyYXRpZmllZCBSYW5kb20gU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTiQgPSA1MDAgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NzkuMjMzLDk3DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7Wl4yIFxjZG90IFxzaWdtYV4yIFxjZG90IE59eyhNb0VeMiBcY2RvdCAoTiAtIDEpKSArIChaXjIgXGNkb3QgXHNpZ21hXjIpfVxcDQpuID0gXGZyYWN7MSw5Nl4yIFxjZG90IDU3OTIzMyw5N14yIFxjZG90IDUwMH17KDVeMiBcY2RvdCAoNTAwIC0gMSkpICsgKDEsOTZeMiBcY2RvdCA1NzkyMzMsOTdeMil9XFwNCm4gPSA0OTksOTk5OTk1DQokJA0KDQpgYGB7ciwgbWFzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCiMgRGlrZXRhaHVpDQpaID0gMS45NiAgIyBaLXNjb3JlIHVudHVrIHRpbmdrYXQga2VwZXJjYXlhYW4gOTUlDQpzaWdtYSA9IDU3OTIzMy45NyAgIyBTaW1wYW5nYW4gYmFrdSAoUnApDQpOID0gNTAwICAjIFVrdXJhbiBwb3B1bGFzaQ0KTW9FID0gNSAgIyBNYXJnaW4gb2YgRXJyb3IgeWFuZyBkaWluZ2lua2FuDQoNCiMgTWVuZ2hpdHVuZyB1a3VyYW4gc2FtcGVsIGRlbmdhbiBmaW5pdGUgcG9wdWxhdGlvbiBjb3JyZWN0aW9uIChGUEMpDQpudW1lcmF0b3IgPSAoWioqMiAqIHNpZ21hKioyICogTikNCmRlbm9taW5hdG9yID0gKE1vRSoqMiAqIChOIC0gMSkpICsgKFoqKjIgKiBzaWdtYSoqMikNCm5fcmVxdWlyZWQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcg0KDQojIE1lbmFtcGlsa2FuIGhhc2lsDQpvcHRpb25zKGRpZ2l0cz0xMCkgDQpuX3JlcXVpcmVkDQpgYGANCkJlcmRhc2Fya2FuIHBlcmhpdHVuZ2FuIHVudHVrIG1ldG9kZSBTdHJhdGlmaWVkIFJhbmRvbSBTYW1wbGluZywgdWt1cmFuIHNhbXBlbCB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuY2FwYWkgTWFyZ2luIG9mIEVycm9yIChNb0UpIHNlYmVzYXIgUnAgNSBkZW5nYW4gc2ltcGFuZ2FuIGJha3UgUnAgNTc5LjIzMyw5NyBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSwgc2VwZXJ0aSBkYWxhbSBtZXRvZGUgU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSwgaGFtcGlyIHNlbHVydWggcG9wdWxhc2kgaGFydXMgZGlzdXJ2ZWkgdW50dWsgbWVuY2FwYWkgdGluZ2thdCBrZXRlcGF0YW4geWFuZyBzYW5nYXQgdGluZ2dpLiBTdHJhdGlmaWVkIFNhbXBsaW5nIGJpYXNhbnlhIGxlYmloIGVmaXNpZW4gZGliYW5kaW5na2FuIFNSUyBrYXJlbmEgbWVtYmFnaSBwb3B1bGFzaSBrZSBkYWxhbSBzdHJhdGEgeWFuZyBsZWJpaCBob21vZ2VuLCBuYW11biBkYWxhbSBrYXN1cyBpbmksIGthcmVuYSBNb0UgeWFuZyBzYW5nYXQga2VjaWwsIG1ldG9kZSBpbmkgdGV0YXAgbWVtYnV0dWhrYW4gaGFtcGlyIHNlbHVydWggcG9wdWxhc2kuIE9sZWgga2FyZW5hIGl0dSwgdW50dWsgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBwZW5lbGl0aWFuLCBNYXJnaW4gb2YgRXJyb3IgcGVybHUgZGlwZXJiZXNhciBhZ2FyIHVrdXJhbiBzYW1wZWwgeWFuZyBkaWJ1dHVoa2FuIGxlYmloIGtlY2lsIGRhbiBsZWJpaCByZWFsaXN0aXMgdW50dWsgZGlpbXBsZW1lbnRhc2lrYW4uDQoNCiMjIyMgKipTeXN0ZW1hdGljIFNhbXBsaW5nKioNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45NiAgDQoNCi0gJE4kID0gNTAwICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTc4LjI3NiwxNA0KDQpNYWthOg0KDQokJA0KbiA9IFxmcmFje1peMiBcY2RvdCBcc2lnbWFeMiBcY2RvdCBOfXsoTW9FXjIgXGNkb3QgKE4gLSAxKSkgKyAoWl4yIFxjZG90IFxzaWdtYV4yKX1cXA0KbiA9IFxmcmFjezEsOTZeMiBcY2RvdCA1NzgyNzYsMTReMiBcY2RvdCA1MDB9eyg1XjIgXGNkb3QgKDUwMCAtIDEpKSArICgxLDk2XjIgXGNkb3QgNTc4Mjc2LDE0XjIpfVxcDQpuID0gNDk5LDk5OTk5NQ0KJCQNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBwZXJoaXR1bmdhbiB1bnR1ayBtZXRvZGUgU3lzdGVtYXRpYyBTYW1wbGluZywganVtbGFoIHNhbXBlbCB5YW5nIGRpYnV0dWhrYW4gdW50dWsgbWVuY2FwYWkgTWFyZ2luIG9mIEVycm9yIChNb0UpIHNlYmVzYXIgUnAgNSBkZW5nYW4gc2ltcGFuZ2FuIGJha3UgUnAgNTc4LjI3NiwxNCBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSBoYW1waXIgc2VsdXJ1aCBwb3B1bGFzaSBoYXJ1cyBkaWFtYmlsIHNlYmFnYWkgc2FtcGVsIHVudHVrIG1lbmNhcGFpIHRpbmdrYXQgcHJlc2lzaSB5YW5nIHNhbmdhdCB0aW5nZ2kuIFN5c3RlbWF0aWMgU2FtcGxpbmcgc2VyaW5nIGRpZ3VuYWthbiBrYXJlbmEga2VtdWRhaGFubnlhIGRhbGFtIHBlbWlsaWhhbiBzYW1wZWwgc2VjYXJhIGJlcmthbGEgZGFyaSBkYWZ0YXIgeWFuZyB0ZWxhaCBkaXVydXRrYW4uIE5hbXVuLCBkYWxhbSBrYXN1cyBpbmksIGRlbmdhbiBNb0UgeWFuZyBzYW5nYXQga2VjaWwsIG1ldG9kZSBpbmkgdGV0YXAgbWVtYnV0dWhrYW4gaGFtcGlyIHNlbHVydWggcG9wdWxhc2ksIG1pcmlwIGRlbmdhbiBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpIGRhbiBTdHJhdGlmaWVkIFNhbXBsaW5nLiBPbGVoIGthcmVuYSBpdHUsIGFnYXIgcGVuZWxpdGlhbiBsZWJpaCBlZmlzaWVuIGRhbiBwcmFrdGlzLCBwZXJsdSBtZW1wZXJ0aW1iYW5na2FuIE1hcmdpbiBvZiBFcnJvciB5YW5nIGxlYmloIGJlc2FyIHNlaGluZ2dhIHVrdXJhbiBzYW1wZWwgeWFuZyBkaXBlcmx1a2FuIGRhcGF0IGRpa3VyYW5naSB0YW5wYSBtZW5nb3JiYW5rYW4gYWt1cmFzaSBzZWNhcmEgc2lnbmlmaWthbi4NCg0KIyMjIyAqKkNsdXN0ZXIgU2FtcGxpbmcqKg0KRGlrZXRhaHVpIDoNCg0KLSAkWiQgPSAxLjk2ICANCg0KLSAkTiQgPSA1MDAgIA0KDQotICRNb0UkID0gUnAgNSAgDQoNCi0gJFxzaWdtYSQgPSBScCA1NjQuNjAwLDYyDQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7Wl4yIFxjZG90IFxzaWdtYV4yIFxjZG90IE59eyhNb0VeMiBcY2RvdCAoTiAtIDEpKSArIChaXjIgXGNkb3QgXHNpZ21hXjIpfVxcDQpuID0gXGZyYWN7MSw5Nl4yIFxjZG90IDU2NDYwMCw2Ml4yIFxjZG90IDUwMH17KDVeMiBcY2RvdCAoNTAwIC0gMSkpICsgKDEsOTZeMiBcY2RvdCA1NjQ2MDAsNjJeMil9XFwNCm4gPSA0OTksOTk5OTk1DQokJA0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBoYXNpbCBwZXJoaXR1bmdhbiB1bnR1ayBtZXRvZGUgQ2x1c3RlciBTYW1wbGluZywganVtbGFoIHNhbXBlbCB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuY2FwYWkgTWFyZ2luIG9mIEVycm9yIChNb0UpIHNlYmVzYXIgUnAgNSBkZW5nYW4gc2ltcGFuZ2FuIGJha3UgUnAgNTY0LjYwMCw2MiBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSW5pIGJlcmFydGkgYmFod2EgaGFtcGlyIHNlbHVydWggcG9wdWxhc2kgaGFydXMgZGlzZXJ0YWthbiBkYWxhbSBzYW1wZWwgYWdhciBtZW5jYXBhaSB0aW5na2F0IHByZXNpc2kgeWFuZyBkaWluZ2lua2FuLiBDbHVzdGVyIFNhbXBsaW5nIHNlcmluZyBkaWd1bmFrYW4gdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgZGVuZ2FuIG1lbWlsaWgga2Vsb21wb2sgKGtsYXN0ZXIpIHNlY2FyYSBhY2FrIGRhcmlwYWRhIGluZGl2aWR1LCB0ZXRhcGkgZGFsYW0ga2FzdXMgaW5pLCBrYXJlbmEgTW9FIHlhbmcgc2FuZ2F0IGtlY2lsLCBqdW1sYWggc2FtcGVsIHlhbmcgZGlidXR1aGthbiB0ZXRhcCBtZW5kZWthdGkgc2VsdXJ1aCBwb3B1bGFzaS4gT2xlaCBrYXJlbmEgaXR1LCB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbGViaWggZWZpc2llbiwgcGVybHUgbWVtcGVydGltYmFuZ2thbiBwZW5pbmdrYXRhbiBNYXJnaW4gb2YgRXJyb3IgYWdhciBqdW1sYWggc2FtcGVsIHlhbmcgZGlidXR1aGthbiBiaXNhIGxlYmloIHJlYWxpc3RpcyBkYW4gdGV0YXAgbWVtYmVyaWthbiBoYXNpbCB5YW5nIGFrdXJhdC4NCg0KIyMjIyAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKioNCkRpa2V0YWh1aSA6DQoNCi0gJFokID0gMS45NiAgDQoNCi0gJE4kID0gNTAwICANCg0KLSAkTW9FJCA9IFJwIDUgIA0KDQotICRcc2lnbWEkID0gUnAgNTg0LjY5MCw0DQoNCk1ha2E6DQoNCiQkDQpuID0gXGZyYWN7Wl4yIFxjZG90IFxzaWdtYV4yIFxjZG90IE59eyhNb0VeMiBcY2RvdCAoTiAtIDEpKSArIChaXjIgXGNkb3QgXHNpZ21hXjIpfVxcDQpuID0gXGZyYWN7MSw5Nl4yIFxjZG90IDU4NDY5MCw0XjIgXGNkb3QgNTAwfXsoNV4yIFxjZG90ICg1MDAgLSAxKSkgKyAoMSw5Nl4yIFxjZG90IDU4NDY5MCw0XjIpfVxcDQpuID0gNDk5LDk5OTk5NQ0KJCQNCg0KYGBge3IsIG1hc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQojIERpa2V0YWh1aQ0KWiA9IDEuOTYgICMgWi1zY29yZSB1bnR1ayB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JQ0Kc2lnbWEgPSA1NzQzMTIgICMgU2ltcGFuZ2FuIGJha3UgKFJwKQ0KTiA9IDUwMCAgIyBVa3VyYW4gcG9wdWxhc2kNCk1vRSA9IDUgICMgTWFyZ2luIG9mIEVycm9yIHlhbmcgZGlpbmdpbmthbg0KDQojIE1lbmdoaXR1bmcgdWt1cmFuIHNhbXBlbCBkZW5nYW4gZmluaXRlIHBvcHVsYXRpb24gY29ycmVjdGlvbiAoRlBDKQ0KbnVtZXJhdG9yID0gKFoqKjIgKiBzaWdtYSoqMiAqIE4pDQpkZW5vbWluYXRvciA9IChNb0UqKjIgKiAoTiAtIDEpKSArIChaKioyICogc2lnbWEqKjIpDQpuX3JlcXVpcmVkID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3INCg0KIyBNZW5hbXBpbGthbiBoYXNpbA0Kb3B0aW9ucyhkaWdpdHM9MTApIA0Kbl9yZXF1aXJlZA0KYGBgDQpCZXJkYXNhcmthbiBoYXNpbCBwZXJoaXR1bmdhbiB1bnR1ayBtZXRvZGUgTXVsdGktU3RhZ2UgU2FtcGxpbmcsIGp1bWxhaCBzYW1wZWwgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNhcGFpIE1hcmdpbiBvZiBFcnJvciAoTW9FKSBzZWJlc2FyIFJwIDUgZGVuZ2FuIHNpbXBhbmdhbiBiYWt1IFJwIDU4NC42OTAsNCBkYW4gcG9wdWxhc2kgNTAwIGFkYWxhaCBzZWtpdGFyIDUwMC4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSBoYW1waXIgc2VsdXJ1aCBwb3B1bGFzaSBoYXJ1cyBkaXNlcnRha2FuIGRhbGFtIHNhbXBlbCB1bnR1ayBtZW5jYXBhaSB0aW5na2F0IHByZXNpc2kgeWFuZyBzYW5nYXQgdGluZ2dpLiBNdWx0aS1TdGFnZSBTYW1wbGluZyBiaWFzYW55YSBkaWd1bmFrYW4gdW50dWsgbWVueWVkZXJoYW5ha2FuIHByb3NlcyBwZW5nYW1iaWxhbiBzYW1wZWwgZGVuZ2FuIG1lbWlsaWgga2Vsb21wb2sgYmVydGFoYXAgc2ViZWx1bSBtZW1pbGloIGluZGl2aWR1IGRhbGFtIGtlbG9tcG9rIHRlcnNlYnV0LiBOYW11biwgZGFsYW0ga2FzdXMgaW5pLCBrYXJlbmEgTW9FIHlhbmcgc2FuZ2F0IGtlY2lsLCBtZXRvZGUgaW5pIHRldGFwIG1lbWJ1dHVoa2FuIGhhbXBpciBzZWx1cnVoIHBvcHVsYXNpLiBPbGVoIGthcmVuYSBpdHUsIGRhbGFtIHByYWt0aWtueWEsIHBlbmVsaXRpIHBlcmx1IG1lbXBlcnRpbWJhbmdrYW4gcGVuaW5na2F0YW4gTWFyZ2luIG9mIEVycm9yIGF0YXUgbWVueWVzdWFpa2FuIHN0cmF0ZWdpIHBlbmdhbWJpbGFuIHNhbXBlbCBhZ2FyIGxlYmloIGVmaXNpZW4gdGFucGEgbWVuZ29yYmFua2FuIHJlcHJlc2VudGF0aXZpdGFzIGRhdGEuDQoNCiMgKipLZXNpbXB1bGFuIGRhbiBSZWtvbWVuZGFzaSoqDQoNCkRhbGFtIHBlbmVsaXRpYW4gaW5pLCBiZXJiYWdhaSBtZXRvZGUgcHJvYmFiaWxpdHkgc2FtcGxpbmcgZGFuIG5vbi1wcm9iYWJpbGl0eSBzYW1wbGluZyB0ZWxhaCBkaWJhbmRpbmdrYW4gdW50dWsgbWVuaWxhaSBrZWFrdXJhdGFuIHNlcnRhIGVmaXNpZW5zaW55YSBkYWxhbSBtZW5nZXN0aW1hc2kgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhLiBEYXJpIGhhc2lsIGFuYWxpc2lzLCBtZXRvZGUgcHJvYmFiaWxpdHkgc2FtcGxpbmcgdGVyYnVrdGkgbGViaWggdW5nZ3VsIGRhbGFtIGhhbCBrZWFrdXJhdGFuIGthcmVuYSBtZW11bmdraW5rYW4gc2V0aWFwIGluZGl2aWR1IGRhbGFtIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIHRlcnBpbGloIHNlYmFnYWkgc2FtcGVsLiBTZWJhbGlrbnlhLCBtZXRvZGUgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIGxlYmloIG11ZGFoIGRhbiBjZXBhdCBkaXRlcmFwa2FuLCB0ZXRhcGkgbWVtaWxpa2kgcmlzaWtvIGJpYXMgeWFuZyBsZWJpaCB0aW5nZ2kgc2VoaW5nZ2EgaGFzaWxueWEga3VyYW5nIGRhcGF0IGRpZ2VuZXJhbGlzYXNpIGtlIHNlbHVydWggcG9wdWxhc2kuDQoNCkRpIGFudGFyYSBtZXRvZGUgcHJvYmFiaWxpdHkgc2FtcGxpbmcsIFN0cmF0aWZpZWQgU2FtcGxpbmcgbWVtaWxpa2kga2V1bmdndWxhbiBkYWxhbSBtZW5hbmdrYXAgdmFyaWFzaSBhbnRhciBrZWxvbXBvayBrYXJlbmEgcG9wdWxhc2kgZGliYWdpIG1lbmphZGkgc3RyYXRhIHNlYmVsdW0gcGVtaWxpaGFuIHNhbXBlbCBkaWxha3VrYW4uIEhhbCBpbmkgbWVuamFkaWthbm55YSBzYWxhaCBzYXR1IG1ldG9kZSBwYWxpbmcgYWt1cmF0IHVudHVrIHBvcHVsYXNpIHlhbmcgaGV0ZXJvZ2VuLCBzZXBlcnRpIG1haGFzaXN3YSBkYXJpIGJlcmJhZ2FpIGZha3VsdGFzIGRlbmdhbiBwb2xhIHBlbmdlbHVhcmFuIHlhbmcgYmVyYmVkYS1iZWRhLiBDbHVzdGVyIFNhbXBsaW5nLCBtZXNraXB1biBsZWJpaCBoZW1hdCBiaWF5YSBkYW4gd2FrdHUsIG1lbWlsaWtpIGtlbGVtYWhhbiBrYXJlbmEgaGFueWEgbWVtaWxpaCBiZWJlcmFwYSBrZWxvbXBvayB0ZXJ0ZW50dSwgeWFuZyBiaXNhIG1lbWJ1YXQgaGFzaWxueWEga3VyYW5nIHJlcHJlc2VudGF0aWYgamlrYSBrbGFzdGVyIHlhbmcgZGlwaWxpaCB0aWRhayBjdWt1cCBtZW5jZXJtaW5rYW4gcG9wdWxhc2kgc2VjYXJhIGtlc2VsdXJ1aGFuLiBTeXN0ZW1hdGljIFNhbXBsaW5nIG1lbmF3YXJrYW4gZWZpc2llbnNpIGRhbGFtIHBlbWlsaWhhbiBzYW1wZWwsIHRldGFwaSByZW50YW4gdGVyaGFkYXAgYmlhcyBqaWthIHRlcmRhcGF0IHBvbGEgdGVydGVudHUgZGFsYW0gdXJ1dGFuIGRhdGEgcG9wdWxhc2kuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykgbWVtYmVyaWthbiBoYXNpbCB5YW5nIHRpZGFrIGJpYXMgc2VjYXJhIHRlb3JpLCB0ZXRhcGkga3VyYW5nIGVmZWt0aWYgZGFsYW0gcG9wdWxhc2kgeWFuZyBoZXRlcm9nZW4ga2FyZW5hIHRpZGFrIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFzaSBhbnRhciBrZWxvbXBvay4gTXVsdGktU3RhZ2UgU2FtcGxpbmcgbWVuamFkaSBwaWxpaGFuIHlhbmcgYmFpayB1bnR1ayBwb3B1bGFzaSB5YW5nIGJlc2FyIGRhbiBrb21wbGVrcywgbWVza2lwdW4gbWVtaWxpa2kgbWFyZ2luIG9mIGVycm9yIHlhbmcgbGViaWggYmVzYXIgZGliYW5kaW5na2FuIG1ldG9kZSBsYWluIGthcmVuYSBwZW1pbGloYW4gZGlsYWt1a2FuIGRhbGFtIGJlYmVyYXBhIHRhaGFwIHlhbmcgbWVuaW5na2F0a2FuIGtlbXVuZ2tpbmFuIHZhcmlhc2kgZGFsYW0gc2FtcGVsLg0KDQpTZW1lbnRhcmEgaXR1LCBtZXRvZGUgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIGxlYmloIHNlcmluZyBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiBla3NwbG9yYXRpZiBhdGF1IGtldGlrYSB0ZXJkYXBhdCBrZXRlcmJhdGFzYW4gZGFsYW0gc3VtYmVyIGRheWEgZGFuIHdha3R1LiBDb252ZW5pZW5jZSBTYW1wbGluZyBhZGFsYWggbWV0b2RlIHlhbmcgcGFsaW5nIG11ZGFoIGRpbGFrdWthbiBrYXJlbmEgaGFueWEgbWVsaWJhdGthbiBpbmRpdmlkdSB5YW5nIG11ZGFoIGRpamFuZ2thdSwgdGV0YXBpIG1lbWlsaWtpIGJpYXMgc2VsZWtzaSB5YW5nIHRpbmdnaSBzZWhpbmdnYSBoYXNpbG55YSB0aWRhayBkYXBhdCBtZXdha2lsaSBwb3B1bGFzaSBkZW5nYW4gYmFpay4gSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZyBtZW1iZXJpa2FuIGtlbGVsdWFzYWFuIGJhZ2kgcGVuZWxpdGkgdW50dWsgbWVtaWxpaCBzYW1wZWwgeWFuZyBkaWFuZ2dhcCBwYWxpbmcgcmVsZXZhbiwgdGV0YXBpIHRldGFwIHJlbnRhbiB0ZXJoYWRhcCBiaWFzIHN1Ympla3RpZiB5YW5nIGJpc2EgbWVuZ3VyYW5naSBvYmpla3Rpdml0YXMgcGVuZWxpdGlhbi4gUXVvdGEgU2FtcGxpbmcgbWVuY29iYSBtZW5nYXRhc2kgYmlhcyByZXByZXNlbnRhc2kgZGVuZ2FuIG1lbmV0YXBrYW4gcHJvcG9yc2kgdGVydGVudHUgZGFsYW0gc2FtcGVsLCB0ZXRhcGkgbWFzaWggbWVtdW5na2lua2FuIGJpYXMgZGFsYW0gcGVtaWxpaGFuIGluZGl2aWR1IGRhbGFtIHNldGlhcCBrZWxvbXBvay4gU25vd2JhbGwgU2FtcGxpbmcgYmVyZ3VuYSB1bnR1ayBtZW5lbGl0aSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpamFuZ2thdSwgdGV0YXBpIGJlcmlzaWtvIHRpbmdnaSBtZW5naGFzaWxrYW4gc2FtcGVsIHlhbmcgdGVybGFsdSBob21vZ2VuIGthcmVuYSBpbmRpdmlkdSBjZW5kZXJ1bmcgbWVyZWtydXQgb3JhbmcgbGFpbiB5YW5nIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsgc2VydXBhIGRlbmdhbiBtZXJla2EuDQoNClNlbGFpbiBwZW1pbGloYW4gbWV0b2RlIHNhbXBsaW5nLCBwZXJoaXR1bmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgc2ViZXNhciA1IG1lbnVuanVra2FuIGJhaHdhIHVudHVrIHBvcHVsYXNpIGhhbnlhIDUwMCBvcmFuZywgaGFtcGlyIHNlbHVydWggcG9wdWxhc2kgaGFydXMgZGlzdXJ2ZWkgKDQ5OS45OTk5OTUgb3JhbmcpLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHNlbWFraW4ga2VjaWwgbWFyZ2luIG9mIGVycm9yIHlhbmcgZGlpbmdpbmthbiwgc2VtYWtpbiBiZXNhciBqdW1sYWggc2FtcGVsIHlhbmcgZGlidXR1aGthbiB1bnR1ayBtZW5kYXBhdGthbiBlc3RpbWFzaSB5YW5nIGFrdXJhdC4gRGFsYW0gcHJha3Rpa255YSwgdGlkYWsgc2VsYWx1IG1lbXVuZ2tpbmthbiB1bnR1ayBtZW5zdXJ2ZWkgaGFtcGlyIHNlbHVydWggcG9wdWxhc2ksIHNlaGluZ2dhIHBlcmx1IGRpbGFrdWthbiBrb21wcm9taSBhbnRhcmEgdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBrZXRlcGF0YW4gaGFzaWwgeWFuZyBkaWhhcmFwa2FuLiBKaWthIHN1bWJlciBkYXlhIHRlcmJhdGFzLCBNb0UgeWFuZyBsZWJpaCBiZXNhciBkYXBhdCBkaXRlcmltYSB1bnR1ayBtZW5kYXBhdGthbiB1a3VyYW4gc2FtcGVsIHlhbmcgbGViaWggcmVhbGlzdGlzLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIHByb2JhYmlsaXR5IHNhbXBsaW5nIGxlYmloIGRpcmVrb21lbmRhc2lrYW4gZGFsYW0gcGVuZWxpdGlhbiB5YW5nIG1lbWJ1dHVoa2FuIGhhc2lsIHlhbmcgYWt1cmF0IGRhbiBkYXBhdCBkaWdlbmVyYWxpc2FzaSwgdGVydXRhbWEgamlrYSBoZXRlcm9nZW5pdGFzIGRhbGFtIHBvcHVsYXNpIGN1a3VwIHRpbmdnaS4gTWV0b2RlIHNlcGVydGkgU3RyYXRpZmllZCBTYW1wbGluZyBhdGF1IFN5c3RlbWF0aWMgU2FtcGxpbmcgZGFwYXQgbWVuamFkaSBwaWxpaGFuIHlhbmcgYmFpayB1bnR1ayBtZW5pbmdrYXRrYW4ga2Vha3VyYXRhbiB0YW5wYSBtZW5pbmdrYXRrYW4gYmlheWEgc2VjYXJhIHNpZ25pZmlrYW4uIERpIHNpc2kgbGFpbiwgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIHRldGFwIGJlcmd1bmEgZGFsYW0gc2l0dWFzaSB0ZXJ0ZW50dSwgdGVydXRhbWEgamlrYSBwZW5lbGl0aWFuIGJlcnR1anVhbiB1bnR1ayBla3NwbG9yYXNpIGF3YWwgYXRhdSBqaWthIHRlcmRhcGF0IGtldGVyYmF0YXNhbiBzdW1iZXIgZGF5YSB5YW5nIG1lbWJ1YXQgcHJvYmFiaWxpdHkgc2FtcGxpbmcgc3VsaXQgZGlsYWt1a2FuLiBOYW11biwgZGFsYW0gcGVuZ2d1bmFhbiBtZXRvZGUgaW5pLCBwZW5lbGl0aSBwZXJsdSBtZW55YWRhcmkgcG90ZW5zaSBiaWFzIHlhbmcgYWRhIGRhbiBtZW1wZXJ0aW1iYW5na2FuIHN0cmF0ZWdpIG1pdGlnYXNpIHlhbmcgZGFwYXQgZGl0ZXJhcGthbi4NCg0KU2VsYWluIGl0dSwgcGVuZW50dWFuIHVrdXJhbiBzYW1wZWwgc2FuZ2F0IGJlcnBlbmdhcnVoIHRlcmhhZGFwIGt1YWxpdGFzIGhhc2lsIHBlbmVsaXRpYW4uIEppa2EganVtbGFoIHNhbXBlbCB0ZXJsYWx1IGtlY2lsLCBoYXNpbCBwZW5lbGl0aWFuIGJpc2EgbWVuamFkaSB0aWRhayBha3VyYXQgZGFuIG1lbWlsaWtpIG1hcmdpbiBvZiBlcnJvciB5YW5nIGJlc2FyLiBTZWJhbGlrbnlhLCBqaWthIGp1bWxhaCBzYW1wZWwgdGVybGFsdSBiZXNhciwgcGVuZWxpdGlhbiBiaXNhIG1lbmphZGkgbGViaWggbWFoYWwgZGFuIG1lbWFrYW4gd2FrdHUgbGViaWggbGFtYSB0YW5wYSBtZW1iZXJpa2FuIHBlbmluZ2thdGFuIG1hbmZhYXQgeWFuZyBzaWduaWZpa2FuLiBPbGVoIGthcmVuYSBpdHUsIHBlcmVuY2FuYWFuIHlhbmcgbWF0YW5nIGRhbGFtIG1lbWlsaWggbWV0b2RlIHNhbXBsaW5nIHNlcnRhIG1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbCB5YW5nIHRlcGF0IHNhbmdhdCBwZW50aW5nIHVudHVrIG1lbWFzdGlrYW4gaGFzaWwgcGVuZWxpdGlhbiB5YW5nIHZhbGlkIGRhbiBkYXBhdCBkaWFuZGFsa2FuLg0KDQojICoqUmVmZXJlbnNpKioNCg0KaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL3NhbXBsaW5nX2FuZF9zdXJ2ZXlfdGVjaG5pcXVlcy9kb2NzLw0KDQpodHRwczovL2Jsb2cuZWJpem1hcmsuaWQvcHJvYmFiaWxpdHktc2FtcGxpbmctZGFuLW5vbi1wcm9iYWJpbGl0eS1zYW1wbGluZy1hcGEtYmVkYW55YS8NCg0KaHR0cHM6Ly93d3cucmFjaG1hdHdhaGlkLmNvbS8yMDIwLzA2L21lbXBlbGFqYXJpLW1hcmdpbi1vZi1lcnJvci5odG1sDQoNCmh0dHBzOi8vaWQuZWZlcnJpdC5jb20vY2FyYS1tZW5naGl0dW5nLW1hcmdpbi1vZi1lcnJvci8=