# global option chunck
knitr::opts_chunk$set(fig.width=6, 
                      fig.asp=0.618,
                      fig.retina = 2,
                      dpi=300,
                      echo=TRUE)
options(figcap.prefix = "Figure", figcap.sep = ":", figcap.prefix.highlight = "**")
options(tabcap.prefix = "Table", tabcap.sep = ":", tabcap.prefix.highlight = "**")
# load the required packages and data
suppressMessages(library(tidyverse))
suppressMessages(library(readxl))
suppressMessages(library(stringr))
suppressMessages(library(bookdown))
load('memper_leipzig_main_data.RData')

© 2017 Gede Primahadi Wijaya Rajeg ORCID iD iconorcid.org/0000-0002-2047-8621
I Made Rajeg ORCID iD iconorcid.org/0000-0001-8989-0203

Sitiran:

Rajeg, G. P. W., & Rajeg, I. M. (2017). Mempertemukan morfologi dan linguistik korpus: Kajian konstruksi pembentukan kata kerja [per-+Ajektiva] dalam Bahasa Indonesia. In I. N. Sudipa & M. S. Satyawati (Ed.), Rona Bahasa: Buku persembahan kepada Prof. Dr. Aron Meko Mbete memasuki masa purnatugas (pp. 288–327). Denpasar, Bali, Indonesia: Swasta Nulus. https://doi.org/10.4225/03/5a0627de02453


Abstract

This contribution presents a corpus-based, constructional account on one of the derivational morphological constructions for causative transitive verbs in Indonesian, i.e. [per-+ADJ] schema; the schema expresses a schematic meaning of ‘to cause the object to have more of the characteristics denoted by the adjectival root’. Based on the Indonesian Leipzig Corpora, this study shows that the schema exhibits a low productivity, based on its type frequency and hapax/token ratio. Its low productivity is further evidenced at the level of the semantic subschemas of the construction, despite identifying a significantly strong and positive correlation between the established types per semantic subschemas and their hapax. Data for the conventionalised, prototypical instantiations of the schema, which can be useful for foreign learners of Indonesian, is also presented.

Keywords: Indonesian, Corpus Linguistics, Usage-based Linguistics, Construction Grammar, Construction Morphology, Morphological productivity


1 Pengantar2

Makalah ini3 mengulas beberapa unsur kajian morfologi yang dapat dilakukan dan diungkap melalui Linguistik Korpus (LKorp) (mis. Baayen, 2009; Stefanowitsch, 2017, hal. 276). Sebagai contoh awal, satu konstruksi yang akan dikaji adalah skema konstruksional pembentukan kata kerja transitif kausatif di Bahasa Indonesia (BInd), yaitu [per+Ajektiva] (selanjutnya disingkat [per+AJ]). Kata kerja kausatif yang mencontohkan skema ini secara skematis memiliki fungsi/makna ‘meningkatkan ciri atau sifat, seperti yang dinyatakan oleh ajektivanya, yang (sudah) dimiliki oleh objek’ (Sneddon, Adelaar, Djenar, & Ewing, 2010, hal. 103) (sub-bagian @ref(sneddon) memberikan pemaparan lebih jauh terkait skema ini). Terdapat tiga hal yang akan coba dijelajahi dengan metode LKorp terkait penggunaan skema [per-+AJ] dalam korpus.

Perihal pertama (sub-bagian @ref(produktivitas)) berkaitan dengan jumlah tipe kata (type frequency) yang mencontohkan skema [per+AJ] yang bisa ditemukan dalam korpus BInd. Jumlah tipe suatu skema morfologis menandai tingkat produktifitas terwujud (realised productivity) skema tersebut pada satu masa pemakaian suatu bahasa (Baayen, 2009, hal. 904; Hilpert, 2013, hal. 128, 2014, hal. 81). Sehubungan dengan jumlah tipe skema [per+AJ], kajian ini juga akan mengukur jumlah tipe yang hanya muncul satu kali dalam korpus; bentuk ini diistilahkan dengan hapax legomenon4 (Hilpert, 2013, hal. 128, 2014, hal. 82).

Hapax berhubungan dengan produktifitas potensial dari suatu skema konstruksional morfologis (Baayen, 2009, hal. 905-906). Produktifitas potensial ini diukur dengan membagi jumlah hapax dengan kekerapan kemunculan skemanya (Hilpert, 2013, hal. 128), atau yang dikenal dengan hapax/token ratio (HTR). HTR menggambarkan peluang suatu skema pembentukan kata guna berkembang, atau produktif digunakan, menghasilkan bentukan-bentukan baru pada pemakaian skema tersebut ke depannya (Hilpert, 2013, hal. 128, 2014, hal. 82). Rentangan nilai HTR adalah antara 0 (tidak ada hapax) dan 15 (semua tipe pencontohannya adalah hapax); Nilai HTR yang mendekati 0 memperkecil kemungkinan menemukan bentukan baru dari skema morfologis tersebut (Hilpert, 2013, hal. 129, 132, Table 4.1). Jumlah tipe dan hapax akan dibahas pada sub-bagian @ref(produktivitas).

Perihal kedua (sub-bagian @ref(tipesemantis)) menyangkut skema-skema bawahan (subschemas) dari skema [per-+AJ] dalam kaitannya dengan tipe semantis yang mengisi tempat Ajektiva di dalam skema tersebut. Persebaran jumlah tipe dan hapax terkait skema-skema bawahan semantis ini juga akan dijabarkan. Salah satu hal yang dapat diukur dari penjabaran tersebut adalah kaitan antara (i) jumlah tipe kata dari suatu tipe skema bawahan semantis, yang sebelumnya telah diketahui oleh seorang penutur bahasa, dan (ii) perluasan tipe skema bawahan semantis serupa yang mencakup dua hal, yaitu (i) pembentukan kata baru serta (ii) keberterimaan (dalam hal memahami) bentukan kata baru tersebut dari skema bawahan semantis yang sama (Bybee, 2013, hal. 6; Zeschel, 2010, hal. 202).

Berkaitan dengan perihal kedua, khususnya keberterimaan, perihal ketiga (sub-bagian @ref(cic)) membahas kekerapan kemunculan/pemakaian (token frequency) skema [per+AJ] dalam korpus melalui kata yang mencontohkannya. Data ini akan dapat membantu menentukan kata berskema [per-+AJ] yang sering muncul secara keseluruhan dalam korpus. Dalam hal representasi kognitif, data kekerapan dapat menjadi salah satu cerminan kelaziman dan keterpatrian kata tersebut dalam khasanah kebahasaan pemakai BInd (Bybee, 2010, hal. 29, 2013). Sub-bagian @ref(cic) akan menunjukkan bagaimana hubungan antara kekerapan kemunculan dan jumlah tipe dapat digunakan untuk mengukur ambang batas keterpatrian dan kelaziman pencontohan suatu skema konstruksional.

Ada tiga tujuan utama yang ingin dicapai oleh makalah ini. Sub-bagian berikut mengulas ketiga tujuan tersebut secara lebih rinci.

1.1 Tujuan metodologis

Makalah ini dimaksudkan untuk membangkitkan minat peneliti bahasa di Indonesia untuk mengenali lebih jauh metode Linguistik Korpus (Kuantitatif) (LKorp). Tidak bisa dipungkiri bahwa LKorp setakat ini berkembang begitu pesat menjadi unsur metodologis termutakhir di dalam penelitian kebahasaan, khususnya dalam lingkup Linguistik Kognitif (LKog) dan Tatabahasa Konstruksional, seperti Construction Grammar (CxG) dan Cognitive Grammar (CG) (Croft, 2001; Glynn & Fischer, 2010; Janda, 2013b; Langacker, 2013; Yoon & Gries, 2016). Data kuantitatif yang diperoleh dari korpus dapat diolah untuk mengukur dan menjawab pertanyaan-pertanyaan teoretis secara lebih empiris, selain memberikan pemahaman baru yang belum dijabarkan sebelumnya terkait suatu fenomena kebahasaan. Makalah ini akan menunjukkan beberapa unsur teoretis dari bidang morfologi yang dapat diulas melalui data korpus kuantitatif. Selain itu, makalah ini akan menyampaikan beberapa kendala yang bisa ditemukan di dalam kajian morfologi, utamanya pada BInd, melalui LKorp (sub-bagian @ref(kendala)).

Selanjutnya, sub-bagian @ref(pengolahan) di bawah menunjukkan bagaimana pengolahan data korpus untuk kajian kebahasaan pada masa sekarang ini akan lebih terbantu dengan memahami bahasa pemrograman (programming language) untuk pengolahan data (data science) secara umum. R (R Core Team, 2016) adalah salah satu bahasa pemrograman terdepan yang banyak digunakan di dalam kajian kebahasaan saat ini (Baayen, 2008; Gries, 2009, 2013b; Levshina, 2015). R dipandang begitu bermanfaat karena menawarkan satu wadah yang sesuai bagi dua rangkaian utama pengolahan data di dalam LKorp: (i) pengolahan teks dan (ii) analisis statistik. Salah satu unsur terpenting dari R selanjutnya adalah bahwa R sekaligus menjadi tempat untuk menulis laporan analisis (seperti halnya makalah ini)6 bersamaan dengan kode pemrograman bagi rangkaian analisis tersebut; hal ini bisa dilakukan dengan aplikasi dampingan dari R, yaitu RStudio (Wickham & Grolemund, 2017). Piranti yang ditawarkan oleh R tersebut dapat mewujudkan dua hal mendasar dalam tahap pengolahan data termutakhir, yaitu (i) keterbukaan data, dan (ii) keterciptaan-ulang proses analisisnya (reproducible data analysis) (Wickham & Grolemund, 2017).

1.2 Tujuan teoretis

Perkembangan pesat kajian kebahasaan berdasarkan Tatabahasa Konstruksional (CxG), utamanya yang menggunakan LKorp (mis. Yoon & Gries, 2016), lebih banyak muncul pada bahasa-bahasa Indo-Eropa, khususnya Bahasa Inggris. Secara umum, belum banyak kajian-kajian kebahasaan, lebih-lebih morfologi, untuk BInd yang (i) merujuk kepada kajian teoretis kontemporer berbasis penggunaan (usage-based approach), seperti LKog dan CxG, dan (ii) yang digabungkan dengan aspek analitis dan metodologis dari LKorp. Secara garis besar, makalah ini turut berkontribusi (i) memperluas kajian di dalam LKog dan CxG atas dasar data BInd, dan (ii) menambah khasanah kajian morfologi (dan sintaksis) yang telah dilakukan sebelumnya, misalnya oleh Arka dan kolega (Arka et al., 2009; Arka, Manurung, & Mistica, 2009), yang menggabungkan pendekatan Leksikal-Fungsional dan unsur komputasional.

Tujuan teoretis mengkhusus dari makalah ini adalah memberikan gambaran awal unsur-unsur pemakaian dari skema konstruksional pada tataran morfologi pada BInd, khususnya skema konstruksional kata kerja kausatif [per+AJ]. Unsur-unsur ini meliputi jumlah tipe dan kekerapan pencontohan skema [per-+AJ] serta tipe semantis dari skema tersebut. Kajian terhadap unsur pemakaian tersebut diharapkan dapat memberikan pemaparan teoretis dan konseptual yang lebih empiris dan terukur terkait kelaziman bentukan kata, rentangan semantis, serta produktifitas khususnya skema [per+AJ].

1.3 Tujuan praktis

Penerapan metode LKorp terhadap kajian morfologi yang akan dicontohkan pada makalah ini dapat memberikan data pemakaian nyata skema konstruksional kata kerja kausatif [per+AJ] di BInd. Data ini di antaranya berupa daftar kata-kata yang ditemukan dalam korpus yang mencontohkan skema tersebut. Salah satu kegunaan praktis data-data ini adalah sebagai sumber pengajaran BInd bagi penutur asing yang didasari atas bukti pemakaian nyata bagaimana suatu konstruksi atau unit kebahasaan lazimnya digunakan.

Dengan tidak bermaksud mengesampingkan peran intuisi penutur asli terkait keberterimaan suatu bentukan kata, penulis menganggap intuisi sangat berperan penting pada tahap memahami dan menganalisis/menafsirkan data, tetapi tidak dalam hal menciptakan secara sengaja data kebahasaan untuk tujuan analitis (Janda, 2013a, hal. 3). Pernyataan ini didasari atas praanggapan pendekatan linguistik berdasar penggunaan (usage-based linguistics), yang menjadi salah satu pilar penting dalam LKog dan CxG (Bybee, 2010; Janda, 2013a, hal. 2-3). Asas linguistik berdasar penggunaan memandang bahwa pengetahuan kebahasaan seseorang terbentuk dari kejadian-kejadian nyata tindak tutur pemakaian bahasa itu sendiri; dalam hal ini, data penggunaan nyata menjadi perhatian utama di dalam kajian kebahasaan, khususnya di dalam LKog dan CxG (Bybee, 2013). Singkatnya, data korpus untuk suatu konstruksi pada suatu bahasa dapat dijadikan bukti-bukti yang dapat ditawarkan kepada pelajar BInd; dalam hal ini pelajar diharapkan lebih memahami bagaimana, dan seberapa lazim (bukan benar- atau salah-nya), suatu unsur ke(tata)bahasaan dipakai oleh pengguna BInd.

2 Kajian pustaka

2.1 Skema konstruksional [per-+AJ] berdasarkan buku tatabahasa Bahasa Indonesia

Kata kerja yang mencerminkan skema [per-+AJ] adalah kata kerja transitif kausatif. Sneddon dkk. (2010, hal. 103) menyatakan bahwa kata kerja kausatif berskema [per-+AJ] berbeda dengan kata kerja serupa berskema [Aj+-kan]. Pada kata kerja dengan skema [Aj+-kan], objeknya dipandang belum memiliki suatu ciri yang dinyatakan oleh ajektiva-nya, namun disebabkan untuk memiliki ciri tersebut. Sebaliknya, acuan makna dari kata kerja berskema [per-+AJ] adalah objeknya sudah memiliki suatu ciri tertentu dan kemudian disebabkan untuk memiliki ciri tersebut pada tingkatan yang lebih tinggi. Misalnya, ajektiva besar ketika digunakan pada skema [Aj+-kan] menjadi membesarkan (diatesis aktif) (‘membuat sesuatu menjadi besar’), dan pada skema [per-+AJ] menjadi memperbesar (diatesis aktif) (‘membuat sesuatu yang sudah besar menjadi bertambah besar’).

Sneddon dkk. (2010, hal. 103) menyatakan bahwa sebagian penutur tidak terlalu memperhatikan perbedaan makna yang ditimbulkan oleh kata kerja dari kedua skema tersebut; penulis menganggap ini adalah suatu asumsi yang sangat menarik untuk bisa diujikan tingkat keabsahannya melalui eksperimen. Ditambahkan pula bahwa terdapat ajektiva yang dapat muncul baik dengan skema [per-+AJ] dan skema [Aj+-kan], namun menyampaikan makna yang berbeda (Sneddon et al., 2010, hal. 103). Salah satu contoh yang diberikan oleh Sneddon dkk. (2010, hal. 103) untuk asumsi tadi adalah perbedaan makna antara memperpanjang ‘menambah durasi suatu objek’ dan memanjangkan ‘membuat (se)suatu benda fisik bertambah panjang’. Ini juga merupakan asumsi tersendiri yang bisa dikaji dengan membandingkan persebaran kontekts pemakaian kedua afiks tersebut, tentunya berdasarkan data korpus. Selanjutnya, Sneddon dkk. (2010, hal. 103) menunjukkan bahwa terdapat ajektiva yang lazim muncul dengan skema [per-+AJ] (mis. memperkaya) tapi tidak dengan [Aj+-kan] (mis. (?)mengayakan); data korpus juga dapat menawarkan jawaban terkait asumsi ini, yang tidak dibahas kali ini. Perhatian utama makalah ini adalah memberikan pemaparan awal berdasarkan korpus terkait pemakaian skema [per-+AJ] secara mandiri, khususnya (i) tingkat produktifitas menyeluruhnya pada situasi pemakaian BInd setakat ini, (ii) rentangan semantis dan tingkat produktifitas per skema bawahan semantisnya, serta (iii) pencontohan-pencontohan lazim skema tersebut.

2.2 Asumsi mendasar Tatabahasa Konstruksional (CxG)

Secara teoretis, makalah ini dilandasi atas pendekatan LKog, khususnya Tatabahasa Konstruksional (constructionist approaches) (CxG) (Croft, 2001; Goldberg, 2006, 2013; Langacker, 2013)7. Pendekatan konstruksional melihat (tata)bahasa sebagai suatu khasanah jejaring konseptual terstruktur yang terdiri atas konstruksi, yaitu keberpasangan bentuk-dan-makna, atau unit simbolis. Bentuk utamanya dipahami sebagai unsur ortografis atau bunyi; makna dipahami sebagai struktur semantis dan pragmatis (Langacker, 2013, hal. 15, 30). Berikut ini adalah sitiran langsung terkait pemahaman konstruksi dari salah satu pakar kunci di dalam CxG:

All levels of grammatical analysis involve constructions: learned pairings of form with semantic or discourse function, including morphemes or words, idioms, partially lexically filled and fully general phrasal patterns. (…) Any linguistic pattern is recognized as a construction as long as some aspect of its form or function is not strictly predictable from its component parts or from other constructions recognized to exist. In addition, patterns are stored as constructions even if they are fully predictable as long as they occur with sufficient frequency.” (Goldberg, 2006, hal. 5, penekanan kapital sesuai aslinya)

Sitiran ini menunjukkan bahwa konstruksi dalam berbagai bentuk dan tingkat keterperinciannya adalah inti dari (analisis khasanah ke)bahasa(an) itu sendiri (Perhatikan Tabel @ref(tab:konstruksi) berikut). Artinya, tidak ada sekat-sekat yang tegas antara leksikon dan tatabahasa karena semuanya dipandang sebagai konstruksi. Leksikon dan tatabahasa membentuk suatu rentangan yang dibedakan pada tingkat kompleksitas, keterperincian, dan keterpatriannya (Croft, 2001, hal. 17; Langacker, 2013, hal. 21-22, 24). Pandangan konstruksional ini juga mengindikasikan unsur linguistik yang skematis pun, seperti konstruksi sintaksis transitif, tetap menyampaikan makna, meskipun bersifat skematis/abstrak (mis. ‘suatu entitas melakukan sesuatu dalam kaitannya dengan entitas yang lain’).

tribble(~`Karakteristik`, ~`Tipe Konstruksi`, ~Contoh,
        #----------------/---------------------/---------
        "Kompleks dan (sepenuhnya) skematis", "Kalimat aktif transitif BInd", "**Putu mempelajari Tatabahasa Konstruksional**",
        "Kompleks dan (sepenuhnya) spesifik", "Idiom; peribahasa", "buah + `<kata anggota tubuh>` (mis. **buah tangan**, **buah hati**); **Mata-mata**; **takkan lari gunung dikejar**",
        "Kompleks tapi terikat", "(Pembentukan) kata kompleks", "Pembentukan kata kerja: [Ajektiva+*-kan*] (mis. **panaskan**, **hidupkan**); Pembentukan kata majemuk nominal dengan skema [N + N] (mis. **sate ayam**; **toko buku**)",
        "Atomis dan spesifik", "Kata/leksikon", "**buku**, **kertas**",
        "Atomis, spesifik, tapi terikat", "Morfem", "*per-*, *ber-*"
        ) %>%
  as.data.frame() %>%
  knitr::kable(caption='Rentangan leksikon dan tatabahasa dalam CxG (disesuaikan dengan mengacu Croft [-@croft_radical_2001, hal. 17] dan Goldberg [-@goldberg_constructions_2006, hal. 5])^[Salah satu jenis CxG, yaitu *Radical Construction Grammar* (RCxG) utamanya tidak memandang adanya kelas kata, seperti ajektiva dan nomina [@croft_radical_2001, hal. 18].].', row.names = T)
Karakteristik Tipe Konstruksi Contoh
1 Kompleks dan (sepenuhnya) skematis Kalimat aktif transitif BInd Putu mempelajari Tatabahasa Konstruksional
2 Kompleks dan (sepenuhnya) spesifik Idiom; peribahasa buah + <kata anggota tubuh> (mis. buah tangan, buah hati); Mata-mata; takkan lari gunung dikejar
3 Kompleks tapi terikat (Pembentukan) kata kompleks Pembentukan kata kerja: [Ajektiva+-kan] (mis. panaskan, hidupkan); Pembentukan kata majemuk nominal dengan skema [N + N] (mis. sate ayam; toko buku)
4 Atomis dan spesifik Kata/leksikon buku, kertas
5 Atomis, spesifik, tapi terikat Morfem per-, ber-

Konstruksi skematis muncul dari peng-umum-an (generalisation), abstraksi, atau skematisasi, dari sejumlah pemakaian spesifik dan nyata suatu unit kebahasaan; terpatrinya skema konstruksional yang terabstraksi tersebut selanjutnya berperan untuk menuntun pembentukan ekspresi baru dengan skema yang sama (Bybee, 2010, hal. 26; Langacker, 2013, hal. 24). Pemahaman ini penting terkait Morfologi Konstruksional yang akan diulas pada sub-bagian @ref(cxnmorphology) berikut. Terkait dengan hal itu, Tabel @ref(tab:konstruksi) di atas juga menunjukkan bahwa kata kompleks yang terbentuk melalui skema pembentukan kata, seperti perkuat yang terdiri dari awalan per- dan ajektiva kuat, dipandang sebagai konstruksi dengan kompleksitas pada tataran kata (Booij, 2010; Langacker, 2013, hal. 24)

Sitiran dari Goldberg di atas juga menonjolkan peran dari kekerapan pemakaian suatu bentuk linguistik untuk dipandang sebagai suatu konstruksi. Artinya, tidak hanya pola konstruksi skematis saja yang tersimpan di dalam kahasanah kebahasaan seseorang; contoh-contoh spesifik dari konstruksi tersebut juga akan tersimpan, dan terpatri pada tingkatan tertentu, sepanjang contoh-contoh spesifik tersebut muncul pada tingkat kekerapan tertentu (periksa Bybee, 2010, hal. 23-25). Dengan kata lain, tingkat kekerapan pemakaian suatu konstruksi berkaitan dengan seberapa kuat unit tersebut tersimpan, terpatri, dan melekat dalam khasanah kebahasaan penutur suatu bahasa. Data kekerapan suatu unsur kebahasaan, yang pada dasarnya diperoleh dengan melihat bukti pemakaian bahasa pada korpus, menjadikan LKorp sebagai salah satu penyanding metodologis kunci di dalam kajian CxG (Gries, 2013a) karena secara konseptual terkait dengan, dan dapat meng-operasional-kan, asumsi-asumsi mendasar di dalam CxG khususnya, dan LKog pada umumnya.

2.3 Morfologi dari sudut pandang Tatabahasa Konstruksional (CxG)

Morfologi Konstruksional (Booij, 2010, 2017) memandang pola pembentukan kata, seperti [per-+AJ], sebagai suatu skema konstruksional. Pola ini dipandang sebagai skema karena merupakan abstraksi/skematisasi dari hubungan bentuk-dan-makna serangkaian pencontohan spesifik yang telah muncul di dalam suatu bahasa (mis. per-kuat, per-lemah, dan per-kokoh untuk kasus [per-+AJ]) (Booij, 2010, hal. 544). Skema ini kemudian menjadi titik tolak untuk membentuk kata baru (mis. per-ganteng, per-kekar) (periksa Tabel @ref(tab:per-semantics-table)). Selanjutnya, pola seperti [per-+AJ] dikatakan konstruksional atas dasar hasil skematisasi tersebut juga merupakan keberpasangan bentuk-dan-makna, yaitu konstruksi (Booij, 2010, hal. 545; Hilpert, 2014, hal. 80). Yang membedakan suatu skema konstruksional, seperti [per-+AJ], dengan pencontohannya, misalnya perkokoh dan perbanyak, adalah tingkat keterperincian unsur bentuk dan maknanya.

Sebagai contoh lain, pertimbangkan skema pembentukan kata benda deverbal [pe-+Verba] pada BInd. Sebagian unsur formal/bentuk dari skema ini, yaitu unsur Verba-nya bersifat skematis/terbuka, sedangkan sebagian lainnya, yaitu unsur awalannya, bersifat spesifik/tetap dan diisi oleh pe- (dengan keberagaman alomorfi nasal dari konsonan awal kata kerja yang menjadi dasarnya). Selanjutnya, kutub makna dari skema [pe-+Verba] juga bersifat lebih skematis (yang secara abstrak merujuk kepada ‘orang yang melakukan sesuatu’ seperti dinyatakan oleh kata kerja dasarnya) dibandingkan dengan masing-masing pencontohannya. Makna pencontohan-pencontohan skema [pe-+Verba] bersifat lebih terperinci dan tidak sepenuhnya dapat diperkirakan langsung berdasarkan kutub makna dari skema konstruksionalnya. Contohnya, kata perenang dan peneliti tidak hanya berarti ‘orang yang melakukan sesuatu’ seperti yang dinyatakan oleh unsur verbanya; penutur BInd umumnya mengetahui bahwa perenang bukanlah sembarang ‘orang yang berenang’, tapi mereka yang memiliki kemampuan untuk berenang secara baik (umumnya atlit). Begitu pun halnya peneliti yang bukan sekedar ‘orang yang meneliti’, tapi mereka yang melakukan penelitian sebagai suatu pekerjaan.

Bahwa penutur BInd umumnya mengetahui makna lazim kedua kata tersebut, yang melebihi makna skematis skema konstruksionalnya, mengindikasikan ke-konstruksional-an kata-kata tersebut sebagai suatu unit simbolis bentuk-dan-makna yang menjadi bagian dari khasanah pengetahuan ke(tata)bahasaan seorang penutur (Hilpert, 2014, hal. 80). Dengan kata lain, dari sudut pandang CxG, fakta bahwa suatu bentukan kata yang tidak sepenuhnya mewarisi sifat semantis skemanya, hingga sampai pada tingkat idiosinkretik (seperti pada perenang dan peneliti), tidak semata-mata membuat/membuktikan kata-kata tersebut tersimpan di dalam apa yang disebut dengan bilik leksikon; sedangkan kata-kata yang artinya dapat diprediksi dan/atau menuruti aturan konstruksional skemanya tidak (perlu) tersimpan di dalam khasanah kebahasaan (karena cukup sampai pada skema pembentuknya). Melainkan, CxG memandang bahwa semua hal yang penutur ketahui ketika penutur tersebut mengetahui suatu bahasa merupakan bagian dari khasanah kebahasaan penutur tersebut. Khasanah ini terdiri dari jejaring konstruksi, keberpasangan bentuk-dan-makna, yang berbeda pada tataran keterperincian/keskematisan, kompleksitas, dan keterpatriannya (lazim atau baru/novel) (Goldberg, 2006, hal. 5; Langacker, 2013, hal. 21).

Jadi, berdasarkan pendekatan linguistik berdasarkan penggunaan (usage-based linguistics), penutur akan menyimpan kata-kata spesifik dari suatu pola pembentukan kata, beserta segala rincian kontekstual, formal-struktural, dan semantis dari pemakaian kata tersebut, sepanjang kata-kata spesifik tersebut muncul dengan intensitas yang tinggi/sering (Bybee, 2010, hal. 24-25; Hilpert, 2014, hal. 66-67); hal ini terlepas dari apakah pola yang mendasari kata-kata tersebut berisifat prediktif/teratur dan tidak idiosinkretik. Hilpert (2014, hal. 80) menambahkan bahwa peran konstruksi yang disematkan pada suatu skema konstruksional morfologis ditandai dengan kemampuan penutur untuk membentuk dan memproses bentukan kata baru berdasarkan skema tersebut.

2.3.1 Keragaman semantis pencontohan skema konstrukional morfologis

Pandangan konstruksional bahwa penataan unsur leksikal dan gramatikal didasari atas khasanah yang sama, yaitu jejaring konstruksi yang dihubungkan secara pewarisan (inheritance), memungkinkan kajian terhadap keberagaman skema-skema bawahan (sub-schemas) dari suatu konstruksi (Trousdale, 2016, hal. 69). Sebagai contoh, skema kata benda deverbal [pe-+Verba] yang telah disinggung sebelumnya memiliki beragam jejaring makna, seperti pelaku/agen (pembeli), instrumen/alat (penghapus), dan penderita (pesuruh) (periksa Primahadi Wijaya R., 2013, hal. 77, yang mengulas hubungan metonimis terkait pembentukan kata dengan awalan pada BInd.). Hal ini menunjukkan keberagaman makna dari satu skema [pe-+Verba] muncul pada tataran skema bawahannya (Trousdale, 2016, hal. 69); skema bawahan tersebut secara mandiri memiliki batasan-batasan tertentu, baik formal dan semantis, yang tidak dimiliki sepenuhnya oleh pola utamanya (periksa lebih lanjut Booij, 2010, hal. 548). Pada contoh skema [pe-+Verba], batasan-batasan skema bawahannya bisa berupa (i) tipe (semantis) kata kerja yang umumnya dipakai di dalam skema tersebut, (ii) transitifitas kata kerja-nya, dan (iii) bagaimana bentukan nomina dengan tipe kata kerja tersebut digunakan di dalam kalimat guna menyampaikan suatu makna tertentu (mis. agen, penderita, dll.), yang dapat bersifat idiosinkretik.

Pada makalah ini, unsur semantis yang akan diulas adalah tipe semantis ajektiva yang digunakan dalam konstruksi [per+AJ]. Unsur ini dapat menggambarkan (i) rentangan semantis dari konstruksinya secara umum, dan (ii) distribusi tipe skema bawahan semantis dalam kaitannya dengan jumlah tipe dan hapax yang mencontohkan skema-skema bawahan tersebut (lihat Gambar @ref(fig:semanticsplot) di bawah).

3 Data dan Metodologi

Bagian ini akan memaparkan (i) sumber data yang digunakan serta (ii) langkah-langkah yang dilakukan dalam memperoleh data yang akan dibahas di Bagian @ref(hasil). Cakupan lebih banyak akan diberikan pada unsur kedua.

3.1 Sumber data

Data korpus BInd yang digunakan pada makalah ini adalah Indonesian Leipzig Corpora. Korpus ini merupakan bagian dari Leipzig Corpora Collection (Biemann, Heyer, Quasthoff, & Richter, 2007; Quasthoff & Goldhahn, 2013)8 dan dapat diunduh secara cuma-cuma. Korpus BInd ini tersimpan dalam bentuk teks kalimat acak yang dikumpulkan melalui internet. Jumlah kalimat dan kata dari masing-masing berkas teks yang saat ini tersedia untuk Indonesian Leipzig Corpora ditampilkan pada Tabel @ref(tab:leipzig-corpus) berikut.

corpus_total_words <- leipzig_count %>% .$Size %>% str_replace_all(",", "") %>% as.numeric() %>% sum() %>% format(big.mark=".", decimal.mark=",")
leipzig_count %>%
  rename(`Berkas korpus`=Corpus, `Jumlah kata`=Size) %>%
  mutate(`Jumlah kata`=str_replace_all(`Jumlah kata`, ",", ".")) %>%
  knitr::kable(caption="Jumlah keseluruhan kata dari masing-masing berkas korpus pada *Indonesian Leipzig Corpora*.", row.names = T)
Berkas korpus Jumlah kata
1 ind_mixed_2012_1M-sentences.txt 15.052.159
2 ind_news_2008_300K-sentences.txt 5.875.376
3 ind_news_2009_300K-sentences.txt 5.868.276
4 ind_news_2010_300K-sentences.txt 5.874.158
5 ind_news_2011_300K-sentences.txt 5.852.211
6 ind_news_2012_300K-sentences.txt 5.873.523
7 ind_newscrawl_2011_1M-sentences.txt 16.376.426
8 ind_newscrawl_2012_1M-sentences.txt 16.916.778
9 ind_web_2011_300K-sentences.txt 4.472.885
10 ind_web_2012_1M-sentences.txt 15.844.629
11 ind_wikipedia_2016_1M-sentences.txt 16.506.714
12 ind-id_web_2013_1M-sentences.txt 16.406.671
13 ind-id_web_2015_3M-sentences.txt 49.849.398

Jumlah kalimat dari masing-masing korpus ditunjukkan dalam bagian nama berkas korpus tersebut (mis. ..._1M-sentences mengindikasikan korpus berjumlah satu juta kalimat). Ukuran keseluruhan dari tiga belas berkas korpus yang digunakan berjumlah 180.769.204 kata.

3.2 Pengolahan data

3.2.1 Penggalian kata-kata potensial pencontohan dari skema [per+AJ]

Proses pemerolehan data dari korpus dan analisisnya dilakukan sepenuhnya menggunakan sejumlah fungsi yang ada dalam program R. Pertama, secara khusus, penulis merancang naskah pemrograman untuk menelusuri kata-kata potensial yang mencontohkan pola [per+AJ] pada keseluruhan korpus. Kedua, pencarian dilakukan dengan merancang pola pencarian yang dikenal dengan sebutan regular expressions (RegEx) (lihat Wickham & Grolemund, 2017, hal. 207-207). RegEx yang disusun adalah sebagai berikut: \\b(?i)(mem|di|ter)(per+[a-z-]{3,})\\b. RegEx ini dapat dialihbahasakan menjadi:

carilah kata-kata (i) yang bisa terdiri atas huruf kecil atau besar9, (ii) yang diawali oleh awalan mem-, ter-, dan di-, (iii) yang kemudian diikuti oleh awalan target per-, dengan huruf r muncul paling sedikit satu kali atau lebih10 (ditandai dengan +), kemudian (iv) diikuti oleh karakter alfabetis dan strip (-)11 paling sedikit berjumlah tiga karakter atau lebih ({3,}).

Naskah pemrograman yang dirancang juga secara otomatis menghasilkan (i) daftar kata yang berhasil ditangkap oleh RegEx-nya, (ii) frekuensi kemunculannya, dan (iii) nama berkas korpus di mana kata tersebut ditemukan. Hasil ini ditampilkan pada Tabel @ref(tab:per-word-corpus) berikut.

per_words_corpus %>% arrange(desc(n)) %>% top_n(5,n) %>%
  rename(Kata=match, `Berkas korpus`=corpus_id, Kekerapan=n) %>%
  mutate(Kekerapan=format(Kekerapan, big.mark=".", decimal.mark=",")) %>%
  knitr::kable(caption = "Hasil awal lima teratas dari pencarian kata-kata yang diawali dengan *memper-*, *diper-*, dan *terper-* di dalam korpus.", row.names = T)
Kata Berkas korpus Kekerapan
1 diperlukan ind-id_web_2015_3M 10.791
2 diperoleh ind-id_web_2015_3M 8.840
3 memperoleh ind-id_web_2015_3M 8.799
4 diperkirakan ind-id_web_2015_3M 5.378
5 memperhatikan ind-id_web_2015_3M 4.651

Yang penting dicatat adalah RegEx yang dirancang hanya merinci tiga awalan diatesis yang langsung diikuti oleh per-, bukan kata dasarnya secara spesifik; calon kata dasarnya secara lebih luas ingin ditangkap dengan karakter alfabetis pada bagian [a-z-]{3,} dari pola pencariannya. Karena itulah pada Tabel @ref(tab:per-word-corpus) muncul kata-kata seperti diperlukan dan memperhatikan yang tidak termasuk ke dalam bahasan makalah ini.

3.2.2 Pemecahan struktur morfologis kata dengan MorphInd

Untuk mengetahui kata mana yang mencontohkan pola [per-+AJ] dari daftar kata pada Tabel @ref(tab:per-word-corpus), penulis menjalankan naskah pemrograman yang disebut MorphInd (Larasati, Kuboň, & Zeman, 2011). MorphInd dirancang untuk membedah struktur internal kata dalam BInd. Program ini dapat juga dijalankan melalui R12. Jadi, ketika MorphInd diberikan masukan kata seperti memperkuat, MorphInd akan memecah awalan dan kata dasarnya, sekaligus menandai kelas kata dari kata dasarnya. Keluaran pembedahan kata dari MorphInd ditunjukkan pada kolom Keluaran MorphInd pada Tabel @ref(tab:per-adj) berikut.

 per_adj %>%
  top_n(5, n) %>%
  select(-n) %>%
  mutate(tag=str_replace_all(tag, "(<.>)", "`\\1`")) %>%
  rename(Kata=match, `Awalan (diatesis)`=pref, `Kata dasar`=base, `Keluaran *MorphInd*`=tag) %>%
  knitr::kable(caption = "Nukilan data dari pola [*per*+AJ] yang berhasil dikenali oleh sistem dalam *MorphInd*.", row.names = T)
Kata Awalan (diatesis) Kata dasar Keluaran MorphInd
1 memperkuat mem perkuat meN+per+kuat<a>_VSA
2 mempercepat mem percepat meN+per+cepat<a>_VSA
3 memperluas mem perluas meN+per+luas<a>_VSA
4 diperkuat di perkuat di+per+kuat<a>_VSP
5 mempermudah mem permudah meN+per+mudah<a>_VSA

Yang perlu diperhatikan terkait MorphInd adalah program ini belum sepenuhnya mengenali dan membedah kata-kata masukannya. Kata-kata yang tidak dikenali tersebut akan ditandai dengan <x>. Perhatikan Tabel @ref(tab:per-unknown-tag) berikut.

read_delim("per_unknown_tag.txt", delim="\t") %>% 
  filter(per_adj=='y') %>% 
  sample_n(3) %>%
  bind_rows(read_delim("per_unknown_tag.txt", delim="\t") %>%
              filter(is.na(per_adj)) %>%
              sample_n(2)) %>%
  select(match, tag) %>%
  mutate(tag=str_replace_all(tag, "(<.>)", "`\\1`")) %>%
  rename(Kata=match, `Keluaran *MorphInd*`=tag) %>%
  knitr::kable(caption = "Nukilan data kata-kata yang tidak dikenali oleh sistem dalam *MorphInd*.", row.names = T)
Kata Keluaran MorphInd
1 memperunyam memperunyam<x>_X--
2 memperkecik memperkecik<x>_X--
3 memperirit memperirit<x>_X--
4 mempertarukan mempertarukan<x>_X--
5 memperkirakana memperkirakana<x>_X--

Untuk kata-kata yang tidak dibedah oleh MorphInd ini, penulis memeriksa satu per satu daftar kata-katanya. Tujuannya adalah untuk mengetahui apabila (i) memang terdapat kata yang mencontohkan skema [per-+AJ] tetapi belum ada pada sistem MorphInd, dan (ii) terdapat kata yang sudah dikenali, seperti memperkuat, namun terdapat kesalahan dalam penulisannya di dalam korpus, menjadi memperkuar. Data tambahan yang ditemukan dari hasil pemeriksaan mandiri tersebut digabungkan dengan data yang telah berhasil dikenali oleh MorphInd; data ini kemudian menjadi dasar pembahasan pada Bagian @ref(hasil) berikut.

3.2.3 Sejumlah kendala

Selain terdapatnya sejumlah kata yang belum dikenali oleh MorphInd, sistem pencarian menggunakan RegEx yang dipaparkan sebelumnya utamanya juga memunculkan beberapa kendala. Salah satu yang penting adalah kemungkinan adanya salah ketik (typo), dari pengguna bahasa yang terdapat dalam korpus seperti pada sitiran (1) berikut.

  1. “Kedua, kesepakatan hukuman terhadap hal-hal yang telah dipersiap kan. (ind-id_web_2015_3M:1276562)13.

Kata dipersiap pada kalimat (1) seharusnya tidak dipisahkan oleh spasi dengan akhiran -kan. Akhiran ini tidak ditangkap oleh rancangan RegEx karena dirancang agar komputer dapat mengetahui apa yang dimaksud dengan kata: serangkaian karakter alfabetis (atau alfanumerik dan strip) yang dipisahkan oleh spasi. MorphInd, akan tetapi, berhasil memecah dipersiap pada (1) menjadi di+per+siap<a>_VSP. Dalam hal ini, dipersiap pada (1) menjadi false positive, atau hasil yang berhasil (positive) ditangkap sesuai dengan rancangan RegEx, tapi tidak sesuai secara konseptual (false) sebagai pencontohan skema [per+AJ]. Akan tetapi, terdapat juga kemunculan dipersiap yang tampaknya secara penulisan dan konteks pemakaian mencontohkan skema [per+AJ], seperti pada sitiran (2) berikut:

  1. mengingat kegiatan ini adalah kegiatan internasional oleh karenanya harus dipersiap lebih matang agar dalam pelaksanaannya nanti berlangsung dengan baik. (ind_mixed_2012_1M:302874)

Bentuk aktif mempersiap juga berhasil didapat; sebagian besar di antaranya adalah salah ketik, atau mungkin lebih tepatnya sengaja dipisahkan karena tuntutan aturan (mis. di buku, dsb.) yang mesti memisahkan akhiran dengan kata dasarnya di ujung baris menggunakan strip "-" (lihat (3)).

  1. Namun walaupun hal-hal di atas belum terjadi, kita dapat mempersiap- kannya dahulu. (ind_web_2012_1M:619478)

Hanya sebagian kecil dari bentuk mempersiap yang dapat dianggap sebagai data pencontohan pola [per+AJ], seperti pada contoh (4) berikut.

  1. UAS kali ini saya tidak mengalami kesulitan, hal dikarenakan saya sudah mempersiap diri dengan seoptimal mungkin. (ind-id_web_2015_3M:1639943)

Sub-bagian ini ingin menampilkan fakta bahwa secanggih apapun tahapan dan piranti yang digunakan untuk mengolah data dalam korpus, terdapat kendala-kendala yang dapat ditemui. Kendala ini, seperti yang telah dicontohkan, bisa muncul dari (i) keadaan ortografis pemakaian bahasa di dalam korpus yang dikaji, misalnya salah ketik, atau (ii) sistem yang digunakan, seperti MorphInd, belum mencakup keseluruhan khasanah kata yang mencontohkan suatu skema konstruksional morfologis.

4 Hasil dan pembahasan

cxn_sum <- per_adj_base_combined %>% 
  .$n %>% 
  sum()
per_adj_type_freq <- dim(per_adj_base_combined)[1]
per_adj_hapax <- per_adj_base_combined %>% 
  filter(n==1) %>% 
  dim() %>% 
  .[1]
per_potential_prod <- per_adj_hapax/cxn_sum

4.1 Produktifitas terwujud dan produktifitas potensial konstruksi [per-+AJ]

Jumlah tipe kata yang mencontohkan suatu skema konstruksional morfologis menjadi salah satu penanda kadar produktifitas skema tersebut (Hilpert, 2014, hal. 81). Untuk skema [per-+AJ] secara umum, terdapat 171 tipe kata yang mencontohkan konstruksi tersebut dari 78.595 kekerapan kemunculan totalnya (lihat Tabel @ref(tab:per-semantics-table) di bawah). Kemunculan 171 tipe kata dari skema [per-+AJ] dapat dianggap rendah, mengingat besarnya ukuran korpus yang digunakan kali ini, yaitu berjumlah 180.769.204 kata.

Guna melengkapi pembahasan di atas, akan dipaparkan rasio produktifitas potensial dari skema [per-+AJ]. Rasio ini didasari atas jumlah hapax dari skema tersebut. Skema [per-+AJ] memiliki 58 tipe hapax (atau hanya 33.92%) dari 171 jumlah keseluruhan tipenya. Persentase jumlah hapax ini bisa dipandang cukup rendah. Selanjutnya, nilai perbandingan hapax/token (HTR) dari skema [per-+AJ] juga sangat kecil, yaitu 0.00074; jumlah tipe, hapax, dan HTR dari skema [per-+AJ] dapat mengindikasikan rendahnya produktifitas skema tersebut, paling tidak berdasarkan data korpus yang dikaji.

Terkait rendahnya kadar produktifitas formal skema [per-+AJ] ini, salah satu praanggapan yang bisa diujikan kembali pada penelitian selanjutnya adalah sebagai berikut. Terdapat kemungkinan bahwa konstruksi yang lebih produktif digunakan untuk mengungkapkan makna yang dibawa oleh [per-+AJ] (yaitu, ‘membuat X menjadi lebih AJ’) adalah konstruksi perifrastik, seperti konstruksi kausatif perifrastik [membuat X menjadi lebih AJ]. Penelitian selanjutnya dapat menguji anggapan ini dengan membandingkan persebaran jumlah ajektiva yang muncul dengan konstruksi kausatif perifrastik [membuat X menjadi lebih AJ] (dan variasinya) dan skema [per-+AJ]. Sub-bagian @ref(tipesemantis) berikut melihat lebih dalam produktifitas pada tataran skema bawahan semantis dari skema [per-+AJ], sekaligus menampilkan keseluruhan data tipe kata kerja [per-+AJ] di dalam korpus (lihat Tabel @ref(tab:per-semantics-table)).

4.2 Skema bawahan semantis skema konstruksional [per-+AJ]

per_adj_sem <- per_adj_base_combined %>% 
  group_by(sem) %>% 
  summarise(n=sum(n), 
            type=n_distinct(root)) %>%
  left_join(per_adj_base_combined %>% 
              filter(n==1) %>% 
              group_by(sem) %>% 
              summarise(hapax=n_distinct(root)), by = "sem") %>%
  mutate(est_type=type-hapax,
         ttr=round((type/n)*100, 2), 
         htr=round((hapax/n)*100, 2),
         htt=round((hapax/type)*100,2)) %>%
  arrange(desc(n))
per_adj_sem_type <- tibble()
for (i in seq_along(per_adj_sem$sem)) {
  type <- per_adj_base_combined %>% 
    filter(sem==per_adj_sem$sem[i]) %>% 
    mutate(words=str_c(str_c(.$root, " (", format(.$n, big.mark=".", decimal.mark=","), ")", sep=""), collapse="; "),
           words=str_replace_all(words, "(\\()\\s+", "\\1")) %>% 
    .$words %>% 
    unique()
  per_adj_sem_type <- bind_rows(per_adj_sem_type, tibble(sem=per_adj_sem$sem[i], word_types=type))
}
per_adj_sem <- left_join(per_adj_sem, per_adj_sem_type, by ="sem")
rm(per_adj_sem_type)

Sub-bagian ini akan memaparkan skema bawahan semantis konstruksi [per-+AJ] atas dasar tipe semantis kata dasar ajektivanya. Acuan untuk pengelompokan tipe semantis ajektiva tersebut mengacu pada kategori yang dibahas oleh Dixon (2004), beserta makalah-makalah di dalam Dixon dan Aikhenvald (2004)14.

Mengingat ulasan pada sub-bagian @ref(semanticsubschema) sebelumnya, keberagaman tipe semantis ajektiva yang muncul dengan konstruksi [per-+AJ] dapat menjadi dasar munculnya skematisasi lokal dari konstruksi [per-+AJ] pada tataran semantis. Dalam hal ini terdapat gugusan skema bawahan semantis (dari skema [per-+AJ] utama) yang saling berjejaring (Trousdale, 2016, hal. 69). Dari sudut pandang CxG, jejaring pengetahuan semantis seperti ini, yang terabstraksi dari pencontohan nyata suatu skema konstruksional, juga merupakan bagian dari khasanah kebahasaan seseorang.

Gambar @ref(fig:semanticsplot) menampilkan rentangan semantis skema bawahan konstruksi [per-+AJ]. Rentangan ini dikaitkan dengan distribusi (dalam persentase) (i) kekerapan, (ii) jumlah tipe kata, dan (iii) jumlah hapax dari masing-masing tipe skema bawahan semantis konstruksi [per-+AJ].

df <- per_adj_sem %>%
  select(n, type, hapax, sem) %>%
  mutate(`% kekerapan`=round(n/sum(n)*100, 2),
         `% jumlah tipe`=round(type/sum(type)*100, 2),
         `% jumlah hapax`=round(hapax/sum(hapax)*100, 2),
         sem=replace(sem, sem=='propensitas', 'kecenderungan manusia\n(*human propensity*)'),
         sem=replace(sem, sem=='ukuran', 'ukuran/dimensi'),
         sem=replace(sem, sem=='nilai', 'nilai (*value*)')) %>%
  rename(kekerapan=n, `jumlah tipe`=type, `jumlah hapax`=hapax) %>%
  select(sem, `% kekerapan`, `% jumlah tipe`, `% jumlah hapax`) %>%
  gather(key=dist, value=value, -sem) %>%
  arrange(dist)
df %>%
  ggplot(aes(x=reorder(sem, value), y=value, fill=dist)) +
  geom_col(position = "dodge") +
  facet_wrap(~dist) +
  coord_flip() +
  theme_bw() +
  scale_fill_grey(start = 0.1, end=0.8) +
  theme(legend.position = 'none', axis.title = element_text(size=11), axis.text = element_text(size=9)) +
  labs(x='Tipe semantis', y=NULL, fill=NULL)

Ada beberapa hal yang bisa diperoleh dari data pada Gambar @ref(fig:semanticsplot). Pertama, dari segi persentase kekerapan, skema [per-+AJ] utama memiliki beberapa skema semantis bawahan yang prototipikal (dalam arti sering muncul di dalam korpus secara keseluruhan) di antara gugusan skema bawahan semantis lainnya. Empat di antaranya adalah ciri_fisik (mis. kuat, parah), ukuran (luas, panjang), kesulitan (mudah, lancar), dan kecepatan (cepat, lambat). Tingginya kekerapan keempat dimensi semantis ini mengindikasikan bahwa keempat ciri semantis inilah yang derajatnya sering ditingkatkan berdasarkan makna skematis konstruksi kausatif [per-+AJ], yaitu ‘membuat X menjadi lebih AJ’. Dalam hal ini, skema [per-+AJ] dapat digambarkan sebagai suatu jejaring konstruksional (Booij, 2010, hal. 546-547; Trousdale, 2016, hal. 69-70).

Aspek kedua yang bisa dilihat adalah persentase jumlah tipe dan hapax masing-masing tipe semantis. Empat tipe semantis teratas dengan jumlah tipe terbanyak adalah ciri_fisik, kecenderungan manusia (kaya, cantik, bodoh), ukuran, dan nilai (buruk, indah, bagus). Jadi keempat skema bawahan semantis ini, berdasarkan pengukuran proporsi jumlah tipenya sendiri, dapat dikatakan paling produktif dibandingkan dengan skema bawahan semantis lainnya.

Kemudian, dari segi persentase jumlah hapax, skema bawahan kecenderungan manusia memiliki persentase jumlah hapax paling banyak, diikuti dengan ciri_fisik dan nilai. Hal ini dapat menunjukkan bahwa pemakaian skema bawahan semantis [per-+AJ] bertipe kecenderungan manusia lebih kerap diperluas berdasarkan analogi semantis skemanya (periksa Zeschel, 2010). Artinya, penutur mengingat tipe semantis ajektiva yang mencontohkan skema semantis bawahan kecenderungan manusia dan kemudian memperluas pemakaian skema tersebut dengan menggunakan ajektiva baru (yang bisa ditunjukkan oleh jumlah hapax-nya) bertipe semantis yang sama (dalam hal ini kecenderungan manusia).

Akan tetapi, ketika jumlah hapax masing-masing tipe semantis dikaitkan dengan kekerapannya dalam pengukuran hapax/token ratio (HTR), masing-masing tipe semantis tersebut tidak dapat dikatakan produktif. Hasil penghitungan ini ditampilkan pada Tabel @ref(tab:htr-semantics) berikut.

htr_sem <- per_adj_sem %>% arrange(desc(htt)) %>% 
  mutate(sem=replace(sem, sem=='propensitas', 'kecenderungan manusia (*human propensity*)'),
         sem=replace(sem, sem=='ukuran', 'ukuran/dimensi'),
         sem=replace(sem, sem=='nilai', 'nilai (*value*)'),
         sem=str_c("<span style='font-variant:small-caps;'>", sem, "</span>", sep=""),
         n=prettyNum(n, big.mark=".", decimal.mark=",")) %>% 
  select(sem, n, type, hapax, htr, htt) %>% 
  arrange(desc(hapax))
htr_sem %>%
  rename(`Tipe semantis`=sem, Kekerapan=n, `Jumlah tipe`=type, `Jumlah *hapax*`=hapax, `Rasio *hapax*/*token* (%)`=htr, `Rasio *hapax*/tipe (%)`=htt) %>%
  select(-`Rasio *hapax*/tipe (%)`) %>%
  knitr::kable(caption = "Rasio *hapax* berbanding kekerapan untuk skema bawahan semantis konstruksi [*per-*+AJ]; data diurutkan berdasarkan jumlah *hapax* terbanyak.", row.names = T)
Tipe semantis Kekerapan Jumlah tipe Jumlah hapax Rasio hapax/token (%)
1 kecenderungan manusia (human propensity) 3.713 33 18 0.48
2 ciri_fisik 24.299 36 10 0.04
3 nilai (value) 1.786 21 7 0.39
4 warna 2.559 11 5 0.20
5 ukuran/dimensi 23.697 22 4 0.02
6 usia 22 6 3 13.64
7 kesulitan 8.064 11 3 0.04
8 jumlah 2.629 6 2 0.08
9 posisi 297 7 2 0.67
10 kualifikasi 23 7 2 8.70
11 kekerapan 9 3 1 11.11
12 kecepatan 11.497 8 1 0.01

Hanya tipe semantis usia dan kekerapan yang nilai HTR-nya menunjukkan angka di atas 10%. Artinya, untuk tipe semantis usia, 13.64% dari total kekerapannya adalah hapax; narasi serupa digunakan untuk memahami nilai HTR tipe semantis lainnya (Stefanowitsch, 2017, hal. 284). Tabel @ref(tab:per-semantics-table) berikut menampilkan semua tipe ajektiva mencontohkan skema [per-+AJ] yang ditemukan di dalam korpus.

per_adj_sem %>%
  arrange(desc(hapax)) %>%
  mutate(sem=replace(sem, sem=='propensitas', 'kecenderungan manusia (*human propensity*)'),
         sem=replace(sem, sem=='ukuran', 'ukuran/dimensi'),
         sem=replace(sem, sem=='kualifikasi', 'kualifikasi (*qualification*)'),
         sem=replace(sem, sem=='nilai', 'nilai (*value*)'),
         sem=str_c("<span style='font-variant:small-caps;'>", sem, "</span>", sep=""),
         n=prettyNum(n, big.mark=".", decimal.mark=",")) %>%
  select(Semantik=sem, `Kekerapan (N)`=n, `Jumlah tipe`=type, `Jumlah tipe (kekerapan > 1)`=est_type, `Jumlah *hapax*`=hapax, `Ajektiva dasar`=word_types) %>%
  select(-`Jumlah tipe`, -`Kekerapan (N)`) %>%
  knitr::kable(caption="Seluruh pencontohan skema [*per-*+AJ] dan skema bawahan semantisnya; data diurutkan berdasarkan jumlah *hapax* terbanyak.", row.names = T)
Semantik Jumlah tipe (kekerapan > 1) Jumlah hapax Ajektiva dasar
1 kecenderungan manusia (human propensity) 15 18 kaya (2.632); cantik (974); kenan (26); bodoh (13); tegang (10); solek (7); kebal (6); elok (5); mahir (4); siap (4); sibuk (4); malu (3); miskin (3); hemat (2); luwes (2); agung (1); aktif (1); bebas (1); enggan (1); ganteng (1); garang (1); irit (1); kenyang (1); lincah (1); mapan (1); melarat (1); panik (1); peka (1); sopan (1); tangguh (1); tekun (1); terampil (1); yakin (1)
2 ciri_fisik 26 10 kuat (18.999); parah (1.672); kokoh (844); tajam (775); lemah (394); keruh (342); berat (305); halus (172); ringan (150); kukuh (99); runcing (94); longgar (92); manis (85); teguh (85); keras (77); lunak (58); lembut (10); panas (10); subur (10); licin (4); erat (2); gagah (2); hangat (2); konkret (2); kusut (2); segar (2); apik (1); berat-berat (1); bersih (1); dingin (1); hangus (1); kaku (1); kasar (1); kekar (1); sakit (1); teduh (1)
3 nilai (value) 14 7 buruk (1.236); indah (417); bagus (35); hebat (31); baik (20); mantap (15); murah (7); sengit (4); jelek (3); nyaman (3); keren (2); mahal (2); mewah (2); seru (2); cocok (1); dahsyat (1); enak (1); lezat (1); megah (1); mulia (1); unik (1)
4 warna 6 5 jelas (1.303); tegas (1.233); suram (7); terang (6); cerah (3); merah (2); gelap (1); kelam (1); marak (1); muram (1); putih (1)
5 ukuran/dimensi 18 4 luas (7.480); panjang (6.355); besar (2.593); kecil (1.899); ketat (1.805); dalam (1.276); sempit (720); pendek (658); lebar (589); tebal (216); tipis (73); kental (11); padat (7); kerdil (3); ramping (2); rapat (2); gemuk (2); lapang (2); rata (1); besar-besar (1); dangkal (1); kurus (1)
6 kesulitan 8 3 mudah (4.889); lancar (1.619); sulit (1.424); rumit (113); susah (6); sukar (4); runyam (4); sulit-sulit (2); pelik (1); sesat (1); ruwet (1)
7 usia 3 3 muda (14); modern (3); baru (2); anyar (1); kini (1); tua (1)
8 jumlah 4 2 banyak (2.594); lengkap (21); ringkas (7); sedikit (5); dikit (1); lebat (1)
9 posisi 5 2 tinggi (267); jauh (14); dekat (5); rendah (5); luar (4); kanan (1); lentik (1)
10 kualifikasi (qualification) 5 2 umum (11); sungguh (4); betul (2); salah (2); tepat (2); nyata (1); sah (1)
11 kecepatan 7 1 cepat (9.240); lambat (1.673); singkat (470); lama (80); gencar (25); lamban (6); kencang (2); deras (1)
12 kekerapan 2 1 jarang (4); sering (4); kerap (1)

Salah satu cara untuk melihat hubungan antara (i) jumlah tipe skema [per-+AJ] yang telah ada (perhatikan kolom Jumlah tipe (kekerapan > 1)) dan (ii) jumlah hapax dari masing-masing tipe semantis ajektivanya adalah melalui Analisis Korelasi (Zeschel, 2010, hal. 208)15. Analisis Korelasi menentukan arah, dan ukuran, hubungan suatu variabel X (mis. jumlah tipe suatu konstruksi yang telah ada) dengan variabel Y (mis. jumlah hapax konstruksi tersebut). Arah hubungannya bisa positif atau negatif; sedangkan ukurannya bisa (i) kecil ([+/-]0.1-0.3), (ii) sedang ([+/-]0.3-0.5), dan (iii) tinggi ([+/-]0.5-1) (Zeschel, 2010, hal. 208).

Untuk skema semantis bawahan [per-+AJ], terdapat hubungan positif dan kuat antara (i) jumlah tipe yang telah ada untuk skema semantis bawahan [per-+AJ] dan (ii) kata-kata hapax dari masing-masing tipe skema bawahan semantis tersebut (Korelasi Pearson’s = 0.644, p = 0.024). Dengan kata lain, terdapat kaitan antara (i) jumlah tipe kata kerja berskema [per-+AJ] dari suatu skema bawahan semantis dan (ii) perluasan/peningkatan penggunaan skema tipe semantis yang sama dengan bentukan kata baru. Artinya, penutur (i) mengingat tipe semantis ajektiva yang sudah ditemuinya digunakan dalam skema [per-+AJ] berskema bawahan semantis tertentu, dan kemudian (ii) memperluas pemakaian skema bawahan semantis tersebut (yang bisa ditunjukkan oleh jumlah hapax-nya) dengan menggunakan ajektiva baru bertipe semantis yang sama (periksa Zeschel, 2010).

Hubungan positif pada tataran skema bawahan semantis ini mendukung salah satu asumsi mendasar dari CxG bahwa khasanah kebahasaan seseorang tidak hanya menyimpan kriteria formal (bentuk), tapi juga semantis, dari suatu unit kebahasaan, dalam hal ini skema pembentukan kata. Pembahasan pada sub-bagian ini telah menunjukkan bahwa terdapat jejaring keumuman lokal (atas dasar skema semantis bawahan [dari suatu skema konstruksional utama]) yang muncul berdasarkan gugusan penggunaan jumlah tipe dan hapax ajektiva yang mirip secara semantis pada skema bawahan konstruksi [per-+AJ] (lihat Bybee, 2013, hal. 6-7). Keterpatrian jejaring gugusan semantis ini secara kuat dipicu oleh ajektiva-ajektiva yang sering muncul untuk suatu tipe semantis (perhatikan Gambar @ref(fig:cic-sem-plot) selanjutnya). Meskipun demikian, pemakaian skema [per-+AJ] beserta skema bawahan semantisnya dalam korpus BInd saat ini memiliki tingkat produktifitas yang rendah, baik yang terwujud (berdasarkan jumlah tipe) ataupun yang potensial (berdasarkan HTR).

4.3 Pencontohan Konstruksi Lazim

per_adj_CIC_limit <- round((per_adj_base_combined %>% 
                              .$n %>% 
                              sum()/dim(per_adj_base_combined)[1])*2)
type_cic <- per_adj_base_combined %>% 
  filter(n>=per_adj_CIC_limit) %>% 
  dim() %>% 
  .[1]
perc_cic <- round((type_cic/per_adj_type_freq)*100, 2)
cic_sum <- per_adj_base_combined %>% 
  filter(n>=per_adj_CIC_limit) %>% 
  .$n %>% 
  sum()
perc_cic_sum <- round((cic_sum/cxn_sum)*100, 2)
cic_words <- per_adj_base_combined %>% 
  filter(n>=per_adj_CIC_limit) %>% 
  mutate(cic=str_c(root, " (", format(n, big.mark=".", decimal.mark=","), ")", sep = ""), 
         cic=str_replace_all(cic, "(\\()\\s+", "\\1")) %>% 
  .$cic %>% 
  str_c(collapse='; ')
per_cic_tibble <- tribble(~`Jumlah tipe [*per-*+AJ]`, ~`Jumlah tipe CIC`, ~`% tipe CIC`, ~`Kekerapan [*per-*+AJ]`, ~`Kekerapan CIC`, ~`% Kekerapan CIC`,
        #----/-------------------/---------------/------------------------------/----------------/-------------------
        per_adj_type_freq, type_cic, perc_cic, format(cxn_sum, big.mark = ".", decimal.mark = ","), format(cic_sum, big.mark = ".", decimal.mark = ","), perc_cic_sum
        )

Perihal terakhir yang ingin diulas di dalam makalah ini adalah kekerapan pencontohan spesifik skema [per-+AJ] yang dapat menunjukkan tingkat keterpatrian dan kelaziman pencontohan tersebut. Pertanyaannya adalah bagaimana cara menentukan (ambang batas) derajat kelaziman suatu kata dibandingkan dengan kata lainnya dari suatu konstruksi?

Vergara Wilson (2014, hal. 71-73) mengajukan cara mengukur pencontohan lazim dari suatu konstruksi (conventionalised instances of constructions; selanjutnya disingkat CIC). Karena menentukan kelaziman suatu bentukan kata dari suatu konstruksi cenderung bersifat subjektif dan relatif, pengukuran ambang batas CIC (berdasarkan data (bukan intuisi semata)) dapat menjadi tolak ukur awal ketika membandingkan kata-kata mana dari suatu skema konstruksional morfologis yang relatif lebih lazim, dan mana yang tidak begitu lazim. Data seperti ini secara umum bisa dimanfaatkan sebagai bahan pengajaran suatu konstruksi morfologis lazim dan pencontohannya di dalam BInd untuk penutur asing.

Rumus untuk mengukur nilai ambang batas CIC adalah dengan membagi (i) kekerapan kemunculan keseluruhan konstruksinya (token), dalam hal ini kemunculan total skema [per-+AJ] pada korpus, dengan (ii) jumlah tipenya (type), yaitu jumlah kata-kata yang mencontohkan skema [per-+AJ] pada korpus; nilai pembagian tersebut kemudian dikalikan 2 (Vergara Wilson, 2014, hal. 73). Perhatikan rumus ambang batas CIC berikut:

\(CIC = (token/tipe) * 2\)

Hasil perhitungan dari rumus di atas dibulatkan ke atas/bawah, tergantung kedekatan bilangan setelah koma dengan bilangan keseluruhannya. Menurut Vergara Wilson (2014, hal. 73), praanggapan yang mendasari rumus tersebut adalah sebagai berikut. Apabila suatu pencontohan skema [per-+AJ], seperti perkuat, muncul dua kali lebih banyak dari rata-rata kekerapan kemunculannya, seperti ditunjukkan dari rasio \(token/tipe\)-nya, bentukan kata tersebut dapat dianggap lazim.

Ambang batas CIC untuk skema [per-+AJ] adalah 919, yang merupakan hasil dari (78.595 (token)/171 (type) *2). Jadi, tipe pencontohan skema [per-+AJ] yang kekerapan kemunculannya sama dengan atau lebih besar dari 919 dapat dikatakan lazim/konvensional (Vergara Wilson, 2014, hal. 73). Jumlah tipe CIC pada data skema [per-+AJ] adalah 19 jenis kata, seperti yang ditampilkan pada kolom keempat pada Tabel @ref(tab:cic-word-types) berikut.

tibble(`Rasio kekerapan/tipe`=(per_adj_base_combined %>% 
                                 .$n %>% 
                                 sum()/dim(per_adj_base_combined)[1]),
       `Ambang batas CIC`= per_adj_CIC_limit,
       `Jumlah tipe CIC`=type_cic,
       `Pencontohan CIC skema [*per-*+AJ]`=cic_words) %>%
  knitr::kable(caption="Kata-kata lazim pencontohan skema [*per-*+AJ].")
Rasio kekerapan/tipe Ambang batas CIC Jumlah tipe CIC Pencontohan CIC skema [per-+AJ]
459.6199 919 19 kuat (18.999); cepat (9.240); luas (7.480); panjang (6.355); mudah (4.889); kaya (2.632); banyak (2.594); besar (2.593); kecil (1.899); ketat (1.805); lambat (1.673); parah (1.672); lancar (1.619); sulit (1.424); jelas (1.303); dalam (1.276); buruk (1.236); tegas (1.233); cantik (974)

Angka di dalam tanda kurung pada kolom Pencontohan CIC skema [per-+AJ] menunjukkan kekerapan kemunculan kata tersebut. Gambar @ref(fig:cic-sem-plot) berikut menempatkan persebaran tipe kata lazim pada Tabel @ref(tab:cic-word-types) sebelumnya berdasarkan tipe semantisnya.

df <- per_adj_base_combined %>% 
  filter(n>=per_adj_CIC_limit) %>% 
  group_by(sem) %>% 
  mutate(cic_word=str_c(str_c(root, " (", prettyNum(n, big.mark=".", decimal.mark=","), ")", sep=""), collapse="; ")) %>%
  ungroup() %>%
  mutate(sem=replace(sem, sem=='propensitas', 'kecenderungan manusia\n(*human propensity*)'),
         sem=replace(sem, sem=='ukuran', 'ukuran/dimensi'),
         sem=replace(sem, sem=='nilai', 'nilai (*value*)')) %>%
  group_by(sem, cic_word) %>% 
  summarise(n=sum(n))
df %>%
  ggplot(aes(x=reorder(sem, n),y=n)) + 
  geom_col(fill="black") + 
  coord_flip() +
  geom_text(aes(label=cic_word), 
            hjust=if_else(str_detect(df$cic_word, "luas|kuat"), 1.05, -0.1), 
            size=3, 
            colour=if_else(str_detect(df$cic_word, "luas|kuat"), "white", "black")) +
  theme_bw() +
  theme(axis.title = element_text(size=11), axis.text = element_text(size=10)) +
  labs(x='Tipe semantis', y='Kekerapan', fill=NULL)

Gambar @ref(fig:cic-sem-plot) menunjukkan bahwa ukuran dan ciri_fisik adalah tipe semantis yang kerap muncul di antara kelompok kata-kata yang bisa dianggap lazim untuk skema [per-+AJ]. Hal ini dipicu oleh tingginya kekerapan tipe yang mencontohkan kedua tipe semantis tersebut. Ukuran tidak hanya tinggi dalam hal kekerapannya, tapi juga memiliki jumlah tipe lazim terbanyak, jika dibandingkan utamanya dengan ciri_fisik, yang kekerapannya didominasi oleh satu ajektiva, yaitu kuat. Selanjutnya, masing-masing kata CIC dari tiap-tiap tipe semantis tersebut dapat dianggap sebagai anggota ajektiva prototipikal yang umum mencontohkan skema bawahan semantis [per-+AJ] pada Gambar @ref(fig:cic-sem-plot). Tabel @ref(tab:cic-cxn) selanjutnya menggambarkan tingkat keterpatrian skema [per-+AJ] secara lebih luas dalam kaitannya dengan kekerapan pencontohan lazimnya.

per_cic_tibble %>%
  knitr::kable(caption="Persentase jumlah tipe dan kekerapan skema [*per-*+AJ] yang melampaui ambang batas CIC dalam kaitannya dengan keseluruhan jumlah tipe dan kekerapan skema [*per-*+AJ].")
Jumlah tipe [per-+AJ] Jumlah tipe CIC % tipe CIC Kekerapan [per-+AJ] Kekerapan CIC % Kekerapan CIC
171 19 11.11 78.595 70.896 90.2

Tabel @ref(tab:cic-cxn) dapat dipahami sebagai berikut. Dari total 171 tipe kata-kata pencontohan skema [per-+AJ], hanya 11.11% (yaitu 19 tipe) yang dapat dikatakan cukup lazim; hal ini bersifat relatif karena adanya perbedaan pengalaman setiap penutur BInd terhadap kata-kata yang ada di bawah atau di atas ambang batas CIC pada korpus ini16. Meskipun proporsi 11.11% untuk jumlah tipe CIC ini cukup kecil, yang perlu diperhatikan adalah 90.2% kekerapan kemunculan skema [per-+AJ] di keseluruhan korpus terdiri dari pengulangan ke-19 tipe-tipe CIC tersebut. Dari sudut pandang linguistik bebasis penggunaan dan CxG, tingginya kekerapan dari masing-masing pencontohan spesifik skema [per-+AJ], seperti yang termasuk di dalam tipe CIC pada Tabel @ref(tab:cic-word-types) sebelumnya, akan (i) lebih menguatkan representasi kata-kata spesifik tersebut dibandingkan skema konstruksionalnya secara umum, ataupun skema bawahan semantisnya, dan (ii) cenderung tidak berkontribusi terhadap produktifitas skema konstruksionalnya (periksa Bybee, 2013, hal. 9). Tingginya persentase kekerapan dari skema [per-+AJ] yang terdiri atas pengulangan tipe kata CIC tersebut mungkin menjadi pemicu rendahnya rasio produktifitas dari skema [per-+AJ], karena mengecilkan jumlah tipe serta rasio hapax-berbanding-kekerapan skemanya secara menyeluruh.

5 Penutup

Makalah ini telah membahas unsur penggunaan skema konstruksional kata kerja kausatif [per-+AJ] di BInd. Unsur-unsur ini meliputi unsur formal dan semantis. Pada tataran formal, makalah ini menemukenali jumlah tipe, jumlah hapax dan kekerapan dari tipe-tipe kata yang mencontohkan skema konstruksional tersebut. Berdasarkan jumlah tipe dan hapax-nya secara umum, skema [per-+AJ] dapat dikatakan tidak begitu produktif untuk menghasilkan kata-kata baru. Pembahasan lebih rinci terkait unsur semantis skema [per-+AJ] berdasarkan tipe semantis ajektiva dasarnya juga dibahas pada makalah ini. Pembahasan pada tataran semantis ini menunjukkan bahwa skema bawahan semantis skema [per-+AJ] juga tidak begitu produktif setakat ini, terlepas dari ditemukannya hubungan positif dan kuat antara perluasan suatu skema bawahan semantis (atas dasar hapax-nya) dan jumlah tipe dari skema bawahan tersebut yang telah ada sebelumnya.

Selanjutnya, makalah ini juga menunjukkan (cara menentukan) kata-kata yang lazim muncul di dalam korpus sebagai pencontohan skema [per-+AJ] secara umum, beserta tipe semantisnya. Data ini bisa digunakan sebagai masukan untuk pengajaran BInd bagi penutur asing terkait pencontohan khas (prototipikal) dari suatu konstruksi morfologis di dalam korpus. Terdapat beberapa unsur pemakaian dari skema [per-+AJ] yang tidak dibahas pada makalah ini, tapi telah disebutkan sekilas pada sub-bagian @ref(sneddon). Namun demikian, makalah ini diharapkan dapat memperluas pemahaman pemerhati dan peneliti BInd, khususnya terkait beberapa unsur pemakaian skema konstruksional morfologis [per-+AJ] di BInd. Akhir kata, makalah ini diharapkan dapat memperkaya khasanah kajian morfologi di BInd yang telah ada sebelumnya, dengan menyisipkan (i) unsur metodologis termutakhir dari Linguistik Korpus dan (ii) wawasan linguistik teoretis kontemporer berdasarkan penggunaan, seperti Tatabahasa Konstruksional.

Daftar pustaka

Arka, I. W., Dalrymple, M., Mistica, M., Mofu, S., Andrews, A. D., & Simpson, J. (2009). A linguistic and computational morphosyntactic analysis for the applicative -i in Indonesian. In M. Butt & T. H. King (Eds.), Proceedings of the LFG09 Conference. CSLI Publications. Retrieved from http://csli-publications.stanford.edu/

Arka, I. W., Manurung, R., & Mistica, M. (2009). Reduplication and Grammar Engineering for Indonesian. Presented at the International Symposium on Malay and Indonesian Linguistics (ISMIL) 13, Mataram, Lombok-Indonesia.

Baayen, R. H. (2008). Analyzing linguistic data: A practical introduction to statistics using R. Cambridge, UK ; New York: Cambridge University Press.

Baayen, R. H. (2009). Corpus linguistics in morphology: Morphological productivity. In Anke Lüdeling & Merja Kytö (Eds.), Corpus linguistics: An international handbook (Vol. 2, pp. 899–919). Berlin: Mouton de Gruyter.

Biemann, C., Heyer, G., Quasthoff, U., & Richter, M. (2007). The Leipzig Corpora Collection: Monolingual corpora of standard size. In M. Davies, P. Rayson, S. Hunston, & P. Danielsson (Eds.), Proceedings of the Corpus Linguistics Conference. University of Birmingham, UK. Retrieved from http://ucrel.lancs.ac.uk/publications/CL2007/paper/190_Paper.pdf

Booij, G. (2010). Construction Morphology. Language and Linguistics Compass, 4(7), 543–555. doi:10.1111/j.1749-818X.2010.00213.x

Booij, G. (2017). Construction Morphology. Oxford Research Encyclopedias. doi:10.1093/acrefore/9780199384655.013.254

Bybee, J. L. (2010). Language, usage and cognition. Cambridge: Cambridge University Press.

Bybee, J. L. (2013). Usage-based theory and exemplar representations of constructions. In T. Hoffmann & G. Trousdale (Eds.), The Oxford handbook of Construction Grammar. Oxford: Oxford University Press. doi:10.1093/oxfordhb/9780195396683.013.0004

Croft, W. (2001). Radical construction grammar: Syntactic theory in typological perspective. Oxford: Oxford University Press.

Dixon, R. M. W. (2004). Adjective classes in typological perspective. In R. M. W. Dixon & A. Y. Aikhenvald (Eds.), Adjective classes: A cross-linguistic typology (pp. 1–49). Oxford: Oxford University Press.

Dixon, R. M. W., & Aikhenvald, A. Y. (2004). Adjective classes: A cross-linguistic typology. Oxford: Oxford University Press.

Glynn, D., & Fischer, K. (Eds.). (2010). Quantitative methods in cognitive semantics: Corpus-driven approaches. Berlin: Mouton de Gruyter.

Goldberg, A. E. (2006). Constructions at work: The nature of generalization in language. Oxford ; New York: Oxford University Press.

Goldberg, A. E. (2013). Constructionist approaches. In T. Hoffmann & G. Trousdale (Eds.), The Oxford Handbook of Construction Grammar. Oxford: Oxford University Press. doi:10.1093/oxfordhb/9780195396683.013.0002

Gries, S. T. (2009). Quantitative Corpus Linguistics with R: A Practical Introduction. New York: Routledge.

Gries, S. T. (2013a). Data in construction grammar. In T. Hoffmann & G. Trousdale (Eds.), The Oxford handbook of Construction Grammar. Oxford: Oxford University Press. doi:10.1093/oxfordhb/9780195396683.013.0006

Gries, S. T. (2013b). Statistics for linguistics with R: A practical introduction (2 nd). Berlin: Mouton de Gruyter.

Hilpert, M. (2013). Constructional change in English: Developments in allomorphy, word formation, and syntax. Cambridge: Cambridge University Press.

Hilpert, M. (2014). Construction grammar and its application to English. Edinburgh: Edinburgh University Press.

Hoffmann, T., & Trousdale, G. (Eds.). (2013). The Oxford handbook of Construction Grammar. Oxford: Oxford University Press.

Janda, L. A. (2013a). Quantitative methods in Cognitive Linguistics: An introduction. In L. A. Janda (Ed.), Cognitive Linguistics: The quantitative turn (pp. 1–32). Berlin: Mouton de Gruyter.

Janda, L. A. (Ed.). (2013b). Cognitive linguistics: The quantitative turn. Berlin: Mouton de Gruyter.

Langacker, R. W. (2013). Essentials of cognitive grammar. Oxford: Oxford University Press.

Larasati, S. D., Kuboň, V., & Zeman, D. (2011). Indonesian Morphology Tool (MorphInd): Towards an Indonesian Corpus. In Systems and Frameworks for Computational Morphology (pp. 119–129). Springer, Berlin, Heidelberg. doi:10.1007/978-3-642-23138-4_8

Levshina, N. (2015). How to do Linguistics with R: Data exploration and statistical analysis. John Benjamins Publishing Company.

Primahadi Wijaya R., G. (2013). Metonymy in Indonesian Prefixal Word-formation. Lingual: Journal of Language and Culture, 1, 64–81. doi:10.26180/5b6e403959120

Quasthoff, U., & Goldhahn, D. (2013). Indonesian corpora (Technical report series on corpus building No. 7). Leipzig, Germany: Abteilung Automatische Sprachverarbeitung, Institut für Informatik, Universität Leipzig. Retrieved from http://asvdoku.informatik.uni-leipzig.de/corpora/data/uploads/corpus-building-vol7-ind.pdf

R Core Team. (2016). R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. Retrieved from https://www.R-project.org/

Sneddon, J. N., Adelaar, A., Djenar, D. N., & Ewing, M. C. (2010). Indonesian reference grammar (2 nd). Crows Nest, New South Wales, Australia: Allen & Unwin.

Stefanowitsch, A. (2017). Corpus linguistics: A guide to the methodology. Book Manuscript, Freie Universität Berlin: Book manuscript. Retrieved from http://stefanowitsch.net/clm/clmbook-draft.pdf

Trousdale, G. (2016). Construction grammar. In M. Kytö & P. Pahta (Eds.), The Cambridge handbook of English historical linguistics (pp. 65–78). Cambridge: Cambridge University Press.

Vergara Wilson, D. C. (2014). Categorization and constructional change in Spanish expressions of ’becoming’. Leiden ; Boston: Brill.

Wickham, H., & Grolemund, G. (2017). R for Data Science. Canada: O’Reilly. Retrieved from http://r4ds.had.co.nz/

Yoon, J., & Gries, S. T. (Eds.). (2016). Corpus-based approaches to Construction Grammar. Amsterdam ; Philadelphia: John Benjamins Publishing Company.

Zeschel, A. (2010). Exemplars and analogy: Semantic extension in constructional networks. In Dylan Glynn & Kerstin Fischer (Eds.), Quantitative methods in cognitive semantics: Corpus-driven approaches (pp. 201–219). Berlin: Mouton de Gruyter.


  1. Makalah ini diajukan sebagai bagian dari buku persembahan dalam rangka purnabakti Prof. Dr. Aron Meko Mbete. Pelajaran berharga yang penulis petik ketika menjadi mahasiswa Prof. Aron adalah semangat untuk mengasyiki linguistik dan berinovasi tentang hal-hal baru, seperti yang beliau wujudkan dalam mengembangkan Ekolinguistik di Indonesia. Apabila makalah ini sedikitnya dianggap mencerminkan semangat Prof. Aron tersebut, salah satu tujuan makalah ini telah tercapai.

  2. Penulisan makalah ini didanai sepenuhnya oleh Monash International Postgraduate Research Scholarships (MIPRS) dan Monash Graduate Scholarships (MGS) yang diberikan kepada penulis pertama ketika menyelesaikan pendidikan doktoral di Monash University, Australia.

  3. Lisensi untuk R Notebook ini adalah Creative Common License CC BY-NC-SA 4.0. Untuk mengunduh .Rmd file dari notebook ini, klik tombol Code di pojok kanan atas kemudian pilih Download Rmd.

  4. Baayen (2009, hal. 905-906) mengungkapkan bahwa hapax legomena tidak bisa disamakan dengan neologisme, atau kata baru. Di satu sisi, sekumpulan hapax bisa mengandung neologisme; di sisi lain, hapax di dalam suatu korpus yang cukup besar pun bisa merupakan kata-kata yang telah ada sejak lama, tapi hanya kebetulan muncul sekali di dalam korpus yang dikaji.

  5. Atau 0-100% apabila nilai HTR diubah menjadi persentase.

  6. Makalah ini ditulis dan dirampungkan di dalam RStudio menggunakan modul Rmarkdown. Kode pemrograman, berkas data, dan berkas naskah Rmarkdown makalah ini dapat diunduh melalui figshare: https://doi.org/10.4225/03/5a0627de02453.

  7. Ulasan mendalam termutakhir tentang beragam cabang Tatabahasa Konstruksional dapat diperoleh melalui Hoffmann dan Trousdale (2013)

  8. Periksa pranala berikut: http://corpora2.informatik.uni-leipzig.de/download.html

  9. Hal ini untuk mengantisipasi kemunculan kata di awal kalimat yang diawali dengan huruf kapital (mis. Mempererat).

  10. Hal ini dilakukan untuk mengantisipasi adanya kata dasar yang diawali huruf r namun tidak diluluhkan dengan r pada awalan per--nya.

  11. Tanda '-' diikutkan untuk menangkap kemungkinan adanya reduplikasi, seperti diperbesar-besar yang benar-benar muncul dalam korpus.

  12. Penulis berterima kasih kepada Karlina Denistia (Eberhard Karls University of Tübingen, Jerman) yang dengan senang hati berbagi contoh menjalankan MorphInd melalui R.

  13. Pada setiap akhir contoh, informasi di dalam tanda kurung berisi (i) nama berkas korpus dan (ii) baris kalimat keberapa pemakaian suatu kata ditemukan; keduanya dipisahkan oleh tanda “:”.

  14. Karena semua tipe ajektivanya ditampilkan dalam Tabel @ref(tab:per-semantics-table) di bawah, pembaca dapat tidak setuju terhadap beberapa pengelompokan yang penulis ajukan; masukan untuk pengelompokan tersebut terkait penelitian serupa ke depannya sangat diharapkan.

  15. Mengikuti Zeschel (2010, hal. 208), metode Analisis Korelasi yang digunakan adalah Pearson’s product moment correlation coefficient. Penghitungan dilakukan dengan fungsi cor.test() yang ada dalam R.

  16. Dengan kata lain, bisa saja terdapat kata-kata yang juga dianggap lazim dan seharusnya masuk (secara intuisi) ke dalam kelompok CIC; yang perlu diperhatikan adalah rumus CIC digunakan untuk dapat mengukur secara lebih empiris berdasarkan data kuantitatif yang diperoleh dari korpus.

LS0tCnRpdGxlOiAiTWVtcGVydGVtdWthbiBNb3Jmb2xvZ2kgZGFuIExpbmd1aXN0aWsgS29ycHVzOlxuS2FqaWFuIEtvbnN0cnVrc2kgUGVtYmVudHVrYW4ga2F0YSBrZXJqYSBbKnBlciorQWpla3RpdmFdIGRhbGFtIEJhaGFzYSBJbmRvbmVzaWFeW01ha2FsYWggaW5pIGRpYWp1a2FuIHNlYmFnYWkgYmFnaWFuIGRhcmkgYnVrdSBwZXJzZW1iYWhhbiBkYWxhbSByYW5na2EgcHVybmFiYWt0aSBQcm9mLiBEci4gQXJvbiBNZWtvIE1iZXRlLiBQZWxhamFyYW4gYmVyaGFyZ2EgeWFuZyBwZW51bGlzIHBldGlrIGtldGlrYSBtZW5qYWRpIG1haGFzaXN3YSBQcm9mLiBBcm9uIGFkYWxhaCBzZW1hbmdhdCB1bnR1ayBtZW5nYXN5aWtpIGxpbmd1aXN0aWsgZGFuIGJlcmlub3Zhc2kgdGVudGFuZyBoYWwtaGFsIGJhcnUsIHNlcGVydGkgeWFuZyBiZWxpYXUgd3VqdWRrYW4gZGFsYW0gbWVuZ2VtYmFuZ2thbiBFa29saW5ndWlzdGlrIGRpIEluZG9uZXNpYS4gQXBhYmlsYSBtYWthbGFoIGluaSBzZWRpa2l0bnlhIGRpYW5nZ2FwIG1lbmNlcm1pbmthbiBzZW1hbmdhdCBQcm9mLiBBcm9uIHRlcnNlYnV0LCBzYWxhaCBzYXR1IHR1anVhbiBtYWthbGFoIGluaSB0ZWxhaCB0ZXJjYXBhaS5dIgphdXRob3I6ICJHZWRlIFByaW1haGFkaSBXaWpheWEgUmFqZWcgZGFuIEkgTWFkZSBSYWplZyIKZGF0ZTogCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ193aWR0aDogNgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICBib29rZG93bjo6aHRtbF9kb2N1bWVudDI6CiAgICB0b2M6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogIGJvb2tkb3duOjp3b3JkX2RvY3VtZW50MjoKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfd2lkdGg6IDYKYmlibGlvZ3JhcGh5OiAnTXlfTGlicmFyeS5iaWInCmxpbmstY2l0YXRpb25zOiB0cnVlCmNzbDogJ2FwYS1vbGQtZG9pLXByZWZpeC5jc2wnCi0tLQoKYGBge3IgZ2xvYmFsLW9wdGlvbnMsIGluY2x1ZGU9VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBnbG9iYWwgb3B0aW9uIGNodW5jawprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoPTYsIAogICAgICAgICAgICAgICAgICAgICAgZmlnLmFzcD0wLjYxOCwKICAgICAgICAgICAgICAgICAgICAgIGZpZy5yZXRpbmEgPSAyLAogICAgICAgICAgICAgICAgICAgICAgZHBpPTMwMCwKICAgICAgICAgICAgICAgICAgICAgIGVjaG89VFJVRSkKb3B0aW9ucyhmaWdjYXAucHJlZml4ID0gIkZpZ3VyZSIsIGZpZ2NhcC5zZXAgPSAiOiIsIGZpZ2NhcC5wcmVmaXguaGlnaGxpZ2h0ID0gIioqIikKb3B0aW9ucyh0YWJjYXAucHJlZml4ID0gIlRhYmxlIiwgdGFiY2FwLnNlcCA9ICI6IiwgdGFiY2FwLnByZWZpeC5oaWdobGlnaHQgPSAiKioiKQoKIyBsb2FkIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBhbmQgZGF0YQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkodGlkeXZlcnNlKSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KHJlYWR4bCkpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShzdHJpbmdyKSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGJvb2tkb3duKSkKbG9hZCgnbWVtcGVyX2xlaXB6aWdfbWFpbl9kYXRhLlJEYXRhJykKYGBgCgoKPHN1cD4mY29weTs8L3N1cD4gMjAxNyBbR2VkZSBQcmltYWhhZGkgV2lqYXlhIFJhamVnXShodHRwczovL2ZpZ3NoYXJlLmNvbS9hdXRob3JzL0dlZGVfUHJpbWFoYWRpX1dpamF5YV9SYWplZy8xMjM0NzQ5KSAKPGEgaXRlbXByb3A9InNhbWVBcyIgY29udGVudD0iaHR0cHM6Ly9vcmNpZC5vcmcvMDAwMC0wMDAyLTIwNDctODYyMSIgaHJlZj0iaHR0cHM6Ly9vcmNpZC5vcmcvMDAwMC0wMDAyLTIwNDctODYyMSIgdGFyZ2V0PSJvcmNpZC53aWRnZXQiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcDsiPjxpbWcgc3JjPSJodHRwczovL29yY2lkLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL2ltYWdlcy9vcmNpZF8xNngxNi5wbmciIHN0eWxlPSJ3aWR0aDoxZW07bWFyZ2luLXJpZ2h0Oi41ZW07IiBhbHQ9Ik9SQ0lEIGlEIGljb24iPm9yY2lkLm9yZy8wMDAwLTAwMDItMjA0Ny04NjIxPC9hPgo8YnI+W0kgTWFkZSBSYWplZ10oaHR0cHM6Ly9maWdzaGFyZS5jb20vYXV0aG9ycy9JX01hZGVfUmFqZWcvNDA1MjM3NykgIDxhIGl0ZW1wcm9wPSJzYW1lQXMiIGNvbnRlbnQ9Imh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMS04OTg5LTAyMDMiIGhyZWY9Imh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMS04OTg5LTAyMDMiIHRhcmdldD0ib3JjaWQud2lkZ2V0IiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij48aW1nIHNyYz0iaHR0cHM6Ly9vcmNpZC5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9pbWFnZXMvb3JjaWRfMTZ4MTYucG5nIiBzdHlsZT0id2lkdGg6MWVtO21hcmdpbi1yaWdodDouNWVtOyIgYWx0PSJPUkNJRCBpRCBpY29uIj5vcmNpZC5vcmcvMDAwMC0wMDAxLTg5ODktMDIwMzwvYT4KClNpdGlyYW46CgpSYWplZywgRy4gUC4gVy4sICYgUmFqZWcsIEkuIE0uICgyMDE3KS4gTWVtcGVydGVtdWthbiBtb3Jmb2xvZ2kgZGFuIGxpbmd1aXN0aWsga29ycHVzOiBLYWppYW4ga29uc3RydWtzaSBwZW1iZW50dWthbiBrYXRhIGtlcmphIFsqcGVyKi0rQWpla3RpdmFdIGRhbGFtIEJhaGFzYSBJbmRvbmVzaWEuIEluIEkuIE4uIFN1ZGlwYSAmIE0uIFMuIFNhdHlhd2F0aSAoRWQuKSwgKlJvbmEgQmFoYXNhOiBCdWt1IHBlcnNlbWJhaGFuIGtlcGFkYSBQcm9mLiBEci4gQXJvbiBNZWtvIE1iZXRlIG1lbWFzdWtpIG1hc2EgcHVybmF0dWdhcyogKHBwLiAyODjigJMzMjcpLiBEZW5wYXNhciwgQmFsaSwgSW5kb25lc2lhOiBTd2FzdGEgTnVsdXMuIGh0dHBzOi8vZG9pLm9yZy8xMC40MjI1LzAzLzVhMDYyN2RlMDI0NTMKCjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9nZWRlcmFqZWcvbWVtcGVydGVtdWthbl9tb3Jmb2xvZ2lfZGFuX2xpbmd1aXN0aWtfa29ycHVzIj48aW1nIHNyYz0iaHR0cHM6Ly9wbmcuaWNvbnM4LmNvbS9pb3MtZ2x5cGhzLzUwLzAwMDAwMC9naXRodWIucG5nIj48L2ltZz48L2E+CgotLS0tLS0tLS0tLS0tLS0tCgojIEFic3RyYWN0IHstfQoKVGhpcyBjb250cmlidXRpb24gcHJlc2VudHMgYSBjb3JwdXMtYmFzZWQsIGNvbnN0cnVjdGlvbmFsIGFjY291bnQgb24gb25lIG9mIHRoZSBkZXJpdmF0aW9uYWwgbW9ycGhvbG9naWNhbCBjb25zdHJ1Y3Rpb25zIGZvciBjYXVzYXRpdmUgdHJhbnNpdGl2ZSB2ZXJicyBpbiBJbmRvbmVzaWFuLCBpLmUuIFsqcGVyLSorQURKXSBzY2hlbWE7IHRoZSBzY2hlbWEgZXhwcmVzc2VzIGEgc2NoZW1hdGljIG1lYW5pbmcgb2YgJ3RvIGNhdXNlIHRoZSBvYmplY3QgdG8gaGF2ZSBtb3JlIG9mIHRoZSBjaGFyYWN0ZXJpc3RpY3MgZGVub3RlZCBieSB0aGUgYWRqZWN0aXZhbCByb290Jy4gQmFzZWQgb24gdGhlICpJbmRvbmVzaWFuIExlaXB6aWcgQ29ycG9yYSosIHRoaXMgc3R1ZHkgc2hvd3MgdGhhdCB0aGUgc2NoZW1hIGV4aGliaXRzIGEgbG93IHByb2R1Y3Rpdml0eSwgYmFzZWQgb24gaXRzIHR5cGUgZnJlcXVlbmN5IGFuZCAqaGFwYXgvdG9rZW4gcmF0aW8qLiBJdHMgbG93IHByb2R1Y3Rpdml0eSBpcyBmdXJ0aGVyIGV2aWRlbmNlZCBhdCB0aGUgbGV2ZWwgb2YgdGhlIHNlbWFudGljIHN1YnNjaGVtYXMgb2YgdGhlIGNvbnN0cnVjdGlvbiwgZGVzcGl0ZSBpZGVudGlmeWluZyBhIHNpZ25pZmljYW50bHkgc3Ryb25nIGFuZCBwb3NpdGl2ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBlc3RhYmxpc2hlZCB0eXBlcyBwZXIgc2VtYW50aWMgc3Vic2NoZW1hcyBhbmQgdGhlaXIgKmhhcGF4Ki4gRGF0YSBmb3IgdGhlIGNvbnZlbnRpb25hbGlzZWQsIHByb3RvdHlwaWNhbCBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc2NoZW1hLCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBmb3JlaWduIGxlYXJuZXJzIG9mIEluZG9uZXNpYW4sIGlzIGFsc28gcHJlc2VudGVkLiAgCgoqKktleXdvcmRzKio6ICpJbmRvbmVzaWFuKiwgKkNvcnB1cyBMaW5ndWlzdGljcyosICpVc2FnZS1iYXNlZCBMaW5ndWlzdGljcyosICpDb25zdHJ1Y3Rpb24gR3JhbW1hciosICpDb25zdHJ1Y3Rpb24gTW9ycGhvbG9neSosICpNb3JwaG9sb2dpY2FsIHByb2R1Y3Rpdml0eSoKCi0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgUGVuZ2FudGFyXltQZW51bGlzYW4gbWFrYWxhaCBpbmkgZGlkYW5haSBzZXBlbnVobnlhIG9sZWggKk1vbmFzaCBJbnRlcm5hdGlvbmFsIFBvc3RncmFkdWF0ZSBSZXNlYXJjaCBTY2hvbGFyc2hpcHMqIChNSVBSUykgZGFuICpNb25hc2ggR3JhZHVhdGUgU2Nob2xhcnNoaXBzKiAoTUdTKSB5YW5nIGRpYmVyaWthbiBrZXBhZGEgcGVudWxpcyBwZXJ0YW1hIGtldGlrYSBtZW55ZWxlc2Fpa2FuIHBlbmRpZGlrYW4gZG9rdG9yYWwgZGkgTW9uYXNoIFVuaXZlcnNpdHksIEF1c3RyYWxpYS5dIHsjaW50cm99CgpNYWthbGFoIGluaV5bTGlzZW5zaSB1bnR1ayBSIE5vdGVib29rIGluaSBhZGFsYWggKkNyZWF0aXZlIENvbW1vbiBMaWNlbnNlKiBbQ0MgQlktTkMtU0EgNC4wXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wLykuIFVudHVrIG1lbmd1bmR1aCAuUm1kIGZpbGUgZGFyaSBub3RlYm9vayBpbmksIGtsaWsgdG9tYm9sIGBDb2RlYCBkaSBwb2pvayBrYW5hbiBhdGFzIGtlbXVkaWFuIHBpbGloIGBEb3dubG9hZCBSbWRgLl0gbWVuZ3VsYXMgYmViZXJhcGEgdW5zdXIga2FqaWFuIG1vcmZvbG9naSB5YW5nIGRhcGF0IGRpbGFrdWthbiBkYW4gZGl1bmdrYXAgbWVsYWx1aSBMaW5ndWlzdGlrIEtvcnB1cyAoTEtvcnApIFttaXMuIEBiYWF5ZW5fY29ycHVzXzIwMDk7IEBzdGVmYW5vd2l0c2NoX2NvcnB1c18yMDE3LCBoYWwuIDI3Nl0uIFNlYmFnYWkgY29udG9oIGF3YWwsIHNhdHUga29uc3RydWtzaSB5YW5nIGFrYW4gZGlrYWppIGFkYWxhaCBza2VtYSBrb25zdHJ1a3Npb25hbCBwZW1iZW50dWthbiBrYXRhIGtlcmphIHRyYW5zaXRpZiBrYXVzYXRpZiBkaSBCYWhhc2EgSW5kb25lc2lhIChCSW5kKSwgeWFpdHUgWypwZXIqK0FqZWt0aXZhXSAoc2VsYW5qdXRueWEgZGlzaW5na2F0IFsqcGVyKitBSl0pLiBLYXRhIGtlcmphIGthdXNhdGlmIHlhbmcgbWVuY29udG9oa2FuIHNrZW1hIGluaSBzZWNhcmEgc2tlbWF0aXMgbWVtaWxpa2kgZnVuZ3NpL21ha25hICdtZW5pbmdrYXRrYW4gY2lyaSBhdGF1IHNpZmF0LCBzZXBlcnRpIHlhbmcgZGlueWF0YWthbiBvbGVoIGFqZWt0aXZhbnlhLCB5YW5nIChzdWRhaCkgZGltaWxpa2kgb2xlaCBvYmplaycgW0BzbmVkZG9uX2luZG9uZXNpYW5fMjAxMCwgaGFsLiAxMDNdIChbc3ViLWJhZ2lhbiBcQHJlZihzbmVkZG9uKV0oI3NuZWRkb24pIG1lbWJlcmlrYW4gcGVtYXBhcmFuIGxlYmloIGphdWggdGVya2FpdCBza2VtYSBpbmkpLiBUZXJkYXBhdCB0aWdhIGhhbCB5YW5nIGFrYW4gY29iYSBkaWplbGFqYWhpIGRlbmdhbiBtZXRvZGUgTEtvcnAgdGVya2FpdCBwZW5nZ3VuYWFuIHNrZW1hIFsqcGVyLSorQUpdIGRhbGFtIGtvcnB1cy4KClBlcmloYWwgcGVydGFtYSAoW3N1Yi1iYWdpYW4gXEByZWYocHJvZHVrdGl2aXRhcyldKCNwcm9kdWt0aXZpdGFzKSkgYmVya2FpdGFuIGRlbmdhbiBfX2p1bWxhaCB0aXBlX18ga2F0YSAoKnR5cGUgZnJlcXVlbmN5KikgeWFuZyBtZW5jb250b2hrYW4gc2tlbWEgWypwZXIqK0FKXSB5YW5nIGJpc2EgZGl0ZW11a2FuIGRhbGFtIGtvcnB1cyBCSW5kLiBKdW1sYWggdGlwZSBzdWF0dSBza2VtYSBtb3Jmb2xvZ2lzIG1lbmFuZGFpIHRpbmdrYXQgX19wcm9kdWt0aWZpdGFzIHRlcnd1anVkX18gKCpyZWFsaXNlZCBwcm9kdWN0aXZpdHkqKSBza2VtYSB0ZXJzZWJ1dCBwYWRhIHNhdHUgbWFzYSBwZW1ha2FpYW4gc3VhdHUgYmFoYXNhIFtAYmFheWVuX2NvcnB1c18yMDA5LCBoYWwuIDkwNDsgQGhpbHBlcnRfY29uc3RydWN0aW9uYWxfMjAxMywgaGFsLiAxMjg7IEBoaWxwZXJ0X2NvbnN0cnVjdGlvbl8yMDE0LCBoYWwuIDgxXS4gU2VodWJ1bmdhbiBkZW5nYW4ganVtbGFoIHRpcGUgc2tlbWEgWypwZXIqK0FKXSwga2FqaWFuIGluaSBqdWdhIGFrYW4gbWVuZ3VrdXIganVtbGFoIHRpcGUgeWFuZyBoYW55YSBfX211bmN1bCBzYXR1IGthbGlfXyBkYWxhbSBrb3JwdXM7IGJlbnR1ayBpbmkgZGlpc3RpbGFoa2FuIGRlbmdhbiBfXypoYXBheCBsZWdvbWVub24qX19eW0JhYXllbiBbLUBiYWF5ZW5fY29ycHVzXzIwMDksIGhhbC4gOTA1LTkwNl0gbWVuZ3VuZ2thcGthbiBiYWh3YSAqaGFwYXggbGVnb21lbmEqIHRpZGFrIGJpc2EgZGlzYW1ha2FuIGRlbmdhbiBfX25lb2xvZ2lzbWVfXywgYXRhdSBfX2thdGEgYmFydV9fLiBEaSBzYXR1IHNpc2ksIHNla3VtcHVsYW4gKmhhcGF4KiBiaXNhIG1lbmdhbmR1bmcgbmVvbG9naXNtZTsgZGkgc2lzaSBsYWluLCAqaGFwYXgqIGRpIGRhbGFtIHN1YXR1IGtvcnB1cyB5YW5nIGN1a3VwIGJlc2FyIHB1biBiaXNhIG1lcnVwYWthbiBrYXRhLWthdGEgeWFuZyB0ZWxhaCBhZGEgc2VqYWsgbGFtYSwgdGFwaSBoYW55YSBrZWJldHVsYW4gbXVuY3VsIHNla2FsaSBkaSBkYWxhbSBrb3JwdXMgeWFuZyBkaWthamkuXSBbQGhpbHBlcnRfY29uc3RydWN0aW9uYWxfMjAxMywgaGFsLiAxMjg7IEBoaWxwZXJ0X2NvbnN0cnVjdGlvbl8yMDE0LCBoYWwuIDgyXS4gCgoqSGFwYXgqIGJlcmh1YnVuZ2FuIGRlbmdhbiBfX3Byb2R1a3RpZml0YXMgcG90ZW5zaWFsX18gZGFyaSBzdWF0dSBza2VtYSBrb25zdHJ1a3Npb25hbCBtb3Jmb2xvZ2lzIFtAYmFheWVuX2NvcnB1c18yMDA5LCBoYWwuIDkwNS05MDZdLiBQcm9kdWt0aWZpdGFzIHBvdGVuc2lhbCBpbmkgZGl1a3VyIGRlbmdhbiBtZW1iYWdpIGp1bWxhaCAqaGFwYXgqIGRlbmdhbiBrZWtlcmFwYW4ga2VtdW5jdWxhbiBza2VtYW55YSBbQGhpbHBlcnRfY29uc3RydWN0aW9uYWxfMjAxMywgaGFsLiAxMjhdLCBhdGF1IHlhbmcgZGlrZW5hbCBkZW5nYW4gKmhhcGF4L3Rva2VuIHJhdGlvKiAoSFRSKS4gSFRSIG1lbmdnYW1iYXJrYW4gcGVsdWFuZyBzdWF0dSBza2VtYSBwZW1iZW50dWthbiBrYXRhIGd1bmEgYmVya2VtYmFuZywgYXRhdSBwcm9kdWt0aWYgZGlndW5ha2FuLCBtZW5naGFzaWxrYW4gYmVudHVrYW4tYmVudHVrYW4gYmFydSBwYWRhIHBlbWFrYWlhbiBza2VtYSB0ZXJzZWJ1dCBrZSBkZXBhbm55YSBbQGhpbHBlcnRfY29uc3RydWN0aW9uXzIwMTQsIGhhbC4gODI7IEBoaWxwZXJ0X2NvbnN0cnVjdGlvbmFsXzIwMTMsIGhhbC4gMTI4XS4gUmVudGFuZ2FuIG5pbGFpIEhUUiBhZGFsYWggYW50YXJhIDAgKHRpZGFrIGFkYSAqaGFwYXgqKSBkYW4gMV5bQXRhdSAwLTEwMCUgYXBhYmlsYSBuaWxhaSBIVFIgZGl1YmFoIG1lbmphZGkgcGVyc2VudGFzZS5dIChzZW11YSB0aXBlIHBlbmNvbnRvaGFubnlhIGFkYWxhaCAqaGFwYXgqKTsgTmlsYWkgSFRSIHlhbmcgbWVuZGVrYXRpIDAgbWVtcGVya2VjaWwga2VtdW5na2luYW4gbWVuZW11a2FuIGJlbnR1a2FuIGJhcnUgZGFyaSBza2VtYSBtb3Jmb2xvZ2lzIHRlcnNlYnV0IFtAaGlscGVydF9jb25zdHJ1Y3Rpb25hbF8yMDEzLCBoYWwuIDEyOSwgMTMyLCBUYWJsZSA0LjFdLiBKdW1sYWggdGlwZSBkYW4gKmhhcGF4KiBha2FuIGRpYmFoYXMgcGFkYSBbc3ViLWJhZ2lhbiBcQHJlZihwcm9kdWt0aXZpdGFzKV0oI3Byb2R1a3Rpdml0YXMpLgoKUGVyaWhhbCBrZWR1YSAoW3N1Yi1iYWdpYW4gXEByZWYodGlwZXNlbWFudGlzKV0oI3RpcGVzZW1hbnRpcykpIG1lbnlhbmdrdXQgc2tlbWEtc2tlbWEgYmF3YWhhbiAoKnN1YnNjaGVtYXMqKSBkYXJpIHNrZW1hIFsqcGVyLSorQUpdIGRhbGFtIGthaXRhbm55YSBkZW5nYW4gdGlwZSBzZW1hbnRpcyB5YW5nIG1lbmdpc2kgdGVtcGF0IEFqZWt0aXZhIGRpIGRhbGFtIHNrZW1hIHRlcnNlYnV0LiBQZXJzZWJhcmFuIGp1bWxhaCB0aXBlIGRhbiAqaGFwYXgqIHRlcmthaXQgc2tlbWEtc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyBpbmkganVnYSBha2FuIGRpamFiYXJrYW4uIFNhbGFoIHNhdHUgaGFsIHlhbmcgZGFwYXQgZGl1a3VyIGRhcmkgcGVuamFiYXJhbiB0ZXJzZWJ1dCBhZGFsYWgga2FpdGFuIGFudGFyYSAoaSkganVtbGFoIHRpcGUga2F0YSBkYXJpIHN1YXR1IHRpcGUgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcywgeWFuZyBzZWJlbHVtbnlhIHRlbGFoIGRpa2V0YWh1aSBvbGVoIHNlb3JhbmcgcGVudXR1ciBiYWhhc2EsIGRhbiAoaWkpIHBlcmx1YXNhbiB0aXBlIHNrZW1hIGJhd2FoYW4gc2VtYW50aXMgc2VydXBhIHlhbmcgbWVuY2FrdXAgZHVhIGhhbCwgeWFpdHUgKGkpIHBlbWJlbnR1a2FuIGthdGEgYmFydSBzZXJ0YSAoaWkpIGtlYmVydGVyaW1hYW4gKGRhbGFtIGhhbCBtZW1haGFtaSkgYmVudHVrYW4ga2F0YSBiYXJ1IHRlcnNlYnV0IGRhcmkgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyB5YW5nIHNhbWEgW0B6ZXNjaGVsX2V4ZW1wbGFyc18yMDEwLCBoYWwuIDIwMjsgQGhvZmZtYW5uX3VzYWdlLWJhc2VkXzIwMTMsIGhhbC4gNl0uIAoKQmVya2FpdGFuIGRlbmdhbiBwZXJpaGFsIGtlZHVhLCBraHVzdXNueWEga2ViZXJ0ZXJpbWFhbiwgcGVyaWhhbCBrZXRpZ2EgKFtzdWItYmFnaWFuIFxAcmVmKGNpYyldKCNjaWMpKSBtZW1iYWhhcyBfX2tla2VyYXBhbiBrZW11bmN1bGFuL3BlbWFrYWlhbl9fICgqdG9rZW4gZnJlcXVlbmN5Kikgc2tlbWEgWypwZXIqK0FKXSBkYWxhbSBrb3JwdXMgbWVsYWx1aSBrYXRhIHlhbmcgbWVuY29udG9oa2FubnlhLiBEYXRhIGluaSBha2FuIGRhcGF0IG1lbWJhbnR1IG1lbmVudHVrYW4ga2F0YSBiZXJza2VtYSBbKnBlci0qK0FKXSB5YW5nIHNlcmluZyBtdW5jdWwgc2VjYXJhIGtlc2VsdXJ1aGFuIGRhbGFtIGtvcnB1cy4gRGFsYW0gaGFsIHJlcHJlc2VudGFzaSBrb2duaXRpZiwgZGF0YSBrZWtlcmFwYW4gZGFwYXQgbWVuamFkaSBzYWxhaCBzYXR1IGNlcm1pbmFuIGtlbGF6aW1hbiBkYW4ga2V0ZXJwYXRyaWFuIGthdGEgdGVyc2VidXQgZGFsYW0ga2hhc2FuYWgga2ViYWhhc2FhbiBwZW1ha2FpIEJJbmQgW0BieWJlZV9sYW5ndWFnZV8yMDEwLCBoYWwuIDI5OyBAaG9mZm1hbm5fdXNhZ2UtYmFzZWRfMjAxM10uIFtTdWItYmFnaWFuIFxAcmVmKGNpYyldKCNjaWMpIGFrYW4gbWVudW5qdWtrYW4gYmFnYWltYW5hIGh1YnVuZ2FuIGFudGFyYSBfX2tla2VyYXBhbiBrZW11bmN1bGFuX18gZGFuIF9fanVtbGFoIHRpcGVfXyBkYXBhdCBkaWd1bmFrYW4gdW50dWsgbWVuZ3VrdXIgYW1iYW5nIGJhdGFzIGtldGVycGF0cmlhbiBkYW4ga2VsYXppbWFuIHBlbmNvbnRvaGFuIHN1YXR1IHNrZW1hIGtvbnN0cnVrc2lvbmFsLgoKQWRhIHRpZ2EgdHVqdWFuIHV0YW1hIHlhbmcgaW5naW4gZGljYXBhaSBvbGVoIG1ha2FsYWggaW5pLiBTdWItYmFnaWFuIGJlcmlrdXQgbWVuZ3VsYXMga2V0aWdhIHR1anVhbiB0ZXJzZWJ1dCBzZWNhcmEgbGViaWggcmluY2kuCgojIyBUdWp1YW4gbWV0b2RvbG9naXMgeyN0dWp1YW5tZXRvZG9sb2dpc30KCk1ha2FsYWggaW5pIGRpbWFrc3Vka2FuIHVudHVrIG1lbWJhbmdraXRrYW4gbWluYXQgcGVuZWxpdGkgYmFoYXNhIGRpIEluZG9uZXNpYSB1bnR1ayBtZW5nZW5hbGkgbGViaWggamF1aCBtZXRvZGUgTGluZ3Vpc3RpayBLb3JwdXMgKEt1YW50aXRhdGlmKSAoTEtvcnApLiBUaWRhayBiaXNhIGRpcHVuZ2tpcmkgYmFod2EgTEtvcnAgc2V0YWthdCBpbmkgYmVya2VtYmFuZyBiZWdpdHUgcGVzYXQgbWVuamFkaSB1bnN1ciBtZXRvZG9sb2dpcyB0ZXJtdXRha2hpciBkaSBkYWxhbSBwZW5lbGl0aWFuIGtlYmFoYXNhYW4sIGtodXN1c255YSBkYWxhbSBsaW5na3VwIExpbmd1aXN0aWsgS29nbml0aWYgKExLb2cpIGRhbiBUYXRhYmFoYXNhIEtvbnN0cnVrc2lvbmFsLCBzZXBlcnRpICpDb25zdHJ1Y3Rpb24gR3JhbW1hciogKEN4RykgZGFuICpDb2duaXRpdmUgR3JhbW1hciogKENHKSBbQGdseW5uX3F1YW50aXRhdGl2ZV8yMDEwOyBAamFuZGFfY29nbml0aXZlXzIwMTM7IEB5b29uX2NvcnB1cy1iYXNlZF8yMDE2OyBAY3JvZnRfcmFkaWNhbF8yMDAxOyBAbGFuZ2Fja2VyX2Vzc2VudGlhbHNfMjAxM10uIERhdGEga3VhbnRpdGF0aWYgeWFuZyBkaXBlcm9sZWggZGFyaSBrb3JwdXMgZGFwYXQgZGlvbGFoIHVudHVrIG1lbmd1a3VyIGRhbiBtZW5qYXdhYiBwZXJ0YW55YWFuLXBlcnRhbnlhYW4gdGVvcmV0aXMgc2VjYXJhIGxlYmloIGVtcGlyaXMsIHNlbGFpbiBtZW1iZXJpa2FuIHBlbWFoYW1hbiBiYXJ1IHlhbmcgYmVsdW0gZGlqYWJhcmthbiBzZWJlbHVtbnlhIHRlcmthaXQgc3VhdHUgZmVub21lbmEga2ViYWhhc2Fhbi4gTWFrYWxhaCBpbmkgYWthbiBtZW51bmp1a2thbiBiZWJlcmFwYSB1bnN1ciB0ZW9yZXRpcyBkYXJpIGJpZGFuZyBtb3Jmb2xvZ2kgeWFuZyBkYXBhdCBkaXVsYXMgbWVsYWx1aSBkYXRhIGtvcnB1cyBrdWFudGl0YXRpZi4gU2VsYWluIGl0dSwgbWFrYWxhaCBpbmkgYWthbiBtZW55YW1wYWlrYW4gYmViZXJhcGEga2VuZGFsYSB5YW5nIGJpc2EgZGl0ZW11a2FuIGRpIGRhbGFtIGthamlhbiBtb3Jmb2xvZ2ksIHV0YW1hbnlhIHBhZGEgQkluZCwgbWVsYWx1aSBMS29ycCAoW3N1Yi1iYWdpYW4gXEByZWYoa2VuZGFsYSldKCNrZW5kYWxhKSkuCgpTZWxhbmp1dG55YSwgW3N1Yi1iYWdpYW4gXEByZWYocGVuZ29sYWhhbildKCNwZW5nb2xhaGFuKSBkaSBiYXdhaCBtZW51bmp1a2thbiBiYWdhaW1hbmEgcGVuZ29sYWhhbiBkYXRhIGtvcnB1cyB1bnR1ayBrYWppYW4ga2ViYWhhc2FhbiBwYWRhIG1hc2Egc2VrYXJhbmcgaW5pIGFrYW4gbGViaWggdGVyYmFudHUgZGVuZ2FuIG1lbWFoYW1pIGJhaGFzYSBwZW1yb2dyYW1hbiAoKnByb2dyYW1taW5nIGxhbmd1YWdlKikgdW50dWsgcGVuZ29sYWhhbiBkYXRhICgqZGF0YSBzY2llbmNlKikgc2VjYXJhIHVtdW0uICpSKiBbQHJfY29yZV90ZWFtX3I6XzIwMTYtMV0gYWRhbGFoIHNhbGFoIHNhdHUgYmFoYXNhIHBlbXJvZ3JhbWFuIHRlcmRlcGFuIHlhbmcgYmFueWFrIGRpZ3VuYWthbiBkaSBkYWxhbSBrYWppYW4ga2ViYWhhc2FhbiBzYWF0IGluaSBbQGJhYXllbl9hbmFseXppbmdfMjAwODsgQGxldnNoaW5hX2hvd18yMDE1OyBAZ3JpZXNfcXVhbnRpdGF0aXZlXzIwMDk7IEBncmllc19zdGF0aXN0aWNzXzIwMTNdLiAqUiogZGlwYW5kYW5nIGJlZ2l0dSBiZXJtYW5mYWF0IGthcmVuYSBtZW5hd2Fya2FuIHNhdHUgd2FkYWggeWFuZyBzZXN1YWkgYmFnaSBkdWEgcmFuZ2thaWFuIHV0YW1hIHBlbmdvbGFoYW4gZGF0YSBkaSBkYWxhbSBMS29ycDogKGkpIHBlbmdvbGFoYW4gdGVrcyBkYW4gKGlpKSBhbmFsaXNpcyBzdGF0aXN0aWsuIFNhbGFoIHNhdHUgdW5zdXIgdGVycGVudGluZyBkYXJpICpSKiBzZWxhbmp1dG55YSBhZGFsYWggYmFod2EgKlIqIHNla2FsaWd1cyBtZW5qYWRpIHRlbXBhdCB1bnR1ayBtZW51bGlzIGxhcG9yYW4gYW5hbGlzaXMgKHNlcGVydGkgaGFsbnlhIG1ha2FsYWggaW5pKV5bTWFrYWxhaCBpbmkgZGl0dWxpcyBkYW4gZGlyYW1wdW5na2FuIGRpIGRhbGFtICpSU3R1ZGlvKiBtZW5nZ3VuYWthbiBtb2R1bCAqUm1hcmtkb3duKi4gS29kZSBwZW1yb2dyYW1hbiwgYmVya2FzIGRhdGEsIGRhbiBiZXJrYXMgbmFza2FoICpSbWFya2Rvd24qIG1ha2FsYWggaW5pIGRhcGF0IGRpdW5kdWggbWVsYWx1aSAqZmlnc2hhcmUqOiBodHRwczovL2RvaS5vcmcvMTAuNDIyNS8wMy81YTA2MjdkZTAyNDUzLl0gYmVyc2FtYWFuIGRlbmdhbiBrb2RlIHBlbXJvZ3JhbWFuIGJhZ2kgcmFuZ2thaWFuIGFuYWxpc2lzIHRlcnNlYnV0OyBoYWwgaW5pIGJpc2EgZGlsYWt1a2FuIGRlbmdhbiBhcGxpa2FzaSBkYW1waW5nYW4gZGFyaSAqUiosIHlhaXR1ICpSU3R1ZGlvKiBbQHdpY2toYW1fcl8yMDE3XS4gUGlyYW50aSB5YW5nIGRpdGF3YXJrYW4gb2xlaCAqUiogdGVyc2VidXQgZGFwYXQgbWV3dWp1ZGthbiBkdWEgaGFsIG1lbmRhc2FyIGRhbGFtIHRhaGFwIHBlbmdvbGFoYW4gZGF0YSB0ZXJtdXRha2hpciwgeWFpdHUgKGkpIGtldGVyYnVrYWFuIGRhdGEsIGRhbiAoaWkpIGtldGVyY2lwdGFhbi11bGFuZyBwcm9zZXMgYW5hbGlzaXNueWEgKCpyZXByb2R1Y2libGUgZGF0YSBhbmFseXNpcyopIFtAd2lja2hhbV9yXzIwMTddLgoKIyMgVHVqdWFuIHRlb3JldGlzIHsjdHVqdWFudGVvcmV0aXN9CgpQZXJrZW1iYW5nYW4gcGVzYXQga2FqaWFuIGtlYmFoYXNhYW4gYmVyZGFzYXJrYW4gVGF0YWJhaGFzYSBLb25zdHJ1a3Npb25hbCAoQ3hHKSwgdXRhbWFueWEgeWFuZyBtZW5nZ3VuYWthbiBMS29ycCBbbWlzLiBAeW9vbl9jb3JwdXMtYmFzZWRfMjAxNl0sIGxlYmloIGJhbnlhayBtdW5jdWwgcGFkYSBiYWhhc2EtYmFoYXNhIEluZG8tRXJvcGEsIGtodXN1c255YSBCYWhhc2EgSW5nZ3Jpcy4gU2VjYXJhIHVtdW0sIGJlbHVtIGJhbnlhayBrYWppYW4ta2FqaWFuIGtlYmFoYXNhYW4sIGxlYmloLWxlYmloIG1vcmZvbG9naSwgdW50dWsgQkluZCB5YW5nIChpKSBtZXJ1anVrIGtlcGFkYSBrYWppYW4gdGVvcmV0aXMga29udGVtcG9yZXIgYmVyYmFzaXMgcGVuZ2d1bmFhbiAoKnVzYWdlLWJhc2VkIGFwcHJvYWNoKiksIHNlcGVydGkgTEtvZyBkYW4gQ3hHLCBkYW4gKGlpKSB5YW5nIGRpZ2FidW5na2FuIGRlbmdhbiBhc3BlayBhbmFsaXRpcyBkYW4gbWV0b2RvbG9naXMgZGFyaSBMS29ycC4gU2VjYXJhIGdhcmlzIGJlc2FyLCBtYWthbGFoIGluaSB0dXJ1dCBiZXJrb250cmlidXNpIChpKSBtZW1wZXJsdWFzIGthamlhbiBkaSBkYWxhbSBMS29nIGRhbiBDeEcgYXRhcyBkYXNhciBkYXRhIEJJbmQsIGRhbiAoaWkpIG1lbmFtYmFoIGtoYXNhbmFoIGthamlhbiBtb3Jmb2xvZ2kgKGRhbiBzaW50YWtzaXMpIHlhbmcgdGVsYWggZGlsYWt1a2FuIHNlYmVsdW1ueWEsIG1pc2FsbnlhIG9sZWggQXJrYSBkYW4ga29sZWdhIFtAYXJrYV9saW5ndWlzdGljXzIwMDk7IEBhcmthX3JlZHVwbGljYXRpb25fMjAwOV0sIHlhbmcgbWVuZ2dhYnVuZ2thbiBwZW5kZWthdGFuIExla3Npa2FsLUZ1bmdzaW9uYWwgZGFuIHVuc3VyIGtvbXB1dGFzaW9uYWwuCgpUdWp1YW4gdGVvcmV0aXMgbWVuZ2todXN1cyBkYXJpIG1ha2FsYWggaW5pIGFkYWxhaCBtZW1iZXJpa2FuIGdhbWJhcmFuIGF3YWwgdW5zdXItdW5zdXIgcGVtYWthaWFuIGRhcmkgc2tlbWEga29uc3RydWtzaW9uYWwgcGFkYSB0YXRhcmFuIG1vcmZvbG9naSBwYWRhIEJJbmQsIGtodXN1c255YSBza2VtYSBrb25zdHJ1a3Npb25hbCBrYXRhIGtlcmphIGthdXNhdGlmIFsqcGVyKitBSl0uIFVuc3VyLXVuc3VyIGluaSBtZWxpcHV0aSBqdW1sYWggdGlwZSBkYW4ga2VrZXJhcGFuIHBlbmNvbnRvaGFuIHNrZW1hIFsqcGVyLSorQUpdIHNlcnRhIHRpcGUgc2VtYW50aXMgZGFyaSBza2VtYSB0ZXJzZWJ1dC4gS2FqaWFuIHRlcmhhZGFwIHVuc3VyIHBlbWFrYWlhbiB0ZXJzZWJ1dCBkaWhhcmFwa2FuIGRhcGF0IG1lbWJlcmlrYW4gcGVtYXBhcmFuIHRlb3JldGlzIGRhbiBrb25zZXB0dWFsIHlhbmcgbGViaWggZW1waXJpcyBkYW4gdGVydWt1ciB0ZXJrYWl0IGtlbGF6aW1hbiBiZW50dWthbiBrYXRhLCByZW50YW5nYW4gc2VtYW50aXMsIHNlcnRhIHByb2R1a3RpZml0YXMga2h1c3VzbnlhIHNrZW1hIFsqcGVyKitBSl0uCgojIyBUdWp1YW4gcHJha3RpcyB7I3R1anVhbnByYWt0aXN9CgpQZW5lcmFwYW4gbWV0b2RlIExLb3JwIHRlcmhhZGFwIGthamlhbiBtb3Jmb2xvZ2kgeWFuZyBha2FuIGRpY29udG9oa2FuIHBhZGEgbWFrYWxhaCBpbmkgZGFwYXQgbWVtYmVyaWthbiBkYXRhIHBlbWFrYWlhbiBueWF0YSBza2VtYSBrb25zdHJ1a3Npb25hbCBrYXRhIGtlcmphIGthdXNhdGlmIFsqcGVyKitBSl0gZGkgQkluZC4gRGF0YSBpbmkgZGkgYW50YXJhbnlhIGJlcnVwYSBkYWZ0YXIga2F0YS1rYXRhIHlhbmcgZGl0ZW11a2FuIGRhbGFtIGtvcnB1cyB5YW5nIG1lbmNvbnRvaGthbiBza2VtYSB0ZXJzZWJ1dC4gU2FsYWggc2F0dSBrZWd1bmFhbiBwcmFrdGlzIGRhdGEtZGF0YSBpbmkgYWRhbGFoIHNlYmFnYWkgc3VtYmVyIHBlbmdhamFyYW4gQkluZCBiYWdpIHBlbnV0dXIgYXNpbmcgeWFuZyBkaWRhc2FyaSBhdGFzIGJ1a3RpIHBlbWFrYWlhbiBueWF0YSAqKmJhZ2FpbWFuYSoqIHN1YXR1IGtvbnN0cnVrc2kgYXRhdSB1bml0IGtlYmFoYXNhYW4gbGF6aW1ueWEgZGlndW5ha2FuLiAKCkRlbmdhbiB0aWRhayBiZXJtYWtzdWQgbWVuZ2VzYW1waW5na2FuIHBlcmFuIGludHVpc2kgcGVudXR1ciBhc2xpIHRlcmthaXQgKiprZWJlcnRlcmltYWFuKiogc3VhdHUgYmVudHVrYW4ga2F0YSwgcGVudWxpcyBtZW5nYW5nZ2FwIGludHVpc2kgc2FuZ2F0IGJlcnBlcmFuIHBlbnRpbmcgcGFkYSB0YWhhcCAqKm1lbWFoYW1pKiogZGFuICoqbWVuZ2FuYWxpc2lzL21lbmFmc2lya2FuKiogZGF0YSwgdGV0YXBpIHRpZGFrIGRhbGFtIGhhbCAqKm1lbmNpcHRha2FuKiogc2VjYXJhIHNlbmdhamEgZGF0YSBrZWJhaGFzYWFuIHVudHVrIHR1anVhbiBhbmFsaXRpcyBbQGphbmRhX3F1YW50aXRhdGl2ZV8yMDEzLCBoYWwuIDNdLiBQZXJueWF0YWFuIGluaSBkaWRhc2FyaSBhdGFzIHByYWFuZ2dhcGFuIHBlbmRla2F0YW4gbGluZ3Vpc3RpayBiZXJkYXNhciBwZW5nZ3VuYWFuICgqdXNhZ2UtYmFzZWQgbGluZ3Vpc3RpY3MqKSwgeWFuZyBtZW5qYWRpIHNhbGFoIHNhdHUgcGlsYXIgcGVudGluZyBkYWxhbSBMS29nIGRhbiBDeEcgW0BieWJlZV9sYW5ndWFnZV8yMDEwOyBAamFuZGFfcXVhbnRpdGF0aXZlXzIwMTMsIGhhbC4gMi0zXS4gQXNhcyBsaW5ndWlzdGlrIGJlcmRhc2FyIHBlbmdndW5hYW4gbWVtYW5kYW5nIGJhaHdhIHBlbmdldGFodWFuIGtlYmFoYXNhYW4gc2VzZW9yYW5nIHRlcmJlbnR1ayBkYXJpIGtlamFkaWFuLWtlamFkaWFuIG55YXRhIHRpbmRhayB0dXR1ciBwZW1ha2FpYW4gYmFoYXNhIGl0dSBzZW5kaXJpOyBkYWxhbSBoYWwgaW5pLCBkYXRhIHBlbmdndW5hYW4gbnlhdGEgbWVuamFkaSBwZXJoYXRpYW4gdXRhbWEgZGkgZGFsYW0ga2FqaWFuIGtlYmFoYXNhYW4sIGtodXN1c255YSBkaSBkYWxhbSBMS29nIGRhbiBDeEcgW0Bob2ZmbWFubl91c2FnZS1iYXNlZF8yMDEzXS4gU2luZ2thdG55YSwgZGF0YSBrb3JwdXMgdW50dWsgc3VhdHUga29uc3RydWtzaSBwYWRhIHN1YXR1IGJhaGFzYSBkYXBhdCBkaWphZGlrYW4gYnVrdGktYnVrdGkgeWFuZyBkYXBhdCBkaXRhd2Fya2FuIGtlcGFkYSBwZWxhamFyIEJJbmQ7IGRhbGFtIGhhbCBpbmkgcGVsYWphciBkaWhhcmFwa2FuIGxlYmloIG1lbWFoYW1pIGJhZ2FpbWFuYSwgZGFuIHNlYmVyYXBhIGxhemltIChidWthbiAqKmJlbmFyLSoqIGF0YXUgKipzYWxhaCoqLW55YSksIHN1YXR1IHVuc3VyIGtlKHRhdGEpYmFoYXNhYW4gZGlwYWthaSBvbGVoIHBlbmdndW5hIEJJbmQuIAoKIyBLYWppYW4gcHVzdGFrYQojIyBTa2VtYSBrb25zdHJ1a3Npb25hbCBbKnBlci0qK0FKXSBiZXJkYXNhcmthbiBidWt1IHRhdGFiYWhhc2EgQmFoYXNhIEluZG9uZXNpYSB7I3NuZWRkb259CgpLYXRhIGtlcmphIHlhbmcgbWVuY2VybWlua2FuIHNrZW1hIFsqcGVyLSorQUpdIGFkYWxhaCBrYXRhIGtlcmphIHRyYW5zaXRpZiBrYXVzYXRpZi4gU25lZGRvbiBka2suIFstQHNuZWRkb25faW5kb25lc2lhbl8yMDEwLCBoYWwuIDEwM10gbWVueWF0YWthbiBiYWh3YSBrYXRhIGtlcmphIGthdXNhdGlmIGJlcnNrZW1hIFsqcGVyLSorQUpdIGJlcmJlZGEgZGVuZ2FuIGthdGEga2VyamEgc2VydXBhIGJlcnNrZW1hIFtBaistKmthbipdLiBQYWRhIGthdGEga2VyamEgZGVuZ2FuIHNrZW1hIFtBaistKmthbipdLCBvYmpla255YSBkaXBhbmRhbmcgYmVsdW0gbWVtaWxpa2kgc3VhdHUgY2lyaSB5YW5nIGRpbnlhdGFrYW4gb2xlaCBhamVrdGl2YS1ueWEsIG5hbXVuIGRpc2ViYWJrYW4gdW50dWsgbWVtaWxpa2kgY2lyaSB0ZXJzZWJ1dC4gU2ViYWxpa255YSwgYWN1YW4gbWFrbmEgZGFyaSBrYXRhIGtlcmphIGJlcnNrZW1hIFsqcGVyLSorQUpdIGFkYWxhaCBvYmpla255YSBzdWRhaCBtZW1pbGlraSBzdWF0dSBjaXJpIHRlcnRlbnR1IGRhbiBrZW11ZGlhbiBkaXNlYmFia2FuIHVudHVrIG1lbWlsaWtpIGNpcmkgdGVyc2VidXQgcGFkYSB0aW5na2F0YW4geWFuZyBsZWJpaCB0aW5nZ2kuIE1pc2FsbnlhLCBhamVrdGl2YSAqKmJlc2FyKioga2V0aWthIGRpZ3VuYWthbiBwYWRhIHNrZW1hIFtBaistKmthbipdIG1lbmphZGkgKiptZW1iZXNhcmthbioqIChkaWF0ZXNpcyBha3RpZikgKCdtZW1idWF0IHNlc3VhdHUgbWVuamFkaSBiZXNhcicpLCBkYW4gcGFkYSBza2VtYSBbKnBlci0qK0FKXSBtZW5qYWRpICoqbWVtcGVyYmVzYXIqKiAoZGlhdGVzaXMgYWt0aWYpICgnbWVtYnVhdCBzZXN1YXR1IHlhbmcgc3VkYWggYmVzYXIgbWVuamFkaSBiZXJ0YW1iYWggYmVzYXInKS4gCgpTbmVkZG9uIGRray4gWy1Ac25lZGRvbl9pbmRvbmVzaWFuXzIwMTAsIGhhbC4gMTAzXSBtZW55YXRha2FuIGJhaHdhIHNlYmFnaWFuIHBlbnV0dXIgdGlkYWsgdGVybGFsdSBtZW1wZXJoYXRpa2FuIHBlcmJlZGFhbiBtYWtuYSB5YW5nIGRpdGltYnVsa2FuIG9sZWgga2F0YSBrZXJqYSBkYXJpIGtlZHVhIHNrZW1hIHRlcnNlYnV0OyBwZW51bGlzIG1lbmdhbmdnYXAgaW5pIGFkYWxhaCBzdWF0dSBhc3Vtc2kgeWFuZyBzYW5nYXQgbWVuYXJpayB1bnR1ayBiaXNhIGRpdWppa2FuIHRpbmdrYXQga2VhYnNhaGFubnlhIG1lbGFsdWkgZWtzcGVyaW1lbi4gRGl0YW1iYWhrYW4gcHVsYSBiYWh3YSB0ZXJkYXBhdCBhamVrdGl2YSB5YW5nIGRhcGF0IG11bmN1bCBiYWlrIGRlbmdhbiBza2VtYSBbKnBlci0qK0FKXSBkYW4gc2tlbWEgW0FqKyota2FuKl0sIG5hbXVuIG1lbnlhbXBhaWthbiBtYWtuYSB5YW5nIGJlcmJlZGEgW0BzbmVkZG9uX2luZG9uZXNpYW5fMjAxMCwgaGFsLiAxMDNdLiBTYWxhaCBzYXR1IGNvbnRvaCB5YW5nIGRpYmVyaWthbiBvbGVoIFNuZWRkb24gZGtrLiBbLUBzbmVkZG9uX2luZG9uZXNpYW5fMjAxMCwgaGFsLiAxMDNdIHVudHVrIGFzdW1zaSB0YWRpIGFkYWxhaCBwZXJiZWRhYW4gbWFrbmEgYW50YXJhICoqbWVtcGVycGFuamFuZyoqICdtZW5hbWJhaCBkdXJhc2kgc3VhdHUgb2JqZWsnIGRhbiAqKm1lbWFuamFuZ2thbioqICdtZW1idWF0IChzZSlzdWF0dSBiZW5kYSBmaXNpayBiZXJ0YW1iYWggcGFuamFuZycuIEluaSBqdWdhIG1lcnVwYWthbiBhc3Vtc2kgdGVyc2VuZGlyaSB5YW5nIGJpc2EgZGlrYWppIGRlbmdhbiBtZW1iYW5kaW5na2FuIHBlcnNlYmFyYW4ga29udGVrdHMgcGVtYWthaWFuIGtlZHVhIGFmaWtzIHRlcnNlYnV0LCB0ZW50dW55YSBiZXJkYXNhcmthbiBkYXRhIGtvcnB1cy4gU2VsYW5qdXRueWEsIFNuZWRkb24gZGtrLiBbLUBzbmVkZG9uX2luZG9uZXNpYW5fMjAxMCwgaGFsLiAxMDNdIG1lbnVuanVra2FuIGJhaHdhIHRlcmRhcGF0IGFqZWt0aXZhIHlhbmcgbGF6aW0gbXVuY3VsIGRlbmdhbiBza2VtYSBbKnBlci0qK0FKXSAobWlzLiAqKm1lbXBlcmtheWEqKikgdGFwaSB0aWRhayBkZW5nYW4gW0FqKyota2FuKl0gKG1pcy4gKD8pKiptZW5nYXlha2FuKiopOyBkYXRhIGtvcnB1cyBqdWdhIGRhcGF0IG1lbmF3YXJrYW4gamF3YWJhbiB0ZXJrYWl0IGFzdW1zaSBpbmksIHlhbmcgdGlkYWsgZGliYWhhcyBrYWxpIGluaS4gUGVyaGF0aWFuIHV0YW1hIG1ha2FsYWggaW5pIGFkYWxhaCBtZW1iZXJpa2FuIHBlbWFwYXJhbiBhd2FsIGJlcmRhc2Fya2FuIGtvcnB1cyB0ZXJrYWl0IHBlbWFrYWlhbiBza2VtYSBbKnBlci0qK0FKXSBzZWNhcmEgbWFuZGlyaSwga2h1c3VzbnlhIChpKSB0aW5na2F0IHByb2R1a3RpZml0YXMgbWVueWVsdXJ1aG55YSBwYWRhIHNpdHVhc2kgcGVtYWthaWFuIEJJbmQgc2V0YWthdCBpbmksIChpaSkgcmVudGFuZ2FuIHNlbWFudGlzIGRhbiB0aW5na2F0IHByb2R1a3RpZml0YXMgcGVyIHNrZW1hIGJhd2FoYW4gc2VtYW50aXNueWEsIHNlcnRhIChpaWkpIHBlbmNvbnRvaGFuLXBlbmNvbnRvaGFuIGxhemltIHNrZW1hIHRlcnNlYnV0LiAKCiMjIEFzdW1zaSBtZW5kYXNhciBUYXRhYmFoYXNhIEtvbnN0cnVrc2lvbmFsIChDeEcpIHsjY3huZ3JhbW1hcn0KClNlY2FyYSB0ZW9yZXRpcywgbWFrYWxhaCBpbmkgZGlsYW5kYXNpIGF0YXMgcGVuZGVrYXRhbiBMS29nLCBraHVzdXNueWEgVGF0YWJhaGFzYSBLb25zdHJ1a3Npb25hbCAoKmNvbnN0cnVjdGlvbmlzdCBhcHByb2FjaGVzKikgKEN4RykgW0Bjcm9mdF9yYWRpY2FsXzIwMDE7IEBsYW5nYWNrZXJfZXNzZW50aWFsc18yMDEzOyBAZ29sZGJlcmdfY29uc3RydWN0aW9uc18yMDA2OyBAaG9mZm1hbm5fY29uc3RydWN0aW9uaXN0XzIwMTNdXltVbGFzYW4gbWVuZGFsYW0gdGVybXV0YWtoaXIgdGVudGFuZyBiZXJhZ2FtIGNhYmFuZyBUYXRhYmFoYXNhIEtvbnN0cnVrc2lvbmFsIGRhcGF0IGRpcGVyb2xlaCBtZWxhbHVpIEhvZmZtYW5uIGRhbiBUcm91c2RhbGUgWy1AaG9mZm1hbm5fb3hmb3JkXzIwMTNdXS4gUGVuZGVrYXRhbiBrb25zdHJ1a3Npb25hbCBtZWxpaGF0ICh0YXRhKWJhaGFzYSBzZWJhZ2FpIHN1YXR1IGtoYXNhbmFoIGplamFyaW5nIGtvbnNlcHR1YWwgdGVyc3RydWt0dXIgeWFuZyB0ZXJkaXJpIGF0YXMgKiprb25zdHJ1a3NpKiosIHlhaXR1IGtlYmVycGFzYW5nYW4gYmVudHVrLWRhbi1tYWtuYSwgYXRhdSB1bml0IHNpbWJvbGlzLiAqKkJlbnR1ayoqIHV0YW1hbnlhIGRpcGFoYW1pIHNlYmFnYWkgdW5zdXIgb3J0b2dyYWZpcyBhdGF1IGJ1bnlpOyAqKm1ha25hKiogZGlwYWhhbWkgc2ViYWdhaSBzdHJ1a3R1ciBzZW1hbnRpcyBkYW4gcHJhZ21hdGlzIFtAbGFuZ2Fja2VyX2Vzc2VudGlhbHNfMjAxMywgaGFsLiAxNSwgMzBdLiBCZXJpa3V0IGluaSBhZGFsYWggc2l0aXJhbiBsYW5nc3VuZyB0ZXJrYWl0IHBlbWFoYW1hbiAqKmtvbnN0cnVrc2kqKiBkYXJpIHNhbGFoIHNhdHUgcGFrYXIga3VuY2kgZGkgZGFsYW0gQ3hHOgoKPiAqIjxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPkFsbCBsZXZlbHMgb2YgZ3JhbW1hdGljYWwgYW5hbHlzaXMgaW52b2x2ZSBjb25zdHJ1Y3Rpb25zOiBsZWFybmVkIHBhaXJpbmdzIG9mIGZvcm0gd2l0aCBzZW1hbnRpYyBvciBkaXNjb3Vyc2UgZnVuY3Rpb248L3NwYW4+LCBpbmNsdWRpbmcgbW9ycGhlbWVzIG9yIHdvcmRzLCBpZGlvbXMsIHBhcnRpYWxseSBsZXhpY2FsbHkgZmlsbGVkIGFuZCBmdWxseSBnZW5lcmFsIHBocmFzYWwgcGF0dGVybnMuICguLi4pIEFueSBsaW5ndWlzdGljIHBhdHRlcm4gaXMgcmVjb2duaXplZCBhcyBhIGNvbnN0cnVjdGlvbiBhcyBsb25nIGFzIHNvbWUgYXNwZWN0IG9mIGl0cyBmb3JtIG9yIGZ1bmN0aW9uIGlzIG5vdCBzdHJpY3RseSBwcmVkaWN0YWJsZSBmcm9tIGl0cyBjb21wb25lbnQgcGFydHMgb3IgZnJvbSBvdGhlciBjb25zdHJ1Y3Rpb25zIHJlY29nbml6ZWQgdG8gZXhpc3QuIEluIGFkZGl0aW9uLCBwYXR0ZXJucyBhcmUgc3RvcmVkIGFzIGNvbnN0cnVjdGlvbnMgZXZlbiBpZiB0aGV5IGFyZSBmdWxseSBwcmVkaWN0YWJsZSBhcyBsb25nIGFzIHRoZXkgb2NjdXIgd2l0aCBzdWZmaWNpZW50IGZyZXF1ZW5jeS4iKiBbQGdvbGRiZXJnX2NvbnN0cnVjdGlvbnNfMjAwNiwgaGFsLiA1LCBwZW5la2FuYW4ga2FwaXRhbCBzZXN1YWkgYXNsaW55YV0KClNpdGlyYW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIGtvbnN0cnVrc2kgZGFsYW0gYmVyYmFnYWkgYmVudHVrIGRhbiB0aW5na2F0IGtldGVycGVyaW5jaWFubnlhIGFkYWxhaCBpbnRpIGRhcmkgKGFuYWxpc2lzIGtoYXNhbmFoIGtlKWJhaGFzYShhbikgaXR1IHNlbmRpcmkgKFBlcmhhdGlrYW4gW1RhYmVsIFxAcmVmKHRhYjprb25zdHJ1a3NpKV0oI2tvbnN0cnVrc2kpIGJlcmlrdXQpLiBBcnRpbnlhLCB0aWRhayBhZGEgc2VrYXQtc2VrYXQgeWFuZyB0ZWdhcyBhbnRhcmEgbGVrc2lrb24gZGFuIHRhdGFiYWhhc2Ega2FyZW5hIHNlbXVhbnlhIGRpcGFuZGFuZyBzZWJhZ2FpIGtvbnN0cnVrc2kuIExla3Npa29uIGRhbiB0YXRhYmFoYXNhIG1lbWJlbnR1ayBzdWF0dSByZW50YW5nYW4geWFuZyBkaWJlZGFrYW4gcGFkYSB0aW5na2F0IGtvbXBsZWtzaXRhcywga2V0ZXJwZXJpbmNpYW4sIGRhbiBrZXRlcnBhdHJpYW5ueWEgW0Bjcm9mdF9yYWRpY2FsXzIwMDEsIGhhbC4gMTc7IEBsYW5nYWNrZXJfZXNzZW50aWFsc18yMDEzLCBoYWwuIDIxLTIyLCAyNF0uIFBhbmRhbmdhbiBrb25zdHJ1a3Npb25hbCBpbmkganVnYSBtZW5naW5kaWthc2lrYW4gdW5zdXIgbGluZ3Vpc3RpayB5YW5nIHNrZW1hdGlzIHB1biwgc2VwZXJ0aSBrb25zdHJ1a3NpIHNpbnRha3NpcyB0cmFuc2l0aWYsIHRldGFwIG1lbnlhbXBhaWthbiBtYWtuYSwgbWVza2lwdW4gYmVyc2lmYXQgc2tlbWF0aXMvYWJzdHJhayAobWlzLiAnc3VhdHUgZW50aXRhcyBtZWxha3VrYW4gc2VzdWF0dSBkYWxhbSBrYWl0YW5ueWEgZGVuZ2FuIGVudGl0YXMgeWFuZyBsYWluJykuCgpgYGB7ciBrb25zdHJ1a3NpfQp0cmliYmxlKH5gS2FyYWt0ZXJpc3Rpa2AsIH5gVGlwZSBLb25zdHJ1a3NpYCwgfkNvbnRvaCwKICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS8tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLS0tLS0tLS0tCiAgICAgICAgIktvbXBsZWtzIGRhbiAoc2VwZW51aG55YSkgc2tlbWF0aXMiLCAiS2FsaW1hdCBha3RpZiB0cmFuc2l0aWYgQkluZCIsICIqKlB1dHUgbWVtcGVsYWphcmkgVGF0YWJhaGFzYSBLb25zdHJ1a3Npb25hbCoqIiwKICAgICAgICAiS29tcGxla3MgZGFuIChzZXBlbnVobnlhKSBzcGVzaWZpayIsICJJZGlvbTsgcGVyaWJhaGFzYSIsICJidWFoICsgYDxrYXRhIGFuZ2dvdGEgdHVidWg+YCAobWlzLiAqKmJ1YWggdGFuZ2FuKiosICoqYnVhaCBoYXRpKiopOyAqKk1hdGEtbWF0YSoqOyAqKnRha2thbiBsYXJpIGd1bnVuZyBkaWtlamFyKioiLAogICAgICAgICJLb21wbGVrcyB0YXBpIHRlcmlrYXQiLCAiKFBlbWJlbnR1a2FuKSBrYXRhIGtvbXBsZWtzIiwgIlBlbWJlbnR1a2FuIGthdGEga2VyamE6IFtBamVrdGl2YSsqLWthbipdIChtaXMuICoqcGFuYXNrYW4qKiwgKipoaWR1cGthbioqKTsgUGVtYmVudHVrYW4ga2F0YSBtYWplbXVrIG5vbWluYWwgZGVuZ2FuIHNrZW1hIFtOICsgTl0gKG1pcy4gKipzYXRlIGF5YW0qKjsgKip0b2tvIGJ1a3UqKikiLAogICAgICAgICJBdG9taXMgZGFuIHNwZXNpZmlrIiwgIkthdGEvbGVrc2lrb24iLCAiKipidWt1KiosICoqa2VydGFzKioiLAogICAgICAgICJBdG9taXMsIHNwZXNpZmlrLCB0YXBpIHRlcmlrYXQiLCAiTW9yZmVtIiwgIipwZXItKiwgKmJlci0qIgogICAgICAgICkgJT4lCiAgYXMuZGF0YS5mcmFtZSgpICU+JQogIGtuaXRyOjprYWJsZShjYXB0aW9uPSdSZW50YW5nYW4gbGVrc2lrb24gZGFuIHRhdGFiYWhhc2EgZGFsYW0gQ3hHIChkaXNlc3VhaWthbiBkZW5nYW4gbWVuZ2FjdSBDcm9mdCBbLUBjcm9mdF9yYWRpY2FsXzIwMDEsIGhhbC4gMTddIGRhbiBHb2xkYmVyZyBbLUBnb2xkYmVyZ19jb25zdHJ1Y3Rpb25zXzIwMDYsIGhhbC4gNV0pXltTYWxhaCBzYXR1IGplbmlzIEN4RywgeWFpdHUgKlJhZGljYWwgQ29uc3RydWN0aW9uIEdyYW1tYXIqIChSQ3hHKSB1dGFtYW55YSB0aWRhayBtZW1hbmRhbmcgYWRhbnlhIGtlbGFzIGthdGEsIHNlcGVydGkgYWpla3RpdmEgZGFuIG5vbWluYSBbQGNyb2Z0X3JhZGljYWxfMjAwMSwgaGFsLiAxOF0uXS4nLCByb3cubmFtZXMgPSBUKQpgYGAKCktvbnN0cnVrc2kgc2tlbWF0aXMgbXVuY3VsIGRhcmkgKipwZW5nLXVtdW0tYW4qKiAoKmdlbmVyYWxpc2F0aW9uKiksIGFic3RyYWtzaSwgYXRhdSBza2VtYXRpc2FzaSwgZGFyaSBzZWp1bWxhaCBwZW1ha2FpYW4gc3Blc2lmaWsgZGFuIG55YXRhIHN1YXR1IHVuaXQga2ViYWhhc2FhbjsgdGVycGF0cmlueWEgc2tlbWEga29uc3RydWtzaW9uYWwgeWFuZyB0ZXJhYnN0cmFrc2kgdGVyc2VidXQgc2VsYW5qdXRueWEgYmVycGVyYW4gdW50dWsgbWVudW50dW4gcGVtYmVudHVrYW4gZWtzcHJlc2kgYmFydSBkZW5nYW4gc2tlbWEgeWFuZyBzYW1hIFtAYnliZWVfbGFuZ3VhZ2VfMjAxMCwgaGFsLiAyNjsgQGxhbmdhY2tlcl9lc3NlbnRpYWxzXzIwMTMsIGhhbC4gMjRdLiBQZW1haGFtYW4gaW5pIHBlbnRpbmcgdGVya2FpdCBNb3Jmb2xvZ2kgS29uc3RydWtzaW9uYWwgeWFuZyBha2FuIGRpdWxhcyBwYWRhIFtzdWItYmFnaWFuIFxAcmVmKGN4bm1vcnBob2xvZ3kpXSgjY3hubW9ycGhvbG9neSkgYmVyaWt1dC4gVGVya2FpdCBkZW5nYW4gaGFsIGl0dSwgW1RhYmVsIFxAcmVmKHRhYjprb25zdHJ1a3NpKV0oI2tvbnN0cnVrc2kpIGRpIGF0YXMganVnYSBtZW51bmp1a2thbiBiYWh3YSBrYXRhIGtvbXBsZWtzIHlhbmcgdGVyYmVudHVrIG1lbGFsdWkgc2tlbWEgcGVtYmVudHVrYW4ga2F0YSwgc2VwZXJ0aSAqKnBlcmt1YXQqKiB5YW5nIHRlcmRpcmkgZGFyaSBhd2FsYW4gKnBlci0qIGRhbiBhamVrdGl2YSAqKmt1YXQqKiwgZGlwYW5kYW5nIHNlYmFnYWkga29uc3RydWtzaSBkZW5nYW4ga29tcGxla3NpdGFzIHBhZGEgdGF0YXJhbiBrYXRhIFtAYm9vaWpfY29uc3RydWN0aW9uXzIwMTA7IEBsYW5nYWNrZXJfZXNzZW50aWFsc18yMDEzLCBoYWwuIDI0XQoKU2l0aXJhbiBkYXJpIEdvbGRiZXJnIGRpIGF0YXMganVnYSBtZW5vbmpvbGthbiBwZXJhbiBkYXJpIGtla2VyYXBhbiBwZW1ha2FpYW4gc3VhdHUgYmVudHVrIGxpbmd1aXN0aWsgdW50dWsgZGlwYW5kYW5nIHNlYmFnYWkgc3VhdHUga29uc3RydWtzaS4gQXJ0aW55YSwgdGlkYWsgaGFueWEgcG9sYSBrb25zdHJ1a3NpIHNrZW1hdGlzIHNhamEgeWFuZyB0ZXJzaW1wYW4gZGkgZGFsYW0ga2FoYXNhbmFoIGtlYmFoYXNhYW4gc2VzZW9yYW5nOyBjb250b2gtY29udG9oIHNwZXNpZmlrIGRhcmkga29uc3RydWtzaSB0ZXJzZWJ1dCBqdWdhIGFrYW4gdGVyc2ltcGFuLCBkYW4gdGVycGF0cmkgcGFkYSB0aW5na2F0YW4gdGVydGVudHUsIHNlcGFuamFuZyBjb250b2gtY29udG9oIHNwZXNpZmlrIHRlcnNlYnV0IG11bmN1bCBwYWRhIHRpbmdrYXQga2VrZXJhcGFuIHRlcnRlbnR1IFtwZXJpa3NhIEBieWJlZV9sYW5ndWFnZV8yMDEwLCBoYWwuIDIzLTI1XS4gRGVuZ2FuIGthdGEgbGFpbiwgdGluZ2thdCBrZWtlcmFwYW4gcGVtYWthaWFuIHN1YXR1IGtvbnN0cnVrc2kgYmVya2FpdGFuIGRlbmdhbiBzZWJlcmFwYSBrdWF0IHVuaXQgdGVyc2VidXQgdGVyc2ltcGFuLCB0ZXJwYXRyaSwgZGFuIG1lbGVrYXQgZGFsYW0ga2hhc2FuYWgga2ViYWhhc2FhbiBwZW51dHVyIHN1YXR1IGJhaGFzYS4gRGF0YSBrZWtlcmFwYW4gc3VhdHUgdW5zdXIga2ViYWhhc2FhbiwgeWFuZyBwYWRhIGRhc2FybnlhIGRpcGVyb2xlaCBkZW5nYW4gbWVsaWhhdCBidWt0aSBwZW1ha2FpYW4gYmFoYXNhIHBhZGEga29ycHVzLCBtZW5qYWRpa2FuIExLb3JwIHNlYmFnYWkgc2FsYWggc2F0dSBwZW55YW5kaW5nIG1ldG9kb2xvZ2lzIGt1bmNpIGRpIGRhbGFtIGthamlhbiBDeEcgW0Bob2ZmbWFubl9kYXRhXzIwMTNdIGthcmVuYSBzZWNhcmEga29uc2VwdHVhbCB0ZXJrYWl0IGRlbmdhbiwgZGFuIGRhcGF0IG1lbmctb3BlcmFzaW9uYWwta2FuLCBhc3Vtc2ktYXN1bXNpIG1lbmRhc2FyIGRpIGRhbGFtIEN4RyBraHVzdXNueWEsIGRhbiBMS29nIHBhZGEgdW11bW55YS4KCiMjIE1vcmZvbG9naSBkYXJpIHN1ZHV0IHBhbmRhbmcgVGF0YWJhaGFzYSBLb25zdHJ1a3Npb25hbCAoQ3hHKSB7I2N4bm1vcnBob2xvZ3l9CgpNb3Jmb2xvZ2kgS29uc3RydWtzaW9uYWwgW0Bib29pal9jb25zdHJ1Y3Rpb25fMjAxNzsgQGJvb2lqX2NvbnN0cnVjdGlvbl8yMDEwXSBtZW1hbmRhbmcgcG9sYSBwZW1iZW50dWthbiBrYXRhLCBzZXBlcnRpIFsqcGVyLSorQUpdLCBzZWJhZ2FpIHN1YXR1ICoqc2tlbWEga29uc3RydWtzaW9uYWwqKi4gUG9sYSBpbmkgZGlwYW5kYW5nIHNlYmFnYWkgKipza2VtYSoqIGthcmVuYSBtZXJ1cGFrYW4gKiphYnN0cmFrc2kvc2tlbWF0aXNhc2kqKiBkYXJpIGh1YnVuZ2FuIGJlbnR1ay1kYW4tbWFrbmEgc2VyYW5na2FpYW4gcGVuY29udG9oYW4gc3Blc2lmaWsgeWFuZyB0ZWxhaCBtdW5jdWwgZGkgZGFsYW0gc3VhdHUgYmFoYXNhIChtaXMuICoqcGVyLWt1YXQqKiwgKipwZXItbGVtYWgqKiwgZGFuICoqcGVyLWtva29oKiogdW50dWsga2FzdXMgWypwZXItKitBSl0pIFtAYm9vaWpfY29uc3RydWN0aW9uXzIwMTAsIGhhbC4gNTQ0XS4gU2tlbWEgaW5pIGtlbXVkaWFuIG1lbmphZGkgdGl0aWsgdG9sYWsgdW50dWsgbWVtYmVudHVrIGthdGEgYmFydSAobWlzLiAqKnBlci1nYW50ZW5nKiosICoqcGVyLWtla2FyKiopIChwZXJpa3NhIFtUYWJlbCBcQHJlZih0YWI6cGVyLXNlbWFudGljcy10YWJsZSldKCNwZXItc2VtYW50aWNzLXRhYmxlKSkuIFNlbGFuanV0bnlhLCBwb2xhIHNlcGVydGkgWypwZXItKitBSl0gZGlrYXRha2FuICoqa29uc3RydWtzaW9uYWwqKiBhdGFzIGRhc2FyIGhhc2lsIHNrZW1hdGlzYXNpIHRlcnNlYnV0IGp1Z2EgbWVydXBha2FuIGtlYmVycGFzYW5nYW4gYmVudHVrLWRhbi1tYWtuYSwgeWFpdHUgKiprb25zdHJ1a3NpKiogW0Bib29pal9jb25zdHJ1Y3Rpb25fMjAxMCwgaGFsLiA1NDU7IEBoaWxwZXJ0X2NvbnN0cnVjdGlvbl8yMDE0LCBoYWwuIDgwXS4gWWFuZyBtZW1iZWRha2FuIHN1YXR1IHNrZW1hIGtvbnN0cnVrc2lvbmFsLCBzZXBlcnRpIFsqcGVyLSorQUpdLCBkZW5nYW4gcGVuY29udG9oYW5ueWEsIG1pc2FsbnlhICoqcGVya29rb2gqKiBkYW4gKipwZXJiYW55YWsqKiwgYWRhbGFoIHRpbmdrYXQga2V0ZXJwZXJpbmNpYW4gdW5zdXIgYmVudHVrIGRhbiBtYWtuYW55YS4gCgpTZWJhZ2FpIGNvbnRvaCBsYWluLCBwZXJ0aW1iYW5na2FuIHNrZW1hIHBlbWJlbnR1a2FuIGthdGEgYmVuZGEgZGV2ZXJiYWwgWypwZS0qK1ZlcmJhXSBwYWRhIEJJbmQuIFNlYmFnaWFuIHVuc3VyIGZvcm1hbC9iZW50dWsgZGFyaSBza2VtYSBpbmksIHlhaXR1IHVuc3VyIFZlcmJhLW55YSBiZXJzaWZhdCBza2VtYXRpcy90ZXJidWthLCBzZWRhbmdrYW4gc2ViYWdpYW4gbGFpbm55YSwgeWFpdHUgdW5zdXIgYXdhbGFubnlhLCBiZXJzaWZhdCBzcGVzaWZpay90ZXRhcCBkYW4gZGlpc2kgb2xlaCAqcGUtKiAoZGVuZ2FuIGtlYmVyYWdhbWFuIGFsb21vcmZpIG5hc2FsIGRhcmkga29uc29uYW4gYXdhbCBrYXRhIGtlcmphIHlhbmcgbWVuamFkaSBkYXNhcm55YSkuIFNlbGFuanV0bnlhLCBrdXR1YiBtYWtuYSBkYXJpIHNrZW1hIFsqcGUtKitWZXJiYV0ganVnYSBiZXJzaWZhdCBsZWJpaCBza2VtYXRpcyAoeWFuZyBzZWNhcmEgYWJzdHJhayBtZXJ1anVrIGtlcGFkYSAnb3JhbmcgeWFuZyBtZWxha3VrYW4gc2VzdWF0dScgc2VwZXJ0aSBkaW55YXRha2FuIG9sZWgga2F0YSBrZXJqYSBkYXNhcm55YSkgZGliYW5kaW5na2FuIGRlbmdhbiBtYXNpbmctbWFzaW5nIHBlbmNvbnRvaGFubnlhLiBNYWtuYSBwZW5jb250b2hhbi1wZW5jb250b2hhbiBza2VtYSBbKnBlLSorVmVyYmFdIGJlcnNpZmF0IGxlYmloIHRlcnBlcmluY2kgZGFuIHRpZGFrIHNlcGVudWhueWEgZGFwYXQgZGlwZXJraXJha2FuIGxhbmdzdW5nIGJlcmRhc2Fya2FuIGt1dHViIG1ha25hIGRhcmkgc2tlbWEga29uc3RydWtzaW9uYWxueWEuIENvbnRvaG55YSwga2F0YSAqKnBlcmVuYW5nKiogZGFuICoqcGVuZWxpdGkqKiB0aWRhayBoYW55YSBiZXJhcnRpICdvcmFuZyB5YW5nIG1lbGFrdWthbiBzZXN1YXR1JyBzZXBlcnRpIHlhbmcgZGlueWF0YWthbiBvbGVoIHVuc3VyIHZlcmJhbnlhOyBwZW51dHVyIEJJbmQgdW11bW55YSBtZW5nZXRhaHVpIGJhaHdhICoqcGVyZW5hbmcqKiBidWthbmxhaCBzZW1iYXJhbmcgJ29yYW5nIHlhbmcgYmVyZW5hbmcnLCB0YXBpIG1lcmVrYSB5YW5nIG1lbWlsaWtpIGtlbWFtcHVhbiB1bnR1ayBiZXJlbmFuZyBzZWNhcmEgYmFpayAodW11bW55YSBhdGxpdCkuIEJlZ2l0dSBwdW4gaGFsbnlhICoqcGVuZWxpdGkqKiB5YW5nIGJ1a2FuIHNla2VkYXIgJ29yYW5nIHlhbmcgbWVuZWxpdGknLCB0YXBpIG1lcmVrYSB5YW5nIG1lbGFrdWthbiBwZW5lbGl0aWFuIHNlYmFnYWkgc3VhdHUgcGVrZXJqYWFuLiAKCkJhaHdhIHBlbnV0dXIgQkluZCB1bXVtbnlhIG1lbmdldGFodWkgbWFrbmEgbGF6aW0ga2VkdWEga2F0YSB0ZXJzZWJ1dCwgeWFuZyBtZWxlYmloaSBtYWtuYSBza2VtYXRpcyBza2VtYSBrb25zdHJ1a3Npb25hbG55YSwgbWVuZ2luZGlrYXNpa2FuIGtlLWtvbnN0cnVrc2lvbmFsLWFuIGthdGEta2F0YSB0ZXJzZWJ1dCBzZWJhZ2FpIHN1YXR1IHVuaXQgc2ltYm9saXMgYmVudHVrLWRhbi1tYWtuYSB5YW5nIG1lbmphZGkgYmFnaWFuIGRhcmkga2hhc2FuYWggcGVuZ2V0YWh1YW4ga2UodGF0YSliYWhhc2FhbiBzZW9yYW5nIHBlbnV0dXIgW0BoaWxwZXJ0X2NvbnN0cnVjdGlvbl8yMDE0LCBoYWwuIDgwXS4gRGVuZ2FuIGthdGEgbGFpbiwgZGFyaSBzdWR1dCBwYW5kYW5nIEN4RywgZmFrdGEgYmFod2Egc3VhdHUgYmVudHVrYW4ga2F0YSB5YW5nIHRpZGFrIHNlcGVudWhueWEgbWV3YXJpc2kgc2lmYXQgc2VtYW50aXMgc2tlbWFueWEsIGhpbmdnYSBzYW1wYWkgcGFkYSB0aW5na2F0IGlkaW9zaW5rcmV0aWsgKHNlcGVydGkgcGFkYSAqKnBlcmVuYW5nKiogZGFuICoqcGVuZWxpdGkqKiksIHRpZGFrIHNlbWF0YS1tYXRhIG1lbWJ1YXQvbWVtYnVrdGlrYW4ga2F0YS1rYXRhIHRlcnNlYnV0IHRlcnNpbXBhbiBkaSBkYWxhbSBhcGEgeWFuZyBkaXNlYnV0IGRlbmdhbiAqKmJpbGlrIGxla3Npa29uKio7IHNlZGFuZ2thbiBrYXRhLWthdGEgeWFuZyBhcnRpbnlhIGRhcGF0ICoqZGlwcmVkaWtzaSoqIGRhbi9hdGF1ICoqbWVudXJ1dGkgYXR1cmFuKioga29uc3RydWtzaW9uYWwgc2tlbWFueWEgKip0aWRhayAocGVybHUpIHRlcnNpbXBhbioqIGRpIGRhbGFtIGtoYXNhbmFoIGtlYmFoYXNhYW4gKGthcmVuYSBjdWt1cCBzYW1wYWkgcGFkYSBza2VtYSBwZW1iZW50dWtueWEpLiBNZWxhaW5rYW4sIEN4RyBtZW1hbmRhbmcgYmFod2Egc2VtdWEgaGFsIHlhbmcgcGVudXR1ciBrZXRhaHVpIGtldGlrYSBwZW51dHVyIHRlcnNlYnV0IG1lbmdldGFodWkgc3VhdHUgYmFoYXNhIG1lcnVwYWthbiBiYWdpYW4gZGFyaSBraGFzYW5haCBrZWJhaGFzYWFuIHBlbnV0dXIgdGVyc2VidXQuIEtoYXNhbmFoIGluaSB0ZXJkaXJpIGRhcmkgamVqYXJpbmcga29uc3RydWtzaSwga2ViZXJwYXNhbmdhbiBiZW50dWstZGFuLW1ha25hLCB5YW5nIGJlcmJlZGEgcGFkYSB0YXRhcmFuIGtldGVycGVyaW5jaWFuL2tlc2tlbWF0aXNhbiwga29tcGxla3NpdGFzLCBkYW4ga2V0ZXJwYXRyaWFubnlhIChsYXppbSBhdGF1IGJhcnUvbm92ZWwpIFtAbGFuZ2Fja2VyX2Vzc2VudGlhbHNfMjAxMywgaGFsLiAyMTsgQGdvbGRiZXJnX2NvbnN0cnVjdGlvbnNfMjAwNiwgaGFsLiA1XS4gCgpKYWRpLCBiZXJkYXNhcmthbiBwZW5kZWthdGFuIGxpbmd1aXN0aWsgYmVyZGFzYXJrYW4gcGVuZ2d1bmFhbiAoKnVzYWdlLWJhc2VkIGxpbmd1aXN0aWNzKiksIHBlbnV0dXIgYWthbiBtZW55aW1wYW4ga2F0YS1rYXRhIHNwZXNpZmlrIGRhcmkgc3VhdHUgcG9sYSBwZW1iZW50dWthbiBrYXRhLCBiZXNlcnRhIHNlZ2FsYSByaW5jaWFuIGtvbnRla3N0dWFsLCBmb3JtYWwtc3RydWt0dXJhbCwgZGFuIHNlbWFudGlzIGRhcmkgcGVtYWthaWFuIGthdGEgdGVyc2VidXQsIHNlcGFuamFuZyBrYXRhLWthdGEgc3Blc2lmaWsgdGVyc2VidXQgbXVuY3VsIGRlbmdhbiBpbnRlbnNpdGFzIHlhbmcgdGluZ2dpL3NlcmluZyBbQGJ5YmVlX2xhbmd1YWdlXzIwMTAsIGhhbC4gMjQtMjU7IEBoaWxwZXJ0X2NvbnN0cnVjdGlvbl8yMDE0LCBoYWwuIDY2LTY3XTsgaGFsIGluaSB0ZXJsZXBhcyBkYXJpIGFwYWthaCBwb2xhIHlhbmcgbWVuZGFzYXJpIGthdGEta2F0YSB0ZXJzZWJ1dCBiZXJpc2lmYXQgcHJlZGlrdGlmL3RlcmF0dXIgZGFuIHRpZGFrIGlkaW9zaW5rcmV0aWsuIEhpbHBlcnQgWy1AaGlscGVydF9jb25zdHJ1Y3Rpb25fMjAxNCwgaGFsLiA4MF0gbWVuYW1iYWhrYW4gYmFod2EgcGVyYW4gKiprb25zdHJ1a3NpKiogeWFuZyBkaXNlbWF0a2FuIHBhZGEgc3VhdHUgc2tlbWEga29uc3RydWtzaW9uYWwgbW9yZm9sb2dpcyBkaXRhbmRhaSBkZW5nYW4ga2VtYW1wdWFuIHBlbnV0dXIgdW50dWsgbWVtYmVudHVrIGRhbiBtZW1wcm9zZXMgYmVudHVrYW4ga2F0YSBiYXJ1IGJlcmRhc2Fya2FuIHNrZW1hIHRlcnNlYnV0LgoKIyMjIEtlcmFnYW1hbiBzZW1hbnRpcyBwZW5jb250b2hhbiBza2VtYSBrb25zdHJ1a2lvbmFsIG1vcmZvbG9naXMgeyNzZW1hbnRpY3N1YnNjaGVtYX0KClBhbmRhbmdhbiBrb25zdHJ1a3Npb25hbCBiYWh3YSBwZW5hdGFhbiB1bnN1ciBsZWtzaWthbCBkYW4gZ3JhbWF0aWthbCBkaWRhc2FyaSBhdGFzIGtoYXNhbmFoIHlhbmcgc2FtYSwgeWFpdHUgamVqYXJpbmcga29uc3RydWtzaSB5YW5nIGRpaHVidW5na2FuIHNlY2FyYSBwZXdhcmlzYW4gKCppbmhlcml0YW5jZSopLCBtZW11bmdraW5rYW4ga2FqaWFuIHRlcmhhZGFwIGtlYmVyYWdhbWFuIHNrZW1hLXNrZW1hIGJhd2FoYW4gKCpzdWItc2NoZW1hcyopIGRhcmkgc3VhdHUga29uc3RydWtzaSBbQHRyb3VzZGFsZV9jb25zdHJ1Y3Rpb25fMjAxNiwgaGFsLiA2OV0uIFNlYmFnYWkgY29udG9oLCBza2VtYSBrYXRhIGJlbmRhIGRldmVyYmFsIFsqcGUtKitWZXJiYV0geWFuZyB0ZWxhaCBkaXNpbmdndW5nIHNlYmVsdW1ueWEgbWVtaWxpa2kgYmVyYWdhbSBqZWphcmluZyBtYWtuYSwgc2VwZXJ0aSA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5wZWxha3UvYWdlbjwvc3Bhbj4gKCoqcGVtYmVsaSoqKSwgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+aW5zdHJ1bWVuL2FsYXQ8L3NwYW4+ICgqKnBlbmdoYXB1cyoqKSwgZGFuIDxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPnBlbmRlcml0YTwvc3Bhbj4gKCoqcGVzdXJ1aCoqKSBbcGVyaWtzYSBAcHJpbWFoYWRpLXdpamF5YS1yLl9tZXRvbnlteV8yMDEzLCBoYWwuIDc3LCB5YW5nIG1lbmd1bGFzIGh1YnVuZ2FuIG1ldG9uaW1pcyB0ZXJrYWl0IHBlbWJlbnR1a2FuIGthdGEgZGVuZ2FuIGF3YWxhbiBwYWRhIEJJbmQuXS4gSGFsIGluaSBtZW51bmp1a2thbiBrZWJlcmFnYW1hbiBtYWtuYSBkYXJpIHNhdHUgc2tlbWEgWypwZS0qK1ZlcmJhXSBtdW5jdWwgcGFkYSB0YXRhcmFuIHNrZW1hIGJhd2FoYW5ueWEgW0B0cm91c2RhbGVfY29uc3RydWN0aW9uXzIwMTYsIGhhbC4gNjldOyBza2VtYSBiYXdhaGFuIHRlcnNlYnV0IHNlY2FyYSBtYW5kaXJpIG1lbWlsaWtpIGJhdGFzYW4tYmF0YXNhbiB0ZXJ0ZW50dSwgYmFpayBmb3JtYWwgZGFuIHNlbWFudGlzLCB5YW5nIHRpZGFrIGRpbWlsaWtpIHNlcGVudWhueWEgb2xlaCBwb2xhIHV0YW1hbnlhIFtwZXJpa3NhIGxlYmloIGxhbmp1dCBAYm9vaWpfY29uc3RydWN0aW9uXzIwMTAsIGhhbC4gNTQ4XS4gUGFkYSBjb250b2ggc2tlbWEgWypwZS0qK1ZlcmJhXSwgYmF0YXNhbi1iYXRhc2FuIHNrZW1hIGJhd2FoYW5ueWEgYmlzYSBiZXJ1cGEgKGkpIHRpcGUgKHNlbWFudGlzKSBrYXRhIGtlcmphIHlhbmcgdW11bW55YSBkaXBha2FpIGRpIGRhbGFtIHNrZW1hIHRlcnNlYnV0LCAoaWkpIHRyYW5zaXRpZml0YXMga2F0YSBrZXJqYS1ueWEsIGRhbiAoaWlpKSBiYWdhaW1hbmEgYmVudHVrYW4gbm9taW5hIGRlbmdhbiB0aXBlIGthdGEga2VyamEgdGVyc2VidXQgZGlndW5ha2FuIGRpIGRhbGFtIGthbGltYXQgZ3VuYSBtZW55YW1wYWlrYW4gc3VhdHUgbWFrbmEgdGVydGVudHUgKG1pcy4gPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+YWdlbjwvc3Bhbj4sIDxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPnBlbmRlcml0YTwvc3Bhbj4sIGRsbC4pLCB5YW5nIGRhcGF0IGJlcnNpZmF0IGlkaW9zaW5rcmV0aWsuCgpQYWRhIG1ha2FsYWggaW5pLCB1bnN1ciBzZW1hbnRpcyB5YW5nIGFrYW4gZGl1bGFzIGFkYWxhaCB0aXBlIHNlbWFudGlzIGFqZWt0aXZhIHlhbmcgZGlndW5ha2FuIGRhbGFtIGtvbnN0cnVrc2kgWypwZXIqK0FKXS4gVW5zdXIgaW5pIGRhcGF0IG1lbmdnYW1iYXJrYW4gKGkpIHJlbnRhbmdhbiBzZW1hbnRpcyBkYXJpIGtvbnN0cnVrc2lueWEgc2VjYXJhIHVtdW0sIGRhbiAoaWkpIGRpc3RyaWJ1c2kgdGlwZSBza2VtYSBiYXdhaGFuIHNlbWFudGlzIGRhbGFtIGthaXRhbm55YSBkZW5nYW4ganVtbGFoIHRpcGUgZGFuICpoYXBheCogeWFuZyBtZW5jb250b2hrYW4gc2tlbWEtc2tlbWEgYmF3YWhhbiB0ZXJzZWJ1dCAobGloYXQgW0dhbWJhciBcQHJlZihmaWc6c2VtYW50aWNzcGxvdCldKCNzZW1hbnRpY3NwbG90KSBkaSBiYXdhaCkuCgojIERhdGEgZGFuIE1ldG9kb2xvZ2kKCkJhZ2lhbiBpbmkgYWthbiBtZW1hcGFya2FuIChpKSBzdW1iZXIgZGF0YSB5YW5nIGRpZ3VuYWthbiBzZXJ0YSAoaWkpIGxhbmdrYWgtbGFuZ2thaCB5YW5nIGRpbGFrdWthbiBkYWxhbSBtZW1wZXJvbGVoIGRhdGEgeWFuZyBha2FuIGRpYmFoYXMgZGkgW0JhZ2lhbiBcQHJlZihoYXNpbCldKCNoYXNpbCkuIENha3VwYW4gbGViaWggYmFueWFrIGFrYW4gZGliZXJpa2FuIHBhZGEgdW5zdXIga2VkdWEuCgojIyBTdW1iZXIgZGF0YSB7I2tvcnB1c30KCkRhdGEga29ycHVzIEJJbmQgeWFuZyBkaWd1bmFrYW4gcGFkYSBtYWthbGFoIGluaSBhZGFsYWggKkluZG9uZXNpYW4gTGVpcHppZyBDb3Jwb3JhKi4gS29ycHVzIGluaSBtZXJ1cGFrYW4gYmFnaWFuIGRhcmkgKkxlaXB6aWcgQ29ycG9yYSBDb2xsZWN0aW9uKiBbQGJpZW1hbm5fbGVpcHppZ18yMDA3OyBAcXVhc3Rob2ZmX2luZG9uZXNpYW5fMjAxM11eW1Blcmlrc2EgcHJhbmFsYSBiZXJpa3V0OiBodHRwOi8vY29ycG9yYTIuaW5mb3JtYXRpay51bmktbGVpcHppZy5kZS9kb3dubG9hZC5odG1sXSBkYW4gZGFwYXQgZGl1bmR1aCBzZWNhcmEgY3VtYS1jdW1hLiBLb3JwdXMgQkluZCBpbmkgdGVyc2ltcGFuIGRhbGFtIGJlbnR1ayB0ZWtzIGthbGltYXQgYWNhayB5YW5nIGRpa3VtcHVsa2FuIG1lbGFsdWkgaW50ZXJuZXQuIEp1bWxhaCBrYWxpbWF0IGRhbiBrYXRhIGRhcmkgbWFzaW5nLW1hc2luZyBiZXJrYXMgdGVrcyB5YW5nIHNhYXQgaW5pIHRlcnNlZGlhIHVudHVrICpJbmRvbmVzaWFuIExlaXB6aWcgQ29ycG9yYSogZGl0YW1waWxrYW4gcGFkYSBbVGFiZWwgXEByZWYodGFiOmxlaXB6aWctY29ycHVzKV0oI2xlaXB6aWctY29ycHVzKSBiZXJpa3V0LgoKYGBge3IgbGVpcHppZy1jb3JwdXN9CmNvcnB1c190b3RhbF93b3JkcyA8LSBsZWlwemlnX2NvdW50ICU+JSAuJFNpemUgJT4lIHN0cl9yZXBsYWNlX2FsbCgiLCIsICIiKSAlPiUgYXMubnVtZXJpYygpICU+JSBzdW0oKSAlPiUgZm9ybWF0KGJpZy5tYXJrPSIuIiwgZGVjaW1hbC5tYXJrPSIsIikKbGVpcHppZ19jb3VudCAlPiUKICByZW5hbWUoYEJlcmthcyBrb3JwdXNgPUNvcnB1cywgYEp1bWxhaCBrYXRhYD1TaXplKSAlPiUKICBtdXRhdGUoYEp1bWxhaCBrYXRhYD1zdHJfcmVwbGFjZV9hbGwoYEp1bWxhaCBrYXRhYCwgIiwiLCAiLiIpKSAlPiUKICBrbml0cjo6a2FibGUoY2FwdGlvbj0iSnVtbGFoIGtlc2VsdXJ1aGFuIGthdGEgZGFyaSBtYXNpbmctbWFzaW5nIGJlcmthcyBrb3JwdXMgcGFkYSAqSW5kb25lc2lhbiBMZWlwemlnIENvcnBvcmEqLiIsIHJvdy5uYW1lcyA9IFQpCmBgYAoKSnVtbGFoIGthbGltYXQgZGFyaSBtYXNpbmctbWFzaW5nIGtvcnB1cyBkaXR1bmp1a2thbiBkYWxhbSBiYWdpYW4gbmFtYSBiZXJrYXMga29ycHVzIHRlcnNlYnV0IChtaXMuIGAuLi5fMU0tc2VudGVuY2VzYCBtZW5naW5kaWthc2lrYW4ga29ycHVzIGJlcmp1bWxhaCBzYXR1IGp1dGEga2FsaW1hdCkuIFVrdXJhbiBrZXNlbHVydWhhbiBkYXJpIHRpZ2EgYmVsYXMgYmVya2FzIGtvcnB1cyB5YW5nIGRpZ3VuYWthbiBiZXJqdW1sYWggYHIgY29ycHVzX3RvdGFsX3dvcmRzYCBrYXRhLgoKIyMgUGVuZ29sYWhhbiBkYXRhIHsjcGVuZ29sYWhhbn0KIyMjIFBlbmdnYWxpYW4ga2F0YS1rYXRhIHBvdGVuc2lhbCBwZW5jb250b2hhbiBkYXJpIHNrZW1hIFsqcGVyKitBSl0KClByb3NlcyBwZW1lcm9sZWhhbiBkYXRhIGRhcmkga29ycHVzIGRhbiBhbmFsaXNpc255YSBkaWxha3VrYW4gc2VwZW51aG55YSBtZW5nZ3VuYWthbiBzZWp1bWxhaCBmdW5nc2kgeWFuZyBhZGEgZGFsYW0gcHJvZ3JhbSAqUiouIFBlcnRhbWEsIHNlY2FyYSBraHVzdXMsIHBlbnVsaXMgbWVyYW5jYW5nIG5hc2thaCBwZW1yb2dyYW1hbiB1bnR1ayBtZW5lbHVzdXJpIGthdGEta2F0YSBwb3RlbnNpYWwgeWFuZyBtZW5jb250b2hrYW4gcG9sYSBbKnBlciorQUpdIHBhZGEga2VzZWx1cnVoYW4ga29ycHVzLiBLZWR1YSwgcGVuY2FyaWFuIGRpbGFrdWthbiBkZW5nYW4gbWVyYW5jYW5nIHBvbGEgcGVuY2FyaWFuIHlhbmcgZGlrZW5hbCBkZW5nYW4gc2VidXRhbiAqcmVndWxhciBleHByZXNzaW9ucyogKFJlZ0V4KSBbbGloYXQgQHdpY2toYW1fcl8yMDE3LCBoYWwuIDIwNy0yMDddLiBSZWdFeCB5YW5nIGRpc3VzdW4gYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDogYFxcYig/aSkobWVtfGRpfHRlcikocGVyK1thLXotXXszLH0pXFxiYC4gUmVnRXggaW5pIGRhcGF0IGRpYWxpaGJhaGFzYWthbiBtZW5qYWRpOgoKPiBjYXJpbGFoIGthdGEta2F0YSAoaSkgeWFuZyBiaXNhIHRlcmRpcmkgYXRhcyBodXJ1ZiBrZWNpbCBhdGF1IGJlc2FyXltIYWwgaW5pIHVudHVrIG1lbmdhbnRpc2lwYXNpIGtlbXVuY3VsYW4ga2F0YSBkaSBhd2FsIGthbGltYXQgeWFuZyBkaWF3YWxpIGRlbmdhbiBodXJ1ZiBrYXBpdGFsIChtaXMuICoqTWVtcGVyZXJhdCoqKS5dLCAoaWkpIHlhbmcgZGlhd2FsaSBvbGVoIGF3YWxhbiAqbWVtLSosICp0ZXItKiwgZGFuICpkaS0qLCAoaWlpKSB5YW5nIGtlbXVkaWFuIGRpaWt1dGkgb2xlaCBhd2FsYW4gdGFyZ2V0ICpwZXItKiwgZGVuZ2FuIGh1cnVmICpyKiBtdW5jdWwgcGFsaW5nIHNlZGlraXQgc2F0dSBrYWxpIGF0YXUgbGViaWheW0hhbCBpbmkgZGlsYWt1a2FuIHVudHVrIG1lbmdhbnRpc2lwYXNpIGFkYW55YSBrYXRhIGRhc2FyIHlhbmcgZGlhd2FsaSBodXJ1ZiAqciogbmFtdW4gdGlkYWsgZGlsdWx1aGthbiBkZW5nYW4gKnIqIHBhZGEgYXdhbGFuICpwZXItKi1ueWEuXSAoZGl0YW5kYWkgZGVuZ2FuIGArYCksIGtlbXVkaWFuIChpdikgZGlpa3V0aSBvbGVoIGthcmFrdGVyIGFsZmFiZXRpcyBkYW4gc3RyaXAgKC0pXltUYW5kYSBgJy0nYCBkaWlrdXRrYW4gdW50dWsgbWVuYW5na2FwIGtlbXVuZ2tpbmFuIGFkYW55YSByZWR1cGxpa2FzaSwgc2VwZXJ0aSAqZGlwZXJiZXNhci1iZXNhciogeWFuZyBiZW5hci1iZW5hciBtdW5jdWwgZGFsYW0ga29ycHVzLl0gcGFsaW5nIHNlZGlraXQgYmVyanVtbGFoIHRpZ2Ega2FyYWt0ZXIgYXRhdSBsZWJpaCAoYHszLH1gKS4KCk5hc2thaCBwZW1yb2dyYW1hbiB5YW5nIGRpcmFuY2FuZyBqdWdhIHNlY2FyYSBvdG9tYXRpcyBtZW5naGFzaWxrYW4gKGkpIGRhZnRhciBrYXRhIHlhbmcgYmVyaGFzaWwgZGl0YW5na2FwIG9sZWggUmVnRXgtbnlhLCAoaWkpIGZyZWt1ZW5zaSBrZW11bmN1bGFubnlhLCBkYW4gKGlpaSkgbmFtYSBiZXJrYXMga29ycHVzIGRpIG1hbmEga2F0YSB0ZXJzZWJ1dCBkaXRlbXVrYW4uIEhhc2lsIGluaSBkaXRhbXBpbGthbiBwYWRhIFtUYWJlbCBcQHJlZih0YWI6cGVyLXdvcmQtY29ycHVzKV0oI3Blci13b3JkLWNvcnB1cykgYmVyaWt1dC4KCmBgYHtyIHBlci13b3JkLWNvcnB1c30KcGVyX3dvcmRzX2NvcnB1cyAlPiUgYXJyYW5nZShkZXNjKG4pKSAlPiUgdG9wX24oNSxuKSAlPiUKICByZW5hbWUoS2F0YT1tYXRjaCwgYEJlcmthcyBrb3JwdXNgPWNvcnB1c19pZCwgS2VrZXJhcGFuPW4pICU+JQogIG11dGF0ZShLZWtlcmFwYW49Zm9ybWF0KEtla2VyYXBhbiwgYmlnLm1hcms9Ii4iLCBkZWNpbWFsLm1hcms9IiwiKSkgJT4lCiAga25pdHI6OmthYmxlKGNhcHRpb24gPSAiSGFzaWwgYXdhbCBsaW1hIHRlcmF0YXMgZGFyaSBwZW5jYXJpYW4ga2F0YS1rYXRhIHlhbmcgZGlhd2FsaSBkZW5nYW4gKm1lbXBlci0qLCAqZGlwZXItKiwgZGFuICp0ZXJwZXItKiBkaSBkYWxhbSBrb3JwdXMuIiwgcm93Lm5hbWVzID0gVCkKYGBgCgpZYW5nIHBlbnRpbmcgZGljYXRhdCBhZGFsYWggUmVnRXggeWFuZyBkaXJhbmNhbmcgaGFueWEgbWVyaW5jaSB0aWdhIGF3YWxhbiBkaWF0ZXNpcyB5YW5nIGxhbmdzdW5nIGRpaWt1dGkgb2xlaCAqcGVyLSosIGJ1a2FuIGthdGEgZGFzYXJueWEgc2VjYXJhIHNwZXNpZmlrOyBjYWxvbiBrYXRhIGRhc2FybnlhIHNlY2FyYSBsZWJpaCBsdWFzIGluZ2luIGRpdGFuZ2thcCBkZW5nYW4ga2FyYWt0ZXIgYWxmYWJldGlzIHBhZGEgYmFnaWFuIGBbYS16LV17Myx9YCBkYXJpIHBvbGEgcGVuY2FyaWFubnlhLiBLYXJlbmEgaXR1bGFoIHBhZGEgW1RhYmVsIFxAcmVmKHRhYjpwZXItd29yZC1jb3JwdXMpXSgjcGVyLXdvcmQtY29ycHVzKSBtdW5jdWwga2F0YS1rYXRhIHNlcGVydGkgKipkaXBlcmx1a2FuKiogZGFuICoqbWVtcGVyaGF0aWthbioqIHlhbmcgdGlkYWsgdGVybWFzdWsga2UgZGFsYW0gYmFoYXNhbiBtYWthbGFoIGluaS4KCiMjIyBQZW1lY2FoYW4gc3RydWt0dXIgbW9yZm9sb2dpcyBrYXRhIGRlbmdhbiAqTW9ycGhJbmQqCgpVbnR1ayBtZW5nZXRhaHVpIGthdGEgbWFuYSB5YW5nIG1lbmNvbnRvaGthbiBwb2xhIFsqcGVyLSorQUpdIGRhcmkgZGFmdGFyIGthdGEgcGFkYSBbVGFiZWwgXEByZWYodGFiOnBlci13b3JkLWNvcnB1cyldKCNwZXItd29yZC1jb3JwdXMpLCBwZW51bGlzIG1lbmphbGFua2FuIG5hc2thaCBwZW1yb2dyYW1hbiB5YW5nIGRpc2VidXQgKk1vcnBoSW5kKiBbQGxhcmFzYXRpX2luZG9uZXNpYW5fMjAxMV0uICpNb3JwaEluZCogZGlyYW5jYW5nIHVudHVrIG1lbWJlZGFoIHN0cnVrdHVyIGludGVybmFsIGthdGEgZGFsYW0gQkluZC4gUHJvZ3JhbSBpbmkgZGFwYXQganVnYSBkaWphbGFua2FuIG1lbGFsdWkgKlIqXltQZW51bGlzIGJlcnRlcmltYSBrYXNpaCBrZXBhZGEgW0thcmxpbmEgRGVuaXN0aWFdKGh0dHA6Ly91bmktdHVlYmluZ2VuLmFjYWRlbWlhLmVkdS9rYXJsaW5hZGVuaXN0aWEpIChFYmVyaGFyZCBLYXJscyBVbml2ZXJzaXR5IG9mIFTDvGJpbmdlbiwgSmVybWFuKSB5YW5nIGRlbmdhbiBzZW5hbmcgaGF0aSBiZXJiYWdpIGNvbnRvaCBtZW5qYWxhbmthbiAqTW9ycGhJbmQqIG1lbGFsdWkgKlIqLl0uIEphZGksIGtldGlrYSAqTW9ycGhJbmQqIGRpYmVyaWthbiBtYXN1a2FuIGthdGEgc2VwZXJ0aSAqKm1lbXBlcmt1YXQqKiwgKk1vcnBoSW5kKiBha2FuIG1lbWVjYWggYXdhbGFuIGRhbiBrYXRhIGRhc2FybnlhLCBzZWthbGlndXMgbWVuYW5kYWkga2VsYXMga2F0YSBkYXJpIGthdGEgZGFzYXJueWEuIEtlbHVhcmFuIHBlbWJlZGFoYW4ga2F0YSBkYXJpICpNb3JwaEluZCogZGl0dW5qdWtrYW4gcGFkYSBrb2xvbSAqKmBLZWx1YXJhbiBNb3JwaEluZGAqKiBwYWRhIFtUYWJlbCBcQHJlZih0YWI6cGVyLWFkaildKCNwZXItYWRqKSBiZXJpa3V0LgoKYGBge3IgcGVyLWFkan0KIHBlcl9hZGogJT4lCiAgdG9wX24oNSwgbikgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBtdXRhdGUodGFnPXN0cl9yZXBsYWNlX2FsbCh0YWcsICIoPC4+KSIsICJgXFwxYCIpKSAlPiUKICByZW5hbWUoS2F0YT1tYXRjaCwgYEF3YWxhbiAoZGlhdGVzaXMpYD1wcmVmLCBgS2F0YSBkYXNhcmA9YmFzZSwgYEtlbHVhcmFuICpNb3JwaEluZCpgPXRhZykgJT4lCiAga25pdHI6OmthYmxlKGNhcHRpb24gPSAiTnVraWxhbiBkYXRhIGRhcmkgcG9sYSBbKnBlciorQUpdIHlhbmcgYmVyaGFzaWwgZGlrZW5hbGkgb2xlaCBzaXN0ZW0gZGFsYW0gKk1vcnBoSW5kKi4iLCByb3cubmFtZXMgPSBUKQpgYGAKCllhbmcgcGVybHUgZGlwZXJoYXRpa2FuIHRlcmthaXQgKk1vcnBoSW5kKiBhZGFsYWggcHJvZ3JhbSBpbmkgYmVsdW0gc2VwZW51aG55YSBtZW5nZW5hbGkgZGFuIG1lbWJlZGFoIGthdGEta2F0YSBtYXN1a2FubnlhLiBLYXRhLWthdGEgeWFuZyB0aWRhayBkaWtlbmFsaSB0ZXJzZWJ1dCBha2FuIGRpdGFuZGFpIGRlbmdhbiBgPHg+YC4gUGVyaGF0aWthbiBbVGFiZWwgXEByZWYodGFiOnBlci11bmtub3duLXRhZyldKCNwZXItdW5rbm93bi10YWcpIGJlcmlrdXQuCgpgYGB7ciBwZXItdW5rbm93bi10YWcsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnJlYWRfZGVsaW0oInBlcl91bmtub3duX3RhZy50eHQiLCBkZWxpbT0iXHQiKSAlPiUgCiAgZmlsdGVyKHBlcl9hZGo9PSd5JykgJT4lIAogIHNhbXBsZV9uKDMpICU+JQogIGJpbmRfcm93cyhyZWFkX2RlbGltKCJwZXJfdW5rbm93bl90YWcudHh0IiwgZGVsaW09Ilx0IikgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKGlzLm5hKHBlcl9hZGopKSAlPiUKICAgICAgICAgICAgICBzYW1wbGVfbigyKSkgJT4lCiAgc2VsZWN0KG1hdGNoLCB0YWcpICU+JQogIG11dGF0ZSh0YWc9c3RyX3JlcGxhY2VfYWxsKHRhZywgIig8Lj4pIiwgImBcXDFgIikpICU+JQogIHJlbmFtZShLYXRhPW1hdGNoLCBgS2VsdWFyYW4gKk1vcnBoSW5kKmA9dGFnKSAlPiUKICBrbml0cjo6a2FibGUoY2FwdGlvbiA9ICJOdWtpbGFuIGRhdGEga2F0YS1rYXRhIHlhbmcgdGlkYWsgZGlrZW5hbGkgb2xlaCBzaXN0ZW0gZGFsYW0gKk1vcnBoSW5kKi4iLCByb3cubmFtZXMgPSBUKQpgYGAKClVudHVrIGthdGEta2F0YSB5YW5nIHRpZGFrIGRpYmVkYWggb2xlaCAqTW9ycGhJbmQqIGluaSwgcGVudWxpcyBtZW1lcmlrc2Egc2F0dSBwZXIgc2F0dSBkYWZ0YXIga2F0YS1rYXRhbnlhLiBUdWp1YW5ueWEgYWRhbGFoIHVudHVrIG1lbmdldGFodWkgYXBhYmlsYSAoaSkgbWVtYW5nIHRlcmRhcGF0IGthdGEgeWFuZyBtZW5jb250b2hrYW4gc2tlbWEgWypwZXItKitBSl0gdGV0YXBpIGJlbHVtIGFkYSBwYWRhIHNpc3RlbSAqTW9ycGhJbmQqLCBkYW4gKGlpKSB0ZXJkYXBhdCBrYXRhIHlhbmcgc3VkYWggZGlrZW5hbGksIHNlcGVydGkgKiptZW1wZXJrdWF0KiosIG5hbXVuIHRlcmRhcGF0IGtlc2FsYWhhbiBkYWxhbSBwZW51bGlzYW5ueWEgZGkgZGFsYW0ga29ycHVzLCBtZW5qYWRpICoqbWVtcGVya3VhcioqLiBEYXRhIHRhbWJhaGFuIHlhbmcgZGl0ZW11a2FuIGRhcmkgaGFzaWwgcGVtZXJpa3NhYW4gbWFuZGlyaSB0ZXJzZWJ1dCBkaWdhYnVuZ2thbiBkZW5nYW4gZGF0YSB5YW5nIHRlbGFoIGJlcmhhc2lsIGRpa2VuYWxpIG9sZWggKk1vcnBoSW5kKjsgZGF0YSBpbmkga2VtdWRpYW4gbWVuamFkaSBkYXNhciBwZW1iYWhhc2FuIHBhZGEgW0JhZ2lhbiBcQHJlZihoYXNpbCldKCNoYXNpbCkgYmVyaWt1dC4gCgojIyMgU2VqdW1sYWgga2VuZGFsYSB7I2tlbmRhbGF9CgpTZWxhaW4gdGVyZGFwYXRueWEgc2VqdW1sYWgga2F0YSB5YW5nIGJlbHVtIGRpa2VuYWxpIG9sZWggKk1vcnBoSW5kKiwgc2lzdGVtIHBlbmNhcmlhbiBtZW5nZ3VuYWthbiBSZWdFeCB5YW5nIGRpcGFwYXJrYW4gc2ViZWx1bW55YSB1dGFtYW55YSBqdWdhIG1lbXVuY3Vsa2FuIGJlYmVyYXBhIGtlbmRhbGEuIFNhbGFoIHNhdHUgeWFuZyBwZW50aW5nIGFkYWxhaCBrZW11bmdraW5hbiBhZGFueWEgc2FsYWgga2V0aWsgKCp0eXBvKiksIGRhcmkgcGVuZ2d1bmEgYmFoYXNhIHlhbmcgdGVyZGFwYXQgZGFsYW0ga29ycHVzIHNlcGVydGkgcGFkYSBzaXRpcmFuIChAZGlwZXJzaWFwKSBiZXJpa3V0LgoKKEBkaXBlcnNpYXApICJLZWR1YSwga2VzZXBha2F0YW4gaHVrdW1hbiB0ZXJoYWRhcCBoYWwtaGFsIHlhbmcgdGVsYWggKipkaXBlcnNpYXAqKiBrYW4uIChpbmQtaWRfd2ViXzIwMTVfM006MTI3NjU2MileW1BhZGEgc2V0aWFwIGFraGlyIGNvbnRvaCwgaW5mb3JtYXNpIGRpIGRhbGFtIHRhbmRhIGt1cnVuZyBiZXJpc2kgKGkpIG5hbWEgYmVya2FzIGtvcnB1cyBkYW4gKGlpKSBiYXJpcyBrYWxpbWF0IGtlYmVyYXBhIHBlbWFrYWlhbiBzdWF0dSBrYXRhIGRpdGVtdWthbjsga2VkdWFueWEgZGlwaXNhaGthbiBvbGVoIHRhbmRhICI6Ii5dLgoKS2F0YSAqKmRpcGVyc2lhcCoqIHBhZGEga2FsaW1hdCAoQGRpcGVyc2lhcCkgc2VoYXJ1c255YSB0aWRhayBkaXBpc2Foa2FuIG9sZWggc3Bhc2kgZGVuZ2FuIGFraGlyYW4gKi1rYW4qLiBBa2hpcmFuIGluaSB0aWRhayBkaXRhbmdrYXAgb2xlaCByYW5jYW5nYW4gUmVnRXgga2FyZW5hIGRpcmFuY2FuZyBhZ2FyIGtvbXB1dGVyIGRhcGF0IG1lbmdldGFodWkgYXBhIHlhbmcgZGltYWtzdWQgZGVuZ2FuIGthdGE6IHNlcmFuZ2thaWFuIGthcmFrdGVyIGFsZmFiZXRpcyAoYXRhdSBhbGZhbnVtZXJpayBkYW4gc3RyaXApIHlhbmcgZGlwaXNhaGthbiBvbGVoIHNwYXNpLiAqTW9ycGhJbmQqLCBha2FuIHRldGFwaSwgYmVyaGFzaWwgbWVtZWNhaCAqKmRpcGVyc2lhcCoqIHBhZGEgKEBkaXBlcnNpYXApIG1lbmphZGkgKipgZGkrcGVyK3NpYXA8YT5fVlNQYCoqLiBEYWxhbSBoYWwgaW5pLCAqKmRpcGVyc2lhcCoqIHBhZGEgKEBkaXBlcnNpYXApIG1lbmphZGkgKmZhbHNlIHBvc2l0aXZlKiwgYXRhdSBoYXNpbCB5YW5nIGJlcmhhc2lsICgqcG9zaXRpdmUqKSBkaXRhbmdrYXAgc2VzdWFpIGRlbmdhbiByYW5jYW5nYW4gUmVnRXgsIHRhcGkgdGlkYWsgc2VzdWFpIHNlY2FyYSBrb25zZXB0dWFsICgqZmFsc2UqKSBzZWJhZ2FpIHBlbmNvbnRvaGFuIHNrZW1hIFsqcGVyKitBSl0uIEFrYW4gdGV0YXBpLCB0ZXJkYXBhdCBqdWdhIGtlbXVuY3VsYW4gKipkaXBlcnNpYXAqKiB5YW5nIHRhbXBha255YSBzZWNhcmEgcGVudWxpc2FuIGRhbiBrb250ZWtzIHBlbWFrYWlhbiBtZW5jb250b2hrYW4gc2tlbWEgWypwZXIqK0FKXSwgc2VwZXJ0aSBwYWRhIHNpdGlyYW4gKEBkaXBlcnNpYXBfb2tlKSBiZXJpa3V0OgoKKEBkaXBlcnNpYXBfb2tlKSBtZW5naW5nYXQga2VnaWF0YW4gaW5pIGFkYWxhaCBrZWdpYXRhbiBpbnRlcm5hc2lvbmFsIG9sZWgga2FyZW5hbnlhIGhhcnVzICoqZGlwZXJzaWFwKiogbGViaWggbWF0YW5nIGFnYXIgZGFsYW0gcGVsYWtzYW5hYW5ueWEgbmFudGkgYmVybGFuZ3N1bmcgZGVuZ2FuIGJhaWsuIChpbmRfbWl4ZWRfMjAxMl8xTTozMDI4NzQpCgpCZW50dWsgYWt0aWYgKiptZW1wZXJzaWFwKioganVnYSBiZXJoYXNpbCBkaWRhcGF0OyBzZWJhZ2lhbiBiZXNhciBkaSBhbnRhcmFueWEgYWRhbGFoIHNhbGFoIGtldGlrLCBhdGF1IG11bmdraW4gbGViaWggdGVwYXRueWEgc2VuZ2FqYSBkaXBpc2Foa2FuIGthcmVuYSB0dW50dXRhbiBhdHVyYW4gKG1pcy4gZGkgYnVrdSwgZHNiLikgeWFuZyBtZXN0aSBtZW1pc2Foa2FuIGFraGlyYW4gZGVuZ2FuIGthdGEgZGFzYXJueWEgZGkgdWp1bmcgYmFyaXMgbWVuZ2d1bmFrYW4gc3RyaXAgYCItImAgKGxpaGF0IChAcGVyc2lhcF90eXBvKSkuCgooQHBlcnNpYXBfdHlwbykgTmFtdW4gd2FsYXVwdW4gaGFsLWhhbCBkaSBhdGFzIGJlbHVtIHRlcmphZGksIGtpdGEgZGFwYXQgKiptZW1wZXJzaWFwKiotIGthbm55YSBkYWh1bHUuIChpbmRfd2ViXzIwMTJfMU06NjE5NDc4KQoKSGFueWEgc2ViYWdpYW4ga2VjaWwgZGFyaSBiZW50dWsgKiptZW1wZXJzaWFwKiogeWFuZyBkYXBhdCBkaWFuZ2dhcCBzZWJhZ2FpIGRhdGEgcGVuY29udG9oYW4gcG9sYSBbKnBlciorQUpdLCBzZXBlcnRpIHBhZGEgY29udG9oIChAcGVyc2lhcF9va2UpIGJlcmlrdXQuCgooQHBlcnNpYXBfb2tlKSBVQVMga2FsaSBpbmkgc2F5YSB0aWRhayBtZW5nYWxhbWkga2VzdWxpdGFuLCBoYWwgZGlrYXJlbmFrYW4gc2F5YSBzdWRhaCAqKm1lbXBlcnNpYXAqKiBkaXJpIGRlbmdhbiBzZW9wdGltYWwgbXVuZ2tpbi4gKGluZC1pZF93ZWJfMjAxNV8zTToxNjM5OTQzKQoKU3ViLWJhZ2lhbiBpbmkgaW5naW4gbWVuYW1waWxrYW4gZmFrdGEgYmFod2Egc2VjYW5nZ2loIGFwYXB1biB0YWhhcGFuIGRhbiBwaXJhbnRpIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmdvbGFoIGRhdGEgZGFsYW0ga29ycHVzLCB0ZXJkYXBhdCBrZW5kYWxhLWtlbmRhbGEgeWFuZyBkYXBhdCBkaXRlbXVpLiBLZW5kYWxhIGluaSwgc2VwZXJ0aSB5YW5nIHRlbGFoIGRpY29udG9oa2FuLCBiaXNhIG11bmN1bCBkYXJpIChpKSBrZWFkYWFuIG9ydG9ncmFmaXMgcGVtYWthaWFuIGJhaGFzYSBkaSBkYWxhbSBrb3JwdXMgeWFuZyBkaWthamksIG1pc2FsbnlhIHNhbGFoIGtldGlrLCBhdGF1IChpaSkgc2lzdGVtIHlhbmcgZGlndW5ha2FuLCBzZXBlcnRpICpNb3JwaEluZCosIGJlbHVtIG1lbmNha3VwIGtlc2VsdXJ1aGFuIGtoYXNhbmFoIGthdGEgeWFuZyBtZW5jb250b2hrYW4gc3VhdHUgc2tlbWEga29uc3RydWtzaW9uYWwgbW9yZm9sb2dpcy4KCiMgSGFzaWwgZGFuIHBlbWJhaGFzYW4geyNoYXNpbH0KYGBge3IgcHJvZHVrdGl2aXRhc30KY3huX3N1bSA8LSBwZXJfYWRqX2Jhc2VfY29tYmluZWQgJT4lIAogIC4kbiAlPiUgCiAgc3VtKCkKcGVyX2Fkal90eXBlX2ZyZXEgPC0gZGltKHBlcl9hZGpfYmFzZV9jb21iaW5lZClbMV0KcGVyX2Fkal9oYXBheCA8LSBwZXJfYWRqX2Jhc2VfY29tYmluZWQgJT4lIAogIGZpbHRlcihuPT0xKSAlPiUgCiAgZGltKCkgJT4lIAogIC5bMV0KcGVyX3BvdGVudGlhbF9wcm9kIDwtIHBlcl9hZGpfaGFwYXgvY3huX3N1bQpgYGAKCiMjIFByb2R1a3RpZml0YXMgdGVyd3VqdWQgZGFuIHByb2R1a3RpZml0YXMgcG90ZW5zaWFsIGtvbnN0cnVrc2kgWypwZXItKitBSl0geyNwcm9kdWt0aXZpdGFzfQoKKipKdW1sYWggdGlwZSoqIGthdGEgeWFuZyBtZW5jb250b2hrYW4gc3VhdHUgc2tlbWEga29uc3RydWtzaW9uYWwgbW9yZm9sb2dpcyBtZW5qYWRpIHNhbGFoIHNhdHUgcGVuYW5kYSBrYWRhciBwcm9kdWt0aWZpdGFzIHNrZW1hIHRlcnNlYnV0IFtAaGlscGVydF9jb25zdHJ1Y3Rpb25fMjAxNCwgaGFsLiA4MV0uIFVudHVrIHNrZW1hIFsqcGVyLSorQUpdIHNlY2FyYSB1bXVtLCB0ZXJkYXBhdCBgciBwZXJfYWRqX3R5cGVfZnJlcWAgdGlwZSBrYXRhIHlhbmcgbWVuY29udG9oa2FuIGtvbnN0cnVrc2kgdGVyc2VidXQgZGFyaSBgciBjeG5fc3VtICU+JSBmb3JtYXQoYmlnLm1hcms9Ii4iLCBkZWNpbWFsLm1hcms9IiwiKWAga2VrZXJhcGFuIGtlbXVuY3VsYW4gdG90YWxueWEgKGxpaGF0IFtUYWJlbCBcQHJlZih0YWI6cGVyLXNlbWFudGljcy10YWJsZSldKCNwZXItc2VtYW50aWNzLXRhYmxlKSBkaSBiYXdhaCkuIEtlbXVuY3VsYW4gYHIgcGVyX2Fkal90eXBlX2ZyZXFgIHRpcGUga2F0YSBkYXJpIHNrZW1hIFsqcGVyLSorQUpdIGRhcGF0IGRpYW5nZ2FwIHJlbmRhaCwgbWVuZ2luZ2F0IGJlc2FybnlhIHVrdXJhbiBrb3JwdXMgeWFuZyBkaWd1bmFrYW4ga2FsaSBpbmksIHlhaXR1IGJlcmp1bWxhaCBgciBjb3JwdXNfdG90YWxfd29yZHNgIGthdGEuCgpHdW5hIG1lbGVuZ2thcGkgcGVtYmFoYXNhbiBkaSBhdGFzLCBha2FuIGRpcGFwYXJrYW4gcmFzaW8gKipwcm9kdWt0aWZpdGFzIHBvdGVuc2lhbCoqIGRhcmkgc2tlbWEgWypwZXItKitBSl0uIFJhc2lvIGluaSBkaWRhc2FyaSBhdGFzIGp1bWxhaCAqaGFwYXgqIGRhcmkgc2tlbWEgdGVyc2VidXQuIFNrZW1hIFsqcGVyLSorQUpdIG1lbWlsaWtpIGByIHBlcl9hZGpfaGFwYXhgIHRpcGUgKmhhcGF4KiAoYXRhdSBoYW55YSBgciByb3VuZChwZXJfYWRqX2hhcGF4L3Blcl9hZGpfdHlwZV9mcmVxKjEwMCwyKWAlKSBkYXJpIGByIHBlcl9hZGpfdHlwZV9mcmVxYCBqdW1sYWgga2VzZWx1cnVoYW4gdGlwZW55YS4gUGVyc2VudGFzZSBqdW1sYWggKmhhcGF4KiBpbmkgYmlzYSBkaXBhbmRhbmcgY3VrdXAgcmVuZGFoLiBTZWxhbmp1dG55YSwgbmlsYWkgcGVyYmFuZGluZ2FuICpoYXBheC90b2tlbiogKEhUUikgZGFyaSBza2VtYSBbKnBlci0qK0FKXSBqdWdhIHNhbmdhdCBrZWNpbCwgeWFpdHUgYHIgcGVyX3BvdGVudGlhbF9wcm9kICU+JSByb3VuZCg1KSAlPiUgcHJldHR5TnVtKClgOyBqdW1sYWggdGlwZSwgKmhhcGF4KiwgZGFuIEhUUiBkYXJpIHNrZW1hIFsqcGVyLSorQUpdIGRhcGF0IG1lbmdpbmRpa2FzaWthbiByZW5kYWhueWEgcHJvZHVrdGlmaXRhcyBza2VtYSB0ZXJzZWJ1dCwgcGFsaW5nIHRpZGFrIGJlcmRhc2Fya2FuIGRhdGEga29ycHVzIHlhbmcgZGlrYWppLgoKVGVya2FpdCByZW5kYWhueWEga2FkYXIgcHJvZHVrdGlmaXRhcyBmb3JtYWwgc2tlbWEgWypwZXItKitBSl0gaW5pLCBzYWxhaCBzYXR1IHByYWFuZ2dhcGFuIHlhbmcgYmlzYSBkaXVqaWthbiBrZW1iYWxpIHBhZGEgcGVuZWxpdGlhbiBzZWxhbmp1dG55YSBhZGFsYWggc2ViYWdhaSBiZXJpa3V0LiBUZXJkYXBhdCBrZW11bmdraW5hbiBiYWh3YSBrb25zdHJ1a3NpIHlhbmcgbGViaWggcHJvZHVrdGlmIGRpZ3VuYWthbiB1bnR1ayBtZW5ndW5na2Fwa2FuIG1ha25hIHlhbmcgZGliYXdhIG9sZWggWypwZXItKitBSl0gKHlhaXR1LCAnbWVtYnVhdCBYIG1lbmphZGkgbGViaWggQUonKSBhZGFsYWgga29uc3RydWtzaSBwZXJpZnJhc3Rpaywgc2VwZXJ0aSBrb25zdHJ1a3NpIGthdXNhdGlmIHBlcmlmcmFzdGlrIFsqKm1lbWJ1YXQqKiBYICoqbWVuamFkaSBsZWJpaCoqIEFKXS4gUGVuZWxpdGlhbiBzZWxhbmp1dG55YSBkYXBhdCBtZW5ndWppIGFuZ2dhcGFuIGluaSBkZW5nYW4gbWVtYmFuZGluZ2thbiBwZXJzZWJhcmFuIGp1bWxhaCBhamVrdGl2YSB5YW5nIG11bmN1bCBkZW5nYW4ga29uc3RydWtzaSBrYXVzYXRpZiBwZXJpZnJhc3RpayBbKiptZW1idWF0KiogWCAqKm1lbmphZGkgbGViaWgqKiBBSl0gKGRhbiB2YXJpYXNpbnlhKSBkYW4gc2tlbWEgWypwZXItKitBSl0uIFtTdWItYmFnaWFuIFxAcmVmKHRpcGVzZW1hbnRpcyldKCN0aXBlc2VtYW50aXMpIGJlcmlrdXQgbWVsaWhhdCBsZWJpaCBkYWxhbSBwcm9kdWt0aWZpdGFzIHBhZGEgdGF0YXJhbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzIGRhcmkgc2tlbWEgWypwZXItKitBSl0sIHNla2FsaWd1cyBtZW5hbXBpbGthbiBrZXNlbHVydWhhbiBkYXRhIHRpcGUga2F0YSBrZXJqYSBbKnBlci0qK0FKXSBkaSBkYWxhbSBrb3JwdXMgKGxpaGF0IFtUYWJlbCBcQHJlZih0YWI6cGVyLXNlbWFudGljcy10YWJsZSldKCNwZXItc2VtYW50aWNzLXRhYmxlKSkuCgojIyBTa2VtYSBiYXdhaGFuIHNlbWFudGlzIHNrZW1hIGtvbnN0cnVrc2lvbmFsIFsqcGVyLSorQUpdIHsjdGlwZXNlbWFudGlzfQpgYGB7ciBwZXItc2VtYW50aWNzLWRhdGF9CnBlcl9hZGpfc2VtIDwtIHBlcl9hZGpfYmFzZV9jb21iaW5lZCAlPiUgCiAgZ3JvdXBfYnkoc2VtKSAlPiUgCiAgc3VtbWFyaXNlKG49c3VtKG4pLCAKICAgICAgICAgICAgdHlwZT1uX2Rpc3RpbmN0KHJvb3QpKSAlPiUKICBsZWZ0X2pvaW4ocGVyX2Fkal9iYXNlX2NvbWJpbmVkICU+JSAKICAgICAgICAgICAgICBmaWx0ZXIobj09MSkgJT4lIAogICAgICAgICAgICAgIGdyb3VwX2J5KHNlbSkgJT4lIAogICAgICAgICAgICAgIHN1bW1hcmlzZShoYXBheD1uX2Rpc3RpbmN0KHJvb3QpKSwgYnkgPSAic2VtIikgJT4lCiAgbXV0YXRlKGVzdF90eXBlPXR5cGUtaGFwYXgsCiAgICAgICAgIHR0cj1yb3VuZCgodHlwZS9uKSoxMDAsIDIpLCAKICAgICAgICAgaHRyPXJvdW5kKChoYXBheC9uKSoxMDAsIDIpLAogICAgICAgICBodHQ9cm91bmQoKGhhcGF4L3R5cGUpKjEwMCwyKSkgJT4lCiAgYXJyYW5nZShkZXNjKG4pKQpwZXJfYWRqX3NlbV90eXBlIDwtIHRpYmJsZSgpCmZvciAoaSBpbiBzZXFfYWxvbmcocGVyX2Fkal9zZW0kc2VtKSkgewogIHR5cGUgPC0gcGVyX2Fkal9iYXNlX2NvbWJpbmVkICU+JSAKICAgIGZpbHRlcihzZW09PXBlcl9hZGpfc2VtJHNlbVtpXSkgJT4lIAogICAgbXV0YXRlKHdvcmRzPXN0cl9jKHN0cl9jKC4kcm9vdCwgIiAoIiwgZm9ybWF0KC4kbiwgYmlnLm1hcms9Ii4iLCBkZWNpbWFsLm1hcms9IiwiKSwgIikiLCBzZXA9IiIpLCBjb2xsYXBzZT0iOyAiKSwKICAgICAgICAgICB3b3Jkcz1zdHJfcmVwbGFjZV9hbGwod29yZHMsICIoXFwoKVxccysiLCAiXFwxIikpICU+JSAKICAgIC4kd29yZHMgJT4lIAogICAgdW5pcXVlKCkKICBwZXJfYWRqX3NlbV90eXBlIDwtIGJpbmRfcm93cyhwZXJfYWRqX3NlbV90eXBlLCB0aWJibGUoc2VtPXBlcl9hZGpfc2VtJHNlbVtpXSwgd29yZF90eXBlcz10eXBlKSkKfQpwZXJfYWRqX3NlbSA8LSBsZWZ0X2pvaW4ocGVyX2Fkal9zZW0sIHBlcl9hZGpfc2VtX3R5cGUsIGJ5ID0ic2VtIikKcm0ocGVyX2Fkal9zZW1fdHlwZSkKYGBgCgpTdWItYmFnaWFuIGluaSBha2FuIG1lbWFwYXJrYW4gc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyBrb25zdHJ1a3NpIFsqcGVyLSorQUpdIGF0YXMgZGFzYXIgdGlwZSBzZW1hbnRpcyBrYXRhIGRhc2FyIGFqZWt0aXZhbnlhLiBBY3VhbiB1bnR1ayBwZW5nZWxvbXBva2FuIHRpcGUgc2VtYW50aXMgYWpla3RpdmEgdGVyc2VidXQgbWVuZ2FjdSBwYWRhIGthdGVnb3JpIHlhbmcgZGliYWhhcyBvbGVoIERpeG9uIFstQGRpeG9uX2FkamVjdGl2ZV8yMDA0LTFdLCBiZXNlcnRhIG1ha2FsYWgtbWFrYWxhaCBkaSBkYWxhbSBEaXhvbiBkYW4gQWlraGVudmFsZCBbLUBkaXhvbl9hZGplY3RpdmVfMjAwNF1eW0thcmVuYSBzZW11YSB0aXBlIGFqZWt0aXZhbnlhIGRpdGFtcGlsa2FuIGRhbGFtIFtUYWJlbCBcQHJlZih0YWI6cGVyLXNlbWFudGljcy10YWJsZSldKCNwZXItc2VtYW50aWNzLXRhYmxlKSBkaSBiYXdhaCwgcGVtYmFjYSBkYXBhdCB0aWRhayBzZXR1anUgdGVyaGFkYXAgYmViZXJhcGEgcGVuZ2Vsb21wb2thbiB5YW5nIHBlbnVsaXMgYWp1a2FuOyBtYXN1a2FuIHVudHVrIHBlbmdlbG9tcG9rYW4gdGVyc2VidXQgdGVya2FpdCBwZW5lbGl0aWFuIHNlcnVwYSBrZSBkZXBhbm55YSBzYW5nYXQgZGloYXJhcGthbi5dLiAKCk1lbmdpbmdhdCB1bGFzYW4gcGFkYSBbc3ViLWJhZ2lhbiBcQHJlZihzZW1hbnRpY3N1YnNjaGVtYSldKCNzZW1hbnRpY3N1YnNjaGVtYSkgc2ViZWx1bW55YSwga2ViZXJhZ2FtYW4gdGlwZSBzZW1hbnRpcyBhamVrdGl2YSB5YW5nIG11bmN1bCBkZW5nYW4ga29uc3RydWtzaSBbKnBlci0qK0FKXSBkYXBhdCBtZW5qYWRpIGRhc2FyIG11bmN1bG55YSBza2VtYXRpc2FzaSBsb2thbCBkYXJpIGtvbnN0cnVrc2kgWypwZXItKitBSl0gcGFkYSB0YXRhcmFuIHNlbWFudGlzLiBEYWxhbSBoYWwgaW5pIHRlcmRhcGF0IGd1Z3VzYW4gc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyAoZGFyaSBza2VtYSBbKnBlci0qK0FKXSB1dGFtYSkgeWFuZyBzYWxpbmcgYmVyamVqYXJpbmcgW0B0cm91c2RhbGVfY29uc3RydWN0aW9uXzIwMTYsIGhhbC4gNjldLiBEYXJpIHN1ZHV0IHBhbmRhbmcgQ3hHLCBqZWphcmluZyBwZW5nZXRhaHVhbiBzZW1hbnRpcyBzZXBlcnRpIGluaSwgeWFuZyB0ZXJhYnN0cmFrc2kgZGFyaSBwZW5jb250b2hhbiBueWF0YSBzdWF0dSBza2VtYSBrb25zdHJ1a3Npb25hbCwganVnYSBtZXJ1cGFrYW4gYmFnaWFuIGRhcmkga2hhc2FuYWgga2ViYWhhc2FhbiBzZXNlb3JhbmcuCgpbR2FtYmFyIFxAcmVmKGZpZzpzZW1hbnRpY3NwbG90KV0oI3NlbWFudGljc3Bsb3QpIG1lbmFtcGlsa2FuIHJlbnRhbmdhbiBzZW1hbnRpcyBza2VtYSBiYXdhaGFuIGtvbnN0cnVrc2kgWypwZXItKitBSl0uIFJlbnRhbmdhbiBpbmkgZGlrYWl0a2FuIGRlbmdhbiBkaXN0cmlidXNpIChkYWxhbSBwZXJzZW50YXNlKSAoaSkga2VrZXJhcGFuLCAoaWkpIGp1bWxhaCB0aXBlIGthdGEsIGRhbiAoaWlpKSBqdW1sYWggKmhhcGF4KiBkYXJpIG1hc2luZy1tYXNpbmcgdGlwZSBza2VtYSBiYXdhaGFuIHNlbWFudGlzIGtvbnN0cnVrc2kgWypwZXItKitBSl0uCgpgYGB7ciBzZW1hbnRpY3NwbG90LCBmaWcuY2FwPSdQZXJzZW50YXNlIGp1bWxhaCAqaGFwYXgqLCBqdW1sYWggdGlwZSwgZGFuIGtla2VyYXBhbiB1bnR1ayB0aWFwLXRpYXAgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyBrb25zdHJ1a3NpIFsqcGVyLSorQUpdLicsIGZpZy53aWR0aD05fQpkZiA8LSBwZXJfYWRqX3NlbSAlPiUKICBzZWxlY3QobiwgdHlwZSwgaGFwYXgsIHNlbSkgJT4lCiAgbXV0YXRlKGAlIGtla2VyYXBhbmA9cm91bmQobi9zdW0obikqMTAwLCAyKSwKICAgICAgICAgYCUganVtbGFoIHRpcGVgPXJvdW5kKHR5cGUvc3VtKHR5cGUpKjEwMCwgMiksCiAgICAgICAgIGAlIGp1bWxhaCBoYXBheGA9cm91bmQoaGFwYXgvc3VtKGhhcGF4KSoxMDAsIDIpLAogICAgICAgICBzZW09cmVwbGFjZShzZW0sIHNlbT09J3Byb3BlbnNpdGFzJywgJ2tlY2VuZGVydW5nYW4gbWFudXNpYVxuKCpodW1hbiBwcm9wZW5zaXR5KiknKSwKICAgICAgICAgc2VtPXJlcGxhY2Uoc2VtLCBzZW09PSd1a3VyYW4nLCAndWt1cmFuL2RpbWVuc2knKSwKICAgICAgICAgc2VtPXJlcGxhY2Uoc2VtLCBzZW09PSduaWxhaScsICduaWxhaSAoKnZhbHVlKiknKSkgJT4lCiAgcmVuYW1lKGtla2VyYXBhbj1uLCBganVtbGFoIHRpcGVgPXR5cGUsIGBqdW1sYWggaGFwYXhgPWhhcGF4KSAlPiUKICBzZWxlY3Qoc2VtLCBgJSBrZWtlcmFwYW5gLCBgJSBqdW1sYWggdGlwZWAsIGAlIGp1bWxhaCBoYXBheGApICU+JQogIGdhdGhlcihrZXk9ZGlzdCwgdmFsdWU9dmFsdWUsIC1zZW0pICU+JQogIGFycmFuZ2UoZGlzdCkKZGYgJT4lCiAgZ2dwbG90KGFlcyh4PXJlb3JkZXIoc2VtLCB2YWx1ZSksIHk9dmFsdWUsIGZpbGw9ZGlzdCkpICsKICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsKICBmYWNldF93cmFwKH5kaXN0KSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9idygpICsKICBzY2FsZV9maWxsX2dyZXkoc3RhcnQgPSAwLjEsIGVuZD0wLjgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAnbm9uZScsIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xMSksIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTkpKSArCiAgbGFicyh4PSdUaXBlIHNlbWFudGlzJywgeT1OVUxMLCBmaWxsPU5VTEwpCmBgYAoKQWRhIGJlYmVyYXBhIGhhbCB5YW5nIGJpc2EgZGlwZXJvbGVoIGRhcmkgZGF0YSBwYWRhIFtHYW1iYXIgXEByZWYoZmlnOnNlbWFudGljc3Bsb3QpXSgjc2VtYW50aWNzcGxvdCkuIFBlcnRhbWEsIGRhcmkgc2VnaSBwZXJzZW50YXNlIGtla2VyYXBhbiwgc2tlbWEgWypwZXItKitBSl0gdXRhbWEgbWVtaWxpa2kgYmViZXJhcGEgc2tlbWEgc2VtYW50aXMgYmF3YWhhbiB5YW5nIHByb3RvdGlwaWthbCAoZGFsYW0gYXJ0aSBzZXJpbmcgbXVuY3VsIGRpIGRhbGFtIGtvcnB1cyBzZWNhcmEga2VzZWx1cnVoYW4pIGRpIGFudGFyYSBndWd1c2FuIHNrZW1hIGJhd2FoYW4gc2VtYW50aXMgbGFpbm55YS4gRW1wYXQgZGkgYW50YXJhbnlhIGFkYWxhaCA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5jaXJpX2Zpc2lrPC9zcGFuPiAobWlzLiAqKmt1YXQqKiwgKipwYXJhaCoqKSwgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+dWt1cmFuPC9zcGFuPiAoKipsdWFzKiosICoqcGFuamFuZyoqKSwgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+a2VzdWxpdGFuPC9zcGFuPiAoKiptdWRhaCoqLCAqKmxhbmNhcioqKSwgZGFuIDxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPmtlY2VwYXRhbjwvc3Bhbj4gKCoqY2VwYXQqKiwgKipsYW1iYXQqKikuIFRpbmdnaW55YSBrZWtlcmFwYW4ga2VlbXBhdCBkaW1lbnNpIHNlbWFudGlzIGluaSBtZW5naW5kaWthc2lrYW4gYmFod2Ega2VlbXBhdCBjaXJpIHNlbWFudGlzIGluaWxhaCB5YW5nIGRlcmFqYXRueWEgc2VyaW5nIGRpdGluZ2thdGthbiBiZXJkYXNhcmthbiBtYWtuYSBza2VtYXRpcyBrb25zdHJ1a3NpIGthdXNhdGlmIFsqcGVyLSorQUpdLCB5YWl0dSAnbWVtYnVhdCBYIG1lbmphZGkgbGViaWggQUonLiBEYWxhbSBoYWwgaW5pLCBza2VtYSBbKnBlci0qK0FKXSBkYXBhdCBkaWdhbWJhcmthbiBzZWJhZ2FpIHN1YXR1IGplamFyaW5nIGtvbnN0cnVrc2lvbmFsIFtAdHJvdXNkYWxlX2NvbnN0cnVjdGlvbl8yMDE2LCBoYWwuIDY5LTcwOyBAYm9vaWpfY29uc3RydWN0aW9uXzIwMTAsIGhhbC4gNTQ2LTU0N10uCgpBc3BlayBrZWR1YSB5YW5nIGJpc2EgZGlsaWhhdCBhZGFsYWggcGVyc2VudGFzZSBqdW1sYWggdGlwZSBkYW4gKmhhcGF4KiBtYXNpbmctbWFzaW5nIHRpcGUgc2VtYW50aXMuIEVtcGF0IHRpcGUgc2VtYW50aXMgdGVyYXRhcyBkZW5nYW4ganVtbGFoIHRpcGUgdGVyYmFueWFrIGFkYWxhaCA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5jaXJpX2Zpc2lrPC9zcGFuPiwgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+a2VjZW5kZXJ1bmdhbiBtYW51c2lhPC9zcGFuPiAoKiprYXlhKiosICoqY2FudGlrKiosICoqYm9kb2gqKiksIDxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPnVrdXJhbjwvc3Bhbj4sIGRhbiA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5uaWxhaTwvc3Bhbj4gKCoqYnVydWsqKiwgKippbmRhaCoqLCAqKmJhZ3VzKiopLiBKYWRpIGtlZW1wYXQgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyBpbmksIGJlcmRhc2Fya2FuIHBlbmd1a3VyYW4gcHJvcG9yc2kganVtbGFoIHRpcGVueWEgc2VuZGlyaSwgZGFwYXQgZGlrYXRha2FuIHBhbGluZyBwcm9kdWt0aWYgZGliYW5kaW5na2FuIGRlbmdhbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzIGxhaW5ueWEuIAoKS2VtdWRpYW4sIGRhcmkgc2VnaSBwZXJzZW50YXNlIGp1bWxhaCAqaGFwYXgqLCBza2VtYSBiYXdhaGFuIDxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPmtlY2VuZGVydW5nYW4gbWFudXNpYTwvc3Bhbj4gbWVtaWxpa2kgcGVyc2VudGFzZSBqdW1sYWggKmhhcGF4KiBwYWxpbmcgYmFueWFrLCBkaWlrdXRpIGRlbmdhbiA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5jaXJpX2Zpc2lrPC9zcGFuPiBkYW4gPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+bmlsYWk8L3NwYW4+LiBIYWwgaW5pIGRhcGF0IG1lbnVuanVra2FuIGJhaHdhIHBlbWFrYWlhbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzIFsqcGVyLSorQUpdIGJlcnRpcGUgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+a2VjZW5kZXJ1bmdhbiBtYW51c2lhPC9zcGFuPiBsZWJpaCBrZXJhcCBkaXBlcmx1YXMgYmVyZGFzYXJrYW4gYW5hbG9naSBzZW1hbnRpcyBza2VtYW55YSBbcGVyaWtzYSBAemVzY2hlbF9leGVtcGxhcnNfMjAxMF0uIEFydGlueWEsIHBlbnV0dXIgbWVuZ2luZ2F0IHRpcGUgc2VtYW50aXMgYWpla3RpdmEgeWFuZyBtZW5jb250b2hrYW4gc2tlbWEgc2VtYW50aXMgYmF3YWhhbiA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5rZWNlbmRlcnVuZ2FuIG1hbnVzaWE8L3NwYW4+IGRhbiBrZW11ZGlhbiBtZW1wZXJsdWFzIHBlbWFrYWlhbiBza2VtYSB0ZXJzZWJ1dCBkZW5nYW4gbWVuZ2d1bmFrYW4gYWpla3RpdmEgYmFydSAoeWFuZyBiaXNhIGRpdHVuanVra2FuIG9sZWgganVtbGFoICpoYXBheCotbnlhKSBiZXJ0aXBlIHNlbWFudGlzIHlhbmcgc2FtYSAoZGFsYW0gaGFsIGluaSA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5rZWNlbmRlcnVuZ2FuIG1hbnVzaWE8L3NwYW4+KS4gCgpBa2FuIHRldGFwaSwga2V0aWthIGp1bWxhaCAqaGFwYXgqIG1hc2luZy1tYXNpbmcgdGlwZSBzZW1hbnRpcyBkaWthaXRrYW4gZGVuZ2FuIGtla2VyYXBhbm55YSBkYWxhbSBwZW5ndWt1cmFuICpoYXBheC90b2tlbiByYXRpbyogKEhUUiksIG1hc2luZy1tYXNpbmcgdGlwZSBzZW1hbnRpcyB0ZXJzZWJ1dCB0aWRhayBkYXBhdCBkaWthdGFrYW4gcHJvZHVrdGlmLiBIYXNpbCBwZW5naGl0dW5nYW4gaW5pIGRpdGFtcGlsa2FuIHBhZGEgW1RhYmVsIFxAcmVmKHRhYjpodHItc2VtYW50aWNzKV0oI2h0ci1zZW1hbnRpY3MpIGJlcmlrdXQuCgpgYGB7ciBodHItc2VtYW50aWNzfQpodHJfc2VtIDwtIHBlcl9hZGpfc2VtICU+JSBhcnJhbmdlKGRlc2MoaHR0KSkgJT4lIAogIG11dGF0ZShzZW09cmVwbGFjZShzZW0sIHNlbT09J3Byb3BlbnNpdGFzJywgJ2tlY2VuZGVydW5nYW4gbWFudXNpYSAoKmh1bWFuIHByb3BlbnNpdHkqKScpLAogICAgICAgICBzZW09cmVwbGFjZShzZW0sIHNlbT09J3VrdXJhbicsICd1a3VyYW4vZGltZW5zaScpLAogICAgICAgICBzZW09cmVwbGFjZShzZW0sIHNlbT09J25pbGFpJywgJ25pbGFpICgqdmFsdWUqKScpLAogICAgICAgICBzZW09c3RyX2MoIjxzcGFuIHN0eWxlPSdmb250LXZhcmlhbnQ6c21hbGwtY2FwczsnPiIsIHNlbSwgIjwvc3Bhbj4iLCBzZXA9IiIpLAogICAgICAgICBuPXByZXR0eU51bShuLCBiaWcubWFyaz0iLiIsIGRlY2ltYWwubWFyaz0iLCIpKSAlPiUgCiAgc2VsZWN0KHNlbSwgbiwgdHlwZSwgaGFwYXgsIGh0ciwgaHR0KSAlPiUgCiAgYXJyYW5nZShkZXNjKGhhcGF4KSkKaHRyX3NlbSAlPiUKICByZW5hbWUoYFRpcGUgc2VtYW50aXNgPXNlbSwgS2VrZXJhcGFuPW4sIGBKdW1sYWggdGlwZWA9dHlwZSwgYEp1bWxhaCAqaGFwYXgqYD1oYXBheCwgYFJhc2lvICpoYXBheCovKnRva2VuKiAoJSlgPWh0ciwgYFJhc2lvICpoYXBheCovdGlwZSAoJSlgPWh0dCkgJT4lCiAgc2VsZWN0KC1gUmFzaW8gKmhhcGF4Ki90aXBlICglKWApICU+JQogIGtuaXRyOjprYWJsZShjYXB0aW9uID0gIlJhc2lvICpoYXBheCogYmVyYmFuZGluZyBrZWtlcmFwYW4gdW50dWsgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyBrb25zdHJ1a3NpIFsqcGVyLSorQUpdOyBkYXRhIGRpdXJ1dGthbiBiZXJkYXNhcmthbiBqdW1sYWggKmhhcGF4KiB0ZXJiYW55YWsuIiwgcm93Lm5hbWVzID0gVCkKYGBgCgpIYW55YSB0aXBlIHNlbWFudGlzIGByIGh0cl9zZW0gJT4lIGZpbHRlcihodHIgPiAxMCkgJT4lIC4kc2VtICU+JSBzdHJfYygiPHNwYW4gc3R5bGU9J2ZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyc+IiwgLiwgJzwvc3Bhbj4nLCBzZXA9JycpICU+JSBzdHJfYyhjb2xsYXBzZT0nIGRhbiAnKWAgeWFuZyBuaWxhaSBIVFItbnlhIG1lbnVuanVra2FuIGFuZ2thIGRpIGF0YXMgMTAlLiBBcnRpbnlhLCB1bnR1ayB0aXBlIHNlbWFudGlzIGByIGh0cl9zZW0gJT4lIGZpbHRlcihodHIgPiAxMCkgJT4lIC5bMSxdICU+JSAuJHNlbSAlPiUgc3RyX2MoIjxzcGFuIHN0eWxlPSdmb250LXZhcmlhbnQ6c21hbGwtY2FwczsnPiIsIC4sICc8L3NwYW4+Jywgc2VwPScnKWAsIGByIGh0cl9zZW0gJT4lIGZpbHRlcihodHIgPiAxMCkgJT4lIC5bMSxdICU+JSAuJGh0cmAlIGRhcmkgdG90YWwga2VrZXJhcGFubnlhIGFkYWxhaCAqaGFwYXgqOyBuYXJhc2kgc2VydXBhIGRpZ3VuYWthbiB1bnR1ayBtZW1haGFtaSBuaWxhaSBIVFIgdGlwZSBzZW1hbnRpcyBsYWlubnlhIFtAc3RlZmFub3dpdHNjaF9jb3JwdXNfMjAxNywgaGFsLiAyODRdLiBbVGFiZWwgXEByZWYodGFiOnBlci1zZW1hbnRpY3MtdGFibGUpXSgjcGVyLXNlbWFudGljcy10YWJsZSkgYmVyaWt1dCBtZW5hbXBpbGthbiBzZW11YSB0aXBlIGFqZWt0aXZhIG1lbmNvbnRvaGthbiBza2VtYSBbKnBlci0qK0FKXSB5YW5nIGRpdGVtdWthbiBkaSBkYWxhbSBrb3JwdXMuCgpgYGB7ciBwZXItc2VtYW50aWNzLXRhYmxlfQpwZXJfYWRqX3NlbSAlPiUKICBhcnJhbmdlKGRlc2MoaGFwYXgpKSAlPiUKICBtdXRhdGUoc2VtPXJlcGxhY2Uoc2VtLCBzZW09PSdwcm9wZW5zaXRhcycsICdrZWNlbmRlcnVuZ2FuIG1hbnVzaWEgKCpodW1hbiBwcm9wZW5zaXR5KiknKSwKICAgICAgICAgc2VtPXJlcGxhY2Uoc2VtLCBzZW09PSd1a3VyYW4nLCAndWt1cmFuL2RpbWVuc2knKSwKICAgICAgICAgc2VtPXJlcGxhY2Uoc2VtLCBzZW09PSdrdWFsaWZpa2FzaScsICdrdWFsaWZpa2FzaSAoKnF1YWxpZmljYXRpb24qKScpLAogICAgICAgICBzZW09cmVwbGFjZShzZW0sIHNlbT09J25pbGFpJywgJ25pbGFpICgqdmFsdWUqKScpLAogICAgICAgICBzZW09c3RyX2MoIjxzcGFuIHN0eWxlPSdmb250LXZhcmlhbnQ6c21hbGwtY2FwczsnPiIsIHNlbSwgIjwvc3Bhbj4iLCBzZXA9IiIpLAogICAgICAgICBuPXByZXR0eU51bShuLCBiaWcubWFyaz0iLiIsIGRlY2ltYWwubWFyaz0iLCIpKSAlPiUKICBzZWxlY3QoU2VtYW50aWs9c2VtLCBgS2VrZXJhcGFuIChOKWA9biwgYEp1bWxhaCB0aXBlYD10eXBlLCBgSnVtbGFoIHRpcGUgKGtla2VyYXBhbiA+IDEpYD1lc3RfdHlwZSwgYEp1bWxhaCAqaGFwYXgqYD1oYXBheCwgYEFqZWt0aXZhIGRhc2FyYD13b3JkX3R5cGVzKSAlPiUKICBzZWxlY3QoLWBKdW1sYWggdGlwZWAsIC1gS2VrZXJhcGFuIChOKWApICU+JQogIGtuaXRyOjprYWJsZShjYXB0aW9uPSJTZWx1cnVoIHBlbmNvbnRvaGFuIHNrZW1hIFsqcGVyLSorQUpdIGRhbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzbnlhOyBkYXRhIGRpdXJ1dGthbiBiZXJkYXNhcmthbiBqdW1sYWggKmhhcGF4KiB0ZXJiYW55YWsuIiwgcm93Lm5hbWVzID0gVCkKYGBgCgpTYWxhaCBzYXR1IGNhcmEgdW50dWsgbWVsaWhhdCBodWJ1bmdhbiBhbnRhcmEgKGkpIGp1bWxhaCB0aXBlIHNrZW1hIFsqcGVyLSorQUpdIHlhbmcgdGVsYWggYWRhIChwZXJoYXRpa2FuIGtvbG9tICoqYEp1bWxhaCB0aXBlIChrZWtlcmFwYW4gPiAxKWAqKikgZGFuIChpaSkganVtbGFoICpoYXBheCogZGFyaSBtYXNpbmctbWFzaW5nIHRpcGUgc2VtYW50aXMgYWpla3RpdmFueWEgYWRhbGFoIG1lbGFsdWkgQW5hbGlzaXMgS29yZWxhc2kgW0B6ZXNjaGVsX2V4ZW1wbGFyc18yMDEwLCBoYWwuIDIwOF1eW01lbmdpa3V0aSBaZXNjaGVsIFstQHplc2NoZWxfZXhlbXBsYXJzXzIwMTAsIGhhbC4gMjA4XSwgbWV0b2RlIEFuYWxpc2lzIEtvcmVsYXNpIHlhbmcgZGlndW5ha2FuIGFkYWxhaCAqUGVhcnNvbidzIHByb2R1Y3QgbW9tZW50IGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50Ki4gUGVuZ2hpdHVuZ2FuIGRpbGFrdWthbiBkZW5nYW4gZnVuZ3NpIGBjb3IudGVzdCgpYCB5YW5nIGFkYSBkYWxhbSAqUiouXS4gQW5hbGlzaXMgS29yZWxhc2kgbWVuZW50dWthbiBhcmFoLCBkYW4gdWt1cmFuLCBodWJ1bmdhbiBzdWF0dSB2YXJpYWJlbCBYIChtaXMuIGp1bWxhaCB0aXBlIHN1YXR1IGtvbnN0cnVrc2kgeWFuZyB0ZWxhaCBhZGEpIGRlbmdhbiB2YXJpYWJlbCBZIChtaXMuIGp1bWxhaCAqaGFwYXgqIGtvbnN0cnVrc2kgdGVyc2VidXQpLiBBcmFoIGh1YnVuZ2FubnlhIGJpc2EgcG9zaXRpZiBhdGF1IG5lZ2F0aWY7IHNlZGFuZ2thbiB1a3VyYW5ueWEgYmlzYSAoaSkga2VjaWwgKFsrLy1dMC4xLTAuMyksIChpaSkgc2VkYW5nIChbKy8tXTAuMy0wLjUpLCBkYW4gKGlpaSkgdGluZ2dpIChbKy8tXTAuNS0xKSBbQHplc2NoZWxfZXhlbXBsYXJzXzIwMTAsIGhhbC4gMjA4XS4gCgpVbnR1ayBza2VtYSBzZW1hbnRpcyBiYXdhaGFuIFsqcGVyLSorQUpdLCB0ZXJkYXBhdCBodWJ1bmdhbiBwb3NpdGlmIGRhbiBrdWF0IGFudGFyYSAoaSkganVtbGFoIHRpcGUgeWFuZyB0ZWxhaCBhZGEgdW50dWsgc2tlbWEgc2VtYW50aXMgYmF3YWhhbiBbKnBlci0qK0FKXSBkYW4gKGlpKSBrYXRhLWthdGEgKmhhcGF4KiBkYXJpIG1hc2luZy1tYXNpbmcgdGlwZSBza2VtYSBiYXdhaGFuIHNlbWFudGlzIHRlcnNlYnV0IChLb3JlbGFzaSAqUGVhcnNvbidzKiA9IGByIGNvci50ZXN0KHBlcl9hZGpfc2VtJGVzdF90eXBlLCBwZXJfYWRqX3NlbSRoYXBheCkgJT4lIC4kZXN0aW1hdGUgJT4lIHJvdW5kKDMpYCwgKnAqID0gYHIgY29yLnRlc3QocGVyX2Fkal9zZW0kZXN0X3R5cGUsIHBlcl9hZGpfc2VtJGhhcGF4KSAlPiUgLiRwLnZhbHVlICU+JSByb3VuZCgzKWApLiBEZW5nYW4ga2F0YSBsYWluLCB0ZXJkYXBhdCBrYWl0YW4gYW50YXJhIChpKSBqdW1sYWggdGlwZSBrYXRhIGtlcmphIGJlcnNrZW1hIFsqcGVyLSorQUpdIGRhcmkgc3VhdHUgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyBkYW4gKGlpKSBfX3Blcmx1YXNhbi9wZW5pbmdrYXRhbl9fIHBlbmdndW5hYW4gc2tlbWEgdGlwZSBzZW1hbnRpcyB5YW5nIHNhbWEgZGVuZ2FuIGJlbnR1a2FuIGthdGEgYmFydS4gQXJ0aW55YSwgcGVudXR1ciAoaSkgbWVuZ2luZ2F0IHRpcGUgc2VtYW50aXMgYWpla3RpdmEgeWFuZyBzdWRhaCBkaXRlbXVpbnlhIGRpZ3VuYWthbiBkYWxhbSBza2VtYSBbKnBlci0qK0FKXSBiZXJza2VtYSBiYXdhaGFuIHNlbWFudGlzIHRlcnRlbnR1LCBkYW4ga2VtdWRpYW4gKGlpKSBtZW1wZXJsdWFzIHBlbWFrYWlhbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzIHRlcnNlYnV0ICh5YW5nIGJpc2EgZGl0dW5qdWtrYW4gb2xlaCBqdW1sYWggKmhhcGF4Ki1ueWEpIGRlbmdhbiBtZW5nZ3VuYWthbiBhamVrdGl2YSBiYXJ1IGJlcnRpcGUgc2VtYW50aXMgeWFuZyBzYW1hIFtwZXJpa3NhIEB6ZXNjaGVsX2V4ZW1wbGFyc18yMDEwXS4gCgpIdWJ1bmdhbiBwb3NpdGlmIHBhZGEgdGF0YXJhbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzIGluaSBtZW5kdWt1bmcgc2FsYWggc2F0dSBhc3Vtc2kgbWVuZGFzYXIgZGFyaSBDeEcgYmFod2Ega2hhc2FuYWgga2ViYWhhc2FhbiBzZXNlb3JhbmcgdGlkYWsgaGFueWEgbWVueWltcGFuIGtyaXRlcmlhIGZvcm1hbCAoYmVudHVrKSwgdGFwaSBqdWdhIHNlbWFudGlzLCBkYXJpIHN1YXR1IHVuaXQga2ViYWhhc2FhbiwgZGFsYW0gaGFsIGluaSBza2VtYSBwZW1iZW50dWthbiBrYXRhLiBQZW1iYWhhc2FuIHBhZGEgc3ViLWJhZ2lhbiBpbmkgdGVsYWggbWVudW5qdWtrYW4gYmFod2EgdGVyZGFwYXQgamVqYXJpbmcga2V1bXVtYW4gbG9rYWwgKGF0YXMgZGFzYXIgc2tlbWEgc2VtYW50aXMgYmF3YWhhbiBbZGFyaSBzdWF0dSBza2VtYSBrb25zdHJ1a3Npb25hbCB1dGFtYV0pIHlhbmcgbXVuY3VsIGJlcmRhc2Fya2FuIGd1Z3VzYW4gcGVuZ2d1bmFhbiBqdW1sYWggdGlwZSBkYW4gKmhhcGF4KiBhamVrdGl2YSB5YW5nIG1pcmlwIHNlY2FyYSBzZW1hbnRpcyBwYWRhIHNrZW1hIGJhd2FoYW4ga29uc3RydWtzaSBbKnBlci0qK0FKXSBbbGloYXQgQGhvZmZtYW5uX3VzYWdlLWJhc2VkXzIwMTMsIGhhbC4gNi03XS4gS2V0ZXJwYXRyaWFuIGplamFyaW5nIGd1Z3VzYW4gc2VtYW50aXMgaW5pIHNlY2FyYSBrdWF0IGRpcGljdSBvbGVoIGFqZWt0aXZhLWFqZWt0aXZhIHlhbmcgc2VyaW5nIG11bmN1bCB1bnR1ayBzdWF0dSB0aXBlIHNlbWFudGlzIChwZXJoYXRpa2FuIFtHYW1iYXIgXEByZWYoZmlnOmNpYy1zZW0tcGxvdCldKCNjaWMtc2VtLXBsb3QpIHNlbGFuanV0bnlhKS4gTWVza2lwdW4gZGVtaWtpYW4sIHBlbWFrYWlhbiBza2VtYSBbKnBlci0qK0FKXSBiZXNlcnRhIHNrZW1hIGJhd2FoYW4gc2VtYW50aXNueWEgZGFsYW0ga29ycHVzIEJJbmQgc2FhdCBpbmkgbWVtaWxpa2kgdGluZ2thdCBwcm9kdWt0aWZpdGFzIHlhbmcgcmVuZGFoLCBiYWlrIHlhbmcgdGVyd3VqdWQgKGJlcmRhc2Fya2FuIGp1bWxhaCB0aXBlKSBhdGF1cHVuIHlhbmcgcG90ZW5zaWFsIChiZXJkYXNhcmthbiBIVFIpLgoKYGBge3IgdHlwZS1mcmVxLCBpbmNsdWRlPUZ9CnBlcl9hZGpfYmFzZV9jb21iaW5lZCAlPiUKICBtdXRhdGUoY3huX3N1bT1zdW0obiksCiAgICAgICAgIGZyZWtfcGVyXzEwMEs9cm91bmQobioxMDAwMC9jeG5fc3VtLCAyKSwKICAgICAgICAgZnJla19wZXJfMTAwSz1mb3JtYXQoZnJla19wZXJfMTAwSywgYmlnLm1hcms9Ii4iLCBkZWNpbWFsLm1hcms9IiwiKSwKICAgICAgICAgTj1mb3JtYXQobiwgYmlnLm1hcms9Ii4iLCBkZWNpbWFsLm1hcms9IiwiKSkgJT4lCiAgc2VsZWN0KHJvb3QsIG4sIE4sIGZyZWtfcGVyXzEwMEspICU+JQogIHJlbmFtZShgQWthciBrYXRhYD1yb290LCBgTi8xMEsga2F0YWA9ZnJla19wZXJfMTAwSykgJT4lCiAgdG9wX24oMzAsIG4pICU+JQogIHNlbGVjdCgtbikgJT4lCiAga25pdHI6OmthYmxlKGNhcHRpb249IlRpZ2EgcHVsdWggcGVuY29udG9oYW4gdGVyYXRhcyBrb25zdHJ1a3NpIFsqcGVyLSorQUpdLiIpCmBgYAoKIyMgUGVuY29udG9oYW4gS29uc3RydWtzaSBMYXppbSB7I2NpY30KYGBge3IgY2ljLWNhbGN1bGF0aW9ufQpwZXJfYWRqX0NJQ19saW1pdCA8LSByb3VuZCgocGVyX2Fkal9iYXNlX2NvbWJpbmVkICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiRuICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtKCkvZGltKHBlcl9hZGpfYmFzZV9jb21iaW5lZClbMV0pKjIpCnR5cGVfY2ljIDwtIHBlcl9hZGpfYmFzZV9jb21iaW5lZCAlPiUgCiAgZmlsdGVyKG4+PXBlcl9hZGpfQ0lDX2xpbWl0KSAlPiUgCiAgZGltKCkgJT4lIAogIC5bMV0KcGVyY19jaWMgPC0gcm91bmQoKHR5cGVfY2ljL3Blcl9hZGpfdHlwZV9mcmVxKSoxMDAsIDIpCmNpY19zdW0gPC0gcGVyX2Fkal9iYXNlX2NvbWJpbmVkICU+JSAKICBmaWx0ZXIobj49cGVyX2Fkal9DSUNfbGltaXQpICU+JSAKICAuJG4gJT4lIAogIHN1bSgpCnBlcmNfY2ljX3N1bSA8LSByb3VuZCgoY2ljX3N1bS9jeG5fc3VtKSoxMDAsIDIpCmNpY193b3JkcyA8LSBwZXJfYWRqX2Jhc2VfY29tYmluZWQgJT4lIAogIGZpbHRlcihuPj1wZXJfYWRqX0NJQ19saW1pdCkgJT4lIAogIG11dGF0ZShjaWM9c3RyX2Mocm9vdCwgIiAoIiwgZm9ybWF0KG4sIGJpZy5tYXJrPSIuIiwgZGVjaW1hbC5tYXJrPSIsIiksICIpIiwgc2VwID0gIiIpLCAKICAgICAgICAgY2ljPXN0cl9yZXBsYWNlX2FsbChjaWMsICIoXFwoKVxccysiLCAiXFwxIikpICU+JSAKICAuJGNpYyAlPiUgCiAgc3RyX2MoY29sbGFwc2U9JzsgJykKCnBlcl9jaWNfdGliYmxlIDwtIHRyaWJibGUofmBKdW1sYWggdGlwZSBbKnBlci0qK0FKXWAsIH5gSnVtbGFoIHRpcGUgQ0lDYCwgfmAlIHRpcGUgQ0lDYCwgfmBLZWtlcmFwYW4gWypwZXItKitBSl1gLCB+YEtla2VyYXBhbiBDSUNgLCB+YCUgS2VrZXJhcGFuIENJQ2AsCiAgICAgICAgIy0tLS0vLS0tLS0tLS0tLS0tLS0tLS0tLS8tLS0tLS0tLS0tLS0tLS0vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy0tLS0tLS0tLS0tLS0tLS0vLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHBlcl9hZGpfdHlwZV9mcmVxLCB0eXBlX2NpYywgcGVyY19jaWMsIGZvcm1hdChjeG5fc3VtLCBiaWcubWFyayA9ICIuIiwgZGVjaW1hbC5tYXJrID0gIiwiKSwgZm9ybWF0KGNpY19zdW0sIGJpZy5tYXJrID0gIi4iLCBkZWNpbWFsLm1hcmsgPSAiLCIpLCBwZXJjX2NpY19zdW0KICAgICAgICApCmBgYAoKUGVyaWhhbCB0ZXJha2hpciB5YW5nIGluZ2luIGRpdWxhcyBkaSBkYWxhbSBtYWthbGFoIGluaSBhZGFsYWgga2VrZXJhcGFuIHBlbmNvbnRvaGFuIHNwZXNpZmlrIHNrZW1hIFsqcGVyLSorQUpdIHlhbmcgZGFwYXQgbWVudW5qdWtrYW4gdGluZ2thdCBrZXRlcnBhdHJpYW4gZGFuIGtlbGF6aW1hbiBwZW5jb250b2hhbiB0ZXJzZWJ1dC4gUGVydGFueWFhbm55YSBhZGFsYWggYmFnYWltYW5hIGNhcmEgbWVuZW50dWthbiAoYW1iYW5nIGJhdGFzKSBkZXJhamF0IGtlbGF6aW1hbiBzdWF0dSBrYXRhIGRpYmFuZGluZ2thbiBkZW5nYW4ga2F0YSBsYWlubnlhIGRhcmkgc3VhdHUga29uc3RydWtzaT8gCgpWZXJnYXJhIFdpbHNvbiBbLUB2ZXJnYXJhX3dpbHNvbl9jYXRlZ29yaXphdGlvbl8yMDE0LCBoYWwuIDcxLTczXSBtZW5nYWp1a2FuIGNhcmEgbWVuZ3VrdXIgcGVuY29udG9oYW4gbGF6aW0gZGFyaSBzdWF0dSBrb25zdHJ1a3NpICgqY29udmVudGlvbmFsaXNlZCBpbnN0YW5jZXMgb2YgY29uc3RydWN0aW9ucyo7IHNlbGFuanV0bnlhIGRpc2luZ2thdCBDSUMpLiBLYXJlbmEgbWVuZW50dWthbiBrZWxhemltYW4gc3VhdHUgYmVudHVrYW4ga2F0YSBkYXJpIHN1YXR1IGtvbnN0cnVrc2kgY2VuZGVydW5nIGJlcnNpZmF0IHN1Ympla3RpZiBkYW4gcmVsYXRpZiwgcGVuZ3VrdXJhbiBhbWJhbmcgYmF0YXMgQ0lDIChiZXJkYXNhcmthbiBkYXRhIChidWthbiBpbnR1aXNpIHNlbWF0YSkpIGRhcGF0IG1lbmphZGkgdG9sYWsgdWt1ciBhd2FsIGtldGlrYSBtZW1iYW5kaW5na2FuIGthdGEta2F0YSBtYW5hIGRhcmkgc3VhdHUgc2tlbWEga29uc3RydWtzaW9uYWwgbW9yZm9sb2dpcyB5YW5nIHJlbGF0aWYgbGViaWggbGF6aW0sIGRhbiBtYW5hIHlhbmcgdGlkYWsgYmVnaXR1IGxhemltLiBEYXRhIHNlcGVydGkgaW5pIHNlY2FyYSB1bXVtIGJpc2EgZGltYW5mYWF0a2FuIHNlYmFnYWkgYmFoYW4gcGVuZ2FqYXJhbiBzdWF0dSBrb25zdHJ1a3NpIG1vcmZvbG9naXMgbGF6aW0gZGFuIHBlbmNvbnRvaGFubnlhIGRpIGRhbGFtIEJJbmQgdW50dWsgcGVudXR1ciBhc2luZy4KClJ1bXVzIHVudHVrIG1lbmd1a3VyIG5pbGFpIGFtYmFuZyBiYXRhcyBDSUMgYWRhbGFoIGRlbmdhbiBtZW1iYWdpIChpKSBrZWtlcmFwYW4ga2VtdW5jdWxhbiBrZXNlbHVydWhhbiBrb25zdHJ1a3NpbnlhICgqdG9rZW4qKSwgZGFsYW0gaGFsIGluaSBrZW11bmN1bGFuIHRvdGFsIHNrZW1hIFsqcGVyLSorQUpdIHBhZGEga29ycHVzLCBkZW5nYW4gKGlpKSBqdW1sYWggdGlwZW55YSAoKnR5cGUqKSwgeWFpdHUganVtbGFoIGthdGEta2F0YSB5YW5nIG1lbmNvbnRvaGthbiBza2VtYSBbKnBlci0qK0FKXSBwYWRhIGtvcnB1czsgbmlsYWkgcGVtYmFnaWFuIHRlcnNlYnV0IGtlbXVkaWFuIGRpa2FsaWthbiAyIFtAdmVyZ2FyYV93aWxzb25fY2F0ZWdvcml6YXRpb25fMjAxNCwgaGFsLiA3M10uIFBlcmhhdGlrYW4gcnVtdXMgYW1iYW5nIGJhdGFzIENJQyBiZXJpa3V0OiAKCiRDSUMgPSAodG9rZW4vdGlwZSkgKiAyJCAKCkhhc2lsIHBlcmhpdHVuZ2FuIGRhcmkgcnVtdXMgZGkgYXRhcyBkaWJ1bGF0a2FuIGtlIGF0YXMvYmF3YWgsIHRlcmdhbnR1bmcga2VkZWthdGFuIGJpbGFuZ2FuIHNldGVsYWgga29tYSBkZW5nYW4gYmlsYW5nYW4ga2VzZWx1cnVoYW5ueWEuIE1lbnVydXQgVmVyZ2FyYSBXaWxzb24gWy1AdmVyZ2FyYV93aWxzb25fY2F0ZWdvcml6YXRpb25fMjAxNCwgaGFsLiA3M10sIHByYWFuZ2dhcGFuIHlhbmcgbWVuZGFzYXJpIHJ1bXVzIHRlcnNlYnV0IGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQuIEFwYWJpbGEgc3VhdHUgcGVuY29udG9oYW4gc2tlbWEgWypwZXItKitBSl0sIHNlcGVydGkgKipwZXJrdWF0KiosIG11bmN1bCBkdWEga2FsaSBsZWJpaCBiYW55YWsgZGFyaSByYXRhLXJhdGEga2VrZXJhcGFuIGtlbXVuY3VsYW5ueWEsIHNlcGVydGkgZGl0dW5qdWtrYW4gZGFyaSByYXNpbyAkdG9rZW4vdGlwZSQtbnlhLCBiZW50dWthbiBrYXRhIHRlcnNlYnV0IGRhcGF0IGRpYW5nZ2FwIGxhemltLgoKQW1iYW5nIGJhdGFzIENJQyB1bnR1ayBza2VtYSBbKnBlci0qK0FKXSBhZGFsYWggYHIgcGVyX2Fkal9DSUNfbGltaXRgLCB5YW5nIG1lcnVwYWthbiBoYXNpbCBkYXJpIChgciBjeG5fc3VtICU+JSBmb3JtYXQoYmlnLm1hcms9Ii4iLCBkZWNpbWFsLm1hcms9JywnKWAgKCp0b2tlbiopL2ByIHBlcl9hZGpfdHlwZV9mcmVxYCAoKnR5cGUqKSBgKmAyKS4gSmFkaSwgdGlwZSBwZW5jb250b2hhbiBza2VtYSBbKnBlci0qK0FKXSB5YW5nIGtla2VyYXBhbiBrZW11bmN1bGFubnlhIHNhbWEgZGVuZ2FuIGF0YXUgbGViaWggYmVzYXIgZGFyaSBgciBwZXJfYWRqX0NJQ19saW1pdGAgZGFwYXQgZGlrYXRha2FuIGxhemltL2tvbnZlbnNpb25hbCBbQHZlcmdhcmFfd2lsc29uX2NhdGVnb3JpemF0aW9uXzIwMTQsIGhhbC4gNzNdLiBKdW1sYWggdGlwZSBDSUMgcGFkYSBkYXRhIHNrZW1hIFsqcGVyLSorQUpdIGFkYWxhaCBgciB0eXBlX2NpY2AgamVuaXMga2F0YSwgc2VwZXJ0aSB5YW5nIGRpdGFtcGlsa2FuIHBhZGEga29sb20ga2VlbXBhdCBwYWRhIFtUYWJlbCBcQHJlZih0YWI6Y2ljLXdvcmQtdHlwZXMpXSgjY2ljLXdvcmQtdHlwZXMpIGJlcmlrdXQuIAoKYGBge3IgY2ljLXdvcmQtdHlwZXN9CnRpYmJsZShgUmFzaW8ga2VrZXJhcGFuL3RpcGVgPShwZXJfYWRqX2Jhc2VfY29tYmluZWQgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJG4gJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW0oKS9kaW0ocGVyX2Fkal9iYXNlX2NvbWJpbmVkKVsxXSksCiAgICAgICBgQW1iYW5nIGJhdGFzIENJQ2A9IHBlcl9hZGpfQ0lDX2xpbWl0LAogICAgICAgYEp1bWxhaCB0aXBlIENJQ2A9dHlwZV9jaWMsCiAgICAgICBgUGVuY29udG9oYW4gQ0lDIHNrZW1hIFsqcGVyLSorQUpdYD1jaWNfd29yZHMpICU+JQogIGtuaXRyOjprYWJsZShjYXB0aW9uPSJLYXRhLWthdGEgbGF6aW0gcGVuY29udG9oYW4gc2tlbWEgWypwZXItKitBSl0uIikKYGBgCgpBbmdrYSBkaSBkYWxhbSB0YW5kYSBrdXJ1bmcgcGFkYSBrb2xvbSAqKmBQZW5jb250b2hhbiBDSUMgc2tlbWFgKiogKipgW2AqKipfX3Blci1fXyoqKmArQUpdYCoqIG1lbnVuanVra2FuIGtla2VyYXBhbiBrZW11bmN1bGFuIGthdGEgdGVyc2VidXQuIFtHYW1iYXIgXEByZWYoZmlnOmNpYy1zZW0tcGxvdCldKCNjaWMtc2VtLXBsb3QpIGJlcmlrdXQgbWVuZW1wYXRrYW4gcGVyc2ViYXJhbiB0aXBlIGthdGEgbGF6aW0gcGFkYSBbVGFiZWwgXEByZWYodGFiOmNpYy13b3JkLXR5cGVzKV0oI2NpYy13b3JkLXR5cGVzKSBzZWJlbHVtbnlhIGJlcmRhc2Fya2FuIHRpcGUgc2VtYW50aXNueWEuCgpgYGB7ciBjaWMtc2VtLXBsb3QsIGZpZy5jYXA9IlBlcnNlYmFyYW4gdGlwZSBzZW1hbnRpcyBkYXJpIHRpcGUgQ0lDIHVudHVrIGtvbnN0cnVrc2kgWypwZXItKitBSl0iLCBmaWcud2lkdGg9OH0KZGYgPC0gcGVyX2Fkal9iYXNlX2NvbWJpbmVkICU+JSAKICBmaWx0ZXIobj49cGVyX2Fkal9DSUNfbGltaXQpICU+JSAKICBncm91cF9ieShzZW0pICU+JSAKICBtdXRhdGUoY2ljX3dvcmQ9c3RyX2Moc3RyX2Mocm9vdCwgIiAoIiwgcHJldHR5TnVtKG4sIGJpZy5tYXJrPSIuIiwgZGVjaW1hbC5tYXJrPSIsIiksICIpIiwgc2VwPSIiKSwgY29sbGFwc2U9IjsgIikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoc2VtPXJlcGxhY2Uoc2VtLCBzZW09PSdwcm9wZW5zaXRhcycsICdrZWNlbmRlcnVuZ2FuIG1hbnVzaWFcbigqaHVtYW4gcHJvcGVuc2l0eSopJyksCiAgICAgICAgIHNlbT1yZXBsYWNlKHNlbSwgc2VtPT0ndWt1cmFuJywgJ3VrdXJhbi9kaW1lbnNpJyksCiAgICAgICAgIHNlbT1yZXBsYWNlKHNlbSwgc2VtPT0nbmlsYWknLCAnbmlsYWkgKCp2YWx1ZSopJykpICU+JQogIGdyb3VwX2J5KHNlbSwgY2ljX3dvcmQpICU+JSAKICBzdW1tYXJpc2Uobj1zdW0obikpCmRmICU+JQogIGdncGxvdChhZXMoeD1yZW9yZGVyKHNlbSwgbikseT1uKSkgKyAKICBnZW9tX2NvbChmaWxsPSJibGFjayIpICsgCiAgY29vcmRfZmxpcCgpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsPWNpY193b3JkKSwgCiAgICAgICAgICAgIGhqdXN0PWlmX2Vsc2Uoc3RyX2RldGVjdChkZiRjaWNfd29yZCwgImx1YXN8a3VhdCIpLCAxLjA1LCAtMC4xKSwgCiAgICAgICAgICAgIHNpemU9MywgCiAgICAgICAgICAgIGNvbG91cj1pZl9lbHNlKHN0cl9kZXRlY3QoZGYkY2ljX3dvcmQsICJsdWFzfGt1YXQiKSwgIndoaXRlIiwgImJsYWNrIikpICsKICB0aGVtZV9idygpICsKICB0aGVtZShheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTEpLCBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCkpICsKICBsYWJzKHg9J1RpcGUgc2VtYW50aXMnLCB5PSdLZWtlcmFwYW4nLCBmaWxsPU5VTEwpCmBgYAoKW0dhbWJhciBcQHJlZihmaWc6Y2ljLXNlbS1wbG90KV0oI2NpYy1zZW0tcGxvdCkgbWVudW5qdWtrYW4gYmFod2EgPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+dWt1cmFuPC9zcGFuPiBkYW4gPHNwYW4gc3R5bGU9ImZvbnQtdmFyaWFudDpzbWFsbC1jYXBzOyI+Y2lyaV9maXNpazwvc3Bhbj4gYWRhbGFoIHRpcGUgc2VtYW50aXMgeWFuZyBrZXJhcCBtdW5jdWwgZGkgYW50YXJhIGtlbG9tcG9rIGthdGEta2F0YSB5YW5nIGJpc2EgZGlhbmdnYXAgbGF6aW0gdW50dWsgc2tlbWEgWypwZXItKitBSl0uIEhhbCBpbmkgZGlwaWN1IG9sZWggdGluZ2dpbnlhIGtla2VyYXBhbiB0aXBlIHlhbmcgbWVuY29udG9oa2FuIGtlZHVhIHRpcGUgc2VtYW50aXMgdGVyc2VidXQuIDxzcGFuIHN0eWxlPSJmb250LXZhcmlhbnQ6c21hbGwtY2FwczsiPlVrdXJhbjwvc3Bhbj4gdGlkYWsgaGFueWEgdGluZ2dpIGRhbGFtIGhhbCBrZWtlcmFwYW5ueWEsIHRhcGkganVnYSBtZW1pbGlraSBqdW1sYWggdGlwZSBsYXppbSB0ZXJiYW55YWssIGppa2EgZGliYW5kaW5na2FuIHV0YW1hbnlhIGRlbmdhbiA8c3BhbiBzdHlsZT0iZm9udC12YXJpYW50OnNtYWxsLWNhcHM7Ij5jaXJpX2Zpc2lrPC9zcGFuPiwgeWFuZyBrZWtlcmFwYW5ueWEgZGlkb21pbmFzaSBvbGVoIHNhdHUgYWpla3RpdmEsIHlhaXR1ICoqa3VhdCoqLiBTZWxhbmp1dG55YSwgbWFzaW5nLW1hc2luZyBrYXRhIENJQyBkYXJpIHRpYXAtdGlhcCB0aXBlIHNlbWFudGlzIHRlcnNlYnV0IGRhcGF0IGRpYW5nZ2FwIHNlYmFnYWkgYW5nZ290YSBhamVrdGl2YSBwcm90b3RpcGlrYWwgeWFuZyB1bXVtIG1lbmNvbnRvaGthbiBza2VtYSBiYXdhaGFuIHNlbWFudGlzIFsqcGVyLSorQUpdIHBhZGEgW0dhbWJhciBcQHJlZihmaWc6Y2ljLXNlbS1wbG90KV0oI2NpYy1zZW0tcGxvdCkuIFtUYWJlbCBcQHJlZih0YWI6Y2ljLWN4bildKCNjaWMtY3huKSBzZWxhbmp1dG55YSBtZW5nZ2FtYmFya2FuIHRpbmdrYXQga2V0ZXJwYXRyaWFuIHNrZW1hIFsqcGVyLSorQUpdIHNlY2FyYSBsZWJpaCBsdWFzIGRhbGFtIGthaXRhbm55YSBkZW5nYW4ga2VrZXJhcGFuIHBlbmNvbnRvaGFuIGxhemltbnlhLgoKYGBge3IgY2ljLWN4bn0KcGVyX2NpY190aWJibGUgJT4lCiAga25pdHI6OmthYmxlKGNhcHRpb249IlBlcnNlbnRhc2UganVtbGFoIHRpcGUgZGFuIGtla2VyYXBhbiBza2VtYSBbKnBlci0qK0FKXSB5YW5nIG1lbGFtcGF1aSBhbWJhbmcgYmF0YXMgQ0lDIGRhbGFtIGthaXRhbm55YSBkZW5nYW4ga2VzZWx1cnVoYW4ganVtbGFoIHRpcGUgZGFuIGtla2VyYXBhbiBza2VtYSBbKnBlci0qK0FKXS4iKQpgYGAKCltUYWJlbCBcQHJlZih0YWI6Y2ljLWN4bildKCNjaWMtY3huKSBkYXBhdCBkaXBhaGFtaSBzZWJhZ2FpIGJlcmlrdXQuIERhcmkgdG90YWwgYHIgcGVyX2Fkal90eXBlX2ZyZXFgIHRpcGUga2F0YS1rYXRhIHBlbmNvbnRvaGFuIHNrZW1hIFsqcGVyLSorQUpdLCBoYW55YSBgciBwZXJfY2ljX3RpYmJsZSAlPiUgLlssM10gJT4lIHVubGlzdCgpICU+JSB1bm5hbWUoKWAlICh5YWl0dSBgciBwZXJfY2ljX3RpYmJsZSAlPiUgLlssMl0gJT4lIHVubGlzdCgpICU+JSB1bm5hbWUoKWAgdGlwZSkgeWFuZyBkYXBhdCBkaWthdGFrYW4gY3VrdXAgbGF6aW07IGhhbCBpbmkgYmVyc2lmYXQgcmVsYXRpZiBrYXJlbmEgYWRhbnlhIHBlcmJlZGFhbiBwZW5nYWxhbWFuIHNldGlhcCBwZW51dHVyIEJJbmQgdGVyaGFkYXAga2F0YS1rYXRhIHlhbmcgYWRhIGRpIGJhd2FoIGF0YXUgZGkgYXRhcyBhbWJhbmcgYmF0YXMgQ0lDIHBhZGEga29ycHVzIGluaV5bRGVuZ2FuIGthdGEgbGFpbiwgYmlzYSBzYWphIHRlcmRhcGF0IGthdGEta2F0YSB5YW5nIGp1Z2EgZGlhbmdnYXAgbGF6aW0gZGFuIHNlaGFydXNueWEgbWFzdWsgKHNlY2FyYSBpbnR1aXNpKSBrZSBkYWxhbSBrZWxvbXBvayBDSUM7IHlhbmcgcGVybHUgZGlwZXJoYXRpa2FuIGFkYWxhaCBydW11cyBDSUMgZGlndW5ha2FuIHVudHVrIGRhcGF0ICoqbWVuZ3VrdXIqKiBzZWNhcmEgbGViaWggZW1waXJpcyBiZXJkYXNhcmthbiBkYXRhIGt1YW50aXRhdGlmIHlhbmcgZGlwZXJvbGVoIGRhcmkga29ycHVzLl0uIE1lc2tpcHVuIHByb3BvcnNpIGByIHBlcl9jaWNfdGliYmxlICU+JSAuWywzXSAlPiUgdW5saXN0KCkgJT4lIHVubmFtZSgpYCUgdW50dWsganVtbGFoIHRpcGUgQ0lDIGluaSBjdWt1cCBrZWNpbCwgeWFuZyBwZXJsdSBkaXBlcmhhdGlrYW4gYWRhbGFoIGByIHBlcl9jaWNfdGliYmxlICU+JSAuWyw2XSAlPiUgdW5saXN0KCkgJT4lIHVubmFtZSgpYCUga2VrZXJhcGFuIGtlbXVuY3VsYW4gc2tlbWEgWypwZXItKitBSl0gZGkga2VzZWx1cnVoYW4ga29ycHVzIHRlcmRpcmkgZGFyaSBwZW5ndWxhbmdhbiBrZS1gciBwZXJfY2ljX3RpYmJsZSAlPiUgLlssMl0gJT4lIHVubGlzdCgpICU+JSB1bm5hbWUoKWAgdGlwZS10aXBlIENJQyB0ZXJzZWJ1dC4gRGFyaSBzdWR1dCBwYW5kYW5nIGxpbmd1aXN0aWsgYmViYXNpcyBwZW5nZ3VuYWFuIGRhbiBDeEcsIHRpbmdnaW55YSBrZWtlcmFwYW4gZGFyaSBtYXNpbmctbWFzaW5nIHBlbmNvbnRvaGFuIHNwZXNpZmlrIHNrZW1hIFsqcGVyLSorQUpdLCBzZXBlcnRpIHlhbmcgdGVybWFzdWsgZGkgZGFsYW0gdGlwZSBDSUMgcGFkYSBbVGFiZWwgXEByZWYodGFiOmNpYy13b3JkLXR5cGVzKV0oI2NpYy13b3JkLXR5cGVzKSBzZWJlbHVtbnlhLCBha2FuIChpKSBsZWJpaCBtZW5ndWF0a2FuIHJlcHJlc2VudGFzaSBrYXRhLWthdGEgc3Blc2lmaWsgdGVyc2VidXQgZGliYW5kaW5na2FuIHNrZW1hIGtvbnN0cnVrc2lvbmFsbnlhIHNlY2FyYSB1bXVtLCBhdGF1cHVuIHNrZW1hIGJhd2FoYW4gc2VtYW50aXNueWEsIGRhbiAoaWkpIGNlbmRlcnVuZyB0aWRhayBiZXJrb250cmlidXNpIHRlcmhhZGFwIHByb2R1a3RpZml0YXMgc2tlbWEga29uc3RydWtzaW9uYWxueWEgW3Blcmlrc2EgQGhvZmZtYW5uX3VzYWdlLWJhc2VkXzIwMTMsIGhhbC4gOV0uIFRpbmdnaW55YSBwZXJzZW50YXNlIGtla2VyYXBhbiBkYXJpIHNrZW1hIFsqcGVyLSorQUpdIHlhbmcgdGVyZGlyaSBhdGFzIHBlbmd1bGFuZ2FuIHRpcGUga2F0YSBDSUMgdGVyc2VidXQgbXVuZ2tpbiBtZW5qYWRpIHBlbWljdSByZW5kYWhueWEgcmFzaW8gcHJvZHVrdGlmaXRhcyBkYXJpIHNrZW1hIFsqcGVyLSorQUpdLCBrYXJlbmEgbWVuZ2VjaWxrYW4ganVtbGFoIHRpcGUgc2VydGEgcmFzaW8gKmhhcGF4Ki1iZXJiYW5kaW5nLWtla2VyYXBhbiBza2VtYW55YSBzZWNhcmEgbWVueWVsdXJ1aC4gCgojIFBlbnV0dXAKCk1ha2FsYWggaW5pIHRlbGFoIG1lbWJhaGFzIHVuc3VyIHBlbmdndW5hYW4gc2tlbWEga29uc3RydWtzaW9uYWwga2F0YSBrZXJqYSBrYXVzYXRpZiBbKnBlci0qK0FKXSBkaSBCSW5kLiBVbnN1ci11bnN1ciBpbmkgbWVsaXB1dGkgdW5zdXIgZm9ybWFsIGRhbiBzZW1hbnRpcy4gUGFkYSB0YXRhcmFuIGZvcm1hbCwgbWFrYWxhaCBpbmkgbWVuZW11a2VuYWxpIGp1bWxhaCB0aXBlLCBqdW1sYWggKmhhcGF4KiBkYW4ga2VrZXJhcGFuIGRhcmkgdGlwZS10aXBlIGthdGEgeWFuZyBtZW5jb250b2hrYW4gc2tlbWEga29uc3RydWtzaW9uYWwgdGVyc2VidXQuIEJlcmRhc2Fya2FuIGp1bWxhaCB0aXBlIGRhbiAqaGFwYXgqLW55YSBzZWNhcmEgdW11bSwgc2tlbWEgWypwZXItKitBSl0gZGFwYXQgZGlrYXRha2FuIHRpZGFrIGJlZ2l0dSBwcm9kdWt0aWYgdW50dWsgbWVuZ2hhc2lsa2FuIGthdGEta2F0YSBiYXJ1LiBQZW1iYWhhc2FuIGxlYmloIHJpbmNpIHRlcmthaXQgdW5zdXIgc2VtYW50aXMgc2tlbWEgWypwZXIqLStBSl0gYmVyZGFzYXJrYW4gdGlwZSBzZW1hbnRpcyBhamVrdGl2YSBkYXNhcm55YSBqdWdhIGRpYmFoYXMgcGFkYSBtYWthbGFoIGluaS4gUGVtYmFoYXNhbiBwYWRhIHRhdGFyYW4gc2VtYW50aXMgaW5pIG1lbnVuanVra2FuIGJhaHdhIHNrZW1hIGJhd2FoYW4gc2VtYW50aXMgc2tlbWEgWypwZXItKitBSl0ganVnYSB0aWRhayBiZWdpdHUgcHJvZHVrdGlmIHNldGFrYXQgaW5pLCB0ZXJsZXBhcyBkYXJpIGRpdGVtdWthbm55YSBodWJ1bmdhbiBwb3NpdGlmIGRhbiBrdWF0IGFudGFyYSBwZXJsdWFzYW4gc3VhdHUgc2tlbWEgYmF3YWhhbiBzZW1hbnRpcyAoYXRhcyBkYXNhciAqaGFwYXgqLW55YSkgZGFuIGp1bWxhaCB0aXBlIGRhcmkgc2tlbWEgYmF3YWhhbiB0ZXJzZWJ1dCB5YW5nIHRlbGFoIGFkYSBzZWJlbHVtbnlhLgoKU2VsYW5qdXRueWEsIG1ha2FsYWggaW5pIGp1Z2EgbWVudW5qdWtrYW4gKGNhcmEgbWVuZW50dWthbikga2F0YS1rYXRhIHlhbmcgbGF6aW0gbXVuY3VsIGRpIGRhbGFtIGtvcnB1cyBzZWJhZ2FpIHBlbmNvbnRvaGFuIHNrZW1hIFsqcGVyLSorQUpdIHNlY2FyYSB1bXVtLCBiZXNlcnRhIHRpcGUgc2VtYW50aXNueWEuIERhdGEgaW5pIGJpc2EgZGlndW5ha2FuIHNlYmFnYWkgbWFzdWthbiB1bnR1ayBwZW5nYWphcmFuIEJJbmQgYmFnaSBwZW51dHVyIGFzaW5nIHRlcmthaXQgcGVuY29udG9oYW4ga2hhcyAocHJvdG90aXBpa2FsKSBkYXJpIHN1YXR1IGtvbnN0cnVrc2kgbW9yZm9sb2dpcyBkaSBkYWxhbSBrb3JwdXMuIFRlcmRhcGF0IGJlYmVyYXBhIHVuc3VyIHBlbWFrYWlhbiBkYXJpIHNrZW1hIFsqcGVyLSorQUpdIHlhbmcgdGlkYWsgZGliYWhhcyBwYWRhIG1ha2FsYWggaW5pLCB0YXBpIHRlbGFoIGRpc2VidXRrYW4gc2VraWxhcyBwYWRhIFtzdWItYmFnaWFuIFxAcmVmKHNuZWRkb24pXSgjc25lZGRvbikuIE5hbXVuIGRlbWlraWFuLCBtYWthbGFoIGluaSBkaWhhcmFwa2FuIGRhcGF0ICoqbWVtcGVybHVhcyoqIHBlbWFoYW1hbiBwZW1lcmhhdGkgZGFuIHBlbmVsaXRpIEJJbmQsIGtodXN1c255YSB0ZXJrYWl0IGJlYmVyYXBhIHVuc3VyIHBlbWFrYWlhbiBza2VtYSBrb25zdHJ1a3Npb25hbCBtb3Jmb2xvZ2lzIFsqcGVyLSorQUpdIGRpIEJJbmQuIEFraGlyIGthdGEsIG1ha2FsYWggaW5pIGRpaGFyYXBrYW4gZGFwYXQgKiptZW1wZXJrYXlhKioga2hhc2FuYWgga2FqaWFuIG1vcmZvbG9naSBkaSBCSW5kIHlhbmcgdGVsYWggYWRhIHNlYmVsdW1ueWEsIGRlbmdhbiBtZW55aXNpcGthbiAoaSkgdW5zdXIgbWV0b2RvbG9naXMgdGVybXV0YWtoaXIgZGFyaSBMaW5ndWlzdGlrIEtvcnB1cyBkYW4gKGlpKSB3YXdhc2FuIGxpbmd1aXN0aWsgdGVvcmV0aXMga29udGVtcG9yZXIgYmVyZGFzYXJrYW4gcGVuZ2d1bmFhbiwgc2VwZXJ0aSBUYXRhYmFoYXNhIEtvbnN0cnVrc2lvbmFsLgoKIyBEYWZ0YXIgcHVzdGFrYSB7LX0K