Email             :
RPubs            : https://rpubs.com/brigitatiaraem/
Jurusan          : Statistika
Address         : ARA Center, Matana University Tower
                         Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.


1 Insurance Portfolio Management including Reinsurance

Portofolio asuransi adalah kumpulan kontrak asuransi. Untuk membantu mengelola ketidakpastian portofolio, bab ini akan membahas mengenai:

  1. Menghitung kewajiban yang luar biasa besar dengan memeriksa bagian ekor dari distribusi,

  2. Menghitung risiko secara keseluruhan dengan memperkenalkan ringkasan yang dikenal sebagai ukuran risiko, dan

  3. Membahas opsi-opsi penyebaran risiko portofolio melalui reasuransi, yaitu pembelian proteksi asuransi oleh perusahaan asuransi.

1.1 10.1 Introduction to Insurance Portfolios

Kontrak merupakan perjanjian antara pemegang polis dan perusahaan asuransi. Penanggung, dan mengelola, portofolio yang merupakan kumpulan kontrak. Seperti di bidang keuangan lainnya, ada pilihan pengambilan keputusan manajemen yang hanya terjadi di tingkat portofolio. Misalnya, pengambilan keputusan strategis tidak terjadi di tingkat kontrak. Itu terjadi di ruang konferensi, di mana manajemen meninjau data yang tersedia dan mungkin mengarahkan arah baru. Dari perspektif portofolio, perusahaan asuransi ingin melakukan perencanaan kapasitas, menetapkan kebijakan manajemen, dan menyeimbangkan bauran produk yang dipesan untuk meningkatkan pendapatan sambil mengendalikan volatilitas.

Secara konseptual bahwa perusahaan asuransi tidak lebih dari sebuah kumpulan atau portofolio, kontrak asuransi. Pada Bab 5 telah mempelajari tentang pemodelan portofolio asuransi sebagai jumlah kontrak individu berdasarkan asumsi independensi antar kontrak. Karena pentingnya hal tersebut, bab ini berfokus langsung pada distribusi portofolio.

  1. Portofolio asuransi (Kumpulan, atau agregasi, kontrak asuransi) mewakili kewajiban perusahaan asuransi dengan membahas probabilitas hasil yang besar dengan menggunakan gagasan distribusi heavy-tail di Bagian 10.2.

  2. Portofolio asuransi mewakili kewajiban perusahaan sehingga perusahaan asuransi menyimpan aset dalam jumlah yang setara untuk memenuhi kewajiban tersebut. Ukuran risiko yang diperkenalkan pada Bagian 10.3, meringkas distribusi portofolio asuransi dan ukuran ringkasan ini digunakan untuk mengukur jumlah aset yang perlu dipertahankan oleh perusahaan asuransi untuk memenuhi kewajiban.

  3. Pada Bagian 3.4 mempelajari mekanisme yang digunakan pemegang polis untuk menyebarkan risiko seperti deductible dan batasan polis. Dengan cara yang sama, perusahaan asuransi menggunakan mekanisme yang sama untuk menyebarkan risiko portofolio. Mereka membeli perlindungan risiko dari reasuradur, sebuah perusahaan asuransi untuk perusahaan asuransi.4.

1.2 10.2 Tails of Distributions

Pada subab ini akan membahas mengenai:

  1. Menggambarkan distribusi ekor berat secara intuitif.

  2. Mengklasifikasikan berat ekor distribusi berdasarkan momen.

  3. Membandingkan ekor dari dua distribusi.

Pada tahun 1998, hujan es turun di Ontario bagian timur, barat daya Quebec dan berlangsung selama enam hari. Peristiwa ini merupakan dua kali lipat dari curah hujan yang pernah terjadi pada badai es sebelumnya dan mengakibatkan bencana yang menghasilkan lebih dari 840.000 klaim asuransi. Jumlah ini adalah 20 lebih banyak daripada klaim yang disebabkan oleh Badai Andrew. Bencana ini menyebabkan sekitar 1,44 miliar dolar Kanada dalam penyelesaian asuransi yang merupakan beban kerugian tertinggi dalam sejarah Kanada. Ini bukan contoh yang terisolasi dengan peristiwa bencana serupa yang menyebabkan kerugian asuransi yang ekstrim adalah Badai Harvey, Superstorm Sandy, gempa bumi dan tsunami Jepang tahun 2011, dan lain sebagainya.

Dalam konteks asuransi, beberapa kerugian besar yang menimpa portofolio dan kemudian dikonversi menjadi klaim biasanya mewakili bagian terbesar dari ganti rugi yang dibayarkan oleh perusahaan asuransi. Kerugian juga disebut ‘ekstrem’, dimodelkan secara kuantitatif oleh ekor dari distribusi probabilitas terkait. Misalnya, periode tekanan pada keuangan dapat muncul dengan frekuensi yang lebih tinggi dari yang diharapkan, dan kerugian asuransi dapat terjadi dengan tingkat keparahan yang lebih buruk. Oleh karena itu, studi tentang perilaku probabilistik pada bagian ekor model aktuaria sangat penting dalam kerangka kerja modern manajemen risiko kuantitatif. Untuk alasan ini, bagian ini dikhususkan untuk pengenalan beberapa gagasan matematika yang mencirikan bobot ekor variabel acak.

Secara formal, definisikan X sebagai kewajiban (acak) yang muncul dari kumpulan (portofolio) kontrak asuransi. (Pada bab-bab sebelumnya telah menggunakan S untuk kerugian agregat). Pada bagian ini mempelajari ekor kanan dari distribusi X yang merepresentasikan terjadinya kerugian besar. Secara informal, sebuah variabel acak dikatakan berekor berat jika probabilitas tinggi diberikan pada nilai yang besar. Perhatikan bahwa ini tidak berarti bahwa densitas probabilitas/fungsi massa meningkat ketika nilai X menuju tak terhingga. Memang untuk variabel acak bernilai riil, pdf/pmf harus berkurang hingga tak terhingga untuk menjamin probabilitas total sama dengan satu. Namun, yang menjadi perhatian adalah laju peluruhan pdf/pmf. Hasil yang tidak diinginkan lebih mungkin terjadi pada portofolio asuransi yang digambarkan oleh variabel acak kerugian yang memiliki ekor yang lebih berat (kanan). Bobot ekor dapat berupa konsep absolut atau relatif. Khususnya, untuk yang pertamadapat menganggap variabel acak memiliki ekor yang berat jika sifat matematis tertentu dari distribusi probabilitas terpenuhi. Maka dapat dikatakan ekor dari satu distribusi lebih berat/ringan dari yang lain jika beberapa ukuran ekor lebih besar/kecil.

Beberapa pendekatan kuantitatif telah diusulkan untuk mengklasifikasikan dan membandingkan bobot ekor. Di antara sebagian besar pendekatan ini, fungsi kelangsungan hidup berfungsi sebagai blok bangunan. Berikut ini merupakan memperkenalkan dua metode klasifikasi ekor yang sederhana namun berguna, yang keduanya didasarkan pada perilaku fungsi kelangsungan hidup X.

1.2.1 Classification Based on Moments

Salah satu cara untuk mengklasifikasikan bobot ekor dari suatu distribusi adalah dengan menilai keberadaan momen-momen sesaae. Karena tujuan utama terletak pada ekor kanan distribusi, maka mengasumsikan variabel acak kewajiban atau kerugian \(X\) bernilai positif. Pada awalnya, momen sesaat ke-k dari peubah acak kontinu \(X\) yang diperkenalkan pada Bagian 3.1, dapat dihitung sebagai berikut.

\[\mu_k' = \int_0^{\infty} x^k f(x) ~dx = k \int_0^{\infty} x^{k-1} S(x) ~dx, \\\]

di mana \(S(\cdot)\) menyatakan fungsi survival dari \(X\) . Ungkapan ini menekankan bahwa keberadaan momen mentah bergantung pada perilaku asimtotik dari fungsi survival di tak terhingga. Yakni, semakin cepat fungsi survival meluruh ke nol, semakin tinggi orde momen berhingga \((k)\) yang dimiliki oleh variabel acak terkait. Anda dapat menafsirkan \(k^{\ast}\) sebagai nilai terbesar dari \(k\) sehingga momennya terbatas. Secara formal, definisikan \(k^{\ast}=\sup\{k > 0:\mu_k'<\infty \}\) , dimana sup mewakili supremum.

Definisi 10.1. Pertimbangkan variabel acak kerugian non-negatif \(X\) .

  1. Jika semua momen baku positif ada, yaitu orde maksimal dari momen berhingga \(k^{\ast}=\infty\) , maka \(X\) dikatakan berekor ringan berdasarkan metode momen.

  2. Jika \(k^{\ast} < \infty\), maka \(X\) dikatakan berekor berat (dikatakan berekor berat jika probabilitas tinggi diberikan pada nilai yang besar) berdasarkan metode momen.

  3. Selain itu, untuk dua variabel acak rugi positif \(X_1\) dan \(X_2\) dengan orde maksimal momen masing-masing \(k^{\ast}_1\) dan \(k^{\ast}_1\), dengan mengatakan \(X_1\) memiliki ekor (kanan) yang lebih berat daripada \(X_2\) jika \(k^{\ast}_1\leq k^{\ast}_2\).

bagian pertama dari Definisi 10.1 adalah konsep absolut dari bobot ekor, sedangkan bagian kedua adalah konsep relatif dari bobot ekor yang membandingkan ekor (kanan) di antara dua distribusi. Selanjutnya, kami menyajikan beberapa contoh yang mengilustrasikan aplikasi metode berbasis momen untuk membandingkan bobot ekor.

contoh 10.2.1. Sifat ekor ringan dari distribusi gamma.

Misalkan \(X\sim gamma(\alpha,\theta)\), dengan \(\alpha>0\) dan \(\theta>0\) , maka untuk semua \(k>0\) , tunjukkan bahwa \(\mu_k' < \infty\).

\[\begin{eqnarray*} \mu_k' &=& \int_0^{\infty} x^k \frac{x^{\alpha-1} e^{-x/\theta}}{\Gamma(\alpha) \theta^{\alpha}} dx \\ &=& \int_0^{\infty} (y\theta)^k \frac{(y\theta)^{\alpha-1} e^{-y}}{\Gamma(\alpha) \theta^{\alpha}} \theta dy \\ &=& \frac{\theta^k}{\Gamma(\alpha)} \Gamma(\alpha+k) < \infty. \end{eqnarray*}\]

karena semua momen positif ada, yaitu \(k^{\ast}=\infty\), sesuai dengan metode klasifikasi berbasis momen pada Definisi 10.1, maka distribusi gamma berekor ringan

Contoh 10.2.2. Sifat ekor ringan dari distribusi Weibull.

Misalkan \(X\sim Weibull(\theta,\tau)\), dengan \(\theta>0\) dan \(\tau>0\) , maka untuk semua \(k>0\) , tunjukkan bahwa \(\mu_k' < \infty\).

\[\begin{eqnarray*} \mu_k' &=& \int_0^{\infty} x^k \frac{\tau x^{\tau-1} }{\theta^{\tau}} e^{-(x/\theta)^{\tau}}dx \\ &=& \int_0^{\infty} \frac{ y^{k/\tau} }{\theta^{\tau}} e^{-y/\theta^{\tau}}dy \\ &=& \theta^{k} \Gamma(1+k/\tau) < \infty. \end{eqnarray*}\]

Sekali lagi, karena adanya semua momen positif, distribusi Weibull berekor ringan.

distribusi gamma dan Weibull digunakan secara luas dalam praktik aktuaria. Aplikasi dari kedua distribusi ini sangat luas, termasuk, namun tidak terbatas pada, pemodelan tingkat keparahan klaim asuransi, penilaian solvabilitas, pencadangan kerugian, perkiraan risiko agregat, rekayasa keandalan, dan analisis kegagalan. Sejauh ini kami telah melihat dua contoh penggunaan metode berbasis momen untuk menganalisis distribusi ekor ringan. Kami mendokumentasikan contoh distribusi ekor berat sebagai berikut.

Contoh 10.2.3. Sifat ekor yang berat dari distribusi Pareto.

Misalkan \(X\sim Pareto(\alpha,\theta)\) , dengan \(\alpha>0\) dan \(\theta>0\) , maka untuk \(k>0\)

\[\begin{eqnarray*} \mu_k^{'} &=& \int_0^{\infty} x^k \frac{\alpha \theta^{\alpha}}{(x+\theta)^{\alpha+1}} dx \\ &=& \alpha \theta^{\alpha} \int_{\theta}^{\infty} (y-\theta)^k {y^{-(\alpha+1)}} dy. \end{eqnarray*}\]

mempertimbangkan integrasi serupa:

\[\begin{eqnarray*} g_k=\int_{\theta}^{\infty} {y^{k-\alpha-1}} dy=\left\{ \begin{array}{ll} <\infty, & \hbox{for } k<\alpha;\\ =\infty, & \hbox{for } k\geq \alpha. \end{array} \right. \end{eqnarray*}\]

\[\lim_{y\rightarrow \infty} \frac{(y-\theta)^k {y^{-(\alpha+1)}}}{y^{k-\alpha-1}}=\lim_{y\rightarrow \infty} (1-\theta/y)^{k}=1.\]

Penerapan teorema perbandingan limit untuk integral tak tentu menghasilkan μ′k terbatas jika dan hanya jika gk terbatas. Oleh karena itu, kita dapat menyimpulkan bahwa momen mentah dari variabel acak Pareto hanya ada sampai k < α , yaitu, k∗ = α , dan dengan demikian distribusinya berekor berat. Terlebih lagi, orde maksimal dari momen berhingga hanya bergantung pada parameter bentuk α dan merupakan fungsi yang meningkat dari α . Dengan kata lain, berdasarkan metode momen, bobot ekor dari variabel acak Pareto hanya dimanipulasi oleh α - semakin kecil nilai α , semakin berat bobot ekornya. Karena k∗<∞ , ekor dari distribusi Pareto lebih berat dibandingkan dengan distribusi gamma dan Weibull.

kami menyimpulkan bagian ini dengan diskusi terbuka tentang keterbatasan metode berbasis momen. Meskipun implementasinya sederhana dan interpretasi intuitif, ada beberapa keadaan tertentu di mana penerapan metode berbasis momen tidak cocok. Pertama, untuk model probabilistik yang lebih rumit, momen mentah ke-k mungkin tidak mudah untuk diperoleh, dan dengan demikian identifikasi urutan maksimal dari momen hingga dapat menjadi tantangan. Kedua, metode berbasis momen tidak sesuai dengan bagian utama dari teori heavy tail yang sudah mapan dalam literatur. Secara khusus, keberadaan fungsi pembangkit momen merupakan metode yang paling populer untuk mengklasifikasikan heavy tail versus light tail di dalam komunitas aktuaris akademis. Namun, untuk beberapa variabel acak seperti variabel acak lognormal, fungsi pembangkit momennya tidak ada bahkan semua momen positifnya terbatas. Dalam kasus ini, penerapan metode berbasis momen dapat menghasilkan penilaian bobot ekor yang berbeda. Ketiga, ketika kita perlu membandingkan bobot ekor antara dua distribusi berekor ringan yang memiliki semua momen positif, metode berbasis momen tidak lagi informatif (lihat, misalnya, Contoh 10.2.1 dan 10.2.2).

1.2.2 Comparison Based on Limiting Tail Behavior

Untuk mengatasi masalah-masalah yang disebutkan di atas pada metode klasifikasi berbasis momen, sebuah pendekatan alternatif untuk membandingkan bobot ekor adalah dengan secara langsung mempelajari perilaku pembatas dari fungsi-fungsi survival.

Definisi 10.2. Untuk dua variabel acak \(X\) dan \(Y\) , misalkan

\[\gamma=\lim_{t\rightarrow \infty}\frac{S_X(t)}{S_Y(t)}.\]

Dengan :

  1. \(X\) memiliki ekor kanan yang lebih berat daripada \(Y\) jika \(\gamma=\infty\);

  2. \(X\) dan \(Y\) secara proporsional ekuivalen pada ekor kanan jika \(\gamma =c \in (0, \infty)\);

  3. \(X\) memiliki ekor kanan yang lebih ringan daripada \(Y\) jika \(\gamma=0\).

Contoh 10.2.4. Perbandingan distribusi Pareto dan distribusi Weibull.

Misalkan \(X\sim Pareto(\alpha, \theta)\) dan \(Y\sim Weibull(\tau, \theta)\), untuk \(\alpha>0\), \(\tau>0\), dan \(\theta>0\). Tunjukkan bahwa Pareto memiliki ekor kanan yang lebih berat daripada Weibull.

\[\begin{eqnarray*} \lim_{t\rightarrow \infty}\frac{S_X(t)}{S_Y(t)} &=& \lim_{t\rightarrow \infty}\frac{(1+t/\theta)^{-\alpha}}{\exp\{-(t/\theta)^{\tau}\}} \\ &=& \lim_{t\rightarrow \infty}\frac{\exp\{t/\theta^{\tau} \}}{(1+t^{1/\tau}/\theta)^{\alpha}} \\ &=& \lim_{t\rightarrow \infty}\frac{\sum_{i=0}^{\infty}\left(\frac{t}{\theta^{\tau}}\right)^{i}/i!}{(1+t^{1/\tau}/\theta)^{\alpha}}\\ &=& \lim_{t\rightarrow \infty} \sum_{i=0}^{\infty} \left(t^{-i/\alpha}+\frac{t^{(1/\tau-i/\alpha)}}{\theta} \right)^{-\alpha}/\theta^{\tau i}i!\\ &=& \infty. \end{eqnarray*}\]

Oleh karena itu, distribusi Pareto memiliki ekor yang lebih berat daripada distribusi Weibull. Kita juga dapat menyadari bahwa eksponensial mencapai tak terhingga lebih cepat daripada polinomial, oleh karena itu, batas yang disebutkan di atas haruslah tak terhingga.

untuk beberapa distribusi yang fungsi-fungsi kelangsungan hidupnya tidak dapat diekspresikan secara eksplisit, kita dapat menggunakan rumus alternatif berikut ini:

\[\begin{eqnarray*} \lim_{t\to \infty} \frac{S_X(t)}{S_Y(t)} &=& \lim_{t \to \infty} \frac{S_X^{'}(t)}{S_Y^{'}(t)} \\ &=& \lim_{t \to \infty} \frac{-f_X(t)}{-f_Y(t)}\\ &=& \lim_{t\to \infty} \frac{f_X(t)}{f_Y(t)}. \end{eqnarray*}\]

mengingat bahwa fungsi kepadatannya ada. Ini adalah aplikasi dari Aturan L’Hôpital dari kalkulus

Contoh 10.2.5. Perbandingan distribusi Pareto dengan distribusi gamma.

Misalkan \(X\sim Pareto(\alpha, \theta)\) dan \(Y\sim gamma(\alpha, \theta)\), untuk \(\alpha>0\) dan \(\theta>0\) . Tunjukkan bahwa Pareto memiliki ekor kanan yang lebih berat daripada gamma.

\[\begin{eqnarray*} \lim_{t\to \infty} \frac{f_{X}(t)}{f_{Y}(t)} &=& \lim_{t \to \infty} \frac{\alpha \theta^{\alpha} (t+ \theta)^{-\alpha-1}}{t^{\tau-1} e^{-t/\lambda} \lambda^{-\tau} \Gamma(\tau)^{-1}} \\ &\propto& \lim_{t\to \infty} \frac{e^{t/\lambda}}{(t+\theta)^{\alpha+1} t^{\tau-1}} \\ &=& \infty, \end{eqnarray*}\]

karena eksponensial menuju tak terhingga lebih cepat daripada polinomial.

1.3 10.3 Risk Measures

Materi ini akan mempelajari :

  • Mendefinisikan ide koherensi dan menentukan apakah suatu ukuran risiko koheren atau tidak.

  • Mendefinisikan nilai-at-risiko dan menghitung kuantitas ini untuk distribusi tertentu.

  • Mendefinisikan nilai-at-risiko ekor dan menghitung besaran ini untuk distribusi tertentu.

Dapat menyatakan bahwa risiko yang terkait dengan satu distribusi lebih berbahaya (secara asimtotik) dibandingkan distribusi lainnya jika ekornya lebih berat. Namun, mengetahui bahwa satu risiko lebih berbahaya (secara asimtotik) daripada risiko lainnya mungkin tidak memberikan informasi yang cukup untuk tujuan manajemen risiko yang canggih, dan sebagai tambahan, kita juga tertarik untuk mengukur seberapa besar risiko tersebut. Faktanya, besarnya risiko yang terkait dengan distribusi kerugian yang diberikan merupakan input penting untuk banyak aplikasi asuransi, seperti penentuan harga aktuaria, pemesanan, lindung nilai, pengawasan peraturan asuransi, dan sebagainya.

1.3.1 10.3.1 Coherent Risk Measures

Untuk membandingkan besarnya risiko dengan cara yang praktis, kami mencari fungsi yang memetakan variabel acak kerugian yang diminati ke nilai numerik yang menunjukkan tingkat risiko, yang disebut ukuran risiko. Secara matematis, ukuran risiko secara sederhana meringkas fungsi distribusi variabel acak sebagai satu angka. Dua ukuran risiko sederhana adalah rata-rata \(\mathrm{E}[X]\) dan deviasi standar \(\mathrm{SD}(X)=\sqrt{\mathrm{Var}(X)}\). Contoh klasik lain dari ukuran risiko termasuk prinsip deviasi standar

\[ \begin{equation} H_{\mathrm{SD}}(X)=\mathrm{E}[X]+\alpha \mathrm{SD}(X),\text{ for } \alpha\geq 0, \tag{10.1} \end{equation} \]

dan prinsip varians

\[H_{\mathrm{Var}}(X)=\mathrm{E}[X]+\alpha \mathrm{Var}(X),\text{ for } \alpha\geq 0.\]

Untuk memeriksa bahwa semua fungsi yang disebutkan di atas dapat menggunakan ukuran risiko di mana dengan memasukkan variabel acak kerugian dan fungsi-fungsi tersebut menghasilkan nilai numerik. Dengan catatan yang berbeda, fungsi \(H^{\ast}(X)=\alpha X^{\beta}\) untuk setiap \(\alpha,\beta\neq 0\) yang bernilai riil, β≠0 bukan merupakan ukuran risiko karena \(H^{\ast}\) menghasilkan variabel acak lain dan bukan nilai numerik tunggal.

Karena ukuran risiko adalah ukuran skalar yang bertujuan untuk menggunakan nilai numerik tunggal untuk menggambarkan sifat stokastik dari variabel acak kerugian, maka tidak mengherankan jika tidak ada ukuran risiko yang dapat menangkap semua informasi risiko dari variabel acak yang terkait. Oleh karena itu, ketika mencari ukuran risiko yang berguna, dalam mengingat bahwa ukuran tersebut setidaknya

  • harus dapat ditafsirkan secara praktis;
  • dapat dihitung dengan mudah; dan
  • mampu merefleksikan informasi risiko yang paling penting yang mendasari distribusi kerugian.

Beberapa ukuran risiko telah dikembangkan dalam literatur. Namun, tidak ada ukuran risiko terbaik yang dapat mengungguli yang lain, dan pemilihan ukuran risiko yang tepat sangat bergantung pada pertanyaan aplikasi yang dihadapi. Dalam hal ini, sangat penting untuk menekankan bahwa risiko adalah konsep yang subyektif, dan dengan demikian, bahkan dengan masalah yang sama, ada berbagai pendekatan untuk menilai risiko. Namun, untuk banyak aplikasi manajemen risiko, ada kesepakatan luas bahwa ukuran risiko yang masuk akal secara ekonomi harus memenuhi empat aksioma utama yang akan kami jelaskan secara rinci selanjutnya. Ukuran risiko yang memenuhi aksioma-aksioma ini disebut sebagai ukuran risiko yang koheren.

Pertimbangkan sebuah ukuran risiko \(H(\cdot)\). Ukuran ini dikatakan sebagai ukuran risiko yang koheren untuk dua variabel acak \(X\) dan \(Y\) jika aksioma-aksioma berikut ini terpenuhi.

  • Aksioma 1. Subaditifitas:

\(H(X+Y)\leq H(X)+H(Y)\) Implikasi ekonomi dari aksioma ini adalah bahwa manfaat diversifikasi ada jika risiko-risiko yang berbeda digabungkan.

  • Aksioma 2. Monotonisitas: jika \(Pr[X≤Y]=1\). maka H(X)≤H(Y). Ingat bahwa X dan Y adalah variabel acak yang mewakili kerugian, implikasi ekonomi yang mendasarinya adalah bahwa kerugian yang lebih tinggi pada dasarnya mengarah ke tingkat risiko yang lebih tinggi.

  • Aksioma 3. Homogenitas positif: \(H(cX) = cH(X)\) untuk setiap konstanta positif c. Implikasi ekonomi yang potensial dari aksioma ini adalah bahwa ukuran risiko harus independen dari unit moneter yang digunakan untuk mengukur risiko. Sebagai contoh, misalkan c adalah nilai tukar mata uang antara dolar AS dan dolar Kanada, maka risiko kerugian acak yang diukur dalam satuan dolar AS (yaitu, X) dan dolar Kanada (yaitu, \(cX\)) seharusnya hanya berbeda sampai dengan nilai tukar c (yaitu, \(cH(x)=H(cX)\)).

  • Aksioma 4. Ketidakvariasian terjemahan:
    \(H(X + c) = H(X) + c\) untuk setiap konstanta positif c. Jika konstanta c diinterpretasikan sebagai uang tunai bebas risiko dan X adalah portofolio asuransi, maka penambahan uang tunai ke dalam portofolio hanya meningkatkan risiko portofolio sebesar jumlah uang tunai.

Memverifikasi sifat koheren untuk beberapa ukuran risiko bisa sangat mudah, tetapi terkadang sangat menantang. Sebagai contoh, adalah hal yang mudah untuk memeriksa apakah rata-rata adalah ukuran risiko yang koheren.

SPECIAL CASE Rata-rata adalah ukuran risiko yang koheren.

Untuk setiap pasangan variabel acak X dan Y yang memiliki mean berhingga dan konstanta \(c>0\)

  • validasi subaditifitas: \(E[X+Y]=E[X]+E[Y]\)

  • validasi monotonitas: jika \(Pr[X≤Y]=1\) maka \(E[X]≤E[Y]\)

  • validasi homogenitas positif: \(E[cX]=cE[X]\)

  • validasi invariansi penerjemahan: \(E[X+c]=E[X]+c\)

Untuk melihat bahwa deviasi standar bukanlah ukuran risiko yang koheren, mulailah dengan memeriksa apakah deviasi standar memenuhi

Verification of the Special Case

Untuk melihat bahwa deviasi standar bukanlah ukuran risiko yang koheren, mulailah dengan memeriksa apakah deviasi standar memenuhi

  • validasi subaditifitas:

\[ \begin{eqnarray*} \mathrm{SD}[X+Y]&=&\sqrt{\mathrm{Var}(X)+\mathrm{Var}(Y)+2\mathrm{Cov}(X,Y)}\\ &\leq& \sqrt{\mathrm{SD}(X)^2+\mathrm{SD}(Y)^2+2\mathrm{SD}(X)\mathrm{SD}(Y)}\\ &=& \mathrm{SD}(X)+\mathrm{SD}(Y); \end{eqnarray*} \]

  • validasi homogenitas positif:

\(\mathrm{SD}[cX]=c~\mathrm{SD}[X]\)

Namun, deviasi standar tidak memenuhi sifat invariansi terjemahan karena untuk setiap konstanta positif c

\(\mathrm{SD}(X+c)=\mathrm{SD}(X)<\mathrm{SD}(X)+c.\)

Selain itu, deviasi standar juga tidak memenuhi sifat monotonitas. Untuk melihat hal ini, pertimbangkan dua variabel acak berikut:

\[ \begin{eqnarray} X=\left\{ \begin{array}{ll} 0, & \hbox{with probability $0.25$;} \\ 4, & \hbox{with probability $0.75$,} \end{array} \right. \tag{10.2} \end{eqnarray} \]

dan Y adalah variabel acak yang merosot sedemikian sehingga

\[ \begin{eqnarray} \Pr[Y = 4] = 1. \tag{10.3} \end{eqnarray} \]

Dapat Memeriksa \(\Pr[X\leq Y]=1\), tapi

\[ \mathrm{SD}(X)=\sqrt{4^2\cdot 0.25\cdot 0.75}=\sqrt{3}>\mathrm{SD}(Y)=0 \]

Special Case. The Standard Deviation Principle (10.1) is a Coherent Risk Measure.

Untuk tujuan ini, untuk sebuah \(α>0\) dapat meriksa empat aksioma untuk \(H_{SD}(X+Y)\) satu per satu:

  • validasi subaditifitas :

\[ \begin{eqnarray*} H_{\mathrm{SD}}(X+Y) &=& \mathrm{E}[X+Y]+\alpha \mathrm{SD}(X+Y) \\ &\leq& \mathrm{E}[X]+\mathrm{E}[Y]+\alpha [\mathrm{SD}(X) +\mathrm{SD}(Y)]\\ &=& H_{\mathrm{SD}}(X)+ H_{\mathrm{SD}}(Y); \end{eqnarray*} \] - validasi homogenitas positif:

\(H_{\mathrm{SD}}(cX)=c\mathrm{E}[X]+c\alpha\mathrm{SD}(X)=cH_{\mathrm{SD}}(X);\)

  • validasi invariansi terjemahan:

\(H_{\mathrm{SD}}(X+c)=\mathrm{E}[X]+c+\alpha\mathrm{SD}(X)=H_{\mathrm{SD}}(X)+c.\)

Hanya untuk memverifikasi properti monotonitas, yang mungkin terpenuhi atau tidak, tergantung pada nilai α. Untuk melihat hal ini, mempertimbangkan rumus diatas di mana \(Pr[X≤Y]=1\). Dengan memisalkan \(\alpha=0.1\cdot \sqrt{3}\) maka \(H_{\mathrm{SD}}(X)=3+0.3=3.3< H_{\mathrm{SD}}(Y)=4\) dan kondisi monotonitas terpenuhi. Di sisi lain, misalkan \(\alpha=\sqrt{3}\). maka \(H_{\mathrm{SD}}(X)=3+3=6> H_{\mathrm{SD}}(Y)=4\) dan kondisi monotonitas tidak terpenuhi. Lebih tepatnya, dengan menetapkan

\[ H_{\mathrm{SD}}(X) = 3+\alpha\sqrt{3} \leq4= H_{\mathrm{SD}}(Y) \]

Dapt menemukan bahwa kondisi monotonitas hanya terpenuhi untuk \(0\leq\alpha\leq 1/\sqrt{3}\) dan dengan demikian prinsip deviasi standar \(H_{SD}\) adalah koheren. Hasil ini tampak sangat intuitif bagi kami karena prinsip deviasi standar \(H_{SD}\) adalah kombinasi linier dari dua ukuran risiko yang satu koheren dan yang lainnya tidak koheren. Jika \(\alpha\leq 1/\sqrt{3}\) maka ukuran yang koheren mendominasi ukuran yang tidak koheren, sehingga ukuran yang dihasilkan \(H_{SD}\) yang dihasilkan adalah koheren dan sebaliknya. Perlu dicatat bahwa kesimpulan di atas tidak dapat digeneralisasi untuk setiap pasangan variabel acak X dan Y.

Literatur mengenai ukuran risiko telah berkembang pesat dalam hal popularitas dan kepentingannya. Dalam dua subbab berikutnya, kami memperkenalkan dua indeks yang baru-baru ini mendapatkan perhatian yang belum pernah terjadi sebelumnya di antara para ahli teori, praktisi, dan regulator. Kedua indeks tersebut adalah Value-at-Risk (\(VaR\)) dan Tail Value-at-Risk (\(TVaR\)). Alasan ekonomi di balik dua ukuran risiko populer ini mirip dengan metode klasifikasi ekor yang diperkenalkan pada bagian sebelumnya, yang dengannya kami berharap dapat menangkap risiko kerugian ekstrem yang diwakili oleh ekor distribusi.

1.3.2 10.3.2 Value-at-Risk

Dengan mempertimbangkan variabel acak kerugian asuransi \(X\) . Ukuran nilai-at-risiko dari \(X\) dengan tingkat kepercayaan \(q∈(0,1)\) dirumuskan sebagai

\[ \begin{eqnarray} VaR_q[X]=\inf\{x:F_X(x)\geq q\}. \tag{10.4} \end{eqnarray} \]

Di sini, \(inf\) adalah operator infimum sehingga ukuran \(VaR\) menghasilkan nilai terkecil dari \(X\) sedemikian rupa sehingga cdf yang terkait pertama kali melebihi atau sama dengan q .

Selanjutnya dapat menginterpretasikan VaR dalam konteks aplikasi aktuarial. VaR adalah ukuran dari ‘kerugian maksimal’ yang mungkin terjadi pada produk asuransi/portfolio atau investasi berisiko, terjadi sebesar q × 100% waktu, selama periode waktu tertentu (biasanya satu tahun). Misalnya, jika X adalah variabel acak kerugian tahunan dari produk asuransi, VaR0.95 [X] = 100 juta berarti tidak lebih dari 5% peluang bahwa kerugian akan melebihi 100 juta selama satu tahun tertentu. Karena interpretasi yang bermakna ini, VaR telah menjadi standar industri untuk mengukur risiko keuangan dan asuransi sejak tahun 1990-an. Konglomerasi keuangan, regulator, dan akademisi sering menggunakan VaR untuk mengukur modal risiko, memastikan kepatuhan dengan aturan regulasi, dan mengungkapkan posisi keuangan.

1.3.2.1 Example 10.3.1. VaR for the exponential distribution

Dengan mempertimbangkan variabel acak kerugian asuransi X dengan distribusi eksponensial yang memiliki parameter \(θ\) untuk \(θ>0\), maka cdf dari \(X\) diberikan oleh

\[ F_X(x)=1-e^{-x/\theta}, \text{ for } x>0. \]

Mencari ekspresi bentuk tertutup untuk VaR

JAWAB

Karena distribusi eksponensial adalah distribusi kontinu, nilai terkecil di mana cdf pertama kali melebihi atau sama dengan \(q ∈ (0,1)\) harus berada pada titik xq yang memenuhi.

\(q=F_X(x_q)=1-\exp\{-x_q/\theta \}.\)

Maka

\(VaR_q[X]=F_X^{-1}(q)=-\theta[\log(1-q)].\)

Hasil yang didapat pada rumus diatas dapat digeneralisasikan untuk variabel acak kontinu apa pun yang memiliki cdf yang ketat meningkat. Secara khusus, \(VaR\) dari variabel acak kontinu mana pun adalah kebalikan dari cdf yang sesuai. Mari kita pertimbangkan contoh lain dari variabel acak kontinu yang memiliki dukungan dari negatif tak terhingga hingga positif tak terhingga.

1.3.2.2 Example 10.3.2. VaR for the normal distribution.

Dengan mempertimbangkan variabel acak kerugian asuransi \(X\sim Normal(\mu,\sigma^2)\) dengan \(σ>0\). Dalam kasus ini, seseorang dapat menginterpretasikan nilai negatif dari X sebagai keuntungan atau pendapatan. Berikan ekspresi bentuk tertutup untuk VaR.

Karena distribusi normal adalah distribusi kontinu, maka VaR dari X harus memenuhi

\[ \begin{eqnarray*} q &=& F_X(VaR_q[X])\\ &=&\Pr\left[(X-\mu)/\sigma\leq (VaR_q[X]-\mu)/\sigma\right]\\ &=&\Phi((VaR_q[X]-\mu)/\sigma). \end{eqnarray*} \] Maka didapat

\[ VaR_q[X]=\Phi^{-1}(q)\ \sigma+\mu. \]

Dalam banyak aplikasi asuransi, kita harus menangani transformasi dari variabel acak. Misalnya, pada Contoh 10.3.2, variabel acak kerugian \(X\sim Normal(\mu, \sigma^2)\) dapat dilihat sebagai transformasi linier dari variabel acak normal standar \(Z\sim Normal(0,1)\), yaitu \(X=Z\sigma+\mu\). Dengan mengatur \(μ = 0\) dan \(σ = 1\), Dapar mempermudah untuk memeriksa \(VaR_q[Z]=\Phi^{-1}(q).\). Transformasi linier dari variabel acak normal setara dengan transformasi linier dari VaR dari variabel acak asli. Temuan ini dapat digeneralisasikan lebih lanjut ke variabel acak mana pun selama transformasinya ketat meningkat.

1.3.2.3 Example 10.3.3. VaR for transformed variables.

Pertimbangkan variabel acak kerugian asuransi Y dengan distribusi lognormal dengan parameter \(μ∈R\) dan \(σ^2>0\) Mencari ekspresi \(VaR\) dari Y dalam hal invers cdf normal standar.

Dengan memperhatikan bahwa \(\log Y\sim Normal(\mu,\sigma^2)\), atau setara dengan membiarkan \(X\sim Normal(\mu,\sigma^2)\), maka \(Y\overset{d}{=}e^{X}\) yang merupakan transformasi ketat meningkat. Di sini, notasi \(\overset{d}{=}\) berarti kesamaan dalam distribusi. \(VaR\) dari\(Y\) diberikan oleh transformasi eksponensial dari VaR dari X. Secara tepat, untuk \(q∈(0,1)\),

\(VaR_{q}[Y]= e^{VaR_q[X]}=\exp\{\Phi^{-1}(q)\ \sigma+\mu\}.\)

Sejauh ini telah melihat beberapa contoh tentang VaR untuk variabel acak kontinu, selanjutnya dengan mempertimbangkan contoh mengenai VaR untuk variabel acak diskrit.

1.3.2.4 Example 10.3.4. VaR for a discrete random variable

Dengan mempertimbangkan variabel acak kerugian asuransi dengan distribusi probabilitas sebagai berikut:

\[ {\small \Pr[X=x] = \left\{ \begin{array}{ll} 0.75, & \text{for }x=1 \\ 0.20, & \text{for }x=3 \\ 0.05, & \text{for }x=4. \end{array} \right. } \]

Menemukan \(VaR\) pada \(q = 0.6, 0.9, 0.95, 0.95001\)

JAWAB

Nilai cdf yang sesuai dari X adalah

\[ F_X(x)=\left\{ \begin{array}{ll} 0, & \hbox{ $x<1$;} \\ 0.75, & \hbox{ $1\leq x<3$;} \\ 0.95, & \hbox{ $3\leq x<4$;} \\ 1, & \hbox{ $4\leq x$.} \end{array} \right. \] Berdasarkan definisi VaR dengan demikian, maka memiliki

  • \(VaR_{0.6}[X]=1\)

  • \(VaR_{0.9}[X]=3\)

  • \(VaR_{0.95}[X]=3\)

  • \(VaR_{0.950001}[X]=4\)

Selanjutnya adalah ringkasan dari bagian tentang ukuran VaR. Beberapa keuntungan dalam menggunakan VaR antara lain:

  • memiliki interpretasi yang bermakna secara praktis;

  • relatif mudah untuk dihitung untuk banyak distribusi dengan fungsi distribusi tertutup;

  • tidak ada asumsi tambahan yang diperlukan untuk penghitungan VaR.

Namun, ada beberapa keterbatasan dalam penggunaan VaR dalam praktik manajemen risiko, di antaranya adalah:

  • pemilihan tingkat kepercayaan \(q∈(0,1)\) sangat subjektif, sementara \(VaR\) dapat sangat sensitif terhadap pilihan q

  • skenario/informasi kerugian yang berada di atas \((1-q)\times 100\%\) peristiwa terburuk, sepenuhnya diabaikan;

  • VaR bukanlah ukuran risiko yang koheren (terutama, ukuran VaR tidak memenuhi aksioma subadditivitas, artinya manfaat diversifikasi mungkin tidak sepenuhnya tercermin).

1.3.3 10.3.3 Tail Value-at-Risk

Dengan mengingat bahwa VaR mewakili kerugian maksimal dengan peluang \((1-q)\times 100\%\). Seperti yang disebutkan pada bagian sebelumnya, satu kelemahan utama dari pengukuran VaR adalah tidak mencerminkan kerugian ekstrem yang terjadi di luar skenario terburuk dengan peluang \((1-q)\times 100\%\). Untuk tujuan ilustrasi, mari kita pertimbangkan contoh yang sedikit tidak realistis namun inspiratif berikut.

###3 Example 10.3.5 Dengan mempertimbangkan dua variabel kerugian, \(X\sim Uniform [0,100]\), dan \(Y\) dengan distribusi eksponensial yang memiliki parameter \(θ = 31,71\). Kami menggunakan \(VaR\) pada tingkat kepercayaan \(95%\) untuk mengukur tingkat risiko dari \(X\) dan \(Y\). Perhitungan sederhana memberikan

\[ VaR_{0.95}[X]=VaR_{0.95}[Y]=95, \]

dan dengan demikian kedua distribusi kerugian ini memiliki tingkat risiko yang sama menurut \(VaR_{0.95}\). Namun, Y lebih berisiko daripada X jika kerugian ekstrem menjadi masalah utama karena X dibatasi di atas sedangkan Y tidak dibatasi. Hanya memperkirakan risiko dengan menggunakan VaR pada tingkat kepercayaan tertentu bisa menyesatkan dan mungkin tidak mencerminkan sifat sebenarnya dari risiko.

Sebagai solusinya, Tail Value-at-Risk (\(TVaR\)) diusulkan untuk mengukur kerugian ekstrem yang berada di atas suatu tingkat \(VaR\) tertentu sebagai rata-rata. Kami mendokumentasikan definisi TVaR dalam apa yang mengikuti. Untuk kesederhanaan, kami akan membatasi diri pada variabel acak positif kontinu saja, yang lebih sering digunakan dalam konteks manajemen risiko asuransi. Kami merujuk pembaca yang tertarik ke Hardy (2006) untuk diskusi yang lebih komprehensif tentang TVaR untuk variabel acak diskrit dan kontinu.

Menetapkan \(q ∈ (0,1)\), nilai Tail Value-at-Risk dari variabel acak (kontinu) X dirumuskan sebagai

\[ \begin{eqnarray*} TVaR_q[X] &=& \mathrm{E}[X|X>VaR_q[X]], \end{eqnarray*} \]

yang diasumsikan harapan eksistensi.

Perhitungan \(TVaR\) biasanya terdiri dari dua komponen utama - \(VaR\) dan rata-rata kerugian yang berada di atas \(VaR\). \(TVaR\) dapat dihitung melalui sejumlah formula. Pertimbangkan variabel acak positif kontinu X, untuk kenyamanan notional, mari kita tulis \(\pi_q=VaR_q[X]\). Sesuai definisi, \(TVaR\) dapat dihitung melalui

\[ \begin{eqnarray} TVaR_{q}[X]=\frac{1}{(1-q)}\int_{\pi_q}^{\infty}xf_X(x)dx. \tag{10.5} \end{eqnarray} \]

1.3.3.1 Example 10.3.6. TVaR for a normal distribution

Dengan mempertimbangkan variabel acak kerugian asuransi \(X\sim Normal (\mu,\sigma^2)\) dengan μ ∈ R dan \(σ > 0\). Mencari ekspresi \(TVaR\)

Biarkan Z adalah variabel acak normal standar. Untuk \(q∈(0,1)\) , maka \(TVaR\) dari \(X\) dapat dihitung melalui

\[ \begin{eqnarray*} TVaR_q[X] &=& \mathrm{E}[X|X>VaR_q[X]]\\ &=&\mathrm{E}[\sigma Z+\mu|\sigma Z+\mu>VaR_q[X]]\\ &=& \sigma\mathrm{E}[Z|Z>(VaR_q[X]-\mu)/\sigma]+\mu\\ &\overset{(1)}{=}& \sigma\mathrm{E}[Z|Z>VaR_q[Z]]+\mu, \end{eqnarray*} \]

dimana \(\overset{(1)}{=}\) berlaku karena hasil yang dilaporkan pada contoh diatas. Selanjutnya, kita beralih untuk mempelajari \(TVaR_q[Z]=\mathrm{E}[Z|Z>VaR_q[Z]]\) dengan \(\omega(q)=(\Phi^{-1}(q))^2/2\), maka kami dapat

\[ \begin{eqnarray*} (1-q)\ TVaR_q[Z] &=& \int_{\Phi^{-1}(q)}^{\infty} z \frac{1}{\sqrt{2\pi}} e^{-z^2/2}dz\\ &=& \int_{\omega(q)}^{\infty} \frac{1}{\sqrt{2\pi}} e^{-x}dx\\ &=& \frac{1}{\sqrt{2\pi}} e^{-\omega(q)}\\ &=& \phi(\Phi^{-1}(q)). \end{eqnarray*} \] Maka

\(TVaR_q[X]=\sigma\frac{\phi(\Phi^{-1}(q))}{1-q}+\mu.\)

Sebelumya telah diseebutkan pada subseksi sebelumnya bahwa VaR dari fungsi acak yang ketat meningkat sama dengan fungsi VaR dari variabel acak asli.Seseorang dapat menunjukkan bahwa TVaR dari transformasi linier variabel acak yang ketat meningkat sama dengan fungsi VaR dari variabel acak asli. Hal ini disebabkan oleh sifat linearitas dari harapan. Namun, temuan tersebut tidak dapat diperluas ke fungsi non-linear. Contoh variabel acak lognormal berikut menjadi contoh yang berlawanan.

1.3.3.2 Example 10.3.7. TVaR of a lognormal distribution

Dengan memertimbangkan sebuah variabel acak kerugian asuransi \(X\) dengan distribusi lognormal dengan parameter \(μ∈R\) dan \(σ>0\). dapat menunjukkan

\(TVaR_q[X] = \frac{e^{\mu+\sigma^2/2}}{(1-q)} \Phi(\Phi^{-1}(q)-\sigma).\)

JAWAB

Dengan mengingat bahwa pdf dari distribusi lognormal dirumuskan sebagai

\[ f_X(x)=\frac{1}{\sigma\sqrt{2\pi} x}\exp\{-(\log x-\mu )^2/2\sigma^2 \}, \text{ for } x>0. \]

Menetapkan \(q∈(0,1)\), maka \(TVaR\) dari \(X\) dapat dihitung melalui

\[ \begin{eqnarray} TVaR_q[X] &=& \frac{1}{(1-q)} \int_{\pi_q}^{\infty} x f_X(x)dx \nonumber\\ &=&\frac{1}{(1-q)} \int_{\pi_q}^{\infty} \frac{1}{\sigma \sqrt{2\pi}} \exp\left\{ -\frac{(\log x-\mu)^2}{2\sigma^2} \right\}dx\nonumber\\ &\overset{(1)}{=}&\frac{1}{(1-q)} \int_{\omega(q)}^{\infty} \frac{1}{\sqrt{2\pi}} e^{ -\frac{1}{2}w^2+\sigma w+\mu}dw\nonumber\\ &=&\frac{e^{\mu+\sigma^2/2}}{(1-q)} \int_{\omega(q)}^{\infty} \frac{1}{\sqrt{2\pi}} e^{ -\frac{1}{2}(w-\sigma)^2}dw\nonumber\\ &=&\frac{e^{\mu+\sigma^2/2}}{(1-q)} \Phi(\omega(q)-\sigma), \tag{10.6} \end{eqnarray} \]

Di sini, \(\overset{(1)}{=}\) terpenuhi dengan menerapkan perubahan variabel \(w=(logx−μ)/σ\), dan \(ω(q)=(logπq−μ)/σ\). Dengan memanggil rumus \(VaR\) untuk variabel acak lognormal dapat menyederhanakan menjadi

\[ \begin{eqnarray*} TVaR_q[X] &=& \frac{e^{\mu+\sigma^2/2}}{(1-q)} \Phi(\Phi^{-1}(q)-\sigma). \end{eqnarray*} \] \(TVaR\) dari variabel acak lognormal bukanlah eksponensial dari \(TVaR\) dari variabel acak normal.

Untuk distribusi di mana fungsi distribusi kelangsungan hidupnya lebih mudah untuk dikerjakan, dapat menerapkan teknik integrasi dengan bagian (asumsikan rata-ratanya terbatas) untuk menulis ulang persamaan (10.5) sebagai

\[ \begin{eqnarray*} TVaR_{q}[X]&=&\left[-x S_X(x)\big |_{\pi_q}^{\infty}+\int_{\pi_q}^{\infty}S_X(x)dx\right]\frac{1}{(1-q)}\\ &=& \pi_q +\frac{1}{(1-q)}\int_{\pi_q}^{\infty}S_X(x)dx. \end{eqnarray*} \]

1.3.3.3 Example 10.3.8. TVaR of an exponential distribution

Pertimbangkan sebuah variabel acak kerugian asuransi X dengan distribusi eksponensial yang memiliki parameter θ untuk \(θ>0\). Mencari suatu ekspresi untuk TVaR.

JAWAB

Dari subseksi sebelumnya, telah melihat bahwa

\(\pi_q=-\theta[\log(1-q)].\)

Dengan mempertimbangkan \(TVaR\):

\[ \begin{eqnarray*} TVaR_q[X] &=& \pi_q+\int_{\pi_q}^{\infty} e^{-x/\theta}dx/(1-q)\\ &=& \pi_q+\theta e^{-\pi_q/\theta}/(1-q)\\ &=& \pi_q+\theta. \end{eqnarray*} \]

Pengukuran berikut erat kaitannya dengan TVaR Juga dapat membantu untuk menyatakan \(TVaR\) dalam bentuk nilai harapan terbatas. Secara khusus, kita memiliki

\[ \begin{eqnarray} TVaR_q[X] &=& \int_{\pi_q}^{\infty} (x-\pi_q+\pi_q)f_X(x)dx/(1-q) \nonumber\\ &=& \pi_q+\frac{1}{(1-q)}\int_{\pi_q}^{\infty} (x-\pi_q)f_X(x)dx\nonumber\\ &=& \pi_q+e_X(\pi_q)\nonumber\\ &=& \pi_q +\frac{\left({\mathrm{E}[X]-\mathrm{E}[X\wedge\pi_q]}\right)}{(1-q)}, \tag{10.7} \end{eqnarray} \]

Dimana \(e_X(d)=\mathrm{E}[X-d|X>d]\) untuk \(d>0\) menyatakan fungsi kerugian berlebih rata-rata. Untuk banyak distribusi parametrik yang umum digunakan, rumus-rumus untuk menghitung \(E[X\)] dan \(E[X∧π_q]\) dapat ditemukan dalam tabel distribusi.

1.3.3.4 Example 10.3.9. TVaR of a Pareto distribution

Pertimbangkan sebuah variabel acak kerugian \(X\sim Pareto(\theta,\alpha)\) dengan \(θ>0\) dan \(α>0\). Fungsi distribusi kumulatif (cdf) dari X diberikan oleh

\(F_X(x)=1-\left(\frac{\theta}{\theta+x} \right)^{\alpha}, \text{ for } x>0 .\)

menetapkan \(q∈(0,1)\) dan atur \(F_X(π_q)=q\) , maka kita dapat dengan mudah memperoleh

\[ \begin{eqnarray} \pi_q=\theta\left[(1-q)^{-1/\alpha}-1 \right]. \tag{10.8} \end{eqnarray} \]

Sebelumnya diketahui bahwa

\[ \mathrm{E}[X]=\frac{\theta}{\alpha-1}, \]

dan

\[ \mathrm{E}[X\wedge \pi_q]=\frac{\theta}{\alpha-1}\left[ 1-\left(\frac{\theta}{\theta+\pi_q}\right)^{\alpha-1} \right]. \]

Dengan memanfaatkan persamaan sebelumnya menghasilkan

\[ \begin{eqnarray*} TVaR_q[X] &=& \pi_q+\frac{\theta}{\alpha-1} \frac{(\theta/(\theta+\pi_q))^{\alpha-1}} {(\theta/(\theta+\pi_q))^{\alpha}}\\ &=&\pi_q +\frac{\theta}{\alpha-1}\left( \frac{\pi_q+\theta}{\theta} \right)\\ &=& \pi_q+\frac{\pi_q+\theta}{\alpha-1}, \end{eqnarray*} \]

Menyesuaikan \(q∈(0,1)\), nilai risiko bersyarat untuk sebuah variabel acak X diformulasikan sebagai

\[CVaR_q[X] = \frac{1}{1-q}\int_{q}^{1} VaR_{\alpha}[X]\ d\alpha .\]

Nilai risiko bersyarat juga dikenal sebagai rata-rata nilai risiko (\(AVaR\)) dan kegagalan yang diharapkan (\(ES\)). Dapat ditunjukkan bahwa \(CVaR_q[X] = TVaR_q[X]\) ketika \(\Pr(X=VaR_q[X])=0\), yang berlaku untuk variabel acak kontinu. Artinya, jika X kontinu, maka melalui perubahan variabel, kita dapat menulis ulang persamaan sebagai

\[ \begin{eqnarray} TVaR_{q}[X] &=& \frac{1}{1-q}\int_{q}^{1} VaR_{\alpha}[X]\ d\alpha. \tag{10.9} \end{eqnarray} \]

Formula alternatif (10.9) ini memberitahu bahwa \(TVaR\) adalah rata-rata dari \(VaR_α[X]\) dengan tingkat kepercayaan yang bervariasi di atas \(α∈[q,1]\). Oleh karena itu, \(TVaR\) secara efektif menyelesaikan sebagian besar keterbatasan dari VaR yang diuraikan pada subbab sebelumnya. Pertama, karena efek rata-rata, TVaR mungkin kurang sensitif terhadap perubahan tingkat kepercayaan dibandingkan dengan VaR. Kedua, semua kerugian ekstrem yang berada di atas peristiwa terburuk \((1-q)\times 100\%\) yang paling mungkin dihitung.

Dalam hal ini, seseorang dapat melihat bahwa untuk setiap \(q∈(0,1)\)

\(TVaR_q[X]\geq VaR_q[X].\)

Ketiga dan mungkin yang paling penting, TVaR adalah ukuran risiko koheren dan dengan demikian mampu menangkap efek diversifikasi dari portofolio asuransi dengan lebih akurat.

1.4 10.4 Reinsurance

reasuransi adalah asuransi yang dibeli oleh perusahaan asuransi. Berbeda dengan asuransi yang dibeli oleh individu, reasuransi biasanya dirancang khusus untuk pembeli dan memiliki fleksibilitas kontrak yang lebih besar. Ada dua jenis reasuransi, yaitu reasuransi proporsional dan non-proporsional. Reasuransi proporsional melibatkan persentase tertentu dari kerugian dan premi yang diambil oleh perusahaan reasuransi. Sedangkan reasuransi non-proporsional mencakup kontrak stop-loss dan excess of loss.

semua jenis kontrak reasuransi membagi risiko total menjadi dua bagian, yaitu risiko yang ditanggung oleh perusahaan reasuransi dan risiko yang ditahan oleh perusahaan asuransi. Dalam hal ini, \(X\) adalah risiko total, \(Y_{reinsurer}\) adalah risiko yang ditanggung oleh perusahaan reasuransi, dan \(Y_{insurer}\) adalah risiko yang ditahan oleh perusahaan asuransi. Dinyatakan dalam \(X = Y_{insurer}+Y_{reinsurer}\)

struktur matematika dasar dari sebuah perjanjian reasuransi sama dengan modifikasi cakupan dalam asuransi personal yang diperkenalkan dalam Bab 3. Dalam reasuransi proporsional, transformasi \(Y_{insurer} = cX\) identik dengan penyesuaian co-insurance dalam asuransi personal. Dalam reasuransi stop-loss, transformasi \(Y_{reinsurer} = max(0, X-M)\) sama dengan pembayaran asuransi dengan nilai retensi (deductible) \(M\), sedangkan \(Y_{insurer} = min(X, M)\) setara dengan apa yang dibayarkan oleh pemegang polis dengan nilai retensi \(M\).

Namun, dalam aplikasi praktis matematika, fokus dalam asuransi personal umumnya pada harapan sebagai bahan utama yang digunakan dalam penetapan harga. Sedangkan dalam reasuransi, fokusnya adalah pada seluruh distribusi risiko, karena peristiwa ekstrim menjadi perhatian utama untuk stabilitas keuangan perusahaan asuransi dan reasuransi.

1.4.1 Proportional Reinsurance

Jumlah yang dibayarkan oleh perusahaan asuransi utama dan perusahaan reasuransi dituliskan sebagai

\[\begin{equation} Y_{insurer} = c X \ \ \text{and} \ \ \ Y_{reinsurer} = (1-c) X, \end{equation}\]

dimana \(c\in (0,1)\) menunjukkan proporsi yang disimpan oleh perusahaan asuransi. Perhatikan bahwa \(Y_{insurer}+Y_{reinsurer}=X\)

contoh 10.4.1 akan menunjukkan bagaimana perjanjian quota-share mempengaruhi distribusi kerugian melalui demonstrasi \(r\) singkat menggunakan simulasi. Gambar yang disertakan memberikan bentuk relatif dari distribusi kerugian total, bagian yang ditahan oleh perusahaan asuransi, dan bagian yang ditanggung oleh perusahaan reasuransi.

set.seed(2018)
theta = 1000
alpha = 3
nSim = 10000
library(actuar)
X <-  rpareto(nSim, shape = alpha, scale = theta)

par(mfrow=c(1,3))
plot(density(X), xlim=c(0,3*theta), ylim=c(0,0.008), main="Total Loss", xlab="Losses")
plot(density(0.75*X), xlim=c(0,3*theta), ylim=c(0,0.008), main="Insurer (75%)", xlab="Losses")
plot(density(0.25*X), xlim=c(0,3*theta), ylim=c(0,0.008), main="Reinsurer (25%)", xlab="Losses")

1.4.1.1 Quota Share is Desirable for Reinsurers

Kontrak bagian kuota (quota share) sangat diinginkan bagi reinsurer. Untuk melihat ini, asumsikan bahwa perusahaan asuransi dan reinsurer ingin memasuki kontrak untuk berbagi total kerugian \(X\)

\[\begin{equation} Y_{insurer}=g(X) \ \ \ \text{and} \ \ \ \ Y_{reinsurer}=X-g(X), \end{equation}\]

Dalam kontrak quota share, diasumsikan ada sebuah fungsi generik \(g(\cdot)\) (dikenal sebagai fungsi retensi) yang digunakan untuk membagi kerugian antara perusahaan asuransi dan reinsurer. Fungsi retensi tersebut harus memastikan bahwa perusahaan asuransi tidak mempertahankan lebih banyak kerugian daripada yang sebenarnya terjadi, sehingga hanya fungsi yang memenuhi \(g(x) ≤ x\) yang dianggap. Selanjutnya, diasumsikan bahwa perusahaan asuransi hanya peduli dengan variabilitas klaim yang dipertahankan dan tidak memperdulikan pilihan fungsi \(g\) selama \(variansi (Y_{insurer})\) tetap sama dan sama dengan \(Q\), sebagai contoh. Kemudian, hasil berikut menunjukkan bahwa kontrak reasuransi quota share meminimalkan ketidakpastian reinsurer sebagaimana diukur dengan \(Var(Y_{reinsurer})\).

Proposisi. Misalkan \(Var(Y_{insurer}) =Q\) maka \(Var((1-c)X) \le Var (g(X))\) untuk semua \(g(\cdot)\) sehingga \(E[g(X)]=K\) dimana \(c=Q/Var(X)\)

Proposisi ini memiliki daya tarik secara intuitif - dengan asuransi quota share, reinsurer membagi tanggung jawab untuk klaim yang sangat besar pada ekor distribusi. Ini berbeda dengan perjanjian non-proportional di mana reinsurer bertanggung jawab atas klaim yang sangat besar.

1.4.1.2 Optimizing Quota Share Agreements for Insurers

Dalam kasus di mana ada \(n\) risiko dalam suatu portofolio, di mana setiap risiko dinyatakan oleh \(X_i\), kita dapat mempertimbangkan variasi dari kesepakatan kuota bersama di mana jumlah yang ditahan oleh perusahaan asuransi dapat bervariasi dengan setiap risiko, disebut ci. Dalam hal ini, bagian perusahaan asuransi dari risiko portofolio adalah \(Y_{insurer} = \sum_{i=1}^n c_i X_i\). Kami mencari nilai-nilai \(c_i\) yang meminimalkan \(Var(Y_{insurer})\) dengan batasan bahwa \(E(Y_{insurer}) = K\). Ini berarti bahwa perusahaan asuransi ingin mempertahankan pendapatan setidaknya sebesar konstanta \(K\) dan sejalan dengan batasan ini, ingin meminimalkan ketidakpastian risiko yang ditahan dalam hal varians.

Kasus ini dapat diterapkan pada berbagai aplikasi di mana risiko individu dapat didefinisikan sebagai risiko kebijakan atau klaim individu atau subportofolio, tergantung pada aplikasi spesifik. Sebagai contoh, perusahaan asuransi dapat membagi portofolionya menjadi subportofolio yang terdiri dari beberapa jenis bisnis, seperti (1) mobil pribadi, (2) mobil komersial, (3) pemilik rumah, (4) kompensasi pekerja, dan lain-lain.

Dari hasil perhitungan matematika, diketahui bahwa konstanta untuk risiko ke-\(i\), \(c_i\), berkorelasi dengan rasio \(\frac{E(X_i)}{Var(X_i)}\). Secara intuitif, jika \(E(X_i)\) lebih besar, maka nilai \(c_i\) akan semakin besar pula, dan sebaliknya, jika \(Var(X_i)\) semakin besar, maka nilai \(c_i\) akan semakin kecil. Faktor pengali proporsional ditentukan oleh persyaratan pendapatan \(E(Y_{insurer})=K\). Contoh yang diberikan membantu memahami hubungan ini.

Contohnya, terdapat tiga risiko yang masing-masing memiliki distribusi Pareto dengan parameter yang berbeda.

  • \(\alpha_1 =3\), _1=1000 untuk resiko pertama \(X_1\),
  • \(\alpha_2 =3\), _2=2000 untuk resiko kedua \(X_2\), dan
  • \(\alpha_3 =4\), _3=3000 untuk resiko ketiga \(X_3\).

Grafik disediakan untuk menunjukkan nilai \(c_1\), \(c_2\), dan \(c_3\) untuk pendapatan yang dibutuhkan sebesar \(K\). Perlu diperhatikan bahwa nilai-nilai ini meningkat secara linear dengan \(K\).

solusi:

theta1 = 1000; theta2 = 2000; theta3 = 3000;
alpha1 = 3; alpha2 = 3; alpha3 = 4;
library(actuar)
propnfct <- function(alpha,theta){
  mu    <- mpareto(shape=alpha, scale=theta, order=1)
  var   <- mpareto(shape=alpha, scale=theta, order=2) - mu^2
  mu/var
}
temp <- propnfct(alpha1, theta1)*mpareto(shape=alpha1, scale=theta1, order=1)+
        propnfct(alpha2, theta2)*mpareto(shape=alpha2, scale=theta2, order=1)+
        propnfct(alpha3, theta3)*mpareto(shape=alpha3, scale=theta3, order=1)  
KVec <- seq(100, 2500, length.out=20)
Lambdavec <- 2*KVec/temp
c1 <- propnfct(alpha1, theta1)
c2 <- propnfct(alpha2, theta2)
c3 <- propnfct(alpha3, theta3)
c1Vec <- c2Vec <- c3Vec <- 0*KVec 
for (j in 1:20) {
  c1Vec[j] <- (Lambdavec[j]/2) * propnfct(alpha1, theta1)
  c2Vec[j] <- (Lambdavec[j]/2) * propnfct(alpha2, theta2)
  c3Vec[j] <- (Lambdavec[j]/2) * propnfct(alpha3, theta3)
  }
plot(KVec, c1Vec, type="l", ylab="proportion", xlab="required revenue (K)", ylim=c(0,1))
lines(KVec, c2Vec)
lines(KVec, c3Vec)
text(1200,0.80, expression(c[1]))
text(2000,0.75, expression(c[2]))
text(1500,0.30, expression(c[3]))

1.4.2 Non-Proportional Reinsurance

1.4.2.1 The Optimality of Stop-Loss Insurance

Dalam sebuah perjanjian stop-loss, asuransi menetapkan level retensi \(M (> 0)\) dan membayar seluruh klaim untuk nilai \(X ≤ M\). Selanjutnya, untuk klaim dengan nilai \(X > M\), asuransi primer membayar \(M\) dan reasuransi membayar sisanya, yaitu \(X - M\). Oleh karena itu, asuransi menanggung risiko sebesar \(M\). Singkatnya, jumlah yang dibayar oleh asuransi primer dan reasuransi adalah sebagai berikut:

\[\begin{equation} Y_{insurer} = \begin{cases} X & \text{for } X \le M\\ M & \text{for } X >M \\ \end{cases} \ \ \ \ = \min(X,M) = X \wedge M \end{equation}\]

dan

\[\begin{equation} Y_{reinsurer} = \begin{cases} 0 & \text{for } X \le M\\ X- M & \text{for } X >M \\ \end{cases} \ \ \ \ = \max(0,X-M) \end{equation}\]

sama seperti sebelumnya \(Y_{insurer}+Y_{reinsurer}=X\)

Kontrak tipe stop-loss sangat diinginkan oleh perusahaan asuransi. Dalam hal ini, perusahaan asuransi dan reasuransi ingin memasuki kontrak sehingga \(Y_{insurer} = g(X)\) dan \(Y_{reinsurer} = X - g(X)\) untuk beberapa fungsi retensi generik \(g(\cdot)\). Dengan asumsi bahwa perusahaan asuransi hanya peduli tentang variabilitas klaim yang disimpan dan tidak peduli dengan pilihan \(g\) selama \(Var(Y_{insurer})\) dapat diminimalkan. Kembali, kita mengenakan batasan bahwa \(E(Y_{insurer}) = K\) ; perusahaan asuransi perlu mempertahankan pendapatan \(K\). Dalam rangka untuk memenuhi batasan ini, perusahaan asuransi ingin meminimalkan ketidakpastian risiko yang disimpan (sebagaimana diukur oleh varians). Kemudian, hasil berikut menunjukkan bahwa perjanjian reasuransi stop-loss meminimalkan ketidakpastian reinsurer sebagaimana diukur oleh \(Var(Y_{reinsurer})\).

Proposisi. Anggaplah \(E(Y_{insurer})=K\). Maka, \(Var(X\wedge M)\le Var(g(X))\) untuk semua \(g(\cdot)\), di mana \(M\) adalah nilai sedemikian rupa sehingga \(E(X\wedge M)=K\).

1.4.2.2 Excess of Loss

Dalam reasuransi non-proporsional, terdapat jenis polis excess of loss. Dalam polis ini, risiko total \(X\) diasumsikan terdiri dari \(n\) risiko terpisah \(X_1,...,X_n\), dimana masing-masing risiko tersebut memiliki batas atas, misalnya \(M_i\). Pada polis ini, perusahaan asuransi menahan risiko

\[\begin{equation} Y_{insurer} = \sum_{i=1}^n Y_{i,insurer}, \ \ \ \ \text{dengan} \ \ \ \ \ Y_{i,insurer} = X_i \wedge M_i. \end{equation}\]

Sedangkan, untuk bagian risiko yang melebihi batas tersebut, reinsurer bertanggung jawab menanggungnya, yaitu \(Y_{reinsurer}=X−Y_{insurer}\). Batas retensi dapat bervariasi untuk setiap risiko atau dapat sama untuk semua risiko, yaitu \(M_i=M\) untuk semua \(i\).

1.4.2.3 Optimal Choice for Excess of Loss Retention Limits

apa pilihan terbaik dari batas retensi excess of loss \(M_i\)? Untuk menjawab pertanyaan ini, kita perlu mencari nilai-nilai \(M_i\) yang meminimalkan \(Var(Y_{insurer})\) dengan mempertahankan konstrain bahwa \(E(Y_{insurer})=K\). Dalam rangka mempertahankan konstrain pendapatan ini, perusahaan asuransi ingin meminimalkan ketidakpastian risiko yang dipertahankan (yang diukur dengan variansinya).

Dari perhitungan matematika, terungkap bahwa selisih antara batas retensi dan klaim rata-rata yang diharapkan oleh insurer, \(M_i−E(X_i\wedge M_i)\), adalah sama untuk semua risiko. Hal ini secara intuitif menarik.

Contoh 10.4.3. Excess of loss untuk tiga risiko Pareto. Pertimbangkan tiga risiko yang memiliki distribusi Pareto, masing-masing memiliki set parameter yang berbeda (sehingga mereka independen tetapi tidak identik). Gunakan set parameter yang sama seperti pada Contoh 10.4.2. Untuk contoh ini:

A. Tunjukkan secara numerik bahwa batas retensi optimal \(M_1\), \(M_2\), dan \(M_3\) (dikurangi klaim rata-rata yang diharapkan oleh insurer, \(M_i−E(X_i\wedge M_i))\) adalah sama untuk semua risiko, seperti yang kita turunkan secara teoritis.

B. Selanjutnya, bandingkan secara grafis distribusi total risiko dengan risiko yang disimpan oleh insurer dan oleh reinsurer.

solusi:

A. mengoptimasi Lagrangian menggunakan paket R alabama untuk Algoritma Minimasi Barrier Adaptif Lagrangian.

theta1 = 1000;theta2 = 2000;theta3 = 3000;
alpha1 = 3;   alpha2 = 3;   alpha3 = 4;
Pmin <- 2000
library(actuar)
VarFct <- function(M){
  M1=M[1];M2=M[2];M3=M[3]
  mu1    <- levpareto(limit=M1,shape=alpha1, scale=theta1, order=1)
  var1   <- levpareto(limit=M1,shape=alpha1, scale=theta1, order=2)-mu1^2
  mu2    <- levpareto(limit=M2,shape=alpha2, scale=theta2, order=1)
  var2   <- levpareto(limit=M2,shape=alpha2, scale=theta2, order=2)-mu2^2
  mu3    <- levpareto(limit=M3,shape=alpha3, scale=theta3, order=1)
  var3   <- levpareto(limit=M3,shape=alpha3, scale=theta3, order=2)-mu3^2
  varFct <- var1 +var2+var3
  meanFct <- mu1+mu2+mu3
  c(meanFct,varFct)
  }
f <- function(M){VarFct(M)[2]}
h <- function(M){VarFct(M)[1] - Pmin}
library(alabama)
par0=rep(1000,3)
op <- auglag(par=par0,fn=f,hin=h,control.outer=list(trace=FALSE))

Batas retensi optimal \(M_1\), \(M_2\), dan \(M_3\) yang menghasilkan batas retensi dikurangi klaim yang diharapkan dari perusahaan asuransi, \(M_i-E(X_i\wedge M_i)\), sama untuk semua risiko, seperti yang kita dapatkan secara teoritis.

M1star = op$par[1];M2star = op$par[2];M3star = op$par[3]
M1star -levpareto(M1star,shape=alpha1, scale=theta1,order=1)
## [1] 1344.135
M2star -levpareto(M2star,shape=alpha2, scale=theta2,order=1)
## [1] 1344.133
M3star -levpareto(M3star,shape=alpha3, scale=theta3,order=1)
## [1] 1344.133

B. membandingkan secara grafis distribusi risiko total dengan yang dipertahankan oleh perusahaan asuransi dan perusahaan reasuransi.

set.seed(2018)
nSim = 10000
library(actuar)
Y1 <- rpareto(nSim, shape = alpha1, scale = theta1)
Y2 <- rpareto(nSim, shape = alpha2, scale = theta2)
Y3 <- rpareto(nSim, shape = alpha3, scale = theta3)
YTotal <- Y1 + Y2 + Y3
Yinsur <-  pmin(Y1,M1star)+pmin(Y2,M2star)+pmin(Y3,M3star)
Yreinsur <- YTotal - Yinsur

par(mfrow=c(1,3))
plot(density(YTotal),   xlim=c(0,10000), main="Total Loss", xlab="Losses")
plot(density(Yinsur),   xlim=c(0,10000), main="Insurer",    xlab="Losses")
plot(density(Yreinsur), xlim=c(0,10000), main="Reinsurer",  xlab="Losses")

1.4.3 Additional Reinsurance Treaties

1.4.3.1 Surplus Share Proportional Treaty

Jenis perjanjian reasuransi proposional lainnya adalah surplus share, yang umum digunakan dalam asuransi properti komersial.

  • Perjanjian surplus share memungkinkan reinsured untuk membatasi eksposurnya pada risiko dengan jumlah tertentu (retained line).
  • Reinsurer mengambil bagian dari risiko secara proporsional terhadap jumlah nilai yang diasuransikan melebihi retained line, hingga batas tertentu (dinyatakan sebagai kelipatan dari retained line, atau jumlah line).

Sebagai contoh, jika retained line adalah 100.000 dan batas yang diberikan adalah 4 line (400.000), maka jika \(X\) adalah kerugian, bagian dari reinsurer adalah \(min(400000,(X−100000)_+)\).

1.4.3.2 Layers of Coverage

Dalam reasuransi non-proporsional stop-loss, kita dapat memperluas kontrak dengan menambahkan pihak lain ke dalam kontrak. Sebagai contoh, selain hanya ada perusahaan asuransi dan reasuransi atau perusahaan asuransi dan pemegang polis, kita bisa mempertimbangkan situasi di mana ada tiga pihak, yaitu pemegang polis, perusahaan asuransi, dan reasuransi, yang sepakat untuk berbagi risiko. Secara umum, kita dapat mempertimbangkan keberadaan \(k\) pihak. Jika \(k = 3\), maka bisa jadi perusahaan asuransi dan dua reasuransi yang berbeda.

Contoh 10.4.4. Lapisan perlindungan untuk tiga pihak.

Misalkan ada \(k = 3\) pihak. Pihak pertama bertanggung jawab atas klaim pertama senilai 100, pihak kedua bertanggung jawab atas klaim dari 100 hingga 3000, dan pihak ketiga bertanggung jawab atas klaim di atas 3000. Jika ada empat klaim masing-masing senilai 50, 600, 1800, dan 4000, maka klaim tersebut akan dialokasikan ke pihak-pihak sebagai berikut:

library(kableExtra)

tabel <- data.frame(
  Buyer = c("0-100", "100-3000", "3000-∞", "total"),
  claim_1 = c(50, 0, 0, 50),
  claim_2 = c(100, 500, 0, 600),
  claim_3 = c(100, 1700, 0, 1800),
  claim_4 = c(100, 2900, 1000,4000),
  total = c(350, 5100, 1000, 6450)
)

kable(tabel, align = "c", caption = "Tabel Klaim") %>%
  kable_styling(bootstrap_options = "striped")
Tabel Klaim
Buyer claim_1 claim_2 claim_3 claim_4 total
0-100 50 100 100 100 350
100-3000 0 500 1700 2900 5100
3000-∞ 0 0 0 1000 1000
total 50 600 1800 4000 6450

Untuk menangani situasi umum dengan \(k\) kelompok, partisi garis bilangan real positif menjadi \(k\) interval menggunakan titik potong

\[\begin{equation} 0 = M_0 < M_1 < \cdots < M_{k-1} < M_k = \infty. \end{equation}\]

Perhatikan bahwa interval ke-\(j\) adalah \((M_{j−1},M_j]\). Sekarang biarkan \(Y_j\) menjadi jumlah risiko yang dibagi oleh pihak ke-\(j\). Untuk mengilustrasikan, jika kerugian \(x\) adalah sehingga \(M_{j−1}<x≤M_j\), maka

\[\begin{equation} \left(\begin{array}{c} Y_1\\ Y_2 \\ \vdots \\ Y_j \\Y_{j+1} \\ \vdots \\Y_k \end{array}\right) =\left(\begin{array}{c} M_1-M_0 \\ M_2-M_1 \\ \vdots \\ x-M_{j-1} \\ 0 \\ \vdots \\0 \end{array}\right) \end{equation}\]

kita dapat menuliskannya sebagai

\[\begin{equation} Y_j = \min(X,M_j) - \min(X,M_{j-1}) . \end{equation}\]

Dengan ungkapan \(Y_j=min(X,M_j)−min(X,M_{j−1})\), kita dapat melihat bahwa pihak ke-\(j\) bertanggung jawab atas klaim dalam interval \((M_{j−1},M_j]\). Dengan ini, Anda dapat memeriksa bahwa \(X=Y_1+Y_2+⋯+Y_k\). Seperti yang ditekankan dalam contoh berikut, kami juga mencatat bahwa pihak-pihak yang terlibat tidak harus berbeda.

1.4.3.3 Portfolio Management Example

Banyak variasi kontrak yang mendasar mungkin terjadi. Untuk satu ilustrasi lagi, pertimbangkan yang berikut ini.

Contoh 10.4.6. Manajemen Portofolio. Anda adalah Kepala Petugas Risiko dari sebuah perusahaan telekomunikasi. Perusahaan Anda memiliki beberapa risiko properti dan tanggung jawab. Kami akan mempertimbangkan:

\(X_1\) - gedung, dimodelkan menggunakan distribusi gamma dengan rata-rata 200 dan parameter skala 100. \(X_2\) - kendaraan bermotor, dimodelkan menggunakan distribusi gamma dengan rata-rata 400 dan parameter skala 200. \(X_3\) - risiko direktur dan pejabat eksekutif, dimodelkan menggunakan distribusi Pareto dengan rata-rata 1000 dan parameter skala 1000. \(X_4\) - risiko siber, dimodelkan menggunakan distribusi Pareto dengan rata-rata 1000 dan parameter skala 2000.

Sebutkan total risiko sebagai \(X = X_1 + X_2 + X_3 + X_4\). Untuk kesederhanaan, Anda mengasumsikan bahwa risiko ini independen. (Nanti, di Bagian 14.6, kami akan mempertimbangkan kasus yang lebih kompleks dari ketergantungan.)

Untuk mengelola risiko, Anda mencari perlindungan asuransi. Anda ingin mengelola jumlah bangunan dan kendaraan bermotor yang kecil secara internal, hingga M1 dan M2, masing-masing. Anda mencari asuransi untuk menutupi semua risiko lain. Secara khusus, bagian dari perusahaan asuransi adalah

\[\begin{equation} Y_{insurer} = (X_1 - M_1)_+ + (X_2 - M_2)_+ + X_3 + X_4 , \end{equation}\]

sehingga risiko yang Anda tanggung adalah \(Y_{retained} = X-Y_{insurer} = min(X_1,M_1)+min(X_2,M_2)\). Menggunakan deductible \(M_1=100\) dan \(M_2=200\):

A. Tentukan jumlah klaim yang diharapkan dari (i) yang ditanggung, (ii) yang diterima oleh asuransi, dan (iii) jumlah keseluruhan. B. Tentukan persentil ke-80, ke-90, ke-95, dan ke-99 untuk (i) yang ditanggung, (ii) yang diterima oleh asuransi, dan (iii) jumlah keseluruhan. C. Bandingkan distribusi dengan memplotting densitas untuk (i) yang ditanggung, (ii) yang diterima oleh asuransi, dan (iii) jumlah keseluruhan.

Solusi

menyiapkan parameter

# For the gamma distributions, use
alpha1 <- 2;      theta1 <- 100
alpha2 <- 2;      theta2 <- 200
# For the Pareto distributions, use
alpha3 <- 2;      theta3 <- 1000
alpha4 <- 3;      theta4 <- 2000
# Limits
M1     <- 100
M2     <- 200

dengan parameter ini, selanjutnya mensimulasikan realisasi dari risiko-risiko dalam portofolio

# Simulate the risks
nSim <- 10000  #number of simulations
set.seed(2017) #set seed to reproduce work 
X1 <- rgamma(nSim,alpha1,scale = theta1)  
X2 <- rgamma(nSim,alpha2,scale = theta2)  
# For the Pareto Distribution, use
library(actuar)
X3 <- rpareto(nSim,scale=theta3,shape=alpha3)
X4 <- rpareto(nSim,scale=theta4,shape=alpha4)
# Portfolio Risks
X         <- X1 + X2 + X3 + X4
Yretained <- pmin(X1,M1) + pmin(X2,M2)
Yinsurer  <- X - Yretained

A. hasil dari jumlah ekspektasi klaim

# Expected Claim Amounts
ExpVec <- t(as.matrix(c(mean(Yretained),mean(Yinsurer),mean(X))))
colnames(ExpVec) <- c("Retained", "Insurer","Total")
round(ExpVec,digits=2)
##      Retained Insurer   Total
## [1,]   269.05 2274.41 2543.46

B. hasil untuk kuantilnya

# Quantiles
quantMat <- rbind(
  quantile(Yretained, probs=c(0.80, 0.90, 0.95, 0.99)),
  quantile(Yinsurer,  probs=c(0.80, 0.90, 0.95, 0.99)),
  quantile(X       ,  probs=c(0.80, 0.90, 0.95, 0.99)))
rownames(quantMat) <- c("Retained", "Insurer","Total")
round(quantMat,digits=2)
##              80%     90%     95%      99%
## Retained  300.00  300.00  300.00   300.00
## Insurer  3075.67 4399.80 6172.69 11859.02
## Total    3351.35 4675.04 6464.20 12159.02

C. Berikut adalah hasil plot densitas risiko yang dipertahankan, diasuransikan, dan total portofolio.

par(mfrow=c(1,3))
plot(density(Yretained), xlim=c(0,500), main="Retained Portfolio Risk", xlab="Loss (Note the different horizontal scale)", ylab = "Density (Note different vertical scale)")
plot(density(Yinsurer), xlim=c(0,15000), main="Insurer Portfolio Risk", xlab="Loss")
plot(density(X), xlim=c(0,15000), main="Total Portfolio Risk", xlab="Loss")

LS0tDQp0aXRsZTogIlRFT1JJIFJJU0lLTyINCnN1YnRpdGxlOiAiV0VFSyAxMSINCmF1dGhvcjogIkJyaWdpdGEgVGlhcmEoMjAyMDQ5MjAwMDEpLCBHYXJyeSBKdWxpdXMoMjAyMDQ5MjAwMDMpLCBDbGFyYSBEZWxsYSgyMDIwNDkyMDAxOCkiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBodG1sX2RvY3VtZW50OiBudWxsDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHNhbmRzdG9uZQ0KICAgIGNzczogc3R5bGUxLmNzcw0KICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQ0KLS0tDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoY2xhc3Muc291cmNlID0gIm5vY29weSIsDQogICAgICAgICAgICAgICAgICAgICAgY2xhc3Mub3V0cHV0ID0gIm5vY29weSIsDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEYsDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEYpDQpgYGANCg0KPGltZyBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW46IDBweCAxMDBweCAwcHggMHB4OyB3aWR0aDoyNSUiIHNyYz0iZm90b3RpdGkuanBnIi8+IA0KDQpgYGB7ciBsb2dvLCBlY2hvPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzMwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygibG9nb21hdGFuYS5wbmciKQ0KYGBgDQoNCkVtYWlsICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZuYnNwOzogIGJyaWdpdGEubWVsYW50aWthQHN0dWRlbnQubWF0YW5hdW5pdmVyc2l0eS5hYy5pZCA8YnI+DQpSUHVicyAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiBodHRwczovL3JwdWJzLmNvbS9icmlnaXRhdGlhcmFlbS8gPGJyPg0KSnVydXNhbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiBbU3RhdGlzdGlrYV0oaHR0cHM6Ly9tYXRhbmF1bml2ZXJzaXR5LmFjLmlkLz9seT1hY2FkZW1pYyZjPXNiKSA8YnI+DQpBZGRyZXNzICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOiBBUkEgQ2VudGVyLCBNYXRhbmEgVW5pdmVyc2l0eSBUb3dlciA8YnI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZuYnNwOyBKbC4gQ0JEIEJhcmF0IEthdiwgUlQuMSwgQ3VydWcgU2FuZ2VyZW5nLCBLZWxhcGEgRHVhLCBUYW5nZXJhbmcsIEJhbnRlbiAxNTgxMC4NCg0KKioqKg0KDQojIEluc3VyYW5jZSBQb3J0Zm9saW8gTWFuYWdlbWVudCBpbmNsdWRpbmcgUmVpbnN1cmFuY2UNCg0KUG9ydG9mb2xpbyBhc3VyYW5zaSBhZGFsYWgga3VtcHVsYW4ga29udHJhayBhc3VyYW5zaS4gVW50dWsgbWVtYmFudHUgbWVuZ2Vsb2xhIGtldGlkYWtwYXN0aWFuIHBvcnRvZm9saW8sIGJhYiBpbmkgYWthbiBtZW1iYWhhcyBtZW5nZW5haToNCg0KMS4gTWVuZ2hpdHVuZyBrZXdhamliYW4geWFuZyBsdWFyIGJpYXNhIGJlc2FyIGRlbmdhbiBtZW1lcmlrc2EgYmFnaWFuIGVrb3IgZGFyaSBkaXN0cmlidXNpLA0KDQoyLiBNZW5naGl0dW5nIHJpc2lrbyBzZWNhcmEga2VzZWx1cnVoYW4gZGVuZ2FuIG1lbXBlcmtlbmFsa2FuIHJpbmdrYXNhbiB5YW5nIGRpa2VuYWwgc2ViYWdhaSB1a3VyYW4gcmlzaWtvLCBkYW4NCg0KMy4gTWVtYmFoYXMgb3BzaS1vcHNpIHBlbnllYmFyYW4gcmlzaWtvIHBvcnRvZm9saW8gbWVsYWx1aSByZWFzdXJhbnNpLCB5YWl0dSBwZW1iZWxpYW4gcHJvdGVrc2kgYXN1cmFuc2kgb2xlaCBwZXJ1c2FoYWFuIGFzdXJhbnNpLg0KDQojIyAxMC4xIEludHJvZHVjdGlvbiB0byBJbnN1cmFuY2UgUG9ydGZvbGlvcw0KDQpLb250cmFrIG1lcnVwYWthbiBwZXJqYW5qaWFuIGFudGFyYSBwZW1lZ2FuZyBwb2xpcyBkYW4gcGVydXNhaGFhbiBhc3VyYW5zaS4gUGVuYW5nZ3VuZywgZGFuIG1lbmdlbG9sYSwgcG9ydG9mb2xpbyB5YW5nIG1lcnVwYWthbiBrdW1wdWxhbiBrb250cmFrLiBTZXBlcnRpIGRpIGJpZGFuZyBrZXVhbmdhbiBsYWlubnlhLCBhZGEgcGlsaWhhbiBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gbWFuYWplbWVuIHlhbmcgaGFueWEgdGVyamFkaSBkaSB0aW5na2F0IHBvcnRvZm9saW8uIE1pc2FsbnlhLCBwZW5nYW1iaWxhbiBrZXB1dHVzYW4gc3RyYXRlZ2lzIHRpZGFrIHRlcmphZGkgZGkgdGluZ2thdCBrb250cmFrLiBJdHUgdGVyamFkaSBkaSBydWFuZyBrb25mZXJlbnNpLCBkaSBtYW5hIG1hbmFqZW1lbiBtZW5pbmphdSBkYXRhIHlhbmcgdGVyc2VkaWEgZGFuIG11bmdraW4gbWVuZ2FyYWhrYW4gYXJhaCBiYXJ1LiBEYXJpIHBlcnNwZWt0aWYgcG9ydG9mb2xpbywgcGVydXNhaGFhbiBhc3VyYW5zaSBpbmdpbiBtZWxha3VrYW4gcGVyZW5jYW5hYW4ga2FwYXNpdGFzLCBtZW5ldGFwa2FuIGtlYmlqYWthbiBtYW5hamVtZW4sIGRhbiBtZW55ZWltYmFuZ2thbiBiYXVyYW4gcHJvZHVrIHlhbmcgZGlwZXNhbiB1bnR1ayBtZW5pbmdrYXRrYW4gcGVuZGFwYXRhbiBzYW1iaWwgbWVuZ2VuZGFsaWthbiB2b2xhdGlsaXRhcy4NCg0KU2VjYXJhIGtvbnNlcHR1YWwgYmFod2EgcGVydXNhaGFhbiBhc3VyYW5zaSB0aWRhayBsZWJpaCBkYXJpIHNlYnVhaCBrdW1wdWxhbiBhdGF1IHBvcnRvZm9saW8sIGtvbnRyYWsgYXN1cmFuc2kuIFBhZGEgQmFiIDUgdGVsYWggbWVtcGVsYWphcmkgdGVudGFuZyBwZW1vZGVsYW4gcG9ydG9mb2xpbyBhc3VyYW5zaSBzZWJhZ2FpIGp1bWxhaCBrb250cmFrIGluZGl2aWR1IGJlcmRhc2Fya2FuIGFzdW1zaSBpbmRlcGVuZGVuc2kgYW50YXIga29udHJhay4gS2FyZW5hIHBlbnRpbmdueWEgaGFsIHRlcnNlYnV0LCBiYWIgaW5pIGJlcmZva3VzIGxhbmdzdW5nIHBhZGEgZGlzdHJpYnVzaSBwb3J0b2ZvbGlvLg0KDQoxLiBQb3J0b2ZvbGlvIGFzdXJhbnNpIChLdW1wdWxhbiwgYXRhdSBhZ3JlZ2FzaSwga29udHJhayBhc3VyYW5zaSkgbWV3YWtpbGkga2V3YWppYmFuIHBlcnVzYWhhYW4gYXN1cmFuc2kgZGVuZ2FuIG1lbWJhaGFzIHByb2JhYmlsaXRhcyBoYXNpbCB5YW5nIGJlc2FyIGRlbmdhbiBtZW5nZ3VuYWthbiBnYWdhc2FuIGRpc3RyaWJ1c2kgaGVhdnktdGFpbCBkaSBCYWdpYW4gMTAuMi4NCg0KMi4gUG9ydG9mb2xpbyBhc3VyYW5zaSBtZXdha2lsaSBrZXdhamliYW4gcGVydXNhaGFhbiBzZWhpbmdnYSBwZXJ1c2FoYWFuIGFzdXJhbnNpIG1lbnlpbXBhbiBhc2V0IGRhbGFtIGp1bWxhaCB5YW5nIHNldGFyYSB1bnR1ayBtZW1lbnVoaSBrZXdhamliYW4gdGVyc2VidXQuIFVrdXJhbiByaXNpa28geWFuZyBkaXBlcmtlbmFsa2FuIHBhZGEgQmFnaWFuIDEwLjMsIG1lcmluZ2thcyBkaXN0cmlidXNpIHBvcnRvZm9saW8gYXN1cmFuc2kgZGFuIHVrdXJhbiByaW5na2FzYW4gaW5pIGRpZ3VuYWthbiB1bnR1ayBtZW5ndWt1ciBqdW1sYWggYXNldCB5YW5nIHBlcmx1IGRpcGVydGFoYW5rYW4gb2xlaCBwZXJ1c2FoYWFuIGFzdXJhbnNpIHVudHVrIG1lbWVudWhpIGtld2FqaWJhbi4NCg0KMy4gUGFkYSBCYWdpYW4gMy40IG1lbXBlbGFqYXJpIG1la2FuaXNtZSB5YW5nIGRpZ3VuYWthbiBwZW1lZ2FuZyBwb2xpcyB1bnR1ayBtZW55ZWJhcmthbiByaXNpa28gc2VwZXJ0aSBkZWR1Y3RpYmxlIGRhbiBiYXRhc2FuIHBvbGlzLiBEZW5nYW4gY2FyYSB5YW5nIHNhbWEsIHBlcnVzYWhhYW4gYXN1cmFuc2kgbWVuZ2d1bmFrYW4gbWVrYW5pc21lIHlhbmcgc2FtYSB1bnR1ayBtZW55ZWJhcmthbiByaXNpa28gcG9ydG9mb2xpby4gTWVyZWthIG1lbWJlbGkgcGVybGluZHVuZ2FuIHJpc2lrbyBkYXJpIHJlYXN1cmFkdXIsIHNlYnVhaCBwZXJ1c2FoYWFuIGFzdXJhbnNpIHVudHVrIHBlcnVzYWhhYW4gYXN1cmFuc2kuNC4NCg0KIyMgIDEwLjIgVGFpbHMgb2YgRGlzdHJpYnV0aW9ucw0KDQpQYWRhIHN1YmFiIGluaSBha2FuIG1lbWJhaGFzIG1lbmdlbmFpOg0KDQoxLiBNZW5nZ2FtYmFya2FuIGRpc3RyaWJ1c2kgZWtvciBiZXJhdCBzZWNhcmEgaW50dWl0aWYuDQoNCjIuIE1lbmdrbGFzaWZpa2FzaWthbiBiZXJhdCBla29yIGRpc3RyaWJ1c2kgYmVyZGFzYXJrYW4gbW9tZW4uDQoNCjMuIE1lbWJhbmRpbmdrYW4gZWtvciBkYXJpIGR1YSBkaXN0cmlidXNpLg0KDQpQYWRhIHRhaHVuIDE5OTgsIGh1amFuIGVzIHR1cnVuIGRpIE9udGFyaW8gYmFnaWFuIHRpbXVyLCBiYXJhdCBkYXlhIFF1ZWJlYyBkYW4gYmVybGFuZ3N1bmcgc2VsYW1hIGVuYW0gaGFyaS4gUGVyaXN0aXdhIGluaSBtZXJ1cGFrYW4gZHVhIGthbGkgbGlwYXQgZGFyaSBjdXJhaCBodWphbiB5YW5nIHBlcm5haCB0ZXJqYWRpIHBhZGEgYmFkYWkgZXMgc2ViZWx1bW55YSBkYW4gbWVuZ2FraWJhdGthbiBiZW5jYW5hIHlhbmcgbWVuZ2hhc2lsa2FuIGxlYmloIGRhcmkgODQwLjAwMCBrbGFpbSBhc3VyYW5zaS4gSnVtbGFoIGluaSBhZGFsYWggMjAgbGViaWggYmFueWFrIGRhcmlwYWRhIGtsYWltIHlhbmcgZGlzZWJhYmthbiBvbGVoIEJhZGFpIEFuZHJldy4gQmVuY2FuYSBpbmkgbWVueWViYWJrYW4gc2VraXRhciAxLDQ0IG1pbGlhciBkb2xhciBLYW5hZGEgZGFsYW0gcGVueWVsZXNhaWFuIGFzdXJhbnNpIHlhbmcgbWVydXBha2FuIGJlYmFuIGtlcnVnaWFuIHRlcnRpbmdnaSBkYWxhbSBzZWphcmFoIEthbmFkYS4gSW5pIGJ1a2FuIGNvbnRvaCB5YW5nIHRlcmlzb2xhc2kgZGVuZ2FuIHBlcmlzdGl3YSBiZW5jYW5hIHNlcnVwYSB5YW5nIG1lbnllYmFia2FuIGtlcnVnaWFuIGFzdXJhbnNpIHlhbmcgZWtzdHJpbSBhZGFsYWggQmFkYWkgSGFydmV5LCBTdXBlcnN0b3JtIFNhbmR5LCBnZW1wYSBidW1pIGRhbiB0c3VuYW1pIEplcGFuZyB0YWh1biAyMDExLCBkYW4gbGFpbiBzZWJhZ2FpbnlhLg0KDQpEYWxhbSBrb250ZWtzIGFzdXJhbnNpLCBiZWJlcmFwYSBrZXJ1Z2lhbiBiZXNhciB5YW5nIG1lbmltcGEgcG9ydG9mb2xpbyBkYW4ga2VtdWRpYW4gZGlrb252ZXJzaSBtZW5qYWRpIGtsYWltIGJpYXNhbnlhIG1ld2FraWxpIGJhZ2lhbiB0ZXJiZXNhciBkYXJpIGdhbnRpIHJ1Z2kgeWFuZyBkaWJheWFya2FuIG9sZWggcGVydXNhaGFhbiBhc3VyYW5zaS4gS2VydWdpYW4ganVnYSBkaXNlYnV0ICdla3N0cmVtJywgZGltb2RlbGthbiBzZWNhcmEga3VhbnRpdGF0aWYgb2xlaCBla29yIGRhcmkgZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMgdGVya2FpdC4gTWlzYWxueWEsIHBlcmlvZGUgdGVrYW5hbiBwYWRhIGtldWFuZ2FuIGRhcGF0IG11bmN1bCBkZW5nYW4gZnJla3VlbnNpIHlhbmcgbGViaWggdGluZ2dpIGRhcmkgeWFuZyBkaWhhcmFwa2FuLCBkYW4ga2VydWdpYW4gYXN1cmFuc2kgZGFwYXQgdGVyamFkaSBkZW5nYW4gdGluZ2thdCBrZXBhcmFoYW4geWFuZyBsZWJpaCBidXJ1ay4gT2xlaCBrYXJlbmEgaXR1LCBzdHVkaSB0ZW50YW5nIHBlcmlsYWt1IHByb2JhYmlsaXN0aWsgcGFkYSBiYWdpYW4gZWtvciBtb2RlbCBha3R1YXJpYSBzYW5nYXQgcGVudGluZyBkYWxhbSBrZXJhbmdrYSBrZXJqYSBtb2Rlcm4gbWFuYWplbWVuIHJpc2lrbyBrdWFudGl0YXRpZi4gVW50dWsgYWxhc2FuIGluaSwgYmFnaWFuIGluaSBkaWtodXN1c2thbiB1bnR1ayBwZW5nZW5hbGFuIGJlYmVyYXBhIGdhZ2FzYW4gbWF0ZW1hdGlrYSB5YW5nIG1lbmNpcmlrYW4gYm9ib3QgZWtvciB2YXJpYWJlbCBhY2FrLiANCg0KU2VjYXJhIGZvcm1hbCwgZGVmaW5pc2lrYW4gWCBzZWJhZ2FpIGtld2FqaWJhbiAoYWNhaykgeWFuZyBtdW5jdWwgZGFyaSBrdW1wdWxhbiAocG9ydG9mb2xpbykga29udHJhayBhc3VyYW5zaS4gKFBhZGEgYmFiLWJhYiBzZWJlbHVtbnlhIHRlbGFoIG1lbmdndW5ha2FuIFMgdW50dWsga2VydWdpYW4gYWdyZWdhdCkuIFBhZGEgYmFnaWFuIGluaSBtZW1wZWxhamFyaSBla29yIGthbmFuIGRhcmkgZGlzdHJpYnVzaSBYIHlhbmcgbWVyZXByZXNlbnRhc2lrYW4gdGVyamFkaW55YSBrZXJ1Z2lhbiBiZXNhci4gU2VjYXJhIGluZm9ybWFsLCBzZWJ1YWggdmFyaWFiZWwgYWNhayBkaWthdGFrYW4gYmVyZWtvciBiZXJhdCBqaWthIHByb2JhYmlsaXRhcyB0aW5nZ2kgZGliZXJpa2FuIHBhZGEgbmlsYWkgeWFuZyBiZXNhci4gUGVyaGF0aWthbiBiYWh3YSBpbmkgdGlkYWsgYmVyYXJ0aSBiYWh3YSBkZW5zaXRhcyBwcm9iYWJpbGl0YXMvZnVuZ3NpIG1hc3NhIG1lbmluZ2thdCBrZXRpa2EgbmlsYWkgWCBtZW51anUgdGFrIHRlcmhpbmdnYS4gTWVtYW5nIHVudHVrIHZhcmlhYmVsIGFjYWsgYmVybmlsYWkgcmlpbCwgcGRmL3BtZiBoYXJ1cyBiZXJrdXJhbmcgaGluZ2dhIHRhayB0ZXJoaW5nZ2EgdW50dWsgbWVuamFtaW4gcHJvYmFiaWxpdGFzIHRvdGFsIHNhbWEgZGVuZ2FuIHNhdHUuIE5hbXVuLCB5YW5nIG1lbmphZGkgcGVyaGF0aWFuIGFkYWxhaCBsYWp1IHBlbHVydWhhbiBwZGYvcG1mLiBIYXNpbCB5YW5nIHRpZGFrIGRpaW5naW5rYW4gbGViaWggbXVuZ2tpbiB0ZXJqYWRpIHBhZGEgcG9ydG9mb2xpbyBhc3VyYW5zaSB5YW5nIGRpZ2FtYmFya2FuIG9sZWggdmFyaWFiZWwgYWNhayBrZXJ1Z2lhbiB5YW5nIG1lbWlsaWtpIGVrb3IgeWFuZyBsZWJpaCBiZXJhdCAoa2FuYW4pLiBCb2JvdCBla29yIGRhcGF0IGJlcnVwYSBrb25zZXAgYWJzb2x1dCBhdGF1IHJlbGF0aWYuIEtodXN1c255YSwgdW50dWsgeWFuZyBwZXJ0YW1hZGFwYXQgbWVuZ2FuZ2dhcCB2YXJpYWJlbCBhY2FrIG1lbWlsaWtpIGVrb3IgeWFuZyBiZXJhdCBqaWthIHNpZmF0IG1hdGVtYXRpcyB0ZXJ0ZW50dSBkYXJpIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIHRlcnBlbnVoaS4gTWFrYSBkYXBhdCBkaWthdGFrYW4gZWtvciBkYXJpIHNhdHUgZGlzdHJpYnVzaSBsZWJpaCBiZXJhdC9yaW5nYW4gZGFyaSB5YW5nIGxhaW4gamlrYSBiZWJlcmFwYSB1a3VyYW4gZWtvciBsZWJpaCBiZXNhci9rZWNpbC4NCg0KQmViZXJhcGEgcGVuZGVrYXRhbiBrdWFudGl0YXRpZiB0ZWxhaCBkaXVzdWxrYW4gdW50dWsgbWVuZ2tsYXNpZmlrYXNpa2FuIGRhbiBtZW1iYW5kaW5na2FuIGJvYm90IGVrb3IuIERpIGFudGFyYSBzZWJhZ2lhbiBiZXNhciBwZW5kZWthdGFuIGluaSwgZnVuZ3NpIGtlbGFuZ3N1bmdhbiBoaWR1cCBiZXJmdW5nc2kgc2ViYWdhaSBibG9rIGJhbmd1bmFuLiBCZXJpa3V0IGluaSBtZXJ1cGFrYW4gbWVtcGVya2VuYWxrYW4gZHVhIG1ldG9kZSBrbGFzaWZpa2FzaSBla29yIHlhbmcgc2VkZXJoYW5hIG5hbXVuIGJlcmd1bmEsIHlhbmcga2VkdWFueWEgZGlkYXNhcmthbiBwYWRhIHBlcmlsYWt1IGZ1bmdzaSBrZWxhbmdzdW5nYW4gaGlkdXAgWC4NCg0KIyMjIENsYXNzaWZpY2F0aW9uIEJhc2VkIG9uIE1vbWVudHMNCg0KU2FsYWggc2F0dSBjYXJhIHVudHVrIG1lbmdrbGFzaWZpa2FzaWthbiBib2JvdCBla29yIGRhcmkgc3VhdHUgZGlzdHJpYnVzaSBhZGFsYWggZGVuZ2FuIG1lbmlsYWkga2ViZXJhZGFhbiBtb21lbi1tb21lbiBzZXNhYWUuIEthcmVuYSB0dWp1YW4gdXRhbWEgdGVybGV0YWsgcGFkYSBla29yIGthbmFuIGRpc3RyaWJ1c2ksIG1ha2EgbWVuZ2FzdW1zaWthbiB2YXJpYWJlbCBhY2FrIGtld2FqaWJhbiBhdGF1IGtlcnVnaWFuICRYJCBiZXJuaWxhaSBwb3NpdGlmLiBQYWRhIGF3YWxueWEsIG1vbWVuIHNlc2FhdCBrZS1rIGRhcmkgcGV1YmFoIGFjYWsga29udGludSAkWCQgeWFuZyBkaXBlcmtlbmFsa2FuIHBhZGEgQmFnaWFuIDMuMSwgZGFwYXQgZGloaXR1bmcgc2ViYWdhaSBiZXJpa3V0Lg0KDQokJFxtdV9rJyA9ICBcaW50XzBee1xpbmZ0eX0geF5rIGYoeCkgfmR4ID0gayBcaW50XzBee1xpbmZ0eX0geF57ay0xfSBTKHgpIH5keCwgXFwkJA0KDQpkaSBtYW5hICRTKFxjZG90KSQgbWVueWF0YWthbiBmdW5nc2kgc3Vydml2YWwgZGFyaSAkWCQgLiBVbmdrYXBhbiBpbmkgbWVuZWthbmthbiBiYWh3YSBrZWJlcmFkYWFuIG1vbWVuIG1lbnRhaCBiZXJnYW50dW5nIHBhZGEgcGVyaWxha3UgYXNpbXRvdGlrIGRhcmkgZnVuZ3NpIHN1cnZpdmFsIGRpIHRhayB0ZXJoaW5nZ2EuIFlha25pLCBzZW1ha2luIGNlcGF0IGZ1bmdzaSBzdXJ2aXZhbCBtZWx1cnVoIGtlIG5vbCwgc2VtYWtpbiB0aW5nZ2kgb3JkZSBtb21lbiBiZXJoaW5nZ2EgJChrKSQgeWFuZyBkaW1pbGlraSBvbGVoIHZhcmlhYmVsIGFjYWsgdGVya2FpdC4gQW5kYSBkYXBhdCBtZW5hZnNpcmthbiAka157XGFzdH0kIHNlYmFnYWkgbmlsYWkgdGVyYmVzYXIgZGFyaSAkayQgc2VoaW5nZ2EgbW9tZW5ueWEgdGVyYmF0YXMuIFNlY2FyYSBmb3JtYWwsIGRlZmluaXNpa2FuICRrXntcYXN0fT1cc3VwXHtrID4gMDpcbXVfayc8XGluZnR5IFx9JCAsIGRpbWFuYSBzdXAgbWV3YWtpbGkgc3VwcmVtdW0uDQoNCmBEZWZpbmlzaSAxMC4xLmAgUGVydGltYmFuZ2thbiB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIG5vbi1uZWdhdGlmICRYJCAuIA0KDQoxLiBKaWthIHNlbXVhIG1vbWVuIGJha3UgcG9zaXRpZiBhZGEsIHlhaXR1IG9yZGUgbWFrc2ltYWwgZGFyaSBtb21lbiBiZXJoaW5nZ2EgJGtee1xhc3R9PVxpbmZ0eSQgLCBtYWthICRYJCBkaWthdGFrYW4gYmVyZWtvciByaW5nYW4gYmVyZGFzYXJrYW4gbWV0b2RlIG1vbWVuLg0KDQoyLiBKaWthICRrXntcYXN0fSA8IFxpbmZ0eSQsIG1ha2EgJFgkIGRpa2F0YWthbiBiZXJla29yIGJlcmF0IChkaWthdGFrYW4gYmVyZWtvciBiZXJhdCBqaWthIHByb2JhYmlsaXRhcyB0aW5nZ2kgZGliZXJpa2FuIHBhZGEgbmlsYWkgeWFuZyBiZXNhcikgYmVyZGFzYXJrYW4gbWV0b2RlIG1vbWVuLiANCg0KMy4gU2VsYWluIGl0dSwgdW50dWsgZHVhIHZhcmlhYmVsIGFjYWsgcnVnaSBwb3NpdGlmICRYXzEkIGRhbiAkWF8yJCBkZW5nYW4gb3JkZSBtYWtzaW1hbCBtb21lbiBtYXNpbmctbWFzaW5nICRrXntcYXN0fV8xJCBkYW4gJGtee1xhc3R9XzEkLCBkZW5nYW4gbWVuZ2F0YWthbiAkWF8xJCBtZW1pbGlraSBla29yIChrYW5hbikgeWFuZyBsZWJpaCBiZXJhdCBkYXJpcGFkYSAkWF8yJCBqaWthICRrXntcYXN0fV8xXGxlcSBrXntcYXN0fV8yJC4NCg0KYmFnaWFuIHBlcnRhbWEgZGFyaSBEZWZpbmlzaSAxMC4xIGFkYWxhaCBrb25zZXAgYWJzb2x1dCBkYXJpIGJvYm90IGVrb3IsIHNlZGFuZ2thbiBiYWdpYW4ga2VkdWEgYWRhbGFoIGtvbnNlcCByZWxhdGlmIGRhcmkgYm9ib3QgZWtvciB5YW5nIG1lbWJhbmRpbmdrYW4gZWtvciAoa2FuYW4pIGRpIGFudGFyYSBkdWEgZGlzdHJpYnVzaS4gU2VsYW5qdXRueWEsIGthbWkgbWVueWFqaWthbiBiZWJlcmFwYSBjb250b2ggeWFuZyBtZW5naWx1c3RyYXNpa2FuIGFwbGlrYXNpIG1ldG9kZSBiZXJiYXNpcyBtb21lbiB1bnR1ayBtZW1iYW5kaW5na2FuIGJvYm90IGVrb3IuDQoNCmBjb250b2ggMTAuMi4xLmAgU2lmYXQgZWtvciByaW5nYW4gZGFyaSBkaXN0cmlidXNpIGdhbW1hLiANCg0KTWlzYWxrYW4gJFhcc2ltIGdhbW1hKFxhbHBoYSxcdGhldGEpJCwgZGVuZ2FuICRcYWxwaGE+MCQgZGFuICRcdGhldGE+MCQgLCBtYWthIHVudHVrIHNlbXVhICRrPjAkICwgdHVuanVra2FuIGJhaHdhICRcbXVfaycgPCBcaW5mdHkkLg0KDQokJFxiZWdpbntlcW5hcnJheSp9DQogICAgXG11X2snICY9JiBcaW50XzBee1xpbmZ0eX0geF5rIFxmcmFje3hee1xhbHBoYS0xfSBlXnsteC9cdGhldGF9fXtcR2FtbWEoXGFscGhhKSBcdGhldGFee1xhbHBoYX19IGR4IFxcDQogICAgJj0mIFxpbnRfMF57XGluZnR5fSAoeVx0aGV0YSleayAgXGZyYWN7KHlcdGhldGEpXntcYWxwaGEtMX0gZV57LXl9fXtcR2FtbWEoXGFscGhhKSBcdGhldGFee1xhbHBoYX19IFx0aGV0YSBkeSBcXA0KICAgICY9JiBcZnJhY3tcdGhldGFea317XEdhbW1hKFxhbHBoYSl9IFxHYW1tYShcYWxwaGEraykgPCBcaW5mdHkuDQpcZW5ke2VxbmFycmF5Kn0kJA0KDQprYXJlbmEgc2VtdWEgbW9tZW4gcG9zaXRpZiBhZGEsIHlhaXR1ICRrXntcYXN0fT1caW5mdHkkLCBzZXN1YWkgZGVuZ2FuIG1ldG9kZSBrbGFzaWZpa2FzaSBiZXJiYXNpcyBtb21lbiBwYWRhIERlZmluaXNpIDEwLjEsIG1ha2EgZGlzdHJpYnVzaSBnYW1tYSBiZXJla29yIHJpbmdhbg0KDQpgQ29udG9oIDEwLjIuMi5gIFNpZmF0IGVrb3IgcmluZ2FuIGRhcmkgZGlzdHJpYnVzaSBXZWlidWxsLiANCg0KTWlzYWxrYW4gJFhcc2ltIFdlaWJ1bGwoXHRoZXRhLFx0YXUpJCwgZGVuZ2FuICRcdGhldGE+MCQgZGFuICRcdGF1PjAkICwgbWFrYSB1bnR1ayBzZW11YSAkaz4wJCAsIHR1bmp1a2thbiBiYWh3YSAkXG11X2snIDwgXGluZnR5JC4NCg0KJCRcYmVnaW57ZXFuYXJyYXkqfQ0KICAgIFxtdV9rJyAmPSYgXGludF8wXntcaW5mdHl9IHheayBcZnJhY3tcdGF1IHhee1x0YXUtMX0gfXtcdGhldGFee1x0YXV9fSBlXnstKHgvXHRoZXRhKV57XHRhdX19ZHggXFwNCiAgICAmPSYgXGludF8wXntcaW5mdHl9ICBcZnJhY3sgeV57ay9cdGF1fSB9e1x0aGV0YV57XHRhdX19IGVeey15L1x0aGV0YV57XHRhdX19ZHkgXFwNCiAgICAmPSYgXHRoZXRhXntrfSBcR2FtbWEoMStrL1x0YXUpIDwgXGluZnR5Lg0KXGVuZHtlcW5hcnJheSp9JCQNCg0KU2VrYWxpIGxhZ2ksIGthcmVuYSBhZGFueWEgc2VtdWEgbW9tZW4gcG9zaXRpZiwgZGlzdHJpYnVzaSBXZWlidWxsIGJlcmVrb3IgcmluZ2FuLg0KDQpkaXN0cmlidXNpIGdhbW1hIGRhbiBXZWlidWxsIGRpZ3VuYWthbiBzZWNhcmEgbHVhcyBkYWxhbSBwcmFrdGlrIGFrdHVhcmlhLiBBcGxpa2FzaSBkYXJpIGtlZHVhIGRpc3RyaWJ1c2kgaW5pIHNhbmdhdCBsdWFzLCB0ZXJtYXN1aywgbmFtdW4gdGlkYWsgdGVyYmF0YXMgcGFkYSwgcGVtb2RlbGFuIHRpbmdrYXQga2VwYXJhaGFuIGtsYWltIGFzdXJhbnNpLCBwZW5pbGFpYW4gc29sdmFiaWxpdGFzLCBwZW5jYWRhbmdhbiBrZXJ1Z2lhbiwgcGVya2lyYWFuIHJpc2lrbyBhZ3JlZ2F0LCByZWtheWFzYSBrZWFuZGFsYW4sIGRhbiBhbmFsaXNpcyBrZWdhZ2FsYW4uIFNlamF1aCBpbmkga2FtaSB0ZWxhaCBtZWxpaGF0IGR1YSBjb250b2ggcGVuZ2d1bmFhbiBtZXRvZGUgYmVyYmFzaXMgbW9tZW4gdW50dWsgbWVuZ2FuYWxpc2lzIGRpc3RyaWJ1c2kgZWtvciByaW5nYW4uIEthbWkgbWVuZG9rdW1lbnRhc2lrYW4gY29udG9oIGRpc3RyaWJ1c2kgZWtvciBiZXJhdCBzZWJhZ2FpIGJlcmlrdXQuDQoNCmBDb250b2ggMTAuMi4zLmAgU2lmYXQgZWtvciB5YW5nIGJlcmF0IGRhcmkgZGlzdHJpYnVzaSBQYXJldG8uIA0KDQpNaXNhbGthbiAkWFxzaW0gUGFyZXRvKFxhbHBoYSxcdGhldGEpJCAsIGRlbmdhbiAkXGFscGhhPjAkIGRhbiAkXHRoZXRhPjAkICAsIG1ha2EgdW50dWsgJGs+MCQNCg0KJCRcYmVnaW57ZXFuYXJyYXkqfQ0KICAgIFxtdV9rXnsnfSAmPSYgXGludF8wXntcaW5mdHl9IHheayBcZnJhY3tcYWxwaGEgXHRoZXRhXntcYWxwaGF9fXsoeCtcdGhldGEpXntcYWxwaGErMX19IGR4IFxcDQogICAgJj0mIFxhbHBoYSBcdGhldGFee1xhbHBoYX0gXGludF97XHRoZXRhfV57XGluZnR5fSAoeS1cdGhldGEpXmsge3leey0oXGFscGhhKzEpfX0gZHkuDQpcZW5ke2VxbmFycmF5Kn0kJA0KDQptZW1wZXJ0aW1iYW5na2FuIGludGVncmFzaSBzZXJ1cGE6DQoNCiQkXGJlZ2lue2VxbmFycmF5Kn0NCiAgZ19rPVxpbnRfe1x0aGV0YX1ee1xpbmZ0eX0ge3lee2stXGFscGhhLTF9fSBkeT1cbGVmdFx7DQogIFxiZWdpbnthcnJheX17bGx9DQogICAgPFxpbmZ0eSwgJiBcaGJveHtmb3IgfSBrPFxhbHBoYTtcXA0KICAgID1caW5mdHksICYgXGhib3h7Zm9yIH0ga1xnZXEgXGFscGhhLg0KICBcZW5ke2FycmF5fQ0KXHJpZ2h0Lg0KXGVuZHtlcW5hcnJheSp9JCQNCg0KJCRcbGltX3t5XHJpZ2h0YXJyb3cgXGluZnR5fSBcZnJhY3soeS1cdGhldGEpXmsge3leey0oXGFscGhhKzEpfX19e3lee2stXGFscGhhLTF9fT1cbGltX3t5XHJpZ2h0YXJyb3cgXGluZnR5fQ0KKDEtXHRoZXRhL3kpXntrfT0xLiQkDQoNClBlbmVyYXBhbiB0ZW9yZW1hIHBlcmJhbmRpbmdhbiBsaW1pdCB1bnR1ayBpbnRlZ3JhbCB0YWsgdGVudHUgbWVuZ2hhc2lsa2FuIM684oCyayB0ZXJiYXRhcyBqaWthIGRhbiBoYW55YSBqaWthIGdrIHRlcmJhdGFzLiBPbGVoIGthcmVuYSBpdHUsIGtpdGEgZGFwYXQgbWVueWltcHVsa2FuIGJhaHdhIG1vbWVuIG1lbnRhaCBkYXJpIHZhcmlhYmVsIGFjYWsgUGFyZXRvIGhhbnlhIGFkYSBzYW1wYWkgayA8IM6xICwgeWFpdHUsIGviiJcgPSDOsSAsIGRhbiBkZW5nYW4gZGVtaWtpYW4gZGlzdHJpYnVzaW55YSBiZXJla29yIGJlcmF0LiBUZXJsZWJpaCBsYWdpLCBvcmRlIG1ha3NpbWFsIGRhcmkgbW9tZW4gYmVyaGluZ2dhIGhhbnlhIGJlcmdhbnR1bmcgcGFkYSBwYXJhbWV0ZXIgYmVudHVrIM6xIGRhbiBtZXJ1cGFrYW4gZnVuZ3NpIHlhbmcgbWVuaW5na2F0IGRhcmkgzrEgLiBEZW5nYW4ga2F0YSBsYWluLCBiZXJkYXNhcmthbiBtZXRvZGUgbW9tZW4sIGJvYm90IGVrb3IgZGFyaSB2YXJpYWJlbCBhY2FrIFBhcmV0byBoYW55YSBkaW1hbmlwdWxhc2kgb2xlaCDOsSAtIHNlbWFraW4ga2VjaWwgbmlsYWkgzrEgLCBzZW1ha2luIGJlcmF0IGJvYm90IGVrb3JueWEuIEthcmVuYSBr4oiXPOKIniAsIGVrb3IgZGFyaSBkaXN0cmlidXNpIFBhcmV0byBsZWJpaCBiZXJhdCBkaWJhbmRpbmdrYW4gZGVuZ2FuIGRpc3RyaWJ1c2kgZ2FtbWEgZGFuIFdlaWJ1bGwuDQoNCmthbWkgbWVueWltcHVsa2FuIGJhZ2lhbiBpbmkgZGVuZ2FuIGRpc2t1c2kgdGVyYnVrYSB0ZW50YW5nIGtldGVyYmF0YXNhbiBtZXRvZGUgYmVyYmFzaXMgbW9tZW4uIE1lc2tpcHVuIGltcGxlbWVudGFzaW55YSBzZWRlcmhhbmEgZGFuIGludGVycHJldGFzaSBpbnR1aXRpZiwgYWRhIGJlYmVyYXBhIGtlYWRhYW4gdGVydGVudHUgZGkgbWFuYSBwZW5lcmFwYW4gbWV0b2RlIGJlcmJhc2lzIG1vbWVuIHRpZGFrIGNvY29rLiBQZXJ0YW1hLCB1bnR1ayBtb2RlbCBwcm9iYWJpbGlzdGlrIHlhbmcgbGViaWggcnVtaXQsIG1vbWVuIG1lbnRhaCBrZS1rIG11bmdraW4gdGlkYWsgbXVkYWggdW50dWsgZGlwZXJvbGVoLCBkYW4gZGVuZ2FuIGRlbWlraWFuIGlkZW50aWZpa2FzaSB1cnV0YW4gbWFrc2ltYWwgZGFyaSBtb21lbiBoaW5nZ2EgZGFwYXQgbWVuamFkaSB0YW50YW5nYW4uIEtlZHVhLCBtZXRvZGUgYmVyYmFzaXMgbW9tZW4gdGlkYWsgc2VzdWFpIGRlbmdhbiBiYWdpYW4gdXRhbWEgZGFyaSB0ZW9yaSBoZWF2eSB0YWlsIHlhbmcgc3VkYWggbWFwYW4gZGFsYW0gbGl0ZXJhdHVyLiBTZWNhcmEga2h1c3VzLCBrZWJlcmFkYWFuIGZ1bmdzaSBwZW1iYW5na2l0IG1vbWVuIG1lcnVwYWthbiBtZXRvZGUgeWFuZyBwYWxpbmcgcG9wdWxlciB1bnR1ayBtZW5na2xhc2lmaWthc2lrYW4gaGVhdnkgdGFpbCB2ZXJzdXMgbGlnaHQgdGFpbCBkaSBkYWxhbSBrb211bml0YXMgYWt0dWFyaXMgYWthZGVtaXMuIE5hbXVuLCB1bnR1ayBiZWJlcmFwYSB2YXJpYWJlbCBhY2FrIHNlcGVydGkgdmFyaWFiZWwgYWNhayBsb2dub3JtYWwsIGZ1bmdzaSBwZW1iYW5na2l0IG1vbWVubnlhIHRpZGFrIGFkYSBiYWhrYW4gc2VtdWEgbW9tZW4gcG9zaXRpZm55YSB0ZXJiYXRhcy4gRGFsYW0ga2FzdXMgaW5pLCBwZW5lcmFwYW4gbWV0b2RlIGJlcmJhc2lzIG1vbWVuIGRhcGF0IG1lbmdoYXNpbGthbiBwZW5pbGFpYW4gYm9ib3QgZWtvciB5YW5nIGJlcmJlZGEuIEtldGlnYSwga2V0aWthIGtpdGEgcGVybHUgbWVtYmFuZGluZ2thbiBib2JvdCBla29yIGFudGFyYSBkdWEgZGlzdHJpYnVzaSBiZXJla29yIHJpbmdhbiB5YW5nIG1lbWlsaWtpIHNlbXVhIG1vbWVuIHBvc2l0aWYsIG1ldG9kZSBiZXJiYXNpcyBtb21lbiB0aWRhayBsYWdpIGluZm9ybWF0aWYgKGxpaGF0LCBtaXNhbG55YSwgQ29udG9oIDEwLjIuMSBkYW4gMTAuMi4yKS4NCg0KIyMjIENvbXBhcmlzb24gQmFzZWQgb24gTGltaXRpbmcgVGFpbCBCZWhhdmlvcg0KDQpVbnR1ayBtZW5nYXRhc2kgbWFzYWxhaC1tYXNhbGFoIHlhbmcgZGlzZWJ1dGthbiBkaSBhdGFzIHBhZGEgbWV0b2RlIGtsYXNpZmlrYXNpIGJlcmJhc2lzIG1vbWVuLCBzZWJ1YWggcGVuZGVrYXRhbiBhbHRlcm5hdGlmIHVudHVrIG1lbWJhbmRpbmdrYW4gYm9ib3QgZWtvciBhZGFsYWggZGVuZ2FuIHNlY2FyYSBsYW5nc3VuZyBtZW1wZWxhamFyaSBwZXJpbGFrdSBwZW1iYXRhcyBkYXJpIGZ1bmdzaS1mdW5nc2kgc3Vydml2YWwuDQoNCkRlZmluaXNpIDEwLjIuIFVudHVrIGR1YSB2YXJpYWJlbCBhY2FrICRYJCBkYW4gJFkkICwgbWlzYWxrYW4NCg0KJCRcZ2FtbWE9XGxpbV97dFxyaWdodGFycm93IFxpbmZ0eX1cZnJhY3tTX1godCl9e1NfWSh0KX0uJCQNCg0KRGVuZ2FuIDoNCg0KMS4gJFgkIG1lbWlsaWtpIGVrb3Iga2FuYW4geWFuZyBsZWJpaCBiZXJhdCBkYXJpcGFkYSAkWSQgamlrYSAkXGdhbW1hPVxpbmZ0eSQ7IA0KDQoyLiAkWCQgZGFuICRZJCBzZWNhcmEgcHJvcG9yc2lvbmFsIGVrdWl2YWxlbiBwYWRhIGVrb3Iga2FuYW4gamlrYSAkXGdhbW1hID1jIFxpbiAoMCwgXGluZnR5KSQ7IA0KDQozLiAkWCQgbWVtaWxpa2kgZWtvciBrYW5hbiB5YW5nIGxlYmloIHJpbmdhbiBkYXJpcGFkYSAkWSQgamlrYSAkXGdhbW1hPTAkLg0KDQpgQ29udG9oIDEwLjIuNC5gIFBlcmJhbmRpbmdhbiBkaXN0cmlidXNpIFBhcmV0byBkYW4gZGlzdHJpYnVzaSBXZWlidWxsLiANCg0KTWlzYWxrYW4gJFhcc2ltIFBhcmV0byhcYWxwaGEsIFx0aGV0YSkkIGRhbiAkWVxzaW0gV2VpYnVsbChcdGF1LCBcdGhldGEpJCwgdW50dWsgJFxhbHBoYT4wJCwgJFx0YXU+MCQsIGRhbiAkXHRoZXRhPjAkLiBUdW5qdWtrYW4gYmFod2EgUGFyZXRvIG1lbWlsaWtpIGVrb3Iga2FuYW4geWFuZyBsZWJpaCBiZXJhdCBkYXJpcGFkYSBXZWlidWxsLg0KDQokJFxiZWdpbntlcW5hcnJheSp9DQogICAgXGxpbV97dFxyaWdodGFycm93IFxpbmZ0eX1cZnJhY3tTX1godCl9e1NfWSh0KX0gJj0mIFxsaW1fe3RccmlnaHRhcnJvdyBcaW5mdHl9XGZyYWN7KDErdC9cdGhldGEpXnstXGFscGhhfX17XGV4cFx7LSh0L1x0aGV0YSlee1x0YXV9XH19IFxcDQogICAgJj0mIFxsaW1fe3RccmlnaHRhcnJvdyBcaW5mdHl9XGZyYWN7XGV4cFx7dC9cdGhldGFee1x0YXV9IFx9fXsoMSt0XnsxL1x0YXV9L1x0aGV0YSlee1xhbHBoYX19IFxcDQogICAgJj0mIFxsaW1fe3RccmlnaHRhcnJvdyBcaW5mdHl9XGZyYWN7XHN1bV97aT0wfV57XGluZnR5fVxsZWZ0KFxmcmFje3R9e1x0aGV0YV57XHRhdX19XHJpZ2h0KV57aX0vaSF9eygxK3ReezEvXHRhdX0vXHRoZXRhKV57XGFscGhhfX1cXA0KICAgICY9JiBcbGltX3t0XHJpZ2h0YXJyb3cgXGluZnR5fSBcc3VtX3tpPTB9XntcaW5mdHl9IFxsZWZ0KHReey1pL1xhbHBoYX0rXGZyYWN7dF57KDEvXHRhdS1pL1xhbHBoYSl9fXtcdGhldGF9IFxyaWdodCleey1cYWxwaGF9L1x0aGV0YV57XHRhdSBpfWkhXFwNCiAgICAmPSYgXGluZnR5Lg0KXGVuZHtlcW5hcnJheSp9JCQNCg0KT2xlaCBrYXJlbmEgaXR1LCBkaXN0cmlidXNpIFBhcmV0byBtZW1pbGlraSBla29yIHlhbmcgbGViaWggYmVyYXQgZGFyaXBhZGEgZGlzdHJpYnVzaSBXZWlidWxsLiBLaXRhIGp1Z2EgZGFwYXQgbWVueWFkYXJpIGJhaHdhIGVrc3BvbmVuc2lhbCBtZW5jYXBhaSB0YWsgdGVyaGluZ2dhIGxlYmloIGNlcGF0IGRhcmlwYWRhIHBvbGlub21pYWwsIG9sZWgga2FyZW5hIGl0dSwgYmF0YXMgeWFuZyBkaXNlYnV0a2FuIGRpIGF0YXMgaGFydXNsYWggdGFrIHRlcmhpbmdnYS4NCg0KdW50dWsgYmViZXJhcGEgZGlzdHJpYnVzaSB5YW5nIGZ1bmdzaS1mdW5nc2kga2VsYW5nc3VuZ2FuIGhpZHVwbnlhIHRpZGFrIGRhcGF0IGRpZWtzcHJlc2lrYW4gc2VjYXJhIGVrc3BsaXNpdCwga2l0YSBkYXBhdCBtZW5nZ3VuYWthbiBydW11cyBhbHRlcm5hdGlmIGJlcmlrdXQgaW5pOg0KDQokJFxiZWdpbntlcW5hcnJheSp9DQogICAgXGxpbV97dFx0byBcaW5mdHl9IFxmcmFje1NfWCh0KX17U19ZKHQpfSAmPSYgXGxpbV97dCBcdG8gXGluZnR5fSBcZnJhY3tTX1heeyd9KHQpfXtTX1leeyd9KHQpfSBcXA0KICAgICY9JiBcbGltX3t0IFx0byBcaW5mdHl9IFxmcmFjey1mX1godCl9ey1mX1kodCl9XFwNCiAmPSYgXGxpbV97dFx0byBcaW5mdHl9IFxmcmFje2ZfWCh0KX17Zl9ZKHQpfS4NClxlbmR7ZXFuYXJyYXkqfSQkDQoNCm1lbmdpbmdhdCBiYWh3YSBmdW5nc2kga2VwYWRhdGFubnlhIGFkYS4gSW5pIGFkYWxhaCBhcGxpa2FzaSBkYXJpIEF0dXJhbiBMJ0jDtHBpdGFsIGRhcmkga2Fsa3VsdXMNCg0KYENvbnRvaCAxMC4yLjUuYCBQZXJiYW5kaW5nYW4gZGlzdHJpYnVzaSBQYXJldG8gZGVuZ2FuIGRpc3RyaWJ1c2kgZ2FtbWEuIA0KDQpNaXNhbGthbiAkWFxzaW0gUGFyZXRvKFxhbHBoYSwgXHRoZXRhKSQgZGFuICRZXHNpbSBnYW1tYShcYWxwaGEsIFx0aGV0YSkkLCB1bnR1ayAkXGFscGhhPjAkIGRhbiAkXHRoZXRhPjAkIC4gVHVuanVra2FuIGJhaHdhIFBhcmV0byBtZW1pbGlraSBla29yIGthbmFuIHlhbmcgbGViaWggYmVyYXQgZGFyaXBhZGEgZ2FtbWEuDQoNCiQkXGJlZ2lue2VxbmFycmF5Kn0NCiAgICBcbGltX3t0XHRvIFxpbmZ0eX0gXGZyYWN7Zl97WH0odCl9e2Zfe1l9KHQpfSAmPSYgXGxpbV97dCBcdG8gXGluZnR5fSBcZnJhY3tcYWxwaGEgXHRoZXRhXntcYWxwaGF9ICh0KyBcdGhldGEpXnstXGFscGhhLTF9fXt0XntcdGF1LTF9IGVeey10L1xsYW1iZGF9IFxsYW1iZGFeey1cdGF1fSBcR2FtbWEoXHRhdSleey0xfX0gXFwNCiAmXHByb3B0byYgIFxsaW1fe3RcdG8gXGluZnR5fSBcZnJhY3tlXnt0L1xsYW1iZGF9fXsodCtcdGhldGEpXntcYWxwaGErMX0gdF57XHRhdS0xfX0gXFwNCiAgICAmPSYgXGluZnR5LA0KXGVuZHtlcW5hcnJheSp9JCQNCg0Ka2FyZW5hIGVrc3BvbmVuc2lhbCBtZW51anUgdGFrIHRlcmhpbmdnYSBsZWJpaCBjZXBhdCBkYXJpcGFkYSBwb2xpbm9taWFsLg0KDQojIyAxMC4zIFJpc2sgTWVhc3VyZXMNCg0KTWF0ZXJpIGluaSBha2FuIG1lbXBlbGFqYXJpIDoNCg0KLSBNZW5kZWZpbmlzaWthbiBpZGUga29oZXJlbnNpIGRhbiBtZW5lbnR1a2FuIGFwYWthaCBzdWF0dSB1a3VyYW4gcmlzaWtvIGtvaGVyZW4gYXRhdSB0aWRhay4NCg0KLSBNZW5kZWZpbmlzaWthbiBuaWxhaS1hdC1yaXNpa28gZGFuIG1lbmdoaXR1bmcga3VhbnRpdGFzIGluaSB1bnR1ayBkaXN0cmlidXNpIHRlcnRlbnR1Lg0KDQotIE1lbmRlZmluaXNpa2FuIG5pbGFpLWF0LXJpc2lrbyBla29yIGRhbiBtZW5naGl0dW5nIGJlc2FyYW4gaW5pIHVudHVrIGRpc3RyaWJ1c2kgdGVydGVudHUuDQoNCg0KRGFwYXQgbWVueWF0YWthbiBiYWh3YSByaXNpa28geWFuZyB0ZXJrYWl0IGRlbmdhbiBzYXR1IGRpc3RyaWJ1c2kgbGViaWggYmVyYmFoYXlhIChzZWNhcmEgYXNpbXRvdGlrKSBkaWJhbmRpbmdrYW4gZGlzdHJpYnVzaSBsYWlubnlhIGppa2EgZWtvcm55YSBsZWJpaCBiZXJhdC4gTmFtdW4sIG1lbmdldGFodWkgYmFod2Egc2F0dSByaXNpa28gbGViaWggYmVyYmFoYXlhIChzZWNhcmEgYXNpbXRvdGlrKSBkYXJpcGFkYSByaXNpa28gbGFpbm55YSBtdW5na2luIHRpZGFrIG1lbWJlcmlrYW4gaW5mb3JtYXNpIHlhbmcgY3VrdXAgdW50dWsgdHVqdWFuIG1hbmFqZW1lbiByaXNpa28geWFuZyBjYW5nZ2loLCBkYW4gc2ViYWdhaSB0YW1iYWhhbiwga2l0YSBqdWdhIHRlcnRhcmlrIHVudHVrIG1lbmd1a3VyIHNlYmVyYXBhIGJlc2FyIHJpc2lrbyB0ZXJzZWJ1dC4gRmFrdGFueWEsIGJlc2FybnlhIHJpc2lrbyB5YW5nIHRlcmthaXQgZGVuZ2FuIGRpc3RyaWJ1c2kga2VydWdpYW4geWFuZyBkaWJlcmlrYW4gbWVydXBha2FuIGlucHV0IHBlbnRpbmcgdW50dWsgYmFueWFrIGFwbGlrYXNpIGFzdXJhbnNpLCBzZXBlcnRpIHBlbmVudHVhbiBoYXJnYSBha3R1YXJpYSwgcGVtZXNhbmFuLCBsaW5kdW5nIG5pbGFpLCBwZW5nYXdhc2FuIHBlcmF0dXJhbiBhc3VyYW5zaSwgZGFuIHNlYmFnYWlueWEuDQoNCiMjIyAxMC4zLjEgQ29oZXJlbnQgUmlzayBNZWFzdXJlcw0KDQpVbnR1ayBtZW1iYW5kaW5na2FuIGJlc2FybnlhIHJpc2lrbyBkZW5nYW4gY2FyYSB5YW5nIHByYWt0aXMsIGthbWkgbWVuY2FyaSBmdW5nc2kgeWFuZyBtZW1ldGFrYW4gdmFyaWFiZWwgYWNhayBrZXJ1Z2lhbiB5YW5nIGRpbWluYXRpIGtlIG5pbGFpIG51bWVyaWsgeWFuZyBtZW51bmp1a2thbiB0aW5na2F0IHJpc2lrbywgeWFuZyBkaXNlYnV0IHVrdXJhbiByaXNpa28uIFNlY2FyYSBtYXRlbWF0aXMsIHVrdXJhbiByaXNpa28gc2VjYXJhIHNlZGVyaGFuYSBtZXJpbmdrYXMgZnVuZ3NpIGRpc3RyaWJ1c2kgdmFyaWFiZWwgYWNhayBzZWJhZ2FpIHNhdHUgYW5na2EuIER1YSB1a3VyYW4gcmlzaWtvIHNlZGVyaGFuYSBhZGFsYWggcmF0YS1yYXRhICRcbWF0aHJte0V9W1hdJCBkYW4gZGV2aWFzaSBzdGFuZGFyICRcbWF0aHJte1NEfShYKT1cc3FydHtcbWF0aHJte1Zhcn0oWCl9JC4gQ29udG9oIGtsYXNpayBsYWluIGRhcmkgdWt1cmFuIHJpc2lrbyB0ZXJtYXN1ayBwcmluc2lwIGRldmlhc2kgc3RhbmRhcg0KDQokJA0KXGJlZ2lue2VxdWF0aW9ufQ0KSF97XG1hdGhybXtTRH19KFgpPVxtYXRocm17RX1bWF0rXGFscGhhIFxtYXRocm17U0R9KFgpLFx0ZXh0eyBmb3IgfSBcYWxwaGFcZ2VxIDAsDQpcdGFnezEwLjF9IA0KXGVuZHtlcXVhdGlvbn0NCiQkDQoNCmRhbiBwcmluc2lwIHZhcmlhbnMgDQoNCiQkSF97XG1hdGhybXtWYXJ9fShYKT1cbWF0aHJte0V9W1hdK1xhbHBoYSBcbWF0aHJte1Zhcn0oWCksXHRleHR7IGZvciB9IFxhbHBoYVxnZXEgMC4kJA0KDQpVbnR1ayBtZW1lcmlrc2EgYmFod2Egc2VtdWEgZnVuZ3NpIHlhbmcgZGlzZWJ1dGthbiBkaSBhdGFzIGRhcGF0IG1lbmdndW5ha2FuIHVrdXJhbiByaXNpa28gZGkgbWFuYSBkZW5nYW4gbWVtYXN1a2thbiB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIGRhbiBmdW5nc2ktZnVuZ3NpIHRlcnNlYnV0IG1lbmdoYXNpbGthbiBuaWxhaSBudW1lcmlrLiBEZW5nYW4gY2F0YXRhbiB5YW5nIGJlcmJlZGEsIGZ1bmdzaSAkSF57XGFzdH0oWCk9XGFscGhhIFhee1xiZXRhfSQgdW50dWsgc2V0aWFwICRcYWxwaGEsXGJldGFcbmVxIDAkIHlhbmcgYmVybmlsYWkgcmlpbCwgzrLiiaAwIGJ1a2FuIG1lcnVwYWthbiB1a3VyYW4gcmlzaWtvIGthcmVuYSAkSF57XGFzdH0kIG1lbmdoYXNpbGthbiB2YXJpYWJlbCBhY2FrIGxhaW4gZGFuIGJ1a2FuIG5pbGFpIG51bWVyaWsgdHVuZ2dhbC4NCg0KS2FyZW5hIHVrdXJhbiByaXNpa28gYWRhbGFoIHVrdXJhbiBza2FsYXIgeWFuZyBiZXJ0dWp1YW4gdW50dWsgbWVuZ2d1bmFrYW4gbmlsYWkgbnVtZXJpayB0dW5nZ2FsIHVudHVrIG1lbmdnYW1iYXJrYW4gc2lmYXQgc3Rva2FzdGlrIGRhcmkgdmFyaWFiZWwgYWNhayBrZXJ1Z2lhbiwgbWFrYSB0aWRhayBtZW5naGVyYW5rYW4gamlrYSB0aWRhayBhZGEgdWt1cmFuIHJpc2lrbyB5YW5nIGRhcGF0IG1lbmFuZ2thcCBzZW11YSBpbmZvcm1hc2kgcmlzaWtvIGRhcmkgdmFyaWFiZWwgYWNhayB5YW5nIHRlcmthaXQuIE9sZWgga2FyZW5hIGl0dSwga2V0aWthIG1lbmNhcmkgdWt1cmFuIHJpc2lrbyB5YW5nIGJlcmd1bmEsIGRhbGFtIG1lbmdpbmdhdCBiYWh3YSB1a3VyYW4gdGVyc2VidXQgc2V0aWRha255YSANCg0KLSBoYXJ1cyBkYXBhdCBkaXRhZnNpcmthbiBzZWNhcmEgcHJha3RpczsNCi0gZGFwYXQgZGloaXR1bmcgZGVuZ2FuIG11ZGFoOyBkYW4NCi0gbWFtcHUgbWVyZWZsZWtzaWthbiBpbmZvcm1hc2kgcmlzaWtvIHlhbmcgcGFsaW5nIHBlbnRpbmcgeWFuZyBtZW5kYXNhcmkgZGlzdHJpYnVzaSBrZXJ1Z2lhbi4NCg0KDQpCZWJlcmFwYSB1a3VyYW4gcmlzaWtvIHRlbGFoIGRpa2VtYmFuZ2thbiBkYWxhbSBsaXRlcmF0dXIuIE5hbXVuLCB0aWRhayBhZGEgdWt1cmFuIHJpc2lrbyB0ZXJiYWlrIHlhbmcgZGFwYXQgbWVuZ3VuZ2d1bGkgeWFuZyBsYWluLCBkYW4gcGVtaWxpaGFuIHVrdXJhbiByaXNpa28geWFuZyB0ZXBhdCBzYW5nYXQgYmVyZ2FudHVuZyBwYWRhIHBlcnRhbnlhYW4gYXBsaWthc2kgeWFuZyBkaWhhZGFwaS4gRGFsYW0gaGFsIGluaSwgc2FuZ2F0IHBlbnRpbmcgdW50dWsgbWVuZWthbmthbiBiYWh3YSByaXNpa28gYWRhbGFoIGtvbnNlcCB5YW5nIHN1Ynlla3RpZiwgZGFuIGRlbmdhbiBkZW1pa2lhbiwgYmFoa2FuIGRlbmdhbiBtYXNhbGFoIHlhbmcgc2FtYSwgYWRhIGJlcmJhZ2FpIHBlbmRla2F0YW4gdW50dWsgbWVuaWxhaSByaXNpa28uIE5hbXVuLCB1bnR1ayBiYW55YWsgYXBsaWthc2kgbWFuYWplbWVuIHJpc2lrbywgYWRhIGtlc2VwYWthdGFuIGx1YXMgYmFod2EgdWt1cmFuIHJpc2lrbyB5YW5nIG1hc3VrIGFrYWwgc2VjYXJhIGVrb25vbWkgaGFydXMgbWVtZW51aGkgZW1wYXQgYWtzaW9tYSB1dGFtYSB5YW5nIGFrYW4ga2FtaSBqZWxhc2thbiBzZWNhcmEgcmluY2kgc2VsYW5qdXRueWEuIFVrdXJhbiByaXNpa28geWFuZyBtZW1lbnVoaSBha3Npb21hLWFrc2lvbWEgaW5pIGRpc2VidXQgc2ViYWdhaSB1a3VyYW4gcmlzaWtvIHlhbmcga29oZXJlbi4NCg0KUGVydGltYmFuZ2thbiBzZWJ1YWggdWt1cmFuIHJpc2lrbyAkSChcY2RvdCkkLiBVa3VyYW4gaW5pIGRpa2F0YWthbiBzZWJhZ2FpIHVrdXJhbiByaXNpa28geWFuZyBrb2hlcmVuIHVudHVrIGR1YSB2YXJpYWJlbCBhY2FrICRYJCBkYW4gJFkkIGppa2EgYWtzaW9tYS1ha3Npb21hIGJlcmlrdXQgaW5pIHRlcnBlbnVoaS4NCg0KLSAqQWtzaW9tYSAxLiBTdWJhZGl0aWZpdGFzKjogIA0KDQokSChYK1kpXGxlcSBIKFgpK0goWSkkDQpJbXBsaWthc2kgZWtvbm9taSBkYXJpIGFrc2lvbWEgaW5pIGFkYWxhaCBiYWh3YSBtYW5mYWF0IGRpdmVyc2lmaWthc2kgYWRhIGppa2EgcmlzaWtvLXJpc2lrbyB5YW5nIGJlcmJlZGEgZGlnYWJ1bmdrYW4uDQoNCg0KLSAqQWtzaW9tYSAyLiBNb25vdG9uaXNpdGFzKjogDQogamlrYSAkUHJbWOKJpFldPTEkLiBtYWthIEgoWCniiaRIKFkpLiBJbmdhdCBiYWh3YSBYIGRhbiBZIGFkYWxhaCB2YXJpYWJlbCBhY2FrIHlhbmcgbWV3YWtpbGkga2VydWdpYW4sIGltcGxpa2FzaSBla29ub21pIHlhbmcgbWVuZGFzYXJpbnlhIGFkYWxhaCBiYWh3YSBrZXJ1Z2lhbiB5YW5nIGxlYmloIHRpbmdnaSBwYWRhIGRhc2FybnlhIG1lbmdhcmFoIGtlIHRpbmdrYXQgcmlzaWtvIHlhbmcgbGViaWggdGluZ2dpLg0KIA0KIA0KLSAqQWtzaW9tYSAzLiBIb21vZ2VuaXRhcyBwb3NpdGlmKjogDQokSChjWCkgPSBjSChYKSQgdW50dWsgc2V0aWFwIGtvbnN0YW50YSBwb3NpdGlmIGMuIEltcGxpa2FzaSBla29ub21pIHlhbmcgcG90ZW5zaWFsIGRhcmkgYWtzaW9tYSBpbmkgYWRhbGFoIGJhaHdhIHVrdXJhbiByaXNpa28gaGFydXMgaW5kZXBlbmRlbiBkYXJpIHVuaXQgbW9uZXRlciB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5ndWt1ciByaXNpa28uIFNlYmFnYWkgY29udG9oLCBtaXNhbGthbiBjIGFkYWxhaCBuaWxhaSB0dWthciBtYXRhIHVhbmcgYW50YXJhIGRvbGFyIEFTIGRhbiBkb2xhciBLYW5hZGEsIG1ha2EgcmlzaWtvIGtlcnVnaWFuIGFjYWsgeWFuZyBkaXVrdXIgZGFsYW0gc2F0dWFuIGRvbGFyIEFTICh5YWl0dSwgWCkgZGFuIGRvbGFyIEthbmFkYSAoeWFpdHUsICRjWCQpIHNlaGFydXNueWEgaGFueWEgYmVyYmVkYSBzYW1wYWkgZGVuZ2FuIG5pbGFpIHR1a2FyIGMgKHlhaXR1LCAkY0goeCk9SChjWCkkKS4NCg0KLSAqQWtzaW9tYSA0LiBLZXRpZGFrdmFyaWFzaWFuIHRlcmplbWFoYW4qOiAgDQokSChYICsgYykgPSBIKFgpICsgYyQgdW50dWsgc2V0aWFwIGtvbnN0YW50YSBwb3NpdGlmIGMuIEppa2Ega29uc3RhbnRhIGMgZGlpbnRlcnByZXRhc2lrYW4gc2ViYWdhaSB1YW5nIHR1bmFpIGJlYmFzIHJpc2lrbyBkYW4gWCBhZGFsYWggcG9ydG9mb2xpbyBhc3VyYW5zaSwgbWFrYSBwZW5hbWJhaGFuIHVhbmcgdHVuYWkga2UgZGFsYW0gcG9ydG9mb2xpbyBoYW55YSBtZW5pbmdrYXRrYW4gcmlzaWtvIHBvcnRvZm9saW8gc2ViZXNhciBqdW1sYWggdWFuZyB0dW5haS4NCg0KTWVtdmVyaWZpa2FzaSBzaWZhdCBrb2hlcmVuIHVudHVrIGJlYmVyYXBhIHVrdXJhbiByaXNpa28gYmlzYSBzYW5nYXQgbXVkYWgsIHRldGFwaSB0ZXJrYWRhbmcgc2FuZ2F0IG1lbmFudGFuZy4gU2ViYWdhaSBjb250b2gsIGFkYWxhaCBoYWwgeWFuZyBtdWRhaCB1bnR1ayBtZW1lcmlrc2EgYXBha2FoIHJhdGEtcmF0YSBhZGFsYWggdWt1cmFuIHJpc2lrbyB5YW5nIGtvaGVyZW4uDQoNCipTUEVDSUFMIENBU0UqIA0KUmF0YS1yYXRhIGFkYWxhaCB1a3VyYW4gcmlzaWtvIHlhbmcga29oZXJlbi4NCg0KVW50dWsgc2V0aWFwIHBhc2FuZ2FuIHZhcmlhYmVsIGFjYWsgWCBkYW4gWSB5YW5nIG1lbWlsaWtpIG1lYW4gYmVyaGluZ2dhIGRhbiBrb25zdGFudGEgJGM+MCQNCg0KLSB2YWxpZGFzaSBzdWJhZGl0aWZpdGFzOiAgJEVbWCtZXT1FW1hdK0VbWV0kDQoNCi0gdmFsaWRhc2kgbW9ub3Rvbml0YXM6IGppa2EgJFByW1jiiaRZXT0xJCBtYWthICRFW1hd4omkRVtZXSQNCg0KLSB2YWxpZGFzaSBob21vZ2VuaXRhcyBwb3NpdGlmOiAkRVtjWF09Y0VbWF0kDQoNCi0gdmFsaWRhc2kgaW52YXJpYW5zaSBwZW5lcmplbWFoYW46ICAkRVtYK2NdPUVbWF0rYyQNCg0KVW50dWsgbWVsaWhhdCBiYWh3YSBkZXZpYXNpIHN0YW5kYXIgYnVrYW5sYWggdWt1cmFuIHJpc2lrbyB5YW5nIGtvaGVyZW4sIG11bGFpbGFoIGRlbmdhbiBtZW1lcmlrc2EgYXBha2FoIGRldmlhc2kgc3RhbmRhciBtZW1lbnVoaQ0KDQoqVmVyaWZpY2F0aW9uIG9mIHRoZSBTcGVjaWFsIENhc2UqDQoNClVudHVrIG1lbGloYXQgYmFod2EgZGV2aWFzaSBzdGFuZGFyIGJ1a2FubGFoIHVrdXJhbiByaXNpa28geWFuZyBrb2hlcmVuLCBtdWxhaWxhaCBkZW5nYW4gbWVtZXJpa3NhIGFwYWthaCBkZXZpYXNpIHN0YW5kYXIgbWVtZW51aGkNCg0KLSB2YWxpZGFzaSBzdWJhZGl0aWZpdGFzOg0KDQokJA0KXGJlZ2lue2VxbmFycmF5Kn0gDQpcbWF0aHJte1NEfVtYK1ldJj0mXHNxcnR7XG1hdGhybXtWYXJ9KFgpK1xtYXRocm17VmFyfShZKSsyXG1hdGhybXtDb3Z9KFgsWSl9XFwNCiAgICAgICZcbGVxJiBcc3FydHtcbWF0aHJte1NEfShYKV4yK1xtYXRocm17U0R9KFkpXjIrMlxtYXRocm17U0R9KFgpXG1hdGhybXtTRH0oWSl9XFwNCiAgICAgICY9JiBcbWF0aHJte1NEfShYKStcbWF0aHJte1NEfShZKTsNClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KLSB2YWxpZGFzaSBob21vZ2VuaXRhcyBwb3NpdGlmOg0KDQokXG1hdGhybXtTRH1bY1hdPWN+XG1hdGhybXtTRH1bWF0kDQoNCk5hbXVuLCBkZXZpYXNpIHN0YW5kYXIgdGlkYWsgbWVtZW51aGkgc2lmYXQgaW52YXJpYW5zaSB0ZXJqZW1haGFuIGthcmVuYSB1bnR1ayBzZXRpYXAga29uc3RhbnRhIHBvc2l0aWYgYw0KDQokXG1hdGhybXtTRH0oWCtjKT1cbWF0aHJte1NEfShYKTxcbWF0aHJte1NEfShYKStjLiQNCg0KU2VsYWluIGl0dSwgZGV2aWFzaSBzdGFuZGFyIGp1Z2EgdGlkYWsgbWVtZW51aGkgc2lmYXQgbW9ub3Rvbml0YXMuIFVudHVrIG1lbGloYXQgaGFsIGluaSwgcGVydGltYmFuZ2thbiBkdWEgdmFyaWFiZWwgYWNhayBiZXJpa3V0Og0KDQokJA0KXGJlZ2lue2VxbmFycmF5fQ0KWD1cbGVmdFx7DQogICAgXGJlZ2lue2FycmF5fXtsbH0NCiAgICAgIDAsICYgXGhib3h7d2l0aCBwcm9iYWJpbGl0eSAkMC4yNSQ7fSBcXA0KICAgICAgNCwgJiBcaGJveHt3aXRoIHByb2JhYmlsaXR5ICQwLjc1JCx9DQogICAgXGVuZHthcnJheX0NCiAgXHJpZ2h0Lg0KXHRhZ3sxMC4yfQ0KXGVuZHtlcW5hcnJheX0NCiQkDQoNCmRhbiBZIGFkYWxhaCB2YXJpYWJlbCBhY2FrIHlhbmcgbWVyb3NvdCBzZWRlbWlraWFuIHNlaGluZ2dhDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXl9DQpcUHJbWSA9IDRdID0gMS4NClx0YWd7MTAuM30NClxlbmR7ZXFuYXJyYXl9DQokJA0KDQoNCkRhcGF0IE1lbWVyaWtzYSAkXFByW1hcbGVxIFldPTEkLCB0YXBpDQoNCiQkDQpcbWF0aHJte1NEfShYKT1cc3FydHs0XjJcY2RvdCAwLjI1XGNkb3QgMC43NX09XHNxcnR7M30+XG1hdGhybXtTRH0oWSk9MA0KJCQNCg0KKlNwZWNpYWwgQ2FzZS4gVGhlIFN0YW5kYXJkIERldmlhdGlvbiBQcmluY2lwbGUgKDEwLjEpIGlzIGEgQ29oZXJlbnQgUmlzayBNZWFzdXJlLioNCg0KVW50dWsgdHVqdWFuIGluaSwgdW50dWsgc2VidWFoICTOsT4wJCBkYXBhdCBtZXJpa3NhIGVtcGF0IGFrc2lvbWEgdW50dWsgJEhfe1NEfShYK1kpJCBzYXR1IHBlciBzYXR1Og0KDQotIHZhbGlkYXNpIHN1YmFkaXRpZml0YXMgOg0KDQokJA0KXGJlZ2lue2VxbmFycmF5Kn0NCiAgSF97XG1hdGhybXtTRH19KFgrWSkgJj0mIFxtYXRocm17RX1bWCtZXStcYWxwaGEgXG1hdGhybXtTRH0oWCtZKSBcXA0KICAmXGxlcSYgXG1hdGhybXtFfVtYXStcbWF0aHJte0V9W1ldK1xhbHBoYSBbXG1hdGhybXtTRH0oWCkgK1xtYXRocm17U0R9KFkpXVxcDQogICY9JiBIX3tcbWF0aHJte1NEfX0oWCkrIEhfe1xtYXRocm17U0R9fShZKTsNClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCi0gdmFsaWRhc2kgaG9tb2dlbml0YXMgcG9zaXRpZjoNCg0KJEhfe1xtYXRocm17U0R9fShjWCk9Y1xtYXRocm17RX1bWF0rY1xhbHBoYVxtYXRocm17U0R9KFgpPWNIX3tcbWF0aHJte1NEfX0oWCk7JA0KDQotIHZhbGlkYXNpIGludmFyaWFuc2kgdGVyamVtYWhhbjoNCg0KJEhfe1xtYXRocm17U0R9fShYK2MpPVxtYXRocm17RX1bWF0rYytcYWxwaGFcbWF0aHJte1NEfShYKT1IX3tcbWF0aHJte1NEfX0oWCkrYy4kDQoNCg0KSGFueWEgdW50dWsgbWVtdmVyaWZpa2FzaSBwcm9wZXJ0aSBtb25vdG9uaXRhcywgeWFuZyBtdW5na2luIHRlcnBlbnVoaSBhdGF1IHRpZGFrLCB0ZXJnYW50dW5nIHBhZGEgbmlsYWkgzrEuIFVudHVrIG1lbGloYXQgaGFsIGluaSwgbWVtcGVydGltYmFuZ2thbiBydW11cyBkaWF0YXMgZGkgbWFuYSAkUHJbWOKJpFldPTEkLiBEZW5nYW4gbWVtaXNhbGthbiAkXGFscGhhPTAuMVxjZG90IFxzcXJ0ezN9JCBtYWthICRIX3tcbWF0aHJte1NEfX0oWCk9MyswLjM9My4zPCBIX3tcbWF0aHJte1NEfX0oWSk9NCQgZGFuIGtvbmRpc2kgbW9ub3Rvbml0YXMgdGVycGVudWhpLiBEaSBzaXNpIGxhaW4sIG1pc2Fsa2FuICRcYWxwaGE9XHNxcnR7M30kLiBtYWthICRIX3tcbWF0aHJte1NEfX0oWCk9MyszPTY+IEhfe1xtYXRocm17U0R9fShZKT00JCBkYW4ga29uZGlzaSBtb25vdG9uaXRhcyB0aWRhayB0ZXJwZW51aGkuIExlYmloIHRlcGF0bnlhLCBkZW5nYW4gbWVuZXRhcGthbg0KDQokJA0KSF97XG1hdGhybXtTRH19KFgpID0gMytcYWxwaGFcc3FydHszfSBcbGVxND0gSF97XG1hdGhybXtTRH19KFkpDQokJA0KIA0KDQpEYXB0IG1lbmVtdWthbiBiYWh3YSBrb25kaXNpIG1vbm90b25pdGFzIGhhbnlhIHRlcnBlbnVoaSB1bnR1ayAkMFxsZXFcYWxwaGFcbGVxIDEvXHNxcnR7M30kIGRhbiBkZW5nYW4gZGVtaWtpYW4gcHJpbnNpcCBkZXZpYXNpIHN0YW5kYXIgJEhfe1NEfSQgYWRhbGFoIGtvaGVyZW4uIEhhc2lsIGluaSB0YW1wYWsgc2FuZ2F0IGludHVpdGlmIGJhZ2kga2FtaSBrYXJlbmEgcHJpbnNpcCBkZXZpYXNpIHN0YW5kYXIgJEhfe1NEfSQgYWRhbGFoIGtvbWJpbmFzaSBsaW5pZXIgZGFyaSBkdWEgdWt1cmFuIHJpc2lrbyB5YW5nIHNhdHUga29oZXJlbiBkYW4geWFuZyBsYWlubnlhIHRpZGFrIGtvaGVyZW4uIEppa2EgJFxhbHBoYVxsZXEgMS9cc3FydHszfSQgbWFrYSB1a3VyYW4geWFuZyBrb2hlcmVuIG1lbmRvbWluYXNpIHVrdXJhbiB5YW5nIHRpZGFrIGtvaGVyZW4sIHNlaGluZ2dhIHVrdXJhbiB5YW5nIGRpaGFzaWxrYW4gJEhfe1NEfSQgeWFuZyBkaWhhc2lsa2FuIGFkYWxhaCBrb2hlcmVuIGRhbiBzZWJhbGlrbnlhLiBQZXJsdSBkaWNhdGF0IGJhaHdhIGtlc2ltcHVsYW4gZGkgYXRhcyB0aWRhayBkYXBhdCBkaWdlbmVyYWxpc2FzaSB1bnR1ayBzZXRpYXAgcGFzYW5nYW4gdmFyaWFiZWwgYWNhayBYIGRhbiBZLg0KDQpMaXRlcmF0dXIgbWVuZ2VuYWkgdWt1cmFuIHJpc2lrbyB0ZWxhaCBiZXJrZW1iYW5nIHBlc2F0IGRhbGFtIGhhbCBwb3B1bGFyaXRhcyBkYW4ga2VwZW50aW5nYW5ueWEuIERhbGFtIGR1YSBzdWJiYWIgYmVyaWt1dG55YSwga2FtaSBtZW1wZXJrZW5hbGthbiBkdWEgaW5kZWtzIHlhbmcgYmFydS1iYXJ1IGluaSBtZW5kYXBhdGthbiBwZXJoYXRpYW4geWFuZyBiZWx1bSBwZXJuYWggdGVyamFkaSBzZWJlbHVtbnlhIGRpIGFudGFyYSBwYXJhIGFobGkgdGVvcmksIHByYWt0aXNpLCBkYW4gcmVndWxhdG9yLiBLZWR1YSBpbmRla3MgdGVyc2VidXQgYWRhbGFoIFZhbHVlLWF0LVJpc2sgKCRWYVIkKSBkYW4gVGFpbCBWYWx1ZS1hdC1SaXNrICgkVFZhUiQpLiBBbGFzYW4gZWtvbm9taSBkaSBiYWxpayBkdWEgdWt1cmFuIHJpc2lrbyBwb3B1bGVyIGluaSBtaXJpcCBkZW5nYW4gbWV0b2RlIGtsYXNpZmlrYXNpIGVrb3IgeWFuZyBkaXBlcmtlbmFsa2FuIHBhZGEgYmFnaWFuIHNlYmVsdW1ueWEsIHlhbmcgZGVuZ2FubnlhIGthbWkgYmVyaGFyYXAgZGFwYXQgbWVuYW5na2FwIHJpc2lrbyBrZXJ1Z2lhbiBla3N0cmVtIHlhbmcgZGl3YWtpbGkgb2xlaCBla29yIGRpc3RyaWJ1c2kuDQoNCiMjIyAxMC4zLjIgVmFsdWUtYXQtUmlzaw0KDQpEZW5nYW4gbWVtcGVydGltYmFuZ2thbiB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIGFzdXJhbnNpICRYJCAuIFVrdXJhbiBuaWxhaS1hdC1yaXNpa28gZGFyaSAkWCQgZGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gJHHiiIgoMCwxKSQgZGlydW11c2thbiBzZWJhZ2FpIA0KDQokJA0KXGJlZ2lue2VxbmFycmF5fQ0KVmFSX3FbWF09XGluZlx7eDpGX1goeClcZ2VxIHFcfS4NClx0YWd7MTAuNH0NClxlbmR7ZXFuYXJyYXl9DQokJA0KDQpEaSBzaW5pLCAkaW5mJCBhZGFsYWggb3BlcmF0b3IgaW5maW11bSBzZWhpbmdnYSB1a3VyYW4gJFZhUiQgbWVuZ2hhc2lsa2FuIG5pbGFpIHRlcmtlY2lsIGRhcmkgJFgkIHNlZGVtaWtpYW4gcnVwYSBzZWhpbmdnYSBjZGYgeWFuZyB0ZXJrYWl0IHBlcnRhbWEga2FsaSBtZWxlYmloaSBhdGF1IHNhbWEgZGVuZ2FuIHEgLg0KDQpTZWxhbmp1dG55YSBkYXBhdCBtZW5naW50ZXJwcmV0YXNpa2FuIFZhUiBkYWxhbSBrb250ZWtzIGFwbGlrYXNpIGFrdHVhcmlhbC4gVmFSIGFkYWxhaCB1a3VyYW4gZGFyaSAna2VydWdpYW4gbWFrc2ltYWwnIHlhbmcgbXVuZ2tpbiB0ZXJqYWRpIHBhZGEgcHJvZHVrIGFzdXJhbnNpL3BvcnRmb2xpbyBhdGF1IGludmVzdGFzaSBiZXJpc2lrbywgdGVyamFkaSBzZWJlc2FyIHEgw5cgMTAwJSB3YWt0dSwgc2VsYW1hIHBlcmlvZGUgd2FrdHUgdGVydGVudHUgKGJpYXNhbnlhIHNhdHUgdGFodW4pLiBNaXNhbG55YSwgamlrYSBYIGFkYWxhaCB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIHRhaHVuYW4gZGFyaSBwcm9kdWsgYXN1cmFuc2ksIFZhUjAuOTUgW1hdID0gMTAwIGp1dGEgYmVyYXJ0aSB0aWRhayBsZWJpaCBkYXJpIDUlIHBlbHVhbmcgYmFod2Ega2VydWdpYW4gYWthbiBtZWxlYmloaSAxMDAganV0YSBzZWxhbWEgc2F0dSB0YWh1biB0ZXJ0ZW50dS4gS2FyZW5hIGludGVycHJldGFzaSB5YW5nIGJlcm1ha25hIGluaSwgVmFSIHRlbGFoIG1lbmphZGkgc3RhbmRhciBpbmR1c3RyaSB1bnR1ayBtZW5ndWt1ciByaXNpa28ga2V1YW5nYW4gZGFuIGFzdXJhbnNpIHNlamFrIHRhaHVuIDE5OTAtYW4uIEtvbmdsb21lcmFzaSBrZXVhbmdhbiwgcmVndWxhdG9yLCBkYW4gYWthZGVtaXNpIHNlcmluZyBtZW5nZ3VuYWthbiBWYVIgdW50dWsgbWVuZ3VrdXIgbW9kYWwgcmlzaWtvLCBtZW1hc3Rpa2FuIGtlcGF0dWhhbiBkZW5nYW4gYXR1cmFuIHJlZ3VsYXNpLCBkYW4gbWVuZ3VuZ2thcGthbiBwb3Npc2kga2V1YW5nYW4uIA0KDQojIyMjIEV4YW1wbGUgMTAuMy4xLiAgVmFSIGZvciB0aGUgZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uDQoNCkRlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIHZhcmlhYmVsIGFjYWsga2VydWdpYW4gYXN1cmFuc2kgWCBkZW5nYW4gZGlzdHJpYnVzaSBla3Nwb25lbnNpYWwgeWFuZyBtZW1pbGlraSBwYXJhbWV0ZXIgJM64JCB1bnR1ayAkzrg+MCQsIG1ha2EgY2RmIGRhcmkgJFgkIGRpYmVyaWthbiBvbGVoDQoNCiQkDQpGX1goeCk9MS1lXnsteC9cdGhldGF9LCBcdGV4dHsgZm9yIH0geD4wLg0KJCQNCg0KTWVuY2FyaSBla3NwcmVzaSBiZW50dWsgdGVydHV0dXAgdW50dWsgVmFSDQoNCipKQVdBQioNCg0KS2FyZW5hIGRpc3RyaWJ1c2kgZWtzcG9uZW5zaWFsIGFkYWxhaCBkaXN0cmlidXNpIGtvbnRpbnUsIG5pbGFpIHRlcmtlY2lsIGRpIG1hbmEgY2RmIHBlcnRhbWEga2FsaSBtZWxlYmloaSBhdGF1IHNhbWEgZGVuZ2FuICRxIOKIiCAoMCwxKSQgaGFydXMgYmVyYWRhIHBhZGEgdGl0aWsgeHEgeWFuZyBtZW1lbnVoaS4NCg0KJHE9Rl9YKHhfcSk9MS1cZXhwXHsteF9xL1x0aGV0YSBcfS4kDQoNCk1ha2EgDQoNCiRWYVJfcVtYXT1GX1heey0xfShxKT0tXHRoZXRhW1xsb2coMS1xKV0uJA0KDQpIYXNpbCB5YW5nIGRpZGFwYXQgcGFkYSBydW11cyBkaWF0YXMgZGFwYXQgZGlnZW5lcmFsaXNhc2lrYW4gdW50dWsgdmFyaWFiZWwgYWNhayBrb250aW51IGFwYSBwdW4geWFuZyBtZW1pbGlraSBjZGYgeWFuZyBrZXRhdCBtZW5pbmdrYXQuIFNlY2FyYSBraHVzdXMsICRWYVIkIGRhcmkgdmFyaWFiZWwgYWNhayBrb250aW51IG1hbmEgcHVuIGFkYWxhaCBrZWJhbGlrYW4gZGFyaSBjZGYgeWFuZyBzZXN1YWkuIE1hcmkga2l0YSBwZXJ0aW1iYW5na2FuIGNvbnRvaCBsYWluIGRhcmkgdmFyaWFiZWwgYWNhayBrb250aW51IHlhbmcgbWVtaWxpa2kgZHVrdW5nYW4gZGFyaSBuZWdhdGlmIHRhayB0ZXJoaW5nZ2EgaGluZ2dhIHBvc2l0aWYgdGFrIHRlcmhpbmdnYS4NCg0KIyMjIyBFeGFtcGxlIDEwLjMuMi4gIFZhUiBmb3IgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24uIA0KRGVuZ2FuIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFiZWwgYWNhayBrZXJ1Z2lhbiBhc3VyYW5zaSAkWFxzaW0gTm9ybWFsKFxtdSxcc2lnbWFeMikkIGRlbmdhbiAkz4M+MCQuIERhbGFtIGthc3VzIGluaSwgc2VzZW9yYW5nIGRhcGF0IG1lbmdpbnRlcnByZXRhc2lrYW4gbmlsYWkgbmVnYXRpZiBkYXJpIFggc2ViYWdhaSBrZXVudHVuZ2FuIGF0YXUgcGVuZGFwYXRhbi4gQmVyaWthbiBla3NwcmVzaSBiZW50dWsgdGVydHV0dXAgdW50dWsgVmFSLg0KDQpLYXJlbmEgZGlzdHJpYnVzaSBub3JtYWwgYWRhbGFoIGRpc3RyaWJ1c2kga29udGludSwgbWFrYSBWYVIgZGFyaSBYIGhhcnVzIG1lbWVudWhpDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KIHEgJj0mIEZfWChWYVJfcVtYXSlcXA0KJj0mXFByXGxlZnRbKFgtXG11KS9cc2lnbWFcbGVxIChWYVJfcVtYXS1cbXUpL1xzaWdtYVxyaWdodF1cXA0KJj0mXFBoaSgoVmFSX3FbWF0tXG11KS9cc2lnbWEpLg0KXGVuZHtlcW5hcnJheSp9DQokJA0KTWFrYSBkaWRhcGF0IA0KDQokJA0KVmFSX3FbWF09XFBoaV57LTF9KHEpXCBcc2lnbWErXG11Lg0KJCQNCg0KRGFsYW0gYmFueWFrIGFwbGlrYXNpIGFzdXJhbnNpLCBraXRhIGhhcnVzIG1lbmFuZ2FuaSB0cmFuc2Zvcm1hc2kgZGFyaSB2YXJpYWJlbCBhY2FrLiBNaXNhbG55YSwgcGFkYSBDb250b2ggMTAuMy4yLCB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuICRYXHNpbSBOb3JtYWwoXG11LCBcc2lnbWFeMikkIGRhcGF0IGRpbGloYXQgc2ViYWdhaSB0cmFuc2Zvcm1hc2kgbGluaWVyIGRhcmkgdmFyaWFiZWwgYWNhayBub3JtYWwgc3RhbmRhciAkWlxzaW0gTm9ybWFsKDAsMSkkLCB5YWl0dSAkWD1aXHNpZ21hK1xtdSQuIERlbmdhbiBtZW5nYXR1ciAkzrwgPSAwJCBkYW4gJM+DID0gMSQsIERhcGFyIG1lbXBlcm11ZGFoIHVudHVrIG1lbWVyaWtzYSAkVmFSX3FbWl09XFBoaV57LTF9KHEpLiQuIFRyYW5zZm9ybWFzaSBsaW5pZXIgZGFyaSB2YXJpYWJlbCBhY2FrIG5vcm1hbCBzZXRhcmEgZGVuZ2FuIHRyYW5zZm9ybWFzaSBsaW5pZXIgZGFyaSBWYVIgZGFyaSB2YXJpYWJlbCBhY2FrIGFzbGkuIFRlbXVhbiBpbmkgZGFwYXQgZGlnZW5lcmFsaXNhc2lrYW4gbGViaWggbGFuanV0IGtlIHZhcmlhYmVsIGFjYWsgbWFuYSBwdW4gc2VsYW1hIHRyYW5zZm9ybWFzaW55YSBrZXRhdCBtZW5pbmdrYXQuDQoNCiMjIyMgRXhhbXBsZSAxMC4zLjMuICBWYVIgZm9yIHRyYW5zZm9ybWVkIHZhcmlhYmxlcy4NCg0KUGVydGltYmFuZ2thbiB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIGFzdXJhbnNpIFkgZGVuZ2FuIGRpc3RyaWJ1c2kgbG9nbm9ybWFsIGRlbmdhbiBwYXJhbWV0ZXIgJM684oiIUiQgZGFuICTPg14yPjAkIE1lbmNhcmkgZWtzcHJlc2kgJFZhUiQgZGFyaSBZIGRhbGFtIGhhbCBpbnZlcnMgY2RmIG5vcm1hbCBzdGFuZGFyLg0KDQpEZW5nYW4gbWVtcGVyaGF0aWthbiBiYWh3YSAkXGxvZyBZXHNpbSBOb3JtYWwoXG11LFxzaWdtYV4yKSQsIGF0YXUgc2V0YXJhIGRlbmdhbiBtZW1iaWFya2FuICRYXHNpbSBOb3JtYWwoXG11LFxzaWdtYV4yKSQsIG1ha2EgJFlcb3ZlcnNldHtkfXs9fWVee1h9JCB5YW5nIG1lcnVwYWthbiB0cmFuc2Zvcm1hc2kga2V0YXQgbWVuaW5na2F0LiBEaSBzaW5pLCBub3Rhc2kgJFxvdmVyc2V0e2R9ez19JCBiZXJhcnRpIGtlc2FtYWFuIGRhbGFtIGRpc3RyaWJ1c2kuICRWYVIkIGRhcmkkWSQgZGliZXJpa2FuIG9sZWggdHJhbnNmb3JtYXNpIGVrc3BvbmVuc2lhbCBkYXJpIFZhUiBkYXJpIFguIFNlY2FyYSB0ZXBhdCwgdW50dWsgJHHiiIgoMCwxKSQsDQoNCiRWYVJfe3F9W1ldPSBlXntWYVJfcVtYXX09XGV4cFx7XFBoaV57LTF9KHEpXCBcc2lnbWErXG11XH0uJA0KDQpTZWphdWggaW5pIHRlbGFoIG1lbGloYXQgYmViZXJhcGEgY29udG9oIHRlbnRhbmcgVmFSIHVudHVrIHZhcmlhYmVsIGFjYWsga29udGludSwgc2VsYW5qdXRueWEgZGVuZ2FuIG1lbXBlcnRpbWJhbmdrYW4gY29udG9oIG1lbmdlbmFpIFZhUiB1bnR1ayB2YXJpYWJlbCBhY2FrIGRpc2tyaXQuDQoNCiMjIyMgRXhhbXBsZSAxMC4zLjQuICBWYVIgZm9yIGEgZGlzY3JldGUgcmFuZG9tIHZhcmlhYmxlDQoNCkRlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIHZhcmlhYmVsIGFjYWsga2VydWdpYW4gYXN1cmFuc2kgZGVuZ2FuIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIHNlYmFnYWkgYmVyaWt1dDoNCg0KJCQNCntcc21hbGwNClxQcltYPXhdID0gXGxlZnRcew0KICAgICAgICAgICAgICAgICAgXGJlZ2lue2FycmF5fXtsbH0NCiAgICAgICAgICAgICAgICAgICAgMC43NSwgJiBcdGV4dHtmb3IgfXg9MSBcXA0KICAgICAgICAgICAgICAgICAgICAwLjIwLCAmIFx0ZXh0e2ZvciB9eD0zIFxcDQogICAgICAgICAgICAgICAgICAgIDAuMDUsICYgXHRleHR7Zm9yIH14PTQuDQogICAgICAgICAgICAgICAgICBcZW5ke2FycmF5fQ0KICAgICAgICAgICAgICAgIFxyaWdodC4NCn0NCiQkDQoNCk1lbmVtdWthbiAkVmFSJCBwYWRhICRxID0gMC42LCAwLjksIDAuOTUsIDAuOTUwMDEkDQoNCipKQVdBQioNCg0KTmlsYWkgY2RmIHlhbmcgc2VzdWFpIGRhcmkgWCBhZGFsYWgNCg0KJCQNCkZfWCh4KT1cbGVmdFx7DQogICAgICAgICBcYmVnaW57YXJyYXl9e2xsfQ0KICAgICAgICAgICAwLCAmIFxoYm94eyAkeDwxJDt9IFxcDQogICAgICAgICAgIDAuNzUsICYgXGhib3h7ICQxXGxlcSB4PDMkO30gXFwNCiAgICAgICAgICAgMC45NSwgJiBcaGJveHsgJDNcbGVxIHg8NCQ7fSBcXA0KICAgICAgICAgICAxLCAmIFxoYm94eyAkNFxsZXEgeCQufQ0KICAgICAgICAgXGVuZHthcnJheX0NCiAgICAgICBccmlnaHQuDQokJA0KQmVyZGFzYXJrYW4gZGVmaW5pc2kgVmFSIGRlbmdhbiBkZW1pa2lhbiwgbWFrYSBtZW1pbGlraQ0KDQotICRWYVJfezAuNn1bWF09MSQNCg0KLSAkVmFSX3swLjl9W1hdPTMkDQoNCi0gJFZhUl97MC45NX1bWF09MyQNCg0KLSAkVmFSX3swLjk1MDAwMX1bWF09NCQNCg0KDQpTZWxhbmp1dG55YSBhZGFsYWggcmluZ2thc2FuIGRhcmkgYmFnaWFuICB0ZW50YW5nIHVrdXJhbiBWYVIuIEJlYmVyYXBhIGtldW50dW5nYW4gZGFsYW0gbWVuZ2d1bmFrYW4gVmFSIGFudGFyYSBsYWluOg0KDQotIG1lbWlsaWtpIGludGVycHJldGFzaSB5YW5nIGJlcm1ha25hIHNlY2FyYSBwcmFrdGlzOw0KDQotIHJlbGF0aWYgbXVkYWggdW50dWsgZGloaXR1bmcgdW50dWsgYmFueWFrIGRpc3RyaWJ1c2kgZGVuZ2FuIGZ1bmdzaSBkaXN0cmlidXNpIHRlcnR1dHVwOw0KDQotIHRpZGFrIGFkYSBhc3Vtc2kgdGFtYmFoYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIHBlbmdoaXR1bmdhbiBWYVIuDQoNCk5hbXVuLCBhZGEgYmViZXJhcGEga2V0ZXJiYXRhc2FuIGRhbGFtIHBlbmdndW5hYW4gVmFSIGRhbGFtIHByYWt0aWsgbWFuYWplbWVuIHJpc2lrbywgZGkgYW50YXJhbnlhIGFkYWxhaDoNCg0KLSBwZW1pbGloYW4gdGluZ2thdCBrZXBlcmNheWFhbiAkceKIiCgwLDEpJCBzYW5nYXQgc3ViamVrdGlmLCBzZW1lbnRhcmEgJFZhUiQgZGFwYXQgc2FuZ2F0IHNlbnNpdGlmIHRlcmhhZGFwIHBpbGloYW4gcSANCg0KLSBza2VuYXJpby9pbmZvcm1hc2kga2VydWdpYW4geWFuZyBiZXJhZGEgZGkgYXRhcyAkKDEtcSlcdGltZXMgMTAwXCUkIHBlcmlzdGl3YSB0ZXJidXJ1aywgc2VwZW51aG55YSBkaWFiYWlrYW47DQoNCi0gVmFSIGJ1a2FubGFoIHVrdXJhbiByaXNpa28geWFuZyBrb2hlcmVuICh0ZXJ1dGFtYSwgdWt1cmFuIFZhUiB0aWRhayBtZW1lbnVoaSBha3Npb21hIHN1YmFkZGl0aXZpdGFzLCBhcnRpbnlhIG1hbmZhYXQgZGl2ZXJzaWZpa2FzaSBtdW5na2luIHRpZGFrIHNlcGVudWhueWEgdGVyY2VybWluKS4NCg0KIyMjIDEwLjMuMyBUYWlsIFZhbHVlLWF0LVJpc2sNCg0KRGVuZ2FuIG1lbmdpbmdhdCBiYWh3YSBWYVIgbWV3YWtpbGkga2VydWdpYW4gbWFrc2ltYWwgZGVuZ2FuIHBlbHVhbmcgJCgxLXEpXHRpbWVzIDEwMFwlJC4gU2VwZXJ0aSB5YW5nIGRpc2VidXRrYW4gcGFkYSBiYWdpYW4gc2ViZWx1bW55YSwgc2F0dSBrZWxlbWFoYW4gdXRhbWEgZGFyaSBwZW5ndWt1cmFuIFZhUiBhZGFsYWggdGlkYWsgbWVuY2VybWlua2FuIGtlcnVnaWFuIGVrc3RyZW0geWFuZyB0ZXJqYWRpIGRpIGx1YXIgc2tlbmFyaW8gdGVyYnVydWsgZGVuZ2FuIHBlbHVhbmcgJCgxLXEpXHRpbWVzIDEwMFwlJC4gVW50dWsgdHVqdWFuIGlsdXN0cmFzaSwgbWFyaSBraXRhIHBlcnRpbWJhbmdrYW4gY29udG9oIHlhbmcgc2VkaWtpdCB0aWRhayByZWFsaXN0aXMgbmFtdW4gaW5zcGlyYXRpZiBiZXJpa3V0Lg0KDQojIyMzIEV4YW1wbGUgMTAuMy41DQpEZW5nYW4gbWVtcGVydGltYmFuZ2thbiBkdWEgdmFyaWFiZWwga2VydWdpYW4sICRYXHNpbSBVbmlmb3JtIFswLDEwMF0kLCBkYW4gJFkkIGRlbmdhbiBkaXN0cmlidXNpIGVrc3BvbmVuc2lhbCB5YW5nIG1lbWlsaWtpIHBhcmFtZXRlciAkzrggPSAzMSw3MSQuIEthbWkgbWVuZ2d1bmFrYW4gJFZhUiQgcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuICQ5NSUkIHVudHVrIG1lbmd1a3VyIHRpbmdrYXQgcmlzaWtvIGRhcmkgJFgkIGRhbiAkWSQuIFBlcmhpdHVuZ2FuIHNlZGVyaGFuYSBtZW1iZXJpa2FuIA0KDQoNCiQkDQpWYVJfezAuOTV9W1hdPVZhUl97MC45NX1bWV09OTUsDQokJA0KDQpkYW4gZGVuZ2FuIGRlbWlraWFuIGtlZHVhIGRpc3RyaWJ1c2kga2VydWdpYW4gaW5pIG1lbWlsaWtpIHRpbmdrYXQgcmlzaWtvIHlhbmcgc2FtYSBtZW51cnV0ICRWYVJfezAuOTV9JC4gTmFtdW4sIFkgbGViaWggYmVyaXNpa28gZGFyaXBhZGEgWCBqaWthIGtlcnVnaWFuIGVrc3RyZW0gbWVuamFkaSBtYXNhbGFoIHV0YW1hIGthcmVuYSBYIGRpYmF0YXNpIGRpIGF0YXMgc2VkYW5na2FuIFkgdGlkYWsgZGliYXRhc2kuIEhhbnlhIG1lbXBlcmtpcmFrYW4gcmlzaWtvIGRlbmdhbiBtZW5nZ3VuYWthbiBWYVIgcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIHRlcnRlbnR1IGJpc2EgbWVueWVzYXRrYW4gZGFuIG11bmdraW4gdGlkYWsgbWVuY2VybWlua2FuIHNpZmF0IHNlYmVuYXJueWEgZGFyaSByaXNpa28uDQoNClNlYmFnYWkgc29sdXNpbnlhLCBUYWlsIFZhbHVlLWF0LVJpc2sgKCRUVmFSJCkgZGl1c3Vsa2FuIHVudHVrIG1lbmd1a3VyIGtlcnVnaWFuIGVrc3RyZW0geWFuZyBiZXJhZGEgZGkgYXRhcyBzdWF0dSB0aW5na2F0ICRWYVIkIHRlcnRlbnR1IHNlYmFnYWkgcmF0YS1yYXRhLiBLYW1pIG1lbmRva3VtZW50YXNpa2FuIGRlZmluaXNpIFRWYVIgZGFsYW0gYXBhIHlhbmcgbWVuZ2lrdXRpLiBVbnR1ayBrZXNlZGVyaGFuYWFuLCBrYW1pIGFrYW4gbWVtYmF0YXNpIGRpcmkgcGFkYSB2YXJpYWJlbCBhY2FrIHBvc2l0aWYga29udGludSBzYWphLCB5YW5nIGxlYmloIHNlcmluZyBkaWd1bmFrYW4gZGFsYW0ga29udGVrcyBtYW5hamVtZW4gcmlzaWtvIGFzdXJhbnNpLiBLYW1pIG1lcnVqdWsgcGVtYmFjYSB5YW5nIHRlcnRhcmlrIGtlIEhhcmR5ICgyMDA2KSB1bnR1ayBkaXNrdXNpIHlhbmcgbGViaWgga29tcHJlaGVuc2lmIHRlbnRhbmcgVFZhUiB1bnR1ayB2YXJpYWJlbCBhY2FrIGRpc2tyaXQgZGFuIGtvbnRpbnUuDQoNCk1lbmV0YXBrYW4gJHEg4oiIICgwLDEpJCwgbmlsYWkgVGFpbCBWYWx1ZS1hdC1SaXNrIGRhcmkgdmFyaWFiZWwgYWNhayAoa29udGludSkgWCBkaXJ1bXVza2FuIHNlYmFnYWkNCg0KJCQNClxiZWdpbntlcW5hcnJheSp9DQogIFRWYVJfcVtYXSAmPSYgXG1hdGhybXtFfVtYfFg+VmFSX3FbWF1dLA0KXGVuZHtlcW5hcnJheSp9DQokJA0KDQp5YW5nIGRpYXN1bXNpa2FuIGhhcmFwYW4gZWtzaXN0ZW5zaS4NCg0KUGVyaGl0dW5nYW4gJFRWYVIkIGJpYXNhbnlhIHRlcmRpcmkgZGFyaSBkdWEga29tcG9uZW4gdXRhbWEgLSAkVmFSJCBkYW4gcmF0YS1yYXRhIGtlcnVnaWFuIHlhbmcgYmVyYWRhIGRpIGF0YXMgJFZhUiQuICRUVmFSJCBkYXBhdCBkaWhpdHVuZyBtZWxhbHVpIHNlanVtbGFoIGZvcm11bGEuIFBlcnRpbWJhbmdrYW4gdmFyaWFiZWwgYWNhayBwb3NpdGlmIGtvbnRpbnUgWCwgdW50dWsga2VueWFtYW5hbiBub3Rpb25hbCwgbWFyaSBraXRhIHR1bGlzICRccGlfcT1WYVJfcVtYXSQuIFNlc3VhaSBkZWZpbmlzaSwgJFRWYVIkIGRhcGF0IGRpaGl0dW5nIG1lbGFsdWkNCg0KJCQNClxiZWdpbntlcW5hcnJheX0NClRWYVJfe3F9W1hdPVxmcmFjezF9eygxLXEpfVxpbnRfe1xwaV9xfV57XGluZnR5fXhmX1goeClkeC4NClx0YWd7MTAuNX0NClxlbmR7ZXFuYXJyYXl9DQokJA0KDQoNCiMjIyMgRXhhbXBsZSAxMC4zLjYuICBUVmFSIGZvciBhIG5vcm1hbCBkaXN0cmlidXRpb24NCg0KRGVuZ2FuIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFiZWwgYWNhayBrZXJ1Z2lhbiBhc3VyYW5zaSAkWFxzaW0gTm9ybWFsIChcbXUsXHNpZ21hXjIpJCBkZW5nYW4gzrwg4oiIIFIgZGFuICTPgyA+IDAkLiBNZW5jYXJpIGVrc3ByZXNpICRUVmFSJA0KDQpCaWFya2FuIFogYWRhbGFoIHZhcmlhYmVsIGFjYWsgbm9ybWFsIHN0YW5kYXIuIFVudHVrICRx4oiIKDAsMSkkICwgbWFrYSAkVFZhUiQgZGFyaSAkWCQgZGFwYXQgZGloaXR1bmcgbWVsYWx1aQ0KDQokJA0KXGJlZ2lue2VxbmFycmF5Kn0NCiAgVFZhUl9xW1hdICY9JiBcbWF0aHJte0V9W1h8WD5WYVJfcVtYXV1cXA0KJj0mXG1hdGhybXtFfVtcc2lnbWEgWitcbXV8XHNpZ21hIForXG11PlZhUl9xW1hdXVxcDQomPSYgXHNpZ21hXG1hdGhybXtFfVtafFo+KFZhUl9xW1hdLVxtdSkvXHNpZ21hXStcbXVcXA0KJlxvdmVyc2V0eygxKX17PX0mIFxzaWdtYVxtYXRocm17RX1bWnxaPlZhUl9xW1pdXStcbXUsDQpcZW5ke2VxbmFycmF5Kn0NCiQkDQoNCmRpbWFuYSAkXG92ZXJzZXR7KDEpfXs9fSQgYmVybGFrdSBrYXJlbmEgaGFzaWwgeWFuZyBkaWxhcG9ya2FuIHBhZGEgY29udG9oIGRpYXRhcy4gU2VsYW5qdXRueWEsIGtpdGEgYmVyYWxpaCB1bnR1ayBtZW1wZWxhamFyaSAkVFZhUl9xW1pdPVxtYXRocm17RX1bWnxaPlZhUl9xW1pdXSQgZGVuZ2FuICRcb21lZ2EocSk9KFxQaGleey0xfShxKSleMi8yJCwgbWFrYSBrYW1pIGRhcGF0IA0KDQokJA0KXGJlZ2lue2VxbmFycmF5Kn0NCiAgKDEtcSlcIFRWYVJfcVtaXSAmPSYgXGludF97XFBoaV57LTF9KHEpfV57XGluZnR5fSB6IFxmcmFjezF9e1xzcXJ0ezJccGl9fSBlXnstel4yLzJ9ZHpcXA0KJj0mIFxpbnRfe1xvbWVnYShxKX1ee1xpbmZ0eX0gIFxmcmFjezF9e1xzcXJ0ezJccGl9fSBlXnsteH1keFxcDQomPSYgXGZyYWN7MX17XHNxcnR7MlxwaX19IGVeey1cb21lZ2EocSl9XFwNCiY9JiBccGhpKFxQaGleey0xfShxKSkuDQpcZW5ke2VxbmFycmF5Kn0NCiQkDQpNYWthIA0KDQokVFZhUl9xW1hdPVxzaWdtYVxmcmFje1xwaGkoXFBoaV57LTF9KHEpKX17MS1xfStcbXUuJA0KDQpTZWJlbHVteWEgdGVsYWggZGlzZWVidXRrYW4gcGFkYSBzdWJzZWtzaSBzZWJlbHVtbnlhIGJhaHdhIFZhUiBkYXJpIGZ1bmdzaSBhY2FrIHlhbmcga2V0YXQgbWVuaW5na2F0IHNhbWEgZGVuZ2FuIGZ1bmdzaSBWYVIgZGFyaSB2YXJpYWJlbCBhY2FrIGFzbGkuU2VzZW9yYW5nIGRhcGF0IG1lbnVuanVra2FuIGJhaHdhIFRWYVIgZGFyaSB0cmFuc2Zvcm1hc2kgbGluaWVyIHZhcmlhYmVsIGFjYWsgeWFuZyBrZXRhdCBtZW5pbmdrYXQgc2FtYSBkZW5nYW4gZnVuZ3NpIFZhUiBkYXJpIHZhcmlhYmVsIGFjYWsgYXNsaS4gSGFsIGluaSBkaXNlYmFia2FuIG9sZWggc2lmYXQgbGluZWFyaXRhcyBkYXJpIGhhcmFwYW4uIE5hbXVuLCB0ZW11YW4gdGVyc2VidXQgdGlkYWsgZGFwYXQgZGlwZXJsdWFzIGtlIGZ1bmdzaSBub24tbGluZWFyLiBDb250b2ggdmFyaWFiZWwgYWNhayBsb2dub3JtYWwgYmVyaWt1dCBtZW5qYWRpIGNvbnRvaCB5YW5nIGJlcmxhd2FuYW4uDQoNCiMjIyMgRXhhbXBsZSAxMC4zLjcuICBUVmFSIG9mIGEgbG9nbm9ybWFsIGRpc3RyaWJ1dGlvbg0KDQpEZW5nYW4gbWVtZXJ0aW1iYW5na2FuIHNlYnVhaCB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIGFzdXJhbnNpICRYJCBkZW5nYW4gZGlzdHJpYnVzaSBsb2dub3JtYWwgZGVuZ2FuIHBhcmFtZXRlciAkzrziiIhSJCBkYW4gJM+DPjAkLiBkYXBhdCBtZW51bmp1a2thbg0KDQokVFZhUl9xW1hdID0gXGZyYWN7ZV57XG11K1xzaWdtYV4yLzJ9fXsoMS1xKX0gXFBoaShcUGhpXnstMX0ocSktXHNpZ21hKS4kDQoNCipKQVdBQioNCg0KRGVuZ2FuIG1lbmdpbmdhdCBiYWh3YSBwZGYgZGFyaSBkaXN0cmlidXNpIGxvZ25vcm1hbCBkaXJ1bXVza2FuIHNlYmFnYWkNCg0KJCQNCmZfWCh4KT1cZnJhY3sxfXtcc2lnbWFcc3FydHsyXHBpfSB4fVxleHBcey0oXGxvZyB4LVxtdSApXjIvMlxzaWdtYV4yIFx9LCBcdGV4dHsgZm9yIH0geD4wLg0KJCQNCg0KDQpNZW5ldGFwa2FuICRx4oiIKDAsMSkkLCBtYWthICRUVmFSJCBkYXJpICRYJCBkYXBhdCBkaWhpdHVuZyBtZWxhbHVpDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXl9DQogIFRWYVJfcVtYXSAmPSYgXGZyYWN7MX17KDEtcSl9IFxpbnRfe1xwaV9xfV57XGluZnR5fSB4IGZfWCh4KWR4IFxub251bWJlclxcDQomPSZcZnJhY3sxfXsoMS1xKX0gXGludF97XHBpX3F9XntcaW5mdHl9IFxmcmFjezF9e1xzaWdtYSBcc3FydHsyXHBpfX0gXGV4cFxsZWZ0XHsgLVxmcmFjeyhcbG9nIHgtXG11KV4yfXsyXHNpZ21hXjJ9DQpccmlnaHRcfWR4XG5vbnVtYmVyXFwNCiZcb3ZlcnNldHsoMSl9ez19JlxmcmFjezF9eygxLXEpfSBcaW50X3tcb21lZ2EocSl9XntcaW5mdHl9IFxmcmFjezF9e1xzcXJ0ezJccGl9fSBlXnsgLVxmcmFjezF9ezJ9d14yK1xzaWdtYSB3K1xtdX1kd1xub251bWJlclxcDQomPSZcZnJhY3tlXntcbXUrXHNpZ21hXjIvMn19eygxLXEpfSBcaW50X3tcb21lZ2EocSl9XntcaW5mdHl9IFxmcmFjezF9e1xzcXJ0ezJccGl9fSBlXnsgLVxmcmFjezF9ezJ9KHctXHNpZ21hKV4yfWR3XG5vbnVtYmVyXFwNCiY9JlxmcmFje2Vee1xtdStcc2lnbWFeMi8yfX17KDEtcSl9IFxQaGkoXG9tZWdhKHEpLVxzaWdtYSksDQpcdGFnezEwLjZ9DQpcZW5ke2VxbmFycmF5fQ0KJCQNCg0KRGkgc2luaSwgJFxvdmVyc2V0eygxKX17PX0kIHRlcnBlbnVoaSBkZW5nYW4gbWVuZXJhcGthbiBwZXJ1YmFoYW4gdmFyaWFiZWwgJHc9KGxvZ3jiiJLOvCkvz4MkLCBkYW4gJM+JKHEpPShsb2fPgHHiiJLOvCkvz4MkLiBEZW5nYW4gbWVtYW5nZ2lsIHJ1bXVzICRWYVIkIHVudHVrIHZhcmlhYmVsIGFjYWsgbG9nbm9ybWFsIGRhcGF0IG1lbnllZGVyaGFuYWthbiBtZW5qYWRpIA0KDQokJA0KXGJlZ2lue2VxbmFycmF5Kn0NCiAgVFZhUl9xW1hdICY9JiBcZnJhY3tlXntcbXUrXHNpZ21hXjIvMn19eygxLXEpfSBcUGhpKFxQaGleey0xfShxKS1cc2lnbWEpLg0KXGVuZHtlcW5hcnJheSp9DQokJA0KJFRWYVIkIGRhcmkgdmFyaWFiZWwgYWNhayBsb2dub3JtYWwgYnVrYW5sYWggZWtzcG9uZW5zaWFsIGRhcmkgJFRWYVIkIGRhcmkgdmFyaWFiZWwgYWNhayBub3JtYWwuDQoNClVudHVrIGRpc3RyaWJ1c2kgZGkgbWFuYSBmdW5nc2kgZGlzdHJpYnVzaSBrZWxhbmdzdW5nYW4gaGlkdXBueWEgbGViaWggbXVkYWggdW50dWsgZGlrZXJqYWthbiwgZGFwYXQgbWVuZXJhcGthbiB0ZWtuaWsgaW50ZWdyYXNpIGRlbmdhbiBiYWdpYW4gKGFzdW1zaWthbiByYXRhLXJhdGFueWEgdGVyYmF0YXMpIHVudHVrIG1lbnVsaXMgdWxhbmcgcGVyc2FtYWFuICgxMC41KSBzZWJhZ2FpDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KVFZhUl97cX1bWF0mPSZcbGVmdFsteCBTX1goeClcYmlnIHxfe1xwaV9xfV57XGluZnR5fStcaW50X3tccGlfcX1ee1xpbmZ0eX1TX1goeClkeFxyaWdodF1cZnJhY3sxfXsoMS1xKX1cXA0KJj0mIFxwaV9xICtcZnJhY3sxfXsoMS1xKX1caW50X3tccGlfcX1ee1xpbmZ0eX1TX1goeClkeC4NClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KIyMjIyBFeGFtcGxlIDEwLjMuOC4gIFRWYVIgb2YgYW4gZXhwb25lbnRpYWwgZGlzdHJpYnV0aW9uDQpQZXJ0aW1iYW5na2FuIHNlYnVhaCB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuIGFzdXJhbnNpIFggZGVuZ2FuIGRpc3RyaWJ1c2kgZWtzcG9uZW5zaWFsIHlhbmcgbWVtaWxpa2kgcGFyYW1ldGVyIM64IHVudHVrICTOuD4wJC4gTWVuY2FyaSBzdWF0dSBla3NwcmVzaSB1bnR1ayBUVmFSLg0KDQoqKkpBV0FCKioNCg0KRGFyaSBzdWJzZWtzaSBzZWJlbHVtbnlhLCB0ZWxhaCBtZWxpaGF0IGJhaHdhDQoNCiRccGlfcT0tXHRoZXRhW1xsb2coMS1xKV0uJA0KDQpEZW5nYW4gbWVtcGVydGltYmFuZ2thbiAkVFZhUiQ6DQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KICBUVmFSX3FbWF0gJj0mIFxwaV9xK1xpbnRfe1xwaV9xfV57XGluZnR5fSBlXnsteC9cdGhldGF9ZHgvKDEtcSlcXA0KJj0mIFxwaV9xK1x0aGV0YSBlXnstXHBpX3EvXHRoZXRhfS8oMS1xKVxcDQomPSYgXHBpX3ErXHRoZXRhLg0KXGVuZHtlcW5hcnJheSp9DQokJA0KDQpQZW5ndWt1cmFuIGJlcmlrdXQgZXJhdCBrYWl0YW5ueWEgZGVuZ2FuIFRWYVINCkp1Z2EgZGFwYXQgbWVtYmFudHUgdW50dWsgbWVueWF0YWthbiAkVFZhUiQgZGFsYW0gYmVudHVrIG5pbGFpIGhhcmFwYW4gdGVyYmF0YXMuIFNlY2FyYSBraHVzdXMsIGtpdGEgbWVtaWxpa2kNCg0KJCQNClxiZWdpbntlcW5hcnJheX0NCiAgVFZhUl9xW1hdICY9JiBcaW50X3tccGlfcX1ee1xpbmZ0eX0gKHgtXHBpX3ErXHBpX3EpZl9YKHgpZHgvKDEtcSkgXG5vbnVtYmVyXFwNCiY9JiBccGlfcStcZnJhY3sxfXsoMS1xKX1caW50X3tccGlfcX1ee1xpbmZ0eX0gKHgtXHBpX3EpZl9YKHgpZHhcbm9udW1iZXJcXA0KJj0mIFxwaV9xK2VfWChccGlfcSlcbm9udW1iZXJcXA0KJj0mIFxwaV9xICtcZnJhY3tcbGVmdCh7XG1hdGhybXtFfVtYXS1cbWF0aHJte0V9W1hcd2VkZ2VccGlfcV19XHJpZ2h0KX17KDEtcSl9LA0KXHRhZ3sxMC43fQ0KXGVuZHtlcW5hcnJheX0NCiQkDQoNCg0KRGltYW5hICRlX1goZCk9XG1hdGhybXtFfVtYLWR8WD5kXSQgdW50dWsgJGQ+MCQgbWVueWF0YWthbiBmdW5nc2kga2VydWdpYW4gYmVybGViaWggcmF0YS1yYXRhLiBVbnR1ayBiYW55YWsgZGlzdHJpYnVzaSBwYXJhbWV0cmlrIHlhbmcgdW11bSBkaWd1bmFrYW4sIHJ1bXVzLXJ1bXVzIHVudHVrIG1lbmdoaXR1bmcgJEVbWCRdIGRhbiAkRVtY4oinz4BfcV0kDQpkYXBhdCBkaXRlbXVrYW4gZGFsYW0gdGFiZWwgZGlzdHJpYnVzaS4NCg0KIyMjIyBFeGFtcGxlIDEwLjMuOS4gIFRWYVIgb2YgYSBQYXJldG8gZGlzdHJpYnV0aW9uIA0KDQpQZXJ0aW1iYW5na2FuIHNlYnVhaCB2YXJpYWJlbCBhY2FrIGtlcnVnaWFuICRYXHNpbSBQYXJldG8oXHRoZXRhLFxhbHBoYSkkIGRlbmdhbiAkzrg+MCQgZGFuICTOsT4wJC4gRnVuZ3NpIGRpc3RyaWJ1c2kga3VtdWxhdGlmIChjZGYpIGRhcmkgWCBkaWJlcmlrYW4gb2xlaA0KDQokRl9YKHgpPTEtXGxlZnQoXGZyYWN7XHRoZXRhfXtcdGhldGEreH0gXHJpZ2h0KV57XGFscGhhfSwgXHRleHR7IGZvciB9IHg+MCAuJA0KDQptZW5ldGFwa2FuICRx4oiIKDAsMSkkIGRhbiBhdHVyICRGX1goz4BfcSk9cSQNCiwgbWFrYSBraXRhIGRhcGF0IGRlbmdhbiBtdWRhaCBtZW1wZXJvbGVoDQoNCiQkDQpcYmVnaW57ZXFuYXJyYXl9DQpccGlfcT1cdGhldGFcbGVmdFsoMS1xKV57LTEvXGFscGhhfS0xIFxyaWdodF0uDQpcdGFnezEwLjh9DQpcZW5ke2VxbmFycmF5fQ0KJCQNCg0KU2ViZWx1bW55YSBkaWtldGFodWkgYmFod2ENCg0KJCQNClxtYXRocm17RX1bWF09XGZyYWN7XHRoZXRhfXtcYWxwaGEtMX0sDQokJA0KDQpkYW4NCg0KJCQNClxtYXRocm17RX1bWFx3ZWRnZSBccGlfcV09XGZyYWN7XHRoZXRhfXtcYWxwaGEtMX1cbGVmdFsNCjEtXGxlZnQoXGZyYWN7XHRoZXRhfXtcdGhldGErXHBpX3F9XHJpZ2h0KV57XGFscGhhLTF9DQpccmlnaHRdLg0KJCQNCg0KRGVuZ2FuIG1lbWFuZmFhdGthbiBwZXJzYW1hYW4gc2ViZWx1bW55YSBtZW5naGFzaWxrYW4NCg0KJCQNClxiZWdpbntlcW5hcnJheSp9DQogIFRWYVJfcVtYXSAmPSYgXHBpX3ErXGZyYWN7XHRoZXRhfXtcYWxwaGEtMX0gXGZyYWN7KFx0aGV0YS8oXHRoZXRhK1xwaV9xKSlee1xhbHBoYS0xfX0NCnsoXHRoZXRhLyhcdGhldGErXHBpX3EpKV57XGFscGhhfX1cXA0KJj0mXHBpX3EgK1xmcmFje1x0aGV0YX17XGFscGhhLTF9XGxlZnQoIFxmcmFje1xwaV9xK1x0aGV0YX17XHRoZXRhfSBccmlnaHQpXFwNCiY9JiBccGlfcStcZnJhY3tccGlfcStcdGhldGF9e1xhbHBoYS0xfSwNClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KTWVueWVzdWFpa2FuICRx4oiIKDAsMSkkLCBuaWxhaSByaXNpa28gYmVyc3lhcmF0IHVudHVrIHNlYnVhaCB2YXJpYWJlbCBhY2FrIFggZGlmb3JtdWxhc2lrYW4gc2ViYWdhaQ0KDQokJENWYVJfcVtYXSA9IFxmcmFjezF9ezEtcX1caW50X3txfV57MX0gVmFSX3tcYWxwaGF9W1hdXCBkXGFscGhhIC4kJA0KDQpOaWxhaSByaXNpa28gYmVyc3lhcmF0IGp1Z2EgZGlrZW5hbCBzZWJhZ2FpIHJhdGEtcmF0YSBuaWxhaSByaXNpa28gKCRBVmFSJCkgZGFuIGtlZ2FnYWxhbiB5YW5nIGRpaGFyYXBrYW4gKCRFUyQpLiBEYXBhdCBkaXR1bmp1a2thbiBiYWh3YSAkQ1ZhUl9xW1hdID0gVFZhUl9xW1hdJCBrZXRpa2EgJFxQcihYPVZhUl9xW1hdKT0wJCwgeWFuZyBiZXJsYWt1IHVudHVrIHZhcmlhYmVsIGFjYWsga29udGludS4gQXJ0aW55YSwgamlrYSBYIGtvbnRpbnUsIG1ha2EgbWVsYWx1aSBwZXJ1YmFoYW4gdmFyaWFiZWwsIGtpdGEgZGFwYXQgbWVudWxpcyB1bGFuZyBwZXJzYW1hYW4gc2ViYWdhaQ0KDQokJA0KXGJlZ2lue2VxbmFycmF5fQ0KICBUVmFSX3txfVtYXSAmPSYgXGZyYWN7MX17MS1xfVxpbnRfe3F9XnsxfSBWYVJfe1xhbHBoYX1bWF1cIGRcYWxwaGEuDQogIFx0YWd7MTAuOX0NClxlbmR7ZXFuYXJyYXl9DQokJA0KDQpGb3JtdWxhIGFsdGVybmF0aWYgKDEwLjkpIGluaSBtZW1iZXJpdGFodSBiYWh3YSAkVFZhUiQgYWRhbGFoIHJhdGEtcmF0YSBkYXJpICRWYVJfzrFbWF0kIGRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuIHlhbmcgYmVydmFyaWFzaSBkaSBhdGFzICTOseKIiFtxLDFdJC4gT2xlaCBrYXJlbmEgaXR1LCAkVFZhUiQgc2VjYXJhIGVmZWt0aWYgbWVueWVsZXNhaWthbiBzZWJhZ2lhbiBiZXNhciBrZXRlcmJhdGFzYW4gZGFyaSBWYVIgeWFuZyBkaXVyYWlrYW4gcGFkYSBzdWJiYWIgc2ViZWx1bW55YS4gUGVydGFtYSwga2FyZW5hIGVmZWsgcmF0YS1yYXRhLCBUVmFSIG11bmdraW4ga3VyYW5nIHNlbnNpdGlmIHRlcmhhZGFwIHBlcnViYWhhbiB0aW5na2F0IGtlcGVyY2F5YWFuIGRpYmFuZGluZ2thbiBkZW5nYW4gVmFSLiBLZWR1YSwgc2VtdWEga2VydWdpYW4gZWtzdHJlbSB5YW5nIGJlcmFkYSBkaSBhdGFzIHBlcmlzdGl3YSB0ZXJidXJ1ayAkKDEtcSlcdGltZXMgMTAwXCUkIHlhbmcgcGFsaW5nIG11bmdraW4gZGloaXR1bmcuDQoNCkRhbGFtIGhhbCBpbmksIHNlc2VvcmFuZyBkYXBhdCBtZWxpaGF0IGJhaHdhIHVudHVrIHNldGlhcCAkceKIiCgwLDEpJA0KDQokVFZhUl9xW1hdXGdlcSBWYVJfcVtYXS4kDQoNCktldGlnYSBkYW4gbXVuZ2tpbiB5YW5nIHBhbGluZyBwZW50aW5nLCBUVmFSIGFkYWxhaCB1a3VyYW4gcmlzaWtvIGtvaGVyZW4gZGFuIGRlbmdhbiBkZW1pa2lhbiBtYW1wdSBtZW5hbmdrYXAgZWZlayBkaXZlcnNpZmlrYXNpIGRhcmkgcG9ydG9mb2xpbyBhc3VyYW5zaSBkZW5nYW4gbGViaWggYWt1cmF0LiANCg0KDQojIyAxMC40IFJlaW5zdXJhbmNlDQoNCnJlYXN1cmFuc2kgYWRhbGFoIGFzdXJhbnNpIHlhbmcgZGliZWxpIG9sZWggcGVydXNhaGFhbiBhc3VyYW5zaS4gQmVyYmVkYSBkZW5nYW4gYXN1cmFuc2kgeWFuZyBkaWJlbGkgb2xlaCBpbmRpdmlkdSwgcmVhc3VyYW5zaSBiaWFzYW55YSBkaXJhbmNhbmcga2h1c3VzIHVudHVrIHBlbWJlbGkgZGFuIG1lbWlsaWtpIGZsZWtzaWJpbGl0YXMga29udHJhayB5YW5nIGxlYmloIGJlc2FyLiBBZGEgZHVhIGplbmlzIHJlYXN1cmFuc2ksIHlhaXR1IHJlYXN1cmFuc2kgcHJvcG9yc2lvbmFsIGRhbiBub24tcHJvcG9yc2lvbmFsLiBSZWFzdXJhbnNpIHByb3BvcnNpb25hbCBtZWxpYmF0a2FuIHBlcnNlbnRhc2UgdGVydGVudHUgZGFyaSBrZXJ1Z2lhbiBkYW4gcHJlbWkgeWFuZyBkaWFtYmlsIG9sZWggcGVydXNhaGFhbiByZWFzdXJhbnNpLiBTZWRhbmdrYW4gcmVhc3VyYW5zaSBub24tcHJvcG9yc2lvbmFsIG1lbmNha3VwIGtvbnRyYWsgc3RvcC1sb3NzIGRhbiBleGNlc3Mgb2YgbG9zcy4NCg0Kc2VtdWEgamVuaXMga29udHJhayByZWFzdXJhbnNpIG1lbWJhZ2kgcmlzaWtvIHRvdGFsIG1lbmphZGkgZHVhIGJhZ2lhbiwgeWFpdHUgcmlzaWtvIHlhbmcgZGl0YW5nZ3VuZyBvbGVoIHBlcnVzYWhhYW4gcmVhc3VyYW5zaSBkYW4gcmlzaWtvIHlhbmcgZGl0YWhhbiBvbGVoIHBlcnVzYWhhYW4gYXN1cmFuc2kuIERhbGFtIGhhbCBpbmksICRYJCBhZGFsYWggcmlzaWtvIHRvdGFsLCAkWV97cmVpbnN1cmVyfSQgYWRhbGFoIHJpc2lrbyB5YW5nIGRpdGFuZ2d1bmcgb2xlaCBwZXJ1c2FoYWFuIHJlYXN1cmFuc2ksIGRhbiAkWV97aW5zdXJlcn0kIGFkYWxhaCByaXNpa28geWFuZyBkaXRhaGFuIG9sZWggcGVydXNhaGFhbiBhc3VyYW5zaS4gRGlueWF0YWthbiBkYWxhbSAkWCA9IFlfe2luc3VyZXJ9K1lfe3JlaW5zdXJlcn0kDQoNCnN0cnVrdHVyIG1hdGVtYXRpa2EgZGFzYXIgZGFyaSBzZWJ1YWggcGVyamFuamlhbiByZWFzdXJhbnNpIHNhbWEgZGVuZ2FuIG1vZGlmaWthc2kgY2FrdXBhbiBkYWxhbSBhc3VyYW5zaSBwZXJzb25hbCB5YW5nIGRpcGVya2VuYWxrYW4gZGFsYW0gQmFiIDMuIERhbGFtIHJlYXN1cmFuc2kgcHJvcG9yc2lvbmFsLCB0cmFuc2Zvcm1hc2kgJFlfe2luc3VyZXJ9ID0gY1gkIGlkZW50aWsgZGVuZ2FuIHBlbnllc3VhaWFuIGNvLWluc3VyYW5jZSBkYWxhbSBhc3VyYW5zaSBwZXJzb25hbC4gRGFsYW0gcmVhc3VyYW5zaSBzdG9wLWxvc3MsIHRyYW5zZm9ybWFzaSAkWV97cmVpbnN1cmVyfSA9IG1heCgwLCBYLU0pJCBzYW1hIGRlbmdhbiBwZW1iYXlhcmFuIGFzdXJhbnNpIGRlbmdhbiBuaWxhaSByZXRlbnNpIChkZWR1Y3RpYmxlKSAkTSQsIHNlZGFuZ2thbiAkWV97aW5zdXJlcn0gPSBtaW4oWCwgTSkkIHNldGFyYSBkZW5nYW4gYXBhIHlhbmcgZGliYXlhcmthbiBvbGVoIHBlbWVnYW5nIHBvbGlzIGRlbmdhbiBuaWxhaSByZXRlbnNpICRNJC4NCg0KTmFtdW4sIGRhbGFtIGFwbGlrYXNpIHByYWt0aXMgbWF0ZW1hdGlrYSwgZm9rdXMgZGFsYW0gYXN1cmFuc2kgcGVyc29uYWwgdW11bW55YSBwYWRhIGhhcmFwYW4gc2ViYWdhaSBiYWhhbiB1dGFtYSB5YW5nIGRpZ3VuYWthbiBkYWxhbSBwZW5ldGFwYW4gaGFyZ2EuIFNlZGFuZ2thbiBkYWxhbSByZWFzdXJhbnNpLCBmb2t1c255YSBhZGFsYWggcGFkYSBzZWx1cnVoIGRpc3RyaWJ1c2kgcmlzaWtvLCBrYXJlbmEgcGVyaXN0aXdhIGVrc3RyaW0gbWVuamFkaSBwZXJoYXRpYW4gdXRhbWEgdW50dWsgc3RhYmlsaXRhcyBrZXVhbmdhbiBwZXJ1c2FoYWFuIGFzdXJhbnNpIGRhbiByZWFzdXJhbnNpLg0KDQojIyMgUHJvcG9ydGlvbmFsIFJlaW5zdXJhbmNlDQoNCkp1bWxhaCB5YW5nIGRpYmF5YXJrYW4gb2xlaCBwZXJ1c2FoYWFuIGFzdXJhbnNpIHV0YW1hIGRhbiBwZXJ1c2FoYWFuIHJlYXN1cmFuc2kgZGl0dWxpc2thbiBzZWJhZ2FpDQoNClxiZWdpbntlcXVhdGlvbn0NCllfe2luc3VyZXJ9ID0gYyBYIFwgXCBcdGV4dHthbmR9IFwgXCBcIFlfe3JlaW5zdXJlcn0gPSAoMS1jKSBYLA0KXGVuZHtlcXVhdGlvbn0NCiANCmRpbWFuYSAkY1xpbiAoMCwxKSQgbWVudW5qdWtrYW4gcHJvcG9yc2kgeWFuZyBkaXNpbXBhbiBvbGVoIHBlcnVzYWhhYW4gYXN1cmFuc2kuIFBlcmhhdGlrYW4gYmFod2EgJFlfe2luc3VyZXJ9K1lfe3JlaW5zdXJlcn09WCQNCg0KY29udG9oIDEwLjQuMSBha2FuIG1lbnVuanVra2FuIGJhZ2FpbWFuYSBwZXJqYW5qaWFuIHF1b3RhLXNoYXJlIG1lbXBlbmdhcnVoaSBkaXN0cmlidXNpIGtlcnVnaWFuIG1lbGFsdWkgZGVtb25zdHJhc2kgJHIkIHNpbmdrYXQgbWVuZ2d1bmFrYW4gc2ltdWxhc2kuIEdhbWJhciB5YW5nIGRpc2VydGFrYW4gbWVtYmVyaWthbiBiZW50dWsgcmVsYXRpZiBkYXJpIGRpc3RyaWJ1c2kga2VydWdpYW4gdG90YWwsIGJhZ2lhbiB5YW5nIGRpdGFoYW4gb2xlaCBwZXJ1c2FoYWFuIGFzdXJhbnNpLCBkYW4gYmFnaWFuIHlhbmcgZGl0YW5nZ3VuZyBvbGVoIHBlcnVzYWhhYW4gcmVhc3VyYW5zaS4NCg0KYGBge3J9DQpzZXQuc2VlZCgyMDE4KQ0KdGhldGEgPSAxMDAwDQphbHBoYSA9IDMNCm5TaW0gPSAxMDAwMA0KbGlicmFyeShhY3R1YXIpDQpYIDwtICBycGFyZXRvKG5TaW0sIHNoYXBlID0gYWxwaGEsIHNjYWxlID0gdGhldGEpDQoNCnBhcihtZnJvdz1jKDEsMykpDQpwbG90KGRlbnNpdHkoWCksIHhsaW09YygwLDMqdGhldGEpLCB5bGltPWMoMCwwLjAwOCksIG1haW49IlRvdGFsIExvc3MiLCB4bGFiPSJMb3NzZXMiKQ0KcGxvdChkZW5zaXR5KDAuNzUqWCksIHhsaW09YygwLDMqdGhldGEpLCB5bGltPWMoMCwwLjAwOCksIG1haW49Ikluc3VyZXIgKDc1JSkiLCB4bGFiPSJMb3NzZXMiKQ0KcGxvdChkZW5zaXR5KDAuMjUqWCksIHhsaW09YygwLDMqdGhldGEpLCB5bGltPWMoMCwwLjAwOCksIG1haW49IlJlaW5zdXJlciAoMjUlKSIsIHhsYWI9Ikxvc3NlcyIpDQpgYGANCg0KIyMjIyBRdW90YSBTaGFyZSBpcyBEZXNpcmFibGUgZm9yIFJlaW5zdXJlcnMNCg0KS29udHJhayBiYWdpYW4ga3VvdGEgKHF1b3RhIHNoYXJlKSBzYW5nYXQgZGlpbmdpbmthbiBiYWdpIHJlaW5zdXJlci4gVW50dWsgbWVsaWhhdCBpbmksIGFzdW1zaWthbiBiYWh3YSBwZXJ1c2FoYWFuIGFzdXJhbnNpIGRhbiByZWluc3VyZXIgaW5naW4gbWVtYXN1a2kga29udHJhayB1bnR1ayBiZXJiYWdpIHRvdGFsIGtlcnVnaWFuICRYJCANCg0KXGJlZ2lue2VxdWF0aW9ufQ0KWV97aW5zdXJlcn09ZyhYKSBcIFwgXCBcdGV4dHthbmR9IFwgXCBcIFwgWV97cmVpbnN1cmVyfT1YLWcoWCksDQpcZW5ke2VxdWF0aW9ufQ0KIA0KRGFsYW0ga29udHJhayBxdW90YSBzaGFyZSwgZGlhc3Vtc2lrYW4gYWRhIHNlYnVhaCBmdW5nc2kgZ2VuZXJpayAkZyhcY2RvdCkkIChkaWtlbmFsIHNlYmFnYWkgZnVuZ3NpIHJldGVuc2kpIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbWJhZ2kga2VydWdpYW4gYW50YXJhIHBlcnVzYWhhYW4gYXN1cmFuc2kgZGFuIHJlaW5zdXJlci4gRnVuZ3NpIHJldGVuc2kgdGVyc2VidXQgaGFydXMgbWVtYXN0aWthbiBiYWh3YSBwZXJ1c2FoYWFuIGFzdXJhbnNpIHRpZGFrIG1lbXBlcnRhaGFua2FuIGxlYmloIGJhbnlhayBrZXJ1Z2lhbiBkYXJpcGFkYSB5YW5nIHNlYmVuYXJueWEgdGVyamFkaSwgc2VoaW5nZ2EgaGFueWEgZnVuZ3NpIHlhbmcgbWVtZW51aGkgJGcoeCkg4omkIHgkIHlhbmcgZGlhbmdnYXAuIFNlbGFuanV0bnlhLCBkaWFzdW1zaWthbiBiYWh3YSBwZXJ1c2FoYWFuIGFzdXJhbnNpIGhhbnlhIHBlZHVsaSBkZW5nYW4gdmFyaWFiaWxpdGFzIGtsYWltIHlhbmcgZGlwZXJ0YWhhbmthbiBkYW4gdGlkYWsgbWVtcGVyZHVsaWthbiBwaWxpaGFuIGZ1bmdzaSAkZyQgc2VsYW1hICR2YXJpYW5zaSAoWV97aW5zdXJlcn0pJCB0ZXRhcCBzYW1hIGRhbiBzYW1hIGRlbmdhbiAkUSQsIHNlYmFnYWkgY29udG9oLiBLZW11ZGlhbiwgaGFzaWwgYmVyaWt1dCBtZW51bmp1a2thbiBiYWh3YSBrb250cmFrIHJlYXN1cmFuc2kgcXVvdGEgc2hhcmUgbWVtaW5pbWFsa2FuIGtldGlkYWtwYXN0aWFuIHJlaW5zdXJlciBzZWJhZ2FpbWFuYSBkaXVrdXIgZGVuZ2FuICRWYXIoWV97cmVpbnN1cmVyfSkkLg0KDQpQcm9wb3Npc2kuIE1pc2Fsa2FuICRWYXIoWV97aW5zdXJlcn0pID1RJCBtYWthICRWYXIoKDEtYylYKSBcbGUgVmFyIChnKFgpKSQgdW50dWsgc2VtdWEgJGcoXGNkb3QpJCBzZWhpbmdnYSAkRVtnKFgpXT1LJCBkaW1hbmEgJGM9US9WYXIoWCkkDQoNClByb3Bvc2lzaSBpbmkgbWVtaWxpa2kgZGF5YSB0YXJpayBzZWNhcmEgaW50dWl0aWYgLSBkZW5nYW4gYXN1cmFuc2kgcXVvdGEgc2hhcmUsIHJlaW5zdXJlciBtZW1iYWdpIHRhbmdndW5nIGphd2FiIHVudHVrIGtsYWltIHlhbmcgc2FuZ2F0IGJlc2FyIHBhZGEgZWtvciBkaXN0cmlidXNpLiBJbmkgYmVyYmVkYSBkZW5nYW4gcGVyamFuamlhbiBub24tcHJvcG9ydGlvbmFsIGRpIG1hbmEgcmVpbnN1cmVyIGJlcnRhbmdndW5nIGphd2FiIGF0YXMga2xhaW0geWFuZyBzYW5nYXQgYmVzYXIuDQoNCiMjIyMgT3B0aW1pemluZyBRdW90YSBTaGFyZSBBZ3JlZW1lbnRzIGZvciBJbnN1cmVycw0KDQpEYWxhbSBrYXN1cyBkaSBtYW5hIGFkYSAkbiQgcmlzaWtvIGRhbGFtIHN1YXR1IHBvcnRvZm9saW8sIGRpIG1hbmEgc2V0aWFwIHJpc2lrbyBkaW55YXRha2FuIG9sZWggJFhfaSQsIGtpdGEgZGFwYXQgbWVtcGVydGltYmFuZ2thbiB2YXJpYXNpIGRhcmkga2VzZXBha2F0YW4ga3VvdGEgYmVyc2FtYSBkaSBtYW5hIGp1bWxhaCB5YW5nIGRpdGFoYW4gb2xlaCBwZXJ1c2FoYWFuIGFzdXJhbnNpIGRhcGF0IGJlcnZhcmlhc2kgZGVuZ2FuIHNldGlhcCByaXNpa28sIGRpc2VidXQgY2kuIERhbGFtIGhhbCBpbmksIGJhZ2lhbiBwZXJ1c2FoYWFuIGFzdXJhbnNpIGRhcmkgcmlzaWtvIHBvcnRvZm9saW8gYWRhbGFoICRZX3tpbnN1cmVyfSA9IFxzdW1fe2k9MX1ebiBjX2kgWF9pJC4gS2FtaSBtZW5jYXJpIG5pbGFpLW5pbGFpICRjX2kkIHlhbmcgbWVtaW5pbWFsa2FuICRWYXIoWV97aW5zdXJlcn0pJCBkZW5nYW4gYmF0YXNhbiBiYWh3YSAkRShZX3tpbnN1cmVyfSkgPSBLJC4gSW5pIGJlcmFydGkgYmFod2EgcGVydXNhaGFhbiBhc3VyYW5zaSBpbmdpbiBtZW1wZXJ0YWhhbmthbiBwZW5kYXBhdGFuIHNldGlkYWtueWEgc2ViZXNhciBrb25zdGFudGEgJEskIGRhbiBzZWphbGFuIGRlbmdhbiBiYXRhc2FuIGluaSwgaW5naW4gbWVtaW5pbWFsa2FuIGtldGlkYWtwYXN0aWFuIHJpc2lrbyB5YW5nIGRpdGFoYW4gZGFsYW0gaGFsIHZhcmlhbnMuDQoNCkthc3VzIGluaSBkYXBhdCBkaXRlcmFwa2FuIHBhZGEgYmVyYmFnYWkgYXBsaWthc2kgZGkgbWFuYSByaXNpa28gaW5kaXZpZHUgZGFwYXQgZGlkZWZpbmlzaWthbiBzZWJhZ2FpIHJpc2lrbyBrZWJpamFrYW4gYXRhdSBrbGFpbSBpbmRpdmlkdSBhdGF1IHN1YnBvcnRvZm9saW8sIHRlcmdhbnR1bmcgcGFkYSBhcGxpa2FzaSBzcGVzaWZpay4gU2ViYWdhaSBjb250b2gsIHBlcnVzYWhhYW4gYXN1cmFuc2kgZGFwYXQgbWVtYmFnaSBwb3J0b2ZvbGlvbnlhIG1lbmphZGkgc3VicG9ydG9mb2xpbyB5YW5nIHRlcmRpcmkgZGFyaSBiZWJlcmFwYSBqZW5pcyBiaXNuaXMsIHNlcGVydGkgKDEpIG1vYmlsIHByaWJhZGksICgyKSBtb2JpbCBrb21lcnNpYWwsICgzKSBwZW1pbGlrIHJ1bWFoLCAoNCkga29tcGVuc2FzaSBwZWtlcmphLCBkYW4gbGFpbi1sYWluLg0KDQpEYXJpIGhhc2lsIHBlcmhpdHVuZ2FuIG1hdGVtYXRpa2EsIGRpa2V0YWh1aSBiYWh3YSBrb25zdGFudGEgdW50dWsgcmlzaWtvIGtlLSRpJCwgJGNfaSQsIGJlcmtvcmVsYXNpIGRlbmdhbiByYXNpbyAkXGZyYWN7RShYX2kpfXtWYXIoWF9pKX0kLiBTZWNhcmEgaW50dWl0aWYsIGppa2EgJEUoWF9pKSQgbGViaWggYmVzYXIsIG1ha2EgbmlsYWkgJGNfaSQgYWthbiBzZW1ha2luIGJlc2FyIHB1bGEsIGRhbiBzZWJhbGlrbnlhLCBqaWthICRWYXIoWF9pKSQgc2VtYWtpbiBiZXNhciwgbWFrYSBuaWxhaSAkY19pJCBha2FuIHNlbWFraW4ga2VjaWwuIEZha3RvciBwZW5nYWxpIHByb3BvcnNpb25hbCBkaXRlbnR1a2FuIG9sZWggcGVyc3lhcmF0YW4gcGVuZGFwYXRhbiAkRShZX3tpbnN1cmVyfSk9SyQuIENvbnRvaCB5YW5nIGRpYmVyaWthbiBtZW1iYW50dSBtZW1haGFtaSBodWJ1bmdhbiBpbmkuDQoNCkNvbnRvaG55YSwgdGVyZGFwYXQgdGlnYSByaXNpa28geWFuZyBtYXNpbmctbWFzaW5nIG1lbWlsaWtpIGRpc3RyaWJ1c2kgUGFyZXRvIGRlbmdhbiBwYXJhbWV0ZXIgeWFuZyBiZXJiZWRhLg0KDQotICRcYWxwaGFfMSA9MyQsIFx0aGV0YV8xPTEwMDAgdW50dWsgcmVzaWtvIHBlcnRhbWEgJFhfMSQsDQotICRcYWxwaGFfMiA9MyQsIFx0aGV0YV8yPTIwMDAgdW50dWsgcmVzaWtvIGtlZHVhICRYXzIkLCBkYW4NCi0gJFxhbHBoYV8zID00JCwgXHRoZXRhXzM9MzAwMCB1bnR1ayByZXNpa28ga2V0aWdhICRYXzMkLg0KDQpHcmFmaWsgZGlzZWRpYWthbiB1bnR1ayBtZW51bmp1a2thbiBuaWxhaSAkY18xJCwgJGNfMiQsIGRhbiAkY18zJCB1bnR1ayBwZW5kYXBhdGFuIHlhbmcgZGlidXR1aGthbiBzZWJlc2FyICRLJC4gUGVybHUgZGlwZXJoYXRpa2FuIGJhaHdhIG5pbGFpLW5pbGFpIGluaSBtZW5pbmdrYXQgc2VjYXJhIGxpbmVhciBkZW5nYW4gJEskLg0KDQpzb2x1c2k6DQpgYGB7cn0NCnRoZXRhMSA9IDEwMDA7IHRoZXRhMiA9IDIwMDA7IHRoZXRhMyA9IDMwMDA7DQphbHBoYTEgPSAzOyBhbHBoYTIgPSAzOyBhbHBoYTMgPSA0Ow0KbGlicmFyeShhY3R1YXIpDQpwcm9wbmZjdCA8LSBmdW5jdGlvbihhbHBoYSx0aGV0YSl7DQogIG11ICAgIDwtIG1wYXJldG8oc2hhcGU9YWxwaGEsIHNjYWxlPXRoZXRhLCBvcmRlcj0xKQ0KICB2YXIgICA8LSBtcGFyZXRvKHNoYXBlPWFscGhhLCBzY2FsZT10aGV0YSwgb3JkZXI9MikgLSBtdV4yDQogIG11L3Zhcg0KfQ0KdGVtcCA8LSBwcm9wbmZjdChhbHBoYTEsIHRoZXRhMSkqbXBhcmV0byhzaGFwZT1hbHBoYTEsIHNjYWxlPXRoZXRhMSwgb3JkZXI9MSkrDQogICAgICAgIHByb3BuZmN0KGFscGhhMiwgdGhldGEyKSptcGFyZXRvKHNoYXBlPWFscGhhMiwgc2NhbGU9dGhldGEyLCBvcmRlcj0xKSsNCiAgICAgICAgcHJvcG5mY3QoYWxwaGEzLCB0aGV0YTMpKm1wYXJldG8oc2hhcGU9YWxwaGEzLCBzY2FsZT10aGV0YTMsIG9yZGVyPTEpICANCktWZWMgPC0gc2VxKDEwMCwgMjUwMCwgbGVuZ3RoLm91dD0yMCkNCkxhbWJkYXZlYyA8LSAyKktWZWMvdGVtcA0KYzEgPC0gcHJvcG5mY3QoYWxwaGExLCB0aGV0YTEpDQpjMiA8LSBwcm9wbmZjdChhbHBoYTIsIHRoZXRhMikNCmMzIDwtIHByb3BuZmN0KGFscGhhMywgdGhldGEzKQ0KYzFWZWMgPC0gYzJWZWMgPC0gYzNWZWMgPC0gMCpLVmVjIA0KZm9yIChqIGluIDE6MjApIHsNCiAgYzFWZWNbal0gPC0gKExhbWJkYXZlY1tqXS8yKSAqIHByb3BuZmN0KGFscGhhMSwgdGhldGExKQ0KICBjMlZlY1tqXSA8LSAoTGFtYmRhdmVjW2pdLzIpICogcHJvcG5mY3QoYWxwaGEyLCB0aGV0YTIpDQogIGMzVmVjW2pdIDwtIChMYW1iZGF2ZWNbal0vMikgKiBwcm9wbmZjdChhbHBoYTMsIHRoZXRhMykNCiAgfQ0KcGxvdChLVmVjLCBjMVZlYywgdHlwZT0ibCIsIHlsYWI9InByb3BvcnRpb24iLCB4bGFiPSJyZXF1aXJlZCByZXZlbnVlIChLKSIsIHlsaW09YygwLDEpKQ0KbGluZXMoS1ZlYywgYzJWZWMpDQpsaW5lcyhLVmVjLCBjM1ZlYykNCnRleHQoMTIwMCwwLjgwLCBleHByZXNzaW9uKGNbMV0pKQ0KdGV4dCgyMDAwLDAuNzUsIGV4cHJlc3Npb24oY1syXSkpDQp0ZXh0KDE1MDAsMC4zMCwgZXhwcmVzc2lvbihjWzNdKSkNCmBgYA0KDQoNCiMjIyBOb24tUHJvcG9ydGlvbmFsIFJlaW5zdXJhbmNlDQoNCiMjIyMgVGhlIE9wdGltYWxpdHkgb2YgU3RvcC1Mb3NzIEluc3VyYW5jZQ0KDQpEYWxhbSBzZWJ1YWggcGVyamFuamlhbiBzdG9wLWxvc3MsIGFzdXJhbnNpIG1lbmV0YXBrYW4gbGV2ZWwgcmV0ZW5zaSAkTSAoPiAwKSQgZGFuIG1lbWJheWFyIHNlbHVydWgga2xhaW0gdW50dWsgbmlsYWkgJFgg4omkIE0kLiBTZWxhbmp1dG55YSwgdW50dWsga2xhaW0gZGVuZ2FuIG5pbGFpICRYID4gTSQsIGFzdXJhbnNpIHByaW1lciBtZW1iYXlhciAkTSQgZGFuIHJlYXN1cmFuc2kgbWVtYmF5YXIgc2lzYW55YSwgeWFpdHUgJFggLSBNJC4gT2xlaCBrYXJlbmEgaXR1LCBhc3VyYW5zaSBtZW5hbmdndW5nIHJpc2lrbyBzZWJlc2FyICRNJC4gU2luZ2thdG55YSwganVtbGFoIHlhbmcgZGliYXlhciBvbGVoIGFzdXJhbnNpIHByaW1lciBkYW4gcmVhc3VyYW5zaSBhZGFsYWggc2ViYWdhaSBiZXJpa3V0Og0KDQpcYmVnaW57ZXF1YXRpb259DQpZX3tpbnN1cmVyfSA9DQpcYmVnaW57Y2FzZXN9DQpYICYgXHRleHR7Zm9yIH0gWCBcbGUgTVxcDQpNICYgXHRleHR7Zm9yIH0gWCA+TSBcXA0KXGVuZHtjYXNlc30gXCBcIFwgXCA9IFxtaW4oWCxNKSA9IFggXHdlZGdlIE0NClxlbmR7ZXF1YXRpb259DQoNCmRhbg0KDQpcYmVnaW57ZXF1YXRpb259DQpZX3tyZWluc3VyZXJ9ID0NClxiZWdpbntjYXNlc30NCjAgJiBcdGV4dHtmb3IgfSBYIFxsZSBNXFwNClgtIE0gJiAgXHRleHR7Zm9yIH0gWCA+TSBcXA0KXGVuZHtjYXNlc30gXCBcIFwgXCAgPSBcbWF4KDAsWC1NKSANClxlbmR7ZXF1YXRpb259DQoNCnNhbWEgc2VwZXJ0aSBzZWJlbHVtbnlhICRZX3tpbnN1cmVyfStZX3tyZWluc3VyZXJ9PVgkDQoNCktvbnRyYWsgdGlwZSBzdG9wLWxvc3Mgc2FuZ2F0IGRpaW5naW5rYW4gb2xlaCBwZXJ1c2FoYWFuIGFzdXJhbnNpLiBEYWxhbSBoYWwgaW5pLCBwZXJ1c2FoYWFuIGFzdXJhbnNpIGRhbiByZWFzdXJhbnNpIGluZ2luIG1lbWFzdWtpIGtvbnRyYWsgc2VoaW5nZ2EgJFlfe2luc3VyZXJ9ID0gZyhYKSQgZGFuICRZX3tyZWluc3VyZXJ9ID0gWCAtIGcoWCkkIHVudHVrIGJlYmVyYXBhIGZ1bmdzaSByZXRlbnNpIGdlbmVyaWsgJGcoXGNkb3QpJC4gRGVuZ2FuIGFzdW1zaSBiYWh3YSBwZXJ1c2FoYWFuIGFzdXJhbnNpIGhhbnlhIHBlZHVsaSB0ZW50YW5nIHZhcmlhYmlsaXRhcyBrbGFpbSB5YW5nIGRpc2ltcGFuIGRhbiB0aWRhayBwZWR1bGkgZGVuZ2FuIHBpbGloYW4gJGckIHNlbGFtYSAkVmFyKFlfe2luc3VyZXJ9KSQgZGFwYXQgZGltaW5pbWFsa2FuLiBLZW1iYWxpLCBraXRhIG1lbmdlbmFrYW4gYmF0YXNhbiBiYWh3YSAkRShZX3tpbnN1cmVyfSkgPSBLJCA7IHBlcnVzYWhhYW4gYXN1cmFuc2kgcGVybHUgbWVtcGVydGFoYW5rYW4gcGVuZGFwYXRhbiAkSyQuIERhbGFtIHJhbmdrYSB1bnR1ayBtZW1lbnVoaSBiYXRhc2FuIGluaSwgcGVydXNhaGFhbiBhc3VyYW5zaSBpbmdpbiBtZW1pbmltYWxrYW4ga2V0aWRha3Bhc3RpYW4gcmlzaWtvIHlhbmcgZGlzaW1wYW4gKHNlYmFnYWltYW5hIGRpdWt1ciBvbGVoIHZhcmlhbnMpLiBLZW11ZGlhbiwgaGFzaWwgYmVyaWt1dCBtZW51bmp1a2thbiBiYWh3YSBwZXJqYW5qaWFuIHJlYXN1cmFuc2kgc3RvcC1sb3NzIG1lbWluaW1hbGthbiBrZXRpZGFrcGFzdGlhbiByZWluc3VyZXIgc2ViYWdhaW1hbmEgZGl1a3VyIG9sZWggJFZhcihZX3tyZWluc3VyZXJ9KSQuDQoNClByb3Bvc2lzaS4gQW5nZ2FwbGFoICRFKFlfe2luc3VyZXJ9KT1LJC4gTWFrYSwgJFZhcihYXHdlZGdlIE0pXGxlIFZhcihnKFgpKSQgdW50dWsgc2VtdWEgJGcoXGNkb3QpJCwgZGkgbWFuYSAkTSQgYWRhbGFoIG5pbGFpIHNlZGVtaWtpYW4gcnVwYSBzZWhpbmdnYSAkRShYXHdlZGdlIE0pPUskLg0KDQojIyMjIEV4Y2VzcyBvZiBMb3NzDQoNCkRhbGFtIHJlYXN1cmFuc2kgbm9uLXByb3BvcnNpb25hbCwgdGVyZGFwYXQgamVuaXMgcG9saXMgZXhjZXNzIG9mIGxvc3MuIERhbGFtIHBvbGlzIGluaSwgcmlzaWtvIHRvdGFsICRYJCBkaWFzdW1zaWthbiB0ZXJkaXJpIGRhcmkgJG4kIHJpc2lrbyB0ZXJwaXNhaCAkWF8xLC4uLixYX24kLCBkaW1hbmEgbWFzaW5nLW1hc2luZyByaXNpa28gdGVyc2VidXQgbWVtaWxpa2kgYmF0YXMgYXRhcywgbWlzYWxueWEgJE1faSQuIFBhZGEgcG9saXMgaW5pLCBwZXJ1c2FoYWFuIGFzdXJhbnNpIG1lbmFoYW4gcmlzaWtvDQoNClxiZWdpbntlcXVhdGlvbn0NCllfe2luc3VyZXJ9ID0gXHN1bV97aT0xfV5uIFlfe2ksaW5zdXJlcn0sIFwgXCBcIFwgXHRleHR7ZGVuZ2FufSBcIFwgXCBcIFwgWV97aSxpbnN1cmVyfSA9IFhfaSBcd2VkZ2UgTV9pLg0KXGVuZHtlcXVhdGlvbn0NCg0KU2VkYW5na2FuLCB1bnR1ayBiYWdpYW4gcmlzaWtvIHlhbmcgbWVsZWJpaGkgYmF0YXMgdGVyc2VidXQsIHJlaW5zdXJlciBiZXJ0YW5nZ3VuZyBqYXdhYiBtZW5hbmdndW5nbnlhLCB5YWl0dSAkWV97cmVpbnN1cmVyfT1Y4oiSWV97aW5zdXJlcn0kLiBCYXRhcyByZXRlbnNpIGRhcGF0IGJlcnZhcmlhc2kgdW50dWsgc2V0aWFwIHJpc2lrbyBhdGF1IGRhcGF0IHNhbWEgdW50dWsgc2VtdWEgcmlzaWtvLCB5YWl0dSAkTV9pPU0kIHVudHVrIHNlbXVhICRpJC4NCg0KIyMjIyBPcHRpbWFsIENob2ljZSBmb3IgRXhjZXNzIG9mIExvc3MgUmV0ZW50aW9uIExpbWl0cw0KDQphcGEgcGlsaWhhbiB0ZXJiYWlrIGRhcmkgYmF0YXMgcmV0ZW5zaSBleGNlc3Mgb2YgbG9zcyAkTV9pJD8gVW50dWsgbWVuamF3YWIgcGVydGFueWFhbiBpbmksIGtpdGEgcGVybHUgbWVuY2FyaSBuaWxhaS1uaWxhaSAkTV9pJCB5YW5nIG1lbWluaW1hbGthbiAkVmFyKFlfe2luc3VyZXJ9KSQgZGVuZ2FuIG1lbXBlcnRhaGFua2FuIGtvbnN0cmFpbiBiYWh3YSAkRShZX3tpbnN1cmVyfSk9SyQuIERhbGFtIHJhbmdrYSBtZW1wZXJ0YWhhbmthbiBrb25zdHJhaW4gcGVuZGFwYXRhbiBpbmksIHBlcnVzYWhhYW4gYXN1cmFuc2kgaW5naW4gbWVtaW5pbWFsa2FuIGtldGlkYWtwYXN0aWFuIHJpc2lrbyB5YW5nIGRpcGVydGFoYW5rYW4gKHlhbmcgZGl1a3VyIGRlbmdhbiB2YXJpYW5zaW55YSkuDQoNCkRhcmkgcGVyaGl0dW5nYW4gbWF0ZW1hdGlrYSwgdGVydW5na2FwIGJhaHdhIHNlbGlzaWggYW50YXJhIGJhdGFzIHJldGVuc2kgZGFuIGtsYWltIHJhdGEtcmF0YSB5YW5nIGRpaGFyYXBrYW4gb2xlaCBpbnN1cmVyLCAkTV9p4oiSRShYX2lcd2VkZ2UgTV9pKSQsIGFkYWxhaCBzYW1hIHVudHVrIHNlbXVhIHJpc2lrby4gSGFsIGluaSBzZWNhcmEgaW50dWl0aWYgbWVuYXJpay4NCg0KQ29udG9oIDEwLjQuMy4gRXhjZXNzIG9mIGxvc3MgdW50dWsgdGlnYSByaXNpa28gUGFyZXRvLiBQZXJ0aW1iYW5na2FuIHRpZ2EgcmlzaWtvIHlhbmcgbWVtaWxpa2kgZGlzdHJpYnVzaSBQYXJldG8sIG1hc2luZy1tYXNpbmcgbWVtaWxpa2kgc2V0IHBhcmFtZXRlciB5YW5nIGJlcmJlZGEgKHNlaGluZ2dhIG1lcmVrYSBpbmRlcGVuZGVuIHRldGFwaSB0aWRhayBpZGVudGlrKS4gR3VuYWthbiBzZXQgcGFyYW1ldGVyIHlhbmcgc2FtYSBzZXBlcnRpIHBhZGEgQ29udG9oIDEwLjQuMi4gVW50dWsgY29udG9oIGluaToNCg0KQS4gVHVuanVra2FuIHNlY2FyYSBudW1lcmlrIGJhaHdhIGJhdGFzIHJldGVuc2kgb3B0aW1hbCAkTV8xJCwgJE1fMiQsIGRhbiAkTV8zJCAoZGlrdXJhbmdpIGtsYWltIHJhdGEtcmF0YSB5YW5nIGRpaGFyYXBrYW4gb2xlaCBpbnN1cmVyLCAkTV9p4oiSRShYX2lcd2VkZ2UgTV9pKSkkIGFkYWxhaCBzYW1hIHVudHVrIHNlbXVhIHJpc2lrbywgc2VwZXJ0aSB5YW5nIGtpdGEgdHVydW5rYW4gc2VjYXJhIHRlb3JpdGlzLg0KDQpCLiBTZWxhbmp1dG55YSwgYmFuZGluZ2thbiBzZWNhcmEgZ3JhZmlzIGRpc3RyaWJ1c2kgdG90YWwgcmlzaWtvIGRlbmdhbiByaXNpa28geWFuZyBkaXNpbXBhbiBvbGVoIGluc3VyZXIgZGFuIG9sZWggcmVpbnN1cmVyLg0KDQpzb2x1c2k6DQoNCkEuIG1lbmdvcHRpbWFzaSBMYWdyYW5naWFuIG1lbmdndW5ha2FuIHBha2V0IFIgYWxhYmFtYSB1bnR1ayBBbGdvcml0bWEgTWluaW1hc2kgQmFycmllciBBZGFwdGlmIExhZ3JhbmdpYW4uDQoNCmBgYHtyfQ0KdGhldGExID0gMTAwMDt0aGV0YTIgPSAyMDAwO3RoZXRhMyA9IDMwMDA7DQphbHBoYTEgPSAzOyAgIGFscGhhMiA9IDM7ICAgYWxwaGEzID0gNDsNClBtaW4gPC0gMjAwMA0KbGlicmFyeShhY3R1YXIpDQpWYXJGY3QgPC0gZnVuY3Rpb24oTSl7DQogIE0xPU1bMV07TTI9TVsyXTtNMz1NWzNdDQogIG11MSAgICA8LSBsZXZwYXJldG8obGltaXQ9TTEsc2hhcGU9YWxwaGExLCBzY2FsZT10aGV0YTEsIG9yZGVyPTEpDQogIHZhcjEgICA8LSBsZXZwYXJldG8obGltaXQ9TTEsc2hhcGU9YWxwaGExLCBzY2FsZT10aGV0YTEsIG9yZGVyPTIpLW11MV4yDQogIG11MiAgICA8LSBsZXZwYXJldG8obGltaXQ9TTIsc2hhcGU9YWxwaGEyLCBzY2FsZT10aGV0YTIsIG9yZGVyPTEpDQogIHZhcjIgICA8LSBsZXZwYXJldG8obGltaXQ9TTIsc2hhcGU9YWxwaGEyLCBzY2FsZT10aGV0YTIsIG9yZGVyPTIpLW11Ml4yDQogIG11MyAgICA8LSBsZXZwYXJldG8obGltaXQ9TTMsc2hhcGU9YWxwaGEzLCBzY2FsZT10aGV0YTMsIG9yZGVyPTEpDQogIHZhcjMgICA8LSBsZXZwYXJldG8obGltaXQ9TTMsc2hhcGU9YWxwaGEzLCBzY2FsZT10aGV0YTMsIG9yZGVyPTIpLW11M14yDQogIHZhckZjdCA8LSB2YXIxICt2YXIyK3ZhcjMNCiAgbWVhbkZjdCA8LSBtdTErbXUyK211Mw0KICBjKG1lYW5GY3QsdmFyRmN0KQ0KICB9DQpmIDwtIGZ1bmN0aW9uKE0pe1ZhckZjdChNKVsyXX0NCmggPC0gZnVuY3Rpb24oTSl7VmFyRmN0KE0pWzFdIC0gUG1pbn0NCmxpYnJhcnkoYWxhYmFtYSkNCnBhcjA9cmVwKDEwMDAsMykNCm9wIDwtIGF1Z2xhZyhwYXI9cGFyMCxmbj1mLGhpbj1oLGNvbnRyb2wub3V0ZXI9bGlzdCh0cmFjZT1GQUxTRSkpDQpgYGANCg0KQmF0YXMgcmV0ZW5zaSBvcHRpbWFsICRNXzEkLCAkTV8yJCwgZGFuICRNXzMkIHlhbmcgbWVuZ2hhc2lsa2FuIGJhdGFzIHJldGVuc2kgZGlrdXJhbmdpIGtsYWltIHlhbmcgZGloYXJhcGthbiBkYXJpIHBlcnVzYWhhYW4gYXN1cmFuc2ksICRNX2ktRShYX2lcd2VkZ2UgTV9pKSQsIHNhbWEgdW50dWsgc2VtdWEgcmlzaWtvLCBzZXBlcnRpIHlhbmcga2l0YSBkYXBhdGthbiBzZWNhcmEgdGVvcml0aXMuDQoNCmBgYHtyfQ0KTTFzdGFyID0gb3AkcGFyWzFdO00yc3RhciA9IG9wJHBhclsyXTtNM3N0YXIgPSBvcCRwYXJbM10NCk0xc3RhciAtbGV2cGFyZXRvKE0xc3RhcixzaGFwZT1hbHBoYTEsIHNjYWxlPXRoZXRhMSxvcmRlcj0xKQ0KYGBgDQpgYGB7cn0NCk0yc3RhciAtbGV2cGFyZXRvKE0yc3RhcixzaGFwZT1hbHBoYTIsIHNjYWxlPXRoZXRhMixvcmRlcj0xKQ0KYGBgDQpgYGB7cn0NCk0zc3RhciAtbGV2cGFyZXRvKE0zc3RhcixzaGFwZT1hbHBoYTMsIHNjYWxlPXRoZXRhMyxvcmRlcj0xKQ0KYGBgDQoNCkIuIG1lbWJhbmRpbmdrYW4gc2VjYXJhIGdyYWZpcyBkaXN0cmlidXNpIHJpc2lrbyB0b3RhbCBkZW5nYW4geWFuZyBkaXBlcnRhaGFua2FuIG9sZWggcGVydXNhaGFhbiBhc3VyYW5zaSBkYW4gcGVydXNhaGFhbiByZWFzdXJhbnNpLg0KDQpgYGB7cn0NCnNldC5zZWVkKDIwMTgpDQpuU2ltID0gMTAwMDANCmxpYnJhcnkoYWN0dWFyKQ0KWTEgPC0gcnBhcmV0byhuU2ltLCBzaGFwZSA9IGFscGhhMSwgc2NhbGUgPSB0aGV0YTEpDQpZMiA8LSBycGFyZXRvKG5TaW0sIHNoYXBlID0gYWxwaGEyLCBzY2FsZSA9IHRoZXRhMikNClkzIDwtIHJwYXJldG8oblNpbSwgc2hhcGUgPSBhbHBoYTMsIHNjYWxlID0gdGhldGEzKQ0KWVRvdGFsIDwtIFkxICsgWTIgKyBZMw0KWWluc3VyIDwtICBwbWluKFkxLE0xc3RhcikrcG1pbihZMixNMnN0YXIpK3BtaW4oWTMsTTNzdGFyKQ0KWXJlaW5zdXIgPC0gWVRvdGFsIC0gWWluc3VyDQoNCnBhcihtZnJvdz1jKDEsMykpDQpwbG90KGRlbnNpdHkoWVRvdGFsKSwgICB4bGltPWMoMCwxMDAwMCksIG1haW49IlRvdGFsIExvc3MiLCB4bGFiPSJMb3NzZXMiKQ0KcGxvdChkZW5zaXR5KFlpbnN1ciksICAgeGxpbT1jKDAsMTAwMDApLCBtYWluPSJJbnN1cmVyIiwgICAgeGxhYj0iTG9zc2VzIikNCnBsb3QoZGVuc2l0eShZcmVpbnN1ciksIHhsaW09YygwLDEwMDAwKSwgbWFpbj0iUmVpbnN1cmVyIiwgIHhsYWI9Ikxvc3NlcyIpDQpgYGANCg0KIyMjIEFkZGl0aW9uYWwgUmVpbnN1cmFuY2UgVHJlYXRpZXMNCg0KIyMjIyBTdXJwbHVzIFNoYXJlIFByb3BvcnRpb25hbCBUcmVhdHkNCg0KSmVuaXMgcGVyamFuamlhbiByZWFzdXJhbnNpIHByb3Bvc2lvbmFsIGxhaW5ueWEgYWRhbGFoIHN1cnBsdXMgc2hhcmUsIHlhbmcgdW11bSBkaWd1bmFrYW4gZGFsYW0gYXN1cmFuc2kgcHJvcGVydGkga29tZXJzaWFsLiANCg0KLSBQZXJqYW5qaWFuIHN1cnBsdXMgc2hhcmUgbWVtdW5na2lua2FuIHJlaW5zdXJlZCB1bnR1ayBtZW1iYXRhc2kgZWtzcG9zdXJueWEgcGFkYSByaXNpa28gZGVuZ2FuIGp1bWxhaCB0ZXJ0ZW50dSAocmV0YWluZWQgbGluZSkuIA0KLSBSZWluc3VyZXIgbWVuZ2FtYmlsIGJhZ2lhbiBkYXJpIHJpc2lrbyBzZWNhcmEgcHJvcG9yc2lvbmFsIHRlcmhhZGFwIGp1bWxhaCBuaWxhaSB5YW5nIGRpYXN1cmFuc2lrYW4gbWVsZWJpaGkgcmV0YWluZWQgbGluZSwgaGluZ2dhIGJhdGFzIHRlcnRlbnR1IChkaW55YXRha2FuIHNlYmFnYWkga2VsaXBhdGFuIGRhcmkgcmV0YWluZWQgbGluZSwgYXRhdSBqdW1sYWggbGluZSkuDQoNClNlYmFnYWkgY29udG9oLCBqaWthIHJldGFpbmVkIGxpbmUgYWRhbGFoIDEwMC4wMDAgZGFuIGJhdGFzIHlhbmcgZGliZXJpa2FuIGFkYWxhaCA0IGxpbmUgKDQwMC4wMDApLCBtYWthIGppa2EgJFgkIGFkYWxhaCBrZXJ1Z2lhbiwgYmFnaWFuIGRhcmkgcmVpbnN1cmVyIGFkYWxhaCAkbWluKDQwMDAwMCwoWOKIkjEwMDAwMClfKykkLg0KDQojIyMjIExheWVycyBvZiBDb3ZlcmFnZQ0KDQpEYWxhbSByZWFzdXJhbnNpIG5vbi1wcm9wb3JzaW9uYWwgc3RvcC1sb3NzLCBraXRhIGRhcGF0IG1lbXBlcmx1YXMga29udHJhayBkZW5nYW4gbWVuYW1iYWhrYW4gcGloYWsgbGFpbiBrZSBkYWxhbSBrb250cmFrLiBTZWJhZ2FpIGNvbnRvaCwgc2VsYWluIGhhbnlhIGFkYSBwZXJ1c2FoYWFuIGFzdXJhbnNpIGRhbiByZWFzdXJhbnNpIGF0YXUgcGVydXNhaGFhbiBhc3VyYW5zaSBkYW4gcGVtZWdhbmcgcG9saXMsIGtpdGEgYmlzYSBtZW1wZXJ0aW1iYW5na2FuIHNpdHVhc2kgZGkgbWFuYSBhZGEgdGlnYSBwaWhhaywgeWFpdHUgcGVtZWdhbmcgcG9saXMsIHBlcnVzYWhhYW4gYXN1cmFuc2ksIGRhbiByZWFzdXJhbnNpLCB5YW5nIHNlcGFrYXQgdW50dWsgYmVyYmFnaSByaXNpa28uIFNlY2FyYSB1bXVtLCBraXRhIGRhcGF0IG1lbXBlcnRpbWJhbmdrYW4ga2ViZXJhZGFhbiAkayQgcGloYWsuIEppa2EgJGsgPSAzJCwgbWFrYSBiaXNhIGphZGkgcGVydXNhaGFhbiBhc3VyYW5zaSBkYW4gZHVhIHJlYXN1cmFuc2kgeWFuZyBiZXJiZWRhLg0KDQpDb250b2ggMTAuNC40LiBMYXBpc2FuIHBlcmxpbmR1bmdhbiB1bnR1ayB0aWdhIHBpaGFrLg0KDQpNaXNhbGthbiBhZGEgJGsgPSAzJCBwaWhhay4gUGloYWsgcGVydGFtYSBiZXJ0YW5nZ3VuZyBqYXdhYiBhdGFzIGtsYWltIHBlcnRhbWEgc2VuaWxhaSAxMDAsIHBpaGFrIGtlZHVhIGJlcnRhbmdndW5nIGphd2FiIGF0YXMga2xhaW0gZGFyaSAxMDAgaGluZ2dhIDMwMDAsIGRhbiBwaWhhayBrZXRpZ2EgYmVydGFuZ2d1bmcgamF3YWIgYXRhcyBrbGFpbSBkaSBhdGFzIDMwMDAuIEppa2EgYWRhIGVtcGF0IGtsYWltIG1hc2luZy1tYXNpbmcgc2VuaWxhaSA1MCwgNjAwLCAxODAwLCBkYW4gNDAwMCwgbWFrYSBrbGFpbSB0ZXJzZWJ1dCBha2FuIGRpYWxva2FzaWthbiBrZSBwaWhhay1waWhhayBzZWJhZ2FpIGJlcmlrdXQ6DQoNCmBgYHtyfQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KDQp0YWJlbCA8LSBkYXRhLmZyYW1lKA0KICBCdXllciA9IGMoIjAtMTAwIiwgIjEwMC0zMDAwIiwgIjMwMDAt4oieIiwgInRvdGFsIiksDQogIGNsYWltXzEgPSBjKDUwLCAwLCAwLCA1MCksDQogIGNsYWltXzIgPSBjKDEwMCwgNTAwLCAwLCA2MDApLA0KICBjbGFpbV8zID0gYygxMDAsIDE3MDAsIDAsIDE4MDApLA0KICBjbGFpbV80ID0gYygxMDAsIDI5MDAsIDEwMDAsNDAwMCksDQogIHRvdGFsID0gYygzNTAsIDUxMDAsIDEwMDAsIDY0NTApDQopDQoNCmthYmxlKHRhYmVsLCBhbGlnbiA9ICJjIiwgY2FwdGlvbiA9ICJUYWJlbCBLbGFpbSIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiKQ0KYGBgDQoNClVudHVrIG1lbmFuZ2FuaSBzaXR1YXNpIHVtdW0gZGVuZ2FuICRrJCBrZWxvbXBvaywgcGFydGlzaSBnYXJpcyBiaWxhbmdhbiByZWFsIHBvc2l0aWYgbWVuamFkaSAkayQgaW50ZXJ2YWwgbWVuZ2d1bmFrYW4gdGl0aWsgcG90b25nDQoNClxiZWdpbntlcXVhdGlvbn0NCjAgPSBNXzAgPCBNXzEgPCBcY2RvdHMgPCBNX3trLTF9IDwgTV9rID0gXGluZnR5Lg0KXGVuZHtlcXVhdGlvbn0NCg0KUGVyaGF0aWthbiBiYWh3YSBpbnRlcnZhbCBrZS0kaiQgYWRhbGFoICQoTV97auKIkjF9LE1fal0kLiBTZWthcmFuZyBiaWFya2FuICRZX2okIG1lbmphZGkganVtbGFoIHJpc2lrbyB5YW5nIGRpYmFnaSBvbGVoIHBpaGFrIGtlLSRqJC4gVW50dWsgbWVuZ2lsdXN0cmFzaWthbiwgamlrYSBrZXJ1Z2lhbiAkeCQgYWRhbGFoIHNlaGluZ2dhICRNX3tq4oiSMX08eOKJpE1faiQsIG1ha2ENCg0KXGJlZ2lue2VxdWF0aW9ufQ0KXGxlZnQoXGJlZ2lue2FycmF5fXtjfQ0KICAgIFlfMVxcIFlfMiBcXCBcdmRvdHMgXFwgWV9qIFxcWV97aisxfSBcXCBcdmRvdHMgXFxZX2sNCiAgICBcZW5ke2FycmF5fVxyaWdodCkNCiAgICA9XGxlZnQoXGJlZ2lue2FycmF5fXtjfQ0KICAgIE1fMS1NXzAgXFwgTV8yLU1fMSAgXFwgXHZkb3RzIFxcIHgtTV97ai0xfSAgXFwgMCBcXCBcdmRvdHMgXFwwDQogICAgXGVuZHthcnJheX1ccmlnaHQpDQpcZW5ke2VxdWF0aW9ufQ0KDQpraXRhIGRhcGF0IG1lbnVsaXNrYW5ueWEgc2ViYWdhaQ0KDQpcYmVnaW57ZXF1YXRpb259DQpZX2ogPSBcbWluKFgsTV9qKSAtIFxtaW4oWCxNX3tqLTF9KSAuDQpcZW5ke2VxdWF0aW9ufQ0KDQpEZW5nYW4gdW5na2FwYW4gJFlfaj1taW4oWCxNX2op4oiSbWluKFgsTV97auKIkjF9KSQsIGtpdGEgZGFwYXQgbWVsaWhhdCBiYWh3YSBwaWhhayBrZS0kaiQgYmVydGFuZ2d1bmcgamF3YWIgYXRhcyBrbGFpbSBkYWxhbSBpbnRlcnZhbCAkKE1fe2riiJIxfSxNX2pdJC4gRGVuZ2FuIGluaSwgQW5kYSBkYXBhdCBtZW1lcmlrc2EgYmFod2EgJFg9WV8xK1lfMivii68rWV9rJC4gU2VwZXJ0aSB5YW5nIGRpdGVrYW5rYW4gZGFsYW0gY29udG9oIGJlcmlrdXQsIGthbWkganVnYSBtZW5jYXRhdCBiYWh3YSBwaWhhay1waWhhayB5YW5nIHRlcmxpYmF0IHRpZGFrIGhhcnVzIGJlcmJlZGEuDQoNCiMjIyMgUG9ydGZvbGlvIE1hbmFnZW1lbnQgRXhhbXBsZQ0KDQpCYW55YWsgdmFyaWFzaSBrb250cmFrIHlhbmcgbWVuZGFzYXIgbXVuZ2tpbiB0ZXJqYWRpLiBVbnR1ayBzYXR1IGlsdXN0cmFzaSBsYWdpLCBwZXJ0aW1iYW5na2FuIHlhbmcgYmVyaWt1dCBpbmkuDQoNCkNvbnRvaCAxMC40LjYuIE1hbmFqZW1lbiBQb3J0b2ZvbGlvLiBBbmRhIGFkYWxhaCBLZXBhbGEgUGV0dWdhcyBSaXNpa28gZGFyaSBzZWJ1YWggcGVydXNhaGFhbiB0ZWxla29tdW5pa2FzaS4gUGVydXNhaGFhbiBBbmRhIG1lbWlsaWtpIGJlYmVyYXBhIHJpc2lrbyBwcm9wZXJ0aSBkYW4gdGFuZ2d1bmcgamF3YWIuIEthbWkgYWthbiBtZW1wZXJ0aW1iYW5na2FuOg0KDQokWF8xJCAtIGdlZHVuZywgZGltb2RlbGthbiBtZW5nZ3VuYWthbiBkaXN0cmlidXNpIGdhbW1hIGRlbmdhbiByYXRhLXJhdGEgMjAwIGRhbiBwYXJhbWV0ZXIgc2thbGEgMTAwLg0KJFhfMiQgLSBrZW5kYXJhYW4gYmVybW90b3IsIGRpbW9kZWxrYW4gbWVuZ2d1bmFrYW4gZGlzdHJpYnVzaSBnYW1tYSBkZW5nYW4gcmF0YS1yYXRhIDQwMCBkYW4gcGFyYW1ldGVyIHNrYWxhIDIwMC4NCiRYXzMkIC0gcmlzaWtvIGRpcmVrdHVyIGRhbiBwZWphYmF0IGVrc2VrdXRpZiwgZGltb2RlbGthbiBtZW5nZ3VuYWthbiBkaXN0cmlidXNpIFBhcmV0byBkZW5nYW4gcmF0YS1yYXRhIDEwMDAgZGFuIHBhcmFtZXRlciBza2FsYSAxMDAwLg0KJFhfNCQgLSByaXNpa28gc2liZXIsIGRpbW9kZWxrYW4gbWVuZ2d1bmFrYW4gZGlzdHJpYnVzaSBQYXJldG8gZGVuZ2FuIHJhdGEtcmF0YSAxMDAwIGRhbiBwYXJhbWV0ZXIgc2thbGEgMjAwMC4NCg0KU2VidXRrYW4gdG90YWwgcmlzaWtvIHNlYmFnYWkgJFggPSBYXzEgKyBYXzIgKyBYXzMgKyBYXzQkLiBVbnR1ayBrZXNlZGVyaGFuYWFuLCBBbmRhIG1lbmdhc3Vtc2lrYW4gYmFod2EgcmlzaWtvIGluaSBpbmRlcGVuZGVuLiAoTmFudGksIGRpIEJhZ2lhbiAxNC42LCBrYW1pIGFrYW4gbWVtcGVydGltYmFuZ2thbiBrYXN1cyB5YW5nIGxlYmloIGtvbXBsZWtzIGRhcmkga2V0ZXJnYW50dW5nYW4uKQ0KDQpVbnR1ayBtZW5nZWxvbGEgcmlzaWtvLCBBbmRhIG1lbmNhcmkgcGVybGluZHVuZ2FuIGFzdXJhbnNpLiBBbmRhIGluZ2luIG1lbmdlbG9sYSBqdW1sYWggYmFuZ3VuYW4gZGFuIGtlbmRhcmFhbiBiZXJtb3RvciB5YW5nIGtlY2lsIHNlY2FyYSBpbnRlcm5hbCwgaGluZ2dhIE0xIGRhbiBNMiwgbWFzaW5nLW1hc2luZy4gQW5kYSBtZW5jYXJpIGFzdXJhbnNpIHVudHVrIG1lbnV0dXBpIHNlbXVhIHJpc2lrbyBsYWluLiBTZWNhcmEga2h1c3VzLCBiYWdpYW4gZGFyaSBwZXJ1c2FoYWFuIGFzdXJhbnNpIGFkYWxhaA0KDQpcYmVnaW57ZXF1YXRpb259DQpZX3tpbnN1cmVyfSA9IChYXzEgLSBNXzEpXysgKyAoWF8yIC0gTV8yKV8rICsgWF8zICsgWF80ICwNClxlbmR7ZXF1YXRpb259DQoNCnNlaGluZ2dhIHJpc2lrbyB5YW5nIEFuZGEgdGFuZ2d1bmcgYWRhbGFoICRZX3tyZXRhaW5lZH0gPSBYLVlfe2luc3VyZXJ9ID0gbWluKFhfMSxNXzEpK21pbihYXzIsTV8yKSQuIE1lbmdndW5ha2FuIGRlZHVjdGlibGUgJE1fMT0xMDAkIGRhbiAkTV8yPTIwMCQ6DQoNCkEuIFRlbnR1a2FuIGp1bWxhaCBrbGFpbSB5YW5nIGRpaGFyYXBrYW4gZGFyaSAoaSkgeWFuZyBkaXRhbmdndW5nLCAoaWkpIHlhbmcgZGl0ZXJpbWEgb2xlaCBhc3VyYW5zaSwgZGFuIChpaWkpIGp1bWxhaCBrZXNlbHVydWhhbi4NCkIuIFRlbnR1a2FuIHBlcnNlbnRpbCBrZS04MCwga2UtOTAsIGtlLTk1LCBkYW4ga2UtOTkgdW50dWsgKGkpIHlhbmcgZGl0YW5nZ3VuZywgKGlpKSB5YW5nIGRpdGVyaW1hIG9sZWggYXN1cmFuc2ksIGRhbiAoaWlpKSBqdW1sYWgga2VzZWx1cnVoYW4uDQpDLiBCYW5kaW5na2FuIGRpc3RyaWJ1c2kgZGVuZ2FuIG1lbXBsb3R0aW5nIGRlbnNpdGFzIHVudHVrIChpKSB5YW5nIGRpdGFuZ2d1bmcsIChpaSkgeWFuZyBkaXRlcmltYSBvbGVoIGFzdXJhbnNpLCBkYW4gKGlpaSkganVtbGFoIGtlc2VsdXJ1aGFuLg0KIA0KU29sdXNpDQoNCm1lbnlpYXBrYW4gcGFyYW1ldGVyDQpgYGB7cn0NCiMgRm9yIHRoZSBnYW1tYSBkaXN0cmlidXRpb25zLCB1c2UNCmFscGhhMSA8LSAyOyAgICAgIHRoZXRhMSA8LSAxMDANCmFscGhhMiA8LSAyOyAgICAgIHRoZXRhMiA8LSAyMDANCiMgRm9yIHRoZSBQYXJldG8gZGlzdHJpYnV0aW9ucywgdXNlDQphbHBoYTMgPC0gMjsgICAgICB0aGV0YTMgPC0gMTAwMA0KYWxwaGE0IDwtIDM7ICAgICAgdGhldGE0IDwtIDIwMDANCiMgTGltaXRzDQpNMSAgICAgPC0gMTAwDQpNMiAgICAgPC0gMjAwDQpgYGANCg0KZGVuZ2FuIHBhcmFtZXRlciBpbmksIHNlbGFuanV0bnlhIG1lbnNpbXVsYXNpa2FuIHJlYWxpc2FzaSBkYXJpIHJpc2lrby1yaXNpa28gZGFsYW0gcG9ydG9mb2xpbw0KDQpgYGB7cn0NCiMgU2ltdWxhdGUgdGhlIHJpc2tzDQpuU2ltIDwtIDEwMDAwICAjbnVtYmVyIG9mIHNpbXVsYXRpb25zDQpzZXQuc2VlZCgyMDE3KSAjc2V0IHNlZWQgdG8gcmVwcm9kdWNlIHdvcmsgDQpYMSA8LSByZ2FtbWEoblNpbSxhbHBoYTEsc2NhbGUgPSB0aGV0YTEpICANClgyIDwtIHJnYW1tYShuU2ltLGFscGhhMixzY2FsZSA9IHRoZXRhMikgIA0KIyBGb3IgdGhlIFBhcmV0byBEaXN0cmlidXRpb24sIHVzZQ0KbGlicmFyeShhY3R1YXIpDQpYMyA8LSBycGFyZXRvKG5TaW0sc2NhbGU9dGhldGEzLHNoYXBlPWFscGhhMykNClg0IDwtIHJwYXJldG8oblNpbSxzY2FsZT10aGV0YTQsc2hhcGU9YWxwaGE0KQ0KIyBQb3J0Zm9saW8gUmlza3MNClggICAgICAgICA8LSBYMSArIFgyICsgWDMgKyBYNA0KWXJldGFpbmVkIDwtIHBtaW4oWDEsTTEpICsgcG1pbihYMixNMikNCllpbnN1cmVyICA8LSBYIC0gWXJldGFpbmVkDQpgYGANCg0KQS4gaGFzaWwgZGFyaSBqdW1sYWggZWtzcGVrdGFzaSBrbGFpbQ0KDQpgYGB7cn0NCiMgRXhwZWN0ZWQgQ2xhaW0gQW1vdW50cw0KRXhwVmVjIDwtIHQoYXMubWF0cml4KGMobWVhbihZcmV0YWluZWQpLG1lYW4oWWluc3VyZXIpLG1lYW4oWCkpKSkNCmNvbG5hbWVzKEV4cFZlYykgPC0gYygiUmV0YWluZWQiLCAiSW5zdXJlciIsIlRvdGFsIikNCnJvdW5kKEV4cFZlYyxkaWdpdHM9MikNCmBgYA0KDQpCLiBoYXNpbCB1bnR1ayBrdWFudGlsbnlhDQoNCmBgYHtyfQ0KIyBRdWFudGlsZXMNCnF1YW50TWF0IDwtIHJiaW5kKA0KICBxdWFudGlsZShZcmV0YWluZWQsIHByb2JzPWMoMC44MCwgMC45MCwgMC45NSwgMC45OSkpLA0KICBxdWFudGlsZShZaW5zdXJlciwgIHByb2JzPWMoMC44MCwgMC45MCwgMC45NSwgMC45OSkpLA0KICBxdWFudGlsZShYICAgICAgICwgIHByb2JzPWMoMC44MCwgMC45MCwgMC45NSwgMC45OSkpKQ0Kcm93bmFtZXMocXVhbnRNYXQpIDwtIGMoIlJldGFpbmVkIiwgIkluc3VyZXIiLCJUb3RhbCIpDQpyb3VuZChxdWFudE1hdCxkaWdpdHM9MikNCmBgYA0KDQpDLiBCZXJpa3V0IGFkYWxhaCBoYXNpbCBwbG90IGRlbnNpdGFzIHJpc2lrbyB5YW5nIGRpcGVydGFoYW5rYW4sIGRpYXN1cmFuc2lrYW4sIGRhbiB0b3RhbCBwb3J0b2ZvbGlvLg0KDQpgYGB7cn0NCnBhcihtZnJvdz1jKDEsMykpDQpwbG90KGRlbnNpdHkoWXJldGFpbmVkKSwgeGxpbT1jKDAsNTAwKSwgbWFpbj0iUmV0YWluZWQgUG9ydGZvbGlvIFJpc2siLCB4bGFiPSJMb3NzIChOb3RlIHRoZSBkaWZmZXJlbnQgaG9yaXpvbnRhbCBzY2FsZSkiLCB5bGFiID0gIkRlbnNpdHkgKE5vdGUgZGlmZmVyZW50IHZlcnRpY2FsIHNjYWxlKSIpDQpwbG90KGRlbnNpdHkoWWluc3VyZXIpLCB4bGltPWMoMCwxNTAwMCksIG1haW49Ikluc3VyZXIgUG9ydGZvbGlvIFJpc2siLCB4bGFiPSJMb3NzIikNCnBsb3QoZGVuc2l0eShYKSwgeGxpbT1jKDAsMTUwMDApLCBtYWluPSJUb3RhbCBQb3J0Zm9saW8gUmlzayIsIHhsYWI9Ikxvc3MiKQ0KYGBg