UTS Teknik Sampling and Survey

Soal 1

Andaikan anda adalah bagian dari Tim riset lapangan yang diminta untuk melakukan survei tingkat penggunaan aplikasi tranportasi online di 3 kota menengah di Sumatera. Target sampel total adalah 600 responden, masing masing 200 per kota. Tetapi setelah 2 minggu melakukan survey anda menemukan: - Di kota A, tim berhasil mendapatkan 250 responden. - Di kota B, hanya 120 responden yang dapat di wawancarai. - Di kota C, 180 responden.

Intruksi:

  1. Jelaskan dua jenis kesalahan sampling yang terjadi berdasarkan situasi ini.
  2. Jika anda harus menyesuaikan bobot untuk mengembalikan representasi proporsional, bagaimana anda akan menghitungnya?

Jawaban

Intruksi A

Dua Jenis kesalahan sampling yang terjadi di pengumpulan data ini.

  1. Kesalahan sampling terjadi karena pengumpulan data yang melebihi target (Kota Palembang) Di kota Palembang, tim mengumpulkan 250 responden yang seharusnya hanya 200 responden, hal ini menyebabkan over-representation, dimana proporsisi responden dari kota A lebih besar dari target. Akibatnya, karakteristik Kota A mengurangi hasil survei dari kota lain.

  2. Kesalahan sampling terjadi karena pengumpulan data yang kurang atau tidak mencapai target(Kota Palembang & Lampung) Di kota Lampung hanya ada 120 responden dan di kota Riau hanya ada 180 responden, ini mennyebabkan Under-representation, dimana kedua kota ini kurang dari target nya, ini menyebabkan bias karena karakteristik Kota Lampung dan Riau berbeda secara signifikan dengan yang berhasil diwawancarai.

Dua kesalahan ini tidak seimbang antar kota, di kota Lampung hanya mendapat sedikit respon bisa jadi karena Kesulitan akses wilayah, keterbatasan tenaga survei di lokasi tersebut, dan minimnya minat kepercayaan terhadap survei beda dengan kota Palembang yang lebih banyak responden mungkin adalah kebalikan dari kota Lampung.

Intruksi B

Penyesuaian Bobot Responden

Rumus Bobot: \[ \text{Bobot Penyesuaian}=\frac{\text{Proporsi Target}}{\text{Proporsi Aktual}} \]

Hasil Perhitungan:

Kota Responden Aktual Proporsi Aktual Proporsi Target Bobot Penyesuaian
Palembang 250 250 / 550 = 0.455 0.333 0,333 / 0,455 = 0,732
Lampung 120 120 / 550 = 0,218 0.333 0,333 / 0,218 = 1,527
Riau 180 180 / 550 = 0,327 0.333 0,333 / 0,327 = 1,018

Interpretasi Bobot

  • Kota Palembang kelebihan responden, maka bobotnya dikurangi
  • Kota Lampung kekurangan responden, maka bobotnya ditambah
  • Kota Riau hampir sempurna tapi masih kekurangan responden, sehingga hanya sedikit penyesuaian

Lampiran tambahan: Refleksi dan saran penguatan survei

1. Menggunakan langkah mitigasi untuk survei mendatang

Berdasarkan dalam survei ini, terdapat tantangan yang terlihat seperti kesulitan menjaungkau responden di kota Lampung dan kelebihan data di kota Palembang, mitigasi berikut agar survei yang akan datang bisa berjalan dengan efektif dan juga proporsional:

  1. Pemantauan Real-Time jumlah responden per wilayah Gunakan dashboard sederhana untuk memantau progres harian per kota, sehingga bisa dilakukan penyesuaian cepat bila terjadi kelebihan atau kekurangan sampel.

  2. Kombinasi Metode survei Menggabungkan wawancara langsung dan juga wawancara online untuk menjangkau wilayah yang sulit diakses secara fisik.

  3. Pendekatan Sosial Budaya lokal Seperti melibatkan tokoh masyarakat seperti ketua RT/RW atau komunitas lokal untuk meningkatkan kepercayaan dan partisipasi responden

2. Rekomendasi Kebijakan

Beberapa rekomendasi kebijakan menurut saya, yaitu:

  1. Perencanaan survei lebih detail di tiap wilayah Setiap kota memiliki tantangan dalam pengumpulan data. Maka dari itu, perlu diperlukan studi awal untuk mengetahui apakah ada hambatan atau tidak sebelum survei besar dilakukan.

  2. Laporan survei Harus menyertakan bobot dan penjelasannya Agar hasil survei ini dapat digunakan oleh pembuat kebijakan dengan pemahaman yang utuh mengenai kekuatan dan keterbatasan datanya.

  3. Evaluasi tim lapangan Setiap survei perlu ditutup dengan evaluasi internal agar kedua permasalahan ini tidak terulang lagi.

Soal 2

Buatlah desain rancangan survei tentang persepsi kenyamanan pengguna ojek online saat jam sibuk (07.00-09.00 dan 17.00-19.00)

Intruksi:

  1. Desain pendakatan samping yang memungkinkan anda menangkap persepsi pengguna secara representatif pada jam sibuk, tanpa melakukan survei sepanjang hari.
  2. Sertakan rancangan waktu, metode pemilihan responden, dan justifikasi pemilihan unit samping.
  3. Jelaskan bagaimana anda akan menyesuaikan hasil survei jika 60% responden berasal dari pagi hari, sementara 40% berasal dari sore hari, sedangkan data historis menunjukkan pengguna ojek online saat sore hari dua kali lebih banyak dibanding pagi.

Jawaban

Intruksi A (Pendekatan samping)

Untuk menangkap persepsi kenyamanan pengguna ojek online secara representatif pada jam sibuk (07.00-09.00 dan 17.00-19.00) tanpa survei sepanjang hari, saya menggunakan stratified random sampling dengan strata berdasarkan waktu jam sibuk (pagi dan sore). Pendekatan ini memastikan bahwa pengguna dari kedua periode waktu terwakili, dengan fokus hanya pada jam sibuk untuk efisiensi. Survei dilakukan di lokasi-lokasi strategis seperti stasiun kereta, halte bus, atau pusat perkantoran, tempat pengguna ojek online cenderung berkumpul.

Stratified random sampling adalah metode pengambilan sampel yang membagi populasi menjadi beberapa strata atau kelompok kecil berdasarkan karakteristik tertentu yang relevan. Setelah populasi dibagi, sampel acak diambil dari setiap strata untuk meningkatkan representasi setiap kelompok dalam keseluruhan populasi. Metode ini membantu peneliti dalam menentukan sampel yang lebih efektif dan terstruktur.

Justifikasi:

  • Efisiensi Waktu: Fokus pada jam sibuk mengurangi kebutuhan untuk survei sepanjang hari, sehingga lebih hemat sumber daya

  • Representasi: Stratifikasi berdasarkan waktu memastikan pengguna pagi dan sore terwakili, mengingat perbedaan perilaku atau pengalaman di kedua waktu.

  • Aksebilitas: Lokasi strategis memudahkan akses ke pengguna ojek online yang baru menyelesaikan perjalanan, sehingga persepsi mereka masih segar.

Intruksi B (Rancangan Waktu)

1. Jadwal Survei:

  • Pagi : 07.00 - 09.00

  • Sore : 17.00 - 19.00

2. Metode Pemilihan Responden:

  • Petugas survei ditempatkan di lokasi seperti stasiun kereta, halte bus, universitas, atau pusat perkantoran.

  • Responden dipilih secara sistematis, misalnya setiap interval waktu tertentu atau berdasarkan urutan pengguna aplikasi.

3. Metode Pengumpulan Data:

  • Wawancara langsung secara singkat 3-5 menit dengan pertanyaan tentang kenyamanan, waktu tunggu, keamanan, dan kepuasan keseluruhan.

  • Menggunakan lokasi strategis dan aplikasi langsung meningkatkan probabilitas mendapatkan responden yang tepat.

  • Target 60 responden untuk di wawancarai di pagi dan sore hari

Intruksi C (Penyeseuaian hasil survei)

Jika hasil survei menunjukkan 60%(40 responden) responden dari pagi dan 40%(20 responden) dari sore, tetapi data historis menunjukkan pengguna sore dua kali lebih banyak daripada pagi, saya akan menerapkan pembobotan (weighting) untuk menyesuaikan hasil agar mencerminkan distribusi populasi yang sebenarnya.

1. Responden:

  • Pagi: 60%

  • Sore: 40%

2. Data Historis:

  • Jumlah pengguna sore dua kali lebih banyak dari pagi hari.

  • Idealnya distribusi: 33.3% pagi dan 66.7% pagi.

3. Langkah Penyesuaian:

Proporsisi Populasi:

  • Pagi: 1/3 = 33.33%

  • Sore: 2/3 = 66.67%

Proporsisi Sampel:

  • Pagi: 60% = 0.6

  • Sore: 40% = 0.4

Rumus Bobot:

\[ \text{Bobot}=\frac{\text{Proporsisi Populasi}}{\text{Proporsisi Sampel}} \]

  • Pagi: \[ \text{Pagi}=\frac{(1/3)}{0.6}=\frac{0.333}{0.6}=0.555 \]

  • Sore: \[ \text{Sore}=\frac{2/3}{0.4}=\frac{0.667}{0.4}=1.667 \]

Waktu Proporsi Responden Proporsi Ideal Bobot
Pagi 60% 33.3% 0.555
Sore 40% 66.7% 1.667

Hasil analisis

Disini Survei awal menghasilkan 60% responden pagi (40 orang) dan 40% responden sore (20 orang), tapi ini tidak mencerminkan populasi sebenarnya, di mana pengguna sore dua kali lebih banyak (66,67% sore, 33,33% pagi). Penyesuaian dilakukan agar hasil survei akurat. Tanpa penyesuaian, hasil akan bias jika hanya pagi yang lebih banyak. Penyesuaian memastikan data mencerminkan proporsi populasi yang benar untuk wawasan yang valid.

Kesimpulan

Rancangan survei ini menggunakan stratified random sampling untuk efisiensi dan representasi, dengan fokus pada jam sibuk di lokasi strategis. Pembobotan diterapkan untuk menyesuaikan ketidakseimbangan sampel berdasarkan data historis, memastikan hasil yang akurat dan relevan. Dengan rancangan ini, kami dapat menangkap persepsi kenyamanan pengguna ojek online secara andal tanpa survei sepanjang hari.

Soal 3

Anda ditugaskan oleh biro akademik kampus untuk merancang instrumen survei yang bertujuan mengevaluasi kepuasan mahasiswa terhadap layanan akademik, yang mencakup layanan seperti: KRS online, bimbingan akademik, pelayanan administrasi, akses informasi akademik, dan bantuan penyelesaian studi.

Tim peniliti meminta anda untuk:

  • Merancang 25 pertanyaan utama dengan variasi skala dan bentuk pertanyaan.
  • Merancang sistem validasi instrumen
  • Menentukan metode distribusi dan pengujian kuesioner secara statistik.
  • Menyiapkan simulasi strategi pengambilan sampel dan pengolahan data awal.

Output laporan yang diharapkan berbentuk naratif, mencakup:

  • Desain pertanyaan
  • Skema validasi
  • Strategi distribusi dan sampling
  • Simulasi data dan analisis awal

Jawaban

1. Desain Pertanyaan Survei

Survei ini dirancang untuk mengevaluasi kepuasan mahasiswa terhadap layanan akademik di kampus, yang mencakup KRS online, bimbingan akademik, pelayanan administrasi, akses informasi akademik, dan bantuan penyelesaian studi. Laporan ini menyajikan desain instrumen survei, skema validasi, strategi distribusi dan sampling, serta simulasi pengolahan data awal untuk memberikan wawasan tentang kualitas layanan akademik. Survei ini mencakup beberapa aspek penting, yaitu:

  1. KRS Online
  2. Bimbingan Akademik
  3. Pelayanan Administrasi
  4. Akses Informasi Akademik
  5. Bantuan Penyelesaian Studi

Soal soal ini menggunakan Google Form(https://docs.google.com/forms/d/e/1FAIpQLSdpx2_FIXWWQPQO5p3qdwNu7J0kDecAe79YsK8toL1eAaSvqg/viewform?usp=header) yang disebarkan secara online melalui:

  • Grup WhatsApp setiap angkatan
  • Bantuan dosen serta admin fakultas

2. Skema Validasi

Untuk memastikan instrumen valid dan reliabel, kami menerapkan langkah-langkah berikut:

Validitas

1. Validitas Isi:

  • Kuisioner direview oleh ahlinya seperti dosen dan administrasi akademik untuk memastikan pertanyaan mencakup semua aspek layanan akademik.

  • Pertanyaan disesuaikan dengan pedoman standar evaluasi layanan akademik.

2. Validitas Konstruk:

Uji faktor analisis dilakukan pada data uji coba untuk memastikan pertanyaan mengelompok sesuai dimensi yang sudah ditentukan.

3. Validitas Kriteria:

Hasil survei dikorelasikan dengan indikator eksternal, seperti tingkat kelulusan tepat waktu atau keluhan mahasiswa, untuk memastikan korelasi yang signifikan.

Reabilitas

1. Uji Reabilitas:

Uji coba dilakukan untuk mengukur konsistensi internal pertanyaan dalam setiap dimensi.

2. Uji Coba Instrumen:

Kuisioner diuji coba pada 50 mahasiswa untuk mengidentifikasi kelemahan dan memperbaiki instrumen sebelum distribusi skala besar,

3. Strategi Distribusi dan Sampling

Metode Distribusi

1. Media: Kuesioner didistribusikan secara online melalui platform seperti Google Forms atau sistem manajemen pembelajaran kampus.

2. Waktu: Survei dilakukan selama 2 minggu di tengah semester (misalnya, minggu ke-8 hingga ke-10) untuk menangkap pengalaman mahasiswa setelah berinteraksi dengan layanan akademik.

3. Promosi: Pengumuman survei disebarkan melalui email kampus, grup WhatsApp fakultas, dan media sosial kampus.

Strategi Sampling

Menggunakan pendekatan Stratified Random Sampling dengan strata berdasarkan fakultas dan angkatan Mahasiswa.

1. Ukuran Sampel:

  • Populasi : 10.000 Mahasiswa Aktif

  • Ukuran sampel dihitung dengan rumus:

\[ ( n = \frac{N}{1 + N \cdot e^2} ), \text{dengan} ( N = 10.000 ), ( e = 0,05 ) (\text{margin of error 5%}). \]

\[ ( n = \frac{10.000}{1 + 10.000 \cdot 0.0025} \approx 385 ). \]

Target: 400 Responden untuk data yang tidak lengkap.

Alokasi Sampel

  • Strata: 5 Fakultas utama(Sains Data, Informatika, Pertambahan, Perminyakan, Metalurgi) dan 4 angkatan (tahun 1 - 4).

  • Proporsi: Sampel dialokasikan proporsional berdasarkan jumlah mahasiswa per fakultas dan angkatan.

Prosedur

  • Daftar mahasiswa diambil dari database akademik.

  • Mahasiswa dipilih secara acak dari setiap strata menggunakan generator nomor acak.

Pengujian Statistik

  • Uji Validitas

  • Uji Reabilitas

  • Analisis awal: Statistik Deskriptif

4. Simulasi Data dan Analisis awal

Simulasi Data

Untuk simulasi, saya menggunakan kami menghasilkan data sintetis untuk 400 responden, dengan skor Likert (1-5) untuk 20 pertanyaan kuantitatif (pertanyaan 1-4, 6-9, 11-14, 16-19, 21-24). Data untuk setiap dimensi dirangkum sebagai berikut (skor rata-rata per dimensi):

Dimensi Rata-rata skor Standar Deviasi
KRS Online 3.8 0.7
Bimbingan Akademik 3.5 0,8
Pelayanan Administrasi 3.3 0.9
Akses Informasi Akademik 4.0 0.6
Bantuan Penyelesaian Studi 3.6 0.7

Analisis Awal

1. Statistik Deskriptif:

  • KRS Online: Rata-rata 3.8 menunjukkan kepuasan cukup baik, tetapi standar deviasi 0.7 mengindikasikan variasi dalam pengalaman pengguna.

  • Pelayanan Administrasi: Rata-rata 3.3 adalah yang terendah, menunjukkan area yang perlu perbaikan.

  • Akses Informasi Akademik: Rata-rata 4.0 adalah yang tertinggi, menunjukkan kekuatan layanan ini.

2. Analisis Kualitatif: Biasanya ini dari pertanyaan terbuka.

  • Keluhan umum: Prosedur administrasi rumit, waktu respons staf lambat.

  • Saran: Tingkatkan panduan KRS online, tambah sesi bimbingan akademik.

3. Implikasi:

  • Prioritas perbaikan: Pelayanan administrasi dan bimbingan akademik.

  • Kekuatan: Akses informasi akademik dapat dipertahankan atau ditingkatkan.

Kesimpulan

Instrumen survei ini dirancang untuk mengevaluasi kepuasan mahasiswa terhadap layanan akademik dengan 25 pertanyaan yang mencakup lima dimensi utama. Skema validasi memastikan instrumen valid, reliabel melalui uji ahli, dan faktor analisis. Distribusi online dan stratified random sampling memastikan efisiensi dan representasi. Simulasi data menunjukkan bahwa pelayanan administrasi perlu perhatian khusus, sementara akses informasi akademik adalah kekuatan. Rancangan ini siap digunakan untuk pengumpulan data skala besar dan dapat disesuaikan berdasarkan hasil uji coba.

LS0tDQp0aXRsZTogIlVUUyBUZWtuaWsgU2FtcGxpbmcgYW5kIFN1cnZleSINCmF1dGhvcjogDQogIC0gIlphaW4gSXFiYWwgU2FwdXRyYSBOSU0gNTIyNDAwMjQiDQpkYXRlOiAgIkthbWlzLCAxMy8wNC8yMDI1Ig0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICANCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQogICAgbGliX2RpcjogbGlicw0KICAgIDNkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KPGltZyBzcmM9IkdhbWJhci9Gb3RvLmpwZyIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB3aWR0aDozMDBweDsgbWFyZ2luOiBhdXRvOyI+DQoNCiMgU29hbCAxDQpBbmRhaWthbiBhbmRhIGFkYWxhaCBiYWdpYW4gZGFyaSBUaW0gcmlzZXQgbGFwYW5nYW4geWFuZyBkaW1pbnRhIHVudHVrIG1lbGFrdWthbiBzdXJ2ZWkgdGluZ2thdCBwZW5nZ3VuYWFuIGFwbGlrYXNpIHRyYW5wb3J0YXNpIG9ubGluZSBkaSAzIGtvdGEgbWVuZW5nYWggZGkgU3VtYXRlcmEuIFRhcmdldCBzYW1wZWwgdG90YWwgYWRhbGFoIDYwMCByZXNwb25kZW4sIG1hc2luZyBtYXNpbmcgMjAwIHBlciBrb3RhLiBUZXRhcGkgc2V0ZWxhaCAyIG1pbmdndSBtZWxha3VrYW4gc3VydmV5IGFuZGEgbWVuZW11a2FuOg0KLSBEaSBrb3RhIEEsIHRpbSBiZXJoYXNpbCBtZW5kYXBhdGthbiAyNTAgcmVzcG9uZGVuLg0KLSBEaSBrb3RhIEIsIGhhbnlhIDEyMCByZXNwb25kZW4geWFuZyBkYXBhdCBkaSB3YXdhbmNhcmFpLg0KLSBEaSBrb3RhIEMsIDE4MCByZXNwb25kZW4uDQoNCkludHJ1a3NpOg0KDQphLiBKZWxhc2thbiBkdWEgamVuaXMga2VzYWxhaGFuIHNhbXBsaW5nIHlhbmcgdGVyamFkaSBiZXJkYXNhcmthbiBzaXR1YXNpIGluaS4NCmIuIEppa2EgYW5kYSBoYXJ1cyBtZW55ZXN1YWlrYW4gYm9ib3QgdW50dWsgbWVuZ2VtYmFsaWthbiByZXByZXNlbnRhc2kgcHJvcG9yc2lvbmFsLCBiYWdhaW1hbmEgYW5kYSBha2FuIG1lbmdoaXR1bmdueWE/DQoNCiMjIEphd2FiYW4NCiMjIEludHJ1a3NpIEENCg0KRHVhIEplbmlzIGtlc2FsYWhhbiBzYW1wbGluZyB5YW5nIHRlcmphZGkgZGkgcGVuZ3VtcHVsYW4gZGF0YSBpbmkuDQoNCjEuIEtlc2FsYWhhbiBzYW1wbGluZyB0ZXJqYWRpIGthcmVuYSBwZW5ndW1wdWxhbiBkYXRhIHlhbmcgbWVsZWJpaGkgdGFyZ2V0IChLb3RhIFBhbGVtYmFuZykNCkRpIGtvdGEgUGFsZW1iYW5nLCB0aW0gbWVuZ3VtcHVsa2FuIDI1MCByZXNwb25kZW4geWFuZyBzZWhhcnVzbnlhIGhhbnlhIDIwMCByZXNwb25kZW4sIGhhbCBpbmkgbWVueWViYWJrYW4gb3Zlci1yZXByZXNlbnRhdGlvbiwgZGltYW5hIHByb3BvcnNpc2kgcmVzcG9uZGVuIGRhcmkga290YSBBIGxlYmloIGJlc2FyIGRhcmkgdGFyZ2V0LiBBa2liYXRueWEsIGthcmFrdGVyaXN0aWsgS290YSBBIG1lbmd1cmFuZ2kgaGFzaWwgc3VydmVpIGRhcmkga290YSBsYWluLg0KDQoyLiBLZXNhbGFoYW4gc2FtcGxpbmcgdGVyamFkaSBrYXJlbmEgcGVuZ3VtcHVsYW4gZGF0YSB5YW5nIGt1cmFuZyBhdGF1IHRpZGFrIG1lbmNhcGFpIHRhcmdldChLb3RhIFBhbGVtYmFuZyAmIExhbXB1bmcpDQpEaSBrb3RhIExhbXB1bmcgaGFueWEgYWRhIDEyMCByZXNwb25kZW4gZGFuIGRpIGtvdGEgUmlhdSBoYW55YSBhZGEgMTgwIHJlc3BvbmRlbiwgaW5pIG1lbm55ZWJhYmthbiBVbmRlci1yZXByZXNlbnRhdGlvbiwgZGltYW5hIGtlZHVhIGtvdGEgaW5pIGt1cmFuZyBkYXJpIHRhcmdldCBueWEsIGluaSBtZW55ZWJhYmthbiBiaWFzIGthcmVuYSBrYXJha3RlcmlzdGlrIEtvdGEgTGFtcHVuZyBkYW4gUmlhdSBiZXJiZWRhIHNlY2FyYSBzaWduaWZpa2FuIGRlbmdhbiB5YW5nIGJlcmhhc2lsIGRpd2F3YW5jYXJhaS4NCg0KRHVhIGtlc2FsYWhhbiBpbmkgdGlkYWsgc2VpbWJhbmcgYW50YXIga290YSwgZGkga290YSBMYW1wdW5nIGhhbnlhIG1lbmRhcGF0IHNlZGlraXQgcmVzcG9uIGJpc2EgamFkaSBrYXJlbmEgS2VzdWxpdGFuIGFrc2VzIHdpbGF5YWgsIGtldGVyYmF0YXNhbiB0ZW5hZ2Egc3VydmVpIGRpIGxva2FzaSB0ZXJzZWJ1dCwgZGFuIG1pbmltbnlhIG1pbmF0IGtlcGVyY2F5YWFuIHRlcmhhZGFwIHN1cnZlaSBiZWRhIGRlbmdhbiBrb3RhIFBhbGVtYmFuZyB5YW5nIGxlYmloIGJhbnlhayByZXNwb25kZW4gbXVuZ2tpbiBhZGFsYWgga2ViYWxpa2FuIGRhcmkga290YSBMYW1wdW5nLg0KDQojIyBJbnRydWtzaSBCDQojIyMgUGVueWVzdWFpYW4gQm9ib3QgUmVzcG9uZGVuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQoNCiMgRGF0YQ0Ka290YSA8LSBjKCJLb3RhIFBhbGVtYmFuZyIsICJLb3RhIExhbXB1bmciLCAiS290YSBSaWF1IikNCnRhcmdldCA8LSBjKDIwMCwgMjAwLCAyMDApDQpha3R1YWwgPC0gYygyNTAsIDEyMCwgMTgwKQ0KDQojIERhdGEgZnJhbWUNCmRmIDwtIGRhdGEuZnJhbWUoDQogIEtvdGEgPSByZXAoa290YSwgMiksDQogIEp1bWxhaCA9IGModGFyZ2V0LCBha3R1YWwpLA0KICBUaXBlID0gcmVwKGMoIlRhcmdldCIsICJBa3R1YWwiKSwgZWFjaCA9IDMpDQopDQoNCiMgR3JhZmlrIGdncGxvdA0KcCA8LSBnZ3Bsb3QoZGYsIGFlcyh4ID0gS290YSwgeSA9IEp1bWxhaCwgZmlsbCA9IFRpcGUsIHRleHQgPSBwYXN0ZSgiS290YToiLCBLb3RhLCAiPGJyPkp1bWxhaDoiLCBKdW1sYWgpKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnModGl0bGUgPSAiUGVyYmFuZGluZ2FuIFJlc3BvbmRlbiBUYXJnZXQgdnMgQWt0dWFsIiwNCiAgICAgICB4ID0gIktvdGEiLA0KICAgICAgIHkgPSAiSnVtbGFoIFJlc3BvbmRlbiIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygic3RlZWxibHVlIiwgIm9yYW5nZSIpKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIEtvbnZlcnNpIGphZGkgcGxvdGx5IGludGVyYWt0aWYNCmdncGxvdGx5KHAsIHRvb2x0aXAgPSAidGV4dCIpDQoNCmBgYA0KDQoqKlJ1bXVzIEJvYm90OioqDQokJA0KXHRleHR7Qm9ib3QgUGVueWVzdWFpYW59PVxmcmFje1x0ZXh0e1Byb3BvcnNpIFRhcmdldH19e1x0ZXh0e1Byb3BvcnNpIEFrdHVhbH19DQokJA0KDQoqKkhhc2lsIFBlcmhpdHVuZ2FuOioqDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQoNCiNEYXRhDQpkYXRhIDwtIGRhdGEuZnJhbWUgKA0KICBgS290YWAgPSBjKCJQYWxlbWJhbmciLCAiTGFtcHVuZyIsICJSaWF1IiksDQogIGBSZXNwb25kZW4gQWt0dWFsYCA9IGMoJzI1MCcsJzEyMCcsJzE4MCcpLA0KICBgUHJvcG9yc2kgQWt0dWFsYCA9IGMoIjI1MCAvIDU1MCA9IDAuNDU1IiwgIjEyMCAvIDU1MCA9IDAsMjE4IiwgIjE4MCAvIDU1MCA9IDAsMzI3IiksDQogIGBQcm9wb3JzaSBUYXJnZXRgID0gYygiMC4zMzMiLCIwLjMzMyIsIjAuMzMzIiksDQogIGBCb2JvdCBQZW55ZXN1YWlhbmAgPSBjKCIwLDMzMyAvIDAsNDU1ID0gMCw3MzIiLCAiMCwzMzMgLyAwLDIxOCA9IDEsNTI3IiwgIjAsMzMzIC8gMCwzMjcgPSAxLDAxOCIpDQopDQojQ2V0YWsgVGFiZWwNCmthYmxlKGRhdGEsIGNvbC5uYW1lcyA9IGMoIktvdGEiLCAiUmVzcG9uZGVuIEFrdHVhbCIsICJQcm9wb3JzaSBBa3R1YWwiLCAiUHJvcG9yc2kgVGFyZ2V0IiwgIiBCb2JvdCBQZW55ZXN1YWlhbiIpKQ0KYGBgDQoNCiMjIyBJbnRlcnByZXRhc2kgQm9ib3QNCi0gS290YSBQYWxlbWJhbmcga2VsZWJpaGFuIHJlc3BvbmRlbiwgbWFrYSBib2JvdG55YSBkaWt1cmFuZ2kNCi0gS290YSBMYW1wdW5nIGtla3VyYW5nYW4gcmVzcG9uZGVuLCBtYWthIGJvYm90bnlhIGRpdGFtYmFoDQotIEtvdGEgUmlhdSBoYW1waXIgc2VtcHVybmEgdGFwaSBtYXNpaCBrZWt1cmFuZ2FuIHJlc3BvbmRlbiwgc2VoaW5nZ2EgaGFueWEgc2VkaWtpdCBwZW55ZXN1YWlhbg0KDQojIyMgTGFtcGlyYW4gdGFtYmFoYW46IFJlZmxla3NpIGRhbiBzYXJhbiBwZW5ndWF0YW4gc3VydmVpDQoNCiMjIyMgMS4gTWVuZ2d1bmFrYW4gbGFuZ2thaCBtaXRpZ2FzaSB1bnR1ayBzdXJ2ZWkgbWVuZGF0YW5nDQpCZXJkYXNhcmthbiBkYWxhbSBzdXJ2ZWkgaW5pLCB0ZXJkYXBhdCB0YW50YW5nYW4geWFuZyB0ZXJsaWhhdCBzZXBlcnRpIGtlc3VsaXRhbiBtZW5qYXVuZ2thdSByZXNwb25kZW4gZGkga290YSBMYW1wdW5nIGRhbiBrZWxlYmloYW4gZGF0YSBkaSBrb3RhIFBhbGVtYmFuZywgbWl0aWdhc2kgYmVyaWt1dCBhZ2FyIHN1cnZlaSB5YW5nIGFrYW4gZGF0YW5nIGJpc2EgYmVyamFsYW4gZGVuZ2FuIGVmZWt0aWYgZGFuIGp1Z2EgcHJvcG9yc2lvbmFsOg0KDQoxLiBQZW1hbnRhdWFuIFJlYWwtVGltZSBqdW1sYWggcmVzcG9uZGVuIHBlciB3aWxheWFoDQpHdW5ha2FuIGRhc2hib2FyZCBzZWRlcmhhbmEgdW50dWsgbWVtYW50YXUgcHJvZ3JlcyBoYXJpYW4gcGVyIGtvdGEsIHNlaGluZ2dhIGJpc2EgZGlsYWt1a2FuIHBlbnllc3VhaWFuIGNlcGF0IGJpbGEgdGVyamFkaSBrZWxlYmloYW4gYXRhdSBrZWt1cmFuZ2FuIHNhbXBlbC4NCg0KMi4gS29tYmluYXNpIE1ldG9kZSBzdXJ2ZWkNCk1lbmdnYWJ1bmdrYW4gd2F3YW5jYXJhIGxhbmdzdW5nIGRhbiBqdWdhIHdhd2FuY2FyYSBvbmxpbmUgdW50dWsgbWVuamFuZ2thdSB3aWxheWFoIHlhbmcgc3VsaXQgZGlha3NlcyBzZWNhcmEgZmlzaWsuDQoNCjMuIFBlbmRla2F0YW4gU29zaWFsIEJ1ZGF5YSBsb2thbA0KU2VwZXJ0aSBtZWxpYmF0a2FuIHRva29oIG1hc3lhcmFrYXQgc2VwZXJ0aSBrZXR1YSBSVC9SVyBhdGF1IGtvbXVuaXRhcyBsb2thbCB1bnR1ayBtZW5pbmdrYXRrYW4ga2VwZXJjYXlhYW4gZGFuIHBhcnRpc2lwYXNpIHJlc3BvbmRlbg0KDQojIyMjIDIuIFJla29tZW5kYXNpIEtlYmlqYWthbg0KQmViZXJhcGEgcmVrb21lbmRhc2kga2ViaWpha2FuIG1lbnVydXQgc2F5YSwgeWFpdHU6DQoNCjEuIFBlcmVuY2FuYWFuIHN1cnZlaSBsZWJpaCBkZXRhaWwgZGkgdGlhcCB3aWxheWFoDQpTZXRpYXAga290YSBtZW1pbGlraSB0YW50YW5nYW4gZGFsYW0gcGVuZ3VtcHVsYW4gZGF0YS4gTWFrYSBkYXJpIGl0dSwgcGVybHUgZGlwZXJsdWthbiBzdHVkaSBhd2FsIHVudHVrIG1lbmdldGFodWkgYXBha2FoIGFkYSBoYW1iYXRhbiBhdGF1IHRpZGFrIHNlYmVsdW0gc3VydmVpIGJlc2FyIGRpbGFrdWthbi4NCg0KMi4gTGFwb3JhbiBzdXJ2ZWkgSGFydXMgbWVueWVydGFrYW4gYm9ib3QgZGFuIHBlbmplbGFzYW5ueWENCkFnYXIgaGFzaWwgc3VydmVpIGluaSBkYXBhdCBkaWd1bmFrYW4gb2xlaCBwZW1idWF0IGtlYmlqYWthbiBkZW5nYW4gcGVtYWhhbWFuIHlhbmcgdXR1aCBtZW5nZW5haSBrZWt1YXRhbiBkYW4ga2V0ZXJiYXRhc2FuIGRhdGFueWEuDQoNCjMuIEV2YWx1YXNpIHRpbSBsYXBhbmdhbg0KU2V0aWFwIHN1cnZlaSBwZXJsdSBkaXR1dHVwIGRlbmdhbiBldmFsdWFzaSBpbnRlcm5hbCBhZ2FyIGtlZHVhIHBlcm1hc2FsYWhhbiBpbmkgdGlkYWsgdGVydWxhbmcgbGFnaS4NCg0KIyBTb2FsIDINCkJ1YXRsYWggZGVzYWluIHJhbmNhbmdhbiBzdXJ2ZWkgdGVudGFuZyBwZXJzZXBzaSBrZW55YW1hbmFuIHBlbmdndW5hIG9qZWsgb25saW5lIHNhYXQgamFtIHNpYnVrICgwNy4wMC0wOS4wMCBkYW4gMTcuMDAtMTkuMDApDQoNCkludHJ1a3NpOg0KDQphLiBEZXNhaW4gcGVuZGFrYXRhbiBzYW1waW5nIHlhbmcgbWVtdW5na2lua2FuIGFuZGEgbWVuYW5na2FwIHBlcnNlcHNpIHBlbmdndW5hIHNlY2FyYSByZXByZXNlbnRhdGlmIHBhZGEgamFtIHNpYnVrLCB0YW5wYSBtZWxha3VrYW4gc3VydmVpIHNlcGFuamFuZyBoYXJpLg0KYi4gU2VydGFrYW4gcmFuY2FuZ2FuIHdha3R1LCBtZXRvZGUgcGVtaWxpaGFuIHJlc3BvbmRlbiwgZGFuIGp1c3RpZmlrYXNpIHBlbWlsaWhhbiB1bml0IHNhbXBpbmcuDQpjLiBKZWxhc2thbiBiYWdhaW1hbmEgYW5kYSBha2FuIG1lbnllc3VhaWthbiBoYXNpbCBzdXJ2ZWkgamlrYSA2MCUgcmVzcG9uZGVuIGJlcmFzYWwgZGFyaSBwYWdpIGhhcmksIHNlbWVudGFyYSA0MCUgYmVyYXNhbCBkYXJpIHNvcmUgaGFyaSwgc2VkYW5na2FuIGRhdGEgaGlzdG9yaXMgbWVudW5qdWtrYW4gcGVuZ2d1bmEgb2playBvbmxpbmUgc2FhdCBzb3JlIGhhcmkgZHVhIGthbGkgbGViaWggYmFueWFrIGRpYmFuZGluZyBwYWdpLg0KDQojIyBKYXdhYmFuDQojIyBJbnRydWtzaSBBIChQZW5kZWthdGFuIHNhbXBpbmcpDQoNClVudHVrIG1lbmFuZ2thcCBwZXJzZXBzaSBrZW55YW1hbmFuIHBlbmdndW5hIG9qZWsgb25saW5lIHNlY2FyYSByZXByZXNlbnRhdGlmIHBhZGEgamFtIHNpYnVrICgwNy4wMC0wOS4wMCBkYW4gMTcuMDAtMTkuMDApIHRhbnBhIHN1cnZlaSBzZXBhbmphbmcgaGFyaSwgc2F5YSBtZW5nZ3VuYWthbiBzdHJhdGlmaWVkIHJhbmRvbSBzYW1wbGluZyBkZW5nYW4gc3RyYXRhIGJlcmRhc2Fya2FuIHdha3R1IGphbSBzaWJ1ayAocGFnaSBkYW4gc29yZSkuIFBlbmRla2F0YW4gaW5pIG1lbWFzdGlrYW4gYmFod2EgcGVuZ2d1bmEgZGFyaSBrZWR1YSBwZXJpb2RlIHdha3R1IHRlcndha2lsaSwgZGVuZ2FuIGZva3VzIGhhbnlhIHBhZGEgamFtIHNpYnVrIHVudHVrIGVmaXNpZW5zaS4gU3VydmVpIGRpbGFrdWthbiBkaSBsb2thc2ktbG9rYXNpIHN0cmF0ZWdpcyBzZXBlcnRpIHN0YXNpdW4ga2VyZXRhLCBoYWx0ZSBidXMsIGF0YXUgcHVzYXQgcGVya2FudG9yYW4sIHRlbXBhdCBwZW5nZ3VuYSBvamVrIG9ubGluZSBjZW5kZXJ1bmcgYmVya3VtcHVsLg0KDQpTdHJhdGlmaWVkIHJhbmRvbSBzYW1wbGluZyBhZGFsYWggbWV0b2RlIHBlbmdhbWJpbGFuIHNhbXBlbCB5YW5nIG1lbWJhZ2kgcG9wdWxhc2kgbWVuamFkaSBiZWJlcmFwYSBzdHJhdGEgYXRhdSBrZWxvbXBvayBrZWNpbCBiZXJkYXNhcmthbiBrYXJha3RlcmlzdGlrIHRlcnRlbnR1IHlhbmcgcmVsZXZhbi4gU2V0ZWxhaCBwb3B1bGFzaSBkaWJhZ2ksIHNhbXBlbCBhY2FrIGRpYW1iaWwgZGFyaSBzZXRpYXAgc3RyYXRhIHVudHVrIG1lbmluZ2thdGthbiByZXByZXNlbnRhc2kgc2V0aWFwIGtlbG9tcG9rIGRhbGFtIGtlc2VsdXJ1aGFuIHBvcHVsYXNpLiBNZXRvZGUgaW5pIG1lbWJhbnR1IHBlbmVsaXRpIGRhbGFtIG1lbmVudHVrYW4gc2FtcGVsIHlhbmcgbGViaWggZWZla3RpZiBkYW4gdGVyc3RydWt0dXIuDQoNCioqSnVzdGlmaWthc2k6KioNCg0KLSAqKkVmaXNpZW5zaSBXYWt0dToqKiBGb2t1cyBwYWRhIGphbSBzaWJ1ayBtZW5ndXJhbmdpIGtlYnV0dWhhbiB1bnR1ayBzdXJ2ZWkgc2VwYW5qYW5nIGhhcmksIHNlaGluZ2dhIGxlYmloIGhlbWF0IHN1bWJlciBkYXlhDQoNCi0gKipSZXByZXNlbnRhc2k6KiogU3RyYXRpZmlrYXNpIGJlcmRhc2Fya2FuIHdha3R1IG1lbWFzdGlrYW4gcGVuZ2d1bmEgcGFnaSBkYW4gc29yZSB0ZXJ3YWtpbGksIG1lbmdpbmdhdCBwZXJiZWRhYW4gcGVyaWxha3UgYXRhdSBwZW5nYWxhbWFuIGRpIGtlZHVhIHdha3R1Lg0KDQotICoqQWtzZWJpbGl0YXM6KiogTG9rYXNpIHN0cmF0ZWdpcyBtZW11ZGFoa2FuIGFrc2VzIGtlIHBlbmdndW5hIG9qZWsgb25saW5lIHlhbmcgYmFydSBtZW55ZWxlc2Fpa2FuIHBlcmphbGFuYW4sIHNlaGluZ2dhIHBlcnNlcHNpIG1lcmVrYSBtYXNpaCBzZWdhci4NCg0KIyMgSW50cnVrc2kgQiAoUmFuY2FuZ2FuIFdha3R1KQ0KDQoqKjEuIEphZHdhbCBTdXJ2ZWk6KioNCg0KLSAqKlBhZ2kqKiA6IDA3LjAwIC0gMDkuMDANCg0KLSAqKlNvcmUqKiA6IDE3LjAwIC0gMTkuMDANCg0KKioyLiBNZXRvZGUgUGVtaWxpaGFuIFJlc3BvbmRlbjoqKg0KDQotIFBldHVnYXMgc3VydmVpIGRpdGVtcGF0a2FuIGRpIGxva2FzaSBzZXBlcnRpIHN0YXNpdW4ga2VyZXRhLCBoYWx0ZSBidXMsIHVuaXZlcnNpdGFzLCBhdGF1IHB1c2F0IHBlcmthbnRvcmFuLg0KDQotIFJlc3BvbmRlbiBkaXBpbGloIHNlY2FyYSBzaXN0ZW1hdGlzLCBtaXNhbG55YSBzZXRpYXAgaW50ZXJ2YWwgd2FrdHUgdGVydGVudHUgYXRhdSBiZXJkYXNhcmthbiB1cnV0YW4gcGVuZ2d1bmEgYXBsaWthc2kuDQoNCioqMy4gTWV0b2RlIFBlbmd1bXB1bGFuIERhdGE6KioNCg0KLSBXYXdhbmNhcmEgbGFuZ3N1bmcgc2VjYXJhIHNpbmdrYXQgMy01IG1lbml0IGRlbmdhbiBwZXJ0YW55YWFuIHRlbnRhbmcga2VueWFtYW5hbiwgd2FrdHUgdHVuZ2d1LCBrZWFtYW5hbiwgZGFuIGtlcHVhc2FuIGtlc2VsdXJ1aGFuLg0KDQotIE1lbmdndW5ha2FuIGxva2FzaSBzdHJhdGVnaXMgZGFuIGFwbGlrYXNpIGxhbmdzdW5nIG1lbmluZ2thdGthbiBwcm9iYWJpbGl0YXMgbWVuZGFwYXRrYW4gcmVzcG9uZGVuIHlhbmcgdGVwYXQuDQoNCi0gVGFyZ2V0IDYwIHJlc3BvbmRlbiB1bnR1ayBkaSB3YXdhbmNhcmFpIGRpIHBhZ2kgZGFuIHNvcmUgaGFyaQ0KDQojIyBJbnRydWtzaSBDIChQZW55ZXNldWFpYW4gaGFzaWwgc3VydmVpKQ0KDQpKaWthIGhhc2lsIHN1cnZlaSBtZW51bmp1a2thbiA2MCUoNDAgcmVzcG9uZGVuKSByZXNwb25kZW4gZGFyaSBwYWdpIGRhbiA0MCUoMjAgcmVzcG9uZGVuKSBkYXJpIHNvcmUsIHRldGFwaSBkYXRhIGhpc3RvcmlzIG1lbnVuanVra2FuIHBlbmdndW5hIHNvcmUgZHVhIGthbGkgbGViaWggYmFueWFrIGRhcmlwYWRhIHBhZ2ksIHNheWEgYWthbiBtZW5lcmFwa2FuIHBlbWJvYm90YW4gKHdlaWdodGluZykgdW50dWsgbWVueWVzdWFpa2FuIGhhc2lsIGFnYXIgbWVuY2VybWlua2FuIGRpc3RyaWJ1c2kgcG9wdWxhc2kgeWFuZyBzZWJlbmFybnlhLg0KDQoqKjEuIFJlc3BvbmRlbjoqKg0KDQotICoqUGFnaToqKiA2MCUNCg0KLSAqKlNvcmU6KiogNDAlDQoNCioqMi4gRGF0YSBIaXN0b3JpczoqKg0KDQotIEp1bWxhaCBwZW5nZ3VuYSBzb3JlIGR1YSBrYWxpIGxlYmloIGJhbnlhayBkYXJpIHBhZ2kgaGFyaS4NCg0KLSBJZGVhbG55YSBkaXN0cmlidXNpOiAzMy4zJSBwYWdpIGRhbiA2Ni43JSBwYWdpLg0KDQoqKjMuIExhbmdrYWggUGVueWVzdWFpYW46KioNCg0KKipQcm9wb3JzaXNpIFBvcHVsYXNpOioqDQoNCi0gKipQYWdpOioqIDEvMyA9IDMzLjMzJQ0KDQotICoqU29yZToqKiAyLzMgPSA2Ni42NyUNCg0KKipQcm9wb3JzaXNpIFNhbXBlbDoqKg0KDQotICoqUGFnaToqKiA2MCUgPSAwLjYNCg0KLSAqKlNvcmU6KiogNDAlID0gMC40DQoNCioqUnVtdXMgQm9ib3Q6KioNCg0KJCQNClx0ZXh0e0JvYm90fT1cZnJhY3tcdGV4dHtQcm9wb3JzaXNpIFBvcHVsYXNpfX17XHRleHR7UHJvcG9yc2lzaSBTYW1wZWx9fQ0KJCQNCg0KLSAqKlBhZ2k6KiogDQokJA0KXHRleHR7UGFnaX09XGZyYWN7KDEvMyl9ezAuNn09XGZyYWN7MC4zMzN9ezAuNn09MC41NTUNCiQkDQoNCi0gKipTb3JlOioqDQokJA0KXHRleHR7U29yZX09XGZyYWN7Mi8zfXswLjR9PVxmcmFjezAuNjY3fXswLjR9PTEuNjY3DQokJA0KDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KDQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIGBXYWt0dWAgPSBjKCJQYWdpIiwgIlNvcmUiKSwNCiAgYFByb3BvcnNpIFJlc3BvbmRlbmAgPSBjKCc2MCUnLCc0MCUnKSwNCiAgYFByb3BvcnNpIElkZWFsYCA9IGMoJzMzLjMlJywgJzY2LjclJyksDQogIGBCb2JvdGAgPSBjKCcwLjU1NScsICcxLjY2NycpDQopDQoNCmthYmxlKGRhdGEsIGNvbC5uYW1lcyA9IGMoIldha3R1IiwgIlByb3BvcnNpIFJlc3BvbmRlbiIsICJQcm9wb3JzaSBJZGVhbCIsICJCb2JvdCIgKSkNCmBgYA0KDQojIyBIYXNpbCBhbmFsaXNpcw0KDQpEaXNpbmkgU3VydmVpIGF3YWwgbWVuZ2hhc2lsa2FuIDYwJSByZXNwb25kZW4gcGFnaSAoNDAgb3JhbmcpIGRhbiA0MCUgcmVzcG9uZGVuIHNvcmUgKDIwIG9yYW5nKSwgdGFwaSBpbmkgdGlkYWsgbWVuY2VybWlua2FuIHBvcHVsYXNpIHNlYmVuYXJueWEsIGRpIG1hbmEgcGVuZ2d1bmEgc29yZSBkdWEga2FsaSBsZWJpaCBiYW55YWsgKDY2LDY3JSBzb3JlLCAzMywzMyUgcGFnaSkuIFBlbnllc3VhaWFuIGRpbGFrdWthbiBhZ2FyIGhhc2lsIHN1cnZlaSBha3VyYXQuIFRhbnBhIHBlbnllc3VhaWFuLCBoYXNpbCBha2FuIGJpYXMgamlrYSBoYW55YSBwYWdpIHlhbmcgbGViaWggYmFueWFrLiBQZW55ZXN1YWlhbiBtZW1hc3Rpa2FuIGRhdGEgbWVuY2VybWlua2FuIHByb3BvcnNpIHBvcHVsYXNpIHlhbmcgYmVuYXIgdW50dWsgd2F3YXNhbiB5YW5nIHZhbGlkLg0KDQojIyBLZXNpbXB1bGFuDQoNClJhbmNhbmdhbiBzdXJ2ZWkgaW5pIG1lbmdndW5ha2FuIHN0cmF0aWZpZWQgcmFuZG9tIHNhbXBsaW5nIHVudHVrIGVmaXNpZW5zaSBkYW4gcmVwcmVzZW50YXNpLCBkZW5nYW4gZm9rdXMgcGFkYSBqYW0gc2lidWsgZGkgbG9rYXNpIHN0cmF0ZWdpcy4gUGVtYm9ib3RhbiBkaXRlcmFwa2FuIHVudHVrIG1lbnllc3VhaWthbiBrZXRpZGFrc2VpbWJhbmdhbiBzYW1wZWwgYmVyZGFzYXJrYW4gZGF0YSBoaXN0b3JpcywgbWVtYXN0aWthbiBoYXNpbCB5YW5nIGFrdXJhdCBkYW4gcmVsZXZhbi4gRGVuZ2FuIHJhbmNhbmdhbiBpbmksIGthbWkgZGFwYXQgbWVuYW5na2FwIHBlcnNlcHNpIGtlbnlhbWFuYW4gcGVuZ2d1bmEgb2playBvbmxpbmUgc2VjYXJhIGFuZGFsIHRhbnBhIHN1cnZlaSBzZXBhbmphbmcgaGFyaS4NCg0KIyBTb2FsIDMNCkFuZGEgZGl0dWdhc2thbiBvbGVoIGJpcm8gYWthZGVtaWsga2FtcHVzIHVudHVrIG1lcmFuY2FuZyBpbnN0cnVtZW4gc3VydmVpIHlhbmcgYmVydHVqdWFuIG1lbmdldmFsdWFzaSBrZXB1YXNhbiBtYWhhc2lzd2EgdGVyaGFkYXAgbGF5YW5hbiBha2FkZW1paywgeWFuZyBtZW5jYWt1cCBsYXlhbmFuIHNlcGVydGk6IEtSUyBvbmxpbmUsIGJpbWJpbmdhbiBha2FkZW1paywgcGVsYXlhbmFuIGFkbWluaXN0cmFzaSwgYWtzZXMgaW5mb3JtYXNpIGFrYWRlbWlrLCBkYW4gYmFudHVhbiBwZW55ZWxlc2FpYW4gc3R1ZGkuDQoNClRpbSBwZW5pbGl0aSBtZW1pbnRhIGFuZGEgdW50dWs6DQoNCi0gTWVyYW5jYW5nIDI1IHBlcnRhbnlhYW4gdXRhbWEgZGVuZ2FuIHZhcmlhc2kgc2thbGEgZGFuIGJlbnR1ayBwZXJ0YW55YWFuLg0KLSBNZXJhbmNhbmcgc2lzdGVtIHZhbGlkYXNpIGluc3RydW1lbg0KLSBNZW5lbnR1a2FuIG1ldG9kZSBkaXN0cmlidXNpIGRhbiBwZW5ndWppYW4ga3Vlc2lvbmVyIHNlY2FyYSBzdGF0aXN0aWsuDQotIE1lbnlpYXBrYW4gc2ltdWxhc2kgc3RyYXRlZ2kgcGVuZ2FtYmlsYW4gc2FtcGVsIGRhbiBwZW5nb2xhaGFuIGRhdGEgYXdhbC4NCg0KT3V0cHV0IGxhcG9yYW4geWFuZyBkaWhhcmFwa2FuIGJlcmJlbnR1ayBuYXJhdGlmLCBtZW5jYWt1cDoNCg0KLSBEZXNhaW4gcGVydGFueWFhbg0KLSBTa2VtYSB2YWxpZGFzaQ0KLSBTdHJhdGVnaSBkaXN0cmlidXNpIGRhbiBzYW1wbGluZw0KLSBTaW11bGFzaSBkYXRhIGRhbiBhbmFsaXNpcyBhd2FsDQoNCiMjIEphd2FiYW4gDQoNCiMjIDEuIERlc2FpbiBQZXJ0YW55YWFuIFN1cnZlaQ0KDQpTdXJ2ZWkgaW5pIGRpcmFuY2FuZyB1bnR1ayBtZW5nZXZhbHVhc2kga2VwdWFzYW4gbWFoYXNpc3dhIHRlcmhhZGFwIGxheWFuYW4gYWthZGVtaWsgZGkga2FtcHVzLCB5YW5nIG1lbmNha3VwIEtSUyBvbmxpbmUsIGJpbWJpbmdhbiBha2FkZW1paywgcGVsYXlhbmFuIGFkbWluaXN0cmFzaSwgYWtzZXMgaW5mb3JtYXNpIGFrYWRlbWlrLCBkYW4gYmFudHVhbiBwZW55ZWxlc2FpYW4gc3R1ZGkuIExhcG9yYW4gaW5pIG1lbnlhamlrYW4gZGVzYWluIGluc3RydW1lbiBzdXJ2ZWksIHNrZW1hIHZhbGlkYXNpLCBzdHJhdGVnaSBkaXN0cmlidXNpIGRhbiBzYW1wbGluZywgc2VydGEgc2ltdWxhc2kgcGVuZ29sYWhhbiBkYXRhIGF3YWwgdW50dWsgbWVtYmVyaWthbiB3YXdhc2FuIHRlbnRhbmcga3VhbGl0YXMgbGF5YW5hbiBha2FkZW1pay4gU3VydmVpIGluaSBtZW5jYWt1cCBiZWJlcmFwYSBhc3BlayBwZW50aW5nLCB5YWl0dToNCg0KMS4gS1JTIE9ubGluZQ0KMi4gQmltYmluZ2FuIEFrYWRlbWlrDQozLiBQZWxheWFuYW4gQWRtaW5pc3RyYXNpDQo0LiBBa3NlcyBJbmZvcm1hc2kgQWthZGVtaWsNCjUuIEJhbnR1YW4gUGVueWVsZXNhaWFuIFN0dWRpDQoNClNvYWwgc29hbCBpbmkgbWVuZ2d1bmFrYW4gR29vZ2xlIEZvcm0oaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC9lLzFGQUlwUUxTZHB4Ml9GSVhXV1FQUU81cDNxZHdOdTdKMGtEZWNBZTc5WXNLOHRvTDFlQWFTdnFnL3ZpZXdmb3JtP3VzcD1oZWFkZXIpIHlhbmcgZGlzZWJhcmthbiBzZWNhcmEgb25saW5lIG1lbGFsdWk6DQoNCi0gR3J1cCBXaGF0c0FwcCBzZXRpYXAgYW5na2F0YW4NCi0gQmFudHVhbiBkb3NlbiBzZXJ0YSBhZG1pbiBmYWt1bHRhcw0KDQojIyAyLiBTa2VtYSBWYWxpZGFzaQ0KDQpVbnR1ayBtZW1hc3Rpa2FuIGluc3RydW1lbiB2YWxpZCBkYW4gcmVsaWFiZWwsIGthbWkgbWVuZXJhcGthbiBsYW5na2FoLWxhbmdrYWggYmVyaWt1dDoNCg0KIyMjIFZhbGlkaXRhcw0KDQoqKjEuIFZhbGlkaXRhcyBJc2k6KioNCg0KLSBLdWlzaW9uZXIgZGlyZXZpZXcgb2xlaCBhaGxpbnlhIHNlcGVydGkgZG9zZW4gZGFuIGFkbWluaXN0cmFzaSBha2FkZW1payB1bnR1ayBtZW1hc3Rpa2FuIHBlcnRhbnlhYW4gbWVuY2FrdXAgc2VtdWEgYXNwZWsgbGF5YW5hbiBha2FkZW1pay4NCg0KLSBQZXJ0YW55YWFuIGRpc2VzdWFpa2FuIGRlbmdhbiBwZWRvbWFuIHN0YW5kYXIgZXZhbHVhc2kgbGF5YW5hbiBha2FkZW1pay4NCg0KKioyLiBWYWxpZGl0YXMgS29uc3RydWs6KioNCg0KICBVamkgZmFrdG9yIGFuYWxpc2lzIGRpbGFrdWthbiBwYWRhIGRhdGEgdWppIGNvYmEgdW50dWsgbWVtYXN0aWthbiBwZXJ0YW55YWFuIG1lbmdlbG9tcG9rIHNlc3VhaSBkaW1lbnNpIHlhbmcgc3VkYWggZGl0ZW50dWthbi4NCg0KKiozLiBWYWxpZGl0YXMgS3JpdGVyaWE6KioNCg0KICBIYXNpbCBzdXJ2ZWkgZGlrb3JlbGFzaWthbiBkZW5nYW4gaW5kaWthdG9yIGVrc3Rlcm5hbCwgc2VwZXJ0aSB0aW5na2F0IGtlbHVsdXNhbiB0ZXBhdCAgd2FrdHUgYXRhdSBrZWx1aGFuIG1haGFzaXN3YSwgdW50dWsgbWVtYXN0aWthbiBrb3JlbGFzaSB5YW5nIHNpZ25pZmlrYW4uDQogIA0KIyMjIFJlYWJpbGl0YXMNCg0KKioxLiBVamkgUmVhYmlsaXRhczoqKg0KDQogIFVqaSBjb2JhIGRpbGFrdWthbiB1bnR1ayBtZW5ndWt1ciBrb25zaXN0ZW5zaSBpbnRlcm5hbCBwZXJ0YW55YWFuIGRhbGFtIHNldGlhcCBkaW1lbnNpLg0KICANCioqMi4gVWppIENvYmEgSW5zdHJ1bWVuOioqDQoNCiAgS3Vpc2lvbmVyIGRpdWppIGNvYmEgcGFkYSA1MCBtYWhhc2lzd2EgdW50dWsgbWVuZ2lkZW50aWZpa2FzaSBrZWxlbWFoYW4gZGFuIG1lbXBlcmJhaWtpIGluc3RydW1lbiBzZWJlbHVtIGRpc3RyaWJ1c2kgc2thbGEgYmVzYXIsDQogIA0KIyMgMy4gU3RyYXRlZ2kgRGlzdHJpYnVzaSBkYW4gU2FtcGxpbmcNCg0KIyMjIE1ldG9kZSBEaXN0cmlidXNpDQoNCioqMS4gTWVkaWE6KiogS3Vlc2lvbmVyIGRpZGlzdHJpYnVzaWthbiBzZWNhcmEgb25saW5lIG1lbGFsdWkgcGxhdGZvcm0gc2VwZXJ0aSBHb29nbGUgRm9ybXMgYXRhdSBzaXN0ZW0gbWFuYWplbWVuIHBlbWJlbGFqYXJhbiBrYW1wdXMuDQoNCioqMi4gV2FrdHU6KiogU3VydmVpIGRpbGFrdWthbiBzZWxhbWEgMiBtaW5nZ3UgZGkgdGVuZ2FoIHNlbWVzdGVyIChtaXNhbG55YSwgbWluZ2d1IGtlLTggaGluZ2dhIGtlLTEwKSB1bnR1ayBtZW5hbmdrYXAgcGVuZ2FsYW1hbiBtYWhhc2lzd2Egc2V0ZWxhaCBiZXJpbnRlcmFrc2kgZGVuZ2FuIGxheWFuYW4gYWthZGVtaWsuDQoNCioqMy4gUHJvbW9zaToqKiBQZW5ndW11bWFuIHN1cnZlaSBkaXNlYmFya2FuIG1lbGFsdWkgZW1haWwga2FtcHVzLCBncnVwIFdoYXRzQXBwIGZha3VsdGFzLCBkYW4gbWVkaWEgc29zaWFsIGthbXB1cy4NCg0KIyMjIFN0cmF0ZWdpIFNhbXBsaW5nDQoNCk1lbmdndW5ha2FuIHBlbmRla2F0YW4gKipTdHJhdGlmaWVkIFJhbmRvbSBTYW1wbGluZyoqIGRlbmdhbiBzdHJhdGEgYmVyZGFzYXJrYW4gZmFrdWx0YXMgZGFuIGFuZ2thdGFuIE1haGFzaXN3YS4NCg0KKioxLiBVa3VyYW4gU2FtcGVsOioqDQoNCi0gUG9wdWxhc2kgOiAxMC4wMDAgTWFoYXNpc3dhIEFrdGlmDQoNCi0gVWt1cmFuIHNhbXBlbCBkaWhpdHVuZyBkZW5nYW4gcnVtdXM6DQoNCiQkDQooIG4gPSBcZnJhY3tOfXsxICsgTiBcY2RvdCBlXjJ9ICksIFx0ZXh0e2Rlbmdhbn0gKCBOID0gMTAuMDAwICksICggZSA9IDAsMDUgKSAoXHRleHR7bWFyZ2luIG9mIGVycm9yIDUlfSkuDQokJA0KDQokJA0KKCBuID0gXGZyYWN7MTAuMDAwfXsxICsgMTAuMDAwIFxjZG90IDAuMDAyNX0gXGFwcHJveCAzODUgKS4NCiQkDQoNClRhcmdldDogNDAwIFJlc3BvbmRlbiB1bnR1ayBkYXRhIHlhbmcgdGlkYWsgbGVuZ2thcC4NCg0KIyMjIEFsb2thc2kgU2FtcGVsDQoNCi0gU3RyYXRhOiA1IEZha3VsdGFzIHV0YW1hKFNhaW5zIERhdGEsIEluZm9ybWF0aWthLCBQZXJ0YW1iYWhhbiwgUGVybWlueWFrYW4sIE1ldGFsdXJnaSkgZGFuIDQgYW5na2F0YW4gKHRhaHVuIDEgLSA0KS4NCg0KLSBQcm9wb3JzaTogU2FtcGVsIGRpYWxva2FzaWthbiBwcm9wb3JzaW9uYWwgYmVyZGFzYXJrYW4ganVtbGFoIG1haGFzaXN3YSBwZXIgZmFrdWx0YXMgZGFuIGFuZ2thdGFuLg0KDQojIyMgUHJvc2VkdXINCg0KLSBEYWZ0YXIgbWFoYXNpc3dhIGRpYW1iaWwgZGFyaSBkYXRhYmFzZSBha2FkZW1pay4NCg0KLSBNYWhhc2lzd2EgZGlwaWxpaCBzZWNhcmEgYWNhayBkYXJpIHNldGlhcCBzdHJhdGEgbWVuZ2d1bmFrYW4gZ2VuZXJhdG9yIG5vbW9yIGFjYWsuDQoNCiMjIyBQZW5ndWppYW4gU3RhdGlzdGlrDQoNCi0gVWppIFZhbGlkaXRhcw0KDQotIFVqaSBSZWFiaWxpdGFzDQoNCi0gQW5hbGlzaXMgYXdhbDogU3RhdGlzdGlrIERlc2tyaXB0aWYNCg0KIyMgNC4gU2ltdWxhc2kgRGF0YSBkYW4gQW5hbGlzaXMgYXdhbA0KDQojIyMgU2ltdWxhc2kgRGF0YQ0KDQpVbnR1ayBzaW11bGFzaSwgc2F5YSBtZW5nZ3VuYWthbiBrYW1pIG1lbmdoYXNpbGthbiBkYXRhIHNpbnRldGlzIHVudHVrIDQwMCByZXNwb25kZW4sIGRlbmdhbiBza29yIExpa2VydCAoMS01KSB1bnR1ayAyMCBwZXJ0YW55YWFuIGt1YW50aXRhdGlmIChwZXJ0YW55YWFuIDEtNCwgNi05LCAxMS0xNCwgMTYtMTksIDIxLTI0KS4gRGF0YSB1bnR1ayBzZXRpYXAgZGltZW5zaSBkaXJhbmdrdW0gc2ViYWdhaSBiZXJpa3V0IChza29yIHJhdGEtcmF0YSBwZXIgZGltZW5zaSk6DQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgYERpbWVuc2lgID0gYygiS1JTIE9ubGluZSIsICJCaW1iaW5nYW4gQWthZGVtaWsiLCAiUGVsYXlhbmFuIEFkbWluaXN0cmFzaSIsICJBa3NlcyBJbmZvcm1hc2kgQWthZGVtaWsiLCAiQmFudHVhbiBQZW55ZWxlc2FpYW4gU3R1ZGkiKSwNCiAgYFJhdGEgLSByYXRhIFNrb3JgID0gYygnMy44JywnMy41JywgJzMuMycsICc0LjAnLCAnMy42JyksDQogIGBTdGFuZGFyIERldmlhc2lgID0gYygnMC43JywgJzAsOCcsICcwLjknLCAnMC42JywgJzAuNycpDQopDQoNCmthYmxlKGRhdGEsIGNvbC5uYW1lcyA9IGMoIkRpbWVuc2kiLCAiUmF0YS1yYXRhIHNrb3IiLCAiU3RhbmRhciBEZXZpYXNpIiApKQ0KYGBgDQoNCiMjIyBBbmFsaXNpcyBBd2FsDQoNCioqMS4gU3RhdGlzdGlrIERlc2tyaXB0aWY6KioNCg0KLSAqKktSUyBPbmxpbmU6KiogUmF0YS1yYXRhIDMuOCBtZW51bmp1a2thbiBrZXB1YXNhbiBjdWt1cCBiYWlrLCB0ZXRhcGkgc3RhbmRhciBkZXZpYXNpIDAuNyBtZW5naW5kaWthc2lrYW4gdmFyaWFzaSBkYWxhbSBwZW5nYWxhbWFuIHBlbmdndW5hLg0KDQotICoqUGVsYXlhbmFuIEFkbWluaXN0cmFzaToqKiBSYXRhLXJhdGEgMy4zIGFkYWxhaCB5YW5nIHRlcmVuZGFoLCBtZW51bmp1a2thbiBhcmVhIHlhbmcgcGVybHUgcGVyYmFpa2FuLg0KDQotICoqQWtzZXMgSW5mb3JtYXNpIEFrYWRlbWlrOioqICBSYXRhLXJhdGEgNC4wIGFkYWxhaCB5YW5nIHRlcnRpbmdnaSwgbWVudW5qdWtrYW4ga2VrdWF0YW4gbGF5YW5hbiBpbmkuDQoNCioqMi4gQW5hbGlzaXMgS3VhbGl0YXRpZjoqKiANCkJpYXNhbnlhIGluaSBkYXJpIHBlcnRhbnlhYW4gdGVyYnVrYS4NCg0KLSBLZWx1aGFuIHVtdW06IFByb3NlZHVyIGFkbWluaXN0cmFzaSBydW1pdCwgd2FrdHUgcmVzcG9ucyBzdGFmIGxhbWJhdC4NCg0KLSBTYXJhbjogVGluZ2thdGthbiBwYW5kdWFuIEtSUyBvbmxpbmUsIHRhbWJhaCBzZXNpIGJpbWJpbmdhbiBha2FkZW1pay4NCg0KKiozLiBJbXBsaWthc2k6KioNCg0KLSBQcmlvcml0YXMgcGVyYmFpa2FuOiBQZWxheWFuYW4gYWRtaW5pc3RyYXNpIGRhbiBiaW1iaW5nYW4gYWthZGVtaWsuDQoNCi0gS2VrdWF0YW46IEFrc2VzIGluZm9ybWFzaSBha2FkZW1payBkYXBhdCBkaXBlcnRhaGFua2FuIGF0YXUgZGl0aW5na2F0a2FuLg0KDQojIyBLZXNpbXB1bGFuDQoNCkluc3RydW1lbiBzdXJ2ZWkgaW5pIGRpcmFuY2FuZyB1bnR1ayBtZW5nZXZhbHVhc2kga2VwdWFzYW4gbWFoYXNpc3dhIHRlcmhhZGFwIGxheWFuYW4gYWthZGVtaWsgZGVuZ2FuIDI1IHBlcnRhbnlhYW4geWFuZyBtZW5jYWt1cCBsaW1hIGRpbWVuc2kgdXRhbWEuIFNrZW1hIHZhbGlkYXNpIG1lbWFzdGlrYW4gaW5zdHJ1bWVuIHZhbGlkLCByZWxpYWJlbCBtZWxhbHVpIHVqaSBhaGxpLCBkYW4gZmFrdG9yIGFuYWxpc2lzLiBEaXN0cmlidXNpIG9ubGluZSBkYW4gc3RyYXRpZmllZCByYW5kb20gc2FtcGxpbmcgbWVtYXN0aWthbiBlZmlzaWVuc2kgZGFuIHJlcHJlc2VudGFzaS4gU2ltdWxhc2kgZGF0YSBtZW51bmp1a2thbiBiYWh3YSBwZWxheWFuYW4gYWRtaW5pc3RyYXNpIHBlcmx1IHBlcmhhdGlhbiBraHVzdXMsIHNlbWVudGFyYSBha3NlcyBpbmZvcm1hc2kgYWthZGVtaWsgYWRhbGFoIGtla3VhdGFuLiBSYW5jYW5nYW4gaW5pIHNpYXAgZGlndW5ha2FuIHVudHVrIHBlbmd1bXB1bGFuIGRhdGEgc2thbGEgYmVzYXIgZGFuIGRhcGF0IGRpc2VzdWFpa2FuIGJlcmRhc2Fya2FuIGhhc2lsIHVqaSBjb2JhLg0K