LyogTE9DX0FQSSBUT09MIFZFUlNJT046IDMuMjggKi8KLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgTCBPIEMgXyBBIFAgSSBfIEMgTyBNIE0gTyBOIC4gWCBEIFIKCkdFTkVSQUwgREVTQ1JJUFRJT04KICBUaGlzIGlzIGFuIEFVVE8gR0VORVJBVEVEIGZpbGUgdGhhdCBwcm92aWRlcyBhbiB4ZHIgY29tcGF0aWJsZSBkZWZpbml0aW9uIG9mCiAgYW4gYXBpIHRoYXQgcmVwcmVzZW50cyB0aGUgZ3JvdXBpbmcgb2YgdGhlIGRpZmZlcmVudCBjYWxsYmFjayBmdW5jdGlvbnMgdGhlCiAgbG9jX2FwaSBBUEkgc3VwcG9ydHMuCgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpDb3B5cmlnaHQgKGMpIDIwMDksIFFVQUxDT01NIFVTQSwgSU5DLgoKQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCrcgICAgICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAoKtyAgICAgICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCgq3ICAgICAgICAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUVVBTENPTU0gVVNBLCBJTkMuICBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXQgSGlzdG9yeQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRPIEdFTkVSQVRFRAoKR2VuZXJhdGVkIGJ5IGZvbGxvd2luZyB2ZXJzaW9ucyBvZiBIdG9ycGMgbW9kdWxlczoKSWQ6IC8vc291cmNlL3Fjb20vcWN0L2NvcmUvbXByb2MvdG9vbHMvcmVsLzAzLjAxL2h0b3JwYy9odG9ycGMucGwjOSAKSWQ6IC8vc291cmNlL3Fjb20vcWN0L2NvcmUvbXByb2MvdG9vbHMvcmVsLzAzLjAxL2h0b3JwYy9saWIvSHRvcnBjL1N0YXJ0LnBtIzQgCklkOiAvL3NvdXJjZS9xY29tL3FjdC9jb3JlL21wcm9jL3Rvb2xzL3JlbC8wMy4wMS9odG9ycGMvbGliL0h0b3JwYy9IdG94ZHIucG0jMSAKSWQ6IC8vc291cmNlL3Fjb20vcWN0L2NvcmUvbXByb2MvdG9vbHMvcmVsLzAzLjAxL2h0b3JwYy9saWIvSHRvcnBjL1hEUi5wbSM3IApJZDogLy9zb3VyY2UvcWNvbS9xY3QvY29yZS9tcHJvYy90b29scy9yZWwvMDMuMDEvaHRvcnBjL2xpYi9IdG9ycGMvT3V0cHV0LnBtIzI2IApJZDogLy9zb3VyY2UvcWNvbS9xY3QvY29yZS9tcHJvYy90b29scy9yZWwvMDMuMDEvaHRvcnBjL2xpYi9IdG9ycGMvUGFyc2VyLnBtIzMgCklkOiAvL3NvdXJjZS9xY29tL3FjdC9jb3JlL21wcm9jL3Rvb2xzL3JlbC8wMy4wMS9odG9ycGMvbGliL0h0b3JwYy9NZXRhY29tbWVudHMucG0jMiAKSWQ6IC8vc291cmNlL3Fjb20vcWN0L2NvcmUvbXByb2MvdG9vbHMvcmVsLzAzLjAxL2h0b3JwYy9saWIvSHRvcnBjL1N5bWJvbFRhYmxlLnBtIzQgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJEhlYWRlciQgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgoKCmNvbnN0IFJQQ19MT0NfRVZFTlRfTklfTk9USUZZX1ZFUklGWV9SRVFVRVNUID0gMHgwMDAwMDAxMDsKCmNvbnN0IFJQQ19MT0NfRVZFTlRfSU9DVExfUkVQT1JUID0gMHgwMDAwMDA4MDsKCmNvbnN0IFJQQ19MT0NfRVZFTlRfTE9DQVRJT05fU0VSVkVSX1JFUVVFU1QgPSAweDAwMDAwMDQwOwoKY29uc3QgUlBDX0xPQ19FVkVOVF9SRVNFUlZFRCA9IDB4ODAwMDAwMDAwMDAwMDAwMDsKCmNvbnN0IFJQQ19MT0NfRVZFTlRfUEFSU0VEX1BPU0lUSU9OX1JFUE9SVCA9IDB4MDAwMDAwMDE7Cgpjb25zdCBSUENfTE9DX0VWRU5UX0FTU0lTVEFOQ0VfREFUQV9SRVFVRVNUID0gMHgwMDAwMDAyMDsKCmNvbnN0IFJQQ19MT0NfRVZFTlRfTk1FQV9QT1NJVElPTl9SRVBPUlQgPSAweDAwMDAwMDA4OwoKY29uc3QgUlBDX0xPQ19FVkVOVF9TQVRFTExJVEVfUkVQT1JUID0gMHgwMDAwMDAwMjsKCmNvbnN0IFJQQ19MT0NfRVZFTlRfU1RBVFVTX1JFUE9SVCA9IDB4MDAwMDAxMDA7Cgpjb25zdCBSUENfTE9DX09QRU5fVkVSU0lPTiA9IDB4MDAwMTAwMDE7CmNvbnN0IFJQQ19MT0NfQ0xPU0VfVkVSU0lPTiA9IDB4MDAwMTAwMDE7CmNvbnN0IFJQQ19MT0NfU1RBUlRfRklYX1ZFUlNJT04gPSAweDAwMDEwMDAxOwpjb25zdCBSUENfTE9DX1NUT1BfRklYX1ZFUlNJT04gPSAweDAwMDEwMDAxOwpjb25zdCBSUENfTE9DX0lPQ1RMX1ZFUlNJT04gPSAweDAwMDEwMDAxOwpjb25zdCBSUENfTE9DX0VWRU5UX0NCX0ZfVFlQRV9WRVJTSU9OID0gMHgwMDAxMDAwMTsKY29uc3QgUlBDX0xPQ19BUElBUElfVkVSU0lPTl9JU19IQVNIS0VZID0gMDsKY29uc3QgUlBDX0xPQ19BUElfQVBJX01BSk9SX05VTSA9IDB4MDAwMTsKdHlwZWRlZiBib29sIHJwY19ib29sZWFuOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcnBjX3VpbnQzMjsKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcnBjX3VpbnQxNjsKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBycGNfdWludDg7Cgp0eXBlZGVmIGxvbmcgcnBjX2ludDMyOwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHJwY19ieXRlOwoKdHlwZWRlZiB1bnNpZ25lZCBoeXBlciBycGNfdWludDY0OwoKdHlwZWRlZiBycGNfaW50MzIgcnBjX2xvY19jbGllbnRfaGFuZGxlX3R5cGU7Cgp0eXBlZGVmIHJwY191aW50NjQgcnBjX2xvY19ldmVudF9tYXNrX3R5cGU7Cgp0eXBlZGVmIHJwY191aW50NjQgcnBjX2xvY19wb3NpdGlvbl92YWxpZF9tYXNrX3R5cGU7Cgp0eXBlZGVmIHJwY191aW50MzIgcnBjX2xvY19wb3NfdGVjaG5vbG9neV9tYXNrX3R5cGU7CgplbnVtIHJwY19sb2Nfc2Vzc2lvbl9zdGF0dXNfZV90eXBlIHsKICBSUENfTE9DX1NFU1NfU1RBVFVTX1NVQ0NFU1MgPSAwLAogIFJQQ19MT0NfU0VTU19TVEFUVVNfSU5fUFJPR0VTUyA9IDEsCiAgUlBDX0xPQ19TRVNTX1NUQVRVU19HRU5FUkFMX0ZBSUxVUkUgPSAyLAogIFJQQ19MT0NfU0VTU19TVEFUVVNfVElNRU9VVCA9IDMsCiAgUlBDX0xPQ19TRVNTX1NUQVRVU19VU0VSX0VORCA9IDQsCiAgUlBDX0xPQ19TRVNTX1NUQVRVU19CQURfUEFSQU1FVEVSID0gNSwKICBSUENfTE9DX1NFU1NfU1RBVFVTX1BIT05FX09GRkxJTkUgPSA2LAogIFJQQ19MT0NfU0VTU19TVEFUVVNfRU5HSU5FX0xPQ0tFRCA9IDcsCiAgUlBDX0xPQ19TRVNTX1NUQVRVU19NQVggPSAyNjg0MzU0NTYKfTsKCnN0cnVjdCBycGNfbG9jX2NhbGVuZGFyX3RpbWVfc190eXBlIHsKICBycGNfdWludDE2IHllYXI7CiAgdW5zaWduZWQgY2hhciBtb250aDsKICB1bnNpZ25lZCBjaGFyIGRheV9vZl93ZWVrOwogIHVuc2lnbmVkIGNoYXIgZGF5OwogIHVuc2lnbmVkIGNoYXIgaG91cjsKICB1bnNpZ25lZCBjaGFyIG1pbnV0ZTsKICB1bnNpZ25lZCBjaGFyIHNlY29uZDsKICBycGNfdWludDE2IG1pbGxpc2Vjb25kOwp9OwoKc3RydWN0IHJwY19sb2NfcGFyc2VkX3Bvc2l0aW9uX3NfdHlwZSB7CiAgcnBjX2xvY19wb3NpdGlvbl92YWxpZF9tYXNrX3R5cGUgdmFsaWRfbWFzazsKICBycGNfbG9jX3Nlc3Npb25fc3RhdHVzX2VfdHlwZSBzZXNzaW9uX3N0YXR1czsKICBycGNfbG9jX2NhbGVuZGFyX3RpbWVfc190eXBlIHRpbWVzdGFtcF9jYWxlbmRhcjsKICBycGNfdWludDY0IHRpbWVzdGFtcF91dGM7CiAgcnBjX3VpbnQ4IGxlYXBfc2Vjb25kczsKICBmbG9hdCB0aW1lX3VuYzsKICBkb3VibGUgbGF0aXR1ZGU7CiAgZG91YmxlIGxvbmdpdHVkZTsKICBmbG9hdCBhbHRpdHVkZV93cnRfZWxsaXBzb2lkOwogIGZsb2F0IGFsdGl0dWRlX3dydF9tZWFuX3NlYV9sZXZlbDsKICBmbG9hdCBzcGVlZF9ob3Jpem9udGFsOwogIGZsb2F0IHNwZWVkX3ZlcnRpY2FsOwogIGZsb2F0IGhlYWRpbmc7CiAgZmxvYXQgaG9yX3VuY19jaXJjdWxhcjsKICBmbG9hdCBob3JfdW5jX2VsbGlwc2Vfc2VtaV9tYWpvcjsKICBmbG9hdCBob3JfdW5jX2VsbGlwc2Vfc2VtaV9taW5vcjsKICBmbG9hdCBob3JfdW5jX2VsbGlwc2Vfb3JpZW50X2F6aW11dGg7CiAgZmxvYXQgdmVydF91bmM7CiAgZmxvYXQgc3BlZWRfdW5jOwogIGZsb2F0IGhlYWRpbmdfdW5jOwogIHVuc2lnbmVkIGNoYXIgY29uZmlkZW5jZV9ob3Jpem9udGFsOwogIHVuc2lnbmVkIGNoYXIgY29uZmlkZW5jZV92ZXJ0aWNhbDsKICBmbG9hdCBtYWduZXRpY19kZXZpYXRpb247CiAgcnBjX2xvY19wb3NfdGVjaG5vbG9neV9tYXNrX3R5cGUgdGVjaG5vbG9neV9tYXNrOwp9OwoKZW51bSBycGNfbG9jX3N2X3N5c3RlbV9lX3R5cGUgewogIFJQQ19MT0NfU1ZfU1lTVEVNX0dQUyA9IDEsCiAgUlBDX0xPQ19TVl9TWVNURU1fR0FMSUxFTyA9IDIsCiAgUlBDX0xPQ19TVl9TWVNURU1fU0JBUyA9IDMsCiAgUlBDX0xPQ19TVl9TWVNURU1fQ09NUEFTUyA9IDQsCiAgUlBDX0xPQ19TVl9TWVNURU1fR0xPTkFTUyA9IDUsCiAgUlBDX0xPQ19TVl9TWVNURU1fTUFYID0gMjY4NDM1NDU2Cn07CgplbnVtIHJwY19sb2Nfc3Zfc3RhdHVzX2VfdHlwZSB7CiAgUlBDX0xPQ19TVl9TVEFUVVNfSURMRSA9IDEsCiAgUlBDX0xPQ19TVl9TVEFUVVNfU0VBUkNIID0gMiwKICBSUENfTE9DX1NWX1NUQVRVU19UUkFDSyA9IDMsCiAgUlBDX0xPQ19TVl9TVEFUVVNfTUFYID0gMjY4NDM1NDU2Cn07Cgp0eXBlZGVmIHJwY191aW50MzIgcnBjX2xvY19zdl9pbmZvX3ZhbGlkX21hc2tfdHlwZTsKCnN0cnVjdCBycGNfbG9jX3N2X2luZm9fc190eXBlIHsKICBycGNfbG9jX3N2X2luZm9fdmFsaWRfbWFza190eXBlIHZhbGlkX21hc2s7CiAgcnBjX2xvY19zdl9zeXN0ZW1fZV90eXBlIHN5c3RlbTsKICBycGNfdWludDggcHJuOwogIHJwY191aW50OCBoZWFsdGhfc3RhdHVzOwogIHJwY19sb2Nfc3Zfc3RhdHVzX2VfdHlwZSBwcm9jZXNzX3N0YXR1czsKICBycGNfYm9vbGVhbiBoYXNfZXBoOwogIHJwY19ib29sZWFuIGhhc19hbG07CiAgZmxvYXQgZWxldmF0aW9uOwogIGZsb2F0IGF6aW11dGg7CiAgZmxvYXQgc25yOwp9OwoKdHlwZWRlZiBycGNfdWludDMyIHJwY19sb2NfZ25zc19pbmZvX3ZhbGlkX21hc2tfdHlwZTsKCnN0cnVjdCBycGNfbG9jX2duc3NfaW5mb19zX3R5cGUgewogIHJwY19sb2NfZ25zc19pbmZvX3ZhbGlkX21hc2tfdHlwZSB2YWxpZF9tYXNrOwogIGZsb2F0IHBvc2l0aW9uX2RvcDsKICBmbG9hdCBob3Jpem9udGFsX2RvcDsKICBmbG9hdCB2ZXJ0aWNhbF9kb3A7CiAgcnBjX2Jvb2xlYW4gYWx0aXR1ZGVfYXNzdW1lZDsKICBycGNfdWludDE2IHN2X2NvdW50OwogIHJwY19sb2Nfc3ZfaW5mb19zX3R5cGUgc3ZfbGlzdDxSUENfTE9DX0FQSV9NQVhfU1ZfQ09VTlQ+Owp9OwoKc3RydWN0IHJwY19sb2Nfbm1lYV9yZXBvcnRfc190eXBlIHsKICBycGNfdWludDE2IGxlbmd0aDsKICBvcGFxdWUgbm1lYV9zZW50ZW5jZXM8UlBDX0xPQ19BUElfTUFYX05NRUFfU1RSSU5HX0xFTkdUSD47Cn07CgplbnVtIHJwY19sb2Nfc3RhdHVzX2V2ZW50X2VfdHlwZSB7CiAgUlBDX0xPQ19TVEFUVVNfRVZFTlRfRU5HSU5FX1NUQVRFID0gMSwKICBSUENfTE9DX1NUQVRVU19FVkVOVF9NQVggPSAyNjg0MzU0NTYKfTsKCmVudW0gcnBjX2xvY19lbmdpbmVfc3RhdGVfZV90eXBlIHsKICBSUENfTE9DX0VOR0lORV9TVEFURV9PTiA9IDEsCiAgUlBDX0xPQ19FTkdJTkVfU1RBVEVfT0ZGID0gMiwKICBSUENfTE9DX0VOR0lORV9TVEFURV9NQVggPSAyNjg0MzU0NTYKfTsKCnVuaW9uIHJwY19sb2Nfc3RhdHVzX2V2ZW50X3BheWxvYWRfdV90eXBlIHN3aXRjaCAocnBjX2xvY19zdGF0dXNfZXZlbnRfZV90eXBlIGRpc2MpIHsKICBjYXNlIFJQQ19MT0NfU1RBVFVTX0VWRU5UX0VOR0lORV9TVEFURToKICAgIHJwY19sb2NfZW5naW5lX3N0YXRlX2VfdHlwZSBlbmdpbmVfc3RhdGU7CiAgZGVmYXVsdDoKICAgIHZvaWQ7Cn07CgpzdHJ1Y3QgcnBjX2xvY19zdGF0dXNfZXZlbnRfc190eXBlIHsKICBycGNfbG9jX3N0YXR1c19ldmVudF9lX3R5cGUgZXZlbnQ7CiAgcnBjX2xvY19zdGF0dXNfZXZlbnRfcGF5bG9hZF91X3R5cGUgcGF5bG9hZDsKfTsKCmVudW0gcnBjX2xvY19zZXJ2ZXJfYWRkcl9lX3R5cGUgewogIFJQQ19MT0NfU0VSVkVSX0FERFJfSVBWNCA9IDEsCiAgUlBDX0xPQ19TRVJWRVJfQUREUl9VUkwgPSAyLAogIFJQQ19MT0NfU0VSVkVSX0FERFJfTUFYID0gMjY4NDM1NDU2Cn07CgpzdHJ1Y3QgcnBjX2xvY19zZXJ2ZXJfYWRkcl9pcHY0X3R5cGUgewogIHJwY191aW50MzIgYWRkcjsKICBycGNfdWludDE2IHBvcnQ7Cn07CgpzdHJ1Y3QgcnBjX2xvY19zZXJ2ZXJfYWRkcl91cmxfdHlwZSB7CiAgcnBjX3VpbnQxNiBsZW5ndGg7CiAgb3BhcXVlIGFkZHI8UlBDX0xPQ19BUElfTUFYX1NFUlZFUl9BRERSX0xFTkdUSD47Cn07Cgp1bmlvbiBycGNfbG9jX3NlcnZlcl9hZGRyX3VfdHlwZSBzd2l0Y2ggKHJwY19sb2Nfc2VydmVyX2FkZHJfZV90eXBlIGRpc2MpIHsKICBjYXNlIFJQQ19MT0NfU0VSVkVSX0FERFJfSVBWNDoKICAgIHJwY19sb2Nfc2VydmVyX2FkZHJfaXB2NF90eXBlIGlwdjQ7CiAgY2FzZSBSUENfTE9DX1NFUlZFUl9BRERSX1VSTDoKICAgIHJwY19sb2Nfc2VydmVyX2FkZHJfdXJsX3R5cGUgdXJsOwogIGRlZmF1bHQ6CiAgICB2b2lkOwp9OwoKc3RydWN0IHJwY19sb2Nfc2VydmVyX2luZm9fc190eXBlIHsKICBycGNfbG9jX3NlcnZlcl9hZGRyX2VfdHlwZSBhZGRyX3R5cGU7CiAgcnBjX2xvY19zZXJ2ZXJfYWRkcl91X3R5cGUgYWRkcl9pbmZvOwp9OwoKZW51bSBycGNfbG9jX25pX25vdGlmeV92ZXJpZnlfZV90eXBlIHsKICBSUENfTE9DX05JX1VTRVJfTk9fTk9USUZZX05PX1ZFUklGWSA9IDEsCiAgUlBDX0xPQ19OSV9VU0VSX05PVElGWV9PTkxZID0gMiwKICBSUENfTE9DX05JX1VTRVJfTk9USUZZX1ZFUklGWV9BTExPV19OT19SRVNQID0gMywKICBSUENfTE9DX05JX1VTRVJfTk9USUZZX1ZFUklGWV9OT1RfQUxMT1dfTk9fUkVTUCA9IDQsCiAgUlBDX0xPQ19OSV9VU0VSX1BSSVZBQ1lfT1ZFUlJJREUgPSA1LAogIFJQQ19MT0NfTklfVVNFUl9OT1RJRllfVkVSSVRZX1RZUEVfTUFYID0gMjY4NDM1NDU2Cn07CgplbnVtIHJwY19sb2NfbmlfZXZlbnRfZV90eXBlIHsKICBSUENfTE9DX05JX0VWRU5UX1ZYX05PVElGWV9WRVJJRllfUkVRID0gMSwKICBSUENfTE9DX05JX0VWRU5UX1NVUExfTk9USUZZX1ZFUklGWV9SRVEgPSAyLAogIFJQQ19MT0NfTklfRVZFTlRfVU1UU19DUF9OT1RJRllfVkVSSUZZX1JFUSA9IDMsCiAgUlBDX0xPQ19OSV9FVkVOVF9NQVggPSAyNjg0MzU0NTYKfTsKCmVudW0gcnBjX2xvY19uaV9kYXRhY29kaW5nX3NjaGVtZV9lX3R5cGUgewogIFJQQ19MT0NfTklfUFJFU1VQTF9JU082NDZJUlYgPSAwLAogIFJQQ19MT0NfTklfUFJFU1VQTF9JU084ODU5ID0gMSwKICBSUENfTE9DX05JX1BSRVNVUExfVVRGOCA9IDIsCiAgUlBDX0xPQ19OSV9QUkVTVVBMX1VURjE2ID0gMywKICBSUENfTE9DX05JX1BSRVNVUExfVUNTMiA9IDQsCiAgUlBDX0xPQ19OSV9QUkVTVVBMX0dTTV9ERUZBVUxUID0gNSwKICBSUENfTE9DX05JX1BSRVNVUExfU0hJRlRfSklTID0gNiwKICBSUENfTE9DX05JX1BSRVNVUExfSklTID0gNywKICBSUENfTE9DX05JX1BSRVNVUExfRVVDID0gOCwKICBSUENfTE9DX05JX1BSRVNVUExfR0IyMzEyID0gOSwKICBSUENfTE9DX05JX1BSRVNVUExfQ05TMTE2NDMgPSAxMCwKICBSUENfTE9DX05JX1BSRVNVUExfS1NDMTAwMSA9IDExLAogIFJQQ19MT0NfTklfUFJFU1VQTF9FTkNPRElOR19VTktOT1dOID0gMjE0NzQ4MzY0NywKICBSUENfTE9DX05JX1NTX0dFUk1BTiA9IDEyLAogIFJQQ19MT0NfTklfU1NfRU5HTElTSCA9IDEzLAogIFJQQ19MT0NfTklfU1NfSVRBTElBTiA9IDE0LAogIFJQQ19MT0NfTklfU1NfRlJFTkNIID0gMTUsCiAgUlBDX0xPQ19OSV9TU19TUEFOSVNIID0gMTYsCiAgUlBDX0xPQ19OSV9TU19EVVRDSCA9IDE3LAogIFJQQ19MT0NfTklfU1NfU1dFRElTSCA9IDE4LAogIFJQQ19MT0NfTklfU1NfREFOSVNIID0gMTksCiAgUlBDX0xPQ19OSV9TU19QT1JUVUdVRVNFID0gMjAsCiAgUlBDX0xPQ19OSV9TU19GSU5OSVNIID0gMjEsCiAgUlBDX0xPQ19OSV9TU19OT1JXRUdJQU4gPSAyMiwKICBSUENfTE9DX05JX1NTX0dSRUVLID0gMjMsCiAgUlBDX0xPQ19OSV9TU19UVVJLSVNIID0gMjQsCiAgUlBDX0xPQ19OSV9TU19IVU5HQVJJQU4gPSAyNSwKICBSUENfTE9DX05JX1NTX1BPTElTSCA9IDI2LAogIFJQQ19MT0NfTklfU1NfTEFOR1VBR0VfVU5TUEVDID0gMjcsCiAgUlBDX0xPQ19OSV9TVVBMX1VURjggPSAyOCwKICBSUENfTE9DX05JX1NVUExfVUNTMiA9IDI5LAogIFJQQ19MT0NfTklfU1VQTF9HU01fREVGQVVMVCA9IDMwLAogIFJQQ19MT0NfTklfU1VQTF9FTkNPRElOR19VTktOT1dOID0gMjE0NzQ4MzY0Nwp9OwoKZW51bSBycGNfbG9jX25pX3Z4X3JlcXVlc3Rlcl9pZF9lbmNvZGluZ19zY2hlbWVfZV90eXBlIHsKICBSUENfTE9DX05JX1ZYX09DVEVUID0gMCwKICBSUENfTE9DX05JX1ZYX0VYTl9QUk9UT0NPTF9NU0cgPSAxLAogIFJQQ19MT0NfTklfVlhfQVNDSUkgPSAyLAogIFJQQ19MT0NfTklfVlhfSUE1ID0gMywKICBSUENfTE9DX05JX1ZYX1VOSUNPREUgPSA0LAogIFJQQ19MT0NfTklfVlhfU0hJRlRfSklTID0gNSwKICBSUENfTE9DX05JX1ZYX0tPUkVBTiA9IDYsCiAgUlBDX0xPQ19OSV9WWF9MQVRJTl9IRUJSRVcgPSA3LAogIFJQQ19MT0NfTklfVlhfTEFUSU4gPSA4LAogIFJQQ19MT0NfTklfVlhfR1NNID0gOSwKICBSUENfTE9DX05JX1ZYX0VOQ09ESU5HX1RZUEVfTUFYID0gMjY4NDM1NDU2Cn07CgplbnVtIHJwY19sb2NfbmlfdnhfcG9zX21vZGVfZV90eXBlIHsKICBSUENfTE9DX1ZYX01TX0FTU0lTVEVEX09OTFkgPSAxLAogIFJQQ19MT0NfVlhfTVNfQkFTRURfT05MWSA9IDIsCiAgUlBDX0xPQ19WWF9NU19BU1NJU1RFRF9QUkVGX01TQkFTRURfQUxMV0QgPSAzLAogIFJQQ19MT0NfVlhfTVNfQkFTRURfUFJFRl9BU1NJU1RFRF9BTExXRCA9IDQsCiAgUlBDX0xPQ19WWF9QT1NfTU9ERV9NQVggPSAyNjg0MzU0NTYKfTsKCnN0cnVjdCBycGNfbG9jX25pX3Z4X3JlcXVlc3Rlcl9pZF9zX3R5cGUgewogIHVuc2lnbmVkIGNoYXIgcmVxdWVzdGVyX2lkX2xlbmd0aDsKICBvcGFxdWUgcmVxdWVzdGVyX2lkWzIwMF07Cn07CgpzdHJ1Y3QgcnBjX2xvY19uaV92eF9ub3RpZnlfdmVyaWZ5X3JlcV9zX3R5cGUgewogIHJwY19sb2Nfbmlfbm90aWZ5X3ZlcmlmeV9lX3R5cGUgbm90aWZpY2F0aW9uX3ByaXZfdHlwZTsKICB1bnNpZ25lZCBjaGFyIHBvc19xb3NfaW5jbDsKICB1bnNpZ25lZCBjaGFyIHBvc19xb3M7CiAgcnBjX3VpbnQzMiBudW1fZml4ZXM7CiAgcnBjX3VpbnQzMiB0YmY7CiAgcnBjX2xvY19uaV92eF9wb3NfbW9kZV9lX3R5cGUgcG9zX21vZGU7CiAgcnBjX2xvY19uaV92eF9yZXF1ZXN0ZXJfaWRfZW5jb2Rpbmdfc2NoZW1lX2VfdHlwZSBlbmNvZGluZ19zY2hlbWU7CiAgcnBjX2xvY19uaV92eF9yZXF1ZXN0ZXJfaWRfc190eXBlIHJlcXVlc3Rlcl9pZDsKICBycGNfdWludDE2IHVzZXJfcmVzcF90aW1lcl92YWw7Cn07CgplbnVtIHJwY19sb2Nfbmlfc3VwbF9wb3NfbWV0aG9kX2VfdHlwZSB7CiAgUlBDX0xPQ19OSV9QT1NNRVRIT0RfQUdQU19TRVRBU1NJU1RFRCA9IDEsCiAgUlBDX0xPQ19OSV9QT1NNRVRIT0RfQUdQU19TRVRCQVNFRCA9IDIsCiAgUlBDX0xPQ19OSV9QT1NNRVRIT0RfQUdQU19TRVRBU1NJU1RFRF9QUkVGID0gMywKICBSUENfTE9DX05JX1BPU01FVEhPRF9BR1BTX1NFVEJBU0VEX1BSRUYgPSA0LAogIFJQQ19MT0NfTklfUE9TTUVUSE9EX0FVVE9OT01PVVNfR1BTID0gNSwKICBSUENfTE9DX05JX1BPU01FVEhPRF9BRkxUID0gNiwKICBSUENfTE9DX05JX1BPU01FVEhPRF9FQ0lEID0gNywKICBSUENfTE9DX05JX1BPU01FVEhPRF9FT1REID0gOCwKICBSUENfTE9DX05JX1BPU01FVEhPRF9PVERPQSA9IDksCiAgUlBDX0xPQ19OSV9QT1NNRVRIT0RfTk9fUE9TSVRJT04gPSAxMCwKICBSUENfTE9DX05JX1BPU01FVEhPRF9NQVggPSAyNjg0MzU0NTYKfTsKCnN0cnVjdCBycGNfbG9jX25pX3N1cGxfc2xwX3Nlc3Npb25faWRfc190eXBlIHsKICB1bnNpZ25lZCBjaGFyIHByZXNlbmNlOwogIG9wYXF1ZSBzZXNzaW9uX2lkWzRdOwogIHJwY19sb2Nfc2VydmVyX2luZm9fc190eXBlIHNscF9hZGRyZXNzOwp9OwoKc3RydWN0IHJwY19sb2NfbmlfcmVxdWVzdG9yX2lkX3NfdHlwZSB7CiAgdW5zaWduZWQgY2hhciBkYXRhX2NvZGluZ19zY2hlbWU7CiAgb3BhcXVlIHJlcXVlc3Rvcl9pZF9zdHJpbmc8UlBDX0xPQ19OSV9NQVhfUkVRVUVTVE9SX0lEX0xFTkdUSD47CiAgdW5zaWduZWQgY2hhciBzdHJpbmdfbGVuOwp9OwoKc3RydWN0IHJwY19sb2Nfbmlfc3VwbF9jbGllbnRfbmFtZV9zX3R5cGUgewogIHVuc2lnbmVkIGNoYXIgZGF0YV9jb2Rpbmdfc2NoZW1lOwogIG9wYXF1ZSBjbGllbnRfbmFtZV9zdHJpbmc8UlBDX0xPQ19OSV9NQVhfQ0xJRU5UX05BTUVfTEVOR1RIPjsKICB1bnNpZ25lZCBjaGFyIHN0cmluZ19sZW47Cn07CgpzdHJ1Y3QgcnBjX2xvY19uaV9zdXBsX3FvcF9zX3R5cGUgewogIHVuc2lnbmVkIGNoYXIgYml0X21hc2s7CiAgdW5zaWduZWQgY2hhciBob3JhY2M7CiAgdW5zaWduZWQgY2hhciB2ZXJhY2M7CiAgdW5zaWduZWQgY2hhciBtYXhMb2NBZ2U7CiAgdW5zaWduZWQgY2hhciBkZWxheTsKfTsKCnN0cnVjdCBycGNfbG9jX25pX3N1cGxfbm90aWZ5X3ZlcmlmeV9yZXFfc190eXBlIHsKICBycGNfbG9jX25pX25vdGlmeV92ZXJpZnlfZV90eXBlIG5vdGlmaWNhdGlvbl9wcml2X3R5cGU7CiAgcnBjX3VpbnQxNiBmbGFnczsKICBycGNfbG9jX25pX3N1cGxfc2xwX3Nlc3Npb25faWRfc190eXBlIHN1cGxfc2xwX3Nlc3Npb25faWQ7CiAgb3BhcXVlIHN1cGxfaGFzaFs4XTsKICBycGNfbG9jX25pX2RhdGFjb2Rpbmdfc2NoZW1lX2VfdHlwZSBkYXRhY29kaW5nX3NjaGVtZTsKICBycGNfbG9jX25pX3N1cGxfcG9zX21ldGhvZF9lX3R5cGUgcG9zX21ldGhvZDsKICBycGNfbG9jX25pX3JlcXVlc3Rvcl9pZF9zX3R5cGUgcmVxdWVzdG9yX2lkOwogIHJwY19sb2Nfbmlfc3VwbF9jbGllbnRfbmFtZV9zX3R5cGUgY2xpZW50X25hbWU7CiAgcnBjX2xvY19uaV9zdXBsX3FvcF9zX3R5cGUgc3VwbF9xb3A7CiAgcnBjX3VpbnQxNiB1c2VyX3Jlc3BvbnNlX3RpbWVyOwp9OwoKc3RydWN0IHJwY19sb2NfbmlfZXh0X2NsaWVudF9hZGRyZXNzX3NfdHlwZSB7CiAgdW5zaWduZWQgY2hhciBleHRfY2xpZW50X2FkZHJlc3NfbGVuOwogIG9wYXF1ZSBleHRfY2xpZW50X2FkZHJlc3M8UlBDX0xPQ19OSV9NQVhfRVhUX0NMSUVOVF9BRERSRVNTPjsKfTsKCmVudW0gcnBjX2xvY19uaV9sb2NhdGlvbl90eXBlX2VfdHlwZSB7CiAgUlBDX0xPQ19OSV9MT0NBVElPTlRZUEVfQ1VSUkVOVF9MT0NBVElPTiA9IDEsCiAgUlBDX0xPQ19OSV9MT0NBVElPTlRZUEVfQ1VSUkVOVF9PUl9MQVNUX0tOT1dOX0xPQ0FUSU9OID0gMiwKICBSUENfTE9DX05JX0xPQ0FUSU9OVFlQRV9JTklUSUFMX0xPQ0FUSU9OID0gMywKICBSUENfTE9DX05JX0xPQ0FUSU9OVFlQRV9NQVggPSAyNjg0MzU0NTYKfTsKCnN0cnVjdCBycGNfbG9jX25pX2RlZmVycmVkX2xvY2F0aW9uX3NfdHlwZSB7CiAgdW5zaWduZWQgY2hhciB1bnVzZWRfYml0czsKICB1bnNpZ25lZCBjaGFyIG1zX2F2YWlsYWJsZTsKfTsKCnN0cnVjdCBycGNfbG9jX25pX2NvZGV3b3JkX3N0cmluZ19zX3R5cGUgewogIHVuc2lnbmVkIGNoYXIgZGF0YV9jb2Rpbmdfc2NoZW1lOwogIG9wYXF1ZSBsY3NfY29kZXdvcmRfc3RyaW5nPFJQQ19MT0NfTklfQ09ERVdPUkRfTEVOR1RIPjsKICB1bnNpZ25lZCBjaGFyIHN0cmluZ19sZW47Cn07CgpzdHJ1Y3QgcnBjX2xvY19uaV9zZXJ2aWNlX3R5cGVfaWRfc190eXBlIHsKICB1bnNpZ25lZCBjaGFyIGxjc19zZXJ2aWNlX3R5cGVfaWQ7Cn07CgpzdHJ1Y3QgcnBjX2xvY19uaV91bXRzX2NwX25vdGlmeV92ZXJpZnlfcmVxX3NfdHlwZSB7CiAgcnBjX2xvY19uaV9ub3RpZnlfdmVyaWZ5X2VfdHlwZSBub3RpZmljYXRpb25fcHJpdl90eXBlOwogIHVuc2lnbmVkIGNoYXIgaW52b2tlX2lkOwogIHJwY191aW50MTYgZmxhZ3M7CiAgdW5zaWduZWQgY2hhciBub3RpZmljYXRpb25fbGVuZ3RoOwogIG9wYXF1ZSBub3RpZmljYXRpb25fdGV4dDxSUENfTE9DX05JX01BWF9DTElFTlRfTkFNRV9MRU5HVEg+OwogIHJwY19sb2NfbmlfZGF0YWNvZGluZ19zY2hlbWVfZV90eXBlIGRhdGFjb2Rpbmdfc2NoZW1lOwogIHJwY19sb2NfbmlfZXh0X2NsaWVudF9hZGRyZXNzX3NfdHlwZSBleHRfY2xpZW50X2FkZHJlc3NfZGF0YTsKICBycGNfbG9jX25pX2xvY2F0aW9uX3R5cGVfZV90eXBlIGxvY2F0aW9uX3R5cGU7CiAgcnBjX2xvY19uaV9kZWZlcnJlZF9sb2NhdGlvbl9zX3R5cGUgZGVmZXJyZWRfbG9jYXRpb247CiAgcnBjX2xvY19uaV9yZXF1ZXN0b3JfaWRfc190eXBlIHJlcXVlc3Rvcl9pZDsKICBycGNfbG9jX25pX2NvZGV3b3JkX3N0cmluZ19zX3R5cGUgY29kZXdvcmRfc3RyaW5nOwogIHJwY19sb2Nfbmlfc2VydmljZV90eXBlX2lkX3NfdHlwZSBzZXJ2aWNlX3R5cGVfaWQ7CiAgcnBjX3VpbnQxNiB1c2VyX3Jlc3BvbnNlX3RpbWVyOwp9OwoKdW5pb24gcnBjX2xvY19uaV9ldmVudF9wYXlsb2FkX3VfdHlwZSBzd2l0Y2ggKHJwY19sb2NfbmlfZXZlbnRfZV90eXBlIGRpc2MpIHsKICBjYXNlIFJQQ19MT0NfTklfRVZFTlRfVlhfTk9USUZZX1ZFUklGWV9SRVE6CiAgICBycGNfbG9jX25pX3Z4X25vdGlmeV92ZXJpZnlfcmVxX3NfdHlwZSB2eF9yZXE7CiAgY2FzZSBSUENfTE9DX05JX0VWRU5UX1NVUExfTk9USUZZX1ZFUklGWV9SRVE6CiAgICBycGNfbG9jX25pX3N1cGxfbm90aWZ5X3ZlcmlmeV9yZXFfc190eXBlIHN1cGxfcmVxOwogIGNhc2UgUlBDX0xPQ19OSV9FVkVOVF9VTVRTX0NQX05PVElGWV9WRVJJRllfUkVROgogICAgcnBjX2xvY19uaV91bXRzX2NwX25vdGlmeV92ZXJpZnlfcmVxX3NfdHlwZSB1bXRzX2NwX3JlcTsKICBkZWZhdWx0OgogICAgdm9pZDsKfTsKCnN0cnVjdCBycGNfbG9jX25pX2V2ZW50X3NfdHlwZSB7CiAgcnBjX2xvY19uaV9ldmVudF9lX3R5cGUgZXZlbnQ7CiAgcnBjX2xvY19uaV9ldmVudF9wYXlsb2FkX3VfdHlwZSBwYXlsb2FkOwp9OwoKZW51bSBycGNfbG9jX2Fzc2lzdF9kYXRhX3JlcXVlc3RfZV90eXBlIHsKICBSUENfTE9DX0FTU0lTVF9EQVRBX1RJTUVfUkVRID0gMSwKICBSUENfTE9DX0FTU0lTVF9EQVRBX1BSRURJQ1RFRF9PUkJJVFNfUkVRID0gMiwKICBSUENfTE9DX0FTU0lTVF9EQVRBX01BWCA9IDI2ODQzNTQ1Ngp9OwoKdHlwZWRlZiBzdHJpbmcgcnBjX3N0cnVjdF9sb2NfdGltZV9kb3dubG9hZF9zb3VyY2Vfc190eXBlX3NlcnZlcnNfcHRyPFJQQ19MT0NfQVBJX01BWF9TRVJWRVJfQUREUl9MRU5HVEg+OwoKdHlwZWRlZiBycGNfc3RydWN0X2xvY190aW1lX2Rvd25sb2FkX3NvdXJjZV9zX3R5cGVfc2VydmVyc19wdHIgcnBjX3N0cnVjdF9sb2NfdGltZV9kb3dubG9hZF9zb3VyY2Vfc190eXBlX3NlcnZlcnNbM107CgpzdHJ1Y3QgcnBjX2xvY190aW1lX2Rvd25sb2FkX3NvdXJjZV9zX3R5cGUgewogIHJwY191aW50MzIgZGVsYXlfdGhyZXNob2xkOwogIHJwY19zdHJ1Y3RfbG9jX3RpbWVfZG93bmxvYWRfc291cmNlX3NfdHlwZV9zZXJ2ZXJzIHNlcnZlcnM7Cn07Cgp0eXBlZGVmIHN0cmluZyBycGNfc3RydWN0X2xvY19wcmVkaWN0ZWRfb3JiaXRzX2RhdGFfc291cmNlX3NfdHlwZV9zZXJ2ZXJzX3B0cjxSUENfTE9DX0FQSV9NQVhfU0VSVkVSX0FERFJfTEVOR1RIPjsKCnR5cGVkZWYgcnBjX3N0cnVjdF9sb2NfcHJlZGljdGVkX29yYml0c19kYXRhX3NvdXJjZV9zX3R5cGVfc2VydmVyc19wdHIgcnBjX3N0cnVjdF9sb2NfcHJlZGljdGVkX29yYml0c19kYXRhX3NvdXJjZV9zX3R5cGVfc2VydmVyc1szXTsKCnN0cnVjdCBycGNfbG9jX3ByZWRpY3RlZF9vcmJpdHNfZGF0YV9zb3VyY2Vfc190eXBlIHsKICBycGNfdWludDMyIG1heF9maWxlX3NpemU7CiAgcnBjX3VpbnQzMiBtYXhfcGFydF9zaXplOwogIHJwY19zdHJ1Y3RfbG9jX3ByZWRpY3RlZF9vcmJpdHNfZGF0YV9zb3VyY2Vfc190eXBlX3NlcnZlcnMgc2VydmVyczsKfTsKCnVuaW9uIHJwY19sb2NfYXNzaXN0X2RhdGFfcmVxdWVzdF9wYXlsb2FkX3VfdHlwZSBzd2l0Y2ggKHJwY19sb2NfYXNzaXN0X2RhdGFfcmVxdWVzdF9lX3R5cGUgZGlzYykgewogIGNhc2UgUlBDX0xPQ19BU1NJU1RfREFUQV9USU1FX1JFUToKICAgIHJwY19sb2NfdGltZV9kb3dubG9hZF9zb3VyY2Vfc190eXBlIHRpbWVfZG93bmxvYWQ7CiAgY2FzZSBSUENfTE9DX0FTU0lTVF9EQVRBX1BSRURJQ1RFRF9PUkJJVFNfUkVROgogICAgcnBjX2xvY19wcmVkaWN0ZWRfb3JiaXRzX2RhdGFfc291cmNlX3NfdHlwZSBkYXRhX2Rvd25sb2FkOwogIGRlZmF1bHQ6CiAgICB2b2lkOwp9OwoKc3RydWN0IHJwY19sb2NfYXNzaXN0X2RhdGFfcmVxdWVzdF9zX3R5cGUgewogIHJwY19sb2NfYXNzaXN0X2RhdGFfcmVxdWVzdF9lX3R5cGUgZXZlbnQ7CiAgcnBjX2xvY19hc3Npc3RfZGF0YV9yZXF1ZXN0X3BheWxvYWRfdV90eXBlIHBheWxvYWQ7Cn07Cgp0eXBlZGVmIHJwY191aW50MzIgcnBjX2xvY19zZXJ2ZXJfY29ubmVjdGlvbl9oYW5kbGU7CgplbnVtIHJwY19sb2Nfc2VydmVyX3Byb3RvY29sX2VfdHlwZSB7CiAgUlBDX0xPQ19TRVJWRVJfUFJPVE9DT0xfREVGQVVMVCA9IDAsCiAgUlBDX0xPQ19TRVJWRVJfUFJPVE9DT0xfU1VQTCA9IDEsCiAgUlBDX0xPQ19TRVJWRVJfUFJPVE9DT0xfVlhfTVBDID0gMiwKICBSUENfTE9DX1NFUlZFUl9QUk9UT0NPTF9WWF9QREUgPSAzLAogIFJQQ19MT0NfU0VSVkVSX1BST1RPQ09MX01BWCA9IDE2Nzc3MjE2Cn07CgplbnVtIHJwY19sb2Nfc2VydmVyX3JlcXVlc3RfZV90eXBlIHsKICBSUENfTE9DX1NFUlZFUl9SRVFVRVNUX09QRU4gPSAxLAogIFJQQ19MT0NfU0VSVkVSX1JFUVVFU1RfQ0xPU0UgPSAyLAogIFJQQ19MT0NfU0VSVkVSX1JFUVVFU1RfTUFYID0gMjY4NDM1NDU2Cn07CgpzdHJ1Y3QgcnBjX2xvY19zZXJ2ZXJfb3Blbl9yZXFfc190eXBlIHsKICBycGNfbG9jX3NlcnZlcl9jb25uZWN0aW9uX2hhbmRsZSBjb25uX2hhbmRsZTsKICBycGNfbG9jX3NlcnZlcl9wcm90b2NvbF9lX3R5cGUgcHJvdG9jb2w7Cn07CgpzdHJ1Y3QgcnBjX2xvY19zZXJ2ZXJfY2xvc2VfcmVxX3NfdHlwZSB7CiAgcnBjX2xvY19zZXJ2ZXJfY29ubmVjdGlvbl9oYW5kbGUgY29ubl9oYW5kbGU7Cn07Cgp1bmlvbiBycGNfbG9jX3NlcnZlcl9yZXF1ZXN0X3VfdHlwZSBzd2l0Y2ggKHJwY19sb2Nfc2VydmVyX3JlcXVlc3RfZV90eXBlIGRpc2MpIHsKICBjYXNlIFJQQ19MT0NfU0VSVkVSX1JFUVVFU1RfT1BFTjoKICAgIHJwY19sb2Nfc2VydmVyX29wZW5fcmVxX3NfdHlwZSBvcGVuX3JlcTsKICBjYXNlIFJQQ19MT0NfU0VSVkVSX1JFUVVFU1RfQ0xPU0U6CiAgICBycGNfbG9jX3NlcnZlcl9jbG9zZV9yZXFfc190eXBlIGNsb3NlX3JlcTsKICBkZWZhdWx0OgogICAgdm9pZDsKfTsKCnN0cnVjdCBycGNfbG9jX3NlcnZlcl9yZXF1ZXN0X3NfdHlwZSB7CiAgcnBjX2xvY19zZXJ2ZXJfcmVxdWVzdF9lX3R5cGUgZXZlbnQ7CiAgcnBjX2xvY19zZXJ2ZXJfcmVxdWVzdF91X3R5cGUgcGF5bG9hZDsKfTsKCnN0cnVjdCBycGNfbG9jX3Jlc2VydmVkX3BheWxvYWRfc190eXBlIHsKICBycGNfdWludDE2IGRhdGFfc2l6ZTsKICBvcGFxdWUgZGF0YTw+Owp9OwoKZW51bSBycGNfbG9jX2lvY3RsX2VfdHlwZSB7CiAgUlBDX0xPQ19JT0NUTF9HRVRfQVBJX1ZFUlNJT04gPSAxLAogIFJQQ19MT0NfSU9DVExfU0VUX0ZJWF9DUklURVJJQSA9IDIsCiAgUlBDX0xPQ19JT0NUTF9HRVRfRklYX0NSSVRFUklBID0gMywKICBSUENfTE9DX0lPQ1RMX1NFUlZJQ0VfU1RBUlRfSU5ERVggPSA0MDAsCiAgUlBDX0xPQ19JT0NUTF9JTkZPUk1fTklfVVNFUl9SRVNQT05TRSA9IDQwMCwKICBSUENfTE9DX0lPQ1RMX0lOSkVDVF9QUkVESUNURURfT1JCSVRTX0RBVEEgPSA0MDEsCiAgUlBDX0xPQ19JT0NUTF9RVUVSWV9QUkVESUNURURfT1JCSVRTX0RBVEFfVkFMSURJVFkgPSA0MDIsCiAgUlBDX0xPQ19JT0NUTF9RVUVSWV9QUkVESUNURURfT1JCSVRTX0RBVEFfU09VUkNFID0gNDAzLAogIFJQQ19MT0NfSU9DVExfU0VUX1BSRURJQ1RFRF9PUkJJVFNfREFUQV9BVVRPX0RPV05MT0FEID0gNDA0LAogIFJQQ19MT0NfSU9DVExfSU5KRUNUX1VUQ19USU1FID0gNDA1LAogIFJQQ19MT0NfSU9DVExfSU5KRUNUX1JUQ19WQUxVRSA9IDQwNiwKICBSUENfTE9DX0lPQ1RMX0lOSkVDVF9QT1NJVElPTiA9IDQwNywKICBSUENfTE9DX0lPQ1RMX1FVRVJZX0VOR0lORV9TVEFURSA9IDQwOCwKICBSUENfTE9DX0lPQ1RMX0lORk9STV9TRVJWRVJfT1BFTl9TVEFUVVMgPSA0MDksCiAgUlBDX0xPQ19JT0NUTF9JTkZPUk1fU0VSVkVSX0NMT1NFX1NUQVRVUyA9IDQxMCwKICBSUENfTE9DX0lPQ1RMX05WX1NFVFRJTkdTX1NUQVJUX0lOREVYID0gODAwLAogIFJQQ19MT0NfSU9DVExfU0VUX0VOR0lORV9MT0NLID0gODAwLAogIFJQQ19MT0NfSU9DVExfR0VUX0VOR0lORV9MT0NLID0gODAxLAogIFJQQ19MT0NfSU9DVExfU0VUX1NCQVNfQ09ORklHID0gODAyLAogIFJQQ19MT0NfSU9DVExfR0VUX1NCQVNfQ09ORklHID0gODAzLAogIFJQQ19MT0NfSU9DVExfU0VUX05NRUFfVFlQRVMgPSA4MDQsCiAgUlBDX0xPQ19JT0NUTF9HRVRfTk1FQV9UWVBFUyA9IDgwNSwKICBSUENfTE9DX0lPQ1RMX1NFVF9DRE1BX1BERV9TRVJWRVJfQUREUiA9IDgwNiwKICBSUENfTE9DX0lPQ1RMX0dFVF9DRE1BX1BERV9TRVJWRVJfQUREUiA9IDgwNywKICBSUENfTE9DX0lPQ1RMX1NFVF9DRE1BX01QQ19TRVJWRVJfQUREUiA9IDgwOCwKICBSUENfTE9DX0lPQ1RMX0dFVF9DRE1BX01QQ19TRVJWRVJfQUREUiA9IDgwOSwKICBSUENfTE9DX0lPQ1RMX1NFVF9VTVRTX1NMUF9TRVJWRVJfQUREUiA9IDgxMCwKICBSUENfTE9DX0lPQ1RMX0dFVF9VTVRTX1NMUF9TRVJWRVJfQUREUiA9IDgxMSwKICBSUENfTE9DX0lPQ1RMX1NFVF9PTl9ERU1BTkRfTFBNID0gODEyLAogIFJQQ19MT0NfSU9DVExfR0VUX09OX0RFTUFORF9MUE0gPSA4MTMsCiAgUlBDX0xPQ19JT0NUTF9QUk9QUklFVEFSWV9TVEFSVF9JTkRFWCA9IDEwMDAsCiAgUlBDX0xPQ19JT0NUTF9ERUxFVEVfQVNTSVNUX0RBVEEgPSAxMDAwLAogIFJQQ19MT0NfSU9DVExfU0VUX0NVU1RPTV9QREVfU0VSVkVSX0FERFIgPSAxMDAxLAogIFJQQ19MT0NfSU9DVExfR0VUX0NVU1RPTV9QREVfU0VSVkVSX0FERFIgPSAxMDAyLAogIFJQQ19MT0NfSU9DVExfVEhJUkRfUEFSVFlfU1RBUlRfSU5ERVggPSAxMDczNzQxODI0Cn07CgpzdHJ1Y3QgcnBjX2xvY19hcGlfdmVyc2lvbl9zX3R5cGUgewogIHVuc2lnbmVkIGNoYXIgbWFqb3I7CiAgdW5zaWduZWQgY2hhciBtaW5vcjsKfTsKCmVudW0gcnBjX2xvY19maXhfcmVjdXJyZW5jZV9lX3R5cGUgewogIFJQQ19MT0NfUEVSSU9ESUNfRklYID0gMSwKICBSUENfTE9DX1NJTkdMRV9GSVggPSAyLAogIFJQQ19MT0NfRklYX1NFU1NJT05fVFlQRV9NQVggPSAyNjg0MzU0NTYKfTsKCmVudW0gcnBjX2xvY19vcGVyYXRpb25fbW9kZV9lX3R5cGUgewogIFJQQ19MT0NfT1BFUl9NT0RFX0RFRkFVTFQgPSAxLAogIFJQQ19MT0NfT1BFUl9NT0RFX01TQiA9IDIsCiAgUlBDX0xPQ19PUEVSX01PREVfTVNBID0gMywKICBSUENfTE9DX09QRVJfTU9ERV9TVEFOREFMT05FID0gNCwKICBSUENfTE9DX09QRVJfTU9ERV9TUEVFRF9PUFRJTUFMID0gNSwKICBSUENfTE9DX09QRVJfTU9ERV9BQ0NVUkFDWV9PUFRJTUFMID0gNiwKICBSUENfTE9DX09QRVJfTU9ERV9EQVRBX09QVElNQUwgPSA3LAogIFJQQ19MT0NfT1BFUl9NT0RFX01BWCA9IDI2ODQzNTQ1Ngp9OwoKZW51bSBycGNfbG9jX25vdGlmeV9lX3R5cGUgewogIFJQQ19MT0NfTk9USUZZX09OX0lOVEVSVkFMID0gMSwKICBSUENfTE9DX05PVElGWV9PTl9ESVNUQU5DRSA9IDIsCiAgUlBDX0xPQ19OT1RJRllfT05fQU5ZID0gMywKICBSUENfTE9DX05PVElGWV9PTl9BTEwgPSA0LAogIFJQQ19MT0NfTk9USUZZX1RZUEVfTUFYID0gMjY4NDM1NDU2Cn07CgpzdHJ1Y3QgcnBjX2xvY19maXhfY3JpdGVyaWFfc190eXBlIHsKICBycGNfdWludDMyIHZhbGlkX21hc2s7CiAgcnBjX2xvY19maXhfcmVjdXJyZW5jZV9lX3R5cGUgcmVjdXJyZW5jZV90eXBlOwogIHJwY19sb2Nfb3BlcmF0aW9uX21vZGVfZV90eXBlIHByZWZlcnJlZF9vcGVyYXRpb25fbW9kZTsKICBycGNfdWludDMyIHByZWZlcnJlZF9hY2N1cmFjeTsKICBycGNfdWludDMyIHByZWZlcnJlZF9yZXNwb25zZV90aW1lOwogIHJwY19ib29sZWFuIGludGVybWVkaWF0ZV9wb3NfcmVwb3J0X2VuYWJsZWQ7CiAgcnBjX2xvY19ub3RpZnlfZV90eXBlIG5vdGlmeV90eXBlOwogIHJwY191aW50MzIgbWluX2ludGVydmFsOwogIGZsb2F0IG1pbl9kaXN0YW5jZTsKICBycGNfdWludDMyIG1pbl9kaXN0X3NhbXBsZV9pbnRlcnZhbDsKfTsKCmVudW0gcnBjX2xvY19uaV91c2VyX3Jlc3BfZV90eXBlIHsKICBSUENfTE9DX05JX0xDU19OT1RJRllfVkVSSUZZX0FDQ0VQVCA9IDEsCiAgUlBDX0xPQ19OSV9MQ1NfTk9USUZZX1ZFUklGWV9ERU5ZID0gMiwKICBSUENfTE9DX05JX0xDU19OT1RJRllfVkVSSUZZX05PUkVTUCA9IDMsCiAgUlBDX0xPQ19OSV9MQ1NfTk9USUZZX1ZFUklGWV9NQVggPSAyNjg0MzU0NTYKfTsKCnN0cnVjdCBycGNfbG9jX3VzZXJfdmVyaWZ5X3NfdHlwZSB7CiAgcnBjX2xvY19uaV91c2VyX3Jlc3BfZV90eXBlIHVzZXJfcmVzcDsKICBycGNfbG9jX25pX2V2ZW50X3NfdHlwZSBuaV9ldmVudF9wYXNzX2JhY2s7Cn07CgplbnVtIHJwY19sb2NfcHJlZGljdGVkX29yYml0c19kYXRhX2Zvcm1hdF9lX3R5cGUgewogIFJQQ19MT0NfUFJFRElDVEVEX09SQklUU19YVFJBID0gMCwKICBSUENfTE9DX1BSRURJQ1RFRF9PUkJJVFNfRk9STUFUX01BWCA9IDI2ODQzNTQ1Ngp9OwoKc3RydWN0IHJwY19sb2NfcHJlZGljdGVkX29yYml0c19kYXRhX3NfdHlwZSB7CiAgcnBjX2xvY19wcmVkaWN0ZWRfb3JiaXRzX2RhdGFfZm9ybWF0X2VfdHlwZSBmb3JtYXRfdHlwZTsKICBycGNfdWludDMyIHRvdGFsX3NpemU7CiAgcnBjX3VpbnQ4IHRvdGFsX3BhcnRzOwogIHJwY191aW50OCBwYXJ0OwogIHJwY191aW50MTYgcGFydF9sZW47CiAgb3BhcXVlIGRhdGFfcHRyPD47Cn07CgpzdHJ1Y3QgcnBjX2xvY19wcmVkaWN0ZWRfb3JiaXRzX2RhdGFfdmFsaWRpdHlfcmVwb3J0X3NfdHlwZSB7CiAgcnBjX3VpbnQ2NCBzdGFydF90aW1lX3V0YzsKICBycGNfdWludDE2IHZhbGlkX2R1cmF0aW9uX2hyczsKfTsKCnN0cnVjdCBycGNfbG9jX3ByZWRpY3RlZF9vcmJpdHNfYXV0b19kb3dubG9hZF9jb25maWdfc190eXBlIHsKICBycGNfYm9vbGVhbiBlbmFibGU7CiAgdW5zaWduZWQgY2hhciBhdXRvX2NoZWNrX2V2ZXJ5X2hyczsKfTsKCnN0cnVjdCBycGNfbG9jX2Fzc2lzdF9kYXRhX3RpbWVfc190eXBlIHsKICBycGNfdWludDY0IHRpbWVfdXRjOwogIHJwY191aW50MzIgdW5jZXJ0YWludHk7Cn07Cgp0eXBlZGVmIHJwY191aW50NjQgcnBjX2xvY19hc3Npc3RfcG9zX3ZhbGlkX21hc2tfdHlwZTsKCnN0cnVjdCBycGNfbG9jX2Fzc2lzdF9kYXRhX3Bvc19zX3R5cGUgewogIHJwY19sb2NfYXNzaXN0X3Bvc192YWxpZF9tYXNrX3R5cGUgdmFsaWRfbWFzazsKICBycGNfdWludDY0IHRpbWVzdGFtcF91dGM7CiAgZG91YmxlIGxhdGl0dWRlOwogIGRvdWJsZSBsb25naXR1ZGU7CiAgZmxvYXQgYWx0aXR1ZGVfd3J0X2VsbGlwc29pZDsKICBmbG9hdCBhbHRpdHVkZV93cnRfbWVhbl9zZWFfbGV2ZWw7CiAgZmxvYXQgaG9yX3VuY19jaXJjdWxhcjsKICBmbG9hdCB2ZXJ0X3VuYzsKICB1bnNpZ25lZCBjaGFyIGNvbmZpZGVuY2VfaG9yaXpvbnRhbDsKICB1bnNpZ25lZCBjaGFyIGNvbmZpZGVuY2VfdmVydGljYWw7Cn07CgplbnVtIHJwY19sb2Nfc2VydmVyX29wZW5fc3RhdHVzX2VfdHlwZSB7CiAgUlBDX0xPQ19TRVJWRVJfT1BFTl9TVUNDRVNTID0gMSwKICBSUENfTE9DX1NFUlZFUl9PUEVOX0ZBSUwgPSAyLAogIFJQQ19MT0NfU0VSVkVSX09QRU5fU1RBVFVTX01BWCA9IDI2ODQzNTQ1Ngp9OwoKc3RydWN0IHJwY19sb2Nfc2VydmVyX29wZW5fc3RhdHVzX3NfdHlwZSB7CiAgcnBjX2xvY19zZXJ2ZXJfY29ubmVjdGlvbl9oYW5kbGUgY29ubl9oYW5kbGU7CiAgcnBjX2xvY19zZXJ2ZXJfb3Blbl9zdGF0dXNfZV90eXBlIG9wZW5fc3RhdHVzOwogIHN0cmluZyBhcG5fbmFtZTw+Owp9OwoKZW51bSBycGNfbG9jX3NlcnZlcl9jbG9zZV9zdGF0dXNfZV90eXBlIHsKICBSUENfTE9DX1NFUlZFUl9DTE9TRV9TVUNDRVNTID0gMSwKICBSUENfTE9DX1NFUlZFUl9DTE9TRV9GQUlMID0gMiwKICBSUENfTE9DX1NFUlZFUl9DTE9TRV9TVEFUVVNfTUFYID0gMjY4NDM1NDU2Cn07CgpzdHJ1Y3QgcnBjX2xvY19zZXJ2ZXJfY2xvc2Vfc3RhdHVzX3NfdHlwZSB7CiAgcnBjX2xvY19zZXJ2ZXJfY29ubmVjdGlvbl9oYW5kbGUgY29ubl9oYW5kbGU7CiAgcnBjX2xvY19zZXJ2ZXJfY2xvc2Vfc3RhdHVzX2VfdHlwZSBjbG9zZV9zdGF0dXM7Cn07CgplbnVtIHJwY19sb2NfbG9ja19lX3R5cGUgewogIFJQQ19MT0NfTE9DS19OT05FID0gMSwKICBSUENfTE9DX0xPQ0tfTUkgPSAyLAogIFJQQ19MT0NfTE9DS19NVCA9IDMsCiAgUlBDX0xPQ19MT0NLX0FMTCA9IDQsCiAgUlBDX0xPQ19MT0NLX01BWCA9IDI2ODQzNTQ1Ngp9OwoKdHlwZWRlZiBycGNfdWludDMyIHJwY19sb2Nfbm1lYV9zZW50ZW5jZV90eXBlOwoKdHlwZWRlZiBycGNfdWludDMyIHJwY19sb2NfYXNzaXN0X2RhdGFfdHlwZTsKCnN0cnVjdCBycGNfbG9jX2Fzc2lzdF9kYXRhX2RlbGV0ZV9zX3R5cGUgewogIHJwY19sb2NfYXNzaXN0X2RhdGFfdHlwZSB0eXBlOwogIHJwY191aW50MzIgcmVzZXJ2ZWRbOF07Cn07Cgp1bmlvbiBycGNfbG9jX2lvY3RsX2RhdGFfdV90eXBlIHN3aXRjaCAocnBjX2xvY19pb2N0bF9lX3R5cGUgZGlzYykgewogIGNhc2UgUlBDX0xPQ19JT0NUTF9TRVRfRklYX0NSSVRFUklBOgogICAgcnBjX2xvY19maXhfY3JpdGVyaWFfc190eXBlIGZpeF9jcml0ZXJpYTsKICBjYXNlIFJQQ19MT0NfSU9DVExfSU5GT1JNX05JX1VTRVJfUkVTUE9OU0U6CiAgICBycGNfbG9jX3VzZXJfdmVyaWZ5X3NfdHlwZSB1c2VyX3ZlcmlmeV9yZXNwOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9JTkpFQ1RfUFJFRElDVEVEX09SQklUU19EQVRBOgogICAgcnBjX2xvY19wcmVkaWN0ZWRfb3JiaXRzX2RhdGFfc190eXBlIHByZWRpY3RlZF9vcmJpdHNfZGF0YTsKICBjYXNlIFJQQ19MT0NfSU9DVExfU0VUX1BSRURJQ1RFRF9PUkJJVFNfREFUQV9BVVRPX0RPV05MT0FEOgogICAgcnBjX2xvY19wcmVkaWN0ZWRfb3JiaXRzX2F1dG9fZG93bmxvYWRfY29uZmlnX3NfdHlwZSBwcmVkaWN0ZWRfb3JiaXRzX2F1dG9fZG93bmxvYWQ7CiAgY2FzZSBSUENfTE9DX0lPQ1RMX0lOSkVDVF9VVENfVElNRToKICAgIHJwY19sb2NfYXNzaXN0X2RhdGFfdGltZV9zX3R5cGUgYXNzaXN0YW5jZV9kYXRhX3RpbWU7CiAgY2FzZSBSUENfTE9DX0lPQ1RMX0lOSkVDVF9QT1NJVElPTjoKICAgIHJwY19sb2NfYXNzaXN0X2RhdGFfcG9zX3NfdHlwZSBhc3Npc3RhbmNlX2RhdGFfcG9zaXRpb247CiAgY2FzZSBSUENfTE9DX0lPQ1RMX0lORk9STV9TRVJWRVJfT1BFTl9TVEFUVVM6CiAgICBycGNfbG9jX3NlcnZlcl9vcGVuX3N0YXR1c19zX3R5cGUgY29ubl9vcGVuX3N0YXR1czsKICBjYXNlIFJQQ19MT0NfSU9DVExfSU5GT1JNX1NFUlZFUl9DTE9TRV9TVEFUVVM6CiAgICBycGNfbG9jX3NlcnZlcl9jbG9zZV9zdGF0dXNfc190eXBlIGNvbm5fY2xvc2Vfc3RhdHVzOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9TRVRfRU5HSU5FX0xPQ0s6CiAgICBycGNfbG9jX2xvY2tfZV90eXBlIGVuZ2luZV9sb2NrOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9TRVRfU0JBU19DT05GSUc6CiAgICBycGNfYm9vbGVhbiBzYmFzX21vZGU7CiAgY2FzZSBSUENfTE9DX0lPQ1RMX1NFVF9OTUVBX1RZUEVTOgogICAgcnBjX2xvY19ubWVhX3NlbnRlbmNlX3R5cGUgbm1lYV90eXBlczsKICBjYXNlIFJQQ19MT0NfSU9DVExfU0VUX09OX0RFTUFORF9MUE06CiAgICBycGNfYm9vbGVhbiBvbl9kZW1hbmRfbHBtOwogIGNhc2UgIFJQQ19MT0NfSU9DVExfU0VUX0NETUFfUERFX1NFUlZFUl9BRERSOgogIGNhc2UgIFJQQ19MT0NfSU9DVExfU0VUX0NETUFfTVBDX1NFUlZFUl9BRERSOgogIGNhc2UgIFJQQ19MT0NfSU9DVExfU0VUX1VNVFNfU0xQX1NFUlZFUl9BRERSOgogIGNhc2UgIFJQQ19MT0NfSU9DVExfU0VUX0NVU1RPTV9QREVfU0VSVkVSX0FERFI6CiAgICBycGNfbG9jX3NlcnZlcl9pbmZvX3NfdHlwZSBzZXJ2ZXJfYWRkcjsKICBjYXNlIFJQQ19MT0NfSU9DVExfREVMRVRFX0FTU0lTVF9EQVRBOgogICAgcnBjX2xvY19hc3Npc3RfZGF0YV9kZWxldGVfc190eXBlIGFzc2lzdF9kYXRhX2RlbGV0ZTsKICBkZWZhdWx0OgogICAgdm9pZDsKfTsKCnVuaW9uIHJwY19sb2NfaW9jdGxfY2FsbGJhY2tfZGF0YV91X3R5cGUgc3dpdGNoIChycGNfbG9jX2lvY3RsX2VfdHlwZSBkaXNjKSB7CiAgY2FzZSBSUENfTE9DX0lPQ1RMX0dFVF9BUElfVkVSU0lPTjoKICAgIHJwY19sb2NfYXBpX3ZlcnNpb25fc190eXBlIGFwaV92ZXJzaW9uOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9HRVRfRklYX0NSSVRFUklBOgogICAgcnBjX2xvY19maXhfY3JpdGVyaWFfc190eXBlIGZpeF9jcml0ZXJpYTsKICBjYXNlIFJQQ19MT0NfSU9DVExfR0VUX0VOR0lORV9MT0NLOgogICAgcnBjX2xvY19sb2NrX2VfdHlwZSBlbmdpbmVfbG9jazsKICBjYXNlIFJQQ19MT0NfSU9DVExfR0VUX1NCQVNfQ09ORklHOgogICAgcnBjX2Jvb2xlYW4gc2Jhc19tb2RlOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9HRVRfTk1FQV9UWVBFUzoKICAgIHJwY19sb2Nfbm1lYV9zZW50ZW5jZV90eXBlIG5tZWFfdHlwZXM7CiAgY2FzZSBSUENfTE9DX0lPQ1RMX0dFVF9PTl9ERU1BTkRfTFBNOgogICAgcnBjX2Jvb2xlYW4gb25fZGVtYW5kX2xwbTsKICBjYXNlICBSUENfTE9DX0lPQ1RMX0dFVF9DRE1BX1BERV9TRVJWRVJfQUREUjoKICBjYXNlICBSUENfTE9DX0lPQ1RMX0dFVF9DRE1BX01QQ19TRVJWRVJfQUREUjoKICBjYXNlICBSUENfTE9DX0lPQ1RMX0dFVF9VTVRTX1NMUF9TRVJWRVJfQUREUjoKICAgIHJwY19sb2Nfc2VydmVyX2luZm9fc190eXBlIHNlcnZlcl9hZGRyOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9RVUVSWV9QUkVESUNURURfT1JCSVRTX0RBVEFfU09VUkNFOgogICAgcnBjX2xvY19wcmVkaWN0ZWRfb3JiaXRzX2RhdGFfc291cmNlX3NfdHlwZSBwcmVkaWN0ZWRfb3JiaXRzX2RhdGFfc291cmNlOwogIGNhc2UgUlBDX0xPQ19JT0NUTF9RVUVSWV9QUkVESUNURURfT1JCSVRTX0RBVEFfVkFMSURJVFk6CiAgICBycGNfbG9jX3ByZWRpY3RlZF9vcmJpdHNfZGF0YV92YWxpZGl0eV9yZXBvcnRfc190eXBlIHByZWRpY3RlZF9vcmJpdHNfZGF0YV92YWxpZGl0eTsKICBkZWZhdWx0OgogICAgdm9pZDsKfTsKCnN0cnVjdCBycGNfbG9jX2lvY3RsX2NhbGxiYWNrX3NfdHlwZSB7CiAgcnBjX2xvY19pb2N0bF9lX3R5cGUgdHlwZTsKICBycGNfaW50MzIgc3RhdHVzOwogIHJwY19sb2NfaW9jdGxfY2FsbGJhY2tfZGF0YV91X3R5cGUgZGF0YTsKfTsKCnVuaW9uIHJwY19sb2NfZXZlbnRfcGF5bG9hZF91X3R5cGUgc3dpdGNoICh1bnNpZ25lZCBoeXBlciBkaXNjKSB7CiAgY2FzZSBSUENfTE9DX0VWRU5UX1BBUlNFRF9QT1NJVElPTl9SRVBPUlQ6CiAgICBycGNfbG9jX3BhcnNlZF9wb3NpdGlvbl9zX3R5cGUgcGFyc2VkX2xvY2F0aW9uX3JlcG9ydDsKICBjYXNlIFJQQ19MT0NfRVZFTlRfU0FURUxMSVRFX1JFUE9SVDoKICAgIHJwY19sb2NfZ25zc19pbmZvX3NfdHlwZSBnbnNzX3JlcG9ydDsKICBjYXNlIFJQQ19MT0NfRVZFTlRfTk1FQV9QT1NJVElPTl9SRVBPUlQ6CiAgICBycGNfbG9jX25tZWFfcmVwb3J0X3NfdHlwZSBubWVhX3JlcG9ydDsKICBjYXNlIFJQQ19MT0NfRVZFTlRfTklfTk9USUZZX1ZFUklGWV9SRVFVRVNUOgogICAgcnBjX2xvY19uaV9ldmVudF9zX3R5cGUgbmlfcmVxdWVzdDsKICBjYXNlIFJQQ19MT0NfRVZFTlRfQVNTSVNUQU5DRV9EQVRBX1JFUVVFU1Q6CiAgICBycGNfbG9jX2Fzc2lzdF9kYXRhX3JlcXVlc3Rfc190eXBlIGFzc2lzdF9kYXRhX3JlcXVlc3Q7CiAgY2FzZSBSUENfTE9DX0VWRU5UX0xPQ0FUSU9OX1NFUlZFUl9SRVFVRVNUOgogICAgcnBjX2xvY19zZXJ2ZXJfcmVxdWVzdF9zX3R5cGUgbG9jX3NlcnZlcl9yZXF1ZXN0OwogIGNhc2UgUlBDX0xPQ19FVkVOVF9JT0NUTF9SRVBPUlQ6CiAgICBycGNfbG9jX2lvY3RsX2NhbGxiYWNrX3NfdHlwZSBpb2N0bF9yZXBvcnQ7CiAgY2FzZSBSUENfTE9DX0VWRU5UX1NUQVRVU19SRVBPUlQ6CiAgICBycGNfbG9jX3N0YXR1c19ldmVudF9zX3R5cGUgc3RhdHVzX3JlcG9ydDsKICBjYXNlIFJQQ19MT0NfRVZFTlRfUkVTRVJWRUQ6CiAgICBycGNfbG9jX3Jlc2VydmVkX3BheWxvYWRfc190eXBlIHJlc2VydmVkOwogIGRlZmF1bHQ6CiAgICB2b2lkOwp9OwoKY29uc3QgUlBDX0xPQ19BUElfTlVMTF9WRVJTSU9OID0gMHgwMDAxMDAwMTsKY29uc3QgUlBDX0xPQ19BUElfUlBDX0dMVUVfQ09ERV9JTkZPX1JFTU9URV9WRVJTSU9OID0gMHgwMDAxMDAwMTsK