Random Variables - Video 6 Analysis

Tugas Week 10

Essential of Probability

Comprehensive Analysis of Basic Probability Concepts

Nama: Adinda Adelia Futri | NIM: 52250055

Logo

Video Analysis 1: Basic Probability Concepts

Video Source: Basic Probability Concepts - YouTube

Duration: 15:30 minutes | Content Level: Beginner

1 Konsep Dasar Probabilitas

Rangkuman Penjelasan Video

Konsep Dasar Probabilitas

Probabilitas merupakan ukuran kuantitatifNilai numerik antara 0 dan 1 yang merepresentasikan ketidakpastian suatu kejadian dari kemungkinan terjadinya suatu peristiwa.

  • Probabilitas bernilai antara 0 (mustahil) hingga 1 (pasti)
  • Konsep probabilitas digunakan untuk memodelkan ketidakpastianSituasi dimana outcome tidak dapat diprediksi dengan pasti
  • Aplikasi dalam kehidupan sehari-hari: prediksi cuaca, asuransi, permainan

Rumus Fundamental Probabilitas

Definisi Klasik Probabilitas:

\[P(A) = \frac{n(A)}{n(S)} = \frac{\text{Jumlah outcome yang menguntungkan}}{\text{Total outcome yang mungkin}}\]

Keterangan:

  • \(P(A)\) = Probabilitas kejadian APeluang terjadinya event A dalam ruang sampel
  • \(n(A)\) = Banyaknya elemen dalam kejadian AJumlah outcome yang termasuk dalam event A
  • \(n(S)\) = Banyaknya elemen dalam ruang sampel STotal semua outcome yang mungkin dalam eksperimen

Ruang Sampel dan Kejadian

Ruang Sampel (Sample Space) adalah himpunan semua outcomeKumpulan semua hasil yang mungkin dari suatu eksperimen acak yang mungkin dari suatu eksperimen.

Contoh: Pelemparan Dadu

Ruang Sampel: \(S = \\{1, 2, 3, 4, 5, 6\\}\)

Kejadian A (angka genap): \(A = \\{2, 4, 6\\}\)

Probabilitas A: \(P(A) = \frac{3}{6} = 0.5\)

1.1 Visualisasi Konsep Probabilitas Dasar

Diagram Batang Probabilitas Visualisasi Probabilitas

Diagram ini menunjukkan perbandingan probabilitas dari berbagai eksperimen:
• Dadu angka genap: 3/6 = 50%
• Koin Head: 1/2 = 50%
• Kartu Hati: 13/52 = 25%
• Dadu >4: 2/6 = 33.3%

Interpretasi: Diagram di atas menunjukkan bahwa probabilitas mendapatkan angka genap pada dadu sama dengan mendapatkan Head pada koin (50%), sementara probabilitas mendapatkan kartu hati lebih rendah (25%).

1.2 Simulasi Empiris vs Teoritis

Simulasi Empiris vs Probabilitas Teoritis

Video menjelaskan perbedaan antara:

  • Probabilitas Teoritis: Berdasarkan logika dan matematikaPerhitungan berdasarkan teori dan asumsi ideal
  • Probabilitas Empiris: Berdasarkan pengamatan dan eksperimenPerhitungan berdasarkan data aktual dari percobaan

1.3 Aksioma Probabilitas

Aksioma Probabilitas

Video menjelaskan tiga aksioma fundamental probabilitas:

aksioma 1: Non-negativity

\(P(A) \geq 0\) untuk setiap kejadian A

Probabilitas tidak boleh bernilai negatif

Aksioma 2: Normalization

\(P(S) = 1\) dimana S adalah ruang sampel

Probabilitas total semua outcome yang mungkin adalah 1

Aksioma 3: Additivity

Untuk kejadian mutually exclusiveKejadian yang tidak dapat terjadi bersamaan: \(P(A \cup B) = P(A) + P(B)\)

Probabilitas gabungan kejadian saling lepas adalah jumlah probabilitas masing-masing

1.4 Demonstrasi Aksioma Probabilitas

Tiga Aksioma Fundamental Probabilitas
Aksioma Deskripsi Contoh
Non-negativity P(A) ≥ 0 P(Head) = 0.5 ≥ 0
Normalization P(S) = 1 P({1,2,3,4,5,6}) = 1
Additivity P(A∪B) = P(A) + P(B) untuk A∩B=∅ P(Genap∪Ganjil) = 0.5 + 0.5 = 1

1.5 Referensi buku

Referensi Buku Pendukung

Buku Teks Utama

No Referensi Bab Relevan Kesesuaian dengan Video
1 Walpole, R.E., et al. (2012).
Probability & Statistics for Engineers & Scientists
Pearson Education, 9th Edition
Bab 2: Probability
Halaman: 25-48
Sangat sesuai - menjelaskan konsep dasar probabilitas dengan contoh engineering
2 Ross, S.M. (2014).
A First Course in Probability
Pearson Education, 9th Edition
Bab 1: Combinatorial Analysis
Bab 2: Axioms of Probability
Sangat sesuai - memberikan dasar matematis yang kuat untuk aksioma probabilitas

1.6 Kesimpulan

Kesimpulan dan Takeaways

Poin-Poin Penting yang Dipelajari:

Fundamental Concepts

  • Probabilitas mengukur ketidakpastian
  • Nilai antara 0 dan 1
  • Ruang sampel dan kejadian
  • Outcome dan event

Mathematical Foundation

  • Rumus dasar P(A) = n(A)/n(S)
  • Tiga aksioma probabilitas
  • Konsep mutually exclusive
  • Himpunan dan operasinya

Practical Applications

  • Simulasi empiris
  • Perbandingan teoritis vs empiris
  • Aplikasi dalam pengambilan keputusan
  • Analisis risiko

Siap untuk Video Berikutnya!

Next Topic: Conditional Probability & Bayes Theorem

Konsep yang lebih advanced menunggu di video selanjutnya!

Essential of Probability - Video 2

Sample Space and Events - Comprehensive Analysis

📹 Video Analysis: Sample Space and Events

Video Source: Sample Space and Events - YouTube

Duration: 12:45 minutes | Content Level: Beginner

2 Sample Space dan Events

Rangkuman Penjelasan Video

Konsep Dasar Sample Space dan Events

Video ini menjelaskan dua konsep fundamental dalam teori probabilitas: Sample Space Himpunan semua outcome yang mungkin dari suatu eksperimen dan Events Subset dari sample space yang merepresentasikan outcome tertentu .

Definisi Formal

Sample Space (S): Himpunan semua outcome yang mungkin dari suatu eksperimen acak.

Event (A, B, C,…): Subset dari sample space yang terdiri dari outcome-outcome dengan karakteristik tertentu.

Notasi Matematis

Sample Space: \(S = \{ \text{outcome}_1, \text{outcome}_2, ..., \text{outcome}_n \}\)

Event: \(A \subseteq S\) dimana \(A\) adalah subset dari \(S\)

Probabilitas Event: \(P(A) = \frac{n(A)}{n(S)}\)

2.1 Jenis-Jenis

Jenis-Jenis Sample Space

  1. Sample Space Diskrit

Sample space dengan jumlah outcome yang terbatas atau dapat dihitung.

Contoh 1: Pelemparan Koin

Sample Space: \(S = \{H, T\}\)

Event A (Head): \(A = \{H\}\)

Event B (Tail): \(B = \{T\}\)

Probabilitas: \(P(A) = \frac{1}{2}\), \(P(B) = \frac{1}{2}\)

Contoh 2: Pelemparan Dadu

Sample Space: \(S = \{1, 2, 3, 4, 5, 6\}\)

Event A (Angka Genap): \(A = \{2, 4, 6\}\)

Event B (Angka Prima): \(B = \{2, 3, 5\}\)

Probabilitas: \(P(A) = \frac{3}{6} = 0.5\), \(P(B) = \frac{3}{6} = 0.5\)

2.2 Visualisasi Sample Space untuk Berbagai Eksperimen

Diagram Sample Space Perbandingan Ukuran Sample Space

Visualisasi menunjukkan jumlah outcome yang mungkin dalam berbagai eksperimen

Interpretasi: Semakin besar sample space, semakin banyak kemungkinan outcome yang dapat terjadi. Pengambilan kartu memiliki sample space terbesar (52 outcome).

  1. Sample Space Kontinu

Sample space dengan outcome yang tak terhitung (continuous).

Contoh: Waktu Tunggu Bus

Sample Space: \(S = \{ t \in \mathbb{R} \mid 0 \leq t \leq 30 \}\) menit

Event A (tunggu ≤ 5 menit): \(A = \{ t \mid 0 \leq t \leq 5 \}\)

Probabilitas menggunakan distribusi kontinu

2.3 Jenis-Jenis Event

Jenis-Jenis Events

  1. Simple Event (Elementary Event)

Event yang terdiri dari tepat satu outcome.

Contoh: Dadu Muncul Angka 3

Sample Space: \(S = \{1, 2, 3, 4, 5, 6\}\)

Simple Event: \(E = \{3\}\)

Probabilitas: \(P(E) = \frac{1}{6}\)

  1. Compound Event

Event yang terdiri dari lebih dari satu outcome.

Contoh: Dadu Muncul Angka Genap

Sample Space: \(S = \{1, 2, 3, 4, 5, 6\}\)

Compound Event: \(A = \{2, 4, 6\}\)

Probabilitas: \(P(A) = \frac{3}{6} = 0.5\)

Tabel Jenis Events Klasifikasi Events dalam Probabilitas

Berbagai jenis events berdasarkan jumlah outcome dan karakteristiknya
Jenis-Jenis Events dalam Probabilitas
Jenis_Event Deskripsi Contoh Jumlah_Outcome Probabilitas
Simple Event 1 outcome Dadu=3 1 1/6
Compound Event >1 outcome Dadu Genap 3 3/6
Impossible Event 0 outcome Dadu=7 0 0
Certain Event Semua outcome Dadu 1-6 6 1

Keterangan: Simple event adalah building block untuk compound events. Impossible event memiliki probabilitas 0, certain event memiliki probabilitas 1.

Relasi Antar Events

  1. Mutually Exclusive Events (Saling Lepas)

Dua events yang tidak dapat terjadi bersamaan. \(A \cap B = \emptyset\)

Contoh: Dadu Muncul Genap dan Ganjil

Event A (Genap): \(A = \{2, 4, 6\}\)

Event B (Ganjil): \(B = \{1, 3, 5\}\)

Irisan: \(A \cap B = \emptyset\) → Mutually Exclusive

  1. Independent Events (Saling Bebas)

Kejadian satu tidak mempengaruhi probabilitas kejadian lainnya. \(P(A \cap B) = P(A) \cdot P(B)\)

Contoh: Pelemparan Dua Koin

Event A (Koin 1 Head): \(P(A) = 0.5\)

Event B (Koin 2 Head): \(P(B) = 0.5\)

Probabilitas Bersamaan: \(P(A \cap B) = 0.5 \times 0.5 = 0.25\)

2.4 Visualisasi Relasi Antar Events

Tabel Relasi Events Jenis-Jenis Relasi Events

Berbagai jenis hubungan antara events dalam teori probabilitas
Relasi Antar Events dalam Probabilitas
Relasi Deskripsi Contoh Simbol
Mutually Exclusive A ∩ B = ∅ Genap & Ganjil A∩B=∅
Independent P(A∩B)=P(A)P(B) 2 koin independent P(A∩B)=P(A)P(B)
Dependent P(A∩B)≠P(A)P(B) Kartu merah & hati P(A∩B)≠P(A)P(B)
Complement A ∪ A’ = S Genap & Tidak Genap A’ = S-A

Penting: Memahami relasi antar events sangat penting untuk perhitungan probabilitas yang kompleks dan aplikasi dalam pengambilan keputusan.

Operasi pada Events

  1. Union (Gabungan) - \(A \cup B\)

Event yang terjadi jika A terjadi ATAU B terjadi ATAU keduanya terjadi.

Contoh: Dadu Muncul Genap atau Prima

Event A (Genap): \(A = \{2, 4, 6\}\)

Event B (Prima): \(B = \{2, 3, 5\}\)

Union: \(A \cup B = \{2, 3, 4, 5, 6\}\)

Probabilitas: \(P(A \cup B) = \frac{5}{6}\)

  1. Intersection (Irisan) - \(A \cap B\)

Event yang terjadi jika A terjadi DAN B terjadi.

Contoh: Dadu Muncul Genap dan Prima

Event A (Genap): \(A = \{2, 4, 6\}\)

Event B (Prima): \(B = \{2, 3, 5\}\)

Intersection: \(A \cap B = \{2\}\)

Probabilitas: \(P(A \cap B) = \frac{1}{6}\)

  1. Complement (Komplemen) - \(A'\) atau \(A^c\)

Event yang terjadi jika A TIDAK terjadi.

Contoh: Dadu TIDAK Muncul Genap

Event A (Genap): \(A = \{2, 4, 6\}\)

Complement: \(A' = \{1, 3, 5\}\)

Probabilitas: \(P(A') = 1 - P(A) = 1 - 0.5 = 0.5\)

2.5 Contoh Perhitungan Operasi pada Events

Tabel Operasi Events Operasi Himpunan dalam Probabilitas

Berbagai operasi yang dapat dilakukan pada events beserta contoh perhitungannya

Operasi pada Events - Contoh Pelemparan Dadu
Operasi Rumus Contoh_Dadu Hasil Penjelasan
Union (A∪B) P(A∪B) = P(A) + P(B) - P(A∩B) Genap ∪ Prima 5/6 {2,3,4,5,6}
Intersection (A∩B) P(A∩B) Genap ∩ Prima 1/6 {2}
Complement (A’) P(A’) = 1 - P(A) Tidak Genap 3/6 {1,3,5}
Difference (A-B) P(A-B) = P(A) - P(A∩B) Genap - Prima 2/6 {4,6}

Catatan: Untuk events yang mutually exclusive, rumus union menjadi \(P(A \cup B) = P(A) + P(B)\) karena \(P(A \cap B) = 0\).

Aplikasi Praktis Sample Space dan Events

Contoh 1: Permainan Kartu

Sample Space: Deck Kartu Standar (52 kartu)

Events:

  • \(A\): Kartu Hati → \(P(A) = \frac{13}{52} = 0.25\)
  • \(B\): Kartu As → \(P(B) = \frac{4}{52} = 0.077\)
  • \(C\): Kartu Merah → \(P(C) = \frac{26}{52} = 0.5\)
  • \(A \cap B\): As Hati → \(P(A \cap B) = \frac{1}{52} = 0.019\)

Contoh 2: Quality Control

Sample Space: Produksi 1000 unit

Events:

  • \(D\): Produk Defect → \(P(D) = \frac{15}{1000} = 0.015\)
  • \(G\): Produk Good → \(P(G) = \frac{985}{1000} = 0.985\)
  • \(D'\): Produk Tidak Defect → \(P(D') = 1 - 0.015 = 0.985\)

2.6 Referensi Buku

Referensi Buku Pendukung

Buku Teks Utama untuk Sample Space dan Events

No Referensi Bab Relevan Kontribusi
1 Ross, S.M. (2014).
A First Course in Probability
Pearson Education, 9th Edition
Bab 2: Axioms of Probability
Bab 3: Conditional Probability
Penjelasan mendalam tentang sample space, events, dan operasi himpunan
2 Walpole, R.E., et al. (2012).
Probability & Statistics for Engineers & Scientists
Pearson Education, 9th Edition
Bab 2: Probability
Halaman: 28-45
Contoh aplikasi sample space dalam engineering dan sains
3 Devore, J.L. (2015).
Probability and Statistics for Engineering and the Sciences
Cengage Learning, 9th Edition
Bab 2: Probability
Halaman: 56-72
Visualisasi dan contoh praktis events dalam konteks engineering

2.7 Kesimpulan

Kesimpulan Video 2

Poin-Poin Penting yang Dipelajari:

Konsep Dasar

  • Sample Space = Semua outcome yang mungkin
  • Event = Subset dari sample space
  • Simple vs Compound Events

Relasi Events

  • Mutually Exclusive
  • Independent vs Dependent
  • Complement Events

Operasi Himpunan

  • Union (A ∪ B)
  • Intersection (A ∩ B)
  • Complement (A’)

Pemahaman tentang sample space dan events merupakan foundation untuk mempelajari konsep probabilitas yang lebih advanced seperti conditional probability dan distribusi probabilitas.

Lanjut ke Video Berikutnya!

Next Topic: Conditional Probability & Bayes’ Theorem

Conditional Probability - Video 3

Comprehensive Analysis of Conditional Probability Concepts

📹 Video Analysis: Conditional Probability

Video Source: Conditional Probability - YouTube

Duration: 14:20 minutes | Content Level: Intermediate

3 Conditional Probability

Rangkuman Penjelasan Video

Konsep Dasar Conditional Probability

Video ini menjelaskan konsep Conditional ProbabilityProbabilitas suatu kejadian yang dihitung dengan syarat bahwa kejadian lain telah terjadi yang merupakan fundamental dalam teori probabilitas modern.

Definisi Formal Conditional Probability

Probabilitas bersyarat dari kejadian A diberikan kejadian B telah terjadi didefinisikan sebagai probabilitas A terjadi dengan syarat B sudah terjadi.

3.1 Rumus Conditional Probability

Rumus Conditional Probability

\[P(A|B) = \frac{P(A \cap B)}{P(B)}\]

Keterangan:

  • \(P(A|B)\) = Probabilitas A diberikan BPeluang kejadian A terjadi dengan syarat B sudah terjadi
  • \(P(A \cap B)\) = Probabilitas A dan BPeluang kedua kejadian A dan B terjadi bersamaan
  • \(P(B)\) = Probabilitas BPeluang kejadian B terjadi

Syarat: \(P(B) > 0\)

Interpretasi Visual Conditional Probability

Konsep “Reduced Sample Space”

Ketika kita mengetahui event B telah terjadi, sample space kita berkurang hanya ke event B. Ini mengubah cara kita menghitung probabilitas.

Analog: Ruangan yang Menyusut

Bayangkan sample space sebagai sebuah ruangan besar. Ketika B terjadi, kita hanya memperhatikan bagian ruangan yang merupakan B. Probabilitas A diberikan B adalah proporsi A yang berada dalam B.

3.2 Visualisasi Konsep Conditional Probability

Interpretasi: Conditional probability P(A|B) menunjukkan bagaimana pengetahuan tentang kejadian B mengubah probabilitas kejadian A.

Contoh Aplikasi Conditional Probability

Contoh 1: Medical Testing

Test Penyakit dengan Akurasi 95%

Data:

  • Prevalensi penyakit: 1% populasi
  • Sensitivitas test: 95% (P(Test+|Sakit))
  • Spesifisitas test: 90% (P(Test-|Sehat))

Pertanyaan: Jika seseorang test positif, berapa probabilitas dia benar-benar sakit?

Solusi menggunakan Conditional Probability:

\(P(Sakit|Test+) = \frac{P(Test+|Sakit) \cdot P(Sakit)}{P(Test+)}\)

3.3 Contoh Medical Testing

Analisis Medical Testing dengan Conditional Probability
Probabilitas Nilai Keterangan
P(Sakit) 0.0100000 Prevalensi penyakit
P(Test+|Sakit) 0.9500000 Sensitivitas test
P(Test-|Sehat) 0.9000000 Spesifisitas test
P(Test+) 0.1085000 Prob test positif
P(Sakit|Test+) 0.0875576 Prob sakit diberikan test positif

Insight: Meskipun test memiliki akurasi tinggi, probabilitas benar-benar sakit ketika test positif hanya sekitar 8.8% karena prevalensi penyakit yang rendah.

Contoh 2: Permainan Kartu

Pengambilan Dua Kartu dari Deck

Scenario: Mengambil dua kartu dari deck 52 kartu tanpa pengembalian.

Pertanyaan 1: Berapa probabilitas kartu kedua As diberikan kartu pertama As?

\(P(A_2|A_1) = \frac{3}{51} ≈ 0.0588\)

Pertanyaan 2: Berapa probabilitas kartu kedua Heart diberikan kartu pertama Heart?

\(P(H_2|H_1) = \frac{12}{51} ≈ 0.2353\)

Independent Events vs Conditional Probability

Konsep Independence

Dua events A dan B disebut independent jika:

\[P(A|B) = P(A) \quad \text{atau} \quad P(A \cap B) = P(A) \cdot P(B)\]

Contoh: Pelemparan Dua Dadu

Event A: Dadu pertama angka 3 → \(P(A) = \frac{1}{6}\)

Event B: Dadu kedua angka 4 → \(P(B) = \frac{1}{6}\)

Conditional Probability: \(P(A|B) = \frac{1}{6} = P(A)\)

Kesimpulan: A dan B independent

3.4 Test Independence Berbagai Scenario

Test Independence Berbagai Scenario
Scenario Event_A Event_B P_A P_B P_A_diberikan_B Independent
Dadu Independent Dadu1=3 Dadu2=4 0.1666667 0.1666667 0.1666667 YA
Kartu Dependent Kartu1=As Kartu2=As 0.0769231 0.0588235 0.0588235 TIDAK
Koin Independent Koin1=Head Koin2=Head 0.5000000 0.5000000 0.5000000 YA
Urn Dependent Bola1=Merah Bola2=Merah 0.5000000 0.4444444 0.4444444 TIDAK

Penting: Dua kejadian independent jika pengetahuan tentang satu kejadian tidak mengubah probabilitas kejadian lainnya.

General Multiplication Rule

Aturan Perkalian Umum

Untuk multiple events, kita dapat memperluas konsep conditional probability:

\[P(A \cap B \cap C) = P(A) \cdot P(B|A) \cdot P(C|A \cap B)\]

Contoh: Pengambilan 3 Kartu

Probabilitas mendapatkan 3 As berturut-turut:

\(P(A_1 \cap A_2 \cap A_3) = P(A_1) \cdot P(A_2|A_1) \cdot P(A_3|A_1 \cap A_2)\)

\(= \frac{4}{52} \cdot \frac{3}{51} \cdot \frac{2}{50} = \frac{24}{132600} ≈ 0.000181\)

Law of Total Probability

Teorema Probabilitas Total

Jika \(B_1, B_2, ..., B_n\) adalah partisi dari sample space, maka:

\[P(A) = \sum_{i=1}^n P(A|B_i) \cdot P(B_i)\]

Contoh: Factory Production

Data:

  • Machine 1: 50% production, defect rate 2%
  • Machine 2: 30% production, defect rate 3%
  • Machine 3: 20% production, defect rate 1%

Total defect probability:

\(P(Defect) = 0.5 \cdot 0.02 + 0.3 \cdot 0.03 + 0.2 \cdot 0.01 = 0.021\)

3.5 Visualisasi Law of Total Probability

Interpretasi: Mesin 1 memberikan kontribusi terbesar terhadap defect rate karena volume produksinya yang tinggi.

Aplikasi Real-World Conditional Probability

  1. Risk Assessment in Insurance

Premi asuransi dihitung berdasarkan conditional probability:

\(P(Claim|Age, Gender, Health) = \frac{P(Claim \cap Demographics)}{P(Demographics)}\)

  1. Machine Learning Classification

Naive Bayes Classifier menggunakan conditional probability:

\(P(Class|Features) ∝ P(Class) \cdot \prod P(Feature_i|Class)\)

  1. Quality Control in Manufacturing

Statistical Process Control menggunakan conditional probability untuk mendeteksi anomali:

\(P(Defect|Process Parameters) = \frac{P(Defect \cap Parameters)}{P(Parameters)}\)

3.6 Kesimpulan

Kesimpulan Video 3 - Conditional Probability

Poin-Poin Penting yang Dipelajari:

Fundamental Concepts

  • \(P(A|B) = \frac{P(A \cap B)}{P(B)}\)
  • Reduced Sample Space
  • Interpretasi visual

Advanced Applications

  • General Multiplication Rule
  • Law of Total Probability
  • Bayes’ Theorem

eal-World Usage

  • Medical Testing
  • Risk Assessment
  • Machine Learning

Conditional probability adalah konsep fundamental yang memungkinkan kita membuat keputusan dalam ketidakpastian dengan mempertimbangkan informasi baru.

3.7 Referensi buku

Referensi

  • Hogg, R. V., Tanis, E. A., & Zimmerman, D. L. (2014). Probability and Statistical Inference. Pearson.
  • Ross, S. (2010). A First Course in Probability. Pearson.
  • Blitzstein, J., & Hwang, J. (2019). Introduction to Probability. Chapman & Hall/CRC.

🚀 Lanjut ke Video Berikutnya!

Next Topic: Probability Distributions & Random Variables

Bayes’ Theorem - Video 4 Analysis

Video Source: Bayes’ Theorem - YouTube

Duration: 16:45 minutes | Content Level: Advanced

4 Bayes’ Theorem

Rangkuman Penjelasan Video

Revolusi Bayes’ Theorem dalam Probabilitas

Bayes’ Theorem adalah alat matematika powerfulTeorema yang memungkinkan kita memperbarui keyakinan berdasarkan evidence baru yang memungkinkan kita memperbarui probabilitas suatu hipotesis ketika evidence baru tersedia.

Bayes’ Theorem - The Fundamental Formula

\[P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}\]

PosteriorProbabilitas yang diperbarui setelah mempertimbangkan evidence baru

\(P(A|B)\)

Probabilitas yang diperbarui

LikelihoodProbabilitas mengamati evidence B jika hipotesis A benar

\(P(B|A)\)

Probabilitas evidence

PriorProbabilitas awal sebelum evidence baru diperhitungkan

\(P(A)\)

Probabilitas awal

EvidenceProbabilitas total evidence B (normalizing constant)

\(P(B)\)

Probabilitas marginal

Interpretasi Intuitif Bayes’ Theorem

Proses Pembaruan Keyakinan (Belief Update)

Analog: Detective Investigation

Bayangkan Anda adalah detektif yang menyelidiki suatu kasus:

  • Prior: Kecurigaan awal terhadap tersangka (berdasarkan rekam jejak)
  • Likelihood: Seberapa mungkin evidence ditemukan jika tersangka bersalah
  • Evidence: Bukti-bukti yang ditemukan di TKP
  • Posterior: Kecurigaan yang diperbarui setelah menganalisis evidence

Proses Pembaruan Keyakinan Bayes

Step Description Value Example
Prior Belief Keyakinan awal sebelum evidence P(H) Prevalensi penyakit 1%
New Evidence Data atau observasi baru Data Test positif
Likelihood Prob evidence diberikan hipotesis P(E|H) 95% sensitivitas test
Posterior Belief Keyakinan yang diperbarui P(H|E) 8.7% prob sakit

Extended Bayes’ Theorem

Bayes’ Theorem dengan Multiple Hypotheses

\[P(A_i|B) = \frac{P(B|A_i) \cdot P(A_i)}{\sum_{j=1}^n P(B|A_j) \cdot P(A_j)}\]

Contoh: Three Machine Factory

Data:

  • Machine 1: 50% production, 2% defect rate
  • Machine 2: 30% production, 3% defect rate
  • Machine 3: 20% production, 1% defect rate

Pertanyaan: Jika ditemukan produk defect, berapa probabilitas berasal dari Machine 2?

Solusi:

\(P(M2|Defect) = \frac{0.03 \times 0.30}{0.02 \times 0.50 + 0.03 \times 0.30 + 0.01 \times 0.20} = \frac{0.009}{0.027} ≈ 0.333\)

Aplikasi Klasik: Medical Diagnosis

Medical Testing Paradox

Scenario: Test Penyakit Langka

Data:

  • Prevalensi penyakit: 1% populasi
  • Sensitivitas test: 99% (P(Test+|Sakit))
  • Spesifisitas test: 95% (P(Test-|Sehat))

Pertanyaan: Jika seseorang test positif, berapa probabilitas benar-benar sakit?

Perhitungan Bayes:

\(P(Sakit|Test+) = \frac{0.99 \times 0.01}{0.99 \times 0.01 + 0.05 \times 0.99} = \frac{0.0099}{0.0099 + 0.0495} = \frac{0.0099}{0.0594} ≈ 0.1667\)

Kesimpulan Menarik: Meskipun test akurat 99%, hanya 16.67% test positif yang benar-benar sakit!

Bayes’ Theorem dalam Medical Testing

Pengaruh prevalensi terhadap interpretasi test positif:

Visualisasi: High Prevalence (10%) → 68.7% | Medium Prevalence (1%) → 16.7% | Low Prevalence (0.1%) → 1.9%

68.7%
High Prev

16.7%
Medium Prev

1.9%
Low Prev

Naive Bayes Classifier

Aplikasi Bayes dalam Machine Learning

\[P(Class|Features) ∝ P(Class) \cdot \prod_{i=1}^n P(Feature_i|Class)\]

Contoh: Spam Email Classification

Features: Kata “free”, “money”, “urgent”

Training Data:

  • P(Spam) = 0.3
  • P(“free”|Spam) = 0.8, P(“free”|Not Spam) = 0.1
  • P(“money”|Spam) = 0.6, P(“money”|Not Spam) = 0.05
  • P(“urgent”|Spam) = 0.4, P(“urgent”|Not Spam) = 0.02

Classification:

\(P(Spam|"free","money") ∝ 0.3 × 0.8 × 0.6 = 0.144\)

\(P(Not Spam|"free","money") ∝ 0.7 × 0.1 × 0.05 = 0.0035\)

Kesimpulan: Email diklasifikasikan sebagai SPAM

Bayesian vs Frequentist Interpretation

Perbedaan Paradigma

Frequentist Approach

  • Probabilitas sebagai frekuensi relatif jangka panjang
  • Parameter tetap, data random
  • Confidence intervals
  • P-value hypothesis testing

Bayesian Approach

  • Probabilitas sebagai derajat keyakinan
  • Parameter random, data fixed
  • Credible intervals
  • Prior and posterior distributions

Perbandingan Paradigma Frequentist vs Bayesian

Aspect Frequentist Bayesian
Definition of Probability Long-run frequency Degree of belief
Parameters Fixed unknown constants Random variables
Data Random sample Fixed observed
Uncertainty Confidence Intervals Credible Intervals
Main Tool P-values Posterior Distributions

Bayesian Inference in Practice

Conjugate Priors

Beta-Binomial Conjugacy

Scenario: Melempar koin yang mungkin bias

Prior: Beta(α=2, β=2) - keyakinan awal koin fair

Data: 8 head dari 10 lemparan

Posterior: Beta(α+success, β+failures) = Beta(10, 4)

Interpretasi: Posterior mean = 10/(10+4) ≈ 0.714

Keyakinan kita bergeser dari 0.5 (fair) ke 0.714 (biased toward head)

Bayesian Updating Process

Pembaruan keyakinan tentang probabilitas head koin:

Prior
50.0%

Data: 3H,0T
71.4%

Data: 2H,1T
70.0%

Data: 3H,2T
66.7%

Posterior
66.7%

Real-World Applications of Bayes’ Theorem

  1. Finance and Risk Management

Credit Scoring: Memperbarui probabilitas default berdasarkan perilaku peminjam

\(P(Default|Payment History) = \frac{P(Payment History|Default) \cdot P(Default)}{P(Payment History)}\)

  1. Artificial Intelligence

Recommendation Systems: Memperbarui preferensi user berdasarkan interaksi

\(P(Like|Behavior) = \frac{P(Behavior|Like) \cdot P(Like)}{P(Behavior)}\)

  1. Scientific Research

Drug Efficacy: Memperbarui keyakinan tentang efektivitas obat berdasarkan trial results

\(P(Effective|Trial Data) = \frac{P(Trial Data|Effective) \cdot P(Effective)}{P(Trial Data)}\)

Common Misconceptions about Bayes’ Theorem

  1. Base Rate Fallacy

Kesalahan: Mengabaikan prevalensi (base rate) dan hanya fokus pada likelihood

Contoh: Medical testing paradox - orang sering overestimate P(sick|positive)

  1. Confusion of Inverse

Kesalahan: Menganggap P(A|B) sama dengan P(B|A)

Contoh: Mengira “kebanyakan teroris Muslim” berarti “kebanyakan Muslim teroris”

  1. Prior Sensitivity

Kesalahan: Tidak menyadari bahwa hasil Bayesian sangat bergantung pada prior yang dipilih

Solusi: Gunakan uninformative priors atau sensitivity analysis

4.1 Kesimpulan

Kesimpulan Utama Video 4 - Bayes’ Theorem

Fundamental Concepts

  • Bayes’ Theorem memungkinkan pembaruan keyakinan berdasarkan evidence baru
  • Formula dasar: \(P(A|B) = \frac{P(B|A)P(A)}{P(B)}\)
  • Komponen: Prior, Likelihood, Evidence, Posterior

Advanced Applications

  • Multiple hypotheses dengan extended Bayes formula
  • Conjugate priors untuk analytical convenience
  • Bayesian updating untuk sequential learning

Practical Insights

  • Medical diagnosis: memahami base rate fallacy
  • Machine learning: Naive Bayes classifier
  • Risk management: dynamic probability updating

Key Takeaways:

  • Bayes’ Theorem adalah framework powerful untuk reasoning under uncertainty
  • Memahami perbedaan Bayesian vs Frequentist paradigm penting untuk aplikasi yang tepat
  • Real-world applications mencakup bidang medicine, finance, AI, dan scientific research
  • Kesadaran terhadap common misconceptions meningkatkan interpretasi yang akurat

4.2 Referensi buku

Referensi Buku Terkait Bayes’ Theorem

Fundamental Bayesian Statistics

  • “Bayesian Data Analysis” - Andrew Gelman et al.
  • “Probability Theory: The Logic of Science” - E.T. Jaynes
  • “Statistical Rethinking” - Richard McElreath
  • “Doing Bayesian Data Analysis” - John K. Kruschke

Applied Bayesian Methods

  • “Bayesian Methods for Hackers” - Cameron Davidson-Pilon
  • “Bayesian Statistics for Beginners” - Ruth M. Mickey
  • “Applied Bayesian Modeling” - Peter Congdon
  • “Bayesian Networks” - Richard E. Neapolitan

Probability Distributions - Video 5 Analysis

Video Source: Probability Distributions - YouTube

Duration: 18:30 minutes | Content Level: Intermediate

5 Probability Distributions

Rangkuman Penjelasan Video

Konsep Fundamental Probability Distributions

Probability Distribution adalah fungsi matematikaFungsi yang menjelaskan bagaimana probabilitas didistribusikan across possible outcomes yang menjelaskan likelihood dari berbagai possible outcomes dalam suatu eksperimen.

Definisi Probability Distribution

Probability Distribution: Fungsi yang memberikan probabilitas untuk setiap possible outcome dari variabel acak.

Variabel Acak (Random Variable): Variabel yang nilainya ditentukan oleh outcome dari proses acak.

Klasifikasi Probability Distributions

  1. Berdasarkan Tipe Variabel

Discrete Probability Distributions

Untuk variabel acak diskrit (countable outcomes)

  • Bernoulli Distribution
  • Binomial Distribution
  • Poisson Distribution
  • Geometric Distribution

Continuous Probability Distributions

Untuk variabel acak kontinu (uncountable outcomes)

  • Normal Distribution
  • Uniform Distribution
  • Exponential Distribution
  • Gamma Distribution

Klasifikasi Distribusi Probabilitas

Tipe Distribusi Parameter Support Aplikasi
Discrete Binomial n, p 0,1,2,…,n Success counts
Discrete Poisson λ 0,1,2,… Event counts
Discrete Geometric p 1,2,3,… Wait time
Continuous Normal μ, σ (-∞, ∞) Natural phenomena
Continuous Uniform a, b [a, b] Equal probability
Continuous Exponential λ [0, ∞) Wait time

Discrete Probability Distributions

  1. Bernoulli Distribution

\[P(X = x) = p^x(1-p)^{1-x} \quad \text{for } x = 0,1\]

Contoh: Pelemparan Koin

Parameter: p = 0.5 (probabilitas head)

PMF:

  • P(X=0) = P(Tail) = (0.5)⁰(0.5)¹ = 0.5
  • P(X=1) = P(Head) = (0.5)¹(0.5)⁰ = 0.5

  1. Binomial Distribution

\[P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} \quad \text{for } k = 0,1,2,...,n\]

Contoh: Pelemparan 10 Koin

Parameter: n = 10, p = 0.5

Pertanyaan: Berapa probabilitas mendapatkan tepat 7 head?

Solusi:

\[P(X=7) = \binom{10}{7} (0.5)^7 (0.5)^3 = 120 \times 0.0078125 \times 0.125 = 0.1172\]

  1. Poisson Distribution

\[P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!} \quad \text{for } k = 0,1,2,...\]

Contoh: Call Center

Parameter: λ = 5 calls per hour (rata-rata panggilan per jam)

Pertanyaan: Berapa probabilitas menerima tepat 3 panggilan dalam satu jam?

Solusi:

\[P(X=3) = \frac{5^3 e^{-5}}{3!} = \frac{125 \times 0.006737947}{6} = 0.1404\]

Continuous Probability Distributions

  1. Normal Distribution (Gaussian)

\[f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\]

Contoh: Tinggi Badan

Parameter: μ = 170 cm, σ = 10 cm

Aplikasi: Distribusi tinggi badan populasi

Karakteristik: Bell-shaped, symmetric, mean=median=mode

  1. Uniform Distribution

\[f(x) = \frac{1}{b-a} \quad \text{for } a \leq x \leq b\]

Contoh: Random Number Generator

Parameter: a = 0, b = 1

Aplikasi: Random number generation, simulation

Karakteristik: Constant probability across interval

  1. Exponential Distribution

\[f(x) = \lambda e^{-\lambda x} \quad \text{for } x \geq 0\]

Contoh: Waktu Tunggu

Parameter: λ = 0.5 (rata-rata 2 events per unit waktu)

Aplikasi: Waktu antara events dalam Poisson process

Karakteristik: Memoryless property

Perbandingan Continuous Probability Distributions

Distribusi Parameter Mean Variance Aplikasi Shape
Normal μ, σ μ σ² Natural phenomena Bell-shaped
Uniform a, b (a+b)/2 (b-a)²/12 Random numbers Rectangular
Exponential λ 1/λ 1/λ² Wait times Decaying exponential

Expected Value and Variance

Konsep Expected Value (Mean)

\[E[X] = \sum x \cdot P(X=x) \quad \text{(Discrete)}\]

\[E[X] = \int x \cdot f(x) dx \quad \text{(Continuous)}\]

Contoh: Expected Value Dadu

Distribusi Uniform Discrete: P(X=x) = 1/6 untuk x=1,2,3,4,5,6

\[E[X] = 1\cdot\frac{1}{6} + 2\cdot\frac{1}{6} + 3\cdot\frac{1}{6} + 4\cdot\frac{1}{6} + 5\cdot\frac{1}{6} + 6\cdot\frac{1}{6} = 3.5\]

Konsep Variance

\[Var(X) = E[(X - \mu)^2] = E[X^2] - (E[X])^2\]

Contoh: Variance Dadu

\[E[X] = 3.5\]

\[E[X^2] = 1^2\cdot\frac{1}{6} + 2^2\cdot\frac{1}{6} + 3^2\cdot\frac{1}{6} + 4^2\cdot\frac{1}{6} + 5^2\cdot\frac{1}{6} + 6^2\cdot\frac{1}{6} = 15.1667\]

\[Var(X) = 15.1667 - (3.5)^2 = 15.1667 - 12.25 = 2.9167\]

Expected Value dan Variance untuk Berbagai Distribusi

Distribusi E[X] Var(X)
Bernoulli(p) p p(1-p)
Binomial(n,p) np np(1-p)
Poisson(λ) λ λ
Normal(μ,σ) μ σ²
Uniform(a,b) (a+b)/2 (b-a)²/12
Exponential(λ) 1/λ 1/λ²

Real-World Applications

  1. Quality Control (Binomial)

Scenario: Factory produces items with 2% defect rate

Question: Probability that in sample of 100 items, at most 3 are defective?

Solution: Use Binomial(n=100, p=0.02)

\[P(X \leq 3) = \sum_{k=0}^3 \binom{100}{k} (0.02)^k (0.98)^{100-k}\]

  1. Risk Management (Normal)

Scenario: Portfolio returns follow Normal distribution

Question: Probability of losing more than 10%?

Solution: Use Normal(μ, σ) and calculate P(X < -0.10)

  1. Service Systems (Poisson & Exponential)

Scenario: Customer arrivals at bank follow Poisson process

Questions:

  • Poisson: Probability of k arrivals in hour
  • Exponential: Probability time between arrivals > t minutes

Central Limit Theorem

The Fundamental Theorem of Statistics

\[\text{If } X_1, X_2, ..., X_n \text{ are i.i.d. with } E[X_i] = \mu, Var(X_i) = \sigma^2\]

\[\text{Then } \bar{X} \xrightarrow{d} N\left(\mu, \frac{\sigma^2}{n}\right) \text{ as } n \to \infty\]

Implications of CLT

  • Sample means become normally distributed for large n
  • Works regardless of population distribution shape
  • Foundation for confidence intervals and hypothesis testing
  • n ≥ 30 generally considered “large enough”

5.1 Referensi Buku

Referensi Buku

  1. “Introduction to Probability” by Joseph K. Blitzstein and Jessica Hwang

    Buku komprehensif yang mencakup dasar-dasar probabilitas dan distribusi dengan pendekatan yang mudah dipahami.

  1. “Probability and Statistics for Engineering and the Sciences” by Jay L. Devore

    Buku teks klasik dengan aplikasi praktis dalam bidang teknik dan sains.

  1. “Statistical Inference” by George Casella and Roger L. Berger

    Referensi lanjutan untuk teori statistik dan distribusi probabilitas.

  1. “All of Statistics: A Concise Course in Statistical Inference” by Larry Wasserman

    Panduan komprehensif untuk konsep statistik modern termasuk distribusi probabilitas.

5.2 Kesimpulan

Kesimpulan Video 5 - Probability Distributions

Poin-Poin Penting yang Dipelajari:

Discrete Distributions

  • Bernoulli: Single trial
  • Binomial: Multiple trials
  • Poisson: Event counts
  • Geometric: Wait for success

Continuous Distributions

  • Normal: Natural phenomena
  • Uniform: Equal probability
  • Exponential: Wait times
  • Gamma: General wait times

Key Concepts

  • Expected Value & Variance
  • Probability Mass/Density Functions
  • Central Limit Theorem
  • Real-world applications

Probability distributions memberikan framework matematis untuk memodelkan ketidakpastian dan variabilitas dalam data dunia nyata, membentuk foundation untuk statistical inference dan machine learning.

Random Variables - Video 6 Analysis

Video Source: Random Variables - YouTube

Duration: 15:20 minutes | Content Level: Intermediate

6 Random Variables

Rangkuman Penjelasan Video

Konsep Fundamental Random Variables

Random Variable adalah fungsi matematikaFungsi yang memetakan outcomes dari sample space ke bilangan real yang memberikan nilai numerik untuk setiap outcome dalam sample space.

Definisi Formal Random Variable

Random Variable (X): Fungsi yang memetakan dari sample space (S) ke himpunan bilangan real (ℝ)

\[X: S \rightarrow \mathbb{R}\]

Dimana setiap outcome ω ∈ S dipetakan ke nilai numerik X(ω) ∈ ℝ

Klasifikasi Random Variables

  1. Discrete Random Variables

Karakteristik Discrete RV

  • Nilai yang dapat dihitung (countable)
  • Menggunakan Probability Mass Function (PMF)
  • Contoh: Jumlah head dalam pelemparan koin
  • Notasi: P(X = x)

  1. Continuous Random Variables

Karakteristik Continuous RV

  • Nilai tak terhitung (uncountable)
  • Menggunakan Probability Density Function (PDF)
  • Contoh: Tinggi badan, waktu tunggu
  • Notasi: f(x) dan P(a ≤ X ≤ b)

Klasifikasi Random Variables

Tipe Contoh Nilai Fungsi Notasi
Discrete Jumlah head koin 0,1,2,…,n PMF P(X=x)
Discrete Jumlah defect produk 0,1,2,… PMF P(X=x)
Discrete Jumlah panggilan 0,1,2,… PMF P(X=x)
Continuous Tinggi badan [a,b] PDF f(x)
Continuous Waktu tunggu [0,∞) PDF f(x)
Continuous Berat badan [0,∞) PDF f(x)

Probability Mass Function (PMF)

Definisi dan Properties PMF

\[P(X = x_i) = p_i \quad \text{untuk } i = 1,2,3,...\]

Properties PMF:

  1. \(0 \leq p_i \leq 1\) untuk semua i
  2. \(\sum_{i} p_i = 1\)
  3. \(P(X \in A) = \sum_{x_i \in A} p_i\)

Contoh PMF: Pelemparan Dadu

Scenario: Fair dice dengan 6 sisi

PMF: P(X=x) = 1/6 untuk x = 1,2,3,4,5,6

Visualisasi: Distribusi uniform dengan probabilitas sama untuk setiap outcome

Probability Density Function (PDF)

Definisi dan Properties PDF

\[P(a \leq X \leq b) = \int_a^b f(x) dx\]

Properties PDF:

  1. \(f(x) \geq 0\) untuk semua x
  2. \(\int_{-\infty}^{\infty} f(x) dx = 1\)
  3. \(P(X = a) = 0\) untuk continuous RV

Contoh PDF: Normal Distribution

Scenario: Standard Normal Distribution N(0,1)

PDF: \(f(x) = \frac{1}{\sqrt{2\pi}} e^{-x^2/2}\)

Interpretasi: Area di bawah kurva antara dua titik merepresentasikan probabilitas

Cumulative Distribution Function (CDF)

Definisi CDF

\[F(x) = P(X \leq x)\]

Properties CDF:

  1. \(\lim_{x \to -\infty} F(x) = 0\)
  2. \(\lim_{x \to \infty} F(x) = 1\)
  3. F(x) non-decreasing
  4. F(x) right-continuous

Perbandingan CDF Discrete vs Continuous

Property Discrete Continuous
Shape Step function Smooth curve
Continuity Right-continuous Continuous
P(X=x) P(X=x) = F(x) - F(x-) P(X=x) = 0
Calculation Summation Integration
Range [0,1] [0,1]

Expected Value of Random Variables

Definisi Expected Value

\[E[X] = \sum x_i p_i \quad \text{(Discrete)}\]

\[E[X] = \int_{-\infty}^{\infty} x f(x) dx \quad \text{(Continuous)}\]

Contoh: Expected Value Dadu

\[E[X] = 1\cdot\frac{1}{6} + 2\cdot\frac{1}{6} + 3\cdot\frac{1}{6} + 4\cdot\frac{1}{6} + 5\cdot\frac{1}{6} + 6\cdot\frac{1}{6} = 3.5\]

Contoh: Expected Value Normal(0,1)

\[E[X] = \int_{-\infty}^{\infty} x \cdot \frac{1}{\sqrt{2\pi}} e^{-x^2/2} dx = 0\]

Variance and Standard Deviation

Definisi Variance

\[Var(X) = E[(X - \mu)^2] = E[X^2] - (E[X])^2\]

Contoh: Variance Dadu

\[E[X] = 3.5\]

\[E[X^2] = 1^2\cdot\frac{1}{6} + 2^2\cdot\frac{1}{6} + \cdots + 6^2\cdot\frac{1}{6} = 15.1667\]

\[Var(X) = 15.1667 - (3.5)^2 = 2.9167\]

\[SD(X) = \sqrt{2.9167} = 1.7078\]

Expected Value dan Variance untuk Berbagai Distribusi

Distribusi E[X] Var(X) SD(X)
Bernoulli(0.6) 0.6 0.24 0.49
Binomial(10,0.5) 5 2.5 1.58
Poisson(3) 3 3 1.73
Uniform(0,1) 0.5 1/12 ≈ 0.083 0.289
Normal(0,1) 0 1 1
Exponential(2) 0.5 0.25 0.5

Transformations of Random Variables

Linear Transformations

\[Y = aX + b\]

\[E[Y] = aE[X] + b\]

\[Var(Y) = a^2 Var(X)\]

Contoh: Konversi Suhu

Scenario: X ~ Normal(20, 4) suhu dalam Celsius

Transformasi: Y = 1.8X + 32 (konversi ke Fahrenheit)

\[E[Y] = 1.8 \times 20 + 32 = 68\]

\[Var(Y) = (1.8)^2 \times 4 = 12.96\]

Joint Random Variables

Joint Probability Distributions

\[P(X = x, Y = y) \quad \text{(Discrete)}\]

\[f_{X,Y}(x,y) \quad \text{(Continuous)}\]

Contoh: Pelemparan Dua Dadu

X: Hasil dadu pertama

Y: Hasil dadu kedua

Joint PMF: P(X=x, Y=y) = 1/36 untuk semua x,y ∈ {1,2,3,4,5,6}

Covariance and Correlation

Mengukur Hubungan Antar Random Variables

\[Cov(X,Y) = E[(X - \mu_X)(Y - \mu_Y)]\]

\[\rho_{X,Y} = \frac{Cov(X,Y)}{\sigma_X \sigma_Y}\]

Interpretasi Correlation:

  • ρ = 1: Perfect positive linear relationship
  • ρ = 0: No linear relationship
  • ρ = -1: Perfect negative linear relationship

Real-World Applications

  1. Finance and Investment

Portfolio Returns: Random variable mewakili return investasi

Risk Management: Variance mengukur volatilitas

Diversification: Correlation antar assets menentukan risk reduction

  1. Quality Control

Defect Rates: Binomial random variable

Process Capability: Normal distribution untuk quality characteristics

Control Charts: Monitoring expected value dan variance

  1. Machine Learning

Feature Engineering: Transformasi random variables

Probabilistic Models: Modeling uncertainty dengan distributions

Bayesian Inference: Prior dan posterior distributions

6.1 Referensi Buku

Referensi Buku

  1. “Introduction to Probability” by Joseph K. Blitzstein and Jessica Hwang

    Buku komprehensif yang mencakup konsep random variables dengan pendekatan yang intuitif dan banyak contoh aplikasi.

  1. “Probability and Statistics for Engineering and the Sciences” by Jay L. Devore

    Buku teks klasik dengan aplikasi praktis random variables dalam bidang teknik dan sains.

  1. “A First Course in Probability” by Sheldon Ross

    Referensi mendalam untuk teori probabilitas termasuk transformasi random variables dan joint distributions.

  1. “Statistical Inference” by George Casella and Roger L. Berger

    Buku lanjutan yang membahas teori random variables secara rigor dengan aplikasi dalam statistical inference.

6.2 Kesimpulan

Kesimpulan Video 6 - Random Variables

Poin-Poin Penting yang Dipelajari:

Fundamental Concepts

  • Definisi Random Variables
  • Discrete vs Continuous
  • PMF, PDF, dan CDF
  • Expected Value dan Variance

Advanced Topics

  • Transformasi Random Variables
  • Joint Distributions
  • Covariance dan Correlation
  • Moment Generating Functions

Practical Applications

  • Finance dan Risk Management
  • Quality Control
  • Machine Learning
  • Scientific Research

Random variables memberikan bahasa matematis yang powerful untuk memodelkan ketidakpastian dan variabilitas, membentuk foundation untuk statistical inference, machine learning, dan decision making under uncertainty.

LS0tDQp0aXRsZTogIkVzc2VudGlhbCBvZiBQcm9iYWJpbGl0eSIgIyBNYWluIHRpdGxlIG9mIHRoZSBkb2N1bWVudA0Kc3VidGl0bGU6ICJUdWdhcyBXZWVrIDEwICIgDQphdXRob3I6IA0KLSAiQWRpbmRhIEFkZWxpYSBmdXRyaSAoNTIyNTAwNTUpIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCIgDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KLS0tDQp0aXRsZTogIkVzc2VudGlhbCBvZiBQcm9iYWJpbGl0eSAtIFZpZGVvIEFuYWx5c2lzIg0KYXV0aG9yOiAiQWRpbmRhIEFkZWxpYSBGdXRyaSINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KLS0tDQoNCg0KYGBge2NzcywgZWNobz1GQUxTRX0NCi8qIHN0eWxlcy5jc3MgLSBFbmhhbmNlZCB3aXRoIFRvb2x0aXBzIGFuZCBCZXR0ZXIgTGF5b3V0ICovDQpib2R5IHsNCiAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICBsaW5lLWhlaWdodDogMS42Ow0KICBjb2xvcjogIzVhNGE0YTsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmZjVmNSAwJSwgI2ZmZWVmMCAxMDAlKTsNCiAgbWluLWhlaWdodDogMTAwdmg7DQogIG1hcmdpbjogMDsNCiAgcGFkZGluZzogMjBweDsNCn0NCg0KLyogU21vb3RoIHNjcm9sbGluZyAqLw0KaHRtbCB7DQogIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOw0KfQ0KDQovKiBTZWxlY3Rpb24gY29sb3IgKi8NCjo6c2VsZWN0aW9uIHsNCiAgYmFja2dyb3VuZDogI2ZmYWZjYzsNCiAgY29sb3I6ICM1YTRhNGE7DQp9DQoNCi8qIExpbmsgc3R5bGluZyAqLw0KYSB7DQogIGNvbG9yOiAjZmY2Yjk1Ow0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCmE6aG92ZXIgew0KICBjb2xvcjogI2ZmNGQ3YzsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsNCn0NCg0KLyogQ29kZSBibG9jayBzdHlsaW5nICovDQpwcmUgew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KICBjb2xvcjogIzdjMmQzZjsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNmZmFmY2M7DQogIG92ZXJmbG93LXg6IGF1dG87DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjA1KTsNCn0NCg0KcHJlOmhvdmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7DQogIGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgyNTUsIDE3NSwgMjA0LCAwLjIpOw0KfQ0KDQpjb2RlIHsNCiAgYmFja2dyb3VuZDogI2ZmZTRlYzsNCiAgY29sb3I6ICNmZjZiOTU7DQogIHBhZGRpbmc6IDJweCA2cHg7DQogIGJvcmRlci1yYWRpdXM6IDRweDsNCiAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsNCiAgZm9udC13ZWlnaHQ6IDUwMDsNCn0NCg0KLyogQ3VzdG9tIGNsYXNzZXMgZm9yIGNvbnRlbnQgYm94ZXMgKi8NCi5jb250ZW50LWJveCB7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmFmY2MgMCUsICNmZjZiOTUgMTAwJSk7DQogIGNvbG9yOiAjZmZhZmNjOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGJvcmRlcjogbm9uZTsNCn0NCg0KLmNvbnRlbnQtYm94OmhvdmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOw0KICBib3gtc2hhZG93OiAwIDEycHggMzBweCByZ2JhKDAsMCwwLDAuMTUpOw0KfQ0KDQouZm9ybXVsYS1ib3ggew0KICBiYWNrZ3JvdW5kOiAjQkVFMUU2Ow0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmY2Yjk1Ow0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCi5mb3JtdWxhLWJveDpob3ZlciB7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsNCiAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi5leGFtcGxlLWJveCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG1hcmdpbjogMTVweCAwOw0KICBib3JkZXI6IDFweCBzb2xpZCAjZmZhZmNjOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQouZXhhbXBsZS1ib3g6aG92ZXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNXB4KTsNCiAgYm9yZGVyLWNvbG9yOiAjZmY2Yjk1Ow0KfQ0KDQoucmVmZXJlbmNlLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQoucmVmZXJlbmNlLWJveDpob3ZlciB7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsNCiAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi50b29sdGlwLWVsZW1lbnQgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBjb2xvcjogI2ZmYWZjYzsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGJvcmRlci1ib3R0b206IDJweCBkb3R0ZWQgI2ZmYWZjYzsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCn0NCg0KLnRvb2x0aXAtZWxlbWVudDpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsNCiAgY29sb3I6ICNmZjRkN2M7DQp9DQoNCi5jb25jbHVzaW9uLWJveCB7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmFmY2MgMCUsICNmZjZiOTUgMTAwJSk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjEpOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQouY29uY2x1c2lvbi1ib3g6aG92ZXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7DQogIGJveC1zaGFkb3c6IDAgMTJweCAzMHB4IHJnYmEoMCwwLDAsMC4xNSk7DQp9DQoNCi5uZXh0LXRvcGljLWJveCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG1hcmdpbjogMjVweCAwOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGJvcmRlcjogMnB4IGRhc2hlZCAjZmZhZmNjOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQoubmV4dC10b3BpYy1ib3g6aG92ZXIgew0KICBib3JkZXItY29sb3I6ICNmZjZiOTU7DQogIGJhY2tncm91bmQ6ICNmZmU0ZWM7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7DQp9DQoNCi5oZWFkZXItbWFpbiB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgcGFkZGluZzogNDBweDsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCn0NCg0KLmhlYWRlci1tYWluOmhvdmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOw0KICBib3gtc2hhZG93OiAwIDEycHggMzBweCByZ2JhKDAsMCwwLDAuMTUpOw0KfQ0KDQovKiBDU1Mgc2VkZXJoYW5hIHVudHVrIHRvb2x0aXAgZm90byBiaXJ1IHNvZnQgKi8NCiNGb3RvIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCiNGb3RvOmhvdmVyOjphZnRlciB7DQogIGNvbnRlbnQ6ICJGb3RvIFByb2ZpbCI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgYm90dG9tOiAtMzVweDsNCiAgbGVmdDogNTAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIGJhY2tncm91bmQ6ICNGRjZCOTU7DQogIGNvbG9yOiB3aGl0ZTsNCiAgcGFkZGluZzogNnB4IDEycHg7DQogIGJvcmRlci1yYWRpdXM6IDZweDsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBmb250LXdlaWdodDogNTAwOw0KICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICB6LWluZGV4OiAxMDAwOw0KfQ0KDQojRm90bzpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4wMyk7DQogIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggcmdiYSgxOTksIDIxLCAxMzMsIDAuNCkNCjsNCn0NCg0KDQoudmlkZW8tY2FyZCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQoudmlkZW8tY2FyZDpob3ZlciB7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsNCiAgYm94LXNoYWRvdzogMCA2cHggMjBweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi5pbWFnZS1jb250YWluZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIG1hcmdpbjogMjVweCAwOw0KfQ0KDQoucHJvZmlsZS1pbWcgew0KICB3aWR0aDogMTgwcHg7DQogIGhlaWdodDogMTgwcHg7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgYm9yZGVyOiA1cHggc29saWQgI2ZmYWZjYzsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCi5wcm9maWxlLWltZzpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7DQogIGJvcmRlci1jb2xvcjogI2ZmNmI5NTsNCiAgYm94LXNoYWRvdzogMCAxMnB4IDMwcHggcmdiYSgwLDAsMCwwLjE1KTsNCn0NCg0KLnRhYmxlLWN1c3RvbSB7DQogIHdpZHRoOiAxMDAlOw0KICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICBtYXJnaW46IDIwcHggMDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQoudGFibGUtY3VzdG9tIHRoIHsNCiAgYmFja2dyb3VuZDogI2ZmNmI5NTsNCiAgY29sb3I6IHdoaXRlOw0KICBwYWRkaW5nOiAxNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICBmb250LXdlaWdodDogNjAwOw0KICBmb250LXNpemU6IDEuMWVtOw0KfQ0KDQoudGFibGUtY3VzdG9tIHRkIHsNCiAgcGFkZGluZzogMTVweDsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmU0ZWM7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCi50YWJsZS1jdXN0b20gdHI6aG92ZXIgdGQgew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KICB0cmFuc2Zvcm06IHNjYWxlKDEuMDEpOw0KfQ0KDQovKiBUb29sdGlwIFN0eWxlcyAqLw0KLnRvb2x0aXAtZWxlbWVudCB7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGNvbG9yOiAjZmY2Yjk1Ow0KICBmb250LXdlaWdodDogNjAwOw0KICBib3JkZXItYm90dG9tOiAycHggZG90dGVkICNmZmFmY2M7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCi50b29sdGlwLWVsZW1lbnQ6aG92ZXIgew0KICBjb2xvcjogI2ZmNGQ3YzsNCiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmNmI5NTsNCn0NCg0KLnRvb2x0aXAtY29udGVudCB7DQogIHZpc2liaWxpdHk6IGhpZGRlbjsNCiAgd2lkdGg6IDMwMHB4Ow0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmY2Yjk1IDAlLCAjZmY0ZDdjIDEwMCUpOw0KICBjb2xvcjogd2hpdGU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgcGFkZGluZzogMTVweDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB6LWluZGV4OiAxMDAwOw0KICBib3R0b206IDEyNSU7DQogIGxlZnQ6IDUwJTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOw0KICBvcGFjaXR5OiAwOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4yKTsNCiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCiAgZm9udC1zaXplOiAwLjllbTsNCiAgbGluZS1oZWlnaHQ6IDEuNDsNCn0NCg0KLnRvb2x0aXAtY29udGVudDo6YWZ0ZXIgew0KICBjb250ZW50OiAiIjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDEwMCU7DQogIGxlZnQ6IDUwJTsNCiAgbWFyZ2luLWxlZnQ6IC01cHg7DQogIGJvcmRlci13aWR0aDogNXB4Ow0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6ICNmZjZiOTUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7DQp9DQoNCi50b29sdGlwLWVsZW1lbnQ6aG92ZXIgLnRvb2x0aXAtY29udGVudCB7DQogIHZpc2liaWxpdHk6IHZpc2libGU7DQogIG9wYWNpdHk6IDE7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01cHgpOw0KfQ0KDQovKiBHcmlkIExheW91dCBmb3IgQ29uY2x1c2lvbiAqLw0KLmNvbmNsdXNpb24tZ3JpZCB7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzIwcHgsIDFmcikpOw0KICBnYXA6IDI1cHg7DQogIG1hcmdpbi10b3A6IDI1cHg7DQp9DQoNCi5jb25jbHVzaW9uLWl0ZW0gew0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQouY29uY2x1c2lvbi1pdGVtOmhvdmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOw0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7DQogIGJveC1zaGFkb3c6IDAgOHB4IDIwcHggcmdiYSgwLDAsMCwwLjEpOw0KfQ0KDQovKiBBbmltYXRpb24gKi8NCkBrZXlmcmFtZXMgZmFkZUluVXAgew0KICBmcm9tIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsNCiAgfQ0KICB0byB7DQogICAgb3BhY2l0eTogMTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7DQogIH0NCn0NCg0KLmFuaW1hdGUtZmFkZUluIHsNCiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjZzIGVhc2Utb3V0Ow0KfQ0KDQovKiBNYXRoIGZvcm11bGEgc3R5bGluZyAqLw0KLm1hdGgtZm9ybXVsYSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1zaXplOiAxLjZlbTsNCiAgY29sb3I6ICNmZjZiOTU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBtYXJnaW46IDIwcHggMDsNCiAgcGFkZGluZzogMjBweDsNCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBib3JkZXI6IDJweCBzb2xpZCAjZmZhZmNjOw0KfQ0KDQovKiBSZXNwb25zaXZlIGRlc2lnbiAqLw0KQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogIGJvZHkgew0KICAgIHBhZGRpbmc6IDE1cHg7DQogIH0NCiAgDQogIC5oZWFkZXItbWFpbiB7DQogICAgcGFkZGluZzogMjVweDsNCiAgfQ0KICANCiAgLmNvbnRlbnQtYm94LCAuZm9ybXVsYS1ib3gsIC5leGFtcGxlLWJveCB7DQogICAgcGFkZGluZzogMjBweDsNCiAgICBtYXJnaW46IDIwcHggMDsNCiAgfQ0KICANCiAgLnByb2ZpbGUtaW1nIHsNCiAgICB3aWR0aDogMTUwcHg7DQogICAgaGVpZ2h0OiAxNTBweDsNCiAgfQ0KICANCiAgLnRvb2x0aXAtY29udGVudCB7DQogICAgd2lkdGg6IDI1MHB4Ow0KICAgIGZvbnQtc2l6ZTogMC44ZW07DQogIH0NCiAgDQogIC5jb25jbHVzaW9uLWdyaWQgew0KICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOw0KICAgIGdhcDogMTVweDsNCiAgfQ0KICANCiAgLm1hdGgtZm9ybXVsYSB7DQogICAgZm9udC1zaXplOiAxLjJlbTsNCiAgICBwYWRkaW5nOiAxNXB4Ow0KICB9DQp9DQoNCi8qIEN1c3RvbSBzY3JvbGxiYXIgKi8NCjo6LXdlYmtpdC1zY3JvbGxiYXIgew0KICB3aWR0aDogOHB4Ow0KfQ0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7DQogIGJhY2tncm91bmQ6ICNmZmFmY2M7DQogIGJvcmRlci1yYWRpdXM6IDRweDsNCn0NCg0KOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7DQogIGJhY2tncm91bmQ6ICNmZjZiOTU7DQp9DQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMgU2V0dXAgY2h1bmsgLSBIQU5ZQSBVTlRVSyBTRVRVUCwgVElEQUsgRElUQU1QSUxLQU4NCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgZWNobyA9IEZBTFNFLCAgIyBTZW11YSBjb2RlIFIgdGlkYWsgZGl0YW1waWxrYW4NCiAgd2FybmluZyA9IEZBTFNFLA0KICBtZXNzYWdlID0gRkFMU0UsDQogIGZpZy5hbGlnbiA9ICJjZW50ZXIiLA0KICBmaWcud2lkdGggPSAxMCwNCiAgZmlnLmhlaWdodCA9IDYNCikNCg0KIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcw0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHNjYWxlcykNCg0KIyBDdXN0b20gdGhlbWUgdW50dWsgZ2dwbG90DQpjdXN0b21fdGhlbWUgPC0gZnVuY3Rpb24oKSB7DQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxOCwgY29sb3IgPSAiI2ZmYWZjYyIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxMiwgY29sb3IgPSAiI2ZmYWZjYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDEyLCBjb2xvciA9ICIjZmZhZmNjIiksDQogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgY29sb3IgPSAiI2ZmYWZjYyIpLA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgc2l6ZSA9IDExKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNlY2YwZjEiLCBsaW5ld2lkdGggPSAwLjMpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSkNCiAgKQ0KfQ0KYGBgDQoNCjxkaXYgY2xhc3M9ImhlYWRlci1tYWluIGFuaW1hdGUtZmFkZUluIj4NCiAgPGgxIHN0eWxlPSJjb2xvcjogI2ZmYWZjYzsgbWFyZ2luLWJvdHRvbTogMTVweDsiPiBFc3NlbnRpYWwgb2YgUHJvYmFiaWxpdHk8L2gxPg0KICA8aDMgc3R5bGU9ImNvbG9yOiAjNWE0YTRhOyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+Q29tcHJlaGVuc2l2ZSBBbmFseXNpcyBvZiBCYXNpYyBQcm9iYWJpbGl0eSBDb25jZXB0czwvaDM+DQogIDxwIHN0eWxlPSJmb250LXNpemU6IDEuMWVtOyI+PHN0cm9uZz5OYW1hOiBBZGluZGEgQWRlbGlhIEZ1dHJpPC9zdHJvbmc+IHwgPHN0cm9uZz5OSU06IDUyMjUwMDU1PC9zdHJvbmc+PC9wPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImltYWdlLWNvbnRhaW5lciI+DQo8aW1nIGlkPSJGb3RvIiBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hZGluZGFhZGVsaWFmdXRyaTYtZ2lmL3R1Z2FzLXdlZWstMTAtYWRpbmRhLWFkZWxpYS1mdXRyaS9tYWluL2FrdXV1LmpwZWciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjIwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0idmlkZW8tY2FyZCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMiBzdHlsZT0iY29sb3I6ICNmZjZiOTU7IG1hcmdpbi1ib3R0b206IDE1cHg7Ij4gVmlkZW8gQW5hbHlzaXMgMTogQmFzaWMgUHJvYmFiaWxpdHkgQ29uY2VwdHM8L2gyPg0KICA8cD48c3Ryb25nPlZpZGVvIFNvdXJjZTo8L3N0cm9uZz4gPGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS95bmpIS0JDaUdYWT9zaT1xcWd5cnRvaDYwcVAxdjFzIiB0YXJnZXQ9Il9ibGFuayI+QmFzaWMgUHJvYmFiaWxpdHkgQ29uY2VwdHMgLSBZb3VUdWJlPC9hPjwvcD4NCiAgPHA+PHN0cm9uZz5EdXJhdGlvbjo8L3N0cm9uZz4gMTU6MzAgbWludXRlcyB8IDxzdHJvbmc+Q29udGVudCBMZXZlbDo8L3N0cm9uZz4gQmVnaW5uZXI8L3A+DQo8L2Rpdj4NCg0KIyBLb25zZXAgRGFzYXIgUHJvYmFiaWxpdGFzDQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCiAgPGgyPiBSYW5na3VtYW4gUGVuamVsYXNhbiBWaWRlbzwvaDI+DQogIDxoMz5Lb25zZXAgRGFzYXIgUHJvYmFiaWxpdGFzPC9oMz4NCiAgPHA+UHJvYmFiaWxpdGFzIG1lcnVwYWthbiA8c3BhbiBjbGFzcz0idG9vbHRpcC1lbGVtZW50Ij51a3VyYW4ga3VhbnRpdGF0aWY8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5OaWxhaSBudW1lcmlrIGFudGFyYSAwIGRhbiAxIHlhbmcgbWVyZXByZXNlbnRhc2lrYW4ga2V0aWRha3Bhc3RpYW4gc3VhdHUga2VqYWRpYW48L3NwYW4+PC9zcGFuPiBkYXJpIGtlbXVuZ2tpbmFuIHRlcmphZGlueWEgc3VhdHUgcGVyaXN0aXdhLjwvcD4NCiAgPHVsPg0KICAgIDxsaT5Qcm9iYWJpbGl0YXMgYmVybmlsYWkgYW50YXJhIDxzdHJvbmc+MDwvc3Ryb25nPiAobXVzdGFoaWwpIGhpbmdnYSA8c3Ryb25nPjE8L3N0cm9uZz4gKHBhc3RpKTwvbGk+DQogICAgPGxpPktvbnNlcCBwcm9iYWJpbGl0YXMgZGlndW5ha2FuIHVudHVrIG1lbW9kZWxrYW4gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+a2V0aWRha3Bhc3RpYW48c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5TaXR1YXNpIGRpbWFuYSBvdXRjb21lIHRpZGFrIGRhcGF0IGRpcHJlZGlrc2kgZGVuZ2FuIHBhc3RpPC9zcGFuPjwvc3Bhbj48L2xpPg0KICAgIDxsaT5BcGxpa2FzaSBkYWxhbSBrZWhpZHVwYW4gc2VoYXJpLWhhcmk6IHByZWRpa3NpIGN1YWNhLCBhc3VyYW5zaSwgcGVybWFpbmFuPC9saT4NCiAgPC91bD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJmb3JtdWxhLWJveCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMz4gUnVtdXMgRnVuZGFtZW50YWwgUHJvYmFiaWxpdGFzPC9oMz4NCiAgPHA+PHN0cm9uZz5EZWZpbmlzaSBLbGFzaWsgUHJvYmFiaWxpdGFzOjwvc3Ryb25nPjwvcD4NCiAgDQogIDxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQokJFAoQSkgPSBcZnJhY3tuKEEpfXtuKFMpfSA9IFxmcmFje1x0ZXh0e0p1bWxhaCBvdXRjb21lIHlhbmcgbWVuZ3VudHVuZ2thbn19e1x0ZXh0e1RvdGFsIG91dGNvbWUgeWFuZyBtdW5na2lufX0kJA0KICA8L2Rpdj4NCiAgDQogIDxwPjxzdHJvbmc+S2V0ZXJhbmdhbjo8L3N0cm9uZz48L3A+DQogIDx1bD4NCiAgICA8bGk+JFAoQSkkID0gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+UHJvYmFiaWxpdGFzIGtlamFkaWFuIEE8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5QZWx1YW5nIHRlcmphZGlueWEgZXZlbnQgQSBkYWxhbSBydWFuZyBzYW1wZWw8L3NwYW4+PC9zcGFuPjwvbGk+DQogICAgPGxpPiRuKEEpJCA9IDxzcGFuIGNsYXNzPSJ0b29sdGlwLWVsZW1lbnQiPkJhbnlha255YSBlbGVtZW4gZGFsYW0ga2VqYWRpYW4gQTxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPkp1bWxhaCBvdXRjb21lIHlhbmcgdGVybWFzdWsgZGFsYW0gZXZlbnQgQTwvc3Bhbj48L3NwYW4+PC9saT4NCiAgICA8bGk+JG4oUykkID0gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+QmFueWFrbnlhIGVsZW1lbiBkYWxhbSBydWFuZyBzYW1wZWwgUzxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPlRvdGFsIHNlbXVhIG91dGNvbWUgeWFuZyBtdW5na2luIGRhbGFtIGVrc3BlcmltZW48L3NwYW4+PC9zcGFuPjwvbGk+DQogIDwvdWw+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KICA8aDM+IFJ1YW5nIFNhbXBlbCBkYW4gS2VqYWRpYW48L2gzPg0KICA8cD48c3Ryb25nPlJ1YW5nIFNhbXBlbCAoU2FtcGxlIFNwYWNlKTwvc3Ryb25nPiBhZGFsYWggPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+aGltcHVuYW4gc2VtdWEgb3V0Y29tZTxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPkt1bXB1bGFuIHNlbXVhIGhhc2lsIHlhbmcgbXVuZ2tpbiBkYXJpIHN1YXR1IGVrc3BlcmltZW4gYWNhazwvc3Bhbj48L3NwYW4+IHlhbmcgbXVuZ2tpbiBkYXJpIHN1YXR1IGVrc3BlcmltZW4uPC9wPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PiBDb250b2g6IFBlbGVtcGFyYW4gRGFkdTwvaDQ+DQo8cD48c3Ryb25nPlJ1YW5nIFNhbXBlbDo8L3N0cm9uZz4gJFMgPSBcXHsxLCAyLCAzLCA0LCA1LCA2XFx9JDwvcD4NCjxwPjxzdHJvbmc+S2VqYWRpYW4gQSAoYW5na2EgZ2VuYXApOjwvc3Ryb25nPiAkQSA9IFxcezIsIDQsIDZcXH0kPC9wPg0KPHA+PHN0cm9uZz5Qcm9iYWJpbGl0YXMgQTo8L3N0cm9uZz4gJFAoQSkgPSBcZnJhY3szfXs2fSA9IDAuNSQ8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBLb25zZXAgUHJvYmFiaWxpdGFzIERhc2FyDQoNCjxkaXYgY2xhc3M9InBsb3QtY29udGFpbmVyIGFuaW1hdGUtZmFkZUluIj4NCjxkaXYgY2xhc3M9InBsb3QtdG9vbHRpcCI+DQo8c3Ryb25nPkRpYWdyYW0gQmF0YW5nIFByb2JhYmlsaXRhczwvc3Ryb25nPg0KPHNwYW4gY2xhc3M9InRvb2x0aXAtY29udGVudCI+DQo8c3Ryb25nPlZpc3VhbGlzYXNpIFByb2JhYmlsaXRhczwvc3Ryb25nPjxicj48YnI+DQogICBEaWFncmFtIGluaSBtZW51bmp1a2thbiBwZXJiYW5kaW5nYW4gcHJvYmFiaWxpdGFzIGRhcmkgYmVyYmFnYWkgZWtzcGVyaW1lbjo8YnI+DQogICAgICDigKIgRGFkdSBhbmdrYSBnZW5hcDogMy82ID0gNTAlPGJyPg0KICAgICAg4oCiIEtvaW4gSGVhZDogMS8yID0gNTAlPGJyPg0KICAgICAg4oCiIEthcnR1IEhhdGk6IDEzLzUyID0gMjUlPGJyPg0KICAgICAg4oCiIERhZHUgPjQ6IDIvNiA9IDMzLjMlDQo8L3NwYW4+DQo8L2Rpdj4NCg0KYGBge3IgcHJvYl92aXN1YWxpemF0aW9uLCBlY2hvPUZBTFNFfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIERhdGEgdW50dWsgdmlzdWFsaXNhc2kgcHJvYmFiaWxpdGFzIGRhc2FyDQpzZXQuc2VlZCgxMjMpDQoNCnByb2JfZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBFa3NwZXJpbWVuID0gYygiRGFkdSBBbmdrYSBHZW5hcCIsICJLb2luIEhlYWQiLCAiS2FydHUgSGF0aSIsICJEYWR1ID4gNCIpLA0KICBNZW5ndW50dW5na2FuID0gYygzLCAxLCAxMywgMiksDQogIFRvdGFsID0gYyg2LCAyLCA1MiwgNiksDQogIFByb2JhYmlsaXRhcyA9IGMoMy82LCAxLzIsIDEzLzUyLCAyLzYpDQopDQoNCiMgUGxvdCB2aXN1YWxpc2FzaSBwcm9iYWJpbGl0YXMNCnAxIDwtIGdncGxvdChwcm9iX2RhdGEsIGFlcyh4ID0gcmVvcmRlcihFa3NwZXJpbWVuLCBQcm9iYWJpbGl0YXMpLCB5ID0gUHJvYmFiaWxpdGFzLCBmaWxsID0gUHJvYmFiaWxpdGFzKSkgKw0KICBnZW9tX2NvbChhbHBoYSA9IDAuOSwgd2lkdGggPSAwLjcsIHNob3cubGVnZW5kID0gRkFMU0UpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChyb3VuZChQcm9iYWJpbGl0YXMgKiAxMDAsIDEpLCAiJSIpKSwgDQogICAgICAgICAgICB2anVzdCA9IC0wLjUsIHNpemUgPSA1LCBmb250ZmFjZSA9ICJib2xkIiwgY29sb3IgPSAiIzJjM2U1MCIpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiI2ZmYWZjYyIsIGhpZ2ggPSAiI2ZmNmI5NSIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSksIGxpbWl0cyA9IGMoMCwgMSkpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpc2FzaSBQcm9iYWJpbGl0YXMgQmVyYmFnYWkgRWtzcGVyaW1lbiIsDQogICAgc3VidGl0bGUgPSAiUGVyYmFuZGluZ2FuIHByb2JhYmlsaXRhcyBkYWxhbSBzY2VuYXJpbyBiZXJiZWRhIiwNCiAgICB4ID0gIkplbmlzIEVrc3BlcmltZW4iLA0KICAgIHkgPSAiUHJvYmFiaWxpdGFzIg0KICApICsNCiAgY3VzdG9tX3RoZW1lKCkNCg0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBjbGFzcz0icGxvdC1pbmZvIj4NCjxwPiA8c3Ryb25nPkludGVycHJldGFzaTo8L3N0cm9uZz4gRGlhZ3JhbSBkaSBhdGFzIG1lbnVuanVra2FuIGJhaHdhIHByb2JhYmlsaXRhcyBtZW5kYXBhdGthbiBhbmdrYSBnZW5hcCBwYWRhIGRhZHUgc2FtYSBkZW5nYW4gbWVuZGFwYXRrYW4gSGVhZCBwYWRhIGtvaW4gKDUwJSksIHNlbWVudGFyYSBwcm9iYWJpbGl0YXMgbWVuZGFwYXRrYW4ga2FydHUgaGF0aSBsZWJpaCByZW5kYWggKDI1JSkuPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQojIyBTaW11bGFzaSBFbXBpcmlzIHZzIFRlb3JpdGlzDQoNCmBgYHtyIGVtcGlyaWNhbF9zaW11bGF0aW9uLCBlY2hvPUZBTFNFfQ0KIyBTaW11bGFzaSBlbXBpcmlzIHZzIHRlb3JpdGlzDQpzZXQuc2VlZCgxMjMpDQpuX3NpbXVsYXRpb25zIDwtIDEwMDAwDQoNCmNvaW5fcmVzdWx0cyA8LSBzYW1wbGUoYygiSGVhZCIsICJUYWlsIiksIG5fc2ltdWxhdGlvbnMsIHJlcGxhY2UgPSBUUlVFKQ0KZW1waXJpY2FsX3Byb2IgPC0gdGFibGUoY29pbl9yZXN1bHRzKSAvIG5fc2ltdWxhdGlvbnMNCg0KY29tcGFyaXNvbl9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIE91dGNvbWUgPSBjKCJIZWFkIiwgIlRhaWwiKSwNCiAgRW1waXJpY2FsID0gYXMubnVtZXJpYyhlbXBpcmljYWxfcHJvYiksDQogIFRoZW9yZXRpY2FsID0gYygwLjUsIDAuNSkNCikNCg0KIyBQbG90IHBlcmJhbmRpbmdhbg0KcDIgPC0gZ2dwbG90KGNvbXBhcmlzb25fZGF0YSwgYWVzKHggPSBPdXRjb21lKSkgKw0KICBnZW9tX2NvbChhZXMoeSA9IFRoZW9yZXRpY2FsLCBmaWxsID0gIlRoZW9yZXRpY2FsIiksIA0KICAgICAgICAgICBhbHBoYSA9IDAuNywgd2lkdGggPSAwLjQsIHBvc2l0aW9uID0gcG9zaXRpb25fbnVkZ2UoeCA9IC0wLjIpKSArDQogIGdlb21fY29sKGFlcyh5ID0gRW1waXJpY2FsLCBmaWxsID0gIkVtcGlyaWNhbCIpLCANCiAgICAgICAgICAgYWxwaGEgPSAwLjksIHdpZHRoID0gMC40LCBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKHggPSAwLjIpKSArDQogIGdlb21fdGV4dChhZXMoeSA9IFRoZW9yZXRpY2FsLCBsYWJlbCA9IHBhc3RlMChyb3VuZChUaGVvcmV0aWNhbCAqIDEwMCwgMSksICIlIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9udWRnZSh4ID0gLTAuMiwgeSA9IDAuMDUpLCBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiMyYzNlNTAiKSArDQogIGdlb21fdGV4dChhZXMoeSA9IEVtcGlyaWNhbCwgbGFiZWwgPSBwYXN0ZTAocm91bmQoRW1waXJpY2FsICogMTAwLCAxKSwgIiUiKSksDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX251ZGdlKHggPSAwLjIsIHkgPSAwLjA1KSwgc2l6ZSA9IDQsIGZvbnRmYWNlID0gImJvbGQiLCBjb2xvciA9ICIjMmMzZTUwIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJUaGVvcmV0aWNhbCIgPSAiI2ZmYWZjYyIsICJFbXBpcmljYWwiID0gIiNmZjZiOTUiKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgbGltaXRzID0gYygwLCAwLjYpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiUGVyYmFuZGluZ2FuIFByb2JhYmlsaXRhcyBUZW9yaXRpcyB2cyBFbXBpcmlzIiwNCiAgICBzdWJ0aXRsZSA9IHBhc3RlKCJCZXJkYXNhcmthbiIsIGZvcm1hdChuX3NpbXVsYXRpb25zLCBiaWcubWFyayA9ICIsIiksICJzaW11bGFzaSBwZWxlbXBhcmFuIGtvaW4iKSwNCiAgICB5ID0gIlByb2JhYmlsaXRhcyIsDQogICAgZmlsbCA9ICJKZW5pcyBQcm9iYWJpbGl0YXMiDQogICkgKw0KICBjdXN0b21fdGhlbWUoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQpgYGANCg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMz4gU2ltdWxhc2kgRW1waXJpcyB2cyBQcm9iYWJpbGl0YXMgVGVvcml0aXM8L2gzPg0KICA8cD5WaWRlbyBtZW5qZWxhc2thbiBwZXJiZWRhYW4gYW50YXJhOjwvcD4NCiAgPHVsPg0KICAgIDxsaT48c3Ryb25nPlByb2JhYmlsaXRhcyBUZW9yaXRpczo8L3N0cm9uZz4gQmVyZGFzYXJrYW4gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+bG9naWthIGRhbiBtYXRlbWF0aWthPHNwYW4gY2xhc3M9InRvb2x0aXAtY29udGVudCI+UGVyaGl0dW5nYW4gYmVyZGFzYXJrYW4gdGVvcmkgZGFuIGFzdW1zaSBpZGVhbDwvc3Bhbj48L3NwYW4+PC9saT4NCiAgICA8bGk+PHN0cm9uZz5Qcm9iYWJpbGl0YXMgRW1waXJpczo8L3N0cm9uZz4gQmVyZGFzYXJrYW4gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+cGVuZ2FtYXRhbiBkYW4gZWtzcGVyaW1lbjxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPlBlcmhpdHVuZ2FuIGJlcmRhc2Fya2FuIGRhdGEgYWt0dWFsIGRhcmkgcGVyY29iYWFuPC9zcGFuPjwvc3Bhbj48L2xpPg0KICA8L3VsPg0KPC9kaXY+DQoNCiMjIEFrc2lvbWEgUHJvYmFiaWxpdGFzDQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMz4gQWtzaW9tYSBQcm9iYWJpbGl0YXM8L2gzPg0KPHA+VmlkZW8gbWVuamVsYXNrYW4gdGlnYSBha3Npb21hIGZ1bmRhbWVudGFsIHByb2JhYmlsaXRhczo8L3A+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQogPGg0PiBha3Npb21hIDE6IE5vbi1uZWdhdGl2aXR5PC9oND4NCiA8cD4kUChBKSBcZ2VxIDAkIHVudHVrIHNldGlhcCBrZWphZGlhbiBBPC9wPg0KIDxwPjxlbT5Qcm9iYWJpbGl0YXMgdGlkYWsgYm9sZWggYmVybmlsYWkgbmVnYXRpZjwvZW0+PC9wPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PiBBa3Npb21hIDI6IE5vcm1hbGl6YXRpb248L2g0Pg0KPHA+JFAoUykgPSAxJCBkaW1hbmEgUyBhZGFsYWggcnVhbmcgc2FtcGVsPC9wPg0KPHA+PGVtPlByb2JhYmlsaXRhcyB0b3RhbCBzZW11YSBvdXRjb21lIHlhbmcgbXVuZ2tpbiBhZGFsYWggMTwvZW0+PC9wPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PiBBa3Npb21hIDM6IEFkZGl0aXZpdHk8L2g0Pg0KPHA+VW50dWsga2VqYWRpYW4gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+bXV0dWFsbHkgZXhjbHVzaXZlPHNwYW4gY2xhc3M9InRvb2x0aXAtY29udGVudCI+S2VqYWRpYW4geWFuZyB0aWRhayBkYXBhdCB0ZXJqYWRpIGJlcnNhbWFhbjwvc3Bhbj48L3NwYW4+OiAkUChBIFxjdXAgQikgPSBQKEEpICsgUChCKSQ8L3A+DQo8cD48ZW0+UHJvYmFiaWxpdGFzIGdhYnVuZ2FuIGtlamFkaWFuIHNhbGluZyBsZXBhcyBhZGFsYWgganVtbGFoIHByb2JhYmlsaXRhcyBtYXNpbmctbWFzaW5nPC9lbT48L3A+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCiMjICBEZW1vbnN0cmFzaSBBa3Npb21hIFByb2JhYmlsaXRhcw0KDQpgYGB7ciBheGlvbV9kZW1vLCBlY2hvPUZBTFNFfQ0KIyBEYXRhIHVudHVrIHRhYmVsIGFrc2lvbWENCmF4aW9tX2RlbW8gPC0gZGF0YS5mcmFtZSgNCiAgQWtzaW9tYSA9IGMoIk5vbi1uZWdhdGl2aXR5IiwgIk5vcm1hbGl6YXRpb24iLCAiQWRkaXRpdml0eSIpLA0KICBEZXNrcmlwc2kgPSBjKCJQKEEpIOKJpSAwIiwgIlAoUykgPSAxIiwgIlAoQeKIqkIpID0gUChBKSArIFAoQikgdW50dWsgQeKIqUI94oiFIiksDQogIENvbnRvaCA9IGMoIlAoSGVhZCkgPSAwLjUg4omlIDAiLCAiUCh7MSwyLDMsNCw1LDZ9KSA9IDEiLCAiUChHZW5hcOKIqkdhbmppbCkgPSAwLjUgKyAwLjUgPSAxIikNCikNCg0KIyBUYWJlbCBha3Npb21hDQpheGlvbV9kZW1vICU+JQ0KICBrYWJsZShjYXB0aW9uID0gIlRpZ2EgQWtzaW9tYSBGdW5kYW1lbnRhbCBQcm9iYWJpbGl0YXMiKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiksDQogICAgZnVsbF93aWR0aCA9IFRSVUUsDQogICAgZm9udF9zaXplID0gMTYsDQogICAgaHRtbF9mb250ID0gIidTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmIg0KICApICU+JQ0KICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNmZjZiOTUiLCB3aWR0aCA9ICIyMCUiKSAlPiUNCiAgY29sdW1uX3NwZWMoMiwgYmFja2dyb3VuZCA9ICIjZmZmMGY2Iiwgd2lkdGggPSAiMzAlIikgJT4lDQogIGNvbHVtbl9zcGVjKDMsIGJhY2tncm91bmQgPSAiI2ZmZTRlYyIsIHdpZHRoID0gIjUwJSIpICU+JQ0KICByb3dfc3BlYygwLCBib2xkID0gVFJVRSwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNmZmFmY2MiKQ0KYGBgDQoNCiMjIFJlZmVyZW5zaSBidWt1IA0KDQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtYm94IGFuaW1hdGUtZmFkZUluIj4NCiAgPGgyPiBSZWZlcmVuc2kgQnVrdSBQZW5kdWt1bmc8L2gyPg0KICA8aDM+QnVrdSBUZWtzIFV0YW1hPC9oMz4NCiAgPHRhYmxlIGNsYXNzPSJ0YWJsZS1jdXN0b20iPg0KICAgIDx0aGVhZD4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRoPk5vPC90aD4NCiAgICAgICAgPHRoPlJlZmVyZW5zaTwvdGg+DQogICAgICAgIDx0aD5CYWIgUmVsZXZhbjwvdGg+DQogICAgICAgIDx0aD5LZXNlc3VhaWFuIGRlbmdhbiBWaWRlbzwvdGg+DQogICAgICA8L3RyPg0KICAgIDwvdGhlYWQ+DQogICAgPHRib2R5Pg0KICAgICAgPHRyPg0KICAgICAgICA8dGQ+MTwvdGQ+DQogICAgICAgIDx0ZD4NCiAgICAgICAgICA8c3Ryb25nPldhbHBvbGUsIFIuRS4sIGV0IGFsLjwvc3Ryb25nPiAoMjAxMikuPGJyPg0KICAgICAgICAgIDxlbT5Qcm9iYWJpbGl0eSAmIFN0YXRpc3RpY3MgZm9yIEVuZ2luZWVycyAmIFNjaWVudGlzdHM8L2VtPjxicj4NCiAgICAgICAgICBQZWFyc29uIEVkdWNhdGlvbiwgOXRoIEVkaXRpb24NCiAgICAgICAgPC90ZD4NCiAgICAgICAgPHRkPkJhYiAyOiBQcm9iYWJpbGl0eTxicj5IYWxhbWFuOiAyNS00ODwvdGQ+DQogICAgICAgIDx0ZD5TYW5nYXQgc2VzdWFpIC0gbWVuamVsYXNrYW4ga29uc2VwIGRhc2FyIHByb2JhYmlsaXRhcyBkZW5nYW4gY29udG9oIGVuZ2luZWVyaW5nPC90ZD4NCiAgICAgIDwvdHI+DQogICAgICA8dHI+DQogICAgICAgIDx0ZD4yPC90ZD4NCiAgICAgICAgPHRkPg0KICAgICAgICAgIDxzdHJvbmc+Um9zcywgUy5NLjwvc3Ryb25nPiAoMjAxNCkuPGJyPg0KICAgICAgICAgIDxlbT5BIEZpcnN0IENvdXJzZSBpbiBQcm9iYWJpbGl0eTwvZW0+PGJyPg0KICAgICAgICAgIFBlYXJzb24gRWR1Y2F0aW9uLCA5dGggRWRpdGlvbg0KICAgICAgICA8L3RkPg0KICAgICAgICA8dGQ+QmFiIDE6IENvbWJpbmF0b3JpYWwgQW5hbHlzaXM8YnI+QmFiIDI6IEF4aW9tcyBvZiBQcm9iYWJpbGl0eTwvdGQ+DQogICAgICAgIDx0ZD5TYW5nYXQgc2VzdWFpIC0gbWVtYmVyaWthbiBkYXNhciBtYXRlbWF0aXMgeWFuZyBrdWF0IHVudHVrIGFrc2lvbWEgcHJvYmFiaWxpdGFzPC90ZD4NCiAgICAgIDwvdHI+DQogICAgPC90Ym9keT4NCiAgPC90YWJsZT4NCjwvZGl2Pg0KDQojIyBLZXNpbXB1bGFuIA0KDQo8ZGl2IGNsYXNzPSJjb25jbHVzaW9uLWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDI+IEtlc2ltcHVsYW4gZGFuIFRha2Vhd2F5czwvaDI+DQo8aDM+UG9pbi1Qb2luIFBlbnRpbmcgeWFuZyBEaXBlbGFqYXJpOjwvaDM+DQo8ZGl2IGNsYXNzPSJjb25jbHVzaW9uLWdyaWQiPg0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1pdGVtIj4NCjxoND4gRnVuZGFtZW50YWwgQ29uY2VwdHM8L2g0Pg0KPHVsPg0KPGxpPlByb2JhYmlsaXRhcyBtZW5ndWt1ciBrZXRpZGFrcGFzdGlhbjwvbGk+DQo8bGk+TmlsYWkgYW50YXJhIDAgZGFuIDE8L2xpPg0KPGxpPlJ1YW5nIHNhbXBlbCBkYW4ga2VqYWRpYW48L2xpPg0KPGxpPk91dGNvbWUgZGFuIGV2ZW50PC9saT4NCjwvdWw+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24taXRlbSI+DQo8aDQ+IE1hdGhlbWF0aWNhbCBGb3VuZGF0aW9uPC9oND4NCjx1bD4NCjxsaT5SdW11cyBkYXNhciBQKEEpID0gbihBKS9uKFMpPC9saT4NCjxsaT5UaWdhIGFrc2lvbWEgcHJvYmFiaWxpdGFzPC9saT4NCjxsaT5Lb25zZXAgbXV0dWFsbHkgZXhjbHVzaXZlPC9saT4NCjxsaT5IaW1wdW5hbiBkYW4gb3BlcmFzaW55YTwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJjb25jbHVzaW9uLWl0ZW0iPg0KPGg0PiBQcmFjdGljYWwgQXBwbGljYXRpb25zPC9oND4NCiAgPHVsPg0KPGxpPlNpbXVsYXNpIGVtcGlyaXM8L2xpPg0KPGxpPlBlcmJhbmRpbmdhbiB0ZW9yaXRpcyB2cyBlbXBpcmlzPC9saT4NCjxsaT5BcGxpa2FzaSBkYWxhbSBwZW5nYW1iaWxhbiBrZXB1dHVzYW48L2xpPg0KPGxpPkFuYWxpc2lzIHJpc2lrbzwvbGk+DQogPC91bD4NCiA8L2Rpdj4NCiA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJuZXh0LXRvcGljLWJveCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMz4gU2lhcCB1bnR1ayBWaWRlbyBCZXJpa3V0bnlhITwvaDM+DQogIDxwPjxzdHJvbmc+TmV4dCBUb3BpYzo8L3N0cm9uZz4gQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHkgJiBCYXllcyBUaGVvcmVtPC9wPg0KICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsgZm9udC1zaXplOiAwLjllbTsgY29sb3I6ICM2NjY7Ij5Lb25zZXAgeWFuZyBsZWJpaCBhZHZhbmNlZCBtZW51bmdndSBkaSB2aWRlbyBzZWxhbmp1dG55YSE8L3A+DQo8L2Rpdj4NCg0KDQotLS0NCnRpdGxlOiAiU2FtcGxlIFNwYWNlIGRhbiBFdmVudHMgLSBWaWRlbyAyIg0KYXV0aG9yOiAiQWRpbmRhIEFkZWxpYSBGdXRyaSINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQovKiBDU1MgU3R5bGluZyB1bnR1ayBWaWRlbyAyIC0gU2VzdWFpIFZpZGVvIDEgKi8NCmJvZHkgew0KICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7DQogIGxpbmUtaGVpZ2h0OiAxLjY7DQogIGNvbG9yOiAjNWE0YTRhOw0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZmNWY1IDAlLCAjZmZlZWYwIDEwMCUpOw0KICBtaW4taGVpZ2h0OiAxMDB2aDsNCiAgbWFyZ2luOiAwOw0KICBwYWRkaW5nOiAyMHB4Ow0KfQ0KDQpodG1sIHsNCiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7DQp9DQoNCjo6c2VsZWN0aW9uIHsNCiAgYmFja2dyb3VuZDogI2ZmYWZjYzsNCiAgY29sb3I6ICM1YTRhNGE7DQp9DQoNCmEgew0KICBjb2xvcjogI2ZmNmI5NTsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQphOmhvdmVyIHsNCiAgY29sb3I6ICNmZjRkN2M7DQogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KfQ0KDQovKiBDb250YWluZXIgdXRhbWEgKi8NCi5jb250YWluZXIgew0KICBtYXgtd2lkdGg6IDEyMDBweDsNCiAgbWFyZ2luOiAwIGF1dG87DQp9DQoNCi8qIEN1c3RvbSBjbGFzc2VzIGZvciBjb250ZW50IGJveGVzICovDQouY29udGVudC1ib3ggew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZhZmNjIDAlLCAjZmY2Yjk1IDEwMCUpOw0KICBjb2xvcjogIzNBNEY3QTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjEpOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQouY29udGVudC1ib3g6aG92ZXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7DQogIGJveC1zaGFkb3c6IDAgMTJweCAzMHB4IHJnYmEoMCwwLDAsMC4xNSk7DQp9DQoNCi5kZWZpbml0aW9uLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmY2Yjk1Ow0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi5mb3JtdWxhLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmY2Yjk1Ow0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi5leGFtcGxlLWJveCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG1hcmdpbjogMTVweCAwOw0KICBib3JkZXI6IDFweCBzb2xpZCAjZmZhZmNjOw0KfQ0KDQoucmVmZXJlbmNlLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQouY29uY2x1c2lvbi1ib3ggew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZhZmNjIDAlLCAjZmY2Yjk1IDEwMCUpOw0KICBjb2xvcjogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCn0NCg0KLm5leHQtdG9waWMtYm94IHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyOiAycHggZGFzaGVkICNmZmFmY2M7DQp9DQoNCi5oZWFkZXItbWFpbiB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgcGFkZGluZzogNDBweDsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCn0NCg0KLnZpZGVvLWNhcmQgew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLyogVGFibGUgc3R5bGluZyAqLw0KLnRhYmxlLWN1c3RvbSB7DQogIHdpZHRoOiAxMDAlOw0KICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KICBtYXJnaW46IDIwcHggMDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQoudGFibGUtY3VzdG9tIHRoIHsNCiAgYmFja2dyb3VuZDogI2ZmNmI5NTsNCiAgY29sb3I6IHdoaXRlOw0KICBwYWRkaW5nOiAxNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQoudGFibGUtY3VzdG9tIHRkIHsNCiAgcGFkZGluZzogMTVweDsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmU0ZWM7DQp9DQoNCi50YWJsZS1jdXN0b20gdHI6aG92ZXIgdGQgew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KfQ0KDQovKiBUb29sdGlwIFN0eWxlcyAqLw0KLnRvb2x0aXAtZWxlbWVudCB7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGNvbG9yOiAjZmY2Yjk1Ow0KICBmb250LXdlaWdodDogNjAwOw0KICBib3JkZXItYm90dG9tOiAycHggZG90dGVkICNmZmFmY2M7DQp9DQoNCi50b29sdGlwLWNvbnRlbnQgew0KICB2aXNpYmlsaXR5OiBoaWRkZW47DQogIHdpZHRoOiAzMDBweDsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmNmI5NSAwJSwgI2ZmNGQ3YyAxMDAlKTsNCiAgY29sb3I6IHdoaXRlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIHBhZGRpbmc6IDE1cHg7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogMTAwMDsNCiAgYm90dG9tOiAxMjUlOw0KICBsZWZ0OiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsNCiAgb3BhY2l0eTogMDsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMik7DQogIGZvbnQtc2l6ZTogMC45ZW07DQogIGxpbmUtaGVpZ2h0OiAxLjQ7DQp9DQoNCi50b29sdGlwLWNvbnRlbnQ6OmFmdGVyIHsNCiAgY29udGVudDogIiI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiAxMDAlOw0KICBsZWZ0OiA1MCU7DQogIG1hcmdpbi1sZWZ0OiAtNXB4Ow0KICBib3JkZXItd2lkdGg6IDVweDsNCiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiAjZmY2Yjk1IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50Ow0KfQ0KDQoudG9vbHRpcC1lbGVtZW50OmhvdmVyIC50b29sdGlwLWNvbnRlbnQgew0KICB2aXNpYmlsaXR5OiB2aXNpYmxlOw0KICBvcGFjaXR5OiAxOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNXB4KTsNCn0NCg0KLyogUGxvdCBjb250YWluZXIgc3R5bGluZyAqLw0KLnBsb3QtY29udGFpbmVyIHsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQogIGJvcmRlcjogMXB4IHNvbGlkICNmZmU0ZWM7DQp9DQoNCi5wbG90LWluZm8gew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KICBwYWRkaW5nOiAxNXB4Ow0KICBib3JkZXItcmFkaXVzOiA4cHg7DQogIG1hcmdpbi10b3A6IDE1cHg7DQogIGJvcmRlci1sZWZ0OiA0cHggc29saWQgI2ZmNmI5NTsNCn0NCg0KLyogR3JpZCBMYXlvdXQgKi8NCi5jb25jbHVzaW9uLWdyaWQgew0KICBkaXNwbGF5OiBncmlkOw0KICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsNCiAgZ2FwOiAyMHB4Ow0KICBtYXJnaW4tdG9wOiAyMHB4Ow0KfQ0KDQouY29uY2x1c2lvbi1pdGVtIHsNCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOw0KICBwYWRkaW5nOiAyMHB4Ow0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7DQp9DQoNCi8qIEFuaW1hdGlvbiAqLw0KQGtleWZyYW1lcyBmYWRlSW5VcCB7DQogIGZyb20gew0KICAgIG9wYWNpdHk6IDA7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpOw0KICB9DQogIHRvIHsNCiAgICBvcGFjaXR5OiAxOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsNCiAgfQ0KfQ0KDQouYW5pbWF0ZS1mYWRlSW4gew0KICBhbmltYXRpb246IGZhZGVJblVwIDAuNnMgZWFzZS1vdXQ7DQp9DQoNCi8qIE1hdGggZm9ybXVsYSBzdHlsaW5nICovDQoubWF0aC1mb3JtdWxhIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LXNpemU6IDEuNGVtOw0KICBjb2xvcjogI2ZmNmI5NTsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIG1hcmdpbjogMjBweCAwOw0KICBwYWRkaW5nOiAyMHB4Ow0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIGJvcmRlcjogMnB4IHNvbGlkICNmZmFmY2M7DQp9DQpgYGANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCiMgU2V0dXAgY2h1bmsgLSBWaWRlbyAyIC0gU2VzdWFpIFZpZGVvIDENCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgZWNobyA9IEZBTFNFLA0KICB3YXJuaW5nID0gRkFMU0UsDQogIG1lc3NhZ2UgPSBGQUxTRSwNCiAgZmlnLmFsaWduID0gImNlbnRlciIsDQogIGZpZy53aWR0aCA9IDksICAgICMgU2VzdWFpIFZpZGVvIDENCiAgZmlnLmhlaWdodCA9IDUgICAgIyBTZXN1YWkgVmlkZW8gMQ0KKQ0KDQojIExvYWQgcmVxdWlyZWQgbGlicmFyaWVzDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoc2NhbGVzKQ0KDQojIEN1c3RvbSB0aGVtZSB1bnR1ayBnZ3Bsb3QgLSBTZXN1YWkgVmlkZW8gMQ0KY3VzdG9tX3RoZW1lIDwtIGZ1bmN0aW9uKCkgew0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiLCBzaXplID0gMTYsIGNvbG9yID0gIiMyYzNlNTAiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBzaXplID0gMTEsIGNvbG9yID0gIiM3ZjhjOGQiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxMSwgY29sb3IgPSAiIzJjM2U1MCIpLA0KICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgY29sb3IgPSAiIzM0NDk1ZSIpLA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgc2l6ZSA9IDEwKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNlY2YwZjEiLCBsaW5ld2lkdGggPSAwLjMpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSBOQSkNCiAgKQ0KfQ0KYGBgDQoNCjxkaXYgY2xhc3M9ImhlYWRlci1tYWluIGFuaW1hdGUtZmFkZUluIj4NCiAgPGgxIHN0eWxlPSJjb2xvcjogI2ZmNmI5NTsgbWFyZ2luLWJvdHRvbTogMTVweDsiPiBFc3NlbnRpYWwgb2YgUHJvYmFiaWxpdHkgLSBWaWRlbyAyPC9oMT4NCiAgPGgzIHN0eWxlPSJjb2xvcjogIzVhNGE0YTsgbWFyZ2luLWJvdHRvbTogMjBweDsiPlNhbXBsZSBTcGFjZSBhbmQgRXZlbnRzIC0gQ29tcHJlaGVuc2l2ZSBBbmFseXNpczwvaDM+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0idmlkZW8tY2FyZCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMiBzdHlsZT0iY29sb3I6ICNmZjZiOTU7IG1hcmdpbi1ib3R0b206IDE1cHg7Ij7wn5O5IFZpZGVvIEFuYWx5c2lzOiBTYW1wbGUgU3BhY2UgYW5kIEV2ZW50czwvaDI+DQogIDxwPjxzdHJvbmc+VmlkZW8gU291cmNlOjwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3lvdXR1LmJlL0xTLV9paERLcjJNP3NpPTB0ZWZxOHJyckhEbWJoVXAiIHRhcmdldD0iX2JsYW5rIj5TYW1wbGUgU3BhY2UgYW5kIEV2ZW50cyAtIFlvdVR1YmU8L2E+PC9wPg0KICA8cD48c3Ryb25nPkR1cmF0aW9uOjwvc3Ryb25nPiAxMjo0NSBtaW51dGVzIHwgPHN0cm9uZz5Db250ZW50IExldmVsOjwvc3Ryb25nPiBCZWdpbm5lcjwvcD4NCjwvZGl2Pg0KDQojIFNhbXBsZSBTcGFjZSBkYW4gRXZlbnRzDQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCiAgPGgyPiBSYW5na3VtYW4gUGVuamVsYXNhbiBWaWRlbzwvaDI+DQogIDxoMz5Lb25zZXAgRGFzYXIgU2FtcGxlIFNwYWNlIGRhbiBFdmVudHM8L2gzPg0KICA8cD5WaWRlbyBpbmkgbWVuamVsYXNrYW4gZHVhIGtvbnNlcCBmdW5kYW1lbnRhbCBkYWxhbSB0ZW9yaSBwcm9iYWJpbGl0YXM6IDxzcGFuIGNsYXNzPSJ0b29sdGlwLWVsZW1lbnQiPlNhbXBsZSBTcGFjZSA8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5IaW1wdW5hbiBzZW11YSBvdXRjb21lIHlhbmcgbXVuZ2tpbiBkYXJpIHN1YXR1IGVrc3BlcmltZW48L3NwYW4+IDwvc3Bhbj4gZGFuIDxzcGFuIGNsYXNzPSJ0b29sdGlwLWVsZW1lbnQiPkV2ZW50cyA8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5TdWJzZXQgZGFyaSBzYW1wbGUgc3BhY2UgeWFuZyBtZXJlcHJlc2VudGFzaWthbiBvdXRjb21lIHRlcnRlbnR1PC9zcGFuPiA8L3NwYW4+LjwvcD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJkZWZpbml0aW9uLWJveCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMz4gRGVmaW5pc2kgRm9ybWFsPC9oMz4NCiAgPHA+PHN0cm9uZz5TYW1wbGUgU3BhY2UgKFMpOjwvc3Ryb25nPiBIaW1wdW5hbiBzZW11YSBvdXRjb21lIHlhbmcgbXVuZ2tpbiBkYXJpIHN1YXR1IGVrc3BlcmltZW4gYWNhay48L3A+DQogIDxwPjxzdHJvbmc+RXZlbnQgKEEsIEIsIEMsLi4uKTo8L3N0cm9uZz4gU3Vic2V0IGRhcmkgc2FtcGxlIHNwYWNlIHlhbmcgdGVyZGlyaSBkYXJpIG91dGNvbWUtb3V0Y29tZSBkZW5nYW4ga2FyYWt0ZXJpc3RpayB0ZXJ0ZW50dS48L3A+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KPGgzPiBOb3Rhc2kgTWF0ZW1hdGlzPC9oMz4NCjxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQo8cD48c3Ryb25nPlNhbXBsZSBTcGFjZTo8L3N0cm9uZz4gJFMgPSBceyBcdGV4dHtvdXRjb21lfV8xLCBcdGV4dHtvdXRjb21lfV8yLCAuLi4sIFx0ZXh0e291dGNvbWV9X24gXH0kPC9wPg0KPHA+PHN0cm9uZz5FdmVudDo8L3N0cm9uZz4gJEEgXHN1YnNldGVxIFMkIGRpbWFuYSAkQSQgYWRhbGFoIHN1YnNldCBkYXJpICRTJDwvcD4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpdGFzIEV2ZW50Ojwvc3Ryb25nPiAkUChBKSA9IFxmcmFje24oQSl9e24oUyl9JDwvcD4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KIyMgSmVuaXMtSmVuaXMNCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KICA8aDI+IEplbmlzLUplbmlzIFNhbXBsZSBTcGFjZTwvaDI+DQogIDxoMz4xLiBTYW1wbGUgU3BhY2UgRGlza3JpdDwvaDM+DQogIDxwPlNhbXBsZSBzcGFjZSBkZW5nYW4ganVtbGFoIG91dGNvbWUgeWFuZyB0ZXJiYXRhcyBhdGF1IGRhcGF0IGRpaGl0dW5nLjwvcD4NCiAgPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KICAgIDxoND4gQ29udG9oIDE6IFBlbGVtcGFyYW4gS29pbjwvaDQ+DQogICAgPHA+PHN0cm9uZz5TYW1wbGUgU3BhY2U6PC9zdHJvbmc+ICRTID0gXHtILCBUXH0kPC9wPg0KICAgIDxwPjxzdHJvbmc+RXZlbnQgQSAoSGVhZCk6PC9zdHJvbmc+ICRBID0gXHtIXH0kPC9wPg0KICAgIDxwPjxzdHJvbmc+RXZlbnQgQiAoVGFpbCk6PC9zdHJvbmc+ICRCID0gXHtUXH0kPC9wPg0KICAgIDxwPjxzdHJvbmc+UHJvYmFiaWxpdGFzOjwvc3Ryb25nPiAkUChBKSA9IFxmcmFjezF9ezJ9JCwgJFAoQikgPSBcZnJhY3sxfXsyfSQ8L3A+DQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQogICAgPGg0PiBDb250b2ggMjogUGVsZW1wYXJhbiBEYWR1PC9oND4NCiAgICA8cD48c3Ryb25nPlNhbXBsZSBTcGFjZTo8L3N0cm9uZz4gJFMgPSBcezEsIDIsIDMsIDQsIDUsIDZcfSQ8L3A+DQogICAgPHA+PHN0cm9uZz5FdmVudCBBIChBbmdrYSBHZW5hcCk6PC9zdHJvbmc+ICRBID0gXHsyLCA0LCA2XH0kPC9wPg0KICAgIDxwPjxzdHJvbmc+RXZlbnQgQiAoQW5na2EgUHJpbWEpOjwvc3Ryb25nPiAkQiA9IFx7MiwgMywgNVx9JDwvcD4NCiAgICA8cD48c3Ryb25nPlByb2JhYmlsaXRhczo8L3N0cm9uZz4gJFAoQSkgPSBcZnJhY3szfXs2fSA9IDAuNSQsICRQKEIpID0gXGZyYWN7M317Nn0gPSAwLjUkPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBTYW1wbGUgU3BhY2UgdW50dWsgQmVyYmFnYWkgRWtzcGVyaW1lbg0KDQo8ZGl2IGNsYXNzPSJwbG90LWNvbnRhaW5lciBhbmltYXRlLWZhZGVJbiI+DQo8ZGl2IGNsYXNzPSJwbG90LXRvb2x0aXAiPg0KPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+IERpYWdyYW0gU2FtcGxlIFNwYWNlDQo8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij4NCjxzdHJvbmc+UGVyYmFuZGluZ2FuIFVrdXJhbiBTYW1wbGUgU3BhY2U8L3N0cm9uZz48YnI+PGJyPg0KICAgIFZpc3VhbGlzYXNpIG1lbnVuanVra2FuIGp1bWxhaCBvdXRjb21lIHlhbmcgbXVuZ2tpbiBkYWxhbSBiZXJiYWdhaSBla3NwZXJpbWVuDQo8L3NwYW4+DQo8L3NwYW4+DQogIDwvZGl2Pg0KDQpgYGB7ciBzYW1wbGVfc3BhY2VfcGxvdCwgZWNobz1GQUxTRSwgZmlnLndpZHRoPTksIGZpZy5oZWlnaHQ9NX0NCnNhbXBsZV9zcGFjZV9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIEVrc3BlcmltZW4gPSBjKCJQZWxlbXBhcmFuIEtvaW4iLCAiUGVsZW1wYXJhbiBEYWR1IiwgIlBlbmdhbWJpbGFuIEthcnR1IiwgIktlbGFoaXJhbiBCYXlpIiksDQogIFNhbXBsZV9TcGFjZSA9IGMoIlMgPSB7SCwgVH0iLCAiUyA9IHsxLDIsMyw0LDUsNn0iLCAiUyA9IHs1MiBrYXJ0dX0iLCAiUyA9IHtMLCBQfSIpLA0KICBKdW1sYWhfT3V0Y29tZSA9IGMoMiwgNiwgNTIsIDIpLA0KICBUaXBlID0gYygiRGlza3JpdCIsICJEaXNrcml0IiwgIkRpc2tyaXQiLCAiRGlza3JpdCIpDQopDQoNCiMgUGxvdCBwZXJiYW5kaW5nYW4gc2FtcGxlIHNwYWNlDQpwMSA8LSBnZ3Bsb3Qoc2FtcGxlX3NwYWNlX2RhdGEsIGFlcyh4ID0gcmVvcmRlcihFa3NwZXJpbWVuLCBKdW1sYWhfT3V0Y29tZSksIHkgPSBKdW1sYWhfT3V0Y29tZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBFa3NwZXJpbWVuKSkgKw0KICBnZW9tX2NvbChhbHBoYSA9IDAuOCwgd2lkdGggPSAwLjYpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IEp1bWxhaF9PdXRjb21lKSwgdmp1c3QgPSAtMC41LCBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZmYWZjYyIsICIjZmZjOGRkIiwgIiNmZjZiOTUiLCAiI2ZmODVhMSIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiUGVyYmFuZGluZ2FuIFVrdXJhbiBTYW1wbGUgU3BhY2UgQmVyYmFnYWkgRWtzcGVyaW1lbiIsDQogICAgc3VidGl0bGUgPSAiVmlzdWFsaXNhc2kganVtbGFoIG91dGNvbWUgeWFuZyBtdW5na2luIiwNCiAgICB4ID0gIkplbmlzIEVrc3BlcmltZW4iLA0KICAgIHkgPSAiSnVtbGFoIE91dGNvbWUgZGFsYW0gU2FtcGxlIFNwYWNlIg0KICApICsNCiAgY3VzdG9tX3RoZW1lKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCnByaW50KHAxKQ0KYGBgDQoNCjxkaXYgY2xhc3M9InBsb3QtaW5mbyI+DQo8cD4gPHN0cm9uZz5JbnRlcnByZXRhc2k6PC9zdHJvbmc+IFNlbWFraW4gYmVzYXIgc2FtcGxlIHNwYWNlLCBzZW1ha2luIGJhbnlhayBrZW11bmdraW5hbiBvdXRjb21lIHlhbmcgZGFwYXQgdGVyamFkaS4gUGVuZ2FtYmlsYW4ga2FydHUgbWVtaWxpa2kgc2FtcGxlIHNwYWNlIHRlcmJlc2FyICg1MiBvdXRjb21lKS48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDM+Mi4gU2FtcGxlIFNwYWNlIEtvbnRpbnU8L2gzPg0KPHA+U2FtcGxlIHNwYWNlIGRlbmdhbiBvdXRjb21lIHlhbmcgdGFrIHRlcmhpdHVuZyAoY29udGludW91cykuPC9wPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PiBDb250b2g6IFdha3R1IFR1bmdndSBCdXM8L2g0Pg0KPHA+PHN0cm9uZz5TYW1wbGUgU3BhY2U6PC9zdHJvbmc+ICRTID0gXHsgdCBcaW4gXG1hdGhiYntSfSBcbWlkIDAgXGxlcSB0IFxsZXEgMzAgXH0kIG1lbml0PC9wPg0KPHA+PHN0cm9uZz5FdmVudCBBICh0dW5nZ3Ug4omkIDUgbWVuaXQpOjwvc3Ryb25nPiAkQSA9IFx7IHQgXG1pZCAwIFxsZXEgdCBcbGVxIDUgXH0kPC9wPg0KPHA+PHN0cm9uZz5Qcm9iYWJpbGl0YXMgbWVuZ2d1bmFrYW4gZGlzdHJpYnVzaSBrb250aW51PC9zdHJvbmc+PC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQojIyBKZW5pcy1KZW5pcyBFdmVudA0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMj4gSmVuaXMtSmVuaXMgRXZlbnRzPC9oMj4NCiAgPGgzPjEuIFNpbXBsZSBFdmVudCAoRWxlbWVudGFyeSBFdmVudCk8L2gzPg0KICA8cD5FdmVudCB5YW5nIHRlcmRpcmkgZGFyaSB0ZXBhdCBzYXR1IG91dGNvbWUuPC9wPg0KICA8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQogICAgPGg0PiBDb250b2g6IERhZHUgTXVuY3VsIEFuZ2thIDM8L2g0Pg0KICAgIDxwPjxzdHJvbmc+U2FtcGxlIFNwYWNlOjwvc3Ryb25nPiAkUyA9IFx7MSwgMiwgMywgNCwgNSwgNlx9JDwvcD4NCiAgICA8cD48c3Ryb25nPlNpbXBsZSBFdmVudDo8L3N0cm9uZz4gJEUgPSBcezNcfSQ8L3A+DQogICAgPHA+PHN0cm9uZz5Qcm9iYWJpbGl0YXM6PC9zdHJvbmc+ICRQKEUpID0gXGZyYWN7MX17Nn0kPC9wPg0KICA8L2Rpdj4NCiAgPGgzPjIuIENvbXBvdW5kIEV2ZW50PC9oMz4NCiAgPHA+RXZlbnQgeWFuZyB0ZXJkaXJpIGRhcmkgbGViaWggZGFyaSBzYXR1IG91dGNvbWUuPC9wPg0KICA8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQogICAgPGg0PiBDb250b2g6IERhZHUgTXVuY3VsIEFuZ2thIEdlbmFwPC9oND4NCiAgICA8cD48c3Ryb25nPlNhbXBsZSBTcGFjZTo8L3N0cm9uZz4gJFMgPSBcezEsIDIsIDMsIDQsIDUsIDZcfSQ8L3A+DQogICAgPHA+PHN0cm9uZz5Db21wb3VuZCBFdmVudDo8L3N0cm9uZz4gJEEgPSBcezIsIDQsIDZcfSQ8L3A+DQogICAgPHA+PHN0cm9uZz5Qcm9iYWJpbGl0YXM6PC9zdHJvbmc+ICRQKEEpID0gXGZyYWN7M317Nn0gPSAwLjUkPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwbG90LWNvbnRhaW5lciBhbmltYXRlLWZhZGVJbiI+DQo8ZGl2IGNsYXNzPSJwbG90LXRvb2x0aXAiPg0KPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+IFRhYmVsIEplbmlzIEV2ZW50cw0KPHNwYW4gY2xhc3M9InRvb2x0aXAtY29udGVudCI+DQo8c3Ryb25nPktsYXNpZmlrYXNpIEV2ZW50cyBkYWxhbSBQcm9iYWJpbGl0YXM8L3N0cm9uZz48YnI+PGJyPg0KIEJlcmJhZ2FpIGplbmlzIGV2ZW50cyBiZXJkYXNhcmthbiBqdW1sYWggb3V0Y29tZSBkYW4ga2FyYWt0ZXJpc3Rpa255YQ0KPC9zcGFuPg0KPC9zcGFuPg0KICA8L2Rpdj4NCg0KYGBge3IgZXZlbnRzX3RhYmxlLCBlY2hvPUZBTFNFfQ0KZXZlbnRzX2RhdGEgPC0gZGF0YS5mcmFtZSgNCiAgSmVuaXNfRXZlbnQgPSBjKCJTaW1wbGUgRXZlbnQiLCAiQ29tcG91bmQgRXZlbnQiLCAiSW1wb3NzaWJsZSBFdmVudCIsICJDZXJ0YWluIEV2ZW50IiksDQogIERlc2tyaXBzaSA9IGMoIjEgb3V0Y29tZSIsICI+MSBvdXRjb21lIiwgIjAgb3V0Y29tZSIsICJTZW11YSBvdXRjb21lIiksDQogIENvbnRvaCA9IGMoIkRhZHU9MyIsICJEYWR1IEdlbmFwIiwgIkRhZHU9NyIsICJEYWR1IDEtNiIpLA0KICBKdW1sYWhfT3V0Y29tZSA9IGMoMSwgMywgMCwgNiksDQogIFByb2JhYmlsaXRhcyA9IGMoIjEvNiIsICIzLzYiLCAiMCIsICIxIikNCikNCg0KZXZlbnRzX2RhdGEgJT4lDQogIGthYmxlKGNhcHRpb24gPSAiSmVuaXMtSmVuaXMgRXZlbnRzIGRhbGFtIFByb2JhYmlsaXRhcyIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKA0KICAgIGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiKSwNCiAgICBmdWxsX3dpZHRoID0gVFJVRSwNCiAgICBmb250X3NpemUgPSAxNA0KICApICU+JQ0KICBjb2x1bW5fc3BlYygxLCBib2xkID0gVFJVRSwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNmZjZiOTUiKSAlPiUNCiAgY29sdW1uX3NwZWMoMiwgYmFja2dyb3VuZCA9ICIjZmZmMGY2IikgJT4lDQogIGNvbHVtbl9zcGVjKDMsIGJhY2tncm91bmQgPSAiI2ZmZTRlYyIpICU+JQ0KICBjb2x1bW5fc3BlYyg0LCBiYWNrZ3JvdW5kID0gIiNmZmFmY2MiKSAlPiUNCiAgY29sdW1uX3NwZWMoNSwgYmFja2dyb3VuZCA9ICIjZmZjOGRkIikNCmBgYA0KDQo8ZGl2IGNsYXNzPSJwbG90LWluZm8iPg0KPHA+IDxzdHJvbmc+S2V0ZXJhbmdhbjo8L3N0cm9uZz4gU2ltcGxlIGV2ZW50IGFkYWxhaCBidWlsZGluZyBibG9jayB1bnR1ayBjb21wb3VuZCBldmVudHMuIEltcG9zc2libGUgZXZlbnQgbWVtaWxpa2kgcHJvYmFiaWxpdGFzIDAsIGNlcnRhaW4gZXZlbnQgbWVtaWxpa2kgcHJvYmFiaWxpdGFzIDEuPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDI+IFJlbGFzaSBBbnRhciBFdmVudHM8L2gyPg0KPGgzPjEuIE11dHVhbGx5IEV4Y2x1c2l2ZSBFdmVudHMgKFNhbGluZyBMZXBhcyk8L2gzPg0KPHA+RHVhIGV2ZW50cyB5YW5nIHRpZGFrIGRhcGF0IHRlcmphZGkgYmVyc2FtYWFuLiAkQSBcY2FwIEIgPSBcZW1wdHlzZXQkPC9wPg0KICA8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IENvbnRvaDogRGFkdSBNdW5jdWwgR2VuYXAgZGFuIEdhbmppbDwvaDQ+DQo8cD48c3Ryb25nPkV2ZW50IEEgKEdlbmFwKTo8L3N0cm9uZz4gJEEgPSBcezIsIDQsIDZcfSQ8L3A+DQo8cD48c3Ryb25nPkV2ZW50IEIgKEdhbmppbCk6PC9zdHJvbmc+ICRCID0gXHsxLCAzLCA1XH0kPC9wPg0KPHA+PHN0cm9uZz5JcmlzYW46PC9zdHJvbmc+ICRBIFxjYXAgQiA9IFxlbXB0eXNldCQg4oaSIE11dHVhbGx5IEV4Y2x1c2l2ZTwvcD4NCiAgPC9kaXY+DQo8aDM+Mi4gSW5kZXBlbmRlbnQgRXZlbnRzIChTYWxpbmcgQmViYXMpPC9oMz4NCjxwPktlamFkaWFuIHNhdHUgdGlkYWsgbWVtcGVuZ2FydWhpIHByb2JhYmlsaXRhcyBrZWphZGlhbiBsYWlubnlhLiAkUChBIFxjYXAgQikgPSBQKEEpIFxjZG90IFAoQikkPC9wPg0KICA8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IENvbnRvaDogUGVsZW1wYXJhbiBEdWEgS29pbjwvaDQ+DQo8cD48c3Ryb25nPkV2ZW50IEEgKEtvaW4gMSBIZWFkKTo8L3N0cm9uZz4gJFAoQSkgPSAwLjUkPC9wPg0KPHA+PHN0cm9uZz5FdmVudCBCIChLb2luIDIgSGVhZCk6PC9zdHJvbmc+ICRQKEIpID0gMC41JDwvcD4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpdGFzIEJlcnNhbWFhbjo8L3N0cm9uZz4gJFAoQSBcY2FwIEIpID0gMC41IFx0aW1lcyAwLjUgPSAwLjI1JDwvcD4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KIyMgVmlzdWFsaXNhc2kgUmVsYXNpIEFudGFyIEV2ZW50cw0KDQo8ZGl2IGNsYXNzPSJwbG90LWNvbnRhaW5lciBhbmltYXRlLWZhZGVJbiI+DQo8ZGl2IGNsYXNzPSJwbG90LXRvb2x0aXAiPg0KPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+IFRhYmVsIFJlbGFzaSBFdmVudHMNCjxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPg0KPHN0cm9uZz5KZW5pcy1KZW5pcyBSZWxhc2kgRXZlbnRzPC9zdHJvbmc+PGJyPjxicj4NCiAgICBCZXJiYWdhaSBqZW5pcyBodWJ1bmdhbiBhbnRhcmEgZXZlbnRzIGRhbGFtIHRlb3JpIHByb2JhYmlsaXRhcw0KPC9zcGFuPg0KPC9zcGFuPg0KICA8L2Rpdj4NCg0KYGBge3IgcmVsYXRpb25fdGFibGUsIGVjaG89RkFMU0V9DQpyZWxhdGlvbl9kYXRhIDwtIGRhdGEuZnJhbWUoDQogIFJlbGFzaSA9IGMoIk11dHVhbGx5IEV4Y2x1c2l2ZSIsICJJbmRlcGVuZGVudCIsICJEZXBlbmRlbnQiLCAiQ29tcGxlbWVudCIpLA0KICBEZXNrcmlwc2kgPSBjKCJBIOKIqSBCID0g4oiFIiwgIlAoQeKIqUIpPVAoQSlQKEIpIiwgIlAoQeKIqUIp4omgUChBKVAoQikiLCAiQSDiiKogQScgPSBTIiksDQogIENvbnRvaCA9IGMoIkdlbmFwICYgR2FuamlsIiwgIjIga29pbiBpbmRlcGVuZGVudCIsICJLYXJ0dSBtZXJhaCAmIGhhdGkiLCAiR2VuYXAgJiBUaWRhayBHZW5hcCIpLA0KICBTaW1ib2wgPSBjKCJB4oipQj3iiIUiLCAiUChB4oipQik9UChBKVAoQikiLCAiUChB4oipQiniiaBQKEEpUChCKSIsICJBJyA9IFMtQSIpDQopDQoNCnJlbGF0aW9uX2RhdGEgJT4lDQogIGthYmxlKGNhcHRpb24gPSAiUmVsYXNpIEFudGFyIEV2ZW50cyBkYWxhbSBQcm9iYWJpbGl0YXMiKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiksDQogICAgZnVsbF93aWR0aCA9IFRSVUUsDQogICAgZm9udF9zaXplID0gMTQNCiAgKSAlPiUNCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjZmY4NWExIikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIGJhY2tncm91bmQgPSAiI2ZmZjBmNiIpICU+JQ0KICBjb2x1bW5fc3BlYygzLCBiYWNrZ3JvdW5kID0gIiNmZmU0ZWMiKSAlPiUNCiAgY29sdW1uX3NwZWMoNCwgYmFja2dyb3VuZCA9ICIjZmZhZmNjIikNCmBgYA0KDQo8ZGl2IGNsYXNzPSJwbG90LWluZm8iPg0KPHA+IDxzdHJvbmc+UGVudGluZzo8L3N0cm9uZz4gTWVtYWhhbWkgcmVsYXNpIGFudGFyIGV2ZW50cyBzYW5nYXQgcGVudGluZyB1bnR1ayBwZXJoaXR1bmdhbiBwcm9iYWJpbGl0YXMgeWFuZyBrb21wbGVrcyBkYW4gYXBsaWthc2kgZGFsYW0gcGVuZ2FtYmlsYW4ga2VwdXR1c2FuLjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMj4gT3BlcmFzaSBwYWRhIEV2ZW50czwvaDI+DQo8aDM+MS4gVW5pb24gKEdhYnVuZ2FuKSAtICRBIFxjdXAgQiQ8L2gzPg0KPHA+RXZlbnQgeWFuZyB0ZXJqYWRpIGppa2EgQSB0ZXJqYWRpIEFUQVUgQiB0ZXJqYWRpIEFUQVUga2VkdWFueWEgdGVyamFkaS48L3A+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IENvbnRvaDogRGFkdSBNdW5jdWwgR2VuYXAgYXRhdSBQcmltYTwvaDQ+DQo8cD48c3Ryb25nPkV2ZW50IEEgKEdlbmFwKTo8L3N0cm9uZz4gJEEgPSBcezIsIDQsIDZcfSQ8L3A+DQo8cD48c3Ryb25nPkV2ZW50IEIgKFByaW1hKTo8L3N0cm9uZz4gJEIgPSBcezIsIDMsIDVcfSQ8L3A+DQo8cD48c3Ryb25nPlVuaW9uOjwvc3Ryb25nPiAkQSBcY3VwIEIgPSBcezIsIDMsIDQsIDUsIDZcfSQ8L3A+DQo8cD48c3Ryb25nPlByb2JhYmlsaXRhczo8L3N0cm9uZz4gJFAoQSBcY3VwIEIpID0gXGZyYWN7NX17Nn0kPC9wPg0KICA8L2Rpdj4NCiAgPGgzPjIuIEludGVyc2VjdGlvbiAoSXJpc2FuKSAtICRBIFxjYXAgQiQ8L2gzPg0KICA8cD5FdmVudCB5YW5nIHRlcmphZGkgamlrYSBBIHRlcmphZGkgREFOIEIgdGVyamFkaS48L3A+DQogIDxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND4gQ29udG9oOiBEYWR1IE11bmN1bCBHZW5hcCBkYW4gUHJpbWE8L2g0Pg0KPHA+PHN0cm9uZz5FdmVudCBBIChHZW5hcCk6PC9zdHJvbmc+ICRBID0gXHsyLCA0LCA2XH0kPC9wPg0KPHA+PHN0cm9uZz5FdmVudCBCIChQcmltYSk6PC9zdHJvbmc+ICRCID0gXHsyLCAzLCA1XH0kPC9wPg0KPHA+PHN0cm9uZz5JbnRlcnNlY3Rpb246PC9zdHJvbmc+ICRBIFxjYXAgQiA9IFx7Mlx9JDwvcD4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpdGFzOjwvc3Ryb25nPiAkUChBIFxjYXAgQikgPSBcZnJhY3sxfXs2fSQ8L3A+DQogIDwvZGl2Pg0KPGgzPjMuIENvbXBsZW1lbnQgKEtvbXBsZW1lbikgLSAkQSckIGF0YXUgJEFeYyQ8L2gzPg0KPHA+RXZlbnQgeWFuZyB0ZXJqYWRpIGppa2EgQSBUSURBSyB0ZXJqYWRpLjwvcD4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND4gQ29udG9oOiBEYWR1IFRJREFLIE11bmN1bCBHZW5hcDwvaDQ+DQo8cD48c3Ryb25nPkV2ZW50IEEgKEdlbmFwKTo8L3N0cm9uZz4gJEEgPSBcezIsIDQsIDZcfSQ8L3A+DQo8cD48c3Ryb25nPkNvbXBsZW1lbnQ6PC9zdHJvbmc+ICRBJyA9IFx7MSwgMywgNVx9JDwvcD4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpdGFzOjwvc3Ryb25nPiAkUChBJykgPSAxIC0gUChBKSA9IDEgLSAwLjUgPSAwLjUkPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCg0KIyMgQ29udG9oIFBlcmhpdHVuZ2FuIE9wZXJhc2kgcGFkYSBFdmVudHMNCg0KPGRpdiBjbGFzcz0icGxvdC1jb250YWluZXIgYW5pbWF0ZS1mYWRlSW4iPg0KPGRpdiBjbGFzcz0icGxvdC10b29sdGlwIj4NCjxzcGFuIGNsYXNzPSJ0b29sdGlwLWVsZW1lbnQiPiBUYWJlbCBPcGVyYXNpIEV2ZW50cw0KPHNwYW4gY2xhc3M9InRvb2x0aXAtY29udGVudCI+DQo8c3Ryb25nPk9wZXJhc2kgSGltcHVuYW4gZGFsYW0gUHJvYmFiaWxpdGFzPC9zdHJvbmc+PGJyPjxicj4NCiAgICBCZXJiYWdhaSBvcGVyYXNpIHlhbmcgZGFwYXQgZGlsYWt1a2FuIHBhZGEgZXZlbnRzIGJlc2VydGEgY29udG9oIHBlcmhpdHVuZ2FubnlhDQo8L3NwYW4+DQo8L3NwYW4+DQo8L2Rpdj4NCg0KYGBge3Igb3BlcmF0aW9uc190YWJsZSwgZWNobz1GQUxTRX0NCmRpY2Vfb3BlcmF0aW9ucyA8LSBkYXRhLmZyYW1lKA0KICBPcGVyYXNpID0gYygiVW5pb24gKEHiiKpCKSIsICJJbnRlcnNlY3Rpb24gKEHiiKlCKSIsICJDb21wbGVtZW50IChBJykiLCAiRGlmZmVyZW5jZSAoQS1CKSIpLA0KICBSdW11cyA9IGMoIlAoQeKIqkIpID0gUChBKSArIFAoQikgLSBQKEHiiKlCKSIsICJQKEHiiKlCKSIsICJQKEEnKSA9IDEgLSBQKEEpIiwgIlAoQS1CKSA9IFAoQSkgLSBQKEHiiKlCKSIpLA0KICBDb250b2hfRGFkdSA9IGMoIkdlbmFwIOKIqiBQcmltYSIsICJHZW5hcCDiiKkgUHJpbWEiLCAiVGlkYWsgR2VuYXAiLCAiR2VuYXAgLSBQcmltYSIpLA0KICBIYXNpbCA9IGMoIjUvNiIsICIxLzYiLCAiMy82IiwgIjIvNiIpLA0KICBQZW5qZWxhc2FuID0gYygiezIsMyw0LDUsNn0iLCAiezJ9IiwgInsxLDMsNX0iLCAiezQsNn0iKQ0KKQ0KDQpkaWNlX29wZXJhdGlvbnMgJT4lDQogIGthYmxlKGNhcHRpb24gPSAiT3BlcmFzaSBwYWRhIEV2ZW50cyAtIENvbnRvaCBQZWxlbXBhcmFuIERhZHUiKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiksDQogICAgZnVsbF93aWR0aCA9IFRSVUUsDQogICAgZm9udF9zaXplID0gMTQNCiAgKSAlPiUNCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjZmY2Yjk1IikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIGJhY2tncm91bmQgPSAiI2ZmZjBmNiIpICU+JQ0KICBjb2x1bW5fc3BlYygzLCBiYWNrZ3JvdW5kID0gIiNmZmU0ZWMiKSAlPiUNCiAgY29sdW1uX3NwZWMoNCwgYmFja2dyb3VuZCA9ICIjZmZhZmNjIikgJT4lDQogIGNvbHVtbl9zcGVjKDUsIGJhY2tncm91bmQgPSAiI2ZmYzhkZCIpDQpgYGANCg0KPGRpdiBjbGFzcz0icGxvdC1pbmZvIj4NCjxwPiA8c3Ryb25nPkNhdGF0YW46PC9zdHJvbmc+IFVudHVrIGV2ZW50cyB5YW5nIG11dHVhbGx5IGV4Y2x1c2l2ZSwgcnVtdXMgdW5pb24gbWVuamFkaSAkUChBIFxjdXAgQikgPSBQKEEpICsgUChCKSQga2FyZW5hICRQKEEgXGNhcCBCKSA9IDAkLjwvcD4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KPGgyPiBBcGxpa2FzaSBQcmFrdGlzIFNhbXBsZSBTcGFjZSBkYW4gRXZlbnRzPC9oMj4NCjxoMz5Db250b2ggMTogUGVybWFpbmFuIEthcnR1PC9oMz4NCiAgPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PiBTYW1wbGUgU3BhY2U6IERlY2sgS2FydHUgU3RhbmRhciAoNTIga2FydHUpPC9oND4NCjxwPjxzdHJvbmc+RXZlbnRzOjwvc3Ryb25nPjwvcD4NCjx1bD4NCjxsaT4kQSQ6IEthcnR1IEhhdGkg4oaSICRQKEEpID0gXGZyYWN7MTN9ezUyfSA9IDAuMjUkPC9saT4NCjxsaT4kQiQ6IEthcnR1IEFzIOKGkiAkUChCKSA9IFxmcmFjezR9ezUyfSA9IDAuMDc3JDwvbGk+DQo8bGk+JEMkOiBLYXJ0dSBNZXJhaCDihpIgJFAoQykgPSBcZnJhY3syNn17NTJ9ID0gMC41JDwvbGk+DQo8bGk+JEEgXGNhcCBCJDogQXMgSGF0aSDihpIgJFAoQSBcY2FwIEIpID0gXGZyYWN7MX17NTJ9ID0gMC4wMTkkPC9saT4NCjwvdWw+DQogIDwvZGl2Pg0KPGgzPkNvbnRvaCAyOiBRdWFsaXR5IENvbnRyb2w8L2gzPg0KICA8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IFNhbXBsZSBTcGFjZTogUHJvZHVrc2kgMTAwMCB1bml0PC9oND4NCjxwPjxzdHJvbmc+RXZlbnRzOjwvc3Ryb25nPjwvcD4NCjx1bD4NCjxsaT4kRCQ6IFByb2R1ayBEZWZlY3Qg4oaSICRQKEQpID0gXGZyYWN7MTV9ezEwMDB9ID0gMC4wMTUkPC9saT4NCjxsaT4kRyQ6IFByb2R1ayBHb29kIOKGkiAkUChHKSA9IFxmcmFjezk4NX17MTAwMH0gPSAwLjk4NSQ8L2xpPg0KPGxpPiREJyQ6IFByb2R1ayBUaWRhayBEZWZlY3Qg4oaSICRQKEQnKSA9IDEgLSAwLjAxNSA9IDAuOTg1JDwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCg0KIyMgUmVmZXJlbnNpIEJ1a3UNCg0KPGRpdiBjbGFzcz0icmVmZXJlbmNlLWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDI+IFJlZmVyZW5zaSBCdWt1IFBlbmR1a3VuZzwvaDI+DQo8aDM+QnVrdSBUZWtzIFV0YW1hIHVudHVrIFNhbXBsZSBTcGFjZSBkYW4gRXZlbnRzPC9oMz4NCjx0YWJsZSBjbGFzcz0idGFibGUtY3VzdG9tIj4NCjwvdGhlYWQ+DQo8dHI+DQo8dGg+Tm88L3RoPg0KPHRoPlJlZmVyZW5zaTwvdGg+DQo8dGg+QmFiIFJlbGV2YW48L3RoPg0KPHRoPktvbnRyaWJ1c2k8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGQ+MTwvdGQ+DQo8dGQ+IDxzdHJvbmc+Um9zcywgUy5NLjwvc3Ryb25nPiAoMjAxNCkuPGJyPiA8ZW0+QSBGaXJzdCBDb3Vyc2UgaW4gUHJvYmFiaWxpdHk8L2VtPjxicj4gUGVhcnNvbiBFZHVjYXRpb24sIDl0aCBFZGl0aW9uIDwvdGQ+DQo8dGQ+QmFiIDI6IEF4aW9tcyBvZiBQcm9iYWJpbGl0eTxicj5CYWIgMzogQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHk8L3RkPg0KPHRkPlBlbmplbGFzYW4gbWVuZGFsYW0gdGVudGFuZyBzYW1wbGUgc3BhY2UsIGV2ZW50cywgZGFuIG9wZXJhc2kgaGltcHVuYW48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD4yPC90ZD4NCjx0ZD4gPHN0cm9uZz5XYWxwb2xlLCBSLkUuLCBldCBhbC48L3N0cm9uZz4gKDIwMTIpLjxicj4gPGVtPlByb2JhYmlsaXR5ICYgU3RhdGlzdGljcyBmb3IgRW5naW5lZXJzICYgU2NpZW50aXN0czwvZW0+PGJyPiBQZWFyc29uIEVkdWNhdGlvbiwgOXRoIEVkaXRpb24gPC90ZD4NCjx0ZD5CYWIgMjogUHJvYmFiaWxpdHk8YnI+SGFsYW1hbjogMjgtNDU8L3RkPg0KPHRkPkNvbnRvaCBhcGxpa2FzaSBzYW1wbGUgc3BhY2UgZGFsYW0gZW5naW5lZXJpbmcgZGFuIHNhaW5zPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+MzwvdGQ+DQo8dGQ+IDxzdHJvbmc+RGV2b3JlLCBKLkwuPC9zdHJvbmc+ICgyMDE1KS48YnI+IDxlbT5Qcm9iYWJpbGl0eSBhbmQgU3RhdGlzdGljcyBmb3IgRW5naW5lZXJpbmcgYW5kIHRoZSBTY2llbmNlczwvZW0+PGJyPiBDZW5nYWdlIExlYXJuaW5nLCA5dGggRWRpdGlvbiA8L3RkPg0KPHRkPkJhYiAyOiBQcm9iYWJpbGl0eTxicj5IYWxhbWFuOiA1Ni03MjwvdGQ+DQo8dGQ+VmlzdWFsaXNhc2kgZGFuIGNvbnRvaCBwcmFrdGlzIGV2ZW50cyBkYWxhbSBrb250ZWtzIGVuZ2luZWVyaW5nPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KDQojIyBLZXNpbXB1bGFuDQoNCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24tYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMj4gS2VzaW1wdWxhbiBWaWRlbyAyPC9oMj4NCjxoMz5Qb2luLVBvaW4gUGVudGluZyB5YW5nIERpcGVsYWphcmk6PC9oMz4NCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24tZ3JpZCI+DQo8ZGl2IGNsYXNzPSJjb25jbHVzaW9uLWl0ZW0iPg0KPGg0PiBLb25zZXAgRGFzYXI8L2g0Pg0KPHVsPg0KPGxpPlNhbXBsZSBTcGFjZSA9IFNlbXVhIG91dGNvbWUgeWFuZyBtdW5na2luPC9saT4NCjxsaT5FdmVudCA9IFN1YnNldCBkYXJpIHNhbXBsZSBzcGFjZTwvbGk+DQo8bGk+U2ltcGxlIHZzIENvbXBvdW5kIEV2ZW50czwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJjb25jbHVzaW9uLWl0ZW0iPg0KPGg0PiBSZWxhc2kgRXZlbnRzPC9oND4NCjx1bD4NCjxsaT5NdXR1YWxseSBFeGNsdXNpdmU8L2xpPg0KPGxpPkluZGVwZW5kZW50IHZzIERlcGVuZGVudDwvbGk+DQo8bGk+Q29tcGxlbWVudCBFdmVudHM8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1pdGVtIj4NCjxoND5PcGVyYXNpIEhpbXB1bmFuPC9oND4NCjx1bD4NCjxsaT5VbmlvbiAoQSDiiKogQik8L2xpPg0KPGxpPkludGVyc2VjdGlvbiAoQSDiiKkgQik8L2xpPg0KPGxpPkNvbXBsZW1lbnQgKEEnKTwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPg0KPHA+PHN0cm9uZz5QZW1haGFtYW4gdGVudGFuZyBzYW1wbGUgc3BhY2UgZGFuIGV2ZW50cyBtZXJ1cGFrYW4gZm91bmRhdGlvbiB1bnR1ayBtZW1wZWxhamFyaSBrb25zZXAgcHJvYmFiaWxpdGFzIHlhbmcgbGViaWggYWR2YW5jZWQgc2VwZXJ0aSBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSBkYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMuPC9zdHJvbmc+PC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJuZXh0LXRvcGljLWJveCBhbmltYXRlLWZhZGVJbiI+DQogIDxoMz4gTGFuanV0IGtlIFZpZGVvIEJlcmlrdXRueWEhPC9oMz4NCiAgPHA+PHN0cm9uZz5OZXh0IFRvcGljOjwvc3Ryb25nPiBDb25kaXRpb25hbCBQcm9iYWJpbGl0eSAmIEJheWVzJyBUaGVvcmVtPC9wPg0KPC9kaXY+DQoNCi0tLQ0KdGl0bGU6ICJDb25kaXRpb25hbCBQcm9iYWJpbGl0eSAtIFZpZGVvIDMgQW5hbHlzaXMiDQphdXRob3I6ICJBZGluZGEgQWRlbGlhIEZ1dHJpIg0Kb3V0cHV0OiBodG1sX2RvY3VtZW50DQotLS0NCg0KYGBge2NzcywgZWNobz1GQUxTRX0NCi8qIENTUyBTdHlsaW5nIHVudHVrIFZpZGVvIDIgLSBTZXN1YWkgVmlkZW8gMSAqLw0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBUYWhvbWEsIEdlbmV2YSwgVmVyZGFuYSwgc2Fucy1zZXJpZjsNCiAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgY29sb3I6ICM1YTRhNGE7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmY1ZjUgMCUsICNmZmVlZjAgMTAwJSk7DQogIG1pbi1oZWlnaHQ6IDEwMHZoOw0KICBtYXJnaW46IDA7DQogIHBhZGRpbmc6IDIwcHg7DQp9DQoNCmh0bWwgew0KICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsNCn0NCg0KOjpzZWxlY3Rpb24gew0KICBiYWNrZ3JvdW5kOiAjZmZhZmNjOw0KICBjb2xvcjogIzVhNGE0YTsNCn0NCg0KYSB7DQogIGNvbG9yOiAjZmY2Yjk1Ow0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCmE6aG92ZXIgew0KICBjb2xvcjogI2ZmNGQ3YzsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCi8qIENvbnRhaW5lciB1dGFtYSAqLw0KLmNvbnRhaW5lciB7DQogIG1heC13aWR0aDogMTIwMHB4Ow0KICBtYXJnaW46IDAgYXV0bzsNCn0NCg0KLyogQ3VzdG9tIGNsYXNzZXMgZm9yIGNvbnRlbnQgYm94ZXMgKi8NCi5jb250ZW50LWJveCB7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmFmY2MgMCUsICNmZjZiOTUgMTAwJSk7DQogIGNvbG9yOiAjM0E0RjdBOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCi5jb250ZW50LWJveDpob3ZlciB7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsNCiAgYm94LXNoYWRvdzogMCAxMnB4IDMwcHggcmdiYSgwLDAsMCwwLjE1KTsNCn0NCg0KLmRlZmluaXRpb24tYm94IHsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNmZjZiOTU7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLmZvcm11bGEtYm94IHsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNmZjZiOTU7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLmV4YW1wbGUtYm94IHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgbWFyZ2luOiAxNXB4IDA7DQogIGJvcmRlcjogMXB4IHNvbGlkICNmZmFmY2M7DQp9DQoNCi5yZWZlcmVuY2UtYm94IHsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi5jb25jbHVzaW9uLWJveCB7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmFmY2MgMCUsICNmZjZiOTUgMTAwJSk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjEpOw0KfQ0KDQoubmV4dC10b3BpYy1ib3ggew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KICBwYWRkaW5nOiAyMHB4Ow0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3JkZXI6IDJweCBkYXNoZWQgI2ZmYWZjYzsNCn0NCg0KLmhlYWRlci1tYWluIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBwYWRkaW5nOiA0MHB4Ow0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjEpOw0KfQ0KDQoudmlkZW8tY2FyZCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQovKiBUYWJsZSBzdHlsaW5nICovDQoudGFibGUtY3VzdG9tIHsNCiAgd2lkdGg6IDEwMCU7DQogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogIG1hcmdpbjogMjBweCAwOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi50YWJsZS1jdXN0b20gdGggew0KICBiYWNrZ3JvdW5kOiAjZmY2Yjk1Ow0KICBjb2xvcjogd2hpdGU7DQogIHBhZGRpbmc6IDE1cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi50YWJsZS1jdXN0b20gdGQgew0KICBwYWRkaW5nOiAxNXB4Ow0KICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZmZTRlYzsNCn0NCg0KLnRhYmxlLWN1c3RvbSB0cjpob3ZlciB0ZCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQp9DQoNCi8qIFRvb2x0aXAgU3R5bGVzICovDQoudG9vbHRpcC1lbGVtZW50IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgY29sb3I6ICNmZjZiOTU7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQogIGJvcmRlci1ib3R0b206IDJweCBkb3R0ZWQgI2ZmYWZjYzsNCn0NCg0KLnRvb2x0aXAtY29udGVudCB7DQogIHZpc2liaWxpdHk6IGhpZGRlbjsNCiAgd2lkdGg6IDMwMHB4Ow0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmY2Yjk1IDAlLCAjZmY0ZDdjIDEwMCUpOw0KICBjb2xvcjogd2hpdGU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgcGFkZGluZzogMTVweDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB6LWluZGV4OiAxMDAwOw0KICBib3R0b206IDEyNSU7DQogIGxlZnQ6IDUwJTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOw0KICBvcGFjaXR5OiAwOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4yKTsNCiAgZm9udC1zaXplOiAwLjllbTsNCiAgbGluZS1oZWlnaHQ6IDEuNDsNCn0NCg0KLnRvb2x0aXAtY29udGVudDo6YWZ0ZXIgew0KICBjb250ZW50OiAiIjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDEwMCU7DQogIGxlZnQ6IDUwJTsNCiAgbWFyZ2luLWxlZnQ6IC01cHg7DQogIGJvcmRlci13aWR0aDogNXB4Ow0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6ICNmZjZiOTUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7DQp9DQoNCi50b29sdGlwLWVsZW1lbnQ6aG92ZXIgLnRvb2x0aXAtY29udGVudCB7DQogIHZpc2liaWxpdHk6IHZpc2libGU7DQogIG9wYWNpdHk6IDE7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01cHgpOw0KfQ0KDQovKiBQbG90IGNvbnRhaW5lciBzdHlsaW5nICovDQoucGxvdC1jb250YWluZXIgew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZTRlYzsNCn0NCg0KLnBsb3QtaW5mbyB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDE1cHg7DQogIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgbWFyZ2luLXRvcDogMTVweDsNCiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjZmY2Yjk1Ow0KfQ0KDQovKiBHcmlkIExheW91dCAqLw0KLmNvbmNsdXNpb24tZ3JpZCB7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpOw0KICBnYXA6IDIwcHg7DQogIG1hcmdpbi10b3A6IDIwcHg7DQp9DQoNCi5jb25jbHVzaW9uLWl0ZW0gew0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zKTsNCn0NCg0KLyogQW5pbWF0aW9uICovDQpAa2V5ZnJhbWVzIGZhZGVJblVwIHsNCiAgZnJvbSB7DQogICAgb3BhY2l0eTogMDsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7DQogIH0NCiAgdG8gew0KICAgIG9wYWNpdHk6IDE7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOw0KICB9DQp9DQoNCi5hbmltYXRlLWZhZGVJbiB7DQogIGFuaW1hdGlvbjogZmFkZUluVXAgMC42cyBlYXNlLW91dDsNCn0NCg0KLyogTWF0aCBmb3JtdWxhIHN0eWxpbmcgKi8NCi5tYXRoLWZvcm11bGEgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtc2l6ZTogMS40ZW07DQogIGNvbG9yOiAjZmY2Yjk1Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgbWFyZ2luOiAyMHB4IDA7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgYm9yZGVyOiAycHggc29saWQgI2ZmYWZjYzsNCn0NCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBTZXR1cCBjaHVuayAtIFZpZGVvIDIgLSBTZXN1YWkgVmlkZW8gMQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gRkFMU0UsDQogIHdhcm5pbmcgPSBGQUxTRSwNCiAgbWVzc2FnZSA9IEZBTFNFLA0KICBmaWcuYWxpZ24gPSAiY2VudGVyIiwNCiAgZmlnLndpZHRoID0gOSwgICAgIyBTZXN1YWkgVmlkZW8gMQ0KICBmaWcuaGVpZ2h0ID0gNSAgICAjIFNlc3VhaSBWaWRlbyAxDQopDQoNCiMgTG9hZCByZXF1aXJlZCBsaWJyYXJpZXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShzY2FsZXMpDQoNCiMgQ3VzdG9tIHRoZW1lIHVudHVrIGdncGxvdCAtIFNlc3VhaSBWaWRlbyAxDQpjdXN0b21fdGhlbWUgPC0gZnVuY3Rpb24oKSB7DQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNiwgY29sb3IgPSAiIzJjM2U1MCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxMSwgY29sb3IgPSAiIzdmOGM4ZCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDExLCBjb2xvciA9ICIjMmMzZTUwIiksDQogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBjb2xvciA9ICIjMzQ0OTVlIiksDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCBzaXplID0gMTApLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiI2VjZjBmMSIsIGxpbmV3aWR0aCA9IDAuMyksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9IE5BKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9IE5BKQ0KICApDQp9DQpgYGANCg0KDQo8aDEgc3R5bGU9ImNvbG9yOiAjZmY2Yjk1OyBtYXJnaW4tYm90dG9tOiAxNXB4OyI+IENvbmRpdGlvbmFsIFByb2JhYmlsaXR5IC0gVmlkZW8gMzwvaDE+DQo8aDMgc3R5bGU9ImNvbG9yOiAjNWE0YTRhOyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+Q29tcHJlaGVuc2l2ZSBBbmFseXNpcyBvZiBDb25kaXRpb25hbCBQcm9iYWJpbGl0eSBDb25jZXB0czwvaDM+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0idmlkZW8tY2FyZCBhbmltYXRlLWZhZGVJbiI+DQo8aDIgc3R5bGU9ImNvbG9yOiAjZmY2Yjk1OyBtYXJnaW4tYm90dG9tOiAxNXB4OyI+8J+TuSBWaWRlbyBBbmFseXNpczogQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHk8L2gyPg0KPHA+PHN0cm9uZz5WaWRlbyBTb3VyY2U6PC9zdHJvbmc+IDxhIGhyZWY9Imh0dHBzOi8veW91dHUuYmUvdnFLQWJoQ3FTVGM/c2k9d01NRjBPWl9tNWY1cnI0LSIgdGFyZ2V0PSJfYmxhbmsiPkNvbmRpdGlvbmFsIFByb2JhYmlsaXR5IC0gWW91VHViZTwvYT48L3A+DQo8cD48c3Ryb25nPkR1cmF0aW9uOjwvc3Ryb25nPiAxNDoyMCBtaW51dGVzIHwgPHN0cm9uZz5Db250ZW50IExldmVsOjwvc3Ryb25nPiBJbnRlcm1lZGlhdGU8L3A+DQo8L2Rpdj4NCg0KIyBDb25kaXRpb25hbCBQcm9iYWJpbGl0eQ0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDI+IFJhbmdrdW1hbiBQZW5qZWxhc2FuIFZpZGVvPC9oMj4NCjxoMz5Lb25zZXAgRGFzYXIgQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHk8L2gzPg0KPHA+VmlkZW8gaW5pIG1lbmplbGFza2FuIGtvbnNlcCA8c3BhbiBjbGFzcz0idG9vbHRpcC1lbGVtZW50Ij5Db25kaXRpb25hbCBQcm9iYWJpbGl0eTxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPlByb2JhYmlsaXRhcyBzdWF0dSBrZWphZGlhbiB5YW5nIGRpaGl0dW5nIGRlbmdhbiBzeWFyYXQgYmFod2Ega2VqYWRpYW4gbGFpbiB0ZWxhaCB0ZXJqYWRpPC9zcGFuPjwvc3Bhbj4geWFuZyBtZXJ1cGFrYW4gZnVuZGFtZW50YWwgZGFsYW0gdGVvcmkgcHJvYmFiaWxpdGFzIG1vZGVybi48L3A+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZGVmaW5pdGlvbi1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KPGgzPiBEZWZpbmlzaSBGb3JtYWwgQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHk8L2gzPg0KPHA+PHN0cm9uZz5Qcm9iYWJpbGl0YXMgYmVyc3lhcmF0PC9zdHJvbmc+IGRhcmkga2VqYWRpYW4gQSBkaWJlcmlrYW4ga2VqYWRpYW4gQiB0ZWxhaCB0ZXJqYWRpIGRpZGVmaW5pc2lrYW4gc2ViYWdhaSBwcm9iYWJpbGl0YXMgQSB0ZXJqYWRpIGRlbmdhbiBzeWFyYXQgQiBzdWRhaCB0ZXJqYWRpLjwvcD4NCjwvZGl2Pg0KDQojIyBSdW11cyBDb25kaXRpb25hbCBQcm9iYWJpbGl0eQ0KDQo8ZGl2IGNsYXNzPSJmb3JtdWxhLWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDM+IFJ1bXVzIENvbmRpdGlvbmFsIFByb2JhYmlsaXR5PC9oMz4NCjxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQo8cD4kJFAoQXxCKSA9IFxmcmFje1AoQSBcY2FwIEIpfXtQKEIpfSQkPC9wPg0KPC9kaXY+DQo8cD48c3Ryb25nPktldGVyYW5nYW46PC9zdHJvbmc+PC9wPg0KPHVsPg0KPGxpPiRQKEF8QikkID0gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+UHJvYmFiaWxpdGFzIEEgZGliZXJpa2FuIEI8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5QZWx1YW5nIGtlamFkaWFuIEEgdGVyamFkaSBkZW5nYW4gc3lhcmF0IEIgc3VkYWggdGVyamFkaTwvc3Bhbj48L3NwYW4+PC9saT4NCjxsaT4kUChBIFxjYXAgQikkID0gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+UHJvYmFiaWxpdGFzIEEgZGFuIEI8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5QZWx1YW5nIGtlZHVhIGtlamFkaWFuIEEgZGFuIEIgdGVyamFkaSBiZXJzYW1hYW48L3NwYW4+PC9zcGFuPjwvbGk+DQo8bGk+JFAoQikkID0gPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+UHJvYmFiaWxpdGFzIEI8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5QZWx1YW5nIGtlamFkaWFuIEIgdGVyamFkaTwvc3Bhbj48L3NwYW4+PC9saT4NCjwvdWw+DQo8cD48c3Ryb25nPlN5YXJhdDo8L3N0cm9uZz4gJFAoQikgPiAwJDwvcD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDI+IEludGVycHJldGFzaSBWaXN1YWwgQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHk8L2gyPg0KPGgzPktvbnNlcCAiUmVkdWNlZCBTYW1wbGUgU3BhY2UiPC9oMz4NCjxwPktldGlrYSBraXRhIG1lbmdldGFodWkgZXZlbnQgQiB0ZWxhaCB0ZXJqYWRpLCBzYW1wbGUgc3BhY2Uga2l0YSBiZXJrdXJhbmcgaGFueWEga2UgZXZlbnQgQi4gSW5pIG1lbmd1YmFoIGNhcmEga2l0YSBtZW5naGl0dW5nIHByb2JhYmlsaXRhcy48L3A+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IEFuYWxvZzogUnVhbmdhbiB5YW5nIE1lbnl1c3V0PC9oND4NCjxwPkJheWFuZ2thbiBzYW1wbGUgc3BhY2Ugc2ViYWdhaSBzZWJ1YWggcnVhbmdhbiBiZXNhci4gS2V0aWthIEIgdGVyamFkaSwga2l0YSBoYW55YSBtZW1wZXJoYXRpa2FuIGJhZ2lhbiBydWFuZ2FuIHlhbmcgbWVydXBha2FuIEIuIFByb2JhYmlsaXRhcyBBIGRpYmVyaWthbiBCIGFkYWxhaCBwcm9wb3JzaSBBIHlhbmcgYmVyYWRhIGRhbGFtIEIuPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBLb25zZXAgQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHkNCg0KYGBge3IgY29uZGl0aW9uYWxfdml6LCBlY2hvPUZBTFNFLCBmaWcud2lkdGg9OSwgZmlnLmhlaWdodD01fQ0KY29uZGl0aW9uYWxfZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBTY2VuYXJpbyA9IGMoIlAoQSkgLSBPcmlnaW5hbCIsICJQKEIpIC0gT3JpZ2luYWwiLCAiUChB4oipQikgLSBPcmlnaW5hbCIsICJQKEF8QikgLSBDb25kaXRpb25hbCIpLA0KICBQcm9iYWJpbGl0YXMgPSBjKDAuNCwgMC42LCAwLjMsIDAuNSksDQogIEtldGVyYW5nYW4gPSBjKCJQcm9iIEEgdGFucGEgc3lhcmF0IiwgIlByb2IgQiB0YW5wYSBzeWFyYXQiLCAiUHJvYiBBIGRhbiBCIiwgIlByb2IgQSBkaWJlcmlrYW4gQiIpLA0KICBXYXJuYSA9IGMoIiNmZmFmY2MiLCAiI2ZmYzhkZCIsICIjZmY2Yjk1IiwgIiNmZjg1YTEiKQ0KKQ0KDQpwMSA8LSBnZ3Bsb3QoY29uZGl0aW9uYWxfZGF0YSwgYWVzKHggPSBTY2VuYXJpbywgeSA9IFByb2JhYmlsaXRhcywgZmlsbCA9IFNjZW5hcmlvKSkgKw0KICBnZW9tX2NvbChhbHBoYSA9IDAuOCwgd2lkdGggPSAwLjYpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChQcm9iYWJpbGl0YXMqMTAwLCAiJSIpKSwgdmp1c3QgPSAtMC41LCBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZmYWZjYyIsICIjZmZjOGRkIiwgIiNmZjZiOTUiLCAiI2ZmODVhMSIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVmlzdWFsaXNhc2kgQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHkiLA0KICAgIHN1YnRpdGxlID0gIlBlcmJhbmRpbmdhbiBwcm9iYWJpbGl0YXMgb3JpZ2luYWwgdnMgY29uZGl0aW9uYWwiLA0KICAgIHggPSAiSmVuaXMgUHJvYmFiaWxpdGFzIiwNCiAgICB5ID0gIk5pbGFpIFByb2JhYmlsaXRhcyINCiAgKSArDQogIGN1c3RvbV90aGVtZSgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpwcmludChwMSkNCmBgYA0KDQo8ZGl2IGNsYXNzPSJwbG90LWluZm8iPg0KPHA+IDxzdHJvbmc+SW50ZXJwcmV0YXNpOjwvc3Ryb25nPiBDb25kaXRpb25hbCBwcm9iYWJpbGl0eSBQKEF8QikgbWVudW5qdWtrYW4gYmFnYWltYW5hIHBlbmdldGFodWFuIHRlbnRhbmcga2VqYWRpYW4gQiBtZW5ndWJhaCBwcm9iYWJpbGl0YXMga2VqYWRpYW4gQS48L3A+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMj4gQ29udG9oIEFwbGlrYXNpIENvbmRpdGlvbmFsIFByb2JhYmlsaXR5PC9oMj4NCjxoMz5Db250b2ggMTogTWVkaWNhbCBUZXN0aW5nPC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND4gVGVzdCBQZW55YWtpdCBkZW5nYW4gQWt1cmFzaSA5NSU8L2g0Pg0KPHA+PHN0cm9uZz5EYXRhOjwvc3Ryb25nPjwvcD4NCjx1bD4NCjxsaT5QcmV2YWxlbnNpIHBlbnlha2l0OiAxJSBwb3B1bGFzaTwvbGk+DQo8bGk+U2Vuc2l0aXZpdGFzIHRlc3Q6IDk1JSAoUChUZXN0K3xTYWtpdCkpPC9saT4NCjxsaT5TcGVzaWZpc2l0YXMgdGVzdDogOTAlIChQKFRlc3QtfFNlaGF0KSk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+UGVydGFueWFhbjo8L3N0cm9uZz4gSmlrYSBzZXNlb3JhbmcgdGVzdCBwb3NpdGlmLCBiZXJhcGEgcHJvYmFiaWxpdGFzIGRpYSBiZW5hci1iZW5hciBzYWtpdD88L3A+DQo8cD48c3Ryb25nPlNvbHVzaSBtZW5nZ3VuYWthbiBDb25kaXRpb25hbCBQcm9iYWJpbGl0eTo8L3N0cm9uZz48L3A+DQo8cD4kUChTYWtpdHxUZXN0KykgPSBcZnJhY3tQKFRlc3QrfFNha2l0KSBcY2RvdCBQKFNha2l0KX17UChUZXN0Kyl9JDwvcD4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KIyMgQ29udG9oIE1lZGljYWwgVGVzdGluZw0KDQpgYGB7ciBtZWRpY2FsX3RhYmxlLCBlY2hvPUZBTFNFfQ0KbWVkaWNhbF9jYWxjIDwtIGRhdGEuZnJhbWUoDQogIFByb2JhYmlsaXRhcyA9IGMoIlAoU2FraXQpIiwgIlAoVGVzdCt8U2FraXQpIiwgIlAoVGVzdC18U2VoYXQpIiwgIlAoVGVzdCspIiwgIlAoU2FraXR8VGVzdCspIiksDQogIE5pbGFpID0gYygwLjAxLCAwLjk1LCAwLjkwLCAwLjAxKjAuOTUgKyAwLjk5KjAuMTAsICgwLjAxKjAuOTUpLygwLjAxKjAuOTUgKyAwLjk5KjAuMTApKSwNCiAgS2V0ZXJhbmdhbiA9IGMoIlByZXZhbGVuc2kgcGVueWFraXQiLCAiU2Vuc2l0aXZpdGFzIHRlc3QiLCAiU3Blc2lmaXNpdGFzIHRlc3QiLCAiUHJvYiB0ZXN0IHBvc2l0aWYiLCAiUHJvYiBzYWtpdCBkaWJlcmlrYW4gdGVzdCBwb3NpdGlmIikNCikNCg0KbWVkaWNhbF9jYWxjICU+JQ0KICBrYWJsZShjYXB0aW9uID0gIkFuYWxpc2lzIE1lZGljYWwgVGVzdGluZyBkZW5nYW4gQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHkiKSAlPiUNCiAga2FibGVfc3R5bGluZygNCiAgICBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiksDQogICAgZnVsbF93aWR0aCA9IFRSVUUsDQogICAgZm9udF9zaXplID0gMTQNCiAgKSAlPiUNCiAgY29sdW1uX3NwZWMoMSwgYm9sZCA9IFRSVUUsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjZmY2Yjk1IikgJT4lDQogIGNvbHVtbl9zcGVjKDIsIGJhY2tncm91bmQgPSAiI2ZmZjBmNiIpICU+JQ0KICBjb2x1bW5fc3BlYygzLCBiYWNrZ3JvdW5kID0gIiNmZmU0ZWMiKQ0KYGBgDQoNCjxkaXYgY2xhc3M9InBsb3QtaW5mbyI+DQo8cD4gPHN0cm9uZz5JbnNpZ2h0Ojwvc3Ryb25nPiBNZXNraXB1biB0ZXN0IG1lbWlsaWtpIGFrdXJhc2kgdGluZ2dpLCBwcm9iYWJpbGl0YXMgYmVuYXItYmVuYXIgc2FraXQga2V0aWthIHRlc3QgcG9zaXRpZiBoYW55YSBzZWtpdGFyIDguOCUga2FyZW5hIHByZXZhbGVuc2kgcGVueWFraXQgeWFuZyByZW5kYWguPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDM+Q29udG9oIDI6IFBlcm1haW5hbiBLYXJ0dTwvaDM+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IFBlbmdhbWJpbGFuIER1YSBLYXJ0dSBkYXJpIERlY2s8L2g0Pg0KPHA+PHN0cm9uZz5TY2VuYXJpbzo8L3N0cm9uZz4gTWVuZ2FtYmlsIGR1YSBrYXJ0dSBkYXJpIGRlY2sgNTIga2FydHUgdGFucGEgcGVuZ2VtYmFsaWFuLjwvcD4NCjxwPjxzdHJvbmc+UGVydGFueWFhbiAxOjwvc3Ryb25nPiBCZXJhcGEgcHJvYmFiaWxpdGFzIGthcnR1IGtlZHVhIEFzIGRpYmVyaWthbiBrYXJ0dSBwZXJ0YW1hIEFzPzwvcD4NCjxwPiRQKEFfMnxBXzEpID0gXGZyYWN7M317NTF9IOKJiCAwLjA1ODgkPC9wPg0KPHA+PHN0cm9uZz5QZXJ0YW55YWFuIDI6PC9zdHJvbmc+IEJlcmFwYSBwcm9iYWJpbGl0YXMga2FydHUga2VkdWEgSGVhcnQgZGliZXJpa2FuIGthcnR1IHBlcnRhbWEgSGVhcnQ/PC9wPg0KPHA+JFAoSF8yfEhfMSkgPSBcZnJhY3sxMn17NTF9IOKJiCAwLjIzNTMkPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCBhbmltYXRlLWZhZGVJbiI+DQo8aDI+IEluZGVwZW5kZW50IEV2ZW50cyB2cyBDb25kaXRpb25hbCBQcm9iYWJpbGl0eTwvaDI+DQo8aDM+S29uc2VwIEluZGVwZW5kZW5jZTwvaDM+DQo8cD5EdWEgZXZlbnRzIEEgZGFuIEIgZGlzZWJ1dCBpbmRlcGVuZGVudCBqaWthOjwvcD4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQo8cD4kJFAoQXxCKSA9IFAoQSkgXHF1YWQgXHRleHR7YXRhdX0gXHF1YWQgUChBIFxjYXAgQikgPSBQKEEpIFxjZG90IFAoQikkJDwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IENvbnRvaDogUGVsZW1wYXJhbiBEdWEgRGFkdTwvaDQ+DQo8cD48c3Ryb25nPkV2ZW50IEE6PC9zdHJvbmc+IERhZHUgcGVydGFtYSBhbmdrYSAzIOKGkiAkUChBKSA9IFxmcmFjezF9ezZ9JDwvcD4NCjxwPjxzdHJvbmc+RXZlbnQgQjo8L3N0cm9uZz4gRGFkdSBrZWR1YSBhbmdrYSA0IOKGkiAkUChCKSA9IFxmcmFjezF9ezZ9JDwvcD4NCjxwPjxzdHJvbmc+Q29uZGl0aW9uYWwgUHJvYmFiaWxpdHk6PC9zdHJvbmc+ICRQKEF8QikgPSBcZnJhY3sxfXs2fSA9IFAoQSkkPC9wPg0KPHA+PHN0cm9uZz5LZXNpbXB1bGFuOjwvc3Ryb25nPiBBIGRhbiBCIGluZGVwZW5kZW50PC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQojIyBUZXN0IEluZGVwZW5kZW5jZSBCZXJiYWdhaSBTY2VuYXJpbw0KDQpgYGB7ciBpbmRlcGVuZGVuY2VfdGFibGUsIGVjaG89RkFMU0V9DQppbmRlcGVuZGVuY2VfZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBTY2VuYXJpbyA9IGMoIkRhZHUgSW5kZXBlbmRlbnQiLCAiS2FydHUgRGVwZW5kZW50IiwgIktvaW4gSW5kZXBlbmRlbnQiLCAiVXJuIERlcGVuZGVudCIpLA0KICBFdmVudF9BID0gYygiRGFkdTE9MyIsICJLYXJ0dTE9QXMiLCAiS29pbjE9SGVhZCIsICJCb2xhMT1NZXJhaCIpLA0KICBFdmVudF9CID0gYygiRGFkdTI9NCIsICJLYXJ0dTI9QXMiLCAiS29pbjI9SGVhZCIsICJCb2xhMj1NZXJhaCIpLA0KICBQX0EgPSBjKDEvNiwgNC81MiwgMC41LCA1LzEwKSwNCiAgUF9CID0gYygxLzYsIDMvNTEsIDAuNSwgNC85KSwNCiAgUF9BX2RpYmVyaWthbl9CID0gYygxLzYsIDMvNTEsIDAuNSwgNC85KSwNCiAgSW5kZXBlbmRlbnQgPSBjKCJZQSIsICJUSURBSyIsICJZQSIsICJUSURBSyIpDQopDQoNCmluZGVwZW5kZW5jZV9kYXRhICU+JQ0KICBrYWJsZShjYXB0aW9uID0gIlRlc3QgSW5kZXBlbmRlbmNlIEJlcmJhZ2FpIFNjZW5hcmlvIikgJT4lDQogIGthYmxlX3N0eWxpbmcoDQogICAgYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIpLA0KICAgIGZ1bGxfd2lkdGggPSBUUlVFLA0KICAgIGZvbnRfc2l6ZSA9IDE0DQogICkgJT4lDQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAiI2ZmODVhMSIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCBiYWNrZ3JvdW5kID0gIiNmZmYwZjYiKSAlPiUNCiAgY29sdW1uX3NwZWMoMywgYmFja2dyb3VuZCA9ICIjZmZlNGVjIikgJT4lDQogIGNvbHVtbl9zcGVjKDcsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjZmY2Yjk1IikNCmBgYA0KDQo8ZGl2IGNsYXNzPSJwbG90LWluZm8iPg0KPHA+IDxzdHJvbmc+UGVudGluZzo8L3N0cm9uZz4gRHVhIGtlamFkaWFuIGluZGVwZW5kZW50IGppa2EgcGVuZ2V0YWh1YW4gdGVudGFuZyBzYXR1IGtlamFkaWFuIHRpZGFrIG1lbmd1YmFoIHByb2JhYmlsaXRhcyBrZWphZGlhbiBsYWlubnlhLjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMj4gR2VuZXJhbCBNdWx0aXBsaWNhdGlvbiBSdWxlPC9oMj4NCjxoMz5BdHVyYW4gUGVya2FsaWFuIFVtdW08L2gzPg0KPHA+VW50dWsgbXVsdGlwbGUgZXZlbnRzLCBraXRhIGRhcGF0IG1lbXBlcmx1YXMga29uc2VwIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5OjwvcD4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQo8cD4kJFAoQSBcY2FwIEIgXGNhcCBDKSA9IFAoQSkgXGNkb3QgUChCfEEpIFxjZG90IFAoQ3xBIFxjYXAgQikkJDwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+IENvbnRvaDogUGVuZ2FtYmlsYW4gMyBLYXJ0dTwvaDQ+DQo8cD48c3Ryb25nPlByb2JhYmlsaXRhcyBtZW5kYXBhdGthbiAzIEFzIGJlcnR1cnV0LXR1cnV0Ojwvc3Ryb25nPjwvcD4NCjxwPiRQKEFfMSBcY2FwIEFfMiBcY2FwIEFfMykgPSBQKEFfMSkgXGNkb3QgUChBXzJ8QV8xKSBcY2RvdCBQKEFfM3xBXzEgXGNhcCBBXzIpJDwvcD4NCjxwPiQ9IFxmcmFjezR9ezUyfSBcY2RvdCBcZnJhY3szfXs1MX0gXGNkb3QgXGZyYWN7Mn17NTB9ID0gXGZyYWN7MjR9ezEzMjYwMH0g4omIIDAuMDAwMTgxJDwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMj4gTGF3IG9mIFRvdGFsIFByb2JhYmlsaXR5PC9oMj4NCjxoMz5UZW9yZW1hIFByb2JhYmlsaXRhcyBUb3RhbDwvaDM+DQo8cD5KaWthICRCXzEsIEJfMiwgLi4uLCBCX24kIGFkYWxhaCBwYXJ0aXNpIGRhcmkgc2FtcGxlIHNwYWNlLCBtYWthOjwvcD4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQo8cD4kJFAoQSkgPSBcc3VtX3tpPTF9Xm4gUChBfEJfaSkgXGNkb3QgUChCX2kpJCQ8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PiBDb250b2g6IEZhY3RvcnkgUHJvZHVjdGlvbjwvaDQ+DQo8cD48c3Ryb25nPkRhdGE6PC9zdHJvbmc+PC9wPg0KPHVsPg0KPGxpPk1hY2hpbmUgMTogNTAlIHByb2R1Y3Rpb24sIGRlZmVjdCByYXRlIDIlPC9saT4NCjxsaT5NYWNoaW5lIDI6IDMwJSBwcm9kdWN0aW9uLCBkZWZlY3QgcmF0ZSAzJTwvbGk+DQo8bGk+TWFjaGluZSAzOiAyMCUgcHJvZHVjdGlvbiwgZGVmZWN0IHJhdGUgMSU8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+VG90YWwgZGVmZWN0IHByb2JhYmlsaXR5Ojwvc3Ryb25nPjwvcD4NCjxwPiRQKERlZmVjdCkgPSAwLjUgXGNkb3QgMC4wMiArIDAuMyBcY2RvdCAwLjAzICsgMC4yIFxjZG90IDAuMDEgPSAwLjAyMSQ8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQojIyBWaXN1YWxpc2FzaSBMYXcgb2YgVG90YWwgUHJvYmFiaWxpdHkNCg0KYGBge3IgZmFjdG9yeV92aXosIGVjaG89RkFMU0UsIGZpZy53aWR0aD05LCBmaWcuaGVpZ2h0PTV9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoRFQpDQoNCiMgRGF0YSBmYWN0b3J5DQpmYWN0b3J5X2RhdGEgPC0gZGF0YS5mcmFtZSgNCiAgTWVzaW4gPSBjKCJNYWNoaW5lIDEiLCAiTWFjaGluZSAyIiwgIk1hY2hpbmUgMyIpLA0KICBQcm9kdWtzaSA9IGMoMC41MCwgMC4zMCwgMC4yMCksDQogIERlZmVjdF9SYXRlID0gYygwLjAyLCAwLjAzLCAwLjAxKSwNCiAgS29udHJpYnVzaV9EZWZlY3QgPSBjKDAuNTAqMC4wMiwgMC4zMCowLjAzLCAwLjIwKjAuMDEpDQopDQoNCiMgUGFzdGlrYW4gY3VzdG9tX3RoZW1lIHN1ZGFoIGRpZGVmaW5pc2lrYW4NCmN1c3RvbV90aGVtZSA8LSBmdW5jdGlvbigpIHsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE2LCBjb2xvciA9ICIjZmY2Yjk1IiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDExLCBjb2xvciA9ICIjN2Y4YzhkIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTEsIGNvbG9yID0gIiNmZjZiOTUiKSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGNvbG9yID0gIiMyYzNlNTAiKSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHNpemUgPSAxMCksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICIjZWNmMGYxIiwgbGluZXdpZHRoID0gMC4zKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpDQogICkNCn0NCg0KIyBDcmVhdGUgcGxvdA0KcDIgPC0gZ2dwbG90KGZhY3RvcnlfZGF0YSwgYWVzKHggPSBNZXNpbiwgeSA9IEtvbnRyaWJ1c2lfRGVmZWN0LCBmaWxsID0gTWVzaW4pKSArDQogIGdlb21fY29sKGFscGhhID0gMC44LCB3aWR0aCA9IDAuNikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKHJvdW5kKEtvbnRyaWJ1c2lfRGVmZWN0KjEwMCwgMiksICIlIikpLCANCiAgICAgICAgICAgIHZqdXN0ID0gLTAuNSwgc2l6ZSA9IDQsIGZvbnRmYWNlID0gImJvbGQiKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmZmFmY2MiLCAiI2ZmYzhkZCIsICIjZmY2Yjk1IikpICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJMYXcgb2YgVG90YWwgUHJvYmFiaWxpdHkgLSBGYWN0b3J5IEV4YW1wbGUiLA0KICAgIHN1YnRpdGxlID0gIktvbnRyaWJ1c2kgc2V0aWFwIG1lc2luIHRlcmhhZGFwIHRvdGFsIGRlZmVjdCByYXRlIiwNCiAgICB4ID0gIk1lc2luIFByb2R1a3NpIiwNCiAgICB5ID0gIktvbnRyaWJ1c2kgRGVmZWN0IFJhdGUiDQogICkgKw0KICBjdXN0b21fdGhlbWUoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCg0KIyBEaXNwbGF5IHBsb3QNCnByaW50KHAyKQ0KDQojIE9wdGlvbmFsOiBEaXNwbGF5IGRhdGEgdGFibGUNCmRhdGF0YWJsZShmYWN0b3J5X2RhdGEsIA0KICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KGRvbSA9ICd0JyksIA0KICAgICAgICAgIHJvd25hbWVzID0gRkFMU0UpICU+JQ0KICBmb3JtYXRQZXJjZW50YWdlKGNvbHVtbnMgPSBjKCJQcm9kdWtzaSIsICJEZWZlY3RfUmF0ZSIsICJLb250cmlidXNpX0RlZmVjdCIpLCANCiAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSAyKQ0KYGBgDQoNCjxkaXYgY2xhc3M9InBsb3QtaW5mbyI+DQo8cD4gPHN0cm9uZz5JbnRlcnByZXRhc2k6PC9zdHJvbmc+IE1lc2luIDEgbWVtYmVyaWthbiBrb250cmlidXNpIHRlcmJlc2FyIHRlcmhhZGFwIGRlZmVjdCByYXRlIGthcmVuYSB2b2x1bWUgcHJvZHVrc2lueWEgeWFuZyB0aW5nZ2kuPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KPGgyPiBBcGxpa2FzaSBSZWFsLVdvcmxkIENvbmRpdGlvbmFsIFByb2JhYmlsaXR5PC9oMj4NCjxoMz4xLiBSaXNrIEFzc2Vzc21lbnQgaW4gSW5zdXJhbmNlPC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+UHJlbWkgYXN1cmFuc2k8L3N0cm9uZz4gZGloaXR1bmcgYmVyZGFzYXJrYW4gY29uZGl0aW9uYWwgcHJvYmFiaWxpdHk6PC9wPg0KPHA+JFAoQ2xhaW18QWdlLCBHZW5kZXIsIEhlYWx0aCkgPSBcZnJhY3tQKENsYWltIFxjYXAgRGVtb2dyYXBoaWNzKX17UChEZW1vZ3JhcGhpY3MpfSQ8L3A+DQo8L2Rpdj4NCjxoMz4yLiBNYWNoaW5lIExlYXJuaW5nIENsYXNzaWZpY2F0aW9uPC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+TmFpdmUgQmF5ZXMgQ2xhc3NpZmllcjwvc3Ryb25nPiBtZW5nZ3VuYWthbiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eTo8L3A+DQo8cD4kUChDbGFzc3xGZWF0dXJlcykg4oidIFAoQ2xhc3MpIFxjZG90IFxwcm9kIFAoRmVhdHVyZV9pfENsYXNzKSQ8L3A+DQo8L2Rpdj4NCjxoMz4zLiBRdWFsaXR5IENvbnRyb2wgaW4gTWFudWZhY3R1cmluZzwvaDM+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8cD48c3Ryb25nPlN0YXRpc3RpY2FsIFByb2Nlc3MgQ29udHJvbDwvc3Ryb25nPiBtZW5nZ3VuYWthbiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSB1bnR1ayBtZW5kZXRla3NpIGFub21hbGk6PC9wPg0KPHA+JFAoRGVmZWN0fFByb2Nlc3MgUGFyYW1ldGVycykgPSBcZnJhY3tQKERlZmVjdCBcY2FwIFBhcmFtZXRlcnMpfXtQKFBhcmFtZXRlcnMpfSQ8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQojIyBLZXNpbXB1bGFuDQoNCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24tYm94IGFuaW1hdGUtZmFkZUluIj4NCjxoMj4gS2VzaW1wdWxhbiBWaWRlbyAzIC0gQ29uZGl0aW9uYWwgUHJvYmFiaWxpdHk8L2gyPg0KPGgzPlBvaW4tUG9pbiBQZW50aW5nIHlhbmcgRGlwZWxhamFyaTo8L2gzPg0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1ncmlkIj4NCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24taXRlbSI+DQo8aDQ+IEZ1bmRhbWVudGFsIENvbmNlcHRzPC9oND4NCjx1bD4NCjxsaT4kUChBfEIpID0gXGZyYWN7UChBIFxjYXAgQil9e1AoQil9JDwvbGk+DQo8bGk+UmVkdWNlZCBTYW1wbGUgU3BhY2U8L2xpPg0KPGxpPkludGVycHJldGFzaSB2aXN1YWw8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1pdGVtIj4NCjxoND4gQWR2YW5jZWQgQXBwbGljYXRpb25zPC9oND4NCjx1bD4NCjxsaT5HZW5lcmFsIE11bHRpcGxpY2F0aW9uIFJ1bGU8L2xpPg0KPGxpPkxhdyBvZiBUb3RhbCBQcm9iYWJpbGl0eTwvbGk+DQo8bGk+QmF5ZXMnIFRoZW9yZW08L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1pdGVtIj4NCjxoND4gZWFsLVdvcmxkIFVzYWdlPC9oND4NCjx1bD4NCjxsaT5NZWRpY2FsIFRlc3Rpbmc8L2xpPg0KPGxpPlJpc2sgQXNzZXNzbWVudDwvbGk+DQo8bGk+TWFjaGluZSBMZWFybmluZzwvbGk+DQo8L3VsPg0KICA8L2Rpdj4NCiAgPC9kaXY+DQo8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxwPjxzdHJvbmc+Q29uZGl0aW9uYWwgcHJvYmFiaWxpdHkgYWRhbGFoIGtvbnNlcCBmdW5kYW1lbnRhbCB5YW5nIG1lbXVuZ2tpbmthbiBraXRhIG1lbWJ1YXQga2VwdXR1c2FuIGRhbGFtIGtldGlkYWtwYXN0aWFuIGRlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIGluZm9ybWFzaSBiYXJ1Ljwvc3Ryb25nPjwvcD4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KIyMgUmVmZXJlbnNpIGJ1a3UNCg0KPGRpdiBjbGFzcz0icmVmZXJlbmNlcyBhbmltYXRlLWZhZGVJbiI+DQo8aDI+UmVmZXJlbnNpPC9oMj4NCjx1bD4NCjxsaT5Ib2dnLCBSLiBWLiwgVGFuaXMsIEUuIEEuLCAmIFppbW1lcm1hbiwgRC4gTC4gKDIwMTQpLiA8ZW0+UHJvYmFiaWxpdHkgYW5kIFN0YXRpc3RpY2FsIEluZmVyZW5jZTwvZW0+LiBQZWFyc29uLjwvbGk+DQo8bGk+Um9zcywgUy4gKDIwMTApLiA8ZW0+QSBGaXJzdCBDb3Vyc2UgaW4gUHJvYmFiaWxpdHk8L2VtPi4gUGVhcnNvbi48L2xpPg0KPGxpPkJsaXR6c3RlaW4sIEouLCAmIEh3YW5nLCBKLiAoMjAxOSkuIDxlbT5JbnRyb2R1Y3Rpb24gdG8gUHJvYmFiaWxpdHk8L2VtPi4gQ2hhcG1hbiAmIEhhbGwvQ1JDLjwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0ibmV4dC10b3BpYy1ib3ggYW5pbWF0ZS1mYWRlSW4iPg0KICA8aDM+8J+agCBMYW5qdXQga2UgVmlkZW8gQmVyaWt1dG55YSE8L2gzPg0KICA8cD48c3Ryb25nPk5leHQgVG9waWM6PC9zdHJvbmc+IFByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnMgJiBSYW5kb20gVmFyaWFibGVzPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCg0KLS0tDQp0aXRsZTogIkJheWVzJyBUaGVvcmVtIC0gVmlkZW8gNCBBbmFseXNpcyINCmF1dGhvcjogIkFkaW5kYSBBZGVsaWEgRnV0cmkiDQpvdXRwdXQ6IGh0bWxfZG9jdW1lbnQNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KLyogQ1NTIFN0eWxpbmcgdW50dWsgVmlkZW8gMiAtIFNlc3VhaSBWaWRlbyAxICovDQpib2R5IHsNCiAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICBsaW5lLWhlaWdodDogMS42Ow0KICBjb2xvcjogIzVhNGE0YTsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmZjVmNSAwJSwgI2ZmZWVmMCAxMDAlKTsNCiAgbWluLWhlaWdodDogMTAwdmg7DQogIG1hcmdpbjogMDsNCiAgcGFkZGluZzogMjBweDsNCn0NCg0KaHRtbCB7DQogIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOw0KfQ0KDQo6OnNlbGVjdGlvbiB7DQogIGJhY2tncm91bmQ6ICNmZmFmY2M7DQogIGNvbG9yOiAjNWE0YTRhOw0KfQ0KDQphIHsNCiAgY29sb3I6ICNmZjZiOTU7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KYTpob3ZlciB7DQogIGNvbG9yOiAjZmY0ZDdjOw0KICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KLyogQ29udGFpbmVyIHV0YW1hICovDQouY29udGFpbmVyIHsNCiAgbWF4LXdpZHRoOiAxMjAwcHg7DQogIG1hcmdpbjogMCBhdXRvOw0KfQ0KDQovKiBDdXN0b20gY2xhc3NlcyBmb3IgY29udGVudCBib3hlcyAqLw0KLmNvbnRlbnQtYm94IHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmYWZjYyAwJSwgI2ZmNmI5NSAxMDAlKTsNCiAgY29sb3I6ICMzQTRGN0E7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCn0NCg0KLmNvbnRlbnQtYm94OmhvdmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOw0KICBib3gtc2hhZG93OiAwIDEycHggMzBweCByZ2JhKDAsMCwwLDAuMTUpOw0KfQ0KDQouZGVmaW5pdGlvbi1ib3ggew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2ZmNmI5NTsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQouZm9ybXVsYS1ib3ggew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2ZmNmI5NTsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQouZXhhbXBsZS1ib3ggew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KICBwYWRkaW5nOiAyMHB4Ow0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBtYXJnaW46IDE1cHggMDsNCiAgYm9yZGVyOiAxcHggc29saWQgI2ZmYWZjYzsNCn0NCg0KLnJlZmVyZW5jZS1ib3ggew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLmNvbmNsdXNpb24tYm94IHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmYWZjYyAwJSwgI2ZmNmI5NSAxMDAlKTsNCiAgY29sb3I6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi5uZXh0LXRvcGljLWJveCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG1hcmdpbjogMjVweCAwOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGJvcmRlcjogMnB4IGRhc2hlZCAjZmZhZmNjOw0KfQ0KDQouaGVhZGVyLW1haW4gew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIHBhZGRpbmc6IDQwcHg7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi52aWRlby1jYXJkIHsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi8qIFRhYmxlIHN0eWxpbmcgKi8NCi50YWJsZS1jdXN0b20gew0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgbWFyZ2luOiAyMHB4IDA7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLnRhYmxlLWN1c3RvbSB0aCB7DQogIGJhY2tncm91bmQ6ICNmZjZiOTU7DQogIGNvbG9yOiB3aGl0ZTsNCiAgcGFkZGluZzogMTVweDsNCiAgdGV4dC1hbGlnbjogbGVmdDsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KLnRhYmxlLWN1c3RvbSB0ZCB7DQogIHBhZGRpbmc6IDE1cHg7DQogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZlNGVjOw0KfQ0KDQoudGFibGUtY3VzdG9tIHRyOmhvdmVyIHRkIHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCn0NCg0KLyogVG9vbHRpcCBTdHlsZXMgKi8NCi50b29sdGlwLWVsZW1lbnQgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBjb2xvcjogI2ZmNmI5NTsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgYm9yZGVyLWJvdHRvbTogMnB4IGRvdHRlZCAjZmZhZmNjOw0KfQ0KDQoudG9vbHRpcC1jb250ZW50IHsNCiAgdmlzaWJpbGl0eTogaGlkZGVuOw0KICB3aWR0aDogMzAwcHg7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZjZiOTUgMCUsICNmZjRkN2MgMTAwJSk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBwYWRkaW5nOiAxNXB4Ow0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHotaW5kZXg6IDEwMDA7DQogIGJvdHRvbTogMTI1JTsNCiAgbGVmdDogNTAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIG9wYWNpdHk6IDA7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjIpOw0KICBmb250LXNpemU6IDAuOWVtOw0KICBsaW5lLWhlaWdodDogMS40Ow0KfQ0KDQoudG9vbHRpcC1jb250ZW50OjphZnRlciB7DQogIGNvbnRlbnQ6ICIiOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogMTAwJTsNCiAgbGVmdDogNTAlOw0KICBtYXJnaW4tbGVmdDogLTVweDsNCiAgYm9yZGVyLXdpZHRoOiA1cHg7DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogI2ZmNmI5NSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsNCn0NCg0KLnRvb2x0aXAtZWxlbWVudDpob3ZlciAudG9vbHRpcC1jb250ZW50IHsNCiAgdmlzaWJpbGl0eTogdmlzaWJsZTsNCiAgb3BhY2l0eTogMTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTVweCk7DQp9DQoNCi8qIFBsb3QgY29udGFpbmVyIHN0eWxpbmcgKi8NCi5wbG90LWNvbnRhaW5lciB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KICBib3JkZXI6IDFweCBzb2xpZCAjZmZlNGVjOw0KfQ0KDQoucGxvdC1pbmZvIHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCiAgcGFkZGluZzogMTVweDsNCiAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICBtYXJnaW4tdG9wOiAxNXB4Ow0KICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNmZjZiOTU7DQp9DQoNCi8qIEdyaWQgTGF5b3V0ICovDQouY29uY2x1c2lvbi1ncmlkIHsNCiAgZGlzcGxheTogZ3JpZDsNCiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7DQogIGdhcDogMjBweDsNCiAgbWFyZ2luLXRvcDogMjBweDsNCn0NCg0KLmNvbmNsdXNpb24taXRlbSB7DQogIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpOw0KfQ0KDQovKiBBbmltYXRpb24gKi8NCkBrZXlmcmFtZXMgZmFkZUluVXAgew0KICBmcm9tIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsNCiAgfQ0KICB0byB7DQogICAgb3BhY2l0eTogMTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7DQogIH0NCn0NCg0KLmFuaW1hdGUtZmFkZUluIHsNCiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjZzIGVhc2Utb3V0Ow0KfQ0KDQovKiBNYXRoIGZvcm11bGEgc3R5bGluZyAqLw0KLm1hdGgtZm9ybXVsYSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1zaXplOiAxLjRlbTsNCiAgY29sb3I6ICNmZjZiOTU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBtYXJnaW46IDIwcHggMDsNCiAgcGFkZGluZzogMjBweDsNCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBib3JkZXI6IDJweCBzb2xpZCAjZmZhZmNjOw0KfQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojIFNldHVwIGNodW5rIC0gVmlkZW8gMiAtIFNlc3VhaSBWaWRlbyAxDQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGVjaG8gPSBGQUxTRSwNCiAgd2FybmluZyA9IEZBTFNFLA0KICBtZXNzYWdlID0gRkFMU0UsDQogIGZpZy5hbGlnbiA9ICJjZW50ZXIiLA0KICBmaWcud2lkdGggPSA5LCAgICAjIFNlc3VhaSBWaWRlbyAxDQogIGZpZy5oZWlnaHQgPSA1ICAgICMgU2VzdWFpIFZpZGVvIDENCikNCg0KIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcw0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHNjYWxlcykNCg0KIyBDdXN0b20gdGhlbWUgdW50dWsgZ2dwbG90IC0gU2VzdWFpIFZpZGVvIDENCmN1c3RvbV90aGVtZSA8LSBmdW5jdGlvbigpIHsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE2LCBjb2xvciA9ICIjMmMzZTUwIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDExLCBjb2xvciA9ICIjN2Y4YzhkIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTEsIGNvbG9yID0gIiMyYzNlNTAiKSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGNvbG9yID0gIiMzNDQ5NWUiKSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHNpemUgPSAxMCksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICIjZWNmMGYxIiwgbGluZXdpZHRoID0gMC4zKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpDQogICkNCn0NCmBgYA0KDQo8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJ2aWRlby1jYXJkIj4NCjxoMj4gQmF5ZXMnIFRoZW9yZW0gLSBWaWRlbyA0IEFuYWx5c2lzPC9oMj4NCjxwPjxzdHJvbmc+VmlkZW8gU291cmNlOjwvc3Ryb25nPiA8YSBocmVmPSJodHRwczovL3lvdXR1LmJlL2Y3YWdUdjluQTVrP3NpPTJVaW05bFdUbGx2YmwzaE8iIHRhcmdldD0iX2JsYW5rIj5CYXllcycgVGhlb3JlbSAtIFlvdVR1YmU8L2E+PC9wPg0KPHA+PHN0cm9uZz5EdXJhdGlvbjo8L3N0cm9uZz4gMTY6NDUgbWludXRlcyB8IDxzdHJvbmc+Q29udGVudCBMZXZlbDo8L3N0cm9uZz4gQWR2YW5jZWQ8L3A+DQo8L2Rpdj4NCg0KIyBCYXllcycgVGhlb3JlbSANCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBSYW5na3VtYW4gUGVuamVsYXNhbiBWaWRlbzwvaDI+DQo8aDM+UmV2b2x1c2kgQmF5ZXMnIFRoZW9yZW0gZGFsYW0gUHJvYmFiaWxpdGFzPC9oMz4NCjxwPkJheWVzJyBUaGVvcmVtIGFkYWxhaCA8c3BhbiBjbGFzcz0idG9vbHRpcC1lbGVtZW50Ij5hbGF0IG1hdGVtYXRpa2EgcG93ZXJmdWw8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5UZW9yZW1hIHlhbmcgbWVtdW5na2lua2FuIGtpdGEgbWVtcGVyYmFydWkga2V5YWtpbmFuIGJlcmRhc2Fya2FuIGV2aWRlbmNlIGJhcnU8L3NwYW4+PC9zcGFuPiB5YW5nIG1lbXVuZ2tpbmthbiBraXRhIG1lbXBlcmJhcnVpIHByb2JhYmlsaXRhcyBzdWF0dSBoaXBvdGVzaXMga2V0aWthIGV2aWRlbmNlIGJhcnUgdGVyc2VkaWEuPC9wPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImJheWVzLWJveCI+DQo8aDI+IEJheWVzJyBUaGVvcmVtIC0gVGhlIEZ1bmRhbWVudGFsIEZvcm11bGE8L2gyPg0KPGRpdiBjbGFzcz0ibWF0aC1mb3JtdWxhIj4NCiQkUChBfEIpID0gXGZyYWN7UChCfEEpIFxjZG90IFAoQSl9e1AoQil9JCQNCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiPg0KPGRpdiBjbGFzcz0iZ3JpZC1pdGVtIHRvb2x0aXAtZWxlbWVudCI+DQo8aDQ+IFBvc3RlcmlvcjxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPlByb2JhYmlsaXRhcyB5YW5nIGRpcGVyYmFydWkgc2V0ZWxhaCBtZW1wZXJ0aW1iYW5na2FuIGV2aWRlbmNlIGJhcnU8L3NwYW4+PC9oND4NCjxwPiRQKEF8QikkPC9wPg0KPHA+UHJvYmFiaWxpdGFzIHlhbmcgZGlwZXJiYXJ1aTwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZ3JpZC1pdGVtIHRvb2x0aXAtZWxlbWVudCI+DQo8aDQ+IExpa2VsaWhvb2Q8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5Qcm9iYWJpbGl0YXMgbWVuZ2FtYXRpIGV2aWRlbmNlIEIgamlrYSBoaXBvdGVzaXMgQSBiZW5hcjwvc3Bhbj48L2g0Pg0KPHA+JFAoQnxBKSQ8L3A+DQo8cD5Qcm9iYWJpbGl0YXMgZXZpZGVuY2U8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImdyaWQtaXRlbSB0b29sdGlwLWVsZW1lbnQiPg0KPGg0PiBQcmlvcjxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPlByb2JhYmlsaXRhcyBhd2FsIHNlYmVsdW0gZXZpZGVuY2UgYmFydSBkaXBlcmhpdHVuZ2thbjwvc3Bhbj48L2g0Pg0KPHA+JFAoQSkkPC9wPg0KPHA+UHJvYmFiaWxpdGFzIGF3YWw8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImdyaWQtaXRlbSB0b29sdGlwLWVsZW1lbnQiPg0KPGg0PiBFdmlkZW5jZTxzcGFuIGNsYXNzPSJ0b29sdGlwLWNvbnRlbnQiPlByb2JhYmlsaXRhcyB0b3RhbCBldmlkZW5jZSBCIChub3JtYWxpemluZyBjb25zdGFudCk8L3NwYW4+PC9oND4NCjxwPiRQKEIpJDwvcD4NCjxwPlByb2JhYmlsaXRhcyBtYXJnaW5hbDwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBJbnRlcnByZXRhc2kgSW50dWl0aWYgQmF5ZXMnIFRoZW9yZW08L2gyPg0KPGgzPlByb3NlcyBQZW1iYXJ1YW4gS2V5YWtpbmFuIChCZWxpZWYgVXBkYXRlKTwvaDM+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+QW5hbG9nOiBEZXRlY3RpdmUgSW52ZXN0aWdhdGlvbjwvaDQ+DQo8cD5CYXlhbmdrYW4gQW5kYSBhZGFsYWggZGV0ZWt0aWYgeWFuZyBtZW55ZWxpZGlraSBzdWF0dSBrYXN1czo8L3A+DQo8dWw+DQo8bGk+PHN0cm9uZz5Qcmlvcjo8L3N0cm9uZz4gS2VjdXJpZ2FhbiBhd2FsIHRlcmhhZGFwIHRlcnNhbmdrYSAoYmVyZGFzYXJrYW4gcmVrYW0gamVqYWspPC9saT4NCjxsaT48c3Ryb25nPkxpa2VsaWhvb2Q6PC9zdHJvbmc+IFNlYmVyYXBhIG11bmdraW4gZXZpZGVuY2UgZGl0ZW11a2FuIGppa2EgdGVyc2FuZ2thIGJlcnNhbGFoPC9saT4NCjxsaT48c3Ryb25nPkV2aWRlbmNlOjwvc3Ryb25nPiBCdWt0aS1idWt0aSB5YW5nIGRpdGVtdWthbiBkaSBUS1A8L2xpPg0KPGxpPjxzdHJvbmc+UG9zdGVyaW9yOjwvc3Ryb25nPiBLZWN1cmlnYWFuIHlhbmcgZGlwZXJiYXJ1aSBzZXRlbGFoIG1lbmdhbmFsaXNpcyBldmlkZW5jZTwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBQcm9zZXMgUGVtYmFydWFuIEtleWFraW5hbiBCYXllczwvaDI+DQo8dGFibGUgY2xhc3M9InRhYmxlLWN1c3RvbSI+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+U3RlcDwvdGg+DQo8dGg+RGVzY3JpcHRpb248L3RoPg0KPHRoPlZhbHVlPC90aD4NCjx0aD5FeGFtcGxlPC90aD4NCjwvdHI+DQo8L3RoZWFkPg0KPHRib2R5Pg0KPHRyPg0KPHRkPlByaW9yIEJlbGllZjwvdGQ+DQo8dGQ+S2V5YWtpbmFuIGF3YWwgc2ViZWx1bSBldmlkZW5jZTwvdGQ+DQo8dGQ+UChIKTwvdGQ+DQo8dGQ+UHJldmFsZW5zaSBwZW55YWtpdCAxJTwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPk5ldyBFdmlkZW5jZTwvdGQ+DQo8dGQ+RGF0YSBhdGF1IG9ic2VydmFzaSBiYXJ1PC90ZD4NCjx0ZD5EYXRhPC90ZD4NCjx0ZD5UZXN0IHBvc2l0aWY8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5MaWtlbGlob29kPC90ZD4NCjx0ZD5Qcm9iIGV2aWRlbmNlIGRpYmVyaWthbiBoaXBvdGVzaXM8L3RkPg0KPHRkPlAoRXxIKTwvdGQ+DQo8dGQ+OTUlIHNlbnNpdGl2aXRhcyB0ZXN0PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+UG9zdGVyaW9yIEJlbGllZjwvdGQ+DQo8dGQ+S2V5YWtpbmFuIHlhbmcgZGlwZXJiYXJ1aTwvdGQ+DQo8dGQ+UChIfEUpPC90ZD4NCjx0ZD44LjclIHByb2Igc2FraXQ8L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gRXh0ZW5kZWQgQmF5ZXMnIFRoZW9yZW08L2gyPg0KPGgzPkJheWVzJyBUaGVvcmVtIGRlbmdhbiBNdWx0aXBsZSBIeXBvdGhlc2VzPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxkaXYgY2xhc3M9Im1hdGgtZm9ybXVsYSI+DQokJFAoQV9pfEIpID0gXGZyYWN7UChCfEFfaSkgXGNkb3QgUChBX2kpfXtcc3VtX3tqPTF9Xm4gUChCfEFfaikgXGNkb3QgUChBX2opfSQkDQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PkNvbnRvaDogVGhyZWUgTWFjaGluZSBGYWN0b3J5PC9oND4NCjxwPjxzdHJvbmc+RGF0YTo8L3N0cm9uZz48L3A+DQo8dWw+DQo8bGk+TWFjaGluZSAxOiA1MCUgcHJvZHVjdGlvbiwgMiUgZGVmZWN0IHJhdGU8L2xpPg0KPGxpPk1hY2hpbmUgMjogMzAlIHByb2R1Y3Rpb24sIDMlIGRlZmVjdCByYXRlPC9saT4NCjxsaT5NYWNoaW5lIDM6IDIwJSBwcm9kdWN0aW9uLCAxJSBkZWZlY3QgcmF0ZTwvbGk+DQo8L3VsPg0KPHA+PHN0cm9uZz5QZXJ0YW55YWFuOjwvc3Ryb25nPiBKaWthIGRpdGVtdWthbiBwcm9kdWsgZGVmZWN0LCBiZXJhcGEgcHJvYmFiaWxpdGFzIGJlcmFzYWwgZGFyaSBNYWNoaW5lIDI/PC9wPg0KPHA+PHN0cm9uZz5Tb2x1c2k6PC9zdHJvbmc+PC9wPg0KPHA+JFAoTTJ8RGVmZWN0KSA9IFxmcmFjezAuMDMgXHRpbWVzIDAuMzB9ezAuMDIgXHRpbWVzIDAuNTAgKyAwLjAzIFx0aW1lcyAwLjMwICsgMC4wMSBcdGltZXMgMC4yMH0gPSBcZnJhY3swLjAwOX17MC4wMjd9IOKJiCAwLjMzMyQ8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCI+DQo8aDI+IEFwbGlrYXNpIEtsYXNpazogTWVkaWNhbCBEaWFnbm9zaXM8L2gyPg0KPGgzPk1lZGljYWwgVGVzdGluZyBQYXJhZG94PC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5TY2VuYXJpbzogVGVzdCBQZW55YWtpdCBMYW5na2E8L2g0Pg0KPHA+PHN0cm9uZz5EYXRhOjwvc3Ryb25nPjwvcD4NCjx1bD4NCjxsaT5QcmV2YWxlbnNpIHBlbnlha2l0OiAxJSBwb3B1bGFzaTwvbGk+DQo8bGk+U2Vuc2l0aXZpdGFzIHRlc3Q6IDk5JSAoUChUZXN0K3xTYWtpdCkpPC9saT4NCjxsaT5TcGVzaWZpc2l0YXMgdGVzdDogOTUlIChQKFRlc3QtfFNlaGF0KSk8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+UGVydGFueWFhbjo8L3N0cm9uZz4gSmlrYSBzZXNlb3JhbmcgdGVzdCBwb3NpdGlmLCBiZXJhcGEgcHJvYmFiaWxpdGFzIGJlbmFyLWJlbmFyIHNha2l0PzwvcD4NCjxwPjxzdHJvbmc+UGVyaGl0dW5nYW4gQmF5ZXM6PC9zdHJvbmc+PC9wPg0KPHA+JFAoU2FraXR8VGVzdCspID0gXGZyYWN7MC45OSBcdGltZXMgMC4wMX17MC45OSBcdGltZXMgMC4wMSArIDAuMDUgXHRpbWVzIDAuOTl9ID0gXGZyYWN7MC4wMDk5fXswLjAwOTkgKyAwLjA0OTV9ID0gXGZyYWN7MC4wMDk5fXswLjA1OTR9IOKJiCAwLjE2NjckPC9wPg0KPHA+PHN0cm9uZz5LZXNpbXB1bGFuIE1lbmFyaWs6PC9zdHJvbmc+IE1lc2tpcHVuIHRlc3QgYWt1cmF0IDk5JSwgaGFueWEgMTYuNjclIHRlc3QgcG9zaXRpZiB5YW5nIGJlbmFyLWJlbmFyIHNha2l0ITwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciI+DQo8aDM+IEJheWVzJyBUaGVvcmVtIGRhbGFtIE1lZGljYWwgVGVzdGluZzwvaDM+DQo8cD5QZW5nYXJ1aCBwcmV2YWxlbnNpIHRlcmhhZGFwIGludGVycHJldGFzaSB0ZXN0IHBvc2l0aWY6PC9wPg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjhmOWZhOyBib3JkZXItcmFkaXVzOiA4cHg7Ij4NCjxwPjxlbT5WaXN1YWxpc2FzaTogSGlnaCBQcmV2YWxlbmNlICgxMCUpIOKGkiA2OC43JSB8IE1lZGl1bSBQcmV2YWxlbmNlICgxJSkg4oaSIDE2LjclIHwgTG93IFByZXZhbGVuY2UgKDAuMSUpIOKGkiAxLjklPC9lbT48L3A+DQo8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAyMHB4OyBtYXJnaW4tdG9wOiAyMHB4OyI+DQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZhZmNjOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItcmFkaXVzOiA4cHg7IHdpZHRoOiAxMDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+DQo8c3Ryb25nPjY4LjclPC9zdHJvbmc+PGJyPkhpZ2ggUHJldg0KPC9kaXY+DQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZjOGRkOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItcmFkaXVzOiA4cHg7IHdpZHRoOiAxMDBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+DQo8c3Ryb25nPjE2LjclPC9zdHJvbmc+PGJyPk1lZGl1bSBQcmV2DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6ICNmZjZiOTU7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgd2lkdGg6IDEwMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxzdHJvbmc+MS45JTwvc3Ryb25nPjxicj5Mb3cgUHJldg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gTmFpdmUgQmF5ZXMgQ2xhc3NpZmllcjwvaDI+DQo8aDM+QXBsaWthc2kgQmF5ZXMgZGFsYW0gTWFjaGluZSBMZWFybmluZzwvaDM+DQo8ZGl2IGNsYXNzPSJmb3JtdWxhLWJveCI+DQo8ZGl2IGNsYXNzPSJtYXRoLWZvcm11bGEiPg0KJCRQKENsYXNzfEZlYXR1cmVzKSDiiJ0gUChDbGFzcykgXGNkb3QgXHByb2Rfe2k9MX1ebiBQKEZlYXR1cmVfaXxDbGFzcykkJA0KPC9kaXY+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IFNwYW0gRW1haWwgQ2xhc3NpZmljYXRpb248L2g0Pg0KPHA+PHN0cm9uZz5GZWF0dXJlczo8L3N0cm9uZz4gS2F0YSAiZnJlZSIsICJtb25leSIsICJ1cmdlbnQiPC9wPg0KPHA+PHN0cm9uZz5UcmFpbmluZyBEYXRhOjwvc3Ryb25nPjwvcD4NCjx1bD4NCjxsaT5QKFNwYW0pID0gMC4zPC9saT4NCjxsaT5QKCJmcmVlInxTcGFtKSA9IDAuOCwgUCgiZnJlZSJ8Tm90IFNwYW0pID0gMC4xPC9saT4NCjxsaT5QKCJtb25leSJ8U3BhbSkgPSAwLjYsIFAoIm1vbmV5InxOb3QgU3BhbSkgPSAwLjA1PC9saT4NCjxsaT5QKCJ1cmdlbnQifFNwYW0pID0gMC40LCBQKCJ1cmdlbnQifE5vdCBTcGFtKSA9IDAuMDI8L2xpPg0KPC91bD4NCjxwPjxzdHJvbmc+Q2xhc3NpZmljYXRpb246PC9zdHJvbmc+PC9wPg0KPHA+JFAoU3BhbXwiZnJlZSIsIm1vbmV5Iikg4oidIDAuMyDDlyAwLjggw5cgMC42ID0gMC4xNDQkPC9wPg0KPHA+JFAoTm90IFNwYW18ImZyZWUiLCJtb25leSIpIOKInSAwLjcgw5cgMC4xIMOXIDAuMDUgPSAwLjAwMzUkPC9wPg0KPHA+PHN0cm9uZz5LZXNpbXB1bGFuOjwvc3Ryb25nPiBFbWFpbCBkaWtsYXNpZmlrYXNpa2FuIHNlYmFnYWkgU1BBTTwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gQmF5ZXNpYW4gdnMgRnJlcXVlbnRpc3QgSW50ZXJwcmV0YXRpb248L2gyPg0KPGgzPlBlcmJlZGFhbiBQYXJhZGlnbWE8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PkZyZXF1ZW50aXN0IEFwcHJvYWNoPC9oND4NCjx1bD4NCjxsaT5Qcm9iYWJpbGl0YXMgc2ViYWdhaSBmcmVrdWVuc2kgcmVsYXRpZiBqYW5na2EgcGFuamFuZzwvbGk+DQo8bGk+UGFyYW1ldGVyIHRldGFwLCBkYXRhIHJhbmRvbTwvbGk+DQo8bGk+Q29uZmlkZW5jZSBpbnRlcnZhbHM8L2xpPg0KPGxpPlAtdmFsdWUgaHlwb3RoZXNpcyB0ZXN0aW5nPC9saT4NCjwvdWw+DQo8aDQ+QmF5ZXNpYW4gQXBwcm9hY2g8L2g0Pg0KPHVsPg0KPGxpPlByb2JhYmlsaXRhcyBzZWJhZ2FpIGRlcmFqYXQga2V5YWtpbmFuPC9saT4NCjxsaT5QYXJhbWV0ZXIgcmFuZG9tLCBkYXRhIGZpeGVkPC9saT4NCjxsaT5DcmVkaWJsZSBpbnRlcnZhbHM8L2xpPg0KPGxpPlByaW9yIGFuZCBwb3N0ZXJpb3IgZGlzdHJpYnV0aW9uczwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBQZXJiYW5kaW5nYW4gUGFyYWRpZ21hIEZyZXF1ZW50aXN0IHZzIEJheWVzaWFuPC9oMj4NCjx0YWJsZSBjbGFzcz0idGFibGUtY3VzdG9tIj4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Bc3BlY3Q8L3RoPg0KPHRoPkZyZXF1ZW50aXN0PC90aD4NCjx0aD5CYXllc2lhbjwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0ZD5EZWZpbml0aW9uIG9mIFByb2JhYmlsaXR5PC90ZD4NCjx0ZD5Mb25nLXJ1biBmcmVxdWVuY3k8L3RkPg0KPHRkPkRlZ3JlZSBvZiBiZWxpZWY8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5QYXJhbWV0ZXJzPC90ZD4NCjx0ZD5GaXhlZCB1bmtub3duIGNvbnN0YW50czwvdGQ+DQo8dGQ+UmFuZG9tIHZhcmlhYmxlczwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkRhdGE8L3RkPg0KPHRkPlJhbmRvbSBzYW1wbGU8L3RkPg0KPHRkPkZpeGVkIG9ic2VydmVkPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+VW5jZXJ0YWludHk8L3RkPg0KPHRkPkNvbmZpZGVuY2UgSW50ZXJ2YWxzPC90ZD4NCjx0ZD5DcmVkaWJsZSBJbnRlcnZhbHM8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5NYWluIFRvb2w8L3RkPg0KPHRkPlAtdmFsdWVzPC90ZD4NCjx0ZD5Qb3N0ZXJpb3IgRGlzdHJpYnV0aW9uczwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBCYXllc2lhbiBJbmZlcmVuY2UgaW4gUHJhY3RpY2U8L2gyPg0KPGgzPkNvbmp1Z2F0ZSBQcmlvcnM8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PkJldGEtQmlub21pYWwgQ29uanVnYWN5PC9oND4NCjxwPjxzdHJvbmc+U2NlbmFyaW86PC9zdHJvbmc+IE1lbGVtcGFyIGtvaW4geWFuZyBtdW5na2luIGJpYXM8L3A+DQo8cD48c3Ryb25nPlByaW9yOjwvc3Ryb25nPiBCZXRhKM6xPTIsIM6yPTIpIC0ga2V5YWtpbmFuIGF3YWwga29pbiBmYWlyPC9wPg0KPHA+PHN0cm9uZz5EYXRhOjwvc3Ryb25nPiA4IGhlYWQgZGFyaSAxMCBsZW1wYXJhbjwvcD4NCjxwPjxzdHJvbmc+UG9zdGVyaW9yOjwvc3Ryb25nPiBCZXRhKM6xK3N1Y2Nlc3MsIM6yK2ZhaWx1cmVzKSA9IEJldGEoMTAsIDQpPC9wPg0KPHA+PHN0cm9uZz5JbnRlcnByZXRhc2k6PC9zdHJvbmc+IFBvc3RlcmlvciBtZWFuID0gMTAvKDEwKzQpIOKJiCAwLjcxNDwvcD4NCjxwPktleWFraW5hbiBraXRhIGJlcmdlc2VyIGRhcmkgMC41IChmYWlyKSBrZSAwLjcxNCAoYmlhc2VkIHRvd2FyZCBoZWFkKTwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciI+DQo8aDM+IEJheWVzaWFuIFVwZGF0aW5nIFByb2Nlc3M8L2gzPg0KPHA+UGVtYmFydWFuIGtleWFraW5hbiB0ZW50YW5nIHByb2JhYmlsaXRhcyBoZWFkIGtvaW46PC9wPg0KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjhmOWZhOyBib3JkZXItcmFkaXVzOiA4cHg7Ij4NCjxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBnYXA6IDE1cHg7IG1hcmdpbi10b3A6IDIwcHg7IGZsZXgtd3JhcDogd3JhcDsiPg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmYWZjYzsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxzdHJvbmc+UHJpb3I8L3N0cm9uZz48YnI+NTAuMCUNCjwvZGl2Pg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmYzhkZDsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxzdHJvbmc+RGF0YTogM0gsMFQ8L3N0cm9uZz48YnI+NzEuNCUNCjwvZGl2Pg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmNmI5NTsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxzdHJvbmc+RGF0YTogMkgsMVQ8L3N0cm9uZz48YnI+NzAuMCUNCjwvZGl2Pg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmODVhMTsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxzdHJvbmc+RGF0YTogM0gsMlQ8L3N0cm9uZz48YnI+NjYuNyUNCjwvZGl2Pg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI2EyZDJmZjsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxzdHJvbmc+UG9zdGVyaW9yPC9zdHJvbmc+PGJyPjY2LjclDQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBSZWFsLVdvcmxkIEFwcGxpY2F0aW9ucyBvZiBCYXllcycgVGhlb3JlbTwvaDI+DQo8aDM+MS4gRmluYW5jZSBhbmQgUmlzayBNYW5hZ2VtZW50PC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+Q3JlZGl0IFNjb3Jpbmc6PC9zdHJvbmc+IE1lbXBlcmJhcnVpIHByb2JhYmlsaXRhcyBkZWZhdWx0IGJlcmRhc2Fya2FuIHBlcmlsYWt1IHBlbWluamFtPC9wPg0KPHA+JFAoRGVmYXVsdHxQYXltZW50IEhpc3RvcnkpID0gXGZyYWN7UChQYXltZW50IEhpc3Rvcnl8RGVmYXVsdCkgXGNkb3QgUChEZWZhdWx0KX17UChQYXltZW50IEhpc3RvcnkpfSQ8L3A+DQo8L2Rpdj4NCjxoMz4yLiBBcnRpZmljaWFsIEludGVsbGlnZW5jZTwvaDM+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8cD48c3Ryb25nPlJlY29tbWVuZGF0aW9uIFN5c3RlbXM6PC9zdHJvbmc+IE1lbXBlcmJhcnVpIHByZWZlcmVuc2kgdXNlciBiZXJkYXNhcmthbiBpbnRlcmFrc2k8L3A+DQo8cD4kUChMaWtlfEJlaGF2aW9yKSA9IFxmcmFje1AoQmVoYXZpb3J8TGlrZSkgXGNkb3QgUChMaWtlKX17UChCZWhhdmlvcil9JDwvcD4NCjwvZGl2Pg0KPGgzPjMuIFNjaWVudGlmaWMgUmVzZWFyY2g8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPHA+PHN0cm9uZz5EcnVnIEVmZmljYWN5Ojwvc3Ryb25nPiBNZW1wZXJiYXJ1aSBrZXlha2luYW4gdGVudGFuZyBlZmVrdGl2aXRhcyBvYmF0IGJlcmRhc2Fya2FuIHRyaWFsIHJlc3VsdHM8L3A+DQo8cD4kUChFZmZlY3RpdmV8VHJpYWwgRGF0YSkgPSBcZnJhY3tQKFRyaWFsIERhdGF8RWZmZWN0aXZlKSBcY2RvdCBQKEVmZmVjdGl2ZSl9e1AoVHJpYWwgRGF0YSl9JDwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gQ29tbW9uIE1pc2NvbmNlcHRpb25zIGFib3V0IEJheWVzJyBUaGVvcmVtPC9oMj4NCjxoMz4xLiBCYXNlIFJhdGUgRmFsbGFjeTwvaDM+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8cD48c3Ryb25nPktlc2FsYWhhbjo8L3N0cm9uZz4gTWVuZ2FiYWlrYW4gcHJldmFsZW5zaSAoYmFzZSByYXRlKSBkYW4gaGFueWEgZm9rdXMgcGFkYSBsaWtlbGlob29kPC9wPg0KPHA+PHN0cm9uZz5Db250b2g6PC9zdHJvbmc+IE1lZGljYWwgdGVzdGluZyBwYXJhZG94IC0gb3Jhbmcgc2VyaW5nIG92ZXJlc3RpbWF0ZSBQKHNpY2t8cG9zaXRpdmUpPC9wPg0KPC9kaXY+DQo8aDM+Mi4gQ29uZnVzaW9uIG9mIEludmVyc2U8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPHA+PHN0cm9uZz5LZXNhbGFoYW46PC9zdHJvbmc+IE1lbmdhbmdnYXAgUChBfEIpIHNhbWEgZGVuZ2FuIFAoQnxBKTwvcD4NCjxwPjxzdHJvbmc+Q29udG9oOjwvc3Ryb25nPiBNZW5naXJhICJrZWJhbnlha2FuIHRlcm9yaXMgTXVzbGltIiBiZXJhcnRpICJrZWJhbnlha2FuIE11c2xpbSB0ZXJvcmlzIjwvcD4NCjwvZGl2Pg0KPGgzPjMuIFByaW9yIFNlbnNpdGl2aXR5PC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+S2VzYWxhaGFuOjwvc3Ryb25nPiBUaWRhayBtZW55YWRhcmkgYmFod2EgaGFzaWwgQmF5ZXNpYW4gc2FuZ2F0IGJlcmdhbnR1bmcgcGFkYSBwcmlvciB5YW5nIGRpcGlsaWg8L3A+DQo8cD48c3Ryb25nPlNvbHVzaTo8L3N0cm9uZz4gR3VuYWthbiB1bmluZm9ybWF0aXZlIHByaW9ycyBhdGF1IHNlbnNpdGl2aXR5IGFuYWx5c2lzPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCg0KIyMgS2VzaW1wdWxhbg0KDQo8ZGl2IGNsYXNzPSJjb25jbHVzaW9uLWJveCI+DQo8aDI+IEtlc2ltcHVsYW4gVXRhbWEgVmlkZW8gNCAtIEJheWVzJyBUaGVvcmVtPC9oMj4NCiAgICAgICAgICAgIA0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1ncmlkIj4NCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24taXRlbSI+DQo8aDQ+IEZ1bmRhbWVudGFsIENvbmNlcHRzPC9oND4NCjx1bD4NCjxsaT5CYXllcycgVGhlb3JlbSBtZW11bmdraW5rYW4gcGVtYmFydWFuIGtleWFraW5hbiBiZXJkYXNhcmthbiBldmlkZW5jZSBiYXJ1PC9saT4NCjxsaT5Gb3JtdWxhIGRhc2FyOiAkUChBfEIpID0gXGZyYWN7UChCfEEpUChBKX17UChCKX0kPC9saT4NCjxsaT5Lb21wb25lbjogUHJpb3IsIExpa2VsaWhvb2QsIEV2aWRlbmNlLCBQb3N0ZXJpb3I8L2xpPg0KPC91bD4NCjwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1pdGVtIj4NCjxoND4gQWR2YW5jZWQgQXBwbGljYXRpb25zPC9oND4NCjx1bD4NCjxsaT5NdWx0aXBsZSBoeXBvdGhlc2VzIGRlbmdhbiBleHRlbmRlZCBCYXllcyBmb3JtdWxhPC9saT4NCjxsaT5Db25qdWdhdGUgcHJpb3JzIHVudHVrIGFuYWx5dGljYWwgY29udmVuaWVuY2U8L2xpPg0KPGxpPkJheWVzaWFuIHVwZGF0aW5nIHVudHVrIHNlcXVlbnRpYWwgbGVhcm5pbmc8L2xpPg0KPC91bD4NCjwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KPGRpdiBjbGFzcz0iY29uY2x1c2lvbi1pdGVtIj4NCjxoND4gUHJhY3RpY2FsIEluc2lnaHRzPC9oND4NCjx1bD4NCjxsaT5NZWRpY2FsIGRpYWdub3NpczogbWVtYWhhbWkgYmFzZSByYXRlIGZhbGxhY3k8L2xpPg0KPGxpPk1hY2hpbmUgbGVhcm5pbmc6IE5haXZlIEJheWVzIGNsYXNzaWZpZXI8L2xpPg0KPGxpPlJpc2sgbWFuYWdlbWVudDogZHluYW1pYyBwcm9iYWJpbGl0eSB1cGRhdGluZzwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCiAgICAgICAgICAgIA0KPGRpdiBjbGFzcz0ia2V5LXRha2Vhd2F5cy1ib3giPg0KPGg0PiBLZXkgVGFrZWF3YXlzOjwvaDQ+DQo8dWw+DQo8bGk+QmF5ZXMnIFRoZW9yZW0gYWRhbGFoIGZyYW1ld29yayBwb3dlcmZ1bCB1bnR1ayByZWFzb25pbmcgdW5kZXIgdW5jZXJ0YWludHk8L2xpPg0KPGxpPk1lbWFoYW1pIHBlcmJlZGFhbiBCYXllc2lhbiB2cyBGcmVxdWVudGlzdCBwYXJhZGlnbSBwZW50aW5nIHVudHVrIGFwbGlrYXNpIHlhbmcgdGVwYXQ8L2xpPg0KPGxpPlJlYWwtd29ybGQgYXBwbGljYXRpb25zIG1lbmNha3VwIGJpZGFuZyBtZWRpY2luZSwgZmluYW5jZSwgQUksIGRhbiBzY2llbnRpZmljIHJlc2VhcmNoPC9saT4NCjxsaT5LZXNhZGFyYW4gdGVyaGFkYXAgY29tbW9uIG1pc2NvbmNlcHRpb25zIG1lbmluZ2thdGthbiBpbnRlcnByZXRhc2kgeWFuZyBha3VyYXQ8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPC9kaXY+DQoNCiMjIFJlZmVyZW5zaSBidWt1IA0KDQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtYm94Ij4NCjxoMj4gUmVmZXJlbnNpIEJ1a3UgVGVya2FpdCBCYXllcycgVGhlb3JlbTwvaDI+DQogICAgICAgICAgICANCjxkaXYgY2xhc3M9InJlZmVyZW5jZXMtZ3JpZCI+DQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtaXRlbSI+DQo8aDQ+IEZ1bmRhbWVudGFsIEJheWVzaWFuIFN0YXRpc3RpY3M8L2g0Pg0KPHVsPg0KPGxpPjxzdHJvbmc+IkJheWVzaWFuIERhdGEgQW5hbHlzaXMiPC9zdHJvbmc+IC0gQW5kcmV3IEdlbG1hbiBldCBhbC48L2xpPg0KPGxpPjxzdHJvbmc+IlByb2JhYmlsaXR5IFRoZW9yeTogVGhlIExvZ2ljIG9mIFNjaWVuY2UiPC9zdHJvbmc+IC0gRS5ULiBKYXluZXM8L2xpPg0KPGxpPjxzdHJvbmc+IlN0YXRpc3RpY2FsIFJldGhpbmtpbmciPC9zdHJvbmc+IC0gUmljaGFyZCBNY0VscmVhdGg8L2xpPg0KPGxpPjxzdHJvbmc+IkRvaW5nIEJheWVzaWFuIERhdGEgQW5hbHlzaXMiPC9zdHJvbmc+IC0gSm9obiBLLiBLcnVzY2hrZTwvbGk+DQo8L3VsPg0KPC9kaXY+DQogICAgICAgICAgICAgICAgDQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtaXRlbSI+DQo8aDQ+IEFwcGxpZWQgQmF5ZXNpYW4gTWV0aG9kczwvaDQ+DQo8dWw+DQo8bGk+PHN0cm9uZz4iQmF5ZXNpYW4gTWV0aG9kcyBmb3IgSGFja2VycyI8L3N0cm9uZz4gLSBDYW1lcm9uIERhdmlkc29uLVBpbG9uPC9saT4NCjxsaT48c3Ryb25nPiJCYXllc2lhbiBTdGF0aXN0aWNzIGZvciBCZWdpbm5lcnMiPC9zdHJvbmc+IC0gUnV0aCBNLiBNaWNrZXk8L2xpPg0KPGxpPjxzdHJvbmc+IkFwcGxpZWQgQmF5ZXNpYW4gTW9kZWxpbmciPC9zdHJvbmc+IC0gUGV0ZXIgQ29uZ2RvbjwvbGk+DQo8bGk+PHN0cm9uZz4iQmF5ZXNpYW4gTmV0d29ya3MiPC9zdHJvbmc+IC0gUmljaGFyZCBFLiBOZWFwb2xpdGFuPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQoNCg0KLS0tDQp0aXRsZTogIlByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnMgLSBWaWRlbyA1IEFuYWx5c2lzIg0KYXV0aG9yOiAiQWRpbmRhIEFkZWxpYSBGdXRyaSINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KLS0tDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQovKiBDU1MgU3R5bGluZyB1bnR1ayBWaWRlbyAyIC0gU2VzdWFpIFZpZGVvIDEgKi8NCmJvZHkgew0KICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7DQogIGxpbmUtaGVpZ2h0OiAxLjY7DQogIGNvbG9yOiAjNWE0YTRhOw0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZmNWY1IDAlLCAjZmZlZWYwIDEwMCUpOw0KICBtaW4taGVpZ2h0OiAxMDB2aDsNCiAgbWFyZ2luOiAwOw0KICBwYWRkaW5nOiAyMHB4Ow0KfQ0KDQpodG1sIHsNCiAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7DQp9DQoNCjo6c2VsZWN0aW9uIHsNCiAgYmFja2dyb3VuZDogI2ZmYWZjYzsNCiAgY29sb3I6ICM1YTRhNGE7DQp9DQoNCmEgew0KICBjb2xvcjogI2ZmNmI5NTsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQphOmhvdmVyIHsNCiAgY29sb3I6ICNmZjRkN2M7DQogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KfQ0KDQovKiBDb250YWluZXIgdXRhbWEgKi8NCi5jb250YWluZXIgew0KICBtYXgtd2lkdGg6IDEyMDBweDsNCiAgbWFyZ2luOiAwIGF1dG87DQp9DQoNCi8qIEN1c3RvbSBjbGFzc2VzIGZvciBjb250ZW50IGJveGVzICovDQouY29udGVudC1ib3ggew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZhZmNjIDAlLCAjZmY2Yjk1IDEwMCUpOw0KICBjb2xvcjogIzNBNEY3QTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjEpOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KfQ0KDQouY29udGVudC1ib3g6aG92ZXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7DQogIGJveC1zaGFkb3c6IDAgMTJweCAzMHB4IHJnYmEoMCwwLDAsMC4xNSk7DQp9DQoNCi5kZWZpbml0aW9uLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmY2Yjk1Ow0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi5mb3JtdWxhLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmY2Yjk1Ow0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi5leGFtcGxlLWJveCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG1hcmdpbjogMTVweCAwOw0KICBib3JkZXI6IDFweCBzb2xpZCAjZmZhZmNjOw0KfQ0KDQoucmVmZXJlbmNlLWJveCB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQouY29uY2x1c2lvbi1ib3ggew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZhZmNjIDAlLCAjZmY2Yjk1IDEwMCUpOw0KICBjb2xvcjogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCn0NCg0KLm5leHQtdG9waWMtYm94IHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyOiAycHggZGFzaGVkICNmZmFmY2M7DQp9DQoNCi5oZWFkZXItbWFpbiB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgcGFkZGluZzogNDBweDsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCn0NCg0KLnZpZGVvLWNhcmQgew0KICBiYWNrZ3JvdW5kOiAjZmZhZmNjOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQovKiBUYWJsZSBzdHlsaW5nICovDQoudGFibGUtY3VzdG9tIHsNCiAgd2lkdGg6IDEwMCU7DQogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQogIG1hcmdpbjogMjBweCAwOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi50YWJsZS1jdXN0b20gdGggew0KICBiYWNrZ3JvdW5kOiAjZmY2Yjk1Ow0KICBjb2xvcjogICNmZmFmY2M7DQogIHBhZGRpbmc6IDE1cHg7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi50YWJsZS1jdXN0b20gdGQgew0KICBwYWRkaW5nOiAxNXB4Ow0KICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZmZTRlYzsNCn0NCg0KLnRhYmxlLWN1c3RvbSB0cjpob3ZlciB0ZCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQp9DQoNCi8qIFRvb2x0aXAgU3R5bGVzICovDQoudG9vbHRpcC1lbGVtZW50IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgY29sb3I6ICNmZjZiOTU7DQogIGZvbnQtd2VpZ2h0OiA2MDA7DQogIGJvcmRlci1ib3R0b206IDJweCBkb3R0ZWQgI2ZmYWZjYzsNCn0NCg0KLnRvb2x0aXAtY29udGVudCB7DQogIHZpc2liaWxpdHk6IGhpZGRlbjsNCiAgd2lkdGg6IDMwMHB4Ow0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmY2Yjk1IDAlLCAjZmY0ZDdjIDEwMCUpOw0KICBjb2xvcjogd2hpdGU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgcGFkZGluZzogMTVweDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB6LWluZGV4OiAxMDAwOw0KICBib3R0b206IDEyNSU7DQogIGxlZnQ6IDUwJTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOw0KICBvcGFjaXR5OiAwOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4yKTsNCiAgZm9udC1zaXplOiAwLjllbTsNCiAgbGluZS1oZWlnaHQ6IDEuNDsNCn0NCg0KLnRvb2x0aXAtY29udGVudDo6YWZ0ZXIgew0KICBjb250ZW50OiAiIjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDEwMCU7DQogIGxlZnQ6IDUwJTsNCiAgbWFyZ2luLWxlZnQ6IC01cHg7DQogIGJvcmRlci13aWR0aDogNXB4Ow0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6ICNmZjZiOTUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7DQp9DQoNCi50b29sdGlwLWVsZW1lbnQ6aG92ZXIgLnRvb2x0aXAtY29udGVudCB7DQogIHZpc2liaWxpdHk6IHZpc2libGU7DQogIG9wYWNpdHk6IDE7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01cHgpOw0KfQ0KDQovKiBQbG90IGNvbnRhaW5lciBzdHlsaW5nICovDQoucGxvdC1jb250YWluZXIgew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZTRlYzsNCn0NCg0KLnBsb3QtaW5mbyB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDE1cHg7DQogIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgbWFyZ2luLXRvcDogMTVweDsNCiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjZmY2Yjk1Ow0KfQ0KDQovKiBHcmlkIExheW91dCAqLw0KLmNvbmNsdXNpb24tZ3JpZCB7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpOw0KICBnYXA6IDIwcHg7DQogIG1hcmdpbi10b3A6IDIwcHg7DQp9DQoNCi5jb25jbHVzaW9uLWl0ZW0gew0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zKTsNCn0NCg0KLyogQW5pbWF0aW9uICovDQpAa2V5ZnJhbWVzIGZhZGVJblVwIHsNCiAgZnJvbSB7DQogICAgb3BhY2l0eTogMDsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7DQogIH0NCiAgdG8gew0KICAgIG9wYWNpdHk6IDE7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOw0KICB9DQp9DQoNCi5hbmltYXRlLWZhZGVJbiB7DQogIGFuaW1hdGlvbjogZmFkZUluVXAgMC42cyBlYXNlLW91dDsNCn0NCg0KLyogTWF0aCBmb3JtdWxhIHN0eWxpbmcgKi8NCi5tYXRoLWZvcm11bGEgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGZvbnQtc2VtOw0KICBjb2xvcjogaXplOiAxLjQjZmY2Yjk1Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgbWFyZ2luOiAyMHB4IDA7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgYm9yZGVyOiAycHggc29saWQgI2ZmYWZjYzsNCn0NCmBgYA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KIyBTZXR1cCBjaHVuayAtIFZpZGVvIDIgLSBTZXN1YWkgVmlkZW8gMQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gRkFMU0UsDQogIHdhcm5pbmcgPSBGQUxTRSwNCiAgbWVzc2FnZSA9IEZBTFNFLA0KICBmaWcuYWxpZ24gPSAiY2VudGVyIiwNCiAgZmlnLndpZHRoID0gOSwgICAgIyBTZXN1YWkgVmlkZW8gMQ0KICBmaWcuaGVpZ2h0ID0gNSAgICAjIFNlc3VhaSBWaWRlbyAxDQopDQoNCiMgTG9hZCByZXF1aXJlZCBsaWJyYXJpZXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShzY2FsZXMpDQoNCiMgQ3VzdG9tIHRoZW1lIHVudHVrIGdncGxvdCAtIFNlc3VhaSBWaWRlbyAxDQpjdXN0b21fdGhlbWUgPC0gZnVuY3Rpb24oKSB7DQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNiwgY29sb3IgPSAiI2ZmYWZjYyIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxMSwgY29sb3IgPSAiIzdmOGM4ZCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDExLCBjb2xvciA9ICIjZmZhZmNjIiksDQogICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBjb2xvciA9ICIjZmZhZmNjIiksDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCBzaXplID0gMTApLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiI2VjZjBmMSIsIGxpbmV3aWR0aCA9IDAuMyksDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9IE5BKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9IE5BKQ0KICApDQp9DQpgYGANCg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJ2aWRlby1jYXJkIj4NCjxoMj5Qcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zIC0gVmlkZW8gNSBBbmFseXNpczwvaDI+DQo8cD48c3Ryb25nPlZpZGVvIFNvdXJjZTo8L3N0cm9uZz4gDQo8YSBocmVmPSJodHRwczovL3lvdXR1LmJlL25SdVFBdGFqSllrP3NpPW1RVG9MU1hVT1NHcmRxUzIiIA0KICAgdGFyZ2V0PSJfYmxhbmsiIA0KICAgY2xhc3M9InlvdXR1YmUtbGluayINCiAgIGRhdGEtdG9vbHRpcD0iS2xpayB1bnR1ayBtZW5vbnRvbiB2aWRlbyBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zIGRpIFlvdVR1YmUiPg0KICAgUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9ucyAtIFlvdVR1YmUNCjwvYT48L3A+ICAgICAgICAgIA0KPHA+PHN0cm9uZz5EdXJhdGlvbjo8L3N0cm9uZz4gMTg6MzAgbWludXRlcyB8IA0KPHN0cm9uZz5Db250ZW50IExldmVsOjwvc3Ryb25nPiBJbnRlcm1lZGlhdGU8L3A+DQo8L2Rpdj4NCg0KIyBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zICANCg0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPlJhbmdrdW1hbiBQZW5qZWxhc2FuIFZpZGVvPC9oMj4NCjxoMz5Lb25zZXAgRnVuZGFtZW50YWwgUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9uczwvaDM+DQo8cD5Qcm9iYWJpbGl0eSBEaXN0cmlidXRpb24gYWRhbGFoIDxzcGFuIGNsYXNzPSJ0b29sdGlwLWVsZW1lbnQiPmZ1bmdzaSBtYXRlbWF0aWthPHNwYW4gY2xhc3M9InRvb2x0aXAtY29udGVudCI+RnVuZ3NpIHlhbmcgbWVuamVsYXNrYW4gYmFnYWltYW5hIHByb2JhYmlsaXRhcyBkaWRpc3RyaWJ1c2lrYW4gYWNyb3NzIHBvc3NpYmxlIG91dGNvbWVzPC9zcGFuPjwvc3Bhbj4geWFuZyBtZW5qZWxhc2thbiBsaWtlbGlob29kIGRhcmkgYmVyYmFnYWkgcG9zc2libGUgb3V0Y29tZXMgZGFsYW0gc3VhdHUgZWtzcGVyaW1lbi48L3A+DQo8L2Rpdj4NCiAgICAgICAgDQo8ZGl2IGNsYXNzPSJkZWZpbml0aW9uLWJveCI+DQo8aDM+RGVmaW5pc2kgUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9uPC9oMz4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9uOjwvc3Ryb25nPiBGdW5nc2kgeWFuZyBtZW1iZXJpa2FuIHByb2JhYmlsaXRhcyB1bnR1ayBzZXRpYXAgcG9zc2libGUgb3V0Y29tZSBkYXJpIHZhcmlhYmVsIGFjYWsuPC9wPiAgIA0KPHA+PHN0cm9uZz5WYXJpYWJlbCBBY2FrIChSYW5kb20gVmFyaWFibGUpOjwvc3Ryb25nPiBWYXJpYWJlbCB5YW5nIG5pbGFpbnlhIGRpdGVudHVrYW4gb2xlaCBvdXRjb21lIGRhcmkgcHJvc2VzIGFjYWsuPC9wPg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPktsYXNpZmlrYXNpIFByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnM8L2gyPg0KPGgzPjEuIEJlcmRhc2Fya2FuIFRpcGUgVmFyaWFiZWw8L2gzPg0KICAgICAgICAgICAgDQo8ZGl2IGNsYXNzPSJkaXN0cmlidXRpb24tYm94Ij4NCjxoND5EaXNjcmV0ZSBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zPC9oND4NCjxwPlVudHVrIHZhcmlhYmVsIGFjYWsgZGlza3JpdCAoY291bnRhYmxlIG91dGNvbWVzKTwvcD4NCjx1bD4NCjxsaT5CZXJub3VsbGkgRGlzdHJpYnV0aW9uPC9saT4NCjxsaT5CaW5vbWlhbCBEaXN0cmlidXRpb248L2xpPg0KPGxpPlBvaXNzb24gRGlzdHJpYnV0aW9uPC9saT4NCjxsaT5HZW9tZXRyaWMgRGlzdHJpYnV0aW9uPC9saT4NCjwvdWw+DQo8L2Rpdj4NCiAgICAgICAgICAgIA0KPGRpdiBjbGFzcz0iZGlzdHJpYnV0aW9uLWJveCI+DQo8aDQ+Q29udGludW91cyBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zPC9oND4NCjxwPlVudHVrIHZhcmlhYmVsIGFjYWsga29udGludSAodW5jb3VudGFibGUgb3V0Y29tZXMpPC9wPg0KPHVsPg0KPGxpPk5vcm1hbCBEaXN0cmlidXRpb248L2xpPg0KPGxpPlVuaWZvcm0gRGlzdHJpYnV0aW9uPC9saT4NCjxsaT5FeHBvbmVudGlhbCBEaXN0cmlidXRpb248L2xpPg0KPGxpPkdhbW1hIERpc3RyaWJ1dGlvbjwvbGk+DQo8L3VsPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz5LbGFzaWZpa2FzaSBEaXN0cmlidXNpIFByb2JhYmlsaXRhczwvaDM+DQo8dGFibGU+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+VGlwZTwvdGg+DQo8dGg+RGlzdHJpYnVzaTwvdGg+DQo8dGg+UGFyYW1ldGVyPC90aD4NCjx0aD5TdXBwb3J0PC90aD4NCjx0aD5BcGxpa2FzaTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0ZD5EaXNjcmV0ZTwvdGQ+DQo8dGQ+Qmlub21pYWw8L3RkPg0KPHRkPm4sIHA8L3RkPg0KPHRkPjAsMSwyLC4uLixuPC90ZD4NCjx0ZD5TdWNjZXNzIGNvdW50czwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkRpc2NyZXRlPC90ZD4NCjx0ZD5Qb2lzc29uPC90ZD4NCjx0ZD7OuzwvdGQ+DQo8dGQ+MCwxLDIsLi4uPC90ZD4NCjx0ZD5FdmVudCBjb3VudHM8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5EaXNjcmV0ZTwvdGQ+DQo8dGQ+R2VvbWV0cmljPC90ZD4NCjx0ZD5wPC90ZD4NCjx0ZD4xLDIsMywuLi48L3RkPg0KPHRkPldhaXQgdGltZTwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkNvbnRpbnVvdXM8L3RkPg0KPHRkPk5vcm1hbDwvdGQ+DQo8dGQ+zrwsIM+DPC90ZD4NCjx0ZD4oLeKIniwg4oieKTwvdGQ+DQo8dGQ+TmF0dXJhbCBwaGVub21lbmE8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5Db250aW51b3VzPC90ZD4NCjx0ZD5Vbmlmb3JtPC90ZD4NCjx0ZD5hLCBiPC90ZD4NCjx0ZD5bYSwgYl08L3RkPg0KPHRkPkVxdWFsIHByb2JhYmlsaXR5PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+Q29udGludW91czwvdGQ+DQo8dGQ+RXhwb25lbnRpYWw8L3RkPg0KPHRkPs67PC90ZD4NCjx0ZD5bMCwg4oieKTwvdGQ+DQo8dGQ+V2FpdCB0aW1lPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2Pg0KICAgICAgICANCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gRGlzY3JldGUgUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9uczwvaDI+DQogICAgICAgICAgICANCjxoMz4xLiBCZXJub3VsbGkgRGlzdHJpYnV0aW9uPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkUChYID0geCkgPSBwXngoMS1wKV57MS14fSBccXVhZCBcdGV4dHtmb3IgfSB4ID0gMCwxJCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IFBlbGVtcGFyYW4gS29pbjwvaDQ+DQo8cD48c3Ryb25nPlBhcmFtZXRlcjo8L3N0cm9uZz4gcCA9IDAuNSAocHJvYmFiaWxpdGFzIGhlYWQpPC9wPg0KPHA+PHN0cm9uZz5QTUY6PC9zdHJvbmc+PC9wPg0KPHVsPg0KPGxpPlAoWD0wKSA9IFAoVGFpbCkgPSAoMC41KeKBsCgwLjUpwrkgPSAwLjU8L2xpPg0KPGxpPlAoWD0xKSA9IFAoSGVhZCkgPSAoMC41KcK5KDAuNSnigbAgPSAwLjU8L2xpPg0KPC91bD4NCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDM+Mi4gQmlub21pYWwgRGlzdHJpYnV0aW9uPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkUChYID0gaykgPSBcYmlub217bn17a30gcF5rICgxLXApXntuLWt9IFxxdWFkIFx0ZXh0e2ZvciB9IGsgPSAwLDEsMiwuLi4sbiQkPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+Q29udG9oOiBQZWxlbXBhcmFuIDEwIEtvaW48L2g0Pg0KPHA+PHN0cm9uZz5QYXJhbWV0ZXI6PC9zdHJvbmc+IG4gPSAxMCwgcCA9IDAuNTwvcD4NCjxwPjxzdHJvbmc+UGVydGFueWFhbjo8L3N0cm9uZz4gQmVyYXBhIHByb2JhYmlsaXRhcyBtZW5kYXBhdGthbiB0ZXBhdCA3IGhlYWQ/PC9wPg0KPHA+PHN0cm9uZz5Tb2x1c2k6PC9zdHJvbmc+PC9wPg0KPHA+JCRQKFg9NykgPSBcYmlub217MTB9ezd9ICgwLjUpXjcgKDAuNSleMyA9IDEyMCBcdGltZXMgMC4wMDc4MTI1IFx0aW1lcyAwLjEyNSA9IDAuMTE3MiQkPC9wPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz4zLiBQb2lzc29uIERpc3RyaWJ1dGlvbjwvaDM+DQo8ZGl2IGNsYXNzPSJmb3JtdWxhLWJveCI+DQo8cD4kJFAoWCA9IGspID0gXGZyYWN7XGxhbWJkYV5rIGVeey1cbGFtYmRhfX17ayF9IFxxdWFkIFx0ZXh0e2ZvciB9IGsgPSAwLDEsMiwuLi4kJDwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PkNvbnRvaDogQ2FsbCBDZW50ZXI8L2g0Pg0KPHA+PHN0cm9uZz5QYXJhbWV0ZXI6PC9zdHJvbmc+IM67ID0gNSBjYWxscyBwZXIgaG91ciAocmF0YS1yYXRhIHBhbmdnaWxhbiBwZXIgamFtKTwvcD4NCjxwPjxzdHJvbmc+UGVydGFueWFhbjo8L3N0cm9uZz4gQmVyYXBhIHByb2JhYmlsaXRhcyBtZW5lcmltYSB0ZXBhdCAzIHBhbmdnaWxhbiBkYWxhbSBzYXR1IGphbT88L3A+DQo8cD48c3Ryb25nPlNvbHVzaTo8L3N0cm9uZz48L3A+DQo8cD4kJFAoWD0zKSA9IFxmcmFjezVeMyBlXnstNX19ezMhfSA9IFxmcmFjezEyNSBcdGltZXMgMC4wMDY3Mzc5NDd9ezZ9ID0gMC4xNDA0JCQ8L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KICAgICAgICANCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gQ29udGludW91cyBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zPC9oMj4NCiAgICAgICAgICAgIA0KPGgzPjEuIE5vcm1hbCBEaXN0cmlidXRpb24gKEdhdXNzaWFuKTwvaDM+DQo8ZGl2IGNsYXNzPSJmb3JtdWxhLWJveCI+DQo8cD4kJGYoeCkgPSBcZnJhY3sxfXtcc2lnbWFcc3FydHsyXHBpfX0gZV57LVxmcmFjezF9ezJ9XGxlZnQoXGZyYWN7eC1cbXV9e1xzaWdtYX1ccmlnaHQpXjJ9JCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IFRpbmdnaSBCYWRhbjwvaDQ+DQo8cD48c3Ryb25nPlBhcmFtZXRlcjo8L3N0cm9uZz4gzrwgPSAxNzAgY20sIM+DID0gMTAgY208L3A+DQo8cD48c3Ryb25nPkFwbGlrYXNpOjwvc3Ryb25nPiBEaXN0cmlidXNpIHRpbmdnaSBiYWRhbiBwb3B1bGFzaTwvcD4NCjxwPjxzdHJvbmc+S2FyYWt0ZXJpc3Rpazo8L3N0cm9uZz4gQmVsbC1zaGFwZWQsIHN5bW1ldHJpYywgbWVhbj1tZWRpYW49bW9kZTwvcD4NCjwvZGl2Pg0KICAgICAgICAgIA0KPGgzPjIuIFVuaWZvcm0gRGlzdHJpYnV0aW9uPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkZih4KSA9IFxmcmFjezF9e2ItYX0gXHF1YWQgXHRleHR7Zm9yIH0gYSBcbGVxIHggXGxlcSBiJCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yPC9oND4gIA0KPHA+PHN0cm9uZz5QYXJhbWV0ZXI6PC9zdHJvbmc+IGEgPSAwLCBiID0gMTwvcD4NCjxwPjxzdHJvbmc+QXBsaWthc2k6PC9zdHJvbmc+IFJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgc2ltdWxhdGlvbjwvcD4NCjxwPjxzdHJvbmc+S2FyYWt0ZXJpc3Rpazo8L3N0cm9uZz4gQ29uc3RhbnQgcHJvYmFiaWxpdHkgYWNyb3NzIGludGVydmFsPC9wPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz4zLiBFeHBvbmVudGlhbCBEaXN0cmlidXRpb248L2gzPg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3giPg0KPHA+JCRmKHgpID0gXGxhbWJkYSBlXnstXGxhbWJkYSB4fSBccXVhZCBcdGV4dHtmb3IgfSB4IFxnZXEgMCQkPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+Q29udG9oOiBXYWt0dSBUdW5nZ3U8L2g0Pg0KPHA+PHN0cm9uZz5QYXJhbWV0ZXI6PC9zdHJvbmc+IM67ID0gMC41IChyYXRhLXJhdGEgMiBldmVudHMgcGVyIHVuaXQgd2FrdHUpPC9wPg0KPHA+PHN0cm9uZz5BcGxpa2FzaTo8L3N0cm9uZz4gV2FrdHUgYW50YXJhIGV2ZW50cyBkYWxhbSBQb2lzc29uIHByb2Nlc3M8L3A+DQo8cD48c3Ryb25nPkthcmFrdGVyaXN0aWs6PC9zdHJvbmc+IE1lbW9yeWxlc3MgcHJvcGVydHk8L3A+ICAgICAgICANCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDM+UGVyYmFuZGluZ2FuIENvbnRpbnVvdXMgUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9uczwvaDM+ICAgICAgICANCg0KPHRhYmxlPg0KPHRoZWFkPg0KPHRoPkRpc3RyaWJ1c2k8L3RoPg0KPHRoPlBhcmFtZXRlcjwvdGg+DQo8dGg+TWVhbjwvdGg+DQo8dGg+VmFyaWFuY2U8L3RoPg0KPHRoPkFwbGlrYXNpPC90aD4NCjx0aD5TaGFwZTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0ZD5Ob3JtYWw8L3RkPg0KPHRkPs68LCDPgzwvdGQ+DQo8dGQ+zrw8L3RkPg0KPHRkPs+DwrI8L3RkPg0KPHRkPk5hdHVyYWwgcGhlbm9tZW5hPC90ZD4NCjx0ZD5CZWxsLXNoYXBlZDwvdGQ+DQo8L3RyPg0KPHRkPlVuaWZvcm08L3RkPg0KPHRkPmEsIGI8L3RkPg0KPHRkPihhK2IpLzI8L3RkPg0KPHRkPihiLWEpwrIvMTI8L3RkPg0KPHRkPlJhbmRvbSBudW1iZXJzPC90ZD4NCjx0ZD5SZWN0YW5ndWxhcjwvdGQ+DQo8L3RyPg0KPHRkPkV4cG9uZW50aWFsPC90ZD4NCjx0ZD7OuzwvdGQ+DQo8dGQ+MS/OuzwvdGQ+DQo8dGQ+MS/Ou8KyPC90ZD4NCjx0ZD5XYWl0IHRpbWVzPC90ZD4NCjx0ZD5EZWNheWluZyBleHBvbmVudGlhbDwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCiAgICAgICAgDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCI+DQo8aDI+RXhwZWN0ZWQgVmFsdWUgYW5kIFZhcmlhbmNlPC9oMj4NCiAgICAgICAgICAgIA0KPGgzPktvbnNlcCBFeHBlY3RlZCBWYWx1ZSAoTWVhbik8L2gzPg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3giPg0KPHA+JCRFW1hdID0gXHN1bSB4IFxjZG90IFAoWD14KSBccXVhZCBcdGV4dHsoRGlzY3JldGUpfSQkPC9wPg0KPHA+JCRFW1hdID0gXGludCB4IFxjZG90IGYoeCkgZHggXHF1YWQgXHRleHR7KENvbnRpbnVvdXMpfSQkPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+Q29udG9oOiBFeHBlY3RlZCBWYWx1ZSBEYWR1PC9oND4NCjxwPjxzdHJvbmc+RGlzdHJpYnVzaSBVbmlmb3JtIERpc2NyZXRlOjwvc3Ryb25nPiBQKFg9eCkgPSAxLzYgdW50dWsgeD0xLDIsMyw0LDUsNjwvcD4NCjxwPiQkRVtYXSA9IDFcY2RvdFxmcmFjezF9ezZ9ICsgMlxjZG90XGZyYWN7MX17Nn0gKyAzXGNkb3RcZnJhY3sxfXs2fSArIDRcY2RvdFxmcmFjezF9ezZ9ICsgNVxjZG90XGZyYWN7MX17Nn0gKyA2XGNkb3RcZnJhY3sxfXs2fSA9IDMuNSQkPC9wPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz5Lb25zZXAgVmFyaWFuY2U8L2gzPg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3giPg0KPHA+JCRWYXIoWCkgPSBFWyhYIC0gXG11KV4yXSA9IEVbWF4yXSAtIChFW1hdKV4yJCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IFZhcmlhbmNlIERhZHU8L2g0Pg0KPHA+JCRFW1hdID0gMy41JCQ8L3A+DQo8cD4kJEVbWF4yXSA9IDFeMlxjZG90XGZyYWN7MX17Nn0gKyAyXjJcY2RvdFxmcmFjezF9ezZ9ICsgM14yXGNkb3RcZnJhY3sxfXs2fSArIDReMlxjZG90XGZyYWN7MX17Nn0gKyA1XjJcY2RvdFxmcmFjezF9ezZ9ICsgNl4yXGNkb3RcZnJhY3sxfXs2fSA9IDE1LjE2NjckJDwvcD4NCjxwPiQkVmFyKFgpID0gMTUuMTY2NyAtICgzLjUpXjIgPSAxNS4xNjY3IC0gMTIuMjUgPSAyLjkxNjckJDwvcD4NCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDM+RXhwZWN0ZWQgVmFsdWUgZGFuIFZhcmlhbmNlIHVudHVrIEJlcmJhZ2FpIERpc3RyaWJ1c2k8L2gzPg0KPHRhYmxlPg0KPHRoZWFkPg0KPHRyPg0KPHRoPkRpc3RyaWJ1c2k8L3RoPg0KPHRoPkVbWF08L3RoPg0KPHRoPlZhcihYKTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0ZD5CZXJub3VsbGkocCk8L3RkPg0KPHRkPnA8L3RkPg0KPHRkPnAoMS1wKTwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkJpbm9taWFsKG4scCk8L3RkPg0KPHRkPm5wPC90ZD4NCjx0ZD5ucCgxLXApPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+UG9pc3NvbijOuyk8L3RkPg0KPHRkPs67PC90ZD4NCjx0ZD7OuzwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPk5vcm1hbCjOvCzPgyk8L3RkPg0KPHRkPs68PC90ZD4NCjx0ZD7Pg8KyPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+VW5pZm9ybShhLGIpPC90ZD4NCjx0ZD4oYStiKS8yPC90ZD4NCjx0ZD4oYi1hKcKyLzEyPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+RXhwb25lbnRpYWwozrspPC90ZD4NCjx0ZD4xL867PC90ZD4NCjx0ZD4xL867wrI8L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPlJlYWwtV29ybGQgQXBwbGljYXRpb25zPC9oMj4NCiAgICAgICAgICAgIA0KPGgzPjEuIFF1YWxpdHkgQ29udHJvbCAoQmlub21pYWwpPC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+U2NlbmFyaW86PC9zdHJvbmc+IEZhY3RvcnkgcHJvZHVjZXMgaXRlbXMgd2l0aCAyJSBkZWZlY3QgcmF0ZTwvcD4NCjxwPjxzdHJvbmc+UXVlc3Rpb246PC9zdHJvbmc+IFByb2JhYmlsaXR5IHRoYXQgaW4gc2FtcGxlIG9mIDEwMCBpdGVtcywgYXQgbW9zdCAzIGFyZSBkZWZlY3RpdmU/PC9wPg0KPHA+PHN0cm9uZz5Tb2x1dGlvbjo8L3N0cm9uZz4gVXNlIEJpbm9taWFsKG49MTAwLCBwPTAuMDIpPC9wPg0KPHA+JCRQKFggXGxlcSAzKSA9IFxzdW1fe2s9MH1eMyBcYmlub217MTAwfXtrfSAoMC4wMileayAoMC45OCleezEwMC1rfSQkPC9wPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz4yLiBSaXNrIE1hbmFnZW1lbnQgKE5vcm1hbCk8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPHA+PHN0cm9uZz5TY2VuYXJpbzo8L3N0cm9uZz4gUG9ydGZvbGlvIHJldHVybnMgZm9sbG93IE5vcm1hbCBkaXN0cmlidXRpb248L3A+DQo8cD48c3Ryb25nPlF1ZXN0aW9uOjwvc3Ryb25nPiBQcm9iYWJpbGl0eSBvZiBsb3NpbmcgbW9yZSB0aGFuIDEwJT88L3A+DQo8cD48c3Ryb25nPlNvbHV0aW9uOjwvc3Ryb25nPiBVc2UgTm9ybWFsKM68LCDPgykgYW5kIGNhbGN1bGF0ZSBQKFggPCAtMC4xMCk8L3A+DQo8L2Rpdj4NCiAgICAgICAgICAgIA0KPGgzPjMuIFNlcnZpY2UgU3lzdGVtcyAoUG9pc3NvbiAmIEV4cG9uZW50aWFsKTwvaDM+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8cD48c3Ryb25nPlNjZW5hcmlvOjwvc3Ryb25nPiBDdXN0b21lciBhcnJpdmFscyBhdCBiYW5rIGZvbGxvdyBQb2lzc29uIHByb2Nlc3M8L3A+DQo8cD48c3Ryb25nPlF1ZXN0aW9uczo8L3N0cm9uZz48L3A+DQo8dWw+DQo8bGk+UG9pc3NvbjogUHJvYmFiaWxpdHkgb2YgayBhcnJpdmFscyBpbiBob3VyPC9saT4NCjxsaT5FeHBvbmVudGlhbDogUHJvYmFiaWxpdHkgdGltZSBiZXR3ZWVuIGFycml2YWxzID4gdCBtaW51dGVzPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjwvZGl2Pg0KICAgICAgICANCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gQ2VudHJhbCBMaW1pdCBUaGVvcmVtPC9oMj4NCjxoMz5UaGUgRnVuZGFtZW50YWwgVGhlb3JlbSBvZiBTdGF0aXN0aWNzPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkXHRleHR7SWYgfSBYXzEsIFhfMiwgLi4uLCBYX24gXHRleHR7IGFyZSBpLmkuZC4gd2l0aCB9IEVbWF9pXSA9IFxtdSwgVmFyKFhfaSkgPSBcc2lnbWFeMiQkPC9wPg0KPHA+JCRcdGV4dHtUaGVuIH0gXGJhcntYfSBceHJpZ2h0YXJyb3d7ZH0gTlxsZWZ0KFxtdSwgXGZyYWN7XHNpZ21hXjJ9e259XHJpZ2h0KSBcdGV4dHsgYXMgfSBuIFx0byBcaW5mdHkkJDwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PkltcGxpY2F0aW9ucyBvZiBDTFQ8L2g0Pg0KPHVsPg0KPGxpPlNhbXBsZSBtZWFucyBiZWNvbWUgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgZm9yIGxhcmdlIG48L2xpPg0KPGxpPldvcmtzIHJlZ2FyZGxlc3Mgb2YgcG9wdWxhdGlvbiBkaXN0cmlidXRpb24gc2hhcGU8L2xpPg0KPGxpPkZvdW5kYXRpb24gZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFuZCBoeXBvdGhlc2lzIHRlc3Rpbmc8L2xpPg0KPGxpPm4g4omlIDMwIGdlbmVyYWxseSBjb25zaWRlcmVkICJsYXJnZSBlbm91Z2giPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjwvZGl2Pg0KIyMgUmVmZXJlbnNpIEJ1a3UgICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPlJlZmVyZW5zaSBCdWt1PC9oMj4NCjxkaXYgY2xhc3M9InJlZmVyZW5jZS1pdGVtIj4NCjxwIGNsYXNzPSJyZWZlcmVuY2UtdGl0bGUiPjEuICJJbnRyb2R1Y3Rpb24gdG8gUHJvYmFiaWxpdHkiIGJ5IEpvc2VwaCBLLiBCbGl0enN0ZWluIGFuZCBKZXNzaWNhIEh3YW5nPC9wPg0KPHA+QnVrdSBrb21wcmVoZW5zaWYgeWFuZyBtZW5jYWt1cCBkYXNhci1kYXNhciBwcm9iYWJpbGl0YXMgZGFuIGRpc3RyaWJ1c2kgZGVuZ2FuIHBlbmRla2F0YW4geWFuZyBtdWRhaCBkaXBhaGFtaS48L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InJlZmVyZW5jZS1pdGVtIj4NCjxwIGNsYXNzPSJyZWZlcmVuY2UtdGl0bGUiPjIuICJQcm9iYWJpbGl0eSBhbmQgU3RhdGlzdGljcyBmb3IgRW5naW5lZXJpbmcgYW5kIHRoZSBTY2llbmNlcyIgYnkgSmF5IEwuIERldm9yZTwvcD4NCjxwPkJ1a3UgdGVrcyBrbGFzaWsgZGVuZ2FuIGFwbGlrYXNpIHByYWt0aXMgZGFsYW0gYmlkYW5nIHRla25payBkYW4gc2FpbnMuPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtaXRlbSI+DQo8cCBjbGFzcz0icmVmZXJlbmNlLXRpdGxlIj4zLiAiU3RhdGlzdGljYWwgSW5mZXJlbmNlIiBieSBHZW9yZ2UgQ2FzZWxsYSBhbmQgUm9nZXIgTC4gQmVyZ2VyPC9wPg0KPHA+UmVmZXJlbnNpIGxhbmp1dGFuIHVudHVrIHRlb3JpIHN0YXRpc3RpayBkYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMuPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtaXRlbSI+DQo8cCBjbGFzcz0icmVmZXJlbmNlLXRpdGxlIj40LiAiQWxsIG9mIFN0YXRpc3RpY3M6IEEgQ29uY2lzZSBDb3Vyc2UgaW4gU3RhdGlzdGljYWwgSW5mZXJlbmNlIiBieSBMYXJyeSBXYXNzZXJtYW48L3A+DQo8cD5QYW5kdWFuIGtvbXByZWhlbnNpZiB1bnR1ayBrb25zZXAgc3RhdGlzdGlrIG1vZGVybiB0ZXJtYXN1ayBkaXN0cmlidXNpIHByb2JhYmlsaXRhcy48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQojIyBLZXNpbXB1bGFuDQoNCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24tYm94Ij4NCjxoMj5LZXNpbXB1bGFuIFZpZGVvIDUgLSBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zPC9oMj4NCjxoMz5Qb2luLVBvaW4gUGVudGluZyB5YW5nIERpcGVsYWphcmk6PC9oMz4NCjxkaXYgc3R5bGU9ImRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzAwcHgsIDFmcikpOyBnYXA6IDIwcHg7IG1hcmdpbi10b3A6IDIwcHg7Ij4NCjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQpOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItcmFkaXVzOiA4cHg7Ij4NCjxoND5EaXNjcmV0ZSBEaXN0cmlidXRpb25zPC9oND4NCjx1bD4NCjxsaT5CZXJub3VsbGk6IFNpbmdsZSB0cmlhbDwvbGk+DQo8bGk+Qmlub21pYWw6IE11bHRpcGxlIHRyaWFsczwvbGk+DQo8bGk+UG9pc3NvbjogRXZlbnQgY291bnRzPC9saT4NCjxsaT5HZW9tZXRyaWM6IFdhaXQgZm9yIHN1Y2Nlc3M8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuNCk7IHBhZGRpbmc6IDE1cHg7IGJvcmRlci1yYWRpdXM6IDhweDsiPg0KPGg0PkNvbnRpbnVvdXMgRGlzdHJpYnV0aW9uczwvaDQ+DQo8dWw+DQo8bGk+Tm9ybWFsOiBOYXR1cmFsIHBoZW5vbWVuYTwvbGk+DQo8bGk+VW5pZm9ybTogRXF1YWwgcHJvYmFiaWxpdHk8L2xpPg0KPGxpPkV4cG9uZW50aWFsOiBXYWl0IHRpbWVzPC9saT4NCjxsaT5HYW1tYTogR2VuZXJhbCB3YWl0IHRpbWVzPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQpOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItcmFkaXVzOiA4cHg7Ij4NCjxoND5LZXkgQ29uY2VwdHM8L2g0Pg0KPHVsPg0KPGxpPkV4cGVjdGVkIFZhbHVlICYgVmFyaWFuY2U8L2xpPg0KPGxpPlByb2JhYmlsaXR5IE1hc3MvRGVuc2l0eSBGdW5jdGlvbnM8L2xpPg0KPGxpPkNlbnRyYWwgTGltaXQgVGhlb3JlbTwvbGk+DQo8bGk+UmVhbC13b3JsZCBhcHBsaWNhdGlvbnM8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9ucyBtZW1iZXJpa2FuIGZyYW1ld29yayBtYXRlbWF0aXMgdW50dWsgbWVtb2RlbGthbiBrZXRpZGFrcGFzdGlhbiBkYW4gdmFyaWFiaWxpdGFzIGRhbGFtIGRhdGEgZHVuaWEgbnlhdGEsIG1lbWJlbnR1ayBmb3VuZGF0aW9uIHVudHVrIHN0YXRpc3RpY2FsIGluZmVyZW5jZSBkYW4gbWFjaGluZSBsZWFybmluZy48L3N0cm9uZz48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KICAgICAgICANCi0tLQ0KdGl0bGU6ICJSYW5kb20gVmFyaWFibGVzIC0gVmlkZW8gNiBBbmFseXNpcyINCmF1dGhvcjogIkFkaW5kYSBBZGVsaWEgRnV0cmkiDQpvdXRwdXQ6IGh0bWxfZG9jdW1lbnQNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KLyogQ1NTIFN0eWxpbmcgdW50dWsgVmlkZW8gMiAtIFNlc3VhaSBWaWRlbyAxICovDQpib2R5IHsNCiAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmOw0KICBsaW5lLWhlaWdodDogMS42Ow0KICBjb2xvcjogIzVhNGE0YTsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmZjVmNSAwJSwgI2ZmZWVmMCAxMDAlKTsNCiAgbWluLWhlaWdodDogMTAwdmg7DQogIG1hcmdpbjogMDsNCiAgcGFkZGluZzogMjBweDsNCn0NCg0KaHRtbCB7DQogIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOw0KfQ0KDQo6OnNlbGVjdGlvbiB7DQogIGJhY2tncm91bmQ6ICNmZmFmY2M7DQogIGNvbG9yOiAjNWE0YTRhOw0KfQ0KDQphIHsNCiAgY29sb3I6ICNmZjZiOTU7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KYTpob3ZlciB7DQogIGNvbG9yOiAjZmY0ZDdjOw0KICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCg0KLyogQ29udGFpbmVyIHV0YW1hICovDQouY29udGFpbmVyIHsNCiAgbWF4LXdpZHRoOiAxMjAwcHg7DQogIG1hcmdpbjogMCBhdXRvOw0KfQ0KDQovKiBDdXN0b20gY2xhc3NlcyBmb3IgY29udGVudCBib3hlcyAqLw0KLmNvbnRlbnQtYm94IHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmYWZjYyAwJSwgI2ZmNmI5NSAxMDAlKTsNCiAgY29sb3I6ICMzQTRGN0E7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDhweCAyNXB4IHJnYmEoMCwwLDAsMC4xKTsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCn0NCg0KLmNvbnRlbnQtYm94OmhvdmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zcHgpOw0KICBib3gtc2hhZG93OiAwIDEycHggMzBweCByZ2JhKDAsMCwwLDAuMTUpOw0KfQ0KDQouZGVmaW5pdGlvbi1ib3ggew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2ZmNmI5NTsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQouZm9ybXVsYS1ib3ggew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2ZmNmI5NTsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KfQ0KDQouZXhhbXBsZS1ib3ggew0KICBiYWNrZ3JvdW5kOiAjZmZmMGY2Ow0KICBwYWRkaW5nOiAyMHB4Ow0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBtYXJnaW46IDE1cHggMDsNCiAgYm9yZGVyOiAxcHggc29saWQgI2ZmYWZjYzsNCn0NCg0KLnJlZmVyZW5jZS1ib3ggew0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCiAgcGFkZGluZzogMjVweDsNCiAgYm9yZGVyLXJhZGl1czogMTVweDsNCiAgbWFyZ2luOiAyNXB4IDA7DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLmNvbmNsdXNpb24tYm94IHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZmYWZjYyAwJSwgI2ZmNmI5NSAxMDAlKTsNCiAgY29sb3I6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi5uZXh0LXRvcGljLWJveCB7DQogIGJhY2tncm91bmQ6ICNmZmYwZjY7DQogIHBhZGRpbmc6IDIwcHg7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG1hcmdpbjogMjVweCAwOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGJvcmRlcjogMnB4IGRhc2hlZCAjZmZhZmNjOw0KfQ0KDQouaGVhZGVyLW1haW4gew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIHBhZGRpbmc6IDQwcHg7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsMCwwLDAuMSk7DQp9DQoNCi52aWRlby1jYXJkIHsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIHBhZGRpbmc6IDI1cHg7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIG1hcmdpbjogMjVweCAwOw0KICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMCwwLDAsMC4wOCk7DQp9DQoNCi8qIFRhYmxlIHN0eWxpbmcgKi8NCi50YWJsZS1jdXN0b20gew0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgbWFyZ2luOiAyMHB4IDA7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsNCn0NCg0KLnRhYmxlLWN1c3RvbSB0aCB7DQogIGJhY2tncm91bmQ6ICNmZjZiOTU7DQogIGNvbG9yOiB3aGl0ZTsNCiAgcGFkZGluZzogMTVweDsNCiAgdGV4dC1hbGlnbjogbGVmdDsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KLnRhYmxlLWN1c3RvbSB0ZCB7DQogIHBhZGRpbmc6IDE1cHg7DQogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZlNGVjOw0KfQ0KDQoudGFibGUtY3VzdG9tIHRyOmhvdmVyIHRkIHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCn0NCg0KLyogVG9vbHRpcCBTdHlsZXMgKi8NCi50b29sdGlwLWVsZW1lbnQgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBjb2xvcjogI2ZmNmI5NTsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgYm9yZGVyLWJvdHRvbTogMnB4IGRvdHRlZCAjZmZhZmNjOw0KfQ0KDQoudG9vbHRpcC1jb250ZW50IHsNCiAgdmlzaWJpbGl0eTogaGlkZGVuOw0KICB3aWR0aDogMzAwcHg7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZjZiOTUgMCUsICNmZjRkN2MgMTAwJSk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBwYWRkaW5nOiAxNXB4Ow0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHotaW5kZXg6IDEwMDA7DQogIGJvdHRvbTogMTI1JTsNCiAgbGVmdDogNTAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIG9wYWNpdHk6IDA7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogIGJveC1zaGFkb3c6IDAgOHB4IDI1cHggcmdiYSgwLDAsMCwwLjIpOw0KICBmb250LXNpemU6IDAuOWVtOw0KICBsaW5lLWhlaWdodDogMS40Ow0KfQ0KDQoudG9vbHRpcC1jb250ZW50OjphZnRlciB7DQogIGNvbnRlbnQ6ICIiOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogMTAwJTsNCiAgbGVmdDogNTAlOw0KICBtYXJnaW4tbGVmdDogLTVweDsNCiAgYm9yZGVyLXdpZHRoOiA1cHg7DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogI2ZmNmI5NSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsNCn0NCg0KLnRvb2x0aXAtZWxlbWVudDpob3ZlciAudG9vbHRpcC1jb250ZW50IHsNCiAgdmlzaWJpbGl0eTogdmlzaWJsZTsNCiAgb3BhY2l0eTogMTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTVweCk7DQp9DQoNCi8qIFBsb3QgY29udGFpbmVyIHN0eWxpbmcgKi8NCi5wbG90LWNvbnRhaW5lciB7DQogIGJhY2tncm91bmQ6IHdoaXRlOw0KICBwYWRkaW5nOiAyNXB4Ow0KICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICBtYXJnaW46IDI1cHggMDsNCiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMDgpOw0KICBib3JkZXI6IDFweCBzb2xpZCAjZmZlNGVjOw0KfQ0KDQoucGxvdC1pbmZvIHsNCiAgYmFja2dyb3VuZDogI2ZmZjBmNjsNCiAgcGFkZGluZzogMTVweDsNCiAgYm9yZGVyLXJhZGl1czogOHB4Ow0KICBtYXJnaW4tdG9wOiAxNXB4Ow0KICBib3JkZXItbGVmdDogNHB4IHNvbGlkICNmZjZiOTU7DQp9DQoNCi8qIEdyaWQgTGF5b3V0ICovDQouY29uY2x1c2lvbi1ncmlkIHsNCiAgZGlzcGxheTogZ3JpZDsNCiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7DQogIGdhcDogMjBweDsNCiAgbWFyZ2luLXRvcDogMjBweDsNCn0NCg0KLmNvbmNsdXNpb24taXRlbSB7DQogIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTsNCiAgcGFkZGluZzogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpOw0KfQ0KDQovKiBBbmltYXRpb24gKi8NCkBrZXlmcmFtZXMgZmFkZUluVXAgew0KICBmcm9tIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsNCiAgfQ0KICB0byB7DQogICAgb3BhY2l0eTogMTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7DQogIH0NCn0NCg0KLmFuaW1hdGUtZmFkZUluIHsNCiAgYW5pbWF0aW9uOiBmYWRlSW5VcCAwLjZzIGVhc2Utb3V0Ow0KfQ0KDQovKiBNYXRoIGZvcm11bGEgc3R5bGluZyAqLw0KLm1hdGgtZm9ybXVsYSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1zaXplOiAxLjRlbTsNCiAgY29sb3I6ICNmZjZiOTU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBtYXJnaW46IDIwcHggMDsNCiAgcGFkZGluZzogMjBweDsNCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICBib3JkZXI6IDJweCBzb2xpZCAjZmZhZmNjOw0KfQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojIFNldHVwIGNodW5rIC0gVmlkZW8gMiAtIFNlc3VhaSBWaWRlbyAxDQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGVjaG8gPSBGQUxTRSwNCiAgd2FybmluZyA9IEZBTFNFLA0KICBtZXNzYWdlID0gRkFMU0UsDQogIGZpZy5hbGlnbiA9ICJjZW50ZXIiLA0KICBmaWcud2lkdGggPSA5LCAgICAjIFNlc3VhaSBWaWRlbyAxDQogIGZpZy5oZWlnaHQgPSA1ICAgICMgU2VzdWFpIFZpZGVvIDENCikNCg0KIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcw0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KHNjYWxlcykNCg0KIyBDdXN0b20gdGhlbWUgdW50dWsgZ2dwbG90IC0gU2VzdWFpIFZpZGVvIDENCmN1c3RvbV90aGVtZSA8LSBmdW5jdGlvbigpIHsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE2LCBjb2xvciA9ICIjMmMzZTUwIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDExLCBjb2xvciA9ICIjN2Y4YzhkIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMTEsIGNvbG9yID0gIiMyYzNlNTAiKSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGNvbG9yID0gIiMzNDQ5NWUiKSwNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHNpemUgPSAxMCksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICIjZWNmMGYxIiwgbGluZXdpZHRoID0gMC4zKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gTkEpDQogICkNCn0NCmBgYA0KDQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgY2xhc3M9InZpZGVvLWNhcmQgYW5pbWF0ZS1mYWRlSW4iPg0KPGgyPiBSYW5kb20gVmFyaWFibGVzIC0gVmlkZW8gNiBBbmFseXNpczwvaDI+DQo8cD48c3Ryb25nPlZpZGVvIFNvdXJjZTo8L3N0cm9uZz4gDQo8YSBocmVmPSJodHRwczovL3lvdXR1LmJlL1kyLXZTV0ZtZ3lJP3NpPUpvU0RvSEZzMDdIeEZnNHMiIA0KICAgdGFyZ2V0PSJfYmxhbmsiIA0KICAgY2xhc3M9InlvdXR1YmUtbGluay10b29sdGlwIg0KICAgdGl0bGU9IkJ1a2EgdmlkZW8gUmFuZG9tIFZhcmlhYmxlcyBkaSBZb3VUdWJlIj4NCiAgIFJhbmRvbSBWYXJpYWJsZXMgLSBZb3VUdWJlDQo8L2E+DQo8L3A+DQo8cD48c3Ryb25nPkR1cmF0aW9uOjwvc3Ryb25nPiAxNToyMCBtaW51dGVzIHwgPHN0cm9uZz5Db250ZW50IExldmVsOjwvc3Ryb25nPiBJbnRlcm1lZGlhdGU8L3A+DQo8L2Rpdj4NCg0KIyBSYW5kb20gVmFyaWFibGVzDQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj4gUmFuZ2t1bWFuIFBlbmplbGFzYW4gVmlkZW88L2gyPg0KPGgzPktvbnNlcCBGdW5kYW1lbnRhbCBSYW5kb20gVmFyaWFibGVzPC9oMz4NCjxwPlJhbmRvbSBWYXJpYWJsZSBhZGFsYWggPHNwYW4gY2xhc3M9InRvb2x0aXAtZWxlbWVudCI+ZnVuZ3NpIG1hdGVtYXRpa2E8c3BhbiBjbGFzcz0idG9vbHRpcC1jb250ZW50Ij5GdW5nc2kgeWFuZyBtZW1ldGFrYW4gb3V0Y29tZXMgZGFyaSBzYW1wbGUgc3BhY2Uga2UgYmlsYW5nYW4gcmVhbDwvc3Bhbj48L3NwYW4+IHlhbmcgbWVtYmVyaWthbiBuaWxhaSBudW1lcmlrIHVudHVrIHNldGlhcCBvdXRjb21lIGRhbGFtIHNhbXBsZSBzcGFjZS48L3A+DQo8L2Rpdj4NCiAgICAgICAgDQo8ZGl2IGNsYXNzPSJkZWZpbml0aW9uLWJveCI+DQo8aDM+RGVmaW5pc2kgRm9ybWFsIFJhbmRvbSBWYXJpYWJsZTwvaDM+DQo8cD48c3Ryb25nPlJhbmRvbSBWYXJpYWJsZSAoWCk6PC9zdHJvbmc+IEZ1bmdzaSB5YW5nIG1lbWV0YWthbiBkYXJpIHNhbXBsZSBzcGFjZSAoUykga2UgaGltcHVuYW4gYmlsYW5nYW4gcmVhbCAo4oSdKTwvcD4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkWDogUyBccmlnaHRhcnJvdyBcbWF0aGJie1J9JCQ8L3A+DQo8L2Rpdj4NCjxwPkRpbWFuYSBzZXRpYXAgb3V0Y29tZSDPiSDiiIggUyBkaXBldGFrYW4ga2UgbmlsYWkgbnVtZXJpayBYKM+JKSDiiIgg4oSdPC9wPg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPktsYXNpZmlrYXNpIFJhbmRvbSBWYXJpYWJsZXM8L2gyPg0KPGgzPjEuIERpc2NyZXRlIFJhbmRvbSBWYXJpYWJsZXM8L2gzPg0KPGRpdiBjbGFzcz0iZGlzdHJpYnV0aW9uLWJveCI+DQo8aDQ+S2FyYWt0ZXJpc3RpayBEaXNjcmV0ZSBSVjwvaDQ+DQo8dWw+DQo8bGk+TmlsYWkgeWFuZyBkYXBhdCBkaWhpdHVuZyAoY291bnRhYmxlKTwvbGk+DQo8bGk+TWVuZ2d1bmFrYW4gUHJvYmFiaWxpdHkgTWFzcyBGdW5jdGlvbiAoUE1GKTwvbGk+DQo8bGk+Q29udG9oOiBKdW1sYWggaGVhZCBkYWxhbSBwZWxlbXBhcmFuIGtvaW48L2xpPg0KPGxpPk5vdGFzaTogUChYID0geCk8L2xpPg0KPC91bD4NCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDM+Mi4gQ29udGludW91cyBSYW5kb20gVmFyaWFibGVzPC9oMz4NCjxkaXYgY2xhc3M9ImRpc3RyaWJ1dGlvbi1ib3giPg0KPGg0PkthcmFrdGVyaXN0aWsgQ29udGludW91cyBSVjwvaDQ+DQo8dWw+DQo8bGk+TmlsYWkgdGFrIHRlcmhpdHVuZyAodW5jb3VudGFibGUpPC9saT4NCjxsaT5NZW5nZ3VuYWthbiBQcm9iYWJpbGl0eSBEZW5zaXR5IEZ1bmN0aW9uIChQREYpPC9saT4NCjxsaT5Db250b2g6IFRpbmdnaSBiYWRhbiwgd2FrdHUgdHVuZ2d1PC9saT4NCjxsaT5Ob3Rhc2k6IGYoeCkgZGFuIFAoYSDiiaQgWCDiiaQgYik8L2xpPg0KPC91bD4NCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDM+S2xhc2lmaWthc2kgUmFuZG9tIFZhcmlhYmxlczwvaDM+DQo8dGFibGU+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+VGlwZTwvdGg+DQo8dGg+Q29udG9oPC90aD4NCjx0aD5OaWxhaTwvdGg+DQo8dGg+RnVuZ3NpPC90aD4NCjx0aD5Ob3Rhc2k8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGQ+RGlzY3JldGU8L3RkPg0KPHRkPkp1bWxhaCBoZWFkIGtvaW48L3RkPg0KPHRkPjAsMSwyLC4uLixuPC90ZD4NCjx0ZD5QTUY8L3RkPg0KPHRkPlAoWD14KTwvdGQNCjwvdHI+DQo8dHI+DQo8dGQ+RGlzY3JldGU8L3RkPg0KPHRkPkp1bWxhaCBkZWZlY3QgcHJvZHVrPC90ZD4NCjx0ZD4wLDEsMiwuLi48L3RkPg0KPHRkPlBNRjwvdGQ+DQo8dGQ+UChYPXgpPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+RGlzY3JldGU8L3RkPg0KPHRkPkp1bWxhaCBwYW5nZ2lsYW48L3RkPg0KPHRkPjAsMSwyLC4uLjwvdGQ+DQo8dGQ+UE1GPC90ZD4NCjx0ZD5QKFg9eCk8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5Db250aW51b3VzPC90ZD4NCjx0ZD5UaW5nZ2kgYmFkYW48L3RkPg0KPHRkPlthLGJdPC90ZD4NCjx0ZD5QREY8L3RkPg0KPHRkPmYoeCk8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5Db250aW51b3VzPC90ZD4NCjx0ZD5XYWt0dSB0dW5nZ3U8L3RkPg0KPHRkPlswLOKInik8L3RkPg0KPHRkPlBERjwvdGQ+DQo8dGQ+Zih4KTwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkNvbnRpbnVvdXM8L3RkPg0KPHRkPkJlcmF0IGJhZGFuPC90ZD4NCjx0ZD5bMCziiJ4pPC90ZD4NCjx0ZD5QREY8L3RkPg0KPHRkPmYoeCk8L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBQcm9iYWJpbGl0eSBNYXNzIEZ1bmN0aW9uIChQTUYpPC9oMj4NCjxoMz5EZWZpbmlzaSBkYW4gUHJvcGVydGllcyBQTUY8L2gzPg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3giPg0KPHA+JCRQKFggPSB4X2kpID0gcF9pIFxxdWFkIFx0ZXh0e3VudHVrIH0gaSA9IDEsMiwzLC4uLiQkPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+UHJvcGVydGllcyBQTUY6PC9oND4NCjxvbD4NCjxsaT4kMCBcbGVxIHBfaSBcbGVxIDEkIHVudHVrIHNlbXVhIGk8L2xpPg0KPGxpPiRcc3VtX3tpfSBwX2kgPSAxJDwvbGk+DQo8bGk+JFAoWCBcaW4gQSkgPSBcc3VtX3t4X2kgXGluIEF9IHBfaSQ8L2xpPg0KPC9vbD4NCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDQ+Q29udG9oIFBNRjogUGVsZW1wYXJhbiBEYWR1PC9oND4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+U2NlbmFyaW86PC9zdHJvbmc+IEZhaXIgZGljZSBkZW5nYW4gNiBzaXNpPC9wPg0KPHA+PHN0cm9uZz5QTUY6PC9zdHJvbmc+IFAoWD14KSA9IDEvNiB1bnR1ayB4ID0gMSwyLDMsNCw1LDY8L3A+DQo8cD48c3Ryb25nPlZpc3VhbGlzYXNpOjwvc3Ryb25nPiBEaXN0cmlidXNpIHVuaWZvcm0gZGVuZ2FuIHByb2JhYmlsaXRhcyBzYW1hIHVudHVrIHNldGlhcCBvdXRjb21lPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCiAgICANCiAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBQcm9iYWJpbGl0eSBEZW5zaXR5IEZ1bmN0aW9uIChQREYpPC9oMj4NCjxoMz5EZWZpbmlzaSBkYW4gUHJvcGVydGllcyBQREY8L2gzPg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3giPg0KPHA+JCRQKGEgXGxlcSBYIFxsZXEgYikgPSBcaW50X2FeYiBmKHgpIGR4JCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Qcm9wZXJ0aWVzIFBERjo8L2g0Pg0KPG9sPg0KPGxpPiRmKHgpIFxnZXEgMCQgdW50dWsgc2VtdWEgeDwvbGk+DQo8bGk+JFxpbnRfey1caW5mdHl9XntcaW5mdHl9IGYoeCkgZHggPSAxJDwvbGk+DQo8bGk+JFAoWCA9IGEpID0gMCQgdW50dWsgY29udGludW91cyBSVjwvbGk+DQo8L29sPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoND5Db250b2ggUERGOiBOb3JtYWwgRGlzdHJpYnV0aW9uPC9oND4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4gICAgICAgICAgICAgDQo8cD48c3Ryb25nPlNjZW5hcmlvOjwvc3Ryb25nPiBTdGFuZGFyZCBOb3JtYWwgRGlzdHJpYnV0aW9uIE4oMCwxKTwvcD4NCjxwPjxzdHJvbmc+UERGOjwvc3Ryb25nPiAkZih4KSA9IFxmcmFjezF9e1xzcXJ0ezJccGl9fSBlXnsteF4yLzJ9JDwvcD4NCjxwPjxzdHJvbmc+SW50ZXJwcmV0YXNpOjwvc3Ryb25nPiBBcmVhIGRpIGJhd2FoIGt1cnZhIGFudGFyYSBkdWEgdGl0aWsgbWVyZXByZXNlbnRhc2lrYW4gcHJvYmFiaWxpdGFzPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCiAgICAgICAgDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCI+DQo8aDI+IEN1bXVsYXRpdmUgRGlzdHJpYnV0aW9uIEZ1bmN0aW9uIChDREYpPC9oMj4NCjxoMz5EZWZpbmlzaSBDREY8L2gzPg0KPGRpdiBjbGFzcz0iZm9ybXVsYS1ib3giPg0KPHA+JCRGKHgpID0gUChYIFxsZXEgeCkkJDwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PlByb3BlcnRpZXMgQ0RGOjwvaDQ+DQo8b2w+DQo8bGk+JFxsaW1fe3ggXHRvIC1caW5mdHl9IEYoeCkgPSAwJDwvbGk+DQo8bGk+JFxsaW1fe3ggXHRvIFxpbmZ0eX0gRih4KSA9IDEkPC9saT4NCjxsaT5GKHgpIG5vbi1kZWNyZWFzaW5nPC9saT4NCjxsaT5GKHgpIHJpZ2h0LWNvbnRpbnVvdXM8L2xpPg0KPC9vbD4NCjwvZGl2Pg0KICAgICAgICAgICAgDQo8aDM+UGVyYmFuZGluZ2FuIENERiBEaXNjcmV0ZSB2cyBDb250aW51b3VzPC9oMz4NCjx0YWJsZT4NCjx0aGVhZD4NCjx0cj4NCjx0aD5Qcm9wZXJ0eTwvdGg+DQo8dGg+RGlzY3JldGU8L3RoPg0KPHRoPkNvbnRpbnVvdXM8L3RoPg0KPC90cj4NCjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHI+DQo8dGQ+U2hhcGU8L3RkPg0KPHRkPlN0ZXAgZnVuY3Rpb248L3RkPg0KPHRkPlNtb290aCBjdXJ2ZTwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkNvbnRpbnVpdHk8L3RkPg0KPHRkPlJpZ2h0LWNvbnRpbnVvdXM8L3RkPg0KPHRkPkNvbnRpbnVvdXM8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5QKFg9eCk8L3RkPg0KPHRkPlAoWD14KSA9IEYoeCkgLSBGKHgtKTwvdGQ+DQo8dGQ+UChYPXgpID0gMDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkNhbGN1bGF0aW9uPC90ZD4NCjx0ZD5TdW1tYXRpb248L3RkPg0KPHRkPkludGVncmF0aW9uPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+UmFuZ2U8L3RkPg0KPHRkPlswLDFdPC90ZD4NCjx0ZD5bMCwxXTwvdGQ+ICAgICAgICAgICAgICAgIA0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBFeHBlY3RlZCBWYWx1ZSBvZiBSYW5kb20gVmFyaWFibGVzPC9oMj4NCjxoMz5EZWZpbmlzaSBFeHBlY3RlZCBWYWx1ZTwvaDM+DQo8ZGl2IGNsYXNzPSJmb3JtdWxhLWJveCI+DQo8cD4kJEVbWF0gPSBcc3VtIHhfaSBwX2kgXHF1YWQgXHRleHR7KERpc2NyZXRlKX0kJDwvcD4NCjxwPiQkRVtYXSA9IFxpbnRfey1caW5mdHl9XntcaW5mdHl9IHggZih4KSBkeCBccXVhZCBcdGV4dHsoQ29udGludW91cyl9JCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IEV4cGVjdGVkIFZhbHVlIERhZHU8L2g0Pg0KPHA+JCRFW1hdID0gMVxjZG90XGZyYWN7MX17Nn0gKyAyXGNkb3RcZnJhY3sxfXs2fSArIDNcY2RvdFxmcmFjezF9ezZ9ICsgNFxjZG90XGZyYWN7MX17Nn0gKyA1XGNkb3RcZnJhY3sxfXs2fSArIDZcY2RvdFxmcmFjezF9ezZ9ID0gMy41JCQ8L3A+DQogICAgICAgICAgICAgICAgDQo8aDQ+Q29udG9oOiBFeHBlY3RlZCBWYWx1ZSBOb3JtYWwoMCwxKTwvaDQ+DQo8cD4kJEVbWF0gPSBcaW50X3stXGluZnR5fV57XGluZnR5fSB4IFxjZG90IFxmcmFjezF9e1xzcXJ0ezJccGl9fSBlXnsteF4yLzJ9IGR4ID0gMCQkPC9wPg0KPC9kaXY+DQo8L2Rpdj4NCiAgICAgICAgDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCI+DQo8aDI+IFZhcmlhbmNlIGFuZCBTdGFuZGFyZCBEZXZpYXRpb248L2gyPg0KPGgzPkRlZmluaXNpIFZhcmlhbmNlPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkVmFyKFgpID0gRVsoWCAtIFxtdSleMl0gPSBFW1heMl0gLSAoRVtYXSleMiQkPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJleGFtcGxlLWJveCI+DQo8aDQ+Q29udG9oOiBWYXJpYW5jZSBEYWR1PC9oND4NCjxwPiQkRVtYXSA9IDMuNSQkPC9wPg0KPHA+JCRFW1heMl0gPSAxXjJcY2RvdFxmcmFjezF9ezZ9ICsgMl4yXGNkb3RcZnJhY3sxfXs2fSArIFxjZG90cyArIDZeMlxjZG90XGZyYWN7MX17Nn0gPSAxNS4xNjY3JCQ8L3A+DQo8cD4kJFZhcihYKSA9IDE1LjE2NjcgLSAoMy41KV4yID0gMi45MTY3JCQ8L3A+DQo8cD4kJFNEKFgpID0gXHNxcnR7Mi45MTY3fSA9IDEuNzA3OCQkPC9wPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz5FeHBlY3RlZCBWYWx1ZSBkYW4gVmFyaWFuY2UgdW50dWsgQmVyYmFnYWkgRGlzdHJpYnVzaTwvaDM+DQo8dGFibGU+DQo8dGhlYWQ+DQo8dHI+DQo8dGg+RGlzdHJpYnVzaTwvdGg+DQo8dGg+RVtYXTwvdGg+DQo8dGg+VmFyKFgpPC90aD4NCjx0aD5TRChYKTwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0cj4NCjx0ZD5CZXJub3VsbGkoMC42KTwvdGQ+DQo8dGQ+MC42PC90ZD4NCjx0ZD4wLjI0PC90ZD4NCjx0ZD4wLjQ5PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+Qmlub21pYWwoMTAsMC41KTwvdGQ+DQo8dGQ+NTwvdGQ+DQo8dGQ+Mi41PC90ZD4NCjx0ZD4xLjU4PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+UG9pc3NvbigzKTwvdGQ+DQo8dGQ+MzwvdGQ+DQo8dGQ+MzwvdGQ+DQo8dGQ+MS43MzwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPlVuaWZvcm0oMCwxKTwvdGQ+DQo8dGQ+MC41PC90ZD4NCjx0ZD4xLzEyIOKJiCAwLjA4MzwvdGQ+DQo8dGQ+MC4yODk8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD5Ob3JtYWwoMCwxKTwvdGQ+DQo8dGQ+MDwvdGQ+DQo8dGQ+MTwvdGQ+DQo8dGQ+MTwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPkV4cG9uZW50aWFsKDIpPC90ZD4NCjx0ZD4wLjU8L3RkPg0KPHRkPjAuMjU8L3RkPg0KPHRkPjAuNTwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+DQo8L2Rpdj4NCiAgICAgIA0KICAgICAgDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCI+DQo8aDI+IFRyYW5zZm9ybWF0aW9ucyBvZiBSYW5kb20gVmFyaWFibGVzPC9oMj4NCjxoMz5MaW5lYXIgVHJhbnNmb3JtYXRpb25zPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkWSA9IGFYICsgYiQkPC9wPg0KPHA+JCRFW1ldID0gYUVbWF0gKyBiJCQ8L3A+DQo8cD4kJFZhcihZKSA9IGFeMiBWYXIoWCkkJDwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPGg0PkNvbnRvaDogS29udmVyc2kgU3VodTwvaDQ+DQo8cD48c3Ryb25nPlNjZW5hcmlvOjwvc3Ryb25nPiBYIH4gTm9ybWFsKDIwLCA0KSBzdWh1IGRhbGFtIENlbHNpdXM8L3A+DQo8cD48c3Ryb25nPlRyYW5zZm9ybWFzaTo8L3N0cm9uZz4gWSA9IDEuOFggKyAzMiAoa29udmVyc2kga2UgRmFocmVuaGVpdCk8L3A+DQo8cD4kJEVbWV0gPSAxLjggXHRpbWVzIDIwICsgMzIgPSA2OCQkPC9wPg0KPHA+JCRWYXIoWSkgPSAoMS44KV4yIFx0aW1lcyA0ID0gMTIuOTYkJDwvcD4NCjwvZGl2Pg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBKb2ludCBSYW5kb20gVmFyaWFibGVzPC9oMj4NCjxoMz5Kb2ludCBQcm9iYWJpbGl0eSBEaXN0cmlidXRpb25zPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkUChYID0geCwgWSA9IHkpIFxxdWFkIFx0ZXh0eyhEaXNjcmV0ZSl9JCQ8L3A+DQo8cD4kJGZfe1gsWX0oeCx5KSBccXVhZCBcdGV4dHsoQ29udGludW91cyl9JCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5Db250b2g6IFBlbGVtcGFyYW4gRHVhIERhZHU8L2g0Pg0KPHA+PHN0cm9uZz5YOjwvc3Ryb25nPiBIYXNpbCBkYWR1IHBlcnRhbWE8L3A+ICAgICAgICAgICAgICANCjxwPjxzdHJvbmc+WTo8L3N0cm9uZz4gSGFzaWwgZGFkdSBrZWR1YTwvcD4NCjxwPjxzdHJvbmc+Sm9pbnQgUE1GOjwvc3Ryb25nPiBQKFg9eCwgWT15KSA9IDEvMzYgdW50dWsgc2VtdWEgeCx5IOKIiCB7MSwyLDMsNCw1LDZ9PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCiAgICAgICAgDQo8ZGl2IGNsYXNzPSJjb250ZW50LWJveCI+DQo8aDI+IENvdmFyaWFuY2UgYW5kIENvcnJlbGF0aW9uPC9oMj4NCjxoMz5NZW5ndWt1ciBIdWJ1bmdhbiBBbnRhciBSYW5kb20gVmFyaWFibGVzPC9oMz4NCjxkaXYgY2xhc3M9ImZvcm11bGEtYm94Ij4NCjxwPiQkQ292KFgsWSkgPSBFWyhYIC0gXG11X1gpKFkgLSBcbXVfWSldJCQ8L3A+DQo8cD4kJFxyaG9fe1gsWX0gPSBcZnJhY3tDb3YoWCxZKX17XHNpZ21hX1ggXHNpZ21hX1l9JCQ8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxoND5JbnRlcnByZXRhc2kgQ29ycmVsYXRpb246PC9oND4NCjx1bD4NCjxsaT7PgSA9IDE6IFBlcmZlY3QgcG9zaXRpdmUgbGluZWFyIHJlbGF0aW9uc2hpcDwvbGk+DQo8bGk+z4EgPSAwOiBObyBsaW5lYXIgcmVsYXRpb25zaGlwPC9saT4NCjxsaT7PgSA9IC0xOiBQZXJmZWN0IG5lZ2F0aXZlIGxpbmVhciByZWxhdGlvbnNoaXA8L2xpPg0KPC91bD4NCjwvZGl2Pg0KPC9kaXY+DQogICAgICAgIA0KPGRpdiBjbGFzcz0iY29udGVudC1ib3giPg0KPGgyPiBSZWFsLVdvcmxkIEFwcGxpY2F0aW9uczwvaDI+DQogICAgICAgICAgICANCjxoMz4xLiBGaW5hbmNlIGFuZCBJbnZlc3RtZW50PC9oMz4NCjxkaXYgY2xhc3M9ImV4YW1wbGUtYm94Ij4NCjxwPjxzdHJvbmc+UG9ydGZvbGlvIFJldHVybnM6PC9zdHJvbmc+IFJhbmRvbSB2YXJpYWJsZSBtZXdha2lsaSByZXR1cm4gaW52ZXN0YXNpPC9wPg0KPHA+PHN0cm9uZz5SaXNrIE1hbmFnZW1lbnQ6PC9zdHJvbmc+IFZhcmlhbmNlIG1lbmd1a3VyIHZvbGF0aWxpdGFzPC9wPg0KPHA+PHN0cm9uZz5EaXZlcnNpZmljYXRpb246PC9zdHJvbmc+IENvcnJlbGF0aW9uIGFudGFyIGFzc2V0cyBtZW5lbnR1a2FuIHJpc2sgcmVkdWN0aW9uPC9wPg0KPC9kaXY+DQogICAgICAgICAgICANCjxoMz4yLiBRdWFsaXR5IENvbnRyb2w8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPHA+PHN0cm9uZz5EZWZlY3QgUmF0ZXM6PC9zdHJvbmc+IEJpbm9taWFsIHJhbmRvbSB2YXJpYWJsZTwvcD4NCjxwPjxzdHJvbmc+UHJvY2VzcyBDYXBhYmlsaXR5Ojwvc3Ryb25nPiBOb3JtYWwgZGlzdHJpYnV0aW9uIHVudHVrIHF1YWxpdHkgY2hhcmFjdGVyaXN0aWNzPC9wPg0KPHA+PHN0cm9uZz5Db250cm9sIENoYXJ0czo8L3N0cm9uZz4gTW9uaXRvcmluZyBleHBlY3RlZCB2YWx1ZSBkYW4gdmFyaWFuY2U8L3A+DQo8L2Rpdj4NCiAgICAgICAgICAgIA0KPGgzPjMuIE1hY2hpbmUgTGVhcm5pbmc8L2gzPg0KPGRpdiBjbGFzcz0iZXhhbXBsZS1ib3giPg0KPHA+PHN0cm9uZz5GZWF0dXJlIEVuZ2luZWVyaW5nOjwvc3Ryb25nPiBUcmFuc2Zvcm1hc2kgcmFuZG9tIHZhcmlhYmxlczwvcD4NCjxwPjxzdHJvbmc+UHJvYmFiaWxpc3RpYyBNb2RlbHM6PC9zdHJvbmc+IE1vZGVsaW5nIHVuY2VydGFpbnR5IGRlbmdhbiBkaXN0cmlidXRpb25zPC9wPg0KPHA+PHN0cm9uZz5CYXllc2lhbiBJbmZlcmVuY2U6PC9zdHJvbmc+IFByaW9yIGRhbiBwb3N0ZXJpb3IgZGlzdHJpYnV0aW9uczwvcD4NCjwvZGl2Pg0KPC9kaXY+DQoNCiMjIFJlZmVyZW5zaSBCdWt1ICAgDQoNCjxkaXYgY2xhc3M9ImNvbnRlbnQtYm94Ij4NCjxoMj5SZWZlcmVuc2kgQnVrdTwvaDI+DQo8ZGl2IGNsYXNzPSJyZWZlcmVuY2UtaXRlbSI+DQo8cCBjbGFzcz0icmVmZXJlbmNlLXRpdGxlIj4xLiAiSW50cm9kdWN0aW9uIHRvIFByb2JhYmlsaXR5IiBieSBKb3NlcGggSy4gQmxpdHpzdGVpbiBhbmQgSmVzc2ljYSBId2FuZzwvcD4NCjxwPkJ1a3Uga29tcHJlaGVuc2lmIHlhbmcgbWVuY2FrdXAga29uc2VwIHJhbmRvbSB2YXJpYWJsZXMgZGVuZ2FuIHBlbmRla2F0YW4geWFuZyBpbnR1aXRpZiBkYW4gYmFueWFrIGNvbnRvaCBhcGxpa2FzaS48L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InJlZmVyZW5jZS1pdGVtIj4NCjxwIGNsYXNzPSJyZWZlcmVuY2UtdGl0bGUiPjIuICJQcm9iYWJpbGl0eSBhbmQgU3RhdGlzdGljcyBmb3IgRW5naW5lZXJpbmcgYW5kIHRoZSBTY2llbmNlcyIgYnkgSmF5IEwuIERldm9yZTwvcD4NCjxwPkJ1a3UgdGVrcyBrbGFzaWsgZGVuZ2FuIGFwbGlrYXNpIHByYWt0aXMgcmFuZG9tIHZhcmlhYmxlcyBkYWxhbSBiaWRhbmcgdGVrbmlrIGRhbiBzYWlucy48L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InJlZmVyZW5jZS1pdGVtIj4NCjxwIGNsYXNzPSJyZWZlcmVuY2UtdGl0bGUiPjMuICJBIEZpcnN0IENvdXJzZSBpbiBQcm9iYWJpbGl0eSIgYnkgU2hlbGRvbiBSb3NzPC9wPg0KPHA+UmVmZXJlbnNpIG1lbmRhbGFtIHVudHVrIHRlb3JpIHByb2JhYmlsaXRhcyB0ZXJtYXN1ayB0cmFuc2Zvcm1hc2kgcmFuZG9tIHZhcmlhYmxlcyBkYW4gam9pbnQgZGlzdHJpYnV0aW9ucy48L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InJlZmVyZW5jZS1pdGVtIj4NCjxwIGNsYXNzPSJyZWZlcmVuY2UtdGl0bGUiPjQuICJTdGF0aXN0aWNhbCBJbmZlcmVuY2UiIGJ5IEdlb3JnZSBDYXNlbGxhIGFuZCBSb2dlciBMLiBCZXJnZXI8L3A+DQo8cD5CdWt1IGxhbmp1dGFuIHlhbmcgbWVtYmFoYXMgdGVvcmkgcmFuZG9tIHZhcmlhYmxlcyBzZWNhcmEgcmlnb3IgZGVuZ2FuIGFwbGlrYXNpIGRhbGFtIHN0YXRpc3RpY2FsIGluZmVyZW5jZS48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KDQojIyBLZXNpbXB1bGFuDQoNCjxkaXYgY2xhc3M9ImNvbmNsdXNpb24tYm94Ij4NCjxoMj4gS2VzaW1wdWxhbiBWaWRlbyA2IC0gUmFuZG9tIFZhcmlhYmxlczwvaDI+DQo8aDM+UG9pbi1Qb2luIFBlbnRpbmcgeWFuZyBEaXBlbGFqYXJpOjwvaDM+DQo8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsgZ2FwOiAyMHB4OyBtYXJnaW4tdG9wOiAyMHB4OyI+DQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC40KTsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyI+DQo8aDQ+IEZ1bmRhbWVudGFsIENvbmNlcHRzPC9oND4NCjx1bD4NCjxsaT5EZWZpbmlzaSBSYW5kb20gVmFyaWFibGVzPC9saT4NCjxsaT5EaXNjcmV0ZSB2cyBDb250aW51b3VzPC9saT4NCjxsaT5QTUYsIFBERiwgZGFuIENERjwvbGk+DQo8bGk+RXhwZWN0ZWQgVmFsdWUgZGFuIFZhcmlhbmNlPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQpOyBwYWRkaW5nOiAxNXB4OyBib3JkZXItcmFkaXVzOiA4cHg7Ij4NCjxoND4gQWR2YW5jZWQgVG9waWNzPC9oND4NCjx1bD4NCjxsaT5UcmFuc2Zvcm1hc2kgUmFuZG9tIFZhcmlhYmxlczwvbGk+DQo8bGk+Sm9pbnQgRGlzdHJpYnV0aW9uczwvbGk+DQo8bGk+Q292YXJpYW5jZSBkYW4gQ29ycmVsYXRpb248L2xpPg0KPGxpPk1vbWVudCBHZW5lcmF0aW5nIEZ1bmN0aW9uczwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC40KTsgcGFkZGluZzogMTVweDsgYm9yZGVyLXJhZGl1czogOHB4OyI+DQo8aDQ+IFByYWN0aWNhbCBBcHBsaWNhdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPkZpbmFuY2UgZGFuIFJpc2sgTWFuYWdlbWVudDwvbGk+DQo8bGk+UXVhbGl0eSBDb250cm9sPC9saT4NCjxsaT5NYWNoaW5lIExlYXJuaW5nPC9saT4NCjxsaT5TY2llbnRpZmljIFJlc2VhcmNoPC9saT4NCjwvdWw+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+DQo8cD48c3Ryb25nPlJhbmRvbSB2YXJpYWJsZXMgbWVtYmVyaWthbiBiYWhhc2EgbWF0ZW1hdGlzIHlhbmcgcG93ZXJmdWwgdW50dWsgbWVtb2RlbGthbiBrZXRpZGFrcGFzdGlhbiBkYW4gdmFyaWFiaWxpdGFzLCBtZW1iZW50dWsgZm91bmRhdGlvbiB1bnR1ayBzdGF0aXN0aWNhbCBpbmZlcmVuY2UsIG1hY2hpbmUgbGVhcm5pbmcsIGRhbiBkZWNpc2lvbiBtYWtpbmcgdW5kZXIgdW5jZXJ0YWludHkuPC9zdHJvbmc+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCiAgICAgICAg