ZGlmZiAtLWdpdCBhL0RveHlmaWxlIGIvRG94eWZpbGUKaW5kZXggYThkZThhOS4uYjRhMDFjNyAxMDA2NDQKLS0tIGEvRG94eWZpbGUKKysrIGIvRG94eWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKICMgVGhpcyBjb3VsZCBiZSBoYW5keSBmb3IgYXJjaGl2aW5nIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBvciAKICMgaWYgc29tZSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGlzIHVzZWQuCiAKLVBST0pFQ1RfTlVNQkVSICAgICAgICAgPSAxLjA1CitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gMS4xNgogCiAjIFRoZSBPVVRQVVRfRElSRUNUT1JZIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkgCiAjIGJhc2UgcGF0aCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSBwdXQuIApAQCAtMTAyOCwxNCArMTAyOCwxNCBAQAogIyBpbmhlcml0YW5jZSBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIAogIyBvciBpcyBub3QgYSBjbGFzcy4KIAotSElERV9VTkRPQ19SRUxBVElPTlMgICA9IFlFUworSElERV9VTkRPQ19SRUxBVElPTlMgICA9IE5PCiAKICMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzIAogIyBhdmFpbGFibGUgZnJvbSB0aGUgcGF0aC4gVGhpcyB0b29sIGlzIHBhcnQgb2YgR3JhcGh2aXosIGEgZ3JhcGggdmlzdWFsaXphdGlvbiAKICMgdG9vbGtpdCBmcm9tIEFUJlQgYW5kIEx1Y2VudCBCZWxsIExhYnMuIFRoZSBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VjdGlvbiAKICMgaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkKIAotSEFWRV9ET1QgICAgICAgICAgICAgICA9IFlFUworSEFWRV9ET1QgICAgICAgICAgICAgICA9IE5PCiAKICMgSWYgdGhlIENMQVNTX0dSQVBIIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiAKICMgd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIGRvY3VtZW50ZWQgY2xhc3Mgc2hvd2luZyB0aGUgZGlyZWN0IGFuZCAKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFiZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FCkBAIC0wLDAgKzEsMyBAQAorU2VlIGRvYy9jcnlwdC5wZGYKKworCmRpZmYgLS1naXQgYS9UT0RPIGIvVE9ETwppbmRleCBmNGYwNjY1Li4yMjZlYzhhIDEwMDY0NAotLS0gYS9UT0RPCisrKyBiL1RPRE8KQEAgLTEsMTAgKzEsMTEgQEAKLUZvciAxLjA2CitzdG9wcGVkIGF0IGNoMTIKKy0tIG5lZWRzIGV4YW1wbGVzIGZvciBlY2MvZHNhISEhIChhbmQgZm9yIGFzbi4xKQogCi0xLiBleHBvcnQgRUNDIGZ1bmN0aW9ucyBnbG9iYWxseSBbZS5nLiBtdWxtb2QgYW5kIHRoZSBzZXRzXQotICAgLSBnb2FsIGlzIHR2X2dlbiBtb2R1bGUgYW5kIHRlc3QgdmVjdG9ycwotMi4gQVNOLjEgU0VUIGFuZCBUNjFTdHJpbmcKLTMuIHBoYXNlIG91dCBESCBjb2RlIFtSU0EvRUNDL0RTQSBpcyBlbm91Z2hdCi00LiBTb21lIEFTTi4xIGRlbW8gcHJvZ3JhbXMgW2ZvciBub3cgcmVhZCB0aGUgc291cmNlIGNvZGUhXQotNS4gU3RhcnQgd29ya2luZyB0b3dhcmRzIG1ha2luZyB0aGUgYmlnbnVtIGNvZGUgcGx1Z2FibGUKLTYuIExvb2sgaW50byBvdGhlciBFQ0MgcG9pbnQgbXVscyBhbmQgY29uc2lkZXIgYSAicHJlY29tcCIgaW50ZXJmYWNlIAotNy4gQWRkIE9JRCBmb3IgY2lwaGVycyBhbmQgUFJOR3MgdG8gdGhlaXIgZGVzY3JpcHRvcnMKK211c3QgaGF2ZSBmb3IgdjEuMTYKKy0gZG9jdW1lbnQgUEsgYnVpbGQgZmxhZ3MKKy0gZG9jdW1lbnQgbWFrZWZpbGUgZmxhZ3MgW0lOU1RBTExfKiBmb3IgaW5zdGFuY2VdCistIHByZXBhcmUgbWFudWFsIGZvciBwcmludGluZyAoYm90aCBzb2Z0IGFuZCBoYXJkIGNvdmVyKQorCitOaWNlIHRvIGhhdmUgW2luIG9yZGVyIG9mIHByZWNlZGVuY2VdCistIGFkZCBYOS42MyBJRVMKKy0gYWRkIENQUCBtYWNyb3MgbGlrZSBPcGVuU1NMIGhhcyBmb3IgQVNOMSAoZS5nLiBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucywgZXRjKSBzaGFtZWxlc3Mgcmlwb2ZmIDotKQpkaWZmIC0tZ2l0IGEvYnVpbGQuc2ggYi9idWlsZC5zaAppbmRleCBhMDE4YWFjLi5hMDQ4NjcwIDEwMDY0NAotLS0gYS9idWlsZC5zaAorKysgYi9idWlsZC5zaApAQCAtMiwxMiArMiwxMiBAQAogZWNobyAiJDEgKCQyLCAkMykuLi4iCiBtYWtlIGNsZWFuIDE+L2Rldi9udWxsIDI+L2Rldi9udWxsCiBlY2hvIC1uICJidWlsZGluZy4uLiIKLUNGTEFHUz0iJDIgJENGTEFHUyIgbWFrZSAtajMgLWYgJDMgdGVzdCB0dl9nZW4gMT5nY2NfMS50eHQgMj5nY2NfMi50eHQgfHwgKGVjaG8gImJ1aWxkICQxIGZhaWxlZCBzZWUgZ2NjXzIudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIiAmJiBjYXQgZ2NjXzIudHh0ICYmIGV4aXQgMSkKK0NGTEFHUz0iJDIgJENGTEFHUyAkNCIgRVhUUkFMSUJTPSIkNSIgbWFrZSAtajQgLWYgJDMgdGVzdCB0dl9nZW4gMT5nY2NfMS50eHQgMj5nY2NfMi50eHQgfHwgKGVjaG8gImJ1aWxkICQxIGZhaWxlZCBzZWUgZ2NjXzIudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIiAmJiBjYXQgZ2NjXzIudHh0ICYmIGV4aXQgMSkKIGVjaG8gLW4gInRlc3RpbmcuLi4iCiBpZiBbIC1hIHRlc3QgXSAmJiBbIC1mIHRlc3QgXSAmJiBbIC14IHRlc3QgXTsgdGhlbgogICAgKCguL3Rlc3QgPnRlc3Rfc3RkLnR4dCAyPnRlc3RfZXJyLnR4dCAmJiAuL3R2X2dlbiA+IHR2LnR4dCkgJiYgZWNobyAiJDEgdGVzdCBwYXNzZWQuIiAmJiBlY2hvICJ5IiA+IHRlc3Rvay50eHQpIHx8IChlY2hvICIkMSB0ZXN0IGZhaWxlZCIgJiYgY2F0IHRlc3RfZXJyLnR4dCAmJiBleGl0IDEpCiAgICBpZiBmaW5kICpfdHYudHh0IC10eXBlIGYgMT4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCi0gICAgICBmb3IgZiBpbiAqX3R2LnR4dDsgZG8gaWYgKGRpZmYgJGYgbm90ZXMvJGYpIHRoZW4gdHJ1ZTsgZWxzZSAoZWNobyAidHZfZ2VuICRmIGZhaWxlZCIgJiYgcm0gLWYgdGVzdG9rLnR4dCAmJiBleGl0IDEpOyBmaTsgZG9uZQorICAgICAgZm9yIGYgaW4gKl90di50eHQ7IGRvIGlmIChkaWZmIC0taWdub3JlLWNhc2UgJGYgbm90ZXMvJGYpIHRoZW4gdHJ1ZTsgZWxzZSAoZWNobyAidHZfZ2VuICRmIGZhaWxlZCIgJiYgcm0gLWYgdGVzdG9rLnR4dCAmJiBleGl0IDEpOyBmaTsgZG9uZQogICAgZmkKIGZpCiBpZiBbIC1hIHRlc3Rvay50eHQgXSAmJiBbIC1mIHRlc3Rvay50eHQgXTsgdGhlbgpAQCAtMTYsNSArMTYsNSBAQAogZXhpdCAxCiAKICMgJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvYnVpbGQuc2gsdiAkICAgCi0jICRSZXZpc2lvbjogMS41ICQgICAKLSMgJERhdGU6IDIwMDUvMDYvMjcgMTM6MDQ6MDUgJCAKKyMgJFJldmlzaW9uOiAxLjkgJCAgIAorIyAkRGF0ZTogMjAwNi8wMy8xOCAxNDoxMDo1NSAkIApkaWZmIC0tZ2l0IGEvY2hhbmdlcyBiL2NoYW5nZXMKaW5kZXggNjVjY2QxNi4uYjJjNzAxNCAxMDA2NDQKLS0tIGEvY2hhbmdlcworKysgYi9jaGFuZ2VzCkBAIC0xLDMgKzEsMjMzIEBACitEZWNlbWJlciAxNnRoLCAyMDA2Cit2MS4xNiAtLSBCcmlhbiBHbGFkbWFuIHBvaW50ZWQgb3V0IHRoYXQgYSByZWNlbnQgY2hhbmdlIHRvIEdDTSBicm9rZSBob3cgdGhlIElWIHdhcyBoYW5kbGVkLiAgQ3VycmVudGx5IHRoZSBjb2RlIGNvbXBsaWVzIGFnYWluc3QgaGlzIHRlc3QgdmVjdG9ycworICAgICAgICAgc28gdGhlIGNvZGUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZnJvemVuIG5vdy4KKyAgICAgIC0tIFRyZXZvciBmcm9tIENyeXB0b2dyYXBoeSBSZXNlYXJjaCBJbmMuIHN1Ym1pdHRlZCBwYXRjaGVzIHRvIGNvbnZlcnQgdGhlIEVDQyBjb2RlIHRvIGJlIGdlbmVyaWMgYWxsb3dpbmcgY3VydmUgcGFyYW1ldGVycyB0byBiZSBzdWJtaXR0ZWQKKyAgICAgICAgIGF0IHJ1bnRpbWUuICAKKyAgICAgIC0tIEZpeGVkIHZhcmlvdXMgZG94eWdlbiBjb21tZW50cworICAgICAgLS0gQWRkZWQgVVRGOCBzdXBwb3J0IHRvIHRoZSBBU04xIGNvZGUKKyAgICAgIC0tIEZpeGVkIFNUT1JFWFhIIG1hY3JvcyBmb3IgeDg2IHBsYXRmb3JtcyAoRml4IGZvdW5kIGF0IEVsbGlwdGljIEluYy4pCisgICAgICAtLSBBZGRlZCBtYWtlZmlsZS51bml4IHdoaWNoIGlzIEJTRCBjb21wYXRpYmxlLCB5b3UgaGF2ZSB0byBtYW51YWxseSB0d2VhayBpdCBzaW5jZSB3ZWxsIEkgZG9uJ3QgdXNlIGl0IG5vcm1hbGx5CisgICAgICAtLSByZW1vdmVkIGEgZmV3IGxpbmdlcmluZyBtZW1jcHkncworICAgICAgLS0gRml4ZWQgbWVtb3J5IGZyZWUgZXJyb3JzIGluIGVjY19zaWduX2hhc2goKSB0aGF0IGNhbiBhcmlzZSBpZiB0aGUgbXBfaW5pdF9tdWx0aSgpIGZhaWxzCisgICAgICAtLSBGaXhlZCBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlIGluIHBrY3NfMV9wc3NfZGVjb2RlKCkgd2hpY2ggd291bGQgY29ycmVjdGx5IHNldCByZXMgdG8gMCAoaW5kaWNhdGluZyBhbiBpbmNvcnJlY3Qgc2lnbmF0dXJlKSBidXQgCisgICAgICAgICB3b3VsZCByZXR1cm4gQ1JZUFRfT0sgdG8gdGhlIGNhbGxlcgorICAgICAgLS0gbHRjX2VjY19tdWxtb2QoKSBjb3VsZCBsZWFrIG1lbW9yeSBpZiBtcF9pbml0KCZtdSkgZmFpbGVkLCBmaXhlZC4gIFdvdWxkIHlvdSBiZWxpZXZlIHRoYXQgbHRjX2VjY19tdWxtb2RfdGltaW5nKCkgaGFkIHRoZSBzYW1lCisgICAgICAgICBidWc/ICBBbHNvIGZpeGVkLiAgOi0pCisgICAgICAtLSBBZGRlZCBTaGFtaXIncyB0cmljayB0byB0aGUgRUNDIHNpZGUgKGRlZmluZWQgYXMgTFRDX0VDQ19TSEFNSVIsIGVuYWJsZWQgYnkgZGVmYXVsdCksIGdldHMgfjEuMzR4IHRvIH4xLjQweCBmYXN0ZXIgRUNDIHZlcmlmaWNhdGlvbnMKKyAgICAgIC0tIEFkZGVkIEJyaWFuJ3MgdmVjdG9yICM0NiB0byB0aGUgR0NNIGNvZGUuICBJdCBjYXRjaGVzIHRoZSBjdHIgY291bnRlciBlcnJvciBmcm9tIHYxLjE1LiAgT3JpZ2luYWxseSBJIHdhcyBnb2luZyB0byBhZGQgYWxsIG9mIGhpcyB2ZWN0b3JzLAorICAgICAgICAgYnV0IHRoZXkncmUgbm90IGFzIGVhc3kgdG8gcGFyc2UgYW5kIEkgZ290IGEgbG90IG9mIG90aGVyIHRoaW5ncyB0byBkby4gIFJlZ3Jlc3Npb24hCisgICAgICAtLSBWYXJpb3VzIG90aGVyIHNtYWxsIGZpeGVzIHRvIHRoZSBFQ0MgY29kZSB0byBjbGVhbiB1cCBlcnJvciBoYW5kbGluZyAoSSB0aGluayBtb3N0IG9mIHRoYXQgd2FzIGZyb20gdGhlIG1vdmUgaW4gMS4wNiB0byB0aGUgcGx1Z2lucykKKyAgICAgICAgIEFsbCBvZiB0aGUgZXJyb3JzIHdlcmUgaW4gY2xlYW5pbmcgdXAgZnJvbSBoZWFwIGZhaWx1cmVzLiAgU28gdGhleSB3ZXJlIG5vdCBsaWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGluIG5vcm1hbCB1c2FnZQorICAgICAgICAgTWFkZSBzaW1pbGFyIGZpeGVzIHRvIHRoZSBSU0EgYW5kIERTQSBjb2RlIChteSBiYWQpCisgICAgICAtLSBDcnlwdG9ncmFwaHkgUmVzZWFyY2ggSW5jLiBjb250cmlidXRlZCBhIGJ1bmNoIG9mIGZpeGVzIHRvIHNpbGVuY2Ugd2FybmluZ3MgKHdpdGggTVNWQykgdy5yLnQuIGFzc2lnbmVkIGRhdGEgdG8gdW5zaWduZWQgY2hhciB0eXBlcy4KKyAgICAgIC0tIE1hcnRpbiBNYXJrbyBzdWdnZXN0ZWQgc29tZSBmaXhlcyB0byBtYWtlIHRoZSBSTkcgYnVpbGQgd2l0aCBXaW5DRS4KKyAgICAgIC0tIFVwZGF0ZXMgdG8gdGhlIG1hbnVhbCBmb3IgcHJpbnQgKHNvbWUgZml4ZXMgdGhhbmtzIHRvIE1hcnRpbiBNYXJrbykKKyAgICAgIAorCitOb3ZlbWJlciAxN3RoLCAyMDA2Cit2MS4xNSAtLSBBbmRyZWFzIExhbmdlIGZvdW5kIHRoYXQgaWYgc2hhMjU2X2luaXQgRElEIGZhaWwgaW4gZm9ydHVuYSBpdCB3b3VsZG4ndCBjbGVhbiB1cCB0aGUgc3RhdGUgY29ycmVjdGx5LiAgVGhhbmtzLgorICAgICAgICAgRm9ydHVuYXRlbHkgc2hhMjU2X2luaXQgY2Fubm90IGZhaWwgKGFzIG9mIHYxLjE0KSA6LSkKKyAgICAgIC0tIEFuZHJlYXMgTGFuZ2UgY29udHJpYnV0ZWQgUk1ELTI1NiBhbmQgUk1ELTMyMCBjb2RlLgorICAgICAgLS0gUmVtb3ZlZCBtdXRleCBsb2NrcyBmcm9tIGZvcnR1bmFfaW1wb3J0IGFzIHRoZXkgY3JlYXRlIGEgZGVhZGxvY2sgYW5kIGFyZW4ndCByZXF1aXJlZCBhbnl3YXlzIFtBdmkgWmVsbWFub3ZpY2hdCisgICAgICAtLSBBZGRlZCBMVENfTk9fUFJPVE9UWVBFUyB0byBhdm9pZCBwcm90b3R5cGluZyBmdW5jdGlvbnMgbGlrZSBtZW1zZXQvbWVtY3B5LiAgUmVxdWlyZWQgZm9yIGZhbnMgb2YgR0NDIDMuMy54CisgICAgICAtLSBEYXZpZCBFZGVyIGNhdWdodCBhIG9mZiBieSBvbmUgb3ZlcnJ1biBidWcgaW4gcG1hY19kb25lKCkgd2hpY2ggY2FuIGJlIGV4cGxvaXRlZCBpZiB5b3VyIG91dHB1dCB0YWcgYnVmZmVyIGlzIAorICAgICAgICAgc21hbGxlciB0aGFuIHRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIsIGUuZy4gaWYgeW91IGhhdmUgYSA0LWJ5dGUgYnVmZmVyIGFuZCB5b3UgdGVsbCBwbWFjX2RvbmUgdGhhdCB5b3Ugd2FudAorICAgICAgICAgYSA0LWJ5dGUgVEFHIGl0IHdpbGwgc3RvcmUgNCBieXRlcyBidXQgcmV0dXJuIGFuIG91dGxlbiBvZiA1LgorICAgICAgLS0gQWRkZWQgc2lnbmF0dXJlcyB0byB0aGUgRUNDIGFuZCBSU0EgYmVuY2htYXJrcworICAgICAgLS0gQWRkZWQgTFRDX1BST0ZJTEUgdG8gcnVuIHRoZSBQSyB0ZXN0cyBvbmx5IG9uY2UgaW4gdGhlIHRpbWluZyBkZW1vIChzbyB5b3UgY2FuIGNhcHR1cmUgZXZlbnRzIHByb3Blcmx5KQorICAgICAgLS0gQW5kcmVhcyBjb250cmlidXRlZCBQS0NTICMxIHYxLjUgY29kZSB0aGF0IG1lcmdlZCBjbGVhbmx5IHdpdGggdGhlIGV4aXN0aW5nIFBLQ1MgY29kZS4gIHcwMHQuCisgICAgICAgICAodXBkYXRlOiBJIGhhZCB0byBmaXggaXQgdG8gaW5jbHVkZSB0aGUgZGlnZXN0SW5mbyBhbmQgd2hhdCBub3QuICBCYWQgQW5kcmVhcywgYmFkISBoZWhlaGUpCisgICAgICAtLSBGaXhlZCBhIHNpZ25lZCB2YXJpYWJsZSBlcnJvciBpbiBnY21fcHJvY2VzcygpIChoYXJkIHRvIHRyaWdnZXIgYnVnIGZvcnR1bmF0ZWx5KQorICAgICAgLS0gUmVtb3ZlZCBhbGwgbWVtY21wL21lbXNldC9tZW1jcHkgZnJvbSB0aGUgc291cmNlIChyZXBsYWNlZCB3aXRoIFggbWFjcm9zKQorICAgICAgLS0gUmVuYW1lZCBtYWNyb3MgSE1BQy9PTUFDL1BNQUMgdG8gaGF2ZSBhIExUQ18gcHJlZml4LiAgSWYgeW91IHBhc3MgdGhlc2Ugb24gdGhlIGNvbW1hbmQgbGluZSBwbGVhc2UgdXBkYXRlIHlvdXIgbWFrZWZpbGVzCisgICAgICAtLSBBZGRlZCBYQ0JDLU1BQyBzdXBwb3J0IFtSRkMgMzU2Nl0KKyAgICAgIC0tIGZpeGVkIExPQUQzMkggYW5kIExPQUQ2NEggdG8gc3RvcCBwdXR0aW5nIG91dCB0aGF0IGRhcm4gd2FybmluZyA6LSkKKyAgICAgIC0tIEFkZGVkIHRoZSBLb3JlYW4gU0VFRCBibG9jayBjaXBoZXIgW1JGQyA0MjY5XQorICAgICAgLS0gQWRkZWQgTFRDX1ZBTEdSSU5EIGRlZmluZSB3aGljaCBtYWtlcyBTT0JFUi0xMjggYW5kIFJDNCBhIHB1cmUgUFJORyAoYW5kIG5vdCBhIHN0cmVhbSBjaXBoZXIpLiAgVXNlZnVsIGlmIHlvdSB1c2UgCisgICAgICAgICBWYWxncmluZCB0byBkZWJ1ZyB5b3VyIGNvZGUgKHJlcG9ydGVkIGJ5IEFuZHJlYXMgTGFuZ2UpCisgICAgICAtLSBNYWRlIFNPQkVSLTEyOCBtb3JlIHBvcnRhYmxlIGJ5IHJlbW92aW5nIHRoZSBBU0NJSSBrZXkgaW4gdGhlIHRlc3QgZnVuY3Rpb24gKG15IGJhZCwgc29ycnkpLgorICAgICAgLS0gTWFydGluIE1vY2tvIHBvaW50ZWQgb3V0IHRoYXQgaWYgeW91IGhhdmUgbm8gUFJOR3MgZGVmaW5lZCB0aGUgbGliIHdvbid0IGJ1aWxkLiAgRml4ZWQsIGFsc28gZml4ZWQgZm9yIGlmIHlvdSBoYXZlIG5vCisgICAgICAgICBoYXNoZXMgZGVmaW5lZC4KKyAgICAgIC0tIFNwZWQgdXAgRjggbW9kZSB3aXRoIExUQ19GQVNUCisgICAgICAtLSBNYWRlIENUUiBtb2RlIFJGQyAzNjg2IGNvbXBsaWFudCAoaW5jcmVtZW50IGNvdW50ZXIgZmlyc3QpLCB0byBlbmFibGUsIE9SIHRoZSB2YWx1ZSBMVENfQ1RSX1JGQzM2ODYgdG8gdGhlICJtb2RlIgorICAgICAgICAgcGFyYW1ldGVyIHlvdSBwYXNzIHRvIGN0cl9zdGFydCgpLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBMVEMgY29tcGxpYW50IChlLmcuIGVuY3J5cHQgdGhlbiBpbmNyZW1lbnQpCisgICAgICAtLSBBZGRlZCBjdHJfdGVzdCgpIHRvIHRlc3QgQ1RSIG1vZGUgYWdhaW5zdCBSRkMgMzY4NgorICAgICAgLS0gQWRkZWQgY3J5cHRfZnNhKCkgLi4uIE9fbworICAgICAgLS0gRml4ZWQgTFRDX0VDQ19USU1JTkdfUkVTSVNUQU5UIHNvIGl0IG9uY2UgYWdhaW4gYnVpbGRzIHByb3Blcmx5IChwdCBhZGQvZGJsIGFyZSB0aHJvdWdoIHRoZSBwbHVnaW4gbm93KQorICAgICAgLS0gQWRkZWQgQU5TSSBYOS42MyAoc2VjIDQuMy42KSBpbXBvcnQvZXhwb3J0IG9mIHB1YmxpYyBrZXlzIChjYW5ub3QgZXhwb3J0IHRvIGNvbXByZXNzZWQgZm9ybWF0cyBidXQgd2lsbCBpbXBvcnQgCisgICAgICAgICBoeWJyaWQgY29tcHJlc3NlZCkKKyAgICAgIC0tIEFkZGVkIFNFQ1AgY3VydmVzIGZvciAxMTIsIDEyOCwgYW5kIDE2MCBiaXRzIChvbmx5IHRoZSAncjEnIGN1cnZlcykKKyAgICAgIC0tIEFkZGVkIDNHUFAtRjkgTUFDICh0aGFua3MgdG8gR3JlZyBSb3NlIGZvciB0aGUgdGVzdCB2ZWN0b3JzKQorICAgICAgLS0gQWRkZWQgdGhlIEtBU1VNSSBibG9jayBjaXBoZXIKKyAgICAgIC0tIEFkZGVkIEY5L1hDQkMvT01BQyBjYWxsYmFja3MgdG8gdGhlIGNpcGhlciBwbHVnaW4KKyAgICAgIC0tIEFkZGVkIFJTQSBQS0NTICMxIHYxLjUgc2lnbmF0dXJlL2VuY3J5cHQgdGVzdHMgdG8gcnNhX3Rlc3QuYworICAgICAgLS0gRml4IHRvIHlhcnJvd190ZXN0KCkgdG8gbm90IGNhbGwgeWFycm93X2RvbmUoKSB3aGljaCBpcyBpbnZhbGlkIGluIHRoYXQgY29udGV4dCAodGhhbmtzIFZhbGdyaW5kKQorICAgICAgLS0gQ2hyaXN0b3BoZSBEZXZpbmUgcG9pbnRlZCBvdXQgdGhhdCBBbnViaXMgd291bGQgZmFpbCBvbiB2YXJpb3VzIDY0LWJpdCBVTklYIGJveGVzIHdoZW4gIng+PjI0IiB3YXMgdXNlZCBhcyBhbiBpbmRleCwgd2UgbmVlZGVkIAorICAgICAgICAgdG8gbWFzayBpdCB3aXRoIDB4RkYuICBUaGFua3MuICBGaXhlZC4KKworQXVndXN0IDB4MUUsIDB4MDdENgordjEuMTQgLS0gUmVuYW1lZCB0aGUgY2hhaW5pbmcgbW9kZSBtYWNyb3MgZnJvbSBYWFggdG8gTFRDX1hYWF9NT0RFLiAgU2hvdWxkIGhlbHAgYXZvaWQgcG9sbHV0aW5nIHRoZSBtYWNybyBuYW1lIHNwYWNlLgorICAgICAgLS0gY2xlYW4gdXAgb2YgU0hBLTI1NgorICAgICAgLS0gQ2hyaXMgQ29sbWFuIHBvaW50ZWQgb3V0IHRoYXQgZGVyX2RlY29kZV9zZXF1ZW5jZV8qIGFsbG93cyBMVENfQVNOMV9TRVRPRiB0byBhY2NlcHQgU0VRVUVOQ0VzIGFuZCB2aWNlIHZlcnNhLgorICAgICAgICAgRGVjb2RlciBbbm9uLWZsZXhpIGRlY29kZXIgdGhhdCBpc10gaXMgbW9yZSBzdHJpY3Qgbm93IGFuZCByZXF1aXJlcyBhIG1hdGNoLgorICAgICAgLS0gU3RlZmZlbiBKYWVja2VsIHBvaW50ZWQgb3V0IGEgdHlwbyBpbiB0aGUgdXNlciBtYW51YWwgKHJlOiByc2FfZXhwdG1vZCkuICBGaXhlZC4gIFRoaXMgZGlzcHJvdmVzIHRoZSBub3Rpb24gdGhhdAorICAgICAgICAgbm9ib2R5IHJlYWRzIGl0LiAgOi0pCisgICAgICAtLSBNYWRlIEdDTSBhIGJpdCBtb3JlIHBvcnRhYmxlIHcuci50LiBoYW5kbGluZyB0aGUgQ1RSIElWIChlLmcuICYgd2l0aCAyNTUpCisgICAgICAtLSBBZGQgTFRDX1ZFUkJPU0UgaWYgeW91IHJlYWxseSB3YW50IHRvIHNlZSB3aGF0IHRlc3QgaXMgZG9pbmcgOi0pCisgICAgICAtLSBBZGRlZCBTU0UyIHN1cHBvcnQgdG8gR0NNIFt1c2UgR0NNX1RBQkxFU19TU0UyIHRvIGVuYWJsZV0sIHNoYXZlcyAyIGN5Y2xlcyBwZXIgYnl0ZSBvbiBPcHRlcm9uIHByb2Nlc3NvcnMKKyAgICAgICAgIFNoYXZlZCA0IGN5Y2xlcyBvbiBhIFByZXNjb3R0IChJbnRlbCBQNCkKKyAgICAgICAgIFJlcXVpcmVzIHlvdSBhbGlnbiB5b3VyIGdjbV9zdGF0ZSBvbiBhIDE2IGJ5dGUgYm91bmRhcnksIHNlZSBnY21fbWVtb3J5KCkgZm9yIG1vcmUgaW5mbworICAgICAgLS0gQWRkZWQgbWlzc2luZyBwcm90b3R5cGUgZm9yIGY4X3Rlc3RfbW9kZSgpCisgICAgICAtLSB0d28gZml4ZXMgdG8gQ0NNIGZvciBjb3JuZXIgY2FzZXMgW0wrbm9uY2VsZW4gPiAxNV0gYW5kIGZpeGluZyB0aGUgQ1RSIHBhZCB0byBlbmNyeXB0IHRoZSBDQkMtTUFDIHRhZworICAgICAgLS0gRnJhbnogR2xhc25lciBwb2ludGVkIG91dCB0aGUgQVJHVFlQRT00IGlzIG5vdCBhY3R1YWxseSB2YWxpZC4gIEZpeGVkLgorICAgICAgLS0gRml4ZWQgYnVnIGluIGY4X3N0YXJ0KCkgaWYgeW91ciBrZXkgPCBzYWx0a2V5IHVuc3BlY2lmaWVkIGJlaGF2aW91ciBvY2N1cnMuICA6LSgKKyAgICAgIC0tIERvY3VtZW50ZWQgRjggbW9kZS4gIFllYWgsIGJlY2F1c2UgeW91IHJlYWQgdGhlIG1hbnVhbC4gIAorICAgICAgLS0gTWlub3IgdXBkYXRlcyB0byB0aGUgdGVjaG5vdGVzLgorCisKK0p1bmUgMTd0aCwgMjAwNgordjEuMTMgLS0gRml4ZWQgdG8gZm9ydHVuYV9zdGFydCgpIHRvIGNsZWFuIHVwIHN0YXRlIGlmIGFuIGVycm9yIG9jY3Vycy4gIE5vdCByZWFsbHkgdXNlZnVsIGF0IHRoaXMgc3RhZ2UgKHNoYTI1NiBjYW4ndCBmYWlsKSBidXQgdXNlZnVsCisgICAgICAgICBpZiBJIGV2ZXIgbWFrZSBmb3J0dW5hIHBsdWdnYWJsZQorICAgICAgLS0gTWlrZSBNYXJpbiBzdWJtaXR0ZWQgYSB3aG9sZSBidW5jaCBvZiBwYXRjaGVzIGZvciBmaXhpbmcgdXAgdGhlIGxpYnMgb24gdHJhZGl0aW9uYWwgVU5JWCBwbGF0Zm9ybXMuICBHbyBBSVghICBUaGFua3MhCisgICAgICAtLSBPbmUgb2YgYnVncyBmb3VuZCBpbiB0aGUgbXVsdGkgZGVtbyBoaWdobGlnaHRzIHRoYXQgYXQgbGVhc3Qgd2l0aCBnY2MgeW91IG5lZWQgdG8gcGFzcyBpbnRlZ2VycyB3aXRoIGEgVUwgcHJlZml4IHRvIGVuc3VyZQorICAgICAgICAgdGhleSdyZSB1bnNpZ25lZCBsb25nCisgICAgICAtLSBVcGRhdGVkIHRoZSBGUCBFQ0MgY29kZSB0byB1c2UgYWZmaW5lIHBvaW50cy4gIEl0J3MgdGVoIGZhc3QuCisgICAgICAtLSBNYWRlIGl0IHNvIG1hbnkgZnVuY3Rpb25zIHdoaWNoIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1cgbm93IGFsc28gaW5kaWNhdGUgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLCBub3RlIHRoYXQgbm90IGFsbCBmdW5jdGlvbnMKKyAgICAgICAgIGRvIHRoaXMgKG1vc3QgZG8gdGhvdWdoKS4KKyAgICAgIC0tIEFkZGVkIEY4IGNoYWluaW5nIG1vZGUuICBJdCdzIHN1cGVyIG5lYXRvLgorCitNYXkgMjl0aCwgMjAwNgordjEuMTIgLS0gRml4ZWQgT0lEIGVuY29kZXIvZGVjb2Rlci9sZW5ndGggdG8gcHJvcGVybHkgaGFuZGxlIHRoZSBmaXJzdCB0d28gcGFydHMgb2YgYW4gT0lELCBtYXRjaGVzIDIwMDIgWC42OTAgbm93LgorICAgICAgLS0gW1dlc2xleSBTaGllbGRzXSBBbGxvd3MgYm90aCBHTVAvTFRNIGFuZCBURk0gdG8gYmUgZGVmaW5lZCBub3cuICAKKyAgICAgIC0tIFtXZXNsZXkgU2hpZWxkc10gR01QIHBsdWdnaW4gaXMgY2xlYW5lciBub3cgYW5kIGRvZXNuJ3QgdXNlIGRlcHJlY2F0ZWQgc3ltYm9scy4gWWlwZWUKKyAgICAgIC0tIEFkZGVkIGNvdW50X2xzYl9iaXRzIHRvIGdldCB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgTFNCIHplcm8gYml0cyB0aGVyZSBhcmUuCisgICAgICAtLSBGaXhlZCBhIGJ1ZyBpbiB0aGUgSU5URUdFUiBlbmNvZGVycyBmb3IgdmFsdWVzIG9mIC0oMjU2KiprKS8yCisgICAgICAtLSBBZGRlZCBCT09MRUFOIHR5cGUgdG8gQVNOLjEgdGhpbmd5LW1hLWRvLWhpY2t5CisgICAgICAtLSBUZXN0cHJvZiBkb2Vzbid0IHN0cmljdGx5IHJlcXVpcmUgR01QIC4uLiBvb3BzIFtOaWxzIER1cm5lcl0KKyAgICAgIC0tIEFkZGVkIExUQ19DQUxMIGFuZCBMVENfRVhQT1JUIG1hY3JvcyBpbiB0b21jcnlwdF9jZmcuaCB0byBzdXBwb3J0IHZhcmlvdXMgY2FsbGluZyBhbmQgbGlua2VyIGNvbnZlbnRpb25zCisgICAgICAgICAoVGhhbmtzIHRvIEpvaG4gS2lyayBmcm9tIERlbW9ud2FyZSkKKyAgICAgIC0tIEluIHdoYXQgaGFzIHRvIGJlIHRoZSBiZXN0IHRoaW5nIHNpbmNlIHNsaWNlZCBicmVhZCBJIGJyaW5nIHlvdSBNRUNDX0ZQIHdoaWNoIGlzIHRoZSBmaXhlZCBwb2ludAorICAgICAgICAgRUNDIHBvaW50IG11bHRpcGxpZXIuICBJdCdzIGZhc3QsIGl0J3Mgc2V4eSBhbmQgd2hhdCdzIG1vcmUgaXQncyBoZWxsYSBmYXN0IFtkaWQgSSBtZW50aW9uIGl0J3MgZmFzdD9dCisgICAgICAgICBZb3UgY2FuIHR1bmUgaXQgc29tZXdoYXQgd2l0aCBGUF9MVVQgKGRlZmF1bHQgdG8gOCkgZm9yIGxvb2stdXAgd2lkdGguCisgICAgICAgICBSZWFkIHNlY3Rpb24gOC4yIG9mIHRoZSBtYW51YWwgZm9yIG1vcmUgaW5mby4KKyAgICAgICAgIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHlvdSdsbCBoYXZlIHRvIGJ1aWxkIExUQyB3aXRoIGl0IGRlZmluZWQgdG8gZ2V0IGl0LiAgCisgICAgICAtLSBGaXhlZCBidWcgaW4gZWNjX3Rlc3QuYyAoZnJvbSB0ZXN0cHJvZikgdG8gaW5jbHVkZSB0aGUgNTIxIFtub3QgNTEyXSBiaXQgY3VydmUuICA6LSkKKworQXByaWwgNHRoLCAyMDA2Cit2MS4xMSAtLSBSZW1vdmVkIHByaW50ZidzIGZyb20gbHJ3X3Rlc3QgLi4uIHdob29wcworICAgICAgLS0gbHJ3X3Byb2Nlc3Mgbm93IGNoZWNrcyB0aGUgcmV0dXJuIG9mIHRoZSBjaXBoZXIgZWNiIGVuY3J5cHQvZGVjcnlwdCBjYWxscworICAgICAgLS0gbHJ3X3N0YXJ0IHdhcyBub3QgdXNpbmcgbnVtX3JvdW5kcyAuLi4KKyAgICAgIC0tIEFkYW0gTWlsbGVyIHJlcG9ydGVkIGEgYnVnIGluIHRoZSBmbGV4aSBkZWNvZGVyIHdpdGggZWxlbWVudHMgcGFzdCB0aGUgZW5kIG9mIGEgc2VxdWVuY2UuICBGaXhlZC4KKyAgICAgIC0tIEJydWNlIEd1ZW50ZXIgc3VnZ2VzdGVkIEkgdXNlIC0tdGFnPUNDIGZvciBsaWJ0b29sIGJ1aWxkcyB3aGVyZSB0aGUgY29tcGlsZXIgbWF5IHRoaW5rIGl0J3MgQysrLiAgKEkgYXBwbGllZCB0aGlzIHRvIExUTSBhbmQgVEZNKQorICAgICAgLS0gT3B0aW1pemVkIHRoZSBFQ0MgZm9yIFRGTSBhIGJpdCBieSByZW1vdmluZyB0aGUgdXNlbGVzcyAiaWYiIHN0YXRlbWVudHMgKG1vc3QgVEZNIGZ1bmN0aW9ucyBkb24ndCByZXR1cm4gZXJyb3IgY29kZXMpCisgICAgICAgICBBY3R1YWxseSBzaGF2ZWQgYSBnb29kIGNodW5rIG9mIHRpbWUgb2ZmIGFuZCBtYWRlIHRoZSBjb2RlIHNtYWxsZXIuICBCeSBkZWZhdWx0IHdpdGggVEZNIHRoZSBzdG9jayBMVEMgcG9pbnQgYWRkL2RibCBmdW5jdGlvbnMgCisgICAgICAgICB3aWxsIGJlIHRvdGFsbHkgb21pdHRlZCAoRUNDLTI1NiBtYWtlIGtleSB0aW1lcyBvbiBhIFByZXNjb3R0IGZvciBvbGQgdnMuIG5ldyBhcmUgMTEuMDNNIHZzLiA5LjU5TSBjeWNsZXMpCisgICAgICAtLSBhZGRlZCBtaXNzaW5nIENWUyB0YWdzIHRvIGx0Y19lY2NfbXVsbW9kLmMKKyAgICAgIC0tIGNvcnJlY3RlZCB0eXBvIGluIHRvbWNyeXB0X2NmZy5oIGFib3V0IHdoYXQgdGhlIGZpbGUgaGFzIGJlZW4gY2FsbGVkIAorICAgICAgLS0gY29ycmVjdGVkIG15IGFkZHJlc3MgaW4gdGhlIHVzZXIgbWFudWFsLiAgQSAiYml0IiBvdXQgb2YgZGF0ZS4KKyAgICAgIC0tIGFkZGVkIGxyd19nZW4gdG8gdHZfZ2VuCisgICAgICAtLSBhZGRlZCBHTVAgcGx1Z2luLCBvbmx5IHRlc3RlZCBvbiBhIEFNRDY0IGFuZCB4ODZfMzIgR2VudG9vIExpbnV4IGJveCBzbyBiZSBhd2FyZQorICAgICAgLS0gbWFkZSB0ZXN0bWUuc2ggcnVucyBkaWZmIGNhc2UgaW5zZW5zaXRpdml0eWx5IFt3aGF0ZXZlci4uLl0gY3V6IEdNUCBvdXRwdXRzIGxvd2VyY2FzZSBzYXRhbiB0ZXh0CisgICAgICAtLSBhZGRlZCBMREZMQUdTIHRvIHRoZSBtYWtlZmlsZSB0byBhbGxvdyBjcm9zcyBwb3J0aW5nIGxpbmtpbmcgb3B0aW9ucworICAgICAgLS0gYWRkZWQgbHJ3X3Rlc3QoKSB0byB0aGUgaGVhZGVyIGZpbGUgLi4uIHdob29wcworICAgICAgLS0gY2hhbmdlZCBsaWJ0b21jcnlwdC5vcmcgdG8gbGlidG9tY3J5cHQuY29tIC4uLi4gbXVtYmxlIG11bWJsZQorICAgICAgLS0gVXBkYXRlcyB0byBkZXRlY3QgX19TVFJJQ1RfQU5TSV9fIHdoaWNoIGlzIGRlZmluZWQgaW4gLS1zdGQ9Yzk5IG1vZGVzIChub3RlIC1hbnNpIGlzIG5vdCBzdXBwb3J0ZWQgYXMgaXQgbGFja3MgbG9uZyBsb25nKSBzbyB5b3UgY2FuCisgICAgICAgICBidWlsZCBMVEMgb3V0IG9mIHRoZSBib3ggd2l0aCBjOTkgKG5vdGU6IGl0J2xsIGJlIHNsb3dlciBhcyB0aGVyZSBpcyBubyBhc20gaW4gdGhpcyBjYXNlKQorICAgICAgLS0gVXBkYXRlZCBwZWxpY2FuLmMgYW5kIGFlc190YWIuYyB0byB1bmRlZiB0YWJsZXMgbm90LXJlcXVpcmVkLiAgVGhlIHRhYmxlcyBhcmUgc3RhdGljIHNvIGJvdGggQUVTIGFuZCBQZWxpY2FuIE1BQyB3b3VsZCBoYXZlIGNvcGllcy4gIFNhdmUgYSBmZXcgS0IgaW4gdGhlIGZpbmFsIGJpbmFyeS4KKyAgICAgIC0tIEFkZGVkIExUQ19OT19GQVNUIHRvIHRoZSBtYWtlZmlsZS5pY2MgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgSUNDIHY5IGNhbid0IGhhbmRsZSBpdCAoUGVsaWNhbiBNQUMgZmFpbHMgZm9yIGluc3RhbmNlKQorCitGZWJydWFyeSAxMXRoLCAyMDA2Cit2MS4xMCAtLSBGcmVlIGVjYi9jYmMvY3RyL2xydyBzdHJ1Y3R1cmVzIGluIHRpbWluZyBjb2RlIGJ5IGNhbGxpbmcgdGhlICJkb25lIiBmdW5jdGlvbgorICAgICAgLS0gZml4ZWQgYnVnIGluIGxyd19wcm9jZXNzKCkgd2hpY2ggd291bGQgYWx3YXlzIHVzZSB0aGUgc2xvdyB1cGRhdGUgLi4uCisgICAgICAtLSB2YXN0bHkgc3BlZCB1cCBnY21fZ2ZfbXVsdCgpIHdoZW4gTFRDX0ZBU1QgaXMgZGVmaW5lZC4gIFRoaXMgc3BlZWRzIHVwIExSVyBhbmQgR0NNIHN0YXRlIGNyZWF0aW9uLCB1c2VmdWwgZm9yIHNlcnZlcnMgd2l0aCBHQ00KKyAgICAgIC0tIFJlbW92ZWQgTkxTIHNpbmNlIHRoZXJlIGFyZSBzb21lIGF0dGFja3MgYWdhaW5zdCBpdC4gIAorICAgICAgLS0gZml4ZWQgbWVtb3J5IGxlYWsgaW4gcnNhX2ltcG9ydCByZXBvcnRlZCBieSBKb2huIEt1aG5zCisgICAgICArKyByZS1yZWxlYXNlZCBhcyB0aGUgcnNhIGZpeCB3YXMgaW5jb3JyZWN0IChiYWQgSm9obiBiYWQgLi4uIGhlaGVoZSkgYW5kIEkgbWlzc2VkIHNvbWUgTlVMTHMgaW4gdGhlIHN0YXRpYyBkZXNjcmlwdG9yIGVudHJ5IGZvciBjaXBoZXJzIAorCitKYW51YXJ5IDI2dGgsIDIwMDYKK3YxLjA5IC0tIEFkZGVkIG1pc3NpbmcgZG94eWdlbiBjb21tZW50cyB0byBzb21lIG9mIHRoZSBBU04uMSByb3V0aW5lcworICAgICAgLS0gQWRkZWQgImVhc3kgYnV0dG9uIiBkZWZpbmUgTFRDX0VBU1kgYW5kIExUQyB3aWxsIGJ1aWxkIHdpdGggYSBzdWJzZXQgb2YgYWxsIHRoZSBhbGdvcy4gIFJlZHVjZXMgYnVpbGQgdGltZXMgZm9yIHR5cGljYWwKKyAgICAgICAgIGNvbmZpZ3VyYXRpb25zLiAgVHVuYWJsZSBbc2VlIHRvbWNyeXB0X2N1c3RvbS5oXQorICAgICAgLS0gQWRkZWQgc29tZSBlcnJvciBkZXRlY3Rpb24gdG8gcmVnX2FsZ3MoKSBvZiB0aGUgdGVzdHByb2YuYSBsaWJyYXJ5IHRvIGRldGVjdCB3aGVuIHRoZSBQUk5HIGlzIG5vdCBzZXR1cCBjb3JyZWN0bHkgKHRvb2sgbWUgMTAgbWlucyB0byBmaWd1cmUgb3V0LCBQSVRBISkKKyAgICAgIC0tIFNpbWlsYXIgZml4ZXMgdG8gdGltaW5nIGRlbW8gKE1ENSBub3QgZGVmaW5lZCB3aGVuIEVBU1kgaXMgZGVmaW5lZCkKKyAgICAgIC0tIEFkZGVkIHRoZSBOTFMgZW5jK21hYyBzdHJlYW0gY2lwaGVyIGZyb20gUVVBTENPTU0sIGRpc2FibGVkIGZvciB0aGlzIHJlbGVhc2UsIHdhaXRpbmcgb24gdGVzdCB2ZWN0b3JzCisgICAgICAtLSBGaW5hbGx5IGFkZGVkIGFuIGF1dG8tdXBkYXRlIHNjcmlwdCBmb3IgdGhlIG1ha2VmaWxlcy4gIFNvIHdoZW4gSSBhZGQgbmV3IGZpbGVzL2RpcnMgaXQgY2FuIGF1dG9tYXRpY2FsbHkgZml4IHVwIHRoZSBtYWtlZmlsZXMgW2FsbCBmb3VyIG9mIHRoZW0uLi5dCisgICAgICAtLSBBZGRlZCBMUlcgdG8gdGhlIGxpc3Qgb2YgY2lwaGVyIG1vZGVzIHN1cHBvcnRlZAorICAgICAgLS0gY2xlYW5lZCB1cCBjaXBoZXJzIGRlZmluaXRpb25zIHRvIHJlbW92ZSBjYmMvY2ZiL29mYi9jdHIvZXRjIGZyb20gdGhlIG5hbWVzcGFjZSB3aGVuIG5vdCB1c2VkLgorCitOb3ZlbWJlciAyNHRoLCAyMDA1Cit2MS4wOCAtLSBBZGRlZCBTRVQgYW5kIFNFVCBPRiBzdXBwb3J0IHRvIHRoZSBBU04uMSBzaWRlCisgICAgICAtLSBGaXhlZCB1cCBYIG1hY3JvcywgYWRkZWQgUVNPUlQgdG8gdGhlIG1peCBbdGhhbmtzIFNFVC9TRVRPRl0KKyAgICAgIC0tIEFkZGVkIFhNRU1DTVAgdG8gdGhlIGxpc3Qgb2YgWCBtYWNyb3MKKyAgICAgIC0tIEluIGRlcl9kZWNvZGVfc2VxdWVuY2UoKSB0aGUgU0hPUlRfSU5URUdFUiB0eXBlIHdhcyBub3QgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHkgW29kZGx5IGVub3VnaCBpdCB3b3JrZWQganVzdCBlbm91Z2ggdG8gbWFrZSBSU0Egd29yayAuLi4gZ28gZmlndXJlIV0KKyAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBtYXRoIGRlc2NyaXB0b3JzIHdoZXJlIGlmIHlvdSBoYWRuJ3QgZGVmaW5lZCBNRUNDIChFQ0Mgc3VwcG9ydCkgeW91IHdvdWxkIGdldCBsaW5rZXIgZXJyb3JzCisgICAgICAtLSBBZGRlZCBSU0EgYWNjZWxlcmF0b3JzIHRvIHRoZSBtYXRoIGRlc2NyaXB0b3JzIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gbm90IGluY2x1ZGUgdGhlIHN0b2NrIHJvdXRpbmVzIGlmIHlvdSBzdXBwbHkgeW91ciBvd24uCisgICAgICAtLSBkc2FfZGVjcnlwdF9rZXkoKSB3YXMgZXJyb25lb3VzbHkgZGVwZW5kZW50IG9uIE1FQ0Mgbm90IE1EU0EgLi4uIHdob29wcworICAgICAgLS0gTW92ZWQgRFNBIHNpemUgbGltaXRzIHRvIHRvbWNyeXB0X3BrLmggc28gdGhleSdyZSBkZWZpbmVkIHdpdGggTFRDX05PX1BLK01EU0EKKyAgICAgIC0tIGNsZWFuZWQgdXAgdG9tY3J5cHRfY3VzdG9tLmggdG8gbWFrZSBjdXN0b21pemFibGUgUEsgZWFzaWVyIChhbmQgYWxzbyBjbGVhbmVkIHVwIHRoZSBlcnJvciB0cmFwcyBzbyB0aGV5J3JlIGNvcnJlY3RseSByZXBvcnRlZCkKKworTm92ZW1iZXIgMTh0aCwgMjAwNQordjEuMDcgLS0gQ3JhaWcgU2NobGVudGVyIHBvaW50ZWQgb3V0IHRoZSAiZW5jcnlwdCIgZGVtbyBkb2Vzbid0IGNhbGwgY3RyX3N0YXJ0KCkgY29ycmVjdGx5LiAgVGhhdCdzIGJlY2F1c2UgYXMgb2YgYSBmZXcgcmVsZWFzZXMgYWdvCisgICAgICAgICBJIGFkZGVkIHN1cHBvcnQgdG8gc2V0IHRoZSBtb2RlIG9mIHRoZSBjb3VudGVyIGF0IGluaXQgdGltZQorICAgICAgLS0gRml4ZWQgc29tZSAidGVzdHByb2YiIG1ha2UgaXNzdWVzCisgICAgICAtLSBBZGRlZCBSU0Ega2V5Z2VuIHRvIHRoZSBtYXRoIGRlc2NyaXB0b3JzCisgICAgICAtLSBGaXhlZCBpbnN0YWxsX3Rlc3QgdGFyZ2V0IC4uLiBvb3BzCisgICAgICAtLSBtYWRlIHRoZSAicmFubGliIiBwcm9ncmFtIHJlbmFtYWJsZSB1c2VmdWwgZm9yIGNyb3NzLWNvbXBpbGluZworICAgICAgLS0gTWFkZSB0aGUgY2lwaGVyIGFjY2VsZXJhdG9ycyByZXR1cm4gZXJyb3IgY29kZXMuICA6LSkKKyAgICAgIC0tIE1hZGUgQ0NNIGFjY2VwdCBhIHByZS1zY2hlZHVsZWQga2V5IHRvIHNwZWVkIGl0IHVwIGlmIHlvdSB1c2UgdGhlIHNhbWUga2V5IGZvciBtdWx0aXBsZSBwYWNrZXRzCisgICAgICAtLSBBZGRlZCAiS2F0amEiIHB1YmxpYyBrZXkgY3J5cHRvLiAgSXQncyBiYXNlZCBvbiB0aGUgcmVjZW50IE4gPSBwXjJxIHdvcmsgYnkgS2F0amEuICBJIGFkZGVkIE9BRVAgcGFkZGluZworICAgICAgICAgdG8gaXQuICBOb3RlIHRoaXMgY29kZSBoYXMgYmVlbiBkaXNhYmxlZCBub3QgYmVjYXVzZSBpdCBkb2Vzbid0IHdvcmsgYnV0IGJlY2F1c2UgaXQgaGFzbid0IGJlZW4gdGhvcm91Z2hseQorICAgICAgICAgYW5hbHl6ZWQuICAgSXQgZG9lcyBjYXJyeSBzb21lIGFkdmFudGFnZXMgb3ZlciBSU0EgKHNsaWdodGx5IHNtYWxsZXIgcHVibGljIGtleSwgZmFzdGVyIGRlY3J5cHQpIGJ1dCBhbHNvCisgICAgICAgICBzb21lIGFubm95aW5nICJzZXR1cCIgaXNzdWVzIGxpa2UgdGhlIHByaW1lcyBhcmUgc21hbGxlciB3aGljaCBtYWtlcyBFQ00gZmFjdG9yaW5nIG1vcmUgcGxhdXNpYmxlLgorICAgICAgLS0gTWFkZSBtYWtlZmlsZSBhY2NlcHQgYSBOT0RPQ1MgZmxhZyB0byBkaXNhYmxlIHRoZSByZXF1aXJlbWVudCBvZiB0ZXRleCB0byBpbnN0YWxsIExUQyBmb3IgeW91IG5vIHRldGV4IHBlb3BsZS4uLiBhbGwgMyBvZiB5YSAgOi0pCisgICAgICAtLSBDbGVhbmVkIHVwIHJzYV9leHBvcnQoKSBzaW5jZSAiemVybyIgd2FzIGhhbmRsZWQgd2l0aCBhIFNIT1JUX0lOVEVHRVIKKyAgICAgIC0tIENsZWFuZWQgdXAgdGhlIExJQlRFU1RfUyBkZWZpbml0aW9ucyBpbiBib3RoIEdOVSBtYWtlZmlsZXMuICBBIGZldyBtaW5vciB0b3VjaHVwcyBhcyB3ZWxsLgorICAgICAgLS0gTWFkZSB0aGUgY2lwaGVyIGVjYiBlbmNyeXB0L2RlY3J5cHQgcmV0dXJuIGFuIGludCBhcyB3ZWxsLCBjaGFuZ2VkIEFMTCBkZXBlbmRlbnQgY29kZSB0byBjaGVjayBmb3IgdGhpcy4gIAorICAgICAgLS0gZGVyX2RlY29kZV9jaG9pY2UoKSB3b3VsZCBmYWlsIHRvIG1hcmsgYSBOVUxMIGFzICJ1c2VkIiB3aGVuIGRlY29kaW5nLiAgRml4ZWQKKyAgICAgIC0tIGVjY19kZWNyeXB0X2tleSgpIG5vdyB1c2VzIGZpbmRfaGFzaF9vaWQoKSB0byBjbGVhbiB1cCB0aGUgY29kZSA7LSkKKyAgICAgIC0tIEFkZGVkIG1wX25lZygpIHRvIHRoZSBtYXRoIGRlc2NyaXB0b3JzLgorICAgICAgLS0gU3dhcHBlZCBhcmd1bWVudHMgZm9yIHRoZSBwa2NzXzFfbWdmMSgpIGZ1bmN0aW9uIHNvIHRoZSBoYXNoX2lkeCBpcyB0aGUgZmlyc3QgcGFyYW0gKHRvIGJlIG1vcmUgY29uc2lzdGVudCkKKyAgICAgIC0tIE1hZGUgdGhlIG1hdGggZGVzY3JpcHRvcnMgYnVpbGRhYmxlIHdoZW4gUlNBIGhhcyBiZWVuIHVuZGVmaW5lZAorICAgICAgLS0gRUNDIHRpbWluZyBkZW1vIG5vdyBjYXBhYmxlIG9mIGRldGVjdGluZyB3aGljaCBjdXJ2ZXMgaGF2ZSBiZWVuIGRlZmluZWQKKyAgICAgIC0tIFJlZmFjdG9yZWQgdGhlIEVDQyBjb2RlIHNvIGl0J3MgZWFzaWVyIHRvIG1haW50YWluLiAgKG5vdGU6IHRoZSBmb3JtIG9mIHRoaXMgY29kZSBoYXNuJ3QgcmVhbGx5IGNoYW5nZWQgc2luY2UgSSBmaXJzdCBhZGRlZCBFQ0MgLi4uIDotLykKKyAgICAgIC0tIFVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gdy5yLnQuIEVDQyBhbmQgdGhlIGFjY2VsZXJhdG9ycyB0byBrZWVwIGl0IGN1cnJlbnQKKyAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBsdGNfaW5pdF9tdWx0aSgpIHdoaWNoIHdvdWxkIGZhaWwgdG8gZnJlZSBhbGwgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvci4KKyAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBlY2NfZGVjcnlwdF9rZXkoKSB3aGljaCBjb3VsZCBwb3NzaWJseSBsZWFkIHRvIG92ZXJmbG93cyAoaWYgTUFYQkxPQ0tTSVpFID4gRUNDX0JVRl9TSVpFIGFuZCB5b3UgaGF2ZSBhIGhhc2ggdGhhdCBlbWl0cyBNQVhCTE9DS1NJWkUgYnl0ZXMpCisgICAgICAtLSBBZGRlZCBlbmNyeXB0L2RlY3J5cHQgdG8gdGhlIERTQSBzaWRlIChiYXNpY2FsbHkgREggd2l0aCBEU0EgcGFyYW1ldGVycykKKyAgICAgIC0tIFVwZGF0ZWQgbWFrZWZpbGVzIHRvIHJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBvbGQgREggb2JqZWN0IGZpbGVzIGFuZCB0aGUgZWNjX3N5cy5vIGNyYXAgLi4uIGNsZWFuIGNvZGUgYWhlYWQhCisgICAgICAtLSBlY2NfaW1wb3J0KCkgbm93IGNoZWNrcyBpZiB0aGUgcG9pbnQgaXQgcmVhZHMgaW4gbGllcyBvbiB0aGUgY3VydmUgKHRvIHByZXZlbnQgZGVnZW5lcmF0aXZlIHBvaW50cyBmcm9tIGJlaW5nIHVzZWQpCisgICAgICAtLSBFQ0MgY29kZSBub3cgQUxXQVlTIHVzZXMgdGhlIGFjY2VsZXJhdG9yIGludGVyZmFjZS4gIFRoaXMgYWxsb3dzIHBlb3BsZSB3aG8gdXNlIHRoZSBhY2NlbGVyYXRvcnMgdG8gbm90IGhhdmUgdGhlIHN0b2NrCisgICAgICAgICBFQ0MgcG9pbnQgYWRkL2RibC9tdWwgY29kZSBsaW5rZWQgaW4uICBZZWFoIHNwYWNlIHNhdmluZ3MhIFJhaCBSYWggUmFoLgorICAgICAgLS0gQWRkZWQgTFRDX01VVEVYXyogc3VwcG9ydCB0byBZYXJyb3cgYW5kIEZvcnR1bmEgYWxsb3dpbmcgeW91IHRvIHVzZSByZXNwZWN0aXZlIHBybmdfc3RhdGUgYXMgYSBnbG9iYWwgUFJORyBzdGF0ZSBbZS5nLiB0aHJlYWQtc2FmZV0gaWYgeW91IGRlZmluZSBvbmUgb2YgdGhlIExUQ18qIGRlZmluZXMgYXQKKyAgICAgICAgIGJ1aWxkIHRpbWUgKGUuZy4gTFRDX1BUSFJFQUQgPT0gcHRocmVhZHMpCisgICAgICAtLSBBZGRlZCBQUEMzMiBzdXBwb3J0IHRvIHRoZSByb3RhdGUgbWFjcm9zICh0ZXN0ZWQgb24gYW4gSUJNIFBQQyA0MDUpIGFuZCBMVENfRkFTVCBtYWNyb3MgKGl0IGFpbnQgZmFzdCBidXQgaXQncyBmYXN0ZXIgdGhhbiBzdG9jaykKKyAgICAgIC0tIEFkZGVkIGx0Y19tcCBjaGVja3MgaW4gYWxsICpfbWFrZV9rZXkoKSBhbmQgKl9pbXBvcnQoKSB3aGljaCB3aWxsIGhlbHAgY2F0Y2ggbmV3YnMgd2hvIGRvbid0IHJlZ2lzdGVyIHRoZWlyIGJpZ251bSBmaXJzdCA6LSkKKyAgICAgIC0tIHRoZSBVVENUSU1FIHR5cGUgd2FzIG1pc3NpbmcgZnJvbSBkZXJfbGVuZ3RoX3NlcXVlbmNlKCkgW29vcHMsIG9oIGxpa2UgeW91J3ZlIG5ldmVyIGRvbmUgdGhhdF0KKyAgICAgIC0tIHRoZSBtYWluIG1ha2VmaWxlIGFsbG93cyB5b3UgdG8gcmVuYW1lIHRoZSBtYWtlIGNvbW1hbmQgW2UuZy4gTUFLRT1nbWFrZSBnbWFrZSBpbnN0YWxsXSBzbyB5b3UgY2FuIGJ1aWxkIExUQyBvbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGRlZmF1bHQgbWFrZSBjb21tYW5kIHN1Y2tzIFtlLmcuIEJTRF0KKyAgICAgIC0tIEFkZGVkIERFUiBmbGV4aSBkZWNvZGVyIHdoaWNoIGFsbG93cyB0aGUgZGVjb2Rpbmcgb2YgYXJiaXRyYXJ5IERFUiBlbmNvZGVkIHBhY2tldHMgd2l0aG91dCBrbm93aW5nCisgICAgICAgICB0aGVpciBzdHJ1Y3R1cmUgaW4gYWR2YW5jZSAodGhhbmtzIHRvIE1TVkMgZm9yIGZpbmRpbmcgMyBidWdzIGluIGl0IGp1c3QgcHJpb3IgdG8gcmVsZWFzZSEgLi4uIGRvbid0IGFzaykKKworQXVndXN0IDFzdCwgMjAwNQordjEuMDYgLS0gRml4ZWQgcmFuZF9wcmltZSgpIHRvIGFjY2VwdCBuZWdhdGl2ZSBpbnB1dHMgYXMgYSBzaWduYWwgZm9yIEJCUyBwcmltZXMuIFtGcmVkcmlrIE9sc3Nvbl0KKyAgICAgIC0tIEFkZGVkIGZvdXJ0aCBBUkdDSEsgdHlwZSB3aGljaCBvdXRwdXRzIHRvIHN0ZGVyciBhbmQgY29udGludWVzLiAgVXNlZnVsIGlmIHlvdSB0cmFwIHNpZ3NlZ3YuICAgW1ZhbGllbnQgR291Z2hdCisgICAgICAtLSBSZW1vdmVkIHRoZSBESCBjb2RlIGZyb20gdGhlIHRyZWUKKyAgICAgIC0tIE1hZGUgdGhlIEVDQyBjb2RlIGZ1bGx5IHB1YmxpYyAoeW91IGNhbiBhY2Nlc3MgZWNjX211bG1vZCBkaXJlY3RseSBub3cpIHVzZWZ1bCBmb3IgZGVidWdpbmcKKyAgICAgIC0tIEFkZGVkIGVjYyB0ZXN0IHRvIHR2X2dlbgorICAgICAgLS0gQWRkZWQgaG1hYyBjYWxsYmFjayB0byBoYXNoIGRlc2NyaXB0b3JzLgorICAgICAgLS0gRml4ZWQgdHdvIGRveHkgY29tbWVudCBlcnJvcnMgaW4gdGhlIFVUQ1RJTUUgZnVuY3Rpb25zCisgICAgICAtLSByc2FfaW1wb3J0KCkgY2FuIG5vdyByZWFkIE9wZW5TU0wgZm9ybWF0IERFUiBwdWJsaWMga2V5cyBhcyB3ZWxsIGFzIHRoZSBQS0NTICMxIFJTQVB1YmxpY0tleSBmb3JtYXQuCisgICAgICAgICBOb3RlIHRoYXQgcnNhX2V4cG9ydCgpICAqKk9OTFkqKiB3cml0ZXMgUEtDUyAjMSBmb3JtYXRzCisgICAgICAtLSBDaGFuZ2VkIE1JTi9NQVggdG8gb25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkgcHJlc2VudC4gIC0tIEtpcmsgSiBmcm9tIERlbW9ud2FyZSAuLi4gCisgICAgICAtLSBQb3J0ZWQgdHZfZ2VuIHRvIG5ldyBmcmFtZXdvcmsgKGFuZCB5ZXMsIEkgbWFkZSBlY2MgdmVjdG9ycyBCRUZPUkUgY2hhbmdpbmcgdGhlIEFQSSBhbmQgWUVTIHRoZXkgbWF0Y2ggbm93IDotKSkKKyAgICAgIC0tIHBvcnRlZCB0ZXN0aW5nIHNjcmlwdHMgdG8gc3VwcG9ydCBwbHVnZ2FibGUgbWF0aC4gIHlpcGVlIQorICAgICAgLS0gV3JvdGUgYSBURk0gZGVzY3JpcHRvciAuLi4geWlwZWUKKyAgICAgIC0tIENsZWFuZWQgdXAgTFRDX0ZBU1QgaW4gQ0JDIG1vZGUgYSBiaXQgCisgICAgICAtLSBNZXJnZWQgaW4gcGF0Y2hlcyBmcm9tIE1pY2hhZWwgQnJvd24gZm9yIHRoZSBzcGFyYy9zcGFyYzY0IHRhcmdldHMKKyAgICAgIC0tIEFkZGVkIGZpbmRfaGFzaF9vaWQoKSB0byBzZWFyY2ggZm9yIGEgaGFzaCBieSBpdHMgT0lECisgICAgICAtLSBDbGVhbmVkIHVwIGEgZmV3IHN0cmF5IENMRUFOX1NUQUNLcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gTFRDX0NMRUFOX1NUQUNLCisgICAgICAtLSBBZGRlZCB0aW1pbmcgcmVzaXN0YW50IEVDQywgZW5hYmxlIGJ5IGRlZmluaW5nIExUQ19FQ0NfVElNSU5HX1JFU0lTVEFOVCB0aGVuIHVzZSBFQ0MgQVBJIGFzIG5vcm1hbCAKKyAgICAgIC0tIFVwZGF0ZWQgdGhlIEVDQyBkb2N1bWVudGF0aW9uIGFzIGl0IHdhcyBhIGJpdCBvdXQgb2YgZGF0ZQorCiBKdW5lIDI3dGgsIDIwMDUKIHYxLjA1CiAgICAgICAtLSBBZGRlZCBUZWNobm90ZSAjNiB3aGljaCBjb3ZlcnMgdGhlIGN1cnJlbnQgUEsgY29tcGxpYW5jZS4gIApAQCAtMjEzLDcgKzQ0Myw3IEBACiB2MC45OSAgLS0gTWVyZ2VkIGluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBMVE0gd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSByZWNlbnQgYnVnIGZpeGVzCiAgICAgICAgLS0gRGVwcmVjYXRlZCBMVE1TU0UgYW5kIHJlbW92ZWQgaXQgKHRvIGJlIHJlcGxhY2VkIHdpdGggVEZNIGxhdGVyIG9uKQogICAgICAgIC0tIFN0ZWZhbiBBcmVudHogcG9pbnRlZCBvdXQgdGhhdCBtcF9zX3JtYXAgc2hvdWxkIGJlIGV4dGVybgotICAgICAgIC0tIEtyaXN0aWFuIEdq+HN0ZWVuIHBvaW50ZWQgb3V0IHRoYXQgdGhlcmUgYXJlIHR5cG9zIGluIHRoZSAKKyAgICAgICAtLSBLcmlzdGlhbiBHaj9zdGVlbiBwb2ludGVkIG91dCB0aGF0IHRoZXJlIGFyZSB0eXBvcyBpbiB0aGUgCiAgICAgICAgICAgInRlc3QiIG1ha2VmaWxlIGFuZCBtaW5vciBpc3N1ZXMgaW4gWWFycm93IGFuZCBTb2JlciBbanVzdCBjb3NtZXRpY3MgcmVhbGx5XQogICAgICAgIC0tIE1hdHRoZXcgUC4gQ2FzaGRvbGxhciBwb2ludGVkIG91dCB0aGF0ICJleHBvcnQiIGlzIGEgQysrIGtleXdvcmQgCiAgICAgICAgICAgc28gY2hhbmdlZCB0aGUgUFJORyBhcGkgdG8gdXNlICJwZXhwb3J0IiBhbmQgInBpbXBvcnQiCkBAIC01OTIsNyArODIyLDcgQEAKICAgICAgICAgICBhcyBtdWNoIGFzIHBvc3NpYmxlLiAgVGhpcyBzcGVkIHRoZSByb3V0aW5lIHVwIHF1aXRlIGEgYml0LgogICAgICAgIC0tIEZpeGVkIGEgaHVnZSBmbGF3IGluIGVjY192ZXJpZnlfaGFzaCgpIHdoZXJlIGl0IHdvdWxkIHJldHVybiBDUllQVF9PSyBvbiBlcnJvci4uLiBOb3cgZml4ZWQuCiAgICAgICAgLS0gRml4ZWQgdXAgY29uZmlnLnBsIGJ5IGZpeGluZyBhbiBpbnZhbGlkIHF1ZXJ5IGFuZCB0aGUgZmlsZSBpcyBzYXZlZCBpbiBub24td2luZG93cyBbZS5nLiBub3QgQ1IvTEZdIGZvcm1hdAotICAgICAgICAgIChmaXggZHVlIHRvIE1pa2EgQm9zdHL2bSkKKyAgICAgICAgICAoZml4IGR1ZSB0byBNaWthIEJvc3RyP20pCiAgICAgICAgLS0gTWVyZ2VkIGluIExpYlRvbU1hdGggZm9yIGtpY2tzCiAgICAgICAgLS0gQ2hhbmdlZCB0aGUgYnVpbGQgcHJvY2VzcyBzbyB0aGF0IGJ5IGRlZmF1bHQgIm15Y3J5cHRfY3VzdG9tLmgiIGlzIGluY2x1ZGVkIGFuZCBwcm92aWRlZAogICAgICAgICAgIFRoZSBtYWtlZmlsZSBkb2Vzbid0IGluY2x1ZGUgYW55IGJ1aWxkIG9wdGlvbnMgYW55bW9yZQpAQCAtMTMyMSw2ICsxNTUxLDYgQEAKIHYwLjAxICAtLSBXZSB3aWxsIGNhbGwgdGhpcyB0aGUgZmlyc3QgdmVyc2lvbi4KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvY2hhbmdlcyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xMDYgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMjcgMTI6Mzc6MDYgJCAqLworLyogJFJldmlzaW9uOiAxLjI3NCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8xNiAxOTowODoxNyAkICovCiAKZGlmZiAtLWdpdCBhL2NyeXB0LmxvZiBiL2NyeXB0LmxvZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjFhMmZiCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHQubG9mCkBAIC0wLDAgKzEsMjQgQEAKK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezIuMX17XGlnbm9yZXNwYWNlcyBMb2FkIEFuZCBTdG9yZSBNYWNyb3N9fXs5fXtmaWd1cmUuMi4xfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7Mi4yfXtcaWdub3Jlc3BhY2VzIFJvdGF0ZSBNYWNyb3N9fXs5fXtmaWd1cmUuMi4yfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7My4xfXtcaWdub3Jlc3BhY2VzIEJ1aWx0LS1JbiBTb2Z0d2FyZSBDaXBoZXJzfX17MTl9e2ZpZ3VyZS4zLjF9CitcY29udGVudHNsaW5lIHtmaWd1cmV9e1xudW1iZXJsaW5lIHszLjJ9e1xpZ25vcmVzcGFjZXMgVHdvZmlzaCBCdWlsZCBPcHRpb25zfX17MjF9e2ZpZ3VyZS4zLjJ9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcY29udGVudHNsaW5lIHtmaWd1cmV9e1xudW1iZXJsaW5lIHs0LjF9e1xpZ25vcmVzcGFjZXMgQnVpbHQtLUluIFNvZnR3YXJlIEhhc2hlc319ezU3fXtmaWd1cmUuNC4xfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7Ni4xfXtcaWdub3Jlc3BhY2VzIExpc3Qgb2YgUHJvdmlkZWQgUFJOR3N9fXs4Mn17ZmlndXJlLjYuMX0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezkuMX17XGlnbm9yZXNwYWNlcyBEU0EgS2V5IFNpemVzfX17MTE5fXtmaWd1cmUuOS4xfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7MTAuMX17XGlnbm9yZXNwYWNlcyBMaXN0IG9mIEFTTi4xIFN1cHBvcnRlZCBUeXBlc319ezEyN317ZmlndXJlLjEwLjF9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcY29udGVudHNsaW5lIHtmaWd1cmV9e1xudW1iZXJsaW5lIHsxMi4xfXtcaWdub3Jlc3BhY2VzIFJTQS9ESCBLZXkgU3RyZW5ndGh9fXsxNDl9e2ZpZ3VyZS4xMi4xfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7MTIuMn17XGlnbm9yZXNwYWNlcyBFQ0MgS2V5IFN0cmVuZ3RofX17MTQ5fXtmaWd1cmUuMTIuMn0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xhZGR2c3BhY2UgezEwXHBAIH0KZGlmZiAtLWdpdCBhL2NyeXB0LnRleCBiL2NyeXB0LnRleAppbmRleCBjZjFjMzdlLi4wZDM3NGY3IDEwMDY0NAotLS0gYS9jcnlwdC50ZXgKKysrIGIvY3J5cHQudGV4CkBAIC0xLDQgKzEsNSBAQAotXGRvY3VtZW50Y2xhc3NbYTRwYXBlcl17Ym9va30KK1xkb2N1bWVudGNsYXNzW3N5bnBhcGVyXXtib29rfQorXHVzZXBhY2thZ2VbZHZpcHNde2dlb21ldHJ5fQogXHVzZXBhY2thZ2V7aHlwZXJyZWZ9CiBcdXNlcGFja2FnZXttYWtlaWR4fQogXHVzZXBhY2thZ2V7YW1zc3ltYn0KQEAgLTYsNiArNyw3IEBACiBcdXNlcGFja2FnZXthbGx0dH0KIFx1c2VwYWNrYWdle2dyYXBoaWN4fQogXHVzZXBhY2thZ2V7bGF5b3V0fQorXHVzZXBhY2thZ2V7ZmFuY3loZHJ9CiBcZGVmXHVuaW9ue1xjdXB9CiBcZGVmXGludGVyc2VjdHtcY2FwfQogXGRlZlxnZXRzcmFuZG9te1xzdGFja3JlbHtccm0gUn17XGdldHN9fQpAQCAtMjksNyArMzEsNyBAQAogXGRlZlxBbmR7e1xybVwgYW5kXCB9fQogXGRlZlxpZmZ7XGhzcGFjZXsxZW19XExvbmdsZWZ0cmlnaHRhcnJvd1xoc3BhY2V7MWVtfX0KIFxkZWZcaW1wbGllc3tcUmlnaHRhcnJvd30KLVxkZWZcdW5kZWZpbmVke3tccm0gYGB1bmRlZmluZWQifX0KK1xkZWZcdW5kZWZpbmVke3tccm0gXHRleHRpdHt1bmRlZmluZWR9fX0KIFxkZWZcUHJvb2Z7XHZzcGFjZXsxZXh9XG5vaW5kZW50IHtcYmYgUHJvb2Y6fVxoc3BhY2V7MWVtfX0KIFxsZXRcb2xkcGhpXHBoaQogXGRlZlxwaGl7XHZhcnBoaX0KQEAgLTQxLDYzICs0Myw5NyBAQAogXGRlZlxSe3tcbWF0aGJiIFJ9fQogXGRlZlxDe3tcbWF0aGJiIEN9fQogXGRlZlxRe3tcbWF0aGJiIFF9fQotCitcZGVmaW5lY29sb3J7REdyYXl9e2dyYXl9ezAuNX0KK1xuZXdjb21tYW5ke1xlbWFpbGFkZHJ9WzFde1xtYm94eyQ8JHsjMX0kPiR9fQogXGRlZlx0d2lkZGxle1xyYWlzZWJveHswLjNleH17XG1ib3h7XHRpbnkgJFxzaW0kfX19Ci0KIFxkZWZcZ2Fwe1x2c3BhY2V7MC41ZXh9fQogXG1ha2VpbmRleAorXG5ld2NvbW1hbmR7XG15c2VjdGlvbn1bMV0gICAgJSBSZS1kZWZpbmUgdGhlIGNoYXB0ZXJpbmcgY29tbWFuZCB0byB1c2UKKwl7ICAgICAgICAgICAgICAgICAgICUgVEhFU0UgaGVhZGVycy4KKwlcc2VjdGlvbnsjMX0KKyAgIFxtYXJrYm90aHtcdGV4dHNme3d3dy5saWJ0b20ub3JnfX17XHRoZXNlY3Rpb24gfiB7IzF9fQorCX0KKworXG5ld2NvbW1hbmR7XG15c3RhcnNlY3Rpb259WzFdICAgICUgUmUtZGVmaW5lIHRoZSBjaGFwdGVyaW5nIGNvbW1hbmQgdG8gdXNlCisJeyAgICAgICAgICAgICAgICAgICAlIFRIRVNFIGhlYWRlcnMuCisJXHNlY3Rpb24qeyMxfQorICAgXG1hcmtib3Roe1x0ZXh0c2Z7d3d3LmxpYnRvbS5vcmd9fXt7IzF9fQorCX0KK1xwYWdlc3R5bGV7ZW1wdHl9CiBcYmVnaW57ZG9jdW1lbnR9Ci1cdGl0bGV7TGliVG9tQ3J5cHQgXFwgVmVyc2lvbiAxLjA1fQotXGF1dGhvcntUb20gU3QgRGVuaXMgXFwKLVxcCi10b21zdGRlbmlzQGdtYWlsLmNvbSBcXAotaHR0cDovL2xpYnRvbWNyeXB0Lm9yZwotfQotXG1ha2V0aXRsZQotVGhpcyB0ZXh0IGFuZCBzb3VyY2UgY29kZSBsaWJyYXJ5IGFyZSBib3RoIGhlcmVieSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uICBUaGlzIGJvb2sgaGFzIGJlZW4gCi1mb3JtYXR0ZWQgZm9yIEE0IHBhcGVyIHVzaW5nIHRoZSBcTGFUZVh7fSB7XGVtIGJvb2t9IG1hY3JvIHBhY2thZ2UuCitcZnJvbnRtYXR0ZXIKK1xwYWdlc3R5bGV7ZW1wdHl9CiAKLVx2c3BhY2V7MTVjbX0KK34KIAotXGJlZ2lue2ZsdXNocmlnaHR9T3BlbiBTb3VyY2UuICBPcGVuIEFjYWRlbWlhLiAgT3BlbiBNaW5kcy4KK1x2c3BhY2V7MmlufQogCi1cbWJveHsgfQorfgogCi1Ub20gU3QgRGVuaXMsCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue0h1Z2V9TGliVG9tQ3J5cHRcZW5ke0h1Z2V9CiAKLVBob25lOiAxLTYxMy04MzYtMzE2MAorfgogCi0xMTEgQmFubmluZyBSZCAKK1xiZWdpbntsYXJnZX1EZXZlbG9wZXIgTWFudWFsXGVuZHtsYXJnZX0KIAotS2FuYXRhLCBPbnRhcmlvIAorfgogCi1LMkwgMUMzIAorXHZzcGFjZXsxNW1tfQorCisKK1xiZWdpbnt0YWJ1bGFyfXtjfQorVG9tIFN0IERlbmlzIFxcCitMaWJUb20gUHJvamVjdHMKK1xlbmR7dGFidWxhcn0KK1xlbmR7Y2VudGVyfQorXHZmaWwKK1xuZXdwYWdlCitUaGlzIGRvY3VtZW50IGlzIHBhcnQgb2YgdGhlIExpYlRvbUNyeXB0IHBhY2thZ2UgYW5kIGlzIGhlcmVieSByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorCit+CisKK09wZW4gU291cmNlLiAgT3BlbiBBY2FkZW1pYS4gIE9wZW4gTWluZHMuCisKK34KKworXGJlZ2lue2ZsdXNocmlnaHR9CitUb20gU3QgRGVuaXMKK34KKworT3R0YXdhLCBPbnRhcmlvCit+CiAKIENhbmFkYQorfgorXHZmaWwKIFxlbmR7Zmx1c2hyaWdodH0KIFxuZXdwYWdlCi1cdGFibGVvZmNvbnRlbnRzCi1cY2hhcHRlcntJbnRyb2R1Y3Rpb259Ci1cc2VjdGlvbntXaGF0IGlzIHRoZSBMaWJUb21DcnlwdD99Ci1MaWJUb21DcnlwdCBpcyBhIHBvcnRhYmxlIElTTyBDIGNyeXB0b2dyYXBoaWMgbGlicmFyeSB0aGF0IGlzIG1lYW50IHRvIGJlIGEgdG9vbHNldCBmb3IgY3J5cHRvZ3JhcGhlcnMgd2hvIGFyZSAKLWRlc2lnbmluZyBhIGNyeXB0b3N5c3RlbS4gIEl0IHN1cHBvcnRzIHN5bW1ldHJpYyBjaXBoZXJzLCBvbmUtd2F5IGhhc2hlcywgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycywgCi1wdWJsaWMga2V5IGNyeXB0b2dyYXBoeSAodmlhIFBLQ1MgXCMxIFJTQSwgREggb3IgRUNDREgpIGFuZCBhIHBsZXRob3JhIG9mIHN1cHBvcnQgCi1yb3V0aW5lcy4gIAogCi1UaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgc3VjaCB0aGF0IG5ldyBjaXBoZXJzL2hhc2hlcy9QUk5HcyBjYW4gYmUgYWRkZWQgYXQgcnVudGltZSBhbmQgdGhlIGV4aXN0aW5nIEFQSSAKK1x0YWJsZW9mY29udGVudHMKK1xsaXN0b2ZmaWd1cmVzCitccGFnZXN0eWxle215aGVhZGluZ3N9CitcbWFpbm1hdHRlcgorXGNoYXB0ZXJ7SW50cm9kdWN0aW9ufQorXG15c2VjdGlvbntXaGF0IGlzIHRoZSBMaWJUb21DcnlwdD99CitMaWJUb21DcnlwdCBpcyBhIHBvcnRhYmxlIElTTyBDIGNyeXB0b2dyYXBoaWMgbGlicmFyeSBtZWFudCB0byBiZSBhIHRvb2wgc2V0IGZvciBjcnlwdG9ncmFwaGVycyB3aG8gYXJlIAorZGVzaWduaW5nIGNyeXB0b3N5c3RlbXMuICBJdCBzdXBwb3J0cyBzeW1tZXRyaWMgY2lwaGVycywgb25lLXdheSBoYXNoZXMsIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMsIAorcHVibGljIGtleSBjcnlwdG9ncmFwaHkgKHZpYSBQS0NTIFwjMSBSU0EsIERIIG9yIEVDQ0RIKSwgYW5kIGEgcGxldGhvcmEgb2Ygc3VwcG9ydCByb3V0aW5lcy4gIAorCitUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgc3VjaCB0aGF0IG5ldyBjaXBoZXJzL2hhc2hlcy9QUk5HcyBjYW4gYmUgYWRkZWQgYXQgcnVuLXRpbWUgYW5kIHRoZSBleGlzdGluZyBBUEkgCiAoYW5kIGhlbHBlciBBUEkgZnVuY3Rpb25zKSBhcmUgYWJsZSB0byB1c2UgdGhlIG5ldyBkZXNpZ25zIGF1dG9tYXRpY2FsbHkuICBUaGVyZSBleGlzdHMgc2VsZi1jaGVjayBmdW5jdGlvbnMgZm9yIGVhY2ggCiBibG9jayBjaXBoZXIgYW5kIGhhc2ggZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgdGhleSBjb21waWxlIGFuZCBleGVjdXRlIHRvIHRoZSBwdWJsaXNoZWQgZGVzaWduIHNwZWNpZmljYXRpb25zLiAgVGhlIGxpYnJhcnkgCi1hbHNvIHBlcmZvcm1zIGV4dGVuc2l2ZSBwYXJhbWV0ZXIgZXJyb3IgY2hlY2tpbmcgdG8gcHJldmVudCBhbnkgbnVtYmVyIG9mIHJ1bnRpbWUgZXhwbG9pdHMgb3IgZXJyb3JzLgorYWxzbyBwZXJmb3JtcyBleHRlbnNpdmUgcGFyYW1ldGVyIGVycm9yIGNoZWNraW5nIHRvIHByZXZlbnQgYW55IG51bWJlciBvZiBydW4tdGltZSBleHBsb2l0cyBvciBlcnJvcnMuCiAKIFxzdWJzZWN0aW9ue1doYXQgdGhlIGxpYnJhcnkgSVMgZm9yP30KIAogVGhlIGxpYnJhcnkgc2VydmVzIGFzIGEgdG9vbGtpdCBmb3IgZGV2ZWxvcGVycyB3aG8gaGF2ZSB0byBzb2x2ZSBjcnlwdG9ncmFwaGljIHByb2JsZW1zLiAgT3V0IG9mIHRoZSBib3ggTGliVG9tQ3J5cHQKLWRvZXMgbm90IHByb2Nlc3MgU1NMIG9yIE9wZW5QR1AgbWVzc2FnZXMsIGl0IGRvZXNuJ3QgcmVhZCB4LjU5MSBjZXJ0aWZpY2F0ZXMgb3Igd3JpdGUgUEVNIGVuY29kZWQgZGF0YS4gIEl0IGRvZXMsIGhvd2V2ZXIsCitkb2VzIG5vdCBwcm9jZXNzIFNTTCBvciBPcGVuUEdQIG1lc3NhZ2VzLCBpdCBkb2Vzbid0IHJlYWQgWC41MDkgY2VydGlmaWNhdGVzLCBvciB3cml0ZSBQRU0gZW5jb2RlZCBkYXRhLiAgSXQgZG9lcywgaG93ZXZlciwKIHByb3ZpZGUgYWxsIG9mIHRoZSB0b29scyByZXF1aXJlZCB0byBidWlsZCBzdWNoIGZ1bmN0aW9uYWxpdHkuICBMaWJUb21DcnlwdCB3YXMgZGVzaWduZWQgdG8gYmUgYSBmbGV4aWJsZSBsaWJyYXJ5IHRoYXQgCiB3YXMgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgY3J5cHRvZ3JhcGhpYyBwcm9ibGVtLiAgCiAKLVxzZWN0aW9ue1doeSBkaWQgSSB3cml0ZSBpdD99Ci1Zb3UgbWF5IGJlIHdvbmRlcmluZywgYGBUb20sIHdoeSBkaWQgeW91IHdyaXRlIGEgY3J5cHRvIGxpYnJhcnkuICBJIGFscmVhZHkgaGF2ZSBvbmUuJycuICBXZWxsIHRoZSByZWFzb24gZmFsbHMgaW50bworXG15c2VjdGlvbntXaHkgZGlkIEkgd3JpdGUgaXQ/fQorWW91IG1heSBiZSB3b25kZXJpbmcsIFx0ZXh0aXR7VG9tLCB3aHkgZGlkIHlvdSB3cml0ZSBhIGNyeXB0byBsaWJyYXJ5LiAgSSBhbHJlYWR5IGhhdmUgb25lLn0gIFdlbGwgdGhlIHJlYXNvbiBmYWxscyBpbnRvCiB0d28gY2F0ZWdvcmllczoKIFxiZWdpbntlbnVtZXJhdGV9CiAgICAgXGl0ZW0gSSBhbSB0b28gbGF6eSB0byBmaWd1cmUgb3V0IHNvbWVvbmUgZWxzZSdzIEFQSS4gIEknZCByYXRoZXIgaW52ZW50IG15IG93biBzaW1wbGVyIEFQSSBhbmQgdXNlIHRoYXQuCkBAIC0xMDcsMjcgKzE0MywyNyBAQAogVGhlIGlkZWEgaXMgdGhhdCBJIGFtIG5vdCBzdHJpdmluZyB0byByZXBsYWNlIE9wZW5TU0wgb3IgQ3J5cHRvKysgb3IgQ3J5cHRsaWIgb3IgZXRjLiAgSSdtIHRyeWluZyB0byB3cml0ZSBteSAKIHtcYmYgb3dufSBjcnlwdG8gbGlicmFyeSBhbmQgaG9wZWZ1bGx5IGFsb25nIHRoZSB3YXkgb3RoZXJzIHdpbGwgYXBwcmVjaWF0ZSB0aGUgd29yay4KIAotV2l0aCB0aGlzIGxpYnJhcnkgYWxsIGNvcmUgZnVuY3Rpb25zIChjaXBoZXJzLCBoYXNoZXMsIHBybmdzKSBoYXZlIHRoZSB7XGJmIGV4YWN0fSBzYW1lIHByb3RvdHlwZSBkZWZpbml0aW9uLiAgVGhleSBhbGwgbG9hZAorV2l0aCB0aGlzIGxpYnJhcnkgYWxsIGNvcmUgZnVuY3Rpb25zIChjaXBoZXJzLCBoYXNoZXMsIHBybmdzLCBhbmQgYmlnbnVtKSBoYXZlIHRoZSBzYW1lIHByb3RvdHlwZSBkZWZpbml0aW9uLiAgVGhleSBhbGwgbG9hZAogYW5kIHN0b3JlIGRhdGEgaW4gYSBmb3JtYXQgaW5kZXBlbmRlbnQgb2YgdGhlIHBsYXRmb3JtLiAgVGhpcyBtZWFucyBpZiB5b3UgZW5jcnlwdCB3aXRoIEJsb3dmaXNoIG9uIGEgUFBDIGl0IHNob3VsZCBkZWNyeXB0Ci1vbiBhbiB4ODYgd2l0aCB6ZXJvIHByb2JsZW1zLiAgVGhlIGNvbnNpc3RlbnQgQVBJIGFsc28gbWVhbnMgdGhhdCBpZiB5b3UgbGVhcm4gaG93IHRvIHVzZSBCbG93ZmlzaCB3aXRoIG15IGxpYnJhcnkgeW91IAota25vdyBob3cgdG8gdXNlIFNhZmVyKyBvciBSQzYgb3IgU2VycGVudCBvciAuLi4gYXMgd2VsbC4gIFdpdGggYWxsIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGVyZSBhcmUgY2VudHJhbCBkZXNjcmlwdG9yIHRhYmxlcyAKLXRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIHByb2dyYW0gYXV0b21hdGljYWxseSBwaWNrIGJldHdlZW4gY2lwaGVycywgaGFzaGVzIGFuZCBQUk5HcyBhdCBydW50aW1lLiAgVGhhdCBtZWFucyB5b3VyIAotYXBwbGljYXRpb24gY2FuIHN1cHBvcnQgYWxsIGNpcGhlcnMvaGFzaGVzL3BybmdzIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNvdXJjZSBjb2RlLgorb24gYW4geDg2IHdpdGggemVybyBwcm9ibGVtcy4gIFRoZSBjb25zaXN0ZW50IEFQSSBhbHNvIG1lYW5zIHRoYXQgaWYgeW91IGxlYXJuIGhvdyB0byB1c2UgQmxvd2Zpc2ggd2l0aCB0aGUgbGlicmFyeSB5b3UgCitrbm93IGhvdyB0byB1c2UgU2FmZXIrLCBSQzYsIG9yIFNlcnBlbnQgYXMgd2VsbC4gIFdpdGggYWxsIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGVyZSBhcmUgY2VudHJhbCBkZXNjcmlwdG9yIHRhYmxlcyAKK3RoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIHByb2dyYW0gYXV0b21hdGljYWxseSBwaWNrIGJldHdlZW4gY2lwaGVycywgaGFzaGVzIGFuZCBQUk5HcyBhdCBydW4tdGltZS4gIFRoYXQgbWVhbnMgeW91ciAKK2FwcGxpY2F0aW9uIGNhbiBzdXBwb3J0IGFsbCBjaXBoZXJzL2hhc2hlcy9wcm5ncy9iaWdudW0gd2l0aG91dCBjaGFuZ2luZyB0aGUgc291cmNlIGNvZGUuCiAKLU5vdCBvbmx5IGRpZCBJIHN0cml2ZSB0byBtYWtlIGEgY29uc2lzdGVudCBhbmQgc2ltcGxlIEFQSSB0byB3b3JrIHdpdGggYnV0IEkgYWxzbyBzdHJpdmVkIHRvIG1ha2UgdGhlIGxpYnJhcnkKK05vdCBvbmx5IGRpZCBJIHN0cml2ZSB0byBtYWtlIGEgY29uc2lzdGVudCBhbmQgc2ltcGxlIEFQSSB0byB3b3JrIHdpdGggYnV0IEkgYWxzbyBhdHRlbXB0ZWQgdG8gbWFrZSB0aGUgbGlicmFyeQogY29uZmlndXJhYmxlIGluIHRlcm1zIG9mIGl0cyBidWlsZCBvcHRpb25zLiAgT3V0IG9mIHRoZSBib3ggdGhlIGxpYnJhcnkgd2lsbCBidWlsZCB3aXRoIGFueSBtb2Rlcm4gdmVyc2lvbiBvZiBHQ0MKIHdpdGhvdXQgaGF2aW5nIHRvIHVzZSBjb25maWd1cmUgc2NyaXB0cy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSB3aWxsIHdvcmsgd2l0aCBwbGF0Zm9ybXMgd2hlcmUgZGV2ZWxvcG1lbnQKIHRvb2xzIG1heSBiZSBsaW1pdGVkIChlLmcuIG5vIGF1dG9jb25mKS4KIAotT24gdG9wIG9mIG1ha2luZyB0aGUgYnVpbGQgc2ltcGxlIGFuZCB0aGUgQVBJIGFwcHJvYWNoYWJsZSBJJ3ZlIGFsc28gc3RyaXZlZCBmb3IgYSByZWFzb25hYmx5IGhpZ2ggbGV2ZWwgb2YKK09uIHRvcCBvZiBtYWtpbmcgdGhlIGJ1aWxkIHNpbXBsZSBhbmQgdGhlIEFQSSBhcHByb2FjaGFibGUgSSd2ZSBhbHNvIGF0dGVtcHRlZCBmb3IgYSByZWFzb25hYmx5IGhpZ2ggbGV2ZWwgb2YKIHJvYnVzdG5lc3MgYW5kIGVmZmljaWVuY3kuICBMaWJUb21DcnlwdCB0cmFwcyBhbmQgcmV0dXJucyBhIHNlcmllcyBvZiBlcnJvcnMgcmFuZ2luZyBmcm9tIGludmFsaWQKIGFyZ3VtZW50cyB0byBidWZmZXIgb3ZlcmZsb3dzL292ZXJydW5zLiAgSXQgaXMgbW9zdGx5IHRocmVhZCBzYWZlIGFuZCBoYXMgYmVlbiBjbG9ja2VkIG9uIHZhcmlvdXMgcGxhdGZvcm1zCi13aXRoIGBgY3ljbGVzIHBlciBieXRlJycgdGltaW5ncyB0aGF0IGFyZSBjb21wYXJhYmxlIChhbmQgb2Z0ZW4gZmF2b3VyYWJsZSkgdG8gb3RoZXIgbGlicmFyaWVzIHN1Y2ggYXMgT3BlblNTTCBhbmQKK3dpdGggXHRleHRpdHtjeWNsZXMgcGVyIGJ5dGV9IHRpbWluZ3MgdGhhdCBhcmUgY29tcGFyYWJsZSAoYW5kIG9mdGVuIGZhdm91cmFibGUpIHRvIG90aGVyIGxpYnJhcmllcyBzdWNoIGFzIE9wZW5TU0wgYW5kCiBDcnlwdG8rKy4KIAogXHN1YnNlY3Rpb257TW9kdWxhcn0KLVRoZSBMaWJUb21DcnlwdCBwYWNrYWdlIGhhcyBhbHNvIGJlZW4gd3JpdHRlbiB0byBiZSB2ZXJ5IG1vZHVsYXIuICBUaGUgYmxvY2sgY2lwaGVycywgb25lLS13YXkgaGFzaGVzIGFuZAotcHNldWRvLS1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgKFBSTkcpIGFyZSBhbGwgdXNlZCB3aXRoaW4gdGhlIEFQSSB0aHJvdWdoIGBgZGVzY3JpcHRvcicnIHRhYmxlcyB3aGljaCAKK1RoZSBMaWJUb21DcnlwdCBwYWNrYWdlIGhhcyBhbHNvIGJlZW4gd3JpdHRlbiB0byBiZSB2ZXJ5IG1vZHVsYXIuICBUaGUgYmxvY2sgY2lwaGVycywgb25lLS13YXkgaGFzaGVzLAorcHNldWRvLS1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgKFBSTkcpLCBhbmQgYmlnbnVtIG1hdGggcm91dGluZXMgYXJlIGFsbCB1c2VkIHdpdGhpbiB0aGUgQVBJIHRocm91Z2ggXHRleHRpdHtkZXNjcmlwdG9yfSB0YWJsZXMgd2hpY2ggCiBhcmUgZXNzZW50aWFsbHkgc3RydWN0dXJlcyB3aXRoIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucy4gIFdoaWxlIHlvdSBjYW4gc3RpbGwgY2FsbCBwYXJ0aWN1bGFyIGZ1bmN0aW9ucwogZGlyZWN0bHkgKFx0ZXh0aXR7ZS5nLiBzaGEyNTZcX3Byb2Nlc3MoKX0pIHRoaXMgZGVzY3JpcHRvciBpbnRlcmZhY2UgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gY3VzdG9taXplIHRoZWlyCiB1c2FnZSBvZiB0aGUgbGlicmFyeS4KQEAgLTEzNSw3ICsxNzEsNyBAQAogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgaGFyZHdhcmUgcGxhdGZvcm0gd2l0aCBhIHNwZWNpYWxpemVkIFJORyBkZXZpY2UuICBPYnZpb3VzbHkgb25lIHdvdWxkIGxpa2UgdG8gdGFwCiB0aGF0IGZvciB0aGUgUFJORyBuZWVkcyB3aXRoaW4gdGhlIGxpYnJhcnkgKFx0ZXh0aXR7ZS5nLiBtYWtpbmcgYSBSU0Ega2V5fSkuICBBbGwgdGhlIGRldmVsb3BlciBoYXMgdG8gZG8KIGlzIHdyaXRlIGEgZGVzY3JpcHRvciBhbmQgdGhlIGZldyBzdXBwb3J0IHJvdXRpbmVzIHJlcXVpcmVkIGZvciB0aGUgZGV2aWNlLiAgQWZ0ZXIgdGhhdCB0aGUgcmVzdCBvZiB0aGUgCi1BUEkgY2FuIG1ha2UgdXNlIG9mIGl0IHdpdGhvdXQgY2hhbmdlLiAgU2ltaWxpYXJseSBpbWFnaW5lIGEgZmV3IHllYXJzIGRvd24gdGhlIHJvYWQgd2hlbiBBRVMyIAorQVBJIGNhbiBtYWtlIHVzZSBvZiBpdCB3aXRob3V0IGNoYW5nZS4gIFNpbWlsYXJseSBpbWFnaW5lIGEgZmV3IHllYXJzIGRvd24gdGhlIHJvYWQgd2hlbiBBRVMyIAogKFx0ZXh0aXR7b3Igd2hhdGV2ZXIgdGhleSBjYWxsIGl0fSkgaGFzIGJlZW4gaW52ZW50ZWQuICBJdCBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgYW5kIHVzZWQgd2l0aGluIGFwcGxpY2F0aW9ucyAKIHdpdGggemVybyBtb2RpZmljYXRpb25zIHRvIHRoZSBlbmQgYXBwbGljYXRpb25zIHByb3ZpZGVkIHRoZXkgYXJlIHdyaXR0ZW4gcHJvcGVybHkuCiAKQEAgLTE0NywzMyArMTgzLDIxIEBACiB0aGUga2V5IHNldHVwLCBFQ0IgZGVjcnlwdCBhbmQgZW5jcnlwdCBhbmQgdGVzdCB2ZWN0b3Igcm91dGluZXMuICBBZnRlciB0aGF0IGFsbCBmaXZlIGNoYWluaW5nIG1vZGUgcm91dGluZXMKIGNhbiBtYWtlIHVzZSBvZiB0aGUgY2lwaGVyIHJpZ2h0IGF3YXkuCiAKLVxzZWN0aW9ue0xpY2Vuc2V9Ci0KLUFsbCBvZiB0aGUgc291cmNlIGNvZGUgZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiB3cml0dGVuIGJ5IHRoZSBhdXRob3Igb3IgZG9uYXRlZCB0byB0aGUgcHJvamVjdAotdW5kZXIgYSBwdWJsaWMgZG9tYWluIGxpY2Vuc2U6Ci0KLVxiZWdpbntlbnVtZXJhdGV9Ci0gICBcaXRlbSByYzIuYwotXGVuZHtlbnVtZXJhdGV9Ci0KLWBtcGkuYycnIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTWljaGFlbCBGcm9tYmVyZ2VyIChzdGluZ0BsaW5ndWlzdC5kYXJ0bW91dGguZWR1KSBidXQgaGFzIHNpbmNlIGJlZW4gcmVwbGFjZWQgd2l0aCAKLW15IExpYlRvbU1hdGggbGlicmFyeSB3aGljaCBpcyBwdWJsaWMgZG9tYWluLgotCi1gYHJjMi5jJycgaXMgYmFzZWQgb24gcHVibGljbHkgYXZhaWxhYmxlIGNvZGUgdGhhdCBpcyBub3QgYXR0cmlidXRlZCB0byBhIHBlcnNvbiBmcm9tIHRoZSBnaXZlbiBzb3VyY2UuICAKK1xteXNlY3Rpb257TGljZW5zZX0KIAogVGhlIHByb2plY3QgaXMgaGVyZWJ5IHJlbGVhc2VkIGFzIHB1YmxpYyBkb21haW4uCiAKLVxzZWN0aW9ue1BhdGVudCBEaXNjbG9zdXJlfQorXG15c2VjdGlvbntQYXRlbnQgRGlzY2xvc3VyZX0KIAogVGhlIGF1dGhvciAoVG9tIFN0IERlbmlzKSBpcyBub3QgYSBwYXRlbnQgbGF3eWVyIHNvIHRoaXMgc2VjdGlvbiBpcyBub3QgdG8gYmUgdHJlYXRlZCBhcyBsZWdhbCBhZHZpY2UuICBUbyB0aGUgYmVzdAogb2YgdGhlIGF1dGhvcnMga25vd2xlZGdlIHRoZSBvbmx5IHBhdGVudCByZWxhdGVkIGlzc3VlcyB3aXRoaW4gdGhlIGxpYnJhcnkgYXJlIHRoZSBSQzUgYW5kIFJDNiBzeW1tZXRyaWMgYmxvY2sgY2lwaGVycy4gIAotVGhleSBjYW4gYmUgcmVtb3ZlZCBmcm9tIGEgYnVpbGQgYnkgc2ltcGx5IGNvbW1lbnRpbmcgb3V0IHRoZSB0d28gYXBwcm9wcmlhdGUgbGluZXMgaW4gYGB0b21jcnlwdFxfY3VzdG9tLmgnJy4gIFRoZSByZXN0CitUaGV5IGNhbiBiZSByZW1vdmVkIGZyb20gYSBidWlsZCBieSBzaW1wbHkgY29tbWVudGluZyBvdXQgdGhlIHR3byBhcHByb3ByaWF0ZSBsaW5lcyBpbiBcdGV4dGl0e3RvbWNyeXB0XF9jdXN0b20uaH0uICBUaGUgcmVzdAogb2YgdGhlIGNpcGhlcnMgYW5kIGhhc2hlcyBhcmUgcGF0ZW50IGZyZWUgb3IgdW5kZXIgcGF0ZW50cyB0aGF0IGhhdmUgc2luY2UgZXhwaXJlZC4KIAogVGhlIFJDMiBhbmQgUkM0IHN5bW1ldHJpYyBjaXBoZXJzIGFyZSBub3QgdW5kZXIgcGF0ZW50cyBidXQgYXJlIHVuZGVyIHRyYWRlbWFyayByZWd1bGF0aW9ucy4gIFRoaXMgbWVhbnMgeW91IGNhbiB1c2UgCiB0aGUgY2lwaGVycyB5b3UganVzdCBjYW4ndCBhZHZlcnRpc2UgdGhhdCB5b3UgYXJlIGRvaW5nIHNvLiAgCiAKLVxzZWN0aW9ue1RoYW5rc30KK1xteXNlY3Rpb257VGhhbmtzfQogSSB3b3VsZCBsaWtlIHRvIGdpdmUgdGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKSBmb3IgaGVscGluZyBtZSBkZXZlbG9wIHRoaXMgcHJvamVjdCBmcm9tCiBlYXJseSBvbjoKIFxiZWdpbntlbnVtZXJhdGV9CkBAIC0xOTYsMTEgKzIyMCwxMSBAQAogdGltZSB0byB0aW1lLgogCiBcY2hhcHRlcntUaGUgQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlIChBUEkpfQotXHNlY3Rpb257SW50cm9kdWN0aW9ufQorXG15c2VjdGlvbntJbnRyb2R1Y3Rpb259CiBcaW5kZXh7Q1JZUFRcX0VSUk9SfSBcaW5kZXh7Q1JZUFRcX09LfQogCiBJbiBnZW5lcmFsIHRoZSBBUEkgaXMgdmVyeSBzaW1wbGUgdG8gbWVtb3JpemUgYW5kIHVzZS4gIE1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyByZXR1cm4gZWl0aGVyIHtcYmYgdm9pZH0gb3Ige1xiZiBpbnR9LiAgRnVuY3Rpb25zCi10aGF0IHJldHVybiB7XGJmIGludH0gd2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGlmIHRoZSBmdW5jdGlvbiB3YXMgc3VjY2Vzc2Z1bCBvciBvbmUgb2YgdGhlIG1hbnkgZXJyb3IgY29kZXMgCit0aGF0IHJldHVybiB7XGJmIGludH0gd2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGlmIHRoZSBmdW5jdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgb3Igb25lIG9mIHRoZSBtYW55IGVycm9yIGNvZGVzIAogaWYgaXQgZmFpbGVkLiAgQ2VydGFpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gaW50IHdpbGwgcmV0dXJuICQtMSQgdG8gaW5kaWNhdGUgYW4gZXJyb3IuICBUaGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBleHBsaWNpdGx5CiBjb21tZW50ZWQgdXBvbi4gIFdoZW4gYSBmdW5jdGlvbiBkb2VzIHJldHVybiBhIENSWVBUIGVycm9yIGNvZGUgaXQgY2FuIGJlIHRyYW5zbGF0ZWQgaW50byBhIHN0cmluZyB3aXRoCiAKQEAgLTIxMCw2ICsyMzQsNyBAQAogXGVuZHt2ZXJiYXRpbX0KIAogQW4gZXhhbXBsZSBvZiBoYW5kbGluZyBhbiBlcnJvciBpczoKK1xiZWdpbntzbWFsbH0KIFxiZWdpbnt2ZXJiYXRpbX0KIHZvaWQgc29tZWZ1bmModm9pZCkKIHsKQEAgLTIxNywzNCArMjQyLDM4IEBACiAgICAKICAgIC8qIGNhbGwgYSBjcnlwdG9ncmFwaGljIGZ1bmN0aW9uICovCiAgICBpZiAoKGVyciA9IHNvbWVfY3J5cHRvX2Z1bmN0aW9uKC4uLikpICE9IENSWVBUX09LKSB7Ci0gICAgICBwcmludGYoIkEgY3J5cHRvIGVycm9yIG9jY3VyZWQsICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBwcmludGYoIkEgY3J5cHRvIGVycm9yIG9jY3VycmVkLCAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgLyogcGVyZm9ybSBlcnJvciBoYW5kbGluZyAqLwogICAgfQotICAgLyogY29udGludWUgb24gaWYgbm8gZXJyb3Igb2NjdXJlZCAqLworICAgLyogY29udGludWUgb24gaWYgbm8gZXJyb3Igb2NjdXJyZWQgKi8KIH0KIFxlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQogCiBUaGVyZSBpcyBubyBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgbGlicmFyeSBhbmQgZm9yIHRoZSBtb3N0IHBhcnQgdGhlIGNvZGUgaXMgdGhyZWFkIHNhZmUuICBUaGUgb25seSB0aHJlYWQKIHJlbGF0ZWQgaXNzdWUgaXMgaWYgeW91IHVzZSB0aGUgc2FtZSBzeW1tZXRyaWMgY2lwaGVyLCBoYXNoIG9yIHB1YmxpYyBrZXkgc3RhdGUgZGF0YSBpbiBtdWx0aXBsZSB0aHJlYWRzLiAgTm9ybWFsbHkKIHRoYXQgaXMgbm90IGFuIGlzc3VlLgogCi1UbyBpbmNsdWRlIHRoZSBwcm90b3R5cGVzIGZvciBgYExpYlRvbUNyeXB0LmEnJyBpbnRvIHlvdXIgb3duIHByb2dyYW0gc2ltcGx5IGluY2x1ZGUgYGB0b21jcnlwdC5oJycgbGlrZSBzbzoKK1RvIGluY2x1ZGUgdGhlIHByb3RvdHlwZXMgZm9yIFx0ZXh0aXR7TGliVG9tQ3J5cHQuYX0gaW50byB5b3VyIG93biBwcm9ncmFtIHNpbXBseSBpbmNsdWRlIFx0ZXh0aXR7dG9tY3J5cHQuaH0gbGlrZSBzbzoKK1xiZWdpbntzbWFsbH0KIFxiZWdpbnt2ZXJiYXRpbX0KICNpbmNsdWRlIDx0b21jcnlwdC5oPgogaW50IG1haW4odm9pZCkgewogICAgIHJldHVybiAwOwogfQogXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CiAKLVRoZSBoZWFkZXIgZmlsZSBgYHRvbWNyeXB0LmgnJyBhbHNvIGluY2x1ZGVzIGBgc3RkaW8uaCcnLCBgYHN0cmluZy5oJycsIGBgc3RkbGliLmgnJywgYGB0aW1lLmgnJywgYGBjdHlwZS5oJycgYW5kIAotYGBsdGNcX3RvbW1hdGguaCcnICh0aGUgYmlnbnVtIGxpYnJhcnkgcm91dGluZXMpLgorVGhlIGhlYWRlciBmaWxlIFx0ZXh0aXR7dG9tY3J5cHQuaH0gYWxzbyBpbmNsdWRlcyBcdGV4dGl0e3N0ZGlvLmh9LCBcdGV4dGl0e3N0cmluZy5ofSwgXHRleHRpdHtzdGRsaWIuaH0sIFx0ZXh0aXR7dGltZS5ofSBhbmQgXHRleHRpdHtjdHlwZS5ofS4KIAotXHNlY3Rpb257TWFjcm9zfQorXG15c2VjdGlvbntNYWNyb3N9CiAKIFRoZXJlIGFyZSBhIGZldyBoZWxwZXIgbWFjcm9zIHRvIG1ha2UgdGhlIGNvZGluZyBwcm9jZXNzIGEgYml0IGVhc2llci4gIFRoZSBmaXJzdCBzZXQgYXJlIHJlbGF0ZWQgdG8gbG9hZGluZyBhbmQgc3RvcmluZwogMzIvNjQtYml0IHdvcmRzIGluIGxpdHRsZS9iaWcgZW5kaWFuIGZvcm1hdC4gIFRoZSBtYWNyb3MgYXJlOgogCiBcaW5kZXh7U1RPUkUzMkx9IFxpbmRleHtTVE9SRTY0TH0gXGluZGV4e0xPQUQzMkx9IFxpbmRleHtMT0FENjRMfSBcaW5kZXh7U1RPUkUzMkh9IFxpbmRleHtTVE9SRTY0SH0gXGluZGV4e0xPQUQzMkh9IFxpbmRleHtMT0FENjRIfSBcaW5kZXh7QlNXQVB9CitcbmV3cGFnZQorXGJlZ2lue2ZpZ3VyZX1baHBidF0KIFxiZWdpbntzbWFsbH0KIFxiZWdpbntjZW50ZXJ9CiBcYmVnaW57dGFidWxhcn17fGN8Y3xjfH0KQEAgLTI1NiwxNCArMjg1LDE4IEBACiAgICAgIFxobGluZSBTVE9SRTY0SCh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZyBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHggXHRvIHlbNyBcbGRvdHMgMF0kIFxcCiAgICAgIFxobGluZSBMT0FEMzJIKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHlbMyBcbGRvdHMgMF0gXHRvIHgkIFxcCiAgICAgIFxobGluZSBMT0FENjRIKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgY2hhcn0gKnkgJiAkeVs3IFxsZG90cyAwXSBcdG8geCQgXFwKLSAgICAgXGhsaW5lIEJTV0FQKHgpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4ICYgU3dhcHMgYnl0ZSBvcmRlciAoMzItLWJpdHMgb25seSkgXFwKKyAgICAgXGhsaW5lIEJTV0FQKHgpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4ICYgU3dhcCBieXRlcyBcXAogICAgICBcaGxpbmUKIFxlbmR7dGFidWxhcn0KK1xjYXB0aW9ue0xvYWQgQW5kIFN0b3JlIE1hY3Jvc30KIFxlbmR7Y2VudGVyfQogXGVuZHtzbWFsbH0KK1xlbmR7ZmlndXJlfQogCiBUaGVyZSBhcmUgMzIgYW5kIDY0LWJpdCBjeWNsaWMgcm90YXRpb25zIGFzIHdlbGw6CiBcaW5kZXh7Uk9MfSBcaW5kZXh7Uk9SfSBcaW5kZXh7Uk9MNjR9IFxpbmRleHtST1I2NH0gXGluZGV4e1JPTGN9IFxpbmRleHtST1JjfSBcaW5kZXh7Uk9MNjRjfSBcaW5kZXh7Uk9SNjRjfSAKK1xiZWdpbntmaWd1cmV9W2hwYnRdCitcYmVnaW57c21hbGx9CiBcYmVnaW57Y2VudGVyfQogXGJlZ2lue3RhYnVsYXJ9e3xjfGN8Y3x9CiAgICAgIFxobGluZSBST0woeCwgeSkgJiB7XGJmIHVuc2lnbmVkIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgbG9uZ30geSAmICR4IDw8IHksIDAgXGxlIHkgXGxlIDMxJCBcXApAQCAtMjc3LDEyICszMTAsMTUgQEAKICAgICAgXGhsaW5lIFJPUjY0Yyh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZ30geCwge1xiZiBjb25zdCB1bnNpZ25lZCBsb25nfSB5ICYgJHggPj4geSwgMCBcbGUgeSBcbGUgNjMkIFxcCiAgICAgIFxobGluZQogXGVuZHt0YWJ1bGFyfQorXGNhcHRpb257Um90YXRlIE1hY3Jvc30KIFxlbmR7Y2VudGVyfQorXGVuZHtzbWFsbH0KK1xlbmR7ZmlndXJlfQogCi1cc2VjdGlvbntGdW5jdGlvbnMgd2l0aCBWYXJpYWJsZSBMZW5ndGggT3V0cHV0fQotQ2VydGFpbiBmdW5jdGlvbnMgc3VjaCBhcyAoZm9yIGV4YW1wbGUpIGBgcnNhXF9leHBvcnQoKScnIGdpdmUgYW4gb3V0cHV0IHRoYXQgaXMgdmFyaWFibGUgbGVuZ3RoLiAgVG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIHlvdQotbXVzdCBwYXNzIGl0IHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlclxmb290bm90ZXtFeHRlbnNpdmUgZXJyb3IgY2hlY2tpbmcgaXMgbm90IGluIHBsYWNlIGJ1dCBpdCB3aWxsIGJlIGluIGZ1dHVyZSByZWxlYXNlcyBzbyBpdCBpcyBhIGdvb2QgaWRlYSB0byBmb2xsb3cgdGhyb3VnaCB3aXRoIHRoZXNlIGd1aWRlbGluZXMufSB3aGVyZQotdGhlIG91dHB1dCB3aWxsIGJlIHN0b3JlZC4gIEZvciBleGFtcGxlOgorXG15c2VjdGlvbntGdW5jdGlvbnMgd2l0aCBWYXJpYWJsZSBMZW5ndGggT3V0cHV0fQorQ2VydGFpbiBmdW5jdGlvbnMgc3VjaCBhcyAoZm9yIGV4YW1wbGUpIFx0ZXh0aXR7cnNhXF9leHBvcnQoKX0gZ2l2ZSBhbiBvdXRwdXQgdGhhdCBpcyB2YXJpYWJsZSBsZW5ndGguICBUbyBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MgeW91CittdXN0IHBhc3MgaXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHdoZXJlIHRoZSBvdXRwdXQgd2lsbCBiZSBzdG9yZWQuICBGb3IgZXhhbXBsZToKK1xpbmRleHtyc2FcX2V4cG9ydCgpfSBcaW5kZXh7ZXJyb3JcX3RvXF9zdHJpbmcoKX0gXGluZGV4e3ZhcmlhYmxlIGxlbmd0aCBvdXRwdXR9CiBcYmVnaW57c21hbGx9CiBcYmVnaW57dmVyYmF0aW19CiAjaW5jbHVkZSA8dG9tY3J5cHQuaD4KQEAgLTI5NCwxNCArMzMwLDE2IEBACiAKICAgICAvKiAuLi4gTWFrZSB1cCB0aGUgUlNBIGtleSBzb21laG93IC4uLiAqLwogCi0gICAgLyogbGV0cyBleHBvcnQgdGhlIGtleSwgc2V0IHggdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgKi8KKyAgICAvKiBsZXRzIGV4cG9ydCB0aGUga2V5LCBzZXQgeCB0byB0aGUgc2l6ZSBvZiB0aGUgCisgICAgICogb3V0cHV0IGJ1ZmZlciAqLwogICAgIHggPSBzaXplb2YoYnVmZmVyKTsKICAgICBpZiAoKGVyciA9IHJzYV9leHBvcnQoYnVmZmVyLCAmeCwgUEtfUFVCTElDLCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICBwcmludGYoIkV4cG9ydCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIAotICAgIC8qIGlmIHJzYV9leHBvcnQoKSB3YXMgc3VjY2Vzc2Z1bCB0aGVuIHggd2lsbCBoYXZlIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgKi8KKyAgICAvKiBpZiByc2FfZXhwb3J0KCkgd2FzIHN1Y2Nlc3NmdWwgdGhlbiB4IHdpbGwgaGF2ZSAKKyAgICAgKiB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0ICovCiAgICAgcHJpbnRmKCJSU0EgZXhwb3J0ZWQga2V5IHRha2VzICVkIGJ5dGVzXG4iLCB4KTsKIAogICAgIC8qIC4uLiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgYnVmZmVyICovCkBAIC0zMTEsNjkgKzM0OSwxMDMgQEAKIFxlbmR7dmVyYmF0aW19CiBcZW5ke3NtYWxsfQogSW4gdGhlIGFib3ZlIGV4YW1wbGUgaWYgdGhlIHNpemUgb2YgdGhlIFJTQSBwdWJsaWMga2V5IHdhcyBtb3JlIHRoYW4gMTAyNCBieXRlcyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBhbiBlcnJvciBjb2RlCi1pbmRpY2F0aW5nIGEgYnVmZmVyIG92ZXJmbG93IHdvdWxkIGhhdmUgb2NjdXJyZWQuICBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgaXQgc3RvcmVzIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dAotYmFjayBpbnRvIGBgeCcnIHNvIHRoYXQgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gd2lsbCBrbm93IGhvdyBtYW55IGJ5dGVzIHdlcmUgdXNlZC4KK2luZGljYXRpbmcgYSBidWZmZXIgb3ZlcmZsb3cgd291bGQgaGF2ZSBvY2N1cnJlZC4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgaXQgc3RvcmVzIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBiYWNrIGludG8gCitcdGV4dGl0e3h9IHNvIHRoYXQgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gd2lsbCBrbm93IGhvdyBtYW55IGJ5dGVzIHdlcmUgdXNlZC4KIAotXHNlY3Rpb257RnVuY3Rpb25zIHRoYXQgbmVlZCBhIFBSTkd9CitBcyBvZiB2MS4xMywgbW9zdCBmdW5jdGlvbnMgd2lsbCB1cGRhdGUgeW91ciBsZW5ndGggb24gZmFpbHVyZSB0byBpbmRpY2F0ZSB0aGUgc2l6ZSByZXF1aXJlZCBieSB0aGUgZnVuY3Rpb24uICBOb3QgYWxsIGZ1bmN0aW9ucworc3VwcG9ydCB0aGlzIHNvIHBsZWFzZSBjaGVjayB0aGUgc291cmNlIGJlZm9yZSB5b3UgcmVseSBvbiBpdCBkb2luZyB0aGF0LgorCitcbXlzZWN0aW9ue0Z1bmN0aW9ucyB0aGF0IG5lZWQgYSBQUk5HfQogXGluZGV4e1BzZXVkbyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcn0gXGluZGV4e1BSTkd9Ci1DZXJ0YWluIGZ1bmN0aW9ucyBzdWNoIGFzIGBgcnNhXF9tYWtlXF9rZXkoKScnIHJlcXVpcmUgYSBQc2V1ZG8gUmFuZG9tIE51bWJlciBHZW5lcmF0b3IgKFBSTkcpLiAgVGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBzZXR1cCAKK0NlcnRhaW4gZnVuY3Rpb25zIHN1Y2ggYXMgXHRleHRpdHtyc2FcX21ha2VcX2tleSgpfSByZXF1aXJlIGEgUHNldWRvIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIChQUk5HKS4gIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3Qgc2V0dXAgCiB0aGUgUFJORyB0aGVtc2VsdmVzIHNvIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byBpbml0aWFsaXplIHRoZSBQUk5HIGJlZm9yZSBjYWxsaW5nIHRoZW0uCiAKLUNlcnRhaW4gUFJORyBhbGdvcml0aG1zIGRvIG5vdCByZXF1aXJlIGEgYGBwcm5nXF9zdGF0ZScnIGFyZ3VtZW50IChzcHJuZyBmb3IgZXhhbXBsZSkuICBUaGUgYGBwcm5nXF9zdGF0ZScnIGFyZ3VtZW50CitDZXJ0YWluIFBSTkcgYWxnb3JpdGhtcyBkbyBub3QgcmVxdWlyZSBhIFx0ZXh0aXR7cHJuZ1xfc3RhdGV9IGFyZ3VtZW50IChzcHJuZyBmb3IgZXhhbXBsZSkuICBUaGUgXHRleHRpdHtwcm5nXF9zdGF0ZX0gYXJndW1lbnQKIG1heSBiZSBwYXNzZWQgYXMgXHRleHRiZntOVUxMfSBpbiBzdWNoIHNpdHVhdGlvbnMuCiAKLVxzZWN0aW9ue0Z1bmN0aW9ucyB0aGF0IHVzZSBBcnJheXMgb2YgT2N0ZXRzfQotTW9zdCBmdW5jdGlvbnMgcmVxdWlyZSBpbnB1dHMgdGhhdCBhcmUgYXJyYXlzIG9mIHRoZSBkYXRhIHR5cGUgYGB1bnNpZ25lZCBjaGFyJycuICBXaGV0aGVyIGl0IGlzIGEgc3ltbWV0cmljIGtleSwgSVYKLWZvciBhIGNoYWluaW5nIG1vZGUgb3IgcHVibGljIGtleSBwYWNrZXQgaXQgaXMgYXNzdW1lZCB0aGF0IHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbCBzaXplIG9mIGBgdW5zaWduZWQgY2hhcicnIG9ubHkgdGhlCi1sb3dlciBlaWdodCBiaXRzIGNvbnRhaW4gZGF0YS4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBwYXNzIGEgMjU2IGJpdCBrZXkgdG8gYSBzeW1tZXRyaWMgY2lwaGVycyBzZXR1cCByb3V0aW5lCi15b3UgbXVzdCBwYXNzIGl0IGluIChhIHBvaW50ZXIgdG8pIGFuIGFycmF5IG9mIDMyIGBgdW5zaWduZWQgY2hhcicnIHZhcmlhYmxlcy4gIENlcnRhaW4gcm91dGluZXMgCi0oc3VjaCBhcyBTQUZFUispIHRha2Ugc3BlY2lhbCBjYXJlIHRvIHdvcmsgcHJvcGVybHkgb24gcGxhdGZvcm1zIHdoZXJlIGFuIGBgdW5zaWduZWQgY2hhcicnIGlzIG5vdCBlaWdodCBiaXRzLgorXGluZGV4e3JlZ2lzdGVyXF9wcm5nKCl9IFxpbmRleHtyc2FcX21ha2VcX2tleSgpfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKSB7CisgICAgcnNhX2tleSBrZXk7CisgICAgaW50ICAgICBlcnI7CiAKLUZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBsaWJyYXJ5IHRoZSB0ZXJtIGBgYnl0ZScnIHdpbGwgcmVmZXIgdG8gYW4gb2N0ZXQgb3IgZWlnaHQgYml0IHdvcmQuICBUeXBpY2FsbHkgYW4gYXJyYXkgb2YKLXR5cGUgYGBieXRlJycgd2lsbCBiZSBzeW5vbnltb3VzIHdpdGggYW4gYXJyYXkgb2YgdHlwZSBgYHVuc2lnbmVkIGNoYXInJy4KKyAgICAvKiByZWdpc3RlciB0aGUgc3lzdGVtIFJORyAqLworICAgIHJlZ2lzdGVyX3BybmcoJnNwcm5nX2Rlc2MpIAorCisgICAgLyogbWFrZSBhIDEwMjQtYml0IFJTQSBrZXkgd2l0aCB0aGUgc3lzdGVtIFJORyAqLworICAgIGlmICgoZXJyID0gcnNhX21ha2Vfa2V5KE5VTEwsIGZpbmRfcHJuZygic3BybmciKSwgMTAyNC84LCA2NTUzNywgJmtleSkpIAorICAgICAgICAhPSBDUllQVF9PSykgeworICAgICAgIHByaW50ZigibWFrZV9rZXkgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIHVzZSB0aGUga2V5IC4uLiAqLworCisgICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXG15c2VjdGlvbntGdW5jdGlvbnMgdGhhdCB1c2UgQXJyYXlzIG9mIE9jdGV0c30KK01vc3QgZnVuY3Rpb25zIHJlcXVpcmUgaW5wdXRzIHRoYXQgYXJlIGFycmF5cyBvZiB0aGUgZGF0YSB0eXBlIFx0ZXh0aXR7dW5zaWduZWQgY2hhcn0uICBXaGV0aGVyIGl0IGlzIGEgc3ltbWV0cmljIGtleSwgSVYKK2ZvciBhIGNoYWluaW5nIG1vZGUgb3IgcHVibGljIGtleSBwYWNrZXQgaXQgaXMgYXNzdW1lZCB0aGF0IHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbCBzaXplIG9mIFx0ZXh0aXR7dW5zaWduZWQgY2hhcn0gb25seSB0aGUKK2xvd2VyIGVpZ2h0IGJpdHMgY29udGFpbiBkYXRhLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHBhc3MgYSAyNTYgYml0IGtleSB0byBhIHN5bW1ldHJpYyBjaXBoZXJzIHNldHVwIHJvdXRpbmUsIHlvdSAKK211c3QgcGFzcyBpbiAoYSBwb2ludGVyIHRvKSBhbiBhcnJheSBvZiAzMiBcdGV4dGl0e3Vuc2lnbmVkIGNoYXJ9IHZhcmlhYmxlcy4gIENlcnRhaW4gcm91dGluZXMgKHN1Y2ggYXMgU0FGRVIrKSB0YWtlIAorc3BlY2lhbCBjYXJlIHRvIHdvcmsgcHJvcGVybHkgb24gcGxhdGZvcm1zIHdoZXJlIGFuIFx0ZXh0aXR7dW5zaWduZWQgY2hhcn0gaXMgbm90IGVpZ2h0IGJpdHMuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBsaWJyYXJ5LCB0aGUgdGVybSBcdGV4dGl0e2J5dGV9IHdpbGwgcmVmZXIgdG8gYW4gb2N0ZXQgb3IgZWlnaHQgYml0IHdvcmQuICBUeXBpY2FsbHkgYW4gYXJyYXkgb2YKK3R5cGUgXHRleHRpdHtieXRlfSB3aWxsIGJlIHN5bm9ueW1vdXMgd2l0aCBhbiBhcnJheSBvZiB0eXBlIFx0ZXh0aXR7dW5zaWduZWQgY2hhci59CiAKIFxjaGFwdGVye1N5bW1ldHJpYyBCbG9jayBDaXBoZXJzfQotXHNlY3Rpb257Q29yZSBGdW5jdGlvbnN9Ci0KLUxpYlRvbUNyeXB0IHByb3ZpZGVzIHNldmVyYWwgYmxvY2sgY2lwaGVycyB3aXRoIGFuIEVDQiBibG9jayBtb2RlIGludGVyZmFjZS4gIEl0J3MgaW1wb3J0YW50IHRvIGZpcnN0IG5vdGUgdGhhdCB5b3UgCi1zaG91bGQgbmV2ZXIgdXNlIHRoZSBFQ0IgbW9kZXMgZGlyZWN0bHkgdG8gZW5jcnlwdCBkYXRhLiAgSW5zdGVhZCB5b3Ugc2hvdWxkIHVzZSB0aGUgRUNCIGZ1bmN0aW9ucyB0byBtYWtlIGEgY2hhaW5pbmcgbW9kZQorXG15c2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KK0xpYlRvbUNyeXB0IHByb3ZpZGVzIHNldmVyYWwgYmxvY2sgY2lwaGVycyB3aXRoIGFuIEVDQiBibG9jayBtb2RlIGludGVyZmFjZS4gIEl0IGlzIGltcG9ydGFudCB0byBmaXJzdCBub3RlIHRoYXQgeW91IAorc2hvdWxkIG5ldmVyIHVzZSB0aGUgRUNCIG1vZGVzIGRpcmVjdGx5IHRvIGVuY3J5cHQgZGF0YS4gIEluc3RlYWQgeW91IHNob3VsZCB1c2UgdGhlIEVDQiBmdW5jdGlvbnMgdG8gbWFrZSBhIGNoYWluaW5nIG1vZGUsCiBvciB1c2Ugb25lIG9mIHRoZSBwcm92aWRlZCBjaGFpbmluZyBtb2Rlcy4gIEFsbCBvZiB0aGUgY2lwaGVycyBhcmUgd3JpdHRlbiBhcyBFQ0IgaW50ZXJmYWNlcyBzaW5jZSBpdCBhbGxvd3MgdGhlIHJlc3Qgb2YKIHRoZSBBUEkgdG8gZ3JvdyBpbiBhIG1vZHVsYXIgZmFzaGlvbi4KIAogXHN1YnNlY3Rpb257S2V5IFNjaGVkdWxpbmd9Ci1BbGwgY2lwaGVycyBzdG9yZSB0aGVpciBzY2hlZHVsZWQga2V5cyBpbiBhIHNpbmdsZSBkYXRhIHR5cGUgY2FsbGVkIGBgc3ltbWV0cmljXF9rZXknJy4gIFRoaXMgYWxsb3dzIGFsbCBjaXBoZXJzIHRvIAorQWxsIGNpcGhlcnMgc3RvcmUgdGhlaXIgc2NoZWR1bGVkIGtleXMgaW4gYSBzaW5nbGUgZGF0YSB0eXBlIGNhbGxlZCBcdGV4dGl0e3N5bW1ldHJpY1xfa2V5fS4gIFRoaXMgYWxsb3dzIGFsbCBjaXBoZXJzIHRvIAogaGF2ZSB0aGUgc2FtZSBwcm90b3R5cGUgYW5kIHN0b3JlIHRoZWlyIGtleXMgYXMgbmF0dXJhbGx5IGFzIHBvc3NpYmxlLiAgVGhpcyBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGR5bmFtaWMgbWVtb3J5Ci1hbGxvY2F0aW9uIGFuZCBhbGxvd3MgeW91IHRvIGFsbG9jYXRlIGEgZml4ZWQgc2l6ZWQgYnVmZmVyIGZvciBzdG9yaW5nIHNjaGVkdWxlZCBrZXlzLiAgQWxsIGNpcGhlcnMgcHJvdmlkZSBmaXZlIHZpc2libGUgCi1mdW5jdGlvbnMgd2hpY2ggYXJlIChnaXZlbiB0aGF0IFhYWCBpcyB0aGUgbmFtZSBvZiB0aGUgY2lwaGVyKToKK2FsbG9jYXRpb24sIGFuZCBhbGxvd3MgeW91IHRvIGFsbG9jYXRlIGEgZml4ZWQgc2l6ZWQgYnVmZmVyIGZvciBzdG9yaW5nIHNjaGVkdWxlZCBrZXlzLiAgQWxsIGNpcGhlcnMgbXVzdCBwcm92aWRlIHNpeCB2aXNpYmxlIAorZnVuY3Rpb25zIHdoaWNoIGFyZSAoZ2l2ZW4gdGhhdCBYWFggaXMgdGhlIG5hbWUgb2YgdGhlIGNpcGhlcikgdGhlIGZvbGxvd2luZzoKIFxpbmRleHtDaXBoZXIgU2V0dXB9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgWFhYX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IHJvdW5kcywKLSAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgWFhYX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHJvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CiBcZW5ke3ZlcmJhdGltfQogCiBUaGUgWFhYXF9zZXR1cCgpIHJvdXRpbmUgd2lsbCBzZXR1cCB0aGUgY2lwaGVyIHRvIGJlIHVzZWQgd2l0aCBhIGdpdmVuIG51bWJlciBvZiByb3VuZHMgYW5kIGEgZ2l2ZW4ga2V5IGxlbmd0aCAoaW4gYnl0ZXMpLgogVGhlIG51bWJlciBvZiByb3VuZHMgY2FuIGJlIHNldCB0byB6ZXJvIHRvIHVzZSB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgZ2VuZXJhbGx5IGEgZ29vZCBpZGVhLgogCi1JZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzZnVsbHkgdGhlIHZhcmlhYmxlIGBgc2tleScnIHdpbGwgaGF2ZSBhIHNjaGVkdWxlZCBrZXkgc3RvcmVkIGluIGl0LiAgSXQncyBpbXBvcnRhbnQgdG8gbm90ZQotdGhhdCB5b3Ugc2hvdWxkIG9ubHkgdXNlZCB0aGlzIHNjaGVkdWxlZCBrZXkgd2l0aCB0aGUgaW50ZW5kZWQgY2lwaGVyLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjYWxsIGBgYmxvd2Zpc2hcX3NldHVwKCknJyBkbyBub3QgCi1wYXNzIHRoZSBzY2hlZHVsZWQga2V5IG9udG8gYGByYzVcX2VjYlxfZW5jcnlwdCgpJycuICBBbGwgc2V0dXAgZnVuY3Rpb25zIGRvIG5vdCBhbGxvY2F0ZSBtZW1vcnkgb2ZmIHRoZSBoZWFwIHNvIHdoZW4geW91IGFyZSAKLWRvbmUgd2l0aCBhIGtleSB5b3UgY2FuIHNpbXBseSBkaXNjYXJkIGl0IChlLmcuIHRoZXkgY2FuIGJlIG9uIHRoZSBzdGFjaykuCitJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBzdWNjZXNzZnVsbHkgdGhlIHZhcmlhYmxlIFx0ZXh0aXR7c2tleX0gd2lsbCBoYXZlIGEgc2NoZWR1bGVkIGtleSBzdG9yZWQgaW4gaXQuICBJdCdzIGltcG9ydGFudCB0byBub3RlCit0aGF0IHlvdSBzaG91bGQgb25seSB1c2VkIHRoaXMgc2NoZWR1bGVkIGtleSB3aXRoIHRoZSBpbnRlbmRlZCBjaXBoZXIuICBGb3IgZXhhbXBsZSwgaWYgeW91IGNhbGwgXHRleHRpdHtibG93ZmlzaFxfc2V0dXAoKX0gZG8gbm90IAorcGFzcyB0aGUgc2NoZWR1bGVkIGtleSBvbnRvIFx0ZXh0aXR7cmM1XF9lY2JcX2VuY3J5cHQoKX0uICBBbGwgYnVpbHQtLWluIHNldHVwIGZ1bmN0aW9ucyBkbyBub3QgYWxsb2NhdGUgbWVtb3J5IG9mZiB0aGUgaGVhcCBzbyAKK3doZW4geW91IGFyZSBkb25lIHdpdGggYSBrZXkgeW91IGNhbiBzaW1wbHkgZGlzY2FyZCBpdCAoZS5nLiB0aGV5IGNhbiBiZSBvbiB0aGUgc3RhY2spLiAgSG93ZXZlciwgdG8gbWFpbnRhaW4gcHJvcGVyIGNvZGluZworcHJhY3RpY2VzIHlvdSBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIHJlc3BlY3RpdmUgWFhYXF9kb25lKCkgZnVuY3Rpb24uICBUaGlzIGFsbG93cyBmb3IgcXVpY2tlciBwb3J0aW5nIHRvIGFwcGxpY2F0aW9ucyB3aXRoCitleHRlcm5hbGx5IHN1cHBsaWVkIHBsdWdpbnMuCiAKIFxzdWJzZWN0aW9ue0VDQiBFbmNyeXB0aW9uIGFuZCBEZWNyeXB0aW9ufQotVG8gZW5jcnlwdCBvciBkZWNyeXB0IGEgYmxvY2sgaW4gRUNCIG1vZGUgdGhlcmUgYXJlIHRoZXNlIHR3byBmdW5jdGlvbiBjbGFzc2VzCitUbyBlbmNyeXB0IG9yIGRlY3J5cHQgYSBibG9jayBpbiBFQ0IgbW9kZSB0aGVyZSBhcmUgdGhlc2UgdHdvIGZ1bmN0aW9ucyBwZXIgY2lwaGVyOgogXGluZGV4e0NpcGhlciBFbmNyeXB0fSBcaW5kZXh7Q2lwaGVyIERlY3J5cHR9CiBcYmVnaW57dmVyYmF0aW19Ci12b2lkIFhYWF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsCi0gICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBYWFhfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CiAKLXZvaWQgWFhYX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwKLSAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IFhYWF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIFxlbmR7dmVyYmF0aW19CiBUaGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgZW5jcnlwdCBvciBkZWNyeXB0IChyZXNwZWN0aXZlbHkpIGEgc2luZ2xlIGJsb2NrIG9mIHRleHRcZm9vdG5vdGV7VGhlIHNpemUgb2Ygd2hpY2ggZGVwZW5kcyBvbgotd2hpY2ggY2lwaGVyIHlvdSBhcmUgdXNpbmcufSBhbmQgc3RvcmUgdGhlIHJlc3VsdCB3aGVyZSB5b3Ugd2FudCBpdC4gIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyIGFyZSAKLXRoZSBzYW1lIGJ1ZmZlci4gIEZvciB0aGUgZW5jcnlwdCBmdW5jdGlvbiBgYHB0JydcZm9vdG5vdGV7cHQgc3RhbmRzIGZvciBwbGFpbnRleHQufSBpcyB0aGUgaW5wdXQgYW5kIAotYGBjdCcnXGZvb3Rub3Rle2N0IHN0YW5kcyBmb3IgY2lwaGVydGV4dC59IGlzIHRoZSBvdXRwdXQuICBGb3IgdGhlIGRlY3J5cHRpb24gZnVuY3Rpb24gaXQncyB0aGUgb3Bwb3NpdGUuICBUbyB0ZXN0IGEgcGFydGljdWxhciAKLWNpcGhlciBhZ2FpbnN0IHRlc3QgdmVjdG9yc1xmb290bm90ZXtBcyBwdWJsaXNoZWQgaW4gdGhlaXIgZGVzaWduIHBhcGVycy59IGNhbGwgdGhlIHNlbGYtdGVzdCBmdW5jdGlvbgord2hpY2ggY2lwaGVyIHlvdSBhcmUgdXNpbmcufSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIHRoZSBcdGV4dGl0e2N0fSBidWZmZXIgKFx0ZXh0aXR7cHR9IHJlc3AuKS4gIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVyIGFyZSAKK3RoZSBzYW1lIGJ1ZmZlci4gIEZvciB0aGUgZW5jcnlwdCBmdW5jdGlvbiBcdGV4dGl0e3B0fVxmb290bm90ZXtwdCBzdGFuZHMgZm9yIHBsYWludGV4dC59IGlzIHRoZSBpbnB1dCBhbmQgCitcdGV4dGl0e2N0fVxmb290bm90ZXtjdCBzdGFuZHMgZm9yIGNpcGhlcnRleHQufSBpcyB0aGUgb3V0cHV0LiAgRm9yIHRoZSBkZWNyeXB0aW9uIGZ1bmN0aW9uIGl0J3MgdGhlIG9wcG9zaXRlLiAgVGhleSBib3RoCityZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IG9uIHN1Y2Nlc3MuICBUbyB0ZXN0IGEgcGFydGljdWxhciBjaXBoZXIgYWdhaW5zdCB0ZXN0IHZlY3RvcnNcZm9vdG5vdGV7QXMgcHVibGlzaGVkIGluIHRoZWlyIGRlc2lnbiBwYXBlcnMufSAKK2NhbGwgdGhlIGZvbGxvd2luZyBzZWxmLXRlc3QgZnVuY3Rpb24uCiAgCiBcc3Vic2VjdGlvbntTZWxmLS1UZXN0aW5nfQogXGluZGV4e0NpcGhlciBUZXN0aW5nfQpAQCAtMzg0LDEyICs0NTYsMTMgQEAKIGJhc2VkIHVwb24uICAKIAogXHN1YnNlY3Rpb257S2V5IFNpemluZ30KLUZvciBlYWNoIGNpcGhlciB0aGVyZSBpcyBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaGVscCBmaW5kIGEgZGVzaXJlZCBrZXkgc2l6ZToKK0ZvciBlYWNoIGNpcGhlciB0aGVyZSBpcyBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaGVscCBmaW5kIGEgZGVzaXJlZCBrZXkgc2l6ZS4gIEl0IGlzIHNwZWNpZmllZCBhcyBmb2xsb3dzOgorXGluZGV4e0tleSBTaXppbmd9CiBcYmVnaW57dmVyYmF0aW19CiBpbnQgWFhYX2tleXNpemUoaW50ICprZXlzaXplKTsKIFxlbmR7dmVyYmF0aW19Ci1Fc3NlbnRpYWxseSBpdCB3aWxsIHJvdW5kIHRoZSBpbnB1dCBrZXlzaXplIGluIGBga2V5c2l6ZScnIGRvd24gdG8gdGhlIG5leHQgYXBwcm9wcmlhdGUga2V5IHNpemUuICBUaGlzIGZ1bmN0aW9uCi1yZXR1cm4ge1xiZiBDUllQVFxfT0t9IGlmIHRoZSBrZXkgc2l6ZSBzcGVjaWZpZWQgaXMgYWNjZXB0YWJsZS4gIEZvciBleGFtcGxlOgorRXNzZW50aWFsbHksIGl0IHdpbGwgcm91bmQgdGhlIGlucHV0IGtleXNpemUgaW4gXHRleHRpdHtrZXlzaXplfSBkb3duIHRvIHRoZSBuZXh0IGFwcHJvcHJpYXRlIGtleSBzaXplLiAgVGhpcyBmdW5jdGlvbgord2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGlmIHRoZSBrZXkgc2l6ZSBzcGVjaWZpZWQgaXMgYWNjZXB0YWJsZS4gIEZvciBleGFtcGxlOgogXGJlZ2lue3NtYWxsfQogXGJlZ2lue3ZlcmJhdGltfQogI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CkBAIC00MDgsMjAgKzQ4MSwyMSBAQAogfQogXGVuZHt2ZXJiYXRpbX0KIFxlbmR7c21hbGx9Ci1UaGlzIHNob3VsZCBpbmRpY2F0ZSBhIGtleXNpemUgb2Ygc2l4dGVlbiBieXRlcyBpcyBzdWdnZXN0ZWQuICAKK1RoaXMgc2hvdWxkIGluZGljYXRlIGEga2V5c2l6ZSBvZiBzaXh0ZWVuIGJ5dGVzIGlzIHN1Z2dlc3RlZCBieSBzdG9yaW5nIDE2IGluIFx0ZXh0aXR7a2V5c2l6ZS59CiAKIFxzdWJzZWN0aW9ue0NpcGhlciBUZXJtaW5hdGlvbn0KIFdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGEgY2lwaGVyIHlvdSBjYW4gZGUtLWluaXRpYWxpemUgaXQgd2l0aCB0aGUgZG9uZSBmdW5jdGlvbi4KIFxiZWdpbnt2ZXJiYXRpbX0KIHZvaWQgWFhYX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CiBcZW5ke3ZlcmJhdGltfQotRm9yIHRoZSBzb2Z0d2FyZSBiYXNlZCBjaXBoZXJzIHdpdGhpbiBMaWJUb21DcnlwdCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRvIGFueXRoaW5nLiAgSG93ZXZlciwgdXNlciBzdXBwbGllZAotY2lwaGVyIGRlc2NyaXB0b3JzIG1heSByZXF1aXJlIGNhbGxzIHRvIGl0IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiAgVG8gYmUgY29tcGxpYW50IGFsbCBmdW5jdGlvbnMgd2hpY2ggY2FsbCBhIGNpcGhlcgorRm9yIHRoZSBzb2Z0d2FyZSBiYXNlZCBjaXBoZXJzIHdpdGhpbiBMaWJUb21DcnlwdCwgdGhlc2UgZnVuY3Rpb25zIHdpbGwgbm90IGRvIGFueXRoaW5nLiAgSG93ZXZlciwgdXNlciBzdXBwbGllZAorY2lwaGVyIGRlc2NyaXB0b3JzIG1heSByZXF1aXJlIHRvIGJlIGNhbGxlZCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBwdXJwb3Nlcy4gIFRvIGJlIGNvbXBsaWFudCwgYWxsIGZ1bmN0aW9ucyB3aGljaCBjYWxsIGEgY2lwaGVyCiBzZXR1cCBmdW5jdGlvbiBtdXN0IGFsc28gY2FsbCB0aGUgcmVzcGVjdGl2ZSBjaXBoZXIgZG9uZSBmdW5jdGlvbiB3aGVuIGZpbmlzaGVkLgogCiBcc3Vic2VjdGlvbntTaW1wbGUgRW5jcnlwdGlvbiBEZW1vbnN0cmF0aW9ufQotQW4gZXhhbXBsZSBzbmlwcGV0IHRoYXQgZW5jb2RlcyBhIGJsb2NrIHdpdGggQmxvd2Zpc2ggaW4gRUNCIG1vZGUgaXMgYmVsb3cuCitBbiBleGFtcGxlIHNuaXBwZXQgdGhhdCBlbmNvZGVzIGEgYmxvY2sgd2l0aCBCbG93ZmlzaCBpbiBFQ0IgbW9kZS4KIAorXGluZGV4e2Jsb3dmaXNoXF9zZXR1cCgpfSBcaW5kZXh7Ymxvd2Zpc2hcX2VjYlxfZW5jcnlwdCgpfSBcaW5kZXh7Ymxvd2Zpc2hcX2VjYlxfZGVjcnlwdCgpfSBcaW5kZXh7Ymxvd2Zpc2hcX2RvbmUoKX0KIFxiZWdpbntzbWFsbH0KIFxiZWdpbnt2ZXJiYXRpbX0KICNpbmNsdWRlIDx0b21jcnlwdC5oPgpAQCAtNDMxLDMwICs1MDUsMzAgQEAKICAgIHN5bW1ldHJpY19rZXkgc2tleTsKICAgIGludCBlcnI7CiAKLSAgIC8qIC4uLiBrZXkgaXMgbG9hZGVkIGFwcHJvcHJpYXRlbHkgaW4gYGBrZXknJyAuLi4gKi8KLSAgIC8qIC4uLiBsb2FkIGEgYmxvY2sgb2YgcGxhaW50ZXh0IGluIGBgcHQnJyAuLi4gKi8KKyAgIC8qIC4uLiBrZXkgaXMgbG9hZGVkIGFwcHJvcHJpYXRlbHkgaW4ga2V5IC4uLiAqLworICAgLyogLi4uIGxvYWQgYSBibG9jayBvZiBwbGFpbnRleHQgaW4gcHQgLi4uICovCiAKICAgIC8qIHNjaGVkdWxlIHRoZSBrZXkgKi8KLSAgIGlmICgoZXJyID0gYmxvd2Zpc2hfc2V0dXAoa2V5LCAgICAgLyogdGhlIGtleSB3ZSB3aWxsIHVzZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsICAgICAvKiBrZXkgaXMgOCBieXRlcyAoNjQtYml0cykgbG9uZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAvKiAwID09IHVzZSBkZWZhdWx0ICMgb2Ygcm91bmRzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmc2tleSkgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgc2NoZWR1bGVkIGtleSAqLworICAgaWYgKChlcnIgPSBibG93ZmlzaF9zZXR1cChrZXksIC8qIHRoZSBrZXkgd2Ugd2lsbCB1c2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCAvKiBrZXkgaXMgOCBieXRlcyAoNjQtYml0cykgbG9uZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIDAgPT0gdXNlIGRlZmF1bHQgIyBvZiByb3VuZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZza2V5KSAvKiB3aGVyZSB0byBwdXQgdGhlIHNjaGVkdWxlZCBrZXkgKi8KICAgICAgICApICE9IENSWVBUX09LKSB7CiAgICAgICBwcmludGYoIlNldHVwIGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIC0xOwogICAgfQogCiAgICAvKiBlbmNyeXB0IHRoZSBibG9jayAqLwotICAgYmxvd2Zpc2hfZWNiX2VuY3J5cHQocHQsICAgICAgICAgICAgIC8qIGVuY3J5cHQgdGhpcyA4LWJ5dGUgYXJyYXkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGN0LCAgICAgICAgICAgICAvKiBzdG9yZSBlbmNyeXB0ZWQgZGF0YSBoZXJlICovIAotICAgICAgICAgICAgICAgICAgICAgICAgJnNrZXkpOyAgICAgICAgIC8qIG91ciBwcmV2aW91c2x5IHNjaGVkdWxlZCBrZXkgKi8KKyAgIGJsb3dmaXNoX2VjYl9lbmNyeXB0KHB0LCAgICAgICAvKiBlbmNyeXB0IHRoaXMgOC1ieXRlIGFycmF5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBjdCwgICAgICAgLyogc3RvcmUgZW5jcnlwdGVkIGRhdGEgaGVyZSAqLyAKKyAgICAgICAgICAgICAgICAgICAgICAgICZza2V5KTsgICAvKiBvdXIgcHJldmlvdXNseSBzY2hlZHVsZWQga2V5ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIC8qIG5vdyBjdCBob2xkcyB0aGUgZW5jcnlwdGVkIHZlcnNpb24gb2YgcHQgKi8gICAgICAgICAgICAgICAgICAgICAgICAKIAogICAgLyogZGVjcnlwdCB0aGUgYmxvY2sgKi8KLSAgIGJsb3dmaXNoX2VjYl9kZWNyeXB0KGN0LCAgICAgICAgICAgICAvKiBkZWNyeXB0IHRoaXMgOC1ieXRlIGFycmF5ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBwdCwgICAgICAgICAgICAgLyogc3RvcmUgZGVjcnlwdGVkIGRhdGEgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgJnNrZXkpOyAgICAgICAgIC8qIG91ciBwcmV2aW91c2x5IHNjaGVkdWxlZCBrZXkgKi8KKyAgIGJsb3dmaXNoX2VjYl9kZWNyeXB0KGN0LCAgICAgICAvKiBkZWNyeXB0IHRoaXMgOC1ieXRlIGFycmF5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBwdCwgICAgICAgLyogc3RvcmUgZGVjcnlwdGVkIGRhdGEgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgJnNrZXkpOyAgIC8qIG91ciBwcmV2aW91c2x5IHNjaGVkdWxlZCBrZXkgKi8KIAogICAgLyogbm93IHdlIGhhdmUgZGVjcnlwdGVkIGN0IHRvIHRoZSBvcmlnaW5hbCBwbGFpbnRleHQgaW4gcHQgKi8gICAgICAgICAgICAgICAgICAgICAgICAKIApAQCAtNDY2LDExICs1NDAsMTEgQEAKIFxlbmR7dmVyYmF0aW19CiBcZW5ke3NtYWxsfQogCi1cc2VjdGlvbntLZXkgU2l6ZXMgYW5kIE51bWJlciBvZiBSb3VuZHN9CitcbXlzZWN0aW9ue0tleSBTaXplcyBhbmQgTnVtYmVyIG9mIFJvdW5kc30KIFxpbmRleHtTeW1tZXRyaWMgS2V5c30KLUFzIGEgZ2VuZXJhbCBydWxlIG9mIHRodW1iIGRvIG5vdCB1c2Ugc3ltbWV0cmljIGtleXMgdW5kZXIgODAgYml0cyBpZiB5b3UgY2FuLiAgT25seSBhIGZldyBvZiB0aGUgY2lwaGVycyBzdXBwb3J0IHNtYWxsZXIKLWtleXMgKG1haW5seSBmb3IgdGVzdCB2ZWN0b3JzIGFueXdheXMpLiAgSWRlYWxseSB5b3VyIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBtYWtpbmcgYXQgbGVhc3QgMjU2IGJpdCBrZXlzLiAgVGhpcyBpcyBub3QKLWJlY2F1c2UgeW91J3JlIHN1cHBvc2VkIHRvIGJlIHBhcmFub2lkLiAgSXQncyBiZWNhdXNlIGlmIHlvdXIgUFJORyBoYXMgYSBiaWFzIG9mIGFueSBzb3J0IHRoZSBtb3JlIGJpdHMgdGhlIGJldHRlci4gIEZvcgorQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsIGRvIG5vdCB1c2Ugc3ltbWV0cmljIGtleXMgdW5kZXIgODAgYml0cyBpZiB5b3UgY2FuIGhlbHAgaXQuICBPbmx5IGEgZmV3IG9mIHRoZSBjaXBoZXJzIHN1cHBvcnQgc21hbGxlcgora2V5cyAobWFpbmx5IGZvciB0ZXN0IHZlY3RvcnMgYW55d2F5cykuICBJZGVhbGx5LCB5b3VyIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBtYWtpbmcgYXQgbGVhc3QgMjU2IGJpdCBrZXlzLiAgVGhpcyBpcyBub3QKK2JlY2F1c2UgeW91IGFyZSB0byBiZSBwYXJhbm9pZC4gIEl0IGlzIGJlY2F1c2UgaWYgeW91ciBQUk5HIGhhcyBhIGJpYXMgb2YgYW55IHNvcnQgdGhlIG1vcmUgYml0cyB0aGUgYmV0dGVyLiAgRm9yCiBleGFtcGxlLCBpZiB5b3UgaGF2ZSAkXG1ib3h7UHJ9XGxlZnRbWCA9IDFccmlnaHRdID0gezEgXG92ZXIgMn0gXHBtIFxnYW1tYSQgd2hlcmUgJFx2ZXJ0IFxnYW1tYSBcdmVydCA+IDAkIHRoZW4gdGhlCiB0b3RhbCBhbW91bnQgb2YgZW50cm9weSBpbiBOIGJpdHMgaXMgJE4gXGNkb3QgLWxvZ18yXGxlZnQgKHsxIFxvdmVyIDJ9ICsgXHZlcnQgXGdhbW1hIFx2ZXJ0IFxyaWdodCkkLiAgU28gaWYgJFxnYW1tYSQKIHdlcmUgJDAuMjUkIChhIHNldmVyZSBiaWFzKSBhIDI1Ni1iaXQgc3RyaW5nIHdvdWxkIGhhdmUgYWJvdXQgMTA2IGJpdHMgb2YgZW50cm9weSB3aGVyZWFzIGEgMTI4LWJpdCBzdHJpbmcgd291bGQgaGF2ZQpAQCAtNDgxLDc0ICs1NTUsNTggQEAKIGNpcGhlcnMgYXJlIGNvbmZpZ3VyZWQgc3VjaCB0aGF0IHRoZSBkZWZhdWx0IG51bWJlciBvZiByb3VuZHMgcHJvdmlkZSBhZGVxdWF0ZSBzZWN1cml0eSBmb3IgdGhlIGdpdmVuIGJsb2NrIGFuZCBrZXkgCiBzaXplLgogCi1cc2VjdGlvbntUaGUgQ2lwaGVyIERlc2NyaXB0b3JzfQorXG15c2VjdGlvbntUaGUgQ2lwaGVyIERlc2NyaXB0b3JzfQogXGluZGV4e0NpcGhlciBEZXNjcmlwdG9yfQotVG8gZmFjaWxpdGF0ZSBhdXRvbWF0aWMgcm91dGluZXMgYW4gYXJyYXkgb2YgY2lwaGVyIGRlc2NyaXB0b3JzIGlzIHByb3ZpZGVkIGluIHRoZSBhcnJheSBgYGNpcGhlclxfZGVzY3JpcHRvcicnLiAgQW4gZWxlbWVudAotb2YgdGhpcyBhcnJheSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CitUbyBmYWNpbGl0YXRlIGF1dG9tYXRpYyByb3V0aW5lcyBhbiBhcnJheSBvZiBjaXBoZXIgZGVzY3JpcHRvcnMgaXMgcHJvdmlkZWQgaW4gdGhlIGFycmF5IFx0ZXh0aXR7Y2lwaGVyXF9kZXNjcmlwdG9yfS4gIEFuIGVsZW1lbnQKK29mIHRoaXMgYXJyYXkgaGFzIHRoZSBmb2xsb3dpbmcgKHBhcnRpYWwpIGZvcm1hdCAoU2VlIFNlY3Rpb24gXHJlZntzZWM6Y2lwaGVyZGVzY30pOgogCiBcYmVnaW57c21hbGx9CiBcYmVnaW57dmVyYmF0aW19CiBzdHJ1Y3QgX2NpcGhlcl9kZXNjcmlwdG9yIHsKKyAgIC8qKiBuYW1lIG9mIGNpcGhlciAqLwogICAgY2hhciAqbmFtZTsKKworICAgLyoqIGludGVybmFsIElEICovCiAgICB1bnNpZ25lZCBjaGFyIElEOworCisgICAvKiogbWluIGtleXNpemUgKG9jdGV0cykgKi8KICAgIGludCAgbWluX2tleV9sZW5ndGgsIAorCisgICAvKiogbWF4IGtleXNpemUgKG9jdGV0cykgKi8KICAgICAgICAgbWF4X2tleV9sZW5ndGgsIAorCisgICAvKiogYmxvY2sgc2l6ZSAob2N0ZXRzKSAqLwogICAgICAgICBibG9ja19sZW5ndGgsIAorCisgICAvKiogZGVmYXVsdCBudW1iZXIgb2Ygcm91bmRzICovCiAgICAgICAgIGRlZmF1bHRfcm91bmRzOwotICAgaW50ICAoKnNldHVwKShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLSAgIHZvaWQgKCplY2JfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLSAgIHZvaWQgKCplY2JfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLSAgIGludCAoKnRlc3QpKHZvaWQpOwotICAgdm9pZCAoKmRvbmUpKHN5bW1ldHJpY19rZXkgKnNrZXkpOyAgICAgIAotICAgaW50ICAoKmtleXNpemUpKGludCAqa2V5c2l6ZSk7Ci0KLSAgIHZvaWQgKCphY2NlbF9lY2JfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLSAgIHZvaWQgKCphY2NlbF9lY2JfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLSAgIHZvaWQgKCphY2NlbF9jYmNfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCB1bnNpZ25lZCBjaGFyICpJViwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotICAgdm9pZCAoKmFjY2VsX2NiY19kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9ja3MsIHVuc2lnbmVkIGNoYXIgKklWLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7Ci0gICB2b2lkICgqYWNjZWxfY3RyX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrcywgdW5zaWduZWQgY2hhciAqSVYsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgc3ltbWV0cmljX2tleSAqc2tleSk7Ci0gICB2b2lkICgqYWNjZWxfY2NtX21lbW9yeSkoCi0gICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKLSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIHVuc2lnbmVkIGxvbmcgbm9uY2VsZW4sCi0gICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCB1bnNpZ25lZCBsb25nIGhlYWRlcmxlbiwKLSAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCi0gICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCi0gICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAgZGlyZWN0aW9uKTsKLQorLi4uPHNuaXA+Li4uCiB9OwogXGVuZHt2ZXJiYXRpbX0KIFxlbmR7c21hbGx9CiAKLVdoZXJlIGBgbmFtZScnIGlzIHRoZSBsb3dlciBjYXNlIEFTQ0lJIHZlcnNpb24gb2YgdGhlIG5hbWUuICBUaGUgZmllbGRzIGBgbWluXF9rZXlcX2xlbmd0aCcnIGFuZCBgYG1heFxfa2V5XF9sZW5ndGgnJyAKLWFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBrZXkgc2l6ZXMgaW4gYnl0ZXMuICBUaGUgYGBibG9ja1xfbGVuZ3RoJycgbWVtYmVyIGlzIHRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIKK1doZXJlIFx0ZXh0aXR7bmFtZX0gaXMgdGhlIGxvd2VyIGNhc2UgQVNDSUkgdmVyc2lvbiBvZiB0aGUgbmFtZS4gIFRoZSBmaWVsZHMgXHRleHRpdHttaW5cX2tleVxfbGVuZ3RofSBhbmQgXHRleHRpdHttYXhcX2tleVxfbGVuZ3RofSAKK2FyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBrZXkgc2l6ZXMgaW4gYnl0ZXMuICBUaGUgXHRleHRpdHtibG9ja1xfbGVuZ3RofSBtZW1iZXIgaXMgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGNpcGhlcgogaW4gYnl0ZXMuICBBcyBhIGdvb2QgcnVsZSBvZiB0aHVtYiBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGNpcGhlciBzdXBwb3J0cwotdGhlIG1pbiBhbmQgbWF4IGtleSBsZW5ndGhzIGJ1dCBub3QgYWx3YXlzIGV2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4gIFRoZSBgYGRlZmF1bHRcX3JvdW5kcycnIGZpZWxkIGlzIHRoZSBkZWZhdWx0IG51bWJlcgordGhlIG1pbiBhbmQgbWF4IGtleSBsZW5ndGhzIGJ1dCBub3QgYWx3YXlzIGV2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4gIFRoZSBcdGV4dGl0e2RlZmF1bHRcX3JvdW5kc30gZmllbGQgaXMgdGhlIGRlZmF1bHQgbnVtYmVyCiBvZiByb3VuZHMgdGhhdCB3aWxsIGJlIHVzZWQuCiAKK0ZvciBhIHBsdWdpbiB0byBiZSBjb21wbGlhbnQgaXQgbXVzdCBwcm92aWRlIGF0IGxlYXN0IGVhY2ggZnVuY3Rpb24gbGlzdGVkIGJlZm9yZSB0aGUgYWNjZWxlcmF0b3JzIGJlZ2luLiAgQWNjZWxlcmF0b3JzIGFyZSBvcHRpb25hbCwKK2FuZCBpZiBtaXNzaW5nIHdpbGwgYmUgZW11bGF0ZWQgaW4gc29mdHdhcmUuCisKIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSBhbGwgcG9pbnRlcnMgdG8gdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBlYWNoIGNpcGhlci4gIFRoZSBlbmQgb2YgdGhlIGNpcGhlclxfZGVzY3JpcHRvciBhcnJheSBpcwotbWFya2VkIHdoZW4gYGBuYW1lJycgZXF1YWxzIHtcYmYgTlVMTH0uCittYXJrZWQgd2hlbiBcdGV4dGl0e25hbWV9IGVxdWFscyB7XGJmIE5VTEx9LgogCi1BcyBvZiB0aGlzIHJlbGVhc2UgdGhlIGN1cnJlbnQgY2lwaGVyXF9kZXNjcmlwdG9ycyBlbGVtZW50cyBhcmUKLQorQXMgb2YgdGhpcyByZWxlYXNlIHRoZSBjdXJyZW50IGNpcGhlclxfZGVzY3JpcHRvcnMgZWxlbWVudHMgYXJlIHRoZSBmb2xsb3dpbmc6CitcdmZpbAogXGluZGV4e0NpcGhlciBkZXNjcmlwdG9yIHRhYmxlfQorXGluZGV4e2Jsb3dmaXNoXF9kZXNjfSBcaW5kZXh7eHRlYVxfZGVzY30gXGluZGV4e3JjMlxfZGVzY30gXGluZGV4e3JjNVxfZGVzY30gXGluZGV4e3JjNlxfZGVzY30gXGluZGV4e3NhZmVycFxfZGVzY30gXGluZGV4e2Flc1xfZGVzY30gXGluZGV4e3R3b2Zpc2hcX2Rlc2N9CitcaW5kZXh7ZGVzXF9kZXNjfSBcaW5kZXh7ZGVzM1xfZGVzY30gXGluZGV4e25vZWtlb25cX2Rlc2N9IFxpbmRleHtza2lwamFja1xfZGVzY30gXGluZGV4e2FudWJpc1xfZGVzY30gXGluZGV4e2toYXphZFxfZGVzY30gXGluZGV4e2tzZWVkXF9kZXNjfSBcaW5kZXh7a2FzdW1pXF9kZXNjfQorXGJlZ2lue2ZpZ3VyZX1baHBidF0KIFxiZWdpbntzbWFsbH0KIFxiZWdpbntjZW50ZXJ9CiBcYmVnaW57dGFidWxhcn17fGN8Y3xjfGN8Y3xjfH0KLSAgICAgXGhsaW5lIE5hbWUgJiBEZXNjcmlwdG9yIE5hbWUgJiBCbG9jayBTaXplICYgS2V5IFJhbmdlICYgUm91bmRzIFxcCisgICAgIFxobGluZSBcdGV4dGJme05hbWV9ICYgXHRleHRiZntEZXNjcmlwdG9yIE5hbWV9ICYgXHRleHRiZntCbG9jayBTaXplfSAmIFx0ZXh0YmZ7S2V5IFJhbmdlfSAmIFx0ZXh0YmZ7Um91bmRzfSBcXAogICAgICBcaGxpbmUgQmxvd2Zpc2ggJiBibG93ZmlzaFxfZGVzYyAmIDggJiA4ICRcbGRvdHMkIDU2ICYgMTYgXFwKICAgICAgXGhsaW5lIFgtVGVhICYgeHRlYVxfZGVzYyAmIDggJiAxNiAmIDMyIFxcCiAgICAgIFxobGluZSBSQzIgJiByYzJcX2Rlc2MgJiA4ICYgOCAkXGxkb3RzJCAxMjggJiAxNiBcXApAQCAtNTY1LDU2ICs2MjMsNjMgQEAKICAgICAgXGhsaW5lIFNraXBqYWNrICYgc2tpcGphY2tcX2Rlc2MgJiA4ICYgMTAgJiAzMiBcXAogICAgICBcaGxpbmUgQW51YmlzICYgYW51YmlzXF9kZXNjICYgMTYgJiAxNiAkXGxkb3RzJCA0MCAmIDEyICRcbGRvdHMkIDE4IFxcCiAgICAgIFxobGluZSBLaGF6YWQgJiBraGF6YWRcX2Rlc2MgJiA4ICYgMTYgJiA4IFxcCisgICAgIFxobGluZSBTRUVEICAgJiBrc2VlZFxfZGVzYyAmIDE2ICYgMTYgJiAxNiBcXAorICAgICBcaGxpbmUgS0FTVU1JICYga2FzdW1pXF9kZXNjICYgOCAmIDE2ICYgOCBcXAogICAgICBcaGxpbmUKIFxlbmR7dGFidWxhcn0KIFxlbmR7Y2VudGVyfQogXGVuZHtzbWFsbH0KK1xjYXB0aW9ue0J1aWx0LS1JbiBTb2Z0d2FyZSBDaXBoZXJzfQorXGVuZHtmaWd1cmV9CiAKIFxzdWJzZWN0aW9ue05vdGVzfQogXGJlZ2lue3NtYWxsfQogXGJlZ2lue2VudW1lcmF0ZX0KIFxpdGVtCi1Gb3IgQUVTIChhbHNvIGtub3duIGFzIFJpam5kYWVsKSB0aGVyZSBhcmUgZm91ciBkZXNjcmlwdG9ycyB3aGljaCBjb21wbGljYXRlIGlzc3VlcyBhIGxpdHRsZS4gIFRoZSBkZXNjcmlwdG9ycyAKLXJpam5kYWVsXF9kZXNjIGFuZCByaWpuZGFlbFxfZW5jXF9kZXNjIHByb3ZpZGUgdGhlIGNpcGhlciBuYW1lZCBgYHJpam5kYWVsJycuICBUaGUgZGVzY3JpcHRvcnMgYWVzXF9kZXNjIGFuZCAKLWFlc1xfZW5jXF9kZXNjIHByb3ZpZGUgdGhlIGNpcGhlciBuYW1lIGBgYWVzJycuICBGdW5jdGlvbmFsbHkgYm90aCBgYHJpam5kYWVsJycgYW5kIGBgYWVzJycgYXJlIHRoZSBzYW1lIGNpcGhlci4gIFRoZQotb25seSBkaWZmZXJlbmNlIGlzIHdoZW4geW91IGNhbGwgZmluZFxfY2lwaGVyKCkgeW91IGhhdmUgdG8gcGFzcyB0aGUgY29ycmVjdCBuYW1lLiAgVGhlIGNpcGhlciBkZXNjcmlwdG9ycyB3aXRoIGBgZW5jJycgCitGb3IgQUVTLCAoYWxzbyBrbm93biBhcyBSaWpuZGFlbCkgdGhlcmUgYXJlIGZvdXIgZGVzY3JpcHRvcnMgd2hpY2ggY29tcGxpY2F0ZSBpc3N1ZXMgYSBsaXR0bGUuICBUaGUgZGVzY3JpcHRvcnMgCityaWpuZGFlbFxfZGVzYyBhbmQgcmlqbmRhZWxcX2VuY1xfZGVzYyBwcm92aWRlIHRoZSBjaXBoZXIgbmFtZWQgXHRleHRpdHtyaWpuZGFlbH0uICBUaGUgZGVzY3JpcHRvcnMgYWVzXF9kZXNjIGFuZCAKK2Flc1xfZW5jXF9kZXNjIHByb3ZpZGUgdGhlIGNpcGhlciBuYW1lIFx0ZXh0aXR7YWVzfS4gIEZ1bmN0aW9uYWxseSBib3RoIFx0ZXh0aXR7cmlqbmRhZWx9IGFuZCBcdGV4dGl0e2Flc30gYXJlIHRoZSBzYW1lIGNpcGhlci4gIFRoZQorb25seSBkaWZmZXJlbmNlIGlzIHdoZW4geW91IGNhbGwgZmluZFxfY2lwaGVyKCkgeW91IGhhdmUgdG8gcGFzcyB0aGUgY29ycmVjdCBuYW1lLiAgVGhlIGNpcGhlciBkZXNjcmlwdG9ycyB3aXRoIFx0ZXh0aXR7ZW5jfSAKIGluIHRoZSBtaWRkbGUgKGUuZy4gcmlqbmRhZWxcX2VuY1xfZGVzYykgYXJlIHJlbGF0ZWQgdG8gYW4gaW1wbGVtZW50YXRpb24gb2YgUmlqbmRhZWwgd2l0aCBvbmx5IHRoZSBlbmNyeXB0aW9uIHJvdXRpbmUKLWFuZCB0YWJsZXMuICBUaGUgZGVjcnlwdGlvbiBhbmQgc2VsZi0tdGVzdCBmdW5jdGlvbiBwb2ludGVycyBvZiBib3RoIGBgZW5jcnlwdCBvbmx5JycgZGVzY3JpcHRvcnMgYXJlIHNldCB0byBcdGV4dGJme05VTEx9IGFuZCAKK2FuZCB0YWJsZXMuICBUaGUgZGVjcnlwdGlvbiBhbmQgc2VsZi0tdGVzdCBmdW5jdGlvbiBwb2ludGVycyBvZiBib3RoIFx0ZXh0aXR7ZW5jcnlwdCBvbmx5fSBkZXNjcmlwdG9ycyBhcmUgc2V0IHRvIFx0ZXh0YmZ7TlVMTH0gYW5kIAogc2hvdWxkIG5vdCBiZSBjYWxsZWQuCiAKLVRoZSBgYGVuY3J5cHQgb25seScnIGRlc2NyaXB0b3JzIGFyZSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IG9ubHkgdXNlIHRoZSBlbmNyeXB0aW9uIGZ1bmN0aW9uIG9mIHRoZSBjaXBoZXIuICBBbGdvcml0aG1zIHN1Y2gKLWFzIEVBWCwgUE1BQyBhbmQgT01BQyBvbmx5IHJlcXVpcmUgdGhlIGVuY3J5cHRpb24gZnVuY3Rpb24uICBTbyBmYXIgdGhpcyBgYGVuY3J5cHQgb25seScnIGZ1bmN0aW9uYWxpdHkgaGFzIG9ubHkgYmVlbiBpbXBsZW1lbnRlZCBmb3IKK1RoZSBcdGV4dGl0e2VuY3J5cHQgb25seX0gZGVzY3JpcHRvcnMgYXJlIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHRoYXQgb25seSB1c2UgdGhlIGVuY3J5cHRpb24gZnVuY3Rpb24gb2YgdGhlIGNpcGhlci4gIEFsZ29yaXRobXMgc3VjaAorYXMgRUFYLCBQTUFDIGFuZCBPTUFDIG9ubHkgcmVxdWlyZSB0aGUgZW5jcnlwdGlvbiBmdW5jdGlvbi4gIFNvIGZhciB0aGlzIFx0ZXh0aXR7ZW5jcnlwdCBvbmx5fSBmdW5jdGlvbmFsaXR5IGhhcyBvbmx5IGJlZW4gaW1wbGVtZW50ZWQgZm9yCiBSaWpuZGFlbCBhcyBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZSBmb3IgdGhpcyBjaXBoZXIuCiAKIFxpdGVtCi1Ob3RlIHRoYXQgZm9yIGBgREVTJycgYW5kIGBgM0RFUycnIHRoZXkgdXNlIDggYW5kIDI0IGJ5dGUga2V5cyBidXQgb25seSA3IGFuZCAyMSBbcmVzcGVjdGl2ZWx5XSBieXRlcyBvZiB0aGUga2V5cyBhcmUgaW4KK05vdGUgdGhhdCBmb3IgXHRleHRpdHtERVN9IGFuZCBcdGV4dGl0ezNERVN9IHRoZXkgdXNlIDggYW5kIDI0IGJ5dGUga2V5cyBidXQgb25seSA3IGFuZCAyMSBbcmVzcGVjdGl2ZWx5XSBieXRlcyBvZiB0aGUga2V5cyBhcmUgaW4KIGZhY3QgdXNlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIGVuY3J5cHRpb24uICBNeSBzdWdnZXN0aW9uIGlzIGp1c3QgdG8gdXNlIHJhbmRvbSA4LzI0IGJ5dGUga2V5cyBpbnN0ZWFkIG9mIHRyeWluZyB0byBtYWtlIGEgOC8yNAogYnl0ZSBzdHJpbmcgZnJvbSB0aGUgcmVhbCA3LzIxIGJ5dGUga2V5LgogCiBcaXRlbQotTm90ZSB0aGF0IGBgVHdvZmlzaCcnIGhhcyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IHRha2UgcGxhY2UgYXQgYnVpbGQgdGltZS4gIFRoZXNlIG9wdGlvbnMgYXJlIGZvdW5kIGluCi10aGUgZmlsZSBgYHRvbWNyeXB0XF9jZmcuaCcnLiAgVGhlIGZpcnN0IG9wdGlvbiBpcyBgYFRXT0ZJU0hcX1NNQUxMJycgd2hpY2ggd2hlbiBkZWZpbmVkIHdpbGwgZm9yY2UgdGhlIFR3b2Zpc2ggY29kZQotdG8gbm90IHByZS1jb21wdXRlIHRoZSBUd29maXNoIGBgJGcoWCkkJycgZnVuY3Rpb24gYXMgYSBzZXQgb2YgZm91ciAkOCBcdGltZXMgMzIkIHMtYm94ZXMuICBUaGlzIG1lYW5zIHRoYXQgYSBzY2hlZHVsZWQKLWtleSB3aWxsIHJlcXVpcmUgbGVzcyByYW0gYnV0IHRoZSByZXN1bHRpbmcgY2lwaGVyIHdpbGwgYmUgc2xvd2VyLiAgVGhlIHNlY29uZCBvcHRpb24gaXMgYGBUV09GSVNIXF9UQUJMRVMnJyB3aGljaCB3aGVuCitOb3RlIHRoYXQgXHRleHRpdHtUd29maXNofSBoYXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKEZpZ3VyZSBccmVme2ZpZzp0d29maXNob3B0c30pIHRoYXQgdGFrZSBwbGFjZSBhdCBidWlsZCB0aW1lLiAgVGhlc2Ugb3B0aW9ucyBhcmUgZm91bmQgaW4KK3RoZSBmaWxlIFx0ZXh0aXR7dG9tY3J5cHRcX2NmZy5ofS4gIFRoZSBmaXJzdCBvcHRpb24gaXMgXHRleHRpdHtUV09GSVNIXF9TTUFMTH0gd2hpY2ggd2hlbiBkZWZpbmVkIHdpbGwgZm9yY2UgdGhlIFR3b2Zpc2ggY29kZQordG8gbm90IHByZS1jb21wdXRlIHRoZSBUd29maXNoIFx0ZXh0aXR7JGcoWCkkfSBmdW5jdGlvbiBhcyBhIHNldCBvZiBmb3VyICQ4IFx0aW1lcyAzMiQgcy1ib3hlcy4gIFRoaXMgbWVhbnMgdGhhdCBhIHNjaGVkdWxlZAora2V5IHdpbGwgcmVxdWlyZSBsZXNzIHJhbSBidXQgdGhlIHJlc3VsdGluZyBjaXBoZXIgd2lsbCBiZSBzbG93ZXIuICBUaGUgc2Vjb25kIG9wdGlvbiBpcyBcdGV4dGl0e1RXT0ZJU0hcX1RBQkxFU30gd2hpY2ggd2hlbgogZGVmaW5lZCB3aWxsIGZvcmNlIHRoZSBUd29maXNoIGNvZGUgdG8gdXNlIHByZS1jb21wdXRlZCB0YWJsZXMgZm9yIHRoZSB0d28gcy1ib3hlcyAkcV8wLCBxXzEkIGFzIHdlbGwgYXMgdGhlIG11bHRpcGxpY2F0aW9uCiBieSB0aGUgcG9seW5vbWlhbHMgNUIgYW5kIEVGIHVzZWQgaW4gdGhlIE1EUyBtdWx0aXBsaWNhdGlvbi4gIEFzIGEgcmVzdWx0IHRoZSBjb2RlIGlzIGZhc3RlciBhbmQgc2xpZ2h0bHkgbGFyZ2VyLiAgVGhlCi1zcGVlZCBpbmNyZWFzZSBpcyB1c2VmdWwgd2hlbiBgYFRXT0ZJU0hcX1NNQUxMJycgaXMgZGVmaW5lZCBzaW5jZSB0aGUgcy1ib3hlcyBhbmQgTURTIG11bHRpcGx5IGZvcm0gdGhlIGhlYXJ0IG9mIHRoZQorc3BlZWQgaW5jcmVhc2UgaXMgdXNlZnVsIHdoZW4gXHRleHRpdHtUV09GSVNIXF9TTUFMTH0gaXMgZGVmaW5lZCBzaW5jZSB0aGUgcy1ib3hlcyBhbmQgTURTIG11bHRpcGx5IGZvcm0gdGhlIGhlYXJ0IG9mIHRoZQogVHdvZmlzaCByb3VuZCBmdW5jdGlvbi4KIAotXGluZGV4e1R3b2Zpc2ggYnVpbGQgb3B0aW9uc30KK1xiZWdpbntmaWd1cmV9W2hwYnRdCitcaW5kZXh7VHdvZmlzaCBidWlsZCBvcHRpb25zfSBcaW5kZXh7VFdPRklTSFxfU01BTEx9IFxpbmRleHtUV09GSVNIXF9UQUJMRVN9CiBcYmVnaW57c21hbGx9CiBcYmVnaW57Y2VudGVyfQogXGJlZ2lue3RhYnVsYXJ9e3xsfGx8bHx9Ci1caGxpbmUgVFdPRklTSFxfU01BTEwgJiBUV09GSVNIXF9UQUJMRVMgJiBTcGVlZCBhbmQgTWVtb3J5IChwZXIga2V5KSBcXAorXGhsaW5lIFx0ZXh0YmZ7VFdPRklTSFxfU01BTEx9ICYgXHRleHRiZntUV09GSVNIXF9UQUJMRVN9ICYgXHRleHRiZntTcGVlZCBhbmQgTWVtb3J5IChwZXIga2V5KX0gXFwKIFxobGluZSB1bmRlZmluZWQgJiB1bmRlZmluZWQgJiBWZXJ5IGZhc3QsIDQuMktCIG9mIHJhbS4gXFwKLVxobGluZSB1bmRlZmluZWQgJiBkZWZpbmVkICYgRmFzdGVyIGtleXNldHVwLCBsYXJnZXIgY29kZS4gXFwKK1xobGluZSB1bmRlZmluZWQgJiBkZWZpbmVkICYgRmFzdGVyIGtleSBzZXR1cCwgbGFyZ2VyIGNvZGUuIFxcCiBcaGxpbmUgZGVmaW5lZCAmIHVuZGVmaW5lZCAmIFZlcnkgc2xvdywgMC4yS0Igb2YgcmFtLiBcXAogXGhsaW5lIGRlZmluZWQgJiBkZWZpbmVkICYgRmFzdGVyLCAwLjJLQiBvZiByYW0sIGxhcmdlciBjb2RlLiBcXAogXGhsaW5lCiBcZW5ke3RhYnVsYXJ9CiBcZW5ke2NlbnRlcn0KIFxlbmR7c21hbGx9Ci0KK1xjYXB0aW9ue1R3b2Zpc2ggQnVpbGQgT3B0aW9uc30KK1xsYWJlbHtmaWc6dHdvZmlzaG9wdHN9CitcZW5ke2ZpZ3VyZX0KIFxlbmR7ZW51bWVyYXRlfQogXGVuZHtzbWFsbH0KIApAQCAtNjIzLDkgKzY4OCwxMCBAQAogXGJlZ2lue3ZlcmJhdGltfQogaW50IGZpbmRfY2lwaGVyKGNoYXIgKm5hbWUpCiBcZW5ke3ZlcmJhdGltfQotV2hpY2ggd2lsbCBzZWFyY2ggZm9yIGEgZ2l2ZW4gbmFtZSBpbiB0aGUgYXJyYXkuICBJdCByZXR1cm5zIG5lZ2F0aXZlIG9uZSBpZiB0aGUgY2lwaGVyIGlzIG5vdCBmb3VuZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKK1doaWNoIHdpbGwgc2VhcmNoIGZvciBhIGdpdmVuIG5hbWUgaW4gdGhlIGFycmF5LiAgSXQgcmV0dXJucyAkLTEkIGlmIHRoZSBjaXBoZXIgaXMgbm90IGZvdW5kLCBvdGhlcndpc2UgaXQgcmV0dXJucwogdGhlIGxvY2F0aW9uIGluIHRoZSBhcnJheSB3aGVyZSB0aGUgY2lwaGVyIHdhcyBmb3VuZC4gIEZvciBleGFtcGxlLCB0byBpbmRpcmVjdGx5IHNldHVwIEJsb3dmaXNoIHlvdSBjYW4gYWxzbyB1c2U6CiBcYmVnaW57c21hbGx9CitcaW5kZXh7cmVnaXN0ZXJcX2NpcGhlcigpfSBcaW5kZXh7ZmluZFxfY2lwaGVyKCl9IFxpbmRleHtlcnJvclxfdG9cX3N0cmluZygpfQogXGJlZ2lue3ZlcmJhdGltfQogI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CiBpbnQgbWFpbih2b2lkKQpAQCAtNjQwLDkgKzcwNiwxMSBAQAogICAgICAgcmV0dXJuIC0xOwogICAgfQogCi0gICAvKiBnZW5lcmljIGNhbGwgdG8gZnVuY3Rpb24gKGFzc3VtaW5nIHRoZSBrZXkgaW4ga2V5W10gd2FzIGFscmVhZHkgc2V0dXApICovCi0gICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2ZpbmRfY2lwaGVyKCJibG93ZmlzaCIpXS5zZXR1cChrZXksIDgsIDAsICZza2V5KSkgIT0gCi0gICAgICAgQ1JZUFRfT0spIHsKKyAgIC8qIGdlbmVyaWMgY2FsbCB0byBmdW5jdGlvbiAoYXNzdW1pbmcgdGhlIGtleSAKKyAgICAqIGluIGtleVtdIHdhcyBhbHJlYWR5IHNldHVwKSAqLworICAgaWYgKChlcnIgPSAKKyAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbZmluZF9jaXBoZXIoImJsb3dmaXNoIildLgorICAgICAgICAgIHNldHVwKGtleSwgOCwgMCwgJnNrZXkpKSAhPSBDUllQVF9PSykgewogICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIHVwIEJsb3dmaXNoOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIC0xOwogICAgfQpAQCAtNjUyLDcgKzcyMCw3IEBACiBcZW5ke3ZlcmJhdGltfQogXGVuZHtzbWFsbH0KIAotQSBnb29kIHNhZmV0eSB3b3VsZCBiZSB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGBgZmluZFxfY2lwaGVyKCknJyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBkZXNpcmVkIGZ1bmN0aW9uLiAgSW4gb3JkZXIKK0EgZ29vZCBzYWZldHkgd291bGQgYmUgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBcdGV4dGl0e2ZpbmRcX2NpcGhlcigpfSBiZWZvcmUgYWNjZXNzaW5nIHRoZSBkZXNpcmVkIGZ1bmN0aW9uLiAgSW4gb3JkZXIKIHRvIHVzZSBhIGNpcGhlciB3aXRoIHRoZSBkZXNjcmlwdG9yIHRhYmxlIHlvdSBtdXN0IHJlZ2lzdGVyIGl0IGZpcnN0IHVzaW5nOgogXGluZGV4e3JlZ2lzdGVyXF9jaXBoZXIoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KQEAgLTY2NSw3ICs3MzMsNyBAQAogXGJlZ2lue3ZlcmJhdGltfQogaW50IHVucmVnaXN0ZXJfY2lwaGVyKGNvbnN0IHN0cnVjdCBfY2lwaGVyX2Rlc2NyaXB0b3IgKmNpcGhlcik7CiBcZW5ke3ZlcmJhdGltfQotV2hpY2ggcmV0dXJucyB7XGJmIENSWVBUXF9PS30gaWYgaXQgcmVtb3ZlcyBpdCBvdGhlcndpc2UgaXQgcmV0dXJucyB7XGJmIENSWVBUXF9FUlJPUn0uICBDb25zaWRlcjoKK1doaWNoIHJldHVybnMge1xiZiBDUllQVFxfT0t9IGlmIGl0IHJlbW92ZXMgdGhlIGNpcGhlciwgb3RoZXJ3aXNlIGl0IHJldHVybnMge1xiZiBDUllQVFxfRVJST1J9LiAgCiBcYmVnaW57c21hbGx9CiBcYmVnaW57dmVyYmF0aW19CiAjaW5jbHVkZSA8dG9tY3J5cHQuaD4KQEAgLTY5MSw5ICs3NTksOSBAQAogfQogXGVuZHt2ZXJiYXRpbX0KIFxlbmR7c21hbGx9Ci1UaGlzIHNuaXBwZXQgaXMgYSBzbWFsbCBwcm9ncmFtIHRoYXQgcmVnaXN0ZXJzIG9ubHkgUmlqbmRhZWwgb25seS4gIAorVGhpcyBzbmlwcGV0IGlzIGEgc21hbGwgcHJvZ3JhbSB0aGF0IHJlZ2lzdGVycyBSaWpuZGFlbC4gIAogCi1cc2VjdGlvbntTeW1tZXRyaWMgTW9kZXMgb2YgT3BlcmF0aW9uc30KK1xteXNlY3Rpb257U3ltbWV0cmljIE1vZGVzIG9mIE9wZXJhdGlvbnN9CiBcc3Vic2VjdGlvbntCYWNrZ3JvdW5kfQogQSB0eXBpY2FsIHN5bW1ldHJpYyBibG9jayBjaXBoZXIgY2FuIGJlIHVzZWQgaW4gY2hhaW5pbmcgbW9kZXMgdG8gZWZmZWN0aXZlbHkgZW5jcnlwdCBtZXNzYWdlcyBsYXJnZXIgdGhhbiB0aGUgYmxvY2sKIHNpemUgb2YgdGhlIGNpcGhlci4gIEdpdmVuIGEga2V5ICRrJCwgYSBwbGFpbnRleHQgJFAkIGFuZCBhIGNpcGhlciAkRSQgd2Ugc2hhbGwgZGVub3RlIHRoZSBlbmNyeXB0aW9uIG9mIHRoZSBibG9jawpAQCAtNzYzLDg0ICs4MzEsMTE2IEBACiBhY2NvbXBsaXNoIHRoaXMgYnkgYnVmZmVyaW5nIHRoZSBkYXRhIHJlcXVpcmVkIHRvIGNvbXBsZXRlIGEgYmxvY2suICBUaGlzIGFsbG93cyB5b3UgdG8gZW5jcnlwdCBvciBkZWNyeXB0IGFueSBzaXplIAogYmxvY2sgb2YgbWVtb3J5IHdpdGggZWl0aGVyIG9mIHRoZSB0aHJlZSBtb2Rlcy4KIAotVGhlIEVDQiBhbmQgQ0JDIG1vZGVzIHByb2Nlc3MgYmxvY2tzIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIGNpcGhlciBhdCBhIHRpbWUuICBUaGVyZWZvcmUgdGhleSBhcmUgbGVzcyBmbGV4aWJsZSB0aGFuIHRoZQorVGhlIEVDQiBhbmQgQ0JDIG1vZGVzIHByb2Nlc3MgYmxvY2tzIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIGNpcGhlciBhdCBhIHRpbWUuICBUaGVyZWZvcmUsIHRoZXkgYXJlIGxlc3MgZmxleGlibGUgdGhhbiB0aGUKIG90aGVyIG1vZGVzLgogCitcc3Vic2VjdGlvbntDaXBoZXJ0ZXh0IFN0ZWFsaW5nfQorXGluZGV4e0NpcGhlcnRleHQgc3RlYWxpbmd9CitDaXBoZXJ0ZXh0IHN0ZWFsaW5nIGlzIGEgbWV0aG9kIG9mIGRlYWxpbmcgd2l0aCBtZXNzYWdlcyBpbiBDQkMgbW9kZSB3aGljaCBhcmUgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIGxlbmd0aC4gIFRoaXMgaXMgYWNjb21wbGlzaGVkCitieSBlbmNyeXB0aW5nIHRoZSBsYXN0IGNpcGhlcnRleHQgYmxvY2sgaW4gRUNCIG1vZGUsIGFuZCBYT1InaW5nIHRoZSBvdXRwdXQgYWdhaW5zdCB0aGUgbGFzdCBwYXJ0aWFsIGJsb2NrIG9mIHBsYWludGV4dC4gIExpYlRvbUNyeXB0IGRvZXMgbm90CitzdXBwb3J0IHRoaXMgbW9kZSBkaXJlY3RseSBidXQgaXQgaXMgZmFpcmx5IGVhc3kgdG8gZW11bGF0ZSB3aXRoIGEgY2FsbCB0byB0aGUgY2lwaGVyJ3MgZWNiXF9lbmNyeXB0KCkgY2FsbGJhY2sgZnVuY3Rpb24uICAKKworVGhlIG1vcmUgc2FuZSB3YXkgdG8gZGVhbCB3aXRoIHBhcnRpYWwgYmxvY2tzIGlzIHRvIHBhZCB0aGVtIHdpdGggemVyb2VzLCBhbmQgdGhlbiB1c2UgQ0JDIG5vcm1hbGx5LiAgCisKIFxzdWJzZWN0aW9ue0luaXRpYWxpemF0aW9ufQogXGluZGV4e0NCQyBNb2RlfSBcaW5kZXh7Q1RSIE1vZGV9CiBcaW5kZXh7T0ZCIE1vZGV9IFxpbmRleHtDRkIgTW9kZX0KIFRoZSBsaWJyYXJ5IHByb3ZpZGVzIHNpbXBsZSBzdXBwb3J0IHJvdXRpbmVzIGZvciBoYW5kbGluZyBDQkMsIENUUiwgQ0ZCLCBPRkIgYW5kIEVDQiBlbmNvZGVkIG1lc3NhZ2VzLiAgQXNzdW1pbmcgdGhlIG1vZGUgCi15b3Ugd2FudCBpcyBYWFggdGhlcmUgaXMgYSBzdHJ1Y3R1cmUgY2FsbGVkIGBgc3ltbWV0cmljXF9YWFgnJyB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8KK3lvdSB3YW50IGlzIFhYWCB0aGVyZSBpcyBhIHN0cnVjdHVyZSBjYWxsZWQgXHRleHRpdHtzeW1tZXRyaWNcX1hYWH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvCiB1c2UgdGhhdCBtb2RlLiAgVGhleSBoYXZlIGlkZW50aWNhbCBzZXR1cCByb3V0aW5lcyAoZXhjZXB0IENUUiBhbmQgRUNCIG1vZGUpOgogXGluZGV4e2VjYlxfc3RhcnQoKX0gXGluZGV4e2NmYlxfc3RhcnQoKX0gXGluZGV4e2NiY1xfc3RhcnQoKX0gXGluZGV4e29mYlxfc3RhcnQoKX0gXGluZGV4e2N0clxfc3RhcnQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBYWFhfc3RhcnQoaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIAotICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIAotICAgICAgICAgICAgICBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX1hYWCAqWFhYKTsKK2ludCBYWFhfc3RhcnQoICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBrZXlsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX1hYWCAqWFhYKTsKIAotaW50IGN0cl9zdGFydCggICAgICAgICAgICAgICBpbnQgICBjaXBoZXIsCitpbnQgY3RyX3N0YXJ0KCAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwKICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsCi0gICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgICAgaW50IGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCBpbnQgY3RyX21vZGUsCi0gICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0NUUiAqY3RyKTsKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY3RyX21vZGUsCisgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19DVFIgKmN0cik7CiAKLWludCBlY2Jfc3RhcnQoaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCAKLSAgICAgICAgICAgICAgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19FQ0IgKmVjYik7CitpbnQgZWNiX3N0YXJ0KCAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsIAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfRUNCICplY2IpOwogXGVuZHt2ZXJiYXRpbX0KIAotSW4gZWFjaCBjYXNlIGBgY2lwaGVyJycgaXMgdGhlIGluZGV4IGludG8gdGhlIGNpcGhlclxfZGVzY3JpcHRvciBhcnJheSBvZiB0aGUgY2lwaGVyIHlvdSB3YW50IHRvIHVzZS4gIFRoZSBgYElWJycgdmFsdWUgaXMgCitJbiBlYWNoIGNhc2UsIFx0ZXh0aXR7Y2lwaGVyfSBpcyB0aGUgaW5kZXggaW50byB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIGFycmF5IG9mIHRoZSBjaXBoZXIgeW91IHdhbnQgdG8gdXNlLiAgVGhlIFx0ZXh0aXR7SVZ9IHZhbHVlIGlzIAogdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciB0byBiZSB1c2VkIHdpdGggdGhlIGNpcGhlci4gIFlvdSBtdXN0IGZpbGwgdGhlIElWIHlvdXJzZWxmIGFuZCBpdCBpcyBhc3N1bWVkIHRoZXkgYXJlIHRoZSBzYW1lIAotbGVuZ3RoIGFzIHRoZSBibG9jayBzaXplXGZvb3Rub3Rle0luIG90aGVyd29yZHMgdGhlIHNpemUgb2YgYSBibG9jayBvZiBwbGFpbnRleHQgZm9yIHRoZSBjaXBoZXIsIGUuZy4gOCBmb3IgREVTLCAxNiBmb3IgQUVTLCBldGMufSAKK2xlbmd0aCBhcyB0aGUgYmxvY2sgc2l6ZVxmb290bm90ZXtJbiBvdGhlciB3b3JkcyB0aGUgc2l6ZSBvZiBhIGJsb2NrIG9mIHBsYWludGV4dCBmb3IgdGhlIGNpcGhlciwgZS5nLiA4IGZvciBERVMsIDE2IGZvciBBRVMsIGV0Yy59IAogb2YgdGhlIGNpcGhlciB5b3UgY2hvb3NlLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIElWICBiZSByYW5kb20gZm9yIGVhY2ggdW5pcXVlIG1lc3NhZ2UgeW91IHdhbnQgdG8gZW5jcnlwdC4gIFRoZSAKLXBhcmFtZXRlcnMgYGBrZXknJywgYGBrZXlsZW4nJyBhbmQgYGBudW1cX3JvdW5kcycnIGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUgWFhYXF9zZXR1cCgpIGZ1bmN0aW9uIGNhbGwuICBUaGUgZmluYWwgcGFyYW1ldGVyIAorcGFyYW1ldGVycyBcdGV4dGl0e2tleX0sIFx0ZXh0aXR7a2V5bGVufSBhbmQgXHRleHRpdHtudW1cX3JvdW5kc30gYXJlIHRoZSBzYW1lIGFzIGluIHRoZSBYWFhcX3NldHVwKCkgZnVuY3Rpb24gY2FsbC4gIFRoZSBmaW5hbCBwYXJhbWV0ZXIgCiBpcyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB5b3Ugd2FudCB0byBob2xkIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uLgogCiAKLUluIHRoZSBjYXNlIG9mIENUUiBtb2RlIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGBgY3RyXF9tb2RlJycgd2hpY2ggc3BlY2lmaWVzIHRoZSBtb2RlIHRoYXQgdGhlIGNvdW50ZXIgaXMgdG8gYmUgdXNlZCBpbi4KLUlmIFx0ZXh0YmZ7Q1RSXF9DT1VOVEVSXF9MSVRUTEVcX0VORElBTn0gd2FzIHNwZWNpZmllZCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGxpdHRsZSBlbmRpYW4gdmFsdWUuICBPdGhlcndpc2UsIGlmIAotXHRleHRiZntDVFJcX0NPVU5URVJcX0JJR1xfRU5ESUFOfSB3YXMgc3BlY2lmaWVkIHRoZSBjb3VudGVyIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGJpZyBlbmRpYW4gdmFsdWUuCitJbiB0aGUgY2FzZSBvZiBDVFIgbW9kZSB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciBcdGV4dGl0e2N0clxfbW9kZX0gd2hpY2ggc3BlY2lmaWVzIHRoZSBtb2RlIHRoYXQgdGhlIGNvdW50ZXIgaXMgdG8gYmUgdXNlZCBpbi4KK0lmIFx0ZXh0YmZ7Q1RSXF9DT1VOVEVSXF8gTElUVExFXF9FTkRJQU59IHdhcyBzcGVjaWZpZWQgdGhlbiB0aGUgY291bnRlciB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBsaXR0bGUgZW5kaWFuIHZhbHVlLiAgT3RoZXJ3aXNlLCBpZiAKK1x0ZXh0YmZ7Q1RSXF9DT1VOVEVSXF9CSUdcX0VORElBTn0gd2FzIHNwZWNpZmllZCB0aGUgY291bnRlciB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBiaWcgZW5kaWFuIHZhbHVlLiAgQXMgb2YgdjEuMTUgdGhlIFJGQyAzNjg2IHN0eWxlIG9mCitpbmNyZW1lbnQgdGhlbiBlbmNyeXB0IGlzIGFsc28gc3VwcG9ydGVkLiAgQnkgT1InaW5nIFx0ZXh0YmZ7TFRDXF9DVFJcX1JGQzM2ODZ9IHdpdGggdGhlIENUUiBcdGV4dGl0e21vZGV9IHZhbHVlLCBjdHJcX3N0YXJ0KCkgd2lsbCBpbmNyZW1lbnQKK3RoZSBjb3VudGVyIGJlZm9yZSBlbmNyeXB0aW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KIAotVGhlIHJvdXRpbmVzIHJldHVybiB7XGJmIENSWVBUXF9PS30gaWYgdGhlIGNpcGhlciBpbml0aWFsaXplZCBjb3JyZWN0bHksIG90aGVyd2lzZSB0aGV5IHJldHVybiBhbiBlcnJvciBjb2RlLiAgCitUaGUgcm91dGluZXMgcmV0dXJuIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgY2lwaGVyIGluaXRpYWxpemVkIGNvcnJlY3RseSwgb3RoZXJ3aXNlLCB0aGV5IHJldHVybiBhbiBlcnJvciBjb2RlLiAgCiAKIFxzdWJzZWN0aW9ue0VuY3J5cHRpb24gYW5kIERlY3J5cHRpb259CiBUbyBhY3R1YWxseSBlbmNyeXB0IG9yIGRlY3J5cHQgdGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgcHJvdmlkZWQ6CiBcaW5kZXh7ZWNiXF9lbmNyeXB0KCl9IFxpbmRleHtlY2JcX2RlY3J5cHQoKX0gXGluZGV4e2NmYlxfZW5jcnlwdCgpfSBcaW5kZXh7Y2ZiXF9kZWNyeXB0KCl9IAogXGluZGV4e2NiY1xfZW5jcnlwdCgpfSBcaW5kZXh7Y2JjXF9kZWNyeXB0KCl9IFxpbmRleHtvZmJcX2VuY3J5cHQoKX0gXGluZGV4e29mYlxfZGVjcnlwdCgpfSBcaW5kZXh7Y3RyXF9lbmNyeXB0KCl9IFxpbmRleHtjdHJcX2RlY3J5cHQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBYWFhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfWVlZICpZWVkpOwotaW50IFhYWF9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19ZWVkgKllZWSk7Ci1cZW5ke3ZlcmJhdGltfQotV2hlcmUgYGBYWFgnJyBpcyBvbmUgb2YgJFxsYnJhY2UgZWNiLCBjYmMsIGN0ciwgY2ZiLCBvZmIgXHJicmFjZSQuICAKK2ludCBYWFhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX1lZWSAqWVlZKTsKIAotSW4gYWxsIGNhc2VzIGBgbGVuJycgaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAoYXMgbnVtYmVyIG9mIG9jdGV0cykgdG8gZW5jcnlwdCBvciBkZWNyeXB0LiAgVGhlIENUUiwgT0ZCIGFuZCBDRkIgbW9kZXMgYXJlIG9yZGVyIHNlbnNpdGl2ZSBidXQgbm90Ci1jaHVuayBzZW5zaXRpdmUuICBUaGF0IGlzIHlvdSBjYW4gZW5jcnlwdCBgYEFCQ0RFRicnIGluIHRocmVlIGNhbGxzIGxpa2UgYGBBQicnLCBgYENEJycsIGBgRUYnJyBvciB0d28gbGlrZSBgYEFCQ0RFJycgYW5kIGBgRicnCi1hbmQgZW5kIHVwIHdpdGggdGhlIHNhbWUgY2lwaGVydGV4dC4gIEhvd2V2ZXIsIGVuY3J5cHRpbmcgYGBBQkMnJyBhbmQgYGBEQUJDJycgd2lsbCByZXN1bHQgaW4gZGlmZmVyZW50IGNpcGhlcnRleHRzLiAgQWxsCitpbnQgWFhYX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19ZWVkgKllZWSk7CitcZW5ke3ZlcmJhdGltfQorV2hlcmUgXHRleHRpdHtYWFh9IGlzIG9uZSBvZiAkXGxicmFjZSBlY2IsIGNiYywgY3RyLCBjZmIsIG9mYiBccmJyYWNlJC4gIAorCitJbiBhbGwgY2FzZXMsIFx0ZXh0aXR7bGVufSBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChhcyBudW1iZXIgb2Ygb2N0ZXRzKSB0byBlbmNyeXB0IG9yIGRlY3J5cHQuICBUaGUgQ1RSLCBPRkIgYW5kIENGQiBtb2RlcyBhcmUgb3JkZXIgc2Vuc2l0aXZlIGJ1dCBub3QKK2NodW5rIHNlbnNpdGl2ZS4gIFRoYXQgaXMgeW91IGNhbiBlbmNyeXB0IFx0ZXh0aXR7QUJDREVGfSBpbiB0aHJlZSBjYWxscyBsaWtlIFx0ZXh0aXR7QUJ9LCBcdGV4dGl0e0NEfSwgXHRleHRpdHtFRn0gb3IgdHdvIGxpa2UgXHRleHRpdHtBQkNERX0gYW5kIFx0ZXh0aXR7Rn0KK2FuZCBlbmQgdXAgd2l0aCB0aGUgc2FtZSBjaXBoZXJ0ZXh0LiAgSG93ZXZlciwgZW5jcnlwdGluZyBcdGV4dGl0e0FCQ30gYW5kIFx0ZXh0aXR7REFCQ30gd2lsbCByZXN1bHQgaW4gZGlmZmVyZW50IGNpcGhlcnRleHRzLiAgQWxsCiBmaXZlIG9mIHRoZSBtb2RlcyB3aWxsIHJldHVybiB7XGJmIENSWVBUXF9PS30gb24gc3VjY2VzcyBmcm9tIHRoZSBlbmNyeXB0IG9yIGRlY3J5cHQgZnVuY3Rpb25zLgogCi1JbiB0aGUgRUNCIGFuZCBDQkMgY2FzZXMgYGBsZW4nJyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGNpcGhlcnMgYmxvY2sgc2l6ZS4gIEluIHRoZSBDQkMgY2FzZSB5b3UgbXVzdCBtYW51YWxseSBwYWQgdGhlIGVuZCBvZiB5b3VyIG1lc3NhZ2UgKGVpdGhlciB3aXRoCitJbiB0aGUgRUNCIGFuZCBDQkMgY2FzZXMsIFx0ZXh0aXR7bGVufSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGNpcGhlcnMgYmxvY2sgc2l6ZS4gIEluIHRoZSBDQkMgY2FzZSwgeW91IG11c3QgbWFudWFsbHkgcGFkIHRoZSBlbmQgb2YgeW91ciBtZXNzYWdlIChlaXRoZXIgd2l0aAogemVyb2VzIG9yIHdpdGggd2hhdGV2ZXIgeW91ciBwcm90b2NvbCByZXF1aXJlcykuCiAKLVRvIGRlY3J5cHQgaW4gZWl0aGVyIG1vZGUgeW91IHNpbXBseSBwZXJmb3JtIHRoZSBzZXR1cCBsaWtlIGJlZm9yZSAocmVjYWxsIHlvdSBoYXZlIHRvIGZldGNoIHRoZSBJViB2YWx1ZSB5b3UgdXNlZCkKLWFuZCB1c2UgdGhlIGRlY3J5cHQgcm91dGluZSBvbiBhbGwgb2YgdGhlIGJsb2Nrcy4KK1RvIGRlY3J5cHQgaW4gZWl0aGVyIG1vZGUsIHBlcmZvcm0gdGhlIHNldHVwIGxpa2UgYmVmb3JlIChyZWNhbGwgeW91IGhhdmUgdG8gZmV0Y2ggdGhlIElWIHZhbHVlIHlvdSB1c2VkKSwgYW5kIHVzZSB0aGUgZGVjcnlwdCByb3V0aW5lIG9uIGFsbCBvZiB0aGUgYmxvY2tzLgogCiBcc3Vic2VjdGlvbntJViBNYW5pcHVsYXRpb259CiBUbyBjaGFuZ2Ugb3IgcmVhZCB0aGUgSVYgb2YgYSBwcmV2aW91c2x5IGluaXRpYWxpemVkIGNoYWluaW5nIG1vZGUgdXNlIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucy4KLQogXGluZGV4e2NiY1xfc2V0aXYoKX0gXGluZGV4e2NiY1xfZ2V0aXYoKX0gXGluZGV4e29mYlxfc2V0aXYoKX0gXGluZGV4e29mYlxfZ2V0aXYoKX0gXGluZGV4e2NmYlxfc2V0aXYoKX0gXGluZGV4e2NmYlxfZ2V0aXYoKX0KIFxpbmRleHtjdHJcX3NldGl2KCl9IFxpbmRleHtjdHJcX2dldGl2KCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgWFhYX2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nICpsZW4sIHN5bW1ldHJpY19YWFggKlhYWCk7Ci1pbnQgWFhYX3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX1hYWCAqWFhYKTsKK2ludCBYWFhfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpsZW4sIAorICAgICAgICAgICAgICBzeW1tZXRyaWNfWFhYICpYWFgpOworCitpbnQgWFhYX3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX1hYWCAqWFhYKTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoZSBYWFhcX2dldGl2KCkgZnVuY3Rpb25zIHdpbGwgcmVhZCB0aGUgSVYgb3V0IG9mIHRoZSBjaGFpbmluZyBtb2RlIGFuZCBzdG9yZSBpdCBpbnRvIGBgSVYnJyBhbG9uZyB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIElWIAotc3RvcmVkIGluIGBgbGVuJycuICBUaGUgWFhYXF9zZXRpdiB3aWxsIGluaXRpYWxpemUgdGhlIGNoYWluaW5nIG1vZGUgc3RhdGUgYXMgaWYgdGhlIG9yaWdpbmFsIElWIHdlcmUgdGhlIG5ldyBJViBzcGVjaWZpZWQuICBUaGUgbGVuZ3RoCitUaGUgWFhYXF9nZXRpdigpIGZ1bmN0aW9ucyB3aWxsIHJlYWQgdGhlIElWIG91dCBvZiB0aGUgY2hhaW5pbmcgbW9kZSBhbmQgc3RvcmUgaXQgaW50byBcdGV4dGl0e0lWfSBhbG9uZyB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIElWIAorc3RvcmVkIGluIFx0ZXh0aXR7bGVufS4gIFRoZSBYWFhcX3NldGl2IHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2hhaW5pbmcgbW9kZSBzdGF0ZSBhcyBpZiB0aGUgb3JpZ2luYWwgSVYgd2VyZSB0aGUgbmV3IElWIHNwZWNpZmllZC4gIFRoZSBsZW5ndGgKIG9mIHRoZSBJViBwYXNzZWQgaW4gbXVzdCBiZSB0aGUgc2l6ZSBvZiB0aGUgY2lwaGVycyBibG9jayBzaXplLgogCiBUaGUgWFhYXF9zZXRpdigpIGZ1bmN0aW9ucyBhcmUgaGFuZHkgaWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoZSBJViB3aXRob3V0IHJlLS1rZXlpbmcgdGhlIGNpcGhlci4gIAogCitXaGF0IHRoZSBcdGV4dGl0e3NldGl2fSBmdW5jdGlvbiB3aWxsIGRvIGRlcGVuZHMgb24gdGhlIG1vZGUgYmVpbmcgY2hhbmdlZC4gIEluIENCQyBtb2RlLCB0aGUgbmV3IElWIHJlcGxhY2VzIHRoZSBleGlzdGluZyBJViBhcyBpZiBpdCAKK3dlcmUgdGhlIGxhc3QgY2lwaGVydGV4dCBibG9jay4gIEluIENGQiBtb2RlLCB0aGUgSVYgaXMgZW5jcnlwdGVkIGFzIGlmIGl0IHdlcmUgdGhlIHByaW9yIGVuY3J5cHRlZCBwYWQuICBJbiBDVFIgbW9kZSwgdGhlIElWIGlzIGVuY3J5cHRlZCB3aXRob3V0CitmaXJzdCBpbmNyZW1lbnRpbmcgaXQgKHJlZ2FyZGxlc3Mgb2YgdGhlIExUQ1xfUkZDXF8zNjg2IGZsYWcgcHJlc2VuY2UpLiAgSW4gRjggbW9kZSwgdGhlIElWIGlzIGVuY3J5cHRlZCBhbmQgYmVjb21lcyB0aGUgbmV3IHBhZC4gIEl0IGRvZXMgbm90IGNoYW5nZQordGhlIHNhbHRlZCBJViwgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYWxsb3cgc2Vla2luZyB3aXRoaW4gYSBzZXNzaW9uLiAgSW4gTFJXLCBpdCBjaGFuZ2VzIHRoZSB0d2VhaywgZm9yY2luZyBhIGNvbXB1dGF0aW9uIG9mIHRoZSB0d2VhayBwYWQsIGFsbG93aW5nIGZvcgorc2Vla2luZyB3aXRoaW4gdGhlIHNlc3Npb24uICBJbiBPRkIgbW9kZSwgdGhlIElWIGlzIGVuY3J5cHRlZCBhbmQgYmVjb21lcyB0aGUgbmV3IHBhZC4KKwogXHN1YnNlY3Rpb257U3RyZWFtIFRlcm1pbmF0aW9ufQogVG8gdGVybWluYXRlIGFuIG9wZW4gc3RyZWFtIGNhbGwgdGhlIGRvbmUgZnVuY3Rpb24uCiAKQEAgLTg1MSw5ICs5NTEsOCBAQAogCiBUaGlzIHdpbGwgdGVybWluYXRlIHRoZSBzdHJlYW0gKGJ5IHRlcm1pbmF0aW5nIHRoZSBjaXBoZXIpIGFuZCByZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IGlmIHN1Y2Nlc3NmdWwuCiAKLVxzdWJzZWN0aW9ue0V4YW1wbGVzfQotCiBcbmV3cGFnZQorXHN1YnNlY3Rpb257RXhhbXBsZXN9CiBcYmVnaW57c21hbGx9CiBcYmVnaW57dmVyYmF0aW19CiAjaW5jbHVkZSA8dG9tY3J5cHQuaD4KQEAgLTg3NiwxMCArOTc1LDEwIEBACiAgICAgICAgIGZpbmRfY2lwaGVyKCJ0d29maXNoIiksIC8qIGluZGV4IG9mIGRlc2lyZWQgY2lwaGVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVYsIC8qIHRoZSBpbml0aWFsIHZlY3RvciAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCAvKiB0aGUgc2VjcmV0IGtleSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAvKiBsZW5ndGggb2Ygc2VjcmV0IGtleSAoMTYgYnl0ZXMsIDEyOCBiaXRzKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAvKiBsZW5ndGggb2Ygc2VjcmV0IGtleSAoMTYgYnl0ZXMpICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIDAgPT0gZGVmYXVsdCAjIG9mIHJvdW5kcyAqLwogICAgICBDVFJfQ09VTlRFUl9MSVRUTEVfRU5ESUFOLCAvKiBMaXR0bGUgZW5kaWFuIGNvdW50ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAmY3RyKSAgLyogd2hlcmUgdG8gc3RvcmUgaW5pdGlhbGl6ZWQgQ1RSIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgJmN0cikgIC8qIHdoZXJlIHRvIHN0b3JlIHRoZSBDVFIgc3RhdGUgKi8KICAgICAgICkgIT0gQ1JZUFRfT0spIHsKICAgICAgIHByaW50ZigiY3RyX3N0YXJ0IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIC0xOwpAQCAtODg4LDggKzk4Nyw4IEBACiAgICAvKiBzb21laG93IGZpbGwgYnVmZmVyIHRoYW4gZW5jcnlwdCBpdCAqLwogICAgaWYgKChlcnIgPSBjdHJfZW5jcnlwdCggICAgICAgIGJ1ZmZlciwgLyogcGxhaW50ZXh0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCAvKiBjaXBoZXJ0ZXh0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihidWZmZXIpLCAvKiBsZW5ndGggb2YgZGF0YSB0byBlbmNyeXB0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHIpICAvKiBwcmV2aW91c2x5IGluaXRpYWxpemVkIENUUiBzdGF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYnVmZmVyKSwgLyogbGVuZ3RoIG9mIHBsYWludGV4dCBwdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RyKSAgLyogQ1RSIHN0YXRlICovCiAgICAgICApICE9IENSWVBUX09LKSB7CiAgICAgICBwcmludGYoImN0cl9lbmNyeXB0IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIC0xOwpAQCAtOTA4LDggKzEwMDcsOCBAQAogCiAgICBpZiAoKGVyciA9IGN0cl9kZWNyeXB0KCAgICAgICAgYnVmZmVyLCAvKiBjaXBoZXJ0ZXh0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCAvKiBwbGFpbnRleHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlciksIC8qIGxlbmd0aCBvZiBkYXRhIHRvIGVuY3J5cHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0cikgIC8qIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgQ1RSIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihidWZmZXIpLCAvKiBsZW5ndGggb2YgcGxhaW50ZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHIpICAvKiBDVFIgc3RhdGUgKi8KICAgICAgICkgIT0gQ1JZUFRfT0spIHsKICAgICAgIHByaW50ZigiY3RyX2RlY3J5cHQgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICAgICByZXR1cm4gLTE7CkBAIC05MzAsODIgKzEwMjksMjEzIEBACiBcZW5ke3ZlcmJhdGltfQogXGVuZHtzbWFsbH0KIAotXHNlY3Rpb257RW5jcnlwdCBhbmQgQXV0aGVudGljYXRlIE1vZGVzfQorXHN1YnNlY3Rpb257TFJXIE1vZGV9CitMUlcgbW9kZSBpcyBhIGNpcGhlciBtb2RlIHdoaWNoIGlzIG1lYW50IGZvciBpbmRleGVkIGVuY3J5cHRpb24gbGlrZSB1c2VkIHRvIGhhbmRsZSBzdG9yYWdlIG1lZGlhLiAgSXQgaXMgbWVhbnQgdG8gaGF2ZSBlZmZpY2llbnQgc2Vla2luZyBhbmQgb3ZlcmNvbWUgdGhlIAorc2VjdXJpdHkgcHJvYmxlbXMgb2YgRUNCIG1vZGUgd2hpbGUgbm90IGluY3JlYXNpbmcgdGhlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzLiAgSXQgaXMgdXNlZCBtdWNoIGxpa2UgYW55IG90aGVyIGNoYWluaW5nIG1vZGUgZXhjZXB0IHdpdGggdHdvIGtleSBkaWZmZXJlbmNlcy4KKworVGhlIGtleSBpcyBzcGVjaWZpZWQgYXMgdHdvIHN0cmluZ3MgdGhlIGZpcnN0IGtleSAkS18xJCBpcyB0aGUgKG5vcm1hbGx5IEFFUykga2V5IGFuZCBjYW4gYmUgYW55IGxlbmd0aCAodHlwaWNhbGx5IDE2LCAyNCBvciAzMiBvY3RldHMgbG9uZykuICBUaGUgc2Vjb25kIGtleSAKKyRLXzIkIGlzIHRoZSBcdGV4dGl0e3R3ZWFrfSBrZXkgYW5kIGlzIGFsd2F5cyAxNiBvY3RldHMgbG9uZy4gIFRoZSB0d2VhayB2YWx1ZSBpcyBcdGV4dGJme05PVH0gYSBub25jZSBvciBJViB2YWx1ZSBpdCBtdXN0IGJlIHJhbmRvbSBhbmQgc2VjcmV0LiAgCisKK1RvIGluaXRpYWxpemUgTFJXIG1vZGUgdXNlOgorCitcaW5kZXh7bHJ3XF9zdGFydCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGxyd19zdGFydCggICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnR3ZWFrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0xSVyAqbHJ3KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBMUlcgY29udGV4dCB3aXRoIHRoZSBnaXZlbiAoMTYgb2N0ZXQpIFx0ZXh0aXR7SVZ9LCBjaXBoZXIgJEtfMSQgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gb2N0ZXRzIGFuZCB0aGUgKDE2IG9jdGV0KSAkS18yJCBcdGV4dGl0e3R3ZWFrfS4gIAorV2hpbGUgTFJXIHdhcyBzcGVjaWZpZWQgdG8gYmUgdXNlZCBvbmx5IHdpdGggQUVTLCBMaWJUb21DcnlwdCB3aWxsIGFsbG93IGFueSAxMjgtLWJpdCBibG9jayBjaXBoZXIgdG8gYmUgc3BlY2lmaWVkIGFzIGluZGV4ZWQgYnkgXHRleHRpdHtjaXBoZXJ9LiAgVGhlCitudW1iZXIgb2Ygcm91bmRzIGZvciB0aGUgYmxvY2sgY2lwaGVyIFx0ZXh0aXR7bnVtXF9yb3VuZHN9IGNhbiBiZSAwIHRvIHVzZSB0aGUgZGVmYXVsdCBudW1iZXIgb2Ygcm91bmRzIGZvciB0aGUgZ2l2ZW4gY2lwaGVyLgorCitUbyBwcm9jZXNzIGRhdGEgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCitcaW5kZXh7bHJ3XF9lbmNyeXB0KCl9IFxpbmRleHtscndcX2RlY3J5cHQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBscndfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0xSVyAqbHJ3KTsKKworaW50IGxyd19kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfTFJXICpscncpOworXGVuZHt2ZXJiYXRpbX0KKworVGhlc2Ugd2lsbCBlbmNyeXB0IChvciBkZWNyeXB0KSB0aGUgcGxhaW50ZXh0IHRvIHRoZSBjaXBoZXJ0ZXh0IGJ1ZmZlciAob3IgdmljZSB2ZXJzYSkuICBUaGUgbGVuZ3RoIGlzIHNwZWNpZmllZCBieSBcdGV4dGl0e2xlbn0gaW4gb2N0ZXRzIGJ1dCBtdXN0IGJlIGEgbXVsdGlwbGUKK29mIDE2LiAgVGhlIExSVyBjb2RlIHVzZXMgYSBmYXN0IHR3ZWFrIHVwZGF0ZSBzdWNoIHRoYXQgY29uc2VjdXRpdmUgYmxvY2tzIGFyZSBlbmNyeXB0ZWQgZmFzdGVyIHRoYW4gaWYgcmFuZG9tIHNlZWtpbmcgd2hlcmUgdXNlZC4gIAorCitUbyBtYW5pcHVsYXRlIHRoZSBJViB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKK1xpbmRleHtscndcX2dldGl2KCl9IFxpbmRleHtscndcX3NldGl2KCl9IAorXGJlZ2lue3ZlcmJhdGltfQoraW50IGxyd19nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmxlbiwgCisgICAgICAgICAgICAgIHN5bW1ldHJpY19MUlcgKmxydyk7CisKK2ludCBscndfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfTFJXICpscncpOworXGVuZHt2ZXJiYXRpbX0KK1RoZXNlIHdpbGwgZ2V0IG9yIHNldCB0aGUgMTYtLW9jdGV0IElWLiAgTm90ZSB0aGF0IHNldHRpbmcgdGhlIElWIGlzIHRoZSBzYW1lIGFzIFx0ZXh0aXR7c2Vla2luZ30gYW5kIHVubGlrZSBvdGhlciBtb2RlcyBpcyBub3QgYSBmcmVlIG9wZXJhdGlvbi4gIEl0IHJlcXVpcmVzCit1cGRhdGluZyB0aGUgZW50aXJlIHR3ZWFrIHdoaWNoIGlzIHNsb3dlciB0aGFuIHNlcXVlbnRpYWwgdXNlLiAgQXZvaWQgc2Vla2luZyBleGNlc3NpdmVseSBpbiBwZXJmb3JtYW5jZSBjb25zdHJhaW5lZCBjb2RlLgorCitUbyB0ZXJtaW5hdGUgdGhlIExSVyBzdGF0ZSB1c2UgdGhlIGZvbGxvd2luZzoKKworXGluZGV4e2xyd1xfZG9uZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGxyd19kb25lKHN5bW1ldHJpY19MUlcgKmxydyk7CitcZW5ke3ZlcmJhdGltfQorCitcc3Vic2VjdGlvbntGOCBNb2RlfQorXGluZGV4e0Y4IE1vZGV9CitUaGUgRjggQ2hhaW5pbmcgbW9kZSAoc2VlIFJGQyAzNzExIGZvciBpbnN0YW5jZSkgaXMgeWV0IGFub3RoZXIgY2hhaW5pbmcgbW9kZSBmb3IgYmxvY2sgY2lwaGVycy4gIEl0IGJlaGF2ZXMgbXVjaCBsaWtlIENUUiBtb2RlIGluIHRoYXQgaXQgWE9ScyBhIGtleXN0cmVhbQorYWdhaW5zdCB0aGUgcGxhaW50ZXh0IHRvIGVuY3J5cHQuICBGOCBtb2RlIGNvbWVzIHdpdGggdGhlIGFkZGl0aW9uYWwgdHdpc3QgdGhhdCB0aGUgY291bnRlciB2YWx1ZSBpcyBzZWNyZXQsIGVuY3J5cHRlZCBieSBhIFx0ZXh0aXR7c2FsdCBrZXl9LiAgV2UKK2luaXRpYWxpemUgRjggbW9kZSB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbDoKKworXGluZGV4e2Y4XF9zdGFydCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGY4X3N0YXJ0KCAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdF9rZXksICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgc2tleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAgIAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfRjggKmY4KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgc3RhcnQgdGhlIEY4IG1vZGUgc3RhdGUgdXNpbmcgXHRleHRpdHtrZXl9IGFzIHRoZSBzZWNyZXQga2V5LCBcdGV4dGl0e0lWfSBhcyB0aGUgY291bnRlci4gIEl0IHVzZXMgdGhlIFx0ZXh0aXR7c2FsdFxfa2V5fSBhcyBJViBlbmNyeXB0aW9uIGtleSAKKyhcdGV4dGl0e219IGluIHRoZSBSRkMgMzcxMSkuICBUaGUgc2FsdFxfa2V5IGNhbiBiZSBzaG9ydGVyIHRoYW4gdGhlIHNlY3JldCBrZXkgYnV0IGl0IHNob3VsZCBub3QgYmUgbG9uZ2VyLiAgCisKK1RvIGVuY3J5cHQgb3IgZGVjcnlwdCBkYXRhIHdlIHVzZSB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnM6CisKK1xpbmRleHtmOFxfZW5jcnlwdCgpfSBcaW5kZXh7ZjhcX2RlY3J5cHQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0Y4ICpmOCk7CisKK2ludCBmOF9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0Y4ICpmOCk7CitcZW5ke3ZlcmJhdGltfQorVGhlc2Ugd2lsbCBlbmNyeXB0IG9yIGRlY3J5cHQgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkgb2YgYnl0ZXMgdXNpbmcgdGhlIEY4IG1vZGUgc3RhdGUgc3BlY2lmaWVkLiAgVGhlIGxlbmd0aCBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMgYW5kIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBtdWx0aXBsZSAKK29mIHRoZSBjaXBoZXJzIGJsb2NrIHNpemUuCisKK1RvIGNoYW5nZSBvciByZXRyaWV2ZSB0aGUgY3VycmVudCBjb3VudGVyIElWIHZhbHVlIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKK1xpbmRleHtmOFxfZ2V0aXYoKX0gXGluZGV4e2Y4XF9zZXRpdigpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGY4X2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpsZW4sIAorICAgICAgICAgICAgICBzeW1tZXRyaWNfRjggKmY4KTsKKworaW50IGY4X3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfRjggKmY4KTsKK1xlbmR7dmVyYmF0aW19CitUaGVzZSB3b3JrIHdpdGggdGhlIGN1cnJlbnQgSVYgdmFsdWUgb25seSBhbmQgbm90IHRoZSBlbmNyeXB0ZWQgSVYgdmFsdWUgc3BlY2lmaWVkIGR1cmluZyB0aGUgY2FsbCB0byBmOFxfc3RhcnQoKS4gIFRoZSBwdXJwb3NlIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaXMgdG8gYmUKK2FibGUgdG8gc2VlayB3aXRoaW4gYSBjdXJyZW50IHNlc3Npb24gb25seS4gIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgc2Vzc2lvbiBJViB5b3Ugd2lsbCBoYXZlIHRvIGNhbGwgZjhcX2RvbmUoKSBhbmQgdGhlbiBzdGFydCBhIG5ldyBzdGF0ZSB3aXRoCitmOFxfc3RhcnQoKS4KKworVG8gdGVybWluYXRlIGFuIEY4IHN0YXRlIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e2Y4XF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZjhfZG9uZShzeW1tZXRyaWNfRjggKmY4KTsKK1xlbmR7dmVyYmF0aW19CisKK1x2ZmlsCitcbXlzZWN0aW9ue0VuY3J5cHQgYW5kIEF1dGhlbnRpY2F0ZSBNb2Rlc30KIAogXHN1YnNlY3Rpb257RUFYIE1vZGV9CiBMaWJUb21DcnlwdCBwcm92aWRlcyBzdXBwb3J0IGZvciBhIG1vZGUgY2FsbGVkIEVBWFxmb290bm90ZXtTZWUgCi1NLiBCZWxsYXJlLCBQLiBSb2dhd2F5LCBELiBXYWduZXIsIEEgQ29udmVudGlvbmFsIEF1dGhlbnRpY2F0ZWQtRW5jcnlwdGlvbiBNb2RlLn0gaW4gYSBtYW5uZXIgc2ltaWxhciB0byB0aGUKLXdheSBpdCB3YXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgZGVzaWduZXJzLiAgRmlyc3QgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB3aGF0IEVBWCBtb2RlIGlzIGJlZm9yZSBJIGV4cGxhaW4gaG93IHRvIHVzZSBpdC4gIAotRUFYIGlzIGEgbW9kZSB0aGF0IHJlcXVpcmVzIGEgY2lwaGVyLCBDVFIgYW5kIE9NQUMgc3VwcG9ydCBhbmQgcHJvdmlkZXMgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb25cZm9vdG5vdGV7Tm90ZSB0aGF0IHNpbmNlIEVBWCBvbmx5IHJlcXVpcmVzIE9NQUMgYW5kIENUUiB5b3UgbWF5IHVzZSBgYGVuY3J5cHQgb25seScnIGNpcGhlciBkZXNjcmlwdG9ycyB3aXRoIHRoaXMgbW9kZS59LiAgCi1JdCBpcyBpbml0aWFsaXplZCB3aXRoIGEgcmFuZG9tIGBgbm9uY2UnJyB0aGF0IGNhbiBiZSBzaGFyZWQgcHVibGljbHkgYXMgd2VsbCBhcyBhIGBgaGVhZGVyJycgd2hpY2ggY2FuIGJlIGZpeGVkIGFuZCBwdWJsaWMgYXMgd2VsbCBhcyBhIHJhbmRvbSAKLXNlY3JldCBzeW1tZXRyaWMga2V5LgorTS4gQmVsbGFyZSwgUC4gUm9nYXdheSwgRC4gV2FnbmVyLCBBIENvbnZlbnRpb25hbCBBdXRoZW50aWNhdGVkLUVuY3J5cHRpb24gTW9kZS59IGluIGEgbWFubmVyIHNpbWlsYXIgdG8gdGhlIHdheSBpdCB3YXMgaW50ZW5kZWQgdG8gYmUgdXNlZCAKK2J5IHRoZSBkZXNpZ25lcnMuICBGaXJzdCwgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB3aGF0IEVBWCBtb2RlIGlzIGJlZm9yZSB3ZSBleHBsYWluIGhvdyB0byB1c2UgaXQuICBFQVggaXMgYSBtb2RlIHRoYXQgcmVxdWlyZXMgYSBjaXBoZXIsIAorQ1RSIGFuZCBPTUFDIHN1cHBvcnQgYW5kIHByb3ZpZGVzIGVuY3J5cHRpb24gYW5kIAorYXV0aGVudGljYXRpb25cZm9vdG5vdGV7Tm90ZSB0aGF0IHNpbmNlIEVBWCBvbmx5IHJlcXVpcmVzIE9NQUMgYW5kIENUUiB5b3UgbWF5IHVzZSBcdGV4dGl0e2VuY3J5cHQgb25seX0gY2lwaGVyIGRlc2NyaXB0b3JzIHdpdGggdGhpcyBtb2RlLn0uICAKK0l0IGlzIGluaXRpYWxpemVkIHdpdGggYSByYW5kb20gXHRleHRpdHtub25jZX0gdGhhdCBjYW4gYmUgc2hhcmVkIHB1YmxpY2x5LCBhIFx0ZXh0aXR7aGVhZGVyfSB3aGljaCBjYW4gYmUgZml4ZWQgYW5kIHB1YmxpYywgYW5kIGEgcmFuZG9tIHNlY3JldCBzeW1tZXRyaWMga2V5LgogCi1UaGUgYGBoZWFkZXInJyBkYXRhIGlzIG1lYW50IHRvIGJlIG1ldGEtZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBzdHJlYW0gdGhhdCBpc24ndCBwcml2YXRlIChlLmcuIHByb3RvY29sIG1lc3NhZ2VzKS4gIEl0IGNhbgotYmUgYWRkZWQgYXQgYW55dGltZSBkdXJpbmcgYW4gRUFYIHN0cmVhbSBhbmQgaXMgcGFydCBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnLiAgVGhhdCBpcywgY2hhbmdlcyBpbiB0aGUgbWV0YS1kYXRhIGNhbgotYmUgZGV0ZWN0ZWQgYnkgY2hhbmdlcyBpbiB0aGUgb3V0cHV0IHRhZy4KK1RoZSBcdGV4dGl0e2hlYWRlcn0gZGF0YSBpcyBtZWFudCB0byBiZSBtZXRhLS1kYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHN0cmVhbSB0aGF0IGlzbid0IHByaXZhdGUgKGUuZy4sIHByb3RvY29sIG1lc3NhZ2VzKS4gIEl0IGNhbgorYmUgYWRkZWQgYXQgYW55dGltZSBkdXJpbmcgYW4gRUFYIHN0cmVhbSwgYW5kIGlzIHBhcnQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZy4gIFRoYXQgaXMsIGNoYW5nZXMgaW4gdGhlIG1ldGEtZGF0YSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hhbmdlcyBpbiB0aGUgb3V0cHV0IHRhZy4KIAogVGhlIG1vZGUgY2FuIHRoZW4gcHJvY2VzcyBwbGFpbnRleHQgcHJvZHVjaW5nIGNpcGhlcnRleHQgYXMgd2VsbCBhcyBjb21wdXRlIGEgcGFydGlhbCBjaGVja3N1bS4gIFRoZSBhY3R1YWwgY2hlY2tzdW0KLWNhbGxlZCBhIGBgdGFnJycgaXMgb25seSBlbWl0dGVkIHdoZW4gdGhlIG1lc3NhZ2UgaXMgZmluaXNoZWQuICBJbiB0aGUgaW50ZXJpbSB0aG91Z2ggdGhlIHVzZXIgY2FuIHByb2Nlc3MgYW55IGFyYml0cmFyeQorY2FsbGVkIGEgXHRleHRpdHt0YWd9IGlzIG9ubHkgZW1pdHRlZCB3aGVuIHRoZSBtZXNzYWdlIGlzIGZpbmlzaGVkLiAgSW4gdGhlIGludGVyaW0sIHRoZSB1c2VyIGNhbiBwcm9jZXNzIGFueSBhcmJpdHJhcnkKIHNpemVkIG1lc3NhZ2UgYmxvY2sgdG8gc2VuZCB0byB0aGUgcmVjaXBpZW50IGFzIGNpcGhlcnRleHQuICBUaGlzIG1ha2VzIHRoZSBFQVggbW9kZSBlc3BlY2lhbGx5IHN1aXRlZCBmb3Igc3RyZWFtaW5nIG1vZGVzCiBvZiBvcGVyYXRpb24uCiAKIFRoZSBtb2RlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KIFxpbmRleHtlYXhcX2luaXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBlYXhfaW5pdChlYXhfc3RhdGUgKmVheCwgaW50IGNpcGhlciwgCi0gICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKLSAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgdW5zaWduZWQgbG9uZyBub25jZWxlbiwKLSAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIHVuc2lnbmVkIGxvbmcgaGVhZGVybGVuKTsKK2ludCBlYXhfaW5pdCggICAgICAgICAgZWF4X3N0YXRlICplYXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG5vbmNlbGVuLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaGVhZGVybGVuKTsKIFxlbmR7dmVyYmF0aW19CiAKLVdoZXJlIGBgZWF4JycgaXMgdGhlIEVBWCBzdGF0ZS4gIGBgY2lwaGVyJycgaXMgdGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGNpcGhlciBpbiB0aGUgZGVzY3JpcHRvciB0YWJsZS4gIAotYGBrZXknJyBpcyB0aGUgc2hhcmVkIHNlY3JldCBzeW1tZXRyaWMga2V5IG9mIGxlbmd0aCBgYGtleWxlbicnLiAgYGBub25jZScnIGlzIHRoZSByYW5kb20gcHVibGljIHN0cmluZyBvZgotbGVuZ3RoIGBgbm9uY2VsZW4nJy4gIGBgaGVhZGVyJycgaXMgdGhlIHJhbmRvbSAob3IgZml4ZWQgb3IgXHRleHRiZntOVUxMfSkgaGVhZGVyIGZvciB0aGUgbWVzc2FnZSBvZiBsZW5ndGgKLWBgaGVhZGVybGVuJycuCitXaGVyZSBcdGV4dGl0e2VheH0gaXMgdGhlIEVBWCBzdGF0ZS4gIFRoZSBcdGV4dGl0e2NpcGhlcn0gcGFyYW1ldGVyIGlzIHRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGUuICAKK1RoZSBcdGV4dGl0e2tleX0gcGFyYW1ldGVyIGlzIHRoZSBzaGFyZWQgc2VjcmV0IHN5bW1ldHJpYyBrZXkgb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBvY3RldHMuICBUaGUgXHRleHRpdHtub25jZX0gcGFyYW1ldGVyIGlzIHRoZSAKK3JhbmRvbSBwdWJsaWMgc3RyaW5nIG9mIGxlbmd0aCBcdGV4dGl0e25vbmNlbGVufSBvY3RldHMuICBUaGUgXHRleHRpdHtoZWFkZXJ9IHBhcmFtZXRlciBpcyB0aGUgcmFuZG9tIChvciBmaXhlZCBvciBcdGV4dGJme05VTEx9KSBoZWFkZXIgZm9yIHRoZSAKK21lc3NhZ2Ugb2YgbGVuZ3RoIFx0ZXh0aXR7aGVhZGVybGVufSBvY3RldHMuCiAKLVdoZW4gdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMgYGBlYXgnJyB3aWxsIGJlIGluaXRpYWxpemVkIHN1Y2ggdGhhdCB5b3UgY2FuIG5vdyBlaXRoZXIgaGF2ZSBkYXRhIGRlY3J5cHRlZCBvciAKLWVuY3J5cHRlZCBpbiBFQVggbW9kZS4gIE5vdGUgdGhhdCBpZiBgYGhlYWRlcmxlbicnIGlzIHplcm8geW91IG1heSBwYXNzIGBgaGVhZGVyJycgYXMgXHRleHRiZntOVUxMfSB0byBpbmRpY2F0ZQotdGhlcmUgaXMgbm8gaW5pdGlhbCBoZWFkZXIgZGF0YS4KK1doZW4gdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMsIHRoZSBcdGV4dGl0e2VheH0gc3RhdGUgd2lsbCBiZSBpbml0aWFsaXplZCBzdWNoIHRoYXQgeW91IGNhbiBub3cgZWl0aGVyIGhhdmUgZGF0YSBkZWNyeXB0ZWQgb3IgCitlbmNyeXB0ZWQgaW4gRUFYIG1vZGUuICBOb3RlOiBpZiBcdGV4dGl0e2hlYWRlcmxlbn0gaXMgemVybyB5b3UgbWF5IHBhc3MgXHRleHRpdHtoZWFkZXJ9IGFzIFx0ZXh0YmZ7TlVMTH0gdG8gaW5kaWNhdGUgdGhlcmUgaXMgbm8gaW5pdGlhbCBoZWFkZXIgZGF0YS4KIAogVG8gZW5jcnlwdCBvciBkZWNyeXB0IGRhdGEgaW4gYSBzdHJlYW1pbmcgbW9kZSB1c2UgdGhlIGZvbGxvd2luZy4KIFxpbmRleHtlYXhcX2VuY3J5cHQoKX0gXGluZGV4e2VheFxfZGVjcnlwdCgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGVheF9lbmNyeXB0KGVheF9zdGF0ZSAqZWF4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2ludCBlYXhfZW5jcnlwdCggICAgICAgICAgZWF4X3N0YXRlICplYXgsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuZ3RoKTsKIAotaW50IGVheF9kZWNyeXB0KGVheF9zdGF0ZSAqZWF4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2ludCBlYXhfZGVjcnlwdCggICAgICAgICAgZWF4X3N0YXRlICplYXgsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuZ3RoKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGUgZnVuY3Rpb24gYGBlYXhcX2VuY3J5cHQnJyB3aWxsIGVuY3J5cHQgdGhlIGJ5dGVzIGluIGBgcHQnJyBvZiBgYGxlbmd0aCcnIGJ5dGVzIGFuZCBzdG9yZSB0aGUgY2lwaGVydGV4dCBpbgotYGBjdCcnLiAgTm90ZSB0aGF0IGBgY3QnJyBhbmQgYGBwdCcnIG1heSBiZSB0aGUgc2FtZSByZWdpb24gaW4gbWVtb3J5LiAgIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHNlbmQgdGhlIGNpcGhlcnRleHQKLXRocm91Z2ggdGhlIE9NQUMgZnVuY3Rpb24uICBUaGUgZnVuY3Rpb24gYGBlYXhcX2RlY3J5cHQnJyBkZWNyeXB0cyBgYGN0JycgYW5kIHN0b3JlcyBpdCBpbiBgYHB0JycuICBUaGlzIGFsc28gYWxsb3dzIAotYGBwdCcnIGFuZCBgYGN0JycgdG8gYmUgdGhlIHNhbWUgcmVnaW9uIGluIG1lbW9yeS4gIAorVGhlIGZ1bmN0aW9uIFx0ZXh0aXR7ZWF4XF9lbmNyeXB0fSB3aWxsIGVuY3J5cHQgdGhlIGJ5dGVzIGluIFx0ZXh0aXR7cHR9IG9mIFx0ZXh0aXR7bGVuZ3RofSBvY3RldHMsIGFuZCBzdG9yZSB0aGUgY2lwaGVydGV4dCBpbgorXHRleHRpdHtjdH0uICBOb3RlOiBcdGV4dGl0e2N0fSBhbmQgXHRleHRpdHtwdH0gbWF5IGJlIHRoZSBzYW1lIHJlZ2lvbiBpbiBtZW1vcnkuICAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gc2VuZCB0aGUgY2lwaGVydGV4dAordGhyb3VnaCB0aGUgT01BQyBmdW5jdGlvbi4gIFRoZSBmdW5jdGlvbiBcdGV4dGl0e2VheFxfZGVjcnlwdH0gZGVjcnlwdHMgXHRleHRpdHtjdH0sIGFuZCBzdG9yZXMgaXQgaW4gXHRleHRpdHtwdH0uICBUaGlzIGFsc28gYWxsb3dzIAorXHRleHRpdHtwdH0gYW5kIFx0ZXh0aXR7Y3R9IHRvIGJlIHRoZSBzYW1lIHJlZ2lvbiBpbiBtZW1vcnkuICAKIAotWW91IGNhbm5vdCBib3RoIGVuY3J5cHQgb3IgZGVjcnlwdCB3aXRoIHRoZSBzYW1lIGBgZWF4JycgY29udGV4dC4gIEZvciBiaS1kaXJlY3Rpb25hbCBjb21tdW5pY2F0aW9uIHlvdQotd2lsbCBuZWVkIHRvIGluaXRpYWxpemUgdHdvIEVBWCBjb250ZXh0cyAocHJlZmVyYWJseSB3aXRoIGRpZmZlcmVudCBoZWFkZXJzIGFuZCBub25jZXMpLiAgCitZb3UgY2Fubm90IGJvdGggZW5jcnlwdCBvciBkZWNyeXB0IHdpdGggdGhlIHNhbWUgXHRleHRpdHtlYXh9IGNvbnRleHQuICBGb3IgYmktLWRpcmVjdGlvbmFsIGNvbW11bmljYXRpb24geW91IHdpbGwgbmVlZCB0byBpbml0aWFsaXplIAordHdvIEVBWCBjb250ZXh0cyAocHJlZmVyYWJseSB3aXRoIGRpZmZlcmVudCBoZWFkZXJzIGFuZCBub25jZXMpLiAgCiAKLU5vdGUgdGhhdCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbGxvdyB5b3UgdG8gc2VuZCB0aGUgZGF0YSBpbiBhbnkgZ3JhbnVsYXJpdHkgYnV0IHRoZSBvcmRlciBpcyBpbXBvcnRhbnQuICBXaGlsZQorTm90ZTogYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYWxsb3cgeW91IHRvIHNlbmQgdGhlIGRhdGEgaW4gYW55IGdyYW51bGFyaXR5IGJ1dCB0aGUgb3JkZXIgaXMgaW1wb3J0YW50LiAgV2hpbGUKIHRoZSBlYXhcX2luaXQoKSBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGFkZCBpbml0aWFsIGhlYWRlciBkYXRhIHRvIHRoZSBzdHJlYW0geW91IGNhbiBhbHNvIGFkZCBoZWFkZXIgZGF0YSBkdXJpbmcgdGhlCiBFQVggc3RyZWFtIHdpdGggdGhlIGZvbGxvd2luZy4KIAogXGluZGV4e2VheFxfYWRkaGVhZGVyKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZWF4X2FkZGhlYWRlcihlYXhfc3RhdGUgKmVheCwgCi0gICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2ludCBlYXhfYWRkaGVhZGVyKCAgICAgICAgICBlYXhfc3RhdGUgKmVheCwgCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuZ3RoKTsKIFxlbmR7dmVyYmF0aW19Ci0KLVRoaXMgd2lsbCBhZGQgdGhlIGBgbGVuZ3RoJycgYnl0ZXMgZnJvbSBgYGhlYWRlcicnIHRvIHRoZSBnaXZlbiBgYGVheCcnIHN0cmVhbS4gIE9uY2UgdGhlIG1lc3NhZ2UgaXMgZmluaXNoZWQgdGhlIAotYGB0YWcnJyAoY2hlY2tzdW0pIG1heSBiZSBjb21wdXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCitUaGlzIHdpbGwgYWRkIHRoZSBcdGV4dGl0e2xlbmd0aH0gb2N0ZXQgZnJvbSBcdGV4dGl0e2hlYWRlcn0gdG8gdGhlIGdpdmVuIFx0ZXh0aXR7ZWF4fSBoZWFkZXIuICBPbmNlIHRoZSBtZXNzYWdlIGlzIGZpbmlzaGVkLCB0aGUgCitcdGV4dGl0e3RhZ30gKGNoZWNrc3VtKSBtYXkgYmUgY29tcHV0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogCiBcaW5kZXh7ZWF4XF9kb25lKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZWF4X2RvbmUoZWF4X3N0YXRlICplYXgsIAotICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgdW5zaWduZWQgbG9uZyAqdGFnbGVuKTsKK2ludCBlYXhfZG9uZSggICAgZWF4X3N0YXRlICplYXgsIAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgCisgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHdpbGwgdGVybWluYXRlIHRoZSBFQVggc3RhdGUgYGBlYXgnJyBhbmQgc3RvcmUgdXB0byBgYHRhZ2xlbicnIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIHRhZyBpbiBgYHRhZycnLiAgVGhlIGZ1bmN0aW9uCi10aGVuIHN0b3JlcyBob3cgbWFueSBieXRlcyBvZiB0aGUgdGFnIHdlcmUgd3JpdHRlbiBvdXQgYmFjayBpbnRvIGBgdGFnbGVuJycuCitUaGlzIHdpbGwgdGVybWluYXRlIHRoZSBFQVggc3RhdGUgXHRleHRpdHtlYXh9LCBhbmQgc3RvcmUgdXAgdG8gXHRleHRpdHt0YWdsZW59IGJ5dGVzIG9mIHRoZSBtZXNzYWdlIHRhZyBpbiBcdGV4dGl0e3RhZ30uICBUaGUgZnVuY3Rpb24KK3RoZW4gc3RvcmVzIGhvdyBtYW55IGJ5dGVzIG9mIHRoZSB0YWcgd2VyZSB3cml0dGVuIG91dCBiYWNrIGluIHRvIFx0ZXh0aXR7dGFnbGVufS4KIAotVGhlIEVBWCBtb2RlIGNvZGUgY2FuIGJlIHRlc3RlZCB0byBlbnN1cmUgaXQgbWF0Y2hlcyB0aGUgdGVzdCB2ZWN0b3JzIGJ5IGNhbGxpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KK1RoZSBFQVggbW9kZSBjb2RlIGNhbiBiZSB0ZXN0ZWQgdG8gZW5zdXJlIGl0IG1hdGNoZXMgdGhlIHRlc3QgdmVjdG9ycyBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CiBcaW5kZXh7ZWF4XF90ZXN0KCl9CiBcYmVnaW57dmVyYmF0aW19CiBpbnQgZWF4X3Rlc3Qodm9pZCk7CkBAIC0xMDI5LDIyICsxMjU5LDIyIEBACiAgICAvKiAuLi4gbWFrZSB1cCByYW5kb20gbm9uY2UgYW5kIGtleSAuLi4gKi8KIAogICAgLyogaW5pdGlhbGl6ZSBjb250ZXh0ICovCi0gICBpZiAoKGVyciA9IGVheF9pbml0KCAgICAgICAgICAgICZlYXgsICAvKiB0aGUgY29udGV4dCAqLwotICAgICAgICAgICAgICAgIGZpbmRfY2lwaGVyKCJyaWpuZGFlbCIpLCAgLyogY2lwaGVyIHdlIHdhbnQgdG8gdXNlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2UsICAvKiBvdXIgc3RhdGUgbm9uY2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgIC8qIG5vbmUgaXMgMTYgYnl0ZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0QXBwIiwgIC8qIGV4YW1wbGUgaGVhZGVyLCBpZGVudGlmaWVzIHRoaXMgcHJvZ3JhbSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3KSAgLyogbGVuZ3RoIG9mIHRoZSBoZWFkZXIgKi8KKyAgIGlmICgoZXJyID0gZWF4X2luaXQoICAgICAgICAgICAgJmVheCwgIC8qIGNvbnRleHQgKi8KKyAgICAgICAgICAgICAgICBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSwgIC8qIGNpcGhlciBpZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlLCAgLyogdGhlIG5vbmNlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsICAvKiBub25jZSBpcyAxNiBieXRlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RBcHAiLCAgLyogZXhhbXBsZSBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNykgIC8qIGhlYWRlciBsZW5ndGggKi8KICAgICAgICApICE9IENSWVBUX09LKSB7CiAgICAgICBwcmludGYoIkVycm9yIGVheF9pbml0OiAlcyIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAKICAgIC8qIG5vdyBlbmNyeXB0IGRhdGEsIHNheSBpbiBhIGxvb3Agb3Igd2hhdGV2ZXIgKi8KLSAgIGlmICgoZXJyID0gZWF4X2VuY3J5cHQoICAgICAmZWF4LCAgICAgIC8qIGVheCBjb250ZXh0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgICAgICAvKiBwbGFpbnRleHQgIChzb3VyY2UpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdCwgICAgICAvKiBjaXBoZXJ0ZXh0IChkZXN0aW5hdGlvbikgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHB0KSAgICAgIC8qIHNpemUgb2YgcGxhaW50ZXh0ICovCisgICBpZiAoKGVyciA9IGVheF9lbmNyeXB0KCAgICAgJmVheCwgLyogZWF4IGNvbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCAvKiBwbGFpbnRleHQgIChzb3VyY2UpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdCwgLyogY2lwaGVydGV4dCAoZGVzdGluYXRpb24pICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwdCkgLyogc2l6ZSBvZiBwbGFpbnRleHQgKi8KICAgICAgICkgIT0gQ1JZUFRfT0spIHsKICAgICAgIHByaW50ZigiRXJyb3IgZWF4X2VuY3J5cHQ6ICVzIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKQEAgLTEwNTIsMTYgKzEyODIsMTYgQEAKIAogICAgLyogZmluaXNoIG1lc3NhZ2UgYW5kIGdldCBhdXRoZW50aWNhdGlvbiB0YWcgKi8KICAgIHRhZ2xlbiA9IHNpemVvZih0YWcpOwotICAgaWYgKChlcnIgPSBlYXhfZG9uZSggICAmZWF4LCAgICAgICAgICAgLyogZWF4IGNvbnRleHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0YWcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgJnRhZ2xlbiAgICAgICAgICAgIC8qIGxlbmd0aCBvZiB0YWcgc3BhY2UgKi8KKyAgIGlmICgoZXJyID0gZWF4X2RvbmUoICAgJmVheCwgICAgICAvKiBlYXggY29udGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCAgICAgIC8qIHdoZXJlIHRvIHB1dCB0YWcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgJnRhZ2xlbiAgICAgICAvKiBsZW5ndGggb2YgdGFnIHNwYWNlICovCiAgICAgICApICE9IENSWVBUX09LKSB7CiAgICAgICBwcmludGYoIkVycm9yIGVheF9kb25lOiAlcyIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAKLSAgIC8qIG5vdyB3ZSBoYXZlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaW4gInRhZyIgYW5kIGl0J3MgdGFnbGVuIGJ5dGVzIGxvbmcgKi8KLQorICAgLyogbm93IHdlIGhhdmUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbiAidGFnIiBhbmQgCisgICAgKiBpdCdzIHRhZ2xlbiBieXRlcyBsb25nICovCiB9CiBcZW5ke3ZlcmJhdGltfQogICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTEwNzEsNyArMTMwMSw4IEBACiAKIFxpbmRleHtlYXhcX2VuY3J5cHRcX2F1dGhlbnRpY2F0ZVxfbWVtb3J5fSBcaW5kZXh7ZWF4XF9kZWNyeXB0XF92ZXJpZnlcX21lbW9yeX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBlYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5KGludCBjaXBoZXIsCitpbnQgZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIHVuc2lnbmVkIGxvbmcgbm9uY2VsZW4sCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCB1bnNpZ25lZCBsb25nIGhlYWRlcmxlbiwKQEAgLTEwNzksNyArMTMxMCw4IEBACiAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCiAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4pOwogCi1pbnQgZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeShpbnQgY2lwaGVyLAoraW50IGVheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCkBAIC0xMDkzLDM4ICsxMzI1LDQ1IEBACiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgd2l0aCB0aG9zZSByZXNwZWN0aXZlIGZ1bmN0aW9ucy4gIAogCiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIGVheFxfZGVjcnlwdFxfdmVyaWZ5XF9tZW1vcnkoKSBkb2VzIG5vdCBlbWl0IGEgdGFnLiAgSW5zdGVhZCB5b3UgcGFzcyBpdCBhIHRhZyBhcyBpbnB1dCBhbmQgaXQgY29tcGFyZXMgaXQgYWdhaW5zdAotdGhlIHRhZyBpdCBjb21wdXRlZCB3aGlsZSBkZWNyeXB0aW5nIHRoZSBtZXNzYWdlLiAgSWYgdGhlIHRhZ3MgbWF0Y2ggdGhlbiBpdCBzdG9yZXMgYSAkMSQgaW4gYGByZXMnJywgb3RoZXJ3aXNlIGl0IHN0b3JlcyBhICQwJC4KK3RoZSB0YWcgaXQgY29tcHV0ZWQgd2hpbGUgZGVjcnlwdGluZyB0aGUgbWVzc2FnZS4gIElmIHRoZSB0YWdzIG1hdGNoIHRoZW4gaXQgc3RvcmVzIGEgJDEkIGluIFx0ZXh0aXR7cmVzfSwgb3RoZXJ3aXNlIGl0IHN0b3JlcyBhICQwJC4KIAogXHN1YnNlY3Rpb257T0NCIE1vZGV9CiBMaWJUb21DcnlwdCBwcm92aWRlcyBzdXBwb3J0IGZvciBhIG1vZGUgY2FsbGVkIE9DQlxmb290bm90ZXtTZWUgCi1QLiBSb2dhd2F5LCBNLiBCZWxsYXJlLCBKLiBCbGFjaywgVC4gS3JvdmV0eiwgYGBPQ0I6IEEgQmxvY2sgQ2lwaGVyIE1vZGUgb2YgT3BlcmF0aW9uIGZvciBFZmZpY2llbnQgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uJycufQorUC4gUm9nYXdheSwgTS4gQmVsbGFyZSwgSi4gQmxhY2ssIFQuIEtyb3ZldHosIFx0ZXh0aXR7T0NCOiBBIEJsb2NrIENpcGhlciBNb2RlIG9mIE9wZXJhdGlvbiBmb3IgRWZmaWNpZW50IEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbn0ufQogLiAgT0NCIGlzIGFuIGVuY3J5cHRpb24gcHJvdG9jb2wgdGhhdCBzaW11bHRhbmVvdXNseSBwcm92aWRlcyBhdXRoZW50aWNhdGlvbi4gIEl0IGlzIHNsaWdodGx5IGZhc3RlciB0byB1c2UgdGhhbiBFQVggbW9kZQogYnV0IGlzIGxlc3MgZmxleGlibGUuICBMZXQncyByZXZpZXcgaG93IHRvIGluaXRpYWxpemUgYW4gT0NCIGNvbnRleHQuCiAKIFxpbmRleHtvY2JcX2luaXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBvY2JfaW5pdChvY2Jfc3RhdGUgKm9jYiwgaW50IGNpcGhlciwgCi0gICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwgCitpbnQgb2NiX2luaXQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAga2V5bGVuLCAKICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSk7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgYGBvY2InJyBjb250ZXh0IHVzaW5nIGNpcGhlciBkZXNjcmlwdG9yIGBgY2lwaGVyJycuICBJdCB3aWxsIHVzZSBhIGBga2V5Jycgb2YgbGVuZ3RoIGBga2V5bGVuJycKLWFuZCB0aGUgcmFuZG9tIGBgbm9uY2UnJy4gIE5vdGUgdGhhdCBgYG5vbmNlJycgbXVzdCBiZSBhIHJhbmRvbSAocHVibGljKSBzdHJpbmcgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBibG9jayBjaXBoZXJzCitUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgXHRleHRpdHtvY2J9IGNvbnRleHQgdXNpbmcgY2lwaGVyIGRlc2NyaXB0b3IgXHRleHRpdHtjaXBoZXJ9LiAgSXQgd2lsbCB1c2UgYSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufQorYW5kIHRoZSByYW5kb20gXHRleHRpdHtub25jZX0uICBOb3RlIHRoYXQgXHRleHRpdHtub25jZX0gbXVzdCBiZSBhIHJhbmRvbSAocHVibGljKSBzdHJpbmcgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBibG9jayBjaXBoZXJzCiBibG9jayBzaXplIChlLmcuIDE2IGJ5dGVzIGZvciBBRVMpLgogCi1UaGlzIG1vZGUgaGFzIG5vIGBgQXNzb2NpYXRlZCBEYXRhJycgbGlrZSBFQVggbW9kZSBkb2VzIHdoaWNoIG1lYW5zIHlvdSBjYW5ub3QgYXV0aGVudGljYXRlIG1ldGFkYXRhIGFsb25nIHdpdGggdGhlIHN0cmVhbS4KK1RoaXMgbW9kZSBoYXMgbm8gXHRleHRpdHtBc3NvY2lhdGVkIERhdGF9IGxpa2UgRUFYIG1vZGUgZG9lcyB3aGljaCBtZWFucyB5b3UgY2Fubm90IGF1dGhlbnRpY2F0ZSBtZXRhZGF0YSBhbG9uZyB3aXRoIHRoZSBzdHJlYW0uCiBUbyBlbmNyeXB0IG9yIGRlY3J5cHQgZGF0YSB1c2UgdGhlIGZvbGxvd2luZy4KIAogXGluZGV4e29jYlxfZW5jcnlwdCgpfSBcaW5kZXh7b2NiXF9kZWNyeXB0KCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgb2NiX2VuY3J5cHQob2NiX3N0YXRlICpvY2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCk7Ci1pbnQgb2NiX2RlY3J5cHQob2NiX3N0YXRlICpvY2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCk7CitpbnQgb2NiX2VuY3J5cHQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QpOworCitpbnQgb2NiX2RlY3J5cHQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIGVuY3J5cHQgKG9yIGRlY3J5cHQgZm9yIHRoZSBsYXR0ZXIpIGEgZml4ZWQgbGVuZ3RoIG9mIGRhdGEgZnJvbSBgYHB0JycgdG8gYGBjdCcnICh2aWNlIHZlcnNhIGZvciB0aGUgbGF0dGVyKS4gIAotVGhleSBhc3N1bWUgdGhhdCBgYHB0JycgYW5kIGBgY3QnJyBhcmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgYmxvY2sgY2lwaGVyJ3MgYmxvY2sgc2l6ZS4gIE5vdGUgdGhhdCB5b3UgY2Fubm90IGNhbGwgCi1ib3RoIGZ1bmN0aW9ucyBnaXZlbiBhIHNpbmdsZSBgYG9jYicnIHN0YXRlLiAgRm9yIGJpLWRpcmVjdGlvbmFsIGNvbW11bmljYXRpb24geW91IHdpbGwgaGF2ZSB0byBpbml0aWFsaXplIHR3byBgYG9jYicnCi1zdGF0ZXMgKHdpdGggZGlmZmVyZW50IG5vbmNlcykuICBBbHNvIGBgcHQnJyBhbmQgYGBjdCcnIG1heSBwb2ludCB0byB0aGUgc2FtZSBsb2NhdGlvbiBpbiBtZW1vcnkuCitUaGlzIHdpbGwgZW5jcnlwdCAob3IgZGVjcnlwdCBmb3IgdGhlIGxhdHRlcikgYSBmaXhlZCBsZW5ndGggb2YgZGF0YSBmcm9tIFx0ZXh0aXR7cHR9IHRvIFx0ZXh0aXR7Y3R9ICh2aWNlIHZlcnNhIGZvciB0aGUgbGF0dGVyKS4gIAorVGhleSBhc3N1bWUgdGhhdCBcdGV4dGl0e3B0fSBhbmQgXHRleHRpdHtjdH0gYXJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGJsb2NrIGNpcGhlcidzIGJsb2NrIHNpemUuICBOb3RlIHRoYXQgeW91IGNhbm5vdCBjYWxsIAorYm90aCBmdW5jdGlvbnMgZ2l2ZW4gYSBzaW5nbGUgXHRleHRpdHtvY2J9IHN0YXRlLiAgRm9yIGJpLWRpcmVjdGlvbmFsIGNvbW11bmljYXRpb24geW91IHdpbGwgaGF2ZSB0byBpbml0aWFsaXplIHR3byBcdGV4dGl0e29jYn0KK3N0YXRlcyAod2l0aCBkaWZmZXJlbnQgbm9uY2VzKS4gIEFsc28gXHRleHRpdHtwdH0gYW5kIFx0ZXh0aXR7Y3R9IG1heSBwb2ludCB0byB0aGUgc2FtZSBsb2NhdGlvbiBpbiBtZW1vcnkuCiAKIFxzdWJzdWJzZWN0aW9ue1N0YXRlIFRlcm1pbmF0aW9ufQogCkBAIC0xMTMyLDQxICsxMzcxLDQ1IEBACiAKIFxpbmRleHtvY2JcX2RvbmVcX2VuY3J5cHQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBvY2JfZG9uZV9lbmNyeXB0KG9jYl9zdGF0ZSAqb2NiLCAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIHB0bGVuLAoraW50IG9jYl9kb25lX2VuY3J5cHQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHB0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCB1bnNpZ25lZCBsb25nICp0YWdsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGlzIHdpbGwgdGVybWluYXRlIGFuIGVuY3J5cHQgc3RyZWFtIGBgb2NiJycuICBJZiB5b3UgaGF2ZSB0cmFpbGluZyBieXRlcyBvZiBwbGFpbnRleHQgdGhhdCB3aWxsIG5vdCBjb21wbGV0ZSBhIGJsb2NrIAoteW91IGNhbiBwYXNzIHRoZW0gaGVyZS4gIFRoaXMgd2lsbCBhbHNvIGVuY3J5cHQgdGhlIGBgcHRsZW4nJyBieXRlcyBpbiBgYHB0JycgYW5kIHN0b3JlIHRoZW0gaW4gYGBjdCcnLiAgSXQgd2lsbCBhbHNvCi1zdG9yZSB1cHRvIGBgdGFnbGVuJycgYnl0ZXMgb2YgdGhlIHRhZyBpbnRvIGBgdGFnJycuCitUaGlzIHdpbGwgdGVybWluYXRlIGFuIGVuY3J5cHQgc3RyZWFtIFx0ZXh0aXR7b2NifS4gIElmIHlvdSBoYXZlIHRyYWlsaW5nIGJ5dGVzIG9mIHBsYWludGV4dCB0aGF0IHdpbGwgbm90IGNvbXBsZXRlIGEgYmxvY2sgCit5b3UgY2FuIHBhc3MgdGhlbSBoZXJlLiAgVGhpcyB3aWxsIGFsc28gZW5jcnlwdCB0aGUgXHRleHRpdHtwdGxlbn0gYnl0ZXMgaW4gXHRleHRpdHtwdH0gYW5kIHN0b3JlIHRoZW0gaW4gXHRleHRpdHtjdH0uICBJdCB3aWxsIGFsc28KK3N0b3JlIHVwIHRvIFx0ZXh0aXR7dGFnbGVufSBieXRlcyBvZiB0aGUgdGFnIGludG8gXHRleHRpdHt0YWd9LgogCi1Ob3RlIHRoYXQgYGBwdGxlbicnIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBibG9jayBzaXplIG9mIGJsb2NrIGNpcGhlciBjaG9zZW4uICBBbHNvIG5vdGUgdGhhdCBpZiB5b3UgaGF2ZSAKK05vdGUgdGhhdCBcdGV4dGl0e3B0bGVufSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYmxvY2sgc2l6ZSBvZiBibG9jayBjaXBoZXIgY2hvc2VuLiAgQWxzbyBub3RlIHRoYXQgaWYgeW91IGhhdmUgCiBhbiBpbnB1dCBtZXNzYWdlIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlIGJsb2NrIHNpemUgdGhlbiB5b3UgcGFzcyB0aGUgZGF0YSBoZXJlIChub3QgdG8gb2NiXF9lbmNyeXB0KCkpIG9ubHkuICAKIAogVG8gdGVybWluYXRlIGEgZGVjcnlwdCBzdHJlYW0gYW5kIGNvbXBhcmVkIHRoZSB0YWcgeW91IGNhbGwgdGhlIGZvbGxvd2luZy4KIAogXGluZGV4e29jYlxfZG9uZVxfZGVjcnlwdCgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IG9jYl9kb25lX2RlY3J5cHQob2NiX3N0YXRlICpvY2IsIAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsICB1bnNpZ25lZCBsb25nIGN0bGVuLAoraW50IG9jYl9kb25lX2RlY3J5cHQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBjdGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgdW5zaWduZWQgbG9uZyB0YWdsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXMpOworICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHRhZ2xlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZXMpOwogXGVuZHt2ZXJiYXRpbX0KLQogU2ltaWxhcmx5IHRvIHRoZSBwcmV2aW91cyBmdW5jdGlvbiB5b3UgY2FuIHBhc3MgdHJhaWxpbmcgbWVzc2FnZSBieXRlcyBpbnRvIHRoaXMgZnVuY3Rpb24uICBUaGlzIHdpbGwgY29tcHV0ZSB0aGUgCi10YWcgb2YgdGhlIG1lc3NhZ2UgKGludGVybmFsbHkpIGFuZCB0aGVuIGNvbXBhcmUgaXQgYWdhaW5zdCB0aGUgYGB0YWdsZW4nJyBieXRlcyBvZiBgYHRhZycnIHByb3ZpZGVkLiAgQnkgZGVmYXVsdAotYGByZXMnJyBpcyBzZXQgdG8gemVyby4gIElmIGFsbCBgYHRhZ2xlbicnIGJ5dGVzIG9mIGBgdGFnJycgY2FuIGJlIHZlcmlmaWVkIHRoZW4gYGByZXMnJyBpcyBzZXQgdG8gb25lIChhdXRoZW50aWNhdGVkCit0YWcgb2YgdGhlIG1lc3NhZ2UgKGludGVybmFsbHkpIGFuZCB0aGVuIGNvbXBhcmUgaXQgYWdhaW5zdCB0aGUgXHRleHRpdHt0YWdsZW59IGJ5dGVzIG9mIFx0ZXh0aXR7dGFnfSBwcm92aWRlZC4gIEJ5IGRlZmF1bHQKK1x0ZXh0aXR7cmVzfSBpcyBzZXQgdG8gemVyby4gIElmIGFsbCBcdGV4dGl0e3RhZ2xlbn0gYnl0ZXMgb2YgXHRleHRpdHt0YWd9IGNhbiBiZSB2ZXJpZmllZCB0aGVuIFx0ZXh0aXR7cmVzfSBpcyBzZXQgdG8gb25lIChhdXRoZW50aWNhdGVkCiBtZXNzYWdlKS4KIAogXHN1YnN1YnNlY3Rpb257UGFja2V0IEZ1bmN0aW9uc30KIFRvIG1ha2UgbGlmZSBzaW1wbGVyIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIG1lbW9yeSBib3VuZCBPQ0IuCiAKLVxpbmRleHtvY2JcX2VuY3J5cHRcX2F1dGhlbnRpY2F0ZVxfbWVtb3J5KCl9CislXGluZGV4e29jYlxfZW5jcnlwdFxfYXV0aGVudGljYXRlXF9tZW1vcnkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBvY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5KGludCBjaXBoZXIsCitpbnQgb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKQEAgLTExNzQsMTIgKzE0MTcsMTMgQEAKICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGlzIHdpbGwgT0NCIGVuY3J5cHQgdGhlIG1lc3NhZ2UgYGBwdCcnIG9mIGxlbmd0aCBgYHB0bGVuJycgYW5kIHN0b3JlIHRoZSBjaXBoZXJ0ZXh0IGluIGBgY3QnJy4gIFRoZSBsZW5ndGggYGBwdGxlbicnCitUaGlzIHdpbGwgT0NCIGVuY3J5cHQgdGhlIG1lc3NhZ2UgXHRleHRpdHtwdH0gb2YgbGVuZ3RoIFx0ZXh0aXR7cHRsZW59LCBhbmQgc3RvcmUgdGhlIGNpcGhlcnRleHQgaW4gXHRleHRpdHtjdH0uICBUaGUgbGVuZ3RoIFx0ZXh0aXR7cHRsZW59CiBjYW4gYmUgYW55IGFyYml0cmFyeSBsZW5ndGguICAKIAogXGluZGV4e29jYlxfZGVjcnlwdFxfdmVyaWZ5XF9tZW1vcnkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBvY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5KGludCBjaXBoZXIsCitpbnQgb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAgICAgdW5zaWduZWQgbG9uZyBjdGxlbiwKQEAgLTExODgsMTggKzE0MzIsMjAgQEAKICAgICAgICAgICBpbnQgICAgICAgICAgICpyZXMpOwogXGVuZHt2ZXJiYXRpbX0KIAotU2ltaWxhcmx5IHRoaXMgd2lsbCBPQ0IgZGVjcnlwdCBhbmQgY29tcGFyZSB0aGUgaW50ZXJuYWxseSBjb21wdXRlZCB0YWcgYWdhaW5zdCB0aGUgdGFnIHByb3ZpZGVkLiBgYHJlcycnIGlzIHNldCAKK1NpbWlsYXJseSwgdGhpcyB3aWxsIE9DQiBkZWNyeXB0LCBhbmQgY29tcGFyZSB0aGUgaW50ZXJuYWxseSBjb21wdXRlZCB0YWcgYWdhaW5zdCB0aGUgdGFnIHByb3ZpZGVkLiBcdGV4dGl0e3Jlc30gaXMgc2V0IAogYXBwcm9wcmlhdGVseS4KIAogXHN1YnNlY3Rpb257Q0NNIE1vZGV9Ci1DQ00gaXMgYSBOSVNUIHByb3Bvc2FsIGZvciBFbmNyeXB0K0F1dGhlbnRpY2F0ZSB0aGF0IGlzIGNlbnRlcmVkIGFyb3VuZCB1c2luZyBBRVMgKG9yIGFueSAxNi0tYnl0ZSBjaXBoZXIpIGFzIGEgcHJpbWl0aXZlLiAgVW5saWtlIEVBWCBhbmQgT0NCIG1vZGUKLWl0IGlzIG9ubHkgbWVhbnQgZm9yIGBgcGFja2V0JycgbW9kZSB3aGVyZSB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBpcyBrbm93biBpbiBhZHZhbmNlLiAgU2luY2UgaXQgaXMgYSBwYWNrZXQgbW9kZSBmdW5jdGlvbiBDQ00gb25seSBoYXMgb25lIAorQ0NNIGlzIGEgTklTVCBwcm9wb3NhbCBmb3IgZW5jcnlwdCArIGF1dGhlbnRpY2F0ZSB0aGF0IGlzIGNlbnRlcmVkIGFyb3VuZCB1c2luZyBBRVMgKG9yIGFueSAxNi0tYnl0ZSBjaXBoZXIpIGFzIGEgcHJpbWl0aXZlLiAgVW5saWtlIEVBWCBhbmQgT0NCIG1vZGUsCitpdCBpcyBvbmx5IG1lYW50IGZvciBcdGV4dGl0e3BhY2tldH0gbW9kZSB3aGVyZSB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBpcyBrbm93biBpbiBhZHZhbmNlLiAgU2luY2UgaXQgaXMgYSBwYWNrZXQgbW9kZSBmdW5jdGlvbiwgQ0NNIG9ubHkgaGFzIG9uZSAKIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgdGhlIHByb3RvY29sLgogCiBcaW5kZXh7Y2NtXF9tZW1vcnkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBjY21fbWVtb3J5KGludCBjaXBoZXIsCitpbnQgY2NtX21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBzeW1tZXRyaWNfa2V5ICAgICAgICp1c2tleSwKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIHVuc2lnbmVkIGxvbmcgbm9uY2VsZW4sCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCB1bnNpZ25lZCBsb25nIGhlYWRlcmxlbiwKICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCkBAIC0xMjA4LDE2ICsxNDU0LDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGludCAgZGlyZWN0aW9uKTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoaXMgcGVyZm9ybXMgdGhlIGBgQ0NNJycgb3BlcmF0aW9uIG9uIHRoZSBkYXRhLiAgVGhlIGBgY2lwaGVyJycgdmFyaWFibGUgaW5kaWNhdGVzIHdoaWNoIGNpcGhlciBpbiB0aGUgZGVzY3JpcHRvciB0YWJsZSB0byB1c2UuICBJdCBtdXN0IGhhdmUgYSAKLTE2LS1ieXRlIGJsb2NrIHNpemUgZm9yIENDTS4gIFRoZSBrZXkgaXMgYGBrZXknJyB3aXRoIGEgbGVuZ3RoIG9mIGBga2V5bGVuJycgb2N0ZXRzLiAgVGhlIG5vbmNlIG9yIHNhbHQgaXMgYGBub25jZScnIG9mCi1sZW5ndGggYGBub25jZWxlbicnIG9jdGV0cy4gIFRoZSBoZWFkZXIgaXMgbWV0YS0tZGF0YSB5b3Ugd2FudCB0byBzZW5kIHdpdGggdGhlIG1lc3NhZ2UgYnV0IG5vdCBoYXZlIGVuY3J5cHRlZCwgaXQgaXMgc3RvcmVkIGluIGBgaGVhZGVyJycKLW9mIGxlbmd0aCBgYGhlYWRlcmxlbicnIG9jdGV0cy4gIFRoZSBoZWFkZXIgY2FuIGJlIHplcm8gb2N0ZXRzIGxvbmcgKGlmICRoZWFkZXJsZW4gPSAwJCB0aGVuIHlvdSBjYW4gcGFzcyBgYGhlYWRlcicnIGFzIFx0ZXh0YmZ7TlVMTH0pLiAgCitUaGlzIHBlcmZvcm1zIHRoZSBcdGV4dGl0e0NDTX0gb3BlcmF0aW9uIG9uIHRoZSBkYXRhLiAgVGhlIFx0ZXh0aXR7Y2lwaGVyfSB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hpY2ggY2lwaGVyIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlIHRvIHVzZS4gIEl0IG11c3QgaGF2ZSBhIAorMTYtLWJ5dGUgYmxvY2sgc2l6ZSBmb3IgQ0NNLiAgCiAKLVRoZSBwbGFpbnRleHQgaXMgc3RvcmVkIGluIGBgcHQnJyBhbmQgdGhlIGNpcGhlcnRleHQgaW4gYGBjdCcnLiAgVGhlIGxlbmd0aCBvZiBib3RoIGFyZSBleHBlY3RlZCB0byBiZSBlcXVhbCBhbmQgaXMgcGFzc2VkIGluIGFzIGBgcHRsZW4nJy4gIEl0IGlzCi1hbGxvd2FibGUgdGhhdCAkcHQgPSBjdCQuICBUaGUgYGBkaXJlY3Rpb24nJyB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hldGhlciBlbmNyeXB0aW9uIChkaXJlY3Rpb24gJD0kIFx0ZXh0YmZ7Q0NNXF9FTkNSWVBUfSkgb3IgCitUaGUga2V5IGNhbiBiZSBzcGVjaWZpZWQgaW4gb25lIG9mIHR3byBmYXNoaW9ucy4gIEZpcnN0LCBpdCBjYW4gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIG9jdGV0cyBpbiBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufS4gIEFsdGVybmF0aXZlbHksCitpdCBjYW4gYmUgcGFzc2VkIGluIGFzIGEgcHJldmlvdXNseSBzY2hlZHVsZWQga2V5IGluIFx0ZXh0aXR7dXNrZXl9LiAgVGhlIGxhdHRlciBmYXNoaW9uIHNhdmVzIHRpbWUgd2hlbiB0aGUgc2FtZSBrZXkgaXMgdXNlZCBmb3IgbXVsdGlwbGUgcGFja2V0cy4gIElmCitcdGV4dGl0e3Vza2V5fSBpcyBub3QgXHRleHRiZntOVUxMfSwgdGhlbiBcdGV4dGl0e2tleX0gbWF5IGJlIFx0ZXh0YmZ7TlVMTH0gKGFuZCB2aWNlLXZlcnNhKS4gCisKK1RoZSBub25jZSBvciBzYWx0IGlzIFx0ZXh0aXR7bm9uY2V9IG9mIGxlbmd0aCBcdGV4dGl0e25vbmNlbGVufSBvY3RldHMuICBUaGUgaGVhZGVyIGlzIG1ldGEtLWRhdGEgeW91IHdhbnQgdG8gc2VuZCB3aXRoIHRoZSBtZXNzYWdlIGJ1dCBub3QgaGF2ZSAKK2VuY3J5cHRlZCwgaXQgaXMgc3RvcmVkIGluIFx0ZXh0aXR7aGVhZGVyfSBvZiBsZW5ndGggXHRleHRpdHtoZWFkZXJsZW59IG9jdGV0cy4gIFRoZSBoZWFkZXIgY2FuIGJlIHplcm8gb2N0ZXRzIGxvbmcgKGlmICRoZWFkZXJsZW4gPSAwJCB0aGVuIAoreW91IGNhbiBwYXNzIFx0ZXh0aXR7aGVhZGVyfSBhcyBcdGV4dGJme05VTEx9KS4gIAorCitUaGUgcGxhaW50ZXh0IGlzIHN0b3JlZCBpbiBcdGV4dGl0e3B0fSwgYW5kIHRoZSBjaXBoZXJ0ZXh0IGluIFx0ZXh0aXR7Y3R9LiAgVGhlIGxlbmd0aCBvZiBib3RoIGFyZSBleHBlY3RlZCB0byBiZSBlcXVhbCBhbmQgaXMgcGFzc2VkIGluIGFzIFx0ZXh0aXR7cHRsZW59LiAgSXQgaXMKK2FsbG93YWJsZSB0aGF0ICRwdCA9IGN0JC4gIFRoZSBcdGV4dGl0e2RpcmVjdGlvbn0gdmFyaWFibGUgaW5kaWNhdGVzIHdoZXRoZXIgZW5jcnlwdGlvbiAoZGlyZWN0aW9uICQ9JCBcdGV4dGJme0NDTVxfRU5DUllQVH0pIG9yIAogZGVjcnlwdGlvbiAoZGlyZWN0aW9uICQ9JCBcdGV4dGJme0NDTVxfREVDUllQVH0pIGlzIHRvIGJlIHBlcmZvcm1lZC4KIAotQXMgaW1wbGVtZW50ZWQgdGhpcyBjb3B5IG9mIENDTSBjYW5ub3QgaGFuZGxlIGEgaGVhZGVyIG9yIHBsYWludGV4dCBsb25nZXIgdGhhbiAkMl57MzJ9IC0gMSQgb2N0ZXRzIGxvbmcuICAKK0FzIGltcGxlbWVudGVkLCB0aGlzIHZlcnNpb24gb2YgQ0NNIGNhbm5vdCBoYW5kbGUgaGVhZGVyIG9yIHBsYWludGV4dCBkYXRhIGxvbmdlciB0aGFuICQyXnszMn0gLSAxJCBvY3RldHMgbG9uZy4gIAogCiBZb3UgY2FuIHRlc3QgdGhlIGltcGxlbWVudGF0aW9uIG9mIENDTSB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCiAKQEAgLTEyMjYsMTAyICsxNDc4LDE2NyBAQAogaW50IGNjbV90ZXN0KHZvaWQpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gaWYgdGhlIENDTSByb3V0aW5lIHBhc3NlcyBrbm93biB0ZXN0IHZlY3RvcnMuCitUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBpZiB0aGUgQ0NNIHJvdXRpbmUgcGFzc2VzIGtub3duIHRlc3QgdmVjdG9ycy4gIEl0IHJlcXVpcmVzIEFFUyBvciBSaWpuZGFlbCB0byBiZSByZWdpc3RlcmVkIHByZXZpb3VzbHksIG90aGVyd2lzZSBpdCB3aWxsCityZXR1cm4gXHRleHRiZntDUllQVFxfTk9QfS4KKworXHN1YnN1YnNlY3Rpb257Q0NNIEV4YW1wbGV9CitUaGUgZm9sbG93aW5nIGlzIGEgc2FtcGxlIG9mIGhvdyB0byBjYWxsIENDTS4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCBub25jZVsxMl0sIHB0WzMyXSwgY3RbMzJdLCAKKyAgICAgICAgICAgICAgICAgdGFnWzE2XSwgdGFnY3BbMTZdOworICAgdW5zaWduZWQgbG9uZyB0YWdsZW47CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgLyogcmVnaXN0ZXIgY2lwaGVyICovCisgICByZWdpc3Rlcl9jaXBoZXIoJmFlc19kZXNjKTsKKworICAgLyogc29tZWhvdyBmaWxsIGtleSwgbm9uY2UsIHB0ICovCisgCisgICAvKiBlbmNyeXB0IGl0ICovCisgICB0YWdsZW4gPSBzaXplb2YodGFnKTsKKyAgIGlmICgoZXJyID0gCisgICAgICAgY2NtX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksCisgICAgICAgICAgICAgICAgICBrZXksIDE2LCAgICAvKiAxMjgtYml0IGtleSAqLworICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgLyogbm90IHByZXNjaGVkdWxlZCAqLworICAgICAgICAgICAgICAgICAgbm9uY2UsIDEyLCAgLyogOTYtYml0IG5vbmNlICovCisgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAgICAvKiBubyBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICAgIHB0LCAzMiwgICAgIC8qIDMyLWJ5dGUgcGxhaW50ZXh0ICovCisgICAgICAgICAgICAgICAgICBjdCwgICAgICAgICAvKiBjaXBoZXJ0ZXh0ICovCisgICAgICAgICAgICAgICAgICB0YWcsICZ0YWdsZW4sCisgICAgICAgICAgICAgICAgICBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcHJpbnRmKCJjY21fbWVtb3J5IGVycm9yICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgfQorICAgLyogY3RbMC4uMzFdIGFuZCB0YWdbMC4uMTVdIG5vdyBob2xkIHRoZSBvdXRwdXQgKi8KKworICAgLyogZGVjcnlwdCBpdCAqLworICAgdGFnbGVuID0gc2l6ZW9mKHRhZ2NwKTsKKyAgIGlmICgoZXJyID0gCisgICAgICAgY2NtX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksCisgICAgICAgICAgICAgICAgICBrZXksIDE2LCAgICAvKiAxMjgtYml0IGtleSAqLworICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgLyogbm90IHByZXNjaGVkdWxlZCAqLworICAgICAgICAgICAgICAgICAgbm9uY2UsIDEyLCAgLyogOTYtYml0IG5vbmNlICovCisgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAgICAvKiBubyBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICAgIGN0LCAzMiwgICAgIC8qIDMyLWJ5dGUgY2lwaGVydGV4dCAqLworICAgICAgICAgICAgICAgICAgcHQsICAgICAgICAgLyogcGxhaW50ZXh0ICovCisgICAgICAgICAgICAgICAgICB0YWdjcCwgJnRhZ2xlbiwKKyAgICAgICAgICAgICAgICAgIENDTV9ERUNSWVBUKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBwcmludGYoImNjbV9tZW1vcnkgZXJyb3IgJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIG5vdyBwdFswLi4zMV0gc2hvdWxkIGhvbGQgdGhlIG9yaWdpbmFsIHBsYWludGV4dCwKKyAgICAgIHRhZ2NwWzAuLjE1XSBhbmQgdGFnWzAuLjE1XSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjb250ZW50cyAqLworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CiAKIFxzdWJzZWN0aW9ue0dDTSBNb2RlfQotR2Fsb2lzIGNvdW50ZXIgbW9kZSBpcyBhbiBJRUVFIHByb3Bvc2FsIGZvciBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24uICBMaWtlIEVBWCBhbmQgT0NCIGl0IGNhbiBiZSB1c2VkIGluIGEgc3RyZWFtaW5nIGNhcGFjaXR5IGhvd2V2ZXIsIHVubGlrZSBFQVggaXQgY2Fubm90Ci1hY2NlcHQgYGBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEnJyAobWV0YS0tZGF0YSkgYWZ0ZXIgcGxhaW50ZXh0IGhhcyBiZWVuIHByb2Nlc3NlZC4gIFRoaXMgbW9kZSBhbHNvIG9ubHkgd29ya3Mgd2l0aCBibG9jayBjaXBoZXJzIHdpdGggYSBzaXh0ZWVuCi1ieXRlIGJsb2NrLgorR2Fsb2lzIGNvdW50ZXIgbW9kZSBpcyBhbiBJRUVFIHByb3Bvc2FsIGZvciBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gKGFsc28gaXQgaXMgYSBwbGFubmVkIE5JU1Qgc3RhbmRhcmQpLiAgTGlrZSBFQVggYW5kIE9DQiBtb2RlLCBpdCBjYW4gYmUgdXNlZCBpbiBhIHN0cmVhbWluZyBjYXBhY2l0eSAKK2hvd2V2ZXIsIHVubGlrZSBFQVggaXQgY2Fubm90IGFjY2VwdCBcdGV4dGl0e2FkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YX0gKG1ldGEtLWRhdGEpIGFmdGVyIHBsYWludGV4dCBoYXMgYmVlbiBwcm9jZXNzZWQuICBUaGlzIG1vZGUgYWxzbyBvbmx5IHdvcmtzIHdpdGggCitibG9jayBjaXBoZXJzIHdpdGggYSAxNi0tYnl0ZSBibG9jay4KIAotQSBHQ00gc3RyZWFtIGlzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCBpbiB0aHJlZSBtb2RlcyBlYWNoIG9uZSBzZXF1ZW50aWFsIHNlcmlhbC4gIEZpcnN0IHRoZSBpbml0aWFsIHZlY3RvciAocGVyIHNlc3Npb24pIGRhdGEgaXMgcHJvY2Vzc2VkLiAgVGhpcyBzaG91bGQgYmUgCi11bmlxdWUgdG8gZXZlcnkgc2Vzc2lvbi4gIE5leHQgdGhlIHRoZSBvcHRpb25hbCBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEgaXMgcHJvY2Vzc2VkIGFuZCBmaW5hbGx5IHRoZSBwbGFpbnRleHQuICAKK0EgR0NNIHN0cmVhbSBpcyBtZWFudCB0byBiZSBwcm9jZXNzZWQgaW4gdGhyZWUgbW9kZXMsIG9uZSBhZnRlciBhbm90aGVyLiAgRmlyc3QsIHRoZSBpbml0aWFsIHZlY3RvciAocGVyIHNlc3Npb24pIGRhdGEgaXMgcHJvY2Vzc2VkLiAgVGhpcyBzaG91bGQgYmUgCit1bmlxdWUgdG8gZXZlcnkgc2Vzc2lvbi4gIE5leHQsIHRoZSB0aGUgb3B0aW9uYWwgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIGlzIHByb2Nlc3NlZCwgYW5kIGZpbmFsbHkgdGhlIHBsYWludGV4dCAob3IgY2lwaGVydGV4dCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbikuICAKIAogXHN1YnN1YnNlY3Rpb257SW5pdGlhbGl6YXRpb259CiBUbyBpbml0aWFsaXplIHRoZSBHQ00gY29udGV4dCB3aXRoIGEgc2VjcmV0IGtleSBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCiAKIFxpbmRleHtnY21cX2luaXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBnY21faW5pdChnY21fc3RhdGUgKmdjbSwgaW50IGNpcGhlciwKLSAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOworaW50IGdjbV9pbml0KCAgICAgICAgICBnY21fc3RhdGUgKmdjbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAga2V5bGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIGluaXRpYWxpemVzIHRoZSBHQ00gc3RhdGUgYGBnY20nJyBmb3IgdGhlIGdpdmVuIGNpcGhlciBpbmRleGVkIGJ5IGBgY2lwaGVyJycgd2l0aCBhIHNlY3JldCBrZXkgYGBrZXknJyBvZiBsZW5ndGggYGBrZXlsZW4nJyBvY3RldHMuICBUaGUgY2lwaGVyIGNob3NlbgotbXVzdCBoYXZlIGEgMTYtLWJ5dGUgYmxvY2sgc2l6ZSAoZS5nLiBBRVMpLiAgCitUaGlzIGluaXRpYWxpemVzIHRoZSBHQ00gc3RhdGUgXHRleHRpdHtnY219IGZvciB0aGUgZ2l2ZW4gY2lwaGVyIGluZGV4ZWQgYnkgXHRleHRpdHtjaXBoZXJ9LCB3aXRoIGEgc2VjcmV0IGtleSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBvY3RldHMuICBUaGUgY2lwaGVyIAorY2hvc2VuIG11c3QgaGF2ZSBhIDE2LS1ieXRlIGJsb2NrIHNpemUgKGUuZy4sIEFFUykuICAKIAogXHN1YnN1YnNlY3Rpb257SW5pdGlhbCBWZWN0b3J9CiBBZnRlciB0aGUgc3RhdGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKG9yIHJlc2V0KSB0aGUgbmV4dCBzdGVwIGlzIHRvIGFkZCB0aGUgc2Vzc2lvbiAob3IgcGFja2V0KSBpbml0aWFsIHZlY3Rvci4gIEl0IHNob3VsZCBiZSB1bmlxdWUgcGVyIHBhY2tldCBlbmNyeXB0ZWQuCiAKIFxpbmRleHtnY21cX2FkZFxfaXYoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBnY21fYWRkX2l2KGdjbV9zdGF0ZSAqZ2NtLCAKLSAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAgICAgdW5zaWduZWQgbG9uZyBJVmxlbik7CitpbnQgZ2NtX2FkZF9pdiggICAgICAgICAgZ2NtX3N0YXRlICpnY20sIAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsICAgICAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIElWbGVuKTsKIFxlbmR7dmVyYmF0aW19Ci0KLVRoaXMgYWRkcyB0aGUgaW5pdGlhbCB2ZWN0b3Igb2N0ZXRzIGZyb20gYGBJVicnIG9mIGxlbmd0aCBgYElWbGVuJycgdG8gdGhlIEdDTSBzdGF0ZSBgYGdjbScnLiAgWW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYXMgbWFueSB0aW1lcyBhcyByZXF1aXJlZAorVGhpcyBhZGRzIHRoZSBpbml0aWFsIHZlY3RvciBvY3RldHMgZnJvbSBcdGV4dGl0e0lWfSBvZiBsZW5ndGggXHRleHRpdHtJVmxlbn0gdG8gdGhlIEdDTSBzdGF0ZSBcdGV4dGl0e2djbX0uICBZb3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBhcyBtYW55IHRpbWVzIGFzIHJlcXVpcmVkCiB0byBwcm9jZXNzIHRoZSBlbnRpcmUgSVYuICAKIAotTm90ZSB0aGF0IHRoZSBHQ00gcHJvdG9jb2xzIHByb3ZpZGVzIGEgYGBzaG9ydGN1dCcnIGZvciAxMi0tYnl0ZSBJVnMgd2hlcmUgbm8gcHJlcHJvY2Vzc2luZyBpcyB0byBiZSBkb25lLiAgSWYgeW91IHdhbnQgdG8gbWluaW1pemUgcGVyIHBhY2tldCBsYXRlbmN5IGl0J3MgaWRlYWwKLXRvIG9ubHkgdXNlIDEyLS1ieXRlIElWcy4gIFlvdSBjYW4ganVzdCBpbmNyZW1lbnQgaXQgbGlrZSBhIGNvdW50ZXIgZm9yIGVhY2ggcGFja2V0IGFuZCB0aGUgQ1RSIFtwcml2YWN5XSB3aWxsIGJlIGVuc3VyZWQuCitOb3RlOiB0aGUgR0NNIHByb3RvY29scyBwcm92aWRlcyBhIFx0ZXh0aXR7c2hvcnRjdXR9IGZvciAxMi0tYnl0ZSBJVnMgd2hlcmUgbm8gcHJlLXByb2Nlc3NpbmcgaXMgdG8gYmUgZG9uZS4gIElmIHlvdSB3YW50IHRvIG1pbmltaXplIHBlciBwYWNrZXQgbGF0ZW5jeSBpdCBpcyBpZGVhbAordG8gb25seSB1c2UgMTItLWJ5dGUgSVZzLiAgWW91IGNhbiBqdXN0IGluY3JlbWVudCBpdCBsaWtlIGEgY291bnRlciBmb3IgZWFjaCBwYWNrZXQuCiAKIFxzdWJzdWJzZWN0aW9ue0FkZGl0aW9uYWwgQXV0aGVudGljYXRpb24gRGF0YX0KLUFmdGVyIHRoZSBlbnRpcmUgSVYgaGFzIGJlZW4gcHJvY2Vzc2VkIHRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEgY2FuIGJlIHByb2Nlc3NlZC4gIFVubGlrZSB0aGUgSVYgYSBwYWNrZXQvc2Vzc2lvbiBkb2VzIG5vdCByZXF1aXJlIGFkZGl0aW9uYWwKLWF1dGhlbnRpY2F0aW9uIGRhdGEgKEFBRCkgZm9yIHNlY3VyaXR5LiAgVGhlIEFBRCBpcyBtZWFudCB0byBiZSB1c2VkIGFzIHNpZGUtLWNoYW5uZWwgZGF0YSB5b3Ugd2FudCB0byBiZSBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHBhY2tldC4gIE5vdGUgdGhhdCBvbmNlCi15b3UgYmVnaW4gYWRkaW5nIEFBRCB0byB0aGUgR0NNIHN0YXRlIHlvdSBjYW5ub3QgcmV0dXJuIHRvIGFkZGluZyBJViBkYXRhIHVudGlsIHRoZSBzdGF0ZSBpcyByZXNldC4KK0FmdGVyIHRoZSBlbnRpcmUgSVYgaGFzIGJlZW4gcHJvY2Vzc2VkLCB0aGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIGNhbiBiZSBwcm9jZXNzZWQuICBVbmxpa2UgdGhlIElWLCBhIHBhY2tldC9zZXNzaW9uIGRvZXMgbm90IHJlcXVpcmUgYWRkaXRpb25hbAorYXV0aGVudGljYXRpb24gZGF0YSAoQUFEKSBmb3Igc2VjdXJpdHkuICBUaGUgQUFEIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgc2lkZS0tY2hhbm5lbCBkYXRhIHlvdSB3YW50IHRvIGJlIGF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcGFja2V0LiAgTm90ZTogIG9uY2UKK3lvdSBiZWdpbiBhZGRpbmcgQUFEIHRvIHRoZSBHQ00gc3RhdGUgeW91IGNhbm5vdCByZXR1cm4gdG8gYWRkaW5nIElWIGRhdGEgdW50aWwgdGhlIHN0YXRlIGhhcyBiZWVuIHJlc2V0LgogCiBcaW5kZXh7Z2NtXF9hZGRcX2FhZCgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGdjbV9hZGRfYWFkKGdjbV9zdGF0ZSAqZ2NtLCAKLSAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkYXRhLCAgICAgdW5zaWduZWQgbG9uZyBhZGF0YWxlbik7CitpbnQgZ2NtX2FkZF9hYWQoICAgICAgICAgIGdjbV9zdGF0ZSAqZ2NtLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgYWRhdGFsZW4pOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgYWRkcyB0aGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIGBgYWRhdGEnJyBvZiBsZW5ndGggYGBhZGF0YWxlbicnIHRvIHRoZSBHQ00gc3RhdGUgYGBnY20nJy4KK1RoaXMgYWRkcyB0aGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIFx0ZXh0aXR7YWRhdGF9IG9mIGxlbmd0aCBcdGV4dGl0e2FkYXRhbGVufSB0byB0aGUgR0NNIHN0YXRlIFx0ZXh0aXR7Z2NtfS4KIAogXHN1YnN1YnNlY3Rpb257UGxhaW50ZXh0IFByb2Nlc3Npbmd9Ci1BZnRlciB0aGUgQUFEIGhhcyBiZWVuIHByb2Nlc3NlZCB0aGUgcGxhaW50ZXh0IChvciBjaXBoZXJ0ZXh0IGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uKSBjYW4gYmUgcHJvY2Vzc2VkLiAgCitBZnRlciB0aGUgQUFEIGhhcyBiZWVuIHByb2Nlc3NlZCwgdGhlIHBsYWludGV4dCAob3IgY2lwaGVydGV4dCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbikgY2FuIGJlIHByb2Nlc3NlZC4gIAogCiBcaW5kZXh7Z2NtXF9wcm9jZXNzKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZ2NtX3Byb2Nlc3MoZ2NtX3N0YXRlICpnY20sCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKLSAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pOworaW50IGdjbV9wcm9jZXNzKCAgICBnY21fc3RhdGUgKmdjbSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgcHRsZW4sCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgZGlyZWN0aW9uKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHByb2Nlc3NlcyBtZXNzYWdlIGRhdGEgd2hlcmUgYGBwdCcnIGlzIHRoZSBwbGFpbnRleHQgYW5kIGBgY3QnJyBpcyB0aGUgY2lwaGVydGV4dC4gIFRoZSBsZW5ndGggb2YgYm90aCBhcmUgZXF1YWwgYW5kIHN0b3JlZCBpbiBgYHB0bGVuJycuICBEZXBlbmRpbmcgb24gdGhlIAotbW9kZSBgYHB0JycgaXMgdGhlIGlucHV0IGFuZCBgYGN0JycgaXMgdGhlIG91dHB1dCAob3IgdmljZSB2ZXJzYSkuICBXaGVuIGBgZGlyZWN0aW9uJycgZXF1YWxzIFx0ZXh0YmZ7R0NNXF9FTkNSWVBUfSB0aGUgcGxhaW50ZXh0IGlzIHJlYWQsIGVuY3J5cHRlZCBhbmQgc3RvcmVkCi1pbiB0aGUgY2lwaGVydGV4dCBidWZmZXIuICBXaGVuIGBgZGlyZWN0aW9uJycgZXF1YWxzIFx0ZXh0YmZ7R0NNXF9ERUNSWVBUfSB0aGUgb3Bwb3NpdGUgb2NjdXJzLgorVGhpcyBwcm9jZXNzZXMgbWVzc2FnZSBkYXRhIHdoZXJlIFx0ZXh0aXR7cHR9IGlzIHRoZSBwbGFpbnRleHQgYW5kIFx0ZXh0aXR7Y3R9IGlzIHRoZSBjaXBoZXJ0ZXh0LiAgVGhlIGxlbmd0aCBvZiBib3RoIGFyZSBlcXVhbCBhbmQgc3RvcmVkIGluIFx0ZXh0aXR7cHRsZW59LiAgRGVwZW5kaW5nIG9uIAordGhlIG1vZGUgXHRleHRpdHtwdH0gaXMgdGhlIGlucHV0IGFuZCBcdGV4dGl0e2N0fSBpcyB0aGUgb3V0cHV0IChvciB2aWNlIHZlcnNhKS4gIFdoZW4gXHRleHRpdHtkaXJlY3Rpb259IGVxdWFscyBcdGV4dGJme0dDTVxfRU5DUllQVH0gdGhlIHBsYWludGV4dCBpcyByZWFkLCAKK2VuY3J5cHRlZCBhbmQgc3RvcmVkIGluIHRoZSBjaXBoZXJ0ZXh0IGJ1ZmZlci4gIFdoZW4gXHRleHRpdHtkaXJlY3Rpb259IGVxdWFscyBcdGV4dGJme0dDTVxfREVDUllQVH0gdGhlIG9wcG9zaXRlIG9jY3Vycy4KIAogXHN1YnN1YnNlY3Rpb257U3RhdGUgVGVybWluYXRpb259CiBUbyB0ZXJtaW5hdGUgYSBHQ00gc3RhdGUgYW5kIHJldHJpZXZlIHRoZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIHRhZyBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCiAKIFxpbmRleHtnY21cX2RvbmUoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBnY21fZG9uZShnY21fc3RhdGUgKmdjbSwgCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CitpbnQgZ2NtX2RvbmUoICAgIGdjbV9zdGF0ZSAqZ2NtLCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIAorICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CiBcZW5ke3ZlcmJhdGltfQotVGhpcyB0ZXJtaW5hdGVzIHRoZSBHQ00gc3RhdGUgYGBnY20nJyBhbmQgc3RvcmVzIHRoZSB0YWcgaW4gYGB0YWcnJyBvZiBsZW5ndGggYGB0YWdsZW4nJyBvY3RldHMuCitUaGlzIHRlcm1pbmF0ZXMgdGhlIEdDTSBzdGF0ZSBcdGV4dGl0e2djbX0gYW5kIHN0b3JlcyB0aGUgdGFnIGluIFx0ZXh0aXR7dGFnfSBvZiBsZW5ndGggXHRleHRpdHt0YWdsZW59IG9jdGV0cy4KIAogXHN1YnN1YnNlY3Rpb257U3RhdGUgUmVzZXR9CiBUaGUgY2FsbCB0byBnY21cX2luaXQoKSB3aWxsIHBlcmZvcm0gY29uc2lkZXJhYmxlIHByZS0tY29tcHV0YXRpb24gKHdoZW4gXHRleHRiZntHQ01cX1RBQkxFU30gaXMgZGVmaW5lZCkgYW5kIGlmIHlvdSdyZSBnb2luZyB0byBiZSBkZWFsaW5nIHdpdGggYSBsb3Qgb2YgcGFja2V0cwotaXQgaXMgdmVyeSBjb3N0bHkgdG8gaGF2ZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuICBUbyBhaWQgaW4gdGhpcyBlbmRlYXZvdXIgdGhlIHJlc2V0IGZ1bmN0aW9uIGhhcyBiZWVuIHByb3ZpZGVkLgoraXQgaXMgdmVyeSBjb3N0bHkgdG8gaGF2ZSB0byBjYWxsIGl0IHJlcGVhdGVkbHkuICBUbyBhaWQgaW4gdGhpcyBlbmRlYXZvdXIsIHRoZSByZXNldCBmdW5jdGlvbiBoYXMgYmVlbiBwcm92aWRlZC4KIAogXGluZGV4e2djbVxfcmVzZXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KIGludCBnY21fcmVzZXQoZ2NtX3N0YXRlICpnY20pOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIHJlc2V0IHRoZSBHQ00gc3RhdGUgYGBnY20nJyB0byB0aGUgc3RhdGUgdGhhdCBnY21cX2luaXQoKSBsZWZ0IGl0LiAgVGhlIHVzZXIgd291bGQgdGhlbiBjYWxsIGdjbVxfYWRkXF9pdigpLCBnY21cX2FkZFxfYWFkKCksIGV0Yy4KK1RoaXMgd2lsbCByZXNldCB0aGUgR0NNIHN0YXRlIFx0ZXh0aXR7Z2NtfSB0byB0aGUgc3RhdGUgdGhhdCBnY21cX2luaXQoKSBsZWZ0IGl0LiAgVGhlIHVzZXIgd291bGQgdGhlbiBjYWxsIGdjbVxfYWRkXF9pdigpLCBnY21cX2FkZFxfYWFkKCksIGV0Yy4KIAogXHN1YnN1YnNlY3Rpb257T25lLS1TaG90IFBhY2tldH0KIFRvIHByb2Nlc3MgYSBzaW5nbGUgcGFja2V0IHVuZGVyIGFueSBnaXZlbiBrZXkgdGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb24gY2FuIGJlIHVzZWQuCiAKIFxpbmRleHtnY21cX21lbW9yeSgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGdjbV9tZW1vcnkoICAgICAgaW50ICAgICAgICAgICBjaXBoZXIsCi0gICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAotICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsICAgICB1bnNpZ25lZCBsb25nIElWbGVuLAotICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRhdGEsICB1bnNpZ25lZCBsb25nIGFkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbik7CitpbnQgZ2NtX21lbW9yeSggICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgICAgdW5zaWduZWQgbG9uZyBJVmxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGF0YSwgdW5zaWduZWQgbG9uZyBhZGF0YWxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICBkaXJlY3Rpb24pOwogXGVuZHt2ZXJiYXRpbX0KIAogVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIEdDTSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBrZXksIElWIGFuZCBBQUQgdmFsdWUgdGhlbiBwcm9jZWVkIHRvIGVuY3J5cHQgb3IgZGVjcnlwdCB0aGUgbWVzc2FnZSB0ZXh0IGFuZCBzdG9yZSB0aGUgZmluYWwKQEAgLTEzNjEsNyArMTY3OCw4IEBACiAgICB9CiAKICAgIC8qIHByb2Nlc3MgdGhlIHBsYWludGV4dCAqLwotICAgaWYgKChlcnIgPSBnY21fcHJvY2VzcyhnY20sIHB0LCBwdGxlbiwgcHQsIEdDTV9FTkNSWVBUKSkgIT0gQ1JZUFRfT0spIHsKKyAgIGlmICgoZXJyID0gCisgICAgICAgIGdjbV9wcm9jZXNzKGdjbSwgcHQsIHB0bGVuLCBwdCwgR0NNX0VOQ1JZUFQpKSAhPSBDUllQVF9PSykgewogICAgICAgcmV0dXJuIGVycjsKICAgIH0KIApAQCAtMTM3Myw3ICsxNjkxLDggQEAKIAogICAgLyogLi4uIHNlbmQgYSBoZWFkZXIgZGVzY3JpYmluZyB0aGUgbGVuZ3RocyAuLi4gKi8KIAotICAgLyogZGVwZW5kaW5nIG9uIHRoZSBwcm90b2NvbCBhbmQgaG93IElWIGlzIGdlbmVyYXRlZCB5b3UgbWF5IGhhdmUgdG8gc2VuZCBpdCB0b28uLi4gKi8KKyAgIC8qIGRlcGVuZGluZyBvbiB0aGUgcHJvdG9jb2wgYW5kIGhvdyBJViBpcyAKKyAgICAqIGdlbmVyYXRlZCB5b3UgbWF5IGhhdmUgdG8gc2VuZCBpdCB0b28uLi4gKi8KICAgIHNlbmQoc29ja2V0LCBpdiwgaXZsZW4sIDApOwogCiAgICAvKiBzZW5kIHRoZSBhYWQgKi8KQEAgLTE0MDEsNyArMTcyMCw4IEBACiAgICByZWdpc3Rlcl9jaXBoZXIoJmFlc19kZXNjKTsKIAogICAgLyogaW5pdCB0aGUgR0NNIHN0YXRlICovCi0gICBpZiAoKGVyciA9IGdjbV9pbml0KCZnY20sIGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNikpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IAorICAgICAgICBnY21faW5pdCgmZ2NtLCBmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYpKSAhPSBDUllQVF9PSykgewogICAgICAgd2hpbmVfYW5kX3BvdXQoZXJyKTsKICAgIH0KIApAQCAtMTQxNiw3ICsxNzM2LDggQEAKICAgICAgICAgICAgfQogICAgICAgIH0KIAotICAgICAgIGlmICgoZXJyID0gc2VuZF9wYWNrZXQocHQsIHB0bGVuLCBpdiwgMTIsIE5VTEwsIDAsICZnY20pKSAhPSBDUllQVF9PSykgeworICAgICAgIGlmICgoZXJyID0gc2VuZF9wYWNrZXQocHQsIHB0bGVuLCBpdiwgMTIsIE5VTEwsIDAsICZnY20pKSAKKyAgICAgICAgICAgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgd2hpbmVfYW5kX3BvdXQoZXJyKTsKICAgICAgICB9CiAgICB9CkBAIC0xNDI2LDI0ICsxNzQ3LDIzIEBACiBcZW5ke3NtYWxsfQogCiBcY2hhcHRlcntPbmUtV2F5IENyeXB0b2dyYXBoaWMgSGFzaCBGdW5jdGlvbnN9Ci1cc2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KLQotTGlrZSB0aGUgY2lwaGVycyB0aGVyZSBhcmUgaGFzaCBjb3JlIGZ1bmN0aW9ucyBhbmQgYSB1bml2ZXJzYWwgZGF0YSB0eXBlIHRvIGhvbGQgdGhlIGhhc2ggc3RhdGUgY2FsbGVkIGBgaGFzaFxfc3RhdGUnJy4gIAotVG8gaW5pdGlhbGl6ZSBoYXNoIFhYWCAod2hlcmUgWFhYIGlzIHRoZSBuYW1lKSBjYWxsOgorXG15c2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KK0xpa2UgdGhlIGNpcGhlcnMsIHRoZXJlIGFyZSBoYXNoIGNvcmUgZnVuY3Rpb25zIGFuZCBhIHVuaXZlcnNhbCBkYXRhIHR5cGUgdG8gaG9sZCB0aGUgaGFzaCBzdGF0ZSBjYWxsZWQgXHRleHRpdHtoYXNoXF9zdGF0ZX0uICBUbyBpbml0aWFsaXplIGhhc2ggCitYWFggKHdoZXJlIFhYWCBpcyB0aGUgbmFtZSkgY2FsbDoKIFxpbmRleHtIYXNoIEZ1bmN0aW9uc30KIFxiZWdpbnt2ZXJiYXRpbX0KIHZvaWQgWFhYX2luaXQoaGFzaF9zdGF0ZSAqbWQpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyBzaW1wbHkgc2V0cyB1cCB0aGUgaGFzaCB0byB0aGUgZGVmYXVsdCBzdGF0ZSBnb3Zlcm5lZCBieSB0aGUgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIGhhc2guICBUbyBhZGQgZGF0YSB0byB0aGUgCi1tZXNzYWdlIGJlaW5nIGhhc2hlZCBjYWxsOgorVGhpcyBzaW1wbHkgc2V0cyB1cCB0aGUgaGFzaCB0byB0aGUgZGVmYXVsdCBzdGF0ZSBnb3Zlcm5lZCBieSB0aGUgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIGhhc2guICBUbyBhZGQgZGF0YSB0byB0aGUgbWVzc2FnZSBiZWluZyBoYXNoZWQgY2FsbDoKIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBYWFhfcHJvY2VzcyhoYXNoX3N0YXRlICptZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IFhYWF9wcm9jZXNzKCAgICAgICAgIGhhc2hfc3RhdGUgKm1kLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4pOwogXGVuZHt2ZXJiYXRpbX0KLQogRXNzZW50aWFsbHkgYWxsIGhhc2ggbWVzc2FnZXMgYXJlIHZpcnR1YWxseSBpbmZpbml0ZWx5XGZvb3Rub3Rle01vc3QgaGFzaGVzIGFyZSBsaW1pdGVkIHRvICQyXns2NH0kIGJpdHMgb3IgMiwzMDUsODQzLDAwOSwyMTMsNjkzLDk1MiBieXRlcy59IGxvbmcgbWVzc2FnZSB3aGljaCAKLWFyZSBidWZmZXJlZC4gIFRoZSBkYXRhIGNhbiBiZSBwYXNzZWQgaW4gYW55IHNpemVkIGNodW5rcyBhcyBsb25nIGFzIHRoZSBvcmRlciBvZiB0aGUgYnl0ZXMgYXJlIHRoZSBzYW1lIHRoZSBtZXNzYWdlIGRpZ2VzdAotKGhhc2ggb3V0cHV0KSB3aWxsIGJlIHRoZSBzYW1lLiAgRm9yIGV4YW1wbGUsIHRoaXMgbWVhbnMgdGhhdDoKK2FyZSBidWZmZXJlZC4gIFRoZSBkYXRhIGNhbiBiZSBwYXNzZWQgaW4gYW55IHNpemVkIGNodW5rcyBhcyBsb25nIGFzIHRoZSBvcmRlciBvZiB0aGUgYnl0ZXMgYXJlIHRoZSBzYW1lIHRoZSBtZXNzYWdlIGRpZ2VzdCAoaGFzaCBvdXRwdXQpIHdpbGwgYmUgdGhlIHNhbWUuICBGb3IgZXhhbXBsZSwgCit0aGlzIG1lYW5zIHRoYXQ6CiBcYmVnaW57dmVyYmF0aW19CiBtZDVfcHJvY2VzcygmbWQsICJoZWxsbyAiLCA2KTsKIG1kNV9wcm9jZXNzKCZtZCwgIndvcmxkIiwgNSk7CkBAIC0xNDU2LDIwICsxNzc2LDIwIEBACiAKIFRvIGZpbmFsbHkgZ2V0IHRoZSBtZXNzYWdlIGRpZ2VzdCAodGhlIGhhc2gpIGNhbGw6CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgWFhYX2RvbmUoaGFzaF9zdGF0ZSAqbWQsIAotICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQpOworaW50IFhYWF9kb25lKCAgIGhhc2hfc3RhdGUgKm1kLCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmlzaCB1cCB0aGUgaGFzaCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgYGBvdXQnJyBhcnJheS4gIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGBgb3V0JycgaXMgbG9uZwotZW5vdWdoIGZvciB0aGUgaGFzaCBpbiBxdWVzdGlvbi4gIE9mdGVuIGhhc2hlcyBhcmUgdXNlZCB0byBnZXQga2V5cyBmb3Igc3ltbWV0cmljIGNpcGhlcnMgc28gdGhlIGBgWFhYXF9kb25lKCknJyBmdW5jdGlvbnMKLXdpbGwgd2lwZSB0aGUgYGBtZCcnIHZhcmlhYmxlIGJlZm9yZSByZXR1cm5pbmcgYXV0b21hdGljYWxseS4KK1RoaXMgZnVuY3Rpb24gd2lsbCBmaW5pc2ggdXAgdGhlIGhhc2ggYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIFx0ZXh0aXR7b3V0fSBhcnJheS4gIFlvdSBtdXN0IGVuc3VyZSB0aGF0IFx0ZXh0aXR7b3V0fSBpcyBsb25nCitlbm91Z2ggZm9yIHRoZSBoYXNoIGluIHF1ZXN0aW9uLiAgT2Z0ZW4gaGFzaGVzIGFyZSB1c2VkIHRvIGdldCBrZXlzIGZvciBzeW1tZXRyaWMgY2lwaGVycyBzbyB0aGUgXHRleHRpdHtYWFhcX2RvbmUoKX0gZnVuY3Rpb25zCit3aWxsIHdpcGUgdGhlIFx0ZXh0aXR7bWR9IHZhcmlhYmxlIGJlZm9yZSByZXR1cm5pbmcgYXV0b21hdGljYWxseS4KIAogVG8gdGVzdCBhIGhhc2ggZnVuY3Rpb24gY2FsbDoKIFxiZWdpbnt2ZXJiYXRpbX0KIGludCBYWFhfdGVzdCh2b2lkKTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoaXMgd2lsbCByZXR1cm4ge1xiZiBDUllQVE9cX09LfSBpZiB0aGUgaGFzaCBtYXRjaGVzIHRoZSB0ZXN0IHZlY3RvcnMsIG90aGVyd2lzZSBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuICBBbgorVGhpcyB3aWxsIHJldHVybiB7XGJmIENSWVBUXF9PS30gaWYgdGhlIGhhc2ggbWF0Y2hlcyB0aGUgdGVzdCB2ZWN0b3JzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLiAgQW4KIGV4YW1wbGUgc25pcHBldCB0aGF0IGhhc2hlcyBhIG1lc3NhZ2Ugd2l0aCBtZDUgaXMgZ2l2ZW4gYmVsb3cuCiBcYmVnaW57c21hbGx9CiBcYmVnaW57dmVyYmF0aW19CkBAIC0xNDkzLDI4ICsxODEzLDQ2IEBACiBcZW5ke3ZlcmJhdGltfQogXGVuZHtzbWFsbH0KIAotXHNlY3Rpb257SGFzaCBEZXNjcmlwdG9yc30KLUxpa2UgdGhlIHNldCBvZiBjaXBoZXJzIHRoZSBzZXQgb2YgaGFzaGVzIGhhdmUgZGVzY3JpcHRvcnMgdG9vLiAgVGhleSBhcmUgc3RvcmVkIGluIGFuIGFycmF5IGNhbGxlZCBgYGhhc2hcX2Rlc2NyaXB0b3InJyBhbmQKK1xteXNlY3Rpb257SGFzaCBEZXNjcmlwdG9yc30KK0xpa2UgdGhlIHNldCBvZiBjaXBoZXJzLCB0aGUgc2V0IG9mIGhhc2hlcyBoYXZlIGRlc2NyaXB0b3JzIGFzIHdlbGwuICBUaGV5IGFyZSBzdG9yZWQgaW4gYW4gYXJyYXkgY2FsbGVkIFx0ZXh0aXR7aGFzaFxfZGVzY3JpcHRvcn0gYW5kCiBhcmUgZGVmaW5lZCBieToKIFxiZWdpbnt2ZXJiYXRpbX0KIHN0cnVjdCBfaGFzaF9kZXNjcmlwdG9yIHsKICAgICBjaGFyICpuYW1lOworCiAgICAgdW5zaWduZWQgbG9uZyBoYXNoc2l6ZTsgICAgLyogZGlnZXN0IG91dHB1dCBzaXplIGluIGJ5dGVzICAqLwogICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tzaXplOyAgIC8qIHRoZSBibG9jayBzaXplIHRoZSBoYXNoIHVzZXMgKi8KKwogICAgIHZvaWQgKCppbml0KSAgIChoYXNoX3N0YXRlICpoYXNoKTsKLSAgICBpbnQgICgqcHJvY2VzcykoaGFzaF9zdGF0ZSAqaGFzaCwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKKworICAgIGludCAgKCpwcm9jZXNzKSggICAgICAgICBoYXNoX3N0YXRlICpoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbik7CisKICAgICBpbnQgICgqZG9uZSkgICAoaGFzaF9zdGF0ZSAqaGFzaCwgdW5zaWduZWQgY2hhciAqb3V0KTsKKwogICAgIGludCAgKCp0ZXN0KSAgICh2b2lkKTsKIH07CiBcZW5ke3ZlcmJhdGltfQogCi1TaW1pbGFybHkgYGBuYW1lJycgaXMgdGhlIG5hbWUgb2YgdGhlIGhhc2ggZnVuY3Rpb24gaW4gQVNDSUkgKGFsbCBsb3dlcmNhc2UpLiAgYGBoYXNoc2l6ZScnIGlzIHRoZSBzaXplIG9mIHRoZSBkaWdlc3Qgb3V0cHV0Ci1pbiBieXRlcy4gIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSBwb2ludGVycyB0byB0aGUgZnVuY3Rpb25zIHRoYXQgZG8gdGhlIHJlc3BlY3RpdmUgdGFza3MuICBUaGVyZSBpcyBhIGZ1bmN0aW9uIHRvCi1zZWFyY2ggdGhlIGFycmF5IGFzIHdlbGwgY2FsbGVkIGBgaW50IGZpbmRcX2hhc2goY2hhciAqbmFtZSknJy4gIEl0IHJldHVybnMgLTEgaWYgdGhlIGhhc2ggaXMgbm90IGZvdW5kLCBvdGhlcndpc2UgdGhlCitcaW5kZXh7ZmluZFxfaGFzaCgpfQorVGhlIFx0ZXh0aXR7bmFtZX0gbWVtYmVyIGlzIHRoZSBuYW1lIG9mIHRoZSBoYXNoIGZ1bmN0aW9uIChhbGwgbG93ZXJjYXNlKS4gIFRoZSBcdGV4dGl0e2hhc2hzaXplfSBtZW1iZXIgaXMgdGhlIHNpemUgb2YgdGhlIGRpZ2VzdCBvdXRwdXQKK2luIGJ5dGVzLCB3aGlsZSBcdGV4dGl0e2Jsb2Nrc2l6ZX0gaXMgdGhlIHNpemUgb2YgYmxvY2tzIHRoZSBoYXNoIGV4cGVjdHMgdG8gdGhlIGNvbXByZXNzaW9uIGZ1bmN0aW9uLiAgVGVjaG5pY2FsbHksIHRoaXMgZGV0YWlsIGlzIG5vdCBpbXBvcnRhbnQKK2ZvciBoaWdoIGxldmVsIGRldmVsb3BlcnMgYnV0IGlzIHVzZWZ1bCB0byBrbm93IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiAgCisKK1RoZSBcdGV4dGl0e2luaXR9IG1lbWJlciBpbml0aWFsaXplcyB0aGUgaGFzaCwgXHRleHRpdHtwcm9jZXNzfSBwYXNzZXMgZGF0YSB0aHJvdWdoIHRoZSBoYXNoLCBcdGV4dGl0e2RvbmV9IHRlcm1pbmF0ZXMgdGhlIGhhc2ggYW5kIHJldHJpZXZlcyB0aGUgCitkaWdlc3QuICBUaGUgXHRleHRpdHt0ZXN0fSBtZW1iZXIgdGVzdHMgdGhlIGhhc2ggYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHRlc3QgdmVjdG9ycy4KKworVGhlcmUgaXMgYSBmdW5jdGlvbiB0byBzZWFyY2ggdGhlIGFycmF5IGFzIHdlbGwgY2FsbGVkIFx0ZXh0aXR7aW50IGZpbmRcX2hhc2goY2hhciAqbmFtZSl9LiAgSXQgcmV0dXJucyAtMSBpZiB0aGUgaGFzaCBpcyBub3QgZm91bmQsIG90aGVyd2lzZSwgdGhlCiBwb3NpdGlvbiBpbiB0aGUgZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgaGFzaC4KIAotWW91IGNhbiB1c2UgdGhlIHRhYmxlIHRvIGluZGlyZWN0bHkgY2FsbCBhIGhhc2ggZnVuY3Rpb24gdGhhdCBpcyBjaG9zZW4gYXQgcnVudGltZS4gIEZvciBleGFtcGxlOgorSW4gYWRkaXRpb24sIHRoZXJlIGlzIGFsc28gZmluZFxfaGFzaFxfb2lkKCkgd2hpY2ggZmluZHMgYSBoYXNoIGJ5IHRoZSBBU04uMSBPQkpFQ1QgSURFTlRJRklFUiBzdHJpbmcuCitcaW5kZXh7ZmluZFxfaGFzaFxfb2lkKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZmluZF9oYXNoX29pZChjb25zdCB1bnNpZ25lZCBsb25nICpJRCwgdW5zaWduZWQgbG9uZyBJRGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitZb3UgY2FuIHVzZSB0aGUgdGFibGUgdG8gaW5kaXJlY3RseSBjYWxsIGEgaGFzaCBmdW5jdGlvbiB0aGF0IGlzIGNob3NlbiBhdCBydW4tdGltZS4gIEZvciBleGFtcGxlOgogXGJlZ2lue3NtYWxsfQogXGJlZ2lue3ZlcmJhdGltfQogI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CkBAIC0xNTU5LDI4ICsxODk3LDQ4IEBACiBcZW5ke3ZlcmJhdGltfQogXGVuZHtzbWFsbH0KIAotTm90ZSB0aGUgdXNhZ2Ugb2YgYGBNQVhCTE9DS1NJWkUnJy4gIEluIExpYnRvbWNyeXB0IG5vIHN5bW1ldHJpYyBibG9jaywga2V5IG9yIGhhc2ggZGlnZXN0IGlzIGxhcmdlciB0aGFuIE1BWEJMT0NLU0laRSBpbgorTm90ZSB0aGUgdXNhZ2Ugb2YgXHRleHRiZntNQVhCTE9DS1NJWkV9LiAgSW4gTGliVG9tQ3J5cHQsIG5vIHN5bW1ldHJpYyBibG9jaywga2V5IG9yIGhhc2ggZGlnZXN0IGlzIGxhcmdlciB0aGFuIFx0ZXh0YmZ7TUFYQkxPQ0tTSVpFfSBpbgogbGVuZ3RoLiAgVGhpcyBwcm92aWRlcyBhIHNpbXBsZSBzaXplIHlvdSBjYW4gc2V0IHlvdXIgYXV0b21hdGljIGFycmF5cyB0byB0aGF0IHdpbGwgbm90IGdldCBvdmVycnVuLgogCi1UaGVyZSBhcmUgdGhyZWUgaGVscGVyIGZ1bmN0aW9ucyBhcyB3ZWxsOgotXGluZGV4e2hhc2hcX21lbW9yeSgpfSBcaW5kZXh7aGFzaFxfZmlsZSgpfQorVGhlcmUgYXJlIHRocmVlIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZSB3b3JraW5nIHdpdGggaGFzaGVzIGVhc2llci4gIFRoZSBmaXJzdCBpcyBhIGZ1bmN0aW9uIHRvIGhhc2ggYSBidWZmZXIsIGFuZCBwcm9kdWNlIHRoZSBkaWdlc3QgaW4gYSBzaW5nbGUKK2Z1bmN0aW9uIGNhbGwuCisKK1xpbmRleHtoYXNoXF9tZW1vcnkoKX0gCiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgaGFzaF9tZW1vcnkoaW50IGhhc2gsIAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7Ci0KLWludCBoYXNoX2ZpbGUoaW50IGhhc2gsIGNvbnN0IGNoYXIgKmZuYW1lLCAKLSAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwotCi1pbnQgaGFzaF9maWxlaGFuZGxlKGludCBoYXNoLCBGSUxFICppbiwgCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBoYXNoX21lbW9yeSggICAgICAgICAgICAgICAgaW50ICBoYXNoLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoZSBgYGhhc2gnJyBwYXJhbWV0ZXIgaXMgdGhlIGxvY2F0aW9uIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoIChcdGV4dGl0e2UuZy4gdGhlIHJldHVybiBvZiBmaW5kXF9oYXNoKCl9KS4gIAotVGhlIGBgKm91dGxlbicnIHZhcmlhYmxlIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgb3V0cHV0IHNpemUuICBZb3UgbXVzdCBzZXQgaXQgdG8gdGhlIHNpemUgb2YgeW91ciBvdXRwdXQgYnVmZmVyIGJlZm9yZSAKLWNhbGxpbmcgdGhlIGZ1bmN0aW9ucy4gIFdoZW4gdGhleSBjb21wbGV0ZSBzdWNjZXNmdWxseSB0aGV5IHN0b3JlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IGJhY2sgaW4gaXQuICBUaGUgZnVuY3Rpb25zIAotYXJlIG90aGVyd2lzZSBzdHJhaWdodGZvcndhcmQuICBUaGUgYGBoYXNoXF9maWxlaGFuZGxlJycgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGBgaW4nJyBpcyBhbiBmaWxlIGhhbmRsZSBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuICAKLUl0IHdpbGwgaGFzaCB0byB0aGUgZW5kIG9mIGZpbGUgYW5kIG5vdCByZXNldCB0aGUgZmlsZSBwb3NpdGlvbiB3aGVuIGZpbmlzaGVkLgorVGhpcyB3aWxsIGhhc2ggdGhlIGRhdGEgcG9pbnRlZCB0byBieSBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0uICBUaGUgaGFzaCB1c2VkIGlzIGluZGV4ZWQgYnkgdGhlIFx0ZXh0aXR7aGFzaH0gcGFyYW1ldGVyLiAgVGhlIG1lc3NhZ2UKK2RpZ2VzdCBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9LCBhbmQgdGhlIFx0ZXh0aXR7b3V0bGVufSBwYXJhbWV0ZXIgaXMgdXBkYXRlZCB0byBob2xkIHRoZSBtZXNzYWdlIGRpZ2VzdCBzaXplLiAgCisKK1RoZSBuZXh0IGhlbHBlciBmdW5jdGlvbiBhbGxvd3MgZm9yIHRoZSBoYXNoaW5nIG9mIGEgZmlsZSBiYXNlZCBvbiBhIGZpbGUgbmFtZS4gIAorXGluZGV4e2hhc2hcX2ZpbGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBoYXNoX2ZpbGUoICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZuYW1lLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBoYXNoIHRoZSBmaWxlIG5hbWVkIGJ5IFx0ZXh0aXR7Zm5hbWV9IHVzaW5nIHRoZSBoYXNoIGluZGV4ZWQgYnkgXHRleHRpdHtoYXNofS4gIFRoZSBmaWxlIG5hbWVkIGluIHRoaXMgZnVuY3Rpb24gY2FsbCBtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZSAKK3VzZXIgb3duaW5nIHRoZSBwcm9jZXNzIHBlcmZvcm1pbmcgdGhlIHJlcXVlc3QuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBvbWl0dGVkIGJ5IHRoZSBcdGV4dGJme0xUQ1xfTk9cX0ZJTEV9IGRlZmluZSwgd2hpY2ggZm9yY2VzIGl0IHRvIHJldHVybiBcdGV4dGJme0NSWVBUXF9OT1B9Cit3aGVuIGl0IGlzIGNhbGxlZC4gIFRoZSBtZXNzYWdlIGRpZ2VzdCBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9LCBhbmQgdGhlIFx0ZXh0aXR7b3V0bGVufSBwYXJhbWV0ZXIgaXMgdXBkYXRlZCB0byBob2xkIHRoZSBtZXNzYWdlIGRpZ2VzdCBzaXplLiAgCisKK1xpbmRleHtoYXNoXF9maWxlaGFuZGxlKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgaGFzaF9maWxlaGFuZGxlKCAgICAgICAgICBpbnQgIGhhc2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICppbiwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgaGFzaCB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IHRoZSBoYW5kbGUgXHRleHRpdHtpbn0gdXNpbmcgdGhlIGhhc2ggaW5kZXhlZCBieSBcdGV4dGl0e2hhc2h9LiAgVGhpcyB3aWxsIGJlZ2luIGhhc2hpbmcgZnJvbSB0aGUgY3VycmVudCBmaWxlIHBvaW50ZXIgcG9zaXRpb24sIGFuZAord2lsbCBub3QgcmV3aW5kIHRoZSBmaWxlIHBvaW50ZXIgd2hlbiBmaW5pc2hlZC4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIG9taXR0ZWQgYnkgdGhlIFx0ZXh0YmZ7TFRDXF9OT1xfRklMRX0gZGVmaW5lLCB3aGljaCBmb3JjZXMgaXQgdG8gcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX05PUH0KK3doZW4gaXQgaXMgY2FsbGVkLiAgVGhlIG1lc3NhZ2UgZGlnZXN0IGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0sIGFuZCB0aGUgXHRleHRpdHtvdXRsZW59IHBhcmFtZXRlciBpcyB1cGRhdGVkIHRvIGhvbGQgdGhlIG1lc3NhZ2UgZGlnZXN0IHNpemUuICAKIAogVG8gcGVyZm9ybSB0aGUgYWJvdmUgaGFzaCB3aXRoIG1kNSB0aGUgZm9sbG93aW5nIGNvZGUgY291bGQgYmUgdXNlZDoKIFxiZWdpbntzbWFsbH0KQEAgLTE2MDMsNyArMTk2MSw4IEBACiAKICAgIC8qIGNhbGwgdGhlIGhhc2ggKi8KICAgIGxlbiA9IHNpemVvZihvdXQpOwotICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShpZHgsICJoZWxsbyB3b3JsZCIsIDExLCBvdXQsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgaWYgKChlcnIgPSAKKyAgICAgICBoYXNoX21lbW9yeShpZHgsICJoZWxsbyB3b3JsZCIsIDExLCBvdXQsICZsZW4pKSAhPSBDUllQVF9PSykgewogICAgICAgcHJpbnRmKCJFcnJvciBoYXNoaW5nIGRhdGE6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICAgICByZXR1cm4gLTE7CiAgICB9CkBAIC0xNjEyLDE1ICsxOTcxLDI5IEBACiBcZW5ke3ZlcmJhdGltfQogXGVuZHtzbWFsbH0KIAotVGhlIGZvbGxvd2luZyBoYXNoZXMgYXJlIHByb3ZpZGVkIGFzIG9mIHRoaXMgcmVsZWFzZToKK1xzdWJzZWN0aW9ue0hhc2ggUmVnaXN0cmF0aW9ufQorU2ltaWxhciB0byB0aGUgY2lwaGVyIGRlc2NyaXB0b3IgdGFibGUgeW91IG11c3QgcmVnaXN0ZXIgeW91ciBoYXNoIGFsZ29yaXRobXMgYmVmb3JlIHlvdSBjYW4gdXNlIHRoZW0uICBUaGVzZSBmdW5jdGlvbnMKK3dvcmsgZXhhY3RseSBsaWtlIHRob3NlIG9mIHRoZSBjaXBoZXIgcmVnaXN0cmF0aW9uIGNvZGUuICBUaGUgZnVuY3Rpb25zIGFyZToKK1xpbmRleHtyZWdpc3RlclxfaGFzaCgpfSBcaW5kZXh7dW5yZWdpc3RlclxfaGFzaCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHJlZ2lzdGVyX2hhc2goY29uc3Qgc3RydWN0IF9oYXNoX2Rlc2NyaXB0b3IgKmhhc2gpOworCitpbnQgdW5yZWdpc3Rlcl9oYXNoKGNvbnN0IHN0cnVjdCBfaGFzaF9kZXNjcmlwdG9yICpoYXNoKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZSBmb2xsb3dpbmcgaGFzaGVzIGFyZSBwcm92aWRlZCBhcyBvZiB0aGlzIHJlbGVhc2Ugd2l0aGluIHRoZSBMaWJUb21DcnlwdCBsaWJyYXJ5OgogXGluZGV4e0hhc2ggZGVzY3JpcHRvciB0YWJsZX0KKworXGJlZ2lue2ZpZ3VyZX1baGVyZV0KIFxiZWdpbntjZW50ZXJ9CiBcYmVnaW57dGFidWxhcn17fGN8Y3xjfH0KLSAgICAgIFxobGluZSBOYW1lICYgRGVzY3JpcHRvciBOYW1lICYgU2l6ZSBvZiBNZXNzYWdlIERpZ2VzdCAoYnl0ZXMpIFxcCisgICAgICBcaGxpbmUgXHRleHRiZntOYW1lfSAmIFx0ZXh0YmZ7RGVzY3JpcHRvciBOYW1lfSAmIFx0ZXh0YmZ7U2l6ZSBvZiBNZXNzYWdlIERpZ2VzdCAoYnl0ZXMpfSBcXAogICAgICAgXGhsaW5lIFdISVJMUE9PTCAmIHdoaXJscG9vbFxfZGVzYyAmIDY0IFxcCiAgICAgICBcaGxpbmUgU0hBLTUxMiAmIHNoYTUxMlxfZGVzYyAmIDY0IFxcCiAgICAgICBcaGxpbmUgU0hBLTM4NCAmIHNoYTM4NFxfZGVzYyAmIDQ4IFxcCisgICAgICBcaGxpbmUgUklQRU1ELTMyMCAmIHJtZDE2MFxfZGVzYyAmIDQwIFxcCiAgICAgICBcaGxpbmUgU0hBLTI1NiAmIHNoYTI1NlxfZGVzYyAmIDMyIFxcCisgICAgICBcaGxpbmUgUklQRU1ELTI1NiAmIHJtZDE2MFxfZGVzYyAmIDMyIFxcCiAgICAgICBcaGxpbmUgU0hBLTIyNCAmIHNoYTIyNFxfZGVzYyAmIDI4IFxcCiAgICAgICBcaGxpbmUgVElHRVItMTkyICYgdGlnZXJcX2Rlc2MgJiAyNCBcXAogICAgICAgXGhsaW5lIFNIQS0xICYgc2hhMVxfZGVzYyAmIDIwIFxcCkBAIC0xNjMyLDIyICsyMDA1LDE3IEBACiAgICAgICBcaGxpbmUKIFxlbmR7dGFidWxhcn0KIFxlbmR7Y2VudGVyfQorXGNhcHRpb257QnVpbHQtLUluIFNvZnR3YXJlIEhhc2hlc30KK1xlbmR7ZmlndXJlfQorXHZmaWwKIAotU2ltaWxhciB0byB0aGUgY2lwaGVyIGRlc2NyaXB0b3IgdGFibGUgeW91IG11c3QgcmVnaXN0ZXIgeW91ciBoYXNoIGFsZ29yaXRobXMgYmVmb3JlIHlvdSBjYW4gdXNlIHRoZW0uICBUaGVzZSBmdW5jdGlvbnMKLXdvcmsgZXhhY3RseSBsaWtlIHRob3NlIG9mIHRoZSBjaXBoZXIgcmVnaXN0cmF0aW9uIGNvZGUuICBUaGUgZnVuY3Rpb25zIGFyZToKLVxpbmRleHtyZWdpc3RlclxfaGFzaCgpfSBcaW5kZXh7dW5yZWdpc3RlclxfaGFzaCgpfQotXGJlZ2lue3ZlcmJhdGltfQotaW50IHJlZ2lzdGVyX2hhc2goY29uc3Qgc3RydWN0IF9oYXNoX2Rlc2NyaXB0b3IgKmhhc2gpOwotaW50IHVucmVnaXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgX2hhc2hfZGVzY3JpcHRvciAqaGFzaCk7Ci1cZW5ke3ZlcmJhdGltfQotCi1cc2VjdGlvbntDaXBoZXIgSGFzaCBDb25zdHJ1Y3Rpb259CitcbXlzZWN0aW9ue0NpcGhlciBIYXNoIENvbnN0cnVjdGlvbn0KIFxpbmRleHtDaXBoZXIgSGFzaCBDb25zdHJ1Y3Rpb259Ci1BbiBhZGRpdGlvbiB0byB0aGUgc3VpdGUgb2YgaGFzaCBmdW5jdGlvbnMgaXMgdGhlIGBgQ2lwaGVyIEhhc2ggQ29uc3RydWN0aW9uJycgb3IgYGBDSEMnJyBtb2RlLiAgSW4gdGhpcyBtb2RlCitBbiBhZGRpdGlvbiB0byB0aGUgc3VpdGUgb2YgaGFzaCBmdW5jdGlvbnMgaXMgdGhlIFx0ZXh0aXR7Q2lwaGVyIEhhc2ggQ29uc3RydWN0aW9ufSBvciBcdGV4dGl0e0NIQ30gbW9kZS4gIEluIHRoaXMgbW9kZQogYXBwbGljYWJsZSBibG9jayBjaXBoZXJzIChzdWNoIGFzIEFFUykgY2FuIGJlIHR1cm5lZCBpbnRvIGhhc2ggZnVuY3Rpb25zIHRoYXQgb3RoZXIgTFRDIGZ1bmN0aW9ucyBjYW4gdXNlLiAgSW4gCiBwYXJ0aWN1bGFyIHRoaXMgYWxsb3dzIGEgY3J5cHRvc3lzdGVtIHRvIGJlIGRlc2lnbmVkIHVzaW5nIHZlcnkgZmV3IG1vdmluZyBwYXJ0cy4KIAotSW4gb3JkZXIgdG8gdXNlIHRoZSBDSEMgc3lzdGVtIHRoZSBkZXZlbG9wZXIgd2lsbCBoYXZlIHRvIHRha2UgYSBmZXcgZXh0cmEgc3RlcHMuICBGaXJzdCB0aGUgYGBjaGNcX2Rlc2MnJyBoYXNoCitJbiBvcmRlciB0byB1c2UgdGhlIENIQyBzeXN0ZW0gdGhlIGRldmVsb3BlciB3aWxsIGhhdmUgdG8gdGFrZSBhIGZldyBleHRyYSBzdGVwcy4gIEZpcnN0IHRoZSBcdGV4dGl0e2NoY1xfZGVzY30gaGFzaAogZGVzY3JpcHRvciBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclxfaGFzaCgpLiAgQXQgdGhpcyBwb2ludCB0aGUgQ0hDIGhhc2ggY2Fubm90IGJlIHVzZWQgdG8gaGFzaAogZGF0YS4gIFdoaWxlIGl0IGlzIGluIHRoZSBoYXNoIHN5c3RlbSB5b3Ugc3RpbGwgaGF2ZSB0byB0ZWxsIHRoZSBDSEMgY29kZSB3aGljaCBjaXBoZXIgdG8gdXNlLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQKIHZpYSB0aGUgY2hjXF9yZWdpc3RlcigpIGZ1bmN0aW9uLgpAQCAtMTY4NiwxNSArMjA1NCwxNyBAQAogCiAgICAvKiBzdGFydCBjaGMgd2l0aCBBRVMgKi8KICAgIGlmICgoZXJyID0gY2hjX3JlZ2lzdGVyKGZpbmRfY2lwaGVyKCJhZXMiKSkpICE9IENSWVBUX09LKSB7Ci0gICAgICBwcmludGYoIkVycm9yIGJpbmRpbmcgQUVTIHRvIENIQzogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHByaW50ZigiRXJyb3IgYmluZGluZyBBRVMgdG8gQ0hDOiAlc1xuIiwgCisgICAgICAgICAgICAgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgfQogCi0gICAvKiBub3cgeW91IGNhbiB1c2UgY2hjX2hhc2ggaW4gYW55IExUQyBmdW5jdGlvbiBbYXNpZGUgZnJvbSBwa2NzLi4uXSAqLwotICAgLyogLi4uICovCisgICAvKiBub3cgeW91IGNhbiB1c2UgY2hjX2hhc2ggaW4gYW55IExUQyBmdW5jdGlvbiAKKyAgICAqIFthc2lkZSBmcm9tIHBrY3MuLi5dICovCit9CiBcZW5ke3ZlcmJhdGltfQogCiAKLVxzZWN0aW9ue05vdGljZX0KK1xteXNlY3Rpb257Tm90aWNlfQogSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IFx0ZXh0YmZ7bm90fSB1c2UgdGhlIE1ENCBvciBNRDUgaGFzaGVzIGZvciB0aGUgcHVycG9zZXMgb2YgZGlnaXRhbCBzaWduYXR1cmVzIG9yIGF1dGhlbnRpY2F0aW9uIGNvZGVzLiAgCiBUaGVzZSBoYXNoZXMgYXJlIHByb3ZpZGVkIGZvciBjb21wbGV0ZW5lc3MgYW5kIHRoZXkgc3RpbGwgY2FuIGJlIHVzZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBwYXNzd29yZCBoYXNoaW5nIG9yIG9uZS13YXkgYWNjdW11bGF0b3JzCiAoZS5nLiBZYXJyb3cpLgpAQCAtMTcwMyw2NCArMjA3Myw3MSBAQAogZm9yIGFsbCBwdXJwb3NlcyB5b3Ugd291bGQgbm9ybWFsbHkgdXNlIGEgaGFzaCBmb3IuCiAKIFxjaGFwdGVye01lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXN9Ci1cc2VjdGlvbntITUFDIFByb3RvY29sfQotVGhhbmtzIHRvIERvYmVzIFZhbmRlcm1lZXIgdGhlIGxpYnJhcnkgbm93IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGhhc2ggYmFzZWQgbWVzc2FnZSBhdXRoZW5pY2F0aW9uIGNvZGVzIG9yIEhNQUMgZm9yIHNob3J0LiAgQW4gSE1BQwotb2YgYSBtZXNzYWdlIGlzIGEga2V5ZWQgYXV0aGVuaWNhdGlvbiBjb2RlIHRoYXQgb25seSB0aGUgb3duZXIgb2YgYSBwcml2YXRlIHN5bW1ldHJpYyBrZXkgd2lsbCBiZSBhYmxlIHRvIHZlcmlmeS4gIFRoZSBwdXJwb3NlIGlzCitcbXlzZWN0aW9ue0hNQUMgUHJvdG9jb2x9CitUaGFua3MgdG8gRG9iZXMgVmFuZGVybWVlciwgdGhlIGxpYnJhcnkgbm93IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGhhc2ggYmFzZWQgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2Rlcywgb3IgSE1BQyBmb3Igc2hvcnQuICBBbiBITUFDCitvZiBhIG1lc3NhZ2UgaXMgYSBrZXllZCBhdXRoZW50aWNhdGlvbiBjb2RlIHRoYXQgb25seSB0aGUgb3duZXIgb2YgYSBwcml2YXRlIHN5bW1ldHJpYyBrZXkgd2lsbCBiZSBhYmxlIHRvIHZlcmlmeS4gIFRoZSBwdXJwb3NlIGlzCiB0byBhbGxvdyBhbiBvd25lciBvZiBhIHByaXZhdGUgc3ltbWV0cmljIGtleSB0byBwcm9kdWNlIGFuIEhNQUMgb24gYSBtZXNzYWdlIHRoZW4gbGF0ZXIgdmVyaWZ5IGlmIGl0IGlzIGNvcnJlY3QuICBBbnkgaW1wb3N0b3Igb3IKIGVhdmVzZHJvcHBlciB3aWxsIG5vdCBiZSBhYmxlIHRvIHZlcmlmeSB0aGUgYXV0aGVudGljaXR5IG9mIGEgbWVzc2FnZS4gIAogCiBUaGUgSE1BQyBzdXBwb3J0IHdvcmtzIG11Y2ggbGlrZSB0aGUgbm9ybWFsIGhhc2ggZnVuY3Rpb25zIGV4Y2VwdCB0aGF0IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIHJlcXVpcmVzIHlvdSB0byBwYXNzIGEga2V5IAogYW5kIGl0cyBsZW5ndGguICBUaGUga2V5IGlzIG11Y2ggbGlrZSBhIGtleSB5b3Ugd291bGQgcGFzcyB0byBhIGNpcGhlci4gIFRoYXQgaXMsIGl0IGlzIHNpbXBseSBhbiBhcnJheSBvZiBvY3RldHMgc3RvcmVkIGluCi1jaGFycy4gIFRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzOgordW5zaWduZWQgY2hhcmFjdGVycy4gIFRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzOgogXGluZGV4e2htYWNcX2luaXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBobWFjX2luaXQoaG1hY19zdGF0ZSAqaG1hYywgaW50IGhhc2gsIAotICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCBobWFjX2luaXQoICAgICAgICAgaG1hY19zdGF0ZSAqaG1hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2gsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4pOwogXGVuZHt2ZXJiYXRpbX0KLVRoZSBgYGhtYWMnJyBwYXJhbWV0ZXIgaXMgdGhlIHN0YXRlIGZvciB0aGUgSE1BQyBjb2RlLiAgYGBoYXNoJycgaXMgdGhlIGluZGV4IGludG8gdGhlIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIGhhc2ggeW91IHdhbnQKLXRvIHVzZSB0byBhdXRoZW50aWNhdGUgdGhlIG1lc3NhZ2UuICBgYGtleScnIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiBjaGFycyB0aGF0IG1ha2UgdXAgdGhlIGtleS4gIGBga2V5bGVuJycgaXMgdGhlCitUaGUgXHRleHRpdHtobWFjfSBwYXJhbWV0ZXIgaXMgdGhlIHN0YXRlIGZvciB0aGUgSE1BQyBjb2RlLiAgVGhlIFx0ZXh0aXR7aGFzaH0gcGFyYW1ldGVyIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoIHlvdSB3YW50Cit0byB1c2UgdG8gYXV0aGVudGljYXRlIHRoZSBtZXNzYWdlLiAgVGhlIFx0ZXh0aXR7a2V5fSBwYXJhbWV0ZXIgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mIGNoYXJzIHRoYXQgbWFrZSB1cCB0aGUga2V5LiAgVGhlIFx0ZXh0aXR7a2V5bGVufSBwYXJhbWV0ZXIgaXMgdGhlCiBsZW5ndGggKGluIG9jdGV0cykgb2YgdGhlIGtleSB5b3Ugd2FudCB0byB1c2UgdG8gYXV0aGVudGljYXRlIHRoZSBtZXNzYWdlLiAgVG8gc2VuZCBvY3RldHMgb2YgYSBtZXNzYWdlIHRocm91Z2ggdGhlIEhNQUMgc3lzdGVtIHlvdSBtdXN0IHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogXGluZGV4e2htYWNcX3Byb2Nlc3MoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBobWFjX3Byb2Nlc3MoaG1hY19zdGF0ZSAqaG1hYywgCi0gICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBobWFjX3Byb2Nlc3MoICAgICAgICAgaG1hY19zdGF0ZSAqaG1hYywgCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4pOwogXGVuZHt2ZXJiYXRpbX0KLWBgaG1hYycnIGlzIHRoZSBITUFDIHN0YXRlIHlvdSBhcmUgd29ya2luZyB3aXRoLiBgYGJ1ZicnIGlzIHRoZSBhcnJheSBvZiBvY3RldHMgdG8gc2VuZCBpbnRvIHRoZSBITUFDIHByb2Nlc3MuICBgYGxlbicnIGlzIHRoZQotbnVtYmVyIG9mIG9jdGV0cyB0byBwcm9jZXNzLiAgTGlrZSB0aGUgaGFzaCBwcm9jZXNzIHJvdXRpbmVzIHlvdSBjYW4gc2VuZCB0aGUgZGF0YSBpbiBhcmJpdHJhcmx5IHNpemVkIGNodW5rcy4gV2hlbiB5b3UgCitcdGV4dGl0e2htYWN9IGlzIHRoZSBITUFDIHN0YXRlIHlvdSBhcmUgd29ya2luZyB3aXRoLiBcdGV4dGl0e2J1Zn0gaXMgdGhlIGFycmF5IG9mIG9jdGV0cyB0byBzZW5kIGludG8gdGhlIEhNQUMgcHJvY2Vzcy4gIFx0ZXh0aXR7bGVufSBpcyB0aGUKK251bWJlciBvZiBvY3RldHMgdG8gcHJvY2Vzcy4gIExpa2UgdGhlIGhhc2ggcHJvY2VzcyByb3V0aW5lcyB5b3UgY2FuIHNlbmQgdGhlIGRhdGEgaW4gYXJiaXRyYXJpbHkgc2l6ZWQgY2h1bmtzLiBXaGVuIHlvdSAKIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBITUFDIHByb2Nlc3MgeW91IG11c3QgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIGdldCB0aGUgSE1BQyBjb2RlOgogXGluZGV4e2htYWNcX2RvbmUoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBobWFjX2RvbmUoaG1hY19zdGF0ZSAqaG1hYywgCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBobWFjX2RvbmUoICAgaG1hY19zdGF0ZSAqaG1hYywgCisgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQotYGBobWFjJycgaXMgdGhlIEhNQUMgc3RhdGUgeW91IGFyZSB3b3JraW5nIHdpdGguICBgYG91dCcnIGlzIHRoZSBhcnJheSBvZiBvY3RldHMgd2hlcmUgdGhlIEhNQUMgY29kZSBzaG91bGQgYmUgc3RvcmVkLiAgWW91IG11c3QKLXNldCBgYG91dGxlbicnIHRvIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gIEl0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBITUFDIGNvZGUKLXByb2R1Y2VkIChkZXBlbmRpbmcgb24gd2hpY2ggaGFzaCB3YXMgcGlja2VkKS4gIElmIGBgb3V0bGVuJycgaXMgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlIGRpZ2VzdCAoYW5kIHVsdGltYXRlbHkKLXRoZSBITUFDIGNvZGUpIHRoZW4gdGhlIEhNQUMgY29kZSBpcyB0cnVuY2F0ZWQgYXMgcGVyIEZJUFMtMTk4IHNwZWNpZmljYXRpb25zIChlLmcuIHRha2UgdGhlIGZpcnN0IGBgb3V0bGVuJycgYnl0ZXMpLgorVGhlIFx0ZXh0aXR7aG1hY30gcGFyYW1ldGVyIGlzIHRoZSBITUFDIHN0YXRlIHlvdSBhcmUgd29ya2luZyB3aXRoLiAgVGhlIFx0ZXh0aXR7b3V0fSBwYXJhbWV0ZXIgaXMgdGhlIGFycmF5IG9mIG9jdGV0cyB3aGVyZSB0aGUgSE1BQyBjb2RlIHNob3VsZCBiZSBzdG9yZWQuICAKK1lvdSBtdXN0IHNldCBcdGV4dGl0e291dGxlbn0gdG8gdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAgSXQgaXMgdXBkYXRlZCB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIEhNQUMgY29kZQorcHJvZHVjZWQgKGRlcGVuZGluZyBvbiB3aGljaCBoYXNoIHdhcyBwaWNrZWQpLiAgSWYgXHRleHRpdHtvdXRsZW59IGlzIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZSBkaWdlc3QgKGFuZCB1bHRpbWF0ZWx5Cit0aGUgSE1BQyBjb2RlKSB0aGVuIHRoZSBITUFDIGNvZGUgaXMgdHJ1bmNhdGVkIGFzIHBlciBGSVBTLTE5OCBzcGVjaWZpY2F0aW9ucyAoZS5nLiB0YWtlIHRoZSBmaXJzdCBcdGV4dGl0e291dGxlbn0gYnl0ZXMpLgogCi1UaGVyZSBhcmUgdHdvICB1dGlsaXR5IGZ1bmN0aW9ucyBwcm92aWRlZCB0byBtYWtlIHVzaW5nIEhNQUNzIGVhc2llciB0b2RvLiAgVGhleSBhY2NlcHQgdGhlIGtleSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1tZXNzYWdlIChmaWxlIHBvaW50ZXIsIGFkZHJlc3MgaW4gbWVtb3J5KSBhbmQgcHJvZHVjZSB0aGUgSE1BQyByZXN1bHQgaW4gb25lIHNob3QuICBUaGVzZSBhcmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGF2b2lkCitUaGVyZSBhcmUgdHdvIHV0aWxpdHkgZnVuY3Rpb25zIHByb3ZpZGVkIHRvIG1ha2UgdXNpbmcgSE1BQ3MgZWFzaWVyIHRvIGRvLiAgVGhleSBhY2NlcHQgdGhlIGtleSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCittZXNzYWdlIChmaWxlIHBvaW50ZXIsIGFkZHJlc3MgaW4gbWVtb3J5KSwgYW5kIHByb2R1Y2UgdGhlIEhNQUMgcmVzdWx0IGluIG9uZSBzaG90LiAgVGhlc2UgYXJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBhdm9pZAogY2FsbGluZyB0aGUgdGhyZWUgc3RlcCBwcm9jZXNzIHlvdXJzZWxmLgogCiBcaW5kZXh7aG1hY1xfbWVtb3J5KCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgaG1hY19tZW1vcnkoaW50IGhhc2gsIAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAga2V5bGVuLAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBobWFjX21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2gsIAorICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHdpbGwgcHJvZHVjZSBhbiBITUFDIGNvZGUgZm9yIHRoZSBhcnJheSBvZiBvY3RldHMgaW4gYGBpbicnIG9mIGxlbmd0aCBgYGlubGVuJycuICBUaGUgaW5kZXggaW50byB0aGUgaGFzaCBkZXNjcmlwdG9yIAotdGFibGUgbXVzdCBiZSBwcm92aWRlZCBpbiBgYGhhc2gnJy4gIEl0IHVzZXMgdGhlIGtleSBmcm9tIGBga2V5Jycgd2l0aCBhIGtleSBsZW5ndGggb2YgYGBrZXlsZW4nJy4gIAotVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGFycmF5IG9mIG9jdGV0cyBgYG91dCcnIGFuZCB0aGUgbGVuZ3RoIGluIGBgb3V0bGVuJycuICBUaGUgdmFsdWUgb2YgYGBvdXRsZW4nJyBtdXN0IGJlIHNldAorVGhpcyB3aWxsIHByb2R1Y2UgYW4gSE1BQyBjb2RlIGZvciB0aGUgYXJyYXkgb2Ygb2N0ZXRzIGluIFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufS4gIFRoZSBpbmRleCBpbnRvIHRoZSBoYXNoIGRlc2NyaXB0b3IgCit0YWJsZSBtdXN0IGJlIHByb3ZpZGVkIGluIFx0ZXh0aXR7aGFzaH0uICBJdCB1c2VzIHRoZSBrZXkgZnJvbSBcdGV4dGl0e2tleX0gd2l0aCBhIGtleSBsZW5ndGggb2YgXHRleHRpdHtrZXlsZW59LiAgCitUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGUgYXJyYXkgb2Ygb2N0ZXRzIFx0ZXh0aXR7b3V0fSBhbmQgdGhlIGxlbmd0aCBpbiBcdGV4dGl0e291dGxlbn0uICBUaGUgdmFsdWUgb2YgXHRleHRpdHtvdXRsZW59IG11c3QgYmUgc2V0CiB0byB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICBTaW1pbGFybHkgZm9yIGZpbGVzIHRoZXJlIGlzIHRoZSAgZm9sbG93aW5nIGZ1bmN0aW9uOgogXGluZGV4e2htYWNcX2ZpbGUoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBobWFjX2ZpbGUoaW50IGhhc2gsIGNvbnN0IGNoYXIgKmZuYW1lLCAKLSAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sIAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgaG1hY19maWxlKAorICAgICAgICAgICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICBjb25zdCBjaGFyICpmbmFtZSwgCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgIGtleWxlbiwgCisgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQotYGBoYXNoJycgaXMgdGhlIGluZGV4IGludG8gdGhlIGhhc2ggZGVzY3JpcHRvciB0YWJsZSBvZiB0aGUgaGFzaCB5b3Ugd2FudCB0byB1c2UuICBgYGZuYW1lJycgaXMgdGhlIGZpbGVuYW1lIHRvIHByb2Nlc3MuICAKLWBga2V5JycgaXMgdGhlIGFycmF5IG9mIG9jdGV0cyB0byB1c2UgYXMgdGhlIGtleSBvZiBsZW5ndGggYGBrZXlsZW4nJy4gIGBgb3V0JycgaXMgdGhlIGFycmF5IG9mIG9jdGV0cyB3aGVyZSB0aGUgCitcdGV4dGl0e2hhc2h9IGlzIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIGhhc2ggeW91IHdhbnQgdG8gdXNlLiAgXHRleHRpdHtmbmFtZX0gaXMgdGhlIGZpbGVuYW1lIHRvIHByb2Nlc3MuICAKK1x0ZXh0aXR7a2V5fSBpcyB0aGUgYXJyYXkgb2Ygb2N0ZXRzIHRvIHVzZSBhcyB0aGUga2V5IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0uICBcdGV4dGl0e291dH0gaXMgdGhlIGFycmF5IG9mIG9jdGV0cyB3aGVyZSB0aGUgCiByZXN1bHQgc2hvdWxkIGJlIHN0b3JlZC4KIAogVG8gdGVzdCBpZiB0aGUgSE1BQyBjb2RlIGlzIHdvcmtpbmcgdGhlcmUgaXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKQEAgLTE4MTgsMjggKzIxOTUsMzMgQEAKIFxlbmR7dmVyYmF0aW19CiBcZW5ke3NtYWxsfQogCi1cc2VjdGlvbntPTUFDIFN1cHBvcnR9CitcbXlzZWN0aW9ue09NQUMgU3VwcG9ydH0KK1xpbmRleHtPTUFDfSBcaW5kZXh7Q01BQ30KIE9NQUNcZm9vdG5vdGV7XHVybHtodHRwOi8vY3J5cHQuY2lzLmliYXJha2kuYWMuanAvb21hYy9vbWFjLmh0bWx9fSwgd2hpY2ggc3RhbmRzIGZvciBcdGV4dGl0e09uZS1LZXkgQ0JDIE1BQ30gaXMgYW4gCi1hbGdvcml0aG0gd2hpY2ggcHJvZHVjZXMgYSBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGUgKE1BQykgdXNpbmcgb25seSBhIGJsb2NrIGNpcGhlciBzdWNoIGFzIEFFUy4gIEZyb20gYW4gQVBJIAotc3RhbmRwb2ludCB0aGUgT01BQyByb3V0aW5lcyB3b3JrIG11Y2ggbGlrZSB0aGUgSE1BQyByb3V0aW5lcyBkby4gIEluc3RlYWQgaW4gdGhpcyBjYXNlIGEgY2lwaGVyIGlzIHVzZWQgaW5zdGVhZCBvZiBhIGhhc2guICAKK2FsZ29yaXRobSB3aGljaCBwcm9kdWNlcyBhIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSAoTUFDKSB1c2luZyBvbmx5IGEgYmxvY2sgY2lwaGVyIHN1Y2ggYXMgQUVTLiAgTm90ZTogIE9NQUMgaGFzIGJlZW4gc3RhbmRhcmRpemVkIGFzCitDTUFDIHdpdGhpbiBOSVNULCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgbGlicmFyeSBPTUFDIGFuZCBDTUFDIGFyZSBzeW5vbnltb3VzLiAgRnJvbSBhbiBBUEkgc3RhbmRwb2ludCwgdGhlIE9NQUMgcm91dGluZXMgd29yayBtdWNoIGxpa2UgdGhlIAorSE1BQyByb3V0aW5lcy4gIEluc3RlYWQsIGluIHRoaXMgY2FzZSBhIGNpcGhlciBpcyB1c2VkIGluc3RlYWQgb2YgYSBoYXNoLiAgCiAKIFRvIHN0YXJ0IGFuIE9NQUMgc3RhdGUgeW91IGNhbGwKIFxpbmRleHtvbWFjXF9pbml0KCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgb21hY19pbml0KG9tYWNfc3RhdGUgKm9tYWMsIGludCBjaXBoZXIsIAotICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCBvbWFjX2luaXQoICAgICAgICAgb21hY19zdGF0ZSAqb21hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGtleWxlbik7CiBcZW5ke3ZlcmJhdGltfQotVGhlIGBgb21hYycnIHZhcmlhYmxlIGlzIHRoZSBzdGF0ZSBmb3IgdGhlIE9NQUMgYWxnb3JpdGhtLiAgYGBjaXBoZXInJyBpcyB0aGUgaW5kZXggaW50byB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlCitUaGUgXHRleHRpdHtvbWFjfSBwYXJhbWV0ZXIgaXMgdGhlIHN0YXRlIGZvciB0aGUgT01BQyBhbGdvcml0aG0uICBUaGUgXHRleHRpdHtjaXBoZXJ9IHBhcmFtZXRlciBpcyB0aGUgaW5kZXggaW50byB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlCiBvZiB0aGUgY2lwaGVyXGZvb3Rub3Rle1RoZSBjaXBoZXIgbXVzdCBoYXZlIGEgNjQgb3IgMTI4IGJpdCBibG9jayBzaXplLiAgU3VjaCBhcyBDQVNUNSwgQmxvd2Zpc2gsIERFUywgQUVTLCBUd29maXNoLCBldGMufSB5b3UKLXdpc2ggdG8gdXNlLiAgYGBrZXknJyBhbmQgYGBrZXlsZW4nJyBhcmUgdGhlIGtleXMgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIGRhdGEuCit3aXNoIHRvIHVzZS4gIFRoZSBcdGV4dGl0e2tleX0gYW5kIFx0ZXh0aXR7a2V5bGVufSBwYXJhbWV0ZXJzIGFyZSB0aGUga2V5cyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgZGF0YS4KIAogVG8gc2VuZCBkYXRhIHRocm91Z2ggdGhlIGFsZ29yaXRobSBjYWxsCiBcaW5kZXh7b21hY1xfcHJvY2VzcygpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IG9tYWNfcHJvY2VzcyhvbWFjX3N0YXRlICpzdGF0ZSwgCi0gICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBvbWFjX3Byb2Nlc3MoICAgICAgICAgb21hY19zdGF0ZSAqc3RhdGUsIAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHdpbGwgc2VuZCBgYGlubGVuJycgYnl0ZXMgZnJvbSBgYGluJycgdGhyb3VnaCB0aGUgYWN0aXZlIE9NQUMgc3RhdGUgYGBzdGF0ZScnLiAgUmV0dXJucyBcdGV4dGJme0NSWVBUXF9PS30gaWYgdGhlIAorVGhpcyB3aWxsIHNlbmQgXHRleHRpdHtpbmxlbn0gYnl0ZXMgZnJvbSBcdGV4dGl0e2lufSB0aHJvdWdoIHRoZSBhY3RpdmUgT01BQyBzdGF0ZSBcdGV4dGl0e3N0YXRlfS4gIFJldHVybnMgXHRleHRiZntDUllQVFxfT0t9IGlmIHRoZSAKIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgVGhlIGZ1bmN0aW9uIGlzIG5vdCBzZW5zaXRpdmUgdG8gdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBkYXRhLiAgRm9yIGV4YW1wbGUsCiAKIFxiZWdpbnt2ZXJiYXRpbX0KQEAgLTE4NTcsMTMgKzIyMzksMTQgQEAKIAogXGluZGV4e29tYWNcX2RvbmUoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBvbWFjX2RvbmUob21hY19zdGF0ZSAqc3RhdGUsIAotICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgb21hY19kb25lKCAgIG9tYWNfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1XaGljaCB3aWxsIHRlcm1pbmF0ZSB0aGUgT01BQyBhbmQgb3V0cHV0IHRoZSBcdGV4dGl0e3RhZ30gKE1BQykgdG8gYGBvdXQnJy4gIE5vdGUgdGhhdCB1bmxpa2UgdGhlIEhNQUMgYW5kIG90aGVyIGNvZGUgCi1gYG91dGxlbicnIGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlIGRlZmF1bHQgTUFDIHNpemUgKGZvciBpbnN0YW5jZSBBRVMgd291bGQgbWFrZSBhIDE2LWJ5dGUgdGFnKS4gIFBhcnQgb2YgdGhlIE9NQUMgCitXaGljaCB3aWxsIHRlcm1pbmF0ZSB0aGUgT01BQyBhbmQgb3V0cHV0IHRoZSBcdGV4dGl0e3RhZ30gKE1BQykgdG8gXHRleHRpdHtvdXR9LiAgTm90ZSB0aGF0IHVubGlrZSB0aGUgSE1BQyBhbmQgb3RoZXIgY29kZSAKK1x0ZXh0aXR7b3V0bGVufSBjYW4gYmUgc21hbGxlciB0aGFuIHRoZSBkZWZhdWx0IE1BQyBzaXplIChmb3IgaW5zdGFuY2UgQUVTIHdvdWxkIG1ha2UgYSAxNi1ieXRlIHRhZykuICBQYXJ0IG9mIHRoZSBPTUFDIAogc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCB0aGUgb3V0cHV0IG1heSBiZSB0cnVuY2F0ZWQuICBTbyBpZiB5b3UgcGFzcyBpbiAkb3V0bGVuID0gNSQgYW5kIHVzZSBBRVMgYXMgeW91ciBjaXBoZXIgdGhhbgotdGhlIG91dHB1dCBNQUMgY29kZSB3aWxsIG9ubHkgYmUgZml2ZSBieXRlcyBsb25nLiAgSWYgYGBvdXRsZW4nJyBpcyBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCBzaXplIGl0IGlzIHNldCB0byB0aGUgZGVmYXVsdAordGhlIG91dHB1dCBNQUMgY29kZSB3aWxsIG9ubHkgYmUgZml2ZSBieXRlcyBsb25nLiAgSWYgXHRleHRpdHtvdXRsZW59IGlzIGxhcmdlciB0aGFuIHRoZSBkZWZhdWx0IHNpemUgaXQgaXMgc2V0IHRvIHRoZSBkZWZhdWx0CiBzaXplIHRvIHNob3cgaG93IG1hbnkgYnl0ZXMgd2VyZSBhY3R1YWxseSB1c2VkLgogCiBTaW1pbGFyIHRvIHRoZSBITUFDIGNvZGUgdGhlIGZpbGUgYW5kIG1lbW9yeSBmdW5jdGlvbnMgYXJlIGFsc28gcHJvdmlkZWQuICBUbyBPTUFDIGEgYnVmZmVyIG9mIG1lbW9yeSBpbiBvbmUgc2hvdCB1c2UgdGhlIApAQCAtMTg3MSwyNiArMjI1NCwyOCBAQAogCiBcaW5kZXh7b21hY1xfbWVtb3J5KCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgb21hY19tZW1vcnkoaW50IGNpcGhlciwgCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IG9tYWNfbWVtb3J5KCAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHdpbGwgY29tcHV0ZSB0aGUgT01BQyBvZiBgYGlubGVuJycgYnl0ZXMgb2YgYGBpbicnIHVzaW5nIHRoZSBrZXkgYGBrZXknJyBvZiBsZW5ndGggYGBrZXlsZW4nJyBieXRlcyBhbmQgdGhlIGNpcGhlcgotc3BlY2lmaWVkIGJ5IHRoZSBgYGNpcGhlcicnJ3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gYGBvdXQnJyB3aXRoIHRoZSBzYW1lCitUaGlzIHdpbGwgY29tcHV0ZSB0aGUgT01BQyBvZiBcdGV4dGl0e2lubGVufSBieXRlcyBvZiBcdGV4dGl0e2lufSB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzIGFuZCB0aGUgY2lwaGVyCitzcGVjaWZpZWQgYnkgdGhlIFx0ZXh0aXR7Y2lwaGVyfSd0aCBlbnRyeSBpbiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlLiAgSXQgd2lsbCBzdG9yZSB0aGUgTUFDIGluIFx0ZXh0aXR7b3V0fSB3aXRoIHRoZSBzYW1lCiBydWxlcyBhcyBvbWFjXF9kb25lLgogCiBUbyBPTUFDIGEgZmlsZSB1c2UKIFxpbmRleHtvbWFjXF9maWxlKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgb21hY19maWxlKGludCBjaXBoZXIsIAotICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAotICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBvbWFjX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KIAotV2hpY2ggd2lsbCBPTUFDIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGBgZmlsZW5hbWUnJyB1c2luZyB0aGUga2V5IGBga2V5Jycgb2YgbGVuZ3RoIGBga2V5bGVuJycgYnl0ZXMKLWFuZCB0aGUgY2lwaGVyIHNwZWNpZmllZCBieSB0aGUgYGBjaXBoZXInJyd0aCBlbnRyeSBpbiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlLiAgSXQgd2lsbCBzdG9yZSB0aGUgTUFDIGluIGBgb3V0Jycgd2l0aCAKK1doaWNoIHdpbGwgT01BQyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBieSBcdGV4dGl0e2ZpbGVuYW1lfSB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzCithbmQgdGhlIGNpcGhlciBzcGVjaWZpZWQgYnkgdGhlIFx0ZXh0aXR7Y2lwaGVyfSd0aCBlbnRyeSBpbiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlLiAgSXQgd2lsbCBzdG9yZSB0aGUgTUFDIGluIFx0ZXh0aXR7b3V0fSB3aXRoIAogdGhlIHNhbWUgcnVsZXMgYXMgb21hY1xfZG9uZS4KIAogVG8gdGVzdCBpZiB0aGUgT01BQyBjb2RlIGlzIHdvcmtpbmcgdGhlcmUgaXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKQEAgLTE5NDgsOCArMjMzMyw4IEBACiBcZW5ke3ZlcmJhdGltfQogXGVuZHtzbWFsbH0KIAotXHNlY3Rpb257UE1BQyBTdXBwb3J0fQotVGhlIFBNQUNcZm9vdG5vdGV7Si5CbGFjaywgUC5Sb2dhd2F5LCBgYEEgQmxvY2stLUNpcGhlciBNb2RlIG9mIE9wZXJhdGlvbiBmb3IgUGFyYWxsZWxpemFibGUgTWVzc2FnZSBBdXRoZW50aWNhdGlvbicnfSAKK1xteXNlY3Rpb257UE1BQyBTdXBwb3J0fQorVGhlIFBNQUNcZm9vdG5vdGV7Si5CbGFjaywgUC5Sb2dhd2F5LCBcdGV4dGl0e0EgQmxvY2stLUNpcGhlciBNb2RlIG9mIE9wZXJhdGlvbiBmb3IgUGFyYWxsZWxpemFibGUgTWVzc2FnZSBBdXRoZW50aWNhdGlvbn19IAogcHJvdG9jb2wgaXMgYW5vdGhlciBNQUMgYWxnb3JpdGhtIHRoYXQgcmVsaWVzIHNvbGVseSBvbiBhIHN5bW1ldHJpYy1rZXkgYmxvY2sgY2lwaGVyLiAgSXQgdXNlcyBlc3NlbnRpYWxseSB0aGUgc2FtZQogQVBJIGFzIHRoZSBwcm92aWRlZCBPTUFDIGNvZGUuICAKIApAQCAtMTk1NywyMCArMjM0MiwyMyBAQAogCiBcaW5kZXh7cG1hY1xfaW5pdCgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IHBtYWNfaW5pdChwbWFjX3N0YXRlICpwbWFjLCBpbnQgY2lwaGVyLCAKLSAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbik7CitpbnQgcG1hY19pbml0KCAgICAgICAgIHBtYWNfc3RhdGUgKnBtYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4pOwogXGVuZHt2ZXJiYXRpbX0KLVdoaWNoIGluaXRpYWxpemVzIHRoZSBgYHBtYWMnJyBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBgYGNpcGhlcicnIGFuZCBgYGtleScnIG9mIGxlbmd0aCBgYGtleWxlbicnIGJ5dGVzLiAgVGhlIGNob3NlbiBjaXBoZXIKK1doaWNoIGluaXRpYWxpemVzIHRoZSBcdGV4dGl0e3BtYWN9IHN0YXRlIHdpdGggdGhlIGdpdmVuIFx0ZXh0aXR7Y2lwaGVyfSBhbmQgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gYnl0ZXMuICBUaGUgY2hvc2VuIGNpcGhlcgogbXVzdCBoYXZlIGEgNjQgb3IgMTI4IGJpdCBibG9jayBzaXplIChlLnguIEFFUykuCiAKIFRvIE1BQyBkYXRhIHNpbXBseSBzZW5kIGl0IHRocm91Z2ggdGhlIHByb2Nlc3MgZnVuY3Rpb24uCiAKIFxpbmRleHtwbWFjXF9wcm9jZXNzKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgcG1hY19wcm9jZXNzKHBtYWNfc3RhdGUgKnN0YXRlLCAKLSAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IHBtYWNfcHJvY2VzcyggICAgICAgICBwbWFjX3N0YXRlICpzdGF0ZSwgCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4pOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgd2lsbCBwcm9jZXNzIGBgaW5sZW4nJyBieXRlcyBvZiBgYGluJycgaW4gdGhlIGdpdmVuIGBgc3RhdGUnJy4gIFRoZSBmdW5jdGlvbiBpcyBub3Qgc2Vuc2l0aXZlIHRvIHRoZSBncmFudWxhcml0eSBvZiB0aGUKK1RoaXMgd2lsbCBwcm9jZXNzIFx0ZXh0aXR7aW5sZW59IGJ5dGVzIG9mIFx0ZXh0aXR7aW59IGluIHRoZSBnaXZlbiBcdGV4dGl0e3N0YXRlfS4gIFRoZSBmdW5jdGlvbiBpcyBub3Qgc2Vuc2l0aXZlIHRvIHRoZSBncmFudWxhcml0eSBvZiB0aGUKIGRhdGEuICBGb3IgZXhhbXBsZSwKIAogXGJlZ2lue3ZlcmJhdGltfQpAQCAtMTk4OCwzOCArMjM3Niw0MSBAQAogCiBcaW5kZXh7cG1hY1xfZG9uZSgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IHBtYWNfZG9uZShwbWFjX3N0YXRlICpzdGF0ZSwgCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBwbWFjX2RvbmUoICAgcG1hY19zdGF0ZSAqc3RhdGUsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgd2lsbCBzdG9yZSB1cHRvIGBgb3V0bGVuJycgYnl0ZXMgb2YgdGhlIHRhZyBmb3IgdGhlIGdpdmVuIGBgc3RhdGUnJyBpbnRvIGBgb3V0JycuICBOb3RlIHRoYXQgaWYgYGBvdXRsZW4nJyBpcyBsYXJnZXIKLXRoYW4gdGhlIHNpemUgb2YgdGhlIHRhZyBpdCBpcyBzZXQgdG8gdGhlIGFtb3VudCBvZiBieXRlcyBzdG9yZWQgaW4gYGBvdXQnJy4KK1RoaXMgd2lsbCBzdG9yZSB1cCB0byBcdGV4dGl0e291dGxlbn0gYnl0ZXMgb2YgdGhlIHRhZyBmb3IgdGhlIGdpdmVuIFx0ZXh0aXR7c3RhdGV9IGludG8gXHRleHRpdHtvdXR9LiAgTm90ZSB0aGF0IGlmIFx0ZXh0aXR7b3V0bGVufSBpcyBsYXJnZXIKK3RoYW4gdGhlIHNpemUgb2YgdGhlIHRhZyBpdCBpcyBzZXQgdG8gdGhlIGFtb3VudCBvZiBieXRlcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9LgogCi1TaW1pbGFyIHRvIHRoZSBQTUFDIGNvZGUgdGhlIGZpbGUgYW5kIG1lbW9yeSBmdW5jdGlvbnMgYXJlIGFsc28gcHJvdmlkZWQuICBUbyBQTUFDIGEgYnVmZmVyIG9mIG1lbW9yeSBpbiBvbmUgc2hvdCB1c2UgdGhlIAorU2ltaWxhciB0byB0aGUgT01BQyBjb2RlIHRoZSBmaWxlIGFuZCBtZW1vcnkgZnVuY3Rpb25zIGFyZSBhbHNvIHByb3ZpZGVkLiAgVG8gUE1BQyBhIGJ1ZmZlciBvZiBtZW1vcnkgaW4gb25lIHNob3QgdXNlIHRoZSAKIGZvbGxvd2luZyBmdW5jdGlvbi4KIAogXGluZGV4e3BtYWNcX21lbW9yeSgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IHBtYWNfbWVtb3J5KGludCBjaXBoZXIsIAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAga2V5bGVuLAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IHBtYWNfbWVtb3J5KAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQotVGhpcyB3aWxsIGNvbXB1dGUgdGhlIFBNQUMgb2YgYGBtc2dsZW4nJyBieXRlcyBvZiBgYG1zZycnIHVzaW5nIHRoZSBrZXkgYGBrZXknJyBvZiBsZW5ndGggYGBrZXlsZW4nJyBieXRlcyBhbmQgdGhlIGNpcGhlcgotc3BlY2lmaWVkIGJ5IHRoZSBgYGNpcGhlcicnJ3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gYGBvdXQnJyB3aXRoIHRoZSBzYW1lCi1ydWxlcyBhcyBvbWFjXF9kb25lLgorVGhpcyB3aWxsIGNvbXB1dGUgdGhlIFBNQUMgb2YgXHRleHRpdHttc2dsZW59IGJ5dGVzIG9mIFx0ZXh0aXR7bXNnfSB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzLCBhbmQgdGhlIGNpcGhlcgorc3BlY2lmaWVkIGJ5IHRoZSBcdGV4dGl0e2NpcGhlcn0ndGggZW50cnkgaW4gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZS4gIEl0IHdpbGwgc3RvcmUgdGhlIE1BQyBpbiBcdGV4dGl0e291dH0gd2l0aCB0aGUgc2FtZQorcnVsZXMgYXMgcG1hY1xfZG9uZSgpLgogCiBUbyBQTUFDIGEgZmlsZSB1c2UKIFxpbmRleHtwbWFjXF9maWxlKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgcG1hY19maWxlKGludCBjaXBoZXIsIAotICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAotICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBwbWFjX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KIAotV2hpY2ggd2lsbCBQTUFDIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGBgZmlsZW5hbWUnJyB1c2luZyB0aGUga2V5IGBga2V5Jycgb2YgbGVuZ3RoIGBga2V5bGVuJycgYnl0ZXMKLWFuZCB0aGUgY2lwaGVyIHNwZWNpZmllZCBieSB0aGUgYGBjaXBoZXInJyd0aCBlbnRyeSBpbiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlLiAgSXQgd2lsbCBzdG9yZSB0aGUgTUFDIGluIGBgb3V0Jycgd2l0aCAKLXRoZSBzYW1lIHJ1bGVzIGFzIG9tYWNcX2RvbmUuCitXaGljaCB3aWxsIFBNQUMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgXHRleHRpdHtmaWxlbmFtZX0gdXNpbmcgdGhlIGtleSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBieXRlcywgCithbmQgdGhlIGNpcGhlciBzcGVjaWZpZWQgYnkgdGhlIFx0ZXh0aXR7Y2lwaGVyfSd0aCBlbnRyeSBpbiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlLiAgSXQgd2lsbCBzdG9yZSB0aGUgTUFDIGluIFx0ZXh0aXR7b3V0fSB3aXRoIAordGhlIHNhbWUgcnVsZXMgYXMgcG1hY1xfZG9uZSgpLgogCiBUbyB0ZXN0IGlmIHRoZSBQTUFDIGNvZGUgaXMgd29ya2luZyB0aGVyZSBpcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogXGluZGV4e3BtYWNcX3Rlc3QoKX0KQEAgLTIwMjgsMjIgKzI0MTksMjYgQEAKIFxlbmR7dmVyYmF0aW19CiBXaGljaCByZXR1cm5zIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgY29kZSBwYXNzZXMgb3RoZXJ3aXNlIGl0IHJldHVybnMgYW4gZXJyb3IgY29kZS4KIAotXHNlY3Rpb257UGVsaWNhbiBNQUN9Ci1QZWxpY2FuIE1BQyBpcyBhIG5ldyAoZXhwZXJpbWVudGFsKSBNQUMgYnkgdGhlIEFFUyB0ZWFtIHRoYXQgdXNlcyBmb3VyIHJvdW5kcyBvZiBBRVMgYXMgYSBgYG1peGluZyBmdW5jdGlvbicnLiAgSXQgYWNoaWV2ZXMgYSB2ZXJ5IGhpZ2ggCitcbXlzZWN0aW9ue1BlbGljYW4gTUFDfQorUGVsaWNhbiBNQUMgaXMgYSBuZXcgKGV4cGVyaW1lbnRhbCkgTUFDIGJ5IHRoZSBBRVMgdGVhbSB0aGF0IHVzZXMgZm91ciByb3VuZHMgb2YgQUVTIGFzIGEgXHRleHRpdHttaXhpbmcgZnVuY3Rpb259LiAgSXQgYWNoaWV2ZXMgYSB2ZXJ5IGhpZ2ggCiByYXRlIG9mIHByb2Nlc3NpbmcgYW5kIGlzIHBvdGVudGlhbGx5IHZlcnkgc2VjdXJlLiAgSXQgcmVxdWlyZXMgQUVTIHRvIGJlIGVuYWJsZWQgdG8gZnVuY3Rpb24uICBZb3UgZG8gbm90IGhhdmUgdG8gcmVnaXN0ZXJcX2NpcGhlcigpIEFFUyBmaXJzdCB0aG91Z2gKIGFzIGl0IGNhbGxzIEFFUyBkaXJlY3RseS4KIAogXGluZGV4e3BlbGljYW5cX2luaXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBwZWxpY2FuX2luaXQocGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCBwZWxpY2FuX2luaXQoICAgICAgcGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAga2V5bGVuKTsKIFxlbmR7dmVyYmF0aW19CiBUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgUGVsaWNhbiBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBBRVMga2V5LiAgT25jZSB0aGlzIGhhcyBiZWVuIGRvbmUgeW91IGNhbiBiZWdpbiBwcm9jZXNzaW5nIGRhdGEuCiAKIFxpbmRleHtwZWxpY2FuXF9wcm9jZXNzKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgcGVsaWNhbl9wcm9jZXNzKHBlbGljYW5fc3RhdGUgKnBlbG1hYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IHBlbGljYW5fcHJvY2VzcyggICAgICBwZWxpY2FuX3N0YXRlICpwZWxtYWMsIAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHdpbGwgcHJvY2VzcyBgYGlubGVuJycgYnl0ZXMgb2YgYGBpbicnIHRocm91Z2ggdGhlIFBlbGljYW4gTUFDLiAgSXQncyBiZXN0IHRoYXQgeW91IHBhc3MgaW4gbXVsdGlwbGVzIG9mIDE2IGJ5dGVzIGFzIGl0IG1ha2VzIHRoZQorVGhpcyB3aWxsIHByb2Nlc3MgXHRleHRpdHtpbmxlbn0gYnl0ZXMgb2YgXHRleHRpdHtpbn0gdGhyb3VnaCB0aGUgUGVsaWNhbiBNQUMuICBJdCdzIGJlc3QgdGhhdCB5b3UgcGFzcyBpbiBtdWx0aXBsZXMgb2YgMTYgYnl0ZXMgYXMgaXQgbWFrZXMgdGhlCiByb3V0aW5lIG1vcmUgZWZmaWNpZW50IGJ1dCB5b3UgbWF5IHBhc3MgaW4gYW55IGxlbmd0aCBvZiB0ZXh0LiAgWW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYXMgbWFueSB0aW1lcyBhcyByZXF1aXJlZCB0byBwcm9jZXNzCiBhbiBlbnRpcmUgbWVzc2FnZS4KIApAQCAtMjA1MSw3ICsyNDQ2LDcgQEAKIFxiZWdpbnt2ZXJiYXRpbX0KIGludCBwZWxpY2FuX2RvbmUocGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCB1bnNpZ25lZCBjaGFyICpvdXQpOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgdGVybWluYXRlcyBhIFBlbGljYW4gTUFDIGFuZCB3cml0ZXMgdGhlIDE2LS1vY3RldCB0YWcgdG8gYGBvdXQnJy4KK1RoaXMgdGVybWluYXRlcyBhIFBlbGljYW4gTUFDIGFuZCB3cml0ZXMgdGhlIDE2LS1vY3RldCB0YWcgdG8gXHRleHRpdHtvdXR9LgogCiBcc3Vic2VjdGlvbntFeGFtcGxlfQogCkBAIC0yMDY2LDExICsyNDYxLDEyIEBACiAgICAvKiBzb21laG93IGluaXRpYWxpemUgYSBrZXkgKi8KIAogICAgLyogaW5pdGlhbGl6ZSBwZWxpY2FuIG1hYyAqLwotICAgaWYgKChlcnIgPSBwZWxpY2FuX2luaXQoJnBlbHN0YXRlLCAgICAgICAgICAvKiB0aGUgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgICAgICAgICAgICAgICAgLyogdXNlciBrZXkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyICAgICAgICAgICAgICAgICAgLyoga2V5IGxlbmd0aCBpbiBvY3RldHMgKi8KKyAgIGlmICgoZXJyID0gcGVsaWNhbl9pbml0KCZwZWxzdGF0ZSwgLyogdGhlIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksICAgICAgIC8qIHVzZXIga2V5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiAgICAgICAgIC8qIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpICE9IENSWVBUX09LKSB7Ci0gICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyBQZWxpY2FuOiAlcyIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIFBlbGljYW46ICVzIiwgCisgICAgICAgICAgICAgIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAKQEAgLTIwNzksMTUgKzI0NzUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWxsbyB3b3JsZCIsICAgLyogZGF0YSB0byBtYWMgKi8gICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgZGF0YSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgIHByaW50ZigiRXJyb3IgcHJvY2Vzc2luZyBQZWxpY2FuOiAlcyIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHByaW50ZigiRXJyb3IgcHJvY2Vzc2luZyBQZWxpY2FuOiAlcyIsIAorICAgICAgICAgICAgIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAKICAgIC8qIFRlcm1pbmF0ZSB0aGUgTUFDICovCi0gICBpZiAoKGVyciA9IHBlbGljYW5fZG9uZSgmcGVsc3RhdGUsICAgICAgIC8qIHRoZSBzdGF0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICAgICAgICAgICAgICAvKiB3aGVyZSB0byBzdG9yZSB0aGUgdGFnICovCisgICBpZiAoKGVyciA9IHBlbGljYW5fZG9uZSgmcGVsc3RhdGUsLyogdGhlIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgICAgICAgLyogd2hlcmUgdG8gc3RvcmUgdGhlIHRhZyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgIHByaW50ZigiRXJyb3IgdGVybWluYXRpbmcgUGVsaWNhbjogJXMiLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBwcmludGYoIkVycm9yIHRlcm1pbmF0aW5nIFBlbGljYW46ICVzIiwgCisgICAgICAgICAgICAgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgIH0KIApAQCAtMjA5NywxMiArMjQ5NSwxNzQgQEAKIH0KIFxlbmR7dmVyYmF0aW19CiAKK1xteXNlY3Rpb257WENCQy1NQUN9CitBcyBvZiBMaWJUb21DcnlwdCB2MS4xNSwgWENCQy1NQUMgKFJGQyAzNTY2KSBoYXMgYmVlbiBwcm92aWRlZCB0byBzdXBwb3J0IFRMUyBlbmNyeXB0aW9uIHN1aXRlcy4gIExpa2UgT01BQywgaXQgY29tcHV0ZXMgYSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUKK2J5IHVzaW5nIGEgY2lwaGVyIGluIENCQyBtb2RlLiAgSXQgYWxzbyB1c2VzIGEgc2luZ2xlIGtleSB3aGljaCBpdCBleHBhbmRzIGludG8gdGhlIHJlcXVpc2l0ZSB0aHJlZSBrZXlzIGZvciB0aGUgTUFDIGZ1bmN0aW9uLiAgQSBYQ0JDLS1NQUMgc3RhdGUgaXMKK2luaXRpYWxpemVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e3hjYmNcX2luaXQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCB4Y2JjX2luaXQoICAgICAgICAgeGNiY19zdGF0ZSAqeGNiYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGtleWxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgWENCQy0tTUFDIHN0YXRlIFx0ZXh0aXR7eGNiY30sIHdpdGggdGhlIGtleSBzcGVjaWZpZWQgaW4gXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gb2N0ZXRzLiAgVGhlIGNpcGhlciBpbmRpY2F0ZWQKK2J5IHRoZSBcdGV4dGl0e2NpcGhlcn0gaW5kZXggY2FuIGJlIGVpdGhlciBhIDY0IG9yIDEyOC0tYml0IGJsb2NrIGNpcGhlci4gIFRoaXMgd2lsbCByZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IG9uIHN1Y2Nlc3MuCisKK1RvIHByb2Nlc3MgZGF0YSB0aHJvdWdoIFhDQkMtLU1BQyB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e3hjYmNcX3Byb2Nlc3MoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCB4Y2JjX3Byb2Nlc3MoICAgICAgICAgeGNiY19zdGF0ZSAqc3RhdGUsIAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBhZGQgdGhlIG1lc3NhZ2Ugb2N0ZXRzIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IHRvIHRoZSBYQ0JDLS1NQUMgc3RhdGUgcG9pbnRlZCB0byBieSBcdGV4dGl0e3N0YXRlfS4gIExpa2UgdGhlIG90aGVyIE1BQyBmdW5jdGlvbnMsCit0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGlucHV0IGlzIG5vdCBpbXBvcnRhbnQgYnV0IHRoZSBvcmRlciBpcy4gIFRoaXMgd2lsbCByZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IG9uIHN1Y2Nlc3MuCisKK1RvIGNvbXB1dGUgdGhlIE1BQyB0YWcgdmFsdWUgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHt4Y2JjXF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgeGNiY19kb25lKCAgIHhjYmNfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCByZXRyaWV2ZSB0aGUgWENCQy0tTUFDIHRhZyBmcm9tIHRoZSBzdGF0ZSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7c3RhdGV9LCBhbmQgc3RvcmUgaXQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtvdXR9LiAgVGhlIFx0ZXh0aXR7b3V0bGVufSBwYXJhbWV0ZXIKK3NwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIGFuZCBpcyB1cGRhdGVkIHRvIGhvbGQgdGhlIGZpbmFsIHNpemUgb2YgdGhlIHRhZyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gb24gc3VjY2Vzcy4KKworSGVscGVyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gbWFrZSBwYXJzaW5nIG1lbW9yeSBidWZmZXJzIGFuZCBmaWxlcyBlYXNpZXIuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQ6CisKK1xpbmRleHt4Y2JjXF9tZW1vcnkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCB4Y2JjX21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAga2V5bGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBjb21wdXRlIHRoZSBYQ0JDLS1NQUMgb2YgXHRleHRpdHttc2dsZW59IGJ5dGVzIG9mIFx0ZXh0aXR7bXNnfSwgdXNpbmcgdGhlIGtleSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBieXRlcywgYW5kIHRoZSBjaXBoZXIKK3NwZWNpZmllZCBieSB0aGUgXHRleHRpdHtjaXBoZXJ9J3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gXHRleHRpdHtvdXR9IHdpdGggdGhlIHNhbWUgcnVsZXMgYXMgeGNiY1xfZG9uZSgpLgorCitUbyB4Y2JjIGEgZmlsZSB1c2UKK1xpbmRleHt4Y2JjXF9maWxlKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgeGNiY19maWxlKAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1doaWNoIHdpbGwgWENCQy0tTUFDIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IFx0ZXh0aXR7ZmlsZW5hbWV9IHVzaW5nIHRoZSBrZXkgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gYnl0ZXMsIGFuZCB0aGUgY2lwaGVyIAorc3BlY2lmaWVkIGJ5IHRoZSBcdGV4dGl0e2NpcGhlcn0ndGggZW50cnkgaW4gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZS4gIEl0IHdpbGwgc3RvcmUgdGhlIE1BQyBpbiBcdGV4dGl0e291dH0gd2l0aCB0aGUgc2FtZSBydWxlcyBhcyB4Y2JjXF9kb25lKCkuCisKKworVG8gdGVzdCBYQ0JDLS1NQUMgZm9yIFJGQyAzNTY2IGNvbXBsaWFuY2UgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHt4Y2JjXF90ZXN0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgeGNiY190ZXN0KHZvaWQpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gb24gc3VjY2Vzcy4gIFRoaXMgcmVxdWlyZXMgdGhlIEFFUyBvciBSaWpuZGFlbCBkZXNjcmlwdG9yIGJlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCwgb3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiAKK1x0ZXh0YmZ7Q1JZUFRcX05PUH0uIAorCitcbXlzZWN0aW9ue0Y5LS1NQUN9CitUaGUgRjktLU1BQyBpcyB5ZXQgYW5vdGhlciBDQkMtLU1BQyB2YXJpYW50IHByb3Bvc2VkIGZvciB0aGUgM0dQUCBzdGFuZGFyZC4gIE9yaWdpbmFsbHkgc3BlY2lmaWVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgS0FTVU1JIGJsb2NrIGNpcGhlciwgaXQgY2FuIGFsc28gYmUgdXNlZAord2l0aCBvdGhlciBjaXBoZXJzLiAgRm9yIExpYlRvbUNyeXB0LCB0aGUgRjktLU1BQyBjb2RlIGNhbiB1c2UgYW55IGNpcGhlci4gIAorCitcc3Vic2VjdGlvbntVc2FnZSBOb3RpY2V9CitGOS0tTUFDIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSB0aGUgb3RoZXIgTUFDIGZ1bmN0aW9ucyBpbiB0aGF0IGl0IHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gcGVyZm9ybSB0aGUgZmluYWwgbWVzc2FnZSBwYWRkaW5nLiAgVGhlIHBhZGRpbmcgcXVpdGUgc2ltcGx5IGlzIGEgZGlyZWN0aW9uCitiaXQgZm9sbG93ZWQgYnkgYSAxIGJpdCBhbmQgZW5vdWdoIHplcm9zIHRvIG1ha2UgdGhlIG1lc3NhZ2UgYSBtdWx0aXBsZSBvZiB0aGUgY2lwaGVyIGJsb2NrIHNpemUuICBJZiB0aGUgbWVzc2FnZSBpcyBieXRlIGFsaWduZWQsIHRoZSBwYWRkaW5nIHRha2VzIG9uIHRoZSBmb3JtIG9mIAorYSBzaW5nbGUgMHg0MCBvciAweEMwIGJ5dGUgZm9sbG93ZWQgYnkgZW5vdWdoIDB4MDAgYnl0ZXMgdG8gbWFrZSB0aGUgbWVzc2FnZSBwcm9wZXIgbXVsdGlwbGUuICAKKworSWYgdGhlIHVzZXIgc2ltcGx5IHdhbnRzIGEgTUFDIGZ1bmN0aW9uIChoaW50OiB1c2UgT01BQykgcGFkZGluZyB3aXRoIGEgc2luZ2xlIDB4NDAgYnl0ZSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3Igc2VjdXJpdHkgcHVycG9zZXMgYW5kIHN0aWxsIGJlIHJlYXNvbmFibHkgY29tcGF0aWJsZQord2l0aCBGOS0tTUFDLgorCitcc3Vic2VjdGlvbntGOS0tTUFDIEZ1bmN0aW9uc30KK0EgRjktLU1BQyBzdGF0ZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7ZjlcX2luaXQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOV9pbml0KCAgICAgICAgICAgZjlfc3RhdGUgKmY5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAga2V5bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBGOS0tTUFDIHN0YXRlIFx0ZXh0aXR7Zjl9LCB3aXRoIHRoZSBrZXkgc3BlY2lmaWVkIGluIFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IG9jdGV0cy4gIFRoZSBjaXBoZXIgaW5kaWNhdGVkCitieSB0aGUgXHRleHRpdHtjaXBoZXJ9IGluZGV4IGNhbiBiZSBlaXRoZXIgYSA2NCBvciAxMjgtLWJpdCBibG9jayBjaXBoZXIuICBUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLgorCitUbyBwcm9jZXNzIGRhdGEgdGhyb3VnaCBGOS0tTUFDIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorXGluZGV4e2Y5XF9wcm9jZXNzKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZjlfcHJvY2VzcyggICAgICAgICAgIGY5X3N0YXRlICpzdGF0ZSwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgYWRkIHRoZSBtZXNzYWdlIG9jdGV0cyBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSB0byB0aGUgRjktLU1BQyBzdGF0ZSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7c3RhdGV9LiAgTGlrZSB0aGUgb3RoZXIgTUFDIGZ1bmN0aW9ucywKK3RoZSBncmFudWxhcml0eSBvZiB0aGUgaW5wdXQgaXMgbm90IGltcG9ydGFudCBidXQgdGhlIG9yZGVyIGlzLiAgVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gb24gc3VjY2Vzcy4KKworVG8gY29tcHV0ZSB0aGUgTUFDIHRhZyB2YWx1ZSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e2Y5XF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZjlfZG9uZSggICAgIGY5X3N0YXRlICpzdGF0ZSwgCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCByZXRyaWV2ZSB0aGUgRjktLU1BQyB0YWcgZnJvbSB0aGUgc3RhdGUgcG9pbnRlZCB0byBieSBcdGV4dGl0e3N0YXRlfSwgYW5kIHN0b3JlIGl0IGluIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7b3V0fS4gIFRoZSBcdGV4dGl0e291dGxlbn0gcGFyYW1ldGVyCitzcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBhbmQgaXMgdXBkYXRlZCB0byBob2xkIHRoZSBmaW5hbCBzaXplIG9mIHRoZSB0YWcgd2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucy4gIFRoaXMgd2lsbCByZXR1cm4gCitcdGV4dGJme0NSWVBUXF9PS30gb24gc3VjY2Vzcy4KKworSGVscGVyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gbWFrZSBwYXJzaW5nIG1lbW9yeSBidWZmZXJzIGFuZCBmaWxlcyBlYXNpZXIuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQ6CisKK1xpbmRleHtmOVxfbWVtb3J5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZjlfbWVtb3J5KAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGNvbXB1dGUgdGhlIEY5LS1NQUMgb2YgXHRleHRpdHttc2dsZW59IGJ5dGVzIG9mIFx0ZXh0aXR7bXNnfSwgdXNpbmcgdGhlIGtleSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBieXRlcywgYW5kIHRoZSBjaXBoZXIKK3NwZWNpZmllZCBieSB0aGUgXHRleHRpdHtjaXBoZXJ9J3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gXHRleHRpdHtvdXR9IHdpdGggdGhlIHNhbWUgcnVsZXMgYXMgZjlcX2RvbmUoKS4KKworVG8gRjktLU1BQyBhIGZpbGUgdXNlCitcaW5kZXh7ZjlcX2ZpbGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOV9maWxlKAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1doaWNoIHdpbGwgRjktLU1BQyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBieSBcdGV4dGl0e2ZpbGVuYW1lfSB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzLCBhbmQgdGhlIGNpcGhlciAKK3NwZWNpZmllZCBieSB0aGUgXHRleHRpdHtjaXBoZXJ9J3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gXHRleHRpdHtvdXR9IHdpdGggdGhlIHNhbWUgcnVsZXMgYXMgZjlcX2RvbmUoKS4KKworCitUbyB0ZXN0IGY5LS1NQUMgZm9yIFJGQyAzNTY2IGNvbXBsaWFuY2UgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHtmOVxfdGVzdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGY5X3Rlc3Qodm9pZCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLiAgVGhpcyByZXF1aXJlcyB0aGUgQUVTIG9yIFJpam5kYWVsIGRlc2NyaXB0b3IgYmUgcHJldmlvdXNseSByZWdpc3RlcmVkLCBvdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIAorXHRleHRiZntDUllQVFxfTk9QfS4gCiAKIFxjaGFwdGVye1BzZXVkby1SYW5kb20gTnVtYmVyIEdlbmVyYXRvcnN9Ci1cc2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KK1xteXNlY3Rpb257Q29yZSBGdW5jdGlvbnN9CiBUaGUgbGlicmFyeSBwcm92aWRlcyBhbiBhcnJheSBvZiBjb3JlIGZ1bmN0aW9ucyBmb3IgUHNldWRvLVJhbmRvbSBOdW1iZXIgR2VuZXJhdG9ycyAoUFJOR3MpIGFzIHdlbGwuICBBIGNyeXB0b2dyYXBoaWMgUFJORyBpcwogdXNlZCB0byBleHBhbmQgYSBzaG9ydGVyIGJpdCBzdHJpbmcgaW50byBhIGxvbmdlciBiaXQgc3RyaW5nLiAgUFJOR3MgYXJlIHVzZWQgd2hlcmV2ZXIgcmFuZG9tIGRhdGEgaXMgcmVxdWlyZWQgc3VjaCBhcyBQdWJsaWMgS2V5IChQSykKLWtleSBnZW5lcmF0aW9uLiAgVGhlcmUgaXMgYSB1bml2ZXJzYWwgc3RydWN0dXJlIGNhbGxlZCBgYHBybmdcX3N0YXRlJycuICBUbyBpbml0aWFsaXplIGEgUFJORyBjYWxsOgora2V5IGdlbmVyYXRpb24uICBUaGVyZSBpcyBhIHVuaXZlcnNhbCBzdHJ1Y3R1cmUgY2FsbGVkIFx0ZXh0aXR7cHJuZ1xfc3RhdGV9LiAgVG8gaW5pdGlhbGl6ZSBhIFBSTkcgY2FsbDoKIFxpbmRleHtQUk5HIHN0YXJ0fQogXGJlZ2lue3ZlcmJhdGltfQogaW50IFhYWF9zdGFydChwcm5nX3N0YXRlICpwcm5nKTsKQEAgLTIxMTIsMjIgKzI2NzIsMjMgQEAKIGVudHJvcHkuICBJZGVhbGx5IHlvdSdkIGhhdmUgc29tZSBPUyBsZXZlbCBzb3VyY2UgdG8gdGFwIGxpa2UgaW4gVU5JWC4gIFRvIGFkZCBlbnRyb3B5IHRvIHRoZSBQUk5HIGNhbGw6CiBcaW5kZXh7UFJORyBhZGRcX2VudHJvcHl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgWFhYX2FkZF9lbnRyb3B5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCAKLSAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgWFhYX2FkZF9lbnRyb3B5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nKTsKIFxlbmR7dmVyYmF0aW19Ci0KLVdoaWNoIHJldHVybnMge1xiZiBDUllQVE9cX09LfSBpZiB0aGUgZW50cm9weSB3YXMgYWNjZXB0ZWQuICBPbmNlIHlvdSB0aGluayB5b3UgaGF2ZSBlbm91Z2ggZW50cm9weSB5b3UgY2FsbCBhbm90aGVyCitXaGljaCByZXR1cm5zIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgZW50cm9weSB3YXMgYWNjZXB0ZWQuICBPbmNlIHlvdSB0aGluayB5b3UgaGF2ZSBlbm91Z2ggZW50cm9weSB5b3UgY2FsbCBhbm90aGVyCiBmdW5jdGlvbiB0byBwdXQgdGhlIGVudHJvcHkgaW50byBhY3Rpb24uCiBcaW5kZXh7UFJORyByZWFkeX0KIFxiZWdpbnt2ZXJiYXRpbX0KIGludCBYWFhfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZyk7CiBcZW5ke3ZlcmJhdGltfQogCi1XaGljaCByZXR1cm5zIHtcYmYgQ1JZUFRPXF9PS30gaWYgaXQgaXMgcmVhZHkuICBGaW5hbGx5IHRvIGFjdHVhbGx5IHJlYWQgYnl0ZXMgY2FsbDoKK1doaWNoIHJldHVybnMge1xiZiBDUllQVFxfT0t9IGlmIGl0IGlzIHJlYWR5LiAgRmluYWxseSB0byBhY3R1YWxseSByZWFkIGJ5dGVzIGNhbGw6CiBcaW5kZXh7UFJORyByZWFkfQogXGJlZ2lue3ZlcmJhdGltfQotdW5zaWduZWQgbG9uZyBYWFhfcmVhZCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nKTsKK3Vuc2lnbmVkIGxvbmcgWFhYX3JlYWQodW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nKTsKIFxlbmR7dmVyYmF0aW19CiAKIFdoaWNoIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gdGhlIFBSTkcuICBXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCBhIFBSTkcgc3RhdGUgeW91IGNhbGwKQEAgLTIxNDMsMjkgKzI3MDQsMzEgQEAKIAogXGluZGV4e1BSTkcgZXhwb3J0fQogXGJlZ2lue3ZlcmJhdGltfQotaW50IFhYWF9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAgICAqcHJuZyk7CitpbnQgWFhYX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIHdyaXRlIGEgYGBQUk5HIHN0YXRlJycgdG8gdGhlIGJ1ZmZlciBgYG91dCcnIG9mIGxlbmd0aCBgYG91dGxlbicnIGJ5dGVzLiAgVGhlIGlkZWEgb2YgCi10aGUgZXhwb3J0IGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYSBgYHNlZWQgZmlsZScnLiAgVGhhdCBpcywgd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgdXAgdGhlcmUgd2lsbCBub3QgbGlrZWx5CitUaGlzIHdpbGwgd3JpdGUgYSBcdGV4dGl0e1BSTkcgc3RhdGV9IHRvIHRoZSBidWZmZXIgXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gYnl0ZXMuICBUaGUgaWRlYSBvZiAKK3RoZSBleHBvcnQgaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBhIFx0ZXh0aXR7c2VlZCBmaWxlfS4gIFRoYXQgaXMsIHdoZW4gdGhlIHByb2dyYW0gc3RhcnRzIHVwIHRoZXJlIHdpbGwgbm90IGxpa2VseQogYmUgdGhhdCBtdWNoIGVudHJvcHkgYXZhaWxhYmxlLiAgIFRvIGltcG9ydCBhIHN0YXRlIHRvIHNlZWQgYSBQUk5HIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KIAogXGluZGV4e1BSTkcgaW1wb3J0fQogXGJlZ2lue3ZlcmJhdGltfQotaW50IFhYWF9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAgICAgKnBybmcpOworaW50IFhYWF9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZyk7CiBcZW5ke3ZlcmJhdGltfQogCiBUaGlzIHdpbGwgY2FsbCB0aGUgc3RhcnQgYW5kIGFkZFxfZW50cm9weSBmdW5jdGlvbnMgb2YgdGhlIGdpdmVuIFBSTkcuICBJdCB3aWxsIHVzZSB0aGUgc3RhdGUgaW4KLWBgaW4nJyBvZiBsZW5ndGggYGBpbmxlbicnIGFzIHRoZSBpbml0aWFsIHNlZWQuICBZb3UgbXVzdCBwYXNzIHRoZSBzYW1lIHNlZWQgbGVuZ3RoIGFzIHdhcyBleHBvcnRlZAorXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IGFzIHRoZSBpbml0aWFsIHNlZWQuICBZb3UgbXVzdCBwYXNzIHRoZSBzYW1lIHNlZWQgbGVuZ3RoIGFzIHdhcyBleHBvcnRlZAogYnkgdGhlIGNvcnJlc3BvbmRpbmcgZXhwb3J0IGZ1bmN0aW9uLgogCi1Ob3RlIHRoYXQgaW1wb3J0aW5nIGEgc3RhdGUgd2lsbCBub3QgYGByZXN1bWUnJyB0aGUgUFJORyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLiAgVGhhdCBpcywgaWYgeW91IGV4cG9ydAorTm90ZSB0aGF0IGltcG9ydGluZyBhIHN0YXRlIHdpbGwgbm90IFx0ZXh0aXR7cmVzdW1lfSB0aGUgUFJORyBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLiAgVGhhdCBpcywgaWYgeW91IGV4cG9ydAogYSBzdGF0ZSwgZW1pdCAoc2F5KSA4IGJ5dGVzIGFuZCB0aGVuIGltcG9ydCB0aGUgcHJldmlvdXNseSBleHBvcnRlZCBzdGF0ZSB0aGUgbmV4dCA4IGJ5dGVzIHdpbGwgbm90IAogc3BlY2lmaWNhbGx5IGVxdWFsIHRoZSA4IGJ5dGVzIHlvdSBnZW5lcmF0ZWQgcHJldmlvdXNseS4KIAotV2hlbiBhIHByb2dyYW0gaXMgZmlyc3QgZXhlY3V0ZWQgdGhlIG5vcm1hbCBjb3Vyc2Ugb2Ygb3BlcmF0aW9uIGlzIAorV2hlbiBhIHByb2dyYW0gaXMgZmlyc3QgZXhlY3V0ZWQgdGhlIG5vcm1hbCBjb3Vyc2Ugb2Ygb3BlcmF0aW9uIGlzOgogCiBcYmVnaW57ZW51bWVyYXRlfQogICAgXGl0ZW0gR2F0aGVyIGVudHJvcHkgZnJvbSB5b3VyIHNvdXJjZXMgZm9yIGEgZ2l2ZW4gcGVyaW9kIG9mIHRpbWUgb3IgbnVtYmVyIG9mIGV2ZW50cy4KQEAgLTIxNzQsNyArMjczNyw3IEBACiAKIFdoZW4geW91ciBwcm9ncmFtIGlzIGZpbmlzaGVkIHlvdSBzaW1wbHkgY2FsbCB0aGUgZXhwb3J0IGZ1bmN0aW9uIGFuZCBzYXZlIHRoZSBzdGF0ZSB0byBhIG1lZGl1bSAoZGlzaywKIGZsYXNoIG1lbW9yeSwgZXRjKS4gIFRoZSBuZXh0IHRpbWUgeW91ciBhcHBsaWNhdGlvbiBzdGFydHMgdXAgeW91IGNhbiBkZXRlY3QgdGhlIHN0YXRlLCBmZWVkIGl0IHRvIHRoZSAKLWltcG9ydCBmdW5jdGlvbiBhbmQgZ28gb24geW91ciB3YXkuICBJdCBpcyBpZGVhbCB0aGF0IChhcyBzb29uIGFzIHBvc3NpYmxlKSBhZnRlciBzdGFydHVwIHlvdSBleHBvcnQgYQoraW1wb3J0IGZ1bmN0aW9uIGFuZCBnbyBvbiB5b3VyIHdheS4gIEl0IGlzIGlkZWFsIHRoYXQgKGFzIHNvb24gYXMgcG9zc2libGUpIGFmdGVyIHN0YXJ0IHVwIHlvdSBleHBvcnQgYQogZnJlc2ggc3RhdGUuICBUaGlzIGhlbHBzIGluIHRoZSBjYXNlIHRoYXQgdGhlIHByb2dyYW0gYWJvcnRzIG9yIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQgZG93biB3aXRob3V0CiBiZWluZyBnaXZlbiBhIGNoYW5jZSB0byBleGl0IHByb3Blcmx5LiAgCiAKQEAgLTIxOTUsMTIgKzI3NTgsMTEgQEAKIEl0IGlzIHBvc3NpYmxlIHRvIGJlIGFkZGluZyBlbnRyb3B5IGFuZCByZWFkaW5nIGZyb20gYSBQUk5HIGF0IHRoZSBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZSwgaWYgeW91IGZpcnN0IHNlZWQgdGhlIFBSTkcKIGFuZCBjYWxsIHJlYWR5KCkgeW91IGNhbiBub3cgcmVhZCBmcm9tIGl0LiAgWW91IGNhbiBhbHNvIGtlZXAgYWRkaW5nIG5ldyBlbnRyb3B5IHRvIGl0LiAgVGhlIG5ldyBlbnRyb3B5IHdpbGwgbm90IGJlIHVzZWQKIGluIHRoZSBQUk5HIHVudGlsIHJlYWR5KCkgaXMgY2FsbGVkIGFnYWluLiAgVGhpcyBhbGxvd3MgdGhlIFBSTkcgdG8gYmUgdXNlZCBhbmQgcmUtc2VlZGVkIGF0IHRoZSBzYW1lIHRpbWUuICBObyByZWFsIGVycm9yIAotY2hlY2tpbmcgaXMgZ3VhcmFudGVlZCB0byBzZWUgaWYgdGhlIGVudHJvcHkgaXMgc3VmZmljaWVudCBvciBpZiB0aGUgUFJORyBpcyBldmVuIGluIGEgcmVhZHkgc3RhdGUgYmVmb3JlIHJlYWRpbmcuCitjaGVja2luZyBpcyBndWFyYW50ZWVkIHRvIHNlZSBpZiB0aGUgZW50cm9weSBpcyBzdWZmaWNpZW50LCBvciBpZiB0aGUgUFJORyBpcyBldmVuIGluIGEgcmVhZHkgc3RhdGUgYmVmb3JlIHJlYWRpbmcuCiAKIFxzdWJzZWN0aW9ue0V4YW1wbGV9Ci0KLUJlbG93IGlzIGEgc2ltcGxlIHNuaXBwZXQgdG8gcmVhZCAxMCBieXRlcyBmcm9tIHlhcnJvdy4gIEl0cyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoaXMgc25pcHBldCBpcyAKLXtcYmYgTk9UfSBzZWN1cmUgc2luY2UgdGhlIGVudHJvcHkgYWRkZWQgaXMgbm90IHJhbmRvbS4KK0JlbG93IGlzIGEgc2ltcGxlIHNuaXBwZXQgdG8gcmVhZCAxMCBieXRlcyBmcm9tIFlhcnJvdy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhpcyBzbmlwcGV0IGlzIHtcYmYgTk9UfSBzZWN1cmUgc2luY2UgCit0aGUgZW50cm9weSBhZGRlZCBpcyBub3QgcmFuZG9tLgogCiBcYmVnaW57dmVyYmF0aW19CiAjaW5jbHVkZSA8dG9tY3J5cHQuaD4KQEAgLTIyMTUsNDYgKzI3NzcsNjkgQEAKICAgICAgIHByaW50ZigiU3RhcnQgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICB9CiAgICAvKiBhZGQgZW50cm9weSAqLwotICAgaWYgKChlcnIgPSB5YXJyb3dfYWRkX2VudHJvcHkoImhlbGxvIHdvcmxkIiwgMTEsICZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgIGlmICgoZXJyID0geWFycm93X2FkZF9lbnRyb3B5KCJoZWxsbyB3b3JsZCIsIDExLCAmcHJuZykpIAorICAgICAgICE9IENSWVBUX09LKSB7CiAgICAgICBwcmludGYoIkFkZF9lbnRyb3B5IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgfQogICAgLyogcmVhZHkgYW5kIHJlYWQgKi8KICAgIGlmICgoZXJyID0geWFycm93X3JlYWR5KCZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgIHByaW50ZigiUmVhZHkgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICB9Ci0gICBwcmludGYoIlJlYWQgJWx1IGJ5dGVzIGZyb20geWFycm93XG4iLCB5YXJyb3dfcmVhZChidWYsIDEwLCAmcHJuZykpOworICAgcHJpbnRmKCJSZWFkICVsdSBieXRlcyBmcm9tIHlhcnJvd1xuIiwgCisgICAgICAgICAgeWFycm93X3JlYWQoYnVmLCBzaXplb2YoYnVmKSwgJnBybmcpKTsKICAgIHJldHVybiAwOwogfQogXGVuZHt2ZXJiYXRpbX0KIAotXHNlY3Rpb257UFJORyBEZXNjcmlwdG9yc30KK1xteXNlY3Rpb257UFJORyBEZXNjcmlwdG9yc30KIFxpbmRleHtQUk5HIERlc2NyaXB0b3J9Ci1QUk5HcyBoYXZlIGRlc2NyaXB0b3JzIHRvbyAoc3VycHJpc2VkPykuIFN0b3JlZCBpbiB0aGUgc3RydWN0dXJlIGBgcHJuZ1xfZGVzY3JpcHRvcicnLiAgVGhlIGZvcm1hdCBvZiBhbiBlbGVtZW50IGlzOgorUFJOR3MgaGF2ZSBkZXNjcmlwdG9ycyB0aGF0IGFsbG93IHBsdWdpbiBkcml2ZW4gZnVuY3Rpb25zIHRvIGJlIGNyZWF0ZWQgdXNpbmcgUFJOR3MuIFRoZSBwbHVnaW4gZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiB0aGUgc3RydWN0dXJlIFx0ZXh0aXR7cHJuZ1xfZGVzY3JpcHRvcn0uICBUaGUgCitmb3JtYXQgb2YgYW4gZWxlbWVudCBpczoKIFxiZWdpbnt2ZXJiYXRpbX0KIHN0cnVjdCBfcHJuZ19kZXNjcmlwdG9yIHsKICAgICBjaGFyICpuYW1lOwogICAgIGludCAgZXhwb3J0X3NpemU7ICAgIC8qIHNpemUgaW4gYnl0ZXMgb2YgZXhwb3J0ZWQgc3RhdGUgKi8KKwogICAgIGludCAoKnN0YXJ0KSAgICAgIChwcm5nX3N0YXRlICopOwotICAgIGludCAoKmFkZF9lbnRyb3B5KShjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIHBybmdfc3RhdGUgKik7CisKKyAgICBpbnQgKCphZGRfZW50cm9weSkoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqKTsKKwogICAgIGludCAoKnJlYWR5KSAgICAgIChwcm5nX3N0YXRlICopOwotICAgIHVuc2lnbmVkIGxvbmcgKCpyZWFkKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcgbGVuLCBwcm5nX3N0YXRlICopOworCisgICAgdW5zaWduZWQgbG9uZyAoKnJlYWQpKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICopOworCiAgICAgdm9pZCAoKmRvbmUpKHBybmdfc3RhdGUgKik7CisKICAgICBpbnQgKCpleHBvcnQpKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqLCBwcm5nX3N0YXRlICopOworCiAgICAgaW50ICgqaW1wb3J0KShjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIHBybmdfc3RhdGUgKik7CisKICAgICBpbnQgKCp0ZXN0KSh2b2lkKTsKIH07CiBcZW5ke3ZlcmJhdGltfQogCi1UaGVyZSBpcyBhIGBgaW50IGZpbmRcX3BybmcoY2hhciAqbmFtZSknJyBmdW5jdGlvbiBhcyB3ZWxsLiAgUmV0dXJucyAtMSBpZiB0aGUgUFJORyBpcyBub3QgZm91bmQsIG90aGVyd2lzZSBpdCByZXR1cm5zCi10aGUgcG9zaXRpb24gaW4gdGhlIHBybmdcX2Rlc2NyaXB0b3IgYXJyYXkuCitUbyBmaW5kIGEgUFJORyBpbiB0aGUgZGVzY3JpcHRvciB0YWJsZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiBiZSB1c2VkOgorXGluZGV4e2ZpbmRcX3BybmcoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmaW5kX3BybmcoY29uc3QgY2hhciAqbmFtZSk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIHNlYXJjaCB0aGUgUFJORyBkZXNjcmlwdG9yIHRhYmxlIGZvciB0aGUgUFJORyBuYW1lZCBcdGV4dGl0e25hbWV9LiAgSXQgd2lsbCByZXR1cm4gLTEgaWYgdGhlIFBSTkcgaXMgbm90IGZvdW5kLCBvdGhlcndpc2UsIGl0IHJldHVybnMKK3RoZSBpbmRleCBpbnRvIHRoZSBkZXNjcmlwdG9yIHRhYmxlLgogCi1KdXN0IGxpa2UgdGhlIGNpcGhlcnMgYW5kIGhhc2hlcyB5b3UgbXVzdCByZWdpc3RlciB5b3VyIHBybmcgYmVmb3JlIHlvdSBjYW4gdXNlIGl0LiAgVGhlIHR3byBmdW5jdGlvbnMgcHJvdmlkZWQgd29yawotZXhhY3RseSBhcyB0aG9zZSBmb3IgdGhlIGNpcGhlciByZWdpc3RyeSBmdW5jdGlvbnMuICBUaGV5IGFyZToKK0p1c3QgbGlrZSB0aGUgY2lwaGVycyBhbmQgaGFzaGVzLCB5b3UgbXVzdCByZWdpc3RlciB5b3VyIHBybmcgYmVmb3JlIHlvdSBjYW4gdXNlIGl0LiAgVGhlIHR3byBmdW5jdGlvbnMgcHJvdmlkZWQgd29yayBleGFjdGx5IGFzIHRob3NlIGZvciB0aGUgY2lwaGVyIHJlZ2lzdHJ5IGZ1bmN0aW9ucy4gIAorVGhleSBhcmUgdGhlIGZvbGxvd2luZzoKK1xpbmRleHtyZWdpc3RlclxfcHJuZygpfSBcaW5kZXh7dW5yZWdpc3RlclxfcHJuZygpfQogXGJlZ2lue3ZlcmJhdGltfQogaW50IHJlZ2lzdGVyX3BybmcoY29uc3Qgc3RydWN0IF9wcm5nX2Rlc2NyaXB0b3IgKnBybmcpOwogaW50IHVucmVnaXN0ZXJfcHJuZyhjb25zdCBzdHJ1Y3QgX3BybmdfZGVzY3JpcHRvciAqcHJuZyk7CiBcZW5ke3ZlcmJhdGltfQogCitUaGUgcmVnaXN0ZXIgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgUFJORywgYW5kIHJldHVybiB0aGUgaW5kZXggaW50byB0aGUgdGFibGUgd2hlcmUgaXQgd2FzIHBsYWNlZCAob3IgLTEgZm9yIGVycm9yKS4gIEl0IHdpbGwgYXZvaWQgcmVnaXN0ZXJpbmcgdGhlIHNhbWUKK2Rlc2NyaXB0b3IgdHdpY2UsIGFuZCB3aWxsIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcGxhY2VtZW50IGluIHRoZSB0YWJsZSBpZiB0aGUgY2FsbGVyIGF0dGVtcHRzIHRvIHJlZ2lzdGVyIGl0IG1vcmUgdGhhbiBvbmNlLiAgVGhlIHVucmVnaXN0ZXIgZnVuY3Rpb24KK3dpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBpZiB0aGUgUFJORyB3YXMgZm91bmQgYW5kIHJlbW92ZWQuICBPdGhlcndpc2UsIGl0IHJldHVybnMgXHRleHRiZntDUllQVFxfRVJST1J9LgorCiBcc3Vic2VjdGlvbntQUk5HcyBQcm92aWRlZH0KIFxiZWdpbntmaWd1cmV9W2hlcmVdCiBcYmVnaW57Y2VudGVyfQpAQCAtMjI3NCw5ICsyODU5LDkgQEAKIAogXHN1YnN1YnNlY3Rpb257WWFycm93fQogWWFycm93IGlzIGZhc3QgUFJORyBtZWFudCB0byBjb2xsZWN0IGFuIHVuc3BlY2lmaWVkIGFtb3VudCBvZiBlbnRyb3B5IGZyb20gc291cmNlcyAKLShrZXlib2FyZCwgbW91c2UsIGludGVycnVwdHMsIGV0YykgYW5kIHByb2R1Y2UgYW4gdW5ib3VuZGVkIHN0cmluZyBvZiByYW5kb20gYnl0ZXMuICAKKyhrZXlib2FyZCwgbW91c2UsIGludGVycnVwdHMsIGV0YyksIGFuZCBwcm9kdWNlIGFuIHVuYm91bmRlZCBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzLiAgCiAKLVx0ZXh0aXR7Tm90ZTp9IFRoaXMgUFJORyBpcyBzdGlsbCBzZWN1cmUgZm9yIG1vc3QgdGFza2luZ3MgYnV0IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZC4gIFVzZXJzCitcdGV4dGl0e05vdGU6fSBUaGlzIFBSTkcgaXMgc3RpbGwgc2VjdXJlIGZvciBtb3N0IHRhc2tzIGJ1dCBpcyBubyBsb25nZXIgcmVjb21tZW5kZWQuICBVc2Vycwogc2hvdWxkIHVzZSBGb3J0dW5hIGluc3RlYWQuCiAKIFxzdWJzdWJzZWN0aW9ue0ZvcnR1bmF9CkBAIC0yMjg3LDQ3ICsyODcyLDQ2IEBACiBwcm92aWRpbmcgbW9yZSBzZWN1cml0eS4gIAogCiBGb3J0dW5hIGlzIHNsaWdodGx5IGxlc3MgZmxleGlibGUgdGhhbiBZYXJyb3cgaW4gdGhlIHNlbnNlIHRoYXQgaXQgb25seSB3b3JrcyB3aXRoIHRoZSBBRVMgYmxvY2sgY2lwaGVyIAotYW5kIFNIQS0tMjU2IGhhc2ggZnVuY3Rpb24uICBUZWNobmljYWxseSBGb3J0dW5hIHdpbGwgd29yayB3aXRoIGFueSBibG9jayBjaXBoZXIgdGhhdCBhY2NlcHRzIGEgMjU2LS1iaXQKLWtleSBhbmQgYW55IGhhc2ggdGhhdCBwcm9kdWNlcyBhdCBsZWFzdCBhIDI1Ni0tYml0IG91dHB1dC4gIEhvd2V2ZXIsIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIHNpbXBsZXIKK2FuZCBTSEEtLTI1NiBoYXNoIGZ1bmN0aW9uLiAgVGVjaG5pY2FsbHksIEZvcnR1bmEgd2lsbCB3b3JrIHdpdGggYW55IGJsb2NrIGNpcGhlciB0aGF0IGFjY2VwdHMgYSAyNTYtLWJpdAora2V5LCBhbmQgYW55IGhhc2ggdGhhdCBwcm9kdWNlcyBhdCBsZWFzdCBhIDI1Ni0tYml0IG91dHB1dC4gIEhvd2V2ZXIsIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIHNpbXBsZXIKIGl0IGhhcyBiZWVuIGZpeGVkIHRvIHRob3NlIGNob2ljZXMuCiAKIEZvcnR1bmEgaXMgbW9yZSBzZWN1cmUgdGhhbiBZYXJyb3cgaW4gdGhlIHNlbnNlIHRoYXQgYXR0YWNrZXJzIHdobyBsZWFybiBwYXJ0cyBvZiB0aGUgZW50cm9weSBiZWluZyAKIGFkZGVkIHRvIHRoZSBQUk5HIGxlYXJuIGZhciBsZXNzIGFib3V0IHRoZSBzdGF0ZSB0aGFuIHRoYXQgb2YgWWFycm93LiAgV2l0aG91dCBnZXR0aW5nIGludG8gdG8gbWFueQogZGV0YWlscyBGb3J0dW5hIGhhcyB0aGUgYWJpbGl0eSB0byByZWNvdmVyIGZyb20gc3RhdGUgZGV0ZXJtaW5hdGlvbiBhdHRhY2tzIHdoZXJlIHRoZSBhdHRhY2tlciBzdGFydHMKLXRvIGxlYXJuIGluZm9ybWF0aW9uIGZyb20gdGhlIFBSTkdzIG91dHB1dCBhYm91dCB0aGUgaW50ZXJuYWwgc3RhdGUuICBZYXJyb3cgb24gdGhlIG90aGVyIGhhbmQgY2Fubm90IAordG8gbGVhcm4gaW5mb3JtYXRpb24gZnJvbSB0aGUgUFJOR3Mgb3V0cHV0IGFib3V0IHRoZSBpbnRlcm5hbCBzdGF0ZS4gIFlhcnJvdyBvbiB0aGUgb3RoZXIgaGFuZCwgY2Fubm90IAogcmVjb3ZlciBmcm9tIHRoYXQgcHJvYmxlbSB1bnRpbCBuZXcgZW50cm9weSBpcyBhZGRlZCB0byB0aGUgcG9vbCBhbmQgcHV0IHRvIHVzZSB0aHJvdWdoIHRoZSByZWFkeSgpIGZ1bmN0aW9uLgogCiBcc3Vic3Vic2VjdGlvbntSQzR9CiAKLVJDNCBpcyBhbiBvbGQgc3RyZWFtIGNpcGhlciB0aGF0IGNhbiBhbHNvIGRvdWJsZSBkdXR5IGFzIGEgUFJORyBpbiBhIHBpbmNoLiAgWW91IGBga2V5JycgaXQgYnkKLWNhbGxpbmcgYWRkXF9lbnRyb3B5KCkgYW5kIHNldHVwIHRoZSBrZXkgYnkgY2FsbGluZyByZWFkeSgpLiAgWW91IGNhbiBvbmx5IGFkZCB1cHRvIDI1NiBieXRlcyB2aWEKK1JDNCBpcyBhbiBvbGQgc3RyZWFtIGNpcGhlciB0aGF0IGNhbiBhbHNvIGRvdWJsZSBkdXR5IGFzIGEgUFJORyBpbiBhIHBpbmNoLiAgWW91IGtleSBSQzQgYnkKK2NhbGxpbmcgYWRkXF9lbnRyb3B5KCksIGFuZCBzZXR1cCB0aGUga2V5IGJ5IGNhbGxpbmcgcmVhZHkoKS4gIFlvdSBjYW4gb25seSBhZGQgdXAgdG8gMjU2IGJ5dGVzIHZpYQogYWRkXF9lbnRyb3B5KCkuICAKIAotV2hlbiB5b3UgcmVhZCBmcm9tIFJDNCB0aGUgb3V0cHV0IG9mIHRoZSBSQzQgYWxnb3JpdGhtIGlzIFhPUidkIGFnYWluc3QgeW91ciBidWZmZXIgeW91IHByb3ZpZGUuICBJbiB0aGlzCi1tYW5uZXIgeW91IGNhbiB1c2UgcmM0XF9yZWFkKCkgYXMgYW4gZW5jcnlwdCAoYW5kIGRlY3J5cHQpIGZ1bmN0aW9uLiAgCitXaGVuIHlvdSByZWFkIGZyb20gUkM0LCB0aGUgb3V0cHV0IGlzIFhPUidlZCBhZ2FpbnN0IHlvdXIgYnVmZmVyIHlvdSBwcm92aWRlLiAgSW4gdGhpcyBtYW5uZXIsIHlvdSBjYW4gdXNlIHJjNFxfcmVhZCgpIAorYXMgYW4gZW5jcnlwdCAoYW5kIGRlY3J5cHQpIGZ1bmN0aW9uLiAgCiAKLVlvdSByZWFsbHkgc2hvdWxkbid0IHVzZSBSQzQgYW55bW9yZS4gIFRoaXMgaXNuJ3QgYmVjYXVzZSBSQzQgaXMgd2VhayAodGhvdWdoIGJpYXNlcyBhcmUga25vd24gdG8gZXhpc3QpIGp1c3QKLXNpbXBseSB0aGF0IGZhc3RlciBhbHRlcm5hdGl2ZXMgZXhpc3QuCitZb3UgcmVhbGx5IHNob3VsZCBub3QgdXNlIFJDNC4gIFRoaXMgaXMgbm90IGJlY2F1c2UgUkM0IGlzIHdlYWssICh0aG91Z2ggYmlhc2VzIGFyZSBrbm93biB0byBleGlzdCkgYnV0IHNpbXBseSBkdWUgdG8gCit0aGUgZmFjdCB0aGF0IGZhc3RlciBhbHRlcm5hdGl2ZXMgZXhpc3QuCiAKIFxzdWJzdWJzZWN0aW9ue1NPQkVSLTEyOH0KIAotU09CRVItMTI4IGlzIGEgc3RyZWFtIGNpcGhlciBkZXNpZ25lZCBieSB0aGUgUVVBTENPTU0gQXVzdHJhbGlhIHRlYW0uICBMaWtlIFJDNCB5b3UgYGBrZXknJyBpdCBieSAKK1NPQkVSLS0xMjggaXMgYSBzdHJlYW0gY2lwaGVyIGRlc2lnbmVkIGJ5IHRoZSBRVUFMQ09NTSBBdXN0cmFsaWEgdGVhbS4gIExpa2UgUkM0LCB5b3Uga2V5IGl0IGJ5IAogY2FsbGluZyBhZGRcX2VudHJvcHkoKS4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCByZWFkeSgpIGZvciB0aGlzIFBSTkcgYXMgaXQgZG9lcyBub3QgZG8gYW55dGhpbmcuICAKIAotTm90ZSB0aGF0IHRoaXMgY2lwaGVyIGhhcyBzZXZlcmFsIG9kZGl0aWVzIGFib3V0IGhvdyBpdCBvcGVyYXRlcy4gIFRoZSBmaXJzdCB0aW1lIHlvdSBjYWxsIAotYWRkXF9lbnRyb3B5KCkgdGhhdCBzZXRzIHRoZSBjaXBoZXIncyBrZXkuICBFdmVyeSBvdGhlciB0aW1lIHlvdSBjYWxsIHRoZSBzYW1lIGZ1bmN0aW9uIGl0IHNldHMKLXRoZSBjaXBoZXIncyBJViB2YXJpYWJsZS4gIFRoZSBJViBtZWNoYW5pc20gYWxsb3dzIHlvdSB0byBlbmNyeXB0IHNldmVyYWwgbWVzc2FnZXMgd2l0aCB0aGUgc2FtZQota2V5IGFuZCBub3QgcmUtLXVzZSB0aGUgc2FtZSBrZXkgbWF0ZXJpYWwuCitOb3RlOiB0aGlzIGNpcGhlciBoYXMgc2V2ZXJhbCBvZGRpdGllcyBhYm91dCBob3cgaXQgb3BlcmF0ZXMuICBUaGUgZmlyc3QgY2FsbCB0byBhZGRcX2VudHJvcHkoKSBzZXRzIHRoZSBjaXBoZXIncyBrZXkuICAKK0V2ZXJ5IG90aGVyIHRpbWUgY2FsbCB0byB0aGUgYWRkXF9lbnRyb3B5KCkgZnVuY3Rpb24gc2V0cyB0aGUgY2lwaGVyJ3MgSVYgdmFyaWFibGUuICBUaGUgSVYgbWVjaGFuaXNtIGFsbG93cyB5b3UgdG8gCitlbmNyeXB0IHNldmVyYWwgbWVzc2FnZXMgd2l0aCB0aGUgc2FtZSBrZXksIGFuZCBub3QgcmUtLXVzZSB0aGUgc2FtZSBrZXkgbWF0ZXJpYWwuCiAKLVVubGlrZSBZYXJyb3cgYW5kIEZvcnR1bmEgYWxsIG9mIHRoZSBlbnRyb3B5IChhbmQgaGVuY2Ugc2VjdXJpdHkpIG9mIHRoaXMgYWxnb3JpdGhtIHJlc3RzIGluIHRoZSBkYXRhCi15b3UgcGFzcyBpdCBvbiB0aGUgZmlyc3QgY2FsbCB0byBhZGRcX2VudHJvcHkoKS4gIEFsbCBidWZmZXJzIHNlbnQgdG8gYWRkXF9lbnRyb3B5KCkgbXVzdCBoYXZlIGEgbGVuZ3RoCitVbmxpa2UgWWFycm93IGFuZCBGb3J0dW5hLCBhbGwgb2YgdGhlIGVudHJvcHkgKGFuZCBoZW5jZSBzZWN1cml0eSkgb2YgdGhpcyBhbGdvcml0aG0gcmVzdHMgaW4gdGhlIGRhdGEKK3lvdSBwYXNzIGl0IG9uIHRoZSBcdGV4dGJme2ZpcnN0fSBjYWxsIHRvIGFkZFxfZW50cm9weSgpLiAgQWxsIGJ1ZmZlcnMgc2VudCB0byBhZGRcX2VudHJvcHkoKSBtdXN0IGhhdmUgYSBsZW5ndGgKIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzLgogCi1MaWtlIFJDNCB0aGUgb3V0cHV0IG9mIFNPQkVSLS0xMjggaXMgWE9SJ2VkIGFnYWluc3QgdGhlIGJ1ZmZlciB5b3UgcHJvdmlkZSBpdC4gIEluIHRoaXMgbWFubmVyIHlvdSBjYW4gdXNlCitMaWtlIFJDNCwgdGhlIG91dHB1dCBvZiBTT0JFUi0tMTI4IGlzIFhPUidlZCBhZ2FpbnN0IHRoZSBidWZmZXIgeW91IHByb3ZpZGUgaXQuICBJbiB0aGlzIG1hbm5lciwgeW91IGNhbiB1c2UKIHNvYmVyMTI4XF9yZWFkKCkgYXMgYW4gZW5jcnlwdCAoYW5kIGRlY3J5cHQpIGZ1bmN0aW9uLgogCi1TaW5jZSBTT0JFUi0xMjggaGFzIGEgZml4ZWQga2V5aW5nIHNjaGVtZSBhbmQgaXMgdmVyeSBmYXN0IChmYXN0ZXIgdGhhbiBSQzQpIHRoZSBpZGVhbCB1c2FnZSBvZiBTT0JFUi0xMjggaXMgdG8gCi1rZXkgaXQgZnJvbSB0aGUgb3V0cHV0IG9mIEZvcnR1bmEgKG9yIFlhcnJvdykgYW5kIHVzZSBpdCB0byBlbmNyeXB0IG1lc3NhZ2VzLiAgSXQgaXMgYWxzbyBpZGVhbCBmb3IKK1NpbmNlIFNPQkVSLTEyOCBoYXMgYSBmaXhlZCBrZXlpbmcgc2NoZW1lLCBhbmQgaXMgdmVyeSBmYXN0IChmYXN0ZXIgdGhhbiBSQzQpIHRoZSBpZGVhbCB1c2FnZSBvZiBTT0JFUi0xMjggaXMgdG8gCitrZXkgaXQgZnJvbSB0aGUgb3V0cHV0IG9mIEZvcnR1bmEgKG9yIFlhcnJvdyksIGFuZCB1c2UgaXQgdG8gZW5jcnlwdCBtZXNzYWdlcy4gIEl0IGlzIGFsc28gaWRlYWwgZm9yCiBzaW11bGF0aW9ucyB3aGljaCBuZWVkIGEgaGlnaCBxdWFsaXR5IChhbmQgZmFzdCkgc3RyZWFtIG9mIGJ5dGVzLiAgCiAKIFxzdWJzdWJzZWN0aW9ue0V4YW1wbGUgVXNhZ2V9CkBAIC0yMzQ1LDcgKzI5MjksNyBAQAogICAgICAgZXhpdCgtMSk7CiAgICB9CiAKLSAgIC8qIHVzZSBgYGtleScnIGFzIHRoZSBrZXkgKi8KKyAgIC8qIHVzZSAia2V5IiBhcyB0aGUga2V5ICovCiAgICBpZiAoKGVyciA9IHJjNF9hZGRfZW50cm9weSgia2V5IiwgMywgJnBybmcpKSAhPSBDUllQVF9PSykgewogICAgICAgcHJpbnRmKCJSQzQgYWRkIGVudHJvcHkgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICAgICBleGl0KC0xKTsKQEAgLTIzNjksMzUgKzI5NTMsMzkgQEAKIFxlbmR7c21hbGx9CiBUbyBkZWNyeXB0IHlvdSBoYXZlIHRvIGRvIHRoZSBleGFjdCBzYW1lIHN0ZXBzLiAgCiAKLVxzZWN0aW9ue1RoZSBTZWN1cmUgUk5HfQorXG15c2VjdGlvbntUaGUgU2VjdXJlIFJOR30KIFxpbmRleHtTZWN1cmUgUk5HfQotQW4gUk5HIGlzIHJlbGF0ZWQgdG8gYSBQUk5HIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgZXhwYW5kIGEgc21hbGxlciBzZWVkIHRvIGdldCB0aGUgZGF0YS4gIFRoZXkgZ2VuZXJhdGUgdGhlaXIgcmFuZG9tIGJpdHMKK0FuIFJORyBpcyByZWxhdGVkIHRvIGEgUFJORyBpbiBtYW55IHdheXMsIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGV4cGFuZCBhIHNtYWxsZXIgc2VlZCB0byBnZXQgdGhlIGRhdGEuICBUaGV5IGdlbmVyYXRlIHRoZWlyIHJhbmRvbSBiaXRzCiBieSBwZXJmb3JtaW5nIHNvbWUgY29tcHV0YXRpb24gb24gZnJlc2ggaW5wdXQgYml0cy4gIFBvc3NpYmx5IHRoZSBoYXJkZXN0IHRoaW5nIHRvIGdldCBjb3JyZWN0bHkgaW4gYSBjcnlwdG9zeXN0ZW0gaXMgdGhlIAotUFJORy4gIENvbXB1dGVycyBhcmUgZGV0ZXJtaW5pc3RpYyBiZWFzdHMgdGhhdCB0cnkgaGFyZCBub3QgdG8gc3RyYXkgZnJvbSBwcmUtZGV0ZXJtaW5lZCBwYXRocy4gIFRoYXQgbWFrZXMgZ2F0aGVyaW5nIAotZW50cm9weSBuZWVkZWQgdG8gc2VlZCB0aGUgUFJORyBhIGhhcmQgdGFzay4gIAorUFJORy4gIENvbXB1dGVycyBhcmUgZGV0ZXJtaW5pc3RpYyB0aGF0IHRyeSBoYXJkIG5vdCB0byBzdHJheSBmcm9tIHByZS0tZGV0ZXJtaW5lZCBwYXRocy4gIFRoaXMgbWFrZXMgZ2F0aGVyaW5nIGVudHJvcHkgbmVlZGVkIHRvIHNlZWQgYSBQUk5HIAorYSBoYXJkIHRhc2suICAKIAogVGhlcmUgaXMgb25lIHNtYWxsIGZ1bmN0aW9uIHRoYXQgbWF5IGhlbHAgb24gY2VydGFpbiBwbGF0Zm9ybXM6CiBcaW5kZXh7cm5nXF9nZXRcX2J5dGVzKCl9CiBcYmVnaW57dmVyYmF0aW19Ci11bnNpZ25lZCBsb25nIHJuZ19nZXRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgCi0gICAgICAgICAgICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKK3Vuc2lnbmVkIGxvbmcgcm5nX2dldF9ieXRlcygKKyAgICB1bnNpZ25lZCBjaGFyICpidWYsIAorICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgdm9pZCAgICAgICAgICgqY2FsbGJhY2spKHZvaWQpKTsKIFxlbmR7dmVyYmF0aW19CiAKLVdoaWNoIHdpbGwgdHJ5IG9uZSBvZiB0aHJlZSBtZXRob2RzIG9mIGdldHRpbmcgcmFuZG9tIGRhdGEuICBUaGUgZmlyc3QgaXMgdG8gb3BlbiB0aGUgcG9wdWxhciBgYC9kZXYvcmFuZG9tJycgZGV2aWNlIHdoaWNoIAotb24gbW9zdCAqTklYIHBsYXRmb3JtcyBwcm92aWRlcyBjcnlwdG9ncmFwaGljIHJhbmRvbSBiaXRzXGZvb3Rub3Rle1RoaXMgZGV2aWNlIGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIHRocm91Z2ggdGhlIEN5Z3dpbiBjb21waWxlciBzdWl0ZS4gIEl0IGVtdWxhdGVzIGBgL2Rldi9yYW5kb20nJyB2aWEgdGhlIE1pY3Jvc29mdCBDU1AufS4gIAotVGhlIHNlY29uZCBtZXRob2QgaXMgdG8gdHJ5IHRoZSBNaWNyb3NvZnQgQ3J5cHRvZ3JhcGhpYyBTZXJ2aWNlIFByb3ZpZGVyIGFuZCByZWFkIHRoZSBSTkcuICBUaGUgdGhpcmQgbWV0aG9kIGlzIGFuIEFOU0kgQyAKLWNsb2NrIGRyaWZ0IG1ldGhvZCB0aGF0IGlzIGFsc28gc29tZXdoYXQgcG9wdWxhciBidXQgZ2l2ZXMgYml0cyBvZiBsb3dlciBlbnRyb3B5LiAgVGhlIGBgY2FsbGJhY2snJyBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHZvaWQuICBJdHMgdXNlZCB3aGVuIHRoZSBzbG93ZXIgQU5TSSBDIFJORyBtdXN0IGJlIAotdXNlZCBzbyB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBjYW4gc3RpbGwgd29yay4gIFRoaXMgaXMgdXNlZnVsIHNpbmNlIHRoZSBBTlNJIEMgUk5HIGhhcyBhIHRocm91Z2hwdXQgb2YgdGhyZWUgCi1ieXRlcyBhIHNlY29uZC4gIFRoZSBjYWxsYmFjayBwb2ludGVyIG1heSBiZSBzZXQgdG8ge1xiZiBOVUxMfSB0byBhdm9pZCB1c2luZyBpdCBpZiB5b3UgZG9uJ3Qgd2FudCB0by4gIFRoZSBmdW5jdGlvbiAKLXJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkIGZyb20gYW55IFJORyBzb3VyY2UuICBUaGVyZSBpcyBhIGZ1bmN0aW9uIHRvIGhlbHAgc2V0dXAgYSBQUk5HIGFzIHdlbGw6CitXaGljaCB3aWxsIHRyeSBvbmUgb2YgdGhyZWUgbWV0aG9kcyBvZiBnZXR0aW5nIHJhbmRvbSBkYXRhLiAgVGhlIGZpcnN0IGlzIHRvIG9wZW4gdGhlIHBvcHVsYXIgXHRleHRpdHsvZGV2L3JhbmRvbX0gZGV2aWNlIHdoaWNoIAorb24gbW9zdCAqTklYIHBsYXRmb3JtcyBwcm92aWRlcyBjcnlwdG9ncmFwaGljIHJhbmRvbSBiaXRzXGZvb3Rub3Rle1RoaXMgZGV2aWNlIGlzIGF2YWlsYWJsZSBpbiBXaW5kb3dzIHRocm91Z2ggdGhlIEN5Z3dpbiBjb21waWxlciBzdWl0ZS4gIEl0IGVtdWxhdGVzIFx0ZXh0aXR7L2Rldi9yYW5kb219IHZpYSB0aGUgTWljcm9zb2Z0IENTUC59LiAgCitUaGUgc2Vjb25kIG1ldGhvZCBpcyB0byB0cnkgdGhlIE1pY3Jvc29mdCBDcnlwdG9ncmFwaGljIFNlcnZpY2UgUHJvdmlkZXIsIGFuZCByZWFkIHRoZSBSTkcuICBUaGUgdGhpcmQgbWV0aG9kIGlzIGFuIEFOU0kgQyAKK2Nsb2NrIGRyaWZ0IG1ldGhvZCB0aGF0IGlzIGFsc28gc29tZXdoYXQgcG9wdWxhciBidXQgZ2l2ZXMgYml0cyBvZiBsb3dlciBlbnRyb3B5LiAgVGhlIFx0ZXh0aXR7Y2FsbGJhY2t9IHBhcmFtZXRlciBpcyBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdm9pZC4gIEl0IGlzIAordXNlZCB3aGVuIHRoZSBzbG93ZXIgQU5TSSBDIFJORyBtdXN0IGJlIHVzZWQgc28gdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gY2FuIHN0aWxsIHdvcmsuICBUaGlzIGlzIHVzZWZ1bCBzaW5jZSB0aGUgQU5TSSBDIFJORyBoYXMgYSB0aHJvdWdocHV0IG9mIHJvdWdobHkgdGhyZWUgCitieXRlcyBhIHNlY29uZC4gIFRoZSBjYWxsYmFjayBwb2ludGVyIG1heSBiZSBzZXQgdG8ge1xiZiBOVUxMfSB0byBhdm9pZCB1c2luZyBpdCBpZiB5b3UgZG8gbm90IHdhbnQgdG8uICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgZnJvbSAKK2FueSBSTkcgc291cmNlLiAgVGhlcmUgaXMgYSBmdW5jdGlvbiB0byBoZWxwIHNldHVwIGEgUFJORyBhcyB3ZWxsOgogXGluZGV4e3JuZ1xfbWFrZVxfcHJuZygpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IHJuZ19tYWtlX3BybmcoaW50IGJpdHMsIGludCB3cHJuZywgcHJuZ19zdGF0ZSAqcHJuZywgCi0gICAgICAgICAgICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKK2ludCBybmdfbWFrZV9wcm5nKCAgICAgICBpbnQgIGJpdHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd3BybmcsIAorICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCkpOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgd2lsbCB0cnkgdG8gc2V0dXAgdGhlIHBybmcgd2l0aCBhIHN0YXRlIG9mIGF0IGxlYXN0IGBgYml0cycnIG9mIGVudHJvcHkuICBUaGUgYGBjYWxsYmFjaycnIHBhcmFtZXRlciB3b3JrcyBtdWNoIGxpa2UKLXRoZSBjYWxsYmFjayBpbiBgYHJuZ1xfZ2V0XF9ieXRlcygpJycuICBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gc2V0dXAgeW91ciBQUk5HcyB1bmxlc3MgeW91IGhhdmUgYQotcGxhdGZvcm0gd2hlcmUgdGhlIFJORyBkb2Vzbid0IHdvcmsgd2VsbC4gIEV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBnaXZlbiBiZWxvdy4KK1RoaXMgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSB0aGUgcHJuZyB3aXRoIGEgc3RhdGUgb2YgYXQgbGVhc3QgXHRleHRpdHtiaXRzfSBvZiBlbnRyb3B5LiAgVGhlIFx0ZXh0aXR7Y2FsbGJhY2t9IHBhcmFtZXRlciB3b3JrcyBtdWNoIGxpa2UKK3RoZSBjYWxsYmFjayBpbiBcdGV4dGl0e3JuZ1xfZ2V0XF9ieXRlcygpfS4gIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGhpcyBmdW5jdGlvbiB0byBzZXR1cCB5b3VyIFBSTkdzIHVubGVzcyB5b3UgaGF2ZSBhCitwbGF0Zm9ybSB3aGVyZSB0aGUgUk5HIGRvZXMgbm90IHdvcmsgd2VsbC4gIEV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBnaXZlbiBiZWxvdzoKIAogXGJlZ2lue3NtYWxsfQogXGJlZ2lue3ZlcmJhdGltfQpAQCAtMjQxNSwxMyArMzAwMywxNSBAQAogICAgfQogCiAgICAvKiBzZXR1cCB0aGUgUFJORyAqLwotICAgaWYgKChlcnIgPSBybmdfbWFrZV9wcm5nKDEyOCwgZmluZF9wcm5nKCJ5YXJyb3ciKSwgJnBybmcsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgaWYgKChlcnIgPSBybmdfbWFrZV9wcm5nKDEyOCwgZmluZF9wcm5nKCJ5YXJyb3ciKSwgJnBybmcsIE5VTEwpKSAKKyAgICAgICAhPSBDUllQVF9PSykgewogICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIHVwIFBSTkcsICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICAgICByZXR1cm4gLTE7CiAgICB9CiAKICAgIC8qIG1ha2UgYSAxOTItYml0IEVDQyBrZXkgKi8KLSAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5KCZwcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCAyNCwgJm15a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5KCZwcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCAyNCwgJm15a2V5KSkgCisgICAgICAgIT0gQ1JZUFRfT0spIHsKICAgICAgIHByaW50ZigiRXJyb3IgbWFraW5nIGtleTogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgIHJldHVybiAtMTsKICAgIH0KQEAgLTI0MzEsOSArMzAyMSw5IEBACiBcZW5ke3NtYWxsfQogCiBcc3Vic2VjdGlvbntUaGUgU2VjdXJlIFBSTkcgSW50ZXJmYWNlfQotSXQgaXMgcG9zc2libGUgdG8gYWNjZXNzIHRoZSBzZWN1cmUgUk5HIHRocm91Z2ggdGhlIFBSTkcgaW50ZXJmYWNlIGFuZCBpbiB0dXJuIHVzZSBpdCB3aXRoaW4gZGVwZW5kZW50IGZ1bmN0aW9ucyBzdWNoCitJdCBpcyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHNlY3VyZSBSTkcgdGhyb3VnaCB0aGUgUFJORyBpbnRlcmZhY2UsIGFuZCBpbiB0dXJuIHVzZSBpdCB3aXRoaW4gZGVwZW5kZW50IGZ1bmN0aW9ucyBzdWNoCiBhcyB0aGUgUEsgQVBJLiAgVGhpcyBzaW1wbGlmaWVzIHRoZSBjcnlwdG9zeXN0ZW0gb24gcGxhdGZvcm1zIHdoZXJlIHRoZSBzZWN1cmUgUk5HIGlzIGZhc3QuICBUaGUgc2VjdXJlIFBSTkcgbmV2ZXIgCi1yZXF1aXJlcyB0byBiZSBzdGFydGVkLCB0aGF0IGlzIHlvdSBuZWVkIG5vdCBjYWxsIHRoZSBzdGFydCwgYWRkXF9lbnRyb3B5IG9yIHJlYWR5IGZ1bmN0aW9ucy4gIEZvciBleGFtcGxlLCBjb25zaWRlcgorcmVxdWlyZXMgdG8gYmUgc3RhcnRlZCwgdGhhdCBpcyB5b3UgbmVlZCBub3QgY2FsbCB0aGUgc3RhcnQsIGFkZFxfZW50cm9weSwgb3IgcmVhZHkgZnVuY3Rpb25zLiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyCiB0aGUgcHJldmlvdXMgZXhhbXBsZSB1c2luZyB0aGlzIFBSTkcuCiAKIFxiZWdpbntzbWFsbH0KQEAgLTI0NTEsNyArMzA0MSw4IEBACiAgICB9CiAKICAgIC8qIG1ha2UgYSAxOTItYml0IEVDQyBrZXkgKi8KLSAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5KE5VTEwsIGZpbmRfcHJuZygic3BybmciKSwgMjQsICZteWtleSkpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IGVjY19tYWtlX2tleShOVUxMLCBmaW5kX3BybmcoInNwcm5nIiksIDI0LCAmbXlrZXkpKSAKKyAgICAgICAhPSBDUllQVF9PSykgewogICAgICAgcHJpbnRmKCJFcnJvciBtYWtpbmcga2V5OiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgcmV0dXJuIC0xOwogICAgfQpAQCAtMjQ2MCw0MyArMzA1MSw5MiBAQAogXGVuZHt2ZXJiYXRpbX0KIFxlbmR7c21hbGx9CiAKLQotCiBcY2hhcHRlcntSU0EgUHVibGljIEtleSBDcnlwdG9ncmFwaHl9CiAKLVxzZWN0aW9ue0ludHJvZHVjdGlvbn0KK1xteXNlY3Rpb257SW50cm9kdWN0aW9ufQogUlNBIHdyb3RlIHRoZSBQS0NTIFwjMSBzcGVjaWZpY2F0aW9ucyB3aGljaCBkZXRhaWwgUlNBIFB1YmxpYyBLZXkgQ3J5cHRvZ3JhcGh5LiAgSW4gdGhlIHNwZWNpZmljYXRpb25zIGFyZQotcGFkZGluZyBhbGdvcml0aG1zIGZvciBlbmNyeXB0aW9uIGFuZCBzaWduYXR1cmVzLiAgVGhlIHN0YW5kYXJkIGluY2x1ZGVzIHRoZSBgYHYyLjEnJyBhbGdvcml0aG1zLgotVG8gc2ltcGxpZnkgbWF0dGVycyBhIGxpdHRsZSB0aGUgdjIuMSBlbmNyeXB0aW9uIGFuZCBzaWduYXR1cmUgcGFkZGluZyBhbGdvcml0aG1zIGFyZSBjYWxsZWQgT0FFUCBhbmQgUFNTIAotcmVzcGVjdGl2ZWx5LiAgCitwYWRkaW5nIGFsZ29yaXRobXMgZm9yIGVuY3J5cHRpb24gYW5kIHNpZ25hdHVyZXMuICBUaGUgc3RhbmRhcmQgaW5jbHVkZXMgdGhlIFx0ZXh0aXR7djEuNX0gYW5kIFx0ZXh0aXR7djIuMX0gYWxnb3JpdGhtcy4KK1RvIHNpbXBsaWZ5IG1hdHRlcnMgYSBsaXR0bGUgdGhlIHYyLjEgZW5jcnlwdGlvbiBhbmQgc2lnbmF0dXJlIHBhZGRpbmcgYWxnb3JpdGhtcyBhcmUgY2FsbGVkIE9BRVAgYW5kIFBTUyByZXNwZWN0aXZlbHkuICAKIAotXHNlY3Rpb257UEtDUyBcIzEgRW5jcnlwdGlvbn0KK1xteXNlY3Rpb257UEtDUyBcIzEgUGFkZGluZ30KK1BLQ1MgXCMxIHYxLjUgcGFkZGluZyBpcyBzbyBzaW1wbGUgdGhhdCBib3RoIHNpZ25hdHVyZSBhbmQgZW5jcnlwdGlvbiBwYWRkaW5nIGFyZSBwZXJmb3JtZWQgYnkgdGhlIHNhbWUgZnVuY3Rpb24uICBOb3RlOiB0aGUKK3NpZ25hdHVyZSBwYWRkaW5nIGRvZXMgXHRleHRiZntub3R9IGluY2x1ZGUgdGhlIEFTTi4xIHBhZGRpbmcgcmVxdWlyZWQuICBUaGF0IGlzIHBlcmZvcm1lZCBieSB0aGUgcnNhXF9zaWduXF9oYXNoXF9leCgpIGZ1bmN0aW9uCitkb2N1bWVudGVkIGxhdGVyIG9uIGluIHRoaXMgY2hhcHRlci4gIAogCitcc3Vic2VjdGlvbntQS0NTIFwjMSB2MS41IEVuY29kaW5nfQorVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBwZXJmb3JtcyBQS0NTIFwjMSB2MS41IHBhZGRpbmc6CitcaW5kZXh7cGtjc1xfMVxfdjFcXzVcX2VuY29kZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHBrY3NfMV92MV81X2VuY29kZSgKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICBibG9ja190eXBlLAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLAorICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICBpbnQgIHBybmdfaWR4LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBlbmNvZGUgdGhlIG1lc3NhZ2UgcG9pbnRlZCB0byBieSBcdGV4dGl0e21zZ30gb2YgbGVuZ3RoIFx0ZXh0aXR7bXNnbGVufSBvY3RldHMuICBUaGUgXHRleHRpdHtibG9ja1xfdHlwZX0gcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvCitcdGV4dGJme0xUQ1xfUEtDU1xfMVxfRU1FfSB0byBwZXJmb3JtIGVuY3J5cHRpb24gcGFkZGluZy4gIEl0IG11c3QgYmUgc2V0IHRvIFx0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9FTVNBfSB0byBwZXJmb3JtIHNpZ25hdHVyZSBwYWRkaW5nLiAgVGhlIFx0ZXh0aXR7bW9kdWx1c1xfYml0bGVufSAKK3BhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgbW9kdWx1cyBpbiBiaXRzLiAgVGhlIHBhZGRlZCBkYXRhIGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0gd2l0aCBhIGxlbmd0aCBvZiBcdGV4dGl0e291dGxlbn0gb2N0ZXRzLiAgVGhlIG91dHB1dCB3aWxsIG5vdCBiZSAKK2xvbmdlciB0aGFuIHRoZSBtb2R1bHVzIHdoaWNoIGhlbHBzIGFsbG9jYXRlIHRoZSBjb3JyZWN0IG91dHB1dCBidWZmZXIgc2l6ZS4KKworT25seSBlbmNyeXB0aW9uIHBhZGRpbmcgcmVxdWlyZXMgYSBQUk5HLiAgV2hlbiBwZXJmb3JtaW5nIHNpZ25hdHVyZSBwYWRkaW5nIHRoZSBcdGV4dGl0e3BybmdcX2lkeH0gcGFyYW1ldGVyIG1heSBiZSBsZWZ0IHRvIHplcm8gYXMgaXQgaXMgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LgorCitcc3Vic2VjdGlvbntQS0NTIFwjMSB2MS41IERlY29kaW5nfQorVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBwZXJmb3JtcyBQS0NTIFwjMSB2MS41IGRlLS1wYWRkaW5nOgorXGluZGV4e3BrY3NcXzFcX3YxXF81XF9kZWNvZGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBwa2NzXzFfdjFfNV9kZWNvZGUoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgYmxvY2tfdHlwZSwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2R1bHVzX2JpdGxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICppc192YWxpZCk7CitcZW5ke3ZlcmJhdGltfQorXGluZGV4e0xUQ1xfUEtDU1xfMVxfRU1FfSBcaW5kZXh7TFRDXF9QS0NTXF8xXF9FTVNBfQorVGhpcyB3aWxsIHJlbW92ZSB0aGUgUEtDUyBwYWRkaW5nIGRhdGEgcG9pbnRlZCB0byBieSBcdGV4dGl0e21zZ30gb2YgbGVuZ3RoIFx0ZXh0aXR7bXNnbGVufS4gIFRoZSBkZWNvZGVkIGRhdGEgaXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGgKK1x0ZXh0aXR7b3V0bGVufS4gIElmIHRoZSBwYWRkaW5nIGlzIHZhbGlkLCBhIDEgaXMgc3RvcmVkIGluIFx0ZXh0aXR7aXNcX3ZhbGlkfSwgb3RoZXJ3aXNlLCBhIDAgaXMgc3RvcmVkLiAgVGhlIFx0ZXh0aXR7YmxvY2tcX3R5cGV9IHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBlaXRoZXIKK1x0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9FTUV9IG9yIFx0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9FTVNBfSBkZXBlbmRpbmcgb24gd2hldGhlciBlbmNyeXB0aW9uIG9yIHNpZ25hdHVyZSBwYWRkaW5nIGlzIGJlaW5nIHJlbW92ZWQuCisKK1xteXNlY3Rpb257UEtDUyBcIzEgdjIuMSBFbmNyeXB0aW9ufQogUEtDUyBcIzEgUlNBIEVuY3J5cHRpb24gYW1vdW50cyB0byBPQUVQIHBhZGRpbmcgb2YgdGhlIGlucHV0IG1lc3NhZ2UgZm9sbG93ZWQgYnkgdGhlIG1vZHVsYXIgZXhwb25lbnRpYXRpb24uICBBcyBmYXIgYXMgdGhpcyBwb3J0aW9uIG9mCiB0aGUgbGlicmFyeSBpcyBjb25jZXJuZWQgd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIHRoIE9BRVAgcGFkZGluZyBvZiB0aGUgbWVzc2FnZS4KIAogXHN1YnNlY3Rpb257T0FFUCBFbmNvZGluZ30KIAorVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBwZXJmb3JtcyBQS0NTIFwjMSB2Mi4xIGVuY3J5cHRpb24gcGFkZGluZzoKKwogXGluZGV4e3BrY3NcXzFcX29hZXBcX2VuY29kZSgpfQogXGJlZ2lue2FsbHR0fQotaW50IHBrY3NfMV9vYWVwX2VuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csICAgIHVuc2lnbmVkIGxvbmcgbXNnbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBwcm5nX3N0YXRlICpwcm5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHBybmdfaWR4LCAgICAgICAgIGludCAgaGFzaF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBwa2NzXzFfb2FlcF9lbmNvZGUoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sIAorICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsCisgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHthbGx0dH0KIAotVGhpcyBhY2NlcHRzIGBgbXNnJycgYXMgaW5wdXQgb2YgbGVuZ3RoIGBgbXNnbGVuJycgd2hpY2ggd2lsbCBiZSBPQUVQIHBhZGRlZC4gIFRoZSBgYGxwYXJhbScnIHZhcmlhYmxlIGlzIGFuIGFkZGl0aW9uYWwgc3lzdGVtIHNwZWNpZmljCitUaGlzIGFjY2VwdHMgXHRleHRpdHttc2d9IGFzIGlucHV0IG9mIGxlbmd0aCBcdGV4dGl0e21zZ2xlbn0gd2hpY2ggd2lsbCBiZSBPQUVQIHBhZGRlZC4gIFRoZSBcdGV4dGl0e2xwYXJhbX0gdmFyaWFibGUgaXMgYW4gYWRkaXRpb25hbCBzeXN0ZW0gc3BlY2lmaWMKIHRhZyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBlbmNvZGluZy4gIFRoaXMgaXMgdXNlZnVsIHRvIGlkZW50aWZ5IHdoaWNoIHN5c3RlbSBlbmNvZGVkIHRoZSBtZXNzYWdlLiAgSWYgbm8gdmFyaWFuY2UgaXMgZGVzaXJlZCB0aGVuCi1gYGxwYXJhbScnIGNhbiBiZSBzZXQgdG8gXHRleHRiZntOVUxMfS4gIAorXHRleHRpdHtscGFyYW19IGNhbiBiZSBzZXQgdG8gXHRleHRiZntOVUxMfS4gIAogCiBPQUVQIGVuY29kaW5nIHJlcXVpcmVzIHRoZSBsZW5ndGggb2YgdGhlIG1vZHVsdXMgaW4gYml0cyBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG91dHB1dC4gIFRoaXMgaXMgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIKLWBgbW9kdWx1c1xfYml0bGVuJycuICBgYGhhc2hcX2lkeCcnIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIGhhc2ggZGVzaXJlZC4gIFBLQ1MgXCMxIGFsbG93cyBhbnkgaGFzaCB0byBiZSAKK1x0ZXh0aXR7bW9kdWx1c1xfYml0bGVufS4gIFx0ZXh0aXR7aGFzaFxfaWR4fSBpcyB0aGUgaW5kZXggaW50byB0aGUgaGFzaCBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoIGRlc2lyZWQuICBQS0NTIFwjMSBhbGxvd3MgYW55IGhhc2ggdG8gYmUgCiB1c2VkIGJ1dCBib3RoIHRoZSBlbmNvZGVyIGFuZCBkZWNvZGVyIG11c3QgdXNlIHRoZSBzYW1lIGhhc2ggaW4gb3JkZXIgZm9yIHRoaXMgdG8gc3VjY2VlZC4gIFRoZSBzaXplIG9mIGhhc2ggb3V0cHV0IGFmZmVjdHMgdGhlIG1heGltdW0KLSBzaXplZCBpbnB1dCBtZXNzYWdlLiAgYGBwcm5nXF9pZHgnJyBhbmQgYGBwcm5nJycgYXJlIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhcmd1bWVudHMgcmVxdWlyZWQgdG8gcmFuZG9taXplIHRoZSBwYWRkaW5nIHByb2Nlc3MuICAKLVRoZSBwYWRkZWQgbWVzc2FnZSBpcyBzdG9yZWQgaW4gYGBvdXQnJyBhbG9uZyB3aXRoIHRoZSBsZW5ndGggaW4gYGBvdXRsZW4nJy4KKyBzaXplZCBpbnB1dCBtZXNzYWdlLiAgXHRleHRpdHtwcm5nXF9pZHh9IGFuZCBcdGV4dGl0e3Bybmd9IGFyZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYXJndW1lbnRzIHJlcXVpcmVkIHRvIHJhbmRvbWl6ZSB0aGUgcGFkZGluZyBwcm9jZXNzLiAgCitUaGUgcGFkZGVkIG1lc3NhZ2UgaXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fSBhbG9uZyB3aXRoIHRoZSBsZW5ndGggaW4gXHRleHRpdHtvdXRsZW59LgogCi1JZiAkaCQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGFzaCBhbmQgJG0kIHRoZSBsZW5ndGggb2YgdGhlIG1vZHVsdXMgKGJvdGggaW4gb2N0ZXRzKSB0aGVuIHRoZSBtYXhpbXVtIHBheWxvYWQgZm9yIGBgbXNnJycgaXMgCitJZiAkaCQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGFzaCBhbmQgJG0kIHRoZSBsZW5ndGggb2YgdGhlIG1vZHVsdXMgKGJvdGggaW4gb2N0ZXRzKSB0aGVuIHRoZSBtYXhpbXVtIHBheWxvYWQgZm9yIFx0ZXh0aXR7bXNnfSBpcyAKICRtIC0gMmggLSAyJC4gIEZvciBleGFtcGxlLCB3aXRoIGEgJDEwMjQkLS1iaXQgUlNBIGtleSBhbmQgU0hBLS0xIGFzIHRoZSBoYXNoIHRoZSBtYXhpbXVtIHBheWxvYWQgaXMgJDg2JCBieXRlcy4gIAogCiBOb3RlIHRoYXQgd2hlbiB0aGUgbWVzc2FnZSBpcyBwYWRkZWQgaXQgc3RpbGwgaGFzIG5vdCBiZWVuIFJTQSBlbmNyeXB0ZWQuICBZb3UgbXVzdCBwYXNzIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbiB0byAKQEAgLTI1MDYsNDMgKzMxNDYsNTMgQEAKIAogXGluZGV4e3BrY3NcXzFcX29hZXBcX2RlY29kZSgpfQogXGJlZ2lue2FsbHR0fQotaW50IHBrY3NfMV9vYWVwX2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csICAgIHVuc2lnbmVkIGxvbmcgbXNnbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBpbnQgaGFzaF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpyZXMpOworaW50IHBrY3NfMV9vYWVwX2RlY29kZSgKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2csICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2xlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxwYXJhbWxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2R1bHVzX2JpdGxlbiwgCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAqcmVzKTsKIFxlbmR7YWxsdHR9CiAKLVRoaXMgZnVuY3Rpb24gZGVjb2RlcyBhbiBPQUVQIGVuY29kZWQgbWVzc2FnZSBhbmQgb3V0cHV0cyB0aGUgb3JpZ2luYWwgbWVzc2FnZSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIE9BRVAgZW5jb2Rlci4gIGBgbXNnJycgaXMgdGhlIAotb3V0cHV0IG9mIHBrY3NcXzFcX29hZXBcX2VuY29kZSgpIG9mIGxlbmd0aCBgYG1zZ2xlbicnLiAgYGBscGFyYW0nJyBpcyB0aGUgc2FtZSBzeXN0ZW0gdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBPQUVQIGVuY29kZXIuICBJZiBpdCBkb2VzIG5vdAotbWF0Y2ggd2hhdCB3YXMgdXNlZCBkdXJpbmcgZW5jb2RpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkZWNvZGUgdGhlIHBhY2tldC4gIGBgbW9kdWx1c1xfYml0bGVuJycgaXMgdGhlIHNpemUgb2YgdGhlIFJTQSBtb2R1bHVzIGluIGJpdHMKLWFuZCBtdXN0IG1hdGNoIHdoYXQgd2FzIHVzZWQgZHVyaW5nIGVuY29kaW5nLiAgU2ltaWxhcmx5IHRoZSBgYGhhc2hcX2lkeCcnIGluZGV4IGludG8gdGhlIGhhc2ggZGVzY3JpcHRvciB0YWJsZSBtdXN0IG1hdGNoIHdoYXQgd2FzIHVzZWQKK1RoaXMgZnVuY3Rpb24gZGVjb2RlcyBhbiBPQUVQIGVuY29kZWQgbWVzc2FnZSBhbmQgb3V0cHV0cyB0aGUgb3JpZ2luYWwgbWVzc2FnZSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIE9BRVAgZW5jb2Rlci4gIFx0ZXh0aXR7bXNnfSBpcyB0aGUgCitvdXRwdXQgb2YgcGtjc1xfMVxfb2FlcFxfZW5jb2RlKCkgb2YgbGVuZ3RoIFx0ZXh0aXR7bXNnbGVufS4gIFx0ZXh0aXR7bHBhcmFtfSBpcyB0aGUgc2FtZSBzeXN0ZW0gdmFyaWFibGUgcGFzc2VkIHRvIHRoZSBPQUVQIGVuY29kZXIuICBJZiBpdCBkb2VzIG5vdAorbWF0Y2ggd2hhdCB3YXMgdXNlZCBkdXJpbmcgZW5jb2RpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkZWNvZGUgdGhlIHBhY2tldC4gIFx0ZXh0aXR7bW9kdWx1c1xfYml0bGVufSBpcyB0aGUgc2l6ZSBvZiB0aGUgUlNBIG1vZHVsdXMgaW4gYml0cworYW5kIG11c3QgbWF0Y2ggd2hhdCB3YXMgdXNlZCBkdXJpbmcgZW5jb2RpbmcuICBTaW1pbGFybHkgdGhlIFx0ZXh0aXR7aGFzaFxfaWR4fSBpbmRleCBpbnRvIHRoZSBoYXNoIGRlc2NyaXB0b3IgdGFibGUgbXVzdCBtYXRjaCB3aGF0IHdhcyB1c2VkCiBkdXJpbmcgZW5jb2RpbmcuCiAKLUlmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBpdCBkZWNvZGVzIHRoZSBPQUVQIGVuY29kZWQgbWVzc2FnZSBpbnRvIGBgb3V0Jycgb2YgbGVuZ3RoIGBgb3V0bGVuJycgYW5kIHN0b3JlcyBhIAotJDEkIGluIGBgcmVzJycuICBJZiB0aGUgcGFja2V0IGlzIGludmFsaWQgaXQgc3RvcmVzICQwJCBpbiBgYHJlcycnIGFuZCBpZiB0aGUgZnVuY3Rpb24gZmFpbHMgZm9yIGFub3RoZXIgcmVhc29uCitJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgaXQgZGVjb2RlcyB0aGUgT0FFUCBlbmNvZGVkIG1lc3NhZ2UgaW50byBcdGV4dGl0e291dH0gb2YgbGVuZ3RoIFx0ZXh0aXR7b3V0bGVufSBhbmQgc3RvcmVzIGEgCiskMSQgaW4gXHRleHRpdHtyZXN9LiAgSWYgdGhlIHBhY2tldCBpcyBpbnZhbGlkIGl0IHN0b3JlcyAkMCQgaW4gXHRleHRpdHtyZXN9IGFuZCBpZiB0aGUgZnVuY3Rpb24gZmFpbHMgZm9yIGFub3RoZXIgcmVhc29uCiBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuICAKIAotXHNlY3Rpb257UEtDUyBcIzEgRGlnaXRhbCBTaWduYXR1cmVzfQorXG15c2VjdGlvbntQS0NTIFwjMSBEaWdpdGFsIFNpZ25hdHVyZXN9CiAKIFxzdWJzZWN0aW9ue1BTUyBFbmNvZGluZ30KIFBTUyBlbmNvZGluZyBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIFBLQ1MgXCMxIHN0YW5kYXJkIHdoaWNoIGlzIHBhZGRpbmcgdG8gYmUgYXBwbGllZCB0byBtZXNzYWdlcyB0aGF0IGFyZSBzaWduZWQuICAKIAogXGluZGV4e3BrY3NcXzFcX3Bzc1xfZW5jb2RlKCl9CiBcYmVnaW57YWxsdHR9Ci1pbnQgcGtjc18xX3Bzc19lbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnaGFzaCwgdW5zaWduZWQgbG9uZyBtc2doYXNobGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2FsdGxlbiwgIHBybmdfc3RhdGUgICAqcHJuZywgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgcHJuZ19pZHgsIGludCAgICAgICAgICAgaGFzaF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IHBrY3NfMV9wc3NfZW5jb2RlKAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZ2hhc2gsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2hhc2hsZW4sCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwgIAorICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwgCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHthbGx0dH0KIAotVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBtZXNzYWdlIHRvIGJlIFBTUyBlbmNvZGVkIGhhcyBwcmV2aW91c2x5IGJlZW4gaGFzaGVkLiAgVGhlIGlucHV0IGhhc2ggYGBtc2doYXNoJycgaXMgb2YgbGVuZ3RoIAotYGBtc2doYXNobGVuJycuICBQU1MgYWxsb3dzIGEgdmFyaWFibGUgbGVuZ3RoIHJhbmRvbSBzYWx0IChpdCBjYW4gYmUgemVybyBsZW5ndGgpIHRvIGJlIGludHJvZHVjZWQgaW4gdGhlIHNpZ25hdHVyZSBwcm9jZXNzLiAgCi1gYGhhc2hcX2lkeCcnIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIGhhc2ggdG8gdXNlLiAgYGBwcm5nXF9pZHgnJyBhbmQgYGBwcm5nJycgYXJlIHRoZSByYW5kb20KK1RoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgbWVzc2FnZSB0byBiZSBQU1MgZW5jb2RlZCBoYXMgcHJldmlvdXNseSBiZWVuIGhhc2hlZC4gIFRoZSBpbnB1dCBoYXNoIFx0ZXh0aXR7bXNnaGFzaH0gaXMgb2YgbGVuZ3RoIAorXHRleHRpdHttc2doYXNobGVufS4gIFBTUyBhbGxvd3MgYSB2YXJpYWJsZSBsZW5ndGggcmFuZG9tIHNhbHQgKGl0IGNhbiBiZSB6ZXJvIGxlbmd0aCkgdG8gYmUgaW50cm9kdWNlZCBpbiB0aGUgc2lnbmF0dXJlIHByb2Nlc3MuICAKK1x0ZXh0aXR7aGFzaFxfaWR4fSBpcyB0aGUgaW5kZXggaW50byB0aGUgaGFzaCBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoIHRvIHVzZS4gIFx0ZXh0aXR7cHJuZ1xfaWR4fSBhbmQgXHRleHRpdHtwcm5nfSBhcmUgdGhlIHJhbmRvbQogbnVtYmVyIGdlbmVyYXRvciBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgdGhlIHNhbHQuCiAKLVNpbWlsYXIgdG8gT0FFUCBlbmNvZGluZyBgYG1vZHVsdXNcX2JpdGxlbicnIGlzIHRoZSBzaXplIG9mIHRoZSBSU0EgbW9kdWx1cyAoaW4gYml0cykuICBJdCBsaW1pdHMgdGhlIHNpemUgb2YgdGhlIHNhbHQuICBJZiAkbSQgaXMgdGhlIGxlbmd0aAorU2ltaWxhciB0byBPQUVQIGVuY29kaW5nIFx0ZXh0aXR7bW9kdWx1c1xfYml0bGVufSBpcyB0aGUgc2l6ZSBvZiB0aGUgUlNBIG1vZHVsdXMgKGluIGJpdHMpLiAgSXQgbGltaXRzIHRoZSBzaXplIG9mIHRoZSBzYWx0LiAgSWYgJG0kIGlzIHRoZSBsZW5ndGgKIG9mIHRoZSBtb2R1bHVzICRoJCB0aGUgbGVuZ3RoIG9mIHRoZSBoYXNoIG91dHB1dCAoaW4gb2N0ZXRzKSB0aGVuIHRoZXJlIGNhbiBiZSAkbSAtIGggLSAyJCBieXRlcyBvZiBzYWx0LiAgCiAKIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWN0dWFsbHkgc2lnbiB0aGUgZGF0YSBpdCBtZXJlbHkgcGFkcyB0aGUgaGFzaCBvZiBhIG1lc3NhZ2Ugc28gdGhhdCBpdCBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHJzYVxfZXhwdG1vZCgpLgpAQCAtMjU1MywyNSArMzIwMywzMCBAQAogCiBcaW5kZXh7cGtjc1xfMVxfcHNzXF9kZWNvZGUoKX0KIFxiZWdpbnthbGx0dH0KLWludCBwa2NzXzFfcHNzX2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2doYXNoLCB1bnNpZ25lZCBsb25nIG1zZ2hhc2hsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgICAgdW5zaWduZWQgbG9uZyBzaWdsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzYWx0bGVuLCAgaW50ICAgICAgICAgICBoYXNoX2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBpbnQgICAgKnJlcyk7CitpbnQgcGtjc18xX3Bzc19kZWNvZGUoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnaGFzaCwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbXNnaGFzaGxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNpZ2xlbiwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICpyZXMpOwogXGVuZHthbGx0dH0KLVRoaXMgd2lsbCBkZWNvZGUgdGhlIFBTUyBlbmNvZGVkIG1lc3NhZ2UgaW4gYGBzaWcnJyBvZiBsZW5ndGggYGBzaWdsZW4nJyBhbmQgY29tcGFyZSBpdCB0byB2YWx1ZXMgaW4gYGBtc2doYXNoJycgb2YgbGVuZ3RoCi1gYG1zZ2hhc2hsZW4nJy4gIElmIHRoZSBibG9jayBpcyBhIHZhbGlkIFBTUyBibG9jayBhbmQgdGhlIGRlY29kZWQgaGFzaCBlcXVhbHMgdGhlIGhhc2ggc3VwcGxpZWQgYGByZXMnJyBpcyBzZXQgdG8gbm9uLS16ZXJvLiAgT3RoZXJ3aXNlLCAKK1RoaXMgd2lsbCBkZWNvZGUgdGhlIFBTUyBlbmNvZGVkIG1lc3NhZ2UgaW4gXHRleHRpdHtzaWd9IG9mIGxlbmd0aCBcdGV4dGl0e3NpZ2xlbn0gYW5kIGNvbXBhcmUgaXQgdG8gdmFsdWVzIGluIFx0ZXh0aXR7bXNnaGFzaH0gb2YgbGVuZ3RoCitcdGV4dGl0e21zZ2hhc2hsZW59LiAgSWYgdGhlIGJsb2NrIGlzIGEgdmFsaWQgUFNTIGJsb2NrIGFuZCB0aGUgZGVjb2RlZCBoYXNoIGVxdWFscyB0aGUgaGFzaCBzdXBwbGllZCBcdGV4dGl0e3Jlc30gaXMgc2V0IHRvIG5vbi0temVyby4gIE90aGVyd2lzZSwgCiBpdCBpcyBzZXQgdG8gemVyby4gIFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBhcyBpbiB0aGUgUFNTIGVuY29kZSBjYWxsLgogCi1JdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIHNhbWUgYGBzYWx0bGVuJycgYW5kIGhhc2ggZm9yIGJvdGggZW5jb2RpbmcgYW5kIGRlY29kaW5nIGFzIG90aGVyd2lzZSB0aGUgcHJvY2VkdXJlIHdpbGwgbm90IHdvcmsuCitJdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIHNhbWUgXHRleHRpdHtzYWx0bGVufSBhbmQgaGFzaCBmb3IgYm90aCBlbmNvZGluZyBhbmQgZGVjb2RpbmcgYXMgb3RoZXJ3aXNlIHRoZSBwcm9jZWR1cmUgd2lsbCBub3Qgd29yay4KIAotXHNlY3Rpb257UlNBIE9wZXJhdGlvbnN9CitcbXlzZWN0aW9ue1JTQSBLZXkgT3BlcmF0aW9uc30KIFxzdWJzZWN0aW9ue0JhY2tncm91bmR9CiAKLVJTQSBpcyBhIHB1YmxpYyBrZXkgYWxnb3JpdGhtIHRoYXQgaXMgYmFzZWQgb24gdGhlIGluYWJpbGl0eSB0byBmaW5kIHRoZSBgYGUtdGgnJyByb290IG1vZHVsbyBhIGNvbXBvc2l0ZSBvZiB1bmtub3duIAorUlNBIGlzIGEgcHVibGljIGtleSBhbGdvcml0aG0gdGhhdCBpcyBiYXNlZCBvbiB0aGUgaW5hYmlsaXR5IHRvIGZpbmQgdGhlIFx0ZXh0aXR7ZS10aH0gcm9vdCBtb2R1bG8gYSBjb21wb3NpdGUgb2YgdW5rbm93biAKIGZhY3Rvcml6YXRpb24uICBOb3JtYWxseSB0aGUgZGlmZmljdWx0eSBvZiBicmVha2luZyBSU0EgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlZ2VyIGZhY3RvcmluZyBwcm9ibGVtIGJ1dCB0aGV5IGFyZQogbm90IHN0cmljdGx5IGVxdWl2YWxlbnQuCiAKLVRoZSBzeXN0ZW0gYmVnaW5zIHdpdGggd2l0aCB0d28gcHJpbWVzICRwJCBhbmQgJHEkIGFuZCB0aGVpciBwcm9kdWN0ICROID0gcHEkLiAgVGhlIG9yZGVyIG9yIGBgRXVsZXIgdG90aWVudCcnIG9mIHRoZQorVGhlIHN5c3RlbSBiZWdpbnMgd2l0aCB3aXRoIHR3byBwcmltZXMgJHAkIGFuZCAkcSQgYW5kIHRoZWlyIHByb2R1Y3QgJE4gPSBwcSQuICBUaGUgb3JkZXIgb3IgXHRleHRpdHtFdWxlciB0b3RpZW50fSBvZiB0aGUKIG11bHRpcGxpY2F0aXZlIHN1Yi1ncm91cCBmb3JtZWQgbW9kdWxvICROJCBpcyBnaXZlbiBhcyAkXHBoaShOKSA9IChwIC0gMSkocSAtIDEpJCB3aGljaCBjYW4gYmUgcmVkdWNlZCB0byAKICRcbWJveHtsY219KHAgLSAxLCBxIC0gMSkkLiAgVGhlIHB1YmxpYyBrZXkgY29uc2lzdHMgb2YgdGhlIGNvbXBvc2l0ZSAkTiQgYW5kIHNvbWUgaW50ZWdlciAkZSQgc3VjaCB0aGF0IAogJFxtYm94e2djZH0oZSwgXHBoaShOKSkgPSAxJC4gIFRoZSBwcml2YXRlIGtleSBjb25zaXN0cyBvZiB0aGUgY29tcG9zaXRlICROJCBhbmQgdGhlIGludmVyc2Ugb2YgJGUkIG1vZHVsbyAkXHBoaShOKSQgCkBAIC0yNTgxLDcgKzMyMzYsNyBAQAogJDEgPCBNIDwgTi0yJCBhbmQgY29tcHV0ZXMgdGhlIGNpcGhlcnRleHQgJEMgPSBNXmVcbWJveHsgfShcbWJveHttb2QgfU4pJC4gIFNpbmNlIGZpbmRpbmcgdGhlIGludmVyc2UgZXhwb25lbnQgJGQkCiBnaXZlbiBvbmx5ICROJCBhbmQgJGUkIGFwcGVhcnMgdG8gYmUgaW50cmFjdGFibGUgb25seSB0aGUgb3duZXIgb2YgdGhlIHByaXZhdGUga2V5IGNhbiBkZWNyeXB0IHRoZSBjaXBoZXJ0ZXh0IGFuZCBjb21wdXRlCiAkQ15kIFxlcXVpdiBcbGVmdCAoTV5lIFxyaWdodCleZCBcZXF1aXYgTV4xIFxlcXVpdiBNXG1ib3h7IH0oXG1ib3h7bW9kIH1OKSQuICBTaW1pbGFybHkgdGhlIG93bmVyIG9mIHRoZSBwcml2YXRlIGtleSAKLWNhbiBzaWduIGEgbWVzc2FnZSBieSBgYGRlY3J5cHRpbmcnJyBpdC4gIE90aGVycyBjYW4gdmVyaWZ5IGl0IGJ5IGBgZW5jcnlwdGluZycnIGl0LiAgCitjYW4gc2lnbiBhIG1lc3NhZ2UgYnkgXHRleHRpdHtkZWNyeXB0aW5nfSBpdC4gIE90aGVycyBjYW4gdmVyaWZ5IGl0IGJ5IFx0ZXh0aXR7ZW5jcnlwdGluZ30gaXQuICAKIAogQ3VycmVudGx5IFJTQSBpcyBhIGRpZmZpY3VsdCBzeXN0ZW0gdG8gY3J5cHRhbmFseXplIHByb3ZpZGVkIHRoYXQgYm90aCBwcmltZXMgYXJlIGxhcmdlIGFuZCBub3QgY2xvc2UgdG8gZWFjaCBvdGhlci4gIAogSWRlYWxseSAkZSQgc2hvdWxkIGJlIGxhcmdlciB0aGFuICQxMDAkIHRvIHByZXZlbnQgZGlyZWN0IGFuYWx5c2lzLiAgRm9yIGV4YW1wbGUsIGlmICRlJCBpcyB0aHJlZSBhbmQgeW91IGRvIG5vdCBwYWQKQEAgLTI1OTcsMTA3ICszMjUyLDI0MiBAQAogCiBcc3Vic2VjdGlvbntSU0EgS2V5IEdlbmVyYXRpb259CiAKLUZvciBSU0Egcm91dGluZXMgYSBzaW5nbGUgYGByc2FcX2tleScnIHN0cnVjdHVyZSBpcyB1c2VkLiAgVG8gbWFrZSBhIG5ldyBSU0Ega2V5IGNhbGw6CitGb3IgUlNBIHJvdXRpbmVzIGEgc2luZ2xlIFx0ZXh0aXR7cnNhXF9rZXl9IHN0cnVjdHVyZSBpcyB1c2VkLiAgVG8gbWFrZSBhIG5ldyBSU0Ega2V5IGNhbGw6CiBcaW5kZXh7cnNhXF9tYWtlXF9rZXkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KIGludCByc2FfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgCi0gICAgICAgICAgICAgICAgIGludCB3cHJuZywgaW50IHNpemUsIAotICAgICAgICAgICAgICAgICBsb25nIGUsIHJzYV9rZXkgKmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAgc2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgIGUsIAorICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KIAotV2hlcmUgYGB3cHJuZycnIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBQUk5HIGRlc2NyaXB0b3IgYXJyYXkuICBgYHNpemUnJyBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgUlNBIG1vZHVsdXMgZGVzaXJlZC4KLWBgZScnIGlzIHRoZSBlbmNyeXB0aW9uIGV4cG9uZW50IGRlc2lyZWQsIHR5cGljYWwgdmFsdWVzIGFyZSAzLCAxNywgMjU3IGFuZCA2NTUzNy4gIEkgc3VnZ2VzdCB5b3Ugc3RpY2sgd2l0aCA2NTUzNyBzaW5jZSBpdHMgYmlnCi1lbm91Z2ggdG8gcHJldmVudCB0cml2aWFsIG1hdGggYXR0YWNrcyBhbmQgbm90IHN1cGVyIHNsb3cuICBgYGtleScnIGlzIHdoZXJlIHRoZSBrZXkgaXMgcGxhY2VkLiAgQWxsIGtleXMgbXVzdCBiZSBhdCAKLWxlYXN0IDEyOCBieXRlcyBhbmQgbm8gbW9yZSB0aGFuIDUxMiBieXRlcyBpbiBzaXplIChcdGV4dGl0e3RoYXQgaXMgZnJvbSAxMDI0IHRvIDQwOTYgYml0c30pLgorV2hlcmUgXHRleHRpdHt3cHJuZ30gaXMgdGhlIGluZGV4IGludG8gdGhlIFBSTkcgZGVzY3JpcHRvciBhcnJheS4gIFRoZSBcdGV4dGl0e3NpemV9IHBhcmFtZXRlciBpcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgUlNBIG1vZHVsdXMgZGVzaXJlZC4KK1RoZSBcdGV4dGl0e2V9IHBhcmFtZXRlciBpcyB0aGUgZW5jcnlwdGlvbiBleHBvbmVudCBkZXNpcmVkLCB0eXBpY2FsIHZhbHVlcyBhcmUgMywgMTcsIDI1NyBhbmQgNjU1MzcuICBTdGljayB3aXRoIDY1NTM3IHNpbmNlIGl0IGlzIGJpZyBlbm91Z2ggdG8gcHJldmVudCAKK3RyaXZpYWwgbWF0aCBhdHRhY2tzLCBhbmQgbm90IHN1cGVyIHNsb3cuICBUaGUgXHRleHRpdHtrZXl9IHBhcmFtZXRlciBpcyB3aGVyZSB0aGUgY29uc3RydWN0ZWQga2V5IGlzIHBsYWNlZC4gIEFsbCBrZXlzIG11c3QgYmUgYXQgCitsZWFzdCAxMjggYnl0ZXMsIGFuZCBubyBtb3JlIHRoYW4gNTEyIGJ5dGVzIGluIHNpemUgKFx0ZXh0aXR7dGhhdCBpcyBmcm9tIDEwMjQgdG8gNDA5NiBiaXRzfSkuCiAKLU5vdGUgdGhhdCB0aGUgYGByc2FcX21ha2VcX2tleSgpJycgZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBhdCBydW50aW1lIHdoZW4geW91IG1ha2UgdGhlIGtleS4gIE1ha2Ugc3VyZSB0byBjYWxsIAotYGByc2FcX2ZyZWUoKScnIChzZWUgYmVsb3cpIHdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBrZXkuICBJZiBgYHJzYVxfbWFrZVxfa2V5KCknJyBmYWlscyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgCi1mcmVlIHRoZSByYW0gYWxsb2NhdGVkIGl0c2VsZi4KK1xpbmRleHtyc2FcX2ZyZWUoKX0KK05vdGU6IHRoZSBcdGV4dGl0e3JzYVxfbWFrZVxfa2V5KCl9IGZ1bmN0aW9uIGFsbG9jYXRlcyBtZW1vcnkgYXQgcnVuLS10aW1lIHdoZW4geW91IG1ha2UgdGhlIGtleS4gIE1ha2Ugc3VyZSB0byBjYWxsIAorXHRleHRpdHtyc2FcX2ZyZWUoKX0gKHNlZSBiZWxvdykgd2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGtleS4gIElmIFx0ZXh0aXR7cnNhXF9tYWtlXF9rZXkoKX0gZmFpbHMgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IAorZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZC4KIAogXGluZGV4e1BLXF9QUklWQVRFfSBcaW5kZXh7UEtcX1BVQkxJQ30KIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgUlNBIGtleXMuICBUaGUgdHlwZXMgYXJlIHtcYmYgUEtcX1BSSVZBVEV9IGFuZCB7XGJmIFBLXF9QVUJMSUN9LiAgVGhlIGZpcnN0IHR5cGUgaXMgYSBwcml2YXRlIAotUlNBIGtleSB3aGljaCBpbmNsdWRlcyB0aGUgQ1JUIHBhcmFtZXRlcnNcZm9vdG5vdGV7QXMgb2YgdjAuOTkgdGhlIFBLXF9QUklWQVRFXF9PUFRJTUlaRUQgdHlwZSBoYXMgYmVlbiBkZXByZWNhdGVkCi1hbmQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIFBLXF9QUklWQVRFIHR5cGUufSBpbiB0aGUgZm9ybSBvZiBhIFJTQVByaXZhdGVLZXkuICBUaGUgc2Vjb25kIHR5cGUgaXMgYSBwdWJsaWMgUlNBIGtleQotd2hpY2ggb25seSBpbmNsdWRlcyB0aGUgbW9kdWx1cyBhbmQgcHVibGljIGV4cG9uZW50LiAgSXQgdGFrZXMgdGhlIGZvcm0gb2YgYSBSU0FQdWJsaWNLZXkuCitSU0Ega2V5IHdoaWNoIGluY2x1ZGVzIHRoZSBDUlQgcGFyYW1ldGVyc1xmb290bm90ZXtBcyBvZiB2MC45OSB0aGUgUEtcX1BSSVZBVEVcX09QVElNSVpFRCB0eXBlIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFuZCBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgCitQS1xfUFJJVkFURSB0eXBlLn0gaW4gdGhlIGZvcm0gb2YgYSBSU0FQcml2YXRlS2V5IChQS0NTIFwjMSBjb21wbGlhbnQpLiAgVGhlIHNlY29uZCB0eXBlLCBpcyBhIHB1YmxpYyBSU0Ega2V5IHdoaWNoIG9ubHkgaW5jbHVkZXMgdGhlIG1vZHVsdXMgYW5kIHB1YmxpYyBleHBvbmVudC4gIAorSXQgdGFrZXMgdGhlIGZvcm0gb2YgYSBSU0FQdWJsaWNLZXkgKFBLQ1MgXCMxIGNvbXBsaWFudCkuCiAKIFxzdWJzZWN0aW9ue1JTQSBFeHBvbmVudGlhdGlvbn0KLQotVG8gZG8gcmF3IHdvcmsgd2l0aCB0aGUgUlNBIGZ1bmN0aW9uIGNhbGw6CitUbyBkbyByYXcgd29yayB3aXRoIHRoZSBSU0EgZnVuY3Rpb24sIHRoYXQgaXMgd2l0aG91dCBwYWRkaW5nLCB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKIFxpbmRleHtyc2FcX2V4cHRtb2QoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCByc2FfZXhwdG1vZChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoLCBwcm5nX3N0YXRlICpwcm5nLCBpbnQgcHJuZ19pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK2ludCByc2FfZXhwdG1vZChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdoaWNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgbG9hZHMgdGhlIGJpZ251bSBmcm9tIGBgaW4nJyBhcyBhIGJpZyBlbmRpYW4gd29yZCBpbiB0aGUgZm9ybWF0IFBLQ1Mgc3BlY2lmaWVzLCByYWlzZXMgaXQgdG8gZWl0aGVyIGBgZScnIG9yIGBgZCcnIGFuZCBzdG9yZXMgdGhlIHJlc3VsdAotaW4gYGBvdXQnJyBhbmQgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBpbiBgYG91dGxlbicnLiBgYHdoaWNoJycgaXMgc2V0IHRvIHtcYmYgUEtcX1BVQkxJQ30gdG8gdXNlIGBgZScnIAotKGkuZS4gZm9yIGVuY3J5cHRpb24vdmVyaWZ5aW5nKSBhbmQgc2V0IHRvIHtcYmYgUEtcX1BSSVZBVEV9IHRvIHVzZSBgYGQnJyBhcyB0aGUgZXhwb25lbnQgKGkuZS4gZm9yIGRlY3J5cHRpbmcvc2lnbmluZykuCitUaGlzIHdpbGwgbG9hZCB0aGUgYmlnbnVtIGZyb20gXHRleHRpdHtpbn0gYXMgYSBiaWcgZW5kaWFuIGludGVnZXIgaW4gdGhlIGZvcm1hdCBQS0NTIFwjMSBzcGVjaWZpZXMsIHJhaXNlcyBpdCB0byBlaXRoZXIgXHRleHRpdHtlfSBvciBcdGV4dGl0e2R9IGFuZCBzdG9yZXMgdGhlIHJlc3VsdAoraW4gXHRleHRpdHtvdXR9IGFuZCB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IGluIFx0ZXh0aXR7b3V0bGVufS4gXHRleHRpdHt3aGljaH0gaXMgc2V0IHRvIHtcYmYgUEtcX1BVQkxJQ30gdG8gdXNlIFx0ZXh0aXR7ZX0gCisoaS5lLiBmb3IgZW5jcnlwdGlvbi92ZXJpZnlpbmcpIGFuZCBzZXQgdG8ge1xiZiBQS1xfUFJJVkFURX0gdG8gdXNlIFx0ZXh0aXR7ZH0gYXMgdGhlIGV4cG9uZW50IChpLmUuIGZvciBkZWNyeXB0aW5nL3NpZ25pbmcpLgogCi1Ob3RlIHRoYXQgdGhlIG91dHB1dCBvZiBoaXMgZnVuY3Rpb24gaXMgemVyby1wYWRkZWQgYXMgcGVyIFBLQ1MgXCMxIHNwZWNpZmljYXRpb25zLiAgVGhpcyBhbGxvd3MgdGhpcyByb3V0aW5lIHRvIAotaW50ZXJvcHJhdGUgd2l0aCBQS0NTIFwjMSBwYWRkaW5nIGZ1bmN0aW9ucyBwcm9wZXJseS4KK05vdGU6IHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbiBpcyB6ZXJvLS1wYWRkZWQgYXMgcGVyIFBLQ1MgXCMxIHNwZWNpZmljYXRpb24uICBUaGlzIGFsbG93cyB0aGlzIHJvdXRpbmUgdG8gd29yayB3aXRoIFBLQ1MgXCMxIHBhZGRpbmcgZnVuY3Rpb25zIHByb3Blcmx5LgogCi1cc3Vic2VjdGlvbntSU0EgS2V5IEVuY3J5cHRpb259CitcbXlzZWN0aW9ue1JTQSBLZXkgRW5jcnlwdGlvbn0KIE5vcm1hbGx5IFJTQSBpcyB1c2VkIHRvIGVuY3J5cHQgc2hvcnQgc3ltbWV0cmljIGtleXMgd2hpY2ggYXJlIHRoZW4gdXNlZCBpbiBibG9jayBjaXBoZXJzIHRvIGVuY3J5cHQgYSBtZXNzYWdlLgogVG8gZmFjaWxpdGF0ZSBlbmNyeXB0aW5nIHNob3J0IGtleXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaGF2ZSBiZWVuIHByb3ZpZGVkLgogCiBcaW5kZXh7cnNhXF9lbmNyeXB0XF9rZXkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCByc2FfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCB1bnNpZ25lZCBsb25nIGxwYXJhbWxlbiwKLSAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHBybmdfaWR4LCBpbnQgaGFzaF9pZHgsIHJzYV9rZXkgKmtleSk7CitpbnQgcnNhX2VuY3J5cHRfa2V5KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsIAorICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LCAKKyAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KLVRoaXMgZnVuY3Rpb24gd2lsbCBPQUVQIHBhZCBgYGluJycgb2YgbGVuZ3RoIGlubGVuIGJ5dGVzIHRoZW4gUlNBIGVuY3J5cHQgaXQgYW5kIHN0b3JlIHRoZSBjaXBoZXJ0ZXh0Ci1pbiBgYG91dCcnIG9mIGxlbmd0aCBgYG91dGxlbicnLiAgVGhlIGBgbHBhcmFtJycgYW5kIGBgbHBhcmFtbGVuJycgYXJlIHRoZSBzYW1lIHBhcmFtZXRlcnMgeW91IHdvdWxkIHBhc3MKLXRvIHBrY3NcXzFcX29hZXBcX2VuY29kZSgpLgorVGhpcyBmdW5jdGlvbiB3aWxsIE9BRVAgcGFkIFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBieXRlcywgUlNBIGVuY3J5cHQgaXQsIGFuZCBzdG9yZSB0aGUgY2lwaGVydGV4dAoraW4gXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gb2N0ZXRzLiAgVGhlIFx0ZXh0aXR7bHBhcmFtfSBhbmQgXHRleHRpdHtscGFyYW1sZW59IGFyZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIHlvdSB3b3VsZCBwYXNzCit0byBcaW5kZXh7cGtjc1xfMVxfb2FlcFxfZW5jb2RlKCl9IHBrY3NcXzFcX29hZXBcX2VuY29kZSgpLgogCitcc3Vic2VjdGlvbntFeHRlbmRlZCBFbmNyeXB0aW9ufQorQXMgb2YgdjEuMTUsIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIGJvdGggdjEuNSBhbmQgdjIuMSBQS0NTIFwjMSBzdHlsZSBwYWRkaW5ncyBpbiB0aGVzZSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zLiAgVGhlIGZvbGxvd2luZyBpcyB0aGUgZXh0ZW5kZWQKK2VuY3J5cHRpb24gZnVuY3Rpb246CisKK1xpbmRleHtyc2FcX2VuY3J5cHRcX2tleVxfZXgoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCByc2FfZW5jcnlwdF9rZXlfZXgoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwgCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsIAorICAgICAgICAgICAgICAgICAgICBpbnQgIHBhZGRpbmcsIAorICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitcaW5kZXh7TFRDXF9QS0NTXF8xXF9PQUVQfSBcaW5kZXh7TFRDXF9QS0NTXF8xXF9WMVxfNX0KK1RoZSBwYXJhbWV0ZXJzIGFyZSBhbGwgdGhlIHNhbWUgYXMgZm9yIHJzYVxfZW5jcnlwdFxfa2V5KCkgZXhjZXB0IGZvciB0aGUgYWRkaXRpb24gb2YgdGhlIFx0ZXh0aXR7cGFkZGluZ30gcGFyYW1ldGVyLiAgSXQgbXVzdCBiZSBzZXQgdG8KK1x0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9WMVxfNX0gdG8gcGVyZm9ybSB2MS41IGVuY3J5cHRpb24sIG9yIHNldCB0byBcdGV4dGJme0xUQ1xfUEtDU1xfMVxfT0FFUH0gdG8gcGVyZm9ybSB2Mi4xIGVuY3J5cHRpb24uCisKK1doZW4gcGVyZm9ybWluZyB2MS41IGVuY3J5cHRpb24sIHRoZSBoYXNoIGFuZCBscGFyYW0gcGFyYW1ldGVycyBhcmUgdG90YWxseSBpZ25vcmVkIGFuZCBjYW4gYmUgc2V0IHRvIFx0ZXh0YmZ7TlVMTH0gb3IgemVybyAocmVzcGVjdGl2ZWx5KS4KKworXG15c2VjdGlvbntSU0EgS2V5IERlY3J5cHRpb259CiBcaW5kZXh7cnNhXF9kZWNyeXB0XF9rZXkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCByc2FfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgdW5zaWduZWQgbG9uZyBscGFyYW1sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCBpbnQgKnN0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgICAgICAgKmtleSk7CitpbnQgcnNhX2RlY3J5cHRfa2V5KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsIAorICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsCisgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIGZ1bmN0aW9uIHdpbGwgUlNBIGRlY3J5cHQgYGBpbicnIG9mIGxlbmd0aCBgYGlubGVuJycgdGhlbiBPQUVQIGRlcGFkIHRoZSByZXN1bHRpbmcgZGF0YSBhbmQgc3RvcmUgaXQgaW4KLWBgb3V0Jycgb2YgbGVuZ3RoIGBgb3V0bGVuJycuICBUaGUgYGBscGFyYW0nJyBhbmQgYGBscGFyYW1sZW4nJyBhcmUgdGhlIHNhbWUgcGFyYW1ldGVycyB5b3Ugd291bGQgcGFzcworVGhpcyBmdW5jdGlvbiB3aWxsIFJTQSBkZWNyeXB0IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSB0aGVuIE9BRVAgZGUtcGFkIHRoZSByZXN1bHRpbmcgZGF0YSBhbmQgc3RvcmUgaXQgaW4KK1x0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59LiAgVGhlIFx0ZXh0aXR7bHBhcmFtfSBhbmQgXHRleHRpdHtscGFyYW1sZW59IGFyZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIHlvdSB3b3VsZCBwYXNzCiB0byBwa2NzXF8xXF9vYWVwXF9kZWNvZGUoKS4KIAotSWYgdGhlIFJTQSBkZWNyeXB0ZWQgZGF0YSBpc24ndCBhIHZhbGlkIE9BRVAgcGFja2V0IHRoZW4gYGBzdGF0JycgaXMgc2V0IHRvICQwJC4gIE90aGVyd2lzZSwgaXQgaXMgc2V0IHRvICQxJC4KK0lmIHRoZSBSU0EgZGVjcnlwdGVkIGRhdGEgaXMgbm90IGEgdmFsaWQgT0FFUCBwYWNrZXQgdGhlbiBcdGV4dGl0e3N0YXR9IGlzIHNldCB0byAkMCQuICBPdGhlcndpc2UsIGl0IGlzIHNldCB0byAkMSQuCiAKLVxzdWJzZWN0aW9ue1JTQSBIYXNoIFNpZ25hdHVyZXN9Ci1TaW1pbGFyIHRvIFJTQSBrZXkgZW5jcnlwdGlvbiBSU0EgaXMgYWxzbyB1c2VkIHRvIGBgZGlnaXRhbGx5IHNpZ24nJyBtZXNzYWdlIGRpZ2VzdHMgKGhhc2hlcykuICBUbyBmYWNpbGl0YXRlIHRoaXMKK1xzdWJzZWN0aW9ue0V4dGVuZGVkIERlY3J5cHRpb259CitBcyBvZiB2MS4xNSwgdGhlIGxpYnJhcnkgc3VwcG9ydHMgYm90aCB2MS41IGFuZCB2Mi4xIFBLQ1MgXCMxIHN0eWxlIHBhZGRpbmdzIGluIHRoZXNlIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMuICBUaGUgZm9sbG93aW5nIGlzIHRoZSBleHRlbmRlZAorZGVjcnlwdGlvbiBmdW5jdGlvbjoKKworXGluZGV4e3JzYVxfZGVjcnlwdFxfa2V5XF9leCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHJzYV9kZWNyeXB0X2tleV9leCgKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgICAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sICAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsCisgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1NpbWlsYXIgdG8gdGhlIGV4dGVuZGVkIGVuY3J5cHRpb24sIHRoZSBuZXcgcGFyYW1ldGVyIFx0ZXh0aXR7cGFkZGluZ30gaW5kaWNhdGVzIHdoaWNoIHZlcnNpb24gb2YgdGhlIFBLQ1MgXCMxIHN0YW5kYXJkIHRvIHVzZS4gIAorSXQgbXVzdCBiZSBzZXQgdG8gXHRleHRiZntMVENcX1BLQ1NcXzFcX1YxXF81fSB0byBwZXJmb3JtIHYxLjUgZGVjcnlwdGlvbiwgb3Igc2V0IHRvIFx0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9PQUVQfSB0byBwZXJmb3JtIHYyLjEgZGVjcnlwdGlvbi4KKworV2hlbiBwZXJmb3JtaW5nIHYxLjUgZGVjcnlwdGlvbiwgdGhlIGhhc2ggYW5kIGxwYXJhbSBwYXJhbWV0ZXJzIGFyZSB0b3RhbGx5IGlnbm9yZWQgYW5kIGNhbiBiZSBzZXQgdG8gXHRleHRiZntOVUxMfSBvciB6ZXJvIChyZXNwZWN0aXZlbHkpLgorCisKK1xteXNlY3Rpb257UlNBIFNpZ25hdHVyZSBHZW5lcmF0aW9ufQorU2ltaWxhciB0byBSU0Ega2V5IGVuY3J5cHRpb24gUlNBIGlzIGFsc28gdXNlZCB0byBcdGV4dGl0e2RpZ2l0YWxseSBzaWdufSBtZXNzYWdlIGRpZ2VzdHMgKGhhc2hlcykuICBUbyBmYWNpbGl0YXRlIHRoaXMKIHByb2Nlc3MgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaGF2ZSBiZWVuIHByb3ZpZGVkLgogCiBcaW5kZXh7cnNhXF9zaWduXF9oYXNoKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgcnNhX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAgICAqcHJuZywgICAgIGludCAgICAgICAgICAgIHBybmdfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsIHVuc2lnbmVkIGxvbmcgIHNhbHRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworaW50IHJzYV9zaWduX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoaXMgd2lsbCBQU1MgZW5jb2RlIHRoZSBtZXNzYWdlIGhhc2ggYGBpbicnIG9mIGxlbmd0aCBgYGlubGVuJycuICBOZXh0IHRoZSBQU1MgZW5jb2RlZCBtZXNzYWdlIHdpbGwgYmUgUlNBIGBgc2lnbmVkJycgYW5kIAotdGhlIG91dHB1dCBpcyBzdG9yZWQgaW4gYGBvdXQnJyBvZiBsZW5ndGggYGBvdXRsZW4nJy4gIAorVGhpcyB3aWxsIFBTUyBlbmNvZGUgdGhlIG1lc3NhZ2UgZGlnZXN0IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cy4gIE5leHQsIHRoZSBQU1MgZW5jb2RlZCBoYXNoIHdpbGwgYmUgUlNBIAorXHRleHRpdHtzaWduZWR9IGFuZCB0aGUgb3V0cHV0IHN0b3JlZCBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gb2N0ZXRzLiAgCiAKK1RoZSBcdGV4dGl0e2hhc2hcX2lkeH0gcGFyYW1ldGVyIGluZGljYXRlcyB3aGljaCBoYXNoIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFBTUyBlbmNvZGluZy4gIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgaGFzaCB1c2VkIHRvCitoYXNoIHRoZSBtZXNzYWdlIGJlaW5nIHNpZ25lZC4gIFRoZSBcdGV4dGl0e3NhbHRsZW59IHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgZGVzaXJlZCBzYWx0LCBhbmQgc2hvdWxkIHR5cGljYWxseSBiZSBzbWFsbC4gIEEgZ29vZAorZGVmYXVsdCB2YWx1ZSBpcyBiZXR3ZWVuIDggYW5kIDE2IG9jdGV0cy4gIFN0cmljdGx5LCBpdCBtdXN0IGJlIHNtYWxsIHRoYW4gJG1vZHVsdXNcX2xlbiAtIGhMZW4gLSAyJCB3aGVyZSBcdGV4dGl0e21vZHVsdXNcX2xlbn0gaXMgdGhlIHNpemUgb2YKK3RoZSBSU0EgbW9kdWx1cyAoaW4gb2N0ZXRzKSwgYW5kIFx0ZXh0aXR7aExlbn0gaXMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBkaWdlc3QgcHJvZHVjZWQgYnkgdGhlIGNob3NlbiBoYXNoLiAgCiAKK1xzdWJzZWN0aW9ue0V4dGVuZGVkIFNpZ25hdHVyZXN9CisKK0FzIG9mIHYxLjE1LCB0aGUgbGlicmFyeSBzdXBwb3J0cyBib3RoIHYxLjUgYW5kIHYyLjEgc2lnbmF0dXJlcy4gIFRoZSBleHRlbmRlZCBzaWduYXR1cmUgZ2VuZXJhdGlvbiBmdW5jdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBwcm90b3R5cGU6CisKK1xpbmRleHtyc2FcX3NpZ25cX2hhc2hcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX3NpZ25faGFzaF9leCgKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgICAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwYWRkaW5nLAorICAgICAgICAgIHBybmdfc3RhdGUgICAgKnBybmcsICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIFBLQ1MgZW5jb2RlIHRoZSBtZXNzYWdlIGRpZ2VzdCBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBvY3RldHMuICBOZXh0LCB0aGUgUEtDUyBlbmNvZGVkIGhhc2ggd2lsbCBiZSBSU0EgCitcdGV4dGl0e3NpZ25lZH0gYW5kIHRoZSBvdXRwdXQgc3RvcmVkIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBcdGV4dGl0e291dH0gb2YgbGVuZ3RoIFx0ZXh0aXR7b3V0bGVufSBvY3RldHMuICBUaGUgXHRleHRpdHtwYWRkaW5nfSBwYXJhbWV0ZXIKK211c3QgYmUgc2V0IHRvIFx0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9WMVxfNX0gdG8gcHJvZHVjZSBhIHYxLjUgc2lnbmF0dXJlLCBvdGhlcndpc2UsIGl0IG11c3QgYmUgc2V0IHRvIFx0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9QU1N9IHRvIHByb2R1Y2UgYSAKK3YyLjEgc2lnbmF0dXJlLgorCitXaGVuIHBlcmZvcm1pbmcgYSB2MS41IHNpZ25hdHVyZSB0aGUgXHRleHRpdHtwcm5nfSwgXHRleHRpdHtwcm5nXF9pZHh9LCBhbmQgXHRleHRpdHtoYXNoXF9pZHh9IHBhcmFtZXRlcnMgYXJlIG5vdCBjaGVja2VkIGFuZCBjYW4gYmUgbGVmdCB0byBhbnkKK3ZhbHVlcyBzdWNoIGFzICRcbGJyYWNlJFx0ZXh0YmZ7TlVMTH0sIDAsIDAkXHJicmFjZSQuCisKK1xteXNlY3Rpb257UlNBIFNpZ25hdHVyZSBWZXJpZmljYXRpb259CiBcaW5kZXh7cnNhXF92ZXJpZnlcX2hhc2goKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCByc2FfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgICAgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2doYXNoLCAgdW5zaWduZWQgbG9uZyBtc2doYXNobGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgdW5zaWduZWQgbG9uZyBzYWx0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0LCAgICAgcnNhX2tleSAgICAgICprZXkpOworaW50IHJzYV92ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzaWdsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZ2hhc2gsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbXNnaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIFJTQSBgYHZlcmlmeScnIHRoZSBzaWduYXR1cmUgaW4gYGBzaWcnJyBvZiBsZW5ndGggYGBzaWdsZW4nJy4gIE5leHQgdGhlIFJTQSBkZWNvZGVkIGRhdGEgaXMgUFNTIGRlY29kZWQKLWFuZCB0aGUgZXh0cmFjdGVkIGhhc2ggaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbWVzc2FnZSBoYXNoIGBgbXNnaGFzaCcnIG9mIGxlbmd0aCBgYG1zZ2hhc2hsZW4nJy4KK1RoaXMgd2lsbCBSU0EgXHRleHRpdHt2ZXJpZnl9IHRoZSBzaWduYXR1cmUgcG9pbnRlZCB0byBieSBcdGV4dGl0e3NpZ30gb2YgbGVuZ3RoIFx0ZXh0aXR7c2lnbGVufSBvY3RldHMuICBOZXh0LCB0aGUgUlNBIGRlY29kZWQgZGF0YSBpcyBQU1MgZGVjb2RlZAorYW5kIHRoZSBleHRyYWN0ZWQgaGFzaCBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBtZXNzYWdlIGRpZ2VzdCBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7bXNnaGFzaH0gb2YgbGVuZ3RoIFx0ZXh0aXR7bXNnaGFzaGxlbn0gb2N0ZXRzLgogCi1JZiB0aGUgUlNBIGRlY29kZWQgZGF0YSBpcyBub3QgYSB2YWxpZCBQU1MgbWVzc2FnZSBvciBpZiB0aGUgUFNTIGRlY29kZWQgaGFzaCBkb2VzIG5vdCBtYXRjaCB0aGUgYGBtc2doYXNoJycgCi10aGUgdmFsdWUgYGByZXMnJyBpcyBzZXQgdG8gJDAkLiAgT3RoZXJ3aXNlLCBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgYW5kIHNpZ25hdHVyZSBpcyB2YWxpZCBgYHJlcycnIGlzIHNldAotdG8gJDEkLgorSWYgdGhlIFJTQSBkZWNvZGVkIGRhdGEgaXMgbm90IGEgdmFsaWQgUFNTIG1lc3NhZ2UsIG9yIGlmIHRoZSBQU1MgZGVjb2RlZCBoYXNoIGRvZXMgbm90IG1hdGNoIHRoZSBcdGV4dGl0e21zZ2hhc2h9IAordmFsdWUsIFx0ZXh0aXR7cmVzfSBpcyBzZXQgdG8gJDAkLiAgT3RoZXJ3aXNlLCBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIGFuZCBzaWduYXR1cmUgaXMgdmFsaWQgXHRleHRpdHtyZXN9IGlzIHNldCB0byAkMSQuCiAKK1xzdWJzZWN0aW9ue0V4dGVuZGVkIFZlcmlmaWNhdGlvbn0KKworQXMgb2YgdjEuMTUsIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIGJvdGggdjEuNSBhbmQgdjIuMSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLiAgVGhlIGV4dGVuZGVkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgorCitcaW5kZXh7cnNhXF92ZXJpZnlcX2hhc2hcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX3ZlcmlmeV9oYXNoX2V4KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgICAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBzaWdsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgcGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAgICAgCisgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBSU0EgXHRleHRpdHt2ZXJpZnl9IHRoZSBzaWduYXR1cmUgcG9pbnRlZCB0byBieSBcdGV4dGl0e3NpZ30gb2YgbGVuZ3RoIFx0ZXh0aXR7c2lnbGVufSBvY3RldHMuICBOZXh0LCB0aGUgUlNBIGRlY29kZWQgZGF0YSBpcyBQS0NTIGRlY29kZWQKK2FuZCB0aGUgZXh0cmFjdGVkIGhhc2ggaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbWVzc2FnZSBkaWdlc3QgcG9pbnRlZCB0byBieSBcdGV4dGl0e21zZ2hhc2h9IG9mIGxlbmd0aCBcdGV4dGl0e21zZ2hhc2hsZW59IG9jdGV0cy4KKworSWYgdGhlIFJTQSBkZWNvZGVkIGRhdGEgaXMgbm90IGEgdmFsaWQgUFNTIG1lc3NhZ2UsIG9yIGlmIHRoZSBQS0NTIGRlY29kZWQgaGFzaCBkb2VzIG5vdCBtYXRjaCB0aGUgXHRleHRpdHttc2doYXNofSAKK3ZhbHVlLCBcdGV4dGl0e3Jlc30gaXMgc2V0IHRvICQwJC4gIE90aGVyd2lzZSwgaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCBhbmQgc2lnbmF0dXJlIGlzIHZhbGlkIFx0ZXh0aXR7cmVzfSBpcyBzZXQgdG8gJDEkLgorCitUaGUgXHRleHRpdHtwYWRkaW5nfSBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gXHRleHRiZntMVENcX1BLQ1NcXzFcX1YxXF81fSB0byBwZXJmb3JtIGEgdjEuNSB2ZXJpZmljYXRpb24uICBPdGhlcndpc2UsIGl0IG11c3QgYmUgc2V0IHRvIAorXHRleHRiZntMVENcX1BLQ1NcXzFcX1BTU30gdG8gcGVyZm9ybSBhIHYyLjEgdmVyaWZpY2F0aW9uLiAgV2hlbiBwZXJmb3JtaW5nIGEgdjEuNSB2ZXJpZmljYXRpb24gdGhlIFx0ZXh0aXR7aGFzaFxfaWR4fSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworXG15c2VjdGlvbntSU0EgRW5jcnlwdGlvbiBFeGFtcGxlfQorXGJlZ2lue3NtYWxsfQogXGJlZ2lue3ZlcmJhdGltfQogI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CiBpbnQgbWFpbih2b2lkKQpAQCAtMjcxMyw2ICszNTAzLDkgQEAKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAKKyAgIC8qIHJlZ2lzdGVyIGEgbWF0aCBsaWJyYXJ5IChpbiB0aGlzIGNhc2UgVG9tc0Zhc3RNYXRoKQorICAgbHRjX21wID0gdGZtX2Rlc2M7CisKICAgIGlmIChyZWdpc3Rlcl9oYXNoKCZzaGExX2Rlc2MpID09IC0xKSB7CiAgICAgICBwcmludGYoIkVycm9yIHJlZ2lzdGVyaW5nIHNoYTEiKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CkBAIC0yNzMzLDE2ICszNTI2LDE2IEBACiAKICAgIC8qIGZpbGwgaW4gcHRbXSB3aXRoIGEga2V5IHdlIHdhbnQgdG8gc2VuZCAuLi4gKi8KICAgIGwxID0gc2l6ZW9mKG91dCk7Ci0gICBpZiAoKGVyciA9IHJzYV9lbmNyeXB0X2tleShwdCwgICAgLyogZGF0YSB3ZSB3aXNoIHRvIGVuY3J5cHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAgICAvKiBkYXRhIGlzIDE2IGJ5dGVzIGxvbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCAgICAvKiB3aGVyZSB0byBzdG9yZSBjaXBoZXJ0ZXh0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsMSwgICAgLyogbGVuZ3RoIG9mIGNpcGhlcnRleHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RBcHAiLCAgICAvKiBvdXIgbHBhcmFtIGZvciB0aGlzIHByb2dyYW0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LCAgICAvKiBscGFyYW0gaXMgNyBieXRlcyBsb25nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgLyogUFJORyBzdGF0ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19pZHgsICAgIC8qIHBybmcgaWR4ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2lkeCwgICAgLyogaGFzaCBpZHggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5KSAgICAvKiBvdXIgUlNBIGtleSAqLworICAgaWYgKChlcnIgPSByc2FfZW5jcnlwdF9rZXkocHQsIC8qIGRhdGEgd2Ugd2lzaCB0byBlbmNyeXB0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgLyogZGF0YSBpcyAxNiBieXRlcyBsb25nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgLyogd2hlcmUgdG8gc3RvcmUgY2lwaGVydGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbDEsIC8qIGxlbmd0aCBvZiBjaXBoZXJ0ZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICJUZXN0QXBwIiwgLyogb3VyIGxwYXJhbSBmb3IgdGhpcyBwcm9ncmFtICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgLyogbHBhcmFtIGlzIDcgYnl0ZXMgbG9uZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIFBSTkcgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfaWR4LCAvKiBwcm5nIGlkeCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9pZHgsIC8qIGhhc2ggaWR4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkgLyogb3VyIFJTQSBrZXkgKi8KICAgICAgICApICE9IENSWVBUX09LKSB7CiAgICAgICAgcHJpbnRmKCJyc2FfZW5jcnlwdF9rZXkgJXMiLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CiAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKQEAgLTI3NjYsMjM0ICszNTU5LDQ2IEBACiAgICAvKiBpZiBhbGwgd2VudCB3ZWxsIHB0ID09IHB0MiwgbDIgPT0gMTYsIHJlcyA9PSAxICovCiB9CiBcZW5ke3ZlcmJhdGltfQotCi0KLVxjaGFwdGVye0RpZmZpZS1IZWxsbWFuIEtleSBFeGNoYW5nZX0KLQotXHNlY3Rpb257QmFja2dyb3VuZH0KLQotRGlmZmllLUhlbGxtYW4gd2FzIHRoZSBvcmlnaW5hbCBwdWJsaWMga2V5IHN5c3RlbSBwcm9wb3NlZC4gIFRoZSBzeXN0ZW0gaXMgYmFzZWQgdXBvbiB0aGUgZ3JvdXAgc3RydWN0dXJlCi1vZiBmaW5pdGUgZmllbGRzLiAgRm9yIERpZmZpZS1IZWxsbWFuIGEgcHJpbWUgJHAkIGlzIGNob3NlbiBhbmQgYSBgYGJhc2UnJyAkYiQgc3VjaCB0aGF0ICRiXnhcbWJveHsgfShcbWJveHttb2QgfXApJCAKLWdlbmVyYXRlcyBhIGxhcmdlIHN1Yi1ncm91cCBvZiBwcmltZSBvcmRlciAoZm9yIHVuaXF1ZSB2YWx1ZXMgb2YgJHgkKS4KLQotQSBzZWNyZXQga2V5IGlzIGFuIGV4cG9uZW50ICR4JCBhbmQgYSBwdWJsaWMga2V5IGlzIHRoZSB2YWx1ZSBvZiAkeSBcZXF1aXYgZ154XG1ib3h7IH0oXG1ib3h7bW9kIH1wKSQuICBUaGUgdGVybQotYGBkaXNjcmV0ZSBsb2dhcml0aG0nJyBkZW5vdGVzIHRoZSBhY3Rpb24gb2YgZmluZGluZyAkeCQgZ2l2ZW4gb25seSAkeSQsICRnJCBhbmQgJHAkLiAgVGhlIGtleSBleGNoYW5nZSBwYXJ0IG9mCi1EaWZmaWUtSGVsbG1hbiBhcmlzZXMgZnJvbSB0aGUgZmFjdCB0aGF0IHR3byB1c2VycyBBIGFuZCBCIHdpdGgga2V5cyAkKEFfeCwgQV95KSQgYW5kICQoQl94LCBCX3kpJCBjYW4gZXhjaGFuZ2UgCi1hIHNoYXJlZCBrZXkgJEsgXGVxdWl2IEJfeV57QV94fSBcZXF1aXYgQV95XntCX3h9IFxlcXVpdiBnXntBX3hCX3h9XG1ib3h7IH0oXG1ib3h7bW9kIH1wKSQuCi0KLUZyb20gdGhpcyBwdWJsaWMgZW5jcnlwdGlvbiBhbmQgc2lnbmF0dXJlcyBjYW4gYmUgZGV2ZWxvcGVkLiAgVGhlIHRyaXZpYWwgd2F5IHRvIGVuY3J5cHQgKGZvciBleGFtcGxlKSB1c2luZyBhIHB1YmxpYyBrZXkgCi0keSQgaXMgdG8gcGVyZm9ybSB0aGUga2V5IGV4Y2hhbmdlIG9mZmxpbmUuICBUaGUgc2VuZGVyIGludmVudHMgYSBrZXkgJGskIGFuZCBpdHMgcHVibGljIGNvcHkgCi0kaycgXGVxdWl2IGdea1xtYm94eyB9KFxtYm94e21vZCB9cCkkIGFuZCB1c2VzICRLIFxlcXVpdiBrJ157QV94fVxtYm94eyB9KFxtYm94e21vZCB9cCkkIGFzIGEga2V5IHRvIGVuY3J5cHQKLXRoZSBtZXNzYWdlIHdpdGguICBUeXBpY2FsbHkgJEskIHdvdWxkIGJlIHNlbnQgdG8gYSBvbmUtd2F5IGhhc2ggYW5kIHRoZSBtZXNzYWdlIGRpZ2VzdGVkIHVzZWQgYXMgYSBrZXkgaW4gYSAKLXN5bW1ldHJpYyBjaXBoZXIuCi0KLUl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBvcmRlciBvZiB0aGUgc3ViLWdyb3VwIHRoYXQgJGckIGdlbmVyYXRlcyBub3Qgb25seSBiZSBsYXJnZSBidXQgYWxzbyBwcmltZS4gIFRoZXJlIGFyZQotZGlzY3JldGUgbG9nYXJpdGhtIGFsZ29yaXRobXMgdGhhdCB0YWtlICRcc3FydCByJCB0aW1lIGdpdmVuIHRoZSBvcmRlciAkciQuICBUaGUgZGlzY3JldGUgbG9nYXJpdGhtIGNhbiBiZSBjb21wdXRlZAotbW9kdWxvIGVhY2ggcHJpbWUgZmFjdG9yIG9mICRyJCBhbmQgdGhlIHJlc3VsdHMgY29tYmluZWQgdXNpbmcgdGhlIENoaW5lc2UgUmVtYWluZGVyIFRoZW9yZW0uICBJbiB0aGUgY2FzZXMgd2hlcmUgCi0kciQgaXMgYGBCLVNtb290aCcnIChlLmcuIGFsbCBzbWFsbCBmYWN0b3JzIG9yIHBvd2VycyBvZiBzbWFsbCBwcmltZSBmYWN0b3JzKSB0aGUgc29sdXRpb24gaXMgdHJpdmlhbCB0byBmaW5kLgotCi1UbyB0aHdhcnQgc3VjaCBhdHRhY2tzIHRoZSBwcmltZXMgYW5kIGJhc2VzIGluIHRoZSBsaWJyYXJ5IGhhdmUgYmVlbiBkZXNpZ25lZCBhbmQgZml4ZWQuICBHaXZlbiBhIHByaW1lICRwJCB0aGUgb3JkZXIgb2YKLSB0aGUgc3ViLWdyb3VwIGdlbmVyYXRlZCBpcyBhIGxhcmdlIHByaW1lIG5hbWVseSAke3AgLSAxfSBcb3ZlciAyJC4gIFN1Y2ggcHJpbWVzIGFyZSBrbm93biBhcyBgYHN0cm9uZyBwcmltZXMnJyBhbmQgdGhlIAotc21hbGxlciBwcmltZSAoZS5nLiB0aGUgb3JkZXIgb2YgdGhlIGJhc2UpIGFyZSBrbm93biBhcyBTb3BoaWUtR2VybWFpbmUgcHJpbWVzLgotCi1cc2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KLQotVGhpcyBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgY29yZSBEaWZmaWUtSGVsbG1hbiBmdW5jdGlvbnMgc28geW91IGNhbiBuZWdvdGlhdGUga2V5cyBvdmVyIGluc2VjdXJlIG1lZGl1bXMuICBUaGUgcm91dGluZXMgCi1wcm92aWRlZCBhcmUgcmVsYXRpdmVseSBlYXN5IHRvIHVzZSBhbmQgb25seSB0YWtlIHR3byBmdW5jdGlvbiBjYWxscyB0byBuZWdvdGlhdGUgYSBzaGFyZWQga2V5LiAgVGhlcmUgaXMgYSBzdHJ1Y3R1cmUKLWNhbGxlZCBgYGRoXF9rZXknJyB3aGljaCBzdG9yZXMgdGhlIERpZmZpZS1IZWxsbWFuIGtleSBpbiBhIGZvcm1hdCB0aGVzZSByb3V0aW5lcyBjYW4gdXNlLiAgVGhlIGZpcnN0IHJvdXRpbmUgaXMgdG8KLW1ha2UgYSBEaWZmaWUtSGVsbG1hbiBwcml2YXRlIGtleSBwYWlyOgotXGluZGV4e2RoXF9tYWtlXF9rZXkoKX0KLVxiZWdpbnt2ZXJiYXRpbX0KLWludCBkaF9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIAotICAgICAgICAgICAgICAgIGludCBrZXlzaXplLCBkaF9rZXkgKmtleSk7Ci1cZW5ke3ZlcmJhdGltfQotVGhlIGBga2V5c2l6ZScnIGlzIHRoZSBzaXplIG9mIHRoZSBtb2R1bHVzIHlvdSB3YW50IGluIGJ5dGVzLiAgQ3VycmVudGx5IHN1cHBvcnQgc2l6ZXMgYXJlIDk2IHRvIDUxMiBieXRlcyB3aGljaCBjb3JyZXNwb25kIAotdG8ga2V5IHNpemVzIG9mIDc2OCB0byA0MDk2IGJpdHMuIFRoZSBzbWFsbGVyIHRoZSBrZXkgdGhlIGZhc3RlciBpdCBpcyB0byB1c2UgaG93ZXZlciBpdCB3aWxsIGJlIGxlc3Mgc2VjdXJlLiAgV2hlbiAKLXNwZWNpZnlpbmcgYSBzaXplIG5vdCBleHBsaWNpdGx5IHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeSBpdCB3aWxsIHJvdW5kIHtcZW0gdXB9IHRvIHRoZSBuZXh0IGtleSBzaXplLiAgSWYgdGhlIHNpemUgaXMgCi1hYm92ZSA1MTIgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IuICBTbyBpZiB5b3UgcGFzcyBgYGtleXNpemUgPT0gMzInJyBpdCB3aWxsIHVzZSBhIDc2OCBiaXQga2V5IGJ1dCBpZiB5b3UgcGFzcyAKLWBga2V5c2l6ZSA9PSAyMDAwMCcnIGl0IHdpbGwgcmV0dXJuIGFuIGVycm9yLiAgVGhlIHByaW1lcyBhbmQgZ2VuZXJhdG9ycyB1c2VkIGFyZSBidWlsdC1pbnRvIHRoZSBsaWJyYXJ5IGFuZCB3ZXJlIGRlc2lnbmVkIAotdG8gbWVldCB2ZXJ5IHNwZWNpZmljIGdvYWxzLiAgVGhlIHByaW1lcyBhcmUgc3Ryb25nIHByaW1lcyB3aGljaCBtZWFucyB0aGF0IGlmICRwJCBpcyB0aGUgcHJpbWUgdGhlbgotJHAtMSQgaXMgZXF1YWwgdG8gJDJyJCB3aGVyZSAkciQgaXMgYSBsYXJnZSBwcmltZS4gIFRoZSBiYXNlcyBhcmUgY2hvc2VuIHRvIGdlbmVyYXRlIGEgZ3JvdXAgb2Ygb3JkZXIgJHIkIHRvIHByZXZlbnQKLWxlYWtpbmcgYSBiaXQgb2YgdGhlIGtleS4gIFRoaXMgbWVhbnMgdGhlIGJhc2VzIGdlbmVyYXRlIGEgdmVyeSBsYXJnZSBwcmltZSBvcmRlciBncm91cCB3aGljaCBpcyBnb29kIHRvIG1ha2UgY3J5cHRhbmFseXNpcwotaGFyZC4KLQotVGhlIG5leHQgdHdvIHJvdXRpbmVzIGFyZSBmb3IgZXhwb3J0aW5nL2ltcG9ydGluZyBEaWZmaWUtSGVsbG1hbiBrZXlzIGluIGEgYmluYXJ5IGZvcm1hdC4gIFRoaXMgaXMgdXNlZnVsIGZvciB0cmFuc3BvcnQKLW92ZXIgY29tbXVuaWNhdGlvbiBtZWRpdW1zLiAgCi0KLVxpbmRleHtkaFxfZXhwb3J0KCl9IFxpbmRleHtkaFxfaW1wb3J0KCl9Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgZGhfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgaW50IHR5cGUsIGRoX2tleSAqa2V5KTsKLQotaW50IGRoX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZGhfa2V5ICprZXkpOwotXGVuZHt2ZXJiYXRpbX0KLQotVGhlc2UgdHdvIGZ1bmN0aW9ucyB3b3JrIGp1c3QgbGlrZSB0aGUgYGByc2FcX2V4cG9ydCgpJycgYW5kIGBgcnNhXF9pbXBvcnQoKScnIGZ1bmN0aW9ucyBleGNlcHQgdGhlc2Ugd29yayB3aXRoIAotRGlmZmllLUhlbGxtYW4ga2V5cy4gSXRzIGltcG9ydGFudCB0byBub3RlIHlvdSBkbyBub3QgaGF2ZSB0byBmcmVlIHRoZSByYW0gZm9yIGEgYGBkaFxfa2V5JycgaWYgYW4gaW1wb3J0IGZhaWxzLiAgWW91IGNhbiBmcmVlIGEgCi1gYGRoXF9rZXknJyB1c2luZzoKLVxiZWdpbnt2ZXJiYXRpbX0KLXZvaWQgZGhfZnJlZShkaF9rZXkgKmtleSk7Ci1cZW5ke3ZlcmJhdGltfQotQWZ0ZXIgeW91IGhhdmUgZXhwb3J0ZWQgYSBjb3B5IG9mIHlvdXIgcHVibGljIGtleSAodXNpbmcge1xiZiBQS1xfUFVCTElDfSBhcyBgYHR5cGUnJykgeW91IGNhbiBub3cgY3JlYXRlIGEgc2hhcmVkIHNlY3JldCAKLXdpdGggdGhlIG90aGVyIHVzZXIgdXNpbmc6Ci1caW5kZXh7ZGhcX3NoYXJlZFxfc2VjcmV0KCl9Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgZGhfc2hhcmVkX3NlY3JldChkaF9rZXkgKnByaXZhdGVfa2V5LCAKLSAgICAgICAgICAgICAgICAgICAgIGRoX2tleSAqcHVibGljX2tleSwgCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7Ci1cZW5ke3ZlcmJhdGltfQotCi1XaGVyZSBgYHByaXZhdGVcX2tleScnIGlzIHRoZSBrZXkgeW91IG1hZGUgYW5kIGBgcHVibGljXF9rZXknJyBpcyB0aGUgY29weSBvZiB0aGUgcHVibGljIGtleSB0aGUgb3RoZXIgdXNlciBzZW50IHlvdS4gIFRoZSByZXN1bHQgZ29lcwotaW50byBgYG91dCcnIGFuZCB0aGUgbGVuZ3RoIGludG8gYGBvdXRsZW4nJy4gIElmIGFsbCB3ZW50IGNvcnJlY3RseSB0aGUgZGF0YSBpbiBgYG91dCcnIHNob3VsZCBiZSBpZGVudGljYWwgZm9yIGJvdGggcGFydGllcy4gIEl0IGlzIGltcG9ydGFudCB0bwotbm90ZSB0aGF0IHRoZSB0d28ga2V5cyBoYXZlIHRvIGJlIHRoZSBzYW1lIHNpemUgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yay4gIFRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzaXplIG9mIGEKLWtleToKLVxpbmRleHtkaFxfZ2V0XF9zaXplKCl9Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgZGhfZ2V0X3NpemUoZGhfa2V5ICprZXkpOwotXGVuZHt2ZXJiYXRpbX0KLVRoaXMgcmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbW9kdWx1cyBjaG9zZW4gZm9yIHRoYXQga2V5LgotCi1cc3Vic2VjdGlvbntSZW1hcmtzIG9uIFVzYWdlfQotSXRzIGltcG9ydGFudCB0aGF0IHlvdSBoYXNoIHRoZSBzaGFyZWQga2V5IGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0IGFzIGEga2V5IGZvciBhIHN5bW1ldHJpYyBjaXBoZXIgb3Igc29tZXRoaW5nLiAgQW4gCi1leGFtcGxlIHByb2dyYW0gdGhhdCBjb21tdW5pY2F0ZXMgb3ZlciBzb2NrZXRzLCB1c2luZyBNRDUgYW5kIDEwMjQtYml0IERIIGtleXMgaXNcZm9vdG5vdGV7VGhpcyBmdW5jdGlvbiBpcyBhIHNtYWxsIGV4YW1wbGUuICBJdCBpcyBzdWdnZXN0ZWQgdGhhdCBwcm9wZXIgcGFja2FnaW5nIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHB1YmxpYyBrZXkgc2VudCBpcyB0cnVuY2F0ZWQgdGhlc2Ugcm91dGluZXMgd2lsbCBub3QgZGV0ZWN0IHRoYXQufToKLVxuZXdwYWdlCi1cYmVnaW57c21hbGx9Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgZXN0YWJsaXNoX3NlY3VyZV9zb2NrZXQoaW50IHNvY2ssIGludCBtb2RlLCB1bnNpZ25lZCBjaGFyICprZXksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZykKLXsKLSAgIHVuc2lnbmVkIGNoYXIgYnVmWzQwOTZdLCBidWYyWzQwOTZdOwotICAgdW5zaWduZWQgbG9uZyB4LCBsZW47Ci0gICBpbnQgcmVzLCBlcnIsIGlubGVuOwotICAgZGhfa2V5IG15a2V5LCB0aGVpcmtleTsKLQotICAgLyogbWFrZSB1cCBvdXIgcHJpdmF0ZSBrZXkgKi8KLSAgIGlmICgoZXJyID0gZGhfbWFrZV9rZXkocHJuZywgd3BybmcsIDEyOCwgJm15a2V5KSkgIT0gQ1JZUFRfT0spICB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgfQotCi0gICAvKiBleHBvcnQgb3VyIGtleSBhcyBwdWJsaWMgKi8gCi0gICB4ID0gc2l6ZW9mKGJ1Zik7Ci0gICBpZiAoKGVyciA9IGRoX2V4cG9ydChidWYsICZ4LCBQS19QVUJMSUMsICZteWtleSkpICE9IENSWVBUX09LKSB7Ci0gICAgICByZXMgPSBlcnI7Ci0gICAgICBnb3RvIGRvbmUyOwotICAgfQotCi0gICBpZiAobW9kZSA9PSAwKSB7Ci0gICAgICAvKiBtb2RlIDAgc28gd2Ugc2VuZCBmaXJzdCAqLwotICAgICAgaWYgKHNlbmQoc29jaywgYnVmLCB4LCAwKSAhPSB4KSB7Ci0gICAgICAgICByZXMgPSBDUllQVF9FUlJPUjsKLSAgICAgICAgIGdvdG8gZG9uZTI7Ci0gICAgICB9ICAgICAgICAgIAotCi0gICAgICAvKiBnZXQgdGhlaXIga2V5ICovCi0gICAgICBpZiAoKGlubGVuID0gcmVjdihzb2NrLCBidWYyLCBzaXplb2YoYnVmMiksIDApKSA8PSAwKSB7Ci0gICAgICAgICByZXMgPSBDUllQVF9FUlJPUjsKLSAgICAgICAgIGdvdG8gZG9uZTI7Ci0gICAgICB9Ci0gICB9IGVsc2UgewotICAgICAgLyogbW9kZSA+MCBzbyB3ZSBzZW5kIHNlY29uZCAqLwotICAgICAgaWYgKChpbmxlbiA9IHJlY3Yoc29jaywgYnVmMiwgc2l6ZW9mKGJ1ZjIpLCAwKSkgPD0gMCkgewotICAgICAgICAgcmVzID0gQ1JZUFRfRVJST1I7Ci0gICAgICAgICBnb3RvIGRvbmUyOwotICAgICAgfQotCi0gICAgICBpZiAoc2VuZChzb2NrLCBidWYsIHgsIDApICE9IHgpIHsKLSAgICAgICAgIHJlcyA9IENSWVBUX0VSUk9SOwotICAgICAgICAgZ290byBkb25lMjsKLSAgICAgIH0KLSAgIH0KLQotICAgaWYgKChlcnIgPSBkaF9pbXBvcnQoYnVmMiwgaW5sZW4sICZ0aGVpcmtleSkpICE9IENSWVBUX09LKSB7IAotICAgICAgcmVzID0gZXJyOwotICAgICAgZ290byBkb25lMjsKLSAgIH0KLQotICAgLyogbWFrZSBzaGFyZWQgc2VjcmV0ICovCi0gICB4ID0gc2l6ZW9mKGJ1Zik7Ci0gICBpZiAoKGVyciA9IGRoX3NoYXJlZF9zZWNyZXQoJm15a2V5LCAmdGhlaXJrZXksIGJ1ZiwgJngpKSAhPSBDUllQVF9PSykgewotICAgICAgcmVzID0gZXJyOwotICAgICAgZ290byBkb25lOwotICAgfQotIAotICAgLyogaGFzaCBpdCAqLwotICAgbGVuID0gMTY7ICAgICAgICAvKiBkZWZhdWx0IGlzIE1ENSBzbyAia2V5IiBtdXN0IGJlIGF0IGxlYXN0IDE2IGJ5dGVzIGxvbmcgKi8KLSAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoZmluZF9oYXNoKCJtZDUiKSwgYnVmLCB4LCBrZXksICZsZW4pKSAhPSBDUllQVF9PSykgewotICAgICAgcmVzID0gZXJyOwotICAgICAgZ290byBkb25lOwotICAgfQotCi0gICAvKiBjbGVhbiB1cCBhbmQgcmV0dXJuICovCi0gICByZXMgPSBDUllQVF9PSzsKLWRvbmU6Ci0gICBkaF9mcmVlKCZ0aGVpcmtleSk7Ci1kb25lMjoKLSAgIGRoX2ZyZWUoJm15a2V5KTsKLSAgIHplcm9tZW0oYnVmLCAgc2l6ZW9mKGJ1ZikpOwotICAgemVyb21lbShidWYyLCBzaXplb2YoYnVmMikpOwotICAgcmV0dXJuIHJlczsKLX0KLVxlbmR7dmVyYmF0aW19CiBcZW5ke3NtYWxsfQotXG5ld3BhZ2UKLVxzdWJzZWN0aW9ue1JlbWFya3Mgb24gVGhlIFNuaXBwZXR9Ci1XaGVuIHRoZSBhYm92ZSBjb2RlIHNuaXBwZXQgaXMgZG9uZSAoYXNzdW1pbmcgYWxsIHdlbnQgd2VsbCkgdGhlaXIgd2lsbCBiZSBhIHNoYXJlZCAxMjgtYml0IGtleSBpbiB0aGUgYGBrZXknJyBhcnJheQotcGFzc2VkIHRvIGBgZXN0YWJsaXNoXF9zZWN1cmVcX3NvY2tldCgpJycuCiAKLVxzZWN0aW9ue090aGVyIERpZmZpZS1IZWxsbWFuIEZ1bmN0aW9uc30KLUluIG9yZGVyIHRvIHRlc3QgdGhlIERpZmZpZS1IZWxsbWFuIGZ1bmN0aW9uIGludGVybmFsIHdvcmtpbmdzIChlLmcuIHRoZSBwcmltZXMgYW5kIGJhc2VzKSB0aGVpciBpcyBhIHRlc3QgZnVuY3Rpb24gbWFkZQotYXZhaWxhYmxlOgotXGluZGV4e2RoXF90ZXN0KCl9CitcbXlzZWN0aW9ue1JTQSBLZXkgRm9ybWF0fQorCitUaGUgUlNBIGtleSBmb3JtYXQgYWRvcHRlZCBmb3IgZXhwb3J0aW5nIGFuZCBpbXBvcnRpbmcga2V5cyBpcyB0aGUgUEtDUyBcIzEgZm9ybWF0IGRlZmluZWQgYnkgdGhlIEFTTi4xIGNvbnN0cnVjdHMga25vd24gYXMgCitSU0FQdWJsaWNLZXkgYW5kIFJTQVByaXZhdGVLZXkuICBBZGRpdGlvbmFsbHksIHRoZSBPcGVuU1NMIGtleSBmb3JtYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBpbXBvcnQgZnVuY3Rpb24gb25seS4KKworXHN1YnNlY3Rpb257UlNBIEtleSBFeHBvcnR9CitUbyBleHBvcnQgYSBSU0Ega2V5IHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7cnNhXF9leHBvcnQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBkaF90ZXN0KHZvaWQpOworaW50IHJzYV9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB0eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGV4cG9ydCB0aGUgUlNBIGtleSBpbiBlaXRoZXIgYSBSU0FQdWJsaWNLZXkgb3IgUlNBUHJpdmF0ZUtleSAoUEtDUyBcIzEgdHlwZXMpIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgXHRleHRpdHt0eXBlfS4gIFdoZW4gaXQgaXMgCitzZXQgdG8gXHRleHRiZntQS1xfUFJJVkFURX0gdGhlIGV4cG9ydCBmb3JtYXQgd2lsbCBiZSBSU0FQcml2YXRlS2V5IGFuZCBvdGhlcndpc2UgaXQgd2lsbCBiZSBSU0FQdWJsaWNLZXkuCisKK1xzdWJzZWN0aW9ue1JTQSBLZXkgSW1wb3J0fQorVG8gaW1wb3J0IGEgUlNBIGtleSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e3JzYVxfaW1wb3J0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyBmdW5jdGlvbiByZXR1cm5zIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgYmFzZXMgYW5kIHByaW1lcyBpbiB0aGUgbGlicmFyeSBhcmUgY29ycmVjdC4gIFRoZXJlIGlzIG9uZSBsYXN0IGhlbHBlciAKLWZ1bmN0aW9uOgotXGluZGV4e2RoXF9zaXplcygpfQotXGJlZ2lue3ZlcmJhdGltfQotdm9pZCBkaF9zaXplcyhpbnQgKmxvdywgaW50ICpoaWdoKTsKLVxlbmR7dmVyYmF0aW19Ci1XaGljaCBzdG9yZXMgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGtleSBzaXplcyBzdXBwb3J0IGludG8gdGhlIHR3byB2YXJpYWJsZXMuCitUaGlzIHdpbGwgaW1wb3J0IHRoZSBrZXkgc3RvcmVkIGluIFx0ZXh0aXR7aW5sZW59IGFuZCBpbXBvcnQgaXQgdG8gXHRleHRpdHtrZXl9LiAgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIGl0IHdpbGwgYXV0b21hdGljYWxseSBmcmVlIGFueSBhbGxvY2F0ZWQgbWVtb3J5LiAgVGhpcworZnVuY3Rpb24gY2FuIGltcG9ydCBib3RoIFJTQVB1YmxpY0tleSBhbmQgUlNBUHJpdmF0ZUtleSBmb3JtYXRzLgogCi1cc2VjdGlvbntESCBQYWNrZXR9Ci1TaW1pbGFyIHRvIHRoZSBSU0EgcmVsYXRlZCBmdW5jdGlvbnMgdGhlcmUgYXJlIGZ1bmN0aW9ucyB0byBlbmNyeXB0IG9yIGRlY3J5cHQgc3ltbWV0cmljIGtleXMgdXNpbmcgdGhlIERIIHB1YmxpYyBrZXkKLWFsZ29yaXRobXMuICAKLVxpbmRleHtkaFxfZW5jcnlwdFxfa2V5KCl9IFxpbmRleHtkaFxfZGVjcnlwdFxfa2V5KCl9Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgZGhfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqbGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBoYXNoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBkaF9rZXkgKmtleSk7Ci0KLWludCBkaF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBkaF9rZXkgKmtleSk7Ci1cZW5ke3ZlcmJhdGltfQotV2hlcmUgYGBpbicnIGlzIGFuIGlucHV0IHN5bW1ldHJpYyBrZXkgb2Ygbm8gbW9yZSB0aGFuIDMyIGJ5dGVzLiAgRXNzZW50aWFsbHkgdGhlc2Ugcm91dGluZXMgY3JlYXRlZCBhIHJhbmRvbSBwdWJsaWMga2V5Ci1hbmQgZmluZCB0aGUgaGFzaCBvZiB0aGUgc2hhcmVkIHNlY3JldC4gIFRoZSBtZXNzYWdlIGRpZ2VzdCBpcyB0aGFuIFhPUidlZCBhZ2FpbnN0IHRoZSBzeW1tZXRyaWMga2V5LiAgQWxsIG9mIHRoZSAKLXJlcXVpcmVkIGRhdGEgaXMgcGxhY2VkIGluIGBgb3V0JycgYnkgYGBkaFxfZW5jcnlwdFxfa2V5KCknJy4gICBUaGUgaGFzaCBtdXN0IHByb2R1Y2UgYSBtZXNzYWdlIGRpZ2VzdCBhdCBsZWFzdCBhcyBsYXJnZQotYXMgdGhlIHN5bW1ldHJpYyBrZXkgeW91IGFyZSB0cnlpbmcgdG8gc2hhcmUuCi0KLVNpbWlsYXIgdG8gdGhlIFJTQSBzeXN0ZW0geW91IGNhbiBzaWduIGFuZCB2ZXJpZnkgYSBoYXNoIG9mIGEgbWVzc2FnZS4KLVxpbmRleHtkaFxfc2lnblxfaGFzaCgpfSBcaW5kZXh7ZGhcX3ZlcmlmeVxfaGFzaCgpfQotXGJlZ2lue3ZlcmJhdGltfQotaW50IGRoX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGRoX2tleSAqa2V5KTsKLQotaW50IGRoX3ZlcmlmeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgdW5zaWduZWQgbG9uZyBzaWdsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgbG9uZyBoYXNobGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsIGRoX2tleSAqa2V5KTsKLVxlbmR7dmVyYmF0aW19Ci0KLVRoZSBgYGRoXF9zaWduXF9oYXNoJycgZnVuY3Rpb24gc2lnbnMgdGhlIG1lc3NhZ2UgaGFzaCBpbiBgYGluJycgb2YgbGVuZ3RoIGBgaW5sZW4nJyBhbmQgZm9ybXMgYSBESCBwYWNrZXQgaW4gYGBvdXQnJy4gIAotVGhlIGBgZGhcX3ZlcmlmeVxfaGFzaCcnIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBESCBzaWduYXR1cmUgaW4gYGBzaWcnJyBhZ2FpbnN0IHRoZSBoYXNoIGluIGBgaGFzaCcnLiAgSXQgc2V0cyBgYHN0YXQnJwotdG8gbm9uLXplcm8gaWYgdGhlIHNpZ25hdHVyZSBwYXNzZXMgb3IgemVybyBpZiBpdCBmYWlscy4KK0FzIG9mIHYxLjA2IHRoaXMgZnVuY3Rpb24gY2FuIGFsc28gaW1wb3J0IE9wZW5TU0wgREVSIGZvcm1hdHRlZCBwdWJsaWMgUlNBIGtleXMuICBUaGV5IGFyZSBlc3NlbnRpYWxseSBlbmNhcHN1bGF0ZWQgUlNBUHVibGljS2V5cy4gIExpYlRvbUNyeXB0IHdpbGwKK2ltcG9ydCB0aGUga2V5LCBzdHJpcCBvZmYgdGhlIGFkZGl0aW9uYWwgZGF0YSAoaXQncyB0aGUgcHJlZmVycmVkIGhhc2gpIGFuZCBmaWxsIGluIHRoZSByc2FcX2tleSBzdHJ1Y3R1cmUgYXMgaWYgaXQgd2VyZSBhIG5hdGl2ZSBSU0FQdWJsaWNLZXkuICBOb3RlIHRoYXQKK3RoZXJlIGlzIG5vIGZ1bmN0aW9uIHByb3ZpZGVkIHRvIGV4cG9ydCBpbiB0aGlzIGZvcm1hdC4gIAogCiBcY2hhcHRlcntFbGxpcHRpYyBDdXJ2ZSBDcnlwdG9ncmFwaHl9CiAKLVxzZWN0aW9ue0JhY2tncm91bmR9CitcbXlzZWN0aW9ue0JhY2tncm91bmR9CiBUaGUgbGlicmFyeSBwcm92aWRlcyBhIHNldCBvZiBjb3JlIEVDQyBmdW5jdGlvbnMgYXMgd2VsbCB0aGF0IGFyZSBkZXNpZ25lZCB0byBiZSB0aGUgRWxsaXB0aWMgQ3VydmUgYW5hbG9neSBvZiBhbGwgb2YgdGhlIAogRGlmZmllLUhlbGxtYW4gcm91dGluZXMgaW4gdGhlIHByZXZpb3VzIGNoYXB0ZXIuICBFbGxpcHRpYyBjdXJ2ZXMgKG9mIGNlcnRhaW4gZm9ybXMpIGhhdmUgdGhlIGJlbmVmaXQgdGhhdCB0aGV5IGFyZSBoYXJkZXIKIHRvIGF0dGFjayAobm8gc3ViLWV4cG9uZW50aWFsIGF0dGFja3MgZXhpc3QgdW5saWtlIG5vcm1hbCBESCBjcnlwdG8pIGluIGZhY3QgdGhlIGZhc3Rlc3QgYXR0YWNrIHJlcXVpcmVzIHRoZSBzcXVhcmUgcm9vdApAQCAtMzAwNSw2ICszNjEwLDkgQEAKIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KIFxlbmR7dmVyYmF0aW19CiAKK0FzIG9mIHYxLjE1IHRocmVlIG5ldyBjdXJ2ZXMgZnJvbSB0aGUgU0VDRyBzdGFuZGFyZHMgYXJlIGFsc28gaW5jbHVkZWQgdGhleSBhcmUgdGhlIHNlY3AxMTJyMSwgc2VjcDEyOHIxLCBhbmQgc2VjcDE2MHIxIGN1cnZlcy4gIFRoZXNlIGN1cnZlcyB3ZXJlIGFkZGVkIHRvIAorc3VwcG9ydCBzbWFsbGVyIGRldmljZXMgd2hpY2ggZG8gbm90IG5lZWQgYXMgbGFyZ2Uga2V5cyBmb3Igc2VjdXJpdHkuCisKIFRoZXkgYXJlIGFsbCBjdXJ2ZXMgb3ZlciB0aGUgaW50ZWdlcnMgbW9kdWxvIGEgcHJpbWUuICBUaGUgY3VydmVzIGhhdmUgdGhlIGJhc2ljIGVxdWF0aW9uIHRoYXQgaXM6CiBcYmVnaW57ZXF1YXRpb259CiB5XjIgPSB4XjMgLSAzeCArIGJcbWJveHsgfShcbWJveHttb2QgfXApCkBAIC0zMDEyLDE3ICszNjIwLDU0IEBACiAKIFRoZSB2YXJpYWJsZSAkYiQgaXMgY2hvc2VuIHN1Y2ggdGhhdCB0aGUgbnVtYmVyIG9mIHBvaW50cyBpcyBuZWFybHkgbWF4aW1hbC4gIEluIGZhY3QgdGhlIG9yZGVyIG9mIHRoZSBiYXNlIHBvaW50cyAkXGJldGEkIAogcHJvdmlkZWQgYXJlIHZlcnkgY2xvc2UgdG8gJHAkIHRoYXQgaXMgJFx2ZXJ0IFx2ZXJ0IFxwaGkoXGJldGEpIFx2ZXJ0IFx2ZXJ0IFxhcHByb3ggXHZlcnQgXHZlcnQgcCBcdmVydCBcdmVydCQuICBUaGUgY3VydmVzCi1yYW5nZSBpbiBvcmRlciBmcm9tICRcYXBwcm94IDJeezE5Mn0kIHBvaW50cyB0byAkXGFwcHJveCAyXns1MjF9JC4gIEFjY29yZGluZyB0byB0aGUgc291cmNlIGRvY3VtZW50IGFueSBrZXkgc2l6ZSBncmVhdGVyCityYW5nZSBpbiBvcmRlciBmcm9tICRcYXBwcm94IDJeezExMn0kIHBvaW50cyB0byAkXGFwcHJveCAyXns1MjF9JC4gIEFjY29yZGluZyB0byB0aGUgc291cmNlIGRvY3VtZW50IGFueSBrZXkgc2l6ZSBncmVhdGVyCiB0aGFuIG9yIGVxdWFsIHRvIDI1Ni1iaXRzIGlzIHN1ZmZpY2llbnQgZm9yIGxvbmcgdGVybSBzZWN1cml0eS4gIAogCi1cc2VjdGlvbntLZXkgRm9ybWF0fQotTGliVG9tQ3J5cHQgdXNlcyBpdCdzIG93biBmb3JtYXQgZm9yIEVDQyBwdWJsaWMgYW5kIHByaXZhdGUga2V5cy4gIFdoaWxlIEFOU0kgWDkuNjIgcGFydGlhbGx5IHNwZWNpZmllcyBrZXkgZm9ybWF0cyAoaXQgY292ZXJzIHB1YmxpYyBrZXlzKSBpdCBkb2VzIGl0IGluIGEgbGVzcwotdGhhbiBpZGVhbGx5IHNpbXBsZSBtYW5uZXIuICBJbiB0aGUgY2FzZSBvZiBMaWJUb21DcnlwdCBpdCBpcyBtZWFudCBcdGV4dGJme3NvbGVseX0gZm9yIE5JU1QgJEdGKHApJCBjdXJ2ZXMuICBUaGUgZm9ybWF0IG9mIHRoZSBrZXlzIGlzIGFzIGZvbGxvd3M6CitcbXlzZWN0aW9ue0ZpeGVkIFBvaW50IE9wdGltaXphdGlvbnN9CitcaW5kZXh7Rml4ZWQgUG9pbnQgRUNDfQorXGluZGV4e01FQ0NcX0ZQfQorQXMgb2YgdjEuMTIgb2YgTGliVG9tQ3J5cHQsIHN1cHBvcnQgZm9yIEZpeGVkIFBvaW50IEVDQyBwb2ludCBtdWx0aXBsaWNhdGlvbiBoYXMgYmVlbiBhZGRlZC4gIEl0IGlzIGEgZ2VuZXJpYyBvcHRpbWl6YXRpb24gdGhhdCBpcworc3VwcG9ydGVkIGJ5IGFueSBjb25mb3JtaW5nIG1hdGggcGx1Z2luLiAgSXQgaXMgZW5hYmxlZCBieSBkZWZpbmluZyBcdGV4dGJme01FQ0NcX0ZQfSBkdXJpbmcgdGhlIGJ1aWxkLCBzdWNoIGFzIAogCitcYmVnaW57dmVyYmF0aW19CitDRkxBR1M9Ii1EVEZNX0RFU0MgLURNRUNDX0ZQIiBtYWtlIAorXGVuZHt2ZXJiYXRpbX0KKword2hpY2ggd2lsbCBidWlsZCBMVEMgdXNpbmcgdGhlIFRGTSBtYXRoIGxpYnJhcnkgYW5kIGVuYWJsaW5nIHRoaXMgbmV3IGZlYXR1cmUuICBUaGUgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IGFzIGl0IGlzIFx0ZXh0YmZ7Tk9UfSB0aHJlYWQKK3NhZmUgKGJ5IGRlZmF1bHQpLiAgSXQgc3VwcG9ydHMgdGhlIExUQyBsb2NraW5nIG1hY3JvcyAoc3VjaCBhcyBieSBlbmFibGluZyBMVENcX1BUSFJFQUQpLCBidXQgYnkgZGVmYXVsdCBpcyBub3QgbG9ja2VkLgorCitcaW5kZXh7RlBcX0VOVFJJRVN9CitUaGUgb3B0aW1pemF0aW9uIHdvcmtzIGJ5IHVzaW5nIGEgRml4ZWQgUG9pbnQgbXVsdGlwbGllciBvbiBhbnkgYmFzZSBwb2ludCB5b3UgdXNlIHR3aWNlIG9yIG1vcmUgaW4gYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4gIEl0IGhhcyBhIGxpbWl0ZWQgc2l6ZQorY2FjaGUgKG9mIEZQXF9FTlRSSUVTIGVudHJpZXMpIHdoaWNoIGl0IHVzZXMgdG8gaG9sZCByZWNlbnQgYmFzZXMgcGFzc2VkIHRvIGx0Y1xfZWNjXF9tdWxtb2QoKS4gIEFueSBiYXNlIGRldGVjdGVkIHRvIGJlIHVzZWQgdHdpY2UgaXMgc2VudCB0aHJvdWdoIHRoZQorcHJlLS1jb21wdXRhdGlvbiBwaGFzZSwgYW5kIHRoZW4gdGhlIGZpeGVkIHBvaW50IGFsZ29yaXRobSBjYW4gYmUgdXNlZC4gIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIGEgTklTVCBiYXNlIHBvaW50IHR3aWNlIGluIGEgcm93LCB0aGUgMiRee25kfSQgYW5kIAorYWxsIHN1YnNlcXVlbnQgcG9pbnQgbXVsdGlwbGljYXRpb25zIHdpdGggdGhhdCBwb2ludCB3aWxsIHVzZSB0aGUgZmFzdGVyIGFsZ29yaXRobS4KKworXGluZGV4e0ZQXF9MVVR9CitUaGUgb3B0aW1pemF0aW9uIHVzZXMgYSB3aW5kb3cgb24gdGhlIG11bHRpcGxpY2FuZCBvZiBGUFxfTFVUIGJpdHMgKGRlZmF1bHQ6IDgsIG1pbjogMiwgbWF4OiAxMiksIGFuZCB0aGlzIGNvbnRyb2xzIHRoZSBtZW1vcnkvdGltZSB0cmFkZS1vZmYuIFRoZSBsYXJnZXIgdGhlIAordmFsdWUgdGhlIGZhc3RlciB0aGUgYWxnb3JpdGhtIHdpbGwgYmUgYnV0IHRoZSBtb3JlIG1lbW9yeSBpdCB3aWxsIHRha2UuICBUaGUgbWVtb3J5IHVzYWdlIGlzICQzIFxjZG90IDJee0ZQXF9MVVR9JCBpbnRlZ2VycyB3aGljaCBieSBkZWZhdWx0Cit3aXRoIFRGTSBhbW91bnRzIHRvIGFib3V0IDQwMGtCIG9mIG1lbW9yeS4gIFR1bmluZyBURk0gKGJ5IGNoYW5naW5nIEZQXF9TSVpFKSBjYW4gZGVjcmVhc2UgdGhlIHVzYWdlIGJ5IGEgZmFpciBhbW91bnQuICBNZW1vcnkgaXMgb25seSB1c2VkIGJ5IGEgY2FjaGUgZW50cnkKK2lmIGl0IGlzIGFjdGl2ZS4gIEJvdGggRlBcX0VOVFJJRVMgYW5kIEZQXF9MVVQgYXJlIGRlZmluYWJsZSBvbiB0aGUgY29tbWFuZCBsaW5lIGlmIHlvdSB3aXNoIHRvIG92ZXJyaWRlIHRoZW0uIEZvciBpbnN0YW5jZSwKKworXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItRFRGTV9ERVNDIC1ETUVDQ19GUCAtREZQX0VOVFJJRVM9OCAtREZQX0xVVD02IiBtYWtlCitcZW5ke3ZlcmJhdGltfQorCitcYmVnaW57Zmx1c2hsZWZ0fSAKK1xpbmRleHtGUFxfU0laRX0gXGluZGV4e1RGTX0gXGluZGV4e3RmbS5ofQord291bGQgZGVmaW5lIGEgd2luZG93IG9mIDYgYml0cyBhbmQgbGltaXQgdGhlIGNhY2hlIHRvIDggZW50cmllcy4gIEdlbmVyYWxseSwgaXQgaXMgYmV0dGVyIHRvIGZpcnN0IHR1bmUgVEZNIGJ5IGFkanVzdGluZyBGUFxfU0laRSAoZnJvbSB0Zm0uaCkuICBJdCBkZWZhdWx0cwordG8gNDA5NiBiaXRzICg1MTIgYnl0ZXMpIHdoaWNoIGlzIHdheSBtb3JlIHRoYW4gd2hhdCBpcyByZXF1aXJlZCBieSBFQ0MuICBBdCBtb3N0LCB5b3UgbmVlZCAxMTUyIGJpdHMgdG8gYWNjb21tb2RhdGUgRUNDLS01MjEuICBJZiB5b3UncmUgb25seSB1c2luZyAoc2F5KQorRUNDLS0yNTYgeW91IHdpbGwgb25seSBuZWVkIDU3NiBiaXRzLCB3aGljaCB3b3VsZCByZWR1Y2UgdGhlIG1lbW9yeSB1c2FnZSBieSA3MDBcJS4KK1xlbmR7Zmx1c2hsZWZ0fQorCitcbXlzZWN0aW9ue0tleSBGb3JtYXR9CitMaWJUb21DcnlwdCB1c2VzIGEgdW5pcXVlIGZvcm1hdCBmb3IgRUNDIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzLiAgV2hpbGUgQU5TSSBYOS42MyBwYXJ0aWFsbHkgc3BlY2lmaWVzIGtleSBmb3JtYXRzLCBpdCBkb2VzIGl0IGluIGEgbGVzcyB0aGFuIGlkZWFsbHkgc2ltcGxlIG1hbm5lci4gIFwKK0luIHRoZSBjYXNlIG9mIExpYlRvbUNyeXB0LCBpdCBpcyBtZWFudCBcdGV4dGJme3NvbGVseX0gZm9yIE5JU1QgYW5kIFNFQ0cgJEdGKHApJCBjdXJ2ZXMuICBUaGUgZm9ybWF0IG9mIHRoZSBrZXlzIGlzIGFzIGZvbGxvd3M6CisKK1xpbmRleHtFQ0MgS2V5IEZvcm1hdH0KIFxiZWdpbntzbWFsbH0KIFxiZWdpbnt2ZXJiYXRpbX0KIEVDQ1B1YmxpY0tleSA6Oj0gU0VRVUVOQ0UgewotICAgIGZsYWdzICAgICAgIEJJVCBTVFJJTkcoMSksIC0tIHB1YmxpYy9wcml2YXRlIGZsYWcgKGFsd2F5cyB6ZXJvKSwgCisgICAgZmxhZ3MgICAgICAgQklUIFNUUklORygwKSwgLS0gcHVibGljL3ByaXZhdGUgZmxhZyAoYWx3YXlzIHplcm8pLCAKICAgICBrZXlTaXplICAgICBJTlRFR0VSLCAgICAgICAtLSBDdXJ2ZSBzaXplIChpbiBiaXRzKSBkaXZpZGVkIGJ5IGVpZ2h0IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCByb3VuZGVkIGRvd24sIGUuZy4gNTIxID0+IDY1CiAgICAgcHVia2V5LnggICAgSU5URUdFUiwgICAgICAgLS0gVGhlIFggY28tb3JkaW5hdGUgb2YgdGhlIHB1YmxpYyBrZXkgcG9pbnQKQEAgLTMwNDIsMTc0ICszNjg3LDMyNiBAQAogCiBUaGUgZmlyc3QgZmxhZ3MgYml0IGRlbm90ZXMgd2hldGhlciB0aGUga2V5IGlzIHB1YmxpYyAoemVybykgb3IgcHJpdmF0ZSAob25lKS4gIAogCi1cc2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KK1x2ZmlsCiAKLUxpa2UgdGhlIERIIHJvdXRpbmVzIHRoZXJlIGlzIGEga2V5IHN0cnVjdHVyZSBgYGVjY1xfa2V5JycgdXNlZCBieSB0aGUgZnVuY3Rpb25zLiAgVGhlcmUgaXMgYSBmdW5jdGlvbiB0byBtYWtlIGEga2V5OgotXGluZGV4e2VjY1xfbWFrZVxfa2V5KCl9CitcbXlzZWN0aW9ue0VDQyBDdXJ2ZSBQYXJhbWV0ZXJzfQorVGhlIGxpYnJhcnkgdXNlcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhbiBlbGxpcHRpYyBjdXJ2ZS4gIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5LCBhcyB3ZWxsIGFzIGJ5IHRoZSBuZXcKK2V4dGVuZGVkIEVDQyBmdW5jdGlvbnMgd2hpY2ggYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGVpciBvd24gY3VydmVzLiAKKworXGluZGV4e2x0Y1xfZWNjXF9zZXRcX3R5cGV9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZWNjX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgCi0gICAgICAgICAgICAgICAgIGludCBrZXlzaXplLCBlY2Nfa2V5ICprZXkpOworLyoqIFN0cnVjdHVyZSBkZWZpbmVzIGEgTklTVCBHRihwKSBjdXJ2ZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBzaXplIG9mIHRoZSBjdXJ2ZSBpbiBvY3RldHMgKi8KKyAgIGludCBzaXplOworCisgICAvKiogbmFtZSBvZiBjdXJ2ZSAqLworICAgY2hhciAqbmFtZTsgCisKKyAgIC8qKiBUaGUgcHJpbWUgdGhhdCBkZWZpbmVzIHRoZSBmaWVsZCAoZW5jb2RlZCBpbiBoZXgpICovCisgICBjaGFyICpwcmltZTsKKworICAgLyoqIFRoZSBmaWVsZHMgQiBwYXJhbSAoaGV4KSAqLworICAgY2hhciAqQjsKKworICAgLyoqIFRoZSBvcmRlciBvZiB0aGUgY3VydmUgKGhleCkgKi8KKyAgIGNoYXIgKm9yZGVyOworICAKKyAgIC8qKiBUaGUgeCBjby1vcmRpbmF0ZSBvZiB0aGUgYmFzZSBwb2ludCBvbiB0aGUgY3VydmUgKGhleCkgKi8KKyAgIGNoYXIgKkd4OworIAorICAgLyoqIFRoZSB5IGNvLW9yZGluYXRlIG9mIHRoZSBiYXNlIHBvaW50IG9uIHRoZSBjdXJ2ZSAoaGV4KSAqLworICAgY2hhciAqR3k7Cit9IGx0Y19lY2Nfc2V0X3R5cGU7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGUgYGBrZXlzaXplJycgaXMgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgaW4gYnl0ZXMgZGVzaXJlZC4gIEN1cnJlbnRseSBkaXJlY3RseSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSAyNCwgMjgsIDMyLCA0OCBhbmQgNjUgYnl0ZXMgd2hpY2gKLWNvcnJlc3BvbmQgdG8ga2V5IHNpemVzIG9mIDE5MiwgMjI0LCAyNTYsIDM4NCBhbmQgNTIxIGJpdHMgcmVzcGVjdGl2ZWx5LiAgSWYgeW91IHBhc3MgYSBrZXkgc2l6ZSB0aGF0IGlzIGJldHdlZW4gYW55IGtleSBzaXplCi1pdCB3aWxsIHJvdW5kIHRoZSBrZXlzaXplIHVwIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBvbmUuICBUaGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyB3b3JrIGxpa2UgdGhleSBkbyBpbiB0aGUgYGBkaFxfbWFrZVxfa2V5KCknJyBmdW5jdGlvbi4gIAotVG8gZnJlZSB0aGUgcmFtIGFsbG9jYXRlZCBieSBhIGtleSBjYWxsOgorVGhlIGN1cnZlIG11c3QgYmUgb2YgdGhlIGZvcm0gJHleMiA9IHheMyAtIDN4ICsgYiQsIGFuZCBhbGwgb2YgdGhlIGludGVnZXIgcGFyYW1ldGVycyBhcmUgZW5jb2RlZCBpbiBoZXhhZGVjaW1hbCBmb3JtYXQuCisKK1xteXNlY3Rpb257Q29yZSBGdW5jdGlvbnN9Citcc3Vic2VjdGlvbntFQ0MgS2V5IEdlbmVyYXRpb259CitUaGVyZSBpcyBhIGtleSBzdHJ1Y3R1cmUgY2FsbGVkIFx0ZXh0aXR7ZWNjXF9rZXl9IHVzZWQgYnkgdGhlIEVDQyBmdW5jdGlvbnMuICBUaGVyZSBpcyBhIGZ1bmN0aW9uIHRvIG1ha2UgYSBrZXk6CitcaW5kZXh7ZWNjXF9tYWtlXF9rZXkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlY2NfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAga2V5c2l6ZSwgCisgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitUaGUgXHRleHRpdHtrZXlzaXplfSBpcyB0aGUgc2l6ZSBvZiB0aGUgbW9kdWx1cyBpbiBieXRlcyBkZXNpcmVkLiAgQ3VycmVudGx5IGRpcmVjdGx5IHN1cHBvcnRlZCB2YWx1ZXMgYXJlIDEyLCAxNiwgMjAsIDI0LCAyOCwgMzIsIDQ4LCBhbmQgNjUgYnl0ZXMgd2hpY2gKK2NvcnJlc3BvbmQgdG8ga2V5IHNpemVzIG9mIDExMiwgMTI4LCAxNjAsIDE5MiwgMjI0LCAyNTYsIDM4NCwgYW5kIDUyMSBiaXRzIHJlc3BlY3RpdmVseS4gIElmIHlvdSBwYXNzIGEga2V5IHNpemUgdGhhdCBpcyBiZXR3ZWVuIGFueSBrZXkgc2l6ZSBpdCB3aWxsIHJvdW5kIAordGhlIGtleXNpemUgdXAgdG8gdGhlIG5leHQgYXZhaWxhYmxlIG9uZS4KKworVGhlIGZ1bmN0aW9uIHdpbGwgZnJlZSBhbnkgaW50ZXJuYWxseSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorCitcc3Vic2VjdGlvbntFeHRlbmRlZCBLZXkgR2VuZXJhdGlvbn0KK0FzIG9mIHYxLjE2LCB0aGUgbGlicmFyeSBzdXBwb3J0cyBhbiBleHRlbmRlZCBrZXkgZ2VuZXJhdGlvbiByb3V0aW5lIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZWlyIG93biBjdXJ2ZS4gIEl0IGlzIHNwZWNpZmllZCBhcyBmb2xsb3dzOgorCitcaW5kZXh7ZWNjXF9tYWtlXF9rZXlcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgIGVjY19tYWtlX2tleV9leCgKKyAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5LCAKKyAgICAgY29uc3QgbHRjX2VjY19zZXRfdHlwZSAqZHApOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSByYW5kb20gRUNDIGtleSBvdmVyIHRoZSBjdXJ2ZSBzcGVjaWZpZWQgYnkgdGhlIHBhcmFtZXRlcnMgYnkgXHRleHRpdHtkcH0uICBUaGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyBhcmUgZXF1aXZhbGVudCB0bwordGhvc2UgZnJvbSB0aGUgb3JpZ2luYWwga2V5IGdlbmVyYXRpb24gZnVuY3Rpb24uCisKK1xzdWJzZWN0aW9ue0VDQyBLZXkgRnJlZX0KK1RvIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYSBlY2NcX21ha2VcX2tleSgpLCBlY2NcX21ha2VcX2tleVxfZXgoKSwgZWNjXF9pbXBvcnQoKSwgb3IgZWNjXF9pbXBvcnRcX2V4KCkgY2FsbCB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKIFxpbmRleHtlY2NcX2ZyZWUoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KIHZvaWQgZWNjX2ZyZWUoZWNjX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19CiAKLVRvIGltcG9ydCBhbmQgZXhwb3J0IGEga2V5IHRoZXJlIGFyZTogCitcc3Vic2VjdGlvbntFQ0MgS2V5IEV4cG9ydH0KK1RvIGV4cG9ydCBhbiBFQ0Mga2V5IHVzaW5nIHRoZSBMaWJUb21DcnlwdCBmb3JtYXQgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogXGluZGV4e2VjY1xfZXhwb3J0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgZXhwb3J0IHRoZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gXHRleHRpdHt0eXBlfSAoXHRleHRiZntQS1xfUFVCTElDfSBvciBcdGV4dGJme1BLXF9QUklWQVRFfSksIGFuZCBzdG9yZSBpdCB0byBcdGV4dGl0e291dH0uICAKKworXHN1YnNlY3Rpb257RUNDIEtleSBJbXBvcnR9CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGltcG9ydHMgYSBMaWJUb21DcnlwdCBmb3JtYXQgRUNDIGtleToKIFxpbmRleHtlY2NcX2ltcG9ydCgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGVjY19leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgaW50IHR5cGUsIGVjY19rZXkgKmtleSk7Ci0KLWludCBlY2NfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpOworaW50IGVjY19pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19Ci1UaGVzZSB0d28gd29yayBleGFjdGx5IGxpa2UgdGhlcmUgREggY291bnRlcnBhcnRzLiAgRmluYWxseSB3aGVuIHlvdSBzaGFyZSB5b3VyIHB1YmxpYyBrZXkgeW91IGNhbiBtYWtlIGEgc2hhcmVkIHNlY3JldAotd2l0aDoKK1RoaXMgd2lsbCBpbXBvcnQgdGhlIEVDQyBrZXkgZnJvbSBcdGV4dGl0e2lufSwgYW5kIHN0b3JlIGl0IGluIHRoZSBlY2NcX2tleSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSBcdGV4dGl0e2tleX0uICBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIGl0IHdpbGwgZnJlZQorYW55IGFsbG9jYXRlZCBtZW1vcnkgYXV0b21hdGljYWxseS4KKworXHN1YnNlY3Rpb257RXh0ZW5kZWQgS2V5IEltcG9ydH0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpbXBvcnRzIGEgTGliVG9tQ3J5cHQgZm9ybWF0IEVDQyBrZXkgdXNpbmcgYSBzcGVjaWZpZWQgc2V0IG9mIGN1cnZlIHBhcmFtZXRlcnM6CitcaW5kZXh7ZWNjXF9pbXBvcnRcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgIGVjY19pbXBvcnRfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXksIAorICAgICAgICAgICAgICAgIGNvbnN0IGx0Y19lY2Nfc2V0X3R5cGUgKmRwKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgaW1wb3J0IHRoZSBrZXkgZnJvbSB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgVGhlIGtleSBpcyBzdG9yZWQgaW4KK3RoZSBFQ0Mgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtrZXl9LiAgVGhlIGN1cnZlIGlzIHNwZWNpZmllZCBieSB0aGUgcGFyYW1ldGVycyBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7ZHB9LiAgVGhlIGZ1bmN0aW9uIHdpbGwgZnJlZQorYWxsIGludGVybmFsbHkgYWxsb2NhdGVkIG1lbW9yeSB1cG9uIGVycm9yLgorCitcc3Vic2VjdGlvbntBTlNJIFg5LjYzIEV4cG9ydH0KK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZXhwb3J0cyBhbiBFQ0MgcHVibGljIGtleSBpbiB0aGUgQU5TSSBYOS42MyBmb3JtYXQ6CisKK1xpbmRleHtlY2NcX2Fuc2lcX3g5NjNcX2V4cG9ydCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVjY19hbnNpX3g5NjNfZXhwb3J0KCAgICAgIGVjY19rZXkgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoZSBFQ0Mga2V5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtrZXl9IGlzIGV4cG9ydGVkIGluIHB1YmxpYyBmYXNoaW9uIHRvIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7b3V0fS4gIFRoZSBBTlNJIFg5LjYzIGZvcm1hdCB1c2VkIGlzIGZyb20KK3NlY3Rpb24gNC4zLjYgb2YgdGhlIHN0YW5kYXJkLiAgSXQgZG9lcyBub3QgYWxsb3cgZm9yIHRoZSBleHBvcnQgb2YgcHJpdmF0ZSBrZXlzLgorCitcc3Vic2VjdGlvbntBTlNJIFg5LjYzIEltcG9ydH0KK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaW1wb3J0cyBhbiBBTlNJIFg5LjYzIHNlY3Rpb24gNC4zLjYgZm9ybWF0IHB1YmxpYyBFQ0Mga2V5OgorCitcaW5kZXh7ZWNjXF9hbnNpXF94OTYzXF9pbXBvcnQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlY2NfYW5zaV94OTYzX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGltcG9ydCB0aGUga2V5IHN0b3JlZCBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgVGhlIGltcG9ydGVkIGtleSBpcyBzdG9yZWQgaW4gdGhlIEVDQyBrZXkgcG9pbnRlZCB0byBieSAKK1x0ZXh0aXR7a2V5fS4gIFRoZSBmdW5jdGlvbiB3aWxsIGZyZWUgYW55IGFsbG9jYXRlZCBtZW1vcnkgdXBvbiBlcnJvci4KKworXHN1YnNlY3Rpb257RXh0ZW5kZWQgQU5TSSBYOS42MyBJbXBvcnR9CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGFsbG93cyB0aGUgaW1wb3J0aW5nIG9mIGFuIEFOU0kgeDkuNjMgc2VjdGlvbiA0LjMuNiBmb3JtYXQgcHVibGljIEVDQyBrZXkgdXNpbmcgdXNlciBzcGVjaWZpZWQgZG9tYWluIHBhcmFtZXRlcnM6CisKK1xpbmRleHtlY2NcX2Fuc2lcX3g5NjNcX2ltcG9ydFxfZXgoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlY2NfYW5zaV94OTYzX2ltcG9ydF9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2VjY19zZXRfdHlwZSAqZHApOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBpbXBvcnQgdGhlIGtleSBzdG9yZWQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cyB1c2luZyB0aGUgZG9tYWluIHBhcmFtZXRlcnMgcG9pbnRlZCB0byBieSBcdGV4dGl0e2RwfS4gIAorVGhlIGltcG9ydGVkIGtleSBpcyBzdG9yZWQgaW4gdGhlIEVDQyBrZXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e2tleX0uICBUaGUgZnVuY3Rpb24gd2lsbCBmcmVlIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHVwb24gZXJyb3IuCisKK1xzdWJzZWN0aW9ue0VDQyBTaGFyZWQgU2VjcmV0fQorVG8gY29uc3RydWN0IGEgRGlmZmllLUhlbGxtYW4gc2hhcmVkIHNlY3JldCB3aXRoIGEgcHJpdmF0ZSBhbmQgcHVibGljIEVDQyBrZXksIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogXGluZGV4e2VjY1xfc2hhcmVkXF9zZWNyZXQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBlY2Nfc2hhcmVkX3NlY3JldChlY2Nfa2V5ICpwcml2YXRlX2tleSwgCi0gICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqcHVibGljX2tleSwgCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGVjY19zaGFyZWRfc2VjcmV0KCAgICAgIGVjY19rZXkgKnByaXZhdGVfa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICpwdWJsaWNfa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQotV2hpY2ggd29ya3MgZXhhY3RseSBsaWtlIHRoZSBESCBjb3VudGVycGFydCwgdGhlIGBgcHJpdmF0ZVxfa2V5JycgaXMgeW91ciBvd24ga2V5IGFuZCBgYHB1YmxpY1xfa2V5JycgaXMgdGhlIGtleSB0aGUgb3RoZXIKLXVzZXIgc2VudCB5b3UuICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc3RvcmVzIGJvdGggJHgkIGFuZCAkeSQgY28tb3JkaW5hdGVzIG9mIHRoZSBzaGFyZWQKLWVsbGlwdGljIHBvaW50LiAgWW91IHNob3VsZCBoYXNoIHRoZSBvdXRwdXQgdG8gZ2V0IGEgc2hhcmVkIGtleSBpbiBhIG1vcmUgY29tcGFjdCBhbmQgdXNlZnVsIGZvcm0gKG1vc3Qgb2YgdGhlIGVudHJvcHkgaXMgCi1pbiAkeCQgYW55d2F5cykuICBCb3RoIGtleXMgaGF2ZSB0byBiZSB0aGUgc2FtZSBzaXplIGZvciB0aGlzIHRvIHdvcmssIHRvIGhlbHAgdGhlcmUgaXMgYSBmdW5jdGlvbiB0byBnZXQgdGhlIHNpemUgaW4gYnl0ZXMKLSBvZiBhIGtleS4KLVxpbmRleHtlY2NcX2dldFxfc2l6ZSgpfQorVGhlIFx0ZXh0aXR7cHJpdmF0ZVxfa2V5fSBpcyB0eXBpY2FsbHkgdGhlIGxvY2FsIHByaXZhdGUga2V5LCBhbmQgXHRleHRpdHtwdWJsaWNcX2tleX0gaXMgdGhlIGtleSB0aGUgcmVtb3RlIHBhcnR5IGhhcyBzaGFyZWQuICAgCitOb3RlOiB0aGlzIGZ1bmN0aW9uIHN0b3JlcyBvbmx5IHRoZSAkeCQgY28tb3JkaW5hdGUgb2YgdGhlIHNoYXJlZCBlbGxpcHRpYyBwb2ludCBhcyBkZXNjcmliZWQgaW4gQU5TSSBYOS42MyBFQ0MtLURILiAgCisKK1xteXNlY3Rpb257RUNDIERpZmZpZS1IZWxsbWFuIEVuY3J5cHRpb259CitFQ0MtLURIIEVuY3J5cHRpb24gaXMgcGVyZm9ybWVkIGJ5IHByb2R1Y2luZyBhIHJhbmRvbSBrZXksIGhhc2hpbmcgaXQsIGFuZCBYT1InaW5nIHRoZSBkaWdlc3QgYWdhaW5zdCB0aGUgcGxhaW50ZXh0LiAgSXQgaXMgbm90IHN0cmljdGx5IEFOU0kgWDkuNjMgY29tcGxpYW50CitidXQgaXQgaXMgdmVyeSBzaW1pbGFyLiAgSXQgaGFzIGJlZW4gZXh0ZW5kZWQgYnkgdXNpbmcgYW4gQVNOLjEgc2VxdWVuY2UgYW5kIGhhc2ggb2JqZWN0IGlkZW50aWZpZXJzIHRvIGFsbG93IHBvcnRhYmxlIHVzYWdlLiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbgorZW5jcnlwdHMgYSBzaG9ydCBzdHJpbmcgKG5vIGxvbmdlciB0aGFuIHRoZSBtZXNzYWdlIGRpZ2VzdCkgdXNpbmcgdGhpcyB0ZWNobmlxdWU6CisKK1xzdWJzZWN0aW9ue0VDQy1ESCBFbmNyeXB0aW9ufQorXGluZGV4e2VjY1xfZW5jcnlwdFxfa2V5KCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZWNjX2dldF9zaXplKGVjY19rZXkgKmtleSk7CitpbnQgZWNjX2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSk7CiBcZW5ke3ZlcmJhdGltfQogCi1UbyB0ZXN0IHRoZSBFQ0Mgcm91dGluZXMgYW5kIHRvIGdldCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBrZXkgc2l6ZXMgdGhlcmUgYXJlIHRoZXNlIHR3byBmdW5jdGlvbnM6Ci1caW5kZXh7ZWNjXF90ZXN0KCl9CitBcyB0aGUgbmFtZSBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gZW5jcnlwdHMgYSAoc3ltbWV0cmljKSBrZXksIGFuZCBpcyBub3QgaW50ZW5kZWQgZm9yIGVuY3J5cHRpbmcgbG9uZyBtZXNzYWdlcyBkaXJlY3RseS4gIEl0IHdpbGwgZW5jcnlwdCB0aGUgCitwbGFpbnRleHQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cy4gIEl0IHVzZXMgdGhlIHB1YmxpYyBFQ0Mga2V5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtrZXl9LCBhbmQKK2hhc2ggYWxnb3JpdGhtIGluZGV4ZWQgYnkgXHRleHRpdHtoYXNofSB0byBjb25zdHJ1Y3QgYSBzaGFyZWQgc2VjcmV0IHdoaWNoIG1heSBiZSBYT1InZWQgYWdhaW5zdCB0aGUgcGxhaW50ZXh0LiAgVGhlIGNpcGhlcnRleHQgaXMgc3RvcmVkIGluCit0aGUgb3V0cHV0IGJ1ZmZlciBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IG9jdGV0cy4KKworVGhlIGRhdGEgaXMgZW5jcnlwdGVkIHRvIHRoZSBwdWJsaWMgRUNDIFx0ZXh0aXR7a2V5fSBzdWNoIHRoYXQgb25seSB0aGUgaG9sZGVyIG9mIHRoZSBwcml2YXRlIGtleSBjYW4gZGVjcnlwdCB0aGUgcGF5bG9hZC4gIFRvIGhhdmUgbXVsdGlwbGUgCityZWNpcGllbnRzIG11bHRpcGxlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmb3IgZWFjaCBwdWJsaWMgRUNDIGtleSBpcyByZXF1aXJlZC4KKworXHN1YnNlY3Rpb257RUNDLURIIERlY3J5cHRpb259CitcaW5kZXh7ZWNjXF9kZWNyeXB0XF9rZXkoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBlY2NfdGVzdCh2b2lkKTsKLXZvaWQgZWNjX3NpemVzKGludCAqbG93LCBpbnQgKmhpZ2gpOwotXGVuZHt2ZXJiYXRpbX0KLVdoaWNoIGJvdGggd29yayBsaWtlIHRoZWlyIERIIGNvdW50ZXJwYXJ0cy4KLQotXHNlY3Rpb257RUNDIFBhY2tldH0KLVNpbWlsYXIgdG8gdGhlIFJTQSBBUEkgdGhlcmUgYXJlIHR3byBmdW5jdGlvbnMgd2hpY2ggZW5jcnlwdCBhbmQgZGVjcnlwdCBzeW1tZXRyaWMga2V5cyB1c2luZyB0aGUgRUNDIHB1YmxpYyBrZXkKLWFsZ29yaXRobXMuCi0KLVxpbmRleHtlY2NcX2VuY3J5cHRcX2tleSgpfSBcaW5kZXh7ZWNjXF9kZWNyeXB0XF9rZXkoKX0KLVxiZWdpbnt2ZXJiYXRpbX0KLWludCBlY2NfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGhhc2gsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpOwotCi1pbnQgZWNjX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK2ludCBlY2NfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19CiAKLVdoZXJlIGBgaW4nJyBpcyBhbiBpbnB1dCBzeW1tZXRyaWMga2V5IG9mIG5vIG1vcmUgdGhhbiA2NCBieXRlcy4gIEVzc2VudGlhbGx5IHRoZXNlIHJvdXRpbmVzIGNyZWF0ZWQgYSByYW5kb20gcHVibGljIGtleQotYW5kIGZpbmQgdGhlIGhhc2ggb2YgdGhlIHNoYXJlZCBzZWNyZXQuICBUaGUgbWVzc2FnZSBkaWdlc3QgaXMgdGhhbiBYT1InZWQgYWdhaW5zdCB0aGUgc3ltbWV0cmljIGtleS4gIEFsbCBvZiB0aGUgcmVxdWlyZWQKLWRhdGEgaXMgcGxhY2VkIGluIGBgb3V0JycgYnkgYGBlY2NcX2VuY3J5cHRcX2tleSgpJycuICAgVGhlIGhhc2ggY2hvc2VuIG11c3QgcHJvZHVjZSBhIG1lc3NhZ2UgZGlnZXN0IGF0IGxlYXN0IGFzIGxhcmdlCi1hcyB0aGUgc3ltbWV0cmljIGtleSB5b3UgYXJlIHRyeWluZyB0byBzaGFyZS4KK1RoaXMgZnVuY3Rpb24gd2lsbCBkZWNyeXB0IGFuIGVuY3J5cHRlZCBwYXlsb2FkLiAgVGhlIFx0ZXh0aXR7a2V5fSBwcm92aWRlZCBtdXN0IGJlIHRoZSBwcml2YXRlIGtleSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwdWJsaWMga2V5Cit1c2VkIGR1cmluZyBlbmNyeXB0aW9uLiAgSWYgdGhlIHdyb25nIGtleSBpcyBwcm92aWRlZCB0aGUgZnVuY3Rpb24gd2lsbCBub3Qgc3BlY2lmaWNhbGx5IHJldHVybiBhbiBlcnJvciBjb2RlLiAgSXQgaXMgaW1wb3J0YW50Cit0byB1c2Ugc29tZSBmb3JtIG9mIGNoYWxsZW5nZSByZXNwb25zZSBpbiB0aGF0IGNhc2UgKGUuZy4gY29tcHV0ZSBhIE1BQyBvZiBhIGtub3duIHN0cmluZykuCiAKLVxzdWJzZWN0aW9ue0VuY3J5cHQgUGFja2V0IEZvcm1hdH0KLQorXHN1YnNlY3Rpb257RUNDIEVuY3J5cHRpb24gRm9ybWF0fQogVGhlIHBhY2tldCBmb3JtYXQgZm9yIHRoZSBlbmNyeXB0ZWQga2V5cyBpcyB0aGUgZm9sbG93aW5nIEFTTi4xIFNFUVVFTkNFOgogCiBcYmVnaW57dmVyYmF0aW19CiBFQ0NFbmNyeXB0IDo6PSBTRVFVRU5DRSB7CiAgICBoYXNoSUQgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLCAtLSBPSUQgb2YgaGFzaCB1c2VkCi0gICBwdWJrZXkgICAgICAgIE9DVEVUIFNUUklORyAgICAgLCAtLSBFbmNhcHN1bGF0ZWQgRUNDUHVibGljS2V5IChzZWUgYWJvdmUpCi0gICBza2V5ICAgICAgICAgIE9DVEVUIFNUUklORyAgICAgICAtLSB4b3Igb2YgcGxhaW50ZXh0IGFuZCAiaGFzaCBvZiBzaGFyZWQgc2VjcmV0IgorICAgcHVia2V5ICAgICAgICBPQ1RFVCBTVFJJTkcgICAgICwgLS0gRW5jYXBzdWxhdGVkIEVDQ1B1YmxpY0tleQorICAgc2tleSAgICAgICAgICBPQ1RFVCBTVFJJTkcgICAgICAgLS0geG9yIG9mIHBsYWludGV4dCBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSJoYXNoIG9mIHNoYXJlZCBzZWNyZXQiCiB9CiBcZW5ke3ZlcmJhdGltfQogCi1UaGVyZSBhcmUgYWxzbyBmdW5jdGlvbnMgdG8gc2lnbiBhbmQgdmVyaWZ5IHRoZSBoYXNoIG9mIGEgbWVzc2FnZS4KLVxpbmRleHtlY2NcX3NpZ25cX2hhc2goKX0gXGluZGV4e2VjY1xfdmVyaWZ5XF9oYXNoKCl9Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgZWNjX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZWNjX2tleSAqa2V5KTsKK1xteXNlY3Rpb257RUMgRFNBIFNpZ25hdHVyZXN9CiAKLWludCBlY2NfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgbG9uZyBoYXNobGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCBlY2Nfa2V5ICprZXkpOworVGhlcmUgYXJlIGFsc28gZnVuY3Rpb25zIHRvIHNpZ24gYW5kIHZlcmlmeSBtZXNzYWdlcy4gIFRoZXkgdXNlIHRoZSBBTlNJIFg5LjYyIEVDLURTQSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgYW5kIHZlcmlmeSBzaWduYXR1cmVzIGluIHRoZQorQU5TSSBYOS42MiBmb3JtYXQuICAKKworXHN1YnNlY3Rpb257RUMtRFNBIFNpZ25hdHVyZSBHZW5lcmF0aW9ufQorVG8gc2lnbiBhIG1lc3NhZ2UgZGlnZXN0IChoYXNoKSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e2VjY1xfc2lnblxfaGFzaCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVjY19zaWduX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd3BybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoZSBgYGVjY1xfc2lnblxfaGFzaCcnIGZ1bmN0aW9uIHNpZ25zIHRoZSBtZXNzYWdlIGhhc2ggaW4gYGBpbicnIG9mIGxlbmd0aCBgYGlubGVuJycgYW5kIGZvcm1zIGEgRUNDIHBhY2tldCBpbiBgYG91dCcnLiAgCi1UaGUgYGBlY2NcX3ZlcmlmeVxfaGFzaCcnIGZ1bmN0aW9uIHZlcmlmaWVzIHRoZSBFQ0Mgc2lnbmF0dXJlIGluIGBgc2lnJycgYWdhaW5zdCB0aGUgaGFzaCBpbiBgYGhhc2gnJy4gIEl0IHNldHMgYGBzdGF0JycKLXRvIG5vbi16ZXJvIGlmIHRoZSBzaWduYXR1cmUgcGFzc2VzIG9yIHplcm8gaWYgaXQgZmFpbHMuCitUaGlzIGZ1bmN0aW9uIHdpbGwgRUMtLURTQSBzaWduIHRoZSBtZXNzYWdlIGRpZ2VzdCBzdG9yZWQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cy4gIFRoZSBzaWduYXR1cmUKK3dpbGwgYmUgc3RvcmVkIGluIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IG9jdGV0cy4gIFRoZSBmdW5jdGlvbiByZXF1aXJlcyBhIHByb3Blcmx5IHNlZWRlZCBQUk5HLCBhbmQgCit0aGUgRUNDIFx0ZXh0aXR7a2V5fSBwcm92aWRlZCBtdXN0IGJlIGEgcHJpdmF0ZSBrZXkuCisKK1xzdWJzZWN0aW9ue0VDLURTQSBTaWduYXR1cmUgVmVyaWZpY2F0aW9ufQorXGluZGV4e2VjY1xfdmVyaWZ5XF9oYXNoKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX3ZlcmlmeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGhhc2hsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgZnVuY3Rpb24gd2lsbCB2ZXJpZnkgdGhlIEVDLURTQSBzaWduYXR1cmUgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtzaWd9IG9mIGxlbmd0aCBcdGV4dGl0e3NpZ2xlbn0gb2N0ZXRzLCBhZ2FpbnN0IHRoZSBtZXNzYWdlIGRpZ2VzdCAKK3BvaW50ZWQgdG8gYnkgdGhlIGFycmF5IFx0ZXh0aXR7aGFzaH0gb2YgbGVuZ3RoIFx0ZXh0aXR7aGFzaGxlbn0uICBJdCB3aWxsIHN0b3JlIGEgbm9uLS16ZXJvIHZhbHVlIGluIFx0ZXh0aXR7c3RhdH0gaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZC4gIE5vdGU6IAordGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiBhbiBlcnJvciBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQuICBJdCB3aWxsIHJldHVybiBhbiBlcnJvciwgaWYgdGhlIGFjdHVhbCBzaWduYXR1cmUgcGF5bG9hZCBpcyBhbiBpbnZhbGlkIGZvcm1hdC4gIAorVGhlIEVDQyBcdGV4dGl0e2tleX0gbXVzdCBiZSB0aGUgcHVibGljIChvciBwcml2YXRlKSBFQ0Mga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSB0aGF0IHBlcmZvcm1lZCB0aGUgc2lnbmF0dXJlLgogCiBcc3Vic2VjdGlvbntTaWduYXR1cmUgRm9ybWF0fQotVGhlIHNpZ25hdHVyZSBjb2RlIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFg5LjYyIEVDLURTQSBhbmQgdGhlIG91dHB1dCBpcyBjb21mb3JtYW50IGZvciBHRihwKSBjdXJ2ZXMuCitUaGUgc2lnbmF0dXJlIGNvZGUgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgWDkuNjIgRUMtLURTQSwgYW5kIHRoZSBvdXRwdXQgaXMgY29tcGxpYW50IGZvciBHRihwKSBjdXJ2ZXMuCiAKLVxzZWN0aW9ue0VDQyBLZXlzaXplc30KLVdpdGggRUNDIGlmIHlvdSB0cnkgYW5kIHNpZ24gYSBoYXNoIHRoYXQgaXMgYmlnZ2VyIHRoYW4geW91ciBFQ0Mga2V5IHlvdSBjYW4gcnVuIGludG8gcHJvYmxlbXMuICBUaGUgbWF0aCB3aWxsIHN0aWxsIHdvcmsKLWFuZCBpbiBlZmZlY3QgdGhlIHNpZ25hdHVyZSB3aWxsIHN0aWxsIHdvcmsuICBXaXRoIEVDQyBrZXlzIHRoZSBzdHJlbmd0aCBvZiB0aGUgc2lnbmF0dXJlIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YKLXRoZSBoYXNoIG9yIHRoZSBzaXplIG9mIHRoZXkga2V5LCB3aGljaGV2ZXIgaXMgc21hbGxlci4gIEZvciBleGFtcGxlLCBpZiB5b3Ugc2lnbiB3aXRoIFNIQTI1NiBhbmQgYW4gRUNDLTE5MiBrZXkgaW4gZWZmZWN0Ci15b3UgaGF2ZSAxOTItYml0cyBvZiBzZWN1cml0eS4gIAorXG15c2VjdGlvbntFQ0MgS2V5c2l6ZXN9CitXaXRoIEVDQyBpZiB5b3UgdHJ5IHRvIHNpZ24gYSBoYXNoIHRoYXQgaXMgYmlnZ2VyIHRoYW4geW91ciBFQ0Mga2V5IHlvdSBjYW4gcnVuIGludG8gcHJvYmxlbXMuICBUaGUgbWF0aCB3aWxsIHN0aWxsIHdvcmssIGFuZCBpbiBlZmZlY3QgdGhlIHNpZ25hdHVyZSB3aWxsIHN0aWxsIAord29yay4gIFdpdGggRUNDIGtleXMgdGhlIHN0cmVuZ3RoIG9mIHRoZSBzaWduYXR1cmUgaXMgbGltaXRlZCBieSB0aGUgc2l6ZSBvZiB0aGUgaGFzaCwgb3IgdGhlIHNpemUgb2YgdGhleSBrZXksIHdoaWNoZXZlciBpcyBzbWFsbGVyLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzaWduIHdpdGggCitTSEEyNTYgYW5kIGFuIEVDQy0xOTIga2V5LCB5b3UgaW4gZWZmZWN0IGhhdmUgOTYtLWJpdHMgb2Ygc2VjdXJpdHkuICAKIAotVGhlIGxpYnJhcnkgd2lsbCBub3Qgd2FybiB5b3UgaWYgeW91IG1ha2UgdGhpcyBtaXN0YWtlIHNvIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayB5b3Vyc2VsZiBiZWZvcmUgdXNpbmcgdGhlIAotc2lnbmF0dXJlcy4KK1RoZSBsaWJyYXJ5IHdpbGwgbm90IHdhcm4geW91IGlmIHlvdSBtYWtlIHRoaXMgbWlzdGFrZSwgc28gaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHlvdXJzZWxmIGJlZm9yZSB1c2luZyB0aGUgc2lnbmF0dXJlcy4KIAogXGNoYXB0ZXJ7RGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtfQotXHNlY3Rpb257SW50cm9kdWN0aW9ufQorXG15c2VjdGlvbntJbnRyb2R1Y3Rpb259CiBUaGUgRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtIChvciBEU0EpIGlzIGEgdmFyaWFudCBvZiB0aGUgRWxHYW1hbCBTaWduYXR1cmUgc2NoZW1lIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkIHRvIAotcmVkdWNlIHRoZSBiYW5kd2lkdGggb2YgYSBzaWduYXR1cmUuICBGb3IgZXhhbXBsZSwgdG8gaGF2ZSBgYDgwLWJpdHMgb2Ygc2VjdXJpdHknJyB3aXRoIEVsR2FtYWwgeW91IG5lZWQgYSBncm91cCBvZiAKLW9yZGVyIGF0IGxlYXN0IDEwMjQtYml0cy4gIFdpdGggRFNBIHlvdSBuZWVkIGEgZ3JvdXAgb2Ygb3JkZXIgYXQgbGVhc3QgMTYwLWJpdHMuICBCeSBjb21wYXJpc29uIHRoZSBFbEdhbWFsIHNpZ25hdHVyZQotd291bGQgcmVxdWlyZSBhdCBsZWFzdCAyNTYgYnl0ZXMgd2hlcmUgYXMgdGhlIERTQSBzaWduYXR1cmUgd291bGQgcmVxdWlyZSBvbmx5IGF0IGxlYXN0IDQwIGJ5dGVzLiAgCityZWR1Y2UgdGhlIGJhbmR3aWR0aCBvZiB0aGUgc2lnbmF0dXJlcy4gIEZvciBleGFtcGxlLCB0byBoYXZlIFx0ZXh0aXR7ODAtYml0cyBvZiBzZWN1cml0eX0gd2l0aCBFbEdhbWFsLCB5b3UgbmVlZCBhIGdyb3VwIHdpdGggYW4gb3JkZXIgb2YgYXQgbGVhc3QgMTAyNC0tYml0cy4gIAorV2l0aCBEU0EsIHlvdSBuZWVkIGEgZ3JvdXAgb2Ygb3JkZXIgYXQgbGVhc3QgMTYwLS1iaXRzLiAgQnkgY29tcGFyaXNvbiwgdGhlIEVsR2FtYWwgc2lnbmF0dXJlIHdvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMjU2IGJ5dGVzIG9mIHN0b3JhZ2UsIHdoZXJlYXMgdGhlIERTQSBzaWduYXR1cmUgCit3b3VsZCByZXF1aXJlIG9ubHkgYXQgbGVhc3QgNDAgYnl0ZXMuICAKIAotVGhlIEFQSSBmb3IgdGhlIERTQSBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgb3RoZXIgUEsgYWxnb3JpdGhtcy4gIEV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBEU0Egbm8gZW5jcnlwdGlvbiBvcgotZGVjcnlwdGlvbiByb3V0aW5lcyBhcmUgcHJvdmlkZWQuICAKLQotXHNlY3Rpb257S2V5IEZvcm1hdH0KK1xteXNlY3Rpb257S2V5IEZvcm1hdH0KIFNpbmNlIG5vIHVzZWZ1bCBwdWJsaWMgc3RhbmRhcmQgZm9yIERTQSBrZXkgc3RvcmFnZSB3YXMgcHJlc2VudGVkIHRvIG1lIGR1cmluZyB0aGUgY291cnNlIG9mIHRoaXMgZGV2ZWxvcG1lbnQgSSBtYWRlIG15IG93biBBU04uMSBTRVFVRU5DRSB3aGljaCBJIGRvY3VtZW50CiBub3cgc28gdGhhdCBvdGhlcnMgY2FuIGludGVyb3BlcmF0ZSB3aXRoIHRoaXMgbGlicmFyeS4KIAogXGJlZ2lue3ZlcmJhdGltfQogRFNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7Ci0gICAgcHVibGljRmxhZ3MgICAgQklUIFNUUklORygxKSwgLS0gbXVzdCBiZSAwCi0gICAgZyAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gYmFzZSBnZW5lcmF0b3IsIGNoZWNrIHRoYXQgZ15xIG1vZCBwID09IDEKKyAgICBwdWJsaWNGbGFncyAgICBCSVQgU1RSSU5HKDApLCAtLSBtdXN0IGJlIDAKKyAgICBnICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBiYXNlIGdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGNoZWNrIHRoYXQgZ15xIG1vZCBwID09IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhbmQgdGhhdCAxIDwgZyA8IHAgLSAxCiAgICAgcCAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gcHJpbWUgbW9kdWx1cyAKLSAgICBxICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBvcmRlciBvZiBzdWItZ3JvdXAgKG11c3QgYmUgcHJpbWUpCi0gICAgeSAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gcHVibGljIGtleSwgc3BlY2lmaWNhbGx5LCBnXnggbW9kIHAsIAorICAgIHEgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIG9yZGVyIG9mIHN1Yi1ncm91cCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAobXVzdCBiZSBwcmltZSkKKyAgICB5ICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwdWJsaWMga2V5LCBzcGVjaWZpY2FsbHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGdeeCBtb2QgcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY2hlY2sgdGhhdCB5XnEgbW9kIHAgPT0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCB5IDwgcCAtIDEKIH0KIAogRFNBUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgewogICAgIHB1YmxpY0ZsYWdzICAgIEJJVCBTVFJJTkcoMSksIC0tIG11c3QgYmUgMQotICAgIGcgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIGJhc2UgZ2VuZXJhdG9yLCBjaGVjayB0aGF0IGdecSBtb2QgcCA9PSAxCisgICAgZyAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gYmFzZSBnZW5lcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBjaGVjayB0aGF0IGdecSBtb2QgcCA9PSAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gYW5kIHRoYXQgMSA8IGcgPCBwIC0gMQogICAgIHAgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIHByaW1lIG1vZHVsdXMgCi0gICAgcSAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gb3JkZXIgb2Ygc3ViLWdyb3VwIChtdXN0IGJlIHByaW1lKQotICAgIHkgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIHB1YmxpYyBrZXksIHNwZWNpZmljYWxseSwgZ154IG1vZCBwLCAKKyAgICBxICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBvcmRlciBvZiBzdWItZ3JvdXAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gKG11c3QgYmUgcHJpbWUpCisgICAgeSAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gcHVibGljIGtleSwgc3BlY2lmaWNhbGx5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBnXnggbW9kIHAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGNoZWNrIHRoYXQgeV5xIG1vZCBwID09IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhbmQgdGhhdCAxIDwgeSA8IHAgLSAxCiAgICAgeCAgICAgICAgICAgICAgSU5URUdFUiAgICAgICAgLS0gcHJpdmF0ZSBrZXkKIH0KIFxlbmR7dmVyYmF0aW19CiAKLVRoZSBsZWFkaW5nIEJJVCBTVFJJTkcgaGFzIGEgc2luZ2xlIGJpdCBpbiBpdCB3aGljaCBpcyB6ZXJvIGZvciBwdWJsaWMga2V5cyBhbmQgb25lIGZvciBwcml2YXRlIGtleXMuICBUaGlzIG1ha2VzIHRoZSBzdHJ1Y3R1cmUgdW5pcXVlbHkgZGVjb2RhYmxlIGFuZCBlYXN5Ci10byB3b3JrIHdpdGguCitUaGUgbGVhZGluZyBCSVQgU1RSSU5HIGhhcyBhIHNpbmdsZSBiaXQgaW4gaXQgd2hpY2ggaXMgemVybyBmb3IgcHVibGljIGtleXMgYW5kIG9uZSBmb3IgcHJpdmF0ZSBrZXlzLiAgVGhpcyBtYWtlcyB0aGUgc3RydWN0dXJlIHVuaXF1ZWx5IGRlY29kYWJsZSwgCithbmQgZWFzeSB0byB3b3JrIHdpdGguCiAKLVxzZWN0aW9ue0tleSBHZW5lcmF0aW9ufQorXG15c2VjdGlvbntLZXkgR2VuZXJhdGlvbn0KIFRvIG1ha2UgYSBEU0Ega2V5IHlvdSBtdXN0IGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRzYV9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIAotICAgICAgICAgICAgICAgICBpbnQgZ3JvdXBfc2l6ZSwgaW50IG1vZHVsdXNfc2l6ZSwgCi0gICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CitpbnQgZHNhX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3cHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGdyb3VwX3NpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtb2R1bHVzX3NpemUsIAorICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KLVRoZSB2YXJpYWJsZSBgYHBybmcnJyBpcyBhbiBhY3RpdmUgUFJORyBzdGF0ZSBhbmQgYGB3cHJuZycnIHRoZSBpbmRleCB0byB0aGUgZGVzY3JpcHRvci4gIGBgZ3JvdXBcX3NpemUnJyBhbmQgCi1gYG1vZHVsdXNcX3NpemUnJyBjb250cm9sIHRoZSBkaWZmaWN1bHR5IG9mIGZvcmdpbmcgYSBzaWduYXR1cmUuICBCb3RoIHBhcmFtZXRlcnMgYXJlIGluIGJ5dGVzLiAgVGhlIGxhcmdlciB0aGUKLWBgZ3JvdXBcX3NpemUnJyB0aGUgbW9yZSBkaWZmaWN1bHQgYSBmb3JnZXJ5IGJlY29tZXMgdXB0byBhIGxpbWl0LiAgVGhlIHZhbHVlIG9mICRncm91cFxfc2l6ZSQgaXMgbGltaXRlZCBieSAKK1RoZSB2YXJpYWJsZSBcdGV4dGl0e3Bybmd9IGlzIGFuIGFjdGl2ZSBQUk5HIHN0YXRlIGFuZCBcdGV4dGl0e3dwcm5nfSB0aGUgaW5kZXggdG8gdGhlIGRlc2NyaXB0b3IuICBcdGV4dGl0e2dyb3VwXF9zaXplfSBhbmQgCitcdGV4dGl0e21vZHVsdXNcX3NpemV9IGNvbnRyb2wgdGhlIGRpZmZpY3VsdHkgb2YgZm9yZ2luZyBhIHNpZ25hdHVyZS4gIEJvdGggcGFyYW1ldGVycyBhcmUgaW4gYnl0ZXMuICBUaGUgbGFyZ2VyIHRoZQorXHRleHRpdHtncm91cFxfc2l6ZX0gdGhlIG1vcmUgZGlmZmljdWx0IGEgZm9yZ2VyeSBiZWNvbWVzIHVwdG8gYSBsaW1pdC4gIFRoZSB2YWx1ZSBvZiAkZ3JvdXBcX3NpemUkIGlzIGxpbWl0ZWQgYnkgCiAkMTUgPCBncm91cFxfc2l6ZSA8IDEwMjQkIGFuZCAkbW9kdWx1c1xfc2l6ZSAtIGdyb3VwXF9zaXplIDwgNTEyJC4gIFN1Z2dlc3RlZCB2YWx1ZXMgZm9yIHRoZSBwYWlycyBhcmUgYXMgZm9sbG93cy4KIAorXGJlZ2lue2ZpZ3VyZX1baGVyZV0KIFxiZWdpbntjZW50ZXJ9CiBcYmVnaW57dGFidWxhcn17fGN8Y3xjfH0KIFxobGluZSBcdGV4dGJme0JpdHMgb2YgU2VjdXJpdHl9ICYgXHRleHRiZntncm91cFxfc2l6ZX0gJiBcdGV4dGJme21vZHVsdXNcX3NpemV9IFxcCkBAIC0zMjIwLDYgKzQwMTcsOCBAQAogXGhsaW5lCiBcZW5ke3RhYnVsYXJ9CiBcZW5ke2NlbnRlcn0KK1xjYXB0aW9ue0RTQSBLZXkgU2l6ZXN9CitcZW5ke2ZpZ3VyZX0KIAogV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggYSBEU0Ega2V5IHlvdSBjYW4gY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIGZyZWUgdGhlIG1lbW9yeSB1c2VkLgogXGluZGV4e2RzYVxfZnJlZSgpfQpAQCAtMzIyNyw3ICs0MDI2LDcgQEAKIHZvaWQgZHNhX2ZyZWUoZHNhX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19CiAKLVxzZWN0aW9ue0tleSBWZXJpZmljYXRpb259CitcbXlzZWN0aW9ue0tleSBWZXJpZmljYXRpb259CiBFYWNoIERTQSBrZXkgaXMgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMuCiAKIFxiZWdpbntlbnVtZXJhdGV9CkBAIC0zMjY2LDgzICs0MDY1LDEzNiBAQAogaW50IGRzYV92ZXJpZnlfa2V5KGRzYV9rZXkgKmtleSwgaW50ICpzdGF0KTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoaXMgd2lsbCB0ZXN0IGBga2V5JycgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gYGBzdGF0JycuICBJZiB0aGUgcmVzdWx0IGlzICRzdGF0ID0gMCQgdGhlIERTQSBrZXkgZmFpbGVkIG9uZSBvZiB0aGUgdGVzdHMKK1RoaXMgd2lsbCB0ZXN0IFx0ZXh0aXR7a2V5fSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBcdGV4dGl0e3N0YXR9LiAgSWYgdGhlIHJlc3VsdCBpcyAkc3RhdCA9IDAkIHRoZSBEU0Ega2V5IGZhaWxlZCBvbmUgb2YgdGhlIHRlc3RzCiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGF0IGFsbC4gIElmIHRoZSByZXN1bHQgaXMgJHN0YXQgPSAxJCB0aGUgRFNBIGtleSBpcyB2YWxpZCAoYXMgZmFyIGFzIHZhbGlkIG1hdGhlbWF0aWNzIGFyZSBjb25jZXJuZWQpLgogCi1cc2VjdGlvbntTaWduYXR1cmVzfQotVG8gZ2VuZXJhdGUgYSBEU0Egc2lnbmF0dXJlIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgorXG15c2VjdGlvbntTaWduYXR1cmVzfQorXHN1YnNlY3Rpb257U2lnbmF0dXJlIEdlbmVyYXRpb259CitUbyBnZW5lcmF0ZSBhIERTQSBzaWduYXR1cmUgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgogCiBcaW5kZXh7ZHNhXF9zaWduXF9oYXNoKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZHNhX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZHNhX2tleSAqa2V5KTsKK2ludCBkc2Ffc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CiBcZW5ke3ZlcmJhdGltfQogCi1XaGljaCB3aWxsIHNpZ24gdGhlIGRhdGEgaW4gYGBpbicnIG9mIGxlbmd0aCBgYGlubGVuJycgYnl0ZXMuICBUaGUgc2lnbmF0dXJlIGlzIHN0b3JlZCBpbiBgYG91dCcnIGFuZCB0aGUgc2l6ZQotb2YgdGhlIHNpZ25hdHVyZSBpbiBgYG91dGxlbicnLiAgSWYgdGhlIHNpZ25hdHVyZSBpcyBsb25nZXIgdGhhbiB0aGUgc2l6ZSB5b3UgaW5pdGlhbGx5IHNwZWNpZnkgaW4gYGBvdXRsZW4nJyBub3RoaW5nCi1pcyBzdG9yZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUuICBUaGUgRFNBIGBga2V5JycgbXVzdCBiZSBvZiB0aGUgXHRleHRiZntQS1xfUFJJVkFURX0gcGVyc3Vhc2lvbi4KK1doaWNoIHdpbGwgc2lnbiB0aGUgZGF0YSBpbiBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gYnl0ZXMuICBUaGUgc2lnbmF0dXJlIGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0gYW5kIHRoZSBzaXplCitvZiB0aGUgc2lnbmF0dXJlIGluIFx0ZXh0aXR7b3V0bGVufS4gIElmIHRoZSBzaWduYXR1cmUgaXMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgeW91IGluaXRpYWxseSBzcGVjaWZ5IGluIFx0ZXh0aXR7b3V0bGVufSBub3RoaW5nCitpcyBzdG9yZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUuICBUaGUgRFNBIFx0ZXh0aXR7a2V5fSBtdXN0IGJlIG9mIHRoZSBcdGV4dGJme1BLXF9QUklWQVRFfSBwZXJzdWFzaW9uLgogCi1UbyB2ZXJpZnkgYSBoYXNoIGNyZWF0ZWQgd2l0aCB0aGF0IGZ1bmN0aW9uIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCitcc3Vic2VjdGlvbntTaWduYXR1cmUgVmVyaWZpY2F0aW9ufQorVG8gdmVyaWZ5IGEgaGFzaCBjcmVhdGVkIHdpdGggdGhhdCBmdW5jdGlvbiB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKIAogXGluZGV4e2RzYVxfdmVyaWZ5XF9oYXNoKCl9IAogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRzYV92ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGlubGVuLCAKLSAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCBkc2Ffa2V5ICprZXkpOworaW50IGRzYV92ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzaWdsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpOwogXGVuZHt2ZXJiYXRpbX0KLVdoaWNoIHdpbGwgdmVyaWZ5IHRoZSBkYXRhIGluIGBgaGFzaCcnIG9mIGxlbmd0aCBgYGlubGVuJycgYWdhaW5zdCB0aGUgc2lnbmF0dXJlIHN0b3JlZCBpbiBgYHNpZycnIG9mIGxlbmd0aCBgYHNpZ2xlbicnLiAgCi1JdCB3aWxsIHNldCBgYHN0YXQnJyB0byAkMSQgaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0IHNldHMgYGBzdGF0JycgdG8gJDAkLiAgCitXaGljaCB3aWxsIHZlcmlmeSB0aGUgZGF0YSBpbiBcdGV4dGl0e2hhc2h9IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBhZ2FpbnN0IHRoZSBzaWduYXR1cmUgc3RvcmVkIGluIFx0ZXh0aXR7c2lnfSBvZiBsZW5ndGggXHRleHRpdHtzaWdsZW59LiAgCitJdCB3aWxsIHNldCBcdGV4dGl0e3N0YXR9IHRvICQxJCBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCBvdGhlcndpc2UgaXQgc2V0cyBcdGV4dGl0e3N0YXR9IHRvICQwJC4gIAogCi1cc2VjdGlvbntJbXBvcnQgYW5kIEV4cG9ydH0KK1xteXNlY3Rpb257RFNBIEVuY3J5cHQgYW5kIERlY3J5cHR9CitBcyBvZiB2ZXJzaW9uIDEuMDcsIHRoZSBEU0Ega2V5cyBjYW4gYmUgdXNlZCB0byBlbmNyeXB0IGFuZCBkZWNyeXB0IHNtYWxsIHBheWxvYWRzLiAgSXQgd29ya3Mgc2ltaWxhciB0byB0aGUgRUNDIGVuY3J5cHRpb24gd2hlcmUKK2Egc2hhcmVkIGtleSBpcyBjb21wdXRlZCwgYW5kIHRoZSBoYXNoIG9mIHRoZSBzaGFyZWQga2V5IFhPUidlZCBhZ2FpbnN0IHRoZSBwbGFpbnRleHQgZm9ybXMgdGhlIGNpcGhlcnRleHQuICBUaGUgZm9ybWF0IHVzZWQgaXMgZnVuY3Rpb25hbCBwb3J0IG9mCit0aGUgRUNDIGVuY3J5cHRpb24gZm9ybWF0IHRvIHRoZSBEU0EgYWxnb3JpdGhtLgogCi1UbyBleHBvcnQgYSBEU0Ega2V5IHNvIHRoYXQgaXQgY2FuIGJlIHRyYW5zcG9ydGVkIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCitcc3Vic2VjdGlvbntEU0EgRW5jcnlwdGlvbn0KK1RoaXMgZnVuY3Rpb24gd2lsbCBlbmNyeXB0IGEgc21hbGwgcGF5bG9hZCB3aXRoIGEgcmVjaXBpZW50cyBwdWJsaWMgRFNBIGtleS4KKworXGluZGV4e2RzYVxfZW5jcnlwdFxfa2V5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZHNhX2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd3BybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBlbmNyeXB0IHRoZSBwYXlsb2FkIGluIFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBhbmQgc3RvcmUgdGhlIGNpcGhlcnRleHQgaW4gdGhlIG91dHB1dCBidWZmZXIgXHRleHRpdHtvdXR9LiAgVGhlCitsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgXHRleHRpdHtvdXRsZW59IG11c3QgYmUgb3JpZ2luYWxseSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4gIFRoZSBEU0EgXHRleHRpdHtrZXl9IGNhbiBiZSAKK2EgcHVibGljIGtleS4KKworXHN1YnNlY3Rpb257RFNBIERlY3J5cHRpb259CisKK1xpbmRleHtkc2FcX2RlY3J5cHRcX2tleSgpfQorXGJlZ2lue3ZlcmJhdGltfSAgICAgICAgICAgICAgICAgICAgICAKK2ludCBkc2FfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGRlY3J5cHQgdGhlIGNpcGhlcnRleHQgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59LCBhbmQgc3RvcmUgdGhlIG9yaWdpbmFsIHBheWxvYWQgaW4gXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0uICAKK1RoZSBEU0EgXHRleHRpdHtrZXl9IG11c3QgYmUgYSBwcml2YXRlIGtleS4KKworXG15c2VjdGlvbntEU0EgS2V5IEltcG9ydCBhbmQgRXhwb3J0fQorCitcc3Vic2VjdGlvbntEU0EgS2V5IEV4cG9ydH0KK1RvIGV4cG9ydCBhIERTQSBrZXkgc28gdGhhdCBpdCBjYW4gYmUgdHJhbnNwb3J0ZWQgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CiBcaW5kZXh7ZHNhXF9leHBvcnQoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBkc2FfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgIGludCB0eXBlLCAKLSAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CitpbnQgZHNhX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKIFxlbmR7dmVyYmF0aW19Ci1UaGlzIHdpbGwgZXhwb3J0IHRoZSBEU0EgYGBrZXknJyB0byB0aGUgYnVmZmVyIGBgb3V0JycgYW5kIHNldCB0aGUgbGVuZ3RoIGluIGBgb3V0bGVuJycgKHdoaWNoIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkKLWluaXRpYWxpemVkIHRvIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplKS4gIFRoZSBgYHR5cGVgYCB2YXJpYWJsZSBtYXkgYmUgZWl0aGVyIFx0ZXh0YmZ7UEtcX1BSSVZBVEV9IG9yIFx0ZXh0YmZ7UEtcX1BVQkxJQ30KK1RoaXMgd2lsbCBleHBvcnQgdGhlIERTQSBcdGV4dGl0e2tleX0gdG8gdGhlIGJ1ZmZlciBcdGV4dGl0e291dH0gYW5kIHNldCB0aGUgbGVuZ3RoIGluIFx0ZXh0aXR7b3V0bGVufSAod2hpY2ggbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseQoraW5pdGlhbGl6ZWQgdG8gdGhlIG1heGltdW0gYnVmZmVyIHNpemUpLiAgVGhlIFx0ZXh0aXR7dHlwZX0gdmFyaWFibGUgbWF5IGJlIGVpdGhlciBcdGV4dGJme1BLXF9QUklWQVRFfSBvciBcdGV4dGJme1BLXF9QVUJMSUN9CiBkZXBlbmRpbmcgb24gd2hldGhlciB5b3Ugd2FudCB0byBleHBvcnQgYSBwcml2YXRlIG9yIHB1YmxpYyBjb3B5IG9mIHRoZSBEU0Ega2V5LgogCitcc3Vic2VjdGlvbntEU0EgS2V5IEltcG9ydH0KIFRvIGltcG9ydCBhbiBleHBvcnRlZCBEU0Ega2V5IHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCi0KKzoKIFxpbmRleHtkc2FcX2ltcG9ydCgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRzYV9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIAotICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKK2ludCBkc2FfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGlzIHdpbGwgaW1wb3J0IHRoZSBEU0Ega2V5IGZyb20gdGhlIGJ1ZmZlciBgYGluJycgb2YgbGVuZ3RoIGBgaW5sZW4nJyB0byB0aGUgYGBrZXknJy4gIElmIHRoZSBwcm9jZXNzIGZhaWxzIHRoZSBmdW5jdGlvbgorVGhpcyB3aWxsIGltcG9ydCB0aGUgRFNBIGtleSBmcm9tIHRoZSBidWZmZXIgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IHRvIHRoZSBcdGV4dGl0e2tleX0uICBJZiB0aGUgcHJvY2VzcyBmYWlscyB0aGUgZnVuY3Rpb24KIHdpbGwgYXV0b21hdGljYWxseSBmcmVlIGFsbCBvZiB0aGUgaGVhcCBhbGxvY2F0ZWQgaW4gdGhlIHByb2Nlc3MgKHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgZHNhXF9mcmVlKCkpLiAgCiAKIFxjaGFwdGVye1N0YW5kYXJkcyBTdXBwb3J0fQotXHNlY3Rpb257QVNOLjEgRm9ybWF0c30KK1xteXNlY3Rpb257QVNOLjEgRm9ybWF0c30KIExpYlRvbUNyeXB0IHN1cHBvcnRzIGEgdmFyaWV0eSBvZiBBU04uMSBkYXRhIHR5cGVzIGVuY29kZWQgd2l0aCB0aGUgRGlzdGluZ3Vpc2hlZCBFbmNvZGluZyBSdWxlcyAoREVSKSBzdWl0YWJsZSBmb3IgdmFyaW91cyBjcnlwdG9ncmFwaGljIHByb3RvY29scy4gIFRoZSBkYXRhIHR5cGVzCiBhcmUgYWxsIHByb3ZpZGVkIHdpdGggdGhyZWUgYmFzaWMgZnVuY3Rpb25zIHdpdGggXHRleHRpdHtzaW1pbGFyfSBwcm90b3R5cGVzLiAgT25lIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZGljYXRlZCB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aCBpbiBvY3RldHMgb2YgYSBnaXZlbgotZm9ybWF0IGFuZCB0d28gZnVuY3Rpb25zIGhhdmUgYmVlbiBkZWRpY2F0ZWQgdG8gZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRoZSBmb3JtYXQuICAKK2Zvcm1hdCwgYW5kIHR3byBmdW5jdGlvbnMgaGF2ZSBiZWVuIGRlZGljYXRlZCB0byBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdGhlIGZvcm1hdC4gIAogCi1PbiB0b3Agb2YgdGhlIGJhc2ljIGRhdGEgdHlwZXMgYXJlIHRoZSBTRVFVRU5DRSBhbmRcZm9vdG5vdGV7UGxhbm5lZCBmb3IgTFRDIDEuMDZ9IFNFVCBkYXRhIHR5cGVzIHdoaWNoIGFyZSBjb2xsZWN0aW9ucyBvZiBvdGhlciBBU04uMSB0eXBlcy4gIFRoZXkgYXJlIHByb3ZpZGVkIAotaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvdGhlciBkYXRhIHR5cGVzIGV4Y2VwdCB0aGV5IHVzZSBsaXN0IG9mIG9iamVjdHMga25vd24gYXMgdGhlIFx0ZXh0YmZ7bHRjXF9hc24xXF9saXN0fSBzdHJ1Y3R1cmUuICBJdCBpcyBkZWZpbmVkIGFzIAorT24gdG9wIG9mIHRoZSBiYXNpYyBkYXRhIHR5cGVzIGFyZSB0aGUgU0VRVUVOQ0UgYW5kIFNFVCBkYXRhIHR5cGVzIHdoaWNoIGFyZSBjb2xsZWN0aW9ucyBvZiBvdGhlciBBU04uMSB0eXBlcy4gIFRoZXkgYXJlIHByb3ZpZGVkIAoraW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvdGhlciBkYXRhIHR5cGVzIGV4Y2VwdCB0aGV5IHVzZSBsaXN0IG9mIG9iamVjdHMga25vd24gYXMgdGhlIFx0ZXh0YmZ7bHRjXF9hc24xXF9saXN0fSBzdHJ1Y3R1cmUuICBJdCBpcyBkZWZpbmVkIGFzIHRoZSBmb2xsb3dpbmc6CiAKIFxpbmRleHtsdGNcX2FzbjFcX2xpc3Qgc3RydWN0dXJlfQogXGJlZ2lue3ZlcmJhdGltfQogdHlwZWRlZiBzdHJ1Y3QgewotICAgaW50ICAgICAgICAgICB0eXBlOwotICAgdm9pZCAgICAgICAgICpkYXRhOwotICAgdW5zaWduZWQgbG9uZyBzaXplOwotICAgaW50ICAgICAgICAgICB1c2VkOworICAgaW50ICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgdm9pZCAgICAgICAgICAgICAgICAgICpkYXRhOworICAgdW5zaWduZWQgbG9uZyAgICAgICAgICBzaXplOworICAgaW50ICAgICAgICAgICAgICAgICAgICB1c2VkOworICAgc3RydWN0IGx0Y19hc24xX2xpc3RfICpwcmV2LCAgKm5leHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICpjaGlsZCwgKnBhcmVudDsKIH0gbHRjX2FzbjFfbGlzdDsKIFxlbmR7dmVyYmF0aW19CiAKLVRoZSBgYHR5cGUnJyBmaWVsZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBBU04uMSBmaWVsZCBkZWZpbml0aW9ucy4gIFRoZSBgYGRhdGEnJyBwb2ludGVyIGlzIGEgdm9pZCBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIGVuY29kZWQgKG9yIHRoZSBkZXN0aW5hdGlvbikgYW5kIHRoZSAKLWBgc2l6ZScnIGZpZWxkIGlzIHNwZWNpZmljIHRvIHdoYXQgeW91IGFyZSBlbmNvZGluZyAoZS5nLiBudW1iZXIgb2YgYml0cyBpbiB0aGUgQklUIFNUUklORyBkYXRhIHR5cGUpLiAgVGhlIGBgdXNlZCcnIGZpZWxkIGlzIHByaW1hcmlseSBmb3IgdGhlIENIT0lDRSBkZWNvZGVyCitcaW5kZXh7TFRDXF9TRVRcX0FTTjEgbWFjcm99CitUaGUgXHRleHRpdHt0eXBlfSBmaWVsZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBBU04uMSBmaWVsZCBkZWZpbml0aW9ucy4gIFRoZSBcdGV4dGl0e2RhdGF9IHBvaW50ZXIgaXMgYSB2b2lkIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgZW5jb2RlZCAob3IgdGhlIGRlc3RpbmF0aW9uKSBhbmQgdGhlIAorXHRleHRpdHtzaXplfSBmaWVsZCBpcyBzcGVjaWZpYyB0byB3aGF0IHlvdSBhcmUgZW5jb2RpbmcgKGUuZy4gbnVtYmVyIG9mIGJpdHMgaW4gdGhlIEJJVCBTVFJJTkcgZGF0YSB0eXBlKS4gIFRoZSBcdGV4dGl0e3VzZWR9IGZpZWxkIGlzIHByaW1hcmlseSBmb3IgdGhlIENIT0lDRSBkZWNvZGVyCiBhbmQgcmVmbGVjdHMgaWYgdGhlIHBhcnRpY3VsYXIgbWVtYmVyIG9mIGEgbGlzdCB3YXMgdGhlIGRlY29kZWQgZGF0YSB0eXBlLiAgVG8gaGVscCBidWlsZCB0aGUgbGlzdHMgaW4gYW4gb3JkZXJseSBmYXNoaW9uIHRoZSBtYWNybwotYGBMVENcX1NFVFxfQVNOMShsaXN0LCBpbmRleCwgVHlwZSwgRGF0YSwgU2l6ZSknJyBoYXMgYmVlbiBwcm92aWRlZC4KK1x0ZXh0aXR7TFRDXF9TRVRcX0FTTjEobGlzdCwgaW5kZXgsIFR5cGUsIERhdGEsIFNpemUpfSBoYXMgYmVlbiBwcm92aWRlZC4KIAotSXQgd2lsbCBhc3NpZ24gdG8gdGhlIGBgaW5kZXgnJ3RoIHBvc2l0aW9uIGluIHRoZSBgYGxpc3QnJyB0aGUgdHJpcHBsZXQgKFR5cGUsIERhdGEsIFNpemUpLiAgQW4gZXhhbXBsZSB1c2FnZSB3b3VsZCBiZToKK0l0IHdpbGwgYXNzaWduIHRvIHRoZSBcdGV4dGl0e2luZGV4fXRoIHBvc2l0aW9uIGluIHRoZSBcdGV4dGl0e2xpc3R9IHRoZSB0cmlwbGV0IChUeXBlLCBEYXRhLCBTaXplKS4gIEFuIGV4YW1wbGUgdXNhZ2Ugd291bGQgYmU6CiAKIFxiZWdpbntzbWFsbH0KIFxiZWdpbnt2ZXJiYXRpbX0KQEAgLTMzNzYsMTYgKzQyMjgsMjAgQEAKIFxiZWdpbnt0YWJ1bGFyfXt8bHxsfH0KIFxobGluZSBcdGV4dGJme0RlZmluaXRpb259ICAgICAgICAgICAmIFx0ZXh0YmZ7QVNOLjEgVHlwZX0gXFwKIFxobGluZSBMVENcX0FTTjFcX0VPTCAgICAgICAgICAgICAgICAmIEVuZCBvZiBhIEFTTi4xIGxpc3Qgc3RydWN0dXJlLiBcXAorXGhsaW5lIExUQ1xfQVNOMVxfQk9PTEVBTiAgICAgICAgICAgICYgQk9PTEVBTiB0eXBlIFxcCiBcaGxpbmUgTFRDXF9BU04xXF9JTlRFR0VSICAgICAgICAgICAgJiBJTlRFR0VSICh1c2VzIG1wXF9pbnQpIFxcCiBcaGxpbmUgTFRDXF9BU04xXF9TSE9SVFxfSU5URUdFUiAgICAgJiBJTlRFR0VSICgzMi0tYml0IHVzaW5nIHVuc2lnbmVkIGxvbmcpIFxcCiBcaGxpbmUgTFRDXF9BU04xXF9CSVRcX1NUUklORyAgICAgICAgJiBCSVQgU1RSSU5HIChvbmUgYml0IHBlciBjaGFyKSBcXAogXGhsaW5lIExUQ1xfQVNOMVxfT0NURVRcX1NUUklORyAgICAgICYgT0NURVQgU1RSSU5HIChvbmUgb2N0ZXQgcGVyIGNoYXIpIFxcCiBcaGxpbmUgTFRDXF9BU04xXF9OVUxMICAgICAgICAgICAgICAgJiBOVUxMIFxcCi1caGxpbmUgTFRDXF9BU04xXF9PQkpFQ1RcX0lERU5USUZJRVIgJiBPQkpFQ1QgSURFTlRJRklFUiAod29yZHMgYXJlIGluIHVuc2lnbmVkIGxvbmcpIFxcCitcaGxpbmUgTFRDXF9BU04xXF9PQkpFQ1RcX0lERU5USUZJRVIgJiBPQkpFQ1QgSURFTlRJRklFUiAgXFwKIFxobGluZSBMVENcX0FTTjFcX0lBNVxfU1RSSU5HICAgICAgICAmIElBNSBTVFJJTkcgKG9uZSBvY3RldCBwZXIgY2hhcikgXFwKLVxobGluZSBMVENcX0FTTjFcX1BSSU5UQUJMRVxfU1RSSU5HICAmIFBSSU5UQUJMRSBTVElSTkcgKG9uZSBvY3RldCBwZXIgY2hhcikgXFwKK1xobGluZSBMVENcX0FTTjFcX1VURjhcX1NUUklORyAgICAgICAmIFVURjggU1RSSU5HIChvbmUgd2NoYXJcX3QgcGVyIGNoYXIpIFxcCitcaGxpbmUgTFRDXF9BU04xXF9QUklOVEFCTEVcX1NUUklORyAgJiBQUklOVEFCTEUgU1RSSU5HIChvbmUgb2N0ZXQgcGVyIGNoYXIpIFxcCiBcaGxpbmUgTFRDXF9BU04xXF9VVENUSU1FICAgICAgICAgICAgJiBVVENUSU1FIChzZWUgbHRjXF91dGN0aW1lIHN0cnVjdHVyZSkgXFwKLVxobGluZSBMVENcX0FTTjFcX1NFUVVFTkNFICAgICAgICAgICAmIFNFUVVFTkNFIE9GIFxcCitcaGxpbmUgTFRDXF9BU04xXF9TRVFVRU5DRSAgICAgICAgICAgJiBTRVFVRU5DRSAoYW5kIFNFUVVFTkNFIE9GKSBcXAorXGhsaW5lIExUQ1xfQVNOMVxfU0VUICAgICAgICAgICAgICAgICYgU0VUIFxcCitcaGxpbmUgTFRDXF9BU04xXF9TRVRPRiAgICAgICAgICAgICAgJiBTRVQgT0YgXFwKIFxobGluZSBMVENcX0FTTjFcX0NIT0lDRSAgICAgICAgICAgICAmIENIT0lDRSBcXAogXGhsaW5lCiBcZW5ke3RhYnVsYXJ9CkBAIC0zMzk3LDM5ICs0MjUzLDQzIEBACiBcc3Vic2VjdGlvbntTRVFVRU5DRSBUeXBlfQogVGhlIFNFUVVFTkNFIGRhdGEgdHlwZSBpcyBhIGNvbGxlY3Rpb24gb2Ygb3RoZXIgQVNOLjEgZGF0YSB0eXBlcyBlbmNhcHN1bGF0ZWQgd2l0aCBhIHNtYWxsIGhlYWRlciB3aGljaCBpcyBhIHVzZWZ1bCB3YXkgb2Ygc2VuZGluZyBtdWx0aXBsZSBkYXRhIHR5cGVzIGluIG9uZSBwYWNrZXQuCiAKLVxzdWJzdWJzZWN0aW9ue1NFVVFORUNFIEVuY29kaW5nfQorXHN1YnN1YnNlY3Rpb257U0VRVUVOQ0UgRW5jb2Rpbmd9CiBUbyBlbmNvZGUgYSBzZXF1ZW5jZSBhIFx0ZXh0YmZ7bHRjXF9hc24xXF9saXN0fSBhcnJheSBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhlIG1lbWJlcnMgb2YgdGhlIHNlcXVlbmNlIGFuZCB0aGVpciByZXNwZWN0aXZlIHBvaW50ZXJzLiAgVGhlIGVuY29kaW5nIGlzIHBlcmZvcm1lZAogd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgogCiBcaW5kZXh7ZGVyXF9lbmNvZGVcX3NlcXVlbmNlKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZGVyX2VuY29kZV9zZXF1ZW5jZShsdGNfYXNuMV9saXN0ICpsaXN0LCB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZW5jb2RlX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQotVGhpcyBlbmNvZGVzIGEgc2VxdWVuY2Ugb2YgaXRlbXMgcG9pbnRlZCB0byBieSBgYGxpc3QnJyB3aGVyZSB0aGUgbGlzdCBoYXMgYGBpbmxlbicnIGl0ZW1zIGluIGl0LiAgVGhlIFNFUVVFTkNFIHdpbGwgYmUgZW5jb2RlZCB0byBgYG91dCcnIGFuZCBvZiBsZW5ndGggYGBvdXRsZW4nJy4gIFRoZQotZnVuY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2hlbiBpdCByZWFkcyBhbGwgdGhlIGl0ZW1zIG91dCBvZiB0aGUgbGlzdCAodXB0byBgYGlubGVuJycpIG9yIGl0IGVuY291bnRlcnMgYW4gaXRlbSBpbiB0aGUgbGlzdCB3aXRoIGEgdHlwZSBvZiBcdGV4dGJme0xUQ1xfQVNOMVxfRU9MfS4KK1RoaXMgZW5jb2RlcyBhIHNlcXVlbmNlIG9mIGl0ZW1zIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtsaXN0fSB3aGVyZSB0aGUgbGlzdCBoYXMgXHRleHRpdHtpbmxlbn0gaXRlbXMgaW4gaXQuICBUaGUgU0VRVUVOQ0Ugd2lsbCBiZSBlbmNvZGVkIHRvIFx0ZXh0aXR7b3V0fSBhbmQgb2YgbGVuZ3RoIFx0ZXh0aXR7b3V0bGVufS4gIFRoZQorZnVuY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2hlbiBpdCByZWFkcyBhbGwgdGhlIGl0ZW1zIG91dCBvZiB0aGUgbGlzdCAodXB0byBcdGV4dGl0e2lubGVufSkgb3IgaXQgZW5jb3VudGVycyBhbiBpdGVtIGluIHRoZSBsaXN0IHdpdGggYSB0eXBlIG9mIFx0ZXh0YmZ7TFRDXF9BU04xXF9FT0x9LgogCi1UaGUgYGBkYXRhJycgcG9pbnRlciBpbiB0aGUgbGlzdCB3b3VsZCBiZSB0aGUgc2FtZSBwb2ludGVyIHlvdSB3b3VsZCBwYXNzIHRvIHRoZSByZXNwZWN0aXZlIEFTTi4xIGVuY29kZXIgKGUuZy4gZGVyXF9lbmNvZGVcX2JpdFxfc3RyaW5nKCkpIGFuZCBpdCBpcyBzaW1wbHkgcGFzc2VkIG9uCitUaGUgXHRleHRpdHtkYXRhfSBwb2ludGVyIGluIHRoZSBsaXN0IHdvdWxkIGJlIHRoZSBzYW1lIHBvaW50ZXIgeW91IHdvdWxkIHBhc3MgdG8gdGhlIHJlc3BlY3RpdmUgQVNOLjEgZW5jb2RlciAoZS5nLiBkZXJcX2VuY29kZVxfYml0XF9zdHJpbmcoKSkgYW5kIGl0IGlzIHNpbXBseSBwYXNzZWQgb24KIHZlcmJhdGltIHRvIHRoZSBkZXBlbmRlbnQgZW5jb2Rlci4gIFRoZSBsaXN0IGNhbiBjb250YWluIG90aGVyIFNFUVVFTkNFIG9yIFNFVCB0eXBlcyB3aGljaCBlbmFibGVzIHlvdSB0byBoYXZlIG5lc3RlZCBTRVFVRU5DRSBhbmQgU0VUIGRlZmluaXRpb25zLiAgSW4gdGhlc2UgY2FzZXMKLXRoZSBgYGRhdGEnJyBwb2ludGVyIGlzIHNpbXBseSBhIHBvaW50ZXIgdG8gYW5vdGhlciBcdGV4dGJme2x0Y1xfYXNuMVxfbGlzdH0uCit0aGUgXHRleHRpdHtkYXRhfSBwb2ludGVyIGlzIHNpbXBseSBhIHBvaW50ZXIgdG8gYW5vdGhlciBcdGV4dGJme2x0Y1xfYXNuMVxfbGlzdH0uCiAKIFxzdWJzdWJzZWN0aW9ue1NFUVVFTkNFIERlY29kaW5nfQogCiBcaW5kZXh7ZGVyXF9kZWNvZGVcX3NlcXVlbmNlKCl9CiAKLURlY29kaW5nIGEgU0VRVUVOQ0UgaXMgc2ltaWxhciB0byBlbmNvZGluZy4gIFlvdSBzZXQgdXAgYW4gYXJyYXkgb2YgXHRleHRiZntsdGNcX2FzbjFcX2xpc3R9IHdoZXJlIGluIHRoaXMgY2FzZSB0aGUgYGBzaXplJycgbWVtYmVyIGlzIHRoZSBtYXhpbXVtIHNpemUgCi0oaW4gY2VydGFpbiBjYXNlcykuICBGb3IgdHlwZXMgc3VjaCBhcyBJQTUgU1RSSU5HLCBCSVQgU1RSSU5HLCBPQ1RFVCBTVFJJTkcgKGV0YykgdGhlIGBgc2l6ZScnIGZpZWxkIGlzIHVwZGF0ZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCBkZWNvZGluZyB0byByZWZsZWN0IGhvdyBtYW55CitEZWNvZGluZyBhIFNFUVVFTkNFIGlzIHNpbWlsYXIgdG8gZW5jb2RpbmcuICBZb3Ugc2V0IHVwIGFuIGFycmF5IG9mIFx0ZXh0YmZ7bHRjXF9hc24xXF9saXN0fSB3aGVyZSBpbiB0aGlzIGNhc2UgdGhlIFx0ZXh0aXR7c2l6ZX0gbWVtYmVyIGlzIHRoZSBtYXhpbXVtIHNpemUgCisoaW4gY2VydGFpbiBjYXNlcykuICBGb3IgdHlwZXMgc3VjaCBhcyBJQTUgU1RSSU5HLCBCSVQgU1RSSU5HLCBPQ1RFVCBTVFJJTkcgKGV0YykgdGhlIFx0ZXh0aXR7c2l6ZX0gZmllbGQgaXMgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIGRlY29kaW5nIHRvIHJlZmxlY3QgaG93IG1hbnkKIHVuaXRzIG9mIHRoZSByZXNwZWN0aXZlIHR5cGUgaGFzIGJlZW4gbG9hZGVkLiAgCiAKIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBkZXJfZGVjb2RlX3NlcXVlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyAgb3V0bGVuKTsKK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGlzIHdpbGwgZGVjb2RlIHVwdG8gYGBvdXRsZW4nJyBpdGVtcyBmcm9tIHRoZSBpbnB1dCBidWZmZXIgYGBpbicnIG9mIGxlbmd0aCBgYGlubGVuJycgb2N0ZXRzLiAgVGhlIGZ1bmN0aW9uIHdpbGwgc3RvcCAoZ3JhY2VmdWxseSkgd2hlbiBpdCBydW5zIG91dCBvZiBpdGVtcyB0byBkZWNvZGUuCi1JdCB3aWxsIGZhaWwgKGZvciBhbW9uZyBvdGhlciByZWFzb25zKSB3aGVuIGl0IHJ1bnMgb3V0IG9mIGlucHV0IGJ5dGVzIHRvIHJlYWQsIGEgZGF0YSB0eXBlIGlzIGludmFsaWQgb3IgYSBoZWFwIGZhaWx1cmUgb2NjdXJlZC4KK1RoaXMgd2lsbCBkZWNvZGUgdXB0byBcdGV4dGl0e291dGxlbn0gaXRlbXMgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBvY3RldHMuICBUaGUgZnVuY3Rpb24gd2lsbCBzdG9wIChncmFjZWZ1bGx5KSB3aGVuIGl0IHJ1bnMgb3V0IG9mIGl0ZW1zIHRvIGRlY29kZS4KK0l0IHdpbGwgZmFpbCAoZm9yIGFtb25nIG90aGVyIHJlYXNvbnMpIHdoZW4gaXQgcnVucyBvdXQgb2YgaW5wdXQgYnl0ZXMgdG8gcmVhZCwgYSBkYXRhIHR5cGUgaXMgaW52YWxpZCBvciBhIGhlYXAgZmFpbHVyZSBvY2N1cnJlZC4KIAotRm9yIHRoZSBmb2xsb3dpbmcgdHlwZXMgdGhlIGBgc2l6ZScnIGZpZWxkIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgdW5pdHMgcmVhZCBvZiB0aGUgZ2l2ZW4gdHlwZS4KK0ZvciB0aGUgZm9sbG93aW5nIHR5cGVzIHRoZSBcdGV4dGl0e3NpemV9IGZpZWxkIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgdW5pdHMgcmVhZCBvZiB0aGUgZ2l2ZW4gdHlwZS4KIFxiZWdpbntlbnVtZXJhdGV9CiAgICBcaXRlbSBCSVQgU1RSSU5HCiAgICBcaXRlbSBPQ1RFVCBTVFJJTkcKQEAgLTM0NDQsMTEgKzQzMDQsMTIgQEAKIAogXGluZGV4e2RlclxfbGVuZ3RoXF9zZXF1ZW5jZSgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRlcl9sZW5ndGhfc2VxdWVuY2UobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKK2ludCBkZXJfbGVuZ3RoX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIGdldCB0aGUgZW5jb2Rpbmcgc2l6ZSBmb3IgdGhlIGdpdmVuIGBgbGlzdCcnIG9mIGxlbmd0aCBgYGlubGVuJycgYW5kIHN0b3JlIGl0IGluIGBgb3V0bGVuJycuICAKK1RoaXMgd2lsbCBnZXQgdGhlIGVuY29kaW5nIHNpemUgZm9yIHRoZSBnaXZlbiBcdGV4dGl0e2xpc3R9IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBhbmQgc3RvcmUgaXQgaW4gXHRleHRpdHtvdXRsZW59LiAgCiAKIFxzdWJzdWJzZWN0aW9ue1NFUVVFTkNFIE11bHRpcGxlIEFyZ3VtZW50IExpc3RzfQogCkBAIC0zNDU4LDQ1ICs0MzE5LDE0MiBAQAogXGluZGV4e2RlclxfZGVjb2RlXF9zZXF1ZW5jZVxfbXVsdGkoKX0KIAogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIC4uLik7Ci1pbnQgZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKTsKK2ludCBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIC4uLik7CisKK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAuLi4pOwogXGVuZHt2ZXJiYXRpbX0KIAogVGhlc2UgZWl0aGVyIGVuY29kZSBvciBkZWNvZGUgKHJlc3BlY3RpdmVseSkgYSBTRVFVRU5DRSBkYXRhIHR5cGUgd2hlcmUgdGhlIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgc3BlY2lmaWVkIGFmdGVyIHRoZSBsZW5ndGggcGFyYW1ldGVyLgogCi1UaGUgbGlzdCBvZiBpdGVtcyBhcmUgc3BlY2lmaWVkIGFzIGEgdHJpcGxlIG9mIHRoZSBmb3JtIGBgKHR5cGUsIHNpemUsIGRhdGEpJycgIHdoZXJlIGBgdHlwZScnIGlzIGFuIFx0ZXh0YmZ7aW50fSwgYGBzaXplJycgaXMgYSBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9Ci1hbmQgYGBkYXRhJycgaXMgXHRleHRiZnt2b2lkfSBwb2ludGVyLiAgVGhlIGxpc3Qgb2YgaXRlbXMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggYW4gaXRlbSB3aXRoIHRoZSB0eXBlIFx0ZXh0YmZ7TFRDXF9BU04xXF9FT0x9LgorVGhlIGxpc3Qgb2YgaXRlbXMgYXJlIHNwZWNpZmllZCBhcyBhIHRyaXBsZSBvZiB0aGUgZm9ybSBcdGV4dGl0eyh0eXBlLCBzaXplLCBkYXRhKX0gIHdoZXJlIFx0ZXh0aXR7dHlwZX0gaXMgYW4gXHRleHRiZntpbnR9LCBcdGV4dGl0e3NpemV9IGlzIGEgXHRleHRiZnt1bnNpZ25lZCBsb25nfQorYW5kIFx0ZXh0aXR7ZGF0YX0gaXMgXHRleHRiZnt2b2lkfSBwb2ludGVyLiAgVGhlIGxpc3Qgb2YgaXRlbXMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggYW4gaXRlbSB3aXRoIHRoZSB0eXBlIFx0ZXh0YmZ7TFRDXF9BU04xXF9FT0x9LgogCi1JdCdzIGlkZWFsIHRoYXQgeW91IGNhc3QgdGhlIGBgc2l6ZScnIHZhbHVlcyB0byB1bnNpZ25lZCBsb25nIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXIgZGF0YSB0eXBlIGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICBDb25zdGFudHMgc3VjaCBhcyBgYDEnJyB3aXRob3V0Ci1hIGNhc3Qgb3IgcHJvdG90eXBlIGFyZSBvZiB0eXBlIFx0ZXh0YmZ7aW50fSBieSBkZWZhdWx0LiAgQXBwZW5kaW5nIFx0ZXh0aXR7VUx9IG9yIHByZXBlbmRpbmcgXHRleHRpdHsodW5zaWduZWQgbG9uZyl9IGlzIGVub3VnaCB0byBjYXN0IGl0IHRvIHRoZSBjb3JyZWN0IHR5cGUuCitJdCBpcyBpZGVhbCB0aGF0IHlvdSBjYXN0IHRoZSBcdGV4dGl0e3NpemV9IHZhbHVlcyB0byB1bnNpZ25lZCBsb25nIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXIgZGF0YSB0eXBlIGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uICBDb25zdGFudHMgc3VjaCBhcyBcdGV4dGl0ezF9IHdpdGhvdXQKK2EgY2FzdCBvciBwcm90b3R5cGUgYXJlIG9mIHR5cGUgXHRleHRiZntpbnR9IGJ5IGRlZmF1bHQuICBBcHBlbmRpbmcgXHRleHRpdHtVTH0gb3IgcHJlLXBlbmRpbmcgXHRleHRpdHsodW5zaWduZWQgbG9uZyl9IGlzIGVub3VnaCB0byBjYXN0IGl0IHRvIHRoZSBjb3JyZWN0IHR5cGUuCisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KK3Vuc2lnbmVkIGNoYXIgYnVmW01BWEJVRlNJWkVdOwordW5zaWduZWQgbG9uZyBidWZsZW47CitpbnQgICAgICAgICAgIGVycjsKKworICAgYnVmbGVuID0gc2l6ZW9mKGJ1Zik7CisgICBpZiAoKGVyciA9IAorICAgICAgICBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKGJ1ZiwgJmJ1ZmxlbiwKKyAgICAgICAgTFRDX0FTTjFfSUE1X1NUUklORywgNVVMLCAiSGVsbG8iLAorICAgICAgICBMVENfQVNOMV9JQTVfU1RSSU5HLCA3VUwsICIgV29ybGQhIiwKKyAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIC8vIGVycm9yIGhhbmRsaW5nCisgICB9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworVGhpcyBleGFtcGxlIGVuY29kZXMgYSBTRVFVRU5DRSB3aXRoIHR3byBJQTUgU1RSSU5HIHR5cGVzIGNvbnRhaW5pbmcgYGBIZWxsbycnIGFuZCBgYCBXb3JsZCEnJyByZXNwZWN0aXZlbHkuICBOb3RlIHRoZSB1c2FnZSBvZiB0aGUgXHRleHRiZntVTH0gbW9kaWZpZXIKK29uIHRoZSBzaXplIHBhcmFtZXRlcnMuICBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gcGFzcyB0aGUgbnVtYmVycyBhcyB0aGUgcmVxdWlyZWQgXHRleHRiZnt1bnNpZ25lZCBsb25nfSB0eXBlIHRoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHMuCisKK1xzdWJzZWN0aW9ue1NFVCBhbmQgU0VUIE9GfQorCitcaW5kZXh7U0VUfSBcaW5kZXh7U0VUIE9GfQorU0VUIGFuZCBTRVQgT0YgYXJlIHJlbGF0ZWQgdG8gdGhlIFNFUVVFTkNFIHR5cGUgaW4gdGhhdCB0aGV5IGNhbiBiZSBwcmV0dHkgbXVjaCBiZSBkZWNvZGVkIHdpdGggdGhlIHNhbWUgY29kZS4gIEhvd2V2ZXIsIHRoZXkgYXJlIGRpZmZlcmVudCwgYW5kIHRoZXkgc2hvdWxkCitiZSBjYXJlZnVsbHkgbm90ZWQuICBUaGUgU0VUIHR5cGUgaXMgYW4gdW5vcmRlcmVkIGFycmF5IG9mIEFTTi4xIHR5cGVzIHNvcnRlZCBieSB0aGUgVEFHICh0eXBlIGlkZW50aWZpZXIpLCB3aGVyZWFzIHRoZSBTRVQgT0YgdHlwZSBpcyBhbiBvcmRlcmVkIGFycmF5IG9mIAorYSBcdGV4dGJme3NpbmdsZX0gQVNOLjEgb2JqZWN0IHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIERFUiB0aGVpciByZXNwZWN0aXZlIGVuY29kaW5ncy4KKworXHN1YnN1YnNlY3Rpb257U0VUIEVuY29kaW5nfQorCitTRVRzIHVzZSB0aGUgc2FtZSBhcnJheSBzdHJ1Y3R1cmUgb2YgbHRjXF9hc24xXF9saXN0IHRoYXQgdGhlIFNFUVVFTkNFIGZ1bmN0aW9ucyB1c2UuICBUaGV5IGFyZSBlbmNvZGVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e2RlclxfZW5jb2RlXF9zZXQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX3NldChsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0gICAgICAgICAgICAKKworVGhpcyB3aWxsIGVuY29kZSB0aGUgbGlzdCBvZiBBU04uMSBvYmplY3RzIGluIFx0ZXh0aXR7bGlzdH0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9iamVjdHMsIGFuZCBzdG9yZSB0aGUgb3V0cHV0IGluIFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IGJ5dGVzLiAgCitUaGUgZnVuY3Rpb24gd2lsbCBtYWtlIGEgY29weSBvZiB0aGUgbGlzdCBwcm92aWRlZCwgYW5kIHNvcnQgaXQgYnkgdGhlIFRBRy4gIE9iamVjdHMgd2l0aCBpZGVudGljYWwgVEFHcyBhcmUgYWRkaXRpb25hbGx5IHNvcnRlZCBvbiB0aGVpciBvcmlnaW5hbCBwbGFjZW1lbnQgaW4gdGhlIAorYXJyYXkgKHRvIG1ha2UgdGhlIHByb2Nlc3MgZGV0ZXJtaW5pc3RpYykuCisKK1RoaXMgZnVuY3Rpb24gd2lsbCBcdGV4dGJme05PVH0gcmVjb2duaXplIFx0ZXh0aXR7REVGQVVMVH0gb2JqZWN0cywgYW5kIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyIHRvIHJlbW92ZSB0aGVtIGFzIHJlcXVpcmVkLgorCitcc3Vic3Vic2VjdGlvbntTRVQgRGVjb2Rpbmd9CisKK1RoZSBTRVQgdHlwZSBjYW4gYmUgZGVjb2RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisKK1xpbmRleHtkZXJcX2RlY29kZVxfc2V0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZGVyX2RlY29kZV9zZXQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hc24xX2xpc3QgKmxpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZGVjb2RlIHRoZSBTRVQgc3BlY2lmaWVkIGJ5IFx0ZXh0aXR7bGlzdH0gb2YgbGVuZ3RoIFx0ZXh0aXR7b3V0bGVufSBvYmplY3RzIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2N0ZXRzLgorCitJdCBoYW5kbGVzIHRoZSBmYWN0IHRoYXQgU0VUcyBhcmUgbm90IHN0cmljdGx5IG9yZGVyZWQgYW5kIHdpbGwgbWFrZSBtdWx0aXBsZSBwYXNzZXMgKGFzIHJlcXVpcmVkKSB0aHJvdWdoIHRoZSBsaXN0IHRvIGRlY29kZSBhbGwgdGhlIG9iamVjdHMuICAKKworXHN1YnN1YnNlY3Rpb257U0VUIExlbmd0aH0KK1RoZSBsZW5ndGggb2YgYSBTRVQgY2FuIGJlIGRldGVybWluZWQgYnkgY2FsbGluZyBkZXJcX2xlbmd0aFxfc2VxdWVuY2UoKSBzaW5jZSB0aGV5IGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcgbGVuZ3RoLgorCitcc3Vic3Vic2VjdGlvbntTRVQgT0YgRW5jb2Rpbmd9CitBIFx0ZXh0aXR7U0VUIE9GfSBvYmplY3QgaXMgYW4gYXJyYXkgb2YgaWRlbnRpY2FsIG9iamVjdHMgKGUuZy4gT0NURVQgU1RSSU5HKSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSBERVIgZW5jb2Rpbmcgb2YgdGhlIG9iamVjdC4gIFRoZXkgYXJlIAordXNlZCB0byBzdG9yZSBvYmplY3RzIGRldGVybWluaXN0aWNhbGx5IGJhc2VkIHNvbGVseSBvbiB0aGVpciBlbmNvZGluZy4gIEl0IHVzZXMgdGhlIHNhbWUgYXJyYXkgc3RydWN0dXJlIG9mIGx0Y1xfYXNuMVxfbGlzdCB0aGF0IHRoZSBTRVFVRU5DRSBmdW5jdGlvbnMKK3VzZS4gIFRoZXkgYXJlIGVuY29kZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX3NldG9mKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZGVyX2VuY29kZV9zZXRvZihsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGVuY29kZSBhIFx0ZXh0aXR7U0VUIE9GfSBjb250YWluaW5nIHRoZSBcdGV4dGl0e2xpc3R9IG9mIFx0ZXh0aXR7aW5sZW59IEFTTi4xIG9iamVjdHMgYW5kIHN0b3JlIHRoZSBlbmNvZGluZyBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBcdGV4dGl0e291dH0gb2YgbGVuZ3RoIFx0ZXh0aXR7b3V0bGVufS4KKworVGhlIHJvdXRpbmUgd2lsbCBmaXJzdCBlbmNvZGUgdGhlIFNFVCBPRiBpbiBhbiB1bm9yZGVyZWQgZmFzaGlvbiAoaW4gYSB0ZW1wb3JhcnkgYnVmZmVyKSB0aGVuIHNvcnQgdXNpbmcgdGhlIFhRU09SVCBtYWNybyBhbmQgY29weSBiYWNrIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiAgVGhpcworbWVhbnMgeW91IG5lZWQgYXQgbGVhc3QgZW5vdWdoIG1lbW9yeSB0byBrZWVwIGFuIGFkZGl0aW9uYWwgY29weSBvZiB0aGUgb3V0cHV0IG9uIHRoZSBoZWFwLiAgCisKK1xzdWJzdWJzZWN0aW9ue1NFVCBPRiBEZWNvZGluZ30KK1NpbmNlIHRoZSBkZWNvZGluZyBvZiBhIFx0ZXh0aXR7U0VUIE9GfSBvYmplY3QgaXMgdW5hbWJpZ3VvdXMgaXQgY2FuIGJlIGRlY29kZWQgd2l0aCBkZXJcX2RlY29kZVxfc2VxdWVuY2UoKS4gIAorCitcc3Vic3Vic2VjdGlvbntTRVQgT0YgTGVuZ3RofQorTGlrZSB0aGUgU0VUIHR5cGUgdGhlIGRlclxfbGVuZ3RoXF9zZXF1ZW5jZSgpIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIGEgXHRleHRpdHtTRVQgT0Z9IG9iamVjdC4KIAogXHN1YnNlY3Rpb257QVNOLjEgSU5URUdFUn0KIAogVG8gZW5jb2RlIG9yIGRlY29kZSBJTlRFR0VSIGRhdGEgdHlwZXMgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLgogCi1caW5kZXh7ZGVyXF9lbmNvZGVcX2ludGVnZXIoKX0KLVxpbmRleHtkZXJcX2RlY29kZVxfaW50ZWdlcigpfQotXGluZGV4e2RlclxfbGVuZ3RoXF9pbnRlZ2VyKCl9CitcaW5kZXh7ZGVyXF9lbmNvZGVcX2ludGVnZXIoKX1caW5kZXh7ZGVyXF9kZWNvZGVcX2ludGVnZXIoKX1caW5kZXh7ZGVyXF9sZW5ndGhcX2ludGVnZXIoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBkZXJfZW5jb2RlX2ludGVnZXIobXBfaW50ICpudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKLWludCBkZXJfZGVjb2RlX2ludGVnZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIG1wX2ludCAqbnVtKTsKLWludCBkZXJfbGVuZ3RoX2ludGVnZXIobXBfaW50ICpudW0sIHVuc2lnbmVkIGxvbmcgKmxlbik7CitpbnQgZGVyX2VuY29kZV9pbnRlZ2VyKCAgICAgICAgIHZvaWQgKm51bSwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBkZXJfZGVjb2RlX2ludGVnZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm51bSk7CisKK2ludCBkZXJfbGVuZ3RoX2ludGVnZXIoICAgICAgICAgdm9pZCAqbnVtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuKTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoZXNlIHdpbGwgZW5jb2RlIG9yIGRlY29kZSBhIHNpZ25lZCBJTlRFR0VSIGRhdGEgdHlwZSB1c2luZyB0aGUgYGBtcFxfaW50JycgZGF0YSB0eXBlIHRvIHN0b3JlIHRoZSBsYXJnZSBJTlRFR0VSLiAgVG8gZW5jb2RlIHNtYWxsZXIgdmFsdWVzIHdpdGhvdXQgYWxsb2NhdGluZwotYW4gbXBcX2ludCB0byBzdG9yZSB0aGUgdmFsdWUgdGhlIGBgc2hvcnQnJyBJTlRFR0VSIGZ1bmN0aW9ucyB3ZXJlIG1hZGUgYXZhaWxhYmxlLgorVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGEgc2lnbmVkIElOVEVHRVIgZGF0YSB0eXBlIHVzaW5nIHRoZSBiaWdudW0gZGF0YSB0eXBlIHRvIHN0b3JlIHRoZSBsYXJnZSBJTlRFR0VSLiAgVG8gZW5jb2RlIHNtYWxsZXIgdmFsdWVzIHdpdGhvdXQgYWxsb2NhdGluZworYSBiaWdudW0gdG8gc3RvcmUgdGhlIHZhbHVlLCB0aGUgXHRleHRpdHtzaG9ydH0gSU5URUdFUiBmdW5jdGlvbnMgd2VyZSBtYWRlIGF2YWlsYWJsZS4KIAotXGluZGV4e2RlclxfZW5jb2RlXF9zaG9ydFxfaW50ZWdlcigpfQotXGluZGV4e2RlclxfZGVjb2RlXF9zaG9ydFxfaW50ZWdlcigpfQotXGluZGV4e2RlclxfbGVuZ3RoXF9zaG9ydFxfaW50ZWdlcigpfQorXGluZGV4e2RlclxfZW5jb2RlXF9zaG9ydFxfaW50ZWdlcigpfVxpbmRleHtkZXJcX2RlY29kZVxfc2hvcnRcX2ludGVnZXIoKX1caW5kZXh7ZGVyXF9sZW5ndGhcX3Nob3J0XF9pbnRlZ2VyKCl9CiBcYmVnaW57dmVyYmF0aW19CiBpbnQgZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyKHVuc2lnbmVkIGxvbmcgIG51bSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIAotaW50IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIAoraW50IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm51bSk7CiAKLWludCBkZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyKHVuc2lnbmVkIGxvbmcgIG51bSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQogCiBUaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYW4gdW5zaWduZWQgXHRleHRiZnt1bnNpZ25lZCBsb25nfSB0eXBlIChvbmx5IHJlYWRzIHVwdG8gMzItLWJpdHMpLiAgRm9yIHZhbHVlcyBpbiB0aGUgcmFuZ2UgJDAgXGRvdHMgMl57MzJ9IC0gMSQgdGhlIGludGVnZXIgCkBAIC0zNTA0LDEwOCArNDQ2MiwxNDUgQEAKIAogXHN1YnNlY3Rpb257QVNOLjEgQklUIFNUUklOR30KIAotXGluZGV4e2RlclxfZW5jb2RlXF9iaXRcX3N0cmluZygpfQotXGluZGV4e2RlclxfZGVjb2RlXF9iaXRcX3N0cmluZygpfQotXGluZGV4e2RlclxfbGVuZ3RoXF9iaXRcX3N0cmluZygpfQorXGluZGV4e2RlclxfZW5jb2RlXF9iaXRcX3N0cmluZygpfVxpbmRleHtkZXJcX2RlY29kZVxfYml0XF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9sZW5ndGhcX2JpdFxfc3RyaW5nKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZGVyX2VuY29kZV9iaXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2VuY29kZV9iaXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiAKLWludCBkZXJfZGVjb2RlX2JpdF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZGVjb2RlX2JpdF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIAotaW50IGRlcl9sZW5ndGhfYml0X3N0cmluZyh1bnNpZ25lZCBsb25nIG5iaXRzLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9sZW5ndGhfYml0X3N0cmluZyh1bnNpZ25lZCBsb25nICBuYml0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYSBCSVQgU1RSSU5HIGRhdGEgdHlwZS4gIFRoZSBiaXRzIGFyZSBwYXNzZWQgaW4gKG9yIHJlYWQgb3V0KSB1c2luZyBvbmUgXHRleHRiZntjaGFyfSBwZXIgYml0LiAgQSBub24tLXplcm8gdmFsdWUgd2lsbCBiZSBpbnRlcnByZXR0ZWQKLWFzIGEgb25lIGJpdCBhbmQgYSB6ZXJvIHZhbHVlIGEgemVybyBiaXQuCitUaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYSBCSVQgU1RSSU5HIGRhdGEgdHlwZS4gIFRoZSBiaXRzIGFyZSBwYXNzZWQgaW4gKG9yIHJlYWQgb3V0KSB1c2luZyBvbmUgXHRleHRiZntjaGFyfSBwZXIgYml0LiAgQSBub24tLXplcm8gdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZAorYXMgYSBvbmUgYml0LCBhbmQgYSB6ZXJvIHZhbHVlIGEgemVybyBiaXQuCiAKIFxzdWJzZWN0aW9ue0FTTi4xIE9DVEVUIFNUUklOR30KIAotXGluZGV4e2RlclxfZW5jb2RlXF9vY3RldFxfc3RyaW5nKCl9Ci1caW5kZXh7ZGVyXF9kZWNvZGVcX29jdGV0XF9zdHJpbmcoKX0KLVxpbmRleHtkZXJcX2xlbmd0aFxfb2N0ZXRcX3N0cmluZygpfQorXGluZGV4e2RlclxfZW5jb2RlXF9vY3RldFxfc3RyaW5nKCl9XGluZGV4e2RlclxfZGVjb2RlXF9vY3RldFxfc3RyaW5nKCl9XGluZGV4e2RlclxfbGVuZ3RoXF9vY3RldFxfc3RyaW5nKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZGVyX2VuY29kZV9vY3RldF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiAKLWludCBkZXJfZGVjb2RlX29jdGV0X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2RlY29kZV9vY3RldF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIAotaW50IGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHVuc2lnbmVkIGxvbmcgbm9jdGV0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfbGVuZ3RoX29jdGV0X3N0cmluZyh1bnNpZ25lZCBsb25nICBub2N0ZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIE9DVEVUIFNUUklORyBkYXRhIHR5cGUuICBUaGUgb2N0ZXRzIGFyZSBzdG9yZWQgdXNpbmcgb25lIFx0ZXh0YmZ7Y2hhcn0gZWFjaC4gIAorVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIE9DVEVUIFNUUklORyBkYXRhIHR5cGUuICBUaGUgb2N0ZXRzIGFyZSBzdG9yZWQgdXNpbmcgb25lIFx0ZXh0YmZ7dW5zaWduZWQgY2hhcn0gZWFjaC4gIAogCiBcc3Vic2VjdGlvbntBU04uMSBPQkpFQ1QgSURFTlRJRklFUn0KIAotXGluZGV4e2RlclxfZW5jb2RlXF9vYmplY3RcX2lkZW50aWZpZXIoKX0KLVxpbmRleHtkZXJcX2RlY29kZVxfb2JqZWN0XF9pZGVudGlmaWVyKCl9Ci1caW5kZXh7ZGVyXF9sZW5ndGhcX29iamVjdFxfaWRlbnRpZmllcigpfQorXGluZGV4e2RlclxfZW5jb2RlXF9vYmplY3RcX2lkZW50aWZpZXIoKX1caW5kZXh7ZGVyXF9kZWNvZGVcX29iamVjdFxfaWRlbnRpZmllcigpfVxpbmRleHtkZXJcX2xlbmd0aFxfb2JqZWN0XF9pZGVudGlmaWVyKCl9CiBcYmVnaW57dmVyYmF0aW19Ci1pbnQgZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllcih1bnNpZ25lZCBsb25nICp3b3JkcywgdW5zaWduZWQgbG9uZyAgbndvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllcih1bnNpZ25lZCBsb25nICp3b3JkcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBud29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIAotaW50IGRlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqd29yZHMsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqd29yZHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIAotaW50IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIodW5zaWduZWQgbG9uZyAqd29yZHMsIHVuc2lnbmVkIGxvbmcgbndvcmRzLCAKK2ludCBkZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG53b3JkcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIE9CSkVDVCBJREVOVElGSUVSIG9iamVjdC4gIFRoZSB3b3JkcyBvZiB0aGUgT0lEIGFyZSBzdG9yZWQgaW4gaW5kaXZpZHVhbCBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9IGVsZW1lbnRzIGFuZCBtdXN0IGJlIGluIHRoZSByYW5nZQorVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIE9CSkVDVCBJREVOVElGSUVSIG9iamVjdC4gIFRoZSB3b3JkcyBvZiB0aGUgT0lEIGFyZSBzdG9yZWQgaW4gaW5kaXZpZHVhbCBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9IGVsZW1lbnRzLCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UKICQwIFxsZG90cyAyXnszMn0gLSAxJC4gIAogCiBcc3Vic2VjdGlvbntBU04uMSBJQTUgU1RSSU5HfQogCi1caW5kZXh7ZGVyXF9lbmNvZGVcX2lhNVxfc3RyaW5nKCl9Ci1caW5kZXh7ZGVyXF9kZWNvZGVcX2lhNVxfc3RyaW5nKCl9Ci1caW5kZXh7ZGVyXF9sZW5ndGhcX2lhNVxfc3RyaW5nKCl9CitcaW5kZXh7ZGVyXF9lbmNvZGVcX2lhNVxfc3RyaW5nKCl9XGluZGV4e2RlclxfZGVjb2RlXF9pYTVcX3N0cmluZygpfVxpbmRleHtkZXJcX2xlbmd0aFxfaWE1XF9zdHJpbmcoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBkZXJfZW5jb2RlX2lhNV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZW5jb2RlX2lhNV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIAotaW50IGRlcl9kZWNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9kZWNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogCi1pbnQgZGVyX2xlbmd0aF9pYTVfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9jdGV0cywgdW5zaWduZWQgbG9uZyBub2N0ZXRzLCAKK2ludCBkZXJfbGVuZ3RoX2lhNV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqb2N0ZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbm9jdGV0cywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYW4gSUE1IFNUUklORy4gIFRoZSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIHN0b3JlZCBpbiBpbmRpdmlkdWFsIFx0ZXh0YmZ7Y2hhcn0gZWxlbWVudHMuICBUaGlzIGZ1bmN0aW9ucyBwZXJmb3JtcyBpbnRlcm5hbCBjaGFyYWN0ZXIKK1RoZXNlIHdpbGwgZW5jb2RlIG9yIGRlY29kZSBhbiBJQTUgU1RSSU5HLiAgVGhlIGNoYXJhY3RlcnMgYXJlIHJlYWQgb3Igc3RvcmVkIGluIGluZGl2aWR1YWwgXHRleHRiZntjaGFyfSBlbGVtZW50cy4gIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtcyBpbnRlcm5hbCBjaGFyYWN0ZXIKIHRvIG51bWVyaWNhbCBjb252ZXJzaW9ucyBiYXNlZCBvbiB0aGUgY29udmVudGlvbnMgb2YgdGhlIGNvbXBpbGVyIGJlaW5nIHVzZWQuICBGb3IgaW5zdGFuY2UsIG9uIGFuIHg4NlxfMzIgbWFjaGluZSAnQScgPT0gNjUgYnV0IHRoZSBzYW1lIG1heSBub3QgYmUgdHJ1ZSBvbiAKLXNheSBhIFNQQVJDIG1hY2hpbmUuICBJbnRlcm5hbGx5IHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgdGFibGUgb2YgbGl0ZXJhbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBudW1lcmljYWwgQVNDSUkgdmFsdWVzLiAgVGhpcyBwcm92aWRlcyBhIHN0YWJsZSBjb252ZXJzaW9uIHByb3ZpZGVkCi10aGF0IHRoZSBidWlsZCBwbGF0Zm9ybSBob25vdXJzIHRoZSBydW50aW1lIHBsYXRmb3JtcyBjaGFyYWN0ZXIgY29udmVudGlvbnMuCi0KLUlmIHlvdSdyZSB3b3JyaWVkIHRyeSBidWlsZGluZyB0aGUgdGVzdCBzdWl0ZSBhbmQgcnVubmluZyBpdC4gIEl0IGhhcyBoYXJkIGNvZGVkIHRlc3QgdmVjdG9ycyB0byBlbnN1cmUgaXQgaXMgb3BlcmF0aW5nIHByb3Blcmx5LiAKK3NheSBhIFNQQVJDIG1hY2hpbmUuICBJbnRlcm5hbGx5LCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBhIHRhYmxlIG9mIGxpdGVyYWwgY2hhcmFjdGVycyBhbmQgdGhlaXIgbnVtZXJpY2FsIEFTQ0lJIHZhbHVlcy4gIFRoaXMgcHJvdmlkZXMgYSBzdGFibGUgY29udmVyc2lvbiBwcm92aWRlZAordGhhdCB0aGUgYnVpbGQgcGxhdGZvcm0gaG9ub3VycyB0aGUgcnVuLS10aW1lIHBsYXRmb3JtcyBjaGFyYWN0ZXIgY29udmVudGlvbnMuCiAKIFxzdWJzZWN0aW9ue0FTTi4xIFBSSU5UQUJMRSBTVFJJTkd9CiAKLVxpbmRleHtkZXJcX2VuY29kZVxfcHJpbnRhYmxlXF9zdHJpbmcoKX0KLVxpbmRleHtkZXJcX2RlY29kZVxfcHJpbnRhYmxlXF9zdHJpbmcoKX0KLVxpbmRleHtkZXJcX2xlbmd0aFxfcHJpbnRhYmxlXF9zdHJpbmcoKX0KK1xpbmRleHtkZXJcX2VuY29kZVxfcHJpbnRhYmxlXF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9kZWNvZGVcX3ByaW50YWJsZVxfc3RyaW5nKCl9XGluZGV4e2RlclxfbGVuZ3RoXF9wcmludGFibGVcX3N0cmluZygpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogCi1pbnQgZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiAKLWludCBkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqb2N0ZXRzLCB1bnNpZ25lZCBsb25nIG5vY3RldHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9sZW5ndGhfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICpvY3RldHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBub2N0ZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIFxlbmR7dmVyYmF0aW19CiAKLVRoZXNlIHdpbGwgZW5jb2RlIG9yIGRlY29kZSBhbiBQUklOVEFCTEUgU1RSSU5HLiAgVGhlIGNoYXJhY3RlcnMgYXJlIHJlYWQgb3Igc3RvcmVkIGluIGluZGl2aWR1YWwgXHRleHRiZntjaGFyfSBlbGVtZW50cy4gIFRoaXMgZnVuY3Rpb25zIHBlcmZvcm1zIGludGVybmFsIGNoYXJhY3RlcgorVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIFBSSU5UQUJMRSBTVFJJTkcuICBUaGUgY2hhcmFjdGVycyBhcmUgcmVhZCBvciBzdG9yZWQgaW4gaW5kaXZpZHVhbCBcdGV4dGJme2NoYXJ9IGVsZW1lbnRzLiAgVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm1zIGludGVybmFsIGNoYXJhY3RlcgogdG8gbnVtZXJpY2FsIGNvbnZlcnNpb25zIGJhc2VkIG9uIHRoZSBjb252ZW50aW9ucyBvZiB0aGUgY29tcGlsZXIgYmVpbmcgdXNlZC4gIEZvciBpbnN0YW5jZSwgb24gYW4geDg2XF8zMiBtYWNoaW5lICdBJyA9PSA2NSBidXQgdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9uIAotc2F5IGEgU1BBUkMgbWFjaGluZS4gIEludGVybmFsbHkgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYSB0YWJsZSBvZiBsaXRlcmFsIGNoYXJhY3RlcnMgYW5kIHRoZWlyIG51bWVyaWNhbCBBU0NJSSB2YWx1ZXMuICBUaGlzIHByb3ZpZGVzIGEgc3RhYmxlIGNvbnZlcnNpb24gcHJvdmlkZWQKLXRoYXQgdGhlIGJ1aWxkIHBsYXRmb3JtIGhvbm91cnMgdGhlIHJ1bnRpbWUgcGxhdGZvcm1zIGNoYXJhY3RlciBjb252ZW50aW9ucy4KK3NheSBhIFNQQVJDIG1hY2hpbmUuICBJbnRlcm5hbGx5LCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBhIHRhYmxlIG9mIGxpdGVyYWwgY2hhcmFjdGVycyBhbmQgdGhlaXIgbnVtZXJpY2FsIEFTQ0lJIHZhbHVlcy4gIFRoaXMgcHJvdmlkZXMgYSBzdGFibGUgY29udmVyc2lvbiBwcm92aWRlZAordGhhdCB0aGUgYnVpbGQgcGxhdGZvcm0gaG9ub3VycyB0aGUgcnVuLXRpbWUgcGxhdGZvcm1zIGNoYXJhY3RlciBjb252ZW50aW9ucy4KIAotSWYgeW91J3JlIHdvcnJpZWQgdHJ5IGJ1aWxkaW5nIHRoZSB0ZXN0IHN1aXRlIGFuZCBydW5uaW5nIGl0LiAgSXQgaGFzIGhhcmQgY29kZWQgdGVzdCB2ZWN0b3JzIHRvIGVuc3VyZSBpdCBpcyBvcGVyYXRpbmcgcHJvcGVybHkuIAorXHN1YnNlY3Rpb257QVNOLjEgVVRGOCBTVFJJTkd9CisKK1xpbmRleHtkZXJcX2VuY29kZVxfdXRmOFxfc3RyaW5nKCl9XGluZGV4e2RlclxfZGVjb2RlXF91dGY4XF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9sZW5ndGhcX3V0ZjhcX3N0cmluZygpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRlcl9lbmNvZGVfdXRmOF9zdHJpbmcoY29uc3Qgd2NoYXJfdCAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9kZWNvZGVfdXRmOF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9sZW5ndGhfdXRmOF9zdHJpbmcoY29uc3Qgd2NoYXJfdCAqb2N0ZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG5vY3RldHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZXNlIHdpbGwgZW5jb2RlIG9yIGRlY29kZSBhbiBVVEY4IFNUUklORy4gIFRoZSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIHN0b3JlZCBpbiBpbmRpdmlkdWFsIFx0ZXh0YmZ7d2NoYXJcX3R9IGVsZW1lbnRzLiAgVGhlc2UgZnVuY3Rpb24gcGVyZm9ybXMgbm8gaW50ZXJuYWwKK21hcHBpbmcgYW5kIHRyZWF0IHRoZSBjaGFyYWN0ZXJzIGFzIGxpdGVyYWxzLiAgCisKK1RoZXNlIGZ1bmN0aW9ucyB1c2UgdGhlIFx0ZXh0YmZ7d2NoYXJcX3R9IHR5cGUgd2hpY2ggaXMgbm90IHVuaXZlcnNhbGx5IGF2YWlsYWJsZS4gIEluIHRob3NlIGNhc2VzLCB0aGUgbGlicmFyeSB3aWxsIHR5cGVkZWYgaXQgdG8gXHRleHRiZnt1bnNpZ25lZCBsb25nfS4gIElmIHlvdSAKK2ludGVuZCB0byB1c2UgdGhlIElTTyBDIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHdpZGUtLWNoYXIgYXJyYXlzLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHdjaGFyXF90IGhhcyBiZWVuIGRlZmluZWQgcHJldmlvdXNseS4KIAogXHN1YnNlY3Rpb257QVNOLjEgVVRDVElNRX0KIAogVGhlIFVUQ1RJTUUgdHlwZSBpcyB0byBzdG9yZSBhIGRhdGUgYW5kIHRpbWUgaW4gQVNOLjEgZm9ybWF0LiAgSXQgdXNlcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0byBvcmdhbml6ZSB0aGUgdGltZS4KIAorXGluZGV4e2x0Y1xfdXRjdGltZSBzdHJ1Y3R1cmV9CiBcYmVnaW57dmVyYmF0aW19CiB0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBZWSwgLyogeWVhciAgICAwMC0tOTkgKi8KQEAgLTM2MjAsMzIgKzQ2MTUsMzIgQEAKIH0gbHRjX3V0Y3RpbWU7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGUgdGltZSBjYW4gYmUgb2Zmc2V0IHBsdXMgb3IgbWludXMgYSBzZXQgYW1vdW50IG9mIGhvdXJzIChvZmZcX2hoKSBhbmQgbWludXRlcyAob2ZmXF9tbSkuICBXaGVuIGBgb2ZmXF9kaXInJyBpcyB6ZXJvIHRoZSB0aW1lIHdpbGwgYmUgYWRkZWQgb3RoZXJ3aXNlIGl0IAotd2lsbCBiZSBzdWJ0cmFjdGVkLiAgCitUaGUgdGltZSBjYW4gYmUgb2Zmc2V0IHBsdXMgb3IgbWludXMgYSBzZXQgYW1vdW50IG9mIGhvdXJzIChvZmZcX2hoKSBhbmQgbWludXRlcyAob2ZmXF9tbSkuICBXaGVuIFx0ZXh0aXR7b2ZmXF9kaXJ9IGlzIHplcm8sIHRoZSB0aW1lIHdpbGwgYmUgYWRkZWQgb3RoZXJ3aXNlIGl0IAord2lsbCBiZSBzdWJ0cmFjdGVkLiAgRm9yIGluc3RhbmNlLCB0aGUgYXJyYXkgJFxsYnJhY2UgNSwgNiwgMjAsIDIyLCA0LCAwMCwgMCwgNSwgMCBccmJyYWNlJCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHRpbWUgb2YgCitcdGV4dGl0ezIwMDUsIEp1bmUgMjB0aCwgMjI6MDQ6MDB9IHdpdGggYSB0aW1lIG9mZnNldCBvZiArMDVoMDAuICAKIAotRm9yIGluc3RhbmNlLCB0aGUgYXJyYXkgJFxsYnJhY2UgNSwgNiwgMjAsIDIyLCA0LCAwMCwgMCwgNSwgMCBccmJyYWNlJCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHRpbWUgb2YgMjAwNSwgSnVuZSAyMHRoLCAyMjowNDowMCB3aXRoIGEgdGltZSBvZmZzZXQgb2YgKzA1aDAwLiAgCi0KLVxpbmRleHtkZXJcX2VuY29kZVxfdXRjdGltZSgpfQotXGluZGV4e2RlclxfZGVjb2RlXF91dGN0aW1lKCl9Ci1caW5kZXh7ZGVyXF9sZW5ndGhcX3V0Y3RpbWUoKX0KK1xpbmRleHtkZXJcX2VuY29kZVxfdXRjdGltZSgpfVxpbmRleHtkZXJcX2RlY29kZVxfdXRjdGltZSgpfVxpbmRleHtkZXJcX2xlbmd0aFxfdXRjdGltZSgpfQogXGJlZ2lue3ZlcmJhdGltfQotaW50IGRlcl9lbmNvZGVfdXRjdGltZShsdGNfdXRjdGltZSAqdXRjdGltZSwgCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9lbmNvZGVfdXRjdGltZSggIGx0Y191dGN0aW1lICp1dGN0aW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogCi1pbnQgZGVyX2RlY29kZV91dGN0aW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nICppbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3V0Y3RpbWUgICAqb3V0KTsKK2ludCBkZXJfZGVjb2RlX3V0Y3RpbWUoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICppbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfdXRjdGltZSAqb3V0KTsKIAotaW50IGRlcl9sZW5ndGhfdXRjdGltZShsdGNfdXRjdGltZSAqdXRjdGltZSwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfbGVuZ3RoX3V0Y3RpbWUoICBsdGNfdXRjdGltZSAqdXRjdGltZSwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQogCi1UaGUgZW5jb2RlciB3aWxsIHN0b3JlIHRpbWUgaW4gb25lIG9mIHRoZSB0d28gQVNOLjEgZm9ybWF0cywgZWl0aGVyIGBgWVlNTUREaGhtbXNzWicnIG9yIGBgWVlNTUREaGhtbXNzJFxwbSRoaG1tJycgYW5kIHBlcmZvcm0gbWluaW1hbCBlcnJvciBjaGVja2luZyBvbiB0aGUgCitUaGUgZW5jb2RlciB3aWxsIHN0b3JlIHRpbWUgaW4gb25lIG9mIHRoZSB0d28gQVNOLjEgZm9ybWF0cywgZWl0aGVyIFx0ZXh0aXR7WVlNTUREaGhtbXNzWn0gb3IgXHRleHRpdHtZWU1NRERoaG1tc3MkXHBtJGhobW19LCBhbmQgcGVyZm9ybSBtaW5pbWFsIGVycm9yIGNoZWNraW5nIG9uIHRoZSAKIGlucHV0LiAgVGhlIGRlY29kZXIgd2lsbCByZWFkIGFsbCB2YWxpZCBBU04uMSBmb3JtYXRzIGFuZCBwZXJmb3JtIHJhbmdlIGNoZWNraW5nIG9uIHRoZSB2YWx1ZXMgKG5vdCBjb21wbGV0ZSBidXQgcmF0aW9uYWwpIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgcGFja2V0IGVycm9ycy4KIAogSXQgaXMgc3VnZ2VzdGVkIHRoYXQgZGVjb2RlZCBkYXRhIGJlIGZ1cnRoZXIgc2NydXRpbml6ZWQgKGUuZy4gZGF5cyBvZiBtb250aCBpbiBwYXJ0aWN1bGFyKS4KIAogXHN1YnNlY3Rpb257QVNOLjEgQ0hPSUNFfQogCi1UaGUgQ0hPSUNFIEFTTi4xIHR5cGUgcmVwcmVzZW50cyBhIHVuaW9uIG9mIEFTTi4xIHR5cGVzIGFsbCBvZiB3aGljaCBhcmUgc3RvcmVkIGluIGEgYGBsdGNcX2FzbjFcX2xpc3QnJy4gIFRoZXJlIGlzIG5vIGVuY29kZXIgZm9yIHRoZSBDSE9JQ0UgdHlwZSwgb25seSBhIAorVGhlIENIT0lDRSBBU04uMSB0eXBlIHJlcHJlc2VudHMgYSB1bmlvbiBvZiBBU04uMSB0eXBlcyBhbGwgb2Ygd2hpY2ggYXJlIHN0b3JlZCBpbiBhIFx0ZXh0aXR7bHRjXF9hc24xXF9saXN0fS4gIFRoZXJlIGlzIG5vIGVuY29kZXIgZm9yIHRoZSBDSE9JQ0UgdHlwZSwgb25seSBhIAogZGVjb2Rlci4gIFRoZSBkZWNvZGVyIHdpbGwgc2NhbiB0aHJvdWdoIHRoZSBwcm92aWRlZCBsaXN0IGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIG9uIHRoZSBpbnB1dCBwYWNrZXQuICBUaGUgbGlzdCBjYW4gY29udGFpbiBhbnkgQVNOLjEgZGF0YQogdHlwZVxmb290bm90ZXtFeGNlcHQgaXQgY2Fubm90IGhhdmUgTFRDXF9BU04xXF9JTlRFR0VSIGFuZCBMVENcX0FTTjFcX1NIT1JUXF9JTlRFR0VSIHNpbXVsdGFuZW91c2x5Ln0gZXhjZXB0IGZvciBvdGhlciBDSE9JQ0UgdHlwZXMuICAKIApAQCAtMzY1MywxNSArNDY0OCwxMTkgQEAKIAogXGluZGV4e2RlclxfZGVjb2RlXF9jaG9pY2UoKX0KIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBkZXJfZGVjb2RlX2Nob2ljZShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nICppbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYXNuMV9saXN0ICpsaXN0LCB1bnNpZ25lZCBsb25nICBvdXRsZW4pOworaW50IGRlcl9kZWNvZGVfY2hvaWNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICppbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBvdXRsZW4pOwogXGVuZHt2ZXJiYXRpbX0KIAotVGhpcyB3aWxsIGRlY29kZSB0aGUgaW5wdXQgaW4gdGhlIGBgaW4nJyBmaWVsZCBvZiBsZW5ndGggYGBpbmxlbicnLiAgSXQgdXNlcyB0aGUgcHJvdmlkZWQgQVNOLjEgbGlzdCBzcGVjaWZpZWQgaW4gdGhlIGBgbGlzdCcnIGZpZWxkIHdoaWNoIGhhcyBgYG91dGxlbicnIGVsZW1lbnRzLiAgCi1UaGUgYGBpbmxlbicnIGZpZWxkIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIGRlY29kZWQgZGF0YSB0eXBlIGFzIHdlbGwgYXMgdGhlIHJlc3BlY3RpdmUgZW50cnkgaW4gdGhlIGBgbGlzdCcnIGZpZWxkIHdpbGwgaGF2ZSB0aGUgYGB1c2VkJycgZmxhZyAKLXNldCB0byBub24tLXplcm8gdG8gcmVmbGVjdCBpdCB3YXMgdGhlIGRhdGEgdHlwZSBkZWNvZGVkLgorVGhpcyB3aWxsIGRlY29kZSB0aGUgaW5wdXQgaW4gdGhlIFx0ZXh0aXR7aW59IGZpZWxkIG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufS4gIEl0IHVzZXMgdGhlIHByb3ZpZGVkIEFTTi4xIGxpc3Qgc3BlY2lmaWVkIGluIHRoZSBcdGV4dGl0e2xpc3R9IGZpZWxkIHdoaWNoIGhhcyAKK1x0ZXh0aXR7b3V0bGVufSBlbGVtZW50cy4gIFRoZSBcdGV4dGl0e2lubGVufSBmaWVsZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNvZGVkIGRhdGEgdHlwZSwgYXMgd2VsbCBhcyB0aGUgcmVzcGVjdGl2ZSBlbnRyeSBpbiB0aGUgXHRleHRpdHtsaXN0fSBmaWVsZCAKK3dpbGwgaGF2ZSB0aGUgXHRleHRpdHt1c2VkfSBmbGFnIHNldCB0byBub24tLXplcm8gdG8gcmVmbGVjdCBpdCB3YXMgdGhlIGRhdGEgdHlwZSBkZWNvZGVkLgogCi1cc2VjdGlvbntQYXNzd29yZCBCYXNlZCBDcnlwdG9ncmFwaHl9Citcc3Vic2VjdGlvbntBU04uMSBGbGV4aSBEZWNvZGVyfQorVGhlIEFTTi4xIFx0ZXh0aXR7ZmxleGl9IGRlY29kZXIgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gZGVjb2RlIGFyYml0cmFyeSBBU04uMSBERVIgcGFja2V0cyAocHJvdmlkZWQgdGhleSB1c2UgZGF0YSB0eXBlcyBMaWJUb21DcnlwdCBzdXBwb3J0cykgd2l0aG91dCBmaXJzdCBrbm93aW5nCit0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhLiAgV2hlcmUgZGVyXF9kZWNvZGUgXF9zZXF1ZW5jZSgpIHJlcXVpcmVzIHRoZSBkZXZlbG9wZXIgdG8gc3BlY2lmeSB0aGUgZGF0YSB0eXBlcyB0byBkZWNvZGUgaW4gYWR2YW5jZSB0aGUgZmxleGkgZGVjb2RlciBpcyBlbnRpcmVseQorZnJlZSBmb3JtLgorCitUaGUgZmxleGkgZGVjb2RlciB1c2VzIHRoZSBzYW1lIFx0ZXh0aXR7bHRjXF9hc24xXF9saXN0fSBidXQgaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQgaW4gYW4gYXJyYXkgaXQgdXNlcyB0aGUgbGlua2VkIGxpc3QgcG9pbnRlcnMgXHRleHRpdHtwcmV2fSwgXHRleHRpdHtuZXh0fSwgXHRleHRpdHtwYXJlbnR9IAorYW5kIFx0ZXh0aXR7Y2hpbGR9LiAgVGhlIGxpc3Qgd29ya3MgYXMgYSBcdGV4dGl0e2RvdWJseS1saW5rZWQgbGlzdH0gc3RydWN0dXJlIHdoZXJlIGRlY29kZWQgaXRlbXMgYXQgdGhlIHNhbWUgbGV2ZWwgYXJlIHNpYmxpbmdzICh1c2luZyBuZXh0IGFuZCBwcmV2KSBhbmQgaXRlbXMKK2VuY29kZWQgaW4gYSBTRVFVRU5DRSBhcmUgc3RvcmVkIGFzIGEgY2hpbGQgZWxlbWVudC4KKworV2hlbiBhIFNFUVVFTkNFIG9yIFNFVCBoYXMgYmVlbiBlbmNvdW50ZXJlZCBhIFNFUVVFTkNFIChvciBTRVQgcmVzcC4pIGl0ZW0gd2lsbCBiZSBhZGRlZCBhcyBhIHNpYmxpbmcgKGUuZy4gbGlzdC50eXBlID09IExUQ1xfQVNOMVxfU0VRVUVOQ0UpIGFuZCB0aGUgY2hpbGQgCitwb2ludGVyIHBvaW50cyB0byBhIG5ldyBsaXN0IG9mIGl0ZW1zIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG9iamVjdC4KKworXGluZGV4e2RlclxfZGVjb2RlXF9zZXF1ZW5jZVxfZmxleGkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCAgZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqKm91dCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZGVjb2RlIGl0ZW1zIGluIHRoZSBcdGV4dGl0e2lufSBidWZmZXIgb2YgbWF4IGlucHV0IGxlbmd0aCBcdGV4dGl0e2lubGVufSBhbmQgc3RvcmUgdGhlIG5ld2x5IGNyZWF0ZWQgcG9pbnRlciB0byB0aGUgbGlzdCBpbiBcdGV4dGl0e291dH0uICBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcworYWxsIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIGRlY29kaW5nLiAgSXQgc3RvcmVzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHJlYWQgYmFjayBpbnRvIFx0ZXh0aXR7aW5sZW59LgorCitUaGUgZnVuY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2hlbiBlaXRoZXIgaXQgaGl0cyBhbiBpbnZhbGlkIEFTTi4xIHRhZywgb3IgaXQgcmVhZHMgXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgQW4gZWFybHkgdGVybWluYXRpb24gaXMgYSBzb2Z0IGVycm9yLCBhbmQgcmV0dXJucworbm9ybWFsbHkuICBUaGUgZGVjb2RlZCBsaXN0IFx0ZXh0aXR7b3V0fSB3aWxsIHBvaW50IHRvIHRoZSB2ZXJ5IGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgKGUuZy4gYm90aCBwYXJlbnQgYW5kIHByZXYgcG9pbnRlcnMgd2lsbCBiZSBcdGV4dGJme05VTEx9KS4gIAorCitBbiBpbnZhbGlkIGRlY29kaW5nIHdpbGwgdGVybWluYXRlIHRoZSBwcm9jZXNzLCBhbmQgZnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhdXRvbWF0aWNhbGx5LiAgCisKK1x0ZXh0YmZ7Tm90ZTp9IHRoZSBsaXN0IGRlY29kZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBcdGV4dGJme05PVH0gaW4gdGhlIGNvcnJlY3QgZm9ybSBmb3IgZGVyXF9lbmNvZGVcX3NlcXVlbmNlKCkgdG8gdXNlIGRpcmVjdGx5LiAgWW91IHdpbGwgaGF2ZSB0byBmaXJzdCAKK2hhdmUgdG8gY29udmVydCB0aGUgbGlzdCBieSBmaXJzdCBzdG9yaW5nIGFsbCBvZiB0aGUgc2libGluZ3MgaW4gYW4gYXJyYXkgdGhlbiBzdG9yaW5nIGFsbCB0aGUgY2hpbGRyZW4gYXMgc3ViLWxpc3RzIG9mIGEgc2VxdWVuY2UgdXNpbmcgdGhlIFx0ZXh0aXR7LmRhdGF9IAorcG9pbnRlci4gIEN1cnJlbnRseSBubyBmdW5jdGlvbiBpbiBMaWJUb21DcnlwdCBwcm92aWRlcyB0aGlzIGFiaWxpdHkuCisKK1xzdWJzdWJzZWN0aW9ue1NhbXBsZSBEZWNvZGluZ30KK1N1cHBvc2Ugd2UgZGVjb2RlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorVXNlciA6Oj0gU0VRVUVOQ0UgeworICAgTmFtZSAgICAgICAgSUE1IFNUUklORworICAgTG9naW5Ub2tlbiAgU0VRVUVOQ0UgeworICAgICAgcGFzc3dkSGFzaCAgIE9DVEVUIFNUUklORworICAgICAgcHVia2V5ICAgICAgIEVDQ1B1YmxpY0tleQorICAgfQorICAgTGFzdE9uICAgICAgVVRDVElNRQorfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CitcYmVnaW57Zmx1c2hsZWZ0fWFuZCB3ZSBkZWNvZGVkIGl0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOlxlbmR7Zmx1c2hsZWZ0fQorCitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19Cit1bnNpZ25lZCBjaGFyIGluYnVmW01BWFNJWkVdOwordW5zaWduZWQgbG9uZyBpbmJ1ZmxlbjsKK2x0Y19hc24xX2xpc3QgKmxpc3Q7CitpbnQgICAgICAgICAgIGVycjsKKworLyogc29tZWhvdyBmaWxsIGluYnVmL2luYnVmbGVuICovCitpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkoaW5idWYsIGluYnVmbGVuLCAmbGlzdCkpICE9IENSWVBUX09LKSB7CisgICBwcmludGYoIkVycm9yIGRlY29kaW5nOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK0F0IHRoaXMgcG9pbnQgXHRleHRpdHtsaXN0fSB3b3VsZCBwb2ludCB0byB0aGUgU0VRVUVOQ0UgaWRlbnRpZmllZCBieSBcdGV4dGl0e1VzZXJ9LiAgSXQgd291bGQgaGF2ZSBubyBzaWJibGluZ3MgKHByZXYgb3IgbmV4dCksIGFuZCBvbmx5IGEgY2hpbGQgbm9kZS4gIFdhbGtpbmcgdG8gdGhlIGNoaWxkCitub2RlIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgYnJpbmcgdXMgdG8gdGhlIFx0ZXh0aXR7TmFtZX0gcG9ydGlvbiBvZiB0aGUgU0VRVUVOQ0U6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitsaXN0ID0gbGlzdC0+Y2hpbGQ7CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KK05vdyBcdGV4dGl0e2xpc3R9IHBvaW50cyB0byB0aGUgXHRleHRpdHtOYW1lfSBtZW1iZXIgKHdpdGggdGhlIHRhZyBJQTUgU1RSSU5HKS4gIFRoZSBcdGV4dGl0e2RhdGF9LCBcdGV4dGl0e3NpemV9LCBhbmQgXHRleHRpdHt0eXBlfSBtZW1iZXJzIG9mIFx0ZXh0aXR7bGlzdH0gc2hvdWxkIHJlZmxlY3QKK3RoYXQgb2YgYW4gSUE1IFNUUklORy4gIFRoZSBzaWJibGluZyB3aWxsIG5vdyBiZSB0aGUgXHRleHRpdHtMb2dpblRva2VufSBTRVFVRU5DRS4gIFRoZSBzaWJibGluZyBoYXMgYSBjaGlsZCBub2RlIHdoaWNoIHBvaW50cyB0byB0aGUgXHRleHRpdHtwYXNzd2RIYXNofSBPQ1RFVCBTVFJJTkcuCitXZSBjYW4gd2FsayB0byB0aGlzIG5vZGUgd2l0aCB0aGUgZm9sbG93aW5nIGNvZGU6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CisvKiBsaXN0IGFscmVhZHkgcG9pbnRpbmcgdG8gJ05hbWUnICovCitsaXN0ID0gbGlzdC0+bmV4dC0+Y2hpbGQ7CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KK0F0IHRoaXMgcG9pbnQsIFx0ZXh0aXR7bGlzdH0gd2lsbCBwb2ludCB0byB0aGUgXHRleHRpdHtwYXNzd2RIYXNofSBtZW1iZXIgb2YgdGhlIGlubmVybW9zdCBTRVFVRU5DRS4gIFRoaXMgbm9kZSBoYXMgYSBzaWJibGluZywgdGhlIFx0ZXh0aXR7cHVia2V5fSBtZW1iZXIgb2YgdGhlIFNFUVVFTkNFLgorVGhlIFx0ZXh0aXR7TGFzdE9ufSBtZW1iZXIgb2YgdGhlIFNFUVVFTkNFIGlzIGEgc2liYmxpbmcgb2YgdGhlIExvZ2luVG9rZW4gbm9kZSwgaWYgd2Ugd2FudGVkIHRvIHdhbGsgdGhlcmUgd2Ugd291bGQgaGF2ZSB0byBnbyB1cCBhbmQgb3ZlciB2aWE6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitsaXN0ID0gbGlzdC0+cGFyZW50LT5uZXh0OworXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CitBdCB0aGlzIHBvaW50LCB3ZSBhcmUgcG9pbnRpbmcgdG8gdGhlIGxhc3Qgbm9kZSBvZiB0aGUgbGlzdC4gIExpc3RzIGFyZSB0ZXJtaW5hdGVkIGluIGFsbCBkaXJlY3Rpb25zIGJ5IGEgXHRleHRiZntOVUxMfSBwb2ludGVyLiAgQWxsIG5vZGVzIGFyZSBkb3VibHkgbGlua2VkIHNvIHRoYXQgeW91IAorY2FuIHdhbGsgdXAgYW5kIGRvd24gdGhlIG5vZGVzIHdpdGhvdXQga2VlcGluZyBwb2ludGVycyBseWluZyBhcm91bmQuCisKKworCisKKworXHN1YnN1YnNlY3Rpb257RnJlZSdpbmcgYSBGbGV4aSBMaXN0fQorVG8gZnJlZSB0aGUgbGlzdCB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e2Rlclxfc2VxdWVuY2VcX2ZyZWUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK3ZvaWQgZGVyX3NlcXVlbmNlX2ZyZWUobHRjX2FzbjFfbGlzdCAqaW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGZyZWUgYWxsIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRlclxfZGVjb2RlXF9zZXF1ZW5jZVxfZmxleGkoKS4KKworXG15c2VjdGlvbntQYXNzd29yZCBCYXNlZCBDcnlwdG9ncmFwaHl9CiBcc3Vic2VjdGlvbntQS0NTIFwjNX0KIFxpbmRleHtQS0NTIFwjNX0KIEluIG9yZGVyIHRvIHNlY3VyZWx5IGhhbmRsZSB1c2VyIHBhc3N3b3JkcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGNyZWF0aW5nIHNlc3Npb24ga2V5cyBhbmQgY2hhaW5pbmcgSVZzIHRoZSBQS0NTIFwjNSB3YXMgZHJhZnRlZC4gICBQS0NTIFwjNQpAQCAtMzY2OSw0NyArNDc2OCw1NSBAQAogZm9yIGNvbXBsZXRlbmVzcy4gIEFsZ29yaXRobSBUd28gaXMgYSBiaXQgbW9yZSBtb2Rlcm4gYW5kIG1vcmUgZmxleGlibGUgdG8gd29yayB3aXRoLgogCiBcc3Vic2VjdGlvbntBbGdvcml0aG0gT25lfQotQWxnb3JpdGhtIE9uZSBhY2NlcHRzIGFzIGlucHV0IGEgcGFzc3dvcmQsIGFuIDgtLWJ5dGUgc2FsdCBhbmQgYW4gaXRlcmF0aW9uIGNvdW50ZXIuICBUaGUgaXRlcmF0aW9uIGNvdW50ZXIgaXMgbWVhbnQgdG8gYWN0IGFzIGRlbGF5IGZvcgorQWxnb3JpdGhtIE9uZSBhY2NlcHRzIGFzIGlucHV0IGEgcGFzc3dvcmQsIGFuIDgtLWJ5dGUgc2FsdCwgYW5kIGFuIGl0ZXJhdGlvbiBjb3VudGVyLiAgVGhlIGl0ZXJhdGlvbiBjb3VudGVyIGlzIG1lYW50IHRvIGFjdCBhcyBkZWxheSBmb3IKIHBlb3BsZSB0cnlpbmcgdG8gYnJ1dGUgZm9yY2UgZ3Vlc3MgdGhlIHBhc3N3b3JkLiAgVGhlIGhpZ2hlciB0aGUgaXRlcmF0aW9uIGNvdW50ZXIgdGhlIGxvbmdlciB0aGUgZGVsYXkuICBUaGlzIGFsZ29yaXRobSBhbHNvIHJlcXVpcmVzIGEgaGFzaCAKIGFsZ29yaXRobSBhbmQgcHJvZHVjZXMgYW4gb3V0cHV0IG5vIGxvbmdlciB0aGFuIHRoZSBvdXRwdXQgb2YgdGhlIGhhc2guICAKIAogXGluZGV4e3BrY3NcXzVcX2FsZzEoKX0KIFxiZWdpbnthbGx0dH0KLWludCBwa2NzXzVfYWxnMShjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgbG9uZyBwYXNzd29yZF9sZW4sIAoraW50IHBrY3NfNV9hbGcxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBwYXNzd29yZF9sZW4sIAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIAotICAgICAgICAgICAgICAgIGludCBpdGVyYXRpb25fY291bnQsICBpbnQgaGFzaF9pZHgsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBpdGVyYXRpb25fY291bnQsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQogXGVuZHthbGx0dH0KLVdoZXJlIGBgcGFzc3dvcmQnJyBpcyB0aGUgdXNlcnMgcGFzc3dvcmQuICBTaW5jZSB0aGUgYWxnb3JpdGhtIGFsbG93cyBiaW5hcnkgcGFzc3dvcmRzIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgbGVuZ3RoIGluIGBgcGFzc3dvcmRcX2xlbicnLiAgCi1UaGUgYGBzYWx0JycgaXMgYSBmaXhlZCBzaXplIDgtLWJ5dGUgYXJyYXkgd2hpY2ggc2hvdWxkIGJlIHJhbmRvbSBmb3IgZWFjaCB1c2VyIGFuZCBzZXNzaW9uLiAgVGhlIGBgaXRlcmF0aW9uXF9jb3VudCcnIGlzIHRoZSBkZWxheSBkZXNpcmVkCi1vbiB0aGUgcGFzc3dvcmQuICBUaGUgYGBoYXNoXF9pZHgnJyBpcyB0aGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdpc2ggdG8gdXNlIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlLiAgCitXaGVyZSBcdGV4dGl0e3Bhc3N3b3JkfSBpcyB0aGUgdXNlcidzIHBhc3N3b3JkLiAgU2luY2UgdGhlIGFsZ29yaXRobSBhbGxvd3MgYmluYXJ5IHBhc3N3b3JkcyB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGxlbmd0aCBpbiBcdGV4dGl0e3Bhc3N3b3JkXF9sZW59LiAgCitUaGUgXHRleHRpdHtzYWx0fSBpcyBhIGZpeGVkIHNpemUgOC0tYnl0ZSBhcnJheSB3aGljaCBzaG91bGQgYmUgcmFuZG9tIGZvciBlYWNoIHVzZXIgYW5kIHNlc3Npb24uICBUaGUgXHRleHRpdHtpdGVyYXRpb25cX2NvdW50fSBpcyB0aGUgZGVsYXkgZGVzaXJlZAorb24gdGhlIHBhc3N3b3JkLiAgVGhlIFx0ZXh0aXR7aGFzaFxfaWR4fSBpcyB0aGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdpc2ggdG8gdXNlIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlLiAgCiAKLVRoZSBvdXRwdXQgb2YgbGVuZ3RoIHVwdG8gYGBvdXRsZW4nJyBpcyBzdG9yZWQgaW4gYGBvdXQnJy4gIElmIGBgb3V0bGVuJycgaXMgaW5pdGlhbGx5IGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBoYXNoIGZ1bmN0aW9ucyBvdXRwdXQKLWl0IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN0b3JlZC4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiBub3QgYWxsIG9mIHRoZSBoYXNoIG91dHB1dCBpcyBzdG9yZWQgaW4gYGBvdXQnJy4KK1RoZSBvdXRwdXQgb2YgbGVuZ3RoIHVwIHRvIFx0ZXh0aXR7b3V0bGVufSBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9LiAgSWYgXHRleHRpdHtvdXRsZW59IGlzIGluaXRpYWxseSBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgaGFzaCBmdW5jdGlvbnMgb3V0cHV0CitpdCBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBzdG9yZWQuICBJZiBpdCBpcyBzbWFsbGVyIHRoYW4gbm90IGFsbCBvZiB0aGUgaGFzaCBvdXRwdXQgaXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fS4KIAogXHN1YnNlY3Rpb257QWxnb3JpdGhtIFR3b30KIAotQWxnb3JpdGhtIFR3byBpcyB0aGUgcmVjb21tZW5kZWQgYWxnb3JpdGhtIGZvciB0aGlzIHRhc2suICBJdCBhbGxvd3MgdmFyaWFibGUgbGVuZ3RoIHNhbHRzIGFuZCBjYW4gcHJvZHVjZSBvdXRwdXRzIGxhcmdlciB0aGFuIHRoZSAKLWhhc2ggZnVuY3Rpb25zIG91dHB1dC4gIEFzIHN1Y2ggaXQgY2FuIGVhc2lseSBiZSB1c2VkIHRvIGRlcml2ZSBzZXNzaW9uIGtleXMgZm9yIGNpcGhlcnMgYW5kIE1BQ3MgYXMgd2VsbCBpbml0aWFsIHZlY3RvcnMgYXMgcmVxdWlyZWQKLWZyb20gYSBzaW5nbGUgcGFzc3dvcmQgYW5kIGludm9rYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uCitBbGdvcml0aG0gVHdvIGlzIHRoZSByZWNvbW1lbmRlZCBhbGdvcml0aG0gZm9yIHRoaXMgdGFzay4gIEl0IGFsbG93cyB2YXJpYWJsZSBsZW5ndGggc2FsdHMsIGFuZCBjYW4gcHJvZHVjZSBvdXRwdXRzIGxhcmdlciB0aGFuIHRoZSAKK2hhc2ggZnVuY3Rpb25zIG91dHB1dC4gIEFzIHN1Y2gsIGl0IGNhbiBlYXNpbHkgYmUgdXNlZCB0byBkZXJpdmUgc2Vzc2lvbiBrZXlzIGZvciBjaXBoZXJzIGFuZCBNQUNzIGFzIHdlbGwgaW5pdGlhbCB2ZWN0b3JzIGFzIHJlcXVpcmVkCitmcm9tIGEgc2luZ2xlIHBhc3N3b3JkIGFuZCBpbnZvY2F0aW9uIG9mIHRoaXMgYWxnb3JpdGhtLgogCiBcaW5kZXh7cGtjc1xfNVxfYWxnMigpfQogXGJlZ2lue2FsbHR0fQotaW50IHBrY3NfNV9hbGcyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLCB1bnNpZ25lZCBsb25nIHBhc3N3b3JkX2xlbiwgCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgICAgIHVuc2lnbmVkIGxvbmcgc2FsdF9sZW4sCi0gICAgICAgICAgICAgICAgaW50IGl0ZXJhdGlvbl9jb3VudCwgICAgICAgICAgIGludCBoYXNoX2lkeCwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoraW50IHBrY3NfNV9hbGcyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHBhc3N3b3JkX2xlbiwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBpdGVyYXRpb25fY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pCiBcZW5ke2FsbHR0fQotV2hlcmUgYGBwYXNzd29yZCcnIGlzIHRoZSB1c2VycyBwYXNzd29yZC4gIFNpbmNlIHRoZSBhbGdvcml0aG0gYWxsb3dzIGJpbmFyeSBwYXNzd29yZHMgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHRoZSBsZW5ndGggaW4gYGBwYXNzd29yZFxfbGVuJycuICAKLVRoZSBgYHNhbHQnJyBpcyBhbiBhcnJheSBvZiBzaXplIGBgc2FsdFxfbGVuJycuICBJdCBzaG91bGQgYmUgcmFuZG9tIGZvciBlYWNoIHVzZXIgYW5kIHNlc3Npb24uICBUaGUgYGBpdGVyYXRpb25cX2NvdW50JycgaXMgdGhlIGRlbGF5IGRlc2lyZWQKLW9uIHRoZSBwYXNzd29yZC4gIFRoZSBgYGhhc2hcX2lkeCcnIGlzIHRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2lzaCB0byB1c2UgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGUuICAgVGhlIG91dHB1dCBvZiBsZW5ndGggdXB0byAKLWBgb3V0bGVuJycgaXMgc3RvcmVkIGluIGBgb3V0JycuCitXaGVyZSBcdGV4dGl0e3Bhc3N3b3JkfSBpcyB0aGUgdXNlcnMgcGFzc3dvcmQuICBTaW5jZSB0aGUgYWxnb3JpdGhtIGFsbG93cyBiaW5hcnkgcGFzc3dvcmRzIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgbGVuZ3RoIGluIFx0ZXh0aXR7cGFzc3dvcmRcX2xlbn0uICAKK1RoZSBcdGV4dGl0e3NhbHR9IGlzIGFuIGFycmF5IG9mIHNpemUgXHRleHRpdHtzYWx0XF9sZW59LiAgSXQgc2hvdWxkIGJlIHJhbmRvbSBmb3IgZWFjaCB1c2VyIGFuZCBzZXNzaW9uLiAgVGhlIFx0ZXh0aXR7aXRlcmF0aW9uXF9jb3VudH0gaXMgdGhlIGRlbGF5IGRlc2lyZWQKK29uIHRoZSBwYXNzd29yZC4gIFRoZSBcdGV4dGl0e2hhc2hcX2lkeH0gaXMgdGhlIGluZGV4IG9mIHRoZSBoYXNoIHlvdSB3aXNoIHRvIHVzZSBpbiB0aGUgZGVzY3JpcHRvciB0YWJsZS4gICBUaGUgb3V0cHV0IG9mIGxlbmd0aCB1cCB0byAKK1x0ZXh0aXR7b3V0bGVufSBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9LgogCi1cYmVnaW57YWxsdHR9Ci0vKiBkZW1vIHRvIHNob3cgaG93IHRvIG1ha2Ugc2Vzc2lvbiBzdGF0ZSBtYXRlcmlhbCBmcm9tIGEgcGFzc3dvcmQgKi8KK1xiZWdpbnt2ZXJiYXRpbX0KKy8qIGRlbW8gdG8gc2hvdyBob3cgdG8gbWFrZSBzZXNzaW9uIHN0YXRlIG1hdGVyaWFsIAorICogZnJvbSBhIHBhc3N3b3JkICovCiAjaW5jbHVkZSA8dG9tY3J5cHQuaD4KIGludCBtYWluKHZvaWQpCi1ceworewogICAgIHVuc2lnbmVkIGNoYXIgcGFzc3dvcmRbMTAwXSwgc2FsdFsxMDBdLAogICAgICAgICAgICAgICAgICAgY2lwaGVyX2tleVsxNl0sIGNpcGhlcl9pdlsxNl0sCiAgICAgICAgICAgICAgICAgICBtYWNfa2V5WzE2XSwgb3V0YnVmWzQ4XTsKQEAgLTM3MjIsMTAgKzQ4MjksMTIgQEAKIAogICAgIC8qIGNyZWF0ZSB0aGUgbWF0ZXJpYWwgKDEwMCBpdGVyYXRpb25zIGluIGFsZ29yaXRobSkgKi8KICAgICBvdXRsZW4gPSBzaXplb2Yob3V0YnVmKTsKLSAgICBpZiAoKGVyciA9IHBrY3NfNV9hbGcyKHBhc3N3b3JkLCBwYXNzd29yZF9sZW4sIHNhbHQsIHNhbHRfbGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCwgaGFzaF9pZHgsIG91dGJ1ZiwgJm91dGxlbikpICE9IENSWVBUX09LKSBceworICAgIGlmICgoZXJyID0gcGtjc181X2FsZzIocGFzc3dvcmQsIHBhc3N3b3JkX2xlbiwgc2FsdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWx0X2xlbiwgMTAwLCBoYXNoX2lkeCwgb3V0YnVmLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRsZW4pKSAKKyAgICAgICAhPSBDUllQVF9PSykgewogICAgICAgIC8qIGVycm9yIGhhbmRsZSAqLwotICAgIFx9CisgICAgfQogCiAgICAgLyogbm93IGV4dHJhY3QgaXQgKi8KICAgICBtZW1jcHkoY2lwaGVyX2tleSwgb3V0YnVmLCAxNik7CkBAIC0zNzMzLDEwNSArNDg0Miw0MyBAQAogICAgIG1lbWNweShtYWNfa2V5LCAgICBvdXRidWYrMzIsIDE2KTsKIAogICAgIC8qIHVzZSBtYXRlcmlhbCAocmVjYWxsIHRvIHN0b3JlIHRoZSBzYWx0IGluIHRoZSBvdXRwdXQpICovCi1cfQotXGVuZHthbGx0dH0KK30KK1xlbmR7dmVyYmF0aW19CiAKIFxjaGFwdGVye01pc2NlbGxhbmVvdXN9Ci1cc2VjdGlvbntCYXNlNjQgRW5jb2RpbmcgYW5kIERlY29kaW5nfQotVGhlIGxpYnJhcnkgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGVuY29kZSBhbmQgZGVjb2RlIGEgUkZDMTUyMSBiYXNlNjQgY29kaW5nIHNjaGVtZS4gIFRoaXMgbWVhbnMgdGhhdCBpdCBjYW4gZGVjb2RlIHdoYXQgaXQgCi1lbmNvZGVzIGJ1dCB0aGUgZm9ybWF0IHVzZWQgZG9lcyBub3QgY29tcGx5IHRvIGFueSBrbm93biBzdGFuZGFyZC4gIFRoZSBjaGFyYWN0ZXJzIHVzZWQgaW4gdGhlIG1hcHBpbmdzIGFyZToKK1xteXNlY3Rpb257QmFzZTY0IEVuY29kaW5nIGFuZCBEZWNvZGluZ30KK1RoZSBsaWJyYXJ5IHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBlbmNvZGUgYW5kIGRlY29kZSBhIFJGQyAxNTIxIGJhc2UtLTY0IGNvZGluZyBzY2hlbWUuICBUaGUgY2hhcmFjdGVycyB1c2VkIGluIHRoZSBtYXBwaW5ncyBhcmU6CiBcYmVnaW57dmVyYmF0aW19CiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvCiBcZW5ke3ZlcmJhdGltfQotVGhvc2UgY2hhcmFjdGVycyBzaG91bGQgYXJlIHN1cHBvcnRlZCBpbiB2aXJ0dWFsbHkgYW55IDctYml0IEFTQ0lJIHN5c3RlbSB3aGljaCBtZWFucyB0aGV5IGNhbiBiZSB1c2VkIGZvciB0cmFuc3BvcnQgb3ZlcgorVGhvc2UgY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkIGluIHRoZSA3LWJpdCBBU0NJSSBtYXAsIHdoaWNoIG1lYW5zIHRoZXkgY2FuIGJlIHVzZWQgZm9yIHRyYW5zcG9ydCBvdmVyCiBjb21tb24gZS1tYWlsLCB1c2VuZXQgYW5kIEhUVFAgbWVkaXVtcy4gIFRoZSBmb3JtYXQgb2YgYW4gZW5jb2RlZCBzdHJlYW0gaXMganVzdCBhIGxpdGVyYWwgc2VxdWVuY2Ugb2YgQVNDSUkgY2hhcmFjdGVycwogd2hlcmUgYSBncm91cCBvZiBmb3VyIHJlcHJlc2VudCAyNC1iaXRzIG9mIGlucHV0LiAgVGhlIGZpcnN0IGZvdXIgY2hhcnMgb2YgdGhlIGVuY29kZXJzIG91dHB1dCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSAKIG9yaWdpbmFsIGlucHV0LiAgQWZ0ZXIgdGhlIGZpcnN0IGZvdXIgY2hhcmFjdGVycyBpcyB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4KIAotT2Z0ZW4gaXQgaXMgZGVzaXJhYmxlIHRvIGxpbmUgd3JhcCB0aGUgb3V0cHV0IHRvIGZpdCBuaWNlbHkgaW4gYW4gZS1tYWlsIG9yIHVzZW5ldCBwb3N0aW5nLiAgVGhlIGRlY29kZXIgYWxsb3dzIHlvdSB0bworT2Z0ZW4sIGl0IGlzIGRlc2lyYWJsZSB0byBsaW5lIHdyYXAgdGhlIG91dHB1dCB0byBmaXQgbmljZWx5IGluIGFuIGUtbWFpbCBvciB1c2VuZXQgcG9zdGluZy4gIFRoZSBkZWNvZGVyIGFsbG93cyB5b3UgdG8KIHB1dCBhbnkgY2hhcmFjdGVyICh0aGF0IGlzIG5vdCBpbiB0aGUgYWJvdmUgc2VxdWVuY2UpIGluIGJldHdlZW4gYW55IGNoYXJhY3RlciBvZiB0aGUgZW5jb2RlcnMgb3V0cHV0LiAgWW91IG1heSBub3QgaG93ZXZlciwKIGJyZWFrIHVwIHRoZSBmaXJzdCBmb3VyIGNoYXJhY3RlcnMuCiAKIFRvIGVuY29kZSBhIGJpbmFyeSBzdHJpbmcgaW4gYmFzZTY0IGNhbGw6CiBcaW5kZXh7YmFzZTY0XF9lbmNvZGUoKX0gIFxpbmRleHtiYXNlNjRcX2RlY29kZSgpfSAKIFxiZWdpbnt2ZXJiYXRpbX0KLWludCBiYXNlNjRfZW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGxlbiwgCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgYmFzZTY0X2VuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiBcZW5ke3ZlcmJhdGltfQotV2hlcmUgYGBpbicnIGlzIHRoZSBiaW5hcnkgc3RyaW5nIGFuZCBgYG91dCcnIGlzIHdoZXJlIHRoZSBBU0NJSSBvdXRwdXQgaXMgcGxhY2VkLiAgWW91IG11c3Qgc2V0IHRoZSB2YWx1ZSBvZiBgYG91dGxlbicnIHByaW9yCi10byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGl0IHNldHMgdGhlIGxlbmd0aCBvZiB0aGUgYmFzZTY0IG91dHB1dCBpbiBgYG91dGxlbicnIHdoZW4gaXQgaXMgZG9uZS4gIFRvIGRlY29kZSBhIGJhc2U2NCAKK1doZXJlIFx0ZXh0aXR7aW59IGlzIHRoZSBiaW5hcnkgc3RyaW5nIGFuZCBcdGV4dGl0e291dH0gaXMgd2hlcmUgdGhlIEFTQ0lJIG91dHB1dCBpcyBwbGFjZWQuICBZb3UgbXVzdCBzZXQgdGhlIHZhbHVlIG9mIFx0ZXh0aXR7b3V0bGVufSBwcmlvcgordG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBpdCBzZXRzIHRoZSBsZW5ndGggb2YgdGhlIGJhc2U2NCBvdXRwdXQgaW4gXHRleHRpdHtvdXRsZW59IHdoZW4gaXQgaXMgZG9uZS4gIFRvIGRlY29kZSBhIGJhc2U2NCAKIHN0cmluZyBjYWxsOgogXGJlZ2lue3ZlcmJhdGltfQotaW50IGJhc2U2NF9kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgbGVuLCAKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBiYXNlNjRfZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIFxlbmR7dmVyYmF0aW19CiAKLVxzZWN0aW9ue1RoZSBNdWx0aXBsZSBQcmVjaXNpb24gSW50ZWdlciBMaWJyYXJ5IChNUEkpfQotVGhlIGxpYnJhcnkgY29tZXMgd2l0aCBhIGNvcHkgb2YgTGliVG9tTWF0aCAgd2hpY2ggaXMgYSBtdWx0aXBsZSBwcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IHdyaXR0ZW4gYnkgdGhlCi1hdXRob3Igb2YgTGliVG9tQ3J5cHQuICBMaWJUb21NYXRoIGlzIGEgdHJpdmlhbCB0byB1c2UgQU5TSSBDIGNvbXBhdGlibGUgbGFyZ2UgaW50ZWdlciBsaWJyYXJ5IHdoaWNoIGlzIGZyZWUgCi1mb3IgYWxsIHVzZXMgYW5kIGlzIGRpc3RyaWJ1dGVkIGZyZWVseS4KLQotQXQgdGhlIGhlYXJ0IG9mIGFsbCB0aGUgZnVuY3Rpb25zIGlzIHRoZSBkYXRhIHR5cGUgYGBtcFxfaW50JycgKGRlZmluZWQgaW4gdG9tbWF0aC5oKS4gIFRoaXMgZGF0YSB0eXBlIGlzIHdoYXQgCi13aWxsIGhvbGQgYWxsIGxhcmdlIGludGVnZXJzLiAgSW4gb3JkZXIgdG8gdXNlIGFuIG1wXF9pbnQgb25lIG11c3QgaW5pdGlhbGl6ZSBpdCBmaXJzdCwgZm9yIGV4YW1wbGU6Ci1cYmVnaW57dmVyYmF0aW19Ci0jaW5jbHVkZSA8dG9tY3J5cHQuaD4gLyogdG9tY3J5cHQuaCBpbmNsdWRlcyBtcGkuaCBhdXRvbWF0aWNhbGx5ICovCi1pbnQgbWFpbih2b2lkKQoteyAKLSAgIG1wX2ludCBiaWdudW07Ci0gICAKLSAgIC8qIGluaXRpYWxpemUgaXQgKi8KLSAgIG1wX2luaXQoJmJpZ251bSk7Ci0KLSAgIHJldHVybiAwOwotfQotXGVuZHt2ZXJiYXRpbX0KLUlmIHlvdSBhcmUgdW5mYW1pbGlhciB3aXRoIHRoZSBzeW50YXggb2YgQyB0aGUgXCYgc3ltYm9sIGlzIHVzZWQgdG8gcGFzcyB0aGUgYWRkcmVzcyBvZiBgYGJpZ251bScnIHRvIHRoZSBmdW5jdGlvbi4gIEFsbAotTGliVG9tTWF0aCBmdW5jdGlvbnMgcmVxdWlyZSB0aGUgYWRkcmVzcyBvZiB0aGUgcGFyYW1ldGVycy4gIFRvIGZyZWUgdGhlIG1lbW9yeSBvZiBhIG1wXF9pbnQgdXNlIChmb3IgZXhhbXBsZSk6Ci1cYmVnaW57dmVyYmF0aW19Ci1tcF9jbGVhcigmYmlnbnVtKTsKLVxlbmR7dmVyYmF0aW19Ci0KLVRoZSBmdW5jdGlvbnMgYWxzbyBoYXZlIHRoZSBiYXNpYyBmb3JtIG9mIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotXGJlZ2lue3ZlcmJhdGltfQotbXBfWFhYKG1wX2ludCAqYSk7Ci1tcF9YWFgobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci1tcF9YWFgobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYywgbXBfaW50ICpkKTsKLVxlbmR7dmVyYmF0aW19Ci0KLVdoZXJlIHRoZXkgcGVyZm9ybSBzb21lIG9wZXJhdGlvbiBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgbXBcX2ludCB2YXJpYWJsZSBwYXNzZWQgb24gdGhlIGZhciByaWdodC4gIAotRm9yIGV4YW1wbGUsIHRvIGNvbXB1dGUgJGMgPSBhICsgYiBcbWJveHsgfShcbWJveHttb2QgfW0pJCB5b3Ugd291bGQgY2FsbDoKLVxiZWdpbnt2ZXJiYXRpbX0KLW1wX2FkZG1vZCgmYSwgJmIsICZtLCAmYyk7Ci1cZW5ke3ZlcmJhdGltfQotCi1cc3Vic2VjdGlvbntCaW5hcnkgRm9ybXMgb2YgYGBtcFxfaW50JycgVmFyaWFibGVzfQotCi1PZnRlbiBpdCBpcyByZXF1aXJlZCB0byBzdG9yZSBhIGBgbXBcX2ludCcnIGluIGJpbmFyeSBmb3JtIGZvciB0cmFuc3BvcnQgKGUuZy4gZXhwb3J0aW5nIGEga2V5LCBwYWNrZXQgCi1lbmNyeXB0aW9uLCBldGMuKS4gIExpYlRvbU1hdGggaW5jbHVkZXMgdHdvIGZ1bmN0aW9ucyB0byBoZWxwIHdoZW4gZXhwb3J0aW5nIG51bWJlcnM6Ci1cYmVnaW57dmVyYmF0aW19Ci1pbnQgbXBfcmF3X3NpemUobXBfaW50ICpudW0pOwotbXBfdG9yYXcoJm51bSwgYnVmKTsKLVxlbmR7dmVyYmF0aW19Ci0KLVRoZSBmb3JtZXIgZnVuY3Rpb24gZ2l2ZXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJhdyBmb3JtYXQgYW5kIHRoZSBsYXR0ZXIgZnVuY3Rpb24gYWN0dWFsbHkgc3RvcmVzIHRoZSByYXcgZGF0YS4gIEFsbAotYGBtcFxfaW50JycgbnVtYmVycyBhcmUgc3RvcmVkIGluIGJpZyBlbmRpYW4gZm9ybSAobGlrZSBQS0NTIGRlbWFuZHMpIHdpdGggdGhlIGZpcnN0IGJ5dGUgYmVpbmcgdGhlIHNpZ24gb2YgdGhlIG51bWJlci4gIFRoZQotYGByc2FcX2V4cHRtb2QoKScnIGZ1bmN0aW9uIGRpZmZlcnMgc2xpZ2h0bHkgc2luY2UgaXQgd2lsbCB0YWtlIHRoZSBpbnB1dCBpbiB0aGUgZm9ybSBleGFjdGx5IGFzIFBLQ1MgZGVtYW5kcyAod2l0aG91dCB0aGUKLWxlYWRpbmcgc2lnbiBieXRlKS4gIEFsbCBvdGhlciBmdW5jdGlvbnMgaW5jbHVkZSB0aGUgc2lnbiBieXRlIChzaW5jZSBpdHMgbXVjaCBzaW1wbGVyIGp1c3QgdG8gaW5jbHVkZSBpdCkuICBUaGUgc2lnbiBieXRlCi1tdXN0IGJlIHplcm8gZm9yIHBvc2l0aXZlIG51bWJlcnMgYW5kIG5vbi16ZXJvIGZvciBuZWdhdGl2ZSBudW1iZXJzLiAgRm9yIGV4YW1wbGUsCi10aGUgc2VxdWVuY2U6Ci1cYmVnaW57dmVyYmF0aW19Ci0wMCBGRiAzMCAwNAotXGVuZHt2ZXJiYXRpbX0KLVJlcHJlc2VudHMgdGhlIGludGVnZXIgJDI1NSBcY2RvdCAyNTZeMiArIDQ4IFxjZG90IDI1Nl4xICsgNCBcY2RvdCAyNTZeMCQgb3IgMTYsNzIzLDk3Mi4KLQotVG8gcmVhZCBhIGJpbmFyeSBzdHJpbmcgYmFjayBpbnRvIGEgYGBtcFxfaW50JycgY2FsbDoKLVxiZWdpbnt2ZXJiYXRpbX0KLW1wX3JlYWRfcmF3KG1wX2ludCAqbnVtLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCBsZW4pOwotXGVuZHt2ZXJiYXRpbX0KLVdoZXJlIGBgbnVtJycgaXMgd2hlcmUgdG8gc3RvcmUgaXQsIGBgc3RyJycgaXMgdGhlIGJpbmFyeSBzdHJpbmcgKGluY2x1ZGluZyB0aGUgbGVhZGluZyBzaWduIGJ5dGUpIGFuZCBgYGxlbicnIGlzIHRoZSAKLWxlbmd0aCBvZiB0aGUgYmluYXJ5IHN0cmluZy4KLQotXHN1YnNlY3Rpb257UHJpbWFsaXR5IFRlc3Rpbmd9CitcbXlzZWN0aW9ue1ByaW1hbGl0eSBUZXN0aW5nfQogXGluZGV4e1ByaW1hbGl0eSBUZXN0aW5nfQogVGhlIGxpYnJhcnkgaW5jbHVkZXMgcHJpbWFsaXR5IHRlc3RpbmcgYW5kIHJhbmRvbSBwcmltZSBmdW5jdGlvbnMgYXMgd2VsbC4gIFRoZSBwcmltYWxpdHkgdGVzdGVyIHdpbGwgcGVyZm9ybSB0aGUgdGVzdCBpbgogdHdvIHBoYXNlcy4gIEZpcnN0IGl0IHdpbGwgcGVyZm9ybSB0cmlhbCBkaXZpc2lvbiBieSB0aGUgZmlyc3QgZmV3IHByaW1lcy4gIFNlY29uZCBpdCB3aWxsIHBlcmZvcm0gZWlnaHQgcm91bmRzIG9mIHRoZSAKQEAgLTM4NDAsOCArNDg4Nyw4IEBACiB0aGUgcHJvYmFiaWxpdHkgb2YgYSBwc2V1ZG8tcHJpbWUgYnkgJDEgXG92ZXIgNCQgdGhlcmVmb3JlIGFmdGVyIHNpeHRlZW4gcm91bmRzIHRoZSBwcm9iYWJpbGl0eSBpcyBubyBtb3JlIHRoYW4gCiAkXGxlZnQgKCB7IDEgXG92ZXIgNCB9IFxyaWdodCApXns4fSA9IDJeey0xNn0kLiAgSW4gcHJhY3RpY2UgdGhlIHByb2JhYmlsaXR5IG9mIGVycm9yIGlzIGluIGZhY3QgbXVjaCBsb3dlciB0aGFuIHRoYXQuCiAKLVdoZW4gbWFraW5nIHJhbmRvbSBwcmltZXMgdGhlIHRyaWFsIGRpdmlzaW9uIHN0ZXAgaXMgaW4gZmFjdCBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgYGBJbXBsZW1lbnRhdGlvbiBvZiBGYXN0IFJTQSBLZXkgR2VuZXJhdGlvbiBvbiBTbWFydCBDYXJkcycnXGZvb3Rub3Rle0NoZW5naHVhaSBMdSwgQW5kcmUgTC4gTS4gZG9zIFNhbnRvcyBhbmQgRnJhbmNpc2NvIFIuIFBpbWVudGVsfS4KLUluIGVzc2VuY2UgYSB0YWJsZSBvZiBtYWNoaW5lLXdvcmQgc2l6ZWQgcmVzaWR1ZXMgYXJlIGtlcHQgb2YgYSBjYW5kaWRhdGUgbW9kdWxvIGEgc2V0IG9mIHByaW1lcy4gIFdoZW4gdGhlIGNhbmRpYXRlCitXaGVuIG1ha2luZyByYW5kb20gcHJpbWVzIHRoZSB0cmlhbCBkaXZpc2lvbiBzdGVwIGlzIGluIGZhY3QgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIFx0ZXh0aXR7SW1wbGVtZW50YXRpb24gb2YgRmFzdCBSU0EgS2V5IEdlbmVyYXRpb24gb24gU21hcnQgQ2FyZHN9XGZvb3Rub3Rle0NoZW5naHVhaSBMdSwgQW5kcmUgTC4gTS4gZG9zIFNhbnRvcyBhbmQgRnJhbmNpc2NvIFIuIFBpbWVudGVsfS4KK0luIGVzc2VuY2UgYSB0YWJsZSBvZiBtYWNoaW5lLXdvcmQgc2l6ZWQgcmVzaWR1ZXMgYXJlIGtlcHQgb2YgYSBjYW5kaWRhdGUgbW9kdWxvIGEgc2V0IG9mIHByaW1lcy4gIFdoZW4gdGhlIGNhbmRpZGF0ZQogaXMgcmVqZWN0ZWQgYW5kIHVsdGltYXRlbHkgaW5jcmVtZW50ZWQgdG8gdGVzdCB0aGUgbmV4dCBudW1iZXIgdGhlIHJlc2lkdWVzIGFyZSB1cGRhdGVkIHdpdGhvdXQgdXNpbmcgbXVsdGktd29yZCBwcmVjaXNpb24KIG1hdGggb3BlcmF0aW9ucy4gIEFzIGEgcmVzdWx0IHRoZSByb3V0aW5lIGNhbiBzY2FuIGFoZWFkIHRvIHRoZSBuZXh0IG51bWJlciByZXF1aXJlZCBmb3IgdGVzdGluZyB3aXRoIHZlcnkgbGl0dGxlIHdvcmsKIGludm9sdmVkLgpAQCAtMzg1NCw1NyArNDkwMSw2MCBAQAogbm90IGVxdWFsIHRvICQocCAtIDEpKHJzIC0gMSkkLgogCiBUaGVzZSBhcmUgbm90IHRlY2huaWNhbGx5IHBhcnQgb2YgdGhlIExpYlRvbU1hdGggbGlicmFyeSBidXQgdGhpcyBpcyB0aGUgYmVzdCBwbGFjZSB0byBkb2N1bWVudCB0aGVtLiAgCi1UbyB0ZXN0IGlmIGEgYGBtcFxfaW50JycgaXMgcHJpbWUgY2FsbDoKK1RvIHRlc3QgaWYgYSBcdGV4dGl0e21wXF9pbnR9IGlzIHByaW1lIGNhbGw6CiBcYmVnaW57dmVyYmF0aW19CiBpbnQgaXNfcHJpbWUobXBfaW50ICpOLCBpbnQgKnJlc3VsdCk7CiBcZW5ke3ZlcmJhdGltfQotVGhpcyBwdXRzIGEgb25lIGluIGBgcmVzdWx0JycgaWYgdGhlIG51bWJlciBpcyBwcm9iYWJseSBwcmltZSwgb3RoZXJ3aXNlIGl0IHBsYWNlcyBhIHplcm8gaW4gaXQuICBJdCBpcyBhc3N1bWVkIHRoYXQgaWYgCi1pdCByZXR1cm5zIGFuIGVycm9yIHRoYXQgdGhlIHZhbHVlIGluIGBgcmVzdWx0JycgaXMgdW5kZWZpbmVkLiAgVG8gbWFrZSAKK1RoaXMgcHV0cyBhIG9uZSBpbiBcdGV4dGl0e3Jlc3VsdH0gaWYgdGhlIG51bWJlciBpcyBwcm9iYWJseSBwcmltZSwgb3RoZXJ3aXNlIGl0IHBsYWNlcyBhIHplcm8gaW4gaXQuICBJdCBpcyBhc3N1bWVkIHRoYXQgaWYgCitpdCByZXR1cm5zIGFuIGVycm9yIHRoYXQgdGhlIHZhbHVlIGluIFx0ZXh0aXR7cmVzdWx0fSBpcyB1bmRlZmluZWQuICBUbyBtYWtlIAogYSByYW5kb20gcHJpbWUgY2FsbDoKIFxiZWdpbnt2ZXJiYXRpbX0KLWludCByYW5kX3ByaW1lKG1wX2ludCAqTiwgdW5zaWduZWQgbG9uZyBsZW4sIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZyk7CitpbnQgcmFuZF9wcmltZSggICAgICAgbXBfaW50ICpOLCAKKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCAKKyAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd3BybmcpOwogXGVuZHt2ZXJiYXRpbX0KLVdoZXJlIGBgbGVuJycgaXMgdGhlIHNpemUgb2YgdGhlIHByaW1lIGluIGJ5dGVzICgkMiBcbGUgbGVuIFxsZSAyNTYkKS4gIFlvdSBjYW4gc2V0IGBgbGVuJycgdG8gdGhlIG5lZ2F0aXZlIHNpemUgeW91IHdhbnQKK1doZXJlIFx0ZXh0aXR7bGVufSBpcyB0aGUgc2l6ZSBvZiB0aGUgcHJpbWUgaW4gYnl0ZXMgKCQyIFxsZSBsZW4gXGxlIDI1NiQpLiAgWW91IGNhbiBzZXQgXHRleHRpdHtsZW59IHRvIHRoZSBuZWdhdGl2ZSBzaXplIHlvdSB3YW50CiB0byBnZXQgYSBwcmltZSBvZiB0aGUgZm9ybSAkcCBcZXF1aXYgM1xtYm94eyB9KFxtYm94e21vZCB9IDQpJC4gIFNvIGlmIHlvdSB3YW50IGEgMTAyNC1iaXQgcHJpbWUgb2YgdGhpcyBzb3J0IHBhc3MgCi1gYGxlbiA9IC0xMjgnJyB0byB0aGUgZnVuY3Rpb24uICBVcG9uIHN1Y2Nlc3MgaXQgd2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGFuZCBgYE4nJyB3aWxsIGNvbnRhaW4gYW4gaW50ZWdlciB3aGljaAorXHRleHRpdHtsZW4gPSAtMTI4fSB0byB0aGUgZnVuY3Rpb24uICBVcG9uIHN1Y2Nlc3MgaXQgd2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGFuZCBcdGV4dGl0e059IHdpbGwgY29udGFpbiBhbiBpbnRlZ2VyIHdoaWNoCiBpcyB2ZXJ5IGxpa2VseSBwcmltZS4KIAogXGNoYXB0ZXJ7UHJvZ3JhbW1pbmcgR3VpZGVsaW5lc30KIAotXHNlY3Rpb257U2VjdXJlIFBzZXVkbyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcnN9Ci1Qcm9iYWJseSB0aGUgc2luZ2FsIG1vc3QgdnVsbmVyYWJsZSBwb2ludCBvZiBhbnkgY3J5cHRvc3lzdGVtIGlzIHRoZSBQUk5HLiAgV2l0aG91dCBvbmUgZ2VuZXJhdGluZyBhbmQgcHJvdGVjdGluZyBzZWNyZXRzCi13b3VsZCBiZSBpbXBvc3NpYmxlLiAgVGhlIHJlcXVpcmVtZW50IHRoYXQgb25lIGJlIHNldHVwIGNvcnJlY3RseSBpcyB2aXRhbGx5IGltcG9ydGFudCBhbmQgdG8gYWRkcmVzcyB0aGlzIHBvaW50IHRoZSBsaWJyYXJ5Ci1kb2VzIHByb3ZpZGUgdHdvIFJORyBzb3VyY2VzIHRoYXQgd2lsbCBhZGRyZXNzIHRoZSBsYXJnZXN0IGFtb3VudCBvZiBlbmQgdXNlcnMgYXMgcG9zc2libGUuICBUaGUgYGBzcHJuZycnIFBSTkcgcHJvdmlkZWQgCi1wcm92aWRlcyBhbmQgZWFzeSB0byBhY2Nlc3Mgc291cmNlIG9mIGVudHJvcHkgZm9yIGFueSBhcHBsaWNhdGlvbiBvbiBhICpOSVggb3IgV2luZG93cyBjb21wdXRlci4gIAorXG15c2VjdGlvbntTZWN1cmUgUHNldWRvIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yc30KK1Byb2JhYmx5IHRoZSBzaW5nbGUgbW9zdCB2dWxuZXJhYmxlIHBvaW50IG9mIGFueSBjcnlwdG9zeXN0ZW0gaXMgdGhlIFBSTkcuICBXaXRob3V0IG9uZSwgZ2VuZXJhdGluZyBhbmQgcHJvdGVjdGluZyBzZWNyZXRzCit3b3VsZCBiZSBpbXBvc3NpYmxlLiAgVGhlIHJlcXVpcmVtZW50IHRoYXQgb25lIGJlIHNldHVwIGNvcnJlY3RseSBpcyB2aXRhbGx5IGltcG9ydGFudCwgYW5kIHRvIGFkZHJlc3MgdGhpcyBwb2ludCB0aGUgbGlicmFyeQorZG9lcyBwcm92aWRlIHR3byBSTkcgc291cmNlcyB0aGF0IHdpbGwgYWRkcmVzcyB0aGUgbGFyZ2VzdCBhbW91bnQgb2YgZW5kIHVzZXJzIGFzIHBvc3NpYmxlLiAgVGhlIFx0ZXh0aXR7c3Bybmd9IFBSTkcgcHJvdmlkZXMgYW4gZWFzeSB0byAKK2FjY2VzcyBzb3VyY2Ugb2YgZW50cm9weSBmb3IgYW55IGFwcGxpY2F0aW9uIG9uIGEgVU5JWCAoYW5kIHRoZSBsaWtlKSBvciBXaW5kb3dzIGNvbXB1dGVyLiAgCiAKLUhvd2V2ZXIsIHdoZW4gdGhlIGVuZCB1c2VyIGlzIG5vdCBvbiBvbmUgb2YgdGhlc2UgcGxhdGZvcm1zIHRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIgbXVzdCBhZGRyZXNzIHRoZSBpc3N1ZSBvZiBmaW5kaW5nCitIb3dldmVyLCB3aGVuIHRoZSBlbmQgdXNlciBpcyBub3Qgb24gb25lIG9mIHRoZXNlIHBsYXRmb3JtcywgdGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlciBtdXN0IGFkZHJlc3MgdGhlIGlzc3VlIG9mIGZpbmRpbmcKIGVudHJvcHkuICBUaGlzIG1hbnVhbCBpcyBub3QgZGVzaWduZWQgdG8gYmUgYSB0ZXh0IG9uIGNyeXB0b2dyYXBoeS4gIEkgd291bGQganVzdCBsaWtlIHRvIGhpZ2hsaWdodCB0aGF0IHdoZW4geW91IGRlc2lnbgogYSBjcnlwdG9zeXN0ZW0gbWFrZSBzdXJlIHRoZSBmaXJzdCBwcm9ibGVtIHlvdSBzb2x2ZSBpcyBnZXR0aW5nIGEgZnJlc2ggc291cmNlIG9mIGVudHJvcHkuICAKIAotXHNlY3Rpb257UHJldmVudGluZyBUcml2aWFsIEVycm9yc30KLVR3byBzaW1wbGUgd2F5cyB0byBwcmV2ZW50IHRyaXZpYWwgZXJyb3JzIGlzIHRvIHByZXZlbnQgb3ZlcmZsb3dzIGFuZCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlcy4gIEFsbCBvZiB0aGUgZnVuY3Rpb25zCitcbXlzZWN0aW9ue1ByZXZlbnRpbmcgVHJpdmlhbCBFcnJvcnN9CitUd28gc2ltcGxlIHdheXMgdG8gcHJldmVudCB0cml2aWFsIGVycm9ycyBpcyB0byBwcmV2ZW50IG92ZXJmbG93cywgYW5kIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWVzLiAgQWxsIG9mIHRoZSBmdW5jdGlvbnMKIHdoaWNoIG91dHB1dCB2YXJpYWJsZSBsZW5ndGggc3RyaW5ncyB3aWxsIHJlcXVpcmUgeW91IHRvIHBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24uICBJZiB0aGUgc2l6ZSBvZiB5b3VyIG91dHB1dAogYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgb3V0cHV0IGl0IHdpbGwgcmVwb3J0IGFuIGVycm9yLiAgVGhlcmVmb3JlLCBtYWtlIHN1cmUgdGhlIHNpemUgeW91IHBhc3MgaXMgY29ycmVjdCEKIAotQWxzbyB2aXJ0dWFsbHkgYWxsIG9mIHRoZSBmdW5jdGlvbnMgcmV0dXJuIGFuIGVycm9yIGNvZGUgb3Ige1xiZiBDUllQVFxfT0t9LiAgWW91IHNob3VsZCBkZXRlY3QgYWxsIGVycm9ycyBhcyBzaW1wbGUgCi10eXBvcyBvciBzdWNoIGNhbiBjYXVzZSBhbGdvcml0aG1zIHRvIGZhaWwgdG8gd29yayBhcyBkZXNpcmVkLgorQWxzbywgdmlydHVhbGx5IGFsbCBvZiB0aGUgZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBjb2RlIG9yIHtcYmYgQ1JZUFRcX09LfS4gIFlvdSBzaG91bGQgZGV0ZWN0IGFsbCBlcnJvcnMsIGFzIHNpbXBsZSAKK3R5cG9zIGNhbiBjYXVzZSBhbGdvcml0aG1zIHRvIGZhaWwgdG8gd29yayBhcyBkZXNpcmVkLgogCi1cc2VjdGlvbntSZWdpc3RlcmluZyBZb3VyIEFsZ29yaXRobXN9Ci1UbyBhdm9pZCBsaW5raW5nIGFuZCBvdGhlciBydW50aW1lIGVycm9ycyBpdCBpcyBpbXBvcnRhbnQgdG8gcmVnaXN0ZXIgdGhlIGNpcGhlcnMsIGhhc2hlcyBhbmQgUFJOR3MgeW91IGludGVuZCB0byB1c2UgCitcbXlzZWN0aW9ue1JlZ2lzdGVyaW5nIFlvdXIgQWxnb3JpdGhtc30KK1RvIGF2b2lkIGxpbmtpbmcgYW5kIG90aGVyIHJ1bi0tdGltZSBlcnJvcnMgaXQgaXMgaW1wb3J0YW50IHRvIHJlZ2lzdGVyIHRoZSBjaXBoZXJzLCBoYXNoZXMgYW5kIFBSTkdzIHlvdSBpbnRlbmQgdG8gdXNlIAogYmVmb3JlIHlvdSB0cnkgdG8gdXNlIHRoZW0uICBUaGlzIGluY2x1ZGVzIGFueSBmdW5jdGlvbiB3aGljaCB3b3VsZCB1c2UgYW4gYWxnb3JpdGhtIGluZGlyZWN0bHkgdGhyb3VnaCBhIGRlc2NyaXB0b3IgdGFibGUuCiAKIEEgbmVhdCBib251cyB0byB0aGUgcmVnaXN0cnkgc3lzdGVtIGlzIHRoYXQgeW91IGNhbiBhZGQgZXh0ZXJuYWwgYWxnb3JpdGhtcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgbGlicmFyeSB3aXRob3V0IAogaGF2aW5nIHRvIGhhY2sgdGhlIGxpYnJhcnkuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIGhhcmR3YXJlIHNwZWNpZmljIFBSTkcgb24geW91ciBzeXN0ZW0uICBZb3UgY291bGQgZWFzaWx5IAotd3JpdGUgdGhlIGZldyBmdW5jdGlvbnMgcmVxdWlyZWQgcGx1cyBhIGRlc2NyaXB0b3IuICBBZnRlciByZWdpc3RlcmluZyB5b3VyIFBSTkcgYWxsIG9mIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyB0aGF0IAotbmVlZCBhIFBSTkcgY2FuIGluc3RhbnRseSB0YWtlIGFkdmFudGFnZSBvZiBpdC4KK3dyaXRlIHRoZSBmZXcgZnVuY3Rpb25zIHJlcXVpcmVkIHBsdXMgYSBkZXNjcmlwdG9yLiAgQWZ0ZXIgcmVnaXN0ZXJpbmcgeW91ciBQUk5HLCBhbGwgb2YgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIHRoYXQgCituZWVkIGEgUFJORyBjYW4gaW5zdGFudGx5IHRha2UgYWR2YW50YWdlIG9mIGl0LiAgVGhlIHNhbWUgYXBwbGllcyBmb3IgY2lwaGVycywgaGFzaGVzLCBhbmQgYmlnbnVtIG1hdGggcm91dGluZXMuCiAKLVxzZWN0aW9ue0tleSBTaXplc30KK1xteXNlY3Rpb257S2V5IFNpemVzfQogCiBcc3Vic2VjdGlvbntTeW1tZXRyaWMgQ2lwaGVyc30KLUZvciBzeW1tZXRyaWMgY2lwaGVycyB1c2UgYXMgbGFyZ2UgYXMgb2YgYSBrZXkgYXMgcG9zc2libGUuICBGb3IgdGhlIG1vc3QgcGFydCBgYGJpdHMgYXJlIGNoZWFwJycgc28gdXNpbmcgYSAyNTYtYml0IGtleQotaXMgbm90IGEgaGFyZCB0aGluZyB0b2RvLiAgCitGb3Igc3ltbWV0cmljIGNpcGhlcnMsIHVzZSBhcyBsYXJnZSBhcyBvZiBhIGtleSBhcyBwb3NzaWJsZS4gIEZvciB0aGUgbW9zdCBwYXJ0IFx0ZXh0aXR7Yml0cyBhcmUgY2hlYXB9IHNvIHVzaW5nIGEgMjU2LS1iaXQga2V5CitpcyBub3QgYSBoYXJkIHRoaW5nIHRvIGRvLiAgQXMgYSBnb29kIHJ1bGUgb2YgdGh1bWIgZG8gbm90IHVzZSBhIGtleSBzbWFsbGVyIHRoYW4gMTI4IGJpdHMuCiAKLVxzdWJzZWN0aW9ue0Fzc3ltZXRyaWMgQ2lwaGVyc30KK1xzdWJzZWN0aW9ue0FzeW1tZXRyaWMgQ2lwaGVyc30KIFRoZSBmb2xsb3dpbmcgY2hhcnQgZ2l2ZXMgdGhlIHdvcmsgZmFjdG9yIGZvciBzb2x2aW5nIGEgREgvUlNBIHB1YmxpYyBrZXkgdXNpbmcgdGhlIE5GUy4gIFRoZSB3b3JrIGZhY3RvciBmb3IgYSBrZXkgb2Ygb3JkZXIKICRuJCBpcyBlc3RpbWF0ZWQgdG8gYmUKIFxiZWdpbntlcXVhdGlvbn0KQEAgLTM5MTMsNiArNDk2Myw3IEBACiAKIE5vdGUgdGhhdCAkbiQgaXMgbm90IHRoZSBiaXQtbGVuZ3RoIGJ1dCB0aGUgbWFnbml0dWRlLiAgRm9yIGV4YW1wbGUsIGZvciBhIDEwMjQtYml0IGtleSAkbiA9IDJeezEwMjR9JC4gIFRoZSB3b3JrIHJlcXVpcmVkIAogaXM6CitcYmVnaW57ZmlndXJlfVtoZXJlXQogXGJlZ2lue2NlbnRlcn0KIFxiZWdpbnt0YWJ1bGFyfXt8Y3xjfH0KICAgICBcaGxpbmUgUlNBL0RIIEtleSBTaXplIChiaXRzKSAmIFdvcmsgRmFjdG9yICgkbG9nXzIkKSBcXApAQCAtMzkyNywxMiArNDk3OCwxOCBAQAogICAgIFxobGluZSAKIFxlbmR7dGFidWxhcn0KIFxlbmR7Y2VudGVyfQorXGNhcHRpb257UlNBL0RIIEtleSBTdHJlbmd0aH0KK1xlbmR7ZmlndXJlfQogCi1UaGUgd29yayBmYWN0b3IgZm9yIEVDQyBrZXlzIGlzIG11Y2ggaGlnaGVyIHNpbmNlIHRoZSBiZXN0IGF0dGFjayBpcyBzdGlsbCBmdWxseSBleHBvbmVudGlvbmFsLiAgR2l2ZW4gYSBrZXkgb2YgbWFnbml0dWRlCi0kbiQgaXQgcmVxdWlyZXMgJFxzcXJ0IG4kIHdvcmsuICBUaGUgZm9sbG93aW5nIHRhYmxlIHN1bWFyaXplcyB0aGUgd29yayByZXF1aXJlZDoKK1RoZSB3b3JrIGZhY3RvciBmb3IgRUNDIGtleXMgaXMgbXVjaCBoaWdoZXIgc2luY2UgdGhlIGJlc3QgYXR0YWNrIGlzIHN0aWxsIGZ1bGx5IGV4cG9uZW50aWFsLiAgR2l2ZW4gYSBrZXkgb2YgbWFnbml0dWRlCiskbiQgaXQgcmVxdWlyZXMgJFxzcXJ0IG4kIHdvcmsuICBUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIHdvcmsgcmVxdWlyZWQ6CitcYmVnaW57ZmlndXJlfVtoZXJlXQogXGJlZ2lue2NlbnRlcn0KIFxiZWdpbnt0YWJ1bGFyfXt8Y3xjfH0KICAgICBcaGxpbmUgRUNDIEtleSBTaXplIChiaXRzKSAmIFdvcmsgRmFjdG9yICgkbG9nXzIkKSBcXAorICAgIFxobGluZSAxMTIgJiA1NiBcXAorICAgIFxobGluZSAxMjggJiA2NCBcXAorICAgIFxobGluZSAxNjAgJiA4MCBcXAogICAgIFxobGluZSAxOTIgJiA5NiAgXFwKICAgICBcaGxpbmUgMjI0ICYgMTEyIFxcCiAgICAgXGhsaW5lIDI1NiAmIDEyOCBcXApAQCAtMzk0MSwxMzUgKzQ5OTgsMjgwIEBACiAgICAgXGhsaW5lCiBcZW5ke3RhYnVsYXJ9CiBcZW5ke2NlbnRlcn0KK1xjYXB0aW9ue0VDQyBLZXkgU3RyZW5ndGh9CitcZW5ke2ZpZ3VyZX0KIAogVXNpbmcgdGhlIGFib3ZlIHRhYmxlcyB0aGUgZm9sbG93aW5nIHN1Z2dlc3Rpb25zIGZvciBrZXkgc2l6ZXMgc2VlbXMgYXBwcm9wcmlhdGU6CiBcYmVnaW57Y2VudGVyfQogXGJlZ2lue3RhYnVsYXJ9e3xjfGN8Y3x9CiAgICAgXGhsaW5lIFNlY3VyaXR5IEdvYWwgJiBSU0EvREggS2V5IFNpemUgKGJpdHMpICYgRUNDIEtleSBTaXplIChiaXRzKSBcXAotICAgIFxobGluZSBTaG9ydCB0ZXJtIChsZXNzIHRoYW4gYSB5ZWFyKSAmIDEwMjQgJiAxNjAgXFwKLSAgICBcaGxpbmUgU2hvcnQgdGVybSAobGVzcyB0aGFuIGZpdmUgeWVhcnMpICYgMTUzNiAmIDE5MiBcXAotICAgIFxobGluZSBMb25nIFRlcm0gKGxlc3MgdGhhbiB0ZW4geWVhcnMpICYgMjU2MCAmIDI1NiBcXAorICAgIFxobGluZSBOZWFyIHRlcm0gICAmIDEwMjQgJiAxNjAgXFwKKyAgICBcaGxpbmUgU2hvcnQgdGVybSAgJiAxNTM2ICYgMTkyIFxcCisgICAgXGhsaW5lIExvbmcgVGVybSAgICYgMjU2MCAmIDM4NCBcXAogICAgIFxobGluZSAKIFxlbmR7dGFidWxhcn0KIFxlbmR7Y2VudGVyfQogCi1cc2VjdGlvbntUaHJlYWQgU2FmZXR5fQotVGhlIGxpYnJhcnkgaXMgbm90IHRocmVhZCBzYWZlIGJ1dCBzZXZlcmFsIHNpbXBsZSBwcmVjYXV0aW9ucyBjYW4gYmUgdGFrZW4gdG8gYXZvaWQgYW55IHByb2JsZW1zLiAgVGhlIHJlZ2lzdHJ5IGZ1bmN0aW9ucwotc3VjaCBhcyByZWdpc3RlclxfY2lwaGVyKCkgYXJlIG5vdCB0aHJlYWQgc2FmZSBubyBtYXR0ZXIgd2hhdCB5b3UgZG8uICBJdHMgYmVzdCB0byBjYWxsIHRoZW0gZnJvbSB5b3VyIHByb2dyYW1zIGluaXRpYWxpenRpb24KK1xteXNlY3Rpb257VGhyZWFkIFNhZmV0eX0KK1RoZSBsaWJyYXJ5IGlzIG5vdCBmdWxseSB0aHJlYWQgc2FmZSBidXQgc2V2ZXJhbCBzaW1wbGUgcHJlY2F1dGlvbnMgY2FuIGJlIHRha2VuIHRvIGF2b2lkIGFueSBwcm9ibGVtcy4gIFRoZSByZWdpc3RyeSBmdW5jdGlvbnMKK3N1Y2ggYXMgcmVnaXN0ZXJcX2NpcGhlcigpIGFyZSBub3QgdGhyZWFkIHNhZmUgbm8gbWF0dGVyIHdoYXQgeW91IGRvLiAgSXQgaXMgYmVzdCB0byBjYWxsIHRoZW0gZnJvbSB5b3VyIHByb2dyYW1zIGluaXRpYWxpemF0aW9uCiBjb2RlIGJlZm9yZSB0aHJlYWRzIGFyZSBpbml0aWF0ZWQuCiAKIFRoZSByZXN0IG9mIHRoZSBjb2RlIHVzZXMgc3RhdGUgdmFyaWFibGVzIHlvdSBtdXN0IHBhc3MgaXQgc3VjaCBhcyBoYXNoXF9zdGF0ZSwgaG1hY1xfc3RhdGUsIGV0Yy4gIFRoaXMgbWVhbnMgdGhhdCBpZiBlYWNoCi10aHJlYWQgaGFzIGl0cyBvd24gc3RhdGUgdmFyaWFibGVzIHRoZW4gdGhleSB3aWxsIG5vdCBhZmZlY3QgZWFjaCBvdGhlci4gIFRoaXMgaXMgZmFpcmx5IHNpbXBsZSB3aXRoIHN5bW1ldHJpYyBjaXBoZXJzCi1hbmQgaGFzaGVzLiAgSG93ZXZlciwgdGhlIGtleXJpbmcgYW5kIFBSTkcgc3VwcG9ydCBpcyBzb21ldGhpbmcgdGhlIHRocmVhZHMgd2lsbCB3YW50IHRvIHNoYXJlLiAgVGhlIHNpbXBsZXN0IHdvcmthcm91bmQgCi1pcyBjcmVhdGUgc2VtYXBob3JlcyBvciBtdXRleGVzIGFyb3VuZCBjYWxscyB0byB0aG9zZSBmdW5jdGlvbnMuICAKK3RocmVhZCBoYXMgaXRzIG93biBzdGF0ZSB2YXJpYWJsZXMgdGhlbiB0aGV5IHdpbGwgbm90IGFmZmVjdCBlYWNoIG90aGVyLCBhbmQgYXJlIGZ1bGx5IHRocmVhZCBzYWZlLiAgVGhpcyBpcyBmYWlybHkgc2ltcGxlIHdpdGggc3ltbWV0cmljIGNpcGhlcnMKK2FuZCBoYXNoZXMuICAKIAotU2luY2UgQyBkb2VzIG5vdCBoYXZlIHN0YW5kYXJkIHNlbWFwaG9yZXMgdGhpcyBzdXBwb3J0IGlzIG5vdCBuYXRpdmUgdG8gTGlidG9tY3J5cHQuICBFdmVuIGEgQyBiYXNlZCBzZW1hcGhvcmUgaXMgbm90IGVudGlyZQotcG9zc2libGUgYXMgc29tZSBjb21waWxlcnMgbWF5IGlnbm9yZSB0aGUgYGB2b2xhdGlsZScnIGtleXdvcmQgb3IgaGF2ZSBtdWx0aXBsZSBwcm9jZXNzb3JzLiAgUHJvdmlkZSB5b3VyIGhvc3QgYXBwbGljYXRpb24KLWlzIG1vZHVsYXIgZW5vdWdoIHB1dHRpbmcgdGhlIGxvY2tzIGluIHRoZSByaWdodCBwbGFjZSBzaG91bGQgbm90IGJsb2F0IHRoZSBjb2RlIHNpZ25pZmljYW50bHkgYW5kIHdpbGwgc29sdmUgYWxsIHRocmVhZAotc2FmZXR5IGlzc3VlcyB3aXRoaW4gdGhlIGxpYnJhcnkuCitcaW5kZXh7TFRDXF9QVEhSRUFEfQorVGhlIG9ubHkgc3RpY2t5IGlzc3VlIGlzIGEgc2hhcmVkIFBSTkcgd2hpY2ggY2FuIGJlIGFsbGV2aWF0ZWQgd2l0aCB0aGUgY2FyZWZ1bCB1c2Ugb2YgbXV0ZXggZGV2aWNlcy4gIERlZmluaW5nIExUQ1xfUFRIUkVBRCBmb3IgaW5zdGFuY2UsIGVuYWJsZXMKK3B0aHJlYWRzIGJhc2VkIG11dGV4IGxvY2tpbmcgaW4gdmFyaW91cyByb3V0aW5lcyBzdWNoIGFzIHRoZSBZYXJyb3cgYW5kIEZvcnR1bmEgUFJOR3MsIHRoZSBmaXhlZCBwb2ludCBFQ0MgbXVsdGlwbGllciwgYW5kIG90aGVyIHJvdXRpbmVzLgogCiBcY2hhcHRlcntDb25maWd1cmluZyBhbmQgQnVpbGRpbmcgdGhlIExpYnJhcnl9Ci1cc2VjdGlvbntJbnRyb2R1Y3Rpb259Ci1UaGUgbGlicmFyeSBpcyBmYWlybHkgZmxleGlibGUgYWJvdXQgaG93IGl0IGNhbiBiZSBidWlsdCwgdXNlZCBhbmQgZ2VuZXJhbGx5IGRpc3RyaWJ1dGVkLiAgQWRkaXRpb25zIGFyZSBiZWluZyBtYWRlIHdpdGgKK1xteXNlY3Rpb257SW50cm9kdWN0aW9ufQorVGhlIGxpYnJhcnkgaXMgZmFpcmx5IGZsZXhpYmxlIGFib3V0IGhvdyBpdCBjYW4gYmUgYnVpbHQsIHVzZWQsIGFuZCBnZW5lcmFsbHkgZGlzdHJpYnV0ZWQuICBBZGRpdGlvbnMgYXJlIGJlaW5nIG1hZGUgd2l0aAogZWFjaCBuZXcgcmVsZWFzZSB0aGF0IHdpbGwgbWFrZSB0aGUgbGlicmFyeSBldmVuIG1vcmUgZmxleGlibGUuICBFYWNoIG9mIHRoZSBjbGFzc2VzIG9mIGZ1bmN0aW9ucyBjYW4gYmUgZGlzYWJsZWQgZHVyaW5nCiB0aGUgYnVpbGQgcHJvY2VzcyB0byBtYWtlIGEgc21hbGxlciBsaWJyYXJ5LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzaGFyZWQgbGlicmFyaWVzLgogCi1cc2VjdGlvbntCdWlsZGluZyBhIFN0YXRpYyBMaWJyYXJ5fQotVGhlIGxpYnJhcnkgY2FuIGJlIGJ1aWx0IGFzIGEgc3RhdGljIGxpYnJhcnkgd2hpY2ggaXMgZ2VuZXJhbGx5IHRoZSBzaW1wbGVzdCBhbmQgbW9zdCBwb3J0YWJsZSBtZXRob2Qgb2YgCi1idWlsZGluZyB0aGUgbGlicmFyeS4gIFdpdGggYSBDQyBvciBHQ0MgZXF1aXBwZWQgcGxhdGZvcm0geW91IGNhbiBpc3N1ZSB0aGUgZm9sbG93aW5nCitBcyBvZiB2MS4wNiBvZiB0aGUgbGlicmFyeSwgdGhlIGJ1aWxkIHByb2Nlc3MgaGFzIGJlZW4gbW92ZWQgdG8gdHdvIHN0ZXBzIGZvciB0aGUgdHlwaWNhbCBMaWJUb21DcnlwdCBhcHBsaWNhdGlvbi4gIFRoaXMgaXMgYmVjYXVzZQorTGliVG9tQ3J5cHQgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWF0aCBBUEkgb24gaXRzIG93biBhbmQgcmVsaWVzIG9uIHRoaXJkIHBhcnR5IGxpYnJhcmllcyAoc3VjaCBhcyBMaWJUb21NYXRoLCBHbnVNUCwgb3IgVG9tc0Zhc3RNYXRoKS4KIAotXGJlZ2lue2FsbHR0fQotbWFrZSBpbnN0YWxsX2xpYgotXGVuZHthbGx0dH0KK1RoZSBidWlsZCBwcm9jZXNzIG5vdyBjb25zaXN0cyBvZiBpbnN0YWxsaW5nIGEgbWF0aCBsaWJyYXJ5IGZpcnN0LCBhbmQgdGhlbiBidWlsZGluZyBhbmQgaW5zdGFsbGluZyBMaWJUb21DcnlwdCB3aXRoIGEgbWF0aCBsaWJyYXJ5Citjb25maWd1cmVkLiAgTm90ZSB0aGF0IExpYlRvbUNyeXB0IGNhbiBiZSBidWlsdCB3aXRoIG5vIGludGVybmFsIG1hdGggZGVzY3JpcHRvcnMuICBUaGlzIG1lYW5zIHRoYXQgb25lIG11c3QgYmUgcHJvdmlkZWQgYXQgZWl0aGVyCitidWlsZCwgb3IgcnVuIHRpbWUgZm9yIHRoZSBhcHBsaWNhdGlvbi4gIExpYlRvbUNyeXB0IGNvbWVzIHdpdGggdGhyZWUgbWF0aCBkZXNjcmlwdG9ycyB0aGF0IHByb3ZpZGUgYSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gbWF0aCAKK2xpYnJhcmllcy4KIAotV2hpY2ggd2lsbCBidWlsZCB0aGUgbGlicmFyeSBhbmQgaW5zdGFsbCBpdCBpbiAvdXNyL2xpYiAoYXMgd2VsbCBhcyB0aGUgaGVhZGVycyBpbiAvdXNyL2luY2x1ZGUpLiAgVGhlIGRlc3RpbmF0aW9uCi1kaXJlY3Rvcnkgb2YgdGhlIGxpYnJhcnkgYW5kIGhlYWRlcnMgY2FuIGJlIGNoYW5nZWQgYnkgZWRpdGluZyBgYG1ha2VmaWxlJycuICBUaGUgdmFyaWFibGUgTElCTkFNRSBjb250cm9scwotd2hlcmUgdGhlIGxpYnJhcnkgaXMgdG8gYmUgaW5zdGFsbGVkIGFuZCBJTkNOQU1FIGNvbnRyb2xzIHdoZXJlIHRoZSBoZWFkZXJzIGFyZSB0byBiZSBpbnN0YWxsZWQuICBBIGRldmVsb3BlciBjYW4gCi10aGVuIHVzZSB0aGUgbGlicmFyeSBieSBpbmNsdWRpbmcgYGB0b21jcnlwdC5oJycgaW4gdGhlaXIgcHJvZ3JhbSBhbmQgbGlua2luZyBhZ2FpbnN0IGBgbGlidG9tY3J5cHQuYScnLgorXG15c2VjdGlvbntNYWtlZmlsZSB2YXJpYWJsZXN9CiAKLUEgc3RhdGljIGxpYnJhcnkgY2FuIGFsc28gYmUgYnVpbHQgd2l0aCB0aGUgSW50ZWwgQyBDb21waWxlciAgKElDQykgYnkgaXNzdWluZyB0aGUgZm9sbG93aW5nCitBbGwgR05VIGRyaXZlbiBtYWtlZmlsZXMgKGluY2x1ZGluZyB0aGUgbWFrZWZpbGUgZm9yIElDQykgdXNlIGEgc2V0IG9mIGNvbW1vbiB2YXJpYWJsZXMgdG8gY29udHJvbCB0aGUgYnVpbGQgYW5kIGluc3RhbGwgcHJvY2Vzcy4gIE1vc3Qgb2YgdGhlIAorc2V0dGluZ3MgY2FuIGJlIG92ZXJ3cml0dGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGljaCBtYWtlcyBjdXN0b20gaW5zdGFsbGF0aW9uIGEgYnJlZXplLgogCi1cYmVnaW57YWxsdHR9Ci1tYWtlIC1mIG1ha2VmaWxlLmljYyBpbnN0YWxsCi1cZW5ke2FsbHR0fQorXGluZGV4e01BS0V9XGluZGV4e0NDfVxpbmRleHtBUn0KK1xzdWJzZWN0aW9ue01BS0UsIENDIGFuZCBBUn0KK1RoZSBNQUtFLCBDQyBhbmQgQVIgZmxhZ3MgY2FuIGFsbCBiZSBvdmVyd3JpdHRlbi4gIFRoZXkgZGVmYXVsdCB0byBcdGV4dGl0e21ha2V9LCBcdGV4dGl0e1wkQ0N9IGFuZCBcdGV4dGl0e1wkQVJ9IHJlc3BlY3RpdmVseS4gIAorQ2hhbmdpbmcgTUFLRSBhbGxvd3MgeW91IHRvIGNoYW5nZSB3aGF0IHByb2dyYW0gd2lsbCBiZSBpbnZva2VkIHRvIGhhbmRsZSBzdWItLWRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgdGhpcwogCi1UaGlzIHdpbGwgYWxzbyBidWlsZCBgYGxpYnRvbWNyeXB0LmEnJyBleGNlcHQgdGhhdCBpdCB3aWxsIHVzZSBJQ0MuICBBZGRpdGlvbmFsbHkgTWljcm9zb2Z0J3MgVmlzdWFsIEMgNi4wMCBjYW4gYmUgdXNlZAotYnkgaXNzdWluZworXGJlZ2lue3ZlcmJhdGltfQorTUFLRT1nbWFrZSBnbWFrZSBpbnN0YWxsCitcZW5ke3ZlcmJhdGltfQogCi1cYmVnaW57YWxsdHR9Ci1ubWFrZSAtZiBtYWtlZmlsZS5tc3ZjCi1cZW5ke2FsbHR0fQorXGJlZ2lue2ZsdXNobGVmdH0gd2lsbCBidWlsZCBhbmQgaW5zdGFsbCB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFx0ZXh0aXR7Z21ha2V9IHRvb2wuICBTaW1pbGFybHksIFxlbmR7Zmx1c2hsZWZ0fQogCi1Zb3Ugd2lsbCBoYXZlIHRvIG1hbnVhbGx5IGNvcHkgYGB0b21jcnlwdC5saWInJyBhbmQgdGhlIGhlYWRlcnMgdG8geW91ciBNU1ZDIGxpYi9pbmMgZGlyZWN0b3JpZXMuCitcYmVnaW57dmVyYmF0aW19CitDQz1hcm0tZ2NjIEFSPWFybS1hciBtYWtlIAorXGVuZHt2ZXJiYXRpbX0KIAotXHN1YnNlY3Rpb257TVBJIENvbnRyb2x9Ci1JZiB5b3UgYWxyZWFkeSBoYXZlIExpYlRvbU1hdGggaW5zdGFsbGVkIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSBpdCBmcm9tIHRoZSBidWlsZC4gIEJ5IGNvbW1lbnRpbmcgdGhlIGxpbmUKLWluIHRoZSBhcHByb3ByaWF0ZSBtYWtlZmlsZSB3aGljaCBzdGFydHMgd2l0aCAKK1xiZWdpbntmbHVzaGxlZnR9IHdpbGwgYnVpbGQgdGhlIGxpYnJhcnkgdXNpbmcgXHRleHRpdHthcm0tLWdjY30gYXMgdGhlIGNvbXBpbGVyIGFuZCBcdGV4dGl0e2FybS0tYXJ9IGFzIHRoZSBhcmNoaXZlci4gXGVuZHtmbHVzaGxlZnR9CiAKLVxiZWdpbnthbGx0dH0KLU1QSU9CSkVDVD1tcGkKLVxlbmR7YWxsdHR9Citcc3Vic2VjdGlvbntJR05PUkVcX1NQRUVEfQorXGluZGV4e0lHTk9SRVxfU1BFRUR9CitXaGVuIFx0ZXh0YmZ7SUdOT1JFXF9TUEVFRH0gaGFzIGJlZW4gZGVmaW5lZCB0aGUgZGVmYXVsdCBvcHRpbWl6YXRpb24gZmxhZ3MgZm9yIENGTEFHUyB3aWxsIGJlIGRpc2FibGVkIHdoaWNoIGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIHNwZWNpZnkgbmV3CitDRkxBR1Mgb24gdGhlIGNvbW1hbmQgbGluZS4gIEUuZy4gdG8gYWRkIGRlYnVnZ2luZwogCi1TaW1wbHkgcGxhY2UgYSBcIyBhdCB0aGUgc3RhcnQgYW5kIHJlLWJ1aWxkIHRoZSBsaWJyYXJ5LiAgVG8gcHJvcGVybHkgbGluayBhcHBsaWNhdGlvbnMgeW91IHdpbGwgaGF2ZSB0byBhbHNvCi1saW5rIGluIExpYlRvbU1hdGguICBSZW1vdmluZyBNUEkgaGFzIHRoZSBiZW5lZml0IG9mIGN1dHRpbmcgZG93biB0aGUgbGlicmFyeSBzaXplIGFzIHdlbGwgcG90ZW50aWFsbHkgaGF2ZSBhY2Nlc3MKLXRvIHRoZSBsYXRlc3QgbXBpLgorXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItZzMiIG1ha2UgSUdOT1JFX1NQRUVEPTEKK1xlbmR7dmVyYmF0aW19CiAKLVxzZWN0aW9ue0J1aWxkaW5nIGEgU2hhcmVkIExpYnJhcnl9Ci1MaWJUb21DcnlwdCBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5ICguc28sIC5kbGwsIGV0Yy4uLikuICBXaXRoIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyB0aGUgYXNzdW1wdGlvbgotb2YgdGhlIHByZXNlbmNlIG9mIGdjYyBhbmQgYGBsaWJ0b29sJycgaGFzIGJlZW4gbWFkZS4gIFRoZXNlIGFyZSBmYWlybHkgY29tbW9uIG9uIFVuaXgvTGludXgvQlNEIHBsYXRmb3Jtcy4gIFRvCi1idWlsZCBhIC5zbyBzaGFyZWQgbGlicmFyeSBpc3N1ZSAKK1RoaXMgd2lsbCB0dXJuIG9mZiBvcHRpbWl6YXRpb25zIGFuZCBhZGQgXHRleHRpdHstZzN9IHRvIHRoZSBDRkxBR1Mgd2hpY2ggZW5hYmxlcyBkZWJ1Z2dpbmcuICAKIAotXGJlZ2lue2FsbHR0fQotbWFrZSAtZiBtYWtlZmlsZS5zaGFyZWQKLVxlbmR7YWxsdHR9Ci1UaGlzIHdpbGwgdXNlIGxpYnRvb2wgYW5kIGdjYyB0byBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IGBgbGlidG9tY3J5cHQubGEnJyBhcyB3ZWxsIGFzIGEgc3RhdGljIGxpYnJhcnkgYGBsaWJ0b21jcnlwdC5hJycKLWFuZCBpbnN0YWxsIHRoZW0gaW50byAvdXNyL2xpYiAoYW5kIHRoZSBoZWFkZXJzIGludG8gL3Vzci9pbmNsdWRlKS4gIFRvIGxpbmsgeW91ciBhcHBsaWNhdGlvbiB5b3Ugc2hvdWxkIHVzZSB0aGUgCi1saWJ0b29sIHByb2dyYW0gaW4gYGAtLW1vZGU9bGluaycnLgorXHN1YnNlY3Rpb257TElCTkFNRSBhbmQgTElCTkFNRVxfU30KK1xpbmRleHtMSUJOQU1FfSBcaW5kZXh7TElCTkFNRVxfU30KK1x0ZXh0YmZ7TElCTkFNRX0gaXMgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBsaWJyYXJ5IChhcmNoaXZlKSB0byBjcmVhdGUuICBJdCBkZWZhdWx0cyB0byBcdGV4dGl0e2xpYnRvbWNyeXB0LmF9IGZvciBzdGF0aWMgYnVpbGRzIGFuZCBcdGV4dGl0e2xpYnRvbWNyeXB0LmxhfSBmb3IKK3NoYXJlZC4gIFRoZSBcdGV4dGJme0xJQk5BTUVcX1N9IHZhcmlhYmxlIGlzIHRoZSBzdGF0aWMgbmFtZSB3aGlsZSBkb2luZyBzaGFyZWQgYnVpbGRzLiAgSWRlYWxseSB0aGV5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWZpeCBidXQgZG9uJ3QgaGF2ZSB0by4KIAotXHNlY3Rpb257dG9tY3J5cHRcX2NmZy5ofQotVGhlIGZpbGUgYGB0b21jcnlwdFxfY2ZnLmgnJyBpcyB3aGF0IGxldHMgeW91IGNvbnRyb2wgdmFyaW91cyBoaWdoIGxldmVsIG1hY3JvcyB3aGljaCBjb250cm9sIHRoZSBiZWhhdmlvdXIgCi1vZiB0aGUgbGlicmFyeS4gCitcaW5kZXh7TElCVEVTVH0gXGluZGV4e0xJQlRFU1RcX1N9CitTaW1pbGFybHkgXHRleHRiZntMSUJURVNUfSBhbmQgXHRleHRiZntMSUJURVNUXF9TfSBhcmUgdGhlIG5hbWVzIGZvciB0aGUgcHJvZmlsaW5nIGFuZCB0ZXN0aW5nIGxpYnJhcnkuICBUaGUgZGVmYXVsdCBpcyBcdGV4dGl0e2xpYnRvbWNyeXB0XF9wcm9mLmF9IGZvciAKK3N0YXRpYyBhbmQgXHRleHRpdHtsaWJ0b21jcnlwdFxfcHJvZi5sYX0gZm9yIHNoYXJlZC4KKworXHN1YnNlY3Rpb257SW5zdGFsbGF0aW9uIERpcmVjdG9yaWVzfQorXGluZGV4e0RFU1RESVJ9IFxpbmRleHtMSUJQQVRIfSBcaW5kZXh7SU5DUEFUSH0gXGluZGV4e0RBVEFESVJ9CitcdGV4dGJme0RFU1RESVJ9IGlzIHRoZSBwcmVmaXggZm9yIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXMuICBJdCBkZWZhdWx0cyB0byBhbiBlbXB0eSBzdHJpbmcuICBcdGV4dGJme0xJQlBBVEh9IGlzIHRoZSBwcmVmaXggZm9yIHRoZSBsaWJyYXJ5CitkaXJlY3Rvcnkgd2hpY2ggZGVmYXVsdHMgdG8gXHRleHRpdHsvdXNyL2xpYn0uICBcdGV4dGJme0lOQ1BBVEh9IGlzIHRoZSBwcmVmaXggZm9yIHRoZSBoZWFkZXIgZmlsZSBkaXJlY3Rvcnkgd2hpY2ggZGVmYXVsdHMgdG8gXHRleHRpdHsvdXNyL2luY2x1ZGV9LiAgCitcdGV4dGJme0RBVEFESVJ9IGlzIHRoZSBwcmVmaXggZm9yIHRoZSBkYXRhIChkb2N1bWVudGF0aW9uKSBkaXJlY3Rvcnkgd2hpY2ggZGVmYXVsdHMgdG8gXHRleHRpdHsvdXNyL3NoYXJlL2RvYy9saWJ0b21jcnlwdC9wZGZ9LgorCitBbGwgZm91ciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgY3VzdG9tIGluc3RhbGwgbG9jYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgbmF0dXJlIG9mIHRoZSBPUyBhbmQgZmlsZSBzeXN0ZW0gaW4gdXNlLgorCitcYmVnaW57dmVyYmF0aW19CittYWtlIExJQlBBVEg9L2hvbWUvdG9tL3Byb2plY3QvbGliIElOQ1BBVEg9L2hvbWUvdG9tL3Byb2plY3QvaW5jbHVkZSBcCisgICAgIERBVEFQQVRIPS9ob21lL3RvbS9wcm9qZWN0L2RvY3MgaW5zdGFsbAorXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCBpbnN0YWxsIGl0IHRvIHRoZSBkaXJlY3RvcmllcyB1bmRlciBcdGV4dGl0ey9ob21lL3RvbS9wcm9qZWN0L30uICBlLmcuCisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKy9ob21lL3RvbS9wcm9qZWN0LzoKK3RvdGFsIDEKK2Ryd3hyLXhyLXggIDIgdG9tIHVzZXJzICA4MCBKdWwgMzAgMTY6MDIgZG9jcworZHJ3eHIteHIteCAgMiB0b20gdXNlcnMgNTI4IEp1bCAzMCAxNjowMiBpbmNsdWRlCitkcnd4ci14ci14ICAyIHRvbSB1c2VycyAgODAgSnVsIDMwIDE2OjAyIGxpYgorCisvaG9tZS90b20vcHJvamVjdC9kb2NzOgordG90YWwgNDUyCistcnd4ci14ci14ICAxIHRvbSB1c2VycyA0NTkwMDkgSnVsIDMwIDE2OjAyIGNyeXB0LnBkZgorCisvaG9tZS90b20vcHJvamVjdC9pbmNsdWRlOgordG90YWwgMTMyCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAgMjQ4MiBKdWwgMzAgMTY6MDIgdG9tY3J5cHQuaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgICA3MDIgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X2FyZ2Noay5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAgMjk0NSBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfY2ZnLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzIDIyNzYzIEp1bCAzMCAxNjowMiB0b21jcnlwdF9jaXBoZXIuaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgIDUxNzQgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X2N1c3RvbS5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAxMTMxNCBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfaGFzaC5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAxMTU3MSBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfbWFjLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzIDEzNjE0IEp1bCAzMCAxNjowMiB0b21jcnlwdF9tYWNyb3MuaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgMTQ3MTQgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X21hdGguaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgICA2MzIgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X21pc2MuaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgMTA5MzQgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X3BrLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzICAyNjM0IEp1bCAzMCAxNjowMiB0b21jcnlwdF9wa2NzLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzICA3MDY3IEp1bCAzMCAxNjowMiB0b21jcnlwdF9wcm5nLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzICAxNDY3IEp1bCAzMCAxNjowMiB0b21jcnlwdF90ZXN0LmgKKworL2hvbWUvdG9tL3Byb2plY3QvbGliOgordG90YWwgMTA3MworLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgMTA5NjI4NCBKdWwgMzAgMTY6MDIgbGlidG9tY3J5cHQuYQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xteXNlY3Rpb257RXh0cmEgbGlicmFyaWVzfQorXGluZGV4e0VYVFJBTElCU30KK1x0ZXh0YmZ7RVhUUkFMSUJTfSBzcGVjaWZpZXMgYW55IGV4dHJhIGxpYnJhcmllcyByZXF1aXJlZCB0byBsaW5rIHRoZSB0ZXN0IHByb2dyYW1zIGFuZCBzaGFyZWQgbGlicmFyaWVzLiAgVGhleSBhcmUgc3BlY2lmaWVkIGluIHRoZSBub3RhdGlvbgordGhhdCBHQ0MgZXhwZWN0cyBmb3IgZ2xvYmFsIGFyY2hpdmVzLgorCitcYmVnaW57dmVyYmF0aW19CitDRkxBR1M9Ii1EVEZNX0RFU0MgLURVU0VfVEZNIiBFWFRSQUxJQlM9LWx0Zm0gbWFrZSBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgdGltaW5nCitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgaW5zdGFsbCB0aGUgbGlicmFyeSB1c2luZyB0aGUgVG9tc0Zhc3RNYXRoIGxpYnJhcnkgYW5kIGxpbmsgdGhlIFx0ZXh0aXR7bGlidGZtLmF9IGxpYnJhcnkgb3V0IG9mIHRoZSBkZWZhdWx0IGxpYnJhcnkgc2VhcmNoIHBhdGguICBUaGUgdHdvCitkZWZpbmVzIGFyZSBleHBsYWluZWQgYmVsb3cuICBZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgYXJjaGl2ZXMgKHNheSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHR3byBtYXRoIGxpYnJhcmllcywgb3IgYWRkIG9uIGFkZGl0aW9uYWwgY29kZSkgdG8gCit0aGUgXHRleHRiZntFWFRSQUxJQlN9IHZhcmlhYmxlIGJ5IHNlcGFyYXRpbmcgdGhlbSBieSBhIHNwYWNlLgorCitOb3RlIHRoYXQgXHRleHRiZntFWFRSQUxJQlN9IGlzIG5vdCByZXF1aXJlZCBpZiB5b3UgYXJlIG9ubHkgbWFraW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBzdGF0aWMgbGlicmFyeSBidXQgbm9uZSBvZiB0aGUgdGVzdCBwcm9ncmFtcy4gIAorCitcbXlzZWN0aW9ue0J1aWxkaW5nIGEgU3RhdGljIExpYnJhcnl9CisKK0J1aWxkaW5nIGEgc3RhdGljIGxpYnJhcnkgaXMgZmFpcmx5IHRyaXZpYWwgYXMgaXQgb25seSByZXF1aXJlcyBvbmUgaW52b2NhdGlvbiBvZiB0aGUgR05VIG1ha2UgY29tbWFuZC4gIAorCitcYmVnaW57dmVyYmF0aW19CitDRkxBR1M9Ii1EVEZNX0RFU0MiIG1ha2UgaW5zdGFsbAorXGVuZHt2ZXJiYXRpbX0KKworVGhhdCB3aWxsIGJ1aWxkIExpYlRvbUNyeXB0IChpbmNsdWRpbmcgdGhlIFRvbXNGYXN0TWF0aCBkZXNjcmlwdG9yKSwgYW5kIGluc3RhbGwgaXQgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb25zIGluZGljYXRlZCBwcmV2aW91c2x5LiAgWW91IGNhbiBlbmFibGUgCit0aGUgYnVpbHQtLWluIExpYlRvbU1hdGggZGVzY3JpcHRvciBhcyB3ZWxsIChvciBpbiBwbGFjZSBvZiB0aGUgVG9tc0Zhc3RNYXRoIGRlc2NyaXB0b3IpLiAgU2ltaWxhcmx5LCB5b3UgY2FuIGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggbm8gYnVpbHQtLWluIAorbWF0aCBkZXNjcmlwdG9ycy4gIAorCitcYmVnaW57dmVyYmF0aW19CittYWtlIGluc3RhbGwKK1xlbmR7dmVyYmF0aW19CisKK0luIHRoaXMgY2FzZSwgbm8gbWF0aCBkZXNjcmlwdG9ycyBhcmUgcHJlc2VudCBpbiB0aGUgbGlicmFyeSBhbmQgdGhleSB3aWxsIGhhdmUgdG8gYmUgbWFkZSBhdmFpbGFibGUgYXQgYnVpbGQgb3IgcnVuIHRpbWUgYmVmb3JlIHlvdSBjYW4gdXNlIGFueSBvZiB0aGUgCitwdWJsaWMga2V5IGZ1bmN0aW9ucy4gIAorCitOb3RlIHRoYXQgZXZlbiBpZiB5b3UgaW5jbHVkZSB0aGUgYnVpbHQtLWluIGRlc2NyaXB0b3JzIHlvdSBtdXN0IGxpbmsgYWdhaW5zdCB0aGUgc291cmNlIGxpYnJhcnkgYXMgd2VsbC4gIAorCitcYmVnaW57dmVyYmF0aW19CitnY2MgLURURk1fREVTQyBteXByb2dyYW0uYyAtbHRvbWNyeXB0IC1sdGZtIC1vIG15cHJvZ3JhbQorXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGNvbXBpbGUgXHRleHRpdHtteXByb2dyYW19IGFuZCBsaW5rIGl0IGFnYWluc3QgdGhlIExpYlRvbUNyeXB0IGxpYnJhcnkgYXMgd2VsbCBhcyBUb21zRmFzdE1hdGggKHdoaWNoIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW5zdGFsbGVkKS4gIE5vdGUgdGhhdCAKK3dlIGRlZmluZSBcdGV4dGJme1RGTVxfREVTQ30gZm9yIGNvbXBpbGF0aW9uLiAgVGhpcyBpcyBzbyB0aGF0IHRoZSBURk0gZGVzY3JpcHRvciBzeW1ib2wgd2lsbCBiZSBkZWZpbmVkIGZvciB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHRvIG1ha2UgdXNlIG9mIHdpdGhvdXQgCitnaXZpbmcgd2FybmluZ3MuCisKK1xteXNlY3Rpb257QnVpbGRpbmcgYSBTaGFyZWQgTGlicmFyeX0KKworTGliVG9tQ3J5cHQgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeSB0aHJvdWdoIHRoZSBcdGV4dGl0e21ha2VmaWxlLnNoYXJlZH0gbWFrZSBzY3JpcHQuICBJdCBpcyBzaW1pbGFyIHRvIHVzZSBhcyB0aGUgc3RhdGljIHNjcmlwdCBleGNlcHQKK3RoYXQgeW91IFx0ZXh0YmZ7bXVzdH0gc3BlY2lmeSB0aGUgXHRleHRiZntFWFRSQUxJQlN9IHZhcmlhYmxlIGF0IGluc3RhbGwgdGltZS4gIAorCitcYmVnaW57dmVyYmF0aW19CitDRkxBR1M9Ii1EVEZNX0RFU0MiIEVYVFJBTElCUz0tbHRmbSBtYWtlIC1mIG1ha2VmaWxlLnNoYXJlZCBpbnN0YWxsCitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgYnVpbGQgYW5kIGluc3RhbGwgdGhlIGxpYnJhcnkgYW5kIGxpbmsgdGhlIHNoYXJlZCBvYmplY3QgYWdhaW5zdCB0aGUgVG9tc0Zhc3RNYXRoIGxpYnJhcnkgKHdoaWNoIG11c3QgYmUgaW5zdGFsbGVkIGFzIGEgc2hhcmVkIG9iamVjdCBhcyB3ZWxsKS4gIFRoZSAKK3NoYXJlZCBidWlsZCBwcm9jZXNzIHJlcXVpcmVzIGxpYnRvb2wgdG8gYmUgaW5zdGFsbGVkLgorCitcbXlzZWN0aW9ue0hlYWRlciBDb25maWd1cmF0aW9ufQorVGhlIGZpbGUgXHRleHRpdHt0b21jcnlwdFxfY2ZnLmh9IGlzIHdoYXQgbGV0cyB5b3UgY29udHJvbCB2YXJpb3VzIGhpZ2ggbGV2ZWwgbWFjcm9zIHdoaWNoIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiB0aGUgbGlicmFyeS4gIEJ1aWxkIG9wdGlvbnMgYXJlIGFsc28KK3N0b3JlZCBpbiBcdGV4dGl0e3RvbWNyeXB0XF9jdXN0b20uaH0gd2hpY2ggYWxsb3cgdGhlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgdmFyaW91cyBhbGdvcml0aG1zLgogCiBcc3Vic3Vic2VjdGlvbntBUkdUWVBFfQotVGhpcyBsZXRzIHlvdSBjb250cm9sIGhvdyB0aGUgXF9BUkdDSEsgbWFjcm8gd2lsbCBiZWhhdmUuICBUaGUgbWFjcm8gaXMgdXNlZCB0byBjaGVjayBwb2ludGVycyBpbnNpZGUgdGhlIGZ1bmN0aW9ucyBhZ2FpbnN0Ci1OVUxMLiAgVGhlcmUgYXJlIHRocmVlIHNldHRpbmdzIGZvciBBUkdUWVBFLiAgV2hlbiBzZXQgdG8gMCBpdCB3aWxsIGhhdmUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHByaW50aW5nIGEgbWVzc2FnZSB0byAKLXN0ZGVyciBhbmQgcmFpc2luZyBhIFNJR0FCUlQgc2lnbmFsLiAgVGhpcyBpcyBwcm92aWRlZCBzbyBhbGwgcGxhdGZvcm1zIHRoYXQgdXNlIGxpYnRvbWNyeXB0IGNhbiBoYXZlIGFuIGVycm9yIHRoYXQgZnVuY3Rpb25zCi1zaW1pbGFybHkuICBXaGVuIHNldCB0byAxIGl0IHdpbGwgc2ltcGx5IHBhc3Mgb24gdG8gdGhlIGFzc2VydCgpIG1hY3JvLiAgV2hlbiBzZXQgdG8gMiBpdCB3aWxsIHJlc29sdmUgdG8gYSBlbXB0eSBtYWNybwotYW5kIG5vIGVycm9yIGNoZWNraW5nIHdpbGwgYmUgcGVyZm9ybWVkLgorVGhpcyBsZXRzIHlvdSBjb250cm9sIGhvdyB0aGUgTFRDXF9BUkdDSEsgbWFjcm8gd2lsbCBiZWhhdmUuICBUaGUgbWFjcm8gaXMgdXNlZCB0byBjaGVjayBwb2ludGVycyBpbnNpZGUgdGhlIGZ1bmN0aW9ucyBhZ2FpbnN0CitOVUxMLiAgVGhlcmUgYXJlIGZvdXIgc2V0dGluZ3MgZm9yIEFSR1RZUEUuICBXaGVuIHNldCB0byAwLCBpdCB3aWxsIGhhdmUgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHByaW50aW5nIGEgbWVzc2FnZSB0byAKK3N0ZGVyciBhbmQgcmFpc2luZyBhIFNJR0FCUlQgc2lnbmFsLiAgVGhpcyBpcyBwcm92aWRlZCBzbyBhbGwgcGxhdGZvcm1zIHRoYXQgdXNlIExpYlRvbUNyeXB0IGNhbiBoYXZlIGFuIGVycm9yIHRoYXQgZnVuY3Rpb25zCitzaW1pbGFybHkuICBXaGVuIHNldCB0byAxLCBpdCB3aWxsIHNpbXBseSBwYXNzIG9uIHRvIHRoZSBhc3NlcnQoKSBtYWNyby4gIFdoZW4gc2V0IHRvIDIsIHRoZSBtYWNybyB3aWxsIGRpc3BsYXkgdGhlIGVycm9yIHRvCitzdGRlcnIgdGhlbiByZXR1cm4gZXhlY3V0aW9uIHRvIHRoZSBjYWxsZXIuICBUaGlzIGNvdWxkIGxlYWQgdG8gYSBzZWdtZW50YXRpb24gZmF1bHQgKGUuZy4gd2hlbiBhIHBvaW50ZXIgaXMgXHRleHRiZntOVUxMfSkgYnV0IGlzIHVzZWZ1bAoraWYgeW91IGhhbmRsZSBzaWduYWxzIG9uIHlvdXIgb3duLiAgV2hlbiBzZXQgdG8gMywgaXQgd2lsbCByZXNvbHZlIHRvIGEgZW1wdHkgbWFjcm8gYW5kIG5vIGVycm9yIGNoZWNraW5nIHdpbGwgYmUgcGVyZm9ybWVkLiAgRmluYWxseSwgd2hlbiBzZXQKK3RvIDQsIGl0IHdpbGwgcmV0dXJuIENSWVBUXF9JTlZBTElEXF9BUkcgdG8gdGhlIGNhbGxlci4gIAogCiBcc3Vic3Vic2VjdGlvbntFbmRpYW5lc3N9Ci1UaGVyZSBhcmUgZml2ZSBtYWNyb3MgcmVsYXRlZCB0byBlbmRpYW5lc3MgaXNzdWVzLiAgRm9yIGxpdHRsZSBlbmRpYW4gcGxhdGZvcm1zIGRlZmluZSwgRU5ESUFOXF9MSVRUTEUuICBGb3IgYmlnIGVuZGlhbgotcGxhdGZvcm1zIGRlZmluZSBFTkRJQU5cX0JJRy4gIFNpbWlsYXJseSB3aGVuIHRoZSBkZWZhdWx0IHdvcmQgc2l6ZSBvZiBhbiBgYHVuc2lnbmVkIGxvbmcnJyBpcyAzMi1iaXRzIGRlZmluZSBFTkRJQU5cXzMyQklUV09SRAotb3IgZGVmaW5lIEVORElBTlxfNjRCSVRXT1JEIHdoZW4gaXRzIDY0LWJpdHMuICBJZiB5b3UgZG8gbm90IGRlZmluZSBhbnkgb2YgdGhlbSB0aGUgbGlicmFyeSB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIEVORElBTlxfTkVVVFJBTAorVGhlcmUgYXJlIGZpdmUgbWFjcm9zIHJlbGF0ZWQgdG8gZW5kaWFuZXNzIGlzc3Vlcy4gIEZvciBsaXR0bGUgZW5kaWFuIHBsYXRmb3JtcyBkZWZpbmUsIFx0ZXh0YmZ7RU5ESUFOXF9MSVRUTEV9LiAgRm9yIGJpZyBlbmRpYW4KK3BsYXRmb3JtcyBkZWZpbmUgXHRleHRiZntFTkRJQU5cX0JJR30uICBTaW1pbGFybHkgd2hlbiB0aGUgZGVmYXVsdCB3b3JkIHNpemUgb2YgYW4gXHRleHRpdHt1bnNpZ25lZCBsb25nfSBpcyAzMi1iaXRzIGRlZmluZSBcdGV4dGJme0VORElBTlxfMzJCSVRXT1JEfQorb3IgZGVmaW5lIFx0ZXh0YmZ7RU5ESUFOXF82NEJJVFdPUkR9IHdoZW4gaXRzIDY0LWJpdHMuICBJZiB5b3UgZG8gbm90IGRlZmluZSBhbnkgb2YgdGhlbSB0aGUgbGlicmFyeSB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIFx0ZXh0YmZ7RU5ESUFOXF9ORVVUUkFMfQogd2hpY2ggd2lsbCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCiAKLUN1cnJlbnRseSBMaWJUb21DcnlwdCB3aWxsIGRldGVjdCB4ODYtMzIgYW5kIHg4Ni02NCBydW5uaW5nIEdDQyBhcyB3ZWxsIGFzIHg4Ni0zMiBydW5uaW5nIE1TVkMuICAKK0N1cnJlbnRseSBMaWJUb21DcnlwdCB3aWxsIGRldGVjdCB4ODYtMzIsIHg4Ni02NCwgTUlQUyBSNTkwMCwgU1BBUkMgYW5kIFNQQVJDNjQgcnVubmluZyBHQ0MgYXMgd2VsbCBhcyB4ODYtMzIgcnVubmluZyBNU1ZDLiAgCiAKLVxzZWN0aW9ue1RoZSBDb25maWd1cmUgU2NyaXB0fQotVGhlcmUgYXJlIGFsc28gb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZnJvbSB0aGUgY29uZmlndXJlIHNjcmlwdCBvciBgYHRvbWNyeXB0XF9jdXN0b20uaCcnLiAgCitcbXlzZWN0aW9ue1RoZSBDb25maWd1cmUgU2NyaXB0fQorVGhlcmUgYXJlIGFsc28gb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZnJvbSB0aGUgXHRleHRpdHt0b21jcnlwdFxfY3VzdG9tLmh9IGhlYWRlciBmaWxlLgogCiBcc3Vic2VjdGlvbntYIG1lbW9yeSByb3V0aW5lc30KLUF0IHRoZSB0b3Agb2YgdG9tY3J5cHRcX2N1c3RvbS5oIGFyZSBmb3VyIG1hY3JvcyBkZW5vdGVkIGFzIFhNQUxMT0MsIFhDQUxMT0MsIFhSRUFMTE9DIGFuZCBYRlJFRSB3aGljaCByZXNvbHZlIHRvIAotdGhlIG5hbWUgb2YgdGhlIHJlc3BlY3RpdmUgZnVuY3Rpb25zLiAgVGhpcyBsZXRzIHlvdSBzdWJzdGl0dXRlIGluIHlvdXIgb3duIG1lbW9yeSByb3V0aW5lcy4gIElmIHlvdSBzdWJzdGl0dXRlIGluIAoteW91ciBvd24gZnVuY3Rpb25zIHRoZXkgbXVzdCBiZWhhdmUgbGlrZSB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiB3aGF0IHRoZXkgZXhwZWN0IGFzIGlucHV0IGFuZCAKLW91dHB1dC4gIEJ5IGRlZmF1bHQgdGhlIGxpYnJhcnkgdXNlcyB0aGUgc3RhbmRhcmQgQyByb3V0aW5lcy4KK1xpbmRleHtYTUFMTE9DfVxpbmRleHtYQ0FMTE9DfVxpbmRleHtYUkVBTExPQ31caW5kZXh7WEZSRUV9CitBdCB0aGUgdG9wIG9mIHRvbWNyeXB0XF9jdXN0b20uaCBhcmUgYSBzZXJpZXMgb2YgbWFjcm9zIGRlbm90ZWQgYXMgWE1BTExPQywgWENBTExPQywgWFJFQUxMT0MsIFhGUkVFLCBhbmQgc28gb24uICBUaGV5IHJlc29sdmUgdG8gCit0aGUgbmFtZSBvZiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGJ5IGRlZmF1bHQuICBUaGlzIGxldHMgeW91IHN1YnN0aXR1dGUgaW4geW91ciBvd24gbWVtb3J5IHJvdXRpbmVzLiAgCitJZiB5b3Ugc3Vic3RpdHV0ZSBpbiB5b3VyIG93biBmdW5jdGlvbnMgdGhleSBtdXN0IGJlaGF2ZSBsaWtlIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZnVuY3Rpb25zIGluIHRlcm1zIG9mIHdoYXQgdGhleSBleHBlY3QgYXMgaW5wdXQgYW5kIAorb3V0cHV0LgorCitUaGVzZSBtYWNyb3MgYXJlIGhhbmR5IGZvciB3b3JraW5nIHdpdGggcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBoYXZlIGEgc3RhbmRhcmQgQyBsaWJyYXJ5LiAgRm9yIGluc3RhbmNlLCB0aGUgT0xQQ1xmb290bm90ZXtTZWUgaHR0cDovL2Rldi5sYXB0b3Aub3JnL2dpdD9wPWJpb3MtY3J5cHRvO2E9c3VtbWFyeX0KK2Jpb3MgY29kZSB1c2VzIHRoZXNlIG1hY3JvcyB0byByZWRpcmVjdCB0byB2ZXJ5IGNvbXBhY3QgaGVhcCBhbmQgc3RyaW5nIG9wZXJhdGlvbnMuCiAKIFxzdWJzZWN0aW9ue1ggY2xvY2sgcm91dGluZXN9CiBUaGUgcm5nXF9nZXRcX2J5dGVzKCkgZnVuY3Rpb24gY2FuIGNhbGwgYSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIHRoZSBjbG9jaygpIGZ1bmN0aW9uLiAgVGhlc2UgbWFjcm9zIGxldCB5b3Ugb3ZlcnJpZGUKIHRoZSBkZWZhdWx0IGNsb2NrKCkgdXNlZCB3aXRoIGEgcmVwbGFjZW1lbnQuICBCeSBkZWZhdWx0IHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgY2xvY2soKSBmdW5jdGlvbiBpcyB1c2VkLgogCi1cc3Vic2VjdGlvbntOT1xfRklMRX0KLUR1cmluZyB0aGUgYnVpbGQgaWYgTk9cX0ZJTEUgaXMgZGVmaW5lZCB0aGVuIGFueSBmdW5jdGlvbiBpbiB0aGUgbGlicmFyeSB0aGF0IHVzZXMgZmlsZSBJL08gd2lsbCBub3QgY2FsbCB0aGUgZmlsZSBJL08gCitcc3Vic2VjdGlvbntMVENcX05PXF9GSUxFfQorRHVyaW5nIHRoZSBidWlsZCBpZiBMVENcX05PXF9GSUxFIGlzIGRlZmluZWQgdGhlbiBhbnkgZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnkgdGhhdCB1c2VzIGZpbGUgSS9PIHdpbGwgbm90IGNhbGwgdGhlIGZpbGUgSS9PIAogZnVuY3Rpb25zIGFuZCBpbnN0ZWFkIHNpbXBseSByZXR1cm4gQ1JZUFRcX05PUC4gIFRoaXMgc2hvdWxkIGhlbHAgcmVzb2x2ZSBhbnkgbGlua2VyIGVycm9ycyBzdGVtbWluZyBmcm9tIGEgbGFjayBvZgogZmlsZSBJL08gb24gZW1iZWRkZWQgcGxhdGZvcm1zLgogCi1cc3Vic2VjdGlvbntDTEVBTlxfU1RBQ0t9Citcc3Vic2VjdGlvbntMVENcX0NMRUFOXF9TVEFDS30KIFdoZW4gdGhpcyBmdW5jdGlvbnMgaXMgZGVmaW5lZCB0aGUgZnVuY3Rpb25zIHRoYXQgc3RvcmUga2V5IG1hdGVyaWFsIG9uIHRoZSBzdGFjayB3aWxsIGNsZWFuIHVwIGFmdGVyd2FyZHMuICAKIEFzc3VtZXMgdGhhdCB5b3UgaGF2ZSBubyBtZW1vcnkgcGFnaW5nIHdpdGggdGhlIHN0YWNrLgogCiBcc3Vic2VjdGlvbntMVENcX1RFU1R9Ci1XaGVuIHRoaXMgaGFzIGJlZW4gZGVmaW5lZCB0aGUgdmFyaW91cyBzZWxmLS10ZXN0IGZ1bmN0aW9ucyAoZm9yIGNpcGhlcnMsIGhhc2hlcywgcHJuZ3MsIGV0YykgYXJlIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KLVdoZW4gdGhpcyBoYXMgYmVlbiB1bmRlZmluZWQgdGhlIHRlc3RzIGFyZSByZW1vdmVkIGFuZCBpZiBjYWxsZWQgd2lsbCByZXR1cm4gQ1JZUFRcX05PUC4KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSB2YXJpb3VzIHNlbGYtLXRlc3QgZnVuY3Rpb25zIChmb3IgY2lwaGVycywgaGFzaGVzLCBwcm5ncywgZXRjKSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorSWYgTFRDXF9OT1xfVEVTVCBoYXMgYmVlbiBkZWZpbmVkLCB0aGUgdGVzdGluZyByb3V0aW5lcyB3aWxsIGJlIGNvbXBhY3RlZCBhbmQgb25seSByZXR1cm4gQ1JZUFRcX05PUC4KKworXHN1YnNlY3Rpb257TFRDXF9OT1xfRkFTVH0KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSBsaWJyYXJ5IHdpbGwgbm90IHVzZSBmYXN0ZXIgd29yZCBvcmllbnRlZCBvcGVyYXRpb25zLiAgQnkgZGVmYXVsdCwgdGhleSBhcmUgb25seSBlbmFibGVkIGZvciBwbGF0Zm9ybXMKK3doaWNoIGNhbiBiZSBhdXRvLWRldGVjdGVkLiAgVGhpcyBtYWNybyBlbnN1cmVzIHRoYXQgdGhleSBhcmUgbmV2ZXIgZW5hYmxlZC4KKworXHN1YnNlY3Rpb257TFRDXF9GQVNUfQorVGhpcyBtb2RlIChhdXRvLWRldGVjdGVkIHdpdGggeDg2XF8zMix4ODZcXzY0IHBsYXRmb3JtcyB3aXRoIEdDQyBvciBNU1ZDKSBjb25maWd1cmVzIHZhcmlvdXMgcm91dGluZXMgc3VjaCBhcyBjdHJcX2VuY3J5cHQoKSBvciAKK2NiY1xfZW5jcnlwdCgpIHRoYXQgaXQgY2FuIHNhZmVseSBYT1IgbXVsdGlwbGUgb2N0ZXRzIGluIG9uZSBzdGVwIGJ5IHVzaW5nIGEgbGFyZ2VyIGRhdGEgdHlwZS4gIFRoaXMgaGFzIHRoZSBiZW5lZml0IG9mIAorY3V0dGluZyBkb3duIHRoZSBvdmVyaGVhZCBvZiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMuICAKKworVGhpcyBtb2RlIGRvZXMgaGF2ZSBvbmUgZG93bnNpZGUuICBJdCBjYW4gY2F1c2UgdW5hbGlnbmVkIHJlYWRzIGZyb20gbWVtb3J5IGlmIHlvdSBhcmUgbm90IGNhcmVmdWwgd2l0aCB0aGUgZnVuY3Rpb25zLiAgVGhpcyBpcyB3aHkKK2l0IGhhcyBiZWVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IGZvciB0aGUgeDg2IGNsYXNzIG9mIHByb2Nlc3NvcnMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBhbGxvd2VkLiAgVGVjaG5pY2FsbHkgTFRDXF9GQVNUCitpcyBub3QgXHRleHRpdHtwb3J0YWJsZX0gc2luY2UgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBub3QgY292ZXJlZCBieSB0aGUgSVNPIEMgc3BlY2lmaWNhdGlvbnMuCisKK0luIHByYWN0aWNlIGhvd2V2ZXIsIHlvdSBjYW4gdXNlIGl0IG9uIHByZXR0eSBtdWNoIGFueSBwbGF0Zm9ybSAoZXZlbiBNSVBTKSB3aXRoIGNhcmUuCisKK0J5IGRlc2lnbiB0aGUgXHRleHRpdHtmYXN0fSBtb2RlIGZ1bmN0aW9ucyB3b24ndCBnZXQgdW5hbGlnbmVkIG9uIHRoZWlyIG93bi4gIEZvciBpbnN0YW5jZSwgaWYgeW91IGNhbGwgY3RyXF9lbmNyeXB0KCkgcmlnaHQgYWZ0ZXIgY2FsbGluZworY3RyXF9zdGFydCgpIGFuZCBhbGwgdGhlIGlucHV0cyB5b3UgZ2F2ZSBhcmUgYWxpZ25lZCB0aGFuIGN0clxfZW5jcnlwdCgpIHdpbGwgcGVyZm9ybSBhbGlnbmVkIG1lbW9yeSBvcGVyYXRpb25zIG9ubHkuICBIb3dldmVyLCBpZiB5b3UgCitjYWxsIGN0clxfZW5jcnlwdCgpIHdpdGggYW4gb2RkIGFtb3VudCBvZiBwbGFpbnRleHQgdGhlbiBjYWxsIGl0IGFnYWluIHRoZSBDVFIgcGFkICh0aGUgSVYpIHdpbGwgYmUgcGFydGlhbGx5IHVzZWQuICBUaGlzIHdpbGwKK2NhdXNlIHRoZSBjdHIgcm91dGluZSB0byBmaXJzdCB1c2UgdXAgdGhlIHJlbWFpbmluZyBwYWQgYnl0ZXMuICBUaGVuIGlmIHRoZXJlIGFyZSBlbm91Z2ggcGxhaW50ZXh0IGJ5dGVzIGxlZnQgaXQgd2lsbCB1c2UgCit3aG9sZSB3b3JkIFhPUiBvcGVyYXRpb25zLiAgVGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIHVuYWxpZ25lZC4KKworVGhlIHNpbXBsZXN0IHByZWNhdXRpb24gaXMgdG8gbWFrZSBzdXJlIHlvdSBwcm9jZXNzIGFsbCBkYXRhIGluIHBvd2VyIG9mIHR3byBibG9ja3MgYW5kIGhhbmRsZSBcdGV4dGl0e3JlbWFpbmRlcn0gYXQgdGhlIGVuZC4gIGUuZy4gSWYgeW91IGFyZSAKK0NUUidpbmcgYSBsb25nIHN0cmVhbSBwcm9jZXNzIGl0IGluIGJsb2NrcyBvZiAoc2F5KSBmb3VyIGtpbG9ieXRlcyBhbmQgaGFuZGxlIGFueSByZW1haW5pbmcgaW5jb21wbGV0ZSBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiAgCisKK1xpbmRleHtMVENcX0ZBU1RcX1RZUEV9CitJZiB5b3UgZG8gcGxhbiBvbiB1c2luZyB0aGUgXHRleHRpdHtMVENcX0ZBU1R9IG1vZGUgeW91IGhhdmUgdG8gYWxzbyBkZWZpbmUgYSBcdGV4dGl0e0xUQ1xfRkFTVFxfVFlQRX0gbWFjcm8gd2hpY2ggcmVzb2x2ZXMgdG8gYW4gb3B0aW1hbCBzaXplZAorZGF0YSB0eXBlIHlvdSBjYW4gcGVyZm9ybSBpbnRlZ2VyIG9wZXJhdGlvbnMgd2l0aC4gIElkZWFsbHkgaXQgc2hvdWxkIGJlIGZvdXIgb3IgZWlnaHQgYnl0ZXMgc2luY2UgaXQgbXVzdCBwcm9wZXJseSBkaXZpZGUgdGhlIHNpemUgCitvZiB5b3VyIGJsb2NrIGNpcGhlciAoZS5nLiAxNiBieXRlcyBmb3IgQUVTKS4gIFRoaXMgbWVhbnMgc2FkbHkgaWYgeW91J3JlIG9uIGEgcGxhdGZvcm0gd2l0aCA1Ny0tYml0IHdvcmRzIChvciBzb21ldGhpbmcpIHlvdSBjYW4ndCAKK3VzZSB0aGlzIG1vZGUuICBTbyBzYWQuCisKK1xzdWJzZWN0aW9ue0xUQ1xfTk9cX0FTTX0KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSBsaWJyYXJ5IHdpbGwgbm90IHVzZSBhbnkgaW5saW5lIGFzc2VtYmxlci4gIE9ubHkgYSBmZXcgcGxhdGZvcm1zIHN1cHBvcnQgYXNzZW1ibGVyIGlubGluZXMgYnV0IHZhcmlvdXMgdmVyc2lvbnMgb2YgSUNDIGFuZCBHQ0MKK2Nhbm5vdCBoYW5kbGUgYWxsIG9mIHRoZSBhc3NlbWJsZXIgZnVuY3Rpb25zLiAgCiAKIFxzdWJzZWN0aW9ue1N5bW1ldHJpYyBDaXBoZXJzLCBPbmUtd2F5IEhhc2hlcywgUFJOR1MgYW5kIFB1YmxpYyBLZXkgRnVuY3Rpb25zfQogVGhlcmUgYXJlIGEgcGxldGhvcmEgb2YgbWFjcm9zIGZvciB0aGUgY2lwaGVycywgaGFzaGVzLCBQUk5HcyBhbmQgcHVibGljIGtleSBmdW5jdGlvbnMgd2hpY2ggYXJlIGZhaXJseSAKQEAgLTQwNzcsOSArNTI3OSwxNiBAQAogZGVwZW5kZW5jeSBpc3N1ZXMgd2hpY2ggYXJlIG5vdGVkIGluIHRoZSBmaWxlLiAgRm9yIGluc3RhbmNlLCBZYXJyb3cgcmVxdWlyZXMgQ1RSIGNoYWluaW5nIG1vZGUsIGEgYmxvY2sgCiBjaXBoZXIgYW5kIGEgaGFzaCBmdW5jdGlvbi4KIAorQWxzbyBzZWUgdGVjaG5pY2FsIG5vdGUgbnVtYmVyIGZpdmUgZm9yIG1vcmUgZGV0YWlscy4KKworXHN1YnNlY3Rpb257TFRDXF9FQVNZfQorV2hlbiBkZWZpbmVkIHRoZSBsaWJyYXJ5IGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgZmV3ZXIgYWxnb3JpdGhtcyBhbmQgbW9kZXMuICBNb3N0bHkgaXQgc3RpY2tzIHRvIE5JU1QgYW5kIEFOU0kgYXBwcm92ZWQgYWxnb3JpdGhtcy4gIFNlZSAKK3RoZSBoZWFkZXIgZmlsZSBcdGV4dGl0e3RvbWNyeXB0XF9jdXN0b20uaH0gZm9yIG1vcmUgZGV0YWlscy4gIEl0IGlzIG1lYW50IHRvIHByb3ZpZGUgbGl0ZXJhbGx5IGFuIGVhc3kgbWV0aG9kIG9mIHRyaW1taW5nIHRoZSBsaWJyYXJ5IAorYnVpbGQgdG8gdGhlIG1vc3QgbWluaW11bSBvZiB1c2VmdWwgZnVuY3Rpb25hbGl0eS4KKwogXHN1YnNlY3Rpb257VFdPRklTSFxfU01BTEwgYW5kIFRXT0ZJU0hcX1RBQkxFU30KIFR3b2Zpc2ggaXMgYSAxMjgtYml0IHN5bW1ldHJpYyBibG9jayBjaXBoZXIgdGhhdCBpcyBwcm92aWRlZCB3aXRoaW4gdGhlIGxpYnJhcnkuICBUaGUgY2lwaGVyIGl0c2VsZiBpcyBmbGV4aWJsZSBlbm91Z2gKLXRvIGFsbG93IHNvbWUgdHJhZGVvZmZzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gIFdoZW4gVFdPRklTSFxfU01BTEwgaXMgZGVmaW5lZCB0aGUgc2NoZWR1bGVkIHN5bW1ldHJpYyBrZXkgZm9yIFR3b2Zpc2ggCit0byBhbGxvdyBzb21lIHRyYWRlLW9mZnMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiAgV2hlbiBUV09GSVNIXF9TTUFMTCBpcyBkZWZpbmVkIHRoZSBzY2hlZHVsZWQgc3ltbWV0cmljIGtleSBmb3IgVHdvZmlzaCAKIHJlcXVpcmVzIG9ubHkgMjAwIGJ5dGVzIG9mIG1lbW9yeS4gIFRoaXMgaXMgYWNoaWV2ZWQgYnkgbm90IHByZS1jb21wdXRpbmcgdGhlIHN1YnN0aXR1dGlvbiBib3hlcy4gIEhhdmluZyB0aGlzIAogZGVmaW5lZCB3aWxsIGFsc28gZ3JlYXRseSBzbG93IGRvd24gdGhlIGNpcGhlci4gIFdoZW4gdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCBUd29maXNoIHdpbGwgcHJlLWNvbXB1dGUgdGhlIAogdGFibGVzIGF0IGEgY29zdCBvZiA0S0Igb2YgbWVtb3J5LiAgVGhlIGNpcGhlciB3aWxsIGJlIG11Y2ggZmFzdGVyIGFzIGEgcmVzdWx0LiAgCkBAIC00MDkxLDM3ICs1MzAwLDE3IEBACiAKIFxzdWJzZWN0aW9ue0dDTVxfVEFCTEVTfQogV2hlbiBkZWZpbmVkIEdDTSB3aWxsIHVzZSBhIDY0S0IgdGFibGUgKHBlciBHQ00gc3RhdGUpIHdoaWNoIHdpbGwgZ3JlYXRseSBzcGVlZCB1cCB0aGUgcGVyLS1wYWNrZXQgbGF0ZW5jeS4gIAotSXQgYWxzbyBpbmNyZWFzZXMgdGhlIGluaXRpYWxpemF0aW9uIHRpbWUgYW5kIGlzbid0IHN1aXRhYmxlIHdoZW4geW91IGFyZSBnb2luZyB0byB1c2UgYSBrZXkgYSBmZXcgdGltZXMgb25seS4gIAorSXQgYWxzbyBpbmNyZWFzZXMgdGhlIGluaXRpYWxpemF0aW9uIHRpbWUgYW5kIGlzIG5vdCBzdWl0YWJsZSB3aGVuIHlvdSBhcmUgZ29pbmcgdG8gdXNlIGEga2V5IGEgZmV3IHRpbWVzIG9ubHkuICAKIAotXHN1YnNlY3Rpb257U01BTExcX0NPREV9Citcc3Vic2VjdGlvbntHQ01cX1RBQkxFU1xfU1NFMn0KK1xpbmRleHtTU0UyfQorV2hlbiBkZWZpbmVkIEdDTSB3aWxsIHVzZSB0aGUgU1NFMiBpbnN0cnVjdGlvbnMgdG8gcGVyZm9ybSB0aGUgJEdGKDJeeCkkIG11bHRpcGx5IHVzaW5nIDE2IDEyOC0tYml0IFhPUiBvcGVyYXRpb25zLiAgSXQgc2hhdmVzIGEgZmV3IGN5Y2xlcyBwZXIgYnl0ZQorb2YgR0NNIG91dHB1dCBvbiBib3RoIHRoZSBBTUQ2NCBhbmQgSW50ZWwgUGVudGl1bSA0IHBsYXRmb3Jtcy4gIFJlcXVpcmVzIEdDQyBhbmQgYW4gU1NFMiBlcXVpcHBlZCBwbGF0Zm9ybS4KKworXHN1YnNlY3Rpb257TFRDXF9TTUFMTFxfQ09ERX0KIFdoZW4gdGhpcyBpcyBkZWZpbmVkIHNvbWUgb2YgdGhlIGNvZGUgc3VjaCBhcyB0aGUgUmlqbmRhZWwgYW5kIFNBRkVSKyBjaXBoZXJzIGFyZSByZXBsYWNlZCB3aXRoIHNtYWxsZXIgY29kZSB2YXJpYW50cy4KIFRoZXNlIHZhcmlhbnRzIGFyZSBzbG93ZXIgYnV0IGNhbiBzYXZlIHF1aXRlIGEgYml0IG9mIGNvZGUgc3BhY2UuCiAKLVxzdWJzZWN0aW9ue0xUQ1xfRkFTVH0KLVRoaXMgbW9kZSAoYXV0b2RldGVjdGVkIHdpdGggeDg2XF8zMix4ODZcXzY0IHBsYXRmb3JtcyB3aXRoIEdDQyBvciBNU1ZDKSBjb25maWd1cmVzIHZhcmlvdXMgcm91dGluZXMgc3VjaCBhcyBjdHJcX2VuY3J5cHQoKSBvciAKLWNiY1xfZW5jcnlwdCgpIHRoYXQgaXQgY2FuIHNhZmVseSBYT1IgbXVsdGlwbGUgb2N0ZXRzIGluIG9uZSBzdGVwIGJ5IHVzaW5nIGEgbGFyZ2VyIGRhdGEgdHlwZS4gIFRoaXMgaGFzIHRoZSBiZW5lZml0IG9mIAotY3V0dGluZyBkb3duIHRoZSBvdmVyaGVhZCBvZiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMuICAKLQotVGhpcyBtb2RlIGRvZXMgaGF2ZSBvbmUgZG93bnNpZGUuICBJdCBjYW4gY2F1c2UgdW5hbGlnbmVkIHJlYWRzIGZyb20gbWVtb3J5IGlmIHlvdSBhcmUgbm90IGNhcmVmdWwgd2l0aCB0aGUgZnVuY3Rpb25zLiAgVGhpcyBpcyB3aHkKLWl0IGhhcyBiZWVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IGZvciB0aGUgeDg2IGNsYXNzIG9mIHByb2Nlc3NvcnMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBhbGxvd2VkLiAgVGVjaG5pY2FsbHkgTFRDXF9GQVNUCi1pcyBub3QgYGBwb3J0YWJsZScnIHNpbmNlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIElTTyBDIHNwZWNpZmljYXRpb25zLgotCi1JbiBwcmFjdGljZSBob3dldmVyLCB5b3UgY2FuIHVzZSBpdCBvbiBwcmV0dHkgbXVjaCBhbnkgcGxhdGZvcm0gKGV2ZW4gTUlQUykgd2l0aCBjYXJlLgotCi1CeSBkZXNpZ24gdGhlIGBgZmFzdCcnIG1vZGUgZnVuY3Rpb25zIHdvbid0IGdldCB1bmFsaWduZWQgb24gdGhlaXIgb3duLiAgRm9yIGluc3RhbmNlLCBpZiB5b3UgY2FsbCBjdHJcX2VuY3J5cHQoKSByaWdodCBhZnRlciBjYWxsaW5nCi1jdHJcX3N0YXJ0KCkgYW5kIGFsbCB0aGUgaW5wdXRzIHlvdSBnYXZlIGFyZSBhbGlnbmVkIHRoYW4gY3RyXF9lbmNyeXB0KCkgd2lsbCBwZXJmb3JtIGFsaWduZWQgbWVtb3J5IG9wZXJhdGlvbnMgb25seS4gIEhvd2V2ZXIsIGlmIHlvdSAKLWNhbGwgY3RyXF9lbmNyeXB0KCkgd2l0aCBhbiBvZGQgYW1vdW50IG9mIHBsYWludGV4dCB0aGVuIGNhbGwgaXQgYWdhaW4gdGhlIENUUiBwYWQgKHRoZSBJVikgd2lsbCBiZSBwYXJ0aWFsbHkgdXNlZC4gIFRoaXMgd2lsbAotY2F1c2UgdGhlIGN0ciByb3V0aW5lIHRvIGZpcnN0IHVzZSB1cCB0aGUgcmVtYWluaW5nIHBhZCBieXRlcy4gIFRoZW4gaWYgdGhlcmUgYXJlIGVub3VnaCBwbGFpbnRleHQgYnl0ZXMgbGVmdCBpdCB3aWxsIHVzZSAKLXdob2xlIHdvcmQgWE9SIG9wZXJhdGlvbnMuICBUaGVzZSBvcGVyYXRpb25zIHdpbGwgYmUgdW5hbGlnbmVkLgotCi1UaGUgc2ltcGxlc3QgcHJlY2F1dGlvbiBpcyB0byBtYWtlIHN1cmUgeW91IHByb2Nlc3MgYWxsIGRhdGEgaW4gcG93ZXIgb2YgdHdvIGJsb2NrcyBhbmQgaGFuZGxlIGBgcmVtYWluZGVyJycgYXQgdGhlIGVuZC4gIGUuZy4gSWYgeW91IGFyZSAKLUNUUidpbmcgYSBsb25nIHN0cmVhbSBwcm9jZXNzIGl0IGluIGJsb2NrcyBvZiAoc2F5KSBmb3VyIGtpbG9ieXRlcyBhbmQgaGFuZGxlIGFueSByZW1haW5pbmcgaW5jb21wbGV0ZSBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiAgCi0KLUlmIHlvdSBkbyBwbGFuIG9uIHVzaW5nIHRoZSBgYExUQ1xfRkFTVCcnIG1vZGUgeW91IGhhdmUgdG8gYWxzbyBkZWZpbmUgYSBgYExUQ1xfRkFTVFxfVFlQRScnIG1hY3JvIHdoaWNoIHJlc29sdmVzIHRvIGFuIG9wdGltYWwgc2l6ZWQKLWRhdGEgdHlwZSB5b3UgY2FuIHBlcmZvcm0gaW50ZWdlciBvcGVyYXRpb25zIHdpdGguICBJZGVhbGx5IGl0IHNob3VsZCBiZSBmb3VyIG9yIGVpZ2h0IGJ5dGVzIHNpbmNlIGl0IG11c3QgcHJvcGVybHkgZGl2aWRlIHRoZSBzaXplIAotb2YgeW91ciBibG9jayBjaXBoZXIgKGUuZy4gMTYgYnl0ZXMgZm9yIEFFUykuICBUaGlzIG1lYW5zIHNhZGx5IGlmIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHdpdGggNTctLWJpdCB3b3JkcyAob3Igc29tZXRoaW5nKSB5b3UgY2FuJ3QgCi11c2UgdGhpcyBtb2RlLiAgU28gc2FkLgotCiBcc3Vic2VjdGlvbntMVENcX1BUSFJFQUR9CiBXaGVuIHRoaXMgaXMgYWN0aXZhdGVkIGFsbCBvZiB0aGUgZGVzY3JpcHRvciB0YWJsZSBmdW5jdGlvbnMgd2lsbCB1c2UgcHRocmVhZCBsb2NraW5nIHRvIGVuc3VyZSB0aHJlYWQgc2FmZSB1cGRhdGVzIHRvIHRoZSB0YWJsZXMuICBOb3RlIHRoYXQgCiBpdCBkb2Vzbid0IHByZXZlbnQgYSB0aHJlYWQgdGhhdCBpcyBwYXNzaXZlbHkgdXNpbmcgYSB0YWJsZSBmcm9tIGJlaW5nIG1lc3NlZCB1cCBieSBhbm90aGVyIHRocmVhZCB0aGF0IHVwZGF0ZXMgdGhlIHRhYmxlLgpAQCAtNDEyOSw1MSArNTMxOCw2OSBAQAogR2VuZXJhbGx5IHRoZSBydWxlIG9mIHRodW1iIGlzIHRvIHNldHVwIHRoZSB0YWJsZXMgb25jZSBhdCBzdGFydHVwIGFuZCB0aGVuIGxlYXZlIHRoZW0gYmUuICBUaGlzIGFkZGVkIGJ1aWxkIGZsYWcgc2ltcGx5IG1ha2VzIHVwZGF0aW5nCiB0aGUgdGFibGVzIHNhZmVyLgogCi1cc2VjdGlvbntNUEkgVHdlYWtzfQotXHN1YnNlY3Rpb257UlNBIE9ubHkgVHdlYWt9Ci1JZiB5b3UgcGxhbiBvbiBvbmx5IHVzaW5nIFJTQSB3aXRoIG1vZHVsaSBpbiB0aGUgcmFuZ2Ugb2YgMTAyNCB0byAyNTYwIGJpdHMgeW91IGNhbiBlbmFibGUgYSBzZXJpZXMgb2YgdHdlYWtzCi10byByZWR1Y2UgdGhlIGxpYnJhcnkgc2l6ZS4gIEZvbGxvdyB0aGVzZSBzdGVwcworXHN1YnNlY3Rpb257TFRDXF9FQ0NcX1RJTUlOR1xfUkVTSVNUQU5UfQorV2hlbiB0aGlzIGhhcyBiZWVuIGRlZmluZWQgdGhlIEVDQyBwb2ludCBtdWx0aXBsaWVyIChidWlsdC0taW4gdG8gdGhlIGxpYnJhcnkpIHdpbGwgdXNlIGEgdGltaW5nIHJlc2lzdGFudCBwb2ludCBtdWx0aXBsaWNhdGlvbgorYWxnb3JpdGhtIHdoaWNoIHByZXZlbnRzIGxlYWtpbmcga2V5IGJpdHMgb2YgdGhlIHByaXZhdGUga2V5IChzY2FsYXIpLiAgSXQgaXMgYSBzbG93ZXIgYWxnb3JpdGhtIGJ1dCB1c2VmdWwgZm9yIHNpdHVhdGlvbnMKK3doZXJlIHRpbWluZyBzaWRlIGNoYW5uZWxzIHBvc2UgYSBzaWduaWZpY2FudCB0aHJlYXQuCiAKLVxiZWdpbntlbnVtZXJhdGV9Ci0gICBcaXRlbSBVbmRlZmluZSBNRFNBLCBNRUNDIGFuZCBNREggZnJvbSB0b21jcnlwdFxfY3VzdG9tLmgKLSAgIFxpdGVtIFVuZGVmaW5lIExUTVxfQUxMICBmcm9tIHRvbW1hdGhcX3N1cGVyY2xhc3MuaAotICAgXGl0ZW0gRGVmaW5lIFNDXF9SU0FcXzEgZnJvbSB0b21tYXRoXF9zdXBlcmNsYXNzLmgKLSAgIFxpdGVtIFJlYnVpbGQgdGhlIGxpYnJhcnkuCi1cZW5ke2VudW1lcmF0ZX0KK1xzdWJzZWN0aW9ue01hdGggRGVzY3JpcHRvcnN9CitUaGUgbGlicmFyeSBjb21lcyB3aXRoIHRocmVlIG1hdGggZGVzY3JpcHRvcnMgdGhhdCBhbGxvdyB5b3UgdG8gaW50ZXJmYWNlIHRoZSBwdWJsaWMga2V5IGNyeXB0b2dyYXBoeSBBUEkgdG8gZnJlZWx5IGF2YWlsYWJsZSBtYXRoCitsaWJyYXJpZXMuICBXaGVuIFx0ZXh0YmZ7R01QXF9ERVNDfSwgXHRleHRiZntMVE1cX0RFU0N9LCBvciBcdGV4dGJme1RGTVxfREVTQ30gYXJlIGRlZmluZWQKK2Rlc2NyaXB0b3JzIGZvciB0aGUgcmVzcGVjdGl2ZSBsaWJyYXJ5IGFyZSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkgYXMgXHRleHRpdHtnbXBcX2Rlc2N9LCBcdGV4dGl0e2x0bVxfZGVzY30sIG9yIFx0ZXh0aXR7dGZtXF9kZXNjfSByZXNwZWN0aXZlbHkuCisKK0luIHRoZSB0ZXN0IGRlbW9zIHRoYXQgdXNlIHRoZSBsaWJyYXJpZXMgdGhlIGFkZGl0aW9uYWwgZmxhZ3MgXHRleHRiZntVU0VcX0dNUH0sIFx0ZXh0YmZ7VVNFXF9MVE19LCBhbmQgXHRleHRiZntVU0VcX1RGTX0gY2FuIGJlIGRlZmluZWQKK3RvIHRlbGwgdGhlIHByb2dyYW0gd2hpY2ggbGlicmFyeSB0byB1c2UuICBPbmx5IG9uZSBvZiB0aGUgVVNFIGZsYWdzIGNhbiBiZSBkZWZpbmVkIGF0IG9uY2UuCisKK1xpbmRleHtHTVBcX0RFU0N9IFxpbmRleHtVU0VcX0dNUH0gXGluZGV4e0xUTVxfREVTQ30gXGluZGV4e1RGTVxfREVTQ30gXGluZGV4e1VTRVxfTFRNfSBcaW5kZXh7VVNFXF9URk19CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitDRkxBR1M9Ii1ER01QX0RFU0MgLURMVE1fREVTQyAtRFRGTV9ERVNDIC1EVVNFX1RGTSIgXAorRVhUUkFMSUJTPSItbGdtcCAtbHRvbW1hdGggLWx0Zm0iIG1ha2UgLWYgbWFrZWZpbGUuc2hhcmVkIGluc3RhbGwgdGltaW5nCitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworVGhhdCB3aWxsIGJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBsaWJyYXJ5IHdpdGggYWxsIGRlc2NyaXB0b3JzIChhbmQgbGluayBhZ2FpbnN0IGFsbCksIGJ1dCBvbmx5IHVzZSBUb21zRmFzdE1hdGggaW4gdGhlIHRpbWluZyBkZW1vLiAgCiAKIFxjaGFwdGVye09wdGltaXphdGlvbnN9Ci1cc2VjdGlvbntJbnRyb2R1Y3Rpb259Ci1UaGUgZW50aXJlIEFQSSB3YXMgZGVzaWduZWQgd2l0aCBwbHVnIGFuZCBwbGF5IGluIG1pbmQgYXQgdGhlIGxvdyBsZXZlbC4gIFRoYXQgaXMgeW91IGNhbiBzd2FwIG91dCBhbnkgY2lwaGVyLCBoYXNoIG9yIFBSTkcgYW5kIGRlcGVuZGVudCBBUEkgd2lsbCBub3QgcmVxdWlyZQotdXBkYXRpbmcuICBUaGlzIGhhcyB0aGUgbmljZSBiZW5lZml0IHRoYXQgSSBjYW4gYWRkIGNpcGhlcnMgbm90IGhhdmUgdG8gcmUtLXdyaXRlIGxhcmdlIHBvcnRpb25zIG9mIHRoZSBBUEkuICBGb3IgdGhlIG1vc3QgcGFydCBMaWJUb21DcnlwdCBoYXMgYWxzbyBiZWVuIHdyaXR0ZW4KK1xteXNlY3Rpb257SW50cm9kdWN0aW9ufQorVGhlIGVudGlyZSBBUEkgd2FzIGRlc2lnbmVkIHdpdGggcGx1ZyBhbmQgcGxheSBpbiBtaW5kIGF0IHRoZSBsb3cgbGV2ZWwuICBUaGF0IGlzIHlvdSBjYW4gc3dhcCBvdXQgYW55IGNpcGhlciwgaGFzaCwgUFJORyBvciBiaWdudW0gbGlicmFyeSBhbmQgdGhlIGRlcGVuZGVudCBBUEkgd2lsbCBub3QgCityZXF1aXJlIHVwZGF0aW5nLiAgVGhpcyBoYXMgdGhlIG5pY2UgYmVuZWZpdCB0aGF0IG9uZSBjYW4gYWRkIGNpcGhlcnMgKGV0Yy4pIG5vdCBoYXZlIHRvIHJlLS13cml0ZSBwb3J0aW9ucyBvZiB0aGUgQVBJLiAgRm9yIHRoZSBtb3N0IHBhcnQsIExpYlRvbUNyeXB0IGhhcyBhbHNvIGJlZW4gd3JpdHRlbgogdG8gYmUgaGlnaGx5IHBvcnRhYmxlIGFuZCBlYXN5IHRvIGJ1aWxkIG91dCBvZiB0aGUgYm94IG9uIHByZXR0eSBtdWNoIGFueSBwbGF0Zm9ybS4gIEFzIHN1Y2ggdGhlcmUgYXJlIG5vIGFzc2VtYmxlciBpbmxpbmVzIHRocm91Z2hvdXQgdGhlIGNvZGUsIEkgbWFrZSBubyBhc3N1bXB0aW9ucwogYWJvdXQgdGhlIHBsYXRmb3JtLCBldGMuLi4KIAotVGhhdCB3b3JrcyB3ZWxsIGZvciBtb3N0IGNhc2VzIGJ1dCB0aGVyZSBhcmUgdGltZXMgd2hlcmUgdGltZSBpcyBvZiB0aGUgZXNzZW5jZS4gIFRoaXMgQVBJIGFsc28gYWxsb3dzIG9wdGltaXplZCByb3V0aW5lcyB0byBiZSBkcm9wcGVkIGluLS1wbGFjZSBvZiB0aGUgZXhpc3RpbmcKLXBvcnRhYmxlIHJvdXRpbmVzLiAgRm9yIGluc3RhbmNlLCBoYW5kIG9wdGltaXplZCBhc3NlbWJsZXIgdmVyc2lvbnMgb2YgQUVTIGNvdWxkIGJlIHByb3ZpZGVkIGFuZCBhbnkgZXhpc3RpbmcgZnVuY3Rpb24gdGhhdCB1c2VzIHRoZSBjaXBoZXIgY291bGQgYXV0b21hdGljYWxseSB1c2UKK1RoYXQgd29ya3Mgd2VsbCBmb3IgbW9zdCBjYXNlcyBidXQgdGhlcmUgYXJlIHRpbWVzIHdoZXJlIHBlcmZvcm1hbmNlIGlzIG9mIHRoZSBlc3NlbmNlLiAgVGhpcyBBUEkgYWxsb3dzIG9wdGltaXplZCByb3V0aW5lcyB0byBiZSBkcm9wcGVkIGluLS1wbGFjZSBvZiB0aGUgZXhpc3RpbmcKK3BvcnRhYmxlIHJvdXRpbmVzLiAgRm9yIGluc3RhbmNlLCBoYW5kIG9wdGltaXplZCBhc3NlbWJsZXIgdmVyc2lvbnMgb2YgQUVTIGNvdWxkIGJlIHByb3ZpZGVkLiAgQW55IGV4aXN0aW5nIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgY2lwaGVyIGNvdWxkIGF1dG9tYXRpY2FsbHkgdXNlCiB0aGUgb3B0aW1pemVkIGNvZGUgd2l0aG91dCByZS0td3JpdGluZy4gIFRoaXMgYWxzbyBwYXZlcyB0aGUgd2F5IGZvciBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgY2FuIGFjY2VzcyBoYXJkd2FyZSBhY2NlbGVyYXRlZCBjcnlwdG9ncmFwaGljIGRldmljZXMuCiAKLUF0IHRoZSBoZWFydCBvZiB0aGlzIGZsZXhpYmlsaXR5IGlzIHRoZSBgYGRlc2NyaXB0b3InJyBzeXN0ZW0uICBBIGRlc2NyaXB0b3IgaXMgZXNzZW50aWFsbHkganVzdCBhIEMgYGBzdHJ1Y3QnJyB3aGljaCBkZXNjcmliZXMgdGhlIGFsZ29yaXRobSBhbmQgcHJvdmlkZXMgcG9pbnRlcnMKLXRvIGZ1bmN0aW9ucyB0aGF0IGRvIHRoZSB3b3JrLiAgRm9yIGEgZ2l2ZW4gY2xhc3Mgb2Ygb3BlcmF0aW9uIChlLmcuIGNpcGhlciwgaGFzaCwgcHJuZykgdGhlIGZ1bmN0aW9ucyBoYXZlIGlkZW50aWNhbCBwcm90b3R5cGVzIHdoaWNoIG1ha2VzIGRldmVsb3BtZW50IHNpbXBsZS4gIEluIG1vc3QKLWRlcGVuZGVudCByb3V0aW5lcyBhbGwgYSBkZXZlbG9wZXIgaGFzIHRvIGRvIGlzIHJlZ2lzdGVyXF9YWFgoKSB0aGUgZGVzY3JpcHRvciBhbmQgdGhleSdyZSBzZXQuCitBdCB0aGUgaGVhcnQgb2YgdGhpcyBmbGV4aWJpbGl0eSBpcyB0aGUgXHRleHRpdHtkZXNjcmlwdG9yfSBzeXN0ZW0uICBBIGRlc2NyaXB0b3IgaXMgZXNzZW50aWFsbHkganVzdCBhIEMgXHRleHRpdHtzdHJ1Y3R9IHdoaWNoIGRlc2NyaWJlcyB0aGUgYWxnb3JpdGhtIGFuZCBwcm92aWRlcyBwb2ludGVycwordG8gZnVuY3Rpb25zIHRoYXQgZG8gdGhlIHJlcXVpcmVkIHdvcmsuICBGb3IgYSBnaXZlbiBjbGFzcyBvZiBvcGVyYXRpb24gKGUuZy4gY2lwaGVyLCBoYXNoLCBwcm5nLCBiaWdudW0pIHRoZSBmdW5jdGlvbnMgb2YgYSBkZXNjcmlwdG9yIGhhdmUgaWRlbnRpY2FsIHByb3RvdHlwZXMgd2hpY2ggbWFrZXMgCitkZXZlbG9wbWVudCBzaW1wbGUuICBJbiBtb3N0IGRlcGVuZGVudCByb3V0aW5lcyBhbGwgYW4gZW5kIGRldmVsb3BlciBoYXMgdG8gZG8gaXMgcmVnaXN0ZXJcX1hYWCgpIHRoZSBkZXNjcmlwdG9yIGFuZCB0aGV5IGFyZSBzZXQuCiAKLVxzZWN0aW9ue0NpcGhlcnN9CitcbXlzZWN0aW9ue0NpcGhlcnN9CiBUaGUgY2lwaGVycyBpbiBMaWJUb21DcnlwdCBhcmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbHRjXF9jaXBoZXJcX2Rlc2NyaXB0b3Igc3RydWN0dXJlLgogCitcbGFiZWx7c2VjOmNpcGhlcmRlc2N9CiBcYmVnaW57c21hbGx9CiBcYmVnaW57dmVyYmF0aW19CiBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHsKICAgIC8qKiBuYW1lIG9mIGNpcGhlciAqLwogICAgY2hhciAqbmFtZTsKKwogICAgLyoqIGludGVybmFsIElEICovCiAgICB1bnNpZ25lZCBjaGFyIElEOworCiAgICAvKiogbWluIGtleXNpemUgKG9jdGV0cykgKi8KICAgIGludCAgbWluX2tleV9sZW5ndGgsIAorCiAgICAvKiogbWF4IGtleXNpemUgKG9jdGV0cykgKi8KICAgICAgICAgbWF4X2tleV9sZW5ndGgsIAorCiAgICAvKiogYmxvY2sgc2l6ZSAob2N0ZXRzKSAqLwogICAgICAgICBibG9ja19sZW5ndGgsIAorCiAgICAvKiogZGVmYXVsdCBudW1iZXIgb2Ygcm91bmRzICovCiAgICAgICAgIGRlZmF1bHRfcm91bmRzOworCiAgICAvKiogU2V0dXAgdGhlIGNpcGhlciAKICAgICAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgaW5wdXQgc3ltbWV0cmljIGtleQogICAgICAgQHBhcmFtIGtleWxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGtleSAob2N0ZXRzKQpAQCAtNDE4MSwyOCArNTM4OCw0NSBAQAogICAgICAgQHBhcmFtIHNrZXkgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc2NoZWR1bGVkIGtleQogICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgaW50ICAoKnNldHVwKShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIAotICAgICAgICAgICAgICAgICBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CisgICBpbnQgICgqc2V0dXApKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsIAorICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKwogICAgLyoqIEVuY3J5cHQgYSBibG9jawogICAgICAgQHBhcmFtIHB0ICAgICAgVGhlIHBsYWludGV4dAogICAgICAgQHBhcmFtIGN0ICAgICAgW291dF0gVGhlIGNpcGhlcnRleHQKICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICovCi0gICB2b2lkICgqZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgaW50ICgqZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKICAgIC8qKiBEZWNyeXB0IGEgYmxvY2sKICAgICAgIEBwYXJhbSBjdCAgICAgIFRoZSBjaXBoZXJ0ZXh0CiAgICAgICBAcGFyYW0gcHQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CiAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgdm9pZCAoKmVjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKyAgIGludCAoKmVjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOworCiAgICAvKiogVGVzdCB0aGUgYmxvY2sgY2lwaGVyCi0gICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0aW5nIGhhcyBiZWVuIGRpc2FibGVkCisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCAKKyAgICAgICAgICAgICAgIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKICAgICovCiAgICBpbnQgKCp0ZXN0KSh2b2lkKTsKKworICAgLyoqIFRlcm1pbmF0ZSB0aGUgY29udGV4dCAKKyAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisgICAqLworICAgdm9pZCAoKmRvbmUpKHN5bW1ldHJpY19rZXkgKnNrZXkpOyAgICAgIAorCiAgICAvKiogRGV0ZXJtaW5lIGEga2V5IHNpemUKLSAgICAgICBAcGFyYW0ga2V5c2l6ZSAgICBbaW4vb3V0XSBUaGUgc2l6ZSBvZiB0aGUga2V5IGRlc2lyZWQgYW5kIHRoZSBzdWdnZXN0ZWQgc2l6ZQorICAgICAgIEBwYXJhbSBrZXlzaXplICAgIFtpbi9vdXRdIFRoZSBzaXplIG9mIHRoZSBrZXkgZGVzaXJlZCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHN1Z2dlc3RlZCBzaXplCiAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwogICAgaW50ICAoKmtleXNpemUpKGludCAqa2V5c2l6ZSk7CkBAIC00MjEzLDIwICs1NDM3LDI0IEBACiAgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAogICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKICAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgdm9pZCAoKmFjY2VsX2VjYl9lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGJsb2NrcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgaW50ICgqYWNjZWxfZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgYmxvY2tzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIAogICAgLyoqIEFjY2VsZXJhdGVkIEVDQiBkZWNyeXB0aW9uIAogICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAogICAgICAgIEBwYXJhbSBjdCAgICAgIENpcGhlcnRleHQKICAgICAgICBAcGFyYW0gYmxvY2tzICBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzCiAgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9lY2JfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKyAgIGludCAoKmFjY2VsX2VjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGJsb2NrcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CiAKICAgIC8qKiBBY2NlbGVyYXRlZCBDQkMgZW5jcnlwdGlvbiAKICAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKQEAgLTQyMzQsMTAgKzU0NjIsMTMgQEAKICAgICAgICBAcGFyYW0gYmxvY2tzICBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzCiAgICAgICAgQHBhcmFtIElWICAgICAgVGhlIGluaXRpYWwgdmFsdWUgKGlucHV0L291dHB1dCkKICAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgdm9pZCAoKmFjY2VsX2NiY19lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGJsb2NrcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKyAgIGludCAoKmFjY2VsX2NiY19lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGJsb2NrcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogCiAgICAvKiogQWNjZWxlcmF0ZWQgQ0JDIGRlY3J5cHRpb24gCiAgICAgICAgQHBhcmFtIHB0ICAgICAgUGxhaW50ZXh0CkBAIC00MjQ1LDEwICs1NDc2LDEzIEBACiAgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcwogICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCiAgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9jYmNfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpJViwgc3ltbWV0cmljX2tleSAqc2tleSk7CisgICBpbnQgKCphY2NlbF9jYmNfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBibG9ja3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIAogICAgLyoqIEFjY2VsZXJhdGVkIENUUiBlbmNyeXB0aW9uIAogICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dApAQCAtNDI1NywxNCArNTQ5MSw1MSBAQAogICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCiAgICAgICAgQHBhcmFtIG1vZGUgICAgbGl0dGxlIG9yIGJpZyBlbmRpYW4gY291bnRlciAobW9kZT0wIG9yIG1vZGU9MSkKICAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgdm9pZCAoKmFjY2VsX2N0cl9lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGJsb2NrcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCBpbnQgbW9kZSwgc3ltbWV0cmljX2tleSAqc2tleSk7CisgICBpbnQgKCphY2NlbF9jdHJfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBibG9ja3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKworICAgLyoqIEFjY2VsZXJhdGVkIExSVyAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCisgICAgICAgQHBhcmFtIHR3ZWFrICAgVGhlIExSVyB0d2VhaworICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9scndfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBibG9ja3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0d2VhaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBMUlcgCisgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAorICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKKyAgICAgICBAcGFyYW0gSVYgICAgICBUaGUgaW5pdGlhbCB2YWx1ZSAoaW5wdXQvb3V0cHV0KQorICAgICAgIEBwYXJhbSB0d2VhayAgIFRoZSBMUlcgdHdlYWsKKyAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfbHJ3X2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgYmxvY2tzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHdlYWssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogCiAgICAvKiogQWNjZWxlcmF0ZWQgQ0NNIHBhY2tldCAob25lLXNob3QpCiAgICAgICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkgdG8gdXNlCiAgICAgICAgQHBhcmFtIGtleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSB1c2tleSAgICAgIEEgcHJldmlvdXNseSBzY2hlZHVsZWQga2V5IFtjYW4gYmUgTlVMTF0KICAgICAgICBAcGFyYW0gbm9uY2UgICAgICBUaGUgc2Vzc2lvbiBub25jZSBbdXNlIG9uY2VdCiAgICAgICAgQHBhcmFtIG5vbmNlbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgbm9uY2UKICAgICAgICBAcGFyYW0gaGVhZGVyICAgICBUaGUgaGVhZGVyIGZvciB0aGUgc2Vzc2lvbgpAQCAtNDI3MywxMiArNTU0NCwxNCBAQAogICAgICAgIEBwYXJhbSBwdGxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHBsYWludGV4dCAob2N0ZXRzKQogICAgICAgIEBwYXJhbSBjdCAgICAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0CiAgICAgICAgQHBhcmFtIHRhZyAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIHRhZwotICAgICAgIEBwYXJhbSB0YWdsZW4gICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgICAgIEBwYXJhbSB0YWdsZW4gICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZwogICAgICAgIEBwYXJhbSBkaXJlY3Rpb24gIEVuY3J5cHQgb3IgRGVjcnlwdCBkaXJlY3Rpb24gKDAgb3IgMSkKICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICovCi0gICB2b2lkICgqYWNjZWxfY2NtX21lbW9yeSkoCisgICBpbnQgKCphY2NlbF9jY21fbWVtb3J5KSgKICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIHN5bW1ldHJpY19rZXkgICAgICAgKnVza2V5LAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCAgdW5zaWduZWQgbG9uZyBub25jZWxlbiwKICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIHVuc2lnbmVkIGxvbmcgaGVhZGVybGVuLAogICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKQEAgLTQyODcsMjAgKzU1NjAsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBkaXJlY3Rpb24pOwogCiAgICAvKiogQWNjZWxlcmF0ZWQgR0NNIHBhY2tldCAob25lIHNob3QpCi0gICAgICAgQHBhcmFtIGtleSAgICAgICAgICAgICAgIFRoZSBzZWNyZXQga2V5Ci0gICAgICAgQHBhcmFtIGtleWxlbiAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkKLSAgICAgICBAcGFyYW0gSVYgICAgICAgICAgICAgICAgVGhlIGluaXRpYWwgdmVjdG9yIAotICAgICAgIEBwYXJhbSBJVmxlbiAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHZlY3RvcgotICAgICAgIEBwYXJhbSBhZGF0YSAgICAgICAgICAgICBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIChoZWFkZXIpCi0gICAgICAgQHBhcmFtIGFkYXRhbGVuICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGFkYXRhCi0gICAgICAgQHBhcmFtIHB0ICAgICAgICAgICAgICAgIFRoZSBwbGFpbnRleHQKLSAgICAgICBAcGFyYW0gcHRsZW4gICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChjaXBoZXJ0ZXh0IGxlbmd0aCBpcyB0aGUgc2FtZSkKLSAgICAgICBAcGFyYW0gY3QgICAgICAgICAgICAgICAgVGhlIGNpcGhlcnRleHQKLSAgICAgICBAcGFyYW0gdGFnICAgICAgICAgICAgICAgW291dF0gVGhlIE1BQyB0YWcKLSAgICAgICBAcGFyYW0gdGFnbGVuICAgICAgICAgICAgW2luL291dF0gVGhlIE1BQyB0YWcgbGVuZ3RoCi0gICAgICAgQHBhcmFtIGRpcmVjdGlvbiAgICAgICAgIEVuY3J5cHQgb3IgRGVjcnlwdCBtb2RlIChHQ01fRU5DUllQVCBvciBHQ01fREVDUllQVCkKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgICAgIEBwYXJhbSBrZXlsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0gSVYgICAgICAgICBUaGUgaW5pdGlhbCB2ZWN0b3IgCisgICAgICAgQHBhcmFtIElWbGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCB2ZWN0b3IKKyAgICAgICBAcGFyYW0gYWRhdGEgICAgICBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIChoZWFkZXIpCisgICAgICAgQHBhcmFtIGFkYXRhbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgYWRhdGEKKyAgICAgICBAcGFyYW0gcHQgICAgICAgICBUaGUgcGxhaW50ZXh0CisgICAgICAgQHBhcmFtIHB0bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0L2NpcGhlcnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICAgICBUaGUgY2lwaGVydGV4dAorICAgICAgIEBwYXJhbSB0YWcgICAgICAgIFtvdXRdIFRoZSBNQUMgdGFnCisgICAgICAgQHBhcmFtIHRhZ2xlbiAgICAgW2luL291dF0gVGhlIE1BQyB0YWcgbGVuZ3RoCisgICAgICAgQHBhcmFtIGRpcmVjdGlvbiAgRW5jcnlwdCBvciBEZWNyeXB0IG1vZGUgKEdDTV9FTkNSWVBUIG9yIEdDTV9ERUNSWVBUKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcwogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9nY21fbWVtb3J5KSgKKyAgIGludCAoKmFjY2VsX2djbV9tZW1vcnkpKAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCiAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsICAgICB1bnNpZ25lZCBsb25nIElWbGVuLAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkYXRhLCAgdW5zaWduZWQgbG9uZyBhZGF0YWxlbiwKQEAgLTQzMDksNjUgKzU1ODMsMTA5IEBACiAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pOwogCisgICAvKiogQWNjZWxlcmF0ZWQgb25lIHNob3QgT01BQyAKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICAgICAgVGhlIGtleSBsZW5ndGggKG9jdGV0cykgCisgICAgICAgQHBhcmFtIGluICAgICAgICAgICAgIFRoZSBtZXNzYWdlIAorICAgICAgIEBwYXJhbSBpbmxlbiAgICAgICAgICBMZW5ndGggb2YgbWVzc2FnZSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBvdXQgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGFnCisgICAgICAgQHBhcmFtIG91dGxlbiAgICAgICAgIFtpbi9vdXRdIEluaXRpYWwgYW5kIGZpbmFsIHNpemUgb2Ygb3V0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqb21hY19tZW1vcnkpKAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworICAgLyoqIEFjY2VsZXJhdGVkIG9uZSBzaG90IFhDQkMgCisgICAgICAgQHBhcmFtIGtleSAgICAgICAgICAgIFRoZSBzZWNyZXQga2V5CisgICAgICAgQHBhcmFtIGtleWxlbiAgICAgICAgIFRoZSBrZXkgbGVuZ3RoIChvY3RldHMpIAorICAgICAgIEBwYXJhbSBpbiAgICAgICAgICAgICBUaGUgbWVzc2FnZSAKKyAgICAgICBAcGFyYW0gaW5sZW4gICAgICAgICAgTGVuZ3RoIG9mIG1lc3NhZ2UgKG9jdGV0cykKKyAgICAgICBAcGFyYW0gb3V0ICAgICAgICAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRhZworICAgICAgIEBwYXJhbSBvdXRsZW4gICAgICAgICBbaW4vb3V0XSBJbml0aWFsIGFuZCBmaW5hbCBzaXplIG9mIG91dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnhjYmNfbWVtb3J5KSgKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBvbmUgc2hvdCBGOSAKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICAgICAgVGhlIGtleSBsZW5ndGggKG9jdGV0cykgCisgICAgICAgQHBhcmFtIGluICAgICAgICAgICAgIFRoZSBtZXNzYWdlIAorICAgICAgIEBwYXJhbSBpbmxlbiAgICAgICAgICBMZW5ndGggb2YgbWVzc2FnZSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBvdXQgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGFnCisgICAgICAgQHBhcmFtIG91dGxlbiAgICAgICAgIFtpbi9vdXRdIEluaXRpYWwgYW5kIGZpbmFsIHNpemUgb2Ygb3V0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAgICAgQHJlbWFyayBSZXF1aXJlcyBtYW51YWwgcGFkZGluZworICAgKi8KKyAgIGludCAoKmY5X21lbW9yeSkoCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogfTsKIFxlbmR7dmVyYmF0aW19CiBcZW5ke3NtYWxsfQogCiBcc3Vic2VjdGlvbntOYW1lfQotVGhlIGBgbmFtZScnIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGNpcGhlci4gIFRoaXMgaXMgd2hhdCBhIGRldmVsb3BlciB3b3VsZCBwYXNzIHRvIGZpbmRcX2NpcGhlcigpIHRvIGZpbmQgdGhlIGNpcGhlciBpbiB0aGUgZGVzY3JpcHRvcgorXGluZGV4e2ZpbmRcX2NpcGhlcigpfQorVGhlIFx0ZXh0aXR7bmFtZX0gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgY2lwaGVyLiAgVGhpcyBpcyB3aGF0IGEgZGV2ZWxvcGVyIHdvdWxkIHBhc3MgdG8gZmluZFxfY2lwaGVyKCkgdG8gZmluZCB0aGUgY2lwaGVyIGluIHRoZSBkZXNjcmlwdG9yCiB0YWJsZXMuCiAKIFxzdWJzZWN0aW9ue0ludGVybmFsIElEfQotVGhpcyBpcyBhIHNpbmdsZSBieXRlIEludGVybmFsIElEIHlvdSBjYW4gdXNlIHRvIGRpc3Rpbmdpc2ggY2lwaGVycyBmcm9tIGVhY2ggb3RoZXIuCitUaGlzIGlzIGEgc2luZ2xlIGJ5dGUgSW50ZXJuYWwgSUQgeW91IGNhbiB1c2UgdG8gZGlzdGluZ3Vpc2ggY2lwaGVycyBmcm9tIGVhY2ggb3RoZXIuCiAKIFxzdWJzZWN0aW9ue0tleSBMZW5ndGhzfQotVGhlIG1pbmltdW0ga2V5IGxlbmd0aCBpcyBgYG1pblxfa2V5XF9sZW5ndGgnJyBhbmQgaXMgbWVhc3VyZWQgaW4gb2N0ZXRzLiAgU2ltaWxhcmx5IHRoZSBtYXhpbXVtIGtleSBsZW5ndGggaXMgYGBtYXhcX2tleVxfbGVuZ3RoJycuICBUaGV5IGNhbiBiZSBlcXVhbAorVGhlIG1pbmltdW0ga2V5IGxlbmd0aCBpcyBcdGV4dGl0e21pblxfa2V5XF9sZW5ndGh9IGFuZCBpcyBtZWFzdXJlZCBpbiBvY3RldHMuICBTaW1pbGFybHkgdGhlIG1heGltdW0ga2V5IGxlbmd0aCBpcyBcdGV4dGl0e21heFxfa2V5XF9sZW5ndGh9LiAgVGhleSBjYW4gYmUgZXF1YWwKIGFuZCBib3RoIG11c3QgdmFsaWQga2V5IHNpemVzIGZvciB0aGUgY2lwaGVyLiAgVmFsdWVzIGluIGJldHdlZW4gYXJlIG5vdCBhc3N1bWVkIHRvIGJlIHZhbGlkIHRob3VnaCB0aGV5IG1heSBiZS4KIAogXHN1YnNlY3Rpb257QmxvY2sgTGVuZ3RofQotVGhlIHNpemUgb2YgdGhlIGNpcGhlcnMgcGxhaW50ZXh0IG9yIGNpcGhlcnRleHQgaXMgYGBibG9ja1xfbGVuZ3RoJycgYW5kIGlzIG1lYXN1cmVkIGluIG9jdGV0cy4KK1RoZSBzaXplIG9mIHRoZSBjaXBoZXJzIHBsYWludGV4dCBvciBjaXBoZXJ0ZXh0IGlzIFx0ZXh0aXR7YmxvY2tcX2xlbmd0aH0gYW5kIGlzIG1lYXN1cmVkIGluIG9jdGV0cy4KIAogXHN1YnNlY3Rpb257Um91bmRzfQotU29tZSBjaXBoZXJzIGFsbG93IGRpZmZlcmVudCBudW1iZXIgb2Ygcm91bmRzIHRvIGJlIHVzZWQuICBVc3VhbGx5IHlvdSBqdXN0IHVzZSB0aGUgZGVmYXVsdC4gIFRoZSBkZWZhdWx0IHJvdW5kIGNvdW50IGlzIGBgZGVmYXVsdFxfcm91bmRzJycuCitTb21lIGNpcGhlcnMgYWxsb3cgZGlmZmVyZW50IG51bWJlciBvZiByb3VuZHMgdG8gYmUgdXNlZC4gIFVzdWFsbHkgeW91IGp1c3QgdXNlIHRoZSBkZWZhdWx0LiAgVGhlIGRlZmF1bHQgcm91bmQgY291bnQgaXMgXHRleHRpdHtkZWZhdWx0XF9yb3VuZHN9LgogCiBcc3Vic2VjdGlvbntTZXR1cH0KLVRvIGluaXRpYWxpemUgYSBjaXBoZXIgKGZvciBFQ0IgbW9kZSkgdGhlIGZ1bmN0aW9uIHNldHVwKCkgd2FzIHByb3ZpZGVkLiAgSXQgYWNjZXB0cyBhbiBhcnJheSBvZiBrZXkgb2N0ZXRzIGBga2V5Jycgb2YgbGVuZ3RoIGBga2V5bGVuJycgb2N0ZXRzLiAgVGhlIHVzZXIKLWNhbiBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygcm91bmRzIHRoZXkgd2FudCB0aHJvdWdoIGBgbnVtXF9yb3VuZHMnJyB3aGVyZSAkbnVtXF9yb3VuZHMgPSAwJCBtZWFucyB1c2UgdGhlIGRlZmF1bHQuICBUaGUgZGVzdGluYXRpb24gb2YgYSBzY2hlZHVsZWQga2V5IGlzIHN0b3JlZAotaW4gYGBza2V5JycuCitUbyBpbml0aWFsaXplIGEgY2lwaGVyIChmb3IgRUNCIG1vZGUpIHRoZSBmdW5jdGlvbiBzZXR1cCgpIHdhcyBwcm92aWRlZC4gIEl0IGFjY2VwdHMgYW4gYXJyYXkgb2Yga2V5IG9jdGV0cyBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBvY3RldHMuICBUaGUgdXNlcgorY2FuIHNwZWNpZnkgdGhlIG51bWJlciBvZiByb3VuZHMgdGhleSB3YW50IHRocm91Z2ggXHRleHRpdHtudW1cX3JvdW5kc30gd2hlcmUgJG51bVxfcm91bmRzID0gMCQgbWVhbnMgdXNlIHRoZSBkZWZhdWx0LiAgVGhlIGRlc3RpbmF0aW9uIG9mIGEgc2NoZWR1bGVkIGtleSBpcyBzdG9yZWQKK2luIFx0ZXh0aXR7c2tleX0uCiAKLUluc2lkZSB0aGUgYGBzeW1tZXRyaWNcX2tleScnIHVuaW9uIHRoZXJlIGlzIGEgYGB2b2lkICpkYXRhJycgd2hpY2ggeW91IGNhbiB1c2UgdG8gYWxsb2NhdGUgZGF0YSBpZiB5b3UgbmVlZCBhIGRhdGEgc3RydWN0dXJlIHRoYXQgZG9lc24ndCBmaXQgd2l0aCB0aGUgZXhpc3RpbmcKLW9uZXMgcHJvdmlkZWQuICBKdXN0IG1ha2Ugc3VyZSBpbiB5b3VyIGBgZG9uZSgpJycgZnVuY3Rpb24gdGhhdCB5b3UgZnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KK0luc2lkZSB0aGUgXHRleHRpdHtzeW1tZXRyaWNcX2tleX0gdW5pb24gdGhlcmUgaXMgYSBcdGV4dGl0e3ZvaWQgKmRhdGF9IHdoaWNoIHlvdSBjYW4gdXNlIHRvIGFsbG9jYXRlIGRhdGEgaWYgeW91IG5lZWQgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGRvZXMgbm90IGZpdCB3aXRoIHRoZSBleGlzdGluZworb25lcyBwcm92aWRlZC4gIEp1c3QgbWFrZSBzdXJlIGluIHlvdXIgXHRleHRpdHtkb25lKCl9IGZ1bmN0aW9uIHRoYXQgeW91IGZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCiAKIFxzdWJzZWN0aW9ue1NpbmdsZSBibG9jayBFQ0J9CiBUbyBwcm9jZXNzIGEgc2luZ2xlIGJsb2NrIGluIEVDQiBtb2RlIHRoZSBlY2JcX2VuY3J5cHQoKSBhbmQgZWNiXF9kZWNyeXB0KCkgZnVuY3Rpb25zIHdlcmUgcHJvdmlkZWQuICBUaGUgcGxhaW50ZXh0IGFuZCBjaXBoZXJ0ZXh0IGJ1ZmZlcnMgYXJlIGFsbG93ZWQgdG8gb3ZlcmxhcCBzbyB5b3UgCiBtdXN0IG1ha2Ugc3VyZSB5b3UgZG8gbm90IG92ZXJ3cml0ZSB0aGUgb3V0cHV0IGJlZm9yZSB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGlucHV0LgogCiBcc3Vic2VjdGlvbntUZXN0aW5nfQotVGhlIHRlc3QoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbGYtLXRlc3QgdGhlIGBgZGV2aWNlJycuICBJdCB0YWtlcyBubyBhcmd1bWVudHMgYW5kIHJldHVybnMgXHRleHRiZntDUllQVFxfT0t9IGlmIGFsbCBpcyB3b3JraW5nIHByb3Blcmx5LgorVGhlIHRlc3QoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbGYtLXRlc3QgdGhlIFx0ZXh0aXR7ZGV2aWNlfS4gIEl0IHRha2VzIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBcdGV4dGJme0NSWVBUXF9PS30gaWYgYWxsIGlzIHdvcmtpbmcgcHJvcGVybHkuICBZb3UgbWF5IHJldHVybgorXHRleHRiZntDUllQVFxfTk9QfSB0byBpbmRpY2F0ZSB0aGF0IG5vIHRlc3Rpbmcgd2FzIHBlcmZvcm1lZC4KIAogXHN1YnNlY3Rpb257S2V5IFNpemluZ30KLU9jY2FzaW9uYWxseSBhIGZ1bmN0aW9uIHdpbGwgd2FudCB0byBmaW5kIGEgc3VpdGFibGUga2V5IHNpemUgdG8gdXNlIHNpbmNlIHRoZSBpbnB1dCBpcyBvZGRseSBzaXplZC4gIFRoZSBrZXlzaXplKCkgZnVuY3Rpb24gaXMgZm9yIHRoaXMgY2FzZS4gIEl0IGFjY2VwdHMgYSAKK09jY2FzaW9uYWxseSwgYSBmdW5jdGlvbiB3aWxsIHdhbnQgdG8gZmluZCBhIHN1aXRhYmxlIGtleSBzaXplIHRvIHVzZSBzaW5jZSB0aGUgaW5wdXQgaXMgb2RkbHkgc2l6ZWQuICBUaGUga2V5c2l6ZSgpIGZ1bmN0aW9uIGlzIGZvciB0aGlzIGNhc2UuICBJdCBhY2NlcHRzIGEgCiBwb2ludGVyIHRvIGFuIGludGVnZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgZGVzaXJlZCBzaXplLiAgVGhlIGZ1bmN0aW9uIHRoZW4gaGFzIHRvIG1hdGNoIGl0IHRvIHRoZSBleGFjdCBvciBhIGxvd2VyIGtleSBzaXplIHRoYXQgaXMgdmFsaWQgZm9yIHRoZSBjaXBoZXIuICBGb3IKIGV4YW1wbGUsIGlmIHRoZSBpbnB1dCBpcyAkMjUkIGFuZCAkMjQkIGlzIHZhbGlkIHRoZW4gaXQgc3RvcmVzICQyNCQgYmFjayBpbiB0aGUgcG9pbnRlZCB0byBpbnRlZ2VyLiAgSXQgbXVzdCBub3Qgcm91bmQgdXAgYW5kIG11c3QgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBrZXlzaXplCiAgY2Fubm90IGJlIG1hcHBlZCB0byBhIHZhbGlkIGtleSBzaXplIGZvciB0aGUgY2lwaGVyLgogCiBcc3Vic2VjdGlvbntBY2NlbGVyYXRpb259CiBUaGUgbmV4dCBzZXQgb2YgZnVuY3Rpb25zIGNvdmVyIHRoZSBhY2NlbGVyYXRlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaXBoZXIgZGVzY3JpcHRvci4gIEFueSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIHNldCB0byBcdGV4dGJme05VTEx9IHRvIGluZGljYXRlCi1pdCBpcyBub3Qgc3VwcG9ydGVkLiAgSW4gdGhvc2UgY2FzZXMgdGhlIHNvZnR3YXJlIGZhbGxiYWNrcyBhcmUgdXNlZCAodXNpbmcgdGhlIHNpbmdsZSBFQ0IgYmxvY2sgcm91dGluZXMpLgoraXQgaXMgbm90IHN1cHBvcnRlZC4gIEluIHRob3NlIGNhc2VzIHRoZSBzb2Z0d2FyZSBkZWZhdWx0cyBhcmUgdXNlZCAodXNpbmcgdGhlIHNpbmdsZSBFQ0IgYmxvY2sgcm91dGluZXMpLgogCiBcc3Vic3Vic2VjdGlvbntBY2NlbGVyYXRlZCBFQ0J9CiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBtZWFudCBmb3IgY2FzZXMgd2hlcmUgYSB1c2VyIHdhbnRzIHRvIGVuY3J5cHQgKGluIEVDQiBtb2RlIG5vIGxlc3MpIGFuIGFycmF5IG9mIGJsb2Nrcy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzZWQKLXRocm91Z2ggdGhlIGFjY2VsXF9lY2JcX2VuY3J5cHQgYW5kIGFjY2VsXF9lY2JcX2RlY3J5cHQgcG9pbnRlcnMuICBUaGUgYGBibG9ja3MnJyBjb3VudCBpcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzLgordGhyb3VnaCB0aGUgYWNjZWxcX2VjYlxfZW5jcnlwdCBhbmQgYWNjZWxcX2VjYlxfZGVjcnlwdCBwb2ludGVycy4gIFRoZSBcdGV4dGl0e2Jsb2Nrc30gY291bnQgaXMgdGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2Vzcy4KIAogXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgQ0JDfSAKIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG1lYW50IGZvciBhY2NlbGVyYXRlZCBDQkMgZW5jcnlwdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYWNjZWxcX2NiY1xfZW5jcnlwdCBhbmQgYWNjZWxcX2NiY1xfZGVjcnlwdCBwb2ludGVycy4KLVRoZSBgYGJsb2NrcycnIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MuICBUaGUgYGBJVicnIGlzIHRoZSBDQkMgaW5pdGlhbCB2ZWN0b3IuICBJdCBpcyBhbiBpbnB1dCB1cG9uIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgbXVzdCBiZQorVGhlIFx0ZXh0aXR7YmxvY2tzfSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzLiAgVGhlIFx0ZXh0aXR7SVZ9IGlzIHRoZSBDQkMgaW5pdGlhbCB2ZWN0b3IuICBJdCBpcyBhbiBpbnB1dCB1cG9uIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgbXVzdCBiZQogdXBkYXRlZCBieSB0aGUgZnVuY3Rpb24gYmVmb3JlIHJldHVybmluZy4gIAogCiBcc3Vic3Vic2VjdGlvbntBY2NlbGVyYXRlZCBDVFJ9CiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBhY2NlbGVyYXRlZCBDVFIgZW5jcnlwdGlvbi4gIEl0IGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYWNjZWxcX2N0clxfZW5jcnlwdCBwb2ludGVyLgotVGhlIGBgYmxvY2tzJycgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2Vzcy4gIFRoZSBgYElWJycgaXMgdGhlIENUUiBjb3VudGVyIHZlY3Rvci4gIEl0IGlzIGFuIGlucHV0IHVwb24gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBtdXN0IGJlCi11cGRhdGVkIGJ5IHRoZSBmdW5jdGlvbiBiZWZvcmUgcmV0dXJuaW5nLiAgVGhlIGBgbW9kZScnIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3VudGVyIGlzIGJpZyAobW9kZSA9IENUUlxfQ09VTlRFUlxfQklHXF9FTkRJQU4pIG9yIAorVGhlIFx0ZXh0aXR7YmxvY2tzfSB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzLiAgVGhlIFx0ZXh0aXR7SVZ9IGlzIHRoZSBDVFIgY291bnRlciB2ZWN0b3IuICBJdCBpcyBhbiBpbnB1dCB1cG9uIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbmQgbXVzdCBiZQordXBkYXRlZCBieSB0aGUgZnVuY3Rpb24gYmVmb3JlIHJldHVybmluZy4gIFRoZSBcdGV4dGl0e21vZGV9IHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb3VudGVyIGlzIGJpZyAobW9kZSA9IENUUlxfQ09VTlRFUlxfQklHXF9FTkRJQU4pIG9yIAogbGl0dGxlIChtb2RlID0gQ1RSXF9DT1VOVEVSXF9MSVRUTEVcX0VORElBTikgZW5kaWFuLgogCiBUaGlzIGZ1bmN0aW9uIChhbmQgdGhlIHdheSBpdCdzIGNhbGxlZCkgZGlmZmVycyBmcm9tIHRoZSBvdGhlciB0d28gc2luY2UgY3RyXF9lbmNyeXB0KCkgYWxsb3dzIGFueSBzaXplIGlucHV0IHBsYWludGV4dC4gIFRoZSBhY2NlbGVyYXRvciB3aWxsIG9ubHkgYmUKQEAgLTQzNzksMjEgKzU2OTcsNjQgQEAKICAgIFxpdGVtIFRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBpbnB1dCB0byBwcm9jZXNzIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYmxvY2sgc2l6ZS4KIFxlbmR7ZW51bWVyYXRlfQogCi1UaGUgYGBDVFIgcGFkJycgaXMgZW1wdHkgd2hlbiBhIG11bHRpcGxlIChpbmNsdWRpbmcgemVybykgYmxvY2tzIG9mIHRleHQgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIFRoYXQgaXMsIGlmIHlvdSBwYXNzIGluIHNldmVuIGJ5dGVzIHRvIEFFUy0tQ1RSIG1vZGUgeW91IHdvdWxkIGhhdmUgdG8gCitUaGUgXHRleHRpdHtDVFIgcGFkfSBpcyBlbXB0eSB3aGVuIGEgbXVsdGlwbGUgKGluY2x1ZGluZyB6ZXJvKSBibG9ja3Mgb2YgdGV4dCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgVGhhdCBpcywgaWYgeW91IHBhc3MgaW4gc2V2ZW4gYnl0ZXMgdG8gQUVTLS1DVFIgbW9kZSB5b3Ugd291bGQgaGF2ZSB0byAKIHBhc3MgaW4gYSBtaW5pbXVtIG9mIG5pbmUgZXh0cmEgYnl0ZXMgYmVmb3JlIHRoZSBhY2NlbGVyYXRvciBjb3VsZCBiZSBjYWxsZWQuICBUaGUgQ1RSIGFjY2VsZXJhdG9yIG11c3QgaW5jcmVtZW50IHRoZSBjb3VudGVyIChhbmQgc3RvcmUgaXQgYmFjayBpbnRvIHRoZSAKIGJ1ZmZlciBwcm92aWRlZCkgYmVmb3JlIGVuY3J5cHRpbmcgaXQgdG8gY3JlYXRlIHRoZSBwYWQuICAKIAogVGhlIGFjY2VsZXJhdG9yIHdpbGwgb25seSBiZSB1c2VkIHRvIGVuY3J5cHQgd2hvbGUgYmxvY2tzLiAgUGFydGlhbCBibG9ja3MgYXJlIGFsd2F5cyBoYW5kbGVkIGluIHNvZnR3YXJlLgogCitcc3Vic3Vic2VjdGlvbntBY2NlbGVyYXRlZCBMUld9CitUaGVzZSBmdW5jdGlvbnMgYXJlIG1lYW50IGZvciBhY2NlbGVyYXRlZCBMUlcuICBUaGV5IHByb2Nlc3MgYmxvY2tzIG9mIGlucHV0IGluIGxlbmd0aHMgb2YgbXVsdGlwbGVzIG9mIDE2IG9jdGV0cy4gIFRoZXkgbXVzdCBhY2NlcHQgdGhlIFx0ZXh0aXR7SVZ9IGFuZCBcdGV4dGl0e3R3ZWFrfQorc3RhdGUgdmFyaWFibGVzIGFuZCB1cGRhdGVkIHRoZW0gcHJpb3IgdG8gcmV0dXJuaW5nLiAgTm90ZSB0aGF0IHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIFx0ZXh0YmZ7TFJXXF9UQUJMRVN9IGluIFx0ZXh0aXR7dG9tY3J5cHRcX2N1c3RvbS5ofSBpZiB5b3UgaW50ZW5kCit0byB1c2UgYWNjZWxlcmF0b3JzIGZvciBMUlcuCisKK1doaWxlIGJvdGggZW5jcnlwdCBhbmQgZGVjcnlwdCBhY2NlbGVyYXRvcnMgYXJlIG5vdCByZXF1aXJlZCBpdCBpcyBzdWdnZXN0ZWQgYXMgaXQgbWFrZXMgbHJ3XF9zZXRpdigpIG1vcmUgZWZmaWNpZW50LgorCitOb3RlIHRoYXQgY2FsbGluZyBscndcX2RvbmUoKSB3aWxsIG9ubHkgaW52b2tlIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3JbXS5kb25lKCkgZnVuY3Rpb24gb24gdGhlIFx0ZXh0aXR7c3ltbWV0cmljXF9rZXl9IHBhcmFtZXRlciBvZiB0aGUgTFJXIHN0YXRlLiAgVGhhdCBtZWFucyAKK2lmIHlvdXIgZGV2aWNlIHJlcXVpcmVzIGFueSAoTFJXIHNwZWNpZmljKSByZXNvdXJjZXMgeW91IHNob3VsZCBmcmVlIHRoZW0gaW4geW91ciBjaXBoZXJzKCkgZG9uZSBmdW5jdGlvbi4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gdGhpbmsgb2YgaXQgaXMgdG8gd3JpdGUKK3RoZSBwbHVnaW4gc29sZWx5IHRvIGRvIExSVyB3aXRoIHRoZSBjaXBoZXIuICBUaGF0IHdheSBjaXBoZXJcX2Rlc2NyaXB0b3JbXS5zZXR1cCgpIG1lYW5zIHRvIGluaXQgTFJXIHJlc291cmNlcyBhbmQgY2lwaGVyXF9kZXNjcmlwdG9yW10uZG9uZSgpIG1lYW5zIHRvCitmcmVlIHRoZW0uCisKIFxzdWJzdWJzZWN0aW9ue0FjY2VsZXJhdGVkIENDTX0KLVRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGFjY2VsZXJhdGVkIENDTSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICBJdCBwcm9jZXNzZXMgdGhlIGVudGlyZSBwYWNrZXQgaW4gb25lIGNhbGwuICBOb3RlIHRoYXQgdGhlIHNldHVwKCkgZnVuY3Rpb24gd2lsbCBub3QKLWJlIGNhbGxlZCBwcmlvciB0byB0aGlzLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGhhbmRsZSBzY2hlZHVsaW5nIHRoZSBrZXkgcHJvdmlkZWQgb24gaXRzIG93bi4KK1RoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGFjY2VsZXJhdGVkIENDTSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICBJdCBwcm9jZXNzZXMgdGhlIGVudGlyZSBwYWNrZXQgaW4gb25lIGNhbGwuICBZb3UgY2FuIG9wdGltaXplIHRoZSB3b3JrIGZsb3cgc29tZXdoYXQKK2J5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gY2FsbCB0aGUgc2V0dXAoKSBmdW5jdGlvbiBmaXJzdCB0byBzY2hlZHVsZSB0aGUga2V5IGlmIHlvdXIgYWNjZWxlcmF0b3IgY2Fubm90IGRvIHRoZSBrZXkgc2NoZWR1bGUgb24gdGhlIGZseSAoZm9yIGluc3RhbmNlKS4gIFRoaXMgCitmdW5jdGlvbiBNVVNUIHN1cHBvcnQgYm90aCBrZXkgcGFzc2luZyBtZXRob2RzLgorCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3RhYnVsYXJ9e3xyfHJ8bHx9CitcaGxpbmUgXHRleHRiZntrZXl9ICYgXHRleHRiZnt1c2tleX0gJiBcdGV4dGJme1NvdXJjZSBvZiBrZXl9IFxcCitcaGxpbmUgTlVMTCAgICAgICAgICYgTlVMTCAgICAgICAgICAgJiBFcnJvciwgbm90IHN1cHBvcnRlZCBcXAorXGhsaW5lIG5vbi1OVUxMICAgICAmIE5VTEwgICAgICAgICAgICYgVXNlIGtleSwgZG8gYSBrZXkgc2NoZWR1bGUgXFwKK1xobGluZSBOVUxMICAgICAgICAgJiBub24tTlVMTCAgICAgICAmIFVzZSB1c2tleSwga2V5IHNjaGVkdWxlIG5vdCByZXF1aXJlZCBcXAorXGhsaW5lIG5vbi1OVUxMICAgICAmIG5vbi1OVUxMICAgICAgICYgVXNlIHVza2V5LCBrZXkgc2NoZWR1bGUgbm90IHJlcXVpcmVkIFxcCitcaGxpbmUKK1xlbmR7dGFidWxhcn0KK1xlbmR7c21hbGx9CitcZW5ke2NlbnRlcn0KKworXGluZGV4e2NjbVxfbWVtb3J5KCl9IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2FsbHMgY2NtXF9tZW1vcnkoKS4KIAogXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgR0NNfQorXGluZGV4e2djbVxfbWVtb3J5KCl9CiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBhY2NlbGVyYXRlZCBHQ00gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiAgSXQgcHJvY2Vzc2VzIHRoZSBlbnRpcmUgcGFja2V0IGluIG9uZSBjYWxsLiAgTm90ZSB0aGF0IHRoZSBzZXR1cCgpIGZ1bmN0aW9uIHdpbGwgbm90Ci1iZSBjYWxsZWQgcHJpb3IgdG8gdGhpcy4gIFRoaXMgZnVuY3Rpb24gbXVzdCBoYW5kbGUgc2NoZWR1bGluZyB0aGUga2V5IHByb3ZpZGVkIG9uIGl0cyBvd24uCitiZSBjYWxsZWQgcHJpb3IgdG8gdGhpcy4gIFRoaXMgZnVuY3Rpb24gbXVzdCBoYW5kbGUgc2NoZWR1bGluZyB0aGUga2V5IHByb3ZpZGVkIG9uIGl0cyBvd24uICBJdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjYWxscyBnY21cX21lbW9yeSgpLgogCi1cc2VjdGlvbntPbmUtLVdheSBIYXNoZXN9Citcc3Vic3Vic2VjdGlvbntBY2NlbGVyYXRlZCBPTUFDfQorXGluZGV4e29tYWNcX21lbW9yeSgpfQorVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBwZXJmb3JtIGFuIG9wdGltaXplZCBPTUFDMSAoQ01BQykgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGNvbXB1dGF0aW9uIHdoZW4gdGhlIHVzZXIgY2FsbHMgb21hY1xfbWVtb3J5KCkuICAKKworXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgWENCQy1NQUN9CitcaW5kZXh7eGNiY1xfbWVtb3J5KCl9CitUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIHBlcmZvcm0gYW4gb3B0aW1pemVkIFhDQkMtTUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSBjb21wdXRhdGlvbiB3aGVuIHRoZSB1c2VyIGNhbGxzIHhjYmNcX21lbW9yeSgpLiAgCisKK1xzdWJzdWJzZWN0aW9ue0FjY2VsZXJhdGVkIEY5fQorXGluZGV4e2Y5XF9tZW1vcnkoKX0KK1RoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gcGVyZm9ybSBhbiBvcHRpbWl6ZWQgRjkgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGNvbXB1dGF0aW9uIHdoZW4gdGhlIHVzZXIgY2FsbHMgZjlcX21lbW9yeSgpLiAgTGlrZSBmOVxfbWVtb3J5KCksIGl0IHJlcXVpcmVzCit0aGUgY2FsbGVyIHRvIHBlcmZvcm0gYW55IDNHUFAgcmVsYXRlZCBwYWRkaW5nIGJlZm9yZSBjYWxsaW5nIGluIG9yZGVyIHRvIGVuc3VyZSBwcm9wZXIgY29tcGxpYW5jZSB3aXRoIEY5LgorCisKK1xteXNlY3Rpb257T25lLS1XYXkgSGFzaGVzfQogVGhlIGhhc2ggZnVuY3Rpb25zIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsdGNcX2hhc2hcX2Rlc2NyaXB0b3Igc3RydWN0dXJlLgogCiBcYmVnaW57c21hbGx9CkBAIC00NDAxLDM4ICs1NzYyLDYyIEBACiBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciB7CiAgICAgLyoqIG5hbWUgb2YgaGFzaCAqLwogICAgIGNoYXIgKm5hbWU7CisKICAgICAvKiogaW50ZXJuYWwgSUQgKi8KICAgICB1bnNpZ25lZCBjaGFyIElEOworCiAgICAgLyoqIFNpemUgb2YgZGlnZXN0IGluIG9jdGV0cyAqLwogICAgIHVuc2lnbmVkIGxvbmcgaGFzaHNpemU7CisKICAgICAvKiogSW5wdXQgYmxvY2sgc2l6ZSBpbiBvY3RldHMgKi8KICAgICB1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZTsKKwogICAgIC8qKiBBU04uMSBPSUQgKi8KICAgICB1bnNpZ25lZCBsb25nIE9JRFsxNl07CisKICAgICAvKiogTGVuZ3RoIG9mIERFUiBlbmNvZGluZyAqLwogICAgIHVuc2lnbmVkIGxvbmcgT0lEbGVuOworCiAgICAgLyoqIEluaXQgYSBoYXNoIHN0YXRlCiAgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHRvIGluaXRpYWxpemUKICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgICovCiAgICAgaW50ICgqaW5pdCkoaGFzaF9zdGF0ZSAqaGFzaCk7CisKICAgICAvKiogUHJvY2VzcyBhIGJsb2NrIG9mIGRhdGEgCiAgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHN0YXRlCiAgICAgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKICAgICAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQogICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAgKi8KLSAgICBpbnQgKCpwcm9jZXNzKShoYXNoX3N0YXRlICpoYXNoLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7CisgICAgaW50ICgqcHJvY2VzcykoICAgICAgICAgaGFzaF9zdGF0ZSAqaGFzaCwgCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKKwogICAgIC8qKiBQcm9kdWNlIHRoZSBkaWdlc3QgYW5kIHN0b3JlIGl0CiAgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHN0YXRlCiAgICAgICBAcGFyYW0gb3V0ICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgZGlnZXN0CiAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICAqLwotICAgIGludCAoKmRvbmUpKGhhc2hfc3RhdGUgKmhhc2gsIHVuc2lnbmVkIGNoYXIgKm91dCk7CisgICAgaW50ICgqZG9uZSkoICAgaGFzaF9zdGF0ZSAqaGFzaCwgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0KTsKKwogICAgIC8qKiBTZWxmLXRlc3QKLSAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkCisgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIAorICAgICAgICAgICAgICBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKICAgICAqLwogICAgIGludCAoKnRlc3QpKHZvaWQpOworCisgICAgLyogYWNjZWxlcmF0ZWQgaG1hYyBjYWxsYmFjazogaWYgeW91IG5lZWQgdG8tZG8gCisgICAgICAgbXVsdGlwbGUgcGFja2V0cyBqdXN0IHVzZSB0aGUgZ2VuZXJpYyBobWFjX21lbW9yeSAKKyAgICAgICBhbmQgcHJvdmlkZSBhIGhhc2ggY2FsbGJhY2sgCisgICAgKi8KKyAgICBpbnQgICgqaG1hY19ibG9jaykoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiB9OwogXGVuZHt2ZXJiYXRpbX0KIFxlbmR7c21hbGx9CkBAIC00NDQ0LDExICs1ODI5LDExIEBACiBUaGlzIGlzIHRoZSBpbnRlcm5hbCBJRCBieXRlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIGhhc2ggZnJvbSBvdGhlciBoYXNoZXMuCiAKIFxzdWJzZWN0aW9ue0RpZ2VzdCBTaXplfQotVGhlIGBgaGFzaHNpemUnJyB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGluIG9jdGV0cy4KK1RoZSBcdGV4dGl0e2hhc2hzaXplfSB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGluIG9jdGV0cy4KIAogXHN1YnNlY3Rpb257QmxvY2sgU2l6ZX0KLVRoZSBgYmxvY2tzaXplJycgdmFyaWFibGUgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgaW5wdXQgKGluIG9jdGV0cykgdGhhdCB0aGUgaGFzaCBwcm9jZXNzZXMgaW4gYSBnaXZlbgotaW52b2thdGlvbi4KK1RoZSBcdGV4dGl0e2Jsb2Nrc2l6ZX0gdmFyaWFibGUgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgaW5wdXQgKGluIG9jdGV0cykgdGhhdCB0aGUgaGFzaCBwcm9jZXNzZXMgaW4gYSBnaXZlbgoraW52b2NhdGlvbi4KIAogXHN1YnNlY3Rpb257T0lEIElkZW50aWZpZXJ9CiBUaGlzIGlzIHRoZSB1bml2ZXJzYWwgQVNOLjEgT2JqZWN0IElkZW50aWZpZXIgZm9yIHRoZSBoYXNoLgpAQCAtNDQ2NCw5ICs1ODQ5LDEzIEBACiBUaGUgZG9uZSBmdW5jdGlvbiB0ZXJtaW5hdGVzIHRoZSBoYXNoIGFuZCByZXR1cm5zIHRoZSBtZXNzYWdlIGRpZ2VzdC4KIAogXHN1YnNlY3Rpb257QWNjZWxlcmF0aW9ufQotQSBjb21wYXRpYmxlIGFjY2VsZXJhdG9yIG11c3QgYWxsb3cgcHJvY2Vzc2luZyBkYXRhIGluIGFueSBncmFudWxhcml0eSB3aGljaCBtYXkgcmVxdWlyZSBpbnRlcm5hbCBwYWRkaW5nIG9uIHRoZSBkcml2ZXIgc2lkZS4gIAorQSBjb21wYXRpYmxlIGFjY2VsZXJhdG9yIG11c3QgYWxsb3cgcHJvY2Vzc2luZyBkYXRhIGluIGFueSBncmFudWxhcml0eSB3aGljaCBtYXkgcmVxdWlyZSBpbnRlcm5hbCBwYWRkaW5nIG9uIHRoZSBkcml2ZXIgc2lkZS4KIAotXHNlY3Rpb257UHNldWRvLS1SYW5kb20gTnVtYmVyIEdlbmVyYXRvcnN9Citcc3Vic2VjdGlvbntITUFDIEFjY2VsZXJhdGlvbn0KK1RoZSBobWFjXF9ibG9jaygpIGNhbGxiYWNrIGlzIG1lYW50IGZvciBzaW5nbGUtLXNob3Qgb3B0aW1pemVkIEhNQUMgaW1wbGVtZW50YXRpb25zLiAgSXQgaXMgY2FsbGVkIGRpcmVjdGx5IGJ5IGhtYWNcX21lbW9yeSgpIGlmIHByZXNlbnQuICBJZiB5b3UgbmVlZAordG8gYmUgYWJsZSB0byBwcm9jZXNzIG11bHRpcGxlIGJsb2NrcyBwZXIgTUFDIHRoZW4geW91IHdpbGwgaGF2ZSB0byBzaW1wbHkgcHJvdmlkZSBhIHByb2Nlc3MoKSBjYWxsYmFjayBhbmQgdXNlIGhtYWNcX21lbW9yeSgpIGFzIHByb3ZpZGVkIGluIExpYlRvbUNyeXB0LgorCitcbXlzZWN0aW9ue1BzZXVkby0tUmFuZG9tIE51bWJlciBHZW5lcmF0b3JzfQogVGhlIHBzZXVkby0tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGx0Y1xfcHJuZ1xfZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAKIFxiZWdpbntzbWFsbH0KQEAgLTQ0NzQsNTMgKzU4NjMsNzEgQEAKIHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yIHsKICAgICAvKiogTmFtZSBvZiB0aGUgUFJORyAqLwogICAgIGNoYXIgKm5hbWU7CisKICAgICAvKiogc2l6ZSBpbiBieXRlcyBvZiBleHBvcnRlZCBzdGF0ZSAqLwogICAgIGludCAgZXhwb3J0X3NpemU7CisKICAgICAvKiogU3RhcnQgYSBQUk5HIHN0YXRlCiAgICAgICAgIEBwYXJhbSBwcm5nICAgW291dF0gVGhlIHN0YXRlIHRvIGluaXRpYWxpemUKICAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAgKi8KICAgICBpbnQgKCpzdGFydCkocHJuZ19zdGF0ZSAqcHJuZyk7CisKICAgICAvKiogQWRkIGVudHJvcHkgdG8gdGhlIFBSTkcKICAgICAgICAgQHBhcmFtIGluICAgICAgICAgVGhlIGVudHJvcHkKLSAgICAgICAgQHBhcmFtIGlubGVuICAgICAgTGVuZ3RoIG9mIHRoZSBlbnRyb3B5IChvY3RldHMpXAorICAgICAgICBAcGFyYW0gaW5sZW4gICAgICBMZW5ndGggb2YgdGhlIGVudHJvcHkgKG9jdGV0cykKICAgICAgICAgQHBhcmFtIHBybmcgICAgICAgVGhlIFBSTkcgc3RhdGUKICAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAgKi8KLSAgICBpbnQgKCphZGRfZW50cm9weSkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpOworICAgIGludCAoKmFkZF9lbnRyb3B5KShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZyk7CisKICAgICAvKiogUmVhZHkgYSBQUk5HIHN0YXRlIHRvIHJlYWQgZnJvbQogICAgICAgICBAcGFyYW0gcHJuZyAgICAgICBUaGUgUFJORyBzdGF0ZSB0byByZWFkeQogICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICAqLwogICAgIGludCAoKnJlYWR5KShwcm5nX3N0YXRlICpwcm5nKTsKKwogICAgIC8qKiBSZWFkIGZyb20gdGhlIFBSTkcKICAgICAgICAgQHBhcmFtIG91dCAgICAgW291dF0gV2hlcmUgdG8gc3RvcmUgdGhlIGRhdGEKICAgICAgICAgQHBhcmFtIG91dGxlbiAgTGVuZ3RoIG9mIGRhdGEgZGVzaXJlZCAob2N0ZXRzKQogICAgICAgICBAcGFyYW0gcHJuZyAgICBUaGUgUFJORyBzdGF0ZSB0byByZWFkIGZyb20KICAgICAgICAgQHJldHVybiBOdW1iZXIgb2Ygb2N0ZXRzIHJlYWQKICAgICAqLwotICAgIHVuc2lnbmVkIGxvbmcgKCpyZWFkKSh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKKyAgICB1bnNpZ25lZCBsb25nICgqcmVhZCkodW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZyk7CisKICAgICAvKiogVGVybWluYXRlIGEgUFJORyBzdGF0ZQogICAgICAgICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHN0YXRlIHRvIHRlcm1pbmF0ZQogICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICAqLwogICAgIGludCAoKmRvbmUpKHBybmdfc3RhdGUgKnBybmcpOworCiAgICAgLyoqIEV4cG9ydCBhIFBSTkcgc3RhdGUgIAogICAgICAgICBAcGFyYW0gb3V0ICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBzdGF0ZQotICAgICAgICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBQUk5HIHN0YXRlCisgICAgICAgIEBwYXJhbSBvdXRsZW4gIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUKICAgICAgICAgQHBhcmFtIHBybmcgICAgVGhlIFBSTkcgdG8gZXhwb3J0CiAgICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgICovCi0gICAgaW50ICgqcGV4cG9ydCkodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpOworICAgIGludCAoKnBleHBvcnQpKHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nKTsKKwogICAgIC8qKiBJbXBvcnQgYSBQUk5HIHN0YXRlCiAgICAgICAgIEBwYXJhbSBpbiAgICAgIFRoZSBkYXRhIHRvIGltcG9ydAogICAgICAgICBAcGFyYW0gaW5sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGltcG9ydCAob2N0ZXRzKQogICAgICAgICBAcGFyYW0gcHJuZyAgICBUaGUgUFJORyB0byBpbml0aWFsaXplL2ltcG9ydAogICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICAqLwotICAgIGludCAoKnBpbXBvcnQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKKyAgICBpbnQgKCpwaW1wb3J0KShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOworCiAgICAgLyoqIFNlbGYtdGVzdCB0aGUgUFJORwotICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCAKKyAgICAgICAgICAgICAgICBDUllQVF9OT1AgaWYgc2VsZi10ZXN0aW5nIGhhcyBiZWVuIGRpc2FibGVkCiAgICAgKi8KICAgICBpbnQgKCp0ZXN0KSh2b2lkKTsKIH07CkBAIC00NTUxLDEzICs1OTU4LDUzMiBAQAogVGVybWluYXRlIGEgUFJORyBzdGF0ZS4gIFRoZSBiZWhhdmlvdXIgb2YgdGhpcyBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBwYXJ0aWN1bGFyIFBSTkcgdXNlZC4KIAogXHN1YnNlY3Rpb257RXhwb3J0aW5nIGFuZCBJbXBvcnRpbmd9Ci1BbiBleHBvcnRlZCBQUk5HIHN0YXRlIGlzIGRhdGEgdGhhdCB0aGUgUFJORyBjYW4gbGF0ZXIgaW1wb3J0IHRvIHJlc3VtZSBhY3Rpdml0eS4gIFRoZXkncmUgbm90IG1lYW50IHRvIHJlc3VtZSBgYHRoZSBzYW1lIHNlc3Npb24nJworQW4gZXhwb3J0ZWQgUFJORyBzdGF0ZSBpcyBkYXRhIHRoYXQgdGhlIFBSTkcgY2FuIGxhdGVyIGltcG9ydCB0byByZXN1bWUgYWN0aXZpdHkuICBUaGV5J3JlIG5vdCBtZWFudCB0byByZXN1bWUgXHRleHRpdHt0aGUgc2FtZSBzZXNzaW9ufQogYnV0IHNob3VsZCBhdCBsZWFzdCBtYWludGFpbiB0aGUgc2FtZSBsZXZlbCBvZiBzdGF0ZSBlbnRyb3B5LgogCitcbXlzZWN0aW9ue0JpZ051bSBNYXRoIERlc2NyaXB0b3JzfQorVGhlIGxpYnJhcnkgYWxzbyBtYWtlcyB1c2Ugb2YgdGhlIG1hdGggZGVzY3JpcHRvcnMgdG8gYWNjZXNzIG1hdGggZnVuY3Rpb25zLiAgV2hpbGUgYmlnbnVtIG1hdGggbGlicmFyaWVzIHVzdWFsbHkgZGlmZmVyIGluIGltcGxlbWVudGF0aW9uCitpdCBoYXNuJ3QgcHJvdmVuIGhhcmQgdG8gd3JpdGUgXHRleHRpdHtnbHVlfSB0byB1c2UgbWF0aCBsaWJyYXJpZXMgc28gZmFyLiAgVGhlIGJhc2ljIGRlc2NyaXB0b3IgbG9va3MgbGlrZS4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorLyoqIG1hdGggZGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIE5hbWUgb2YgdGhlIG1hdGggcHJvdmlkZXIgKi8KKyAgIGNoYXIgKm5hbWU7CisKKyAgIC8qKiBCaXRzIHBlciBkaWdpdCwgYW1vdW50IG9mIGJpdHMgbXVzdCBmaXQgaW4gYW4gdW5zaWduZWQgbG9uZyAqLworICAgaW50ICBiaXRzX3Blcl9kaWdpdDsKKworLyogLS0tLSBpbml0L2RlaW5pdCBmdW5jdGlvbnMgLS0tLSAqLworCisgICAvKiogaW5pdGlhbGl6ZSBhIGJpZ251bQorICAgICBAcGFyYW0gICBhICAgICBUaGUgbnVtYmVyIHRvIGluaXRpYWxpemUKKyAgICAgQHJldHVybiAgQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmluaXQpKHZvaWQgKiphKTsKKyAgIAorICAgLyoqIGluaXQgY29weSAKKyAgICAgQHBhcmFtICBkc3QgICAgVGhlIG51bWJlciB0byBpbml0aWFsaXplIGFuZCB3cml0ZSB0bworICAgICBAcGFyYW0gIHNyYyAgICBUaGUgbnVtYmVyIHRvIGNvcHkgZnJvbQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCppbml0X2NvcHkpKHZvaWQgKipkc3QsIHZvaWQgKnNyYyk7CisKKyAgIC8qKiBkZWluaXQgCisgICAgICBAcGFyYW0gICBhICAgIFRoZSBudW1iZXIgdG8gZnJlZQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgdm9pZCAoKmRlaW5pdCkodm9pZCAqYSk7CisKKy8qIC0tLS0gZGF0YSBtb3ZlbWVudCAtLS0tICovCisKKyAgIC8qKiBjb3B5IAorICAgICAgQHBhcmFtICAgc3JjICAgVGhlIG51bWJlciB0byBjb3B5IGZyb20KKyAgICAgIEBwYXJhbSAgIGRzdCAgIFRoZSBudW1iZXIgdG8gd3JpdGUgdG8gCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpjb3B5KSh2b2lkICpzcmMsIHZvaWQgKmRzdCk7CisKKy8qIC0tLS0gdHJpdmlhbCBsb3cgbGV2ZWwgZnVuY3Rpb25zIC0tLS0gKi8KKworICAgLyoqIHNldCBzbWFsbCBjb25zdGFudCAKKyAgICAgIEBwYXJhbSBhICAgIE51bWJlciB0byB3cml0ZSB0bworICAgICAgQHBhcmFtIG4gICAgU291cmNlIHVwdG8gYml0c19wZXJfZGlnaXQgKG1lYW50IGZvciBzbWFsbCBjb25zdGFudHMpIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqc2V0X2ludCkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBuKTsKKworICAgLyoqIGdldCBzbWFsbCBjb25zdGFudCAKKyAgICAgIEBwYXJhbSBhICBTbWFsbCBudW1iZXIgdG8gcmVhZAorICAgICAgQHJldHVybiAgIFRoZSBsb3dlciBiaXRzX3Blcl9kaWdpdCBvZiB0aGUgaW50ZWdlciAodW5zaWduZWQpCisgICAqLworICAgdW5zaWduZWQgbG9uZyAoKmdldF9pbnQpKHZvaWQgKmEpOworCisgICAvKiogZ2V0IGRpZ2l0IG4gCisgICAgIEBwYXJhbSBhICBUaGUgbnVtYmVyIHRvIHJlYWQgZnJvbQorICAgICBAcGFyYW0gbiAgVGhlIG51bWJlciBvZiB0aGUgZGlnaXQgdG8gZmV0Y2gKKyAgICAgQHJldHVybiAgVGhlIGJpdHNfcGVyX2RpZ2l0ICBzaXplZCBuJ3RoIGRpZ2l0IG9mIGEKKyAgICovCisgICB1bnNpZ25lZCBsb25nICgqZ2V0X2RpZ2l0KSh2b2lkICphLCBpbnQgbik7CisKKyAgIC8qKiBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgdGhhdCByZXByZXNlbnQgdGhlIG51bWJlcgorICAgICBAcGFyYW0gYSAgIFRoZSBudW1iZXIgdG8gY291bnQKKyAgICAgQHJldHVybiBUaGUgbnVtYmVyIG9mIGRpZ2l0cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyCisgICAqLworICAgaW50ICgqZ2V0X2RpZ2l0X2NvdW50KSh2b2lkICphKTsKKworICAgLyoqIGNvbXBhcmUgdHdvIGludGVnZXJzCisgICAgIEBwYXJhbSBhICAgVGhlIGxlZnQgc2lkZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHJpZ2h0IHNpZGUgaW50ZWdlcgorICAgICBAcmV0dXJuIExUQ19NUF9MVCBpZiBhIDwgYiwgCisgICAgICAgICAgICAgTFRDX01QX0dUIGlmIGEgPiBiIGFuZCAKKyAgICAgICAgICAgICBMVENfTVBfRVEgb3RoZXJ3aXNlLiAgKHNpZ25lZCBjb21wYXJpc29uKQorICAgKi8KKyAgIGludCAoKmNvbXBhcmUpKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogY29tcGFyZSBhZ2FpbnN0IGludCAKKyAgICAgQHBhcmFtIGEgICBUaGUgbGVmdCBzaWRlIGludGVnZXIKKyAgICAgQHBhcmFtIGIgICBUaGUgcmlnaHQgc2lkZSBpbnRlZ2VyICh1cHRvIGJpdHNfcGVyX2RpZ2l0KQorICAgICBAcmV0dXJuIExUQ19NUF9MVCBpZiBhIDwgYiwgCisgICAgICAgICAgICAgTFRDX01QX0dUIGlmIGEgPiBiIGFuZCAKKyAgICAgICAgICAgICBMVENfTVBfRVEgb3RoZXJ3aXNlLiAgKHNpZ25lZCBjb21wYXJpc29uKQorICAgKi8KKyAgIGludCAoKmNvbXBhcmVfZCkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBuKTsKKworICAgLyoqIENvdW50IHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlcgorICAgICBAcGFyYW0gYSAgIFRoZSBpbnRlZ2VyIHRvIGNvdW50CisgICAgIEByZXR1cm4gVGhlIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlcgorICAgKi8KKyAgIGludCAoKmNvdW50X2JpdHMpKHZvaWQgKiBhKTsKKworICAgLyoqIENvdW50IHRoZSBudW1iZXIgb2YgTFNCIGJpdHMgd2hpY2ggYXJlIHplcm8gCisgICAgIEBwYXJhbSBhICAgVGhlIGludGVnZXIgdG8gY291bnQKKyAgICAgQHJldHVybiBUaGUgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgemVybyBMU0IgYml0cworICAgKi8KKyAgIGludCAoKmNvdW50X2xzYl9iaXRzKSh2b2lkICphKTsKKworICAgLyoqIENvbXB1dGUgYSBwb3dlciBvZiB0d28KKyAgICAgQHBhcmFtIGEgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlIHRoZSBwb3dlciBpbgorICAgICBAcGFyYW0gbiAgVGhlIHBvd2VyIG9mIHR3byB5b3Ugd2FudCB0byBzdG9yZSAoYSA9IDJebikKKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqdHdvZXhwdCkodm9pZCAqYSAsIGludCBuKTsKKworLyogLS0tLSByYWRpeCBjb252ZXJzaW9ucyAtLS0tICovCisgICAKKyAgIC8qKiByZWFkIGFzY2lpIHN0cmluZyAKKyAgICAgQHBhcmFtIGEgICAgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlIGludG8KKyAgICAgQHBhcmFtIHN0ciAgIFRoZSBzdHJpbmcgdG8gcmVhZAorICAgICBAcGFyYW0gcmFkaXggVGhlIHJhZGl4IHRoZSBpbnRlZ2VyIGhhcyBiZWVuIHJlcHJlc2VudGVkIGluICgyLTY0KQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpyZWFkX3JhZGl4KSh2b2lkICphLCBjb25zdCBjaGFyICpzdHIsIGludCByYWRpeCk7CisKKyAgIC8qKiB3cml0ZSBudW1iZXIgdG8gc3RyaW5nCisgICAgIEBwYXJhbSBhICAgICBUaGUgaW50ZWdlciB0byBzdG9yZQorICAgICBAcGFyYW0gc3RyICAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgc3RyaW5nCisgICAgIEBwYXJhbSByYWRpeCBUaGUgcmFkaXggdGhlIGludGVnZXIgaXMgdG8gYmUgcmVwcmVzZW50ZWQgaW4gKDItNjQpCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKndyaXRlX3JhZGl4KSh2b2lkICphLCBjaGFyICpzdHIsIGludCByYWRpeCk7CisKKyAgIC8qKiBnZXQgc2l6ZSBhcyB1bnNpZ25lZCBjaGFyIHN0cmluZyAKKyAgICAgQHBhcmFtIGEgIFRoZSBpbnRlZ2VyIHRvIGdldCB0aGUgc2l6ZQorICAgICBAcmV0dXJuICAgVGhlIGxlbmd0aCBvZiB0aGUgaW50ZWdlciBpbiBvY3RldHMKKyAgICovCisgICB1bnNpZ25lZCBsb25nICgqdW5zaWduZWRfc2l6ZSkodm9pZCAqYSk7CisKKyAgIC8qKiBzdG9yZSBhbiBpbnRlZ2VyIGFzIGFuIGFycmF5IG9mIG9jdGV0cyAKKyAgICAgQHBhcmFtIHNyYyAgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlCisgICAgIEBwYXJhbSBkc3QgICBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBpbnRlZ2VyIGluCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnVuc2lnbmVkX3dyaXRlKSh2b2lkICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCk7CisKKyAgIC8qKiByZWFkIGFuIGFycmF5IG9mIG9jdGV0cyBhbmQgc3RvcmUgYXMgaW50ZWdlcgorICAgICBAcGFyYW0gZHN0ICAgVGhlIGludGVnZXIgdG8gbG9hZAorICAgICBAcGFyYW0gc3JjICAgVGhlIGFycmF5IG9mIG9jdGV0cyAKKyAgICAgQHBhcmFtIGxlbiAgIFRoZSBudW1iZXIgb2Ygb2N0ZXRzIAorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCp1bnNpZ25lZF9yZWFkKSggICAgICAgICB2b2lkICpkc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbik7CisKKy8qIC0tLS0gYmFzaWMgbWF0aCAtLS0tICovCisKKyAgIC8qKiBhZGQgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKyBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphZGQpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogYWRkIHR3byBpbnRlZ2VycyAKKyAgICAgQHBhcmFtIGEgICBUaGUgZmlyc3Qgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGIgICBUaGUgc2Vjb25kIHNvdXJjZSBpbnRlZ2VyIAorICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKyBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphZGRpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogc3VidHJhY3QgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgLSBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzdWIpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogc3VidHJhY3QgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgCisgICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgLSBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzdWJpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogbXVsdGlwbHkgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgCisgICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKiBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWwpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogbXVsdGlwbHkgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgCisgICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKiBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWxpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogU3F1YXJlIGFuIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICAgVGhlIGludGVnZXIgdG8gc3F1YXJlCisgICAgIEBwYXJhbSBiICAgIFRoZSBkZXN0aW5hdGlvbgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzcXIpKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogRGl2aWRlIGFuIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICAgVGhlIGRpdmlkZW5kCisgICAgIEBwYXJhbSBiICAgIFRoZSBkaXZpc29yCisgICAgIEBwYXJhbSBjICAgIFRoZSBxdW90aWVudCAoY2FuIGJlIE5VTEwgdG8gc2lnbmlmeSBkb24ndCBjYXJlKQorICAgICBAcGFyYW0gZCAgICBUaGUgcmVtYWluZGVyIChjYW4gYmUgTlVMTCB0byBzaWduaWZ5IGRvbid0IGNhcmUpCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmRpdikodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCk7CisKKyAgIC8qKiBkaXZpZGUgYnkgdHdvIAorICAgICAgQHBhcmFtICBhICAgVGhlIGludGVnZXIgdG8gZGl2aWRlIChzaGlmdCByaWdodCkKKyAgICAgIEBwYXJhbSAgYiAgIFRoZSBkZXN0aW5hdGlvbiAKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmRpdl8yKSh2b2lkICphLCB2b2lkICpiKTsKKworICAgLyoqIEdldCByZW1haW5kZXIgKHNtYWxsIHZhbHVlKQorICAgICAgQHBhcmFtICBhICAgIFRoZSBpbnRlZ2VyIHRvIHJlZHVjZQorICAgICAgQHBhcmFtICBiICAgIFRoZSBtb2R1bHVzICh1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgIEBwYXJhbSAgYyAgICBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSByZXNpZHVlCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptb2RpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgKmMpOworCisgICAvKiogZ2NkIAorICAgICAgQHBhcmFtICBhICAgICBUaGUgZmlyc3QgaW50ZWdlcgorICAgICAgQHBhcmFtICBiICAgICBUaGUgc2Vjb25kIGludGVnZXIKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIGRlc3RpbmF0aW9uIGZvciAoYSwgYikKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmdjZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBsY20gCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSBmaXJzdCBpbnRlZ2VyCisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBzZWNvbmQgaW50ZWdlcgorICAgICAgQHBhcmFtICBjICAgICBUaGUgZGVzdGluYXRpb24gZm9yIFthLCBiXQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbGNtKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKTsKKworICAgLyoqIE1vZHVsYXIgbXVsdGlwbGljYXRpb24KKyAgICAgIEBwYXJhbSAgYSAgICAgVGhlIGZpcnN0IHNvdXJjZQorICAgICAgQHBhcmFtICBiICAgICBUaGUgc2Vjb25kIHNvdXJjZSAKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIG1vZHVsdXMKKyAgICAgIEBwYXJhbSAgZCAgICAgVGhlIGRlc3RpbmF0aW9uIChhKmIgbW9kIGMpCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWxtb2QpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpOworCisgICAvKiogTW9kdWxhciBzcXVhcmluZworICAgICAgQHBhcmFtICBhICAgICBUaGUgZmlyc3Qgc291cmNlCisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBtb2R1bHVzCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBkZXN0aW5hdGlvbiAoYSphIG1vZCBiKQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqc3FybW9kKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKTsKKworICAgLyoqIE1vZHVsYXIgaW52ZXJzaW9uCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSB2YWx1ZSB0byBpbnZlcnQKKyAgICAgIEBwYXJhbSAgYiAgICAgVGhlIG1vZHVsdXMgCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBkZXN0aW5hdGlvbiAoMS9hIG1vZCBiKQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqaW52bW9kKSh2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKKworLyogLS0tLSByZWR1Y3Rpb24gLS0tLSAqLworCisgICAvKiogc2V0dXAgTW9udGdvbWVyeQorICAgICAgIEBwYXJhbSBhICBUaGUgbW9kdWx1cyAKKyAgICAgICBAcGFyYW0gYiAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcmVkdWN0aW9uIGRpZ2l0IAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm1vbnRnb21lcnlfc2V0dXApKHZvaWQgKmEsIHZvaWQgKipiKTsKKworICAgLyoqIGdldCBub3JtYWxpemF0aW9uIHZhbHVlIAorICAgICAgIEBwYXJhbSBhICAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgbm9ybWFsaXphdGlvbiB2YWx1ZQorICAgICAgIEBwYXJhbSBiICAgVGhlIG1vZHVsdXMKKyAgICAgICBAcmV0dXJuICBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKSh2b2lkICphLCB2b2lkICpiKTsKKworICAgLyoqIHJlZHVjZSBhIG51bWJlcgorICAgICAgIEBwYXJhbSBhICAgVGhlIG51bWJlciBbYW5kIGRlc3RdIHRvIHJlZHVjZQorICAgICAgIEBwYXJhbSBiICAgVGhlIG1vZHVsdXMKKyAgICAgICBAcGFyYW0gYyAgIFRoZSB2YWx1ZSAiYiIgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptb250Z29tZXJ5X3JlZHVjZSkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBjbGVhbiB1cCAgKGZyZWVzIG1lbW9yeSkKKyAgICAgICBAcGFyYW0gYSAgIFRoZSB2YWx1ZSAiYiIgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovICAgICAgCisgICB2b2lkICgqbW9udGdvbWVyeV9kZWluaXQpKHZvaWQgKmEpOworCisvKiAtLS0tIGV4cG9uZW50aWF0aW9uIC0tLS0gKi8KKworICAgLyoqIE1vZHVsYXIgZXhwb25lbnRpYXRpb24KKyAgICAgICBAcGFyYW0gYSAgICBUaGUgYmFzZSBpbnRlZ2VyCisgICAgICAgQHBhcmFtIGIgICAgVGhlIHBvd2VyIChjYW4gYmUgbmVnYXRpdmUpIGludGVnZXIKKyAgICAgICBAcGFyYW0gYyAgICBUaGUgbW9kdWx1cyBpbnRlZ2VyCisgICAgICAgQHBhcmFtIGQgICAgVGhlIGRlc3RpbmF0aW9uCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZXhwdG1vZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCk7CisKKyAgIC8qKiBQcmltYWxpdHkgdGVzdGluZworICAgICAgIEBwYXJhbSBhICAgICBUaGUgaW50ZWdlciB0byB0ZXN0CisgICAgICAgQHBhcmFtIGIgICAgIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVzdWx0IChGUF9ZRVMgaWYgcHJpbWUpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqaXNwcmltZSkodm9pZCAqYSwgaW50ICpiKTsKKworLyogLS0tLSAgKG9wdGlvbmFsKSBlY2MgcG9pbnQgbWF0aCAtLS0tICovCisKKyAgIC8qKiBFQ0MgR0YocCkgcG9pbnQgbXVsdGlwbGljYXRpb24gKGZyb20gdGhlIE5JU1QgY3VydmVzKQorICAgICAgIEBwYXJhbSBrICAgVGhlIGludGVnZXIgdG8gbXVsdGlwbHkgdGhlIHBvaW50IGJ5CisgICAgICAgQHBhcmFtIEcgICBUaGUgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICAgICBAcGFyYW0gUiAgIFRoZSBkZXN0aW5hdGlvbiBmb3Iga0cgIAorICAgICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBmb3IgdGhlIGZpZWxkCisgICAgICAgQHBhcmFtIG1hcCBCb29sZWFuIGluZGljYXRlZCB3aGV0aGVyIHRvIG1hcCBiYWNrIHRvIGFmZmluZSBvciBub3QgCisgICAgICAgICAgICAgICAgICAoY2FuIGJlIGlnbm9yZWQgaWYgeW91IHdvcmsgaW4gYWZmaW5lIG9ubHkpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZWNjX3B0bXVsKSggICAgIHZvaWQgKmssIAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkcsIAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKlIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1vZHVsdXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG1hcCk7CisKKyAgIC8qKiBFQ0MgR0YocCkgcG9pbnQgYWRkaXRpb24gCisgICAgICAgQHBhcmFtIFAgICAgVGhlIGZpcnN0IHBvaW50CisgICAgICAgQHBhcmFtIFEgICAgVGhlIHNlY29uZCBwb2ludAorICAgICAgIEBwYXJhbSBSICAgIFRoZSBkZXN0aW5hdGlvbiBvZiBQICsgUQorICAgICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cworICAgICAgIEBwYXJhbSBtcCAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCplY2NfcHRhZGQpKGVjY19wb2ludCAqUCwgCisgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqUSwgCisgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbW9kdWx1cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbXApOworCisgICAvKiogRUNDIEdGKHApIHBvaW50IGRvdWJsZSAKKyAgICAgICBAcGFyYW0gUCAgICBUaGUgZmlyc3QgcG9pbnQKKyAgICAgICBAcGFyYW0gUiAgICBUaGUgZGVzdGluYXRpb24gb2YgMlAKKyAgICAgICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMKKyAgICAgICBAcGFyYW0gbXAgICBUaGUgImIiIHZhbHVlIGZyb20gbW9udGdvbWVyeV9zZXR1cCgpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZWNjX3B0ZGJsKShlY2NfcG9pbnQgKlAsIAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKlIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1vZHVsdXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1wKTsKKworICAgLyoqIEVDQyBtYXBwaW5nIGZyb20gcHJvamVjdGl2ZSB0byBhZmZpbmUsIAorICAgICAgIGN1cnJlbnRseSB1c2VzICh4LHkseikgPT4gKHgvel4yLCB5L3peMywgMSkKKyAgICAgICBAcGFyYW0gUCAgICAgVGhlIHBvaW50IHRvIG1hcAorICAgICAgIEBwYXJhbSBtb2R1bHVzIFRoZSBtb2R1bHVzCisgICAgICAgQHBhcmFtIG1wICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICAgICBAcmVtYXJrIFRoZSBtYXBwaW5nIGNhbiBiZSBkaWZmZXJlbnQgYnV0IGtlZXAgaW4gbWluZCBhIAorICAgICAgICAgICAgICAgZWNjX3BvaW50IG9ubHkgaGFzIHRocmVlIGludGVnZXJzICh4LHkseikgc28gaWYgCisgICAgICAgICAgICAgICB5b3UgdXNlIGEgZGlmZmVyZW50IG1hcHBpbmcgeW91IGhhdmUgdG8gbWFrZSBpdCBmaXQuCisgICAqLworICAgaW50ICgqZWNjX21hcCkoZWNjX3BvaW50ICpQLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCk7CisKKyAgIC8qKiBDb21wdXRlcyBrQSpBICsga0IqQiA9IEMgdXNpbmcgU2hhbWlyJ3MgVHJpY2sKKyAgICAgICBAcGFyYW0gQSAgICAgICAgRmlyc3QgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICAgICBAcGFyYW0ga0EgICAgICAgV2hhdCB0byBtdWx0aXBsZSBBIGJ5CisgICAgICAgQHBhcmFtIEIgICAgICAgIFNlY29uZCBwb2ludCB0byBtdWx0aXBseQorICAgICAgIEBwYXJhbSBrQiAgICAgICBXaGF0IHRvIG11bHRpcGxlIEIgYnkKKyAgICAgICBAcGFyYW0gQyAgICAgICAgW291dF0gRGVzdGluYXRpb24gcG9pbnQgKGNhbiBvdmVybGFwIHdpdGggQSBvciBCKQorICAgICAgIEBwYXJhbSBtb2R1bHVzICBNb2R1bHVzIGZvciBjdXJ2ZSAKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovIAorICAgaW50ICgqZWNjX211bDJhZGQpKGVjY19wb2ludCAqQSwgdm9pZCAqa0EsCisgICAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpCLCB2b2lkICprQiwKKyAgICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptb2R1bHVzKTsKKworCisvKiAtLS0tIChvcHRpb25hbCkgcnNhIG9wdGltaXplZCBtYXRoIChmb3IgaW50ZXJuYWwgQ1JUKSAtLS0tICovCisKKyAgIC8qKiBSU0EgS2V5IEdlbmVyYXRpb24gCisgICAgICAgQHBhcmFtIHBybmcgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCisgICAgICAgQHBhcmFtIHdwcm5nICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCisgICAgICAgQHBhcmFtIHNpemUgICAgIFRoZSBzaXplIG9mIHRoZSBrZXkgaW4gb2N0ZXRzCisgICAgICAgQHBhcmFtIGUgICAgICAgIFRoZSAiZSIgdmFsdWUgKHB1YmxpYyBrZXkpLiAgCisgICAgICAgICAgICAgICAgICAgICAgIGU9PTY1NTM3IGlzIGEgZ29vZCBjaG9pY2UKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgYSBuZXdseSBjcmVhdGVkIHByaXZhdGUga2V5IHBhaXIKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsIGFsbG9jYXRlZCByYW0gaXMgZnJlZWQKKyAgICAqLworICAgIGludCAoKnJzYV9rZXlnZW4pKHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworCisgICAvKiogUlNBIGV4cG9uZW50aWF0aW9uCisgICAgICBAcGFyYW0gaW4gICAgICAgVGhlIG9jdGV0IGFycmF5IHJlcHJlc2VudGluZyB0aGUgYmFzZQorICAgICAgQHBhcmFtIGlubGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0CisgICAgICBAcGFyYW0gb3V0ICAgICAgVGhlIGRlc3RpbmF0aW9uICh0byBiZSBzdG9yZWQgaW4gYW4gb2N0ZXQgYXJyYXkgZm9ybWF0KQorICAgICAgQHBhcmFtIG91dGxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRoZSByZXN1bHRpbmcgc2l6ZSAKKyAgICAgICAgICAgICAgICAgICAgICAoemVybyBwYWRkZWQgdG8gdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMpCisgICAgICBAcGFyYW0gd2hpY2ggICAgUEtfUFVCTElDIGZvciBwdWJsaWMgUlNBIGFuZCBQS19QUklWQVRFIGZvciBwcml2YXRlIFJTQQorICAgICAgQHBhcmFtIGtleSAgICAgIFRoZSBSU0Ega2V5IHRvIHVzZSAKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnJzYV9tZSkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgd2hpY2gsCisgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7Cit9IGx0Y19tYXRoX2Rlc2NyaXB0b3I7CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworTW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGFuZCBkbyBub3QgbmVlZCBkb2N1bWVudGF0aW9uLiAgV2UnbGwgY292ZXIgdGhlIGJhc2ljIGNvbnZlbnRpb25zIG9mIHRoZSBBUEkgYW5kIHRoZW4gZXhwbGFpbiB0aGUgYWNjZWxlcmF0ZWQgZnVuY3Rpb25zLgorCitcc3Vic2VjdGlvbntDb252ZW50aW9uc30KKworQWxsIFx0ZXh0aXR7YmlnbnVtc30gYXJlIGFjY2Vzc2VkIHRocm91Z2ggYW4gb3BhcXVlIFx0ZXh0aXR7dm9pZCAqfSBkYXRhIHR5cGUuICBZb3UgbXVzdCBpbnRlcm5hbGx5IGNhc3QgdGhlIHBvaW50ZXIgaWYgeW91IG5lZWQgdG8gYWNjZXNzIG1lbWJlcnMgb2YgeW91ciBiaWdudW0gc3RydWN0dXJlLiAgRHVyaW5nCit0aGUgaW5pdCBjYWxscyBhIFx0ZXh0aXR7dm9pZCAqKn0gd2lsbCBiZSBwYXNzZWQgd2hlcmUgeW91IGFsbG9jYXRlIHlvdXIgc3RydWN0dXJlIGFuZCBzZXQgdGhlIHBvaW50ZXIgdGhlbiBpbml0aWFsaXplIHRoZSBudW1iZXIgdG8gemVyby4gIER1cmluZyB0aGUgZGVpbml0IGNhbGxzIHlvdSBtdXN0IAorZnJlZSB0aGUgYmlnbnVtIGFzIHdlbGwgYXMgdGhlIHN0cnVjdHVyZSB5b3UgYWxsb2NhdGVkIHRvIHBsYWNlIGl0IGluLgorCitBbGwgZnVuY3Rpb25zIGV4Y2VwdCB0aGUgTW9udGdvbWVyeSByZWR1Y3Rpb25zIHdvcmsgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdpdGggdGhlIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBtdWwoYSwgYiwgYykgY29tcHV0ZXMgJGMgXGxlZnRhcnJvdyBhYiQuICAKKworQWxsIGZ1bmN0aW9ucyAoZXhjZXB0IHdoZXJlIG5vdGVkIG90aGVyd2lzZSkgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSB0byBzaWduaWZ5IGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uICBBbGwgZXJyb3IgY29kZXMgbXVzdCBiZSB2YWxpZCBMaWJUb21DcnlwdCBlcnJvciBjb2Rlcy4KKworVGhlIGRpZ2l0IHJvdXRpbmVzIChpbmNsdWRpbmcgZnVuY3Rpb25zIHdpdGggdGhlIFx0ZXh0aXR7aX0gc3VmZml4KSB1c2UgYSBcdGV4dGl0e3Vuc2lnbmVkIGxvbmd9IHRvIHJlcHJlc2VudCB0aGUgZGlnaXQuICBJZiB5b3VyIGludGVybmFsIGRpZ2l0IGlzIGxhcmdlciB0aGFuIHRoaXMgeW91IG11c3QKK3RoZW4gcGFydGl0aW9uIHlvdXIgZGlnaXRzLiAgTm9ybWFsbHkgdGhpcyBkb2VzIG5vdCBtYXR0ZXIgYXMgXHRleHRpdHt1bnNpZ25lZCBsb25nfSB3aWxsIGJlIHRoZSBzYW1lIHNpemUgYXMgeW91ciByZWdpc3RlciBzaXplLiAgTm90ZSB0aGF0IGlmIHlvdXIgZGlnaXQgaXMgc21hbGxlcgordGhhbiBhbiBcdGV4dGl0e3Vuc2lnbmVkIGxvbmd9IHRoYXQgaXMgYWxzbyBhY2NlcHRhYmxlIGFzIHRoZSBcdGV4dGl0e2JpdHNcX3BlclxfZGlnaXR9IHBhcmFtZXRlciB3aWxsIHNwZWNpZnkgdGhpcy4gIAorCitcc3Vic2VjdGlvbntFQ0MgRnVuY3Rpb25zfQorVGhlIEVDQyBzeXN0ZW0gaW4gTGliVG9tQ3J5cHQgaXMgYmFzZWQgb2ZmIG9mIHRoZSBOSVNUIHJlY29tbWVuZGVkIGN1cnZlcyBvdmVyICRHRihwKSQgYW5kIGlzIHVzZWQgdG8gaW1wbGVtZW50IEVDLURTQSBhbmQgRUMtREguICAgVGhlIEVDQyBmdW5jdGlvbnMgd29yayB3aXRoIAordGhlIFx0ZXh0YmZ7ZWNjXF9wb2ludH0gc3RydWN0dXJlIGFuZCBhc3N1bWUgdGhlIHBvaW50cyBhcmUgc3RvcmVkIGluIEphY29iaWFuIHByb2plY3RpdmUgZm9ybWF0LgorCitcYmVnaW57dmVyYmF0aW19CisvKiogQSBwb2ludCBvbiBhIEVDQyBjdXJ2ZSwgc3RvcmVkIGluIEphY29iaWFuIGZvcm1hdCBzdWNoIAorICAgIHRoYXQgKHgseSx6KSA9PiAoeC96XjIsIHkvel4zLCAxKSB3aGVuIGludGVycHJldGVkIGFzIGFmZmluZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBUaGUgeCBjby1vcmRpbmF0ZSAqLworICAgIHZvaWQgKng7CisgICAgLyoqIFRoZSB5IGNvLW9yZGluYXRlICovCisgICAgdm9pZCAqeTsKKyAgICAvKiogVGhlIHogY28tb3JkaW5hdGUgKi8KKyAgICB2b2lkICp6OworfSBlY2NfcG9pbnQ7CitcZW5ke3ZlcmJhdGltfQorCitBbGwgRUNDIGZ1bmN0aW9ucyBtdXN0IHVzZSB0aGlzIG1hcHBpbmcgc3lzdGVtLiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4geW91IHJlbWFwIGFsbCBFQ0MgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIGhhdmUgbW9yZSBjb250cm9sCitvdmVyIGhvdyB0aGUgRUNDIG1hdGggd2lsbCBiZSBpbXBsZW1lbnRlZC4gIE91dCBvZiB0aGUgYm94IHlvdSBvbmx5IGhhdmUgdGhyZWUgcGFyYW1ldGVycyBwZXIgcG9pbnQgdG8gdXNlICQoeCwgeSwgeikkIGhvd2V2ZXIsIHRoZXNlIGFyZSBqdXN0IHZvaWQgcG9pbnRlcnMuICBUaGV5Citjb3VsZCBwb2ludCB0byBhbnl0aGluZyB5b3Ugd2FudC4gIFRoZSBvbmx5IGZ1cnRoZXIgZXhjZXB0aW9uIGlzIHRoZSBleHBvcnQgZnVuY3Rpb25zIHdoaWNoIGV4cGVjdHMgdGhlIHZhbHVlcyB0byBiZSBpbiBhZmZpbmUgZm9ybWF0LgorCitcc3Vic3Vic2VjdGlvbntQb2ludCBNdWx0aXBseX0KK1RoaXMgd2lsbCBtdWx0aXBseSB0aGUgcG9pbnQgJEckIGJ5IHRoZSBzY2FsYXIgJGskIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBwb2ludCAkUiQuICBUaGUgdmFsdWUgc2hvdWxkIGJlIG1hcHBlZCB0byBhZmZpbmUgb25seSBpZiAkbWFwJCBpcyBzZXQgdG8gb25lLiAgCisKK1xzdWJzdWJzZWN0aW9ue1BvaW50IEFkZGl0aW9ufQorVGhpcyB3aWxsIGFkZCB0aGUgcG9pbnQgJFAkIHRvIHRoZSBwb2ludCAkUSQgYW5kIHN0b3JlIGl0IGluIHRoZSBwb2ludCAkUiQuICBUaGUgJG1wJCBwYXJhbWV0ZXIgaXMgdGhlIFx0ZXh0aXR7Yn0gdmFsdWUgZnJvbSB0aGUgbW9udGdvbWVyeVxfc2V0dXAoKSBjYWxsLiAgVGhlIGlucHV0IHBvaW50cworbWF5IGJlIGluIGVpdGhlciBhZmZpbmUgKHdpdGggJHogPSAxJCkgb3IgcHJvamVjdGl2ZSBmb3JtYXQgYW5kIHRoZSBvdXRwdXQgcG9pbnQgaXMgYWx3YXlzIHByb2plY3RpdmUuICAKKworXHN1YnN1YnNlY3Rpb257UG9pbnQgTWFwcGluZ30KK1RoaXMgd2lsbCBtYXAgdGhlIHBvaW50ICRQJCBiYWNrIGZyb20gcHJvamVjdGl2ZSB0byBhZmZpbmUuICBUaGUgb3V0cHV0IHBvaW50ICRQJCBtdXN0IGJlIG9mIHRoZSBmb3JtICQoeCwgeSwgMSkkLiAgCisKK1xzdWJzdWJzZWN0aW9ue1NoYW1pcidzIFRyaWNrfQorXGluZGV4e1NoYW1pcidzIFRyaWNrfQorXGluZGV4e2x0Y1xfZWNjXF9tdWwyYWRkKCl9CitUbyBhY2NlbGVyYXRlIEVDLS1EU0EgdmVyaWZpY2F0aW9uIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIGEgYnVpbHQtLWluIGZ1bmN0aW9uIGNhbGxlZCBsdGNcX2VjY1xfbXVsMmFkZCgpLiAgVGhpcyBwZXJmb3JtcyB0d28gcG9pbnQgbXVsdGlwbGljYXRpb25zIGFuZCBhbiBhZGRpdGlvbiBpbgorcm91Z2hseSB0aGUgdGltZSBvZiBvbmUgcG9pbnQgbXVsdGlwbGljYXRpb24uICBJdCBpcyBjYWxsZWQgZnJvbSBlY2NcX3ZlcmlmeVxfaGFzaCgpIGlmIGFuIGFjY2VsZXJhdG9yIGlzIG5vdCBwcmVzZW50LiAgVGhlIGFjY2xlcmF0b3IgZnVuY3Rpb24gbXVzdCBhbGxvdyB0aGUgcG9pbnRzIHRvCitvdmVybGFwIChlLmcuLCAkQSBcbGVmdGFycm93IGtfMUEgKyBrXzJCJCkgYW5kIG11c3QgcmV0dXJuIHRoZSBmaW5hbCBwb2ludCBpbiBhZmZpbmUgZm9ybWF0LiAgCisKKworXHN1YnNlY3Rpb257UlNBIEZ1bmN0aW9uc30KK1RoZSBSU0EgTW9kdWxhciBFeHBvbmVudGlhdGlvbiAoTUUpIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIFJTQSBBUEkgdG8gcGVyZm9ybSBleHBvbmVudGlhdGlvbnMgZm9yIHByaXZhdGUgYW5kIHB1YmxpYyBrZXkgb3BlcmF0aW9ucy4gIEluIHBhcnRpY3VsYXIgZm9yCitwcml2YXRlIGtleSBvcGVyYXRpb25zIGl0IHVzZXMgdGhlIENSVCBhcHByb2FjaCB0byBsb3dlciB0aGUgdGltZSByZXF1aXJlZC4gIEl0IGlzIHBhc3NlZCBhbiBSU0Ega2V5IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXQuCisKK1xiZWdpbnt2ZXJiYXRpbX0KKy8qKiBSU0EgUEtDUyBzdHlsZSBrZXkgKi8KK3R5cGVkZWYgc3RydWN0IFJzYV9rZXkgeworICAgIC8qKiBUeXBlIG9mIGtleSwgUEtfUFJJVkFURSBvciBQS19QVUJMSUMgKi8KKyAgICBpbnQgdHlwZTsKKyAgICAvKiogVGhlIHB1YmxpYyBleHBvbmVudCAqLworICAgIHZvaWQgKmU7IAorICAgIC8qKiBUaGUgcHJpdmF0ZSBleHBvbmVudCAqLworICAgIHZvaWQgKmQ7IAorICAgIC8qKiBUaGUgbW9kdWx1cyAqLworICAgIHZvaWQgKk47IAorICAgIC8qKiBUaGUgcCBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnA7IAorICAgIC8qKiBUaGUgcSBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnE7IAorICAgIC8qKiBUaGUgMS9xIG1vZCBwIENSVCBwYXJhbSAqLworICAgIHZvaWQgKnFQOyAKKyAgICAvKiogVGhlIGQgbW9kIChwIC0gMSkgQ1JUIHBhcmFtICovCisgICAgdm9pZCAqZFA7IAorICAgIC8qKiBUaGUgZCBtb2QgKHEgLSAxKSBDUlQgcGFyYW0gKi8KKyAgICB2b2lkICpkUTsKK30gcnNhX2tleTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZSBjYWxsIHJlYWRzIHRoZSBcdGV4dGl0e2lufSBidWZmZXIgYXMgYW4gdW5zaWduZWQgY2hhciBhcnJheSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gIFRoZW4gaXQgcGVyZm9ybXMgdGhlIGV4cG9uZW50aWF0aW9uIGFuZCBzdG9yZXMgdGhlIG91dHB1dCBpbiBiaWcgZW5kaWFuIGZvcm1hdAordG8gdGhlIFx0ZXh0aXR7b3V0fSBidWZmZXIuICBUaGUgb3V0cHV0IG11c3QgYmUgemVybyBwYWRkZWQgKGxlYWRpbmcgYnl0ZXMpIHNvIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIGxlbmd0aCBvZiB0aGUgbW9kdWx1cyAoaW4gYnl0ZXMpLiAgRm9yIGV4YW1wbGUsCitmb3IgUlNBLS0xMDI0IHRoZSBvdXRwdXQgaXMgYWx3YXlzIDEyOCBieXRlcyByZWdhcmRsZXNzIG9mIGhvdyBzbWFsbCB0aGUgbnVtZXJpY2FsIHZhbHVlIG9mIHRoZSBleHBvbmVudGlhdGlvbiBpcy4KKworU2luY2UgdGhlIGZ1bmN0aW9uIGlzIGdpdmVuIHRoZSBlbnRpcmUgUlNBIGtleSAoZm9yIHByaXZhdGUga2V5cyBvbmx5KSBDUlQgaXMgcG9zc2libGUgYXMgcHJlc2NyaWJlZCBpbiB0aGUgUEtDUyBcIzEgdjIuMSBzcGVjaWZpY2F0aW9uLgorCitcbmV3cGFnZQorXG1hcmtib3Roe0luZGV4fXtJbmRleH0KIFxpbnB1dHtjcnlwdC5pbmR9CiAKIFxlbmR7ZG9jdW1lbnR9CiAKICUgJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvY3J5cHQudGV4LHYgJCAgIAotJSAkUmV2aXNpb246IDEuMzkgJCAgIAotJSAkRGF0ZTogMjAwNS8wNi8yNyAxMzowODoyOCAkIAorJSAkUmV2aXNpb246IDEuMTIzICQgICAKKyUgJERhdGU6IDIwMDYvMTIvMTYgMTk6MDg6MTcgJCAKZGlmZiAtLWdpdCBhL2RlbW9zL2VuY3J5cHQuYyBiL2RlbW9zL2VuY3J5cHQuYwppbmRleCBkOGViMjkzLi5mMzg0NDBkIDEwMDY0NAotLS0gYS9kZW1vcy9lbmNyeXB0LmMKKysrIGIvZGVtb3MvZW5jcnlwdC5jCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgIGV4aXQoLTEpOwogICAgICAgfQogICAgCi0gICAgICBpZiAoKGVycm5vID0gY3RyX3N0YXJ0KGNpcGhlcl9pZHgsSVYsa2V5LGtzLDAsJmN0cikpICE9IENSWVBUX09LKSB7CisgICAgICBpZiAoKGVycm5vID0gY3RyX3N0YXJ0KGNpcGhlcl9pZHgsSVYsa2V5LGtzLDAsQ1RSX0NPVU5URVJfTElUVExFX0VORElBTiwmY3RyKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgIHByaW50ZigiY3RyX3N0YXJ0IGVycm9yOiAlc1xuIixlcnJvcl90b19zdHJpbmcoZXJybm8pKTsKICAgICAgICAgIGV4aXQoLTEpOwogICAgICAgfQpAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgICAgICBleGl0KC0xKTsKICAgICAgIH0KIAotICAgICAgaWYgKChlcnJubyA9IGN0cl9zdGFydChjaXBoZXJfaWR4LElWLGtleSxrcywwLCZjdHIpKSAhPSBDUllQVF9PSykgeworICAgICAgaWYgKChlcnJubyA9IGN0cl9zdGFydChjaXBoZXJfaWR4LElWLGtleSxrcywwLENUUl9DT1VOVEVSX0xJVFRMRV9FTkRJQU4sJmN0cikpICE9IENSWVBUX09LKSB7CiAgICAgICAgICBwcmludGYoImN0cl9zdGFydCBlcnJvcjogJXNcbiIsZXJyb3JfdG9fc3RyaW5nKGVycm5vKSk7CiAgICAgICAgICBleGl0KC0xKTsKICAgICAgIH0KQEAgLTIzNyw1ICsyMzcsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy9lbmNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1NiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNS8wOC8wNCAyMDo0Mzo1MCAkICovCmRpZmYgLS1naXQgYS9kZW1vcy9tdWx0aS5jIGIvZGVtb3MvbXVsdGkuYwppbmRleCBhZjRkNmI2Li4yNTIwZGU5IDEwMDY0NAotLS0gYS9kZW1vcy9tdWx0aS5jCisrKyBiL2RlbW9zL211bHRpLmMKQEAgLTEzLDIxICsxMywyMSBAQAogCiAvKiBIQVNIIHRlc3RpbmcgKi8KICAgIGxlbiA9IHNpemVvZihidWZbMF0pOwotICAgaGFzaF9tZW1vcnkoZmluZF9oYXNoKCJzaGEyNTYiKSwgImhlbGxvIiwgNSwgYnVmWzBdLCAmbGVuKTsKKyAgIGhhc2hfbWVtb3J5KGZpbmRfaGFzaCgic2hhMjU2IiksICh1bnNpZ25lZCBjaGFyKikiaGVsbG8iLCA1LCBidWZbMF0sICZsZW4pOwogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgaGFzaF9tZW1vcnlfbXVsdGkoZmluZF9oYXNoKCJzaGEyNTYiKSwgYnVmWzFdLCAmbGVuMiwgImhlbGxvIiwgNSwgTlVMTCk7CisgICBoYXNoX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlbGxvIiwgNSwgTlVMTCk7CiAgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CiAgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgfQogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgaGFzaF9tZW1vcnlfbXVsdGkoZmluZF9oYXNoKCJzaGEyNTYiKSwgYnVmWzFdLCAmbGVuMiwgImhlIiwgMiwgImxsbyIsIDMsIE5VTEwpOworICAgaGFzaF9tZW1vcnlfbXVsdGkoZmluZF9oYXNoKCJzaGEyNTYiKSwgYnVmWzFdLCAmbGVuMiwgKHVuc2lnbmVkIGNoYXIqKSJoZSIsIDJVTCwgImxsbyIsIDNVTCwgTlVMTCwgMCk7CiAgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CiAgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgfQogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgaGFzaF9tZW1vcnlfbXVsdGkoZmluZF9oYXNoKCJzaGEyNTYiKSwgYnVmWzFdLCAmbGVuMiwgImgiLCAxLCAiZSIsIDEsICJsIiwgMSwgImwiLCAxLCAibyIsIDEsIE5VTEwpOworICAgaGFzaF9tZW1vcnlfbXVsdGkoZmluZF9oYXNoKCJzaGEyNTYiKSwgYnVmWzFdLCAmbGVuMiwgKHVuc2lnbmVkIGNoYXIqKSJoIiwgMVVMLCAiZSIsIDFVTCwgImwiLCAxVUwsICJsIiwgMVVMLCAibyIsIDFVTCwgTlVMTCk7CiAgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CiAgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwpAQCAtMzUsMjEgKzM1LDIxIEBACiAKIC8qIEhNQUMgKi8KICAgIGxlbiA9IHNpemVvZihidWZbMF0pOwotICAgaG1hY19tZW1vcnkoZmluZF9oYXNoKCJzaGEyNTYiKSwga2V5LCAxNiwgImhlbGxvIiwgNSwgYnVmWzBdLCAmbGVuKTsKKyAgIGhtYWNfbWVtb3J5KGZpbmRfaGFzaCgic2hhMjU2IiksIGtleSwgMTYsICh1bnNpZ25lZCBjaGFyKikiaGVsbG8iLCA1LCBidWZbMF0sICZsZW4pOwogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgaG1hY19tZW1vcnlfbXVsdGkoZmluZF9oYXNoKCJzaGEyNTYiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgImhlbGxvIiwgNSwgTlVMTCk7CisgICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlbGxvIiwgNVVMLCBOVUxMKTsKICAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKICAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAiaGUiLCAyLCAibGxvIiwgMywgTlVMTCk7CisgICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlIiwgMlVMLCAibGxvIiwgM1VMLCBOVUxMKTsKICAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKICAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAiaCIsIDEsICJlIiwgMSwgImwiLCAxLCAibCIsIDEsICJvIiwgMSwgTlVMTCk7CisgICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImgiLCAxVUwsICJlIiwgMVVMLCAibCIsIDFVTCwgImwiLCAxVUwsICJvIiwgMVVMLCBOVUxMKTsKICAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKICAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CkBAIC01NywyMSArNTcsMjEgQEAKIAogLyogT01BQyAqLwogICAgbGVuID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICBvbWFjX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsICJoZWxsbyIsIDUsIGJ1ZlswXSwgJmxlbik7CisgICBvbWFjX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsICh1bnNpZ25lZCBjaGFyKikiaGVsbG8iLCA1LCBidWZbMF0sICZsZW4pOwogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgb21hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAiaGVsbG8iLCA1LCBOVUxMKTsKKyAgIG9tYWNfbWVtb3J5X211bHRpKGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgKHVuc2lnbmVkIGNoYXIqKSJoZWxsbyIsIDVVTCwgTlVMTCk7CiAgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CiAgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgfQogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgb21hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAiaGUiLCAyLCAibGxvIiwgMywgTlVMTCk7CisgICBvbWFjX21lbW9yeV9tdWx0aShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsIGJ1ZlsxXSwgJmxlbjIsICh1bnNpZ25lZCBjaGFyKikiaGUiLCAyVUwsICJsbG8iLCAzVUwsIE5VTEwpOwogICAgaWYgKGxlbiAhPSBsZW4yIHx8IG1lbWNtcChidWZbMF0sIGJ1ZlsxXSwgbGVuKSkgewogICAgICAgcHJpbnRmKCJGYWlsZWQ6ICVkICVsdSAlbHVcbiIsIF9fTElORV9fLCBsZW4sIGxlbjIpOwogICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgIH0KICAgIGxlbjIgPSBzaXplb2YoYnVmWzBdKTsKLSAgIG9tYWNfbWVtb3J5X211bHRpKGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgImgiLCAxLCAiZSIsIDEsICJsIiwgMSwgImwiLCAxLCAibyIsIDEsIE5VTEwpOworICAgb21hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImgiLCAxVUwsICJlIiwgMVVMLCAibCIsIDFVTCwgImwiLCAxVUwsICJvIiwgMVVMLCBOVUxMKTsKICAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKICAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CkBAIC03OSwyMSArNzksMjEgQEAKIAogLyogUE1BQyAqLwogICAgbGVuID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICBwbWFjX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsICJoZWxsbyIsIDUsIGJ1ZlswXSwgJmxlbik7CisgICBwbWFjX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsICh1bnNpZ25lZCBjaGFyKikiaGVsbG8iLCA1LCBidWZbMF0sICZsZW4pOwogICAgbGVuMiA9IHNpemVvZihidWZbMF0pOwotICAgcG1hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAiaGVsbG8iLCA1LCBOVUxMKTsKKyAgIHBtYWNfbWVtb3J5X211bHRpKGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgKHVuc2lnbmVkIGNoYXIqKSJoZWxsbyIsIDUsIE5VTEwpOwogICAgaWYgKGxlbiAhPSBsZW4yIHx8IG1lbWNtcChidWZbMF0sIGJ1ZlsxXSwgbGVuKSkgewogICAgICAgcHJpbnRmKCJGYWlsZWQ6ICVkICVsdSAlbHVcbiIsIF9fTElORV9fLCBsZW4sIGxlbjIpOwogICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgIH0KICAgIGxlbjIgPSBzaXplb2YoYnVmWzBdKTsKLSAgIHBtYWNfbWVtb3J5X211bHRpKGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgImhlIiwgMiwgImxsbyIsIDMsIE5VTEwpOworICAgcG1hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlIiwgMlVMLCAibGxvIiwgM1VMLCBOVUxMKTsKICAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKICAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CiAgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICBwbWFjX21lbW9yeV9tdWx0aShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsIGJ1ZlsxXSwgJmxlbjIsICJoIiwgMSwgImUiLCAxLCAibCIsIDEsICJsIiwgMSwgIm8iLCAxLCBOVUxMKTsKKyAgIHBtYWNfbWVtb3J5X211bHRpKGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgKHVuc2lnbmVkIGNoYXIqKSJoIiwgMVVMLCAiZSIsIDFVTCwgImwiLCAxVUwsICJsIiwgMVVMLCAibyIsIDFVTCwgTlVMTCk7CiAgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CiAgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwpAQCAtMTA2LDUgKzEwNiw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvZGVtb3MvbXVsdGkuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4yICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzA3IDIyOjI1OjA5ICQgKi8KZGlmZiAtLWdpdCBhL2RlbW9zL3NtYWxsLmMgYi9kZW1vcy9zbWFsbC5jCmluZGV4IDZiZGQ4NDIuLjMwMTk3NDUgMTAwNjQ0Ci0tLSBhL2RlbW9zL3NtYWxsLmMKKysrIGIvZGVtb3Mvc21hbGwuYwpAQCAtMSw0ICsxLDQgQEAKLS8vIHNtYWxsIGRlbW8gYXBwIHRoYXQganVzdCBpbmNsdWRlcyBhIGNpcGhlci9oYXNoL3BybmcKKy8qIHNtYWxsIGRlbW8gYXBwIHRoYXQganVzdCBpbmNsdWRlcyBhIGNpcGhlci9oYXNoL3BybmcgKi8KICNpbmNsdWRlIDx0b21jcnlwdC5oPgogCiBpbnQgbWFpbih2b2lkKQpAQCAtMTAsNSArMTAsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy9zbWFsbC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjIgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMDcgMjI6MjU6MDkgJCAqLwpkaWZmIC0tZ2l0IGEvZGVtb3MvdGVzdC5jIGIvZGVtb3MvdGVzdC5jCmluZGV4IGY2YzcxNzAuLjE2YTIxMTAgMTAwNjQ0Ci0tLSBhL2RlbW9zL3Rlc3QuYworKysgYi9kZW1vcy90ZXN0LmMKQEAgLTQsNiArNCwxOCBAQAogewogICAgaW50IHg7CiAgICByZWdfYWxncygpOworCisjaWZkZWYgVVNFX0xUTQorICAgbHRjX21wID0gbHRtX2Rlc2M7CisjZWxpZiBkZWZpbmVkKFVTRV9URk0pCisgICBsdGNfbXAgPSB0Zm1fZGVzYzsKKyNlbGlmIGRlZmluZWQoVVNFX0dNUCkKKyAgIGx0Y19tcCA9IGdtcF9kZXNjOworI2Vsc2UKKyAgIGV4dGVybiBsdGNfbWF0aF9kZXNjcmlwdG9yIEVYVF9NQVRIX0xJQjsKKyAgIGx0Y19tcCA9IEVYVF9NQVRIX0xJQjsKKyNlbmRpZgorCiAgICBwcmludGYoImJ1aWxkID09IFxuJXNcbiIsIGNyeXB0X2J1aWxkX3NldHRpbmdzKTsKICAgIHByaW50ZigiXG5zdG9yZV90ZXN0Li4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IHN0b3JlX3Rlc3QoKTsgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgcHJpbnRmKCJcbmNpcGhlcl90ZXN0Li4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0gY2lwaGVyX2hhc2hfdGVzdCgpOyBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7CkBAIC0xMiwxMyArMjQsMTMgQEAKICAgIHByaW50ZigiXG5tYWNfdGVzdC4uLi4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IG1hY190ZXN0KCk7ICAgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgcHJpbnRmKCJcbnBrY3NfMV90ZXN0Li4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0gcGtjc18xX3Rlc3QoKTsgICAgICBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICBwcmludGYoIlxucnNhX3Rlc3QuLi4uLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHggPSByc2FfdGVzdCgpOyAgICAgICAgIHByaW50Zih4ID8gImZhaWxlZCIgOiAicGFzc2VkIik7aWYgKHgpIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgIHByaW50ZigiXG5lY2NfdGVzdC4uLi4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IGVjY190ZXN0cygpOyAgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOworICAgcHJpbnRmKCJcbmVjY190ZXN0Li4uLi4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0gZWNjX3Rlc3RzKCk7ICAgICAgICBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7IAogICAgcHJpbnRmKCJcbmRzYV90ZXN0Li4uLi4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0gZHNhX3Rlc3QoKTsgICAgICAgICBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICBwcmludGYoIlxuZGhfdGVzdC4uLi4uLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHggPSBkaF90ZXN0cygpOyAgICAgICAgIHByaW50Zih4ID8gImZhaWxlZCIgOiAicGFzc2VkIik7aWYgKHgpIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIHByaW50ZigiXG5rYXRqYV90ZXN0Li4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IGthdGphX3Rlc3QoKTsgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgcHJpbnRmKCJcbiIpOwogICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvZGVtb3MvdGVzdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjEyICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDEyOjA2OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yOCAkICovCisvKiAkRGF0ZTogMjAwNi8wNS8yNSAxMDo1MDowOCAkICovCmRpZmYgLS1naXQgYS9kZW1vcy90aW1pbmcuYyBiL2RlbW9zL3RpbWluZy5jCmluZGV4IDM2OGQ2ZTQuLmJlY2M3YzAgMTAwNjQ0Ci0tLSBhL2RlbW9zL3RpbWluZy5jCisrKyBiL2RlbW9zL3RpbWluZy5jCkBAIC0yLDEyICsyLDI2IEBACiAKIGludCBtYWluKHZvaWQpCiB7CisKIGluaXRfdGltZXIoKTsKIHJlZ19hbGdzKCk7CisKKyNpZmRlZiBVU0VfTFRNCisgICBsdGNfbXAgPSBsdG1fZGVzYzsKKyNlbGlmIGRlZmluZWQoVVNFX1RGTSkKKyAgIGx0Y19tcCA9IHRmbV9kZXNjOworI2VsaWYgZGVmaW5lZChVU0VfR01QKQorICAgbHRjX21wID0gZ21wX2Rlc2M7CisjZWxzZQorICAgZXh0ZXJuIGx0Y19tYXRoX2Rlc2NyaXB0b3IgRVhUX01BVEhfTElCOworICAgbHRjX21wID0gRVhUX01BVEhfTElCOworI2VuZGlmCisKIHRpbWVfa2V5c2NoZWQoKTsKIHRpbWVfY2lwaGVyKCk7CiB0aW1lX2NpcGhlcjIoKTsKIHRpbWVfY2lwaGVyMygpOwordGltZV9jaXBoZXI0KCk7CiB0aW1lX2hhc2goKTsKIHRpbWVfbWFjcygpOwogdGltZV9lbmNtYWNzKCk7CkBAIC0xNiwxMSArMzAsMTMgQEAKIHRpbWVfc3FyKCk7CiB0aW1lX3JzYSgpOwogdGltZV9lY2MoKTsKLXRpbWVfZGgoKTsKKyNpZmRlZiBVU0VfTFRNCit0aW1lX2thdGphKCk7CisjZW5kaWYKIHJldHVybiBFWElUX1NVQ0NFU1M7CiAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvZGVtb3MvdGltaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMTcgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMjMgMDI6MTY6MjYgJCAqLworLyogJFJldmlzaW9uOiAxLjYxICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzAzIDAzOjA4OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2RlbW9zL3R2X2dlbi5jIGIvZGVtb3MvdHZfZ2VuLmMKaW5kZXggZWRhYWUzZS4uOTdjNjFhOCAxMDA2NDQKLS0tIGEvZGVtb3MvdHZfZ2VuLmMKKysrIGIvZGVtb3MvdHZfZ2VuLmMKQEAgLTk4LDYgKzk4LDE4IEBACiAgIH0KICNlbmRpZgogCisjaWZkZWYgVVNFX0xUTQorICAgbHRjX21wID0gbHRtX2Rlc2M7CisjZWxpZiBkZWZpbmVkKFVTRV9URk0pCisgICBsdGNfbXAgPSB0Zm1fZGVzYzsKKyNlbGlmIGRlZmluZWQoVVNFX0dNUCkKKyAgIGx0Y19tcCA9IGdtcF9kZXNjOworI2Vsc2UKKyAgIGV4dGVybiBsdGNfbWF0aF9kZXNjcmlwdG9yIEVYVF9NQVRIX0xJQjsKKyAgIGx0Y19tcCA9IEVYVF9NQVRIX0xJQjsKKyNlbmRpZgorCisKIH0KIAogdm9pZCBoYXNoX2dlbih2b2lkKQpAQCAtNTQxLDcgKzU1Myw3IEBACiAgICAgICAgICAgICBwbGFpbnRleHRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CiAgICAgICAgICB9CiAgICAgICAgICBsZW4gPSBzaXplb2YodGFnKTsKLSAgICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeSh4LCBrZXksIGtsLCBub25jZSwgMTMsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgdGFnLCAmbGVuLCBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBpZiAoKGVyciA9IGNjbV9tZW1vcnkoeCwga2V5LCBrbCwgTlVMTCwgbm9uY2UsIDEzLCBwbGFpbnRleHQsIHkxLCBwbGFpbnRleHQsIHkxLCBwbGFpbnRleHQsIHRhZywgJmxlbiwgQ0NNX0VOQ1JZUFQpKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBDQ00naW5nOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOwogICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAgICAgfQpAQCAtNjQxLDMwICs2NTMsMTM0IEBACiAgICBmY2xvc2Uob3V0KTsKIH0KIAordm9pZCBtYXRoX2dlbih2b2lkKQoreworfQorCit2b2lkIGVjY19nZW4odm9pZCkKK3sKKyAgIEZJTEUgICAgICAgICAqb3V0OworICAgdW5zaWduZWQgY2hhciBzdHJbNTEyXTsKKyAgIHZvaWQgICAgICAgICAgKmssICpvcmRlciwgKm1vZHVsdXM7CisgICBlY2NfcG9pbnQgICAgKkcsICpSOworICAgaW50ICAgICAgICAgICB4OworCisgICBvdXQgPSBmb3BlbigiZWNjX3R2LnR4dCIsICJ3Iik7CisgICBmcHJpbnRmKG91dCwgImVjYyB2ZWN0b3JzLiAgVGhlc2UgYXJlIGZvciBrRyBmb3Igaz0xLDMsOSwyNywuLi4sMyoqbiB1bnRpbCBrID4gb3JkZXIgb2YgdGhlIGN1cnZlIG91dHB1dHMgYXJlIDxrLHgseT4gdHJpcGxldHNcblxuIik7CisgICBHID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIFIgPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgbXBfaW5pdCgmayk7CisgICBtcF9pbml0KCZvcmRlcik7CisgICBtcF9pbml0KCZtb2R1bHVzKTsKKworICAgZm9yICh4ID0gMDsgbHRjX2VjY19zZXRzW3hdLnNpemUgIT0gMDsgeCsrKSB7CisgICAgICAgIGZwcmludGYob3V0LCAiRUNDLSVkXG4iLCBsdGNfZWNjX3NldHNbeF0uc2l6ZSo4KTsKKyAgICAgICAgbXBfc2V0KGssIDEpOworCisgICAgICAgIG1wX3JlYWRfcmFkaXgob3JkZXIsICAgKGNoYXIgKilsdGNfZWNjX3NldHNbeF0ub3JkZXIsIDE2KTsKKyAgICAgICAgbXBfcmVhZF9yYWRpeChtb2R1bHVzLCAoY2hhciAqKWx0Y19lY2Nfc2V0c1t4XS5wcmltZSwgMTYpOworICAgICAgICBtcF9yZWFkX3JhZGl4KEctPngsICAgIChjaGFyICopbHRjX2VjY19zZXRzW3hdLkd4LCAgICAxNik7CisgICAgICAgIG1wX3JlYWRfcmFkaXgoRy0+eSwgICAgKGNoYXIgKilsdGNfZWNjX3NldHNbeF0uR3ksICAgIDE2KTsKKyAgICAgICAgbXBfc2V0KEctPnosIDEpOyAgCisKKyAgICAgICAgd2hpbGUgKG1wX2NtcChrLCBvcmRlcikgPT0gTFRDX01QX0xUKSB7CisgICAgICAgICAgICBsdGNfbXAuZWNjX3B0bXVsKGssIEcsIFIsIG1vZHVsdXMsIDEpOworICAgICAgICAgICAgbXBfdG9oZXgoaywgICAgKGNoYXIqKXN0cik7IGZwcmludGYob3V0LCAiJXMsICIsIChjaGFyKilzdHIpOworICAgICAgICAgICAgbXBfdG9oZXgoUi0+eCwgKGNoYXIqKXN0cik7IGZwcmludGYob3V0LCAiJXMsICIsIChjaGFyKilzdHIpOworICAgICAgICAgICAgbXBfdG9oZXgoUi0+eSwgKGNoYXIqKXN0cik7IGZwcmludGYob3V0LCAiJXNcbiIsIChjaGFyKilzdHIpOworICAgICAgICAgICAgbXBfbXVsX2QoaywgMywgayk7CisgICAgICAgIH0KKyAgIH0KKyAgIG1wX2NsZWFyX211bHRpKGssIG9yZGVyLCBtb2R1bHVzLCBOVUxMKTsKKyAgIGx0Y19lY2NfZGVsX3BvaW50KEcpOworICAgbHRjX2VjY19kZWxfcG9pbnQoUik7CisgICBmY2xvc2Uob3V0KTsKK30KKwordm9pZCBscndfZ2VuKHZvaWQpCit7CisgICBGSUxFICpvdXQ7CisgICB1bnNpZ25lZCBjaGFyIHR3ZWFrWzE2XSwga2V5WzE2XSwgaXZbMTZdLCBidWZbMTAyNF07CisgICBpbnQgeCwgeSwgZXJyOworICAgc3ltbWV0cmljX0xSVyBscnc7CisgICAKKyAgIC8qIGluaXRpYWxpemUgZGVmYXVsdCBrZXkgYW5kIHR3ZWFrICovCisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgICAgdHdlYWtbeF0gPSBrZXlbeF0gPSBpdlt4XSA9IHg7CisgICB9CisKKyAgIG91dCA9IGZvcGVuKCJscndfdHYudHh0IiwgInciKTsKKyAgIGZvciAoeCA9IDE2OyB4IDwgKGludCkoc2l6ZW9mKGJ1ZikpOyB4ICs9IDE2KSB7CisgICAgICAgaWYgKChlcnIgPSBscndfc3RhcnQoZmluZF9jaXBoZXIoImFlcyIpLCBpdiwga2V5LCAxNiwgdHdlYWssIDAsICZscncpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igc3RhcnRpbmcgTFJXLUFFUzogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgfQorCisgICAgICAgLyogZW5jcnlwdCBpbmNyZW1lbnRhbCAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyB5KyspIHsKKyAgICAgICAgICAgYnVmW3ldID0geSAmIDI1NTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoKGVyciA9IGxyd19lbmNyeXB0KGJ1ZiwgYnVmLCB4LCAmbHJ3KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGVuY3J5cHRpbmcgd2l0aCBMUlctQUVTOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICB9CisKKyAgICAgICAvKiBkaXNwbGF5IGl0ICovCisgICAgICAgZnByaW50ZihvdXQsICIlZDoiLCB4KTsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSB7CisgICAgICAgICAgZnByaW50ZihvdXQsICIlMDJ4IiwgYnVmW3ldKTsKKyAgICAgICB9CisgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworCisgICAgICAgLyogcmVzZXQgSVYgKi8KKyAgICAgICBpZiAoKGVyciA9IGxyd19zZXRpdihpdiwgMTYsICZscncpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBJVjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgfQorCisgICAgICAgLyogY29weSBuZXcgdHdlYWssIGl2IGFuZCBrZXkgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworICAgICAgICAgIGtleVt5XSAgID0gYnVmW3ldOworICAgICAgICAgIGl2W3ldICAgID0gYnVmWyh5KzE2KSV4XTsKKyAgICAgICAgICB0d2Vha1t5XSA9IGJ1ZlsoeSszMikleF07CisgICAgICAgfQorCisgICAgICAgaWYgKChlcnIgPSBscndfZGVjcnlwdChidWYsIGJ1ZiwgeCwgJmxydykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBkZWNyeXB0aW5nIHdpdGggTFJXLUFFUzogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgfQorCisgICAgICAgLyogZGlzcGxheSBpdCAqLworICAgICAgIGZwcmludGYob3V0LCAiJWQ6IiwgeCk7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IHg7IHkrKykgeworICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyeCIsIGJ1Zlt5XSk7CisgICAgICAgfQorICAgICAgIGZwcmludGYob3V0LCAiXG4iKTsKKyAgICAgICBscndfZG9uZSgmbHJ3KTsKKyAgIH0KKyAgIGZjbG9zZShvdXQpOworfSAgICAgIAorCiBpbnQgbWFpbih2b2lkKQogewogICAgcmVnX2FsZ3MoKTsKLSAgIHByaW50ZigiR2VuZXJhdGluZyBoYXNoICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgaGFzaF9nZW4oKTsgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBoYXNoICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgaGFzaF9nZW4oKTsgICBwcmludGYoImRvbmVcbiIpOwogICAgcHJpbnRmKCJHZW5lcmF0aW5nIGNpcGhlciB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBjaXBoZXJfZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7Ci0gICBwcmludGYoIkdlbmVyYXRpbmcgSE1BQyAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IGhtYWNfZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7Ci0gICBwcmludGYoIkdlbmVyYXRpbmcgT01BQyAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IG9tYWNfZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7Ci0gICBwcmludGYoIkdlbmVyYXRpbmcgUE1BQyAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHBtYWNfZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7Ci0gICBwcmludGYoIkdlbmVyYXRpbmcgRUFYICAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IGVheF9nZW4oKTsgcHJpbnRmKCJkb25lXG4iKTsKLSAgIHByaW50ZigiR2VuZXJhdGluZyBPQ0IgICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgb2NiX2dlbigpOyBwcmludGYoImRvbmVcbiIpOwotICAgcHJpbnRmKCJHZW5lcmF0aW5nIENDTSAgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBjY21fZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7Ci0gICBwcmludGYoIkdlbmVyYXRpbmcgR0NNICAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IGdjbV9nZW4oKTsgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBITUFDICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgaG1hY19nZW4oKTsgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIE9NQUMgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBvbWFjX2dlbigpOyAgIHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgUE1BQyAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHBtYWNfZ2VuKCk7ICAgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBFQVggICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgZWF4X2dlbigpOyAgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIE9DQiAgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBvY2JfZ2VuKCk7ICAgIHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgQ0NNICAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IGNjbV9nZW4oKTsgICAgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBHQ00gICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgZ2NtX2dlbigpOyAgICBwcmludGYoImRvbmVcbiIpOwogICAgcHJpbnRmKCJHZW5lcmF0aW5nIEJBU0U2NCB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBiYXNlNjRfZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgTUFUSCAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IG1hdGhfZ2VuKCk7ICAgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBFQ0MgICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgZWNjX2dlbigpOyAgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIExSVyAgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBscndfZ2VuKCk7ICAgIHByaW50ZigiZG9uZVxuIik7CiAgICByZXR1cm4gMDsKIH0KIAotCi0gICAgICAgICAKLSAgICAgIAotICAgICAgCi0gICAgICAKLSAgICAKLSAgIAotCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy90dl9nZW4uYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8wOSAyMjoxMDoyNyAkICovCmRpZmYgLS1naXQgYS9kb2MvY3J5cHQucGRmIGIvZG9jL2NyeXB0LnBkZgppbmRleCAxYzU2YzUxLi43NzM4MjUwIDEwMDY0NAotLS0gYS9kb2MvY3J5cHQucGRmCisrKyBiL2RvYy9jcnlwdC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jL2Zvb3Rlci5odG1sIGIvZG9jL2Zvb3Rlci5odG1sCmluZGV4IGExODk1YWMuLjI2ZTE2OTEgMTAwNjQ0Ci0tLSBhL2RvYy9mb290ZXIuaHRtbAorKysgYi9kb2MvZm9vdGVyLmh0bWwKQEAgLTEsMTAgKzEsMTAgQEAKIDxociB3aWR0aD0iODAlIj4KLUNvZGUgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5saWJ0b21jcnlwdC5vcmcvIj5Ub208L2E+PGJyPgorQ29kZSBieSA8YSBocmVmPSJodHRwOi8vd3d3LmxpYnRvbWNyeXB0LmNvbS8iPlRvbTwvYT48YnI+CiBEb2NzIHVzaW5nIDxpbWcgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIiBhbGlnbj0ibWlkZGxlIiBib3JkZXI9MD4KIDxhIGhyZWY9Imh0dHA6Ly9qbGNvb2tlLmNhL3RvbS9oaWRkZW5faW1hZ2UucG5nIj4KIAogPCEtLQogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvZG9jL2Zvb3Rlci5odG1sLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDcgMTA6MDk6MjAgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzQgJCAqLwogLS0+CmRpZmYgLS1naXQgYS9maWx0ZXIucGwgYi9maWx0ZXIucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFiYTYyZgotLS0gL2Rldi9udWxsCisrKyBiL2ZpbHRlci5wbApAQCAtMCwwICsxLDMwIEBACisjIS91c3IvYmluL3BlcmwKKworIyB3ZSB3YW50IHRvIGZpbHRlciBldmVyeSBiZXR3ZWVuIFNUQVJUX0lOUyBhbmQgRU5EX0lOUyBvdXQgYW5kIHRoZW4gaW5zZXJ0IGNyYXAgZnJvbSBhbm90aGVyIGZpbGUgKHRoaXMgaXMgZnVuKQorCiskZHN0ID0gc2hpZnQ7CiskaW5zID0gc2hpZnQ7CisKK29wZW4oU1JDLCI8JGRzdCIpOworb3BlbihJTlMsIjwkaW5zIik7CitvcGVuKFRNUCwiPnRtcC5kZWxtZSIpOworCiskbCA9IDA7Cit3aGlsZSAoPFNSQz4pIHsKKyAgIGlmICgkXyA9fiAvU1RBUlRfSU5TLykgeworICAgICAgcHJpbnQgVE1QICRfOworICAgICAgJGwgPSAxOworICAgICAgd2hpbGUgKDxJTlM+KSB7CisgICAgICAgICBwcmludCBUTVAgJF87CisgICAgICB9CisgICAgICBjbG9zZSBJTlM7CisgICB9IGVsc2lmICgkXyA9fiAvRU5EX0lOUy8pIHsKKyAgICAgIHByaW50IFRNUCAkXzsKKyAgICAgICRsID0gMDsKKyAgIH0gZWxzaWYgKCRsID09IDApIHsKKyAgICAgIHByaW50IFRNUCAkXzsKKyAgIH0KK30KKworY2xvc2UgVE1QOworY2xvc2UgU1JDOwpkaWZmIC0tZ2l0IGEvZml4dXBpbmQucGwgYi9maXh1cGluZC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDNhZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZml4dXBpbmQucGwKQEAgLTAsMCArMSwxMSBAQAorb3BlbihJTiwiPGNyeXB0LmluZCIpOworb3BlbihPVVQsIj5jcnlwdC5pbmQudG1wIik7CiskYSA9IDxJTj47CitwcmludCBPVVQgICIkYVxuXFxhZGRjb250ZW50c2xpbmV7dG9jfXtjaGFwdGVyfXtJbmRleH1cbiI7Cit3aGlsZSAoPElOPikgeworICAgcHJpbnQgT1VUICRfOworfQorY2xvc2UgT1VUOworY2xvc2UgSU47CitzeXN0ZW0oIm12IC1mIGNyeXB0LmluZC50bXAgY3J5cHQuaW5kIik7CisKZGlmZiAtLWdpdCBhL2dlbmxpc3Quc2ggYi9nZW5saXN0LnNoCmluZGV4IDgzMmU4ZTcuLjAzZTEzYjMgMTAwNjQ0Ci0tLSBhL2dlbmxpc3Quc2gKKysrIGIvZ2VubGlzdC5zaApAQCAtMSwxMCArMSwxMCBAQAogIyEvYmluL2Jhc2gKICMgYWVzX3RhYi5vIGlzIGEgcHNldWRvIG9iamVjdCBhcyBpdCdzIG1hZGUgZnJvbSBhZXMubyBhbmQgTVBJIGlzIG9wdGlvbmFsCi1leHBvcnQgYT1gZWNobyAtbiAic3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyAqKE1QSU9CSkVDVCkgIiA7IGZpbmQgLiAtdHlwZSBmIHwgc29ydCB8IGdyZXAgIlsuXS9zcmMiIHwgZ3JlcCAiWy5dYyIgfCBncmVwIC12ICJzaGEyMjQiIHwgZ3JlcCAtdiAic2hhMzg0IiB8IGdyZXAgLXYgImFlc190YWIiIHwgZ3JlcCAtdiAidHdvZmlzaF90YWIiIHwgZ3JlcCAtdiAid2hpcmx0YWIiIHwgZ3JlcCAtdiAiZGhfc3lzIiB8IGdyZXAgLXYgImVjY19zeXMiIHwgZ3JlcCAtdiAibXBpWy5dYyIgfCBncmVwIC12ICJzb2JlcjEyOHRhYiIgfCBzZWQgLWUgJ3NFXC4vRUUnIHwgc2VkIC1lICdzL1wuYy9cLm8vJyB8IHhhcmdzYAorZXhwb3J0IGE9YGVjaG8gLW4gInNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm8gIiA7IGZpbmQgLiAtdHlwZSBmIHwgc29ydCB8IGdyZXAgIlsuXS9zcmMiIHwgZ3JlcCAiWy5dYyIgfCBncmVwIC12ICJzaGEyMjQiIHwgZ3JlcCAtdiAic2hhMzg0IiB8IGdyZXAgLXYgImFlc190YWIiIHwgZ3JlcCAtdiAidHdvZmlzaF90YWIiIHwgZ3JlcCAtdiAid2hpcmx0YWIiIHwgZ3JlcCAtdiAiZGhfc3lzIiB8IGdyZXAgLXYgImVjY19zeXMiIHwgZ3JlcCAtdiAibXBpWy5dYyIgfCBncmVwIC12ICJzb2JlcjEyOHRhYiIgfCBzZWQgLWUgJ3NFXC4vRUUnIHwgc2VkIC1lICdzL1wuYy9cLm8vJyB8IHhhcmdzYAogcGVybCAuL3BhcnNlbmFtZXMucGwgT0JKRUNUUyAiJGEiCiBleHBvcnQgYT1gZmluZCAuIC10eXBlIGYgfCBncmVwIFsuXS9zcmMgfCBncmVwIFsuXWggfCBzZWQgLWUgJ3NlXC4vZWUnIHwgeGFyZ3NgCiBwZXJsIC4vcGFyc2VuYW1lcy5wbCBIRUFERVJTICIkYSIKIAogIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9nZW5saXN0LnNoLHYgJCAgIAotIyAkUmV2aXNpb246IDEuMyAkICAgCi0jICREYXRlOiAyMDA1LzA1LzA1IDE0OjQ5OjI3ICQgCisjICRSZXZpc2lvbjogMS40ICQgICAKKyMgJERhdGU6IDIwMDUvMDcvMTcgMjM6MTU6MTIgJCAKZGlmZiAtLWdpdCBhL21ha2VmaWxlIGIvbWFrZWZpbGUKaW5kZXggZmJhNWY3My4uNTU0ZjA3MiAxMDA2NDQKLS0tIGEvbWFrZWZpbGUKKysrIGIvbWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAjIE1vZGlmaWVkIGJ5IENsYXkgQ3VsdmVyCiAKICMgVGhlIHZlcnNpb24KLVZFUlNJT049MS4wNQorVkVSU0lPTj0xLjE2CiAKICMgQ29tcGlsZXIgYW5kIExpbmtlciBOYW1lcwogI0NDPWdjYwpAQCAtMTQsMTIgKzE0LDIzIEBACiAjQVI9YXIKICNBUkZMQUdTPXIKIAoraWZuZGVmIE1BS0UKKyAgTUFLRT1tYWtlCitlbmRpZgorCisjIHJhbmxpYiB0b29scworaWZuZGVmIFJBTkxJQgorICAgUkFOTElCPXJhbmxpYgorZW5kaWYKKwogIyBDb21waWxhdGlvbiBmbGFncy4gTm90ZSB0aGUgKz0gZG9lcyBub3Qgd3JpdGUgb3ZlciB0aGUgdXNlcidzIENGTEFHUyEKLUNGTEFHUyArPSAtYyAtSS4vdGVzdHByb2YvIC1JLi9zcmMvaGVhZGVycy8gLVdhbGwgLVdzaWduLWNvbXBhcmUgLVcgLVdzaGFkb3cgLVduby11bnVzZWQtcGFyYW1ldGVyCitDRkxBR1MgKz0gLWMgLUkuL3Rlc3Rwcm9mLyAtSS4vc3JjL2hlYWRlcnMvIC1XYWxsIC1Xc2lnbi1jb21wYXJlIC1XIC1Xc2hhZG93IC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtRExUQ19TT1VSQ0UKIAogIyBhZGRpdGlvbmFsIHdhcm5pbmdzIChuZXdlciBHQ0MgMy40IGFuZCBoaWdoZXIpCi0jQ0ZMQUdTICs9IC1Xc3lzdGVtLWhlYWRlcnMgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyBcCi0jCQkgIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdwb2ludGVyLWFyaXRoIAoraWZkZWYgR0NDXzM0CitDRkxBR1MgKz0gLVdzeXN0ZW0taGVhZGVycyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJICAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XcG9pbnRlci1hcml0aCAKK2VuZGlmCiAKIGlmbmRlZiBJR05PUkVfU1BFRUQKIApAQCAtNDIsOCArNTMsMTQgQEAKICNDRkxBR1MgKz0gLWczIC1ETFRDX05PX0FTTQogCiAjT3V0cHV0IGZpbGVuYW1lcyBmb3IgdmFyaW91cyB0YXJnZXRzLgotTElCTkFNRT1saWJ0b21jcnlwdC5hCi1MSUJURVNUPXRlc3Rwcm9mL2xpYnRvbWNyeXB0X3Byb2YuYQoraWZuZGVmIExJQk5BTUUKKyAgIExJQk5BTUU9bGlidG9tY3J5cHQuYQorZW5kaWYKK2lmbmRlZiBMSUJURVNUCisgICBMSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YuYQorZW5kaWYKK0xJQlRFU1RfUz0kKExJQlRFU1QpCisKIEhBU0g9aGFzaHN1bQogQ1JZUFQ9ZW5jcnlwdAogU01BTEw9c21hbGwKQEAgLTU2LDEwICs3MywxOSBAQAogI0xJQlBBVEgtVGhlIGRpcmVjdG9yeSBmb3IgbGlidG9tY3J5cHQgdG8gYmUgaW5zdGFsbGVkIHRvLgogI0lOQ1BBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgZm9yIGxpYnRvbWNyeXB0LgogI0RBVEFQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGRmIGRvY3MuCi1ERVNURElSPQotTElCUEFUSD0vdXNyL2xpYgotSU5DUEFUSD0vdXNyL2luY2x1ZGUKLURBVEFQQVRIPS91c3Ivc2hhcmUvZG9jL2xpYnRvbWNyeXB0L3BkZgoraWZuZGVmIERFU1RESVIKKyAgIERFU1RESVI9CitlbmRpZgorCitpZm5kZWYgTElCUEFUSAorICAgTElCUEFUSD0vdXNyL2xpYgorZW5kaWYKK2lmbmRlZiBJTkNQQVRICisgICBJTkNQQVRIPS91c3IvaW5jbHVkZQorZW5kaWYKK2lmbmRlZiBEQVRBUEFUSAorICAgREFUQVBBVEg9L3Vzci9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmCitlbmRpZgogCiAjV2hvIGRvIHdlIGluc3RhbGwgYXM/CiBpZmRlZiBJTlNUQUxMX1VTRVIKQEAgLTc1LDE1ICsxMDEsMTAgQEAKIGVuZGlmCiAKICNMaXN0IG9mIG9iamVjdHMgdG8gY29tcGlsZS4KLQotI0xlYXZlIE1QSSBidWlsdC1pbiBvciBmb3JjZSBkZXZlbG9wZXIgdG8gbGluayBhZ2FpbnN0IGxpYnRvbW1hdGg/Ci1pZm5kZWYgSUdOT1JFX01QSQotTVBJT0JKRUNUPXNyYy9taXNjL21waS9tcGkubwotZW5kaWYKLQotT0JKRUNUUz1zcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vICQoTVBJT0JKRUNUKSBzcmMvY2lwaGVycy9hZXMvYWVzLm8gc3JjL2NpcGhlcnMvYW51YmlzLm8gXAotc3JjL2NpcGhlcnMvYmxvd2Zpc2gubyBzcmMvY2lwaGVycy9jYXN0NS5vIHNyYy9jaXBoZXJzL2Rlcy5vIHNyYy9jaXBoZXJzL2toYXphZC5vIHNyYy9jaXBoZXJzL25vZWtlb24ubyBcCi1zcmMvY2lwaGVycy9yYzIubyBzcmMvY2lwaGVycy9yYzUubyBzcmMvY2lwaGVycy9yYzYubyBzcmMvY2lwaGVycy9zYWZlci9zYWZlci5vIFwKKyNTVEFSVF9JTlMKK09CSkVDVFM9c3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyBzcmMvY2lwaGVycy9hZXMvYWVzLm8gc3JjL2NpcGhlcnMvYW51YmlzLm8gc3JjL2NpcGhlcnMvYmxvd2Zpc2gubyBcCitzcmMvY2lwaGVycy9jYXN0NS5vIHNyYy9jaXBoZXJzL2Rlcy5vIHNyYy9jaXBoZXJzL2thc3VtaS5vIHNyYy9jaXBoZXJzL2toYXphZC5vIHNyYy9jaXBoZXJzL2tzZWVkLm8gXAorc3JjL2NpcGhlcnMvbm9la2Vvbi5vIHNyYy9jaXBoZXJzL3JjMi5vIHNyYy9jaXBoZXJzL3JjNS5vIHNyYy9jaXBoZXJzL3JjNi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLm8gXAogc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJfdGFiLm8gc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJwLm8gc3JjL2NpcGhlcnMvc2tpcGphY2subyBcCiBzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubyBzcmMvY2lwaGVycy94dGVhLm8gc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkubyBcCiBzcmMvZW5jYXV0aC9jY20vY2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdC5vIFwKQEAgLTkxLDUxICsxMTIsNjMgQEAKIHNyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9pbml0Lm8gXAogc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfYWFkLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYubyBcCiBzcmMvZW5jYXV0aC9nY20vZ2NtX2RvbmUubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2dmX211bHQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQubyBcCi1zcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5vIHNyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5vIHNyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQubyBcCi1zcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vIFwKLXNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHQubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5vIHNyYy9lbmNhdXRoL2djbS9nY21fbXVsdF9oLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9yZXNldC5vIHNyYy9lbmNhdXRoL2djbS9nY21fdGVzdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdC5vIFwKIHNyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9udHoubyBcCiBzcmMvZW5jYXV0aC9vY2Ivb2NiX3NoaWZ0X3hvci5vIHNyYy9lbmNhdXRoL29jYi9vY2JfdGVzdC5vIHNyYy9lbmNhdXRoL29jYi9zX29jYl9kb25lLm8gXAogc3JjL2hhc2hlcy9jaGMvY2hjLm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlaGFuZGxlLm8gXAogc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnkubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5vIHNyYy9oYXNoZXMvbWQyLm8gc3JjL2hhc2hlcy9tZDQubyBcCi1zcmMvaGFzaGVzL21kNS5vIHNyYy9oYXNoZXMvcm1kMTI4Lm8gc3JjL2hhc2hlcy9ybWQxNjAubyBzcmMvaGFzaGVzL3NoYTEubyBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm8gXAotc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vIHNyYy9oYXNoZXMvdGlnZXIubyBzcmMvaGFzaGVzL3doaXJsL3doaXJsLm8gc3JjL21hYy9obWFjL2htYWNfZG9uZS5vIFwKLXNyYy9tYWMvaG1hYy9obWFjX2ZpbGUubyBzcmMvbWFjL2htYWMvaG1hY19pbml0Lm8gc3JjL21hYy9obWFjL2htYWNfbWVtb3J5Lm8gXAorc3JjL2hhc2hlcy9tZDUubyBzcmMvaGFzaGVzL3JtZDEyOC5vIHNyYy9oYXNoZXMvcm1kMTYwLm8gc3JjL2hhc2hlcy9ybWQyNTYubyBzcmMvaGFzaGVzL3JtZDMyMC5vIFwKK3NyYy9oYXNoZXMvc2hhMS5vIHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYubyBzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLm8gc3JjL2hhc2hlcy90aWdlci5vIFwKK3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwubyBzcmMvbWFjL2Y5L2Y5X2RvbmUubyBzcmMvbWFjL2Y5L2Y5X2ZpbGUubyBzcmMvbWFjL2Y5L2Y5X2luaXQubyBcCitzcmMvbWFjL2Y5L2Y5X21lbW9yeS5vIHNyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLm8gc3JjL21hYy9mOS9mOV9wcm9jZXNzLm8gc3JjL21hYy9mOS9mOV90ZXN0Lm8gXAorc3JjL21hYy9obWFjL2htYWNfZG9uZS5vIHNyYy9tYWMvaG1hYy9obWFjX2ZpbGUubyBzcmMvbWFjL2htYWMvaG1hY19pbml0Lm8gc3JjL21hYy9obWFjL2htYWNfbWVtb3J5Lm8gXAogc3JjL21hYy9obWFjL2htYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5vIHNyYy9tYWMvaG1hYy9obWFjX3Rlc3QubyBcCiBzcmMvbWFjL29tYWMvb21hY19kb25lLm8gc3JjL21hYy9vbWFjL29tYWNfZmlsZS5vIHNyYy9tYWMvb21hYy9vbWFjX2luaXQubyBzcmMvbWFjL29tYWMvb21hY19tZW1vcnkubyBcCiBzcmMvbWFjL29tYWMvb21hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLm8gc3JjL21hYy9vbWFjL29tYWNfdGVzdC5vIFwKIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLm8gc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5Lm8gc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fdGVzdC5vIFwKIHNyYy9tYWMvcG1hYy9wbWFjX2RvbmUubyBzcmMvbWFjL3BtYWMvcG1hY19maWxlLm8gc3JjL21hYy9wbWFjL3BtYWNfaW5pdC5vIHNyYy9tYWMvcG1hYy9wbWFjX21lbW9yeS5vIFwKIHNyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvcG1hYy9wbWFjX250ei5vIHNyYy9tYWMvcG1hYy9wbWFjX3Byb2Nlc3MubyBcCi1zcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IubyBzcmMvbWFjL3BtYWMvcG1hY190ZXN0Lm8gc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUubyBcCitzcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IubyBzcmMvbWFjL3BtYWMvcG1hY190ZXN0Lm8gc3JjL21hYy94Y2JjL3hjYmNfZG9uZS5vIFwKK3NyYy9tYWMveGNiYy94Y2JjX2ZpbGUubyBzcmMvbWFjL3hjYmMveGNiY19pbml0Lm8gc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5Lm8gXAorc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5X211bHRpLm8gc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5vIHNyYy9tYWMveGNiYy94Y2JjX3Rlc3QubyBcCitzcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5vIHNyYy9tYXRoL2dtcF9kZXNjLm8gc3JjL21hdGgvbHRtX2Rlc2MubyBzcmMvbWF0aC9tdWx0aS5vIFwKK3NyYy9tYXRoL3JhbmRfcHJpbWUubyBzcmMvbWF0aC90Zm1fZGVzYy5vIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLm8gXAogc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUubyBzcmMvbWlzYy9idXJuX3N0YWNrLm8gc3JjL21pc2MvY3J5cHQvY3J5cHQubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfZGVzY3JpcHRvci5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55Lm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2gubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfYW55Lm8gXAotc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm8gXAotc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9vaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9mc2EubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfbHRjX21wX2Rlc2NyaXB0b3IubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2Rlc2NyaXB0b3IubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfaGFzaC5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3BybmcubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfcHJuZy5vIFwKLXNyYy9taXNjL2Vycm9yX3RvX3N0cmluZy5vIHNyYy9taXNjL21waS9pc19wcmltZS5vIHNyYy9taXNjL21waS9tcGlfdG9fbHRjX2Vycm9yLm8gXAotc3JjL21pc2MvbXBpL3JhbmRfcHJpbWUubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8yLm8gc3JjL21pc2MvemVyb21lbS5vIFwKK3NyYy9taXNjL2Vycm9yX3RvX3N0cmluZy5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8xLm8gc3JjL21pc2MvcGtjczUvcGtjc181XzIubyBzcmMvbWlzYy96ZXJvbWVtLm8gXAogc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jYmMvY2JjX2RvbmUubyBzcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0Lm8gXAogc3JjL21vZGVzL2NiYy9jYmNfZ2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5vIHNyYy9tb2Rlcy9jYmMvY2JjX3N0YXJ0Lm8gXAogc3JjL21vZGVzL2NmYi9jZmJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUubyBzcmMvbW9kZXMvY2ZiL2NmYl9lbmNyeXB0Lm8gXAogc3JjL21vZGVzL2NmYi9jZmJfZ2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5vIHNyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0Lm8gXAogc3JjL21vZGVzL2N0ci9jdHJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jdHIvY3RyX2RvbmUubyBzcmMvbW9kZXMvY3RyL2N0cl9lbmNyeXB0Lm8gXAotc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vIHNyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0Lm8gXAorc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vIHNyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0Lm8gc3JjL21vZGVzL2N0ci9jdHJfdGVzdC5vIFwKIHNyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQubyBzcmMvbW9kZXMvZWNiL2VjYl9kb25lLm8gc3JjL21vZGVzL2VjYi9lY2JfZW5jcnlwdC5vIFwKLXNyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0Lm8gc3JjL21vZGVzL29mYi9vZmJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUubyBcCitzcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5vIHNyYy9tb2Rlcy9mOC9mOF9kZWNyeXB0Lm8gc3JjL21vZGVzL2Y4L2Y4X2RvbmUubyBzcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9mOC9mOF9nZXRpdi5vIHNyYy9tb2Rlcy9mOC9mOF9zZXRpdi5vIHNyYy9tb2Rlcy9mOC9mOF9zdGFydC5vIHNyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0Lm8gc3JjL21vZGVzL2xydy9scndfZG9uZS5vIHNyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5vIHNyYy9tb2Rlcy9scncvbHJ3X3Byb2Nlc3MubyBzcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0Lm8gc3JjL21vZGVzL2xydy9scndfdGVzdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm8gXAogc3JjL21vZGVzL29mYi9vZmJfZW5jcnlwdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2dldGl2Lm8gc3JjL21vZGVzL29mYi9vZmJfc2V0aXYubyBcCiBzcmMvbW9kZXMvb2ZiL29mYl9zdGFydC5vIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2RlY29kZV9iaXRfc3RyaW5nLm8gXAogc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5vIFwKLXNyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UubyBzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5vIFwKLXNyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfbGVuZ3RoX2lhNV9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIubyBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZW5jb2RlX2ludGVnZXIubyBcCi1zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZGVjb2RlX2Jvb2xlYW4ubyBzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZW5jb2RlX2Jvb2xlYW4ubyBcCitzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfbGVuZ3RoX2Jvb2xlYW4ubyBzcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLm8gXAorc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9lbmNvZGVfaWE1X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2RlY29kZV9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLm8gXAogc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIubyBcCiBzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllci5vIFwKIHNyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLm8gXApAQCAtMTQ0LDI5ICsxNzcsNDYgQEAKIHNyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZy5vIFwKIHNyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5vIFwKIHNyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9sZW5ndGhfcHJpbnRhYmxlX3N0cmluZy5vIFwKLXNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlLm8gc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkubyBcCi1zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZS5vIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLm8gXAotc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UubyBcCi1zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZGVjb2RlX3Nob3J0X2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9leC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLm8gc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX3NlcXVlbmNlX2ZyZWUubyBzcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldG9mLm8gc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAogc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAogc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2RlY29kZV91dGN0aW1lLm8gXAogc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2VuY29kZV91dGN0aW1lLm8gc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLm8gXAotc3JjL3BrL2RoL2RoLm8gc3JjL3BrL2RzYS9kc2FfZXhwb3J0Lm8gc3JjL3BrL2RzYS9kc2FfZnJlZS5vIHNyYy9way9kc2EvZHNhX2ltcG9ydC5vIFwKLXNyYy9way9kc2EvZHNhX21ha2Vfa2V5Lm8gc3JjL3BrL2RzYS9kc2Ffc2lnbl9oYXNoLm8gc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2hhc2gubyBcCi1zcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5Lm8gc3JjL3BrL2VjYy9lY2MubyBzcmMvcGsvcGFja2V0X3N0b3JlX2hlYWRlci5vIHNyYy9way9wYWNrZXRfdmFsaWRfaGVhZGVyLm8gXAotc3JjL3BrL3BrY3MxL3BrY3NfMV9pMm9zcC5vIHNyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9kZWNvZGUubyBcCi1zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZW5jb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5vIHNyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5vIFwKLXNyYy9way9wa2NzMS9wa2NzXzFfcHNzX2VuY29kZS5vIHNyYy9way9yc2EvcnNhX2RlY3J5cHRfa2V5Lm8gc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZGVjb2RlX3V0Zjhfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2VuY29kZV91dGY4X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9sZW5ndGhfdXRmOF9zdHJpbmcubyBzcmMvcGsvZHNhL2RzYV9kZWNyeXB0X2tleS5vIFwKK3NyYy9way9kc2EvZHNhX2VuY3J5cHRfa2V5Lm8gc3JjL3BrL2RzYS9kc2FfZXhwb3J0Lm8gc3JjL3BrL2RzYS9kc2FfZnJlZS5vIHNyYy9way9kc2EvZHNhX2ltcG9ydC5vIFwKK3NyYy9way9kc2EvZHNhX21ha2Vfa2V5Lm8gc3JjL3BrL2RzYS9kc2Ffc2hhcmVkX3NlY3JldC5vIHNyYy9way9kc2EvZHNhX3NpZ25faGFzaC5vIFwKK3NyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLm8gc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5vIHNyYy9way9lY2MvZWNjLm8gXAorc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2V4cG9ydC5vIHNyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19pbXBvcnQubyBzcmMvcGsvZWNjL2VjY19kZWNyeXB0X2tleS5vIFwKK3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5Lm8gc3JjL3BrL2VjYy9lY2NfZXhwb3J0Lm8gc3JjL3BrL2VjYy9lY2NfZnJlZS5vIHNyYy9way9lY2MvZWNjX2dldF9zaXplLm8gXAorc3JjL3BrL2VjYy9lY2NfaW1wb3J0Lm8gc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkubyBzcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0Lm8gXAorc3JjL3BrL2VjYy9lY2Nfc2lnbl9oYXNoLm8gc3JjL3BrL2VjYy9lY2Nfc2l6ZXMubyBzcmMvcGsvZWNjL2VjY190ZXN0Lm8gc3JjL3BrL2VjYy9lY2NfdmVyaWZ5X2hhc2gubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4Lm8gc3JjL3BrL2VjYy9sdGNfZWNjX21hcC5vIHNyYy9way9lY2MvbHRjX2VjY19tdWwyYWRkLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5vIHNyYy9way9lY2MvbHRjX2VjY19tdWxtb2RfdGltaW5nLm8gc3JjL3BrL2VjYy9sdGNfZWNjX3BvaW50cy5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5vIHNyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludC5vIFwKK3NyYy9way9rYXRqYS9rYXRqYV9kZWNyeXB0X2tleS5vIHNyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5vIHNyYy9way9rYXRqYS9rYXRqYV9leHBvcnQubyBcCitzcmMvcGsva2F0amEva2F0amFfZXhwdG1vZC5vIHNyYy9way9rYXRqYS9rYXRqYV9mcmVlLm8gc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5vIFwKK3NyYy9way9rYXRqYS9rYXRqYV9tYWtlX2tleS5vIHNyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AubyBzcmMvcGsvcGtjczEvcGtjc18xX21nZjEubyBcCitzcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAubyBcCitzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19kZWNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZGVjb2RlLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2VuY29kZS5vIHNyYy9way9yc2EvcnNhX2RlY3J5cHRfa2V5Lm8gc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkubyBcCiBzcmMvcGsvcnNhL3JzYV9leHBvcnQubyBzcmMvcGsvcnNhL3JzYV9leHB0bW9kLm8gc3JjL3BrL3JzYS9yc2FfZnJlZS5vIHNyYy9way9yc2EvcnNhX2ltcG9ydC5vIFwKIHNyYy9way9yc2EvcnNhX21ha2Vfa2V5Lm8gc3JjL3BrL3JzYS9yc2Ffc2lnbl9oYXNoLm8gc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2gubyBzcmMvcHJuZ3MvZm9ydHVuYS5vIFwKIHNyYy9wcm5ncy9yYzQubyBzcmMvcHJuZ3Mvcm5nX2dldF9ieXRlcy5vIHNyYy9wcm5ncy9ybmdfbWFrZV9wcm5nLm8gc3JjL3BybmdzL3NvYmVyMTI4Lm8gXAogc3JjL3BybmdzL3Nwcm5nLm8gc3JjL3BybmdzL3lhcnJvdy5vIAogCi1IRUFERVJTPXNyYy9oZWFkZXJzL3RvbW1hdGhfc3VwZXJjbGFzcy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oIFwKLXNyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oIFwKLXNyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrLmggc3JjL2hlYWRlcnMvdG9tbWF0aF9jbGFzcy5oIFwKLXNyYy9oZWFkZXJzL2x0Y190b21tYXRoLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaCBcCi1zcmMvaGVhZGVycy90b21jcnlwdC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmggdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCitIRUFERVJTPXNyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hdGguaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmggc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oIHRlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaAorCisjRU5EX0lOUwogCiBURVNUT0JKRUNUUz1kZW1vcy90ZXN0Lm8KIEhBU0hPQkpFQ1RTPWRlbW9zL2hhc2hzdW0ubwpAQCAtMTk0LDY3ICsyNDQsNzAgQEAKIHNyYy9jaXBoZXJzL2Flcy9hZXMubzogc3JjL2NpcGhlcnMvYWVzL2Flcy5jIHNyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMKIHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5vOiBzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYyBzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2hfdGFiLmMKIHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwubzogc3JjL2hhc2hlcy93aGlybC93aGlybC5jIHNyYy9oYXNoZXMvd2hpcmwvd2hpcmx0YWIuYwotc3JjL3BrL2VjYy9lY2Mubzogc3JjL3BrL2VjYy9lY2MuYyBzcmMvcGsvZWNjL2VjY19zeXMuYwotc3JjL3BrL2RoL2RoLm86IHNyYy9way9kaC9kaC5jIHNyYy9way9kaC9kaF9zeXMuYwogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vOiBzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLmMgc3JjL2hhc2hlcy9zaGEyL3NoYTM4NC5jCiBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm86IHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYuYyBzcmMvaGFzaGVzL3NoYTIvc2hhMjI0LmMKIAogI1RoaXMgcnVsZSBtYWtlcyB0aGUgbGlidG9tY3J5cHQgbGlicmFyeS4KIGxpYnJhcnk6ICQoTElCTkFNRSkKIAotJChMSUJURVNUKTogCi0JY2QgdGVzdHByb2YgOyBDRkxBR1M9IiQoQ0ZMQUdTKSIgbWFrZSAKK3Rlc3Rwcm9mLyQoTElCVEVTVCk6IAorCWNkIHRlc3Rwcm9mIDsgQ0ZMQUdTPSIkKENGTEFHUykiIExJQlRFU1RfUz0kKExJQlRFU1RfUykgJChNQUtFKSAKIAogJChMSUJOQU1FKTogJChPQkpFQ1RTKQogCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpFQ1RTKSAKLQlyYW5saWIgJChMSUJOQU1FKQorCSQoUkFOTElCKSAkQAogCiAjVGhpcyBydWxlIG1ha2VzIHRoZSBoYXNoIHByb2dyYW0gaW5jbHVkZWQgd2l0aCBsaWJ0b21jcnlwdAogaGFzaHN1bTogbGlicmFyeSAkKEhBU0hPQkpFQ1RTKQotCSQoQ0MpICQoSEFTSE9CSkVDVFMpICQoTElCTkFNRSkgLW8gJChIQVNIKSAkKFdBUk4pCisJJChDQykgJChIQVNIT0JKRUNUUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChIQVNIKSAkKFdBUk4pCiAKICNtYWtlcyB0aGUgY3J5cHQgcHJvZ3JhbQogY3J5cHQ6IGxpYnJhcnkgJChDUllQVE9CSkVDVFMpCi0JJChDQykgJChDUllQVE9CSkVDVFMpICQoTElCTkFNRSkgLW8gJChDUllQVCkgJChXQVJOKQorCSQoQ0MpICQoQ1JZUFRPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKENSWVBUKSAkKFdBUk4pCiAKICNtYWtlcyB0aGUgc21hbGwgcHJvZ3JhbQogc21hbGw6IGxpYnJhcnkgJChTTUFMTE9CSkVDVFMpCi0JJChDQykgJChTTUFMTE9CSkVDVFMpICQoTElCTkFNRSkgLW8gJChTTUFMTCkgJChXQVJOKQorCSQoQ0MpICQoU01BTExPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFNNQUxMKSAkKFdBUk4pCiAJCiB0dl9nZW46IGxpYnJhcnkgJChUVlMpCi0JJChDQykgJChUVlMpICQoTElCTkFNRSkgLW8gJChUVikKKwkkKENDKSAkKExERkxBR1MpICQoVFZTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRWKQogCiBtdWx0aTogbGlicmFyeSAkKE1VTFRJUykKLQkkKENDKSAkKE1VTFRJUykgJChMSUJOQU1FKSAtbyAkKE1VTFRJKQorCSQoQ0MpICQoTVVMVElTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKE1VTFRJKQogCi10aW1pbmc6IGxpYnJhcnkgJChMSUJURVNUKSAkKFRJTUlOR1MpCi0JJChDQykgJChUSU1JTkdTKSAkKExJQlRFU1QpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoVElNSU5HKQordGltaW5nOiBsaWJyYXJ5IHRlc3Rwcm9mLyQoTElCVEVTVCkgJChUSU1JTkdTKQorCSQoQ0MpICQoTERGTEFHUykgJChUSU1JTkdTKSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoVElNSU5HKQogCi10ZXN0OiBsaWJyYXJ5ICQoTElCVEVTVCkgJChURVNUUykKLQkkKENDKSAkKFRFU1RTKSAkKExJQlRFU1QpICQoTElCTkFNRSkgLW8gJChURVNUKQotCit0ZXN0OiBsaWJyYXJ5IHRlc3Rwcm9mLyQoTElCVEVTVCkgJChURVNUUykKKwkkKENDKSAkKExERkxBR1MpICQoVEVTVFMpIHRlc3Rwcm9mLyQoTElCVEVTVCkgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChURVNUKQogCiAjVGhpcyBydWxlIGluc3RhbGxzIHRoZSBsaWJyYXJ5IGFuZCB0aGUgaGVhZGVyIGZpbGVzLiBUaGlzIG11c3QgYmUgcnVuCiAjYXMgcm9vdCBpbiBvcmRlciB0byBoYXZlIGEgaGlnaCBlbm91Z2ggcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgY29ycmVjdAogI2RpcmVjdG9yaWVzIGFuZCB0byBzZXQgdGhlIG93bmVyIGFuZCBncm91cCB0byByb290LgoraWZuZGVmIE5PRE9DUwogaW5zdGFsbDogbGlicmFyeSBkb2NzCitlbHNlCitpbnN0YWxsOiBsaWJyYXJ5CitlbmRpZgogCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChMSUJQQVRIKQogCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChJTkNQQVRIKQogCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChEQVRBUEFUSCkKIAlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChMSUJOQU1FKSAkKERFU1RESVIpJChMSUJQQVRIKQogCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKEhFQURFUlMpICQoREVTVERJUikkKElOQ1BBVEgpCitpZm5kZWYgTk9ET0NTCiAJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpIGRvYy9jcnlwdC5wZGYgJChERVNURElSKSQoREFUQVBBVEgpCitlbmRpZgogCi1pbnN0YWxsX3Rlc3Q6ICQoTElCVEVTVCkKK2luc3RhbGxfdGVzdDogdGVzdHByb2YvJChMSUJURVNUKQogCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChMSUJQQVRIKQogCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChJTkNQQVRIKQotCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKExJQlRFU1QpICQoREVTVERJUikkKExJQlBBVEgpCisJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpIHRlc3Rwcm9mLyQoTElCVEVTVCkgJChERVNURElSKSQoTElCUEFUSCkKIAogcHJvZmlsZToKLQlDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtZ2VuZXJhdGUiIG1ha2UgdGltaW5nIEVYVFJBTElCUz0tbGdjb3YKKwlDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtZ2VuZXJhdGUiICQoTUFLRSkgdGltaW5nIEVYVFJBTElCUz0iJChFWFRSQUxJQlMpIC1sZ2NvdiIKIAkuL3RpbWluZwogCXJtIC1mIHRpbWluZyBgZmluZCAuIC10eXBlIGYgfCBncmVwIFsuXVthb10gfCB4YXJnc2AKLQlDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIiBtYWtlIHRpbWluZyBFWFRSQUxJQlM9LWxnY292CisJQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSIgJChNQUtFKSB0aW1pbmcgRVhUUkFMSUJTPSIkKEVYVFJBTElCUykgLWxnY292IgogCiAKICNUaGlzIHJ1bGUgY2xlYW5zIHRoZSBzb3VyY2UgdHJlZSBvZiBhbGwgY29tcGlsZWQgY29kZSwgbm90IGluY2x1ZGluZyB0aGUgcGRmCkBAIC0yODIsNyArMzM1LDcgQEAKICNidWlsZCB0aGUgZG94eSBmaWxlcyAocmVxdWlyZXMgRG94eWdlbiwgdGV0ZXggYW5kIHBhdGllbmNlKQogZG94eToKIAlkb3h5Z2VuCi0JY2QgZG9jL2RveHlnZW4vbGF0ZXggOyBtYWtlIDsgbXYgLWYgcmVmbWFuLnBkZiAuLi8uLi8uCisJY2QgZG9jL2RveHlnZW4vbGF0ZXggOyAke01BS0V9IDsgbXYgLWYgcmVmbWFuLnBkZiAuLi8uLi8uCiAJZWNobyBUaGUgaHVnZSBkb3h5Z2VuIFBERiBzaG91bGQgYmUgYXZhaWxhYmxlIGFzIGRvYy9yZWZtYW4ucGRmCiAJCiAjVGhpcyBidWlsZHMgdGhlIGNyeXB0LnBkZiBmaWxlLiBOb3RlIHRoYXQgdGhlIHJtIC1mICoucGRmIGhhcyBiZWVuIHJlbW92ZWQKQEAgLTI5NSw2ICszNDgsNyBAQAogCWxhdGV4IGNyeXB0ID4gL2Rldi9udWxsCiAJbGF0ZXggY3J5cHQgPiAvZGV2L251bGwKIAltYWtlaW5kZXggY3J5cHQuaWR4ID4gL2Rldi9udWxsCisJcGVybCBmaXh1cGluZC5wbAogCWxhdGV4IGNyeXB0ID4gL2Rldi9udWxsCiAJZHZpcGRmIGNyeXB0CiAJbXYgLWl2ZiBjcnlwdC5wZGYgZG9jL2NyeXB0LnBkZgpAQCAtMzA1LDYgKzM1OSw4IEBACiAJbGF0ZXggY3J5cHQgPiAvZGV2L251bGwKIAlsYXRleCBjcnlwdCA+IC9kZXYvbnVsbAogCW1ha2VpbmRleCBjcnlwdC5pZHgKKwlwZXJsIGZpeHVwaW5kLnBsCisJbGF0ZXggY3J5cHQgPiAvZGV2L251bGwKIAlsYXRleCBjcnlwdCA+IC9kZXYvbnVsbAogCiAjemlwdXAgdGhlIHByb2plY3QgKHRha2UgdGhhdCEpCkBAIC0zMjQsNSArMzgwLDUgQEAKIAogCiAjICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L21ha2VmaWxlLHYgJCAKLSMgJFJldmlzaW9uOiAxLjcwICQgCi0jICREYXRlOiAyMDA1LzA2LzE5IDE4OjAzOjI0ICQgCisjICRSZXZpc2lvbjogMS4xNDUgJCAKKyMgJERhdGU6IDIwMDYvMTIvMDIgMTk6MjM6MjEgJCAKZGlmZiAtLWdpdCBhL21ha2VmaWxlLmljYyBiL21ha2VmaWxlLmljYwppbmRleCBhOWFiMzhmLi4zZmFmY2YxIDEwMDY0NAotLS0gYS9tYWtlZmlsZS5pY2MKKysrIGIvbWFrZWZpbGUuaWNjCkBAIC0xMiw5ICsxMiw5IEBACiAjCiAjIFRvbSBTdCBEZW5pcwogCi0jY2gxLTAxLTEKICMgQ29tcGlsZXIgYW5kIExpbmtlciBOYW1lcwogQ0M9aWNjCisKICNMRD1sZAogCiAjIEFyY2hpdmVyIFttYWtlcyAuYSBmaWxlc10KQEAgLTIyLDcgKzIyLDEyIEBACiAjQVJGTEFHUz1yCiAKICMgQ29tcGlsYXRpb24gZmxhZ3MuIE5vdGUgdGhlICs9IGRvZXMgbm90IHdyaXRlIG92ZXIgdGhlIHVzZXIncyBDRkxBR1MhCi1DRkxBR1MgKz0gLWMgLUlzcmMvaGVhZGVycy8gLUl0ZXN0cHJvZi8gLURJTlRFTF9DQworQ0ZMQUdTICs9IC1jIC1Jc3JjL2hlYWRlcnMvIC1JdGVzdHByb2YvIC1ESU5URUxfQ0MgLURMVENfU09VUkNFCisKKyNJQ0MgdjkgZG9lc24ndCBzdXBwb3J0IExUQ19GQVNUIGZvciB0aGluZ3MgbGlrZSBQZWxpY2FuIE1BQworI0Rlc3BpdGUgdGhlIGZhY3QgSSBjYW4ndCBzZWUgd2hhdCdzIHdyb25nIHdpdGggbXkgY29kZQorI09oIHdlbGwKK0NGTEFHUyArPSAtRExUQ19OT19GQVNUCiAKICNUaGUgZGVmYXVsdCBydWxlIGZvciBtYWtlIGJ1aWxkcyB0aGUgbGlidG9tY3J5cHQgbGlicmFyeS4KIGRlZmF1bHQ6bGlicmFyeQpAQCAtMzEsNyArMzYsNyBAQAogIwogIyAtbWNwdT0gY2FuIGJlIHBlbnRpdW0sIHBlbnRpdW1wcm8gKGNvdmVycyBQSUkgdGhyb3VnaCBQSUlJKSBvciBwZW50aXVtNAogIyAtYXg/CXNwZWNpZmllcyBtYWtlIGNvZGUgc3BlY2lmaWNhbGx5IGZvciA/IGJ1dCBjb21wYXRpYmxlIHdpdGggSUEtMzIKLSMgLXg/CSBzcGVjaWZpZXMgY29tcGlsZSBzb2xlbHkgZm9yID8gW25vdCBzcGVjaWZpY2FsbHkgSUEtMzIgY29tcGF0aWJsZV0KKyMgLXg/CSAgIHNwZWNpZmllcyBjb21waWxlIHNvbGVseSBmb3IgPyBbbm90IHNwZWNpZmljYWxseSBJQS0zMiBjb21wYXRpYmxlXQogIwogIyB3aGVyZSA/IGlzIAogIwlLIC0gUElJSQpAQCAtNTUsOCArNjAsMTMgQEAKICNUaGVzZSBmbGFncyBjb250cm9sIGhvdyB0aGUgbGlicmFyeSBnZXRzIGJ1aWx0LgogCiAjT3V0cHV0IGZpbGVuYW1lcyBmb3IgdmFyaW91cyB0YXJnZXRzLgotTElCTkFNRT1saWJ0b21jcnlwdC5hCi1MSUJURVNUPXRlc3Rwcm9mL2xpYnRvbWNyeXB0X3Byb2YuYQoraWZuZGVmIExJQk5BTUUKKyAgIExJQk5BTUU9bGlidG9tY3J5cHQuYQorZW5kaWYKK2lmbmRlZiBMSUJURVNUCisgICBMSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YuYQorICAgTElCVEVTVF9TPSQoTElCVEVTVCkKK2VuZGlmCiBIQVNIPWhhc2hzdW0KIENSWVBUPWVuY3J5cHQKIFNNQUxMPXNtYWxsCkBAIC02OSwxOSArNzksMjQgQEAKICNMSUJQQVRILVRoZSBkaXJlY3RvcnkgZm9yIGxpYnRvbWNyeXB0IHRvIGJlIGluc3RhbGxlZCB0by4KICNJTkNQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgaGVhZGVyIGZpbGVzIGZvciBsaWJ0b21jcnlwdC4KICNEQVRBUEFUSC1UaGUgZGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIHBkZiBkb2NzLgotREVTVERJUj0KLUxJQlBBVEg9L3Vzci9saWIKLUlOQ1BBVEg9L3Vzci9pbmNsdWRlCi1EQVRBUEFUSD0vdXNyL3NoYXJlL2RvYy9saWJ0b21jcnlwdC9wZGYKK2lmbmRlZiBERVNURElSCisgICBERVNURElSPQorZW5kaWYKK2lmbmRlZiBMSUJQQVRICisgICBMSUJQQVRIPS91c3IvbGliCitlbmRpZgoraWZuZGVmIElOQ1BBVEgKKyAgIElOQ1BBVEg9L3Vzci9pbmNsdWRlCitlbmRpZgoraWZuZGVmIERBVEFQQVRICisgICBEQVRBUEFUSD0vdXNyL3NoYXJlL2RvYy9saWJ0b21jcnlwdC9wZGYKK2VuZGlmCiAKICNMaXN0IG9mIG9iamVjdHMgdG8gY29tcGlsZS4KLQotI0xlYXZlIE1QSSBidWlsdC1pbiBvciBmb3JjZSBkZXZlbG9wZXIgdG8gbGluayBhZ2FpbnN0IGxpYnRvbW1hdGg/Ci1NUElPQkpFQ1Q9c3JjL21pc2MvbXBpL21waS5vCi0KLU9CSkVDVFM9c3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyAkKE1QSU9CSkVDVCkgc3JjL2NpcGhlcnMvYWVzL2Flcy5vIHNyYy9jaXBoZXJzL2FudWJpcy5vIFwKLXNyYy9jaXBoZXJzL2Jsb3dmaXNoLm8gc3JjL2NpcGhlcnMvY2FzdDUubyBzcmMvY2lwaGVycy9kZXMubyBzcmMvY2lwaGVycy9raGF6YWQubyBzcmMvY2lwaGVycy9ub2VrZW9uLm8gXAotc3JjL2NpcGhlcnMvcmMyLm8gc3JjL2NpcGhlcnMvcmM1Lm8gc3JjL2NpcGhlcnMvcmM2Lm8gc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIubyBcCisjU1RBUlRfSU5TCitPQkpFQ1RTPXNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm8gc3JjL2NpcGhlcnMvYWVzL2Flcy5vIHNyYy9jaXBoZXJzL2FudWJpcy5vIHNyYy9jaXBoZXJzL2Jsb3dmaXNoLm8gXAorc3JjL2NpcGhlcnMvY2FzdDUubyBzcmMvY2lwaGVycy9kZXMubyBzcmMvY2lwaGVycy9rYXN1bWkubyBzcmMvY2lwaGVycy9raGF6YWQubyBzcmMvY2lwaGVycy9rc2VlZC5vIFwKK3NyYy9jaXBoZXJzL25vZWtlb24ubyBzcmMvY2lwaGVycy9yYzIubyBzcmMvY2lwaGVycy9yYzUubyBzcmMvY2lwaGVycy9yYzYubyBzcmMvY2lwaGVycy9zYWZlci9zYWZlci5vIFwKIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5vIHNyYy9jaXBoZXJzL3NraXBqYWNrLm8gXAogc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLm8gc3JjL2NpcGhlcnMveHRlYS5vIHNyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5Lm8gXAogc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQubyBcCkBAIC04OSw1MSArMTA0LDYzIEBACiBzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5vIFwKIHNyYy9lbmNhdXRoL2VheC9lYXhfdGVzdC5vIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5vIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2Lm8gXAogc3JjL2VuY2F1dGgvZ2NtL2djbV9kb25lLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9pbml0Lm8gXAotc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0Lm8gXAotc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkubyBcCi1zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkubyBzcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5vIHNyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHQubyBcCiBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vIHNyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfbnR6Lm8gXAogc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5vIFwKIHNyYy9oYXNoZXMvY2hjL2NoYy5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5vIFwKIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5Lm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkubyBzcmMvaGFzaGVzL21kMi5vIHNyYy9oYXNoZXMvbWQ0Lm8gXAotc3JjL2hhc2hlcy9tZDUubyBzcmMvaGFzaGVzL3JtZDEyOC5vIHNyYy9oYXNoZXMvcm1kMTYwLm8gc3JjL2hhc2hlcy9zaGExLm8gc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vIFwKLXNyYy9oYXNoZXMvc2hhMi9zaGE1MTIubyBzcmMvaGFzaGVzL3RpZ2VyLm8gc3JjL2hhc2hlcy93aGlybC93aGlybC5vIHNyYy9tYWMvaG1hYy9obWFjX2RvbmUubyBcCi1zcmMvbWFjL2htYWMvaG1hY19maWxlLm8gc3JjL21hYy9obWFjL2htYWNfaW5pdC5vIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vIFwKK3NyYy9oYXNoZXMvbWQ1Lm8gc3JjL2hhc2hlcy9ybWQxMjgubyBzcmMvaGFzaGVzL3JtZDE2MC5vIHNyYy9oYXNoZXMvcm1kMjU2Lm8gc3JjL2hhc2hlcy9ybWQzMjAubyBcCitzcmMvaGFzaGVzL3NoYTEubyBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm8gc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vIHNyYy9oYXNoZXMvdGlnZXIubyBcCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm8gc3JjL21hYy9mOS9mOV9kb25lLm8gc3JjL21hYy9mOS9mOV9maWxlLm8gc3JjL21hYy9mOS9mOV9pbml0Lm8gXAorc3JjL21hYy9mOS9mOV9tZW1vcnkubyBzcmMvbWFjL2Y5L2Y5X21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvZjkvZjlfcHJvY2Vzcy5vIHNyYy9tYWMvZjkvZjlfdGVzdC5vIFwKK3NyYy9tYWMvaG1hYy9obWFjX2RvbmUubyBzcmMvbWFjL2htYWMvaG1hY19maWxlLm8gc3JjL21hYy9obWFjL2htYWNfaW5pdC5vIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vIFwKIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3MubyBzcmMvbWFjL2htYWMvaG1hY190ZXN0Lm8gXAogc3JjL21hYy9vbWFjL29tYWNfZG9uZS5vIHNyYy9tYWMvb21hYy9vbWFjX2ZpbGUubyBzcmMvbWFjL29tYWMvb21hY19pbml0Lm8gc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5Lm8gXAogc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5vIHNyYy9tYWMvb21hYy9vbWFjX3Rlc3QubyBcCiBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QubyBcCiBzcmMvbWFjL3BtYWMvcG1hY19kb25lLm8gc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5vIHNyYy9tYWMvcG1hYy9wbWFjX2luaXQubyBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnkubyBcCiBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL3BtYWMvcG1hY19udHoubyBzcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLm8gXAotc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm8gc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5vIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLm8gXAorc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm8gc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5vIHNyYy9tYWMveGNiYy94Y2JjX2RvbmUubyBcCitzcmMvbWFjL3hjYmMveGNiY19maWxlLm8gc3JjL21hYy94Y2JjL3hjYmNfaW5pdC5vIHNyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5vIFwKK3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMveGNiYy94Y2JjX3Byb2Nlc3MubyBzcmMvbWFjL3hjYmMveGNiY190ZXN0Lm8gXAorc3JjL21hdGgvZnAvbHRjX2VjY19mcF9tdWxtb2QubyBzcmMvbWF0aC9nbXBfZGVzYy5vIHNyYy9tYXRoL2x0bV9kZXNjLm8gc3JjL21hdGgvbXVsdGkubyBcCitzcmMvbWF0aC9yYW5kX3ByaW1lLm8gc3JjL21hdGgvdGZtX2Rlc2MubyBzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5vIFwKIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZW5jb2RlLm8gc3JjL21pc2MvYnVybl9zdGFjay5vIHNyYy9taXNjL2NyeXB0L2NyeXB0Lm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3IubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlci5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5vIFwKLXNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5vIFwKLXNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfZGVzY3JpcHRvci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZnNhLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2NpcGhlci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2gubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2hhc2gubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcubyBcCi1zcmMvbWlzYy9lcnJvcl90b19zdHJpbmcubyBzcmMvbWlzYy9tcGkvaXNfcHJpbWUubyBzcmMvbWlzYy9tcGkvbXBpX3RvX2x0Y19lcnJvci5vIFwKLXNyYy9taXNjL21waS9yYW5kX3ByaW1lLm8gc3JjL21pc2MvcGtjczUvcGtjc181XzEubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5vIHNyYy9taXNjL3plcm9tZW0ubyBcCitzcmMvbWlzYy9lcnJvcl90b19zdHJpbmcubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8yLm8gc3JjL21pc2MvemVyb21lbS5vIFwKIHNyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQubyBzcmMvbW9kZXMvY2JjL2NiY19kb25lLm8gc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5vIFwKIHNyYy9tb2Rlcy9jYmMvY2JjX2dldGl2Lm8gc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zdGFydC5vIFwKIHNyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvY2ZiL2NmYl9kb25lLm8gc3JjL21vZGVzL2NmYi9jZmJfZW5jcnlwdC5vIFwKIHNyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2Lm8gc3JjL21vZGVzL2NmYi9jZmJfc2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zdGFydC5vIFwKIHNyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQubyBzcmMvbW9kZXMvY3RyL2N0cl9kb25lLm8gc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5vIFwKLXNyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5vIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5vIHNyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QubyBcCiBzcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0Lm8gc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5vIHNyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQubyBcCi1zcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm8gXAorc3JjL21vZGVzL2VjYi9lY2Jfc3RhcnQubyBzcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5vIHNyYy9tb2Rlcy9mOC9mOF9kb25lLm8gc3JjL21vZGVzL2Y4L2Y4X2VuY3J5cHQubyBcCitzcmMvbW9kZXMvZjgvZjhfZ2V0aXYubyBzcmMvbW9kZXMvZjgvZjhfc2V0aXYubyBzcmMvbW9kZXMvZjgvZjhfc3RhcnQubyBzcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLm8gXAorc3JjL21vZGVzL2xydy9scndfZGVjcnlwdC5vIHNyYy9tb2Rlcy9scncvbHJ3X2RvbmUubyBzcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2xydy9scndfZ2V0aXYubyBzcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLm8gc3JjL21vZGVzL2xydy9scndfc2V0aXYubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5vIHNyYy9tb2Rlcy9scncvbHJ3X3Rlc3QubyBzcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0Lm8gc3JjL21vZGVzL29mYi9vZmJfZG9uZS5vIFwKIHNyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5vIHNyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2Lm8gXAogc3JjL21vZGVzL29mYi9vZmJfc3RhcnQubyBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5vIFwKIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfbGVuZ3RoX2JpdF9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLm8gc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9lbmNvZGVfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLm8gXAotc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2RlY29kZV9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLm8gXAotc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2RlY29kZV9ib29sZWFuLm8gc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2VuY29kZV9ib29sZWFuLm8gXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2xlbmd0aF9ib29sZWFuLm8gc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5vIFwKK3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2RlY29kZV9pYTVfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZW5jb2RlX2lhNV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5vIFwKK3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5vIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9sZW5ndGhfaW50ZWdlci5vIFwKIHNyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLm8gXAogc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIubyBcCiBzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5vIFwKQEAgLTE0MiwyOSArMTY5LDU5IEBACiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZS5vIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLm8gXAotc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2UubyBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5vIFwKLXNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLm8gXAotc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXgubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aS5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXgubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5vIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9zZXF1ZW5jZV9mcmVlLm8gc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5vIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5vIFwKIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9lbmNvZGVfc2hvcnRfaW50ZWdlci5vIFwKIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9sZW5ndGhfc2hvcnRfaW50ZWdlci5vIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5vIFwKIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5vIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5vIFwKLXNyYy9way9kaC9kaC5vIHNyYy9way9kc2EvZHNhX2V4cG9ydC5vIHNyYy9way9kc2EvZHNhX2ZyZWUubyBzcmMvcGsvZHNhL2RzYV9pbXBvcnQubyBcCi1zcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5vIHNyYy9way9kc2EvZHNhX3NpZ25faGFzaC5vIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLm8gXAotc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5vIHNyYy9way9lY2MvZWNjLm8gc3JjL3BrL3BhY2tldF9zdG9yZV9oZWFkZXIubyBzcmMvcGsvcGFja2V0X3ZhbGlkX2hlYWRlci5vIFwKLXNyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AubyBzcmMvcGsvcGtjczEvcGtjc18xX21nZjEubyBzcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLm8gXAotc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAubyBzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19kZWNvZGUubyBcCi1zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUubyBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vIHNyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLm8gc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5vIHNyYy9way9kc2EvZHNhX2V4cG9ydC5vIHNyYy9way9kc2EvZHNhX2ZyZWUubyBzcmMvcGsvZHNhL2RzYV9pbXBvcnQubyBcCitzcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5vIHNyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQubyBzcmMvcGsvZHNhL2RzYV9zaWduX2hhc2gubyBcCitzcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5vIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkubyBzcmMvcGsvZWNjL2VjYy5vIFwKK3NyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19leHBvcnQubyBzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0Lm8gc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZWNjL2VjY19lbmNyeXB0X2tleS5vIHNyYy9way9lY2MvZWNjX2V4cG9ydC5vIHNyYy9way9lY2MvZWNjX2ZyZWUubyBzcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5vIFwKK3NyYy9way9lY2MvZWNjX2ltcG9ydC5vIHNyYy9way9lY2MvZWNjX21ha2Vfa2V5Lm8gc3JjL3BrL2VjYy9lY2Nfc2hhcmVkX3NlY3JldC5vIFwKK3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5vIHNyYy9way9lY2MvZWNjX3NpemVzLm8gc3JjL3BrL2VjYy9lY2NfdGVzdC5vIHNyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5vIHNyYy9way9lY2MvbHRjX2VjY19tYXAubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5vIHNyYy9way9lY2MvbHRjX2VjY19wb2ludHMubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQubyBzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQubyBcCitzcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZXhwb3J0Lm8gXAorc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QubyBzcmMvcGsva2F0amEva2F0amFfZnJlZS5vIHNyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQubyBcCitzcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkubyBzcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9tZ2YxLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX29zMmlwLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5vIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9lbmNvZGUubyBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vIHNyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5Lm8gXAogc3JjL3BrL3JzYS9yc2FfZXhwb3J0Lm8gc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5vIHNyYy9way9yc2EvcnNhX2ZyZWUubyBzcmMvcGsvcnNhL3JzYV9pbXBvcnQubyBcCiBzcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5vIHNyYy9way9yc2EvcnNhX3NpZ25faGFzaC5vIHNyYy9way9yc2EvcnNhX3ZlcmlmeV9oYXNoLm8gc3JjL3BybmdzL2ZvcnR1bmEubyBcCiBzcmMvcHJuZ3MvcmM0Lm8gc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMubyBzcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5vIHNyYy9wcm5ncy9zb2JlcjEyOC5vIFwKIHNyYy9wcm5ncy9zcHJuZy5vIHNyYy9wcm5ncy95YXJyb3cubyAKIAotSEVBREVSUz1zcmMvaGVhZGVycy90b21tYXRoX3N1cGVyY2xhc3MuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaCBcCi1zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaCBzcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaCBcCi1zcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCBzcmMvaGVhZGVycy90b21jcnlwdF9way5oIHNyYy9oZWFkZXJzL3RvbW1hdGhfY2xhc3MuaCBcCi1zcmMvaGVhZGVycy9sdGNfdG9tbWF0aC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBzcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmggXAotc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oIHRlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaAorSEVBREVSUz1zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaCBzcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9way5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWlzYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0Lmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BybmcuaCB0ZXN0cHJvZi90b21jcnlwdF90ZXN0LmgKKworI0VORF9JTlMKKworI1dobyBkbyB3ZSBpbnN0YWxsIGFzPworaWZkZWYgSU5TVEFMTF9VU0VSCitVU0VSPSQoSU5TVEFMTF9VU0VSKQorZWxzZQorVVNFUj1yb290CitlbmRpZgorCitpZmRlZiBJTlNUQUxMX0dST1VQCitHUk9VUD0kKElOU1RBTExfR1JPVVApCitlbHNlCitHUk9VUD13aGVlbAorZW5kaWYKIAogI2NpcGhlcnMgY29tZSBpbiB0d28gZmxhdm91cnMuLi4gZW5jK2RlYyBhbmQgZW5jIAogYWVzX2VuYy5vOiBhZXMuYyBhZXNfdGFiLmMKQEAgLTE3NywxMiArMjM0LDYgQEAKIFRJTUlOR1M9ZGVtb3MvdGltaW5nLm8KIFRFU1RTPWRlbW9zL3Rlc3QubwogCi0jRmlsZXMgbGVmdCBvdmVyIGZyb20gbWFraW5nIHRoZSBjcnlwdC5wZGYuCi1MRUZUT1ZFUlM9Ki5kdmkgKi5sb2cgKi5hdXggKi50b2MgKi5pZHggKi5pbGcgKi5pbmQKLQotI0NvbXByZXNzZWQgZmlsZW5hbWVzCi1DT01QUkVTU0VEPWNyeXB0LnRhci5iejIgY3J5cHQuemlwIGNyeXB0LnRhci5negotCiAjY2lwaGVycyBjb21lIGluIHR3byBmbGF2b3Vycy4uLiBlbmMrZGVjIGFuZCBlbmMgCiBzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtREVOQ1JZUFRfT05MWSAtYyBzcmMvY2lwaGVycy9hZXMvYWVzLmMgLW8gc3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubwpAQCAtMTkxLDUyICsyNDIsNTEgQEAKIHNyYy9jaXBoZXJzL2Flcy9hZXMubzogc3JjL2NpcGhlcnMvYWVzL2Flcy5jIHNyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMKIHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5vOiBzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYyBzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2hfdGFiLmMKIHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwubzogc3JjL2hhc2hlcy93aGlybC93aGlybC5jIHNyYy9oYXNoZXMvd2hpcmwvd2hpcmx0YWIuYwotc3JjL3BrL2VjYy9lY2Mubzogc3JjL3BrL2VjYy9lY2MuYyBzcmMvcGsvZWNjL2VjY19zeXMuYwotc3JjL3BrL2RoL2RoLm86IHNyYy9way9kaC9kaC5jIHNyYy9way9kaC9kaF9zeXMuYwogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vOiBzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLmMgc3JjL2hhc2hlcy9zaGEyL3NoYTM4NC5jCiBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm86IHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYuYyBzcmMvaGFzaGVzL3NoYTIvc2hhMjI0LmMKIAogI1RoaXMgcnVsZSBtYWtlcyB0aGUgbGlidG9tY3J5cHQgbGlicmFyeS4KLWxpYnJhcnk6ICQoTElCVEVTVCkgJChMSUJOQU1FKQorbGlicmFyeTogJChMSUJOQU1FKQogCi0kKExJQlRFU1QpOgotCWNkIHRlc3Rwcm9mIDsgbWFrZSAtZiBtYWtlZmlsZS5pY2MKK3Rlc3Rwcm9mLyQoTElCVEVTVCk6CisJY2QgdGVzdHByb2YgOyBMSUJURVNUX1M9JChMSUJURVNUKSBDRkxBR1M9IiQoQ0ZMQUdTKSIgbWFrZSAtZiBtYWtlZmlsZS5pY2MKIAogJChMSUJOQU1FKTogJChPQkpFQ1RTKQogCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpFQ1RTKQotCXJhbmxpYiAkKExJQk5BTUUpCisJcmFubGliICRACiAKICNUaGlzIHJ1bGUgbWFrZXMgdGhlIGhhc2ggcHJvZ3JhbSBpbmNsdWRlZCB3aXRoIGxpYnRvbWNyeXB0CiBoYXNoc3VtOiBsaWJyYXJ5ICQoSEFTSE9CSkVDVFMpCi0JJChDQykgJChIQVNIT0JKRUNUUykgJChMSUJOQU1FKSAtbyAkKEhBU0gpICQoV0FSTikKKwkkKENDKSAkKEhBU0hPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKEhBU0gpICQoV0FSTikKIAogI21ha2VzIHRoZSBjcnlwdCBwcm9ncmFtCiBjcnlwdDogbGlicmFyeSAkKENSWVBUT0JKRUNUUykKLQkkKENDKSAkKENSWVBUT0JKRUNUUykgJChMSUJOQU1FKSAtbyAkKENSWVBUKSAkKFdBUk4pCisJJChDQykgJChDUllQVE9CSkVDVFMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoQ1JZUFQpICQoV0FSTikKIAogI21ha2VzIHRoZSBzbWFsbCBwcm9ncmFtCiBzbWFsbDogbGlicmFyeSAkKFNNQUxMT0JKRUNUUykKLQkkKENDKSAkKFNNQUxMT0JKRUNUUykgJChMSUJOQU1FKSAtbyAkKFNNQUxMKSAkKFdBUk4pCisJJChDQykgJChTTUFMTE9CSkVDVFMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoU01BTEwpICQoV0FSTikKIAkKIHR2X2dlbjogbGlicmFyeSAkKFRWUykKLQkkKENDKSAkKFRWUykgJChMSUJOQU1FKSAtbyAkKFRWKQorCSQoQ0MpICQoVFZTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRWKQogCi10aW1pbmc6IGxpYnJhcnkgJChUSU1JTkdTKQotCSQoQ0MpICQoVElNSU5HUykgJChMSUJURVNUKSAkKExJQk5BTUUpIC1vICQoVElNSU5HKQordGltaW5nOiBsaWJyYXJ5ICQoVElNSU5HUykgdGVzdHByb2YvJChMSUJURVNUKQorCSQoQ0MpICQoVElNSU5HUykgdGVzdHByb2YvJChMSUJURVNUKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRJTUlORykKIAotdGVzdDogbGlicmFyeSAkKFRFU1RTKQotCSQoQ0MpICQoVEVTVFMpICQoTElCVEVTVCkgJChMSUJOQU1FKSAtbyAkKFRFU1QpCit0ZXN0OiBsaWJyYXJ5ICQoVEVTVFMpIHRlc3Rwcm9mLyQoTElCVEVTVCkKKwkkKENDKSAkKFRFU1RTKSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoVEVTVCkKICAgCiAjVGhpcyBydWxlIGluc3RhbGxzIHRoZSBsaWJyYXJ5IGFuZCB0aGUgaGVhZGVyIGZpbGVzLiBUaGlzIG11c3QgYmUgcnVuCiAjYXMgcm9vdCBpbiBvcmRlciB0byBoYXZlIGEgaGlnaCBlbm91Z2ggcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgY29ycmVjdAogI2RpcmVjdG9yaWVzIGFuZCB0byBzZXQgdGhlIG93bmVyIGFuZCBncm91cCB0byByb290LgogaW5zdGFsbDogbGlicmFyeQotCWluc3RhbGwgLWQgLWcgcm9vdCAtbyByb290ICQoREVTVERJUikkKExJQlBBVEgpCi0JaW5zdGFsbCAtZCAtZyByb290IC1vIHJvb3QgJChERVNURElSKSQoSU5DUEFUSCkKLQlpbnN0YWxsIC1nIHJvb3QgLW8gcm9vdCAkKExJQk5BTUUpICQoREVTVERJUikkKExJQlBBVEgpCi0JaW5zdGFsbCAtZyByb290IC1vIHJvb3QgJChMSUJURVNUKSAkKERFU1RESVIpJChMSUJQQVRIKQotCWluc3RhbGwgLWcgcm9vdCAtbyByb290ICQoSEVBREVSUykgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChMSUJOQU1FKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKExJQlRFU1QpICQoREVTVERJUikkKExJQlBBVEgpCisJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoSEVBREVSUykgJChERVNURElSKSQoSU5DUEFUSCkKIAogIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9tYWtlZmlsZS5pY2MsdiAkICAgCi0jICRSZXZpc2lvbjogMS4zMyAkICAgCi0jICREYXRlOiAyMDA1LzA2LzE5IDE4OjIyOjMxICQgCisjICRSZXZpc2lvbjogMS43MyAkICAgCisjICREYXRlOiAyMDA2LzEyLzAyIDE5OjIzOjIxICQgCisKZGlmZiAtLWdpdCBhL21ha2VmaWxlLm1zdmMgYi9tYWtlZmlsZS5tc3ZjCmluZGV4IGFlMDEwNzkuLjJkNDA4ZGYgMTAwNjQ0Ci0tLSBhL21ha2VmaWxlLm1zdmMKKysrIGIvbWFrZWZpbGUubXN2YwpAQCAtMSwxNiArMSwxMiBAQAogI01TVkMgTWFrZWZpbGUgW3Rlc3RlZCB3aXRoIE1TVkMgNi4wMCB3aXRoIFNQNV0KICMKICNUb20gU3QgRGVuaXMKLUNGTEFHUyA9IC9Jc3JjL2hlYWRlcnMvIC9JdGVzdHByb2YvIC9PeCAvRFdJTjMyIC9XMyAvRm8kQAorQ0ZMQUdTID0gL0lzcmMvaGVhZGVycy8gL0l0ZXN0cHJvZi8gL094IC9EV0lOMzIgL0RMVENfU09VUkNFIC9XMyAvRm8kQCAkKENGKQogCi1kZWZhdWx0OiBsaWJyYXJ5Ci0KLSMgbGVhdmUgdGhpcyBibGFuayBhbmQgbGluayBhZ2FpbnN0IGxpYnRvbW1hdGggaWYgeW91IHdhbnQgYmV0dGVyIGxpbmsgcmVzb2x1dGlvbgotTVBJT0JKRUNUPXNyYy9taXNjL21waS9tcGkub2JqCi0KLU9CSkVDVFM9c3JjL2NpcGhlcnMvYWVzL2Flc19lbmMub2JqICQoTVBJT0JKRUNUKSBzcmMvY2lwaGVycy9hZXMvYWVzLm9iaiBzcmMvY2lwaGVycy9hbnViaXMub2JqIFwKLXNyYy9jaXBoZXJzL2Jsb3dmaXNoLm9iaiBzcmMvY2lwaGVycy9jYXN0NS5vYmogc3JjL2NpcGhlcnMvZGVzLm9iaiBzcmMvY2lwaGVycy9raGF6YWQub2JqIHNyYy9jaXBoZXJzL25vZWtlb24ub2JqIFwKLXNyYy9jaXBoZXJzL3JjMi5vYmogc3JjL2NpcGhlcnMvcmM1Lm9iaiBzcmMvY2lwaGVycy9yYzYub2JqIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLm9iaiBcCisjU1RBUlRfSU5TCitPQkpFQ1RTPXNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm9iaiBzcmMvY2lwaGVycy9hZXMvYWVzLm9iaiBzcmMvY2lwaGVycy9hbnViaXMub2JqIHNyYy9jaXBoZXJzL2Jsb3dmaXNoLm9iaiBcCitzcmMvY2lwaGVycy9jYXN0NS5vYmogc3JjL2NpcGhlcnMvZGVzLm9iaiBzcmMvY2lwaGVycy9rYXN1bWkub2JqIHNyYy9jaXBoZXJzL2toYXphZC5vYmogc3JjL2NpcGhlcnMva3NlZWQub2JqIFwKK3NyYy9jaXBoZXJzL25vZWtlb24ub2JqIHNyYy9jaXBoZXJzL3JjMi5vYmogc3JjL2NpcGhlcnMvcmM1Lm9iaiBzcmMvY2lwaGVycy9yYzYub2JqIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLm9iaiBcCiBzcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIub2JqIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5vYmogc3JjL2NpcGhlcnMvc2tpcGphY2sub2JqIFwKIHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5vYmogc3JjL2NpcGhlcnMveHRlYS5vYmogc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkub2JqIFwKIHNyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5vYmogc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIub2JqIHNyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdC5vYmogXApAQCAtMTgsNTEgKzE0LDYzIEBACiBzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vYmogc3JjL2VuY2F1dGgvZWF4L2VheF9pbml0Lm9iaiBcCiBzcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3Qub2JqIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5vYmogc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYub2JqIFwKIHNyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5vYmogc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQub2JqIFwKLXNyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3Mub2JqIHNyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQub2JqIFwKLXNyYy9lbmNhdXRoL2djbS9nY21fdGVzdC5vYmogc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0Lm9iaiBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vYmogXAotc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0Lm9iaiBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHQub2JqIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5vYmogc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLm9iaiBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3Qub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5vYmogXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0Lm9iaiBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5vYmogc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0Lm9iaiBcCiBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vYmogc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0Lm9iaiBzcmMvZW5jYXV0aC9vY2Ivb2NiX250ei5vYmogXAogc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3Iub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfdGVzdC5vYmogc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUub2JqIFwKIHNyYy9oYXNoZXMvY2hjL2NoYy5vYmogc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLm9iaiBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUub2JqIFwKIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5Lm9iaiBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5vYmogc3JjL2hhc2hlcy9tZDIub2JqIHNyYy9oYXNoZXMvbWQ0Lm9iaiBcCi1zcmMvaGFzaGVzL21kNS5vYmogc3JjL2hhc2hlcy9ybWQxMjgub2JqIHNyYy9oYXNoZXMvcm1kMTYwLm9iaiBzcmMvaGFzaGVzL3NoYTEub2JqIHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYub2JqIFwKLXNyYy9oYXNoZXMvc2hhMi9zaGE1MTIub2JqIHNyYy9oYXNoZXMvdGlnZXIub2JqIHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwub2JqIHNyYy9tYWMvaG1hYy9obWFjX2RvbmUub2JqIFwKLXNyYy9tYWMvaG1hYy9obWFjX2ZpbGUub2JqIHNyYy9tYWMvaG1hYy9obWFjX2luaXQub2JqIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vYmogXAorc3JjL2hhc2hlcy9tZDUub2JqIHNyYy9oYXNoZXMvcm1kMTI4Lm9iaiBzcmMvaGFzaGVzL3JtZDE2MC5vYmogc3JjL2hhc2hlcy9ybWQyNTYub2JqIHNyYy9oYXNoZXMvcm1kMzIwLm9iaiBcCitzcmMvaGFzaGVzL3NoYTEub2JqIHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYub2JqIHNyYy9oYXNoZXMvc2hhMi9zaGE1MTIub2JqIHNyYy9oYXNoZXMvdGlnZXIub2JqIFwKK3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwub2JqIHNyYy9tYWMvZjkvZjlfZG9uZS5vYmogc3JjL21hYy9mOS9mOV9maWxlLm9iaiBzcmMvbWFjL2Y5L2Y5X2luaXQub2JqIFwKK3NyYy9tYWMvZjkvZjlfbWVtb3J5Lm9iaiBzcmMvbWFjL2Y5L2Y5X21lbW9yeV9tdWx0aS5vYmogc3JjL21hYy9mOS9mOV9wcm9jZXNzLm9iaiBzcmMvbWFjL2Y5L2Y5X3Rlc3Qub2JqIFwKK3NyYy9tYWMvaG1hYy9obWFjX2RvbmUub2JqIHNyYy9tYWMvaG1hYy9obWFjX2ZpbGUub2JqIHNyYy9tYWMvaG1hYy9obWFjX2luaXQub2JqIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vYmogXAogc3JjL21hYy9obWFjL2htYWNfbWVtb3J5X211bHRpLm9iaiBzcmMvbWFjL2htYWMvaG1hY19wcm9jZXNzLm9iaiBzcmMvbWFjL2htYWMvaG1hY190ZXN0Lm9iaiBcCiBzcmMvbWFjL29tYWMvb21hY19kb25lLm9iaiBzcmMvbWFjL29tYWMvb21hY19maWxlLm9iaiBzcmMvbWFjL29tYWMvb21hY19pbml0Lm9iaiBzcmMvbWFjL29tYWMvb21hY19tZW1vcnkub2JqIFwKIHNyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5vYmogc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5vYmogc3JjL21hYy9vbWFjL29tYWNfdGVzdC5vYmogXAogc3JjL21hYy9wZWxpY2FuL3BlbGljYW4ub2JqIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5vYmogc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fdGVzdC5vYmogXAogc3JjL21hYy9wbWFjL3BtYWNfZG9uZS5vYmogc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5vYmogc3JjL21hYy9wbWFjL3BtYWNfaW5pdC5vYmogc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5Lm9iaiBcCiBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkub2JqIHNyYy9tYWMvcG1hYy9wbWFjX250ei5vYmogc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5vYmogXAotc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm9iaiBzcmMvbWFjL3BtYWMvcG1hY190ZXN0Lm9iaiBzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5vYmogXAorc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm9iaiBzcmMvbWFjL3BtYWMvcG1hY190ZXN0Lm9iaiBzcmMvbWFjL3hjYmMveGNiY19kb25lLm9iaiBcCitzcmMvbWFjL3hjYmMveGNiY19maWxlLm9iaiBzcmMvbWFjL3hjYmMveGNiY19pbml0Lm9iaiBzcmMvbWFjL3hjYmMveGNiY19tZW1vcnkub2JqIFwKK3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5vYmogc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5vYmogc3JjL21hYy94Y2JjL3hjYmNfdGVzdC5vYmogXAorc3JjL21hdGgvZnAvbHRjX2VjY19mcF9tdWxtb2Qub2JqIHNyYy9tYXRoL2dtcF9kZXNjLm9iaiBzcmMvbWF0aC9sdG1fZGVzYy5vYmogc3JjL21hdGgvbXVsdGkub2JqIFwKK3NyYy9tYXRoL3JhbmRfcHJpbWUub2JqIHNyYy9tYXRoL3RmbV9kZXNjLm9iaiBzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5vYmogXAogc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUub2JqIHNyYy9taXNjL2J1cm5fc3RhY2sub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0Lm9iaiBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLm9iaiBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLm9iaiBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9hbnkub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLm9iaiBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2gub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkub2JqIFwKLXNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm9iaiBcCi1zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3Iub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQub2JqIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX29pZC5vYmogXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9mc2Eub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfZGVzY3JpcHRvci5vYmogXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfbHRjX21wX2Rlc2NyaXB0b3Iub2JqIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5vYmogXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9oYXNoLm9iaiBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5vYmogXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9oYXNoLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3Bybmcub2JqIFwKLXNyYy9taXNjL2Vycm9yX3RvX3N0cmluZy5vYmogc3JjL21pc2MvbXBpL2lzX3ByaW1lLm9iaiBzcmMvbWlzYy9tcGkvbXBpX3RvX2x0Y19lcnJvci5vYmogXAotc3JjL21pc2MvbXBpL3JhbmRfcHJpbWUub2JqIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8xLm9iaiBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5vYmogc3JjL21pc2MvemVyb21lbS5vYmogXAorc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLm9iaiBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vYmogc3JjL21pc2MvcGtjczUvcGtjc181XzIub2JqIHNyYy9taXNjL3plcm9tZW0ub2JqIFwKIHNyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9jYmMvY2JjX2RvbmUub2JqIHNyYy9tb2Rlcy9jYmMvY2JjX2VuY3J5cHQub2JqIFwKIHNyYy9tb2Rlcy9jYmMvY2JjX2dldGl2Lm9iaiBzcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5vYmogc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQub2JqIFwKIHNyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUub2JqIHNyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQub2JqIFwKIHNyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2Lm9iaiBzcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5vYmogc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQub2JqIFwKIHNyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9jdHIvY3RyX2RvbmUub2JqIHNyYy9tb2Rlcy9jdHIvY3RyX2VuY3J5cHQub2JqIFwKLXNyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm9iaiBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vYmogc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQub2JqIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm9iaiBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vYmogc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQub2JqIHNyYy9tb2Rlcy9jdHIvY3RyX3Rlc3Qub2JqIFwKIHNyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9lY2IvZWNiX2RvbmUub2JqIHNyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQub2JqIFwKLXNyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0Lm9iaiBzcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0Lm9iaiBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm9iaiBcCitzcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5vYmogc3JjL21vZGVzL2Y4L2Y4X2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9mOC9mOF9kb25lLm9iaiBzcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5vYmogXAorc3JjL21vZGVzL2Y4L2Y4X2dldGl2Lm9iaiBzcmMvbW9kZXMvZjgvZjhfc2V0aXYub2JqIHNyYy9tb2Rlcy9mOC9mOF9zdGFydC5vYmogc3JjL21vZGVzL2Y4L2Y4X3Rlc3RfbW9kZS5vYmogXAorc3JjL21vZGVzL2xydy9scndfZGVjcnlwdC5vYmogc3JjL21vZGVzL2xydy9scndfZG9uZS5vYmogc3JjL21vZGVzL2xydy9scndfZW5jcnlwdC5vYmogXAorc3JjL21vZGVzL2xydy9scndfZ2V0aXYub2JqIHNyYy9tb2Rlcy9scncvbHJ3X3Byb2Nlc3Mub2JqIHNyYy9tb2Rlcy9scncvbHJ3X3NldGl2Lm9iaiBcCitzcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5vYmogc3JjL21vZGVzL2xydy9scndfdGVzdC5vYmogc3JjL21vZGVzL29mYi9vZmJfZGVjcnlwdC5vYmogc3JjL21vZGVzL29mYi9vZmJfZG9uZS5vYmogXAogc3JjL21vZGVzL29mYi9vZmJfZW5jcnlwdC5vYmogc3JjL21vZGVzL29mYi9vZmJfZ2V0aXYub2JqIHNyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2Lm9iaiBcCiBzcmMvbW9kZXMvb2ZiL29mYl9zdGFydC5vYmogc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZGVjb2RlX2JpdF9zdHJpbmcub2JqIFwKIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLm9iaiBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5vYmogXAotc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5vYmogc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcub2JqIFwKLXNyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLm9iaiBzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5vYmogXAotc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2RlY29kZV9pbnRlZ2VyLm9iaiBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZW5jb2RlX2ludGVnZXIub2JqIFwKLXNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9sZW5ndGhfaW50ZWdlci5vYmogXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2RlY29kZV9ib29sZWFuLm9iaiBzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZW5jb2RlX2Jvb2xlYW4ub2JqIFwKK3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9sZW5ndGhfYm9vbGVhbi5vYmogc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5vYmogXAorc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcub2JqIHNyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5vYmogc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2RlY29kZV9pbnRlZ2VyLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZW5jb2RlX2ludGVnZXIub2JqIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9sZW5ndGhfaW50ZWdlci5vYmogXAogc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIub2JqIFwKIHNyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyLm9iaiBcCiBzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5vYmogXApAQCAtNzEsMjkgKzc5LDQ4IEBACiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcub2JqIFwKIHNyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5vYmogXAogc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nLm9iaiBcCi1zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZS5vYmogc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkub2JqIFwKLXNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlLm9iaiBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5vYmogXAotc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2Uub2JqIFwKLXNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXgub2JqIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aS5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXgub2JqIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLm9iaiBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2xlbmd0aF9zZXF1ZW5jZS5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9zZXF1ZW5jZV9mcmVlLm9iaiBzcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0Lm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0b2Yub2JqIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5vYmogXAogc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLm9iaiBcCiBzcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIub2JqIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5vYmogXAogc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2VuY29kZV91dGN0aW1lLm9iaiBzcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfbGVuZ3RoX3V0Y3RpbWUub2JqIFwKLXNyYy9way9kaC9kaC5vYmogc3JjL3BrL2RzYS9kc2FfZXhwb3J0Lm9iaiBzcmMvcGsvZHNhL2RzYV9mcmVlLm9iaiBzcmMvcGsvZHNhL2RzYV9pbXBvcnQub2JqIFwKLXNyYy9way9kc2EvZHNhX21ha2Vfa2V5Lm9iaiBzcmMvcGsvZHNhL2RzYV9zaWduX2hhc2gub2JqIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLm9iaiBcCi1zcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5Lm9iaiBzcmMvcGsvZWNjL2VjYy5vYmogc3JjL3BrL3BhY2tldF9zdG9yZV9oZWFkZXIub2JqIHNyYy9way9wYWNrZXRfdmFsaWRfaGVhZGVyLm9iaiBcCi1zcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLm9iaiBzcmMvcGsvcGtjczEvcGtjc18xX21nZjEub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9kZWNvZGUub2JqIFwKLXNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5vYmogXAotc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLm9iaiBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vYmogc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkub2JqIFwKK3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9kZWNvZGVfdXRmOF9zdHJpbmcub2JqIHNyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcub2JqIFwKK3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9sZW5ndGhfdXRmOF9zdHJpbmcub2JqIHNyYy9way9kc2EvZHNhX2RlY3J5cHRfa2V5Lm9iaiBcCitzcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5vYmogc3JjL3BrL2RzYS9kc2FfZXhwb3J0Lm9iaiBzcmMvcGsvZHNhL2RzYV9mcmVlLm9iaiBzcmMvcGsvZHNhL2RzYV9pbXBvcnQub2JqIFwKK3NyYy9way9kc2EvZHNhX21ha2Vfa2V5Lm9iaiBzcmMvcGsvZHNhL2RzYV9zaGFyZWRfc2VjcmV0Lm9iaiBzcmMvcGsvZHNhL2RzYV9zaWduX2hhc2gub2JqIFwKK3NyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLm9iaiBzcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5Lm9iaiBzcmMvcGsvZWNjL2VjYy5vYmogXAorc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2V4cG9ydC5vYmogc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2ltcG9ydC5vYmogc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkub2JqIFwKK3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5Lm9iaiBzcmMvcGsvZWNjL2VjY19leHBvcnQub2JqIHNyYy9way9lY2MvZWNjX2ZyZWUub2JqIHNyYy9way9lY2MvZWNjX2dldF9zaXplLm9iaiBcCitzcmMvcGsvZWNjL2VjY19pbXBvcnQub2JqIHNyYy9way9lY2MvZWNjX21ha2Vfa2V5Lm9iaiBzcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0Lm9iaiBcCitzcmMvcGsvZWNjL2VjY19zaWduX2hhc2gub2JqIHNyYy9way9lY2MvZWNjX3NpemVzLm9iaiBzcmMvcGsvZWNjL2VjY190ZXN0Lm9iaiBzcmMvcGsvZWNjL2VjY192ZXJpZnlfaGFzaC5vYmogXAorc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5vYmogc3JjL3BrL2VjYy9sdGNfZWNjX21hcC5vYmogc3JjL3BrL2VjYy9sdGNfZWNjX211bDJhZGQub2JqIFwKK3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2Qub2JqIHNyYy9way9lY2MvbHRjX2VjY19tdWxtb2RfdGltaW5nLm9iaiBzcmMvcGsvZWNjL2x0Y19lY2NfcG9pbnRzLm9iaiBcCitzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQub2JqIHNyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludC5vYmogXAorc3JjL3BrL2thdGphL2thdGphX2RlY3J5cHRfa2V5Lm9iaiBzcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkub2JqIHNyYy9way9rYXRqYS9rYXRqYV9leHBvcnQub2JqIFwKK3NyYy9way9rYXRqYS9rYXRqYV9leHB0bW9kLm9iaiBzcmMvcGsva2F0amEva2F0amFfZnJlZS5vYmogc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5vYmogXAorc3JjL3BrL2thdGphL2thdGphX21ha2Vfa2V5Lm9iaiBzcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLm9iaiBzcmMvcGsvcGtjczEvcGtjc18xX21nZjEub2JqIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9kZWNvZGUub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAub2JqIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5vYmogc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLm9iaiBzcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZGVjb2RlLm9iaiBcCitzcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZW5jb2RlLm9iaiBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vYmogc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkub2JqIFwKIHNyYy9way9yc2EvcnNhX2V4cG9ydC5vYmogc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5vYmogc3JjL3BrL3JzYS9yc2FfZnJlZS5vYmogc3JjL3BrL3JzYS9yc2FfaW1wb3J0Lm9iaiBcCiBzcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5vYmogc3JjL3BrL3JzYS9yc2Ffc2lnbl9oYXNoLm9iaiBzcmMvcGsvcnNhL3JzYV92ZXJpZnlfaGFzaC5vYmogc3JjL3BybmdzL2ZvcnR1bmEub2JqIFwKIHNyYy9wcm5ncy9yYzQub2JqIHNyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLm9iaiBzcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5vYmogc3JjL3BybmdzL3NvYmVyMTI4Lm9iaiBcCiBzcmMvcHJuZ3Mvc3Bybmcub2JqIHNyYy9wcm5ncy95YXJyb3cub2JqIAogCi1IRUFERVJTPXNyYy9oZWFkZXJzL3RvbW1hdGhfc3VwZXJjbGFzcy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oIFwKLXNyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oIFwKLXNyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrLmggc3JjL2hlYWRlcnMvdG9tbWF0aF9jbGFzcy5oIFwKLXNyYy9oZWFkZXJzL2x0Y190b21tYXRoLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaCBcCi1zcmMvaGVhZGVycy90b21jcnlwdC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmggdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCitIRUFERVJTPXNyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hdGguaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmggc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oIHRlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaAorCisjRU5EX0lOUworCitkZWZhdWx0OiBsaWJyYXJ5CiAKICNjaXBoZXJzIGNvbWUgaW4gdHdvIGZsYXZvdXJzLi4uIGVuYytkZWMgYW5kIGVuYwogc3JjL2NpcGhlcnMvYWVzL2Flc19lbmMub2JqOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYwpAQCAtMTA2LDE3ICsxMzMsMTcgQEAKIAljZCAuLgogCQogdHZfZ2VuOiBkZW1vcy90dl9nZW4uYyBsaWJyYXJ5Ci0JY2wgJChDRkxBR1MpIGRlbW9zL3R2X2dlbi5jIHRvbWNyeXB0LmxpYiBhZHZhcGkzMi5saWIgCisJY2wgJChDRkxBR1MpIGRlbW9zL3R2X2dlbi5jIHRvbWNyeXB0LmxpYiBhZHZhcGkzMi5saWIgJChFWFRSQUxJQlMpCiAKIGhhc2hzdW06IGRlbW9zL2hhc2hzdW0uYyBsaWJyYXJ5Ci0JY2wgJChDRkxBR1MpIGRlbW9zL2hhc2hzdW0uYyB0b21jcnlwdC5saWIgYWR2YXBpMzIubGliCisJY2wgJChDRkxBR1MpIGRlbW9zL2hhc2hzdW0uYyB0b21jcnlwdC5saWIgYWR2YXBpMzIubGliICQoRVhUUkFMSUJTKQogCiB0ZXN0OiBkZW1vcy90ZXN0LmMgbGlicmFyeQotCWNsICQoQ0ZMQUdTKSBkZW1vcy90ZXN0LmMgdGVzdHByb2YvdG9tY3J5cHRfcHJvZi5saWIgdG9tY3J5cHQubGliIGFkdmFwaTMyLmxpYgorCWNsICQoQ0ZMQUdTKSBkZW1vcy90ZXN0LmMgdGVzdHByb2YvdG9tY3J5cHRfcHJvZi5saWIgdG9tY3J5cHQubGliIGFkdmFwaTMyLmxpYiAkKEVYVFJBTElCUykKIAogdGltaW5nOiBkZW1vcy90aW1pbmcuYyBsaWJyYXJ5Ci0JY2wgJChDRkxBR1MpIGRlbW9zL3RpbWluZy5jIHRlc3Rwcm9mL3RvbWNyeXB0X3Byb2YubGliIHRvbWNyeXB0LmxpYiBhZHZhcGkzMi5saWIKKwljbCAkKENGTEFHUykgZGVtb3MvdGltaW5nLmMgdGVzdHByb2YvdG9tY3J5cHRfcHJvZi5saWIgdG9tY3J5cHQubGliIGFkdmFwaTMyLmxpYiAkKEVYVFJBTElCUykKIAogIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9tYWtlZmlsZS5tc3ZjLHYgJCAgIAotIyAkUmV2aXNpb246IDEuMTUgJCAgIAotIyAkRGF0ZTogMjAwNS8wNi8yNyAxMjozNzowNiAkIAorIyAkUmV2aXNpb246IDEuNTEgJCAgIAorIyAkRGF0ZTogMjAwNi8xMi8wMiAxOToyMzoyMSAkIApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUuc2hhcmVkIGIvbWFrZWZpbGUuc2hhcmVkCmluZGV4IDYyY2M4N2IuLmE2NmFiMWYgMTAwNjQ0Ci0tLSBhL21ha2VmaWxlLnNoYXJlZAorKysgYi9tYWtlZmlsZS5zaGFyZWQKQEAgLTYsMTcgKzYsMjUgQEAKICMgVG9tIFN0IERlbmlzCiAKICMgVGhlIHZlcnNpb24KLVZFUlNJT049MDoxMDUKK1ZFUlNJT049MDoxMTYKIAogIyBDb21waWxlciBhbmQgTGlua2VyIE5hbWVzCi1DQz1saWJ0b29sIC0tbW9kZT1jb21waWxlIGdjYworQ0M9bGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyBnY2MgCisKKyMgcmFubGliIHRvb2xzCitpZm5kZWYgUkFOTElCCisgICBSQU5MSUI9cmFubGliCitlbmRpZgogCiAjIENvbXBpbGF0aW9uIGZsYWdzLiBOb3RlIHRoZSArPSBkb2VzIG5vdCB3cml0ZSBvdmVyIHRoZSB1c2VyJ3MgQ0ZMQUdTIQotQ0ZMQUdTICs9IC1jIC1JLi9zcmMvaGVhZGVycy8gLVdhbGwgLVdzaWduLWNvbXBhcmUgLVcgLVdzaGFkb3cgCitDRkxBR1MgKz0gLWMgLUkuL3NyYy9oZWFkZXJzLyAtV2FsbCAtV3NpZ24tY29tcGFyZSAtVyAtV3NoYWRvdyAtRExUQ19TT1VSQ0UKIAogIyBhZGRpdGlvbmFsIHdhcm5pbmdzIChuZXdlciBHQ0MgMy40IGFuZCBoaWdoZXIpCi0jQ0ZMQUdTICs9IC1Xc3lzdGVtLWhlYWRlcnMgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyBcCi0jCQkJIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdwb2ludGVyLWFyaXRoIAoraWZkZWYgR0NDXzM0CitDRkxBR1MgKz0gLVdzeXN0ZW0taGVhZGVycyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIFwKKwkJCSAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XcG9pbnRlci1hcml0aCAKK2VuZGlmCisKIAogaWZuZGVmIElHTk9SRV9TUEVFRAogCkBAIC0zOSw4ICs0NywxOSBAQAogI0NGTEFHUyArPSAtRExUQ19OT19ST0xDCiAKICNPdXRwdXQgZmlsZW5hbWVzIGZvciB2YXJpb3VzIHRhcmdldHMuCi1MSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YubGEKLUxJQk5BTUU9bGlidG9tY3J5cHQubGEKK2lmbmRlZiBMSUJURVNUX1MKKyAgIExJQlRFU1RfUz1saWJ0b21jcnlwdF9wcm9mLmEKK2VuZGlmCitpZm5kZWYgTElCVEVTVAorICAgTElCVEVTVD1saWJ0b21jcnlwdF9wcm9mLmxhCitlbmRpZgoraWZuZGVmIExJQk5BTUUKKyAgIExJQk5BTUU9bGlidG9tY3J5cHQubGEKK2VuZGlmCitpZm5kZWYgTElCTkFNRV9TCisgICBMSUJOQU1FX1M9bGlidG9tY3J5cHQuYQorZW5kaWYKKwogSEFTSD1oYXNoc3VtCiBDUllQVD1lbmNyeXB0CiBTTUFMTD1zbWFsbApAQCAtNTIsMTAgKzcxLDE4IEBACiAjTElCUEFUSC1UaGUgZGlyZWN0b3J5IGZvciBsaWJ0b21jcnlwdCB0byBiZSBpbnN0YWxsZWQgdG8uCiAjSU5DUEFUSC1UaGUgZGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIGhlYWRlciBmaWxlcyBmb3IgbGlidG9tY3J5cHQuCiAjREFUQVBBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBwZGYgZG9jcy4KLURFU1RESVI9Ci1MSUJQQVRIPS91c3IvbGliCi1JTkNQQVRIPS91c3IvaW5jbHVkZQotREFUQVBBVEg9L3Vzci9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmCitpZm5kZWYgREVTVERJUgorICAgREVTVERJUj0KK2VuZGlmCitpZm5kZWYgTElCUEFUSAorICAgTElCUEFUSD0vdXNyL2xpYgorZW5kaWYKK2lmbmRlZiBJTkNQQVRICisgICBJTkNQQVRIPS91c3IvaW5jbHVkZQorZW5kaWYKK2lmbmRlZiBEQVRBUEFUSAorICAgREFUQVBBVEg9L3Vzci9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmCitlbmRpZgogCiAjV2hvIGRvIHdlIGluc3RhbGwgYXM/CiBpZmRlZiBJTlNUQUxMX1VTRVIKQEAgLTcxLDE4ICs5OCwxMCBAQAogZW5kaWYKIAogI0xpc3Qgb2Ygb2JqZWN0cyB0byBjb21waWxlLgotCi0jTGVhdmUgTVBJIGJ1aWx0LWluIG9yIGZvcmNlIGRldmVsb3BlciB0byBsaW5rIGFnYWluc3QgbGlidG9tbWF0aD8KLWlmbmRlZiBJR05PUkVfTVBJCi1NUElPQkpFQ1Q9c3JjL21pc2MvbXBpL21waS5vCi1lbHNlIAotI0lmIHlvdSBkb24ndCB3YW50IG1waS5vIHRoZW4gYWRkIHRoaXMKLU1QSVNIQVJFRD0kKExJQlBBVEgpL2xpYnRvbW1hdGgubGEKLWVuZGlmCi0KLU9CSkVDVFM9c3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyAkKE1QSU9CSkVDVCkgc3JjL2NpcGhlcnMvYWVzL2Flcy5vIHNyYy9jaXBoZXJzL2FudWJpcy5vIFwKLXNyYy9jaXBoZXJzL2Jsb3dmaXNoLm8gc3JjL2NpcGhlcnMvY2FzdDUubyBzcmMvY2lwaGVycy9kZXMubyBzcmMvY2lwaGVycy9raGF6YWQubyBzcmMvY2lwaGVycy9ub2VrZW9uLm8gXAotc3JjL2NpcGhlcnMvcmMyLm8gc3JjL2NpcGhlcnMvcmM1Lm8gc3JjL2NpcGhlcnMvcmM2Lm8gc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIubyBcCisjU1RBUlRfSU5TCitPQkpFQ1RTPXNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm8gc3JjL2NpcGhlcnMvYWVzL2Flcy5vIHNyYy9jaXBoZXJzL2FudWJpcy5vIHNyYy9jaXBoZXJzL2Jsb3dmaXNoLm8gXAorc3JjL2NpcGhlcnMvY2FzdDUubyBzcmMvY2lwaGVycy9kZXMubyBzcmMvY2lwaGVycy9rYXN1bWkubyBzcmMvY2lwaGVycy9raGF6YWQubyBzcmMvY2lwaGVycy9rc2VlZC5vIFwKK3NyYy9jaXBoZXJzL25vZWtlb24ubyBzcmMvY2lwaGVycy9yYzIubyBzcmMvY2lwaGVycy9yYzUubyBzcmMvY2lwaGVycy9yYzYubyBzcmMvY2lwaGVycy9zYWZlci9zYWZlci5vIFwKIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5vIHNyYy9jaXBoZXJzL3NraXBqYWNrLm8gXAogc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLm8gc3JjL2NpcGhlcnMveHRlYS5vIHNyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5Lm8gXAogc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQubyBcCkBAIC05MCw1MSArMTA5LDYzIEBACiBzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5vIFwKIHNyYy9lbmNhdXRoL2VheC9lYXhfdGVzdC5vIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5vIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2Lm8gXAogc3JjL2VuY2F1dGgvZ2NtL2djbV9kb25lLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9pbml0Lm8gXAotc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0Lm8gXAotc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkubyBcCi1zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkubyBzcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5vIHNyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHQubyBcCiBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vIHNyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfbnR6Lm8gXAogc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5vIFwKIHNyYy9oYXNoZXMvY2hjL2NoYy5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5vIFwKIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5Lm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkubyBzcmMvaGFzaGVzL21kMi5vIHNyYy9oYXNoZXMvbWQ0Lm8gXAotc3JjL2hhc2hlcy9tZDUubyBzcmMvaGFzaGVzL3JtZDEyOC5vIHNyYy9oYXNoZXMvcm1kMTYwLm8gc3JjL2hhc2hlcy9zaGExLm8gc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vIFwKLXNyYy9oYXNoZXMvc2hhMi9zaGE1MTIubyBzcmMvaGFzaGVzL3RpZ2VyLm8gc3JjL2hhc2hlcy93aGlybC93aGlybC5vIHNyYy9tYWMvaG1hYy9obWFjX2RvbmUubyBcCi1zcmMvbWFjL2htYWMvaG1hY19maWxlLm8gc3JjL21hYy9obWFjL2htYWNfaW5pdC5vIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vIFwKK3NyYy9oYXNoZXMvbWQ1Lm8gc3JjL2hhc2hlcy9ybWQxMjgubyBzcmMvaGFzaGVzL3JtZDE2MC5vIHNyYy9oYXNoZXMvcm1kMjU2Lm8gc3JjL2hhc2hlcy9ybWQzMjAubyBcCitzcmMvaGFzaGVzL3NoYTEubyBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm8gc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vIHNyYy9oYXNoZXMvdGlnZXIubyBcCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm8gc3JjL21hYy9mOS9mOV9kb25lLm8gc3JjL21hYy9mOS9mOV9maWxlLm8gc3JjL21hYy9mOS9mOV9pbml0Lm8gXAorc3JjL21hYy9mOS9mOV9tZW1vcnkubyBzcmMvbWFjL2Y5L2Y5X21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvZjkvZjlfcHJvY2Vzcy5vIHNyYy9tYWMvZjkvZjlfdGVzdC5vIFwKK3NyYy9tYWMvaG1hYy9obWFjX2RvbmUubyBzcmMvbWFjL2htYWMvaG1hY19maWxlLm8gc3JjL21hYy9obWFjL2htYWNfaW5pdC5vIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vIFwKIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3MubyBzcmMvbWFjL2htYWMvaG1hY190ZXN0Lm8gXAogc3JjL21hYy9vbWFjL29tYWNfZG9uZS5vIHNyYy9tYWMvb21hYy9vbWFjX2ZpbGUubyBzcmMvbWFjL29tYWMvb21hY19pbml0Lm8gc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5Lm8gXAogc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5vIHNyYy9tYWMvb21hYy9vbWFjX3Rlc3QubyBcCiBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QubyBcCiBzcmMvbWFjL3BtYWMvcG1hY19kb25lLm8gc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5vIHNyYy9tYWMvcG1hYy9wbWFjX2luaXQubyBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnkubyBcCiBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL3BtYWMvcG1hY19udHoubyBzcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLm8gXAotc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm8gc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5vIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLm8gXAorc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm8gc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5vIHNyYy9tYWMveGNiYy94Y2JjX2RvbmUubyBcCitzcmMvbWFjL3hjYmMveGNiY19maWxlLm8gc3JjL21hYy94Y2JjL3hjYmNfaW5pdC5vIHNyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5vIFwKK3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMveGNiYy94Y2JjX3Byb2Nlc3MubyBzcmMvbWFjL3hjYmMveGNiY190ZXN0Lm8gXAorc3JjL21hdGgvZnAvbHRjX2VjY19mcF9tdWxtb2QubyBzcmMvbWF0aC9nbXBfZGVzYy5vIHNyYy9tYXRoL2x0bV9kZXNjLm8gc3JjL21hdGgvbXVsdGkubyBcCitzcmMvbWF0aC9yYW5kX3ByaW1lLm8gc3JjL21hdGgvdGZtX2Rlc2MubyBzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5vIFwKIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZW5jb2RlLm8gc3JjL21pc2MvYnVybl9zdGFjay5vIHNyYy9taXNjL2NyeXB0L2NyeXB0Lm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3IubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlci5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5vIFwKLXNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5vIFwKLXNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfZGVzY3JpcHRvci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZnNhLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLm8gXAogc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5vIFwKIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2NpcGhlci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2gubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIubyBcCiBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2hhc2gubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcubyBcCi1zcmMvbWlzYy9lcnJvcl90b19zdHJpbmcubyBzcmMvbWlzYy9tcGkvaXNfcHJpbWUubyBzcmMvbWlzYy9tcGkvbXBpX3RvX2x0Y19lcnJvci5vIFwKLXNyYy9taXNjL21waS9yYW5kX3ByaW1lLm8gc3JjL21pc2MvcGtjczUvcGtjc181XzEubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5vIHNyYy9taXNjL3plcm9tZW0ubyBcCitzcmMvbWlzYy9lcnJvcl90b19zdHJpbmcubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8yLm8gc3JjL21pc2MvemVyb21lbS5vIFwKIHNyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQubyBzcmMvbW9kZXMvY2JjL2NiY19kb25lLm8gc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5vIFwKIHNyYy9tb2Rlcy9jYmMvY2JjX2dldGl2Lm8gc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zdGFydC5vIFwKIHNyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvY2ZiL2NmYl9kb25lLm8gc3JjL21vZGVzL2NmYi9jZmJfZW5jcnlwdC5vIFwKIHNyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2Lm8gc3JjL21vZGVzL2NmYi9jZmJfc2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zdGFydC5vIFwKIHNyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQubyBzcmMvbW9kZXMvY3RyL2N0cl9kb25lLm8gc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5vIFwKLXNyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5vIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5vIHNyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QubyBcCiBzcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0Lm8gc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5vIHNyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQubyBcCi1zcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm8gXAorc3JjL21vZGVzL2VjYi9lY2Jfc3RhcnQubyBzcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5vIHNyYy9tb2Rlcy9mOC9mOF9kb25lLm8gc3JjL21vZGVzL2Y4L2Y4X2VuY3J5cHQubyBcCitzcmMvbW9kZXMvZjgvZjhfZ2V0aXYubyBzcmMvbW9kZXMvZjgvZjhfc2V0aXYubyBzcmMvbW9kZXMvZjgvZjhfc3RhcnQubyBzcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLm8gXAorc3JjL21vZGVzL2xydy9scndfZGVjcnlwdC5vIHNyYy9tb2Rlcy9scncvbHJ3X2RvbmUubyBzcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2xydy9scndfZ2V0aXYubyBzcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLm8gc3JjL21vZGVzL2xydy9scndfc2V0aXYubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5vIHNyYy9tb2Rlcy9scncvbHJ3X3Rlc3QubyBzcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0Lm8gc3JjL21vZGVzL29mYi9vZmJfZG9uZS5vIFwKIHNyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5vIHNyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2Lm8gXAogc3JjL21vZGVzL29mYi9vZmJfc3RhcnQubyBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5vIFwKIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfbGVuZ3RoX2JpdF9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLm8gc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9lbmNvZGVfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLm8gXAotc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2RlY29kZV9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLm8gXAotc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2RlY29kZV9ib29sZWFuLm8gc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2VuY29kZV9ib29sZWFuLm8gXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2xlbmd0aF9ib29sZWFuLm8gc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5vIFwKK3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2RlY29kZV9pYTVfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZW5jb2RlX2lhNV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5vIFwKK3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5vIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9sZW5ndGhfaW50ZWdlci5vIFwKIHNyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLm8gXAogc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIubyBcCiBzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5vIFwKQEAgLTE0MywyOSArMTc0LDQ2IEBACiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCiBzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcubyBcCi1zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZS5vIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLm8gXAotc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2UubyBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5vIFwKLXNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLm8gXAotc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXgubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aS5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXgubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5vIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9zZXF1ZW5jZV9mcmVlLm8gc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5vIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5vIFwKIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9lbmNvZGVfc2hvcnRfaW50ZWdlci5vIFwKIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9sZW5ndGhfc2hvcnRfaW50ZWdlci5vIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5vIFwKIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5vIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5vIFwKLXNyYy9way9kaC9kaC5vIHNyYy9way9kc2EvZHNhX2V4cG9ydC5vIHNyYy9way9kc2EvZHNhX2ZyZWUubyBzcmMvcGsvZHNhL2RzYV9pbXBvcnQubyBcCi1zcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5vIHNyYy9way9kc2EvZHNhX3NpZ25faGFzaC5vIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLm8gXAotc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5vIHNyYy9way9lY2MvZWNjLm8gc3JjL3BrL3BhY2tldF9zdG9yZV9oZWFkZXIubyBzcmMvcGsvcGFja2V0X3ZhbGlkX2hlYWRlci5vIFwKLXNyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AubyBzcmMvcGsvcGtjczEvcGtjc18xX21nZjEubyBzcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLm8gXAotc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAubyBzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19kZWNvZGUubyBcCi1zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUubyBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vIHNyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLm8gc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5vIHNyYy9way9kc2EvZHNhX2V4cG9ydC5vIHNyYy9way9kc2EvZHNhX2ZyZWUubyBzcmMvcGsvZHNhL2RzYV9pbXBvcnQubyBcCitzcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5vIHNyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQubyBzcmMvcGsvZHNhL2RzYV9zaWduX2hhc2gubyBcCitzcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5vIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkubyBzcmMvcGsvZWNjL2VjYy5vIFwKK3NyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19leHBvcnQubyBzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0Lm8gc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZWNjL2VjY19lbmNyeXB0X2tleS5vIHNyYy9way9lY2MvZWNjX2V4cG9ydC5vIHNyYy9way9lY2MvZWNjX2ZyZWUubyBzcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5vIFwKK3NyYy9way9lY2MvZWNjX2ltcG9ydC5vIHNyYy9way9lY2MvZWNjX21ha2Vfa2V5Lm8gc3JjL3BrL2VjYy9lY2Nfc2hhcmVkX3NlY3JldC5vIFwKK3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5vIHNyYy9way9lY2MvZWNjX3NpemVzLm8gc3JjL3BrL2VjYy9lY2NfdGVzdC5vIHNyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5vIHNyYy9way9lY2MvbHRjX2VjY19tYXAubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5vIHNyYy9way9lY2MvbHRjX2VjY19wb2ludHMubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQubyBzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQubyBcCitzcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZXhwb3J0Lm8gXAorc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QubyBzcmMvcGsva2F0amEva2F0amFfZnJlZS5vIHNyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQubyBcCitzcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkubyBzcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9tZ2YxLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX29zMmlwLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5vIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9lbmNvZGUubyBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vIHNyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5Lm8gXAogc3JjL3BrL3JzYS9yc2FfZXhwb3J0Lm8gc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5vIHNyYy9way9yc2EvcnNhX2ZyZWUubyBzcmMvcGsvcnNhL3JzYV9pbXBvcnQubyBcCiBzcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5vIHNyYy9way9yc2EvcnNhX3NpZ25faGFzaC5vIHNyYy9way9yc2EvcnNhX3ZlcmlmeV9oYXNoLm8gc3JjL3BybmdzL2ZvcnR1bmEubyBcCiBzcmMvcHJuZ3MvcmM0Lm8gc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMubyBzcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5vIHNyYy9wcm5ncy9zb2JlcjEyOC5vIFwKIHNyYy9wcm5ncy9zcHJuZy5vIHNyYy9wcm5ncy95YXJyb3cubyAKIAotSEVBREVSUz1zcmMvaGVhZGVycy90b21tYXRoX3N1cGVyY2xhc3MuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaCBcCi1zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaCBzcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaCBcCi1zcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCBzcmMvaGVhZGVycy90b21jcnlwdF9way5oIHNyYy9oZWFkZXJzL3RvbW1hdGhfY2xhc3MuaCBcCi1zcmMvaGVhZGVycy9sdGNfdG9tbWF0aC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBzcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmggXAotc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oIHRlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaAorSEVBREVSUz1zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaCBzcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9way5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWlzYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0Lmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BybmcuaCB0ZXN0cHJvZi90b21jcnlwdF90ZXN0LmgKKworI0VORF9JTlMKIAogVEVTVE9CSkVDVFM9ZGVtb3MvdGVzdC5vCiBIQVNIT0JKRUNUUz1kZW1vcy9oYXNoc3VtLm8KQEAgLTE4Niw0NCArMjM0LDQ2IEBACiBzcmMvY2lwaGVycy9hZXMvYWVzLm86IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCiBzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubzogc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLmMgc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoX3RhYi5jCiBzcmMvaGFzaGVzL3doaXJsL3doaXJsLm86IHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYyBzcmMvaGFzaGVzL3doaXJsL3doaXJsdGFiLmMKLXNyYy9way9lY2MvZWNjLm86IHNyYy9way9lY2MvZWNjLmMgc3JjL3BrL2VjYy9lY2Nfc3lzLmMKLXNyYy9way9kaC9kaC5vOiBzcmMvcGsvZGgvZGguYyBzcmMvcGsvZGgvZGhfc3lzLmMKIHNyYy9oYXNoZXMvc2hhMi9zaGE1MTIubzogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jIHNyYy9oYXNoZXMvc2hhMi9zaGEzODQuYwogc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vOiBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMgc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jCiAKICNUaGlzIHJ1bGUgbWFrZXMgdGhlIGxpYnRvbWNyeXB0IGxpYnJhcnkuCiBsaWJyYXJ5OiAkKExJQk5BTUUpCiAKLSQoTElCVEVTVCk6Ci0JY2QgdGVzdHByb2YgOyBDRkxBR1M9IiQoQ0ZMQUdTKSIgR1JPVVA9JChHUk9VUCkgVVNFUj0kKFVTRVIpIFZFUlNJT049JChWRVJTSU9OKSBMSUJQQVRIPSQoTElCUEFUSCkgTElCTkFNRT0kKExJQlRFU1QpIG1ha2UgLWYgbWFrZWZpbGUuc2hhcmVkCit0ZXN0cHJvZi8kKExJQlRFU1QpOgorCWNkIHRlc3Rwcm9mIDsgQ0ZMQUdTPSIkKENGTEFHUykiIEdST1VQPSQoR1JPVVApIFVTRVI9JChVU0VSKSBWRVJTSU9OPSQoVkVSU0lPTikgTElCUEFUSD0kKExJQlBBVEgpIExJQlRFU1Q9JChMSUJURVNUKSBMSUJURVNUX1M9JChMSUJURVNUX1MpIG1ha2UgLWYgbWFrZWZpbGUuc2hhcmVkCiAKLSQoTElCTkFNRSk6ICQoT0JKRUNUUykKLQlsaWJ0b29sIC0tc2lsZW50IC0tbW9kZT1saW5rIGdjYyAkKENGTEFHUykgYGZpbmQgLiAtdHlwZSBmIHwgZ3JlcCAiWy5dbG8iIHwgZ3JlcCAic3JjLyIgfCB4YXJnc2AgLW8gbGlidG9tY3J5cHQubGEgLXJwYXRoICQoTElCUEFUSCkgLXZlcnNpb24taW5mbyAkKFZFUlNJT04pCi0JbGlidG9vbCAtLXNpbGVudCAtLW1vZGU9bGluayBnY2MgJChDRkxBR1MpIGBmaW5kIC4gLXR5cGUgZiB8IGdyZXAgIlsuXW8iIHwgZ3JlcCAic3JjLyIgfCB4YXJnc2AgIC1vIGxpYnRvbWNyeXB0LmEKLQlyYW5saWIgbGlidG9tY3J5cHQuYQotCWxpYnRvb2wgLS1zaWxlbnQgLS1tb2RlPWluc3RhbGwgaW5zdGFsbCAtYyBsaWJ0b21jcnlwdC5sYSAkKExJQlBBVEgpL2xpYnRvbWNyeXB0LmxhCitvYmpzOiAkKE9CSkVDVFMpCisKKyQoTElCTkFNRSk6ICQoT0JKRUNUUykgdGVzdHByb2YvJChMSUJURVNUKQorCWxpYnRvb2wgLS1zaWxlbnQgLS1tb2RlPWxpbmsgZ2NjICQoQ0ZMQUdTKSBgZmluZCAuIC10eXBlIGYgfCBncmVwICJbLl1sbyIgfCBncmVwICJzcmMvIiB8IHhhcmdzYCAkKEVYVFJBTElCUykgLW8gJChMSUJOQU1FKSAtcnBhdGggJChMSUJQQVRIKSAtdmVyc2lvbi1pbmZvICQoVkVSU0lPTikKKworaW5zdGFsbDogJChMSUJOQU1FKQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWNkIHRlc3Rwcm9mIDsgQ0ZMQUdTPSIkKENGTEFHUykiIEdST1VQPSQoR1JPVVApIFVTRVI9JChVU0VSKSBWRVJTSU9OPSQoVkVSU0lPTikgTElCUEFUSD0kKExJQlBBVEgpIExJQlRFU1Q9JChMSUJURVNUKSBMSUJURVNUX1M9JChMSUJURVNUX1MpIERFU1RESVI9JChERVNURElSKSBtYWtlIC1mIG1ha2VmaWxlLnNoYXJlZCBpbnN0YWxsCisJbGlidG9vbCAtLXNpbGVudCAtLW1vZGU9aW5zdGFsbCBpbnN0YWxsIC1jIGxpYnRvbWNyeXB0LmxhICQoREVTVERJUikkKExJQlBBVEgpL2xpYnRvbWNyeXB0LmxhCiAJaW5zdGFsbCAtZCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoREVTVERJUikkKElOQ1BBVEgpCiAJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoSEVBREVSUykgJChERVNURElSKSQoSU5DUEFUSCkKIAogI1RoaXMgcnVsZSBtYWtlcyB0aGUgaGFzaCBwcm9ncmFtIGluY2x1ZGVkIHdpdGggbGlidG9tY3J5cHQKIGhhc2hzdW06IGxpYnJhcnkKIAlnY2MgJChDRkxBR1MpIGRlbW9zL2hhc2hzdW0uYyAtbyBoYXNoc3VtLm8KLQlnY2MgLW8gaGFzaHN1bSBoYXNoc3VtLm8gLWx0b21jcnlwdCAkKE1QSVNIQVJFRCkKKwlnY2MgLW8gaGFzaHN1bSBoYXNoc3VtLm8gLWx0b21jcnlwdCAkKEVYVFJBTElCUykKIAogI21ha2VzIHRoZSBjcnlwdCBwcm9ncmFtCiBjcnlwdDogbGlicmFyeSAKIAlnY2MgJChDRkxBR1MpIGRlbW9zL2VuY3J5cHQuYyAtbyBlbmNyeXB0Lm8KLQlnY2MgLW8gY3J5cHQgZW5jcnlwdC5vIC1sdG9tY3J5cHQgJChNUElTSEFSRUQpCisJZ2NjIC1vIGNyeXB0IGVuY3J5cHQubyAtbHRvbWNyeXB0ICQoRVhUUkFMSUJTKQogCiB0dl9nZW46IGxpYnJhcnkgJChUVlMpCi0JZ2NjIC1vIHR2X2dlbiAkKFRWUykgLWx0b21jcnlwdCAkKE1QSVNIQVJFRCkKKwlnY2MgLW8gdHZfZ2VuICQoVFZTKSAtbHRvbWNyeXB0ICQoRVhUUkFMSUJTKQogCi10ZXN0OiBsaWJyYXJ5ICQoTElCVEVTVCkgJChURVNUUykKLQlnY2MgLW8gJChURVNUKSAkKFRFU1RTKSAtbHRvbWNyeXB0X3Byb2YgLWx0b21jcnlwdCAkKE1QSVNIQVJFRCkKK3Rlc3Q6IGxpYnJhcnkgdGVzdHByb2YvJChMSUJURVNUKSAkKFRFU1RTKQorCWdjYyAtbyAkKFRFU1QpICQoVEVTVFMpIC1sdG9tY3J5cHRfcHJvZiAtbHRvbWNyeXB0ICQoRVhUUkFMSUJTKQogCi10aW1pbmc6IGxpYnJhcnkgJChMSUJURVNUKSAkKFRJTUlOR1MpCi0JZ2NjIC1vICQoVElNSU5HKSAkKFRJTUlOR1MpIC1sdG9tY3J5cHRfcHJvZiAtbHRvbWNyeXB0ICQoTVBJU0hBUkVEKQordGltaW5nOiBsaWJyYXJ5IHRlc3Rwcm9mLyQoTElCVEVTVCkgJChUSU1JTkdTKQorCWdjYyAtbyAkKFRJTUlORykgJChUSU1JTkdTKSAtbHRvbWNyeXB0X3Byb2YgLWx0b21jcnlwdCAkKEVYVFJBTElCUykKIAogIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9tYWtlZmlsZS5zaGFyZWQsdiAkICAgCi0jICRSZXZpc2lvbjogMS4xOSAkICAgCi0jICREYXRlOiAyMDA1LzA2LzI3IDEyOjM3OjA2ICQgCisjICRSZXZpc2lvbjogMS43NiAkICAgCisjICREYXRlOiAyMDA2LzEyLzAyIDE5OjIzOjIxICQgCmRpZmYgLS1naXQgYS9tYWtlZmlsZS51bml4IGIvbWFrZWZpbGUudW5peApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGUwZmYwCi0tLSAvZGV2L251bGwKKysrIGIvbWFrZWZpbGUudW5peApAQCAtMCwwICsxLDIzOSBAQAorIyBNQUtFRklMRSBmb3IgYnNkIG1ha2UKKyMKKyMgVG9tIFN0IERlbmlzCisKKyMgQ29tcGlsZXIgYW5kIExpbmtlciBOYW1lcworQ0M9Y2MKK0xEPWxkCisKKyMgQXJjaGl2ZXIgW21ha2VzIC5hIGZpbGVzXQorQVI9YXIKK0FSRkxBR1M9cgorCisjIENvbXBpbGF0aW9uIGZsYWdzLiBOb3RlIHRoZSArPSBkb2VzIG5vdCB3cml0ZSBvdmVyIHRoZSB1c2VyJ3MgQ0ZMQUdTIQorQ0ZMQUdTID0gLWMgLUkuL3Rlc3Rwcm9mLyAtSS4vc3JjL2hlYWRlcnMvIC1ETFRDX1NPVVJDRSAtTzIgJHtDRkxBR1NfT1BUU30gLW8gJEAKKworTElCTkFNRT1saWJ0b21jcnlwdC5hCitMSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YuYQorTElCVEVTVF9TPSQoTElCVEVTVCkKKworSEFTSD1oYXNoc3VtCitDUllQVD1lbmNyeXB0CitTTUFMTD1zbWFsbAorUFJPRj14ODZfcHJvZgorVFY9dHZfZ2VuCitNVUxUST1tdWx0aQorVElNSU5HPXRpbWluZworVEVTVD10ZXN0CisKKyNMSUJQQVRILVRoZSBkaXJlY3RvcnkgZm9yIGxpYnRvbWNyeXB0IHRvIGJlIGluc3RhbGxlZCB0by4KKyNJTkNQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgaGVhZGVyIGZpbGVzIGZvciBsaWJ0b21jcnlwdC4KKyNEQVRBUEFUSC1UaGUgZGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIHBkZiBkb2NzLgorTElCUEFUSD0vdXNyL2xvY2FsL2xpYgorSU5DUEFUSD0vdXNyL2xvY2FsL2luY2x1ZGUKK0RBVEFQQVRIPS91c3IvbG9jYWwvc2hhcmUvZG9jL2xpYnRvbWNyeXB0L3BkZgorCisjV2hvIGRvIHdlIGluc3RhbGwgYXM/CitVU0VSPXJvb3QKKworR1JPVVA9d2hlZWwKKworI0xpc3Qgb2Ygb2JqZWN0cyB0byBjb21waWxlLgorI1NUQVJUX0lOUworT0JKRUNUUz1zcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vIHNyYy9jaXBoZXJzL2Flcy9hZXMubyBzcmMvY2lwaGVycy9hbnViaXMubyBzcmMvY2lwaGVycy9ibG93ZmlzaC5vIFwKK3NyYy9jaXBoZXJzL2Nhc3Q1Lm8gc3JjL2NpcGhlcnMvZGVzLm8gc3JjL2NpcGhlcnMva2FzdW1pLm8gc3JjL2NpcGhlcnMva2hhemFkLm8gc3JjL2NpcGhlcnMva3NlZWQubyBcCitzcmMvY2lwaGVycy9ub2VrZW9uLm8gc3JjL2NpcGhlcnMvcmMyLm8gc3JjL2NpcGhlcnMvcmM1Lm8gc3JjL2NpcGhlcnMvcmM2Lm8gc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIubyBcCitzcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIubyBzcmMvY2lwaGVycy9zYWZlci9zYWZlcnAubyBzcmMvY2lwaGVycy9za2lwamFjay5vIFwKK3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5vIHNyYy9jaXBoZXJzL3h0ZWEubyBzcmMvZW5jYXV0aC9jY20vY2NtX21lbW9yeS5vIFwKK3NyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5vIHNyYy9lbmNhdXRoL2VheC9lYXhfYWRkaGVhZGVyLm8gc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2RvbmUubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHQubyBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5vIFwKK3NyYy9lbmNhdXRoL2VheC9lYXhfdGVzdC5vIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5vIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2Lm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9kb25lLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9pbml0Lm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkubyBzcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5vIHNyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vIHNyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfbnR6Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX3Rlc3QubyBzcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5vIFwKK3NyYy9oYXNoZXMvY2hjL2NoYy5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5vIFwKK3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5Lm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkubyBzcmMvaGFzaGVzL21kMi5vIHNyYy9oYXNoZXMvbWQ0Lm8gXAorc3JjL2hhc2hlcy9tZDUubyBzcmMvaGFzaGVzL3JtZDEyOC5vIHNyYy9oYXNoZXMvcm1kMTYwLm8gc3JjL2hhc2hlcy9ybWQyNTYubyBzcmMvaGFzaGVzL3JtZDMyMC5vIFwKK3NyYy9oYXNoZXMvc2hhMS5vIHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYubyBzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLm8gc3JjL2hhc2hlcy90aWdlci5vIFwKK3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwubyBzcmMvbWFjL2Y5L2Y5X2RvbmUubyBzcmMvbWFjL2Y5L2Y5X2ZpbGUubyBzcmMvbWFjL2Y5L2Y5X2luaXQubyBcCitzcmMvbWFjL2Y5L2Y5X21lbW9yeS5vIHNyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLm8gc3JjL21hYy9mOS9mOV9wcm9jZXNzLm8gc3JjL21hYy9mOS9mOV90ZXN0Lm8gXAorc3JjL21hYy9obWFjL2htYWNfZG9uZS5vIHNyYy9tYWMvaG1hYy9obWFjX2ZpbGUubyBzcmMvbWFjL2htYWMvaG1hY19pbml0Lm8gc3JjL21hYy9obWFjL2htYWNfbWVtb3J5Lm8gXAorc3JjL21hYy9obWFjL2htYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5vIHNyYy9tYWMvaG1hYy9obWFjX3Rlc3QubyBcCitzcmMvbWFjL29tYWMvb21hY19kb25lLm8gc3JjL21hYy9vbWFjL29tYWNfZmlsZS5vIHNyYy9tYWMvb21hYy9vbWFjX2luaXQubyBzcmMvbWFjL29tYWMvb21hY19tZW1vcnkubyBcCitzcmMvbWFjL29tYWMvb21hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLm8gc3JjL21hYy9vbWFjL29tYWNfdGVzdC5vIFwKK3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLm8gc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5Lm8gc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fdGVzdC5vIFwKK3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUubyBzcmMvbWFjL3BtYWMvcG1hY19maWxlLm8gc3JjL21hYy9wbWFjL3BtYWNfaW5pdC5vIHNyYy9tYWMvcG1hYy9wbWFjX21lbW9yeS5vIFwKK3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvcG1hYy9wbWFjX250ei5vIHNyYy9tYWMvcG1hYy9wbWFjX3Byb2Nlc3MubyBcCitzcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IubyBzcmMvbWFjL3BtYWMvcG1hY190ZXN0Lm8gc3JjL21hYy94Y2JjL3hjYmNfZG9uZS5vIFwKK3NyYy9tYWMveGNiYy94Y2JjX2ZpbGUubyBzcmMvbWFjL3hjYmMveGNiY19pbml0Lm8gc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5Lm8gXAorc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5X211bHRpLm8gc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5vIHNyYy9tYWMveGNiYy94Y2JjX3Rlc3QubyBcCitzcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5vIHNyYy9tYXRoL2dtcF9kZXNjLm8gc3JjL21hdGgvbHRtX2Rlc2MubyBzcmMvbWF0aC9tdWx0aS5vIFwKK3NyYy9tYXRoL3JhbmRfcHJpbWUubyBzcmMvbWF0aC90Zm1fZGVzYy5vIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLm8gXAorc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUubyBzcmMvbWlzYy9idXJuX3N0YWNrLm8gc3JjL21pc2MvY3J5cHQvY3J5cHQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfZGVzY3JpcHRvci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55Lm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2gubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfYW55Lm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX29pZC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfZGVzY3JpcHRvci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9sdGNfbXBfZGVzY3JpcHRvci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfaXNfdmFsaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9oYXNoLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfcHJuZy5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfY2lwaGVyLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9oYXNoLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9wcm5nLm8gXAorc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLm8gc3JjL21pc2MvcGtjczUvcGtjc181XzEubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5vIHNyYy9taXNjL3plcm9tZW0ubyBcCitzcmMvbW9kZXMvY2JjL2NiY19kZWNyeXB0Lm8gc3JjL21vZGVzL2NiYy9jYmNfZG9uZS5vIHNyYy9tb2Rlcy9jYmMvY2JjX2VuY3J5cHQubyBcCitzcmMvbW9kZXMvY2JjL2NiY19nZXRpdi5vIHNyYy9tb2Rlcy9jYmMvY2JjX3NldGl2Lm8gc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQubyBcCitzcmMvbW9kZXMvY2ZiL2NmYl9kZWNyeXB0Lm8gc3JjL21vZGVzL2NmYi9jZmJfZG9uZS5vIHNyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQubyBcCitzcmMvbW9kZXMvY2ZiL2NmYl9nZXRpdi5vIHNyYy9tb2Rlcy9jZmIvY2ZiX3NldGl2Lm8gc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQubyBcCitzcmMvbW9kZXMvY3RyL2N0cl9kZWNyeXB0Lm8gc3JjL21vZGVzL2N0ci9jdHJfZG9uZS5vIHNyYy9tb2Rlcy9jdHIvY3RyX2VuY3J5cHQubyBcCitzcmMvbW9kZXMvY3RyL2N0cl9nZXRpdi5vIHNyYy9tb2Rlcy9jdHIvY3RyX3NldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQubyBzcmMvbW9kZXMvY3RyL2N0cl90ZXN0Lm8gXAorc3JjL21vZGVzL2VjYi9lY2JfZGVjcnlwdC5vIHNyYy9tb2Rlcy9lY2IvZWNiX2RvbmUubyBzcmMvbW9kZXMvZWNiL2VjYl9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2VjYi9lY2Jfc3RhcnQubyBzcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5vIHNyYy9tb2Rlcy9mOC9mOF9kb25lLm8gc3JjL21vZGVzL2Y4L2Y4X2VuY3J5cHQubyBcCitzcmMvbW9kZXMvZjgvZjhfZ2V0aXYubyBzcmMvbW9kZXMvZjgvZjhfc2V0aXYubyBzcmMvbW9kZXMvZjgvZjhfc3RhcnQubyBzcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLm8gXAorc3JjL21vZGVzL2xydy9scndfZGVjcnlwdC5vIHNyYy9tb2Rlcy9scncvbHJ3X2RvbmUubyBzcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2xydy9scndfZ2V0aXYubyBzcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLm8gc3JjL21vZGVzL2xydy9scndfc2V0aXYubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5vIHNyYy9tb2Rlcy9scncvbHJ3X3Rlc3QubyBzcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0Lm8gc3JjL21vZGVzL29mYi9vZmJfZG9uZS5vIFwKK3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5vIHNyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2Lm8gXAorc3JjL21vZGVzL29mYi9vZmJfc3RhcnQubyBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfbGVuZ3RoX2JpdF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZGVjb2RlX2Jvb2xlYW4ubyBzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZW5jb2RlX2Jvb2xlYW4ubyBcCitzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfbGVuZ3RoX2Jvb2xlYW4ubyBzcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLm8gXAorc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9lbmNvZGVfaWE1X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2RlY29kZV9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllci5vIFwKK3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLm8gXAorc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9kZWNvZGVfb2N0ZXRfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXgubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aS5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXgubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5vIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9zZXF1ZW5jZV9mcmVlLm8gc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5vIHNyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5vIFwKK3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9lbmNvZGVfc2hvcnRfaW50ZWdlci5vIFwKK3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9sZW5ndGhfc2hvcnRfaW50ZWdlci5vIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5vIFwKK3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5vIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5vIFwKK3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9kZWNvZGVfdXRmOF9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZW5jb2RlX3V0Zjhfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2xlbmd0aF91dGY4X3N0cmluZy5vIHNyYy9way9kc2EvZHNhX2RlY3J5cHRfa2V5Lm8gXAorc3JjL3BrL2RzYS9kc2FfZW5jcnlwdF9rZXkubyBzcmMvcGsvZHNhL2RzYV9leHBvcnQubyBzcmMvcGsvZHNhL2RzYV9mcmVlLm8gc3JjL3BrL2RzYS9kc2FfaW1wb3J0Lm8gXAorc3JjL3BrL2RzYS9kc2FfbWFrZV9rZXkubyBzcmMvcGsvZHNhL2RzYV9zaGFyZWRfc2VjcmV0Lm8gc3JjL3BrL2RzYS9kc2Ffc2lnbl9oYXNoLm8gXAorc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2hhc2gubyBzcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5Lm8gc3JjL3BrL2VjYy9lY2MubyBcCitzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfZXhwb3J0Lm8gc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2ltcG9ydC5vIHNyYy9way9lY2MvZWNjX2RlY3J5cHRfa2V5Lm8gXAorc3JjL3BrL2VjYy9lY2NfZW5jcnlwdF9rZXkubyBzcmMvcGsvZWNjL2VjY19leHBvcnQubyBzcmMvcGsvZWNjL2VjY19mcmVlLm8gc3JjL3BrL2VjYy9lY2NfZ2V0X3NpemUubyBcCitzcmMvcGsvZWNjL2VjY19pbXBvcnQubyBzcmMvcGsvZWNjL2VjY19tYWtlX2tleS5vIHNyYy9way9lY2MvZWNjX3NoYXJlZF9zZWNyZXQubyBcCitzcmMvcGsvZWNjL2VjY19zaWduX2hhc2gubyBzcmMvcGsvZWNjL2VjY19zaXplcy5vIHNyYy9way9lY2MvZWNjX3Rlc3QubyBzcmMvcGsvZWNjL2VjY192ZXJpZnlfaGFzaC5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19pc192YWxpZF9pZHgubyBzcmMvcGsvZWNjL2x0Y19lY2NfbWFwLm8gc3JjL3BrL2VjYy9sdGNfZWNjX211bDJhZGQubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kLm8gc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZF90aW1pbmcubyBzcmMvcGsvZWNjL2x0Y19lY2NfcG9pbnRzLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50Lm8gc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50Lm8gXAorc3JjL3BrL2thdGphL2thdGphX2RlY3J5cHRfa2V5Lm8gc3JjL3BrL2thdGphL2thdGphX2VuY3J5cHRfa2V5Lm8gc3JjL3BrL2thdGphL2thdGphX2V4cG9ydC5vIFwKK3NyYy9way9rYXRqYS9rYXRqYV9leHB0bW9kLm8gc3JjL3BrL2thdGphL2thdGphX2ZyZWUubyBzcmMvcGsva2F0amEva2F0amFfaW1wb3J0Lm8gXAorc3JjL3BrL2thdGphL2thdGphX21ha2Vfa2V5Lm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9pMm9zcC5vIHNyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5vIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9kZWNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZW5jb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5vIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfcHNzX2VuY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9kZWNvZGUubyBcCitzcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZW5jb2RlLm8gc3JjL3BrL3JzYS9yc2FfZGVjcnlwdF9rZXkubyBzcmMvcGsvcnNhL3JzYV9lbmNyeXB0X2tleS5vIFwKK3NyYy9way9yc2EvcnNhX2V4cG9ydC5vIHNyYy9way9yc2EvcnNhX2V4cHRtb2QubyBzcmMvcGsvcnNhL3JzYV9mcmVlLm8gc3JjL3BrL3JzYS9yc2FfaW1wb3J0Lm8gXAorc3JjL3BrL3JzYS9yc2FfbWFrZV9rZXkubyBzcmMvcGsvcnNhL3JzYV9zaWduX2hhc2gubyBzcmMvcGsvcnNhL3JzYV92ZXJpZnlfaGFzaC5vIHNyYy9wcm5ncy9mb3J0dW5hLm8gXAorc3JjL3BybmdzL3JjNC5vIHNyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLm8gc3JjL3BybmdzL3JuZ19tYWtlX3BybmcubyBzcmMvcHJuZ3Mvc29iZXIxMjgubyBcCitzcmMvcHJuZ3Mvc3BybmcubyBzcmMvcHJuZ3MveWFycm93Lm8gCisKK0hFQURFUlM9c3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9oYXNoLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWF0aC5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaCBzcmMvaGVhZGVycy90b21jcnlwdC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmggdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCisKKyNFTkRfSU5TCisKK1RFU1RPQkpFQ1RTPWRlbW9zL3Rlc3QubworSEFTSE9CSkVDVFM9ZGVtb3MvaGFzaHN1bS5vCitDUllQVE9CSkVDVFM9ZGVtb3MvZW5jcnlwdC5vCitTTUFMTE9CSkVDVFM9ZGVtb3Mvc21hbGwubworVFZTPWRlbW9zL3R2X2dlbi5vCitNVUxUSVM9ZGVtb3MvbXVsdGkubworVElNSU5HUz1kZW1vcy90aW1pbmcubworVEVTVFM9ZGVtb3MvdGVzdC5vCisKKyNGaWxlcyBsZWZ0IG92ZXIgZnJvbSBtYWtpbmcgdGhlIGNyeXB0LnBkZi4KK0xFRlRPVkVSUz0qLmR2aSAqLmxvZyAqLmF1eCAqLnRvYyAqLmlkeCAqLmlsZyAqLmluZCAqLm91dAorCisjQ29tcHJlc3NlZCBmaWxlbmFtZXMKK0NPTVBSRVNTRUQ9Y3J5cHQtJChWRVJTSU9OKS50YXIuYnoyIGNyeXB0LSQoVkVSU0lPTikuemlwCisKKyNUaGUgZGVmYXVsdCBydWxlIGZvciBtYWtlIGJ1aWxkcyB0aGUgbGlidG9tY3J5cHQgbGlicmFyeS4KK2RlZmF1bHQ6bGlicmFyeQorCisjY2lwaGVycyBjb21lIGluIHR3byBmbGF2b3Vycy4uLiBlbmMrZGVjIGFuZCBlbmMgCitzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYworCSQoQ0MpICQoQ0ZMQUdTKSAtREVOQ1JZUFRfT05MWSAtYyBzcmMvY2lwaGVycy9hZXMvYWVzLmMgLW8gc3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubworCisjVGhlc2UgYXJlIHRoZSBydWxlcyB0byBtYWtlIGNlcnRhaW4gb2JqZWN0IGZpbGVzLgorc3JjL2NpcGhlcnMvYWVzL2Flcy5vOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYworc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLm86IHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5jIHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaF90YWIuYworc3JjL2hhc2hlcy93aGlybC93aGlybC5vOiBzcmMvaGFzaGVzL3doaXJsL3doaXJsLmMgc3JjL2hhc2hlcy93aGlybC93aGlybHRhYi5jCitzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLm86IHNyYy9oYXNoZXMvc2hhMi9zaGE1MTIuYyBzcmMvaGFzaGVzL3NoYTIvc2hhMzg0LmMKK3NyYy9oYXNoZXMvc2hhMi9zaGEyNTYubzogc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5jIHNyYy9oYXNoZXMvc2hhMi9zaGEyMjQuYworCisjVGhpcyBydWxlIG1ha2VzIHRoZSBsaWJ0b21jcnlwdCBsaWJyYXJ5LgorbGlicmFyeTogJChMSUJOQU1FKQorCit0ZXN0cHJvZi8kKExJQlRFU1QpOiAKKwljZCB0ZXN0cHJvZiA7IENGTEFHUz0iJChDRkxBR1MpIiBMSUJURVNUX1M9JChMSUJURVNUX1MpICQoTUFLRSkgCisKKyQoTElCTkFNRSk6ICQoT0JKRUNUUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKRUNUUykKKwkkKFJBTkxJQikgJEAKKworI1RoaXMgcnVsZSBtYWtlcyB0aGUgaGFzaCBwcm9ncmFtIGluY2x1ZGVkIHdpdGggbGlidG9tY3J5cHQKK2hhc2hzdW06IGxpYnJhcnkgJChIQVNIT0JKRUNUUykKKwkkKENDKSAkKEhBU0hPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKEhBU0gpICQoV0FSTikKKworI21ha2VzIHRoZSBjcnlwdCBwcm9ncmFtCitjcnlwdDogbGlicmFyeSAkKENSWVBUT0JKRUNUUykKKwkkKENDKSAkKENSWVBUT0JKRUNUUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChDUllQVCkgJChXQVJOKQorCisjbWFrZXMgdGhlIHNtYWxsIHByb2dyYW0KK3NtYWxsOiBsaWJyYXJ5ICQoU01BTExPQkpFQ1RTKQorCSQoQ0MpICQoU01BTExPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFNNQUxMKSAkKFdBUk4pCisJCit0dl9nZW46IGxpYnJhcnkgJChUVlMpCisJJChDQykgJChMREZMQUdTKSAkKFRWUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChUVikKKworbXVsdGk6IGxpYnJhcnkgJChNVUxUSVMpCisJJChDQykgJChNVUxUSVMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoTVVMVEkpCisKK3RpbWluZzogbGlicmFyeSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoVElNSU5HUykKKwkkKENDKSAkKExERkxBR1MpICQoVElNSU5HUykgdGVzdHByb2YvJChMSUJURVNUKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRJTUlORykKKwordGVzdDogbGlicmFyeSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoVEVTVFMpCisJJChDQykgJChMREZMQUdTKSAkKFRFU1RTKSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoVEVTVCkKKworI1RoaXMgcnVsZSBpbnN0YWxscyB0aGUgbGlicmFyeSBhbmQgdGhlIGhlYWRlciBmaWxlcy4gVGhpcyBtdXN0IGJlIHJ1bgorI2FzIHJvb3QgaW4gb3JkZXIgdG8gaGF2ZSBhIGhpZ2ggZW5vdWdoIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIGNvcnJlY3QKKyNkaXJlY3RvcmllcyBhbmQgdG8gc2V0IHRoZSBvd25lciBhbmQgZ3JvdXAgdG8gcm9vdC4KK2luc3RhbGw6IGxpYnJhcnkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoREFUQVBBVEgpCisJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoTElCTkFNRSkgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChIRUFERVJTKSAkKERFU1RESVIpJChJTkNQQVRIKQorCitpbnN0YWxsX3Rlc3Q6IHRlc3Rwcm9mLyQoTElCVEVTVCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgdGVzdHByb2YvJChMSUJURVNUKSAkKERFU1RESVIpJChMSUJQQVRIKQorCisjICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L21ha2VmaWxlLnVuaXgsdiAkIAorIyAkUmV2aXNpb246IDEuNCAkIAorIyAkRGF0ZTogMjAwNi8xMi8wMiAxOToyMzoyMSAkIApkaWZmIC0tZ2l0IGEvbWVzcy5zaCBiL21lc3Muc2gKaW5kZXggYmY2MzljZS4uYmQ4ZGMxOSAxMDA2NDQKLS0tIGEvbWVzcy5zaAorKysgYi9tZXNzLnNoCkBAIC0xLDQgKzEsNCBAQAogIyEvYmluL2Jhc2gKLWlmIGN2cyBsb2cgJDEgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbiBleGl0IDA7IGVsc2UgZWNobyAiJDEgc2hvdWxkbid0IGJlIGhlcmUiIDsgZXhpdCAxOyBmaQoraWYgY3ZzIGxvZyAkMSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuIGV4aXQgMDsgZWxzZSBlY2hvICIkMSBzaG91bGRuJ3QgYmUgaGVyZSwgcmVtb3ZlZCI7IHJtIC1mICQxIDsgZmkKIAogCmRpZmYgLS1naXQgYS9ub3Rlcy9lY2NfdHYudHh0IGIvbm90ZXMvZWNjX3R2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjE3MjllCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMvZWNjX3R2LnR4dApAQCAtMCwwICsxLDEyNjEgQEAKK2VjYyB2ZWN0b3JzLiAgVGhlc2UgYXJlIGZvciBrRyBmb3Igaz0xLDMsOSwyNywuLi4sMyoqbiB1bnRpbCBrID4gb3JkZXIgb2YgdGhlIGN1cnZlIG91dHB1dHMgYXJlIDxrLHgseT4gdHJpcGxldHMKKworRUNDLTExMgorMSwgOTQ4NzIzOTk5NUE1RUU3NkI1NUY5QzJGMDk4LCBBODlDRTVBRjg3MjRDMEEyM0UwRTBGRjc3NTAwCiszLCBDRkMxRTM0NDdGQzMzRTVDMkE3RDJCRjcxMjk4LCA1QkQ2QUMzMkYwQTlFN0FBQjZBRjcyMkMzQ0I3Cis5LCAzRjM3Q0Y4NzBCOTE4Q0Q0MUVFNThGNThERjE0LCBDRUMzRkE1QTUzRkY1QTM3MkI1ODNDRTQwRjIwCisxQiwgRDVFNDVEMjhBNDdBMDgxOUYzQUEzMDE4RTU4LCBCMDVEQjY2NTU5RkI3ODg3NkNGODMwQTZBREI0Cis1MSwgODY5RkVGQTZERTVGNjE5Q0E1NENBNzE5NTU0QiwgQkI5M0UyN0JCQzNGQUQwMTZCQzM2OTc2NkY0QQorRjMsIEJGMTc4NEI4NTdGNjY4RTk0NTk3MTREODBENzUsIEJFRTU1QjU2NENCOTIzQzcwMThFODU1QTJFMDUKKzJEOSwgMjcwNjdDQUIyQkM4QzkyMDFCMUU4RjFENTRGRSwgNEE5QkNFNDBEODdCMEM4MkVBNjZENjQ1QzkzMQorODhCLCA0RTk5NzREN0I4OTA0NDI3NjBGRTREMDVGQjhFLCA5NkJGNERERjAwNDNBQjZBQjc4RTM3M0RGMDEwCisxOUExLCA2Q0NFOTEyMkM0ODJBOEVEQzJERTM3MTQyMDQzLCBCQzY0RTFEMzU4RjcyOTNGQzlCMEMyQjgxRDNBCis0Q0UzLCA0ODI2OEVBODE5M0Q4QkQwMzA4MTA4NDExMzY4LCAxMjdBNkQ4RTAxMzk5REQzRjY1NEY3MTNCNUFCCitFNkE5LCA0NjE1NEZCMTAyOEJGRDg2Q0IyOTc0OUMxRTRDLCBDNEZBRDA2NENBODQ1NjY3Mzk0NTFEQzZERUYKKzJCM0ZCLCAxMUYxNkRGNEExMjJCNUM5OUI4OTc5MjE2ODhELCBDMkNFMTQ2QzI2QkI3OUY3Q0VBNzRBNDA2NjVBCis4MUJGMSwgODYwMjNENEU5QTQwMjUyQjk5NDMzMjNBQzZDMiwgOThCQzdDRkQ1NDA1Mjk3NzEzMzY0MTRCMDI0MAorMTg1M0QzLCA5RkZBQURFN0MxMzg3MjgwOTQyOEIyOEZGRUYxLCBBMzM4M0Y0NDZCRUJGNTdDOTMyMTNBNzBCMTU1Cis0OEZCNzksIEIxNkVFNDJFREE0ODRFM0UzMkJGQ0QzMDBBNTYsIDhEMEZFRUU0N0RBQUFDQUE5RDhCQ0Y2OUQyRkYKK0RBRjI2QiwgQTVCMzMwRThFQTM2MDc3NTIyRkUxQzZGQjdDMywgODhBODRCQjgwNkE2RjVBNEJGRjNFNTUxQUYwMAorMjkwRDc0MSwgM0M1ODZFRjNGNzMxRTY1MUNBNjAwMkM3MzMyRiwgRDA1OUJDNjhEN0JEQkQzNkNGQzk4OUNGN0JGMAorN0IyODVDMywgQzJDOTFGQTlFNzc2RUQzQkEyODVBQjVFMTA3QSwgQzkzRjQxQThBMzlCMkJBQ0JFMDVFMUY5MzQyOAorMTcxNzkxNDksIDM1NEFBM0ZFMTkxQTUwNjM1OUVGRTNCOUVCQzAsIDdCRURCQkVERUM3NjgwODYwODZDNDc0RkU5REMKKzQ1NDZCM0RCLCBCMEMzNEM3QjRFQzUwOUJBN0QxMjhEN0I4ODBGLCBEMTc2QkYwN0IzNzVFQkU4MDhGQjU3ODYzMzgyCitDRkQ0MUI5MSwgNjc1MkFFNjZGM0QzMzAyRURFMDIwRUY2NENGNSwgN0FCQ0NDNDUyMjdDRTNGQkE1N0YwMzZFNTE4MAorMjZGN0M1MkIzLCBDMjkyQzBGMjIwNUM3REQ4NUMxNjA1MDBDMzlGLCA0NDcwNEY1Q0UwRkE4MDNCNDRCQTg1QkQ0RDI2Cis3NEU3NEY4MTksIDU2MEE1RkQ0Q0JFQjI2RUYyQzRBODFDM0FCOTksIDlBNjg1QjZDN0Y4QkQyMDM3NjRCNjQ5ODAwNjgKKzE1RUI1RUU4NEIsIEJGRUMyNDk4QTVDNjYyRDdDRTBFQzA3OTVEODYsIDgxRUZDNDRGRkZCQTFGRTVDMTBFQTUwRTgwNUIKKzQxQzIxQ0I4RTEsIDNFQTg2MzZFRjc0NkI2QTdENDJEQTJFNjMxREQsIEQyM0RCMDk3RDlGNjU2QjkwMkU1QkNBRTU5MjMKK0M1NDY1NjJBQTMsIDExODlCRjJFRDJBMTBGNzMxMkYwREM2QUMxMzEsIDY3QUNCRTIwRjYzNkRENEI1QjM0MkEzQzc2QjkKKzI0RkQzMDI3RkU5LCAyODhCNEJCREMyOUVBNzExOTYzMDFCOEFGRTk5LCA4NzMxOTZCQ0ZDQ0FFRDJFMjIzMzUyNTkxN0UwCis2RUY3OTA3N0ZCQiwgQzg5MDA5RjNFN0E5MjEwMjIwMjA4MkE0QkUzNSwgODREQTMzNEJENkRGNDg0N0IyM0EyMjA0QkE1RQorMTRDRTZCMTY3RjMxLCAxQzNDOUY2RDE1QTlCMzY2NDMxNTc5RkI0OENGLCA5QUZCODFCRTgxRkE4RDFBNkQwNjdEN0NDMjgKKzNFNkI0MTQzN0Q5MywgRDk2RjMwREVGQUUxRjM0NDUwNjdFMUJDNTEyNiwgNUY5NEMyQTM4OEY3RjRFN0VDOUI3ODNEQjBDQworQkI0MUMzQ0E3OEI5LCA1RTg1RDI3NzcwMzFGRTc0QjAyMjE0QTg5OEU5LCA1NkJERUIwNTQyQkMzNkNDM0Y2QTI2OTY2N0VDCisyMzFDNTRCNUY2QTJCLCAxNTBBMkUyNDE2RTNBQzMxNTU2OUEzODIwRDkyLCA0REY4RkMxRjhBQ0QwNkI3NDJFNjExNjI2MTk5Cis2OTU0RkUyMUUzRTgxLCA1NDFENUZDQ0ZDODRBMkMwNUU4QTAxNDVCRkMyLCAyOEJGREI3M0RDRjQyMDY4NTdEMDIyQUY1MkZDCisxM0JGRUZBNjVBQkI4MywgQTk5MEEyQkMzQjExM0E2NDhCOUUwMEQ4RTc1MCwgM0RFQjlGNUI0QUE2OTEzQ0FCODQzQjhGMkJCMgorM0IzRkNFRjMxMDMyODksIDlBMEZDOTlCODI2Q0M2NjYyNTI3NERGMDFCMzgsIEEwNTcwNjE5RDIwNDdDODY0QjkwQzA1MTM1NzUKK0IxQkY2Q0Q5MzA5NzlCLCAzQkFCQjhFMzc2MUIzOEUwMDREQjMzNEU1NjhELCAxNjlCNDc0QTQxRDZEMDYwNUEzOUQ0NUMwQ0U3CisyMTUzRTQ2OEI5MUM2RDEsIEIxMkU4NzNGNThDODk3MThCNkRENDZEQTZDMDUsIEJEQzM2ODRBRDgxNzdGRkY5MDg2MURFRjM0OTcKKzYzRkJBRDNBMkI1NTQ3MywgNkI5QjE5NUVBOTE3OThGREZFQUJBQ0M0MTVCNywgNDBBMDY5M0NGRjUyREU1MzgxOUE5NzA0RENBOAorMTJCRjMwN0FFODFGRkQ1OSwgOEEwQUIyNEU4RTk3OTVCODQ4MkZBNDc4QTcxRSwgQkNDOTkxODIxRkZCNTczOEUwNjY3MzM2MzNGMworMzgzRDkxNzBCODVGRjgwQiwgNzMwRTQwM0U2NEQ2OTlDMTZGQUNENjczOEIyMSwgOTE5NzYxRDcxOUMxMkJEMkJGMjI5MTkzNzQ2QQorQThCOEI0NTIyOTFGRTgyMSwgMzMzM0I0N0I4NUQyM0M2RDgzMDBGNTIyOTQ2MSwgNDhENkZFQ0VBMzA4M0I5RDMxRUM0NjlDNkI0MworMUZBMkExQ0Y2N0I1RkI4NjMsIEMzRjVBRTQ2MTI1MkY1QjI2RUJDOURGMUI1RkEsIDE2REE1OEE2QzU2NTcwOEMxMzgyM0QxQjJFNTgKKzVFRTdFNTZFMzcyMUYyOTI5LCA2QkFFRUQzRTkwRTg0OUIwMDEyMDcxMDdGN0I4LCA1RTFDN0I4RUI0QjNFMzY3QTRDRUFGNEI3M0M2CisxMUNCN0IwNEFBNTY1RDdCN0IsIDMzODVBQzZCQkQ0OTBBRkYyMDE1MzIyODZEQkYsIDdCMDI3QkZGMDdCNTZGREU2RjBCQ0IzNzc1MkEKKzM1NjI3MTBERkYwMzE4NzI3MSwgODE0NkZENzQ1OTJCMTE0NTQ5MkQzOTY4MEFEOCwgNTA4QUE5RTEwNkU3OTU4Q0YwMTFEOEFBNzFFOQorQTAyNzUzMjlGRDA5NDk1NzUzLCBCMEZFMjQ0Q0FFRUQ5RkFFQzY3OEJEMjJDQ0QyLCBDOTdCMzI1NzQ2OEEyM0M0RjZFODgzNzM3RkJCCisxRTA3NUY5N0RGNzFCREMwNUY5LCA2MDVEQ0FGRjIzRERGODA0Q0IxQ0U0RkQ4NDdELCA2ODY4NDA3NjU5MUYwNDJCOThDREYxNDE0OEYwCis1QTE2MUVDNzlFNTUzOTQxMUVCLCBCNjVBQTBBQ0Y4QTlDOEU5OUEzRjY0OTMwREYxLCAzNDYxM0Q5MTU2MzAwMjM4MjZDQUU5MDg5MThDCisxMEU0MjVDNTZEQUZGQUJDMzVDMSwgMTZDRkQ0OUVFNEQ0ODUwRjE2ODlGQUIwMDQxQywgQjUwREQzNjYzQUZBNjdBMzA2NzAyQkIwNTgyRQorMzJBQzcxNTA0OTBGRjAzNEExNDMsIDRFMEVCQzgwNzU2Qjk5RDkxNjYzREI3RUU0OTgsIDZBMjJEOTQ0QjFCQUVDRThCMkVBRDZBRjNGM0UKKzk4MDU1M0YwREIyRkQwOURFM0M5LCA2MDMyMjE2MTU5NjVDOUVDOUU1ODdDMzQzMDNELCBEQ0IxRUU3QTBDNDFFNjVDMDhDQThENzg5ODMKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgQUI4MkY0MjcwRjhDMzVDNzc0MzQ0NTk1RjQ4QiwgM0I0MDA3MDMwRTFENjVDNkY4NTQ0NTA4RjVGOAorNTU4MkZGMzc3QjRBRTU1OEQwMjExLCBCQUFERjVGN0U5OTg0NjVEQkZFQzVBN0E0ODQ3LCAxMjgyQzk4MUVBNEQwQjhFN0M3N0RFOTA1RDVCCisxMDA4OEZEQTY3MUUwQjAwQTcwNjMzLCA2RDYwQTVDRDNDQTg2Rjc5QzU2NkY4MUFFNjZDLCAyMjU4N0QyNjBDRDhENDVEQUQyRTVDRTlDMkVCCiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCA2ODA1RjRGQzBCMzUwMTA5NzI4QjNGNTZCQzQxLCA2M0E5ODcwMzAwRUQ3RDA4NTJEQTcxNjNBOUNDCis5MDREMEVBREEwMEU2MzA1REYzN0NCLCAxODMxNTZGQ0Q1NkQxMUI4MkNFNEI2ODkzMjNFLCBBQjYxNDVDNUY3OTM0NDJCMDIyQjc2MjUxNzY3CisxQjBFNzJDMDhFMDJCMjkxMTlEQTc2MSwgQ0Q1OUFDODdCMDZDNUQ4QjFFRUI4QzU5QjI5QSwgQzk1NjcyOEQ0QThDRjEwNUYyRjE1QjdGMTI4QQorNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIDkwQUEzOThEQTgxMkExODBGRThGNkM4Q0NDNDEsIDlFQjJDNzA1RUMwMTFFQzIzMzQ1RTYxNDhERjMKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCAyMTk4NzM1QzgwNjI2NkMxQzQ3QzhBQzA4MTYxLCA1RkQxQTA2QzY4QkUwRjhEMDhBOEVFOUEyQzRFCisyREE4NjFBNEVGQTQ4RDU0REJBMEE3M0IsIDJGN0UwREZENjk1QTZGQjMwODVDNEYzRThDOTEsIEE1MUI4RUM1QzBDMTk4OTA3M0U3NTY2NjZFMDMKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgNzgyRDk5MkEwNjAxRUY0REFGRjg5QzEzMzE1MSwgRDUyNjgwRjM0RjBFMDNCNTRGNzZFNEY0OUY1MgorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgQkI0QzhEQzBGRTZGRDAwOEM4MTc3RjBEMEMwMSwgNTc1NzRBQUIwNzFDNjMzODU5ODMzMzIxMDEwMAorNEQwQzI0QzY1NDY1QUU3RjMyOUYxQTMzOSwgQTEyRjVCQkZEMzc1N0FENTdFQkYxOUZBODlBQywgQjVGMTIyODlDRkJFRDkxNjEzMjRFQTEzNzAwOQorRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgNkZCODJGOUEwMTYzMDEyOUQ3MEEyODU1REZGQiwgMzJFMEU1NUY1QjM5QzBGRDYwNDIxMjY4NjBFQQorMkI1NkQ0QUY4Rjc5MzIyNzhDNzk3RUJEMDEsIDM3RjAzNDYwN0I3MUZEMEJFMUY4NUFDQjgxOEUsIDM0Q0M2M0ZGN0RDNkU1NDQ5NEJFNjVGODJCRDgKKzgyMDQ3RTBFQUU2Qjk2NzZBNTZDN0MzNzAzLCA5MjBBREU4RDNBQUYyNDc4MzA4MkFGMTYzRkExLCAxM0EwMkVDODhDOUFGMjM3NDY3RkFFQ0Y5ODBECisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIEQyNzkwQ0ZENjA1RjJEMzIyRDIxMzA5MkE1OEEsIDFCRDdBRjhFNkYzNzEwOTA5QjdENDAwRjNCNTEKKzQ5MjI4NkU4NDIxQzg0QTJCRDBEMDVERUYxQiwgN0Y1RTU3MEZFMzBGNzIxMUFGMDVFMjQ1QzNGQywgN0VFRDQ2Rjg5MUMzNTA0NzBBQjI3QTFDRDBGOQorREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCA3NTQxNTA2MTUwREJCMUQ0QzQ0Q0JCRDhFMDI1LCBDODNGNTlEMDM1OTVGOTdGNkZBRDFFRjAwRDc3CisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCBDQTM2REQyNjg5RkMyODE5OTk0MzdDQzQxMkUyLCA1NzdFMDRFODA2MDAzQUFDNUE0RTI3RDQ5NkI1Cis3QjZBNDNBN0VGOTAxRkQyOUYwNUY5RTgzN0Q5LCBCQTU3QkRGOEY3NDhCOTQ2RjM0RjBDRTZCQTY0LCA2QjlCNUE1QTk4RDREMUYwQkJBNTY0ODlCMjU5CitFQ0MtMTI4CisxLCAxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NiwgQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODMKKzMsIEFENjMyRjU0Mjk0MkYyM0FBNDIzQjYyOEEzMDRCM0IsIDdBQTY3RUU0MjFDNEU3ODg1MUU0QjQ2NzlCQ0RDNDFGCis5LCBDNzMyQUU5NTc4ODJGNkFERUVGOTRFRjRGREZEQjVBLCA1RjgzMkQzQTQ2MUI5QkUwREFCOUI2RUZCREFBQzE2QQorMUIsIEMzRTdGQUEyQjAwNENDNjZERDc3OUQ0RDRDQ0M5MkEzLCA4OThBNUY3NzEzMDcyNjQ0N0Q3QzZBOUZGN0JCNTVDQQorNTEsIDg4MkU3OUJFNkUyQTkyRjE3RkNDMTRFQThGNEEwMDRFLCA4MUVGRUI4MzA3NjRERTMwODQwNDQxMDg3RTAyNjlBNworRjMsIEZDODc4NkU0NzkxMUJFQjQ0OEZDODYxNEZGNDRGOTI5LCA1RkUyNkM3ODM3Q0FDMEU3MkNDMzkyQUJDOTE1QkJFOQorMkQ5LCBFQjMwMDJBRjlERTRCQ0FCN0YwMENFMjJFNjFFNjM4QiwgQkE5NTU1NjE2RDYxQzNERjU1Rjk0MEQ5QkI5NDA3RTYKKzg4QiwgQUEzNzMzMkM5NTY1MUFBMjdENkMxNEIxQkRDNEI5LCBFMDYyQTBCMkYwQ0YwMkZEMDg1OUUyQUQ0NTJFMTJDQQorMTlBMSwgQzUzNjREMDIyNzNGNUFFMDMyRkZFNUM5NUJBMzNGQiwgMjEzNTlCRjNENDU1RThFNEZBMUI2NDk4Q0YwM0M2NjcKKzRDRTMsIDU2NTQwNjYzN0IzMzlDRDlFNTE0MDQ4RDBDMUI2NjY5LCAzMzY1N0I3RkFFMUQ0M0FDQjhBNTJGNUQ3RjBENDZGNQorRTZBOSwgRjY4NkQ4NTkzRTY3NUM1OTY5MTNEQzIwQzM5MTk2QUIsIEVDM0RBMTY0RjU2MTI4OEIzQkU3MjdBQkE5OUE1QkE4CisyQjNGQiwgQ0JCMjBCODM0NTkxRUQ1MzhBMzJCNzFERTVBQTE2OTQsIDg0Q0MzMjJEMzVCNzYwRTE0MjJCODVBQjM5NTAwQ0M2Cis4MUJGMSwgNTc2ODQwMjc1MEY5NDg3MDlCRjA4M0QzQjQzRDcwNjIsIDdGQ0I4NTc3RjE0NjZERDNCNEFEREE1NDMxRTYwMUM5CisxODUzRDMsIEM2MzE1OEZGMzM1OUNFNDhBQkZDQzU1M0Y0RDM3MkI5LCBCNkYwMjBCNjc5OEVGQjhBQUY1NDVEMUI5Q0E4MzIxNAorNDhGQjc5LCBDOEIxNTQ5Njc0QzZCMUJFRUI0NjI5NTM4NjlDMUI4OSwgNjFFQTk1QzFGQkY1N0VFRDJGRDc0NDNFNjY3RDVFRjgKK0RBRjI2QiwgOTNEOTc3MTVBNjcxRDUxRDU5MDFDNDE3NzJFQzc5REUsIENCQzg5OTRFQUY5QzQ3OEEwOEI2RDJFNkY5NUNBMUU5CisyOTBENzQxLCA1NEMzOEVBNTlFREU1NDU2NUZGM0I0NEQwQjgwNUM1MSwgNERGMTg0OEIwODlBQjNFNDk4MDhEQzZDRkQ2ODJCQzIKKzdCMjg1QzMsIEM1MUI1RkIwMkQ4RkY0MDk1RTFBRkIyNzZBNEI3NjM2LCBFNDQwMzkyMURGMDIyOTJCODFBNDFDQUFEOUUyQTY4NgorMTcxNzkxNDksIDM5QUYxNDQzRDg4RUJBQUZGNjQ1RDE2RjcyODE3MjhCLCA3OTk5MkQ5Q0FCQjY3NUIxQTMwNjdEN0NCNEM3RDIKKzQ1NDZCM0RCLCA0QjU0OTM2MTEzNjQxNkQ4NUFFQjBFRDBGQ0VCMzI4OCwgN0YxREFEOTREMUE3MjczNzI4NkEzMDMyQjZEMTU2MzkKK0NGRDQxQjkxLCBFQzI2ODI5OURFRkM1Q0MwMDNCNTkzRjhFOUQ5RDQ5NiwgRjM3NDQwMDJCODNGRkZDNkE1NDVBN0VBRjBGRUZGNkEKKzI2RjdDNTJCMywgNjcxMEQwMDIwNjVCODlFRjIyNzdFNkNFQ0E3REE3RTYsIEFBNUEyNERDQTUwMTBBMEEwMjZGOTA1RDM1N0NEMzVGCis3NEU3NEY4MTksIDkwOUU1MEE2MUE5NjM0QUM3MEExRjM2QjVFRUE2MkQ2LCAxRUZBODlBODFEODNDQzk5MTFDRDVFOTk3ODg3OEVFRAorMTVFQjVFRTg0QiwgNzZBRDBEQ0RBOTdDRTg2QUZBNTU3OEUwNUJFM0VGQzQsIDdEQUFEN0U3MjRBRTVFQjRCM0M5RDREMEZFQjJEMzBFCis0MUMyMUNCOEUxLCA1OERCMTUxQ0U3NEIwRTEyNDIwNjVGMzMyRUJDNTBBMiwgOEU2NUNBNjMzNjQxMzIzNUM3QzFBQzE0QUUyQTkwQzYKK0M1NDY1NjJBQTMsIDg0NDBFQkQzQkNCOThEQkQ3MTA4MzVDREE1MjNCMDQ4LCAzQjBEQTQ3QjE0NzI4QzYzODExMDU0RUMwRjgxRThGMgorMjRGRDMwMjdGRTksIENERDE0NjUxNDQzMjU0RTQxM0M2MDhGMTJDNjFBN0NDLCA1NTAyNzJCRkQ2MzczQkM0RkMxODMxQjM3QkQ1QUJFMAorNkVGNzkwNzdGQkIsIDRDMTkyNjA3NTEwRjM2MjU0ODQ2MTczMzAyOUIzRUQ1LCBCNzk3OTAwNkJFNkE5MkYyNDZEN0EwOTlGNzY5RDM1RgorMTRDRTZCMTY3RjMxLCBERUFCOEMwNTI1QkY0MUY1QzdCMENCRDY3QzJBQUI1MCwgQUVCQzk5RjJFNTREMDA5RTVFMkMzMjBGNjBDQUVCNworM0U2QjQxNDM3RDkzLCAyRkQwQkIyMjgwQkM2QzcyMkZFNUU4MEQxMkQxOTVGLCBGQ0EzN0VBQjA2MkE5NDYyQzAzQ0E5ODgyMTUwOUQwOQorQkI0MUMzQ0E3OEI5LCA4QTNEM0ZDQ0ZENUJCRkM5NEQxNkI5ODI5NTI3RUNDOCwgN0I5RkQwNDA2RkQyMDgwQjhBRDBDRDNFMTc4Mzk5MUYKKzIzMUM1NEI1RjZBMkIsIDM4MTAxMTRCNkMxRkUzQzNBQ0Q1NTIyQUM0NkFBRjk3LCBFQzMyREJFRTUyMUJBQTRGODJFRjc3RTA2MTlGNUMxOAorNjk1NEZFMjFFM0U4MSwgNDA1RjcwMTZDOTI4QTEwQkY2NkRBOUIwMzA0NEJCOUYsIEQ0Njk4OTI5Njk2RTNDMzdBQzdBQzlGQkJGRkE0NDcyCisxM0JGRUZBNjVBQkI4MywgRDY3RkU0RkREMkVDREM4QkFCQUY5MjZBNjc4MUY5NUIsIEQxRDZEQzdDQ0Q5MTM2RUQ3RjFBMzE3QzMyQ0IyMUZFCiszQjNGQ0VGMzEwMzI4OSwgMTk4OTFEMUNDQ0IwRDgyREMwN0U1NUQ4QUZEODQwNDMsIEY5NEEyQjYwRjM2MTJGMkY5M0YwODlGNEM3QTdENjUxCitCMUJGNkNEOTMwOTc5QiwgNDIwRDI5MjA0MTQ4RjVDNUFFM0UwMUY4NTFEQTQ5OTksIENFRDlGOTdGRkJCRkQ0OERDNDdBNzMwMjlDQ0REMTc3CisyMTUzRTQ2OEI5MUM2RDEsIERBQUNERTA1QjU1Q0JGMDM5MDYxOTA5NEEyMDA4NDg4LCA1NkVBN0Y4OUU4NDcxMTgwMzE1MEJEQjA0MjE3NjNFNworNjNGQkFEM0EyQjU1NDczLCA2RTVFODY4NDI4MEM4N0UxQzAwQUQ5RTNENjFDREY2LCA1Mjg3NEM5OUNCODQyMjU3QzBCMEYzNzlCOEJBRUM5MworMTJCRjMwN0FFODFGRkQ1OSwgMjAyRTgyNzhFOEMzRjJDMUFGODRGNUEwRjc2RjIzODUsIDY4NDRDQzY2OTY0NEIxQUI4RUUwRkRGRDlFQjk1N0ZCCiszODNEOTE3MEI4NUZGODBCLCAxMDc2Njg4QURENUNBQTFCOURGMDIxMTAxNzJGMjNBMywgRTQyRDAzQUU5MjQxQzM0Rjk4MzVCNTgwODYxNzZFMjQKK0E4QjhCNDUyMjkxRkU4MjEsIDQ0RDAxOUQyQ0NFQUM3NDlFMDNGRUQzQzIxNjA0Q0ZCLCBGQ0UxQzJCOTg0MTdEQ0EwNjEyNEIzQUU2QkI3OTFDMAorMUZBMkExQ0Y2N0I1RkI4NjMsIDEyN0E1MEY3QUI3QkVCNDEyRjkzRDcxQTVDRjYwRUUzLCBCNDgxNjBEREFEMDlDMDk3Q0I3NTlFNzdEQTA5N0ZFQworNUVFN0U1NkUzNzIxRjI5MjksIEIwMzlFM0Q1QzQxRkNDRjAzRDY3OUNBNjMzRTQ2N0JCLCBGRDU2RUYyNDlCODhGOUY4RTk0QjU1NTMxREQ0MURCQQorMTFDQjdCMDRBQTU2NUQ3QjdCLCA2MDRFNkQ4NzdBRUU4RjVGOTI2OUM5MzBDMTI3RDdEOCwgQkU1MEZDOEJFNTBGMDUwQjA2MTEwREY3MTc4MjUzNTcKKzM1NjI3MTBERkYwMzE4NzI3MSwgRTIyNkUyMzgyNkQ3NjJENkYzNUJDM0IzQkQzREI5NTAsIENGQjk0REI5MUIzNzVCRjgxM0QxMkQ4NTI0NTM4OEY3CitBMDI3NTMyOUZEMDk0OTU3NTMsIDgzNTAxQjUyNzQ5NzNGN0FBQzdFM0Y3OTk1MkIxM0VFLCBDOTkwNTk4RjQ1MjVFMzNCMjgwNjI0QTQ1MUNDQUVBNAorMUUwNzVGOTdERjcxQkRDMDVGOSwgREM5NDFGNTNFNTcwMTQxRDE1NEM4QThGNkJFOTY5NkQsIDY5RTI2OEZENjM3MDJGQThFRUI5MjI0NUE2NDE3M0ZECis1QTE2MUVDNzlFNTUzOTQxMUVCLCA5NTU4MkUzQkEyQjkyNjcxRDFDNTU5NjhGQkZGREFERCwgQjJEMjg2N0Q2RTY4NTE5RTQ5NzJFMTA3MjIyQ0MyCisxMEU0MjVDNTZEQUZGQUJDMzVDMSwgOUU1NTUwNzA2OEIwQUEzMzRCNjEwNjFCNTVBM0ZBNEMsIDc2MzI2Q0EwN0E2MDhFQUYyRTQ0QjI4NTBCRUVFN0QKKzMyQUM3MTUwNDkwRkYwMzRBMTQzLCA2NDVDNDczRDFEMjlFMTJERUIxMDNFMzM3ODhBRkMzMSwgNkRCQzg1N0I4NTExQ0JFRTg3REJDRUU1MUYxQkFGRkMKKzk4MDU1M0YwREIyRkQwOURFM0M5LCA5NzJGRDc0RjkwOTA4MjFFMUJEODI4MkRBQTE3OTM2NywgMzE1OTQxNzI5MzRGQzgwOTlGRTMyNDNDNzA5M0E2RTcKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgNzI1MDhENDA0NjdGQTUyODAyQTVFM0VBRTQ2QTE3Q0IsIDZDREJCMzI5NEZDQzQ2MzA1NDk4NzgzNUFBMkNGNjlGCis1NTgyRkYzNzdCNEFFNTU4RDAyMTEsIEY0NEIwQ0UzMEFFODU4MUJGMDI3NkU2MTU0QkFBQ0YwLCA5REVFRjBFRjUyMkRFQjQ4MUE1N0FBNTI4QTlFRjM4OQorMTAwODhGREE2NzFFMEIwMEE3MDYzMywgN0NBRDYyRjIzQjQ5OEE2MjlGNjFDMjc3Qjc4RjUzREEsIDhGODQ4Q0EyOEQxMDc1OEFGMjYyMDk0OEZFN0ZCMThECiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCA2NzRENEY4MEQxRTZFNjAwNjYwRkU4Qzc0NUMzNTEzNywgODExM0U5RkVGRUU2N0JGQTFDNUY4NERBMzdCODVBQzQKKzkwNEQwRUFEQTAwRTYzMDVERjM3Q0IsIEEyRTMyOThGNUI4RDVCQTQwOEZCRDU5QTBCQ0YyMUU3LCBFMTlERUEwNkE3Q0IyNTEzNjcyRUVDMDk3NDczMTFBMAorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIDgyRDQwNTQxMDFEMjYwQUY1OUJDNkIzNEQ5RjdFRjAsIDQ0QjI2NzgyNzhEQjZFMTlENkQ3RjY3OUM2NEUyQTgzCis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgN0ZGMjE2REVCQjAwNUQ3RDUzRThGRDgzQ0MwQjczOTksIEUzMjZFMEUxNTZGRjI2RkU5NkVCM0QxMzk4NDlDMTg3CitGMzgyMDhDNEZFMTg0NzE5RThBRTI2OSwgOThBNjE0REJEOTJDQUQ1RDE3QTBBNTFCQkE2NjUxQywgNjE2OEM0NjU5MkMwN0JBRjc5NEMyMDE4NDgzREY0RTAKKzJEQTg2MUE0RUZBNDhENTREQkEwQTczQiwgRTE1QUUxNTFDRkZGRjdDOUJBQjA2QzBDNEUwMjE4OUEsIDRGRDU3QTY5MzcyOEI1ODUxQjk2MTc2QkU4QTAyMENBCis4OEY5MjRFRUNFRURBN0ZFOTJFMUY1QjEsIDYyNkFEMjc3NDk4MzE5Q0VBQjU4MEMzREFENjExMzY0LCBENjM1QTU0RDMxM0NBMDFBRTU2NEQxNTA5MEU4RERFQgorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgRkJCODQxRDA4NzE2RjM5MTA1RjBDNkEwRTZCNDREMzQsIEIyMzg0ODk1OENFNTU3M0Q1RTYxRDc3QUU2NUFGQkE1Cis0RDBDMjRDNjU0NjVBRTdGMzI5RjFBMzM5LCBFRDZBNEVDNjA4ODcyRURERjBEQ0NGQUI5OENBRUVEMCwgMzgwRDhFQjdERkQyNzQ1OTY3MzE4OUZEMDk4NTg1N0MKK0U3MjQ2RTUyRkQzMTBCN0Q5N0RENEU5QUIsIENENzEzQTZGQTY1QzRERUNCMkU5MTlEODFGQTI2RUUzLCA3Qzc2REU3NDM5MTZCRkQ0NDgyM0YyMUM5N0ZFNkYxNworMkI1NkQ0QUY4Rjc5MzIyNzhDNzk3RUJEMDEsIDEyOUY1RjQwQjcwMTVDQTMxODJFNTZEQjVCQjk0NTI3LCBCNTQ3Mzg2OTQyREM1M0I5NDBBQkI0RDcxMEM1NzNCCis4MjA0N0UwRUFFNkI5Njc2QTU2QzdDMzcwMywgRDYxRkU0NDNFODc2OEI0QTdDNzVDNTFERkM3OUIzQzEsIDNENEVCMUFBMDYyRDU1NzcyQTU0RkE0MDgyNjI5NDAyCisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIEI2NUI1NDI0QjQ5MTY3RkFGNDlGNDVEMEY5NUU2QkY1LCBGNUIzNDc3QzM5MUI0QTBERjkyQjVGNTRBNjMzMjI1Cis0OTIyODZFODQyMUM4NEEyQkQwRDA1REVGMUIsIDlEQTQ0MDUxQjdGOTM5QkJENUE0RDAxNTZBQjI2OTc1LCA5RTlBNzdFQTI3QzRCNjI4MUEwNEMyRThCMjBDMjQ0MAorREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCA0QzZGNjdCNDE4RkI1RTRFMzU0RENCNjIyRjU1ODkzLCA5Q0U3RTQyNDkxNDhBNTRFRjlGNzVBMjNCRkY3RTE2MworMjkyMzZCRTJBNTMwMEE5QjhBNTc1MzRENjdGMywgODRGQkRFNDYxQUJGQjRDNDdEOUY5RUY2MDczOTAxMTMsIDJEQjlFRDkxNjQ3QzBCQjk4OTg1QkZGMEJDNjUyQzk0Cis3QjZBNDNBN0VGOTAxRkQyOUYwNUY5RTgzN0Q5LCAxMTFBNDI1Njk5QTk1Q0Q2RTZDRkM4QjJERTc5ODJBOCwgREUzQzI1RUI4NThGRjQ2Q0ZDRDc1NUM0NjVFRTBFQTcKKzE3MjNFQ0FGN0NFQjA1Rjc3REQxMUVEQjhBNzhCLCA0MThERERGNjQ1NTI0MkRDOEUzQ0Y3MDZGNzM1N0EzMSwgOTg3NEVGRDlCNzgxRTcyRDZERUE1MDkwN0UwOUY5RjUKKzQ1NkJDNjBFNzZDMTExRTY3OTczNUM5MjlGNkExLCAyNEIxQjE1OEVCODM4NzUyRUI3RUU4MjY2MTk0MkQ2QiwgRDYzMEIwNjU1OEQ1QzgwNDIwMzIyOUQyM0NCOTdCMUIKK0QwNDM1MjJCNjQ0MzM1QjM2QzVBMTVCN0RFM0UzLCBBQTYyQzUxQTE2RDc0RDU3MkUwNUQ3MjQ2NUE5RUFFOCwgQkE1NDZFRjQzQzg0MzJERDExMkY2RjNGMzM0ODRGQTYKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgQjE3RDVBNjNEM0U1MEUwNzU5RkFDRTE3MTM5RjRDOUIsIDU5RjBEMDk2RDIzQTcyQkNGMzk5MEREREY5QjEzNUYKKzc1MjVERTM4Njg2NUNFMzRFQ0YyQUMzNzZEMDJGQiwgQzM5NEE4NUREREYzRThERjVBNzg0Q0MyRDk0Qjg3QjcsIDRCODEyQUVDNDhEQ0QxQTg4NTY1MjI4NjJDRTExRkVECisxNUY3MTlBQTkzOTMxNkE5RUM2RDgwNEE2NDcwOEYxLCBEQTU0RDUxQzM1RkJGNUQ1NUNFMTZDNUQzNTUxQTY0RiwgQjVCNDZFMzg1NDFGQTdENEU4QjMwMEYzRUNGNDYyOTkKKzQxRTU0Q0ZGQkFCOTQzRkRDNTQ4ODBERjJENTFBRDMsIEQ1MkY3RTQzNzFFNzA2Njk0Nzk5NTlFNjc0MjZGMDkxLCBBQTAwMUIxRTc3MTREMEUyQjZERTgzQTgzOUNGMzA4MworQzVBRkU2RkYzMDJCQ0JGOTRGRDk4MjlEODdGNTA3OSwgODFDODdENDRBMTEyNjc2QzEyOUY3RjBBOEFCMkZDMkUsIDczNEU0RDg5MDJFNjhGMzQ2NTVBRDQyNURFOUM0RDhGCisyNTEwRkI0RkQ5MDgzNjNFQkVGOEM4N0Q4OTdERjE2QiwgNTZDRDJBRUVENzdGMERCOTAxNDAyQzMyREZGNEMzMjUsIDRBQzIyMzdFMTlEQTI5RDBGMjgxQjJCNEYxODk1M0EwCis2RjMyRjFFRjhCMThBMkJDM0NFQTU5Nzg5Qzc5RDQ0MSwgMzU2MjEyQzUwNzdGMTc2MjBFNkE3ODFBRjIwQ0Q2NSwgRDQ1QzczNDQ5RjZCNUY3RjI3MURCRENCMDlBRTkwQzAKK0VDQy0xNjAKKzEsIDRBOTZCNTY4OEVGNTczMjg0NjY0Njk4OTY4QzM4QkI5MTNDQkZDODIsIDIzQTYyODU1MzE2ODk0N0Q1OURDQzkxMjA0MjM1MTM3N0FDNUZCMzIKKzMsIDdCNzZGRjU0MUVGMzYzRjJERjEzREUxNjUwQkQ0OERBQTk1OEJDNTksIEM5MTVDQTc5MEQ4Qzg4NzdCNTVCRTAwNzlEMTI4NTRGRkU5RjZGNUEKKzksIDI1MzkzRTQ4RTJCN0I1REY4MTQyQ0Y3MzFFM0YwMDY2NEQ5M0JCQiwgRTc1REU1REY3NjE4NUMwRDIzM0YyM0EyRTdCOTczQTk1NDY5NDE1NgorMUIsIEEzRTMzQUVCMTZCOEIzMEYyOEJFMDBBNTRFRDFEMTI3OEVGN0U0QzMsIEVBMzMxQkFCQzFGOUM4NTBDQjZGRTAwQzZFOEQ1OTVBMkYwQTUyNkEKKzUxLCA3MzRGMEVDMTM0RkE1M0U1NzNCRTMxODI4RUNEQ0ZFOTY5MjMwRjE4LCBCMzk3MzZFMkZFOUE3NjY5NDdDQzhGMjM2NjI3RTY1NTFDNzRGMUEzCitGMywgQjVDNzA5ODdGMzgwQzNBMTQ4MjQ5OUI3RTM4REUxMDhFNDlCMUI3LCBEQTcyRTNCMDY5MzMxQTRDQ0NBNkM2NzcwQzFCMEU5NUJFRDhGM0JCCisyRDksIEEyRENFQjYzRjJEQTE2QjhBQ0Q2OEI2RUZGQ0M3MzBCQzc2N0Q0MDAsIDIzRDZERUZGNEEwQzA4NUQ2MjM2MjdEMjhFOTkxRUUyNUQ1QUU3NDUKKzg4QiwgQTMzRDk4MEU0RDFFNkVCREU4ODgzODA2NDVCMUY4MUMyODM0MEY2MSwgNDdEOEQxOEQ4RDY0MDEwNUNFNzM1RDA1NzBEMTZCNTc4Rjc1NTJDNAorMTlBMSwgQkQ1MkU1QzIyOUZBNTc2M0UyRjA0ODU4MjY3MkQ3Nzk5NjA5NTJENCwgOEVGMTc3OURBNUE4QUVGMjIzRTBBRUVDMTlEQzMxNUUxOUEzNDAyQworNENFMywgRTdENDk2NDY3NkMzOTk0QzA2MTkwMzAxNTJERDFFNzM5MTY2RjJFNywgMjBFNkJDNjc4RDRDM0MwQjA1MTQ3QTJERUIxMjNDRDY1OTAyNUNDNworRTZBOSwgNUQwQzMzRkU2NkZEMURBNTZGQTMxRTBDMTU3MDI4Njg3NUM3QTVDMywgOTE3NzczNjE1Q0EyRTFERTBCNkE3RTE0QkM1RUZBOEFCODY5NDdGQQorMkIzRkIsIERDNzUyMEFFOEE2MDRGQjVCQUZDQjQwQkFCMTg1ODAzRjUwMTJEODksIDNBQ0I2RTZGNDU0REVFRTgwOUQzNjExM0ZCOTQxQTMxOUMwMDQ1OTUKKzgxQkYxLCA5NjgxOTE5OTJBRUE1NTc2MzVGMzM3RkEyM0NEODhEQTI0REVCRjRBLCBFMzAzNUU1RTVBRkZBNzAxOURCODk5RkFGNjVGQUVDRDI3NTdFQTYwCisxODUzRDMsIDZEMjc4Qjg0NjdEQTQzQkY4NEI3MjY3NURFQzg3RUQ5MUE2RDQ4OTMsIDJFQjU1QzFDM0FEMUM5OEM1NTNDQzZCMkNCOThFNkNFRkM3M0M4QjUKKzQ4RkI3OSwgMzFFMDE0RDI3NDMwQ0U5OUU4Rjg5MzJGMzZEOUZFMTMyMUM5QUM5LCA0RUM0RkUyRUYyNEJENDI0NEY4NzJBQTI4NkVEM0JEQzE4MkVBNDEwCitEQUYyNkIsIDI2OTE5RDRFM0RFOTk5Q0E4QkZBNkQwMEZBOEU5N0M0MkZBRUE4NSwgMkRCODQzRjc2MDMzNjdGNEIxRjA3RjZCNDU0MDNBOEY4ODMyNEJDNworMjkwRDc0MSwgNEI3RDdGRTNGQkY3M0FGMTlDQTBFQzEzQTdGMjJCOEVBMzFDRTdEQiwgRjgyREMxNEI1RTUzQ0MzNUU0Mjc1QkY2MzlEQzIxQjQ5RjI0RUJCQQorN0IyODVDMywgRjQ0NTkwM0Y4MjVFRUI1QTNCQUFENkRENUU3QjMxOUIwRTlBQkMyQiwgQzVCQUVDQ0ZERUEzNEI3MDMyQkRBMjkzMkRGNEM5QUMxMENDQjRCNAorMTcxNzkxNDksIDQxODNCNUY5MzhGQkY1RjBEQzhBOTU3MDQwOTZEQjU5MzFBNUQ2MjcsIDJEN0U0Mjk0OUM3NzAzQkIwMTQ5RkY5NTgxNUYyREZBQUJCNkE3M0UKKzQ1NDZCM0RCLCA2N0VFQ0EyQTI0NDhBNDJGQjUwRjYzMjFGM0FCNEMwNkUzRDEwREEsIEQyREUxRUZFODBBMjlGNDYwRjdGN0IyREZCREQ5M0EzQjg3QkMxRkEKK0NGRDQxQjkxLCAzMDZENUZGOTBCQzU3QUU3QjM0N0U4OTM4RkJBQ0Q1RThDM0NCNEVELCAzODc3NDc0RUFCQzVCODhENTI5RUE5NTUwQTNFQjQ0NUE0RkUwMUY4CisyNkY3QzUyQjMsIDMwREU2RTJBNDM3MDY5M0JEOUZBN0Q4QTYwMEVBNUU2RDc1OTQzQzEsIEMyODhBNDg4NTdGQTJFOEY2NzdERUVENDRBMURDNUIxNjc3MDgyODcKKzc0RTc0RjgxOSwgNzFFNzk2RkY2NjkwMjNDNzE0QTBBNTIxNUQ3REUyNDlCOTZFNENCQSwgMUQ1QUUxNjAwMEZGQThGQzg0ODU1MkU5MzBFOUQwMEUyRENGQzRDQworMTVFQjVFRTg0QiwgRjhBODc4MUQ4RjA4NDRCQTBGNjg5MTg0RkY1NkFGRDUzRDg3NjU1NywgODQwRTc3NUM0OTQ3MzhFNDlEM0FFNUQwQUI3QkY2RjI1RjUwRjM4NQorNDFDMjFDQjhFMSwgNDhCNUYzMTNGMjNFMzFBNzJENjEzMzdFNTYyMDM4OTJGQkQ0QUU2OCwgQkFDN0E0OTk4NkUwNjA4OEE2MkZFMUFDMDdDQTJCNjdDQkFGQkVDNworQzU0NjU2MkFBMywgNzNDQjhENUE1QzI5NDFDNjM2QjVEN0U5RUM2OUMxMDE1OTgyMTU0QSwgQkNCODE5NzZGMENGNEY5RTU1ODg3RUU0QUU3Q0I1Mjc0OTQ0RjI4RQorMjRGRDMwMjdGRTksIEJGOTBFMDJBRkRBMUVCQ0MzNEIwMkQ2OTVDQjM2MEIxNTBFREUzRTksIDczNjFENkJENDY3NjdGMjYwNTk5NUE3NDQ4MTU0NTQxQUJGM0E5OTYKKzZFRjc5MDc3RkJCLCA5M0Y0QjYwMUQ4MThBNEMxMTAyNTc3OUJBQzgwOTEzQkEwODU4ODAxLCBDMzFBNjRERjJFNjAwOTAxNjc0QUExMjNBNzkyMTY4RTE3QUZFOTAKKzE0Q0U2QjE2N0YzMSwgRDdEODU3QjQ0QzUzQkJDQjVDM0M4ODhFMTVGQTJGQjMxNDUxRTI4RiwgMkUwRjAwOTMxRkM1RENCMDA0OUZDQzc4QkQyRjRCMjU5M0ZBOEY2QgorM0U2QjQxNDM3RDkzLCBBMjlCM0ZGQjQwMUZENzZBNDVEQ0Q4RjVFODdDMjEzM0MzNkZEMUVELCAxODgzRUU4OTFEQzA5QTkxNEFCMEI0NTZENzg4NzZCODlGNDU1MjY2CitCQjQxQzNDQTc4QjksIDlGQzhDODZBN0U5RjI5NThDOENEOTU3Qzg5QjQxNEE3NTk1ODY5NTQsIEE3NkMxNTc2QUVEMzA1Qzk0OTFCN0VDMDc1RDNDNzc2Nzc3N0MzN0EKKzIzMUM1NEI1RjZBMkIsIDZEMzQ4RTdDNEEzMTlCQjAwREFBNjY2MTVDMTEzOTc2QUZEQkY2NiwgQkM2REE0Rjk1NDU2MTdERDJGODAwRTc0QjIyMTQyRUJEMkRBMkZEQQorNjk1NEZFMjFFM0U4MSwgRERDNjhGOTgzQTBEOUVEQTcwRTBCOUU2MTlENzFBOEY0MzdCNjI3NiwgNzI2NjQyNjY4OTc5MzAwMTYxRjQ4QkE5Njk2QUJDODU1QkI0Qjc5NQorMTNCRkVGQTY1QUJCODMsIEY2MzgzOTlBODkwNEFGMDU5QjQ2QTZCOEI4QjhDQkRBRjU5OEQ5QzcsIDZGMjY3QjZDMjg3REY2MTVGNTQ5MTVEQzkyMkVFNEFFNDExMjZEOTMKKzNCM0ZDRUYzMTAzMjg5LCBGRDEzNjY3NEM1QTlFNTkwOUZGOTAzOTdBMTYwRUIyMjMyOTgzQjQ0LCA1MTQzRTE5OEMwQjlFM0Y3MDIxNUUwQUY4NDFCQzg0MUY3RjdGNkIzCitCMUJGNkNEOTMwOTc5QiwgNDgzODMyQzIxQTM1NjlFOEY1OEFEOEZDQUVBODRGN0ZDNDU1OTY2MywgNUNEQUE3RkMxMjhFODVBQzVCRUZCRDlEOTRBRUFBQzY4MUY3QUMyQQorMjE1M0U0NjhCOTFDNkQxLCA5OTE4REVDRjAxNjMwRUVBQTVCMjI2QUI2QUQ1NzdBNEQ5MDQ0RjhELCBGNTdBRDAxNjI1NjlDQjcyMkM4NURFN0NGOTg0NjZGRjRBQjBFMDlGCis2M0ZCQUQzQTJCNTU0NzMsIDU2QUVERkM5REU1MjkzRkEzRkE2MjVENkQ4RjVCNTRGOTU3NTQxNjAsIDI2RDM2NjAyODYyMTgxNTg2MkVDM0NERURDQTdCRDA5NjU0NjA1RTIKKzEyQkYzMDdBRTgxRkZENTksIEQ3MDc3N0U5RjIzODE0MjkyNTAyNzlGRkEwOUEyN0ExQUE3RUU4NjYsIEZERjJGRjFEMzY5RUQxMDAzQzFCQjNBRUUzRjVGNkRFQUFCQzBFNTcKKzM4M0Q5MTcwQjg1RkY4MEIsIEJEM0ExOURERjE2RDkyODFCOEY1QTM1RTA0NTgyMjk0ODFBQkMyQSwgQjM1RTNERTcxMzAzNzAyQTFBQThGOUI0ODQ1RTNCNjYwRUYzRjRGNworQThCOEI0NTIyOTFGRTgyMSwgOUQ3NjU5QzZCMTdEMTdERjUxMDREQjIwMjJCQzA1OUQ4NTE3MEY4MiwgREVCOUE5Qjc4NEUxNEVDRUExNDExNjQ0M0MyRkM2RDQ2RjcyM0QKKzFGQTJBMUNGNjdCNUZCODYzLCBDMTIyQkJDMjAzNEUzMDU4OEQxMDYzNzVDMDk4MDA2RjgwREJBQUZDLCBDMzE1NjdBMjg3RDBDRjBERjE5MDRDREE3QjIzOUVERjRERUY4M0ZECis1RUU3RTU2RTM3MjFGMjkyOSwgMUExMTgxODI5NzQ0QjJEMERCQUEyMzU3MEMxNDUwQkRBRTZBOTM4OCwgMjNFMjk1QTM4MkU4Q0IyQ0Y2ODIyQjc4NDA3MzQ3MTI0MjdGQkQ2MAorMTFDQjdCMDRBQTU2NUQ3QjdCLCBDQ0FDOTIxOTI0RTRFMkNFNzNCMTMyOEJCNjVEMUJFQjExMUQwNUY5LCBCNkRDRjEzODU3NTY5OUIyNEU2NUY4RTQ1MDlERTM2NTZBQjY3MEQKKzM1NjI3MTBERkYwMzE4NzI3MSwgNDZDQUUzRjg2NDExNDg2MjBEQUM5N0IyMjY5MDg2RTEwMzQ1MDhDRCwgQzQ2NkZCOTdEMkI2M0E4NjYwNzlDNEVCRTVGQjYxNDdDNEQ0MUM4NAorQTAyNzUzMjlGRDA5NDk1NzUzLCBDM0QwNUEwMkMwOTZFMTlGNkI4MjNEMzk5RjE3N0YzM0I2NjYxNDA0LCAxOUVCMUNFMkIxMjNGOEFGMzQyQTcwREJBNkJGMUIwOTA0REZBMjc3CisxRTA3NUY5N0RGNzFCREMwNUY5LCAzNTVGMTBGNTI2REUzREI3OUEyOEM0QUU0QUI4M0M5MUYxNkRFMkRBLCBEOTNBOEYyMjkyODQ3QkEyMEM1NEU5RDRGRTM3NkJFQzlCREJBRUQ2Cis1QTE2MUVDNzlFNTUzOTQxMUVCLCA2OUU2MTdCNUU0MDNBQjE1QjEwOTMyMDAzQUE0Qzc1NEZENTg1ODg4LCA2MTk5Qjk3RUIwQjYzNERGNEI1MTk4N0RFODczMEY3RTM2NENDNDZCCisxMEU0MjVDNTZEQUZGQUJDMzVDMSwgRjIzMEM3Njk3NkU1N0NGMTBEQ0U4ODREMTA3MTNDQUY4QjQ2OTU1QywgODBDMUExNTIxMUIxRjA2OTE5RDU2Q0M4NjM2MEFGRjM1MjJBRUJGRgorMzJBQzcxNTA0OTBGRjAzNEExNDMsIDUxN0FCRTIyMjQ1NTQ4QjE4Q0I3Q0E1NDE4NTJGQjQ2ODJDOTJCNTQsIDdBRDVBRDdFOTFGOEEyOEQ4NDJGMzhDMTI3NzU1M0QxNEMxRDhFQzQKKzk4MDU1M0YwREIyRkQwOURFM0M5LCA0QUQ3NzhGN0FGNzAzMjM4QTkzRUFBNzYxQjMwNUFDMzYwMDhBQUI5LCAyOTZDN0Q0MEQwN0MzN0Q1MTkwQjlGREI1NUFCRUI4MzYzRDU5OERFCisxQzgwRkZCRDI5MThGNzFEOUFCNUIsIDM0NTg5QTRGOTc0RTI3NzJCNTgxRjhCMUY5MjkyQjRBMzIyMUEzOTIsIDk1RjYzNEMwM0YzNDYxQzg4QzI1OEI2QzM0OTZDREY1N0NBOTQ4NTUKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgQkExRkM0OEU5NTU4NEYwODgxRjExN0M1MkU5Qjg0RDcwQURCOENCMiwgRTM0QjA1MTYxRDAwREUxQjkyMzU1MzhCNEU2NDAyRjhENjJERDEzRQorMTAwODhGREE2NzFFMEIwMEE3MDYzMywgOUVFM0Q3NDlFQTA4QTREQ0YzQTdBQjUxQzE1QThFQ0Y4RjQxQjAxNiwgM0EyMUU5NTYyMEFBQjVGOEI4MjlDNDk0ODEwRTkyMjZBQTc4MDYwRgorMzAxOUFGOEYzNTVBMjEwMUY1MTI5OSwgODYxMzU3NzdCNTAxMTlDRUE0QzU0QTc2OEI0RDU1QzE0QjZFRUFGRSwgRTg0OEIyRjAwNzJEQjFFNTdCQjJCQjQxRkRCRUVGNjEzNDEwMTkxOAorOTA0RDBFQURBMDBFNjMwNURGMzdDQiwgQjNFRjIwMzVBRjlBOEZGNkExRDU0MUQwRjFDNkQ1NkYyNTA1MUMzNSwgNzJERjM1RjUwRTQ1NDBDODBFMDdBRDVENDlFOUYxODJDRUY3OEFGNQorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIDZGOEU5RTk0NTY4MDVEQjBDNThFQ0M2RDU5Njc2NkExQTI0NEY2MEIsIDNFRENEQkNGQUNBN0E5RDVBMTMxOUU4QUQ0MjlBMzIwREY0MzU0QworNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIDkzRkMyRjIyMTY1RThBMjI0MzlDOUFDNDlEMEJFQ0UxRTJCQjg3MTYsIDc1MTMxNDQwNEVFMTA5MUEwOTg2NDc5MUZDQzkxNzgwRjk0MDU3RUYKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCBEMzQxRjUwMThENkFBNDVDMzFERUU1MzQxRDA5RTNFMDQ4MTRCNTZBLCA3QTNGRDhDRUQ4MkM3RENCRDQ0NEMyRTA3NjkxQjE3MTFDOTZDNTZFCisyREE4NjFBNEVGQTQ4RDU0REJBMEE3M0IsIDg5NjBCRDRDREE4ODU2MURBNDE1NTU0MkZDRTk5NUZCREVFRERGMjMsIDc5NzMxMkI3QjJCNUUyOTI3OUEzMjczMTkyRTBBMEUxNDhCQkNCOEUKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgNTkzOTZCRENEQTk2NUQxNUYxRkMwQkYwMjIyRjBGQzg2QjJDMzAwRCwgRDQyODNEMDNDNzhDNzE3NDQ1QUMzNjMyOEMxQTY0NjkzRkM3QkRCNAorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgNDBBMDA3NzYyODJEM0MzOTNCQkMxREU3QzlEMUMxRkJCREVDRjQ0OCwgNTEyREYzMjhBQUZFRTA5OUU4ODlDRkIyQzZGRTk5MjcwMDVGRDRFQgorNEQwQzI0QzY1NDY1QUU3RjMyOUYxQTMzOSwgREU2NUNBOUE1NjZEODlDNjc4ODY1NUYxRTQ1MDMyNEQ1NTRCODRERiwgQkY1MDhFOEI0RkVBMkIwMTVFOTZDMDNGQkUzMTI2OEE2RUQ1OTFBRgorRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgMUY2ODA0OTFFRjY1N0E1RkMyNDZGQkIyMDJBMDAwMjkyMzMyNTczMywgNTU1M0NDNjk4MjQ2QzlCNzg2MTc5QkM1MDM3QzlGQjAxNzEzODE0RgorMkI1NkQ0QUY4Rjc5MzIyNzhDNzk3RUJEMDEsIEYzMzMzNDRDOUY0MTk1NjlERUE2Q0IyMjhEODkzOENDNjlGQjgxRTYsIDVEMTkzQ0M1QzVBODMwQTEyQUM0RjZDOTFGQTYyNTNFOTEyNjdCMTUKKzgyMDQ3RTBFQUU2Qjk2NzZBNTZDN0MzNzAzLCBGRDY2MjM3NjhBMjM3M0I2QkNDNkQ4NDU2OTgxOEQzMzJFMjdCMUVDLCA3MkMzOTI5MTg1OUUwQUQxMjE3RDIzQTM0QjY2MkM0NjQyMTEzMDI0CisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIDk1NzYxQUQyQkQ1MURDNTg3QTQxOEFDREExNjA3NkE0REM4NDRFMjIsIEVFNUQyMTVEREY3RkU5RjZFQTI3NzQ4NDUwNDFFREIyRDYxQzZFODUKKzQ5MjI4NkU4NDIxQzg0QTJCRDBEMDVERUYxQiwgNEEzQzYwNzdENzZEMDkxNDhCMDYxMUM4NzQ2RUM1NkQwREVEQzAzMSwgQkNBM0JDMjE3N0Y3NzRDRjNCMTVCNkUyMTI4OTg2RkVCNzg5MzIyQworREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCAyQTNDNkFEODEwMjk5N0FCQjM3MkQ5RDlDOTdDNEU0RUM4QkFGRjk2LCBFMTUyQzRENUM1OTQwODhCMjc4RTJBOTM1RUZDQUJFMUU3QjFGRDZDCisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCBBQjA5N0U1QUNCMDJFNDQ1OTAzMDg5NUM2RTM1NDQ4NEVERjI1MUYxLCBFNkZFM0JDNTA3MjQ0MTY5REM3Q0FCN0RFMzJCNkFFOTJBQTFBNkJCCis3QjZBNDNBN0VGOTAxRkQyOUYwNUY5RTgzN0Q5LCAxMjlEN0JFOUM0RUM4OTE0QjQxQTJDNzY2RDQ3Njg3OUQ2Rjc2QkU0LCA1ODc5NjI0NDNCOEUyOTVCMUNCODkzRTRFRDI4MTU1OEE4QzhFRkJDCisxNzIzRUNBRjdDRUIwNUY3N0REMTFFREI4QTc4QiwgMUM5NkQyMTIxOEYyODUxRjQ1M0Q1Mjg3MTU1N0IwMzdCMzUxMkUwQSwgRjZCOTc3NzkxRTFDODNBMzRCM0VERTY3Q0FEN0I3NTFDRDBDMEU5MgorNDU2QkM2MEU3NkMxMTFFNjc5NzM1QzkyOUY2QTEsIEVGQkYwNzVBM0ZEQ0YxMUM2RkM4QzNFREFFQUIyNzY4QTZEMzA3MzEsIDZCNzI5REZBNTcyOTQ3NjU0NDc3MEY1MEY5MTVENDU4QjY3ODM0MUMKK0QwNDM1MjJCNjQ0MzM1QjM2QzVBMTVCN0RFM0UzLCAzNkJERDlGQzQ1QUI3N0IwNkNFMjE3M0I4Qjc5MzQyN0QxMDhFRjgxLCBCOTY2MTJBQUNGQjRDNDRERjc0QjZFMjZCMTIwMzhCRkRCN0FENjlGCisyNzBDOUY2ODIyQ0M5QTExQTQ1MEU0MTI3OUFCQTksIEZDNEQxNUZFRUMxMUEwRUY1OTYyMkI3RDI4OTU5NzA1NTIzNDVBNTYsIDFBQjIwNTczRjEyM0MxNDlENDg3RTNCMTMzNjk5M0QzRUY1QUQxQ0MKKzc1MjVERTM4Njg2NUNFMzRFQ0YyQUMzNzZEMDJGQiwgQzQ0MzBBODM1NzJBMUJEQzk4Q0IxRTQ1Nzc4MUE0M0MzNTA1MEIyQSwgQzNERTA5Njc0NUU4MzFFNkNGQzdFQkI5OEI3NDc2MDJDOTYwOTZDQgorMTVGNzE5QUE5MzkzMTZBOUVDNkQ4MDRBNjQ3MDhGMSwgQUQ3OEY4OTA1MTVCNDM2QjdCQUU2QTA4M0IyREQ1RTFDMUY3QjcwRSwgNEU4NDlDMjIxQTYxRTVENDZEQTIzRTNCMkY3NEI4QjhFRTE0RTA3NQorNDFFNTRDRkZCQUI5NDNGREM1NDg4MERGMkQ1MUFEMywgQTUzQkIzOURCRTYzRUE1QkI0OUQ1RDg1OTkxNjY2QzM0OTBDQUQwMiwgODg0NzlFRDAwMEY2MUUyODQ1MEUxQUYxRTBGNjJGNUFEMUUzRjkwNQorQzVBRkU2RkYzMDJCQ0JGOTRGRDk4MjlEODdGNTA3OSwgQTY1M0Y0MjU4OUY4QjI2RjAzMDY3RkJBMUQzRjIwMDgyNjMyQ0YwLCA4NjI1Qjg2RDkxMkQxNzdFMTM5RTRBMEZFQUJCNjhEQjI4RThEODRBCisyNTEwRkI0RkQ5MDgzNjNFQkVGOEM4N0Q4OTdERjE2QiwgNkE1RjJDODFBM0JBODU0Mzg1OEVDQzk3RkJEOThCQjA5OTBCODUxQiwgMjBGMzc3NzY5NDU5MkYxRkZGRkMwNTVCNzE2OTE5QzFFQTYyNTM4NQorNkYzMkYxRUY4QjE4QTJCQzNDRUE1OTc4OUM3OUQ0NDEsIDFEN0EyRkFCNDFBNUNGMURCM0EyMzVFMjYxQzVFM0QyQjRGOTJFRjQsIEExQkJDMEU2NzNGRUJENEQ1RjQwOTkwN0ZCRTQwNEI0MTQzNTM5NUUKKzE0RDk4RDVDRUExNDlFODM0QjZCRjBDNjlENTZEN0NDMywgMkY4ODVBN0EzNDVCOTlFMDMxOTJBNkVFRDVGOTY5MzQ3REE4MDVFQywgNjIzQjlEMUE5QTkwMTJEQ0RCOUJBNjg5NThBNDdFQ0Y0QzNDRDBBQQorM0U4Q0E4MTZCRTNEREI4OUUyNDNEMjUzRDgwNDg3NjQ5LCBBQ0E1QTM4MkM3MEFDRjYxOTk3MTZBMzZGQjk2NjZGNzFGOERGRjU3LCA2MkJBOTZEQ0RDNDgwOUU3MUM2NTkyMjhFNkNBMUZFODA1OTdCOEFGCitCQkE1Rjg0NDNBQjk5MjlEQTZDQjc2RkI4ODBEOTYyREIsIDZFQ0ZFN0U2OTVGMTdEMDQ4QzUxNkMzNTQ1OENBMzk2NzU0MTY1MUMsIDEwMzZGRDhEQjI2QTc0M0I3REI0OTlGNDJDNDMwMUYwNzlFNUQ1NjcKKzIzMkYxRThDQ0IwMkNCN0Q4RjQ2MjY0RjI5ODI4QzI4OTEsIDQ0RTBBRjdBMDRGRTM5NTdDNjA4MTQ2Q0YxNEI0Mjc1QzNEN0I2NjYsIDM4QTA3MTQyNTJCOUI3RDNBNDRFRUFFNTAwODZEQTA2QTkzODg5OTkKKzY5OEQ1QkE2NjEwODYyNzhBREQyNzJFRDdDODdBNDc5QjMsIDcwODhEOTczNjgwQTUzRTk0NzlEQkZGQTQ2N0EyMTExQkNEM0JFMEYsIDdENUQwNTk5NERBNTI5RThFMDA0RDY3MUU3ODhGRjNCRjg4OENEN0MKKzEzQ0E4MTJGMzIzMTkyNzZBMDk3NzU4Qzg3NTk2RUQ2RDE5LCBFNEE5QzMyMjVDMUMyRUI3NkNDNThDREM2RTg5NDk3M0Q1OEQ3MERELCBBN0I5MkM4NzkxQzVFNUJBQkFBMTc0NjY1NjRBNzI4MUY5MjIyRjM2CiszQjVGODM4RDk2OTRCNzYzRTFDNjYwQTU5NjBDNEM4NDc0QiwgNTczOTcxM0RCRDQ3MTY3RDNFMzJDRDc5QjQ3QTRBNkUyNzVBRjA3OCwgNURCNzNFRTZEQThENDk3OUZEOTRBMjgxRDYzM0I0M0FFQ0E2RTlECitCMjFFOEFBOEMzQkUyNjJCQTU1MzIxRjBDMjI0RTU4RDVFMSwgQ0Y5NkRDNDBFNEI2OUNEOEM3OTBGQkVEQzBCQjI1OTUyQzlERTVFQywgMzY2ODgxRURFMzcwNTEwQUUxRTgyNTMyMTQ3Q0Q4RTAxNzUyRThDNQorMjE2NUI5RkZBNEIzQTcyODJFRkY5NjVEMjQ2NkVCMEE4MUEzLCBDQ0IwNDNCNjA4REJDNjM3NjBCNTY0Q0E1MDY1NEZCODY4MTdFRkM1LCBBMENEMzhDRTUyREUyRjI4M0NEMkE3Q0E1NThFRDlCQTAxQ0I1NkYzCis2NDMxMkRGRUVFMUFGNTc4OENGRUMzMTc2RDM0QzExRjg0RTksIDlGQTIxQTIxRkFFRkJGQjZFMTI3NzVGOTk0OUFCRTI0NDI5MTEwRkEsIEVGQUU0MTJGRDQ3MkQyQTA1RUQzRjQ2OTMzQjNFRENGQjIwM0U3MjMKKzEyQzkzODlGQ0NBNTBFMDY5QTZGQzQ5NDY0NzlFNDM1RThFQkIsIDVEODc2MzM5RTcxNzAwODVBM0E3NDg0OEVBNzBCNjBCNjU4OEJENzEsIDY1QTdEQTVDMDlGNjQ1QkZFMTBDRTUyQ0QwMEY2M0IwMDM1MDM4OEQKKzM4NUJBOURGNjVFRjJBMTNDRjRGNERCRDJENkRBQ0ExQkFDMzEsIEM3RUY0Q0Y1N0YwQkU0MDE0NkIyRDVGNkIxNDQ0M0I2RDk2MTcxRTUsIEM3QjBCRjA1NTg0MzNGQkUxMDE4RkEyOEE4MEIzODQ1OTZBNkI5QkUKK0E5MTJGRDlFMzFDRDdFM0I2REVERTkzNzg4NDkwNUU1MzA0OTMsIDU3ODYzOTA2Rjc2MEVCNzQ3MkZEQkJBQTdBQjkyMkVERTk5QTMwQ0QsIDQ3MEVFRTM1Nzc1Nzk3RkQ3RDc1NjMwNjAxMTc4NEQ0RDFBOTRCM0YKKzFGQjM4RjhEQTk1Njg3QUIyNDlDOUJCQTY5OERCMTFBRjkwREI5LCA0RUUxOTgxRDU1QTc3RkZGQzM4NDRDN0RGQjg3RkZFQjMzRDIyODdGLCA0MTFEN0EyOTQ3OUE1NjVCRUZDNTZGNUZEMjk1MkRBREJGRTNCNzM2Cis1RjFBQUVBOEZDMDM5NzAxNkRENUQzMkYzQ0E5MTM1MEVCMjkyQiwgREE3MDZFNDQwOTQ0N0Y0MUQzNjYzNEE4OURFQURENDUwMDMxRUIwNywgMjVFNjZBNDc2Njg4QzQ5OUNFMzU0NTAwQjY5QUJGN0U1NEM4M0NBQQorMTFENTAwQkZBRjQwQUM1MDQ0OTgxNzk4REI1RkIzOUYyQzE3QjgxLCAzQjQ5MkUwMzc4RDhCQUMyN0ZDREFGRUI1M0I2REI4RTg4QTY3OEVDLCBCQTNBNDU5NDc0MThFNTFBMDlCNUZCMTZDODA4QjRBMjU2MTEyRTUxCiszNTdGMDIzRjBEQzIwNEYwQ0RDODQ2Q0E5MjFGMUFERDg0NDcyODMsIDIwMUQ2REI0NUVBMUYyMkU3QUZENkQxRTIyNkYwMjgxMjNFRTlFQzksIEU2OTQyM0Q1RDg3RkZCRjEwMUJBN0M4NUNDM0QyRjYzQ0QwMTNCQjEKK0EwN0QwNkJEMjk0NjBFRDI2OTU4RDQ1RkI2NUQ1MDk4OENENTc4OSwgQjIzRTA4MkZFRjNDODdGNkM0MzFGQTQyQ0FCMkU3MEU2QjIyMTY1QSwgQUFGMTM3MEZDRDM2QUZDN0VCQjE4OEVBM0NBQzM2QjYxNDNDNDMyNAorMUUxNzcxNDM3N0JEMjJDNzczQzBBN0QxRjIzMTdGMUM5QTY4MDY5QiwgMkE4MDg4MjlGMTc4OTg3NkIyRkRFMzQ0MzgyRUUwQjg2OTBDMkIwMCwgMzI3M0ZBOEQxOEEyMzlEQzgxRkU4Mjk0MzUyQ0Q0MEE0MDhGRUNBMQorNUE0NjUzQ0E2NzM3Njg1NjVCNDFGNzc1RDY5NDdENTVDRjM4MTNEMSwgREZBMDA4QjkxODc3ODgwNzgyOTdGNEE5RkEwMjE5MkM0RkMwREFFMiwgRUQwNjE0REFDRkNGMzRGMDEyNUZEQTZGOUU3QUZGN0M1RENBQ0NCNgorRUNDLTE5MgorMSwgMTg4REE4MEVCMDMwOTBGNjdDQkYyMEVCNDNBMTg4MDBGNEZGMEFGRDgyRkYxMDEyLCA3MTkyQjk1RkZDOERBNzg2MzEwMTFFRDZCMjRDREQ1NzNGOTc3QTExRTc5NDgxMQorMywgNzZFMzJBMjU1NzU5OUU2RURDRDI4MzIwMUZCMkI5QUFERkQwRDM1OUNCQjI2M0RBLCA3ODJDMzdFMzcyQkE0NTIwQUE2MkUwRkVEMTIxRDQ5RUYzQjU0MzY2MENGRDA1RkQKKzksIDgxOEE0RDMwOEIxQ0FCQjc0RTlFOEYyQkE4RDI3QzlFMUQ5RDM3NUFCOTgwMzg4RiwgMUQxQUE1RTIwOEQ4N0NEN0MyOTJGN0NCQjQ1N0NERjMwRUE1NDIxNzZDOEU3MzkKKzFCLCAxQzBBNTU4NTQ5MTYyRkU3QzVENzI3NEE3MzBFOUY1OENFOTYwQkM5OTU4RDMyODgsIDYxOEFFRUNEN0M2RDc5NkYwRkE5QkEzMzEyNDkwQ0RCRkEwRjM0ODhGMkZDRDU5QQorNTEsIDQ2QUZGODU4MjdDOTA2NTEzM0FENzlCQ0YwMzcyODIwQzgxODgwQzY0NUYyRDkyOCwgMUI4OTExRDQ0RjA2Q0ZGMTRCNDIyMkUxOUJDQkRBNTkxOTRGOTcwRjM0QTEwM0UyCitGMywgMUMxNDJDOTdDNkNERDVBODc0NzVFMDRGQUUyRTg2NzA4RURDQUFBMkYzM0Q5N0QwLCA2Nzc5MzcyN0I2MEZCQjJFOEQ0MTYzQzEzMUQyRDcyRjY3NzQ4MjcxMDlDMDJCNjkKKzJEOSwgNjE1NzQ2NTc3MEQwOEI4RTUzRkI2MEFDNTdERDY4Rjg4MTYwRkQ0NzRCOUIwMkIyLCBCQ0Y2N0NGNDAwM0NERTk1QjUwN0VBRjRFMDdDRDcxM0MyRjdBOUZCMzIwMkI0OUMKKzg4QiwgNzY3QjAwQzA5RTBENTgzQ0VGNEYzMDFCNzI3Nzc3NjczRUFEMjQyRjI1OTM2OTdELCA3Q0YyNTEwRDRGRjYwNEE3NDlGQTM5MThEQ0I0ODQwNDU1Q0Y3RTY4QUIyNDVBMEUKKzE5QTEsIDVBMTVCNjJDQzc0RkJERUI5MzFGMTI3MUNEMzhDRjlGMUQ4NjEzMTIxMzI0ODY3NywgQjY5QkNGNzhGOUJBNzZDNDU2MDFFRjI0ODZDMTY2RDA0RjM0NDE3ODA0RTkxM0VDCis0Q0UzLCBBNTFCQzI5QkRGQjA5OTNGRURFOTE5MTZEMDZENjA5RkM3NDRBODEzMDMzQjJGMjYsIDZCMEQ2NjlFQUQ0OTQ1MzE1RTkyOTg5MzU4QUJFMzYzQUNDQTkwRkYwOUMyNTEyMAorRTZBOSwgRkY3MTQwNDBBQURERjk2QTk0MzgwRUQ2M0ZEQjRENDIwN0U5Qzk0NjY0NzI0QzU3LCBBOEIxQThCMTlGMzM5QUM2NjM5MTk4NTBCRERCOEE0M0RFQUEwNEM4NjE3MzU5ODcKKzJCM0ZCLCAzNUY4MERBMkUyNEUzNTIzRjFDRjE5QjQ0QTVDM0IzQTU4Qzk2QUUxNDY0NjQyOTMsIDdFN0I3QzRBRkZDREQ3ODFGNjQxRjlDMjM3NkU1RTI0MTIxQ0NCMkI5OTU3OTAxCis4MUJGMSwgRjI5RjZGODRBQ0JGMUVFRTFBNEMzQ0Q0RDYwMDZFMEVFQjBBRTBBOUVFMDhFRTJBLCA0M0NCMzMwRTMxNDM5NDNDQkZGMUYwRUI4ODkyNThFMTIzNTNBMjc3N0Y2MUZENEIKKzE4NTNEMywgMkFBREU3Mzg4MDQzRkZERDRENEVDRTI2QURGNkM4NUU1NjRBRTcxMTlBRDYwMUQsIEIwMTM2Q0Q1NUFGNERENzZDMDkwMzU4MzI0QjJENDA0NEZFNzg1MTlBRkQyNjI3RgorNDhGQjc5LCBBQkZGQjQyN0FGMTlDMTYxODkzNEM0QUNGODBBNzNEMzBDRENCM0Y1NjQ3MzYxQiwgNTc3MDU4OTk3RDdBRjIzRjg4RDAzOUFFOEQxOTVFMUNGMjBFOTRBOUU1NUNGRUJBCitEQUYyNkIsIEU0NEY4OUYxRkIwNEZEQkMxOURBRDU3MEQxRUYzNTg4RUI0N0Y3OTlGM0IzMUY0MCwgNDc1MDlENkJGOEY3QTA3MjI1NUQ0ODU2QjAyMTU0M0FCMTdEREUwRjBFRUEwNDZCCisyOTBENzQxLCA4NUUxODBCQ0Y2QkU3Nzk2OTRBMkM3MUQzOTNBRjgwNDNBN0E3NEYwNzY3NzgyODMsIEIwRDI1NEMxRTY3QjdFRDU3QzQ4NDdBRURFN0YxMTBGQkVCMzM3MTA2NTE3MzUzRgorN0IyODVDMywgRjE1QjkyNzAxOThGNEFEQkNGRjNFMzcxOUYyMEY0NEU5QzA3ODZFQkY1MTE2QkNGLCBFRjEyRDk1RUZGRThGQTlFNDU3NEI5NDhDQ0IwMDlDNTlCODM3QjIwNjVENEU3NTQKKzE3MTc5MTQ5LCA3NkQ4MDI4RDM1RTJCNjc2MEU0MjcwNzgxRTJDQUY1MTMxMDQzM0IwQTdBNTI1QzQsIEZDMjk2OTc5NUVCNEJCQzIzQjQwMjg0MkM0QkE3MjNEMzYxQUMwNjU5NjZDNDkyNworNDU0NkIzREIsIDExNTU2OTMzM0YxMTFBMTJCRTU1NTY0NTM2NDRGMDA5NTY3RjRDN0I0MEM1NzEyQSwgOTU3NzZFRkY0NzQ5NkJDRTIxNUU2MDhGNTdFMjczMUZBQzI0NDU2NjY4NTVCQ0VECitDRkQ0MUI5MSwgMTgxQjgwOTdCQTU2NzdDQjNBM0MzQkM5NzdBRURCOEU4NjFEQzczNzRENUM5RDgyLCBGOTVFQ0JEN0IwOTUyMzgwQzIxQTIxNEY3NUE2OURGQzQ4NkYyMzE2QTdBMkJBQ0EKKzI2RjdDNTJCMywgQjQzQTE0N0M5NzkwODBGREM4MzYwMDM5RjQ5ODVFQTMxRjdDRTdEMDQ5NDc4NDUwLCBGQjQ2ODdERDdENzczNTlDNDk3MjE2RkFFNTBGOTUzQzM4Mjg4RkFGMjcxQkRBNjgKKzc0RTc0RjgxOSwgRjE2MTkxRkQwMDBFREZDNkYzRDBFOUM3NUREQzU2RUNDMDI1NUJEMDg3NEI4QjQwLCBFNkZGODFBNDMwNDA1QkYzMTExQUUyMUIyODY3OUQzRkU2QkNFNTcwRUJCM0VENkYKKzE1RUI1RUU4NEIsIEQ4ODE5MjIxNEYwQTI1RkFCQUQxMEVDN0E0RjdGRTBFQTZDRDMyOEQwRTgxNzg0RiwgRThEMTAzMzIzMTQwNzdGRjI4Mzc4QzBENDA0RkRBRUIzNTA4QkYxMUMwMjVEQjlDCis0MUMyMUNCOEUxLCBENzk3QTA3N0ZDNDREMUE1Mzk4RkJDRjY0OEZFM0NGOTIxRURDMjNBNTlDNkFBNTcsIDE5N0VCQTAxRjZFQkYwNThENEUxOUJCQ0YzNThFQkE1MTJERDRDNDAzMDk1Rjk2QQorQzU0NjU2MkFBMywgMUVBOUZFODNDRDM2MkY1QTY3NURBRTY3MkQxMjI5RDM3RkJENTAxQzBERUE3MDIxLCA1RUI2ODc0Qzg4NTNCMEZEMTA2NjJGM0IyNUZBOUEyMUY0QTY2MzE1RTc5MEZCOAorMjRGRDMwMjdGRTksIDFFMzYyOEQyNUYxQUYzQzUxNUMwNzU4NzIzQkJFMkQxMTFBRjdFNDc3OURGNDI1RiwgRjk5MURBQTdBQzJCRUFBMTUxNUQ4MjMyODNCNjdEOUZCMUI5MUMxRTA0M0IyN0VGCis2RUY3OTA3N0ZCQiwgNkMzRjhFOEMxMzVCQzQ2MjM0RDhCODVBQjlCQTk0QTlFRDJFN0ZGOUI4RDlEODRELCAxNzEwRDhCMjJDQTNGNTcyQ0NDNEYzRjdEMjlCNDUwOEZEMEVCNDk3MzdFQ0ZCMDEKKzE0Q0U2QjE2N0YzMSwgQTFERDdEQzE0QUQ4OTVGQzBFNkRFOTUwMTkzNzlBNEZDQTQ4ODk5NjkwMzMyMENBLCAzNENCODVBMkQ5OEFBQTBGRUMxOTlBNkRDMUY1QkQyMzlGOUUzQUQ0NUQ1RjlDNjMKKzNFNkI0MTQzN0Q5MywgOEEyOTIzNkNGRERFRDFGMDU3MTQxQ0RCMDFFMjA0MkEzNkM4NTg0QkQxRjdFQkIxLCA0MURGQTM4ODc0M0VCNzgwODQyQ0ZBOEU5MDM2MEUyMUJDOTU3RUYwQjA5NDNBRDUKK0JCNDFDM0NBNzhCOSwgRjBEMzFFN0JBNjI5OUNGOTdENDk0NTk3NDZGMzc2OTc2RjNGNjlBMjU0RkE0MzBCLCA4MTZCM0JFM0NEQTIxMkRDQTQ3OTQyRTgzOTQ2MEFGNTVCQjM2OENGODI0NDNGRDQKKzIzMUM1NEI1RjZBMkIsIEI2MUUzQ0U3NDY5RkI0NkE1QTc1RTZGMzY5MzE5RTg2QjNFREZEQzE1RkQ3MTEzOSwgNkU0QTkxQUNGRDY3QkVDMzQxMjBBMTMzMjlCOUI5NEU5MzM0QjQ0MEY1QkY5MjlCCis2OTU0RkUyMUUzRTgxLCAxMDc1Q0M1RDI3N0FFRDdFMDYwM0M4NTJFRUVFRkU5OEIwMTExNTc3MDQ3QzIzOUQsIDgyRkQ0MUMwREJCNzVGODY5OEY5NjI2MkVCNTNFRjZDNkQxNjZBRjA3ODUxOUUxMgorMTNCRkVGQTY1QUJCODMsIEM1RENFRjg4N0Q4QUIxRkVGMUREQjUyM0Y0RjEzQjNCOUM2NjkyRkM4RkQ4RkNBOCwgMTA4RUJERERDNDExNjg1RDI0MENDQjcyRDkwNDZGNjAzODhDNDVENEIzODBFRDdECiszQjNGQ0VGMzEwMzI4OSwgMTIxNEEyRjkzNjFGOEY3RTQ1MEQ1NzZBOEMyMzE2NDMxRURDRTFFMEI0MEExODBCLCBDNDc2OTlBQ0Q0RjFCNTgzNDhGNUFDNDg0Qjk4QTkxQUNEMzA5N0UxREQ4OEMwMUIKK0IxQkY2Q0Q5MzA5NzlCLCBENTkwRDJBM0I2REMwMjFFNEUzMkNEQzMxOUVBNDhDQjY4RkE3RTk1MzQwOUM3MSwgQzA2RUNCMEZENzJGNTU2MDA2REQ4MTBFODRFMEREMUIxMjA5MTk4RjAxM0E4NkQ1CisyMTUzRTQ2OEI5MUM2RDEsIDdERjYyMDExNDRBQ0QyRjkzRkI3NDg3MjRDRDRFNEU2RjM1RkRDOEM5NENCMjAzQiwgRTlBMTJCODUzRTk0Q0I3NkZDMEJFQkE1MzQ2MTQ0MUI3MUM1M0I1QzEwNjFDQzA3Cis2M0ZCQUQzQTJCNTU0NzMsIDc2MEZDRjkwNTdCMEZFQTE2QjYwQzhEM0Y3NTREOUUyQzE4Qjk3M0FCQzcwMUJDMSwgOTJCRkJBNkU1ODY1ODNGNjFGQ0ZGMDg2Q0JCNTRBQTA3MEMyNzNEODQ3NTc2QTgxCisxMkJGMzA3QUU4MUZGRDU5LCBFNDYyQkFDNjM3RTgwRDcwOUZDMjAyNkNBODY0MzQ5NzIyQ0ZGRUIyQThDMTQwMzQsIEQ2RkM5QUQ0RDBEOUUzQTgwOTAwREE4MjNBMDJEMDFDMjBDMDVDRDIwODIxN0NCMworMzgzRDkxNzBCODVGRjgwQiwgMkEyMDY2NDgxM0QyMzQ3NjUwMkQ0QzQwNUQ3RTA3MzU3MEY2MzFFNEUyNTI3RTg3LCA5N0YwRTA2MEJBQUIyMTMyMzY5NUJFRTY3MkFFMUExNUQ3QjQ5NjE3NkIxRjdDMjUKK0E4QjhCNDUyMjkxRkU4MjEsIDhBOUZFNUM3MEM4RTFCNzNDMEUyQTNFNUFDRTkxNzQxRjI0OEUzNkY1RTk4MDlFRCwgNzAwNTFDMjZGMzM4RDYxMDEwQTk1OTIxMTE3RTZGMEI2RTlCRjBGOUNFRDQyRUM1CisxRkEyQTFDRjY3QjVGQjg2MywgMjI4MzQ3NDlGMDJGQkIyRDk2NDM1OEQxMkE3MTMzREJEQTUzMjU0OUYxNzQ1RjM1LCA2NzM1NDZGMTNDNjk5NEI5NzBDMDM3NkY5NkJEMDA1MUQxOUVCMEQ3QTBDRjA5RDYKKzVFRTdFNTZFMzcyMUYyOTI5LCA0QTMxREJBMUI0RUE2RjVGNUExNjZCNzNDRjdFODNCRkJFQ0JDRDJDQjIyRDBBNjUsIDg5RThBQTIzMjVDOTg2NTU3QzI2MkJEQjJCRTgwNTIyMjg3NTI0MkUyNzZEN0U2QgorMTFDQjdCMDRBQTU2NUQ3QjdCLCA0RkU1NzlDQTg3QTAwNEFEMzZDRUExNDI5MkY5MUJCODVBNkY1OTY0NzYwNDMzRUYsIEQzODFEMjEyREFFRDE4OEU3MjFBRkI4MzU0Q0UwRDFCNzAxNUJBOEQ4RTgyNDRFMgorMzU2MjcxMERGRjAzMTg3MjcxLCBCODA0QTVGNDA0REMxNjNFRUQyRDJFNTcxRjVGQjc3RjM1QUE4QjA3ODU4NkFFNzMsIEE2MDcxRjhFMTZGOEMyRkM0RUM4N0IzRkIyMDQ0MkY0RTFBMzczOEU5MTMwNDU2OAorQTAyNzUzMjlGRDA5NDk1NzUzLCBDN0Y5MjkyQUQ5RkE5N0RBM0FGQUFDREEyQjZEMEI5RDgzRTcxMTZGMEIyQTJCNzYsIEMyNDk5RUQ0OTM4NDQ0RjM0RjFEODkxMzZDNzE1M0E2ODNBODRGMDQ4QTZEQjlEQworMUUwNzVGOTdERjcxQkRDMDVGOSwgQTVGNTM3NEIyRjdFMDdFQjA2NTYyQTFCRDNGOEY1MzE0MEYzRDQzNDcyRDFERTgsIDVFOTRCRERCMDBCRTQ3MjNENjRGNThEMUM3NkE1OTE2RUU3OUI5QkMwOEU2NTc1NAorNUExNjFFQzc5RTU1Mzk0MTFFQiwgNTQ2NjU4ODJDOTM5RjY5MzhFMDA2Nzk0QUIzRjJFQTUwMTQ4Qzc3RjJGM0UwOUE2LCBEQzE5RjgwQjIwMEZCMzZBQTM5MzNFN0REMkI4QkRDRDlERUZCRkEwOTRDMDY4QUUKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCA2RDMyQzQ3N0I5Qjg4RTRBMjk4NDk5NkM4RjU4NkU0Q0U2NzBBQkE3RjkzMTdCQjcsIDQ3QjFGQUU1QTczM0NDMTY1NjY2QThFMUIxQjNDOUQzNjUyMENBODI5NzhCM0M0QQorMzJBQzcxNTA0OTBGRjAzNEExNDMsIDcwNDk2MkYwMTU1QTE5MDdEMDRDOTIxRDc3MzgyNzcyNEMxNTUwQzlCMzIxRTA3RiwgRDY1RDJGREQxMEYzNTY5RUJFMEY3MUNBRENFRDZBMDhDMzBDNzlFQzIyMUZFNzAzCis5ODA1NTNGMERCMkZEMDlERTNDOSwgREQyQjA5QUJFQzAzQzJCNkI3OUM1OTUyN0JDMjUwNkFFOEFDRTVGNUJERjhDOUM0LCBBMEYwRkEyOEE4NkJGNEE4RUVEQzEzQTQwNzFDQTQ3OTlFM0VEM0I3QTU1MUZBRTQKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgREQ4RDQ0Q0U2NDExNTM1M0M1MUJCRkU5NzBFMUI3RjhCRUMwQTU2ODE1NjQxQUQ5LCBBMTY3OEIyNTU3QUY0MDM5QUQ1RkY1NTU5MkYxQjYyRDE2QzQ5MzE0NDY1MDU4OEMKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgOUY0OUZDMTQzMEY0NTFCNDIzOUMyNjVDNkZERUQ5Mzg2NkQ4MkRGMzAyMzMyOTZBLCBDNUIwN0Y4NDBFQjJGMTcxQ0Y0QTY3ODY0NzMwOTZCRDk0MDcwRjNEOEY5RkQ4MEIKKzEwMDg4RkRBNjcxRTBCMDBBNzA2MzMsIEMzRjhCN0NGNTdBMjgxNDYzMjM5QzAzQzUxQUVDODQxNDM1RkU3RDQzRjFFMjQxQSwgRDk0NzQyOTdBMzIyMDlBQzY1NzdBQ0RCRTU5NDgyOTcxRDI1QzgxMUE4MzUyNEE1CiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCAyRjg5RkY0MkEzNDc3QUYwMDk5RUI4RDIwQkZCRjI0NkE0MkJDRTI4QzA0MUJBMTAsIEEzOTU4NjIzRThBQ0RCMTY2NjJDM0Y1RUFGQjc1N0NCOTEyRjBFNTVBRjQ4MEE2RQorOTA0RDBFQURBMDBFNjMwNURGMzdDQiwgREU5ODc3QjczQjk3REFDNDBFMDY1NjBCNTM1NTdDMDkzRjQ2RTJBOUZBQTcwMDIwLCBCNzg2ODQ0NENFNjM4QkVFQThDMDYyQUY4RkRDM0Q0MkJBM0VEOEQzODQzNjgxOTYKKzFCMEU3MkMwOEUwMkIyOTExOURBNzYxLCA4NzQxMUYzNTc1MDVCRTYxRThBMkVDODNBMUM3M0Q0MTQ4OTM0MjFFNzk0MkE2M0MsIEEyRjY0MUJBOTJGNTlCQzJGRDAwNTFFQzc4OURDNkEyMkQxQjc5MDQzMUNENTNBMQorNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIDMzRUE0MEVCRDE4M0QzQ0EyRTk2Nzc2MzcxMUY1RUFBQzI0N0E4M0QxMEY0RDhDRCwgQjUwMTg2OEI0OTQyRDFERUIzRjREQkIxOEM5MzhCQUFFQTA5N0I1REM4RENBRjA2CitGMzgyMDhDNEZFMTg0NzE5RThBRTI2OSwgOTc1ODM0NzUzMURFODJEMDQ4N0VBMDNGRTQyNDU3NDc2NDBGQTdDQzEwODlDMjdDLCA1RjM3RTYwMUM1NkVEOEI2MDBDQzlEMUI1N0I5MDlEMjFBMTJFQURFQjkxNzYzNkEKKzJEQTg2MUE0RUZBNDhENTREQkEwQTczQiwgNjNENzAwN0EzQjI1QTM2Mjc2N0E0MDQxMUIyQTAzOTRBQUNEQkYxM0E3RUVERjNELCBBNzIxRDEzOTU3NDVFNDAzMURGMTc3QjUzNUMwOUZDOTQ3NTZDMEZEQTBBRTY2MzEKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgNkM4QThDMjM5NEZGMzgwQTIyODkxN0IwOEIxMTFENzZBMkE0RTlFRkQ3RTRFNjZFLCAyRUE2MTczOEMyNEQzM0MyNzg5QTE4NkE1Q0MxNTI0NTc5OENCQzYyRjVBNzQ3NjYKKzE5QUVCNkVDQzZDQzhGN0ZCQjhBNUUxMTMsIDhERjMxNTgyMEJEMjRCRDZGMjAxMjJFQ0NBMDNFQzYwNzgzNTc2RkYxOTMxRDA2QiwgRkZBMkFDNzgzNkIyNEMzQzJFRUJCNzZGMjRCNUE3OENFOEJEQzgxNDQ1NDVFQjlDCis0RDBDMjRDNjU0NjVBRTdGMzI5RjFBMzM5LCAzQ0JDRTA2OUM4MDM0RDIzM0I5QzJBREUzQzhGM0YyNkQ2MDA0RDY4NTFCRTM2RUUsIEYxQ0NFNDUzQzQyRjYwOEVENzlFQ0JFOURGRjA1RTEyRDc4NDNEQUMyQUYwMTY1RQorRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgQkM2MTk2QjhFMDIwRjc2NEE4NEU5QTcwMzJCMkFDMzg0NjAwMTVERkMzRUFDNDExLCA5MjRFQjk0NjBCRDcyM0NCOUVEMkREM0U4OTRDQjI0Q0M0MTJCMENBRTJBRjg4ODYKKzJCNTZENEFGOEY3OTMyMjc4Qzc5N0VCRDAxLCAxRjlFNzM0Q0Q0NzQyRkE4NTM3REI5QkJENTNBOUVFQTk0RDRDRDQ3QkNFOTIxOTYsIDJGMkZBRTU1Rjc5QUNCRTYyMjNBQUNCMzAyNTUxNjFBQzlCOTlGM0E3NzA4NzQxNgorODIwNDdFMEVBRTZCOTY3NkE1NkM3QzM3MDMsIDZBMDBGNTQ3RDJDQTA3OTI5QUQwMzgyRUMxQ0YyREU0MjQwQ0YwNEUyQURCOTU4LCA5RjZBMUQyMDAzMDMyQjYxRjY1QUJBMzM0Njk0NjRBRUUyMkZGRTQwQkQyMTRFQkUKKzE4NjBEN0EyQzBCNDJDMzYzRjA0NTc0QTUwOSwgODYwN0RFNjgyRUY0MEFCMTc3Rjk2NTQwQzcwODMwODU1QzFEOEEzQkIzMzQwMzY0LCBCQzVCNTlGOUU4Qzk4M0VEMzMzREM3NTIzMTIyMzY2OEMyMENEN0Q4MThGRTA5QjEKKzQ5MjI4NkU4NDIxQzg0QTJCRDBEMDVERUYxQiwgRTQwRTdCNUU1Q0I0MjI0MUNDMjMxNzA3MzlERTQ5NzhGMEMxRkFBNDRDM0IwQTY2LCBDQUVFQUEzREUwOEJERjMyNDI3Q0RERjhGRUJGQzQyQzI1NTVGRTM4NzAyMjI3QTcKK0RCNjc5NEI4QzY1NThERTgzNzI3MTE5Q0Q1MSwgQjcyQkYwMjRCM0Q3NkQ4MDhENTU0RDRBNjUzMzRENEZDRThENTAxMEQ4MjJDMEVBLCAzNTA0QUMyMjJGRTgyMkU0ODFBMjdGOUMxNkVCNTg0RkNCMzkwQ0FEMEZFQkI0NkIKKzI5MjM2QkUyQTUzMDBBOUI4QTU3NTM0RDY3RjMsIDg4NkFFRjY2OUJDNTY0NjE3QjY2RjYwNTdEMDQwRTYwQTNBQUM4QURGQkM1ODgzLCA3NjVEMTMxN0U3MzBFMDQ2MjI4NjM0MjQxNjI2QUQxN0EwMDREMERFQjNFNkI4RTkKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIDkxOUY1Q0NFNEE4ODlCQUExREVCOTE2QkJBQjVDOTUxNjM5MzVEQzdENzhCMzVCNywgMkFFNkM5RjhDMDI3MTM1Qzg4REZCMTIyM0NGN0I5RTE5OEQ2MzVEN0JDOEZDQTJCCisxNzIzRUNBRjdDRUIwNUY3N0REMTFFREI4QTc4QiwgOTc1NjRENEZBQzM0OURFQUVCNEFEMjREOUMyNTY1Q0FDQTU5OEJBRDA3OTgxRTJCLCAxNzYyMTI2MUYxNDc1NzREQzJENjYzRDU4QTgxMDExQ0I0MkM1Nzg3NDI0RkE1NzAKKzQ1NkJDNjBFNzZDMTExRTY3OTczNUM5MjlGNkExLCA0MDY3NzA3OUI1MDBCM0RERUFBNkIwRDUxOUM1MUNDOTk5NTRCODBERUZCNDE2RjQsIDdBODBCMDgwRjQ0QzRGNzFBMDFDRkZDMzM2MjJFM0RGQzk4NjU2QjNBNUNGNzAxRgorRDA0MzUyMkI2NDQzMzVCMzZDNUExNUI3REUzRTMsIDc4RUE1MzZCMjM5MzhBRjY4MUUwREE3QjIxNjgxNUMzQTlENjJBRjdDQTc2Q0I4RSwgNEE0NDMxOEUyMUY3MkUwQ0YwOTJEREI4MEE5QTE0NUQ0MjM1MDVDNzc1MzMwQkYyCisyNzBDOUY2ODIyQ0M5QTExQTQ1MEU0MTI3OUFCQTksIDFFNDI5NkY4QkJCRjJCQTE0MTZCMTMxNzEyRDBEMDMyM0NENTY2RDI4ODYxN0EzOCwgQzRFMzM5NzdGN0NFOTk4NTI4QUJFOTg5OUJFQTMzMTJGQUQ5NzZBOUQwN0ZEQkMxCis3NTI1REUzODY4NjVDRTM0RUNGMkFDMzc2RDAyRkIsIDVEMzdGMjc3OTg0RkExNUZCNUU0N0VGMUI0QUI0OERBMDAyNUUwMUM3MEJDRjE5MiwgNTM3NTg0MzdERDlGNkNFNzIxNEVEOTk4MDYzNTBFNTgyMkMxQzAyMjM3MUM5ODYKKzE1RjcxOUFBOTM5MzE2QTlFQzZEODA0QTY0NzA4RjEsIDQ1RjBEOTMxQkUwQkVDRkExOUVFNzdDNjlGMkQ2RUUyQkZENDZBM0FCQTlFNzg2MCwgMkREMjA1QzczNkNGOEQ0NzQ1MDhEMUQ5RkVEQkFBOUIzOTgxMjRDODk2M0FDOUFGCis0MUU1NENGRkJBQjk0M0ZEQzU0ODgwREYyRDUxQUQzLCBDNDE0OEVEMzNBMTFFM0I5MTlGNjc4RDBGNkRGMkU1RjE5RTg4ODI1MjMzNzUwMiwgNkJCQjVFRjVBRjA2ODg5NTBCNEU5QTA1QjY5RjNBQjQ0NDk3MjRDRkYzOEI2RDE3CitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCAxRjU4NTVDNTczRUE3Qzc2RDZFNkIzNDUzOTg4NUIxQ0FERjY5QTI2QzRGNEQ0MiwgMjVFQzg0NDc3ODY3MTgzODczOTM4OTk5QzU0NDU4NzE2MzBEQzlFQUM5MzMxQjdDCisyNTEwRkI0RkQ5MDgzNjNFQkVGOEM4N0Q4OTdERjE2QiwgMjI3NTE5NEUxRkY5RjA3MUQwQjlENERBQTBDODU5RTlFRkFCNUREMDEzMUI4NkVGLCBDRUJBMUU3N0YzNDlGM0E5RTRFOUNENDI2ODlGQjI5RTA2MzMxNzQ2MjdBOTg5MkUKKzZGMzJGMUVGOEIxOEEyQkMzQ0VBNTk3ODlDNzlENDQxLCBBMkNFMUI3MjJBRUREMUM1NDVFMUZCNkU2QTMwMThDMkVEQ0FBNURCN0Q0QjUyM0MsIDc1OTA3MEZDMENGNjYzRjFEODRFODg1OTUyRkQ5NjgxODk4QURDREE0N0QzREE4OAorMTREOThENUNFQTE0OUU4MzRCNkJGMEM2OUQ1NkQ3Q0MzLCBBN0JGNDQyODRCOUVGNDk2OTQxRjMxQjY0NDJFRjY2MzYyNzQyN0M5REU1MEFBMTAsIDk5M0NBMkU0QjI2M0JBQUJEQkI1OEQyN0YzRTNDNzJCQzcxNjQ3RDlFQzNEMEFCRQorM0U4Q0E4MTZCRTNEREI4OUUyNDNEMjUzRDgwNDg3NjQ5LCAzREI4MjVGQzMzNDk2RkVCQ0EzN0ZGQUY5NThEQkVCNTBFQjg3MEY3MTkzRDJCQiwgRDU5ODg0QTBGQTc4NTM4QjY3ODYyODM3NEREQTIzRUQ2RUVGNzVBODYzRTNGNTNBCitCQkE1Rjg0NDNBQjk5MjlEQTZDQjc2RkI4ODBEOTYyREIsIDhENjAxMTE1MTMzN0M1NzA1NTI3NTdBMjJFM0EzMDJGQ0I3QkMzRDYxREY2MDYxRSwgQzQ1NUMzNUU0QTA3MUNBMjcxNUM4MDEyMUJFNDNEQUVGNTE5QjVEMUI3NjhCODQ5CisyMzJGMUU4Q0NCMDJDQjdEOEY0NjI2NEYyOTgyOEMyODkxLCAxMzcxNTE0RDMzRDQyNTZFNTA0MjU1MDA3MDg0MTZFNEY4NzA2RUU1MkY4MDNBOTAsIDg5MkZDNzA3RENFMzM1MkNFOEVEMjNFQ0U5ODk4MjVGREVCMzJFNzlDMDQ5QzJEMworNjk4RDVCQTY2MTA4NjI3OEFERDI3MkVEN0M4N0E0NzlCMywgQjk0MEVBMzEzM0NCRjVBM0UyODdGNzFFRDVERUY5OEZCOTMxQkMwOTY1QkI2QjM2LCBEMjcyMDkzQzY5NDExQzEwREE4OTMzMTY4MzFBM0REMTFENzZDNDQxQUUwRTM4RDkKKzEzQ0E4MTJGMzIzMTkyNzZBMDk3NzU4Qzg3NTk2RUQ2RDE5LCBDMUJGNjFDODVGNzlCMjRBN0IzMDI0MEQ0MkE3MEJFMEJFNUU3REU2QTA1NjM0NzEsIERCNDlFMDJFQzBCQjA0MDFCRDU2NkIwNzIwMTM1NTIyNjZGNTE4REYwNTk4N0JFNQorM0I1RjgzOEQ5Njk0Qjc2M0UxQzY2MEE1OTYwQzRDODQ3NEIsIEMwRUQ5M0I1M0ExOTNBMzVEMTc5NDMzN0Y3NEM0REQ1OEQ4QkE4ODY3ODkyOUU2OCwgN0RFODZGRDFDNDY5M0RDOTAxQTc4OTBERUNCMzA3RjAwRUY0MzJDRDE3QTk2NjlCCitCMjFFOEFBOEMzQkUyNjJCQTU1MzIxRjBDMjI0RTU4RDVFMSwgNzFFNkUwNDcwQTJBNzY1NjZBQ0ZEOEM2OTc4NjIxM0RGQzUwRkY4NDQ5RkE5RDAwLCA2RkY4NjA3RjAwM0E5MEZCNzY4NDBEOENBMzY3QjQ2MTJGOEE1NTVCQTJDN0QwN0IKKzIxNjVCOUZGQTRCM0E3MjgyRUZGOTY1RDI0NjZFQjBBODFBMywgMTYyMzc2RjI4RTUzMjQ5NjExNTU2QzFBREQ1OEREMTVBQTY2NDUxRDQ5QkRCMThDLCA5QTI0Njc2NUU2Q0E1QjE5QkY4NTMzMzJCMzlGRUM0MjE3MzlEQjUyNzAzQjY1MTMKKzY0MzEyREZFRUUxQUY1Nzg4Q0ZFQzMxNzZEMzRDMTFGODRFOSwgN0YzMzU1QTEwQzk2RUU2NERFOTVDQjQwRjJDMTZDNkE4QkQ5QUIxOUYyNDNFRkFDLCBFMjVFRDdENEJGMzk1QUNFMTVDQTdBRDlDQ0VGOEY4MkMzQjg2ODBCNDBDNUFEOEIKKzEyQzkzODlGQ0NBNTBFMDY5QTZGQzQ5NDY0NzlFNDM1RThFQkIsIDY1ODAxQkYxOUMyNkYyN0JFMjU5QTY4MDMzMDk2QzBGMjFDQjkwOEMyQkU0MzFGNywgMUNCRjdGRDE4MEExRkE3NjczQkIyMERERDNERUFGREQyMjQ5OTJCMDAwREFFOTY5CiszODVCQTlERjY1RUYyQTEzQ0Y0RjREQkQyRDZEQUNBMUJBQzMxLCAyNDM0NDQ3NTAzQzczQ0JFMjUwMzI5QTY0OUE3MUJGN0ZCOTIzNUI0RDdEQjVBQUUsIDRGMUU2QjM2OTE1MTJCREZENjQyQjgzNzAzNUVDNjhCM0REQUQwODMwNkQwRTdCQworQTkxMkZEOUUzMUNEN0UzQjZERURFOTM3ODg0OTA1RTUzMDQ5MywgQUJFMUQ3QzlENDQ0NkNBRDk2QjY5NkUxMjkyMjVBQkFFNzlCRkY0M0NCRkY0RUFGLCBBMDdDRDBEQTYxNzc5MzhEMzM0MzgxQTZDQUQ0RkUyQTU0MTg5RTE1N0RCRkI2NTcKKzFGQjM4RjhEQTk1Njg3QUIyNDlDOUJCQTY5OERCMTFBRjkwREI5LCA0NUIzQThERjhDNTMwMDZEMjE4MUQ1MkU1Nzg1MDI5MDZEQ0YxNjZFNTNCMkU0OTAsIEE0QzE1RjMwMUFENUY1QjYxRjYwM0Y5MzIzMENDM0E4MTdDNkRDODZBQjg0MkRCRAorNUYxQUFFQThGQzAzOTcwMTZERDVEMzJGM0NBOTEzNTBFQjI5MkIsIENBNjZENEFFNUUzNzk4MEU1NEEzMkVDOTgxQUQ2RkI4RjEzMEE4MTFERkE5RjI4MywgMkU1MTZGRDExNzY2MDJENjUwQjc2ODc0NDlFODcxMjc1ODNFMThGOEU4QUQ2QjY3CisxMUQ1MDBCRkFGNDBBQzUwNDQ5ODE3OThEQjVGQjM5RjJDMTdCODEsIDY3M0FFMDk2MUQwQjEyQjY1MjZFODJFQkYzMjQ0QkQ5QzM5MkI5MkQ1MkFERDBCOCwgNTZGNjA1Q0VBRThFNzFGMjhERkRENENCQUMwNkNBRURDM0VGRDBGNEZGMEM3RDdCCiszNTdGMDIzRjBEQzIwNEYwQ0RDODQ2Q0E5MjFGMUFERDg0NDcyODMsIDJCQjZENUI5RTUyQjQyQzE3RTM0MjA1QTUyM0ZCNDU5NkU4M0IzNEU2NTNBMUIyMCwgQTFGODlCNDY4MkQ4QTZGMUQwN0Y4Q0E0MEE0NTY5NjJCRkZFMEQwMzIyRUE1QkExCitBMDdEMDZCRDI5NDYwRUQyNjk1OEQ0NUZCNjVENTA5ODhDRDU3ODksIDVDMTZDN0Y4NzFGQUEyOTcyRDZDMDBFRUNDRTYyQjk5NTFDQ0E5MUNERDQ0Qzk3OCwgNTMzNzlCQzg3NUI4NDA5NDBCRTJGMEJEODNDM0JFM0E0RjczODk4QjJEMjQzRDcyCisxRTE3NzE0Mzc3QkQyMkM3NzNDMEE3RDFGMjMxN0YxQzlBNjgwNjlCLCA5ODVFMjg3MTEwMkMwRjVCRkEwOUUxRDE2RjY3N0UxMDc2MTIzQkVBMDE5REZGMEYsIDNCMEVFNDUyOTk0QTMxRUUxMEU4Qjc2RDRGMUU1QUZCRkVCQUREQTUyQkZFNTIzOAorNUE0NjUzQ0E2NzM3Njg1NjVCNDFGNzc1RDY5NDdENTVDRjM4MTNEMSwgODVBOTVCNDBBMjQwOEM4ODA2NUE2QjA2QTJDNzBDMEYzQjEwMTZCODUwQjAzRkE0LCBFMTIzNzYyRUQ5RkFBRERCRDU3MUQ0RDlENTVCQUMyMTYzNUI4RjIzNDMyQ0NERjcKKzEwRUQyRkI1RjM1QTYzOTAzMTFDNUU2NjE4M0JENzgwMTZEQTgzQjczLCBFRTlCQ0U4OEUxMzAwQTA0OEM2RUUwNEJDN0M0RDZCMTRGOUM0NkM0RTVFMERDNUMsIDQyNkRENUJDQkFEQjJCNTgzMUIwNUFFMEVFMzZBNDM1N0E5Q0NCOTc1QkU2RDk3RgorMzJDNzhGMjFEQTBGMkFCMDkzNTUxQjMyNDhCMzg2ODA0NDhGOEIyNTksIEM4RjY3REJGQTgxQTkxN0FERTVCQzdDNjgwNDY2QjZDNTlBMDYxNENFMzdDQzQ5MiwgQkNCQzMyNDVERTMwOUIyNjAzODFDMjlBNTFBMDhGRDdBQTdBODk3QTU3RjYwQzQzCis5ODU2QUQ2NThFMkQ4MDExQjlGRjUxOTZEQTFBOTM4MENEQUVBMTcwQiwgMTAyRjI4MkM3NzQ5NDY0RDBCNUJBRkU3ODYyQURCMTc2Q0Y1Mjg5NTlFNkZGMTYsIDQ0NzFCMzREMEM0MjdEMUIyRTZCQjREMUQxRTcwMTlCMTlGQjI5QUQzNTA4RkQ1NQorMUM5MDQwODMwQUE4ODgwMzUyREZERjRDNDhFNEZCQTgyNjkwQkU0NTIxLCBBOUQ4OENFQ0M4RjMwRTczNjdCMTgyNjYxNDc1MEM1RTYyREFDNjNCNEVDNjlGNjUsIDFERDVDRTQwM0IyOEY4RTgyOEFENjFGQkRFOEREQjI5QUI3OTlFMzIyRUU1QjEyQworNTVCMEMxODkxRkY5OTgwOUY4OUY5REU0REFBRUYyRjg3M0IyM0FDRjYzLCBCQkQ5QkQ4REI1MkJDNzc5REVENEQxMEQ4N0Y5QTUxRDZGNjg4RUYyQUIyNERBOUQsIDNCODFFODAzQjQ5NDdEODg2QzMxREU2NzFDMjU3QjhENEFBQjk3MDNCMTQyNUZBNworMTAxMTI0NDlCNUZFQ0M4MURFOURFRDlBRTkwMENEOEU5NUIxNkIwNkUyOSwgNEQxN0M2MTQ1NTRFRjQ5QzNFQ0E0MTc0QkE3M0U1MTE4RTVFNjBBQTBBNzdDNjMsIDdCNjI5N0UxNjdFQ0JGQTRCN0JEN0ZFQTg4QkNFRDBEODQ2RkVFMDNERDNEQ0U3QgorMzAzMzZDREQyMUZDNjU4NTlCRDlDOEQwQkIwMjY4QUJDMTE0NDExNEE3QiwgMTREMzgyNDZDRUZBOEQ5Nzk1ODk0MDA4Q0EwQzBEMTI2RjgzQzc4QzgzREM5MkJFLCAzNjQxMUI3N0NFQ0RBRTg0NzU5MEI1Njc3RjU5OTM5OTczQkU2RkYyRjY0QTkwNDIKKzkwOUE0Njk3NjVGNTMwOTBEMzhENUE3MjMxMDczQTAzNDMzQ0MzM0RGNzEsIEJGN0FDMUVCM0U3MTkwQkRFNEQ3MUVENTdEQkQ1MkRFMDMwNTBFRkI0MENCNUVBQSwgOEZDQUZBNzgzNjE2NThGMTg4RjQzMTQyOTU2QTE1Njg1NzU2M0FGRTZDMUVDNDUKKzFCMUNFRDNDNjMxREY5MUIyN0FBODBGNTY5MzE1QUUwOUM5QjY0OUI5RTUzLCBGOEQyOEMwRENBRTkxQzQ2MUM3MEEyMzRENjlBMjUzOEYyOTMwOEExMURFQzZCN0UsIDgxRjExNjU5QzZGOEY0MzNEQUYzODRCMDY3NzY1NkQ0M0FBMTA0MzY1NUREOEU1RAorNTE1NkM3QjUyOTU5RUI1MTc2RkY4MkUwM0I5NDEwQTFENUQyMkREMkRBRjksIEY3MzA1ODk2NTlFOEZFRTcxNUYwQTMzOThBNTQ3NDk4Qzg1ODE3MkU3NzZDOUUzMywgNzcyNUMxMzcwNjY3MEE4MTFGOTNENUZCMEZDN0JFREYwRDQzOTMzNUQyRkJBMUI2CitGNDA0NTcxRjdDMERDMUY0NjRGRTg4QTBCMkJDMzFFNTgxNzY4OTc4OTBFQiwgM0I2NjZEQTQ2QzVCQjlDRjhEODQ0NDM2NjYwMkRDMkM3OTMyODFDOUZGQTE2RTJBLCA5MzNCMzkxOTc3OEE3OTczNThENEY0ODVEOTExRUQ3QjhDOEMzQTNDOUI3ODJDQjkKKzJEQzBEMDU1RTc0Mjk0NUREMkVGQjk5RTIxODM0OTVCMDg0NjM5QzY5QjJDMSwgMjUxRjMxRTNGN0I1MkREOEJENThFNUQxNUU1QUU0OTA5MjM3NTI2NzJBNTc4RDc4LCBCNUQ2RDA3NURDRDc4NTgzQkU2OEQ4RjM3QzNBNEU2QkEzOEM0NzhCRUUxNkU5MEQKKzg5NDI3MTAxQjVDN0JEMTk3OENGMkNEQTY0ODlEQzExMThEMkFENTNEMTg0MywgRUU0MDg5NzgyQkVFRUE1NEI4Q0UyQTIxNjVBMzQzRDhEMUQxMTFGOEJFRUE2RjdBLCAyOUU2QjlGRTMwNjZDRjA5Q0Y4MjI3RDhFNTU5QTA3MkYzNkIyMzgyRkQzQkZDQQorMTlCQzc1MzA1MjE1NzM3NEM2QTZEODY4RjJEOUQ5NDMzNEE3ODA3RkI3NDhDOSwgODdFMTA3QUQ1QTlENzNBRDM1NzVCQjU2Nzg1QjE0OUM3QzU0ODY4OTI5MERFMUM3LCBBNTc4NzhBMTY5RUVEMUI2RDJBQjk5Rjg4NzE2RUQ4NkQ1RkYwOTBEM0M3MkJCOTYKKzREMzU1RjkwRjY0MDVBNUU1M0Y0ODkzQUQ4OEQ4QkM5OURGNjgxN0YyNURBNUIsIEYwMjA5RDA0NTY1MkJFQzY5OTNBM0IyODBBQjY1ODRFRTBGQTRDREE4NDUxQ0Y2NywgRkIwMkVDNzU5QjYzOEI0M0NDNjk0RjFGRkJGRThEQTQ5RUE3NkMyRDE3QTM3OTNDCitFN0EwMUVCMkUyQzEwRjFBRkJERDlCQjA4OUE4QTM1Q0Q5RTM4NDdENzE4RjExLCBGRDFFN0NGMDgyQjJEQzE2N0UxNDI4RjEyNzM1QkUwOTJGMjk1QTRBOEUxRTc2MEQsIDM1NDQ4NjhCNTU5MTREOTI4MzhFMTIwM0MzMTMxN0M2NDE4MTU5NzJGQTgxMjEyRgorMkI2RTA1QzE4QTg0MzJENTBGMzk4RDMxMTlDRjlFQTE2OERBQThENzg1NEFEMzMsIEYwREQ2MTZBMjNEQTYxRkZDRTAwMUU3MDk3MDYzNjdDOUIzRTM2MkU3NDFCNjM4RiwgMjNEQ0VEODUzMjk0NEMyQ0Q0MDg3NDUwNTNCNEQ4NTY2QTEyMjJCNEZEQ0Y3NzkKKzgyNEExMTQ0OUY4Qzk4N0YyREFDQTc5MzRENkVEQkU0M0E4RkZBODY4RkUwNzk5LCBGNzQ3N0IxRjY4QkM2NzgwNjIwQjIwNkI0NjI1MURCNUJEQjNDM0RGN0UxRTI3RkEsIDMxQkE1N0FEMEIwQkYyNDg2NzQ4MEE5Rjg1RkJGQjk5MzAyNzQ2MTZFQTI2MDIzNgorMTg2REUzM0NEREVBNUM5N0Q4OTA1RjZCOUU4NEM5M0FDQUZBRkVGOTNBRkExNkNCLCA5NkFFNzlFQjBBNjQ4REFBMkVGNzM4Q0E2QTRGRDRERDE3MUEyMEREMEEzNkU3RjUsIDFEQTU1NjkxN0ZENkREQ0ZDMkFDRjgzM0QyREQ5RDVCODA3MUMzMDVFQTFGQzA1MgorNDk0OUE5QjY5OUJGMTVDNzg5QjExRTQyREI4RTVCQjA2MEYwRkNFQkIwRUU0NDYxLCA5NEEwOUI3QzYzRTlCNzVCMTE3RTA5RTE3ODQxMjVDNjVCMkI2N0Y5OEQzRjQ2QjMsIDkyMkI1RjkyQkE1MUFBNzJDNTFGQ0UzQjZGRjE0QURDRTEyNDhFQzgzOTk4NDMzMgorREJEQ0ZEMjNDRDNENDE1NjlEMTM1QUM4OTJBQjEzMTEyMkQyRjZDMzEyQ0FDRDIzLCA1OTc3N0Y2RDNCQjREMEZCQjQwMzBCRkI1OTI2MUYyNEI5MDU3QTlERDI5QkMyQzEsIDFDNDUwRkMyNjZDMUE0NUFFNTI4NjRERUI3MzkwQTI5NDdCRjBDNTM2NTA5MkQzOAorRUNDLTIyNAorMSwgQjcwRTBDQkQ2QkI0QkY3RjMyMTM5MEI5NEEwM0MxRDM1NkMyMTEyMjM0MzI4MEQ2MTE1QzFEMjEsIEJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3NjQ0NEQ1ODE5OTg1MDA3RTM0CiszLCBERjFCMUQ2NkE1NTFEMEQzMUVGRjgyMjU1OEI5RDJDQzc1QzIxODAyNzlGRTBEMDhGRDg5NkQwNCwgQTNGN0YwM0NBREQwQkU0NDRDMEFBNTY4MzAxMzBEREY3N0QzMTczNDRFMUFGMzU5MTk4MUE5MjUKKzksIDJGRENDQ0ZFRTcyMEE3N0VGNkNCM0JGQkI0NDdGOTM4MzExN0UzREFBNEEwN0UzNkVEMTVGNzhELCAzNzE3MzJFNEY0MUJGNEY3ODgzMDM1RTZBNzlGQ0VEQzBFMTk2RUIwN0I0ODE3MTY5NzUxNzQ2MworMUIsIDE5ODkxNTNCNUY2NjM2QjYxMDg1NEJDQzUwQUZDOTI5RTkxNEMwM0RBNTFBNEE4MjM5RjQ4NjVCLCBCOTM4MUU2REM3OUI1OEUwNDQzQ0RCMDA5MTY0ODM3QUQ0NTBBNjhDMTkxOTJGMTI2NTQyNzk2QworNTEsIEY5Mjc2NzM4MEQzNzMxRjIyOEE0NEFBNzg1QjQxM0ZEODA3REJCMzBGRDZFMTFBRTQ1RDFFQUMxLCA4MkZDMTI4NzE1M0MzRTVGMUNFRjEzRkUzMTI5MUM0M0NDNTRGMTAxNjlGQzlDQTIyRTUwODNBNgorRjMsIDk3OTk0ODFGM0E5RTAyOTdBNzVFMzJERkM4ODUxMkU3NzdFRkRDNDhFOTc3MzQ5QzRGQzY4Qzc0LCBCNkU4RTk4NzQ3NEMwQzhEMTNBRjRGN0I4QUY5QTFGMjc2NjdBQkU4RDY1NzFFNzFCN0Q4MzU5RQorMkQ5LCBBQjk0QzJEN0E1NkU4MkQ3OUMxNjhCM0RBNDVFMzNENzJENDVBNUIyNUZBNEFCMDk2ODk4QzEwQiwgMjQ4OTlGQzg1NTI5NzRFNDBGQzJBNUVFOTY5MEQxMUJGRjk2QTM4RDg0RkM3OURFRjlFQjcwREYKKzg4QiwgNUFGNTc5RUFEMkRDNkU2QjUyNDMwQTJGNzlBM0JDRUNEQzJCOTk1MkYzNTNBQTEyQUVEMTMzOTMsIDMwMzc5RjMwMTJBMUI5NEY4M0M1QjRBRDY1ODBEN0M4RDQyMDAxRkUyOUZBNkQwNkY0QzQ5Qzk2CisxOUExLCBDREM0RUJDNjQzNEUxNkVEMkE5NEFEOEZDNTMyNUQ2OUVEQkE1RkMzRjk0OTQwQzM3QkRGQkI5MywgNkYzREQwRDJDNENBQUE1NERFMTRERUQyOTZCODA2N0VDMDRGNUVFMTcwOUMyN0U5MENDNDc0OEIKKzRDRTMsIDM2Mjk0NkYzRTE4MTNENERCQURFQTE1QTc4Q0RGNEQwNEI5REQ1NzNCOENFNDhFMDgyREQyNDlFLCA0NjMyRjI0RDY3MEUxNzE2MUJGRUI0MzczN0EyOUZBN0VDMTlDQUU1OUM5OTREREYzODM0MUEwNQorRTZBOSwgMTk4RjAwMEIxMTBCQjI3NzZCRTAyNEM1MTVCQzU2MTg2Q0FFMTNGRkExRjQyMEVBRkI3RDEzNjgsIEQ0N0RFMDQ1NUUzNUQ0MDJFNUU3RDc2ODlBRjgzNzYyMUYxRTUwNjdDN0ZCRjk2NTNENkQ0N0Q4CisyQjNGQiwgRUFFQ0EwMDExQjFBRjNDQzJDODFDNTQyQUI4MkMxOEM1MDQ2QjRERDY0MjA5MTQ2N0IwNUJBRDAsIDgyM0UyMDc0QTU1RDRBREMzMjc4NzI4NUY0MkI5RTYxODZEMzg0Mjg5OTY0NDIwNDI4ODRFMkRECis4MUJGMSwgM0ZBNDMyMUNFRjc1RDlDMTQ4MDY5ODcxQjIxRTBFN0Q2MjFDMDA4Q0MxRTNFQjQxQ0I2M0UzMDYsIDY3NEMwOEIyQUVDNzZEQjNERjVGQTlGQzVGOERBQjZDQUExNEM2MDU1MzZCMENCRjI2RTkxRTE3CisxODUzRDMsIDc1MEYxMUM1NDI0RUY4OEQyMzZGOEMwQjhGM0I4NTg1NjgzMzNDMkFDRjRDMTcwODRGQkNCMjQzLCBFRjhEMUMyQjUwOTRCMjEwODUyRDhFNzUxRjI4RTIzRkFENERDQTI2Qjk4NUU1NEI1Mjc0ODJFRAorNDhGQjc5LCA2MTI5MDEzRUE0MjQ5MzNBMThCMzk4NkM5RENDNDE2NkM3QTFGQzEzQzAwMjIzNTg4OTRENkYzQywgNzI1MUIyQTg0QkIyNjVEQzQ5MzYxN0ZENzEyQ0I5NzFGRTEwQzY5MDNGRUM4MkNEQTg2MzEzMTIKK0RBRjI2QiwgRDgyQjVGOEE2NTJBRDBCOTIzNTU3RDY4Q0E1Q0M0MkNGRkJEQzczREYzQjAwQUE4RjlGMzc5OUMsIDVFRkE4NkY3MTQ5QkNEOUZGNEE1MjI3QzFFMzMxNDg3QjkxNDkyNjI1NjFBOTRFNjM1OTk5QTYKKzI5MEQ3NDEsIEVFODhERUI5OEU2OEE1NkU0MDQ2NTY2ODEyRjY4MTkzQTFCODg1NkQwOUNDRjMzRDZFRUJDNDQ2LCBGRTVFN0ZFOTg1RTJERTQ4M0NEMEI2NDgxQTFBMTkwMENDM0RBMDU2N0FEN0JDQjFBRTU0QjU5NworN0IyODVDMywgQ0U5MTg0RjMzNTQ4QkE2NjRBRTMyQUUzNjEzNjQwOTg4Q0NBQzNBNEE2MjY5NTc3MDQwNjMzQjIsIDZBQTM1MUQxMDA3NUY1RkM2QkJBQjNFMUQ2NTkyQTI1OENCQ0I2RDFENkM4MjhCODgwMDQzQThDCisxNzE3OTE0OSwgM0QzMERDOTkzNDA1NjUxQ0Y5MzZBODQwRUMyNzU4NDU0QjcxQUQ3REJGQjlFRkQzMjE2QjQ2REEsIDhGMUU3ODM3RjI0RDNFMDRGNzM0RkQ2Mjc1QzI1MkU1NkI5RjYxRjQwMDU2QUFDMkNEQUNGQzU2Cis0NTQ2QjNEQiwgQ0Q2MDc1RjQ4RjU3QzY2MzQxQjgyMUJCMDVENzVFOEM1RjY4QzBFQzlFNUM5MDFEQjZFMTZBOTYsIDJBRENCOUU4MzRBNjUzNkQyNkMwMzI1RDBBOUI4QTA1RjMyNTIzQjc3QUFFQ0JCMzkwMjU5OTBECitDRkQ0MUI5MSwgRTcwMDQ2NjQ5M0I1MUM1MjFDNEE3REUwNzFCQ0I4OTYzNUFEQTQ2OUI3Q0NGQkFFREU4NEU2RTcsIDJERjg4MDhGQjQ2OURGMUE1NzYyMjkxQkQ3MUE2RjQ3RDVBODdDOEY3Nzg0OTQ0M0FEMDhCM0YyCisyNkY3QzUyQjMsIDk4NTgwOUJGMEJGMzREQTJDOTBBQkVEREVCNTQyNkU3NzlBMDUxNDRDMjMzNzE1RUEyRjFFMkM4LCBCNDJFMTUyMzA1ODRGQUNDNTEzNTVFNjAyQ0I1MzZBODlFQkRFODU0QzFCNDExMzEzREIzMjkyRgorNzRFNzRGODE5LCBGNDE4M0MzQjRBQTg2OTRBNTgxRjZGRkM4MTFFOEZBMjk3M0RCMUNBMjcyMUMxNzcxREY3Qjc0MSwgOTgxMzU0RTk3MTZBMEIzQ0JCNzg5NTkyMTE2NDJDNUFGRTdEQjk0RTdEODc0QjcxNkVEQzk2RDMKKzE1RUI1RUU4NEIsIEM5MEQ3ODIzMDlCNkMzNThDNkEwNDA5MzZBMzI2QkM0RkJEREQ1QTMwMTZDRDA0OTQ5RjY0OTQxLCA0QzA4QzM1MUE0NEJFQjU2MDhBQzcyRTlDRkVDM0JGNkQ2M0REQzI4OTAyM0UwNjc4NzAwNThGMgorNDFDMjFDQjhFMSwgRjE1Nzg4QTBCQkQ1M0E0NkJBRTI0OUZFMTk3REQ1REQ2RkUwRThBMEZBQUFGOUYzMURGRTBDOTUsIDExRjY2QkVCMDZFNERDQjEzQjk3RUI4MEQzMTQwMjczNEVGMDc4RDM0MTUyMjY2MjQ1OEQzM0YxCitDNTQ2NTYyQUEzLCBGRTk3OEYzRjU3NDQxRTFFMDk5OUJCMTJDQzc3NEUzMkQ5Qzg5MjhFRTdGRjU4OUQyMUNEOTBDMywgOUU3RUNEOTM4ODcwQTVFM0FBQkFFOTJGQTc1MzU3MDc3NzdEOUQ4MEY5QTE0RERCMzEwNDJBNTAKKzI0RkQzMDI3RkU5LCBBRkQ4N0Y2MkQyMjg0NTBCOTYxMDlFNTIwNkNDMDU1M0Q5REQ4NzYwQTlGRjA1MkIyMzA5NTMzOSwgNTZGMTQ1OTUyQTQ2OEUzMUFCMDZDQUNGQzc4NTBFRkZFRkVCNkRBOTY3RkQzOUM0RkQ4Qzg5QkEKKzZFRjc5MDc3RkJCLCA1RUQwMzY1OTI1MTY1MjdCNjI3NzU3OTNGRjA4RDQ1NDAwRTUwRjE5ODU4M0YyOUJDRjZBMzNFNiwgMkI5MDczNjExQjI0RjdDQTYyNTVCOTVCQ0NFMTlBM0Q5NTU0QUQxMEM3RjE4OEY3OERGNTA2NUMKKzE0Q0U2QjE2N0YzMSwgNjBBMEE1Njc2QUFCQUFGQUQ2NzU5NUVFRDk1N0YwNjBBOEQ5MzQyOTg1Q0I2MDdCQTIxMERCQjMsIDNBQjA1MzM4RkExMzRDNDk3ODY3M0U5MUQ3OTBFNkY1RUQyOEE0NkRBOTQzM0RBQkVFNzIwMjRECiszRTZCNDE0MzdEOTMsIEJBMzNCRTdERUY0ODY0RDFENDBEQjdFMjU4NjU4MjU4RTA0QUQxRDEyMjE5MDlCNUJDREVCOUVELCA5NkRBN0FENTEyQjY5Qzg3QTNGRjZBRjg5QzE0NkM3MzYxMkM4RkExN0RBNkZDMzlFQ0MyQzAwMAorQkI0MUMzQ0E3OEI5LCA1NjU5MUYwQUQ3OTY0RUI2OUQyQzQyMkM3MDA5MDE0RkFGNDVEM0M0RkM0REZGQjY2MTcwREY3MiwgQUEzRENGMDQ1MEYyMjE5M0FBNTg2RDE4MDkwREUyQzJEQzQ1NkU3MDE3NzAxQzc5RURDRDRCQQorMjMxQzU0QjVGNkEyQiwgRDQ0MjM3MzlCNUQyRTgxQUI4NUIyRDlGOUJGRkZBNEQ5RTJFOTcyMzg2NDJBMUMyQTVGQ0E1QjIsIDI4MTgxN0QyOUJDRkIxNjc3MjA4RUEyNzZCNEFBQUEwMzEwMTdDMjUyRTNENzQyOTYwNDc0NEIyCis2OTU0RkUyMUUzRTgxLCAyRkU2MThBQkNEMzU0RDE0RDE3NUI4OUMyRkE4NzI3Rjc1NEVEMDU0MDhGOEVDOTUzRDdBMDI5QywgOEEwRjc0QTcwRjZCRkVFQTQ4MjVBQzZENDk0MDcwOUUzOEE5RDI0MUI5QjY3QkMxNUMxMzI5RDEKKzEzQkZFRkE2NUFCQjgzLCAxRTc5Q0ZCRDE3MTQyNUU1MzI0NkQxNjQ5NjMyRUE4MjMyMEQwOUQxMDQ1NDFCRjY0NEI0MzI3NiwgRkM0MjY1QkQ4MEZCNDZBNDY5NEUyMjFFMDRFRjZDRTg1RjJGMzQ5NDc2MzUxRkJCQ0YwOThCNzcKKzNCM0ZDRUYzMTAzMjg5LCAyNTMxQ0M0RTc4OEVFRTMzRkY0MEYwM0U2M0ZFRjk5N0Q3QkUyMEFENUFBREMwMkRGOTNBRUU0MiwgQTczOEQzOTlDNUIzNTM4MjE5RTIxMjE3MTRBMzE2RjQyN0IyNTU1Rjc4OTlGNDBBNkFEODk5RUMKK0IxQkY2Q0Q5MzA5NzlCLCBBNUFDNDJENjM0NUE5RDc1RENCQzM1RjNFOTg5NUQ5NTNFRjdEMTVCNTQzNTlERjZCQ0ExRDE1QywgRDU1RUFEMTEyNDg4QzU3NkM3NTFDODMyMTc2RUM3QUZERDdEMzE0NDBCQ0VBODZCOTMzNDUxNTUKKzIxNTNFNDY4QjkxQzZEMSwgNjMwMkQwNzk3NUU5QkMwRTBDNzk0REQzNkFCQzM5QjE1M0RGRTI5MUM4QzE3MzFERTRBNzM5MjYsIDYwMzJDQzE0MEZBQzE2MDM2MDIzNTRGM0ZGOTlGNjBGQUNGRkJCRDQzOTNCMjRFQTA2MDFBNDA3Cis2M0ZCQUQzQTJCNTU0NzMsIDFGRTAwM0IxOTZFNUYwQkZCODhBQTM0M0Q1OTE5RTdDNUUxOTAyNjk1NkRGQUVGRjEwQjQxRDYsIDYyNEVCODI5MTE2QTMzNkQ4NDcyNTlGODBFQzQ1QjZCMUQ2NDRDMUY1RDhEREM4MzQwNEQzNUJGCisxMkJGMzA3QUU4MUZGRDU5LCA5MDdBMjEyQzIwQzcwQTdFNTNBOTM0MDMzMEJDMDU0OTNERDE4OEE3Q0ZFRTVGQTM3Mjg4OTc3OCwgQzNBMTNFM0Q3N0YyNjlDNjdDNjU0MzY3OEU2MUEzNUYzOTJEQTg1RjQ5Qjk5MjEwNTM1MEQwMAorMzgzRDkxNzBCODVGRjgwQiwgREI0MkJEQkUwNzZGN0U3NUMzNEMyQjkyN0U3M0VDNzA5MjY1OTk1QkM0NTEyQTdFNkYwNEMxMzIsIEFFMkE0MUVFMTA5Q0JDQTI2RTMxOEExODAwM0UyRDdEMUI1NTdBQ0MxOTYyNDRDQjE3NUREODY1CitBOEI4QjQ1MjI5MUZFODIxLCAxN0YwQkFGMTc3OUUzMUVDQUUwMkMxMzhENjkxMDlDQUExRUJFMTAxRjlBRDkxRDgyNUUxRDNENSwgMjRCNzZBQzA4MUM5NjQ5N0FBN0I4Q0RGNjE0RTVBNUFBNTNGQjUzRjFEOTMzNjlCOURBODE5MEUKKzFGQTJBMUNGNjdCNUZCODYzLCBERUM5NUFGNjc5NzdBOTBGMkM4MzFGODIyQTk4ODNGREQzQjExOUM5Q0NDNTUyRTcxNDkwN0YyMSwgQjE2MUI4NDIwNTFEMkNEODU4MkNGMzY1RTVGOTE5NDExQzlFMjdFQ0RCODk2QkE2REEyMURGRUUKKzVFRTdFNTZFMzcyMUYyOTI5LCBEMzRDQjUwMzBENjE1OEEwQkRBOTlBOUFDNDAyMzU1OTFDMDQwOUJFQ0U0QTI4QUE3RTk4OTEyOCwgNzhENjcwQUY4RDMxRDA1M0I1M0Y2Nzg1NEI3NzU1RjM4Q0RBNjczMTE0NUY4OTM3OEUyRUREMTIKKzExQ0I3QjA0QUE1NjVEN0I3QiwgODA2MDIzRjYwMEQyRDM1QjJCOURBOUJFMTA3ODAyRkJEOUIwNEY0RkI1NjkwNTU4ODVGODQxNzQsIDg0NjNEQjQ5Mjk2RTg2NzUwODg4RTA2MzUzRUQ0MjczMkM5NUY1QzYxQUE0Njk2NTA4RjlCQUIyCiszNTYyNzEwREZGMDMxODcyNzEsIDI0RjgyNzRDQTUyODJDRDlGRDk1QjUzMDIyRjVDRDFCODc4QURERUQxRDdBM0RDRjQ2RDI1Nzg2LCBCMDQ4NURBRTQ2N0Q2Nzk1RUM5N0RFMUZCNDQ4N0ZDMjExMkQ1Nzk4Qjc3NjA1RTVDOEQzRjc3RgorQTAyNzUzMjlGRDA5NDk1NzUzLCBFN0QwQjQxREQyMEFGNUEzNjE3NkJDQzIzNEFFRTI1RkU3RjlBMTIzNjBFNjIwNDNGMTFGRjJBRiwgOTgyQkRCMUNBMTQwODhDRjZBODBFM0E5Q0Q1RjMyOUE4Q0VENUFGQUQ1MTlGRkQ3QTdDQjNEQUUKKzFFMDc1Rjk3REY3MUJEQzA1RjksIDQxOEREMEYyOThERDAyNjE4MDJDREUyOEJDRTg0MEEwMDdFMDlDRkNGRTg1RjUxOEY3QUU0QzdBLCA3NjZDMEFCN0I4RDRCMjM1MUY3MkE5Mjc1ODNBOTI3QTQ2NTQ2OTMxQkRGNjZFOUQ1M0U3OTEzCis1QTE2MUVDNzlFNTUzOTQxMUVCLCAyNkQ4MUY4QUFGMzkyREYyMjE2QjY4QzIxMjUxMTVCM0FFRDExN0E0RjIwNTg4QTEzQzJEMUVFNiwgQkY5NTc1MzA3MzcwMTUxRjdGMjE3NDgyQzYzODUxODk1Q0RBN0RGNDlCNDA2QUQ4MzQ0OUM2MzMKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCAyQTJCREFCOUYxRTM0MjY1MjZFQThBMDJFREI3NTA0NzkzQTAyM0E3Qjk0RjE3NTBBMzVGMTI5MCwgNDZGQTQxOTMzRUE0MEY4NTlEMjMwRDJBRjc2RDMwOUY0QjQyODMxOTY0MTMxREE3ODc5QUZGQUEKKzMyQUM3MTUwNDkwRkYwMzRBMTQzLCBGOEJDMEY3RkI3MjRCMEU5ODA2OERDN0M2NDlDODY0MzlEOUEwQ0ExMTBENzA1MzRDMjQ5QTk1NywgNTY3RDlEMTYxMTIyMjgyOUY3NjVFMjMzRjI4NjVDQTc2NUM1MzNBNzVERjUyQThDQTZFMkVFNDIKKzk4MDU1M0YwREIyRkQwOURFM0M5LCAzRTUyRDg1Q0JCRTY2NjM1Q0VCRUM5M0ZGREYwOTk4NjNBQzM1MzIyNDg4Mjg0MDRDNDQ4OEE2NiwgNkUzMkU3RkRCQTNENDEyMTM3MEU2RTc0MTkyNThFRjgzNDM0QUQ5M0FCMEJDMkM0MkFCREQzMjQKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgNkIxRkYwNzNBM0NEOEE2NEFFNzZDQzQyOEI4M0QyNUI5REFBMEQ4MDgzMEU5OEI4RDMwQjFBRDgsIDVEODhFQzhBMjZEMUNFMDA2NTQ2NjcyMUE1RUJEMjE5ODNFNTIxMkNFN0NFMEU4NjQxMkNDNENGCis1NTgyRkYzNzdCNEFFNTU4RDAyMTEsIEY4NjZFM0VGM0ZBN0UwNEJEQUVERTY5NzkzQTQ4QjFBMTFGMTg0MDA3RTJFOEJGM0U3QjBCMTNGLCA4OUNCQ0FEQzM5OTcwQ0RGQzkwODM5MUZDMzMyQkU0NUFCNzA0MEMxNTQ5MDhCMUZBOTM2M0U0MQorMTAwODhGREE2NzFFMEIwMEE3MDYzMywgMjcwODhCRTE1MDQyNzI2QzU5MzQ1MDRDQzA5N0VEQjgyOEI4MDhFMjc0MzgyMTg0QTA0ODY1RkMsIDdFMjg4NDJCM0QzQjE0MUE4RkFGRjRFQzVGQjQ1MjNBODE3RjUzM0JBMzg3OEJGNjJERTQ5MEQyCiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCA3NjEyQTVFRjJBNEZFMkFDQzk2NUU5RUE5OEM5ODA0MTQwMDg4MjAwNDRDOEQyNDk0QTZFNDhBMSwgODA0Rjg4NzVFNEZENjcwNDYwRTZFODc3NEUzRjhFQTdBQkUxMzJFQjRGODUzOEMwRjI2M0U3NTMKKzkwNEQwRUFEQTAwRTYzMDVERjM3Q0IsIEEyRTA3RUI0NEE0MDI2NEQ4Q0ZBOTMxMTg5ODVFMkFBNzE1RDk4MzRBN0EyRkNBNTMzNzEwNUFCLCA4MkVFOTkyODVEODg3NDdDOUE5NjlDMDNERDkxRjk3NzQ5QTc5NTU1NjIwNjkzN0UwMkVCNzA3MAorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIEQxMzBEQkI2NTg3Qzc0RDc5QTdCMkMyNTQ2N0Q4N0Q2MzI5MDIwMUJDMTQyQTI2QTNGNzcyOUY4LCA1OTNGN0I1MUU1REU4NDM5MjkxNzU4OTQ5QTI4Nzk0MUUyRDBDOUMxNkQyNTdCNTBFNTlFNTY1NworNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIDREQjE4MkEzMEJCRTZCMEYwQzE3MzNGRUMwRURDRjBGMjlGNkZGM0MzMjI0RUYxNjVCNDAxMzVGLCAyRjFCMjg0RkI5MkU0N0M3QkJFOUM0OUI5OUE2RTYzRTk1QTkyOUEyMDQzQTNBRDE1NkE4MzFDOAorRjM4MjA4QzRGRTE4NDcxOUU4QUUyNjksIDkxNTA3REMwRDA1MTMxNUIzOTRDOUQ4ODY4QjUyM0MxNTgwQ0EwMDZEMTJBRjdBNTlCNzQyNTk1LCA4QzM1RTZBQkRFQTEwRTM0MTQ3QUJERDUxQTMzOEQwNDNBN0RFMzZDNjZDQ0VGQUU4MjM4ODUyMQorMkRBODYxQTRFRkE0OEQ1NERCQTBBNzNCLCBDODY5RTE5MTc3MkQ3NDE2RTA4NTRGQzYyN0NENEQ1MkM4RTFEQzcwNjM2OEVERUQ4NkMwQTVDOSwgMTk1OERCMzQzODI2MDM4OTdGQTVEQkI0ODFBQjk0OTFCMEI0NTYzRDk0MTE3MDdEQjI3RTc1REIKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgRDc0NTIwRkFEMDlDMjREN0M4MjI5RDIxMjY4RDlGNzk2Q0U2NzE2NDZDN0ExRjY2MzExMkUzRDcsIEEzOUQwODU2QUIwNzkwRkM0MTc1MEJGNEI0NDQ3MDY4NTg0NzgxMEM1OTFFOUM2NTQ5N0E3MDAzCisxOUFFQjZFQ0M2Q0M4RjdGQkI4QTVFMTEzLCA2QTg1NDI1MkYxRTZBMEIzNzZCRURBRTM1NEFGMjMwMTI5NjMzNjQ1ODk0MTdFRTlBMEUwQzhDNSwgQThEQkY3NUM5QUU4MTA4QUVBNjQwNzgzOURCMDU3NDU1RTc1RUZGMjRCMTI2NzgyREJGMTdFNzEKKzREMEMyNEM2NTQ2NUFFN0YzMjlGMUEzMzksIEE3QkU3ODk1NEU2NzExODUwODgxQUFFRjMwQTgwNEU5NTA5MUY0QUNFMEE0NTFDNEVGQkJGQ0M0LCBBRTQ1RjQxMTE3MDkxMjRDMjQ2NTZCNUQ5QTAwQTJFQzYzMkREMUY5RTBEMTlCN0M0Qzc0RTJCRAorRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgQkI2QkY2RDUyMTAxRDcxNzE2OTJCMDc2NzE4OTI2MDI0OTQ5QjJGQzFDQUNDNEMyMTdFMjJBNDksIEY0RTJFOTQ1RDZBMDQ3QUEzQzE5RThBQUMwNjcwNEQ2RTZBM0U2NTk3Qzk2NTIyMkVGMTQ2MDYwCisyQjU2RDRBRjhGNzkzMjI3OEM3OTdFQkQwMSwgRkRDQUM0RjU5MjQ5NjA5QUQyOTRDNTE5QzhBQzUzREUyRjAwMEJFRDlGQzA0QzRDNkI4RjJCNzIsIDNEMkU1QzQyQzU2MzU3MkJDOTAxRTkyMkZCRUFCM0YwNTM2MkYzMEZCMDY0OTI3QzlGMTJCNkNFCis4MjA0N0UwRUFFNkI5Njc2QTU2QzdDMzcwMywgNzg4NDE3NzFFNTk2MTdGODZGMjZGNTRFMjlGQjM0RDBCQkJBREJFMDM2MzMyRDk1Q0RDRjk5RUUsIDQzMDFFRTZGQUI3NDE2QUNDNTUzQzI3MTdEN0NEMzZENTU0NUYxQkJGQ0MzRDlEMUFDOTlDRjczCisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIDM0RjhDRDNDNDA3NUNDMjQzRTkwQUQ3OTFGQ0FEMDg2M0EwQjg3ODBFODA3MzQ5Q0I5NUY4MzU2LCA2NkZGODZBQjNDNEZFNjc1OTU3NzA3RERFMDU0NzUxRUM0RjYzMDMxM0RBMUQzRUMzMjQ4NTk5RQorNDkyMjg2RTg0MjFDODRBMkJEMEQwNURFRjFCLCBDMDYzNDAwQTI1QkMwRjQ5NEZDN0MxNTBBQ0FCN0E2MkIxMTdBNzA4RTkxMkMxODk4QkVDRjYwNywgNEVBOEY2RkJCMzJCM0U4OTE5ODkxMTczMTY0QTYzQkY4QjhGQjk2NEUwQjAwNEU1NjM3OUUwNDkKK0RCNjc5NEI4QzY1NThERTgzNzI3MTE5Q0Q1MSwgMUM5NDU1QjY3NjQ4N0JBQTkyNzVDRjQ3NEYyNUI3N0MwNUNEMUNFQkJBNUU4M0I3MkU4NEY4QzUsIEY3NzFGMDQwMkJDRDNGQkU1N0JBMzE1NUU3NkFGNkYxRUY0ODk1QzA3MkYyNzU3NUVBNjc0QjM4CisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCAzRTI0NkQxQkVBRDVCOUE2NUE2NDYyQjE0NEQ3NEU5RUM5MDYwRDVDQkRGNzE5OUQwMjcxRDNCQiwgNEQ5NkZCQzQwNEJCMjA4RDIyODNEQ0I0NEY5MDdFNTYzQzM3MjU1NTBFQzYwMUQxMTQ2NEM0Q0YKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIDQ0ODA5ODg1ODkwQTY4MkFBMkU1QTNFMzZERjMwRjQ5NjUwRTUzNTk3QTkwRURFMTYyRTBBNjYzLCAzMkYyRUZBMDFGMjJDMkY1QzM1RTcxNUJDRkNDRUU4QTFEMDU0RTMxRDZCQTY3RTZGNjZCNTFEMgorMTcyM0VDQUY3Q0VCMDVGNzdERDExRURCOEE3OEIsIDFFRDlBMURBM0ZGMUQ4OTZFNTNEQTVBRTJEMUFCQjU1MzFGMjlEOEFFQ0UwMTdFQzI3MzMzMDk5LCA4MTBBNUQzMkI4NTI2NDBGNjEwNDNEODkwNUNDNDlGNkI5RTVFMUE4Njc1RTExNERCRDEwRTI4Cis0NTZCQzYwRTc2QzExMUU2Nzk3MzVDOTI5RjZBMSwgOTYzQkM2MkU1MkYzRTkwODlBNENGQUU4ODg5QUMzNkMwMkNBNUNBODcwMjU1QkJBNDFEODA5OTIsIDgyODMwMzZFQzcyRTc3NjU2OTY1QTMyMkVBRTE4MzVERUZFODFCQzJCQjYwNkJFMDM5QUEwOEIxCitEMDQzNTIyQjY0NDMzNUIzNkM1QTE1QjdERTNFMywgNTk1MTNCMjdEMzJGNTQ4N0U3QkMyNjNDQTgxNjM4MjVDQTMwMUFENEZDRDJBRjZCQzM4Q0Q4QTAsIDg2RjEwQzYzRDhEREY2MDJGQzVGRDFGRjIxMkJENjAxOEZEOEU4NEVFMkREOEFGNjk5MDMwRkRECisyNzBDOUY2ODIyQ0M5QTExQTQ1MEU0MTI3OUFCQTksIEE2RkRCMjk2OTYzOUU1NzlGQzQzMjA0NTQxNEJFNDFDNzBEREEyRTA4RjAzOEEwQTVCQjQyQUUzLCA2NzZGNzZEQkY0NEE4MERCRTY3NEM5N0U5MjVBRDA3M0EyMjVBREVENTJBNjZFQUQxNzQzRTM0OQorNzUyNURFMzg2ODY1Q0UzNEVDRjJBQzM3NkQwMkZCLCBBRTNDNTVGOUY5MkFGODZFMkUyNDY5MDA5MzI3OTcyMUJBOEJDNDcwQzBCQjMwNjI5REU3QTgzMCwgQjg5RkQwMjA3QTIyNzAwMEJCNjhCMzBDQjU0RTMwRjRGQjkxRDU1MzAxNTNCODJENTJFQzg2ODgKKzE1RjcxOUFBOTM5MzE2QTlFQzZEODA0QTY0NzA4RjEsIDM0MEUyQzMzM0NCQzRGNTU0QTlEMzk1RjgxRkRDNjUxMzQ1MDRERDk0MEM1QzE2OTA5NkIyRTZCLCBFNDY0ODJEMkFDRkM2QjdERDEyNzk0MTE4QjNGQjQ4NDQ3MDJFNkFENDEwRUJCMjU3MkQ3MEMyRAorNDFFNTRDRkZCQUI5NDNGREM1NDg4MERGMkQ1MUFEMywgM0RCQzMwRTRDODVDQjc2RTdBQjEzQ0U5MzNDMTI0QkJDRTQ3ODBFRDBFNUREMjA5RUYzRTBENzksIDI0MzZGRDEwMURCNDgzQzRBOUFFRDRDQTQ2NTI0ODE0NzYzRTMzREY3OTk1OTQxOTZGQkQ1RkYwCitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCA4RDIzMkUyQ0MyQkZEMkFCRjIzODFFQkRGOEUyRjIwOEVCNzIyMUQ2MDUxQUEzRjg0OEJBRDdBQSwgODQzNzlDQUNDOTdDQjRDQzNFMDM4RjAzRjlDM0UzOUE5NUIyNjkyRUYzMjA3OTkyRjZCQzVBNzEKKzI1MTBGQjRGRDkwODM2M0VCRUY4Qzg3RDg5N0RGMTZCLCA0NzRFODA2MTEzRUJFRDVEMzIwN0YzNjlCOTAyNUM5MkU1NzgxODgyRkQ4MjgzREMxNTZGRUM5NCwgOTJDMTI1NUEyMzU3RjU3RDIwMzNGNjQ4QTA3Q0I4QkY2RUQ5NzZERjkyNzIzRjgzQzE3NDJDNjgKKzZGMzJGMUVGOEIxOEEyQkMzQ0VBNTk3ODlDNzlENDQxLCBFRUZGRUI2RTk2NTc5RUFCQTg0ODEzQ0U3RDdEODY4NEJDNDUyNjc4M0JCOTlENzY2NDEyQzkzRiwgN0E4ODJEOTY2QzQxQTc3NzZERTE2RDgzNjI3QkYyNkU2QUEyNDM4QUFBQzUwOUVDQjU5RkMxODgKKzE0RDk4RDVDRUExNDlFODM0QjZCRjBDNjlENTZEN0NDMywgQjZEMUM3NDRFNUYxQjUwMEY3QzAwRkEzQUNENzc2QTRENEZEQTcwQTFBRDZGRjJBMjhDQjU0NDAsIEI2QjFCNTNCRENGMUQ1QzMzODhDN0I5RTg5RDEzQjMxNzkzNURFNDJFMEVBNzk2REI0Q0Q0Rjk1CiszRThDQTgxNkJFM0REQjg5RTI0M0QyNTNEODA0ODc2NDksIDU2NUEyNDEzREFBMjQxQkQ3OEUwMDBENDUxNDU4NkMzMkEzNjE4QjA1NDBFQTQ2RTZFNDA0REExLCBDRTYwNTRDMzY3QzAxMDhEM0FFNEJBMTQzMzUzRDBFODhCNDg1MDcyMDZCRjcwOTI4RjJENjEyQworQkJBNUY4NDQzQUI5OTI5REE2Q0I3NkZCODgwRDk2MkRCLCBGRERCNzU1NDJFQzEzMTJDRTM3RDI3Qzg2QjcxMzMyMkU3MURCRDg2MkY3QzMyMjI1QTNBMUFCQywgRjg5RUU3QTFEMUM0RTRFMjExQTcwODBCREVDNkE1OTIxQzI4NUFDQkE3RjY5NzFDMDMxRjEzODcKKzIzMkYxRThDQ0IwMkNCN0Q4RjQ2MjY0RjI5ODI4QzI4OTEsIDEzOTU3QkZDRTJFRjFEQTM4NjdCRkUyMkUzMUU0MDcyMEU0RDRBNTg4MDM1NzlGRjEyQ0Y3MkZFLCBCODJERTdGQUEyNTI4QjRBNzdENjI1NTlFQ0ZEMjMyMkE0RkJFMThFRTUxMTNEMUU0M0MyNEQ4NQorNjk4RDVCQTY2MTA4NjI3OEFERDI3MkVEN0M4N0E0NzlCMywgODYwRjYxRjExQUY4M0MyRDZCNjZEQTlEOTQyQzJFNUJGNkIzMTU5ODNBNThGRTE5RjM4MjcwMTAsIDFBNjg5NEIwRDU3MkEyRDU5NDBGMkNFMDQ2QUI0MDMzNEZDMTE0NURCQzhFMkREODdGRDFFMzNCCisxM0NBODEyRjMyMzE5Mjc2QTA5Nzc1OEM4NzU5NkVENkQxOSwgQzdDNjdFNUUwNjM3NDFFMzkwNkIxM0U3QzdEMTY1QzhGMTZEOTBCODM3QjUyOTRBQkIwMkNBM0UsIDkxMzk0ODEyRkQzQTM1RTM1OEIyODY0QzlFOUFBRTI3MEY5NDgzOTBCM0IxQjlGRkY1RDIzNTJDCiszQjVGODM4RDk2OTRCNzYzRTFDNjYwQTU5NjBDNEM4NDc0QiwgOEUwNjI4REMyMzU5NjQ5MjU1QjJGQjBCQ0Q4MjBBQTVFRjQ2RDUyRkNENEZBOUM2RDI5MzU3MDQsIDgxNTU5NkREQTBEMTM4RjkwMzgxRkM2MzU5MUY5MkY2RDBFRDE5MDI4REQ2NDU3QjhENTZCOTg4CitCMjFFOEFBOEMzQkUyNjJCQTU1MzIxRjBDMjI0RTU4RDVFMSwgNzlDNEFEQjYwNUY5QzBCMzRGNTIyODE4MTc5Njk3NzVGRkQ2M0YzNkI0RjY5NkIwNjc5MEU2MUYsIDIyMTcxQzA4MkVBRThFRTUzOTQzOEEzREVFODQwNEE5NEExNzM3RjA4NjQ1NDAzRkIzMkQ3NkZGCisyMTY1QjlGRkE0QjNBNzI4MkVGRjk2NUQyNDY2RUIwQTgxQTMsIDgzRTJCNTQxRjcwQjVGNDlERjM4NUE0MEU5MUVFREI0MjQzMEExMjNDNzNCRDcxNTczQzRBRDY4LCA0NzEwNjQzNzI2NjFBM0NFM0ZEODAxNjA0Njc2NDEzRjI5RjM3RTVBMDc2RjMwN0Q2ODVGODYyNworNjQzMTJERkVFRTFBRjU3ODhDRkVDMzE3NkQzNEMxMUY4NEU5LCA3RTRDNDVCOTRFQUFDN0E0NjNERjIzRjVEMzMwRjlCN0Q3QTEzMENBRjZEOUFFMjUzMDE1MDU0QywgNERCNkVEREVEMzQ4QThFM0UzMjYwRUI3RDZBNzAyQTdFOUREMzcwNkMzRUM0MDAxQUUxQTEzMDQKKzEyQzkzODlGQ0NBNTBFMDY5QTZGQzQ5NDY0NzlFNDM1RThFQkIsIDVCMEUyNzE0QUI3MzkzNzlBNjQyRUJCQjZERjlBNDJGRjhCRjNBQTA4REYyQzg3NEUzNDBBRDEyLCBEMTM3ODdBNDIyNjY5RUE5NjRDNkU2OTRDM0U2QTJGRUQ0QTVCQkM1NEJGN0VCNkU1Q0ZGNTRGQworMzg1QkE5REY2NUVGMkExM0NGNEY0REJEMkQ2REFDQTFCQUMzMSwgODM1Q0VEQjI0MkQyRkNFMzBDQzI1RUQ0MTMwMDJBRjgxQ0EzQkU2Njk0QkIyNzQwRDJDN0FGRTYsIEY0RjJGQTVBMTM5MEYwNkMxMDM3M0NFRTkyN0EyNzUzQUQ0RTZFNzZFMTZFODI0MTk5MzZGQTVDCitBOTEyRkQ5RTMxQ0Q3RTNCNkRFREU5Mzc4ODQ5MDVFNTMwNDkzLCBDRThBQ0VBNzMyMkZDQjlEMDBGNzI2MTNENzBFRUNGMzYzNEMxOENCN0NEQjg2Qjg1REYyNUIxNiwgRjhENzQyM0MwMDNFQkVERDM4RkQyODNBNDU4MUIwMTY1NTRCM0I2RjE5QzdBM0IyMUYxQjVGNDkKKzFGQjM4RjhEQTk1Njg3QUIyNDlDOUJCQTY5OERCMTFBRjkwREI5LCBBNTM4ODkwODcwNEJENzAzNzMwMzQ1MkM5Q0Q2NTJCMDE5QjkwQjkxMDJFMzRDNjI5OTUxMDlFMiwgNTdCN0ZCREM4MjA1MzlFNjk3NTYwMEFBNTVDNDUyMTgwMzg1QUI2Q0RCOUZBOUNDQ0IzOUQ1QgorNUYxQUFFQThGQzAzOTcwMTZERDVEMzJGM0NBOTEzNTBFQjI5MkIsIDE4NDZDMkE4MzgyQ0E3RDM1QUUyNTlBNUY5OTE3NjVCMEZGRTY4NjM5ODRDRkNCOUM1RTNGMThELCA5MjE3QkI4Njc1RTVBQTcwRERDOTA3RjlFN0IzNzA0RDZGN0NBNzhFN0FBRkE3OEY0QkQzRDMyNgorMTFENTAwQkZBRjQwQUM1MDQ0OTgxNzk4REI1RkIzOUYyQzE3QjgxLCA0QUIyMDlFNjQ1OTcyQjU4NzVCQzZGQjY3RjQ1MUI4OUUxRDBFOTk4MkZCQURFRTdGOEFFOUFFNywgRTUxMDhCMTA4MjI4MUZGMUI3RTFDMDBBMEFGQTc5MjU0NjlCNzY1Mzg1QjAzOUNGMEFDQTRBOAorMzU3RjAyM0YwREMyMDRGMENEQzg0NkNBOTIxRjFBREQ4NDQ3MjgzLCA0OTM4QzY0MzY2OTVENEJEMUJGOTM5MEY4MUM3NEY5QzNGNDA5RDI5Q0U4RDFDNzI0QjFEOTNBQiwgQUVBMERGNTlCMjlBMDg5NTFGMzIwMDFFMEVDNzhCNjdFOEJEMDI2QjBCMEE1RTVFOEI2N0E2N0EKK0EwN0QwNkJEMjk0NjBFRDI2OTU4RDQ1RkI2NUQ1MDk4OENENTc4OSwgNTEzQjhFMDdGNEYzMTVFODRFREQ2QUE2NUQ4RUMwM0RGMzI0RDNGRjhDQUNEQUY1NzhDMTlCRDgsIDE3MUEwRDNCQjkwMzFEM0IxQTNGMzk1QTg5QkFERTJDMDE1RkI3N0ZFMkY3MjA2Mjc5MTNERTVCCisxRTE3NzE0Mzc3QkQyMkM3NzNDMEE3RDFGMjMxN0YxQzlBNjgwNjlCLCBFODUyMjdDNEY1QzcwNDlGN0EzRTJEMUFGNkY4MDlENERENDA2MDU4NkE3RENEOEE5NjMyRTMwRCwgQzUwRTM0M0UwN0E5QjYyQkMzRjkwRjU2OEJEQkI0MzgxMTlBRjI5MUY3ODRGM0NGOTQxNzBCMzIKKzVBNDY1M0NBNjczNzY4NTY1QjQxRjc3NUQ2OTQ3RDU1Q0YzODEzRDEsIDUwMDRGNDFEQzc1QTUxMDBEMEM0Qzk0QjVGNEFCREM4MzBCQjcwRDhBM0VGOEJBODBGOEIwMTA2LCBEMDFEOTM2RTlCMTI3NTQxM0Q2RjVBM0FFNjlDNTMzMzdGOTJBOTk5OUFDNkExNzRENEJCN0JERAorMTBFRDJGQjVGMzVBNjM5MDMxMUM1RTY2MTgzQkQ3ODAxNkRBODNCNzMsIERBMDhCNEZBMjVEOEVGREFBMjFDQjE2QUYwQkNDQzVBMUZCODRGMzZCMDRGMDFGOUFCRjdBNDY2LCBFRjVGRDVCQ0ExMDQyN0JDOUU5RUI5N0ZFNjRCNTI1MzhCRDJBNDI3NjdFRTI0RTI4RDk5OEY3OQorMzJDNzhGMjFEQTBGMkFCMDkzNTUxQjMyNDhCMzg2ODA0NDhGOEIyNTksIDVBM0Q3RTRGRjRBQ0I5RTJFNDJFMjkxQ0IwQTAwMDU1RThENTY0NjU2QkY4MDE0MEE2OUFDN0NELCBENDQ0NjVBQjk4ODkwNzFCOTY0RUE5RDZERDIyOTNDMkZENURFQzVGMkRBMTk2NDdFMkFEREVDOQorOTg1NkFENjU4RTJEODAxMUI5RkY1MTk2REExQTkzODBDREFFQTE3MEIsIEY0MjZDOEIyNkU2NTU5MEQ3RTQ4MkVEMTRFMEE3NTNBMDRGNzQ4RTZDQTY4QTk1QjEwOTQyMiwgQUE5MUJDNDBBRjdFMkRCNTMxMEFFMTZBNzkxNTQ2MzI3QjNGNjVDNkJFOUQwRDQ4QURDMTZCMkMKKzFDOTA0MDgzMEFBODg4MDM1MkRGREY0QzQ4RTRGQkE4MjY5MEJFNDUyMSwgRjg3MUM5N0ZBMjE4QzJCOUEyNDZEQjFDOTgzOTUwRThFRDJBNUMxRjc4MEQxQkE5MERDRjZEMzAsIDU5NjMwMENGREMxQjU1MEY3QUQ3MDczRkQ3MURFMDJDRDcxODdBOUI1NUU0Njk1MzY0NTM0RUYyCis1NUIwQzE4OTFGRjk5ODA5Rjg5RjlERTREQUFFRjJGODczQjIzQUNGNjMsIEQ2QkQ5Q0U3NkRCMjM4OUUyQTlGMDI4MkZFMDk2NTA1OTlBMEVEQUJFRkFGOTRENjgwMDQxMDM1LCBGQTU0NkRFRUZFRDdCMDAxQTc3M0ZBQkNBOEZFOTYyMTc0MDlCRDI0MTdEMEIzQUZEQ0Y5QTYyMgorMTAxMTI0NDlCNUZFQ0M4MURFOURFRDlBRTkwMENEOEU5NUIxNkIwNkUyOSwgNURDN0E5OUY0OTNDQTM5NEYzMEE4M0I4QzNFRkJCNEFDRURFRUEzMjc0Mjc5MUI2RTREOTZEMDYsIDU0QjBBRTNFODlDRkRGNTBGMjY3M0NCQUVEMUEyRTUxRkMzQUE4OEQyMzFDRDc1NUYzRTg2NUY0CiszMDMzNkNERDIxRkM2NTg1OUJEOUM4RDBCQjAyNjhBQkMxMTQ0MTE0QTdCLCAzQjcwNEE1NzQxNjA0NTA0ODZFMjgxNDA3RkNCOUYzODU4ODdFOUNFRDAyNEUwNzcyRDk1NkY3RiwgNzg2N0Q3QzBGOEE1OEJBNTlCOUVENjQzMDBBQzYxOEEzNUQxMTJEN0QwMkVDNjYzMENDRjgxMTIKKzkwOUE0Njk3NjVGNTMwOTBEMzhENUE3MjMxMDczQTAzNDMzQ0MzM0RGNzEsIEVCMjc1MDkyNTEzODI2MjQxQUREMjAyN0MzMTg2MjJGQ0I2MTBGQzQ4ODg2QjBDMDUzRjY2QjlDLCA0NzUyREFDMDczNzI4RDRCM0UxMkEyMzM5MzY0MEEwRjM4QTFBQkExRkU1MTRBQTk1MkIwNzFFRAorMUIxQ0VEM0M2MzFERjkxQjI3QUE4MEY1NjkzMTVBRTA5QzlCNjQ5QjlFNTMsIEYzQTgwQkVDNjMyNjM5OUU1RDg0NjQ1NUQyQUI0RDI2RjgwQTU0NjdBMzQ0QjZFNTNEQjUxMzA4LCBBMkRFRkZGOTY4RUIzRDkxOEQzMzQ4NjM5Q0Q5REZCMzFERjBBM0JGRUI4QjBDNkQ2ODEzMkIyCis1MTU2QzdCNTI5NTlFQjUxNzZGRjgyRTAzQjk0MTBBMUQ1RDIyREQyREFGOSwgNTE5ODk4MzM0MkQ3MkVBMzMyMzAwNDg1MkRCRTM0RDJEMTlCQzA2NjY3NDZDRDREQkE1QkI0QTAsIEQ0MzU5NkNFNTgxQzA3ODAxRjQ5NEVCMEQyMTc2QTcxMDc2QzVDNTYwMDM5Q0UyNkZCMkJEOTkwCitGNDA0NTcxRjdDMERDMUY0NjRGRTg4QTBCMkJDMzFFNTgxNzY4OTc4OTBFQiwgQUJBRkI0MERCODE0MTY4MzQ4OTcyMjdBODA2MkNEQjQwMDZGOEEyMzc2QkM1MzA5Nzg3MDQ5QTcsIDMxRUE2Njc2MDg5OTZFRUM1QkRBNjgwMzc4MDAwRjcyNDZFMzcyOEY4RjZDRUM3OTg5QjcyRjQwCisyREMwRDA1NUU3NDI5NDVERDJFRkI5OUUyMTgzNDk1QjA4NDYzOUM2OUIyQzEsIDQ5QUQ4M0NGRUIzNDdEMEI3OUQ0NEE1MEY0RUMzMEQ0RTUwRUJFOUNCQzE1MjA4RUM4QTc1RTJGLCBFMzdGN0U4NTFFNDg1QTkyNjUwMzdFNTQ4RjMxOEQ2ODlFODIxM0Q3NjI1OEZBRjdCNzBDNTE3OQorODk0MjcxMDFCNUM3QkQxOTc4Q0YyQ0RBNjQ4OURDMTExOEQyQUQ1M0QxODQzLCA4NDM5MjA2MUY2NjVCNUFGNUFGNUQ0MEM5NThDQTUyMjg5QUQ0RjE3MjEyQzdFMjUxMDNFRkU4RSwgQ0ZCQTA3RTIwNDVGNjAzOTlEN0U0QjExRUM3MEMyRUNCMUI1RUIyNkVFMTU1N0QyOEQ1NEE1QUEKKzE5QkM3NTMwNTIxNTczNzRDNkE2RDg2OEYyRDlEOTQzMzRBNzgwN0ZCNzQ4QzksIDc1MUU4M0E2QUYxNTI4MEZDMDBBRTMxRUEzQjM2MDdBQzlDQzI1NDYyRThDQ0Y2Q0NDMTNDNjkxLCA5REI2REJDMzRBQzQ5QTNEMDg2MUFGRDlDNDQxQTFCQzE3N0JCQzYxN0Q0NzBENDhDM0Y1MzQ0RQorNEQzNTVGOTBGNjQwNUE1RTUzRjQ4OTNBRDg4RDhCQzk5REY2ODE3RjI1REE1QiwgNjQ2REZGQkFEMDQ5MTZFNjI5RkY1MjQxMjE0M0NDRkIyRUUzQTY2Mzg4QkUyRjc4NEE2NzYzM0IsIDY2RDc4MUI0MUY2RDM0ODE3OTI3NUJEQzA2RDQxREJDNkU4NTkyQ0M0QUI0ODlEMjQ2NzUyRTAKK0U3QTAxRUIyRTJDMTBGMUFGQkREOUJCMDg5QThBMzVDRDlFMzg0N0Q3MThGMTEsIDY0Q0Y4NDcwRUI1OUVBQjZGRUJGMEZGNDAxRDE2M0VFRDUwOUNDMjI1QTExNzU5RDg5M0VCMDFBLCBFMjM5RENENTMxNUFDMDdCMzRDNTk4RTE2NEMyM0EwMjI2NjBENkI5NDM0MDIxNzNBM0UwRDg1RAorMkI2RTA1QzE4QTg0MzJENTBGMzk4RDMxMTlDRjlFQTE2OERBQThENzg1NEFEMzMsIDU2RkVEQTdGNzMwODA0OTIyNjQ1OTI4QzVFQzM4QjM1OEIxNkY1QjM3RjA3NTYyQ0E5ODhGQ0ZCLCAzRURDRDM3N0U0QjIwM0Q4NjBERDI0RkU3M0QxOENBMDI1MDFGRThGMUI5RTE0RUY4MTdENTNFCis4MjRBMTE0NDlGOEM5ODdGMkRBQ0E3OTM0RDZFREJFNDNBOEZGQTg2OEZFMDc5OSwgNjAzOTU5RTBGNTNFREYxOUQxMzE0MEM0MDRFOTcyQzU4N0EzNEJDN0RBQzU0ODYzQkU2MDAyNDAsIDVBNzI5Mjc4OTEzNjc3RkIxNzNFOUYzM0Y0QzZCNUYyRDRGMjNEQjA5Q0IxQTQ5MTQxOUI0NkJFCisxODZERTMzQ0RERUE1Qzk3RDg5MDVGNkI5RTg0QzkzQUNBRkFGRUY5M0FGQTE2Q0IsIEMwQkQyMjczMEZEOUNCOUNFNTFFNzNGQjA0MzAwMjE0QjExRDAyOEVBOTdGQ0EyNTYzMDMyOUI0LCA0MDAwMjlFMkYxMjdGMDBFRTA5NzI0NzY5QUQ0RUEyRjAyMTkzMzRBODY1QzQ2NkZCNjg2QjEyMAorNDk0OUE5QjY5OUJGMTVDNzg5QjExRTQyREI4RTVCQjA2MEYwRkNFQkIwRUU0NDYxLCA4OTI4NjYyNTMzNzM1Q0M0RDIyOTRCQjY1RDYyQzkzNDhEQzU0ODYwNjUxQzVEOEVDRTlDQzRBMiwgQ0YzOERCMUE5OUEwNDYzMUMzRUIzRDkxQjc1RDMyNEI3RUMxNTg4OTg4NDdDOEU5N0QwRDFDRUYKK0RCRENGRDIzQ0QzRDQxNTY5RDEzNUFDODkyQUIxMzExMjJEMkY2QzMxMkNBQ0QyMywgRTMxRjcwRDQ1MEIxQzREOTA4RDQyRkYxNEVDQzI4ODQwMUI0QjIzNTFFMDkwMzlBQUMwNjc2MEIsIEMwNTM4NTU4NUNDMzIxQkZFMUU5Q0VFNEI3MjRCMjdBMUE0NDA3MzA0N0IyREIyMzIxOEI4RDg5CisyOTM5NkY3NkI2N0I3QzQwM0Q3M0ExMDU5QjgwMTM5MzM2ODc4RTQ0OTM4NjA2NzY5LCA1NDBDRTIwMTc0MjhGOEYyQzY4NUQzRTAyNjQwMEI4QjdGODVBOTExMUFFQjFDN0U3MzJFRURDQSwgM0ZBQzVCMzhGMTQyNUM5MkJGMjA1QzU4MDdFRjQ5QjBFMTg0MDcwMTVCQzhDQjhFNDhCQ0Q2NTQKKzdCQUM0RTY0MjM3Mjc0QzBCODVBRTMxMEQyODAzQUI5QTM5NkFBQ0RCQTkyMTM2M0IsIEQ2REVGOTI5QTYzQkM4OTI1QjRBNEU2MzE3M0JEOTA2NjJBOEY3RkI5RDg4QjQyNzBERTJDRTY5LCA5RjRFQTIyNDE4NDc5QjEwQjQ3NTVFOEZFMTA3RDhFRDg2NkNFNDlEQjIyQTFBQ0U3NjcxODk5NgorMTczMDRFQjJDNkE1NzVFNDIyOTEwQTkzMjc3ODBCMDJDRUFDNDAwNjkyRkI2M0EyQjEsIEJCNDY3MENFMDMyOUFGRjc5MjU4RUYyNjlBN0JDQzk1OUQ4N0RGRTgwQkRDRThCQTY0NTk5MzZGLCBCQkExRDMxQzA0RTc4MUE5MDBBQThCQUYyOTg4RDM0RjM0MDk3MzE5MkY5ODFDRDFFODNCNDU2NAorNDU5MEVDMTg1M0YwNjFBQzY3QjMxRkI5NzY2ODIxMDg2QzA0QzAxM0I4RjIyQUU4MTMsIDQ1RTZCMTY3NDczMkI3RDIzMzhERDU2QTBBQkQ5QjNEOUE5QTU5RDg2QkQ0NTVEQzdGRjk2MTZGLCBBMkI4NUVDNTJGNjk5RTAwMDUwN0I2QzhCNDY2MEFGMzFDQ0I5MENFMTA2QUY5NENDQzc4QkY3OAorRDBCMkM0NDhGQkQxMjUwNTM3MTk1RjJDNjMzODYzMTk0NDBFNDAzQjJBRDY4MEI4MzksIEI4MzdGNDNCRTczQkMwQjU2MDgwMURFOTFBN0Q0N0E1NThEMjVGQjFFNEZEQUQyNjM1N0NFQjhDLCA2Nzg5RUVERDExNEY3QTNBMUIxOEM1NzM3REYyQkNCMUZCOUVGMTk5NkI1REQwM0VBRUI5RjEwRgorMjcyMTg0Q0RBRjM3MzZGMEZBNTRDMUQ4NTI5QTkyOTRCQ0MyQUMwQjE4MDgzODIyOEFCLCBDOEI1Mzc3OTQ0NjY3QjBDMDE3QUIyMkNDQzczNEVGNTQ5NjMyRjQwNjEwNEQzQzFEMkZCMTlEMCwgODA1QTBGOUNCQjc3NjVBNzhBRURCODdGRTQyQUVBNkUzNjBDMzdBNDExNkRERjlCQjgzMjk5NTQKKzc1NjQ4RTY5MERBNUE0RDJFRUZFNDU4OEY3Q0ZCN0JFMzY0ODA0MjE0ODE4QTg2N0EwMSwgNEY0MDBGN0E4NzIxRUY5RkM5Q0U0QUQ4QTgwNjhGNzRCNTFCMTk3NDAwQUIzOEI0RDEwRTZDODcsIDVGOTQyM0M4MDdEMDQ5RjJGRTg2NDQzRkU4RjBDNkYxQTFGNjU2RjNEMzVDQTcxMDZENzRGOEMzCisxNjAyREFCM0IyOEYwRUU3OENDRkFEMDlBRTc2RjI3M0FBMkQ4MEM2M0Q4NDlGOTM2RTAzLCA4MzhEOUY5RUE0N0M0N0FFMjU4OTYzMDM4MjVDMzFDMUVDQTc1RjIyQThEMzE2NUJBMUI0RjA5MCwgOUFCRDMzRUMwMzVCMzg3QTg0NUNFMTFFNDJFRkY3MUM4NzQyREI1RUZDNEM2MUIyMDFBOTY1OTkKKzQyMDg5MDFCMTdBRDJDQjZBNjZGMDcxRDBCNjRENzVBRkU4ODgyNTJCODhEREVCQTRBMDksIDlCNTg5RDFBMTUzNDA4MEZEOTFERjI4OEYwRDg4QzkyN0QyNzU1N0ZEMEExQzZGMTk2QTlFM0JBLCBFNzBFNEQyQjk1MjM2REQyQjY1NzM5NDVGRkVEQUIzQzAyMTc5RDI5NDBCNzUzMzU0NDRFNzJCRQorQzYxOUIwNTE0NzA3ODYyM0YzNEQxNTU3MjIyRTg2MTBGQjk5ODZGODI5QTk5QzJFREUxQiwgQjYwQzA1RUM3MTZGNUIxODM2MkFFRkI0QkY1MjkxNDZFQjJBM0MyRjI5NDZGQ0E3NDA3ODE4MUEsIDk4RjY5ODhDNzEwRDczOTMyQUI3RjcyQUQwRDkxQ0M3RDdFRTIzREVEODBDQTBDNTgyRjQ3M0I0CisyNTI0RDEwRjNENTE2OTI2QkQ5RTc0MDA1NjY4QjkyMzJGMkNDOTRFODdDRkNENDhDOUE1MSwgQjExMzBFQUUyQjU3MzNCRTc4RTU0REM5MDcwQkQzQURBNjdFQjE5NDIxQzlGQzE5NTYzRDJFQTcsIEVBMzQwMDFBNEU5NzUxQzk0NDQ2RTg1NzAxNjcxRDczQzhCNjY4RTY3Rjk1MEIyNTY2MDAxNkRGCis2RjZFNzMyREI3RjQzQjc0MzhEQjVDMDEwMzNBMkI2OThEODY1QkVCOTc2RjY3REE1Q0VGMywgQzkxRTcyRDg5MDAxOEIzNDNEM0Q2RDkwNTcyQkI3NTAwMEIyNkVFQTFEREVGMTY3MDlDODRGMSwgRTg1MzBCNzE0M0REOEU4MjhFMTBBMDYxMzVDMTJDRDAwMkU1RUZCMzVGNUQ5REZDREQ2MzYzMjAKKzE0RTRCNTk4OTI3RENCMjVDQUE5MjE0MDMwOUFFODIzQ0E4OTMxM0MyQzY0RTM3OEYxNkNEOSwgNDk2QzFBRkM3RENDMkY4NzhCMjQ0NDNENDI1MEVFNTNBMkU1NzZGQThERjJEQTQ3QUY0MTM2QjQsIDM0QjY4RkE5OTRCMDM3QjVERDc1OENEQ0Y3MzdBQzk3REFGMDRDOEM2RkFDQTRBMDM2RUY2OTM1CiszRUFFMjBDOUI3Nzk2MTcxNUZGQjYzQzA5MUQwQjg2QjVGOUI5M0I0ODUyRUFBNkFENDQ2OEIsIEQ5MjI1M0RDMzI0NjQwMTcyRjU3MkE2N0NCN0ZERkEyRkRBRTAwOTAyMEUzNkY1OTY3M0NGNzk1LCA3MTM1MzVBMEE0RjcwMDkzRDM2NjgyNjQ1MTJBMTU0RkI0N0E2RTYzODgzRUNENDYyNzUzMjQ4NgorQkMwQTYyNUQyNjZDMjQ1NDFGRjIyQjQxQjU3MjI5NDIxRUQyQkIxRDhGOEJGRjQwN0NEM0ExLCA5ODI5OTgxQUJDOTEwRjE5NTQ3NEVCQTgwQzgxMDU1NzBFNzA2MkQ1Q0EyRjY5ODE4MDg5NjA1OCwgMjQ3MUE2OTQ1NDg0RDA5MzIwRjkyNUI5NjY2RENFRDY2MkZCRDI3ODQ4MDkzNTA3NUIxMDgwQkQKKzIzNDFGMjcxNzczNDQ2Q0ZDNUZENjgxQzUyMDU2N0JDNjVDNzgzMTU4QUVBM0ZEQzE3NjdBRTMsIEU3MzhGQTg5RjA0QjNCMjY0RTNEOTE0ODY1OUY4RTg5RkFEQTc1Q0EwN0VGOTREOTlFNUU0MDQ5LCA4RDcxODlCMUYxRTcxMjE5NzJBRUY3RUREMjJGNjQ2OTczRjc3QjdGQTJFOUJEOTY0MkM5NzRDNworNjlDNUQ3NTQ2NTlDRDQ2RjUxRjgzODU0RjYxMDM3MzUzMTU2ODk0MEEwQkVCRjk0NDYzNzBBOSwgQjNGQzlERTJCMzkwMDFBNTU4NzUyNTZGMEQ1NzNGNDdFMTE3ODg3MEEyRUE4NzQ5RTVGNkIwREUsIDE3NUY3QzM1M0ZDNjgwNjhGQjUwMUYzRjZBMEU2QjEwNDMyMkU2NDMwRTE0QjQ2QjM2MjNEQkRCCisxM0Q1MTg1RkQzMEQ2N0Q0REY1RThBOEZFRTIzMEE1OUY5NDAzOUJDMUUyM0MzRUJDRDJBNTFGQiwgODMyMjY0Q0RBMDg1ODAzRjQ5NzY0NUE1ODQxRjlFNEFFQ0ZBRUJCMUI5MTA2OEQwNUMyMEQyQTgsIEIwMDMyQUUyQkU0ODk4M0ZEOTY5NjMzMUM3NDRBREM5NUQyQTcwNkQ5N0NFNUY2Q0NDODAxNkMKKzNCN0Y0OTFGNzkyODM3N0U5RTFCOUZBRkNBNjkxRjBERUJDMEFEMzQ1QTZCNEJDMzY3N0VGNUYxLCBGRDAwQjM4NThCODg4Q0EwRTdBNDRFNDI2NTY3NjVGNzc1QTc0OEJENzVFMUUzQzZENjU1NUQ3RiwgQTZFNzEwMzkwRTBBRDJBRjE0NDc0NkY1OTc1OEM5MkMwOEE5RjRCNjY2ODc5Qjc5NUU5QUM5RTQKK0IyN0REQjVFNkI3OEE2N0JEQTUyREYwRjVGM0I1RDI5QzM0MjA3OUQwRjQxRTM0QTM2N0NFMUQzLCAyM0I5NzA5OUE5NDQyNDQ1MzNBQzc2NTQyQUI5QTAwNDI3NEFDQzVFQ0M5ODE5NDc0NjgxQzA2OCwgRTNDMUM1RUIxODA2REEwNUMzRjQwRUUwMjk2OTkxRDVGOTAxOUNBOTk4RjcwRTQ1MDlFQUNBNEMKK0VDQy0yNTYKKzEsIDZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTYsIDRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2MkJDRTMzNTc2QjMxNUVDRUNCQjY0MDY4MzdCRjUxRjUKKzMsIDVFQ0JFNEQxQTYzMzBBNDRDOEY3RUY5NTFENEJGMTY1RTZDNkI3MjFFRkFEQTk4NUZCNDE2NjFCQzZFN0ZENkMsIDg3MzQ2NDBDNDk5OEZGN0UzNzRCMDZDRTFBNjRBMkVDRDgyQUIwMzYzODRGQjgzRDlBNzlCMTI3QTI3RDUwMzIKKzksIEVBNjhEN0I2RkVERjBCNzE4Nzg5MzhENTFENzFGODcyOUUwQUNCOEMyQzZERjhCM0Q3OUU4QTRCOTA5NDlFRTAsIDJBMjc0NEM5NzJDOUZDRTc4NzAxNEE5NjRBOEVBMEM4NEQ3MTRGRUFBNERFODIzRkU4NUEyMjRBNEREMDQ4RkEKKzFCLCAxODRGRkE1ODE5RDgwRDUxREVCQTJGQUM0NjExRjM3ODU3NjM1NUJENjgzRTU0QUJGMkUyMDExNzNCMDg4M0QxLCBDMEE2NkUyNzY2ODhGMzU5QTRDNkQ5MDgyNkNCOTk5NTQ1QkRFQ0NDNjNGMDQ5MTYyMEQyNDJDMjYwOTA2RTZGCis1MSwgRDgyOUFCMkQyRUVEMzU4Qzg0NjRDMzA5M0RDNzJFOTExRTJBMUI5NjcwMEJCOUIxMkNEQ0YwQzJBOEEzQjA3MiwgM0VDMUJCRTQ1OUNBRTg5OUUxRjZDN0JFMkE1OTgwNTkxNjYyNzNFMkQ0MDZBQUY3Q0YzQkMwQjBCNTQzNzc1RQorRjMsIEEzOTJCMjZCMDUwM0E3MUYwQ0UxRTAyQUNBREYxOUQ3MkE4NEQ2MjExQjIxQzkxNEVFOEJDNThERkVBOTI1MjksIDkwQkIzQzlGOUYxQjU5OEI2Rjk3QUVEMkM0OEY0QzU5RjEyMTk0RDhFQjAxMTQ2NUZGODhFNzU2MEQxQzU0OTMKKzJEOSwgNzhENTZGQTkzNTk5NkREQjc1NjVDRDMyMEQyRjI2NEY1MzA1QkU1NTFGNDExRDQ5Q0UxNzk0NEJCRDgwMDlDRiwgREM1QjUzQkIzMkY0RDE0NkE5M0E2RERFMzUzQjZFMjVBOUZDQUZDN0E1REUxNUUwMUY3NzQ2MjM5Qjg4QzA3RgorODhCLCA1MUUzOUU5RjExMUExRkZDNzRENjM0OTlDRjA2NTMyNEI4NkE0NzlCQzBGQkIzREIwRUJCNzdFOTVERkE4NkExLCA4Qzk0NUY3NzhDREVEQ0QyREU2RDc3NjgwMDUwNDFGRkI5MUM2QkMyREE2NTZDMTA0MzczMTMyQUIwQzkxMDJECisxOUExLCA5RUU4QzU1MkY2MTVDOEQwRTg2QTdCOTgzRUYzN0Y2OUJGNTkwNkRFM0FCQjc1ODQ0OTNFQzE1RThDODAzRUY3LCAyQjAzNjM5MjdCRUM4NTIwN0ZGQUZGNEZBOTVDMjBCQ0Y3MjNBRUI2Nzg2MkM1RUI4OTJBNzI2QTQxNTAwQTI3Cis0Q0UzLCBCOTdCOTJGODZGMjM4NTVBRTkyRTg1NzhCMjNGQjg1MTI4Q0UwMEE0NDI4RUUxRkQ5MUFCRkI0ODMxNkZFQTU4LCA3N0RBNDMwQTlCOThFNDZDOUVCQzlGNjI3RjUwNzQ2N0QwNUNCMDYxNzJFREUxNEZBNTgwQ0EyNzgyMTg0ODA1CitFNkE5LCA4MkQzQjNBM0E1QzdFNUIzNDE4N0NEQzFBQTBGQTlGRjBFOEFEODFGMjY5RUJFMkEwNzlBMUNGOTgzN0MwNzk0LCA4NDEzQTc5NTFEQUIwQ0RCMDBDNzkwMTkyQ0U5RDdGQzE0MkFDMkU4QkRCQ0JDMzc2NzE3NjRCMjY0MDg3RDhECisyQjNGQiwgODREODQ1QkRBMTBCRDQ2OEEyNzBCMjkwMDIwQzQ0MDk1OEYyQ0JBMTM0NUY3NzA5NzU5MEU0RjA5ODJDNUE5NywgOTUyRjlCNTM3RTZFMzI0OTlBNzZBRjM0MzJDRjBCNDdDOUVGNURFMzlFN0VCOEI1RDUzNTVDMzBCRTFDRkNDNworODFCRjEsIDQ4RkIyMkFDM0VBODUxMThFOTFFQjIxQzIyQ0QwNkMwRTlBRkYxOURCODI3NDM5QkUyNzU1NTNDMTIzMkRCQzQsIEMxRjA5MjU1QkUwOEE2NzE2MjhBNjRGMjVBMkI1NjI2MThGMDAxNEREMDkyQkJDMTJGQzJGRjhBM0U1OUJGNkYKKzE4NTNEMywgRDU0N0E1ODNDNDc5QkRCRjY1RDkwQTZBQkFDQkU0N0IyRUQ5QkQ1RERCODQ4REFFRkMzQURBOUYwNDVGOERGNSwgN0E3RTJBQTBBRkMyNDFGRjZCMjU0Q0I1OEIzNjEyNUI4N0U1NjBBRDUwQjQ2OUU1NjJDRUVBQTFCQzYyNkMzOQorNDhGQjc5LCAyNkExNDFBOEFDQkI0NzFEM0YzQkRGRUU1ODg5RDEwMUY1RjI0NEExQURBMDczQTI4QTFBQkU0RDY2QUZBQ0RDLCBERDVFN0E3MTRCQUVGM0YzRDIwOTQ3QTNFREI2QzlBMTFEMjIxMzQ0QjU3MkVCNzVGMDc1REYyMjU1MTRBRTQKK0RBRjI2QiwgRUU4QTNBOUE2ODVCQzc1QTZBNjMyOTUzN0FCNDQ3QjRFQkVGQzkzREVFRTA1RDkyRDU0ODFCQzVGQTJERDJENCwgMTFDNkYzNDA2RkMwODcxRkE4MDAyMUQyOEI5MjUyQkEyQTQ0MDFDQzZERTVERDg4N0UxQzEwMkY4OTE5NDIzNgorMjkwRDc0MSwgNjc3N0Q0OUJDNDVGNTQ1MzdBNDY1OThDOUVGOTNENEEyNjBDQjJFMjIzODgzMTMxRjkwRUMwMTNBRkMzQ0E5QywgMUIzMDlBRDE1RTU3NkE4RjZBRkFDQ0MzMEUxNEJBMjIyQzgyNzhENTk0MkIxRDNDNEQ1RjNCMkU5MjZFOUQ4Cis3QjI4NUMzLCAxQzM4Q0RGMjI0NjMzOEEwOThEQjBFMkIwRTQzOEZEQkMxQzlFNTk4QkU2QjY2MUFCNTQxM0Q3QUFDNzM2NUQxLCA5NjVFNUM5QUQ4NkMwQkQ4M0JCMEVCMzRGNDc0MkQwMkI0QzEyMzcyNjYxQTVBNzc5MkZFREU0MUEwMzYzNjNCCisxNzE3OTE0OSwgMkUxRjkyMzBDMTE4OUY3MzAzQUUyM0Y4NUE0REVDMjA2RkNCMkM5QjlEQUFCRTc3NUQ0MzUwNzU5ODg3RTNFNywgODUzRTE3RTUyNTQ2MDhCMTVGRjY4RENDRTZERDQ3RjUyMDZBRDA1NDVBNzBCMEJCOEUzOEFGODE2RDlDRjE1NAorNDU0NkIzREIsIDZERDhCREZBRjNBNkVEOEE5N0MzNUUwQjhDMDg4OUE0NTIzMkU1RUQ4REIxMkJDMDNDMThCNUNFQTREMTQ2QjEsIEJEQUI3NDFDREQ3MjQwMUE0MEQzRkY0MEYyRkI2QzhENDlBRURCRTAxQUM4MjIxREE2OEQ5MjJFNEVGQkYwQ0QKK0NGRDQxQjkxLCBGMTFDNDQ0RUY4ODdDQTQ0RUQwMzFERENFQzU0QUIwOUNBODM5MTEzQjg0REE1NDc4RjU5OTBDRkRDNEEyODBBLCBBQzJENDkzMjY2RkM4RTU4MTQ5OTRFRjQwQzY2MTJEMTVCOEE1RkE2NDM1QzQ0OTlBMUVDQTE3ODM0NDhFRTQKKzI2RjdDNTJCMywgNENGQjUyMUQyNUQ0ODQxQjNCM0FFQTYwQkY1NDg5MDc0NEZCMDRBRDM4OUQ5MDc1MUNBQjQwODg3MEFBOTZFNywgNjNGRjMwQzQxMTY4ODg5MUYzMjI4NDI0NjRENTBDRUFCMDk1MDhDREZGQjI1MTg2MTNEMDc0OTNBNjhFN0Q1MworNzRFNzRGODE5LCBFMzNERkIyQkVCRUEwRjg5RjdCMjRFOTEyQzMwOUYxQkQyMjAxMzg1RTcxOTVBN0Y4NkVFOEQ4MjdEMjUyQzQ4LCBDRjc4ODQ3NzU0MUE5OUM2MDVBNUE0OUE0NDVBRTJEQzgzRDMzMkNDMkUyNUMwMEU4REE3NERBMTgxNjYwMkIzCisxNUVCNUVFODRCLCBCNkYwNUY3MzUwRjk4NEU0ODM4NjY2MjRGRDMyRjM0NDU3MTUwNUQ3OThBRjAxQzc2QjAwMzdBMTYxODk4NDAyLCBCRUM2NEJCNzI1MTRGMDMwMkNEODRBREQ3RjhCODM5OTE0RDE2OUYzMkM0RDdERDdFNzVCREUxNDYxMEVGRUEzCis0MUMyMUNCOEUxLCBFNEJFMzhFM0E3MTlDNzZDQkU2NjA3NTZFRURDRTU4NUU4MzZGNzlDMjUyRjE0QUNCQzM0N0QxRjJCMDA1RDAzLCA2RjY5QzBBM0RDRDVGNDhCRTZFREYwRDc4N0FGNkM5ODU1OTFDOTNGQkE4RTk4NDRCMkUyQkE4MzkzN0EzRjA2CitDNTQ2NTYyQUEzLCBCRTE0QjQ0MkZFMTY1RkU2NTdDRkMwQ0E4QTFBNzY1RkFCNUQxNEY5Njk4OEZEMDIzMzZGMDNCOTY2ODZGRDNFLCBFNkU4MDIwRTgxODU2RTc4ODM3MEZBQ0EwNzA4QUZGODM4MzFBMjVGNzUxQThGMTkyQkIxM0I5MDM5MzM4REJDCisyNEZEMzAyN0ZFOSwgRkZBQ0M5Q0IxRjhGRURDMTEyQkU0RUJGMjU1OTU2QThDODc3MDY4NkQyMzY4NjJBRDFBQTUxQzY1NUE4RDZFMywgODMwMUIyNzA0M0VGNUQ3NzQ0MjFFNThFMzE2MEFDMkI4MkRGOEZFRTBDOTdFMEE3RDJDMzQ5OUQxQzJEMUI5MQorNkVGNzkwNzdGQkIsIEIxOTIyNjRCMUE0NDNFOUFGQjlDRjc5QjFBQ0I5OTdCNjY2NEE5MkFFMUI4Qzg0RkJFQTJGQUY2RTlGQjE4NDEsIEQ0OTlGQjQxNkNCNDcwOUFGMDcyQzc4QTRDRDVBREQwOTI2QkU0NTk2NEYwOUEzN0U5QjM2MDVCMTVGNjJGMjcKKzE0Q0U2QjE2N0YzMSwgRDRDOTk0OURCOUFDMjFGMTI2NTc1MjU1QUYyRTk5RUFBNkVDM0UyQzk2NThENTcyNTk0NDQ1Njk5QjBBODExRiwgNkM4OEIxNDc0Q0Q0MTlENkQ3NzI1RkVCMkVBQjlFMEYwMDdEQzg3M0YxMkIxMTQ4NEEwNjQzM0FGQTBBQkQ1NAorM0U2QjQxNDM3RDkzLCA1QjU4MkI2ODE0NEVFQjlCNDkyMUQ2OTgxMjlDQzg3RDREQjc5QTgwNTdFMURGREY4NzAzMUZCNTk2MTdDNkVGLCA0M0U5QThCNjY5QjQxNTMyNzY4NTUwQjZGRTc4ODVGNUU3NUIxMTREOTgwMkE3NzdBOUQ2QzI3MjI0QzhGMzYxCitCQjQxQzNDQTc4QjksIENDMDI2QTlEMEE3MjhFQzg5OTREQ0JBRjc5RjNDQTZCRDNBOTM1QUQ4MDhDNjA2ODg2QkQzMzNCMDMxOTQwRjAsIEE0NEM5MDMzRjk4MDc5RTdGMjYyMUE5MjFCREY1NjVDODYxQzEyNUE4RTZBOTc3RjE4NDdCOTBGMzRBMDQ5NUYKKzIzMUM1NEI1RjZBMkIsIEI0RDAyOTE5NzdCNzMzODIzOUIwMDg3REE3MjA1RkVFOTFBRkU0RTk1MDJBRjYwQTY4NkYwQTRFRDZFODk4RDQsIEVBQTk5OENEQzdGNUJBM0FEQTlCNEZEMUYwMzFDMDQzOUIxOTAxRkQ3ODM5QzRFNkM1N0QzNDk4MTU5ODgxNworNjk1NEZFMjFFM0U4MSwgQzg0RUZCNDIwMEE5MDBFMjVDMTE3ODhEQ0Q2NDg2MjcxNjgzOTY2ODkxQTE3MjBENEU2OUEwNUVGREY3NUNFQiwgNzkyNzYxOENGMjk4QzcwNkE4NEYyNjMyMTQzODlEMkVEMzU5MEIwQ0Y1NjYxNkIxN0E0RjkyNTc4QUE2NkY3OQorMTNCRkVGQTY1QUJCODMsIDY4NzM2NzdCMzQ4MTUxMEJBNkMwNzA5NDY2N0E3NDc1OEE5NTk1NTM4Mjc0NUMyREM5QkZEMjIxRDg2MjIwRTksIEE5OTY4NDM5NDhBNjgyNjE4MTlDNjdEOTgzMjQzMUZERkVFNEM0Qjc0MDQ2OEIxRDMyRTYzNEFCNTRGQkU1NkIKKzNCM0ZDRUYzMTAzMjg5LCAzMThEMjA4M0VEQkJERkY2MTYwMzUwNjgwOTlERUY5RjhGMzAxQzE4ODYyODE5NTcyQUY5ODNDMERFMUI1NzY2LCBDRjRFQjJFNEVFQTIxQ0I4MDczNzE0NkE5RkUwQTlGQThFRDI3QkEzMzA0QjU5MUQwNDRGMEI1ODQ0QkUyNDQwCitCMUJGNkNEOTMwOTc5QiwgQjlGOEQyQ0Q4NjA1RkJCMzRGQjJFNDVDQTFCN0I1NTEyOTBBOTc1NkU0RTUwNUI4QkMxQTI0RDU3M0EyMzE1RCwgQTdEREU0NjlGN0VDNkM0MUFGNzEwNkQ4NzZFOTQyRDYzMjZCMEIwODBGQjg5NzRCNUZDRkY0RjU3QjJGRTNERAorMjE1M0U0NjhCOTFDNkQxLCA0RjM0Qjg1QTZFODZFRkNFMDdGMjQxNkVBNTIwNzU4NEVBNzNFRTU2M0FBRUI4QkE1NzE4OTk4QzNFNkJDODM3LCBCOUU1OEI4QzYyNEZDNjlDQUJGRkYwNUYwQUU2Mjc4MzFEMzIxQTdDRUZCOUI0NkRDMDAwMDFCRTA0NTU3RkMzCis2M0ZCQUQzQTJCNTU0NzMsIEM3Mjc0NzQxN0YzRURFRTNBODI1RDY4MTI0MzNBNzY1Qjg2QTUyMzJDNkM2QTY1OUM5QTRCMTkxQjFFMURFOTQsIDZDRUVGODcyNzczRDAxQ0UzREYyOEJDOUNBQUY3RkFGQjk5REYxRDk1OUY2OEU3MkUzNUI2ODU3RTA5MzJGOEYKKzEyQkYzMDdBRTgxRkZENTksIDgxRkQwMTFDOEE5OUE0MERDQThBN0MzMkM3OTE2MkE1RjJENDg5MDg5NkNDNzhCM0EzMkVENzE3Q0E1RkEyQTQsIEI5RDc0RUIzNThFODMxNzgzNkI0QUY1NTU3MEExRDNEMTI4NjA1NzJDRDJBNUIyRDBERkNDNEJEM0M0QkM5ODcKKzM4M0Q5MTcwQjg1RkY4MEIsIDQwQUZBRTRDNDYyQzY5MzM2RDg5MTk2MERGRTZFMTk2RTk5OTM4MzNFNjY1RTA0OUIxOTU0NjM3RDQzQTEyOUUsIENENDA2MUMwOTg5MThDRTVBOUM4QUE2ODM0QkIwM0JENzcyMDc1RTY1QTQwOUU0NkQ3MTRGMzU1RUM2MEVCOEEKK0E4QjhCNDUyMjkxRkU4MjEsIDc0NzA0QkQ4MEQ0RTI3MDc4QTY1NUU3MDZFMkE1OTdBQ0RDMjlFNDM2RUU4MEJDQkUxOEZBQTg0QzE1QzZEQTMsIEQxQjQwOTMxNzgwQzFEQTYzMzVGQzQ0RkU0NjkyQjY0ODRGNjBFMjUyRDAyRjgzQkNBREREQjNFRTdBODk2QzgKKzFGQTJBMUNGNjdCNUZCODYzLCA2QjQzOUREQkMxMDBERURFRTA0ODNBMEM0RkQ1QThDREFDMTgwMkNBM0Y5NzI5M0NBNzI1QzI3OUNEN0JCMDhFLCA1OTE0MEMwNzQxQjFGQTIzNEFBRTFEQTMxREJBNjVEOTc5MUYzMzk2OUFBNzA2MUIwNzQ5RkRCRjg4NzU4RkQ5Cis1RUU3RTU2RTM3MjFGMjkyOSwgNzY2OEMyQkRDOTFEMjkxQjAyNjUwNzg5MDYyRDVFNzUxQkFGQUY1OUNGOTk4Njc4Qjg5ODgyMzk2MTA2MkQwMSwgQjM0RUIxNUFBNDU2RTI0QUZCOThDNUU2RTRERjM3MkREOTFEMTI5QUVGOTAxRTBCMTMwQkNGN0U5MzMxRjVFRAorMTFDQjdCMDRBQTU2NUQ3QjdCLCBGOTJDM0EzOEZBNUU3REZCRUZDNjBGQTBFMjQ1NkRCNDM3NTNBMjYxQkZFNkZGNjNDNjJFMzYzRUMwODc4MTEzLCBFRUIyRTFCMDI3NjE0MEU5QkU1MzA1QjUwQjc0OUM3Qjg2QTAzRTMxOERDMzI5NjMxQkFEQkYzODg3NDgyMjQ2CiszNTYyNzEwREZGMDMxODcyNzEsIDI5RTcwMjA0OTdENkFDQTY3RjY3NjNGNzVGNEI0MkFCNUFFNEVFOEExM0FDNTAyRkNEM0QzNjBGNEVENjQyRjMsIDRDREUxMkIzODgzRDc1RDJFMEE2RDc2MDlCMEFGQkRGQUM0OTg4RDk3MDVBRkFCNEVDMEExNTg5NTE0RTAzMjkKK0EwMjc1MzI5RkQwOTQ5NTc1MywgMUZBRDVFNzQ2MEY2REZEMzlGMzAxNzU5MzBBRjUwRDFCRDdDNUQ3REM2QkQwNDJENUM0MUYyQzUwQ0RBMzlGNSwgNjIxRkYxMTVFMjBDOUVBODJGMDY1RDQ0QTNBOEUxQTVBREZFNUJFRDVBMkNDQ0I3Q0I0MUVBMzAxMURFRTM3CisxRTA3NUY5N0RGNzFCREMwNUY5LCBDMzIyNjBGRjJDQTMxNEJGMjFDOTY1N0ZFMkE2N0RCQ0Q0MkY4RkVFOTQ4MDFERkJGMTlCOTBCNUYwMzkxRDNELCA0RDVDNEQ3QTUxREUwRTEzQzg0RDlGNzMzOTdFMkI2MDY5MTY0MURBRTIxRThBMEVDMTc2MDk5RTUzQ0EyNUQ2Cis1QTE2MUVDNzlFNTUzOTQxMUVCLCAyN0E3QzlCN0MxRDQ4OTBEQTJEN0VGRjcyODE3Njc0QUY4OUIwMjUyRDRDNUQ0NzVCQjNBNDQ2NUU0NDdGQUU1LCBDNUU0NkY4RjI3MzM3NEExM0M1OTQ2RjM4ODg1QzMyRUMyQTc0RTBFQTg0MUZDQzdCODlCRDhEODNGNTVGQjcKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCAxMThBMkNBQzBBNDgzNzIzMDg5QTNFODg0ODcxREY4NUFDODVBRjc5RjU4NUVCQzNERTQyODE2MUZDREZGMTdBLCAyNTc1NUU2RTRDQkU2NTFBMEZGQURDQjlCQTcyNUI4MTQxMjBCNkMwNkNERkU1QTg0RjkwN0U2RTJBNjQ3MERCCiszMkFDNzE1MDQ5MEZGMDM0QTE0MywgODQ0OTE3M0YxRUYzMDZDNTQzRDBDNEI5RjJDQjkzNDI5RjM0NjM3MjM2RTMwOUJFNjdENTNENDE1Nzc5NjcyMywgNzgxODQyRjdDOTc4QkI2M0FBNTk0RkFEOEE2ODEzNDMzNUM5NDVBRDA5MTc3RkZFMDMwMUU2N0EwQjg1NzhFQQorOTgwNTUzRjBEQjJGRDA5REUzQzksIEY1RTE3N0U0QzIwOEVFNzNFQTYwRjkzQ0Y1NUFBMjlDNzQzMkY2NDE5MDE1MUMzQzkxMjBFRkY1NDQ1MDc4OTUsIEMzQTExMjk0MDNBRjkwRUIwMTQ0QjAyMDY0QzgwOEE3NEU3N0ZGMUI4RDVEMjA5NTlGMkQxQzY0ODVEODIwMUIKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgRTk3QTEwMzNEOEQ0NzYxMkY2OTQxN0Q3NUEzOUY0NUU0RDNFMkZCMkJFRjhBMjM2QzVCMTM3ODQwM0MzQzgyLCBBMUZGNkY3REVDQkQ3OTA4MzE5RDE3MzVGN0U5RkFCRThBNjVDNjQ5NjU4NkI3NzczQjlERDdGM0M4NDU4QUEKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgOUI2MkM3RDBEQjBBMUYxRjcxMDYwMzczRjUwQTM0QTNBODk1NkNCNEM2RUQ0QUI5NUI0MDAzNjlFMTgwRjc0QSwgMjA3NEJFNTFGOTY4Qjg3NDY1OTE4QzE2NDYzN0UzMzg4QzE1MURBMTQ1NEY5RjU2OTZEOTNDMEI4OUY1Qjc5NQorMTAwODhGREE2NzFFMEIwMEE3MDYzMywgNTc3ODlDNkY2M0M2RDhCM0UxQjhEMkRFRDQ3OTIyNkJEM0M0RTE1RDc2QThGMTg0RjY0MzRERkQ1MUM5NUVCNywgMkNFQTZFRDNERThFOERBM0ZDMDIzQjdFRjE4NzlENDAzNUY2RkQ1OEE5RjVCMkNGQzNBQzBCQTU4QzZDQTYyMworMzAxOUFGOEYzNTVBMjEwMUY1MTI5OSwgRDhCRkFDQjgzNDE3QzJCNjY1NTYyRjcwQzhBQTJBNTQwNDlCNTQ5MEJFODNEMzUyMTlFNjFGNEYzQUZBNkRGRCwgRkEwRUExMDVEQzNFREI1QkZCNTdBQjJFQjBBRkU2MDQzOUY2RkJGN0VEMzcyQzQxRTIzQ0Y4N0VBMUQ3RDdBNgorOTA0RDBFQURBMDBFNjMwNURGMzdDQiwgRTA1RkRBNUEyMTc0MDlGQTM2ODJDNkU1NzA3RDQ0MEQzREY3NTBDMTg1QzU4Q0RDRjlGQjk2RDcwMjlFNjcyNywgNEUzMzYzMDgwNjlGMDZBRDkxNDBDMjNGQzQ2NkExNjE1NkY1RTk2RTgzODIxM0FFNzdGOThDRERCMUMzNkExQgorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIDg0MDkwRkRGOEI5NzI2MjQxNTE5MEI3OURCMEQyNzJFQ0U1Q0IyRjM3NEU0QzA1QTUyNERGMjE0QkUyOTFCQUIsIDFGNDAwMTMwNzI3NjhBMkNCQUM1MUY0QzFGMUMwM0ZFNTdCRTc4REQ1MDYzMDQxNjQ1MEM5MjMzNjgyNTE0QTcKKzUxMkI1ODQxQUEwODE3QjM0RDhGNjIzLCBBM0UyQzg1QjEzMTk0M0ZDMEQxN0VBRUYyQjVBNDE3RDMxQzgyMTM5QUNCMkRCQ0NFMkFCQkI0N0FGQjhCRDFDLCA5QkZERDk4QzU2OTg2ODBFOTkxMzY3QTQ5NTk1QkUwMzY5M0U2MzNGNkQzRUQ4RDc5OEQ4RDE2RjNCNEFGM0I2CitGMzgyMDhDNEZFMTg0NzE5RThBRTI2OSwgMzhGMEJFNjBFMEZDMjVENjQwOEQ4NzZFMzMwQ0I4RUYxRUIyNzE4N0IxMDVEMTZCMTYyOTE3M0Y4RDY4QjJGRSwgNUVBOTVDQkIxQzkyMUIxQ0RGN0IzRUFGQzE5QjM4Qjg2QzBDMDE0QzgzMTBBQkNENDdBRTcyMzMyRkEzNDc2RQorMkRBODYxQTRFRkE0OEQ1NERCQTBBNzNCLCBEQzI4QzcwNjA5N0Y3NjI1QTU5NkI2QTgyMENCRkUzNDE1MkMxQ0IzQjZFOThBNDVDRjQwOEIyRkZCOUE0MjEyLCBDQTUyQjA5RjNFMTVGMjQ3MTlGRjI5NTc0MzcxMTcyMjVGODlDRDE5MUI5MjY4NjhERjY3QUJGNjMwMEE2MjhBCis4OEY5MjRFRUNFRURBN0ZFOTJFMUY1QjEsIDc1N0MzOUQwREY3MUIxNDZGMzFBNDNERjQzOTlFNEQ0OEQyRjQzMTBCNDY4NjA2NUQxMTUxQzAwQkEzREQ1OEIsIEE5RUFFRkQ5NkYzQjA0REI0Q0Y3MDgzNTUyQkNDMzk0OTA2NTFCM0QyNTkzOUI5NzYyNzMxNzJFRjIxNDhDRDAKKzE5QUVCNkVDQzZDQzhGN0ZCQjhBNUUxMTMsIEM1Q0YyNkY4QTgxQTcyNTc5NUZERTlFNEQ4N0Q1RDNBNjVEMDJDNjJCQTlBMzE0RkYzQzQ1MjI4N0NGQ0IzQkMsIDdBNkU3RTRGMkY2RjVCMDFCNkJENTZEODVENUE1MjFFMjAyREJFMUM5MkMyNkU0RUZCNTNBNDJFODIxMzJGRTcKKzREMEMyNEM2NTQ2NUFFN0YzMjlGMUEzMzksIEU0QTA5NkEwNjc5QjE3OTY5MkQ3NjE2NDlGQzg0RDEyNjMzQTQ1ODM1QkY2OEZGMEY2MzYzQkI3QUNEQTJDMjAsIEQ1ODNCMzlDMTNFQjk1MzIxMTE5NDM4QTBGRUY5NDhCNkZFMTUzQUI4NkNEM0IwNEQ2OEMxQzk5NkUwMDc3RjkKK0U3MjQ2RTUyRkQzMTBCN0Q5N0RENEU5QUIsIDFFRjdGM0JDNjdEQzYxQjNGQ0E0NDNFMUJFN0Q3NzVCODhGMTc3RERFMERCQkM0Rjg3NzQ3RjhFMUZFQTU3NzMsIDQ5RDlCOTk4QTZFMzZFRENDMzZFQzAyRDhGQjE5RkI3QjlDNjI3NzNFRkZBRDVEREJDRTQ0RUE4NTM2REJBMTkKKzJCNTZENEFGOEY3OTMyMjc4Qzc5N0VCRDAxLCBCNjI5NDBEMTFFNDcxRkRCNEQxOUExQzAzMUJERDc3RDAzRDlFQjc4NzJGMUUzNDZDNEQ3MUM4NEE1RkJFQjJBLCBENkEyNTFCODlBQ0M2MkRFMEMzMzRFNzcyQkIxMENGOThENDIyMTNDQTMzQTdEODBFMUQ1RkQ5N0E2QkE3NTg4Cis4MjA0N0UwRUFFNkI5Njc2QTU2QzdDMzcwMywgRjE5QzEzMkYxQTcwODEzNTEyODkyNzNEQzMxRTIzODNEQ0VDOTExQzI2QTVFNzJCNDc5MzEwRUZEQ0E0OTU2QSwgNURBN0VDODA0NTI2NkJDRDg5OEIzQjc0RUM3MEM1MEYzMDE4RjYzNThEQjc3OERDQzAzMDg1MzI3QTUyODlFOQorMTg2MEQ3QTJDMEI0MkMzNjNGMDQ1NzRBNTA5LCA0OUU3NjA4ODQ4QjdENkZFQUYxQzJFMzA5OUJFNkMyN0NCMTJGQTkwQzE1MkNGRjgwNzkyNDVFQzdDOTlGREEsIEUyRDNCRUE3ODczNzZFRDVBODA2OEQwREZGQzUyREY5MTA5Nzk2MjJGNEM2RTdCOEMzNjYzOTVFNkQ3OUVCMUUKKzQ5MjI4NkU4NDIxQzg0QTJCRDBEMDVERUYxQiwgRjFGN0VDMzNENTk2RDg1QTJERDlGOTc3NjFEQTBFQzg4NkEyOEE4RTM3ODVCMUM0MzFDODA4QkNBNTRBQjEwMSwgRjVFMjY1RDJBQTAyN0FBQUZGNDFFQjZDNjJDMEMyQjQ1RUExMkVCNzRCRkJFOTBCQTI0RjdBRkIyMDIzQzYxMworREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCBBOEFFNjQxNkM3MkRBMzU3RkUzNTYyMTBCMjIwOTIyRDkxNDU5RjgwMTdCOTQ4QzkzOTk2OEJBRTZBODE2RkQyLCAxOTE5MkZERUQ5QjVCRTVGNjc2NzExNjM0M0FCQUQyQjkxOEQzRTFFNjkzMjRFODM5NEMzQUUxNUQxOEIzNjNDCisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCA4MDI2MDQ0OTVEM0NBRjU4Q0IyREI3RUYxQjVBOTQ4OUU4RjFFQzg3RUMyRkI4NzU1RDEzQTcxMkI5RjI5RjI4LCA4NDE5RjgwNDQ5MDQ4QUQyMDkyNThFMzU3ODk0MTc1MjRFNTI3OUZEQzY5MjkxQUU3NUMxRTJFMEZDM0JDOTIzCis3QjZBNDNBN0VGOTAxRkQyOUYwNUY5RTgzN0Q5LCAzMjU2QTk1OUFEMkYwNzIyM0NDRTE2QzQ1MThDNUZDMEEwNDhDMkYyNzVENkFCRjVBMEU3NUQ4OUI0QUU0NjQxLCA1NzcwNTExRjY2MDZCMEE5QzMxQkI3MDk5NjU4MEE5RDU5NEE3MzUyRTlGMEVBQjE0NTUyMTIzOEExRDBFMTQxCisxNzIzRUNBRjdDRUIwNUY3N0REMTFFREI4QTc4QiwgRTNERUVFODZCQUI3OTczMzJERDZDMjFERThFNkQzQ0M0MDIzNkM1MkE0MDlCMkIyQUM3N0YyRUI0NTBFQjI3MSwgNTE0OUNBN0ZFQUI2OUQyOUY4NjM2REU1N0U4QkNDQjdEMkRCNjBGNDFDOEQ2Mjk0RjY4NjNFMjlBRDQ2QjZGQworNDU2QkM2MEU3NkMxMTFFNjc5NzM1QzkyOUY2QTEsIDYzOTM0NkZDNkU2MzI4MzA2RjRFQjNFREZBQUIwMDMyMDI3NDIzQUM1OTNDNkJERTcwRDZEMTVGQkRGRDk0RkYsIDY0OEIxOUJCQUE1QUFFNjBBODhGQkMxMDAzQ0JFQkI2ODQ5NzczNzJEMURCQjdEMDYxMDk0MjFBM0JBNjUwNDMKK0QwNDM1MjJCNjQ0MzM1QjM2QzVBMTVCN0RFM0UzLCBFREYyQjNEMjQzMUM4REYyOEUyQ0FFRURERjU0M0I4MkVCNDI3RjlDMTc2RjNENkU3QTdFMkY3OTZCMDFCQjkxLCA4MDNGQTE0RTFEOTcyRDhEMUI5NzMxQzY5QjFCRUNFNDlCOEI1REI1RjBGMzVGMEREODNFNTg5NjBGODA2N0NBCisyNzBDOUY2ODIyQ0M5QTExQTQ1MEU0MTI3OUFCQTksIEMwODUxODg0OTE4QTJBMTg0QkYxNzQ1OUU1MkMxODEzODQ4OTkyOEQzNEVCMThDNDE0NTExMDUyNUNDQjcwRUQsIDVFMkJDREJERTc2OTlBNkM0OUQyMjIxNzc5OUM3OEI4ODFEMDdBM0Y2OTY4RjIxMjk0QUI5RkI5QkI4MENEMDUKKzc1MjVERTM4Njg2NUNFMzRFQ0YyQUMzNzZEMDJGQiwgRTg2QTI2QUY3REYzOUREQzY1M0FDREMwRkYwQzEwNkU5Q0MzOUE1Mjk1MEI2NkM4MTNBQ0FDRkQ3RUFFMDM5NiwgODk0RTBBMzgxRDgxNUFCRkJGMjkzNURFQzhCNUZDRjFBRURBREQ4QzhBNzMzOTkxQjdFNkExRjQ2QjIyRTVDMAorMTVGNzE5QUE5MzkzMTZBOUVDNkQ4MDRBNjQ3MDhGMSwgM0JBNTc1ODE0MTYwRDlFMjIzQTg3RUJFQTY2MEVFNUI3ODAxRTA3Qzk0RkU1NkNGRUJCOEM3NzQwQjJEQ0ZGRSwgQzA1NzAzNTE4NEI3QkJBOTFGRjNCNzEyOTdBRDg0ODJCOURGQzBCMUJGMDM5NUYwMzY1QUU1RTBFQjUzNTAxOQorNDFFNTRDRkZCQUI5NDNGREM1NDg4MERGMkQ1MUFEMywgMjZDMDYyNTE5MUFBMjExODNCOTlEMzY3Nzg4NjUwNzNBOEEwN0NFNUVCRTExMjRCQzc5NkQwMjdFRjg4NEI0MywgQUU4QjNCRDA5NUQ3OUNCMTk1Q0REOUZCQzEwNzg4NzhCN0VGMDE4OTAyQjUwNEEzRjFCOEY4QjI5MUM2NTVGOAorQzVBRkU2RkYzMDJCQ0JGOTRGRDk4MjlEODdGNTA3OSwgMkVDNzQ0NUM5NjZFNzVCNTA5NkZDRDg1REI5NUU1QTQ2QjgyMTRDMEI0MTJFNjQ4M0E3MERFN0FCMzNFOUY2MSwgMUYwNkRDQ0IyOTA1MTcxMzg1MkMzRDkxMjBENURBODQ2Qjg2ODEwNUY1ODM4OTkzQjQ4RTY0OUJFNzY2MDEwNAorMjUxMEZCNEZEOTA4MzYzRUJFRjhDODdEODk3REYxNkIsIDUxNTI1OUU4QzdERUY2RDU4NTM5RDE0MkQ0MDQ5RDZDMUNBRDcwQzFFQkFCMjQ4RTdBQ0E0MTEzQ0RBMTQ3QkIsIEEyNTA3MjY5NjE4MkI0RUYxNURCMkE0NTNENDI1MzQ5MUE4NkJFREI5MjlBMUJGMTBBRUMxODQ2QTY4QjJBOUQKKzZGMzJGMUVGOEIxOEEyQkMzQ0VBNTk3ODlDNzlENDQxLCBGQzlEODlERkZDRjgyNUZERTk2QzZBM0UxMTg1NjM5QjUxRUNENDA5QTZFRjNGQjAxNkQ4MjVCQkQwMjc1QTkxLCA0QkU2RkUwNjY1RjczM0Y0ODgyN0JEQ0MwMkUxNEZDMDQ0M0QzQkI2RDE2NTk1NkExMkY2QTQ5MzUwNTY4MDUxCisxNEQ5OEQ1Q0VBMTQ5RTgzNEI2QkYwQzY5RDU2RDdDQzMsIEY0M0FBMzkwREI0NkM0REQwQjE2RTYxNkNGQjlDNTY1NTZBRjM2RTMyMDhCN0FFMTA5QkMzMTY5NkExMkU4QTYsIDdCMjYxMThGNzUzNDE2NjA4OTQ5QTU0MjVBQzRGQkE0QzczQzc5OUE5MkVBNTZBMDdEM0M3MEE2MEEzN0NBNkEKKzNFOENBODE2QkUzRERCODlFMjQzRDI1M0Q4MDQ4NzY0OSwgQzUxOTk3OUNCOEJGODA3MzRENjEyMjMxN0E0MUIyQjAyOEMwMEY5RDY3MEIyMzUxQTI1NTYxNTBEM0FGNTJDMCwgQUNCNkFERDUzNEIwRDQyNzJCOTNFQUU5RjhENzdBMDY0RjUxRjlBMTEwNDI3Njk0RUE4RUU5NTQ5QzVFRjI3MAorQkJBNUY4NDQzQUI5OTI5REE2Q0I3NkZCODgwRDk2MkRCLCAzRUU4N0M0Nzk2QTk2RTA3NDEyMkE2MkIxOTUzQkQzODEyNDg5NzQxQkI4OENBNzE0RjIwNzk4RjhCMjdCNDg3LCAyQThCNzYyMURDRDU2REJDREFBM0E0QUM1RDdCMUNDMUQ3ODU4Njk2OUNEQzk3MzhGOTdBMERFN0Q0Njk1MjcKKzIzMkYxRThDQ0IwMkNCN0Q4RjQ2MjY0RjI5ODI4QzI4OTEsIEQzNzMyMUQyMjAxMEJBMzk3NDExODlCMjg0NDM4NTQwQkNEODg1OTU4OTBCOEFFQzM3QzhGNTBBMTA2MjE0RUIsIDkzODRDQTFFNDg1RjBDNzdFM0NFMzk5RDE1MTgwMjFEMzNGMUMwOTQ1NDkyNEVBMUM3Mzc3QkQ5RjQ2RTQwNjQKKzY5OEQ1QkE2NjEwODYyNzhBREQyNzJFRDdDODdBNDc5QjMsIEIwMDYzQTk1MEM3MkJFRDhGM0FBMkQ4N0U3Rjk3MjhDQkRFMkFDMTBBQTIwM0NGMEE1MDdFQzJCMUY0MzE5NzIsIEZDOUQxNjRGMjU0RDgyQUE2REZGQTgxRjBDMEFGQkE1MjVCMkFGM0Y1QUQxOTE0MDgxQTNBQTU3RDg0MjRBMEYKKzEzQ0E4MTJGMzIzMTkyNzZBMDk3NzU4Qzg3NTk2RUQ2RDE5LCBGNDZBMjA1RjIxRTg1NjBDRTI4OUQ0RkM3RURBOTFBQTkzMDJCNzIyNDM1RjI0RDMxNjhGQUUxMTc2QjBFQkNFLCBFMUYwNEM4MTZEN0VBOTc4MzUzOEQ1NTZCNThBODNEQjVFQ0JDODM1NTU5Q0Q2MjBENzUyN0JERUY2NkQyQUY3CiszQjVGODM4RDk2OTRCNzYzRTFDNjYwQTU5NjBDNEM4NDc0QiwgMjdBQ0JCNTMwODk2NkJGNDZDRDkwN0MxNkE3M0VFQTE3NUI2QThERkY3MkJBODAwMENGQzBDNUQ4RDNDRjFCMSwgNEJBMjc5N0M1MjEwMTc1ODQ2MTQ1MzU1RTdEQkY0MjBERThDQ0VENjBBMEYyQzMxMzBFRkQyMjZDNjZDMDA4NAorQjIxRThBQThDM0JFMjYyQkE1NTMyMUYwQzIyNEU1OEQ1RTEsIEI1QzNFN0YzNDg4RkNENzQ3RDdBNjU0REY2ODdFNzIyOUI0OEQ4QjQzNTBGM0M0OEEyOEJERjE2NjE2RTk5ODksIDY0MjVDNkI2QTUxNUVDNTE1MkVDQTZBQUE5QjdEQTc2MzZEQURGNTFDMkU1NDQyOTgyOEYwOTM4QkI0OTM0RTAKKzIxNjVCOUZGQTRCM0E3MjgyRUZGOTY1RDI0NjZFQjBBODFBMywgMzc5QjM2MDlDMzQ5QjBFMURBRDhDOTBFREQ0NzlFNzBGMjc4RjVCQjdDREIzNjUzMTZFMjNERDA0NEEwNTE2QSwgREM3OUUyMjM1Q0FBRkFEODE2MzEyMDUwOEU2QTIzM0E2MDg4MzExOUUzNkE2MjVFOEExMTMyODk1NzA3MkI5QworNjQzMTJERkVFRTFBRjU3ODhDRkVDMzE3NkQzNEMxMUY4NEU5LCA3NTM4QUM0QTBGMDhDQ0I1OUEwMTkzQkZDRTBDMTJEREM4MEM4NDgwNzkzOTE5MEIwNjI5QzUxMEM4MDRCNzE0LCBBOEIzRkM4MDY2RkUxQzk0MzgzRjRDNDE4ODI3MUVBQzgzODNGMkJBNjM1M0UyODk1MThDN0YwRjdCMDRBRjdBCisxMkM5Mzg5RkNDQTUwRTA2OUE2RkM0OTQ2NDc5RTQzNUU4RUJCLCBCQkMyMDc2QkUxMDYwQUQ5ODA2QTlGRUU5QzM5RENGODNFODkxMUNGMTA4QURENjREREQ5QTFGNTkxMzAyMkZCLCA5OUJEOTc0QUExRURDNDE0RkZFMENBRUNCNDJFM0FFRTQzN0RBNjQ4MEU5M0M1QjhBOURENDc2OTM5QjRCQUQ4CiszODVCQTlERjY1RUYyQTEzQ0Y0RjREQkQyRDZEQUNBMUJBQzMxLCA3NTA2NDY2MzE3MzQzOUY0NjQyQjMyMjYwNEE1Q0ZEQkI1NDJFNDc0NTU1RkZFRkVDQjFGQ0UzQjUxNzU0MTIsIEMzMzk1NkNDMjNDMkIzMUNGMDFEQTgwMUUxODU3MTUzNUMyN0M1RjVBMTZBODY4MDM0NTcxMjU5Nzg2RTNDM0MKK0E5MTJGRDlFMzFDRDdFM0I2REVERTkzNzg4NDkwNUU1MzA0OTMsIDQxQjMyNDhEODNBNzM4RjlEMTgxODdCRDYxRTNBM0RFNjYxMjdGOEM3NTk4MzIwNjUzRjQ4MjdFNzRGMUFCQTksIDUzNUEwMjEyQTkxMkUxMzRFMEFGRjA3OTIwNjJBN0U4QUI3MEREQUNEMjdBODRFMTU3NzFENTI3ODlEMEJFODMKKzFGQjM4RjhEQTk1Njg3QUIyNDlDOUJCQTY5OERCMTFBRjkwREI5LCBDQjBEMjZCNzFFQjFBM0YwQjY3MzRBQzYwN0RBRUFCQThGQzE3NEU1OEYwOTQzMTAyMkQyN0E3RUIzRTAzOTBFLCA5OEY0OUExNTc2QkVGNjA3RTEwNUZENjYyMzNGNUY0QjNFQzJFMTM3RTMxOTEzMDlFMDI1MjMzRjEyMzM4Q0E3Cis1RjFBQUVBOEZDMDM5NzAxNkRENUQzMkYzQ0E5MTM1MEVCMjkyQiwgQkJBNkI0QUFCNEU5QUZGREExMkExQjQ2QkRFOEJEOTc0QjlCRTM0OTI3Q0ExQ0Y2MDQxNEE5QTExODE0NUVFQywgMTUwNkMwQzFDMTZERDRFQjM2RkMwQ0NEQkY2MkZGNkU4MzMzOEEzMTVENEZFN0QxOThDNDEwMjE1OTVDOUZFRAorMTFENTAwQkZBRjQwQUM1MDQ0OTgxNzk4REI1RkIzOUYyQzE3QjgxLCBEMzEzOTZBREFGNUNFMjhDMTVEQUQ5NTAzNURBOTI0NzA4MjFGNEVGNUYwNTgwQTc2RDQ3RjAxQTU5NTMzNkRFLCA2RTE1QkMxQkFGOUNCMkI4NUFCRTU4NjNBRTgxNzREOUM3RTdBRkY2NUEyNTNENzYyNzEwMEYyMUQ1ODA1RThGCiszNTdGMDIzRjBEQzIwNEYwQ0RDODQ2Q0E5MjFGMUFERDg0NDcyODMsIDlEMjlEQTQ1NkJDOTZCMUE2MDk4RTVEMzNDNkEyOEQwOUUzMDM2OEQyODY0RUEwOUEzOTJGRTY1OTAzQjkyNkMsIDNFRDJCRUU5QTFGODE2MjVCNTZCRDk5NTM0RjRGMzMyRkM1OTA5NjBCRjg3OTI1MTAyODc4NUQ3NUFGOEIwMTUKK0EwN0QwNkJEMjk0NjBFRDI2OTU4RDQ1RkI2NUQ1MDk4OENENTc4OSwgQzkxODVGOERDNUU1OTIwRkRDM0U3QkU4REMwMUUyMjVGRUUzM0ZEMzY4NzhBQjg1MDlGODVCNTMwNkZGQTlCRiwgRTNDQjczNDAwRUY5NTQ2MzNFQjA1MkMyNTIxRDBBQUJGNTdDM0U2N0MyNERDNTJEOTk5NDg2RDU1M0M3RTg1CisxRTE3NzE0Mzc3QkQyMkM3NzNDMEE3RDFGMjMxN0YxQzlBNjgwNjlCLCA0MkEyMjdFRURGQUQ0Rjk1NkIwODIyMEQyMkNBMEJFODk5RjRCNTM0MDc5NjhDMjhEQTJEOEExQjdEQjE2NEFDLCA0QTkwNzY0NUQ2NjNDMjY4NUY2RkQ2REYwREM1QTZCNkVBMTU4RDM3MTFENTRDMjBFMjY5RkNERURCRTMxNUJBCis1QTQ2NTNDQTY3Mzc2ODU2NUI0MUY3NzVENjk0N0Q1NUNGMzgxM0QxLCBEMEQ5RUU0RTM2QzY3N0Q4M0MzMjU0NTNCRjAyM0JEQTVBRkM4RDU4RTIxRDIzQzEwNTRGMUJGQzY0QkI1M0M2LCAyQUZENjhFRDEzN0IzRDE5OTY1N0JBMTgxOENFRDk5OTg2RjUxRkQyNUI0ODIwMzU1NDRFNkRCNkVFQzM3NEMxCisxMEVEMkZCNUYzNUE2MzkwMzExQzVFNjYxODNCRDc4MDE2REE4M0I3MywgRDVCMEEyNzMzMUI3MjA0OEUwMjU2QzE4ODk0NTJCOTFFMzY2QTYxNzRCQ0UxMzE3MDdENzcxNEE3N0VBRUI3MiwgNTY3N0U0NkQ1NzU3RUE0MURBQzAyNzc1N0MzRkEzNzE2N0VGRTk4OTk4ODIzNjVBOTAwODhBRjc4RTcwODY0QworMzJDNzhGMjFEQTBGMkFCMDkzNTUxQjMyNDhCMzg2ODA0NDhGOEIyNTksIDYwMUIzQTdGNjYxNDAwREM1RkU0MjgzNkMzMTc5MTgzNDM3QzJGQUI0MkQxNzdBOUI0REIxRTNDM0QwMDFCQ0YsIEFFRTgyMDFBQjlDOEExMzFBOUJFNzkzQUE1QUQyNjU2RTYxN0M5RjY3NTZBMDdBMjFCNkQwQ0VBQzFGOTg2RDcKKzk4NTZBRDY1OEUyRDgwMTFCOUZGNTE5NkRBMUE5MzgwQ0RBRUExNzBCLCAyMEI1ODA1Njk4QkY4QUJFMjJFOUVFQUVBM0JBQzM5OTczODZFQjhBRDQ0OTc4Qzc0QTk2QzgyMjg1OTU0MjQzLCA3NDcxN0U2Qjk4MUZGQTUzREZDNERBNkE1OTRGNUQxRjE5NTAyREU0NTVGNEU3NkZENDUyREJDNDNDMDA2RUUKKzFDOTA0MDgzMEFBODg4MDM1MkRGREY0QzQ4RTRGQkE4MjY5MEJFNDUyMSwgNURENDUxM0QxNzBENDFGMUM0NEEzOUJENzBCQTBGODkzNTE0RTYyMTkzOEI0NkJDN0VENTI3QkQ1NkNGMjI5QiwgQUQ3RTBBMTFGRDU0Q0YwODM2MDU0MUY5NTZEQzIwOTgxQzMzODczNkFGNUNDOUNGQTAyOTQ0QzI1RTQ1MERGQworNTVCMEMxODkxRkY5OTgwOUY4OUY5REU0REFBRUYyRjg3M0IyM0FDRjYzLCBCQ0JBNEY3NjQ0ODI3MjU1MzczQjg0MzhGRjg3NTM2QUI4QjMxMTQwM0U1NjY1MDlFQkVBQ0VGQTYzNzk1QzUzLCA2QjMzQzJFMEY1RTUyOTVBNTQwREYyNTM4MkFDRjNGN0E0M0EyQkJGODdGMDczNjI1MDA4NDZBMDlBOTk1OTI4CisxMDExMjQ0OUI1RkVDQzgxREU5REVEOUFFOTAwQ0Q4RTk1QjE2QjA2RTI5LCAyQzRERDZFMjcwMjI2NjA1QUE4NzBBNTU3NDc4QzQ1ODE4QzJGQkU2MEEzMDUxNjAyOTM4OTYxQTg5OEE0N0RGLCA2NzgwOUJBREIzMjNCNTc3MTQwM0U1NDUxRjExNjREMzBCMTUzQkYwNjI2NEQ5NUM1NTA2QUNBNTUxODA4NDk0CiszMDMzNkNERDIxRkM2NTg1OUJEOUM4RDBCQjAyNjhBQkMxMTQ0MTE0QTdCLCAxNzJFNzYwRjYwRjU4MzJBNDEwMjI3OUI2N0Q3REJDRUU1RDZCMTYwRDA4QjM0MDYyOTFCMjYwMkI2MzgwMTIzLCA2QkNGOUYzMTI3RDM0Q0E0MDE4QjJBMzUzMTg4MTM5QUQ1QkIyNzM0OTM0Mzk3M0JGQUM4QzRDOEY3QjA2RkIKKzkwOUE0Njk3NjVGNTMwOTBEMzhENUE3MjMxMDczQTAzNDMzQ0MzM0RGNzEsIEU1RUZFNjYxNTk4OEZEQzI0MkY0ODk3NDA4RjEyQTc3NUU5Q0UzMEVBNDlFODY3NjhBNTBENzVCMUQyOUVDMiwgODExQzNFNzQ2REIwMjEzQUU2OEM0QTU5RENFRkQ4RDk3QjAyNTY0MkFERjM3OEQxRDhEQUZCRUIwMDkwMkVFRQorMUIxQ0VEM0M2MzFERjkxQjI3QUE4MEY1NjkzMTVBRTA5QzlCNjQ5QjlFNTMsIDExMjMwRjE3Mzc4MkE2RjQwMTVCNUM3M0YxOUJCRUQzQjRBNzdBNDIxOTRDRTk2NjYzNEZCQ0ZCQzU1RkFBNzksIEU3RjU2MDFGNzE0MkIzMjQzOTlEQkY0MzJEOTZFM0VDN0RDMUU5QzFCMzAzOEVGNjcxMzIzQkY1NDRCMzQ3MkUKKzUxNTZDN0I1Mjk1OUVCNTE3NkZGODJFMDNCOTQxMEExRDVEMjJERDJEQUY5LCAyOTMyNzMyNzc3REFENjY5OUI3NzFCRTE1ODhGRDdBODc1NTEyNUY3NTIxMTI1NkFFODA4ODIzMDE0MDJFOEUyLCAyMUU3MUQwOTE0RDk1MkNBMUVCNEJDQkRGNTI0NUQ2MDYzRTRGNDE0REQzOEU3RENCOUZGMzVDQTIzMjhENjQ0CitGNDA0NTcxRjdDMERDMUY0NjRGRTg4QTBCMkJDMzFFNTgxNzY4OTc4OTBFQiwgRTFEQzlGQkE1MTM0NEU4OTYxQTlGMUJDMjQ1N0JGRUI3MkUwMTJGRkZBQ0Y2QjdEODc4QUY5NDY4NUE5OTc4MywgMkM3MzU3NUJBRThBRjRFNjcyOUFDNTBBOEJBMzIzMkNFM0E1MDg4OTlCODJCQzQwMTI0RURBRkZDMTQ4NjYyQworMkRDMEQwNTVFNzQyOTQ1REQyRUZCOTlFMjE4MzQ5NUIwODQ2MzlDNjlCMkMxLCA4QzRFNTBCNjY4RTQ4Q0YxNkQwNDI0RDVERjYyRkRGNTZEODE2NjRCQjFDODZENkUyMjdFMTE0OEU1N0Y4NzVBLCBCNUEzMzYwRkRFQTE2RDRCMTk4MzE5NDE3QTBEQTY3RjYxQjA1RkQxNzU0NURBMkYxMDIzNDdEOUI4NTRBOTY1Cis4OTQyNzEwMUI1QzdCRDE5NzhDRjJDREE2NDg5REMxMTE4RDJBRDUzRDE4NDMsIEEwRTkyNTU3RjI0NjEyNjU3QUQ3RjgwNkIwMTc4MzcyOURCMTE3Njg0RDFDRkQzRUVBMjFBRjAwMjM5REFDNEMsIDFFNURCREIyMTlCNDc3RENBNDVGMzNGQkRDQTM1NjNFRkMwMjM4QTgwMEZFNjNBRjY3RTIyOTM0NkMwOTNFQUIKKzE5QkM3NTMwNTIxNTczNzRDNkE2RDg2OEYyRDlEOTQzMzRBNzgwN0ZCNzQ4QzksIENGMDlGRUVDNjIyQjQ1MTBGNTQ1NEU2RDYwN0Q2QTBERUFCOTc0Nzg1OUYwNDY3NUU2QzgyREJCNDlCQzMyQkQsIEU0RDZBRUE1ODMxMDdCNTM4MjkxQjhDRTZEMThCQjFEOEY4OEI1MjYxM0M4REFCRUFGQTYzNEQ0NzJFQjQ3RTgKKzREMzU1RjkwRjY0MDVBNUU1M0Y0ODkzQUQ4OEQ4QkM5OURGNjgxN0YyNURBNUIsIDlGMUU0QTFEN0I3MTAyQzcxQjJDOTRGRjIwNUUzQTVCNDY2RDYxQkE3NkEzOERCNUFGODVBMkZDNDdBNTc4NjUsIDdBMEIyNkM5M0MxRTYyN0UzMzgwNkMxODhGOTIzNDE1MDdCMTcyQjMyNTgzNkNCM0E4OUY5REQxNTNFMkM2NTIKK0U3QTAxRUIyRTJDMTBGMUFGQkREOUJCMDg5QThBMzVDRDlFMzg0N0Q3MThGMTEsIDY5MTVCNjMzNjQ2NzVCQzdBRkJBRkZERjc4RDkyMzhEM0Q3RkU4NTI1QUU2RTQwNTI1Q0U5MTY0QzU5MDBGNDcsIDFGOTIyQjY3REY3NzNFRjlEREMwMzAzQTkxNzNENEEwRDJBMjk0QUYyM0FEMDYyOUI4QzlEODRDMjlCMDYxRDMKKzJCNkUwNUMxOEE4NDMyRDUwRjM5OEQzMTE5Q0Y5RUExNjhEQUE4RDc4NTRBRDMzLCA4OEUzMTRBMkM3QUU2MkRCODU4QUExRTk3OTVBNUE4OUYyRkIzNjBBMkFDNkQ0NDI2RDdBM0E0NTVFQkQzQkZGLCAyN0NERDBBNjYwRkQzNTlCQjRFQjlDRUEyNjlCQkQ0N0Q0RDA5OTA0Q0U2MzZGQzZFNDcwQ0M3QjIxMkFDOTc1Cis4MjRBMTE0NDlGOEM5ODdGMkRBQ0E3OTM0RDZFREJFNDNBOEZGQTg2OEZFMDc5OSwgQUJBMENGNjk3QjFCNzMzQjI4N0MwQTk3RUQxRkU3NkUyOUFCQjRGQzkxM0U2NzQ0M0NFMzUwODJBOTJDQjIwNCwgRTQ1MTdBMUFFRDI3MjM1MkUwMjE2MzhCODEyNjM1RjZDNjAxQkQ0NkQwNERGMUVGM0IzOEQ0MTM2QzQ2QzU1NgorMTg2REUzM0NEREVBNUM5N0Q4OTA1RjZCOUU4NEM5M0FDQUZBRkVGOTNBRkExNkNCLCA1RTQyREMwODhCNDc1RjYxMThENTk1QkIzRTc5RTg5NkY1QjJEODcwNDg5MEExQTA1MDE3MDJFREMwMEU4OTk0LCAxQTgyMkRCMzM4NzU3QzU2NjBENDM5NzAwQUEyMTgzREY1OEZEQUJDQjc1RTdFQ0RFNTI3MjdGRTVGMThCMjIwCis0OTQ5QTlCNjk5QkYxNUM3ODlCMTFFNDJEQjhFNUJCMDYwRjBGQ0VCQjBFRTQ0NjEsIDQwOEZFNDNENjEwRTk3OTAwMkJDRDRCRUQ4NkRGMTM2RDFBNzVFQ0FBMzI0QTdCOUJFQTk3NTIwQzM4NTRFQjAsIDc5ODZGRTFFODkxQzYyMDdDNTVBRjI0MEM3REQxMEY2OUE4MTlDRTlGNjJGQUExQ0UyQkNDMENENzAxRUEyNDMKK0RCRENGRDIzQ0QzRDQxNTY5RDEzNUFDODkyQUIxMzExMjJEMkY2QzMxMkNBQ0QyMywgRDE2NTEzMTE5QjI1RjNCRTE1NTU4RkUyM0Y1Qjg3QkMyOEMyMTg5QjcwNkVCRTk1NzE5REFBRjMwOTI3MzgzNCwgRjAxNzM5ODlDMzdEMkU3ODZFMzExMENCRDRCNkU1NkM0RkRCMDBENEIyMUI4NTcyM0UxNzg0MzE2QUExQzA0NworMjkzOTZGNzZCNjdCN0M0MDNENzNBMTA1OUI4MDEzOTMzNjg3OEU0NDkzODYwNjc2OSwgM0RBQjZBRDI1OUI1RjczMUU1MkZCQUM0MTZEM0JFQzVERDMwMkQ2RUI2OEM1MThGN0Q4RDkzMEExMzRCMzZDOCwgN0ZGNUI2QjAxOEIwRUEwRkU5QURERTNFNzM3NTU0NTA5OEI1RTNFMjU5Q0E0NDlGRTIwQzU2QzJGRjQ5NkYyNgorN0JBQzRFNjQyMzcyNzRDMEI4NUFFMzEwRDI4MDNBQjlBMzk2QUFDREJBOTIxMzYzQiwgQTVDMjk2MTk1REExNTREOTJDM0QxOTU0MTk5NUY1OTBCODhBQzY1OUY5Rjc0Qjk4OTcyMzA5NzdCRkREMkQ1RSwgODkwNDgxMzkyN0Q1QzFFNkI0RjM5MDVDOEM1MUMzQjE0RENBQzI3MTkyMDFBOEVCMDVENjg5NjI4MTQ4QzFCRgorMTczMDRFQjJDNkE1NzVFNDIyOTEwQTkzMjc3ODBCMDJDRUFDNDAwNjkyRkI2M0EyQjEsIEJCOUNGMzU4NEQxOTFBNEFFQUNCNDUwMzZEODMxQzg0OURGNTc1NjAwODRFNTJBNzIwNjdEM0JFNjE0RTc1MEIsIDU0QUI0QTgzM0MwMUNDNDIyQTFBMjUzRUY5MkE2MEZGQTM0QTIwQkQ4MkU4QkZBRDZFMTU1NThBQkRCNjIyNgorNDU5MEVDMTg1M0YwNjFBQzY3QjMxRkI5NzY2ODIxMDg2QzA0QzAxM0I4RjIyQUU4MTMsIDVGQkUyRkMzQjgwQUQ2Q0NFMjYwN0FDMjdDNkJBQzM2NTNBMjM0QkZDMjNCNTdBMDMwREFEODUxNEEyQzYyMTYsIDFFQ0U0QkYyMkZENDcyMDcxQzFDOUYyMzY1MDRBNzRDQzc5QTgzMERBQzc3MEQ1MTk3RjM5Mzk2QUUyQkZCRTcKK0QwQjJDNDQ4RkJEMTI1MDUzNzE5NUYyQzYzMzg2MzE5NDQwRTQwM0IyQUQ2ODBCODM5LCBCMzUzQThBOUVFRjEwNUNDREI0NEZEMzE5OUNCNkYxMjVDQ0E4NDREQkNFQkQ1MENBMDJCQUExNjAwQkM1MENDLCBEMDJERjlCRUJCMTBENTMyRjc2RDczMTFENTYzQ0E5OEZBRUE0Q0JBNzg3NTI4NUM4NDZBOEVBNzZCMEQxRUVCCisyNzIxODRDREFGMzczNkYwRkE1NEMxRDg1MjlBOTI5NEJDQzJBQzBCMTgwODM4MjI4QUIsIDkxRDYzNTE2QjhCQjdGQUVDNUY2MjFGNUE5Njc1RjM2NTBFNEM4MTZDQ0Y4N0U4MDA5NENCN0Q2ODE3QTM2NkIsIDUxNzQ3ODIyRDJENDg5RTFBOUQ1MDgyRjM2QzJDMTUwNTRCMjc0N0VGMjMyREQ5RDA4QkIxQjNCRjk0NEJFMjAKKzc1NjQ4RTY5MERBNUE0RDJFRUZFNDU4OEY3Q0ZCN0JFMzY0ODA0MjE0ODE4QTg2N0EwMSwgMTVFMEI2QUQ2RkZBODg3NzQxREUzMDE0QkY0RkJDRkExMDIyRkE4Mjg1MzgyRDhENUM2OUVFMjQzRUIzNTQxRiwgRDA0QjFGMUM3N0VERTZBNTU3OTM5N0FBMzVFQjAxMkVBQjFDMzE0MjNCMjIyNEFBOTcyQ0Q4NDcxREU4RDNEOAorMTYwMkRBQjNCMjhGMEVFNzhDQ0ZBRDA5QUU3NkYyNzNBQTJEODBDNjNEODQ5RjkzNkUwMywgMTgxNTlFNUFERkEyRTU0NzhBMTk2RDNFOTczNzU4RjZENkEyNEU5MEJGRTY2NkZFMDkzNEUzNTY3RjIxMkQ0NSwgNDI0MTcxNUM5MEU0MzJGMTU0OTQ5QjNEODJDRjJGMkVGNDhGMEMxN0ZGRTdGNTMyMzQ3QzhEQjRCMzBEQUExRAorNDIwODkwMUIxN0FEMkNCNkE2NkYwNzFEMEI2NEQ3NUFGRTg4ODI1MkI4OERERUJBNEEwOSwgNTVGN0Q1NUM2MDVDMDM1OEJDMDc4NjE2RUZBRDhFOTBDQ0I2RTczN0JEOUQxQ0MxMEY1QkI4QTgzQjQ5RjI1NywgMzkzNDU5NzRFNDY1OUU2NDNDREU5MkM5RUE1MzgzRjJGQzc0QjUzM0IzNTlBNzAxRDQzNjlFODdDNUE4NzM4NAorQzYxOUIwNTE0NzA3ODYyM0YzNEQxNTU3MjIyRTg2MTBGQjk5ODZGODI5QTk5QzJFREUxQiwgQzUwMTJCN0EyODgxNzBEQTNFMEM5QjMwQzU1ODQyNDA2MDc3N0JCMUFBMzg1RDdCQTc3N0QzRjJBNUNENTcwQiwgMjY5NDg3NDMxQTAxQTQ5NThBQ0FDRjMwOTE5M0Y4MEUwOUU3NjJDRDQ1QzIyOEIzMUQ3Q0YzQkUwNjRDMEY2RAorMjUyNEQxMEYzRDUxNjkyNkJEOUU3NDAwNTY2OEI5MjMyRjJDQzk0RTg3Q0ZDRDQ4QzlBNTEsIDQ5NDAwMkUyOUFEQUFCM0JENDJERTgyNzk2OTAyMTE2MjU3NkU1NjJEMzE4QTg4RTY4MzlCMDYzMkJFRENFM0YsIDRCNjU5QkM2RUI3N0VFQUM5QUE2MkE5QjBBMjUyODNDMjg1RDM1MDAwMjg2NUVEMjY2MzU3Qzk3OEZBOUFGQTIKKzZGNkU3MzJEQjdGNDNCNzQzOERCNUMwMTAzM0EyQjY5OEQ4NjVCRUI5NzZGNjdEQTVDRUYzLCA4OTM3Q0ZEQzVCOTc3NDg3NjlGOTkzQkZGMUZDNTMwMEExMDIzNjI2OTRGOUNEQTIwMEY1QTM5MTdFNzM0OTQ3LCAzRDc3QjEwQTA0QTI3QjhDNzkzNzVGNkNBNUYyNERCMTFBMDI2MjAwNjVCOUE1REIwODhEMjQ2REQyNUJCRTUyCisxNEU0QjU5ODkyN0RDQjI1Q0FBOTIxNDAzMDlBRTgyM0NBODkzMTNDMkM2NEUzNzhGMTZDRDksIDI0OTZFRDZDNDRBOUM3ODgyMjlBNTIwNUQyQUIwMUY0OTFBRTQyMTc3MDdGMThDMjdGNUU2M0I1Njc1ODFBMUYsIEUzOTRBMDZDMDA4QjgwRTAwQkU3RkRBNkE3OUQ0NUQxMzQyMkI1NzkwQTg3MUYwMTBCNkM5MkVFQzhBRDE1QTQKKzNFQUUyMEM5Qjc3OTYxNzE1RkZCNjNDMDkxRDBCODZCNUY5QjkzQjQ4NTJFQUE2QUQ0NDY4QiwgRjIxQ0ZGQjNFQUVFNDBCQTlERjFEQUNCNENFQzdGNjVERjcxOTEwNDQ1MDI3MTUzMjMxREVEMEY0NTJEQzNGMCwgMUQwM0I5N0YxMUZFN0JGODdFRDg0ODU1ODNFQzE5QjZBRUY5QTIzNkYzRENDRjg4Njg5RUY3NzIxMUUyMUFDOAorQkMwQTYyNUQyNjZDMjQ1NDFGRjIyQjQxQjU3MjI5NDIxRUQyQkIxRDhGOEJGRjQwN0NEM0ExLCA2NDUxMTJCNTVENEVGQzkwNDk1MDA4NkMwODJEQzREM0Q0MUE4RTE2NEU4NkMwMTU1NDkwOUMwMTE4Njg2QzJBLCA2QjY4MTMwRENEMzhEN0RERkZCMEI2QzI0RjYzQkI4NTY5OTVERDFBMTY5OTg0N0Y2NzkzNUE3RUJDMDdFRDk1CisyMzQxRjI3MTc3MzQ0NkNGQzVGRDY4MUM1MjA1NjdCQzY1Qzc4MzE1OEFFQTNGREMxNzY3QUUzLCA5M0YxNzExMUVGRTQwQTA4MEI4RUNCNzlFMTlCMDE3NkU5RDgwQTQ2QzBBQzZGNjg3OTlERUJGNjRCMzFGNzIsIEZGNjRBNzgyODJFRTdEMTNFRENBODRDNDZGMDg2OUM2QkQ5NjJEMDI0NjBFRkY0REREODY0NEFEREFFNDY1NTYKKzY5QzVENzU0NjU5Q0Q0NkY1MUY4Mzg1NEY2MTAzNzM1MzE1Njg5NDBBMEJFQkY5NDQ2MzcwQTksIEFFNjkzMzRCQTcxREJEMDBCNzI0OTBBQTlFRjVCQTc4QTJFMjBENTE1RjJDQTVDNkY5MjZEOUMwOEUzQjMyNTksIDc5N0JGODVDOTEyNDU2NjRCQzFFQzkyQjlBNzA2OTc3RkZFQTYyNDY1NzgzQUU5RDkzRkFDNjM4NUE3NEZEQTIKKzEzRDUxODVGRDMwRDY3RDRERjVFOEE4RkVFMjMwQTU5Rjk0MDM5QkMxRTIzQzNFQkNEMkE1MUZCLCA1RjAzOEE4QUM4NDMxRjkzMjFEMjAyQzI0MDA1NzgxODY2NTYzQTY4QTJCRDgzMkJDNTVDQURDQUEwQTUxQUQ1LCBBQzA2OTZFMjc5NkM1QTMxMTJDRjZFRDFBN0Q5QTA4RkMzRDk4QUI5QTI0QzhGQzIzQTI0MjI4RDVBRDhDOENCCiszQjdGNDkxRjc5MjgzNzdFOUUxQjlGQUZDQTY5MUYwREVCQzBBRDM0NUE2QjRCQzM2NzdFRjVGMSwgODJEQjlEQjNFRUMxMzI1MDA1N0NGMUJGRTQ5MUE2NTY1NzE2MERDQThEOEIyRkVCNkZFNkZBRDU0NkQ0RjJBNywgODRCMEU2QzMxRkM0MDFDNTMwNTM4MTEyN0UwQkE5RDY5MjcwQjQwMTNDNTRGNDkwRTE1M0EwNzU4MjdBNjkwOAorQjI3RERCNUU2Qjc4QTY3QkRBNTJERjBGNUYzQjVEMjlDMzQyMDc5RDBGNDFFMzRBMzY3Q0UxRDMsIDM0QjgyNEJCNzE3MUFFNjdCOEQzNkJEQzAzQkExNDYzNDhFNDcyMDI0QzQ4MzM2RjI1M0E1NUZGRDkyRUI5OEIsIEY4NkNCNUVFRUNEMEEwMkJGMDFEMDc5QkE1Q0Y5N0M3OTdDNUFDNjhGQTI3MTBFMzk2QzlCRDQ1RTA0MDdDNjkKKzIxNzc5OTIxQjQyNjlGMzczOEVGODlEMkUxREIyMTc3RDQ5QzYxNkQ3MkRDNUE5REVBMzc2QTU3OSwgMjc5REJENkQxRTdDMDg1NkM2Mjg0OTlDRUQ3ODREQTBFMDI1MDY1RThDRDczQ0Y0NjgyODExNDdGNzY2OTVDMCwgMTVDMzIyRjA3QjEzNzExREZGQzRGOTAxNDlFNDk2NzlBMzQ3OEZCNTk4QzAxMzcyNDU3MEYxQzA0MkIxQ0E5NworNjQ2NkNCNjUxQzczRERBNUFBQ0U5RDc4QTU5MTY0Njc3REQ1MjQ0ODU4OTUwRkQ5QkVBNjNGMDZCLCA4OEY2Qzc2Mzg5NEU5ODVDMTAwQTI5N0NFQkVCNzRGMEFDMjIwMEE2Q0U3M0UxOTY4OTczRjZEQzA5M0VFNTIzLCBEQjZFMUE4NkI1MkIxODBFQzFBNjFDNjFDQzU3NEREODZGOUE3NTUwM0Y5MDU2NzlERUI2NDI2MTdCRjM2RUU0CisxMkQzNDYyMkY1NTVCOThGMTAwNkJEODY5RjBCNDJEMzY3OTdGNkNEOTA5QkYyRjhEM0JGMkJEMTQxLCBENUQzNTZEMDQzQjE1MzZDNUQxOTcwNzJDOUQxNTU5MkVGQkZFOEQzNDI1MENGN0QyMEZCMUFBN0FFQjM0OEE1LCA1NkE1RjkzOEVERDVGQ0Y5OUQ0OTM4NzRGNzFENkQ4OTM2MzUyNTVBODg3MjZEOUMzNUFFODVENzcxOTREMzg1CiszODc5RDI2OEUwMDEyQ0FEMzAxNDM4OTNERDIxQzg3QTM2QzdFNDY4QjFEM0Q4RUE3QjNEODM3M0MzLCBDMTREQjhDODVFMEI2RDJCNjc2RTRDMEEyNTA2NDlBODVGRTczQzhEMEM3QjQ1M0YxQzRBRkVERjY3NDU0QUJGLCA4OTUyNTdERkI2OTRFRDFGQjQ0ODU4MDBERTc5MDA2NTY3N0MyOUMwRUMyRDA1MkE4ODRDMDdENDgwOTMzQTU0CitBOTZENzczQUEwMDM4NjA3OTAzQ0E5QkI5NzY1NTk2RUE0NTdBRDNBMTU3QjhBQkY3MUI4OEE1QjQ5LCBERjdENUM3Q0Y3MkU5NEM4QzhCQkM1NDRCNTkzQUM5NDIzNDVBMDIyQjhGMjUyRDUxN0ZFQzg3NEFFQkI1N0RCLCBDN0Q4ODU1OUVGRDQ0MDdEOEJDQUExNzYxOEU0OUFBNENCMTQ0Nzg4Njk2MDIwQTE1NTA3RjJGQzlDMjg3RUI3CisxRkM0ODY1QUZFMDBBOTIxNkIwQjVGRDMyQzYzMDBDNEJFRDA3MDdBRTQwNzJBMDNFNTUyOTlGMTFEQiwgNkY2RUQ5RkUyQjRBQzBEQTY1Njg4QUI2NTk3QTRGRUNDMjU2OUM3QTQwQjhFQTQ2NEE0MzNDMzk5ODAxQjg3RiwgRjYwODFGMkNENTAzNUNDRTU3MjBDMTk5NENBRjI5QUVFQ0I3MDNGODYyRDYwNDE3MzQwNDlGQkY4OUQwMDQ5NQorNUY0RDkzMTBGQTAxRkI2NDQxMjIxRjc5ODUyOTAyNEUzQzcxNTE3MEFDMTU3RTBCQUZGN0NERDM1OTEsIDhCQjgyRDFENDgxNEU2MzJFNTZCMTRFN0UxNEE2NkVCNEQxOTlCOERCMjc2ODhEOTMxMDlDMDJBODNDMDM3MTcsIDk4MjY5NTI5RjI0Q0NBM0NBNDM4NUI2MkZFMzQwMDAwQTMxNUE1QkU4ODdDNkM5MTRCNThBMEU3MUZDMkIxMTMKKzExREU4QjkzMkVFMDVGMjJDQzM2NjVFNkM4RjdCMDZFQUI1NTNGNDUyMDQ0MDdBMjMwRkU3Njk3QTBCMywgQTMzRkIzRDc5M0ZBMzgwQUYyRjI4QUY3QTYyRDU5QTkyRDZCRDBDODM3RDAxQkFCQ0Q0MzlDNDdDMjcwQTA5MCwgNEI3REFCRDM2MkEzQ0Q0MUQ4Mzk2ODREOEYyNDdEQjAzMUI5RUI1QTA2RjgwODM2MDI4OEIwQUY0MkE2NDVDQgorMzU5QkEyQjk4Q0ExMUQ2ODY0QTMzMUI0NUFFNzExNEMwMUZGQkRDRjYwQ0MxNkU2OTJGQjYzQzZFMjE5LCBDRTI2ODQ1Rjk0REVFN0UwMDYxRTlFNUMxNEE3Q0VBOTg0NzA4MzYyMTY4MzIwQTVBMEU4MzAyOUMxNkEyRDlCLCBDMDJGQjBERjM0Qzc2MTczNEJBRUYxNTczQjQ4NTRFMjQxNzQzNzJFNzM1QUFCODFFNjE2MzI2RDQwNkVGMTBECitBMEQyRTgyQ0E1RTM1ODM5MkRFOTk1MUQxMEI1MzNFNDA1RkYzOTZFMjI2NDQ0QjNCOEYyMkI1NEE2NEIsIEI4NTk1NDdDNEU3MjA3QkUzQ0Q0MzI2ODE5MkFCODhBODhCQkZCQkU1Njg3RTg1MzNDN0FFQ0M2QTFEMkJGNjEsIDdFNTM5MzZCQzc5MjQzNkU1M0MxMEI5MzAzMjE5NDU3ODRFODg1QjQzNjI2QjI2NzM5REI4NEE3MTNFMDAyQzUKKzFFMjc4Qjg4NUYxQUEwOEFCODlCQ0JGNTczMjFGOUJBQzExRkRBQzRBNjcyQ0NFMUIyQUQ2ODFGREYyRTEsIDIyQ0UwRkJFNDRERTZCQ0RGMDlDQjlEODVGRUExRkVFNTFFNTE1RUFFRDZDQjIxQjg5NzdDN0JBRjU5ODFDMzgsIDFERUUwN0M3QUMwMjdBMDgyRjc3RUM1ODJFMkVBRkUyODFGN0FDMUQ3MDk3ODgzMjNEQUJGNzlFNUE3M0ZCRUMKKzVBNzZBMjk5MUQ0RkUxQTAyOUQzNjNFMDU5NjVFRDMwNDM1RjkwNERGMzU4NjZBNTE4MDgzODVGOUQ4QTMsIDJFQ0MxMjk4RjQxODkxNEM2QUY3OURFOTBCRTgwMjFFM0M3RjgxQUNENjFGMDQ0OUQzQUJGRDlFM0RDNjM5OTcsIDhEMjI5QzM4MUEwMjJEMkFFNjJBN0I0RTQ4MUYyNTY0MjAyODY3QTRGQ0E5MDRENEU5MUNDNkI3MEMzQkIxMEQKKzEwRjYzRTdDQjU3RUZBNEUwN0Q3QTJCQTEwQzMxQzc5MENBMUVCMEU5REEwOTMzRUY0ODE4QTkxRUQ4OUU5LCBGOEY0RjZBMTk1NUE5Qjc1M0Q3NjY2NjhDRTM1ODI5RjcwMDMwQTE0Q0QwNTg1M0FBMDlFNkY2MTBDQ0IxNjhGLCBDNkFFODgwMjMxMjI1ODAyMDExM0ZGQTk1NzY4NTYxNTUwNTczNDVFOERFMDZCNDNGNUQ4RUE5REFBQTk5NDJCCiszMkUyQkI3NjIwN0NFRUVBMTc4NkU4MkUzMjQ5NTU2QjI1RTVDMTJCRDhFMUI5QkNERDg0OUZCNUM4OURCQiwgRDc0MjhCOUREQUQwQkFBQkIyOUU5M0UxM0Y3NjRGOTQxQTAwRTQ2NDVGMjU5MEQ3RTJDMUVGQzg0RDkxNTY4RCwgMTk2Njk2RjI3N0M3MENCNDk2NzgzNTlENjNBQjk5QUQ0NzlCNkI5NjQ0Q0ExQ0RGREQyQTFCQjNFRkFEMjQ5QQorOThBODMyNjI2MTc2Q0NCRTQ2OTRCODhBOTZEQzAwNDE3MUIxNDM4MzhBQTUyRDM2OTg4RERGMjE1OUQ5MzEsIEI4RTgwOUYyOTVBNzYyMzY5MTczNEMwNjZENTlDOEZBMEQyODAxNTlBQkNCRTFENDI5NjdBNTEzNjQ4NjY0RjIsIDI4MEY0NEU3MzA2NTkxQTc2NjQ2RDVGQUQ2ODY5MDM0QTUxNzZBNEMzNjFCMzc0RThDNkQzQ0ZEMzMzRDVEQQorMUM5Rjg5NzI3MjQ2NDY2M0FEM0JFMjk5RkM0OTQwMEM0NTUxM0NBOEE5RkVGODdBM0M5QTk5RDY0MEQ4QjkzLCBBRUI1QjRDMkFBRTJCOEY2N0RGOTg4RjQzQkE1MjM3NDBDQkEyNTdCRTQ0MjIyMTNGNEYyQTE2MkU0QTVCRTRBLCBENDI5OTRDRjFDMEVDODFENTFFRjY3QUM2N0Y3RTc3RkNCMURGRjRBMEUwMzFBREFDODkzRUZDM0VBOUMwQUI5Cis1NURFOUM1NzU2RDJEMzJCMDdCM0E3Q0RGNERCQzAyNENGRjNCNUY5RkRGQ0U5NkVCNUNGQ0Q4MkMyOEEyQjksIEY5QkJGNEMwNzQ5NzkwRjIxNkNDNUNEQUExNzIzMkJBODVCMzcyOUIzNkE0NTQ3Rjc5NUE3NEJBNEJCMzFGMywgMzIyRUZEOUVCQ0E0M0EyNjI1QUMzREI4QTc4NURCNkZERTcyODgyNThCNjRGQUI2QzgyNDAxMzU2OEUxQUEzNAorMTAxOUJENTA2MDQ3ODc5ODExNzFBRjc2OURFOTM0MDZFNkZEQjIxRURGOUY2QkM0QzIxNkY2ODg4NDc5RTgyQiwgNjMzNkYzRjJDMDI4N0YxRUNBMjkxQUI2NDM0MTYzREU3OUI0NUU2OERCNjI5ODY5NzBERUQzQTQ2RDM4QTQzRCwgNEQ5MUM3NzlGMkIzNTA1RTA5NTJEMkJEMUMzRjU5RkM5MUI2MjU1NDZDNTA4N0U5RTdEMzkzNDdERUY0NDZFNQorMzA0RDM3RjEyMEQ2OTZDODM0NTUwRTYzRDlCQjlDMTRCNEY5MTY1QzlFREU0MzRFNDY0NEUzOTk4RDZEQjg4MSwgRUY3NDQ0RTk5RDJGMkEwOEFDRTg5QzQxNDNCMEY5NTA3OEYxNUI3RjRGQzdEOTM0MTc2NjQyOTM4MzU4OTA5NSwgMjE1RjAwMTQ5ODI0RTE3MzlFMzZGMUU2RkZFM0VBQUQ5QzA4REE1Q0IwODJGM0IxREYwQTNGMjM0OURERDlGMAorOTBFN0E3RDM2MjgzQzQ1ODlDRkYyQjJCOEQzMkQ0M0UxRUVCNDMxNURDOUFDOUVBRDJDRUFBQ0NBODQ5Mjk4MywgNEIwQTQyODNEOUEwN0U1NEUyRDA5QjQxNURFRjlDMDlDNTIzMDU2OEVGRTI5MEU2OTZGMjk1N0Y3NUUyRUJDRiwgMjJGQjY2RjA5NjMyQzhBOUIzOURBQjlCQUVBNjNEMzY0QjkzRkUwRDRCNTA4REVFQTZGNDcxNkM0RTU2MTZGNgorRUNDLTM4NAorMSwgQUE4N0NBMjJCRThCMDUzNzhFQjFDNzFFRjMyMEFENzQ2RTFEM0I2MjhCQTc5Qjk4NTlGNzQxRTA4MjU0MkEzODU1MDJGMjVEQkY1NTI5NkMzQTU0NUUzODcyNzYwQUI3LCAzNjE3REU0QTk2MjYyQzZGNUQ5RTk4QkY5MjkyREMyOUY4RjQxREJEMjg5QTE0N0NFOURBMzExM0I1RjBCOEMwMEE2MEIxQ0UxRDdFODE5RDdBNDMxRDdDOTBFQTBFNUYKKzMsIDc3QTQxRDQ2MDZGRkExNDY0NzkzQzdFNUZEQzdEOThDQjlEMzkxMDIwMkRDRDA2QkVBNEYyNDBEMzU2NkRBNkI0MDhCQkFFNTAyNjU4MEQwMkQ3RTVDNzA1MDBDODMxLCBDOTk1RjdDQTBCMEM0MjgzN0QwQkJFOTYwMkE5RkM5OTg1MjBCNDFDODUxMTVBQTVGNzY4NEMwRURDMTExRUFDQzI0QUJENkJFNEI1RDI5OEI2NUYyODYwMEEyRjFERjEKKzksIDhGMEEzOUE0MDQ5QkNCM0VGMUJGMjlCOEIwMjVCNzhGMjIxNkY3MjkxRTZGRDNCQUM2Q0IxRUUyODVGQjZFMjFDMzg4NTI4QkZFRTJCOTUzNUM1NUU0NDYxMDc5MTE4QiwgNjJDNzdFMTQzOEI2MDFENjQ1MkM0QTUzMjJDM0E5Nzk5QTlCM0Q3Q0EzQzQwMEM2Qjc2Nzg4NTRBRUQ5QjMwMjlFNzQzRUZFREZENTFCNjgyNjJEQTRGOUFDNjY0QUY4CisxQiwgOUM1RkEyQzEzRjQxOEU2MjNDMzE2RDVBODJDOEI3MDUwOEUzQUNBQTJCNEE4RDNBNEFDQjQ5QzBEN0JBMDRFMjIwNzYxQkMxNTg5OEUxQjA2QjRFRURGQTIzRTJFNTQ2LCBGNjQxREUwQ0IwNzU4NTFBNUFGRTgxNTAzQ0I3QkY2MTk0RkRGMUI3REE5RTU5NTU2RjAxNTY1MUJEOTIxOEUzMEVGMkM0QjIyMTNGNTE5QjUyOUZCNTY0NzlGNDg3NTIKKzUxLCBGMDA5MUIxMDgwQjI0QzQwN0U5ODNGQzc3QzA1Mjc4NjFFMjhDQzhENUM5QzVCNDhCMUY0MTZGQjhGNzJGREJBQjFCQTg3N0UyREM5RUE4MjE4N0EzRTQ2RDA3MkFBNDQsIDIyNDkyQjU2QzM1MUZDODgyQ0Q2M0E1NzJGQkI3QTc5NEVDOENDQzE4RjE2RjhGMzUyMDcxRDY5QUY3NjlGNEU3RUQ2MDc3QTlBMDg0MjlCNTg4MTBGOENGRERDRkI4CitGMywgNUE4MTVEODQ2MzE1RTVEQkQxNTVCQzcyOUIwOThDODEwRDY4QjkyQjA1RUNBMjg0OTIzMEY2NkEzNTYxNThDNEExODU2QTExQ0Y3QkE1RDU2M0JBQTZGM0FCM0QwMDg3LCBGQjg4MEYwRDZGODUwNzVCNzAxOTE4MzdDQzQ1OTg1MTk4MTQwNjg1N0YwM0Y2QzhFQTBEMkFCQzUwNDJGMEVGQjlGQzk3NTYxQTYzQzcxQ0Y4MTU5MzgxRjAzOEU3QworMkQ5LCAyQ0M2RTBERTE3RDg2QzYwQTlENzY0Q0ExN0U2QjNCRjhGRjQ4QUI5RTZFMzhFQjA5OTZCQjZDQjM2RENEMjc2QjYxQjI0QzVEQzBGN0MxMDgzRkNCMkE4N0I0OTMyNDAsIEM4NkVDQkIwNkFERDQ1RjRGQkM1RDQxMUFDMEI5QkIwNzI5MkQ3Q0I2RkRBQzExNjc3MjhBN0I4MjVFMjI2RDIyNUEzRjkwREM0MERDN0RBNEYxMDEwNkE3NDEyRTdBMworODhCLCBENUJFQ0Y5Mzc0MDFEMDNDNjM5OTRCQUE3NkZGMUYzNTlBNTU0OTUzQjI2MTNGNjI5MDhCNDc0OTdDQkUxNUE1RjEyNDQ4OEMzREJCOUYxM0RCOTQwOTc1MUFDNkI5RDAsIEVEMjg0MTcwMjk2NkMxNTY2NEFFQTczMzkxMUZEMUMwMEZGMTI1OEE1QjZDOUYwMDUzMEMwQkU5RUI5NDA5MDlEOEY1MTlENTBEMDhBREE4MDFEMzVENkVBMDRDMDVFRgorMTlBMSwgQzdBOEFDNjlBNTZFOEY3MjRBRkQ2RkQwMUNBOUVERjJENDI3QzMzMkM1OTY5OTJDNUYzQjU0RDU3OTExRkM1MzIzRDIxMjQyRTQ5NDIxMzU2NDlGMzgyRUY5QTJDQThCLCA0MTg2QzE2MjE4RUJCRkQ4NEU0REJFMzU4M0UzN0Q3MTU4MDcxNjM5Qjg0QjlGQUFBRUNGMUZGNjk1NUY2QUE0QjBCRDIxQkQ1REM3QzI5MjdFNzZDN0FFNDk1ODU1NDMKKzRDRTMsIEE0QjMyODEzQjE5ODQ0RDgzQTMxQzlENjM4REQ4N0YxNkQ3RUU3QTMyRDQ5QTZBOTlENkE5MDJBQzI2MDgyRTQxRUI5RTc3QjFENDRDMDJFOUY0OEYyNDdEOERFQkYxMSwgRkI2NjE0MEM1Qzg4N0QxQ0EyOEVFQUY1QjhEQjdCMjVBQzREQjFBNDlGQTZCQUI5MzYzOUU0QTFEQUM2NDc5NDQ3RThGNEJCMTMxMjk0NkUwRDA3Q0MwOUI2M0ZFRDUxCitFNkE5LCBERTU4MDY5NDY2RDQwN0NCMjcyNTc0NzNEQzA4RkQyQkQwOUQyNjIwMzZENTZFQ0JDMEJBOUY1ODI2NDEyOTRCMThEN0IxMjg1RTkyOTBDNTU3NjRDQTBFNzE2N0IwNUEsIDQyNDhCNDJDOEI2RkY1NUFDNDBBNTAxOTFEODYxMjkzNzVDN0E2QzM1OTVFRTYyQTEyRjc0MTkyQzlBNDMxRUUxQkUxMzQxRDgyNENDMzFBRjEwMzcwRDhEQjM1OEJFRAorMkIzRkIsIEE5RUIwMDQxQUMwRUI1ODI1QjA0QjgxQjM0RDI0MDJFMUYxNDYzOEI2MkY0QkFBNUU5RTNGNDczMjBBRTcyNEY3MjU3Mzg3QkM0NzBBMEI3N0UxRjk4NTUxNTUwMThENiwgNzA3NDAwRkE0N0M4N0M2OTZBQjYxQTYxMEQ2OEEzNDQ4MkVGM0ZGMzJEMkQ5NTRFMzU0M0YyN0MyQTlGMDRCMjYxREQ1MzIxOUUxNEY2MUI0RDVGOUNGOUNCRDQyNjBGCis4MUJGMSwgREI3MENCNjlBRkMyQzlCQjBFRTY0N0JFQkVFNEY5MDhGNDNFMDQ4MDBCODY4NTcyNkUxQkJCRDE5QUYzNkI5Q0E0N0QxRjQ2MDkyM0EwMENFNTRFOUYwM0E0NjJCNEQ3LCA3RkJCOEJFQ0JCMzNBQzkyMUIzQzU4REM2MkVENEUzMzlCMUE3MTVENUEyNDEzN0I1REE2QzQ4RDgxMjNERDVBOTFEM0E0RkNCRjhFMUM4REM0RkQ4MEY3NTQxMjAyRDIKKzE4NTNEMywgNUI1MTNCQ0MyMTBGRUREQUJGQUMzNjhDQTg3NkY5MTgwOEZGOEQwODJERkIzREM2REFCNDk0Nzk3QTU0N0YyNjQzQkMxQzNEMDU3NzBFMEYzOUYwOEExQzUyNTk5QkVDLCBGNkQyQTQ3MDk2MUFGQkEwNEQ5NEU5NkE0REIxREQ0MTNEREJGQTA0NDlDMTZBNzJFQjk1RDM5Q0FCQTQ3QTNDQjRGRjkwQTdDODA4NUNFN0NEQTM1NjREMEREOTcxQ0IKKzQ4RkI3OSwgMkFFRTE0MDdEMDdENEI4MTAxQTg2MDYxNDg2QjE5RDkzOTlDRTI4MzQ1QTE5OTJBN0NCOUVBQzQzRjNBMTM5NDFDQUU3OTJFMzQwMjg2N0IwODBCQzUwNTREMjU5RjZBLCA4MzgzRUU0QTk5ODRFMENDM0Y1MUNCMUJERUU2QkJBM0ExNEU1MDNEMDlFRjM2RkJBODNCREU3OUExN0JCQkQ5NjYzQ0U4QUE0Q0I3NzhDOEY4MjUyQjMwOTc5MEIxMjAKK0RBRjI2QiwgNkU2NDBDRDA0RTFBQzJBNzk1Nzk4N0QyRkM4NUVBNzY4ODYyNUNBRkZCRkI1ODc3NzBGMjZFMUE0NEM2ODJBMEQ5NDdCRTdCRTQ4NTIzMzAwNkFFNTlFRDEyQjI1NjI1LCAxQ0UxREQ0RjU3NTJGODAyRDI2NEE2OEY1MTM3Q0M1RjBDNzZGMjQwMDdBRENENkMyNTg1RjMzQTIxQkY0RkVBRTBDOEU0NTBBNkZCNzlBMEIwOTE2NzRCRDIyQkI2NjgKKzI5MEQ3NDEsIDlGQkYyQ0JGNzRFRjI0NEQ3MzM2NzZEMDUxRDAzMTRCRUFDRTU3MjA3RTAyQTUzQkFENUJGNzc3RDk5RUJGM0IyMTc3MDU3OTBFRTE3Q0M0MUVDMDk4MDlFNjRGNkEyNywgQ0NCMEEzMzZDRjVCNDJCQzE4MUVBMzM0NzZDQzRGMzQ4NzEwQ0JFREU2OTBCMzlDNTc4MTE1RDFFMDg1Q0ZGNUU1MUVGOTU2MzRDMjNBNzEyMjY1NjNGQTgwRTU1QUY3Cis3QjI4NUMzLCA5RDk0RDA5OTlEMDU5QTZFMjk0REFFRjU2Rjc1ODA5RDgyNEU4QUQ5MTAyNkJGMDBDNzkyOTUzMzMwQjU5OTdCNTE4NDhFQ0E4NTNGNTk2OUZFRjEyQkI4NzdBN0VDOEMsIDQ2QzYxQzlDNTg4RDU4MTRCNzg5NjQzRDk0NTI3N0Q2RTc4MDE4NzdBMDlCMkVBNzI2NTY3RjExQjJEQjdBMDY1MjZGQkVGMzY1QjZGQkZCNEQ1NjQ5NzgxNEJGRDk3QQorMTcxNzkxNDksIEU2QTlGNjZBNzU1Mzc1RkVERkU5RUY1N0RCQjYzQTc4NEQ1NDFCQTZCQ0I2RkVEMjdGRTRENEI1NjA1RTVBNkY4M0FGQTcxRUMxNDM2MDkxQjhCNjRFMkZDQzI3RjVBNywgOUU1QkJDMTYwODU0MjIzQjc0Q0YxRTBFMjZDN0FCMzA0QTNCQTNFNjM5MkMxRjc0RUExQkE4QzU1NjgwMTcxQjAxRDI3OEVFRjc0Q0IzQjREN0YzOTBDODYwMDVDMjFCCis0NTQ2QjNEQiwgRjgwNkIxNEZBNzFCODhEMEY2QThCNTRFMzcwOEU0NTA0MEE4NTk5OUE3MEMxM0Q0MEUwNjk5MEYzNjMwNzkzQTE0MUZDNTE3RTk1Q0QwMDIxRUExNjIxQzk1MUE0QTJELCA3Mjg3MEZFOEJFMjRCNUY3NDkzMjJGOTE5N0FFMDNERkYxRTQ2ODlBQUFERjc4QkJENERGMTY0MjFENUQ1OUUyQUYyQTVCNDk5QjdBMTkxOUVBMzExMDUzRTZFQjgxM0UKK0NGRDQxQjkxLCAxMzlFRTBFMkREODEzRkU3MjE2OEU4ODc2RTE0QTAzRUYzMUY0QzNGQkZDMDE1OTU3MzNCODA5QTdDMUI4Q0ZFNjAxNDYyNjYyMkJGRTJGNjc0MUU3N0IyNzEyMzgxNUYsIDNEMkY3NTcwQ0NFQ0YwOEQ3RUQ4NDUxQUZBRjdBMDZEOTRCQTY1NTQ1QTIwQjhFRDYyNDhCMjQ5ODhCNzI0RjIzNDk2MkRCMDVFMkE2Mzk0RDM0NEZGNjRDNzcyQjlCNgorMjZGN0M1MkIzLCAxM0JBQzU0MzBEREUxNENEQkEzMzFBODIxNThEM0E0NUQyQ0YwOUQzMENCRDk1MEYzNjA2MTAzQkRFRTE5NTE3OUFCQkZDRjNCQTU4QjY2NEE1Qzk3MTU2QUJGRTMzNzQsIDc0QTAwREJGMEM2RTQ0NzAzMTI2OUIwNDExMjFEN0M5MjgxNzk5MzdFQjkwN0ZBRDUwREQ0QTlGMTI4RkY0NjJCQkUzMDIxQjAxRjlERTlDNzEyNDI1QkM3NTA4QzBGMQorNzRFNzRGODE5LCA4OTU5QTRENzI2MTNDQzAyMUQ2OTFCOERGQjg4N0MyMjg3MEMwMTM1NEE2QjBDMTg1Q0JCNTM1OTQ1QTE5QUI1QUU0NzZBNTg2MDVBNDhBMjU2OEYzQTE0ODlCOTgyN0EsIEU0OUFDN0M5MzI4NzQyMjVBOTRBMzAyMENDOUU4MzQxNUU5RjJGQ0Y3N0EyRDcwQ0Y2QkZDRDJGODkwRDI3MTlEQjRFM0ZEODE2Qzc2RDREM0YzRjEwNEFDNzZDMDM1MworMTVFQjVFRTg0QiwgQjU0MTI1Q0ExQTVDRTQ3RUQwOUFCOTk4NzI4MDRGQTgxNDlFNUIxMUZDNjVBQjM0Q0QyQjMwREYwMzk2NUQxNDdDRDM5NDcxQzJBNTk1NDlBOTVENkREODUwNjY2RDNBLCAyQkU4MkQwOEEwQ0YyRkQyOENCQkI5MzczQzQwQTU4NzRGOEExNTU2NTBFODYwQTBCMzFEMTlGODFCOTQ1NTBCMDY1QjQwNTI0NUUwQTNBNjgzRTM1QjI1MjE0QzYwOUMKKzQxQzIxQ0I4RTEsIDlFNjM5RTI5MDYxNEVFNzlDRUMzOTBBMDEzQTQwOTAzMThGQ0Y1NzQ0QUZBRDkxQTMzNjM0REI0QkY1RTM2QjQ4OEZDNzVFMjFFQTVGQzIzMjE3REMzRkEzRTAwNkQ2OSwgMkUxOTIyNTlCMzE2QTRFRkYwNTkyNUNDMkQ1OTU3MUEwMTk3RTlENkUwNkIwMjE1RTE1RTNGM0Y0REM0RTY3QTlEODk2RkQyNUEyNTY5MDdBMzQxNTZCNzJDRDlCRkNECitDNTQ2NTYyQUEzLCAzNThDRTc5RjYzODdBRTgwNEM2RUFCQzY3ODBDRkRDRDFBRUVCODM2QjhGOTQ3OTlDQzU3MzlCODk1RDYwMzk0MEM1Mjg1MDA2MjgyNEMzNUJCOEEyQjE5OURDNEI2MTcsIDZEN0VGOTdGQUM3OUY3OTZGQTc3MDRGMDdGRTY4MkFBQzI4RUI5Q0JDRkFBMkRFNEZCRkY0N0M3MTY3M0JEREFFNTYzMTY5NDBEREU1OEI0MEI4QjdBN0QwQTVCODZCNQorMjRGRDMwMjdGRTksIDQyM0NBRUZBMTdENEUwOTIyNjBBN0JCM0UyREE1NUQyREZCMkUxMjkzOEJBOTUwRTBFNkU0QkQ0RkU4QjBBRDQ4QjBBMDVERTAwOURGNEI1QUZDRTFDMjg2ODQxOEE5MSwgNjlCMkREMDUwQTc3Q0M0RDIwNDQ5MkVFRjlEOTI5Q0E3ODI4QjNBMzIyODI3MzMzRjM3RTgyQTBFNzZEMzQ0NzBBQjMzMkM5ODE5OTVCRjE0OTVBQzk5NzcyNDYzNERFCis2RUY3OTA3N0ZCQiwgNjE4RkE5OUVGQkY0QTZEQkFEREJFOUExQjBFREYzNEY1Q0ZCOTNGRTU1OTFFM0IyMEI1NDg4RUNDNDhDNzlDN0Y4NDMxMTc1Rjg3RjEyMjlCODdGQjJGMjExMzI4QjA0LCA0OERGMkQzMUNCNDYyNUVBN0ZBMTk4RjQxNDJDNkVDQzcwRUFGMjE1QjhGNTRCNUNERkYwOTg4NDk5NTU5RDJBQzExNTRCOUQ5MTUyQTgzQzQ2MkU0MTI5MUIxMjFBOTMKKzE0Q0U2QjE2N0YzMSwgMzRERUUxRDI3MDYwNkNDOUI0OEYzMTUxRjhEMzQ5MEMzN0UzMzlBOTEzM0Q0Nzc0NkQyOTAxREFGRkU1RDZDNUY4RkIyMDVCNjY4MTJCMTc3QkU0Mzg1NUQyQ0Y0N0JELCBBMjBENUZERUNDQjhEQjM5NkI5NTc0RUJEOEIwNUE3MzYwQkQwMUM0N0ZDNzk0NEI0NjYyN0IwOUE0OTkwNDk0QkUyRkFGMTU5MzhEODNGRjRGMDAzOERGNjEzNDhCMTMKKzNFNkI0MTQzN0Q5MywgN0VDRDBBMjIxMjA1RDNCRTAwNjlBQjNDNUNBMDNDOTY3RTlGMjdBQURFQTJBNTJDOEEwMjEzQ0NCOEM3QTIwQUMyOTlFQTVBRTI2OEMzRjVGNzc2M0Y1QjZGMkJEREFCLCBBNEFDRTQ2RDAyQkQ5QzYzREZERTgyN0MyMTNENzEyQUI4RjAxQThBQzAwMDk5NURDMzkwMDZBNjBFMENDRDIzM0Y4Q0YwNjlCQTk2MjA3MzFGRjZGQzc3MTc1RERBOQorQkI0MUMzQ0E3OEI5LCBGREVEOEQzQ0IzNTFFMjU0RDFFMDcyNkQ2QzM0RDdCNEE2NjQ2Rjk3NzhDMDA4QkQwQ0MwOTRCODAzREExQTk4NUJFMDM5Q0ZCNDM4MzI2QjdFRUY3QzU1QzRCMjNERjUsIEZBMDIzQTMyRjIwRTIxN0ZERTM3NkY0Qzc3NUM2QTQxMTIxQzc3Qjc5RDVFNjUyRjhEQjcxRTc1NjRCMEQ2QjhERjgzRUVERkEyNDY0ODdFOTREQzUzQ0M0MDg5RjBENQorMjMxQzU0QjVGNkEyQiwgRDE3RTlDOTc5MkQ5RDJFNDM4NTM2NDMzQzY3NkVGREY2QkExNDgwQUNCNTI1QTEyOTQ3QkU3Qjc1NzVCODczOTQ4QUJDMzRBMDE0QTRFMDlCQkM3QkM3NjZGRjFCNzg1LCA2MDQxNkZCQ0JGQUI4NUUzOTM5NzIyMTZCMjY3NUJCRTI1RDA1MEYyQUU0Q0NBMTVGQ0EwRTlGMjgwM0YxQzg3M0JFNjY4OTVDM0YzQkU5MkQwMzdGRkIwOTcyQTdCM0UKKzY5NTRGRTIxRTNFODEsIDUyMDBGQzhCNEJERjQyMkIwMTgzQ0IwQTREQUJFOTc4ODQ3OTgzNzcyODkzMzM3RkU4MjdBMDJBMjc5MUJCRDcyMEE2QzhGRDQ2Q0FCRkQzMjI1MEM2NEI1RDY3REYyOSwgN0I0N0VCRTJGOUUyMDg0MkU1MTJEMzUzRTVDRjJDQkZCODAyNTY3QTZDODA1RURCRjE4NTZBOUI0NkQwOTcxRkU1QTI0OTRFQzUxNzUxNTE4RjlGQjFFRTAzNkU2MkRDCisxM0JGRUZBNjVBQkI4MywgNzk2MDkyMTAxMTA2Mzc4ODNCMkJCNENCMDE3RkQ1MzFGMkY4NURBMzNDNzVBMEJDM0ZFRDMzQjg4NUIzMUQ2ODRCNzZEQUUyMDdBNkNEQUE5MTM3MDQ1NUZCMzY4MTQsIEY0RkZFQUYxOEMxOTZFOTRDREMxQkJEMDlGRjUyRUQ5NTdGNDMzRjIzQkVCMzc1MTAwM0UyQzNGREYwMzdGOUY4REFENDNEREM5NTYyMjBEQTVENjlCMEQ0N0VFMTUzNAorM0IzRkNFRjMxMDMyODksIDhENkY4NTMzQzM4MEE1Q0U2QjA3Rjg2MDY0NDA4Nzc4OEYwNkU2NTEzNUNENThENDRGRUQ5MjI4MkE0NUVCOTk3OTNDRkYwMzc5RjgxRkFEQzJFRUZGNUI5RkZDNEM1RSwgMUI1MzAyRkQxODZFMkM4RTU3QTg2OTQ3MEY1NDJDNEI2MzNFNDhBMDI2OTMzRDk1RTYyMDI0NTUyNjJBQUVCODAxNURBODU3NDg2RDJEMkQxQjQ1RkYwN0FFMzA4MjhBCitCMUJGNkNEOTMwOTc5QiwgRTFDMjU1M0Y3NDJDRkYyODNENjA4RTIyNkM1RTc2MkVGODhEQUZENzVBNkQ2OERENzlBNkU5NEVCMDk0RDREMDRBNDBDOEI0QkI4MEI1RjQ5OTlDM0E0NDE1MURBMTlDLCA5NzRFQTRBQkU4OTU1Q0VBNzE1RjA0NDEwNzBCQkNCQjA0RUNENjg2QzUwRUZCNDRCMDdFODMwRTU3NjU5Mjg0OTVEMDYzNUFDOEFGMENDQzgyOUU3REVEREJEMTY5OEUKKzIxNTNFNDY4QjkxQzZEMSwgMTA4MjFGMUQ5QUQyRjFDMDk5MjlEMDhGMjI5MkI1ODE1NkU5NEMwQzcyOURGNThCRjNBRjkyOUU3OUNFMDExRDNCQ0ExMTZGRDQ3QjIxREI5RjA0M0MxN0UyMDUyMUUwLCBCNjAzMkQzNDlCNDlERkEyQzk3RUVBMTBBNjA1QTA5N0I1MTU4MkQ2NTNEMEJGMjk3Q0IzODVFMEVCQTJEQzk4MkNBN0U5MTM1QTAxOTYwMzFFRTA3MDBDOERDQzNERUIKKzYzRkJBRDNBMkI1NTQ3MywgMUJCRDVDNTVDQ0UxOUNDQjBBRDMwREQ3NDA1RjVFOTFFMkQyRjUxREVCMDlFRDk3NEFFMDlFRjc2NjZBOEM3NDYxNkQ3Nzc5RkM1QkE3NEU3NkYzOUZFNEFBQkVGMDg5LCBDODI3QURBRkQ0ODE5MkIyQjk5NUZDODM3ODEyMkJEOEEzNjAyOThDNzlCMzY2NDNEQkFENDlCRUQ4NDUzNzExQUUxNkRFNkExQjE0NjQ0M0MxOUJCNTlFNDM5QjE0QTYKKzEyQkYzMDdBRTgxRkZENTksIDQwMzVFMTNFRjg5OEExMkVGMTVFNzJDQjc5REY4MzQ5NkQ1QjNDQjVBMEJCQkQ2ODAwMTkzQ0NEQUJGQjIwNzk0Mjk3NTI5RjM0RjkzNUYxRDgwREZDNjlCMzE0NDc5NSwgRjJFODU0MzUxNTA2QTFDMTVDRDJFMkU2REE3RUNGRDEwQTBBQzE2REIyRkE5MzdBMDNBQzZDMEI4NzRCRTM0QTI0Mzg5MDZGRDNGMjJGNUU1MENCNTJEMkU4NEQ1Njc1CiszODNEOTE3MEI4NUZGODBCLCAyQUE0QjgxOUFDNTczN0Q4OTk0ODYzNEU4QTkyOTY4QjBBOUU3MENCQjQ3RUI2N0FEMDhGMTRCOEE1OUM5NzhDOTQ0RkNGNTAzOUQ0MDMyQjQxQzhCQTI0QTZCMDgwNjksIDMzMzJCMTdBNEY2NkEwMThCNzM5OEY3OTNENTQzOEM0OEVGODhGOUE4QjQzOTgwMEI0QTNBMzhFNDgzNzI3ODcxNjgzMjg2MTc5NDk0REQ0Qzg0MTMwREI2M0I5OEQ2MgorQThCOEI0NTIyOTFGRTgyMSwgNTUxQUZDNTg1RTQ2Q0RENTAyNEFFODBCRUI3NUIwNzlCNDM1RjkwRkFBQkJFQkNDMEE3NjE1OTM4QTgzRkFBQzNCNTFDNDJCMjk1QjhCRDc0NzJBRTlFNDI3OEI1MDcyLCA1RUVDOEM1QzFBRUNCNUQ0MzI5NzM4OTQyRDQwMDQ2NTRBQzM3NUU0ODYxMDhGRUIyNEZCRjJBQUQ1RkQ0NTdCRDMyRjY1NjMyODFBMzRCNjcwRDEwMEYxOTZFNTYzQzMKKzFGQTJBMUNGNjdCNUZCODYzLCAxOUU4OUM0RTQ3RUVCODk3MDU3M0MwNTkzMUQ0M0I4MDgzRDg1MDQ5NDY0NUNENkM0QjM3OEIzQzkwQ0E4MDE1RUI5QjIyQzc5Qzg4NzZCM0FCNzgxNURDMUM5Qzk2MjAsIEU5N0I0RjFDMjIyRjEwNjEwRjZEREZCNUQxOEQzRkMxOTkzMzY3RTJFQkEzMkI5NDM5MDU3M0U4OUQ0M0ExNjU4QUU3OTg1MjNBMTE0RTZBRDU4QTU2Q0U1QUJCQUU2RQorNUVFN0U1NkUzNzIxRjI5MjksIDNBQTc3MTE3MDBFQkE1NjVFOTBCMjVCQzBBMUVEOTIzOTVEOTJEOURCOEZFMDZBNTRFNDU1RjlGQzlDMDMxMTg4MkM0NzBFNTE5QjJBQjI3NDhBM0VBOEVENTkzNEJGOSwgQ0EwRUVGMjdCN0ZBNjIxODkzQjE1NTMyMEE4Q0ZDQzdCQUIyQzRDMDU2NzUyM0EzNEIzRkQxN0Y4NDMyMjYwMjJFNUQ4NzAyNURENEY4N0IxRjZDQTQzNzZCQkZBRkRECisxMUNCN0IwNEFBNTY1RDdCN0IsIDJCRDg5NURGQ0JCRDg1OTUwRkZFNjc1QkQ2Q0MyOTg5NjNCOTlEQjkwOUY2MjdBNUIyQjA4QkU0ODFEODZGQ0M5NjQwODIzOTY0RTI0MTM4MDg2MjU1MTFFM0Y4REZBQiwgNTE2MUNDQUQ0QTc5NjhCNjg1RUQzQ0QzODBGOUJCMzkxQkM1OUQ5REUwOEY0QzQ2N0YwQjY1RjcwREQ3N0EzNjdFREUyQjY2NTUxMzMwRTVGQzg4OThFMTQ0NkUzOUIyCiszNTYyNzEwREZGMDMxODcyNzEsIDRBNTUzNzFFMDk3MDBEN0YxQjk1NDc0MTRENkIzRTQwNzFGNDI2QTMwRjE1ODA2OTA0OTZGN0RBMDZFQTkyOTBEM0EyRjY4RURGNjRCRDc1MTQ1QUM4RDYwRTEyNEVDQSwgREFFNzNGMzlCRkJEM0YyQTlGM0FEMjQ3RUU5NEZEMjVBRDlFODkxQTA3OUYyQUUxOTE2MjU2MzJEOUQ1MTFERDc3N0ZDMzJFMkFFOTMwQzVBNUI2MzM3Mzg1NjE4QUIxCitBMDI3NTMyOUZEMDk0OTU3NTMsIDZCNDVBOTNGNEJGQzlGOTAzQjYzODBDOEUxQkYyM0QzMzBGRjY2OTc4MDMxQjJCQzJCQTJGOUYxMTJFMDRDMjQyQjdFMURCNzNDN0IyOEJDMUZGMTJBMTk5OTI0OTIyOSwgOTQ2NjdBQTAzODE1MjUyMEYxQzhDRkVENjREOEM2NUY2MEIyQTY4RjFCNUY5NjE2QTY2NTZGQzVFOTFGMzQ0N0EzNUY2ODQxODdERTY1MUM1MTdBNEFBODY3OUIyQzhBCisxRTA3NUY5N0RGNzFCREMwNUY5LCA3RjBGNTRDMUU0RkI0Mjc1NTZEQTQ1ODFGNDgwMTNGM0EyQ0U0NkJCRUQ2NkU4NzJDMjg3MTIwRjcyMzgxOEI5Q0Q2ODE2REVDQUE2RTIxNUQ2MjlBQzAxQkI1QzIwNzgsIDQ3MDEyMUE3RTM0QjM5MjEyMTA3QkE0NzNCN0RDMTMyRTJGQTMyMzlERkYzQzkyODdEQTZBRjFBRjQ2NTkxRjAxNUJEOTYyRkYwRjhDNjZEQkY1NURERDAyNTc5RUQwRAorNUExNjFFQzc5RTU1Mzk0MTFFQiwgQzdFODU5MTdCNjUyNTBBQzg0M0ZBNUZEQTgwOEYwMUNBQUJEMjc2REUwM0E0NkY1NENFOTJDMTdFRDYwMTlEMzUzRkVFOEJERUFGQjY0NkVBNkI2NDVFMTZEODIyMDM5LCA2RDM4RkIxMDI1MjQyNkMyNEQ3NzM2N0Y2RUQ2Q0Q2OEMxQ0IzRUZBRTBFRjIzQTI5QjhGRkY1MDcyQzMyMTk5RDcxREFFMTIwNEVGMzBBQTg0MDVDMjQyOEMwOTNBNEUKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCAzNkE4QjM3MDk1N0RCMUY4NzVBNkQ5MTZEODQ2MDhCMUQ0OTAyMTgzNTE4QjJFMkEzNDA5OTYxRTg1MkRDNDIyNzY5QTdDNkQ4NzE5OTZGQUEwRDY4QTg3RDczODI0RTEsIDdDMEI1NkIwMjlDQ0REOUQxMDZFODhBOENDNEE1Mzg0Njk3RUI5QTVENjYwNDFGNDM4NzUzRkMwNzI0RkM4QzMyQUIyMDAxNTMxQUIzN0JEREFGQTJGNjY2QTdBOEY1NworMzJBQzcxNTA0OTBGRjAzNEExNDMsIDY1RTgzMjRDOENBRjA1QkFDNjgzMTVFMUZBM0JBRUFBNEQ3RDA3QjQyQTBGMzQxOTYwRDM4ODFEODhBRDExRDM4MjNDREMwNjcxNzk0N0JGQkM0N0NGNzdFRjAyQTI4OCwgMjM2QTA1RUEwQ0ZFNzFCNUQyRTZBQjIxMjI4MUVFMzUxRTM4MDE1MDczM0Y1MkZERjQwOTdEMjU1OTk0RkY5RDVFNTgxN0IxMTRDMUQ3RTI1OUZCNDVENjE2NzVERUVGCis5ODA1NTNGMERCMkZEMDlERTNDOSwgQTdCOTI4NDYxNDY0QzFBOTg3M0EwQkRENkQ0OEI3RUJDRTkzM0ZFQTFGNDU1QjIxQjUyMjVCM0QxMTE3QTVFNzdFRkJCQUY2MEVERkNBQTUxQkRFMzRFMDY5QjUzOUQ3LCBCNEJGMzUyM0MwNkIxQTcxRDIyMTcyNTlGMzkwNTZCRTI4QzM0RjA4NjJEQzM3NjYzOTU0MTExNDU4RDhEQURBRTVDQkUxNDZERjFBOTAzM0IxNzNGQ0Y1QjJDN0YxNDcKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgODdCMjhCNDU1NUFFRTdDNTc5MThGREM2QjQxNjA5OEQzMEM5RjM4MDIyOEI2MjI3QUY5QUU3MkNGOTg1NTBDQ0Q1QjRBNTU2NkNFRTZGRkVDRDlCOEIwRTAyNEVEOEY4LCA3MEU1RDEzRkQxMUYwRkI1QkVGNkZGRjg0ODY0QjJDN0E1MEI1NkI1QzI1RkJGODExNjczMDExQ0M5ODUzMUIxNUYzMzE4QUI5Mjg3QzY5OTlERjA3NDIyQUZEMUQ4OTgKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgOUI3REQzOUE2REVBMzkyQzA5NzFCMjMwM0NERkYwRjU5NUI2RDlDNkY3QkEyMjc4RkM2QjFBMjkyNDU1MTk5Q0QzOENDREI3NUM2MzU5QzdGOUZBNjM3NzM1RTI5NEYyLCA0Q0JGRTA3NEM1MjkxNzdDRUU3OUEzODg5QzI5MDZGNTFDQjQyMERFQUIyNEQxQTIyOTVEMTRCQUQyQ0UxRTYzNTc4RjhFMzYzMjY2MTIyQTU1NTNCMDk1RjI1N0MzQ0MKKzEwMDg4RkRBNjcxRTBCMDBBNzA2MzMsIDhFREU3MUM4MDAwN0NCOEM0MDY2Qzc1OTNDMzEzOURGQ0NFRDdGRTQyQjNGNjRBMUY2Q0QxMERCQUJCRDFFNzA0NTU3OUY3NDZFMkY4QzhFQ0Q4M0I3RjM4QTAwNTlENSwgQkI3OUY4ODIyRUFDRkEzMjg0MzIyMDk0MjJBNTExRkZFNEM0QzFBRkM4RTAyQTgyNkI0RjE2M0Q4ODZCNTg1NDFCRTY0N0ZFOUIzQzc4QTg5MDY5MjlFOEQ3NkJEOTY2CiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCBFNDlBREJDN0ZDNjFBNDlGRjFGNDJDRjgwQjk4MDMzNUE4OTJGNkNGMTk2ODU0QTIxRDdDMDIxODIxQzc2MDc5N0M3MTVFN0RFMUU5ODVFQkE5MkEyRDJBNkRDRkRDNjgsIDExN0I1QTNCRTkxMDMyNUJFRTk4NDhBOUNENEI4MEEwNEEzRDdFOTY1RDI1QjAyOTBDNzU4NjUzNkYyRUJGNjA5NTIwQTNEMjk0Rjc1RDZGRTQwMzNFQURDMzA2NkZCNgorOTA0RDBFQURBMDBFNjMwNURGMzdDQiwgM0Y3RDk3QzYxNTExMzU0QjcwMTJGQUFBN0Q5NkNBMjQ4RDIxODcxMkJBRDYwOUY4QzhCQjU4MkE0MzkwQTZGRkVDNEQ4NEU3QkM4QzUyNzVEMzY4OTI4MEVCM0I4RjNDLCBDNTM4NTU0MDhBMEE2NkRDMDJGRDA1MzE1Q0JCODk2RTRDMjY3RkY4NjkyN0ZGNjBBMzhGQ0Q2RTgwNTI4NTg5MEYyQzdBNjNCQUFGODVBNzZCMjIwRUUzNjM4NTVDRTEKKzFCMEU3MkMwOEUwMkIyOTExOURBNzYxLCAzRDQ3RjhERjE2MjA5Nzc3RkVEQzZFMjc1Qzg2MEQ0RDlBNTZFOENEMzQ0NDYzN0MwQ0EwQ0Q4NUQyRTYxNzg4ODBBOTYyQjhFNDBERkQwRENCMTQ5REM2QUE5Mzc4N0EsIEE1RDM5QjU0OEJBMzkxQURCNDVFRjA1QzM2NDg4ODkwRDcwNUFDMUZDQUI3MTk4N0VEQzI4MDJCRTZCRTkwQTczMTU5OEEzODI0ODJCM0JDOTZBQ0NENkY2RUM1OUM4NQorNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIEMzMjI2MjlCNjA2QjQwN0M4RjFDNUY2MDRBQUVBQTQyM0JBNjNGNjFBRTlCRTc4QTJCODlCNDdBRDg5MzFDMjEyRjVDQTBBOTVDMUNCMzIwQTZCMUJEOEFERjEzOTI1NSwgQzZDQjQ3NkVGNDE1MTIxMEMzQjI1MTk4MkU3NjBFMTNFNEU1QzE0NDFBODI4M0M2RjA4NDA2QkI4NENCQ0M0RUZBRDgwQTNDNjRGOTA0M0YzMTE5M0RGNTMyNEREODJFCitGMzgyMDhDNEZFMTg0NzE5RThBRTI2OSwgM0U1Mzg0MjBDM0M3NjQ2NkU2OTFCNjI0N0IwQkUzOERBRjQ3OThCODFGRDU1QzcwOUM3QzYxOUQ0QjE1RDYwRjg4M0U0OEQwOEZBNkMwNTNBMjRGQzA2RTg0M0MzNzgzLCA1QTY0NjJCMTg5NEMwQ0Y5OEQxMTE2ODVFQzI3NkU1RkExQUExQjk0MTdBNzM5RkVFMjcxNjY4NzY2QUZBNUZBQTJCNUI5OEVBNjNBNTg0OEM4NThDQTQ4N0E5REI4MzcKKzJEQTg2MUE0RUZBNDhENTREQkEwQTczQiwgMjkwQjdENjcxOTBCNjRCMTc1NTIxMzkyQjMxMDMzNkYzQjUxRUVENEU4MkNBRTI2QkRFOTExMUQ0MEQ1QTQyNUI4Q0Q3QzQ5MkIzQjQyODY1M0Q0NDI4RjIxQUVBMzIsIEZDMkNDQUU0RkUyMEYxNUE2NTlCNkYwNzk1MkQ3QzIzREQzNkU3NzE1MTFEREFCMzQ2RUZEMDI3MTNGNzhGNjg4MjdCNzI5NkNENkVDOEJCOThGOUU1MzYyOUY5NjdDOAorODhGOTI0RUVDRUVEQTdGRTkyRTFGNUIxLCA0Njk1OTlGM0QxRDcyODU1NjREMkQxOUU5RkIyMEUzNzQ2NjFCOTU5NTlGODc0OTdGNkREMzAxOURBN0QxMjNBN0EyNzk0Rjk3RjYxNDcxRkQ0MzVDNDc4Qzc4NzFFNTIsIEQ2QkNDNkQ5OUUzRjQ0OEU3RjY3ODZGRUM3MjFFODQwODE2OENDM0E0OUJGM0E1RDEyRDYzNTg1MERBQzQyNEY4QUQ2Q0Q3OTA4MjkyQUE3Q0IxMTg0MUI2ODNBNzg0RQorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgRDg0ODZDNUUyMTI2QjFDMEM3NDVGMzhBQTlBN0MyQ0FCOENEQzYyNjc3REI5OTNDOTE3OUUzRTcyOTk2Q0RFMzNDNzczRDRGOTBEREVCNkJEMTA5RUM5RDI5NUIzNzU0LCAxODBDQUEyRUM4N0VBQ0ExNEQ5M0U1QThCNDI0MDkwQTc2REQ3RTlFNTMyOTkwMTA4NDhBNzcxQjRFNTY1QUREMjk3NTI3MTlENUQ2OTkzMEFFOERBNDY2MkE3MTMzQzUKKzREMEMyNEM2NTQ2NUFFN0YzMjlGMUEzMzksIDJGMTc2NzE3NkMyRTU4RTBGMDhCNEE1MUY1MDBGMjAzNkVGNEQwMEUxNjM1MDRBMkVBQTc1QTM3NEIyOTk5RjA0ODYxNzNBMjJCQzRCRkEyMTMxQzExNTkwRUE5NzQ5LCAyOTNBMzIxMjIzREQ3RUVERTRCMUZENkM1Q0FENTFGREVDN0UxMUYxOUJDRjNCQ0QxNUNBNDNEQkMxODQ5NDRDQjM4MkQ1MEU0MzVBRjNBN0RGMDY5RTY5MEZBRTZBODUKK0U3MjQ2RTUyRkQzMTBCN0Q5N0RENEU5QUIsIDM5QzFEQjA0NDI5NDQ1MkZGM0FGQTJFQ0UzQTJBNUUxNkQxQTIzOUMwQjYzQTIyQTUyMzg2Q0I0NTQ2REQ4NzU5OURDREQ5ODk0Qjk1QTlEMTdEMEYxNTQyMkE2NDI0NCwgRkFERURBRjZFNTIyNEZFQzA4RTNBMkIzMjk0OTE2RkZBMTc4RjEyOTg0QzNFNzc3RTFGQkZBNTcxRTg1OEY3QjI4QUZEQkNDMEUyNEJGQTdDRjg0MzUyNzkwQkJDOTQyCisyQjU2RDRBRjhGNzkzMjI3OEM3OTdFQkQwMSwgOUEyM0YxMzQyNTYxOTlCNjkyMkRFOEJGNjNBMzM0RDQ4RDEzODIzREQ0NDdFNTA1MzczRDVBRkRFNEZDRDM5MzI5QjVEMURGMEEzM0IwMDY1Qjc2OUEyNzhBMDdFNTI1LCA4OEVDMjVEOEEyRTMzQjUxRThDQTE3RDY4NUZEOUQ0OEM4MkU0MjBGMUI5QUNBOUU3ODlDRjVCQUU5NUJBODU3OUY3RDI4ODRDMEI2MUE0MDBCNjlFNzVGNkNDODk3MkYKKzgyMDQ3RTBFQUU2Qjk2NzZBNTZDN0MzNzAzLCA1RERGM0FGQjVENjQ1M0FGQjkwRDdGQkJGM0Y3M0VFOUMxNTQ0M0E4MkUxMUE2RTcxOUY0NUI3NjRFMERBRkVGRUVFMTFGMUFDRkUxODhGNzVBQTI3NzIxNEU1ODBGMTMsIDIyMEI2NDAxQ0NBNDk0QzRFOTNFNDc4REI0Nzg4QzAxNzMwMzZBQTk5RUZBOUJBNDQwNUYyRjgyQjExMEQ2OEYyNEZFNzcxMDc4NjYxRkFGNEZGNENFODdEQkI1MEEzMQorMTg2MEQ3QTJDMEI0MkMzNjNGMDQ1NzRBNTA5LCBCMzJGNjdGMTU1NTk2Mzk0Mzg1OEJBMEFDNzNDMkI0RkMyQkEyRjU0NjgxQjkyM0VBQzVCMTI5RTgzMkJBOUFEMjUwMjhDOERGREIyNTA2MDZFOTM3Mjc3QTNBODVCMUQsIEIwRjM5ODk1QzgxRkE4MjM0NjVFOURCMzAwOERBRTlEQjRFN0ZBMDZCMzFDNjE1MzlDRjIzNDI5RjlDRDU4RkQyOTZBRjY3NjFEOEIyNTg2NDNDNzc5QjkzMkE5QTY3QworNDkyMjg2RTg0MjFDODRBMkJEMEQwNURFRjFCLCBDRjEzNzAxMzY4RTBCNjYwNDVDRkM0MUQ0NUUxOTdBNjc1RjRCNEM0QzVENDFCRjZDQ0ZDOTA4QzM4MjZDNkMyMjc3QjY4QjUyOTk1RjlCRTg2MEVCQzI5M0E1OUE1NkIsIDZEMDE4RUExNzVENjAzRTkyNEIxMERFRDgwMjgzNkRDRTlGMEE0NEVCMzYwOTRGRDFDQUE3OUIwMzAxNTU2QjhGQjYyREQ4ODg2RDVCMjIxNEY1QkNBNjczMTQ3N0FGMworREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCBGNTVGRjFDNzg3QTgyRTZEQTc4MTg3QzUzMTAwQjMxODZFOTZEQTM5QzdGQkZEN0VBMDY5QjI4RTFEMEIyQTFDNjdBM0E5M0EwRDVDNzkzOTBDRDFFMkM5RTAzRkRCM0YsIDU0MUY1QkE2RDg1NkI5QzlCQTMyNUY3RjBFNjBGQzIzRTNDRkVFQTBENUMxMzE2MDc0QURFMTA1ODZBMjkyOTM3REJFOEQ4RUUxOTFBNTg4NEVBOTc1NkE1M0RGRTZFQQorMjkyMzZCRTJBNTMwMEE5QjhBNTc1MzRENjdGMywgM0EzODY4QzVGOUNEOTA4QzNCMEYxOTk0M0VBNTU1MjM2NEU5OTc1NUJBOTc0ODQzRDMyNjA5RjYzQ0M5NDgzNjQ1MzY1NDE3QTM0NjcwRUU2RDBCNTNEM0FCQkIxQkI2LCA4QkNFRTBCODYzRUFEQzJERDBENUU1MjhFOUY0RjZGRTU0OUU4NERFNDg5NThGNjEyMDFGM0E3NzgyRDBGQUU1MjM3OTE2NTNDQkJBNTQyNEIxN0RGN0M2NTA3NTlFOEYKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIDc4RDUwMzUyOEJCRDE2REZFRTZFRTRBNkRDMUYzOTVBNkY1NTk1MTg0OTUzQTc5MEVDMDFBM0I2MUVCOEM1MDYwRkEzQzVCRjM2MkZBNjU3NUY4QkE1NDY5ODIzMTc0OCwgMTBFRTJEQjY5RjNCOUNDNDlDNTU1NDdBMUE3NjVEQzBENkI3MzhFM0VCNkVENUZDNDgzMTEzNThCNUE2NjBFQUFENTg1QjBERjREN0Q1QUQwODgyRTg0MzRGQTNGQkJCCisxNzIzRUNBRjdDRUIwNUY3N0REMTFFREI4QTc4QiwgODM5MjVFQjBGRUQ5Rjc0M0IwNEY0QjVCMzQzRjY0OTA5NUMxNEM4RUY1MUUwNzlEQjk2OTM2MDk2QjNFODBCN0EyQTA1NTUwMjAyOTI2RDYzQjkzQzkyQTczN0NCODYyLCBCNDExNkJGQzQ5Q0QyMDY2MThDM0VEMTAwRkNGQzc3ODlFMjA4RjgzRTVEOUQ5NTkxN0ZENDVBNTM0NkQ0QzM3Q0RBNkFGMjEwNDlFMTYwQTYyOEIwNkExMzk1NjI0MjMKKzQ1NkJDNjBFNzZDMTExRTY3OTczNUM5MjlGNkExLCBCMTdBQzc0MUM2Q0FERjNBNzZERTBGREYxRjI0QjIwMTI5Q0UzQjcyNDlCOEFDQzNERDgzMjVDMDlCMTcwODM4OUJCMjhGN0YzREQ0QzlBMDg2M0QwNzZERDYxNEVCODEsIDFFNDJDQkZGNDU4Q0RFMDdBOEE2MTVEM0U1RkU3QjUxOUVDMjAwNzFFRTFBODJDNkIzMjI3OUY4MjNEQjg0RUQxOTJGMzEwRTZCRUQ0RjI0NzgwREFFQTc2RTE1NDFFRQorRDA0MzUyMkI2NDQzMzVCMzZDNUExNUI3REUzRTMsIEFGMUZEREU2NzMyM0I4QURBMTVDMDBFMUM1QjE2MjJDN0VDM0Q0MzA2QUY2QkQyQ0ZEMUFDQzQ0M0RFRDExNjMxRTM5Qzg1MUEzNTY0NjQ2QTJFQzQ3NDhBRTZEMkIyNSwgOEZEQjQ2MzY4NjkwMjBEODlGQ0NCRkQwNTJCOEVDQkRFQjcyMDA0RDZGNjc0NUZDRkVDQzFGM0M2NjM3NkRBNzMxMjIwMzUxOEIyNkM0RDkwN0MyRjQyMDhCRjFDMjRFCisyNzBDOUY2ODIyQ0M5QTExQTQ1MEU0MTI3OUFCQTksIDgwMURCNTZCRDQzQTUwQzQ4NTdCQTkyMjY0RDMxMjgxNkExNDU1RDY2ODY3NDZGQUQ4MTU4QzM4MDg0MUM1Nzg3NTBEQzE2MkI3NTQ2QjE0RTFCQkM1REJENDNBNURCRCwgNDc0N0ZENTg3NEExMEU0MEU3NkRBQjNDOEQyNzQ0MjY5NDZENzEwODU3NTAxRDFBQzRGMzJEOTNCMzU1MUMzQThFMzdDM0VFMTJDOUQ2QkU0MjVGMjZBMzNCQzhCOTUzCis3NTI1REUzODY4NjVDRTM0RUNGMkFDMzc2RDAyRkIsIDU1NjJFMENDRDc4QzU4RjM4MkI5ODY1OUI2QzBCQjYwNzFFRkY3NEE1MkJCMUQ5MERGRjA5NDYyQ0UxRTFCM0QzQ0YyNENCNzIyNTM4RTk5MkRCODYxRThCMDQ1OUMwOSwgNDhERDUyNjEyRThFNzlFQjhGNjhCMTE3QTU3OUVFNTk4QzRFMDQ5OTdCRkM3MUZEQTFFNTFBOThGMkUxQTA3MUNCOTVDNkQ0MEJDMzJDMTMzMERDODVDNTIzOTgwMzdFCisxNUY3MTlBQTkzOTMxNkE5RUM2RDgwNEE2NDcwOEYxLCAzQzcyMDExOEVBQ0U1NzIwODFFRDcxMjQ1N0UwMjhFMDFBNjM3QTEzMUZDMTZFQkYzNERGMEI2NTE0MkE2RDY2QjgxM0RBNjhBNjZBRDIxM0QxOERCNUEwQTU2MkQwRkMsIDgwNkUxNjI5MjUwMzk2QzAwQzM1MjQwNzE5NDk5QzAyRjhBRTczNEM0OUJBMkVEOTA5NUJBQjVFRDdDMTc0M0RDOEM3NzQ3OEVGRjU1MUIyNUJDMTYwNjZCRUFDOEVGQworNDFFNTRDRkZCQUI5NDNGREM1NDg4MERGMkQ1MUFEMywgQTY2NUU5QjBGNUVFNEZFQkM4RUJBQTc4NzEzNUVERENENERENjRGNTU2NkY4QzRBMDIxNDY0MkQwOEQyQzhFOTZENEE5RjhCNkExREJGOTQ2QUZCRDQ3RThDQzFGNkM3LCBDNzkzNTQwRUU0RkM4RDg0QzdDN0E1QzVBRkZGN0I5MjEzRTI5NEVBQ0Q0ODY4MEYxODRBRTU1MEMzNUMzQjYwOUM0RTQ1MjRFRUFDMzAxRkI3Q0E4N0I4OTI1NUE5CitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCA2OTg4ODIzNDM0NjdFQUM2RTY0MkUwNjM0QUU3NDgyNkYwRjg2MzU4MjVDQjg2MzFGREQ0NjFGQ0E3NzZEQUFGRDkzQUQ5MjZBRjBGMUY3MjM2NDNEREFCQTg2NzQ2RkIsIEExNUY3QzhCMkFERERBNUE1MEU4MzBDNTZGNTYzN0EyNzAxQzVBQjhFMEYzQUY3NzZFNzQ2RjM1QkREQUZBODEyMDA0MjhCREZGQzNCQkMzOThGQzIyRDk0MkEzMkY4QworMjUxMEZCNEZEOTA4MzYzRUJFRjhDODdEODk3REYxNkIsIEZEMTBCNjJFNTgyNjg4MEVDNjU1QjhGRTM4RDg4MzdGMTExRkNBQ0ExRTMzODlEQzk2NDUzNTBBOEIxN0YwRjEyNzg3QjY1NEMwMkI3RDNCRjZBNzI4ODM1NTJCNjZBLCBERDY5QUQ1MzExQjIwM0M4NzA5NzA4QzJBRTlFNUFDRDZFQ0NCQzcxQ0JFODM3RjA1QUM1OTE4OEIyQ0Y1MzY0Rjk0NDk0NDY4OTk4NzlBNDBBRjlBM0M4QTk0RDUxNzIKKzZGMzJGMUVGOEIxOEEyQkMzQ0VBNTk3ODlDNzlENDQxLCA3RDNERTgzQTI3RjU1MDFEQzNBRUI1MjQ2QUExNTkxMTlDQzIwQkM1OTJCM0EwNEVBQzE0MDM4MzE3OEZCRDczREMyOTFDNjk3NkRCRjYyRThGQkFFQjQ3RTRFRUMyNDIsIEJCNkVFQTM4NDg4MDhFQkE4OUVCRTQ3MEFEMkM3OTYzOUJBRDM0MzY3QTRBOUZBMkJDRTA3RDU5NDQxNkE4N0EwM0FENTZGNDdBNTk5NDg0OTIzRTNCODg0Q0VBMjg5NworMTREOThENUNFQTE0OUU4MzRCNkJGMEM2OUQ1NkQ3Q0MzLCA1NkY2NDIzQ0ExMzVFREUwMDY1RUQ2ODUzREMzM0E1Q0VDRUE0QkRCMEZEQ0E1REM0ODU4MTI2OTVBQUVDMUVBNjJFMzJGMzYyQTg5QUFGNzkwQ0UzODVBQTNCMjI3RjgsIDdBMjMyNDVGRDQwMUY0QjhGODA2RDkyQ0IwREMwMUQwNzBBMTcyMDAxMDU0ODJGMjRCMzM0QzI5REY0MzZDOERFNEJGNzQwMDRDMzZGMTcxNkNFODU1MzkzMTVERDQ3QworM0U4Q0E4MTZCRTNEREI4OUUyNDNEMjUzRDgwNDg3NjQ5LCBGQjdBQ0Y1NEQ2QkMxRjg3MDUzQTJBNjhFQjczREI4QzA0MUU5QkQ5MEJBMkQ3Mzg0QzI0MDREM0JBNkI5ODk5NTVBMjNDNEE0MkNCQkU1OTIxMTlFQTU3QzdEMTMwRkEsIDgwNEYxN0Q0QjJGNDM0N0FGRUEwMDQ2QUQyRTNBRkVDNjZGMzIwQTQwQjJFRkRDMDJGRDIxMDVBNDRGQTNBNEEzOUQ3NUY4QTIzNDlEQURGMTU0ODMwOTExRDRDNEQ3OQorQkJBNUY4NDQzQUI5OTI5REE2Q0I3NkZCODgwRDk2MkRCLCBDNjA1MUY2QUM3QzhEM0EwRkI5NjE3Q0Y2QjkzNUJFMjQ2MzY2REFDNDBENkRBQjdENUNBMzI3MTEwOUU3NEU5REVGNUI1RENEMzQwNTRDMzE0OEUwOUE4RUUzNzZGOTYsIDE3RDUxMThDRDQ2Q0I1MjBFQUFFMjJBNUNGOTUzQUI2QzZCRjMwQzRFOTkwM0U1NjQ2QUU0RDNEQUJDMDExMkQ4QTlERTUyOUE5QTczMEUxMUM5N0JERjZFMjRDRjM3RAorMjMyRjFFOENDQjAyQ0I3RDhGNDYyNjRGMjk4MjhDMjg5MSwgODIyNkYxNkVFQ0RDRUQ3NjJCNTNBNUMyMzZDQjA0NzNCMUU0MjZCNzUxNERGREVBOEUxRDVFMjIzNkNBQzY1MTZBODM1NEMwQTlEOEFFRjJBQjI1QjBBRUI1NjQyQ0RDLCA4MTQxNzg1RUVDQzk2OUJBNThFQkZDM0EwRTBGOTJDMTc4NzhFNzgwQzY4MjNERUQ3N0NDODYzNEVEQjUxNTFBMTNEQUE1MDY0MzY3ODdGQkVGMjFGRDAyRjQzRTFCMEYKKzY5OEQ1QkE2NjEwODYyNzhBREQyNzJFRDdDODdBNDc5QjMsIDdDNjk1NDk4MkI1QkFGMDkwNjI3RTAwN0VGOTZCRjQ1QkQxODlCRDdDMEFENkEyMkU1OTU2NzM5QjYwRTUzNERCQjEwRDRCNTI4NDlFN0YyMzBCRDhCMDA5N0UyNzg0OCwgNDQxNDMzMkU1NzU4NTg2QzQ5NUUxNEQ2NTAxQkYwQkIzMTJBN0E5M0FDQTc1QjREQzNDMkU4Mjk1NDY5MDM5ODY0QTcwQ0ZGQzE0MTZEMTdDMUQ1NThBQUQxQjU1NjU2CisxM0NBODEyRjMyMzE5Mjc2QTA5Nzc1OEM4NzU5NkVENkQxOSwgODQ1RTI0QTU3MjgwM0IwMjU5OTczOUQwMjEwQkNBRTZDMzgzRkQzNjQwMEE1QUE5NkIwOUI4OUQ4ODkxNjczMkEwMzlBNTQ2Rjc3RUE5MDcxODk3MUQyNTIwRUU4Rjg5LCA4OTc0QTU4REYwRkU2N0YxQjcyM0VBNzM5RjU3ODczM0I0MEJEQTczRUVFM0RBMkJCNDVCRTk0RDQ4NTE4NkNDM0U3NjE3N0MwRUU4MUEzMkJBQTAzQzY4MUU0QUFBMzkKKzNCNUY4MzhEOTY5NEI3NjNFMUM2NjBBNTk2MEM0Qzg0NzRCLCBGREE2QUQxOTU3QTZDRjJFMzc3RDFFNDRFMjdERTBERkRFMzlDRENFQUU0MEEyRTgzMEEwMEQyRDUxNEY5MzlCMzIyMEZDMURBRDNGMDhGQTdFRkE5RTFEMTVEQ0QwMzMsIEFEODUwQzAwM0JEQTREQjBEMkNDRTBCNDc0NzZBRkFBNjMwODdBMDY2RkU5RDlBQjhFNTBCMUU2OTgwQTgxMEE0ODU3NTkyMzhGQThGRDQ1Njc1QkI0RTA0MjUzRDE2MAorQjIxRThBQThDM0JFMjYyQkE1NTMyMUYwQzIyNEU1OEQ1RTEsIDQzMENBRUJGRjFEODU3OENGMDUwOTFEQjBDODEwQzE5MUU0OEM0QTdCNDZBMTYyMzg2MkRDQjg5OTJDNTIwRTYyMTMwRjY2RUE4REY2NUE4MDg3NENEMDg4QjkxNzJCRiwgMTM2MDEzMkVEODNGQjVGRTREMjZFMjlCODRCNDc0N0MwQzAwRTg4NEEyRTlGQzIwNkQ1NERDNzAyOTFCOERDMkYwQkYwQzg0RUIwRkE5M0I0NzFEQzEwRDQ5RENFOTgyCisyMTY1QjlGRkE0QjNBNzI4MkVGRjk2NUQyNDY2RUIwQTgxQTMsIDY3MzlFNkE5ODVFQTlGMUVDOUM5Mzg4N0FDN0E4MjFCRjY4QjE4MzNFQUMzMjgzMzYwMkRFMUJFODgyNTlDMDFCRkVCNDEyQkQ5MzUyNzQ0REIyQUE3RTA5OUY2NUM1MSwgOEUzNjRGNjgzMzFBMjgxMjQ3NkYxQUQwQzM1MzY2Q0JGMDhGQ0JERTY5QkU4Rjc0QzMzOTYxRjQ3MjEyQkRDQjNGMDZCMUIzNzRGMDNGODFBQjQxMzA2QTEwNjkyRkQxCis2NDMxMkRGRUVFMUFGNTc4OENGRUMzMTc2RDM0QzExRjg0RTksIEVERUM0QTdBM0Y1ODQzMDA0RUMzMTEwOTZGODM1MzY1NTk4NjExOEU3RUQzNjJEMjRGMzFBMjE0RjlCRURDNzhCQjBBMURDRkMzQjI4MjZGNDVGOUU1Q0M0MjNEMDkxNSwgRTBCQ0ZDMDJCRkMxQjMyNDNBNzQ2QjNCRDlBRUU4Q0MzMDg2MUQ5M0E4MTRCNDFERjkwRDk4MkU3MkE5NUM0RTM2Mzk0NDhDM0JERjk1ODFGMUMyRjNFNjI5QzMxRjkKKzEyQzkzODlGQ0NBNTBFMDY5QTZGQzQ5NDY0NzlFNDM1RThFQkIsIDU4QzZFRjI5NkI3NTgwNDQxQjZGNjM4RTM5NjEwMzIzODgyNDU2QjAzNjc3NDVBODhBRkM4MTc4N0YxQTM5QjZFRUNFNkNEOEUxN0U5MDEwQTkwNjlGREI1NEMwQjRBRSwgMzI4NzE5OEQzMDJBN0NEQjAyRTY1NDcyQ0M4QTU5QjI2RkNCQUIyQTNGQTVFN0ExM0IyOUQyQTU2RTI5OTMwRDlDMEE1NTI5NDUwN0RDNTYzQzk2MDEwRDg5ODk3REUxCiszODVCQTlERjY1RUYyQTEzQ0Y0RjREQkQyRDZEQUNBMUJBQzMxLCA4RjQ2MENBQzVDMEUwMTlCMkRDOEQzOEZEOUQ3NEZDM0UwQkJDQTkxRTFFQkU1REIzOTZDQjk5MUIyM0FGOTFBNzYzQkFBQTBFMUIxOTJFNTJDRkRFMDlFNzM0QjA2NzUsIDlDRTkzQTI3QTZDRkVBOUI2OTI4NTIxRUI5QkJCMDdDRUFEMzNEMDQwMTE5M0NCMjc5RkVCRUYwQzJGNTMyN0IyRTg5RUUwREUzNkI4MDRGNTg5ODQ2MzkxMjAyNjQ3OQorQTkxMkZEOUUzMUNEN0UzQjZERURFOTM3ODg0OTA1RTUzMDQ5MywgQ0MxODEzOEQ5NTdENTgyRjc5MTMzRjA1QTRDOERFMTQ0M0U2QjAyNzk3QzI1NUEyOUMwNUU5OUJBQTc2NEIxREUwQ0Y5NzU5RTVGQUU3NzMzQUUxMENEQzEwNTgxOEQwLCA4MkQ0NDAzQzNEQ0IxNjA3QUQ4RDk4MDg5NTg1OUUyNTFGREQyMTc3MjVEMUY2RTU0M0MyODRFNzVDQjIzQUE4RDZFNDJGODI0QTk0M0YwNUYxRjE1OTBGMkI1MTk0RUUKKzFGQjM4RjhEQTk1Njg3QUIyNDlDOUJCQTY5OERCMTFBRjkwREI5LCBBRTFFOThDMEVDNkJGRUREMEQ2RDA2REZDRThCRUNCQTYzN0JERTMwMjI5RDA4RTA3QkVENTIxRjNCQUFFRTQ5NEJEMDVDMDQ0QkM2OTMzNURFQ0IxNkE3RERBNzk4NjMsIDMzRUMzMTEzQTM0RDI1REY1ODM3RTBBN0FDNDkyOEMxMzIyQkEyODVGMDdGNDU0M0RCQjY3RDc5RDk3MjJCMkQzQTZFMTFFMEMwNEIzOTY3RjQyMkUwRTE5RUExQTRENgorNUYxQUFFQThGQzAzOTcwMTZERDVEMzJGM0NBOTEzNTBFQjI5MkIsIDU5RUIwNzJDNkFGNjA2QzZGNTZDQjRFQUJBQURCN0ZGNTVDQTVGMzczQzk2OEQ2RDQ3QjI4ODQ1NDlBQzQxQzYxRkMwQzdBNTQ5MjhGRkZFNDEyRDE3NDg4MjdDMzc5NywgNzM2NkM2NDI3MTI1Rjc5OTEwNTU1RTI3MjQ1NTY5OTI3MzhCRTdGRkU2RDc0QzIyMTFGQUVFQjdDNjREQzREQzM3RUIyMEI3MUExODE1RUVDRjFDQUQ3MDgyODc0MkZBCisxMUQ1MDBCRkFGNDBBQzUwNDQ5ODE3OThEQjVGQjM5RjJDMTdCODEsIDM0RENENUJCQjM4OUE1Mjg4QUVDODVFOTJERDNENjAzQTZCREM0QjkxMjM0NEEzN0IzOTA2MDg3NjY2RjYzQTlBNUUxQjk4QjUxQ0NDNTVEOENFNzFFMkM2MDk3ODZFMiwgQ0MwNTkyRkVBOTI4NEQxNjIzMDY1MkFCRTYzNTAxREIxMjNGNzRERkI5NjBFNTgwM0IyOUI1NDg4QjhCQjZDODVGMEIxNkI1Q0NGNjUyRTdFMkY2RTZGNzk3RTk5MjVGCiszNTdGMDIzRjBEQzIwNEYwQ0RDODQ2Q0E5MjFGMUFERDg0NDcyODMsIDZERjdEQkM2QzAyNzA4ODU5NkQ4MjEzMkE3Q0UxNTMxMUQzNEQwNjQ4NkE5Njk4QjU2MUFBM0I4ODU2RkM2NjQxOUZCNTUxQjBCMDcwREIwRDM4Q0ZGQ0QxRkVFQUUzMywgMjhGRjFFMUU5NTY0MEU3Q0NCMTFFMjY3QzA2Mjg0QzNFNkZCMzYwNDhCOENFMDdCNjlGQjhENjA1MDcwNEZEM0RCMjg5OUEzQzc5NUEyODdENUNFQTczN0JGRTRGNjY5CitBMDdEMDZCRDI5NDYwRUQyNjk1OEQ0NUZCNjVENTA5ODhDRDU3ODksIEJFQUU5RURENDQ0RjY2QTJFREM2MkI1QkY4QzBGNDBBQTMzMEYxREFEMkQ5QUQ5N0JBRkQxQTRERjdFMTI2RTlFOEI0OEQwNTMyNEE0NEMzQjJDQUQ1OUE2QjhFRDI3LCA0NUNCNUQ2Qzk4MDZBODQ4MzI1RUQxQzcwMUM4RDE5NEM0Njk3QTREOTkwN0VDRTQzMjI5ODBFMjE0M0RCRjdEMzAwRUQzQTlGN0MyN0MzQTIzNzg4MUE3MURGNTdFQTgKKzFFMTc3MTQzNzdCRDIyQzc3M0MwQTdEMUYyMzE3RjFDOUE2ODA2OUIsIDhBRDY0QjlCRjc1NzE4MUI5QzE0N0E3NzQwM0E3MTMyMDIxMDZEQjkyNkI4MzhGMUU0MkI4MDc0NjUwNzc5QTNBNTg1MDczRkREQzM2OTE1MTg0MEY3MkM4NDZGQ0E4MCwgNDE2NjlEMkEwNjI4NEY5MEEzNzE3NTk0NEUwQUZEMzA1MTJDMDI4MzhCRTBEMzc1OUI4ODI3OTA0MDg2RTM1RjZGRDlCN0VDRTAyNzAwMDI2MTAwREJCMUMxMjlEQjk1Cis1QTQ2NTNDQTY3Mzc2ODU2NUI0MUY3NzVENjk0N0Q1NUNGMzgxM0QxLCBDM0I2OUFBQzc3QTJERkJDNUQzNTQ0RjUwQTA5RkMxMTNFMEE1RkNCNkIwNTE0NEI5ODYzREU2NEI0MjU3MUMyQjk2MERBMDc1QkQyOTlCREEyOEYxQzdGNTUzRUY1M0EsIEY2RTkxMTE3MTY4NzA2RkVERDEzQjUwNDhBRkI5MjU1RDg1MDFDRjhEREE0OENEMUUzRTlFMTFENkM1MjBBNDhBMUFCQ0I3RkYzOTA2MkU3QUM0NEQwNzAwMUJGMUFFMAorMTBFRDJGQjVGMzVBNjM5MDMxMUM1RTY2MTgzQkQ3ODAxNkRBODNCNzMsIDUzNTI0NUFGODQ4RDdCQUFFREVFOTM0QjExQTA2Mzk5RjQ4REE5REMyNDY2NDlGMDM3QUI4RkJBMEQ5NDM2NjdCNTg5QjIyOUYzRUNBRUYxMThBQzMwMUFCNDBFQjI2QywgRjNDNjlBODgxRERCMTkwNTVERjUyNzhFNjU5NzIyMEJCQzEzMERCRUE4MDc0REQ5OEQ4RjU4RjE1NUVFNjdBMTgwRjFERjYxMzc0OUE3ODhCOUUxRThBMThGQ0RBMzk4CiszMkM3OEYyMURBMEYyQUIwOTM1NTFCMzI0OEIzODY4MDQ0OEY4QjI1OSwgNkUzMzIxMDk1Nzk0NDlCQTZCQzExNTk3NjNERDczREFBNzUwNDA3RDUxQTYwNTdGNzE5NjQzQjFFRTA2QzZDMjNENDA2MTc2OEM1NkM4Rjk5MUE2REQ2QTQ4QzA0NUQ0LCAyM0QyOEI4OTk5NUUzNTVGOThBQUIzNTIyQjg1NjgyRkFFREM5OTY5RDcxMUJGQjc5MDcyNjlCMUU5NkVDNDhFRkEwOTIyNUVCMUYwQzI3NzJDRTNBNjAyMkQyMzU2NEUKKzk4NTZBRDY1OEUyRDgwMTFCOUZGNTE5NkRBMUE5MzgwQ0RBRUExNzBCLCBFRUU4NDhBRjNENTUyMzI5MTRGMjBEOUQ5ODU4RjBEQTdEODg2MDhFM0Y5NURFQTMyODlFQjA0MjY1NUU1QkZDQUUxRkVCRDFFNDc1N0U5QTBBODcwMDVFOUI3NzMzMSwgOUM4MUFGNTkyNzBEQTI5N0U1QTg3MkY3QTAyOTU3OTRBQzg0RTlEODVERTBDNjVCNEExQ0Q0MEFFMDY5MENDOThDNkUwQ0Q4OUQ2RTY4OTc1ODExNkQxQkY0RUU3OTIwCisxQzkwNDA4MzBBQTg4ODAzNTJERkRGNEM0OEU0RkJBODI2OTBCRTQ1MjEsIDRCNDRENEVEM0MyRjAzMkE4MUNFMDFGNUMzMDQ5QjlGMUUxMDI4QTkwMjJFM0IwQjNDN0E0NDc2RTlCREFCNUZCN0JDMENDMDE2NDU2QTFEQzE2QUE3MjgzOEVBNTZCQiwgRjM2ODAzQTc0ODNEMDRGMDVGQjBFMEVBNTJBQkZEMjNBQTVDMkVGOEUyQjcwOTdDNThCRDZGRDlEQjgzQUZFOThGMjZGRDIxRUVCQzFCQUNFMjU3RkI0MTA3MUE4MzU2Cis1NUIwQzE4OTFGRjk5ODA5Rjg5RjlERTREQUFFRjJGODczQjIzQUNGNjMsIDYzMzZBNzZENUQ5NEZERTJBMUE2MjU3OTBCMDQ0RTM4OTU5QzQ2MkMzOEZEMjAyMDQ4QjNBODFEQjdGMjcwNDgwODVFRjA2RDEzQTBGNURFQTM1OTI4NUY2MzZGNDJFNCwgQzUyOTIzRDBGMTI2Nzk2NTZCNTk2NjBGRkE0QkQ3MDMxMjA0NTk4NUEwNDBDRDg1OEY3Q0QwN0U4RTFGMDM5MjNCOTI1NDMxODZEMkU4NzgyM0I2NEY3Q0Q5OTgxOTg2CisxMDExMjQ0OUI1RkVDQzgxREU5REVEOUFFOTAwQ0Q4RTk1QjE2QjA2RTI5LCBFMUZCQjY0RURDREJGMjFCNDQ4MjQzODk2RDBEQzAyOERGQTlDRUQyQUUzRjE4NEQ5NzhGMjk1ODJGRUYzOTY0M0YzNkUwQTBBQzc5REREQzEzQjUyOTlEMjBCRUJFQTUsIEFFMjU3ODdDMEYxQjNGRUNFMTg1MTI0NUQ5OEExNDlCNzg3N0VCOTA0MDBDMjNBNzkyMTQ1Q0ZFRkEyNjk1OEYxODdCNjhBQkI3QzdBMTA3NTlBQTU2RkVEQTU1Q0Q5QworMzAzMzZDREQyMUZDNjU4NTlCRDlDOEQwQkIwMjY4QUJDMTE0NDExNEE3QiwgMjY5QjgzQzY0NEJEMDIxN0UzMjU0REFFRTQ3NkQzQjhCQUQzQTc4NTRCMjZBMkRBOEE0OTQ0NURERTJEOTA3QkFCNDA4Q0Y3MzZGMDJBNjU0QzRFMTA0QjgyMTYzMjcxLCBEREM0RjE0RkFCMjRFNTQ5NjIzMkJFOTlENzQ1NDZFQkZEMjhDOUZDNDg2RjJFRjI3OTA4QzdBM0M0NEQ1MjQ4Q0NCQkVDQTE2NDVFMzI3QURFRkJBRTY2MDQ5QTJENUUKKzkwOUE0Njk3NjVGNTMwOTBEMzhENUE3MjMxMDczQTAzNDMzQ0MzM0RGNzEsIDYwREU2RjlDREIyNzBBMTgxMzYwOEI0NkI5ODU1NjVDMTIwMkVEREU2MkMzNzUwQTk3NzkyQUExRjgzM0E5MTA5M0VGOEY4NkRFQzAxOEZGMkQ0MjdCODQ5RDk2NkJFOCwgRDZBRDE3MzRFNUUzQzRBQUFCNTgzRjc1ODYyODY4RUVFNEQ2RUYyQzZFN0VGQjIyRTczRUE1Njc4NTRCRUNDMDM4QUE4MDRFNzU3RDkzQkE2Q0E0MTE2NUM5Nzk1RTlECisxQjFDRUQzQzYzMURGOTFCMjdBQTgwRjU2OTMxNUFFMDlDOUI2NDlCOUU1MywgOTE3QjZFOTgzNkY0MjU2MDVGMjBCOEE3Nzc0OUE3MjlDN0U0RjM3QTcyODM2M0IwMzgxM0FFQTFCN0IxQkJBQzE5NUM2MjU0RUJCNTJFQjlDNUFDODAyNjcyOUU2RDMsIDc3Q0E2NTVEMEQ1NDBFQThFRkNEQzEwMTNBNUU2QzFGRDRCNEM5RDQwNzBBODEwNDdDNDc2QjJCNzg5MTBFQ0M5N0RBQ0Y4RTFBOTY3MDhCRDUwRjgyRUY0RjEzRDE5RgorNTE1NkM3QjUyOTU5RUI1MTc2RkY4MkUwM0I5NDEwQTFENUQyMkREMkRBRjksIDNBNDg5NDE1OUE4ODdFNkM1NkVGOTJDNkM4OEM2NzUwQkZFMUQyRDEzNjQ3RkIxQjUyNjIzQzhFOTZCQkY0RTRCNjFDMUYwNzQyODU5QTE4ODc4QTJBNDk2NUU2ODVGQSwgRjlFOTNDQjZEQzFCQkJEQTdGNEI3OENDNEY2NERBODVDRjhDNzBGMDk5RENGMkRDMTY0ODI4MEI5NjEwNUVGMDgyMTQwMTQ0QjI0NEEyMDI0OTYyMEYyQ0Y1RTg5MjVDCitGNDA0NTcxRjdDMERDMUY0NjRGRTg4QTBCMkJDMzFFNTgxNzY4OTc4OTBFQiwgRjA5NEMyODY2MzJGNDExNDNGRkIwNEEwQjJDRDhFNUI3ODdGMDlFMEMzNDUxREQ1MzE4NTI4MDQxRDBDQTYzQzUxMDREOTFBNTk2NDAyNzVDRTUyNUMwQzhGMDY3RDc2LCA2NzAyNEFERkMwMDhDNDZBMEQ0ODNFRDc3Q0Q1ODE0QUU5RTBENTNDNjBDNjBENEQxQzdFRDI1NDgwQTFFOTYwMDI4NzgxMTgwNTU0MTRFMUQ2NjE4MTFBQzNGMTgyMgorMkRDMEQwNTVFNzQyOTQ1REQyRUZCOTlFMjE4MzQ5NUIwODQ2MzlDNjlCMkMxLCA1MEM4NjQ5NkJFNjhFMDVGOTRERTc1ODI1MjQxNjhEMkQyQ0Q4Q0MwMjc2RjQ5NTkxRDVGRjcxQjU0NTNGRTkxQTExQTY1MTRDNDM0OTYwRkQ4QzVCODE5NTY0NTBCQzMsIEM5MzhEMUMyMjA5RDQ4RTU0MzNCMjk2QjdGRUQxMzU5MEMxRkE2RUUwOUZENEJGNUZEQzY0NzQzQUU3NjREREFFRDRBMDg2OTc2NTMwRjZGMjVGOTY4M0IxNTNDM0Y3RgorODk0MjcxMDFCNUM3QkQxOTc4Q0YyQ0RBNjQ4OURDMTExOEQyQUQ1M0QxODQzLCAxNkZFOEQ3NDExNDUxMTc3NjIwN0Q1MjYwQ0I3QTE4RENGRjRCQTIyQjAyMDAzMUE2OUE2NzQxMDdCNjVFODc5ODlEQTlBMEY3MkY2MzUyOEU3MEY5OTE1QzgyMDM0MDksIDdEQjU2REZBMjNBQjE5QkJGNThGNTY1NzZFMzBGRjdENjlGRjVCNTIzMUFEMTdFMzE1QkZGQ0Q5Nzg5OEY3MEYxQTZGQTg4RkI3NEYxMUZCQTYzMjk3MDlEM0VBQjA1QgorMTlCQzc1MzA1MjE1NzM3NEM2QTZEODY4RjJEOUQ5NDMzNEE3ODA3RkI3NDhDOSwgMjBGQ0E1NjJDODU3MUZGQzFGNTc3QjVDOTRGQUFCRTJENTM4MEUzOTJEQTI2QzUyMkE4NUFDMUJCRkRBNEM4QzQ1ODA2Nzc1RkZDMjhBMjRGNUZBMEE0QTk2NEU5NzQ5LCAyRDI0NjVBRjc3MERBOTNGNUEzRjk5MkUyRkFEQkNDNkQzRUE2MjdENkIzMjgwNDgzOEFDQjA5NzhDNEY4QzBBMjZDNjg2QzAzQzQ5RTk4Rjk0M0FDOEU3NzMzQTkyQzEKKzREMzU1RjkwRjY0MDVBNUU1M0Y0ODkzQUQ4OEQ4QkM5OURGNjgxN0YyNURBNUIsIEU2ODQwNUZFRTNFRTI1RTQyREExQUQyMThDMjBBQUNGMzBENzQ0OEM0Q0YxNTBBOTYyMkE4NTE4RDhERkM2RjFEODQ2OUNGQUYxQzJDOTc5NDQzQ0M4QzJFQjFCMDg4QywgODg5Q0YzM0VERTYxMzMxNjI1QzlGODdDNjhGNTY0MTdEMTI1RkVBNjExMEI3MkVFRjg1NjlBNUQwMDVDMEJDQzhGMkRGMEY2NUIwNjhEQjRGQzRBOUFDNUMwMDQ1RDNFCitFN0EwMUVCMkUyQzEwRjFBRkJERDlCQjA4OUE4QTM1Q0Q5RTM4NDdENzE4RjExLCA0RURCQjY3RTE4OTRDQjVBMUIyNzQ0OTlEQjA5MjU1QTg2NjQyOTlBREQ1RDRCRDcxOTRERDE2NUVDRjFGOTM5Mzk0MjJFN0IzN0E5MUU3REQyQTAxNzkzMUY3N0FEQUMsIDI1NDE4ODlERkI2MjBDMEE2OEZGQUQyMTU2NUJERjdEMUM3RUI0M0EzN0M0MjhFQkNCOEJFNjc0OEJGMDRBMzUxMzc5MUEzMDRCRTUyNzU3Q0Y5MjVDMUNCRTA2RjAyNworMkI2RTA1QzE4QTg0MzJENTBGMzk4RDMxMTlDRjlFQTE2OERBQThENzg1NEFEMzMsIDIzRUVBRDhCMDRDOTkwRTI0NTgyMjMxOEU2NTM5MDIxMEM2Q0NDNDk2MjUyQUEyMkJFQTA3RjZCQjRFMTMzMTU1RThGQjY4NkEyN0U3NDY2MEUwMjQ4NEJBQUNGNjhBMywgNzU2RkVBMkQyQTU3QzQwNEQ1QkIzMDUwMTcwNjRERDUyOUFCOTE0MDQ2NUZBM0U5OUY4MTIwODNENjI4MUJENTVDMkZCQjNCQzJCRDQ5QUIyQTg1MTAxOTBFOTM1MjYxCis4MjRBMTE0NDlGOEM5ODdGMkRBQ0E3OTM0RDZFREJFNDNBOEZGQTg2OEZFMDc5OSwgMjU3RDgxQUM4NDU2NTUxRUZGNDgwNzA1MTk2OUVDRkYxOTUwOThDMTZGNzI4NDI2MEE3NEVDRjY5MzI2RDA0MjY5QTMxQzlGRDg5MkY2MUM2REVENzkzODM4Mzg5REYyLCBBMDE5Q0FBMzZFMDQ0N0JENUVEQjJFQjc3NUE2MjUwMjRBNTcyM0M0Mjk2NjMwQjRFQzRDNjRGNUI0REZGN0NCQjI3MDcwNUE1M0M1OTEyMUJFMzhBNDE4QTA4NzZEMUQKKzE4NkRFMzNDRERFQTVDOTdEODkwNUY2QjlFODRDOTNBQ0FGQUZFRjkzQUZBMTZDQiwgQjRFQTVEQTIwOEFCNEFDNUUzOTZERTI0RTQ5N0JBMUFFODQ5RTFDMDUxNzQ4Rjk1MjFENTJCMEZDMzQyMjBGMTFERTZEMUIyREJCOTEzOTEwQTRGQThEQzMwMjM3NUYzLCA3QzlFMTA4QTUyREIyODUzRDVDQ0FCQUI4NzNCQkFBNTY1NzQ2REQ0MjZCNUM5QzkxM0RCOTM0QUM1ODgxQUNBMDlEMTNBQkNDNEVBRjRDMkMyRTg4MDdFMjQ3MEIwM0YKKzQ5NDlBOUI2OTlCRjE1Qzc4OUIxMUU0MkRCOEU1QkIwNjBGMEZDRUJCMEVFNDQ2MSwgQUIxNjRCNENCQ0U0NjcyQUU3RkU1MDA5ODU5MDkyRDA4REU1MTFCMTVBQzVEOTNERUMwMTc0QUU0MTgzQ0YzQjhFNDhERkEwRTVFQjU2RkY4QzFCM0REOTBBMkI1OEQ2LCBGQjNGQjIxQUMwODk5RjVFRTQxNEQ3NEI3Mjc3MjZCNzc5MjdFNUI4MDNBODY2MTgxNzhFRjFBRTY4NEY5QUU1OUY0QUFBMEJFNjY4QkQyQzYxMjIyNTYwMUQ3NkIzQTYKK0RCRENGRDIzQ0QzRDQxNTY5RDEzNUFDODkyQUIxMzExMjJEMkY2QzMxMkNBQ0QyMywgREY0QjJFRDhDQkY4MTZDOTA1RDQ5QUIwNUFFQzkyMDc1OTREQUJCRjcxNEVGQzhGNEIwNDJGNDEzM0I3NDBGQjREQkYyMTgwRDIxQTZFN0YxNjdGNzk1ODQ4OUQ0MDZGLCAzNDZEOTI0RUU4NTIxN0MxNTA0N0Q2OEU1MjUzQzJCODc0RUZBMkRDNTYyNjU3MkYzNDc2NTAwNkUwQzgwMkUyRTYzQ0ZDOTA4MzBFMEU1NkQ5MEY0MDgwOTkxODhGOEYKKzI5Mzk2Rjc2QjY3QjdDNDAzRDczQTEwNTlCODAxMzkzMzY4NzhFNDQ5Mzg2MDY3NjksIDVBMjM4QzBDMjYxODlCQjBCNjVBNTQ5MzVCOURFREQ5NTM5MzcyNjk3NjQ0MEJGMzczQTZDRkJCQzZGQzQ2NTMxNDVDQzg5QkM4QjAwNkEwN0VEMzdGMkEwRUNCMEJERSwgRUFBQkFFODlFRkM2QjAyMkVBM0FCNTY4NDQxRENCNTdCNjZDNkQzM0MzRTQxOUFEQkQxNzc4N0Q5MEZDMDQzNkI5NzBERDkyMEVGODQxN0M2QkIxRDk0MUM5QzM3RERBCis3QkFDNEU2NDIzNzI3NEMwQjg1QUUzMTBEMjgwM0FCOUEzOTZBQUNEQkE5MjEzNjNCLCA2RjZGRDNBQTJFNzMxMUMyRTkyQTIyRUE3RTZDMzMyOEYxMjI5OEMyQzk2M0JFODFDNkYwMjBGMjcwODg5OUFFMUZGMzhCQzYzNzhERjIxQkVEMDY3RUU4OUU3OEU5MzgsIDU3MDE5ODg1NDZGMDBGQzcyNzk4OUI0ODVBMUI2MUIwNkMyRjhFNkI5REJDOTI0NzE5RjY2ODVCM0JDM0Q2QjAwRUIyRTgxNzUyMTdCMDQwNTk2MDZCMkZBMDI0NTAxOQorMTczMDRFQjJDNkE1NzVFNDIyOTEwQTkzMjc3ODBCMDJDRUFDNDAwNjkyRkI2M0EyQjEsIDFDQ0Q3QjI1N0FDOUE2ODcyQzg4MTBBMDYwQUI3RTE5NDMwRjdFNENBMDU1RkNEMzYxMUEzRjIxNDRDNDU3QUNEQkRDMjQxNDIwQjU1OTU4MUQyOTA0RkUyMTFERTk5RSwgNjQ5MkJCQzlBQ0JFQTNBMTgwRjhERDg2OTJDMDgyODdDNUVGOTkxOTcwMjdCMzUyNjcwMjNCODk4Qzk3RTU5RjNDOTdFODBGMzdERjIxQzc2RkZBNUUzREZGRjA2NEY5Cis0NTkwRUMxODUzRjA2MUFDNjdCMzFGQjk3NjY4MjEwODZDMDRDMDEzQjhGMjJBRTgxMywgMjZFNEJEQ0I3RTQ3MjhGREQ2NjM4NkJEODREQzhGOUQxRjk3MDIyNURGQkQzQzBGRTJGNjdEMTgxNjUwRTE1OTZEN0VGRkMwMjZCQ0M1QTFEQzMwOEU3REVFMUUzQkVDLCAzODBFNUM5REIzNjk2QjZGQ0U2M0E1N0Y3QzA3RDNCODFBOEU4RTU4OTg2QUEzNTVBQzJDOTY2MEI5OTIxNDAzQUUyNjRCRDZCRTk1QTAwN0U2QkNDREExMzYzNjI5NjcKK0QwQjJDNDQ4RkJEMTI1MDUzNzE5NUYyQzYzMzg2MzE5NDQwRTQwM0IyQUQ2ODBCODM5LCBEMkFBMjFFM0Y4QzBCRjkyODREMkU2OEM2ODI1REM1ODJGNTYyQTk3QjdBN0NDRUI0NjVEODQyREVFQjc2OUEzNTkwMTI0OTZFNUNDMDREMTcxRDRGREJGNTk4MkY4REIsIDFDNUI1NjgxMUVEMDRGNzE3OEFCNTBDMjlCNkUzRDNEMjc3NTVCQzMzNTlDMUVCRkY5MUREM0M3NjhENjMzM0M2NzA3NEU1MUE3QTM0OUY5QjcyMzU1OTE3N0Y1RTQyRgorMjcyMTg0Q0RBRjM3MzZGMEZBNTRDMUQ4NTI5QTkyOTRCQ0MyQUMwQjE4MDgzODIyOEFCLCA5MUFDNUZFQzZDNDFENDQyNUUzODk3Q0FERDVBRTUxRUQ0NzJDNTdCNzAzRUZFQTZBRUNGQzY3QkU2NzNGQjI3RDhCODA0RjUwM0VBREJDODcxQ0U3MEM5RDBCRTRGOTMsIDQ3NzE3NjE5RTZDMENBMjdCODEwRjAzRTI5ODY5REI3RDMyQjM0NzFGMURFNkI1NDY1N0ZBQzIyNzQzNkVBMTlEREIwMzYzOEVDRjU1NkM2ODQ0MjZGRUVBQ0Q2Qjg3QgorNzU2NDhFNjkwREE1QTREMkVFRkU0NTg4RjdDRkI3QkUzNjQ4MDQyMTQ4MThBODY3QTAxLCA1MjYyRDRBMUREMDVCOTMyQzcxMTFFNUFBQkRENjNCMjhCRjhEM0Q2NzIyQTY5QUE4RTUxOUJCRDRGMkQ4N0VGRjEyQUM5NzNGNEREOTFCRDk4RjIxNjNGOEU0MzBDOUQsIEIyMTJFNTJEQjI5RjQ1MDEwNzc3OUFEQjc4NTlERTk5NzhDNDY3NEEwNkQ5RUQ1MTNGQzY4RTRCQjM2M0IzODI0ODZEMDY3NjBCMzhCNTQ4RTBDODkwNzRCMDEzNjFCMworMTYwMkRBQjNCMjhGMEVFNzhDQ0ZBRDA5QUU3NkYyNzNBQTJEODBDNjNEODQ5RjkzNkUwMywgM0VBQkQwQ0MzQTk3ODEwNDczMTMzQkYwRThDQ0VEQTkzQjNBMTY2NDZGOTQyMjE5QjU1QTc2N0JFNzQ5QUY5RURFQzVCODZGQjEwQ0VFOTBDRkFBQzgyQkRFODA5QkNDLCBFRjVEM0MxNjcwMEU2MDU3QTM3MTA5QUI5NUREMzJEODZFNjcwMkE4QTEwM0NBMEJGMEU5NTYwMEIxMjhCRDA3OTREQzIzNkY0NDIyODhGQjgxODQxOUFFMkQwQ0UwNDcKKzQyMDg5MDFCMTdBRDJDQjZBNjZGMDcxRDBCNjRENzVBRkU4ODgyNTJCODhEREVCQTRBMDksIEVGQjUxRkFCQTVFMDA5MjFCNEZEQzYxNUMzNjU2QzlFMzJDNkUzRkIwMzE5QzA4RTcyMEMwNTM3QjQyQTAzN0NBMEQ3REJFQTFBOUQxODE3NjYzQjkxOUY1MEQ2QTE5LCBFQzMxM0E0MTA4NzFDNzFEQjA1NDcyNDg0QjA3OTJFODI1N0I3ODFEMzY2QTkyMDZBQTUzRUI4REI1NkYzRkU1QzI1QTA5NENGMkQ4NEIxNDdGNjk2QjY2NDZFQzk4NEIKK0M2MTlCMDUxNDcwNzg2MjNGMzREMTU1NzIyMkU4NjEwRkI5OTg2RjgyOUE5OUMyRURFMUIsIDY2MTIxOUFDNEFGOEZDN0JGOEJEMkIyNUYzOTAwMEE0Mzk3QzlGRkIxMEZDMjM0NDBGNUE3RTMzRENDODc5QTFBN0FCQkVCODlFQ0Q0NjJGN0I3RTg5NUVCN0VCQkRERiwgQzgyMDZBREQ4N0JFRUM2MEEwMUM1NUNGMTE0RDkyOUUyQUJGQzJGNTFDOEZFRTEyRkVGMjgzNzlFRUMxMjI1NEY5REU3MTExRDRDMUVGRjUwNDc3QzNCQjA0MTJEODI2CisyNTI0RDEwRjNENTE2OTI2QkQ5RTc0MDA1NjY4QjkyMzJGMkNDOTRFODdDRkNENDhDOUE1MSwgQzU1QzJENDg3NzRBRTczOURBQjU0QzMzNTRGRDJGRDQ4NjYzRTZDRjFDQkI1MkY3NDZFOTFCOEU5NkJBODIwQjQzNjVGNEJCNUVBQzhFQ0M1MTk4QkYwODFERjdENDRFLCBEQzQ0MkNBQUExNDA1QzEwQ0M4NjUyQjMyNjNDNTJBQTk5QTc4OEI1M0NEMTREMjU2QzE0NTNEMjA5MTFGQzQ5NzNFNzdBNTM5NkQwNjRDOEQxNTU3MEFEMDE3N0I5OTMKKzZGNkU3MzJEQjdGNDNCNzQzOERCNUMwMTAzM0EyQjY5OEQ4NjVCRUI5NzZGNjdEQTVDRUYzLCA2NTRGODQ0NEI0MERDNkVDQ0VBMDFGNkZDQzgzRTRDRTc0RDM5RjMzNjEyQzU3NUY5MjY4M0IyNzgyQTYzREMxRTM0NTg3QkQ0MEVEQThBNjk3NzZFMDk0NUNBMUZGMjUsIEMyRDIyNzVFMzFGNDJGMDA0OTE4RjkxOTAxRTY2MzA1MzM5MkMxRTQ5RkJGMzc1QkM3QjIxODgwMjRDREM1NDk5QzAxMzY3QkU0MUUwODIwRDFGNTg2ODEzM0JGMEM2QQorMTRFNEI1OTg5MjdEQ0IyNUNBQTkyMTQwMzA5QUU4MjNDQTg5MzEzQzJDNjRFMzc4RjE2Q0Q5LCAzRjIxNkFBMkYwMTc1NjExQjQxQkMwN0I5QjgxRjEwRjg0QjU0NjlBMkRENTZCRTRFMkJGNzY5NDhCOUJFMkU4OEE0MUE5OEMxRTVDQjYxN0ZCNzc1NDhBODI4NjA1RkYsIEZDMjk4NkEwMDdCNzJFRkI1RTAwQkIzRTdBNDM2NkUwODA2MEE5OTVEREY0RkY0OUJBNTlDQUVCMTkzQTNERDRCRUIxQUNGNDIyRjkwNjlDNTlCNjY4Q0JFQTc0MjYyRQorM0VBRTIwQzlCNzc5NjE3MTVGRkI2M0MwOTFEMEI4NkI1RjlCOTNCNDg1MkVBQTZBRDQ0NjhCLCA0OUVDMTE1NDMxQTVBOURDMUZEMUNEQjlCM0M0NkM4MEFCNDJBRjdCMDI1MjE4ODFGNUQyQkRGOUMxNEI1Q0Q1RDhBQUMwOEZDQ0RFRDdCOEEwNUM1NEYzMjJDNzAwQkYsIDkwREEzOTcyRjJEQUE4MzRFRUI0MjFDNkI1NTdCRjI3NDQxMERGREQzNjI0MTBBQTg5RUFBM0Q5Njc3RUU4M0E0QjZFQjU4MDVEOTE4RTE4MDVBQzVBRjczMzE2QTM4OQorQkMwQTYyNUQyNjZDMjQ1NDFGRjIyQjQxQjU3MjI5NDIxRUQyQkIxRDhGOEJGRjQwN0NEM0ExLCBEMDcyNEE0MEE2RERFMzQyOEQ5QjJCQUYyRTAwREE3MzJBRjQ4RUMwNzY5OENGNzlBN0NBOUVCNjdDQ0JBM0VGQjkwMUREMDA2M0MwODVCMDg1QjkyNDdCNkE3QUU4OUUsIDcyMTgwRDgyMDYwNkU0RkVBOTZGRDg1NkJGMDExN0FFNjQyRkQzRDcyRTI2Mjk2ODUyRDZFQjk4NEFGRjkwQUVERTQ0MzgwQjg0Rjg4OTcwNDVFQUNCNkUzOEUxNzNERgorMjM0MUYyNzE3NzM0NDZDRkM1RkQ2ODFDNTIwNTY3QkM2NUM3ODMxNThBRUEzRkRDMTc2N0FFMywgODMzRUQzODM4MTYxNzEwRUVFNEZDMUY2MjY4MzE4MDQ4MDI2MjFCNDlFRDAzNzRENDZGOTZCNjQ3QzMyNkY0OENGOTY2OTBCNjk4OTNFNDg5NDEyQjdGRDkzMThDRjA3LCA5NkZCMzVFN0YzODE1MjYxNDcyNDlDOTk4NDU2QzdDM0Q3Rjc1NzQ5OUE2RDMzRjdDNTA5M0UwMTlDMjYxMkE4RkQyNEY3RjFCQUEwMzJFOUIwRDdCNDZDRUIwNTJBNgorNjlDNUQ3NTQ2NTlDRDQ2RjUxRjgzODU0RjYxMDM3MzUzMTU2ODk0MEEwQkVCRjk0NDYzNzBBOSwgNDBGMjYxMkNDOUYwRTk2QzY4NzlDQTA4NUE1NjE2RTQ5REE1N0ZFQzg0MzVGQTVFQkY5MzlDRTc4ODg0NTI0Njk3MENCMEUzQ0UxQkM1QjJFRTYxMzU4MUM2MEE0QTUzLCBDMzE3QTFFNjEzMjg2MEZBQjk4ODBGMDM3QzIyOUVEODIxRDgxMkY3ODMzNzQzRTZFRjE4NjIxODdEMjEwNDYyQTZBRTJCRUEyOTFBMzQ1N0EyODAwNjZFMDU4OTRCQjMKKzEzRDUxODVGRDMwRDY3RDRERjVFOEE4RkVFMjMwQTU5Rjk0MDM5QkMxRTIzQzNFQkNEMkE1MUZCLCA1MDE3NTA1NTg2NDBGQTA0QTE0Mzk2RTQ5NDJGMTlCNTZBQUM4QkVERkU2RjBDRUE5MTYyRkQ5MURCMEFDQkMwMjdCRjM5NEJDM0M1NDU0Q0MyRjE0MzUzRUI4NUFGRkYsIDQ4QUExRUNBN0RBRDJERjI4Nzc1MUZCRDRDQ0E4ODZFQkRCMUQzODQ3NTdFQzI0OTk3QzBGM0Q5MjM4ODQxMDNFRjZFQzlBRTI3MUZCNTQ4RDY3MTVGMTY0MEM0RTNEMworM0I3RjQ5MUY3OTI4Mzc3RTlFMUI5RkFGQ0E2OTFGMERFQkMwQUQzNDVBNkI0QkMzNjc3RUY1RjEsIERBNzFCRkZBOUIzREZDQzFDOEM2OUYzOTk1MzU2MjAxODFGOTc0NkNDNDNEMTFCN0QxOEE2RTA1ODMyNTQ5NEFFNjJEMjc3MEZDMTUyQzAzNkRGMUMzNDg0NEREQTU1MSwgQzU5QTVBRjMzNzBEODMwNjkzMjYzRjA5OTUwOTRDQzU4M0UzREJBMDg0RjREN0EzOEYxREQxMkREMjNENkY4RTExMkExQjhFRkUwQjlFOUMwNjE5MzFDRDYwNzFBRDA5CitCMjdEREI1RTZCNzhBNjdCREE1MkRGMEY1RjNCNUQyOUMzNDIwNzlEMEY0MUUzNEEzNjdDRTFEMywgQzdCMzBGMUVENEMzQjU3QjM4QjUyOUVENzQwNkMwQTNCMkJEOEI2MUNFNjdDMTU0MUFGRDBDQjc4RDE0MDE1MjcxRkM0QTc4MTM2N0ZGNzNCQUI2MDYzQjA2MkNBRTFBLCA4QTg4NDI4OEJGOUEyMDBBNzY4ODQzRUM1OEU5NzhBRDVGQ0I0RDlEQjVDM0ZCQkZCNDYwNzlCNThEOEU2RkNCOTkxODc3NDJBQTRDRUJEOTc4NDczNTEwN0JCQzJDMzYKKzIxNzc5OTIxQjQyNjlGMzczOEVGODlEMkUxREIyMTc3RDQ5QzYxNkQ3MkRDNUE5REVBMzc2QTU3OSwgQkY5MjdGMkFGODM4RkFFREY5OEJCQUVFRjI2NTlGNTNGNjNFNEU5QjU2QzBBRDRCNjg2NTBBNDIwRjcwOTM2RTFGRUMzOTEyREU3NkVEMjBCRThBMjFEMERCNzdBNDIyLCBCRjA4NDc3MjFBNTA2MzAyRUM5NkM5OUU2RDMzMkI5MkIwOUUwODk3RkJFRTQyRjQ1NTJENzA1RjM0NThEQzEyRjQ3Q0EwREQ4OEYwRDNFNTEwMDAwMDUyRDMyMEMwMTEKKzY0NjZDQjY1MUM3M0REQTVBQUNFOUQ3OEE1OTE2NDY3N0RENTI0NDg1ODk1MEZEOUJFQTYzRjA2QiwgQzlCRDJCM0ZEMEY1NjZEODA5RUM4RDdCN0ZENzIxMjBCMkU2MjZDMEY4QzY0MTA4NEI2QTE5QTMxOEJFRTAwOUE2RDUzQTkzOUU0MjFEQzg3RTcxM0Y4RDlERUUxRjI0LCAxOUVDMzA0QTUwMTI0RERFQjk2Mjc1NUIyRTc3ODc0MUZBM0I2MzJCNDI3MkJBMTg3RDE3QTdEMEVGMjRBRUQ1N0FGQTg4NDExOEMzMjQ3NEUxNjQ1NEE1RjQyMDMzMzUKKzEyRDM0NjIyRjU1NUI5OEYxMDA2QkQ4NjlGMEI0MkQzNjc5N0Y2Q0Q5MDlCRjJGOEQzQkYyQkQxNDEsIENBQjNBNEE5NzgyRjM2MjJGMjEyRDJEN0MwQzJEOUI2RDQxMjlBNEE5MUE5M0Q2NDZCQkI1RUZCMDlDODIyRTI1ODAwRTFEMkRBNkI3NDkyQzRCREQ1MjYzQzk3OTFDQiwgNUE0OTVDNjNDODhGNkE3QkNDNTEzQUUxN0IzMkIxRDc4N0RDRkYyMkVBNjBFRDMwNDE1OEVEQjlFRTNDOUIwRDg2QUQ0MkY3Nzc2NEQ2OTAwREY1MEE0QjJFRjc5OUMKKzM4NzlEMjY4RTAwMTJDQUQzMDE0Mzg5M0REMjFDODdBMzZDN0U0NjhCMUQzRDhFQTdCM0Q4MzczQzMsIDg5M0U0MkE4MTI3ODE0Q0QwMDk0MTE4MzYwM0Y2NUI4NTNEREU1REQ4OUQzM0RCRDJDN0UyQkY5Q0VBOTNGNjBCODUwRDcwQzhDQUE1MzE0M0Y2QkZEMzREOUJFRTIwQywgRjcxQzY5MTkwMUE1QjgxOThGOTdGNUFGNDMyNzYwNTAxQThDNDk0OENBMzVBNTFFQTYxNDNEOEE2NDU4N0Y3OEY3OTQxNzJBREM1NjAzMjBBRkNDRUQzQzZGQTE1NjdGCitBOTZENzczQUEwMDM4NjA3OTAzQ0E5QkI5NzY1NTk2RUE0NTdBRDNBMTU3QjhBQkY3MUI4OEE1QjQ5LCAxQTk0QkY3Mzg3QkNEQTUzMDFFNkIxOTJDODVEMkRCOUU3N0E3QTAxOEM0MTU2QkYyMkE1OEQ1MDE0MTIzNzk4MjdFMTEzQzY0RTA0N0RDRjY5QkMyQTlCRTYyMDMsIDIyNDM0QjI4QUY4REIwNzI5MTlFNjYwMjk4QUUwQjMyNUIzNDQwRTM2NkE2RURBNUEyMkUyQkQ5QTY4NEUyNjkwOTE4M0VBQzUxQjRERkNEQjdGQzFDOUY0OTdGMDE2MgorMUZDNDg2NUFGRTAwQTkyMTZCMEI1RkQzMkM2MzAwQzRCRUQwNzA3QUU0MDcyQTAzRTU1Mjk5RjExREIsIDVGODMwNDlBRDJBOEVCMkY3NjNEOTY1RTMwQzA4REI4NUFEQ0JBMDI5MDRFOUZGNjAzNTJFMDRDNTkyQTI0MTRGRjdCREI4N0E2MjJDRUFFRUY4MkIzODBEQ0VDNDVCOCwgQjg4NEU0N0E5QkNEODVENzFCNTJCNTc0MjAyOTczRkQ2NkM0OUQ1RUQ5ODk2QUNEOUFBOTVDRDcwRDQwMDg4QUQwQTg4Q0FGNUU1RDhEMjRBRTU0MUMwMTE4NjgwRkMKKzVGNEQ5MzEwRkEwMUZCNjQ0MTIyMUY3OTg1MjkwMjRFM0M3MTUxNzBBQzE1N0UwQkFGRjdDREQzNTkxLCBFNjQyN0UyQTU3QkU1Q0ZDN0I4MjM1MjhBRDUxMDBCQzQxNTQ3ODlBOUNGQjVBMUQ5MzUzNkEyNEU3MkE0Q0QwRDNCRDM4NUU0QUZCNUFDRUM5RTBGRDM3RjQyQjgzMiwgNzc1QUY3RTkwM0VENjhENDQ1NjI1MkVCRUVFMDRGQTVDMUZCRTkxNzc0MkQxNzlGQUIyN0EyQUYxNkYxQkNBQkEyMTMxRjZBNjY4NDJDMjZBNDA2MDk4QkUwNzc4RjYzCisxMURFOEI5MzJFRTA1RjIyQ0MzNjY1RTZDOEY3QjA2RUFCNTUzRjQ1MjA0NDA3QTIzMEZFNzY5N0EwQjMsIDg5MkZEMjk0Rjg3QkREQUIzMEYzODNDRUNDNzZEMTU5N0FDRjA5REY4NzI1NEMzQjRFMUM2QzhCNTEzNUZDRUIxN0E2RDM3MjMyRUZBM0Q4QzQ1RjE2RjMxMTBCMTdBQywgNDM4NUU4NThDOEUzNDcxQTREQzAyQURBNDU4NDgwODMzM0IyNTMxQjZGNUQyMzQ2NkJEREYyQTU0NUVDRTgwMUI0NEY4MDBBODIzNTcwODBFNTNEMjU0NDM2NDM2OTUzCiszNTlCQTJCOThDQTExRDY4NjRBMzMxQjQ1QUU3MTE0QzAxRkZCRENGNjBDQzE2RTY5MkZCNjNDNkUyMTksIENBOTEwMTI3RTk2RDJFMDAzOThCODhBODkzM0Q5Q0Y1REIzNjJCRUYwNkZCOUE5QTQ2NUM2NEM3Njc0OUY4NDdCOTE0RjVEQTE3NjFBQjI2QjE5NEVFODc5RjA4MUY1RiwgOTgzMjdCRDE5MEM5RjRDMUI5NDE3ODk4NDJERDBCNDc1QjVCODE2NzBGODBDQjgyM0E3NzkwMUNGQTgyMjJEOTlFNTM4RDcyMjE3Q0Q1REIyRDI4MzQxMjJBNzExRjAxCitBMEQyRTgyQ0E1RTM1ODM5MkRFOTk1MUQxMEI1MzNFNDA1RkYzOTZFMjI2NDQ0QjNCOEYyMkI1NEE2NEIsIDhDNDk0NEZBQUQxQTU3OERGMjg1RTY0NzQ0N0M4MTVEQkNCQzcwNzBDRTM3NDY4QzRGMURCRDI4RUFGMEYwNTM3NURGNzY0MTFCNjA5QjcxMDQyODM5NjMxRjVBODU4RCwgNjQ5NThGQThEMURGNzFFQTM5QjdEREM3MkNEMjA0MzY2OUZGREE3N0IwMjkwN0QxRjM0RDc2MzY0NUUwMTMwMTlBMEE4NzFENzNEMDFCMzQwQkM0RjQ1RTYzNDBFQTRBCisxRTI3OEI4ODVGMUFBMDhBQjg5QkNCRjU3MzIxRjlCQUMxMUZEQUM0QTY3MkNDRTFCMkFENjgxRkRGMkUxLCBGRjdFNTg0QzI4OUQ0RDk3MjE1QzlDNDM3MkFDRUMyNTlCNjk0NTc0QThBQTc0OTA1NjE4MUZGRjNGNjAxNzE2RkE5NzJGRDJEQkIxMDQ1MkRBMzUxRjEwRkZCNjMwQzAsIDEwOEY1QjRCNDhCMEZENTY3RDhBN0E2REZDM0E3RkFBMjg4NTAzNTgxMzIwNjE4QkJCOUMyMDAxMjRENENENTFFNDc5Q0YzMjA5NkMzRTZERUY2NkE1NDhBMjY4QkI2NgorNUE3NkEyOTkxRDRGRTFBMDI5RDM2M0UwNTk2NUVEMzA0MzVGOTA0REYzNTg2NkE1MTgwODM4NUY5RDhBMywgQjUzM0I1RENDNkQ4QzQ2NjZBRTgzNTc5M0ZEMzlFODdDRUZGNTdGQjdDMTEzQTNCOTlGODJEMzQ0OEZFQzAxRDA4OEY3REI3NTA3MDdCNTU3M0VEMDU1RTc1NUEzMjBFLCBFNjQ3OEU3Rjk0QkMyMzM4QzU1MUFDMDNDNjBEODY4QjBERjZDQjY2NTQzOTdGNkFDOTBCOEMxMjUxRDJBMUUxRDJGQjcxRDVGRkJBRjQ2ODc1RkUwQ0MxMEI0Q0E3QUUKKzEwRjYzRTdDQjU3RUZBNEUwN0Q3QTJCQTEwQzMxQzc5MENBMUVCMEU5REEwOTMzRUY0ODE4QTkxRUQ4OUU5LCBEN0REQ0JCQTI1OUE2RTQwMThBMEY2MkREMERDNkFGODQxMkJCQTFGMDkwOUM4OEU3MUI4M0Q5QTc1Q0VGMUE2NkY4QTI3QjVBODc1NEFENzdCMEE5QTBDNjRCOEYwRkIsIEM0OTBGNDIyRTVBOEY2NDI2NERBNUU4MjY5MzY0MEM1RjA1MDVGOTI0RjU1MzEwNTEzMENDNzA1RDRGNDY5RTM3NjhEOUEyOURDQzJGOUMxRkU2RUJDNEVEODM0MDM0OQorMzJFMkJCNzYyMDdDRUVFQTE3ODZFODJFMzI0OTU1NkIyNUU1QzEyQkQ4RTFCOUJDREQ4NDlGQjVDODlEQkIsIDNBQzA2Njc4NEFDRkRFRDI0MDVFOTkyQTI5N0VEQkY5OTcwNjMxQjJGNzNBMDY5NjYxODg3QURGRkM4NEREMzUxMjFGM0M2MUExNkE5REI0NDFBMjU2Q0FFM0FENzZGQSwgMjkwMjQyOEVFRTIyNEM5NDA2QTMxOUZENjA2OEY5NThBN0FDNDkwQTZERkE3MUEwRDVENkRDREYwNjQxMkM2OEMyRkEzRkRFQjBEODI2NkJBQ0M0MkY5QjZDRUE2MDFCCis5OEE4MzI2MjYxNzZDQ0JFNDY5NEI4OEE5NkRDMDA0MTcxQjE0MzgzOEFBNTJEMzY5ODhEREYyMTU5RDkzMSwgOTA0MzRCMjYzNjc5QkNCRUMwNkJBRDVCQjQzQjE4NUU5MTI4MzFBMzFDMDYyMjYyOUY4MEFBMDA1QTA5QzM0QjY1MEZCQkU4MkU3MzVGNEI5NzU1MTU3RTFFRDdGNjE5LCA1RkVCODQyRjk5Q0Q1NzEyMDJFMDVFREQ5RENFQkVFRTcxMzNBMzg3QTNDRjMxMTRERTIxMEMyQjA3NkZBQjY1MTY2QjRBRDQ2MjExMTM3Q0NCQzE1NjQ0NkYzNDhBMDEKKzFDOUY4OTcyNzI0NjQ2NjNBRDNCRTI5OUZDNDk0MDBDNDU1MTNDQThBOUZFRjg3QTNDOUE5OUQ2NDBEOEI5MywgMjIxNkI4RkFFQzYwRjg3NzI2NUE0NDBEMEYzMTFFNjVFNkFFMzEyQkUwMzI2MDQwOEEwMURBQTFERUMxQzE4MDAzQzI5NjU0NjFDRUJFNjE0NUI5OUZBRDZBNEVGMjgyLCA1RkI1QjZBMUM3QkNBQTYwOEFDOUM2OEFCNEQzRUI0MTk0QTAzNTgzNUQ0NTUxOUYzNERFNTlBRjREMzRCNjg4N0MzMzk0NTAwQUI1OTE5M0I3RjY0NTg5NjY3NzRBQUEKKzU1REU5QzU3NTZEMkQzMkIwN0IzQTdDREY0REJDMDI0Q0ZGM0I1RjlGREZDRTk2RUI1Q0ZDRDgyQzI4QTJCOSwgRTAzRUUwM0Q0ODg4MjZBRTg5NzI1REJCMDAzOEU1MDNGODc5QUVDN0RCRDNDN0E4OEU1MjIyNDZCRThCMkM0RkUyRjFGRjEwRDU1Qjc0OTg1MkFDMkJDOUY1NEM1MDc4LCBERUJCRTA4NzcxMjQwQUJEODVBNTA4QkM2NEVEMDlDQzc4Nzg3Rjk3MzkzQzU4QkFBMDc0OEJDOUQzMUY4QTEwN0ZERjg4RjAxODU5NkMyMDBBNEVFRUYwMzAzRDEwQ0UKKzEwMTlCRDUwNjA0Nzg3OTgxMTcxQUY3NjlERTkzNDA2RTZGREIyMUVERjlGNkJDNEMyMTZGNjg4ODQ3OUU4MkIsIDZDQTFCRDVGRjI3RDY4QzA2MzU4MjNBMTU2QzU4Q0Q4NDIwNzdCMTJEMDUwNzI5RENDRkVGN0JEQUREN0E3MDBFQ0YxMTQ1MTk5MUMzQTMwNEVFNDg1MDcyREVDMjMzOSwgNzVFMEVGQ0Y4MEQ0Nzg1OUUwMzBCQjRFODlEMjVGMzZBNkU5M0E0RkQxOUY4MTkzRkEyNjc3NTIzMDRDOEIwODRDNDI2QzBDRDI4MTFCRjE4ODYwM0UxOUI2Mzk2OTQKKzMwNEQzN0YxMjBENjk2QzgzNDU1MEU2M0Q5QkI5QzE0QjRGOTE2NUM5RURFNDM0RTQ2NDRFMzk5OEQ2REI4ODEsIDZFN0ZEMENCMzY4MzQ0MDY4QkU2MTRFOEQzQzU0RTkyMERENDMzN0VDQjY0NUFCODE2QkE0MjAzMkM0MEFGOUU0NEE3OEQ0NzhBN0QwMDc4M0ZDMjNBRDBDNkM2RDNDNSwgNkI4MTQ2QzY4MDk0RTZGQzY4NzdFRTk5OTY2QTRDOUJEN0IxNzI3NTU0NTRBOTBCQUZGQjlCOUVDRTI1RDBDMTE4OEU3MjNFNzgzRDZDMkM0QTExRTIyQjY1RENBNUNBCis5MEU3QTdEMzYyODNDNDU4OUNGRjJCMkI4RDMyRDQzRTFFRUI0MzE1REM5QUM5RUFEMkNFQUFDQ0E4NDkyOTgzLCBCNzk2QUM1ODIzODhCNTZGRUY5RDM3NzU1QkI3RTUyOUZDMzkzQzU5ODE3RTJDMkEzMDM2NTM1MkUzMDU4QkRFQkJDMDVBMTc0NzRDOUIyMUJCMTc3RTREQURDOTBBMzgsIDU4MTEyRDQwRDMzOThGNDkwOTQxOTZBOEZEODEwOTBCMUNGNEY2MEM4RkU1NjdEMjUyMUM4QzBEQjU4MjlCNzU4MjQ1NTdDMDAxMDVEOUZFNDA3Q0ExRjIyMkJFRkNCCisxQjJCNkY3N0EyNzhCNEQwOUQ2RkQ4MTgyQTc5ODdDQkE1Q0MxQzk0MTk1RDA1REMwNzg2QzAwNjVGOERCN0M4OSwgNjcyMjc2MzM0OURERTYzMDU0ODhBNTZCRjU0QzY1RURENTA1QzM2OEQxNDdDN0M1QUJBRTI1M0VERDg3NEQ5MjdFMjcwNjQxRUY2MDZEQ0M1OTQ0RUFGQjVDODE2NzU1LCA2N0JFQ0M1RjEyMjIxQUVFMkYxOEVBNkVBOThCMUFDMzU0NDgwNTY2QjI3MUEyQTk1Q0YxNUQ3QUE3QzRCNDBFRTQxRTJBNzc1OUQ0MjIzRTlERjMwNjFBOTcyQjk5OTQKKzUxODI0RTY2RTc2QTFFNzFEODRGODg0ODdGNkM5NzYyRjE2NDU1QkM0QzE3MTE5NDE2OTQ0MDEzMUVBOTI3NTlCLCAxRDdEMjAxRUIxRTZEQjUyRTFENEVCODdDODU3RTA5MzMzNzg3NjgyMzhCMDJDQkY3NDg2NEJDRDM1ODU0MzI2NzBGNzk3MEFCMTUwQzZDQUQyMUM0Q0NDQ0U5QUJCN0MsIDY0Mjk0MjlGQ0QwNTg3NjlDMDU1N0YxRjU5MUQyMjgwNEM3MUUzNENGNjJBOTJBRjMzOThDQTI5NkEzRDQyMkRBNzYzMjZBRjdEMzQwMUNCMEQ5MjJDMzVCNjA0NjgKK0Y0ODZFQjM0QjYzRTVCNTU4OEVFOThEOTdFNDVDNjI4RDQyRDAxMzRFNDQ1MzRCQzQzQkNDMDM5NUJGQjc2MEQxLCA4MThEREIyNjJEQkEyMjRCNDFBNEU2QkNCM0JDNUIwNkQyRTEyMTUyOTVBNTc5NUJFRTc2MkEyQjFBQjgwM0FEQUIxQ0Y3OENBMUU5QjQyODY3ODc2NkM3ODg5REMwQjAsIDI4NTFCQkMzOTkyMTZEMDlCNTJFM0QwRjUxOEZDNDQwQkMxMUU2NUI4RjYwRkQ1RjYxRkNEQzU0NDc0MEY0QUZBQTA4MDg4MDE1OEIxRTg5OUY0Q0UxOTQyN0Y4OUU0RgorMkREOTRDMTlFMjJCQjEyMDA5QUNCQ0E4QzdBRDE1MjdBN0M4NzAzOUVBQ0NGOUUzNENCMzY0MEFDMTNGMjYyMjczLCA2MEQ2OTI2RTU5NDE3MUI4Qzg4QzFCODVBMzE3NjUzRkEwQTVCRUNGOTEzOEJBMTVCQzVDREMzNERBMTM5REIzODQwQjkwMjc0Q0E0RDkyRjQ3QkE4NEQ3QzA0NUQ2MTYsIEQwODcyQTJFNzM1REVCMjRBRjgwMTI1MkIyMDk2RTJBMzQwNjcxRjdCNEIyQjg5MDYzQzJGMkU0RDUxRUQ0ODk3OEI5OUZCQ0EzNkY3ODFGMEE4MDVGRThGNEFBMzMwNAorODk4QkU0NERBNjgzMTM2MDFEMDYzNUZBNTcwNzNGNzZGNzU5NTBBREMwNjZFREE5RTYxQTJDMjA0M0JENzI2NzU5LCA2Q0UwMEZGRTQzNkJFQUVCMDdDOTdDM0UyNzNERDE2NkQ5RjI5MkQ4Q0RERTg4NUIwNDY5N0E3NzI2N0U5OUM3QjNFODRDRUM3NEIwODk3NDc2NEVGQUZDRUQ3OTcxQ0EsIDEyRkM0M0YwNDNDOEI4QkVBOUM5RTFDQTY3NjAyREZBRTIyQzJEMUI5NzU0Q0I0NEY0NTNGQUU2NzEwQTMxRjMzODkyNERFNEZBOUFDMDBEQTExNkI2MTM4MkQwMzkyMAorMTlDQTNBQ0U4RjM4OTNBMjA1NzEyQTFFRjA1MTVCRTY0RTYwQkYyMDk0MTM0QzhGREIyNEU4NDYwQ0IzODU3MzYwQiwgOUQ5NjA4OEUyRDQxREU5QkNFNDU4QTZBRDgzQkZFOTYzMUNGNTQ2MTYxNkI1Q0EwOEYzMDBEQjYwNUEwRkU5NTBENzYxNzZEMzFCNzIyNUY3RTEzODY2RkI1N0ZFNURDLCA1RkNCQzNDMjdFOEEyRTE2Qjk1Q0E5QkY4MzJBN0VDNDE4NjQyOTI5MTE2NENDMTM0RjZEREU5NkRBOTI0MEYxMzU2MUQ1RTg0RkE0RUIxM0ExRTQxQkQ2ODM3QjRDRkEKKzRENUVCMDZCQURBOUJBRTYxMDUzN0U1Q0QwRjQxM0IyRUIyMjNENjFCQzM5RTVBRjkxNkVCOEQyMjYxQTkwNUEyMjEsIDJEMzQxMEQxNjA2RkFDM0I0REJGMTI2NUM4MkYyRDVGMjExMDM1RTBDMkU5MjhEMEE5RDE1MTMyM0Y3QjMyMzYwRTUyMjM4RDQyMjY3OTIwMEVGNjJEQTJFNkMzNjAxMywgNzlCNEYyNTY0MzhDMDJCM0REMEE1Q0REQkE5RTFGNkUxOEE5RDY2OUQzNjUyRjhGQURENzlBNTMwRjhDMjJDNTQwMjkwMTVGMTVCMTA5NDE3OUFGNUQ5QjRCOTA4OUU5CitFODFDMTE0MzA4RkQzMEIyMzBGQTdCMTY3MkRDM0IxOEMxNjZCODI1MzRBREIxMEVCNDRDMkE3NjcyNEZCMTBFNjYzLCAxNzJGRjQ5OERCRkY3MDY1NDFGRjMxQUZGMzJFM0VCOUYwN0ZDODE3NDhDRDg0QThBRUMxRUU5Q0YzNUMyRTE3NDA3QTgxMkREQUE1NDkxRTMyRTgzRjY5QUY0MjcwODYsIDZGNjdGNjZCN0JEM0ZGREU0QzgwQUVFQzAyNkUzMUQxRDdDRDQ1OUE2MzYwRUNEOTAwQTg3OUE4QkQ0MjdEMzQwQjBBOTI1REE4MzY1NEM5ODU1QzA0OTEwQjExNzY4RQorMkI4NTQzM0M5MUFGNzkyMTY5MkVGNzE0MzU4OTRCMTRBNDQzNDI4NkY5RTA5MTMyQzFDRTQ3RjYzNTZFRjEzMkIzMjksIDMxNjI2MjY2Q0Y3MzVGNzhDNUE5QkE5OEVGNkE5RUIzQjcxNDA3NzM2NURFQTlBQkVEQzRDQkZFMTgxMkU0RjgxOUI1RkYzMTIzQTJBN0FDNjgzRUE0MkU1NzhCNkRBNywgQjBGRDY1RUU3QTM4RTRBNDM4OTQxMjgxMUY0MkEwRkI3QjIyMzE4M0EyMjkyRkEwQ0Q4QTVDNjZGMDU0Qzk4N0Q4QzFGRUU3QTU3MUEyQjQ1RDhCRjEyNkJDMUJFNUEKKzgyOEZDOUI1QjUwRTZCNjQzQjhDRTUzQ0EwOUJFMTNERUNDOUM3OTRFREExQjM5ODQ1NkFEN0UyQTA0Q0QzOTgxOTdCLCA0OUI5QkU5MDcwRDRCQkNBRUYyMzMzM0RFQUUyQTdFMzk4NDZFQTU3Qzg1M0M1OTI0OTA0OEQ2Q0EzQzcyRUY4QUM1QzE1OUIzNzFFMTZGNTk5QkZBQUEzNThGQ0NGQzksIEM0NDBDNzE3RUJGQTIyMDIzRDc0QkU2OTQ1QzdGMDA0MEI1MjAyOUE0MkFDOUZERUYxRUYzNjc1NDc4QzU2RjAxQjcxQUEyNkJGRTBGMzBFNzE5NEM0QTkyMjY4MzlGRgorMTg3QUY1RDIxMUYyQjQyMkNCMkE2QUZCNUUxRDNBM0I5QzY1RDU2QkVDOEU1MUFDOEQwNDA4N0E3RTBFNjdBQzg0QzcxLCAyM0Q3RjU5N0JCQTE3QjQ1MTc0NUNBMjM0MjhENjJCQTcwNzEzREQ1QjVCNUI4RkQwNjBCQTRENzA3MEYzQTg1MzA5OTZFQTk2Q0Y2QzQyM0ZFRTlGMUQyOEIxMkMyMjIsIDFFQjVDN0ExMjU5MDI2NTkyM0Y1QzgwM0U1MTA1MkI3NTQ3OUIyQUY4NDhDNEZBQTg5OEM5RjkzMTMyQzM3MzFCQkI2MkUyMEIzM0Y3MDY5NjQ1QTZCOTgwMjE0MEU1NworNDk3MEUxNzYzNUQ4MUM2ODYxN0Y0MEYyMUE1N0FFQjJENTMxODA0M0M1QUFGNTA1QTcwQzE5NkY3QTJCMzcwNThFNTUzLCBDNTJCM0U2MzYwMTExOTMxQkJEODA3MEY3OUJCM0YyQjFDNTk0RDdEOEYyOTAwQUQxNDI0M0YxOUE5RDVENzM5RkFBMEM4OEYzMEQ3QzZCRjlGOTgzMkI0MjMwRDhENzEsIEJCODJFQ0Y5ODIwNEJCQ0UyM0E3OTRENUQwNDlDOTkyNUMxMzIxRThGN0VEQzk1MjhEQ0FGRTA2RkU5NkVEMUUxMUM5OTIxMENGQUE2N0FGNEE3MEI1NTUxRTk1QjMzNworREM1MkE0NjJBMTg4NTUzOTI0N0RDMkQ2NEYwNzBDMTg3Rjk0ODBDQjUxMDBERjEwRjUyNDRDNEU2RTgxQTUxMEFBRkY5LCBCMjYwOUFGQzU3QTgyMzhBRDRBM0MxNDA3NzczNkIzMjQ5MzQ1MkM5NjJEMzY5QkE0RUQ4MTgyNTUwRUFDRTcwMjUyRUE5REE3OTBDOTg3NjdGNDZBODYwM0VDMEE1M0IsIDlFODNDNUZBMzI3ODlDMUU4QkQ3REJFMDREMEI5Njc4MEM5M0VGRjMwRkNFREQyODREMDIzRTU4OEZEMTI2OENBRDk4N0Y1Njk4MzYyREUzRUQyNEQ5QkYzRTI5RUM5NworMjk0RjdFRDI3RTQ5OEZGQUI2RDc5NDg4MkVEMTUyNDQ5N0VCRDgyNjFGMzAyOUQzMkRGNkNFNEVCNEI4NEVGMzIwMEZFQiwgMkFFOTE2NzMyREU3RENEOEM4NTI3ODkwQzEwQUEyMTg2ODhCNTc4MDc4QTI1MDMzQ0RCQzU3RkFGRTc5QUY4MkUzMDhEODYwQkVGRTc0N0VBRTE5RjVFRDhGQTlEMTM2LCBFNTk5M0Q2RUMzRUE2RDhFMENCNThENDAzNzlCNkEwQzQ4OUQ0NTVGOUFDNTQyOTdBNDFEMjBDQkY5NThDRUM3QjM1QTAyNTlFMEUyNDRGRUVEMUVERDVFQTg2QjlBQzMKKzdCRUU3Qzc3N0FEQ0FGRjAyNDg2QkQ5ODhDNzNGNkNEQzdDMzg4NzI1RDkwN0Q3OTg5RTQ2QUVDMUUyOEVDRDk2MDJGQzEsIDdBNzQ0MzREQjIzMEM0MEFBQTZFNjY5NkVCOTczQUE2QTAyQkIxQTg1RUE5QjQwM0IyMUI3RjRGODM0MDRGQkY3OUQxMUI0REM0MjY0Qzg0OEVFOTg2M0Q0OURGNjMxQSwgQ0M2REEwNDk4NDc4MUQ1NzE5OUJCMzZFQUU2M0I2NTA0MDJERUYxOTY4MjE2RUUxOTRCQTM2QUVCMTc2QjdCRjQwREJERTI4RjY0NjVFQ0YzMzcxRjA0MEI5QTZBRkYxCisxNzNDQjc1NjY3MDk2MEZEMDZEOTQzOEM5QTU1QkU0Njk1NzRBOTk1NzE4QjE3ODZDOURBRDQwQzQ1QTdBQzY4QzIwOEY0MywgQjhGN0Y0NjNFOEREMjZBMUE1RkI0OEQzREYwQzA4QTRGMkVEMzc4NzdCNEEwNTVGRTREQkUwQkE0RTg3NjFDMUQ1NzJCQUFEQUYyQTk5OUM0MTQ4QjQxREFDNjkyNzAwLCBCOTE0MUZENUFDMjQ5RkNFRjYzQ0ExRTEzODUyRUQ0QTg3NDMxNEU3NEM4RjdGMTU5NUY3NzQyQTg2MjZEMjg1MkY5RUFGMzFBQTE5ODZDM0U1N0E4MDgyNkQzRjRDNTgKKzQ1QjYyNjAzMzUxQzIyRjcxNDhCQ0FBNUNGMDEzQUQzQzA1REZDQzA1NEExNDY5NDVEOTA3QzI0RDBGNzA1M0E0NjFBREM5LCA2OEUzNENCNDhEQkIwMDkyOUQ5QkY2RkNFRjk4QTExN0JCRDUxMEMyNTY0RkEyOUZEMjczNTY4MDU1MEJBQjJDRDkzREY4QUUxRTZBNEFFRjExNTZBNzA5M0JERDA3RDUsIDc0RkEzNzgwMkY1M0YzNjgyQkYwM0YyQkNBNDhDODMzQTdCNDBEMUFFRTE4MUZFNzY0NDU5QTYyRUI5OUFFOTRFMEQ5MjA0ODE4NjcxN0NDRjJBQUQ3QzQ4M0Y2QkYxOQorRDEyMjcyMDk5RjU0NjhFNTNEQTM1RkYxNkQwM0IwN0I0MTE5RjY0MEZERTNEM0JEMThCMTc0NkU3MkU1MEZBRUQyNTA5NUIsIDRCQTE4NTZGRTUzQTM1RTI1NjM1QUFCOUYwODBFQUREOTdGOUM5NkNDNDlEMDEyOTNGNjE3OEY1QjA5QjczNkM2OTY5MjQwMTE0M0QxMjAwQ0VGNEU4QjUyQzU5ODREOSwgREQ4RDBCQkZGM0U2NTExQUE0NTMwNjcxRjUyNUFCQUJGRUEyQzVENDUwMEMxNTEwMjkyMzIxNzJGREM2OUNFNUM2OUJCNTNBMkFFQUZFOTlDOEY3RkNFMUVFMjVGRUNBCisyNzM2NzU2MUNEREZEM0FBRkI4RUExRkQ0NDcwQjExNzFDMzRERTJDMkY5QUI3QjM3NEExNDVENEI1OEFGMkYwQzc2RjFDMTEsIDIzQzRDNzMyMkMyNzRDMUZEMTBCNEFFRUE3ODRGQTRDOEE3QThFNzI1MzZFQUUzRjhBOTdFQjNGQjFCMkI4RDdFODgwQTM5QjNCMEU0REM5NUYxQzcwNEYwQUNFMkYzOCwgMzZGQjYyMkUwOUE0M0Y2MkE0QzU0MzQ4OEEzMjM5RjM0MUQyMzExMTVDNEJCRTBENzU3Nzg4M0ExMDlFRDk0QjE5OTc0RDJCODdCNkQxQTMyNERGQUI3M0M2REFGRTAzCis3NUEzNjAyNTY5OUY3QjAwRjJBQkU1RjdDRDUyMTM0NTU0OUU5QTg0OEVEMDI3MUE1REUzRDE3RTIwQTBEOEQyNTY0RDU0MzMsIDI5RTcxNkFDNENGNUVGQTkwRTc5RDk5RUVEOURFRUI0NkVDMzkyMjlCNDc3Rjg4NzE3NUM2QTY4Q0M2MzQ1QjVFRDFBNzYwRkJDOTk3RTZDRjNFRUU1ODQ2NzkyNzFGQywgMkRBRkVBRDE3Q0RBRTI3QzgzQThBQ0VFQkVCRDE2NTU3MTlDNzQ0OTVCMUJEMDVDMTIzMjU0Q0VFMjREMzQ4QjBFNkMzNjQ5NDA5RjM5MUFBQkU1MUU2MDA2RTQ1QTVDCisxNjBFQTIwNzAzQ0RFNzEwMkQ4MDNCMUU3NjdGNjM5Q0ZGRERCQ0Y4REFDNzA3NTRGMTlBQjc0N0E2MUUyOEE3NzAyRTdGQzk5LCBBODQwRDdGOUZFQjIzNTFDM0M2QkYxODcyQUMwMjJBQzA2OEYyNjVGM0ZBMEQ4MTQ3NjIxMTlDNTE0QkUwMDEwRjYyREU3NDFFNDY2QUVGRDVFN0Y3MjE5MEFGNUM3RCwgRkIwRTVERjA5OTZGMjA2RTcxNTQ0MTFFOTkwRDgzRDBFNzMzOTdBMjdGQTc5NUI4MTRCNjhCMzQ0RjE3MjI0OEIwRjFCNzc4OTg0MEI3OTI1NjREODNBRDg5ODUxMEJDCis0MjJCRTYxNTBCNjlCNTMwODg4MEIxNUI2MzdFMkFENkZGOTkzNkVBOTA1NTE1RkVENEQwMjVENkYyNUE3OUY2NTA4QjdGNUNCLCBCRjBEQTc3QjQ5RkJCOEVBMkJCNDMzQzg4NzNEOTY0ODVCNEE2MjM4MjBCOEZERjgyNUEzNEI3QkI1RUE2RjBDNDE1MTAyQzZCQ0UwMzg0MjRCRjNEMzEzQkJEM0U3QkIsIDM4RjgxQjlGMzNERjM5MEJBMUQxMDAxQTA5NTMwRTM1RTc3RjkxRkFBM0ZFMzVDQjVDOTVGQkU3REI0NUU4OUQ5QkQwODFFOThBMEExRDcyNTA4NjZCMjcwMzBGMTFECitDNjgzQjIzRjIyM0QxRjkxOTk4MjE0MTIyQTdBODA4NEZFQ0JBNEJGQjBGRjQxRkM3RTcwNzE4NEQ3MEY2REUyRjFBMjdFMTYxLCBFRjEyNDBGNTM5NkI3NjlBQkIxMDc4MUI3OUY5QTFEMDRDOTRCMDg5NTEyMjk4QjFFRTRBMUU1MDczQzIxRkREREY5RUExMTA2RTlDNzNEQzBDMjc2MzZGNkIxMTk5MywgRjA0NTFGREFFMTVCRDU1RTE5OTJBRURCNkQ5MDdERDBBNkVFRjVFOUEwODcyQkU2MDQyRjhFODQ4RjUzNjE4MEZEMTNFQjcxRDc5MkUwRjhGQTQ4NUM4RjY1OEJGRDEzCisyNTM4QjE2QkQ2NkI3NUVCNENDODYzQzM2N0Y2RjgxOEVGQzYyRUUzRjEyRkRDNUY1N0I1MTU0OEU4NTJFNDlBOEQ0RTc3QTQyMywgRjNCOEE3MEFFOTkyMEY4ODVEQTI0ODdCODM5RkNDMjM4RTc4RDNEOThCMjRFQUI4QjI5RjMyOTE1OUFCMUEyODU1N0IwMTU0QzkyRjcyNjhDRTlGNDhEOEM0N0RBQTkyLCA3QzU0NDc5M0I1RURENTIzRDIxN0VCQkI0RUEzQzM2RjgwNzVCMTE2NkMwNjU2N0Y2NTM4QzNGRjUyMTJFQzdBQjQyMkNFRENGNUI0Q0FBODZEQzlDRTI4RTc4MEY2NgorNkZBQTE0NDM4MzQyNjFDMUU2NTkyQjRBMzdFNEU4NEFDRjUyOENBQkQzOEY5NTFFMDcxRjNGREFCOEY4QURDRkE3RUI2NkVDNjksIDVCOTkwMEIyRTE4MTQzN0YyMEM3MzcxQzlFRkI2RERBOTcwOUFCM0U4MzIwQUQ3NUJFREEzRDBBMjQ1NEY1Qjg0Q0ZCOTgzMTFGMEVCMTVDRTQ0N0EzOTU0ODJBMzFGQywgRDE2QTg5ODgxN0YyQzlGQjJEQzg1NzQ4NUY5QkI2MTVBNUFFNzI1OEJENTk5MkE1NjVGQTc0RDIyMzJGRDc1NEU3MEVBMzVFQUExODEzNTVBQUMzMzc0QjVCRDlGRUQyCisxNEVGRTNDQ0E4OUM3MjU0NUIzMEI4MURFQTdBRUI4RTA2REY3QTYwMzdBQUVCRjVBMTU1REJGOTAyQUVBMDk2RUY3QzIzNEM1M0IsIDNCOEYxQ0UzNTNBQ0IwMTFGNDlDOTA2NEM2MTlCQUMwRENGNTFFMThBQkUyOERFQTQxNEE4MTUzMUE1NjVENUJGOTQ4NjU5Q0M2OEE5MjA2MDY1OEU4NzA2QjEyNTRCLCA2RTkzMTZDREQzOThGRDExRDg3OTVDQTQ3MzgyMTA2RkQ1NzM4MzhEMTRFNjEyNUYyMjhENzVGOUNCOUMwNjU4RTQ1ODNDRTNDNkE3MkE5NzdDMjlGM0Y4OTE0MUZBQUMKKzNFQ0ZBQjY1RjlENTU2RkQxMTkyMjg1OUJGNzBDMkFBMTQ5RTZGMjBBNzAwQzNFMEU0MDE5M0VCMDgwQkUxQzRDRTc0NjlFNEZCMSwgNkFENjk4MDQ0NUQ5Q0FCODNDRDM1MzdCMkVCMTY3MkUzRkNDRkFGRUVFOUI3MTM2N0U2MEE0Nzc5MEEwRDQ2QzFEQjk2MjgxMEQ3MzRGMjA3QTE0MjIwMzRDMDU1OTI2LCA2MUNCODcyMTQzOEJBQTBGNDEzNURCQ0JGMUZDMzU3NjExOTQ0REJDNzFDOTk0MzY4NzRBQTNDRTI4ODQxMEMwMkNDQkUyMjIyNTU4ODUyNEUyMTc5NEZFNDQzQzhEREQKK0JDNkYwMjMxRUQ4MDA0RjczNEI2NzkwRDNFNTI0N0ZFM0REQjRENjFGNTAyNEJBMkFDMDRCQkMxMTgyM0E1NEU2QjVEM0RBRUYxMywgMTZGMjc0NTg0QzQ5RTNBMUYyMEFGNDAzQjRGODQ0MEZGMEQ2QUIzMkExQTIzQzA3REE1ODQ4MTgzQ0ZDNTA5NDAxRUZGNTExNDgxOEZBNDVBQ0I4MTkwMzA0MEMyRUMzLCAyM0ZFRDRCMjJFNzBFNkVBNjk5RjMzRTE1NEE4NjFFNEFDMjc4MkFFQTYyRDU0RDdDQTFGQzU4OTNBNTg0Q0FDMzk0NDNGOEZBQzNBRkJDRjlDMUIwNzM4NkMyMDlEMQorMjM1NEQwNjk1Qzg4MDBFRTU5RTIzNkIyN0JBRjZEN0ZBQjk5MUU4MjVERjA2RTJFODA0MEUzMzQzNDg2QUVGRUI0MjE3QjkwQ0QzOSwgMUE1ODI1RDM5M0UxQTQ3MTkxRUJBMTM0RTdENjBGRjYxMTM0ODlGOTkzODRBRTcwMDA4NDRBNDdFRjE3ODEwNzk1NzJCRkEyNkJEQTBEMjk1MUM3QkRBMUZBQzIwOTk5LCA3NTJFRjJDOEVBQjU5MTI1QTgwREQwRkUzQzQ0MkEyRTBENTBBNjlEN0UwMUJGMERGQzNBOTg0MTNDMDQxQ0E0NDlCOEJBQzg4NUJDRjZGOEJENThDNjA0QTEyQjY5NjcKKzY5RkU3MTNDMTU5ODAyQ0IwREE2QTQxNzczMEU0ODdGMDJDQjVCODcxOUQxNEE4QjgwQzJBOTlDOUQ5NDBDRkMxQzY0NzJCMjY3QUIsIDNCODJGOEYyQzgwMTI1RUUyQTQzMjM1MDM3RjVCOTUzNzNCMDQyMkZBMkY1NzFCNTBGODhFQjgwQzJDODEzMUM4RDhCM0Y2NERCOUZBMTVDRTQ0M0NDMTU5ODlCMkJGMCwgNUQ2QjY2M0U5OTUyODk0NjVCQkEzQ0I0Mjg4RkUyOTMxMjQzQ0JCQUM4QjExQTI0QjQ3RjFDOUQ4Nzk2RkE4REFCNzU5NzM0NDYyMTE0MDBEQUI2NDBGMTNFNkVGOTk0CisxM0RGQjUzQjQ0MEM4MDg2MTI4RjNFQzQ2NTkyQUQ5N0QwODYyMTI5NTRENzNERkEyODI0N0ZDRDVEOEJDMjZGNDU1MkQ1ODE3MzcwMSwgNkQyM0JFRjYwMTlGNkRCQzkyRjQzOTdBRjM4MEQwQkFFNzJEODhFREU3OEY2MkMxQUM4QTY2QTVCOUY3NDIzRjNBNTczNjI1MDNDOUFBQzZCRjA5OEYzODYzQkU2NzhFLCAxNTYyMUJBNzcwQzkxOEVFQUM5N0M4RUMyMUM5OEZEMjdERkFGRkJGOUEyOTkzQUQ2QzExMUUwMDcwQTJFNzE0MEFDQ0I4NzhDMkZEMzlEMEQzMjM0NkM3QzQyMzFBNDcKKzNCOUYxRkIxQ0MyNTgxOTIzN0FEQkM0RDMwQjgwOEM3NzE5MjYzN0JGRTg1QjlFRTc4NkQ3RjY4MThBMzQ3NERDRkY4ODA4NDVBNTAzLCA1MTZBMDdGNDlCRERBQzI4MDU3QTYxM0Q1QzVFOEIzREUwQjdEMzNGM0RBNkZBMzhEQjI4Mjk1OUNCNUQwREVGMDY1NkNCNDUzODE1REI1RDI3RTA0REVFM0Q1QzQ5NzksIEZDMDg5MkVDRkQ1N0JDQjBCRUQxOUY0RTkzOTFDRUVGQTU4NjdDMkU0OTdBMEI4RDUzN0E1QjI0NDk4NUEzMDVERUYxRTI4QkQ4NzM2MjJBMUZDQzlEREQyMEQ2OUI4MgorQjJERDVGMTU2NDcwODRCNkE3MDkzNEU3OTIyODFBNTY1NEI3MkE3M0ZCOTEyRENCNjk0ODdFMzg0OUU5RDVFOTZGRTk4MThEMEVGMDksIDY2MzMzNDAwOUVFRjBGNUJEQUM4MkE5ODg0MkRCQTZDMjkwQUYwM0ZERUQ4RTg5MzM4MDBERkM3N0NEMUYyMUY0N0UxOUJFOUYwRTkxNkQ2QURENTQ1OEZBOUFFNzU3RSwgQzE0NUMyNjQxMEY3MjI5MDZENUFGODRFMDcyRDk1M0I2QkMyQTA3QzZDODk2NjAwOEZEMzhEMTJEMUI4RTUxNENCNDY3MjUwRjBDNUJDMENGODBENEZGMDU2RDFFRDJBCisyMTg5ODFENDAyRDUxOEUyM0Y1MUI5RUI2QjY3ODRGMDJGRTI1N0Y1QkYyQjM4OTYyM0JEOTdBQThEREJEODFCQzRGQkM4NEE3MkNEMUIsIDY5NTg5MkU3QTU3ODEwOEQ5NjA1MDE3NDU2Q0NDNDRBMDIyOEUzQTBDRURFQzY3QThBNUNCMjE5RjM1NjI2QTczMjI4QzYwMkRGRjk2MDBDMjQ4MUUxQTUyRjg4MUI1LCA4MDNFNUUxRTFCRTlBREY5RjhCMzBFRkRGOTQxQkVCOEFFMDExQkQxQzJFNEM2QUYwN0QyMEFDQkI4OEU5REE4MkYyNDM0OEFCODNFMzk0MUI3NUEzRDAwMDhBMzQxQjIKKzY0OUM4NTdDMDg3RjRBQTZCREY1MkRDMjQyMzY4RUQwOEZBNzA3RTEzRDgxQTlDMjZCMzhDNkZGQTk5Mzg4NTM0RUYzNThERjU4Njc1MSwgOEI4NkU3RDUzQkM0MjM0NTYzQTAzNkEyQUZBOTBBOThBOUZERjg2Njg3QTRDM0JENjA4NzhBRUE0NzlEQTFFQzEwQTk4MjFDRUVGNUY1MEY0QzcyQ0Q4QjU4RDY0NDUyLCAyQkU4NEVBQzhCQjMxMkU0QjMxM0REMDlFMzAyODU0QzM4QkRGODJBMUI1RTlDMDkwN0YxNDc3RDhBQzA5RTBFMUM3NzgwMzgyN0U1RTBEQ0NEQkFGMEIzMDlFMzczMzAKKzEyREQ1OTA3NDE5N0RERkY0MzlERjg5NDZDNkEzQUM3MUFFRjUxN0EzQjg4NEZENDc0MUFBNTRGRUZDQkE5OEY5RUNEQTBBOUUwOTM1RjMsIEE3OTZBRUE2MUYzQkIzNDFDMzVGNTQ3NzE1RkVBQ0M1QUZEQTlENDg5ODVFNDI0Qjg5MjUxRDlCRjExQzk5QTVCMTBGMzJBOEZDMzFGRjEzNkQwMTZFNzRFN0M3NDE1RSwgRURGNTgzNDA2QkZCNzgzNDE4MzAyNDVEQjVFRUM3RjYwMUNEODRBRUI5RDA0NUE2RjFCMEFFRjcxMTRGNUI3RDRBNkM5QTFGQTYxQTNENEMzQTE2RTJGQTEwNTZFMTkxCiszODk4MEIxNUM0Qzc5OUZEQ0FEOUU5QkQ0NTNFQjA1NTUwQ0RGNDZFQjI5OEVGN0Q1QzRGRUZFRkNGNjJGQ0FFREM2OEUxRkRBMUJBMUQ5LCA0QUU5MzVDMjg0Nzc2QUNEMTY2RjRDMzQzRDVEMTI3MjBDMUJFOEM4OENCQjlDN0JFOUVBMUE3MDQ2NkM0N0E1OENBN0I1QTJFNUI4RkJDQUYyM0MwREFGRjY1Q0ZEMzEsIDkxRjg1RTRGMzA1QjdGMTcxNkM5Q0Q0NUFGRTA3Qjc5N0U3MEVBOEI4MjNGMjU3MjFDNThCRDg5RUZFNzFGN0M5NzhENEIxMTgwRDdBODhBRDY4ODNEQUZCNUIyRDQwQQorQTlDODIxNDE0RTU2Q0RGOTYwOERCRDM3Q0ZCQzEwRkZGMjY5REQ0QzE3Q0FDRTc4MTRFRkNGQ0Y2RTI4RjYwQzk1M0FBNUY4RTUyRTU4QiwgNjNGNDBCN0M2MjY2NDU0ODFBNUI1MzhDMzYwRUIyODgxMjFBM0VFRUE5MERDQUY3MTc3RTdERjgwNDE2NTUxMDk0MjRBN0JCREU3MzBEMUUwOUQ2OTA4NTVBN0I0QTFBLCBDMjhFNjk5NDFEMDYzMjU5NkQ4MjJFQzU4QjlCNkFGQjE2RTMwM0QzQzYzMzAyQTlCQ0VERDVBOTZFMDZCNjgzRTZBQ0YxQkY1NDRDODM4OTNFOUU2NjdBNDI1QkZGRTQKKzFGRDU4NjNDM0VCMDQ2OUVDMjFBOTM3QTc2RjM0MzJGRkQ3M0Q5N0U0NDc2MDZCNjgzRUNGNkY2RTRBN0FFMjI1QkZBRkYxRUFBRjhCMEExLCA4NDMxRjY1NjQ2RjFBOUZENjQzMzNEQTI2ODc5MjVDNTVFQUZBMjVBNjlFNDc2RTNEQTFDRjQxNUExRjA1REI0MkM0QzA1RUE0NDY5MTc5RUUwRjkwQzJENzAyMTNEQUMsIEIwMTYyRjAyRDBGRjlENjRBM0Y2RjkyQzAwMTc1MDRFRTQ0MUVBNjEyNDJGMUJEQkRENkZDQUIwRUIyOTE1QjkxQzUzOEQ0MzVDNkQzRjQwMDMxNUM0MkM2MEU3QTRBNQorNUY4MDkyQjRCQzEwRDNEQzQ2NEZCQTZGNjREOUM5OEZGODVCOEM3QUNENjIxNDIzOEJDNkU0RTRBREY3MEE2NzEzRjBGRDVDMDBFQTExRTMsIDcyMENCMzFENkFGMjUwQ0UwMjY3NTlDMTcwNTc3QjAwODMzN0Q1N0Y1M0E3NTFFRjNBOUZGMjlGODk2MDE0OTBFNUY2OUVFMEUyMzQ0NDgxQUI4Qzg4MDlFRDY0OTEwRCwgNzQ4MzI3MkE5NjA5RENCOEJFQzhGQzcxMjdGMDVGNkFENjIwRTY1MzUxREYyMjRENzY4NzQwQjE1NUQ3RDEzQkJCQTIzOUIzODY0MEFFRUE2NUQ1RkVGMTFDMzkzMjZGCisxMUU4MUI4MUUzNDMyN0I5NEQyRUYyRjRFMkU4RDVDQUZFOTEyQTU3MDY4MjYzQzZBQTM1NEFFQUUwOUU1MUYzNTNCRDJGODE0MDJCRTM1QTksIDNERjNEMzY0QTk1RUEyNEM3NDExN0E5NjBDRDUwNDQ1RUNCNTI0OTMzNDg0NzEzQTg3MzQyQjA2NjIyQjk3NTMxM0FDMjZBODIzNTdDNDY4MjRBNTBFOTgzRTc5NDE5NCwgRDgwMDgyMjRBQ0ZGQ0NCQTRBMjk3OEMyMDc5NEYyNTIxNUZFN0E1NzY3MjE4Q0YyNkIwMTdFRjdFMURBQjY5MkUyQTJDQkE4N0U3QTk1RDNCQ0IzNUE2MTEwNDEyOTA2CiszNUI4NTI4NUE5Qzk3NzJCRTc4Q0Q4REVBOEJBODE2MEZCQjM3RjA1MTM4NzJCNTNGRTlGRTBDMEExREFGNUQ5RkIzNzhFODNDMDgzQUEwRkIsIERGMkM1NTA4NjgxQjFBQzY4RDcxQjY3NTU2RjEzQkI0QTA2NjFCRDgyNjY1OTNGQjk0ODM3OUQyQ0RFQjgzNkI0OUI1MTcwQTlDMzA5Mjg0RUNCNTk5MjlCMEFGNTQzNCwgOTA2Rjc4NDI4OTIxNEY4NkE5NzhBNzE5MTA4NTM3QjgxM0UzMjg1MjkwNzA1RjJGMkUxMEQ2MTc1NTRCODk4Rjk4QjcyMjg2Qjk2NjQzRDdCMTdENkJGQ0NFNzVFNzJGCitBMTI4Rjc5MEZENUM2NTgzQjZBNjhBOUJGQTJGODQyMkYzMUE3RDBGM0E5NTgxRkJGQkRGQTI0MUU1OTBFMThERjFBNkFCOEI0MThBRkUyRjEsIDdCMDdEMjA4QjVBMDU4RTdEMDkxMTJGM0E4NzVBNThEMEQwODBCRUYxRjkzMUQ4M0M2RjI3NkY4NTM5OEZCN0VENDBERDE5MkYwMzE1RDdBRThERTBERDAwRTQwMTQzQywgMUE3NTUxRjQwQUQxNEFCMTkxMUY3OTRDMzY4QTUzRTY3MzVDM0YzQTVFQTU0REJFQTg4RDk5QkY0Q0RGQzA1MUJCNkZEMTkxODVDRjE1QURFMjU4NTlFNEM4MkFGQkE5CisxRTM3QUU2QjJGODE1MzA4QjIzRjM5RkQzRUU4RThDNjhEOTRGNzcyREFGQzA4NUYzRjM5RUU2QzVCMEIyQTRBOUQ0RjQwMkExQzRBMEZBOEQzLCBDQTg1REM4OTE0MzE0QTRGMzY1QjFGMjc4RjI4RTBBNzRFRTQxRTdGQzI3Nzg2MTQwNkU3NEUyM0Y2QjZGQzFBNEJEMkMzODU4QzcxMDk4Mjk2Qjk4Q0Y3MzhGNDcxMDUsIDRBOTY0Rjg4NUMyMUM1RjVEMzlFQjI5MkQyNDQ5NTcxRDEyNTU0NTk2OTZDNERDOUM3MUNEREJFNzQwODUzOEUzM0RGQjc5MzE1MzBGMjdERTIwM0IxNzU4QUY1RkJDQworNUFBNzBCNDE4RTgzRjkxQTE2QkRBREY3QkNCQUJBNTNBOEJFRTY1ODkwRjQxOTFEQkRBRENCNDUxMTIxN0VERkQ3RURDMDdFNTRERTJFRkE3OSwgQzFCOTYwN0I0RTlERTIzQjYzQTQ2MzMxRDBDNEI1QUI5RTZFQjA5NEVGRDc1NTIwODFBNkIyNDU3MDI0MjA5QjEwOEJDRDZDRUExMTc0MjgyQkQwNkIzNERBRjMzMEZGLCA1QjFDNjJDREM0MUU4NDlDQ0E0NjU0NjgxNzFEQjFGNTQ4NEEwRUM2QzYyRDVGOTREQjVDMkZDQTVDQTZENjUzMjJBNkYzNjM3NUQ4MTBCQzVDQzk3MjE4NUY4NDM3MjgKKzEwRkY1MjFDNEFCOEJFQjRFNDQzOTA5RTczNjMwMkVGQUZBM0NCMzA5QjJEQzRCNTkzOTA5NjFDRjMzNjQ3QzlGODdDOTQxN0FGRTlBOENFRjZCLCA4QjhCNzNGNThGNTkwODhCRDVFNjI0RjY4QjQyNjY1NkZDNkQ5MDgxMkFGQzdBRTNENEUyOEYzNTMyRjIxOEM2NUQyMUJENTQ1RDMyNUM0QjZBNkJFRjI5ODg5NEVDRDAsIEM3MDBFMEUwMkY2NURCMTYxQTQ0QjVBODM0OTI2NTRGQzUxOUQxQ0QzN0MxOTBEQTgzMDc3NDUyRDIxNjgxREY1MkYwNkRDM0M0QzQ0QjgzMEExMTVCRUE0MEI5NkEyRQorMzJGREY2NTRFMDJBM0MxRUFDQ0FCMURCNUEyOTA4Q0YwRUVCNjE5MUQxODk0RTIwQkFCMUMyNTZEOUEyRDc1REU5NzVCQzQ3MEZCQ0ZBNkNFNDEsIDQ0MEQ1QkM1ODBCMDY3MTU1ODcxNzkwMUM1RDkwOTQyMkU3MkFFRjU4QUQwQ0ZGNEEyMjMyRUM4QkNEOTg2MTlFODFCMTMxNTgzRjhGNzU4OURCNURENThEOUU1NTdGNCwgRjg2OENENjlGRkMwQUMyNTRFNzVCRTE4RjU2NTA0NTZFRTc5M0NFNjNERUNBRDYyRjY3NENCNzFBOUI4MEEwMTBENDZCNUU0QTlDRDNGRTJERTYyNjg3M0Y3RTZCRTUKKzk4RjlFMkZFQTA3RUI0NUMwNjYwMTU5MjBFN0IxQTZEMkNDMjI0QjU3NDlCRUE2MjMwMTU0NzA0OENFODg2MTlCQzYxMzRENTJGMzZFRjQ2QUMzLCBCRDc1QThGRDA1MTQxQzQyRTI1NkE4OTZENzQ3RjMxRTFGRDVFNEQ5QkJFQkM2QjAzQUZBRjJENzg3QTA2MDU4MkMwOTczMjlGNTgxQjZEMzlCMEExNTA1RkI4QTY3ODAsIDlFMjZCMTU1MkM2NURCOTQ3NUQxQkJBOTkxMTM1NUVGOTI1ODk1QzkwNkM5QzgzNjE2MDE5MkJBQUQ0MTVDMEIxQkU4MEUyODBFMTlBM0M2MEI3NjFBQjY3NTMwODA2MAorMUNBRURBOEZCRTE3QzFEMTQxMzIwNDBCNjJCNzE0RjQ3ODY0NjZFMjA1REQzQkYyNjkwM0ZENTBEQTZCOTkyNEQzNTIzOUU3RjhEQTRDREQ0MDQ5LCBFNUZBQzIyNDE3Mzk4MTc4NzA1MUVBQkMwRDI4RjA0MjBCMERDMDg1OUYwNjc1RTMwNkFENzZBRjczN0Y1RDQwODIxQUQ2MkI1OTAzNUVDOTRBRDJCRjlBNzJGRjdBOUYsIDM5RjY5NUZEMEE3NTFGODkxMEFGRjFFRDBDOUNCQTRBRDEwMTVDOUUwOTgwNzg1MzJFNUNCNTc5MzU3Mjc3RjI5RDYxMDM5NjUwQjkwRDNBQzRCRkU2QzJBMzRGQ0U3NQorNTYwQzhGQUYzQTQ3NDU3M0MzOTYwQzIyMjgyNTNFREQ2OTJEMzRBNjExOTdCM0Q3M0IwQkY3RjI4RjQyQ0I2RTc5RjZBREI3RUE4RUU2OTdDMERCLCAyODg5REYzMjYyREU2MUM5M0Q4QTlBQzdBMzNFOUVDODgyNjhENzQ0Nzg4QTRBREU4QUQxOTEwMkUzRjY0NzcyNUM2MjJGODBBQjY1NDI3NUNERjQ1MDIzOTAyN0Q5QTcsIEMzMzBCQjNENEJENTkxNEZENDMxQUIyMTYxMkRFNDg4OTNBMUEzQjI1QkNDMUU5QzAzRTkyNjI4MEJCRkU1RTVEOEREN0E3MTQ0OTcwN0IxMUI4MThDNjAzNUNCMUVEOQorMTAyMjVBRjBEQUVENUQwNUI0QUMyMjQ2Njc4NkZCQzk4M0I4NzlERjIzNEM3MUI4NUIxMjNFN0Q3QURDODYyNEI2REU0MDkyN0JGQUNCM0M3NDI5MSwgODA3RTNCRjU1MEIzMkUyNzdDODg1MzM0NDA2NjY3MDhBNDI5RkUzOUVERDFGREJGRUUwMkZCODU1QUQ0QkRCQkNDRjkxMDQ4Rjc0QTYxMDI2QzQ0RjU1MEJEQ0IzMDVELCBFN0I1QTk5QTNDMjk4NTc4Njc2QjU3RDIxQjlGRjVDMEIyQTQ5OUIxNDk0MDE2ODYwRjE0Rjc4MUUyMUZDODgzREJENkE1RDZGNDdFMkU2MTQzRTFCQTJDRjJFMjJGNTgKKzMwNjcxMEQyOTBDODE3MTExRTA0NjZEMzM2OTRGMzVDOEIyOTZEOUQ2OUU1NTUyOTExMzZCQjc4NzA5NTkyNkUyNDlBQzFCNzczRjA2MUI1NUM3QjMsIEY3RUZERjhFQkNCRDU2MTU2Q0E4RDRBOUY1NTY4NDgxOTE5ODI2OTgwQjRGN0U2NjdDMDBGQjg0MzYwQkRDOTlFMjQ2M0M3QTYxN0I2QjgxRkE2QkE5NUU5RTg4QzA5OCwgMzI3QTI5OEExQTIzMDYwNzZDMUNCNzA2NDJBQjFERDA5QTI2NTAyRDQ1MEQzNzBCRTZENzk3NjY1MTgzOUE0ODNGMDE1RDkwNDJGNjkwNkQ1OTVGQzc1QzgwMDA1MDk3Cis5MTM1MzI3N0IyNTg0NTMzNUEwRDM0NzlBM0JFREExNUExN0M0OEQ4M0RBRkZGN0IzM0E0MzI2OTUxQzBCNzRBNkREMDQ1MjY1QkQxMjUyMDE1NzE5LCBDRDhBRkEyRTg4MzM3M0FCMTY0N0FGRDY0REM4QTgwRjYxQTIwMDNCM0E0QUJEQzJCNzU3NjE5NjQ3NUVBMTRFNDM0QTg3NENGNDZBNThGNjgzOTZCOTE4QjExMDk5MTUsIDVBM0JDNEIxOUZGODNBMUYzQ0NGNTM5NDc1QThBNEEwRTUwRjkwNTVFM0IzODFENkEzNjZGNERFMUU1RTE1RTdDNzgyRUQyNkUxOTIxNThFMERGRjUyOTM0Q0VFNkZFMworMUIzOUY5NzY3MTcwOENGOUEwRTI3OUQ2Q0VCM0M4RTQwRTQ3NERBODhCOTBGRkU3MTlBRUM5NzNCRjU0MjI1REY0OTcwQ0Y3MzEzNzM2RjYwNDA1NEIsIEI3NzhFRUJFRkYyN0JGRTM2MUIyQzkxOUExMkVFNDNBRjEwREU4QTBGMDlGNzdDNjgyOTE3OTQ5Q0I2OEFCMUE0N0I4RDlDM0I0MTRENDkzQTQxRkRERkYwOTYwQjM3OCwgQ0I3MTAzMUZEQzg2REY3QUMxOUJENjBCQ0VCRkIxQjY5MzRFNjYyRjgzQjQxMzI2QzgyNDdERjIzRjNBREJDODU3QUQ3MTA1RTlCRTMwRDk2RkJGN0Y1NDM4QzdFMUQ1Cis1MUFERUM2MzU0NTFBNkVDRTJBNzZEODQ2QzFCNUFBQzJBRDVFOEY5QTJCMkZGQjU0RDBDNUM1QjNERkM2NzE5RERDNTI2RTU5M0E1QTRFMjBDMEZFMSwgNzE1MEYyREJBNzc3MzlGNDE3N0I2NTY0MzE2RTEyQjYzMTZDQTQyRUUxMzVERTIxNDkxOEM0QUY0NjhDMDdBRUE4QTdGNzM3ODY4OUJBRUZGNEQzMzREMDRENDE4NDc5LCBGNUQyMTVCMDc1REQ5NkI1REYxQ0VBRTlCRkI4Q0Q1Qjc3QzFEOUNFOEYyOEU3OEEzQjAwMEZGQjcyNEQ2RjFEMzZGMTVDQzZDNDEzOEJFMDUwM0ZFNDk1MDRGMTREOQorRjUwOUM1MjlGQ0Y0RjRDNkE3RjY0ODhENDQ1MjEwMDQ4MDgxQkFFQ0U4MThGRjFGRTcyNTE1MTFCOUY1MzU0RDk5NEY3NEIwQkFGMEVFQTYyNDJGQTMsIERDNjFEQkFGNzFGNDhDNEZDRjg5OTQwRTE4OTQ5QjkyQjhCNkREMkVEODQ1OTc3MjdGQzE2NzZCMjFEMUE2RjJDMzE3OTk1QTlGM0ZEN0YzNUFEQjBBQUUwRjE3RjdBRSwgMzMwQzkwM0Y0MTNGNzgwMzBDMTMwMUFERUY0OTFDQTYyQTVFRUQ0NkE3QjZGM0FFRDJEMDEyNEZDQ0FCNzA1NkMyNTU4MjEzOUEwNUVBOUNBMDY5MzJBMjU3RTc2NTkKKzJERjFENEY3REY2REVERTUzRjdFMkQ5QTdDQ0Y2MzAwRDgxODUzMEM2Qjg0QUZENUZCNTZGM0YzNTJEREY5RkU4Q0JFRTVFMTIzMEQyQ0JGMjZDOEVFOSwgQ0E3NjQ0NzVEMzVBQzRBMTVFQURCQkY1M0VCRDNEODY5NEIxRTBBODMyNzkzQkVDRTdDREVGQ0ZGQTExRTc1QTVEREYyM0NBMjQzM0JDM0RFRDIxM0RDMzY0RTUwRDFDLCBGMEY2NTU5RkFDMTMxMTc0Qjg4NkYyQkYxMTEyNzU5RkQwQTIxRjlGOTk5MTAwMUFGQUEyOEM3MkQxMUM2MjgwNzEwN0RFQjZGMjU2QTJFMEVBOTM1MzMzMzgwNjA4RjMKKzg5RDU3RUU3OUU0OUM5QUZCRTdBODhDRjc2NkUyOTAyODg0OEY5MjU0MjhFMEY4MUYyMDREQkQ5Rjg5OUVERkJBNjNDQjFBMzY5Mjc4NjNENzQ1QUNCQiwgNDM4NUMwQjhEQzAyNEMwRTRFODkxRjU2QzU4OTg3QThEQzQ0QTkyRjZGMUNERTE1RjMyN0Q2NkVERDNBMjI0OEQ2QTczM0E5MTNBMDEzOURCQTgzMzIzNUU2QTQ3NkQzLCBCRDhCNjlBNTZENjg4RThEREYyRTY5NkUzNjNGMUMxMTlGQTRGOTEwMkY0MDE1RTk5RTM3QzgyMUREODA5Mzk4NEQxODg4Q0RCM0E0NTMwNUQyRjI1REREQkVGMkUwQTcKKzE5RDgwN0NCNkRBREQ1RDBGM0I2RjlBNkU2MzRBN0IwNzk4REFFQjZGQzdBQTJFODVENjBFOTM4REU5Q0RDOUYyRjJCNjE0RUEzQjc2OTJCODVEMTA2MzEsIEYyNkVFQTk2OTQ5ODMxNzFENzBFM0E1QTRGQkYxNzhBMDhDMUMwODdCNTQ1MkJFRjU5NDkwRjY4OEQzOTcyRkE4Q0YwNUI5REJCNERCNUZDOTdCNzFFRjQ3RUZDNzc0NSwgRTE0RENEMUY2QjMzOTJEQTNFMkQzOUI5M0Q5MDQyNDM1MzkzMjA2NzY0MjI4RkMyRTA3QTVBMEM5RDk1NjU1RDVGNTkxNTU1MUFGQzMxRjhCREUwODczQTBEMkY0RjYyCis0RDg4MTc2MjQ5MDk4MTcyREIyNEVDRjRCMjlERjcxMTZDQTkwQzI0RjU2RkU4QjkxODIyQkJBQTlCRDY5NUREOEQ4MjIzRUJFQjI2M0I4MjkxNzMxMjkzLCA0NjlCMUQ4QTIwMUNCOUM2M0Q5MTVCQTc2Qzc3NkIwNERCNjdERTRBMzQzNzA5RjhGQzg0QzNBNzU2OTc1N0ExNEM3MzhBODlEMUUwOTNGQUMyOEQ4NEU4MTA5OEMyMDgsIDQ1ODVCQUFGQTYzNjI2MUM1RkQ4QjQxN0I5ODE4M0U4REI0QTVGQzMxRjE1QjlGMzYwN0JBQjU4QTVEQUE0Q0RGREFFQTlFRURCMkM4NDIzQjUzRUU0MzlENjMwRTlCOAorRTg5ODQ2MjZEQjFDODQ1ODkxNkVDNkRFMTdEOUU1MzQ0NUZCMjQ2RUUwNEZCQTJCNDg2ODMyRkZEMzgzQzE5OEE4ODY2QkMzQzE3MkIyODdCNDU5MzdCOSwgMjIyNEE1QjhEMEU2REY1QzE0MzAzRjQwQkEzRkVDNTExMjBEMDc4Q0M5RTJEM0UwODVGQzJFMDAyRDc5MzQ0QjU0MzJDMEQ3OEMxNzlCNUQ2NEIzRDI2QzI5RTk0M0FFLCBBMDU1Q0YwMkE5NkUzNzU1OUEyMTk1OTlGQjNERUQ4RDc1M0REOUFGN0YyREQzMDczRDZENjBEQjAwNTkzMDU4QzEyNDMwQkFFOTY2OEI3RjVCMUYzQzcyNDcxMjE1ODEKKzJCOUM4RDI3NDkxNTU4RDA5QjQ0QzU0OUE0NzhEQUY5Q0QxRjE2RDRDQTBFRjJFODFEOTM4OThGRjdBOEI0NEM5Rjk5MzQzNEI0NDU4MTc5NzFEMEJBNzJCLCBFOTdENzYyQ0Y5OEJFM0JEMUQ0NDIxRkFDMkVEQjIwRjRFODRFNkQ5MzhCRjk2OUFBQjAwNTEyM0FBNkZCNDA3MTY0MDEzQzlDMzNEOTk4M0QxMUQxNEJEOTIyQjc5MjksIDMxODQyQjJCRTdCN0Y4NjAxODdBNkQ4OTUxNTY1Njg3MjI5NkEzRTE5MDkzMzg2OEFENkIyNzAzNUY2QjhBNUZCNzcwMTkyMzI0M0E4MDJENEU5NjI1QTAyMDlGOUNGNAorODJENUE3NzVEQjQwMEE3MUQxQ0U0RkRDRUQ2QTkwRUQ2NzVENDQ3RTVFMkNEOEI4NThCQTlDQUZFNkZBMUNFNURFQ0I5QzlFMUNEMDg0NkM1NTcyMkY1ODEsIDI1OTE1QzUwMDAwNzMxQzFFRTU3M0QxOTc3QTVCOENDNzI0RjA2NjM4MzhCQUJFNjdFRTExOTgwQkRDMjYxOEFFMzg3ODc0NDAzREJGQzBEM0FDNEQwREE0Q0EwNzhBNiwgQTNCNDlCRkVDNjZDNUZDRkNBRjJBQ0VFRTI4QThEMDFGNEQ1NzI5NkFCNzMwQjY1MEY0ODhDQTAzQkIzQzkwRTc1OEJGNjU1OERGNUQ5MTgzOTIwQ0VDMkVGNUExQTdECisxODg4MEY2NjE5MUMwMUY1NTc1NkFFRjk2QzgzRkIyQzgzNjE3Q0Q3QjFBODY4QTI5MEEyRkQ2MEZCNEVFNTZCMTlDNjJENURBNTY3MThENDUwMDU2OEUwODMsIDY4NTgyRTM5MzIwMzM2NDMxMTUxNTY3OEZEODY3OUExNzc4RTZFRjFENjlFREJGOTNGNDVFQ0NFNjNCNjQ5ODUwMUFDQTFFRkFFRkRBRjc0MzNCM0EzRkZCNjIwOENDRSwgRDM0RkVGNDY1RUJBRTc5MTJCNzA2RUUyN0I2MkJDQjI3RDlBNDQ4ODZCM0ZENTAyQkNFRTYyRjA0MzM4MzMzNUQxQTEyMDlCNTkzMkNERjlFQzRDQjMxQjBFMTU0RTI4Cis0OTk4MkUzMjRCNTQwNUUwMDYwNDBDRUM0NThCRjE4NThBMjQ3Njg3MTRGOTM5RTdCMUU4RjgyMkYxRUNCMDQxNEQ1Mjg4MThGMDM1NEE3Q0YwMTAzQUExODksIEUzMTlERjhFMzQxREE1OTY4M0MyODQ5N0U4RjAxMTEwQTAzNjgwNUEwNTQ3QUM4RjA1NTBBNURDMEE5OEEzMTVDMTk2NjQ0NTdCNTE3RkM2OEJBMzFFNDk4QTU5M0ZEQiwgRDI4QzVEQ0I0NjY0ODYyRkRFREY5MEMzQzlFMUMwRTE4N0Q3OUYyOTk0RjdEMUIyNEUxNDMxRDVEMDM3QTY5RDY1RUYyODVFQTNFNjkwNDc0QjZEQjQ2RkUwNkYxMEZDCitEQ0M4OEE5NkUxRkMxMUEwMTIwQzI2QzREMEEzRDQ5MDlFNkQ2Mzk1M0VFQkFEQjcxNUJBRTg2OEQ1QzYxMEMzRTdGNzk4NEFEMDlGREY3NkQwMzBBRkU0OUIsIEQ5MDRBNzEyQ0EzREUwQTc2NUJDMUU0MzI0RDZENTAxQjFFMzRDMEM4MjIzRDhBNTFDRDEyQkFGOUY2RUYwM0YzRDAyQkU4OEFDNUE5NjQ1QzFDOTFCMTMyRTJEOEVGNCwgMjVGNTRDREU4ODdBNERBNDBGRTIxMTQxRTQzMUIwQzRENDk4NURCQjdGRUFCNEI3RkIyMDcwQUQzMDlBNzhBQTIxRERBQjRCQjFBMzRCRkM0RjI5QzQ3QzVGMUE5RTUwCisyOTY1OTlGQzRBNUY0MzRFMDM2MjQ3NDRFNzFFQjdEQjFEQjQ4MkFCRkJDQzMwOTI1NDEzMEI5M0E4MTUyMzI0QkI3RTZDOEUwNzFERjlFNjQ3MDkyMEZBREQxLCBFMTAzMENGODQxRTVCRUE0NjBBMkJCMkJEMDQxNjJDQUM1NTYyOUIyNDI0RDA0REMwRjY1M0VFRjJEMTM5QkY4NkVBNkU4ODVBOEI3QkZBMzAxMTRGQTk3ODczM0ZCMjYsIDZBNEFFOUM5NDU0MjdFMUNEMzBBQzJDMkRCNENCMDc5M0RDOUExRkMzMUE1ODdFQUUxRkI4NkREODAwQTM3NThCNEM0NEMzMDEzRjgxNTY5MTAxOURFMUVCMzQzQjcxNgorN0MzMENERjRERjFEQzlFQTBBMjZENUNFQjU1QzI3OTE1OTFEODgwM0YzNjQ5MUI2RkMzOTIyQkFGODNGNjk2RTMyN0I0NUFBMTU1OUVEQjJENTFCNjJGMDk3MywgNTUyQUM1Qzg3MjYzMDYxOEEyREE3MUQ5MEUwNUI4MEQ3MDcyNjJBRkZEODlCN0JGMTM3OTkxMUI0M0FFMzAzRUU0Nzk2RkQ0QzExRDk1NzdEMjBBNzhEOEY4QTA3NjcwLCBDNkVEQUJFQjUzMjVGQUIxOUIyN0FBMjY5MkNCQjU4QTRBRjU3NjQyQzdFMzU0MzVFRTFBMTE4QTYxOEM2RkY5MjE3MTVENjJGRTg1NDA0QTM0MTg3N0Y2NDI5QkVCMzEKKzE3NDkyNjlERTlENTk1REJFMUU3NDgxNkMyMDE0NzZCNDBCNTg5ODBCREEyREI1MjRGNEFCNjgzMEU4QkUzQzRBOTc3MUQwRkU0MDBEQzkxODdGNTIyOEQxQzU5LCAyMjU0MUMxODFCRUYzMTlCQTRERTBGNUEzOEU1RTNBQTE3ODY4M0Q3MzU5NTk0Qzk4MzRBNjk4QjQ4ODJGOEVDOTMzQjBDMjUzMDM0MDg2MUE2NDU4RUQ3QUEzRTMwRTEsIEYxMEJBREFENzFCRTA5RTFCOURDRjBENTZDMjJDRjVDMEFFMzBEQkMzMjkzQjk3QzlGMEM3NkYwQTIwOUY3MkYzM0NBNjk5RDBFMjRGQkJBNTBGOEU3MzQ0MEM5MjBEMAorNDVEQjczRDlCRDgwQzE5M0E1QjVEODQ0NDYwM0Q2NDFDMjIwOUM4MjM4RTg5MUY2RURFMDIzODkyQkEzQUI0REZDNjU1NzJGQUMwMjk1QjQ5N0RGNjdBNzU1MEIsIDcwMkE2M0NCMEIyRkYxNUY5MzE5REE4QTRDREEyNTlBRkE4NDk0Q0Y5RjE0NDdCNzQzRUJBN0VFMTNCRjcxNzc1NEQwRTdEMjA3Qjg2RjRCMUQzRTE2NzMwMjJFRDlCLCBCMjFDRTE0RjMzNjU5MEM3Qjg1MTIyNEU1QzJFNDgwOTMyNzkyMDM0Q0RENDk0NjRFQTg1QzhBQUM2RkVCRjJCRTY4QTdCN0I3RUQyODE2NkZFOTk3NDFEOTQ1NkE0N0YKK0QxOTI1QjhEMzg4MjQ0QkFGMTIxODhDQ0QyMEI4MkM1NDY2MUQ1ODZBQUI5QjVFNEM5QTA2QTlCODJFQjAxRTlGNTMwMDU4RjA0MDdDMTFEQzc5RTM2RjVGRjIxLCBBQTk5ODVEN0FGM0UyRkI5MzUwMjk1MTFDREVBMERCMTQ0QjNEOEQ2N0U1MjNFOThFMjNFMkFBQzM0NjlCNDZEQUQ0MTRCNDUyMkRFQjM5RUM5MDkwNzg1MUM5RDNDRDYsIDY1MTM0OTRCMUUxMEFBODVENERCRkU4OTkyRjYxQTExNDBBMUU3RDA2NkREMEMyRTdDNUMzNEREOEFCNjQ5RDMxQTU1NUE0MUNEMDZERkFDNEVEOTJGQTMyNUZCNzQ4QQorMjc0QjcxMkE3QTk4NkNFMzBEMzY0OUE2Njc2MjI4ODRGRDMyNTgwOTQwMDJEMjFBRTVDRTEzRkQyODhDMTA1QkRERjkwMTBBRDBDMTc0MzU5NTZEQUE0RTFGRDYzLCBFOEM4MUQxQkMxQzNGRjJDQ0VGNjBGNTAyOUQ0QTYzQkNEMjJGRjc2MjAzMkFDNjVCMzAyQTA0NDVGMTFBMkVGQzYwRTQ2QkNFMDBENzE0RTBBMjQ2Mjc2RTk3MDY0MjgsIDdCNTU2NTg0MEZCOTVBMkQ3NjMxMzQ4M0UyRENERjRCMTdGMEYzN0M2RTY3QjlBOTk4OTM3NzkxMzIzQTMxMEQzRTc1QzMwRjhFNDAyNzM1NDRGMEFDRUJDQUFFNEY5QQorNzVFMjUzN0Y2RkM5NDZBOTI3QTJEQ0YzMzYyNjc5OEVGNzk3MDgxQkMwMDg3NjUwQjE2QTNCRjc3OUE0MzExMzk5RUIwMzIwNzI0NDVDQTBDMDQ4RkVFQTVGODI5LCBEQkQ3QUI1QkJBNUE1Q0ZCQUE3QTE0MTZCRjA2NUIwN0I3RTMzMjU3NDJBQjlCRkRDQkY3OERFMTExRkVBQkI5RjA0NTMyRkUwNjYwNEQ2MDU2Q0Y2MTMzNkVFMTc1MEIsIDY2QTM1NTlEMzE4RDI2NERGRUU1REY3N0NFNTIxQTNGNTM4NTczODNCODk4MDA3NTc4NjZENzhCNjQxNzNGMUMzRjI0MjA2RENCODkwNUY1QUMwRTg1OUFDQkI3MTU0NworMTYxQTZGQTdFNEY1QkQzRkI3NkU4OTZEOUEyNzM2Q0FDRTZDNTE4NTM0MDE5NjJGMjE0M0VCM0U2NkNFQzkzM0FDREMxMDk2MTU2Q0QxNUUyNDBEQUZDQkYxRTg3QiwgRkE1MzNFOEFBMUZDMTIwM0EzQzhEOEU5QTk0MDVDNzE2OTlCNzVFQTcxQ0UwQjEyNDZFQ0RFQjAwMEIxQkI4MTE3QTEzNzdFQkNCMkE0MzFGQjYzRjRFMEQ5MENFMDZDLCAyM0E0ODBENUE0QzUyOEE4QjlBOEQ3OTBBMDNEOUZFNzZEOUNGOERBM0M1MzcwQzgxMEI2MkExQzZGMjhBMDE2OUIzRUYwOTMzNDg0REE2ODVEQ0U0MENDNUUyRDY2MDcKKzQyNEY0RUY3QUVFMTM3QkYyNjRCOUM0OENFNzVBNDYwNkI0NEY0OEY5QzA0QzI4RDYzQ0JDMUJCMzQ2QzVCOUIwNjk0MzFDMjQwNDY3NDFBNkMyOTBGNjNENUI5NzEsIDhCRjY2QzA1REI1NDQ4RTZCRjQ4MTI4NUExNEQzOEFDQjE4NzQwQkMyOEZEOEY3N0EyQ0IzMDQ5Rjg5NEYxNEY2NTY1QTBDMkU3REEyOUUzODdDMTkxQjVFM0UxOUQ0MywgNjM3Q0VCQUVGQTQyNUEyQzIzRTYxNjc1ODlBMEQ2OERERTE5QUE0NjVGNTlBMUUwOEM0NkE2NDM4M0ExQTQ3MDNGRTA1MTBBQ0I1MDRDQ0YyMTI5NDc5RUVBM0FDRUUKK0M2RURFQ0U3MENBM0E3M0Q3MkUyRDREQTZCNjBFRDIxNDFDRUREQUVENDBFNDdBODJCNjM0NTMxOUQ0NTEyRDExM0JDOTU0NkMwRDM1QzRGNDQ3QjJFMkI4MTJDNTMsIDlGNzc2RjQ5NDJFOTYzMzY0QjU3MUNGRTBGMjc0MzAzMDg2OUMwM0E1NkQzNUQwRjM5MjhGNDNFQjJEOUEyMTc5QTZEM0Q0RjJCQUNEQUQ5NkYzMzA0RUY3RkE5NDFBOSwgNUIwRDI3MEZEMkM5QkRFQzI4NzE1MTBENTZCNTM4NkQ1MkIyQjA5MTFBQTE4MEVFQjAyNzgwMkU1QTI1QTg4Njc0QzNDQTBBNDJDMjA0RTczNDExODc3REE2MTI4MDZECisyNTRDOUM2QjUyNUVBRjVCODU4QTg3RThGNDIyMkM3NjNDNTZDOTkwQzdDMkFENkY4ODIyOUNGOTREN0NGMzg3MzNCMzVCRkQ0NDI3QTE0RURDRDcxOEE4MjgzODRGOSwgREFGRENBRTRENkM0NzU3MTZFQzQwNUMzNDhBQzlBMjM0M0Q1RDY3RjlCMTAwODJCNEQzRTI2NzVCRDg1RTMyNzg1RDUzNkMxM0JFQzYwN0Q0MTQxMEJBRDYwOTc0MkExLCAyODM3OTEwRThBN0M4RDNBREQ4QkZENzE0RkY1NzMwNjE0Njk4QzREMzJCOEE5ODI4QzQyQzI4ODY5RjkwMjU0REJFRjQxQTVFNDNCNzFFNzhBMjA2OUFDODVCMDU2NjYKKzZGRTVENTQxRjcxQzBFMTI5MDlGOTdCQURDNjY4NTYyQjUwNDVDQjI1NzQ4MDg0RTk4NjdENkVCRTg3NkRBOTU5QjFBMTNGN0NDNzZFM0VDOTY4NTQ5Rjg3OEE4RUVCLCBDNDdCNEQ2MzUxQzMwNTQ0QkUwMjA3MDZBMzcxM0I4QzlCRDQ4QkU0NEZFQ0FCREYxMzRCNDVBQzcwNUI3QUE1RTFEMkUwQTRDNUNFQzQxMzU5MUE5M0Q1MTM0QUE1MEIsIEM5Q0YzMTQ5QUIxNkZDREE0Q0VFM0JCQjc1N0FFRDMyNDAwNzg2OUM0NzgxOTY1NkVFQTY0N0VDMTZGODk2Qzk5MTlFN0M1ODYyNEJFRTM3MUM4RDQwOTdBMjA0RTQyRQorMTRGQjE3RkM1RTU1NDJBMzdCMURFQzczMDk1MzM5MDI4MUYwRDE2MTcwNUQ4MThFQkM5Mzc4NEMzQjk2NDhGQzBEMTRFM0JFNzY1NjRBQkM1QzM4RkRERTk2OUZBQ0MxLCA0RDQ2NkRFQ0EwRTVGMkM2NjRCMUMxNzA0ODVEMDQzNUNDOTEzQjRDRURDQjg5MDRFN0VDNjgwMjVDNUUyNEY1NDI1MEZGOEVCRDFBQURCQTU3NUNBRTc5NkJBMjBFMzIsIEMxQjUzNDY3RjkxNEY3QkUwNzc5QTQ0QUZDNTE3MzVCMjZCNjQ0QTFBQkFGRjcwMjdCRjg3QkUxMUZEODBCODE2Q0FFQjMzQzczNUFEQzU1REJGNEMyMTE4NjA4QkE1OAorM0VGMTQ3RjUxQUZGQzdFQTcxNTlDNTU5MUJGOUFCMDc4NUQyNzQyNDUxMTg4NEFDMzVCQTY4RTRCMkMyREFGNDI3M0VBQjNCNjMwMkUwMzUxNEFBRjk5QkMzREYwNjQzLCAxODZGMzRGN0Q0NUFDQkVGN0Y3RjdGOTNDNTc3NThBMkE1Nzg5ODFFOTkzOUFGQTIyQUFEMTQ4Nzk5MDVFMzY5NDczNzg2N0JGNzM2MzNDRjlGN0UyNUM2QTU5OEZGMjQsIEREMEIxRjY4MDA1RDM1ODg0MThEMTNFNjlEMzQzQjEwNzIyQzk2Mjg1QTEyQjEzOTA0OUI4RDNFMTY0NEMyRjExMEQzNkJCN0Y5MTlCQzQwREVCOTlFQUY0NDNEMzQ4MgorQkNEM0Q3REY1MEZGNTdCRjU0MEQ1MDBCNTNFRDAxMTY5MTc3NUM2Q0YzNDk4RTA0QTEyRjNBQUUxODQ4OTBEQzc1QkMwMUIyMjkwOEEwOUYzRTAwRUNEMzRCOUQxMkM5LCA4RjZGNjRFQTI3NTVGREE1MUM5OUE1MEI1N0Q3RjQzOERBMDVBMTE3MzIyODg0QThGN0Y3OTI4QkE5MkM3ODMxMEVGNTc4MDA1QjFGQ0MyRkZDRkZFNzlDMDgwMkIyRTQsIEQzMjMwMUJDMzNCN0IxNjdFRUFCNTUyRTA1QTIwQUY2NEU4NkU2NTk4NkQ1OTYxQzlFOUVCRjU2RjREN0YwNUQ0MjhFQkRBQ0ZBQTMwOTA3QzUwRDE4RTNFN0Y3OTI3CitFQ0MtNTI4CisxLCBDNjg1OEUwNkI3MDQwNEU5Q0Q5RTNFQ0I2NjIzOTVCNDQyOUM2NDgxMzkwNTNGQjUyMUY4MjhBRjYwNkI0RDNEQkFBMTRCNUU3N0VGRTc1OTI4RkUxREMxMjdBMkZGQThERTMzNDhCM0MxODU2QTQyOUJGOTdFN0UzMUMyRTVCRDY2LCAxMTgzOTI5NkE3ODlBM0JDMDA0NUM4QTVGQjQyQzdEMUJEOTk4RjU0NDQ5NTc5QjQ0NjgxN0FGQkQxNzI3M0U2NjJDOTdFRTcyOTk1RUY0MjY0MEM1NTBCOTAxM0ZBRDA3NjEzNTNDNzA4NkEyNzJDMjQwODhCRTk0NzY5RkQxNjY1MAorMywgMUE3M0QzNTI0NDNERTI5MTk1REQ5MUQ2QTY0QjU5NTk0NzlCNTJBNkU1QjEyM0Q5QUI5RTVBRDdBMTEyRDdBOEREMUFEM0YxNjRBM0E0ODMyMDUxREE2QkQxNkI1OUZFMjFCQUVCNDkwODYyQzMyRUEwNUE1OTE5RDJFREUzN0FEN0QsIDEzRTlCMDNCOTdERkE2MkRERDk5NzlGODZDNkNBQjgxNEYyRjE1NTdGQTgyQTlEMDMxN0QyRjhBQjFGQTM1NUNFRUMyRTJERDRDRjhEQzU3NUIwMkQ1QUNFRDFERUMzQzcwQ0YxMDVDOUJDOTNBNTkwNDI1RjU4OENBMUVFODZDMEU1Cis5LCAxNTg1Mzg5RTM1OUUxRTIxODI2QTJGNUJGMTU3MTU2RDQ4OEVEMzQ1NDFCOTg4NzQ2OTkyQzRBQjE0NUI4QzZCNjY1NzQyOUUxMzk2MTM0REEzNUYzQzU1NkRGNzI1QTMxOEY0RjUwQkFCRDg1Q0QyODY2MUY0NTYyNzk2N0NCRTIwNywgMkEyRTYxOEM5QThBRURGMzlGMEI1NTU1N0EyN0FFOTM4RTMwODhBNjU0RUUxQ0VCQjZDODI1QkEyNjNEREI0NDZFMEQ2OUU1NzU2MDU3QUM4NDBGRjU2RUNGNEFCRkQ4N0Q3MzZDMkFFOTI4ODgwRjM0M0FBMEVBODZCOUFEMkE0RQorMUIsIDE2MDM3M0VERjgyMThGOUI2QTc2MkE0RDRFQjg4OUU2NDZGODczOTUzNUQwRTRGODYyQzMzRjM1MTg3RTEzNTg1NEQ4MEIyMTIzREE3MTlENDgzNTEzNTNBRURBMEQzMTYzQ0IyMTU2MDQ0OTJFQzQ1NjgzNTc2NDMwMTcwMDJENjhCLCBGMTU5NzA1MDAxNERDRkUxQzVFNTgyODQwMUFDMDZBM0ZBOUZEMTkzQzVDRjUyQzNCQjRBNTZGNzhFMUExQjIyMDExRUZBNDkxRUQ5MkVCQzU0MTNCODc0RjRBOEJCNTcyRTQ2M0ZGRTcwOUQ0NUFDQjNGM0U2QUVDQTVEOTBCNzQwCis1MSwgMUQxQkJBMzgwMjg5QTc3MjZCQkNEN0Q3NkQ2RDYzNDY5Q0M4NDJERTQ0RDI2NjQ2QkJDNDUzODFGRDcyQkU3RUU4MTA5RjY3MTcxMjI3QjVDOTIzNTc3RjZCMEE0NzMxODcyNTc1QTBCMDI5QTdCMjUxRTVBMzM5NDE2Mjk5QzhBRTAsIDE3MDNBRUUwRjdBRDgyNDRDQzM1QkQ2OUU5MUMwNjcwRjNFNTQxQzlDRTZFMzUyOUI5MDJBOTgwRTkzMTcyRUJDOEFGRUMwMzY4NjE2RTFFMjNCMDRCNEQ1REZDQTgzNDNFQjkzQjBDODg3MEY3QTY2NjJFRTFCMjE2MENCQjkwRjAxCitGMywgMUNCMjUzMjI3QjM3OTY1MTc0NjE3RDU1NDJGQzBDQTVFQjE0MkI0QkNCNTFCQUYyRDY0OTUwMDhCRjJDOTBCRDkzMDQzQTczNzdBOTM3RTEwNTBCNkJCMTE3QTgxQzQ2MUEzNEIxNEMwODMyQUIyNkEyNzg1RDc2NDYyQUJEQzhCMkIsIDEyRkRGMzVBOTM1QUIzMDA4RTAzN0Q4NEY1QjYzN0M3QTc0NUZCMjFBMDA4ODQ4MzRDOTgwNEI0Q0QzQkFDNDlDOUIxREU0QUYzMTVFQjM2RTkyRTFFNEE0QUVBODM1MTg1NUU3MEIwQkM0QkE4OTA0RUEzRTc0RTJBNUYyRUQxNUVDCisyRDksIDE4OTYwN0MxNzkzQUYzODE4REEzMkZBMkY5NEE0NjhCQTY5QjNFRTZFQUI4MThCNjlGODg5MTAxNDk0MTU1Rjk1MTY3NjVBOEVBNzQ0MEJFMjkzMDE3OUQwMTZCN0RGNkJCMEQ4OTc3M0IwNzJDQkVCRUNGRENEMTk2QTU2MTI0REJDLCAyMEZGRjMyRUZFRjkyRDhBMkZGOTlFMjlDMzcyNDM5OUNBMUIwRkM5NDMwRjY3MkI1QTgyRjc0OTQ3ODdFNEVGMERGMDcyN0NBQjhCODIyNTBCMENBQkU2OUFCRjM0Q0JGNEIxOTREMDNGRDk5Q0Q4NUFDRUNFMDgzRjJCMzRFOURBCis4OEIsIDRFNUVCMTAzQjE5QkJCODRDODk2NDFCN0U1MDczMDhERURDNTYwNjBCRkYwMzMyNUFFMDA5QTQxNDJEMTE0MzhBM0IyRUEyMkZBODc0M0Q2QjRBRDJDRURCMkYwNTc4Qzk4RkI2RkE4NTdDRTM1MjdERDNCNzQ2MzE2NTMwMTE2QzMsIDcxNkY2OEY4MTkxNjU4MEE2NDdDQ0YzMDM2RjNDODE0MEQ2MEE2M0QxMDVCOTFBRDAxNzNCQ0Y2Rjg0Q0UwQ0ExQkRCMUQ0MDQ5QkI3MjYzQkU3MjRGQzkyMDIwODAxNEJDRjc1NDA0RDMzMDBDMUNEMkNBQ0NCMDc0NzgzMDhBRQorMTlBMSwgMUQyRUY0NjU3N0I2NjE3MEQ5RUYwRjFGMTQ4NkMzRTdERUI5ODVGRUU3Njg5ODU3NUI2MzAwNDJERUVCNTREOEMzRTkzNEU2REY3N0ZBNzY4MUNBQTFBRkM3QTdDMjMwNTNFODcwODY5MzJGNTYxQkU5QjI1RkY3MDMxOEJDNDk1RjIsIDFCMEQxMkU3NEVCOTlBOEUxNkYwQUZBM0JCOTI4Qjc1RDJCMDNFMjg4OUY4NEYzQUJCQ0JBQTc3MDI3MTk4RDVCOEUyRjcyQjZCRjE2OTM3QUU3MDlDMzAyNkM3NEQyNkYyQkFCRTMxQ0U2RTAyOTQ0Mzk5MjgyNjJENjZBNEFBQ0RDCis0Q0UzLCA1MzFDOUFCRTUxNTYzQzdDNzc5RTg5QkIyNDA0RTAwQjQ3ODkxREUzRTQ2NTI4NkI1MTc3Mjc0QjEyMjg1QUVEMTQ5MzVGRkE4MjI5NzA1QjNCRDUyM0M5MzQyMTI4MkVFNEM1NDQwNTBGNDlBNzkyODVDNjFGOEYzMTFCREQwRkI3LCAyM0I2NzFBMDcwNTkwODg3QUQzMzg4RDkyQUIyRkE2QTAxOTZCQTA0NDE4NkNFQTI3OUJFOTM5Q0MxMzA1MzcwMkJCRkNCRTRBOENCQ0YxNjJEODBEREE2N0U0NkVERTUxM0I1N0U1QjdENTJGREJFMDQwQTkxQzQ5N0EyRjM1Q0U4CitFNkE5LCAxRUM3NjA1Q0QzMzYzQjUyNEE3MEMwQkMxQTI1OEE1M0ZFOEY2MUE5ODJGQTNFODYzMzdDMkI5QUFEQTZDMzY4MzcxNzk4MkE5NTQ2Q0QxQ0MwMkZDQjFGMUVCOUNENDVEOTFERThDQTI5RTYxRThBODgzMjNBNkUyMzdBNjJBMjhFQywgMTdDRUM2MDJGQUE5MTY0QUU3RDhEMzQyRkQ5QjhBNDc4NDhEMTc4MEY5MkNCMDBDMjIxRTNBMzI0MjREQUJDRjg5RUU4MDVEMUJGQzYwMkJDNjExMDAxMjM1MkExNTE4NUNDNTUxMzExNkUzNzBCNDYwNTdBOERGNjFEOUE2MEYzRTgKKzJCM0ZCLCBDREQyRjBGMzAxMkRGMTkwQkIyNjBDQzg3MUZDNDJBOUYxNzk3OUEzMjlENjgzNTAzRTU5RTdENDc3NkQ4RjEwRjYyQzM5MEUwNDVEODQ3RTdGQUY5QUExQ0MwNzdDREFCQTZEODdGNEIxMTI1ODg2RjI1QUZDNEQ2MzA5MTk5RjVBLCA0MTc5MDNBMDVDMDIxMDY4QjJGQkI5RjIwMDkzMTdEQzBCNTFEOEE1QTFDODlCOTgyNEQ5OTA4OUQwOTU4QUQ0ODhDMTAwMUJBMTZFNzU4NzNBQ0FDMTdFMENGNzExODU2OTI5MjU1QjQwQjkzQ0IyQjk1RkFGNzdBQzNDOEVCRjdBCis4MUJGMSwgM0Q4ODI1Q0YwOEUyRUVDMEZDRjFCQzM5MkQ3MDE5RUQ0MTdFNUREQ0E0NzU0NkIxNEE4MkY4RDdGMkVEQjlEMkRDNzc0QzBBQzlFOUY1NDc4RkYxQ0FFOENDQUQwMkUwMEEyNUI4RDgxNzlCODEyRDE0RkJFQjk2MjE2OTM5NzAwNCwgQUIxOUU3ODM2MzNBODk4MzVGNzM4OTE4NDY4MUE2MDVFNkQ1RTRFM0U5QkJENTU3OTJFMUYwNUExRUFCNUIwRjNGNzJGNzMzM0U2NTlBQzVFRUJFRERCMEY2RDNFODA5MjJDMTk0MjdDRTRFMzkxQUFBQjhGNzA5NjEzRUZBQjg2RgorMTg1M0QzLCA0MjVFRkRCQzI4NEEwNEI3OTUyMTk5OEJEODE5OUM5QzJDQTk3OUEzM0NFRDRENzhBMjczMjBCMDRCQzQ2MEFCNUY1MDRGQTJBM0I4NUIwOUQ3MDlCMTY0NDBCRTgwREE2MzkxRjQ0OEMxMzRDMkZBOTlFRjVFN0Q2QjAzMTE4NTIsIDVCMTVCMEM5RENBQzg4QTFFMERBNTczOTQ4RDNFNjM3QUMzM0IzRDUyQjVDMzY1QjVGNTZBQkYwMDI2MjRGRjY4Q0JDNTU0QzM3NzA2RjMzQUQwMDVDRjBEMkYwNzEyMkFEM0EzNUM4RTgwMzg5REFGRUJCNURCQTQ4OUExNDc0RTcKKzQ4RkI3OSwgRjQ2NjY0NThFNjFFNzc3QTAxQzVDQTE5NUJEMEJDNDhDM0JERDVGMjcyMUY2MjRDNDQ4MDM0Q0VBQTU0NjM4RDg1NzRFNTZERjUyNkE4MUNDQkI0NjUyQkEyNDM3MTNGNjU5QjFFREE5MENGMkQ3QUI2MkJFRjUxMUI2NjVGODQzRSwgMTk0NTBCOUJDODAyRDkxMDM0RTU4MEY5NTY4RUY4MEI0NURBMUY4NEMxREIxRDFENTU0MDBEM0QzQ0VEQUY2NENCMDE2MDZGM0QxRUEzQzA2QTU5NzVCMDlFOTExNzNFMTU3M0M5MTBGODRBOTg3MDlFQkNDOUVEMTM4NjY4N0QzRjkKK0RBRjI2QiwgMTMwQTg1MDAyRjhCNURGQTA0RTZBRTI4MzU5NDkzQTY0Q0VCQTlDQzZFNjlGNzk5RkE1MDJBM0UwN0NDNTM0RDlBMUU3QjM3NThCNkEzQzRGOTUwODhFMDNBQTE2MTlENzc4QzgzM0VERDFGQkExOTZFRUI2QUIxOUZFRDNENjQ0ODYsIDE4MjMzQ0FDNDkyOTBERDg2RjRDRkNGREE3NEEyMTdFMTQxNDk3RUU2RDNFRkNDQjFCMzJDNDY4MDJBQTNBQkRCMkNERkQzQ0FEMTk3MDU1ODBBMkJDNUMwM0Q0MkY0NDRBQThCOUQ5OEE1MTYzNEYzQjVERjA0OEJEQzE3RDYzM0NBCisyOTBENzQxLCAxQTU1MzYwQUI4NjY3M0FGMjk0QTYyNjYxNkI5MThFQjZCQjkxNkU0NTE3OUFFNENCNzBGNTk4MUQ3MUM5NzZCQ0RFRTE5NzlGQjc2RTNGOEIwNEE2MEQxODIzRTY5N0Q3QzM3MTY4RDM0RUEwMThGMDhBNzlDRTkwMTQxODE4NkUyNiwgRDNBQ0E2MUI0OEQ3OUJBRjlCRjA2MEEwRTdFMUQ5RDk5QzhDMUNCQzNERTdGOEU5NzZFQzA3ODZBODA3NUFGNDA3QzlCNDJDQzkzMTBEMTZDQkI0OTNDQ0JDOEU4MTZGNkNCNjUwQzFGOEZCNTg0M0U1QkI0M0VGNzlGQTYzOUI4MgorN0IyODVDMywgMTVEQTBGQUQ5N0M1NjY0QTAxNEVFQTIwNjhBRkVCMjg1NTM2ODI1MTA4QkMzNEE2MUYwODdGQUYxNzFBOTlEMzM2NzFFQTQ1RjY0OUE1REFGNDhGMzRFRjg2RDk4MDhBRDhDMTVGQjE3ODBDMTUzOTlFMUU0QkVEMDA2RTExREEwMzUsIEY3OEIyMTc3RDE4QjZDNkM1RkFFOEYwRUYxOUM4RkJFREI0MzZBNDFFMzQ5NUI4QzZEMEQ3RkIxRkM3MTRFOTQ2RkFEMTNCMkMxRDQ0MEM2NjI5QzJDRUYwNzY2RTVBMTU5MzIxQzY5NjYwM0I1NzU0ODlDREI1NDk1RTY5QkQ4QUMKKzE3MTc5MTQ5LCAxQkExQzY4NTU5MkI3RjQyRDE2RTYxQzgwOURBQjExRjA1MkYyMTRCRTkwODAwOUIyNTEwMUUzOUU1MkY0NEZCRkQwRDI4RTY3OURGNEI4MzBGNzVBNjNGQ0MyRUJENTJBRTFGNzQzNDVFMjgxRENBRkQzQzkzRjVGOUY5Mzk3ODhCQiwgQzRBNjlBQjI2NkE4OUIzQUREOTUyNzgwQzlCNzQ0RUQ5QkU4RkFEMTM1NTc5QURCQTRFMTk4NTg3MkUxN0E0NEVDNjhBMzRCMTc5RTJFNURENkI3NTkwMjIwRjVENzYyOUFFRDBBNTExODRGREZFRUZCRTY5NzU0NTI4RjQ0MTM1OQorNDU0NkIzREIsIDEyQUFDNzkwNzY3N0ZGQzJCMEVBODI4RjlCNjJDQzFEMDc4Mjk1MzMyQzg4MkZFRjRFOEQ2RDgzRDk3NzRDODREREUzQ0VBQTg2M0IzNjkxNjcyOENFMDg3M0NGOENBQUJGMTEyMjkyNzkyMkVDN0RENzQ4NTc4REQxNDMwRjU0OTM2LCA5M0RFRTIzOUI2QTk2OUFDODY5N0YyRTY2REFGNkQ4NkREMzgyOTQ5RkUzNkM2MjgyMzJGQUFCN0Y4QUNFNzU2RDM1Rjg3NzBCODRDMENEOTE3NDAyNjM4MDFCODZFQzg1RDg0QTcwN0RGRTgyMzY5MjBEQUEwREI2MURCMERBMjFCCitDRkQ0MUI5MSwgMUJBN0IxNURFQ0U1NUY1MjlGMTg2MDcwOUQ4MjVCOTZBMERBMkYxQjEwNjk2RUExNDExQjgzRTBCMUE2MEFCNDg0MTlENjMzMjUyNTE0MDczM0Y1QTM5RUM2NkU5QTdFNjA0MUNCMjkxQkI0QTY1MEQyOEUxMkU2MDkwMTE1MUU3NzgsIDExMjRFNjZFOTgyMDEzMDQ1RkNCRjNBQUEwNENGMTZFOTE5REQ5NTg0QTBBREI3NUIxNTU1NjlGMDM3RjAzN0M5RTQ2M0I0REM3ODFCRTcwRkNFNkU0RkQ2RDA2NEEwM0RBRkJBRkIyRjFCM0JGOThBQzA4MUE1OEQ5NjU1QkZFM0UxCisyNkY3QzUyQjMsIDFENTYwNTE1MEM5QzU1RjJBRDQ4RDREQ0RGNTdENzgzQ0QwRkIxMDdGODk5QUNGQTgwNDQ4NDJCRDNFRUZGMEUxNEMzNUZEOUQ2QUY4RjVDOENDRTMyNjUyQTQ0RDA0ODVGNjREM0JCMjI3MkI0NzhBNDA1MkMwN0NFMDgzNjQ1QUJBLCBCQzcxNzhDQThCOUY3MDIxNDdENTFEOUMyMjdBQjRBQkVBREM5MUNCMzE1QkZCNEZBMDc0MUNFQTE0QTFGMDkzQ0JDMUM5RjA4MDcwRTAzRTVBMzYzQUNDQ0UzNTI2QjM5OEFENzlBMTlCOTg5MDdDNEU4M0QyRjAyMEE2MTVEODM2Cis3NEU3NEY4MTksIDg4MUExOTA5QzA1QzM4QUJCMEIzNEZCOTczQjBFN0YyRTY3REM4ODdFMjdCM0NDNTIzM0Y4QjQ1Mzc2NTZEQjBCMTc0Rjg1RjM0NUIyNkIyNkYxNjkxQTFDMTMwOEUxRUE4QTNDRUVBNTk1NzU2NkFDMjk5MjNFNzQzMDUwMjdCMkMsIDFFMjY2QjlERjM3RjY1Nzg5MTkxOTQ0MkI3QUEzQkFENzkxOEQxQTVCRTEyQ0YwNDA1N0RBQjlGMkEwNTQ4QTQ0NzNDNjExNDk1NUFFRDBBQ0M0RTE5M0UxODVGNzYyRjE2QzhEMTM1QzQzMDU5MDgzRUZERjhGRDJFMDREQ0Q3QkY5CisxNUVCNUVFODRCLCAxODY5NzE2RDAwMURBRUNDRkQ2NzY1MTM2RDI1NjY4MEE2ODgzN0RDNjhGMkJEMjM1RjFBMUFCMjg2NzkxRjg0ODgzNzMxMjJDNTBDQzU5OENFMTBCODY4NDVCRDcyMkFDMEFDQkFFOUFERkMzQTc1Qjc3NjE3QUZCNjQ4MUNBRDcyOSwgNDM2RkUyQUFDODJGMEZFNTEzNTczQzZGMjQ4NEZEMzAyQTQ2QjNENDgyN0JFM0I3MUEyNkE5MDk0Nzk0MzZDOUE1OEQ3NTEwQ0I0RkE5NDM1REI4NkVGQjE3MjMwRUREMUNBQ0EyNzQ0NTExNUU3QjA2MUE2MkE5MjQ0NDRENEI3Cis0MUMyMUNCOEUxLCBGRTM4MjZCRDg0QUIyOEUwNzVBRUIxNDc3OTk5REFGMzJEMjM4QTk1Q0JGRjQ0MkMwOUJEMUI1RUY5NDQ3QkFFNjc5OEYyRDhGNkZCRTBDNzFDQzE4RjFFREQ1QTAyNTREOTY2QTZBRDg0OTc3Qjg4RDRDOTZFRTQ4RUJENDU3QUI2LCA5OEMxNjA4MzYwNTIwOERCM0ZCMjIwMzgzQjQ5OTNFMTVGNUMxNTBCMzEzODY2NDJGMEJBMDVGODk5NzcxM0E5MjM4RTU5OTYyOEUxMkJDNUI4MzgzRTY1ODA2MzM5NEE3QzIwQjBEMjRDNEY3RUU1Mjk0QUJBNTk2RDU0NDVGMUMKK0M1NDY1NjJBQTMsIEVDNkY3RURBMEVCNzI0RkJCQkNEMTY0MkI3MUJCRDBENDBGN0ZFMkU0N0QzMUM3RDAyQTdBRUYxQkY4OUNFRkMxODRCMkI2QUY3REM4QUI1RUQwNTIwMjM5RUFFQjk0OUJFNjlCRDQ2N0YwQUFBNTYzNjlBMjExM0ZGRDU3OTNCNzYsIDg0NjA1OEU1RkIzQzZGMjUxQjYxMDRCMENGQjM4NzRDQjJEQTg4MEY4OEM0OEI0QzQ1NEIxNzkzRjA2ODNEMjE5NDRFQ0Y0NUQ0MjFGRTE2NUJGNDNDMUYwNzFGRUY2OEVFODk0MzRDQjdENTQwRDQ5NTAwNzQ3ODc3MjU1RjYwRjAKKzI0RkQzMDI3RkU5LCBCMzgyQ0ZBRjk3RDA2MjRCRDlFQjI4MENFRjlEQjU2QjA0ODYxOTRBNENDQkFGQ0JEODVBRUZDOTVBMTJDQjYyNDEyNjI0NkYwMUQxNTQwRUEyMkU5NDc3OUNBODI1RkZBMURBQTYxNzhBQzEzMDRGODY0NzVENEJBREE4RDM2N0ExLCAxRjJCQTI4OTY4RkVFMUI2RDg3QjM0NTg4QUQ5NjM2RUQyNjE3OTFGMkRBMTIzOEM1RDAxQTgwOUEwMUJERERGQkE3MkMzMDUyNjU0MkFFRjlBRDg4MzcyMkJFMzkyRDA4MzMwOTcwNUUxRDBCNzlBMzZCNzM0MUUxNjVFM0MxMUI1NQorNkVGNzkwNzdGQkIsIDE3ODFDNzZEQ0YyNzU3NDQ3MEUzREQyNjAwNTlCRjhBNjgzQzdCMDM1RUU0N0RDODkwQTBGMjI1NzRENTgxNjU1OTRGMzdEMkQwNzIzQzM5QzcyQURBMTBFNTFFNTA4MUM2MEREQkQxNjdBQjYyMENFM0NEMDgxQkM0NzA1QTZEODM3LCA0NUI5NjlBMDU0Nzg0RTZGMTNFM0VFMTYxODBFMUNBMEE4RDE4MTQyMUQ5OUNGODg5M0E1MDAwNDM1NDU2Q0FCQzBEQ0Q1RDIzNjlDNDIyRDg3MDE4QjE1QTgxQkNCMzMyMDNBMkU0OEQzNjZEMTYyQ0I1RjRBNEVFRjBCNEIwNTQ2CisxNENFNkIxNjdGMzEsIEQzRkVEMkRGMjc4NjE5RkE3QTM4NTlGQjcwQjgxM0Q4NkU2NzY1N0JGNEU3RTNFOTVEMEE4RTdCMDE4NDI3QkQ1RjEwNUI1NEFGOEZCNkE3MkU3RDhBQjhCQkQ4MjhFNUVFMDVBNTM1RThCRTE4Mzg2MTE2M0RCMTUzNzQ5NkY5QUEsIEQ4MTU3NzkzRTUxQ0QxQzQ1QUYyMTdBQzc3M0VEMDM1MDY1QzVBM0U3OEFEN0IxNDg5MEM2NkYyNDAzMDkxRTdDRTFEREREOTU5NzA3OTMyMDlDREY5MjI3NjY4QTdCQzYyMDgzMkQ2QThDRjhGRDA3Nzg3QjFDNUU2MkExRkRERjUKKzNFNkI0MTQzN0Q5MywgMTExMEIxODdDNTNBQTFCMjU5MTJCODA0RTEwMTFBMTZEQzg2RDUzMjY5MUZDMkM3NDlGQkQyMDcxQ0U2ODczMjI3OThENTBGQzdGM0RFNjdBNkYxNTBENENFMDgxMDc3Rjg3MjUzMkZFRkE4N0NEQTlBNjQwOTBBOUQ5NjU0OEFCMjMsIDEzNDVBOTdDMTRGNDY5RTU4Q0I4Qjk1OThDQUExRTQzMzVGM0FFQjkxNzRGNTdCQzhEMTJBQ0I3NDk5NUE4ODFBNUQ0MjE1RDgzNEM3MUNCQTNCN0VBRUU4OTkwQUFFMzI0RTk2NEExRkU5OUU0RUJERjM5RDBFMzBCMDEzRTIzNzQwCitCQjQxQzNDQTc4QjksIDdFRjY1RkIzMzE0MUZDM0NENTc3RTgzQzZERDI0Qzk5NjA0NjlDMUJBOUY4OTM5RTgzQzM5RTBDNTYxQTYxQzNEREI3OEI2NzA5RkZGRjBDRkI3MzAwRTQxNDlENjU1NTRGMTU0RDVBQzk0MDFDNkU2NjYzRDFCMTlCMjQ1REJFNDMsIDE1RTA4NDFCRkM1NjI4MTlDRjI5RjYwM0IxNkYzQjRCNkVDQkZBRUE5ODBGQTk5Q0FFQkI1ODYwMjAxODJERDJBRTNBRDQ2OUQ4RTQ1MDZBNjIwQTI2MTc2MEEwOEU4OUQ3QURGQTYzMDM2NzZERDlCMkEyQzM1NkEwN0EyMUU3NTU4CisyMzFDNTRCNUY2QTJCLCA1QzNGOENDNTVGNDQ3QUYyRUIxODM2MDVDNzRBODJGM0MwNTAzRkM1OTBDMjg2REUwODM3N0RDMUY4NDE1MDY5MjE0NURCRUVEQjhEOTREREQ3MEEyRTNEQjdDMUIyMDA1MkQ5QTM4QTE0QkYwRUFENzVFMUFCN0Q5NkE1NDFEQ0Q3LCBCMkUxOUM4NURGMkZBMUE2RDE4OUE2QzRGOEY4NjkxRTNBNTM1RUVFODNCQzk4Njg2QTgwQzZGQzVFOTQxQUVCREYxODc5NjRDQjY4RkU1NzI0RkU4NEI1MUI1QjE0QUJFQUY3QjlCQkY0RTkxMTJFMjlBMkYwM0Y4M0E1MUQ2Nzc3Cis2OTU0RkUyMUUzRTgxLCAxODFGMTgwRUNBNTkzODVBMUMxQ0ZENUQ3M0QzRDA5MzNFMjFDMzcxOEY1RDFFRkFFRTM4QTg3NzMxQjlFMzM3QzYxRDRDMURCQUM5RkQ5QzgxN0IxRTBENzQ4RUMyQjU0QjM5NkMxNERBRTY3NEQ1MUYxRDAwN0EzMzMxRjFFRjc2RCwgMUEwNEQxMUQ5Q0VGMjU3NDJFMDczMkFGQzQ4MUUxRDg2RUQ2MTcyNTJCQkJCQ0IyQkI5RTY0NDExNjdFRUI5RjVFRTRCNUNCOURFMzIwQzEyODczQTIwQ0YzRjlEQTM0NjU4QjMwNTRFMTdCMzA5Mzk2MTJCQUU5RkFCM0E0NTcyRjkKKzEzQkZFRkE2NUFCQjgzLCBGMDlBRUI0MTc0MjQzQTM5RTQxMTI1MUM3MkZCOEExNDFGNTNGNzhGNjQzN0E5MkQ5Rjg2MEU3NzczQjhGQTI1ODFEOUI5MjVFQzVBRDFBNTIzQUU1OTA1Rjc0MTM3NDVGNTJBN0Q4MTU5QkRBMUM2OTY4MjlGMjUxQUMyQzg3RDUxLCAxRkVDRTcxNkY0N0IzQ0Y3N0YyQzg1NjRGRDBFQjExQzg3MDU2MzVGMzFBOUI5RjQ1NkZBRDdGNzQxNkQyQTIxQ0M1OUFBRDhFM0E3MzQwRjEwOTcxNjRFNDY3MjI0RTc1NTNBN0M4MUEyNzkxODdCMDhCRDg3OTcwODAzMzRDQjY0MgorM0IzRkNFRjMxMDMyODksIEE0ODQ5RkZCQzcxNDI1NzBFMDk2Mzk3RTE2MzgxQzQ1RkNFOTBDMzk0MEY1QzUwNkE2REM0MzYzRDFBODQ5MUExMzM1N0FCRTMzMEJDRTZBOTc2NEI4Q0M1MTdEMDMwMzgwNDY0ODFGQ0YxOEE1MDNDNUQ4RDVCQjA0NzMxMUM4MTYsIDYzOUZCMTIwNDE3MjU2QkIzQ0UxRDU1QzVGNTc5N0QzQTlCQTIxRTlFMkJFQTQxNTUzNkVGNjU0OEMyMjE0RTgwRDNEODE2MjA3MDJFN0VBQjg0ODgwMUE0MDhFRjZCQzlENDhDNENFOTBGQzY4QzgwNTY2MzA1RDg4ODM1RTY0MTQKK0IxQkY2Q0Q5MzA5NzlCLCAxMkMwODM4RUQwMTAxRUEwNEM1QUYyMUIwOUMyREE0QjNGQ0U4REIwMDY3RkM0MkFCQTFGQkYzMTlDREVCRjMzQTM4NEJBOTQwN0E1NTBDMjI1NzJGQ0Q0MTIwNEI0RkYwMUQ2NUUyOUI5RTg3NTk3MENCRUJCQzhFNjUwNTg0OTc4MywgMUEyRDg2MzMxOUUzQUVDRjIwQzNFOUQ2RjYwNjI0QTg3MzYxMTc3QTY5NkQ3N0M1NTlDM0VGMTY2MjQwQzZCODQ5QTk4NkQyQkI1MjE0QUZCM0MxRUY1REI2MENBNUYyMkE0REQ5MUIwMjYwRUZEQkNEOTQ3NTM2RDYzNEQ2RTE3QUUKKzIxNTNFNDY4QjkxQzZEMSwgNTRCMTM4ODE1OTE3MEMwQzdDNEE2QURENUZDNDFDNzRGQkIxRURGMzU1RUNEMUQ4NzJGOUU5NTgyQTAwRDMyMEQwQTkyMDVGRDI2NzNEM0EwOUZGRkFGNThDOTZGQUM2NTUyN0ZFNTc5NkZBQzc5NjM3MUQ4MTUwMkI5M0ZFNDU1RiwgRkFEODRFRTBGQkY4MjNBNTU3QjhDQTE3QjNGRUI3OUVCNTBCNjMxQ0VCRDdDNEU0M0EzMzYyRjM2REFBODlBRTdBQTQ0RTQ5NDU5REYzNDMyMUY3QUM5QUZBQUJGQzY4NkEwMEJGMkQ3ODM5MDk2NTNCM0JEQUM3NTkzRThFOUUwMQorNjNGQkFEM0EyQjU1NDczLCAxREQ2NjZBMDUxQkJBRDVFNkVCOTY4ODNBNTVBOURENzdFNjNDMjAxQUIxQTE0MzUxMkI3NzQwNzZEMEM0MEFCNEYwMzA4RDY1NjRDQjYzRDczQ0REODFEQjQ2MkZCM0MxN0E1N0JEMzNFM0IyNkQ3RUI5NkJDMkRCQkZERTk2QjI2MCwgNTA4OTM2MDJCQzFFQzZGMjk0QjVFQ0QzOUNFOUQxODQwNzM5QzA5NkFDN0MxRDhDMUU0NDUzRkExQkFFREQwQjE4NjU1RkY3MjVFNjY1M0ZERTE4RUI4RkJCNkY0RjYzMzM1RkYyREQ2OUFFOThGMTcxRENGQkYxNDZCODZCQTA4CisxMkJGMzA3QUU4MUZGRDU5LCAxREUwRTlGM0UwMzVFM0Y3RDU2NEMxODkzOTdDMjE4MzJBREUyOUY4NUVDOEZDOUIxRDAwODg3MUQ2QjRFRUJDODREMzU4QzcwNENCNEY3RTlEMTJCOTA5RDQ1OEUyMThFOUE3QThDRkJGMUQyQzQwNDRCNjAzNEVCQkE4QzQ3NzIxNiwgMTBCMkVDRUFBNjlGNUY4OUFDNEE3QjkwRUM1QTBEOEQ0MzYxM0Y4RTI4MUE2M0UwNzI3RTVCMDgyMzA2ODkxNDJDM0E0QkI4MjZGODYwMUNCRkFERDYyODJFQzI5Mjk2NjhFRUUwQjk3OTk1QUM3OTZFMTMzNUFDMzJDMUE4RDQxOQorMzgzRDkxNzBCODVGRjgwQiwgMTE4QThBMEI5OEEyOTlGNUZGQzdDQkRFNUQ4OUZGQjhBRDdDMjQ4MzJERTA4MzAyMkRBRDQ4MTRGM0M3QTczOTU5Rjc3QjZERTgwN0YxREIxODc5REExQkE5QkI1NDdEQjM4QkVCRjgyNzA3RDZBN0U2NkY1ODZCMjA1MkRBQzc3QkEsIEFERDBGMUI4REJCRkVBRDM1RkQ3QzRBOUYzRjhEMjA3NkZFNDJCRDkxNzQwOTE1Qjc2RDA5MEZEMzFGOEFEMzM2NUU1QTAyOEFEMjAwODFFQjc4QjUyNkFEMzZENDYzMjFBQUIyRkVEQzY4RjBFQTM5NjFCNjk5Q0EwMTVCNDEyQTYKK0E4QjhCNDUyMjkxRkU4MjEsIEMyM0ZDNEI1NkM4MTY3NTdBQ0RCQzNGNTNDMjFDRDY3RjY2MERFRTIzQTA2QTk1RDhDOEVGNzUxRjAwNjA5NTFEMzQzNzgwRkI1NzZBQjA3Q0RBNkIyRjY4OTAwRDZFOTdDNjgxM0U4RTNCRjQwQjNEMEJBRDgwOTA5ODcyMjI4RTYsIDE5QUFCRkVCN0M0Mjk1QTU2MTlDNTU5MEYyMDlEQzcyQzk1NzY1NDA1ODEwNEUyQjBBQjQ3MTY1MDVDNDc2Q0YyMjFFNTQxRTAyNjQzNDgyODU5NjFEM0FDQkIzQjE0ODk5M0EwNjU3OERDOTREN0NEQzk3OTNDN0MyRkM4NzE0QkE5CisxRkEyQTFDRjY3QjVGQjg2MywgMUZENzIzMkEyOEE0QTM3MjM4QzA4MDc1M0U2RkVCREE4OUExNEM5QzQ0MjI0RDc3RThFODkxODdDMzkxMkVBQUFENTlFQUM1NTQyMDE1OEIwMkMxMjkwRjY2NUY3REY0QkE2NkQwMkE4MkJCMzc5QkRCQkFBQkM0MzE1QjFEQjNCQTgsIDE5MDlBQzQzMEZDNEE1NTNERDcyODUwMTlFMEQzNjI3MDYyQTZCNDFEOEFBRURBRjBCOTA3RTJCRTY4ODg3QTU2OEQ3Mjk4Nzk1QTBDOTQ3MEFCRkQ2QUREMjlFNjJBQzNCNjkwNzc0RUY3QjEyOTFBMDVDNjFEMERCQjQ3QjcyRThDCis1RUU3RTU2RTM3MjFGMjkyOSwgMUVGNjU5NEY5NDY1NDg2OUI0RUJGQTk1REZCQjcwQjlDNzM1NTA1RDQ1ODMzRTE3RjZEREZGNkIwMkIxQzU2MENFOEVFN0Y0RTI1RjdDMUE1OUMxNjdENkYzOTU3M0E5QTQ4MDhCRDU1NUM4RThBREFFN0FDOTY3OERERjVERkU2RTIsIDFBNDc5ODdCQTQwQzQzRDZBOTNFNUZFQ0IwMzA0OTczRDJFQzhFMjc5NzI1MjRFM0U5NUZGN0VCM0UxODU3OTg4QzFEMzdDRTZDRDlEN0U1OTA4OTE5ODY5QjhBMTQwRkU3ODBDRjRFQTgwM0ZCOTEyNEUwQkUxMkUxOTY0QjZCOUQ0CisxMUNCN0IwNEFBNTY1RDdCN0IsIEQyNTYzN0ZFMDNFRjRGRjlBNzFCRDA1OTRFQTUyQ0JFQkY0RjE2QjU2RTgyQzU2NjUzMEIwRDFDNzA1NkVDMTkwOTlFQzE0ODAwMThDRDE0NEQ5QzkxNDI2QkMwMjI3MTVCQ0IxOTBEOUJCREI1QUMxNjA1QjhBMTAyQTFFMkY2M0QsIDU4QkI3OUMxNkMxMEQyRkIyMzdFRjU1QkIzNDAxQjRCOUQ5RkNDQkRFRjM2ODNDMkY1NDMxRDQ2MTRFREVBQzFGRTI5REREMjNENThERDgxOUYyRUQ2NEQ5RTZGRTk1RjFBRkRDM0MxN0Y3MEUzMkQxNTZCNDE2RTYzMDhGOEJCNTgKKzM1NjI3MTBERkYwMzE4NzI3MSwgQjY3ODg4NURDQkU1NTJFMDlGMkMyQjlDQ0QwNDBBNzZCRTczRDEwMUNERkYxMkMxRjM4NDI3RjBCNTYzRjIyMTM2NjJEMjgxRURGREQwNTE4RTkzODcxNDkwRDNDMzIyMTUyQjhCOTlGRTE1NkMwNzJBRDQ4QTZGMjQ2RkNFQTQzRCwgRDk4MTcyQ0QxMDk0NzM2QUFBOTQ3Q0JCMjJBNEI5QzdDRkU4MjAzN0I4MTZBQkJDQzcwQUEyMEIyNkIyNzgxQUFGRDNCOEJCNTk3MTQwRUY0MTc0MDVBRjcyNkY4NTIxOTE4QTdCMTQ1Mzc0ODBCNzg4RERGN0ZBQkQ1MzVCNEVDNAorQTAyNzUzMjlGRDA5NDk1NzUzLCAxMEY4QzU3QUNGNDUzNTVFRDJDMzhFNDBCQ0FEOUJFQkQyMDIwQ0U5OUQyRjQ0NUJCRDFCMkE1QzJFOUREQzhERTAwQTZCRkI1MUI4NTM1NTIwOUU4MDIzMzA3NTUxMDEzNEU4QzQ0NTc2RkMzRjMzQzkzOTA1NjJGRjIxNTlERTA1OCwgNTJDQjFDRDZGMUFDODQyNTJCNUE2OUFGNTE2OEUwMEMyOTlDMzU5NDQwQ0M4RTFCRjAzQzQ5Qjg2Q0U4ODc5NEY2NERGODk1NjNEOTc5RjY4QTE2NkEwNzlBN0ZCMDFDRjExOEI0NjY2NUJGRTlDMjA4MkY1NzYxNEQ5QjQ4RjE2MworMUUwNzVGOTdERjcxQkRDMDVGOSwgNDVGRDI1MDBDMTc0NEEwREJCOUEyOEE4MzJGQUVDM0FFNTY4QThFNzdFNEFFMzg1RkNERjQ1ODkwRkY4MjZGQTE2NjAwMThDMjQ2RTUxRkNEQTZDRTBBRDdFN0JEMUM1QjlENTg2NDk1RDFENjFFMUFFMURDRENEMkY4NjNBMjMwNSwgRkM2QjY4RTAxQUQ1Mjg1NTUyMkRGQjQ0MEE1QzQ2MTcxRjY5MDQ3QzE2NEU1NUNBNkVCQUZEQTU5MDgxNTVCMTY2NjUyQzQ4N0I0MDI0RDVCNDY4N0Y5NzNEOTBGQTFGOUREM0Y0MzM0MjM1ODNCNEVCMUIxODRDMEU3NTNENzZGOQorNUExNjFFQzc5RTU1Mzk0MTFFQiwgMTQ5NkQzMjE4OTdCMzg2OTY4MERCMEVGOUYwMDM2ODc1QjIxRjI3QjczRTI0NjM3N0FEQkI4MDE2NEEwQzhGN0FFRDU1NzJEQUYxMjY3OURGREEwMzAxQjUwQzdGQTUwRTc5Q0I0MTAxNDNCN0U5NTA1MUFCRDUyQjNERjc5NDRGQTAsIDEyRTMzMzJCNDhBQTExRTMxMDg2MDQwRTdCNDY2OUY2MjhGMTdCQTMzM0M2NkU1QjRGMDYwMkM5MzQ4RkQ1QjU5MzMzRjI2NkExN0U3RjgxODUzODdFNEIxQjE3OTk3NTlENTFEQzAxNzgxMUI0RTlGRDM3QTUwNkY4NjU2RDM4MTBFCisxMEU0MjVDNTZEQUZGQUJDMzVDMSwgQUE4MjE4NzJFRTg4Mjc5Qjc0OTg4NDY2QzQ4MDQzODQ0N0IwQjkxQjg2NjBGMUM3NDI3RTJBMjNDQzY2MDA4RTI5QjVEOUFFOTk5QzIwMDIzN0MzODAwMzRFNUNFQzYyQzYwMjhEQjBCOTg2NDY1RUUwMUVGMjk5RkE0MDUxRDA2LCA0Nzg3MUU3RkM0MUE0NTIwMzAzMDkxRTcwNzdBODIwMzUxQTZBRERCOUI1NUY3NURBMzlFNkM1NjQwNEVCMzg5N0JFQTU5RDlCQTkzM0U2NEE0MzRFQ0IwMTAyNTZFMzNCNTY0MzAzQjIzNEE4QjE4QUNFQkRDOTA1MDkwOTIyOEE3CiszMkFDNzE1MDQ5MEZGMDM0QTE0MywgQUVGREVGM0U2MjQ0NDdFODc3ODlCMzdCOUIzNTVCNTFFRDM4MkY2MkFGMkJCOUIwMTcyMkMzRDExMEZCODY1MzI4QUU1OTczQ0U5MjBFNUJDRkVEMTRFNkU2RkYzMzY5RjU5RjBFMEIwREM4QzI1OTVCOTdGMzA5Mzg0MkJGREE4OSwgMTFDMTVGMTY2MjgyRjY5MjE3N0E4MDI1QUNBQTFFMjdDNkNBQTc3MTUyMzQwMDYzNEUwODNEREYwMzYyMkU2QUEwRkUzMkM5N0FDRDgwRjc0QTdBRUE4M0UzQzFDNDY2MjA0NTRGMTlEQzQ0RjY5NTY5MkNGRjhDOUI1OTI0RUVBNQorOTgwNTUzRjBEQjJGRDA5REUzQzksIDgyQ0VERTk4RkRFQTA1RUU4MTRBN0VFODZGNzNFQjVEMTk2RkEwNTI5Qzk1OEY4QUNDNURDNjVFQTg1NjZCMEQ2QTdBMDY5QzkwNjgwM0M4MTI3NzREOTJFQTE5NjQwMzMyNkY1Q0NEODRBNkUwN0VCNURDQTQ5RDg0NTcwMTc5NzEsIDgwMjFFQ0I2Q0E3MkZBRDA2QjY5QTA5NjMyNDVDMjZDOUQ1NzgyQUNCMjg2OThFM0E4QURFMUREQUQyMEMwQTNGQjBFRDkwRUFENEE3Q0YwQTUzM0FGNTA4ODg0MzU4QTZGNzA5RjM0RDkyNDRCQUFDNDBGRkQ0NEI2QjE3RUYwMEYKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgMTA3OUU4MjJFRjVCNDBDRjgwNTAyMTRBMkFFMTZGMjRGMTE1QkI5OEMzNzlEMUQ5NzE4RUFBMzNFQzlGOEZBOTRDMDVDMDE3Q0E1OTExN0QyQUE1MjEwOTgyRDU3OTg4OUM2NzVENjEyNDBERkEzQzcwNjBDODU3MzBERUIzNkNBQkUsIDEzMzkyNEY2NzQ3RjY2MTFBMUVFNjZCMkU2RkNFNDkxRUUxOEE2QkYxMURENkM1NkI5NUFFNUUyQTk2RDNEREM5RjIyQzBDM0NGRUVFMTgyNDlBNUQ4MDc4QTc4NUQ4NUEyNzFCMEY4QTZEQUM2NkM0NDBCQ0NFNkE0REUzMjBBRTc4Cis1NTgyRkYzNzdCNEFFNTU4RDAyMTEsIDQ2NEM3RjBCQjExQzRFRkEzMDkyMjFCRDlGNjE3RkI1QzFEMjg2QUZFMUFCMUNGMDFCOEZFNzEzMTU2RkI5NTU2NTkyRERGMUZDNjdGRDcyQzM4MjQxNENCNDM2NkU1RTE3QTg0ODkyOEQ4REFBRDQ4RDFCOUQ1OEY0MTA4NTg0NjAsIDQ5RDc1N0Y0QjlENTk5M0UwRTc1MTZBRjQ1REU3RUZENzZFNkQ0MzNCN0I3M0Y5MEY2NjlFRDAwODRDNDU2RjkxODFFNjkyNUJDRjYyMDM2QjlBOUNDOUUyODM2QjhBM0Y5MUNBNEU1NDY0REU3NDkzOTJDNEQxNTlGNjgxQ0U2RjIKKzEwMDg4RkRBNjcxRTBCMDBBNzA2MzMsIDE0Mzk1QzVGOEZFQzRCRTA2MTFBMTMyMDhGQTBBNTE4ODRCOUI2NDEzNEQwRDQ5MERDRDNFMjI2ODE4REIyNUY2MEJGREZDQUEwMzhERTVFQkVFQTI2MTgzMjQ1MEQ4NTczNkFEMUY1QTM1M0UwMzI0QTkwNUIwMDRGMTE3NTU2NUYyLCAxQjk5RjRBRUNGOUMxNUIxRDA5MTk1ODQwNDAwQ0FFNTY3RDE0MUEwNjgxNDBEQ0MwOEVGMTFCRUM3MjU5QjEzNTE4RkY2Nzg2MzU0RDA5ODU5QTA0RDExN0U5NEU3NjU5MjkxOEMyMUY3ODEwMTAzNUYzOTA2MjMyRTE2NDAxOUREMQorMzAxOUFGOEYzNTVBMjEwMUY1MTI5OSwgMURFREVCMzU1REZCMjVDMDc4MUJGNUI4RDlERTg4QzlEQUI1NkRCOTk4QkM1QzZCMDYxQUFFRDk4RUU5NTEzMjE3M0U4MUZBMTUxNUFBODU0MDE1MEUxQjZCQjgwQkI2OTY4MjM4MTBBMEY4QUQxN0FBNDFFRjZGRTM3ODZDOTEwNjMsIDExNTc1QUMxQTM2QTE3NEZDOTEwM0YyMkQ5OTdDNjdDNzY4Nzk0MTA5M0EyMkU4M0QwNEQ4ODlBMEU0QzQyMjhGRDEzQjAxQTM4REFCMTVDQ0Q3QjQ5RTIxOUE2Njk3MzM5Qzg1NkY3MkJDOTk4NzBCQkQ1RUMyREEwMkM1RTUwODM5Cis5MDREMEVBREEwMEU2MzA1REYzN0NCLCAxNkY1ODYxRTcwRjIwQTFGODA5MDg1MjUwNThCMTc2OTZBMTExODVGNjU0NEM3OEQ0RjMwMjU4ODE2QjJCNURFQ0M3RTI2QjMzM0QzMUUyOURDQjI2RTdCMTU1RDM0NjU2QkFFRjVDOUQ5QzlBQ0IzMkM1QUYwQzA1NzFCQTg2MjdGNCwgMUZFM0FBOTVDQUU2RDJERTdBMUNDQ0RGMjhGMjQ5RkJBRDUwN0NDMDM1MzNDOTkyQTI5MTQyOUFFRTBDRTFFQjgzOTZGNEY5NjA2ODZDQTYzNTFDODgzRTVBOTM2MjhCQzI4REJERURCQzlDREI4OUQ5MkFCQjZGNERBNkQ3MzZDNDUKKzFCMEU3MkMwOEUwMkIyOTExOURBNzYxLCA0RTQ1RkRFMEZGRTY0Qjg2ODE4MTQ2RjkyNzgzRDFFOTY3QzhDNEJEQ0RBNDRFODkyN0Q3MkYyNjlBRkY1RjZERjhGNEJBRDZDRTNCMkE3MjJFNUExREREOEFGQzA0OEMzRDdDRjAyREEzQjRDNzE1NTZENkYyRjgyQzIwNzA0OUE1LCAxMjU1NTZBRDMyOTUwQkFBQjRDMzc2NzY4MTVGNDk4RkIyNzBBMjkyRUFBM0M3NjY5QTBEMTM2MTQ3NzJDOERCQjA1MkM2RUE5RTc1M0U1OEU5QzY1RjBEOEM0QjU0QTU4Q0IxRjI1RTBDNERDMTY3QjRBQzA5NDJCRjFDQzVGMEM5QQorNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIDFFRjI1NTI1OTEyRjI4QkM2RjJCMzIxQzEzQjdEMjcyMzdBREU1ODUxNDMxQTE5MEM2MTkwMTVEQzM1NzEzNjBCM0U3NjQ1MkE4QTkwNDUzMjUxMkYxRjIxMDUwOUZBOEVBQzJEOEU5RkQzQjZCODEwNTBDMjAyNkU2M0NDQkNCRDc4LCA3QUZCOEQ0MkJCNUI1NkM3M0IzOEE0MzAxNTM1NEU4NUQ5RTY1NDgyMUUzNzU2QzJGNTdGRTFCMzIwNkY4QkRDNjkzRUU5NkMxMTY2QjIzN0M5MENFOUU5QjY1QTQ5RjFEMkNBRTRCQzRCOUExMEFDOTRFQTBCNTA1QkIyMzNDRTRFCitGMzgyMDhDNEZFMTg0NzE5RThBRTI2OSwgRjMzRDc4NDMxM0I5RUZGRjA5N0M4OERGQTg3RUQ4MEIxQkZGNTYzNDA4MzJCNUJEQUIzNUUwQkVFMUQ3M0JBRjE4M0Q0NTVDOTc3QkE2NDNFNDJCMjE4NDAwRkM1QjM4OUIxQ0I5QTU1QjlGQUUxRDJGNjZDMjYxRUUyNEI1NDU2NywgRkYxRDZDRUY4RDBFNkFBRDk2RDVDOUNBODI3MDU0OTM3Q0Y0MEFEMkY2OEZFMjc3NDM2RTQ5NjZEMDRCNjRGQTA3MUE1NkIwNThDQTM4ODA3QzYxQzU1MzNDOUU2NTI1QzJGQjAyMjY2QkUyMjJBNUFDREZCMDU5Q0NCRUQ4RTI1NQorMkRBODYxQTRFRkE0OEQ1NERCQTBBNzNCLCAxRUQ2QzJDM0I0NTQ2QjQxREVDMDAwOTU5NDBDN0E4QjYyOUM1QzA3MDNGMTU4MzEwOTYyNDAxNzREMEExOEE5NDM3NjU2MTUzN0M1N0Y4NDgzMzE3QjIxNUIwMEQ0MjJEMDRBN0M0NzkwMzUwOTNDRDU4MEYxREJGRTgxQkJDQUFGRCwgMUI0QUQzQjdDRENFQjhDMzRGRDdEMzVGRDA4N0Q1NzM3QTg0NkQ3RjgyQzlDM0U4MUQ0MkIzNUQwODlFMDBBQUI2MTk3Rjc5NTZBNDc1NzI3RjVGRTI4OTlFQjE5NjYzNjA5QzlFQkQ4MzVDNEUwNjZCREM0REU4ODMwMTM4NDM3RjAKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgMUY1MTBDRjEyQUU1NTk1NTlCNkQ1NkE3QzRDRDEyQjJENkY0RTlCMjExQUM4MDM0N0JFMjhDNTQ0NTYwMzk0RTBCNzdEMTg5MDk3NTE0MjdGMEQ3Mjc1N0M5NUIyMjg4QUQ1M0IwNEVCMDRDMURFODIzRkZCNjU5OUNDMTI5MTA2NDcsIDFDODI1MzA4QzQ1M0U0QkUxQkMyNUE0NzBBQUEyNjJDRjI1NkJFQ0Y2NTM5MDA1QjE4MzU0Njg1NDFCOUQxMzdFNUEyMEVGRUU0MUI3MEJDNjEwOUU5MkMxRUQyMjkwREFGRTIwRjUyMzQzMzE1MEFDM0ExRDRCNjJBMzgyREE2QTQKKzE5QUVCNkVDQzZDQzhGN0ZCQjhBNUUxMTMsIDFEOTZGNzczQzE3MzZEMDQ2QURCQ0UyNzhBNDhDQzYwMEE0OTZBQzM1M0ZEM0EwRDg1QjdBMzlCNEYxMjc5NjQ1Nzc2NDIxODNFNzYyODM5NzYwMTRCRUUwMEU3RjhDRkFBRkRGQkYzNUZDNkU3OURENjM3QjY3RkU4QUZDMjJGMDE4LCAxQjIwREJBMkIxOEUzMUY1NjIwRTIyMzFCQ0E0QjQ0OTlGQkJBODQ0RTFENDI0RDJDMjk1RjQxMTRBRUE0QkJFQTY0M0MzMTcxMTI2QkM5NDk4NDAwRTY4OURBMzQ5RjM0MzRDNjkyQzU1OThEOTM2ODlDOUNDRjdBMEUyNkQxOTdCOAorNEQwQzI0QzY1NDY1QUU3RjMyOUYxQTMzOSwgQjY5RTRBOEJGMUFBODk1QzYxOEE4REY4OUNGNTc0QzA3QjczNzA3NDM1NTU3OEFFRUY0NTM0QzhEMjE4Qzk3NUEwMUQ4OUU2OTlFMkJDODQ4NjQzQ0Q1RDNEMUJDQTA0NjhCQjBENTdBRjExQjhDOTBFOEM5MEY0MTVEN0RCRDE0LCA4Q0RFQkI0MUFFRjA3MzI2QUZCQkI0Q0YzNTBCNjUxQkU3NzFGNDZDMjYyOTE0MzUzRDY0RTc1M0ZGNDYxNkVDMDdGMTQyMUZDMzg5OTkxMzE0NDlCOTlBNDJENDYwNTk2RTUzRUNBQURGOTUyMEQ4QzYyOTM2QzE5NDVFNjk1Q0VDCitFNzI0NkU1MkZEMzEwQjdEOTdERDRFOUFCLCAyRjQ0REFDN0I2NDIyNjE4N0U2RDRBMjQzMTIyMjY4MjA5QjI2QUY4OUMzNjk2MTQwODBBMDEwMkNBQ0RERjlGRjEwQTNBRDQ0NDNBQzA4OTVEOTM1RTc2RUM3MDc3RkMyMkQ2RjgxNDhFNDNCNEVFMUFCQUZFNzJERkQ0QTVDNDVDLCAxNjgxMUMzMDJCQUUxRDIxMzk5MjZERkI4NEUwNzc0N0YyOTkyRTg2NjhBNDM4NjQyRTQyRTAzNzFEMDk2NEY1QjlFNTQ0RThERDUwRkQ0REU3QTRGQzE0OUZBN0NFMTU3MDVBRUJBRUJDRTI0MzBGOThGNzYxRTQxRURCMDM0OEVECisyQjU2RDRBRjhGNzkzMjI3OEM3OTdFQkQwMSwgNTk5RjlBOUI1REY3RTQyRjczQkZGOTQwOTkxMTE1MDRCQzNGRTgxMzQwQ0I3Qjc2MUE5MDREOEYwMkU1N0IxMTMwOTM5QzU5MjZCQTZEOEU3QTJGMTZCNkVBRDE4NUE2N0U3NEJCRjMyRDlDMzUzNjlFQUMwOTRFODQwNERGMDhGLCAxNTExODdBNjRGNTE2RkI3RTU3NDAwOUEwNUZFRUQ1OEZFOTY1MTkwODEyODMwM0JFQ0VDRkFDODgzM0RERjVDMzNFMTlFRkNGMDg4QzJERjk0NDkwN0VEMUE3MjIyQzU1ODQ0REQ3MUZFREUwNjM0NDdDM0QyQjkwMEUzQjAxMTkzMgorODIwNDdFMEVBRTZCOTY3NkE1NkM3QzM3MDMsIDFGMEVFN0I0N0RGMDk4MUZCNjU4RUFGNjIyMTUxRkNENTg4NTZGOUVGMjI2Mjk2RjkyNjVGRkI0RDM0NUQ2MUVDMEJFNzk1MEJBODkxQzQ0OUIxNDE0Q0EwMUU4MjRDMjE5RTBGOTU4NjBCQkM0QzZCRDVENUE4MDgyQUUxNTZBNTAwLCAxMzZDMEZEQjEzM0RFRDE0MkQ5NzNDRjNGRkI3QUU1OUY1RTM3OUU1M0FCQTNENUI4QTc3MzUyNEE5NDdFNjk0QjQ1ODAwQUVDMEI4RTY0QjFEM0JFNTQ1NjlCMTJCMUU5NkQ2RjI1QjYxMjZGMDM2MDRFQjVGMjA1RTBDMEQyQUZGOAorMTg2MEQ3QTJDMEI0MkMzNjNGMDQ1NzRBNTA5LCA5NjdDOEQwNTdDMkM2QzUyN0ZGRUM0QjY1NDE4Q0QwNzBEMjBDOTE3RjdFQ0Q1M0I5ODAzNTJDMjZFNEU4Q0UxRUVGMUJEOEMxOEJFQzYxQTMyNTkxNjlBQTk1NzNFODlCRDRBNDMzNjVBQTM1MjM4RkY3OTJGODgzMUM5NEY1Nzc4LCA3NkE2NTJDOTY3MDZFNDkwRTA2NDJCMUI4OTdDMUU4MzVGRkZGNUEwQjZCNzBDNzI5OUMwRkQxQ0Q3RkM5MDJGQjUwNzhENThEQTU4M0REQzlGQUZGNEExRTU5NTFDNDIxMTE5REU4MThFQkQ3OEQ0QjlDNjQ1QTgzOUREOEZEMDVFCis0OTIyODZFODQyMUM4NEEyQkQwRDA1REVGMUIsIEQ0ODE1MjlDMEI4OTA4QjBEMjZCQTUyODBDMzZDMDkwNTM5QjJDODc3N0RBNDIyNzgyREFDMzJCOEQ5MzhDRDlGQkU0OEIwRjA4OUNDQzE5RTkyNzQ3ODM0NERGNjUzOEExMkU0QzcwRkI4M0JCMDE2N0JDNUY2N0RFQkE5NkVBQzksIDEwQkNBMzAwNkREOEE2M0YzODAzOTMzMzdBREE3OEVBMDlEQkVGNjdCNzM0MTAwNUU1NDI2RkVCRTZDRjZCMUQzQ0U2MTY0QzNEQTQ2QkI3QzU4M0M3RURFRTZCM0IyQ0Y2MURENzE3MDY2OEVDQjU3ODBCRkJBOTM2M0I1MUQ4RDdECitEQjY3OTRCOEM2NTU4REU4MzcyNzExOUNENTEsIDE3QzBDRTQwNzEyRjRCNTI3MDVEREVCMTA0REFCRDI3RkUwREM4MjUyRDczMkVEOTZCMUVCNkQwRDJBQkM0NjU5QjExQTdFQ0YyMUZFMUFENjZFRkRENjQzNkQ0OTgzRDFEOTE5MzM0ODYzQUYwNDM3ODNBMEVEMTZDOTFCMTRGRUJDLCA2ODBBODE5MUU2MEU1Q0Q2RTY0QzUxMUIyNzFCNjY1QTRBN0EzMzI1MTEzQzk2ODI5RkMyOEZCNzUzMDVEMjA3QkUzMzdBNzc4MzJBNDYxNjExRjc2RjYzNjM3REM4RTJCMjgzODMwMjU4NjlBRkU1QjYzN0UwRDZBRDU3RkQ1NjczCisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCAyRkFFNTRDRTFENEFFNUI5RTgzQUNEREU5MkM0Nzc0OUMyMDZGNDFCNzJBNUNENUJBQUQwMzFGMEFBQzM0Q0E2NzlENUY4NEI4MUFFNDI5MUM3QTk4QkIyQzM5NkMyMkNERTBEODk2QkUzNEZFMjM3MzkwRDI3QkU1NEE3NTMzQURELCAxNzNFRDQzQ0NEN0ZDRTNCNTE1Qzk0MUJDNzQ0RkM2MkUyQjQxOTNFMUQ5NURGNjI0NjYxRjc5NUFCQjI2MUI1REE1Q0JGQUFBMDJDRjk5ODhCNUVGMDVFMDk1QTJDN0NCMEFDRTM1NkQ3NkQ5MTk4NTJBMUQ2NzJFMzdGQjNDQjNDNgorN0I2QTQzQTdFRjkwMUZEMjlGMDVGOUU4MzdEOSwgQ0Y2NzI3REQ4OUYxQ0ZDMTk5N0JBMTY4NjJDRjE5RTkyMTdBODJGRjI3MEIyNDdBRUQyQUEwQzk5MkE0NTI2RTU4Qjg2RTIzRjM3NUJGNTBCNTYyOTMxMjM3MEZBRDFFM0ZBMURBNUUzQjJFNkRERUY3RDFGNDhFQjI0NTI3MDQ4OSwgQUIzNUE0ODExMTAzNzI4OUE0QzhFMzYwQjFBRTMwMDBBRERFM0ZBMjc5MTdCQURFRjgyNDUzODZGMURDQzYyNzQ1MjJBM0QzOEM3NDk3NUJGQTUyNjRCRjFCQkNGMzlFMzdDN0U2RURBMEE2RDAzQjg5NjE0MDc3MTk5MUQyODg5MAorMTcyM0VDQUY3Q0VCMDVGNzdERDExRURCOEE3OEIsIDE1RUQ0MzYzRjA3QTI4QTMwMTEyRUZBOENBOEFBNTYzNTBBRjU3NTJENjVBRjRFQjU3MDA3MDI1MTE2RUE5RjA0RUNFNDgxRjkwRUI1MzQ5NTc5OEY4OUQ0QTU0MDQwRTVGRDRDMTZEMzY4OTIxODY1QkU0NTRFRkNGNjBBRDVGQ0E1LCA2ODAzOUU4MjIwQzE1OURDMzBGMzVGNDM3RDlEMTc0NTc0QzJBQzY3RDM4OEM5NjZDNDg5NDYyMjE3QzIxODlCMkFFREVFOTYwMjg4MDU3OEVDREI0OTAzNEMwQjEwNjVDNjU5REQwNDNFREU5M0FDQjFCMThFQTg3NENBREJBMDY0Cis0NTZCQzYwRTc2QzExMUU2Nzk3MzVDOTI5RjZBMSwgOTU4Q0RGQzM1N0VDMzYxOEM3NzYyQjEwRTNENDVFNzZFQURGOTE1N0NFQjUyMzZBNTY0ODk4REZDNEFGQUFBRTI2QTA3QkU4QzY1M0E4RTE2QTM2REQwRjRFNDQ4QTFFN0NDODhENkI3NTQyQThFNDk5RUI2NzhGNzhFNEI2QjJDQywgMTk3MjNGMENERjMzQkQyM0ExNEJBMTNBOTgwNDNGQjYzQjc0NkIwRURCMjg1Mjk2M0U0OTFFMjFBRDM3Qjk1OUY1MTJERTg0Rjk5NThCQ0RGNzdEMjIxMjNGODg3QTY1OUFEQjI3REI2NjhERUVEOUM5MEQ3RDI4MzM2ODY1MUM3RDgKK0QwNDM1MjJCNjQ0MzM1QjM2QzVBMTVCN0RFM0UzLCAxRDZGRjgyNzAyNDMzMUM0NTEyMEM0QzcxREYzNUQ2ODg4QjEyQzVBRjRGQjcwQjU3MjQ5NTdGREZFODgyNEEwRTcxMzEwNkU4ODhCNzdEMDMxQjc0MENCNzNENEQ2QkQ0OTVEODA0OTRBRDYyMUYwQUY4NzI3QTY3NThBNDU1QzY4QywgMTlFMkREQzMyNjA3OTRCNDUyMDRDOTQ2QTI0MzdEMjY2RjlGNzk5RDZGOEFFOTg4NkQ5NEFCRDUwMTlFN0FBNzk1N0Q1ODA0NDI2QUE2MTk1RUFCQTk5RkQ1RTJFQjhFMDkzNjNGNDZGQUFGRkMyNjJERkJFQUEyNDFDNzlBMkU3QTEKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgOEY5NjNDMEQwNjBEMjczQzc0QjA5N0ZGNTc2MkNGMjI3QkQ4NTk1NjFEMkZFNjE5NUMxRUY0OTVERTFCNzlDOTc1NjJDNzg2NkEzNERFNTZENjFCM0E4RUI0MkVFODdDM0U0MzcxNTdFRUMzMDY0Q0EwQzdCRTZCMzhGN0IyNTlFLCBCRkMyQTlCRDk1MDM0QTNCMDVGNjNDRjkxNDAyNDAzQkM5OTg3QjIyMjkwMjg4ODMyRDg0RjMzQjBGNjczOEM3RDAxMDAzM0VBMDMyRjMzMjFCNkQ4NzcyMEU1RjZGNTY0QjFCRjMxQkQ5QTM4MDJGQkYyRTEwODEyNjU5MUU3MDdBCis3NTI1REUzODY4NjVDRTM0RUNGMkFDMzc2RDAyRkIsIDdCOUYzQjc3REFCMzIyRkJCM0RBMTlFRjczRjZGODI5RDg4MTYxOTQ1MUIwQzVEQ0RBQ0UxN0VBRjA4MzBBRjAyMDRENEQwQzUxQjgyQUNEOTQzNDE4NzBCQTRDNEVFRjFBMTc3REEyQUFFOTMwOTJEMDRCNDgwOURFRTk0QTIwNDcsIDQ0QkQzQzM2MTkyQ0I1MjQzMTU4NEYwMUZEMjExN0M2MUEwRDk4QjlDRUYxQUY5RDQzMDUxMEI5Qjk2Mjk1NThERTc0NUFBM0NFRjJCMjExQkU0RURDQjlCRkQ4NTNEQUQ5RjRCMEMyRjZEQTg5NTRBQzBDRTI5NTY1RjVFQzFGNTgKKzE1RjcxOUFBOTM5MzE2QTlFQzZEODA0QTY0NzA4RjEsIDFGMkMxNjg1RThERkJBNjhEMzc1OTg2OTA4MTI4OENDOTkyMjQxODlFQUNBNjEzOTJDNzJCRDRDNDk2NEM2N0UzODk1Q0U3QjVCNDE0RjRDMEFGNzNCNzc2OTFDQ0IyNkI1OTI2MzlFMzAwOERENzJCRDM4RUI5MDIzODE1MEVFRkRELCAxMTQxRkI2MkE5NDc0RTQzMEE3MTRBMkIwNDc0M0ZERkZDOTM4QkZGMTZERjlENEFBOEVBQ0Q3MENGMUYwNUQ4OEE3QjlDNUI4RkYwNTM2MjA4M0VBMDkxMkQzNjU0OURDM0FFOEMxRkRBMkU3QjNEQzE3Mjk1QUUwRjAyN0MxNkE0NQorNDFFNTRDRkZCQUI5NDNGREM1NDg4MERGMkQ1MUFEMywgMUVBN0FGRkRFQ0M5RDJEMTczRTBCMkIyREMwQkI1NzBEREQxMEQ3ODE0MDY3RjAzMDYyMEI4RkQ5RDhFMUJDOEI1NTI1MDY0MThGNTEzOTYxNzRGOTkxNTA4NTI0OTBEMEY2QURBQjM5MkI3Qzc0M0NGNTM3MjhBREY3NDEyQjNGMEEsIDEwQkRFMTQ5QjM0QTIxOEI2MkQzNUFBM0RGMjUyRkVGNDk0NzNDMkY3MzBGNDg2OEU0NkZFREI1MTJBQzhGMTc2QkUyQTBDMkMzMzlDQkNBM0E3MEY5MTMzQ0UwRkVFNTJERUJCNTNCRTkwMjg5MDFDNkNBMEIyNUY3QzdGODQyRjJFCitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCBGQjg2NURGMjZDQjNBQzMxRjZERkU5OUU3MjNGNjMxQTg5RDYzMkI2MzcxNTYwNkQ4RUZEMUFDRjdENDkyQTlFOTc0QjIwMEIxOTA4RTBERDUzMkQ1NjRENTY3RTM3MDE3Nzc3QTZCQ0UwNDBBNUVFNjQzOTUwRUJCODM4QjYwMUMwLCAxQ0FCNTA5RDFFMEU2QTFCNTlDMkE1RDM0ODdENzg1MkNCM0RBMTM1MzNFQjFDMkZBNTBBMjU2QjgwNUI1QjBBRjM1RDk1Mzg0ODQ2Q0FFMUMyOEVDNTMyOUY4MDRGNjM4MUJCNzhBQ0NGM0Y3MzczNzNBMkE2N0ZFODMyRDcxQjZBNworMjUxMEZCNEZEOTA4MzYzRUJFRjhDODdEODk3REYxNkIsIEM5RjAwQUEwQTU0OEZGQUNDNTQ3OENGQTQzQTJGOUYyM0ZEMzIzOTJGQUNBNEY2OEFCM0ZCRTY2MzgzQjJCNkUzN0JBMzU1MzI2RjQyQjU4QzNBN0Y2RTkzRTUxOTA4RDRFRDAxODVEMDVFNUE3ODQ0OTI5QUUyMDhDM0I1MUI0NkIsIDVCNzU2OTZERkM2ODREQzlBODQzMjMxN0VGRDA3QzBCMjY5MUEyMzdBQzBFNzQ5OEI5NjczMEZGNTQ3QUE3Q0Q5QjUxQjg0N0JCQ0YyREVEOENCOTNCQjA0ODJCNjdFMTM1Rjg3NEY1RjRDNDJBOEJCRTFCNzBDNTg2MDBFOThGODUKKzZGMzJGMUVGOEIxOEEyQkMzQ0VBNTk3ODlDNzlENDQxLCAxRjg2NkVEOTgzRTZFRjU5MDM3MTYxOEEwQkQ4RkE0MkIwREQ0NkFBQzk0MUY4NzdFQzE0QjI0QzJCODI4Q0VFRDM5MUFDRkVDRUZDMDRFMzVBMEREMUZFODU2NDI2RDgzQUEzRkZFMUY1NTU2OTE5RkQ2OTcwNjZCQkVEMzMzOTMzNSwgMTk5NTg1REQwN0JBRkJBMjRGMkRGQUUzNkEzMEUwNDBBQzI5RUJDNjNBQkRGQ0ZCRUEwOTU3NzAyMjYyMzM0RUIxQTdGQTE3OUMzQkJGQkU5MjhBRkJCNEQwNTMyQThGMEVGMTEzQ0RCODk4MjEzNEE5RDMyNjE0OENGRUQyMUY3NjIKKzE0RDk4RDVDRUExNDlFODM0QjZCRjBDNjlENTZEN0NDMywgMTBDRDRFMzkzREYwMTIwNjRCNzM5MzRDRkY3RUZCREZDNzJGM0Q1OENDRDczM0Q4ODVFRUJBRDRCOTFCNjRBNUU1MDRGREU4RjIyOTlGNzA0NDcyNzcyRDUzQ0U2RDgxQkIzOTYzMkI4MUFCMjVGRkZBN0M3NzRFOTAxRTFBMjIyRjAsIDI5MTc4RjEyNjI1NzQ4ODk1MTE4RDcwMzA1NTM1RUY4OEE5MzExM0ZFRTk3N0RFMzNFMzMwNjMzRDQwMTgxRTlGNDVEQUY3MDMwNTQ1RjU1RUU4QTYxMkM2MDhCN0Y0MUYyODEyQjc5RDlDMjZDRUUzNzM0REU1NTEwMjZFNThDQUMKKzNFOENBODE2QkUzRERCODlFMjQzRDI1M0Q4MDQ4NzY0OSwgMTcxRTU3OERGQ0RBNjlCRDlEMkRBNTdEQkU4QTUxNUQ0OEQ0QzRCQTIyMjYyN0ZCQjhCMDY4QUJBNTYwNTk1NjkwMzExMTNGNjBDRkU4MDI3RDc3RjNGQjk5MEM3M0Y3MEYxQTJFNEJGMzFERTE5REQwMjAyMzM0Q0QxMTU3RkY1RDMsIEYxMTAxNjc0RkYxQzI4MzFFMkMxNDVCRDJFQ0NBQkExOUFDQzJCODdCNjhBNEY1QkY1Q0JENjg1MjBDNjc5ODYxODAwQzgzNjZENTQ1QTdGQ0Q5MTI0MzQ5NzM3QUZGNTQ3OEVDNERBRTVGMUFFMkVFQ0Y1RjlGQjhBRERFOUEyOTIKK0JCQTVGODQ0M0FCOTkyOURBNkNCNzZGQjg4MEQ5NjJEQiwgNTQyODgwQzA0MENDNjgyRUZFN0JBOTJEQkRFM0RCRkZDNTc4MDU4NEFFM0QxRjdDMjk0MTM2OEYwQjQ0RjU5Qzk4RjI3MDE0NjQ0NTgwQkJGRkEyQzYyQzRBODFERkEwODdBQ0JBN0YwQTI0RTdERDg3N0ZDMjZBRDEwRDA3NDA0MCwgMTg2ODdEMTMzNjFCMkU0REM2NkU4MTM2RTUwQkJFRjA3OUI1RDZBRjY0QjgzOTI2NUVDMzg3MUIyQTlEMDM0RkE5N0E5NERDRUI4MUQxNTRDMDIwNjM4RDM4QjRCQUUxNkM2REI4NjU3NTg1RUI0RjYwQjcxQkEwOEM5RUYwNUNBMkYKKzIzMkYxRThDQ0IwMkNCN0Q4RjQ2MjY0RjI5ODI4QzI4OTEsIDFDQjg4MTZFQzY2RDgwRUQwNUMzMTcyQUEzM0I0RjhDOEYwMjM4MTY3MDhGMkJDRTNCNDFDNDJBQUZENDFDNjg1Mzc5NkY3RDAxNDEyNTEyNDIzMEVDMjY0OEJEQjcwODhBMUFGNDU0QjAxQjRFQTZGNzdFMzkzNjFBQzY5ODEzOEVGLCAxNjUwM0M5OTNCNTFGNkZDNEMzRUI0QThENDA4RTczNzBFNkVGQUUyMTRERjA5ODUwREZFMTJCMUMyRTdFOUI5MDgzMUIxRjQ5NUNBODFCRUI5QTk2QzY2MkUwQjIyM0NGNEM5NTdFMkIzQTM2MkFCNjAzQjBERDI2NzcwQzYzMjFGQQorNjk4RDVCQTY2MTA4NjI3OEFERDI3MkVEN0M4N0E0NzlCMywgM0IyQzU1RDcxNzFCQURBQTI3RjM2MjU1NDU4QjMwQTcxNzQ5QUQxN0YxMTE0MDg1NDNEQkM4M0RERUQ2M0NGQ0E3QTIzMkE5QTNGRkIxODA3M0NGMzk4MDNFOEY2RjBDMUFGQjVFNzQ1Q0ZDOEY5MjNDNDEwQjdBRTc1MUJFODBFQSwgOEY1NjcwMTg0OUM4RkFGNzBBRkNCOTJBQUUyQjBFNDhDMUU4NTExNEI3OEQ1NDU2MzVBQUNFNDNGQjBCNTFFQTUzQjNDQzZENTRGMTMzNDVCRjM1NDkyNEZGQTRFMjZDNzEwMTczRjI4OUU0OUI5QTFFMTAwNDFDMjA3OEMxQUE2NAorMTNDQTgxMkYzMjMxOTI3NkEwOTc3NThDODc1OTZFRDZEMTksIDFGRTAxMkFFRjk1MzdFNTc0RkU1NTBFOEUxNDVGMjAyNkY5NkQzRUUxRDIzMDFCM0Q2OTY5RDk3N0M0QzMxNEU5MDc4RjBDNUVEODVDMTZDNDRDQkZDRTA0Q0I0NEVDMkE3MDcyQzVEOTM2NDk1QTY4QTYwMUJFMzJFREVDNTk1QjRELCAxNzQyQUMzOTY2MTAwMkY0REUxMjMwN0QzNjdGMDE3QkI0Njg1QUIwMzAzNUQ2QjkwQ0ZCNDM4OUUxMzlEQ0RGRDFCNDMyRkU3REE1MUQ4NzUxOUU0NkNFOUM2RTY0OTZBMTNGNTkyOTk4MzBCMzI2QUE1NDk3OTQ3NzUyM0Q1NDdDQworM0I1RjgzOEQ5Njk0Qjc2M0UxQzY2MEE1OTYwQzRDODQ3NEIsIEQyQjAwOEMzRDU5OUNCN0NDNkM0Q0NGNUYwNjQyMUI0OUZBNDU0RDgwQjA1MDNENjZFODU5RDAyRUYwRjZBMTUwN0ZFM0I0MkI1RTNCREVDODMyODhBRjBDMkU3OURDMzQ4RkZDMzUwOUEzODlGMjIzMTA0Q0ZCQUM0MzM3QjIwRjAsIDE1ODU3MUQyOEQ4MTc5RkQ5MzRFQzQxNDZGNDVDODQ0QkZEODA2REE0RDIxODU2N0ZDNENGQjA4QTFGMDFCNUVDMjEzQzgxNjg0Nzc4MTZGMjMwREEwRkJGQjY2NTI3OEU3OUVFMzY1MDFDNjczMjkyRjNERTgwODdCMUJEN0UxNkQwCitCMjFFOEFBOEMzQkUyNjJCQTU1MzIxRjBDMjI0RTU4RDVFMSwgNEMyM0UyOTczODMwMjIyNDlGQUVFQzUxN0FGQkZDMEVCRTQ1QUUxNTYwMkFBRjQ1MDIzQkUyNUE5MzNEM0E5QTg1RkFGM0I3MkEyRTI3ODUyOEI5QTc1M0QzMDA1RTI5OTc2NEJFRjNBNDc1QkZFN0RENjhFQTNDNzJFN0JBQkY2RiwgMzZENDY4MEM1M0E2MDQ3MjQ4M0I3QjhGMTg0NUQ1NkJGMTlGRUFGOTcxNDZFMTZDNjZENzhBNEM1QjJFRTI3MDg4QUYwREM2MDI2NTIyODIyNjlBNjhFRDFDQkRFRjlGQkM2Mzg4QjI4QkU3MzJBOUJGNEREMzhDNTk5RTMxNDNGOAorMjE2NUI5RkZBNEIzQTcyODJFRkY5NjVEMjQ2NkVCMEE4MUEzLCAyRjdGOUQxQTg5QjcyMzg0Q0Y1QjVCNjA0MjQ2RkY4QUI0QkYwMEE2OEVBMURGQTdCMURERjgzNDVEMjAxNkY1NzAyNzZBMkFDQkYzMjE3NzJERUM3NTI0MTI4NzI0OTM4RTc0RDVFMzY5RjZFRjVGOTE5QURGMkU4RjBCOEY4N0NCLCBBREFCQTIzODQxMzY1QTgzRDI4N0JCNTFDNTBFM0NEMDE0OUMzNjkwODBDREYyQzEwODJBN0UzNTlBMTY1MDZBQUEzRjBCNkRCNUY1NUIzQ0U5OTc3NzcyRDQzNEQ3QUEwQ0Y4RUVEN0IzMjJCRkMxNjc5MEUyQTI1N0FBMDBCMTQ0Cis2NDMxMkRGRUVFMUFGNTc4OENGRUMzMTc2RDM0QzExRjg0RTksIDFFRjJEREI5NENCOTQ4ODQ0RjdDMDAwRkJFMDkwRDc4NzhGMDJDM0FFMzdGNzIyMjIwRDkyMjU1RjUyNDQ4ODlBRUUwQjVEMENBOUNDMURGRjhFQkNGMzVDNEMxNEQ3RTMzQzA1MkM0N0JDODcwRjVDMkY2NDhGM0FBOUYxNTZFMzcyLCAxN0YzRDZEODkxMjVBQkQ0NTdFRTQ1QjkxMkFGQkU0RTlCMjAwOEM3QTk1NTYyMzAzQ0Y3QTBGMkJFMDlCNjlEOTA1RTU0OTRFMEVCM0ZBRTFDNDdBNDg5MjRDQUI0QzU2RkE0OUU5NzBFNTc1OTlDODUyRTkzMjA4QUMwQjc3NDdENgorMTJDOTM4OUZDQ0E1MEUwNjlBNkZDNDk0NjQ3OUU0MzVFOEVCQiwgMTFBMDkwN0Q1QjRFNkJBQUIwNUY4MTNBMzA3RDdERjk0RkUzMTAyNEQ5NjIzM0REOUY1Mjk2NkE5NEVFMTlCRUNBRjBEOTNGNkVDQ0E2MjE3RkQ3MDk1NEIzNzkyOUJGRTIyRUQ1QjUyOUExRkFERTY4OTZFRDM1ODY2OEU3NDZGMjcsIEZBNDZCM0I2QzU2OTRGMUI0QUM5NzYzRTk4Nzc2MjNCRTZEQ0IwMUQ2QTEwMTA4OERFRERBNjlGRUQxOEQ0MkIwRUQxMjQ2QzREREM3MzlEMDNBNDExRUFCM0U2MzE2QUZERTcxRThDQzBFMkFBMDRGQzhFNUYxMzdCODRDQjhFMzAKKzM4NUJBOURGNjVFRjJBMTNDRjRGNERCRDJENkRBQ0ExQkFDMzEsIDFFRDY1NjlGNUY2NjlGM0U2QTU1QTUyNTQ2MDYwRDU5RDVBMTU2MUIwRThERjQzOTYwMjE5NUNDOEJBMDFDOTBDM0Y4MEQ3RkVEMjYzMUJCODE1M0VGQTQ2RkQ1NkI4Q0IwREVERTk1RjlGRkQwQjA1NDZEMjNBQkVGNzk5NjIyNkMyLCBGNEU0QTkyMzcyMDkxNzI0MkExNkJCN0NDNjJBMDdDNEQwMTdERTY1M0Q3NkFDOTEyNzgzQkRFQTIzN0Y2NzMxQUMyQzgwMkM3RUQ3MDYzOUIxQjAwMDI2NTM0QTlERUMyM0Q3MTMwQkYzMTE3NDc1RjlGMUEwNzAyQ0RDNkQ2RDU5CitBOTEyRkQ5RTMxQ0Q3RTNCNkRFREU5Mzc4ODQ5MDVFNTMwNDkzLCAxRUYwMUUzMDlFOUIxRkI2ODdBRUNFOTQ3ODA2QzM1Qjk0NEQ5RTVFRTA2RTYxREI5MzkwRkRFMDExMzA5RTBBOTFFQjBGNEZBNEE1RTYyRTZENTk5OUU0NkE0QzJENDhFQTg1M0RDRDkzMTNGNEJGQUY4NTNDNEFERDFDRjQ3QkQ3MiwgMTk1MTU5ODQxQzlEMTZDMzUwQjUyRTE4MUY1NTlFQjk2OUJCMTEzQkQwOEI1MTU5QjA1QTE5ODBGNTNDNzk5RUMxQ0RCMUFBNEM4QTA0MEI5RDlENjdCMkY3OTRDQ0E5NUVFNzY3QkIxOEFGOUZEMzZDNDUzMTgyOTRCQTE2NjhDODAKKzFGQjM4RjhEQTk1Njg3QUIyNDlDOUJCQTY5OERCMTFBRjkwREI5LCBCRDkzMzRERDM0ODVCRUE3REExMEUyRUNEQzhGNTQzM0EzNEM5QkZFNDIzOTEwNjhCQjhDMDYxQzEyOUY3MDBGRkZGODNCNkZGOUQzMUIwRTFEM0UyQkY2NUFDREZFQTlCRDI0NEQwNTVENTBDRUUzNTU0MTJBNEVGOUU4RDQ5MzU2LCAxQjg3NzA3QkQ1RDMxN0VCNjY4RDAxNzZCNzg2QzcyOERDRkZEQjgxNDFFRTk0NUJEOTg5QjI3QUIxRjMxMzIwRTVBMzcwQzU4MkU2RjY1RDkxQ0ExNjZGRjhEOTlEREFBQ0U3QUVGQkUxNTc2QTg2MTM1MTcxQURBQzFCM0ZDNDEyRQorNUYxQUFFQThGQzAzOTcwMTZERDVEMzJGM0NBOTEzNTBFQjI5MkIsIDE0Mjk5MUQ4QjIxQUI1M0ZCQjUzODBCM0RBQ0FBM0U0MUZDMUVFMUVDRTc2NDFEQzcxNTg2MjE0MTg1MjNEQkNFQzBBQkM3Q0EyOERCRDZCQ0NCNkMzMDk3QzY3RjVCNjBCMjAzRjA2MzZGOTQ3OUVCMUI3Q0ZCQjc1NTdDMTRENUEyLCAxNDM0RTQ0RDUyQ0RFRDJFRDE5QjVBM0I2OEEwQzYxOEVCMzdCMjE3RjUyQkUyRTU2Q0NBNDFCMzJGQjFFMDQ0MjRGQ0Q5RTA3QkFCREQzNjk1ODEwOEM3NzAyNzMxMURFNDkzNUEyMDNEQ0IzMkZBRjE4MzQ1RURGNzYyQjRGQ0U3NgorMTFENTAwQkZBRjQwQUM1MDQ0OTgxNzk4REI1RkIzOUYyQzE3QjgxLCA3NEZCNTE1RTQwNzhEMkNBNkIxQjE3RTMyOTdBNzA3MjZFQjU2QzEyNEVBOTY0RUMyNEZFQjYxMzlBNURBNDdEM0YxOTYxMDlBRkE1RDExMTVCMEM2NDQ2NEQ4QUIxMTY3MDhEQTBCNzYwQjk5MDM2ODBBRjk3RjMwQUI1NTUyRTE4LCAxM0QxOTQ5OEM2NUE2RDlCRDcyMDhBQkZCRDc0QkUxQjY3QjExM0IzNzhCNTgwMzVDMkZBMEQwNjkxRDcyRUM2ODNCRkI3MDAxMDgwQzkwNjM1RTgzN0I4NzYyMUU2MTg2OTAxNzlFMTlGNTgwRTVEQjRGNkIzQjI4RTYxRTZGRUEwNQorMzU3RjAyM0YwREMyMDRGMENEQzg0NkNBOTIxRjFBREQ4NDQ3MjgzLCA0MDU4MUVCMEM1RjE3ODRDNUEzMTczQzI3M0FEQUIyNkU3RDcyRUY3NTdEMTc1OTg5QkY3M0JEMzY0ODEyRjczOTEzODFEQzk2NzM1OTkwRjhGMUYwRTM2RTFFQUNFNTVGNzEzRUU0RkZBQTMxQjUxNjgzOEEzQzVGODc4QkQ5NjNDLCAxNzNCNDFENDZDNzM0NDNFN0VFRDNGMTUzQTE3NDRENzA0N0U4QUNDOEE5NDlBRDI0MEY4RDMxNUZENjgxRjRGRDQ0ODU1RDIzQzVGQTRCQUFGMDUwQ0QyMUMxMEYxM0JCMUEwNDFDMTcwMjk1QUUxOUJBMjVBMURFMUM0MjA4RTRCQworQTA3RDA2QkQyOTQ2MEVEMjY5NThENDVGQjY1RDUwOTg4Q0Q1Nzg5LCAxNTY0QUExOEM1QzEwMzY0RTc1RTEyMTFFMUQ1OTU3QzY3M0IwNjQwNzIwQ0M1MDAzQTMxQkQxMzY3RTI2NDc5MzdDMjlDNTZCNjkxNkY0NEY3M0Y2MEIxRUFGNTkyRkQ4MDhENEM0REU4NzRCRERBMjdFNUQ4OEMxNEE3MUQ3NUVFQSwgQzUzRDhBMjMwMUYyMTNBNjgwRjU4Nzc0RkI0Q0ZGOUREM0I2RThFNTNCOTRCOTRGQTEzMUJFRDg3REM1M0NGQzRDNkJFNEMwODRGRjlCOTRGMzU1OTBCNzQ1NTFDMDM1MEU3MThEOTk0QjEwQjFDOUU0NDM3MzE1MkU3NkZFQzI1QworMUUxNzcxNDM3N0JEMjJDNzczQzBBN0QxRjIzMTdGMUM5QTY4MDY5QiwgRDFFNkYyRUYxMkM2Njg2OUY2NzkzM0I2NEMyRjRFMTZFOTM0NzY3MjBCODczODNFNjFGQzQxMEVGM0QwRjk2ODRDMUEyMUM1QjkzMTVDMjlCRDRENjMxRURBNERDRDEwNzg5NzhFNjc4MDQ2NjYwQThGRTk4MkRBODE4QzMyNTk4RiwgMTg1RDA4RDkzRDQ2MzIzMDM2NjQ4MDI2MUI5MEFBMTBDRkJDRTJERkE0ODRBNUY1QkU1NjI3MzU0RUM3NTM0MDYxMUU3RUJEM0IxMEIwMzE2NTA0MEMwRTVDNTAzNDVDMjk4RkE5RkRGOTM3QzVCNzYzODRFNzJBQTJBMDFFMzM1OQorNUE0NjUzQ0E2NzM3Njg1NjVCNDFGNzc1RDY5NDdENTVDRjM4MTNEMSwgOUY5QThCM0YyQzA1RkM4MEQ5QzA4OTdBODJCNDdENjU3QTBBOTE3MkRCMTZDNUVGNkJGN0I3Q0NGQTU4OUJFQTY5Q0M5MzE4QTlCN0RFRjVBNEUxRDY5MDY1QjUzNjRDRUQwRjA5N0MwNzM1NjJDRkRCNjFBOUQ5RjM4MjlCMkZFQiwgQUJGMEUxNjA4RDk5NTYwMDExOEZCNTlDRENBQzVENjMzN0UwNEE3OUJFQ0VEMjQ2OTcyOTFGMDExRjE4NUFFQkFCRjhBNENFMzVFRjVBQzA5QkQyNzREMjFBMzkzRkY2QTI1OTUyRDk1OTQyOUU2RTAwQTQ4Nzk0MUE1MzFBOURCRgorMTBFRDJGQjVGMzVBNjM5MDMxMUM1RTY2MTgzQkQ3ODAxNkRBODNCNzMsIDExNzE3NzAyRUFFRUI4OUM3OTI3MUZENUI2RTdFMDRERUUzNTUwRThGNEFCNzVDODlFQ0JEMzNCNjM2RTM2OThENUVGNjlERjMyNEJCOEIzRUM2Qjg3NzQ0NzE4NTAxQTJDN0NDOUE5RDE1QjNBNzVDMDE1REMzMTBBMjEwRjA5QTQwLCAxQkYzQUNFMEQxMjFEMTY1M0U4OTQ1OUM1MEZBRUQ2NTYyQkE2OUQyQTBDQkM2NUVBOTJERkM1MDM0QzIwMjFFMjlCMTZDNkI0M0I0MzZCRTc2RkE3RDMxQ0ExQUZDMDZDODAzRDQzMDYwNDU5REYyMkJBNzUzMTJGMTU4QTBFMzJECiszMkM3OEYyMURBMEYyQUIwOTM1NTFCMzI0OEIzODY4MDQ0OEY4QjI1OSwgQTNEMjYxRDQ4MUVCQjA5NjlDNEE2NzY3MDEzQUZDNzU5RDkxRjIxNEE1RUM0Rjg1QzdFNTA0OTU1RkY2QkJCQTRGN0E5RjQ4ODNEMTVDNEJBOEY0QTBBQTg2RTVGNzBFN0FDRjg0NDdFNDQxMjZERjk1N0VFODVDNEJCQjM3QzUwMSwgNjI0NzJBMkM3RDkyNEUxQUIwQzk1QzlDNUEyQTIwNUVBMzFEREJGNEQ4MTlBMERBNEI5Rjc2QUVBNjEwQkIyRkE4QUY0ODZDMThGQTBEQzVGMzNCNEJCMjMwOUI1MTYyQUVDQTZFN0E3NkMxRDc4M0NBOURCN0IwNDA1RjZFNEIyRQorOTg1NkFENjU4RTJEODAxMUI5RkY1MTk2REExQTkzODBDREFFQTE3MEIsIDcyQTEyMkFDMjcxREJBQzk1RjMxMEYyMEU4RDhBMEJFNDE5MkE3RTcwMUM5M0I2MDBBRDRBRUNFNjJFRDMxRDU2QzRCMUY1Q0IxODA1MjZGRTJCODk4RkVFMENBMTM5MjM2OEExMTI4NERBMUYwRDBDQUQ3RjQyOUI1RkQyQjdEQ0QsIEQwOUIwRDFENUI1Q0Y1RjlDMDY4Qjc1OEUzMzNBMTAxNzY1OUFERkM2Q0ZDN0QyNTFFNjc3NzhEOEQwRUVGRjZGMUEwM0FGRTQ3QURFQUNFMDQ2QjBCNjg5MENGMjk3NDZFQzRENzc0QkFGMjZENkUyRjdBN0ZGRTFFRDA5OTFGNjQKKzFDOTA0MDgzMEFBODg4MDM1MkRGREY0QzQ4RTRGQkE4MjY5MEJFNDUyMSwgNEMxQTIwRUMyNDI1RjcwQ0RDRTUzNThDQzdDRDI1RDBERUZCMEFDRkYxNjBCQzRBQTIxOEFEM0VCOTEzMDREMTdCNEExMzRFQTQxNzI5MzNFMzlFQjI1RDBERUUwQjFBMDc3NUNFMjU4MEI3Q0ZEQkI0NDlFMkEzOUI5QzU5NkZDMywgMUU3QjhBMkE2NkZDNzNGMTE0QzgxQUQxN0Q3RkMwOERCRTc3NjgwNEZEM0I4M0Y2RDI3ODFCOEU4N0U2N0MxNjY3NDYxQkEwRUUwQjJCQjE2QTM0ODFFMTBDRDk0MEU4QTU4MTVBODM3ODVGMEE5NTc2ODM1OEM2RDZENDNDRTJBNTYKKzU1QjBDMTg5MUZGOTk4MDlGODlGOURFNERBQUVGMkY4NzNCMjNBQ0Y2MywgQkU1QzNGNDI1MDJDQTYxRDFFNUU2NzdENDIyMUZDMDhDQThGMUE0RUQzODIwRUY0NDI2RUFDNzgwNDMxODczNzlFNTI2MTI1NDc0NUYyRkM4NzVDOTA0NDZCNEExRTZDQkQ1MzJGMjc2MTMzQUI0NTZCREJFQjBFMjVBMEQ1M0Q0MSwgMTc0QTRCNTg2ODAxOEI4NEJEMzg5N0QxNjBFNzkxMjExODg5QzNDQzk1NkU0RDk4NUZCNkZGRENBRTdEMjgzNkIzQ0M1NDJGMDM3OTcxRDJFQjQ0MkQ5NjVDMzczQUI1Q0Q1MTA4NzA5MENDRTFFRkE3MjVBRTFFQTVEQTkzMkY3MEUKKzEwMTEyNDQ5QjVGRUNDODFERTlERUQ5QUU5MDBDRDhFOTVCMTZCMDZFMjksIDE0ODY4RUMwREYwMDZFQ0ZDOUQwMzBEQjVEMUVFMjAwOTEyN0YyRTkxQ0NGMjE3NEIzQTQ2MTFCQzVGQ0E2QTM2MTQzRDMxMkExQTU0MEQ0ODcxQzEyM0Y2Q0U1NTE3QkM2NDkwQTg3NEIwOUNCRUREMzBCMjc2MUY3RUNDNjRGOUNELCAxREI4OTQyNjlFRjhDM0Y2MEJDNjk5OEYwRUIzRDQxQTJFMkVENzQ4NEQxQ0E5MjdGODBGM0ZGMEI1RUZDQjY3OTc4NTdBMTE0RjlFMzgwNjFFREU3RDUzQjlGREM5NzdGN0NENkE1M0U0QURFRjUxOTRBQzVBNkExMjM4REZEOTI3RQorMzAzMzZDREQyMUZDNjU4NTlCRDlDOEQwQkIwMjY4QUJDMTE0NDExNEE3QiwgMTY5RDc0RDBERjZFNTVDODQyRjQyREFGMkE3NTc2Nzg1QUE1MDAxMDA1MjhGNzg1OUFDMjNCMjI3OUY0RjlCNDhBRUNFRDEyMzc4NTY4NDREODdEQ0NFNTdENzVBMzhBQUVDNUZDNTQ0NjhBNTA3RkQ1NjMwRERFQ0VENzNDNkU3ODEsIDRDNzU4NjE5MzA0QjcyMDlEMkVFOUY5NTY5OEZCNDQwRjQ5ODM2OUJDQ0FCMDU5QTYxRThCREM0QkU1NjM2MTE5QzAzQjZEMkI3NTI0MDg3Q0Y1Q0Y0MTRBMkRDQTE4MDFCQkQwNENGMDY2ODcwQjgzODY0NzMxNDIyRDM2MTlENDgKKzkwOUE0Njk3NjVGNTMwOTBEMzhENUE3MjMxMDczQTAzNDMzQ0MzM0RGNzEsIDFDRjM4Rjk3NkUxQkNBN0MyMTY3MzU1MDc1RkI4NDlBRjI3QUVFNjdCNTY2MkNFMkEwQTE0MzFENEU0QTkzRTFFQzg3MUZERDc4MDkyQTQyRTEzRDg3RTE2REZGREFGMTEzOUE0QzA5N0VDNzdFQTY4MTJBNkJGMjREMEVBRDI2ODIxLCAxREE0RjU5MEU0OTlENzc4N0Y3OTE2MkRDODlDMjk0QzhDNUQ4MDUxRkRERjkyMjIzMUVFMzM4RkIxMTFFMjFCQ0JDQTNBNkVDRUYyRkU2RTRGODk0QUE1MDdEQ0NDNUM0MTkxQTI4RDg0OEI4QzVFODAxODZGQTg1MTRCMERBQUM0NworMUIxQ0VEM0M2MzFERjkxQjI3QUE4MEY1NjkzMTVBRTA5QzlCNjQ5QjlFNTMsIEYxMTE5MDBFMTE1REU5RDM3NjU2MTNBMjBERUE0RDVFMjk4QkVEMDNBMTkzRURGODUxRTBENzNCQTA1NEY3MjA4MjFCMTQ1NjBCRUIyNTkyOUVBNkRDMzQyNEU3QzdGMkQ5ODY0NTVBNENBOTJGOTZCNzRCNTU2RDY1MzYxODBCMzAsIDFGQTE0RjQxNkM2M0U2QTEyNjg5NEIzQzMwQjM0MzNBNTE3OUEzNDdCMEJCNDc5RjZGOTYxRUU2RTMzMzFBMENCNENCQTkyQjBFODM5NzYwNzFCNjcyMThGODk0OEJCQzVGMDBFQURDQThGQTI2QkVEM0U1QkZDRjQ5NEQ4RUUzNThECis1MTU2QzdCNTI5NTlFQjUxNzZGRjgyRTAzQjk0MTBBMUQ1RDIyREQyREFGOSwgMTExRTY2NkFERUNDRDhCRDNCRkUzNzgzRkQ4N0YwOTc0ODNBQTMzNUYyRDgyMDZFRDFEMzdCODFGNTA4RDE5REQ2MUJBRjkzRkNEOTZBRUY2OEFCMTQyNDA3RTYxRkM4QzFGREFBNDQ1OEQ2QkI2QTAwNDRFNkYwMThBQjg2ODZGN0QsIDEzMUZGQ0Q1QjJEODAwNjNFRDI4MTVCRUExM0E1QTVEMUUxMTA0NThDRkNCNkYzNkNDQTFCRkE1NTM0M0Y4ODIzRTY4RDBBRjgwNDM1NTEwMDJBMDhEQkEwMzkyNDUxMTdERDA3MEI4OEZGNjFBOUExNUNGRjE0NUFBRTBFMEY2Q0E5CitGNDA0NTcxRjdDMERDMUY0NjRGRTg4QTBCMkJDMzFFNTgxNzY4OTc4OTBFQiwgRjJENDk2NDgzNTg0RjAxRTEzODBGRjkxQjQ3NDBCNTE4NTlFQzYwQUJERUQ0QUU4QUNFODAzQzY2QjgyMkI1RkY2OTM4OTJBNDk2NjQ5NDE1RkRDQTk4NjU0MUUzNTg2M0MzMDE4RkUzMzYzOENFNEQyNDExRjY1QkFFMEQ3MTRFQSwgOEM0Q0Y4NTI5NDcwRTBENkVDMzI5QUJGOUZCQUZGMTcwRDY3ODg1RjFFRTE5RkZCRTZBQ0Y4NDRGQkYyMzNDQkQ1OTVDNjUzNEFGMUUyN0MyRjYzRTg1RDlFQzJGOUQ2OTUyRjQ2MjJDMDY2N0FGOUY4NUEwRUY5Rjk2RURERDJDRAorMkRDMEQwNTVFNzQyOTQ1REQyRUZCOTlFMjE4MzQ5NUIwODQ2MzlDNjlCMkMxLCAxQjRGMDQxQUZDMjVGRjQwN0UwMDM4QTlEQ0Y1QUE0MkI3Qjk5NTQyRjVBQzgwRkFDQTMxNDU4RjM2QjZGNDY2QjZGMDY2MEEyMzI2NEYyOENEMEVCMzExNDREODNBMDAxMDAyMDU4REJBODExRTFBQTYyNjVFMzRGNTA2NTRGMzE4QiwgN0U0RDRFNjQ1QjgwRThGMDcwRERFOEEzQTVGRUIyRjU3OEZDQUI4NDA4NTExMkQ2RTk0ODM3NzUxNTk5MzhCNTNDOEVGNURFRDJDRUM1NTZEMjAwRjIwRERGRTY1MTg5MkUwMDlDOEQ1QkY4Q0NDOTVGMUEwQTVGMTdFODc3ODkwRAorODk0MjcxMDFCNUM3QkQxOTc4Q0YyQ0RBNjQ4OURDMTExOEQyQUQ1M0QxODQzLCAxNTI2NTk3MDcyMTE2RTY4Rjc0NzYzQjdEQjkxOTM4QUIzMTlEOEZBRUVEQ0E5NDJBNUJBNjQ4MjM1NkRFQzNERjlFODg5NUM4OEE3RDlERTY1OTBBQzlDRDMyN0U2NkQ5RTc1NjEzRENFNUE4OTUzMDMyRERFMEJFQjRCODVEOEI3RiwgOTYxQ0Q0MTkxOTI0NzIyQzVFQUNCMjg1QUYyNTVFNTZBMkRENEJBRTk1OENBNTk1MkM0NTM4RkU1RTdBRkY3OUQyQUIzNTE1QTRCMDMxQTExQjk1RjJBQzc2REM3NjNCNDAyNTdDRkQ5RDEwREI2RkI1QTFDMjFERDZBNTNEQThDOQorMTlCQzc1MzA1MjE1NzM3NEM2QTZEODY4RjJEOUQ5NDMzNEE3ODA3RkI3NDhDOSwgNDk5RkNCQTNBQjc1Mzg2OURGNUQwODlCNTUwOEJDN0EwQUY4RjVGNkE1NDVDN0JBRTRDNTdBM0E2OUY4QTA5QUEzQjMwMDM4OUMzQTA0QzcwRDU5RjUxMjI4MjhCMEU5RjZFRTkzODVDNTEyRkQzMzQ4OTQwNjA1RDhBNTdGREFERiwgNjVBQjlDQzZCNUZFOEUwMDYzNDU3ODMzMUIwMjBDM0VGMDlENTEzODZFMTkwNEExQkUwN0FGRTgzM0QwMThGRUFCMDMzQ0IwMUU4NTREOENBMzQzM0I2OTNDOTE2NzY5ODZBRDMxMEZCQzI2QkI1QTE3MjhFQUZFM0U0QjQzMDgzCis0RDM1NUY5MEY2NDA1QTVFNTNGNDg5M0FEODhEOEJDOTlERjY4MTdGMjVEQTVCLCAxMTg3OEM1Qjk3NDkyMzU0NjM3NUFGMDMxM0ZCODQ0OTI0RUVERTFGNzZDODAzNUM4RUMyQTgxNTJENzlCMDNBRUI5NkY3MUM3NjE4Rjg1MUI0MEI0QUI1ODExQzQwMkY2Qjg3N0YyMzNDN0Y2Rjc3QThDRjAyNUJFNjgxOUQ5MDFDMSwgNzFBREIwQTk0NDAxRTFDRDg5QTM1M0Q1MDg5QjU4NDkzQUZBMDkzRENCMzI1RDE4QzNBNTgyQUZFMUI4QjI1MDU1NDY3QjkzQzYxQjFGNUMzNUU4NjQ1RDkwQjdFOUVCMDYyRjM2QTM5RDYyMTAyOUJERjZBQTA2MzlFMjU1MzJDNgorRTdBMDFFQjJFMkMxMEYxQUZCREQ5QkIwODlBOEEzNUNEOUUzODQ3RDcxOEYxMSwgMUVCNkI0Nzc1MDYxQTQwQUIxQzdEMTRERUEzMzlGQjBDRUU4RUY2MUVGRTM0MEYyMEVDNzZENTJBRDAzQkY2MEExQjY2MzAxODdBMUQwQjQxQ0IwRjA2MkM5MUZCOTdDQTQ1NEU3NzkzNkIxNENDQ0JENkVDRkQzOTIwN0U5OEQwRTEsIDExOTMwOUVCRkJCNzg3RjYyRUMwNzg2RDVBRDVFQ0YxNDZEN0Y4RDQ3NThDODk2NjgwMTgwQjVFQkYxMTlEQUJFMDM5RDU1QkQxQzUwMzI1MkIyNTcxM0IyOUVEQjUyREY2N0NDREI4M0Y2ODU5QjhFNjY4OTdFM0JCM0VDMTBEOUQ5CisyQjZFMDVDMThBODQzMkQ1MEYzOThEMzExOUNGOUVBMTY4REFBOEQ3ODU0QUQzMywgQTAyODkxMjVBNzE3RDc5MDkwNUY3QjExNzExNThCNzY0NEFDQ0NBNDRCQzlERDY3RjI3NzhDODlEQzc3MzFCMTg5MDgwNDBCQjNGODkxQUZDNUIyRTUxNjhFMUJDMjk0NDJCOEJGNUI1Q0JDMEYzRUIyMDhEOTk4MEE1RDFBNzNCNywgMTI5NTQwODIxQjA3OUJCN0RCN0JGOUQ5MDc1Q0VBNzgzMzQ1OEZGRjc3OTUwRERDOTBCN0RBNEQzMEVERUU1MkI0Q0RFRTk1MTlEQUY2RkY1ODk4Q0EzMzY1Q0YwMTA3RDA3RDlDQTlERDBEQTJCQTQ3RkRBRjgyMTgyM0FBRUQzNEEKKzgyNEExMTQ0OUY4Qzk4N0YyREFDQTc5MzRENkVEQkU0M0E4RkZBODY4RkUwNzk5LCAxQTBEMzZBOTEwODJDNjk3QzdGQUM0RTUwODg3QjhBOEFCNkFGMEM4MkUyOUI2NDhBNzE0NEY2MEFGMkM2OEEzMTZBOTBERkVFMjEzMDNGRkVDN0RGMUY5QjY1MDY3NDc5NDMyOTU1MjlBNkFCRjQyRjI2MjRCMjNBNjAzMjhDMzczNSwgRUYwQjhFODM5QTM5NEZFNEFDMTQxQkEyRjJEREEwRENDMzU3QTU0NjFFREQ2NjhCREU0NjIzOUFCQUEzQTkxQkVBQkJBNTI5MDQ2M0RBQkMxM0E0MjZDNUYyNTBGMjZENTU5Q0I5MTMxRDg5RDI4QTk1M0RFN0JGRThGMjk1NUEzRAorMTg2REUzM0NEREVBNUM5N0Q4OTA1RjZCOUU4NEM5M0FDQUZBRkVGOTNBRkExNkNCLCAxQjA5OUMxQUQ5REY2QjU3NzM0NDQ0MTZBMjhBMjhCRjI1NzQ0QzlFMjRGODBFQ0Q3NzU0MTdBRUQwNjJDMTg3NEU4NEUzNzY4RkNCRDFFMjc1M0M0M0VFN0I5MkFCQTZDREMyNzYzMjk2QjBFM0I4ODMxNjM1NjUxNzI5MkFFOTA0MCwgOUZFNDYzMTg2Mjk3NjAwRDYyMTgyRUZDNkQ1MTg0NzU4MDA1QTg5NEM5NkREMTc3NDkxMzMzRUNEMjczOEJFNjRCNTU3NUZCMEM0NTNENDlEQzkzNDhCRkQ5Nzg0QjkyNzEyMzNFNUMzOTkyREFEOEQzQUJERjFENDU2N0RDQjE2RAorNDk0OUE5QjY5OUJGMTVDNzg5QjExRTQyREI4RTVCQjA2MEYwRkNFQkIwRUU0NDYxLCAxMDNBMUFFODNEMEM2M0U3MzhGN0VGQjJBMzVDNDY4OEM5M0E3NEZFNDFEMEFGQ0MzQUJGOEY1RTE1NThGMDBBMTcyNTA2NzMzMTEzRUYwQUE3QjQxQjFEOEMzQTVBNkRDQ0JEMjUyMDkzRUM5QkQ2Mjc5NERCNkZFRTlFODZEN0VBNiwgMTVFNDA1MzQ1NEQ5RkNDMkQzQ0E4NEI3REJFQzVDMjQ1MEREREEzMDM1RkRBN0U2Nzg4RkZBMEY4RDBGMDM4NzUzQTJGQkQ0QzEwM0FGRkJGOUQ3RTM2QTJGODEzOUZFM0RDQzEzN0Q0MUYwNjFBNUMxMzI4QTk5MDFGQzZCMTU4NUQKK0RCRENGRDIzQ0QzRDQxNTY5RDEzNUFDODkyQUIxMzExMjJEMkY2QzMxMkNBQ0QyMywgNjYyMjQ5QUU0REQ4N0FCNUY5OEQ4QkU0RTE3M0Q5MTY4MTk0ODIzMkNCQzVDM0Y4NzlBQjg5NjU0MDE4QUU3MEQ3OTdCODA2OTY3NzQ1RTlFQkRBNTYxMDJFQkY2QTcyQUM5QkQ1MzI1RDNGNzU1MUEzN0Q0RDEyMzA4NjMwOEY5MCwgMTQ3ODg2NkJCMzUwRTJBQTcyQUExNTQwMzdENkQ2NTdERDEyMTQwNzJBRTBFNkJDMkI4NzFGRTRCMTc4RTU1RjgxNjhBMTQ3NDE2RDhBOTA0NzhBNEM1NTlDNDk3MUNFNjdDMDc2NEQwMzc1NEVGMTcxMDBDNEE4MzhCODI1NDVBNkIKKzI5Mzk2Rjc2QjY3QjdDNDAzRDczQTEwNTlCODAxMzkzMzY4NzhFNDQ5Mzg2MDY3NjksIEEyQjgwNjZENzAwQUQ2OTE4NkVENDcxQTIwMTVERkRBMzdEMzBDNzIwMTY1NjlGOUM1NzE3MEU3OEIzQjNGRDYwODVCNkQyRUQ4M0I3RkIwRkQwMTM1NjcxRkRBNzEzNzU5MzFGNEJGMjFBNDA2MDBCMjE0Rjg4NTY4MDFGNzBCQUYsIEYzQzNBNEQyNTVCRUQ4MUU5QTQzRTQ0MTdDN0YyRUYxQkI5OTAxM0JDRjlBRTkzRTBBQTI3M0RBNDFCMDQ0MUU1RUVCNzIyNTU4QTg5QTZBNUNFNTBGQUM1QTUxM0ExQzg1NDY4NDVDRTQwNzBDQkQ1QTBDNTIwREVBNzI0QUExQ0IKKzdCQUM0RTY0MjM3Mjc0QzBCODVBRTMxMEQyODAzQUI5QTM5NkFBQ0RCQTkyMTM2M0IsIDZCNjVFOUFFMEFEQTM5ODA3MUEzNzVGNzU3QkNERjgwOUMwREU3OTFENDA5RDcxMUYzNTI3OEQ5NEExQzU2Q0FFMzcxNkVBMzc3RTkxQTVCMjQ2NTExMUFBNzZGRDk4QkRGNEE2NTRGOTc1NTgyQjdFMDQxRTc3QkNGM0IxRDczN0QsIEQ2MzNFNENFRDk3N0JFMjFENjhDQzk5OTU5NkYwRUQ4QzQ4OTBCOTM4QUI4NUJDMDZDNUEyRUE1MkE0MzlBOEZGNUM3MEM3Mjg4NERFREIxOEQ5MEFFQzI5Q0RGNkIxNzA4NkM5NENFNTE2MkU2Rjg0RTRBODMwOEM0REMwMkE5NUEKKzE3MzA0RUIyQzZBNTc1RTQyMjkxMEE5MzI3NzgwQjAyQ0VBQzQwMDY5MkZCNjNBMkIxLCAxN0ZBQTFCRkJEQUREOTBBODU2RDlCMkZDNDc4RjU0MDJCMUQyOTE4Qzg3NjY4RjU1QkExMENFNjVGNjc2RjA3NDgxNjhDQTBEMDJCRUIyREZBQjk1RUQ0OTM5OUQ5QzQ0OTVBOTNDNkNFMTM3Q0MzRDBCNDVBRTAzMERFODVDNDFENywgMTE2MzU4MzA2NTMyN0M5NDNBMzBDOUJCNjAzQzQ4MDcyN0RFQURFQTQzN0QwRDU4NzNFOTlERjBCRDM0ODdERkYyNjg2RThBQzhBQkYzREFCMzZEMTlEQjJGQTU5NjYxNTVEOEFEMkMzMzdCNjVEQjcwQTA1RDdGQjM4MTNCODQ3REYKKzQ1OTBFQzE4NTNGMDYxQUM2N0IzMUZCOTc2NjgyMTA4NkMwNEMwMTNCOEYyMkFFODEzLCAxMjgzQkUxMjk2RjJBRTRDNDk5N0JCQjYzMkVFNkQwNzk0NEFBQ0E3RDY0MUNDOEIzREZCOEEwOTA1OTE1QjAwNTg0NDUyOUI5MENCQjJFQkI0Q0Y2QkFERDExN0UyODU4RENEMzBERDY1NjBGODdDQUIzNDlGMDUwMUU5MjVBQkI4MiwgMTNBREMzODA3QzgwQTlCQzUxOUY3NDQxOUI0MzJGMTIwQkZEQzkxODk5MjcyOUE3QURCM0FEOTUyMDZCRUI3OTMwMzU5NjBEQUEwRTVEMDAyRUE4RTZERkZGOTI3NDcyQUMxRERFMTBBQzdFMTk2RkU3N0FFMjNDNUUxQTY0N0NDRAorRDBCMkM0NDhGQkQxMjUwNTM3MTk1RjJDNjMzODYzMTk0NDBFNDAzQjJBRDY4MEI4MzksIEE4QzNBREMzMzFCRjQwRjQ1NzcyMDA3NjU3N0NGQTk4RjZCNjEyMDFFNzAwREI1OEZCNENBNDZDMUFFQUZCRThFRTBCQTUyQjFCQTcyNjQ1QTMzNDlCNjNCOThEQzI1MkMxMDg5MTQwMjRCRjhDRjcwNjk4MTk5M0RERDYzMTBENzIsIDE4NDIzRUM2QjUwNzJDRjAwNEE2MjQ2OTlDMDAzRjJEN0ZEQ0U1RTI0M0RDREFGREExMTcyNzNENzI3NDZGRjNBOTE3RUZBQTUyM0ZDMjIyNkQ5QjM5RjUyNTY5REY1MDlGRjM0MEIzMkU3MjdBNkEyMkYzQTMzQzYyRjRGMUMzNTdBCisyNzIxODRDREFGMzczNkYwRkE1NEMxRDg1MjlBOTI5NEJDQzJBQzBCMTgwODM4MjI4QUIsIDFGQ0U3QUJDOEY4MDlGREU2Mzc1OEQxRTkzNUFBMkQ4MTA3NzMwMEFFQzJDMTZBQUNFMjFERDZFREQ5M0ZCOTMzM0UwNEI4QjQwMzkwMkM5RjFCNzFDMkZERjhBMzIxNkMyMDU5OEJCMTZEQzkwRUNDNkQwNjY3OTRFQzYzQ0I1OTFDLCAzQzYxREIxQjlERUUwNjc3NTZFOTRBOTYzQTJDNkUzRjRCQjY4MUYyOEVGQTNEMjA4NEJBNkY4QUJFRjQxNDE5RTRGQTg5NDdCOEEwMjI5ODU0MkY0QTNCMUY0MTIyNzQ1RTFERTEwNkM5MEE2OTg2OUUwMzAwQzY4QjhDQkExNjlECis3NTY0OEU2OTBEQTVBNEQyRUVGRTQ1ODhGN0NGQjdCRTM2NDgwNDIxNDgxOEE4NjdBMDEsIEU2QkZCQTQwRkYxMjBFMTZBQTAwQzBGNjZBODBGN0RDREJEN0Q2RkJBOEVFRURCQkEwMkE5OEI3NjBBMDAwNzA1RTg1REEwQzdENTBDNDg3NDAwNDdGMERENjlCRjlERjlDNjJBMTFGMEYxMTZFQ0ExOEU0RUE1NDZBRkExQkZEOEQsIDE0OUEzRkMyOEM2MzgzNTA2NjM0OTI2NDI1RjMzREQwNUMwQ0M5QkQ5NDgwRTA2MTJGMEE1RDYyOEI0QkE5NjNENkIyOTdBNDQzODVGM0QxODk1RkMxNjEzN0ZEMkEzOEMyNEEwMjMwNTMzNTZBOTkzQkQ0REVDNDU3QTQ2REMyMjgyCisxNjAyREFCM0IyOEYwRUU3OENDRkFEMDlBRTc2RjI3M0FBMkQ4MEM2M0Q4NDlGOTM2RTAzLCAxRDRDQUY1N0I5NEMxNkQwQUEwNjJEMjU1MEM5OEYyMjBEMTFBMzIyNUNBMEM3RDhFMDcyQkMzQzI0MUVCRkU4RDRGRTE4MTIxNTk5RUZFQzBCRTdFQTQyQzA5NjAxMEIzNjkzQ0I4OEYyMzZBNTMzMzcyOTY3MjNBNEQ1NTM0QjY2NywgNzRBN0E3RDZGMDk5QzhCOTNFQjU2QkI5QkZGNDBBQTY5Qjg2NEU4Q0RDNkFGMDlDNURDQ0Y3QjZBQjNFQkYyRkVGMjcwNzQ4NjA3NEJBMTJCRDFDRUZDN0QwRTNBNjREOTUyRTQwNzlGN0EyOENFNjlGQjFFNTUwQjY2RDkwNUZFMgorNDIwODkwMUIxN0FEMkNCNkE2NkYwNzFEMEI2NEQ3NUFGRTg4ODI1MkI4OERERUJBNEEwOSwgRkNBRjMzMEQ1M0FFNDA3OEIzNEEzM0RDRkE3NzFFN0RBRDVEQUQ1M0ZBODhDRDczNEZGN0UzMkM0QzE0RkM1NDRFMEQ1NURCMkNDNzFGMEM4NzdEMUM2Qzg2OTJCNTgyQkE1QjRDMkJFMzM1MzBFMDAzODQ5NTY3M0M4Q0VCNTBEMCwgNTY5Q0NDNEQ4Q0QwQTNCMDZERkI0QUVDQjE0ODBEMjJDQTdDOTIxMkVDMjI5Mzk4MzRGNTE4NTZGRkZBOUQ0QkNFMjZDQkMxRjVCQjAyQTE5OTc2NjcwQUZFM0NEMDM2OEFBRUFGNTlEODU5QzJDMzA4N0I3OUY5ODc3RDQwNDQxMgorQzYxOUIwNTE0NzA3ODYyM0YzNEQxNTU3MjIyRTg2MTBGQjk5ODZGODI5QTk5QzJFREUxQiwgMTM4NThBMjZFQzM4REE5MDQzMzYyRDRFNUE0NkY2NUY5ODc5Qjk1QzFGOUQ1NzczNjAzMzEwMTdDM0M3ODk0MEZCRTU5N0YzQ0IzMjBCOTE2N0MzM0FBMUVDNzAxNEMzMjE2QTNDNzRDNkU2RkI3MTNCRUYxNzIwQkZBRTZCODVEMEIsIDEyN0UyNjgzQjI4MEY4MjE0QjM1MUE5MkY5NTM1OUFERjFFOEVFMjBBNTcxMjM0NjA2OTYyNjlGQUFFRENCMDVEQThFRTAyMEUxMTRFNDc2QTA3NzE2REM4RDJEMjkwMDk3QUFGNEQwOUM2RTJFRTI1RDZGNUE4MTFCRUJDNTU0QkY3CisyNTI0RDEwRjNENTE2OTI2QkQ5RTc0MDA1NjY4QjkyMzJGMkNDOTRFODdDRkNENDhDOUE1MSwgQkM5MjBFMDExNTk3QTczRTJFQTdFRTQzNDA1MTdFQkRDM0RDNjg0MDIxODk1MjI3NzIzQzQ3OTg5MjkzRDg4OTI3OTlDMzkxMEEyMkJBRDQ3M0RCOUI5MjZENzk5NEQ4OUI5RTYzNjRDMzg3QUREQTRBN0VDNEY4OTlFRTQ2RUFENSwgMTdDNDJDQjc4OEU1QTQwNzRGNUFDNTJCQTJDOURFNDE0MUM1QTk4QTM0QzFCRjYxRDYyMTFFQUFENjI0MENENjc4RTgwMEVERkU1NUYyODgzMzJCRTVDQTkzNjNDRDQ5NTZBQzYzNEE1MDY2RUM5NTI2MzZFMzg2Mjg0N0IxMUFGREIKKzZGNkU3MzJEQjdGNDNCNzQzOERCNUMwMTAzM0EyQjY5OEQ4NjVCRUI5NzZGNjdEQTVDRUYzLCA5NzU5RUM1ODJEQ0Q1NjcwODEzQUZDMTQ3MDkxRTQ4NTA4MUZGM0MzRDU2MkFENzVGNkY1NjhGODRGNjRGNTE0NkM0NzQwMkZGNjcyNDRCNTczQUZENjM5NTU3MDZEREJDNzcwMDlERTZGNzRDNEI5Rjk5ODFCOTc4Q0FGMkM2MzlELCAxRTI5MzNGQkJGRTEwM0Y2NkM4NkFDMjkzODlEOURBRDI3Qjg3NjIyMjVGNzNBMEYzRUNDNDE4QTAyQTYzODcyQzc5MUYxMDVDMzMxMjNDNTYyQzBDQUMyQzZFODcxMDZERDkzMzQ0QTMxMUYzQUVBODVBRTRCNjc5ODBCNjBDOTIzNAorMTRFNEI1OTg5MjdEQ0IyNUNBQTkyMTQwMzA5QUU4MjNDQTg5MzEzQzJDNjRFMzc4RjE2Q0Q5LCAxREJENTk0QTBBRjY3RkM3Q0MyQzJGRTg0NEU0ODNCM0E1OTdDODQ1NzNGMEZDQ0Q4NDQzNTFENDNGNUQ1N0VEOTczODgwQjU1QzAyRDQ4REZDMzhBRkYyODQwNUIzMTk0QjBBMEM0RDQ2NzU1NzFGMkFFNUZGQ0U5M0YzRTA4NDY2QSwgODBENDI3NjUwRTg3RkMzQzczRDUyQkE2ODI1OTc5NDZEMDg2NUUzRjlCMTUxOUIxN0UyRDVGRjFDNjBGMkZDRjc1MzBFQzU1RkU1ODBGMzg1Nzg3MkU5Nzc0OUZGOTVCNkQyNjNCQzY5N0UyOUZEQzg1QzUxOTUzRDhBNzIwOTZGMgorM0VBRTIwQzlCNzc5NjE3MTVGRkI2M0MwOTFEMEI4NkI1RjlCOTNCNDg1MkVBQTZBRDQ0NjhCLCAxOTBERUZFN0QxNjg1Mzc5QTAwMDNDMkEwRDgyRUU3NDZCREI4MkRBQkUwOTUxMEFDRjcyMDQzNjBENDNDMEEzMzE0RDRFRTc0NjMzNzQxQTUyNzcxNzIzRkYxQjZDNkM4NTI2QTEyQTU1N0JFQzg5Njg3OEVGOUQxMUUxQjhGOEYwRiwgNUJFNTkyQjIxNzg0NUQ0Q0Y5MDU5MDQ2QzUzRjg1Qjg3MjZGRTExM0JEQTAwNjVGQ0M2RTVFQ0MwQTA2RjkzQkNCRUU2QTY0MDYxRUI0OEM0OTI5NTYxQjNERjhDODZGQjBCQTk3OTY2MkRGMUNGMzc3NkJDMTlENzRFMjA1QTFCNgorQkMwQTYyNUQyNjZDMjQ1NDFGRjIyQjQxQjU3MjI5NDIxRUQyQkIxRDhGOEJGRjQwN0NEM0ExLCAxMUI2RDAyNkQ5RjQ4NTFGMDFEMzREN0Y1NzgwNzAxREFDQjdBQjZERDdDREZFQzQ3MEUyNUMzNjUyQzlDNzc5QTk4MkU0NzRDQzEyMDhGOUVGMkJGNTk2RDc0RTFGQUFBNDlCNDNFOTczQTI0M0Y4QTVCNjBEM0ZCNjYwMzBERTdFMSwgNjRCRjhDMUJENTQ3M0IwRDQ2MUI0OTIxODNDMjI1RjBEMEYzQUEzNERCOEI3RjRDN0MzRUUwNjA3MkM4N0FEMTQwOTMwQTQ2MkVGRkREQjE0RkE5RTFGRTQzNUU3MTgwMDMxQjdGMDA1RDM0QTFEMENCRTQ4ODU4QUEyOTlCRUYxQgorMjM0MUYyNzE3NzM0NDZDRkM1RkQ2ODFDNTIwNTY3QkM2NUM3ODMxNThBRUEzRkRDMTc2N0FFMywgMTY0QUIzNTIzQTcyOTIwMUJEMUQxOTM4MkYxREM1NUU2NzA3MDU2MTA0MTJBOEREQzE2OEZGODE0RkVCODQ3QkQ1Njg0OUE5NTE2OTZFQ0Y5RTIyN0RFODI3NzNCNjgxOEM5MkJCMjYyODU2MUJFMEQ1QTE4NDI3OTRBQjRDRjFGOEQsIDIyQzY5NDM3MUFFRUFGMjVDN0JDOTA3MkE4ODQwQjI4QjU5RjY3MkFFNUQxNzI2MUMwMDMwMzBFNzgwRkZDQTVFOUQwMUQ5NzkzMUQyMTg3RENEMDM1OUE0RkJCQUZGNUJFODk5MTdBMDIzMEE3MzQ2NTc3QjVEMkM5M0IwRDFCRjQKKzY5QzVENzU0NjU5Q0Q0NkY1MUY4Mzg1NEY2MTAzNzM1MzE1Njg5NDBBMEJFQkY5NDQ2MzcwQTksIDRCQzcyNDA1OEZCQTNGNkI4REQ1NUI1NDlGQUVDREVGRjMwRTlBRUMzRTFBQjQwMzUxMEZBQkIwRjg2OENGNEIxNjk5NzJERTRBODU5QTg4QzQzQkRDNTIwM0E5MjY1ODJBNDgyNjI5MTE2MjA1OUE1Rjg2OEUwOEQ5NEZCNkE2NjUsIEY5MzdFMzY5OURDMEYxRTc1MTZFMENCNUFDRkI2NDhCMzJGNDRFMUMyQUZBNjhCQjAyQzUxMkY1MjcyM0NCRTgxQjg4N0M0MUNCQkEzRDY5NEE3QzFFQUUyMzk1QzY4N0NCNjA1RjAwMTlFMTUwNDE5RDRGNENBNENDNEVERkYxN0QKKzEzRDUxODVGRDMwRDY3RDRERjVFOEE4RkVFMjMwQTU5Rjk0MDM5QkMxRTIzQzNFQkNEMkE1MUZCLCAxRDg5MkVERDU1MDQxNDRBM0YzQjlGMDA3RDU0NTI1Q0Y0RDg0QTY0RDJGNjczNTU5RkQ3RDQ1NjAyOUIwMkMzRDdGQTAxMEZEQ0UxQ0ZENjcwRTE2Mzc2QzJERkQ3NDZBQzVDRjM5RDJCMDVCNkE0NTQ1MDEzQjc4QjMxNUE0RTU1QSwgQzE3MjE4QTMzOTdDQjExNUEzNTk1REU3OTgwOUVGM0M0QkEyQjE1QURBNUVCMjJDRTQwMTVBREU5RTQwMjNFQTgwMkI4QThERkYzODY2MDNBNjcwQjQ5ODdBOTg0MjFGODY4NjgyNzhGRTVBQTA0MzE0MTU5NkM3MkFEOTJBMjQ0CiszQjdGNDkxRjc5MjgzNzdFOUUxQjlGQUZDQTY5MUYwREVCQzBBRDM0NUE2QjRCQzM2NzdFRjVGMSwgM0M1QjJCMTEyQ0YxMUJCMjM1QUMxQjgwMEFGNkUzMUUzNTQ3MUNCRjUwQUVENjk4QkY3OTI5OUMwOEEzNzM4QjQxQzYxMDQyRDk3MDIwMkMzOTEzRjRENDk4QjBCNDFCMjBBMTNCQTMxMzExOUNCNTMyODcyQjFDNEM2MjMyRTA3RSwgMUQ1QUE0OEQyMzc2NEZDNjM1OUExM0Q5ODlGNThGMjJCRkU5MjA3QjE0Njk5M0UxRURCMzA1NjE3MEVDOTM2NTQwRDBDOTk1MzI1MkI3RUVCRjk3RTEzQ0EwNDYyMUFCNjJDQkU1RjExMTJBNEEzQzZFN0MxQ0RFNDM3NTVCNzM1NjMKK0IyN0REQjVFNkI3OEE2N0JEQTUyREYwRjVGM0I1RDI5QzM0MjA3OUQwRjQxRTM0QTM2N0NFMUQzLCAxMEU4NjczQzc1NUM4NTRERkRBNjJCODdEM0JEMkQ3RTYzQUY2OTU2MzY1NzRCQkFCRjA0Q0QzNDNGQTc0OTJGRUNBNzlBQjA0MzAzMUREMkJEQjkwQ0NBREZFM0Y2OTFBODlFM0ExMzE1NjVENjYzOTZDRTY5RTIyRkQ2MDgzQkI2NywgNzRBRURFRDBEOTYyQTI4QjVFNzU4RjE0MDIzOUEyMTQ1NTI3M0ZBOEUxOTEzRkQ0QTUzMzU3QUQ1QjU0NjY4QkFENEEyRDhBMkExOTM0RDNCMzNFREFEQ0FCMEQ3Mjc1MDhGQkQxOEU4QUUzOEI1QTA2MDBEMzRBREYxMjc2RjI3CisyMTc3OTkyMUI0MjY5RjM3MzhFRjg5RDJFMURCMjE3N0Q0OUM2MTZENzJEQzVBOURFQTM3NkE1NzksIEQwNzI5NDA2RjQyOEM4MDgzNzc2ODY3OEJCOTgzMDI3QUU3NTA1REU4RkUyNjIyQzVDQzcxNEZCRTgyM0FGMzdFMDczNENDRTk0QjNCODc0MDQ4OTY1ODcwNUE4OTFGOEQ4ODBDMkRCRjExQTUxREZDMjZBMkQyRjE4MkI2QTY4QUIsIDdDRTlEQUYxMUUxNEFBODI5REJGNTI2NDJFREY5QjQ5Mjg2OTgzNTA3MkZCOTkxM0NCNzk1QkUxODVDMEMzRDZBQURGODU5QjJBRUMyM0NFMjdCNjRENzRDMjkwMEE5RjJFRTQ3QTQzNTg0RUU5RjAzNTA5Qzk0QzZCMDVBNzBCQjIKKzY0NjZDQjY1MUM3M0REQTVBQUNFOUQ3OEE1OTE2NDY3N0RENTI0NDg1ODk1MEZEOUJFQTYzRjA2QiwgMjlGMEE5QTQ1M0VCQ0ZENjJDMUZBQ0FEQkUzOEQyMTFFNzMxM0Q2RTJGRDMzRDk1OEU5RjZDM0M2QTYxMUQ3REU2QTM3NzBENTA0Q0MwOTY0NkMyQzREMTA5NzdFRkFCODQ3MUVFODM2QTgwODQ1NTQxOEY3QkM5QTQ1MzcwNUQwMSwgMTFGOTY2M0RGNEU0QTA2NkVBRUQyQ0RBRjI5MEZCODI4RDYyNTBFQkZBOTcxQTg0NTcyOEQwNTIxRUZDMDlCQzNBOTE2RkJDQTY2N0Y1NDgyMTZFNjI0QkY1MzBCRjgxMTI4NTk4RDhBMTA2MUIwNDBEREZDNTU3Q0M4OEY5NDE4RDkKKzEyRDM0NjIyRjU1NUI5OEYxMDA2QkQ4NjlGMEI0MkQzNjc5N0Y2Q0Q5MDlCRjJGOEQzQkYyQkQxNDEsIDExQ0U2QkFCQ0Y5RThEREIzMUZFOTcxRDlFNDVENEE1Qzg0OUY5RDk1OTVCQkQ2REZEOEVFMjIzOEVBNTNBQTQxRjFCNUVCRjdEMEZFQjMzNjJBMTQ3QTI5RkMxODZEODE2OTYwOEVCRUQ2NTMwQkVGRTU1OUM3MzVCNTlGRUYzNjdCLCAzQjdDMkNBNjc4MEZCNkU1QjhBOUMzMjIyMDhENjhGNUU3NTA0MDhBMTZENUI2NEVGQTgwNDAxODcxRDEwRUZDNUZBQ0MxNEEyQjg1QTI5QkQwM0MxRDI4M0VDQ0I3MzdERkM1MDgzRTlCRUM1N0I2NjM4OEFBQzIxMTc4MEM0RDc5CiszODc5RDI2OEUwMDEyQ0FEMzAxNDM4OTNERDIxQzg3QTM2QzdFNDY4QjFEM0Q4RUE3QjNEODM3M0MzLCBENDc2NzA2NkU3NUYxNzAyOTdBRjBBMkRGQzhCOTkyREFFQjZDOTY1OUFFMTg1M0M4NjQxNDFERjg5ODZDQkE0N0RCMzdBRkJCQTA5RjNCNUFERjIxRTg3MkE5QUNDNkI2QTU1QzY1N0JBMzBBMzJBNTQ2NTA0RTA1NjAwMjY0QjEsIDZBRjMwQ0FGMzBCREJFQkFFOUI3QjlFNTYxMDREMTFFNkQxQTc3MjdGOTVDMEQ2QjFFQTdCMkYyODlEM0M0MjIwNTZBNzUyQ0U2ODRBOUExRUYzMDdDQzdBMzQzRUE0Mzk5QjA5RTg4QUVBNzgzMzY3RjNGMzNCQUQ3REFDMjgwN0IKK0E5NkQ3NzNBQTAwMzg2MDc5MDNDQTlCQjk3NjU1OTZFQTQ1N0FEM0ExNTdCOEFCRjcxQjg4QTVCNDksIDE3QjhDREE3MzJBMzhCQjRGMkU1RUVENDU5OEMwRjU1OUMwOTE2MkMzMkE3QjU4REZCNTMxM0ZEMTQ5OTNBMzNFM0EwREQ3NEY0MDczMUUzOUE1N0EwMkZBNzdDMDk2REI4QTgwMjE0MjQ1NTAwNTgwQkU0QzAxMkZBNUUwNjU2NDQ4LCAxQjU0NDgwMDIxMjAxN0QzMTM1RDk0MTRENzQ2MjJDN0VCMzg4NDg1Rjc0Q0NBRTgwQzdDMjVFMTlDMzEzQTM5QTA0ODc2MTUyMUQ3M0Q2REI0QUFBNkE5MzEyQTZENzJDRDY0RTFEQjY3MzI1RTA0Qzc0MjMzQzZFNjAwMEQyQUU1OQorMUZDNDg2NUFGRTAwQTkyMTZCMEI1RkQzMkM2MzAwQzRCRUQwNzA3QUU0MDcyQTAzRTU1Mjk5RjExREIsIEVDREEyQTNCN0Y1QTE2NDZCQ0MxRDE2MUU4RTExNjZDQzJGQzQzNkMyMTEyQkY2MEMwOTI5REM0MzVEMUJCOTg3Q0JEQjI3REIxQ0Q0QTZBNENGMjcwRDA3QzlGOTAyNDNFQkU0MzJBQkI2RjU5NTEzNEYzNjc1MzI0RkVBQTI0Q0UsIDc4NUI1RTAyMUIxMUMyQ0NFMjFFRENEQ0UzREM4OTM2Mzg1MDFGOUU3ODY0MkJDOERGMUVBQTNCRjA5MzQ0MUYxODY3NUYxQjM3MURFMjFDOTEyQTQ2NTk0RjEyMDI5OTgxM0VENDYwQ0UxMTk1RTQ3NUM2QUUxQTJBMDUwMzlDQkQKKzVGNEQ5MzEwRkEwMUZCNjQ0MTIyMUY3OTg1MjkwMjRFM0M3MTUxNzBBQzE1N0UwQkFGRjdDREQzNTkxLCAxNTlGODhGRjFFMkYyRkZDQ0VGRDIzRjhEMUEzOEE0RkEyQzUyMkY2QjlCMTgxNDdFMDNENzJCQjEyQzlDMjk1NkJDOTk0NjM0QjBBNzRERUIyMjE5NEEwMTFDNUI2NjVGQTBEQjA1MzcwNzgxQTg2RDY4M0M5RTc1NjRBQzdEQ0EzRCwgMUU3MjRGQzg3ODU0ODZBMEY2NzdDNDVEQkExODc3RkM5MUM2RDdDQUE0MjIzQjJGNTkxNkI4NkFBODE0QTEzMzM3QTY2NzQ3QUFDNUNFOTUzMkM4MDRDMDM0MTBGQjg1NTkzOTcwNTkxMDMxNDdEOUVBODRCQjc1NkUwRkQ1NkVBMTgKKzExREU4QjkzMkVFMDVGMjJDQzM2NjVFNkM4RjdCMDZFQUI1NTNGNDUyMDQ0MDdBMjMwRkU3Njk3QTBCMywgMTYxMEE1RUNGRTNERUYyODQ5NTdCNjBBNUU5M0Q4QTFDNzUzNUU0QjZFRDEyQzc2MUUzQjBFNDcxRjc5MUQ4QzE4MjM0Njc1RjIxRjMwMjUyRTc3NkJBQzhDRDE0NkVERjM2QTRBOEY4RTRBNTM3MjVERjMwNkEwRDM2NzNBNTdFMDcsIDI5RThDRjU1MzRCRjNERERGRTc3N0MyRDI5OTBEM0FBQzE5MURFMUY0ODRBMTY3QTU4REYxMDc1ODdBQTU2NjI0N0RFRTQyNTU3QzE1NkNGMUZDQkEzNkY4MzYzQ0U3QzNEODRGMzZDQ0FGQTNFNTgzRUFGQUE4RUY1QjlDQUNGRDcKKzM1OUJBMkI5OENBMTFENjg2NEEzMzFCNDVBRTcxMTRDMDFGRkJEQ0Y2MENDMTZFNjkyRkI2M0M2RTIxOSwgREVBNjJDNzJENkM3ODA1MEU3NUMwMDAzNUUxQUY4REYyOTg5Qzg5NEQ2NzBEQjAxRjM0OUZFRUUwREU0RTU0NjkyNTcxNEFGMDE1QUIyNzRFQzYxOEM0NzY4QkUyNzREQTc5Q0ZBMjJFOTQ1MjdERkZDRkUxNEY0MzU0RDE2RTJDQSwgMTIzNzk3MDIzNjM1NzYxNjc5MDM0RkExOTUwQUQyOEMzM0IwRjhEOTY4NDVFRUQ1RDg4QzAyRTc1NjhCNkNFQzc0ODBBODc3MDE5MUNCMkZBMTREMkQ2NDg2RjBFMTBFMzA3QUFBMDVDMTA1Njk5NUJFQUIzMjhDOUI3QjZEQTg1RTkKK0EwRDJFODJDQTVFMzU4MzkyREU5OTUxRDEwQjUzM0U0MDVGRjM5NkUyMjY0NDRCM0I4RjIyQjU0QTY0QiwgQjg3QkJEMUY2MTFCRjkyRDg5NDE2OUJGRDRGMjM1NDdFMzZENjdEQTAzMzZDNjNCMTUzM0E5Q0UyMUNEQzk2QTBDNjRDNkZERDE3OEQzRjA4RjlCOEZBNjdDNTVGMjhEQzQ3QTZGRTg3OTBGNTM1MTdEMDFBOTYxQjI3Njc3NEVDOSwgODdGN0VDMURCOTg4MEI0M0VGODgzNEYzMkI1RjAzMkY3NDU5QTlCOUVDQjJBNzVFQzAxMUQ4MTM1MUU0M0E2RDVCNzM1NDFBMUQ5RTVBOUU1MThCOUI1M0M0MzY3MzMwQjk0OTJBNjVEQTQyOUVBNUM4Q0ZDNERGRTZEMjQ0QjY3QQorMUUyNzhCODg1RjFBQTA4QUI4OUJDQkY1NzMyMUY5QkFDMTFGREFDNEE2NzJDQ0UxQjJBRDY4MUZERjJFMSwgMTlBMzREMUI3NkExOEQwRTYwN0VGNzdDOEM4MTRGRjAzMzYwMkEyMTA2MkExRTgzQTc0MEIyODYyRTY2RjJBMTU2MEQ0NzUxQUNFMTlCOTRGQTRDRTExQzg2NUI2NEE1MjUxOUMxMjZBNDAwRkExRDQ0ODhGRjk0NUY0RkI1REI2MEMsIDkwRkI1Q0FGNjUwNzUxRENFRkExNkI2RThCMENENTczMEFCNzc5NTUwMTYzMERBNTQ4MTQxQUQ2NTUxNkRDMjBBNzBGQjI1MDk5MUQxNzkxOTA2QUE4MDUxQzg0MUZDOTVGRkVDMTRCMjVFMTAzRTNBMTQ3MUQ0QjMzODY2MDM5QjQKKzVBNzZBMjk5MUQ0RkUxQTAyOUQzNjNFMDU5NjVFRDMwNDM1RjkwNERGMzU4NjZBNTE4MDgzODVGOUQ4QTMsIDFEMDgzMUI2RkQzQ0FCREE4QjFENTE2NjY3NzU5RUI0OTExNEZGQTY5RjUzN0Y0MTdBNEJFQzQ2NDEyMTY1OUUwQTExNDRERTlGOTQzNkYwNzFCQUZBM0QxM0FCN0I0NzU0MTEwQjIzMDQxMUY2QzVEN0I0RTU2RTNCNUJFRjNEOTJCLCAzOTI1MzVERjBBMzFBODk3RTY2OTQ2NTFBNTA5M0ZBOUE2QUFBMDBFRTRDQzZCRDU3NDY5MzY5RTAyM0E3NkUxMjQ5MTE3QTNGNjk4NkFFQUQxRjYyOTk2Mzk3MzE5NzMyRkZBODY0NTM2QzY3ODE2N0Y3Mjc4OTkxRjdGRjM1Njg3CisxMEY2M0U3Q0I1N0VGQTRFMDdEN0EyQkExMEMzMUM3OTBDQTFFQjBFOURBMDkzM0VGNDgxOEE5MUVEODlFOSwgRTBCM0QzQzYzRThCMzNFMUVEMjRDQzZEQTMzQjZENzI3NDJBNTQ1QzIxNThEMDQ1MTE5NEIzRTEwOTBCRjNCQURERTI0RUI5OUY1OEZCMDFDNjI1MjQxNjRGNjE4OEIwODg0QUYxOEFBQTZBNDQ4REEwMDc0NEUyRDFDODkzQzQzMiwgQzYzRjdBQTU0Qzg5NTVEMzkwOUE4RTMxOUM5MTlERDY4MkFFRTZDOUZCNEE5MUQxRTVGM0Y5Q0YyOTYyMDEyRDU0REQxRDY4MURGMkMxODg0MEZCMjIwQTY0RjFENzg4NkNBRkJFN0E5MUFCMUU5NkRCQjA0NzZERTc1NTkxQkFGMworMzJFMkJCNzYyMDdDRUVFQTE3ODZFODJFMzI0OTU1NkIyNUU1QzEyQkQ4RTFCOUJDREQ4NDlGQjVDODlEQkIsIDFCNDE4QTg4NURCRTEwRjFERTFENEZBQTY2MjVFN0M1QjUwRTdGMTAzQ0YxOThBNUQwMzc3MTk3MzJGQjAyQTI0NzQyMTcwNjExRDlBMTdGRjQ0NTdERDQyRjU3RjMxRDdBNkI5Mjk3QUNBOTRGNTg4OTk2ODQ1NTU1RTkxMjdDQzIwLCAxM0FCMzdBRTdDQzZDQURDQTQ3NzFEOUMwMzhFOTlFMUQ1ODg3NEFCODk0RjVCOUJFOEVDOUYxNEYzQTc3NUQwQ0FDMTlGOEIzNEEzNzUxODk2RDU5RDRGMDU5MkRFQUMyRDlDNTA0OTE3NkU4QTY4RjI5ODQzMjgxNEVEOTc3M0EzQgorOThBODMyNjI2MTc2Q0NCRTQ2OTRCODhBOTZEQzAwNDE3MUIxNDM4MzhBQTUyRDM2OTg4RERGMjE1OUQ5MzEsIDFBMzU5QTFGM0QxNjY3Q0RDNTE5RDM2QzE5NjJDRENGQkNFRjc2MDJFNDg5MTBBNUIzMzI4OEE1RUU1NDdCNkEzRjk0RUZGOEJFQzJFNTQ3QjVBOTEzNEE5MjJBRTQ4OTUzQjUzNjlDRjM5ODM5RjlBNjlGMTEwODFENzZBNkJGM0E1LCAxNjE1Q0NBNzdBRUI5NkNFMTVFQUI2M0M1MUVBQTZFRUY1MjYxQjE2MkM3NEIzREMwODRDOTBCMjcwREQ1MEVGNzNGRDBFQ0RGQkY0QjVCRDIzMEMxNjU4QkY5NzI4NzVEOTYxNjVGNzU5MUVBNDgxNEZFNDYxN0YzQUM3QzI4Mzc1NAorMUM5Rjg5NzI3MjQ2NDY2M0FEM0JFMjk5RkM0OTQwMEM0NTUxM0NBOEE5RkVGODdBM0M5QTk5RDY0MEQ4QjkzLCAxRTRGRTI5N0U3MDNDOTNFMkI3NTEwMEY0NEI2QTUyQkVFMjcyQUVERTdBMjFBRTk2NTlFNEJBNDM0MjhFNDM5MkMxQzI3RTVBNkM5QjY2QTNGNDEyRjRCRjM4NDNBREUwNDVBMUMxREIxNjJEMTQ4NTc1NUYyNThEMzY1QjQ4RjEzQSwgM0FGOEMwNTQ5REQzRjhCMENEQUY5NzU1QTY0OTI1ODhGQjk2ODVEMDA4RUQyNDNDMjU3OThEQTNDMDlGMTU3OTVGN0Y0RTFDODJCRDU1NEI2QzA4Q0I4MEI0MjVGMDA5NjUyRDc2OTJGNTdBRDBCMzEyQUM5QjA1QzhEREFDMUYzRAorNTVERTlDNTc1NkQyRDMyQjA3QjNBN0NERjREQkMwMjRDRkYzQjVGOUZERkNFOTZFQjVDRkNEODJDMjhBMkI5LCAyMENBMzcyOTI0NTAxMDlFNDlBMkE5RDA2ODZEMUI0M0I2OTYzNENEQThDQ0JGNzhDNkVEN0EyOUZDMTgxNUVGM0NCNTNENTIyMjQ5NkQ1RjBFQkI5RTgzNUM5MDQ5M0I5MDM2M0U2OTAzQTVFRUU4QjZEQjk3OERFOEE1RkFEMkE5LCA3MzBEMzgxMUE0NkZERjE4MDhGNThEQjE5NURGNUQyQjNBNEZCREUxOEM4QUE3QTQwNzdBNzZBNEVGQ0FBNDZDQkE5NkZBMTEyMTcwRjZGNDMwMzczRDJDQTQ1N0IzRDU3MDk0RjQ4NkU5QjYxQ0Y4RURDMTU1MjYxN0JGNjZGMUQzCisxMDE5QkQ1MDYwNDc4Nzk4MTE3MUFGNzY5REU5MzQwNkU2RkRCMjFFREY5RjZCQzRDMjE2RjY4ODg0NzlFODJCLCAxOEQ2NTE0ODdCRUY3MDE2MzU4NUMzQzgzNzI4NzJFQjg2RTZBOTkwRDRFNzE5Qzk3OEM5MUYzQTc0NkY3NEEyMTM2MEE2NEJCQjY2ODY1QzNFREU5NjRERkFBMjc0M0RCNEU0QkQ2MjIyMUFBOUFBMTFCRkE5RjUzOTVFNzEzMUZENCwgMTMwODVEODM3Q0M2NzhBODg3QTUxRjhENzFFQTRDMTlEMUQwRUE2MDQ1RkVGRjM4ODBCMjY3RUQ3MTYyRDI3NzJGQjFCNzFGRUQwQkFDNThCQjgyNDE0RjU2QjA4NTM4NjREMzJFMDNFRTIwNjlFQTVDMkNDOTc3QzhEQUVEMjM4MjQKKzMwNEQzN0YxMjBENjk2QzgzNDU1MEU2M0Q5QkI5QzE0QjRGOTE2NUM5RURFNDM0RTQ2NDRFMzk5OEQ2REI4ODEsIDE4MEYzNkEwMTI5QjUyN0FBMjQwNjkxOEIzNTMxN0E3QjQ2QUE1OThGOTcyMDY2QTFBNTA3MzU4QUIwOTI4NTkyOTlEM0NDNTkwM0U0QUM4OEIzMzhEMEFDRUNGRDBFQjIwNEEzNDUzRTAxQ0UwMDQ5QzAxNzY2RUY4MkM1QTM0OTI4LCA2QUQ5N0EwRjMwRkNDRUNFRjFGRUU2OTU3MTFFM0E0OTZFNDZEQzI4NEFEQzFDRTIwMjZFMTRCNTY5RjdFRTI3NzI5RDU1QzFGN0MwRTQ1MTFCMzcxOTQ5MkE2RDNEQ0E4M0NGMUUyOERGNzcyMDE5NDRGQzQxQkJGNzNBMkNCQjZBCis5MEU3QTdEMzYyODNDNDU4OUNGRjJCMkI4RDMyRDQzRTFFRUI0MzE1REM5QUM5RUFEMkNFQUFDQ0E4NDkyOTgzLCAxQTVCNDE1N0YwQzVGQ0I5MEE1OEE1REMxRDE0OTc1QjE1OTYyRjQ5REJCQzJFQkEzMUE2NUI3MDFDMjM4QjBBRDAyMkUyNEU0N0U1ODdFRDU3MDU5NUM5MTYyRjNFNDIxQjdGNzgwNEI2MTU0QjhENjA2NjQxQTgyQTdCNUJFNUNCMywgMTJGMzc2MDdCRTM2QUM0REQ0N0RDQkU4MDE1QjY5QkI1ODhFNkZBMEJDMDEzOTJCMkIzNkM2RTI5MEY1RTk2OUJGODNBMkQxQjhDQTRFRkQ3OUFDN0U1QjIyNDEzNDY1MEMyQzM5RUYwNDdBRjQzNzkxQTQxMEFCNEU2ODg1MkYxODYKKzFCMkI2Rjc3QTI3OEI0RDA5RDZGRDgxODJBNzk4N0NCQTVDQzFDOTQxOTVEMDVEQzA3ODZDMDA2NUY4REI3Qzg5LCBFNjNBNEY1NTFEOTBCNTE0RjQ4MzI2NDlBMDZDQUQ0NTIzOTE0RTZCRkJDMzkxQTcyNkU1MDZFQ0U5ODY1MTBBNUVEM0M1NTE3OTQwNjI3NTVFNUEyMjhGM0U5OTU3QjU4REVDMTBEODBGRjVBMEU0Nzk4MDlGMzc1RjMyMjc0QTEzLCAxRUFFNkM0NEIxMDFGRDQ4MDVDQUM3RkMzQkY5N0JCMUE2ODE0OUJCMTdDMjMzRTg1RUNGNEE4ODM2QzU4NjFBQzkyQUE2MDZFRDEyMjA5RUZFMUIxRTMwMjJDQzM4NzBBMUQ1M0M5QkExQTQzNDhGQUE1RkIwMUJENzI0QkNBQTNGOAorNTE4MjRFNjZFNzZBMUU3MUQ4NEY4ODQ4N0Y2Qzk3NjJGMTY0NTVCQzRDMTcxMTk0MTY5NDQwMTMxRUE5Mjc1OUIsIDFGMDJFNzBGRTNEQ0FDMzYxNTFFREFFMjVDNkQ3MjgxM0NBNkRGRTM2NDc2RkQ0NjgyRTU2MkU4MkRFRUExMkNERDNFMEIzN0I2MEFBMTBGNzE5NUJCRjlCMEZGNjE5MjdGNDQ0QTgwQUMwQjRFRDFEQjE0MDc0RjRENUE1RTQ0MjcsIEIxMjhGOUQ4MEY2RTU4REFFMkVGQUZEOUIyQzI4NEU5RkRGNDM2ODFBRkNFQjY2OTJFMkVDNTkwQzNGNTJCNTI3RkU1NzRCODE2RkU4NTQyQzUyNTNEN0ZCQ0FGRTAxMUJDRUQ1MkNFRTIwRjUxQ0Q2MTJGNTcwNDVDRjBFRkVFMUYKK0Y0ODZFQjM0QjYzRTVCNTU4OEVFOThEOTdFNDVDNjI4RDQyRDAxMzRFNDQ1MzRCQzQzQkNDMDM5NUJGQjc2MEQxLCA5QzAwMDdFQTk5NDM1QjI1MzM0NTRFOTA4MTczMzk2ODUyRDc2RTU0NzUzRjI3MEQyOEU4RjBCMkUxN0FDN0VCMzM5NEEwNTJGMTA1NTM4QUNFRERFNThGQTJCNzI3NDkxMUY5NTIwMTUwNTgzMzNBMTIzRDUyNjJCMjQxOTMzODE4LCAxMEMyQzgyODNEOUQzNzA5RTgyOTc1NTU1MzQ1ODdGOTIwQUNGODNDQUE4RDZCOTBFQTY2NDg2RjgyQjAyQUQ5QzBDODVBQUEwQzEzRTE1MDRCNzBEN0M2MzBGNzE5NzFBREY2RTJERTRENjcyRTFBQUMwREIyQjhEQjBDNzI2QTY4MAorMkREOTRDMTlFMjJCQjEyMDA5QUNCQ0E4QzdBRDE1MjdBN0M4NzAzOUVBQ0NGOUUzNENCMzY0MEFDMTNGMjYyMjczLCAxMEMxOTAzRkI4QTMyQ0YyMEM3QTEyREFENjgwQ0VCQjMwNzYwNzg3OTI0MkQwOERCREM4QzkwM0MxMUJGRTg1MjA4NzAxQkRBQ0ZFMTYxMDhDMjJCMEJEMzNEMDMwQUE5NzAwRTlGREVGNzlDNzRFODY2MDAxMzRBODIyMkQ5QTUwMiwgMTNBODhGRDZEMjI3ODhFOTU1NjY2RDYwMDA4RDU5MzU0QjYzMzRBRTI1MTYyMzFDNUMwM0MzQkVGNDU2QkFFQTExOTE3MkRENzQzMDFGNTNFODAzNDRENEE3QUU3NDBDMUYzNTdGNzFENjQ1RTE3MzM4NTg3RjAzNkQzOEIzODNCM0IKKzg5OEJFNDREQTY4MzEzNjAxRDA2MzVGQTU3MDczRjc2Rjc1OTUwQURDMDY2RURBOUU2MUEyQzIwNDNCRDcyNjc1OSwgMUExQ0Q3MEYxRTY4M0VDRjEyN0VDMjc3MkMzNzk1MjI5NzY0NzdFMUQwNjc4QTUwQ0RGQzc5NjhGREE0OTI3QzRERUQ4OEQ1MjA0NzREMzE0RjMyMkRCRDc2NTcxQTI2OTkzMUVDRDU0MzUyODFEOTJEN0Q1N0U3MkU3RTY1OUY1RDQsIDFCNjI3QTNBNTI2RDFEN0JDNDFENTg0M0IyMTNCQUZEREEyNDg2NjJCQjZFMTkzQ0JDQjJCNkREMjg2OTYwQjk1RENEQ0U5NjQwM0NFRDc0MDhFRTM2MkQyMUMwNDFCQzBGM0VGRTQxMkQ2MDUxRDFFNTk0NjRENDcyMTE4Qjg3NTI4CisxOUNBM0FDRThGMzg5M0EyMDU3MTJBMUVGMDUxNUJFNjRFNjBCRjIwOTQxMzRDOEZEQjI0RTg0NjBDQjM4NTczNjBCLCA1QTU0M0VCQkIxRjgzNzI3NDg3M0I5M0ZENTkxMjNFMEM0NUZFQ0NDMEYwRjUyQTAzN0YxMDMzMjk2MEFBRjAxOTM0MDJBODY0ODVDM0ZEOTA0QzM0OUVBMkVFMkE5QUIzRUREMUMzNzA3RDJCQjdFQjAwNzI3RTMzQjc4MkZGQTBELCBGMjIzNzU4NDZBRkNCQTY3NTQ0RTI3MTZCNkE5MEVCNTZBRkFGOEM1QjgyRThCM0M4QjhBRkMwRkQ2MjREMDc5MDI4RUY2ODU0NzFEN0VFRkJBNEYyN0NGREQzNEZGNDVFOTY2Njk4QkJCMDU4QUIyMEIwQzI1NkFBRDdERUMwMjZCCis0RDVFQjA2QkFEQTlCQUU2MTA1MzdFNUNEMEY0MTNCMkVCMjIzRDYxQkMzOUU1QUY5MTZFQjhEMjI2MUE5MDVBMjIxLCAxRjNGOUIyQ0M5QzFFMDc4ODBBOTY2OThDNzUzQ0Y1Njk3QTNCQjhGMjA0M0UyNkEyMTEwMjZDMEFBOUQzQ0VGNTBCMEY4QTEyQjdEOTlFOEZERUNDQTNCRjkyMUQxNDM3MzlBRTBEOUVBMjhBMkUzREI0QkM0OTU5MEZFMTZCQjRBRSwgREZFRkY0OEU0MkE3MzdBNTEwMTQzOTJFMEFFQkJBQzAyODJGRjdCM0U1NjZENTNFQUM3MURGMUVENTI1MUE4RUU2RkQwOEU0OTA3N0I3NTU0OThGRDVFNUE2QzlFMTU2OTdCN0VFQTkzQUM5NEI1QUVDMTlFQjBFRTdBQ0I5OUMKK0U4MUMxMTQzMDhGRDMwQjIzMEZBN0IxNjcyREMzQjE4QzE2NkI4MjUzNEFEQjEwRUI0NEMyQTc2NzI0RkIxMEU2NjMsIEZGQzFDQkIyMDNGMTk4RUY0MUI0MEYyMDhDNTM5MUFDNjNDOUNCMjg2OUUyMUYyMUJFOENGQjg4MUY4MzI0MzBGQjZCQUI2M0I2QTM4OTVBMjlFQjNCRDU3MDFCMUY1MEFCQTI5QjFFRUQ0QjhDM0FFREMwMTJGMUYwOEI2QzEyRDAsIDFEQ0MzMzI5NEYzQ0I3NjQ5OUE4QTE5RDdGODlEODgxODFDMENBNDkxMjk4N0Y5MTIwQzkwOTE3MENBMjBEMkU2QjY2OUU0MkQ0NkQyRUIxNENDMDU1MjgzM0M3MTg3MjQxOUUwOTgyOTlFRTU0RDk2RjlCQ0FFRUE4MEVCREM1RkNBCisyQjg1NDMzQzkxQUY3OTIxNjkyRUY3MTQzNTg5NEIxNEE0NDM0Mjg2RjlFMDkxMzJDMUNFNDdGNjM1NkVGMTMyQjMyOSwgMUQ2QTg1RjhCNzAxMDg4NjEzMDc3MTBDQjhEN0JCM0QxQjU5MUNBQTQ2MTBERThDN0Y0REYxRUFFNkRFOUI1MTMyMEYxRTIxRkM2NTE1QjFBRTdGMkNEM0MwMEVFMUM5MjY0QkQ5Njk2RDU2QTdFQzgzQUNCQUI5MjAzRUY5NTdCQ0YsIDEwMDZBNUIxRkE1Mzk5OTNFOEMwODkyMjVDOTU4RUVFMTczRTYzMDY1Q0E2OENEQURENjkyRTBCRjFDQjlCMzRFMjEwMEY2MkIyQUY5MkFCODAzQzZFOEEwMEIyMDk4RUI4NDAyNTk2RjE0NzI4MjlCNzU2Q0E2NkJBMzc1OUJDMEQ3Cis4MjhGQzlCNUI1MEU2QjY0M0I4Q0U1M0NBMDlCRTEzREVDQzlDNzk0RURBMUIzOTg0NTZBRDdFMkEwNENEMzk4MTk3QiwgMUU3RjMzMkRGRjFFMkQyNDU5QTY3QTBGRjFCODRCQ0EzRDQ2RDA5M0Y1ODNDMjlENzZFMTQ1MkJCNzUwQTlCQjQxODdCMURGQ0EyRjhCNTZGRjAzMkJENDNGMEZCQjI5RDZEMjQ5MzNFMTE5N0RFRkVBMUFFODk5NDRGOTQxNzk3NDcsIDEyQ0ZDMzNGQjRCRkVFMEZDMTIyRTNERTVFREM2N0VENzZCNjFBMTNGMjdDRkVBMjEzN0I2Q0FGNDJDMDAyRThBNUY1RTYxNDQ5MDU0RkNBQTFDNUU3NDBFMUIyREJGMjFERTVBODE2REYyRDg5MkMyQzIwQzk0OUM0NkNFNUY4NjBECisxODdBRjVEMjExRjJCNDIyQ0IyQTZBRkI1RTFEM0EzQjlDNjVENTZCRUM4RTUxQUM4RDA0MDg3QTdFMEU2N0FDODRDNzEsIEU5NTNGNzkxMEU3QTg5OTA0RkIyRTdEQjlCNEY5QUMxRDYyREM1QjQwMTczMjczMzA3MjcwQzY3N0I1MUIzNkE4REMyRkE3OTUzQUUxODhEODUxOUY5RkFDREU1MDEwMDA2M0FCNDY1M0MwQUIwNzFFMDU5NkVFOTBCRjY3NUU5QzYsIDQ1NUFDREEyMDM4RDY0Q0IzOEQ4ODdENTEwMjE2QjFBMTk0NkUxNDhENzk1NTgwODE5NENCMDY4MEZFQThFNDNDRjY5Qjc2QzM2Qjc5QkE3Q0FCNDRCRTUxNUVDQjI3RDI1RDk2Q0VCQ0I0QTE5QUQ0OTI3QjE4Q0RDN0VDREJGNzEKKzQ5NzBFMTc2MzVEODFDNjg2MTdGNDBGMjFBNTdBRUIyRDUzMTgwNDNDNUFBRjUwNUE3MEMxOTZGN0EyQjM3MDU4RTU1MywgNTM4M0JEQTMyRURFNkE3NTc1RjI5RjQ4RjlEODQyODlEMDA2NDU2NzRENjFEQUE3NEExRUQyM0NGMjBEQ0JDRUJBN0MwNzRBRkVBQzRBNDcyNDMxRDNFOUFCNDgxRDYzNTBBQzU2N0Y4MThFRTcxNjQ2QzU3OUQ0NTc2M0EwQjY2OSwgMUNBREVBQzcxNkRBMjBGMDJFN0IxMEY4QTczMzRBNzY5MkI1QkNGODVBRDE5QjhGM0FFMUE0RDdCQ0VEMjM4RkIwQUI2QkFDQ0RBMzVBMTJBMkYyQjhDRTlBNEUwMjE0NUE3QjNCNkNCMDk5RjA5MjhFN0Y0NzA5N0U2RjVGMkM3RkEKK0RDNTJBNDYyQTE4ODU1MzkyNDdEQzJENjRGMDcwQzE4N0Y5NDgwQ0I1MTAwREYxMEY1MjQ0QzRFNkU4MUE1MTBBQUZGOSwgMUJENDU3OUIzRTQ1Q0REM0Y1Mzc1RTI4QTAzMjY0REE4Nzc0QjgwMUM3NzRDQ0NBQzE2RDEwMkNFQzdDNkE1ODAzQkUxMThFMUFFOUZCRThGM0NCRUQ3NkMzQzQ0REQ4MjE2ODI2RjMyQjZCMDE1MjBDMTk1REEzRkM4OEU0QjExNUQsIEYwRTQyOEFEMjY2NkZCMjE5QTJGRTEwODI0RDRCQzMyNTJBMkRGRjc4MzdFRjlDNDNCMjA4NjI0OUY4ODI2OTJDMzhFNkRBQjJGODE5Njg3MDkzOTMwMTJGQjYyOTUxMzM2NTZEM0M4RjhFNzYxMzY4OTYxRTM5M0Y2REI4MzgxNTkKKzI5NEY3RUQyN0U0OThGRkFCNkQ3OTQ4ODJFRDE1MjQ0OTdFQkQ4MjYxRjMwMjlEMzJERjZDRTRFQjRCODRFRjMyMDBGRUIsIDZCNDZCQjM5N0NFN0FCNTk2QTJBRkIzQzM0RUVFNjgzNERGMTQ5MUI0N0YwREU3QjNEMjk5MEE0ODU3NTNENkMxNjYxOTQ0ODRBRkI1NUYzOEM1MTc1NDM2RTVBOUYxMjhCRTBCRTAwMTlCMjRBQjcxQTM0RTQyODQyRDczNzQ4QUUsIDExOTI1Q0ZFRTU3ODA3MzM3MDIxQzZGNDdDQzcyNzEyQzAzRTdFRTM2OEREREMzMEUwMTMwRTkzNzBEODA3MDY5RURENjE5QTIxQ0UxMTNBMDdCMjA2M0Y5ODM5QjM5NTQxMzlDRTlEMUNBREMxNThFNjM4RDE5MzA3QURCMjE2RUQ4Cis3QkVFN0M3NzdBRENBRkYwMjQ4NkJEOTg4QzczRjZDREM3QzM4ODcyNUQ5MDdENzk4OUU0NkFFQzFFMjhFQ0Q5NjAyRkMxLCAxODcyOTc0NDUyMjM2OUQ5NDE4MTA4OUI4N0JFRUE1QkJGMEM2NjFGMjFFQzVCRkNDQjVCMzg4MDQ0OUUzQzRERTkyNjQxRDA0M0I0NkU1NTcyRjJDOUFEMzgzNjQyMDk4MTE1NkM1RjQ4NzYwRTdDMzkzQzI5QjQyNjg3RUVDQUZFMSwgMTY5MTdFMTc3N0U4QkM0OEQ4RTY4QTA2QTMxNUFDQ0NCMzJBMzdCNkU2RUMzRkU5OUU2RjhBNjMzREIyMzU0NEE2MTkxNzMwRkQ0RDY0Q0Q2MDI1Njc1M0U5QTA3RTU0MjNBRjQyNTk1NTIzMTQ1MjgyMTM4MDYxN0ZEMzRFNjg1OQorMTczQ0I3NTY2NzA5NjBGRDA2RDk0MzhDOUE1NUJFNDY5NTc0QTk5NTcxOEIxNzg2QzlEQUQ0MEM0NUE3QUM2OEMyMDhGNDMsIEI4QzFBMkZBQTRBMzhDNkI1QzA4NkIzRTQ3RkVGNUQzMkYzQUM5Q0JDMjFCRjY3RUZDNzExQ0UwMTFCNDQzRjExNzIwOEExNkMzNjk0QzE2QkE4NEUwNzEyQzI0M0MxM0IyRjRGN0JFRTdCMUEzN0YyQUVCNkU3RTU0NEYyMUYwRDAsIDlDNTFBN0Y4OUFFRkFENDIwRTQ0QjRERkQzQkUxNkJCNjZFMTAzNDJBQzhCQTQyRjkyOUYxOEUyNUI1OUQyMkVBMkVCMUY4M0QzOTA3OEFDOTAzODE3MTM2QjRGNDcyQjVFODdFQTJGNkNCRjkxMkJCNzAzOEY1NTA0RkY4Qzg5MTQKKzQ1QjYyNjAzMzUxQzIyRjcxNDhCQ0FBNUNGMDEzQUQzQzA1REZDQzA1NEExNDY5NDVEOTA3QzI0RDBGNzA1M0E0NjFBREM5LCAxOEFCNEI3ODVDQkUxMTYxQTM2MkU1RjAzRDg0NTQzODc1OEM1OEE1RUY5NjIwQjk2M0Q1QjQyQTFFQUE4RjRDNDlBRDVGOUZEMjA4MkUyMkU1MDY1RDJGQUFFMEYwRTFDODNFMjk0OTA4Qzk5RUZDQzYwNjRBNTMyRTUyQUQ2OENGOSwgMjUzODQ3MEJDNzZEMDE1NjFDNDY2NkE4RTY5QkM2MjZENDRCNTJGRDIyNTA0MzYzOUNDM0U5OTIyRTM4QTVDMjkyNzQ5RjgyMDVEMjFDRkY4Q0FFOTY4MzdGRTY3N0JBMkI5QjdDMUM4NjkwRkM0MTdFOEVGMkUzRkYwM0YzREQ2CitEMTIyNzIwOTlGNTQ2OEU1M0RBMzVGRjE2RDAzQjA3QjQxMTlGNjQwRkRFM0QzQkQxOEIxNzQ2RTcyRTUwRkFFRDI1MDk1QiwgRTRBNTI5MjRENDM5MjM2QjFBMUJBRTk2RjU1M0IyMzExRkMwQUM0OUI1QkI4MDA2NkIwMEMyNkFBMjg5NjE4QkU4NTU1MjNDN0U2OTlCNkFEMkFFREQwM0RFRDNBOUY2RURDQTA2NUZFMzdFNUZBNjk3RTI3MzIxNUVDRjQ1QkZCMSwgMTExNjhDMzY5NTMxRTg4MTM3RjU5RENFQ0Q2MDA1NUY0NzI3QjAzNjQxNDc2RUQxNzNFNDZFRkQ2QjlFODlDRUZFMTE1QUE0QTdBOTM5MTE0MUY3QTg0NzA3Qzc4RkEyRUQ4OUEyNkM0REMxMkRBRjdDNzUyNDVGMEVEQjg1MTUxREEKKzI3MzY3NTYxQ0RERkQzQUFGQjhFQTFGRDQ0NzBCMTE3MUMzNERFMkMyRjlBQjdCMzc0QTE0NUQ0QjU4QUYyRjBDNzZGMUMxMSwgQUJENzU1ODdGMjM2NjRDNzM2RUU5QzM5RUVGN0VBNzlBOEE1RTc1NjYwN0U2NTY3RTBDMkUzRUI4QTNBNkJBREIwMTdBNDBEQUI1NkZEMEY1NjU3MkVDREQyOTg2NTg5OTQxREFCQ0Y3RDQ2Rjg0MDMyM0NENjBGRTIwMEFEMDFFNiwgRTVERkI1QjAxMERCN0UxQTZENjM0RTlBRTIyRTE0MTU1MUE2QjQzRDNERTMyQjQ1RERBQkE0MDk2NTAwQUJDMUY1MEUyRTI1MjJDRDlCREY3NEM2RTZEMzQwRjM1MTQzRTk4ODU1NTBGRjIzMTk5ODZGMTdGNkI4NTQ1NjYyOTYyMQorNzVBMzYwMjU2OTlGN0IwMEYyQUJFNUY3Q0Q1MjEzNDU1NDlFOUE4NDhFRDAyNzFBNURFM0QxN0UyMEEwRDhEMjU2NEQ1NDMzLCAxRjNEQzM0Q0I5QTE2OTc4MjU0NjIwNjIzMTZFMTkxNDUxMjM4Q0I0MUE5ODI2REI1RTUzQTNBMDgyQjlCRDQxREVERDAzRTkwNjc1MzAyQzgxQTM1Mjk0RjBGMzM3RDg2RENEN0Y3MUYzMzYyREM3QkNEMzdBMzc2MjJBM0I5RjA2MSwgNzI1OEVENjdFRTFGODlGMkQwMEJGRDkwRjE4RjhENTQwNUNFMjM1MDlBM0Y4ODkzQjk0NjgzNzk0RDE5RDU2ODBGRkU0QjA1QzkxMjA3QzI5REQ0RjQ0QzhENkM5MDkxQ0IyNTQ0NjNFRDQxOUU1MzQxMTVBOTM4NTdEM0Q5OUQzQworMTYwRUEyMDcwM0NERTcxMDJEODAzQjFFNzY3RjYzOUNGRkREQkNGOERBQzcwNzU0RjE5QUI3NDdBNjFFMjhBNzcwMkU3RkM5OSwgMTk3MzM5QzREQjI2NjA2NjNDOUJBMzE4RjFBODcxMTc5RkVERDE0NTA4NEY1QTQ2MDdCRjBCRTU4OTJDNTkwMjcxQUM3QTIyREMxODg4RjA2NjkzMURCMDY5Q0YxRjlERkQ0QTI2MTIyQzY0REEwOTc1ODFERUVENDE3RkYwMjFGQzYsIDE3MDdDMkRCNjhEMDY1OEJCRERGNUMzMTFBOEREOTA1NTM4RkIzNDUzMjFCQ0Q2NUI3Mjc1OTgzQjM1OTk4NzNCNjMxQUExMkJCOTExQUU4Mjk1MjNDNTU0MkQyNzA5RUUzQjlGODRCQjUwOUVFQjcwRjVDRkVGQjIzNzIwRTQzMkZDCis0MjJCRTYxNTBCNjlCNTMwODg4MEIxNUI2MzdFMkFENkZGOTkzNkVBOTA1NTE1RkVENEQwMjVENkYyNUE3OUY2NTA4QjdGNUNCLCAxOUE5QTU3RkJBNDlFRTk4OTdGMTdCMEQ1MTgwMjYyNUUwQ0Q1NjM1REQwMDI1M0JDMEY4NjA2NkFBOUNCQTgzRTlBNDRFNUNERTE0MjI3QzI5QUUwQzM3NDc2RTM4RTJEOUZFNEE0RTg1QkFGNkUzRTRERThCMUU4QzFFMkI5MjY2OCwgMUU0Qzk5Rjg3QzdBMEM2RTY3MDA4ODJBQkJERjQ3NkE3RUVGQUVFRDA3MDkzRDM2QTIxMkY5NTEyQTgzMjFCNjBFM0IyQzRGQkVCMEY1MTE5QTMzQUQ1MzQwQTE2Mjg4MkZFQTE2ODQxNTIxNTYxNzA4RUY1MzM1QjlDMzZCMjcyMDIKK0M2ODNCMjNGMjIzRDFGOTE5OTgyMTQxMjJBN0E4MDg0RkVDQkE0QkZCMEZGNDFGQzdFNzA3MTg0RDcwRjZERTJGMUEyN0UxNjEsIEFGRkFERDg2RkRBRUNFQjVGRTg3RTVENjhCQ0E1RDZGQzY2RkFBRjc1QjIzNUQ3NTA1NkM3MDNFNUM3RDA4Qzg1NjhBRkI3RkFEMDMxOEI0NTVCQjc0MkU1QzVENTczRDBFNzc3RjFBQUE2OTMyRjEyRjFCNENBQzAxRDRGNDhCOUIsIDFENDY1NDRDRTE2NTc2NUQ3REI1MUNGM0M0RDQ5RTc1QUFGMEQ4RTE5NzM2RTM4OTg4MDQ3NjI3Q0FBQkI5MjRBOTU5M0ZBNUY2RTk4NjMzMEQ2Qzc3MzUwQTc3QjA1NjBCRkQzQzZBMkJFM0E0REYzRDRBMjI0RjAzM0JDMURBQjI1CisyNTM4QjE2QkQ2NkI3NUVCNENDODYzQzM2N0Y2RjgxOEVGQzYyRUUzRjEyRkRDNUY1N0I1MTU0OEU4NTJFNDlBOEQ0RTc3QTQyMywgOUQ2MzRCMENGRjQ5NUIzN0FDMjlDQTMwMjMxNzY2NTg4QUVBMEJGNzBFM0I1MEE1N0JFQTQxNTlCRkJERjNBNzI4RDFBNEM1MDhBMEI5RkZDRDdBNUZFMTcwNjBCQTlDMTNDRkNEQ0NCNDhDNzMyMzBCOEQ5ODBFNjJGQkZCM0UyMSwgMUFGM0U1M0FEN0E4OTJBNjY3NTc4MjM0NDhFNDlGMTQ3RDhGRTg0QTBGRDU2QzM0QzZENTM2RkIyMDYwRENCRkJFRkUzRDE3QTQ5ODE1NDlENTc5MDAyOEQzNEJBNTY3M0Y0MjBCMUFCMDkzNjQxOTVFOERFNEIzMTMwRDY1MzMxMTcKKzZGQUExNDQzODM0MjYxQzFFNjU5MkI0QTM3RTRFODRBQ0Y1MjhDQUJEMzhGOTUxRTA3MUYzRkRBQjhGOEFEQ0ZBN0VCNjZFQzY5LCAxQTY1NzFEQzY2RERDODc1RUJDNzEyOEM3RkQxREQ1QTY4Mzg1NDZCRDZFMTAxQjc5MjVCRjg5MUM3NEIzQ0I1MEQyOUU1MTdEQkNBMjhBNTM4QzVBRkE5Mjk2ODU0QTI2M0NGRTYxMjM2NEVBRDg1NjZBMTFCMTU1MjQ3NDE0NjUzNywgMUM4MUMzRTlEOUU3NzFDMEJBQTA5MjI0QkQwMDA4QTExRjE3RjE0QjY4MTM2QzYxQTAyRDAzODc2NzExQzA4RkZEMTIyMjc1NzBGQzY3REI4RDVBN0RFQzcwMkUxQkM5MjhFQTNFQTMzNzBBOEY3NDU1MTEzMzM4RDhBMjc5NjUyNzkKKzE0RUZFM0NDQTg5QzcyNTQ1QjMwQjgxREVBN0FFQjhFMDZERjdBNjAzN0FBRUJGNUExNTVEQkY5MDJBRUEwOTZFRjdDMjM0QzUzQiwgOEVDRTkwNTU2MzlDNTgxQjkzNzA3REM1N0YxRUJGQTVBQzVCQzVEQkQ3M0EwNUUyMzBDQTRDN0MxMjg0RkUwRDQ3QkQ4RTQyRjEwQkVCNjU3NkUyMDcwQ0ExRDMwN0QyM0U1RUZCNTFEMURDMjBBRTE5QzUwQkREQUVBREFEQjY2NiwgMTZDRUNFRTA1QkE0MzYzNDAyNTNDNjE2RjFEQTNERTVDRUI1QTk2QkE3QzA3NzgxMUUzQUVDMzlBNUIwNkI4MjlBOTU5MjEzNjU1RUQ2RjI2NDZBNkFEMUYzRkNDNzFEMThBQjVCNkY4NUJCNzJBMTVBODU2MDM1NkQ2QkYwQzQzRDIKKzNFQ0ZBQjY1RjlENTU2RkQxMTkyMjg1OUJGNzBDMkFBMTQ5RTZGMjBBNzAwQzNFMEU0MDE5M0VCMDgwQkUxQzRDRTc0NjlFNEZCMSwgMTA4QkQzQTY0RTVEMjA0NTdGRkJBN0M4RDY4NzMyMjIzMjM5OEQ0NEM4QTJBQTJDRUJBMjYzNEFEQUFDNUI5NURFNjVBMzJCMzRDQzRBOUFCQTYwNkUyMTAwRUQ3RDk2OEFBMkMyOUI4NzI2RDk0MDYwQ0M4MkQ4MzM5MjZEN0I5QTIsIDEwRDJDNzk3N0U0RjdDQUU4RUNGMEQwNkY5Mzc2NkRDREYzNURFMDY5RDAwRDI2MDg2MTkzMzA1QTYxOTdFMzkyRkZBOTIwNjFEMDE5REFCQzY0OEE5RENGNDMwQUI4MzhGMkNENDY4MTRBM0Y2Mjc2MThBQUNERTE3NTZENzEyMzMzCitCQzZGMDIzMUVEODAwNEY3MzRCNjc5MEQzRTUyNDdGRTNEREI0RDYxRjUwMjRCQTJBQzA0QkJDMTE4MjNBNTRFNkI1RDNEQUVGMTMsIDE0RTgyRjVFMDBFNDkzNTk3OUQwNTEyNjU0QjFCOUQyQ0FCRjgyNTdGRDVCRTQ4NTBGRTc2REE1RUFENUU4NDgwNDk3NUQyREQyODY2RkMxNzg0RUVBMDQ2MThFMTgzRjYyODRGQkM3QzYyQUFFNDcwMTNFQkNENDU5MEYyQjNENkMyLCAxQTcxOTRCRTQ5QkU4Nzg0OTM3NkJDODEwOUY5NDU0NzA1NjkzNkRCRUY4MTIzMTlDRDc1NjU2RUU3RjU0QTE1MjU3Njg0MEJCMDM5OTg4NkU5RjgwQjc2MTQ4MjA4QjIxRTUzRTBDQTREMjhGMTUwNTQyMUNCRDFDNjgyMUNDRTQ3NgorMjM1NEQwNjk1Qzg4MDBFRTU5RTIzNkIyN0JBRjZEN0ZBQjk5MUU4MjVERjA2RTJFODA0MEUzMzQzNDg2QUVGRUI0MjE3QjkwQ0QzOSwgODUyRTkxNUE3QTAyRTQwRTgwQTJBODIzNUMyQjdBOEQ0NUUxNDdFQTA1NDlENDM0NjFCNEJFQ0UyOTY4OTY3RjY0RDg5OTBGREM3MzhDRTlEQUNCREYxRkI3NjYyNDBGNkYzNTk5OEVGMUU0QUVGODBBQUU0QTZFQUMwNEQ4MjBFQSwgMTc2N0VBOUE2NDg5NEIyRjY2QzMwNzYyMDJCOUEyQUU4ODA1QzQ2RkQ0NTlBMkM4RTYxMTBFQzc4NDU1NDM5NTkzQzVFQTcyMTQ4OTM2NDQ4N0VBNkQ5MEYzQkY4RTY3RDBBMEVDMzlCQjQzMEZCQzcwNTI3QjZFQkI5NTFEQzBCMTIKKzY5RkU3MTNDMTU5ODAyQ0IwREE2QTQxNzczMEU0ODdGMDJDQjVCODcxOUQxNEE4QjgwQzJBOTlDOUQ5NDBDRkMxQzY0NzJCMjY3QUIsIDFEN0M4MUVEM0NFNDNGMjFDRTA5QjMzRUU5QTJBOTg1REZGOEFBQkFDODE3QkFENkE5OUFBRDY2N0Y0NDQ2NEI1MjlCRTlGMTk4NTQ2MTE4RDVFMzUyNUZGMEJBQkFCMkU4ODBDQkVCMEJFMDAzQkIwNENDQzdBNUE1RDA5NDE4OTRCLCBFREVENDY2MUM1MTI2QjU0NjJGQjE5MDFBOTI0QjdGOEZBQjc0MkQ2NjI1QUE5QjcwREMwNzdEMUFDNEZCMkQzMDIzMEVGMzAwRkJCMjlCOEI0RjJBMTAwMTA0QTlFNjMwMjMwMzQ2RUUzNEREMDBCMEZEMDI5MTMwQ0U4ODgwQzRFCisxM0RGQjUzQjQ0MEM4MDg2MTI4RjNFQzQ2NTkyQUQ5N0QwODYyMTI5NTRENzNERkEyODI0N0ZDRDVEOEJDMjZGNDU1MkQ1ODE3MzcwMSwgRjVGOUEzMTBGM0NBNDc0MUVFMDJFM0IyQTZGRDZENzQ1OTBFOUUwRjFCQ0YwQ0FFMTQ5M0ZGMEY1NTg4ODVGNzVFN0EwMjhEQjk4RjM0M0ZBMEY2NEQ2MkFGMzc4NTk3RkJERTEwNzk2MjY3RTQ4MUMyRjVGMTNDOTM3OUY2OEM0RCwgMURCREQ1QTAwRTYyMzJBN0FDREYzQTFDMzgxREM2QzZGRkQzNURGOTEzOTNFRDlGQ0ZGMzU4Q0VERDlBRDA2NjVFRjRCREEyM0QzREY1MzFFRTY0OEM0MkZFNTJCQUNDQkEyOUU2MTExRUJEQkFFNDVBRkIwNzUzMTJEREVFNjg2M0IKKzNCOUYxRkIxQ0MyNTgxOTIzN0FEQkM0RDMwQjgwOEM3NzE5MjYzN0JGRTg1QjlFRTc4NkQ3RjY4MThBMzQ3NERDRkY4ODA4NDVBNTAzLCBCN0FCNzVENEI2NTJDOTEwODM2MzRCODUyM0MxRjIxMTNDRTVBQTE4QUY3MjdFQjk5ODY5MjlCRjU4MTdCOTBCODI0Mjg2OUFEQ0M2NzNBOTkzQjY4ODE5MUUwNjIxNUQyMDhCMzFCNDIyQUUyRTc3NjJDQjM4M0YzRUVBMDcxQjU5LCA0MEM4MjJDMkE3MENEMzc4NTkyMTI3RjJCNDNCMUVFOTY1Q0Y0QzhCMjVENjBFNjIwMjQ1RjYwNDAzNzhDRUFERjQyMTEyMjgyMTAxRURBRDQ0RjRBMUMwMDg5QUJGOENGQkFDMUFCMjVFNDI5RTVCMEY5OTg0MzI1MjE2QkIyMTQyCitCMkRENUYxNTY0NzA4NEI2QTcwOTM0RTc5MjI4MUE1NjU0QjcyQTczRkI5MTJEQ0I2OTQ4N0UzODQ5RTlENUU5NkZFOTgxOEQwRUYwOSwgMjNCQjBCQkU1MDZGMzVFMUQwNEY3REY5RjQ4NDExMjlGOTBGNzdCNkU4QjQ4MDA1NTQ2NDAyMDEyNUMwNjRGRTM1OENCRUIwODk1NEVDRkYxNjc3Q0JBMEQ2ODU0MzNDMkQzRDkyN0Y2MEIxOEVDNTU3NDUyQjU5QjVCMTNDMTZGNiwgMTg3MTAxOTlDNUU3QjFERThBM0YzRTJGOEZCQjMyNERGRTgxQzEyNUVGODFDNTRGQkI0ODk3RkJCRkQ3NTNGRjFGM0M1NjIyQzIzNDY5MDlEMTM5QkRGQTdEOEMzQzBGQ0EwRkMzNTlGNDI3QzFGQ0VERkJGN0JCOEE2Q0JGMkIzMTIKKzIxODk4MUQ0MDJENTE4RTIzRjUxQjlFQjZCNjc4NEYwMkZFMjU3RjVCRjJCMzg5NjIzQkQ5N0FBOEREQkQ4MUJDNEZCQzg0QTcyQ0QxQiwgMTlFRTU1NURERkVEMzg3NUJBMDhBQTYxNDVENjJEMTdEOUNBRTM0OEVCMDMxMzIwQTNDRDA4ODE1MEQxRjkwRURFQkRDNjFCNDgyRTk3RDE5QUIyMjlFRURCMjNGMUFGOUJDQzYyQTY4OTJBRDE1MjlGREM3QjBFNjIzNDIyMkM3QSwgOTMxNEMxM0YyMjI0NjQzRUUwQjAxOUJBRDZGMzc3NEY3Q0I2MDc2M0Y4M0I1NDZEM0I4QTc5NDZGRUM1MjA5ODU3QkVGMkQwOTlFREQ4QzJGRDIxNTg3OEVFNjQ4NEI3QkUzQ0MzMDQ0RUMwOThDRTJGREE4MzA5MUIyNjQ4OTlDNQorNjQ5Qzg1N0MwODdGNEFBNkJERjUyREMyNDIzNjhFRDA4RkE3MDdFMTNEODFBOUMyNkIzOEM2RkZBOTkzODg1MzRFRjM1OERGNTg2NzUxLCAxNjA3NTM3MkM3MjE2NzQ1NzdDRUU1MkVBNDU1MTI4RDM5OTgyOTJBMzhCQzg4QjRFQTY5N0Q0MjE0MzMyNUFGMDdEQTA1N0Y2NUNFNTdDOTBDMDM2NURDRTA4RjdFNUI5NUYyNTUwQTFDRDBDMjhEMzUxNTg2MUZEMDE3N0VERDIwOSwgRjVCRUQ0MDQ0NEE3NzAxNDVCNTM0QUExRDg2MjI5MkNCMTM0MDQwOUEzNTY1NTVGNzVGMEVFQUE3NDBDNEY4NkNBQ0FGMjQ0REM2NjkyNENCMjI4MEU1Q0JCQTY3ODlGNEVBRTI4QTFEMDhDRjBGMzZBNkRCQjQ0NkI4N0ZCMjMzOAorMTJERDU5MDc0MTk3RERGRjQzOURGODk0NkM2QTNBQzcxQUVGNTE3QTNCODg0RkQ0NzQxQUE1NEZFRkNCQTk4RjlFQ0RBMEE5RTA5MzVGMywgMTU1MTVDMTI5NEUyODhDRjE1OTYyODdBNDg2MTNDNUZFQkY4NkU0NDAzMzhERjA5RkRDRTYxQTcwNjJGQTA0N0QxRjEyMzNERDYzMEQ2MjVBQjUyQTBFMjI0MEZBQzZENjEwMjZDOEExMTc1NUY0RkMxNEQ5MEIwREJCMjI5QTAxNEMsIEVCMDZDMjc2RjQzMkVBMTBBRjJFNTU4REJGNDc2NTc1NzcyQjg2QUQxN0RDQkY4OTRFMERBNzlERTg5RUU0NkQ1NUE0RDVFOTZDQjFBRjY2ODM1M0MxQ0Y2QjU0QjNBNEEyRUZBNjVCQUIzNkFGQzc3NTQzMjYyNEMxRDJEMjZDQjEKKzM4OTgwQjE1QzRDNzk5RkRDQUQ5RTlCRDQ1M0VCMDU1NTBDREY0NkVCMjk4RUY3RDVDNEZFRkVGQ0Y2MkZDQUVEQzY4RTFGREExQkExRDksIDE1M0E0QkM2MjZBOUE4RDE5RDhBMTY0Njk1NEIxMDA1MDM2REEwMkE1QjUxOUE1MTU0MEE1NUM1M0YzRTA4NjFEQjdGQjAwNzUwM0Y4MDU1MjFDNjM2MUI2OTY0QzNDQjQxQjVGRDA5MDIwNDcxMTFBNDkxNzVGNUIyNEQ1RjlEQzQwLCAxRDVGMDQwMjI0NEQ0QzFENDU5NDI1NTNDQUFBNTExMDc2MzdFN0M5M0ZBNTRBODNDOUY1RDU1QTgwNzc1QUZBMUFENDM3NEVBMkQ1OTIwMDhBQzEwMDQxNDI2NTM3N0JBOEJGM0VFMTFDMDBGQkRGQzFERTRDQjlBMEZFMzZGOTcyMQorQTlDODIxNDE0RTU2Q0RGOTYwOERCRDM3Q0ZCQzEwRkZGMjY5REQ0QzE3Q0FDRTc4MTRFRkNGQ0Y2RTI4RjYwQzk1M0FBNUY4RTUyRTU4QiwgRjEwNjI0NDREMDkyRkJFRDI5Nzk5NzFFQUI0RDI3NEExMDI2MjExMkZEQUQwNjI5QUQ1RUQyMjMyQkE5NEJEOUFCQTlBMzk5MTY4NjgyM0E2MzFFNkZDMzdBN0RFRjlDOUFGOUU5Mzc2OUNBMTAzMDhFN0RERUIzOUFDQjA0MkRBMCwgMThFRUE3OTYyMkJFMUIyNDlCMzcwMjFEMEEyQjJGM0NCMTZERDgwQjg4MzRDQkI5NDRCQjVCN0M2NDhDMEU5QkY2QUVFMDMyMDk5OTIwMzVBRDQxOEM2QjM5OThCRTdDN0NBQTJBOUMzMTUyMzZDRTgwOENGRTMyRkFDN0Y5QjVEQgorMUZENTg2M0MzRUIwNDY5RUMyMUE5MzdBNzZGMzQzMkZGRDczRDk3RTQ0NzYwNkI2ODNFQ0Y2RjZFNEE3QUUyMjVCRkFGRjFFQUFGOEIwQTEsIDE2QTdCM0I4QTAxMTYyOUJBOEZDM0Q2QjczMjM5RDUzQjJBQTgxMjNGMzk4NDgxQkE1REVBQTc3OTE0RjIyM0YxNThGNkJGRTZBNDNCQzc4M0JEMzY0NDQzNDBDQUI3MDM3MTg3MTgzNUJFQjcxRjI1RjM4MTUwRjJCQkJGMEFBQTIwLCBERTFBMUQyREM4NDUzM0Q0Q0FFREYzNjg2Mjc5NkM3RUZFOEYzRkJCMjQ3NzUxNkFBMjMxNkM1RENBQjY2RUQ5RDE1OEJGRDY0NzU5MjVCOEVFNjhBMTlDNTA2RDA0QjAxMEI3NkI3M0M4OTUzOTQ3QjQ1MDc2M0RBNjk4QTk1ODczCis1RjgwOTJCNEJDMTBEM0RDNDY0RkJBNkY2NEQ5Qzk4RkY4NUI4QzdBQ0Q2MjE0MjM4QkM2RTRFNEFERjcwQTY3MTNGMEZENUMwMEVBMTFFMywgQjNBMzJCOEYwQkYxMjYxNDYzRjkyRkZENkNBOUQzM0I3ODIyREFENDhDRTEyRTIwMjM4MEQ4NkMxQ0ZBNjdFMTE4NDk4MUEwQzI1NTNENzJENDE0NUFENkY4QTZFMkI2Q0FBRDQzRTM2REVEOTM1RDI3RjVFNThDOENFRDBBQkVFLCA3RUFBQjg1RjMwOTY3NzJBNkJENjcxNUQ3OEFDQUI4RjNCRUQxREEwMDcxNEZGQTMyRDg5Qzg0MDA1RDI1MkNFNzYyODM1RERFOUU3MjExMDIxMDVFNDc1QzYzMzE4MTY4MDQxMEIzMjg1MzY1RTM0QUU0RjdFQ0RBNzQyREM0MDRBCisxMUU4MUI4MUUzNDMyN0I5NEQyRUYyRjRFMkU4RDVDQUZFOTEyQTU3MDY4MjYzQzZBQTM1NEFFQUUwOUU1MUYzNTNCRDJGODE0MDJCRTM1QTksIDE2MjkzRTNDODQxOUQyOTlFODBCOTQ4NzRBQjMzQTQ4QjZFRjRDNjhGOEJEQzUzODNGQkQzMjREQjYwNzIyQUUzQzMyNEU2MzRGNUVDNzY2RjQyOUFBODJGOUIzNzUxOUQzMDZDOUE5QjE3MUIzRkUwMTBCRkY2RkUyNDhFNzc2NDIxLCAxRUI5RDFCMzQxMjBDQTdBNzVGNDQyMkE3RkY2NDlERTRBOTA1M0NDNTQ5Njg4RTA2RjlDOUYxNjAxRjI3N0JEOEVGOTI3QkNDNTI1MDQyOTYxMkVFNzU0Rjk1RTc5RUJFODlEODg2RjIwQTYzOTAyMjE2OEFENDdDRjhFNkM1QjFBOQorMzVCODUyODVBOUM5NzcyQkU3OENEOERFQThCQTgxNjBGQkIzN0YwNTEzODcyQjUzRkU5RkUwQzBBMURBRjVEOUZCMzc4RTgzQzA4M0FBMEZCLCBFOEIzMkNCNDk5RUNCM0UwMURBRTI4MUY5NzM2ODgwMkU3MzRCNTRBNERENjIxOTdENzEzMzg2QUNDQzBEMjY4QUE2RkIwRjRCMDRBMTdFNzU3MUZERUJEN0I4MkQ5QUFFMTc5QjYwMkIwMDIzMDRDMEM5NkI1MDFBNjAxQjQwMTA2LCAxODU0MjhGMUJENzk1QzVDMTFGQjQ1QjlFQjY5RTJEMTJCQjdGMkY0NjA4QkVFRjRDNkE5MzE3OTExQjBCOEI1NzQwQkJENTRCRjg5OTgxMkFCMzhFQjZFRDMzQTc5MjhBRTZCOUFDNDlGREUzNEMzMDA5MjgxRDZDNjIwMTQ1OTZDMQorQTEyOEY3OTBGRDVDNjU4M0I2QTY4QTlCRkEyRjg0MjJGMzFBN0QwRjNBOTU4MUZCRkJERkEyNDFFNTkwRTE4REYxQTZBQjhCNDE4QUZFMkYxLCAyODMyOEIwQ0I4OEY1NDgxMEE1MzU3NUNDNDNDMEM4MTk1QzBFQ0VEMjRCNEM0NjY4RTZDNDNBNkYxQzQyRkI2RkFBOEQyQTlERkUwOTBGMTM1QjNGQTRGRDgwMjA4QTAzQ0VCOEY1REZCQkI0MTIwNDU5MEE2NzBGMjUwRjgwQTVBLCAxRTY0NkExM0UyNEZEMEVEMjYxNjZBQUNGMDcwQTkxM0IwNjUwMkFDQzlGNEJFQUVCRTFDMUVDNDM0N0ZGMEI1NkEzQkY5N0ExMUM1NUMxRUY4MkNDMjk4QzM5M0Q4MzZDOTI5QTQzQTZFNjA1QkI0Q0ExRTcyREQ0RDAyRDUwMjgyRQorMUUzN0FFNkIyRjgxNTMwOEIyM0YzOUZEM0VFOEU4QzY4RDk0Rjc3MkRBRkMwODVGM0YzOUVFNkM1QjBCMkE0QTlENEY0MDJBMUM0QTBGQThEMywgQTAxQzU0QzkzMTREMjJERTY4RTZGOTAwNDZGOENCNEVCNEUwNkQ5RjU3MjA5RDNCRDZGMUUwNDNBRUU5QTE0MDU2QjlGRUQ3NTNERDFCMDU0RTgxMDRDMDYwNjM3RjhGRkIyMkJGRkZFNzdDODQxN0IxOTc3QUUzQkZGREE4QjBFRSwgMUREQ0E4ODBDN0FBNDQ1RjFCMTU0Mjc3RTlFRkRGNDZFNjVFMUJENjBENDk4NzVBRkNERkNBMTA0MUM1RDc5RjE1QjgyNUIyRjc3Nzg3RDBBMzg1MThCQTgwMDE3MjE1Q0YzQTVBNzdGMEE3M0U0RTk5RkM4RTVDQUIzRkE0MTczMjUKKzVBQTcwQjQxOEU4M0Y5MUExNkJEQURGN0JDQkFCQTUzQThCRUU2NTg5MEY0MTkxREJEQURDQjQ1MTEyMTdFREZEN0VEQzA3RTU0REUyRUZBNzksIDEzNjlFMDgxNTE3MEQzNzNEMzdGMzI4OEJCQ0ZEQUUyOERBNTJGQjEzMEZGQTcxMTU3RTQ3MkEwNUU3NUU5RTk0NUU4RTA0MjIwQjNBNTc4RUVBMjgzODY2MTFDNjNBQjUyOTY3ODQxRjEwMjk4NUNEQjQwQTU3NzJGMDkxNzIxOTc5LCBCMTNBNzgxNDdCMTQyREMzMjU4Nzk5OTJGODUzOTgwNEFGNDY3NEIwRkRENjNCOTNFOTQ1RTlFNTRDMDAwODM4RTc2NDI5NDQxRjBFOEEwRjQ5N0I5RURBOEJBRTI4NDM3QjQ2MDA0OTBBODhDN0RBQTZEMTBDMTEyNUIwOTkyQTQ4CisxMEZGNTIxQzRBQjhCRUI0RTQ0MzkwOUU3MzYzMDJFRkFGQTNDQjMwOUIyREM0QjU5MzkwOTYxQ0YzMzY0N0M5Rjg3Qzk0MTdBRkU5QThDRUY2QiwgMzZEQTU5NjNFOTk5MTBBMUE2OEIxMjczOThEM0ZGQUUzNEVBN0NGQkEzRURFNzBFMTIxNDZGRDRCRjhDMTcwMUZERDFDMzhDQTlGNzNBRUQxRjYwMjNENUMwQTBCMkIyQjA1MTU5NDY0Q0EyMkU4MkFBRTQ5NTBFNDZDNzc1NDExNywgMUM3RDkwQkM0QTVBMkE1NjhFODlFMkQwMEFGRjBBQjBEMTY2NTgxQTcyNzg2MzgwQzVBNzNGRTE5NkI0QjU0ODcyODE2ODFGQTg4M0YyMUJCNkMxNDc1M0U2OTZBRDU2Q0Y5RUREMTkyQjFERkRCNkZCOTkzM0RFQjE5Rjc0NTI5RjgKKzMyRkRGNjU0RTAyQTNDMUVBQ0NBQjFEQjVBMjkwOENGMEVFQjYxOTFEMTg5NEUyMEJBQjFDMjU2RDlBMkQ3NURFOTc1QkM0NzBGQkNGQTZDRTQxLCAxNkE4MTBEOTcxNTRFMTk4OUY4MzE5MzJFOTg3OTJBMzE2NkU2MzgyQ0VDNkI1MjgzRURDRjFEQjM0QTE0OTkyMTVCM0QxMTQwMUIwRDQzQ0VGNEQxRjNGRjk1QUQ0MkI0RDgxNzdEMjkyRUMyODg1NjRGREZDRjRCMjMxQzA5MzlGRiwgMTYwQUQzRjBCRDI3MzQ3MjMzMzcwRDcxMjAxRTMzNTZFMzdEODc3MEM0MEM1NkNEOTlBRDY5OUQ1QzlBRDM4RkJEMjE2N0M4RUQyODhBNDRGMDg5NjNGREEyODIwRERBNjVDMzY1MTNGRTVDNDI0MDk1NDJFNDgwMkU0QkU1QjVCRkEKKzk4RjlFMkZFQTA3RUI0NUMwNjYwMTU5MjBFN0IxQTZEMkNDMjI0QjU3NDlCRUE2MjMwMTU0NzA0OENFODg2MTlCQzYxMzRENTJGMzZFRjQ2QUMzLCAxODA3QTA5MzYzRTYzNTMzRUNDQjBFQ0YxODA5NTlFN0FEQTY0QzZDMEExMDQ4RDdBQjgxREVFMzgzQzg0NjZGOEY4QTFBNTA5OEVFNUNENjI3NzgwNjQxMjk0N0RBRDI2ODZBN0ZFQkU5MzA2NkQwMkFEQzRBRTZFMEU0NzU4Qzg4NCwgNTA0NDNEOEMzOTNBRjM5RUJDOTVCRDFGNzZGMjg4MjYwRkNBQjBCNUE0OTRBMDY0Q0FEMUY3QTJBQjFEMjczREREN0JENTIwQzFEN0I5MUQ2MjJGMkQ5RDVGQjc5QTQ2RkU1QjNDMDBBMTdDRDdERDhCNzUwQjA1RDUwMzQ0RjhGCisxQ0FFREE4RkJFMTdDMUQxNDEzMjA0MEI2MkI3MTRGNDc4NjQ2NkUyMDVERDNCRjI2OTAzRkQ1MERBNkI5OTI0RDM1MjM5RTdGOERBNENERDQwNDksIEFEODVFMzg5NTZDQ0MwRjNENDhEQ0QzRDQ2QUU1MURDQzVCRkU3Q0UyMUY3RkE5QzFDNzU3Nzk2QUU4MTc0Q0ZCQzBDRUU5QjE4OTRFNTJFQzgyNDNEMDEyREY2NDk1QzZDRkEwODY2NUY5QzkzMTM2MkVFRjA4OUNENEYwQzRDNDQsIDE0NjMzNjI4MkRBRjkxQjBBMjZFRTIwNTQ4Rjk3ODkxNURDNkE4NEMxMzYxRDAxOTU4N0E5OEEzOEJBNUQwOTg4RUZFNTYwMzFDNzFCQTRFNzRGMENBMDEyNjEzMjFEQzMyNDM5NDNEN0M5RDMyQURCNDU5MDlBOTM4REQzQThBMjQ4Cis1NjBDOEZBRjNBNDc0NTczQzM5NjBDMjIyODI1M0VERDY5MkQzNEE2MTE5N0IzRDczQjBCRjdGMjhGNDJDQjZFNzlGNkFEQjdFQThFRTY5N0MwREIsIDFFNjZENjg5NkY3MzAyREFBNTRDQ0VGMjE3MkMwMjY1REVBQjJCQTA4ODQ3QzI0NkE2MzFDRTY5MDdENUVBRDRDQTc4QzI5OUQ0MUIzNUM0RUE0NDc3RUFBQTc5QkU4RkJDRjlCNDFCMTc3NEY4QjFFRkI1NENEMjY4OUE4RDY1RDM5LCA2M0FGMEFDQTY4NTI5REE2N0U0RENFNDU2RjY2NzIxOEEzMkQxNUVDNEVFREM0RjY5NzZBRDg1NTQzREFCODE0NTlCMjg0NEE0NjNFMUVBMjM3OEMzRUU5ODFDNzVDMjE5RTBDQjVBRkM1RkVGN0YzNjhFQzMyQjFGMzVERjIyMDA3CisxMDIyNUFGMERBRUQ1RDA1QjRBQzIyNDY2Nzg2RkJDOTgzQjg3OURGMjM0QzcxQjg1QjEyM0U3RDdBREM4NjI0QjZERTQwOTI3QkZBQ0IzQzc0MjkxLCBGNUVDRjNBODc5Njg2NUVDMUEyMUM1NUQ3N0Q0NjdBNTY2NzQ4MTQ4NDJCQkFFMzJFRTBBMkQwREYwQzAyRUFDREFCMzQ1Nzk4QkE4NTNBQkVBQjEzQzAxN0I5OURBNUY3QkU0QzYyOTUwQjU1MjYzNTY1QzdGOTM4RDRFOEU2RUZCLCAzMUJCRDcxNTUyRDJBODVFQkQ2QzFDNEFFNjhGQTAzQzhCNUM0MzU4RjY1RDM5REJGRTVGNDA5NzU2MTFGRUQ3RTAwNjg0MzAyMjVDQ0ExMjU1QTFBMEYxOTBBODFBMDk3MjQzNTAxNjM1MTExQ0NBRkM2MkI5OENDNzQ1ODdDN0Q5CiszMDY3MTBEMjkwQzgxNzExMUUwNDY2RDMzNjk0RjM1QzhCMjk2RDlENjlFNTU1MjkxMTM2QkI3ODcwOTU5MjZFMjQ5QUMxQjc3M0YwNjFCNTVDN0IzLCAxRTk1ODgyNDg0NTg2MEI2REUyQzQ5RjYwREI1ODU5M0M3REUzRjNENDBEQjhDMjM5QkRBRUUzNUNCQTc3RTg2QkQ5Nzg1RDlGQzczODQ1NDM2NDg5OEVGNjgyOTA0RkJENjkyODRCNENBODU3OUY4MTlCNjA1QTAwRTkwRjBEMzk1MSwgQ0JGN0Y0RERDNjgwMUZBOTA3QTAzNDdERkY1NjJCMjE3NTU1REEwQ0Q4MTk0MDlEMUZDQTkyNDcwMjc5RTA2RkVGNTY1MTRFNDM0RDNFMEVBQzNGNEQ4MUI0Q0U3MTZBODlGMDYxQTlGRDk4NjYyNkVFN0E0RUE0MjRDREVFRjc3NworOTEzNTMyNzdCMjU4NDUzMzVBMEQzNDc5QTNCRURBMTVBMTdDNDhEODNEQUZGRjdCMzNBNDMyNjk1MUMwQjc0QTZERDA0NTI2NUJEMTI1MjAxNTcxOSwgMUQwODk0NjlBQkJGN0YxNzdFRTA4NkIyMEQ4RjRENTYwRjlEMkY2NUZFMzAxNTY4RkNBMEU5RkY4RENCRDk5RDU2QTE0M0Q4OTgwMTU2OTRBMjNGNzIwNDc0NEEzOTA1M0NFRkFCQTA0QUYzRkUwNzEzQzg1OTlFRDQyMjQwOUMzQzAsIEZBMEI5NkE1NjM4RTgyN0E3M0REMzBGNTg1QkYxRjVCRjIwMjlDOTM5RTAwM0NFQjRFMjdDRURDRDI0NDIwQUZFNEI3ODY4QjkxQjAxMjdFNTM0RTlFNDYzNjZFQUI2RDE0MkI5Q0I3ODkwRTA0NzBGMTRGMEYzNEJDNkNBOTg3RUUKKzFCMzlGOTc2NzE3MDhDRjlBMEUyNzlENkNFQjNDOEU0MEU0NzREQTg4QjkwRkZFNzE5QUVDOTczQkY1NDIyNURGNDk3MENGNzMxMzczNkY2MDQwNTRCLCA3MTEzMDE1QzI2QkYxQkFFMDNCNjlGNDA1NzczNjM4OURBNTQ2N0IyREE5NTVDQzU4NTE4RTg1M0Y5M0FCNDU4MUE4QjMwQTAxRTI1OTdDRDQ0MjVEQTlFQkJBQ0Q3NjNFQjQxQjdBNEM5NjFFQjZGMjZBMDcyMDJGMEM5QTIzQTc5LCBCNEVGNTc1N0JDNTM0RDI3Qzc2QTdCQTg1NjNDRDY2RUNGMUU4RDQyRDFGNUVCNzc1MTJFOERBNEE2MkM2ODEyODM4OUEzRjYxQzREQjhFQzQyNDFGQzE3N0JFRDUzODIyNkE4MjVBMjU4MjU5MUQ2OTIxOEVDQ0U0N0I4REY3MjQwCis1MUFERUM2MzU0NTFBNkVDRTJBNzZEODQ2QzFCNUFBQzJBRDVFOEY5QTJCMkZGQjU0RDBDNUM1QjNERkM2NzE5RERDNTI2RTU5M0E1QTRFMjBDMEZFMSwgMTI3NEIwMzQzRjY3QTk5ODRFMTZGRDBFRTgwNzQzMDU2MjE0MzEwNzk2RjM0RDM5NzZBNkE4RDQzQ0IwMjBCNjVDM0Q4OERDRjU4QjZDM0I3Qzc1QTRGNzExMkRDMjFCM0NFQTRCRTJBODBEMDk5QzMwQzQ0RjNFMkY1MDREMzYxOUMsIEVFQzQzRTJFNTIzNTc3REQ1NUNBMzk2RTc0QjJDNkM2Q0NFRjZDRDU2NUQ1NzE4NDcxQTBGNzNGMkY3NEExNTI1NDVGMzM2NjgyRkRBQjNEQTA1OTlERDUyRTQ2QUYyQTMzRjdDNUZCNDY2QUZBQUZDQUE1OTE4Qjc2NTFBOUE2NzMKK0Y1MDlDNTI5RkNGNEY0QzZBN0Y2NDg4RDQ0NTIxMDA0ODA4MUJBRUNFODE4RkYxRkU3MjUxNTExQjlGNTM1NEQ5OTRGNzRCMEJBRjBFRUE2MjQyRkEzLCAxMkU4N0E1ODQ5NkMwOEFDREU2ODFBMzcxQTAwMjkzMkY5NkVBRDVCRTBEQzgzQ0Q3NTZDMEMwRkJCNjlDQzVDQ0IyN0EwMjU2Rjc4NzUxQzlERUMyOTZCRDlBQzIxNjExMEFCRTJEMzZGRjVDNkMwRTcxOTY0NkNEOUJDOTg0OENBQiwgMTNENTEwODNFMzM0NjZEQUE3NENFOTBDNDIwMTM2NzNCNTY3QTE1OTREQkUxODlFQjU4NEI2N0U5RUIwMkE5NTc0QUVBN0M5QUZCMzA1MzlCMkQ4MkEyNUIwQTEwQkNGODZDREU1QURBMEYyOUZDODYxQzE1ODJBRUY4OTcwMjE0NzUKKzJERjFENEY3REY2REVERTUzRjdFMkQ5QTdDQ0Y2MzAwRDgxODUzMEM2Qjg0QUZENUZCNTZGM0YzNTJEREY5RkU4Q0JFRTVFMTIzMEQyQ0JGMjZDOEVFOSwgMUFBNzA1MzJGQThCMjkxMUQzNDc0OUU2NkRBMUJCNTE1MUM4N0IxNDExODIwQjg0NzQ2REE1RDk1NTE5ODc4NDgzNDFEODYxREFFOTNGRkUzRkZCOUEyMTNEOTI4Q0UwMjA5MkMwQkNDRDAwRkFGMTZEMjJBOEUwMkM4MzU4NzUyRDgsIDFBQjRBMUIzRTY0OEE4RTM2MjAxMzZGRjc0NDU4MjY2MDBFOTQ1MDZGMDlBREU2QjI1MzUxNUY4OTI4QzJDQTk5N0ExQTY2NTMyNDA4Mjg5MTM4OEZGMDQ2QzkyRTVBMzNCNkYzNEEyODlCRTFEMUQyREREMzJDOTg3NzI4N0ZGQjU3Cis4OUQ1N0VFNzlFNDlDOUFGQkU3QTg4Q0Y3NjZFMjkwMjg4NDhGOTI1NDI4RTBGODFGMjA0REJEOUY4OTlFREZCQTYzQ0IxQTM2OTI3ODYzRDc0NUFDQkIsIDFGRjQ2Mjg4QTMwMTUyREE2MzA5MDgxREMxQkJBMTE2MjRGRUM5MDJBNUE5NTlBQkIzQTQ2QzAzRkM0NDVERTFCQTZBNzFDMzM4MENBMjFENzU3QTFDMDdBRkVDMDNBRDIzQzBGNTE1RjFFOUFGNDMwMzlBRjg2QjAxMTVGMTNFRTZBLCAxMTY2NjBGNzU0RENDMUFGQUQyOTY3OUExNkQ1MEYzNUMzN0I2MDQyNEUyOUExNUQ2NEY0QzE4MUE1QTM4MDg2NDczRUVDQzlEMDUyRTVGODdGMzU0OTJFMDU0NzYyRUM4MEE1MTg5MkYxQTNEOEFDOTYzQkI4MDE5MzZBREY5RTAzMgorMTlEODA3Q0I2REFERDVEMEYzQjZGOUE2RTYzNEE3QjA3OThEQUVCNkZDN0FBMkU4NUQ2MEU5MzhERTlDREM5RjJGMkI2MTRFQTNCNzY5MkI4NUQxMDYzMSwgRTJFMjY1OUQxODMxMzc2MjlDRTMzOTgxNTk4MzkxMjcwNTg2MkQxMTI0MTlCNUNEM0ZDNEVBNTFDOTU0NEE5MEJEMUU1ODg4MDE5MTNGMTJCREQzMEFGMzE1NEUxMTZEOUNDQjVGNzQ1MDM1RkI0QUQ4OUNGQTkzRkU0QTI1RUEzOCwgMTQ4Qjg1RjcxNkVCNzFFRjhFNEQ2OThBNDEwNzNGQUVGMzA4MzJBRkE4MEEzNkEzMkQ0MEExRjFCMkI1RDI2NjMxODdDODBFRTVBMDFEQTk1RDg4MjA3RDZERTZBRDg0QjUwQ0JGQzREM0NBRTY1QzlCN0M3NzFGMzE5MzQ2OEQzMjYKKzREODgxNzYyNDkwOTgxNzJEQjI0RUNGNEIyOURGNzExNkNBOTBDMjRGNTZGRThCOTE4MjJCQkFBOUJENjk1REQ4RDgyMjNFQkVCMjYzQjgyOTE3MzEyOTMsIEZCQzIyNkY4NkQ1OTJCRDI5MTQyQ0M4MzE3RDVCM0FCRTI5NDQ5QjY3N0NCMUI4MkFDNjIyMDM5REQ4OURCRTFBRkNBODg0RTQyQ0IzRTA3QjJFQTgxMTVDQUEwMzA0RTYwREI2MjZDRkFDNjE5NDcxQjc1MEVGRjYyQTQ3MjZFN0QsIERGRTNDNDVCMDk2NDIwMjZDNkRDMDg2M0Y2RjUwMkE2OThENzE4OEU2ODE3MEZCNzlBNDYwMjNCMkM5ODZDMjQ1RjI0NkZDMEQ1M0VDNDQwOUE4MUIyNjk3OTg2NkI5QUJCRDREMjA4M0YyM0I2MjgyNjBCOTNCQjkxNEZBODM0NUEKK0U4OTg0NjI2REIxQzg0NTg5MTZFQzZERTE3RDlFNTM0NDVGQjI0NkVFMDRGQkEyQjQ4NjgzMkZGRDM4M0MxOThBODg2NkJDM0MxNzJCMjg3QjQ1OTM3QjksIDdGOTUzOEFGQjE1REQzMUEwQjdFQUNDNjkxMkNDNzZGRTgxMTBGRDI4QTkwMEVFQjBBQTI5MTBFRkI2OTNFMjEyNDUyMEFBN0RDQ0E2NDFERjFENzhEOTEwOTFGOTAxQzc1OUM5MzI4ODQyNDVEQkM2Q0U2QTI4RDU5MzQ1MTU2OTEsIDNBOURFQkNFMjAyMDMxQzI1MEUwNzlFMjI2OUNDRTBFOUU3QTFFMzU5RTE0RjNBN0Y4RDU0QjVBOEE2NUU0NTJGNEE3QUNERDQ0ODg0OUYyNjdDNTM1RjlDNERCNUREQ0U0NkE1QjdGODEyMEY2MzkzODc0MTVBNEMxNUNBNTAwNTgKKzJCOUM4RDI3NDkxNTU4RDA5QjQ0QzU0OUE0NzhEQUY5Q0QxRjE2RDRDQTBFRjJFODFEOTM4OThGRjdBOEI0NEM5Rjk5MzQzNEI0NDU4MTc5NzFEMEJBNzJCLCAxRTVGRDVDOUM3NUNBMEMyRDNDNDNBREM4Q0Q1QzNGRDYyQUY4MDJDQjYxOTUzMzE1RTlENEExQjhDMTk1QTYyRjVDMkY4Q0RGQjI4M0QwQjBERjdGMTFCNDhCMTM4RUYwQUY3RkIwRUVGMDRFNTIxRDY0M0JDRTI2QkY2RTI3OUU0NCwgMTc5NjdCMEZBQzA4NUVFNUQyMEZDQjBCMjcwOUI1QzI0OEYyNEI2NTMwNkJBODYwQjU0MTVBNzJENDQwOEM4QTJBN0VERjg1QkNEMzZFNjVGODVCNTQ1NjU3Qjk0QUEyMDlFRTk5NEZDQTBEOEZBMjU4NUY1OEMzMkYxMzNERjAyQzYKKzgyRDVBNzc1REI0MDBBNzFEMUNFNEZEQ0VENkE5MEVENjc1RDQ0N0U1RTJDRDhCODU4QkE5Q0FGRTZGQTFDRTVERUNCOUM5RTFDRDA4NDZDNTU3MjJGNTgxLCAxQkM2OTA0QkExNjk3OEQ5MDExOEJGNzg0N0I1NjFDQ0VBQkRFRkY3NjY0OUJGMUREN0M3QkZDNDg2NkJBMzg5MEYzNkEwNDM2NDc1REFFQjQ4MDM2RTEwQkU1NzBBNkYzNjQyQkY2OTEyNEM0NzI1MUFGODlBOTI3OENDNkU1NkFBMiwgMTYxNDg4NEZCNThCNzc2NUVGQjBBNjY2QUY0RDAzRkQ1Mjk0MEJEQjAwMjBBRThCOTRBQTM2QjQ5NDJDQjQ3MDlGMTI2NERCRTBBNUFEMEJFNTNGNTdGODI3MEZBNDQzRDRCQjQ0RDU1MzRCQTIwMUQ0NzA0QzEyRUNERDAwOERDQUYKKzE4ODgwRjY2MTkxQzAxRjU1NzU2QUVGOTZDODNGQjJDODM2MTdDRDdCMUE4NjhBMjkwQTJGRDYwRkI0RUU1NkIxOUM2MkQ1REE1NjcxOEQ0NTAwNTY4RTA4MywgOUIxRDRDNkQ3RjQxOEQwNEYwOUFDMTdDNjEyMjc2QkUwRDAzMzQxRUM4MzhGMDQ4Q0VFOUEyQUJCNzNFQzU0ODE1Qzk5RTIwQzUxRkU3REI0N0Y4Q0YyQTI4MkRCNDRBQjE0QTFGRTkyMDQxM0Y2MDQ0OTk2NEI3NDJGOEIwMkMzRiwgREYyNEZCOEZDRjEzQjM1REZDRDY3NkVCRkFFRTNFOEQ2RENEOUMzNjIzQTk0NjVCRUE5NkFEQTU3RTRCNDFBRjMxQkUwNEFCRDgyNDAwQURDMUU0MTlDRjFBNDNBRUM5QzAyNDcwMzcxMDY2MEJGM0EwRUQwOTZBQjg4QTRGNThBRQorNDk5ODJFMzI0QjU0MDVFMDA2MDQwQ0VDNDU4QkYxODU4QTI0NzY4NzE0RjkzOUU3QjFFOEY4MjJGMUVDQjA0MTRENTI4ODE4RjAzNTRBN0NGMDEwM0FBMTg5LCBEQUU0RDlGMTA3Q0MxMTgyM0RGRTgyOTNBMUZCNjlFQ0JCOUU5NDZFQ0I5NzM4NEM0NDRCNjM0QzM5RkMwMjA3NERBN0JFMDREN0ZDNUI2OEY3M0JFNzU0REMzQjMyQ0RGRkE4MkU5RTFENkEzQUVDREE0Njk5RDBDQjkzRjdGOUJFLCAxNjg0MUFDRjAyRTcxRDc0QjIwMzZCNkYxQjFBOUUwNjBCRjMwRTBGM0ZCREU2QzYxMDBEMjEwNDA2MzNDRTdEQzg5NEQ3RkJEQzc4NTQ5ODE1NUFCOEU4NDU4MjM5NERBQzAzNDEzMzlDMURGQzAwNzhGMzE2Rjk2MjQyODVERDJEOAorRENDODhBOTZFMUZDMTFBMDEyMEMyNkM0RDBBM0Q0OTA5RTZENjM5NTNFRUJBREI3MTVCQUU4NjhENUM2MTBDM0U3Rjc5ODRBRDA5RkRGNzZEMDMwQUZFNDlCLCAxNjExMDdEMDM2NEQwNENFRkE5RUMwNENBNjFFMjZFRDI4Njk4QjhGOTBDNTg4NDAwMzM2OUM4NDVBMkFGOTIzOTZDMTUwMUE1NkE2MDBCODE4RTY4OEFBOUI5MTNFOTA0MDJERDJDMTFBNjk5NjQwQ0E1QjI3OTYxMDAzQ0FGNUM1QywgQ0FFNDMzNURDQTc4RUNDMDgwQzZENjI1MUU1MjVFN0VBNkYyOUFGOUQ1MjIwRTkxMDA0MTNBRUVFNTkyQzRDMzg2MjJGOTAyRDVEMjlCMUE4Rjk2QkE0MUUwMDRFQTlGMzUyMERGMTYzMzJBNDhDNTM0NUU2MDBFRDFFREFFMTc4QQorMjk2NTk5RkM0QTVGNDM0RTAzNjI0NzQ0RTcxRUI3REIxREI0ODJBQkZCQ0MzMDkyNTQxMzBCOTNBODE1MjMyNEJCN0U2QzhFMDcxREY5RTY0NzA5MjBGQUREMSwgMUQ2MUNDQUFCOUI5QTE5ODZDRkQ4MEIyNUM1OEI1QkYxNzM0OUFFNkU2QUI0ODdEMUNFMDBDNDQ1RTg5NTY4QzE1ODRBRDM0MkU0MEY5NUQzOUU0NTAwODQ5OUY1MjUyMThEN0YzRjM4NkM4QTM4MTg0NzVDNEQ0RDI2MEM5Q0JGNEIsIEQ5MDUyQUY1RTgxOTRCQzhBMTNFRkEwNzk3RkQ0RjE1ODVCNEY3OUQ5N0VFMjYxRkVCRUVDNjhDMTVCMEI2RTgwNzgwMDQ4MzY5NEE1QUNCQjE5OTMxODRFNzc0MUQ3ODk1NjU1NTUxMEMxQ0NGRTI4NUY3QzNGQkVCMUREMjU1MjAKKzdDMzBDREY0REYxREM5RUEwQTI2RDVDRUI1NUMyNzkxNTkxRDg4MDNGMzY0OTFCNkZDMzkyMkJBRjgzRjY5NkUzMjdCNDVBQTE1NTlFREIyRDUxQjYyRjA5NzMsIDE1MTZCNEI4QTYzOEEyMTZDQ0YzRkRBNzg5RjI2NUUwNzEwQzVBQzVDQzdDQTlBREJDOEMyMTk5MkE3RUQ2RDBCRDI4MjA1NkU5OUJEMkZCOTIwRURCNUQ2RUJDNEFBMTU5NEMyRDQ5QjdGMTZCQzQ4ODRGMTIwNDU2QkQ0NzhDMUE5LCA5N0E4NDVCMDNDMTk1RUFGNzRCREFDOEVEOTgwOEE0NjU1RDdCMTQxMDIzNTk5QkFBQUY0RkI5RjRGMzM4Mzg3NUQxMkJBRTc1NTIxOUI3RDE4NDBBODhBMDk5NDIyMkExRDM2QUI5MjlCOUIxMkFCM0Y4MjVFNzY2NTIwMEExQUY1CisxNzQ5MjY5REU5RDU5NURCRTFFNzQ4MTZDMjAxNDc2QjQwQjU4OTgwQkRBMkRCNTI0RjRBQjY4MzBFOEJFM0M0QTk3NzFEMEZFNDAwREM5MTg3RjUyMjhEMUM1OSwgQUEwNjY1NUVBN0JBQTJGREMyMTkxOEQ1NTAyN0ZDQjFDQjcwMkRDMzBENDEwNzAzQkNFOTUyNzIzNzFBMTM4Qzk1QkQxM0U2M0FBMUY1Q0JERjNFRTE4NDU3RUY1MjZEQjczMzA2N0JERTlGOTI2QkU2RTAxMUEzMkYwRDc2NjMxNiwgMTQxNTNCMEY4QjZDNEFENENFQzIxNkMyOEVFNThCQTIwMDNCMzA5MkNFOTg5OTVGRTRGM0Q5MEIwODE0RjcxRTJFMDI3NjIxMDA3RUJDNTY3MTI3Q0MyMERCQzAxQkJGQzg4QkIyM0ZBNjVFM0I1RDdFNjJGRDIxRUUwNDFBRDNENzcKKzQ1REI3M0Q5QkQ4MEMxOTNBNUI1RDg0NDQ2MDNENjQxQzIyMDlDODIzOEU4OTFGNkVERTAyMzg5MkJBM0FCNERGQzY1NTcyRkFDMDI5NUI0OTdERjY3QTc1NTBCLCBGQjMzNjkxRjM3MEFEMzA1ODE5MEY5MkJBN0YwNkQyODRGQjhEQjVCMTVGRTkwRUVFREZGQTdCMURBNzA2QUQ0RUY3RUNEODY0QjYyNDk0ODBFOEQ5MUZBQkY3NzBBQUJGMzZEQkUyNkI1Mjc5MURDMTY0RUNDRkU4NjQ3REQ2MDE2LCBBNTAxQkI0QTg4OEUyODlGQzRFRkE3RjBDNDA4Q0EwMzM2NzI1ODI5RDVGQzg3NTE0M0Q0RTMxODREN0MyQ0FCQkE1NTg2NzEwQUY3MDJCMkI0NUZDMTk4M0JERDlDMzAwRUE4NkNEQTIyM0I3QTU5REI4RkJCMzc3M0E2MjM1ODNFCitEMTkyNUI4RDM4ODI0NEJBRjEyMTg4Q0NEMjBCODJDNTQ2NjFENTg2QUFCOUI1RTRDOUEwNkE5QjgyRUIwMUU5RjUzMDA1OEYwNDA3QzExREM3OUUzNkY1RkYyMSwgNUVFQzFBNjI4QTUwOENBN0E1NDlFNzdBRTY4Mzg0MkZDMzZEN0FGMDM4NEY1NEM2MTBBMzMzNEU3RkYzQUQ5NDMxQkNCNDUxNjU2REE5MzJEQTIzMEZDRUVEMjYwOTVBMEM3QkFCMTlGNUQyOENGRjQ1Q0YwQzVFMEExRTc1MTE3MywgNzM0Mjc5NTMwQjFBNTBCRDg0QjBEMEY4REE5ODgwMEYyQTk3MjgzMzMyNTRGMjlCOTkyMzJGREEwRDZCMEM1NkJBOTZENUE4NEUzMkU1QjA3MDRBMDZENjAwRDZBNDBEQjBCODNDQTFDNkQwMUM3QTI5QkExNDUyNjkxMzZFMDU1MworMjc0QjcxMkE3QTk4NkNFMzBEMzY0OUE2Njc2MjI4ODRGRDMyNTgwOTQwMDJEMjFBRTVDRTEzRkQyODhDMTA1QkRERjkwMTBBRDBDMTc0MzU5NTZEQUE0RTFGRDYzLCAxQjE5REY2Qzk1QkRBNjJGQ0IzODZBNzY0ODc1NDQ5NjVBNDU0Mjk0M0U3QkRENDk0NURBNTlFODk3QURFQzBGQUVCNUMyOTgzNjFFN0Q5NzE0NEY4OTBDOEY2Q0I0RUQ1RDEzOUUwRjJCQUUyMDFBNjg1OUQ1OURFMDgwMEY2QTdCRSwgMTg4NzhDNjc5REUyRkM2RkYzMDVBM0I2MUIzREJFNjA4QTIxQ0QwMTA5QTdFNEE5QTZBOEM1MTZDRjM5M0YyQjVGOTBDQ0RFMTAwQTA3RTlFODNBMUFCM0UxQjE4RTNBRjdENTMzRjUwRUVGRTI1OTEwRjhEQUFGQzEyMjczRjEyRjMKKzc1RTI1MzdGNkZDOTQ2QTkyN0EyRENGMzM2MjY3OThFRjc5NzA4MUJDMDA4NzY1MEIxNkEzQkY3NzlBNDMxMTM5OUVCMDMyMDcyNDQ1Q0EwQzA0OEZFRUE1RjgyOSwgMTc1Q0YzRDBFMUJCREE2M0Q4RTUzM0Y5NzhENEI2RDBFRjZFRjI5MjQzM0VDQjcxODYyMTZEMTVGNEQ1NkNERTZCMkNEOTQ5QTU4MzIzRTcxMzBGOUU3MkExN0M4OUNENThEMzJBM0FCNTFFMkE5RTIwN0RFQkFBQjg1MzI0RTMzRDUsIDEzQTA3NTQwODIyMDUxMjdDNEZENjU5NzYwNjVCOTA0NDM2RUUwNzMxQkVCNzRERDAyMjkyNDMxMzQ5QkZFOTUzQjhEQ0FFOUEyOUFEOTI0RjQ3MDZFNjM3MkY2RTMwQTFBNjk1MTQyODE1QUI2RUYzRDM0MjA4RkM4QjY3RDNFMkI1CisxNjFBNkZBN0U0RjVCRDNGQjc2RTg5NkQ5QTI3MzZDQUNFNkM1MTg1MzQwMTk2MkYyMTQzRUIzRTY2Q0VDOTMzQUNEQzEwOTYxNTZDRDE1RTI0MERBRkNCRjFFODdCLCAxMzk2QjhGQ0MwQjE3NDM1RTY3RkY0NzEwNTI4MkUzMDkwQThERTNBNzVGNDNFQkVDOTkwNDFDRjk0RDY2NzlBQ0IyMTVEODRFN0YzMEU1Q0U4QjkwNTQ4Q0RGQUY1OTg2NDc1MDI0MzRDOTA5RjEzQkJCQTdDRUI4MjRFOTZCODkzRSwgNzU1MUNCQ0Y0MDRDRDQxNkNGODYxMTI1MTFDOTdCOTBDOEFFMTFCOUMzODE1NkRDMDE4RkY4Rjk3Q0YwQTU4NEZGRjNBODkzQjFBN0VCQ0JERkJCQTdGMjU5NzVEMTg4NkNCNDM1RDY3MTY0NUIzNDRDODBFQzU1MjY4OTgwRDNERgorNDI0RjRFRjdBRUUxMzdCRjI2NEI5QzQ4Q0U3NUE0NjA2QjQ0RjQ4RjlDMDRDMjhENjNDQkMxQkIzNDZDNUI5QjA2OTQzMUMyNDA0Njc0MUE2QzI5MEY2M0Q1Qjk3MSwgNjU4RDIxQjA0QkI3QzU3NDYxQzg4NDM0QTI1RDQ1RTAzNDJFRjYwQjI5Nzg0QzZEODlCQUVBMzJDRUU5N0U4NTFDMTQyRThDNUZCQzVDMERFODZDQTUzQjQwMjUyMUI3RjY4RUY0MkQyQTlBN0ZBNTlFQ0IyMjQ4REU5RkM2QTZDQSwgNzc0ODAyMjFGOURFOTgxRTNGODY4NzFEQUE0RDZCODA5MzFGNTA1RkRFN0ZBM0VBQjQ5OUExNUY2MTU5Q0FDRDNDQ0VBQTE4RjhFNTk1Q0Y1NUMxNUJCQTU0RjVFOUZCQkNDRUQ1OTM3QjBBNDkzNUQ4NzYzNUM2QkE5RkEyQTI4QworQzZFREVDRTcwQ0EzQTczRDcyRTJENERBNkI2MEVEMjE0MUNFRERBRUQ0MEU0N0E4MkI2MzQ1MzE5RDQ1MTJEMTEzQkM5NTQ2QzBEMzVDNEY0NDdCMkUyQjgxMkM1MywgMTIxOTgwQzJDMzdCRURDRTMzMjY2NzdGRjM1Qzc3MUFFNzZCRTIyOUI0M0EwMUIzQzNGNUQwQzYzQzVFOENEREZBMEQ1N0U1NDQyNkZEMjk4NTQzRjU1QUJBMTdGNDA4QkYyNTg5NzA0QTI0RjgxMzc3QjE0OEY5MkM5QUEyMTE5OUIsIEMwNUQyQjM1OTgwMURCQzM3NjUxNjQ5QjUxMkYwQjNDMzUxNTY5RUNEQkU4MERFOUQzODYwRkU5RjJCQjM4QTdFODQ4NjU2MzRBQUVGRDJFQjk1QzJFMkZFQTIxMDI5OEUwQzA5QzUwQzYyNUQyQTJCQ0U2MUZEN0EzMjRDNkNCRDcKKzI1NEM5QzZCNTI1RUFGNUI4NThBODdFOEY0MjIyQzc2M0M1NkM5OTBDN0MyQUQ2Rjg4MjI5Q0Y5NEQ3Q0YzODczM0IzNUJGRDQ0MjdBMTRFRENENzE4QTgyODM4NEY5LCBFRDM3REFFMDNFRjRCMjgxM0QyRjNFODFFNjZGQzg3NTgyQ0MxQTVCNzAzMkU0RTVFNjMzMDZFMDc5NzUzQ0UyQUM1N0FCRDRENjFCREQ2QURCQTU0OTAyODE0NERDNTZGNjdCNkI2MzMwNEYzOEE2OTM0MTE5RkQ3OTgwMkMzNTNGLCAxRTgwNUNENTMwNjhEOTc5QjMxQTQzQ0JBQzdEMkQ2NDQ5MDU1QTYwODU1OThDQTgyN0ZFNEExMTc1NUQ4RTMyMEU1NzFGRDE5RjFBNzYxMjgxQUMwNkIyODQ3REQzNENCQ0UxMkYxQUJGRDVBMTc1NUFEN0MxNjcxNDJDMEJFMzZDNgorNkZFNUQ1NDFGNzFDMEUxMjkwOUY5N0JBREM2Njg1NjJCNTA0NUNCMjU3NDgwODRFOTg2N0Q2RUJFODc2REE5NTlCMUExM0Y3Q0M3NkUzRUM5Njg1NDlGODc4QThFRUIsIDFDNEMwRjU3MTY4RjIxRDlEMTNCMkZFMTAzMTVCMzVENjFBRkRDQ0Q4QjVDOTdBRTcxRDJFNDMwNUY3REQ5MUI4MUExQzAxNEQzNTI3ODA1NzE3NTkyQkQ3NUFENTgzMDg2NTZCMTFFRkU2NkNDMkExMzk0NjYzQkZBQ0JEQzE2MjIsIDFCNUVGMDg5N0IzNEFCMEEwMDA2MUI4RDY5RUJGNjVCM0IyNzVGMDkwNjg2MjczMzEwNDc1RDg0NDhGMkMxQ0E0OTQ3NUU3RkE0QkZBMDM0RDFGNDI5QTdDMkJCQzMxODgyQjk5NzlFMjNDN0IyMkY1OEExQjNGNDlDM0NFOTdFRTUyCisxNEZCMTdGQzVFNTU0MkEzN0IxREVDNzMwOTUzMzkwMjgxRjBEMTYxNzA1RDgxOEVCQzkzNzg0QzNCOTY0OEZDMEQxNEUzQkU3NjU2NEFCQzVDMzhGRERFOTY5RkFDQzEsIDExQzAwNjJFOTc3NkNFRDdCRkNGNkY0M0M5RTE1QjZDREYwMEU3NkU4Nzg0Mzc0QTQwNjI5NEM5NkZDMjIzRkIwQzBCMEU3OEQwODQxRUFFOTA2MDc3ODdEOTcyMTg1MTY3OEJENEFCNUEzNkI4NTFFNUEzQzNCM0U1M0RCMTFFQzM2LCBENkJFMzczOTQzMTIwN0IzMUI0QTc1Mjc2N0EzNTJFRTA2NkZERkQ0QzI2QjBCNjUwQURBQ0I2NTM1QjBGQTkwRkI0NTFFRjU3N0VBRjY4MUQzNjNGRjcyRDBDODJENUE0NkNDNEQwMkQ3RUM0RjQ0RUQ5N0M2MjVGMkUyRjMwMTE4CiszRUYxNDdGNTFBRkZDN0VBNzE1OUM1NTkxQkY5QUIwNzg1RDI3NDI0NTExODg0QUMzNUJBNjhFNEIyQzJEQUY0MjczRUFCM0I2MzAyRTAzNTE0QUFGOTlCQzNERjA2NDMsIDE3MURGQzhFREQ3OURBRTVBNjNENkI3OTQ5N0M3QjVFQjQzMjFDODc1MkYwRjc2NkI4OTk3QUI4RUYzQjBBQ0Y1QTcyRjIzNDRCQjczN0NEMkNCRTU2OTY5RDZDRTFBOUQ3MUUzQzlDNTNBNTE4QzYyNjMwOUQzQjlBRTBGOTJGM0FGLCAxODNCQTg3OEREMjkyQTIyNzFENzQ5RDEwNjM0NTU0NjYyMUM1QzI1Mzc2N0VBQzcyQ0EzRjAzNjdCNTBFMjVFQjkyMDFGMkE4QjM2MTYxNjAxMTVFQUU0NjE1NjI1QTU0NjQ2Njk0NTQwODg5RkJBMjYyQUQ2MEMzMTcxQzY5ODJCRQorQkNEM0Q3REY1MEZGNTdCRjU0MEQ1MDBCNTNFRDAxMTY5MTc3NUM2Q0YzNDk4RTA0QTEyRjNBQUUxODQ4OTBEQzc1QkMwMUIyMjkwOEEwOUYzRTAwRUNEMzRCOUQxMkM5LCBGMjA3RDM5MjcxNzI1OTMyQTU4MjE1NDY1MDE1NkQ2RDM4QkY5Rjg5NTY0MEQ1NUNCNjk2QzRENzg2QUE1M0FDRDdDMUREMzlFRTdCN0UwQzJFNDAxRTBBM0ZFNUZCM0JEMUM3ODE0NDlBNjM4RDU1RTQ5MTE0RENGNjgzN0JEMjhCLCAxNTk5RkQ3MDUxOTI1NkYxREU0QzU4QUVFQzNCNTFDODdBRjNEMTg2Mjg2Njc4NjMwOTE1QTM1NUVFMjM0NTgzQUY1M0REQjdGQzQyNzVFRDY2QzY4QUIzRkMyRkI5NDAzQzYwMTQyMTU1NkE2MTYyRjMzMzM0Q0E1MDI0OThDRDJCNAorMjM2N0I4NzlERjJGRTA3M0RGQzI3RjAyMUZCQzcwMzQzQjQ2NjE1NDZEOURDQUEwREUzOERCMDBBNDhEOUIyOTU2MTM0MDUxNjdCMTlFMUREQkEwMkM2NzlFMkQ3Mzg1QiwgRkNDMkU1RjQ3MTgzOUZEN0E0RTc4NjgzNEY2MUVGNjk1M0IxRjEzM0UwNDczMzA1QzQyQTQ3Rjc5MTAwODYzQUM4Q0VCMzUzNkZEQzI0Q0Y3MjA4RkE3NENEMTU5NjlBMkVERkMzMzIxRTE1QzQ2NzExNUExNDhERDVGMTczMUE3MiwgMUQyNEI3QzE1NjZEQzEwQkJFMjE2Njg3MkEzRDk2QjE4QTkzNDA4OUJDMzFFODczRDFDNEM3RkFBRTFENjBGQTQwMEVCQjU3QzJDMjBDRTU0RjlCNzZGMUMyMTkwNDY1RTVDMEI0MEZGMkJDNjFCQUNCRUExRDhDNkM0QjBFNzgwOEMKKzZBMzcyOTZEOUQ4RkExNUI5RjQ3N0QwNjVGMzU1MDlDQjFEMzIzRkQ0OEQ5NUZFMjlBQUE5MTAxRURBOEQxN0MwMjM5QzBGNDM3MTREQTU5OTJFMDg1MzZEQTg4NUE5MTEsIDNERjk2NUM0NTk0NkFENTM3QTg2RkMyQjE5OTQ0Q0JCMjRGOTBFQzY0ODk5Qjk4QjRBRTU5QkRCREQyRDNCRTJBQkFGQTYzMDBEOTE2REU4NTk2QzBBRDVENTM5MjEwRThCNTAxMzQ3MjAyMkQ1QjdBNTQzQjY1MkMyQjkxQzRGQUYsIEU5MEU0MjI0NzAyOUVDMUU5QUFENzRFQjM4QkVGMjI5NzFCNTMxQURDNkRDNjY1QTdDNDkyNzcyREVFNzUzNzIxODM2NzhFMEM3M0JDQ0I5NkU5MjVDQkFDMTlBMkJGRUE5RTQwNjEwQ0JGNTQ5OTE4OUNEQzAxNDY0MEY4NDlGRDEKKzEzRUE1N0M0OEQ4QUVFNDEyRERENjc3MTMxRDlGRjFENjE1Nzk2QkY3REE4QzFGQTdDRkZGQjMwNUM4RkE3NDc0MDZBRDQyRENBNTNFOEYwQ0I4QTE4RkE0OEY5OTBGQjMzLCBFQUM3MUIxM0MxMDA2QjAxNjNEQkZFNUJFRTA1RUUwMDVCNTY3OTRFNTA1MzY2NDI5QUUwMDAwMTM4NjM2RUYzOEM5RUU5RjM4NTgxMjUzOTg0NDgxQkQyODVBRTIxRjAyNDRFQUQ5QkU0OUI1NzYwMDFBMzYwOEJDQjlFNjFEMUMwLCBFODE1RUE4NjQxQTIwQjZFN0VBOTJBODJBM0Q1NUJEOUM0RkRGNjU0ODlDQjE0Qjc4MkQxMTkxM0UwRkMwQkQ1NDZFNUJFNUQ4QThFMDMzNEZGNzI1NUJGOTFEQTYxMUFERjE4MjQ1NUNBNjVFOUJEN0M3N0JCRUYwQUIzM0NCNjU4CiszQkJGMDc0REE4QTBDQUMzODk5ODM2NTM5NThERkQ1ODI0MDZDNDNFNzhGQTQ1RUY3NkZGRjE5MTE1QUVGNUQ1QzE0MDdDODk1RUZCQkFEMjYyOUU0QUVFREFFQ0IyRjE5OSwgMTM3QkZFMjgxQzM5QzFBODJCRkJCRjlFNEY4QjQxNDc3RDkxNkJGQkMzMDU0NUFEOTg2OEQzQTY1MEFFQ0ZFOUNFRDgxOEJBODdGRjA3RDQ5OTFFMjZGQ0Q0QTU0RTQ1OTRGOTFEMTYyMDhBQ0EyMTdFM0FDRDZFRkRCNDc3MDBEODgsIDU3OEEyODdBRTUwRUREQUE3RTg0NDlBQjVBMzQ1MEFFQkZGMEE1NDI2NDhFOUQ5OURFNzMzNjU3RjJDNDFEOUQ0M0Y4MkExMkFBRjcxQzYzOUQ1MzBCRjMwQUFDMTNGNDMwRkI2NEUxRjExQkY3MDA5ODJERTU0RDQ0MDk4NzkzNgorQjMzRDE1RThGOUUyNjA0QTlDQzhBMkZBQzBBOUY4MDg2QzE0NENCQjZBRUVEMUNFNjRGRkQ0QjM0MTBDRTE4MTQzQzE3NTlDMUNGMzMwNzcyN0RBRTBDQzkwQzYxOEQ0Q0IsIDE0QURGODRCN0IyNkMzQjc2Q0YwQ0NFRUZDQkMwOUEzQTkyODcwRjdFRTYwQzZGNjE2QTc5MEZFMkRDNjI3RUIyOEUwNkM1QjJGQzJFNjg5MDkyMkVGQjgzODMyMzdBNTg4NzAzNjAyMzFCQzVGQTJBNDg0ODlCNUFDNzZFQ0QxNTJCLCA4Q0RFQjhFQTgyQjA3N0QyQzg3RTNGNzEwOEE1RkMxM0UzRkJDOUZCODQ0MTNEOTlFMDNERThEQ0ZGQzY2NDcxNDMyNjZEQTIxRTU4MUM3MUM4REM2OEE3MDY3QjZFQUIxNUE0Mzk2QUNGMkExMjc5RjBCM0UzRTdCRTE2MjA2NjhCCisyMTlCNzQxQkFFREE3MjBERkQ2NTlFOEYwNDFGREU4MTk0NDNDRTYzMjQwQ0M3NTZCMkVGRjdFMTlDMzI2QTQ4M0NCNDQ2MEQ0NTZEOTkxNjU3NzkwQTI2NUIyNTI0QTdFNjEsIDExMDk1OTYwN0NFQ0FEMUMwRUVCMjYxRjAwNzI3NkE0QjUzMDY5M0VCNUIxRUUzQ0M2NzZCRDc0M0UwQjA2MkU4MEZBRkI1Q0Q1N0E2RkQwQTMzNjgzMDJCMzBERkVDM0MxNjBCOTQxQkNFQTIzNUZBRTlFMEM4Mzk1RTU1QTg1RjlBLCAxOTAzNzE2NEUzMkU1NkE1OERFMjMwNzkyQTVCM0E2N0FFRkU1NUE4MkY0QTdEMUNCRThDMUZCNzA2QjczNjdGQkQ1RDQ5QTg5RDM5REIyN0U4NTE2Nzk5M0U5RTVBOUI5NjIzRTIwRUU0NjNCNDlFM0QzMEMwNDhBRTEzQzI2OEYzMAorNjREMjVDNTMwQzhGNTYyOUY4MzBEQkFEMEM1RjlCODRCQ0NCNkIyOTZDMjY1NjA0MThDRkU3QTRENDk3M0VEOEI2MUNEMjI3RDA0OENCNDMwNjZCMUU3MzExNkY2REY3QjIzLCAxNkY3Q0EyOEI5OUEyRURGODRCNEJFODhCNzg2QjZCOUEwMDc0MEMyRUY3MUQxNjY3MDQ4QTgwMEU0QzA4Qzk2QjI3OEFGN0VGMTA3MTZCQzVFQkRFQTM2OTc1MzBDNEQzM0VERDYxREJGREEzMjJEQjNFODA1RkFFRDk1OTVDNjAzRSwgMTc3NkRCREQ0NDczNkYxNEY1OTY1QkE3RDM0OTQ5ODU3NzJENUJGRkVGRUY2QjA3MTA5RjZFRUI3MUVCMEJBQTcyODM2RjAyNzU4MTlGREFBOUY2RkRERUIzNEM3OTEzNzQyNkVBRTRDOEJDOURFQzM5MzhCRDQyMzc1N0UxMzI0M0YKKzEyRTc3MTRGOTI1QUUwMjdERTg5MjkzMDcyNTFFRDI4RTM2NjI0MTdDNDQ3MzAyMEM0QTZGQjZFRTdEQzVCQzhBMjI1Njc2Nzc3MERBNjFDOTEzNDE1QjU5MzQ0RTQ5RTcxNjksIDQ2MDkzNjE2Rjk4QkFGMkVCM0UxNzVEQzQ1OEVFM0M2OUU1QzZCOEI1Q0YxMzk4N0UzQTdBMEE5NDE1NTk2ODRGOTIyOURFMkE4RTlFQ0VERDgyRjI4OTdDMDNCRTMyQkNGMDg5OERFOUUzNDM3NDg5NDMxQkQ3QTEyM0MzOTJGOEYsIDU3MzgxQjg4QkZDRTBBNTU3RjczNUQ5NjY1QzVBQjI5REYxNjlGMjU0MjMxQkJCREUyRTE1NUI1MERBQkQ1MTk2QTlEREQxODNDQ0Q4MTc2QkY0QjlGQ0UwOUVCMDExQzVGQjMwMTQwQkQ3OUE3NDQwMDY0QzkwMzQxQzdDRDg5QTkKKzM4QjY1M0VFQjcxMEEwNzc5QjlCN0I5MTU2RjVDNzdBQUEzMjZDNDc0Q0Q1OTA2MjRERjRGMjRDQjc5NTEzNTlFNjcwMzYzNjY1MjhGMjU1QjM5QzQxMjBCOUNFQUREQjU0M0IsIDQyNkM4ODc1MDA2QUNERDgyNzFGNjM1RDZFM0E4ODJDMDgzNjkwNjM1QTZDOTU4OTMyNzIzNDQ3Q0IxMzU4RDg2RENFNENFNzA3QjZFNTBGNTQ3NkU3RTk5RDg0ODkxNzIzMUZCNTFDNzJCMjQyNUREQURBNDAxRTZBODM3ODUxNTcsIDE2QkRFMjMyQzMwM0FDRDFDQTZGQUMyNjk5MTM1NzI3OEY5RUQ4QkVDN0RCNDJCQjUwRDdFMjJDQTBCQzk2REQzMTZEQ0Q4N0Q0RDBGNTMyODc3REFBQTY4ODVBRkRCMjI5ODcyMDA2MkI5RTU5MTQ1MUI1RkY2Q0VGQ0I1QjVGN0UwCitBQTIyRkJDQzI1MzFFMTY2RDJEMjcyQjQwNEUxNTY2RkZFOTc0NEQ1RTY4MEIxMjZFOURFRDZFNjI2QkYzQTBEQjM1MEEyQTMyRjdBRDcwMTFBRDRDMzYyMkQ2QzA5OTFGQ0IxLCAxMjkyNjg3Njc2MDk2QkEwM0QwMTMzMDQyNkFEOTBBM0YxRDM3NzJBRTgxOTdCMUQyRjYyNzlGQTMxQzE0QzI2MDM0QjU2N0JCRUI3Q0REQTA3QkYyNkQxODA5QTY5NENGNjI3NDUzOUI0MkE3MDZBMzkxNUMyRjQ0MDQ2Q0VBMDQ5OSwgMTRDOENCRjc4NDYyRUNGMjA5MEMwMDk4Q0U3RUU5M0MyMzU4RTdDMzA4QjE3QTVENTk5ODg3RkMyMEREREY1MjBGM0NBOEExNUQxOTI4RTBFQzY3REJCQzE2N0RBNTg4MDhBRjQyMTI3QjFDNjk5NEI3RjNCMThGNTFFQUM1N0I4NjAKKzFGRTY4RjM2NDZGOTVBNDM0Nzg3NzU4MUMwRUE0MDM0RkZCQzVDRTgxQjM4MjEzNzRCRDlDODRCMjc0M0RBRTI5MTlGMUU3RTk4RTcwODUwMzUwN0U0QTI2ODg0NDFDQjVGNjEzLCAxRkJEOTczRjhBQTFDRDdFN0U3NThGNTQzQzRCMTU5NjJFMjQzQkE0MzVBN0NFNjJFNzUxOTMwNDVEMjQ4QUMzQ0MwOEU3QjcxN0Q2NTQxRjMwMDQxQzAyMDAwMzExMTU1QzJGN0I4QkM1MENBQUNERjlBMjAyMjMzMDhCQTBCM0VENCwgMTExMzJGN0VDQTI4MkYyQ0QxNUIxMzU2NjREQzcxQjMwNzc5MzY4MUQzNUQzNTVDQUJFMTk2MDEwNDhFOTMyMjg3QUI2MDY5MTlDN0MzMTk2RUFCRThBMUZEN0U2MEJDNkVFQzU5NTYxOTA1OEI1QTM4MzI1MzhGRDY3QURBQkI4NzgKKzVGQjNBREEyRDRFQzBFQzlENjk2NjA4NTQyQkVDMDlFRkYzNTE2Qjg1MUE4NjNBNUUzOEQ1OEUxNzVDQjkwQTdCNERENUI3QkNBQjUxOEYwOUYxN0FERTczOThDQzU2MjFFMjM5LCAxMTcyQzVFMEZCNkQxRTM2NzY0OTBBOEY2QTZGMDdCQkEwMTY4QkE2NjYxQTJGODFGQURCMjAxRjk1MjI4Mzk5NzU4NDBDMDI4QThCMEI2MEE2OTMxNjkyNTU0RUZCRTg4MzAyNkEyQzE1MkRFOTFDRUE3NzdCRERDNkY2MjdBNjYxRSwgRDRBQzBGMTFBODcyNzQ5NUU2OUNENUY2MDM1OUQxMkEwQTFCMTFGREUzRTAwOTM0Mjk5QzBFODNERUJCRjdDQkFBQkNEQjg3NUIyNDQ2NkNDMEE0M0VEREQ1RjhENzU0NkU0QzIyN0IyNEY3RDRGNzczMkIzRTY2NTBBQTQxOTgzQgorMTFGMUIwOEU4N0VDNDJDNUQ4M0MzMjE4RkM4M0M0MURDRkQ5RjQ0MjhGNEY5MkFGMUFBQTgwQUE0NjE2MkIxRjcxRTk4MTI3MzYwMUY0QUQxREQ0NzA5QjVBQ0E2NTAyNjVBNkFCLCAxQ0E1QzhFRDg0MTRFN0Y4RjY4NDVCQUZGNEMyMjIxNzYzMjNFQTU3NDcwQTUzQzY5RjhDNDNCNUQ0NzYwRTkwNDFGQTQwMEJGQTI3RjUzOEFGMUE1NUZFQTZEMDRGNUUxNEQ3MjJBMUU3Mjg5NjlBODcwNEM5NjQyM0MyNUFGMjQ3RSwgMTY2Q0E5M0EyMkI0NTg3RkNCMkJERTM2MjUzQTlCOUY5OTBDNTUxMTlFM0RBMDA2MTlFOUZGRkFCMTFGOTc5QkExMjVGOTg2NEUwQkUzMDQ3QzVGODU3NEFFMjdCMkQzOUEwODFDREJFMERGRTcyNUQ3RDA1QTVEOURBNjkzMzQzNTgKKzM1RDUxMUFCOTdDNEM4NTE4OEI0OTY0QUY1OEI0QzU5NkY4RERDQzdBREVFQjgwRDRGRkY4MUZFRDI0MjgxNUU1NUJDODM3NUEyMDVERTA3NTk3RDUxRDIxMDVGMkYwNzMwRjQwMSwgQjdFOUQ2QTI3RjY1NDUzMUZDMEY3Qzc4NkYwMDA4NjNBRDBEMDhGQUE0MjREQjA0QzM3Rjg1RTkxQTQzOTA1RUMxRjUwQ0Y3RTBERTU3NzEyNzlCNkQwMERCRjJDQzc5N0I5MkY0MjhGNDA4REQ0RjIzQUVFMzc5MDNGMEVBQjcyQywgMTk4NkQxMjE2QkIyNTRBMkQxNjFERTQyNDE3QjY4OEI4M0E3NTQ2MkJCRDAwRTlDNzNFRERFNkIxQkNEM0U3RjlGMEJFMTdCRDAzOEY5QzAyNDE5NzRCMjk0RkMxMjc4MjgzNTI3RkNDODNCOEI5M0EwQTY2MTFENEIyQzU5MkVGN0UKK0ExN0YzNTAyQzc0RTU4RjQ5QTFEQzJFMEUwQTFFNTBDNEVBOTk2NTcwOUNDMjgyN0VGRkU4NUZDNzZDNzg0MUIwMTM1OEE2MEU2MTE5QTE2MEM3N0Y1NzYzMTFEOEQxNTkyREMwMywgMjM2RDJCRjc0QTI3Nzg5MDJERkM3MTEzNDQ2MTk2ODExNEY2Q0I4NTQ3MEQwODE0Q0FFMzJDOTNCMUY2N0I0QUQ3ODEyOUNEQjI1N0ZBQjI5OEJDRTUxMDg4QjdDNDQ2REM5OEIyMEQyRjlFNTkxRTFGQzQ1NzM3RDgxQjE3MzcxQiwgNzY0RTQ5NDUwNjYyMjg3RkY5NjBGN0RCOTUzODI3RDE0Q0E2ODdFQUFCNkY0NkZCMjc1NEVGQUFCRTdCMjM3MDMzQ0Q1MkY0QzlBRkExNTg0OTREMTA1RjhFMjg0QTA3Q0Q5MDYxNjk0REVFNEFGMjAwMTQ0QjY0NUJGNjJGQjBEMQorMUU0N0Q5RjA4NTVFQjBBRERDRTU5NDhBMkExRTVBRjI0RUJGQ0MzMDUxRDY0Nzg3N0NGRkI5MUY1NjQ1NjhDNTEwM0EwOUYyMkIyMzRDRTQyMjU2N0UwNjI5MzU4QTc0MEI4OTQwOSwgRDZDNDhCQkRBRDA5RDVDNEQyMUMxNTkxM0YxMkRFNjkwRDI5OEQ3ODkxOUMzMDgzMzIzNEYyMzQwODNDMkZCRTQyMkM5OUNBM0VENjJBODRDNDZCNTk2NkRBNTAyQzY3NEFCQjJENDQ1RjA4NEYxMEVBMDMyNURDNzI1RUJBMUM2QSwgMTIzNkM5RkE0N0UwREY3MTNFNkZCMDZBRTYyM0RGQUJFRDY1NEM2OTlBNTBDOUZFMDFGMDQ3M0JFMzc4ODZCOTZBMjBBQTIxMDQ0MUIyOEMwNzc4MDU3QkY4QjJFNDU0MjFFRDI5NDFCQzlFRkE1Mjc5MUJENDc3RUZCREUyQTkwQjMKKzVBRDc4REQxOTAxQzEyMDk5NkIwQkQ5RTdFNUIxMEQ2RUMzRjY0OTBGNTgyRDY5Njc2RkYyQjVFMDJEMDNBNEYzMEFFMURENjgxNjlFNkFDNjcwMzdBMTI3QkEwOUY1QzIyOUJDMUIsIDEwMjcxRDk4RTdEMTU3Qjc0NjI1MzRFQzkwOUE3OEY0NDFFMkE3NkNCOERCNEU3MEExQzNEMEYyNTMyMjQ0MEFEQUMyMzk4RkE3QTRCMjQwMEVBMTczMjA5QUU3NjQ0MjVDMzY3N0I5M0MxOTJDQTIzMTZBODFDMzJCOTA0MEFFNTIzLCA0RTFDQkVFMDAzRkZDMzQ5NjM1OUZGMTlERTMzRUNFMkFEODc5NjA5OThCMjVCN0M3NDRCMDk2RDRCMDgyOUY0NTUzQzYwQzU1RDM0Rjc0MkQ2ODVDQkJBMzYxNTNCRjQ2MkREN0U1MTY2NTlGMUI5NjE5RDlFNThFQzI5ODJCNzE2CisxMTA4NkE5NzRCMDU0MzYxQ0M0MTIzOERCN0IxMTMyODRDNEJFMkRCMkUwODg4M0MzNjRGRDgyMUEwODcwQUVFRDkyMEE1OTgzODQzREI0MDUzNTBBNkUzNzcyRTFERTE0NjdEMzQ1MSwgM0M1QkY5OUNCRjI1QTVGQkMxRUQ0MTM0MUEwMTcyN0YxMzJDRkI5Qjg4Rjk2Q0I0RTIwNUZGNzk4MkFFNjQzMEVFQ0Y5RjFDQUVCMDYxNjM3N0IxOTVGM0Q2Q0IzMkREMkIyNTIxRjk4QTUxNzdEMjcwQTU4NkJDMDM1OTFGNEI1LCBGMTNDODJBOUZCMEJFMEZDMzI4NUJCQkIzODdDNkVGNDJBREQ5RDhCMURBQTQyRkJEOURCMTcxMjIwRTc5ODlDMTNGRENFN0Y2RjA0OUI2NDlCRTgwRTE5Mzg0NURFMkI4MkQzNEFEQjg4NThCM0JEREFCNUVCNzY0OTAwNzYxNjdDCiszMzE5M0ZDNUUxMEZDQTI1NjRDMzZBQTkyNzEzMzk3OEU0RTNBODkxOEExOTk4QjRBMkVGODg2NEUxOTUyMENDOEI2MUYwQzhBOENCOTFDMEY5RjFGNEFBNjU4QTU5QTNEMzc3OUNGMywgRDk3NDQ0MUZGOTNCRDg3NUQzMkY4NTYyMUZEQTQwQ0M1QjhEM0U1NTM4OTgxOTVEMDE5NTE0MzRGRjYyQ0VEQzlFNUVGOUYyODY0Mjc3OThEQUJDRjhEN0M4NkIwMTc3RDU3NDE0QTVCQjVCRTQzRTY3MTExMjYwMkI5Q0I1MjNBRiwgNUREQzJERUY1QjkwNEU1QkFGRUM0MEIwQkRCMDJENEM5RkY5NTRFQjc1NDU0RTY4QTgzQzBGQjI4MzYwOTBBQTU5M0VEODg2NzgwNTE4RjExM0M1OThCRkU5MDE3MjRCNjRGMzIxOTc3OUU5ODI5Q0Q0MjM3MTczQkUzQjQ5QTM1MgorOTk0QkJGNTFBMzJGNUU3MDJFNEEzRkZCNzUzOUFDNkFBRUFBRjlCNDlFNENDQTFERThDRTk5MkVBNEJGNjI2NUEyMjVEMjU5RkE2MkI1NDJFREQ1RERGRjMwOUYwQ0VCN0E2NkQ2RDksIDNCMTEzMEJFQUI3NTFDMTc5RDU1QURCQjQ5QzZDQzk0MTQ0MDEwNEFFMDcwRjREOTYwQjY5OTQ2MTVCNjYxREMzMUVBNDI1QUVERTFEQzQwODZFMzY3MUE4MjgzNkU1QUQ0MjVGNzNFNzZERTk1RkVEN0UxMUUyOEU3QkRERUIyN0QsIDE0MDI4RjFFNDJDNUIwQjc2ODMyRUFGRkQ1REFCRjIyMDZBMkREOEZDNDgxODI3NDQ5QUVGQTkyMkEwQTExN0VFNEQ4NURFOTU0NzVGQzMwMzhCMkQ2NTQzNTM4RkIwQkYwMzdERkNFQjZBOTE5OTU5N0ExQkMyOTg3Q0M2N0IyM0I0CisxQ0JFMzNERjRFOThFMUI1MDhBREVCRkYyNUZBRDA1NDAwQzAwRUQxRERBRTY1RTU5QkE2QkNCOEJFRTNFMjczMEU2NzE3NzBERUYyODFGQzhDOTgxOTlGRDkxREQyNkMyNkYzNDg0OEIsIDE1NDkxMDQ4Mzc4ODA4QzdGOUFCRjZFQ0ZBNDk5QTRCQUYzMjA4REVENDlENjA0ODY3NEVDNUE3QzUxMThCNDc3NDhBNjZCNURFMDVFNEY4RDUwOENCNUEzOEMwMkE5QUI0RUU1NkU2MjgxNzM4QzRCMjRBNTlBRTQzMkIzODIwQjI4LCAxRjBDRDk2RkI1MTM2MEI5NTg4MjMzNjA1NTA0ODE2Mjg0RDZDNDYzOTdEQ0FGMTQ1NkNDNDA2Njk0MDhFRTM1QjhFNkY4QzIxQUFFQ0VGQUFGMTM1QjlFMkMwNTFENjU3QTY1NzI0NkVFRkY4NTFGODBBMUIzRkUzMDkwMEJGQ0VDMworNTYzQTlCOURFQkNBQTUxRjFBMDlDM0ZENzFGMDcwRkMwMjQwMkM3NTk5MEIzMUIwRDJGNDM2MkEzQ0FCQTc1OTJCMzU0NjUyOUNENzg1RjVBNUM4NENERjhCNTk3NzQ0NzREOUQ4REExLCA3NDREQzU1MzI2MjJDRTkzMjY1QTlCRDI2NkE5NzMxMjA4NDBFRTQyQTcwMjMxRjI3NzM1QzEyRjI2MkY0ODZGNDJCOUUzNERCNDgyM0Q4MjQxNzFFMzk1MkUzOTg4OEZFQjUzNkJCRUYzNTYyRjlCN0ZEMDgwMzFEMzJBNUFBQjlELCAxRDM2Mzc1RURDNjIzMUJBM0FEMDU1Qzc4QkY5M0NFRDY3QjQ5NzAyMzVBQzY5OTA4RkZFQkNENTIwMUE3RDQyNjIxQ0U2NzQyQjJBNzY4M0JDNzAxMjg2REVCRTJGMUE1NzZEMDJBOUVEMUJERjJDQzdFRkI4QUQ5MkFEOUE1ODhGOQorMTAyQUZEMkQ5QzM1RkVGNUQ0RTFENEJGODU1RDE1MkY0MDZDMDg1NjBDQjIxOTUxMjc4RENBMjdFQjYwMkY2MEI4MTlGRDJGN0Q2ODY5MUUwRjE1OEU2OUVBMjBDNjVDRDVFOEQ4QThFMywgMURDNTMzRjBFNDEwNDZERTA3RjE1QjUzNTI4NDc2REI0NzJEOENDQUM4MDI4RUVBNTg2OUJGNjAxMDI5MjE2NDRGNjEyREUwQTk2RDhFNDdCMkFBQ0MxMjg2OENCMjRGMUE2Qzg5QzVDOTExMzZEQjlFNjhCRTBBNEVDNzE5MUY4NzUsIEFGNUE1OUNEQURDREQ1QkRGQTg3Mjc5MjM2NUU3MzVBMzUwN0I3NkE3OTBGODczOEM4OEU2MkRDRjc1OEVEMjI4NzVDRThBMjdFM0UxNjZBNTk4OTMxNjMzMUE5MUY1QkIwMTEyNTkwRTZCMjE3OTkwM0JFQUYzMTc5RjJEMUREN0IKKzMwODBGNzg4RDRBMUZDRTE3RUE1N0UzRTkwMTczRjhEQzE0NDE5MDIyNjE2NEJGMzc2QTk1RTc3QzIyMDhFMjIyODRERjc4RTc4MzkzQjVBMkQ0MEFCM0RCRTYyNTMxNjgxQkE4OUZBQTksIDE5MkU0OTYwREZGMzA0NTk1QzRGNzg0MzM0QUEwOTJDMkM5NDRDQjMxMzI4QTA1QzAyMjRCNjNBOEYwRDVFQTE3NTNGNTkxRTAyQzM1MDY0NjgwREJCRkQ2QjhCOEJCNTE0RTFFMEJDNEI2NkM2NzUxMkQxMDgwRUI0QUJCMDEwRTQ0LCBEQkMwMjg0QTIxMUZFNjhENTI2MTRBQkE5QjlCQTU4NDdCQzExNEREQjFCMjgwNUY4NEY3NzJCRTI5NUIwNTM2NTIwNDA0NDE4RTJCMzE4NkEyRENBQjRDNEUxQ0ZBQ0ExRDA5NkJBM0JFQzdGMzJFRDIwQUYxMDUzN0E2QjZERDMwCis5MTgyRTY5QTdERTVGNkE0N0JGMDdBQkJCMDQ1QkVBOTQzQ0M0QjA2NzI0MkUzREE2M0ZDMUI2NzQ2NjFBQTY2NzhFOUU2QUI2OEFCQjIwRTg3QzIwMUI5M0IyNkY5NDM4NTJGOURFRkZCLCAxQTcyMjg2Q0E0NTEwMzM1MjY5QzBBN0E4NTI4OTczQzkwNTdCNDA4RkE5MzQ0RDFGNDA2NEZGRkQzMjgwQjY4OTdEMUY0M0IzNTc5Nzc3ODAwRjVDNDhEOUU4NTU1RTVDMjdEQzE3OUJGMjU4MjVDRUY5RkJEMUI1QjYzQjA0OTI4LCAxOTJGRTQ1NTE0NTRENTVFMjY2QTYyMzE1NUQyNDczQUI0REYxRjY3NUE0NTM0OTREM0E3RTkwNUI0RENBMDk1OUM5OEU4NjU2MjRCRTNCODRFNjAzNjkzOTA0MUQwQTczNzU4MkNCMUY4NDA0REIwQzNCREY5OTkwMjkwQTMyNTQ3QQorMUI0ODhCM0NGNzlCMUUzRUQ3M0QxNzAzMzEwRDEzQkZCQ0I2NEUxMTM1NkM4QUI4RjJCRjQ1MjM1RDMyNEZGMzM2QUJEQjQwMjNBMDMxNjJCOTc0NjA1MkJCMTc0RUJDQThGOEVEOUNGRjEsIDEzMDkzREFEMDU0OEVGMUNEM0REMTA0RjZGNDE1QjRCREFDODMwNDQyQUUxOTQ2Q0M5NUQ0RkUzODVGN0Q4OTI4MjM2MEI3NTgxRjc4NTFDMEE0ODQ4NzlFNUIzRjI3OTk3NzJFNkJFNTE1RDEwQzkwNTY3RDVCNjQ2MkZBQkM4QTNCLCBGMEEyRTY1MDY3OEIwNTI2OTMxQzU0NEQyNDk4NzU4MUUwMUM2MEEyMkREMkQ1RTMyRDkwOEFBMjdCN0MwRjI5NjMyQkRGMkYwMDQ5RjcyMTc4M0M0NzJFNUYyRkE0RjhBRUU2ODhGRjUzMDA5OEI4Q0RCNjc5NjhCQjMzNTRDMjcxCis1MUQ5QTFCNkU2RDE1QUJDODVCNzQ1MDk5MzI3M0IzRjM2MjJFQTMzQTA0NUEwMkFEODNEQ0Y2QTE3OTZFRkQ5QTQwMzkxQzA2QUUwOTQyODJDNUQyMEY4MzE0NUVDMzVGQUVBQzhENkZEMywgMTYzODJDMkI3RjlDMjgyRURGNENDMTU4OTg3NDRERDQwNEJFRkRERDI3NDQ2MUNDMzNCQUZCODY4MkI0QzAyNDE3QkIzNTEyQjU2NkEwNzIyQjQwRkI3QTVCOEIzMjQ2RjQ2NjIxNDQ1RkQxQURGMTg2RTJCN0E5QUZGODAyRjQ4MTgsIDFDN0QzN0JDMkE0RjIzNTlGRDM1QTJBQjE0RkZFQjM1NUM0ODM0NTNGQkJDRDdBMEQwRjRBRTBCMzBFMTU2MkZBM0QzMTUzOTNFNTcwMkZDMDdERUYyMzU2RTBEQjNCQUMxQTVGNThBRjNDNUU4NTZFNTE5NThBNjE0NjQxQ0M1NDAyCitGNThDRTUyNEI0NzQxMDM1OTEyNUNGMUNCOTc1QjFCREEyNjhCRTlBRTBEMEUwODA4OEI5NkUzRTQ2QzRDRjhDRUMwQUI1NDE0MEExQkM3ODg1MTc2MkU4OTNEMUM0QTFGMEMwNUE4NEY3OSwgMTUxNjJDMkRCMDY3RUYyNEEyNkFGQkU3NjlFQTVGRTY5MTU1QUJGMEMzOUVFQjhFM0I4OTgwNzA3NTBBMDU0OUIzMThENUI2OTUxOTc5NUVDN0ZCMEU4RjZBN0FDMTc1Nzk3M0VCNjA0MDI4MEMzMTQ0QjU3QUM5NTBCMkEzREY4NjIsIEVERkU4RDVBQTVCQUU3QzQyRTRBNEREQTVFQjM1MTJGRjg1NEMwMjA3OEQxOUYxN0FFMDFERkI2NjUxNDcyNDMyRjhGNjlGOUM2NzhBQkZFNEVCMjhCNkU2MzEzODgxMzU2OTA0MkRFQkNBMzJFMEQ3Q0YzRThGM0JEOUNGMjRCNgorMkUwQTZBRjZFMUQ1QzMwQTBCMzcxNkQ1NjJDNjExNTM4RTczQTNCRDBBMjcyQTE4MTlBMkM0QUJBRDQ0RTZFQTZDNDIwMUZDM0MxRTUzNTY5OEY0NjI4QjlCQjc1NERFNUQyNDEwRjhFRTZCLCAxRDMwRDQ3MEIyRTA3OUZGRkJFQzUwMUMzMDQ2NjZGNDlBNzI0NkI3QjRBMzkzMjUwNkUwRjc1MjFGQjkzNUU4QUE5RUU4MjYyNzI0N0ZDNzI0QTMyOUQ3QThBRDVCQjE4Qjk1M0YzRjVBMDc2NEM5NTlCQjBCNDI3NTUxNTdBMjFBMywgMTA1MUFCMDhERjU4REVERjVFODMxMDFBM0E4MzQ5QzdDMEY2OTI5QkNFOUZDQTkxMTY3RkVCQzI0OEQ4OEJDNkNFNDZGRUM0NTIxQTk2MjRFRUE0QUYzMDk5MUFBMDNCQTM0MkM4NTUxN0MzOUUwNEQzODM5NTQyQTY3MzMxQzQ1OTUKKzhBMUY0MEU0QTU4MTQ5MUUyMUE1NDQ4MDI4NTIzM0ZBQUI1QUVCMzcxRTc1N0U0ODRDRTg0RTAzMDdDRUI0QkY0NEM2MDVGNEI0NUFGQTAzQ0FERDI3QTJEMzI1RkU5QjE3NkMzMkVBQ0I0MSwgMTc5NjQ4REZDNzZGNDlGRUE5MTJDMjEzMDRFRUFCQjNFRjJEOUQ0MzkzMERDNTIxM0UxRjI2MUUzMUQ5QTMyNDk4QjhEOTdBMEZGMEU5M0MwOEZCN0E4QjU4RDAwNjJCM0FDOTgzRkNCRTBENDI3RERGQUE2QTVGNjI3MEE5RjdCNjEsIDU0QjEwRDBEOTRENDk5RkQyRTg1M0I2MUZENkMwOTlFNEZCRkZBOEQ0MkZDMjczQTgxMTAzMUFFOEVDQTRDRjRGQUVGMzczNUIxMUZEQTkwRTU3MUQ4OUVBMDZCN0Q3NUEwQjRGODVEQzVGMjBBNjgxRTAzQkM0QjA4QTU0MjQ2RgorMTlFNURDMkFERjA4M0RCNUE2NEVGQ0Q4MDc4RjY5QkYwMDIxMEMxQTU1QjYwN0FEOEU2QjhFQTA5MTc2QzFFM0RDRTUyMTFERTFEMTBFRTBCNjA5Nzc2RTg3OTcxRkJEMTQ2NDQ5OEMwNjFDMywgRUFENzA2NEEyMzgxNzZCODFDNjA1QzRDRTBFMkVEQkI3QjVGMTI0NkExNjVBOTYxRDVGNzdDRjg3MzA0MUY0QTdERTNGMzdCMTI1Qzg5NjNGN0I4NDUwODAxRjI3ODJGQkYxMzNBRDQwMzVFNjE4MkM5QjVGMTVEMTM0NENBN0NGQiwgMTFBOEYzQ0FGRkNGMkI5RTBCNENFOTY3NTY2QUFGNTY2ODczOTdGOUE5NzI2MTJEODM1Mjk5RDY5NTIyNzVGNjg2MTUwNUQ4NzYyMDlERUZDMDU2MTQxNEI5NTI3QzZBMjAxQjNFRDYyNjY5QkY0NUVCOEE3MDdDNDZDNDFDMzRBNkQKKzREQjE5NDgwOUQxOEI5MjBGMkVDRjY4ODE2QUUzRDNEMDA2MzI0NEYwMTIyMTcwOEFCNDJBQkUxQjQ2NDQ1QUI5NkFGNjM1OUE1NzMyQ0EyMjIxQzY2NEI5NkM1NUYzNzNEMkNEQ0E0MTI1NDksIDFCOEU4MjE0MTgzMEZFNTA5NDU4M0E5MTM4M0UxQzk2NTUyQzk1MDAyQTFGRjAyNkE2MEFCNUEwQTIwRkZENkE5MEVCMEIxMzA2MDE1RUIwMzk0NkUzN0VEMTNDQjI5Q0M1OUQ3NERCMDk4NDQwRjY0MkU5NjNFNTUzQzk4NEQyNkVELCA0Q0Q2MkYwM0U0REQ3NTc4QzY0QzEwNDYyODBGQ0Y4QzNFNTRBOTFFMTZEQ0FBNkQ2QjY1QzU5MzU4Q0MwRkNDQTlBNEI1OTdBRTlFMTNGRjU4QkI1RERBNEM3RDE5MjUwN0IyOUFFNDQwNTI2RTYzOTUyODMwMDMxMjdFRDM4MjNBCitFOTE0QkQ4MUQ3NEEyQjYyRDhDNkUzOTg0NDBBQjdCNzAxMjk2Q0VEMDM2NjQ1MUEwMUM4MDNBNTFEMkNEMTAyQzQwRTJBMENGMDU5ODVFNjY2NTUzMkUyQzQ1MDFEQTVCNzg2OTVFQzM2RkRCLCBGMTlFRjhEODdBRjg1QzNCNTMyMUJCM0MzOUFEOUNCRjYwRjkxMUI0QkI2QzczRjAyRDJFQ0RFRjRBMTM2Nzk4OTExNTE5MjcwNEI5ODg5Q0YwRUI4NDAxM0IyM0RDQkIwRDM4RjBGREEwMjk2NzE0QjUwRDZGMEVGMUFBRjQ3OTFFLCAzQjkwRDY4QTI5NEI0RUEzRDMzNjEzMzk4RUIxQTg4ODFFRDg3NkY0N0I1NERBRjkyQzNDODBBODBBQzU1NUM4QkVFOThBOUQzMDI1REQwM0ZBQzA0MjEyMUJDQkU3OTdFMzlCMzg4MDMwOUMwRTUwQUNFMjRGODI0REExRDA3MzlCCisyQkIzRTM4ODU4NURFODIyODhBNTRBQUM4Q0MyMDI3MjUwMzdDNDZDNzBBMzJDRjRFMDU1ODBBRUY1Nzg2NzMwODRDMkE3RTI2RDEwQzkxQjMzMkZGOThBODRDRjA1OEYxMjY5M0MxQzRBNEY5MSwgMUYyQ0U3NDdFQjRCMjJENTAxNEI2OUJGM0NERUNCMjc5NDQ2MTA1QkRFQzdBRjIxQjU4QzkzMTQxRDMyQzhEMUIwMzFDQzc4QkUyNjU3OUEwNTE3QjhFMTYzMzVGNzA4NzQ1Mjk2M0NDQjAxMEM1MkE5MUEyRDRCQzUwN0RBM0JFOCwgMUY2MTYxQTIzQzI2QUQ2QTFEREQ5NjVBQkExQzMxMTdDNzdGODE4Q0IzMDgzQUY2NTY4RjFCQjhGQzJBQzdERkNBQjc3NDY2NzZFMjE5OTQzM0Y3RTVENEE2NjNGMTRFQTlBRkYzNDEzOTMwQ0U2MkE0RkE0RkExRjAwMDQ0OEFCQjkKKzgzMUJBQTk5MDkxOUI4Njc5OUVGRTAwNUE2NDYwNzU2RjBBNzRENDU1MUU5ODZERUExMDA4MjBDRTA2OTM1OTE4RTQ3RjdBNzQ3MzI1QjUxOTk4RkVDOUY4RTZEMTBBRDM3M0JCNDU0REVFRUIzLCAxNTZBNjlFMTc1NjEwN0IzMzEwRDc3OTA3NDU4RUFBMjdGQTY5REU3QzExMDQyODYxOEY3Q0ZFQ0U2QkRFRDcwNTFBMEU4NTZGQzJFQjJFN0U5M0IzRkQ4QzE4NUIwMjBBRTdBRUI2ODBGOUE1RUZBNzJEMUNBNEQwNDZGN0Q1MTczNSwgMUVEQzE3RkY3NkRBMzRBRUIwQ0ZGQkFDNTk4RjJDMjg3QUMwNkE4RjIxMDE1MTQ5NzhBQ0E4MTI3RDM3NEVFRkY2NzdGRjFCQzcyMjgyNzZEMjcyQUNDQjg3MjkwOUZFQTFERTZFRUE2OUMxMjFENTFDRUYyREEwMjAyOTE2RDE1MDYKKzE4OTUyRkZDQjFCNEQyOTM2Q0RDRkEwMTBGMkQyMTYwNEQxRjVFN0NGRjVCQzk0OUJFMzAxODYyNkExM0JBMEI0QUFEN0U2RjVENTk3MTFGNENDQUZDNURFQUI0NzMyMDdBNUIzMUNGRTlDQ0MxOSwgMThFMjMxQTJCQjA5NzBEQzFFNjY1NUM4QTJCN0Q4MzI1OTU3RDczQjdFNTlBOUJCMjA2QjYzOEM4Q0Q1NDM5QkQyOTVENDJCRDJDOUFBQ0FDMzkxQTc1MTMyNjZFREEzNTM3OUZDMTJCNTlENDk0QjRBRTYwRTkwQkYwODE4RDYzRkYsIDE4Mzc1Qjk1MUQyNjgzMjkwMjY1MDE0NEY3NkExQ0MxNkU5MUY2RUU1QUQ3NkY5NTNFNkI2MUZBNzU0RTNDREM3NjQ0ODFFQzUxOUJDNkQ0Q0ZFMUJGNjg1NzI1OEYwQUEwOTdCNUE3MjRFNzkwQTAwMDA4NkU3MEIyNEVCNzMyMDZBCis0OUJGOEZGNjE1MUU3N0JBNDY5NkVFMDMyRDg3NjQyMEU3NUUxQjc2RkUxMzVCREQzQTkwNDkyNzNFM0IyRTIxRTAwODdCNEUxODBDNTM1REU2NjBGNTE5QzAxRDU5NjE2RjExOTU2RkJENjY0NEIsIDE5NzVBQUE2NkFEQ0VEMjgzM0RFNjIyQjAxQTc5N0VGQUU0Nzg2MzFBOUI0NTVEODk1RjQ2RDQwQTY5MDFBQkY2RjZGN0M1QUYyMDhEMkNDQjZCRTJCODFFNzBCQjdGQzRDNzJFODhEREYwMEYxNDA5MjY5QTlGRTE3Mzc0Qjk0MEJCLCBCNjA1QzRFOUNERTZFNDNGMjU0QTRGQkUzQTMyNkYzRkYzNzk2NkJGRDVGMUZGNUJFQjAxNzhFRUFFOTMyRkE3ODk4N0U2Rjg2NDQ0M0I5M0JCN0I5NjI5RTE2NDExQjM1QjY4MEUxQjExMDkxMkEzMzQ0NUU2REZDRjRCRUJFRDcKK0REM0VBRkUyM0Y1QjY3MkVEM0M0Q0EwOTg4OTYyQzYyQjYxQTUyNjRGQTNBMTM5N0FGQjBEQjc1QkFCMThBNjVBMDE5NzFFQTQ4MjRGQTE5QjMyMkRGNEQ0MDU4MEMyNDREMzRDMDRGMzgzMkNFMSwgMUVCMTEyM0Y0NTVCNjc3NzIzRDE0NDEyNDg0Q0ZFQkI0REEzOTUwRjYxRjE5REY1NzIxRjU4RkQzRUZBOEE3NURBOTg2ODlCNUU3QTFFRTJDMDcwQ0QzQkIwNjlFNTVERjg0RDdEQzJDQzIyNTgyRjNGN0U1NkQwQzQzOUQyRTgzMjUsIERBNjE4RkQzQzU1MDUwNDdBQUE4Q0FFMDc1NzI0NjI3OTdBMjZBMDlEMDg5QUNFQ0UzQzc4NjQwOEJBQTY1N0Y2NDIyRUQ1Rjc0MTdGNTM2NzQxNkU5RDc2NEQwRjIyQjlGN0VCNjFFN0RGQUU5N0QwQ0UyOUM1NjMyMkI5REMwOTEKKzI5N0JDMEZBNkJFMTIzNThDN0I0RTVFMUM5OUMyODUyODIyNEVGNzJFRUVBRTNBQzcwRjEyOTI2MTMwMTQ5RjMwRTA0QzU1QkVEODZFRUU0RDE5Njg5REU3QzEwODI0NkNFNzlFNDBFREE4OTg2QTMsIDFDQzRFQTRGQ0FGNjc5OEM1NjBERkU5RkU5NzBBRDQ1RDc1NEJCMjkzMzE0N0E3M0E4MUEyREI5QUNFRkRBNEY2MDYzOThFMTU5N0QyQzA2NDI0MkE1NjM0NTk1OTY5Mjg0MUZGMjZEMzY0QTU3NDVDM0Q2NTk3Qjk2NEYyRDk4N0ZDLCAxRTY3RUU4OTk1NzFBQUMxOEVGNDU3MERGOTA5ODgyRDZGQzc2QjFCREU4MjU0QTYxNkNFOTcwNUE5QjU1MTAwQzMyMkJFODYzRkMxMkRCRENCRkVCNEE5RDQ3MzQ0Nzc1OTBBMkY1M0Y2M0VFOEEzRDRFRkZGMjE5OEYxMjMyQzRBMgorN0M3MzQyRUY0M0EzNkEwQTU3MUVCMUE1NUNENDc4Rjc4NjZFQ0U1OENDQzBBQjA1NTJEMzdCNzIzOTAzREREOTJBMEU1MDEzQzg5NENDQUU3NEMzOUQ5Qjc0MzE4NkQ0NkI2REFDMkM4RjlDOTNFOSwgMUM1Qzk0RUJDRjRFNDQxQUY5NjE2MzVFODUyQTU5MDYzOEU2NkFENjFBREFGRkQzOEFCOTVDQTlCQjBEOTdBRERBNkQ0NUJGMjExNTY0NEQ0MzE4RDI1RjM1N0Q0NkNFQTk4NThCRTUzQ0Q5REU3NUM2RUVEMDVGRUU2NDk3QTVFOEMsIDg4NURBRTcxMzMyQjc1RTk4NTM5MzFFN0E2MDI3NDRENkZCN0UzMDEzOEQ4QjgzMDk1NUQyNEEwQTgzQTA0NDk3OUM3NEQ1MUE1OUUyNDNGOTBGNDgwQTU5QkRDMzhGRjc5QTkyOTU2MkJGQzczQUQ4OTY3NzVDQkNEQ0ExMkQyQzEKKzE3NTU5QzhDRENBRUEzRTFGMDU1QzE0RjAxNjdENkFFNjkzNEM2QjBBNjY0MjAxMEZGODdBNzI1NkFCMEI5OThCN0UyQUYwM0I1OUJFNjYwQjVFNEFEOEQyNUM5NDk0N0Q0MjQ5MDQ4NUFFRDVCQkJCLCAxQjFGNUVCQUJDNjk0NzIxQkFFRTg2QjhCNTI3QzRFQTk3MDNDMkY0OUUxOTFGNEU2NTAyREE2QzQ0N0UwQTYwOEU4NzE1MEZFODdBQUM2NzU1ODBEMzBEN0E3NEZBNTJCQ0RBODBBQjg4MDREMThFQTkwMkJCNDUyMDY3MEVCQThCNSwgMTg0M0I1QzI0QjYyQ0EyMEY0NkU3NTU5RjNBQ0ZFMkRBOEMyMTVGRkM2QjZCOUZEQzdFQjUwN0Q4MTcxQjdBN0U4MDc0NjVCOTgwNzdFQjVDQzYwQTA1NkMxRkE3Mzg4MTJDNkMxQkI0OUFGRDExN0E2QUFGM0QxRjgzODBGNEIzMDAKKzQ2MDBENUE2OTYwQkVCQTVEMTAxNDNFRDA0Mzc4NDBCM0I5RTU0MTFGMzJDNjAzMkZFOTZGNTcwNDAxMjJDQ0EyN0E4MEQwQjIwRDNCMzIyMjFBRTA4QTc3MTVCREJENzdDNkRCMEQ5MTBDODEzMzMxLCBGNzA5QjU0QjUxMTQ1NDM0NzE4NzA2OTI3NTRBODQxNDI4RUZEMDc3MEM4MkE3ODFBRUNBRTYzMzg2QzMyN0IzQzUyRTk5MjM3OUFBMkZCQzg1MTRGMEEwQzlCQTJCMDY4Q0QxQzQ5NERCMURGRUY0Qjc4Mjc0MjQxMDkzMjNFMkE3LCAxNTk5MjZCRkU1NDQyNTdBQzVFQUZEQUE0OUE5MEQ0MzkwRTU3OEQ5QTkwQzI2NzA2MjYzMTdGQ0QyNkYzODRDRDY1MTM4RUE3Q0ExMjY1RTkzODJGNjcwNTE1ODE5Mjc4NUQ4RkI2MDRFRjE1QzU0MEU0NjFGNThCMTdCRjIxRDQ4NAorRDIwMjgwRjNDMjIzQzJGMTczMDNDQkM3MENBNjhDMjFCMkRBRkMzNUQ5ODUyMDk4RkJDNEUwNTBDMDM2ODY1RTc2RjgyNzIxNjI3QjE5NjY2NTBBMTlGNjU0MTM5Mzg2NzU0OTEyOEIzMjU4Mzk5OTMsIDE3QzRFRjJFRERBQzdCNkI5Qzg5NkQ5MzY2NjQ1NTU3OTg0MjI2NTZCQkQ0MjQwRTdDN0Y5QTQ0N0U2RUI1MEI2QTFCMkE1NkJEQ0JCOTJENEJEMTA1NTMxNjY4MTVCMDEyNzk2MEU3NjcxMDNCREYyMENDN0UyNDY2N0FDMEFDQTU3LCBBRDUyRjQyQzQ0MkIyM0ZDRTI2NTBFNEI3NzA3RDZBQTU4NjZGODYyRUJGODk4RjEwNUQ2QUI0MjI5MkIzMzQzRUE5ODZCRkUzQkY2ODRGMTMxRDBERjM0OUMzNjg4NjAxNjcyODdCMUMyQkU1NjcyRUM0MzFBN0NEQThCQTIyRDNFCisyNzYwNzgyREI0NjZCNDhENDU5MEI2MzU1MjVGM0E0NjUxODkwRjRBMThDOEY2MUNBRjM0RUEwRjI0MEEzOTMxQjY0RTg3NTY0Mjc3MTRDMzMyRjFFNERFMkZDM0FCQTkzNUZEQjM3QTE5NzA4QUNDQjksIDEzMjk1MTNDOTM3QUQ0MDkyMjk4Q0YxNTkzQTk3MkIzOUMzM0ExQTg1OTY2MzJBQjY0MjJCRTFEMUI5REZGRDE3RTI3MkQ3QzkzNjMyMTBFMzdFNDM1MDBDMzk5Q0Y5QjE0ODcwRDIzMUE1MDlGRTQzODY0NDlEQzMyMTI0RjVBNkQzLCA5QjNFQjU2QjEyMkI4MjAzNTAzMERGMkE2Q0IwNUZEMDQ2MzMyNUI3MEI1NDc1RUM1NzYxNzRGQ0Y1ODg2MUJDMjY4OTM1NTVEMjYxQThDN0I2NkIzOEUyRkFGMzkzRDFDODk4RkM2RjRCMzM5QjNGRkI0OEQ2MjA4RDJDNTUzNEUxCis3NjIxNjg4OTFEMzQxREE3RDBCMjIyOUZGNzFEQUVEMkY0OUIyRERFNEE1QUUyNTYwRDlFQkUyRDZDMUVBQjk1MjJFQjk2MDJDNzY1M0U0OTk4RDVBRTlBOEY0QjAyRkJBMUY5MUE2RTRDNTFBMDY2MkIsIDEwN0Q4RkU5QkE3OTc1RjRBRDRDQTFFODQ0NjY5OUIyNDM4NjIxQjJDMDE3ODkwMEYyRjhFMkNFMTc5MDQ4Qzk4NEFBRDg4RTc5NEY0OTkyNThFQkZGNDJERjJCOTI3MERFODMzRUMzMzdCQjhCRkMxMDMzRjc5NzZBNDlCQzlCMUZBLCA1MTE3NEFDN0ExMkYwQTRENTA4RkYwOUEwRUY0OENGQTIxMkMzNkYzNzhBQzY3OTI5NjA3NTQ3NTQ0QTE5OERFREE4MDY3NEZCQ0ZEQ0I4MUZBOTBEOThGMDk2MEZBN0NGRDE3QzJDNjk0NUI1RDdFRUQyMkI3MDFGODY0NjlDNUI2CisxNjI2NDM5OUI1NzlDNThGNzcyMTY2N0RGRTU1OTBDNzhEREQxODk5QURGMTBBNzAyMjhEQzNBODg0NDVDMDJCRjY4QzJDMjA4NTYyRkJBRENDQTgxMEJDRkFERTEwOEYyRTVFQjRGNEFFNEY0RTEzMjgxLCAxNUYxRDAzOTVDRkZFRkExNzY3NzBDREI2NkJEQkRBMDc1MzRBNDgxQjFGNUEyQTMxOTkxQjE0MEZEQTgzNURCRkY1ODQyOUE0ODQ1RUI1MDFBNzMzRjAyMzQ2OThEQTlCM0M1OEUyM0U5QkUyNEU1ODEwRjkwNjFBRjdGMjBEQkY5NSwgNUZFM0Y3QTlEODIxM0ZFNjVEMjE5RTYzODg3M0YwODBGRTk0RUZGMTkyNzExRUMyMzdCMTA5OEQxRjZGM0M2QUYxREU3RTNDNzI3RkNEQUExQjMzRDZFRkRFQjcyRkQ5OTAxMDQ5RTI2QzM3M0E3RkEzN0ZEOEUzQjVDMkYyMzY3OQorNDI3MkNBQ0QyMDZENTBBRTY1NjQzMzc5RkIwMEIyNTZBOTk3NDlDRDA5RDMxRjUwNjdBOTRBRjk4Q0QxNDA4M0UzQTQ4NDYxOTAyOEYzMDk2NUY4MzIzNkYwOUEzMUFEOEIxQzFFREUwQUVERUEzOTc4MywgMTNCQjczQzdDMERFOTM0M0ZEOUJGMzMxNzdDQzJDOTE2RDJGRkEwQUFCRUZGQjlGMTY2OTMyODQ1QTk3MjEyQTEyNTlCQzY0MTZFMUVCNTg0QzlBREY3NDg2MTY3Q0U2RThCNjQyQzhBRTQ2RkE3MTQzNEQxQjgyRTUxNDYyMEU0RUIsIDE0MzI2NkQ5MUJEMjRBNjM5NDk5QjVBMEM5NDY0MUJFMkQ2NDM0QkI4RkJBRUE2RDAwOEYwMjE4ODRFNEE1ODgyRTUwQ0ZDQzRBOTM5MzE5QUUwQUMyNzMzQTkxQjA0MDNCRjcyMkVGNzM4MkNBMEVBNjk2NDU3OTIxODQ1QjU3NTk3CitDNzU4NjA2NzYxNDdGMjBCMzAyQzlBNkRGMTAyMTcwM0ZDQzVERDY3MUQ3OTVERjEzNkZCRTBFQ0E2NzNDMThCQUFFRDhEMjRCMDdBRDkxQzMxRTg5NkE0RDFDRTk1MDhBMTU0NUM5QTIwQzlCRUFDNjg5LCAxQTJEMjg4RkE4Nzc2OUM5Njk1REQ3OEM3MEQ0NjMzOTJBRkZBMkJCOTNFRjlENTQyNjUxOEY3M0ZCNDFBQkJGQkMxQ0VCRjE0MjcxNDAwQzU0NzgyRjhDQkEyOERDNjY1QjNBMTQ2QjM4M0YxRDcwRTM5MUJBQTE3NjY5RTgyOUNDMCwgNzYwQzdGQ0I5M0ZEOEQxNDU2OTJDM0VCNDMxOEVFNkYwM0RBRDEyRjAxNDI5NENBQzM1QTg0ODFDNjAyMEVDNzFERjE0NzY0QUQxMzlCOTQwNkU3N0Y2M0E0MUM3RTgzMkY0QkRBOTQwRUY1N0E5NTdERTlCNEE3RjE3QzFGREE2OQorMjU2MDkyMTM2MjNEN0Q2MjE5MDg1Q0Y0OUQzMDY0NTBCRjY1MTk4MzU1ODZDMTlEM0E0RjNBMkM1RjM1QjQ0QTMwMEM4QTc2RTExNzA4QjU0OTVCOUMzRUU3NTZCQkYxOUUzRkQxNUNFNjI1RDNDMDUzOUIsIDEyN0I4NjY4OTBGMzRDQzc3NTA0NDg0NEJDMDg2NEIxNTE3NURFN0EyNkU1MUI0Rjk5M0QxODUxRjYwNUY2RDQ5NDQ3MDNGN0Q3MThFQ0JBRUY1QzY5QjgwNkY3QUMyOTYwNDk1MkFEMEEwQzc3MTU0RUNCQkQzQUZFM0E5RDM2NTJFLCAxQzg5NDk0MjhBNjZBMUYyRDdFNTRDQzhGOEM1NkE0MjFGQzBCOEE4RTJDNkIwNjM3NjcxRjJCRjMxQUMwNjRFMTQxRkQ2MTVGQkI5OTZDMjNBNEM0OTkxODlCMDdCQjlERjcyRjVDRkJFQjE2QzI1QTcxRjlENDczM0U3QUIzRkI4MworNzAyMUI2M0EyNkI4NzgyNjRCMTkxNkRERDc5MTJDRjIzRTJGNEM4QTAwOTQ0NEQ3QUVFREFFODUxREExMUNERTkwMjU5RjY0QTM0NTFBMUZEQzEyRDRCQ0I2MDQzM0Q0REFCRjc0MTZCMjcxN0I0MEZBRDEsIDc5Q0QzMzI4QTNBNTgwNjRGQjhCOTBGOUZFQTQ0Mzc0MTNGMTc2RUU0MUY2Qjk3RTI5OUE1MzgxNzBDQjgxMDE2Q0JEREI1M0M2NzkxOTc1MDVCNTcyM0Y3NzBEN0E0RjA1OUFEQzg2MDAzQzYzNEE1NjMwQUExMTRFMjQzRTI0NTMsIEQ4MkEyNTIyOEY4QzNCMTQwN0I3RUFCNjc2Mjg5NjYwMTA0MjkyNDdBOEE0QjdCNjIxOEQwMTAxNzFFRTlDODk2Q0M0RTgxNzA0MEZBRTFGQThBMEJDQzIzMDM5OURGRDNDOTYxMzk3QUY0RThEMkZEMEJDNUUzODBGQ0FDNEVGRTAKKzE1MDY1MjJBRTc0Mjk2ODcyRTE0QjQ0OTk4NkIzODZENkJBOERFNTlFMDFCQ0NFODcwQ0M5MEI4RjU4RTM1NjlCQjA3MERFMkRFOUNGNEU1Rjk0Mzg3RTM2MjIwQzlCN0U5MDNFNUM0NDE3NTQ3MUMyRjA3MywgNjdBMjBCNTg2OTYwRTY0MEM5NkY2QzQ3RUFEOUQ4QzAxMTZBRUI4QzY2MzQ1ODc5RkNFMzk0QTVFOTRGMTIyQTYyOEI1NkI1QjU1NUEyQjI3NEIyOEE0Q0I4MjEzQjU5NEJFOTRERjIxMDM1OEFFNzYwNjcyNzcxNDM1MzQyQ0RCNywgMTYxQTM5NkY5RTY2NTE2NDJBNjMxMTc3REYxQTc5QkQ1M0IxMDQ3QzBBMTRBOERGOTEzMjYxMzQzRkE0MEU4QzczQjEwOENFNEQ2RTRFNTA5RUIxNEVENTk3RjM0RkFCMEIzMEJGMTI1QzYyN0JDNzc4Q0U3NjRFQUIyNEQwREUyOTUKKzNGMTJGNjgwQjVDN0MzOTU4QTNFMUNEQ0M5NDFBOTQ4NDJGQTlCMERBMDUzNjZCOTUyNjVCMjJBRTBBQUEwM0QzMTE1MjlBODlCRDZERUIxRUJDQTk3QUEyNjYyNUQyN0JCMEJCMTRDQzQ1RkQ1NTQ4RDE1OSwgMTBBOTEzMTIyNkI2MTk3OUI2QTk3OThEMkUyQTg0NDhFMzc5QTJFNTU4QjRFNEQ4MTdBQUEwNEIwMzA0QjU5Rjg2NEEzRTg1Q0ExMDUwQ0U1NUFDNzM4RDhBRTE0Mzg2QkVDNkMwQzMxMTUwNUQ1NUFEOEQ3Q0M5MzFBRUVCRTY5MkMsIEI2NDgzMzQzRDcwMDRBM0FEOEQ1Qjk5MDk0MTkxQzdGQkU4QjhCNTJENkY1NjRFMEE0RDYwRTNENTZGOUVFRDQ0NDVCMzAxRDgzNzI2MTM0MjhGREVGODY4MjRFQkFFOUU0Q0MyOUJGRDRDQTM5RDI2MDJDOTE1QUNBNzVBNTM0NjYKK0JEMzhFMzgyMjE1NzRBQzA5RUJBNTY5NjVCQzRGQkQ4QzhFRkQxMjhFMEZBMzQyQkY3MzExNjgwQTFGRkUwQjc5MzNGN0NGOUQzODQ5QzE1QzM1RkM2RkU3MzI3MTc3NzMxMjMxM0U2NEQxRjdGRkRBNzQwQiwgOUU1MTdEQzMwNTU5QzRDRUE1NTY2MEZFOUNDNjUwNEQ4NzU5ODlERjIxNjI5RDJDOEE4M0E1MjZBOUExODZCRUVEMEU4QkVGRTg5OTlGNDQwODY2MjVDMzJERjQ1QTMxMEU0MUUxOEI4MjIxMEI4MUE4MTA0OEQ0NjVFNzYyQkFEMiwgMTRCQUQyREQyRDEwRTMyNDQ5MUFFOEQyOUZCMDE4MUYxNkRDMDEwMUM0N0ZCREQyMTE4OTc0MjVBNDEwQjc0MzAyOENBNDA1RkMwNzQ4NDM5MTY4MDE1MDc4OTRDMjRBQzIyQzI0MjhGREI3MDUzREQwN0U2RDc4OTUwRjQ1MkUwQUMKKzIzN0FBQUE4NjY0MDVFMDQxREMyRjAzQzMxMzRFRjM4QTVBQ0Y3MzdBQTJFRTlDODNFNTkzNDM4MUU1RkZBMjI2QjlCRTc2RUQ3QThERDQ0MTRBMUY1NEZCNTk3NTQ2NjU5MzY5M0JCMkU3NUU3RkY4RjVDMjEsIDhDNkUxQ0Y5NTdFOTU1MTgxREE1NDhFM0RDNTVFQkVDNkMzQzY4QkU1MEY0RkJGQTBCOEFDMjhGN0Q0RTkyRkMxRjlFNUY5RDMyQUM0OTUzRjdBNjYwMjg2MTU3NUJFRTAxMkI5RjQzNzcxNjE5RDFDRUY3QThDRDQ5MkIyNTUyNjgsIDE0RkYyNDhDRUFEQkM5MjM2NjM1OEMyRjNGODA0NkY1REExQTE1M0Y4QUFCMUZGNTBGRDcwMTIyMzIwOUM5Qjg3Njg0NkQxRkFFNjlFQkE3REZFMjdFNjgyNEExMDFGM0U5NzY5MjlFQUM5QUYwNzBBRUE1RDUzMjk2MTU1QUU0ODY4Cis2QTZGRkZGOTMyQzExQTBDNTk0OEQwQjQ5MzlFQ0RBOUYxMDZFNUE2RkU4Q0JENThCQjBCOUNBODVCMUZFRTY3NDJEM0I2NEM4NkZBOTdDQzNERTVERkVGMjBDNUZEMzMwQkEzQkIzMThCNjFCN0ZFQUUxNDYzLCBCQkVGNTY5RTBDQzlBOTZDN0ExQzBDQzREM0Q3MDYyMEJENUU5RDUzQTU4QUNEN0NEMjVCRjIxNjc4REM2RUZGQUExRjg5QjFGOEYzOUU3NjMxQTlBMDdEMjVDMTlFMUM2Nzk0OTU4QUIyQTYwMEIyNzgxMThGMEUyNUM2MjIzNDg3LCAxNDg3NDNFM0Q5ODkyNUJFRUM1MzNDMjZCMEUzQUQxMDFDQTI4QkM3NzAxQzU0RjE2QTkyQ0U3MEIyRjM5QjY3REJDNTk4NEQ4MDVDNDE4RkU1Q0IwOUY0MTM0QzJGRjU4Qjg2MEE2NEI5Q0ZEODY2QkFBNDcwRUEzMkRGN0RERDY4QgorMTNGNEZGRkVCOTg0MzRFMjUwQkRBNzIxREJBREM2OEZERDMxNEIwRjRGQkE2MzgwQTMxMjJENUY5MTE1RkNCMzVDODdCMjJFNTk0RUZDNzY0QjlCMTlGQ0Q2MjUxRjc5OTIyRUIzMTk0QTIyNTI3RkMwQTNEMjksIDFDNjU4RTkxOEFENDgxOTAyRkZDQjY5N0FGNTJDRURFM0YyNjI0NDk0MzYxNDVCNzRBRDE0N0QyRDhFNDU3MEZGNjMwRDU0N0FBQUI0RjBBREFDMzI5NDVFNTU5NjI4QTU1MDhDNjBFMzc3NUYwRjdCM0M2MjIyMzk5NUNFQjU2QUJCLCA3QkQ4NjExNjNFRkJFQzI0Q0NDMzhBNDJFMUVBQTlEMkI5QkEyRDJDRDg1NDU4NzYwMDRFQTY2NUYwQUJEMzc0RDM4RTlBNDc2QjI5MUU1N0RCOTJERDUxM0QxN0I5M0M4N0NFREVCMUExODdGQkY3MjI0MTZCNENFMjcxMzg0QkVFCiszQkRFRkZGQzJDOEM5RUE2RjIzOEY1NjU5MzA5NTNBRjk3OTNFMTJERUYyRjJBODFFOTM2ODgxRUIzNDFGNjFBMTU5NzE2OEIwQkVDRjU2MkUyRDE0REY2ODI2RjVFNkNCNjhDMTk0QkRFNjZGNzdGNDFFQjc3QiwgQUYxNDMwQ0NGQjZFOTY5MDVDNjAxMzJENzExQ0EwMTgzREM0NTY1MTc0MTNENkI0RUE3OTM2MEVFMjRERjRDNjFDRUUzOEQ2N0Q1N0Q4RjZCOTdCNzk5NkZDRUZBNDkzNUMyRUFFOTBEQzFGN0VGNkNEOTNCNzkyRUEwOUNCNzJDQSwgMTVCQkVCMEIyNkRGMDhCQTNCQTNERjA0REExNURFRjMzMzQ0NUM5RDU4ODE2NkU4RjVFN0M0MzMzRUZFREFBRTIxNjIyOEE3ODlEQjVFOUI3NkE5RjlGOEM0NjNDN0QwMjhFQTM4OTk1RDM3RDY3NTVFOTU3NjlEMzJCNjhCOTM3MzYKK0IzOUNGRkY0ODVBNURCRjRENkFBRTAzMEI5MUJGQjBFQzZCQkEzODlDRDhEN0Y4NUJCQTM5ODVDMTlDNUUyNEU0MEM1NDNBMTIzQzZFMDI4QTg3M0U5RTM4NzRFMUI0NjIzQTQ0QkUzOUIzNEU2N0RDNUMyNjcxLCAxMUVCMjEzMEJDRENFOTFERkVCRjQ3Nzg5OEUwMEY0NkNCNDc1QkY1QjI3RTdDNTY3OUJEMEIxNjdBRUZGQ0U5REE0N0Q0OTlCNEEyRjEzREM0REU5RTcyMjM2NTlBNkE2NEQ2REUyQjI0NkM0NzVGOTNBNEUwQUI2OTM3NEM3N0NCOSwgMUQzM0Q0NzgwMkJEMDUyNUE0Mjk0QTAxQUFGQTFDNUJDNDQ1RUE2MDlEMUM5MUQwQTM1QUIyNTE0NTk1MUJDOTc2NjE0OUVFMjE5MEZCRkY1NzM1MDE4NzY3NUNBNEYwQTJFMkY0Q0RCRTIxQUE1ODA0OEU1MzhEMzA4MjczNUFGMDgKKzIxQUQ2RkZERDkwRjE5M0RFODQwMEEwOTIyQjUzRjEyQzU0MzJFQTlENjhBODdFOTEzMkVBQzkxNDRENTFBNkVBQzI0RkNBRTM2QjU0QTA3OUY5NUJCREFBOTVFQTUxRDI2QUVDRTNBQUQxOUVCMzc5NTE0NzM1MywgMUEyRjE4NDA1QkM3QTNENTA5QjY5QzFEMDU4NTZENENFRjk4MzRFNzlBMjU2MjczOTA1REZBNkY4Qjk2NTk2MEIxQTczNTVDOEY2MzY1QzlEOUY0RDI1NDA5NzlBRTY4RkU2RDRGODlGMUM0NjI2MjhGREJGMkMyNUY0N0E5NDk2QzUsIDE0REFBNkJCODI0OTg5NzQ0MUE2RTE0MjI0NDE2N0I5REYwNkU3NEQ3OTA1OTEwQTE0QUU2NDVBMEQyM0FFQzNCNEM1QTE2MERFNjBDOUZGMURCMEFDNEEyQUMzRDU5MzJENzdCQkMyMkQwMkFDMkRDMTg1MkYzQTlGMzU5RDM4RUVCCis2NTA4NEZGOThCMkQ0QkI5QjhDMDFFMUI2ODFGQkQzODRGQzk4QkZEODM5Rjk3QkIzOThDMDVCM0NFN0Y0RjRDMDQ2RUY2MEFBNDFGREUxNkRFQzEzMzhGRkMxQkVGNTc3NDBDNkFCMDA3NERDMUE2QkYzRDU5RjksIDFCQjlEOTlGMEIzNEY3MTY4M0Y5NjI5RDNBQ0MxRUMwRTcxMDg2MUU5OUZGRUMzQkZDQTAzMTQ3QUZCQTRERjI1MDI0N0UyRTNBQzBDMTM5QzU0QzlEQjc4RjNERTRCNkM4OEQ4OEM0MzVDMDI1M0VFMzBCQzU1QTBGNzVFQzZDRkYwLCBGMzkwQjg2NzExRUMxREE0NjBGQTczQUIxQzc3NTM0MjhBQjU5MkZBQTc4ODQ5MjcxOEQwRUQ1OTZBMzI3MzkxNEEwQkRCNEVGNDNBREQ4NUE5QzA5N0Y0OEQ3QzYxNEUyOEZDREIxNEFFNjIxMjlBQTJERDc5OTRDNUY1MUM3RDdCCisxMkYxOEVGRUNBMTg3RTMyRDJBNDA1QTUyMzg1RjM3QThFRjVDQTNGODhBREVDNzMxQUNBNDExMUI2QjdERURFNDBENENFMjFGRUM1RjlBNDQ5QzQzOUFBRkY0NTNDRTA2NUMyNTQwMTAxNUU5NDRGNDNEQjgwREVCLCBBQjcwNzcxQjU1REMyNDA2REEyQ0ZERjZBRDM2QkUwNUYzRDZCNzEzOTE1MDQzMzNDMkFEQTg1MzY3MjE1NTk5QjFGNzU0ODNFMzI0MzI3MDlBRjAxRThFRjJEQzdCMzkzQjY5RDBBNjZGNkJCNTI3NDlFNTFBOEM4NTVFMkIyMTY1LCAxQzkyN0QyMzBEREVDOTkwOEUyMjAyRDg2M0UzN0E5MjU0QTlBQjBGMTVCNEFEMzA1OEQ2QjUwODI4NUJGNjM4Mzc5REYwNTEzQzNERUQ0QzVGMDAzQ0I0ODYwMDFGQjlCNUFFQTc5NkU4NTU5Mjg0RkU4MjExM0U3QkM5RUU3MTg0QworMzhENEFDRkM1RTQ5N0E5ODc3RUMxMEVGNkE5MURBNkZBQ0UxNUVCRTlBMDlDNTU5NTA1RUMzMzUyNDI3OUM5QUMyN0U2QTY1RkM1MUVDRUNERDRDQUQwMEZEQ0ZCNkExMzE0NkZDMDMwNDFCQkNFRENCOTI4MjlDMSwgMUNDOTgwMkUzRDUzQTA4QzEwNjNFRjUwNTEwMjQxREFBRURGODBDMTY5NjI1OEY4MTI0MTFBNzYxOUQ1MDBFM0FDQUUzNUQxREMxNjc2MUU5QUIxQjY2N0Y2QTVDRkIzREU2MEM2RDBFMDYyNkRFNDI5QTEzOEZFRjM0MTg5MTA2MjIsIEY0NUMyQ0E1NEIzOTdEQjE1NjQwQzE5RTJGQzVDMjNBNzI3MzQxQTg2QUE0ODVCOTVFNUUyMUVGNTZCREE1MDkyMzk2NDlENERGN0M3MzZERkQ1Qjk0MjNGRTJCOTY0OTQxMzMzQkE3RDYzRjhBRDkyRTZDRkIwNDA5OTJDN0Y2OTQKK0FBN0UwNkY1MUFEQzZGQzk2N0M0MzJDRTNGQjU4RjRGMDZBNDFDM0JDRTFENTAwQkYxMUM0OTlGNkM3NkQ1RDA0NzdCM0YzMUY0RjVDNkM2OTdFNjA3MDJGOTZGMjNFMzkzRDRGNDA5MEM1MzM2Qzk2MkI3ODdENDMsIDE1QzdDNzdBODVBMDg3NTg2RTM1NDM4NDk2MTRBRjdDRDM3M0M1NkFENEQwNDg2NUE3MkQ5REM4NTcyREVCMkU4MTFBNzVBM0ZDMjhDOEExRDFEN0VDNjEzMTJFMUU4MUNCMDJFRUQwMDNGRjM2OTMyNTlERkNEODc3ODkxQkUxODNDLCA2Rjk0OTlGNEQ5MUY5MzZDMTUzMjg1QTdDMzgzQjhDNjA1OEU5RTY3NkQxRTY4QUE3Nzc4OTYwMzBDODZGOTYwMjJBMDhDREVENDUyN0UyQjk0N0Q0QTI3RTdEMTFFOTQyRjZFQkMwRTc0RTg0RUMyRTJGMUNEM0VDRjU5RENDOENGCisxRkY3QTE0REY1MDk1NEY1QzM3NEM5ODZBQkYyMEFERUQxM0VDNTRCMzZBNTdGMDIzRDM1NERDREU0NTY0ODE3MEQ2NzFCRDk1REVFMTU0NTNDN0IyMTUwOEVDNEQ2QkFBQkI3RURDMUIyNEY5QTQ1QzI4MjY5NzdDOSwgNTQyQjZCNzQ3NzhBQzQ1ODg4NkUzNUE5QTE0MTBDM0RBOUYwRjBFNzc5MzA0OTVCNjI2MzFBQ0UxN0I3QTA0ODRDOUIwMTRDQjE1MzY3NzBCQjdCNkRGQzQ5MTNCMEYzNEU2M0ZGMzNDOTE0ODFDNjNGN0JDMDMxMjIyQkNCNTNBQSwgMTFEOTZDNDA1NzgxMzg5Q0Y1MzNGODE1NkE3MEFBRTg4NEQyNjFGRjM2QUQ3OTI4MTBDQTg1OUEyNzUxQjZDMTRDQTFDOThFMTIzMzJEQUMyOEEzNzY3MUQwNjkzQzVFODE0OTNBNDgzQkNFMUJENzM5MzMzMDM1RERBRUFFRjVBQUYKKzVGRTZFM0U5REYxQkZFRTE0QTVFNUM5NDAzRDYyMDlDNzNCQzRGRTFBM0YwN0QwNkI3OUZFOTY5QUQwMkQ4NDUyODM1NTM4QzE5Q0EzRkNGQjU3MTYzRjFBQzRFODQzMDAzMjdDOTQ1MTZFRUNFRDE0Nzg3M0M2NzVCLCAxODNDMDVCNzBGMjA5QkU3MTcwNDVBQkVBMEI5MUU4ODY0NUQ5MjEwMzA3QTQ1Rjc4ODdDQjVCOEUwNTM4NzgwMUUwNkExN0UzNDU0NUU0RDU0QjUwQTYxQTBBRDg2MTlCNjJBOTQ1M0Q0OTlENENGQTY0RkM1OTE1NDFEMzYwRkE1NSwgMTg1Q0E5RkZBODI3QzlFQTM4RjlFQjBCRjI0Q0UzNjcwMUFFNzk0Q0YwNTM0NEFBRDQ2OUM2QjEzQ0M0MEIxNDI2RUNGOERGRUI2OUVBODgzMTYxMkU0QTA0MkE4ODMyNzlBRTgzNzhGM0MyOENCNTRBNUIzNjdGNDFBOUNFRkE4ODUKKzExRkI0QUJCRDlENTNGQ0EzREYxQjE1QkMwQjgyNjFENTVCMzRFRkE0RUJEMTc3MTQyNkRGQkMzRDA3MDg4OENGNzg5RkZBQTQ0RDVFQkY2RjIwNTQyQkQ1MDRFQjhDOTAwOTc3NUJDRjQ0Q0M2QzczRDY5NUI1MzYxMSwgMTdFMkQzRTgyODlGMUEzODIyMzE2RUM0NUM4MEE5M0YxMTNDMkNDRjkyQkJBRDA2MTZDRTRDMzFGNDdBNjc4NkRFMzEwNEIxNzI3MzNDOUMzNDlFQ0I0NzI0QzU5RjkwOTQzQ0U2QTg3MDY0RjM2MzY5QjQxNzNENDAyQjMzQjg5RDQsIDE0RkMxNEU1QkVCMDg2NjYyMzQwMDY5NkEyRkY0Mzk5NjdDN0UzM0ExNTI4RjU3OTBEMTk2RkFFMENBQTU2ODZEMzhCRDc5NUJCQkE3NDcxMkY0MDZFMTgzQTkyRUI3OTEwMjA4NjIyOTY3NUEyQThCMkVCQ0E5ODE2NjA4NTk2REEwCiszNUYxRTAzMzhEN0ZCRjVFQjlENTE0MTM0MjI4NzI1ODAxMTlFQ0VFRUMzNzQ2NTNDNzQ5RjM0QjcxNTE5OUE2RTY5REZFRkVDRTgxQzNFNEQ2MEZDODM3RjBFQzJBNUIwMUM2NjEzNkRDRTY1NDU1QjgzQzExRkEyMzMsIDE2NzNDMEY0RDZBMjFFQUE1NjkyQUM5MjU2QzY0ODczOEJENzI1MkRGRDE4NEU5NTEyQzNGNUY5MkY4RjUxRTREQ0E2RkVCNzVEMTNGRjc1RURDOEVENzI4Q0UyNDUxMjExNUI3RDY2RTVBOEM3QkRENTNGMTQ4Q0Y3REE3MEU2Q0U3LCAxMUFBRUMzQ0U3REYyQUQwNTkxOTQ5RDBCQjVGNEI1NDM3QTcyODdEM0ExQ0ZDMDZGNjFGRjI0RDQ3MTQ2MzFFMDQ3MUUwMjc4MkJFODIzRTkwNEFEMjlGRkNFNTFEMTdBQTgzOEY1MkUzMDRBMTU3RkUwRUUwNjc0MjY3OEExRDIyRQorQTFENUEwOUFBODdGM0UxQzJEN0YzQzM5QzY3OTU3MDgwMzREQzZDQ0M0QTVEMkZCNTVEREQ5RTI1M0Y0Q0NGNEIzRDlGQ0ZDNkI4NTRCQUU4MjJGNThBN0QyQzQ3RjExMDU1MzIzQTQ5NkIyRkQwMTI4QjQzNUVFNjk5LCBERTMyMUJCQkY0QzU0QUZDRTdEMzIyMTVBMkVFRkVCMkVFMDk3NjdGRkYwNEZBQTZCMjM0MUZBRjc4MkNGOUE5RDA3RURCRTU5MzZGMkIzNkM1ODVFNUQ5OUEyOUI2OUU4RjA4RjRBMkNGRTIxNjQxREVCNkQwNDFDMDhCOTc0RUJELCAxODE3NzAyNUQxRTBCRTc3QTY3Q0RFQjU0MkMwOTg0ODg1MDNGNzAzNjBFQjJGNjFDODIzQTdCMUJERUJCMUE4ODkyQTMwOTdEODVGNDlBQUFCQ0NBMjk3NDVDNUU3Q0JGMTAzQUM2MkRBRENBQTk5NUFEOTUyMDZFRjI0MTFDNzUyRAorMUU1ODBFMUNGRjk3REJBNTQ4ODdEQjRBRDUzNkMwNTE4MDlFOTU0NjY0REYxNzhGMjAxOTk4REE2RkJERTY2REUxQjhERjZGNTQyOEZFMzBCODY4RTA5Rjc3ODREN0QzMzBGRjk2QUVEQzQxOEY3MDM3QTFDQTFDQjNDQiwgRDhERTJFMTZEMzVGQURENTQ2MjhCRjk0RDFFQzgxNjExRTZENzAzQjdEODdCMzcyN0Y5NkZCRjEzMjZEOEVGQ0VFNTQ2OTQ0MkY2MjI5NzA4RDJCOUYyOEQwRkYyNzg0Qzc4QjQ0ODc3MzA0QTg5MDI0N0FDQ0NCQzE2ODcyQTNCMywgMUZFNkVBMjhERDRCMzBERjM5MEM1NjdBQTE1RURFQjMwMDg2M0Y0MjVBNUIxQjNDQzE2QkNEODYxOTI0RUFFNzgzNEQ3M0MwQjEzRkUxQTAzQkIxREQyN0VENzQyNEJDQzAxRTdDMzlBQjNBMjExQThFQTkyNDQ1RDEzNDQ0QkU5QzkKKzVCMDgyQTU2RkVDNzkyRUZEOTk3OTFFMDdGQTQ0MEY0ODFEQkJGRDMyRTlENDZBRDYwNENDQThGNEYzOUIzNDlBNTJBOUU0REZDN0FGQTkyMjkzQUExREU2NjhFODc3OTkyRkVDNDBDOTRDNEFFNTBBNkU1NUU1NjFCNjEsIDE4NEFCRTNGQjAzMTJEMjgyQTRFMERGMjJEQUY2NDA4RjM1RDRGMDhFQTE3MUU5NkRENzUzREFGQjhFMzM0RDlDQjFGOTRGREFBRTI4QTUyQ0FEQUE2MTk2RjhFQzlGQThDNEExMjI4RTVDMEZEMUM3N0I2OTY2MkNGREI5MDgyMURCLCAxODgzMTRDQTA5MDU5NTk0MkQyNUQyNkVFM0E3MUI5N0RCRkQ4RjMwMjJBNzk5QkQ2MTA1NEQ2QkNEN0REODUyNzU5MTAyRTBCMUZEMTNBNEU0OTZCMEQwM0VCNDk5RjQ0RjY2RDgwM0FFN0ZEREJBQUJENkI0M0FEMTk2MUNEMzkyRgorMTExMTg3RjA0RkM1NkI4Q0Y4Q0M2QjVBMTdFRUNDMkREODU5MzNGNzk4QkQ3RDQwODIwRTY1RkFERURBRDE5RENFRjdGREFFOUY1NzBFRkI2N0JBRkU1OUIzM0FCOTY2Q0I4RkM0QzI1QkU0RTBBRjFGNEIwMUIwMjUyMjMsIDJERjQ4NkEzREMzNTQxMEFBRDI3QzY4NjcxMjc4QjFERjA3RUM1OUEzNTU1QUMxRjMzQUM5OTMyNzc0M0VFRUZBNTA0NTA5ODFENEE2M0FFMUQ0NzkxRjg1NzZFNzQ1QjU4RTIxRkZCMDEzMkJDOUY1NDcxQ0Q1OTZDNzVDOUUyRDEsIENEREY5NDJGQUM5RUM1QTgzRDM0QzFFNjFCRkM2REQwNDMyRkNGMjJBMDNFNjE3QjJBNzZGQjQzMkFDQ0YwNzZFRTU1MzhEOTEwMTk4MDlDMjU3RjMyOUQ2NzBERDMyQkM4NjEyMzZDNDZGODk4NTI2MzU1NjQyMTczNEUyREI0N0UKKzMzMzQ5N0QwRUY1MDQyQTZFQTY1NDIwRTQ3Q0M2NDg5ODkwQjlCRTZDQTM4NzdDMTg2MkIzMUYwOUM5MDc0RDk2Q0U3RjkwQkRFMDUyQ0YyMzczMEZCMEQxOUIwMkMzNDYyQUY0RTQ3MTNBRUEyMEQ1REUxMDUxMDZGNjY5LCBGQzQ3RjM5RDlBOTM0MkQzMkNDRDdFRDE1NTBCMTdGQzc2REJEOThFNEVDNjQ4NDkxRUFBM0FEODFFQ0NENDk4RTc1OEVGNkU2OEUyOTQyRkI1NDM2RUMyRjE4RTZFMUE1OTQ1NTUzNEQzNjY0NUFBNkNFMkVFRjdBQkVBNkE0MjlGLCA3N0I2NEQwQzg0NDJDMTYwNzFEMDZBQjJGNTZEQzFFNDU0RUIzN0MwMDQ2Q0Y5RDlBMDVBRjE3MTAwNzg5MjQyRDZCNDI2QTMzNTAwNzkzNjY3N0FBN0M4MkUzNjVFMjVFNkQzMzVDNjdFNUE0QzdGMjJFODBBQzRGN0E5MTVEMjE4Cis5OTlEQzc3MkNERjBDN0Y0QkYyRkM2MkFENzY1MkQ5QzlCMjJEM0I0NUVBOTY3NDQ5MjgxOTVEMUQ1QjE1RThDNDZCN0VCMjM5QTBGODZENkE1OTJGMTI3NEQxMDg0OUQyODBERUFENTNCMEJFNjI4MTlBMzBGMzE0RTMzQiwgNzJERjdEMjlEQzM4MkQwNjFEMTdGQTI5Q0RGNEYyQ0E1RkU1MzNGNDRFNkMwQkIzOUFDQUFBNUI1MzU3NDhEMTU1REEyMTVDNTcyQTI0RUZCRUIzRTA4QzQyMkNCQzdDQzM4OTI4MEM3NjRGQkIxMjBCMzc0ODVCRTdFRDc5MzMwMCwgMTM3OUYwNEUzNUUxOUUyODIzNTMxQzBEOTI2ODg5Mjg3QkM2NkZFREU2MTdFQjFGOTA2Mjk0RkM1QzEwRDcxODVBRkYwOUFDQUEzNjQ4NDA5N0VFRkFEMkNCMkQ5RkNEMTY2N0ZDOTRBMjFEN0JGMjc4NDRDMTU3RDhFQjU0Njc2OUUKKzFDQ0Q5NTY1ODY5RDI1N0RFM0Q4RjUyODA4NjJGODhENUQxNjg3QjFEMUJGQzM1Q0RCNzg0QzE3NTgxMTQxQkE0RDQyN0MxNkFDRTJFOTQ4M0YwQjhEMzc1RTczMThERDc3ODI5QzA3RkIxMjNCMjc4NENFOTJEOTNFQTlCMSwgNkFGNDlGNTE2MEM3MkY3MTlDNzQzQzUxNjEyM0Y0NURFRDE3N0ZDOTc5QTUyNTdFQjQ1OUQyOTNDQzQ5QzZENkM4NUZBMDE5QTFCMjVBNzVENUM1QzhFRjVBQjJEN0Y0NzE3MjJCQUY0MUQ4ODA0MzVDRDMzM0YxRDM1QTExQTFGOSwgMTdBMDkyRjU0RTIyNEYzRjVFMzcwRDYxODhCOTczNUQ3N0JBNTlBMTZCRjE4QkRCQTI3Qzg2MjJDREIwQzRBQUFEREU2NzY5NzVGMzZBNzE1QjFGNUM5OThFNDYzOTczQzU2RTUwNzdEODEzNTE2MDVERURDQzg2RTE1NzlFNEY0NUMKKzU2NjhDMDMwOTNENzcwNzlBQjhBREY3ODE5MjhFOUE4MTc0Mzk3MTU3NTNGNEExNjkyNjhFNDQ2MDgzM0M1MkVFN0M3NzQ0NDA2QThCQkQ4QkQyMkE3QTYxQjU5NEE5ODY2ODdENDE3RjEzNkIxNzY4RTZCQjg4QkJCRkQxMywgMTUwOUZFODM1NEUxQzBENDk3MDRGN0M5RTM4NEI0NEVFMTIyRjIwNkE3M0ZEMTVENUZFNUMwODkzQTM1QkFDRkM2NTdBMkY0NTlCNjkxOUM2QTU5RjhCMTY0ODVERDg2OTAxRDVGQzAzMzRDN0Y4RjU2RkUyRkREOUNENzEwQkFGQzMsIDFBMEZBM0UzMjE4MDIyNjA0OEYzOEZGRTYwOUJDMjZGRDIzOTdBMDkyRDZBOUNGMUVGNEY3NkM2ODJGQ0E1RTBBOUJGNUIxN0U4NzczN0NDMTg3NzIyQUI0REI4NUUzNUU2NDM1RkJEMEIxMDEzNkY2OERBQkEwMDlEMDNDRDU1M0YxCisxMDMzQTQwOTFCQjg2NTE2RDAyQTA5RTY4NEI3QUJDRjg0NUNBQzU0MDVGQkRERTQzQjczQUFDRDIxODlCNEY4Q0I3NTY1Q0NDMTNGQTMzOEEzNzY3RjZGMjUyMEJERkM5MzM5NzdDNDdEM0E0MTQ2M0FCNDMyOUEzMzNGNzM5LCA0NkRCRUZEQTQ2NzgwMjkxMzdGOEQyQjUzN0Y4QjM0MThGQ0VCMzVBRDRERTlFRkQ3MDE2RUExMEFCOENDODNGNURFNTI1QTRBRjQ0Qjg1RDg3MTg4MDQ5MDM0MEMyNDc5OUNGRUM3QUVCN0RDQjhBMjdGMzI4Qjc4MDMzREEzRTNBLCAxNzA4OEUwREE3MEE0RTk1QzVBMDVDM0M5RTdGQTFFNjQ4MDM0OTdDOEFERDg1Q0M2QkUwMEYxRjQ3MzBFQ0MzRDgzMzIwMjUxQkVBNkY5MDNDMjZENTE4QzY0RDcwRjAzOTFFNDBGNTIzOTREMjBENDY0QzRDQjFBRERGRDE3NzY1QgorMzA5QUVDMUI1MzI5MkY0NDcwN0UxREIzOEUyNzAzNkU4RDE2MDRGQzExRjM5OUFDQjI1QjAwNjc2NDlEMUVFQTYyNjAzMTY2NDNCRUU5QTlFQTYzN0U0RDZGNjIzOUY1QjlBQzY3NEQ3N0FFQzNEMkIwMUM5N0NFOTlCRTVBQiwgQkQxRDExNzJGRUEzRTQ1N0JEOEFENTQ0NEUyM0MzMTg1RDMzQjYzRjkwMzgxQzdGNEVEMzVERDVBQkFENDIyNUVCOTZDOTRCMkFDQTZENjQ0NUNEODA1NDkyRkFFRDE1NTM4M0NCMkFEQ0FGOEQyMTA5RUQ1N0ZGRDEyREJDNjBENywgMTI4MTg3REJEODcyRDJGRTk2MTEyQUQ0NjcwNjYxREUyQjFFMUZGMzE1RUM0NTQzN0REMUQxN0YyMjg1NUM2NDE4MTY5OEVGRUE4NzA2MkVBMEIyMUU5OTIwODExQTA5NjE2REQ3MkE5NTg4RDRDMkIzQzA1RjJENzUxNTU0QTk4NkYKKzkxRDBDNDUxRjk3QjhEQ0Q1MTdBNTkxQUFBNzUwQTRCQTc0MjBFRjQzNURBQ0QwNjE3MTEwMTM2MkRENzVDQkYyNzIwOTQzMkNCM0NCQ0ZEQkYyQTdBRTg0RTI2QURFMTJEMDUzNUU4NjcwQzRCNzgxMDU1Qzc2QkNEM0IxMDEsIEFCNjU3QTg0RDAzQ0JFOTBFMzIxQjBDMTMyQzU5M0E4N0UzMjI5QUI2Rjg1MjZCRTIxMjcxOEI0OTM4RkI0MzFBMTBENjEyMTQ2RjJGRUEwOTdBMjU4Q0JDM0M2NDkwRDkwMTBENEJDM0M4RDQ0OTUxMkE4NjQ0RTMyQjRCMjgwMkYsIEJFNjEwQTBFREEyMUE4Mjg0RkU3QUYwMUFFMTYzRTkzQzdBQTcxRUNDRERCNTBCMTVEMkRFOUExM0ZBQUI0MzYyQzJBMjlEREIzQkI1OUFDQzhERjkwMDI3OTZCMTkzRkI5QzY4NkM0MjlGNUM4OTYxRUNDRTk0NkY5MDUxODQ5RkEKKzFCNTcyNENGNUVDNzJBOTY3RjQ2RjBCNEZGRjVGMUVFMkY1QzYyQ0RDQTE5MDY3MTI0NTMzMDNBMjg5ODYxNjNENzU2MUJDOTg2MUI2MzZGOTNEN0Y3MEI4RUE3NDA5QTM4NzBGQTFCOTM1MjRFMjY4MzEwMTU2NDM2N0IxMzAzLCAxNkZEQkNEODc5MDdGNzY0MDI1MEU1NjJENUQ3RUE1RkYwQzFFRUU0OUEwRDYzRkE3QTU2RDZCODQ4NzkzQkYxQkNEOTc1NTAxMUZGRUE4MTEzMkE5MzY0NDA3RjI5OTE3MEEwOTVGRTg5QjlBNkEzREY5RDc5QUVFNzdGRDM0MUQ2MiwgMTI1NDg0NDFBMEI2MjkwMDk0NTZFQUQwOUREMDVGMERFMUZFMTc4RDcxREI3QUIxNDBEMzJCNUQwMjA4MjY4QzEyNUJENkM2MDMwNEY0NTBCNENCNjg0Q0JFNjc3OThDOTFENENGNzBFMTdEMkRCRkU2RTFDNEMzRTcwQkFFMDM3OTYKKzUyMDU2RTZFMUM1NTdGQzM3REQ0RDIxRUZGRTFENUNBOEUxNTI4Njk1RTRCMTM1MzZDRjk5MEFFNzlDOTI0MkI4NjAyNTM1QzkyNTIyQTRFQkI4N0U1MjJBQkY1QzFDRUE5NTJFRTUyQjlGNkVBNzM4OTMwNDAyQ0EzNzEzOTA5LCAxMDQ3MEE4OERGRUQ0NUQwRjE5NTk1RTY3MUQ1MzU4MUY1MUU0QTJEM0EwREE2NTMzRjg5NjMyQUFCMjJGQ0I0QkZCQjAyNTU1NEY3NjJBMzJBRUFFRTZBMTEwMTEwMEY5QzAwNkEwMzdCQzZEQkVDRDc5QUE3NjFGMEU4NDNGMzk1QywgNjU3NDU4REVDNDRDQ0FBRTcwNkNCNTUyQjM0QkRDNTdFMzRGNDZFN0IyNEIzREI4RDNCMzQ2RThEM0YwNjZEQ0JDN0FGNkZGREM1MjExNUQ3NkE1NTUxQzk5NkZFNDYwMzdBNDUyNzk1NTNBODUzMkQ0QTYyODgyMTFGOTY2RkE2NAorRjYxMDRCNEE1NTAwN0Y0QTc5N0U3NjVDRkZBNTgxNUZBQTNGNzkzQzFBRTEzOUZBNDZFQ0IyMEI2RDVCNkM4MjkyMDZGQTE1QjZGNjdFRUMzMjk3QUY2ODAzRTE0NTZCRkJGOENBRjgyREU0QkY1QTlCOTBDMDg1RUE1M0FCMUIsIEE5QzdCNTMwQThDODJFRDNEREFDMDkzQzY3OUJCQTlDMTBCQUU0QzZFNzBBNDZDRTY5OTA1Njc4MjIxMkMyNTFENDY1OUQwMTc0QzgwRUI0QTNBOURBNUMxMzA5REU4RUFCNjYwRDE4MkIxOTdDQjcwOTg0QzM5NEIyODBGMkZFNTEsIDFBOUFGRDM1NkY5MDRERTU1Qjg5RTY2NDE0NjYzNkQ1QUEzODMzQzlBOENEQzNEQjFERTZBNDBCMTgzRjJCNjU4QUI3OUYyOTAyNEFGMzgyQUI2RTFFMEY1QTQ1MUM5RjU0Mjg4ODY5RjlFQjcyOEUzQUU4MEUyRjAwQjc4NkNFODgzCisyRTIzMEUxREVGRjAxN0RERjZDN0I2MzE2RkVGMDg0MUVGRUJFNkJCNDUwQTNBREVFRDRDNjE2MjI0ODEyNDU4N0I2MTRFRTQxMjRFMzdDQzQ5N0M3MEUzODBCQTNEMDQzRjNFQTYwRTg4OUFFM0UwRkQyQjI0MTkxQkVGQjAxNTEsIDEwQkZFQ0IyRjg2OTMzRUYyRDNEMEY0RkMxQjhCRTRDM0MyQjZBRUExRkFGQTRCREMwMEM1RTI2NDU3NTUxREZFM0ZERUNCODExNDU5NkVBRDM0NDVGQjNGN0MyRDY4MDdBQUE0Q0Y0NzZDMEY5RTIxMTZFRTIxMjg0OEUyMkY3RTY0LCBBQTAzQUYyMzhDMjI4NTM3RTE1MjhBREI1NjI0Mzc5OTY0NUVDQ0NBOUFCNjJENzhENDM1NERBNkIwNkVBQjU5QjdCMUE2MUJFMTAzQ0Y1MkFFRjZGRDAyRTM5OTk0QjBFREY1QjU1RTVFNjgzNUUyMDcyOUJBNkNDM0JERkQ3QjgxCis4QTY5MkE1OUNGRDA0Nzk5RTQ1NzIyOTQ0RkNEMThDNUNGQzNCNDMxQ0YxRUIwOUNDN0U1MjQyNjZEODM2RDA5NzIyM0VDQUMzNkVBQTc2NERDNzU1MkFBODIyRUI3MENCREJCRjIyQjk5RDBBQkEyRjc4MTZDNEI1M0NGMTAzRjMsIDg5QzlDODFCNzg2MzA1NkEwNEQzNUE4REE1NjZGRUQxQTU4M0IxMUEzMkMxMzlBRjVFRDUyQjZCM0M4NDc2M0NEOUQxNkEwM0ZFOUY4Rjc2RDY2RDkwNDNBMTJDQkE5OUUyMTYwMTYzNDYyNTUzQTI1OUU3REJCOUUzOUIzNkJGQ0EsIDFBQ0E2NDY1MTZGQkNEQzc0MTk3MDJBNTM3NTdCQTJFRThFRUFDMEQyMjhGNDk5ODcwQkVERjY4NjYxRjhENTZGRjlCNDRGODI5QjZGMERDMzJENEM3MjA5RjgxQThBODE4QzgzQjhEQUUyMzM3M0M1RkI0ODIzMzUwMDdCNTI4N0ZECisxOUYzQjdGMEQ2RjcwRDZDREFEMDU2N0JDRUY2NzRBNTE2RjRCMUM5NTZENUMxMUQ2NTdBRjZDNzM0ODhBNDcxQzU2NkJDNjA0QTRCRkY2MkU5NTVGRjdGRjg2OEMyNTI2MzkzM0Q2ODJDRDcyMDJFOEU2ODQ0NEUxRkI2RDMwQkQ5LCBDODM4RTA5NUQyNTlBREMxMDgxMTgzMjE0OTMwRTM2OEJDM0M2OEMyMjY5ODNCMDgwODMxNEE3QjVDNTQ0MDBGN0VFNDdDMDkzMjMwQzM2N0FENDZEMDY2MTZBQjg2NEEyOTNDMzUwOTczMkY5OUM0RTRBM0JGNzYyNzdCNThDRDIwLCBCNUE0QUNEMzJGQjMxNEIxQTBGRURCNjg3Q0U5N0ZFMTZDQTAwQTcwMDRENzMwMzZFODBDNjI0NjQyMEQ5RUE1MjExREIwQUNBRDA3ODEzQzhFNzRCMDM3MDA3MzkwNkVDN0FCM0IwOTYyREIzMUE2MjRBQzg2QTAzOTE0RTUyRDA1Cis0RERCMjdEMjg0RTUyODQ2OTA3MTAzNzM2Q0UzNURFRjQ0REUxNTVDMDQ4MTQzNTgzMDcwRTQ1NTlEOTlFRDU1NTAzNDM1MjBERUUzRkUyOEJDMDFGRTdGRTkzQTQ2RjcyQUI5QjgzODg2ODU2MDhCQUIzOENDRUE1RjI0NzkyMzhCLCAxMkI3QkE4Q0RDRDc2NjMwOTg4MjkxRUY5QjlGNDE0NzExQkVDQjkyMzIwN0JEMTY0MUY2MzY1MEQyRUI3OUYwM0Q0MjQzOEIyNzVBMjI2MUM2OUY3REQ2RkE0Mzk3OTQwMjJGRkM5OTdDODBGMTJCMTI1NURDQUU4MkE1MEFFQjMzMSwgOEIzNzU4M0NGMTUxQkI5NjhENDM4RTE3RTIxNDgwQTcwMTI2MUMxNDk2M0ZBRTRFRjM3RjlCRkExMjE3NEQxRkI0NzdEQUVBREFGNDQ3REE4MTg4RTJEODlDMDUyMTc0MDczRUQwMkNEMDE0Q0YxNkE4N0QyQ0M3N0ZCMEY0MkY1RQorRTk5MTc3Nzc4RUFGNzhEM0IxNTMwQTVBNDZBQTE5Q0RDRTlBNDAxNDBEODNDQTA4OTE1MkFEMDBEOENEQzdGRkYwOUM5RjYyOUNBQkZBN0EzNDA1RkI3RkJCQUVENEU1ODAyRDI4QTk5MzkwMjFBMzAxQUE2NkJGMUQ2RDZCNkFBMSwgMUFBNEQ5OTg1NEM1NTRCNEJDMTEwNkM2N0I0RjRDNzQ3MUMzNTAwNjg5NDkwOTc0MTBFQ0M5MzRDRTFEOEE5MzUyMUZFRTcyQjMyOTgwRDUxQjBDNEJFQjRDQ0M0RjI2NjYxRUQxN0FGNDlEMDhBNkI2ODUwRjAxQzk4MTE5NjA2MzUsIDFFMkZEQTdFQkU0Qzg1ODFDNTM0MjU0MEEyMkM2QUUxMkQ5OTFENUQ0QUI2N0NBQ0MzODA3OEYwREEyODA5MDJFOTBFNkExNDYwOUU5RTQwNDcxMUEwNDhBOEZFRjhBNzVEQTQwOTU3NDk0RTE1NzdEQUFGRUQxOTlBNjZFRTk3QzVGCmRpZmYgLS1naXQgYS9ub3Rlcy9scndfdHYudHh0IGIvbm90ZXMvbHJ3X3R2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDUzMjUwCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMvbHJ3X3R2LnR4dApAQCAtMCwwICsxLDEyNiBAQAorMTY6OTMxYjQwYjk3Y2QxZDEzMzhkNGE0YWJkZjk2ZDFmNDUKKzE2OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmCiszMjo4NWU4MmZlNWU4YjQyNmNmMDRiZDk2ZDlhZWQzMThmYjVkYWU4OWExZGZiODU0YTA5ZjU1NmI2MWM1YWM5MThiCiszMjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCis0ODpkZDdhYWQ2YzZkMTAxNzZlMjVlYjk3ZTE2NWJhNjEyYTJiNjI3NWQ5NzY2NzEwMmYyMGFmMjBlYzI2MzBjN2NjYjRmNTc3MmEzZTAwOTk0OGYxZWE5MWYzYmJhZjdlMDQKKzQ4OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZgorNjQ6MzM4NTA5ZWQwMjFlZWNkMjQ5Y2IxNWNkZDQ0MGE4NGZmOWQ2NzA0Yjk5ZThlNTJlOWQwNTdmMTUyYjc0MmE1ZTNiOWMzMTQ1NzQwMjZjNzZmYzg4N2ZiNDA0YTEyZDY2OWVlYTk0NjBjMWZhMDhlMTg2N2MyYzAyNzQ0MDhiOWUKKzY0OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmCis4MDo4YTljYmZmMzY4NzRkZTdkYTNlMjBlOWEyNjY5MWVlZjk0NGZmNzhhNzIzNDE1MTVhZTIwYzIxOTk2ODhmZjkyZjAzOWExOWRjNmQ1MTdlMDE3ZWYzNjY0NzgzNGRlYmVlOTBiZjgwYmEyMGE3Y2FmMjQ5NjRiY2IwYmIzYTYyMWY4MjAzY2U1NDI4NDYxZDNlZTcyZWFkN2FlYjIwMWE5Cis4MDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmCis5NjowNmViNjZhODhiOTY2NzI5NmI4NjQ0Y2RhMzQ2NGEyN2UzZTJkOGI2YjNkMGE5ZmZiZWJmZDQ4ZjM5Njc5NTJjZTE2MWQ4ODY3OTAwYjBhN2E0NDYzOGE2ZTQxYjlhOWRjNTNiZjE4M2E4NWE0ZWUzM2JiNmY2YzJkNjRiOGNiNTRiZmJiODYyNWZmNWNkMzk2NWFhMDhiNDYwNzM3YjU3NWRhMGI4ZjQxMjM3NTFjZjhmMGFlODAxYzU4NTY3MTIKKzk2OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZgorMTEyOjdhZjVhMmIxMzgxYThiYzVhYTJiZGQ0MzcwYjg4ZDY4MGMzNGJhOTMzMmQxZDlmNmUyMDNjNGQ5ZmRiZjVlY2UzOWZlNWFmYjU4NzE0OTBhMTgwYzRiMTAyNjY1ODIzZGFiZTEwNzk2NTZmMjQ5NjliZjg0MjY3ZDMyNjRmOTJjYmJjNjEwZjI2MjAzNTM2ZDM4NzMzMzkzOGQxYTUyZjQwNzZkZjFhYTBhMTE0ZjNiMDE4MmRhMTJjM2E1ZDg3YmRjOGVmZjU0ZjgwYjBkNTZmNzA0NGJhMzcyZWU2MzY2CisxMTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmYKKzEyODo4MTRmZTgyNjc0Yjk4ZDU0NjcxODY5ZTNmZDcwNWY3NmUzNTM3NjFiZjYxY2ZjNjM1ZmJiMjMwMzdkOGEwZTBkZmMxM2M2YzBlMzRmOGM3OWQ0NDQ0YWMzMTRkNDkxODc3MzI2NWIzZmI1ODY2YTk5N2UyNzBkNWVhODg5MWYwMjE3ZWM2NzQ5ZGYyODFkNzkwZGZiYmVjOGFkYzUwNDQwNGNjMGE2ZjExZTkxZDBlZTZjMTlhYmRjNjdiMGMyMmVhNGQ5ZmEyMTgzMjBhNjk0ZGNhNTNjZjUyMmM3NjFlNDI2ZTBjZDU3ZTQ5YjczYTVkNzY1Y2I0YmM1NzFlODg4CisxMjg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZgorMTQ0OjlmYWI5NTg0YjBkZDg3ZGY0MmYwNzUxM2VkYWQzYjVlM2EzNWI4ODcxMzIzZWVkNjNhNDhkZWQxZWZlNDMwOGE5ODgzNTc5ZjNhN2FiODMwMjc3YmRhNTliMWYxYzI2MTRhMmNhYmUxMWNkZDg3Njg5YzBiYWU4MGViYWQwMmI3NmQ5MzAwNzAzZDAyNjhlMGViMDUyZDk5NTZjNTY0ODkxMjg0M2IxNmJlOTg4MTM0Y2ZhZjY1ZmE4NzAxM2FiOTYwYjE5MGFmZWE4Nzk4OTdmMWZkZDAwYjM2MGI2YmZjNmNjMzUzMTI4NTY4Mjg5NGI3MDdhZjU5MTRkMmQxYTEzNjQwN2Y4NjlhZTY2NzJlMDk2YWQ3ZTk1ZjM4MGQ1MworMTQ0OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZgorMTYwOjk1YWExNmU2MzdmMTQ0OWQ5MDEyMjM3ZjVmZDk1YTU3YzVhOWUyMDNjYTBhOTM5Mzk3NWU1OTkxY2M1NjhmN2FkMmFmMzI2NmFiNjA1OTE1YWYyNzdmNDM5NWFhMzEyNTg2ZmIyOGExOGYyMmQxNjQ0OTYzMjMzZTExMjE0NzI5ODAyMjlhMzk0MWMyZjI0NzU4YTUxYzQ4YWEyMmI2MWZhNDMxMGVkMmU2MTc1YTcxYmQ0MDU4Y2RiMDcwZjJiODI4OWE0NmEzOTYzNmRiZTI1OWVlZmYzYzg3Zjk2ZmM4ZDQ2OTYxYWFjNTRkN2E4NDkxYjVkNzEzZTZjYzBkNjU1MWI5ZTkwOTExOTQ3ZDlmZDE1MDUxYmFkZjY3NDIwMTg4YzQ1MGY5OTE2YzJlZGFlMjQ1ZjFmNmE2N2U0ZjVjCisxNjA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWYKKzE3Njo1Y2I3ODJkZDllMjM5MWFiNTQzNzgxMjFkMDc2NmFmZTZkMzVlY2VmN2EyY2JkODVhYjA0ZWE4MmIwNmI1NmRkYWJkMzExOTE3MDkzZmYxNmJjMTg1NzQ4MGY4NDA0OWQ4OWVjNjY5NDQxNDYxN2IxY2YzYTExNzc4YzFjY2JmMjJiODFiZTVmMDdlZDZmOTc4ZGY1MDg5ZTU0NTYxZmVjNTNkZTk1MjA1ZmZhN2Q1NzMwOTI2ODhmY2U5MmNhZTIyOGYzNDJmNzdjNTBkZjg3NDA0ZDUwMmE5YjI3NGJiZjNjZmNhZjRlOTRhMWU4NDAxNjMwZTE4Yjc5ZDA0OGE1ZjM5MDFhYmU4MjQ5M2Q5MTFkMzg1ODkwNDA1YmNhZjRkNTk4MWRlZjY3MDk1NWU5NWM1NDZkYTg5MzlhYTY4YWVmZGE1NmIzN2FiZDNiZGNkNDY2NjA1ZjliY2M1OTMxCisxNzY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZgorMTkyOmU5YTc3ODFjNzUwOTEwZjI2NWU3MmVkZjA2NTlkNzZhMGRiMmRhYjg2M2Y0M2NhMzEzYjllNjdlOGY5Zjk3YTFhZDhjZWQ2NDFjNmQ4ZDg4OWVkMmQzOGNhYTc4ODdlYzJlYjkyNDIwOTNiMzlkNDYzMzcwMjczMWI5NmUxMWRhNTJiMWE5YTU4NGQyMzY3ZTZhMGU3NTliYWY5MDJlYjkwOGI0NDMyZmZlY2QzNjdmZjFmZGU0NTRkNGFmODQ0ZTlhMTBjYjI2MGFlMjIyNDQ2YzE3OWRjYzgyYjVmNzY3Yjk0MWY3NTE5NmU4YzRiMjEwMzE1ZDAxYjAwNmZhNmI1ZjFmYWY5MzE1NDkwNDRiMTdiMzNmNTY3YjcyOWRkZWExMTVjN2IxMWM5MDk4MmUxNDgwMTAxZTk4YWFiMjNkYTY1MzNiNDA3Nzc5NzFiNGFmYzM4MTVkMDYzZWYxNzU0MTlkZDcyYmRkY2RjNmJiMTg3YjM1MTJjM2JmZjU2ZQorMTkyOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZgorMjA4OjhmZDMzYWMxNmY4ZDliZDJhYjI0ZDFkMjZiMjY3ZjY3MjIyYjkzMDlkNjk3NTAyYmQwMDFiYjQ4YjhjMzIwNmJkNWM5OGNjMWNmZjc4ODYzM2NkYTRlZGI1YWFlZDIwNTU0MzVjMmMwOTJhN2M2NTU0NTVkMWQwMWE2ZDdhNDQ5ZGY4NzBkZDU1OWU5YmFlMWUwZmIwZDZlNWE5ODY3OTQwMmMyODhiODdjYmRhNTY5YzM1MDNiNGFhOTQwM2Y4MGM4MzVjOTk1ZTNiNDdlMzNjMWM1YjgzMjFlOGRiMWI3Mjk1NWNjYmRmNjQwYzc4YWFjMzc2ZWM0NDkzOTZiMTYzYjhkMTZiNTFiMDc0OWZhYjZiYTcxZDBiNTYzZmVmNmU5NDcwMmYzNWZmMmVkMTgwZjBkZTFmODY2NzlkOGYyYTI2YjJiOWQ4YWRmZmM3YWQxMWM1OTQ0MTE4ZTMwMDI1YzliZTI2NDMxZjEzMGFhMmJjMjM4ZTRiMDEwNGRkZjlmODI2MzBhYjdlZWE1OTBiZDdlYWJiMmRhNzQ1ZmZhCisyMDg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2YKKzIyNDphYzJkYWE2YjMzMDIyNGI2ZjE0NmFkNjdlZGViYWNkOThjZDIyNjlkMGNiMzEzZmRlNDlkODVhZDYwZjliMjFjOTkyNmQ0MTFmZDQzNWJlOGJkMDczZDI5NGU5MDVhY2ZjY2VhMjcwOGY5OGUwNWNjOWRlZDNjNzdlNjg0YjY3MWJkYzU5ZGVmZjNiNDNmYjkzMTM4MWIxMjEzM2NlMzg2YTAzMTRhOTM5ZDZjNDg1NWJiYjc3NjVhZGY5NTVmNGU1ODdiZWJhZjZkM2I4Y2Y1NDdiMmZlZGE2MGMzMjZlMzQwOTgzMzY2NWY2MWQ5MWEyNDUxY2EyNjkzYmFkNjc3OTA5NGUwMTBhMzgwNDk5M2Q2MDc4YzFhYzNjMmQyNmQ1ODlhOGIzMzc2ZGQwNjI0MWIzMTM5ZDJhZTYwM2FlNWM0ODI5YzI5N2YwOWE1YzUzNWMzNzk5OGY1NzFiMGU5Njg1NWU3YTcwOGQ3YjJhYzQyNjU5MDUwNTQ3YzdiZDQ0N2JiZWJhZDkyZTk4YjIwM2NlNmU4M2JhYjhlOTRmMjMyNDE3MTUyYWM2YmZlOGY5OTgyMDEyYzhmODNjNjc0CisyMjQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZgorMjQwOjVjNGQzNDQ0OGNmNWI1YjM4NWE4YWE5ZTUwNGQ3MjRlNmU2ODlhMzVmZjM2MTQzYzIwZmExNmRmMTZmNzQzNDdkZjZiNjVlZjM1NGMwOTQ3MzJmZTFiMzFlNDU0ZTMxOWE3YmUyMGRjNmRmNGI5MDBkZDY1MjdmZWI1YjdjODFhN2E0MGRmNzNkNTEzY2Q0MGE1ZTFhY2ZkYTRiYTllNGZlZDc4NGJiMjZiMjcxOTg5OWM2MGE1NGJkOGM3NzJmMTdjOTVlNjEwMGM2ZGVmMjE2YzljNjEyYTEwZGI2MmE1NzZjZjQ1MzkyYzY4NzM2NDY2MzA1ZjZjYjg2ZjIxOGY1N2IwMzNjMzc3M2QwY2RkOTgyN2Y4MjJjZDQ4MGI2MGY5NGQzMmIyOGY1MzZlNmYwNDY0ZTYzZTg0Mjk0ZjBjM2FiMDg4ZGJmMGVmY2Y5NWIwMjBmNGMyZGRjNzJjNTgyM2MyMTgyMDI1Y2ZkYTUxMGUxYTk0NGFjOTMxNmYwY2VhYmE3ZGJkMTE2Y2VmOTVlMDUxY2E5MTQzZWViZDU3NWNlNTNjMjZjYWI5YWE4OTcxNjdkNTAwZmNiZTIyOTU2MGE4NWM5OGU4MzM4NWNhNmJlZmE5MDcyNmU3NjhiNAorMjQwOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZgorMjU2OjQ2ZDMxYTFhNmZjY2JmZjA0MzVlMTgxMWE0ODUxNzQ2ZGYyYWY1NzcyZGQwNDA4ZmJjYTJiMzYwM2NjNGY5MmY3NzhkZWM4ZjE0ZGFhYTZmMDgxNTAwZGU1NWQwMzZiMzY4MGE4YTliNmM1MGJjMjBlZWJmMDllMzUwMzZiZGVmOWIzNzUxMTY3ZTgwN2NkMWFhNzAzODVlYTlmNGJlNDJlZjRkZTYyMTEwNzllYjBjZDZjMzgxMDQwNGE2MGYwOWRkNGU5OGNjY2IwOWMzNTZlNmI0YzRjYzFkYTAzNmJjODIwMjNiMDc1MDExY2FkMmQwMWJmOTVmYzQ1ODI5YzdhZjQ4NGY5MjU2MmMyNTc5YmQzYjRkYmEzOTY3ZDVjNmJmZGIzZTIyMzZjMmI0MzY1NWU2MzkzY2RjZThhMmNjYTBhZmZiOGU0NWU4NTQ1YWFmMDQwNDljMjc4OTEwOGFjNWJjNmJjZWJhMThiY2I5ZDQ5NDRlZDgxYTY0YWI0M2UyOGUyODIwNzI2ODQ2NGI5OWRhZDczMjhkYjAwNTlkZWZhMjVhNzIyY2JmYWY4OWU5M2EyMDc2OGJiY2U5MWI2NGYzOTVhMzc5YmE1NTgwYTJjYTRhYjJkOTc4YzZlZDNhZWRjOWY1Mzg5NmJkYzI4YWE1ZjEzMDA0NzNhM2RmCisyNTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYKKzI3Mjo5NmE0NjE5MGFjOGM1NmNiMjcyNDg4ZDFkYjNhNjE1M2E0YmU3YTI5OGYyMDBlZWNkNDJiMDY1N2U3MTEwZTg3OWRkYWYxMmE3ODJkM2Y5NDZhMjgzZjIzZmQ1ZmQ5OGRkY2U1ODc0ZWE2NDVlNjU4MTI4NGQ5NGM1NDM3YTQ3Mzc5MjFmZDE1MDRmZGVkNzIxZDlhMTJjOWJhYzhkOGZlZGEwYjFhMzJhNWEwNGUzNjAyZGQzYmVmYWViYjE2MWFmNmRmMTU5MGQyODBjZTA5ZmQ5OWU1NTFhYjM5MzUxZGZmOGNkODVkYzA4NDkyMGEyMWY0OWU3MjZiYWZkZmM3NWUxY2QyYzQyZmM4Nzg5ZWRmNTJhZGNiOGI4Zjg3YjBiN2M4OWM3ZTgwZmI4YTE0ODA3Yzk2OTEyZmExMjUzOTVkNzFmNjMxY2MzMTgxY2NjYmY0MzVkYTAxNGU0N2M0ZGQyNTY0MGNmNzk1Mzc4N2MzZmEyZTlkZTRhODY3ZDYxY2MzOTg3MjRhOTRiNTg0ZWQzMzY3MTVlYzkyYTU2MjIxNWJmMzZjMTkzY2YyMzU2OTczZTYwYjg1OGQzZjk3YTk0NGQxMmE0MDE3MzIxOGYwYmQyZTU2NTgzMzU4MWU1MWJlZTU4MGUzYjM0MzBiM2Q0MWQ2ZDY3ODhiNzNlYmI0NWEyMmE1NDg0NTZmMzkzZjI0OTk5YzQwMTM2Njg4CisyNzI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZgorMjg4OjRlYTk2NDQ5OTA1MzY1MjUxMDU3OTJiNzM1ZTFhOWFkYWFiZjc1NDJmOGQzMGY0MTU1M2Y3NTZiMzNmYTkwMDUxMzUyOTM5ZmUyNjkzYmU5ZTVlNDgyZjlhMmZkMGVhMDBlYzg1YWJiMDFhNTY3ODBiNjE2MDlhYzEzNjRiMjJiMmExZjdiMDYxMzE3OTk1YzFkMmE4YmRkMjgwYTc3MzVkMTE5MWFhNmM1NDY1MTY3MTM1NzcwOTNmMTdiNTY5NmM5ZjJhMmI5NGI3NjZiNWE5ZDI1NTE4OTFhNWMxNzUzMGJmOTUzYWExZGJlYzZhOTU2MDA1NDUzNDE2M2MyNjk3MzM5OWIxMjgxNTZhZjZhMjU3ZTBjNTkxYjI3OWZmMzc2ZDBlMjQ2NGIwNmE0NjRiYzVlNWYzZDRjYTMwOWRkYjlmYzk2ZDhjNTllZmUwMDI3Mzg5ZTI1YWNhOTEwNmI0YTZjMGU4ZTM3MjZlMjY0NzBmMGFhNTllY2JiMTAyMjk1MzMxMmJmNWEwOWRiNzU3MjhjZTQ1NWY2M2JkMzI4NDM3NjIyYmM2MWRjNWY3MDNlN2UwZDQ5YTI3Y2NjMWZhMjU0Mzk4NDhhMTM0OWM3NzkwZDE5MjBmNDY1MTUxMzE4YzNkMjc4NTViZDk1MzIzMTk4MWViOTAzYmRlMTk5MDY2NjdkMjY5MDBlMmMyMzMzMzBmYTBiNmMxNTdkYjM3ZDViN2M3NmZkZmE3YTdlMTYwNjA0NWU5YTE4YTBiOQorMjg4OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZgorMzA0OjUzZWYxZDczNTBjYTljNTJmM2Q1M2IxZjMwOTc5MTlhNGU0OWJjNDhkMmU2M2M1NzFhYmFjMmYxOWYxNjA4NGIxNjMwOGRkOGNmOTZmMzc0ZmFmYmQxYWM3YjNmOWNmM2I5YzYyYWYyNTU2M2ZmMDlmNDE5Yzk0ZjA1MzBkNDNkZGRhODM5NmQ5OTAxMGM4NjFjOTJkNTliM2QwM2JiODQyM2VlYTU1MDQ0MDUzYjA2YmUwN2ZkYWIzOTJjZmY1Zjg1YmU4MTE5Y2UzZTM3ODNjZDAzOTIzZDI4YmQ2Y2JlY2Q1NjIwZmMyNDY1YTlmMmIxYTA4NTBlNGE2ZjM1YzE4OTM4MTliNjg5Mzg3ZTViZDI0NDlhYWY4YjE0OTdhNTk4YTQ4NTk1MDMwYTAwYjkyY2UzNTc1MDlmMjU5NjkwODIzYzBkMWI3MTBlZGIzNmNhZThiNzY1M2FmYzE4M2Y1NGIxOTU1YTU2ZGI2NTkyOWRmNmIyOTg4MGU5OWViNjg1ODFmMWU0MTE0MWVlNjk3YzFmYTU2NWYwZDY3NGEyYjlmMWU4OGMzZjM3MGQxZDVjNTY0NTQ3MzcwZTczZTJmNDc1ZjUyZWRhMTY3YmNjYmNjMTk0MDVlMWNkZDI0YzEzYWMyNWJjZmEzZjdkZDY1ZTIzM2UwNTliMThmYjQyMGJkYjUyOTY5ODE2NTQ4YmNhODNhZTlkMzkyYjhiYTFlZWNlMGZhZWEyYTRkOTY1ZTQ2ZTM4YzNhY2RiMDA0NjY4OTJjMWJlNjllZDBlNzNhZDgwYmVlZTBjYmU2ZDJiCiszMDQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYKKzMyMDo1NzdkMzA1ZDgyZDk5M2FkYjNmYmYxZTkxYmJmY2Q2ZDlmZDliNzg3MjQyMGRjNDE4ODI1ZmYwYmM3OTFiMTJkY2M1ZmI1NmYwYTQzOTYxMzFmOTg5Y2ViYjdiMDdiNjdmNjM2NWJmMTIwYjE1Y2RmN2M4NTZlNGZmZGVjZmY1NzFiYzhiMDRhMTAzMjg4MTE0MDFjZWQ5OGMxNGI5MmQ2NjdkODllZjBmNDEzZDI0NzJkMDM5OTMxYzMzNTcwYmVmM2RiMzQ4NWI0ZjAxOGJkYzc3MWVjYWQ4Y2RjYTFhY2UwZWM5NDg1OTFlOThjZTFlMDM3ZDMzY2UwMDMyNjQ1MmZkZGZjNzBhMzQwYzczYjA4ODZiNDNkZDBlOTIwM2MxMWMwMjVhZjBhYTJlZjNlMzUzODg5M2Q2NzE2NTc0ZjI0MjY1N2NmMWJmZGY2ZDhjYTNmYWJiOTgyODY2ZDA0NTU0ZDc0YTk0OTVmMTc4YjViYjY4ZDJjMmQwMjZiODJhMWQ2NWEyYTYzYTU1Mjc3MTBjMzA1ZDZiNTRlODMwYmFhMThmNjkyZGMwZjI5ODE1YjdlZWI3MTdjMDhkNDliNjk2YWY4MGRiMmMwNTQ4MWFhMDc3ZTUyNDIwY2JkMWVjNDdjOTlhYTgyYTBiYjczMGE4NWJmZjFhODAwMGMxNzM1YWYwOWFjNDVhZDNkMDA4OGVhZjUyZjVkNDJiYTEzMzdkZmUzYWU5NTZkNmQ3ODk5YWM5NDkwMjhlYzBmNTg4NGFlNThkOTQ5MDk5NTA1ZGM5NTc2ZDIwNDcwMmQ5YjI1YTE3MmY4MWEwNDFmZWE0ZTg3NDQ2MDVmZjBkY2I1CiszMjA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZgorMzM2OmNmM2MzNmZiZjJiOGQ3MmI2ZTllOGU5ZWM4NzExMTdiMmQ0ZGM4MTRlMzIwNGE1YWEyMjMxMzZmOGZiODIxODI0NWRjZjAzY2Q4MWRlODBhNGQzNWZjNWQwYTRmOGEzMWEyODcyZDNjMWFjZGFiMDg0NmM4OWJiYzhkYjZmMzE0MzY3NDFmNmUzZjIxY2MxZjc4M2JmNGVlZWE5YjI5NDE1ZWFiOWMxZDZlZDk0ZGJkMzkxYTEzYmE5OGE4NTFlZTA2NDZhMzc4YThkMWIyNWQ1NmRlODMwNDlmYTVmZmIzM2VkMmM1ZjYwYzY1ODhlYWY4ZTZiMzc0YzQzY2YxYWFjMTUzZGQ2Mzk1MWFhYjJlZjEwOTIzODg5YWYzMTkyYmYyYWRmOWVhYWQwNDhlYjhlZTNmODE5MTZlYjU4OTk3NGI1MTUyMjI2YzVkMWU2ZjUxNmE4MmU4YWNmY2NiYjQ2YWIxNGQ1YjkwMWE0YjlhZDIzYzMzMTBiMGEyZDMwZjBkODhkMDg1MmU2N2ZkNzM5MWM2NGI5ZTU3ODAwZDYyZDgxNjk1ZDk0NTBlMTM1YzlkMTkzZmMwZWZjYzhmNzc0ZTBmYWIwMjBkZmY1ZDBhMjgzOTBkZDRkNjI5ZjU0OTJhNTQ0ZmNmMDQ4MTFmMmIwZTNhNjRkMzNjNWVhYmM0M2EyMmE5N2M2OTgzOTBkNTM3ODk5MzVhYWI5MDgwOGIwOTEyMTE2MDlhNTgzNGVlNjBkYTdhZjZjY2U1Y2ZlOWRjZGI0MzhiOWU4YmY2MDcwNjY5NmQwYTk1YzVlNmJmZDI1OTIxZGVlOThjNDdkZTVkN2U0Y2Y1MTAxZmM5OTRiMDYyZmQyZGQwMWExNzYzNTgxMTNiYWZhNDA0YmJjOAorMzM2OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZgorMzUyOjdkZmM1MzFiOGQ5YjRmOGEwODRlZjBmNmJjYTgxY2NlZGI4OGQxM2Y4OTljNjRkZGFlNTQ2MTFkNzZhMGY3N2NhMjdkMzc0NTg2MGM3OWJjOTQ0ZWI4NTQ3MzhhMWM1YTFkMjM0OTFkMTlhMjBmN2ZlZjNhYzYzOTE3OTgzNjBlYjIxMDg3NGNlYzFjZWRlZWY1NDk3MjZlNTMzYjIyM2EzZjNiMTRkNGJkYWQwNTk5MjA5MTAyNzljZWI0OWU3MGM4N2E4NGYxOTAxMTI1MzI3YTk5MjlmMjM4ZjUzNjEwOTk0MjVhZmE1ZDgyNmM4MjI1M2Q5NGQ4M2NkMjkxOTQ3YTdkNTRkZGU4OGFhYzczNGQxZGY4ZGUxZjEyNWZhMDJiNmIwOTgzY2Q4Njc0YmY1MjljOTc5MjliNTZhNWJhNjgxYzcyNzk0NjE1NzVhNzU2OGM3Yjk1MThkOTVlNmVhOGZhYTZhYjZiNGRjYTc4NzRkZGEyYzhkMmNjNzI1NzdkZDY3NzQ0ODczZGExNDViY2UyNTU5MzUxMWQwYmMzZDY3YmY1Y2I2MWY5YWM1M2UwNDcwMWExYTQ0OGU4MGQ2OTJmYjQ2NjUxZTQ1YjY1ZGFlOTA5OTRjOTFiODNiYTRjMWVjOWY3OTQ1MTg3YjllN2MzMWU4NzA0MDFmNWVjODMyMmQwYTY4NmZjMmY5NTU5Mjc5ZGU5OTIxNzE5NTc3MTkwMDRkZTYwMmE3ZGE5YWI2M2E5MDJmYWQ4MzEzYjYwZmQ4ODM3ODFhZWIxYzhkNWI5OWM3M2U0MTdjODIxZjc1ODU5YmJhYWZhZDQwYWI4NTA5OGRhZTM1NmM5OTZmNDI3NGIxOTg1MzYyNjJiMmQyNmIyMjIxNmU3OWZmM2ZjNzA3ZmQxOTdlMWYzOWJkZmI5YWNiNjIxNGQ5MTk2CiszNTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWYKKzM2ODoxMDBlNmU4MTdlZDg2NTc1NzAzOWY3NWViNmQxNWMxNmM1NDc4Nzg0ZWI5ZGM3MGY2MGUzYjkwMGY2MGZhOTI1NDA0ZTA5ZTJjZmMwNDUwYmM4OWJjZTExNWZlZjYyZGU3ODJhMmQ3NzI1OTcwZTdmZTgyMjYxMjJjMWZmOWNjZjE0MjI3NWQ0ZjM3ZDAxMWNhM2FhZDU3MDBlMmU4YThkMjdjNzU1M2U1OWY4MTczYzgxMTdkODEzZTRkMjM3YmY5MDZlMzQ5OTMwNmZkNWJlZTBmYmFlMTM3YTM3MjgwN2NhYWUwNjE5Y2FlZTUxMDM5MDQ5YTA5MDY2YjYyOTUzZmM1YmYxMjEzZGFjN2RhODZiNDQxOGNmM2JiZmUwNDZjMWI5ZmVkYjYwNDVjY2JmMjU2MTdlYTUyZTJiNmZlMmNmOWE1MmVkMzcxZjg2NDE5N2ZiYjNjY2QyN2ZmMmQwZTJlNzI4NWUyOWIyMTYzMjExMWQyZWJlYTBjOGYxYTIxNjc3OWFhZWY5ODM0NmI4NGY1NGZhZmU0NmVlMzEyODAyMDQzNGQwZmIxMjkxZTA3YzUzYmRiMjM2ZTNmNDc2MTk5NjQ3YmQ3MzY2YTcyZGNkYjU0ODRlMjQzOTI1N2RkYzViMmQ3N2IzYzAzM2UwNjhjMzIyODhkOTRhNzJmMmM2NTYyYzdlMTcyN2U0ZjYwZmE0MWE3NWY1NTYxYzRjMTVkNTk5N2RiOTk0NzFmZjY4YjA4NWIzOWQ1MTA3MDAzOTI3ZGNlMDA2MGIxOTI2ZWQ4ZTkxNDRhNmJhNmQ5MDdlY2YwMzdmODAwNjkzNmJhNTM2NTEzZmI4MTIyYjgyMjE0MTYyYjc3MzVhMTZmNzJmZmM0NzczYzMyYzlkNjk0ODI3YzNjMmVjZGRmNzQyNzY2ZDJiNzQyZmZiYTY3NGEwNGMzNzAwZWE1Mjk4OGY2ZTI2NTkyNWNkY2Y0ZWY1CiszNjg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZgorMzg0OjBlMmExMzJlY2EyMTYwNzY2NjViYWI2ZjNkMWYyMjJhOWI1MDJhNDgzMGU3YTY3YmUzMzMwZmI0YTRjYmMxZjJiYTJjMzg5MWZmZDY3Y2NhODUxNDczOTg0OGNkOTAzNTRlOTllNDg5MjM1ZjM4MGIzNzI3ZTc0NDY3YjU1NzlhYjJjMzY2MTA1NGVhYzdmOTQxM2ZlMWY1ZjliOGI1NGYyNWI5ZWVjNWY2OTMwMjVkMzAwYmM3MGM2MDdmMDc0YjY0MDc2NGQ5MTIzMGE2YTk3NTNiYzQwM2ExNzAwOWUyMDFjYjk2YjU3MDIwYjUyN2Q0ODk0MzQzNmU0ZmI3MTdhNWM1YWIwMjdlMjM5Y2I1MDgxMTUyNDRmMWJhOTc1ODYxYzBiZWViYmZhNmE3ZmYxZTQ3YWUxMzVlYjJjZWZkZDg5NzZjNDhhZDcxZmYxOTU0OTE2NGQyMmRmNTQwNDRhYmI4Y2Y4NmM3MjgxMDM1YzAwZjQ3MTUxNDc2MmI2MjI0YjJjMDZjZDQ5NmUxNDlmZTQzMjYyYzU1NGJhMDQ3MzVkZjQwYWU4OTQ2YTU5ZDg3ZDdiZmM0NTczZTVhMWNjNGJlZTUzYTRkMzNkMzAxNTAzOTU1ZTQwNWM0N2NjZTk3NGE4ODQ0YWQxOTkwYzU2OGRkMDdkY2MxYTI0MGRkMWRiYTVmNGNlODY0MzIxOTY3ODcwYWNmOTQxNTM1OTI2ZTVkM2I1MTFhOTc5MjQzNTBjOTAxOTMxM2E1NjgxNmExYWJjNWM1MWFhOTZiYmZkZDJjNzgzN2E0MzMyMGJhOTY0ZDA0N2ZlNWQyZGIyODAwNDcxNjc5NjYzZGJjOGFmZDRmYjhjYTRkMzljNTczNTI4MWI5YTY2OGI5ZGNjNDZjNGY0NTg4MWEyYzlmODQxZGM1MmYzNTRkNzA2Y2QzMmVmNWRjYjRhOWYyY2I1YzFjN2I0ZmM5ZTJiNTZlMTRmZTEwYTg0OTJmNzEzN2U1ODBiNmYxMTdkMWNhZTU4YworMzg0OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZgorNDAwOjAxOTViNGJkMjRlNmE2Mjk1YTNhNmVhMDVlZTc3MTdlYzA3ZWI2ZWFiNTBiYmFjNzUxZjY2ZjZhNzlmYzU2NGY3YWExYmNlOGI2MmI4N2RjMjVlN2I0NWQ1MmZmMzRmNGY5ZDMwYWZkMGViMzNlZWRhYzRlYjE5MjQxZmQ4MGRjMDVlZDgyNjU5NzRkMWVkM2RmNDhjMmUwMjdiNzc4NjZkYmMyMzU1MzZiNDhhYjUwZjYyODYzNWE5NWM0NDMwZjhjMjM3ZDY0N2ZkNTg4ZTAzMThhNTM3MGVlNjM0MmViODAyYzZlNTg0OTgzZWM2YWFjZTRmNDg2YWEwNWU0YWU2OGRhMjgzMDdjZDY0ZjFiOTU3MmJhNTljMGM1OWVjZDE5OGRjYWUzZDZkMzZlMDljODBkMTBjODc3YTg4Yjg3NzliOTM0YzZlMzlkZmUwMTIzYzkyMmJlNzk2YTVkOTYyNTg2YjU0ZjZlOWZiYjQ2N2Y3MjUzNGJlNzNjNDM3NGE3ZWM3YzM0Y2MxZWIzZTM5MzQ1MDVkOWVkZGU5MWMyMTA2OTdiMmU1NTA1NjliZjZhM2UxYWRmYzJkYjVkMzY0MzM2YzE5YWM0ZGMxN2UzMjcwNjAxYWM4OGY5OTZhNWVmYmNiMmQyNDFhMWM3YWNjOGFiNGEzNTQ1MzNmOTEyYzllNTFiYTg5OGJkNDFmNDM0ODYyOTBmYTMyYjM2YTc2MGRlNWRmMGMyNWQ1OTE0ZjNkNTYwMDQ5MjBjNmRjMmUxNzI0YTk1ZWFiODhmNjFjZmQxNTRkZDQ3ZmM4YjYyNzAyZTc3ODA1MjI5MzhmYjljMDM1YjQ5NGEwYWNlNWEyMWMwOWYwY2Q0NjVhODM0YTYxYzRjOTc5YjA5M2E1ZDc4MDE0MWNjYTgyMzI0ZjNkZGU3N2Y0NWVmYmU0NmQzNzcyODMxY2ZhOTM4NjlkMTQ0NzQwYmM0ZDA5NDhiZDYwZGYzNzNlYTI0ZTRiZTg3NmI2ZGM4YTMzOGUxODUzY2NlMzZiOTQxNWVlOWFhOTA3N2M0Y2Y5YjJkNDgyZjcwCis0MDA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGYKKzQxNjo1YzM5ODVmMzc1Y2Y2Y2NhMDgxZGZjMTE4ZDQ0NjAyMDg0NDZkMjFkM2YzZDEwMGU4ODMyMjJjYWJkZGRhNTM4MTE1Y2NmYzM3ZjY4NzM5ZmI2YTE2NDljNTVmZDM2NDEyNTc5YWQxYzY2OTA4Yjg3ZjI1MmNkZThhYjMyMzg2ZWY2OGM2MjA1Yzg5OTRiYjdkMGY5ZTBmYTVlMWU2ZDhhZWY3MDY0YjA0MzJiMWEwM2IzZGQ0ZmVhNjQ1YWVhMTUyMTZjMDNmNTg2NThkZjIxY2E4NzkyZmQyMjUzYTJhODg5ZDFiMjIzZWZiZDYwZTEwODkwNjc2MjkxZmVkYmRjOTFhZmY0MDNjYjk4ZmNkOTZkZTFkMTQ4MWJiODEwM2YxNTc3ODBjYTA5YWI1NDkwYzc5ZmM5YzYwZmU5MWQ1MzI1MTAzNDQxYjk4NmFmNWU5YTBlMzIzYmRjOTgxNTBlNDVhMmU3Y2QyMDk5N2M1OGE1NjFjODY5OGE2NGU3NzM0YWRhNjBhZDE2NjkxNjBmOTJjMDdlNTYzNjAxMTNhZGY2OTljMjU5OTBkMDE3MmNmNjdmYThlMGU0YTM2ODdhYzIzODAxYmFkZDQ5OGM3YTFhNDExZmZiMWY5NmJkZmE1ZGU5OWQ1YTRkNmZhYThmZWZmOTlmNjI0YzM5NjAyOWM1NjA1OTI3YWUwYjczMTVkZGE3N2QwOTJkNmUzN2ZmODg1NjY5ZTdlNjBhODIzZmQwNmE0NTc3ODViZTBhMTUxNzg2ZmIwYTdhM2E4YjY3YTRjZjQ3Nzg4ZmY4NzY4ZTI0YjM4ZGY3MzM4Yzg3YzJmZTM5MTllNzRlOTIzY2M4YTRhM2FiN2EyMWRiMThmZjQ2NzJhMjVkMzY1MmJlMjNiNGVmMDJlOTU4YTc3ZDdkZjAyNTRkN2Q1NGY2Y2UwZjNhNDU3MmVmNjc1NzgyZDBhOTA4M2M2NTQ5MzA0Y2IzMDJhMDNiNTY5MjEzN2EyZmQ2NWYwYjVhMjFlZWFlMTljNjUzNTgzNjg0NDQ0NWFmYmJlMmEyMzZlYzNmZTI2YjdkNzYxNWE0MTcxYTY5MDA2MjAzNzZiZjI3ZGIxNDc5Cis0MTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZgorNDMyOmRlODE1NTk4MTJkMjkzOGNiYTgwNzVlZTFjZmI3MzEzMTczMzA1NDg2ZjU5ZTUzYWJjMDBlZmEyNzY2NTNkNmNmMjAwODI4NjE1YTlmNTFhMDQ1ZWU5NDAxNzcyM2FhNDMxZTBkNDI1MjIwNWY4YjQ1YWZjZTE1ZDM2NTRmYzYzOGJjMzI3NDQ0ODhlOTdmNGY3Yjk5NTg2OTRkNDA0MDNiZWM0MmExY2E5NzAxMWNjMTY2NTgwNzM3YjZmZGQ3MTg0M2I4ZTllODc2NzkzODU4ZDViN2EwNmRhOGNkN2JjYWFkNGFiMmRiOGE1NjM1ZjM2NDMyNjNjOTg4MWE5MTU3ZTFhZDgyYzI4MzJlNTg5NDYzMGRkMzZjYjljNjVkZDdmYWYxNDdiNTdlMjMwYjViOTQ0MTdhYTk2MmEzZjYzYmYxNTk0YTk5YWRiYmVkYjljMDNiYjlkMWE3Mjg2MTQwMzI5NDZhZDk3NDNjNTE0OTQ4YjNlMDFiYTgwOTk5NTRkZDVlM2EwYzE1N2VlZTNlMDAzOGM4MjU0ZmJlZGIxMGM2ODVkODljYjA1NTVlYTdkM2Y3YmQ1YmNlMjI0MzFiYjI3NGNhODQyMWFmMWZkOTg0MmNjOWQ4MDk0ZjIyODliNmUwZjRlYWExODNmMzE2YTIwM2IxYWE0ZTZmODAwOGQ4NTc2YjU5MzZmNzE1Y2NjNTg0ZTRjY2YxYWU4MWJhNTk1NGVlNGY1ZDc4ZWQxNzEzNWNiMTNhZjA0ODRmMzY2NGE2Zjk2MzlhNzQ0MGNlZmZkNWVhNjBjYzVmMzkxYjdjZDcyMDFiMDA1OWUzMzkxZWFiNmNlZTBlOWFlMGFiN2M0YjdlNjQ4MGNlN2YzMTViODRkODMyMWVjNGQxYTMzY2NlM2ZmOGRmY2Y5YjEyOTljYmJmZWU5YTU4NzRjZTVhMWMxZGQ4OTcxMGEzMTE5YzFkNzNiZDk3OTVkODVmZjNhMDFkODgwNjZhN2IyMzc3NzM4YTIyNDdmM2NjMDIwNzJmMGYzZWEyZTNhZGY0NjNjMTU3ZTlkNjYyMTY3NDIyZGIzODI0ZGYzMWM1OTI4OTE0NzRmZDRkMDI2OGUwYzY0ZWU5MTE3ZjZmYTAyYWNiYmVjNTMyZDRmOTgwMQorNDMyOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZgorNDQ4Ojk1N2MyYWRjOTUyYjkxODdjYzdkYTc3MzcxNGZjYjZmZTU3NGEwNzY4NGMzZDVkMWUyZDYzMzM1NGNmZTI0ODQwNmI5NWYwZTk3MTRmMjc2ZjE1NmQ5NzAxNGNmYjM1OTkxYzM1OWUwNzQ2NGI1NWViZjY3Zjc0NTE2OGIzODZiZGE3MmYwYzJkZjVhN2Y4MzBhNWU0NjI5MzAzNDQzMTgxY2Q0M2NkOGQzMGE0MTVjYmNlMGY1MDNkMTBhMGY2M2EzNGVhYTNhN2FlOTYyMTExY2FmZjVmYzMzZDAxMjU0OWVhYzk5NzI5MGVlNzhmNGM5Y2Y5NWMxNDgxMzhiNjA3MzRjZWYwNjEyOTgzZWIyN2ExNjBiY2Y1NDM0YmIxZTNlNmE2YzEwMGRkNTVkZmYyNWIwNGQ3MzhiZmNlZGI4NGFlMmExNjhmM2JlOTcxMWJmNzRjMGM2MTkyNWI2MWIzMjFmOTBiZWQ0MDE4ZjA3OThiNmFlYjk5OTc1ZDI2MjQ0NjA2ZTFiNTYzMmFkMWMxMDE5ZDBlZDBmMjU0MjczY2I2YTQ4NDk0YjkyZTUxNmRkMWM5MGI2ZTQ4YjQwNzE3OWZiMjA0MjZlZTQ2YThhMDc3MWYxYmQ2N2IxNTNiZDc2MjVlNzZlYmUwNTJkMzMxMzdlZDFjYjhiMDU3NGViN2M5MzE3NmQ2YWQ4OGM1ZTRiYzQ3YzhjOWVmNGJkNTRhNDZmYThmZjMyZWQyODQzMzk5ODJhMWFhZmUzNzUyNjQ4YzU1ZjAxZjVlYTgwYzQxOWFlZTM5YjA1OTBkZTM5ZjBlMzRmMzgyZTM0NjNiYWQ3YjQyYWExN2I1ZWViMmU1YTRjYTA2ZTlkYzNjMjU0Y2NlYjU1NjdhY2M1NmZkNjg0OGQ1ZDZiMjU5ZTc5NDUyNDIzZDFhNTQxYzZjYmFmZjkyODAzOTE4NmY1MWJmMTgwMGQ4NTllZDkzMjk3N2RmMzBmZTI4ZTAwMTE3YzFlNmU4ZTc3YTBiZjdjYTY5ZTI2NGZjYzk2YzFmNzVjYTY3NzU1NGU5YWVmZDA2Y2U5N2NlNWYwZWRhY2Q1MGVmOGFmOTY1M2VjMzY1MGRjNzg2OTNhNDgzY2I5Njg2MDE1NTY1ZWE5NmZkMGMzNmMxM2Q1MWFmMzIwZmI4Y2E5MDA4MDJhZTk0ZmRiY2Q1NjBlCis0NDg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmYKKzQ2NDoxYjMwYTZmMGY4Mjc1ZjE4NmQ3ZGMyNjg2Nzk0NDExMjQyY2Q1NTM4OWEzNWMyYThmMGQyNzYxMzhiOWMxYmJkMmUxMmMxNTJkZWYwYmNiZGMzMjNiZDNlM2I0M2ZhYjI5Y2JiNjdmNWZmZGY3NDUwYWNiZDhjNDg0NGUxN2IxOTZkNjhmMGNhNmMwMDc1YmYwNmIxNTYxNDMyNDM1Njg3YTk5ODY1OGQ2MmQyZjk5NDVhYjlkMmEyYjljZmQ3ZDRmNjdiYmY0YzUzNmVhNTg5ZmFhN2E0MzhlM2NiMGMwMDZhMmJiZjJmOTBjMTM5NzkzYzZjYjQxYmUxOGI0OTQ4ODQxYTJkMzFjZmY5NmIyNWFkMGYxMzc3NTYzYTRhY2IyOGY2NGVmYTAwNjgzNGMzMzM1ZTYwNGQ5NDg3M2U3YjhlYWI1ODNmODdjNWY0ZTA5NmJiMjdmMWMxYWY0NWViOTA2OTUzYWNmZDc1NThjOTc4MDMyNjI0MzU1ZmIyNDIxYTYzNmFjNjQzM2U3NDU5YjYxYjA3MDZkYWMyZjRiYmNhZjE4NzI3ZGVhMWY2MTAwZDM0ZWVlZDMxZDJlYTI2NzJmOWRmYzg1M2U0MDg3MzZiMWNjMDNhNjQ4NTQ5NmI2Y2ZjY2M2ZjM0ODFiMmNkMDVmNTU2OWJiMzY0NTY5NzBkMDI4OWFlZThjMDQ0MmNiODViMDY1OWVmZTk4NzJkNWU3ZWVlMDIxOGQ5ZGE2ODRlZDBmMTFjNDg5YjQ5ZjViOTc0ZDFhMzk3YmIzMWUxNWE5NTU2ZGMxNDQ3MDE4YTRjYjQwZjFlMTNkYjY0M2E4NzY5ZTRiZTc4ZTIyZjM1NDM5MDU2M2E3YTczMzQ0NDVhZGM1ZTcwYWQyNjYyM2QyNDg3MjFhMGUzYjgzNTRlNTI2ZjU3M2Y4YTI5MmU3ZDU2OGU2M2ZhMzhiNDhlMGE0Y2U3NDMxZTg5MGVkMTliM2Y4MjRjZWRjODRhMDUwZDRkMmE3ODE4ZWUyNmI4ZWE4MDQ3MDBhYzg0MGViNGJkM2E0YzFjYzk2NTUzODBkMTNhODZhNjlmMDNmNjQyZTdiMjMzN2QyMTExNmFhNzUxMDc2MTcwNDA5OGJkZTBjZDYxMzZjZjQ3ODU4YTI2ZTRhMTE2NDk5MjBmYzJjYjIxYTUxZjJmOTMzMDA5NWQ5ZGUwNmI1ZDcyYjkzYTY3YTU5YWUzZmJhYTQ2NTJiODJjCis0NjQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZgorNDgwOjgxNDBiNTI5ZjQ1NWQ3MGFmYzllZTYwMThhMmU1OWExYWUwNjBjY2MxODkwOGYzYjBlZTllOGVmY2JkM2YwMTI0MTIzMjUyYzVhNjI0MDFiM2MzMGFlMjg0M2Y0NTY1ZjE5ZDZmNGFmMTg2ZGMzNWNlMTFmYzhkMGQyM2JkZTY3YWMxMzNkZWExMzhhNWMyNzcxMjM4MWYxNDhmMTc1NjIyOGUwYWUwNmEwNzk1ZThmYTNlODQzN2Y4N2E2ZjM0ZGIzZWRkNWE2NzlkOGI5MzQ0MmU5MTI5Y2NiM2JiZDJlNzlkNGUwMWQ1N2NhZWViMDg1YjVjZjI0MjAwMTUwYmZhNzYwNDdiODUwZTk2ODE4ZmFhYmQ3NjhhYzVlMmRmZTIxMDg0NjAwOGJkNzZkOTU2MzUyYmNjNTYwMGZhNzdjMDQ0ZWM1ODJjMTdiOGJhY2JlZjkwNzVlOWY5OWEyZjU4ZmJmOGYxMDI4MjU3ODZiNjc4NTQyOGY0YWMxNTc1NmM3MTkwYmE4MjJjZTVjMGM1NzE5NDBiZjc3YTIyNDc0ZjhlYjY2OTI0NjlhM2ZhZjY5Njk0MzAxZDVjMTRkOTJkOTk5NWQyMGFmZTM4YjllNThhYTZjMGJiNTlkZmFiZGIyYWViYjBlN2IxMWJkMmViYTFjZmEwNWRlZDQ2Y2YxZGQxY2IxNzRkYzc2ZmY2Nzg0ZDA2ZjYwNjJmYjU4YTc3NjAyODRlMDUxY2MxY2UxMTQ0NjQzZDkwMjg4MWYxYTQzNTEzMGQzYTVkN2IyNDQyZmMwM2RiOTg5NmQ2ZDU1MmFmYzE0YmUzODI2M2M2M2IyNDY1OWZmZjZlMTE1Yjc5NWFhMWUxZDY0MTVlNjc2MzdiMGJjMDk1ZGU5ZGM0ZDQ2NGI5Y2MwMGRjNDdjYmI1NWIzYjczZjNhYzAzYThhYjkzM2JlODE5ODZlOTczOWM3OTE2OWU1MWJiOTBiMTY2NDMyMDE5M2RmMjM2ODY5N2FmYzllMDJiOWQ5Y2EwOWQ3ZTg3MTA1MzVmNTEyYzE3ZmYyNGUzYmZhZmVjMjMzZjc5OTk5OWQ4YmUwYmM4ZjQ2MGZlYTc5ZDg0NTliYTE3ZDRlZmVmNjRjZmQ5MDYyNDg2NGZiNWIyMjBiYzNiNzdkMjFhM2RiMTBmYjYyNmNkODUzOTI0NTM5OGIwMDhjOTMyMDUyNTRhNjBjNzNmOWMxOWYwZWQ0ZjQxNTIzMTFhYjE3NDM3NjJkODU5YjI5YWY3ODA3ZmFmYTgxNWZlOQorNDgwOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZgorNDk2OjU2OWU3ZmExYzNmYjg2ZjJmODhiMjZkZTBmYmJlNzMzMjkwMGVmMjg0Njk2ZDNiMDQ4MDBiMGQ4MWQwOWVhZmZlY2UwOTAwNjNjNDcyYTE4MGYyMzdiMmQ0ZTUxYjJiZTNmMjljMzYxZmFkOTU3ODllZjVmMWZiYjA3MDU5MTMzZWQ3NGMzY2M1NDQwMzIwMjFkOTg4OTRiZTMyMDJhZjZjNzdlNDNmNTU3NTVhZmUzMWFjNWI5ZTVkNzNkMWFhOGFkMDU5YTRlZmI5ZmExMGY3NmQ4OGFkMGJkNzkyYzk2ZjgwNDI1NDU2NmQ0Yzg2OTQ5MDI3ZmZmOTZhNWQwNWM2NzNlZWNiNTI0MzY3MzdkMzI5Mjk4OTIyZWJkNDVkNzc3ODkxMDRjNmIwODg1ZTc0MmU0NWM0ZDJmZDI4Mzc2ODM3N2MwOWE5OTI1YjM5ODQ4MjhkMWE0ZmM5YmMyYmMyNTZiMjhhMmFmZjMxYTFlYWQzMTk4OTc0NDFmY2NjNGI4ZjNmMmM4MmU1YzY0Y2Q4MjExMWRlMTQ2Y2RmNzY1MmE4MTQ3MDc2ZDgyOGYxYzUwYjY3ZTJkMDYwZGVlY2I5YmQyYjg0YThiYTEzZjBhNjVmZWE3OWEwZjQ3YWY3NGQzZjAzMjA3YTE5MWUzYTVjOTA4Nzk5NDg0NmNmMTc2MDYzYzE5NmI3NzI3MWM3ZTg1NjBhYjI4MDg0ZmQxZTM5NGQ5YzQzYjA3ZGVhYjQwYzQ4YzA1ZWVjZmM1YmE0MmVjNmQzNjcyNGViMzBmZmE1ZTk5MDQzMThjMTI0MmIwYjExM2NmMGM3YTE2OGRhOTE5N2FiYzJhMDgzZjM3MWM1MjZiNGFmZGZlMWYxNDI0YjI5MGZiMmJjY2Y0OGE0MjZjOGYzMjE2NjNjNzY3ZTM3MDhmMzdmZGE1Njk2OGYwYjVlNzg3YjY3ZDM2NjgyOGEzY2MxNjI2NjI2OGQ5MmM4YWZkY2VkMzU2NDYzZGNhZmYwZWY1NjhjODc2NTNhMzA4YzEyYjY5NjQ5MjM1ZjdiMmViMzkxZjZjNTRkZjFlOTY0NTE0MTliZjQxMmQyY2EwZjZkMzRlYzkyZTA0YjdiYzYxOGNjYmZmNDQzM2U2ODdkZDE0N2M1YjNmZGNmNDcwNTA3OGFkZjVkN2UzNzBlZTk5MmUwMjEzMjliZWQyODFkMGMwODY5MzBhMzY2MTU0MWQ2N2Q0YWYxODhkODgyZGRkMDIwY2RiN2JkMGM2NTc0M2ZmNDFiNmZjN2ZkNzUyMzdlMDJlN2Q2ZGQ4MDgzYWZiNTQ0MDgwNjIwYzQxCis0OTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWYKKzUxMjo5ODIxYjM0NDk4NjlmMmNiMGVmMGEyNGVjYmZmOWIzM2E3M2IzY2Q1NGJkZTYzZDM0M2M0MjZhMzZjNjhkMWQxNjZjMTNkMDJjYTRkNjVjZjc4ZTk1MzM2MWE0ZDJhNDAzNWZjYWRlOWYzZDM1ZDBhZTFjZmY1Yjg1ZjFmZTVjOWYzYTlkYjlkYWI2YzEwYjhlZTc1NDI5NDRjODQ4MTVjYTk5MGJmNGJjZDcwNjJhODAxM2JmODUyZmYzYjc4MWY2MGUyOWViOTE5NmYzMWIwZTljZDU2NmI3YzkwNmI4ZDkzMGM0ZDRmNDEwNzkzYzFmZGY3YzhjOGVkOTEzNDY5YzI1MDZjY2ZhMWMwMjlmMzgzYTllZWU1YTk1ZjE4ZmZlYjFmMjUwODRjNjJkNmM5ZmFiMWQ2NzIxM2VmYzFmZjA4ZjJhMzNhMjBlYWJiNTIwZDY5OTc4MDNmZmUzODJlYzJmMTg3OTQ2NWM4YjE2NmIwNDVlOGVmNmZjMjdjODE4MmQ4OTY5NDE5MjkxZmE1NjQxYWZiNDViYTE2MDBmNTEyYTYxMmU3ZGZjYTRmNzFjZDYzYzVmYWU1MGE1M2ZiMzA1NjUwZTM4MDU0MjhiZmI2Njg5ODEzZTM0MjQyNWFjNmQ1ZDEzYzk1NzViNjI5Yjk0MzBjYmIyMWJmYzQxYzAyNmZhM2Y4ZmNkOTY3N2JmOWJiN2NjMTRjNDQ3NzA2YTQ1NWUyZDVmYzkwYTgwZWU2MzVmYmFhNTg5ZTJmNTBkMzVkMWExZDVkZWQ3N2JkOTcwYTFmZTMyZjkyZmNjYWU4MzFjOGU1NDBjNWNmYmFkMjE2MmRkMDY4MzE2MGYwZDYxNGZlZjkzMzIwN2I0ZWNiNTE0NjVlYzAwNjNhYjMxMjQzYzlhMjNhMDdjZjA5NTJiODFlYjAyZTYyOGI5ZTUzZWQwYzI3ZDcyMGY2NWJlOGYzOGI5NjBjMDI4NmI4ZGM1OGFhMTE5MDVmM2QzYzY5NGQzNjRhYzA5OTdlNmIyZTM4ODZhMWExMWIzNTdlZjBiNzVjYWRiZjc3YWNmMDE1YjRjZjZiY2U1MDhmNGMyN2YwMTA0OGQyZjRkODExZTM5ZWU4NTAxZDRmYjZkNjlmYmI2MTU5YTZiYTU2NjI5ZTU0ZTc5OGU4NzJiZTMzYzE5MTc1MDE2OGFmN2E0N2RmZWZkOTg5YzY1ZjZiMmVmODA2NGFlZjgzZTJlOTAyZjY4YWE5ZTEwYTdkNmFjNGEyNjgwZGQwOTEzYWFkNjJiNWRiYmUyZjUxYjQ2YmY2NGM5NTBjYWVlM2I2NmY2ZTc4NTdhNjRkOWNjZDQ1MThkOTU1ZjI0YTIzODE5NjE1Cis1MTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZgorNTI4OmYwMjYwNDk2M2Q5ZGM0NzM4MmQyYjgzNTQ5NGI4NTkxZGVlZWU0MzdjMzhkNGQyM2U2NDNlZjNkM2QzZDNkODdhNmFjMzQ3NTY2N2E3NDllZTg0Y2FjMDU1YWE0N2I1MzFlYjIyZDU4Y2ZkY2RiMzk1ZmNjZDllMzRlODhlYzhkZDZkNGJkZmY5NDBlMzIxODk5YjcwMDU3MmJhZGI1ZTQ0Njc1ZjdiNDI1YTljMWMxOTY5ZGY2ODRhMjVlZTA5NzRjOGE5ZDVlODAxYjVjZDcwOTc2YTZjNWFmMjc5MzdjNzg0ZjRmOGQxYzg2YWUxYzI2NWM1Y2IzOGVhMWVlMThiY2E5M2ZmNjAxOWYxOTI3ZWJlMjAzNTE0YmYyMDU0OGM3ZWZjMTNjZDkxZmMyOTJlMmM5YWI5ZmMwMTRkODM3MWQ4NWEyZWZhZTEwOGIyYWZiOGJiYWZhYjc1ZTczNjFjOTk5MjVhMTlkODNmM2Q3ZmE1MWMwMjc0YTdhOTc5NmFlZTc0NTFlNzgzOTc2ZTY3OWRiOTdiYWFkYzRhZWNiYzlkMTIwZTAxNzE5NTkyZTAwNzE5NWRjYjdiNDI0MzljNTQwM2NjZGRlMGVkMGFkMjFhN2M1YTI3OTg5MTlhYmU4MWZmNzJhMmJhYTAzMzAwMmZlMjUwNzBlMTRmMzQxN2U3MDc2ODQ3ZTkwZDIxY2E5YTdmYTgyYjQ1ZjYyZDIzNDBiYzJhYTcyOTYxNmM4M2JiYmYyYTY1MDVmODYwY2VjYTgzN2M0NzllZWFkM2IxOGY1MGY4OGE2M2Y5NTgyZTUxN2I0YmY1MTcwM2U0MmMzZjQ3M2Y5MDE3MDJkM2ViNGRjMjUwOTcxNjlhMmZhOTU3MjlmMjk1MjAwZTEzZDA1NTY3ZTUxMzIyNjhiMzkzOTI1MGI4YmVjMTcwYTkwYmY4NDJjOGYyYjY4MGZiN2RkNmJiNjNiY2MxYWRlMTUxOTQ0MDMwYzBhNThiMjc4ZDcwMGUzNDYwZTlkOWE3NDUzZjA2OThkZTZmZTRiMzEwNGYwNDhkMGQzYzJiZmQ2ZDcxYzg2ZDg0NjBiOTU1NjhkZjhhNDkzZjZlNzdlMWQ2NGIxNTgzMjliZWM2ZWMxMjZhMjRhMWQzY2VjM2JlYjI3NDljMGQyZjJkMWM5ZDAzNzA4ZDBmMGE0ZmFmODFhYjBjYzMxZTMxZGFkYmE2ZTdmNDUzZjM1OTc4ZDQ5YmQwMjZjMTQ1MTg4YjA0MmRhOTg3OTVkODg0MjU2ZmI3YjI1ZjVkNmU4ZWY0MmM5MjdiYjM5YzkyMWQxZTYzNGJjOTQ1MzkwNzY5ODZhZmM1OTczZTk4YmJkMGU0NjZiMmI3ZTRjZmM3ODMxZmIwZDRkYTcwYWIzMWRkOWUxNTg0ZAorNTI4OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZgorNTQ0OmFiNTUzMDcwMTE0OTY5MGE5ZjMxNTdiOTcxOGZiMzkyZDJkMmMzOGU1N2I1ODhjNjUyYTlhZjg1ODA3NTBlZjJkYTlhYzdmMjg0NDJhMWEzYWNjMmRkYzA2ZTBjY2ExNWE2YWQ4YzVhMjUzYzBjYmIzMDdlN2Q4OWVjZDZhOWQ1ZTcyYzc2ZjI1ODllMTE3MDY3MTNiZDBjYzRiZjUyNGZiNWVmM2M0MTBlYjg4ZTUyZWMwZTUyZDgyMmY2ZmUxNGQ3NDRhMDllYzExMDE3MWFmMjRjZTI3YThmMTE2Njg4MDkyZDdhNzEyM2MyYWUxNDRmZWYwMWYyNzc4NzZlODViZjBiZjc3NDM1MGM5MmM3YmZlZTU5NzdkNzFmNTJhMGQzOTUwMDNhZGVjZGRjZDkyY2U2ZTNhNmM3M2IwNzc4NmRiODI5Mzk2NDc5YjEwYjkyOTM4YzdiNzg4Yjg5NzY5NWY3NGI2MWJlYzczODUyNmMwMjg2NWIxNWRkYjhkNmE5Mjc4NDBmYWJhYzBmYzJjY2JjYTgxNWFiNTg2ODllYjczYWRmYjA4ZDYxNDhkOWE5OGU4YTUzODhhYTY1MDI0NThlYmYwMjU5MjE3ODUyNzY4MWExMmFmYWNiMGUwZTFiODYxMzQ3ZGNhMzc0ZWIzOGYzMWQ4Njc2MWI1ZDkzM2YxODJjZmIzYWE0OGNkY2YxN2YwOGNiOTU2M2FiODkyOGU2NDcyZmRmNDMxNDM0NTRmNjZiNjI2ZDRlNjliMWVhMDY5OGE0NTcxMzg3ZTk5ZmQ0ZWUxNmZhZjgyNmMzYTVjMTExMDUyMjIzNjM0NTk0OGM1OTRjMjBlM2E2MWU1MzBkZWUyOTFiNzliN2NkMGUyYjBmZTdkMDE4MGJhMTE2MmJjNGIzYjFiMzI4MGRjYTgxZmQ1YTljYThhMjI3Zjc3Y2VmODk4OTZlNWM2NjRhNzViNzg3ZjQ1ZTk2OTMxNDc3NzZjYThlYzhlZDk5Y2VkMzk5MjBiODEzYWU5ZTFlOTMyMTRkOGNmZTVjMTY4ZWM1ZjA3ZmNhMDkyZjYzNjhmZDk1MmQwZDQ4YTQ5NjAwZmMwYjM5MDU0ODYxNDBiZTFmZGJmMTQyZDBjYzhkYTQ0NmQyZWQ0YjFiNDJmMDlmMDlkM2NjY2I5NWI1MGViYmZlZmY2MGExZjViYzQ0YTkxNjFlYzNiZWJiOTQ1MDRiNzBmZWYxYzM2MDM1YTg5YTg2NmZiOTZiMTJmMTIyZDJlNWVlNWZlODViMzcxMjIzZjk1NjY0Yjc3Mzc3ODRjMGNlY2VhOTgwZmE3MTFjYzI2MzQ0NmJlNDhjMDdlNmRhMjIzYzRlYzg1NjAwNGY5OWIwYjE5NTE4MDE4N2FhNzNhZDMzMThiN2IyM2M5MDAyNTkwZDZiNDJmYzU3ZTliMDg5MWU3MDQwNjM4N2VkCis1NDQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYKKzU2MDpkZWU0ZDc3NTBmMDg3MGJjZDE2ZmFmZjRkNjVhNTU5M2Y1ZDg2ZjMyYTZhZDdhNTE5ZDZiMjMzM2U1MjJkY2NhZGZhYjc4OTBkMDJhNjQ5OWQ2NDg3MzAyYWVkZGY5YzUyYzkyOTQ4NmZmYjQ0YjllYTk0MDlhOTQwZDQ0ODZhMzc5YjBlZDA0ZTAwNDIxZjZlNDNlNzM5M2Y3NTk2M2U2ODQyMmViY2IyYjg3ZWNhMjExZjY3MWRkNzEzZDU5YTYwMzQ1NzZhNGZlYjM1NmVmZjY3ZjMzMDgxZjc4ODljNjg0Zjk3MWEyMmJlNjhhZGFjZWIzNWQyNGQxOTQ3ZDdmNWE1YzAzZjY2ZjMxNTJkYzNiZDcwZjU5ZTE3Mjg3OWY1MGRhOTAzOGExMTU5ODZhZGExMjc3MDE0OTU4YjJiMTlkOGExNThjMDk3YzMyMTJlYWI2YzZjMGU5Nzk0OGFlMTVmMTQ2YTI0NWJkYTI0OTVhNWE4NjBkYTBkZWEzMmI3Nzk0Zjc3YWE0YmM5MTI2ODA3NjY0OTI1NWZiMTM4YTRlZDgzMWU2NTlhMWFiOTc2MWUzN2JjMTM4MzlkMWY0MTlkN2NlY2JiMTJiZmE2N2M1M2ZkZTk1N2VmNWY1Y2RmNDMxNTc1MTdmODAyMWU4OWViNDZkZjQ3NjJjZGI5OTJhOTI4NWMzNmI2MzYxNTYxZGM0NjljMmU5YjViYmY3OWZkYzg3Nzk2Mjc5NzFlNmQ2YTc0ZTQwZmIxOTYxOTMzZjE4MmExYjI3MDkxMGQ3NjA0YTY4MGQ1YmZjMmU1ZjY2YjZlNDA5OGEwYjEzZDRjOWI5MjNiYjU2NzEzMDEyYmI2M2I3YTVjZDFmOWYxYTdiNDJhNGUyODI3OGU1NzY2YTNlNDg0ZGEwOGE3NTM4ZmIxYjI3YTE1ZjdlZWZkYjVmZTI4Y2Y2Mjk3ZDgxY2U3YzQ2NGI2ZjczNzM3ODNjN2QzNDQzMzRiZWVkNzEzZTMyNWUxNDI5YmQ3YmZkZDE2MTBlZmE1NTFmMGMxNmE2ZWVlNWI3ODdmOTczYTAxMTA3NTRiYjY4MWRlOGQxNzgzMDk5NmU5OTNhMzYwZTE1ODViMTJlYTg3MjBmZGIzMjI3ZjE5M2ExOTYzZjBhZmE3ZDU5ZTMwM2MyN2M3MGQzNzM5MmZjZGFlZmQ1Yjg1ZDUyYzJiYmI3ZjE5YjMxNDZjMjE2NWUzNWJkYTNiNmMyM2YxNmU0NjkyODFlMTBiZDM1MWE1MzNlZGMzNzAzODhhMDdlNjNmMDJiMDdkYjg1NjliODc2MGI3YzA5MTUyOTkwNzg5MzEzMzY4NWFlYzFjYWJiYjhlMDY3NTJmOTA0OTBlZDQ5ZmU0Y2Y1ZDU4MGMwMDA3ZWE3ZTkwMmE3MTkyMzAyOTIzN2ZiY2Y5NjU4NTlhYmIyZDE0ZjZjODk1NDgwMTdlZWVkNmQwZDU2MTRkMTMxYjY1MTJjNzRiNDA3Cis1NjA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZgorNTc2OmExZDM2NjUzZmVkNWY1ZDQwZDFkZDA4NzNhMDdiODJlNjczYzYzZjMwZjZkN2M4OTVlYzZlZWM3ZmIxZTlmY2UxZjNlY2M0MTAzMmM5NGIzZmVmYTRmZTk4ZjY2YmFhMzUzOTM5Yzc5NmJlMzBjYzE2NjhkMTk1ZWFmNWM4NTU2YzFhMDBjNGRjMGQ2YWI2NTkxOWExZDcyOTUwMjMxYzg5NjljNWIwMmI3ZjIyYjcwY2MwM2ZjZWFhMzlhNWFkY2EwYzliYTFjZmQ5YmZiYmVmNWQ0ZGJlNzRkMzU5NjY1OTY1OGNjNWFhMTcwOWU0ZDYwNDY5NjAwMzI0NTE0NTE3ZTkwZDIwM2FhN2ViNDQ2MTJlNTg4NzBlM2FjZWMzYjhjOTY5ZjQ3ZjkwYzIxNDIxMjhhMmE0N2FjM2QzMjQ3YzY3ZmNiMDUxYzgyZjNiY2ZjOThkYzVmZGY1YmVmNDA3ZTM2OWQwMmYyM2Q2OTBmNjJjYzVlNDFhZWIyMjk4YmYyYzk3MWE2Njc0NGJkYWViOTgzMjY1MGVkYzI1ZDA5ZmJkMTMxNGE1ZDg0NDc3ZDdlNTUyYjgxYjNjNTczMWI0MjBlYWI0ZDY3OWJiODRlNzY1ZmZjNWJmOWI0ZDE5ZGY5NmIyMjM0MmVjMDlkODA4ZDUwOWZlOGM0ZDBkNDBjM2FiOWIxZDQwMDQwYjQ0NDM1NTVkOWNlOWFhMDRlMjE2NTY3ZjA1ZWUyODZjODExYzlkYWE2YzFkYWIxOThiY2U4MWUwM2QxNzEzMDVmMTQyMzYyNjEzMjIxMGYwMTQzYTUxNGRhYTkyNmVkYmZjZTlhMjM0YjMxMDA1OTAxOTZjNDI0ZmZmZTczOGQwMTM3ZmJhMDUzMmE3YjliNGRjMTYyYjliNDA2ZmEwNjg0MGU0OWIwYjljYWQzZWY3ZDcxYWE3NjdiOGIyZmJmOTc4MGYxMzY5ZDZjNWIzNDM2MWY0MDNhMzUxNmNlYjJmYTBhODliZjE4MjE1NzQ0MzlkY2Y0MmZiMTMyODQxNWUzNjNkOWEzMDZhM2Y3MjBlMjNlYjUwNDExOTllZGNmYTEwYjg2NWE5ZjVhMzIwMDk5MDY1MTIyMDJiYjRlZDUzMjYxNmI5NTZkMDMwOGEwZDcxM2M2YWRmMjBkYzAzZGE3YzliMjljOWQ0MDliMmZiZTNjN2YzMDM3NmJhY2U4YTMxNTZmY2IzODRhNjJiOTNjNTA1NjE3NzZmYzZjZjE2ZGVkOGU5NjhiMjczOTFhZjJiNzY3YWM4OTBiNTdmZGJiN2QzYTNmY2RlZTU0NjdiYWRjN2MwZDhjZTU5YTE3MTI5YTM2NzJjMzcyNTk4NzRiODUyMDI5MDJiMTFhMzI2MWNlN2ExNmIzZjgzMGQzNmExNzNhOGRkMzYyM2RiNWY0NWMyMzNjNjQ1NmI4YTJkMGZkYWRiMTYzNTZlNWMzN2FmZWI3ZjQ3M2NiNGE1NWYzOWI5ZmZiMGU0ZmQ5Njk1MmI3NWVkYjVjN2Y0NjQ4MjUwZQorNTc2OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZgorNTkyOjQyMzFlZmIxZmUwN2RhZjllZjFhNjkxMzc3NjljY2UwNzMxYWFjOWFlZjI3Y2ZhZTViNjAwOTRlOGU4NTUwY2M1YjgzYzMxZWZlZTkwN2Y1YWE5ZmM1MWZiZmZlNzg1ZDdkNzBlZDBiOTNlOTE4YjRkNzcxYzdiMjJkZDcyYjNkNzhlN2VlZGFiYTk2ODllYWZkNWQ0NDA4OTdhMzM5YTJmZDgxNDY1MTE2NmY3NDYzNjUxOGFmZmQ1M2Q5NmNlOWI2YjI3MjdjZjNiODdjMWE3ZTVhZDdjZjgzOWIyNDRiYjI1NjFmYjM5NTVkODQ4MTMxZWZhOTM3Y2M4ZjYxZmE4ODIwNDk2Yjc3OTQ5OGVjYjNhM2VhMWNiNTczZDU1YzExYmNmZTFmMjFjYTk1MTEwMDEyYmU1ZjM1ZWUyZDIyNGNjMjg0MDYyYjI3YjVlZjg1YWJlOTMzZjhiYzVmMWFjYjQwYjJmNDJiMjRkYjRkZGRhYWFlMzNiNjc2NTMxNDVhMmMyMGVjMGIzMDhjYjdmMmUxYTQxMTAwMzM3NzZjZGNhMzIxMTVhMjAyMmIzNDI3ZDczZDFlMzg5NWM5YjZmMzM3YzZiYTdlZmZmYzYzYmZkZTUwYjJjNDNjYjY3NDE2NTBhNGVjNmE3NDIwMTljNjU1ODFhNmQ0NWY4ZDYyZjYyZDNkYTE2MTIxMWU0MTRlYjZhZjk4OTQzODM2MTViNGRmM2QxYWM1ZDVkODc4YmE3MjA4N2FlMDM1MzAwMTNiMjFkNTYxMzA3ODJhY2ZlMGE5NjA1NDY2MDg1YThjOGI4ZGI5NjgyN2VhNDAzOWE3N2IxZDdiOTVhY2EyNTE2N2QzN2U2ZDZjYTg4ODBkYTA4NTg4ZWM3YzYxM2YwNmQyNGY2OWMzZThiYzFmMGI5YjhiZjU4OWI3MDEwNjcxYTk3MzdmNTdlYjU5ZTc2NTIzYjlkZjBhOTRlZGJiODVhNWFkOTFhN2JjNThhYzBkZjg2ZTZmYTY4YjM2ZWFjNDg1YjQ5N2ExNzBiZmRkNzk4ZTEwMzIzNzY5MDZkMGI3N2RmZTkzMzVmZTQ3YWU0MTQyZGZlOWRhOWIzZDk0NmFmMjIwNzE1ZGZhN2FkY2IwYzc3ODllNDU2NmZiOWFjYWQ1MTNjMDU0ZDg1OWVmMzA5Y2VjMmExOTZhNTQwNzkwMmFlOTI5YWFiODI2Y2RkMDU2ZjcwYTg5NTdlN2UwMDFhNjM1MjJlNTc5OTg2ZjU0MjI5N2ZlMDcyMjZjOTQ2ZTgzMjU1NGNiNGQ4YTBmNTc5ODkxYWJkNTRiN2VkMTIyNDdlZDg4MDU3NGViNjJmODIzYjQyY2NhMzQxOGZkMDNiOWVmYmQ2ZTQ5MGU5MmRjY2EyNDA5YzFlNTUzMGI5YTAyNTI5ZmVmMDIxMTRmOTZiYzBlZTc3Mzk1MDdiMjJlNDg1MTAyMjFlMjE4YzBiYWQ1MjVkZWM2YTJkYTgxYjgzNDEzNGViZjBiYmFkNDYzOGQ2ZTNkNzgxZGIzMzM1ODgzMjU2ZDE5NjRiY2ZkMzczOTFlODRkMTI4YzVjN2ZkCis1OTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYKKzYwODo3Y2ZmMzFlZWFhMjM4MDBkNzE0N2U4NzQ2YWQ0ZTJiMmUwNDFhNjg4MDQ3ODZmNTE1MzlkMTljMDQwYzQ1MjlkMmM4ZjNhOWViOTE3NTA1ZWFmOWZhMDljOGFlNmUwZDhkOGY1YzM0MWU0ZjM1ZjBiMGY5YjRhZDk5ZDc5OTZjMTQwYWJlOGFkY2I4MWI2Yzk2NDU5ZjYyYjdlMjRlNTgwNjE0ZjYzMjBiOWQ5YTJmNzkxYjdjMmFhOWRlMDJmMDQ1MDgxOTQxMWU4MGNkNjJkNjdhYjU2ZjIwNzQ0MWY4MjNlOGE0MGJiODlmNDFmYmJlOTVlMjYzNTlmNzM4ZWMyYzdlNDE4YWNkNWMwNTRjMTg2MzFkNTczYWVjMzQ2OTE1OTc5ZDhlZGE3ZWYyODdiOTYwNTNlNmI5YWQxZWE2ODM2MjRmZDAyYjNhZTZlY2YwZGIzNDJhN2U1YzQ2YjRiMzlmNWZiMTZhNTIyMzc2ODk5NzdjMWYyZDMxMGZhN2U5NDBiOWE3YzZlMjBiZWI5ZTdhOGMwNzI3ZjBjNzQ2MWRjYjZmZWU3M2I0NDQ0ODIyNzc2MzQ1ZDdkYjA2MGM3ZmY3NjFlMjI0NjI1MGIyZDdhNDhlNGViZDFmMDg0ZmFlNjkwNmMzMTIwZjU5Yjc0MGFjNmJmZGE3MGFjNmUxMTY4ZDQ1NzJjYTI5MTJmNjg5MWQzM2ExMjhlNDM5YmRhODE2NjkxZTUxOWJlZjAxNjYwYTgwZGY1ZDZlNzEwOGI3Nzg5OTUwZWU1MjNiOWIyYWM4ZDk5OGRjZDI3NmFkMDljNDc5MjY1ZmM5Njc5MDA4MTc0Y2FjMThhYjhiYTM4ZjBlYTMzODRmM2U2MjNkYWYxZmE3MDgxZDA0MjIwM2E0Nzc3ZTVhMjQ1NTQwYmZiMWNkYTg4NDQ1ZjA1NmQ0NjY4MjU2ZTcxOTM1MmE0Y2Q5ZDAyY2MzZjBhM2JmMjQxNTNhZWNhMzNlZDBkZjRiYTczZDU0NTNhNDBlNzlhNGExZmY0NjJiNmM5YjNmM2ExMjliZTJkMjdmMWVlMzFiNTY3NWFkNGQ5YzFhNDU2N2M1N2QwMzliYWRjMTk2NzZhNmEwMjk4ODFjNmMzMDYxNmE4ZDMyYjZhZjgzYzZhM2ZhNDEyYTZhMzgzYWYxZjZjZDM4MzY2YzE0NzU2NzBkYzE1YTk0MDZhMjJlMzNjYTJlMTQ5YmI3MTQxYjhlMzlmMWU0MzdhMTNjYjBlYTI3YTlmNzNmN2YwMWEwMmNlYjhlZjZhNzBkZThhMzNlNjhjNmY1NDk1MDU4YTBiNWFmOTMzYmJjZGE5NDUxZTkzZjZlODg3NzkzOGVjNjc3MjhkNDhmY2U0MDhlODAzMzUxOTI4ZWEwNWYyZDBkNTNlYWQwODhlYWE4NGMyZWMxNThhYzljMDM2YmE2MDIzOTlkNTQyYjY4N2U4ZTBjODBmN2VhNjQyYjA5YWJiNjE3OThlNTRjNTQ4ODZjODhlZWNhNjI3YTgwMTIyNTRiZGVjZDc2M2M5MDZlNGRjN2MzMTI0OTgzMDI3OGRjNGFjNmEwOGNiMjJlYjJhY2EyY2MxYmQ1NGRhMDYzNzZlNzQxMTQ5Cis2MDg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZgorNjI0OmQ0OWFjZDNhMzllYmY1MDAyZGU2YTdlNDM1Y2RkYmM1ZGYxZWU3MDBkNDFjNGY4YWUxNDU4ODJmMDA1YWExNDllZGJiODE1MDYwNTY3NTViYzY2MDIwOGI3OWNlMjA5MjdkMTdmODI0NjY4OTE3NGUyMmM5ZTVkYzIyNWQ4NjkyNGRlNGFiMTA3M2Q2Zjk3NjI5MzFlY2YwMDJjOTE0OWQwNWM3MTViMDVkN2I1NmRkMGMyZDcxNWFlZjM2MTA4NDA3M2Q1NWIxMjZhOWUzNDM5MGY0OWNmNjZmYTFkZWFiZTljMTE5MTQ3ODY1OWJlNTUwOTQ2MmIyYmY1YzBjNjQ5MGM0YTk3YWE5MzQzNDAzYjUwNTZkZTIwOWFmZTI0YWQyNzdlNjhiZmUxOWMxMWU0Yjk5ZDcwYmQ3ZjFmMGFiY2RkODBlYzU1MjM5MmI0ZTViMzg1YzI1ZTk3MDNjOTkyYTM0MDkyN2ZlMTI3MWRjYWUxMWZjNDRhMTA2MGI3N2JiYjQyZmU4ZmJlOTJjZWU3M2ZiNjIzMWUwYzY2NzQ3YzVkY2QwZTQwNzk1ODcwNzc0NWQ3YTk2OTYwNWM1MzA4Y2E4NTg2NDE4NjNjODU0NjAzOWJiZjc4ZTU0MTc4ZGMzNDQ1Mjg1ZjZjNGNmYTEyNjRlYzQ0ZTc2OTQ2YjE2YzdkMWZiNDAzNzBiYjc2ODFjYzViZDA4ZjFmMzI1NTE3YzA3NmI4M2EwZmJjOWRkODJjYzZiNGE1ZmUxNDVkZjFkMjA2OTM0MzMzZjA0OTQwYmY0MDNmNmEwYWU2YmYyZGFjZDlkMjQwZjczZDIwYWU2YWEyNGJmNmI4YWU5MThiZGFmZjI2MTVlYjZmZTJkZTE5NzQyMGUwODVkZWQ4MjlhMmJjZDE5NDA0M2QyYzdmNGRhMzFhY2IwNGE4NDEyM2VlNzVjZGI2MTE2MTg2NjdiNmFkY2MzNjc3ZjBjNTIwM2NmYjliMThkNjk5NGUxYTNiMDViMDFmOTc0NzFjMzc0ZmFjZDJhMzgwYzg3NzBmMWJhZWIwOWEwZDliNDVhYjRlMzJkZWQ4YWU1MjkyYzMwN2E4ZjgzMzUyNzU3ZGJiNzk3YzhhN2RiYWM2ZDJmMmM1NGJmODYwNTVlMDhjYzU5ZGI4MmMwODNkMmE0ZWUxNmM1NzEyN2QzMzVkYzA3YTg5NWNlZWNjYzhhOGMyNjg4NzNjYWQ1YjNiM2Y5MzE4ZTVlMWI0NmYxZTYwMzU5NmFiZWQyMzMyZTc5Y2M4ZDk4MzVlMGQ2N2I5YmM5YzMxOTI2NzFhODEyYmI4MGQzZDA5YTk1MTEwZGQ0MTkxYmJmNzZjMGViNjY2NTMyNmM3NTNkZmE5MDQ3ZGVkZmI5MWJmNjI1OGU1NzVjMDMwNWE0NmI4ZjI3ODQ3Zjc0MDIwZmQ1Y2I2MzA2YjMyZjUyNjI4NmQyZjY5ZDNjMWY3Yzc3MDcxY2U2MjJiODA5ZmY5NzA2ZWVjMTU2YWMzYzZiMzFkYzNmYzExMmM2ZmJmZWU3ZTQwYTg2YTFiYjYzNGRkMmY2MmNmM2U3Yjk4ODVmZTZhMjRkYjgyMDRlMTQyNGJjYjk5NmY1M2NhNWE1ZmI4MjMyNjNlNTY0Y2MwOGQwMTk0ZWYzOTUwMGM4MTU2OAorNjI0OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZgorNjQwOjM0YWE3NjIwZGQ2NDIxNTVhNzFlZjVmNjRkYmI2ZTIyNjc4MGM4Njc3NGQ5ODkyZDdjZmMyZjExODc2ZDA1YTRlNTFjZjcxZDAxNDc5MTE5ZWUzNWJhNjkwZGViYmEyODdhMGE4YTJhNWY5ODRlYWNmNjYyM2RiNDFjYzVmOGY4MDI4Y2FiYmIxMzc3ZDAxMGVmZmNiOGNkZmFkMWE5ZjU4M2UyYjgzNTc3NjBlYmU2OGU0ZDg3Mjc4NDRmZjU1Mjc3NzEzZDI3ZTFjOTgyOTBiNGQ4M2NkZjcxYTU3N2RlMTM4ZGFlYzlkYmUwM2ZhNzYzN2U1YTQyYzM5ZmNlNjU0MGY5MjFjMjI0OGMyOGNlYTY3ODdmMjNmYzgwNDZmYjZlZmQ5YjNhMWZmYzNmYzMzNWYxMzBiYzBiNGNjYTMzN2RjZDhiYTA1MGQ4ZDg3YmM4ZGE3YzBlMjg2NTAzNTI2ZTQ2Mzg1Yzg1YTZjOGJkMzZlYTgwM2YzYmZmNWQzN2RjMjlkZDM5NDI5YTg0YzZmMzVlODNhMzE5MmRiMTVhM2JlY2UxZmE3NjQ4MDAyZWJmOGZlYjVhMTU4ODU5ODMxZjEwOTQ2Yzk0YTgzNGViZTM5MjJhNzFiYjQyNGU2ODFhMThmYmQ3ZmViMjdjYmY4ODk0NDNmNmFkMWE5NGEwZTQ4ZWYzY2U2Mzc4ZjEyM2FjZDQxYWJmNzk2MjE2NjNhNzVlNWYxNGRhY2QwZTU5MGZkOWNiOWY1MGRhZmY5ZjlmMTA5OTU5NDc0Yzk4NDFkOWZiZmM1Mzg5NDdkYzk4MjIxZGYwNTA3MzIwODRmNjcyZGFmOGFlNTE3ZmM5YjU5NjE3YzU2NjdjOTQ2ZjM4MzdhMjFhMWM2MDcwN2M4ZjA4NmQyN2U4NTZkZjYyNGJkNzk3MmFhOTE0OWQyZDU4OGRjZjRjZGI2NmI3OGIyNTczODdkMjg5ODVlOWU1MTg2MzFhYTFiNGM5ZTI3MmVlYzcwZWU5YjJiNThlOTg5ODNhYTE0NDYxYmI2YTQ2OGM2OTc2NjIwZmY3Njg1NTU3MGFjN2E3ODk0MTk5ZGUxMjQwZWJhYmM4ZDVkZDZhYTI2MWJmZTA5ZDhiZjcxMWYyMTc1OTc3ZDI0MWU1YTMyYmI5OWY0NDg2YTdlMDIzZTVjNTg3ZWI5NTJhZTkwOGJmNDgxMjVhNzRlZDhhNjc1ZTgwMTE1MWJlZjhiMjI2ZDEwY2QxY2IwOTgxNjk3YjY3ZmRhODA2NDM4NWIzODY3MjMyMDcxMTIzMTI4NjE5YzA1ZjY0ZmRhYjg2ZmE2OTAzYzI2NTE2NzRmYzIyNTg1NTMxN2Y3YmM0N2EwMDE4ZGI3MGRhZDkxYjA4MTY0YmVmMGEyZGU4MmU2MmQ2NTkyYjQyZDhlMzAzYWVhMjk3NGRkYWNlYzIwZWZhOWNlYmY5OWVkMjNhOTM1ODIzODhiYjc1ZWE3YmI5M2QyNDQ3MDc5Yjg5Njg2NDQ3NDdhYjMyYjNhYzEwZjY0NDVkNTg1ZWIzMDExZTFkYzEyZmE2NTg2M2U2MTZjMGU0NGZiMzZhOTc4ODUyYTEwZTkxM2FiYTQyMzljZTM2OWVhMTM1OGYzMjEzMGFhYzE3YmUxM2FmNWNjYjMxZTQwNGZiYjkxNmEyY2E5MDJiNmM4NGMyYjdiMzY5NzQ3NDU0ZGI0ODQ0Cis2NDA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2YKKzY1NjpmN2VkMGU2ZTBlZjdkNWZhMWQyM2Y4OTVkYjUzOWFkMTRlMDI0OTAyZjMwZDg5OWRkNTkyYTY0YTRhMDQ0YjE5MWY1NDVjNzI3MzRiMmVjYzcwYTFhNzUyZDdlNTVhY2IyZjI4NTAzZTNlOWUwNjU2OWZhZWIxYmVjMmI2ZTdmNGI5MDY0YWVhZWY0MWJjZmEwOTdiYTNjYzQxNjUwNWRlZTdlMjg0MDEyOGNiMWFiZWYzZTQxMDZiZTlhZGQ1MTNjM2QyMjY0NjIxMWRlNmRkNmZhN2M3ZTJhNDBhMmFjNzBiMzcyNGQxZTU4NzVjNTlhZDAwNGQ4MmMyZDNmZGEwNmQ5ZjVkYWRhNDM0NWQyZjk0NWYwYTdjMzAzNmJhMjkwYjRkZmVkNjkxNjg4MTQwYjlhZjFiODIyNzRiYTg0NGEzZDAzYjg2NTU2YjY3YmFiZDg1NmU2YzgxMmE0YzI1MjFjZTYyOTU5NmYyODI2N2U3ZDNjYjdmZTMwYmQxZDY5MzkyN2I0Yzg1ZmQ1MDQ0NWExYzQ3NTNlY2NlNzUwMzU5OTZmMzg2ODQ2ODUyMTFlNWI0M2VhNWQzMmU1NGM1ZGIyODZhNzBjNTczNjgxZDM4NjQ4MGE0OTk0ODg1MDJiZTFmNTFiZjIwNWFiM2ZmYmM2MWE4Njc2NTgzNWQ3NDhlNmUyYTgxNDEwMzg5ZWM5OGVlZWIyYmNiMmMxNmNkOWQzNTE0ZTU0MjAyMWVkMWJkOWE0MWIzNzc1Y2VlMGFmNDEwYzZlM2EyOWRiMzlhYjlhODkxM2Q3YjcyY2VlZGVlNmYwNmJjZDE3MTc4OTc0ZDkzYTAzN2ZmMzAzYWM4YTU4YjUwNzg3MDY3YWNlOWVkMTVkMTI0MTc5NjQyMzA3MTJjZjE1NGQ4ODE5NjhhY2UwY2VjNjQ3MjEzNzA4NjQ3MTQ3Mzk2NzA0NDFmYzQyMTE4NWMyZmE1N2EyYTBiZjliYzQzYTFlNGNiNzhjMDk2NGFlMDY3ODlhZjM2Y2NhOGY3Zjg1MzY0YzZkNGJlMjhmZDdmMjc1MDUwYjBlM2I4OGIzYTQ2NzM5Y2I1YWIyYmQ2ZDMwMWMwM2RmYWU4MzhiMzEzN2QwODVmZjhiY2RjNTkzYjhmNzkwZDZjM2I1NmM4YzQ5MDFhYjIzZTVmZTRmNWZiZTliNmNjZWI0YmViMDZlOGJkZjFkNmU4ZGY5OGI2ZTRiM2M5NmYyNTU1NDMxZjFlNjM0ZThiN2NkNzkxOWQ0ODkxODhjNzkyYjg5YjUzOGU0ZmQ4MzM0ZmEyOGJkNDViZmNmYTlkZDk3OTZjZTA4NDlmOTliNGMxYzkxNWY3M2VjMGUwZDU5ODU5ZjMxMDA4OTJmOWM5ZjU3OTNlNWQwZTkwODU0NmVhYWViOGJmNGE4NjI5Mzg2YjFiMjhlYjk0ZDRiMDNkZWRmZjdiMTAxYTIyZjIxOWE5ODkyODVjZDY1N2ZjZmQzYjVlZWVhODE1MWUzMWFiMTFlMzhiYWQzM2JjNDBlNTE5YTg0NTBiNTkyOTc3OWFhOTBmYjBjMjhmZmQ0NWRmOTI5Yzk2MmZhYTJhMzQyYzVkNmM3MTcwYWY3MjEzMDE5ZTkyZDg0NzU4ZTQxYTQ1NDVkY2VkNzA1YTIxYjZjODU3ZTRhMmFhNjE3NmUyMTkzMzYyNmYzNjNhYzc1OGI1NjYyNzgwMTZlNzA4ODc0MWNiMzc3NmViZTA1MzBlMjZmZGE2Cis2NTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZgorNjcyOmMzMjRjYzM3MGEzYWM2OWJjZDgzMTJhMDkxYjAwZGVhMDdkZTBiNWYzZDQzMzVlZjY4YjU5NjkyNmZhZDAwNWRmNDAzODIwODAzYTgwOTM0Zjg3ZDBhZTAyYmM1ZWY5YzI1Y2FmMTYyZDViMDYzOGQwY2U2MWI3OWJjMGUwMTA1ZDNjMmRmMjkwMTVkZWUzMGZhMTIzYmU0YzVjYTllNGVkNGY5Mzg4YmFiMjJlMmI3NjAyYTdhNzYyMDZhMzExZDViYjFmNjA5ZWY2MGI3NzcyMjczMjZlZmUxN2E2NDhmM2I2ZmViZTNjNjRlODE2MDA3MGQ1YjhmNWY4MWE1ODIwYWY3YjY5NDg2MDUxZTY1Nzc5NDgxZTdlZGQ0YTAzMjZiNzJkOTI5MmJmYTVjNTUzMzg0ZjY2YzE4YWM1NzNlODQ4ZTFlNjlkOTI4OGNiNTJhYjdiYmE5OGNhZGM2YmU4YTcxZjVjYjZlZjIzYmFhZmNhNjRlOTFlMGI0NTFmMmZiMzI0Nzk2NTNhNGY1NGU3OTBkZDdiYTYyNTcxM2EyZDNmYzhkMGM1NGQyZGFkYTk5YmQ0ZTc4ZTgxOWVhMGRhYjI1ODZmYWQ1NTNkYzRkODdlOGY0NWM4NWQxZWZiMGY5ZDdhOGRhNTcxODRhMmRhYWFhZDJkMTc0YzkxMmU3OTk5NzI2OWY1ZTVhMWE5YzEwZjY0NGUyMjgwOTU2ZjQ4MzZlOGZlZWE5YjM5NTU3ZjdhOTI4YmJjNjY0MWZjNjFiNjEzYWZlZmUwNGQzNWZlYjYwZmUzM2QwM2VkNzcyZmRhNzc4ZmE4YzZmYmM1NjhhM2NlNTE2ZDFkN2E3MzFiYjRjZDM0MjhjYWFlYjJmYjcyZmJkM2UzMjBiODY4ZGZmYzA3OTRhMDc0OWM3ZmY0MjY5OWMwN2RiYzU3NmQ2ZTUyMTA1Y2ViMTY0Nzg2ODM4MThlNjIwN2JiZDAyYjI2OGM0NTQ5NmU3ODQxZGYyYmI0OWZhY2EyZTQ1YWE2Y2M1ZjUwZThjODQ1ZmUxOWZhZjZlNGQ3OWNhODRkMTQzNzUyOWJlNjlhYjMyZWU5N2MyMWUwMDAyNDI2MDk4YjlhYjZjMDQzZjNmY2EwMzM3OWQzZDA0NzcwMWM0MzEyN2ZmYzVkNDk1NDM0MzVjM2MyMWZjOWJjZjc5OGRkZTIwYjc2NDA0MDA2MWY4OTI5M2Q5ZjJjZjc5M2U2ZTJhZmU0NDNiNDIzMTY4YThmYTliYzA0ODRiZGVjNzk0OWU2YTRiZTY4YTdmMWFmZThlNjI1NmI1NWE0OTgyN2YxODA1NGEzYzA5ZGQzYmM4Yzc2NzZlODZiMTc4NmUwNGQyNzllZTYxZmFhODA1ZDllNTc0ZTE3ZDhhMGQzNjZmMTI3Nzg0Y2FkNTUzZmQwMzhlMjM3ZjZjNWU4ZmIyYzk0ODE3YmI3NmNmOTU0ZWI1MTk1ZWRlMWZmNTk3NjkwMjM5YmU2ZTBmNmNlYWM4MTA3YWM0YjVjODQzZTRjMmVkYWRjNzc1NGE1NWVjNjRhNTljN2Q4ODEyMmE4YTM1M2JmOGI3NWM1NmVkMWFlY2I2ZDM0NTRiYzM1MjA4OGNlNTcwYmQwNjZhZmQyNDAyZThkYTMzZDRlYzFkNjcwYTA2MDMwMTY1ZmJkMWYyNTQwN2VlZTU1YjU1NDg0OGQwOTIzZjc3YjlhMjYzYWY3NWY4M2I1YmY3MDJkYzczMzY4NmQ5Y2RjZDk3N2RhMzZkMzIxODQ0ZWMxZTVmYmQzOGMzZGIxMQorNjcyOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZgorNjg4OmQ0ZjA5NWY5OGM2ZjZkNWU1MzY2NjhlZjY3MDE0YjFjZmFhZTg0MTAzNzdmNjc1MDVjMWZiYWM4ZjFkNWE5YjA4ZTExNzM0ODgwM2M5ZGMxYTA2ZmFhMDU1MjdkNmM5OTYyNjExYWE4MGEwMjdiYTlhYjkwZjRiZGE2NWY0Y2E3MGRmYzAwMDhiMTgyMjliNGM3ZTViODk3MGZlYWM0ZjVmMGIyMDEyZjdhY2RlMmRkODM1ZGNjOTQxNzVlZDk3Y2E2OTFmNjZiYTFlODZlODZkYjJlMWI1NDZkMjRiNDQxNjYwNjEzMjdlNWU4NzI4MjllMTY5MzY3MWM0MmZlYWQ5OTIxYmZjOWExMGViMTZkYWMwMmFiNzI1ZWQ0OGIzNGMxNTM3MTZjODk3YmE5MWUxZDU1ZDUzZTY5NTRiZGNiMjY1M2Y0OWE1YmRkNmYyNWIyYmExMDllZTBmOWNjZmZkZGUzOGU3YmI1YjZiYjIzZWU0YWEwNjJlMzE0OGZmNWUxMWZjYThhNDg0YmUyOTg0OWFhZmM0MWRkOGQyM2M2ZDA1MWY1OGE5OTg3MTdhOTZjMzJhZWY4OTdmODBmNTE0M2E4ZDkxNDA5NjU1NDQ5MjY1NDBmNmE5ZjMzNzYyYTk3YWNlMmExMjc4MzljMTkzYWE2NDNkOWU3Mjc3ODU0ZjM2MmU0MTQ5YjM5Njg4YWYxNjc2N2YyMGNiMzM0MGRmOGE2MWExYzg1MGQxYzc5ZDU0MDg3NjI5ODUzNDFmYTYyZjI4NjNmZjY1MGNiZjE2NzZmNmUyNDc5ODdlMzE3NjkxZGM4Yjc3NjQ3ZGI2ZDI2ZTlkZGQ1MzkyMzUwODM0M2YxNDA0ZTE2ZTJlMTNkYTRkYzFiZjUxYzljMmFkMmU2MDRkNjg0M2YyYTUwNmFiMzJkYzg5M2M5ZjZlMzkyOTE3ZDA0YjRiM2YxOGU3Y2QwZTYwZDE3MDk4N2EyYTQ3OTU3MGJkZmM0YTkzMzU3OWExOWRhZWE2MjhlMzk2NmRmNTkyODU3NzVkYThlZDFlZjFjNjA4ODhjN2Y2NWY4Y2NhYTIxZmU0MTk2ZDYzOGZmNWFiOWUwOTQ4YjJiN2Q2ZWNiZTk4ZjM4YTIyYmY5Y2ZhYzE0ZDVhMjc3YzE2YjZjNGI0Mzk5OWMwOTJkMGZjZDBiNmY0ZDRiZDBiN2NiZTA1ZDAzZGRhYzBlMmU4Y2M3MGQ4NjI3YTk3ZTJmZmUwZjdkN2Q1ZTgyYTFhNTlmYTE5MGJmNzk4NTMxZGUzYzEzMGE5MmNmZTczN2YzZDQxYWU2N2ZmOTA0MGVhODZiYWU2NGYwMDM1NzY1NTc3MzI2ZTU5NWQwOGZhOTBiNjQ5MGE4OTYwY2Y2MzZiZTI2ZjIxY2YxNWY5NjI4NTU0ZTBjNTUxMzIyNzRhN2FjZjZjYjczOGFkNTM1ZTg3MmU1OTFkYWE2MDJiMTdjNjRmMjk2OTUwYjJmNjk3OGY1ZWRiMTEwNjNkNWQ4Mzg0MThlNmFhOTYwZmQwOWY3MTM0MjZhYzRkNTIyZmMzZWJlMWE0NDBjMDRkZTczOThlOWQ3ODdhNTIwOWQ1NzIwZTE3OTQ2NTQzYTAyNTE5MjFkMWU2MWNkNTFhMWI3MWQ4M2NkNDBhNGIxOTBmZjU4NjY4YTkwZDI2NDU3NmVlNjc1MTEwZTE3YWFkYjc2NWQ0ZThiZGVhNWQ2ZjhiYjg3ZDU1OGNlYWVjMzNmODFmYWNmZTBiMmNjNzhiMzczMzViOTFhYTZjYjdmNGQ3NDkzMDJkZjczZWU5ZTAxYTkzNmM3OGIyYjFhOGEzZDJlOTQ5YjQ4Cis2ODg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWYKKzcwNDo1MmFhODg4ODVjODE4OTA3MmVkNmZiYTc5NzJiOTJiMzI1NDRjMWZmYWU2NDFjZDc3MDQ5ODdkNTY2MTMzOGQ1YTg2ZjQ1NTQwYWJkOGZhOWIzNmRmMmE3NGFjMGU3ZmRlMThhOWI4NjNlNjg5YWM2YzUwZWM4MWNkZWE0ZmY3NGViYmE5YjRhNWJmNDAxNDc5ZTNjN2I0YzQ0NDYxNmYxYjM4NWUwYjMzNWMyNmI5ZWM4OWVmMTBmYTJmNWU2ZTdiMTNjN2M0ZWY5Yjg4YmI5YmExMGE4NzE1ODg2ZDZiMGU1OThkZDVhMmU4YjVhYjk4ZjZmNWE2ODU1YmRhMjQxYmVlYjBmYmY1Mzg2OTI1NGEzOWMyNTAzOTViNzVlZThjNmNkZTZlOTExZjlkMTEwYzE5NzU5ZWU5M2U5MGY3NDFiNDYyMGIwMDhjOWM1NGNiYWYxMGQ5Y2QzOTg1NWY2NDkzYTYxMmU5ZmRhZjg3MDk1NTJjNGYzNmVhZTY4MzFlZGJhMGJiZGVjNWNkZTUxOTNlMGNhMjRjN2FmZGNkNjZlYzZkM2Q5NGZmMmZiMWQwYTliNzFkYTRmMGQ2NjM4ZmE5MjRmNzgwYjNjZDZjMjcxNjg1ZDIzZDYwMThiZDdlODdhNTY1YWM5Y2ZkYTAyYzVkMGZkYTYwYjJjMDc2ZmZhZTZhYTk0ZjczYTU4NTI2YzZiN2UxYzA4Mzg0Y2IwYWE2NjBjNmE4YjkzOWY3ZDdhYzdjYTU3YjdjMThiOWJlN2U0OTZmYTBiOTQ3NzFhODkxOGE1N2EzZmE1ZGMwM2NhNWIzZjQ3YjhjZDk5Y2U5N2Q5ZDAxYzI3Y2Q5NzA1MDYwMjIzOGVjN2ZhYzg3MmMxZTliMjgwZGQ1NTFhZTU5NzM0ZWU5MzVmNGMxMjU3ZTA2N2Y1ZGUyYjZmMmZmNTMyY2I1ZjQ1ZTIyOGE2YTk2MWQyMTA3ODM1ODc0YWEzMDdkN2Q5ZTQ5NWVlZmM3Y2MxMDM5NzQ1YTQ3OGE2MWVmZjYwMDgzNjg5ODI4ZjIyNTMwNGJjM2EyMjUyNGE2ZmYzODQ5ZWYyNjBjODQ0NTg4ODRjOWIwMTFiNTY2MDk4OGRlMGU4ZWY0N2NlZDljYjVjZTMxYjY4NGMyMjE1NmNhMGVjMWM2MGMyYjA5ZDQ4N2U1NjcyZTVhN2JhOThhMWE0YzhkMDM5MDQyMDE5MGJmMmEzZDRkNTE5MWYxNjRiMjQ4Mjk3YmVjOThlNjU2NzQyNzcwODQ5ZTlhYmMyMjE1NmE4YTIxNGM0NjRlYmNkY2MwZGIwYTZiNzdhZDI5OTg3YjZmZmEyM2NmMTI4MWE1MzE2YzJkYjFlOGE3MTJhY2U4N2Q2MDIzZjEyNTJjY2RkYTUxNzIyZGJkNDdiNzU4ZGQxMmM0NGM0YzM1NmNkMDA1ZDQyZTFhN2YxYmJmYTViNGI1N2EwZmVkYmJkY2U2ZTBjZTBmYzY5ZDkyNDE3YWVjYjhlN2Q3YzU5M2ExZDFlNzRlNTgyNzMwNzJkYTdlNGJjZTRmNGJkOTRhMDNmMWRkODdkM2E3MDg5MDc5YWU2Y2FhODBhODM1MTA5ZDk4NGIxOWFhMzBmM2U1MGRiNGZjOTFlYTkzMTgyNDE4YWI1MDBhNDRmNTIxZjhlYmY3ZTIwMjM4OGRhNDk0NzJlNzQ0MmZhNDA3YmM2NjA0YjhjMDk1NGE0MGY5YzU0M2E1NWE0MzZhMmVhYzk4ZGQ0NTQ3NTUxMzc2MDIwMjExMzBhOWUxM2NjNTEwN2E5ZjIzZmJmOWQxZDE0NDhhNjBkMDlmYmFlYjc0NzJmZjNkMjI3ZGY3MDk2NGNiYmY5YmIwYTM1NzgwY2Y3OTE3ZTU0Cis3MDQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZgorNzIwOjE3ZDhhYzE4MWViMDNhOTkzNjhkYzZjYjRhOGUzYjZlZDNiOGViZmEyYWM2ZTBmOTg4MjQzYjk2MDY2MDMxMjYxODI3YzM5NjQyOTVjMzNhMjBlNDVlYzQ1Mjk1MDllOGRmYjc1NGM2OWU1OTg4ZTdiNjdhNzM3MzY1OTgwMTg0ZTkzNWZjOGZlNTFiOGU1Yjk1MTRlMmI2MTI4Mzg3MjMyMGU3NWE0M2FhZjkyYmI5YWM0NGRjMDc3NDA2OGQzYmU0YTE0OTc2MTZkNTg2NzMyMWUwM2FkOWU0NDA1NDViODJhNDhiZjVhMTg1NzAxZjk2ODNjZTI5MTc1N2UzOThlOWY0ZGVjOTgxODI0OTNkOTc3ZGJmNTc1MjljODhlNmM4OGJhOWM5MmNkNmM1YWY2NjhkOWQzN2M5OWQ4NWNkMTFlNThkY2Q2YjE1OWRjZDFjNjk5YzMwMmRmOTVmYzllNjBiNjUxYmVkMGU1NzFlZTZkYjhlNzExZDBiYzdjNjllNTI3MDZiZTVhMTgxZmUyMTNiMjhjNzBkMmVjOTJkNDUwNTZlMjlmZjIzMTQzNjdjMTY5NTczN2U3M2U3NWI3YmU0MDhjYjMyODdjZGNhOGI1OTJmODNmYjAzODcwZWE4ODM0MzMzMWMzYjAyZjBkOTE1NTJkNjczZDQxYzI5NTdiZTE0M2JkOWRhZTY0ZWVkNmM3MWFjOGQ0YThmNjI3MTEyNzIwYjFjNWI5NWMyNTU1YmNjNGZlODcyN2ZkYjY1MGYzZGI4MGE5YzE4YmI4ZmRmODg1ZWZhMmNmZWI0YjU2YTFmMWU3OGJjNjcwYzQ0ZmJjZjQ5Zjg0ZGFhYTFiOWIxYzk0M2RlMjA2ODM2NDY3NGI1MWEzODlkY2VkODYzYzhiNDk1MGJiZjFlNzA2YjlkNTEzMjMxOTY5N2RhMGY1NzE0ZTAzODBkOGQ3NDExZTY1MGRmNzhmMmU4NzVjMjE3ODEwNWY4NmRkMGI3ZmY0OWY5OGJjNjExMTVlNjIzMWYwMTk1NGMzYzczOTU3ZDhmMjY0NjliOWIxMjIzMmFlZWMxYTU5MmZiMWZlZTYzOGUwMmMxYWM4Yzc5NWE5ODY3MzRlODk2ZTc5ZWJiNTEwZDk5NTZlNmZkYzI0MjFkZDMwNGM3ZmExMWRiODJkYzA1ZjA1M2Q3ZmIwYjliNzdjMzY4Mzc5MjQ1YzJlYmMzZmY5NTczNTQ4OTg1ZWVhZDM2NGY2NWQ3NzM3Yzg0NDQ0YjAyMGI2ODc1YjBjODQ1Y2FmOWU1MjE1MDAxNDNmNzMyY2YxM2RkNDkzYTdmY2FkMzMyOTljZWM2ZWY1MGEwODhhMWJhNmFhNDJiOWZhMWJjYmFlNjA2OGRlYmY1YTA3NTE3ODVmZjY0NmJmNzk0NTQyNDJmNzg0YjcwYjZiMzZmOGM3ZmExMjQ2OWZhZWE2NWRjZjJmYjhhYjc1NDg4OTNjNzI1YzEzOTUxNGMwYTMxN2RjYzZhYTc2MjQxY2I3NjIzMGU5ZGFlYmEyODUzZDNhZWViZDAyOTAxMDM4YzUzYzA4NzY5YWJmNWQzNzM4NzUwYzZmMjg1NDA3MTcxM2VhNTEzODM4ZDRlZmRlYTIzZjEzY2UxOTRhYjNlM2FkY2I1ZTY2NTA0NzE0Y2EwODQxOThjNGZhYzFlZDU5ZTBlMTEyMDMwMTQyYWFlNDZmODk3NzJhMjQ0MDU1NTk5MGQ2NTliYWM1YzA1YzRiZDZmN2JlNTJkZTM4OWNiNTgxZjdhMzgxNzU5NzQ5ZTEwM2ZjMTg0ZWY4ODBiZjZkMTcwYmVlYjVjOTMxYWMwMmVjZmE5MjMyMTAxM2RhNDQ2ZDg5ZDZhYjU2NGRhNmQ3ODY1Y2RhNTA2NzdjZTVkMzUyY2E5M2JkZjcwMjczNgorNzIwOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZgorNzM2OjdkMjVlYjIyMjM2NjY2YzE1NzQ3NDhmMGZkNjMxYzg2OTRkNTczZGY2NmUxNmJkZTg3NDkxZWZhYmE4M2IzNmQzODlmZjEwZmVkZjNhOGZlNDY4OWQ1NzgyNmY0N2M1ZTBlYjQ3MTE5ZjhmNmU2MWM1ODk2MDI3NjJhNmMzYTdjM2JlOTgwYjlhMjcxZjcyMTQ4M2FkYTMwODg3ZTVkZDZkNzVkOTA2NTExYjZjZjQyMmQ0MWFhN2FkZjFkMTI1NGZlMjk5YWE1ZmFhMWJlNGI5NWU2M2YyMzVlMjZmZTEwZGNiNjBhMTg5YWU0MTUwMTZjNTQ4NDk4OWE3ZDMyZjUxNDk0ZDlhYzI4YzgxODIyZWIyNzYwZWE3MzRkYTIzMjBmMDgzZDNjMmE3MDhiNGE2ODU2OTA3M2IxMWU2MzQ5NzdiMmFhYTA1M2IwOGM0ZWYxYzExYmY5MmQ0Y2Q5ZGFjN2VjZDkxM2JkYzRjZTcwYTVjOWYwZDU1OWNmZDk4Y2NhMTJjNDNjODEwMmE5Yzg5MzQ5NzAyYzE3M2RlZmVmODIyMmI0ODZjMmZiNjNlMmIwZWE5YjFhMTAzNTUwY2FkODcxOTg4M2YzNDljOWIyMWMxMzVkZjFjYjg0ZDNmNWVjZTRmMTUzZGJiNjYxYWJhZWQzMDU3NGM1M2ViNzkyMmE3MjczN2E5MmQ0YmFiYTAwOGJkZjk4M2E1NmJkNTg3ODkyNDJmNDE3NmUzYzY1MDMxZGMyYTQxOGIzMmE3ZmY1M2Y0NTU3Y2RhMzQ1ODNiNzA3MTBjNmZlZWM0MjA5MzgwODc3MjhmOTY5MmMyMWVkZjAwYzZhOGNiNjQ4N2Q4ZjUxZGVkZTc1ODgzNWNiNzE2YjM4M2RiZTkwZmRkOTA0Nzg2ODdiMWRhNDU5MDVmMGNlNWYwY2MyNzY1YzA3MzdkYTk4MTBjN2ViYzY5OGJkMmYwMGQwZTkwNWZkODZiZGY5YmFjNWFjN2NlNGFmOTBjZjg3MjQyMzU2ZmRiZjNiYTBjZjE5ZTgyZGFmMjFkMjI2MTM2M2U4YjMwMTg3ZWRkOWIxMzM5ZjhmNDhhZmM4ODgwZjcxYzA2YmQ1OWZmNzkwNmUyODQ3YzUxMjlhYzIwZDJlNjg2MjJiMzRlYjI5NjU3ZmU5NDlhYjQ5NTMyMzJlZmFjNWViODNlZmMwMTBhYWRhMDU5YTUwNzNkOGRhZDEwMDM3ZmQ1ODZhYzkzZGM1NDE3YzkxNjA3Mzc2NWQ3ZTFlYWNiM2RkMDc2ZjIyODA5ZDA2ZGQ2YjBjOTBiZDc3NjAxNWE4ZDc2OWVlODJlOTk2M2M2MTUzMDMwYTg0NTEzMWM5Y2U4Zjg2NDJkZWU0ZmM4NzhjN2Q3MjdhYjM5ODJjOGMzMzk0NDgyMTI0YTMyZmYxMjY4NDk5MWZiMjExNGY3MjU2ZWIzNDIxMjczMTI5OTA1YWJjODdkZTliMjdhMzQwMDk0NDBmOGQ0NTM3YzhlNmRmMTEyMDliNzI4OWI4NGFjZTZmNWQ2MzY3N2ZkYTMxOGM4ZjU1ZjY1MzVjMjcwYmMwYTM5YjlhMWQwNWY0NTlkYjMxNjQxNTAyMWNkOTBhNDc2ZTEwYTM0MjQ5OWI4ODE4MWMyZTU5ODU5MDJmNzYxNjU0MzgwYzU5Y2FmYTkwYzBjYTA1NmMwNThkYWFkYTJkZTE4ZmU2ODYwYTRhNWJkODYwYmI1MGIzNDg0MThmNjY4MjY2ZDczNTUxZDM4Yzc3MTI2NmVkZjE0NjZkZDUyOTg5ZjM1NTFmNDVlMzA3NWQ5YmJiOGM5NWQ4YzhiZDBmMDYyNTM0YmNhMzcwYzBkZGFmZWIwOGM1MTc4MTEyNmI3ODVhMTc2ZTk0MTBiMDU0ZjY2YjU4NGM0ZGEwNzc3OTcwYTE0MTU5OGFkYjE4MjZkNmY1MDM4ZGE2ZjI1ZjAxM2ZiZmE3Cis3MzY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGYKKzc1MjowYzJhY2U2ZDQyMjdiMDMxNGM4YzliMzljMjA5MDU0MTc1OWY0MGY5ZDVkMDUyM2IyNWYwODE0MzZiOTk4MmJkOGIyZmQ3ZGI1MGI2ZTZlOGNmNWVkODI4ODU0ZjU0OWM2ZDZmN2I3NjgzNzJlNzNkYmY3YzgzNDc1OWIwZjAxZDNhMWVjZmJiNmQxOWIzYWNlODVjYjY0M2U3ZDY5YTlhZjdkNTkxNjA4ZjI2NmNiMzQ3Mjk4ZWIzNzU2ZGE1YjkyMTg4YzZkOWUxZGFiMzFjZWU2NjZiNWRkMDZiMzA3N2EyMWJiZDE0NDc5YTM1NzAxYmI1YTIxZjgwNDE3YTQ5Y2YzNjMzM2I0ZGExYTdhMTg3MTQyNGNmNmMzYjkwYTA1MzBjOTc0NmQ3NTk3N2I1ODVkNmE2MjFkMDgxNjFhMzY5NWU1NmI1NjkxODRmOGJjN2IyNjUxOTUwNTQyMmYyMjBhNGYyZTIwZDViNWRhZmJlMjRhMDgxMWI2NzVkMGQ1Yzg1ZTIxODBiYTE5NDQ5MGY5YWM3NTgwMDZmMjM4ODZhYmNlOWUwNmQ0MmI4Yjc1MTllYjJjNzdmMmEwNTQ1ZmQ3YjM2ZmYwZjE1NTQ0YjE1Y2UxMDBhYzdhOTZjY2RhNWIwYTlkN2I2NTdmOTM0MDdjODZhOWM1OGUwOGFhOWFkMTNmZWM0MDYwMWQ5ZjdjNzkyMjVlZjhiOGI0MDI5ZjRkNDcwZDYwNmIzZTMwYWNkNDYzZGNkYjQ1YzUwYThiMWRjYTYwNjNkNTZmZGJkMDUzMjZhNzVlNmExNmU4YjZmYjQxYzMwMzBiOGIwZTYxMzY5NGU4Yjg3NzY2MmEzMzYxYzk1ZjA1MzQ1OTlmYmZjOWE2MjNmYWU4YTExOWU5OGNiODA2OGE5MTFjY2E3YzRlZGMxMDVkNjViNTM5NWQ5ZWMzYjc1Y2Y3M2ZhNGIzNzFlMzMxOWYyNDFmMDYwYjg0Yzk3NjA0MDMzOTU5MTNhYmRkNzRiYjc1ZmJlNDY5MzIzMmE4NTNhY2UxNDgyNDhmMjE4ZTVlMGMxNzViYTgyMTk2ZmQyNmY0YzQ3ODAxNGVjMDhlNWJjNDdiNTk5YjZmNDI0ODM2Njg5MjVkN2U0NWVlYjU5MDI2YTI1ODlkNzZkZDJhNmJkYzIzYzI5MjE2MjM1NTkzOGY0Zjc0NDBmZjVlYmE2NWM5NDZhZGI5MDBmMWRkZTA1YTg1YjBkODJhODRhMmFlOTU4NTY5NWNiY2NlODVhODhkOTljNWY0ZmZmOGUxNTNkOTQ3Yjk3Mzc2NmM5MTIwYjVkMWZlMmQ2ZTNlYTlmYWQ0Y2Q3MzJlM2FhODY5ZDBhNzIxYzE4OGZkZWFkNzZkOThkMzdhNDY5NmJkOTY4ZTIzZjA2OTUwNmM1MjVmNDYzNjJhY2QyMjJlODQ1Y2Y0YzA2NjVlNjM2OWM0Y2EwODIyZWI4OWQzNzExYjA3MDE3MjQ4NWQ4NDQ3ZDIwM2Y4MGNjODJhMTc0OTQ1YzA5NGY1ZTk2NTlmYzdlMzA2OWM4ODQ4ZWZlYmVmMDlkZDM0OTViMDZkMTBhNjU5YWJiYjM2M2I3OGE3OWJkOGJjMmRlMWJlZWNlZTk3OWQyYjNiNTA0YTA1NGM2NmE5ODM5M2FiMDU0OTMxMTMzN2ZjMTIxZjM3MjhlNmU4ODIxYmU0OTgyMDc1NWZmNTc4YjM3NjM2NDNkZDdmM2I1NGI0YmE2OTQ2MDkwMTc4NDljMGJkYTY0MmE0OWU0YTg1YjhlZWQ2N2NkOWRhZmYxMGM5ODA4NjlkOGUxZWRmOTU0NzZlNzljNTQ3NTExMGQxNmNhZDNjMjcxYjQyZDQ4MDljNjU4YzJhMGNiYmM1Mzk0ZmM4M2RjNDE2ZDI1NWY4MTQzMDFiODcxMWI5MTYwNWU3M2I3NDRkYjllZGNiODdmYzZiMTRjY2E4ZmZlMTRkMDA3MTliMDBjNGY4ZjUzYjRlODI1YWNkNmI5Cis3NTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZgorNzY4OmE5NmM2OWMzYmYyYTRiZmU2N2JjNTUzYzYwMjhiYjVmNDJlZTQxNzhmODdhZWU3NTM1YWFkYTgyNGI3MjcxNmE0MGFmM2JiNWJmMDM5ZjZjZWU1ZTQ1MjRjNDI0YjE1ZGNjZDFhZTAyOTgxYWIzODJhNjA3MGZjNzM5ZDhmZDU2NjZlMDk3ZGRmNDBiMDE0MmE5ZmZjZjA2OTQ0NWNmNTBkYjhjMDgwODdkNWE3ODQyMWY1MjY5MjJlN2U3OWJjMmExNDllNTg1MDc1NzIwYzUxYmUzNDFkMDgzZTlkY2Q1MWFhYTZhZWI2OWZiMDgzNDZlNTgyNjljZDg5NWFjMGJjMmZiMzI5MWY3NGE2ZDcxMTU1MTUwYjViYmNlZTUyYWRhMGQwOGZlNmU0YWZkMmQ3ZTViYzdjNGUxODg0NmVkZjJiZTkzOWJjNDY4MTViNjhjZWQ0NTMyMTM2YmZmZGQ4OTBhODMzOTNmNzU2NTNiZDk4M2YxY2U1MmFiNjk5Yjc1ZDBiN2MzMjkzZTM5OGMzODA0OGU3NzhmNDJhYTk4OGI1MWZiYTEwYjZhYTM3OWNjMWFiZDEyMjkxZWIxMWE5MTBmOTI3ZDEzYjdhNzRiNzI1YzI3ZGI4YzlmNDQ5OWYzZDNiMGQyNWYyZDg3MzgyODBiNzNlYmIyOTc5MGFkYTZlOTVmZjc5MzNhMTg5ZTM0NTMyZTMxMjQwMjdlOWZjY2FiZjIzZWM2NDY5YjQyNWM2MmJhNGUwY2Q2ODE3N2M1NTVhZjBlNDliYzNkNDhmNGI4YzQzMzI4YjU3YmRkNDdjYzJjMWE4N2RmNzc2NGUyNWQ0OTM5NWM2ZjM1M2E2NmI0MmY0MWUzYmQxYmM5ZjZiYTg0NzI0OTkwZDE5NzhiMzRkNzQwZTBiYjg0YThkZDQ2ZWRiMjQ1MjU5Y2VhMzdhYTFmNDZjYjhmZTU0ODAyYjY1Yzk4OTg2ZmU5ZGM2MWEwM2FlYzQ5M2VjYzJiMjYzNjgyZDU4NWNiZjQxNjJkNmE5YTdkYTc2NjBmYmUzN2EyZTg5Y2YxZDRkYWMzODIxMWNmM2NkYzA1NTQ2NzZlMThjMWE0M2U5M2U5MGM5NjlkYTdjMWU1MjY1MjM4ZDU1YzljYmIxNTYzYjA3YTc3NTM1YWUxNGI4OTVjNWIwMjBmM2JkZDdjYmVhMjcyZjc5ZTVhNDJlMjMwMjVjYjI1YWVmMzBhN2UwY2Q0M2QwMWQ5M2Y2ZGFlMzZjNWNjYzUyZDE2ZTlhYmJiYjY1OTI4ZTBlYjk3ZDgzYzE4NGE4ZTE4MWM5ZDg0MzBmM2QxOThkYzAyNGQ3NTdlYmNhNGRkMmYwMTE4NjNhZjg5M2Q0YjI1YTQzNGUzMDRmNmRiNWI1ZDQ2ZTE5M2ZkODM0MDRiZDk3MjE2YzMxNGI5Y2RmNTliNjhlYjMyNzI3ODk0NzJmMGUwZjA3N2U5OGZjZjUzYTk5NzlmZDA4YWUzMzk1OThkNTdhMGU1OWMwYmZiN2M2ODk4YzA0MjYzNGVlN2UzMmY4ODllYjA3ZjViMTdiNTY4YzAwN2JhNTVkMDVjYjMzZjU1NGJlYzZmN2RmZGYxNjVmNDliNjU5ZDNlM2FmODU5ZmNiMzAyNGY2NjEwYjVkYjZiMTc2ZjI1MGU4MzhmZTRiYThjMjFjYzVlYTI0NzI4NTE4NTM3MDJjYmE1YmE5OWIxN2RmMGE0N2FlM2ZhMGVjYjM2MDk5YzIyZGY2NzgyZjhkNDVkOTEwZWJiMmFhNzAxYzYwYWYwZDU1ZGE1MTY1OWRhM2JkNjA1NGFmZTU0MTMwMzY1MzI3NDFhZWI4MDg5MzJkMTBhNGU1YWYzMmVlOWIyOGI2YzM5YTVjOTEzNzFhNThkZThjNDIyMGY4YzY1YjA0NThlNzY0ZGVhODQ3YjA3YmU3OGM0MTYxMGUwMjU4OGY2MDQ3MzM3MDEyNTViMjZhNWU5Y2E1NzJjMTZmMzJiYjkyMTE1YzA3OGJkNzZjZjI3MGFjYTFhNTZiMjgzZmI5YTY3ZjJmOAorNzY4OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZgorNzg0OjIxMjc4NzcwYWM5M2U5OGIwZDdhNGE1YTJmYzcwMTRlOGNlYmJhOTdiNTc1YzQ1ZGMzYmViOWVkZDdlOGEwNzQ0ODYzOWJjMjg1YzllN2E5ODAxNGQyYjQwYzJjZDMzYWM2ZjE0ZDE4YWQxZmZhNWQxMmRhZTQ1NDUyN2NhOGQ0YTgzMmUyN2UwYzk0ZDZiODcwZjc3ZTNjMTFjZjU0YmNkOGE4ZTQ5YTJlZGM2Y2U4ZTE5YmVhNjFjN2JiNWVmNGY3NTM0MmQzZjJkYzVlNjk0ZGY1NzVjYTc3OGMwMjQ2ZGEzNjY5NTUzZWI1OGM3ZGEwMDZlNGZhYTlmNThkNTMwZGExNjZhMDUxY2M0YmIxY2E3MDA5MmJjNThhMDdmYzBjZjY2ODU1OGUyODQ3MWY2ZjgzYmIyNjY3ZTZiMTMxYTRlYzc2YzI5MWEwMjdiN2E1NjNkY2IzNzNhZTFkZTE1MmMxNzg2NWUyNTQ2OTlmNWE4ODY2MjYyMWNiYmZhZTg5MjMwOWNjMmYwNmVjYThjMmE2Mjc1YzdhNjUyNzdiNjMyNjZiMzZhOGVhZWIzMWEzYjc2ZTBjYWMwMWIxNTVlYjBlNzk5OGMzMGYzYzdjYjk1NTZjZGYxNDk2MTA4ZmJjNjU5MmMyZWY3YTNiZDU3YTU1OWNlOWQ5ZjhkZDMwZTM5ZTIyM2E4MDkwOTE5YzMwMmE2ZDcwMzYwMGVjMDUzZjUwNTE3OGU4M2FmOTcyNTlhNWVmZjFiMjIyY2VhY2M3NGJhNmFjM2U0NjA5N2JiNjJjZGY4Y2VkNmIwMjdjNjhlNjBmNzZjMjIyYTY5NTcyODQ5MTJlYmNiYmRiNzQ1ODVjMDNlODg2N2JlYTY5ZGU2YmRkNjg1NjY4NzNlNzQzZWFlMDg1NzQ0OGIwM2IxOTE4OTBlNzkxNTI5ZTRlMjE0OWY4ODEzMGFiOTEyYmJlYmEyN2VjZDc1YWU0NGQ2NTU0ZTMzYmNjYTgwZTkxNjFiMjg1MzI5Njk0ZGQyNDZkMGIxNDZkOGE4OTE4ZWY2OGJhNWRkNDlhZWEyMmFkZWEwMGI0ZGQwMTY3YjlhNGE0YjVmMThmYTY4NGJlYzdjN2Y2MjhlYTc4MzJlZTZmZWExNmIyMGFjMzAzZmVjN2E4ZGYxYmIzOWRkODQ0OGQxOTJjMTllNjg2ZjkwZmJjNzQ5Mzg5OGE4MDFmMGYyMzE2MDM1OTJjYWE1ZmM1ZTU2MmI3MzdmODJiODlkZTQ5ZWU1ZjJjZjdlYzViZTYxYWQ4YjE0NWRhMGY5ZGQyZmEwZTZiYzZhMGRjMTc2MTNjNDhmNWUxY2EyNjBkMzVmYjljODA3ZTI0NGRkYTMzNzJkNjFmMGY1OTg4YjRmMmNkZjcwM2ZlNTA3Y2Q5MzJlYTBkMDgzMzQ4MWQyYmNhMmRmZGJhZDRhYjUwZWZkMDhlMmU2M2EyOWVhZjFlNDE1NWQ2YmM4MGYxYTY2NWM0MjM3Y2Y0MGQzMzFhYzFkNTJmMjk2NjdjOTU4MWQ1YTY2YjdiNmM2Mjk5NTY1NTNhZWQ0N2RkZTcwZWYzNDkyYmU2YjRhOTcyOGY1NzQ2OWRiMWQzZTgzMGE2NzE5NTMzZDc1N2Y2OWI2ZjQwMGM3ZjY2MzZlZTY5OWYwZGMwNjI3M2Q3MGI0MDMzNTc5MmFhYmRmODEwMTk1MmY5ZWFjY2Q0MGRlZDVjYjkxMWJkM2U1NWQ2OThiN2FlNDkzN2E2MTlkYmI2N2M3YjAyZmRmNjdhOTcyNTNkMGUwZTNhYjBhOWUyNGJkZTIwNDZiYTgyYTY5YjdlMWJmMzJiYWIyZmJiYmMyYjAyNjgwZTFjMmIwOGMxMDk5YjY2MWY1YmRiMmViYzU4ZmQzOWU4MmM1ZDRiYTE5OWVmY2Q3M2Y4YTE4NDNmZWE5Yzg0YzA4M2FlZTQ1NmFhODExYzlkNjA3MmFhYzk4NjhkNjFmM2JjY2M0MGM3YjFhM2FhNDcwMjk2YzRlZTc1MjVmZjI5ODU0NDg0YTA1NDg1YzMyNzE4NjM5NGRjYWIwYTliNmZlYThhMDBiZGZjNWFkNjY3Yjg1YzY2Cis3ODQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYKKzgwMDowOWEwMTEzYTc4Y2YwOWE0YTdlOGNhNTE5YjYzMDA0ZDYyZjUwZDg0Yzk1NzBlNzQzMWU0YTlkYzFlN2Y5YjI5NDMzNzRmYzNhODM5NjFlZmQ5YjQzYzY5NjdkOWQzNjU1ZGFkMmExZWRjNzBiOTQ4YzNmZjEwNjIxYWE2MGQ2NzM5ZGEwYmI3NWQ0MzRmNDZlMjUxOTYzYmU5MDEyMWM4MDJlYjAyYjc4NTYwYTBmYTU3ZWIwZjhiNzU5MmNhZjJhOTE5MjhjODc0NTczZGE5Yjg1OWM4NWMzYjgyYjkzYmQ0MjdhMmUxYTk4ZWE4ZmQ1MzM3ZGE3M2Y0NTYwNDFhMDFmODI0YmMzZDEwNDJmM2RjZjczZjljODgwOWFlZGZhYmNjOTgyMDg3ZWZhMTk1M2JjOTVkM2IzM2E0NjI3Njk1ODM5YmFkYjJlZjViNzAzNTNlMWVjMjk5MmIwNzA4OWM3NDdkZDQ2MTRkZTFiMWYyNzNlOGEyMmE1MDAyYjg3ZDdkZDJiOTJmN2M5YzVmYTNiMmMzM2U0ZTAyN2U2YmQ5M2NhNTA3MmRlOGY5MThiZDQ5ZWYzYTgxOTEwMzBlODNmMTA0ZGRiZGNjMGU0Zjk4NzgzMzk3YzRlMWQyYzZmZTAwOWM0ZjJiMDA0MmUxYzE2ZGJkYmIzNWY2ODlkZmY5ZTc5MzQ5NmFjMzNmNmM5NmY3MDc0MGEyYmRiMTg2ODhmZDliOWIyODY1Y2JkNDM0NGMyYTU0ZGRjMDMzYTgzZWYzZDEzNGQ1YzhlZTc4NWY5Njk3ZGJlMjhkZTZmYTAzNGNhZmY3ODkxOWIzMmFmNjJlN2NhZTkwY2I1YjcwOWUwN2E2Y2E4NDQ5NTlmZDVlMDE1ZGFlZDNkOGNlZTU2MGMxZGM5NWRkNWE0ZTFiMzBjMDM1NjlmZTNkOTI2MjA3OGNiYzQ4YzI5NGFjMDYwMzMyNWJkZTdjYmI5ZGVmNmE0ZDgyOGVhYWY2ODA1OWVhYTI3YjUwZWRmZTgzNTQ1ZmM3ZDJlMDA4YzA0NmI5MTI3MTlmYzdkNzI2MjJmZDczYjA3NDRlYTRlMDIzMjA2ZjU0Nzk3ZTdiMzZiZWUxNGE0ZjY2OTIyNjM0OWQ2Y2MyYjU1NTBmNDU0M2JiYmU3NmU0M2IxNzQ2ZjUyY2VjMmNkNzM1NzIzNTM4YTM0YzlhYjU0ZGIyZWRkMjJlNmIxNjNhNGM1ZGJlN2NlYTkwMGI2ZjFjZGI4YmU3ZmYyNWQzZjE4ZjJlZWM3OTI5YTRkZDNkNDc1ZDZlNTI2Yzg2NDQ0MzAxMDZkMDJmZmViMzAwZDRkYmIxOWYxZjgwNmM3NTBmMTgzODY2M2JhNzBkZWYyN2VkMjBmMTY1MTUzMDhjZTk0MmZhMWFkMmU4NTE2ZjVkZjM3NzUxMzM5ZjZhOWE1ODM1ZThlODQ4YzI1N2QyNWY4MDZjNWQ1ZTA1NjJlZjJjOTZhNTQxYThjZGE1OTUwZDEwN2MyM2ZiZmQ2OTQ3ZDY4MjU2ZmNiYTAwOTg1OTFiNmI1NzQxODkxOWMyM2QwYmEzN2IyMzY4NjY5ZmUyNzAxYzRkNThiNjI5YmUyNjYxYjVmMjdkMmIzZGU3NWZiZDI3NGMyZDYyNjM1MGVlNmRhNzg2MWU1ZDAzM2ZkMTkwNWRhMGMxYzcyZGRmZWJlOTJhZjJlNmE2Yzc4ODFmNmE5OGM0YjYyMDU3NDc4ZDQxNzNjNmFjOGQzMWE1MGVmMDFmZWQyMTE3N2JlYTk3Y2JmMzgyYmZkMGFkMWU1ZmI1YjRhOTMxZjYyZGQyOTQ4YzNhMmI5NGVhNWI0ZmY1NWU4MDE4N2FkNDUzYzViOGM0MzA0OTQ2NTFmMDlhY2I3NjRiOGM0NGQ0NzMwNWVlMjJkYzEyODkzNzc0ODFjZGZkMmE4NjY0Y2M3NjRiMDk4MmFjMjkyM2E0ODVkYjRlOGY3YWQzNWNkMDg4MjBmNWJmODU0ZGM1MDg5YTA3N2FhOTJhMmYxNzVjM2YxNzcxYjE0MTAyYzUyYmIyNzIwNjE5ZmZhOThlYmQ5NGZmMTVlZDYyYjhkMjRmOWUwMmRkOGI4ZjQ1NGUwZDhjNzRmMTMzZGY1MTJjZGJiYWU3Cis4MDA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZgorODE2OjM1NjM0MzllMzllMTBhNzRhODRiMjA0YzdlM2FhODg2OTU1MTRjMmMyYjQ1NzUwNTg5OTliMGIyYWNmNzIyMWViYzBlZmFmY2EyM2ZlZTZkZmVjOTY0MGE2NzExZDFjNWZjOTAzYzk5ZGY1OTZmNDNjOGRkYjkxOTExNmMzYTMwMWE4ZjUyNmQ4N2I5NGI0MWM2NzQwOTM1MjdkYjY4YWViNjNkMTcwNTAxNWQ0YzVmMTQwOTllMjU4NzkxY2VlYTViYmQxMzY5YWU2MzJjZmE0MmY1YzZkODU1MjBhNWI4ZTNiZjk2OTFhYzQxYmJiNzU2OWQ0NGFiN2FmODRlZmY2MGY2MzNmYzJiZTE2MDE3NzhkZGI0Zjg0ODFmOTQwZGRkODQzMmQxYWE4OThkMjg0MWFlZWE5MmRkNGFlM2I4M2EyZTczNjQ1NGE4ZTc3OWVlN2IyNzc3OGZjODBiMzVhMmMyM2Q4N2U0YjllM2RiMjFjZDU0OWZiNDZmZDhkMzdhODgzZDRkMjEwY2M0MzM2ZGQyYWJhMDUwMWRiM2M3ZWM1M2M1ZmNlMjA4YjY3YjIzNmNlM2E0NDZjMDM2ODcyZmZlNDI1MWQ0NTVhNDQ0YzAwYzYyNjcyYjEwMGRlM2U0MDExODExNWI4MmFkMmM1MTZjMzBlNDllYmYyYzNlOGIxNmUxZWQ1NzVlMWM2YzIwMGM5NWExNDgyZDg5Zjc2OWYxNGEyYWQxMTg3N2NhZGIzY2Q4ZDhhYzBlMjZkZTYzODI5NWE0ZDE5ZDkwMGQwZWM2ZjI0ZDk3MDM1ZTYxZGM4ZjRhNTAyNjI2OWUyMDViYTFiM2JkZTFjNDMxZDU2ZGU0ZGZlMGRjYjk3OTAxOGViYjBlMDc1ZmM3MTJiZjAxMTRlMzc4OGE3Y2RjN2JhOTNhZGU1M2EwZTA4ZGVlMjY1YWU4ZWQxZDYzNDVjYzJkNWZhOTMxYzUzZTE0ZGZjZjNiYzYxYzQ4MDNiM2U4NmI3MDJjZGE1M2VmZTBmNmYwYzljMmUxZGM2ZTc1NDczNmEyNzZkYWJkNDYyMTdiOThiYTEwNjNhN2IwNDFkOGQyNjg1ZDliMzZmZGI0NDFkM2EyM2M2MGFmNjQ4YWQ1MDRlOGMwMDMwMWVkYTViNjU2OTZjZGUyMDZkNTQ5ZmNkOTgyMjc0NWFhYjMwNzlkMTE2OTA1NjUyMDUyOTkzZTI4Yjg5ZTAxYTUzZGI3YWQzYWI0NzU2YjMzYTAyNDkzMGEyYjhlNGZkMzlkZmZmOTE5ZThhM2ZmNjlkMWYwOTQ1M2UwZTk2NjJiOWE4NmU5OTU2YjY1Y2MxZTBhZDMzZWJmZGRmMTlkMTNjYzllMmFhZjhlNmQyYzQxNjk3NWFiNTZmNmIyZTM4YzNiYzAwYjMxNjQzZTkwNjJkZDE4YTM5ODg4ZWJhY2MyODRhZTczYjZiOWFhYzZlNmI0MWU0ZmM0YWEyZjBhM2M4YTVjODllNDAyNzhlYzA2NDkxODdlOGEyN2I2MjQwZjhiNjhiNjdjODRkYzA4NWNiZGVhYWEwZTk4YjE4Yzk3Nzg1ZTg5MjRkNmIxNTg5OTQ5NmMxMDc5MzY4ZGZjZTc4YjRlMTMyMWNiNWIyMjNlYmY5NjMyMzFkZGE3OWE5YzNiMmM2ZjRjODRjOGI4ZjY0MjBmNDc0ZWVhYzc1NGVhZGRkOGMyYjQwM2I1ZWMyYmE5YmYxMzNkYTYzMTllMmE5YTMzODEzYjk0ZGIyZDRkYWRjZTBjMjg0M2EzMmVhMDZmNzVmYTllNzM3NTJjMTc5ZDgwMTRkZWY1MGIxMDJlMjAxOGYzZTQ2ZDAwMzczNjYwYTJiZWI3YWJiYzFjNzNkMzUyZDhlMTYzYTBmNmNmZGJiYmViODI2MzRiZWEzOTkyZWZjMmJjNDAyYTgzODNkZjkxZjdmYjJmZjBiN2U1Yjg3YmE5MGFlNzZmOTIwYzcwMjhjYmQ3N2ZiZmJjYjZmZWIxY2JiODY1NmUwMjcxMjIzMDM0ZWRjYzcxMWEzN2E1ZTNkMGVhM2ZiNDM4M2E1YzI2NTRiYWMxNWNlNGZkOTdjYWEwNTUyNjczYTdiNzQwOWVkMjA5ZWE0N2UxMzk5NTQ2NzU3M2RkOGRhMjI0NWE1ZDUzMjIzY2JmM2ExNjQ1YTBkZQorODE2OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZgorODMyOjVkMDY5NzFlMWIzOTk5YzYxYjhjMmFkMmY2YzY5Y2RjMWMwN2Y1ZGM3MzZkYWE3ODgzOGM2ODEyNzU2NGJjODkyNWJhNjAwZTg5MmMwNDA0NTY2NzQ0OGM5YmU2MTAxZGJjYzk5YjI4ZDhmZDgwOWQzMWMyYzBmMmEwY2U5ZWU0MzA3NTQ1ODg3MDNlYjdlZDY1ZGZkMjRmMzE2NzEwMjY3ODg1ZGQ2Y2JhY2U3ZDY2MzZkM2FjN2U0ZDY1NGI3ZmJhOTU0ZjJiNGRjNTE2NGYyMWU2Y2NjM2NmZmI5ZjQzMGUzYjY3M2E3YzY0MDg4YWRjOGU4NDFlZTNkMWQ4M2I0NzU4MDg5OTI1ODg2NjBlODc1NmY0MzgwNjVmOWE5M2IzZGUyZTNlZTBhNTIyOWRmMTdjODMwZDRjMWExZTNkNzJlODI5ZWI4ZDc3ZmNhNmI0Y2FiZGYxNmQwZGQwMDg2MmEwOGQ4OTkwNjJiOWUyMDFiMzhkYzBmNzU1ZjA4NjU4YTg1YWQ4M2NkNWRjZmIyODljZDJlZDNlMmM1ZTRmMmZjMTA5N2Q1NzQ4ZTZlNWJlODhkZjM3ZjU4Njk2ZDY5NjczNDA4YjIxYjhlZTFmYWJiYzYzMzMyMDUzYzIwNmU1NDIwOWFlZmYwMmJmMmM3YWEzOTYzNDc5MWM1ZDQ0YjllZjJmZTExN2RjOTgzNWRkMGZlZjFlMThkZGRmYjAzYmE4ZjE4MTk5ODNmYzdiYmQ5MTc2ZTY2M2JmZTI5MWMwYjY1NWI2NGQ2ZDUyMDkwMTgwNmE0NGM2NzBlMTZiZGI1NTFiZGUzMTQyMTJlYTMwNmY0NDBjYzNjMWFlNWZlMThkZmY0ZDU4YzU5NWZiY2YyYWJlZTU4MjM0NGYzMzRlYWY3YzBkMDZmYWEzOWM2ZmY5MjE5Njc3Njc1Yzg1NzI1NDY0NDA2MGYzMTE3Y2RjOWU5NTc0YzRhZjEzZDJiOTExMDNmOTJmZThhYTY2ODc0NjgwYmUwZTMxZjUyZjdkZjcyMjUyMzA2OGU1MTIwYzYwNjFiNTBhODQ1OTljMjlmYTMzNDAzYzE4NTNlMzkzYjdmOTcxY2Q5NDYzM2I5ODA4ZTliMmI0ODdkMmY4MThkYWI4MDM5OWQ3NGRjNDBkNmE1YTlmOWYwYWU4NmU2YjNhNDA0MDEwNzU1YjZkOTFiMjgzYmY5NmVkZGFhYzRmNmNkOTE4ZDM3ZTEzODEzYjFiOWQ1ZmM1NmQ5ZjZjNmI3MDRlODQ1ZTQ0M2YyYzdmZjE1MTk3YmYzYWQ4NzgwYTUzYTQ1ZGZkNDM0Y2VjNjFkNmZkYjE0OGQzMDAxZjZkNGQxZGExMWIyNDQwY2RhN2NmYzRlY2I4YTRkZGEzNzY0N2I2MzhlZWQ2OWQxNTI5MmQ0YWY0ODliYzcyMDdmYzU2MjYyN2EyYmM0N2YzMGExNzIzYTE5Yjk1NmE2NzQ3YmJlNWZlZjEzZmI4Mzk4MDczMDU5OWFkZjFjOGM3OWYzZWI4ZjhiZDE2Zjg4NzJlM2QwMTFkMjQ5NjdkNWI0ZGY1MzA1OGJmNmQ4NTBlYTM1MjgyM2NhZDE5YTBiMWU2MGMwYzI0MzBiODk5NTMwYTU5M2QwMjcyMWIxMDE1Y2QzMzQzNTYyOTFhYzQ4YmIzNGI4NDBjOGViMmVhYTg0OTBlMzFmMGZiYjQwYzQwNWNhZDBhNGE3YWJiMTk2OWE0NzgxZDQ1YjM5ZGRmNDcwNzE5OTA5Y2Y4NTNjZTA4NTRlNGVhNzQyYmVlMjQzNGM0OWM4MmNiZWM0ZjRmZmQ2ZDQxNzc1MWFjZjA0YzdhYTNjZjgwNmEzM2RiZmRiZDRiNjIyOTQ1ZWI2NWVhYTY5OGUyZWQ2ZTY0OGUwNjhiYjZlZTkxN2Q3MmY3ZTFmMGM1MGE5NmI5ZjEzOTkyNWVjYWNmMDdkNTgyMzc3MmY3OWVmNWEwYmJlM2VhNTAzMGI0OGE2ZDQ1YTk2Y2NlOTExMmNhNDU2MzJjNTg2MjlkYzc3NjU0MDJkMTgwYjdhZDNiODhlNzJlNTkzOThlMDI1NmVkNDA2YjVhZTU4ZmI5MWQ3MjYzMDY0Yjc4NjY3ZTM3ZjFiYWUzOGQ0NTY1ZDkwMDA1ZDI5YzJkZGE0ZDg0MjFmNDY2NzFhODNlNmQ0NTdmNDg0M2IxYzNhNDA0NjhmYjkyMjcxZjFiMDg1NjI5Cis4MzI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2YKKzg0ODo3NDI1YzUwNmUzNGMxZjdmNDEzNTFlNmE4MzZkNzEyZTMwOGZlZThlOWIwN2IwZWE0M2ZlN2M5MWFmZjhiOWQyZmYzNjdhMGU3NDI3ZDA2Y2ExMzFlMzk2YWQ3ZDhiZWU0ZDkyODQ5ZGViM2ZiZWQ5ZDNiNGM2OTU1M2E4NWI1MzdiMTBmNjcxZmI1YmIxOGUyYzBiODFjZjNkOGM0MjUxMWRiNmY3MGNmODMzOTQ2MmQxOWUwZjE3ODcyYmEwMjY0ZWJmNGNhMzRlODdhYjJlNjMzZTYzZjg4ZjhmYzY5YmU4YmVkOTYzOGY1ZThhMzNiNGZmNGI1MDQwOGM1YjY0MDUwNTA2OWU4NjJkM2Y0M2VmM2VkNWZjNjkxYjllMjA3NmMzNzhjMzJhM2Q5MjY2OGQxNjlhYTQ0YmU2YWQ0MjU5NjAxNTI4ZmJjZWE1ZmE1ZDQ4ZmJhNDlmODMwZjYwODQ0ODFiOTIwZTliOWM2MGJmYjFkMzZjOTJmOGJmYmExY2QwM2Y3NWQ3N2MxZTIwYWYzMjQ1N2Q2NGExNDhiZDA1MDlmYzI1YjllNTA3MzkxODMzNDZhMWU3MDEyZDlkZWM4ZTlmN2Y4M2E0OGE3NDVlNDgzODg5YzIwZmM4ODk3NGNiMmNmZWE1YTI3MWEzYTQ4MTU1ZTIzZDJmMjdmZjBiOWNmOTJkZjBiZmU2N2FmMmUwOTQ4MzU1MjA2ZjJhMjhiNmU5ODRhMjExZDZlMmQ5ZDRiNGRjMWRiZWNjZWIyNmNmYjhkNjFiZGQ0MzlmYTc5MDhjODM3N2U3NWUzZWYzOGNhYWU4NmI0OTk3OGQyODc0NjNkMTM5NDU5ZGE2MjVmODBlNWY5MGI0YjIxMDA5NWIyOWVmOWViNTQ3NDRmOWMwZTFiNDA5ZDMxMDViNTU4M2MwNzc0YWY4YTFhNDk2NTU5NTI3YjBkNjE4MWZiNTM5YTFlYTU3OTllNWU3YjM2MjY0MDI0OTgzODAzZmExYzIyZDVmOWZiNjlkZGFhYmUzYjg2YjY3ZjFhMWUyOGFjNGY1NGJjZTUwOTVjNjJjMzRjZjQ0ZWI5YjRjN2RhY2UzNGVmYmY3OWJjMDY0ZmFlNWNhYzAxYTNmMmZmMGYxNzVhYTQ0YjAyMDdiMjllNDQwNGYwNThiNjMzZjk5NGQ2ZmEyZDg3MzAyYjA0NTRkZWVkOTMwNWI5YzZhNWRjYTQ0MTNkZWVkNjFiM2QwYzEzYzIzYjY5YzI5MWE1MTk3ODQyZGNlMGI3ODczNjE0NDBiOWI4ZjY4NzI4NGNjOTIzZmQzYzUwYzFiZTI5MDkyNzM4NmI3NTdmOWFhZWIzMThhODc4Mjk2Yzk1YTI0M2FmZmVjZjUzODdiNmQyYmNmN2Y2OGY0MDdkY2IyYjc3NTI2MmFjYzA0NjBlNTE2ZDg0ZjNhNDZmYWM0ZjNhMmI2ZjQxM2Q1N2E5ZTg2NWEwMWQ5Y2ZiMTM5NTc0MmQwNWNkOTkzMjE2OWRlNGNhMWQyNDJlNmExY2Y1YzZiMjMwMDMxY2ViMGExYmZjMDlmZDM1MjA1MjhmMTExMDliZWQxNWZmOWZiMDExYjEzZDk1NmIzNGMwNmU3Y2U1ZjI4NjkzZjhhNGFiOTNkZjZmMTFlNjk0NWI1NmQzMmJlYTZhYjQ3NTRiZThjOTUxYWJmNzQ4MzNjOTFlMzYyYjUwZWZkMjZhMDc4N2IwOWM1Y2NkOTM4NmQ3OWM3YzJjNmViMmRhMjBlODczMTA4YzE2YTc2NThmOGI3NjVmY2RiNjQ4MDA3MWEwYjg2MjRmYjBjYTVlZTA4MWJjMjQwNzU4NmFhNmJmNWIyODVkYTZjMTAwNzBhMDY4ZTFkYWVkNDUwMmZhZGUzZWU1YWVmNzMzZmZmNTkwZDkwNmNiMGFlZTA5MDYxZmM4MDMzZGZiYjZmOGU1MmQ5ODIyMzMyMGMxN2FlNmFjODZlMWViZmFjM2JlYjc1OGI4MGQwODE4YTAyZDMzNTU0NGMzNzJmNzBmYjdhNjAyNjY4YWIxNjNlYzBiOWVjNWQwMGNmNjM3ZWQxYWE0ZTZkOGU3NjY2OGQ3Y2E3NWE0MThhNzFmNTdjOTA2NzlhZjQ4Mzc1OGNiZjU5NDAyNzJhOTAxZWFmMWNhOWFhNzMzNWM2Y2NjMTM5OWM4ZDdmODI5ZWI3YmM5MDExYzliYzcxOTIwZDVkODBlZmJlYTkxYTJmOGQ5NGIzMzg5NDc4YTgxMjkzZTcxOTNiCis4NDg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZgorODY0Ojc2NGI5MmZkNjFlOTkyNDliNmZiMDg1YjAyYzNiMjA0ZGNhMjg1OGFhYzFiNDE5ZDlhZTE2ZGM3ZTkyN2FhNWJhNDk3MWExYTRlYmJjNTQyMzZhODZmNDM3MjA0MzE2MmRkYzRiOWMzNWY0ZWU0M2ExY2JhM2YwOTA0NzBlODBmNWRkMWFhYWQ1NzhjNTE4ZGEzZmE1ZmVjNzhkNDY0ZTc0YjJhY2RlODRlNTY0MWIxMDc0ODY4MzU2Y2YxYWZlZDE0MjcxZWFmNzA1ZWJkYjk0MjM0ZTRjOWIwMGI0Zjg4ZmNiNDA5YjIwNjZlYzgyZjk1NGRlZjIzYTE1M2I5NTIzMWQwM2JiNGExYzhmZGUxOTE4N2I5OTc1NTUwMjZlMTk1NDI0MjdmNzU3ZmQ3MjgzNzE2YmMwZThkMGE0ZTc4Yzg4NjFlN2Y0OTczM2U4OWQyODE3OTUwOGJiNWJmMWQwM2Q4Y2NlYzM0MjI1ZmU1YmYyNjgwMzQ1NmY1MjEwYjRhMDA5NTcwZDU2ODNhODNjMGY4ZmY0ODBiNGE0ZjQ1NGVkY2MyY2NlOGFiYzExMmZkYTI3NTk1ZWJhOGYzYTEwMTU5N2RkMmMyZDUzYjA3MzgxNmFmZjY1NGMzNWRlNzY5YjYzOTY0MjliYjlhMWI0Mzk1ZDA4MjI5OTY4ZTU3NjY2ODMyMzU2ZjQzZDYxYjkxMzJkNzUyZTk4Mzk2NTlkMjg2ZGQ3NTY2N2ViMzIwZTkwYjBlNjM1MmUwODM0ZmI3YjE4YzY1OGNhNTQ3MmFjMDkwOWUwMThmN2Y0OTUzYWZmZDM1MjkxNTRhZDg4M2QyZTkxZDU2YzQxZWY4NWFiN2E0OWE0OWFhYzExNmQwMDUxZDhlMGY0ZTA5MWFkNmY1YWM0MjczZTVlNTZkOGRjYjNlZTBlNmU3NTllYjJhN2Y1NGQ3MWYyMGI3ZDAyNTAwNTZjNmViMDJiOGEwNWQ4MTJmNDQ5Y2Y0N2VkMTkxMTk2MTU2YjJlMDYxMDk4MjA1YTllYWIzZmU1MTBjMzY5MWI0Mzk4MzVkYmI2MjcwNTU1M2YwZWRkNmZlNjQzZmI1NGEyNzNhYjNiN2JjYjM3YjlhNDZhNmQ1YjUwOGYwYTQyNjc5Y2YxMWVkNDA1N2M4NzkyODAxOGQ3MjIyMmIxNGEzOGExZDFlMTc0NGViNzliYTdkNzI3MTQwM2IxZmUzZWUzOWQ3NmQ5NDY2NWEzMTNmNTkzMjc5NWNmNjZmYTA4YTViMGU2MWNkNmIzMjY0OGM2MjhlYzBlZjAwNzljYTc0Y2I4NGJhOTY2MjdlMzQ5ODkyNjM2ZjA3ODM5NzZkMTZlMWFlYWEyMWJkMjBiOGIwYzY0MmZjNzNjYWExZTVkOTJmYTFiNDEyZjk0ZWQzZTA4ZTIxNzU1ZDYwOGY1ZTYyZTM4NzI2Nzg1ZGFmNzMzMDZjMDgyYTVhYzEzNjkwYTgyNDY1YmFiZGY4ZjE1NGYwMDk2NzM2NzgwMTM2ODU2Yzg2YzVjNjNkOTUxNzJkYmFjODY0NzYyNzUzODc2NThlMjhmNjEyYWNiZjBhYzlkNDRkYmIwMTVkMzM5Y2MwNTUxN2Y1YTBjMGJjN2M3ZTc3NDhiOTFkZjg3YjZmOGQ0OGI4YTg5MjFhN2Q4NzM3ZGEzMjQ3NjczOTA4NDZiNzBlZjRmNWFhODFhMWRmOGUxNmMxZWZmYmZkODYxMGZkNWY4MTVhZTQyYWFlNTIxMTgxYjcxNmY0MmEyNGU2MDFlYmI5Yjk1MzU4YTc3YTgwZWQyZTdkYThiNTRhYjkzNTlmOWYxNWM5NjI4ZWVjMDBiMzhjYzIxMzRhNjcxZjExYWU3YmM5NmRhNTlkYTczZWYyNzgzMzg3MTZkZDg1YTY3YmJiNTA3YjA2MDBmMjYxODZkZWM4YzZhYjRlNWE2OGIzMWMwZDA1MDFjNjlhNDk2NDY0NGRjMGU0ZjYxMWI2MDNiNGFjY2MyOTVjN2JlN2Q2MzcyODcxYTViY2M1YmU3OGU2ZjUzNjg5YzUwYTIwZjBjYzFiNGNhZGU1YzNjM2Y0NjUzMzdmZTdjYTMyMGVhYjlmMmU2YjRmYjgxODk3ZjJmYmRkNzlmMmFmNTY0MWM0MWY4ZWZiMWM2YmQ3ODI5YzI5NTk5NDZhNzY3MWFkNGU2MjkxNjM3OGVlMjIwYzkzNTZkNTQyMDVkODhkMGYzMmYxMjhiYjgwODI0ZjJmODg1MDZjNTkwZWI0ZmFmOGZjYzljZjI4YWZiZDM5MWVjY2U2YmM1MzhhNWI2NgorODY0OjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZgorODgwOjI5YzJmM2IyYzZiZGQxMjA5Yzc2ZmI2YjQ4M2EwZmVhNWIyNjlkZGNlMzZjYTkwMDA4Y2YyY2M1MmNjMWUzYjM4MmYzZmU0NDU1MjM5OTdjMTMxOGY1MDAxNGNlMDAwZGUzNjVkYmFhYjkzMGM0YThhZDA3NDNiYTRmOGM5ZmI0NTQwYzViYTEyOTZjZmY1NzlhNjRiOTY0ZWZkM2Y2MmU0ODE5NDRhNWM0NzVhZjM1YzUxMzk0MzgzYzgwZmQ1Y2YzN2ViOTY5ZTk3ZjUzYWZjZGI0YTI5MTQ0NzM1MjNhNjFlODIzOWZkOGU0NDFjYmIwMjhjMjNiOWE4MzdmZDA1ODI0OTcyZmQ5ZTJjZjkyODc2ZDJkYzkzNjQxZTM1MDBmNTJiZTMzY2E1ZjY0NmM4MDEzYzA0YTI1NmE3MWJiYjRjYTNlNGM4ZmZiYTYxMTNlMzRmZjI0MjNlZTVjNjIzOTAyYjQ3ZjJhMWQ4ZjUxYmY1ZjBiMzNkM2M4ZDk0ODg1OWM5YTA3ODcxMDFlMTI2ZGM4ZTVlMmI1YmFiNmYxMjU2MDVmN2IxYTNlZDg1ZTE0ODRiYjYzODBiYjAxYjQ0ZDNiMThkYjc4ZDkwNGZiOWYyMzkyMjI5MjY4OTMzMTRkODU1OTFjNTk3MGYyYzI4N2RjNzg4MjdjMzg5NTM4NWMzMDZhNmRmZTA1MDAwZjdmMDFiY2FiYzBlN2VhMTRlZGYwMTlmMjBjMDFmMzczMmU0YmViZWYzOTU4MzRkMDY5NTgyZjY4NTE1N2Y5M2U3OTI0ZmNiMGZhNDg5ODY2MmZkNjcxNDRmNWI1YmQwN2Y4YWU2MGQ4MjBhNDMwNTE1MWEyOWU5MzA2NzYyOTE0YjU3OWE1MmVhMWI4ZDZiMDZlNTBlMDM5YTZiMjE0OGRkMDYzYzM3ODFkYjBjZTJjMGU0NmYwNTRmNDEzMjliNTdjMDdlNWY1NzEzNTZhMjk1ODc5MDViZTk0N2NlYTdjYjM4YTFhMTkwYTJjZGY0NDM1MTRlMDlmYjQyOWE1ZThjNTZhODc3NGVjMjM0NGVkZmViYzRhYTQwODg3MjVlNzA4M2I5ZDA5MDhmNWIwZmJiNzE4NzZkZmQ4ZmE2OWEwYzFlYTVjYWM3MDZjNjA2M2M3ZWM5YTJjZTk4NmU4ZWJlNWYzY2ZhYjlhN2JjNjM2NjY2YjYyN2Q1MzM4ZDQ4YmFlNDUwMTZjNmM5ODc0OGY4NTI1NTRmZmY0N2IwYjQ2ZjRkMjk1MWRmOTQyMmY4MzlhZGE1YjEwYWE1YzQ3MWYzNTlhZTFlNDYyYTgzOWJhZDc5YWYyNjMyMjg5MzUzM2JhMTE5ZmU1ZmFkMTZkMmNhYmJiYzA3MjEwZDJjYjZlYWI4MTVhNGE3NGU4YWE2MDMzMmRhNDVhOGVlYjM3OTE2MzY1Y2Y0NDM1YWE1YjVkZjM2ODZiMjk5Yzg0NmJkMzM0MTJiN2Y4NTM1ZTQ3MDA3NGE5NDQwNzAyZDlmOThiZjlkZmNiYWVjN2MzNTZkOGM2MTA3NzIzNWRmZGI2NmUzNDkzNzI0ZTkzYmU3OGM1YzExNGM5ZTc5OTY3MzNmMWM2YzYxOGQ5NjBiNzc5MjYzYzE0NzNiN2MwZWI2ODMxYmRiY2NjY2FlODhhMjg3YWI5MDk2ZjUwMDNhMjhmOWQ5MDI2MzY2NTU0MTc3OTU0YWIzNGFjOTQwZTMzZDE0ZTJjNjFjNzQ2MjhmZDYxN2RiYjRiZDAzN2M1NzYzZWRmYzUyNDNmMWM3Y2Q5OGJlZDk3MThlODU2MGMxZWRlNDdjNWIzMjAxZmM0N2EyZWQ1NTA3Njk3NjMzZmUzNGJmY2I5ZTQwODI3OTg5Mzc4YTg1ZjNlNGM0NzZmMmIxYzIxMGNkMDk0MDcwMzYzN2FiNzI4NjE0ZTk4ZjYwM2E0NmNmNWU4MzBhYzY0NGM4NDhhNWUyMzMzNDljNWQ1MTc4YzY3ZjUxMjYxZDFkN2NhNGFhMzZlMjkzZWY3NzFiNjFiYjgxMzAzYjQ1NDZmMWQ2YzdiODRkOWUxZDQ3MTIxOTkwYzNhN2I4MTlkNTMxOTViN2VjZTdiYzZiYjUxNzk0OGNjNDQ3NzgyMDBhN2E1M2IwODNiMWRlMTMzZThmYmYxZTUxZGE5Y2Y0OWNmYmQwNDc3MzY1NDE0OWJkYmQ2NzllZDcyYWNhYjI2ZjMwMWQ4OTViMWJkOGMwNDVmZWM5Njc2OGJhNDkwMjFmZTM4MGVjNjhhZDFkMTQzZjI2YjhkMmU4NzNmYzgyOTViYmE3OTljOTUzZDhiOWUwODU3ZGYyZmVhNzkwZjBkNzUzNDMyCis4ODA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmYKKzg5NjpiMzgwNzg0NGRiYjMwMzY1ZTZmNDBmNTZlN2IxZjA3NWQ1MDc2MmYxMmM2NGQ3YTdhZmRhYTdkYTliOWViODBlOTBiZDI2M2E1OTc3ZjljZTJmYzc2MTYyN2ZlNDQ3NzgwZjU5ZmQ2ZjQ1MmMwNjg4ZjVhY2U0NTFjOWQ1ODMxMTE1MjM1NThiMDA3ZTE3ZGI2MTE5NjFhNjk1NmU3ZDc3OGM3NDM4NGY0MjdlYjU0YWMyMzIxMDQxZTFiYWE3MDExOWM4MTk3OGE3NTEzOTJiNGY0OTcwNGYxNGM5ZmRkN2Y0MjNiN2MwYzliNmY4ZTg5YzI1OTk5ZDdlZjAwOGY1Mzk3OTY4ZTI2YTc2OWJjMTcyYjUwOTc0ZjY5ODhkNmQ5MmNmNzgzNjM0Yzc5Y2Y4MDRkNTljOGU5MjI1YTE3ZTdjNmZlNDIxNzlmNTIyMzljY2IxYjg2NWM4ZDRlZDVlYzhiZDdiZDYzZjhjYzFhMDVkNmQ2NTJmMjY4NDE5MzdmNzk0YjJjMGM4YzQ5MDNlMGI4OTM1YjE4NjgzNjM3OThkYTk4MzU0MTgwN2RlYmY5OTk2YmI2Y2Q1ZjYxOTc0ZTA2OTUzYzNiNzJlYzcwYzZiNWM2OTE4MWUyNzQ1MDMzYjNkN2FhYmY0MGQ4NDg0NWFhNmEzM2JkZWRjZDYzODNmN2ExOTUwNmU2NWNhMThhMzg3Nzc3NjhiMWUyMjlhMTNkYTVjMDU0YTU4NWQxZWQ4M2Q3YTc4MzliNzgwZGI2NjNiNjM0MTMyZDkwZmQxYzM5NDFmMDk1MjgyYzc2MGIyMTg4OTQzOGFjYjQ3YWUwMmI5YzJmMzA1OGYxMzE4NmIxNmNmOWMzNzQ1NDVjODA0ODA3Y2UyZGRmNTkwZTAzODYzMzYxOWI1MGJmMmI3OGE1NWY2YzA4NDgzNTYzZDI2N2FlODQ5MjRmOGIxYjZhOTQ1NzJlNzgyYzRmODY2MDU0NDZkMDY1MDU1NmVjNWZmY2RjYjkyYjMzYTljOTgzYjJlNDM2MGY5ODg3ZGI4MzEyZmYyZWZhY2UzZmQ5MmEyYjhiZjAzNGJjNzIwZWM4MzIyNTJhNWViOWQ4MTczMmNhMzFhOTI2OTU1YmEwMWUyZjI4Njk5OTEzYTQ5NjFhMjZhY2VlZTM4MmUzY2E3NDJmMWI5ZmUzZjUzZjcxZmYxMmYzYmYxMmQ5ZWU3ZTBmMGRlNmVlMDg5NTY4ZGEwNTExNTYyODEzZWRhZWY2MGY0MjliZWI3NjYyNjgxNGQ0MDg1NGRjOTFmZGY2YzI3ODMxNDA3MTEzMDc0YzE2NjFmZWVkMDFjN2EyMjJjMmM0NjhjNmY0MjA3ZjYyNWQwYTA5ZTVhNGFkMDdmMTIzODhjZmNlNzJjNGIwNWJhMWQ2YzA3YzNjNjBjN2M3NDQ1MDk3NzdiN2U2ZmViMDg1YTMzYmFkMmRmNTUzOGI0NjgzOTc2ZDMyMDhiZTU3YzIxN2ViNWRlNGE1YjU4NDRlNGVlODc3MzgxZWJmMDhmOTc1YjQ3ZWQxZDE3YmEyYzU0MTE0NjgwMjY1OGExNDY0MTM3NmMxMzQ1OTc2NGUwMThkN2U2MzIwZjUyYzZjZDJjNzgwNGQ3OGQxYjc0ZTg2MGUxMzRiMzY2MjhiNDIzYmMwYWI4ZTQ1YjdkYjFjZDFmNDYwOWFiOTM4NzhjMDVlYTA3MGNmMmQ1OTk4Y2RiYjhkYmQ4N2YxMjI2YjI0MDI5YjUzNDcxZjY4NDM5NjAxZTA0YjY1OGY0MjY5ZmZlNThiMDcwMjUxYjI4NjQyOThhZGZjNmJlMGEzZGY2ZDFjOTRhZDI1YWMyN2FlZmEwY2VkZDE0NzNlOWEzODA4ODc3ZTFmYTY1ZjY0MTFmODJjNjdmNDJjOTRjNjU1ZjNlMmU5MjE1Y2NiMDgyZDE3MWZlY2NjNmVhMDY4OGQyOTA1MWQ2YTgwZWJkMzYzODIxMzE5MzNkNWQ5Zjk1MzhjMzVhNDg5NDQ2ZmM4YmIyNzQ4ZGZhZjIzMmQ1MWJkNDk4NmMzZGQ1ZGYyNDI3Njk2ZmRlODc2MWM2OTVjMTJkMGQyOTEwOTllMzhjN2FiZjBjZjJlMjVmZDk1MjNmOGRkMGVmMjI2ZDIzY2Y2OWYyM2RiMTVlNDZiYmMzMGNjNjUyYWI3MTQwZjNlZDRjYWYzOWQyNmRmMzVkNjYyOGNkMzliZmQ0NDkzZDUzNTUzM2E2MWJmZTIxMGRjOTI5ZThhNmY1MGRiNWYwMjIyMzU1ZWQyYmEzZjZlOTQ1ZWM4NmM3NDA2NDhiY2VmNGM5NTc2YzMyN2Y5Y2IzY2E1MjYxMmM1YjcyZDhmNGIxNTI4MDVlNmNiZjgzNTkzMTUzZWEwZjBiCis4OTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZgorOTEyOmI2OTA5NDhlNmZiYjZkNTA2NWUxZjE0M2JkODQxM2ExOGYxNzYyYWU0MzAxYzk0NjdmMzFiYjc1ZmM3M2NhZDllZjQ0YTZmNWQyMmQ5ODEzZDA2OGI1NTViYjQ5NDlmYWEwMDc1NjhjODZmNjM2NjNhMTRkZjlkMzZjNDBlMzI5NDM1YWM1YmFhNjU2Nzk2ZTliOTJiYTI2MjQ3YTI2NmE5ZDZjZWY0NjE4ZWMxZmFmYjczMGZkYjVlNDE3NTAzYTFiZDA2MWNjZGEyZjkzYmNhYjZjOGQwYjFlMTFkOWYyOTc4MWMyYWUzNjE3NzRiODJiMGIwOTdiZTRhNmMwNDk0ZGZkZWUzMWQ5NzU5MWMyMjQyMmEwOTQxODA4MmQxYzM2ODlmZDhiNzI4MjhlYTE3MzA1MzE2NjVjYTcyNjRlNzVhZWQzYjRmMjI4NDVjYjgxM2JjNTI1ZDg3N2RmZTYxNjI3OGUyMDQxNTA1YzhiY2MwYjNkNTJiYzhlZjczMzVlZjY1NTczM2YyNjM0MTNmNTQ5M2NkNjVkMjMzYzNmMGUyNzY4ODFkY2IxM2IyNzc2MGIyNjk0Mzc1NTAyZDlkZTQ0NzUwMWRjYmRiMzgwZThmYjNkNTU0ZmEyY2M3NzFhMzhlZjkyN2NmZDRjYzM4NzllNDk3ZTg2MDA2ZjRhYTNiMGU5YmEzZGU2ODQ0Y2JkYjBlNjNlMDRkODNiYjEyNGNjYmViOTFhYWJiNGM2ZGY1NjdmZjRjNDMwMmE5ZThlZDEzYzU5MzJlMWM4YWIwM2QzZDBkNmM2ZTQ3MTVhNjQxZTgyZDE1ZjA4ZGU1NWE4MThiODJjNDM3YWMwMzk2MTY0OTlkYTJjM2FmYzljNTBlODVlN2FmMjM4MDE1MTY5NjFkMmY0NDYwZmY0MjViMTAyMjhjNDI1OTRlNzhlMDVhNjhmMjM4YmUzOTU3ZDE1ZTJiYTNhMjI3NDk5ZmYzMDU2NGY3YzJhMTFiYTAwZmUwNTUwNWQwNjY0NDYyZTMwMTczOGYzN2I1OWJiYjQzYmY0NGUzYWZjNDFlNzg5MjExYjk3MDA1ODk4ZjhlZGIxODIzMWFmYzI2ZWY5ODk2NWRmOWUzOGEyMzA2YzE0YjgyYmQ5OTUxODRiY2MxMDc4YjM2Y2RjYmE0NzY5ODBhNTAyNTI0NDdhNGYyYTU5MjVlMzExYTJmMjEwNjdiODBiMzUwMzFkNjc3YmYzNTYwZDVkNTQzNWMxMTMxZDBlYjk4NjNlZWRjMDYwOTVjMGFlOGE0ZTZiMTNlOWZlZmFkM2E5YzliMzViZDZhZGJjNGRiMDRhZGE3N2UzYWY1NTE4MWNiMTdhZmY1YWVmODYxYmQwNWQ3ZWFkMWY0MjU1NGE1YmFjMzZjZDViMmI4OWNjMTBjZjJiMDkwNzJkMTNlNTE3NDExMjM1ZmYwYTM0ODg5NGRmM2RjOGQzN2ExODI4YTVmZjVkZDMxYzlkMDQyMDViYTBjYjk4YTUxMzk0MzU5ZTIwMmRiZGZkYTMzMjE4NWNjY2VkODFmNDUxZTdhN2I3OTU3NmJlMGJkNWFiNTcxYzgyYzU3NjNmY2EwY2E2NjUyN2RkOWY1MjRjODVkZDA2ZjUyMmQ4NWRlODQ2YzExMWVjZTU3MGQxMDcyZGVjZTc1ODUzZDcyZDhkMmI3NjY3N2I1Mzg3N2I5NTg2NDczNzk1Y2U5ZDdiNTllNjEyMDIzZmQwOGExNjNkMjg5N2IzNTQ4MGI0ZjNlMmQ0ZGFhMDkyZGFmMzIxMDMxODc4ZTU0MzIxOTcxMzNhZTZhNzYzZTMzNmU1NzBmNmUwNDI4ZWE2YTI1MDFhZWUxNjBiM2I5ZWEyZTBjYWExMDE5MjdiOTNlZGM2ZGNmOTJjYzM4YzQ2ODg5ODllZGUzMTJmYmEzYWUzNWNjYjgwNTZlZWY1NzY2OGRkNDZmMmYwZWQ5YmEyZDM1YWQ0NTBjYWE5NDViYWYzNGI4ZjI1NGEzZTBhZmJjM2JkZDM3ODY5ZjEzNzQ1NjIyZjMwYzM1ZjM4MGQ2Mjk5MGJiNWM0MGEwZGNiZjZlMTNlYzBjZmI1NjljMjU4MWVlNjhlMTZkMWNkY2FkZjc3YTE1ZDE2NmM1OWI3ZjE1NGFhYWVhNGJkNDI4N2MzMWYyNjgzMDEzZmFjYjUzYmZjNjk5OThkNWQzNWE1OGM0Y2Q5MGEzYWEzYTA0OWUwNmNjNjNhNmQ3MTgxYTJjMzg4MTdiZTljNDcyMWUzNDY2Njc1NTdiZDhkMDc2YzEyMjQzOTJkMDM5YWUyNDM3MjRkYzQ5NWZlMmVjM2YyYmUwNjEwN2JiOTE0NzVmMjNiZGQ3MGI5MWY4NmM1ZjQyNzExNTA5MjIyZjI5NzgzZmYwNjZlYTQzY2ZiMjkzM2ZmMzI3YmE4MzkxOAorOTEyOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZgorOTI4OmJjNWRmMzY0YWRkOGM4Yjg0YjNjZDQ0MmYwY2MwOWQyYWMwOTJhYjI1YTgxYzZjNTdhNWExM2Y2MmQ5ZmVhNDNjMGZiZjMxNGQ3MWUwNWM0ZWIwMTE1OGFlYTE5MzA5ZWZiNGE1ZjMyZGU1ZjMxMWRiNDNmNTY4YjZlYzlkNTQzODM3MzhjZTQwMmViNjZhMTYxMjljNGFiMTRmMDFiYTgxYmJhOTljZWFlODNiMWUxMjZmODkxMjVkYmNhODliZTE3OGMyM2E1YTFhOGNkYjI4NzM2OTMyMWI5NTk4NmFlZWMwMmM3NGE2M2ZjMzJkNzM2NGUyZTQ5MzgyZDQ0MDE1NmJlMjQyOGEzMDgyYzE0ZGQ0ODIzNzRhOGVkZTJiMzc1NmE0OTcyNWFlN2UzMTQ4ZThjZGZmMTVlOGYyYzgyODdkM2ZkNzkzM2U4OGIxYzI0MzljNmI4YTAxNDdkMTRjNGJjZjM5YTcxOGNlMzhmMmQ0MjEwODI4MmZlNmZmMjM2OTU3ZmU1Mzk2MzYyZWIwZTBkZmQ1M2UyNWQ3YjM4ZTE0ZGU0NWZmNDUxZjFiNTZlYzA1ZTVkMWE3NGQzYWVmNWYyYzBhY2Q0NjYyYjUwMTBhZjI2NmZkNjUzZjNkOTllYTZlMGE1Mzg2NTVmMTcwOWUyMjEzOTJhN2M0NTBjZGRhNmFkZWJiZDBmMTNmZDNlYjg1NTIwYTdiOGI1ZWQwNzkyNmEwOWI3NjNjNjA3NWZlNjM0M2QyZmRhNDg4MDVkOTM0NWEzYmZmNDQyYjYwN2U3ZDE0MTdlZjA0NGQ4MmYzMmU0ZmMyZjgzNzBmYzM2ZWVlODQ4NTRjNjNkNGI0ODY5YTViMTQ4NzRmMDNiYWQyOGIxZmQ5MjI4ZjJlYjY0OGFlNTYyNzYzNTgyZGZlMTk4ZDFhODE3YmE0MmUyZDllNzc4NWNkNTRjYzkzNDA0NWFjOTk4NWM5YWUzZDViNTRkYzYxZmZlOTk2NDZhN2YwNDFhNWE0MjRlZjkwOWQ2OGIxZDhjMDQyOTUyZjcwNTMzZDhhZTg1ZTY3N2QyMDU1NDU2NmRmZjEwOTdkNzA3ODBkYTgwZjVlNjA2MWNhMjdjZmVkOTM2NWM1MWEyZGI3NzViZTJlMTQ1ZmVmMTRiMmNmOWJmNjcxMTEwYmU2NTNmMDc4MWVlOGQyYjc3ZjQwZTdkNTJmNjkyOGFhNmUzZjZkYmI0NDYyYjA3MDdhZmIzNTRiMmQ4OGYxZjZlMGE5YTY4N2M2M2UyYjAyNzVlOTMwOTkzMDk1NmUzMTBlMzc5MzVjOGIxNDJhZjc4NmJmYWVmOTllZjQ3ODZiMDM0N2MyMjM4ZDhjNDY4YTc3NzI0Yjk2M2I5YmQwNGI4NTc2NmJmMzU4YjQ0ODM1YTc2NWVmMTA1YTRmNzEzNTJmMDBkNTNhZWFkNmI5ODc5OWMzNmRiYTRmNzNmNmZmZmY4ODBmZmVhYmJiNGM3YmM5N2I2MWQzYzhjZGI3NTc0NTlmNzBhODAwZTY4OTgwZjEyMGMxYzVlOWM0ZmQ4N2Q2YjhkNzk3YmYzNDc0NzQ0ZTQyZDUwNzVhOTAzZDdlYzI0ODQxYjZkMzE3ZDBlMjY2ZTk2YjdmZTQwYzFjNjVlOTBiNjVhZTY0NzZmYmY0ZGI1YWZhMjBkOTMwZWEwMGE1ZmYxMTc3NjZmMzAwNDk3YjY0ZWRmZjEwZmJmY2RiMmE1YjM4OWM2YWQ0ZjFhNGRjNzMzOGI2YWFiNjZmM2IxYzkxNGI2NGM5ODA1NzJmYjg1OGVlYjIzNjQwMDEyNzFmN2IzZDkyMzBmYWVmNjM0NDU1NzUzMTIzNzY2ZjE0YmNkMDU2NzkwNWExMjEwMDlkZmRkNjY0OGIzN2E0MDEyYzVjNTM0ZmEwOTdmOWU1ZTA0M2E0ZGMxOGU5MjQxMzFjYmEzMmNiZTkxYmVlZWUxZGJlOGJlOTVhOTFlM2RiY2IzZWFjZGFjMWM2YWU5MTRjZjUwZGY2OTEzZjhkZWMzYjE3YjY1MzZkZjFmY2YyNzZiMjQxZjhlM2NhMzRlZTM3ZjkxODJlYzdiZWIzOTY1ZjgwOTc4MDIyNmMxOWRhODY5YTQyYWViMGNhMGY3NWQ2YzhlNjFjYzUyNDFiNDhkMWQwODk2ZGIyMWZmNmRjMjQyNjA0ZWNiMDAzZDZkZmQzZDA0ZmY5YjNlZjEyNjJjNWM4YTM5ZWU1MjVlNjQyNTc3MDE5ZDY5YzVjMmQwYmU1ODcyYjg1ZmRhYjY4NzY5YmM1NTY1OGE1NTNkMTQ0ODkxODEyNDI4NGVlMWEzMjk2MWYwYzZlNGVmOTdhZDFjMTlhNWY3ZTc1ZTI1NGY4Mzc1NjBiM2MyNWMzMWM3NzQyNDhkMWU0OGE1ZjdlZmZjZjk2YWJmOTc3NGRjZWMxM2U3MzJiZmJlMGE4MTJjZTJhNGE5YjRhMDhiZjgwZmMwCis5Mjg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWYKKzk0NDo2MmU3YTJlZjFlYzBlZTQ4NmIxZGU4YzJkMTAyMzJlYmMwNjE1MjUyZjQ4ZGMzM2I3NzAwYjY0YzI2Mjg0OTA5ODY2MGE4OWQ4Nzc0N2Q3OTcwYTAyOWMxNWZiZmM5ODBkYzJmNzgwY2NmMWYzYzM1MjgzZWNkYzY5MDQxMmRlYmIzNDY2ZGE0NDRkY2M1NjU4YjAyNWJiYzM0ZmRlZTFiZGQ2MDU4MDY0YjQyYWU5MmZhMjI4ZjU3NjMzN2UyY2IwMWJkMDYyZTVmOGEzNTNiMDI3ODgxZTViOTVhYTE1MzEyOGEzYTMwOTJhNGRjYWE2Mzk1YzU5Y2FkZmNmYzQ0ZmNiMzY4YzE4MDljZDhmMTg4MTdjODkyMGUwMmYxOGNhN2JkZDliZDQ0MWY0ZDdhNWJhM2UzODAxY2ExYWIxNmIxNjc0MmE3N2Q0NTkwNTViN2ZjNzU1ZTc0ZTUyNWU4ZDIxYTFiZGM2MTA1YzcyNmQ1YWVjOTU5NWNiYzNiMmVjOTU2NDM3MzljNDk2NzhlMTc3MTY1YzE1YTVmNzI1MjAyMGU0ODIyNWJkNWI2MWMwYTMwMjFlNDgxMWVlNmQxNGE1YTNjYmEzNTdmNDI5ZDU1OTNhNTVhNThlNmIxM2NiMTA1Yzk0MzQwNDliMWU4NjQzMjkyNmVmZGRlY2ZjYTA2M2UxNTAyZWNmMzM5MTVlMDBlN2U0YTAzZGRkZmQ2NGRkZWVjNWFlYjE4YTRjNmRkMDU0NDk1ZmUwNWUwYmY4M2Q0ZDhmZGRiYWYxMTc5OWZmZjU0ZmRhZmQ1NTYyZDBmMGFiZjFmM2JmZDY3ODEzNDI1Yjk1NjhjMDVjYjcwYmFlNGMxYmJkODg4ZDNkNWQ3OTMyMjEyN2RlYWU4OTAwM2Y4NTdiNjZkMmU2MjNlYWE3Y2EyOGU3NTAxMmM2NjlkMjhhNDM4ZjFiNDdkNzFkYzAzNTM5ZjI3Mzk2OTAxN2YwMzNjYjQwMzdiZWQyOTNlMjI3ZmMzZDc0NWIyNjcyN2JmZmRiMzEzNzEzYWQwOGRlNzUxYmQ5MTM1ZThmMmU0NjNhMWQ4YjhiOGIyZmZkYjAyM2NjNWFmNDQ5N2IwZThkZmQxOWVjYjI5Njg0YTE1ZTUxNjdkOWJiYzBiY2Y2NzRhMGM5YmI0NTRjNmUzMWM4MTYwNTc3NmFmNGI2NDBmZjM1ZDdhMDExZWQ1NjU4ZGY2YjcxNTdhY2Q4Zjg3ZmE1MDUxOTViNTUyNGYzMjgzZjRjNGU4YmZmZWI3YWY2NmNkYzIzM2YxYWYxZDliODFjNjM2MDFlYjU4NjNkZTZkMmQ3Y2E4OTIyMDdjMjBhZTYwNzhkZDM0N2Y5YzE0NjRkOTJmMzlmNTViN2E2MmNhYTI5MTNiZWE4ZTg4OTNmNzZlOTJmYzE0MDhiNGY3NjQxMmZmNWJhZjA0ZDYyNzY2MjgyYzIzNTg4ZWFlNDk5MDhjODU2ZWQ0ZWVjZTRlZGU1N2RjYTllNzQ1Y2Y0ODM4ZmQzYzdhZWY2YTg1N2E5ZDk4MjZkYjViNTcxOTI4Y2ExZDYxNDQ2NzIyNWRlYjUxMGY0YWEyNDk1NWEwMDc1NWM2NGU0OWQzMTgzNzE1YTM0ZjdhYjIwNjllNmZhODY0ZTVjZWZjYzcwNjYzM2Q0NTQzZDQ0OGVjN2ExODc3OWNkYThlNjExNmJkZDQxMjBjMGExZjY1MzE2MWFkYmE0YzFhYmNhMzg4YWU2ZjQwYzk2ZDg1Mzc5M2U1YWVmNDY5Y2EzYzU3ZjU3ZjE5YzA5ZjJlZWNhZDZhYzBiYjY4N2ZiYjBjNzFhOTMyZmRkODA0ODNiODU3NTliYTY2MWQzYTk3NDdjNTEzMWNkZmNkN2MxYjQ2YWI3MTlhMGZkMmYwYTdjMWI0MWZhMDQzMTc3ZDUxODdmMWNmZTlmODcwYTM2ZDdlNzFmMDgwYTI4NmFlYzBhMmM2NzcxZTYyOTk0NDU1MWYzNjkyZmU5MWJlYjU5YzNmZmY5NTQ3MGRjNDJhZDA3NzI2MGYwZjIwOTEyYzM5NGUyZTA0YmFhYzIzNjNkM2UwNTZkNTg5ZDc2M2I1OTYzNjQyZGVjZDNmZjVlMzQ1Mzc3NTc0ZTI0Yjg3NDA1Y2E3MTc5ZTJkNmEyNzgwODljZjg5ZGZlNzI2YTM2MzllNDgyMGJhNDhjZjI2NDcxNzM0M2RmYTdlMGI4MmEzOTI4ZmNjYTk4ZjNlMTEyOTgzN2YyYmZiZDczMjY2NDU4MzM1NGU3MWFjMTE1MDA5ZjNlOGE5NDk5Njk0YWYwMmVkZWY5ZDI1Yzk1MjkxZjIwNmJkOTMxYTVkNDMyMjdlMWQwZmExZGU4Y2UwNmY4OGZjMzNlNzBlY2JlMWIxN2M1YjQzYTcxNjIxMWY2YTI2YjFmYjI4YTQzMWYzYzJlZDZiMTA2YWRhNTFhZGQyM2U0ZWI2OTBhMjNhOTFkMmRiMzU1Yzg4MGM0NDEzOTBkMDZhOWRlNjAyMmU0OTljCis5NDQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZgorOTYwOmI4NjE2ZDBhODNjOWFhZTlmMWFjOGJhNTM4YzQzZWFlM2Y1ODYxODQzNzg3YWVjOGIxMTg5ZDdjMzJlMDcyZDc5ZmUxZjA4ZmUwMjkxNzQwZWYwNThkNTNlNTJjMDhmNDFjZmNhN2I4ZDhlZWQ0NDA0YTI0ZGFiNjgxNjAwMzgyOGMwODNmNTcxNTJjYmNlZmE0MTFkMjEzMjExZTgyOGVmZWYxNjY5Y2JlYzk2ZmJmZjJmNjkxYWU3OGFlYmI1ZGRjY2Y4NzY4NGNmMDhkMWMyNDNlYTdiM2M2YmFjMWIxMWViZTAyZmY3ZTFjMzQyZTgyNTY3MGFlN2I4OGJjZjMxYzM4NTBmOTRkYzU0MGU2YmI5YmU0ZWQ4ZmQwODExMzc5OWM1MzllYjk3YzEzNDJhMjM0NDhjZWE5ZDgxYTE4ODk3NGQ0N2I2YmNhN2MzN2RkMTliNDEzNzQ2ZjdmZWIyZTQ5ZTFmN2E2MWEzZTY1MTZiNGJkNDlhMmIwMmE3M2MyN2JiY2Q5NWIyNjJlNTc5ODY5MDVlZWE3OGE3NTc5YjBhMDFhOTgyNjkyNjRhNWZkMmYxMjk3Y2ZmNWQxMDljNDAxNGMwN2JiM2E5OGRlNmJhNDQ5MGRiYWY4MWVkOGM2MmE2OTQyZDcyOTU4MTVmOTdmYWM2MThiMzUzM2U4YzNkMWZmYjdmMDQ3MDA0YWQxOGNmMDI3OGQzZDBjYzA0NmY2N2U2NDkxNGVhZTI5NTg5MzgxYWI5YjE0NzgxYzRjZjgwMTU3OWQwMWM1ZDU0NzI4MTZhNjgyNjk4MmQ1YTYyNmNhNGQ0NDA0YTEwYmI4ODJiMzQwODNiNGQyYTFiZTc1NmRlZDM0NmMyMzAwNzA1YzI3ZDUxN2NkMmJiNjA3YTdlMmMyZjFiMjA5YTNjMGFlNGRmZmZmMWRlOThmN2U2NDg0OGFkODY1MzU0OTE5ZWM1ZWZhNTE3Y2FiMTViNWYxMDlkMjI2NGZlOThiMDE5YjAxNjY1ZDVlNGE3M2U5OGFmYTE4OTY5OWNlY2U3OGIyZWM5NzkyNWNlOTllMmEyZTE5NTg1OGY3NDg3YTE5OWQ1NWViOGZmOWE2OWIxMWNmOTU4YjVkNTIyYTIzYzBiZDMwZTYwOTJlMTkxY2E0YWU3MDJkMjFjYTNmYjA4MjNjNTdkZTY1M2E5M2Q3OTQyYzc3MzFhZTdhNTMwYzc0ZmNjMThmMDY0ZjUzZmE1MDdjYzEzNjA4NjI1ZDcyM2NlMzliZjkzN2E5NjljNjhmMjBjNGI4YWFiYTM4NjllMTJkZmU0ZmU4ODdkN2NkZWM3ZDBjNmVmYTliZmExMWE5NDljZWVhNWUxNmMzNTNlYTRmM2M4MzQxNjFkM2NmOTkxYTczZDc1MGUzMmVhNzVjYmYxNTY3NGE0ODgwMjhjNDk2NzU2OTUzNGNmMTdmNTg3YjVjZGUxM2QwZTM5NjE0YzQ2MTUwZDQ4NTcyNTIyZmJkMWRjNGY0ZTc2NzFiNDBiOWE5YzJiZmZhNDAwODQ3OTEyMTFkZDllNGZkYTI1YWE1NDdjYTI3ZDZmNjg1NjllMWNlZTEzMzNiNmZhM2ViZjc5MzdhYTY3NjVhMzQyMWEzYmZhZmJiNjA1Zjk1ZWI1YmFjNzdkZjk1MzBhNmE3NWY4N2M4NDYzZWYxNzMzMTY3MzE2YjQzMzlhYjhlNDFkM2ZkN2RkNTE4YWU3YzI4YzA0M2ZhODAyOTI0Yjg1NGFkMDFlNmIyZTcxNjZlM2YxOTY2YmQzNTI5NDNhNzk0YjZmNDc1MmJlYjgxMjIxMDM5MTNhMGYxYTg4ZDJmM2NkOGEyMTBhNTRhODFiOTkxYjNmNTY2YjkxMmZjMDNkMTMzYzRmYzU1NTM3YmQwYzkwOTU2NzhmNzU1OGI0MDA1MDAwNjBmMDFjMTc5YmI5ZTk5ODM2MWE2YzRjMTQwYmU4ODA3MGJkYWQ3OWQ0MDk4NDU3OWNmNjYzZGI5ZTVkZTNkMjkyNzRmMTg5N2Q0ZDU3NmFjM2I1OTMzNDNlNmQ2MThlMDc0NzY2NDQyOWU3YzA4N2NlMWVlYWM0ZTVhYWI4MjdlMjRmMjFlYzhhMWJlYTljMGRhOWM0MTg1OWFkMmIwOWU5Y2ZiZGI4OGY0MjZjNjZiYjVkY2ZhYzMzYWFlNDQ5NzZiOGM1NjdmZWNkMGVjMDU0OTYxMmQ3NGYxOTMyYTU3MTY0OTE5OGM3MzZhNjAyYWJmMDJiZGY0OGJkZDFmYjc2NzdlOWFiYTBkYWIwN2I4YWZhOTczZTFiZDUwZWI5OTc3ZjZkNDc3OWMyNGFlMDg1ZWNlNjE2ZGNhYzNhMGM4ZDY5MjNhZWQ5ZGMyNTZlNDhhMDhkZDMzMzY5ZTZiYjlkNjE5YTM0MTBjYTU3NjZiNmNhY2IxY2NlMWZlNWRkMjExOWJlY2E0YWYwMjg4OTcyMWIwZTI4YjNjZTJjMTRhNzQ2YTg0MTU1Y2Q2NjQwOGJjZGM5ZDYyZmM3OTk5ZWVkODZkMTEzOGFhNGJkYjVlODYzOWFjMjQ5MgorOTYwOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZgorOTc2OmZlOGE5MjRmNmI0NzNlNDI1MmU4MzA2MjM4NjQ2YjM4M2NiNmNjNmFkZWI2YzQ3MjMxNGIxYzIxYjBkNjUxZTI4NjRlODc1ZDRmNWM0N2I5YzhiNzQ0OTNiMTUzZjY3OTVmZDAyNjVlOTAyMmY5M2VkMzYzZTllNDQzOWUyMzNmNDI5OGQ4NTk2MjBlYjI2OTY2M2EzMDk0ZWY4N2E2NWI4NTY4ZThmNjQ2YmI3YTk0YTliZmI2NjZjNDE2NDg2NDkyYmMxNDc4M2NjMWQzMmE2ZGVmODZhYWNkNGZiM2U4MDg3ODVmNzk2Y2RiM2M2NzMzM2QxNGRjNjExYjA0M2FkOGQ1ZGJkOWViYWQxYjE4ZjNmMjQzYmM2N2Q0NTc4MDc3ODcyZGU4MWY2NjBkMDFhOWEwZDI4OWQyNGQyMjRlZTMzODUyYmE4OThkYTY4Yjc0NjEyZjcxNDBkMzE1MWY2ZDFkY2M0MzA0YjE2NzdhNDZmNjIzNTg5ZDNhMWNjZjYxNDM0ZGZjMjNkMGZjMmUzMWNiMTE4YmE0ZDAyNTUwYjAwNTdhMjYxZTczNmQ4Y2RmYWMxZjMzMzczZDJlZTkzMmJiNmMwN2QzNDIwZjVjMTc5MWZhYWI0ZTYxYWUxN2Y4NTdkNzE2YjkzZmY1ODM4ODNhODM0ZTZkODc4ZGI5OGZiOWYyYWJkMGIxNjQxYThmMzkwNDQwNmQ1MzZjNDgwZjFjNmJlNzgwODNiNzQ1ZjFkOGNiMTAzNzAwOTExYTRjOGQ1YjliOGY1YTFkYzVkY2Y1Y2JiMDIxZWQ5ZjAzNWZmYmE2MmYyYmIxZWE1MjRlNGZkOTk5YWEyMjY5ODA2MzM4NTNmZjIwYjRiNzA5NGYzZThmZTU5MTNiN2JkMzYyNTliYjUzMWVjMWE0YTQxMzM2YTg1NWNkOGQ4NzEyNDgwYjM4MGFmM2U2NmY4ZWFlMTNiOTY0ZmNhOWIxZTE1OTNlY2I5MDRjZDZiOGUxZGFmZjIyOTZjMjY4OTU0YmI2YmFmMTIxMWUzNTI4MGMzZDAxMTUzNzQwNTVlMGRkYThhNDg0ODZmNDVkMTIzNmMwNGQzZTNkMjRmNGFlZDk0OGJkNTQ2N2RmMjQ2ODkyOTg0MGJhMGFmMTQ4N2U5NmY4ODgzODQ2ZmIwMmE2YTIwY2RiM2ZmZGQyODBhNTM0YzBmNGQ4ODc0MzY5NGI4YWJkNzFiMjRhZDRkY2I3Y2E3NTYzZjAxOTcxODE1Yjc4NWI0ZDI5YzkxOTk0Nzc2YjhhNGZhYzlkYTBmOWZjNzY0ODhkODAxNmJjYjc3ZDkyNzEyNWJkODZmMjEyN2I4NWRiYWU1MmIwNzEyMzU4OTA4YTc1ZjU0NWM4M2VmODFjZTM0YTVmOTMxNTA0YWI3NWIwZDFhYTEyODE0ZjE3NmVjZWM3NTllOWNjOGUyMWIyZTkyYTNlMmU2ZmNjYTU2ZjhlMGM2NDIzZTFhOTNlNGM4NTYzMTZkN2E2YTJjYjlhYzQ0MDA1MzhjZWNhYTlhYzc4NjhjZTk5ZGU5YTUwZGM3YjViYjc3MDdjOTU5YWIwMjkxNzA4ZTgzMzk1YmQxNDIyMjUyNjFlYTIyMmI5ZWY1ODYxNGY1MjA4ODQ4ZGVlMmM5N2JhYTg2YWIzZTM5MDY1ODgwM2UwNDgzOTY4ZDZmMmEwNjdmYmFlYmEzMTE5ODMwNjZiOTAzMmY5OWNkYmZiNGQ3Njc3MjliZjdkOTE0ODM0NTcyNDQ2MmZiODY4Mjk3ZTZiMzI1ZjI4OWYwMGJjMTUxMTEwZjg5ZDVlYTc1OGU5NDg0ZWIyNmJhM2VhZWFiNzE1NjMwODc0MGFjNDk5NDE0YjVkNzVkMDdmZGVjNzg4NDNiYTI2MWE4YzU4ZDAzNjA5NjY4ZmJmNTVkNGFkMmVlZDViMGVhNGVjYTgwNWQ2MzM1NDFiY2Q2ZTkzMDIwMDAzYzZhZDJjZjM2MGIwM2M3MWMzMjY3M2NiMzQxMzBmNzYzNGY4ZWFhNDU5ZmE4YmNiNTZmNDQ3NjczOGI0OWFhOWM3NTY5NjcyZjBhN2U1ODg3NGU4ZDJiNzgzNzMxNTBmYWVhMDQ2NDhjMDg4NzNhZmQyNzUzMGIwNGY5ODgyZjk5MjEzMDZmZGRlYTc3YTE4NjYwNTM5MGY0MGRlODFlZmU1Y2RiNDhkNmEyNWVmYmFjNmY2YmFkZmU3ZTJhN2VlYTdkMjA0MTUxZmViZGFkNTY4N2MyMjhmMjJjYTRmZWQ4YjQ1NmNkNWE3ZWVhZGI3NTBmZjI5Y2ZmNzUwMTZkOGU1YTQzOWI3MzVhYTk1ODYyNDQzMDBmNmY3ODE2NGIxMGYyN2NmMzExZTQ2Y2U4NmU0YTM4N2NjZjcyZTI3N2VjNmVmZjcxZWE2MmU3ODNiYmRmMjBhNGYyMzRkNTRjMGUzZDhjMjRkMWZjM2M5ZjI3YmI1YzE2MGQ5MmNmZDRiNWU3ODlhMGY1NDMzNWY3YjE2YjcyMjY4NzdmZjE0MmU3YTM5NmYwODc0MjJjNDFlYTE0MjRjN2I4OWY3YjA1YWM1ZjE2YjE1ZWJmMzdhZTg3MThiNTExYjcyCis5NzY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2YKKzk5MjphZjc1NWE3ZmQyMTY1OThiY2ZlYzBkMTM5ODkyMWY4N2FkOGY5YTRhYTQ0MThhNWJmY2NmMDBiYzlhNzEwYTA2NjllYTJjYjE3Y2FlOTlhZDlhODdiNzMxMjM2ODQ3YmQ2NDJhMzU5OGM3ZTU5MGUwMTM1ZDBhYWUxNDRkMjg4ZmExNDI2YWI2YzUwYmJlNzBhMjdiNzJjNzkzZGNmZGRkMTE4MzczZTIyYWU4ZjY4MGIwZThiMTBhM2NkYThhMzM0YTBmYWEzODlmNTZiNzgwN2MwNWQ2Y2VmYTk1NjBiMDQ2N2MxYWQxMGQyOWY4M2E1YzA3ZDZjNjllODkxN2E0YWE0NTIwY2Y0MmM3MTU2Y2NmMTE0NzgxZWU4MGJmMmYxNTU4ZmQ5ZWZkYzlmOWVmMzY5YjIxOWNhODEwNjQwOGQyNGI2YmJmODUxODE2ZThlMGM5ODk2MTVmYjJkNGMwODU0MDcyYWIzNzU4ZmZhMjJjNjkxODVkNWZmNjkyMGNiNjJmYmY3ODZiMDU0MzUzOTQwMDgxYTU1ZmQ4MTk3OWI3M2Y1ODA4YTljZDI5YjhkM2U0Yzc1YTYyMjU2MTM3NWU5NWQ1MGMyZmZkNjFiYzk2N2IxMjk1YzcwZDhjODE2M2M4MGNlYTZkNjk4MmY5YTcyZGIwOTQ5NTQxNGE5OTI0N2IyNGJiYjY0NTExZGRhZGRiOGZhZTQ1NTgxNmQ3YzEyODgwNDQyMDAxZThkMDU4ODE4MGVkNjlhOWE4NGU5NzViOTM2NTkzODljOTg2NjUzZThiYmVlNDMzMmI3NDhlZTQwZDhlMWI1NTZkMDVkYThhM2FhMTM0ODk3MjAzNmZiMjY1N2YyOWQwNDRjYTBlZDRkOGVhNDAzMGExYjIzZDBlOTczOTU4ODA2ZDhkYzgwNjQzMGRlYWJiNjRkNWJkNzVkYmNmMjY0MWE2ZDJjZTkyZjI5N2E4NTk4YzdhYWI0MzZjMTQ4NTA3NGYyNDRiNjA5YWNhNDcwMTUxZThmM2Q1NDEwMmYwZDQyOTBiYTViNzcyMjc1OGEzNjNjODczZmJjODhlNDNhZmIyNDM3Zjc5ZWJkMzg5OTBmNzIyMzhiYjg2NTI2MWJkNDM0ZjlkYTU4YzBhNTQwNDg0OTRmMDc0NmI5NjkwYTY5NTEwMzYxYTAyZDkzNGIxNGZmMDU4OTM1MzgyOGQzNzU3NDEyMzZmMWI0NTQ5N2Q4YWZjMWI0Nzk3NzllNGY3MjRlZGFlMjBlMjYwOTc2NGZiOTYxMzMwNWQzNzBmMTZhZmU0NTJiZTI4OWY1OTU5NDE5ODFiNDUxYjQxODBjN2I0YjY1ODQzYzJkOTlhNzVlNDMzMmYxYWI4M2Y4ZWYyMjgyN2Y5NGM2ZWNmZjZiM2VjMTM2MDMzZDQ4MzllMzUxOGUxZjc2ZDczNDkxMDU1NmJjY2MwMzk0YmY2MTllMjA5ZDkyMjc1ODYyZWJjYzE5ZDhiZTRhNjhiYTUyYjZlZjA1ZGI5Y2U0OTc4NTNiZGIzMTc2NGEzNTFkMmQ2YjkxZTBmMTY4MGI4NGQxNTRlN2YzNDA0Yjk3YTBlOTY0MzE4OGUyNzI2OGU3M2YwNzQwZTlhYzNjNDQ2MWM5YmUwNjE5NzBhN2I0YTc3ZGI1YmFiMzg0NTBiNGZkMGFmMjc0ZmE4YzQyODNiMmU5NTc3NmM2M2QwMjM5OTFjOGIwMmRhMWFmZjEyMmViOWU2NjFiY2IxMjM5ZDY3ZTUxNjUwMGNlNjI2ZTIwMDBlZjk3NjdlNzU4NDNjNWU5MDY3OWJlZWU5YWFjMzMyOGRlZmM4OWRjYzVkYTJiN2RiYjc2YWIxZGQ2ZDg0YWMyMmY3ZTA1ZDllNTE1YjgyNzgyNDQ4MmMxMTVkNzE4MGNjMWI5Mzc4ZmUwZWFmYmUzNGI1NDVmYTUyYjNmYjlhOWJkY2UxZTQxYTgwYjJmOTExNzQ3ZjZiZGIyNzliMTQwY2YxMjUwN2ZkMzNlZjllYWRjYWZjN2VhNWRjMTA3YTNmZjY3NDVhMzBjMTJkOGRlZDgyNDU4MGFhYTI3NGU0OTQ5NWYwMTc0MzU5Nzk5NDBjM2EwMDM1YmU3N2YyOWUwOTlmNDRlMWVlODJiMDBhMTM3MjliMmI5MGFkZGM1NDlkNjc5OWMzODg2MzBjZTdjNDI2OTFiODg4MzgwY2NkZjVjZjdhNzAxY2NkYzNmMzQyMmE2NzdkYzdmNzg5MTE0MGM3ZmJiNTA5MzYyNjM0OTA2NmE3NzIwYTRjNjk2ZWM1OTBmYjc0YTVjYTdmNmI2Nzc0ODExYWYzM2VlZDc4MTk4ZDViOGRlMjM3MWE5YWE3NjhiNzg5Y2MwY2ExYzM4MWNmNGI3MDEwNDIwNGZiYTcwYjE0MGE4N2U2MDkzZjE1YjAyNjI1YzdiOTBhYzIxNWMzYjMxOGMyZWZjODVjNWU5YmFhMDZiNTJlNDI2ZTJkMzIwN2I2MzhmMjhhZjI4MTRkOGJjNmRkMjkyMDRlMWQ0NTgyM2U2YmNhMTE0YWNjMzliYWU5MjkzYmI0YjI5MmJkZGRjNDU3NTAyYjZkY2E5YTdhODBiYTQ1ZjUyOGEyMjM0YTE2NjkyNGQ2MmIwOWNiYmFiMTRmCis5OTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZgorMTAwODo0MjViMGEzNTQzYjA0NzU3NGQ2M2YzNTEzYzJmYzMzMDQzNzA2N2VhOWUxNGMyNDQ4N2UwZmVkMGE1ZTVjYThjMWU5MmQ4YzUwMTVlNGQyNWZiNmJiOWU3YTE2YjZmMGZkNTQ3ODJmODQ0OTllYTk0NGVmMDFiMDUwNTNjMDA0YzczMGM1ZTIyOTUyM2JkN2UwMTdkYWJiNDk0ODdmNGFhNmQ5M2U1ODBkN2Q1ZDZmMDUzMTZmMzlhMmYzZmJhZWQ5NWI2MTVhODNiMzlhNDEwNmRiZjEyN2U5ZDFhMTM0Y2Q2NTc4MGNkOTUwNzcyM2U4NzZmZjgyYTYzZDk2YzE2YTUwZWMwNDEyZjk3N2IwMzhlMGVmYWUyZmNjMTIwM2RhM2VhNGZlYjAyOWE1YmUyYmZkNTAyZTU4ZDFmNzUzZmVmZDQ5YmQzYzY3ZWQwZDc5ZDk5NjE4ZWZiYWZhZGVmMGI0NzMyNzgwM2VhMDk5MjQ3ZjhmYjE3ZjdhYzhjYzdjYTM3YTMyZjVkMWVlMjdmNjM3ZGIzNmQzYzE3MWFmNTU0OWY1NTRiNGI5NDIyZjhiZmFkNjQ0ZWY5ZGJkNDdmYzg2OGNlNGJhOTM0Mjg4OGViYzhjNjk3Mjg5MDI1NjVmMWI1MjA1MjhmYzczZGMyYmNkN2Q1MTZkMGE0ZmY5ZWVlOTUwNjlmNDg3YzgxMGVmYzM4YmRhNTQ5MzNmNDFlZjY5YjNhMzlmMjhhMTlhZmFmNzU4YTVhYmYxNzNmNzU0NGRlYTkwNTk2YWM5ZWFmNjE5NGYyNmY0NDRhZDZmMGZlYWY5YzZjZjE4MjdhMzVlYWI5ZTRhNDRmN2JjZmEwODVkYWZkODNmNWEyZmY2NmI3M2Y1OGU3NDE1ZDkwNjMxMjc0OTQyN2FjNTYyNWJjNzBmN2I1OGRjNzhmMmIwMTUzYzgzZjJkMjUwM2Q2NzBiOWRhODJkZjFhZTdmZjU2N2Y4MDQ2NGYxYTdhN2ZmYzJlNjljY2JkNTA3ZmRjZTkxNzE0NjkxNTgyODAwYTA3Njk0OTY5NTM2ZDg2ZjFhY2FhNGJmNDUxN2ZjZmI2MzFmMDg3MzJhOTIzNGUxNzE1NGFkODA3ZDAzMDhhY2EzOTdmZGI2NDhkYzQ5MTY0Y2ZhZWMyMjJmNmE5MTFjNGRlZWZhNzkwNzM4YWFhN2E1Yzk0ZjE2Njg0NDFjMjBiZmJmN2UxYTcyZjlmNDViN2U2MmU4NzIxNDE5NGM5YjRlOWE0ZTY4NzAyZjkxZDc5NzA3NmM5MjY4ZGZmMmZiMWJkODRiNGJmYWIzYWY5MmJjN2ZiZjIxNjEwYmU4ODE5YmRlZTQyY2I0MDUxNTY3NmM0ZDgyNTYxYTQxZDkzMGIzNDc5MGE2Zjc0NGQwNWM1OTkyNTZiYmM5NGFkZWNhOWJlNDYyZWUyNGZjZTYzM2VhYzIzOWZmMGQxNDIzYTUxYzQ3NWY0YTUxY2E1MWM1NzAyOTM5ODgxMTNjNjRiOTIxYjc0OTZlNWE5ZjAwMTM1NzhiYjIwNjgxOTU3NGVlNGZjODAwNjdjZTMzZGY1MzZhOGE3ZmI2YjU0YjE2YjcxOWM1NDcyNTdjZmFiZWVkMDBjMThlYjEyMGUwMTljMDllN2QyNzVmZWFlNDA3NmExOTU3MDM1ZTA1Zjk2NDlkZDkzYmVjM2U1NmE5YWFiZGFlYmJlOWJjNTNhZjYzNzAwNGYzNWYwMjllNzViNDRhNDA5ODk4ODVjNzkxMzU3NGZiZTA0MGJhMDU5NTI0MDQ0ZjAwZGEzZjI5ZDBmNmVhYjcxYjg1MDhjNTY5M2E4NDAxZmQwYmQwZDQzMTJkMDE4YjliMjZjZDI2MzNlZTQ3NzU4NWFmZmI1YTJiZTczZjE1NjI4NWJkOTM5MDVhMjI3ZjY3OTQxMzhlMThlY2MwZmVkYzk4MTRiYTgwNmMwYmIyMDg3NjUzZTAyMjk1YWExMzgwNzkwOGQ5NjhkNjk2NmM3ZWMyMWM5MzZjODc3YjhiYTZhNzZmMmRjMzY3ZGQxYjUzOGMwMDQ1ZDIxMWVhODFkMjg2YThhZmExNDdlYWJlYTQyODAyZmUwMTg5MTAxMmExNzY2NTUxYWJjZGJmZmRhYjgxOTFiNjMwYzZhOThiYTkxY2Q5ZGVlNjQ3MDkxODM4Y2YzMTQ1NGZhN2M4Nzc0MThmYjEwYjE5ZWY5MDU0MDhjNDdiYTExMTUzOTRmYmQ1YWY1Y2UzNjJiMWY4ODgxMjQwNDNhNWZkM2ZjNzhhMDQxZmQ3MjQwMzk2ZDYxZDJmZTNmY2VlYTM3NDg4MDY1YjIzZDliNzc0NWNjNDZiMTc2OWFhZDkzNmRlZDE2YTRmYjczYjk4MmQyNDk1OWVhMGVjMzhmNmQwNjczYjFlNDI3MmYwZGEwMTUxMmNjYTdkMmUxNGJmMjQ4MWM1ZmNiMzdjYmFlMzVhOTVmYTQxN2IxOGIxMTczNDEzYTBkNmNhMWU1NDhiY2RjMDliMDcwNjU2Yjk4YjBkNmEwNWZhYzk4Yzk4NmNjYWQ5YzZiYmQxNzg4MTQxMmFkY2VmN2QwNDE1NTBjNzUzZjI2MzIwYTZlMjk2YWMwMDU5YmExYjkxMDE1YmNlNGE3M2E3NzQ5YTNkYzAyZWZhYjk2Njg1MDNkMjBmNDkyZDc4YmU0ODEKKzEwMDg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmCmRpZmYgLS1naXQgYS9ub3Rlcy90ZWNoMDAwNS50eHQgYi9ub3Rlcy90ZWNoMDAwNS50eHQKaW5kZXggOGYzOTNkNS4uZWYxMGE0MyAxMDA2NDQKLS0tIGEvbm90ZXMvdGVjaDAwMDUudHh0CisrKyBiL25vdGVzL3RlY2gwMDA1LnR4dApAQCAtOSwxMCArOSwxMiBAQAogCiBZb3UgY2FuIGRpc2FibGUgd2hvbGUgY2xhc3NlcyBvZiBhbGdvcml0aG1zIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgTFRDX05PXyogZGVmaW5lcy4gIEZyb20gdGhlcmUgeW91IGNhbiBtYW51YWxseSB0dXJuIG9uIHdoYXQgeW91IHdhbnQgdG8gZW5hYmxlLiAgCiAKLVRoZSBmb2xsb3dpbmcgYnVpbGQgd2l0aCBHQ0MgMy40LjMgb24gYW4gQU1ENjQgYm94IGdldHMgeW91IEFFUywgQ1RSIG1vZGUsIFNIQS0yNTYsIEhNQUMsIFlhcnJvdywgZnVsbCBSU0EgUEtDUyAjMSwgUEtDUyAjNSwgQVNOLjEgREVSIGFuZCBNUEkgaW4gCi1yb3VnaGx5IDgwS0Igb2YgY29kZS4KK1RoZSBmb2xsb3dpbmcgYnVpbGQgd2l0aCBHQ0MgMy40LjQgb24gYW4gQU1ENjQgYm94IGdldHMgeW91IEFFUywgQ1RSIG1vZGUsIFNIQS0yNTYsIEhNQUMsIFlhcnJvdywgZnVsbCBSU0EgUEtDUyAjMSwgUEtDUyAjNSBhbmQgQVNOLjEgREVSIGluIAorcm91Z2hseSA0MEtCIG9mIGNvZGUgKDQ5S0Igb24gdGhlIEFSTXY0KSAoYm90aCBleGNsdWRpbmcgdGhlIG1hdGggbGlicmFyeSkuCiAKLUNGTEFHUz0iLURTQ19SU0FfMSAtRExUQ19OT19DSVBIRVJTIC1ETFRDX05PX0hBU0hFUyAtRExUQ19OT19QUk5HUyAtRExUQ19OT19NQUNTIC1ETFRDX05PX01PREVTIC1ETFRDX05PX1BLIC1EUklKTkRBRUwgLURDVFIgLURTSEEyNTYgXAotLURITUFDIC1EWUFSUk9XIC1ETVJTQSAtRE1QSSAtT3MgLWZvbWl0LWZyYW1lLXBvaW50ZXIiIG1ha2UgSUdOT1JFX1NQRUVEPTEKK0NGTEFHUz0iLURMVENfTk9fQ0lQSEVSUyAtRExUQ19OT19IQVNIRVMgLURMVENfTk9fUFJOR1MgLURMVENfTk9fTUFDUyAtRExUQ19OT19NT0RFUyAtRExUQ19OT19QSyAtRFJJSk5EQUVMIC1ETFRDX0NUUl9NT0RFIC1EU0hBMjU2IFwKKy1ETFRDX0hNQUMgLURZQVJST1cgLURNUlNBIC1ETVBJIC1EVEZNX0RFU0MgLURBUkdUWVBFPTMgLU9zIC1ETFRDX1NNQUxMX0NPREUgLWZvbWl0LWZyYW1lLXBvaW50ZXIiIG1ha2UgSUdOT1JFX1NQRUVEPTEKKworT2J2aW91c2x5IHRoaXMgd29uJ3QgZ2V0IHlvdSBwZXJmb3JtYW5jZSBidXQgaWYgeW91IG5lZWQgdG8gcGFjayBhIGNyeXB0byBsaWIgaW4gYSBkZXZpY2Ugd2l0aCBsaW1pdGVkIG1lYW5zIGl0J3MgbW9yZSB0aGFuIGVub3VnaC4uLgogCiBOZWF0byBlaD8KZGlmZiAtLWdpdCBhL25vdGVzL3RlY2gwMDA3LnR4dCBiL25vdGVzL3RlY2gwMDA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDliZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMvdGVjaDAwMDcudHh0CkBAIC0wLDAgKzEsNSBAQAorVGVjaCBOb3RlICM3CitRdWljayBidWlsZGluZyBmb3IgdGVzdGluZyB3aXRoIExUTQorCitFWFRSQUxJQlM9LWx0b21tYXRoIENGTEFHUz0iLWczIC1ETFRDX05PX0FTTSAtRFVTRV9MVE0gLURMVE1fREVTQyIgbWFrZSAtajMgSUdOT1JFX1NQRUVEPTEgdGVzdAorCmRpZmYgLS1naXQgYS9ydW4uc2ggYi9ydW4uc2gKaW5kZXggYjY1MjExMC4uZGQ5ODJlOSAxMDA2NDQKLS0tIGEvcnVuLnNoCisrKyBiL3J1bi5zaApAQCAtMSw1ICsxLDUgQEAKICMhL2Jpbi9iYXNoCi1iYXNoIGJ1aWxkLnNoICIgJDEiICIkMiAtTzIiICIkMyBJR05PUkVfU1BFRUQ9MSIKK2Jhc2ggYnVpbGQuc2ggIiAkMSIgIiQyIC1PMiIgIiQzIElHTk9SRV9TUEVFRD0xIiAiJDQiICIkNSIKIGlmIFsgLWEgdGVzdG9rLnR4dCBdICYmIFsgLWYgdGVzdG9rLnR4dCBdOyB0aGVuCiAgICBlY2hvCiBlbHNlCkBAIC05LDcgKzksNyBAQAogZmkKIAogcm0gLWYgdGVzdG9rLnR4dAotYmFzaCBidWlsZC5zaCAiICQxIiAiJDIgLU9zIiAiICQzIElHTk9SRV9TUEVFRD0xIExUQ19TTUFMTD0xIgorYmFzaCBidWlsZC5zaCAiICQxIiAiJDIgLU9zIiAiICQzIElHTk9SRV9TUEVFRD0xIExUQ19TTUFMTD0xIiAiJDQiICIkNSIKIGlmIFsgLWEgdGVzdG9rLnR4dCBdICYmIFsgLWYgdGVzdG9rLnR4dCBdOyB0aGVuCiAgICBlY2hvCiBlbHNlCkBAIC0xOSw3ICsxOSw3IEBACiBmaQogCiBybSAtZiB0ZXN0b2sudHh0Ci1iYXNoIGJ1aWxkLnNoICIgJDEiICIgJDIiICIgJDMiCitiYXNoIGJ1aWxkLnNoICIgJDEiICIgJDIiICIgJDMgIiAiJDQiICIkNSIKIGlmIFsgLWEgdGVzdG9rLnR4dCBdICYmIFsgLWYgdGVzdG9rLnR4dCBdOyB0aGVuCiAgICBlY2hvCiBlbHNlCkBAIC0zMSw1ICszMSw1IEBACiBleGl0IDAKIAogIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9ydW4uc2gsdiAkICAgCi0jICRSZXZpc2lvbjogMS4xMyAkICAgCi0jICREYXRlOiAyMDA1LzA1LzExIDE4OjU5OjUzICQgCisjICRSZXZpc2lvbjogMS4xNSAkICAgCisjICREYXRlOiAyMDA1LzA3LzIzIDE0OjE4OjMxICQgCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9hZXMvYWVzLmMgYi9zcmMvY2lwaGVycy9hZXMvYWVzLmMKaW5kZXggOGM5NTIxNS4uYmQyMDA2ZCAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvYWVzL2Flcy5jCisrKyBiL3NyYy9jaXBoZXJzL2Flcy9hZXMuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qIEFFUyBpbXBsZW1lbnRhdGlvbiBieSBUb20gU3QgRGVuaXMKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICA2LAogICAgIDE2LCAzMiwgMTYsIDEwLAogICAgIFNFVFVQLCBFQ0JfRU5DLCBFQ0JfREVDLCBFQ0JfVEVTVCwgRUNCX0RPTkUsIEVDQl9LUywKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAogfTsKIAogY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBhZXNfZGVzYyA9CkBAIC01OCw3ICs1OCw3IEBACiAgICAgNiwKICAgICAxNiwgMzIsIDE2LCAxMCwKICAgICBTRVRVUCwgRUNCX0VOQywgRUNCX0RFQywgRUNCX1RFU1QsIEVDQl9ET05FLCBFQ0JfS1MsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKICNlbHNlCkBAIC03NCw3ICs3NCw3IEBACiAgICAgNiwKICAgICAxNiwgMzIsIDE2LCAxMCwKICAgICBTRVRVUCwgRUNCX0VOQywgTlVMTCwgTlVMTCwgRUNCX0RPTkUsIEVDQl9LUywKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAogfTsKIAogY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBhZXNfZW5jX2Rlc2MgPQpAQCAtODMsNyArODMsNyBAQAogICAgIDYsCiAgICAgMTYsIDMyLCAxNiwgMTAsCiAgICAgU0VUVVAsIEVDQl9FTkMsIE5VTEwsIE5VTEwsIEVDQl9ET05FLCBFQ0JfS1MsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKICNlbmRpZgpAQCAtMjgxLDExICsyODEsMTIgQEAKICAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQogICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX3Jpam5kYWVsX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkgCitzdGF0aWMgaW50IF9yaWpuZGFlbF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpIAogI2Vsc2UKLXZvaWQgRUNCX0VOQyhjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgRUNCX0VOQyhjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgICB1bG9uZzMyIHMwLCBzMSwgczIsIHMzLCB0MCwgdDEsIHQyLCB0MywgKnJrOwpAQCAtMzA3LDcgKzMwOCw2IEBACiAgICAgTE9BRDMySChzMiwgcHQgICsgIDgpOyBzMiBePSBya1syXTsKICAgICBMT0FEMzJIKHMzLCBwdCAgKyAxMik7IHMzIF49IHJrWzNdOwogCi0KICNpZmRlZiBMVENfU01BTExfQ09ERQogCiAgICAgZm9yIChyID0gMDsgOyByKyspIHsKQEAgLTQ0MCwxMyArNDQwLDE2IEBACiAgICAgICAgIChUZTRfMFtieXRlKHQyLCAwKV0pIF4gCiAgICAgICAgIHJrWzNdOwogICAgIFNUT1JFMzJIKHMzLCBjdCsxMik7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgRUNCX0VOQyhjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpIAoraW50IEVDQl9FTkMoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KSAKIHsKLSAgIF9yaWpuZGFlbF9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOworICAgaW50IGVyciA9IF9yaWpuZGFlbF9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgbG9uZykqOCArIHNpemVvZih1bnNpZ25lZCBsb25nKikgKyBzaXplb2YoaW50KSoyKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtNDU3LDExICs0NjAsMTIgQEAKICAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXN0YXRpYyB2b2lkIF9yaWpuZGFlbF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpIAorc3RhdGljIGludCBfcmlqbmRhZWxfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KSAKICNlbHNlCi12b2lkIEVDQl9ERUMoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IEVDQl9ERUMoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCiB7CiAgICAgdWxvbmczMiBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDMsICpyazsKQEAgLTYxNSwxNCArNjE5LDE3IEBACiAgICAgICAgIChUZDRbYnl0ZSh0MCwgMCldICYgMHgwMDAwMDBmZikgXgogICAgICAgICBya1szXTsKICAgICBTVE9SRTMySChzMywgcHQrMTIpOworCisgICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgRUNCX0RFQyhjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpIAoraW50IEVDQl9ERUMoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KSAKIHsKLSAgIF9yaWpuZGFlbF9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOworICAgaW50IGVyciA9IF9yaWpuZGFlbF9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgbG9uZykqOCArIHNpemVvZih1bnNpZ25lZCBsb25nKikgKyBzaXplb2YoaW50KSoyKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtNjgxLDEwICs2ODgsMTAgQEAKICAgCiAgICAgcmlqbmRhZWxfZWNiX2VuY3J5cHQodGVzdHNbaV0ucHQsIHRtcFswXSwgJmtleSk7CiAgICAgcmlqbmRhZWxfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZrZXkpOwotICAgIGlmIChtZW1jbXAodG1wWzBdLCB0ZXN0c1tpXS5jdCwgMTYpIHx8IG1lbWNtcCh0bXBbMV0sIHRlc3RzW2ldLnB0LCAxNikpIHsgCisgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1tpXS5jdCwgMTYpIHx8IFhNRU1DTVAodG1wWzFdLCB0ZXN0c1tpXS5wdCwgMTYpKSB7IAogI2lmIDAKICAgICAgICBwcmludGYoIlxuXG5UZXN0ICVkIGZhaWxlZFxuIiwgaSk7Ci0gICAgICAgaWYgKG1lbWNtcCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikpIHsKKyAgICAgICBpZiAoWE1FTUNNUCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikpIHsKICAgICAgICAgICBwcmludGYoIkNUOiAiKTsKICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCB0bXBbMF1baV0pOwpAQCAtNzQ5LDUgKzc1Niw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYWVzL2Flcy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjggJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjE0ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMgYi9zcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCmluZGV4IDMxZDI3NmUuLjBlZjk3MzEgMTAwNjQ0Ci0tLSBhL3NyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMKKysrIGIvc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAvKiBUaGUgcHJlY29tcHV0ZWQgdGFibGVzIGZvciBBRVMgKi8KIC8qCkBAIC05NCw2ICs5NCw3IEBACiAgICAgMHg3YmIwYjBjYlVMLCAweGE4NTQ1NGZjVUwsIDB4NmRiYmJiZDZVTCwgMHgyYzE2MTYzYVVMLAogfTsKIAorI2lmbmRlZiBQRUxJX1RBQgogc3RhdGljIGNvbnN0IHVsb25nMzIgVGU0WzI1Nl0gPSB7CiAgICAgMHg2MzYzNjM2M1VMLCAweDdjN2M3YzdjVUwsIDB4Nzc3Nzc3NzdVTCwgMHg3YjdiN2I3YlVMLAogICAgIDB4ZjJmMmYyZjJVTCwgMHg2YjZiNmI2YlVMLCAweDZmNmY2ZjZmVUwsIDB4YzVjNWM1YzVVTCwKQEAgLTE2MCw2ICsxNjEsNyBAQAogICAgIDB4NDE0MTQxNDFVTCwgMHg5OTk5OTk5OVVMLCAweDJkMmQyZDJkVUwsIDB4MGYwZjBmMGZVTCwKICAgICAweGIwYjBiMGIwVUwsIDB4NTQ1NDU0NTRVTCwgMHhiYmJiYmJiYlVMLCAweDE2MTYxNjE2VUwsCiB9OworI2VuZGlmCiAKICNpZm5kZWYgRU5DUllQVF9PTkxZCiAKQEAgLTUyOCw2ICs1MzAsNyBAQAogICAgIDB4YjBiMGNiN2JVTCwgMHg1NDU0ZmNhOFVMLCAweGJiYmJkNjZkVUwsIDB4MTYxNjNhMmNVTCwKIH07CiAKKyNpZm5kZWYgUEVMSV9UQUIKIHN0YXRpYyBjb25zdCB1bG9uZzMyIFRlNF8wW10gPSB7CiAweDAwMDAwMDYzVUwsIDB4MDAwMDAwN2NVTCwgMHgwMDAwMDA3N1VMLCAweDAwMDAwMDdiVUwsIDB4MDAwMDAwZjJVTCwgMHgwMDAwMDA2YlVMLCAweDAwMDAwMDZmVUwsIDB4MDAwMDAwYzVVTCwgCiAweDAwMDAwMDMwVUwsIDB4MDAwMDAwMDFVTCwgMHgwMDAwMDA2N1VMLCAweDAwMDAwMDJiVUwsIDB4MDAwMDAwZmVVTCwgMHgwMDAwMDBkN1VMLCAweDAwMDAwMGFiVUwsIDB4MDAwMDAwNzZVTCwgCkBAIC02NjcsNiArNjcwLDcgQEAKIDB4OGMwMDAwMDBVTCwgMHhhMTAwMDAwMFVMLCAweDg5MDAwMDAwVUwsIDB4MGQwMDAwMDBVTCwgMHhiZjAwMDAwMFVMLCAweGU2MDAwMDAwVUwsIDB4NDIwMDAwMDBVTCwgMHg2ODAwMDAwMFVMLCAKIDB4NDEwMDAwMDBVTCwgMHg5OTAwMDAwMFVMLCAweDJkMDAwMDAwVUwsIDB4MGYwMDAwMDBVTCwgMHhiMDAwMDAwMFVMLCAweDU0MDAwMDAwVUwsIDB4YmIwMDAwMDBVTCwgMHgxNjAwMDAwMFVMCiB9OworI2VuZGlmIC8qIHBlbGltYWMgKi8KIAogI2lmbmRlZiBFTkNSWVBUX09OTFkKIApAQCAtMTAyMCw1ICsxMDI0LDUgQEAKIH07CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8wMiAxMzoxOTowOSAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9hbnViaXMuYyBiL3NyYy9jaXBoZXJzL2FudWJpcy5jCmluZGV4IDUxMWVhYzIuLjlhMDcyMmMgMTAwNjQ0Ci0tLSBhL3NyYy9jaXBoZXJzL2FudWJpcy5jCisrKyBiL3NyYy9jaXBoZXJzL2FudWJpcy5jCkBAIC0xLDE1NTQgKzEsMTU1OCBAQAotLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcw0KLSAqDQotICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljDQotICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuDQotICoNCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcw0KLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4NCi0gKg0KLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcNCi0gKi8NCi0NCi0vKioNCi0gIEBmaWxlIGFudWJpcy5jDQotICBBbnViaXMgaW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIHB1YmxpYyBkb21haW4gc291cmNlDQotICBBdXRob3JzOiBQYXVsbyBTLkwuTS4gQmFycmV0byBhbmQgVmluY2VudCBSaWptZW4uDQotKi8NCi0NCi0jaW5jbHVkZSAidG9tY3J5cHQuaCINCi0NCi0jaWZkZWYgQU5VQklTDQotDQotY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBhbnViaXNfZGVzYyA9IHsNCi0gICAiYW51YmlzIiwNCi0gICAxOSwNCi0gICAxNiwgNDAsIDE2LCAxMiwNCi0gICAmYW51YmlzX3NldHVwLA0KLSAgICZhbnViaXNfZWNiX2VuY3J5cHQsDQotICAgJmFudWJpc19lY2JfZGVjcnlwdCwNCi0gICAmYW51YmlzX3Rlc3QsDQotICAgJmFudWJpc19kb25lLA0KLSAgICZhbnViaXNfa2V5c2l6ZSwNCi0gICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMDQotfTsNCi0NCi0jZGVmaW5lIE1JTl9OICAgICAgICAgICA0IA0KLSNkZWZpbmUgTUFYX04gICAgICAgICAgIDEwIA0KLSNkZWZpbmUgTUlOX1JPVU5EUyAgICAgICg4ICsgTUlOX04pIA0KLSNkZWZpbmUgTUFYX1JPVU5EUyAgICAgICg4ICsgTUFYX04pIA0KLSNkZWZpbmUgTUlOX0tFWVNJWkVCICAgICg0Kk1JTl9OKSANCi0jZGVmaW5lIE1BWF9LRVlTSVpFQiAgICAoNCpNQVhfTikgDQotI2RlZmluZSBCTE9DS1NJWkUgICAgICAgMTI4IA0KLSNkZWZpbmUgQkxPQ0tTSVpFQiAgICAgIChCTE9DS1NJWkUvOCkgDQotDQotDQotLyoNCi0gKiBUaG91Z2ggQW51YmlzIGlzIGVuZGlhbm5lc3MtbmV1dHJhbCwgdGhlIGVuY3J5cHRpb24gdGFibGVzIGFyZSBsaXN0ZWQNCi0gKiBpbiBCSUctRU5ESUFOIGZvcm1hdCwgd2hpY2ggaXMgYWRvcHRlZCB0aHJvdWdob3V0IHRoaXMgaW1wbGVtZW50YXRpb24NCi0gKiAoYnV0IGxpdHRsZS1lbmRpYW4gbm90YXRpb24gd291bGQgYmUgZXF1YWxseSBzdWl0YWJsZSBpZiBjb25zaXN0ZW50bHkNCi0gKiBlbXBsb3llZCkuDQotICovDQotI2lmIGRlZmluZWQoQU5VQklTX1RXRUFLKQ0KLQ0KLXN0YXRpYyBjb25zdCB1bG9uZzMyIFQwWzI1Nl0gPSB7DQotICAgIDB4YmE2OWQyYmJVLCAweDU0YTg0ZGU1VSwgMHgyZjVlYmNlMlUsIDB4NzRlOGNkMjVVLA0KLSAgICAweDUzYTY1MWY3VSwgMHhkM2JiNmJkMFUsIDB4ZDJiOTZmZDZVLCAweDRkOWEyOWIzVSwNCi0gICAgMHg1MGEwNWRmZFUsIDB4YWM0NThhY2ZVLCAweDhkMDcwZTA5VSwgMHhiZjYzYzZhNVUsDQotICAgIDB4NzBlMGRkM2RVLCAweDUyYTQ1NWYxVSwgMHg5YTI5NTI3YlUsIDB4NGM5ODJkYjVVLA0KLSAgICAweGVhYzk4ZjQ2VSwgMHhkNWI3NzNjNFUsIDB4OTczMzY2NTVVLCAweGQxYmY2M2RjVSwNCi0gICAgMHgzMzY2Y2NhYVUsIDB4NTFhMjU5ZmJVLCAweDViYjY3MWM3VSwgMHhhNjUxYTJmM1UsDQotICAgIDB4ZGVhMTVmZmVVLCAweDQ4OTAzZGFkVSwgMHhhODRkOWFkN1UsIDB4OTkyZjVlNzFVLA0KLSAgICAweGRiYWI0YmUwVSwgMHgzMjY0YzhhY1UsIDB4Yjc3M2U2OTVVLCAweGZjZTVkNzMyVSwNCi0gICAgMHhlM2RiYWI3MFUsIDB4OWUyMTQyNjNVLCAweDkxM2Y3ZTQxVSwgMHg5YjJiNTY3ZFUsDQotICAgIDB4ZTJkOWFmNzZVLCAweGJiNmJkNmJkVSwgMHg0MTgyMTk5YlUsIDB4NmVkY2E1NzlVLA0KLSAgICAweGE1NTdhZWY5VSwgMHhjYjhiMGI4MFUsIDB4NmJkNmIxNjdVLCAweDk1Mzc2ZTU5VSwNCi0gICAgMHhhMTVmYmVlMVUsIDB4ZjNmYmViMTBVLCAweGIxN2ZmZTgxVSwgMHgwMjA0MDgwY1UsDQotICAgIDB4Y2M4NTE3OTJVLCAweGM0OTUzN2EyVSwgMHgxZDNhNzQ0ZVUsIDB4MTQyODUwNzhVLA0KLSAgICAweGMzOWIyYmIwVSwgMHg2M2M2OTE1N1UsIDB4ZGFhOTRmZTZVLCAweDVkYmE2OWQzVSwNCi0gICAgMHg1ZmJlNjFkZlUsIDB4ZGNhNTU3ZjJVLCAweDdkZmFlOTEzVSwgMHhjZDg3MTM5NFUsDQotICAgIDB4N2ZmZWUxMWZVLCAweDVhYjQ3NWMxVSwgMHg2Y2Q4YWQ3NVUsIDB4NWNiODZkZDVVLA0KLSAgICAweGY3ZjNmYjA4VSwgMHgyNjRjOThkNFUsIDB4ZmZlM2RiMzhVLCAweGVkYzc5MzU0VSwNCi0gICAgMHhlOGNkODc0YVUsIDB4OWQyNzRlNjlVLCAweDZmZGVhMTdmVSwgMHg4ZTAxMDIwM1UsDQotICAgIDB4MTkzMjY0NTZVLCAweGEwNWRiYWU3VSwgMHhmMGZkZTcxYVUsIDB4ODkwZjFlMTFVLA0KLSAgICAweDBmMWUzYzIyVSwgMHgwNzBlMWMxMlUsIDB4YWY0Mzg2YzVVLCAweGZiZWJjYjIwVSwNCi0gICAgMHgwODEwMjAzMFUsIDB4MTUyYTU0N2VVLCAweDBkMWEzNDJlVSwgMHgwNDA4MTAxOFUsDQotICAgIDB4MDEwMjA0MDZVLCAweDY0Yzg4ZDQ1VSwgMHhkZmEzNWJmOFUsIDB4NzZlY2M1MjlVLA0KLSAgICAweDc5ZjJmOTBiVSwgMHhkZGE3NTNmNFUsIDB4M2Q3YWY0OGVVLCAweDE2MmM1ODc0VSwNCi0gICAgMHgzZjdlZmM4MlUsIDB4Mzc2ZWRjYjJVLCAweDZkZGFhOTczVSwgMHgzODcwZTA5MFUsDQotICAgIDB4Yjk2ZmRlYjFVLCAweDczZTZkMTM3VSwgMHhlOWNmODM0Y1UsIDB4MzU2YWQ0YmVVLA0KLSAgICAweDU1YWE0OWUzVSwgMHg3MWUyZDkzYlUsIDB4N2JmNmYxMDdVLCAweDhjMDUwYTBmVSwNCi0gICAgMHg3MmU0ZDUzMVUsIDB4ODgwZDFhMTdVLCAweGY2ZjFmZjBlVSwgMHgyYTU0YThmY1UsDQotICAgIDB4M2U3Y2Y4ODRVLCAweDVlYmM2NWQ5VSwgMHgyNzRlOWNkMlUsIDB4NDY4YzA1ODlVLA0KLSAgICAweDBjMTgzMDI4VSwgMHg2NWNhODk0M1UsIDB4NjhkMGJkNmRVLCAweDYxYzI5OTViVSwNCi0gICAgMHgwMzA2MGMwYVUsIDB4YzE5ZjIzYmNVLCAweDU3YWU0MWVmVSwgMHhkNmIxN2ZjZVUsDQotICAgIDB4ZDlhZjQzZWNVLCAweDU4YjA3ZGNkVSwgMHhkOGFkNDdlYVUsIDB4NjZjYzg1NDlVLA0KLSAgICAweGQ3YjM3YmM4VSwgMHgzYTc0ZTg5Y1UsIDB4Yzg4ZDA3OGFVLCAweDNjNzhmMDg4VSwNCi0gICAgMHhmYWU5Y2YyNlUsIDB4OTYzMTYyNTNVLCAweGE3NTNhNmY1VSwgMHg5ODJkNWE3N1UsDQotICAgIDB4ZWNjNTk3NTJVLCAweGI4NmRkYWI3VSwgMHhjNzkzM2JhOFUsIDB4YWU0MTgyYzNVLA0KLSAgICAweDY5ZDJiOTZiVSwgMHg0Yjk2MzFhN1UsIDB4YWI0Yjk2ZGRVLCAweGE5NGY5ZWQxVSwNCi0gICAgMHg2N2NlODE0ZlUsIDB4MGExNDI4M2NVLCAweDQ3OGUwMThmVSwgMHhmMmY5ZWYxNlUsDQotICAgIDB4YjU3N2VlOTlVLCAweDIyNDQ4OGNjVSwgMHhlNWQ3YjM2NFUsIDB4ZWVjMTlmNWVVLA0KLSAgICAweGJlNjFjMmEzVSwgMHgyYjU2YWNmYVUsIDB4ODExZjNlMjFVLCAweDEyMjQ0ODZjVSwNCi0gICAgMHg4MzFiMzYyZFUsIDB4MWIzNjZjNWFVLCAweDBlMWMzODI0VSwgMHgyMzQ2OGNjYVUsDQotICAgIDB4ZjVmN2YzMDRVLCAweDQ1OGEwOTgzVSwgMHgyMTQyODRjNlUsIDB4Y2U4MTFmOWVVLA0KLSAgICAweDQ5OTIzOWFiVSwgMHgyYzU4YjBlOFUsIDB4ZjllZmMzMmNVLCAweGU2ZDFiZjZlVSwNCi0gICAgMHhiNjcxZTI5M1UsIDB4Mjg1MGEwZjBVLCAweDE3MmU1YzcyVSwgMHg4MjE5MzIyYlUsDQotICAgIDB4MWEzNDY4NWNVLCAweDhiMGIxNjFkVSwgMHhmZWUxZGYzZVUsIDB4OGEwOTEyMWJVLA0KLSAgICAweDA5MTIyNDM2VSwgMHhjOThmMDM4Y1UsIDB4ODcxMzI2MzVVLCAweDRlOWMyNWI5VSwNCi0gICAgMHhlMWRmYTM3Y1UsIDB4MmU1Y2I4ZTRVLCAweGU0ZDViNzYyVSwgMHhlMGRkYTc3YVUsDQotICAgIDB4ZWJjYjhiNDBVLCAweDkwM2Q3YTQ3VSwgMHhhNDU1YWFmZlUsIDB4MWUzYzc4NDRVLA0KLSAgICAweDg1MTcyZTM5VSwgMHg2MGMwOWQ1ZFUsIDB4MDAwMDAwMDBVLCAweDI1NGE5NGRlVSwNCi0gICAgMHhmNGY1ZjcwMlUsIDB4ZjFmZmUzMWNVLCAweDk0MzU2YTVmVSwgMHgwYjE2MmMzYVUsDQotICAgIDB4ZTdkM2JiNjhVLCAweDc1ZWFjOTIzVSwgMHhlZmMzOWI1OFUsIDB4MzQ2OGQwYjhVLA0KLSAgICAweDMxNjJjNGE2VSwgMHhkNGI1NzdjMlUsIDB4ZDBiZDY3ZGFVLCAweDg2MTEyMjMzVSwNCi0gICAgMHg3ZWZjZTUxOVUsIDB4YWQ0NzhlYzlVLCAweGZkZTdkMzM0VSwgMHgyOTUyYTRmNlUsDQotICAgIDB4MzA2MGMwYTBVLCAweDNiNzZlYzlhVSwgMHg5ZjIzNDY2NVUsIDB4ZjhlZGM3MmFVLA0KLSAgICAweGM2OTEzZmFlVSwgMHgxMzI2NGM2YVUsIDB4MDYwYzE4MTRVLCAweDA1MGExNDFlVSwNCi0gICAgMHhjNTk3MzNhNFUsIDB4MTEyMjQ0NjZVLCAweDc3ZWVjMTJmVSwgMHg3Y2Y4ZWQxNVUsDQotICAgIDB4N2FmNGY1MDFVLCAweDc4ZjBmZDBkVSwgMHgzNjZjZDhiNFUsIDB4MWMzODcwNDhVLA0KLSAgICAweDM5NzJlNDk2VSwgMHg1OWIyNzljYlUsIDB4MTgzMDYwNTBVLCAweDU2YWM0NWU5VSwNCi0gICAgMHhiMzdiZjY4ZFUsIDB4YjA3ZGZhODdVLCAweDI0NDg5MGQ4VSwgMHgyMDQwODBjMFUsDQotICAgIDB4YjI3OWYyOGJVLCAweDkyMzk3MjRiVSwgMHhhMzViYjZlZFUsIDB4YzA5ZDI3YmFVLA0KLSAgICAweDQ0ODgwZDg1VSwgMHg2MmM0OTU1MVUsIDB4MTAyMDQwNjBVLCAweGI0NzVlYTlmVSwNCi0gICAgMHg4NDE1MmEzZlUsIDB4NDM4NjExOTdVLCAweDkzM2I3NjRkVSwgMHhjMjk5MmZiNlUsDQotICAgIDB4NGE5NDM1YTFVLCAweGJkNjdjZWE5VSwgMHg4ZjAzMDYwNVUsIDB4MmQ1YWI0ZWVVLA0KLSAgICAweGJjNjVjYWFmVSwgMHg5YzI1NGE2ZlUsIDB4NmFkNGI1NjFVLCAweDQwODAxZDlkVSwNCi0gICAgMHhjZjgzMWI5OFUsIDB4YTI1OWIyZWJVLCAweDgwMWQzYTI3VSwgMHg0ZjllMjFiZlUsDQotICAgIDB4MWYzZTdjNDJVLCAweGNhODkwZjg2VSwgMHhhYTQ5OTJkYlUsIDB4NDI4NDE1OTFVLA0KLX07DQotDQotc3RhdGljIGNvbnN0IHVsb25nMzIgVDFbMjU2XSA9IHsNCi0gICAgMHg2OWJhYmJkMlUsIDB4YTg1NGU1NGRVLCAweDVlMmZlMmJjVSwgMHhlODc0MjVjZFUsDQotICAgIDB4YTY1M2Y3NTFVLCAweGJiZDNkMDZiVSwgMHhiOWQyZDY2ZlUsIDB4OWE0ZGIzMjlVLA0KLSAgICAweGEwNTBmZDVkVSwgMHg0NWFjY2Y4YVUsIDB4MDc4ZDA5MGVVLCAweDYzYmZhNWM2VSwNCi0gICAgMHhlMDcwM2RkZFUsIDB4YTQ1MmYxNTVVLCAweDI5OWE3YjUyVSwgMHg5ODRjYjUyZFUsDQotICAgIDB4YzllYTQ2OGZVLCAweGI3ZDVjNDczVSwgMHgzMzk3NTU2NlUsIDB4YmZkMWRjNjNVLA0KLSAgICAweDY2MzNhYWNjVSwgMHhhMjUxZmI1OVUsIDB4YjY1YmM3NzFVLCAweDUxYTZmM2EyVSwNCi0gICAgMHhhMWRlZmU1ZlUsIDB4OTA0OGFkM2RVLCAweDRkYThkNzlhVSwgMHgyZjk5NzE1ZVUsDQotICAgIDB4YWJkYmUwNGJVLCAweDY0MzJhY2M4VSwgMHg3M2I3OTVlNlUsIDB4ZTVmYzMyZDdVLA0KLSAgICAweGRiZTM3MGFiVSwgMHgyMTllNjM0MlUsIDB4M2Y5MTQxN2VVLCAweDJiOWI3ZDU2VSwNCi0gICAgMHhkOWUyNzZhZlUsIDB4NmJiYmJkZDZVLCAweDgyNDE5YjE5VSwgMHhkYzZlNzlhNVUsDQotICAgIDB4NTdhNWY5YWVVLCAweDhiY2I4MDBiVSwgMHhkNjZiNjdiMVUsIDB4Mzc5NTU5NmVVLA0KLSAgICAweDVmYTFlMWJlVSwgMHhmYmYzMTBlYlUsIDB4N2ZiMTgxZmVVLCAweDA0MDIwYzA4VSwNCi0gICAgMHg4NWNjOTIxN1UsIDB4OTVjNGEyMzdVLCAweDNhMWQ0ZTc0VSwgMHgyODE0Nzg1MFUsDQotICAgIDB4OWJjM2IwMmJVLCAweGM2NjM1NzkxVSwgMHhhOWRhZTY0ZlUsIDB4YmE1ZGQzNjlVLA0KLSAgICAweGJlNWZkZjYxVSwgMHhhNWRjZjI1N1UsIDB4ZmE3ZDEzZTlVLCAweDg3Y2Q5NDEzVSwNCi0gICAgMHhmZTdmMWZlMVUsIDB4YjQ1YWMxNzVVLCAweGQ4NmM3NWFkVSwgMHhiODVjZDU2ZFUsDQotICAgIDB4ZjNmNzA4ZmJVLCAweDRjMjZkNDk4VSwgMHhlM2ZmMzhkYlUsIDB4YzdlZDU0OTNVLA0KLSAgICAweGNkZTg0YTg3VSwgMHgyNzlkNjk0ZVUsIDB4ZGU2ZjdmYTFVLCAweDAxOGUwMzAyVSwNCi0gICAgMHgzMjE5NTY2NFUsIDB4NWRhMGU3YmFVLCAweGZkZjAxYWU3VSwgMHgwZjg5MTExZVUsDQotICAgIDB4MWUwZjIyM2NVLCAweDBlMDcxMjFjVSwgMHg0M2FmYzU4NlUsIDB4ZWJmYjIwY2JVLA0KLSAgICAweDEwMDgzMDIwVSwgMHgyYTE1N2U1NFUsIDB4MWEwZDJlMzRVLCAweDA4MDQxODEwVSwNCi0gICAgMHgwMjAxMDYwNFUsIDB4Yzg2NDQ1OGRVLCAweGEzZGZmODViVSwgMHhlYzc2MjljNVUsDQotICAgIDB4ZjI3OTBiZjlVLCAweGE3ZGRmNDUzVSwgMHg3YTNkOGVmNFUsIDB4MmMxNjc0NThVLA0KLSAgICAweDdlM2Y4MmZjVSwgMHg2ZTM3YjJkY1UsIDB4ZGE2ZDczYTlVLCAweDcwMzg5MGUwVSwNCi0gICAgMHg2ZmI5YjFkZVUsIDB4ZTY3MzM3ZDFVLCAweGNmZTk0YzgzVSwgMHg2YTM1YmVkNFUsDQotICAgIDB4YWE1NWUzNDlVLCAweGUyNzEzYmQ5VSwgMHhmNjdiMDdmMVUsIDB4MDU4YzBmMGFVLA0KLSAgICAweGU0NzIzMWQ1VSwgMHgwZDg4MTcxYVUsIDB4ZjFmNjBlZmZVLCAweDU0MmFmY2E4VSwNCi0gICAgMHg3YzNlODRmOFUsIDB4YmM1ZWQ5NjVVLCAweDRlMjdkMjljVSwgMHg4YzQ2ODkwNVUsDQotICAgIDB4MTgwYzI4MzBVLCAweGNhNjU0Mzg5VSwgMHhkMDY4NmRiZFUsIDB4YzI2MTViOTlVLA0KLSAgICAweDA2MDMwYTBjVSwgMHg5ZmMxYmMyM1UsIDB4YWU1N2VmNDFVLCAweGIxZDZjZTdmVSwNCi0gICAgMHhhZmQ5ZWM0M1UsIDB4YjA1OGNkN2RVLCAweGFkZDhlYTQ3VSwgMHhjYzY2NDk4NVUsDQotICAgIDB4YjNkN2M4N2JVLCAweDc0M2E5Y2U4VSwgMHg4ZGM4OGEwN1UsIDB4NzgzYzg4ZjBVLA0KLSAgICAweGU5ZmEyNmNmVSwgMHgzMTk2NTM2MlUsIDB4NTNhN2Y1YTZVLCAweDJkOTg3NzVhVSwNCi0gICAgMHhjNWVjNTI5N1UsIDB4NmRiOGI3ZGFVLCAweDkzYzdhODNiVSwgMHg0MWFlYzM4MlUsDQotICAgIDB4ZDI2OTZiYjlVLCAweDk2NGJhNzMxVSwgMHg0YmFiZGQ5NlUsIDB4NGZhOWQxOWVVLA0KLSAgICAweGNlNjc0ZjgxVSwgMHgxNDBhM2MyOFUsIDB4OGU0NzhmMDFVLCAweGY5ZjIxNmVmVSwNCi0gICAgMHg3N2I1OTllZVUsIDB4NDQyMmNjODhVLCAweGQ3ZTU2NGIzVSwgMHhjMWVlNWU5ZlUsDQotICAgIDB4NjFiZWEzYzJVLCAweDU2MmJmYWFjVSwgMHgxZjgxMjEzZVUsIDB4MjQxMjZjNDhVLA0KLSAgICAweDFiODMyZDM2VSwgMHgzNjFiNWE2Y1UsIDB4MWMwZTI0MzhVLCAweDQ2MjNjYThjVSwNCi0gICAgMHhmN2Y1MDRmM1UsIDB4OGE0NTgzMDlVLCAweDQyMjFjNjg0VSwgMHg4MWNlOWUxZlUsDQotICAgIDB4OTI0OWFiMzlVLCAweDU4MmNlOGIwVSwgMHhlZmY5MmNjM1UsIDB4ZDFlNjZlYmZVLA0KLSAgICAweDcxYjY5M2UyVSwgMHg1MDI4ZjBhMFUsIDB4MmUxNzcyNWNVLCAweDE5ODIyYjMyVSwNCi0gICAgMHgzNDFhNWM2OFUsIDB4MGI4YjFkMTZVLCAweGUxZmUzZWRmVSwgMHgwOThhMWIxMlUsDQotICAgIDB4MTIwOTM2MjRVLCAweDhmYzk4YzAzVSwgMHgxMzg3MzUyNlUsIDB4OWM0ZWI5MjVVLA0KLSAgICAweGRmZTE3Y2EzVSwgMHg1YzJlZTRiOFUsIDB4ZDVlNDYyYjdVLCAweGRkZTA3YWE3VSwNCi0gICAgMHhjYmViNDA4YlUsIDB4M2Q5MDQ3N2FVLCAweDU1YTRmZmFhVSwgMHgzYzFlNDQ3OFUsDQotICAgIDB4MTc4NTM5MmVVLCAweGMwNjA1ZDlkVSwgMHgwMDAwMDAwMFUsIDB4NGEyNWRlOTRVLA0KLSAgICAweGY1ZjQwMmY3VSwgMHhmZmYxMWNlM1UsIDB4MzU5NDVmNmFVLCAweDE2MGIzYTJjVSwNCi0gICAgMHhkM2U3NjhiYlUsIDB4ZWE3NTIzYzlVLCAweGMzZWY1ODliVSwgMHg2ODM0YjhkMFUsDQotICAgIDB4NjIzMWE2YzRVLCAweGI1ZDRjMjc3VSwgMHhiZGQwZGE2N1UsIDB4MTE4NjMzMjJVLA0KLSAgICAweGZjN2UxOWU1VSwgMHg0N2FkYzk4ZVUsIDB4ZTdmZDM0ZDNVLCAweDUyMjlmNmE0VSwNCi0gICAgMHg2MDMwYTBjMFUsIDB4NzYzYjlhZWNVLCAweDIzOWY2NTQ2VSwgMHhlZGY4MmFjN1UsDQotICAgIDB4OTFjNmFlM2ZVLCAweDI2MTM2YTRjVSwgMHgwYzA2MTQxOFUsIDB4MGEwNTFlMTRVLA0KLSAgICAweDk3YzVhNDMzVSwgMHgyMjExNjY0NFUsIDB4ZWU3NzJmYzFVLCAweGY4N2MxNWVkVSwNCi0gICAgMHhmNDdhMDFmNVUsIDB4ZjA3ODBkZmRVLCAweDZjMzZiNGQ4VSwgMHgzODFjNDg3MFUsDQotICAgIDB4NzIzOTk2ZTRVLCAweGIyNTljYjc5VSwgMHgzMDE4NTA2MFUsIDB4YWM1NmU5NDVVLA0KLSAgICAweDdiYjM4ZGY2VSwgMHg3ZGIwODdmYVUsIDB4NDgyNGQ4OTBVLCAweDQwMjBjMDgwVSwNCi0gICAgMHg3OWIyOGJmMlUsIDB4Mzk5MjRiNzJVLCAweDViYTNlZGI2VSwgMHg5ZGMwYmEyN1UsDQotICAgIDB4ODg0NDg1MGRVLCAweGM0NjI1MTk1VSwgMHgyMDEwNjA0MFUsIDB4NzViNDlmZWFVLA0KLSAgICAweDE1ODQzZjJhVSwgMHg4NjQzOTcxMVUsIDB4M2I5MzRkNzZVLCAweDk5YzJiNjJmVSwNCi0gICAgMHg5NDRhYTEzNVUsIDB4NjdiZGE5Y2VVLCAweDAzOGYwNTA2VSwgMHg1YTJkZWViNFUsDQotICAgIDB4NjViY2FmY2FVLCAweDI1OWM2ZjRhVSwgMHhkNDZhNjFiNVUsIDB4ODA0MDlkMWRVLA0KLSAgICAweDgzY2Y5ODFiVSwgMHg1OWEyZWJiMlUsIDB4MWQ4MDI3M2FVLCAweDllNGZiZjIxVSwNCi0gICAgMHgzZTFmNDI3Y1UsIDB4ODljYTg2MGZVLCAweDQ5YWFkYjkyVSwgMHg4NDQyOTExNVUsDQotfTsNCi0NCi1zdGF0aWMgY29uc3QgdWxvbmczMiBUMlsyNTZdID0gew0KLSAgICAweGQyYmJiYTY5VSwgMHg0ZGU1NTRhOFUsIDB4YmNlMjJmNWVVLCAweGNkMjU3NGU4VSwNCi0gICAgMHg1MWY3NTNhNlUsIDB4NmJkMGQzYmJVLCAweDZmZDZkMmI5VSwgMHgyOWIzNGQ5YVUsDQotICAgIDB4NWRmZDUwYTBVLCAweDhhY2ZhYzQ1VSwgMHgwZTA5OGQwN1UsIDB4YzZhNWJmNjNVLA0KLSAgICAweGRkM2Q3MGUwVSwgMHg1NWYxNTJhNFUsIDB4NTI3YjlhMjlVLCAweDJkYjU0Yzk4VSwNCi0gICAgMHg4ZjQ2ZWFjOVUsIDB4NzNjNGQ1YjdVLCAweDY2NTU5NzMzVSwgMHg2M2RjZDFiZlUsDQotICAgIDB4Y2NhYTMzNjZVLCAweDU5ZmI1MWEyVSwgMHg3MWM3NWJiNlUsIDB4YTJmM2E2NTFVLA0KLSAgICAweDVmZmVkZWExVSwgMHgzZGFkNDg5MFUsIDB4OWFkN2E4NGRVLCAweDVlNzE5OTJmVSwNCi0gICAgMHg0YmUwZGJhYlUsIDB4YzhhYzMyNjRVLCAweGU2OTViNzczVSwgMHhkNzMyZmNlNVUsDQotICAgIDB4YWI3MGUzZGJVLCAweDQyNjM5ZTIxVSwgMHg3ZTQxOTEzZlUsIDB4NTY3ZDliMmJVLA0KLSAgICAweGFmNzZlMmQ5VSwgMHhkNmJkYmI2YlUsIDB4MTk5YjQxODJVLCAweGE1Nzk2ZWRjVSwNCi0gICAgMHhhZWY5YTU1N1UsIDB4MGI4MGNiOGJVLCAweGIxNjc2YmQ2VSwgMHg2ZTU5OTUzN1UsDQotICAgIDB4YmVlMWExNWZVLCAweGViMTBmM2ZiVSwgMHhmZTgxYjE3ZlUsIDB4MDgwYzAyMDRVLA0KLSAgICAweDE3OTJjYzg1VSwgMHgzN2EyYzQ5NVUsIDB4NzQ0ZTFkM2FVLCAweDUwNzgxNDI4VSwNCi0gICAgMHgyYmIwYzM5YlUsIDB4OTE1NzYzYzZVLCAweDRmZTZkYWE5VSwgMHg2OWQzNWRiYVUsDQotICAgIDB4NjFkZjVmYmVVLCAweDU3ZjJkY2E1VSwgMHhlOTEzN2RmYVUsIDB4MTM5NGNkODdVLA0KLSAgICAweGUxMWY3ZmZlVSwgMHg3NWMxNWFiNFUsIDB4YWQ3NTZjZDhVLCAweDZkZDU1Y2I4VSwNCi0gICAgMHhmYjA4ZjdmM1UsIDB4OThkNDI2NGNVLCAweGRiMzhmZmUzVSwgMHg5MzU0ZWRjN1UsDQotICAgIDB4ODc0YWU4Y2RVLCAweDRlNjk5ZDI3VSwgMHhhMTdmNmZkZVUsIDB4MDIwMzhlMDFVLA0KLSAgICAweDY0NTYxOTMyVSwgMHhiYWU3YTA1ZFUsIDB4ZTcxYWYwZmRVLCAweDFlMTE4OTBmVSwNCi0gICAgMHgzYzIyMGYxZVUsIDB4MWMxMjA3MGVVLCAweDg2YzVhZjQzVSwgMHhjYjIwZmJlYlUsDQotICAgIDB4MjAzMDA4MTBVLCAweDU0N2UxNTJhVSwgMHgzNDJlMGQxYVUsIDB4MTAxODA0MDhVLA0KLSAgICAweDA0MDYwMTAyVSwgMHg4ZDQ1NjRjOFUsIDB4NWJmOGRmYTNVLCAweGM1Mjk3NmVjVSwNCi0gICAgMHhmOTBiNzlmMlUsIDB4NTNmNGRkYTdVLCAweGY0OGUzZDdhVSwgMHg1ODc0MTYyY1UsDQotICAgIDB4ZmM4MjNmN2VVLCAweGRjYjIzNzZlVSwgMHhhOTczNmRkYVUsIDB4ZTA5MDM4NzBVLA0KLSAgICAweGRlYjFiOTZmVSwgMHhkMTM3NzNlNlUsIDB4ODM0Y2U5Y2ZVLCAweGQ0YmUzNTZhVSwNCi0gICAgMHg0OWUzNTVhYVUsIDB4ZDkzYjcxZTJVLCAweGYxMDc3YmY2VSwgMHgwYTBmOGMwNVUsDQotICAgIDB4ZDUzMTcyZTRVLCAweDFhMTc4ODBkVSwgMHhmZjBlZjZmMVUsIDB4YThmYzJhNTRVLA0KLSAgICAweGY4ODQzZTdjVSwgMHg2NWQ5NWViY1UsIDB4OWNkMjI3NGVVLCAweDA1ODk0NjhjVSwNCi0gICAgMHgzMDI4MGMxOFUsIDB4ODk0MzY1Y2FVLCAweGJkNmQ2OGQwVSwgMHg5OTViNjFjMlUsDQotICAgIDB4MGMwYTAzMDZVLCAweDIzYmNjMTlmVSwgMHg0MWVmNTdhZVUsIDB4N2ZjZWQ2YjFVLA0KLSAgICAweDQzZWNkOWFmVSwgMHg3ZGNkNThiMFUsIDB4NDdlYWQ4YWRVLCAweDg1NDk2NmNjVSwNCi0gICAgMHg3YmM4ZDdiM1UsIDB4ZTg5YzNhNzRVLCAweDA3OGFjODhkVSwgMHhmMDg4M2M3OFUsDQotICAgIDB4Y2YyNmZhZTlVLCAweDYyNTM5NjMxVSwgMHhhNmY1YTc1M1UsIDB4NWE3Nzk4MmRVLA0KLSAgICAweDk3NTJlY2M1VSwgMHhkYWI3Yjg2ZFUsIDB4M2JhOGM3OTNVLCAweDgyYzNhZTQxVSwNCi0gICAgMHhiOTZiNjlkMlUsIDB4MzFhNzRiOTZVLCAweDk2ZGRhYjRiVSwgMHg5ZWQxYTk0ZlUsDQotICAgIDB4ODE0ZjY3Y2VVLCAweDI4M2MwYTE0VSwgMHgwMThmNDc4ZVUsIDB4ZWYxNmYyZjlVLA0KLSAgICAweGVlOTliNTc3VSwgMHg4OGNjMjI0NFUsIDB4YjM2NGU1ZDdVLCAweDlmNWVlZWMxVSwNCi0gICAgMHhjMmEzYmU2MVUsIDB4YWNmYTJiNTZVLCAweDNlMjE4MTFmVSwgMHg0ODZjMTIyNFUsDQotICAgIDB4MzYyZDgzMWJVLCAweDZjNWExYjM2VSwgMHgzODI0MGUxY1UsIDB4OGNjYTIzNDZVLA0KLSAgICAweGYzMDRmNWY3VSwgMHgwOTgzNDU4YVUsIDB4ODRjNjIxNDJVLCAweDFmOWVjZTgxVSwNCi0gICAgMHgzOWFiNDk5MlUsIDB4YjBlODJjNThVLCAweGMzMmNmOWVmVSwgMHhiZjZlZTZkMVUsDQotICAgIDB4ZTI5M2I2NzFVLCAweGEwZjAyODUwVSwgMHg1YzcyMTcyZVUsIDB4MzIyYjgyMTlVLA0KLSAgICAweDY4NWMxYTM0VSwgMHgxNjFkOGIwYlUsIDB4ZGYzZWZlZTFVLCAweDEyMWI4YTA5VSwNCi0gICAgMHgyNDM2MDkxMlUsIDB4MDM4Y2M5OGZVLCAweDI2MzU4NzEzVSwgMHgyNWI5NGU5Y1UsDQotICAgIDB4YTM3Y2UxZGZVLCAweGI4ZTQyZTVjVSwgMHhiNzYyZTRkNVUsIDB4YTc3YWUwZGRVLA0KLSAgICAweDhiNDBlYmNiVSwgMHg3YTQ3OTAzZFUsIDB4YWFmZmE0NTVVLCAweDc4NDQxZTNjVSwNCi0gICAgMHgyZTM5ODUxN1UsIDB4OWQ1ZDYwYzBVLCAweDAwMDAwMDAwVSwgMHg5NGRlMjU0YVUsDQotICAgIDB4ZjcwMmY0ZjVVLCAweGUzMWNmMWZmVSwgMHg2YTVmOTQzNVUsIDB4MmMzYTBiMTZVLA0KLSAgICAweGJiNjhlN2QzVSwgMHhjOTIzNzVlYVUsIDB4OWI1OGVmYzNVLCAweGQwYjgzNDY4VSwNCi0gICAgMHhjNGE2MzE2MlUsIDB4NzdjMmQ0YjVVLCAweDY3ZGFkMGJkVSwgMHgyMjMzODYxMVUsDQotICAgIDB4ZTUxOTdlZmNVLCAweDhlYzlhZDQ3VSwgMHhkMzM0ZmRlN1UsIDB4YTRmNjI5NTJVLA0KLSAgICAweGMwYTAzMDYwVSwgMHhlYzlhM2I3NlUsIDB4NDY2NTlmMjNVLCAweGM3MmFmOGVkVSwNCi0gICAgMHgzZmFlYzY5MVUsIDB4NGM2YTEzMjZVLCAweDE4MTQwNjBjVSwgMHgxNDFlMDUwYVUsDQotICAgIDB4MzNhNGM1OTdVLCAweDQ0NjYxMTIyVSwgMHhjMTJmNzdlZVUsIDB4ZWQxNTdjZjhVLA0KLSAgICAweGY1MDE3YWY0VSwgMHhmZDBkNzhmMFUsIDB4ZDhiNDM2NmNVLCAweDcwNDgxYzM4VSwNCi0gICAgMHhlNDk2Mzk3MlUsIDB4NzljYjU5YjJVLCAweDYwNTAxODMwVSwgMHg0NWU5NTZhY1UsDQotICAgIDB4ZjY4ZGIzN2JVLCAweGZhODdiMDdkVSwgMHg5MGQ4MjQ0OFUsIDB4ODBjMDIwNDBVLA0KLSAgICAweGYyOGJiMjc5VSwgMHg3MjRiOTIzOVUsIDB4YjZlZGEzNWJVLCAweDI3YmFjMDlkVSwNCi0gICAgMHgwZDg1NDQ4OFUsIDB4OTU1MTYyYzRVLCAweDQwNjAxMDIwVSwgMHhlYTlmYjQ3NVUsDQotICAgIDB4MmEzZjg0MTVVLCAweDExOTc0Mzg2VSwgMHg3NjRkOTMzYlUsIDB4MmZiNmMyOTlVLA0KLSAgICAweDM1YTE0YTk0VSwgMHhjZWE5YmQ2N1UsIDB4MDYwNThmMDNVLCAweGI0ZWUyZDVhVSwNCi0gICAgMHhjYWFmYmM2NVUsIDB4NGE2ZjljMjVVLCAweGI1NjE2YWQ0VSwgMHgxZDlkNDA4MFUsDQotICAgIDB4MWI5OGNmODNVLCAweGIyZWJhMjU5VSwgMHgzYTI3ODAxZFUsIDB4MjFiZjRmOWVVLA0KLSAgICAweDdjNDIxZjNlVSwgMHgwZjg2Y2E4OVUsIDB4OTJkYmFhNDlVLCAweDE1OTE0Mjg0VSwNCi19Ow0KLQ0KLXN0YXRpYyBjb25zdCB1bG9uZzMyIFQzWzI1Nl0gPSB7DQotICAgIDB4YmJkMjY5YmFVLCAweGU1NGRhODU0VSwgMHhlMmJjNWUyZlUsIDB4MjVjZGU4NzRVLA0KLSAgICAweGY3NTFhNjUzVSwgMHhkMDZiYmJkM1UsIDB4ZDY2ZmI5ZDJVLCAweGIzMjk5YTRkVSwNCi0gICAgMHhmZDVkYTA1MFUsIDB4Y2Y4YTQ1YWNVLCAweDA5MGUwNzhkVSwgMHhhNWM2NjNiZlUsDQotICAgIDB4M2RkZGUwNzBVLCAweGYxNTVhNDUyVSwgMHg3YjUyMjk5YVUsIDB4YjUyZDk4NGNVLA0KLSAgICAweDQ2OGZjOWVhVSwgMHhjNDczYjdkNVUsIDB4NTU2NjMzOTdVLCAweGRjNjNiZmQxVSwNCi0gICAgMHhhYWNjNjYzM1UsIDB4ZmI1OWEyNTFVLCAweGM3NzFiNjViVSwgMHhmM2EyNTFhNlUsDQotICAgIDB4ZmU1ZmExZGVVLCAweGFkM2Q5MDQ4VSwgMHhkNzlhNGRhOFUsIDB4NzE1ZTJmOTlVLA0KLSAgICAweGUwNGJhYmRiVSwgMHhhY2M4NjQzMlUsIDB4OTVlNjczYjdVLCAweDMyZDdlNWZjVSwNCi0gICAgMHg3MGFiZGJlM1UsIDB4NjM0MjIxOWVVLCAweDQxN2UzZjkxVSwgMHg3ZDU2MmI5YlUsDQotICAgIDB4NzZhZmQ5ZTJVLCAweGJkZDY2YmJiVSwgMHg5YjE5ODI0MVUsIDB4NzlhNWRjNmVVLA0KLSAgICAweGY5YWU1N2E1VSwgMHg4MDBiOGJjYlUsIDB4NjdiMWQ2NmJVLCAweDU5NmUzNzk1VSwNCi0gICAgMHhlMWJlNWZhMVUsIDB4MTBlYmZiZjNVLCAweDgxZmU3ZmIxVSwgMHgwYzA4MDQwMlUsDQotICAgIDB4OTIxNzg1Y2NVLCAweGEyMzc5NWM0VSwgMHg0ZTc0M2ExZFUsIDB4Nzg1MDI4MTRVLA0KLSAgICAweGIwMmI5YmMzVSwgMHg1NzkxYzY2M1UsIDB4ZTY0ZmE5ZGFVLCAweGQzNjliYTVkVSwNCi0gICAgMHhkZjYxYmU1ZlUsIDB4ZjI1N2E1ZGNVLCAweDEzZTlmYTdkVSwgMHg5NDEzODdjZFUsDQotICAgIDB4MWZlMWZlN2ZVLCAweGMxNzViNDVhVSwgMHg3NWFkZDg2Y1UsIDB4ZDU2ZGI4NWNVLA0KLSAgICAweDA4ZmJmM2Y3VSwgMHhkNDk4NGMyNlUsIDB4MzhkYmUzZmZVLCAweDU0OTNjN2VkVSwNCi0gICAgMHg0YTg3Y2RlOFUsIDB4Njk0ZTI3OWRVLCAweDdmYTFkZTZmVSwgMHgwMzAyMDE4ZVUsDQotICAgIDB4NTY2NDMyMTlVLCAweGU3YmE1ZGEwVSwgMHgxYWU3ZmRmMFUsIDB4MTExZTBmODlVLA0KLSAgICAweDIyM2MxZTBmVSwgMHgxMjFjMGUwN1UsIDB4YzU4NjQzYWZVLCAweDIwY2JlYmZiVSwNCi0gICAgMHgzMDIwMTAwOFUsIDB4N2U1NDJhMTVVLCAweDJlMzQxYTBkVSwgMHgxODEwMDgwNFUsDQotICAgIDB4MDYwNDAyMDFVLCAweDQ1OGRjODY0VSwgMHhmODViYTNkZlUsIDB4MjljNWVjNzZVLA0KLSAgICAweDBiZjlmMjc5VSwgMHhmNDUzYTdkZFUsIDB4OGVmNDdhM2RVLCAweDc0NTgyYzE2VSwNCi0gICAgMHg4MmZjN2UzZlUsIDB4YjJkYzZlMzdVLCAweDczYTlkYTZkVSwgMHg5MGUwNzAzOFUsDQotICAgIDB4YjFkZTZmYjlVLCAweDM3ZDFlNjczVSwgMHg0YzgzY2ZlOVUsIDB4YmVkNDZhMzVVLA0KLSAgICAweGUzNDlhYTU1VSwgMHgzYmQ5ZTI3MVUsIDB4MDdmMWY2N2JVLCAweDBmMGEwNThjVSwNCi0gICAgMHgzMWQ1ZTQ3MlUsIDB4MTcxYTBkODhVLCAweDBlZmZmMWY2VSwgMHhmY2E4NTQyYVUsDQotICAgIDB4ODRmODdjM2VVLCAweGQ5NjViYzVlVSwgMHhkMjljNGUyN1UsIDB4ODkwNThjNDZVLA0KLSAgICAweDI4MzAxODBjVSwgMHg0Mzg5Y2E2NVUsIDB4NmRiZGQwNjhVLCAweDViOTljMjYxVSwNCi0gICAgMHgwYTBjMDYwM1UsIDB4YmMyMzlmYzFVLCAweGVmNDFhZTU3VSwgMHhjZTdmYjFkNlUsDQotICAgIDB4ZWM0M2FmZDlVLCAweGNkN2RiMDU4VSwgMHhlYTQ3YWRkOFUsIDB4NDk4NWNjNjZVLA0KLSAgICAweGM4N2JiM2Q3VSwgMHg5Y2U4NzQzYVUsIDB4OGEwNzhkYzhVLCAweDg4ZjA3ODNjVSwNCi0gICAgMHgyNmNmZTlmYVUsIDB4NTM2MjMxOTZVLCAweGY1YTY1M2E3VSwgMHg3NzVhMmQ5OFUsDQotICAgIDB4NTI5N2M1ZWNVLCAweGI3ZGE2ZGI4VSwgMHhhODNiOTNjN1UsIDB4YzM4MjQxYWVVLA0KLSAgICAweDZiYjlkMjY5VSwgMHhhNzMxOTY0YlUsIDB4ZGQ5NjRiYWJVLCAweGQxOWU0ZmE5VSwNCi0gICAgMHg0ZjgxY2U2N1UsIDB4M2MyODE0MGFVLCAweDhmMDE4ZTQ3VSwgMHgxNmVmZjlmMlUsDQotICAgIDB4OTllZTc3YjVVLCAweGNjODg0NDIyVSwgMHg2NGIzZDdlNVUsIDB4NWU5ZmMxZWVVLA0KLSAgICAweGEzYzI2MWJlVSwgMHhmYWFjNTYyYlUsIDB4MjEzZTFmODFVLCAweDZjNDgyNDEyVSwNCi0gICAgMHgyZDM2MWI4M1UsIDB4NWE2YzM2MWJVLCAweDI0MzgxYzBlVSwgMHhjYThjNDYyM1UsDQotICAgIDB4MDRmM2Y3ZjVVLCAweDgzMDk4YTQ1VSwgMHhjNjg0NDIyMVUsIDB4OWUxZjgxY2VVLA0KLSAgICAweGFiMzk5MjQ5VSwgMHhlOGIwNTgyY1UsIDB4MmNjM2VmZjlVLCAweDZlYmZkMWU2VSwNCi0gICAgMHg5M2UyNzFiNlUsIDB4ZjBhMDUwMjhVLCAweDcyNWMyZTE3VSwgMHgyYjMyMTk4MlUsDQotICAgIDB4NWM2ODM0MWFVLCAweDFkMTYwYjhiVSwgMHgzZWRmZTFmZVUsIDB4MWIxMjA5OGFVLA0KLSAgICAweDM2MjQxMjA5VSwgMHg4YzAzOGZjOVUsIDB4MzUyNjEzODdVLCAweGI5MjU5YzRlVSwNCi0gICAgMHg3Y2EzZGZlMVUsIDB4ZTRiODVjMmVVLCAweDYyYjdkNWU0VSwgMHg3YWE3ZGRlMFUsDQotICAgIDB4NDA4YmNiZWJVLCAweDQ3N2EzZDkwVSwgMHhmZmFhNTVhNFUsIDB4NDQ3ODNjMWVVLA0KLSAgICAweDM5MmUxNzg1VSwgMHg1ZDlkYzA2MFUsIDB4MDAwMDAwMDBVLCAweGRlOTQ0YTI1VSwNCi0gICAgMHgwMmY3ZjVmNFUsIDB4MWNlM2ZmZjFVLCAweDVmNmEzNTk0VSwgMHgzYTJjMTYwYlUsDQotICAgIDB4NjhiYmQzZTdVLCAweDIzYzllYTc1VSwgMHg1ODliYzNlZlUsIDB4YjhkMDY4MzRVLA0KLSAgICAweGE2YzQ2MjMxVSwgMHhjMjc3YjVkNFUsIDB4ZGE2N2JkZDBVLCAweDMzMjIxMTg2VSwNCi0gICAgMHgxOWU1ZmM3ZVUsIDB4Yzk4ZTQ3YWRVLCAweDM0ZDNlN2ZkVSwgMHhmNmE0NTIyOVUsDQotICAgIDB4YTBjMDYwMzBVLCAweDlhZWM3NjNiVSwgMHg2NTQ2MjM5ZlUsIDB4MmFjN2VkZjhVLA0KLSAgICAweGFlM2Y5MWM2VSwgMHg2YTRjMjYxM1UsIDB4MTQxODBjMDZVLCAweDFlMTQwYTA1VSwNCi0gICAgMHhhNDMzOTdjNVUsIDB4NjY0NDIyMTFVLCAweDJmYzFlZTc3VSwgMHgxNWVkZjg3Y1UsDQotICAgIDB4MDFmNWY0N2FVLCAweDBkZmRmMDc4VSwgMHhiNGQ4NmMzNlUsIDB4NDg3MDM4MWNVLA0KLSAgICAweDk2ZTQ3MjM5VSwgMHhjYjc5YjI1OVUsIDB4NTA2MDMwMThVLCAweGU5NDVhYzU2VSwNCi0gICAgMHg4ZGY2N2JiM1UsIDB4ODdmYTdkYjBVLCAweGQ4OTA0ODI0VSwgMHhjMDgwNDAyMFUsDQotICAgIDB4OGJmMjc5YjJVLCAweDRiNzIzOTkyVSwgMHhlZGI2NWJhM1UsIDB4YmEyNzlkYzBVLA0KLSAgICAweDg1MGQ4ODQ0VSwgMHg1MTk1YzQ2MlUsIDB4NjA0MDIwMTBVLCAweDlmZWE3NWI0VSwNCi0gICAgMHgzZjJhMTU4NFUsIDB4OTcxMTg2NDNVLCAweDRkNzYzYjkzVSwgMHhiNjJmOTljMlUsDQotICAgIDB4YTEzNTk0NGFVLCAweGE5Y2U2N2JkVSwgMHgwNTA2MDM4ZlUsIDB4ZWViNDVhMmRVLA0KLSAgICAweGFmY2E2NWJjVSwgMHg2ZjRhMjU5Y1UsIDB4NjFiNWQ0NmFVLCAweDlkMWQ4MDQwVSwNCi0gICAgMHg5ODFiODNjZlUsIDB4ZWJiMjU5YTJVLCAweDI3M2ExZDgwVSwgMHhiZjIxOWU0ZlUsDQotICAgIDB4NDI3YzNlMWZVLCAweDg2MGY4OWNhVSwgMHhkYjkyNDlhYVUsIDB4OTExNTg0NDJVLA0KLX07DQotDQotc3RhdGljIGNvbnN0IHVsb25nMzIgVDRbMjU2XSA9IHsNCi0gICAgMHhiYWJhYmFiYVUsIDB4NTQ1NDU0NTRVLCAweDJmMmYyZjJmVSwgMHg3NDc0NzQ3NFUsDQotICAgIDB4NTM1MzUzNTNVLCAweGQzZDNkM2QzVSwgMHhkMmQyZDJkMlUsIDB4NGQ0ZDRkNGRVLA0KLSAgICAweDUwNTA1MDUwVSwgMHhhY2FjYWNhY1UsIDB4OGQ4ZDhkOGRVLCAweGJmYmZiZmJmVSwNCi0gICAgMHg3MDcwNzA3MFUsIDB4NTI1MjUyNTJVLCAweDlhOWE5YTlhVSwgMHg0YzRjNGM0Y1UsDQotICAgIDB4ZWFlYWVhZWFVLCAweGQ1ZDVkNWQ1VSwgMHg5Nzk3OTc5N1UsIDB4ZDFkMWQxZDFVLA0KLSAgICAweDMzMzMzMzMzVSwgMHg1MTUxNTE1MVUsIDB4NWI1YjViNWJVLCAweGE2YTZhNmE2VSwNCi0gICAgMHhkZWRlZGVkZVUsIDB4NDg0ODQ4NDhVLCAweGE4YThhOGE4VSwgMHg5OTk5OTk5OVUsDQotICAgIDB4ZGJkYmRiZGJVLCAweDMyMzIzMjMyVSwgMHhiN2I3YjdiN1UsIDB4ZmNmY2ZjZmNVLA0KLSAgICAweGUzZTNlM2UzVSwgMHg5ZTllOWU5ZVUsIDB4OTE5MTkxOTFVLCAweDliOWI5YjliVSwNCi0gICAgMHhlMmUyZTJlMlUsIDB4YmJiYmJiYmJVLCAweDQxNDE0MTQxVSwgMHg2ZTZlNmU2ZVUsDQotICAgIDB4YTVhNWE1YTVVLCAweGNiY2JjYmNiVSwgMHg2YjZiNmI2YlUsIDB4OTU5NTk1OTVVLA0KLSAgICAweGExYTFhMWExVSwgMHhmM2YzZjNmM1UsIDB4YjFiMWIxYjFVLCAweDAyMDIwMjAyVSwNCi0gICAgMHhjY2NjY2NjY1UsIDB4YzRjNGM0YzRVLCAweDFkMWQxZDFkVSwgMHgxNDE0MTQxNFUsDQotICAgIDB4YzNjM2MzYzNVLCAweDYzNjM2MzYzVSwgMHhkYWRhZGFkYVUsIDB4NWQ1ZDVkNWRVLA0KLSAgICAweDVmNWY1ZjVmVSwgMHhkY2RjZGNkY1UsIDB4N2Q3ZDdkN2RVLCAweGNkY2RjZGNkVSwNCi0gICAgMHg3ZjdmN2Y3ZlUsIDB4NWE1YTVhNWFVLCAweDZjNmM2YzZjVSwgMHg1YzVjNWM1Y1UsDQotICAgIDB4ZjdmN2Y3ZjdVLCAweDI2MjYyNjI2VSwgMHhmZmZmZmZmZlUsIDB4ZWRlZGVkZWRVLA0KLSAgICAweGU4ZThlOGU4VSwgMHg5ZDlkOWQ5ZFUsIDB4NmY2ZjZmNmZVLCAweDhlOGU4ZThlVSwNCi0gICAgMHgxOTE5MTkxOVUsIDB4YTBhMGEwYTBVLCAweGYwZjBmMGYwVSwgMHg4OTg5ODk4OVUsDQotICAgIDB4MGYwZjBmMGZVLCAweDA3MDcwNzA3VSwgMHhhZmFmYWZhZlUsIDB4ZmJmYmZiZmJVLA0KLSAgICAweDA4MDgwODA4VSwgMHgxNTE1MTUxNVUsIDB4MGQwZDBkMGRVLCAweDA0MDQwNDA0VSwNCi0gICAgMHgwMTAxMDEwMVUsIDB4NjQ2NDY0NjRVLCAweGRmZGZkZmRmVSwgMHg3Njc2NzY3NlUsDQotICAgIDB4Nzk3OTc5NzlVLCAweGRkZGRkZGRkVSwgMHgzZDNkM2QzZFUsIDB4MTYxNjE2MTZVLA0KLSAgICAweDNmM2YzZjNmVSwgMHgzNzM3MzczN1UsIDB4NmQ2ZDZkNmRVLCAweDM4MzgzODM4VSwNCi0gICAgMHhiOWI5YjliOVUsIDB4NzM3MzczNzNVLCAweGU5ZTllOWU5VSwgMHgzNTM1MzUzNVUsDQotICAgIDB4NTU1NTU1NTVVLCAweDcxNzE3MTcxVSwgMHg3YjdiN2I3YlUsIDB4OGM4YzhjOGNVLA0KLSAgICAweDcyNzI3MjcyVSwgMHg4ODg4ODg4OFUsIDB4ZjZmNmY2ZjZVLCAweDJhMmEyYTJhVSwNCi0gICAgMHgzZTNlM2UzZVUsIDB4NWU1ZTVlNWVVLCAweDI3MjcyNzI3VSwgMHg0NjQ2NDY0NlUsDQotICAgIDB4MGMwYzBjMGNVLCAweDY1NjU2NTY1VSwgMHg2ODY4Njg2OFUsIDB4NjE2MTYxNjFVLA0KLSAgICAweDAzMDMwMzAzVSwgMHhjMWMxYzFjMVUsIDB4NTc1NzU3NTdVLCAweGQ2ZDZkNmQ2VSwNCi0gICAgMHhkOWQ5ZDlkOVUsIDB4NTg1ODU4NThVLCAweGQ4ZDhkOGQ4VSwgMHg2NjY2NjY2NlUsDQotICAgIDB4ZDdkN2Q3ZDdVLCAweDNhM2EzYTNhVSwgMHhjOGM4YzhjOFUsIDB4M2MzYzNjM2NVLA0KLSAgICAweGZhZmFmYWZhVSwgMHg5Njk2OTY5NlUsIDB4YTdhN2E3YTdVLCAweDk4OTg5ODk4VSwNCi0gICAgMHhlY2VjZWNlY1UsIDB4YjhiOGI4YjhVLCAweGM3YzdjN2M3VSwgMHhhZWFlYWVhZVUsDQotICAgIDB4Njk2OTY5NjlVLCAweDRiNGI0YjRiVSwgMHhhYmFiYWJhYlUsIDB4YTlhOWE5YTlVLA0KLSAgICAweDY3Njc2NzY3VSwgMHgwYTBhMGEwYVUsIDB4NDc0NzQ3NDdVLCAweGYyZjJmMmYyVSwNCi0gICAgMHhiNWI1YjViNVUsIDB4MjIyMjIyMjJVLCAweGU1ZTVlNWU1VSwgMHhlZWVlZWVlZVUsDQotICAgIDB4YmViZWJlYmVVLCAweDJiMmIyYjJiVSwgMHg4MTgxODE4MVUsIDB4MTIxMjEyMTJVLA0KLSAgICAweDgzODM4MzgzVSwgMHgxYjFiMWIxYlUsIDB4MGUwZTBlMGVVLCAweDIzMjMyMzIzVSwNCi0gICAgMHhmNWY1ZjVmNVUsIDB4NDU0NTQ1NDVVLCAweDIxMjEyMTIxVSwgMHhjZWNlY2VjZVUsDQotICAgIDB4NDk0OTQ5NDlVLCAweDJjMmMyYzJjVSwgMHhmOWY5ZjlmOVUsIDB4ZTZlNmU2ZTZVLA0KLSAgICAweGI2YjZiNmI2VSwgMHgyODI4MjgyOFUsIDB4MTcxNzE3MTdVLCAweDgyODI4MjgyVSwNCi0gICAgMHgxYTFhMWExYVUsIDB4OGI4YjhiOGJVLCAweGZlZmVmZWZlVSwgMHg4YThhOGE4YVUsDQotICAgIDB4MDkwOTA5MDlVLCAweGM5YzljOWM5VSwgMHg4Nzg3ODc4N1UsIDB4NGU0ZTRlNGVVLA0KLSAgICAweGUxZTFlMWUxVSwgMHgyZTJlMmUyZVUsIDB4ZTRlNGU0ZTRVLCAweGUwZTBlMGUwVSwNCi0gICAgMHhlYmViZWJlYlUsIDB4OTA5MDkwOTBVLCAweGE0YTRhNGE0VSwgMHgxZTFlMWUxZVUsDQotICAgIDB4ODU4NTg1ODVVLCAweDYwNjA2MDYwVSwgMHgwMDAwMDAwMFUsIDB4MjUyNTI1MjVVLA0KLSAgICAweGY0ZjRmNGY0VSwgMHhmMWYxZjFmMVUsIDB4OTQ5NDk0OTRVLCAweDBiMGIwYjBiVSwNCi0gICAgMHhlN2U3ZTdlN1UsIDB4NzU3NTc1NzVVLCAweGVmZWZlZmVmVSwgMHgzNDM0MzQzNFUsDQotICAgIDB4MzEzMTMxMzFVLCAweGQ0ZDRkNGQ0VSwgMHhkMGQwZDBkMFUsIDB4ODY4Njg2ODZVLA0KLSAgICAweDdlN2U3ZTdlVSwgMHhhZGFkYWRhZFUsIDB4ZmRmZGZkZmRVLCAweDI5MjkyOTI5VSwNCi0gICAgMHgzMDMwMzAzMFUsIDB4M2IzYjNiM2JVLCAweDlmOWY5ZjlmVSwgMHhmOGY4ZjhmOFUsDQotICAgIDB4YzZjNmM2YzZVLCAweDEzMTMxMzEzVSwgMHgwNjA2MDYwNlUsIDB4MDUwNTA1MDVVLA0KLSAgICAweGM1YzVjNWM1VSwgMHgxMTExMTExMVUsIDB4Nzc3Nzc3NzdVLCAweDdjN2M3YzdjVSwNCi0gICAgMHg3YTdhN2E3YVUsIDB4Nzg3ODc4NzhVLCAweDM2MzYzNjM2VSwgMHgxYzFjMWMxY1UsDQotICAgIDB4MzkzOTM5MzlVLCAweDU5NTk1OTU5VSwgMHgxODE4MTgxOFUsIDB4NTY1NjU2NTZVLA0KLSAgICAweGIzYjNiM2IzVSwgMHhiMGIwYjBiMFUsIDB4MjQyNDI0MjRVLCAweDIwMjAyMDIwVSwNCi0gICAgMHhiMmIyYjJiMlUsIDB4OTI5MjkyOTJVLCAweGEzYTNhM2EzVSwgMHhjMGMwYzBjMFUsDQotICAgIDB4NDQ0NDQ0NDRVLCAweDYyNjI2MjYyVSwgMHgxMDEwMTAxMFUsIDB4YjRiNGI0YjRVLA0KLSAgICAweDg0ODQ4NDg0VSwgMHg0MzQzNDM0M1UsIDB4OTM5MzkzOTNVLCAweGMyYzJjMmMyVSwNCi0gICAgMHg0YTRhNGE0YVUsIDB4YmRiZGJkYmRVLCAweDhmOGY4ZjhmVSwgMHgyZDJkMmQyZFUsDQotICAgIDB4YmNiY2JjYmNVLCAweDljOWM5YzljVSwgMHg2YTZhNmE2YVUsIDB4NDA0MDQwNDBVLA0KLSAgICAweGNmY2ZjZmNmVSwgMHhhMmEyYTJhMlUsIDB4ODA4MDgwODBVLCAweDRmNGY0ZjRmVSwNCi0gICAgMHgxZjFmMWYxZlUsIDB4Y2FjYWNhY2FVLCAweGFhYWFhYWFhVSwgMHg0MjQyNDI0MlUsDQotfTsNCi0NCi1zdGF0aWMgY29uc3QgdWxvbmczMiBUNVsyNTZdID0gew0KLSAgICAweDAwMDAwMDAwVSwgMHgwMTAyMDYwOFUsIDB4MDIwNDBjMTBVLCAweDAzMDYwYTE4VSwNCi0gICAgMHgwNDA4MTgyMFUsIDB4MDUwYTFlMjhVLCAweDA2MGMxNDMwVSwgMHgwNzBlMTIzOFUsDQotICAgIDB4MDgxMDMwNDBVLCAweDA5MTIzNjQ4VSwgMHgwYTE0M2M1MFUsIDB4MGIxNjNhNThVLA0KLSAgICAweDBjMTgyODYwVSwgMHgwZDFhMmU2OFUsIDB4MGUxYzI0NzBVLCAweDBmMWUyMjc4VSwNCi0gICAgMHgxMDIwNjA4MFUsIDB4MTEyMjY2ODhVLCAweDEyMjQ2YzkwVSwgMHgxMzI2NmE5OFUsDQotICAgIDB4MTQyODc4YTBVLCAweDE1MmE3ZWE4VSwgMHgxNjJjNzRiMFUsIDB4MTcyZTcyYjhVLA0KLSAgICAweDE4MzA1MGMwVSwgMHgxOTMyNTZjOFUsIDB4MWEzNDVjZDBVLCAweDFiMzY1YWQ4VSwNCi0gICAgMHgxYzM4NDhlMFUsIDB4MWQzYTRlZThVLCAweDFlM2M0NGYwVSwgMHgxZjNlNDJmOFUsDQotICAgIDB4MjA0MGMwMWRVLCAweDIxNDJjNjE1VSwgMHgyMjQ0Y2MwZFUsIDB4MjM0NmNhMDVVLA0KLSAgICAweDI0NDhkODNkVSwgMHgyNTRhZGUzNVUsIDB4MjY0Y2Q0MmRVLCAweDI3NGVkMjI1VSwNCi0gICAgMHgyODUwZjA1ZFUsIDB4Mjk1MmY2NTVVLCAweDJhNTRmYzRkVSwgMHgyYjU2ZmE0NVUsDQotICAgIDB4MmM1OGU4N2RVLCAweDJkNWFlZTc1VSwgMHgyZTVjZTQ2ZFUsIDB4MmY1ZWUyNjVVLA0KLSAgICAweDMwNjBhMDlkVSwgMHgzMTYyYTY5NVUsIDB4MzI2NGFjOGRVLCAweDMzNjZhYTg1VSwNCi0gICAgMHgzNDY4YjhiZFUsIDB4MzU2YWJlYjVVLCAweDM2NmNiNGFkVSwgMHgzNzZlYjJhNVUsDQotICAgIDB4Mzg3MDkwZGRVLCAweDM5NzI5NmQ1VSwgMHgzYTc0OWNjZFUsIDB4M2I3NjlhYzVVLA0KLSAgICAweDNjNzg4OGZkVSwgMHgzZDdhOGVmNVUsIDB4M2U3Yzg0ZWRVLCAweDNmN2U4MmU1VSwNCi0gICAgMHg0MDgwOWQzYVUsIDB4NDE4MjliMzJVLCAweDQyODQ5MTJhVSwgMHg0Mzg2OTcyMlUsDQotICAgIDB4NDQ4ODg1MWFVLCAweDQ1OGE4MzEyVSwgMHg0NjhjODkwYVUsIDB4NDc4ZThmMDJVLA0KLSAgICAweDQ4OTBhZDdhVSwgMHg0OTkyYWI3MlUsIDB4NGE5NGExNmFVLCAweDRiOTZhNzYyVSwNCi0gICAgMHg0Yzk4YjU1YVUsIDB4NGQ5YWIzNTJVLCAweDRlOWNiOTRhVSwgMHg0ZjllYmY0MlUsDQotICAgIDB4NTBhMGZkYmFVLCAweDUxYTJmYmIyVSwgMHg1MmE0ZjFhYVUsIDB4NTNhNmY3YTJVLA0KLSAgICAweDU0YThlNTlhVSwgMHg1NWFhZTM5MlUsIDB4NTZhY2U5OGFVLCAweDU3YWVlZjgyVSwNCi0gICAgMHg1OGIwY2RmYVUsIDB4NTliMmNiZjJVLCAweDVhYjRjMWVhVSwgMHg1YmI2YzdlMlUsDQotICAgIDB4NWNiOGQ1ZGFVLCAweDVkYmFkM2QyVSwgMHg1ZWJjZDljYVUsIDB4NWZiZWRmYzJVLA0KLSAgICAweDYwYzA1ZDI3VSwgMHg2MWMyNWIyZlUsIDB4NjJjNDUxMzdVLCAweDYzYzY1NzNmVSwNCi0gICAgMHg2NGM4NDUwN1UsIDB4NjVjYTQzMGZVLCAweDY2Y2M0OTE3VSwgMHg2N2NlNGYxZlUsDQotICAgIDB4NjhkMDZkNjdVLCAweDY5ZDI2YjZmVSwgMHg2YWQ0NjE3N1UsIDB4NmJkNjY3N2ZVLA0KLSAgICAweDZjZDg3NTQ3VSwgMHg2ZGRhNzM0ZlUsIDB4NmVkYzc5NTdVLCAweDZmZGU3ZjVmVSwNCi0gICAgMHg3MGUwM2RhN1UsIDB4NzFlMjNiYWZVLCAweDcyZTQzMWI3VSwgMHg3M2U2MzdiZlUsDQotICAgIDB4NzRlODI1ODdVLCAweDc1ZWEyMzhmVSwgMHg3NmVjMjk5N1UsIDB4NzdlZTJmOWZVLA0KLSAgICAweDc4ZjAwZGU3VSwgMHg3OWYyMGJlZlUsIDB4N2FmNDAxZjdVLCAweDdiZjYwN2ZmVSwNCi0gICAgMHg3Y2Y4MTVjN1UsIDB4N2RmYTEzY2ZVLCAweDdlZmMxOWQ3VSwgMHg3ZmZlMWZkZlUsDQotICAgIDB4ODAxZDI3NzRVLCAweDgxMWYyMTdjVSwgMHg4MjE5MmI2NFUsIDB4ODMxYjJkNmNVLA0KLSAgICAweDg0MTUzZjU0VSwgMHg4NTE3Mzk1Y1UsIDB4ODYxMTMzNDRVLCAweDg3MTMzNTRjVSwNCi0gICAgMHg4ODBkMTczNFUsIDB4ODkwZjExM2NVLCAweDhhMDkxYjI0VSwgMHg4YjBiMWQyY1UsDQotICAgIDB4OGMwNTBmMTRVLCAweDhkMDcwOTFjVSwgMHg4ZTAxMDMwNFUsIDB4OGYwMzA1MGNVLA0KLSAgICAweDkwM2Q0N2Y0VSwgMHg5MTNmNDFmY1UsIDB4OTIzOTRiZTRVLCAweDkzM2I0ZGVjVSwNCi0gICAgMHg5NDM1NWZkNFUsIDB4OTUzNzU5ZGNVLCAweDk2MzE1M2M0VSwgMHg5NzMzNTVjY1UsDQotICAgIDB4OTgyZDc3YjRVLCAweDk5MmY3MWJjVSwgMHg5YTI5N2JhNFUsIDB4OWIyYjdkYWNVLA0KLSAgICAweDljMjU2Zjk0VSwgMHg5ZDI3Njk5Y1UsIDB4OWUyMTYzODRVLCAweDlmMjM2NThjVSwNCi0gICAgMHhhMDVkZTc2OVUsIDB4YTE1ZmUxNjFVLCAweGEyNTllYjc5VSwgMHhhMzViZWQ3MVUsDQotICAgIDB4YTQ1NWZmNDlVLCAweGE1NTdmOTQxVSwgMHhhNjUxZjM1OVUsIDB4YTc1M2Y1NTFVLA0KLSAgICAweGE4NGRkNzI5VSwgMHhhOTRmZDEyMVUsIDB4YWE0OWRiMzlVLCAweGFiNGJkZDMxVSwNCi0gICAgMHhhYzQ1Y2YwOVUsIDB4YWQ0N2M5MDFVLCAweGFlNDFjMzE5VSwgMHhhZjQzYzUxMVUsDQotICAgIDB4YjA3ZDg3ZTlVLCAweGIxN2Y4MWUxVSwgMHhiMjc5OGJmOVUsIDB4YjM3YjhkZjFVLA0KLSAgICAweGI0NzU5ZmM5VSwgMHhiNTc3OTljMVUsIDB4YjY3MTkzZDlVLCAweGI3NzM5NWQxVSwNCi0gICAgMHhiODZkYjdhOVUsIDB4Yjk2ZmIxYTFVLCAweGJhNjliYmI5VSwgMHhiYjZiYmRiMVUsDQotICAgIDB4YmM2NWFmODlVLCAweGJkNjdhOTgxVSwgMHhiZTYxYTM5OVUsIDB4YmY2M2E1OTFVLA0KLSAgICAweGMwOWRiYTRlVSwgMHhjMTlmYmM0NlUsIDB4YzI5OWI2NWVVLCAweGMzOWJiMDU2VSwNCi0gICAgMHhjNDk1YTI2ZVUsIDB4YzU5N2E0NjZVLCAweGM2OTFhZTdlVSwgMHhjNzkzYTg3NlUsDQotICAgIDB4Yzg4ZDhhMGVVLCAweGM5OGY4YzA2VSwgMHhjYTg5ODYxZVUsIDB4Y2I4YjgwMTZVLA0KLSAgICAweGNjODU5MjJlVSwgMHhjZDg3OTQyNlUsIDB4Y2U4MTllM2VVLCAweGNmODM5ODM2VSwNCi0gICAgMHhkMGJkZGFjZVUsIDB4ZDFiZmRjYzZVLCAweGQyYjlkNmRlVSwgMHhkM2JiZDBkNlUsDQotICAgIDB4ZDRiNWMyZWVVLCAweGQ1YjdjNGU2VSwgMHhkNmIxY2VmZVUsIDB4ZDdiM2M4ZjZVLA0KLSAgICAweGQ4YWRlYThlVSwgMHhkOWFmZWM4NlUsIDB4ZGFhOWU2OWVVLCAweGRiYWJlMDk2VSwNCi0gICAgMHhkY2E1ZjJhZVUsIDB4ZGRhN2Y0YTZVLCAweGRlYTFmZWJlVSwgMHhkZmEzZjhiNlUsDQotICAgIDB4ZTBkZDdhNTNVLCAweGUxZGY3YzViVSwgMHhlMmQ5NzY0M1UsIDB4ZTNkYjcwNGJVLA0KLSAgICAweGU0ZDU2MjczVSwgMHhlNWQ3NjQ3YlUsIDB4ZTZkMTZlNjNVLCAweGU3ZDM2ODZiVSwNCi0gICAgMHhlOGNkNGExM1UsIDB4ZTljZjRjMWJVLCAweGVhYzk0NjAzVSwgMHhlYmNiNDAwYlUsDQotICAgIDB4ZWNjNTUyMzNVLCAweGVkYzc1NDNiVSwgMHhlZWMxNWUyM1UsIDB4ZWZjMzU4MmJVLA0KLSAgICAweGYwZmQxYWQzVSwgMHhmMWZmMWNkYlUsIDB4ZjJmOTE2YzNVLCAweGYzZmIxMGNiVSwNCi0gICAgMHhmNGY1MDJmM1UsIDB4ZjVmNzA0ZmJVLCAweGY2ZjEwZWUzVSwgMHhmN2YzMDhlYlUsDQotICAgIDB4ZjhlZDJhOTNVLCAweGY5ZWYyYzliVSwgMHhmYWU5MjY4M1UsIDB4ZmJlYjIwOGJVLA0KLSAgICAweGZjZTUzMmIzVSwgMHhmZGU3MzRiYlUsIDB4ZmVlMTNlYTNVLCAweGZmZTMzOGFiVSwNCi19Ow0KLQ0KLS8qKg0KLSAqIFRoZSByb3VuZCBjb25zdGFudHMuDQotICovDQotc3RhdGljIGNvbnN0IHVsb25nMzIgcmNbXSA9IHsNCi0gICAgMHhiYTU0MmY3NFUsIDB4NTNkM2QyNGRVLCAweDUwYWM4ZGJmVSwgMHg3MDUyOWE0Y1UsDQotICAgIDB4ZWFkNTk3ZDFVLCAweDMzNTE1YmE2VSwgMHhkZTQ4YTg5OVUsIDB4ZGIzMmI3ZmNVLA0KLSAgICAweGUzOWU5MTliVSwgMHhlMmJiNDE2ZVUsIDB4YTVjYjZiOTVVLCAweGExZjNiMTAyVSwNCi0gICAgMHhjY2M0MWQxNFUsIDB4YzM2M2RhNWRVLCAweDVmZGM3ZGNkVSwgMHg3ZjVhNmM1Y1UsDQotICAgIDB4ZjcyNmZmZWRVLCAweGU4OWQ2ZjhlVSwgMHgxOWEwZjA4OVUsDQotfTsNCi0NCi0NCi0NCi0jZWxzZQ0KLQ0KLQ0KLXN0YXRpYyBjb25zdCB1bG9uZzMyIFQwWzI1Nl0gPSB7DQotICAgIDB4YTc1M2E2ZjVVLCAweGQzYmI2YmQwVSwgMHhlNmQxYmY2ZVUsIDB4NzFlMmQ5M2JVLA0KLSAgICAweGQwYmQ2N2RhVSwgMHhhYzQ1OGFjZlUsIDB4NGQ5YTI5YjNVLCAweDc5ZjJmOTBiVSwNCi0gICAgMHgzYTc0ZTg5Y1UsIDB4Yzk4ZjAzOGNVLCAweDkxM2Y3ZTQxVSwgMHhmY2U1ZDczMlUsDQotICAgIDB4MWUzYzc4NDRVLCAweDQ3OGUwMThmVSwgMHg1NGE4NGRlNVUsIDB4YmQ2N2NlYTlVLA0KLSAgICAweDhjMDUwYTBmVSwgMHhhNTU3YWVmOVUsIDB4N2FmNGY1MDFVLCAweGZiZWJjYjIwVSwNCi0gICAgMHg2M2M2OTE1N1UsIDB4Yjg2ZGRhYjdVLCAweGRkYTc1M2Y0VSwgMHhkNGI1NzdjMlUsDQotICAgIDB4ZTVkN2IzNjRVLCAweGIzN2JmNjhkVSwgMHhjNTk3MzNhNFUsIDB4YmU2MWMyYTNVLA0KLSAgICAweGE5NGY5ZWQxVSwgMHg4ODBkMWExN1UsIDB4MGMxODMwMjhVLCAweGEyNTliMmViVSwNCi0gICAgMHgzOTcyZTQ5NlUsIDB4ZGZhMzViZjhVLCAweDI5NTJhNGY2VSwgMHhkYWE5NGZlNlUsDQotICAgIDB4MmI1NmFjZmFVLCAweGE4NGQ5YWQ3VSwgMHhjYjhiMGI4MFUsIDB4NGM5ODJkYjVVLA0KLSAgICAweDRiOTYzMWE3VSwgMHgyMjQ0ODhjY1UsIDB4YWE0OTkyZGJVLCAweDI0NDg5MGQ4VSwNCi0gICAgMHg0MTgyMTk5YlUsIDB4NzBlMGRkM2RVLCAweGE2NTFhMmYzVSwgMHhmOWVmYzMyY1UsDQotICAgIDB4NWFiNDc1YzFVLCAweGUyZDlhZjc2VSwgMHhiMDdkZmE4N1UsIDB4MzY2Y2Q4YjRVLA0KLSAgICAweDdkZmFlOTEzVSwgMHhlNGQ1Yjc2MlUsIDB4MzM2NmNjYWFVLCAweGZmZTNkYjM4VSwNCi0gICAgMHg2MGMwOWQ1ZFUsIDB4MjA0MDgwYzBVLCAweDA4MTAyMDMwVSwgMHg4YjBiMTYxZFUsDQotICAgIDB4NWViYzY1ZDlVLCAweGFiNGI5NmRkVSwgMHg3ZmZlZTExZlUsIDB4NzhmMGZkMGRVLA0KLSAgICAweDdjZjhlZDE1VSwgMHgyYzU4YjBlOFUsIDB4NTdhZTQxZWZVLCAweGQyYjk2ZmQ2VSwNCi0gICAgMHhkY2E1NTdmMlUsIDB4NmRkYWE5NzNVLCAweDdlZmNlNTE5VSwgMHgwZDFhMzQyZVUsDQotICAgIDB4NTNhNjUxZjdVLCAweDk0MzU2YTVmVSwgMHhjMzliMmJiMFUsIDB4Mjg1MGEwZjBVLA0KLSAgICAweDI3NGU5Y2QyVSwgMHgwNjBjMTgxNFUsIDB4NWZiZTYxZGZVLCAweGFkNDc4ZWM5VSwNCi0gICAgMHg2N2NlODE0ZlUsIDB4NWNiODZkZDVVLCAweDU1YWE0OWUzVSwgMHg0ODkwM2RhZFUsDQotICAgIDB4MGUxYzM4MjRVLCAweDUyYTQ1NWYxVSwgMHhlYWM5OGY0NlUsIDB4NDI4NDE1OTFVLA0KLSAgICAweDViYjY3MWM3VSwgMHg1ZGJhNjlkM1UsIDB4MzA2MGMwYTBVLCAweDU4YjA3ZGNkVSwNCi0gICAgMHg1MWEyNTlmYlUsIDB4NTliMjc5Y2JVLCAweDNjNzhmMDg4VSwgMHg0ZTljMjViOVUsDQotICAgIDB4Mzg3MGUwOTBVLCAweDhhMDkxMjFiVSwgMHg3MmU0ZDUzMVUsIDB4MTQyODUwNzhVLA0KLSAgICAweGU3ZDNiYjY4VSwgMHhjNjkxM2ZhZVUsIDB4ZGVhMTVmZmVVLCAweDUwYTA1ZGZkVSwNCi0gICAgMHg4ZTAxMDIwM1UsIDB4OTIzOTcyNGJVLCAweGQxYmY2M2RjVSwgMHg3N2VlYzEyZlUsDQotICAgIDB4OTMzYjc2NGRVLCAweDQ1OGEwOTgzVSwgMHg5YTI5NTI3YlUsIDB4Y2U4MTFmOWVVLA0KLSAgICAweDJkNWFiNGVlVSwgMHgwMzA2MGMwYVUsIDB4NjJjNDk1NTFVLCAweGI2NzFlMjkzVSwNCi0gICAgMHhiOTZmZGViMVUsIDB4YmY2M2M2YTVVLCAweDk2MzE2MjUzVSwgMHg2YmQ2YjE2N1UsDQotICAgIDB4M2Y3ZWZjODJVLCAweDA3MGUxYzEyVSwgMHgxMjI0NDg2Y1UsIDB4YWU0MTgyYzNVLA0KLSAgICAweDQwODAxZDlkVSwgMHgzNDY4ZDBiOFUsIDB4NDY4YzA1ODlVLCAweDNlN2NmODg0VSwNCi0gICAgMHhkYmFiNGJlMFUsIDB4Y2Y4MzFiOThVLCAweGVjYzU5NzUyVSwgMHhjYzg1MTc5MlUsDQotICAgIDB4YzE5ZjIzYmNVLCAweGExNWZiZWUxVSwgMHhjMDlkMjdiYVUsIDB4ZDZiMTdmY2VVLA0KLSAgICAweDFkM2E3NDRlVSwgMHhmNGY1ZjcwMlUsIDB4NjFjMjk5NWJVLCAweDNiNzZlYzlhVSwNCi0gICAgMHgxMDIwNDA2MFUsIDB4ZDhhZDQ3ZWFVLCAweDY4ZDBiZDZkVSwgMHhhMDVkYmFlN1UsDQotICAgIDB4YjE3ZmZlODFVLCAweDBhMTQyODNjVSwgMHg2OWQyYjk2YlUsIDB4NmNkOGFkNzVVLA0KLSAgICAweDQ5OTIzOWFiVSwgMHhmYWU5Y2YyNlUsIDB4NzZlY2M1MjlVLCAweGM0OTUzN2EyVSwNCi0gICAgMHg5ZTIxNDI2M1UsIDB4OWIyYjU2N2RVLCAweDZlZGNhNTc5VSwgMHg5OTJmNWU3MVUsDQotICAgIDB4YzI5OTJmYjZVLCAweGI3NzNlNjk1VSwgMHg5ODJkNWE3N1UsIDB4YmM2NWNhYWZVLA0KLSAgICAweDhmMDMwNjA1VSwgMHg4NTE3MmUzOVUsIDB4MWYzZTdjNDJVLCAweGI0NzVlYTlmVSwNCi0gICAgMHhmOGVkYzcyYVUsIDB4MTEyMjQ0NjZVLCAweDJlNWNiOGU0VSwgMHgwMDAwMDAwMFUsDQotICAgIDB4MjU0YTk0ZGVVLCAweDFjMzg3MDQ4VSwgMHgyYTU0YThmY1UsIDB4M2Q3YWY0OGVVLA0KLSAgICAweDA1MGExNDFlVSwgMHg0ZjllMjFiZlUsIDB4N2JmNmYxMDdVLCAweGIyNzlmMjhiVSwNCi0gICAgMHgzMjY0YzhhY1UsIDB4OTAzZDdhNDdVLCAweGFmNDM4NmM1VSwgMHgxOTMyNjQ1NlUsDQotICAgIDB4YTM1YmI2ZWRVLCAweGY3ZjNmYjA4VSwgMHg3M2U2ZDEzN1UsIDB4OWQyNzRlNjlVLA0KLSAgICAweDE1MmE1NDdlVSwgMHg3NGU4Y2QyNVUsIDB4ZWVjMTlmNWVVLCAweGNhODkwZjg2VSwNCi0gICAgMHg5ZjIzNDY2NVUsIDB4MGYxZTNjMjJVLCAweDFiMzY2YzVhVSwgMHg3NWVhYzkyM1UsDQotICAgIDB4ODYxMTIyMzNVLCAweDg0MTUyYTNmVSwgMHg5YzI1NGE2ZlUsIDB4NGE5NDM1YTFVLA0KLSAgICAweDk3MzM2NjU1VSwgMHgxYTM0Njg1Y1UsIDB4NjVjYTg5NDNVLCAweGY2ZjFmZjBlVSwNCi0gICAgMHhlZGM3OTM1NFUsIDB4MDkxMjI0MzZVLCAweGJiNmJkNmJkVSwgMHgyNjRjOThkNFUsDQotICAgIDB4ODMxYjM2MmRVLCAweGViY2I4YjQwVSwgMHg2ZmRlYTE3ZlUsIDB4ODExZjNlMjFVLA0KLSAgICAweDA0MDgxMDE4VSwgMHg2YWQ0YjU2MVUsIDB4NDM4NjExOTdVLCAweDAxMDIwNDA2VSwNCi0gICAgMHgxNzJlNWM3MlUsIDB4ZTFkZmEzN2NVLCAweDg3MTMyNjM1VSwgMHhmNWY3ZjMwNFUsDQotICAgIDB4OGQwNzBlMDlVLCAweGUzZGJhYjcwVSwgMHgyMzQ2OGNjYVUsIDB4ODAxZDNhMjdVLA0KLSAgICAweDQ0ODgwZDg1VSwgMHgxNjJjNTg3NFUsIDB4NjZjYzg1NDlVLCAweDIxNDI4NGM2VSwNCi0gICAgMHhmZWUxZGYzZVUsIDB4ZDViNzczYzRVLCAweDMxNjJjNGE2VSwgMHhkOWFmNDNlY1UsDQotICAgIDB4MzU2YWQ0YmVVLCAweDE4MzA2MDUwVSwgMHgwMjA0MDgwY1UsIDB4NjRjODhkNDVVLA0KLSAgICAweGYyZjllZjE2VSwgMHhmMWZmZTMxY1UsIDB4NTZhYzQ1ZTlVLCAweGNkODcxMzk0VSwNCi0gICAgMHg4MjE5MzIyYlUsIDB4Yzg4ZDA3OGFVLCAweGJhNjlkMmJiVSwgMHhmMGZkZTcxYVUsDQotICAgIDB4ZWZjMzliNThVLCAweGU5Y2Y4MzRjVSwgMHhlOGNkODc0YVUsIDB4ZmRlN2QzMzRVLA0KLSAgICAweDg5MGYxZTExVSwgMHhkN2IzN2JjOFUsIDB4Yzc5MzNiYThVLCAweGI1NzdlZTk5VSwNCi0gICAgMHhhNDU1YWFmZlUsIDB4MmY1ZWJjZTJVLCAweDk1Mzc2ZTU5VSwgMHgxMzI2NGM2YVUsDQotICAgIDB4MGIxNjJjM2FVLCAweGYzZmJlYjEwVSwgMHhlMGRkYTc3YVUsIDB4Mzc2ZWRjYjJVLA0KLX07DQotDQotc3RhdGljIGNvbnN0IHVsb25nMzIgVDFbMjU2XSA9IHsNCi0gICAgMHg1M2E3ZjVhNlUsIDB4YmJkM2QwNmJVLCAweGQxZTY2ZWJmVSwgMHhlMjcxM2JkOVUsDQotICAgIDB4YmRkMGRhNjdVLCAweDQ1YWNjZjhhVSwgMHg5YTRkYjMyOVUsIDB4ZjI3OTBiZjlVLA0KLSAgICAweDc0M2E5Y2U4VSwgMHg4ZmM5OGMwM1UsIDB4M2Y5MTQxN2VVLCAweGU1ZmMzMmQ3VSwNCi0gICAgMHgzYzFlNDQ3OFUsIDB4OGU0NzhmMDFVLCAweGE4NTRlNTRkVSwgMHg2N2JkYTljZVUsDQotICAgIDB4MDU4YzBmMGFVLCAweDU3YTVmOWFlVSwgMHhmNDdhMDFmNVUsIDB4ZWJmYjIwY2JVLA0KLSAgICAweGM2NjM1NzkxVSwgMHg2ZGI4YjdkYVUsIDB4YTdkZGY0NTNVLCAweGI1ZDRjMjc3VSwNCi0gICAgMHhkN2U1NjRiM1UsIDB4N2JiMzhkZjZVLCAweDk3YzVhNDMzVSwgMHg2MWJlYTNjMlUsDQotICAgIDB4NGZhOWQxOWVVLCAweDBkODgxNzFhVSwgMHgxODBjMjgzMFUsIDB4NTlhMmViYjJVLA0KLSAgICAweDcyMzk5NmU0VSwgMHhhM2RmZjg1YlUsIDB4NTIyOWY2YTRVLCAweGE5ZGFlNjRmVSwNCi0gICAgMHg1NjJiZmFhY1UsIDB4NGRhOGQ3OWFVLCAweDhiY2I4MDBiVSwgMHg5ODRjYjUyZFUsDQotICAgIDB4OTY0YmE3MzFVLCAweDQ0MjJjYzg4VSwgMHg0OWFhZGI5MlUsIDB4NDgyNGQ4OTBVLA0KLSAgICAweDgyNDE5YjE5VSwgMHhlMDcwM2RkZFUsIDB4NTFhNmYzYTJVLCAweGVmZjkyY2MzVSwNCi0gICAgMHhiNDVhYzE3NVUsIDB4ZDllMjc2YWZVLCAweDdkYjA4N2ZhVSwgMHg2YzM2YjRkOFUsDQotICAgIDB4ZmE3ZDEzZTlVLCAweGQ1ZTQ2MmI3VSwgMHg2NjMzYWFjY1UsIDB4ZTNmZjM4ZGJVLA0KLSAgICAweGMwNjA1ZDlkVSwgMHg0MDIwYzA4MFUsIDB4MTAwODMwMjBVLCAweDBiOGIxZDE2VSwNCi0gICAgMHhiYzVlZDk2NVUsIDB4NGJhYmRkOTZVLCAweGZlN2YxZmUxVSwgMHhmMDc4MGRmZFUsDQotICAgIDB4Zjg3YzE1ZWRVLCAweDU4MmNlOGIwVSwgMHhhZTU3ZWY0MVUsIDB4YjlkMmQ2NmZVLA0KLSAgICAweGE1ZGNmMjU3VSwgMHhkYTZkNzNhOVUsIDB4ZmM3ZTE5ZTVVLCAweDFhMGQyZTM0VSwNCi0gICAgMHhhNjUzZjc1MVUsIDB4MzU5NDVmNmFVLCAweDliYzNiMDJiVSwgMHg1MDI4ZjBhMFUsDQotICAgIDB4NGUyN2QyOWNVLCAweDBjMDYxNDE4VSwgMHhiZTVmZGY2MVUsIDB4NDdhZGM5OGVVLA0KLSAgICAweGNlNjc0ZjgxVSwgMHhiODVjZDU2ZFUsIDB4YWE1NWUzNDlVLCAweDkwNDhhZDNkVSwNCi0gICAgMHgxYzBlMjQzOFUsIDB4YTQ1MmYxNTVVLCAweGM5ZWE0NjhmVSwgMHg4NDQyOTExNVUsDQotICAgIDB4YjY1YmM3NzFVLCAweGJhNWRkMzY5VSwgMHg2MDMwYTBjMFUsIDB4YjA1OGNkN2RVLA0KLSAgICAweGEyNTFmYjU5VSwgMHhiMjU5Y2I3OVUsIDB4NzgzYzg4ZjBVLCAweDljNGViOTI1VSwNCi0gICAgMHg3MDM4OTBlMFUsIDB4MDk4YTFiMTJVLCAweGU0NzIzMWQ1VSwgMHgyODE0Nzg1MFUsDQotICAgIDB4ZDNlNzY4YmJVLCAweDkxYzZhZTNmVSwgMHhhMWRlZmU1ZlUsIDB4YTA1MGZkNWRVLA0KLSAgICAweDAxOGUwMzAyVSwgMHgzOTkyNGI3MlUsIDB4YmZkMWRjNjNVLCAweGVlNzcyZmMxVSwNCi0gICAgMHgzYjkzNGQ3NlUsIDB4OGE0NTgzMDlVLCAweDI5OWE3YjUyVSwgMHg4MWNlOWUxZlUsDQotICAgIDB4NWEyZGVlYjRVLCAweDA2MDMwYTBjVSwgMHhjNDYyNTE5NVUsIDB4NzFiNjkzZTJVLA0KLSAgICAweDZmYjliMWRlVSwgMHg2M2JmYTVjNlUsIDB4MzE5NjUzNjJVLCAweGQ2NmI2N2IxVSwNCi0gICAgMHg3ZTNmODJmY1UsIDB4MGUwNzEyMWNVLCAweDI0MTI2YzQ4VSwgMHg0MWFlYzM4MlUsDQotICAgIDB4ODA0MDlkMWRVLCAweDY4MzRiOGQwVSwgMHg4YzQ2ODkwNVUsIDB4N2MzZTg0ZjhVLA0KLSAgICAweGFiZGJlMDRiVSwgMHg4M2NmOTgxYlUsIDB4YzVlYzUyOTdVLCAweDg1Y2M5MjE3VSwNCi0gICAgMHg5ZmMxYmMyM1UsIDB4NWZhMWUxYmVVLCAweDlkYzBiYTI3VSwgMHhiMWQ2Y2U3ZlUsDQotICAgIDB4M2ExZDRlNzRVLCAweGY1ZjQwMmY3VSwgMHhjMjYxNWI5OVUsIDB4NzYzYjlhZWNVLA0KLSAgICAweDIwMTA2MDQwVSwgMHhhZGQ4ZWE0N1UsIDB4ZDA2ODZkYmRVLCAweDVkYTBlN2JhVSwNCi0gICAgMHg3ZmIxODFmZVUsIDB4MTQwYTNjMjhVLCAweGQyNjk2YmI5VSwgMHhkODZjNzVhZFUsDQotICAgIDB4OTI0OWFiMzlVLCAweGU5ZmEyNmNmVSwgMHhlYzc2MjljNVUsIDB4OTVjNGEyMzdVLA0KLSAgICAweDIxOWU2MzQyVSwgMHgyYjliN2Q1NlUsIDB4ZGM2ZTc5YTVVLCAweDJmOTk3MTVlVSwNCi0gICAgMHg5OWMyYjYyZlUsIDB4NzNiNzk1ZTZVLCAweDJkOTg3NzVhVSwgMHg2NWJjYWZjYVUsDQotICAgIDB4MDM4ZjA1MDZVLCAweDE3ODUzOTJlVSwgMHgzZTFmNDI3Y1UsIDB4NzViNDlmZWFVLA0KLSAgICAweGVkZjgyYWM3VSwgMHgyMjExNjY0NFUsIDB4NWMyZWU0YjhVLCAweDAwMDAwMDAwVSwNCi0gICAgMHg0YTI1ZGU5NFUsIDB4MzgxYzQ4NzBVLCAweDU0MmFmY2E4VSwgMHg3YTNkOGVmNFUsDQotICAgIDB4MGEwNTFlMTRVLCAweDllNGZiZjIxVSwgMHhmNjdiMDdmMVUsIDB4NzliMjhiZjJVLA0KLSAgICAweDY0MzJhY2M4VSwgMHgzZDkwNDc3YVUsIDB4NDNhZmM1ODZVLCAweDMyMTk1NjY0VSwNCi0gICAgMHg1YmEzZWRiNlUsIDB4ZjNmNzA4ZmJVLCAweGU2NzMzN2QxVSwgMHgyNzlkNjk0ZVUsDQotICAgIDB4MmExNTdlNTRVLCAweGU4NzQyNWNkVSwgMHhjMWVlNWU5ZlUsIDB4ODljYTg2MGZVLA0KLSAgICAweDIzOWY2NTQ2VSwgMHgxZTBmMjIzY1UsIDB4MzYxYjVhNmNVLCAweGVhNzUyM2M5VSwNCi0gICAgMHgxMTg2MzMyMlUsIDB4MTU4NDNmMmFVLCAweDI1OWM2ZjRhVSwgMHg5NDRhYTEzNVUsDQotICAgIDB4MzM5NzU1NjZVLCAweDM0MWE1YzY4VSwgMHhjYTY1NDM4OVUsIDB4ZjFmNjBlZmZVLA0KLSAgICAweGM3ZWQ1NDkzVSwgMHgxMjA5MzYyNFUsIDB4NmJiYmJkZDZVLCAweDRjMjZkNDk4VSwNCi0gICAgMHgxYjgzMmQzNlUsIDB4Y2JlYjQwOGJVLCAweGRlNmY3ZmExVSwgMHgxZjgxMjEzZVUsDQotICAgIDB4MDgwNDE4MTBVLCAweGQ0NmE2MWI1VSwgMHg4NjQzOTcxMVUsIDB4MDIwMTA2MDRVLA0KLSAgICAweDJlMTc3MjVjVSwgMHhkZmUxN2NhM1UsIDB4MTM4NzM1MjZVLCAweGY3ZjUwNGYzVSwNCi0gICAgMHgwNzhkMDkwZVUsIDB4ZGJlMzcwYWJVLCAweDQ2MjNjYThjVSwgMHgxZDgwMjczYVUsDQotICAgIDB4ODg0NDg1MGRVLCAweDJjMTY3NDU4VSwgMHhjYzY2NDk4NVUsIDB4NDIyMWM2ODRVLA0KLSAgICAweGUxZmUzZWRmVSwgMHhiN2Q1YzQ3M1UsIDB4NjIzMWE2YzRVLCAweGFmZDllYzQzVSwNCi0gICAgMHg2YTM1YmVkNFUsIDB4MzAxODUwNjBVLCAweDA0MDIwYzA4VSwgMHhjODY0NDU4ZFUsDQotICAgIDB4ZjlmMjE2ZWZVLCAweGZmZjExY2UzVSwgMHhhYzU2ZTk0NVUsIDB4ODdjZDk0MTNVLA0KLSAgICAweDE5ODIyYjMyVSwgMHg4ZGM4OGEwN1UsIDB4NjliYWJiZDJVLCAweGZkZjAxYWU3VSwNCi0gICAgMHhjM2VmNTg5YlUsIDB4Y2ZlOTRjODNVLCAweGNkZTg0YTg3VSwgMHhlN2ZkMzRkM1UsDQotICAgIDB4MGY4OTExMWVVLCAweGIzZDdjODdiVSwgMHg5M2M3YTgzYlUsIDB4NzdiNTk5ZWVVLA0KLSAgICAweDU1YTRmZmFhVSwgMHg1ZTJmZTJiY1UsIDB4Mzc5NTU5NmVVLCAweDI2MTM2YTRjVSwNCi0gICAgMHgxNjBiM2EyY1UsIDB4ZmJmMzEwZWJVLCAweGRkZTA3YWE3VSwgMHg2ZTM3YjJkY1UsDQotfTsNCi0NCi1zdGF0aWMgY29uc3QgdWxvbmczMiBUMlsyNTZdID0gew0KLSAgICAweGE2ZjVhNzUzVSwgMHg2YmQwZDNiYlUsIDB4YmY2ZWU2ZDFVLCAweGQ5M2I3MWUyVSwNCi0gICAgMHg2N2RhZDBiZFUsIDB4OGFjZmFjNDVVLCAweDI5YjM0ZDlhVSwgMHhmOTBiNzlmMlUsDQotICAgIDB4ZTg5YzNhNzRVLCAweDAzOGNjOThmVSwgMHg3ZTQxOTEzZlUsIDB4ZDczMmZjZTVVLA0KLSAgICAweDc4NDQxZTNjVSwgMHgwMThmNDc4ZVUsIDB4NGRlNTU0YThVLCAweGNlYTliZDY3VSwNCi0gICAgMHgwYTBmOGMwNVUsIDB4YWVmOWE1NTdVLCAweGY1MDE3YWY0VSwgMHhjYjIwZmJlYlUsDQotICAgIDB4OTE1NzYzYzZVLCAweGRhYjdiODZkVSwgMHg1M2Y0ZGRhN1UsIDB4NzdjMmQ0YjVVLA0KLSAgICAweGIzNjRlNWQ3VSwgMHhmNjhkYjM3YlUsIDB4MzNhNGM1OTdVLCAweGMyYTNiZTYxVSwNCi0gICAgMHg5ZWQxYTk0ZlUsIDB4MWExNzg4MGRVLCAweDMwMjgwYzE4VSwgMHhiMmViYTI1OVUsDQotICAgIDB4ZTQ5NjM5NzJVLCAweDViZjhkZmEzVSwgMHhhNGY2Mjk1MlUsIDB4NGZlNmRhYTlVLA0KLSAgICAweGFjZmEyYjU2VSwgMHg5YWQ3YTg0ZFUsIDB4MGI4MGNiOGJVLCAweDJkYjU0Yzk4VSwNCi0gICAgMHgzMWE3NGI5NlUsIDB4ODhjYzIyNDRVLCAweDkyZGJhYTQ5VSwgMHg5MGQ4MjQ0OFUsDQotICAgIDB4MTk5YjQxODJVLCAweGRkM2Q3MGUwVSwgMHhhMmYzYTY1MVUsIDB4YzMyY2Y5ZWZVLA0KLSAgICAweDc1YzE1YWI0VSwgMHhhZjc2ZTJkOVUsIDB4ZmE4N2IwN2RVLCAweGQ4YjQzNjZjVSwNCi0gICAgMHhlOTEzN2RmYVUsIDB4Yjc2MmU0ZDVVLCAweGNjYWEzMzY2VSwgMHhkYjM4ZmZlM1UsDQotICAgIDB4OWQ1ZDYwYzBVLCAweDgwYzAyMDQwVSwgMHgyMDMwMDgxMFUsIDB4MTYxZDhiMGJVLA0KLSAgICAweDY1ZDk1ZWJjVSwgMHg5NmRkYWI0YlUsIDB4ZTExZjdmZmVVLCAweGZkMGQ3OGYwVSwNCi0gICAgMHhlZDE1N2NmOFUsIDB4YjBlODJjNThVLCAweDQxZWY1N2FlVSwgMHg2ZmQ2ZDJiOVUsDQotICAgIDB4NTdmMmRjYTVVLCAweGE5NzM2ZGRhVSwgMHhlNTE5N2VmY1UsIDB4MzQyZTBkMWFVLA0KLSAgICAweDUxZjc1M2E2VSwgMHg2YTVmOTQzNVUsIDB4MmJiMGMzOWJVLCAweGEwZjAyODUwVSwNCi0gICAgMHg5Y2QyMjc0ZVUsIDB4MTgxNDA2MGNVLCAweDYxZGY1ZmJlVSwgMHg4ZWM5YWQ0N1UsDQotICAgIDB4ODE0ZjY3Y2VVLCAweDZkZDU1Y2I4VSwgMHg0OWUzNTVhYVUsIDB4M2RhZDQ4OTBVLA0KLSAgICAweDM4MjQwZTFjVSwgMHg1NWYxNTJhNFUsIDB4OGY0NmVhYzlVLCAweDE1OTE0Mjg0VSwNCi0gICAgMHg3MWM3NWJiNlUsIDB4NjlkMzVkYmFVLCAweGMwYTAzMDYwVSwgMHg3ZGNkNThiMFUsDQotICAgIDB4NTlmYjUxYTJVLCAweDc5Y2I1OWIyVSwgMHhmMDg4M2M3OFUsIDB4MjViOTRlOWNVLA0KLSAgICAweGUwOTAzODcwVSwgMHgxMjFiOGEwOVUsIDB4ZDUzMTcyZTRVLCAweDUwNzgxNDI4VSwNCi0gICAgMHhiYjY4ZTdkM1UsIDB4M2ZhZWM2OTFVLCAweDVmZmVkZWExVSwgMHg1ZGZkNTBhMFUsDQotICAgIDB4MDIwMzhlMDFVLCAweDcyNGI5MjM5VSwgMHg2M2RjZDFiZlUsIDB4YzEyZjc3ZWVVLA0KLSAgICAweDc2NGQ5MzNiVSwgMHgwOTgzNDU4YVUsIDB4NTI3YjlhMjlVLCAweDFmOWVjZTgxVSwNCi0gICAgMHhiNGVlMmQ1YVUsIDB4MGMwYTAzMDZVLCAweDk1NTE2MmM0VSwgMHhlMjkzYjY3MVUsDQotICAgIDB4ZGViMWI5NmZVLCAweGM2YTViZjYzVSwgMHg2MjUzOTYzMVUsIDB4YjE2NzZiZDZVLA0KLSAgICAweGZjODIzZjdlVSwgMHgxYzEyMDcwZVUsIDB4NDg2YzEyMjRVLCAweDgyYzNhZTQxVSwNCi0gICAgMHgxZDlkNDA4MFUsIDB4ZDBiODM0NjhVLCAweDA1ODk0NjhjVSwgMHhmODg0M2U3Y1UsDQotICAgIDB4NGJlMGRiYWJVLCAweDFiOThjZjgzVSwgMHg5NzUyZWNjNVUsIDB4MTc5MmNjODVVLA0KLSAgICAweDIzYmNjMTlmVSwgMHhiZWUxYTE1ZlUsIDB4MjdiYWMwOWRVLCAweDdmY2VkNmIxVSwNCi0gICAgMHg3NDRlMWQzYVUsIDB4ZjcwMmY0ZjVVLCAweDk5NWI2MWMyVSwgMHhlYzlhM2I3NlUsDQotICAgIDB4NDA2MDEwMjBVLCAweDQ3ZWFkOGFkVSwgMHhiZDZkNjhkMFUsIDB4YmFlN2EwNWRVLA0KLSAgICAweGZlODFiMTdmVSwgMHgyODNjMGExNFUsIDB4Yjk2YjY5ZDJVLCAweGFkNzU2Y2Q4VSwNCi0gICAgMHgzOWFiNDk5MlUsIDB4Y2YyNmZhZTlVLCAweGM1Mjk3NmVjVSwgMHgzN2EyYzQ5NVUsDQotICAgIDB4NDI2MzllMjFVLCAweDU2N2Q5YjJiVSwgMHhhNTc5NmVkY1UsIDB4NWU3MTk5MmZVLA0KLSAgICAweDJmYjZjMjk5VSwgMHhlNjk1Yjc3M1UsIDB4NWE3Nzk4MmRVLCAweGNhYWZiYzY1VSwNCi0gICAgMHgwNjA1OGYwM1UsIDB4MmUzOTg1MTdVLCAweDdjNDIxZjNlVSwgMHhlYTlmYjQ3NVUsDQotICAgIDB4YzcyYWY4ZWRVLCAweDQ0NjYxMTIyVSwgMHhiOGU0MmU1Y1UsIDB4MDAwMDAwMDBVLA0KLSAgICAweDk0ZGUyNTRhVSwgMHg3MDQ4MWMzOFUsIDB4YThmYzJhNTRVLCAweGY0OGUzZDdhVSwNCi0gICAgMHgxNDFlMDUwYVUsIDB4MjFiZjRmOWVVLCAweGYxMDc3YmY2VSwgMHhmMjhiYjI3OVUsDQotICAgIDB4YzhhYzMyNjRVLCAweDdhNDc5MDNkVSwgMHg4NmM1YWY0M1UsIDB4NjQ1NjE5MzJVLA0KLSAgICAweGI2ZWRhMzViVSwgMHhmYjA4ZjdmM1UsIDB4ZDEzNzczZTZVLCAweDRlNjk5ZDI3VSwNCi0gICAgMHg1NDdlMTUyYVUsIDB4Y2QyNTc0ZThVLCAweDlmNWVlZWMxVSwgMHgwZjg2Y2E4OVUsDQotICAgIDB4NDY2NTlmMjNVLCAweDNjMjIwZjFlVSwgMHg2YzVhMWIzNlUsIDB4YzkyMzc1ZWFVLA0KLSAgICAweDIyMzM4NjExVSwgMHgyYTNmODQxNVUsIDB4NGE2ZjljMjVVLCAweDM1YTE0YTk0VSwNCi0gICAgMHg2NjU1OTczM1UsIDB4Njg1YzFhMzRVLCAweDg5NDM2NWNhVSwgMHhmZjBlZjZmMVUsDQotICAgIDB4OTM1NGVkYzdVLCAweDI0MzYwOTEyVSwgMHhkNmJkYmI2YlUsIDB4OThkNDI2NGNVLA0KLSAgICAweDM2MmQ4MzFiVSwgMHg4YjQwZWJjYlUsIDB4YTE3ZjZmZGVVLCAweDNlMjE4MTFmVSwNCi0gICAgMHgxMDE4MDQwOFUsIDB4YjU2MTZhZDRVLCAweDExOTc0Mzg2VSwgMHgwNDA2MDEwMlUsDQotICAgIDB4NWM3MjE3MmVVLCAweGEzN2NlMWRmVSwgMHgyNjM1ODcxM1UsIDB4ZjMwNGY1ZjdVLA0KLSAgICAweDBlMDk4ZDA3VSwgMHhhYjcwZTNkYlUsIDB4OGNjYTIzNDZVLCAweDNhMjc4MDFkVSwNCi0gICAgMHgwZDg1NDQ4OFUsIDB4NTg3NDE2MmNVLCAweDg1NDk2NmNjVSwgMHg4NGM2MjE0MlUsDQotICAgIDB4ZGYzZWZlZTFVLCAweDczYzRkNWI3VSwgMHhjNGE2MzE2MlUsIDB4NDNlY2Q5YWZVLA0KLSAgICAweGQ0YmUzNTZhVSwgMHg2MDUwMTgzMFUsIDB4MDgwYzAyMDRVLCAweDhkNDU2NGM4VSwNCi0gICAgMHhlZjE2ZjJmOVUsIDB4ZTMxY2YxZmZVLCAweDQ1ZTk1NmFjVSwgMHgxMzk0Y2Q4N1UsDQotICAgIDB4MzIyYjgyMTlVLCAweDA3OGFjODhkVSwgMHhkMmJiYmE2OVUsIDB4ZTcxYWYwZmRVLA0KLSAgICAweDliNThlZmMzVSwgMHg4MzRjZTljZlUsIDB4ODc0YWU4Y2RVLCAweGQzMzRmZGU3VSwNCi0gICAgMHgxZTExODkwZlUsIDB4N2JjOGQ3YjNVLCAweDNiYThjNzkzVSwgMHhlZTk5YjU3N1UsDQotICAgIDB4YWFmZmE0NTVVLCAweGJjZTIyZjVlVSwgMHg2ZTU5OTUzN1UsIDB4NGM2YTEzMjZVLA0KLSAgICAweDJjM2EwYjE2VSwgMHhlYjEwZjNmYlUsIDB4YTc3YWUwZGRVLCAweGRjYjIzNzZlVSwNCi19Ow0KLQ0KLXN0YXRpYyBjb25zdCB1bG9uZzMyIFQzWzI1Nl0gPSB7DQotICAgIDB4ZjVhNjUzYTdVLCAweGQwNmJiYmQzVSwgMHg2ZWJmZDFlNlUsIDB4M2JkOWUyNzFVLA0KLSAgICAweGRhNjdiZGQwVSwgMHhjZjhhNDVhY1UsIDB4YjMyOTlhNGRVLCAweDBiZjlmMjc5VSwNCi0gICAgMHg5Y2U4NzQzYVUsIDB4OGMwMzhmYzlVLCAweDQxN2UzZjkxVSwgMHgzMmQ3ZTVmY1UsDQotICAgIDB4NDQ3ODNjMWVVLCAweDhmMDE4ZTQ3VSwgMHhlNTRkYTg1NFUsIDB4YTljZTY3YmRVLA0KLSAgICAweDBmMGEwNThjVSwgMHhmOWFlNTdhNVUsIDB4MDFmNWY0N2FVLCAweDIwY2JlYmZiVSwNCi0gICAgMHg1NzkxYzY2M1UsIDB4YjdkYTZkYjhVLCAweGY0NTNhN2RkVSwgMHhjMjc3YjVkNFUsDQotICAgIDB4NjRiM2Q3ZTVVLCAweDhkZjY3YmIzVSwgMHhhNDMzOTdjNVUsIDB4YTNjMjYxYmVVLA0KLSAgICAweGQxOWU0ZmE5VSwgMHgxNzFhMGQ4OFUsIDB4MjgzMDE4MGNVLCAweGViYjI1OWEyVSwNCi0gICAgMHg5NmU0NzIzOVUsIDB4Zjg1YmEzZGZVLCAweGY2YTQ1MjI5VSwgMHhlNjRmYTlkYVUsDQotICAgIDB4ZmFhYzU2MmJVLCAweGQ3OWE0ZGE4VSwgMHg4MDBiOGJjYlUsIDB4YjUyZDk4NGNVLA0KLSAgICAweGE3MzE5NjRiVSwgMHhjYzg4NDQyMlUsIDB4ZGI5MjQ5YWFVLCAweGQ4OTA0ODI0VSwNCi0gICAgMHg5YjE5ODI0MVUsIDB4M2RkZGUwNzBVLCAweGYzYTI1MWE2VSwgMHgyY2MzZWZmOVUsDQotICAgIDB4YzE3NWI0NWFVLCAweDc2YWZkOWUyVSwgMHg4N2ZhN2RiMFUsIDB4YjRkODZjMzZVLA0KLSAgICAweDEzZTlmYTdkVSwgMHg2MmI3ZDVlNFUsIDB4YWFjYzY2MzNVLCAweDM4ZGJlM2ZmVSwNCi0gICAgMHg1ZDlkYzA2MFUsIDB4YzA4MDQwMjBVLCAweDMwMjAxMDA4VSwgMHgxZDE2MGI4YlUsDQotICAgIDB4ZDk2NWJjNWVVLCAweGRkOTY0YmFiVSwgMHgxZmUxZmU3ZlUsIDB4MGRmZGYwNzhVLA0KLSAgICAweDE1ZWRmODdjVSwgMHhlOGIwNTgyY1UsIDB4ZWY0MWFlNTdVLCAweGQ2NmZiOWQyVSwNCi0gICAgMHhmMjU3YTVkY1UsIDB4NzNhOWRhNmRVLCAweDE5ZTVmYzdlVSwgMHgyZTM0MWEwZFUsDQotICAgIDB4Zjc1MWE2NTNVLCAweDVmNmEzNTk0VSwgMHhiMDJiOWJjM1UsIDB4ZjBhMDUwMjhVLA0KLSAgICAweGQyOWM0ZTI3VSwgMHgxNDE4MGMwNlUsIDB4ZGY2MWJlNWZVLCAweGM5OGU0N2FkVSwNCi0gICAgMHg0ZjgxY2U2N1UsIDB4ZDU2ZGI4NWNVLCAweGUzNDlhYTU1VSwgMHhhZDNkOTA0OFUsDQotICAgIDB4MjQzODFjMGVVLCAweGYxNTVhNDUyVSwgMHg0NjhmYzllYVUsIDB4OTExNTg0NDJVLA0KLSAgICAweGM3NzFiNjViVSwgMHhkMzY5YmE1ZFUsIDB4YTBjMDYwMzBVLCAweGNkN2RiMDU4VSwNCi0gICAgMHhmYjU5YTI1MVUsIDB4Y2I3OWIyNTlVLCAweDg4ZjA3ODNjVSwgMHhiOTI1OWM0ZVUsDQotICAgIDB4OTBlMDcwMzhVLCAweDFiMTIwOThhVSwgMHgzMWQ1ZTQ3MlUsIDB4Nzg1MDI4MTRVLA0KLSAgICAweDY4YmJkM2U3VSwgMHhhZTNmOTFjNlUsIDB4ZmU1ZmExZGVVLCAweGZkNWRhMDUwVSwNCi0gICAgMHgwMzAyMDE4ZVUsIDB4NGI3MjM5OTJVLCAweGRjNjNiZmQxVSwgMHgyZmMxZWU3N1UsDQotICAgIDB4NGQ3NjNiOTNVLCAweDgzMDk4YTQ1VSwgMHg3YjUyMjk5YVUsIDB4OWUxZjgxY2VVLA0KLSAgICAweGVlYjQ1YTJkVSwgMHgwYTBjMDYwM1UsIDB4NTE5NWM0NjJVLCAweDkzZTI3MWI2VSwNCi0gICAgMHhiMWRlNmZiOVUsIDB4YTVjNjYzYmZVLCAweDUzNjIzMTk2VSwgMHg2N2IxZDY2YlUsDQotICAgIDB4ODJmYzdlM2ZVLCAweDEyMWMwZTA3VSwgMHg2YzQ4MjQxMlUsIDB4YzM4MjQxYWVVLA0KLSAgICAweDlkMWQ4MDQwVSwgMHhiOGQwNjgzNFUsIDB4ODkwNThjNDZVLCAweDg0Zjg3YzNlVSwNCi0gICAgMHhlMDRiYWJkYlUsIDB4OTgxYjgzY2ZVLCAweDUyOTdjNWVjVSwgMHg5MjE3ODVjY1UsDQotICAgIDB4YmMyMzlmYzFVLCAweGUxYmU1ZmExVSwgMHhiYTI3OWRjMFUsIDB4Y2U3ZmIxZDZVLA0KLSAgICAweDRlNzQzYTFkVSwgMHgwMmY3ZjVmNFUsIDB4NWI5OWMyNjFVLCAweDlhZWM3NjNiVSwNCi0gICAgMHg2MDQwMjAxMFUsIDB4ZWE0N2FkZDhVLCAweDZkYmRkMDY4VSwgMHhlN2JhNWRhMFUsDQotICAgIDB4ODFmZTdmYjFVLCAweDNjMjgxNDBhVSwgMHg2YmI5ZDI2OVUsIDB4NzVhZGQ4NmNVLA0KLSAgICAweGFiMzk5MjQ5VSwgMHgyNmNmZTlmYVUsIDB4MjljNWVjNzZVLCAweGEyMzc5NWM0VSwNCi0gICAgMHg2MzQyMjE5ZVUsIDB4N2Q1NjJiOWJVLCAweDc5YTVkYzZlVSwgMHg3MTVlMmY5OVUsDQotICAgIDB4YjYyZjk5YzJVLCAweDk1ZTY3M2I3VSwgMHg3NzVhMmQ5OFUsIDB4YWZjYTY1YmNVLA0KLSAgICAweDA1MDYwMzhmVSwgMHgzOTJlMTc4NVUsIDB4NDI3YzNlMWZVLCAweDlmZWE3NWI0VSwNCi0gICAgMHgyYWM3ZWRmOFUsIDB4NjY0NDIyMTFVLCAweGU0Yjg1YzJlVSwgMHgwMDAwMDAwMFUsDQotICAgIDB4ZGU5NDRhMjVVLCAweDQ4NzAzODFjVSwgMHhmY2E4NTQyYVUsIDB4OGVmNDdhM2RVLA0KLSAgICAweDFlMTQwYTA1VSwgMHhiZjIxOWU0ZlUsIDB4MDdmMWY2N2JVLCAweDhiZjI3OWIyVSwNCi0gICAgMHhhY2M4NjQzMlUsIDB4NDc3YTNkOTBVLCAweGM1ODY0M2FmVSwgMHg1NjY0MzIxOVUsDQotICAgIDB4ZWRiNjViYTNVLCAweDA4ZmJmM2Y3VSwgMHgzN2QxZTY3M1UsIDB4Njk0ZTI3OWRVLA0KLSAgICAweDdlNTQyYTE1VSwgMHgyNWNkZTg3NFUsIDB4NWU5ZmMxZWVVLCAweDg2MGY4OWNhVSwNCi0gICAgMHg2NTQ2MjM5ZlUsIDB4MjIzYzFlMGZVLCAweDVhNmMzNjFiVSwgMHgyM2M5ZWE3NVUsDQotICAgIDB4MzMyMjExODZVLCAweDNmMmExNTg0VSwgMHg2ZjRhMjU5Y1UsIDB4YTEzNTk0NGFVLA0KLSAgICAweDU1NjYzMzk3VSwgMHg1YzY4MzQxYVUsIDB4NDM4OWNhNjVVLCAweDBlZmZmMWY2VSwNCi0gICAgMHg1NDkzYzdlZFUsIDB4MzYyNDEyMDlVLCAweGJkZDY2YmJiVSwgMHhkNDk4NGMyNlUsDQotICAgIDB4MmQzNjFiODNVLCAweDQwOGJjYmViVSwgMHg3ZmExZGU2ZlUsIDB4MjEzZTFmODFVLA0KLSAgICAweDE4MTAwODA0VSwgMHg2MWI1ZDQ2YVUsIDB4OTcxMTg2NDNVLCAweDA2MDQwMjAxVSwNCi0gICAgMHg3MjVjMmUxN1UsIDB4N2NhM2RmZTFVLCAweDM1MjYxMzg3VSwgMHgwNGYzZjdmNVUsDQotICAgIDB4MDkwZTA3OGRVLCAweDcwYWJkYmUzVSwgMHhjYThjNDYyM1UsIDB4MjczYTFkODBVLA0KLSAgICAweDg1MGQ4ODQ0VSwgMHg3NDU4MmMxNlUsIDB4NDk4NWNjNjZVLCAweGM2ODQ0MjIxVSwNCi0gICAgMHgzZWRmZTFmZVUsIDB4YzQ3M2I3ZDVVLCAweGE2YzQ2MjMxVSwgMHhlYzQzYWZkOVUsDQotICAgIDB4YmVkNDZhMzVVLCAweDUwNjAzMDE4VSwgMHgwYzA4MDQwMlUsIDB4NDU4ZGM4NjRVLA0KLSAgICAweDE2ZWZmOWYyVSwgMHgxY2UzZmZmMVUsIDB4ZTk0NWFjNTZVLCAweDk0MTM4N2NkVSwNCi0gICAgMHgyYjMyMTk4MlUsIDB4OGEwNzhkYzhVLCAweGJiZDI2OWJhVSwgMHgxYWU3ZmRmMFUsDQotICAgIDB4NTg5YmMzZWZVLCAweDRjODNjZmU5VSwgMHg0YTg3Y2RlOFUsIDB4MzRkM2U3ZmRVLA0KLSAgICAweDExMWUwZjg5VSwgMHhjODdiYjNkN1UsIDB4YTgzYjkzYzdVLCAweDk5ZWU3N2I1VSwNCi0gICAgMHhmZmFhNTVhNFUsIDB4ZTJiYzVlMmZVLCAweDU5NmUzNzk1VSwgMHg2YTRjMjYxM1UsDQotICAgIDB4M2EyYzE2MGJVLCAweDEwZWJmYmYzVSwgMHg3YWE3ZGRlMFUsIDB4YjJkYzZlMzdVLA0KLX07DQotDQotc3RhdGljIGNvbnN0IHVsb25nMzIgVDRbMjU2XSA9IHsNCi0gICAgMHhhN2E3YTdhN1UsIDB4ZDNkM2QzZDNVLCAweGU2ZTZlNmU2VSwgMHg3MTcxNzE3MVUsDQotICAgIDB4ZDBkMGQwZDBVLCAweGFjYWNhY2FjVSwgMHg0ZDRkNGQ0ZFUsIDB4Nzk3OTc5NzlVLA0KLSAgICAweDNhM2EzYTNhVSwgMHhjOWM5YzljOVUsIDB4OTE5MTkxOTFVLCAweGZjZmNmY2ZjVSwNCi0gICAgMHgxZTFlMWUxZVUsIDB4NDc0NzQ3NDdVLCAweDU0NTQ1NDU0VSwgMHhiZGJkYmRiZFUsDQotICAgIDB4OGM4YzhjOGNVLCAweGE1YTVhNWE1VSwgMHg3YTdhN2E3YVUsIDB4ZmJmYmZiZmJVLA0KLSAgICAweDYzNjM2MzYzVSwgMHhiOGI4YjhiOFUsIDB4ZGRkZGRkZGRVLCAweGQ0ZDRkNGQ0VSwNCi0gICAgMHhlNWU1ZTVlNVUsIDB4YjNiM2IzYjNVLCAweGM1YzVjNWM1VSwgMHhiZWJlYmViZVUsDQotICAgIDB4YTlhOWE5YTlVLCAweDg4ODg4ODg4VSwgMHgwYzBjMGMwY1UsIDB4YTJhMmEyYTJVLA0KLSAgICAweDM5MzkzOTM5VSwgMHhkZmRmZGZkZlUsIDB4MjkyOTI5MjlVLCAweGRhZGFkYWRhVSwNCi0gICAgMHgyYjJiMmIyYlUsIDB4YThhOGE4YThVLCAweGNiY2JjYmNiVSwgMHg0YzRjNGM0Y1UsDQotICAgIDB4NGI0YjRiNGJVLCAweDIyMjIyMjIyVSwgMHhhYWFhYWFhYVUsIDB4MjQyNDI0MjRVLA0KLSAgICAweDQxNDE0MTQxVSwgMHg3MDcwNzA3MFUsIDB4YTZhNmE2YTZVLCAweGY5ZjlmOWY5VSwNCi0gICAgMHg1YTVhNWE1YVUsIDB4ZTJlMmUyZTJVLCAweGIwYjBiMGIwVSwgMHgzNjM2MzYzNlUsDQotICAgIDB4N2Q3ZDdkN2RVLCAweGU0ZTRlNGU0VSwgMHgzMzMzMzMzM1UsIDB4ZmZmZmZmZmZVLA0KLSAgICAweDYwNjA2MDYwVSwgMHgyMDIwMjAyMFUsIDB4MDgwODA4MDhVLCAweDhiOGI4YjhiVSwNCi0gICAgMHg1ZTVlNWU1ZVUsIDB4YWJhYmFiYWJVLCAweDdmN2Y3ZjdmVSwgMHg3ODc4Nzg3OFUsDQotICAgIDB4N2M3YzdjN2NVLCAweDJjMmMyYzJjVSwgMHg1NzU3NTc1N1UsIDB4ZDJkMmQyZDJVLA0KLSAgICAweGRjZGNkY2RjVSwgMHg2ZDZkNmQ2ZFUsIDB4N2U3ZTdlN2VVLCAweDBkMGQwZDBkVSwNCi0gICAgMHg1MzUzNTM1M1UsIDB4OTQ5NDk0OTRVLCAweGMzYzNjM2MzVSwgMHgyODI4MjgyOFUsDQotICAgIDB4MjcyNzI3MjdVLCAweDA2MDYwNjA2VSwgMHg1ZjVmNWY1ZlUsIDB4YWRhZGFkYWRVLA0KLSAgICAweDY3Njc2NzY3VSwgMHg1YzVjNWM1Y1UsIDB4NTU1NTU1NTVVLCAweDQ4NDg0ODQ4VSwNCi0gICAgMHgwZTBlMGUwZVUsIDB4NTI1MjUyNTJVLCAweGVhZWFlYWVhVSwgMHg0MjQyNDI0MlUsDQotICAgIDB4NWI1YjViNWJVLCAweDVkNWQ1ZDVkVSwgMHgzMDMwMzAzMFUsIDB4NTg1ODU4NThVLA0KLSAgICAweDUxNTE1MTUxVSwgMHg1OTU5NTk1OVUsIDB4M2MzYzNjM2NVLCAweDRlNGU0ZTRlVSwNCi0gICAgMHgzODM4MzgzOFUsIDB4OGE4YThhOGFVLCAweDcyNzI3MjcyVSwgMHgxNDE0MTQxNFUsDQotICAgIDB4ZTdlN2U3ZTdVLCAweGM2YzZjNmM2VSwgMHhkZWRlZGVkZVUsIDB4NTA1MDUwNTBVLA0KLSAgICAweDhlOGU4ZThlVSwgMHg5MjkyOTI5MlUsIDB4ZDFkMWQxZDFVLCAweDc3Nzc3Nzc3VSwNCi0gICAgMHg5MzkzOTM5M1UsIDB4NDU0NTQ1NDVVLCAweDlhOWE5YTlhVSwgMHhjZWNlY2VjZVUsDQotICAgIDB4MmQyZDJkMmRVLCAweDAzMDMwMzAzVSwgMHg2MjYyNjI2MlUsIDB4YjZiNmI2YjZVLA0KLSAgICAweGI5YjliOWI5VSwgMHhiZmJmYmZiZlUsIDB4OTY5Njk2OTZVLCAweDZiNmI2YjZiVSwNCi0gICAgMHgzZjNmM2YzZlUsIDB4MDcwNzA3MDdVLCAweDEyMTIxMjEyVSwgMHhhZWFlYWVhZVUsDQotICAgIDB4NDA0MDQwNDBVLCAweDM0MzQzNDM0VSwgMHg0NjQ2NDY0NlUsIDB4M2UzZTNlM2VVLA0KLSAgICAweGRiZGJkYmRiVSwgMHhjZmNmY2ZjZlUsIDB4ZWNlY2VjZWNVLCAweGNjY2NjY2NjVSwNCi0gICAgMHhjMWMxYzFjMVUsIDB4YTFhMWExYTFVLCAweGMwYzBjMGMwVSwgMHhkNmQ2ZDZkNlUsDQotICAgIDB4MWQxZDFkMWRVLCAweGY0ZjRmNGY0VSwgMHg2MTYxNjE2MVUsIDB4M2IzYjNiM2JVLA0KLSAgICAweDEwMTAxMDEwVSwgMHhkOGQ4ZDhkOFUsIDB4Njg2ODY4NjhVLCAweGEwYTBhMGEwVSwNCi0gICAgMHhiMWIxYjFiMVUsIDB4MGEwYTBhMGFVLCAweDY5Njk2OTY5VSwgMHg2YzZjNmM2Y1UsDQotICAgIDB4NDk0OTQ5NDlVLCAweGZhZmFmYWZhVSwgMHg3Njc2NzY3NlUsIDB4YzRjNGM0YzRVLA0KLSAgICAweDllOWU5ZTllVSwgMHg5YjliOWI5YlUsIDB4NmU2ZTZlNmVVLCAweDk5OTk5OTk5VSwNCi0gICAgMHhjMmMyYzJjMlUsIDB4YjdiN2I3YjdVLCAweDk4OTg5ODk4VSwgMHhiY2JjYmNiY1UsDQotICAgIDB4OGY4ZjhmOGZVLCAweDg1ODU4NTg1VSwgMHgxZjFmMWYxZlUsIDB4YjRiNGI0YjRVLA0KLSAgICAweGY4ZjhmOGY4VSwgMHgxMTExMTExMVUsIDB4MmUyZTJlMmVVLCAweDAwMDAwMDAwVSwNCi0gICAgMHgyNTI1MjUyNVUsIDB4MWMxYzFjMWNVLCAweDJhMmEyYTJhVSwgMHgzZDNkM2QzZFUsDQotICAgIDB4MDUwNTA1MDVVLCAweDRmNGY0ZjRmVSwgMHg3YjdiN2I3YlUsIDB4YjJiMmIyYjJVLA0KLSAgICAweDMyMzIzMjMyVSwgMHg5MDkwOTA5MFUsIDB4YWZhZmFmYWZVLCAweDE5MTkxOTE5VSwNCi0gICAgMHhhM2EzYTNhM1UsIDB4ZjdmN2Y3ZjdVLCAweDczNzM3MzczVSwgMHg5ZDlkOWQ5ZFUsDQotICAgIDB4MTUxNTE1MTVVLCAweDc0NzQ3NDc0VSwgMHhlZWVlZWVlZVUsIDB4Y2FjYWNhY2FVLA0KLSAgICAweDlmOWY5ZjlmVSwgMHgwZjBmMGYwZlUsIDB4MWIxYjFiMWJVLCAweDc1NzU3NTc1VSwNCi0gICAgMHg4Njg2ODY4NlUsIDB4ODQ4NDg0ODRVLCAweDljOWM5YzljVSwgMHg0YTRhNGE0YVUsDQotICAgIDB4OTc5Nzk3OTdVLCAweDFhMWExYTFhVSwgMHg2NTY1NjU2NVUsIDB4ZjZmNmY2ZjZVLA0KLSAgICAweGVkZWRlZGVkVSwgMHgwOTA5MDkwOVUsIDB4YmJiYmJiYmJVLCAweDI2MjYyNjI2VSwNCi0gICAgMHg4MzgzODM4M1UsIDB4ZWJlYmViZWJVLCAweDZmNmY2ZjZmVSwgMHg4MTgxODE4MVUsDQotICAgIDB4MDQwNDA0MDRVLCAweDZhNmE2YTZhVSwgMHg0MzQzNDM0M1UsIDB4MDEwMTAxMDFVLA0KLSAgICAweDE3MTcxNzE3VSwgMHhlMWUxZTFlMVUsIDB4ODc4Nzg3ODdVLCAweGY1ZjVmNWY1VSwNCi0gICAgMHg4ZDhkOGQ4ZFUsIDB4ZTNlM2UzZTNVLCAweDIzMjMyMzIzVSwgMHg4MDgwODA4MFUsDQotICAgIDB4NDQ0NDQ0NDRVLCAweDE2MTYxNjE2VSwgMHg2NjY2NjY2NlUsIDB4MjEyMTIxMjFVLA0KLSAgICAweGZlZmVmZWZlVSwgMHhkNWQ1ZDVkNVUsIDB4MzEzMTMxMzFVLCAweGQ5ZDlkOWQ5VSwNCi0gICAgMHgzNTM1MzUzNVUsIDB4MTgxODE4MThVLCAweDAyMDIwMjAyVSwgMHg2NDY0NjQ2NFUsDQotICAgIDB4ZjJmMmYyZjJVLCAweGYxZjFmMWYxVSwgMHg1NjU2NTY1NlUsIDB4Y2RjZGNkY2RVLA0KLSAgICAweDgyODI4MjgyVSwgMHhjOGM4YzhjOFUsIDB4YmFiYWJhYmFVLCAweGYwZjBmMGYwVSwNCi0gICAgMHhlZmVmZWZlZlUsIDB4ZTllOWU5ZTlVLCAweGU4ZThlOGU4VSwgMHhmZGZkZmRmZFUsDQotICAgIDB4ODk4OTg5ODlVLCAweGQ3ZDdkN2Q3VSwgMHhjN2M3YzdjN1UsIDB4YjViNWI1YjVVLA0KLSAgICAweGE0YTRhNGE0VSwgMHgyZjJmMmYyZlUsIDB4OTU5NTk1OTVVLCAweDEzMTMxMzEzVSwNCi0gICAgMHgwYjBiMGIwYlUsIDB4ZjNmM2YzZjNVLCAweGUwZTBlMGUwVSwgMHgzNzM3MzczN1UsDQotfTsNCi0NCi1zdGF0aWMgY29uc3QgdWxvbmczMiBUNVsyNTZdID0gew0KLSAgICAweDAwMDAwMDAwVSwgMHgwMTAyMDYwOFUsIDB4MDIwNDBjMTBVLCAweDAzMDYwYTE4VSwNCi0gICAgMHgwNDA4MTgyMFUsIDB4MDUwYTFlMjhVLCAweDA2MGMxNDMwVSwgMHgwNzBlMTIzOFUsDQotICAgIDB4MDgxMDMwNDBVLCAweDA5MTIzNjQ4VSwgMHgwYTE0M2M1MFUsIDB4MGIxNjNhNThVLA0KLSAgICAweDBjMTgyODYwVSwgMHgwZDFhMmU2OFUsIDB4MGUxYzI0NzBVLCAweDBmMWUyMjc4VSwNCi0gICAgMHgxMDIwNjA4MFUsIDB4MTEyMjY2ODhVLCAweDEyMjQ2YzkwVSwgMHgxMzI2NmE5OFUsDQotICAgIDB4MTQyODc4YTBVLCAweDE1MmE3ZWE4VSwgMHgxNjJjNzRiMFUsIDB4MTcyZTcyYjhVLA0KLSAgICAweDE4MzA1MGMwVSwgMHgxOTMyNTZjOFUsIDB4MWEzNDVjZDBVLCAweDFiMzY1YWQ4VSwNCi0gICAgMHgxYzM4NDhlMFUsIDB4MWQzYTRlZThVLCAweDFlM2M0NGYwVSwgMHgxZjNlNDJmOFUsDQotICAgIDB4MjA0MGMwMWRVLCAweDIxNDJjNjE1VSwgMHgyMjQ0Y2MwZFUsIDB4MjM0NmNhMDVVLA0KLSAgICAweDI0NDhkODNkVSwgMHgyNTRhZGUzNVUsIDB4MjY0Y2Q0MmRVLCAweDI3NGVkMjI1VSwNCi0gICAgMHgyODUwZjA1ZFUsIDB4Mjk1MmY2NTVVLCAweDJhNTRmYzRkVSwgMHgyYjU2ZmE0NVUsDQotICAgIDB4MmM1OGU4N2RVLCAweDJkNWFlZTc1VSwgMHgyZTVjZTQ2ZFUsIDB4MmY1ZWUyNjVVLA0KLSAgICAweDMwNjBhMDlkVSwgMHgzMTYyYTY5NVUsIDB4MzI2NGFjOGRVLCAweDMzNjZhYTg1VSwNCi0gICAgMHgzNDY4YjhiZFUsIDB4MzU2YWJlYjVVLCAweDM2NmNiNGFkVSwgMHgzNzZlYjJhNVUsDQotICAgIDB4Mzg3MDkwZGRVLCAweDM5NzI5NmQ1VSwgMHgzYTc0OWNjZFUsIDB4M2I3NjlhYzVVLA0KLSAgICAweDNjNzg4OGZkVSwgMHgzZDdhOGVmNVUsIDB4M2U3Yzg0ZWRVLCAweDNmN2U4MmU1VSwNCi0gICAgMHg0MDgwOWQzYVUsIDB4NDE4MjliMzJVLCAweDQyODQ5MTJhVSwgMHg0Mzg2OTcyMlUsDQotICAgIDB4NDQ4ODg1MWFVLCAweDQ1OGE4MzEyVSwgMHg0NjhjODkwYVUsIDB4NDc4ZThmMDJVLA0KLSAgICAweDQ4OTBhZDdhVSwgMHg0OTkyYWI3MlUsIDB4NGE5NGExNmFVLCAweDRiOTZhNzYyVSwNCi0gICAgMHg0Yzk4YjU1YVUsIDB4NGQ5YWIzNTJVLCAweDRlOWNiOTRhVSwgMHg0ZjllYmY0MlUsDQotICAgIDB4NTBhMGZkYmFVLCAweDUxYTJmYmIyVSwgMHg1MmE0ZjFhYVUsIDB4NTNhNmY3YTJVLA0KLSAgICAweDU0YThlNTlhVSwgMHg1NWFhZTM5MlUsIDB4NTZhY2U5OGFVLCAweDU3YWVlZjgyVSwNCi0gICAgMHg1OGIwY2RmYVUsIDB4NTliMmNiZjJVLCAweDVhYjRjMWVhVSwgMHg1YmI2YzdlMlUsDQotICAgIDB4NWNiOGQ1ZGFVLCAweDVkYmFkM2QyVSwgMHg1ZWJjZDljYVUsIDB4NWZiZWRmYzJVLA0KLSAgICAweDYwYzA1ZDI3VSwgMHg2MWMyNWIyZlUsIDB4NjJjNDUxMzdVLCAweDYzYzY1NzNmVSwNCi0gICAgMHg2NGM4NDUwN1UsIDB4NjVjYTQzMGZVLCAweDY2Y2M0OTE3VSwgMHg2N2NlNGYxZlUsDQotICAgIDB4NjhkMDZkNjdVLCAweDY5ZDI2YjZmVSwgMHg2YWQ0NjE3N1UsIDB4NmJkNjY3N2ZVLA0KLSAgICAweDZjZDg3NTQ3VSwgMHg2ZGRhNzM0ZlUsIDB4NmVkYzc5NTdVLCAweDZmZGU3ZjVmVSwNCi0gICAgMHg3MGUwM2RhN1UsIDB4NzFlMjNiYWZVLCAweDcyZTQzMWI3VSwgMHg3M2U2MzdiZlUsDQotICAgIDB4NzRlODI1ODdVLCAweDc1ZWEyMzhmVSwgMHg3NmVjMjk5N1UsIDB4NzdlZTJmOWZVLA0KLSAgICAweDc4ZjAwZGU3VSwgMHg3OWYyMGJlZlUsIDB4N2FmNDAxZjdVLCAweDdiZjYwN2ZmVSwNCi0gICAgMHg3Y2Y4MTVjN1UsIDB4N2RmYTEzY2ZVLCAweDdlZmMxOWQ3VSwgMHg3ZmZlMWZkZlUsDQotICAgIDB4ODAxZDI3NzRVLCAweDgxMWYyMTdjVSwgMHg4MjE5MmI2NFUsIDB4ODMxYjJkNmNVLA0KLSAgICAweDg0MTUzZjU0VSwgMHg4NTE3Mzk1Y1UsIDB4ODYxMTMzNDRVLCAweDg3MTMzNTRjVSwNCi0gICAgMHg4ODBkMTczNFUsIDB4ODkwZjExM2NVLCAweDhhMDkxYjI0VSwgMHg4YjBiMWQyY1UsDQotICAgIDB4OGMwNTBmMTRVLCAweDhkMDcwOTFjVSwgMHg4ZTAxMDMwNFUsIDB4OGYwMzA1MGNVLA0KLSAgICAweDkwM2Q0N2Y0VSwgMHg5MTNmNDFmY1UsIDB4OTIzOTRiZTRVLCAweDkzM2I0ZGVjVSwNCi0gICAgMHg5NDM1NWZkNFUsIDB4OTUzNzU5ZGNVLCAweDk2MzE1M2M0VSwgMHg5NzMzNTVjY1UsDQotICAgIDB4OTgyZDc3YjRVLCAweDk5MmY3MWJjVSwgMHg5YTI5N2JhNFUsIDB4OWIyYjdkYWNVLA0KLSAgICAweDljMjU2Zjk0VSwgMHg5ZDI3Njk5Y1UsIDB4OWUyMTYzODRVLCAweDlmMjM2NThjVSwNCi0gICAgMHhhMDVkZTc2OVUsIDB4YTE1ZmUxNjFVLCAweGEyNTllYjc5VSwgMHhhMzViZWQ3MVUsDQotICAgIDB4YTQ1NWZmNDlVLCAweGE1NTdmOTQxVSwgMHhhNjUxZjM1OVUsIDB4YTc1M2Y1NTFVLA0KLSAgICAweGE4NGRkNzI5VSwgMHhhOTRmZDEyMVUsIDB4YWE0OWRiMzlVLCAweGFiNGJkZDMxVSwNCi0gICAgMHhhYzQ1Y2YwOVUsIDB4YWQ0N2M5MDFVLCAweGFlNDFjMzE5VSwgMHhhZjQzYzUxMVUsDQotICAgIDB4YjA3ZDg3ZTlVLCAweGIxN2Y4MWUxVSwgMHhiMjc5OGJmOVUsIDB4YjM3YjhkZjFVLA0KLSAgICAweGI0NzU5ZmM5VSwgMHhiNTc3OTljMVUsIDB4YjY3MTkzZDlVLCAweGI3NzM5NWQxVSwNCi0gICAgMHhiODZkYjdhOVUsIDB4Yjk2ZmIxYTFVLCAweGJhNjliYmI5VSwgMHhiYjZiYmRiMVUsDQotICAgIDB4YmM2NWFmODlVLCAweGJkNjdhOTgxVSwgMHhiZTYxYTM5OVUsIDB4YmY2M2E1OTFVLA0KLSAgICAweGMwOWRiYTRlVSwgMHhjMTlmYmM0NlUsIDB4YzI5OWI2NWVVLCAweGMzOWJiMDU2VSwNCi0gICAgMHhjNDk1YTI2ZVUsIDB4YzU5N2E0NjZVLCAweGM2OTFhZTdlVSwgMHhjNzkzYTg3NlUsDQotICAgIDB4Yzg4ZDhhMGVVLCAweGM5OGY4YzA2VSwgMHhjYTg5ODYxZVUsIDB4Y2I4YjgwMTZVLA0KLSAgICAweGNjODU5MjJlVSwgMHhjZDg3OTQyNlUsIDB4Y2U4MTllM2VVLCAweGNmODM5ODM2VSwNCi0gICAgMHhkMGJkZGFjZVUsIDB4ZDFiZmRjYzZVLCAweGQyYjlkNmRlVSwgMHhkM2JiZDBkNlUsDQotICAgIDB4ZDRiNWMyZWVVLCAweGQ1YjdjNGU2VSwgMHhkNmIxY2VmZVUsIDB4ZDdiM2M4ZjZVLA0KLSAgICAweGQ4YWRlYThlVSwgMHhkOWFmZWM4NlUsIDB4ZGFhOWU2OWVVLCAweGRiYWJlMDk2VSwNCi0gICAgMHhkY2E1ZjJhZVUsIDB4ZGRhN2Y0YTZVLCAweGRlYTFmZWJlVSwgMHhkZmEzZjhiNlUsDQotICAgIDB4ZTBkZDdhNTNVLCAweGUxZGY3YzViVSwgMHhlMmQ5NzY0M1UsIDB4ZTNkYjcwNGJVLA0KLSAgICAweGU0ZDU2MjczVSwgMHhlNWQ3NjQ3YlUsIDB4ZTZkMTZlNjNVLCAweGU3ZDM2ODZiVSwNCi0gICAgMHhlOGNkNGExM1UsIDB4ZTljZjRjMWJVLCAweGVhYzk0NjAzVSwgMHhlYmNiNDAwYlUsDQotICAgIDB4ZWNjNTUyMzNVLCAweGVkYzc1NDNiVSwgMHhlZWMxNWUyM1UsIDB4ZWZjMzU4MmJVLA0KLSAgICAweGYwZmQxYWQzVSwgMHhmMWZmMWNkYlUsIDB4ZjJmOTE2YzNVLCAweGYzZmIxMGNiVSwNCi0gICAgMHhmNGY1MDJmM1UsIDB4ZjVmNzA0ZmJVLCAweGY2ZjEwZWUzVSwgMHhmN2YzMDhlYlUsDQotICAgIDB4ZjhlZDJhOTNVLCAweGY5ZWYyYzliVSwgMHhmYWU5MjY4M1UsIDB4ZmJlYjIwOGJVLA0KLSAgICAweGZjZTUzMmIzVSwgMHhmZGU3MzRiYlUsIDB4ZmVlMTNlYTNVLCAweGZmZTMzOGFiVSwNCi19Ow0KLQ0KLS8qKg0KLSAqIFRoZSByb3VuZCBjb25zdGFudHMuDQotICovDQotc3RhdGljIGNvbnN0IHVsb25nMzIgcmNbXSA9IHsNCi0gICAweGE3ZDNlNjcxVSwgMHhkMGFjNGQ3OVUsIDB4M2FjOTkxZmNVLCAweDFlNDc1NGJkVSwNCi0gICAweDhjYTU3YWZiVSwgMHg2M2I4ZGRkNFUsIDB4ZTViM2M1YmVVLCAweGE5ODgwY2EyVSwNCi0gICAweDM5ZGYyOWRhVSwgMHgyYmE4Y2I0Y1UsIDB4NGIyMmFhMjRVLCAweDQxNzBhNmY5VSwNCi0gICAweDVhZTJiMDM2VSwgMHg3ZGU0MzNmZlUsIDB4NjAyMDA4OGJVLCAweDVlYWI3Zjc4VSwNCi0gICAweDdjMmM1N2QyVSwgMHhkYzZkN2UwZFUsIDB4NTM5NGMzMjhVLA0KLX07DQotDQotI2VuZGlmDQotDQotIC8qKg0KLSAgICBJbml0aWFsaXplIHRoZSBBbnViaXMgYmxvY2sgY2lwaGVyDQotICAgIEBwYXJhbSBrZXkgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdpc2ggdG8gcGFzcw0KLSAgICBAcGFyYW0ga2V5bGVuIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzDQotICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpDQotICAgIEBwYXJhbSBza2V5IFRoZSBrZXkgaW4gYXMgc2NoZWR1bGVkIGJ5IHRoaXMgZnVuY3Rpb24uDQotICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bA0KLSAqLw0KLSNpZmRlZiBDTEVBTl9TVEFDSw0KLXN0YXRpYyBpbnQgX2FudWJpc19zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQ0KLSNlbHNlDQotaW50ICBhbnViaXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkNCi0jZW5kaWYNCi17DQotICAgaW50IE4sIFIsIGksIHBvcywgcjsNCi0gICB1bG9uZzMyIGthcHBhW01BWF9OXTsNCi0gICB1bG9uZzMyIGludGVyW01BWF9OXTsNCi0gICB1bG9uZzMyIHYsIEswLCBLMSwgSzIsIEszOw0KLQ0KLSAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsNCi0gICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7DQotDQotICAgLyogVmFsaWQgc2l6ZXMgKGluIGJ5dGVzKSBhcmUgMTYsIDIwLCAyNCwgMjgsIDMyLCAzNiwgYW5kIDQwLiAqLw0KLSAgIGlmICgoa2V5bGVuICYgMykgfHwgKGtleWxlbiA8IDE2KSB8fCAoa2V5bGVuID4gNDApKSB7DQotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsNCi0gICB9DQotICAgc2tleS0+YW51YmlzLmtleUJpdHMgPSBrZXlsZW4qODsNCi0NCi0gICAvKg0KLSAgICAqIGRldGVybWluZSB0aGUgTiBsZW5ndGggcGFyYW1ldGVyOg0KLSAgICAqIChOLkIuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUga2V5IGxlbmd0aCBpcyB2YWxpZCEpDQotICAgICovDQotICAgTiA9IHNrZXktPmFudWJpcy5rZXlCaXRzID4+IDU7DQotDQotICAgLyoNCi0gICAgKiBkZXRlcm1pbmUgbnVtYmVyIG9mIHJvdW5kcyBmcm9tIGtleSBzaXplOg0KLSAgICAqLw0KLSAgIHNrZXktPmFudWJpcy5SID0gUiA9IDggKyBOOw0KLQ0KLSAgIGlmIChudW1fcm91bmRzICE9IDAgJiYgbnVtX3JvdW5kcyAhPSBza2V5LT5hbnViaXMuUikgew0KLSAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsNCi0gICB9DQotDQotICAgIC8qDQotICAgICogbWFwIGNpcGhlciBrZXkgdG8gaW5pdGlhbCBrZXkgc3RhdGUgKG11KToNCi0gICAgKi8NCi0gICAgZm9yIChpID0gMCwgcG9zID0gMDsgaSA8IE47IGkrKywgcG9zICs9IDQpIHsNCi0gICAgICBrYXBwYVtpXSA9DQotICAgICAgICAgKGtleVtwb3MgICAgXSA8PCAyNCkgXg0KLSAgICAgICAgIChrZXlbcG9zICsgMV0gPDwgMTYpIF4NCi0gICAgICAgICAoa2V5W3BvcyArIDJdIDw8ICA4KSBeDQotICAgICAgICAgKGtleVtwb3MgKyAzXSAgICAgICk7DQotICAgIH0NCi0NCi0gICAvKg0KLSAgICAqIGdlbmVyYXRlIFIgKyAxIHJvdW5kIGtleXM6DQotICAgICovDQotICAgZm9yIChyID0gMDsgciA8PSBSOyByKyspIHsNCi0gICAgICAvKg0KLSAgICAgICAqIGdlbmVyYXRlIHItdGggcm91bmQga2V5IEtecjoNCi0gICAgICAgKi8NCi0gICAgICBLMCA9IFQ0WyhrYXBwYVtOIC0gMV0gPj4gMjQpICAgICAgIF07DQotICAgICAgSzEgPSBUNFsoa2FwcGFbTiAtIDFdID4+IDE2KSAmIDB4ZmZdOw0KLSAgICAgIEsyID0gVDRbKGthcHBhW04gLSAxXSA+PiAgOCkgJiAweGZmXTsNCi0gICAgICBLMyA9IFQ0WyhrYXBwYVtOIC0gMV0gICAgICApICYgMHhmZl07DQotICAgICAgZm9yIChpID0gTiAtIDI7IGkgPj0gMDsgaS0tKSB7DQotICAgICAgICAgSzAgPSBUNFsoa2FwcGFbaV0gPj4gMjQpICAgICAgIF0gXg0KLSAgICAgICAgICAgIChUNVsoSzAgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzAgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzAgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzAgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7DQotICAgICAgICAgSzEgPSBUNFsoa2FwcGFbaV0gPj4gMTYpICYgMHhmZl0gXg0KLSAgICAgICAgICAgIChUNVsoSzEgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzEgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzEgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzEgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7DQotICAgICAgICAgSzIgPSBUNFsoa2FwcGFbaV0gPj4gIDgpICYgMHhmZl0gXg0KLSAgICAgICAgICAgIChUNVsoSzIgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzIgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzIgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzIgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7DQotICAgICAgICAgSzMgPSBUNFsoa2FwcGFbaV0gICAgICApICYgMHhmZl0gXg0KLSAgICAgICAgICAgIChUNVsoSzMgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzMgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzMgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXg0KLSAgICAgICAgICAgIChUNVsoSzMgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7DQotICAgICAgfQ0KLSAgICAgIC8qDQotICAgICAgLS0gdGhpcyBpcyB0aGUgY29kZSB0byB1c2Ugd2l0aCB0aGUgbGFyZ2UgVSB0YWJsZXM6DQotICAgICAgSzAgPSBLMSA9IEsyID0gSzMgPSAwOw0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsNCi0gICAgICAgICBLMCBePSBVW2ldWyhrYXBwYVtpXSA+PiAyNCkgICAgICAgXTsNCi0gICAgICAgICBLMSBePSBVW2ldWyhrYXBwYVtpXSA+PiAxNikgJiAweGZmXTsNCi0gICAgICAgICBLMiBePSBVW2ldWyhrYXBwYVtpXSA+PiAgOCkgJiAweGZmXTsNCi0gICAgICAgICBLMyBePSBVW2ldWyhrYXBwYVtpXSAgICAgICkgJiAweGZmXTsNCi0gICAgICB9DQotICAgICAgKi8NCi0gICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bMF0gPSBLMDsNCi0gICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bMV0gPSBLMTsNCi0gICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bMl0gPSBLMjsNCi0gICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bM10gPSBLMzsNCi0NCi0gICAgICAvKg0KLSAgICAgICAqIGNvbXB1dGUga2FwcGFee3IrMX0gZnJvbSBrYXBwYV5yOg0KLSAgICAgICAqLw0KLSAgICAgIGlmIChyID09IFIpIHsNCi0gICAgICAgICBicmVhazsNCi0gICAgICB9DQotICAgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgew0KLSAgICAgICAgIGludCBqID0gaTsNCi0gICAgICAgICBpbnRlcltpXSAgPSBUMFsoa2FwcGFbai0tXSA+PiAyNCkgICAgICAgXTsgaWYgKGogPCAwKSBqID0gTiAtIDE7DQotICAgICAgICAgaW50ZXJbaV0gXj0gVDFbKGthcHBhW2otLV0gPj4gMTYpICYgMHhmZl07IGlmIChqIDwgMCkgaiA9IE4gLSAxOw0KLSAgICAgICAgIGludGVyW2ldIF49IFQyWyhrYXBwYVtqLS1dID4+ICA4KSAmIDB4ZmZdOyBpZiAoaiA8IDApIGogPSBOIC0gMTsNCi0gICAgICAgICBpbnRlcltpXSBePSBUM1soa2FwcGFbaiAgXSAgICAgICkgJiAweGZmXTsNCi0gICAgICB9DQotICAgICAga2FwcGFbMF0gPSBpbnRlclswXSBeIHJjW3JdOw0KLSAgICAgIGZvciAoaSA9IDE7IGkgPCBOOyBpKyspIHsNCi0gICAgICAgICBrYXBwYVtpXSA9IGludGVyW2ldOw0KLSAgICAgIH0NCi0gICB9DQotDQotICAgLyoNCi0gICAgKiBnZW5lcmF0ZSBpbnZlcnNlIGtleSBzY2hlZHVsZTogSydeMCA9IEteUiwgSydeUiA9IEteMCwgSydeciA9IHRoZXRhKEtee1Itcn0pOg0KLSAgICAqLw0KLSAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCi0gICAgICBza2V5LT5hbnViaXMucm91bmRLZXlEZWNbMF1baV0gPSBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbUl1baV07DQotICAgICAgc2tleS0+YW51YmlzLnJvdW5kS2V5RGVjW1JdW2ldID0gc2tleS0+YW51YmlzLnJvdW5kS2V5RW5jWzBdW2ldOw0KLSAgIH0NCi0gICBmb3IgKHIgPSAxOyByIDwgUjsgcisrKSB7DQotICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KLSAgICAgICAgIHYgPSBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbUiAtIHJdW2ldOw0KLSAgICAgICAgIHNrZXktPmFudWJpcy5yb3VuZEtleURlY1tyXVtpXSA9DQotICAgICAgICAgICAgVDBbVDRbKHYgPj4gMjQpICAgICAgIF0gJiAweGZmXSBeDQotICAgICAgICAgICAgVDFbVDRbKHYgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeDQotICAgICAgICAgICAgVDJbVDRbKHYgPj4gIDgpICYgMHhmZl0gJiAweGZmXSBeDQotICAgICAgICAgICAgVDNbVDRbKHYgICAgICApICYgMHhmZl0gJiAweGZmXTsNCi0gICAgICB9DQotICAgfQ0KLQ0KLSAgIHJldHVybiBDUllQVF9PSzsNCi19DQotDQotI2lmZGVmIENMRUFOX1NUQUNLDQotaW50ICBhbnViaXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkNCi17DQotICBpbnQgZXJyOw0KLSAgZXJyID0gX2FudWJpc19zZXR1cChrZXksIGtleWxlbiwgbnVtX3JvdW5kcywgc2tleSk7DQotICBidXJuX3N0YWNrKHNpemVvZihpbnQpICogNSArIHNpemVvZih1bG9uZzMyKSAqIChNQVhfTiArIE1BWF9OICsgNSkpOw0KLSAgcmV0dXJuIGVycjsNCi19DQotI2VuZGlmDQotICANCi0NCi1zdGF0aWMgdm9pZCBhbnViaXNfY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzMyIHJvdW5kS2V5WzE4ICsgMV1bNF0sIGludCBSKSB7DQotICAgaW50IGksIHBvcywgcjsNCi0gICB1bG9uZzMyIHN0YXRlWzRdOw0KLSAgIHVsb25nMzIgaW50ZXJbNF07DQotDQotICAgIC8qDQotICAgICogbWFwIHBsYWludGV4dCBibG9jayB0byBjaXBoZXIgc3RhdGUgKG11KQ0KLSAgICAqIGFuZCBhZGQgaW5pdGlhbCByb3VuZCBrZXkgKHNpZ21hW0teMF0pOg0KLSAgICAqLw0KLSAgICBmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgNDsgaSsrLCBwb3MgKz0gNCkgew0KLSAgICAgIHN0YXRlW2ldID0NCi0gICAgICAgICAocGxhaW50ZXh0W3BvcyAgICBdIDw8IDI0KSBeDQotICAgICAgICAgKHBsYWludGV4dFtwb3MgKyAxXSA8PCAxNikgXg0KLSAgICAgICAgIChwbGFpbnRleHRbcG9zICsgMl0gPDwgIDgpIF4NCi0gICAgICAgICAocGxhaW50ZXh0W3BvcyArIDNdICAgICAgKSBeDQotICAgICAgICAgcm91bmRLZXlbMF1baV07DQotICAgIH0NCi0NCi0gICAgLyoNCi0gICAgICogUiAtIDEgZnVsbCByb3VuZHM6DQotICAgICAqLw0KLSAgICBmb3IgKHIgPSAxOyByIDwgUjsgcisrKSB7DQotICAgICAgaW50ZXJbMF0gPQ0KLSAgICAgICAgIFQwWyhzdGF0ZVswXSA+PiAyNCkgICAgICAgXSBeDQotICAgICAgICAgVDFbKHN0YXRlWzFdID4+IDI0KSAgICAgICBdIF4NCi0gICAgICAgICBUMlsoc3RhdGVbMl0gPj4gMjQpICAgICAgIF0gXg0KLSAgICAgICAgIFQzWyhzdGF0ZVszXSA+PiAyNCkgICAgICAgXSBeDQotICAgICAgICAgcm91bmRLZXlbcl1bMF07DQotICAgICAgaW50ZXJbMV0gPQ0KLSAgICAgICAgIFQwWyhzdGF0ZVswXSA+PiAxNikgJiAweGZmXSBeDQotICAgICAgICAgVDFbKHN0YXRlWzFdID4+IDE2KSAmIDB4ZmZdIF4NCi0gICAgICAgICBUMlsoc3RhdGVbMl0gPj4gMTYpICYgMHhmZl0gXg0KLSAgICAgICAgIFQzWyhzdGF0ZVszXSA+PiAxNikgJiAweGZmXSBeDQotICAgICAgICAgcm91bmRLZXlbcl1bMV07DQotICAgICAgaW50ZXJbMl0gPQ0KLSAgICAgICAgIFQwWyhzdGF0ZVswXSA+PiAgOCkgJiAweGZmXSBeDQotICAgICAgICAgVDFbKHN0YXRlWzFdID4+ICA4KSAmIDB4ZmZdIF4NCi0gICAgICAgICBUMlsoc3RhdGVbMl0gPj4gIDgpICYgMHhmZl0gXg0KLSAgICAgICAgIFQzWyhzdGF0ZVszXSA+PiAgOCkgJiAweGZmXSBeDQotICAgICAgICAgcm91bmRLZXlbcl1bMl07DQotICAgICAgaW50ZXJbM10gPQ0KLSAgICAgICAgIFQwWyhzdGF0ZVswXSAgICAgICkgJiAweGZmXSBeDQotICAgICAgICAgVDFbKHN0YXRlWzFdICAgICAgKSAmIDB4ZmZdIF4NCi0gICAgICAgICBUMlsoc3RhdGVbMl0gICAgICApICYgMHhmZl0gXg0KLSAgICAgICAgIFQzWyhzdGF0ZVszXSAgICAgICkgJiAweGZmXSBeDQotICAgICAgICAgcm91bmRLZXlbcl1bM107DQotICAgICAgc3RhdGVbMF0gPSBpbnRlclswXTsNCi0gICAgICBzdGF0ZVsxXSA9IGludGVyWzFdOw0KLSAgICAgIHN0YXRlWzJdID0gaW50ZXJbMl07DQotICAgICAgc3RhdGVbM10gPSBpbnRlclszXTsNCi0gICAgfQ0KLQ0KLSAgICAvKg0KLSAgICAqIGxhc3Qgcm91bmQ6DQotICAgICovDQotICAgaW50ZXJbMF0gPQ0KLSAgICAgIChUMFsoc3RhdGVbMF0gPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwVSkgXg0KLSAgICAgIChUMVsoc3RhdGVbMV0gPj4gMjQpICAgICAgIF0gJiAweDAwZmYwMDAwVSkgXg0KLSAgICAgIChUMlsoc3RhdGVbMl0gPj4gMjQpICAgICAgIF0gJiAweDAwMDBmZjAwVSkgXg0KLSAgICAgIChUM1soc3RhdGVbM10gPj4gMjQpICAgICAgIF0gJiAweDAwMDAwMGZmVSkgXg0KLSAgICAgIHJvdW5kS2V5W1JdWzBdOw0KLSAgIGludGVyWzFdID0NCi0gICAgICAoVDBbKHN0YXRlWzBdID4+IDE2KSAmIDB4ZmZdICYgMHhmZjAwMDAwMFUpIF4NCi0gICAgICAoVDFbKHN0YXRlWzFdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4NCi0gICAgICAoVDJbKHN0YXRlWzJdID4+IDE2KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4NCi0gICAgICAoVDNbKHN0YXRlWzNdID4+IDE2KSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpIF4NCi0gICAgICByb3VuZEtleVtSXVsxXTsNCi0gICBpbnRlclsyXSA9DQotICAgICAgKFQwWyhzdGF0ZVswXSA+PiAgOCkgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeDQotICAgICAgKFQxWyhzdGF0ZVsxXSA+PiAgOCkgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeDQotICAgICAgKFQyWyhzdGF0ZVsyXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeDQotICAgICAgKFQzWyhzdGF0ZVszXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKSBeDQotICAgICAgcm91bmRLZXlbUl1bMl07DQotICAgaW50ZXJbM10gPQ0KLSAgICAgIChUMFsoc3RhdGVbMF0gICAgICApICYgMHhmZl0gJiAweGZmMDAwMDAwVSkgXg0KLSAgICAgIChUMVsoc3RhdGVbMV0gICAgICApICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXg0KLSAgICAgIChUMlsoc3RhdGVbMl0gICAgICApICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXg0KLSAgICAgIChUM1soc3RhdGVbM10gICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSkgXg0KLSAgICAgIHJvdW5kS2V5W1JdWzNdOw0KLQ0KLSAgIC8qDQotICAgICogbWFwIGNpcGhlciBzdGF0ZSB0byBjaXBoZXJ0ZXh0IGJsb2NrIChtdV57LTF9KToNCi0gICAgKi8NCi0gICAgZm9yIChpID0gMCwgcG9zID0gMDsgaSA8IDQ7IGkrKywgcG9zICs9IDQpIHsNCi0gICAgICAgIHVsb25nMzIgdyA9IGludGVyW2ldOw0KLSAgICAgICAgY2lwaGVydGV4dFtwb3MgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSh3ID4+IDI0KTsNCi0gICAgICAgIGNpcGhlcnRleHRbcG9zICsgMV0gPSAodW5zaWduZWQgY2hhcikodyA+PiAxNik7DQotICAgICAgICBjaXBoZXJ0ZXh0W3BvcyArIDJdID0gKHVuc2lnbmVkIGNoYXIpKHcgPj4gIDgpOw0KLSAgICAgICAgY2lwaGVydGV4dFtwb3MgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSh3ICAgICAgKTsNCi0gICAgfQ0KLX0NCi0NCi0vKioNCi0gIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEFudWJpcw0KLSAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQ0KLSAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpDQotICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZA0KLSovDQotdm9pZCBhbnViaXNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQ0KLXsNCi0gICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7DQotICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOw0KLSAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsNCi0gICBhbnViaXNfY3J5cHQocHQsIGN0LCBza2V5LT5hbnViaXMucm91bmRLZXlFbmMsIHNrZXktPmFudWJpcy5SKTsNCi19DQotDQotLyoqDQotICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBBbnViaXMNCi0gIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpDQotICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQ0KLSAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgDQotKi8NCi12b2lkIGFudWJpc19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpDQotew0KLSAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsNCi0gICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7DQotICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOw0KLSAgIGFudWJpc19jcnlwdChjdCwgcHQsIHNrZXktPmFudWJpcy5yb3VuZEtleURlYywgc2tleS0+YW51YmlzLlIpOw0KLX0NCi0NCi0vKioNCi0gIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBBbnViaXMgYmxvY2sgY2lwaGVyDQotICBAcmV0dXJuIENSWVBUX09LIGlmIGZ1bmN0aW9uYWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3QgaGFzIGJlZW4gZGlzYWJsZWQNCi0qLw0KLWludCBhbnViaXNfdGVzdCh2b2lkKQ0KLXsNCi0jaWYgIWRlZmluZWQoTFRDX1RFU1QpDQotICByZXR1cm4gQ1JZUFRfTk9QOw0KLSNlbHNlDQotICBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Qgew0KLSAgICAgaW50IGtleWxlbjsNCi0gICAgIHVuc2lnbmVkIGNoYXIgcHRbMTZdLCBjdFsxNl0sIGtleVs0MF07DQotICB9IHRlc3RzW10gPSB7DQotI2lmbmRlZiBBTlVCSVNfVFdFQUsNCi0gIC8qKioqIE9SSUdJTkFMIEFOVUJJUyAqKioqLw0KLSAgLyogMTI4IGJpdCBrZXlzICovDQotew0KLSAgIDE2LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4RjAsIDB4NjgsIDB4NjAsIDB4RkMsIDB4NjcsIDB4MzAsIDB4RTgsIDB4MTgsIA0KLSAgICAgMHhGMSwgMHgzMiwgMHhDNywgMHg4QSwgMHhGNCwgMHgxMywgMHgyQSwgMHhGRSB9LA0KLSAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAxNiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEE4LCAweDY2LCAweDg0LCAweDgwLCAweDA3LCAweDc0LCAweDVDLCAweDg5LCANCi0gICAgIDB4RkMsIDB4NUUsIDB4QjUsIDB4QkEsIDB4RDQsIDB4RkUsIDB4MzIsIDB4NkQgfSwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0NCi19LA0KLQ0KLSAgIC8qIDE2MC1iaXQga2V5cyAqLw0KLXsNCi0gICAyMCwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEJELCAweDVFLCAweDMyLCAweEJFLCAweDUxLCAweDY3LCAweEE4LCAweEUyLA0KLSAgICAgMHg3MiwgMHhENywgMHg5NSwgMHgwRiwgMHg4MywgMHhDNiwgMHg4QywgMHgzMSB9LA0KLSAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0NCi19LCB7DQotICAgMjAsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHg0QywgMHgxRiwgMHg4NiwgMHgyRSwgMHgxMSwgMHhFQiwgMHhDRSwgMHhFQiwNCi0gICAgIDB4RkUsIDB4QjksIDB4NzMsIDB4QzksIDB4REYsIDB4RUYsIDB4N0EsIDB4REIgfSwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9DQotfSwNCi0NCi0gIC8qIDE5Mi1iaXQga2V5cyAqLw0KLXsNCi0gICAyNCwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweDE3LCAweEFDLCAweDU3LCAweDQ0LCAweDlELCAweDU5LCAweDYxLCAweDY2LCANCi0gICAgIDB4RDAsIDB4QzcsIDB4OUUsIDB4MDQsIDB4N0MsIDB4QzcsIDB4NTgsIDB4RjAgfSwNCi0gICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9DQotfSwgew0KLSAgIDI0LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4NzEsIDB4NTIsIDB4QjQsIDB4RUIsIDB4MUQsIDB4QUEsIDB4MzYsIDB4RkQsIA0KLSAgICAgMHg1NywgMHgxNCwgMHg1RiwgMHg1NywgMHgwNCwgMHg5RiwgMHg3MCwgMHg3NCB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0NCi19LA0KLQ0KLSAgLyogMjI0LWJpdCBrZXlzICovDQotew0KLSAgIDI4LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4QTIsIDB4RjAsIDB4QTYsIDB4QjksIDB4MTcsIDB4OTMsIDB4MkEsIDB4M0IsIA0KLSAgICAgMHhFRiwgMHgwOCwgMHhFOCwgMHg3QSwgMHg1OCwgMHhENiwgMHhGOCwgMHg1MyB9LA0KLSAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9DQotfSwgew0KLSAgIDI4LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4RjAsIDB4Q0EsIDB4RkMsIDB4NzgsIDB4OEIsIDB4NEIsIDB4NEUsIDB4NTMsIA0KLSAgICAgMHg4QiwgMHhDNCwgMHgzMiwgMHg2QSwgMHhGNSwgMHhCOSwgMHgxQiwgMHg1RiB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9DQotfSwNCi0NCi0gIC8qIDI1Ni1iaXQga2V5cyAqLw0KLXsNCi0gICAzMiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEUwLCAweDg2LCAweEFDLCAweDQ1LCAweDZCLCAweDNDLCAweEU1LCAweDEzLCANCi0gICAgIDB4RUQsIDB4RjUsIDB4REYsIDB4REQsIDB4RDYsIDB4M0IsIDB4NzEsIDB4OTMgfSwNCi0gICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAzMiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweDUwLCAweDAxLCAweEI5LCAweEY1LCAweDIxLCAweEMxLCAweEMxLCAweDI5LCANCi0gICAgIDB4MDAsIDB4RDUsIDB4RUMsIDB4OTgsIDB4MkIsIDB4OUUsIDB4RTgsIDB4MjEgfSwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQ0KLX0sDQotDQotICAvKiAyODgtYml0IGtleXMgKi8NCi17DQotICAgMzYsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHhFOCwgMHhGNCwgMHhBRiwgMHgyQiwgMHgyMSwgMHhBMCwgMHg4NywgMHg5QiwgDQotICAgICAweDQxLCAweDk1LCAweEI5LCAweDcxLCAweDc1LCAweDc5LCAweDA0LCAweDdDIH0sDQotICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9DQotfSwgew0KLSAgIDM2LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4RTYsIDB4QTYsIDB4QTUsIDB4QkMsIDB4OEIsIDB4NjMsIDB4NkYsIDB4RTIsIA0KLSAgICAgMHhCRCwgMHhBNywgMHhBNywgMHg1MywgMHhBQiwgMHg0MCwgMHgyMiwgMHhFMCB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQ0KLX0sDQotDQotICAvKiAzMjAtYml0IGtleXMgKi8NCi17DQotICAgNDAsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHgxNywgMHgwNCwgMHhENywgMHgyQywgMHhDNiwgMHg4NSwgMHg3NiwgMHgwMiwgDQotICAgICAweDRCLCAweENDLCAweDM5LCAweDgwLCAweEQ4LCAweDIyLCAweEVBLCAweEE0IH0sDQotICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9DQotfSwgew0KLSAgIDQwLA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4N0EsIDB4NDEsIDB4RTYsIDB4N0QsIDB4NEYsIDB4RDgsIDB4NjQsIDB4RjAsIA0KLSAgICAgMHg0NCwgMHhBOCwgMHgzQywgMHg3MywgMHg4MSwgMHg3RSwgMHg1MywgMHhEOCB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQ0KLX0NCi0jZWxzZQ0KLSAgLyoqKiogVHdlYWtlZCBBTlVCSVMgKioqKi8NCi0gIC8qIDEyOCBiaXQga2V5cyAqLw0KLXsNCi0gICAxNiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEI4LCAweDM1LCAweEJELCAweEMzLCAweDM0LCAweDgyLCAweDlELCAweDgzLA0KLSAgICAgMHg3MSwgMHhCRiwgMHhBMywgMHg3MSwgMHhFNCwgMHhCMywgMHhDNCwgMHhGRCB9LA0KLSAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAxNiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEU2LCAweDE0LCAweDFFLCAweEFGLCAweEVCLCAweEUwLCAweDU5LCAweDNDLA0KLSAgICAgMHg0OCwgMHhFMSwgMHhDRCwgMHhGMiwgMHgxQiwgMHhCQSwgMHhBMSwgMHg4OSB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQ0KLX0sDQotDQotICAgLyogMTYwLWJpdCBrZXlzICovDQotew0KLSAgIDIwLA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4OTcsIDB4NTksIDB4NzksIDB4NEIsIDB4NUMsIDB4QTAsIDB4NzAsIDB4NzMsDQotICAgICAweDI0LCAweEVGLCAweEIzLCAweDU4LCAweDY3LCAweENBLCAweEQ0LCAweEIzIH0sDQotICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAyMCwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEI4LCAweDBELCAweEZCLCAweDlCLCAweEU0LCAweEExLCAweDU4LCAweDg3LA0KLSAgICAgMHhCMywgMHg3NiwgMHhENSwgMHgwMiwgMHgxOCwgMHg5NSwgMHhDMSwgMHgyRSB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxIH0NCi19LA0KLQ0KLSAgLyogMTkyLWJpdCBrZXlzICovDQotew0KLSAgIDI0LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4N0QsIDB4NjIsIDB4M0IsIDB4NTIsIDB4QzcsIDB4NEMsIDB4NjQsIDB4RDgsDQotICAgICAweEVCLCAweEM3LCAweDJELCAweDU3LCAweDk3LCAweDg1LCAweDQzLCAweDhGIH0sDQotICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAyNCwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEIxLCAweDBBLCAweDU5LCAweERELCAweDVELCAweDVELCAweDhELCAweDY3LA0KLSAgICAgMHhFQywgMHhFRSwgMHg0QSwgMHhDNCwgMHhCRSwgMHg0RiwgMHhBOCwgMHg0RiB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0NCi19LA0KLQ0KLSAgLyogMjI0LWJpdCBrZXlzICovDQotew0KLSAgIDI4LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwNCi0gICB7IDB4NjgsIDB4OUUsIDB4MDUsIDB4OTQsIDB4NkEsIDB4OTQsIDB4NDMsIDB4OEYsDQotICAgICAweEU3LCAweDhFLCAweDM3LCAweDNELCAweDI0LCAweDk3LCAweDkyLCAweEY1IH0sDQotICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0NCi19LCB7DQotICAgMjgsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHhERCwgMHhCNywgMHhCMCwgMHhCNCwgMHhFOSwgMHhCNCwgMHg5QiwgMHg5QywNCi0gICAgIDB4MzgsIDB4MjAsIDB4MjUsIDB4MEIsIDB4NDcsIDB4QzIsIDB4MUYsIDB4ODkgfSwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQ0KLX0sDQotDQotICAvKiAyNTYtYml0IGtleXMgKi8NCi17DQotICAgMzIsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHg5NiwgMHgwMCwgMHhGMCwgMHg3NiwgMHg5MSwgMHg2OSwgMHgyOSwgMHg4NywNCi0gICAgIDB4RjUsIDB4RTUsIDB4OTcsIDB4REIsIDB4REIsIDB4QUYsIDB4MUIsIDB4MEEgfSwNCi0gICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAzMiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweDY5LCAweDlDLCAweEFGLCAweERELCAweDk0LCAweEM3LCAweEJDLCAweDYwLA0KLSAgICAgMHg0NCwgMHhGRSwgMHgwMiwgMHgwNSwgMHg4QSwgMHg2RSwgMHhFRiwgMHhCRCB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9DQotfSwNCi0NCi0gIC8qIDI4OC1iaXQga2V5cyAqLw0KLXsNCi0gICAzNiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweDBGLCAweEM3LCAweEEyLCAweEMwLCAweDExLCAweDE3LCAweEFDLCAweDQzLA0KLSAgICAgMHg1MiwgMHg1RSwgMHhERiwgMHg2QywgMHhGMywgMHg5NiwgMHgzMywgMHg2QyB9LA0KLSAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQ0KLX0sIHsNCi0gICAzNiwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sDQotICAgeyAweEFELCAweDA4LCAweDRGLCAweEVELCAweDU1LCAweEE2LCAweDk0LCAweDNFLA0KLSAgICAgMHg3RSwgMHg1RSwgMHhFRCwgMHgwNSwgMHhBMSwgMHg5RCwgMHg0MSwgMHhCNCB9LA0KLSAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQ0KLX0sDQotDQotICAvKiAzMjAtYml0IGtleXMgKi8NCi17DQotICAgNDAsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHhGRSwgMHhFMiwgMHgwRSwgMHgyQSwgMHg5RCwgMHhDNSwgMHg4MywgMHhCQSwNCi0gICAgIDB4QTMsIDB4QTYsIDB4RDYsIDB4QTYsIDB4RjIsIDB4RTgsIDB4MDYsIDB4QTUgfSwNCi0gICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0NCi19LCB7DQotICAgNDAsDQotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LA0KLSAgIHsgMHg4NiwgMHgzRCwgMHhDQywgMHg0QSwgMHg2MCwgMHgzNCwgMHg5QywgMHgyOCwNCi0gICAgIDB4QTcsIDB4REEsIDB4QTQsIDB4M0IsIDB4MEEsIDB4RDcsIDB4RkQsIDB4QzcgfSwNCi0gICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KLSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQotICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0NCi19DQotI2VuZGlmDQotfTsNCi0gICBpbnQgeCwgeTsNCi0gICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVsxNl07DQotICAgc3ltbWV0cmljX2tleSBza2V5Ow0KLQ0KLSAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsNCi0gICAgICAgYW51YmlzX3NldHVwKHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLCAwLCAmc2tleSk7DQotICAgICAgIGFudWJpc19lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgYnVmWzBdLCAmc2tleSk7DQotICAgICAgIGFudWJpc19lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgJnNrZXkpOw0KLSAgICAgICBpZiAobWVtY21wKGJ1ZlswXSwgdGVzdHNbeF0uY3QsIDE2KSB8fCBtZW1jbXAoYnVmWzFdLCB0ZXN0c1t4XS5wdCwgMTYpKSB7DQotICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7DQotICAgICAgIH0NCi0NCi0gICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgYW51YmlzX2VjYl9lbmNyeXB0KGJ1ZlswXSwgYnVmWzBdLCAmc2tleSk7DQotICAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIGFudWJpc19lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlswXSwgJnNrZXkpOw0KLSAgICAgICBpZiAobWVtY21wKGJ1ZlswXSwgdGVzdHNbeF0uY3QsIDE2KSkgew0KLSAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOw0KLSAgICAgICB9DQotDQotICAgfQ0KLSAgIHJldHVybiBDUllQVF9PSzsNCi0jZW5kaWYNCi19DQotDQotLyoqIFRlcm1pbmF0ZSB0aGUgY29udGV4dCANCi0gICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQ0KLSovDQotdm9pZCBhbnViaXNfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQ0KLXsNCi19DQotDQotLyoqDQotICBHZXRzIHN1aXRhYmxlIGtleSBzaXplDQotICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuDQotICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLg0KLSovDQotaW50IGFudWJpc19rZXlzaXplKGludCAqa2V5c2l6ZSkNCi17DQotICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOw0KLSAgIGlmICgqa2V5c2l6ZSA+PSA0MCkgew0KLSAgICAgICprZXlzaXplID0gNDA7DQotICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAzNikgew0KLSAgICAgICprZXlzaXplID0gMzY7DQotICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAzMikgew0KLSAgICAgICprZXlzaXplID0gMzI7DQotICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAyOCkgew0KLSAgICAgICprZXlzaXplID0gMjg7DQotICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAyNCkgew0KLSAgICAgICprZXlzaXplID0gMjQ7DQotICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAyMCkgew0KLSAgICAgICprZXlzaXplID0gMjA7DQotICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAxNikgew0KLSAgICAgICprZXlzaXplID0gMTY7DQotICAgfSBlbHNlIHsNCi0gICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOw0KLSAgIH0NCi0gICByZXR1cm4gQ1JZUFRfT0s7DQotfQ0KLQ0KLSNlbmRpZg0KLQ0KKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICBAZmlsZSBhbnViaXMuYworICBBbnViaXMgaW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIHB1YmxpYyBkb21haW4gc291cmNlCisgIEF1dGhvcnM6IFBhdWxvIFMuTC5NLiBCYXJyZXRvIGFuZCBWaW5jZW50IFJpam1lbi4KKyovCisKKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgQU5VQklTCisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgYW51YmlzX2Rlc2MgPSB7CisgICAiYW51YmlzIiwKKyAgIDE5LAorICAgMTYsIDQwLCAxNiwgMTIsCisgICAmYW51YmlzX3NldHVwLAorICAgJmFudWJpc19lY2JfZW5jcnlwdCwKKyAgICZhbnViaXNfZWNiX2RlY3J5cHQsCisgICAmYW51YmlzX3Rlc3QsCisgICAmYW51YmlzX2RvbmUsCisgICAmYW51YmlzX2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCisjZGVmaW5lIE1JTl9OICAgICAgICAgICA0IAorI2RlZmluZSBNQVhfTiAgICAgICAgICAgMTAgCisjZGVmaW5lIE1JTl9ST1VORFMgICAgICAoOCArIE1JTl9OKSAKKyNkZWZpbmUgTUFYX1JPVU5EUyAgICAgICg4ICsgTUFYX04pIAorI2RlZmluZSBNSU5fS0VZU0laRUIgICAgKDQqTUlOX04pIAorI2RlZmluZSBNQVhfS0VZU0laRUIgICAgKDQqTUFYX04pIAorI2RlZmluZSBCTE9DS1NJWkUgICAgICAgMTI4IAorI2RlZmluZSBCTE9DS1NJWkVCICAgICAgKEJMT0NLU0laRS84KSAKKworCisvKgorICogVGhvdWdoIEFudWJpcyBpcyBlbmRpYW5uZXNzLW5ldXRyYWwsIHRoZSBlbmNyeXB0aW9uIHRhYmxlcyBhcmUgbGlzdGVkCisgKiBpbiBCSUctRU5ESUFOIGZvcm1hdCwgd2hpY2ggaXMgYWRvcHRlZCB0aHJvdWdob3V0IHRoaXMgaW1wbGVtZW50YXRpb24KKyAqIChidXQgbGl0dGxlLWVuZGlhbiBub3RhdGlvbiB3b3VsZCBiZSBlcXVhbGx5IHN1aXRhYmxlIGlmIGNvbnNpc3RlbnRseQorICogZW1wbG95ZWQpLgorICovCisjaWYgZGVmaW5lZChBTlVCSVNfVFdFQUspCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQwWzI1Nl0gPSB7CisgICAgMHhiYTY5ZDJiYlUsIDB4NTRhODRkZTVVLCAweDJmNWViY2UyVSwgMHg3NGU4Y2QyNVUsCisgICAgMHg1M2E2NTFmN1UsIDB4ZDNiYjZiZDBVLCAweGQyYjk2ZmQ2VSwgMHg0ZDlhMjliM1UsCisgICAgMHg1MGEwNWRmZFUsIDB4YWM0NThhY2ZVLCAweDhkMDcwZTA5VSwgMHhiZjYzYzZhNVUsCisgICAgMHg3MGUwZGQzZFUsIDB4NTJhNDU1ZjFVLCAweDlhMjk1MjdiVSwgMHg0Yzk4MmRiNVUsCisgICAgMHhlYWM5OGY0NlUsIDB4ZDViNzczYzRVLCAweDk3MzM2NjU1VSwgMHhkMWJmNjNkY1UsCisgICAgMHgzMzY2Y2NhYVUsIDB4NTFhMjU5ZmJVLCAweDViYjY3MWM3VSwgMHhhNjUxYTJmM1UsCisgICAgMHhkZWExNWZmZVUsIDB4NDg5MDNkYWRVLCAweGE4NGQ5YWQ3VSwgMHg5OTJmNWU3MVUsCisgICAgMHhkYmFiNGJlMFUsIDB4MzI2NGM4YWNVLCAweGI3NzNlNjk1VSwgMHhmY2U1ZDczMlUsCisgICAgMHhlM2RiYWI3MFUsIDB4OWUyMTQyNjNVLCAweDkxM2Y3ZTQxVSwgMHg5YjJiNTY3ZFUsCisgICAgMHhlMmQ5YWY3NlUsIDB4YmI2YmQ2YmRVLCAweDQxODIxOTliVSwgMHg2ZWRjYTU3OVUsCisgICAgMHhhNTU3YWVmOVUsIDB4Y2I4YjBiODBVLCAweDZiZDZiMTY3VSwgMHg5NTM3NmU1OVUsCisgICAgMHhhMTVmYmVlMVUsIDB4ZjNmYmViMTBVLCAweGIxN2ZmZTgxVSwgMHgwMjA0MDgwY1UsCisgICAgMHhjYzg1MTc5MlUsIDB4YzQ5NTM3YTJVLCAweDFkM2E3NDRlVSwgMHgxNDI4NTA3OFUsCisgICAgMHhjMzliMmJiMFUsIDB4NjNjNjkxNTdVLCAweGRhYTk0ZmU2VSwgMHg1ZGJhNjlkM1UsCisgICAgMHg1ZmJlNjFkZlUsIDB4ZGNhNTU3ZjJVLCAweDdkZmFlOTEzVSwgMHhjZDg3MTM5NFUsCisgICAgMHg3ZmZlZTExZlUsIDB4NWFiNDc1YzFVLCAweDZjZDhhZDc1VSwgMHg1Y2I4NmRkNVUsCisgICAgMHhmN2YzZmIwOFUsIDB4MjY0Yzk4ZDRVLCAweGZmZTNkYjM4VSwgMHhlZGM3OTM1NFUsCisgICAgMHhlOGNkODc0YVUsIDB4OWQyNzRlNjlVLCAweDZmZGVhMTdmVSwgMHg4ZTAxMDIwM1UsCisgICAgMHgxOTMyNjQ1NlUsIDB4YTA1ZGJhZTdVLCAweGYwZmRlNzFhVSwgMHg4OTBmMWUxMVUsCisgICAgMHgwZjFlM2MyMlUsIDB4MDcwZTFjMTJVLCAweGFmNDM4NmM1VSwgMHhmYmViY2IyMFUsCisgICAgMHgwODEwMjAzMFUsIDB4MTUyYTU0N2VVLCAweDBkMWEzNDJlVSwgMHgwNDA4MTAxOFUsCisgICAgMHgwMTAyMDQwNlUsIDB4NjRjODhkNDVVLCAweGRmYTM1YmY4VSwgMHg3NmVjYzUyOVUsCisgICAgMHg3OWYyZjkwYlUsIDB4ZGRhNzUzZjRVLCAweDNkN2FmNDhlVSwgMHgxNjJjNTg3NFUsCisgICAgMHgzZjdlZmM4MlUsIDB4Mzc2ZWRjYjJVLCAweDZkZGFhOTczVSwgMHgzODcwZTA5MFUsCisgICAgMHhiOTZmZGViMVUsIDB4NzNlNmQxMzdVLCAweGU5Y2Y4MzRjVSwgMHgzNTZhZDRiZVUsCisgICAgMHg1NWFhNDllM1UsIDB4NzFlMmQ5M2JVLCAweDdiZjZmMTA3VSwgMHg4YzA1MGEwZlUsCisgICAgMHg3MmU0ZDUzMVUsIDB4ODgwZDFhMTdVLCAweGY2ZjFmZjBlVSwgMHgyYTU0YThmY1UsCisgICAgMHgzZTdjZjg4NFUsIDB4NWViYzY1ZDlVLCAweDI3NGU5Y2QyVSwgMHg0NjhjMDU4OVUsCisgICAgMHgwYzE4MzAyOFUsIDB4NjVjYTg5NDNVLCAweDY4ZDBiZDZkVSwgMHg2MWMyOTk1YlUsCisgICAgMHgwMzA2MGMwYVUsIDB4YzE5ZjIzYmNVLCAweDU3YWU0MWVmVSwgMHhkNmIxN2ZjZVUsCisgICAgMHhkOWFmNDNlY1UsIDB4NThiMDdkY2RVLCAweGQ4YWQ0N2VhVSwgMHg2NmNjODU0OVUsCisgICAgMHhkN2IzN2JjOFUsIDB4M2E3NGU4OWNVLCAweGM4OGQwNzhhVSwgMHgzYzc4ZjA4OFUsCisgICAgMHhmYWU5Y2YyNlUsIDB4OTYzMTYyNTNVLCAweGE3NTNhNmY1VSwgMHg5ODJkNWE3N1UsCisgICAgMHhlY2M1OTc1MlUsIDB4Yjg2ZGRhYjdVLCAweGM3OTMzYmE4VSwgMHhhZTQxODJjM1UsCisgICAgMHg2OWQyYjk2YlUsIDB4NGI5NjMxYTdVLCAweGFiNGI5NmRkVSwgMHhhOTRmOWVkMVUsCisgICAgMHg2N2NlODE0ZlUsIDB4MGExNDI4M2NVLCAweDQ3OGUwMThmVSwgMHhmMmY5ZWYxNlUsCisgICAgMHhiNTc3ZWU5OVUsIDB4MjI0NDg4Y2NVLCAweGU1ZDdiMzY0VSwgMHhlZWMxOWY1ZVUsCisgICAgMHhiZTYxYzJhM1UsIDB4MmI1NmFjZmFVLCAweDgxMWYzZTIxVSwgMHgxMjI0NDg2Y1UsCisgICAgMHg4MzFiMzYyZFUsIDB4MWIzNjZjNWFVLCAweDBlMWMzODI0VSwgMHgyMzQ2OGNjYVUsCisgICAgMHhmNWY3ZjMwNFUsIDB4NDU4YTA5ODNVLCAweDIxNDI4NGM2VSwgMHhjZTgxMWY5ZVUsCisgICAgMHg0OTkyMzlhYlUsIDB4MmM1OGIwZThVLCAweGY5ZWZjMzJjVSwgMHhlNmQxYmY2ZVUsCisgICAgMHhiNjcxZTI5M1UsIDB4Mjg1MGEwZjBVLCAweDE3MmU1YzcyVSwgMHg4MjE5MzIyYlUsCisgICAgMHgxYTM0Njg1Y1UsIDB4OGIwYjE2MWRVLCAweGZlZTFkZjNlVSwgMHg4YTA5MTIxYlUsCisgICAgMHgwOTEyMjQzNlUsIDB4Yzk4ZjAzOGNVLCAweDg3MTMyNjM1VSwgMHg0ZTljMjViOVUsCisgICAgMHhlMWRmYTM3Y1UsIDB4MmU1Y2I4ZTRVLCAweGU0ZDViNzYyVSwgMHhlMGRkYTc3YVUsCisgICAgMHhlYmNiOGI0MFUsIDB4OTAzZDdhNDdVLCAweGE0NTVhYWZmVSwgMHgxZTNjNzg0NFUsCisgICAgMHg4NTE3MmUzOVUsIDB4NjBjMDlkNWRVLCAweDAwMDAwMDAwVSwgMHgyNTRhOTRkZVUsCisgICAgMHhmNGY1ZjcwMlUsIDB4ZjFmZmUzMWNVLCAweDk0MzU2YTVmVSwgMHgwYjE2MmMzYVUsCisgICAgMHhlN2QzYmI2OFUsIDB4NzVlYWM5MjNVLCAweGVmYzM5YjU4VSwgMHgzNDY4ZDBiOFUsCisgICAgMHgzMTYyYzRhNlUsIDB4ZDRiNTc3YzJVLCAweGQwYmQ2N2RhVSwgMHg4NjExMjIzM1UsCisgICAgMHg3ZWZjZTUxOVUsIDB4YWQ0NzhlYzlVLCAweGZkZTdkMzM0VSwgMHgyOTUyYTRmNlUsCisgICAgMHgzMDYwYzBhMFUsIDB4M2I3NmVjOWFVLCAweDlmMjM0NjY1VSwgMHhmOGVkYzcyYVUsCisgICAgMHhjNjkxM2ZhZVUsIDB4MTMyNjRjNmFVLCAweDA2MGMxODE0VSwgMHgwNTBhMTQxZVUsCisgICAgMHhjNTk3MzNhNFUsIDB4MTEyMjQ0NjZVLCAweDc3ZWVjMTJmVSwgMHg3Y2Y4ZWQxNVUsCisgICAgMHg3YWY0ZjUwMVUsIDB4NzhmMGZkMGRVLCAweDM2NmNkOGI0VSwgMHgxYzM4NzA0OFUsCisgICAgMHgzOTcyZTQ5NlUsIDB4NTliMjc5Y2JVLCAweDE4MzA2MDUwVSwgMHg1NmFjNDVlOVUsCisgICAgMHhiMzdiZjY4ZFUsIDB4YjA3ZGZhODdVLCAweDI0NDg5MGQ4VSwgMHgyMDQwODBjMFUsCisgICAgMHhiMjc5ZjI4YlUsIDB4OTIzOTcyNGJVLCAweGEzNWJiNmVkVSwgMHhjMDlkMjdiYVUsCisgICAgMHg0NDg4MGQ4NVUsIDB4NjJjNDk1NTFVLCAweDEwMjA0MDYwVSwgMHhiNDc1ZWE5ZlUsCisgICAgMHg4NDE1MmEzZlUsIDB4NDM4NjExOTdVLCAweDkzM2I3NjRkVSwgMHhjMjk5MmZiNlUsCisgICAgMHg0YTk0MzVhMVUsIDB4YmQ2N2NlYTlVLCAweDhmMDMwNjA1VSwgMHgyZDVhYjRlZVUsCisgICAgMHhiYzY1Y2FhZlUsIDB4OWMyNTRhNmZVLCAweDZhZDRiNTYxVSwgMHg0MDgwMWQ5ZFUsCisgICAgMHhjZjgzMWI5OFUsIDB4YTI1OWIyZWJVLCAweDgwMWQzYTI3VSwgMHg0ZjllMjFiZlUsCisgICAgMHgxZjNlN2M0MlUsIDB4Y2E4OTBmODZVLCAweGFhNDk5MmRiVSwgMHg0Mjg0MTU5MVUsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUMVsyNTZdID0geworICAgIDB4NjliYWJiZDJVLCAweGE4NTRlNTRkVSwgMHg1ZTJmZTJiY1UsIDB4ZTg3NDI1Y2RVLAorICAgIDB4YTY1M2Y3NTFVLCAweGJiZDNkMDZiVSwgMHhiOWQyZDY2ZlUsIDB4OWE0ZGIzMjlVLAorICAgIDB4YTA1MGZkNWRVLCAweDQ1YWNjZjhhVSwgMHgwNzhkMDkwZVUsIDB4NjNiZmE1YzZVLAorICAgIDB4ZTA3MDNkZGRVLCAweGE0NTJmMTU1VSwgMHgyOTlhN2I1MlUsIDB4OTg0Y2I1MmRVLAorICAgIDB4YzllYTQ2OGZVLCAweGI3ZDVjNDczVSwgMHgzMzk3NTU2NlUsIDB4YmZkMWRjNjNVLAorICAgIDB4NjYzM2FhY2NVLCAweGEyNTFmYjU5VSwgMHhiNjViYzc3MVUsIDB4NTFhNmYzYTJVLAorICAgIDB4YTFkZWZlNWZVLCAweDkwNDhhZDNkVSwgMHg0ZGE4ZDc5YVUsIDB4MmY5OTcxNWVVLAorICAgIDB4YWJkYmUwNGJVLCAweDY0MzJhY2M4VSwgMHg3M2I3OTVlNlUsIDB4ZTVmYzMyZDdVLAorICAgIDB4ZGJlMzcwYWJVLCAweDIxOWU2MzQyVSwgMHgzZjkxNDE3ZVUsIDB4MmI5YjdkNTZVLAorICAgIDB4ZDllMjc2YWZVLCAweDZiYmJiZGQ2VSwgMHg4MjQxOWIxOVUsIDB4ZGM2ZTc5YTVVLAorICAgIDB4NTdhNWY5YWVVLCAweDhiY2I4MDBiVSwgMHhkNjZiNjdiMVUsIDB4Mzc5NTU5NmVVLAorICAgIDB4NWZhMWUxYmVVLCAweGZiZjMxMGViVSwgMHg3ZmIxODFmZVUsIDB4MDQwMjBjMDhVLAorICAgIDB4ODVjYzkyMTdVLCAweDk1YzRhMjM3VSwgMHgzYTFkNGU3NFUsIDB4MjgxNDc4NTBVLAorICAgIDB4OWJjM2IwMmJVLCAweGM2NjM1NzkxVSwgMHhhOWRhZTY0ZlUsIDB4YmE1ZGQzNjlVLAorICAgIDB4YmU1ZmRmNjFVLCAweGE1ZGNmMjU3VSwgMHhmYTdkMTNlOVUsIDB4ODdjZDk0MTNVLAorICAgIDB4ZmU3ZjFmZTFVLCAweGI0NWFjMTc1VSwgMHhkODZjNzVhZFUsIDB4Yjg1Y2Q1NmRVLAorICAgIDB4ZjNmNzA4ZmJVLCAweDRjMjZkNDk4VSwgMHhlM2ZmMzhkYlUsIDB4YzdlZDU0OTNVLAorICAgIDB4Y2RlODRhODdVLCAweDI3OWQ2OTRlVSwgMHhkZTZmN2ZhMVUsIDB4MDE4ZTAzMDJVLAorICAgIDB4MzIxOTU2NjRVLCAweDVkYTBlN2JhVSwgMHhmZGYwMWFlN1UsIDB4MGY4OTExMWVVLAorICAgIDB4MWUwZjIyM2NVLCAweDBlMDcxMjFjVSwgMHg0M2FmYzU4NlUsIDB4ZWJmYjIwY2JVLAorICAgIDB4MTAwODMwMjBVLCAweDJhMTU3ZTU0VSwgMHgxYTBkMmUzNFUsIDB4MDgwNDE4MTBVLAorICAgIDB4MDIwMTA2MDRVLCAweGM4NjQ0NThkVSwgMHhhM2RmZjg1YlUsIDB4ZWM3NjI5YzVVLAorICAgIDB4ZjI3OTBiZjlVLCAweGE3ZGRmNDUzVSwgMHg3YTNkOGVmNFUsIDB4MmMxNjc0NThVLAorICAgIDB4N2UzZjgyZmNVLCAweDZlMzdiMmRjVSwgMHhkYTZkNzNhOVUsIDB4NzAzODkwZTBVLAorICAgIDB4NmZiOWIxZGVVLCAweGU2NzMzN2QxVSwgMHhjZmU5NGM4M1UsIDB4NmEzNWJlZDRVLAorICAgIDB4YWE1NWUzNDlVLCAweGUyNzEzYmQ5VSwgMHhmNjdiMDdmMVUsIDB4MDU4YzBmMGFVLAorICAgIDB4ZTQ3MjMxZDVVLCAweDBkODgxNzFhVSwgMHhmMWY2MGVmZlUsIDB4NTQyYWZjYThVLAorICAgIDB4N2MzZTg0ZjhVLCAweGJjNWVkOTY1VSwgMHg0ZTI3ZDI5Y1UsIDB4OGM0Njg5MDVVLAorICAgIDB4MTgwYzI4MzBVLCAweGNhNjU0Mzg5VSwgMHhkMDY4NmRiZFUsIDB4YzI2MTViOTlVLAorICAgIDB4MDYwMzBhMGNVLCAweDlmYzFiYzIzVSwgMHhhZTU3ZWY0MVUsIDB4YjFkNmNlN2ZVLAorICAgIDB4YWZkOWVjNDNVLCAweGIwNThjZDdkVSwgMHhhZGQ4ZWE0N1UsIDB4Y2M2NjQ5ODVVLAorICAgIDB4YjNkN2M4N2JVLCAweDc0M2E5Y2U4VSwgMHg4ZGM4OGEwN1UsIDB4NzgzYzg4ZjBVLAorICAgIDB4ZTlmYTI2Y2ZVLCAweDMxOTY1MzYyVSwgMHg1M2E3ZjVhNlUsIDB4MmQ5ODc3NWFVLAorICAgIDB4YzVlYzUyOTdVLCAweDZkYjhiN2RhVSwgMHg5M2M3YTgzYlUsIDB4NDFhZWMzODJVLAorICAgIDB4ZDI2OTZiYjlVLCAweDk2NGJhNzMxVSwgMHg0YmFiZGQ5NlUsIDB4NGZhOWQxOWVVLAorICAgIDB4Y2U2NzRmODFVLCAweDE0MGEzYzI4VSwgMHg4ZTQ3OGYwMVUsIDB4ZjlmMjE2ZWZVLAorICAgIDB4NzdiNTk5ZWVVLCAweDQ0MjJjYzg4VSwgMHhkN2U1NjRiM1UsIDB4YzFlZTVlOWZVLAorICAgIDB4NjFiZWEzYzJVLCAweDU2MmJmYWFjVSwgMHgxZjgxMjEzZVUsIDB4MjQxMjZjNDhVLAorICAgIDB4MWI4MzJkMzZVLCAweDM2MWI1YTZjVSwgMHgxYzBlMjQzOFUsIDB4NDYyM2NhOGNVLAorICAgIDB4ZjdmNTA0ZjNVLCAweDhhNDU4MzA5VSwgMHg0MjIxYzY4NFUsIDB4ODFjZTllMWZVLAorICAgIDB4OTI0OWFiMzlVLCAweDU4MmNlOGIwVSwgMHhlZmY5MmNjM1UsIDB4ZDFlNjZlYmZVLAorICAgIDB4NzFiNjkzZTJVLCAweDUwMjhmMGEwVSwgMHgyZTE3NzI1Y1UsIDB4MTk4MjJiMzJVLAorICAgIDB4MzQxYTVjNjhVLCAweDBiOGIxZDE2VSwgMHhlMWZlM2VkZlUsIDB4MDk4YTFiMTJVLAorICAgIDB4MTIwOTM2MjRVLCAweDhmYzk4YzAzVSwgMHgxMzg3MzUyNlUsIDB4OWM0ZWI5MjVVLAorICAgIDB4ZGZlMTdjYTNVLCAweDVjMmVlNGI4VSwgMHhkNWU0NjJiN1UsIDB4ZGRlMDdhYTdVLAorICAgIDB4Y2JlYjQwOGJVLCAweDNkOTA0NzdhVSwgMHg1NWE0ZmZhYVUsIDB4M2MxZTQ0NzhVLAorICAgIDB4MTc4NTM5MmVVLCAweGMwNjA1ZDlkVSwgMHgwMDAwMDAwMFUsIDB4NGEyNWRlOTRVLAorICAgIDB4ZjVmNDAyZjdVLCAweGZmZjExY2UzVSwgMHgzNTk0NWY2YVUsIDB4MTYwYjNhMmNVLAorICAgIDB4ZDNlNzY4YmJVLCAweGVhNzUyM2M5VSwgMHhjM2VmNTg5YlUsIDB4NjgzNGI4ZDBVLAorICAgIDB4NjIzMWE2YzRVLCAweGI1ZDRjMjc3VSwgMHhiZGQwZGE2N1UsIDB4MTE4NjMzMjJVLAorICAgIDB4ZmM3ZTE5ZTVVLCAweDQ3YWRjOThlVSwgMHhlN2ZkMzRkM1UsIDB4NTIyOWY2YTRVLAorICAgIDB4NjAzMGEwYzBVLCAweDc2M2I5YWVjVSwgMHgyMzlmNjU0NlUsIDB4ZWRmODJhYzdVLAorICAgIDB4OTFjNmFlM2ZVLCAweDI2MTM2YTRjVSwgMHgwYzA2MTQxOFUsIDB4MGEwNTFlMTRVLAorICAgIDB4OTdjNWE0MzNVLCAweDIyMTE2NjQ0VSwgMHhlZTc3MmZjMVUsIDB4Zjg3YzE1ZWRVLAorICAgIDB4ZjQ3YTAxZjVVLCAweGYwNzgwZGZkVSwgMHg2YzM2YjRkOFUsIDB4MzgxYzQ4NzBVLAorICAgIDB4NzIzOTk2ZTRVLCAweGIyNTljYjc5VSwgMHgzMDE4NTA2MFUsIDB4YWM1NmU5NDVVLAorICAgIDB4N2JiMzhkZjZVLCAweDdkYjA4N2ZhVSwgMHg0ODI0ZDg5MFUsIDB4NDAyMGMwODBVLAorICAgIDB4NzliMjhiZjJVLCAweDM5OTI0YjcyVSwgMHg1YmEzZWRiNlUsIDB4OWRjMGJhMjdVLAorICAgIDB4ODg0NDg1MGRVLCAweGM0NjI1MTk1VSwgMHgyMDEwNjA0MFUsIDB4NzViNDlmZWFVLAorICAgIDB4MTU4NDNmMmFVLCAweDg2NDM5NzExVSwgMHgzYjkzNGQ3NlUsIDB4OTljMmI2MmZVLAorICAgIDB4OTQ0YWExMzVVLCAweDY3YmRhOWNlVSwgMHgwMzhmMDUwNlUsIDB4NWEyZGVlYjRVLAorICAgIDB4NjViY2FmY2FVLCAweDI1OWM2ZjRhVSwgMHhkNDZhNjFiNVUsIDB4ODA0MDlkMWRVLAorICAgIDB4ODNjZjk4MWJVLCAweDU5YTJlYmIyVSwgMHgxZDgwMjczYVUsIDB4OWU0ZmJmMjFVLAorICAgIDB4M2UxZjQyN2NVLCAweDg5Y2E4NjBmVSwgMHg0OWFhZGI5MlUsIDB4ODQ0MjkxMTVVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDJbMjU2XSA9IHsKKyAgICAweGQyYmJiYTY5VSwgMHg0ZGU1NTRhOFUsIDB4YmNlMjJmNWVVLCAweGNkMjU3NGU4VSwKKyAgICAweDUxZjc1M2E2VSwgMHg2YmQwZDNiYlUsIDB4NmZkNmQyYjlVLCAweDI5YjM0ZDlhVSwKKyAgICAweDVkZmQ1MGEwVSwgMHg4YWNmYWM0NVUsIDB4MGUwOThkMDdVLCAweGM2YTViZjYzVSwKKyAgICAweGRkM2Q3MGUwVSwgMHg1NWYxNTJhNFUsIDB4NTI3YjlhMjlVLCAweDJkYjU0Yzk4VSwKKyAgICAweDhmNDZlYWM5VSwgMHg3M2M0ZDViN1UsIDB4NjY1NTk3MzNVLCAweDYzZGNkMWJmVSwKKyAgICAweGNjYWEzMzY2VSwgMHg1OWZiNTFhMlUsIDB4NzFjNzViYjZVLCAweGEyZjNhNjUxVSwKKyAgICAweDVmZmVkZWExVSwgMHgzZGFkNDg5MFUsIDB4OWFkN2E4NGRVLCAweDVlNzE5OTJmVSwKKyAgICAweDRiZTBkYmFiVSwgMHhjOGFjMzI2NFUsIDB4ZTY5NWI3NzNVLCAweGQ3MzJmY2U1VSwKKyAgICAweGFiNzBlM2RiVSwgMHg0MjYzOWUyMVUsIDB4N2U0MTkxM2ZVLCAweDU2N2Q5YjJiVSwKKyAgICAweGFmNzZlMmQ5VSwgMHhkNmJkYmI2YlUsIDB4MTk5YjQxODJVLCAweGE1Nzk2ZWRjVSwKKyAgICAweGFlZjlhNTU3VSwgMHgwYjgwY2I4YlUsIDB4YjE2NzZiZDZVLCAweDZlNTk5NTM3VSwKKyAgICAweGJlZTFhMTVmVSwgMHhlYjEwZjNmYlUsIDB4ZmU4MWIxN2ZVLCAweDA4MGMwMjA0VSwKKyAgICAweDE3OTJjYzg1VSwgMHgzN2EyYzQ5NVUsIDB4NzQ0ZTFkM2FVLCAweDUwNzgxNDI4VSwKKyAgICAweDJiYjBjMzliVSwgMHg5MTU3NjNjNlUsIDB4NGZlNmRhYTlVLCAweDY5ZDM1ZGJhVSwKKyAgICAweDYxZGY1ZmJlVSwgMHg1N2YyZGNhNVUsIDB4ZTkxMzdkZmFVLCAweDEzOTRjZDg3VSwKKyAgICAweGUxMWY3ZmZlVSwgMHg3NWMxNWFiNFUsIDB4YWQ3NTZjZDhVLCAweDZkZDU1Y2I4VSwKKyAgICAweGZiMDhmN2YzVSwgMHg5OGQ0MjY0Y1UsIDB4ZGIzOGZmZTNVLCAweDkzNTRlZGM3VSwKKyAgICAweDg3NGFlOGNkVSwgMHg0ZTY5OWQyN1UsIDB4YTE3ZjZmZGVVLCAweDAyMDM4ZTAxVSwKKyAgICAweDY0NTYxOTMyVSwgMHhiYWU3YTA1ZFUsIDB4ZTcxYWYwZmRVLCAweDFlMTE4OTBmVSwKKyAgICAweDNjMjIwZjFlVSwgMHgxYzEyMDcwZVUsIDB4ODZjNWFmNDNVLCAweGNiMjBmYmViVSwKKyAgICAweDIwMzAwODEwVSwgMHg1NDdlMTUyYVUsIDB4MzQyZTBkMWFVLCAweDEwMTgwNDA4VSwKKyAgICAweDA0MDYwMTAyVSwgMHg4ZDQ1NjRjOFUsIDB4NWJmOGRmYTNVLCAweGM1Mjk3NmVjVSwKKyAgICAweGY5MGI3OWYyVSwgMHg1M2Y0ZGRhN1UsIDB4ZjQ4ZTNkN2FVLCAweDU4NzQxNjJjVSwKKyAgICAweGZjODIzZjdlVSwgMHhkY2IyMzc2ZVUsIDB4YTk3MzZkZGFVLCAweGUwOTAzODcwVSwKKyAgICAweGRlYjFiOTZmVSwgMHhkMTM3NzNlNlUsIDB4ODM0Y2U5Y2ZVLCAweGQ0YmUzNTZhVSwKKyAgICAweDQ5ZTM1NWFhVSwgMHhkOTNiNzFlMlUsIDB4ZjEwNzdiZjZVLCAweDBhMGY4YzA1VSwKKyAgICAweGQ1MzE3MmU0VSwgMHgxYTE3ODgwZFUsIDB4ZmYwZWY2ZjFVLCAweGE4ZmMyYTU0VSwKKyAgICAweGY4ODQzZTdjVSwgMHg2NWQ5NWViY1UsIDB4OWNkMjI3NGVVLCAweDA1ODk0NjhjVSwKKyAgICAweDMwMjgwYzE4VSwgMHg4OTQzNjVjYVUsIDB4YmQ2ZDY4ZDBVLCAweDk5NWI2MWMyVSwKKyAgICAweDBjMGEwMzA2VSwgMHgyM2JjYzE5ZlUsIDB4NDFlZjU3YWVVLCAweDdmY2VkNmIxVSwKKyAgICAweDQzZWNkOWFmVSwgMHg3ZGNkNThiMFUsIDB4NDdlYWQ4YWRVLCAweDg1NDk2NmNjVSwKKyAgICAweDdiYzhkN2IzVSwgMHhlODljM2E3NFUsIDB4MDc4YWM4OGRVLCAweGYwODgzYzc4VSwKKyAgICAweGNmMjZmYWU5VSwgMHg2MjUzOTYzMVUsIDB4YTZmNWE3NTNVLCAweDVhNzc5ODJkVSwKKyAgICAweDk3NTJlY2M1VSwgMHhkYWI3Yjg2ZFUsIDB4M2JhOGM3OTNVLCAweDgyYzNhZTQxVSwKKyAgICAweGI5NmI2OWQyVSwgMHgzMWE3NGI5NlUsIDB4OTZkZGFiNGJVLCAweDllZDFhOTRmVSwKKyAgICAweDgxNGY2N2NlVSwgMHgyODNjMGExNFUsIDB4MDE4ZjQ3OGVVLCAweGVmMTZmMmY5VSwKKyAgICAweGVlOTliNTc3VSwgMHg4OGNjMjI0NFUsIDB4YjM2NGU1ZDdVLCAweDlmNWVlZWMxVSwKKyAgICAweGMyYTNiZTYxVSwgMHhhY2ZhMmI1NlUsIDB4M2UyMTgxMWZVLCAweDQ4NmMxMjI0VSwKKyAgICAweDM2MmQ4MzFiVSwgMHg2YzVhMWIzNlUsIDB4MzgyNDBlMWNVLCAweDhjY2EyMzQ2VSwKKyAgICAweGYzMDRmNWY3VSwgMHgwOTgzNDU4YVUsIDB4ODRjNjIxNDJVLCAweDFmOWVjZTgxVSwKKyAgICAweDM5YWI0OTkyVSwgMHhiMGU4MmM1OFUsIDB4YzMyY2Y5ZWZVLCAweGJmNmVlNmQxVSwKKyAgICAweGUyOTNiNjcxVSwgMHhhMGYwMjg1MFUsIDB4NWM3MjE3MmVVLCAweDMyMmI4MjE5VSwKKyAgICAweDY4NWMxYTM0VSwgMHgxNjFkOGIwYlUsIDB4ZGYzZWZlZTFVLCAweDEyMWI4YTA5VSwKKyAgICAweDI0MzYwOTEyVSwgMHgwMzhjYzk4ZlUsIDB4MjYzNTg3MTNVLCAweDI1Yjk0ZTljVSwKKyAgICAweGEzN2NlMWRmVSwgMHhiOGU0MmU1Y1UsIDB4Yjc2MmU0ZDVVLCAweGE3N2FlMGRkVSwKKyAgICAweDhiNDBlYmNiVSwgMHg3YTQ3OTAzZFUsIDB4YWFmZmE0NTVVLCAweDc4NDQxZTNjVSwKKyAgICAweDJlMzk4NTE3VSwgMHg5ZDVkNjBjMFUsIDB4MDAwMDAwMDBVLCAweDk0ZGUyNTRhVSwKKyAgICAweGY3MDJmNGY1VSwgMHhlMzFjZjFmZlUsIDB4NmE1Zjk0MzVVLCAweDJjM2EwYjE2VSwKKyAgICAweGJiNjhlN2QzVSwgMHhjOTIzNzVlYVUsIDB4OWI1OGVmYzNVLCAweGQwYjgzNDY4VSwKKyAgICAweGM0YTYzMTYyVSwgMHg3N2MyZDRiNVUsIDB4NjdkYWQwYmRVLCAweDIyMzM4NjExVSwKKyAgICAweGU1MTk3ZWZjVSwgMHg4ZWM5YWQ0N1UsIDB4ZDMzNGZkZTdVLCAweGE0ZjYyOTUyVSwKKyAgICAweGMwYTAzMDYwVSwgMHhlYzlhM2I3NlUsIDB4NDY2NTlmMjNVLCAweGM3MmFmOGVkVSwKKyAgICAweDNmYWVjNjkxVSwgMHg0YzZhMTMyNlUsIDB4MTgxNDA2MGNVLCAweDE0MWUwNTBhVSwKKyAgICAweDMzYTRjNTk3VSwgMHg0NDY2MTEyMlUsIDB4YzEyZjc3ZWVVLCAweGVkMTU3Y2Y4VSwKKyAgICAweGY1MDE3YWY0VSwgMHhmZDBkNzhmMFUsIDB4ZDhiNDM2NmNVLCAweDcwNDgxYzM4VSwKKyAgICAweGU0OTYzOTcyVSwgMHg3OWNiNTliMlUsIDB4NjA1MDE4MzBVLCAweDQ1ZTk1NmFjVSwKKyAgICAweGY2OGRiMzdiVSwgMHhmYTg3YjA3ZFUsIDB4OTBkODI0NDhVLCAweDgwYzAyMDQwVSwKKyAgICAweGYyOGJiMjc5VSwgMHg3MjRiOTIzOVUsIDB4YjZlZGEzNWJVLCAweDI3YmFjMDlkVSwKKyAgICAweDBkODU0NDg4VSwgMHg5NTUxNjJjNFUsIDB4NDA2MDEwMjBVLCAweGVhOWZiNDc1VSwKKyAgICAweDJhM2Y4NDE1VSwgMHgxMTk3NDM4NlUsIDB4NzY0ZDkzM2JVLCAweDJmYjZjMjk5VSwKKyAgICAweDM1YTE0YTk0VSwgMHhjZWE5YmQ2N1UsIDB4MDYwNThmMDNVLCAweGI0ZWUyZDVhVSwKKyAgICAweGNhYWZiYzY1VSwgMHg0YTZmOWMyNVUsIDB4YjU2MTZhZDRVLCAweDFkOWQ0MDgwVSwKKyAgICAweDFiOThjZjgzVSwgMHhiMmViYTI1OVUsIDB4M2EyNzgwMWRVLCAweDIxYmY0ZjllVSwKKyAgICAweDdjNDIxZjNlVSwgMHgwZjg2Y2E4OVUsIDB4OTJkYmFhNDlVLCAweDE1OTE0Mjg0VSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQzWzI1Nl0gPSB7CisgICAgMHhiYmQyNjliYVUsIDB4ZTU0ZGE4NTRVLCAweGUyYmM1ZTJmVSwgMHgyNWNkZTg3NFUsCisgICAgMHhmNzUxYTY1M1UsIDB4ZDA2YmJiZDNVLCAweGQ2NmZiOWQyVSwgMHhiMzI5OWE0ZFUsCisgICAgMHhmZDVkYTA1MFUsIDB4Y2Y4YTQ1YWNVLCAweDA5MGUwNzhkVSwgMHhhNWM2NjNiZlUsCisgICAgMHgzZGRkZTA3MFUsIDB4ZjE1NWE0NTJVLCAweDdiNTIyOTlhVSwgMHhiNTJkOTg0Y1UsCisgICAgMHg0NjhmYzllYVUsIDB4YzQ3M2I3ZDVVLCAweDU1NjYzMzk3VSwgMHhkYzYzYmZkMVUsCisgICAgMHhhYWNjNjYzM1UsIDB4ZmI1OWEyNTFVLCAweGM3NzFiNjViVSwgMHhmM2EyNTFhNlUsCisgICAgMHhmZTVmYTFkZVUsIDB4YWQzZDkwNDhVLCAweGQ3OWE0ZGE4VSwgMHg3MTVlMmY5OVUsCisgICAgMHhlMDRiYWJkYlUsIDB4YWNjODY0MzJVLCAweDk1ZTY3M2I3VSwgMHgzMmQ3ZTVmY1UsCisgICAgMHg3MGFiZGJlM1UsIDB4NjM0MjIxOWVVLCAweDQxN2UzZjkxVSwgMHg3ZDU2MmI5YlUsCisgICAgMHg3NmFmZDllMlUsIDB4YmRkNjZiYmJVLCAweDliMTk4MjQxVSwgMHg3OWE1ZGM2ZVUsCisgICAgMHhmOWFlNTdhNVUsIDB4ODAwYjhiY2JVLCAweDY3YjFkNjZiVSwgMHg1OTZlMzc5NVUsCisgICAgMHhlMWJlNWZhMVUsIDB4MTBlYmZiZjNVLCAweDgxZmU3ZmIxVSwgMHgwYzA4MDQwMlUsCisgICAgMHg5MjE3ODVjY1UsIDB4YTIzNzk1YzRVLCAweDRlNzQzYTFkVSwgMHg3ODUwMjgxNFUsCisgICAgMHhiMDJiOWJjM1UsIDB4NTc5MWM2NjNVLCAweGU2NGZhOWRhVSwgMHhkMzY5YmE1ZFUsCisgICAgMHhkZjYxYmU1ZlUsIDB4ZjI1N2E1ZGNVLCAweDEzZTlmYTdkVSwgMHg5NDEzODdjZFUsCisgICAgMHgxZmUxZmU3ZlUsIDB4YzE3NWI0NWFVLCAweDc1YWRkODZjVSwgMHhkNTZkYjg1Y1UsCisgICAgMHgwOGZiZjNmN1UsIDB4ZDQ5ODRjMjZVLCAweDM4ZGJlM2ZmVSwgMHg1NDkzYzdlZFUsCisgICAgMHg0YTg3Y2RlOFUsIDB4Njk0ZTI3OWRVLCAweDdmYTFkZTZmVSwgMHgwMzAyMDE4ZVUsCisgICAgMHg1NjY0MzIxOVUsIDB4ZTdiYTVkYTBVLCAweDFhZTdmZGYwVSwgMHgxMTFlMGY4OVUsCisgICAgMHgyMjNjMWUwZlUsIDB4MTIxYzBlMDdVLCAweGM1ODY0M2FmVSwgMHgyMGNiZWJmYlUsCisgICAgMHgzMDIwMTAwOFUsIDB4N2U1NDJhMTVVLCAweDJlMzQxYTBkVSwgMHgxODEwMDgwNFUsCisgICAgMHgwNjA0MDIwMVUsIDB4NDU4ZGM4NjRVLCAweGY4NWJhM2RmVSwgMHgyOWM1ZWM3NlUsCisgICAgMHgwYmY5ZjI3OVUsIDB4ZjQ1M2E3ZGRVLCAweDhlZjQ3YTNkVSwgMHg3NDU4MmMxNlUsCisgICAgMHg4MmZjN2UzZlUsIDB4YjJkYzZlMzdVLCAweDczYTlkYTZkVSwgMHg5MGUwNzAzOFUsCisgICAgMHhiMWRlNmZiOVUsIDB4MzdkMWU2NzNVLCAweDRjODNjZmU5VSwgMHhiZWQ0NmEzNVUsCisgICAgMHhlMzQ5YWE1NVUsIDB4M2JkOWUyNzFVLCAweDA3ZjFmNjdiVSwgMHgwZjBhMDU4Y1UsCisgICAgMHgzMWQ1ZTQ3MlUsIDB4MTcxYTBkODhVLCAweDBlZmZmMWY2VSwgMHhmY2E4NTQyYVUsCisgICAgMHg4NGY4N2MzZVUsIDB4ZDk2NWJjNWVVLCAweGQyOWM0ZTI3VSwgMHg4OTA1OGM0NlUsCisgICAgMHgyODMwMTgwY1UsIDB4NDM4OWNhNjVVLCAweDZkYmRkMDY4VSwgMHg1Yjk5YzI2MVUsCisgICAgMHgwYTBjMDYwM1UsIDB4YmMyMzlmYzFVLCAweGVmNDFhZTU3VSwgMHhjZTdmYjFkNlUsCisgICAgMHhlYzQzYWZkOVUsIDB4Y2Q3ZGIwNThVLCAweGVhNDdhZGQ4VSwgMHg0OTg1Y2M2NlUsCisgICAgMHhjODdiYjNkN1UsIDB4OWNlODc0M2FVLCAweDhhMDc4ZGM4VSwgMHg4OGYwNzgzY1UsCisgICAgMHgyNmNmZTlmYVUsIDB4NTM2MjMxOTZVLCAweGY1YTY1M2E3VSwgMHg3NzVhMmQ5OFUsCisgICAgMHg1Mjk3YzVlY1UsIDB4YjdkYTZkYjhVLCAweGE4M2I5M2M3VSwgMHhjMzgyNDFhZVUsCisgICAgMHg2YmI5ZDI2OVUsIDB4YTczMTk2NGJVLCAweGRkOTY0YmFiVSwgMHhkMTllNGZhOVUsCisgICAgMHg0ZjgxY2U2N1UsIDB4M2MyODE0MGFVLCAweDhmMDE4ZTQ3VSwgMHgxNmVmZjlmMlUsCisgICAgMHg5OWVlNzdiNVUsIDB4Y2M4ODQ0MjJVLCAweDY0YjNkN2U1VSwgMHg1ZTlmYzFlZVUsCisgICAgMHhhM2MyNjFiZVUsIDB4ZmFhYzU2MmJVLCAweDIxM2UxZjgxVSwgMHg2YzQ4MjQxMlUsCisgICAgMHgyZDM2MWI4M1UsIDB4NWE2YzM2MWJVLCAweDI0MzgxYzBlVSwgMHhjYThjNDYyM1UsCisgICAgMHgwNGYzZjdmNVUsIDB4ODMwOThhNDVVLCAweGM2ODQ0MjIxVSwgMHg5ZTFmODFjZVUsCisgICAgMHhhYjM5OTI0OVUsIDB4ZThiMDU4MmNVLCAweDJjYzNlZmY5VSwgMHg2ZWJmZDFlNlUsCisgICAgMHg5M2UyNzFiNlUsIDB4ZjBhMDUwMjhVLCAweDcyNWMyZTE3VSwgMHgyYjMyMTk4MlUsCisgICAgMHg1YzY4MzQxYVUsIDB4MWQxNjBiOGJVLCAweDNlZGZlMWZlVSwgMHgxYjEyMDk4YVUsCisgICAgMHgzNjI0MTIwOVUsIDB4OGMwMzhmYzlVLCAweDM1MjYxMzg3VSwgMHhiOTI1OWM0ZVUsCisgICAgMHg3Y2EzZGZlMVUsIDB4ZTRiODVjMmVVLCAweDYyYjdkNWU0VSwgMHg3YWE3ZGRlMFUsCisgICAgMHg0MDhiY2JlYlUsIDB4NDc3YTNkOTBVLCAweGZmYWE1NWE0VSwgMHg0NDc4M2MxZVUsCisgICAgMHgzOTJlMTc4NVUsIDB4NWQ5ZGMwNjBVLCAweDAwMDAwMDAwVSwgMHhkZTk0NGEyNVUsCisgICAgMHgwMmY3ZjVmNFUsIDB4MWNlM2ZmZjFVLCAweDVmNmEzNTk0VSwgMHgzYTJjMTYwYlUsCisgICAgMHg2OGJiZDNlN1UsIDB4MjNjOWVhNzVVLCAweDU4OWJjM2VmVSwgMHhiOGQwNjgzNFUsCisgICAgMHhhNmM0NjIzMVUsIDB4YzI3N2I1ZDRVLCAweGRhNjdiZGQwVSwgMHgzMzIyMTE4NlUsCisgICAgMHgxOWU1ZmM3ZVUsIDB4Yzk4ZTQ3YWRVLCAweDM0ZDNlN2ZkVSwgMHhmNmE0NTIyOVUsCisgICAgMHhhMGMwNjAzMFUsIDB4OWFlYzc2M2JVLCAweDY1NDYyMzlmVSwgMHgyYWM3ZWRmOFUsCisgICAgMHhhZTNmOTFjNlUsIDB4NmE0YzI2MTNVLCAweDE0MTgwYzA2VSwgMHgxZTE0MGEwNVUsCisgICAgMHhhNDMzOTdjNVUsIDB4NjY0NDIyMTFVLCAweDJmYzFlZTc3VSwgMHgxNWVkZjg3Y1UsCisgICAgMHgwMWY1ZjQ3YVUsIDB4MGRmZGYwNzhVLCAweGI0ZDg2YzM2VSwgMHg0ODcwMzgxY1UsCisgICAgMHg5NmU0NzIzOVUsIDB4Y2I3OWIyNTlVLCAweDUwNjAzMDE4VSwgMHhlOTQ1YWM1NlUsCisgICAgMHg4ZGY2N2JiM1UsIDB4ODdmYTdkYjBVLCAweGQ4OTA0ODI0VSwgMHhjMDgwNDAyMFUsCisgICAgMHg4YmYyNzliMlUsIDB4NGI3MjM5OTJVLCAweGVkYjY1YmEzVSwgMHhiYTI3OWRjMFUsCisgICAgMHg4NTBkODg0NFUsIDB4NTE5NWM0NjJVLCAweDYwNDAyMDEwVSwgMHg5ZmVhNzViNFUsCisgICAgMHgzZjJhMTU4NFUsIDB4OTcxMTg2NDNVLCAweDRkNzYzYjkzVSwgMHhiNjJmOTljMlUsCisgICAgMHhhMTM1OTQ0YVUsIDB4YTljZTY3YmRVLCAweDA1MDYwMzhmVSwgMHhlZWI0NWEyZFUsCisgICAgMHhhZmNhNjViY1UsIDB4NmY0YTI1OWNVLCAweDYxYjVkNDZhVSwgMHg5ZDFkODA0MFUsCisgICAgMHg5ODFiODNjZlUsIDB4ZWJiMjU5YTJVLCAweDI3M2ExZDgwVSwgMHhiZjIxOWU0ZlUsCisgICAgMHg0MjdjM2UxZlUsIDB4ODYwZjg5Y2FVLCAweGRiOTI0OWFhVSwgMHg5MTE1ODQ0MlUsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUNFsyNTZdID0geworICAgIDB4YmFiYWJhYmFVLCAweDU0NTQ1NDU0VSwgMHgyZjJmMmYyZlUsIDB4NzQ3NDc0NzRVLAorICAgIDB4NTM1MzUzNTNVLCAweGQzZDNkM2QzVSwgMHhkMmQyZDJkMlUsIDB4NGQ0ZDRkNGRVLAorICAgIDB4NTA1MDUwNTBVLCAweGFjYWNhY2FjVSwgMHg4ZDhkOGQ4ZFUsIDB4YmZiZmJmYmZVLAorICAgIDB4NzA3MDcwNzBVLCAweDUyNTI1MjUyVSwgMHg5YTlhOWE5YVUsIDB4NGM0YzRjNGNVLAorICAgIDB4ZWFlYWVhZWFVLCAweGQ1ZDVkNWQ1VSwgMHg5Nzk3OTc5N1UsIDB4ZDFkMWQxZDFVLAorICAgIDB4MzMzMzMzMzNVLCAweDUxNTE1MTUxVSwgMHg1YjViNWI1YlUsIDB4YTZhNmE2YTZVLAorICAgIDB4ZGVkZWRlZGVVLCAweDQ4NDg0ODQ4VSwgMHhhOGE4YThhOFUsIDB4OTk5OTk5OTlVLAorICAgIDB4ZGJkYmRiZGJVLCAweDMyMzIzMjMyVSwgMHhiN2I3YjdiN1UsIDB4ZmNmY2ZjZmNVLAorICAgIDB4ZTNlM2UzZTNVLCAweDllOWU5ZTllVSwgMHg5MTkxOTE5MVUsIDB4OWI5YjliOWJVLAorICAgIDB4ZTJlMmUyZTJVLCAweGJiYmJiYmJiVSwgMHg0MTQxNDE0MVUsIDB4NmU2ZTZlNmVVLAorICAgIDB4YTVhNWE1YTVVLCAweGNiY2JjYmNiVSwgMHg2YjZiNmI2YlUsIDB4OTU5NTk1OTVVLAorICAgIDB4YTFhMWExYTFVLCAweGYzZjNmM2YzVSwgMHhiMWIxYjFiMVUsIDB4MDIwMjAyMDJVLAorICAgIDB4Y2NjY2NjY2NVLCAweGM0YzRjNGM0VSwgMHgxZDFkMWQxZFUsIDB4MTQxNDE0MTRVLAorICAgIDB4YzNjM2MzYzNVLCAweDYzNjM2MzYzVSwgMHhkYWRhZGFkYVUsIDB4NWQ1ZDVkNWRVLAorICAgIDB4NWY1ZjVmNWZVLCAweGRjZGNkY2RjVSwgMHg3ZDdkN2Q3ZFUsIDB4Y2RjZGNkY2RVLAorICAgIDB4N2Y3ZjdmN2ZVLCAweDVhNWE1YTVhVSwgMHg2YzZjNmM2Y1UsIDB4NWM1YzVjNWNVLAorICAgIDB4ZjdmN2Y3ZjdVLCAweDI2MjYyNjI2VSwgMHhmZmZmZmZmZlUsIDB4ZWRlZGVkZWRVLAorICAgIDB4ZThlOGU4ZThVLCAweDlkOWQ5ZDlkVSwgMHg2ZjZmNmY2ZlUsIDB4OGU4ZThlOGVVLAorICAgIDB4MTkxOTE5MTlVLCAweGEwYTBhMGEwVSwgMHhmMGYwZjBmMFUsIDB4ODk4OTg5ODlVLAorICAgIDB4MGYwZjBmMGZVLCAweDA3MDcwNzA3VSwgMHhhZmFmYWZhZlUsIDB4ZmJmYmZiZmJVLAorICAgIDB4MDgwODA4MDhVLCAweDE1MTUxNTE1VSwgMHgwZDBkMGQwZFUsIDB4MDQwNDA0MDRVLAorICAgIDB4MDEwMTAxMDFVLCAweDY0NjQ2NDY0VSwgMHhkZmRmZGZkZlUsIDB4NzY3Njc2NzZVLAorICAgIDB4Nzk3OTc5NzlVLCAweGRkZGRkZGRkVSwgMHgzZDNkM2QzZFUsIDB4MTYxNjE2MTZVLAorICAgIDB4M2YzZjNmM2ZVLCAweDM3MzczNzM3VSwgMHg2ZDZkNmQ2ZFUsIDB4MzgzODM4MzhVLAorICAgIDB4YjliOWI5YjlVLCAweDczNzM3MzczVSwgMHhlOWU5ZTllOVUsIDB4MzUzNTM1MzVVLAorICAgIDB4NTU1NTU1NTVVLCAweDcxNzE3MTcxVSwgMHg3YjdiN2I3YlUsIDB4OGM4YzhjOGNVLAorICAgIDB4NzI3MjcyNzJVLCAweDg4ODg4ODg4VSwgMHhmNmY2ZjZmNlUsIDB4MmEyYTJhMmFVLAorICAgIDB4M2UzZTNlM2VVLCAweDVlNWU1ZTVlVSwgMHgyNzI3MjcyN1UsIDB4NDY0NjQ2NDZVLAorICAgIDB4MGMwYzBjMGNVLCAweDY1NjU2NTY1VSwgMHg2ODY4Njg2OFUsIDB4NjE2MTYxNjFVLAorICAgIDB4MDMwMzAzMDNVLCAweGMxYzFjMWMxVSwgMHg1NzU3NTc1N1UsIDB4ZDZkNmQ2ZDZVLAorICAgIDB4ZDlkOWQ5ZDlVLCAweDU4NTg1ODU4VSwgMHhkOGQ4ZDhkOFUsIDB4NjY2NjY2NjZVLAorICAgIDB4ZDdkN2Q3ZDdVLCAweDNhM2EzYTNhVSwgMHhjOGM4YzhjOFUsIDB4M2MzYzNjM2NVLAorICAgIDB4ZmFmYWZhZmFVLCAweDk2OTY5Njk2VSwgMHhhN2E3YTdhN1UsIDB4OTg5ODk4OThVLAorICAgIDB4ZWNlY2VjZWNVLCAweGI4YjhiOGI4VSwgMHhjN2M3YzdjN1UsIDB4YWVhZWFlYWVVLAorICAgIDB4Njk2OTY5NjlVLCAweDRiNGI0YjRiVSwgMHhhYmFiYWJhYlUsIDB4YTlhOWE5YTlVLAorICAgIDB4Njc2NzY3NjdVLCAweDBhMGEwYTBhVSwgMHg0NzQ3NDc0N1UsIDB4ZjJmMmYyZjJVLAorICAgIDB4YjViNWI1YjVVLCAweDIyMjIyMjIyVSwgMHhlNWU1ZTVlNVUsIDB4ZWVlZWVlZWVVLAorICAgIDB4YmViZWJlYmVVLCAweDJiMmIyYjJiVSwgMHg4MTgxODE4MVUsIDB4MTIxMjEyMTJVLAorICAgIDB4ODM4MzgzODNVLCAweDFiMWIxYjFiVSwgMHgwZTBlMGUwZVUsIDB4MjMyMzIzMjNVLAorICAgIDB4ZjVmNWY1ZjVVLCAweDQ1NDU0NTQ1VSwgMHgyMTIxMjEyMVUsIDB4Y2VjZWNlY2VVLAorICAgIDB4NDk0OTQ5NDlVLCAweDJjMmMyYzJjVSwgMHhmOWY5ZjlmOVUsIDB4ZTZlNmU2ZTZVLAorICAgIDB4YjZiNmI2YjZVLCAweDI4MjgyODI4VSwgMHgxNzE3MTcxN1UsIDB4ODI4MjgyODJVLAorICAgIDB4MWExYTFhMWFVLCAweDhiOGI4YjhiVSwgMHhmZWZlZmVmZVUsIDB4OGE4YThhOGFVLAorICAgIDB4MDkwOTA5MDlVLCAweGM5YzljOWM5VSwgMHg4Nzg3ODc4N1UsIDB4NGU0ZTRlNGVVLAorICAgIDB4ZTFlMWUxZTFVLCAweDJlMmUyZTJlVSwgMHhlNGU0ZTRlNFUsIDB4ZTBlMGUwZTBVLAorICAgIDB4ZWJlYmViZWJVLCAweDkwOTA5MDkwVSwgMHhhNGE0YTRhNFUsIDB4MWUxZTFlMWVVLAorICAgIDB4ODU4NTg1ODVVLCAweDYwNjA2MDYwVSwgMHgwMDAwMDAwMFUsIDB4MjUyNTI1MjVVLAorICAgIDB4ZjRmNGY0ZjRVLCAweGYxZjFmMWYxVSwgMHg5NDk0OTQ5NFUsIDB4MGIwYjBiMGJVLAorICAgIDB4ZTdlN2U3ZTdVLCAweDc1NzU3NTc1VSwgMHhlZmVmZWZlZlUsIDB4MzQzNDM0MzRVLAorICAgIDB4MzEzMTMxMzFVLCAweGQ0ZDRkNGQ0VSwgMHhkMGQwZDBkMFUsIDB4ODY4Njg2ODZVLAorICAgIDB4N2U3ZTdlN2VVLCAweGFkYWRhZGFkVSwgMHhmZGZkZmRmZFUsIDB4MjkyOTI5MjlVLAorICAgIDB4MzAzMDMwMzBVLCAweDNiM2IzYjNiVSwgMHg5ZjlmOWY5ZlUsIDB4ZjhmOGY4ZjhVLAorICAgIDB4YzZjNmM2YzZVLCAweDEzMTMxMzEzVSwgMHgwNjA2MDYwNlUsIDB4MDUwNTA1MDVVLAorICAgIDB4YzVjNWM1YzVVLCAweDExMTExMTExVSwgMHg3Nzc3Nzc3N1UsIDB4N2M3YzdjN2NVLAorICAgIDB4N2E3YTdhN2FVLCAweDc4Nzg3ODc4VSwgMHgzNjM2MzYzNlUsIDB4MWMxYzFjMWNVLAorICAgIDB4MzkzOTM5MzlVLCAweDU5NTk1OTU5VSwgMHgxODE4MTgxOFUsIDB4NTY1NjU2NTZVLAorICAgIDB4YjNiM2IzYjNVLCAweGIwYjBiMGIwVSwgMHgyNDI0MjQyNFUsIDB4MjAyMDIwMjBVLAorICAgIDB4YjJiMmIyYjJVLCAweDkyOTI5MjkyVSwgMHhhM2EzYTNhM1UsIDB4YzBjMGMwYzBVLAorICAgIDB4NDQ0NDQ0NDRVLCAweDYyNjI2MjYyVSwgMHgxMDEwMTAxMFUsIDB4YjRiNGI0YjRVLAorICAgIDB4ODQ4NDg0ODRVLCAweDQzNDM0MzQzVSwgMHg5MzkzOTM5M1UsIDB4YzJjMmMyYzJVLAorICAgIDB4NGE0YTRhNGFVLCAweGJkYmRiZGJkVSwgMHg4ZjhmOGY4ZlUsIDB4MmQyZDJkMmRVLAorICAgIDB4YmNiY2JjYmNVLCAweDljOWM5YzljVSwgMHg2YTZhNmE2YVUsIDB4NDA0MDQwNDBVLAorICAgIDB4Y2ZjZmNmY2ZVLCAweGEyYTJhMmEyVSwgMHg4MDgwODA4MFUsIDB4NGY0ZjRmNGZVLAorICAgIDB4MWYxZjFmMWZVLCAweGNhY2FjYWNhVSwgMHhhYWFhYWFhYVUsIDB4NDI0MjQyNDJVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDVbMjU2XSA9IHsKKyAgICAweDAwMDAwMDAwVSwgMHgwMTAyMDYwOFUsIDB4MDIwNDBjMTBVLCAweDAzMDYwYTE4VSwKKyAgICAweDA0MDgxODIwVSwgMHgwNTBhMWUyOFUsIDB4MDYwYzE0MzBVLCAweDA3MGUxMjM4VSwKKyAgICAweDA4MTAzMDQwVSwgMHgwOTEyMzY0OFUsIDB4MGExNDNjNTBVLCAweDBiMTYzYTU4VSwKKyAgICAweDBjMTgyODYwVSwgMHgwZDFhMmU2OFUsIDB4MGUxYzI0NzBVLCAweDBmMWUyMjc4VSwKKyAgICAweDEwMjA2MDgwVSwgMHgxMTIyNjY4OFUsIDB4MTIyNDZjOTBVLCAweDEzMjY2YTk4VSwKKyAgICAweDE0Mjg3OGEwVSwgMHgxNTJhN2VhOFUsIDB4MTYyYzc0YjBVLCAweDE3MmU3MmI4VSwKKyAgICAweDE4MzA1MGMwVSwgMHgxOTMyNTZjOFUsIDB4MWEzNDVjZDBVLCAweDFiMzY1YWQ4VSwKKyAgICAweDFjMzg0OGUwVSwgMHgxZDNhNGVlOFUsIDB4MWUzYzQ0ZjBVLCAweDFmM2U0MmY4VSwKKyAgICAweDIwNDBjMDFkVSwgMHgyMTQyYzYxNVUsIDB4MjI0NGNjMGRVLCAweDIzNDZjYTA1VSwKKyAgICAweDI0NDhkODNkVSwgMHgyNTRhZGUzNVUsIDB4MjY0Y2Q0MmRVLCAweDI3NGVkMjI1VSwKKyAgICAweDI4NTBmMDVkVSwgMHgyOTUyZjY1NVUsIDB4MmE1NGZjNGRVLCAweDJiNTZmYTQ1VSwKKyAgICAweDJjNThlODdkVSwgMHgyZDVhZWU3NVUsIDB4MmU1Y2U0NmRVLCAweDJmNWVlMjY1VSwKKyAgICAweDMwNjBhMDlkVSwgMHgzMTYyYTY5NVUsIDB4MzI2NGFjOGRVLCAweDMzNjZhYTg1VSwKKyAgICAweDM0NjhiOGJkVSwgMHgzNTZhYmViNVUsIDB4MzY2Y2I0YWRVLCAweDM3NmViMmE1VSwKKyAgICAweDM4NzA5MGRkVSwgMHgzOTcyOTZkNVUsIDB4M2E3NDljY2RVLCAweDNiNzY5YWM1VSwKKyAgICAweDNjNzg4OGZkVSwgMHgzZDdhOGVmNVUsIDB4M2U3Yzg0ZWRVLCAweDNmN2U4MmU1VSwKKyAgICAweDQwODA5ZDNhVSwgMHg0MTgyOWIzMlUsIDB4NDI4NDkxMmFVLCAweDQzODY5NzIyVSwKKyAgICAweDQ0ODg4NTFhVSwgMHg0NThhODMxMlUsIDB4NDY4Yzg5MGFVLCAweDQ3OGU4ZjAyVSwKKyAgICAweDQ4OTBhZDdhVSwgMHg0OTkyYWI3MlUsIDB4NGE5NGExNmFVLCAweDRiOTZhNzYyVSwKKyAgICAweDRjOThiNTVhVSwgMHg0ZDlhYjM1MlUsIDB4NGU5Y2I5NGFVLCAweDRmOWViZjQyVSwKKyAgICAweDUwYTBmZGJhVSwgMHg1MWEyZmJiMlUsIDB4NTJhNGYxYWFVLCAweDUzYTZmN2EyVSwKKyAgICAweDU0YThlNTlhVSwgMHg1NWFhZTM5MlUsIDB4NTZhY2U5OGFVLCAweDU3YWVlZjgyVSwKKyAgICAweDU4YjBjZGZhVSwgMHg1OWIyY2JmMlUsIDB4NWFiNGMxZWFVLCAweDViYjZjN2UyVSwKKyAgICAweDVjYjhkNWRhVSwgMHg1ZGJhZDNkMlUsIDB4NWViY2Q5Y2FVLCAweDVmYmVkZmMyVSwKKyAgICAweDYwYzA1ZDI3VSwgMHg2MWMyNWIyZlUsIDB4NjJjNDUxMzdVLCAweDYzYzY1NzNmVSwKKyAgICAweDY0Yzg0NTA3VSwgMHg2NWNhNDMwZlUsIDB4NjZjYzQ5MTdVLCAweDY3Y2U0ZjFmVSwKKyAgICAweDY4ZDA2ZDY3VSwgMHg2OWQyNmI2ZlUsIDB4NmFkNDYxNzdVLCAweDZiZDY2NzdmVSwKKyAgICAweDZjZDg3NTQ3VSwgMHg2ZGRhNzM0ZlUsIDB4NmVkYzc5NTdVLCAweDZmZGU3ZjVmVSwKKyAgICAweDcwZTAzZGE3VSwgMHg3MWUyM2JhZlUsIDB4NzJlNDMxYjdVLCAweDczZTYzN2JmVSwKKyAgICAweDc0ZTgyNTg3VSwgMHg3NWVhMjM4ZlUsIDB4NzZlYzI5OTdVLCAweDc3ZWUyZjlmVSwKKyAgICAweDc4ZjAwZGU3VSwgMHg3OWYyMGJlZlUsIDB4N2FmNDAxZjdVLCAweDdiZjYwN2ZmVSwKKyAgICAweDdjZjgxNWM3VSwgMHg3ZGZhMTNjZlUsIDB4N2VmYzE5ZDdVLCAweDdmZmUxZmRmVSwKKyAgICAweDgwMWQyNzc0VSwgMHg4MTFmMjE3Y1UsIDB4ODIxOTJiNjRVLCAweDgzMWIyZDZjVSwKKyAgICAweDg0MTUzZjU0VSwgMHg4NTE3Mzk1Y1UsIDB4ODYxMTMzNDRVLCAweDg3MTMzNTRjVSwKKyAgICAweDg4MGQxNzM0VSwgMHg4OTBmMTEzY1UsIDB4OGEwOTFiMjRVLCAweDhiMGIxZDJjVSwKKyAgICAweDhjMDUwZjE0VSwgMHg4ZDA3MDkxY1UsIDB4OGUwMTAzMDRVLCAweDhmMDMwNTBjVSwKKyAgICAweDkwM2Q0N2Y0VSwgMHg5MTNmNDFmY1UsIDB4OTIzOTRiZTRVLCAweDkzM2I0ZGVjVSwKKyAgICAweDk0MzU1ZmQ0VSwgMHg5NTM3NTlkY1UsIDB4OTYzMTUzYzRVLCAweDk3MzM1NWNjVSwKKyAgICAweDk4MmQ3N2I0VSwgMHg5OTJmNzFiY1UsIDB4OWEyOTdiYTRVLCAweDliMmI3ZGFjVSwKKyAgICAweDljMjU2Zjk0VSwgMHg5ZDI3Njk5Y1UsIDB4OWUyMTYzODRVLCAweDlmMjM2NThjVSwKKyAgICAweGEwNWRlNzY5VSwgMHhhMTVmZTE2MVUsIDB4YTI1OWViNzlVLCAweGEzNWJlZDcxVSwKKyAgICAweGE0NTVmZjQ5VSwgMHhhNTU3Zjk0MVUsIDB4YTY1MWYzNTlVLCAweGE3NTNmNTUxVSwKKyAgICAweGE4NGRkNzI5VSwgMHhhOTRmZDEyMVUsIDB4YWE0OWRiMzlVLCAweGFiNGJkZDMxVSwKKyAgICAweGFjNDVjZjA5VSwgMHhhZDQ3YzkwMVUsIDB4YWU0MWMzMTlVLCAweGFmNDNjNTExVSwKKyAgICAweGIwN2Q4N2U5VSwgMHhiMTdmODFlMVUsIDB4YjI3OThiZjlVLCAweGIzN2I4ZGYxVSwKKyAgICAweGI0NzU5ZmM5VSwgMHhiNTc3OTljMVUsIDB4YjY3MTkzZDlVLCAweGI3NzM5NWQxVSwKKyAgICAweGI4NmRiN2E5VSwgMHhiOTZmYjFhMVUsIDB4YmE2OWJiYjlVLCAweGJiNmJiZGIxVSwKKyAgICAweGJjNjVhZjg5VSwgMHhiZDY3YTk4MVUsIDB4YmU2MWEzOTlVLCAweGJmNjNhNTkxVSwKKyAgICAweGMwOWRiYTRlVSwgMHhjMTlmYmM0NlUsIDB4YzI5OWI2NWVVLCAweGMzOWJiMDU2VSwKKyAgICAweGM0OTVhMjZlVSwgMHhjNTk3YTQ2NlUsIDB4YzY5MWFlN2VVLCAweGM3OTNhODc2VSwKKyAgICAweGM4OGQ4YTBlVSwgMHhjOThmOGMwNlUsIDB4Y2E4OTg2MWVVLCAweGNiOGI4MDE2VSwKKyAgICAweGNjODU5MjJlVSwgMHhjZDg3OTQyNlUsIDB4Y2U4MTllM2VVLCAweGNmODM5ODM2VSwKKyAgICAweGQwYmRkYWNlVSwgMHhkMWJmZGNjNlUsIDB4ZDJiOWQ2ZGVVLCAweGQzYmJkMGQ2VSwKKyAgICAweGQ0YjVjMmVlVSwgMHhkNWI3YzRlNlUsIDB4ZDZiMWNlZmVVLCAweGQ3YjNjOGY2VSwKKyAgICAweGQ4YWRlYThlVSwgMHhkOWFmZWM4NlUsIDB4ZGFhOWU2OWVVLCAweGRiYWJlMDk2VSwKKyAgICAweGRjYTVmMmFlVSwgMHhkZGE3ZjRhNlUsIDB4ZGVhMWZlYmVVLCAweGRmYTNmOGI2VSwKKyAgICAweGUwZGQ3YTUzVSwgMHhlMWRmN2M1YlUsIDB4ZTJkOTc2NDNVLCAweGUzZGI3MDRiVSwKKyAgICAweGU0ZDU2MjczVSwgMHhlNWQ3NjQ3YlUsIDB4ZTZkMTZlNjNVLCAweGU3ZDM2ODZiVSwKKyAgICAweGU4Y2Q0YTEzVSwgMHhlOWNmNGMxYlUsIDB4ZWFjOTQ2MDNVLCAweGViY2I0MDBiVSwKKyAgICAweGVjYzU1MjMzVSwgMHhlZGM3NTQzYlUsIDB4ZWVjMTVlMjNVLCAweGVmYzM1ODJiVSwKKyAgICAweGYwZmQxYWQzVSwgMHhmMWZmMWNkYlUsIDB4ZjJmOTE2YzNVLCAweGYzZmIxMGNiVSwKKyAgICAweGY0ZjUwMmYzVSwgMHhmNWY3MDRmYlUsIDB4ZjZmMTBlZTNVLCAweGY3ZjMwOGViVSwKKyAgICAweGY4ZWQyYTkzVSwgMHhmOWVmMmM5YlUsIDB4ZmFlOTI2ODNVLCAweGZiZWIyMDhiVSwKKyAgICAweGZjZTUzMmIzVSwgMHhmZGU3MzRiYlUsIDB4ZmVlMTNlYTNVLCAweGZmZTMzOGFiVSwKK307CisKKy8qKgorICogVGhlIHJvdW5kIGNvbnN0YW50cy4KKyAqLworc3RhdGljIGNvbnN0IHVsb25nMzIgcmNbXSA9IHsKKyAgICAweGJhNTQyZjc0VSwgMHg1M2QzZDI0ZFUsIDB4NTBhYzhkYmZVLCAweDcwNTI5YTRjVSwKKyAgICAweGVhZDU5N2QxVSwgMHgzMzUxNWJhNlUsIDB4ZGU0OGE4OTlVLCAweGRiMzJiN2ZjVSwKKyAgICAweGUzOWU5MTliVSwgMHhlMmJiNDE2ZVUsIDB4YTVjYjZiOTVVLCAweGExZjNiMTAyVSwKKyAgICAweGNjYzQxZDE0VSwgMHhjMzYzZGE1ZFUsIDB4NWZkYzdkY2RVLCAweDdmNWE2YzVjVSwKKyAgICAweGY3MjZmZmVkVSwgMHhlODlkNmY4ZVUsIDB4MTlhMGYwODlVLAorfTsKKworCisKKyNlbHNlCisKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDBbMjU2XSA9IHsKKyAgICAweGE3NTNhNmY1VSwgMHhkM2JiNmJkMFUsIDB4ZTZkMWJmNmVVLCAweDcxZTJkOTNiVSwKKyAgICAweGQwYmQ2N2RhVSwgMHhhYzQ1OGFjZlUsIDB4NGQ5YTI5YjNVLCAweDc5ZjJmOTBiVSwKKyAgICAweDNhNzRlODljVSwgMHhjOThmMDM4Y1UsIDB4OTEzZjdlNDFVLCAweGZjZTVkNzMyVSwKKyAgICAweDFlM2M3ODQ0VSwgMHg0NzhlMDE4ZlUsIDB4NTRhODRkZTVVLCAweGJkNjdjZWE5VSwKKyAgICAweDhjMDUwYTBmVSwgMHhhNTU3YWVmOVUsIDB4N2FmNGY1MDFVLCAweGZiZWJjYjIwVSwKKyAgICAweDYzYzY5MTU3VSwgMHhiODZkZGFiN1UsIDB4ZGRhNzUzZjRVLCAweGQ0YjU3N2MyVSwKKyAgICAweGU1ZDdiMzY0VSwgMHhiMzdiZjY4ZFUsIDB4YzU5NzMzYTRVLCAweGJlNjFjMmEzVSwKKyAgICAweGE5NGY5ZWQxVSwgMHg4ODBkMWExN1UsIDB4MGMxODMwMjhVLCAweGEyNTliMmViVSwKKyAgICAweDM5NzJlNDk2VSwgMHhkZmEzNWJmOFUsIDB4Mjk1MmE0ZjZVLCAweGRhYTk0ZmU2VSwKKyAgICAweDJiNTZhY2ZhVSwgMHhhODRkOWFkN1UsIDB4Y2I4YjBiODBVLCAweDRjOTgyZGI1VSwKKyAgICAweDRiOTYzMWE3VSwgMHgyMjQ0ODhjY1UsIDB4YWE0OTkyZGJVLCAweDI0NDg5MGQ4VSwKKyAgICAweDQxODIxOTliVSwgMHg3MGUwZGQzZFUsIDB4YTY1MWEyZjNVLCAweGY5ZWZjMzJjVSwKKyAgICAweDVhYjQ3NWMxVSwgMHhlMmQ5YWY3NlUsIDB4YjA3ZGZhODdVLCAweDM2NmNkOGI0VSwKKyAgICAweDdkZmFlOTEzVSwgMHhlNGQ1Yjc2MlUsIDB4MzM2NmNjYWFVLCAweGZmZTNkYjM4VSwKKyAgICAweDYwYzA5ZDVkVSwgMHgyMDQwODBjMFUsIDB4MDgxMDIwMzBVLCAweDhiMGIxNjFkVSwKKyAgICAweDVlYmM2NWQ5VSwgMHhhYjRiOTZkZFUsIDB4N2ZmZWUxMWZVLCAweDc4ZjBmZDBkVSwKKyAgICAweDdjZjhlZDE1VSwgMHgyYzU4YjBlOFUsIDB4NTdhZTQxZWZVLCAweGQyYjk2ZmQ2VSwKKyAgICAweGRjYTU1N2YyVSwgMHg2ZGRhYTk3M1UsIDB4N2VmY2U1MTlVLCAweDBkMWEzNDJlVSwKKyAgICAweDUzYTY1MWY3VSwgMHg5NDM1NmE1ZlUsIDB4YzM5YjJiYjBVLCAweDI4NTBhMGYwVSwKKyAgICAweDI3NGU5Y2QyVSwgMHgwNjBjMTgxNFUsIDB4NWZiZTYxZGZVLCAweGFkNDc4ZWM5VSwKKyAgICAweDY3Y2U4MTRmVSwgMHg1Y2I4NmRkNVUsIDB4NTVhYTQ5ZTNVLCAweDQ4OTAzZGFkVSwKKyAgICAweDBlMWMzODI0VSwgMHg1MmE0NTVmMVUsIDB4ZWFjOThmNDZVLCAweDQyODQxNTkxVSwKKyAgICAweDViYjY3MWM3VSwgMHg1ZGJhNjlkM1UsIDB4MzA2MGMwYTBVLCAweDU4YjA3ZGNkVSwKKyAgICAweDUxYTI1OWZiVSwgMHg1OWIyNzljYlUsIDB4M2M3OGYwODhVLCAweDRlOWMyNWI5VSwKKyAgICAweDM4NzBlMDkwVSwgMHg4YTA5MTIxYlUsIDB4NzJlNGQ1MzFVLCAweDE0Mjg1MDc4VSwKKyAgICAweGU3ZDNiYjY4VSwgMHhjNjkxM2ZhZVUsIDB4ZGVhMTVmZmVVLCAweDUwYTA1ZGZkVSwKKyAgICAweDhlMDEwMjAzVSwgMHg5MjM5NzI0YlUsIDB4ZDFiZjYzZGNVLCAweDc3ZWVjMTJmVSwKKyAgICAweDkzM2I3NjRkVSwgMHg0NThhMDk4M1UsIDB4OWEyOTUyN2JVLCAweGNlODExZjllVSwKKyAgICAweDJkNWFiNGVlVSwgMHgwMzA2MGMwYVUsIDB4NjJjNDk1NTFVLCAweGI2NzFlMjkzVSwKKyAgICAweGI5NmZkZWIxVSwgMHhiZjYzYzZhNVUsIDB4OTYzMTYyNTNVLCAweDZiZDZiMTY3VSwKKyAgICAweDNmN2VmYzgyVSwgMHgwNzBlMWMxMlUsIDB4MTIyNDQ4NmNVLCAweGFlNDE4MmMzVSwKKyAgICAweDQwODAxZDlkVSwgMHgzNDY4ZDBiOFUsIDB4NDY4YzA1ODlVLCAweDNlN2NmODg0VSwKKyAgICAweGRiYWI0YmUwVSwgMHhjZjgzMWI5OFUsIDB4ZWNjNTk3NTJVLCAweGNjODUxNzkyVSwKKyAgICAweGMxOWYyM2JjVSwgMHhhMTVmYmVlMVUsIDB4YzA5ZDI3YmFVLCAweGQ2YjE3ZmNlVSwKKyAgICAweDFkM2E3NDRlVSwgMHhmNGY1ZjcwMlUsIDB4NjFjMjk5NWJVLCAweDNiNzZlYzlhVSwKKyAgICAweDEwMjA0MDYwVSwgMHhkOGFkNDdlYVUsIDB4NjhkMGJkNmRVLCAweGEwNWRiYWU3VSwKKyAgICAweGIxN2ZmZTgxVSwgMHgwYTE0MjgzY1UsIDB4NjlkMmI5NmJVLCAweDZjZDhhZDc1VSwKKyAgICAweDQ5OTIzOWFiVSwgMHhmYWU5Y2YyNlUsIDB4NzZlY2M1MjlVLCAweGM0OTUzN2EyVSwKKyAgICAweDllMjE0MjYzVSwgMHg5YjJiNTY3ZFUsIDB4NmVkY2E1NzlVLCAweDk5MmY1ZTcxVSwKKyAgICAweGMyOTkyZmI2VSwgMHhiNzczZTY5NVUsIDB4OTgyZDVhNzdVLCAweGJjNjVjYWFmVSwKKyAgICAweDhmMDMwNjA1VSwgMHg4NTE3MmUzOVUsIDB4MWYzZTdjNDJVLCAweGI0NzVlYTlmVSwKKyAgICAweGY4ZWRjNzJhVSwgMHgxMTIyNDQ2NlUsIDB4MmU1Y2I4ZTRVLCAweDAwMDAwMDAwVSwKKyAgICAweDI1NGE5NGRlVSwgMHgxYzM4NzA0OFUsIDB4MmE1NGE4ZmNVLCAweDNkN2FmNDhlVSwKKyAgICAweDA1MGExNDFlVSwgMHg0ZjllMjFiZlUsIDB4N2JmNmYxMDdVLCAweGIyNzlmMjhiVSwKKyAgICAweDMyNjRjOGFjVSwgMHg5MDNkN2E0N1UsIDB4YWY0Mzg2YzVVLCAweDE5MzI2NDU2VSwKKyAgICAweGEzNWJiNmVkVSwgMHhmN2YzZmIwOFUsIDB4NzNlNmQxMzdVLCAweDlkMjc0ZTY5VSwKKyAgICAweDE1MmE1NDdlVSwgMHg3NGU4Y2QyNVUsIDB4ZWVjMTlmNWVVLCAweGNhODkwZjg2VSwKKyAgICAweDlmMjM0NjY1VSwgMHgwZjFlM2MyMlUsIDB4MWIzNjZjNWFVLCAweDc1ZWFjOTIzVSwKKyAgICAweDg2MTEyMjMzVSwgMHg4NDE1MmEzZlUsIDB4OWMyNTRhNmZVLCAweDRhOTQzNWExVSwKKyAgICAweDk3MzM2NjU1VSwgMHgxYTM0Njg1Y1UsIDB4NjVjYTg5NDNVLCAweGY2ZjFmZjBlVSwKKyAgICAweGVkYzc5MzU0VSwgMHgwOTEyMjQzNlUsIDB4YmI2YmQ2YmRVLCAweDI2NGM5OGQ0VSwKKyAgICAweDgzMWIzNjJkVSwgMHhlYmNiOGI0MFUsIDB4NmZkZWExN2ZVLCAweDgxMWYzZTIxVSwKKyAgICAweDA0MDgxMDE4VSwgMHg2YWQ0YjU2MVUsIDB4NDM4NjExOTdVLCAweDAxMDIwNDA2VSwKKyAgICAweDE3MmU1YzcyVSwgMHhlMWRmYTM3Y1UsIDB4ODcxMzI2MzVVLCAweGY1ZjdmMzA0VSwKKyAgICAweDhkMDcwZTA5VSwgMHhlM2RiYWI3MFUsIDB4MjM0NjhjY2FVLCAweDgwMWQzYTI3VSwKKyAgICAweDQ0ODgwZDg1VSwgMHgxNjJjNTg3NFUsIDB4NjZjYzg1NDlVLCAweDIxNDI4NGM2VSwKKyAgICAweGZlZTFkZjNlVSwgMHhkNWI3NzNjNFUsIDB4MzE2MmM0YTZVLCAweGQ5YWY0M2VjVSwKKyAgICAweDM1NmFkNGJlVSwgMHgxODMwNjA1MFUsIDB4MDIwNDA4MGNVLCAweDY0Yzg4ZDQ1VSwKKyAgICAweGYyZjllZjE2VSwgMHhmMWZmZTMxY1UsIDB4NTZhYzQ1ZTlVLCAweGNkODcxMzk0VSwKKyAgICAweDgyMTkzMjJiVSwgMHhjODhkMDc4YVUsIDB4YmE2OWQyYmJVLCAweGYwZmRlNzFhVSwKKyAgICAweGVmYzM5YjU4VSwgMHhlOWNmODM0Y1UsIDB4ZThjZDg3NGFVLCAweGZkZTdkMzM0VSwKKyAgICAweDg5MGYxZTExVSwgMHhkN2IzN2JjOFUsIDB4Yzc5MzNiYThVLCAweGI1NzdlZTk5VSwKKyAgICAweGE0NTVhYWZmVSwgMHgyZjVlYmNlMlUsIDB4OTUzNzZlNTlVLCAweDEzMjY0YzZhVSwKKyAgICAweDBiMTYyYzNhVSwgMHhmM2ZiZWIxMFUsIDB4ZTBkZGE3N2FVLCAweDM3NmVkY2IyVSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQxWzI1Nl0gPSB7CisgICAgMHg1M2E3ZjVhNlUsIDB4YmJkM2QwNmJVLCAweGQxZTY2ZWJmVSwgMHhlMjcxM2JkOVUsCisgICAgMHhiZGQwZGE2N1UsIDB4NDVhY2NmOGFVLCAweDlhNGRiMzI5VSwgMHhmMjc5MGJmOVUsCisgICAgMHg3NDNhOWNlOFUsIDB4OGZjOThjMDNVLCAweDNmOTE0MTdlVSwgMHhlNWZjMzJkN1UsCisgICAgMHgzYzFlNDQ3OFUsIDB4OGU0NzhmMDFVLCAweGE4NTRlNTRkVSwgMHg2N2JkYTljZVUsCisgICAgMHgwNThjMGYwYVUsIDB4NTdhNWY5YWVVLCAweGY0N2EwMWY1VSwgMHhlYmZiMjBjYlUsCisgICAgMHhjNjYzNTc5MVUsIDB4NmRiOGI3ZGFVLCAweGE3ZGRmNDUzVSwgMHhiNWQ0YzI3N1UsCisgICAgMHhkN2U1NjRiM1UsIDB4N2JiMzhkZjZVLCAweDk3YzVhNDMzVSwgMHg2MWJlYTNjMlUsCisgICAgMHg0ZmE5ZDE5ZVUsIDB4MGQ4ODE3MWFVLCAweDE4MGMyODMwVSwgMHg1OWEyZWJiMlUsCisgICAgMHg3MjM5OTZlNFUsIDB4YTNkZmY4NWJVLCAweDUyMjlmNmE0VSwgMHhhOWRhZTY0ZlUsCisgICAgMHg1NjJiZmFhY1UsIDB4NGRhOGQ3OWFVLCAweDhiY2I4MDBiVSwgMHg5ODRjYjUyZFUsCisgICAgMHg5NjRiYTczMVUsIDB4NDQyMmNjODhVLCAweDQ5YWFkYjkyVSwgMHg0ODI0ZDg5MFUsCisgICAgMHg4MjQxOWIxOVUsIDB4ZTA3MDNkZGRVLCAweDUxYTZmM2EyVSwgMHhlZmY5MmNjM1UsCisgICAgMHhiNDVhYzE3NVUsIDB4ZDllMjc2YWZVLCAweDdkYjA4N2ZhVSwgMHg2YzM2YjRkOFUsCisgICAgMHhmYTdkMTNlOVUsIDB4ZDVlNDYyYjdVLCAweDY2MzNhYWNjVSwgMHhlM2ZmMzhkYlUsCisgICAgMHhjMDYwNWQ5ZFUsIDB4NDAyMGMwODBVLCAweDEwMDgzMDIwVSwgMHgwYjhiMWQxNlUsCisgICAgMHhiYzVlZDk2NVUsIDB4NGJhYmRkOTZVLCAweGZlN2YxZmUxVSwgMHhmMDc4MGRmZFUsCisgICAgMHhmODdjMTVlZFUsIDB4NTgyY2U4YjBVLCAweGFlNTdlZjQxVSwgMHhiOWQyZDY2ZlUsCisgICAgMHhhNWRjZjI1N1UsIDB4ZGE2ZDczYTlVLCAweGZjN2UxOWU1VSwgMHgxYTBkMmUzNFUsCisgICAgMHhhNjUzZjc1MVUsIDB4MzU5NDVmNmFVLCAweDliYzNiMDJiVSwgMHg1MDI4ZjBhMFUsCisgICAgMHg0ZTI3ZDI5Y1UsIDB4MGMwNjE0MThVLCAweGJlNWZkZjYxVSwgMHg0N2FkYzk4ZVUsCisgICAgMHhjZTY3NGY4MVUsIDB4Yjg1Y2Q1NmRVLCAweGFhNTVlMzQ5VSwgMHg5MDQ4YWQzZFUsCisgICAgMHgxYzBlMjQzOFUsIDB4YTQ1MmYxNTVVLCAweGM5ZWE0NjhmVSwgMHg4NDQyOTExNVUsCisgICAgMHhiNjViYzc3MVUsIDB4YmE1ZGQzNjlVLCAweDYwMzBhMGMwVSwgMHhiMDU4Y2Q3ZFUsCisgICAgMHhhMjUxZmI1OVUsIDB4YjI1OWNiNzlVLCAweDc4M2M4OGYwVSwgMHg5YzRlYjkyNVUsCisgICAgMHg3MDM4OTBlMFUsIDB4MDk4YTFiMTJVLCAweGU0NzIzMWQ1VSwgMHgyODE0Nzg1MFUsCisgICAgMHhkM2U3NjhiYlUsIDB4OTFjNmFlM2ZVLCAweGExZGVmZTVmVSwgMHhhMDUwZmQ1ZFUsCisgICAgMHgwMThlMDMwMlUsIDB4Mzk5MjRiNzJVLCAweGJmZDFkYzYzVSwgMHhlZTc3MmZjMVUsCisgICAgMHgzYjkzNGQ3NlUsIDB4OGE0NTgzMDlVLCAweDI5OWE3YjUyVSwgMHg4MWNlOWUxZlUsCisgICAgMHg1YTJkZWViNFUsIDB4MDYwMzBhMGNVLCAweGM0NjI1MTk1VSwgMHg3MWI2OTNlMlUsCisgICAgMHg2ZmI5YjFkZVUsIDB4NjNiZmE1YzZVLCAweDMxOTY1MzYyVSwgMHhkNjZiNjdiMVUsCisgICAgMHg3ZTNmODJmY1UsIDB4MGUwNzEyMWNVLCAweDI0MTI2YzQ4VSwgMHg0MWFlYzM4MlUsCisgICAgMHg4MDQwOWQxZFUsIDB4NjgzNGI4ZDBVLCAweDhjNDY4OTA1VSwgMHg3YzNlODRmOFUsCisgICAgMHhhYmRiZTA0YlUsIDB4ODNjZjk4MWJVLCAweGM1ZWM1Mjk3VSwgMHg4NWNjOTIxN1UsCisgICAgMHg5ZmMxYmMyM1UsIDB4NWZhMWUxYmVVLCAweDlkYzBiYTI3VSwgMHhiMWQ2Y2U3ZlUsCisgICAgMHgzYTFkNGU3NFUsIDB4ZjVmNDAyZjdVLCAweGMyNjE1Yjk5VSwgMHg3NjNiOWFlY1UsCisgICAgMHgyMDEwNjA0MFUsIDB4YWRkOGVhNDdVLCAweGQwNjg2ZGJkVSwgMHg1ZGEwZTdiYVUsCisgICAgMHg3ZmIxODFmZVUsIDB4MTQwYTNjMjhVLCAweGQyNjk2YmI5VSwgMHhkODZjNzVhZFUsCisgICAgMHg5MjQ5YWIzOVUsIDB4ZTlmYTI2Y2ZVLCAweGVjNzYyOWM1VSwgMHg5NWM0YTIzN1UsCisgICAgMHgyMTllNjM0MlUsIDB4MmI5YjdkNTZVLCAweGRjNmU3OWE1VSwgMHgyZjk5NzE1ZVUsCisgICAgMHg5OWMyYjYyZlUsIDB4NzNiNzk1ZTZVLCAweDJkOTg3NzVhVSwgMHg2NWJjYWZjYVUsCisgICAgMHgwMzhmMDUwNlUsIDB4MTc4NTM5MmVVLCAweDNlMWY0MjdjVSwgMHg3NWI0OWZlYVUsCisgICAgMHhlZGY4MmFjN1UsIDB4MjIxMTY2NDRVLCAweDVjMmVlNGI4VSwgMHgwMDAwMDAwMFUsCisgICAgMHg0YTI1ZGU5NFUsIDB4MzgxYzQ4NzBVLCAweDU0MmFmY2E4VSwgMHg3YTNkOGVmNFUsCisgICAgMHgwYTA1MWUxNFUsIDB4OWU0ZmJmMjFVLCAweGY2N2IwN2YxVSwgMHg3OWIyOGJmMlUsCisgICAgMHg2NDMyYWNjOFUsIDB4M2Q5MDQ3N2FVLCAweDQzYWZjNTg2VSwgMHgzMjE5NTY2NFUsCisgICAgMHg1YmEzZWRiNlUsIDB4ZjNmNzA4ZmJVLCAweGU2NzMzN2QxVSwgMHgyNzlkNjk0ZVUsCisgICAgMHgyYTE1N2U1NFUsIDB4ZTg3NDI1Y2RVLCAweGMxZWU1ZTlmVSwgMHg4OWNhODYwZlUsCisgICAgMHgyMzlmNjU0NlUsIDB4MWUwZjIyM2NVLCAweDM2MWI1YTZjVSwgMHhlYTc1MjNjOVUsCisgICAgMHgxMTg2MzMyMlUsIDB4MTU4NDNmMmFVLCAweDI1OWM2ZjRhVSwgMHg5NDRhYTEzNVUsCisgICAgMHgzMzk3NTU2NlUsIDB4MzQxYTVjNjhVLCAweGNhNjU0Mzg5VSwgMHhmMWY2MGVmZlUsCisgICAgMHhjN2VkNTQ5M1UsIDB4MTIwOTM2MjRVLCAweDZiYmJiZGQ2VSwgMHg0YzI2ZDQ5OFUsCisgICAgMHgxYjgzMmQzNlUsIDB4Y2JlYjQwOGJVLCAweGRlNmY3ZmExVSwgMHgxZjgxMjEzZVUsCisgICAgMHgwODA0MTgxMFUsIDB4ZDQ2YTYxYjVVLCAweDg2NDM5NzExVSwgMHgwMjAxMDYwNFUsCisgICAgMHgyZTE3NzI1Y1UsIDB4ZGZlMTdjYTNVLCAweDEzODczNTI2VSwgMHhmN2Y1MDRmM1UsCisgICAgMHgwNzhkMDkwZVUsIDB4ZGJlMzcwYWJVLCAweDQ2MjNjYThjVSwgMHgxZDgwMjczYVUsCisgICAgMHg4ODQ0ODUwZFUsIDB4MmMxNjc0NThVLCAweGNjNjY0OTg1VSwgMHg0MjIxYzY4NFUsCisgICAgMHhlMWZlM2VkZlUsIDB4YjdkNWM0NzNVLCAweDYyMzFhNmM0VSwgMHhhZmQ5ZWM0M1UsCisgICAgMHg2YTM1YmVkNFUsIDB4MzAxODUwNjBVLCAweDA0MDIwYzA4VSwgMHhjODY0NDU4ZFUsCisgICAgMHhmOWYyMTZlZlUsIDB4ZmZmMTFjZTNVLCAweGFjNTZlOTQ1VSwgMHg4N2NkOTQxM1UsCisgICAgMHgxOTgyMmIzMlUsIDB4OGRjODhhMDdVLCAweDY5YmFiYmQyVSwgMHhmZGYwMWFlN1UsCisgICAgMHhjM2VmNTg5YlUsIDB4Y2ZlOTRjODNVLCAweGNkZTg0YTg3VSwgMHhlN2ZkMzRkM1UsCisgICAgMHgwZjg5MTExZVUsIDB4YjNkN2M4N2JVLCAweDkzYzdhODNiVSwgMHg3N2I1OTllZVUsCisgICAgMHg1NWE0ZmZhYVUsIDB4NWUyZmUyYmNVLCAweDM3OTU1OTZlVSwgMHgyNjEzNmE0Y1UsCisgICAgMHgxNjBiM2EyY1UsIDB4ZmJmMzEwZWJVLCAweGRkZTA3YWE3VSwgMHg2ZTM3YjJkY1UsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUMlsyNTZdID0geworICAgIDB4YTZmNWE3NTNVLCAweDZiZDBkM2JiVSwgMHhiZjZlZTZkMVUsIDB4ZDkzYjcxZTJVLAorICAgIDB4NjdkYWQwYmRVLCAweDhhY2ZhYzQ1VSwgMHgyOWIzNGQ5YVUsIDB4ZjkwYjc5ZjJVLAorICAgIDB4ZTg5YzNhNzRVLCAweDAzOGNjOThmVSwgMHg3ZTQxOTEzZlUsIDB4ZDczMmZjZTVVLAorICAgIDB4Nzg0NDFlM2NVLCAweDAxOGY0NzhlVSwgMHg0ZGU1NTRhOFUsIDB4Y2VhOWJkNjdVLAorICAgIDB4MGEwZjhjMDVVLCAweGFlZjlhNTU3VSwgMHhmNTAxN2FmNFUsIDB4Y2IyMGZiZWJVLAorICAgIDB4OTE1NzYzYzZVLCAweGRhYjdiODZkVSwgMHg1M2Y0ZGRhN1UsIDB4NzdjMmQ0YjVVLAorICAgIDB4YjM2NGU1ZDdVLCAweGY2OGRiMzdiVSwgMHgzM2E0YzU5N1UsIDB4YzJhM2JlNjFVLAorICAgIDB4OWVkMWE5NGZVLCAweDFhMTc4ODBkVSwgMHgzMDI4MGMxOFUsIDB4YjJlYmEyNTlVLAorICAgIDB4ZTQ5NjM5NzJVLCAweDViZjhkZmEzVSwgMHhhNGY2Mjk1MlUsIDB4NGZlNmRhYTlVLAorICAgIDB4YWNmYTJiNTZVLCAweDlhZDdhODRkVSwgMHgwYjgwY2I4YlUsIDB4MmRiNTRjOThVLAorICAgIDB4MzFhNzRiOTZVLCAweDg4Y2MyMjQ0VSwgMHg5MmRiYWE0OVUsIDB4OTBkODI0NDhVLAorICAgIDB4MTk5YjQxODJVLCAweGRkM2Q3MGUwVSwgMHhhMmYzYTY1MVUsIDB4YzMyY2Y5ZWZVLAorICAgIDB4NzVjMTVhYjRVLCAweGFmNzZlMmQ5VSwgMHhmYTg3YjA3ZFUsIDB4ZDhiNDM2NmNVLAorICAgIDB4ZTkxMzdkZmFVLCAweGI3NjJlNGQ1VSwgMHhjY2FhMzM2NlUsIDB4ZGIzOGZmZTNVLAorICAgIDB4OWQ1ZDYwYzBVLCAweDgwYzAyMDQwVSwgMHgyMDMwMDgxMFUsIDB4MTYxZDhiMGJVLAorICAgIDB4NjVkOTVlYmNVLCAweDk2ZGRhYjRiVSwgMHhlMTFmN2ZmZVUsIDB4ZmQwZDc4ZjBVLAorICAgIDB4ZWQxNTdjZjhVLCAweGIwZTgyYzU4VSwgMHg0MWVmNTdhZVUsIDB4NmZkNmQyYjlVLAorICAgIDB4NTdmMmRjYTVVLCAweGE5NzM2ZGRhVSwgMHhlNTE5N2VmY1UsIDB4MzQyZTBkMWFVLAorICAgIDB4NTFmNzUzYTZVLCAweDZhNWY5NDM1VSwgMHgyYmIwYzM5YlUsIDB4YTBmMDI4NTBVLAorICAgIDB4OWNkMjI3NGVVLCAweDE4MTQwNjBjVSwgMHg2MWRmNWZiZVUsIDB4OGVjOWFkNDdVLAorICAgIDB4ODE0ZjY3Y2VVLCAweDZkZDU1Y2I4VSwgMHg0OWUzNTVhYVUsIDB4M2RhZDQ4OTBVLAorICAgIDB4MzgyNDBlMWNVLCAweDU1ZjE1MmE0VSwgMHg4ZjQ2ZWFjOVUsIDB4MTU5MTQyODRVLAorICAgIDB4NzFjNzViYjZVLCAweDY5ZDM1ZGJhVSwgMHhjMGEwMzA2MFUsIDB4N2RjZDU4YjBVLAorICAgIDB4NTlmYjUxYTJVLCAweDc5Y2I1OWIyVSwgMHhmMDg4M2M3OFUsIDB4MjViOTRlOWNVLAorICAgIDB4ZTA5MDM4NzBVLCAweDEyMWI4YTA5VSwgMHhkNTMxNzJlNFUsIDB4NTA3ODE0MjhVLAorICAgIDB4YmI2OGU3ZDNVLCAweDNmYWVjNjkxVSwgMHg1ZmZlZGVhMVUsIDB4NWRmZDUwYTBVLAorICAgIDB4MDIwMzhlMDFVLCAweDcyNGI5MjM5VSwgMHg2M2RjZDFiZlUsIDB4YzEyZjc3ZWVVLAorICAgIDB4NzY0ZDkzM2JVLCAweDA5ODM0NThhVSwgMHg1MjdiOWEyOVUsIDB4MWY5ZWNlODFVLAorICAgIDB4YjRlZTJkNWFVLCAweDBjMGEwMzA2VSwgMHg5NTUxNjJjNFUsIDB4ZTI5M2I2NzFVLAorICAgIDB4ZGViMWI5NmZVLCAweGM2YTViZjYzVSwgMHg2MjUzOTYzMVUsIDB4YjE2NzZiZDZVLAorICAgIDB4ZmM4MjNmN2VVLCAweDFjMTIwNzBlVSwgMHg0ODZjMTIyNFUsIDB4ODJjM2FlNDFVLAorICAgIDB4MWQ5ZDQwODBVLCAweGQwYjgzNDY4VSwgMHgwNTg5NDY4Y1UsIDB4Zjg4NDNlN2NVLAorICAgIDB4NGJlMGRiYWJVLCAweDFiOThjZjgzVSwgMHg5NzUyZWNjNVUsIDB4MTc5MmNjODVVLAorICAgIDB4MjNiY2MxOWZVLCAweGJlZTFhMTVmVSwgMHgyN2JhYzA5ZFUsIDB4N2ZjZWQ2YjFVLAorICAgIDB4NzQ0ZTFkM2FVLCAweGY3MDJmNGY1VSwgMHg5OTViNjFjMlUsIDB4ZWM5YTNiNzZVLAorICAgIDB4NDA2MDEwMjBVLCAweDQ3ZWFkOGFkVSwgMHhiZDZkNjhkMFUsIDB4YmFlN2EwNWRVLAorICAgIDB4ZmU4MWIxN2ZVLCAweDI4M2MwYTE0VSwgMHhiOTZiNjlkMlUsIDB4YWQ3NTZjZDhVLAorICAgIDB4MzlhYjQ5OTJVLCAweGNmMjZmYWU5VSwgMHhjNTI5NzZlY1UsIDB4MzdhMmM0OTVVLAorICAgIDB4NDI2MzllMjFVLCAweDU2N2Q5YjJiVSwgMHhhNTc5NmVkY1UsIDB4NWU3MTk5MmZVLAorICAgIDB4MmZiNmMyOTlVLCAweGU2OTViNzczVSwgMHg1YTc3OTgyZFUsIDB4Y2FhZmJjNjVVLAorICAgIDB4MDYwNThmMDNVLCAweDJlMzk4NTE3VSwgMHg3YzQyMWYzZVUsIDB4ZWE5ZmI0NzVVLAorICAgIDB4YzcyYWY4ZWRVLCAweDQ0NjYxMTIyVSwgMHhiOGU0MmU1Y1UsIDB4MDAwMDAwMDBVLAorICAgIDB4OTRkZTI1NGFVLCAweDcwNDgxYzM4VSwgMHhhOGZjMmE1NFUsIDB4ZjQ4ZTNkN2FVLAorICAgIDB4MTQxZTA1MGFVLCAweDIxYmY0ZjllVSwgMHhmMTA3N2JmNlUsIDB4ZjI4YmIyNzlVLAorICAgIDB4YzhhYzMyNjRVLCAweDdhNDc5MDNkVSwgMHg4NmM1YWY0M1UsIDB4NjQ1NjE5MzJVLAorICAgIDB4YjZlZGEzNWJVLCAweGZiMDhmN2YzVSwgMHhkMTM3NzNlNlUsIDB4NGU2OTlkMjdVLAorICAgIDB4NTQ3ZTE1MmFVLCAweGNkMjU3NGU4VSwgMHg5ZjVlZWVjMVUsIDB4MGY4NmNhODlVLAorICAgIDB4NDY2NTlmMjNVLCAweDNjMjIwZjFlVSwgMHg2YzVhMWIzNlUsIDB4YzkyMzc1ZWFVLAorICAgIDB4MjIzMzg2MTFVLCAweDJhM2Y4NDE1VSwgMHg0YTZmOWMyNVUsIDB4MzVhMTRhOTRVLAorICAgIDB4NjY1NTk3MzNVLCAweDY4NWMxYTM0VSwgMHg4OTQzNjVjYVUsIDB4ZmYwZWY2ZjFVLAorICAgIDB4OTM1NGVkYzdVLCAweDI0MzYwOTEyVSwgMHhkNmJkYmI2YlUsIDB4OThkNDI2NGNVLAorICAgIDB4MzYyZDgzMWJVLCAweDhiNDBlYmNiVSwgMHhhMTdmNmZkZVUsIDB4M2UyMTgxMWZVLAorICAgIDB4MTAxODA0MDhVLCAweGI1NjE2YWQ0VSwgMHgxMTk3NDM4NlUsIDB4MDQwNjAxMDJVLAorICAgIDB4NWM3MjE3MmVVLCAweGEzN2NlMWRmVSwgMHgyNjM1ODcxM1UsIDB4ZjMwNGY1ZjdVLAorICAgIDB4MGUwOThkMDdVLCAweGFiNzBlM2RiVSwgMHg4Y2NhMjM0NlUsIDB4M2EyNzgwMWRVLAorICAgIDB4MGQ4NTQ0ODhVLCAweDU4NzQxNjJjVSwgMHg4NTQ5NjZjY1UsIDB4ODRjNjIxNDJVLAorICAgIDB4ZGYzZWZlZTFVLCAweDczYzRkNWI3VSwgMHhjNGE2MzE2MlUsIDB4NDNlY2Q5YWZVLAorICAgIDB4ZDRiZTM1NmFVLCAweDYwNTAxODMwVSwgMHgwODBjMDIwNFUsIDB4OGQ0NTY0YzhVLAorICAgIDB4ZWYxNmYyZjlVLCAweGUzMWNmMWZmVSwgMHg0NWU5NTZhY1UsIDB4MTM5NGNkODdVLAorICAgIDB4MzIyYjgyMTlVLCAweDA3OGFjODhkVSwgMHhkMmJiYmE2OVUsIDB4ZTcxYWYwZmRVLAorICAgIDB4OWI1OGVmYzNVLCAweDgzNGNlOWNmVSwgMHg4NzRhZThjZFUsIDB4ZDMzNGZkZTdVLAorICAgIDB4MWUxMTg5MGZVLCAweDdiYzhkN2IzVSwgMHgzYmE4Yzc5M1UsIDB4ZWU5OWI1NzdVLAorICAgIDB4YWFmZmE0NTVVLCAweGJjZTIyZjVlVSwgMHg2ZTU5OTUzN1UsIDB4NGM2YTEzMjZVLAorICAgIDB4MmMzYTBiMTZVLCAweGViMTBmM2ZiVSwgMHhhNzdhZTBkZFUsIDB4ZGNiMjM3NmVVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDNbMjU2XSA9IHsKKyAgICAweGY1YTY1M2E3VSwgMHhkMDZiYmJkM1UsIDB4NmViZmQxZTZVLCAweDNiZDllMjcxVSwKKyAgICAweGRhNjdiZGQwVSwgMHhjZjhhNDVhY1UsIDB4YjMyOTlhNGRVLCAweDBiZjlmMjc5VSwKKyAgICAweDljZTg3NDNhVSwgMHg4YzAzOGZjOVUsIDB4NDE3ZTNmOTFVLCAweDMyZDdlNWZjVSwKKyAgICAweDQ0NzgzYzFlVSwgMHg4ZjAxOGU0N1UsIDB4ZTU0ZGE4NTRVLCAweGE5Y2U2N2JkVSwKKyAgICAweDBmMGEwNThjVSwgMHhmOWFlNTdhNVUsIDB4MDFmNWY0N2FVLCAweDIwY2JlYmZiVSwKKyAgICAweDU3OTFjNjYzVSwgMHhiN2RhNmRiOFUsIDB4ZjQ1M2E3ZGRVLCAweGMyNzdiNWQ0VSwKKyAgICAweDY0YjNkN2U1VSwgMHg4ZGY2N2JiM1UsIDB4YTQzMzk3YzVVLCAweGEzYzI2MWJlVSwKKyAgICAweGQxOWU0ZmE5VSwgMHgxNzFhMGQ4OFUsIDB4MjgzMDE4MGNVLCAweGViYjI1OWEyVSwKKyAgICAweDk2ZTQ3MjM5VSwgMHhmODViYTNkZlUsIDB4ZjZhNDUyMjlVLCAweGU2NGZhOWRhVSwKKyAgICAweGZhYWM1NjJiVSwgMHhkNzlhNGRhOFUsIDB4ODAwYjhiY2JVLCAweGI1MmQ5ODRjVSwKKyAgICAweGE3MzE5NjRiVSwgMHhjYzg4NDQyMlUsIDB4ZGI5MjQ5YWFVLCAweGQ4OTA0ODI0VSwKKyAgICAweDliMTk4MjQxVSwgMHgzZGRkZTA3MFUsIDB4ZjNhMjUxYTZVLCAweDJjYzNlZmY5VSwKKyAgICAweGMxNzViNDVhVSwgMHg3NmFmZDllMlUsIDB4ODdmYTdkYjBVLCAweGI0ZDg2YzM2VSwKKyAgICAweDEzZTlmYTdkVSwgMHg2MmI3ZDVlNFUsIDB4YWFjYzY2MzNVLCAweDM4ZGJlM2ZmVSwKKyAgICAweDVkOWRjMDYwVSwgMHhjMDgwNDAyMFUsIDB4MzAyMDEwMDhVLCAweDFkMTYwYjhiVSwKKyAgICAweGQ5NjViYzVlVSwgMHhkZDk2NGJhYlUsIDB4MWZlMWZlN2ZVLCAweDBkZmRmMDc4VSwKKyAgICAweDE1ZWRmODdjVSwgMHhlOGIwNTgyY1UsIDB4ZWY0MWFlNTdVLCAweGQ2NmZiOWQyVSwKKyAgICAweGYyNTdhNWRjVSwgMHg3M2E5ZGE2ZFUsIDB4MTllNWZjN2VVLCAweDJlMzQxYTBkVSwKKyAgICAweGY3NTFhNjUzVSwgMHg1ZjZhMzU5NFUsIDB4YjAyYjliYzNVLCAweGYwYTA1MDI4VSwKKyAgICAweGQyOWM0ZTI3VSwgMHgxNDE4MGMwNlUsIDB4ZGY2MWJlNWZVLCAweGM5OGU0N2FkVSwKKyAgICAweDRmODFjZTY3VSwgMHhkNTZkYjg1Y1UsIDB4ZTM0OWFhNTVVLCAweGFkM2Q5MDQ4VSwKKyAgICAweDI0MzgxYzBlVSwgMHhmMTU1YTQ1MlUsIDB4NDY4ZmM5ZWFVLCAweDkxMTU4NDQyVSwKKyAgICAweGM3NzFiNjViVSwgMHhkMzY5YmE1ZFUsIDB4YTBjMDYwMzBVLCAweGNkN2RiMDU4VSwKKyAgICAweGZiNTlhMjUxVSwgMHhjYjc5YjI1OVUsIDB4ODhmMDc4M2NVLCAweGI5MjU5YzRlVSwKKyAgICAweDkwZTA3MDM4VSwgMHgxYjEyMDk4YVUsIDB4MzFkNWU0NzJVLCAweDc4NTAyODE0VSwKKyAgICAweDY4YmJkM2U3VSwgMHhhZTNmOTFjNlUsIDB4ZmU1ZmExZGVVLCAweGZkNWRhMDUwVSwKKyAgICAweDAzMDIwMThlVSwgMHg0YjcyMzk5MlUsIDB4ZGM2M2JmZDFVLCAweDJmYzFlZTc3VSwKKyAgICAweDRkNzYzYjkzVSwgMHg4MzA5OGE0NVUsIDB4N2I1MjI5OWFVLCAweDllMWY4MWNlVSwKKyAgICAweGVlYjQ1YTJkVSwgMHgwYTBjMDYwM1UsIDB4NTE5NWM0NjJVLCAweDkzZTI3MWI2VSwKKyAgICAweGIxZGU2ZmI5VSwgMHhhNWM2NjNiZlUsIDB4NTM2MjMxOTZVLCAweDY3YjFkNjZiVSwKKyAgICAweDgyZmM3ZTNmVSwgMHgxMjFjMGUwN1UsIDB4NmM0ODI0MTJVLCAweGMzODI0MWFlVSwKKyAgICAweDlkMWQ4MDQwVSwgMHhiOGQwNjgzNFUsIDB4ODkwNThjNDZVLCAweDg0Zjg3YzNlVSwKKyAgICAweGUwNGJhYmRiVSwgMHg5ODFiODNjZlUsIDB4NTI5N2M1ZWNVLCAweDkyMTc4NWNjVSwKKyAgICAweGJjMjM5ZmMxVSwgMHhlMWJlNWZhMVUsIDB4YmEyNzlkYzBVLCAweGNlN2ZiMWQ2VSwKKyAgICAweDRlNzQzYTFkVSwgMHgwMmY3ZjVmNFUsIDB4NWI5OWMyNjFVLCAweDlhZWM3NjNiVSwKKyAgICAweDYwNDAyMDEwVSwgMHhlYTQ3YWRkOFUsIDB4NmRiZGQwNjhVLCAweGU3YmE1ZGEwVSwKKyAgICAweDgxZmU3ZmIxVSwgMHgzYzI4MTQwYVUsIDB4NmJiOWQyNjlVLCAweDc1YWRkODZjVSwKKyAgICAweGFiMzk5MjQ5VSwgMHgyNmNmZTlmYVUsIDB4MjljNWVjNzZVLCAweGEyMzc5NWM0VSwKKyAgICAweDYzNDIyMTllVSwgMHg3ZDU2MmI5YlUsIDB4NzlhNWRjNmVVLCAweDcxNWUyZjk5VSwKKyAgICAweGI2MmY5OWMyVSwgMHg5NWU2NzNiN1UsIDB4Nzc1YTJkOThVLCAweGFmY2E2NWJjVSwKKyAgICAweDA1MDYwMzhmVSwgMHgzOTJlMTc4NVUsIDB4NDI3YzNlMWZVLCAweDlmZWE3NWI0VSwKKyAgICAweDJhYzdlZGY4VSwgMHg2NjQ0MjIxMVUsIDB4ZTRiODVjMmVVLCAweDAwMDAwMDAwVSwKKyAgICAweGRlOTQ0YTI1VSwgMHg0ODcwMzgxY1UsIDB4ZmNhODU0MmFVLCAweDhlZjQ3YTNkVSwKKyAgICAweDFlMTQwYTA1VSwgMHhiZjIxOWU0ZlUsIDB4MDdmMWY2N2JVLCAweDhiZjI3OWIyVSwKKyAgICAweGFjYzg2NDMyVSwgMHg0NzdhM2Q5MFUsIDB4YzU4NjQzYWZVLCAweDU2NjQzMjE5VSwKKyAgICAweGVkYjY1YmEzVSwgMHgwOGZiZjNmN1UsIDB4MzdkMWU2NzNVLCAweDY5NGUyNzlkVSwKKyAgICAweDdlNTQyYTE1VSwgMHgyNWNkZTg3NFUsIDB4NWU5ZmMxZWVVLCAweDg2MGY4OWNhVSwKKyAgICAweDY1NDYyMzlmVSwgMHgyMjNjMWUwZlUsIDB4NWE2YzM2MWJVLCAweDIzYzllYTc1VSwKKyAgICAweDMzMjIxMTg2VSwgMHgzZjJhMTU4NFUsIDB4NmY0YTI1OWNVLCAweGExMzU5NDRhVSwKKyAgICAweDU1NjYzMzk3VSwgMHg1YzY4MzQxYVUsIDB4NDM4OWNhNjVVLCAweDBlZmZmMWY2VSwKKyAgICAweDU0OTNjN2VkVSwgMHgzNjI0MTIwOVUsIDB4YmRkNjZiYmJVLCAweGQ0OTg0YzI2VSwKKyAgICAweDJkMzYxYjgzVSwgMHg0MDhiY2JlYlUsIDB4N2ZhMWRlNmZVLCAweDIxM2UxZjgxVSwKKyAgICAweDE4MTAwODA0VSwgMHg2MWI1ZDQ2YVUsIDB4OTcxMTg2NDNVLCAweDA2MDQwMjAxVSwKKyAgICAweDcyNWMyZTE3VSwgMHg3Y2EzZGZlMVUsIDB4MzUyNjEzODdVLCAweDA0ZjNmN2Y1VSwKKyAgICAweDA5MGUwNzhkVSwgMHg3MGFiZGJlM1UsIDB4Y2E4YzQ2MjNVLCAweDI3M2ExZDgwVSwKKyAgICAweDg1MGQ4ODQ0VSwgMHg3NDU4MmMxNlUsIDB4NDk4NWNjNjZVLCAweGM2ODQ0MjIxVSwKKyAgICAweDNlZGZlMWZlVSwgMHhjNDczYjdkNVUsIDB4YTZjNDYyMzFVLCAweGVjNDNhZmQ5VSwKKyAgICAweGJlZDQ2YTM1VSwgMHg1MDYwMzAxOFUsIDB4MGMwODA0MDJVLCAweDQ1OGRjODY0VSwKKyAgICAweDE2ZWZmOWYyVSwgMHgxY2UzZmZmMVUsIDB4ZTk0NWFjNTZVLCAweDk0MTM4N2NkVSwKKyAgICAweDJiMzIxOTgyVSwgMHg4YTA3OGRjOFUsIDB4YmJkMjY5YmFVLCAweDFhZTdmZGYwVSwKKyAgICAweDU4OWJjM2VmVSwgMHg0YzgzY2ZlOVUsIDB4NGE4N2NkZThVLCAweDM0ZDNlN2ZkVSwKKyAgICAweDExMWUwZjg5VSwgMHhjODdiYjNkN1UsIDB4YTgzYjkzYzdVLCAweDk5ZWU3N2I1VSwKKyAgICAweGZmYWE1NWE0VSwgMHhlMmJjNWUyZlUsIDB4NTk2ZTM3OTVVLCAweDZhNGMyNjEzVSwKKyAgICAweDNhMmMxNjBiVSwgMHgxMGViZmJmM1UsIDB4N2FhN2RkZTBVLCAweGIyZGM2ZTM3VSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQ0WzI1Nl0gPSB7CisgICAgMHhhN2E3YTdhN1UsIDB4ZDNkM2QzZDNVLCAweGU2ZTZlNmU2VSwgMHg3MTcxNzE3MVUsCisgICAgMHhkMGQwZDBkMFUsIDB4YWNhY2FjYWNVLCAweDRkNGQ0ZDRkVSwgMHg3OTc5Nzk3OVUsCisgICAgMHgzYTNhM2EzYVUsIDB4YzljOWM5YzlVLCAweDkxOTE5MTkxVSwgMHhmY2ZjZmNmY1UsCisgICAgMHgxZTFlMWUxZVUsIDB4NDc0NzQ3NDdVLCAweDU0NTQ1NDU0VSwgMHhiZGJkYmRiZFUsCisgICAgMHg4YzhjOGM4Y1UsIDB4YTVhNWE1YTVVLCAweDdhN2E3YTdhVSwgMHhmYmZiZmJmYlUsCisgICAgMHg2MzYzNjM2M1UsIDB4YjhiOGI4YjhVLCAweGRkZGRkZGRkVSwgMHhkNGQ0ZDRkNFUsCisgICAgMHhlNWU1ZTVlNVUsIDB4YjNiM2IzYjNVLCAweGM1YzVjNWM1VSwgMHhiZWJlYmViZVUsCisgICAgMHhhOWE5YTlhOVUsIDB4ODg4ODg4ODhVLCAweDBjMGMwYzBjVSwgMHhhMmEyYTJhMlUsCisgICAgMHgzOTM5MzkzOVUsIDB4ZGZkZmRmZGZVLCAweDI5MjkyOTI5VSwgMHhkYWRhZGFkYVUsCisgICAgMHgyYjJiMmIyYlUsIDB4YThhOGE4YThVLCAweGNiY2JjYmNiVSwgMHg0YzRjNGM0Y1UsCisgICAgMHg0YjRiNGI0YlUsIDB4MjIyMjIyMjJVLCAweGFhYWFhYWFhVSwgMHgyNDI0MjQyNFUsCisgICAgMHg0MTQxNDE0MVUsIDB4NzA3MDcwNzBVLCAweGE2YTZhNmE2VSwgMHhmOWY5ZjlmOVUsCisgICAgMHg1YTVhNWE1YVUsIDB4ZTJlMmUyZTJVLCAweGIwYjBiMGIwVSwgMHgzNjM2MzYzNlUsCisgICAgMHg3ZDdkN2Q3ZFUsIDB4ZTRlNGU0ZTRVLCAweDMzMzMzMzMzVSwgMHhmZmZmZmZmZlUsCisgICAgMHg2MDYwNjA2MFUsIDB4MjAyMDIwMjBVLCAweDA4MDgwODA4VSwgMHg4YjhiOGI4YlUsCisgICAgMHg1ZTVlNWU1ZVUsIDB4YWJhYmFiYWJVLCAweDdmN2Y3ZjdmVSwgMHg3ODc4Nzg3OFUsCisgICAgMHg3YzdjN2M3Y1UsIDB4MmMyYzJjMmNVLCAweDU3NTc1NzU3VSwgMHhkMmQyZDJkMlUsCisgICAgMHhkY2RjZGNkY1UsIDB4NmQ2ZDZkNmRVLCAweDdlN2U3ZTdlVSwgMHgwZDBkMGQwZFUsCisgICAgMHg1MzUzNTM1M1UsIDB4OTQ5NDk0OTRVLCAweGMzYzNjM2MzVSwgMHgyODI4MjgyOFUsCisgICAgMHgyNzI3MjcyN1UsIDB4MDYwNjA2MDZVLCAweDVmNWY1ZjVmVSwgMHhhZGFkYWRhZFUsCisgICAgMHg2NzY3Njc2N1UsIDB4NWM1YzVjNWNVLCAweDU1NTU1NTU1VSwgMHg0ODQ4NDg0OFUsCisgICAgMHgwZTBlMGUwZVUsIDB4NTI1MjUyNTJVLCAweGVhZWFlYWVhVSwgMHg0MjQyNDI0MlUsCisgICAgMHg1YjViNWI1YlUsIDB4NWQ1ZDVkNWRVLCAweDMwMzAzMDMwVSwgMHg1ODU4NTg1OFUsCisgICAgMHg1MTUxNTE1MVUsIDB4NTk1OTU5NTlVLCAweDNjM2MzYzNjVSwgMHg0ZTRlNGU0ZVUsCisgICAgMHgzODM4MzgzOFUsIDB4OGE4YThhOGFVLCAweDcyNzI3MjcyVSwgMHgxNDE0MTQxNFUsCisgICAgMHhlN2U3ZTdlN1UsIDB4YzZjNmM2YzZVLCAweGRlZGVkZWRlVSwgMHg1MDUwNTA1MFUsCisgICAgMHg4ZThlOGU4ZVUsIDB4OTI5MjkyOTJVLCAweGQxZDFkMWQxVSwgMHg3Nzc3Nzc3N1UsCisgICAgMHg5MzkzOTM5M1UsIDB4NDU0NTQ1NDVVLCAweDlhOWE5YTlhVSwgMHhjZWNlY2VjZVUsCisgICAgMHgyZDJkMmQyZFUsIDB4MDMwMzAzMDNVLCAweDYyNjI2MjYyVSwgMHhiNmI2YjZiNlUsCisgICAgMHhiOWI5YjliOVUsIDB4YmZiZmJmYmZVLCAweDk2OTY5Njk2VSwgMHg2YjZiNmI2YlUsCisgICAgMHgzZjNmM2YzZlUsIDB4MDcwNzA3MDdVLCAweDEyMTIxMjEyVSwgMHhhZWFlYWVhZVUsCisgICAgMHg0MDQwNDA0MFUsIDB4MzQzNDM0MzRVLCAweDQ2NDY0NjQ2VSwgMHgzZTNlM2UzZVUsCisgICAgMHhkYmRiZGJkYlUsIDB4Y2ZjZmNmY2ZVLCAweGVjZWNlY2VjVSwgMHhjY2NjY2NjY1UsCisgICAgMHhjMWMxYzFjMVUsIDB4YTFhMWExYTFVLCAweGMwYzBjMGMwVSwgMHhkNmQ2ZDZkNlUsCisgICAgMHgxZDFkMWQxZFUsIDB4ZjRmNGY0ZjRVLCAweDYxNjE2MTYxVSwgMHgzYjNiM2IzYlUsCisgICAgMHgxMDEwMTAxMFUsIDB4ZDhkOGQ4ZDhVLCAweDY4Njg2ODY4VSwgMHhhMGEwYTBhMFUsCisgICAgMHhiMWIxYjFiMVUsIDB4MGEwYTBhMGFVLCAweDY5Njk2OTY5VSwgMHg2YzZjNmM2Y1UsCisgICAgMHg0OTQ5NDk0OVUsIDB4ZmFmYWZhZmFVLCAweDc2NzY3Njc2VSwgMHhjNGM0YzRjNFUsCisgICAgMHg5ZTllOWU5ZVUsIDB4OWI5YjliOWJVLCAweDZlNmU2ZTZlVSwgMHg5OTk5OTk5OVUsCisgICAgMHhjMmMyYzJjMlUsIDB4YjdiN2I3YjdVLCAweDk4OTg5ODk4VSwgMHhiY2JjYmNiY1UsCisgICAgMHg4ZjhmOGY4ZlUsIDB4ODU4NTg1ODVVLCAweDFmMWYxZjFmVSwgMHhiNGI0YjRiNFUsCisgICAgMHhmOGY4ZjhmOFUsIDB4MTExMTExMTFVLCAweDJlMmUyZTJlVSwgMHgwMDAwMDAwMFUsCisgICAgMHgyNTI1MjUyNVUsIDB4MWMxYzFjMWNVLCAweDJhMmEyYTJhVSwgMHgzZDNkM2QzZFUsCisgICAgMHgwNTA1MDUwNVUsIDB4NGY0ZjRmNGZVLCAweDdiN2I3YjdiVSwgMHhiMmIyYjJiMlUsCisgICAgMHgzMjMyMzIzMlUsIDB4OTA5MDkwOTBVLCAweGFmYWZhZmFmVSwgMHgxOTE5MTkxOVUsCisgICAgMHhhM2EzYTNhM1UsIDB4ZjdmN2Y3ZjdVLCAweDczNzM3MzczVSwgMHg5ZDlkOWQ5ZFUsCisgICAgMHgxNTE1MTUxNVUsIDB4NzQ3NDc0NzRVLCAweGVlZWVlZWVlVSwgMHhjYWNhY2FjYVUsCisgICAgMHg5ZjlmOWY5ZlUsIDB4MGYwZjBmMGZVLCAweDFiMWIxYjFiVSwgMHg3NTc1NzU3NVUsCisgICAgMHg4Njg2ODY4NlUsIDB4ODQ4NDg0ODRVLCAweDljOWM5YzljVSwgMHg0YTRhNGE0YVUsCisgICAgMHg5Nzk3OTc5N1UsIDB4MWExYTFhMWFVLCAweDY1NjU2NTY1VSwgMHhmNmY2ZjZmNlUsCisgICAgMHhlZGVkZWRlZFUsIDB4MDkwOTA5MDlVLCAweGJiYmJiYmJiVSwgMHgyNjI2MjYyNlUsCisgICAgMHg4MzgzODM4M1UsIDB4ZWJlYmViZWJVLCAweDZmNmY2ZjZmVSwgMHg4MTgxODE4MVUsCisgICAgMHgwNDA0MDQwNFUsIDB4NmE2YTZhNmFVLCAweDQzNDM0MzQzVSwgMHgwMTAxMDEwMVUsCisgICAgMHgxNzE3MTcxN1UsIDB4ZTFlMWUxZTFVLCAweDg3ODc4Nzg3VSwgMHhmNWY1ZjVmNVUsCisgICAgMHg4ZDhkOGQ4ZFUsIDB4ZTNlM2UzZTNVLCAweDIzMjMyMzIzVSwgMHg4MDgwODA4MFUsCisgICAgMHg0NDQ0NDQ0NFUsIDB4MTYxNjE2MTZVLCAweDY2NjY2NjY2VSwgMHgyMTIxMjEyMVUsCisgICAgMHhmZWZlZmVmZVUsIDB4ZDVkNWQ1ZDVVLCAweDMxMzEzMTMxVSwgMHhkOWQ5ZDlkOVUsCisgICAgMHgzNTM1MzUzNVUsIDB4MTgxODE4MThVLCAweDAyMDIwMjAyVSwgMHg2NDY0NjQ2NFUsCisgICAgMHhmMmYyZjJmMlUsIDB4ZjFmMWYxZjFVLCAweDU2NTY1NjU2VSwgMHhjZGNkY2RjZFUsCisgICAgMHg4MjgyODI4MlUsIDB4YzhjOGM4YzhVLCAweGJhYmFiYWJhVSwgMHhmMGYwZjBmMFUsCisgICAgMHhlZmVmZWZlZlUsIDB4ZTllOWU5ZTlVLCAweGU4ZThlOGU4VSwgMHhmZGZkZmRmZFUsCisgICAgMHg4OTg5ODk4OVUsIDB4ZDdkN2Q3ZDdVLCAweGM3YzdjN2M3VSwgMHhiNWI1YjViNVUsCisgICAgMHhhNGE0YTRhNFUsIDB4MmYyZjJmMmZVLCAweDk1OTU5NTk1VSwgMHgxMzEzMTMxM1UsCisgICAgMHgwYjBiMGIwYlUsIDB4ZjNmM2YzZjNVLCAweGUwZTBlMGUwVSwgMHgzNzM3MzczN1UsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUNVsyNTZdID0geworICAgIDB4MDAwMDAwMDBVLCAweDAxMDIwNjA4VSwgMHgwMjA0MGMxMFUsIDB4MDMwNjBhMThVLAorICAgIDB4MDQwODE4MjBVLCAweDA1MGExZTI4VSwgMHgwNjBjMTQzMFUsIDB4MDcwZTEyMzhVLAorICAgIDB4MDgxMDMwNDBVLCAweDA5MTIzNjQ4VSwgMHgwYTE0M2M1MFUsIDB4MGIxNjNhNThVLAorICAgIDB4MGMxODI4NjBVLCAweDBkMWEyZTY4VSwgMHgwZTFjMjQ3MFUsIDB4MGYxZTIyNzhVLAorICAgIDB4MTAyMDYwODBVLCAweDExMjI2Njg4VSwgMHgxMjI0NmM5MFUsIDB4MTMyNjZhOThVLAorICAgIDB4MTQyODc4YTBVLCAweDE1MmE3ZWE4VSwgMHgxNjJjNzRiMFUsIDB4MTcyZTcyYjhVLAorICAgIDB4MTgzMDUwYzBVLCAweDE5MzI1NmM4VSwgMHgxYTM0NWNkMFUsIDB4MWIzNjVhZDhVLAorICAgIDB4MWMzODQ4ZTBVLCAweDFkM2E0ZWU4VSwgMHgxZTNjNDRmMFUsIDB4MWYzZTQyZjhVLAorICAgIDB4MjA0MGMwMWRVLCAweDIxNDJjNjE1VSwgMHgyMjQ0Y2MwZFUsIDB4MjM0NmNhMDVVLAorICAgIDB4MjQ0OGQ4M2RVLCAweDI1NGFkZTM1VSwgMHgyNjRjZDQyZFUsIDB4Mjc0ZWQyMjVVLAorICAgIDB4Mjg1MGYwNWRVLCAweDI5NTJmNjU1VSwgMHgyYTU0ZmM0ZFUsIDB4MmI1NmZhNDVVLAorICAgIDB4MmM1OGU4N2RVLCAweDJkNWFlZTc1VSwgMHgyZTVjZTQ2ZFUsIDB4MmY1ZWUyNjVVLAorICAgIDB4MzA2MGEwOWRVLCAweDMxNjJhNjk1VSwgMHgzMjY0YWM4ZFUsIDB4MzM2NmFhODVVLAorICAgIDB4MzQ2OGI4YmRVLCAweDM1NmFiZWI1VSwgMHgzNjZjYjRhZFUsIDB4Mzc2ZWIyYTVVLAorICAgIDB4Mzg3MDkwZGRVLCAweDM5NzI5NmQ1VSwgMHgzYTc0OWNjZFUsIDB4M2I3NjlhYzVVLAorICAgIDB4M2M3ODg4ZmRVLCAweDNkN2E4ZWY1VSwgMHgzZTdjODRlZFUsIDB4M2Y3ZTgyZTVVLAorICAgIDB4NDA4MDlkM2FVLCAweDQxODI5YjMyVSwgMHg0Mjg0OTEyYVUsIDB4NDM4Njk3MjJVLAorICAgIDB4NDQ4ODg1MWFVLCAweDQ1OGE4MzEyVSwgMHg0NjhjODkwYVUsIDB4NDc4ZThmMDJVLAorICAgIDB4NDg5MGFkN2FVLCAweDQ5OTJhYjcyVSwgMHg0YTk0YTE2YVUsIDB4NGI5NmE3NjJVLAorICAgIDB4NGM5OGI1NWFVLCAweDRkOWFiMzUyVSwgMHg0ZTljYjk0YVUsIDB4NGY5ZWJmNDJVLAorICAgIDB4NTBhMGZkYmFVLCAweDUxYTJmYmIyVSwgMHg1MmE0ZjFhYVUsIDB4NTNhNmY3YTJVLAorICAgIDB4NTRhOGU1OWFVLCAweDU1YWFlMzkyVSwgMHg1NmFjZTk4YVUsIDB4NTdhZWVmODJVLAorICAgIDB4NThiMGNkZmFVLCAweDU5YjJjYmYyVSwgMHg1YWI0YzFlYVUsIDB4NWJiNmM3ZTJVLAorICAgIDB4NWNiOGQ1ZGFVLCAweDVkYmFkM2QyVSwgMHg1ZWJjZDljYVUsIDB4NWZiZWRmYzJVLAorICAgIDB4NjBjMDVkMjdVLCAweDYxYzI1YjJmVSwgMHg2MmM0NTEzN1UsIDB4NjNjNjU3M2ZVLAorICAgIDB4NjRjODQ1MDdVLCAweDY1Y2E0MzBmVSwgMHg2NmNjNDkxN1UsIDB4NjdjZTRmMWZVLAorICAgIDB4NjhkMDZkNjdVLCAweDY5ZDI2YjZmVSwgMHg2YWQ0NjE3N1UsIDB4NmJkNjY3N2ZVLAorICAgIDB4NmNkODc1NDdVLCAweDZkZGE3MzRmVSwgMHg2ZWRjNzk1N1UsIDB4NmZkZTdmNWZVLAorICAgIDB4NzBlMDNkYTdVLCAweDcxZTIzYmFmVSwgMHg3MmU0MzFiN1UsIDB4NzNlNjM3YmZVLAorICAgIDB4NzRlODI1ODdVLCAweDc1ZWEyMzhmVSwgMHg3NmVjMjk5N1UsIDB4NzdlZTJmOWZVLAorICAgIDB4NzhmMDBkZTdVLCAweDc5ZjIwYmVmVSwgMHg3YWY0MDFmN1UsIDB4N2JmNjA3ZmZVLAorICAgIDB4N2NmODE1YzdVLCAweDdkZmExM2NmVSwgMHg3ZWZjMTlkN1UsIDB4N2ZmZTFmZGZVLAorICAgIDB4ODAxZDI3NzRVLCAweDgxMWYyMTdjVSwgMHg4MjE5MmI2NFUsIDB4ODMxYjJkNmNVLAorICAgIDB4ODQxNTNmNTRVLCAweDg1MTczOTVjVSwgMHg4NjExMzM0NFUsIDB4ODcxMzM1NGNVLAorICAgIDB4ODgwZDE3MzRVLCAweDg5MGYxMTNjVSwgMHg4YTA5MWIyNFUsIDB4OGIwYjFkMmNVLAorICAgIDB4OGMwNTBmMTRVLCAweDhkMDcwOTFjVSwgMHg4ZTAxMDMwNFUsIDB4OGYwMzA1MGNVLAorICAgIDB4OTAzZDQ3ZjRVLCAweDkxM2Y0MWZjVSwgMHg5MjM5NGJlNFUsIDB4OTMzYjRkZWNVLAorICAgIDB4OTQzNTVmZDRVLCAweDk1Mzc1OWRjVSwgMHg5NjMxNTNjNFUsIDB4OTczMzU1Y2NVLAorICAgIDB4OTgyZDc3YjRVLCAweDk5MmY3MWJjVSwgMHg5YTI5N2JhNFUsIDB4OWIyYjdkYWNVLAorICAgIDB4OWMyNTZmOTRVLCAweDlkMjc2OTljVSwgMHg5ZTIxNjM4NFUsIDB4OWYyMzY1OGNVLAorICAgIDB4YTA1ZGU3NjlVLCAweGExNWZlMTYxVSwgMHhhMjU5ZWI3OVUsIDB4YTM1YmVkNzFVLAorICAgIDB4YTQ1NWZmNDlVLCAweGE1NTdmOTQxVSwgMHhhNjUxZjM1OVUsIDB4YTc1M2Y1NTFVLAorICAgIDB4YTg0ZGQ3MjlVLCAweGE5NGZkMTIxVSwgMHhhYTQ5ZGIzOVUsIDB4YWI0YmRkMzFVLAorICAgIDB4YWM0NWNmMDlVLCAweGFkNDdjOTAxVSwgMHhhZTQxYzMxOVUsIDB4YWY0M2M1MTFVLAorICAgIDB4YjA3ZDg3ZTlVLCAweGIxN2Y4MWUxVSwgMHhiMjc5OGJmOVUsIDB4YjM3YjhkZjFVLAorICAgIDB4YjQ3NTlmYzlVLCAweGI1Nzc5OWMxVSwgMHhiNjcxOTNkOVUsIDB4Yjc3Mzk1ZDFVLAorICAgIDB4Yjg2ZGI3YTlVLCAweGI5NmZiMWExVSwgMHhiYTY5YmJiOVUsIDB4YmI2YmJkYjFVLAorICAgIDB4YmM2NWFmODlVLCAweGJkNjdhOTgxVSwgMHhiZTYxYTM5OVUsIDB4YmY2M2E1OTFVLAorICAgIDB4YzA5ZGJhNGVVLCAweGMxOWZiYzQ2VSwgMHhjMjk5YjY1ZVUsIDB4YzM5YmIwNTZVLAorICAgIDB4YzQ5NWEyNmVVLCAweGM1OTdhNDY2VSwgMHhjNjkxYWU3ZVUsIDB4Yzc5M2E4NzZVLAorICAgIDB4Yzg4ZDhhMGVVLCAweGM5OGY4YzA2VSwgMHhjYTg5ODYxZVUsIDB4Y2I4YjgwMTZVLAorICAgIDB4Y2M4NTkyMmVVLCAweGNkODc5NDI2VSwgMHhjZTgxOWUzZVUsIDB4Y2Y4Mzk4MzZVLAorICAgIDB4ZDBiZGRhY2VVLCAweGQxYmZkY2M2VSwgMHhkMmI5ZDZkZVUsIDB4ZDNiYmQwZDZVLAorICAgIDB4ZDRiNWMyZWVVLCAweGQ1YjdjNGU2VSwgMHhkNmIxY2VmZVUsIDB4ZDdiM2M4ZjZVLAorICAgIDB4ZDhhZGVhOGVVLCAweGQ5YWZlYzg2VSwgMHhkYWE5ZTY5ZVUsIDB4ZGJhYmUwOTZVLAorICAgIDB4ZGNhNWYyYWVVLCAweGRkYTdmNGE2VSwgMHhkZWExZmViZVUsIDB4ZGZhM2Y4YjZVLAorICAgIDB4ZTBkZDdhNTNVLCAweGUxZGY3YzViVSwgMHhlMmQ5NzY0M1UsIDB4ZTNkYjcwNGJVLAorICAgIDB4ZTRkNTYyNzNVLCAweGU1ZDc2NDdiVSwgMHhlNmQxNmU2M1UsIDB4ZTdkMzY4NmJVLAorICAgIDB4ZThjZDRhMTNVLCAweGU5Y2Y0YzFiVSwgMHhlYWM5NDYwM1UsIDB4ZWJjYjQwMGJVLAorICAgIDB4ZWNjNTUyMzNVLCAweGVkYzc1NDNiVSwgMHhlZWMxNWUyM1UsIDB4ZWZjMzU4MmJVLAorICAgIDB4ZjBmZDFhZDNVLCAweGYxZmYxY2RiVSwgMHhmMmY5MTZjM1UsIDB4ZjNmYjEwY2JVLAorICAgIDB4ZjRmNTAyZjNVLCAweGY1ZjcwNGZiVSwgMHhmNmYxMGVlM1UsIDB4ZjdmMzA4ZWJVLAorICAgIDB4ZjhlZDJhOTNVLCAweGY5ZWYyYzliVSwgMHhmYWU5MjY4M1UsIDB4ZmJlYjIwOGJVLAorICAgIDB4ZmNlNTMyYjNVLCAweGZkZTczNGJiVSwgMHhmZWUxM2VhM1UsIDB4ZmZlMzM4YWJVLAorfTsKKworLyoqCisgKiBUaGUgcm91bmQgY29uc3RhbnRzLgorICovCitzdGF0aWMgY29uc3QgdWxvbmczMiByY1tdID0geworICAgMHhhN2QzZTY3MVUsIDB4ZDBhYzRkNzlVLCAweDNhYzk5MWZjVSwgMHgxZTQ3NTRiZFUsCisgICAweDhjYTU3YWZiVSwgMHg2M2I4ZGRkNFUsIDB4ZTViM2M1YmVVLCAweGE5ODgwY2EyVSwKKyAgIDB4MzlkZjI5ZGFVLCAweDJiYThjYjRjVSwgMHg0YjIyYWEyNFUsIDB4NDE3MGE2ZjlVLAorICAgMHg1YWUyYjAzNlUsIDB4N2RlNDMzZmZVLCAweDYwMjAwODhiVSwgMHg1ZWFiN2Y3OFUsCisgICAweDdjMmM1N2QyVSwgMHhkYzZkN2UwZFUsIDB4NTM5NGMzMjhVLAorfTsKKworI2VuZGlmCisKKyAvKioKKyAgICBJbml0aWFsaXplIHRoZSBBbnViaXMgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfYW51YmlzX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50ICBhbnViaXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgaW50IE4sIFIsIGksIHBvcywgcjsKKyAgIHVsb25nMzIga2FwcGFbTUFYX05dOworICAgdWxvbmczMiBpbnRlcltNQVhfTl07CisgICB1bG9uZzMyIHYsIEswLCBLMSwgSzIsIEszOworCisgICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIC8qIFZhbGlkIHNpemVzIChpbiBieXRlcykgYXJlIDE2LCAyMCwgMjQsIDI4LCAzMiwgMzYsIGFuZCA0MC4gKi8KKyAgIGlmICgoa2V5bGVuICYgMykgfHwgKGtleWxlbiA8IDE2KSB8fCAoa2V5bGVuID4gNDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfQorICAgc2tleS0+YW51YmlzLmtleUJpdHMgPSBrZXlsZW4qODsKKworICAgLyoKKyAgICAqIGRldGVybWluZSB0aGUgTiBsZW5ndGggcGFyYW1ldGVyOgorICAgICogKE4uQi4gaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBrZXkgbGVuZ3RoIGlzIHZhbGlkISkKKyAgICAqLworICAgTiA9IHNrZXktPmFudWJpcy5rZXlCaXRzID4+IDU7CisKKyAgIC8qCisgICAgKiBkZXRlcm1pbmUgbnVtYmVyIG9mIHJvdW5kcyBmcm9tIGtleSBzaXplOgorICAgICovCisgICBza2V5LT5hbnViaXMuUiA9IFIgPSA4ICsgTjsKKworICAgaWYgKG51bV9yb3VuZHMgIT0gMCAmJiBudW1fcm91bmRzICE9IHNrZXktPmFudWJpcy5SKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9ST1VORFM7CisgICB9CisKKyAgICAvKgorICAgICogbWFwIGNpcGhlciBrZXkgdG8gaW5pdGlhbCBrZXkgc3RhdGUgKG11KToKKyAgICAqLworICAgIGZvciAoaSA9IDAsIHBvcyA9IDA7IGkgPCBOOyBpKyssIHBvcyArPSA0KSB7CisgICAgICBrYXBwYVtpXSA9CisgICAgICAgICAoa2V5W3BvcyAgICBdIDw8IDI0KSBeCisgICAgICAgICAoa2V5W3BvcyArIDFdIDw8IDE2KSBeCisgICAgICAgICAoa2V5W3BvcyArIDJdIDw8ICA4KSBeCisgICAgICAgICAoa2V5W3BvcyArIDNdICAgICAgKTsKKyAgICB9CisKKyAgIC8qCisgICAgKiBnZW5lcmF0ZSBSICsgMSByb3VuZCBrZXlzOgorICAgICovCisgICBmb3IgKHIgPSAwOyByIDw9IFI7IHIrKykgeworICAgICAgLyoKKyAgICAgICAqIGdlbmVyYXRlIHItdGggcm91bmQga2V5IEtecjoKKyAgICAgICAqLworICAgICAgSzAgPSBUNFsoa2FwcGFbTiAtIDFdID4+IDI0KSAmIDB4ZmZdOworICAgICAgSzEgPSBUNFsoa2FwcGFbTiAtIDFdID4+IDE2KSAmIDB4ZmZdOworICAgICAgSzIgPSBUNFsoa2FwcGFbTiAtIDFdID4+ICA4KSAmIDB4ZmZdOworICAgICAgSzMgPSBUNFsoa2FwcGFbTiAtIDFdICAgICAgKSAmIDB4ZmZdOworICAgICAgZm9yIChpID0gTiAtIDI7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICBLMCA9IFQ0WyhrYXBwYVtpXSA+PiAyNCkgICYgMHhmZl0gXgorICAgICAgICAgICAgKFQ1WyhLMCA+PiAyNCkgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeCisgICAgICAgICAgICAoVDVbKEswID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzAgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMCAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKTsKKyAgICAgICAgIEsxID0gVDRbKGthcHBhW2ldID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIChUNVsoSzEgPj4gMjQpICYgMHhmZl0gJiAweGZmMDAwMDAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisgICAgICAgICAgICAoVDVbKEsxID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzEgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7CisgICAgICAgICBLMiA9IFQ0WyhrYXBwYVtpXSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICAgICAoVDVbKEsyID4+IDI0KSAmIDB4ZmZdICYgMHhmZjAwMDAwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzIgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMiA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeCisgICAgICAgICAgICAoVDVbKEsyICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpOworICAgICAgICAgSzMgPSBUNFsoa2FwcGFbaV0gICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgKFQ1WyhLMyA+PiAyNCkgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeCisgICAgICAgICAgICAoVDVbKEszID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzMgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMyAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKTsKKyAgICAgIH0KKyAgICAgIC8qCisgICAgICAtLSB0aGlzIGlzIHRoZSBjb2RlIHRvIHVzZSB3aXRoIHRoZSBsYXJnZSBVIHRhYmxlczoKKyAgICAgIEswID0gSzEgPSBLMiA9IEszID0gMDsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgIEswIF49IFVbaV1bKGthcHBhW2ldID4+IDI0KSAmIDB4ZmZdOworICAgICAgICAgSzEgXj0gVVtpXVsoa2FwcGFbaV0gPj4gMTYpICYgMHhmZl07CisgICAgICAgICBLMiBePSBVW2ldWyhrYXBwYVtpXSA+PiAgOCkgJiAweGZmXTsKKyAgICAgICAgIEszIF49IFVbaV1bKGthcHBhW2ldICAgICAgKSAmIDB4ZmZdOworICAgICAgfQorICAgICAgKi8KKyAgICAgIHNrZXktPmFudWJpcy5yb3VuZEtleUVuY1tyXVswXSA9IEswOworICAgICAgc2tleS0+YW51YmlzLnJvdW5kS2V5RW5jW3JdWzFdID0gSzE7CisgICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bMl0gPSBLMjsKKyAgICAgIHNrZXktPmFudWJpcy5yb3VuZEtleUVuY1tyXVszXSA9IEszOworCisgICAgICAvKgorICAgICAgICogY29tcHV0ZSBrYXBwYV57cisxfSBmcm9tIGthcHBhXnI6CisgICAgICAgKi8KKyAgICAgIGlmIChyID09IFIpIHsKKyAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgaW50IGogPSBpOworICAgICAgICAgaW50ZXJbaV0gID0gVDBbKGthcHBhW2otLV0gPj4gMjQpICYgMHhmZl07IGlmIChqIDwgMCkgaiA9IE4gLSAxOworICAgICAgICAgaW50ZXJbaV0gXj0gVDFbKGthcHBhW2otLV0gPj4gMTYpICYgMHhmZl07IGlmIChqIDwgMCkgaiA9IE4gLSAxOworICAgICAgICAgaW50ZXJbaV0gXj0gVDJbKGthcHBhW2otLV0gPj4gIDgpICYgMHhmZl07IGlmIChqIDwgMCkgaiA9IE4gLSAxOworICAgICAgICAgaW50ZXJbaV0gXj0gVDNbKGthcHBhW2ogIF0gICAgICApICYgMHhmZl07CisgICAgICB9CisgICAgICBrYXBwYVswXSA9IGludGVyWzBdIF4gcmNbcl07CisgICAgICBmb3IgKGkgPSAxOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICBrYXBwYVtpXSA9IGludGVyW2ldOworICAgICAgfQorICAgfQorCisgICAvKgorICAgICogZ2VuZXJhdGUgaW52ZXJzZSBrZXkgc2NoZWR1bGU6IEsnXjAgPSBLXlIsIEsnXlIgPSBLXjAsIEsnXnIgPSB0aGV0YShLXntSLXJ9KToKKyAgICAqLworICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgc2tleS0+YW51YmlzLnJvdW5kS2V5RGVjWzBdW2ldID0gc2tleS0+YW51YmlzLnJvdW5kS2V5RW5jW1JdW2ldOworICAgICAgc2tleS0+YW51YmlzLnJvdW5kS2V5RGVjW1JdW2ldID0gc2tleS0+YW51YmlzLnJvdW5kS2V5RW5jWzBdW2ldOworICAgfQorICAgZm9yIChyID0gMTsgciA8IFI7IHIrKykgeworICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICAgdiA9IHNrZXktPmFudWJpcy5yb3VuZEtleUVuY1tSIC0gcl1baV07CisgICAgICAgICBza2V5LT5hbnViaXMucm91bmRLZXlEZWNbcl1baV0gPQorICAgICAgICAgICAgVDBbVDRbKHYgPj4gMjQpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBUMVtUNFsodiA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFQyW1Q0Wyh2ID4+ICA4KSAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVDNbVDRbKHYgICAgICApICYgMHhmZl0gJiAweGZmXTsKKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgIGFudWJpc19zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICBpbnQgZXJyOworICBlcnIgPSBfYW51YmlzX3NldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCBza2V5KTsKKyAgYnVybl9zdGFjayhzaXplb2YoaW50KSAqIDUgKyBzaXplb2YodWxvbmczMikgKiAoTUFYX04gKyBNQVhfTiArIDUpKTsKKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorICAKKworc3RhdGljIHZvaWQgYW51YmlzX2NyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZzMyIHJvdW5kS2V5WzE4ICsgMV1bNF0sIGludCBSKSB7CisgICBpbnQgaSwgcG9zLCByOworICAgdWxvbmczMiBzdGF0ZVs0XTsKKyAgIHVsb25nMzIgaW50ZXJbNF07CisKKyAgICAvKgorICAgICogbWFwIHBsYWludGV4dCBibG9jayB0byBjaXBoZXIgc3RhdGUgKG11KQorICAgICogYW5kIGFkZCBpbml0aWFsIHJvdW5kIGtleSAoc2lnbWFbS14wXSk6CisgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgNDsgaSsrLCBwb3MgKz0gNCkgeworICAgICAgc3RhdGVbaV0gPQorICAgICAgICAgKHBsYWludGV4dFtwb3MgICAgXSA8PCAyNCkgXgorICAgICAgICAgKHBsYWludGV4dFtwb3MgKyAxXSA8PCAxNikgXgorICAgICAgICAgKHBsYWludGV4dFtwb3MgKyAyXSA8PCAgOCkgXgorICAgICAgICAgKHBsYWludGV4dFtwb3MgKyAzXSAgICAgICkgXgorICAgICAgICAgcm91bmRLZXlbMF1baV07CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSIC0gMSBmdWxsIHJvdW5kczoKKyAgICAgKi8KKyAgICBmb3IgKHIgPSAxOyByIDwgUjsgcisrKSB7CisgICAgICBpbnRlclswXSA9CisgICAgICAgICBUMFsoc3RhdGVbMF0gPj4gMjQpICYgMHhmZl0gXgorICAgICAgICAgVDFbKHN0YXRlWzFdID4+IDI0KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQyWyhzdGF0ZVsyXSA+PiAyNCkgJiAweGZmXSBeCisgICAgICAgICBUM1soc3RhdGVbM10gPj4gMjQpICYgMHhmZl0gXgorICAgICAgICAgcm91bmRLZXlbcl1bMF07CisgICAgICBpbnRlclsxXSA9CisgICAgICAgICBUMFsoc3RhdGVbMF0gPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgVDFbKHN0YXRlWzFdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQyWyhzdGF0ZVsyXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICBUM1soc3RhdGVbM10gPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgcm91bmRLZXlbcl1bMV07CisgICAgICBpbnRlclsyXSA9CisgICAgICAgICBUMFsoc3RhdGVbMF0gPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgVDFbKHN0YXRlWzFdID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQyWyhzdGF0ZVsyXSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICBUM1soc3RhdGVbM10gPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgcm91bmRLZXlbcl1bMl07CisgICAgICBpbnRlclszXSA9CisgICAgICAgICBUMFsoc3RhdGVbMF0gICAgICApICYgMHhmZl0gXgorICAgICAgICAgVDFbKHN0YXRlWzFdICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgIFQyWyhzdGF0ZVsyXSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICBUM1soc3RhdGVbM10gICAgICApICYgMHhmZl0gXgorICAgICAgICAgcm91bmRLZXlbcl1bM107CisgICAgICBzdGF0ZVswXSA9IGludGVyWzBdOworICAgICAgc3RhdGVbMV0gPSBpbnRlclsxXTsKKyAgICAgIHN0YXRlWzJdID0gaW50ZXJbMl07CisgICAgICBzdGF0ZVszXSA9IGludGVyWzNdOworICAgIH0KKworICAgIC8qCisgICAgKiBsYXN0IHJvdW5kOgorICAgICovCisgICBpbnRlclswXSA9CisgICAgICAoVDBbKHN0YXRlWzBdID4+IDI0KSAmIDB4ZmZdICYgMHhmZjAwMDAwMFUpIF4KKyAgICAgIChUMVsoc3RhdGVbMV0gPj4gMjQpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXgorICAgICAgKFQyWyhzdGF0ZVsyXSA+PiAyNCkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeCisgICAgICAoVDNbKHN0YXRlWzNdID4+IDI0KSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpIF4KKyAgICAgIHJvdW5kS2V5W1JdWzBdOworICAgaW50ZXJbMV0gPQorICAgICAgKFQwWyhzdGF0ZVswXSA+PiAxNikgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeCisgICAgICAoVDFbKHN0YXRlWzFdID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKyAgICAgIChUMlsoc3RhdGVbMl0gPj4gMTYpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorICAgICAgKFQzWyhzdGF0ZVszXSA+PiAxNikgJiAweGZmXSAmIDB4MDAwMDAwZmZVKSBeCisgICAgICByb3VuZEtleVtSXVsxXTsKKyAgIGludGVyWzJdID0KKyAgICAgIChUMFsoc3RhdGVbMF0gPj4gIDgpICYgMHhmZl0gJiAweGZmMDAwMDAwVSkgXgorICAgICAgKFQxWyhzdGF0ZVsxXSA+PiAgOCkgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisgICAgICAoVDJbKHN0YXRlWzJdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4KKyAgICAgIChUM1soc3RhdGVbM10gPj4gIDgpICYgMHhmZl0gJiAweDAwMDAwMGZmVSkgXgorICAgICAgcm91bmRLZXlbUl1bMl07CisgICBpbnRlclszXSA9CisgICAgICAoVDBbKHN0YXRlWzBdICAgICAgKSAmIDB4ZmZdICYgMHhmZjAwMDAwMFUpIF4KKyAgICAgIChUMVsoc3RhdGVbMV0gICAgICApICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXgorICAgICAgKFQyWyhzdGF0ZVsyXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeCisgICAgICAoVDNbKHN0YXRlWzNdICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpIF4KKyAgICAgIHJvdW5kS2V5W1JdWzNdOworCisgICAvKgorICAgICogbWFwIGNpcGhlciBzdGF0ZSB0byBjaXBoZXJ0ZXh0IGJsb2NrIChtdV57LTF9KToKKyAgICAqLworICAgIGZvciAoaSA9IDAsIHBvcyA9IDA7IGkgPCA0OyBpKyssIHBvcyArPSA0KSB7CisgICAgICAgIHVsb25nMzIgdyA9IGludGVyW2ldOworICAgICAgICBjaXBoZXJ0ZXh0W3BvcyAgICBdID0gKHVuc2lnbmVkIGNoYXIpKHcgPj4gMjQpOworICAgICAgICBjaXBoZXJ0ZXh0W3BvcyArIDFdID0gKHVuc2lnbmVkIGNoYXIpKHcgPj4gMTYpOworICAgICAgICBjaXBoZXJ0ZXh0W3BvcyArIDJdID0gKHVuc2lnbmVkIGNoYXIpKHcgPj4gIDgpOworICAgICAgICBjaXBoZXJ0ZXh0W3BvcyArIDNdID0gKHVuc2lnbmVkIGNoYXIpKHcgICAgICApOworICAgIH0KK30KKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEFudWJpcworICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBjdCBUaGUgb3V0cHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgYW51YmlzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgIGFudWJpc19jcnlwdChwdCwgY3QsIHNrZXktPmFudWJpcy5yb3VuZEtleUVuYywgc2tleS0+YW51YmlzLlIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggQW51YmlzCisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgYW51YmlzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgIGFudWJpc19jcnlwdChjdCwgcHQsIHNrZXktPmFudWJpcy5yb3VuZEtleURlYywgc2tleS0+YW51YmlzLlIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIEFudWJpcyBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGFudWJpc190ZXN0KHZvaWQpCit7CisjaWYgIWRlZmluZWQoTFRDX1RFU1QpCisgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3QgeworICAgICBpbnQga2V5bGVuOworICAgICB1bnNpZ25lZCBjaGFyIHB0WzE2XSwgY3RbMTZdLCBrZXlbNDBdOworICB9IHRlc3RzW10gPSB7CisjaWZuZGVmIEFOVUJJU19UV0VBSworICAvKioqKiBPUklHSU5BTCBBTlVCSVMgKioqKi8KKyAgLyogMTI4IGJpdCBrZXlzICovCit7CisgICAxNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEYwLCAweDY4LCAweDYwLCAweEZDLCAweDY3LCAweDMwLCAweEU4LCAweDE4LCAKKyAgICAgMHhGMSwgMHgzMiwgMHhDNywgMHg4QSwgMHhGNCwgMHgxMywgMHgyQSwgMHhGRSB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDE2LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QTgsIDB4NjYsIDB4ODQsIDB4ODAsIDB4MDcsIDB4NzQsIDB4NUMsIDB4ODksIAorICAgICAweEZDLCAweDVFLCAweEI1LCAweEJBLCAweEQ0LCAweEZFLCAweDMyLCAweDZEIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfSwKKworICAgLyogMTYwLWJpdCBrZXlzICovCit7CisgICAyMCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEJELCAweDVFLCAweDMyLCAweEJFLCAweDUxLCAweDY3LCAweEE4LCAweEUyLAorICAgICAweDcyLCAweEQ3LCAweDk1LCAweDBGLCAweDgzLCAweEM2LCAweDhDLCAweDMxIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMjAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg0QywgMHgxRiwgMHg4NiwgMHgyRSwgMHgxMSwgMHhFQiwgMHhDRSwgMHhFQiwKKyAgICAgMHhGRSwgMHhCOSwgMHg3MywgMHhDOSwgMHhERiwgMHhFRiwgMHg3QSwgMHhEQiB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMTkyLWJpdCBrZXlzICovCit7CisgICAyNCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDE3LCAweEFDLCAweDU3LCAweDQ0LCAweDlELCAweDU5LCAweDYxLCAweDY2LCAKKyAgICAgMHhEMCwgMHhDNywgMHg5RSwgMHgwNCwgMHg3QywgMHhDNywgMHg1OCwgMHhGMCB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDI0LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NzEsIDB4NTIsIDB4QjQsIDB4RUIsIDB4MUQsIDB4QUEsIDB4MzYsIDB4RkQsIAorICAgICAweDU3LCAweDE0LCAweDVGLCAweDU3LCAweDA0LCAweDlGLCAweDcwLCAweDc0IH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfSwKKworICAvKiAyMjQtYml0IGtleXMgKi8KK3sKKyAgIDI4LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QTIsIDB4RjAsIDB4QTYsIDB4QjksIDB4MTcsIDB4OTMsIDB4MkEsIDB4M0IsIAorICAgICAweEVGLCAweDA4LCAweEU4LCAweDdBLCAweDU4LCAweEQ2LCAweEY4LCAweDUzIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMjgsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhGMCwgMHhDQSwgMHhGQywgMHg3OCwgMHg4QiwgMHg0QiwgMHg0RSwgMHg1MywgCisgICAgIDB4OEIsIDB4QzQsIDB4MzIsIDB4NkEsIDB4RjUsIDB4QjksIDB4MUIsIDB4NUYgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDI1Ni1iaXQga2V5cyAqLworeworICAgMzIsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhFMCwgMHg4NiwgMHhBQywgMHg0NSwgMHg2QiwgMHgzQywgMHhFNSwgMHgxMywgCisgICAgIDB4RUQsIDB4RjUsIDB4REYsIDB4REQsIDB4RDYsIDB4M0IsIDB4NzEsIDB4OTMgfSwKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Cit9LCB7CisgICAzMiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDUwLCAweDAxLCAweEI5LCAweEY1LCAweDIxLCAweEMxLCAweEMxLCAweDI5LCAKKyAgICAgMHgwMCwgMHhENSwgMHhFQywgMHg5OCwgMHgyQiwgMHg5RSwgMHhFOCwgMHgyMSB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMjg4LWJpdCBrZXlzICovCit7CisgICAzNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEU4LCAweEY0LCAweEFGLCAweDJCLCAweDIxLCAweEEwLCAweDg3LCAweDlCLCAKKyAgICAgMHg0MSwgMHg5NSwgMHhCOSwgMHg3MSwgMHg3NSwgMHg3OSwgMHgwNCwgMHg3QyB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDM2LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4RTYsIDB4QTYsIDB4QTUsIDB4QkMsIDB4OEIsIDB4NjMsIDB4NkYsIDB4RTIsIAorICAgICAweEJELCAweEE3LCAweEE3LCAweDUzLCAweEFCLCAweDQwLCAweDIyLCAweEUwIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfSwKKworICAvKiAzMjAtYml0IGtleXMgKi8KK3sKKyAgIDQwLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4MTcsIDB4MDQsIDB4RDcsIDB4MkMsIDB4QzYsIDB4ODUsIDB4NzYsIDB4MDIsIAorICAgICAweDRCLCAweENDLCAweDM5LCAweDgwLCAweEQ4LCAweDIyLCAweEVBLCAweEE0IH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgNDAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg3QSwgMHg0MSwgMHhFNiwgMHg3RCwgMHg0RiwgMHhEOCwgMHg2NCwgMHhGMCwgCisgICAgIDB4NDQsIDB4QTgsIDB4M0MsIDB4NzMsIDB4ODEsIDB4N0UsIDB4NTMsIDB4RDggfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9CisjZWxzZQorICAvKioqKiBUd2Vha2VkIEFOVUJJUyAqKioqLworICAvKiAxMjggYml0IGtleXMgKi8KK3sKKyAgIDE2LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QjgsIDB4MzUsIDB4QkQsIDB4QzMsIDB4MzQsIDB4ODIsIDB4OUQsIDB4ODMsCisgICAgIDB4NzEsIDB4QkYsIDB4QTMsIDB4NzEsIDB4RTQsIDB4QjMsIDB4QzQsIDB4RkQgfSwKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Cit9LCB7CisgICAxNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEU2LCAweDE0LCAweDFFLCAweEFGLCAweEVCLCAweEUwLCAweDU5LCAweDNDLAorICAgICAweDQ4LCAweEUxLCAweENELCAweEYyLCAweDFCLCAweEJBLCAweEExLCAweDg5IH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfSwKKworICAgLyogMTYwLWJpdCBrZXlzICovCit7CisgICAyMCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDk3LCAweDU5LCAweDc5LCAweDRCLCAweDVDLCAweEEwLCAweDcwLCAweDczLAorICAgICAweDI0LCAweEVGLCAweEIzLCAweDU4LCAweDY3LCAweENBLCAweEQ0LCAweEIzIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMjAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhCOCwgMHgwRCwgMHhGQiwgMHg5QiwgMHhFNCwgMHhBMSwgMHg1OCwgMHg4NywKKyAgICAgMHhCMywgMHg3NiwgMHhENSwgMHgwMiwgMHgxOCwgMHg5NSwgMHhDMSwgMHgyRSB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMTkyLWJpdCBrZXlzICovCit7CisgICAyNCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDdELCAweDYyLCAweDNCLCAweDUyLCAweEM3LCAweDRDLCAweDY0LCAweEQ4LAorICAgICAweEVCLCAweEM3LCAweDJELCAweDU3LCAweDk3LCAweDg1LCAweDQzLCAweDhGIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMjQsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhCMSwgMHgwQSwgMHg1OSwgMHhERCwgMHg1RCwgMHg1RCwgMHg4RCwgMHg2NywKKyAgICAgMHhFQywgMHhFRSwgMHg0QSwgMHhDNCwgMHhCRSwgMHg0RiwgMHhBOCwgMHg0RiB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMjI0LWJpdCBrZXlzICovCit7CisgICAyOCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDY4LCAweDlFLCAweDA1LCAweDk0LCAweDZBLCAweDk0LCAweDQzLCAweDhGLAorICAgICAweEU3LCAweDhFLCAweDM3LCAweDNELCAweDI0LCAweDk3LCAweDkyLCAweEY1IH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMjgsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhERCwgMHhCNywgMHhCMCwgMHhCNCwgMHhFOSwgMHhCNCwgMHg5QiwgMHg5QywKKyAgICAgMHgzOCwgMHgyMCwgMHgyNSwgMHgwQiwgMHg0NywgMHhDMiwgMHgxRiwgMHg4OSB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMjU2LWJpdCBrZXlzICovCit7CisgICAzMiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDk2LCAweDAwLCAweEYwLCAweDc2LCAweDkxLCAweDY5LCAweDI5LCAweDg3LAorICAgICAweEY1LCAweEU1LCAweDk3LCAweERCLCAweERCLCAweEFGLCAweDFCLCAweDBBIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMzIsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg2OSwgMHg5QywgMHhBRiwgMHhERCwgMHg5NCwgMHhDNywgMHhCQywgMHg2MCwKKyAgICAgMHg0NCwgMHhGRSwgMHgwMiwgMHgwNSwgMHg4QSwgMHg2RSwgMHhFRiwgMHhCRCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMjg4LWJpdCBrZXlzICovCit7CisgICAzNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDBGLCAweEM3LCAweEEyLCAweEMwLCAweDExLCAweDE3LCAweEFDLCAweDQzLAorICAgICAweDUyLCAweDVFLCAweERGLCAweDZDLCAweEYzLCAweDk2LCAweDMzLCAweDZDIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMzYsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhBRCwgMHgwOCwgMHg0RiwgMHhFRCwgMHg1NSwgMHhBNiwgMHg5NCwgMHgzRSwKKyAgICAgMHg3RSwgMHg1RSwgMHhFRCwgMHgwNSwgMHhBMSwgMHg5RCwgMHg0MSwgMHhCNCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMzIwLWJpdCBrZXlzICovCit7CisgICA0MCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEZFLCAweEUyLCAweDBFLCAweDJBLCAweDlELCAweEM1LCAweDgzLCAweEJBLAorICAgICAweEEzLCAweEE2LCAweEQ2LCAweEE2LCAweEYyLCAweEU4LCAweDA2LCAweEE1IH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgNDAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg4NiwgMHgzRCwgMHhDQywgMHg0QSwgMHg2MCwgMHgzNCwgMHg5QywgMHgyOCwKKyAgICAgMHhBNywgMHhEQSwgMHhBNCwgMHgzQiwgMHgwQSwgMHhENywgMHhGRCwgMHhDNyB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30KKyNlbmRpZgorfTsKKyAgIGludCB4LCB5OworICAgdW5zaWduZWQgY2hhciBidWZbMl1bMTZdOworICAgc3ltbWV0cmljX2tleSBza2V5OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgYW51YmlzX3NldHVwKHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLCAwLCAmc2tleSk7CisgICAgICAgYW51YmlzX2VjYl9lbmNyeXB0KHRlc3RzW3hdLnB0LCBidWZbMF0sICZza2V5KTsKKyAgICAgICBhbnViaXNfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sICZza2V5KTsKKyAgICAgICBpZiAoWE1FTUNNUChidWZbMF0sIHRlc3RzW3hdLmN0LCAxNikgfHwgWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLnB0LCAxNikpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKworICAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIGFudWJpc19lY2JfZW5jcnlwdChidWZbMF0sIGJ1ZlswXSwgJnNrZXkpOworICAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIGFudWJpc19lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlswXSwgJnNrZXkpOworICAgICAgIGlmIChYTUVNQ01QKGJ1ZlswXSwgdGVzdHNbeF0uY3QsIDE2KSkgeworICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorCisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30KKworLyoqIFRlcm1pbmF0ZSB0aGUgY29udGV4dCAKKyAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisqLwordm9pZCBhbnViaXNfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IGFudWJpc19rZXlzaXplKGludCAqa2V5c2l6ZSkKK3sKKyAgIExUQ19BUkdDSEsoa2V5c2l6ZSAhPSBOVUxMKTsKKyAgIGlmICgqa2V5c2l6ZSA+PSA0MCkgeworICAgICAgKmtleXNpemUgPSA0MDsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPj0gMzYpIHsKKyAgICAgICprZXlzaXplID0gMzY7CisgICB9IGVsc2UgaWYgKCprZXlzaXplID49IDMyKSB7CisgICAgICAqa2V5c2l6ZSA9IDMyOworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAyOCkgeworICAgICAgKmtleXNpemUgPSAyODsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPj0gMjQpIHsKKyAgICAgICprZXlzaXplID0gMjQ7CisgICB9IGVsc2UgaWYgKCprZXlzaXplID49IDIwKSB7CisgICAgICAqa2V5c2l6ZSA9IDIwOworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAxNikgeworICAgICAgKmtleXNpemUgPSAxNjsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKwogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9hbnViaXMuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS43ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xNSAxMjo0MToyOCAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9ibG93ZmlzaC5jIGIvc3JjL2NpcGhlcnMvYmxvd2Zpc2guYwppbmRleCAzNTAyOTgzLi5hZTg5NDVmIDEwMDY0NAotLS0gYS9zcmMvY2lwaGVycy9ibG93ZmlzaC5jCisrKyBiL3NyYy9jaXBoZXJzL2Jsb3dmaXNoLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogLyoqCiAgIEBmaWxlIGJsb3dmaXNoLmMKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAmYmxvd2Zpc2hfdGVzdCwKICAgICAmYmxvd2Zpc2hfZG9uZSwKICAgICAmYmxvd2Zpc2hfa2V5c2l6ZSwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHVsb25nMzIgT1JJR19QWzE2ICsgMl0gPSB7CkBAIC0zODUsMTEgKzM4NSwxMiBAQAogICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKICAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX2Jsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX2Jsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbHNlCi12b2lkIGJsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBibG93ZmlzaF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgIHVsb25nMzIgTCwgUjsKQEAgLTQyOCwxMyArNDI5LDE2IEBACiAgICAvKiBzdG9yZSAqLwogICAgU1RPUkUzMkgoUiwgJmN0WzBdKTsKICAgIFNUT1JFMzJIKEwsICZjdFs0XSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCBibG93ZmlzaF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgYmxvd2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgIF9ibG93ZmlzaF9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOworICAgIGludCBlcnIgPSBfYmxvd2Zpc2hfZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKICAgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDIgKyBzaXplb2YoaW50KSk7CisgICAgcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC00NDMsMTEgKzQ0NywxMiBAQAogICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCiAgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXN0YXRpYyB2b2lkIF9ibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitzdGF0aWMgaW50IF9ibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZWxzZQotdm9pZCBibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgYmxvd2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCiB7CiAgICB1bG9uZzMyIEwsIFI7CkBAIC00ODYsMTMgKzQ5MSwxNSBAQAogICAgLyogc3RvcmUgKi8KICAgIFNUT1JFMzJIKEwsICZwdFswXSk7CiAgICBTVE9SRTMySChSLCAmcHRbNF0pOworICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi12b2lkIGJsb3dmaXNoX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiB7Ci0gICAgX2Jsb3dmaXNoX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICAgaW50IGVyciA9IF9ibG93ZmlzaF9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOwogICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMiArIHNpemVvZihpbnQpKTsKKyAgICByZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTU0MSw3ICs1NDgsNyBAQAogICAgICAgYmxvd2Zpc2hfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZrZXkpOwogCiAgICAgICAvKiBjb21wYXJlICovCi0gICAgICBpZiAoKG1lbWNtcCh0bXBbMF0sIHRlc3RzW3hdLmN0LCA4KSAhPSAwKSB8fCAobWVtY21wKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDgpICE9IDApKSB7CisgICAgICBpZiAoKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCkgfHwgKFhNRU1DTVAodG1wWzFdLCB0ZXN0c1t4XS5wdCwgOCkgIT0gMCkpIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAKQEAgLTU4Myw1ICs1OTAsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Jsb3dmaXNoLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpcGhlcnMvY2FzdDUuYyBiL3NyYy9jaXBoZXJzL2Nhc3Q1LmMKaW5kZXggZjRiMDQ1Yy4uZWJhMzlkYSAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvY2FzdDUuYworKysgYi9zcmMvY2lwaGVycy9jYXN0NS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICAKICAvKiogCkBAIC0yNyw3ICsyNyw3IEBACiAgICAmY2FzdDVfdGVzdCwKICAgICZjYXN0NV9kb25lLAogICAgJmNhc3Q1X2tleXNpemUsCi0gICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCiB9OwogCiBzdGF0aWMgY29uc3QgdWxvbmczMiBTMVsyNTZdID0gewpAQCAtNTM2LDkgKzUzNiw5IEBACiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX2Nhc3Q1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX2Nhc3Q1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbHNlCi12b2lkIGNhc3Q1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBjYXN0NV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgIHVsb25nMzIgUiwgTDsKQEAgLTU2OSwxNCArNTY5LDE2IEBACiAgICB9CiAgICBTVE9SRTMySChSLCZjdFswXSk7CiAgICBTVE9SRTMySChMLCZjdFs0XSk7CisgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCBjYXN0NV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgY2FzdDVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX2Nhc3Q1X2VjYl9lbmNyeXB0KHB0LGN0LHNrZXkpOworICAgaW50IGVyciA9X2Nhc3Q1X2VjYl9lbmNyeXB0KHB0LGN0LHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikqMyk7CisgICByZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTU4Nyw5ICs1ODksOSBAQAogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKICovCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi1zdGF0aWMgdm9pZCBfY2FzdDVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorc3RhdGljIGludCBfY2FzdDVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgY2FzdDVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IGNhc3Q1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbmRpZgogewogICAgdWxvbmczMiBSLCBMOwpAQCAtNjIwLDEzICs2MjIsMTYgQEAKICAgIEwgXj0gRkkoUiwgc2tleS0+Y2FzdDUuS1swXSwgc2tleS0+Y2FzdDUuS1sxNl0pOwogICAgU1RPUkUzMkgoTCwmcHRbMF0pOwogICAgU1RPUkUzMkgoUiwmcHRbNF0pOworCisgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgY2FzdDVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IGNhc3Q1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKIHsKLSAgIF9jYXN0NV9lY2JfZGVjcnlwdChjdCxwdCxza2V5KTsKKyAgIGludCBlcnIgPSBfY2FzdDVfZWNiX2RlY3J5cHQoY3QscHQsc2tleSk7CiAgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSozKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtNjcxLDcgKzY3Niw3IEBACiAgICAgICAgfQogICAgICAgIGNhc3Q1X2VjYl9lbmNyeXB0KHRlc3RzW2ldLnB0LCB0bXBbMF0sICZrZXkpOwogICAgICAgIGNhc3Q1X2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAma2V5KTsKLSAgICAgICBpZiAoKG1lbWNtcCh0bXBbMF0sIHRlc3RzW2ldLmN0LCA4KSAhPSAwKSB8fCAobWVtY21wKHRtcFsxXSwgdGVzdHNbaV0ucHQsIDgpICE9IDApKSB7CisgICAgICAgaWYgKChYTUVNQ01QKHRtcFswXSwgdGVzdHNbaV0uY3QsIDgpICE9IDApIHx8IChYTUVNQ01QKHRtcFsxXSwgdGVzdHNbaV0ucHQsIDgpICE9IDApKSB7CiAgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgICAgICB9CiAgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCkBAIC03MTEsNSArNzE2LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9jYXN0NS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL2Rlcy5jIGIvc3JjL2NpcGhlcnMvZGVzLmMKaW5kZXggOWM1YjU5Yi4uOTlhMGI1OCAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvZGVzLmMKKysrIGIvc3JjL2NpcGhlcnMvZGVzLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAmZGVzX3Rlc3QsCiAgICAgJmRlc19kb25lLAogICAgICZkZXNfa2V5c2l6ZSwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAogfTsKIAogY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBkZXMzX2Rlc2MgPQpAQCAtNDUsNyArNDUsNyBAQAogICAgICZkZXMzX3Rlc3QsCiAgICAgJmRlczNfZG9uZSwKICAgICAmZGVzM19rZXlzaXplLAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCiB9OwogCiBzdGF0aWMgY29uc3QgdWxvbmczMiBieXRlYml0WzhdID0KQEAgLTE1ODIsOCArMTU4Miw5IEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi12b2lkIGRlc19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgZGVzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKIHsKICAgICB1bG9uZzMyIHdvcmtbMl07CiAgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOwpAQCAtMTU5NCw2ICsxNTk1LDcgQEAKICAgICBkZXNmdW5jKHdvcmssIHNrZXktPmRlcy5layk7CiAgICAgU1RPUkUzMkgod29ya1swXSxjdCswKTsKICAgICBTVE9SRTMySCh3b3JrWzFdLGN0KzQpOworICAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogLyoqCkBAIC0xNjAxLDggKzE2MDMsOSBAQAogICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCiAgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KLXZvaWQgZGVzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBkZXNfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewogICAgIHVsb25nMzIgd29ya1syXTsKICAgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CkBAIC0xNjEyLDcgKzE2MTUsOCBAQAogICAgIExPQUQzMkgod29ya1sxXSwgY3QrNCk7CiAgICAgZGVzZnVuYyh3b3JrLCBza2V5LT5kZXMuZGspOwogICAgIFNUT1JFMzJIKHdvcmtbMF0scHQrMCk7Ci0gICAgU1RPUkUzMkgod29ya1sxXSxwdCs0KTsKKyAgICBTVE9SRTMySCh3b3JrWzFdLHB0KzQpOyAgCisgICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAvKioKQEAgLTE2MjAsOCArMTYyNCw5IEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi12b2lkIGRlczNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IGRlczNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewogICAgIHVsb25nMzIgd29ya1syXTsKICAgICAKQEAgLTE2MzUsNiArMTY0MCw3IEBACiAgICAgZGVzZnVuYyh3b3JrLCBza2V5LT5kZXMzLmVrWzJdKTsKICAgICBTVE9SRTMySCh3b3JrWzBdLGN0KzApOwogICAgIFNUT1JFMzJIKHdvcmtbMV0sY3QrNCk7CisgICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAvKioKQEAgLTE2NDIsOCArMTY0OCw5IEBACiAgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwotdm9pZCBkZXMzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBkZXMzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKIHsKICAgICB1bG9uZzMyIHdvcmtbMl07CiAgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOwpAQCAtMTY1Niw2ICsxNjYzLDcgQEAKICAgICBkZXNmdW5jKHdvcmssIHNrZXktPmRlczMuZGtbMl0pOwogICAgIFNUT1JFMzJIKHdvcmtbMF0scHQrMCk7CiAgICAgU1RPUkUzMkgod29ya1sxXSxwdCs0KTsKKyAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKIC8qKgpAQCAtMTc5MCw3ICsxNzk4LDcgQEAKICAgICAgICAgICAgZGVzX2VjYl9kZWNyeXB0KGNhc2VzW2ldLnR4dCwgdG1wLCAmZGVzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtZW1jbXAoY2FzZXNbaV0ub3V0LCB0bXAsIHNpemVvZih0bXApKSAhPSAwKSB7CisgICAgICAgIGlmIChYTUVNQ01QKGNhc2VzW2ldLm91dCwgdG1wLCBzaXplb2YodG1wKSkgIT0gMCkgewogICAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgICB9CiAKQEAgLTE4MzMsNyArMTg0MSw3IEBACiAgICBkZXMzX2VjYl9lbmNyeXB0KHB0LCBjdCwgJnNrZXkpOwogICAgZGVzM19lY2JfZGVjcnlwdChjdCwgdG1wLCAmc2tleSk7CiAgICAKLSAgIGlmIChtZW1jbXAocHQsIHRtcCwgOCkgIT0gMCkgeworICAgaWYgKFhNRU1DTVAocHQsIHRtcCwgOCkgIT0gMCkgewogICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgIH0KICAgIApAQCAtMTg5MCw1ICsxODk4LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9kZXMuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9rYXN1bWkuYyBiL3NyYy9jaXBoZXJzL2thc3VtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDc1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2lwaGVycy9rYXN1bWkuYwpAQCAtMCwwICsxLDMxOCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgIEBmaWxlIGthc3VtaS5jCisgIEltcGxlbWVudGF0aW9uIG9mIHRoZSAzR1BQIEthc3VtaSBibG9jayBjaXBoZXIKKyAgRGVyaXZlZCBmcm9tIHRoZSAzR1BQIHN0YW5kYXJkIHNvdXJjZSBjb2RlCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIExUQ19LQVNVTUkKKwordHlwZWRlZiB1bnNpZ25lZCB1MTY7CisKKyNkZWZpbmUgUk9MMTYoeCwgeSkgKCgoKHgpPDwoeSkpIHwgKCh4KT4+KDE2LSh5KSkpKSAmIDB4RkZGRikKKworY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBrYXN1bWlfZGVzYyA9IHsKKyAgICJrYXN1bWkiLAorICAgMjEsCisgICAxNiwgMTYsIDgsIDgsCisgICAma2FzdW1pX3NldHVwLAorICAgJmthc3VtaV9lY2JfZW5jcnlwdCwKKyAgICZrYXN1bWlfZWNiX2RlY3J5cHQsCisgICAma2FzdW1pX3Rlc3QsCisgICAma2FzdW1pX2RvbmUsCisgICAma2FzdW1pX2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgdTE2IEZJKCB1MTYgaW4sIHUxNiBzdWJrZXkgKQoreworICAgdTE2IG5pbmUsIHNldmVuOworICAgc3RhdGljIGNvbnN0IHUxNiBTN1sxMjhdID0geworICAgICAgNTQsIDUwLCA2MiwgNTYsIDIyLCAzNCwgOTQsIDk2LCAzOCwgNiwgNjMsIDkzLCAyLCAxOCwxMjMsIDMzLAorICAgICAgNTUsMTEzLCAzOSwxMTQsIDIxLCA2NywgNjUsIDEyLCA0NywgNzMsIDQ2LCAyNywgMjUsMTExLDEyNCwgODEsCisgICAgICA1MywgOSwxMjEsIDc5LCA1MiwgNjAsIDU4LCA0OCwxMDEsMTI3LCA0MCwxMjAsMTA0LCA3MCwgNzEsIDQzLAorICAgICAgMjAsMTIyLCA3MiwgNjEsIDIzLDEwOSwgMTMsMTAwLCA3NywgMSwgMTYsIDcsIDgyLCAxMCwxMDUsIDk4LAorICAgICAgMTE3LDExNiwgNzYsIDExLCA4OSwxMDYsIDAsMTI1LDExOCwgOTksIDg2LCA2OSwgMzAsIDU3LDEyNiwgODcsCisgICAgICAxMTIsIDUxLCAxNywgNSwgOTUsIDE0LCA5MCwgODQsIDkxLCA4LCAzNSwxMDMsIDMyLCA5NywgMjgsIDY2LAorICAgICAgMTAyLCAzMSwgMjYsIDQ1LCA3NSwgNCwgODUsIDkyLCAzNywgNzQsIDgwLCA0OSwgNjgsIDI5LDExNSwgNDQsCisgICAgICA2NCwxMDcsMTA4LCAyNCwxMTAsIDgzLCAzNiwgNzgsIDQyLCAxOSwgMTUsIDQxLCA4OCwxMTksIDU5LCAzIH07CisgIHN0YXRpYyBjb25zdCB1MTYgUzlbNTEyXSA9IHsKKyAgICAgIDE2NywyMzksMTYxLDM3OSwzOTEsMzM0LCA5LDMzOCwgMzgsMjI2LCA0OCwzNTgsNDUyLDM4NSwgOTAsMzk3LAorICAgICAgMTgzLDI1MywxNDcsMzMxLDQxNSwzNDAsIDUxLDM2MiwzMDYsNTAwLDI2MiwgODIsMjE2LDE1OSwzNTYsMTc3LAorICAgICAgMTc1LDI0MSw0ODksIDM3LDIwNiwgMTcsIDAsMzMzLCA0NCwyNTQsMzc4LCA1OCwxNDMsMjIwLCA4MSw0MDAsCisgICAgICAgOTUsIDMsMzE1LDI0NSwgNTQsMjM1LDIxOCw0MDUsNDcyLDI2NCwxNzIsNDk0LDM3MSwyOTAsMzk5LCA3NiwKKyAgICAgIDE2NSwxOTcsMzk1LDEyMSwyNTcsNDgwLDQyMywyMTIsMjQwLCAyOCw0NjIsMTc2LDQwNiw1MDcsMjg4LDIyMywKKyAgICAgIDUwMSw0MDcsMjQ5LDI2NSwgODksMTg2LDIyMSw0MjgsMTY0LCA3NCw0NDAsMTk2LDQ1OCw0MjEsMzUwLDE2MywKKyAgICAgIDIzMiwxNTgsMTM0LDM1NCwgMTMsMjUwLDQ5MSwxNDIsMTkxLCA2OSwxOTMsNDI1LDE1MiwyMjcsMzY2LDEzNSwKKyAgICAgIDM0NCwzMDAsMjc2LDI0Miw0MzcsMzIwLDExMywyNzgsIDExLDI0MywgODcsMzE3LCAzNiwgOTMsNDk2LCAyNywKKyAgICAgIDQ4Nyw0NDYsNDgyLCA0MSwgNjgsMTU2LDQ1NywxMzEsMzI2LDQwMywzMzksIDIwLCAzOSwxMTUsNDQyLDEyNCwKKyAgICAgIDQ3NSwzODQsNTA4LCA1MywxMTIsMTcwLDQ3OSwxNTEsMTI2LDE2OSwgNzMsMjY4LDI3OSwzMjEsMTY4LDM2NCwKKyAgICAgIDM2MywyOTIsIDQ2LDQ5OSwzOTMsMzI3LDMyNCwgMjQsNDU2LDI2NywxNTcsNDYwLDQ4OCw0MjYsMzA5LDIyOSwKKyAgICAgIDQzOSw1MDYsMjA4LDI3MSwzNDksNDAxLDQzNCwyMzYsIDE2LDIwOSwzNTksIDUyLCA1NiwxMjAsMTk5LDI3NywKKyAgICAgIDQ2NSw0MTYsMjUyLDI4NywyNDYsIDYsIDgzLDMwNSw0MjAsMzQ1LDE1Myw1MDIsIDY1LCA2MSwyNDQsMjgyLAorICAgICAgMTczLDIyMiw0MTgsIDY3LDM4NiwzNjgsMjYxLDEwMSw0NzYsMjkxLDE5NSw0MzAsIDQ5LCA3OSwxNjYsMzMwLAorICAgICAgMjgwLDM4MywzNzMsMTI4LDM4Miw0MDgsMTU1LDQ5NSwzNjcsMzg4LDI3NCwxMDcsNDU5LDQxNywgNjIsNDU0LAorICAgICAgMTMyLDIyNSwyMDMsMzE2LDIzNCwgMTQsMzAxLCA5MSw1MDMsMjg2LDQyNCwyMTEsMzQ3LDMwNywxNDAsMzc0LAorICAgICAgIDM1LDEwMywxMjUsNDI3LCAxOSwyMTQsNDUzLDE0Niw0OTgsMzE0LDQ0NCwyMzAsMjU2LDMyOSwxOTgsMjg1LAorICAgICAgIDUwLDExNiwgNzgsNDEwLCAxMCwyMDUsNTEwLDE3MSwyMzEsIDQ1LDEzOSw0NjcsIDI5LCA4Niw1MDUsIDMyLAorICAgICAgIDcyLCAyNiwzNDIsMTUwLDMxMyw0OTAsNDMxLDIzOCw0MTEsMzI1LDE0OSw0NzMsIDQwLDExOSwxNzQsMzU1LAorICAgICAgMTg1LDIzMywzODksIDcxLDQ0OCwyNzMsMzcyLCA1NSwxMTAsMTc4LDMyMiwgMTIsNDY5LDM5MiwzNjksMTkwLAorICAgICAgICAxLDEwOSwzNzUsMTM3LDE4MSwgODgsIDc1LDMwOCwyNjAsNDg0LCA5OCwyNzIsMzcwLDI3NSw0MTIsMTExLAorICAgICAgMzM2LDMxOCwgNCw1MDQsNDkyLDI1OSwzMDQsIDc3LDMzNyw0MzUsIDIxLDM1NywzMDMsMzMyLDQ4MywgMTgsCisgICAgICAgNDcsIDg1LCAyNSw0OTcsNDc0LDI4OSwxMDAsMjY5LDI5Niw0NzgsMjcwLDEwNiwgMzEsMTA0LDQzMywgODQsCisgICAgICA0MTQsNDg2LDM5NCwgOTYsIDk5LDE1NCw1MTEsMTQ4LDQxMywzNjEsNDA5LDI1NSwxNjIsMjE1LDMwMiwyMDEsCisgICAgICAyNjYsMzUxLDM0MywxNDQsNDQxLDM2NSwxMDgsMjk4LDI1MSwgMzQsMTgyLDUwOSwxMzgsMjEwLDMzNSwxMzMsCisgICAgICAzMTEsMzUyLDMyOCwxNDEsMzk2LDM0NiwxMjMsMzE5LDQ1MCwyODEsNDI5LDIyOCw0NDMsNDgxLCA5Miw0MDQsCisgICAgICA0ODUsNDIyLDI0OCwyOTcsIDIzLDIxMywxMzAsNDY2LCAyMiwyMTcsMjgzLCA3MCwyOTQsMzYwLDQxOSwxMjcsCisgICAgICAzMTIsMzc3LCA3LDQ2OCwxOTQsIDIsMTE3LDI5NSw0NjMsMjU4LDIyNCw0NDcsMjQ3LDE4NywgODAsMzk4LAorICAgICAgMjg0LDM1MywxMDUsMzkwLDI5OSw0NzEsNDcwLDE4NCwgNTcsMjAwLDM0OCwgNjMsMjA0LDE4OCwgMzMsNDUxLAorICAgICAgIDk3LCAzMCwzMTAsMjE5LCA5NCwxNjAsMTI5LDQ5MywgNjQsMTc5LDI2MywxMDIsMTg5LDIwNywxMTQsNDAyLAorICAgICAgNDM4LDQ3NywzODcsMTIyLDE5MiwgNDIsMzgxLCA1LDE0NSwxMTgsMTgwLDQ0OSwyOTMsMzIzLDEzNiwzODAsCisgICAgICAgNDMsIDY2LCA2MCw0NTUsMzQxLDQ0NSwyMDIsNDMyLCA4LDIzNywgMTUsMzc2LDQzNiw0NjQsIDU5LDQ2MX07CisKKyAgLyogVGhlIHNpeHRlZW4gYml0IGlucHV0IGlzIHNwbGl0IGludG8gdHdvIHVuZXF1YWwgaGFsdmVzLCAqCisgICAqIG5pbmUgYml0cyBhbmQgc2V2ZW4gYml0cyAtIGFzIGlzIHRoZSBzdWJrZXkgICAgICAgICAgICAqLworCisgIG5pbmUgID0gKHUxNikoaW4+PjcpJjB4MUZGOworICBzZXZlbiA9ICh1MTYpKGluJjB4N0YpOworCisgIC8qIE5vdyBydW4gdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyAqLworICBuaW5lICAgPSAodTE2KShTOVtuaW5lXSBeIHNldmVuKTsKKyAgc2V2ZW4gID0gKHUxNikoUzdbc2V2ZW5dIF4gKG5pbmUgJiAweDdGKSk7CisgIHNldmVuIF49IChzdWJrZXk+PjkpOworICBuaW5lICBePSAoc3Via2V5JjB4MUZGKTsKKyAgbmluZSAgID0gKHUxNikoUzlbbmluZV0gXiBzZXZlbik7CisgIHNldmVuICA9ICh1MTYpKFM3W3NldmVuXSBeIChuaW5lICYgMHg3RikpOworICByZXR1cm4gKHUxNikoc2V2ZW48PDkpICsgbmluZTsKK30KKworc3RhdGljIHVsb25nMzIgRk8oIHVsb25nMzIgaW4sIGludCByb3VuZF9ubywgc3ltbWV0cmljX2tleSAqa2V5KQoreworICAgdTE2IGxlZnQsIHJpZ2h0OworCisgIC8qIFNwbGl0IHRoZSBpbnB1dCBpbnRvIHR3byAxNi1iaXQgd29yZHMgKi8KKyAgbGVmdCA9ICh1MTYpKGluPj4xNik7CisgIHJpZ2h0ID0gKHUxNikgaW4mMHhGRkZGOworCisgIC8qIE5vdyBhcHBseSB0aGUgc2FtZSBiYXNpYyB0cmFuc2Zvcm1hdGlvbiB0aHJlZSB0aW1lcyAqLworICBsZWZ0IF49IGtleS0+a2FzdW1pLktPaTFbcm91bmRfbm9dOworICBsZWZ0ID0gRkkoIGxlZnQsIGtleS0+a2FzdW1pLktJaTFbcm91bmRfbm9dICk7CisgIGxlZnQgXj0gcmlnaHQ7CisKKyAgcmlnaHQgXj0ga2V5LT5rYXN1bWkuS09pMltyb3VuZF9ub107CisgIHJpZ2h0ID0gRkkoIHJpZ2h0LCBrZXktPmthc3VtaS5LSWkyW3JvdW5kX25vXSApOworICByaWdodCBePSBsZWZ0OworCisgIGxlZnQgXj0ga2V5LT5rYXN1bWkuS09pM1tyb3VuZF9ub107CisgIGxlZnQgPSBGSSggbGVmdCwga2V5LT5rYXN1bWkuS0lpM1tyb3VuZF9ub10gKTsKKyAgbGVmdCBePSByaWdodDsKKworICByZXR1cm4gKCgodWxvbmczMilyaWdodCk8PDE2KStsZWZ0OworfQorCitzdGF0aWMgdWxvbmczMiBGTCggdWxvbmczMiBpbiwgaW50IHJvdW5kX25vLCBzeW1tZXRyaWNfa2V5ICprZXkgKQoreworICAgIHUxNiBsLCByLCBhLCBiOworICAgIC8qIHNwbGl0IG91dCB0aGUgbGVmdCBhbmQgcmlnaHQgaGFsdmVzICovCisgICAgbCA9ICh1MTYpKGluPj4xNik7CisgICAgciA9ICh1MTYpKGluKSYweEZGRkY7CisgICAgLyogZG8gdGhlIEZMKCkgb3BlcmF0aW9ucyAgICAgICAgICAgKi8KKyAgICBhID0gKHUxNikgKGwgJiBrZXktPmthc3VtaS5LTGkxW3JvdW5kX25vXSk7CisgICAgciBePSBST0wxNihhLDEpOworICAgIGIgPSAodTE2KShyIHwga2V5LT5rYXN1bWkuS0xpMltyb3VuZF9ub10pOworICAgIGwgXj0gUk9MMTYoYiwxKTsKKyAgICAvKiBwdXQgdGhlIHR3byBoYWx2ZXMgYmFjayB0b2dldGhlciAqLworCisgICAgcmV0dXJuICgoKHVsb25nMzIpbCk8PDE2KSArIHI7Cit9CisKK2ludCBrYXN1bWlfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgIHVsb25nMzIgbGVmdCwgcmlnaHQsIHRlbXA7CisgICAgaW50IG47CisKKyAgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgIExPQUQzMkgobGVmdCwgcHQpOworICAgIExPQUQzMkgocmlnaHQsIHB0KzQpOworCisgICAgZm9yIChuID0gMDsgbiA8PSA3OyApIHsgICAgIAorICAgICAgICB0ZW1wID0gRkwobGVmdCwgIG4sICAgc2tleSk7CisgICAgICAgIHRlbXAgPSBGTyh0ZW1wLCAgbisrLCBza2V5KTsKKyAgICAgICAgcmlnaHQgXj0gdGVtcDsKKyAgICAgICAgdGVtcCA9IEZPKHJpZ2h0LCBuLCAgIHNrZXkpOworICAgICAgICB0ZW1wID0gRkwodGVtcCwgIG4rKywgc2tleSk7CisgICAgICAgIGxlZnQgXj0gdGVtcDsKKyAgICB9CisKKyAgICBTVE9SRTMySChsZWZ0LCBjdCk7CisgICAgU1RPUkUzMkgocmlnaHQsIGN0KzQpOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCitpbnQga2FzdW1pX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICB1bG9uZzMyIGxlZnQsIHJpZ2h0LCB0ZW1wOworICAgIGludCBuOworCisgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBMT0FEMzJIKGxlZnQsIGN0KTsKKyAgICBMT0FEMzJIKHJpZ2h0LCBjdCs0KTsKKworICAgIGZvciAobiA9IDc7IG4gPj0gMDsgKSB7CisgICAgICAgIHRlbXAgPSBGTyhyaWdodCwgbiwgICBza2V5KTsKKyAgICAgICAgdGVtcCA9IEZMKHRlbXAsICBuLS0sIHNrZXkpOworICAgICAgICBsZWZ0IF49IHRlbXA7CisgICAgICAgIHRlbXAgPSBGTChsZWZ0LCAgbiwgICBza2V5KTsKKyAgICAgICAgdGVtcCA9IEZPKHRlbXAsICBuLS0sIHNrZXkpOworICAgICAgICByaWdodCBePSB0ZW1wOworICAgIH0KKworICAgIFNUT1JFMzJIKGxlZnQsIHB0KTsKKyAgICBTVE9SRTMySChyaWdodCwgcHQrNCk7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK2ludCBrYXN1bWlfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdTE2IENbOF0gPSB7IDB4MDEyMywweDQ1NjcsMHg4OUFCLDB4Q0RFRiwgMHhGRURDLDB4QkE5OCwweDc2NTQsMHgzMjEwIH07CisgICAgdTE2IHVrZXlbOF0sIEtwcmltZVs4XTsKKyAgICBpbnQgbjsKKworICAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBpZiAoa2V5bGVuICE9IDE2KSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgICB9CisKKyAgICBpZiAobnVtX3JvdW5kcyAhPSAwICYmIG51bV9yb3VuZHMgIT0gOCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgICB9CisKKyAgICAvKiBTdGFydCBieSBlbnN1cmluZyB0aGUgc3Via2V5cyBhcmUgZW5kaWFuIGNvcnJlY3Qgb24gYSAxNi1iaXQgYmFzaXMgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrICkgeworICAgICAgICB1a2V5W25dID0gKCgodTE2KWtleVsyKm5dKSA8PCA4KSB8IGtleVsyKm4rMV07CisgICAgfQorCisgICAgLyogTm93IGJ1aWxkIHRoZSBLJ1tdIGtleXMgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrKSB7CisgICAgICAgIEtwcmltZVtuXSA9IHVrZXlbbl0gXiBDW25dOworICAgIH0KKworICAgIC8qIEZpbmFsbHkgY29uc3RydWN0IHRoZSB2YXJpb3VzIHN1YiBrZXlzICovCisgICAgZm9yKG4gPSAwOyBuIDwgODsgbisrKSB7CisgICAgICAgIHNrZXktPmthc3VtaS5LTGkxW25dID0gUk9MMTYodWtleVtuXSwxKTsKKyAgICAgICAgc2tleS0+a2FzdW1pLktMaTJbbl0gPSBLcHJpbWVbKG4rMikmMHg3XTsKKyAgICAgICAgc2tleS0+a2FzdW1pLktPaTFbbl0gPSBST0wxNih1a2V5WyhuKzEpJjB4N10sNSk7CisgICAgICAgIHNrZXktPmthc3VtaS5LT2kyW25dID0gUk9MMTYodWtleVsobis1KSYweDddLDgpOworICAgICAgICBza2V5LT5rYXN1bWkuS09pM1tuXSA9IFJPTDE2KHVrZXlbKG4rNikmMHg3XSwxMyk7CisgICAgICAgIHNrZXktPmthc3VtaS5LSWkxW25dID0gS3ByaW1lWyhuKzQpJjB4N107CisgICAgICAgIHNrZXktPmthc3VtaS5LSWkyW25dID0gS3ByaW1lWyhuKzMpJjB4N107CisgICAgICAgIHNrZXktPmthc3VtaS5LSWkzW25dID0gS3ByaW1lWyhuKzcpJjB4N107CisgICAgfQorCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCit2b2lkIGthc3VtaV9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpCit7Cit9CisKK2ludCBrYXN1bWlfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPj0gMTYpIHsKKyAgICAgICprZXlzaXplID0gMTY7CisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KK30KKworaW50IGthc3VtaV90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCBwdFs4XSwgY3RbOF07CisgICB9IHRlc3RzW10gPSB7CisKK3sKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NEIsIDB4NTgsIDB4QTcsIDB4NzEsIDB4QUYsIDB4QzcsIDB4RTUsIDB4RTggfQorfSwKKworeworICAgeyAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg3RSwgMHhFRiwgMHgxMSwgMHgzQywgMHg5NSwgMHhCQiwgMHg1QSwgMHg3NyB9Cit9LAorCit7CisgICB7IDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDVGLCAweDE0LCAweDA2LCAweDg2LCAweEQ3LCAweEFELCAweDVBLCAweDM5IH0sCit9LAorCit7CisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDJFLCAweDE0LCAweDkxLCAweENGLCAweDcwLCAweEFBLCAweDQ2LCAweDVEIH0KK30sCisKK3sKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QjUsIDB4NDUsIDB4ODYsIDB4RjQsIDB4QUIsIDB4OUEsIDB4RTUsIDB4NDYgfQorfSwKKworfTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzhdOworICAgc3ltbWV0cmljX2tleSBrZXk7CisgICBpbnQgZXJyLCB4OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKChlcnIgPSBrYXN1bWlfc2V0dXAodGVzdHNbeF0ua2V5LCAxNiwgMCwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBrYXN1bWlfZWNiX2VuY3J5cHQodGVzdHNbeF0ucHQsIGJ1ZlswXSwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBrYXN1bWlfZWNiX2RlY3J5cHQodGVzdHNbeF0uY3QsIGJ1ZlsxXSwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgaWYgKFhNRU1DTVAodGVzdHNbeF0ucHQsIGJ1ZlsxXSwgOCkgfHwgWE1FTUNNUCh0ZXN0c1t4XS5jdCwgYnVmWzBdLCA4KSkgeworICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rYXN1bWkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA5IDAzOjA1OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL2toYXphZC5jIGIvc3JjL2NpcGhlcnMva2hhemFkLmMKaW5kZXggZDA3MTM0Yy4uODQ5MDk1MCAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMva2hhemFkLmMKKysrIGIvc3JjL2NpcGhlcnMva2hhemFkLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI4LDcgKzI4LDcgQEAKICAgICZraGF6YWRfdGVzdCwKICAgICZraGF6YWRfZG9uZSwKICAgICZraGF6YWRfa2V5c2l6ZSwKLSAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKICNkZWZpbmUgUiAgICAgIDggCkBAIC03NDEsMTMgKzc0MSwxNSBAQAogICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKICAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwotdm9pZCBraGF6YWRfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IGtoYXphZF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiB7CiAgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CiAgICBraGF6YWRfY3J5cHQocHQsIGN0LCBza2V5LT5raGF6YWQucm91bmRLZXlFbmMpOworICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAvKioKQEAgLTc1NSwxMyArNzU3LDE1IEBACiAgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwotdm9pZCBraGF6YWRfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IGtoYXphZF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiB7CiAgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CiAgICBraGF6YWRfY3J5cHQoY3QsIHB0LCBza2V5LT5raGF6YWQucm91bmRLZXlEZWMpOworICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAvKioKQEAgLTgwNiwxMyArODEwLDEzIEBACiAgICAgICAga2hhemFkX3NldHVwKHRlc3RzW3hdLmtleSwgMTYsIDAsICZza2V5KTsKICAgICAgICBraGF6YWRfZWNiX2VuY3J5cHQodGVzdHNbeF0ucHQsIGJ1ZlswXSwgJnNrZXkpOwogICAgICAgIGtoYXphZF9lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgJnNrZXkpOwotICAgICAgIGlmIChtZW1jbXAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgOCkgfHwgbWVtY21wKGJ1ZlsxXSwgdGVzdHNbeF0ucHQsIDgpKSB7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgOCkgfHwgWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLnB0LCA4KSkgewogICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICAgfQogCiAgICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykga2hhemFkX2VjYl9lbmNyeXB0KGJ1ZlswXSwgYnVmWzBdLCAmc2tleSk7CiAgICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykga2hhemFkX2VjYl9kZWNyeXB0KGJ1ZlswXSwgYnVmWzBdLCAmc2tleSk7Ci0gICAgICAgaWYgKG1lbWNtcChidWZbMF0sIHRlc3RzW3hdLmN0LCA4KSkgeworICAgICAgIGlmIChYTUVNQ01QKGJ1ZlswXSwgdGVzdHNbeF0uY3QsIDgpKSB7CiAgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgICAgICB9CiAKQEAgLTg0Nyw1ICs4NTEsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2toYXphZC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL2tzZWVkLmMgYi9zcmMvY2lwaGVycy9rc2VlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODFhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2lwaGVycy9rc2VlZC5jCkBAIC0wLDAgKzEsMzc2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgQGZpbGUga3NlZWQuYworICBzZWVkIGltcGxlbWVudGF0aW9uIG9mIFNFRUQgZGVyaXZlZCBmcm9tIFJGQzQyNjkKKyAgVG9tIFN0IERlbmlzCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEtTRUVECisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3Iga3NlZWRfZGVzYyA9IHsKKyAgICJzZWVkIiwKKyAgIDIwLAorICAgMTYsIDE2LCAxNiwgMTYsCisgICAma3NlZWRfc2V0dXAsCisgICAma3NlZWRfZWNiX2VuY3J5cHQsCisgICAma3NlZWRfZWNiX2RlY3J5cHQsCisgICAma3NlZWRfdGVzdCwKKyAgICZrc2VlZF9kb25lLAorICAgJmtzZWVkX2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzBbMjU2XSA9IHsKKzB4Mjk4OUExQThVTCwweDA1ODU4MTg0VUwsMHgxNkM2RDJENFVMLDB4MTNDM0QzRDBVTCwweDE0NDQ1MDU0VUwsMHgxRDBEMTExQ1VMLDB4MkM4Q0EwQUNVTCwweDI1MDUyMTI0VUwsCisweDFENEQ1MTVDVUwsMHgwMzQzNDM0MFVMLDB4MTgwODEwMThVTCwweDFFMEUxMjFDVUwsMHgxMTQxNTE1MFVMLDB4M0NDQ0YwRkNVTCwweDBBQ0FDMkM4VUwsMHgyMzQzNjM2MFVMLAorMHgyODA4MjAyOFVMLDB4MDQ0NDQwNDRVTCwweDIwMDAyMDIwVUwsMHgxRDhEOTE5Q1VMLDB4MjBDMEUwRTBVTCwweDIyQzJFMkUwVUwsMHgwOEM4QzBDOFVMLDB4MTcwNzEzMTRVTCwKKzB4MjU4NUExQTRVTCwweDBGOEY4MzhDVUwsMHgwMzAzMDMwMFVMLDB4M0I0QjczNzhVTCwweDNCOEJCM0I4VUwsMHgxMzAzMTMxMFVMLDB4MTJDMkQyRDBVTCwweDJFQ0VFMkVDVUwsCisweDMwNDA3MDcwVUwsMHgwQzhDODA4Q1VMLDB4M0YwRjMzM0NVTCwweDI4ODhBMEE4VUwsMHgzMjAyMzIzMFVMLDB4MURDREQxRENVTCwweDM2QzZGMkY0VUwsMHgzNDQ0NzA3NFVMLAorMHgyQ0NDRTBFQ1VMLDB4MTU4NTkxOTRVTCwweDBCMEIwMzA4VUwsMHgxNzQ3NTM1NFVMLDB4MUM0QzUwNUNVTCwweDFCNEI1MzU4VUwsMHgzRDhEQjFCQ1VMLDB4MDEwMTAxMDBVTCwKKzB4MjQwNDIwMjRVTCwweDFDMEMxMDFDVUwsMHgzMzQzNzM3MFVMLDB4MTg4ODkwOThVTCwweDEwMDAxMDEwVUwsMHgwQ0NDQzBDQ1VMLDB4MzJDMkYyRjBVTCwweDE5QzlEMUQ4VUwsCisweDJDMEMyMDJDVUwsMHgyN0M3RTNFNFVMLDB4MzI0MjcyNzBVTCwweDAzODM4MzgwVUwsMHgxQjhCOTM5OFVMLDB4MTFDMUQxRDBVTCwweDA2ODY4Mjg0VUwsMHgwOUM5QzFDOFVMLAorMHgyMDQwNjA2MFVMLDB4MTA0MDUwNTBVTCwweDIzODNBM0EwVUwsMHgyQkNCRTNFOFVMLDB4MEQwRDAxMENVTCwweDM2ODZCMkI0VUwsMHgxRThFOTI5Q1VMLDB4MEY0RjQzNENVTCwKKzB4Mzc4N0IzQjRVTCwweDFBNEE1MjU4VUwsMHgwNkM2QzJDNFVMLDB4Mzg0ODcwNzhVTCwweDI2ODZBMkE0VUwsMHgxMjAyMTIxMFVMLDB4MkY4RkEzQUNVTCwweDE1QzVEMUQ0VUwsCisweDIxNDE2MTYwVUwsMHgwM0MzQzNDMFVMLDB4MzQ4NEIwQjRVTCwweDAxNDE0MTQwVUwsMHgxMjQyNTI1MFVMLDB4M0Q0RDcxN0NVTCwweDBEOEQ4MThDVUwsMHgwODA4MDAwOFVMLAorMHgxRjBGMTMxQ1VMLDB4MTk4OTkxOThVTCwweDAwMDAwMDAwVUwsMHgxOTA5MTExOFVMLDB4MDQwNDAwMDRVTCwweDEzNDM1MzUwVUwsMHgzN0M3RjNGNFVMLDB4MjFDMUUxRTBVTCwKKzB4M0RDREYxRkNVTCwweDM2NDY3Mjc0VUwsMHgyRjBGMjMyQ1VMLDB4MjcwNzIzMjRVTCwweDMwODBCMEIwVUwsMHgwQjhCODM4OFVMLDB4MEUwRTAyMENVTCwweDJCOEJBM0E4VUwsCisweDIyODJBMkEwVUwsMHgyRTRFNjI2Q1VMLDB4MTM4MzkzOTBVTCwweDBENEQ0MTRDVUwsMHgyOTQ5NjE2OFVMLDB4M0M0QzcwN0NVTCwweDA5MDkwMTA4VUwsMHgwQTBBMDIwOFVMLAorMHgzRjhGQjNCQ1VMLDB4MkZDRkUzRUNVTCwweDMzQzNGM0YwVUwsMHgwNUM1QzFDNFVMLDB4MDc4NzgzODRVTCwweDE0MDQxMDE0VUwsMHgzRUNFRjJGQ1VMLDB4MjQ0NDYwNjRVTCwKKzB4MUVDRUQyRENVTCwweDJFMEUyMjJDVUwsMHgwQjRCNDM0OFVMLDB4MUEwQTEyMThVTCwweDA2MDYwMjA0VUwsMHgyMTAxMjEyMFVMLDB4MkI0QjYzNjhVTCwweDI2NDY2MjY0VUwsCisweDAyMDIwMjAwVUwsMHgzNUM1RjFGNFVMLDB4MTI4MjkyOTBVTCwweDBBOEE4Mjg4VUwsMHgwQzBDMDAwQ1VMLDB4MzM4M0IzQjBVTCwweDNFNEU3MjdDVUwsMHgxMEMwRDBEMFVMLAorMHgzQTRBNzI3OFVMLDB4MDc0NzQzNDRVTCwweDE2ODY5Mjk0VUwsMHgyNUM1RTFFNFVMLDB4MjYwNjIyMjRVTCwweDAwODA4MDgwVUwsMHgyRDhEQTFBQ1VMLDB4MUZDRkQzRENVTCwKKzB4MjE4MUExQTBVTCwweDMwMDAzMDMwVUwsMHgzNzA3MzMzNFVMLDB4MkU4RUEyQUNVTCwweDM2MDYzMjM0VUwsMHgxNTA1MTExNFVMLDB4MjIwMjIyMjBVTCwweDM4MDgzMDM4VUwsCisweDM0QzRGMEY0VUwsMHgyNzg3QTNBNFVMLDB4MDU0NTQxNDRVTCwweDBDNEM0MDRDVUwsMHgwMTgxODE4MFVMLDB4MjlDOUUxRThVTCwweDA0ODQ4MDg0VUwsMHgxNzg3OTM5NFVMLAorMHgzNTA1MzEzNFVMLDB4MEJDQkMzQzhVTCwweDBFQ0VDMkNDVUwsMHgzQzBDMzAzQ1VMLDB4MzE0MTcxNzBVTCwweDExMDExMTEwVUwsMHgwN0M3QzNDNFVMLDB4MDk4OTgxODhVTCwKKzB4MzU0NTcxNzRVTCwweDNCQ0JGM0Y4VUwsMHgxQUNBRDJEOFVMLDB4MzhDOEYwRjhVTCwweDE0ODQ5MDk0VUwsMHgxOTQ5NTE1OFVMLDB4MDI4MjgyODBVTCwweDA0QzRDMEM0VUwsCisweDNGQ0ZGM0ZDVUwsMHgwOTQ5NDE0OFVMLDB4MzkwOTMxMzhVTCwweDI3NDc2MzY0VUwsMHgwMEMwQzBDMFVMLDB4MEZDRkMzQ0NVTCwweDE3QzdEM0Q0VUwsMHgzODg4QjBCOFVMLAorMHgwRjBGMDMwQ1VMLDB4MEU4RTgyOENVTCwweDAyNDI0MjQwVUwsMHgyMzAzMjMyMFVMLDB4MTE4MTkxOTBVTCwweDJDNEM2MDZDVUwsMHgxQkNCRDNEOFVMLDB4MjQ4NEEwQTRVTCwKKzB4MzQwNDMwMzRVTCwweDMxQzFGMUYwVUwsMHgwODQ4NDA0OFVMLDB4MDJDMkMyQzBVTCwweDJGNEY2MzZDVUwsMHgzRDBEMzEzQ1VMLDB4MkQwRDIxMkNVTCwweDAwNDA0MDQwVUwsCisweDNFOEVCMkJDVUwsMHgzRTBFMzIzQ1VMLDB4M0M4Q0IwQkNVTCwweDAxQzFDMUMwVUwsMHgyQThBQTJBOFVMLDB4M0E4QUIyQjhVTCwweDBFNEU0MjRDVUwsMHgxNTQ1NTE1NFVMLAorMHgzQjBCMzMzOFVMLDB4MUNDQ0QwRENVTCwweDI4NDg2MDY4VUwsMHgzRjRGNzM3Q1VMLDB4MUM4QzkwOUNVTCwweDE4QzhEMEQ4VUwsMHgwQTRBNDI0OFVMLDB4MTY0NjUyNTRVTCwKKzB4Mzc0NzczNzRVTCwweDIwODBBMEEwVUwsMHgyRENERTFFQ1VMLDB4MDY0NjQyNDRVTCwweDM1ODVCMUI0VUwsMHgyQjBCMjMyOFVMLDB4MjU0NTYxNjRVTCwweDNBQ0FGMkY4VUwsCisweDIzQzNFM0UwVUwsMHgzOTg5QjFCOFVMLDB4MzE4MUIxQjBVTCwweDFGOEY5MzlDVUwsMHgxRTRFNTI1Q1VMLDB4MzlDOUYxRjhVTCwweDI2QzZFMkU0VUwsMHgzMjgyQjJCMFVMLAorMHgzMTAxMzEzMFVMLDB4MkFDQUUyRThVTCwweDJENEQ2MTZDVUwsMHgxRjRGNTM1Q1VMLDB4MjRDNEUwRTRVTCwweDMwQzBGMEYwVUwsMHgwRENEQzFDQ1VMLDB4MDg4ODgwODhVTCwKKzB4MTYwNjEyMTRVTCwweDNBMEEzMjM4VUwsMHgxODQ4NTA1OFVMLDB4MTRDNEQwRDRVTCwweDIyNDI2MjYwVUwsMHgyOTA5MjEyOFVMLDB4MDcwNzAzMDRVTCwweDMzMDMzMzMwVUwsCisweDI4QzhFMEU4VUwsMHgxQjBCMTMxOFVMLDB4MDUwNTAxMDRVTCwweDM5NDk3MTc4VUwsMHgxMDgwOTA5MFVMLDB4MkE0QTYyNjhVTCwweDJBMEEyMjI4VUwsMHgxQThBOTI5OFVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzFbMjU2XSA9IHsKKzB4MzgzODA4MzBVTCwweEU4MjhDOEUwVUwsMHgyQzJEMEQyMVVMLDB4QTQyNjg2QTJVTCwweENDMEZDRkMzVUwsMHhEQzFFQ0VEMlVMLDB4QjAzMzgzQjNVTCwweEI4Mzg4OEIwVUwsCisweEFDMkY4RkEzVUwsMHg2MDIwNDA2MFVMLDB4NTQxNTQ1NTFVTCwweEM0MDdDN0MzVUwsMHg0NDA0NDQ0MFVMLDB4NkMyRjRGNjNVTCwweDY4MkI0QjYzVUwsMHg1ODFCNEI1M1VMLAorMHhDMDAzQzNDM1VMLDB4NjAyMjQyNjJVTCwweDMwMzMwMzMzVUwsMHhCNDM1ODVCMVVMLDB4MjgyOTA5MjFVTCwweEEwMjA4MEEwVUwsMHhFMDIyQzJFMlVMLDB4QTQyNzg3QTNVTCwKKzB4RDAxM0MzRDNVTCwweDkwMTE4MTkxVUwsMHgxMDExMDExMVVMLDB4MDQwNjA2MDJVTCwweDFDMUMwQzEwVUwsMHhCQzNDOENCMFVMLDB4MzQzNjA2MzJVTCwweDQ4MEI0QjQzVUwsCisweEVDMkZDRkUzVUwsMHg4ODA4ODg4MFVMLDB4NkMyQzRDNjBVTCwweEE4Mjg4OEEwVUwsMHgxNDE3MDcxM1VMLDB4QzQwNEM0QzBVTCwweDE0MTYwNjEyVUwsMHhGNDM0QzRGMFVMLAorMHhDMDAyQzJDMlVMLDB4NDQwNTQ1NDFVTCwweEUwMjFDMUUxVUwsMHhENDE2QzZEMlVMLDB4M0MzRjBGMzNVTCwweDNDM0QwRDMxVUwsMHg4QzBFOEU4MlVMLDB4OTgxODg4OTBVTCwKKzB4MjgyODA4MjBVTCwweDRDMEU0RTQyVUwsMHhGNDM2QzZGMlVMLDB4M0MzRTBFMzJVTCwweEE0MjU4NUExVUwsMHhGODM5QzlGMVVMLDB4MEMwRDBEMDFVTCwweERDMUZDRkQzVUwsCisweEQ4MThDOEQwVUwsMHgyODJCMEIyM1VMLDB4NjQyNjQ2NjJVTCwweDc4M0E0QTcyVUwsMHgyNDI3MDcyM1VMLDB4MkMyRjBGMjNVTCwweEYwMzFDMUYxVUwsMHg3MDMyNDI3MlVMLAorMHg0MDAyNDI0MlVMLDB4RDQxNEM0RDBVTCwweDQwMDE0MTQxVUwsMHhDMDAwQzBDMFVMLDB4NzAzMzQzNzNVTCwweDY0Mjc0NzYzVUwsMHhBQzJDOENBMFVMLDB4ODgwQjhCODNVTCwKKzB4RjQzN0M3RjNVTCwweEFDMkQ4REExVUwsMHg4MDAwODA4MFVMLDB4MUMxRjBGMTNVTCwweEM4MEFDQUMyVUwsMHgyQzJDMEMyMFVMLDB4QTgyQThBQTJVTCwweDM0MzQwNDMwVUwsCisweEQwMTJDMkQyVUwsMHgwODBCMEIwM1VMLDB4RUMyRUNFRTJVTCwweEU4MjlDOUUxVUwsMHg1QzFENEQ1MVVMLDB4OTQxNDg0OTBVTCwweDE4MTgwODEwVUwsMHhGODM4QzhGMFVMLAorMHg1NDE3NDc1M1VMLDB4QUMyRThFQTJVTCwweDA4MDgwODAwVUwsMHhDNDA1QzVDMVVMLDB4MTAxMzAzMTNVTCwweENDMERDREMxVUwsMHg4NDA2ODY4MlVMLDB4QjgzOTg5QjFVTCwKKzB4RkMzRkNGRjNVTCwweDdDM0Q0RDcxVUwsMHhDMDAxQzFDMVVMLDB4MzAzMTAxMzFVTCwweEY0MzVDNUYxVUwsMHg4ODBBOEE4MlVMLDB4NjgyQTRBNjJVTCwweEIwMzE4MUIxVUwsCisweEQwMTFDMUQxVUwsMHgyMDIwMDAyMFVMLDB4RDQxN0M3RDNVTCwweDAwMDIwMjAyVUwsMHgyMDIyMDIyMlVMLDB4MDQwNDA0MDBVTCwweDY4Mjg0ODYwVUwsMHg3MDMxNDE3MVVMLAorMHgwNDA3MDcwM1VMLDB4RDgxQkNCRDNVTCwweDlDMUQ4RDkxVUwsMHg5ODE5ODk5MVVMLDB4NjAyMTQxNjFVTCwweEJDM0U4RUIyVUwsMHhFNDI2QzZFMlVMLDB4NTgxOTQ5NTFVTCwKKzB4REMxRENERDFVTCwweDUwMTE0MTUxVUwsMHg5MDEwODA5MFVMLDB4REMxQ0NDRDBVTCwweDk4MUE4QTkyVUwsMHhBMDIzODNBM1VMLDB4QTgyQjhCQTNVTCwweEQwMTBDMEQwVUwsCisweDgwMDE4MTgxVUwsMHgwQzBGMEYwM1VMLDB4NDQwNzQ3NDNVTCwweDE4MUEwQTEyVUwsMHhFMDIzQzNFM1VMLDB4RUMyQ0NDRTBVTCwweDhDMEQ4RDgxVUwsMHhCQzNGOEZCM1VMLAorMHg5NDE2ODY5MlVMLDB4NzgzQjRCNzNVTCwweDVDMUM0QzUwVUwsMHhBMDIyODJBMlVMLDB4QTAyMTgxQTFVTCwweDYwMjM0MzYzVUwsMHgyMDIzMDMyM1VMLDB4NEMwRDRENDFVTCwKKzB4QzgwOEM4QzBVTCwweDlDMUU4RTkyVUwsMHg5QzFDOEM5MFVMLDB4MzgzQTBBMzJVTCwweDBDMEMwQzAwVUwsMHgyQzJFMEUyMlVMLDB4QjgzQThBQjJVTCwweDZDMkU0RTYyVUwsCisweDlDMUY4RjkzVUwsMHg1ODFBNEE1MlVMLDB4RjAzMkMyRjJVTCwweDkwMTI4MjkyVUwsMHhGMDMzQzNGM1VMLDB4NDgwOTQ5NDFVTCwweDc4Mzg0ODcwVUwsMHhDQzBDQ0NDMFVMLAorMHgxNDE1MDUxMVVMLDB4RjgzQkNCRjNVTCwweDcwMzA0MDcwVUwsMHg3NDM1NDU3MVVMLDB4N0MzRjRGNzNVTCwweDM0MzUwNTMxVUwsMHgxMDEwMDAxMFVMLDB4MDAwMzAzMDNVTCwKKzB4NjQyNDQ0NjBVTCwweDZDMkQ0RDYxVUwsMHhDNDA2QzZDMlVMLDB4NzQzNDQ0NzBVTCwweEQ0MTVDNUQxVUwsMHhCNDM0ODRCMFVMLDB4RTgyQUNBRTJVTCwweDA4MDkwOTAxVUwsCisweDc0MzY0NjcyVUwsMHgxODE5MDkxMVVMLDB4RkMzRUNFRjJVTCwweDQwMDA0MDQwVUwsMHgxMDEyMDIxMlVMLDB4RTAyMEMwRTBVTCwweEJDM0Q4REIxVUwsMHgwNDA1MDUwMVVMLAorMHhGODNBQ0FGMlVMLDB4MDAwMTAxMDFVTCwweEYwMzBDMEYwVUwsMHgyODJBMEEyMlVMLDB4NUMxRTRFNTJVTCwweEE4Mjk4OUExVUwsMHg1NDE2NDY1MlVMLDB4NDAwMzQzNDNVTCwKKzB4ODQwNTg1ODFVTCwweDE0MTQwNDEwVUwsMHg4ODA5ODk4MVVMLDB4OTgxQjhCOTNVTCwweEIwMzA4MEIwVUwsMHhFNDI1QzVFMVVMLDB4NDgwODQ4NDBVTCwweDc4Mzk0OTcxVUwsCisweDk0MTc4NzkzVUwsMHhGQzNDQ0NGMFVMLDB4MUMxRTBFMTJVTCwweDgwMDI4MjgyVUwsMHgyMDIxMDEyMVVMLDB4OEMwQzhDODBVTCwweDE4MUIwQjEzVUwsMHg1QzFGNEY1M1VMLAorMHg3NDM3NDc3M1VMLDB4NTQxNDQ0NTBVTCwweEIwMzI4MkIyVUwsMHgxQzFEMEQxMVVMLDB4MjQyNTA1MjFVTCwweDRDMEY0RjQzVUwsMHgwMDAwMDAwMFVMLDB4NDQwNjQ2NDJVTCwKKzB4RUMyRENERTFVTCwweDU4MTg0ODUwVUwsMHg1MDEyNDI1MlVMLDB4RTgyQkNCRTNVTCwweDdDM0U0RTcyVUwsMHhEODFBQ0FEMlVMLDB4QzgwOUM5QzFVTCwweEZDM0RDREYxVUwsCisweDMwMzAwMDMwVUwsMHg5NDE1ODU5MVVMLDB4NjQyNTQ1NjFVTCwweDNDM0MwQzMwVUwsMHhCNDM2ODZCMlVMLDB4RTQyNEM0RTBVTCwweEI4M0I4QkIzVUwsMHg3QzNDNEM3MFVMLAorMHgwQzBFMEUwMlVMLDB4NTAxMDQwNTBVTCwweDM4MzkwOTMxVUwsMHgyNDI2MDYyMlVMLDB4MzAzMjAyMzJVTCwweDg0MDQ4NDgwVUwsMHg2ODI5NDk2MVVMLDB4OTAxMzgzOTNVTCwKKzB4MzQzNzA3MzNVTCwweEU0MjdDN0UzVUwsMHgyNDI0MDQyMFVMLDB4QTQyNDg0QTBVTCwweEM4MEJDQkMzVUwsMHg1MDEzNDM1M1VMLDB4MDgwQTBBMDJVTCwweDg0MDc4NzgzVUwsCisweEQ4MTlDOUQxVUwsMHg0QzBDNEM0MFVMLDB4ODAwMzgzODNVTCwweDhDMEY4RjgzVUwsMHhDQzBFQ0VDMlVMLDB4MzgzQjBCMzNVTCwweDQ4MEE0QTQyVUwsMHhCNDM3ODdCM1VMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzJbMjU2XSA9IHsKKzB4QTFBODI5ODlVTCwweDgxODQwNTg1VUwsMHhEMkQ0MTZDNlVMLDB4RDNEMDEzQzNVTCwweDUwNTQxNDQ0VUwsMHgxMTFDMUQwRFVMLDB4QTBBQzJDOENVTCwweDIxMjQyNTA1VUwsCisweDUxNUMxRDREVUwsMHg0MzQwMDM0M1VMLDB4MTAxODE4MDhVTCwweDEyMUMxRTBFVUwsMHg1MTUwMTE0MVVMLDB4RjBGQzNDQ0NVTCwweEMyQzgwQUNBVUwsMHg2MzYwMjM0M1VMLAorMHgyMDI4MjgwOFVMLDB4NDA0NDA0NDRVTCwweDIwMjAyMDAwVUwsMHg5MTlDMUQ4RFVMLDB4RTBFMDIwQzBVTCwweEUyRTAyMkMyVUwsMHhDMEM4MDhDOFVMLDB4MTMxNDE3MDdVTCwKKzB4QTFBNDI1ODVVTCwweDgzOEMwRjhGVUwsMHgwMzAwMDMwM1VMLDB4NzM3ODNCNEJVTCwweEIzQjgzQjhCVUwsMHgxMzEwMTMwM1VMLDB4RDJEMDEyQzJVTCwweEUyRUMyRUNFVUwsCisweDcwNzAzMDQwVUwsMHg4MDhDMEM4Q1VMLDB4MzMzQzNGMEZVTCwweEEwQTgyODg4VUwsMHgzMjMwMzIwMlVMLDB4RDFEQzFEQ0RVTCwweEYyRjQzNkM2VUwsMHg3MDc0MzQ0NFVMLAorMHhFMEVDMkNDQ1VMLDB4OTE5NDE1ODVVTCwweDAzMDgwQjBCVUwsMHg1MzU0MTc0N1VMLDB4NTA1QzFDNENVTCwweDUzNTgxQjRCVUwsMHhCMUJDM0Q4RFVMLDB4MDEwMDAxMDFVTCwKKzB4MjAyNDI0MDRVTCwweDEwMUMxQzBDVUwsMHg3MzcwMzM0M1VMLDB4OTA5ODE4ODhVTCwweDEwMTAxMDAwVUwsMHhDMENDMENDQ1VMLDB4RjJGMDMyQzJVTCwweEQxRDgxOUM5VUwsCisweDIwMkMyQzBDVUwsMHhFM0U0MjdDN1VMLDB4NzI3MDMyNDJVTCwweDgzODAwMzgzVUwsMHg5Mzk4MUI4QlVMLDB4RDFEMDExQzFVTCwweDgyODQwNjg2VUwsMHhDMUM4MDlDOVVMLAorMHg2MDYwMjA0MFVMLDB4NTA1MDEwNDBVTCwweEEzQTAyMzgzVUwsMHhFM0U4MkJDQlVMLDB4MDEwQzBEMERVTCwweEIyQjQzNjg2VUwsMHg5MjlDMUU4RVVMLDB4NDM0QzBGNEZVTCwKKzB4QjNCNDM3ODdVTCwweDUyNTgxQTRBVUwsMHhDMkM0MDZDNlVMLDB4NzA3ODM4NDhVTCwweEEyQTQyNjg2VUwsMHgxMjEwMTIwMlVMLDB4QTNBQzJGOEZVTCwweEQxRDQxNUM1VUwsCisweDYxNjAyMTQxVUwsMHhDM0MwMDNDM1VMLDB4QjBCNDM0ODRVTCwweDQxNDAwMTQxVUwsMHg1MjUwMTI0MlVMLDB4NzE3QzNENERVTCwweDgxOEMwRDhEVUwsMHgwMDA4MDgwOFVMLAorMHgxMzFDMUYwRlVMLDB4OTE5ODE5ODlVTCwweDAwMDAwMDAwVUwsMHgxMTE4MTkwOVVMLDB4MDAwNDA0MDRVTCwweDUzNTAxMzQzVUwsMHhGM0Y0MzdDN1VMLDB4RTFFMDIxQzFVTCwKKzB4RjFGQzNEQ0RVTCwweDcyNzQzNjQ2VUwsMHgyMzJDMkYwRlVMLDB4MjMyNDI3MDdVTCwweEIwQjAzMDgwVUwsMHg4Mzg4MEI4QlVMLDB4MDIwQzBFMEVVTCwweEEzQTgyQjhCVUwsCisweEEyQTAyMjgyVUwsMHg2MjZDMkU0RVVMLDB4OTM5MDEzODNVTCwweDQxNEMwRDREVUwsMHg2MTY4Mjk0OVVMLDB4NzA3QzNDNENVTCwweDAxMDgwOTA5VUwsMHgwMjA4MEEwQVVMLAorMHhCM0JDM0Y4RlVMLDB4RTNFQzJGQ0ZVTCwweEYzRjAzM0MzVUwsMHhDMUM0MDVDNVVMLDB4ODM4NDA3ODdVTCwweDEwMTQxNDA0VUwsMHhGMkZDM0VDRVVMLDB4NjA2NDI0NDRVTCwKKzB4RDJEQzFFQ0VVTCwweDIyMkMyRTBFVUwsMHg0MzQ4MEI0QlVMLDB4MTIxODFBMEFVTCwweDAyMDQwNjA2VUwsMHgyMTIwMjEwMVVMLDB4NjM2ODJCNEJVTCwweDYyNjQyNjQ2VUwsCisweDAyMDAwMjAyVUwsMHhGMUY0MzVDNVVMLDB4OTI5MDEyODJVTCwweDgyODgwQThBVUwsMHgwMDBDMEMwQ1VMLDB4QjNCMDMzODNVTCwweDcyN0MzRTRFVUwsMHhEMEQwMTBDMFVMLAorMHg3Mjc4M0E0QVVMLDB4NDM0NDA3NDdVTCwweDkyOTQxNjg2VUwsMHhFMUU0MjVDNVVMLDB4MjIyNDI2MDZVTCwweDgwODAwMDgwVUwsMHhBMUFDMkQ4RFVMLDB4RDNEQzFGQ0ZVTCwKKzB4QTFBMDIxODFVTCwweDMwMzAzMDAwVUwsMHgzMzM0MzcwN1VMLDB4QTJBQzJFOEVVTCwweDMyMzQzNjA2VUwsMHgxMTE0MTUwNVVMLDB4MjIyMDIyMDJVTCwweDMwMzgzODA4VUwsCisweEYwRjQzNEM0VUwsMHhBM0E0Mjc4N1VMLDB4NDE0NDA1NDVVTCwweDQwNEMwQzRDVUwsMHg4MTgwMDE4MVVMLDB4RTFFODI5QzlVTCwweDgwODQwNDg0VUwsMHg5Mzk0MTc4N1VMLAorMHgzMTM0MzUwNVVMLDB4QzNDODBCQ0JVTCwweEMyQ0MwRUNFVUwsMHgzMDNDM0MwQ1VMLDB4NzE3MDMxNDFVTCwweDExMTAxMTAxVUwsMHhDM0M0MDdDN1VMLDB4ODE4ODA5ODlVTCwKKzB4NzE3NDM1NDVVTCwweEYzRjgzQkNCVUwsMHhEMkQ4MUFDQVVMLDB4RjBGODM4QzhVTCwweDkwOTQxNDg0VUwsMHg1MTU4MTk0OVVMLDB4ODI4MDAyODJVTCwweEMwQzQwNEM0VUwsCisweEYzRkMzRkNGVUwsMHg0MTQ4MDk0OVVMLDB4MzEzODM5MDlVTCwweDYzNjQyNzQ3VUwsMHhDMEMwMDBDMFVMLDB4QzNDQzBGQ0ZVTCwweEQzRDQxN0M3VUwsMHhCMEI4Mzg4OFVMLAorMHgwMzBDMEYwRlVMLDB4ODI4QzBFOEVVTCwweDQyNDAwMjQyVUwsMHgyMzIwMjMwM1VMLDB4OTE5MDExODFVTCwweDYwNkMyQzRDVUwsMHhEM0Q4MUJDQlVMLDB4QTBBNDI0ODRVTCwKKzB4MzAzNDM0MDRVTCwweEYxRjAzMUMxVUwsMHg0MDQ4MDg0OFVMLDB4QzJDMDAyQzJVTCwweDYzNkMyRjRGVUwsMHgzMTNDM0QwRFVMLDB4MjEyQzJEMERVTCwweDQwNDAwMDQwVUwsCisweEIyQkMzRThFVUwsMHgzMjNDM0UwRVVMLDB4QjBCQzNDOENVTCwweEMxQzAwMUMxVUwsMHhBMkE4MkE4QVVMLDB4QjJCODNBOEFVTCwweDQyNEMwRTRFVUwsMHg1MTU0MTU0NVVMLAorMHgzMzM4M0IwQlVMLDB4RDBEQzFDQ0NVTCwweDYwNjgyODQ4VUwsMHg3MzdDM0Y0RlVMLDB4OTA5QzFDOENVTCwweEQwRDgxOEM4VUwsMHg0MjQ4MEE0QVVMLDB4NTI1NDE2NDZVTCwKKzB4NzM3NDM3NDdVTCwweEEwQTAyMDgwVUwsMHhFMUVDMkRDRFVMLDB4NDI0NDA2NDZVTCwweEIxQjQzNTg1VUwsMHgyMzI4MkIwQlVMLDB4NjE2NDI1NDVVTCwweEYyRjgzQUNBVUwsCisweEUzRTAyM0MzVUwsMHhCMUI4Mzk4OVVMLDB4QjFCMDMxODFVTCwweDkzOUMxRjhGVUwsMHg1MjVDMUU0RVVMLDB4RjFGODM5QzlVTCwweEUyRTQyNkM2VUwsMHhCMkIwMzI4MlVMLAorMHgzMTMwMzEwMVVMLDB4RTJFODJBQ0FVTCwweDYxNkMyRDREVUwsMHg1MzVDMUY0RlVMLDB4RTBFNDI0QzRVTCwweEYwRjAzMEMwVUwsMHhDMUNDMERDRFVMLDB4ODA4ODA4ODhVTCwKKzB4MTIxNDE2MDZVTCwweDMyMzgzQTBBVUwsMHg1MDU4MTg0OFVMLDB4RDBENDE0QzRVTCwweDYyNjAyMjQyVUwsMHgyMTI4MjkwOVVMLDB4MDMwNDA3MDdVTCwweDMzMzAzMzAzVUwsCisweEUwRTgyOEM4VUwsMHgxMzE4MUIwQlVMLDB4MDEwNDA1MDVVTCwweDcxNzgzOTQ5VUwsMHg5MDkwMTA4MFVMLDB4NjI2ODJBNEFVTCwweDIyMjgyQTBBVUwsMHg5Mjk4MUE4QVVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzNbMjU2XSA9IHsKKzB4MDgzMDM4MzhVTCwweEM4RTBFODI4VUwsMHgwRDIxMkMyRFVMLDB4ODZBMkE0MjZVTCwweENGQzNDQzBGVUwsMHhDRUQyREMxRVVMLDB4ODNCM0IwMzNVTCwweDg4QjBCODM4VUwsCisweDhGQTNBQzJGVUwsMHg0MDYwNjAyMFVMLDB4NDU1MTU0MTVVTCwweEM3QzNDNDA3VUwsMHg0NDQwNDQwNFVMLDB4NEY2MzZDMkZVTCwweDRCNjM2ODJCVUwsMHg0QjUzNTgxQlVMLAorMHhDM0MzQzAwM1VMLDB4NDI2MjYwMjJVTCwweDAzMzMzMDMzVUwsMHg4NUIxQjQzNVVMLDB4MDkyMTI4MjlVTCwweDgwQTBBMDIwVUwsMHhDMkUyRTAyMlVMLDB4ODdBM0E0MjdVTCwKKzB4QzNEM0QwMTNVTCwweDgxOTE5MDExVUwsMHgwMTExMTAxMVVMLDB4MDYwMjA0MDZVTCwweDBDMTAxQzFDVUwsMHg4Q0IwQkMzQ1VMLDB4MDYzMjM0MzZVTCwweDRCNDM0ODBCVUwsCisweENGRTNFQzJGVUwsMHg4ODgwODgwOFVMLDB4NEM2MDZDMkNVTCwweDg4QTBBODI4VUwsMHgwNzEzMTQxN1VMLDB4QzRDMEM0MDRVTCwweDA2MTIxNDE2VUwsMHhDNEYwRjQzNFVMLAorMHhDMkMyQzAwMlVMLDB4NDU0MTQ0MDVVTCwweEMxRTFFMDIxVUwsMHhDNkQyRDQxNlVMLDB4MEYzMzNDM0ZVTCwweDBEMzEzQzNEVUwsMHg4RTgyOEMwRVVMLDB4ODg5MDk4MThVTCwKKzB4MDgyMDI4MjhVTCwweDRFNDI0QzBFVUwsMHhDNkYyRjQzNlVMLDB4MEUzMjNDM0VVTCwweDg1QTFBNDI1VUwsMHhDOUYxRjgzOVVMLDB4MEQwMTBDMERVTCwweENGRDNEQzFGVUwsCisweEM4RDBEODE4VUwsMHgwQjIzMjgyQlVMLDB4NDY2MjY0MjZVTCwweDRBNzI3ODNBVUwsMHgwNzIzMjQyN1VMLDB4MEYyMzJDMkZVTCwweEMxRjFGMDMxVUwsMHg0MjcyNzAzMlVMLAorMHg0MjQyNDAwMlVMLDB4QzREMEQ0MTRVTCwweDQxNDE0MDAxVUwsMHhDMEMwQzAwMFVMLDB4NDM3MzcwMzNVTCwweDQ3NjM2NDI3VUwsMHg4Q0EwQUMyQ1VMLDB4OEI4Mzg4MEJVTCwKKzB4QzdGM0Y0MzdVTCwweDhEQTFBQzJEVUwsMHg4MDgwODAwMFVMLDB4MEYxMzFDMUZVTCwweENBQzJDODBBVUwsMHgwQzIwMkMyQ1VMLDB4OEFBMkE4MkFVTCwweDA0MzAzNDM0VUwsCisweEMyRDJEMDEyVUwsMHgwQjAzMDgwQlVMLDB4Q0VFMkVDMkVVTCwweEM5RTFFODI5VUwsMHg0RDUxNUMxRFVMLDB4ODQ5MDk0MTRVTCwweDA4MTAxODE4VUwsMHhDOEYwRjgzOFVMLAorMHg0NzUzNTQxN1VMLDB4OEVBMkFDMkVVTCwweDA4MDAwODA4VUwsMHhDNUMxQzQwNVVMLDB4MDMxMzEwMTNVTCwweENEQzFDQzBEVUwsMHg4NjgyODQwNlVMLDB4ODlCMUI4MzlVTCwKKzB4Q0ZGM0ZDM0ZVTCwweDRENzE3QzNEVUwsMHhDMUMxQzAwMVVMLDB4MDEzMTMwMzFVTCwweEM1RjFGNDM1VUwsMHg4QTgyODgwQVVMLDB4NEE2MjY4MkFVTCwweDgxQjFCMDMxVUwsCisweEMxRDFEMDExVUwsMHgwMDIwMjAyMFVMLDB4QzdEM0Q0MTdVTCwweDAyMDIwMDAyVUwsMHgwMjIyMjAyMlVMLDB4MDQwMDA0MDRVTCwweDQ4NjA2ODI4VUwsMHg0MTcxNzAzMVVMLAorMHgwNzAzMDQwN1VMLDB4Q0JEM0Q4MUJVTCwweDhEOTE5QzFEVUwsMHg4OTkxOTgxOVVMLDB4NDE2MTYwMjFVTCwweDhFQjJCQzNFVUwsMHhDNkUyRTQyNlVMLDB4NDk1MTU4MTlVTCwKKzB4Q0REMURDMURVTCwweDQxNTE1MDExVUwsMHg4MDkwOTAxMFVMLDB4Q0NEMERDMUNVTCwweDhBOTI5ODFBVUwsMHg4M0EzQTAyM1VMLDB4OEJBM0E4MkJVTCwweEMwRDBEMDEwVUwsCisweDgxODE4MDAxVUwsMHgwRjAzMEMwRlVMLDB4NDc0MzQ0MDdVTCwweDBBMTIxODFBVUwsMHhDM0UzRTAyM1VMLDB4Q0NFMEVDMkNVTCwweDhEODE4QzBEVUwsMHg4RkIzQkMzRlVMLAorMHg4NjkyOTQxNlVMLDB4NEI3Mzc4M0JVTCwweDRDNTA1QzFDVUwsMHg4MkEyQTAyMlVMLDB4ODFBMUEwMjFVTCwweDQzNjM2MDIzVUwsMHgwMzIzMjAyM1VMLDB4NEQ0MTRDMERVTCwKKzB4QzhDMEM4MDhVTCwweDhFOTI5QzFFVUwsMHg4QzkwOUMxQ1VMLDB4MEEzMjM4M0FVTCwweDBDMDAwQzBDVUwsMHgwRTIyMkMyRVVMLDB4OEFCMkI4M0FVTCwweDRFNjI2QzJFVUwsCisweDhGOTM5QzFGVUwsMHg0QTUyNTgxQVVMLDB4QzJGMkYwMzJVTCwweDgyOTI5MDEyVUwsMHhDM0YzRjAzM1VMLDB4NDk0MTQ4MDlVTCwweDQ4NzA3ODM4VUwsMHhDQ0MwQ0MwQ1VMLAorMHgwNTExMTQxNVVMLDB4Q0JGM0Y4M0JVTCwweDQwNzA3MDMwVUwsMHg0NTcxNzQzNVVMLDB4NEY3MzdDM0ZVTCwweDA1MzEzNDM1VUwsMHgwMDEwMTAxMFVMLDB4MDMwMzAwMDNVTCwKKzB4NDQ2MDY0MjRVTCwweDRENjE2QzJEVUwsMHhDNkMyQzQwNlVMLDB4NDQ3MDc0MzRVTCwweEM1RDFENDE1VUwsMHg4NEIwQjQzNFVMLDB4Q0FFMkU4MkFVTCwweDA5MDEwODA5VUwsCisweDQ2NzI3NDM2VUwsMHgwOTExMTgxOVVMLDB4Q0VGMkZDM0VVTCwweDQwNDA0MDAwVUwsMHgwMjEyMTAxMlVMLDB4QzBFMEUwMjBVTCwweDhEQjFCQzNEVUwsMHgwNTAxMDQwNVVMLAorMHhDQUYyRjgzQVVMLDB4MDEwMTAwMDFVTCwweEMwRjBGMDMwVUwsMHgwQTIyMjgyQVVMLDB4NEU1MjVDMUVVTCwweDg5QTFBODI5VUwsMHg0NjUyNTQxNlVMLDB4NDM0MzQwMDNVTCwKKzB4ODU4MTg0MDVVTCwweDA0MTAxNDE0VUwsMHg4OTgxODgwOVVMLDB4OEI5Mzk4MUJVTCwweDgwQjBCMDMwVUwsMHhDNUUxRTQyNVVMLDB4NDg0MDQ4MDhVTCwweDQ5NzE3ODM5VUwsCisweDg3OTM5NDE3VUwsMHhDQ0YwRkMzQ1VMLDB4MEUxMjFDMUVVTCwweDgyODI4MDAyVUwsMHgwMTIxMjAyMVVMLDB4OEM4MDhDMENVTCwweDBCMTMxODFCVUwsMHg0RjUzNUMxRlVMLAorMHg0NzczNzQzN1VMLDB4NDQ1MDU0MTRVTCwweDgyQjJCMDMyVUwsMHgwRDExMUMxRFVMLDB4MDUyMTI0MjVVTCwweDRGNDM0QzBGVUwsMHgwMDAwMDAwMFVMLDB4NDY0MjQ0MDZVTCwKKzB4Q0RFMUVDMkRVTCwweDQ4NTA1ODE4VUwsMHg0MjUyNTAxMlVMLDB4Q0JFM0U4MkJVTCwweDRFNzI3QzNFVUwsMHhDQUQyRDgxQVVMLDB4QzlDMUM4MDlVTCwweENERjFGQzNEVUwsCisweDAwMzAzMDMwVUwsMHg4NTkxOTQxNVVMLDB4NDU2MTY0MjVVTCwweDBDMzAzQzNDVUwsMHg4NkIyQjQzNlVMLDB4QzRFMEU0MjRVTCwweDhCQjNCODNCVUwsMHg0QzcwN0MzQ1VMLAorMHgwRTAyMEMwRVVMLDB4NDA1MDUwMTBVTCwweDA5MzEzODM5VUwsMHgwNjIyMjQyNlVMLDB4MDIzMjMwMzJVTCwweDg0ODA4NDA0VUwsMHg0OTYxNjgyOVVMLDB4ODM5MzkwMTNVTCwKKzB4MDczMzM0MzdVTCwweEM3RTNFNDI3VUwsMHgwNDIwMjQyNFVMLDB4ODRBMEE0MjRVTCwweENCQzNDODBCVUwsMHg0MzUzNTAxM1VMLDB4MEEwMjA4MEFVTCwweDg3ODM4NDA3VUwsCisweEM5RDFEODE5VUwsMHg0QzQwNEMwQ1VMLDB4ODM4MzgwMDNVTCwweDhGODM4QzBGVUwsMHhDRUMyQ0MwRVVMLDB4MEIzMzM4M0JVTCwweDRBNDI0ODBBVUwsMHg4N0IzQjQzN1VMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBLQ2lbMTZdID0geworMHg5RTM3NzlCOSwweDNDNkVGMzczLAorMHg3OERERTZFNiwweEYxQkJDRENDLAorMHhFMzc3OUI5OSwweEM2RUYzNzMzLAorMHg4RERFNkU2NywweDFCQkNEQ0NGLAorMHgzNzc5Qjk5RSwweDZFRjM3MzNDLAorMHhEREU2RTY3OCwweEJCQ0RDQ0YxLAorMHg3NzlCOTlFMywweEVGMzczM0M2LAorMHhERTZFNjc4RCwweEJDRENDRjFCCit9OworCisjZGVmaW5lIEcoeCkgKFNTM1soKHgpPj4yNCkmMjU1XSBeIFNTMlsoKHgpPj4xNikmMjU1XSBeIFNTMVsoKHgpPj44KSYyNTVdIF4gU1MwWyh4KSYyNTVdKQorCisjZGVmaW5lIEYoTDEsIEwyLCBSMSwgUjIsIEsxLCBLMikgXAorICAgVDIgPSBHKChSMSBeIEsxKSBeIChSMiBeIEsyKSk7IFwKKyAgIFQgPSBHKCBHKFQyICsgKFIxIF4gSzEpKSArIFQyKTsgXAorICAgTDIgXj0gVDsgXAorICAgTDEgXj0gKFQgKyBHKFQyICsgKFIxIF4gSzEpKSk7IFwKKworIC8qKgorICAgIEluaXRpYWxpemUgdGhlIFNFRUQgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IGtzZWVkX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICAgaW50ICAgICBpOworICAgIHVsb25nMzIgdG1wLCBrMSwgazIsIGszLCBrNDsKKworICAgIGlmIChrZXlsZW4gIT0gMTYpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgIH0KKyAgIAorICAgIGlmIChudW1fcm91bmRzICE9IDE2ICYmIG51bV9yb3VuZHMgIT0gMCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgICB9CisKKyAgICAvKiBsb2FkIGtleSAqLworICAgIExPQUQzMkgoazEsIGtleSk7CisgICAgTE9BRDMySChrMiwga2V5KzQpOworICAgIExPQUQzMkgoazMsIGtleSs4KTsKKyAgICBMT0FEMzJIKGs0LCBrZXkrMTIpOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICBza2V5LT5rc2VlZC5LWzIqaSswXSA9IEcoazEgKyBrMyAtIEtDaVtpXSk7CisgICAgICAgc2tleS0+a3NlZWQuS1syKmkrMV0gPSBHKGsyIC0gazQgKyBLQ2lbaV0pOworICAgICAgIGlmIChpJjEpIHsKKyAgICAgICAgICB0bXAgPSBrMzsKKyAgICAgICAgICBrMyA9ICgoazMgPDwgOCkgfCAoazQgPj4gMjQpKSAmIDB4RkZGRkZGRkY7CisgICAgICAgICAgazQgPSAoKGs0IDw8IDgpIHwgKHRtcCA+PiAyNCkpICYgMHhGRkZGRkZGRjsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRtcCA9IGsxOworICAgICAgICAgIGsxID0gKChrMSA+PiA4KSB8IChrMiA8PCAyNCkpICYgMHhGRkZGRkZGRjsKKyAgICAgICAgICBrMiA9ICgoazIgPj4gOCkgfCAodG1wIDw8IDI0KSkgJiAweEZGRkZGRkZGOworICAgICAgfQorICAgICAgLyogcmV2ZXJzZSBrZXlzIGZvciBkZWNyeXB0ICovCisgICAgICBza2V5LT5rc2VlZC5kS1syKigxNS1pKSswXSA9IHNrZXktPmtzZWVkLktbMippKzBdOworICAgICAgc2tleS0+a3NlZWQuZEtbMiooMTUtaSkrMV0gPSBza2V5LT5rc2VlZC5LWzIqaSsxXTsKKyAgICB9CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHJvdW5kcyh1bG9uZzMyICpQLCB1bG9uZzMyICpLKQoreworICAgdWxvbmczMiBULCBUMjsKKyAgIGludCAgICAgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAyKSB7CisgICAgIEYoUFswXSwgUFsxXSwgUFsyXSwgUFszXSwgS1swXSwgS1sxXSk7CisgICAgIEYoUFsyXSwgUFszXSwgUFswXSwgUFsxXSwgS1syXSwgS1szXSk7CisgICAgIEsgKz0gNDsKKyAgIH0KK30KKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIFNFRUQKKyAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGtzZWVkX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIHVsb25nMzIgUFs0XTsKKyAgIExPQUQzMkgoUFswXSwgcHQpOworICAgTE9BRDMySChQWzFdLCBwdCs0KTsKKyAgIExPQUQzMkgoUFsyXSwgcHQrOCk7CisgICBMT0FEMzJIKFBbM10sIHB0KzEyKTsKKyAgIHJvdW5kcyhQLCBza2V5LT5rc2VlZC5LKTsKKyAgIFNUT1JFMzJIKFBbMl0sIGN0KTsKKyAgIFNUT1JFMzJIKFBbM10sIGN0KzQpOworICAgU1RPUkUzMkgoUFswXSwgY3QrOCk7CisgICBTVE9SRTMySChQWzFdLCBjdCsxMik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBTRUVECisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQga3NlZWRfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgdWxvbmczMiBQWzRdOworICAgTE9BRDMySChQWzBdLCBjdCk7CisgICBMT0FEMzJIKFBbMV0sIGN0KzQpOworICAgTE9BRDMySChQWzJdLCBjdCs4KTsKKyAgIExPQUQzMkgoUFszXSwgY3QrMTIpOworICAgcm91bmRzKFAsIHNrZXktPmtzZWVkLmRLKTsKKyAgIFNUT1JFMzJIKFBbMl0sIHB0KTsKKyAgIFNUT1JFMzJIKFBbM10sIHB0KzQpOworICAgU1RPUkUzMkgoUFswXSwgcHQrOCk7CisgICBTVE9SRTMySChQWzFdLCBwdCsxMik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQga3NlZWRfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIFNFRUQgYmxvY2sgY2lwaGVyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgZnVuY3Rpb25hbCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCBrc2VlZF90ZXN0KHZvaWQpCit7CisjaWYgIWRlZmluZWQoTFRDX1RFU1QpCisgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3QgeworICAgICB1bnNpZ25lZCBjaGFyIHB0WzE2XSwgY3RbMTZdLCBrZXlbMTZdOworICB9IHRlc3RzW10gPSB7CisKK3sKKyAgeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGIH0sCisgIHsgMHg1RSwweEJBLDB4QzYsMHhFMCwweDA1LDB4NEUsMHgxNiwweDY4LDB4MTksMHhBRiwweEYxLDB4Q0MsMHg2RCwweDM0LDB4NkMsMHhEQiB9LAorICB7IDAgfSwKK30sCisKK3sKKyAgeyAwIH0sCisgIHsgMHhDMSwweDFGLDB4MjIsMHhGMiwweDAxLDB4NDAsMHg1MCwweDUwLDB4ODQsMHg0OCwweDM1LDB4OTcsMHhFNCwweDM3LDB4MEYsMHg0MyB9LAorICB7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKK30sCisKK3sKKyAgeyAweDgzLDB4QTIsMHhGOCwweEEyLDB4ODgsMHg2NCwweDFGLDB4QjksMHhBNCwweEU5LDB4QTUsMHhDQywweDJGLDB4MTMsMHgxQywweDdEIH0sCisgIHsgMHhFRSwweDU0LDB4RDEsMHgzRSwweEJDLDB4QUUsMHg3MCwweDZELDB4MjIsMHg2QiwweEMzLDB4MTQsMHgyQywweEQ0LDB4MEQsMHg0QSB9LAorICB7IDB4NDcsMHgwNiwweDQ4LDB4MDgsMHg1MSwweEU2LDB4MUIsMHhFOCwweDVELDB4NzQsMHhCRiwweEIzLDB4RkQsMHg5NSwweDYxLDB4ODUgfSwKK30sCisKK3sKKyAgeyAweEI0LDB4MUUsMHg2QiwweEUyLDB4RUIsMHhBOCwweDRBLDB4MTQsMHg4RSwweDJFLDB4RUQsMHg4NCwweDU5LDB4M0MsMHg1RSwweEM3IH0sCisgIHsgMHg5QiwweDlCLDB4N0IsMHhGQywweEQxLDB4ODEsMHgzQywweEI5LDB4NUQsMHgwQiwweDM2LDB4MTgsMHhGNCwweDBGLDB4NTEsMHgyMiB9LAorICB7IDB4MjgsMHhEQiwweEMzLDB4QkMsMHg0OSwweEZGLDB4RDgsMHg3RCwweENGLDB4QTUsMHgwOSwweEIxLDB4MUQsMHg0MiwweDJCLDB4RTcgfSwKK30KK307CisgICBpbnQgeDsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzE2XTsKKyAgIHN5bW1ldHJpY19rZXkgc2tleTsKKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgIGtzZWVkX3NldHVwKHRlc3RzW3hdLmtleSwgMTYsIDAsICZza2V5KTsKKyAgICAgICBrc2VlZF9lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgYnVmWzBdLCAmc2tleSk7CisgICAgICAga3NlZWRfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sICZza2V5KTsKKyAgICAgICBpZiAoWE1FTUNNUChidWZbMF0sIHRlc3RzW3hdLmN0LCAxNikgfHwgWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLnB0LCAxNikpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IGtzZWVkX2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworICAgaWYgKCprZXlzaXplID49IDE2KSB7CisgICAgICAqa2V5c2l6ZSA9IDE2OworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rc2VlZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpcGhlcnMvbm9la2Vvbi5jIGIvc3JjL2NpcGhlcnMvbm9la2Vvbi5jCmluZGV4IGU1MDJkZmUuLmY0NjdmZjIgMTAwNjQ0Ci0tLSBhL3NyYy9jaXBoZXJzL25vZWtlb24uYworKysgYi9zcmMvY2lwaGVycy9ub2VrZW9uLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogLyoqCiAgICBAZmlsZSBub2VrZW9uLmMKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAmbm9la2Vvbl90ZXN0LAogICAgICZub2VrZW9uX2RvbmUsCiAgICAgJm5vZWtlb25fa2V5c2l6ZSwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHVsb25nMzIgUkNbXSA9IHsKQEAgLTEwNywxMSArMTA3LDEyIEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXN0YXRpYyB2b2lkIF9ub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX25vZWtlb25fZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgbm9la2Vvbl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgbm9la2Vvbl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgIHVsb25nMzIgYSxiLGMsZCx0ZW1wOwpAQCAtMTQyLDEzICsxNDMsMTYgQEAKICAgIAogICAgU1RPUkUzMkgoYSwmY3RbMF0pOyBTVE9SRTMySChiLCZjdFs0XSk7CiAgICBTVE9SRTMySChjLCZjdFs4XSk7IFNUT1JFMzJIKGQsJmN0WzEyXSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCBub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKIHsKLSAgIF9ub2VrZW9uX2VjYl9lbmNyeXB0KHB0LCBjdCwgc2tleSk7CisgICBpbnQgZXJyID0gX25vZWtlb25fZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogNSArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KICNlbmRpZgogCkBAIC0xNTcsMTEgKzE2MSwxMiBAQAogICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQogICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX25vZWtlb25fZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorc3RhdGljIGludCBfbm9la2Vvbl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZWxzZQotdm9pZCBub2VrZW9uX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBub2VrZW9uX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbmRpZgogewogICAgdWxvbmczMiBhLGIsYyxkLCB0ZW1wOwpAQCAtMTkyLDEzICsxOTcsMTUgQEAKICAgIGEgXj0gUkNbMF07CiAgICBTVE9SRTMySChhLCZwdFswXSk7IFNUT1JFMzJIKGIsICZwdFs0XSk7CiAgICBTVE9SRTMySChjLCZwdFs4XSk7IFNUT1JFMzJIKGQsICZwdFsxMl0pOworICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi12b2lkIG5vZWtlb25fZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IG5vZWtlb25fZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX25vZWtlb25fZWNiX2RlY3J5cHQoY3QsIHB0LCBza2V5KTsKKyAgIGludCBlcnIgPSBfbm9la2Vvbl9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiA1ICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC0yMzUsMTAgKzI0MiwxMCBAQAogICAKICAgICBub2VrZW9uX2VjYl9lbmNyeXB0KHRlc3RzW2ldLnB0LCB0bXBbMF0sICZrZXkpOwogICAgIG5vZWtlb25fZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZrZXkpOwotICAgIGlmIChtZW1jbXAodG1wWzBdLCB0ZXN0c1tpXS5jdCwgMTYpIHx8IG1lbWNtcCh0bXBbMV0sIHRlc3RzW2ldLnB0LCAxNikpIHsgCisgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1tpXS5jdCwgMTYpIHx8IFhNRU1DTVAodG1wWzFdLCB0ZXN0c1tpXS5wdCwgMTYpKSB7IAogI2lmIDAKICAgICAgICBwcmludGYoIlxuXG5UZXN0ICVkIGZhaWxlZFxuIiwgaSk7Ci0gICAgICAgaWYgKG1lbWNtcCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikpIHsKKyAgICAgICBpZiAoWE1FTUNNUCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikpIHsKICAgICAgICAgICBwcmludGYoIkNUOiAiKTsKICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCB0bXBbMF1baV0pOwpAQCAtMjkyLDUgKzI5OSw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvbm9la2Vvbi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL3JjMi5jIGIvc3JjL2NpcGhlcnMvcmMyLmMKaW5kZXggZTkxZjgzYS4uZGU2MmNkYSAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvcmMyLmMKKysrIGIvc3JjL2NpcGhlcnMvcmMyLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiAqIFRvIGNvbW1lbW9yYXRlIHRoZSAxOTk2IFJTQSBEYXRhIFNlY3VyaXR5IENvbmZlcmVuY2UsIHRoZSBmb2xsb3dpbmcgICoKQEAgLTM2LDcgKzM2LDcgQEAKICAgICZyYzJfdGVzdCwKICAgICZyYzJfZG9uZSwKICAgICZyYzJfa2V5c2l6ZSwKLSAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKIC8qIDI1Ni1lbnRyeSBwZXJtdXRhdGlvbiB0YWJsZSwgcHJvYmFibHkgZGVyaXZlZCBzb21laG93IGZyb20gcGkgKi8KQEAgLTEyNSwxMyArMTI1LDE0IEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi1zdGF0aWMgdm9pZCBfcmMyX2VjYl9lbmNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwKK3N0YXRpYyBpbnQgX3JjMl9lY2JfZW5jcnlwdCggY29uc3QgdW5zaWduZWQgY2hhciAqcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbHNlCi12b2lkIHJjMl9lY2JfZW5jcnlwdCggY29uc3QgdW5zaWduZWQgY2hhciAqcHQsCitpbnQgcmMyX2VjYl9lbmNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCkBAIC0xNzksMTUgKzE4MCwxOCBAQAogICAgIGN0WzVdID0gKHVuc2lnbmVkIGNoYXIpKHg1NCA+PiA4KTsKICAgICBjdFs2XSA9ICh1bnNpZ25lZCBjaGFyKXg3NjsKICAgICBjdFs3XSA9ICh1bnNpZ25lZCBjaGFyKSh4NzYgPj4gOCk7CisgCisgICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi12b2lkIHJjMl9lY2JfZW5jcnlwdCggY29uc3QgdW5zaWduZWQgY2hhciAqcHQsCitpbnQgcmMyX2VjYl9lbmNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgIF9yYzJfZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKKyAgICBpbnQgZXJyID0gX3JjMl9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOwogICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVuc2lnbmVkICopICsgc2l6ZW9mKHVuc2lnbmVkKSAqIDUpOworICAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtMTk5LDEzICsyMDMsMTQgQEAKICAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi1zdGF0aWMgdm9pZCBfcmMyX2VjYl9kZWNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwKK3N0YXRpYyBpbnQgX3JjMl9lY2JfZGVjcnlwdCggY29uc3QgdW5zaWduZWQgY2hhciAqY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbHNlCi12b2lkIHJjMl9lY2JfZGVjcnlwdCggY29uc3QgdW5zaWduZWQgY2hhciAqY3QsCitpbnQgcmMyX2VjYl9kZWNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCkBAIC0yNTQsMTUgKzI1OSwxOCBAQAogICAgIHB0WzVdID0gKHVuc2lnbmVkIGNoYXIpKHg1NCA+PiA4KTsKICAgICBwdFs2XSA9ICh1bnNpZ25lZCBjaGFyKXg3NjsKICAgICBwdFs3XSA9ICh1bnNpZ25lZCBjaGFyKSh4NzYgPj4gOCk7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgcmMyX2VjYl9kZWNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwKK2ludCByYzJfZWNiX2RlY3J5cHQoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpCiB7Ci0gICAgX3JjMl9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOworICAgIGludCBlcnIgPSBfcmMyX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CiAgICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgKikgKyBzaXplb2YodW5zaWduZWQpICogNCArIHNpemVvZihpbnQpKTsKKyAgICByZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTMwNyw3ICszMTUsNyBAQAogICAgICAgICByYzJfZWNiX2VuY3J5cHQodGVzdHNbeF0ucHQsIHRtcFswXSwgJnNrZXkpOwogICAgICAgICByYzJfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZza2V5KTsKICAgICAgICAgCi0gICAgICAgIGlmIChtZW1jbXAodG1wWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCB8fCBtZW1jbXAodG1wWzFdLCB0ZXN0c1t4XS5wdCwgOCkgIT0gMCkgeworICAgICAgICBpZiAoWE1FTUNNUCh0bXBbMF0sIHRlc3RzW3hdLmN0LCA4KSAhPSAwIHx8IFhNRU1DTVAodG1wWzFdLCB0ZXN0c1t4XS5wdCwgOCkgIT0gMCkgewogICAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgICB9CiAKQEAgLTM1MCw1ICszNTgsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjMi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL3JjNS5jIGIvc3JjL2NpcGhlcnMvcmM1LmMKaW5kZXggOTQ2NWFjOC4uMmQ1ZmRiOCAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvcmM1LmMKKysrIGIvc3JjL2NpcGhlcnMvcmM1LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKioKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAmcmM1X3Rlc3QsCiAgICAgJnJjNV9kb25lLAogICAgICZyYzVfa2V5c2l6ZSwKLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHVsb25nMzIgc3RhYls1MF0gPSB7CkBAIC0xMjMsMTEgKzEyMywxMiBAQAogICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKICAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX3JjNV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitzdGF0aWMgaW50IF9yYzVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgcmM1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCByYzVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCiB7CiAgICB1bG9uZzMyIEEsIEIsICpLOwpAQCAtMTU5LDEzICsxNjAsMTYgQEAKICAgIH0KICAgIFNUT1JFMzJMKEEsICZjdFswXSk7CiAgICBTVE9SRTMyTChCLCAmY3RbNF0pOworCisgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgcmM1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCByYzVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX3JjNV9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOworICAgaW50IGVyciA9IF9yYzVfZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMiArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtMTc0LDExICsxNzgsMTIgQEAKICAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi1zdGF0aWMgdm9pZCBfcmM1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX3JjNV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZWxzZQotdm9pZCByYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHJjNV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgIHVsb25nMzIgQSwgQiwgKks7CkBAIC0yMTEsMTMgKzIxNiwxNiBAQAogICAgQiAtPSBza2V5LT5yYzUuS1sxXTsKICAgIFNUT1JFMzJMKEEsICZwdFswXSk7CiAgICBTVE9SRTMyTChCLCAmcHRbNF0pOworCisgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgcmM1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCByYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX3JjNV9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOworICAgaW50IGVyciA9IF9yYzVfZWNiX2RlY3J5cHQoY3QsIHB0LCBza2V5KTsKICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMiArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtMjY3LDcgKzI3NSw3IEBACiAgICAgICByYzVfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZrZXkpOwogCiAgICAgICAvKiBjb21wYXJlICovCi0gICAgICBpZiAobWVtY21wKHRtcFswXSwgdGVzdHNbeF0uY3QsIDgpICE9IDAgfHwgbWVtY21wKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDgpICE9IDApIHsKKyAgICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbeF0uY3QsIDgpICE9IDAgfHwgWE1FTUNNUCh0bXBbMV0sIHRlc3RzW3hdLnB0LCA4KSAhPSAwKSB7CiAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgfQogCkBAIC0zMTAsNSArMzE4LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9yYzUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS43ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9yYzYuYyBiL3NyYy9jaXBoZXJzL3JjNi5jCmluZGV4IGFlNmYxMTQuLjhhZmEwMzMgMTAwNjQ0Ci0tLSBhL3NyYy9jaXBoZXJzL3JjNi5jCisrKyBiL3NyYy9jaXBoZXJzL3JjNi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgJnJjNl90ZXN0LAogICAgICZyYzZfZG9uZSwKICAgICAmcmM2X2tleXNpemUsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCB1bG9uZzMyIHN0YWJbNDRdID0gewpAQCAtMTIwLDkgKzEyMCw5IEBACiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX3JjNl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitzdGF0aWMgaW50IF9yYzZfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgcmM2X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCByYzZfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCiB7CiAgICB1bG9uZzMyIGEsYixjLGQsdCx1LCAqSzsKQEAgLTE1NSwxMyArMTU1LDE1IEBACiAgICBhICs9IHNrZXktPnJjNi5LWzQyXTsKICAgIGMgKz0gc2tleS0+cmM2LktbNDNdOwogICAgU1RPUkUzMkwoYSwmY3RbMF0pO1NUT1JFMzJMKGIsJmN0WzRdKTtTVE9SRTMyTChjLCZjdFs4XSk7U1RPUkUzMkwoZCwmY3RbMTJdKTsKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCByYzZfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHJjNl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiB7Ci0gICBfcmM2X2VjYl9lbmNyeXB0KHB0LCBjdCwgc2tleSk7CisgICBpbnQgZXJyID0gX3JjNl9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiA2ICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC0xNzIsOSArMTc0LDkgQEAKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX3JjNl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitzdGF0aWMgaW50IF9yYzZfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgcmM2X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCByYzZfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCiB7CiAgICB1bG9uZzMyIGEsYixjLGQsdCx1LCAqSzsKQEAgLTIwOCwxMyArMjEwLDE2IEBACiAgICBiIC09IHNrZXktPnJjNi5LWzBdOwogICAgZCAtPSBza2V5LT5yYzYuS1sxXTsKICAgIFNUT1JFMzJMKGEsJnB0WzBdKTtTVE9SRTMyTChiLCZwdFs0XSk7U1RPUkUzMkwoYywmcHRbOF0pO1NUT1JFMzJMKGQsJnB0WzEyXSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCByYzZfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHJjNl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiB7Ci0gICBfcmM2X2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICBpbnQgZXJyID0gX3JjNl9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiA2ICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC0yODAsMTcgKzI4NSwxNyBAQAogICAgICAgcmM2X2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAma2V5KTsKIAogICAgICAgLyogY29tcGFyZSAqLwotICAgICAgaWYgKG1lbWNtcCh0bXBbMF0sIHRlc3RzW3hdLmN0LCAxNikgfHwgbWVtY21wKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDE2KSkgeworICAgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1t4XS5jdCwgMTYpIHx8IFhNRU1DTVAodG1wWzFdLCB0ZXN0c1t4XS5wdCwgMTYpKSB7CiAjaWYgMAogICAgICAgICAgcHJpbnRmKCJcblxuRmFpbGVkIHRlc3QgJWRcbiIsIHgpOwotICAgICAgICAgaWYgKG1lbWNtcCh0bXBbMF0sIHRlc3RzW3hdLmN0LCAxNikpIHsKKyAgICAgICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbeF0uY3QsIDE2KSkgewogICAgICAgICAgICAgcHJpbnRmKCJDaXBoZXJ0ZXh0OiAgIik7CiAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgcHJpbnRmKCIlMDJ4ICIsIHRtcFswXVt5XSk7CiAgICAgICAgICAgICBwcmludGYoIlxuRXhwZWN0ZWQgIDogICIpOwogICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHByaW50ZigiJTAyeCAiLCB0ZXN0c1t4XS5jdFt5XSk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICB9Ci0gICAgICAgICBpZiAobWVtY21wKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDE2KSkgeworICAgICAgICAgaWYgKFhNRU1DTVAodG1wWzFdLCB0ZXN0c1t4XS5wdCwgMTYpKSB7CiAgICAgICAgICAgICBwcmludGYoIlBsYWludGV4dDogICIpOwogICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHByaW50ZigiJTAyeCAiLCB0bXBbMF1beV0pOwogICAgICAgICAgICAgcHJpbnRmKCJcbkV4cGVjdGVkIDogICIpOwpAQCAtMzM5LDUgKzM0NCw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvcmM2LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIuYyBiL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLmMKaW5kZXggYmFkMDBhMC4uOWZkYWYzNyAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIuYworKysgYi9zcmMvY2lwaGVycy9zYWZlci9zYWZlci5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQyLDcgKzQyLDcgQEAKICAgICZzYWZlcl9rNjRfdGVzdCwKICAgICZzYWZlcl9kb25lLAogICAgJnNhZmVyXzY0X2tleXNpemUsCi0gICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCiAgICB9LAogCiAgICBzYWZlcl9zazY0X2Rlc2MgPSB7CkBAIC01NCw3ICs1NCw3IEBACiAgICAmc2FmZXJfc2s2NF90ZXN0LAogICAgJnNhZmVyX2RvbmUsCiAgICAmc2FmZXJfNjRfa2V5c2l6ZSwKLSAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKICAgIH0sCiAKICAgIHNhZmVyX2sxMjhfZGVzYyA9IHsKQEAgLTY2LDcgKzY2LDcgQEAKICAgICZzYWZlcl9zazEyOF90ZXN0LAogICAgJnNhZmVyX2RvbmUsCiAgICAmc2FmZXJfMTI4X2tleXNpemUsCi0gICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCiAgICB9LAogCiAgICBzYWZlcl9zazEyOF9kZXNjID0gewpAQCAtNzgsNyArNzgsNyBAQAogICAgJnNhZmVyX3NrMTI4X3Rlc3QsCiAgICAmc2FmZXJfZG9uZSwKICAgICZzYWZlcl8xMjhfa2V5c2l6ZSwKLSAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKICAgIH07CiAKIC8qKioqKioqKioqKioqKioqKioqIENvbnN0YW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNDYsMTEgKzI0NiwxMSBAQAogfQogCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi1zdGF0aWMgdm9pZCBfc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCitzdGF0aWMgaW50IF9zYWZlcl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpibG9ja19pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYmxvY2tfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCitpbnQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbmRpZgpAQCAtMjg1LDI0ICsyODUsMjYgQEAKICAgICBibG9ja19vdXRbMl0gPSBjICYgMHhGRjsgYmxvY2tfb3V0WzNdID0gZCAmIDB4RkY7CiAgICAgYmxvY2tfb3V0WzRdID0gZSAmIDB4RkY7IGJsb2NrX291dFs1XSA9IGYgJiAweEZGOwogICAgIGJsb2NrX291dFs2XSA9IGcgJiAweEZGOyBibG9ja19vdXRbN10gPSBoICYgMHhGRjsKKyAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCitpbnQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKIHsKLSAgICBfc2FmZXJfZWNiX2VuY3J5cHQoYmxvY2tfaW4sIGJsb2NrX291dCwgc2tleSk7CisgICAgaW50IGVyciA9IF9zYWZlcl9lY2JfZW5jcnlwdChibG9ja19pbiwgYmxvY2tfb3V0LCBza2V5KTsKICAgICBidXJuX3N0YWNrKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDkgKyBzaXplb2YodW5zaWduZWQgaW50KSArIHNpemVvZih1bnNpZ25lZCBjaGFyICopKTsKKyAgICByZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXN0YXRpYyB2b2lkIF9zYWZlcl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpibG9ja19pbiwKK3N0YXRpYyBpbnQgX3NhZmVyX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJsb2NrX2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpibG9ja19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZWxzZQotdm9pZCBzYWZlcl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpibG9ja19pbiwKK2ludCBzYWZlcl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpibG9ja19pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYmxvY2tfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2VuZGlmCkBAIC0zMzgsMTUgKzM0MCwxNyBAQAogICAgIGJsb2NrX291dFsyXSA9IGMgJiAweEZGOyBibG9ja19vdXRbM10gPSBkICYgMHhGRjsKICAgICBibG9ja19vdXRbNF0gPSBlICYgMHhGRjsgYmxvY2tfb3V0WzVdID0gZiAmIDB4RkY7CiAgICAgYmxvY2tfb3V0WzZdID0gZyAmIDB4RkY7IGJsb2NrX291dFs3XSA9IGggJiAweEZGOworICAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCBzYWZlcl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpibG9ja19pbiwKK2ludCBzYWZlcl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpibG9ja19pbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYmxvY2tfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgIF9zYWZlcl9lY2JfZGVjcnlwdChibG9ja19pbiwgYmxvY2tfb3V0LCBza2V5KTsKKyAgICBpbnQgZXJyID0gX3NhZmVyX2VjYl9kZWNyeXB0KGJsb2NrX2luLCBibG9ja19vdXQsIHNrZXkpOwogICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogOSArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikpOworICAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtMzkyLDcgKzM5Niw3IEBACiAgICBzYWZlcl9lY2JfZW5jcnlwdChrNjRfcHQsIGJ1ZlswXSwgJnNrZXkpOwogICAgc2FmZXJfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sICZza2V5KTsKIAotICAgaWYgKG1lbWNtcChidWZbMF0sIGs2NF9jdCwgOCkgIT0gMCB8fCBtZW1jbXAoYnVmWzFdLCBrNjRfcHQsIDgpICE9IDApIHsKKyAgIGlmIChYTUVNQ01QKGJ1ZlswXSwgazY0X2N0LCA4KSAhPSAwIHx8IFhNRU1DTVAoYnVmWzFdLCBrNjRfcHQsIDgpICE9IDApIHsKICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICB9CiAKQEAgLTQyMiw3ICs0MjYsNyBAQAogICAgc2FmZXJfZWNiX2VuY3J5cHQoc2s2NF9wdCwgYnVmWzBdLCAmc2tleSk7CiAgICBzYWZlcl9lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgJnNrZXkpOwogCi0gICBpZiAobWVtY21wKGJ1ZlswXSwgc2s2NF9jdCwgOCkgIT0gMCB8fCBtZW1jbXAoYnVmWzFdLCBzazY0X3B0LCA4KSAhPSAwKSB7CisgICBpZiAoWE1FTUNNUChidWZbMF0sIHNrNjRfY3QsIDgpICE9IDAgfHwgWE1FTUNNUChidWZbMV0sIHNrNjRfcHQsIDgpICE9IDApIHsKICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICB9CiAKQEAgLTQ2NCw3ICs0NjgsNyBAQAogICAgc2FmZXJfZWNiX2VuY3J5cHQoc2sxMjhfcHQsIGJ1ZlswXSwgJnNrZXkpOwogICAgc2FmZXJfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sICZza2V5KTsKIAotICAgaWYgKG1lbWNtcChidWZbMF0sIHNrMTI4X2N0LCA4KSAhPSAwIHx8IG1lbWNtcChidWZbMV0sIHNrMTI4X3B0LCA4KSAhPSAwKSB7CisgICBpZiAoWE1FTUNNUChidWZbMF0sIHNrMTI4X2N0LCA4KSAhPSAwIHx8IFhNRU1DTVAoYnVmWzFdLCBzazEyOF9wdCwgOCkgIT0gMCkgewogICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgIH0KIApAQCAtNDgzLDUgKzQ4Nyw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIuYyBiL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5jCmluZGV4IDQ3ZmJkMWMuLmE1NDI3NjggMTAwNjQ0Ci0tLSBhL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5jCisrKyBiL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC02NCw1ICs2NCw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJfdGFiLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy9zYWZlci9zYWZlcnAuYyBiL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5jCmluZGV4IDZkMGQ1ODkuLmRmZjRlZTkgMTAwNjQ0Ci0tLSBhL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5jCisrKyBiL3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqIApAQCAtMjgsNyArMjgsNyBAQAogICAgICZzYWZlcnBfdGVzdCwKICAgICAmc2FmZXJwX2RvbmUsCiAgICAgJnNhZmVycF9rZXlzaXplLAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCiB9OwogCiAvKiBST1VORChiLGkpIApAQCAtMzI5LDggKzMyOSw5IEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KLXZvaWQgc2FmZXJwX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBzYWZlcnBfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewogICAgdW5zaWduZWQgY2hhciBiWzE2XTsKICAgIGludCB4OwpAQCAtMzg0LDYgKzM4NSw3IEBACiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCiAgICB6ZXJvbWVtKGIsIHNpemVvZihiKSk7CiAjZW5kaWYKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogLyoqCkBAIC0zOTEsOCArMzkzLDkgQEAKICAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KLXZvaWQgc2FmZXJwX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBzYWZlcnBfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewogICAgdW5zaWduZWQgY2hhciBiWzE2XTsKICAgIGludCB4OwpAQCAtNDQ2LDYgKzQ0OSw3IEBACiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCiAgICB6ZXJvbWVtKGIsIHNpemVvZihiKSk7CiAjZW5kaWYKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogLyoqCkBAIC01MDMsNyArNTA3LDcgQEAKICAgICAgIHNhZmVycF9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFsxXSwgJnNrZXkpOwogCiAgICAgICAvKiBjb21wYXJlICovCi0gICAgICBpZiAobWVtY21wKHRtcFswXSwgdGVzdHNbaV0uY3QsIDE2KSB8fCBtZW1jbXAodG1wWzFdLCB0ZXN0c1tpXS5wdCwgMTYpKSB7IAorICAgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1tpXS5jdCwgMTYpIHx8IFhNRU1DTVAodG1wWzFdLCB0ZXN0c1tpXS5wdCwgMTYpKSB7IAogICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgICAgIH0KIApAQCAtNTUxLDUgKzU1NSw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJwLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpcGhlcnMvc2tpcGphY2suYyBiL3NyYy9jaXBoZXJzL3NraXBqYWNrLmMKaW5kZXggNGNiM2JmMi4uM2UwYjU3NiAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvc2tpcGphY2suYworKysgYi9zcmMvY2lwaGVycy9za2lwamFjay5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgJnNraXBqYWNrX3Rlc3QsCiAgICAgJnNraXBqYWNrX2RvbmUsCiAgICAgJnNraXBqYWNrX2tleXNpemUsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNib3hbMjU2XSA9IHsKQEAgLTEzOCwxMSArMTM4LDEyIEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi1zdGF0aWMgdm9pZCBfc2tpcGphY2tfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorc3RhdGljIGludCBfc2tpcGphY2tfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgc2tpcGphY2tfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHNraXBqYWNrX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbmRpZgogewogICAgdW5zaWduZWQgdzEsdzIsdzMsdzQsdG1wLHRtcDE7CkBAIC0xODMsMTMgKzE4NCwxNiBAQAogICAgY3RbMl0gPSAodzI+PjgpJjI1NTsgY3RbM10gPSB3MiYyNTU7CiAgICBjdFs0XSA9ICh3Mz4+OCkmMjU1OyBjdFs1XSA9IHczJjI1NTsKICAgIGN0WzZdID0gKHc0Pj44KSYyNTU7IGN0WzddID0gdzQmMjU1OworCisgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXZvaWQgc2tpcGphY2tfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHNraXBqYWNrX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKIHsKLSAgIF9za2lwamFja19lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOworICAgaW50IGVyciA9IF9za2lwamFja19lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQpICogOCArIHNpemVvZihpbnQpICogMik7CisgICByZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTE5OCwxMSArMjAyLDEyIEBACiAgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoOCBieXRlcykKICAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotc3RhdGljIHZvaWQgX3NraXBqYWNrX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX3NraXBqYWNrX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKICNlbHNlCi12b2lkIHNraXBqYWNrX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK2ludCBza2lwamFja19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgIHVuc2lnbmVkIHcxLHcyLHczLHc0LHRtcDsKQEAgLTI0NywxMyArMjUyLDE2IEBACiAgICBwdFsyXSA9ICh3Mj4+OCkmMjU1OyBwdFszXSA9IHcyJjI1NTsKICAgIHB0WzRdID0gKHczPj44KSYyNTU7IHB0WzVdID0gdzMmMjU1OwogICAgcHRbNl0gPSAodzQ+PjgpJjI1NTsgcHRbN10gPSB3NCYyNTU7CisKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotdm9pZCBza2lwamFja19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgc2tpcGphY2tfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX3NraXBqYWNrX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICBpbnQgZXJyID0gX3NraXBqYWNrX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CiAgICBidXJuX3N0YWNrKHNpemVvZih1bnNpZ25lZCkgKiA3ICsgc2l6ZW9mKGludCkgKiAyKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtMjkwLDcgKzI5OCw3IEBACiAgICAgICBza2lwamFja19lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgJmtleSk7CiAKICAgICAgIC8qIGNvbXBhcmUgKi8KLSAgICAgIGlmIChtZW1jbXAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCB8fCBtZW1jbXAoYnVmWzFdLCB0ZXN0c1t4XS5wdCwgOCkgIT0gMCkgeworICAgICAgaWYgKFhNRU1DTVAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCB8fCBYTUVNQ01QKGJ1ZlsxXSwgdGVzdHNbeF0ucHQsIDgpICE9IDApIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAKQEAgLTMzMSw1ICszMzksNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NraXBqYWNrLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLmMgYi9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYwppbmRleCA2MWFhOTUwLi41YmVlMGIzIDEwMDY0NAotLS0gYS9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYworKysgYi9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKICAvKiogCkBAIC0zNSw3ICszNSw3IEBACiAgICAgJnR3b2Zpc2hfdGVzdCwKICAgICAmdHdvZmlzaF9kb25lLAogICAgICZ0d29maXNoX2tleXNpemUsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKIC8qIHRoZSB0d28gcG9seW5vbWlhbHMgKi8KQEAgLTQxMiw4ICs0MTIsOCBAQAogICAgLyogbWFrZSB0aGUgc2JveGVzIChsYXJnZSByYW0gdmFyaWFudCkgKi8KICAgIGlmIChrID09IDIpIHsKICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDI1NjsgeCsrKSB7Ci0gICAgICAgICAgIHRtcHgwID0gc2JveCgwLCB4KTsKLSAgICAgICAgICAgdG1weDEgPSBzYm94KDEsIHgpOworICAgICAgICAgICB0bXB4MCA9ICh1bnNpZ25lZCBjaGFyKXNib3goMCwgeCk7CisgICAgICAgICAgIHRtcHgxID0gKHVuc2lnbmVkIGNoYXIpc2JveCgxLCB4KTsKICAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzBdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMSwgKHNib3goMCwgdG1weDAgXiBTWzBdKSBeIFNbNF0pKSwwKTsKICAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzFdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMCwgKHNib3goMCwgdG1weDEgXiBTWzFdKSBeIFNbNV0pKSwxKTsKICAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzJdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMSwgKHNib3goMSwgdG1weDAgXiBTWzJdKSBeIFNbNl0pKSwyKTsKQEAgLTQyMSw4ICs0MjEsOCBAQAogICAgICAgICB9CiAgICB9IGVsc2UgaWYgKGsgPT0gMykgewogICAgICAgICBmb3IgKHggPSAwOyB4IDwgMjU2OyB4KyspIHsKLSAgICAgICAgICAgdG1weDAgPSBzYm94KDAsIHgpOwotICAgICAgICAgICB0bXB4MSA9IHNib3goMSwgeCk7CisgICAgICAgICAgIHRtcHgwID0gKHVuc2lnbmVkIGNoYXIpc2JveCgwLCB4KTsKKyAgICAgICAgICAgdG1weDEgPSAodW5zaWduZWQgY2hhcilzYm94KDEsIHgpOwogICAgICAgICAgICBza2V5LT50d29maXNoLlNbMF1beF0gPSBtZHNfY29sdW1uX211bHQoc2JveCgxLCAoc2JveCgwLCBzYm94KDAsIHRtcHgxIF4gU1swXSkgXiBTWzRdKSBeIFNbOF0pKSwwKTsKICAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzFdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMCwgKHNib3goMCwgc2JveCgxLCB0bXB4MSBeIFNbMV0pIF4gU1s1XSkgXiBTWzldKSksMSk7CiAgICAgICAgICAgIHNrZXktPnR3b2Zpc2guU1syXVt4XSA9IG1kc19jb2x1bW5fbXVsdChzYm94KDEsIChzYm94KDEsIHNib3goMCwgdG1weDAgXiBTWzJdKSBeIFNbNl0pIF4gU1sxMF0pKSwyKTsKQEAgLTQzMCw4ICs0MzAsOCBAQAogICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHggPSAwOyB4IDwgMjU2OyB4KyspIHsKLSAgICAgICAgICAgdG1weDAgPSBzYm94KDAsIHgpOwotICAgICAgICAgICB0bXB4MSA9IHNib3goMSwgeCk7CisgICAgICAgICAgIHRtcHgwID0gKHVuc2lnbmVkIGNoYXIpc2JveCgwLCB4KTsKKyAgICAgICAgICAgdG1weDEgPSAodW5zaWduZWQgY2hhcilzYm94KDEsIHgpOwogICAgICAgICAgICBza2V5LT50d29maXNoLlNbMF1beF0gPSBtZHNfY29sdW1uX211bHQoc2JveCgxLCAoc2JveCgwLCBzYm94KDAsIHNib3goMSwgdG1weDEgXiBTWzBdKSBeIFNbNF0pIF4gU1s4XSkgXiBTWzEyXSkpLDApOwogICAgICAgICAgICBza2V5LT50d29maXNoLlNbMV1beF0gPSBtZHNfY29sdW1uX211bHQoc2JveCgwLCAoc2JveCgwLCBzYm94KDEsIHNib3goMSwgdG1weDAgXiBTWzFdKSBeIFNbNV0pIF4gU1s5XSkgXiBTWzEzXSkpLDEpOwogICAgICAgICAgICBza2V5LT50d29maXNoLlNbMl1beF0gPSBtZHNfY29sdW1uX211bHQoc2JveCgxLCAoc2JveCgxLCBzYm94KDAsIHNib3goMCwgdG1weDAgXiBTWzJdKSBeIFNbNl0pIF4gU1sxMF0pIF4gU1sxNF0pKSwyKTsKQEAgLTQ2NSwxMSArNDY1LDEyIEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXN0YXRpYyB2b2lkIF90d29maXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX3R3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgdHdvZmlzaF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgdHdvZmlzaF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgICB1bG9uZzMyIGEsYixjLGQsdGEsdGIsdGMsdGQsdDEsdDIsICprOwpAQCAtNTE5LDEzICs1MjAsMTYgQEAKICAgICAvKiBzdG9yZSBvdXRwdXQgKi8KICAgICBTVE9SRTMyTCh0YSwmY3RbMF0pOyBTVE9SRTMyTCh0YiwmY3RbNF0pOwogICAgIFNUT1JFMzJMKHRjLCZjdFs4XSk7IFNUT1JFMzJMKHRkLCZjdFsxMl0pOworCisgICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi12b2lkIHR3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHR3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX3R3b2Zpc2hfZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKKyAgIGludCBlcnIgPSBfdHdvZmlzaF9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOwogICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAxMCArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtNTM0LDExICs1MzgsMTIgQEAKICAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKICAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLXN0YXRpYyB2b2lkIF90d29maXNoX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3N0YXRpYyBpbnQgX3R3b2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogI2Vsc2UKLXZvaWQgdHdvZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCitpbnQgdHdvZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCiAjZW5kaWYKIHsKICAgICB1bG9uZzMyIGEsYixjLGQsdGEsdGIsdGMsdGQsdDEsdDIsICprOwpAQCAtNTkxLDEzICs1OTYsMTUgQEAKICAgICAvKiBzdG9yZSAqLwogICAgIFNUT1JFMzJMKGEsICZwdFswXSk7IFNUT1JFMzJMKGIsICZwdFs0XSk7CiAgICAgU1RPUkUzMkwoYywgJnB0WzhdKTsgU1RPUkUzMkwoZCwgJnB0WzEyXSk7CisgICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi12b2lkIHR3b2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHR3b2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewotICAgX3R3b2Zpc2hfZWNiX2RlY3J5cHQoY3QsIHB0LCBza2V5KTsKKyAgIGludCBlcnIgPV90d29maXNoX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CiAgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDEwICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCkBAIC02NTQsNyArNjYxLDEwIEBACiAgICAgfQogICAgIHR3b2Zpc2hfZWNiX2VuY3J5cHQodGVzdHNbaV0ucHQsIHRtcFswXSwgJmtleSk7CiAgICAgdHdvZmlzaF9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFsxXSwgJmtleSk7Ci0gICAgaWYgKG1lbWNtcCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikgIT0gMCB8fCBtZW1jbXAodG1wWzFdLCB0ZXN0c1tpXS5wdCwgMTYpICE9IDApIHsKKyAgICBpZiAoWE1FTUNNUCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikgIT0gMCB8fCBYTUVNQ01QKHRtcFsxXSwgdGVzdHNbaV0ucHQsIDE2KSAhPSAwKSB7CisjaWYgMAorICAgICAgIHByaW50ZigiVHdvZmlzaCBmYWlsZWQgdGVzdCAlZCwgJWQsICVkXG4iLCBpLCBYTUVNQ01QKHRtcFswXSwgdGVzdHNbaV0uY3QsIDE2KSwgWE1FTUNNUCh0bXBbMV0sIHRlc3RzW2ldLnB0LCAxNikpOworI2VuZGlmCiAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgICB9CiAgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCkBAIC03MDIsNSArNzEyLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2hfdGFiLmMgYi9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2hfdGFiLmMKaW5kZXggNDdkNDcxNy4uZjhhMzczZiAxMDA2NDQKLS0tIGEvc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoX3RhYi5jCisrKyBiL3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaF90YWIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKICAvKioKQEAgLTQ5Miw1ICs0OTIsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaF90YWIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaXBoZXJzL3h0ZWEuYyBiL3NyYy9jaXBoZXJzL3h0ZWEuYwppbmRleCBhNDVhMTNhLi5hYzczNDAwIDEwMDY0NAotLS0gYS9zcmMvY2lwaGVycy94dGVhLmMKKysrIGIvc3JjL2NpcGhlcnMveHRlYS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgJnh0ZWFfdGVzdCwKICAgICAmeHRlYV9kb25lLAogICAgICZ4dGVhX2tleXNpemUsCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKIH07CiAKIGludCB4dGVhX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCkBAIC03MSw4ICs3MSw5IEBACiAgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi12b2lkIHh0ZWFfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHh0ZWFfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewogICAgdW5zaWduZWQgbG9uZyB5LCB6OwogICAgaW50IHI7CkBAIC05OCw2ICs5OSw3IEBACiAgICB9CiAgICBTVE9SRTMyTCh5LCAmY3RbMF0pOwogICAgU1RPUkUzMkwoeiwgJmN0WzRdKTsKKyAgIHJldHVybiBDUllQVF9PSzsKIH0KIAogLyoqCkBAIC0xMDUsOCArMTA3LDkgQEAKICAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQogICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCiAgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi12b2lkIHh0ZWFfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoraW50IHh0ZWFfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQogewogICAgdW5zaWduZWQgbG9uZyB5LCB6OwogICAgaW50IHI7CkBAIC0xMzIsNiArMTM1LDcgQEAKICAgIH0KICAgIFNUT1JFMzJMKHksICZwdFswXSk7CiAgICBTVE9SRTMyTCh6LCAmcHRbNF0pOworICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAvKioKQEAgLTE2MCw3ICsxNjQsNyBAQAogICAgeHRlYV9lY2JfZW5jcnlwdChwdCwgdG1wWzBdLCAmc2tleSk7CiAgICB4dGVhX2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAmc2tleSk7CiAKLSAgIGlmIChtZW1jbXAodG1wWzBdLCBjdCwgOCkgIT0gMCB8fCBtZW1jbXAodG1wWzFdLCBwdCwgOCkgIT0gMCkgeyAKKyAgIGlmIChYTUVNQ01QKHRtcFswXSwgY3QsIDgpICE9IDAgfHwgWE1FTUNNUCh0bXBbMV0sIHB0LCA4KSAhPSAwKSB7IAogICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgIH0KIApAQCAtMjAzLDUgKzIwNyw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMveHRlYS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5LmMgYi9zcmMvZW5jYXV0aC9jY20vY2NtX21lbW9yeS5jCmluZGV4IDQ4ZGM0YjcuLmM1ZWVlMTggMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5LmMKKysrIGIvc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjIsNiArMjIsNyBAQAogICAgQHBhcmFtIGNpcGhlciAgICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAogICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkgdG8gdXNlCiAgICBAcGFyYW0ga2V5bGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gdXNrZXkgICAgICBBIHByZXZpb3VzbHkgc2NoZWR1bGVkIGtleSBbb3B0aW9uYWwgY2FuIGJlIE5VTExdCiAgICBAcGFyYW0gbm9uY2UgICAgICBUaGUgc2Vzc2lvbiBub25jZSBbdXNlIG9uY2VdCiAgICBAcGFyYW0gbm9uY2VsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBub25jZQogICAgQHBhcmFtIGhlYWRlciAgICAgVGhlIGhlYWRlciBmb3IgdGhlIHNlc3Npb24KQEAgLTM2LDYgKzM3LDcgQEAKICovCiBpbnQgY2NtX21lbW9yeShpbnQgY2lwaGVyLAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgc3ltbWV0cmljX2tleSAgICAgICAqdXNrZXksCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCiAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLApAQCAtNDgsNyArNTAsOSBAQAogICAgaW50ICAgICAgICAgICAgZXJyOwogICAgdW5zaWduZWQgbG9uZyAgbGVuLCBMLCB4LCB5LCB6LCBDVFJsZW47CiAKLSAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgaWYgKHVza2V5ID09IE5VTEwpIHsKKyAgICAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgfQogICAgTFRDX0FSR0NISyhub25jZSAgIT0gTlVMTCk7CiAgICBpZiAoaGVhZGVybGVuID4gMCkgewogICAgICAgTFRDX0FSR0NISyhoZWFkZXIgIT0gTlVMTCk7CkBAIC04NSwxNSArODksMTUgQEAKIAogICAgLyogaXMgdGhlcmUgYW4gYWNjZWxlcmF0b3I/ICovCiAgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5hY2NlbF9jY21fbWVtb3J5ICE9IE5VTEwpIHsKLSAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmFjY2VsX2NjbV9tZW1vcnkoCisgICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYWNjZWxfY2NtX21lbW9yeSgKICAgICAgICAgICAga2V5LCAgICBrZXlsZW4sCisgICAgICAgICAgIHVza2V5LAogICAgICAgICAgICBub25jZSwgIG5vbmNlbGVuLAogICAgICAgICAgICBoZWFkZXIsIGhlYWRlcmxlbiwKICAgICAgICAgICAgcHQsICAgICBwdGxlbiwKICAgICAgICAgICAgY3QsIAogICAgICAgICAgICB0YWcsICAgIHRhZ2xlbiwKICAgICAgICAgICAgZGlyZWN0aW9uKTsKLSAgICAgIHJldHVybiBDUllQVF9PSzsKICAgIH0KIAogICAgLyogbGV0J3MgZ2V0IHRoZSBMIHZhbHVlICovCkBAIC0xMTMsMjMgKzExNywzMiBAQAogICAgICAgTCA9IDE1IC0gbm9uY2VsZW47CiAgICB9CiAKLSAgIC8qIGFsbG9jYXRlIG1lbSBmb3IgdGhlIHN5bW1ldHJpYyBrZXkgKi8KLSAgIHNrZXkgPSBYTUFMTE9DKHNpemVvZigqc2tleSkpOwotICAgaWYgKHNrZXkgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIC8qIGRlY3JlYXNlIG5vbmNlbGVuIHRvIG1hdGNoIEwgKi8KKyAgIGlmICgobm9uY2VsZW4gKyBMKSA+IDE1KSB7CisgICAgICBub25jZWxlbiA9IDE1IC0gTDsKICAgIH0KIAotICAgLyogaW5pdGlhbGl6ZSB0aGUgY2lwaGVyICovCi0gICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIDAsIHNrZXkpKSAhPSBDUllQVF9PSykgewotICAgICAgWEZSRUUoc2tleSk7Ci0gICAgICByZXR1cm4gZXJyOworICAgLyogYWxsb2NhdGUgbWVtIGZvciB0aGUgc3ltbWV0cmljIGtleSAqLworICAgaWYgKHVza2V5ID09IE5VTEwpIHsKKyAgICAgIHNrZXkgPSBYTUFMTE9DKHNpemVvZigqc2tleSkpOworICAgICAgaWYgKHNrZXkgPT0gTlVMTCkgeworICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICAgIH0KKworICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgY2lwaGVyICovCisgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIDAsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgWEZSRUUoc2tleSk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIHNrZXkgPSB1c2tleTsKICAgIH0KIAogICAgLyogZm9ybSBCXzAgPT0gZmxhZ3MgfCBOb25jZSBOIHwgbChtKSAqLwogICAgeCA9IDA7Ci0gICBQQURbeCsrXSA9ICgoaGVhZGVybGVuID4gMCkgPyAoMTw8NikgOiAwKSB8CisgICBQQURbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoKGhlYWRlcmxlbiA+IDApID8gKDE8PDYpIDogMCkgfAogICAgICAgICAgICAgKCgoKnRhZ2xlbiAtIDIpPj4xKTw8MykgICAgICAgIHwKLSAgICAgICAgICAgIChMLTEpOworICAgICAgICAgICAgKEwtMSkpOwogCiAgICAvKiBub25jZSAqLwogICAgZm9yICh5ID0gMDsgeSA8ICgxNiAtIChMICsgMSkpOyB5KyspIHsKQEAgLTE0OSwxMiArMTYyLDE0IEBACiAgICAgICAgUEFEW3grK10gPSAwOwogICAgfQogICAgZm9yICg7IHkgPCBMOyB5KyspIHsKLSAgICAgICBQQURbeCsrXSA9IChsZW4gPj4gMjQpICYgMjU1OworICAgICAgIFBBRFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChsZW4gPj4gMjQpICYgMjU1KTsKICAgICAgICBsZW4gPDw9IDg7CiAgICB9CiAKICAgIC8qIGVuY3J5cHQgUEFEICovCi0gICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBlcnJvcjsKKyAgIH0KIAogICAgLyogaGFuZGxlIGhlYWRlciAqLwogICAgaWYgKGhlYWRlcmxlbiA+IDApIHsKQEAgLTE3Nyw3ICsxOTIsOSBAQAogICAgICAgZm9yICh5ID0gMDsgeSA8IGhlYWRlcmxlbjsgeSsrKSB7CiAgICAgICAgICAgaWYgKHggPT0gMTYpIHsKICAgICAgICAgICAgICAvKiBmdWxsIGJsb2NrIHNvIGxldCdzIGVuY3J5cHQgaXQgKi8KLSAgICAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KTsKKyAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHggPSAwOwogICAgICAgICAgIH0KICAgICAgICAgICBQQURbeCsrXSBePSBoZWFkZXJbeV07CkBAIC0xODUsNyArMjAyLDkgQEAKIAogICAgICAgLyogcmVtYWluZGVyPyAqLwogICAgICAgaWYgKHggIT0gMCkgewotICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSk7CisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgIH0KICAgICAgIH0KICAgIH0KIApAQCAtMTkzLDcgKzIxMiw3IEBACiAgICB4ID0gMDsKIAogICAgLyogZmxhZ3MgKi8KLSAgIGN0clt4KytdID0gTC0xOworICAgY3RyW3grK10gPSAodW5zaWduZWQgY2hhcilMLTE7CiAgCiAgICAvKiBub25jZSAqLwogICAgZm9yICh5ID0gMDsgeSA8ICgxNiAtIChMKzEpKTsgKyt5KSB7CkBAIC0yMTksMTQgKzIzOCwxOCBAQAogICAgICAgICAgICAgICAgICAgICBjdHJbel0gPSAoY3RyW3pdICsgMSkgJiAyNTU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdHJbel0pIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KGN0ciwgQ1RSUEFELCBza2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoY3RyLCBDVFJQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLyogeG9yIHRoZSBQVCBhZ2FpbnN0IHRoZSBwYWQgZmlyc3QgKi8KICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgMTY7IHogKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CiAgICAgICAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmUEFEW3pdKSkgIF49ICooKExUQ19GQVNUX1RZUEUqKSgmcHRbeSt6XSkpOwogICAgICAgICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoJmN0W3krel0pKSA9ICooKExUQ19GQVNUX1RZUEUqKSgmcHRbeSt6XSkpIF4gKigoTFRDX0ZBU1RfVFlQRSopKCZDVFJQQURbel0pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSk7CisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGZvciAoOyB5IDwgKHB0bGVuICYgfjE1KTsgeSArPSAxNikgewpAQCAtMjM1LDE0ICsyNTgsMTggQEAKICAgICAgICAgICAgICAgICAgICAgY3RyW3pdID0gKGN0clt6XSArIDEpICYgMjU1OwogICAgICAgICAgICAgICAgICAgICBpZiAoY3RyW3pdKSBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChjdHIsIENUUlBBRCwgc2tleSk7CisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KGN0ciwgQ1RSUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8qIHhvciB0aGUgUFQgYWdhaW5zdCB0aGUgcGFkIGxhc3QgKi8KICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgMTY7IHogKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CiAgICAgICAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmcHRbeSt6XSkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCZjdFt5K3pdKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJkNUUlBBRFt6XSkpOwogICAgICAgICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoJlBBRFt6XSkpICBePSAqKChMVENfRkFTVF9UWVBFKikoJnB0W3krel0pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSk7CisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KQEAgLTI1NSw3ICsyODIsOSBAQAogICAgICAgICAgICAgICAgICBjdHJbel0gPSAoY3RyW3pdICsgMSkgJiAyNTU7CiAgICAgICAgICAgICAgICAgIGlmIChjdHJbel0pIGJyZWFrOwogICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KGN0ciwgQ1RSUEFELCBza2V5KTsKKyAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoY3RyLCBDVFJQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgfQogICAgICAgICAgICAgIENUUmxlbiA9IDA7CiAgICAgICAgICAgfQogCkBAIC0yNjksMjEgKzI5OCwzMiBAQAogICAgICAgICAgIH0KIAogICAgICAgICAgIGlmICh4ID09IDE2KSB7Ci0gICAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSk7CisgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB4ID0gMDsKICAgICAgICAgICB9CiAgICAgICAgICAgUEFEW3grK10gXj0gYjsKICAgICAgIH0KICAgICAgICAgICAgICAKICAgICAgIGlmICh4ICE9IDApIHsKLSAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpOworICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICB9CiAgICAgICB9CiAgICB9CiAKLSAgIC8qIHNldHVwIENUUiBmb3IgdGhlIFRBRyAqLwotICAgY3RyWzE0XSA9IGN0clsxNV0gPSAweDAwOwotICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChjdHIsIENUUlBBRCwgc2tleSk7Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmRvbmUoc2tleSk7CisgICAvKiBzZXR1cCBDVFIgZm9yIHRoZSBUQUcgKHplcm8gdGhlIGNvdW50KSAqLworICAgZm9yICh5ID0gMTU7IHkgPiAxNSAtIEw7IHktLSkgeworICAgICAgY3RyW3ldID0gMHgwMDsKKyAgIH0KKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChjdHIsIENUUlBBRCwgc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICBpZiAoc2tleSAhPSB1c2tleSkgeworICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5kb25lKHNrZXkpOworICAgfQogCiAgICAvKiBzdG9yZSB0aGUgVEFHICovCiAgICBmb3IgKHggPSAwOyB4IDwgMTYgJiYgeCA8ICp0YWdsZW47IHgrKykgewpAQCAtMjk2LDE0ICszMzYsMTYgQEAKICAgIHplcm9tZW0oUEFELCAgICBzaXplb2YoUEFEKSk7CiAgICB6ZXJvbWVtKENUUlBBRCwgc2l6ZW9mKENUUlBBRCkpOwogI2VuZGlmCitlcnJvcjoKKyAgIGlmIChza2V5ICE9IHVza2V5KSB7CisgICAgICBYRlJFRShza2V5KTsKKyAgIH0KIAotICAgWEZSRUUoc2tleSk7Ci0KLSAgIHJldHVybiBDUllQVF9PSzsKKyAgIHJldHVybiBlcnI7CiB9CiAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9jY20vY2NtX21lbW9yeS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjkgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjE4ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5jIGIvc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0LmMKaW5kZXggYzMzNTAyYS4uM2E0NWJmYiAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0LmMKKysrIGIvc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTExNiw2ICsxMTYsNyBAQAogICB1bnNpZ25lZCBsb25nIHRhZ2xlbiwgeDsKICAgdW5zaWduZWQgY2hhciBidWZbNjRdLCBidWYyWzY0XSwgdGFnMlsxNl0sIHRhZ1sxNl07CiAgIGludCAgICAgICAgICAgZXJyLCBpZHg7CisgIHN5bW1ldHJpY19rZXkgc2tleTsKIAogICBpZHggPSBmaW5kX2NpcGhlcigiYWVzIik7CiAgIGlmIChpZHggPT0gLTEpIHsKQEAgLTEyNyw4ICsxMjgsMTMgQEAKIAogICBmb3IgKHggPSAwOyB4IDwgKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgewogICAgICAgdGFnbGVuID0gdGVzdHNbeF0udGFnbGVuOworICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltpZHhdLnNldHVwKHRlc3RzW3hdLmtleSwgMTYsIDAsICZza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICAKICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeShpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbeF0ua2V5LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t4XS5ub25jZSwgdGVzdHNbeF0ubm9uY2VsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbeF0uaGVhZGVyLCB0ZXN0c1t4XS5oZWFkZXJsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKXRlc3RzW3hdLnB0LCB0ZXN0c1t4XS5wdGxlbiwKQEAgLTEzNywzMSArMTQzLDMxIEBACiAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgfQogCi0gICAgICBpZiAobWVtY21wKGJ1ZiwgdGVzdHNbeF0uY3QsIHRlc3RzW3hdLnB0bGVuKSkgeworICAgICAgaWYgKFhNRU1DTVAoYnVmLCB0ZXN0c1t4XS5jdCwgdGVzdHNbeF0ucHRsZW4pKSB7CiAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgfQotICAgICAgaWYgKG1lbWNtcCh0YWcsIHRlc3RzW3hdLnRhZywgdGVzdHNbeF0udGFnbGVuKSkgeworICAgICAgaWYgKFhNRU1DTVAodGFnLCB0ZXN0c1t4XS50YWcsIHRlc3RzW3hdLnRhZ2xlbikpIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAKICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeShpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbeF0ua2V5LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW3hdLm5vbmNlLCB0ZXN0c1t4XS5ub25jZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t4XS5oZWFkZXIsIHRlc3RzW3hdLmhlYWRlcmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYyLCB0ZXN0c1t4XS5wdGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnMiwgJnRhZ2xlbiwgMQkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzIsICZ0YWdsZW4sIDEgICApKSAhPSBDUllQVF9PSykgewogICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgIH0KIAotICAgICBpZiAobWVtY21wKGJ1ZjIsIHRlc3RzW3hdLnB0LCB0ZXN0c1t4XS5wdGxlbikpIHsKKyAgICAgIGlmIChYTUVNQ01QKGJ1ZjIsIHRlc3RzW3hdLnB0LCB0ZXN0c1t4XS5wdGxlbikpIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9Ci0gICAgIGlmIChtZW1jbXAodGFnMiwgdGVzdHNbeF0udGFnLCB0ZXN0c1t4XS50YWdsZW4pKSB7CisgICAgICBpZiAoWE1FTUNNUCh0YWcyLCB0ZXN0c1t4XS50YWcsIHRlc3RzW3hdLnRhZ2xlbikpIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7Ci0gICAgIH0KLSAKLQorICAgICAgfQorICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbaWR4XS5kb25lKCZza2V5KTsKICAgfQogICByZXR1cm4gQ1JZUFRfT0s7CiAjZW5kaWYKQEAgLTE3MCw1ICsxNzYsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTg6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIuYyBiL3NyYy9lbmNhdXRoL2VheC9lYXhfYWRkaGVhZGVyLmMKaW5kZXggY2ZiMzI1ZC4uYjEwNTRlNSAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIuYworKysgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIC8qKiAKICAgICBAZmlsZSBlYXhfYWRkaGVhZGVyLmMKQEAgLTM0LDUgKzM0LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0LmMgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQuYwppbmRleCAxM2UyM2NjLi4yMmE2NmFiIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQuYworKysgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKiAKQEAgLTQ2LDUgKzQ2LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5jCmluZGV4IGQ2ZDcyYWIuLjY5M2RkZmEgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMKKysrIGIvc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtODQsNyArODQsNyBAQAogICAgfQogCiAgICAvKiBjb21wYXJlIHRhZ3MgKi8KLSAgIGlmIChidWZsZW4gPj0gdGFnbGVuICYmIG1lbWNtcChidWYsIHRhZywgdGFnbGVuKSA9PSAwKSB7CisgICBpZiAoYnVmbGVuID49IHRhZ2xlbiAmJiBYTUVNQ01QKGJ1ZiwgdGFnLCB0YWdsZW4pID09IDApIHsKICAgICAgICpzdGF0ID0gMTsKICAgIH0KICAgIApAQCAtMTA0LDUgKzEwNCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2VheC9lYXhfZG9uZS5jIGIvc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLmMKaW5kZXggMTBlMmMyMy4uMWUwMjkzOSAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLmMKKysrIGIvc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKioKQEAgLTkwLDUgKzkwLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdC5jIGIvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0LmMKaW5kZXggYTY0NjU4OC4uZGM4YmMzZCAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0LmMKKysrIGIvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKioKQEAgLTQ3LDUgKzQ3LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jCmluZGV4IDk3NjA2MTYuLmU5ZTUyZDAgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMKKysrIGIvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtNzgsNSArNzgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9lYXgvZWF4X2luaXQuYyBiL3NyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jCmluZGV4IDk0MmIyNWYuLjQ4NTEyYjUgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jCisrKyBiL3NyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqIApAQCAtMTQwLDUgKzE0MCw1IEBACiAjZW5kaWYgCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0LmMgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3QuYwppbmRleCBiMDhmNWFiLi5kMTU0MjcxIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3QuYworKysgYi9zcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3QuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKiAKQEAgLTIzMSw3ICsyMzEsNyBAQAogICAgICAgICAgICAgdGVzdHNbeF0ucGxhaW50ZXh0LCB0ZXN0c1t4XS5tc2dsZW4sIG91dGN0LCBvdXR0YWcsICZsZW4pKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtZW1jbXAob3V0Y3QsIHRlc3RzW3hdLmNpcGhlcnRleHQsIHRlc3RzW3hdLm1zZ2xlbikgfHwgbWVtY21wKG91dHRhZywgdGVzdHNbeF0udGFnLCBsZW4pKSB7CisgICAgICAgIGlmIChYTUVNQ01QKG91dGN0LCB0ZXN0c1t4XS5jaXBoZXJ0ZXh0LCB0ZXN0c1t4XS5tc2dsZW4pIHx8IFhNRU1DTVAob3V0dGFnLCB0ZXN0c1t4XS50YWcsIGxlbikpIHsKICNpZiAwCiAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgeTsKICAgICAgICAgICAgcHJpbnRmKCJcblxuRmFpbHVyZTogXG5DVDpcbiIpOwpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgb3V0Y3QsIHRlc3RzW3hdLm1zZ2xlbiwgb3V0Y3QsIG91dHRhZywgbGVuLCAmcmVzKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChyZXMgIT0gMSkgfHwgbWVtY21wKG91dGN0LCB0ZXN0c1t4XS5wbGFpbnRleHQsIHRlc3RzW3hdLm1zZ2xlbikpIHsKKyAgICAgICAgaWYgKChyZXMgIT0gMSkgfHwgWE1FTUNNUChvdXRjdCwgdGVzdHNbeF0ucGxhaW50ZXh0LCB0ZXN0c1t4XS5tc2dsZW4pKSB7CiAjaWYgMAogICAgICAgICAgICB1bnNpZ25lZCBsb25nIHk7CiAgICAgICAgICAgIHByaW50ZigiXG5cbkZhaWx1cmUgKHJlcyA9PSAlZCk6IFxuUFQ6XG4iLCByZXMpOwpAQCAtMjc4LDUgKzI3OCw1IEBACiAjZW5kaWYgLyogRUFYX01PREUgKi8KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9hYWQuYyBiL3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5jCmluZGV4IDAzY2IyNzkuLjYwMzdjNmMgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5jCisrKyBiL3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICAgICBnY20tPnRvdGxlbiArPSBnY20tPmJ1ZmxlbiAqIENPTlNUNjQoOCk7CiAgICAgICAgICAgICBnY21fbXVsdF9oKGdjbSwgZ2NtLT5YKTsKICAgICAgICAgIH0KLSAKKwogICAgICAgICAgLyogbWl4IGluIHRoZSBsZW5ndGggKi8KICAgICAgICAgIHplcm9tZW0oZ2NtLT5idWYsIDgpOwogICAgICAgICAgU1RPUkU2NEgoZ2NtLT50b3RsZW4sIGdjbS0+YnVmKzgpOwpAQCAtMTIwLDUgKzEyMCw1IEBACiAgICAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfYWFkLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMTQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjE2ICQgKi8KKy8qICREYXRlOiAyMDA2LzA5LzIzIDE5OjI0OjIxICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2LmMgYi9zcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9pdi5jCmluZGV4IDEwN2NmMzUuLjQ0ZTMxNjcgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2LmMKKysrIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtOTAsNSArOTAsNSBAQAogICAgCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9nY20vZ2NtX2RvbmUuYyBiL3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5jCmluZGV4IDk2ZWY3ZjMuLjRjYmQwOWYgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5jCisrKyBiL3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC02Miw3ICs2Miw5IEBACiAgICBnY21fbXVsdF9oKGdjbSwgZ2NtLT5YKTsKIAogICAgLyogZW5jcnlwdCBvcmlnaW5hbCBjb3VudGVyICovCi0gICBjaXBoZXJfZGVzY3JpcHRvcltnY20tPmNpcGhlcl0uZWNiX2VuY3J5cHQoZ2NtLT5ZXzAsIGdjbS0+YnVmLCAmZ2NtLT5LKTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbZ2NtLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGdjbS0+WV8wLCBnY20tPmJ1ZiwgJmdjbS0+SykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQogICAgZm9yICh4ID0gMDsgeCA8IDE2ICYmIHggPCAqdGFnbGVuOyB4KyspIHsKICAgICAgICB0YWdbeF0gPSBnY20tPmJ1Zlt4XSBeIGdjbS0+WFt4XTsKICAgIH0KQEAgLTc3LDUgKzc5LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS43ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2djbS9nY21fZ2ZfbXVsdC5jIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMKaW5kZXggMDZkYjIyYi4uNTJlODJkZCAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMKKysrIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMKQEAgLTYsMTcgKzYsNTkgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgogICAgQGZpbGUgZ2NtX2dmX211bHQuYwotICAgR0NNIGltcGxlbWVudGF0aW9uLCBpbml0aWFsaXplIHN0YXRlLCBieSBUb20gU3QgRGVuaXMKKyAgIEdDTSBpbXBsZW1lbnRhdGlvbiwgZG8gdGhlIEdGIG11bHQsIGJ5IFRvbSBTdCBEZW5pcwogKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCi0jaWZkZWYgR0NNX01PREUKKyNpZiBkZWZpbmVkKEdDTV9UQUJMRVMpIHx8IGRlZmluZWQoTFJXX1RBQkxFUykgfHwgKChkZWZpbmVkKEdDTV9NT0RFKSB8fCBkZWZpbmVkKEdDTV9NT0RFKSkgJiYgZGVmaW5lZChMVENfRkFTVCkpCiAKKy8qIHRoaXMgaXMgeCoyXjEyOCBtb2QgcCh4KSAuLi4gdGhlIHJlc3VsdHMgYXJlIDE2IGJ5dGVzIGVhY2ggc3RvcmVkIGluIGEgcGFja2VkIGZvcm1hdC4gIFNpbmNlIG9ubHkgdGhlIAorICogbG93ZXIgMTYgYml0cyBhcmUgbm90IHplcm8nZWQgSSByZW1vdmVkIHRoZSB1cHBlciAxNCBieXRlcyAqLworY29uc3QgdW5zaWduZWQgY2hhciBnY21fc2hpZnRfdGFibGVbMjU2KjJdID0geworMHgwMCwgMHgwMCwgMHgwMSwgMHhjMiwgMHgwMywgMHg4NCwgMHgwMiwgMHg0NiwgMHgwNywgMHgwOCwgMHgwNiwgMHhjYSwgMHgwNCwgMHg4YywgMHgwNSwgMHg0ZSwKKzB4MGUsIDB4MTAsIDB4MGYsIDB4ZDIsIDB4MGQsIDB4OTQsIDB4MGMsIDB4NTYsIDB4MDksIDB4MTgsIDB4MDgsIDB4ZGEsIDB4MGEsIDB4OWMsIDB4MGIsIDB4NWUsCisweDFjLCAweDIwLCAweDFkLCAweGUyLCAweDFmLCAweGE0LCAweDFlLCAweDY2LCAweDFiLCAweDI4LCAweDFhLCAweGVhLCAweDE4LCAweGFjLCAweDE5LCAweDZlLAorMHgxMiwgMHgzMCwgMHgxMywgMHhmMiwgMHgxMSwgMHhiNCwgMHgxMCwgMHg3NiwgMHgxNSwgMHgzOCwgMHgxNCwgMHhmYSwgMHgxNiwgMHhiYywgMHgxNywgMHg3ZSwKKzB4MzgsIDB4NDAsIDB4MzksIDB4ODIsIDB4M2IsIDB4YzQsIDB4M2EsIDB4MDYsIDB4M2YsIDB4NDgsIDB4M2UsIDB4OGEsIDB4M2MsIDB4Y2MsIDB4M2QsIDB4MGUsCisweDM2LCAweDUwLCAweDM3LCAweDkyLCAweDM1LCAweGQ0LCAweDM0LCAweDE2LCAweDMxLCAweDU4LCAweDMwLCAweDlhLCAweDMyLCAweGRjLCAweDMzLCAweDFlLAorMHgyNCwgMHg2MCwgMHgyNSwgMHhhMiwgMHgyNywgMHhlNCwgMHgyNiwgMHgyNiwgMHgyMywgMHg2OCwgMHgyMiwgMHhhYSwgMHgyMCwgMHhlYywgMHgyMSwgMHgyZSwKKzB4MmEsIDB4NzAsIDB4MmIsIDB4YjIsIDB4MjksIDB4ZjQsIDB4MjgsIDB4MzYsIDB4MmQsIDB4NzgsIDB4MmMsIDB4YmEsIDB4MmUsIDB4ZmMsIDB4MmYsIDB4M2UsCisweDcwLCAweDgwLCAweDcxLCAweDQyLCAweDczLCAweDA0LCAweDcyLCAweGM2LCAweDc3LCAweDg4LCAweDc2LCAweDRhLCAweDc0LCAweDBjLCAweDc1LCAweGNlLAorMHg3ZSwgMHg5MCwgMHg3ZiwgMHg1MiwgMHg3ZCwgMHgxNCwgMHg3YywgMHhkNiwgMHg3OSwgMHg5OCwgMHg3OCwgMHg1YSwgMHg3YSwgMHgxYywgMHg3YiwgMHhkZSwKKzB4NmMsIDB4YTAsIDB4NmQsIDB4NjIsIDB4NmYsIDB4MjQsIDB4NmUsIDB4ZTYsIDB4NmIsIDB4YTgsIDB4NmEsIDB4NmEsIDB4NjgsIDB4MmMsIDB4NjksIDB4ZWUsCisweDYyLCAweGIwLCAweDYzLCAweDcyLCAweDYxLCAweDM0LCAweDYwLCAweGY2LCAweDY1LCAweGI4LCAweDY0LCAweDdhLCAweDY2LCAweDNjLCAweDY3LCAweGZlLAorMHg0OCwgMHhjMCwgMHg0OSwgMHgwMiwgMHg0YiwgMHg0NCwgMHg0YSwgMHg4NiwgMHg0ZiwgMHhjOCwgMHg0ZSwgMHgwYSwgMHg0YywgMHg0YywgMHg0ZCwgMHg4ZSwKKzB4NDYsIDB4ZDAsIDB4NDcsIDB4MTIsIDB4NDUsIDB4NTQsIDB4NDQsIDB4OTYsIDB4NDEsIDB4ZDgsIDB4NDAsIDB4MWEsIDB4NDIsIDB4NWMsIDB4NDMsIDB4OWUsCisweDU0LCAweGUwLCAweDU1LCAweDIyLCAweDU3LCAweDY0LCAweDU2LCAweGE2LCAweDUzLCAweGU4LCAweDUyLCAweDJhLCAweDUwLCAweDZjLCAweDUxLCAweGFlLAorMHg1YSwgMHhmMCwgMHg1YiwgMHgzMiwgMHg1OSwgMHg3NCwgMHg1OCwgMHhiNiwgMHg1ZCwgMHhmOCwgMHg1YywgMHgzYSwgMHg1ZSwgMHg3YywgMHg1ZiwgMHhiZSwKKzB4ZTEsIDB4MDAsIDB4ZTAsIDB4YzIsIDB4ZTIsIDB4ODQsIDB4ZTMsIDB4NDYsIDB4ZTYsIDB4MDgsIDB4ZTcsIDB4Y2EsIDB4ZTUsIDB4OGMsIDB4ZTQsIDB4NGUsCisweGVmLCAweDEwLCAweGVlLCAweGQyLCAweGVjLCAweDk0LCAweGVkLCAweDU2LCAweGU4LCAweDE4LCAweGU5LCAweGRhLCAweGViLCAweDljLCAweGVhLCAweDVlLAorMHhmZCwgMHgyMCwgMHhmYywgMHhlMiwgMHhmZSwgMHhhNCwgMHhmZiwgMHg2NiwgMHhmYSwgMHgyOCwgMHhmYiwgMHhlYSwgMHhmOSwgMHhhYywgMHhmOCwgMHg2ZSwKKzB4ZjMsIDB4MzAsIDB4ZjIsIDB4ZjIsIDB4ZjAsIDB4YjQsIDB4ZjEsIDB4NzYsIDB4ZjQsIDB4MzgsIDB4ZjUsIDB4ZmEsIDB4ZjcsIDB4YmMsIDB4ZjYsIDB4N2UsCisweGQ5LCAweDQwLCAweGQ4LCAweDgyLCAweGRhLCAweGM0LCAweGRiLCAweDA2LCAweGRlLCAweDQ4LCAweGRmLCAweDhhLCAweGRkLCAweGNjLCAweGRjLCAweDBlLAorMHhkNywgMHg1MCwgMHhkNiwgMHg5MiwgMHhkNCwgMHhkNCwgMHhkNSwgMHgxNiwgMHhkMCwgMHg1OCwgMHhkMSwgMHg5YSwgMHhkMywgMHhkYywgMHhkMiwgMHgxZSwKKzB4YzUsIDB4NjAsIDB4YzQsIDB4YTIsIDB4YzYsIDB4ZTQsIDB4YzcsIDB4MjYsIDB4YzIsIDB4NjgsIDB4YzMsIDB4YWEsIDB4YzEsIDB4ZWMsIDB4YzAsIDB4MmUsCisweGNiLCAweDcwLCAweGNhLCAweGIyLCAweGM4LCAweGY0LCAweGM5LCAweDM2LCAweGNjLCAweDc4LCAweGNkLCAweGJhLCAweGNmLCAweGZjLCAweGNlLCAweDNlLAorMHg5MSwgMHg4MCwgMHg5MCwgMHg0MiwgMHg5MiwgMHgwNCwgMHg5MywgMHhjNiwgMHg5NiwgMHg4OCwgMHg5NywgMHg0YSwgMHg5NSwgMHgwYywgMHg5NCwgMHhjZSwKKzB4OWYsIDB4OTAsIDB4OWUsIDB4NTIsIDB4OWMsIDB4MTQsIDB4OWQsIDB4ZDYsIDB4OTgsIDB4OTgsIDB4OTksIDB4NWEsIDB4OWIsIDB4MWMsIDB4OWEsIDB4ZGUsCisweDhkLCAweGEwLCAweDhjLCAweDYyLCAweDhlLCAweDI0LCAweDhmLCAweGU2LCAweDhhLCAweGE4LCAweDhiLCAweDZhLCAweDg5LCAweDJjLCAweDg4LCAweGVlLAorMHg4MywgMHhiMCwgMHg4MiwgMHg3MiwgMHg4MCwgMHgzNCwgMHg4MSwgMHhmNiwgMHg4NCwgMHhiOCwgMHg4NSwgMHg3YSwgMHg4NywgMHgzYywgMHg4NiwgMHhmZSwKKzB4YTksIDB4YzAsIDB4YTgsIDB4MDIsIDB4YWEsIDB4NDQsIDB4YWIsIDB4ODYsIDB4YWUsIDB4YzgsIDB4YWYsIDB4MGEsIDB4YWQsIDB4NGMsIDB4YWMsIDB4OGUsCisweGE3LCAweGQwLCAweGE2LCAweDEyLCAweGE0LCAweDU0LCAweGE1LCAweDk2LCAweGEwLCAweGQ4LCAweGExLCAweDFhLCAweGEzLCAweDVjLCAweGEyLCAweDllLAorMHhiNSwgMHhlMCwgMHhiNCwgMHgyMiwgMHhiNiwgMHg2NCwgMHhiNywgMHhhNiwgMHhiMiwgMHhlOCwgMHhiMywgMHgyYSwgMHhiMSwgMHg2YywgMHhiMCwgMHhhZSwKKzB4YmIsIDB4ZjAsIDB4YmEsIDB4MzIsIDB4YjgsIDB4NzQsIDB4YjksIDB4YjYsIDB4YmMsIDB4ZjgsIDB4YmQsIDB4M2EsIDB4YmYsIDB4N2MsIDB4YmUsIDB4YmUgfTsKKworI2VuZGlmCisKKworI2lmIGRlZmluZWQoR0NNX01PREUpIHx8IGRlZmluZWQoTFJXX01PREUpCisKKyNpZm5kZWYgTFRDX0ZBU1QKIC8qIHJpZ2h0IHNoaWZ0ICovCiBzdGF0aWMgdm9pZCBnY21fcmlnaHRzaGlmdCh1bnNpZ25lZCBjaGFyICphKQogewpAQCAtMzMsNyArNzUsNyBAQAogCiAgICAgIAogLyoqCi0gIEdDTSBHRiBtdWx0aXBsaWVyIChpbnRlcm5hbCB1c2Ugb25seSkgCisgIEdDTSBHRiBtdWx0aXBsaWVyIChpbnRlcm5hbCB1c2Ugb25seSkgIGJpdHNlcmlhbAogICBAcGFyYW0gYSAgIEZpcnN0IHZhbHVlCiAgIEBwYXJhbSBiICAgU2Vjb25kIHZhbHVlCiAgIEBwYXJhbSBjICAgRGVzdGluYXRpb24gZm9yIGEgKiBiCkBAIC01OCwzNyArMTAwLDEyMiBAQAogICAgWE1FTUNQWShjLCBaLCAxNik7CiB9CiAKLS8qKgotICBHQ00gbXVsdGlwbHkgYnkgSAotICBAcGFyYW0gZ2NtICAgVGhlIEdDTSBzdGF0ZSB3aGljaCBob2xkcyB0aGUgSCB2YWx1ZQotICBAcGFyYW0gSSAgICAgVGhlIHZhbHVlIHRvIG11bHRpcGx5IEggYnkKLSAqLwotdm9pZCBnY21fbXVsdF9oKGdjbV9zdGF0ZSAqZ2NtLCB1bnNpZ25lZCBjaGFyICpJKQotewotICAgdW5zaWduZWQgY2hhciBUWzE2XTsKLSNpZmRlZiBHQ01fVEFCTEVTCi0gICBpbnQgeCwgeTsKLSAgIFhNRU1DUFkoVCwgJmdjbS0+UENbMF1bSVswXV1bMF0sIDE2KTsKLSAgIGZvciAoeCA9IDE7IHggPCAxNjsgeCsrKSB7Ci0jaWZkZWYgTFRDX0ZBU1QKLSAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7Ci0gICAgICAgICAgICooKExUQ19GQVNUX1RZUEUgKikoVCArIHkpKSBePSAqKChMVENfRkFTVF9UWVBFICopKCZnY20tPlBDW3hdW0lbeF1dW3ldKSk7Ci0gICAgICAgfQogI2Vsc2UKLSAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgewotICAgICAgICAgICBUW3ldIF49IGdjbS0+UENbeF1bSVt4XV1beV07Ci0gICAgICAgfQotI2VuZGlmCisKKy8qIG1hcCBub3JtYWwgbnVtYmVycyB0byAiaWVlZSIgd2F5IC4uLiBlLmcuIGJpdCByZXZlcnNlZCAqLworI2RlZmluZSBNKHgpICggKCh4JjgpPj4zKSB8ICgoeCY0KT4+MSkgfCAoKHgmMik8PDEpIHwgKCh4JjEpPDwzKSApCisKKyNkZWZpbmUgQlBEIChzaXplb2YoTFRDX0ZBU1RfVFlQRSkgKiA4KQorI2RlZmluZSBXUFYgKDEgKyAoMTYgLyBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpKQorCisvKioKKyAgR0NNIEdGIG11bHRpcGxpZXIgKGludGVybmFsIHVzZSBvbmx5KSAgd29yZCBvcmllbnRlZAorICBAcGFyYW0gYSAgIEZpcnN0IHZhbHVlCisgIEBwYXJhbSBiICAgU2Vjb25kIHZhbHVlCisgIEBwYXJhbSBjICAgRGVzdGluYXRpb24gZm9yIGEgKiBiCisgKi8gIAordm9pZCBnY21fZ2ZfbXVsdChjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBjaGFyICpjKQoreworICAgaW50IGksIGosIGssIHU7CisgICBMVENfRkFTVF9UWVBFIEJbMTZdW1dQVl0sIHRtcFszMiAvIHNpemVvZihMVENfRkFTVF9UWVBFKV0sIHBCWzE2IC8gc2l6ZW9mKExUQ19GQVNUX1RZUEUpXSwgenosIHo7CisgICB1bnNpZ25lZCBjaGFyIHBUbXBbMzJdOworCisgICAvKiBjcmVhdGUgc2ltcGxlIHRhYmxlcyAqLworICAgemVyb21lbShCWzBdLCAgICAgICBzaXplb2YoQlswXSkpOworICAgemVyb21lbShCW00oMSldLCAgICBzaXplb2YoQltNKDEpXSkpOworCisjaWZkZWYgRU5ESUFOXzMyQklUV09SRAorICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgIExPQUQzMkgoQltNKDEpXVtpXSwgYSArIChpPDwyKSk7CisgICAgICAgTE9BRDMyTChwQltpXSwgICAgICBiICsgKGk8PDIpKTsKICAgIH0KLSNlbHNlICAgICAKLSAgIGdjbV9nZl9tdWx0KGdjbS0+SCwgSSwgVCk7IAorI2Vsc2UgCisgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgTE9BRDY0SChCW00oMSldW2ldLCBhICsgKGk8PDMpKTsKKyAgICAgICBMT0FENjRMKHBCW2ldLCAgICAgIGIgKyAoaTw8MykpOworICAgfQogI2VuZGlmCi0gICBYTUVNQ1BZKEksIFQsIDE2KTsKKworICAgLyogbm93IGNyZWF0ZSAyLCA0IGFuZCA4ICovCisgICBCW00oMildWzBdID0gQltNKDEpXVswXSA+PiAxOworICAgQltNKDQpXVswXSA9IEJbTSgxKV1bMF0gPj4gMjsKKyAgIEJbTSg4KV1bMF0gPSBCW00oMSldWzBdID4+IDM7CisgICBmb3IgKGkgPSAxOyBpIDwgKGludClXUFY7IGkrKykgeworICAgICAgQltNKDIpXVtpXSA9IChCW00oMSldW2ktMV0gPDwgKEJQRC0xKSkgfCAoQltNKDEpXVtpXSA+PiAxKTsKKyAgICAgIEJbTSg0KV1baV0gPSAoQltNKDEpXVtpLTFdIDw8IChCUEQtMikpIHwgKEJbTSgxKV1baV0gPj4gMik7CisgICAgICBCW00oOCldW2ldID0gKEJbTSgxKV1baS0xXSA8PCAoQlBELTMpKSB8IChCW00oMSldW2ldID4+IDMpOworICAgfQorCisgICAvKiAgbm93IGFsbCB2YWx1ZXMgd2l0aCB0d28gYml0cyB3aGljaCBhcmUgMywgNSwgNiwgOSwgMTAsIDEyICovCisgICBmb3IgKGkgPSAwOyBpIDwgKGludClXUFY7IGkrKykgeworICAgICAgQltNKDMpXVtpXSAgPSBCW00oMSldW2ldIF4gQltNKDIpXVtpXTsKKyAgICAgIEJbTSg1KV1baV0gID0gQltNKDEpXVtpXSBeIEJbTSg0KV1baV07CisgICAgICBCW00oNildW2ldICA9IEJbTSgyKV1baV0gXiBCW00oNCldW2ldOworICAgICAgQltNKDkpXVtpXSAgPSBCW00oMSldW2ldIF4gQltNKDgpXVtpXTsKKyAgICAgIEJbTSgxMCldW2ldID0gQltNKDIpXVtpXSBeIEJbTSg4KV1baV07CisgICAgICBCW00oMTIpXVtpXSA9IEJbTSg4KV1baV0gXiBCW00oNCldW2ldOworICAgCisgICAvKiAgbm93IGFsbCAzIGJpdCB2YWx1ZXMgYW5kIHRoZSBvbmx5IDQgYml0IHZhbHVlOiA3LCAxMSwgMTMsIDE0LCAxNSAqLworICAgICAgQltNKDcpXVtpXSAgPSBCW00oMyldW2ldIF4gQltNKDQpXVtpXTsKKyAgICAgIEJbTSgxMSldW2ldID0gQltNKDMpXVtpXSBeIEJbTSg4KV1baV07CisgICAgICBCW00oMTMpXVtpXSA9IEJbTSgxKV1baV0gXiBCW00oMTIpXVtpXTsKKyAgICAgIEJbTSgxNCldW2ldID0gQltNKDYpXVtpXSBeIEJbTSg4KV1baV07CisgICAgICBCW00oMTUpXVtpXSA9IEJbTSg3KV1baV0gXiBCW00oOCldW2ldOworICAgfQorCisgICB6ZXJvbWVtKHRtcCwgc2l6ZW9mKHRtcCkpOworCisgICAvKiBjb21wdXRlIHByb2R1Y3QgZm91ciBiaXRzIG9mIGVhY2ggd29yZCBhdCBhIHRpbWUgKi8KKyAgIC8qIGZvciBlYWNoIG5pYmJsZSAqLworICAgZm9yIChpID0gKEJQRC80KS0xOyBpID49IDA7IGktLSkgeworICAgICAgIC8qIGZvciBlYWNoIHdvcmQgKi8KKyAgICAgICBmb3IgKGogPSAwOyBqIDwgKGludCkoV1BWLTEpOyBqKyspIHsKKyAgICAgICAgLyogZ3JhYiB0aGUgNCBiaXRzIHJlY2FsbCB0aGUgbmliYmxlcyBhcmUgYmFja3dhcmRzIHNvIGl0J3MgYSBzaGlmdCBieSAoaV4xKSo0ICovCisgICAgICAgICAgIHUgPSAocEJbal0gPj4gKChpXjEpPDwyKSkgJiAxNTsKKworICAgICAgICAvKiBhZGQgb2Zmc2V0IGJ5IHRoZSB3b3JkIGNvdW50IHRoZSB0YWJsZSBsb29rZWQgdXAgdmFsdWUgdG8gdGhlIHJlc3VsdCAqLworICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgKGludClXUFY7IGsrKykgeworICAgICAgICAgICAgICAgdG1wW2sral0gXj0gQlt1XVtrXTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgLyogc2hpZnQgcmVzdWx0IHVwIGJ5IDQgYml0cyAqLworICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICBmb3IgKHogPSBqID0gMDsgaiA8IChpbnQpKDMyIC8gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKTsgaisrKSB7CisgICAgICAgICAgICAgIHp6ID0gdG1wW2pdIDw8IChCUEQtNCk7CisgICAgICAgICAgICAgIHRtcFtqXSA9ICh0bXBbal0gPj4gNCkgfCB6OworICAgICAgICAgICAgICB6ID0geno7CisgICAgICAgICAgfQorICAgICAgIH0KKyAgIH0KKworICAgLyogc3RvcmUgcHJvZHVjdCAqLworI2lmZGVmIEVORElBTl8zMkJJVFdPUkQKKyAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICBTVE9SRTMySCh0bXBbaV0sIHBUbXAgKyAoaTw8MikpOworICAgfQorI2Vsc2UgCisgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgU1RPUkU2NEgodG1wW2ldLCBwVG1wICsgKGk8PDMpKTsKKyAgIH0KKyNlbmRpZgorCisgICAvKiByZWR1Y2UgYnkgdGFraW5nIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBhbmQgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSB0d28gYnl0ZSBzZXF1ZW5jZSAxNiBieXRlcyBkb3duICovCisgICBmb3IgKGkgPSAzMTsgaSA+PSAxNjsgaS0tKSB7CisgICAgICAgcFRtcFtpLTE2XSBePSBnY21fc2hpZnRfdGFibGVbKCh1bnNpZ25lZClwVG1wW2ldPDwxKV07CisgICAgICAgcFRtcFtpLTE1XSBePSBnY21fc2hpZnRfdGFibGVbKCh1bnNpZ25lZClwVG1wW2ldPDwxKSsxXTsKKyAgIH0KKworICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICBjW2ldID0gcFRtcFtpXTsKKyAgIH0KKwogfQogCisjZW5kaWYKIAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fZ2ZfbXVsdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjE2ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIxIDE0OjMzOjQyICQgKi8KKy8qICRSZXZpc2lvbjogMS4yMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCisgCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQuYyBiL3NyYy9lbmNhdXRoL2djbS9nY21faW5pdC5jCmluZGV4IDI0OWI2MWQuLmMwZjdhNWEgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL2djbS9nY21faW5pdC5jCisrKyBiL3NyYy9lbmNhdXRoL2djbS9nY21faW5pdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqCkBAIC0xNyw0NiArMTcsNiBAQAogCiAjaWZkZWYgR0NNX01PREUKIAotI2lmZGVmIEdDTV9UQUJMRVMKLQotLyogdGhpcyBpcyB4KjJeMTI4IG1vZCBwKHgpIC4uLiB0aGUgcmVzdWx0cyBhcmUgMTYgYnl0ZXMgZWFjaCBzdG9yZWQgaW4gYSBwYWNrZWQgZm9ybWF0LiAgU2luY2Ugb25seSB0aGUgCi0gKiBsb3dlciAxNiBiaXRzIGFyZSBub3QgemVybydlZCBJIHJlbW92ZWQgdGhlIHVwcGVyIDE0IGJ5dGVzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fc2hpZnRfdGFibGVbMjU2KjJdID0gewotMHgwMCwgMHgwMCwgMHgwMSwgMHhjMiwgMHgwMywgMHg4NCwgMHgwMiwgMHg0NiwgMHgwNywgMHgwOCwgMHgwNiwgMHhjYSwgMHgwNCwgMHg4YywgMHgwNSwgMHg0ZSwKLTB4MGUsIDB4MTAsIDB4MGYsIDB4ZDIsIDB4MGQsIDB4OTQsIDB4MGMsIDB4NTYsIDB4MDksIDB4MTgsIDB4MDgsIDB4ZGEsIDB4MGEsIDB4OWMsIDB4MGIsIDB4NWUsCi0weDFjLCAweDIwLCAweDFkLCAweGUyLCAweDFmLCAweGE0LCAweDFlLCAweDY2LCAweDFiLCAweDI4LCAweDFhLCAweGVhLCAweDE4LCAweGFjLCAweDE5LCAweDZlLAotMHgxMiwgMHgzMCwgMHgxMywgMHhmMiwgMHgxMSwgMHhiNCwgMHgxMCwgMHg3NiwgMHgxNSwgMHgzOCwgMHgxNCwgMHhmYSwgMHgxNiwgMHhiYywgMHgxNywgMHg3ZSwKLTB4MzgsIDB4NDAsIDB4MzksIDB4ODIsIDB4M2IsIDB4YzQsIDB4M2EsIDB4MDYsIDB4M2YsIDB4NDgsIDB4M2UsIDB4OGEsIDB4M2MsIDB4Y2MsIDB4M2QsIDB4MGUsCi0weDM2LCAweDUwLCAweDM3LCAweDkyLCAweDM1LCAweGQ0LCAweDM0LCAweDE2LCAweDMxLCAweDU4LCAweDMwLCAweDlhLCAweDMyLCAweGRjLCAweDMzLCAweDFlLAotMHgyNCwgMHg2MCwgMHgyNSwgMHhhMiwgMHgyNywgMHhlNCwgMHgyNiwgMHgyNiwgMHgyMywgMHg2OCwgMHgyMiwgMHhhYSwgMHgyMCwgMHhlYywgMHgyMSwgMHgyZSwKLTB4MmEsIDB4NzAsIDB4MmIsIDB4YjIsIDB4MjksIDB4ZjQsIDB4MjgsIDB4MzYsIDB4MmQsIDB4NzgsIDB4MmMsIDB4YmEsIDB4MmUsIDB4ZmMsIDB4MmYsIDB4M2UsCi0weDcwLCAweDgwLCAweDcxLCAweDQyLCAweDczLCAweDA0LCAweDcyLCAweGM2LCAweDc3LCAweDg4LCAweDc2LCAweDRhLCAweDc0LCAweDBjLCAweDc1LCAweGNlLAotMHg3ZSwgMHg5MCwgMHg3ZiwgMHg1MiwgMHg3ZCwgMHgxNCwgMHg3YywgMHhkNiwgMHg3OSwgMHg5OCwgMHg3OCwgMHg1YSwgMHg3YSwgMHgxYywgMHg3YiwgMHhkZSwKLTB4NmMsIDB4YTAsIDB4NmQsIDB4NjIsIDB4NmYsIDB4MjQsIDB4NmUsIDB4ZTYsIDB4NmIsIDB4YTgsIDB4NmEsIDB4NmEsIDB4NjgsIDB4MmMsIDB4NjksIDB4ZWUsCi0weDYyLCAweGIwLCAweDYzLCAweDcyLCAweDYxLCAweDM0LCAweDYwLCAweGY2LCAweDY1LCAweGI4LCAweDY0LCAweDdhLCAweDY2LCAweDNjLCAweDY3LCAweGZlLAotMHg0OCwgMHhjMCwgMHg0OSwgMHgwMiwgMHg0YiwgMHg0NCwgMHg0YSwgMHg4NiwgMHg0ZiwgMHhjOCwgMHg0ZSwgMHgwYSwgMHg0YywgMHg0YywgMHg0ZCwgMHg4ZSwKLTB4NDYsIDB4ZDAsIDB4NDcsIDB4MTIsIDB4NDUsIDB4NTQsIDB4NDQsIDB4OTYsIDB4NDEsIDB4ZDgsIDB4NDAsIDB4MWEsIDB4NDIsIDB4NWMsIDB4NDMsIDB4OWUsCi0weDU0LCAweGUwLCAweDU1LCAweDIyLCAweDU3LCAweDY0LCAweDU2LCAweGE2LCAweDUzLCAweGU4LCAweDUyLCAweDJhLCAweDUwLCAweDZjLCAweDUxLCAweGFlLAotMHg1YSwgMHhmMCwgMHg1YiwgMHgzMiwgMHg1OSwgMHg3NCwgMHg1OCwgMHhiNiwgMHg1ZCwgMHhmOCwgMHg1YywgMHgzYSwgMHg1ZSwgMHg3YywgMHg1ZiwgMHhiZSwKLTB4ZTEsIDB4MDAsIDB4ZTAsIDB4YzIsIDB4ZTIsIDB4ODQsIDB4ZTMsIDB4NDYsIDB4ZTYsIDB4MDgsIDB4ZTcsIDB4Y2EsIDB4ZTUsIDB4OGMsIDB4ZTQsIDB4NGUsCi0weGVmLCAweDEwLCAweGVlLCAweGQyLCAweGVjLCAweDk0LCAweGVkLCAweDU2LCAweGU4LCAweDE4LCAweGU5LCAweGRhLCAweGViLCAweDljLCAweGVhLCAweDVlLAotMHhmZCwgMHgyMCwgMHhmYywgMHhlMiwgMHhmZSwgMHhhNCwgMHhmZiwgMHg2NiwgMHhmYSwgMHgyOCwgMHhmYiwgMHhlYSwgMHhmOSwgMHhhYywgMHhmOCwgMHg2ZSwKLTB4ZjMsIDB4MzAsIDB4ZjIsIDB4ZjIsIDB4ZjAsIDB4YjQsIDB4ZjEsIDB4NzYsIDB4ZjQsIDB4MzgsIDB4ZjUsIDB4ZmEsIDB4ZjcsIDB4YmMsIDB4ZjYsIDB4N2UsCi0weGQ5LCAweDQwLCAweGQ4LCAweDgyLCAweGRhLCAweGM0LCAweGRiLCAweDA2LCAweGRlLCAweDQ4LCAweGRmLCAweDhhLCAweGRkLCAweGNjLCAweGRjLCAweDBlLAotMHhkNywgMHg1MCwgMHhkNiwgMHg5MiwgMHhkNCwgMHhkNCwgMHhkNSwgMHgxNiwgMHhkMCwgMHg1OCwgMHhkMSwgMHg5YSwgMHhkMywgMHhkYywgMHhkMiwgMHgxZSwKLTB4YzUsIDB4NjAsIDB4YzQsIDB4YTIsIDB4YzYsIDB4ZTQsIDB4YzcsIDB4MjYsIDB4YzIsIDB4NjgsIDB4YzMsIDB4YWEsIDB4YzEsIDB4ZWMsIDB4YzAsIDB4MmUsCi0weGNiLCAweDcwLCAweGNhLCAweGIyLCAweGM4LCAweGY0LCAweGM5LCAweDM2LCAweGNjLCAweDc4LCAweGNkLCAweGJhLCAweGNmLCAweGZjLCAweGNlLCAweDNlLAotMHg5MSwgMHg4MCwgMHg5MCwgMHg0MiwgMHg5MiwgMHgwNCwgMHg5MywgMHhjNiwgMHg5NiwgMHg4OCwgMHg5NywgMHg0YSwgMHg5NSwgMHgwYywgMHg5NCwgMHhjZSwKLTB4OWYsIDB4OTAsIDB4OWUsIDB4NTIsIDB4OWMsIDB4MTQsIDB4OWQsIDB4ZDYsIDB4OTgsIDB4OTgsIDB4OTksIDB4NWEsIDB4OWIsIDB4MWMsIDB4OWEsIDB4ZGUsCi0weDhkLCAweGEwLCAweDhjLCAweDYyLCAweDhlLCAweDI0LCAweDhmLCAweGU2LCAweDhhLCAweGE4LCAweDhiLCAweDZhLCAweDg5LCAweDJjLCAweDg4LCAweGVlLAotMHg4MywgMHhiMCwgMHg4MiwgMHg3MiwgMHg4MCwgMHgzNCwgMHg4MSwgMHhmNiwgMHg4NCwgMHhiOCwgMHg4NSwgMHg3YSwgMHg4NywgMHgzYywgMHg4NiwgMHhmZSwKLTB4YTksIDB4YzAsIDB4YTgsIDB4MDIsIDB4YWEsIDB4NDQsIDB4YWIsIDB4ODYsIDB4YWUsIDB4YzgsIDB4YWYsIDB4MGEsIDB4YWQsIDB4NGMsIDB4YWMsIDB4OGUsCi0weGE3LCAweGQwLCAweGE2LCAweDEyLCAweGE0LCAweDU0LCAweGE1LCAweDk2LCAweGEwLCAweGQ4LCAweGExLCAweDFhLCAweGEzLCAweDVjLCAweGEyLCAweDllLAotMHhiNSwgMHhlMCwgMHhiNCwgMHgyMiwgMHhiNiwgMHg2NCwgMHhiNywgMHhhNiwgMHhiMiwgMHhlOCwgMHhiMywgMHgyYSwgMHhiMSwgMHg2YywgMHhiMCwgMHhhZSwKLTB4YmIsIDB4ZjAsIDB4YmEsIDB4MzIsIDB4YjgsIDB4NzQsIDB4YjksIDB4YjYsIDB4YmMsIDB4ZjgsIDB4YmQsIDB4M2EsIDB4YmYsIDB4N2MsIDB4YmUsIDB4YmUgfTsKLQotI2VuZGlmCi0KIC8qKgogICBJbml0aWFsaXplIGEgR0NNIHN0YXRlCiAgIEBwYXJhbSBnY20gICAgIFRoZSBHQ00gc3RhdGUgdG8gaW5pdGlhbGl6ZQpAQCAtOTgsNyArNTgsOSBAQAogCiAgICAvKiBIID0gRSgwKSAqLwogICAgemVyb21lbShCLCAxNik7Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KEIsIGdjbS0+SCwgJmdjbS0+Syk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoQiwgZ2NtLT5ILCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CiAKICAgIC8qIHNldHVwIHN0YXRlICovCiAgICB6ZXJvbWVtKGdjbS0+YnVmLCBzaXplb2YoZ2NtLT5idWYpKTsKQEAgLTE0MSw1ICsxMDMsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21faW5pdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjE1ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIxIDE1OjA1OjE5ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xOCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5jIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkuYwppbmRleCBlZTEwZDNmLi5kZGVjMDEwIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5jCisrKyBiL3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKioKQEAgLTQzLDYgKzQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pCiB7CisgICAgdm9pZCAgICAgICpvcmlnOwogICAgIGdjbV9zdGF0ZSAqZ2NtOwogICAgIGludCAgICAgICAgZXJyOwogCkBAIC01MSw3ICs1Miw4IEBACiAgICAgfQogIAogICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmFjY2VsX2djbV9tZW1vcnkgIT0gTlVMTCkgewotICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYWNjZWxfZ2NtX21lbW9yeQorICAgICAgIHJldHVybiAKKyAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYWNjZWxfZ2NtX21lbW9yeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleSwgICBrZXlsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVYsICAgIElWbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXRhLCBhZGF0YWxlbiwKQEAgLTU5LDE1ICs2MSwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZywgICB0YWdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKTsKLSAgICAgICByZXR1cm4gQ1JZUFRfT0s7CiAgICAgfQogCiAKLSAgICBnY20gPSBYTUFMTE9DKHNpemVvZigqZ2NtKSk7CisKKyNpZm5kZWYgR0NNX1RBQkxFU19TU0UyCisgICAgb3JpZyA9IGdjbSA9IFhNQUxMT0Moc2l6ZW9mKCpnY20pKTsKKyNlbHNlCisgICAgb3JpZyA9IGdjbSA9IFhNQUxMT0Moc2l6ZW9mKCpnY20pICsgMTYpOworI2VuZGlmCiAgICAgaWYgKGdjbSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBDUllQVF9NRU07CiAgICAgfQogCisgICAvKiBGb3JjZSBHQ00gdG8gYmUgb24gYSBtdWx0aXBsZSBvZiAxNiBzbyB3ZSBjYW4gdXNlIDEyOC1iaXQgYWxpZ25lZCBvcGVyYXRpb25zCisgICAgKiBub3RlIHRoYXQgd2Ugb25seSBtb2RpZnkgZ2NtIGFuZCBrZWVwIG9yaWcgaW50YWN0LiAgVGhpcyBjb2RlIGlzIG5vdCBwb3J0YWJsZQorICAgICogYnV0IGFnYWluIGl0J3Mgb25seSBmb3IgU1NFMiBhbnl3YXlzLCBzbyB3aG8gY2FyZXM/CisgICAgKi8KKyNpZmRlZiBHQ01fVEFCTEVTX1NTRTIKKyAgIGlmICgodW5zaWduZWQgbG9uZylnY20gJiAxNSkgeworICAgICAgZ2NtID0gKGdjbV9zdGF0ZSAqKSgodW5zaWduZWQgbG9uZylnY20gKyAoMTYgLSAoKHVuc2lnbmVkIGxvbmcpZ2NtICYgMTUpKSk7CisgICB9CisjZW5kaWYKKwogICAgIGlmICgoZXJyID0gZ2NtX2luaXQoZ2NtLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICBnb3RvIExUQ19FUlI7CiAgICAgfQpAQCAtODIsMTIgKzk4LDEyIEBACiAgICAgfQogICAgIGVyciA9IGdjbV9kb25lKGdjbSwgdGFnLCB0YWdsZW4pOwogTFRDX0VSUjoKLSAgICBYRlJFRShnY20pOworICAgIFhGUkVFKG9yaWcpOwogICAgIHJldHVybiBlcnI7CiB9CiAjZW5kaWYKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjE5ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yMyAkICovCisvKiAkRGF0ZTogMjAwNi8wOS8wNyAxMDowMDo1NyAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5jIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV9tdWx0X2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzkxZTAwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV9tdWx0X2guYwpAQCAtMCwwICsxLDU4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgIEBmaWxlIGdjbV9tdWx0X2guYworICAgR0NNIGltcGxlbWVudGF0aW9uLCBkbyB0aGUgR0YgbXVsdCwgYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZiBkZWZpbmVkKEdDTV9NT0RFKQorLyoqCisgIEdDTSBtdWx0aXBseSBieSBICisgIEBwYXJhbSBnY20gICBUaGUgR0NNIHN0YXRlIHdoaWNoIGhvbGRzIHRoZSBIIHZhbHVlCisgIEBwYXJhbSBJICAgICBUaGUgdmFsdWUgdG8gbXVsdGlwbHkgSCBieQorICovCit2b2lkIGdjbV9tdWx0X2goZ2NtX3N0YXRlICpnY20sIHVuc2lnbmVkIGNoYXIgKkkpCit7CisgICB1bnNpZ25lZCBjaGFyIFRbMTZdOworI2lmZGVmIEdDTV9UQUJMRVMKKyAgIGludCB4LCB5OworI2lmZGVmIEdDTV9UQUJMRVNfU1NFMgorICAgYXNtKCJtb3ZkcWEgKCUwKSwlJXhtbTAiOjoiciIoJmdjbS0+UENbMF1bSVswXV1bMF0pKTsKKyAgIGZvciAoeCA9IDE7IHggPCAxNjsgeCsrKSB7CisgICAgICBhc20oInB4b3IgKCUwKSwlJXhtbTAiOjoiciIoJmdjbS0+UENbeF1bSVt4XV1bMF0pKTsKKyAgIH0KKyAgIGFzbSgibW92ZHFhICUleG1tMCwoJTApIjo6InIiKCZUKSk7CisjZWxzZQorICAgWE1FTUNQWShULCAmZ2NtLT5QQ1swXVtJWzBdXVswXSwgMTYpOworICAgZm9yICh4ID0gMTsgeCA8IDE2OyB4KyspIHsKKyNpZmRlZiBMVENfRkFTVAorICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSAqKShUICsgeSkpIF49ICooKExUQ19GQVNUX1RZUEUgKikoJmdjbS0+UENbeF1bSVt4XV1beV0pKTsKKyAgICAgICB9CisjZWxzZQorICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAgIFRbeV0gXj0gZ2NtLT5QQ1t4XVtJW3hdXVt5XTsKKyAgICAgICB9CisjZW5kaWYgLyogTFRDX0ZBU1QgKi8KKyAgIH0KKyNlbmRpZiAvKiBHQ01fVEFCTEVTX1NTRTIgKi8KKyNlbHNlICAgICAKKyAgIGdjbV9nZl9tdWx0KGdjbS0+SCwgSSwgVCk7IAorI2VuZGlmCisgICBYTUVNQ1BZKEksIFQsIDE2KTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDgvMjMgMjA6NDA6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLmMgYi9zcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MuYwppbmRleCBmNTEyZTI4Li5mNGQyMWQzIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MuYworKysgYi9zcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtMzEsOSArMzEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uKQogewotICAgdW5zaWduZWQgbG9uZyB4LCB5OworICAgdW5zaWduZWQgbG9uZyB4OworICAgaW50ICAgICAgICAgICB5LCBlcnI7CiAgICB1bnNpZ25lZCBjaGFyIGI7Ci0gICBpbnQgICAgICAgICAgIGVycjsKIAogICAgTFRDX0FSR0NISyhnY20gIT0gTlVMTCk7CiAgICBpZiAocHRsZW4gPiAwKSB7CkBAIC01OSwxMCArNTksMTIgQEAKIAogICAgICAgLyogaW5jcmVtZW50IGNvdW50ZXIgKi8KICAgICAgIGZvciAoeSA9IDE1OyB5ID49IDEyOyB5LS0pIHsKLSAgICAgICAgICBpZiAoKytnY20tPllbeV0pIHsgYnJlYWs7IH0KKyAgICAgICAgICBpZiAoKytnY20tPllbeV0gJiAyNTUpIHsgYnJlYWs7IH0KICAgICAgIH0KICAgICAgIC8qIGVuY3J5cHQgdGhlIGNvdW50ZXIgKi8KLSAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKTsgICAgIAorICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltnY20tPmNpcGhlcl0uZWNiX2VuY3J5cHQoZ2NtLT5ZLCBnY20tPmJ1ZiwgJmdjbS0+SykpICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQogCiAgICAgICBnY20tPmJ1ZmxlbiA9IDA7CiAgICAgICBnY20tPm1vZGUgICA9IEdDTV9NT0RFX1RFWFQ7CkBAIC04Nyw5ICs4OSwxMSBAQAogICAgICAgICAgICAgIGdjbV9tdWx0X2goZ2NtLCBnY20tPlgpOwogICAgICAgICAgICAgIC8qIGluY3JlbWVudCBjb3VudGVyICovCiAgICAgICAgICAgICAgZm9yICh5ID0gMTU7IHkgPj0gMTI7IHktLSkgewotICAgICAgICAgICAgICAgICBpZiAoKytnY20tPllbeV0pIHsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgICAgaWYgKCsrZ2NtLT5ZW3ldICYgMjU1KSB7IGJyZWFrOyB9CiAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKTsKKyAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKHB0bGVuICYgfjE1KTsgeCArPSAxNikgewpAQCAtMTAzLDkgKzEwNywxMSBAQAogICAgICAgICAgICAgIGdjbV9tdWx0X2goZ2NtLCBnY20tPlgpOwogICAgICAgICAgICAgIC8qIGluY3JlbWVudCBjb3VudGVyICovCiAgICAgICAgICAgICAgZm9yICh5ID0gMTU7IHkgPj0gMTI7IHktLSkgewotICAgICAgICAgICAgICAgICBpZiAoKytnY20tPllbeV0pIHsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgICAgaWYgKCsrZ2NtLT5ZW3ldICYgMjU1KSB7IGJyZWFrOyB9CiAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKTsKKyAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgfQpAQCAtMTE5LDkgKzEyNSwxMSBAQAogICAgICAgICAgIAogICAgICAgICAgIC8qIGluY3JlbWVudCBjb3VudGVyICovCiAgICAgICAgICAgZm9yICh5ID0gMTU7IHkgPj0gMTI7IHktLSkgewotICAgICAgICAgICAgICBpZiAoKytnY20tPllbeV0pIHsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgaWYgKCsrZ2NtLT5ZW3ldICYgMjU1KSB7IGJyZWFrOyB9CiAgICAgICAgICAgfQotICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKTsKKyAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KICAgICAgICAgICBnY20tPmJ1ZmxlbiA9IDA7CiAgICAgICAgfQogCkBAIC0xMzcsMTEgKzE0NSw4IEBACiAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKLQotCiAjZW5kaWYKLSAgIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xOSAxOTozMzozNiAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0LmMgYi9zcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0LmMKaW5kZXggYjMzNmE5Mi4uYTZhODUyMiAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvZ2NtL2djbV9yZXNldC5jCisrKyBiL3NyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtNDAsNSArNDAsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL2djbS9nY21fdGVzdC5jIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0LmMKaW5kZXggNzEwNjE4OC4uMmY4NTM5YiAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0LmMKKysrIGIvc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKioKQEAgLTI5LDEzICsyOSwxMyBAQAogICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgY2hhciBLWzMyXTsKICAgICAgICBpbnQgICAgICAgICAgIGtleWxlbjsKLSAgICAgICB1bnNpZ25lZCBjaGFyIFBbNjRdOworICAgICAgIHVuc2lnbmVkIGNoYXIgUFsxMjhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW47Ci0JCSB1bnNpZ25lZCBjaGFyIEFbNjRdOworICAgICAgIHVuc2lnbmVkIGNoYXIgQVsxMjhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgYWxlbjsKLSAgICAgICB1bnNpZ25lZCBjaGFyIElWWzY0XTsKKyAgICAgICB1bnNpZ25lZCBjaGFyIElWWzEyOF07CiAgICAgICAgdW5zaWduZWQgbG9uZyBJVmxlbjsKLSAgICAgICB1bnNpZ25lZCBjaGFyIENbNjRdOworICAgICAgIHVuc2lnbmVkIGNoYXIgQ1sxMjhdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgVFsxNl07CiAgICB9IHRlc3RzW10gPSB7CiAKQEAgLTI3NSwxMyArMjc1LDU4IEBACiAgICAvKiBUQUcgKi8KICAgIHsgMHg2MSwgMHg5YywgMHhjNSwgMHhhZSwgMHhmZiwgMHhmZSwgMHgwYiwgMHhmYSwgCiAgICAgIDB4NDYsIDB4MmEsIDB4ZjQsIDB4M2MsIDB4MTYsIDB4OTksIDB4ZDAsIDB4NTAsIH0KK30sCisKKy8qIHRlc3QgY2FzZSAjNDYgZnJvbSBCRyAoY2F0Y2hlcyB0aGUgTFRDIGJ1ZyBvZiB2MS4xNSkgKi8KK3sKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgMTYsCisKKyAgIC8qIFBUICovCisgICB7IDB4YTIsIDB4YWEsIDB4YjMsIDB4YWQsIDB4OGIsIDB4MTcsIDB4YWMsIDB4ZGQsIAorICAgICAweGEyLCAweDg4LCAweDQyLCAweDZjLCAweGQ3LCAweGM0LCAweDI5LCAweGI3LCAKKyAgICAgMHhjYSwgMHg4NiwgMHhiNywgMHhhYywgMHhhMCwgMHg1OCwgMHgwOSwgMHhjNywgCisgICAgIDB4MGMsIDB4ZTgsIDB4MmQsIDB4YjIsIDB4NTcsIDB4MTEsIDB4Y2IsIDB4NTMsCisgICAgIDB4MDIsIDB4ZWIsIDB4MjcsIDB4NDMsIDB4YjAsIDB4MzYsIDB4ZjMsIDB4ZDcsIAorICAgICAweDUwLCAweGQ2LCAweGNmLCAweDBkLCAweGMwLCAweGFjLCAweGI5LCAweDI5LCAKKyAgICAgMHg1MCwgMHhkNSwgMHg0NiwgMHhkYiwgMHgzMCwgMHg4ZiwgMHg5MywgMHhiNCwgCisgICAgIDB4ZmYsIDB4MjQsIDB4NGEsIDB4ZmEsIDB4OWQsIDB4YzcsIDB4MmIsIDB4Y2QsCisgICAgIDB4NzUsIDB4OGQsIDB4MmMgfSwKKyAgIDY3LAorCisgICAvKiBBREFUQSAqLworICAgeyAweDY4LCAweDhlLCAweDFhLCAweGE5LCAweDg0LCAweGRlLCAweDkyLCAweDZkLCAKKyAgICAgMHhjNywgMHhiNCwgMHhjNCwgMHg3ZiwgMHg0NCB9LAorICAgMTMsICAgCisKKyAgIC8qIElWICovCisgICB7IDB4YjcsIDB4MjEsIDB4MzgsIDB4YjUsIDB4YTAsIDB4NWYsIDB4ZjUsIDB4MDcsIAorICAgICAweDBlLCAweDhjLCAweGQ5LCAweDQxLCAweDgzLCAweGY3LCAweDYxLCAweGQ4IH0sCisgICAxNiwKKworICAgLyogQ1QgKi8KKyAgIHsgMHhjYiwgMHhjOCwgMHhkMiwgMHhmMSwgMHg1NCwgMHg4MSwgMHhhNCwgMHhjYywgCisgICAgIDB4N2QsIDB4ZDEsIDB4ZTEsIDB4OWEsIDB4YWEsIDB4ODMsIDB4ZGUsIDB4NTYsIAorICAgICAweDc4LCAweDQ4LCAweDNlLCAweGMzLCAweDU5LCAweGFlLCAweDdkLCAweGVjLCAKKyAgICAgMHgyYSwgMHhiOCwgMHhkNSwgMHgzNCwgMHhlMCwgMHg5MCwgMHg2ZiwgMHg0YiwKKyAgICAgMHg0NiwgMHg2MywgMHhmYSwgMHhmZiwgMHg1OCwgMHhhOCwgMHhiMiwgMHhkNywgCisgICAgIDB4MzMsIDB4YjgsIDB4NDUsIDB4ZWUsIDB4ZjcsIDB4YzksIDB4YjMsIDB4MzEsIAorICAgICAweGU5LCAweGUxLCAweDBlLCAweGIyLCAweDYxLCAweDJjLCAweDk5LCAweDVmLCAKKyAgICAgMHhlYiwgMHgxYSwgMHhjMSwgMHg1YSwgMHg2MiwgMHg4NiwgMHhjYywgMHhlOCwKKyAgICAgMHhiMiwgMHg5NywgMHhhOCB9LAorCisgICAvKiBUQUcgKi8KKyAgIHsgMHg4ZCwgMHgyZCwgMHgyYSwgMHg5MywgMHg3MiwgMHg2MiwgMHg2ZiwgMHg2YiwgCisgICAgIDB4ZWUsIDB4ODUsIDB4ODAsIDB4MjcsIDB4NmEsIDB4NjMsIDB4NjYsIDB4YmYgfQogfQogCiAvKiByZXN0IG9mIHRlc3QgY2FzZXMgYXJlIHRoZSBzYW1lIGV4Y2VwdCBBRVMga2V5IHNpemUgY2hhbmdlcy4uLiBpZ25vcmVkLi4uICovCiB9OwogICAgaW50ICAgICAgICAgICBpZHgsIGVycjsKICAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKLSAgIHVuc2lnbmVkIGNoYXIgb3V0WzJdWzY0XSwgVFsyXVsxNl07CisgICB1bnNpZ25lZCBjaGFyIG91dFsyXVsxMjhdLCBUWzJdWzE2XTsKIAogICAgLyogZmluZCBhZXMgKi8KICAgIGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKTsKQEAgLTMwMiw3ICszNDcsNyBAQAogICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgfQogCi0gICAgICAgaWYgKG1lbWNtcChvdXRbMF0sIHRlc3RzW3hdLkMsIHRlc3RzW3hdLnB0bGVuKSkgeworICAgICAgIGlmIChYTUVNQ01QKG91dFswXSwgdGVzdHNbeF0uQywgdGVzdHNbeF0ucHRsZW4pKSB7CiAjaWYgMAogICAgICAgICAgIHByaW50ZigiXG5DaXBoZXJ0ZXh0IHdyb25nICVsdVxuIiwgeCk7CiAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IHRlc3RzW3hdLnB0bGVuOyB5KyspIHsKQEAgLTMxMyw3ICszNTgsNyBAQAogICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICAgfQogCi0gICAgICAgaWYgKG1lbWNtcChUWzBdLCB0ZXN0c1t4XS5ULCAxNikpIHsKKyAgICAgICBpZiAoWE1FTUNNUChUWzBdLCB0ZXN0c1t4XS5ULCAxNikpIHsKICNpZiAwCiAgICAgICAgICAgcHJpbnRmKCJcblRhZyBvbiBwbGFpbnRleHQgd3JvbmcgJWx1XG4iLCB4KTsKICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgewpAQCAtMzMzLDcgKzM3OCw3IEBACiAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICB9CiAKLSAgICAgICBpZiAobWVtY21wKG91dFsxXSwgdGVzdHNbeF0uUCwgdGVzdHNbeF0ucHRsZW4pKSB7CisgICAgICAgaWYgKFhNRU1DTVAob3V0WzFdLCB0ZXN0c1t4XS5QLCB0ZXN0c1t4XS5wdGxlbikpIHsKICNpZiAwCiAgICAgICAgICAgcHJpbnRmKCJcbnBsYWludGV4dCB3cm9uZyAlbHVcbiIsIHgpOwogICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCB0ZXN0c1t4XS5wdGxlbjsgeSsrKSB7CkBAIC0zNDQsNyArMzg5LDcgQEAKICAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgIH0KIAotICAgICAgIGlmIChtZW1jbXAoVFsxXSwgdGVzdHNbeF0uVCwgMTYpKSB7CisgICAgICAgaWYgKFhNRU1DTVAoVFsxXSwgdGVzdHNbeF0uVCwgMTYpKSB7CiAjaWYgMAogICAgICAgICAgIHByaW50ZigiXG5UYWcgb24gY2lwaGVydGV4dCB3cm9uZyAlbHVcbiIsIHgpOwogICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CkBAIC0zNjQsNSArNDA5LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuMjAgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMTc6MjU6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0LmMgYi9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQuYwppbmRleCBhMGYyNzU0Li41OGYzODI1IDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQuYworKysgYi9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtNTEsNyArNTEsOSBAQAogICAgZm9yICh4ID0gMDsgeCA8IG9jYi0+YmxvY2tfbGVuOyB4KyspIHsKICAgICAgICB0bXBbeF0gPSBjdFt4XSBeIFpbeF07CiAgICB9Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2RlY3J5cHQodG1wLCBwdCwgJm9jYi0+a2V5KTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3Jbb2NiLT5jaXBoZXJdLmVjYl9kZWNyeXB0KHRtcCwgcHQsICZvY2ItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQogICAgZm9yICh4ID0gMDsgeCA8IG9jYi0+YmxvY2tfbGVuOyB4KyspIHsKICAgICAgICBwdFt4XSBePSBaW3hdOwogICAgfQpAQCAtNzMsNSArNzUsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkuYyBiL3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMKaW5kZXggMDE3M2VmZi4uYjdiODg0MCAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkuYworKysgYi9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqIApAQCAtODIsNSArODIsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQuYwppbmRleCBmYjE0OWJkLi4yYTNhZTM5IDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5jCisrKyBiL3NyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiogCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICBnb3RvIExCTF9FUlI7CiAgICB9CiAKLSAgIGlmICh0YWdsZW4gPD0gdGFnYnVmbGVuICYmIG1lbWNtcCh0YWdidWYsIHRhZywgdGFnbGVuKSA9PSAwKSB7CisgICBpZiAodGFnbGVuIDw9IHRhZ2J1ZmxlbiAmJiBYTUVNQ01QKHRhZ2J1ZiwgdGFnLCB0YWdsZW4pID09IDApIHsKICAgICAgICpzdGF0ID0gMTsKICAgIH0KIApAQCAtNzYsNSArNzYsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQuYwppbmRleCAyNzEyNmU3Li41OTQ4ZDgyIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5jCisrKyBiL3NyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiogCkBAIC00Miw1ICs0Miw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdC5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0LmMKaW5kZXggMmE0ODU1MS4uM2M0OTkxYyAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0LmMKKysrIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiogCkBAIC01MSw3ICs1MSw5IEBACiAgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgewogICAgICAgIHRtcFt4XSA9IHB0W3hdIF4gWlt4XTsKICAgIH0KLSAgIGNpcGhlcl9kZXNjcmlwdG9yW29jYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdCh0bXAsIGN0LCAmb2NiLT5rZXkpOworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQodG1wLCBjdCwgJm9jYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CiAgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgewogICAgICAgIGN0W3hdIF49IFpbeF07CiAgICB9CkBAIC02Niw1ICs2OCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYwppbmRleCBiZWI3MmM4Li5lNTg5NzVlIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jCisrKyBiL3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiogCkBAIC04MCw1ICs4MCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0LmMKaW5kZXggOTI2NmQ1Yy4uNTM2YWY4NyAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0LmMKKysrIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKioKQEAgLTc2LDEzICs3NiwxNyBAQAogIAogICAgLyogZmluZCBMID0gRVswXSAqLwogICAgemVyb21lbShvY2ItPkwsIG9jYi0+YmxvY2tfbGVuKTsKLSAgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQob2NiLT5MLCBvY2ItPkwsICZvY2ItPmtleSk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQob2NiLT5MLCBvY2ItPkwsICZvY2ItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQogCiAgICAvKiBmaW5kIFIgPSBFW04geG9yIExdICovCiAgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgewogICAgICAgIG9jYi0+Ult4XSA9IG9jYi0+TFt4XSBeIG5vbmNlW3hdOwogICAgfQotICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChvY2ItPlIsIG9jYi0+UiwgJm9jYi0+a2V5KTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChvY2ItPlIsIG9jYi0+UiwgJm9jYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CiAKICAgIC8qIGZpbmQgTHNbaV0gPSBMIDw8IGkgZm9yIGkgPT0gMC4uMzEgKi8KICAgIFhNRU1DUFkob2NiLT5Mc1swXSwgb2NiLT5MLCBvY2ItPmJsb2NrX2xlbik7CkBAIC0xMjksNSArMTMzLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2luaXQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL29jYi9vY2JfbnR6LmMgYi9zcmMvZW5jYXV0aC9vY2Ivb2NiX250ei5jCmluZGV4IDliODNjNTMuLjgxMDBlYzAgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL29jYi9vY2JfbnR6LmMKKysrIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9udHouYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKgpAQCAtMzgsNSArMzgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfbnR6LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX3NoaWZ0X3hvci5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IuYwppbmRleCBiMDNkZTRiLi5kZWE0M2VlIDEwMDY0NAotLS0gYS9zcmMvZW5jYXV0aC9vY2Ivb2NiX3NoaWZ0X3hvci5jCisrKyBiL3NyYy9lbmNhdXRoL29jYi9vY2Jfc2hpZnRfeG9yLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiogCkBAIC0zNSw1ICszNSw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL29jYi9vY2JfdGVzdC5jIGIvc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0LmMKaW5kZXggN2E3ZmM3Ny4uNGQ3ZWQ3OCAxMDA2NDQKLS0tIGEvc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0LmMKKysrIGIvc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiogCkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1lbWNtcChvdXR0YWcsIHRlc3RzW3hdLnRhZywgbGVuKSB8fCBtZW1jbXAob3V0Y3QsIHRlc3RzW3hdLmN0LCB0ZXN0c1t4XS5wdGxlbikpIHsKKyAgICAgICAgaWYgKFhNRU1DTVAob3V0dGFnLCB0ZXN0c1t4XS50YWcsIGxlbikgfHwgWE1FTUNNUChvdXRjdCwgdGVzdHNbeF0uY3QsIHRlc3RzW3hdLnB0bGVuKSkgewogI2lmIDAKICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB5OwogICAgICAgICAgICBwcmludGYoIlxuXG5GYWlsdXJlOiBcbkNUOlxuIik7CkBAIC0yMDUsNyArMjA1LDcgQEAKICAgICAgICAgICAgICBvdXRjdCwgdGVzdHNbeF0udGFnLCBsZW4sICZyZXMpKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICB9Ci0gICAgICAgIGlmICgocmVzICE9IDEpIHx8IG1lbWNtcCh0ZXN0c1t4XS5wdCwgb3V0Y3QsIHRlc3RzW3hdLnB0bGVuKSkgeworICAgICAgICBpZiAoKHJlcyAhPSAxKSB8fCBYTUVNQ01QKHRlc3RzW3hdLnB0LCBvdXRjdCwgdGVzdHNbeF0ucHRsZW4pKSB7CiAjaWYgMAogICAgICAgICAgICB1bnNpZ25lZCBsb25nIHk7CiAgICAgICAgICAgIHByaW50ZigiXG5cbkZhaWx1cmUtZGVjcnlwdDogXG5QVDpcbiIpOwpAQCAtMjMzLDUgKzIzMyw1IEBACiAqLwogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX3Rlc3QuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9lbmNhdXRoL29jYi9zX29jYl9kb25lLmMgYi9zcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5jCmluZGV4IDczOTliNTQuLjc2ODhhNDIgMTAwNjQ0Ci0tLSBhL3NyYy9lbmNhdXRoL29jYi9zX29jYl9kb25lLmMKKysrIGIvc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAKIC8qKiAKQEAgLTg0LDcgKzg0LDkgQEAKICAgIH0KIAogICAgLyogWVttXSA9IEUoWFttXSkpICovCi0gICBjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQoWCwgWSwgJm9jYi0+a2V5KTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3Jbb2NiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KFgsIFksICZvY2ItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGVycm9yOworICAgfQogCiAgICBpZiAobW9kZSA9PSAxKSB7CiAgICAgICAvKiBkZWNyeXB0IG1vZGUsIHNvIGxldCdzIHhvciBpdCBmaXJzdCAqLwpAQCAtMTEzLDcgKzExNSw5IEBACiAgICB9CiAgICAKICAgIC8qIGVuY3J5cHQgY2hlY2tzdW0sIGVyLi4uIHRhZyEhICovCi0gICBjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQob2NiLT5jaGVja3N1bSwgWCwgJm9jYi0+a2V5KTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3Jbb2NiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KG9jYi0+Y2hlY2tzdW0sIFgsICZvY2ItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGVycm9yOworICAgfQogICAgY2lwaGVyX2Rlc2NyaXB0b3Jbb2NiLT5jaXBoZXJdLmRvbmUoJm9jYi0+a2V5KTsKIAogICAgLyogbm93IHN0b3JlIGl0ICovCkBAIC0xMjgsMTcgKzEzMiwxNyBAQAogICAgemVyb21lbShaLCBNQVhCTE9DS1NJWkUpOwogICAgemVyb21lbShvY2IsIHNpemVvZigqb2NiKSk7CiAjZW5kaWYKLSAgIAorZXJyb3I6ICAgCiAgICBYRlJFRShYKTsKICAgIFhGUkVFKFkpOwogICAgWEZSRUUoWik7CiAKLSAgIHJldHVybiBDUllQVF9PSzsKKyAgIHJldHVybiBlcnI7CiB9CiAKICNlbmRpZgogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9zX29jYl9kb25lLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL2NoYy9jaGMuYyBiL3NyYy9oYXNoZXMvY2hjL2NoYy5jCmluZGV4IDRmZjM5ZjAuLjNmODYyNzAgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvY2hjL2NoYy5jCisrKyBiL3NyYy9oYXNoZXMvY2hjL2NoYy5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogI2luY2x1ZGUgInRvbWNyeXB0LmgiCkBAIC0zMCw3ICszMCw4IEBACiAgICAmY2hjX2luaXQsCiAgICAmY2hjX3Byb2Nlc3MsCiAgICAmY2hjX2RvbmUsCi0gICAmY2hjX3Rlc3QKKyAgICZjaGNfdGVzdCwKKyAgIE5VTEwKIH07CiAKIC8qKgpAQCAtMTQxLDcgKzE0Miw3IEBACiAgICAgICBYRlJFRShrZXkpOwogICAgICAgcmV0dXJuIGVycjsKICAgIH0KLSAgIG1lbWNweShUWzFdLCBidWYsIGNpcGhlcl9ibG9ja3NpemUpOworICAgWE1FTUNQWShUWzFdLCBidWYsIGNpcGhlcl9ibG9ja3NpemUpOwogICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0uZWNiX2VuY3J5cHQoYnVmLCBUWzBdLCBrZXkpOwogICAgZm9yICh4ID0gMDsgeCA8IGNpcGhlcl9ibG9ja3NpemU7IHgrKykgewogICAgICAgIG1kLT5jaGMuc3RhdGVbeF0gXj0gVFswXVt4XSBeIFRbMV1beF07CkBAIC0yNzksNyArMjgwLDcgQEAKICAgICAgICBjaGNfaW5pdCgmbWQpOwogICAgICAgIGNoY19wcm9jZXNzKCZtZCwgdGVzdHNbeF0ubXNnLCBzdHJsZW4oKGNoYXIgKil0ZXN0c1t4XS5tc2cpKTsKICAgICAgICBjaGNfZG9uZSgmbWQsIG91dCk7Ci0gICAgICAgaWYgKG1lbWNtcChvdXQsIHRlc3RzW3hdLm1kLCB0ZXN0c1t4XS5sZW4pKSB7CisgICAgICAgaWYgKFhNRU1DTVAob3V0LCB0ZXN0c1t4XS5tZCwgdGVzdHNbeF0ubGVuKSkgewogICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICAgfQogICAgfQpAQCAtMjkzLDUgKzI5NCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9jaGMvY2hjLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGUuYyBiL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5jCmluZGV4IDUwZjcyNmEuLmE5MjAyNWMgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5jCisrKyBiL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC01Myw1ICs1Myw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUuYyBiL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5jCmluZGV4IDIwMWVmODMuLmJlMmNiZjkgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5jCisrKyBiL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC00Miw2ICs0Miw3IEBACiAgICAgfQogCiAgICAgaWYgKCpvdXRsZW4gPCBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemUpIHsKKyAgICAgICAqb3V0bGVuID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplOwogICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICAgfQogICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmluaXQoJm1kKSkgIT0gQ1JZUFRfT0spIHsKQEAgLTY2LDUgKzY3LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5LmMgYi9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeS5jCmluZGV4IDdlODQ5YjQuLmRlZjlmYTcgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5LmMKKysrIGIvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMzgsNiArMzgsNyBAQAogICAgIH0KIAogICAgIGlmICgqb3V0bGVuIDwgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplKSB7CisgICAgICAgKm91dGxlbiA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKICAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgIH0KIApAQCAtNjQsNSArNjUsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkuYyBiL3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5X211bHRpLmMKaW5kZXggOGZjYjhlOS4uOTFmMmQwYyAxMDA2NDQKLS0tIGEvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkuYworKysgYi9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtNDMsNiArNDMsNyBAQAogICAgIH0KIAogICAgIGlmICgqb3V0bGVuIDwgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplKSB7CisgICAgICAgKm91dGxlbiA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKICAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgIH0KIApAQCAtODIsNSArODMsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hhc2hlcy9tZDIuYyBiL3NyYy9oYXNoZXMvbWQyLmMKaW5kZXggZGI2MGZiZC4uYjkxNzIxMyAxMDA2NDQKLS0tIGEvc3JjL2hhc2hlcy9tZDIuYworKysgYi9zcmMvaGFzaGVzL21kMi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zMSw3ICszMSw4IEBACiAgICAgJm1kMl9pbml0LAogICAgICZtZDJfcHJvY2VzcywKICAgICAmbWQyX2RvbmUsCi0gICAgJm1kMl90ZXN0CisgICAgJm1kMl90ZXN0LAorICAgIE5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFBJX1NVQlNUWzI1Nl0gPSB7CkBAIC0yMzQsNyArMjM1LDcgQEAKICAgICAgICBtZDJfaW5pdCgmbWQpOwogICAgICAgIG1kMl9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIqKXRlc3RzW2ldLm1zZywgKHVuc2lnbmVkIGxvbmcpc3RybGVuKHRlc3RzW2ldLm1zZykpOwogICAgICAgIG1kMl9kb25lKCZtZCwgYnVmKTsKLSAgICAgICBpZiAobWVtY21wKGJ1ZiwgdGVzdHNbaV0ubWQsIDE2KSAhPSAwKSB7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmLCB0ZXN0c1tpXS5tZCwgMTYpICE9IDApIHsKICAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgIH0KICAgIH0KQEAgLTI0Niw1ICsyNDcsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvbWQyLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMyAwMjo0MjowNyAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL21kNC5jIGIvc3JjL2hhc2hlcy9tZDQuYwppbmRleCAxN2VmMzVlLi40MjY0NWVmIDEwMDY0NAotLS0gYS9zcmMvaGFzaGVzL21kNC5jCisrKyBiL3NyYy9oYXNoZXMvbWQ0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTMxLDcgKzMxLDggQEAKICAgICAmbWQ0X2luaXQsCiAgICAgJm1kNF9wcm9jZXNzLAogICAgICZtZDRfZG9uZSwKLSAgICAmbWQ0X3Rlc3QKKyAgICAmbWQ0X3Rlc3QsCisgICAgTlVMTAogfTsKIAogI2RlZmluZSBTMTEgMwpAQCAtMjg4LDcgKzI4OSw3IEBACiAgICAgICAgIG1kNF9pbml0KCZtZCk7CiAgICAgICAgIG1kNF9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIgKiljYXNlc1tpXS5pbnB1dCwgKHVuc2lnbmVkIGxvbmcpc3RybGVuKGNhc2VzW2ldLmlucHV0KSk7CiAgICAgICAgIG1kNF9kb25lKCZtZCwgZGlnZXN0KTsKLSAgICAgICAgaWYgKG1lbWNtcChkaWdlc3QsIGNhc2VzW2ldLmRpZ2VzdCwgMTYpICE9IDApIHsKKyAgICAgICAgaWYgKFhNRU1DTVAoZGlnZXN0LCBjYXNlc1tpXS5kaWdlc3QsIDE2KSAhPSAwKSB7CiAgICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICAgIH0KIApAQCAtMzAyLDUgKzMwMyw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAyOjQyOjA3ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvbWQ1LmMgYi9zcmMvaGFzaGVzL21kNS5jCmluZGV4IGZiOGZmMzEuLmY2Mjc0ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvbWQ1LmMKKysrIGIvc3JjL2hhc2hlcy9tZDUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMzIsNyArMzIsOCBAQAogICAgICZtZDVfaW5pdCwKICAgICAmbWQ1X3Byb2Nlc3MsCiAgICAgJm1kNV9kb25lLAotICAgICZtZDVfdGVzdAorICAgICZtZDVfdGVzdCwKKyAgICBOVUxMCiB9OwogCiAjZGVmaW5lIEYoeCx5LHopICAoeiBeICh4ICYgKHkgXiB6KSkpCkBAIC0zNTAsNyArMzUxLDcgQEAKICAgICAgIG1kNV9pbml0KCZtZCk7CiAgICAgICBtZDVfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CiAgICAgICBtZDVfZG9uZSgmbWQsIHRtcCk7Ci0gICAgICBpZiAobWVtY21wKHRtcCwgdGVzdHNbaV0uaGFzaCwgMTYpICE9IDApIHsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgMTYpICE9IDApIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAgIH0KQEAgLTM2Myw1ICszNjQsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvbWQ1LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMyAwMjo0MjowNyAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL3JtZDEyOC5jIGIvc3JjL2hhc2hlcy9ybWQxMjguYwppbmRleCAxYzY2M2U0Li5kMjk0NjI2IDEwMDY0NAotLS0gYS9zcmMvaGFzaGVzL3JtZDEyOC5jCisrKyBiL3NyYy9oYXNoZXMvcm1kMTI4LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTM3LDcgKzM3LDggQEAKICAgICAmcm1kMTI4X2luaXQsCiAgICAgJnJtZDEyOF9wcm9jZXNzLAogICAgICZybWQxMjhfZG9uZSwKLSAgICAmcm1kMTI4X3Rlc3QKKyAgICAmcm1kMTI4X3Rlc3QsCisgICAgTlVMTAogfTsKIAogLyogdGhlIGZvdXIgYmFzaWMgZnVuY3Rpb25zIEYoKSwgRygpIGFuZCBIKCkgKi8KQEAgLTM5MCw3ICszOTEsNyBAQAogICAgICAgIHJtZDEyOF9pbml0KCZtZCk7CiAgICAgICAgcm1kMTI4X3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciAqKXRlc3RzW3hdLm1zZywgc3RybGVuKHRlc3RzW3hdLm1zZykpOwogICAgICAgIHJtZDEyOF9kb25lKCZtZCwgYnVmKTsKLSAgICAgICBpZiAobWVtY21wKGJ1ZiwgdGVzdHNbeF0ubWQsIDE2KSAhPSAwKSB7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmLCB0ZXN0c1t4XS5tZCwgMTYpICE9IDApIHsKICAgICAgICAjaWYgMAogICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRlc3QgJWRcbiIsIHgpOwogICAgICAgICNlbmRpZgpAQCAtNDA1LDUgKzQwNiw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9ybWQxMjguYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS42ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAyOjQyOjA3ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvcm1kMTYwLmMgYi9zcmMvaGFzaGVzL3JtZDE2MC5jCmluZGV4IDYxMjRmNTkuLmExYzA5MGEgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvcm1kMTYwLmMKKysrIGIvc3JjL2hhc2hlcy9ybWQxNjAuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMzcsNyArMzcsOCBAQAogICAgICZybWQxNjBfaW5pdCwKICAgICAmcm1kMTYwX3Byb2Nlc3MsCiAgICAgJnJtZDE2MF9kb25lLAotICAgICZybWQxNjBfdGVzdAorICAgICZybWQxNjBfdGVzdCwKKyAgICBOVUxMCiB9OwogCiAvKiB0aGUgZml2ZSBiYXNpYyBmdW5jdGlvbnMgRigpLCBHKCkgYW5kIEgoKSAqLwpAQCAtNDQ5LDcgKzQ1MCw3IEBACiAgICAgICAgcm1kMTYwX2luaXQoJm1kKTsKICAgICAgICBybWQxNjBfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbeF0ubXNnLCBzdHJsZW4odGVzdHNbeF0ubXNnKSk7CiAgICAgICAgcm1kMTYwX2RvbmUoJm1kLCBidWYpOwotICAgICAgIGlmIChtZW1jbXAoYnVmLCB0ZXN0c1t4XS5tZCwgMjApICE9IDApIHsKKyAgICAgICBpZiAoWE1FTUNNUChidWYsIHRlc3RzW3hdLm1kLCAyMCkgIT0gMCkgewogI2lmIDAKICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0ZXN0ICVkXG4iLCB4KTsKICNlbmRpZgpAQCAtNDY0LDUgKzQ2NSw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9ybWQxNjAuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAyOjQyOjA3ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvcm1kMjU2LmMgYi9zcmMvaGFzaGVzL3JtZDI1Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDBlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaGFzaGVzL3JtZDI1Ni5jCkBAIC0wLDAgKzEsNDMxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQHBhcmFtIHJtZDI1Ni5jCisgICBSTUQyNTYgSGFzaCBmdW5jdGlvbgorKi8KKworI2lmZGVmIFJJUEVNRDI1NgorCitjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBybWQyNTZfZGVzYyA9Cit7CisgICAgInJtZDI1NiIsCisgICAgOCwKKyAgICAxNiwKKyAgICA2NCwKKworICAgIC8qIE9JRCAqLworICAgeyAxLCAzLCAzNiwgMywgMiwgMyB9LAorICAgNiwKKworICAgICZybWQyNTZfaW5pdCwKKyAgICAmcm1kMjU2X3Byb2Nlc3MsCisgICAgJnJtZDI1Nl9kb25lLAorICAgICZybWQyNTZfdGVzdCwKKyAgICBOVUxMCit9OworCisvKiB0aGUgZm91ciBiYXNpYyBmdW5jdGlvbnMgRigpLCBHKCkgYW5kIEgoKSAqLworI2RlZmluZSBGKHgsIHksIHopICAgICAgICAoKHgpIF4gKHkpIF4gKHopKQorI2RlZmluZSBHKHgsIHksIHopICAgICAgICAoKCh4KSAmICh5KSkgfCAofih4KSAmICh6KSkpCisjZGVmaW5lIEgoeCwgeSwgeikgICAgICAgICgoKHgpIHwgfih5KSkgXiAoeikpCisjZGVmaW5lIEkoeCwgeSwgeikgICAgICAgICgoKHgpICYgKHopKSB8ICgoeSkgJiB+KHopKSkKKworLyogdGhlIGVpZ2h0IGJhc2ljIG9wZXJhdGlvbnMgRkYoKSB0aHJvdWdoIElJSSgpICovCisjZGVmaW5lIEZGKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRigoYiksIChjKSwgKGQpKSArICh4KTtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBHRyhhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEcoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVhODI3OTk5VUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgSEgoYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBIKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg2ZWQ5ZWJhMVVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjZGVmaW5lIElJKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSSgoYiksIChjKSwgKGQpKSArICh4KSArIDB4OGYxYmJjZGNVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBGRkYoYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBGKChiKSwgKGMpLCAoZCkpICsgKHgpO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjZGVmaW5lIEdHRyhhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEcoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDZkNzAzZWYzVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgSEhIKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSCgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NWM0ZGQxMjRVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBJSUkoYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBJKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg1MGEyOGJlNlVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9ybWQyNTZfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbHNlCitzdGF0aWMgaW50ICBybWQyNTZfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbmRpZgoreworICAgdWxvbmczMiBhYSxiYixjYyxkZCxhYWEsYmJiLGNjYyxkZGQsdG1wLFhbMTZdOworICAgaW50IGk7CisKKyAgIC8qIGxvYWQgd29yZHMgWCAqLworICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspeworICAgICAgTE9BRDMyTChYW2ldLCBidWYgKyAoNCAqIGkpKTsKKyAgIH0KKworICAgLyogbG9hZCBzdGF0ZSAqLworICAgYWEgPSBtZC0+cm1kMjU2LnN0YXRlWzBdOworICAgYmIgPSBtZC0+cm1kMjU2LnN0YXRlWzFdOworICAgY2MgPSBtZC0+cm1kMjU2LnN0YXRlWzJdOworICAgZGQgPSBtZC0+cm1kMjU2LnN0YXRlWzNdOworICAgYWFhID0gbWQtPnJtZDI1Ni5zdGF0ZVs0XTsKKyAgIGJiYiA9IG1kLT5ybWQyNTYuc3RhdGVbNV07CisgICBjY2MgPSBtZC0+cm1kMjU2LnN0YXRlWzZdOworICAgZGRkID0gbWQtPnJtZDI1Ni5zdGF0ZVs3XTsKKworICAgLyogcm91bmQgMSAqLworICAgRkYoYWEsIGJiLCBjYywgZGQsIFhbIDBdLCAxMSk7CisgICBGRihkZCwgYWEsIGJiLCBjYywgWFsgMV0sIDE0KTsKKyAgIEZGKGNjLCBkZCwgYWEsIGJiLCBYWyAyXSwgMTUpOworICAgRkYoYmIsIGNjLCBkZCwgYWEsIFhbIDNdLCAxMik7CisgICBGRihhYSwgYmIsIGNjLCBkZCwgWFsgNF0sICA1KTsKKyAgIEZGKGRkLCBhYSwgYmIsIGNjLCBYWyA1XSwgIDgpOworICAgRkYoY2MsIGRkLCBhYSwgYmIsIFhbIDZdLCAgNyk7CisgICBGRihiYiwgY2MsIGRkLCBhYSwgWFsgN10sICA5KTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBYWyA4XSwgMTEpOworICAgRkYoZGQsIGFhLCBiYiwgY2MsIFhbIDldLCAxMyk7CisgICBGRihjYywgZGQsIGFhLCBiYiwgWFsxMF0sIDE0KTsKKyAgIEZGKGJiLCBjYywgZGQsIGFhLCBYWzExXSwgMTUpOworICAgRkYoYWEsIGJiLCBjYywgZGQsIFhbMTJdLCAgNik7CisgICBGRihkZCwgYWEsIGJiLCBjYywgWFsxM10sICA3KTsKKyAgIEZGKGNjLCBkZCwgYWEsIGJiLCBYWzE0XSwgIDkpOworICAgRkYoYmIsIGNjLCBkZCwgYWEsIFhbMTVdLCAgOCk7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDEgKi8KKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDVdLCAgOCk7CisgICBJSUkoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzE0XSwgIDkpOworICAgSUlJKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgN10sICA5KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDBdLCAxMSk7CisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA5XSwgMTMpOworICAgSUlJKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgMl0sIDE1KTsKKyAgIElJSShjY2MsIGRkZCwgYWFhLCBiYmIsIFhbMTFdLCAxNSk7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyA0XSwgIDUpOworICAgSUlJKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxM10sICA3KTsKKyAgIElJSShkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDZdLCAgNyk7CisgICBJSUkoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWzE1XSwgIDgpOworICAgSUlJKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgOF0sIDExKTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDFdLCAxNCk7CisgICBJSUkoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzEwXSwgMTQpOworICAgSUlJKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgM10sIDEyKTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBhYWEsIFhbMTJdLCAgNik7CisKKyAgIHRtcCA9IGFhOyBhYSA9IGFhYTsgYWFhID0gdG1wOworCisgICAvKiByb3VuZCAyICovCisgICBHRyhhYSwgYmIsIGNjLCBkZCwgWFsgN10sICA3KTsKKyAgIEdHKGRkLCBhYSwgYmIsIGNjLCBYWyA0XSwgIDYpOworICAgR0coY2MsIGRkLCBhYSwgYmIsIFhbMTNdLCAgOCk7CisgICBHRyhiYiwgY2MsIGRkLCBhYSwgWFsgMV0sIDEzKTsKKyAgIEdHKGFhLCBiYiwgY2MsIGRkLCBYWzEwXSwgMTEpOworICAgR0coZGQsIGFhLCBiYiwgY2MsIFhbIDZdLCAgOSk7CisgICBHRyhjYywgZGQsIGFhLCBiYiwgWFsxNV0sICA3KTsKKyAgIEdHKGJiLCBjYywgZGQsIGFhLCBYWyAzXSwgMTUpOworICAgR0coYWEsIGJiLCBjYywgZGQsIFhbMTJdLCAgNyk7CisgICBHRyhkZCwgYWEsIGJiLCBjYywgWFsgMF0sIDEyKTsKKyAgIEdHKGNjLCBkZCwgYWEsIGJiLCBYWyA5XSwgMTUpOworICAgR0coYmIsIGNjLCBkZCwgYWEsIFhbIDVdLCAgOSk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgWFsgMl0sIDExKTsKKyAgIEdHKGRkLCBhYSwgYmIsIGNjLCBYWzE0XSwgIDcpOworICAgR0coY2MsIGRkLCBhYSwgYmIsIFhbMTFdLCAxMyk7CisgICBHRyhiYiwgY2MsIGRkLCBhYSwgWFsgOF0sIDEyKTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMiAqLworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNl0sICA5KTsKKyAgIEhISChkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTFdLCAxMyk7CisgICBISEgoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAzXSwgMTUpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgN10sICA3KTsKKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDBdLCAxMik7CisgICBISEgoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzEzXSwgIDgpOworICAgSEhIKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgNV0sICA5KTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBhYWEsIFhbMTBdLCAxMSk7CisgICBISEgoYWFhLCBiYmIsIGNjYywgZGRkLCBYWzE0XSwgIDcpOworICAgSEhIKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxNV0sICA3KTsKKyAgIEhISChjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDhdLCAxMik7CisgICBISEgoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzEyXSwgIDcpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNF0sICA2KTsKKyAgIEhISChkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDldLCAxNSk7CisgICBISEgoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAxXSwgMTMpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgMl0sIDExKTsKKworICAgdG1wID0gYmI7IGJiID0gYmJiOyBiYmIgPSB0bXA7CisKKyAgIC8qIHJvdW5kIDMgKi8KKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBYWyAzXSwgMTEpOworICAgSEgoZGQsIGFhLCBiYiwgY2MsIFhbMTBdLCAxMyk7CisgICBISChjYywgZGQsIGFhLCBiYiwgWFsxNF0sICA2KTsKKyAgIEhIKGJiLCBjYywgZGQsIGFhLCBYWyA0XSwgIDcpOworICAgSEgoYWEsIGJiLCBjYywgZGQsIFhbIDldLCAxNCk7CisgICBISChkZCwgYWEsIGJiLCBjYywgWFsxNV0sICA5KTsKKyAgIEhIKGNjLCBkZCwgYWEsIGJiLCBYWyA4XSwgMTMpOworICAgSEgoYmIsIGNjLCBkZCwgYWEsIFhbIDFdLCAxNSk7CisgICBISChhYSwgYmIsIGNjLCBkZCwgWFsgMl0sIDE0KTsKKyAgIEhIKGRkLCBhYSwgYmIsIGNjLCBYWyA3XSwgIDgpOworICAgSEgoY2MsIGRkLCBhYSwgYmIsIFhbIDBdLCAxMyk7CisgICBISChiYiwgY2MsIGRkLCBhYSwgWFsgNl0sICA2KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBYWzEzXSwgIDUpOworICAgSEgoZGQsIGFhLCBiYiwgY2MsIFhbMTFdLCAxMik7CisgICBISChjYywgZGQsIGFhLCBiYiwgWFsgNV0sICA3KTsKKyAgIEhIKGJiLCBjYywgZGQsIGFhLCBYWzEyXSwgIDUpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCAzICovCisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBYWzE1XSwgIDkpOworICAgR0dHKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgNV0sICA3KTsKKyAgIEdHRyhjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDFdLCAxNSk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyAzXSwgMTEpOworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgN10sICA4KTsKKyAgIEdHRyhkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTRdLCAgNik7CisgICBHR0coY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyA2XSwgIDYpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgOV0sIDE0KTsKKyAgIEdHRyhhYWEsIGJiYiwgY2NjLCBkZGQsIFhbMTFdLCAxMik7CisgICBHR0coZGRkLCBhYWEsIGJiYiwgY2NjLCBYWyA4XSwgMTMpOworICAgR0dHKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsxMl0sICA1KTsKKyAgIEdHRyhiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDJdLCAxNCk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBYWzEwXSwgMTMpOworICAgR0dHKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgMF0sIDEzKTsKKyAgIEdHRyhjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDRdLCAgNyk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzEzXSwgIDUpOworCisgICB0bXAgPSBjYzsgY2MgPSBjY2M7IGNjYyA9IHRtcDsKKworICAgLyogcm91bmQgNCAqLworICAgSUkoYWEsIGJiLCBjYywgZGQsIFhbIDFdLCAxMSk7CisgICBJSShkZCwgYWEsIGJiLCBjYywgWFsgOV0sIDEyKTsKKyAgIElJKGNjLCBkZCwgYWEsIGJiLCBYWzExXSwgMTQpOworICAgSUkoYmIsIGNjLCBkZCwgYWEsIFhbMTBdLCAxNSk7CisgICBJSShhYSwgYmIsIGNjLCBkZCwgWFsgMF0sIDE0KTsKKyAgIElJKGRkLCBhYSwgYmIsIGNjLCBYWyA4XSwgMTUpOworICAgSUkoY2MsIGRkLCBhYSwgYmIsIFhbMTJdLCAgOSk7CisgICBJSShiYiwgY2MsIGRkLCBhYSwgWFsgNF0sICA4KTsKKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBYWzEzXSwgIDkpOworICAgSUkoZGQsIGFhLCBiYiwgY2MsIFhbIDNdLCAxNCk7CisgICBJSShjYywgZGQsIGFhLCBiYiwgWFsgN10sICA1KTsKKyAgIElJKGJiLCBjYywgZGQsIGFhLCBYWzE1XSwgIDYpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIFhbMTRdLCAgOCk7CisgICBJSShkZCwgYWEsIGJiLCBjYywgWFsgNV0sICA2KTsKKyAgIElJKGNjLCBkZCwgYWEsIGJiLCBYWyA2XSwgIDUpOworICAgSUkoYmIsIGNjLCBkZCwgYWEsIFhbIDJdLCAxMik7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDQgKi8KKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDhdLCAxNSk7CisgICBGRkYoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWyA2XSwgIDUpOworICAgRkZGKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgNF0sICA4KTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDFdLCAxMSk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyAzXSwgMTQpOworICAgRkZGKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxMV0sIDE0KTsKKyAgIEZGRihjY2MsIGRkZCwgYWFhLCBiYmIsIFhbMTVdLCAgNik7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyAwXSwgMTQpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNV0sICA2KTsKKyAgIEZGRihkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTJdLCAgOSk7CisgICBGRkYoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAyXSwgMTIpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsxM10sICA5KTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDldLCAxMik7CisgICBGRkYoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWyA3XSwgIDUpOworICAgRkZGKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsxMF0sIDE1KTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBhYWEsIFhbMTRdLCAgOCk7CisKKyAgIHRtcCA9IGRkOyBkZCA9IGRkZDsgZGRkID0gdG1wOworCisgICAvKiBjb21iaW5lIHJlc3VsdHMgKi8KKyAgIG1kLT5ybWQyNTYuc3RhdGVbMF0gKz0gYWE7CisgICBtZC0+cm1kMjU2LnN0YXRlWzFdICs9IGJiOworICAgbWQtPnJtZDI1Ni5zdGF0ZVsyXSArPSBjYzsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbM10gKz0gZGQ7CisgICBtZC0+cm1kMjU2LnN0YXRlWzRdICs9IGFhYTsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbNV0gKz0gYmJiOworICAgbWQtPnJtZDI1Ni5zdGF0ZVs2XSArPSBjY2M7CisgICBtZC0+cm1kMjU2LnN0YXRlWzddICs9IGRkZDsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IHJtZDI1Nl9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworICAgaW50IGVycjsKKyAgIGVyciA9IF9ybWQyNTZfY29tcHJlc3MobWQsIGJ1Zik7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDI1ICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgIEluaXRpYWxpemUgdGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBtZCAgIFRoZSBoYXNoIHN0YXRlIHlvdSB3aXNoIHRvIGluaXRpYWxpemUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBybWQyNTZfaW5pdChoYXNoX3N0YXRlICogbWQpCit7CisgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworICAgbWQtPnJtZDI1Ni5zdGF0ZVswXSA9IDB4Njc0NTIzMDFVTDsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbMV0gPSAweGVmY2RhYjg5VUw7CisgICBtZC0+cm1kMjU2LnN0YXRlWzJdID0gMHg5OGJhZGNmZVVMOworICAgbWQtPnJtZDI1Ni5zdGF0ZVszXSA9IDB4MTAzMjU0NzZVTDsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbNF0gPSAweDc2NTQzMjEwVUw7CisgICBtZC0+cm1kMjU2LnN0YXRlWzVdID0gMHhmZWRjYmE5OFVMOworICAgbWQtPnJtZDI1Ni5zdGF0ZVs2XSA9IDB4ODlhYmNkZWZVTDsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbN10gPSAweDAxMjM0NTY3VUw7CisgICBtZC0+cm1kMjU2LmN1cmxlbiAgID0gMDsKKyAgIG1kLT5ybWQyNTYubGVuZ3RoICAgPSAwOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworSEFTSF9QUk9DRVNTKHJtZDI1Nl9wcm9jZXNzLCBybWQyNTZfY29tcHJlc3MsIHJtZDI1NiwgNjQpCisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoMTYgYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgcm1kMjU2X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgaW50IGk7CisKKyAgICBMVENfQVJHQ0hLKG1kICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKKworICAgIGlmIChtZC0+cm1kMjU2LmN1cmxlbiA+PSBzaXplb2YobWQtPnJtZDI1Ni5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworCisgICAgLyogaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLworICAgIG1kLT5ybWQyNTYubGVuZ3RoICs9IG1kLT5ybWQyNTYuY3VybGVuICogODsKKworICAgIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworICAgIG1kLT5ybWQyNTYuYnVmW21kLT5ybWQyNTYuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKKworICAgIC8qIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IGFib3ZlIDU2IGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCisgICAgICovCisgICAgaWYgKG1kLT5ybWQyNTYuY3VybGVuID4gNTYpIHsKKyAgICAgICAgd2hpbGUgKG1kLT5ybWQyNTYuY3VybGVuIDwgNjQpIHsKKyAgICAgICAgICAgIG1kLT5ybWQyNTYuYnVmW21kLT5ybWQyNTYuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICAgICAgfQorICAgICAgICBybWQyNTZfY29tcHJlc3MobWQsIG1kLT5ybWQyNTYuYnVmKTsKKyAgICAgICAgbWQtPnJtZDI1Ni5jdXJsZW4gPSAwOworICAgIH0KKworICAgIC8qIHBhZCB1cHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLworICAgIHdoaWxlIChtZC0+cm1kMjU2LmN1cmxlbiA8IDU2KSB7CisgICAgICAgIG1kLT5ybWQyNTYuYnVmW21kLT5ybWQyNTYuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0TChtZC0+cm1kMjU2Lmxlbmd0aCwgbWQtPnJtZDI1Ni5idWYrNTYpOworICAgIHJtZDI1Nl9jb21wcmVzcyhtZCwgbWQtPnJtZDI1Ni5idWYpOworCisgICAgLyogY29weSBvdXRwdXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIFNUT1JFMzJMKG1kLT5ybWQyNTYuc3RhdGVbaV0sIG91dCsoNCppKSk7CisgICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFNlbGYtdGVzdCB0aGUgaGFzaAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZAorKi8KK2ludCBybWQyNTZfdGVzdCh2b2lkKQoreworI2lmbmRlZiBMVENfVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY2hhciAqbXNnOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1kWzMyXTsKKyAgIH0gdGVzdHNbXSA9IHsKKyAgIHsgIiIsCisgICAgIHsgMHgwMiwgMHhiYSwgMHg0YywgMHg0ZSwgMHg1ZiwgMHg4ZSwgMHhjZCwgMHgxOCwKKyAgICAgICAweDc3LCAweGZjLCAweDUyLCAweGQ2LCAweDRkLCAweDMwLCAweGUzLCAweDdhLAorICAgICAgIDB4MmQsIDB4OTcsIDB4NzQsIDB4ZmIsIDB4MWUsIDB4NWQsIDB4MDIsIDB4NjMsCisgICAgICAgMHg4MCwgMHhhZSwgMHgwMSwgMHg2OCwgMHhlMywgMHhjNSwgMHg1MiwgMHgyZCB9CisgICB9LAorICAgeyAiYSIsCisgICAgIHsgMHhmOSwgMHgzMywgMHgzZSwgMHg0NSwgMHhkOCwgMHg1NywgMHhmNSwgMHhkOSwKKyAgICAgICAweDBhLCAweDkxLCAweGJhLCAweGI3LCAweDBhLCAweDFlLCAweGJhLCAweDBjLAorICAgICAgIDB4ZmIsIDB4MWIsIDB4ZTQsIDB4YjAsIDB4NzgsIDB4M2MsIDB4OWEsIDB4Y2YsCisgICAgICAgMHhjZCwgMHg4OCwgMHgzYSwgMHg5MSwgMHgzNCwgMHg2OSwgMHgyOSwgMHgyNSB9CisgICB9LAorICAgeyAiYWJjIiwKKyAgICAgeyAweGFmLCAweGJkLCAweDZlLCAweDIyLCAweDhiLCAweDlkLCAweDhjLCAweGJiLAorICAgICAgIDB4Y2UsIDB4ZjUsIDB4Y2EsIDB4MmQsIDB4MDMsIDB4ZTYsIDB4ZGIsIDB4YTEsCisgICAgICAgMHgwYSwgMHhjMCwgMHhiYywgMHg3ZCwgMHhjYiwgMHhlNCwgMHg2OCwgMHgwZSwKKyAgICAgICAweDFlLCAweDQyLCAweGQyLCAweGU5LCAweDc1LCAweDQ1LCAweDliLCAweDY1IH0KKyAgIH0sCisgICB7ICJtZXNzYWdlIGRpZ2VzdCIsCisgICAgIHsgMHg4NywgMHhlOSwgMHg3MSwgMHg3NSwgMHg5YSwgMHgxYywgMHhlNCwgMHg3YSwKKyAgICAgICAweDUxLCAweDRkLCAweDVjLCAweDkxLCAweDRjLCAweDM5LCAweDJjLCAweDkwLAorICAgICAgIDB4MTgsIDB4YzcsIDB4YzQsIDB4NmIsIDB4YzEsIDB4NDQsIDB4NjUsIDB4NTUsCisgICAgICAgMHg0YSwgMHhmYywgMHhkZiwgMHg1NCwgMHhhNSwgMHgwNywgMHgwYywgMHgwZSB9CisgICB9LAorICAgeyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAorICAgICB7IDB4NjQsIDB4OWQsIDB4MzAsIDB4MzQsIDB4NzUsIDB4MWUsIDB4YTIsIDB4MTYsCisgICAgICAgMHg3NywgMHg2YiwgMHhmOSwgMHhhMSwgMHg4YSwgMHhjYywgMHg4MSwgMHhiYywKKyAgICAgICAweDc4LCAweDk2LCAweDExLCAweDhhLCAweDUxLCAweDk3LCAweDk2LCAweDg3LAorICAgICAgIDB4ODIsIDB4ZGQsIDB4MWYsIDB4ZDksIDB4N2QsIDB4OGQsIDB4NTEsIDB4MzMgfQorICAgfSwKKyAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwKKyAgICAgeyAweDU3LCAweDQwLCAweGE0LCAweDA4LCAweGFjLCAweDE2LCAweGI3LCAweDIwLAorICAgICAgIDB4YjgsIDB4NDQsIDB4MjQsIDB4YWUsIDB4OTMsIDB4MWMsIDB4YmIsIDB4MWYsCisgICAgICAgMHhlMywgMHg2MywgMHhkMSwgMHhkMCwgMHhiZiwgMHg0MCwgMHgxNywgMHhmMSwKKyAgICAgICAweGE4LCAweDlmLCAweDdlLCAweGE2LCAweGRlLCAweDc3LCAweGEwLCAweGI4IH0KKyAgIH0KKyAgIH07CisgICBpbnQgeDsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKKyAgIGhhc2hfc3RhdGUgbWQ7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgICBybWQyNTZfaW5pdCgmbWQpOworICAgICAgIHJtZDI1Nl9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIgKil0ZXN0c1t4XS5tc2csIHN0cmxlbih0ZXN0c1t4XS5tc2cpKTsKKyAgICAgICBybWQyNTZfZG9uZSgmbWQsIGJ1Zik7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmLCB0ZXN0c1t4XS5tZCwgMzIpICE9IDApIHsKKyAgICAgICAjaWYgMAorICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRlc3QgJWRcbiIsIHgpOworICAgICAgICNlbmRpZgorICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL3JtZDMyMC5jIGIvc3JjL2hhc2hlcy9ybWQzMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTFmY2E0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hhc2hlcy9ybWQzMjAuYwpAQCAtMCwwICsxLDQ5NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIHJtZDMyMC5jCisgICBSTUQzMjAgaGFzaCBmdW5jdGlvbgorKi8KKworI2lmZGVmIFJJUEVNRDMyMAorCitjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBybWQzMjBfZGVzYyA9Cit7CisgICAgInJtZDMyMCIsCisgICAgOSwKKyAgICAyMCwKKyAgICA2NCwKKworICAgIC8qIE9JRCAqLworICAgeyAwIH0sCisgICAwLAorCisgICAgJnJtZDMyMF9pbml0LAorICAgICZybWQzMjBfcHJvY2VzcywKKyAgICAmcm1kMzIwX2RvbmUsCisgICAgJnJtZDMyMF90ZXN0LAorICAgIE5VTEwKK307CisKKy8qIHRoZSBmaXZlIGJhc2ljIGZ1bmN0aW9ucyBGKCksIEcoKSBhbmQgSCgpICovCisjZGVmaW5lIEYoeCwgeSwgeikgICAgICAgICgoeCkgXiAoeSkgXiAoeikpCisjZGVmaW5lIEcoeCwgeSwgeikgICAgICAgICgoKHgpICYgKHkpKSB8ICh+KHgpICYgKHopKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAgICAgICAgKCgoeCkgfCB+KHkpKSBeICh6KSkKKyNkZWZpbmUgSSh4LCB5LCB6KSAgICAgICAgKCgoeCkgJiAoeikpIHwgKCh5KSAmIH4oeikpKQorI2RlZmluZSBKKHgsIHksIHopICAgICAgICAoKHgpIF4gKCh5KSB8IH4oeikpKQorCisvKiB0aGUgdGVuIGJhc2ljIG9wZXJhdGlvbnMgRkYoKSB0aHJvdWdoIElJSSgpICovCisjZGVmaW5lIEZGKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRigoYiksIChjKSwgKGQpKSArICh4KTtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIEdHKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRygoYiksIChjKSwgKGQpKSArICh4KSArIDB4NWE4Mjc5OTlVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIEhIKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSCgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NmVkOWViYTFVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIElJKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSSgoYiksIChjKSwgKGQpKSArICh4KSArIDB4OGYxYmJjZGNVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIEpKKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSigoYiksIChjKSwgKGQpKSArICh4KSArIDB4YTk1M2ZkNGVVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIEZGRihhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEYoKGIpLCAoYyksIChkKSkgKyAoeCk7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBHR0coYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBHKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg3YTZkNzZlOVVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTGMoKGMpLCAxMCk7CisKKyNkZWZpbmUgSEhIKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSCgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NmQ3MDNlZjNVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIElJSShhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEkoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVjNGRkMTI0VUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBKSkooYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBKKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg1MGEyOGJlNlVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTGMoKGMpLCAxMCk7CisKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcm1kMzIwX2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZWxzZQorc3RhdGljIGludCAgcm1kMzIwX2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZW5kaWYKK3sKKyAgIHVsb25nMzIgYWEsYmIsY2MsZGQsZWUsYWFhLGJiYixjY2MsZGRkLGVlZSx0bXAsWFsxNl07CisgICBpbnQgaTsKKworICAgLyogbG9hZCB3b3JkcyBYICovCisgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKyl7CisgICAgICBMT0FEMzJMKFhbaV0sIGJ1ZiArICg0ICogaSkpOworICAgfQorCisgICAvKiBsb2FkIHN0YXRlICovCisgICBhYSA9IG1kLT5ybWQzMjAuc3RhdGVbMF07CisgICBiYiA9IG1kLT5ybWQzMjAuc3RhdGVbMV07CisgICBjYyA9IG1kLT5ybWQzMjAuc3RhdGVbMl07CisgICBkZCA9IG1kLT5ybWQzMjAuc3RhdGVbM107CisgICBlZSA9IG1kLT5ybWQzMjAuc3RhdGVbNF07CisgICBhYWEgPSBtZC0+cm1kMzIwLnN0YXRlWzVdOworICAgYmJiID0gbWQtPnJtZDMyMC5zdGF0ZVs2XTsKKyAgIGNjYyA9IG1kLT5ybWQzMjAuc3RhdGVbN107CisgICBkZGQgPSBtZC0+cm1kMzIwLnN0YXRlWzhdOworICAgZWVlID0gbWQtPnJtZDMyMC5zdGF0ZVs5XTsKKworICAgLyogcm91bmQgMSAqLworICAgRkYoYWEsIGJiLCBjYywgZGQsIGVlLCBYWyAwXSwgMTEpOworICAgRkYoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyAxXSwgMTQpOworICAgRkYoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyAyXSwgMTUpOworICAgRkYoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAzXSwgMTIpOworICAgRkYoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyA0XSwgIDUpOworICAgRkYoYWEsIGJiLCBjYywgZGQsIGVlLCBYWyA1XSwgIDgpOworICAgRkYoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA2XSwgIDcpOworICAgRkYoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA3XSwgIDkpOworICAgRkYoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA4XSwgMTEpOworICAgRkYoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyA5XSwgMTMpOworICAgRkYoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzEwXSwgMTQpOworICAgRkYoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzExXSwgMTUpOworICAgRkYoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWzEyXSwgIDYpOworICAgRkYoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWzEzXSwgIDcpOworICAgRkYoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzE0XSwgIDkpOworICAgRkYoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzE1XSwgIDgpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCAxICovCisgICBKSkooYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDVdLCAgOCk7CisgICBKSkooZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbMTRdLCAgOSk7CisgICBKSkooZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDddLCAgOSk7CisgICBKSkooY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDBdLCAxMSk7CisgICBKSkooYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDldLCAxMyk7CisgICBKSkooYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDJdLCAxNSk7CisgICBKSkooZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbMTFdLCAxNSk7CisgICBKSkooZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDRdLCAgNSk7CisgICBKSkooY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTNdLCAgNyk7CisgICBKSkooYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDZdLCAgNyk7CisgICBKSkooYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbMTVdLCAgOCk7CisgICBKSkooZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDhdLCAxMSk7CisgICBKSkooZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDFdLCAxNCk7CisgICBKSkooY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTBdLCAxNCk7CisgICBKSkooYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDNdLCAxMik7CisgICBKSkooYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbMTJdLCAgNik7CisKKyAgIHRtcCA9IGFhOyBhYSA9IGFhYTsgYWFhID0gdG1wOworCisgICAvKiByb3VuZCAyICovCisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDddLCAgNyk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDRdLCAgNik7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbMTNdLCAgOCk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDFdLCAxMyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTBdLCAxMSk7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDZdLCAgOSk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTVdLCAgNyk7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDNdLCAxNSk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTJdLCAgNyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDBdLCAxMik7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDldLCAxNSk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDVdLCAgOSk7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDJdLCAxMSk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTRdLCAgNyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTFdLCAxMyk7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDhdLCAxMik7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDIgKi8KKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNl0sICA5KTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxMV0sIDEzKTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgM10sIDE1KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgN10sICA3KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMF0sIDEyKTsKKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxM10sICA4KTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNV0sICA5KTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsxMF0sIDExKTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxNF0sICA3KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxNV0sICA3KTsKKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOF0sIDEyKTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxMl0sICA3KTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgNF0sICA2KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgOV0sIDE1KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMV0sIDEzKTsKKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgMl0sIDExKTsKKworICAgdG1wID0gYmI7IGJiID0gYmJiOyBiYmIgPSB0bXA7CisKKyAgIC8qIHJvdW5kIDMgKi8KKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgM10sIDExKTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsxMF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNF0sICA2KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgNF0sICA3KTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgOV0sIDE0KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxNV0sICA5KTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgOF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgMV0sIDE1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgMl0sIDE0KTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgN10sICA4KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgMF0sIDEzKTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgNl0sICA2KTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxM10sICA1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxMV0sIDEyKTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgNV0sICA3KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxMl0sICA1KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMyAqLworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzE1XSwgIDkpOworICAgSEhIKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA1XSwgIDcpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyAxXSwgMTUpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAzXSwgMTEpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA3XSwgIDgpOworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzE0XSwgIDYpOworICAgSEhIKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA2XSwgIDYpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA5XSwgMTQpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzExXSwgMTIpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA4XSwgMTMpOworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEyXSwgIDUpOworICAgSEhIKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyAyXSwgMTQpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWzEwXSwgMTMpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAwXSwgMTMpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA0XSwgIDcpOworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEzXSwgIDUpOworCisgICB0bXAgPSBjYzsgY2MgPSBjY2M7IGNjYyA9IHRtcDsKKworICAgLyogcm91bmQgNCAqLworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAxXSwgMTEpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyA5XSwgMTIpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzExXSwgMTQpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEwXSwgMTUpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyAwXSwgMTQpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA4XSwgMTUpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzEyXSwgIDkpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWyA0XSwgIDgpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEzXSwgIDkpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyAzXSwgMTQpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA3XSwgIDUpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzE1XSwgIDYpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzE0XSwgIDgpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA1XSwgIDYpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA2XSwgIDUpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAyXSwgMTIpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCA0ICovCisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDhdLCAxNSk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDZdLCAgNSk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDRdLCAgOCk7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDFdLCAxMSk7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDNdLCAxNCk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTFdLCAxNCk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTVdLCAgNik7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDBdLCAxNCk7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDVdLCAgNik7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTJdLCAgOSk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDJdLCAxMik7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTNdLCAgOSk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDldLCAxMik7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddLCAgNSk7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTBdLCAxNSk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTRdLCAgOCk7CisKKyAgIHRtcCA9IGRkOyBkZCA9IGRkZDsgZGRkID0gdG1wOworCisgICAvKiByb3VuZCA1ICovCisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDRdLCAgOSk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDBdLCAxNSk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDVdLCAgNSk7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDldLCAxMSk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDddLCAgNik7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTJdLCAgOCk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDJdLCAxMyk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbMTBdLCAxMik7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTRdLCAgNSk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDFdLCAxMik7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDNdLCAxMyk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDhdLCAxNCk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbMTFdLCAxMSk7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDZdLCAgOCk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbMTVdLCAgNSk7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTNdLCAgNik7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDUgKi8KKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxMl0gLCAgOCk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbMTVdICwgIDUpOworICAgRkZGKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWzEwXSAsIDEyKTsKKyAgIEZGRihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNF0gLCAgOSk7CisgICBGRkYoY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDFdICwgMTIpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA1XSAsICA1KTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgOF0gLCAxNCk7CisgICBGRkYoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddICwgIDYpOworICAgRkZGKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyA2XSAsICA4KTsKKyAgIEZGRihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgMl0gLCAxMyk7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTNdICwgIDYpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzE0XSAsICA1KTsKKyAgIEZGRihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgMF0gLCAxNSk7CisgICBGRkYoZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDNdICwgMTMpOworICAgRkZGKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA5XSAsIDExKTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxMV0gLCAxMSk7CisKKyAgIHRtcCA9IGVlOyBlZSA9IGVlZTsgZWVlID0gdG1wOworCisgICAvKiBjb21iaW5lIHJlc3VsdHMgKi8KKyAgIG1kLT5ybWQzMjAuc3RhdGVbMF0gKz0gYWE7CisgICBtZC0+cm1kMzIwLnN0YXRlWzFdICs9IGJiOworICAgbWQtPnJtZDMyMC5zdGF0ZVsyXSArPSBjYzsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbM10gKz0gZGQ7CisgICBtZC0+cm1kMzIwLnN0YXRlWzRdICs9IGVlOworICAgbWQtPnJtZDMyMC5zdGF0ZVs1XSArPSBhYWE7CisgICBtZC0+cm1kMzIwLnN0YXRlWzZdICs9IGJiYjsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbN10gKz0gY2NjOworICAgbWQtPnJtZDMyMC5zdGF0ZVs4XSArPSBkZGQ7CisgICBtZC0+cm1kMzIwLnN0YXRlWzldICs9IGVlZTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IHJtZDMyMF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworICAgaW50IGVycjsKKyAgIGVyciA9IF9ybWQzMjBfY29tcHJlc3MobWQsIGJ1Zik7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDI3ICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgIEluaXRpYWxpemUgdGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBtZCAgIFRoZSBoYXNoIHN0YXRlIHlvdSB3aXNoIHRvIGluaXRpYWxpemUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBybWQzMjBfaW5pdChoYXNoX3N0YXRlICogbWQpCit7CisgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworICAgbWQtPnJtZDMyMC5zdGF0ZVswXSA9IDB4Njc0NTIzMDFVTDsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbMV0gPSAweGVmY2RhYjg5VUw7CisgICBtZC0+cm1kMzIwLnN0YXRlWzJdID0gMHg5OGJhZGNmZVVMOworICAgbWQtPnJtZDMyMC5zdGF0ZVszXSA9IDB4MTAzMjU0NzZVTDsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbNF0gPSAweGMzZDJlMWYwVUw7CisgICBtZC0+cm1kMzIwLnN0YXRlWzVdID0gMHg3NjU0MzIxMFVMOworICAgbWQtPnJtZDMyMC5zdGF0ZVs2XSA9IDB4ZmVkY2JhOThVTDsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbN10gPSAweDg5YWJjZGVmVUw7CisgICBtZC0+cm1kMzIwLnN0YXRlWzhdID0gMHgwMTIzNDU2N1VMOworICAgbWQtPnJtZDMyMC5zdGF0ZVs5XSA9IDB4M2MyZDFlMGZVTDsKKyAgIG1kLT5ybWQzMjAuY3VybGVuICAgPSAwOworICAgbWQtPnJtZDMyMC5sZW5ndGggICA9IDA7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICAgUHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSB0aG91Z2ggdGhlIGhhc2gKKyAgIEBwYXJhbSBtZCAgICAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBpbiAgICAgVGhlIGRhdGEgdG8gaGFzaAorICAgQHBhcmFtIGlubGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitIQVNIX1BST0NFU1Mocm1kMzIwX3Byb2Nlc3MsIHJtZDMyMF9jb21wcmVzcywgcm1kMzIwLCA2NCkKKworLyoqCisgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKKyAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICgyMCBieXRlcykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBybWQzMjBfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICBpbnQgaTsKKworICAgIExUQ19BUkdDSEsobWQgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICE9IE5VTEwpOworCisgICAgaWYgKG1kLT5ybWQzMjAuY3VybGVuID49IHNpemVvZihtZC0+cm1kMzIwLmJ1ZikpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgfQorCisKKyAgICAvKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCisgICAgbWQtPnJtZDMyMC5sZW5ndGggKz0gbWQtPnJtZDMyMC5jdXJsZW4gKiA4OworCisgICAgLyogYXBwZW5kIHRoZSAnMScgYml0ICovCisgICAgbWQtPnJtZDMyMC5idWZbbWQtPnJtZDMyMC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikweDgwOworCisgICAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisgICAgICogdGhlbiBjb21wcmVzcy4gIFRoZW4gd2UgY2FuIGZhbGwgYmFjayB0byBwYWRkaW5nIHplcm9zIGFuZCBsZW5ndGgKKyAgICAgKiBlbmNvZGluZyBsaWtlIG5vcm1hbC4KKyAgICAgKi8KKyAgICBpZiAobWQtPnJtZDMyMC5jdXJsZW4gPiA1NikgeworICAgICAgICB3aGlsZSAobWQtPnJtZDMyMC5jdXJsZW4gPCA2NCkgeworICAgICAgICAgICAgbWQtPnJtZDMyMC5idWZbbWQtPnJtZDMyMC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgICAgICB9CisgICAgICAgIHJtZDMyMF9jb21wcmVzcyhtZCwgbWQtPnJtZDMyMC5idWYpOworICAgICAgICBtZC0+cm1kMzIwLmN1cmxlbiA9IDA7CisgICAgfQorCisgICAgLyogcGFkIHVwdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCisgICAgd2hpbGUgKG1kLT5ybWQzMjAuY3VybGVuIDwgNTYpIHsKKyAgICAgICAgbWQtPnJtZDMyMC5idWZbbWQtPnJtZDMyMC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgIH0KKworICAgIC8qIHN0b3JlIGxlbmd0aCAqLworICAgIFNUT1JFNjRMKG1kLT5ybWQzMjAubGVuZ3RoLCBtZC0+cm1kMzIwLmJ1Zis1Nik7CisgICAgcm1kMzIwX2NvbXByZXNzKG1kLCBtZC0+cm1kMzIwLmJ1Zik7CisKKyAgICAvKiBjb3B5IG91dHB1dCAqLworICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgIFNUT1JFMzJMKG1kLT5ybWQzMjAuc3RhdGVbaV0sIG91dCsoNCppKSk7CisgICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgcm1kMzIwX3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNoYXIgKm1zZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFs0MF07CisgICB9IHRlc3RzW10gPSB7CisgICB7ICIiLAorICAgICB7IDB4MjIsIDB4ZDYsIDB4NWQsIDB4NTYsIDB4NjEsIDB4NTMsIDB4NmMsIDB4ZGMsIDB4NzUsIDB4YzEsCisgICAgICAgMHhmZCwgMHhmNSwgMHhjNiwgMHhkZSwgMHg3YiwgMHg0MSwgMHhiOSwgMHhmMiwgMHg3MywgMHgyNSwKKyAgICAgICAweGViLCAweGM2LCAweDFlLCAweDg1LCAweDU3LCAweDE3LCAweDdkLCAweDcwLCAweDVhLCAweDBlLAorICAgICAgIDB4YzgsIDB4ODAsIDB4MTUsIDB4MWMsIDB4M2EsIDB4MzIsIDB4YTAsIDB4MDgsIDB4OTksIDB4YjggfQorICAgfSwKKyAgIHsgImEiLAorICAgICB7IDB4Y2UsIDB4NzgsIDB4ODUsIDB4MDYsIDB4MzgsIDB4ZjksIDB4MjYsIDB4NTgsIDB4YTUsIDB4YTUsCisgICAgICAgMHg4NSwgMHgwOSwgMHg3NSwgMHg3OSwgMHg5MiwgMHg2ZCwgMHhkYSwgMHg2NiwgMHg3YSwgMHg1NywKKyAgICAgICAweDE2LCAweDU2LCAweDJjLCAweGZjLCAweGY2LCAweGZiLCAweGU3LCAweDdmLCAweDYzLCAweDU0LAorICAgICAgIDB4MmYsIDB4OTksIDB4YjAsIDB4NDcsIDB4MDUsIDB4ZDYsIDB4OTcsIDB4MGQsIDB4ZmYsIDB4NWQgfQorICAgfSwKKyAgIHsgImFiYyIsCisgICAgIHsgMHhkZSwgMHg0YywgMHgwMSwgMHhiMywgMHgwNSwgMHg0ZiwgMHg4OSwgMHgzMCwgMHhhNywgMHg5ZCwKKyAgICAgICAweDA5LCAweGFlLCAweDczLCAweDhlLCAweDkyLCAweDMwLCAweDFlLCAweDVhLCAweDE3LCAweDA4LAorICAgICAgIDB4NWIsIDB4ZWYsIDB4ZmQsIDB4YzEsIDB4YjgsIDB4ZDEsIDB4MTYsIDB4NzEsIDB4M2UsIDB4NzQsCisgICAgICAgMHhmOCwgMHgyZiwgMHhhOSwgMHg0MiwgMHhkNiwgMHg0YywgMHhkYiwgMHhjNCwgMHg2OCwgMHgyZCB9CisgICB9LAorICAgeyAibWVzc2FnZSBkaWdlc3QiLAorICAgICB7IDB4M2EsIDB4OGUsIDB4MjgsIDB4NTAsIDB4MmUsIDB4ZDQsIDB4NWQsIDB4NDIsIDB4MmYsIDB4NjgsCisgICAgICAgMHg4NCwgMHg0ZiwgMHg5ZCwgMHhkMywgMHgxNiwgMHhlNywgMHhiOSwgMHg4NSwgMHgzMywgMHhmYSwKKyAgICAgICAweDNmLCAweDJhLCAweDkxLCAweGQyLCAweDlmLCAweDg0LCAweGQ0LCAweDI1LCAweGM4LCAweDhkLAorICAgICAgIDB4NmIsIDB4NGUsIDB4ZmYsIDB4NzIsIDB4N2QsIDB4ZjYsIDB4NmEsIDB4N2MsIDB4MDEsIDB4OTcgfQorICAgfSwKKyAgIHsgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKyAgICAgeyAweGNhLCAweGJkLCAweGIxLCAweDgxLCAweDBiLCAweDkyLCAweDQ3LCAweDBhLCAweDIwLCAweDkzLAorICAgICAgIDB4YWEsIDB4NmIsIDB4Y2UsIDB4MDUsIDB4OTUsIDB4MmMsIDB4MjgsIDB4MzQsIDB4OGMsIDB4ZjQsCisgICAgICAgMHgzZiwgMHhmNiwgMHgwOCwgMHg0MSwgMHg5NywgMHg1MSwgMHg2NiwgMHhiYiwgMHg0MCwgMHhlZCwKKyAgICAgICAweDIzLCAweDQwLCAweDA0LCAweGI4LCAweDgyLCAweDQ0LCAweDYzLCAweGU2LCAweGIwLCAweDA5IH0KKyAgIH0sCisgICB7ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgIHsgMHhkMCwgMHgzNCwgMHhhNywgMHg5NSwgMHgwYywgMHhmNywgMHgyMiwgMHgwMiwgMHgxYiwgMHhhNCwKKyAgICAgICAweGI4LCAweDRkLCAweGY3LCAweDY5LCAweGE1LCAweGRlLCAweDIwLCAweDYwLCAweGUyLCAweDU5LAorICAgICAgIDB4ZGYsIDB4NGMsIDB4OWIsIDB4YjQsIDB4YTQsIDB4MjYsIDB4OGMsIDB4MGUsIDB4OTMsIDB4NWIsCisgICAgICAgMHhiYywgMHg3NCwgMHg3MCwgMHhhOSwgMHg2OSwgMHhjOSwgMHhkMCwgMHg3MiwgMHhhMSwgMHhhYyB9CisgICB9CisgICB9OworICAgaW50IHg7CisgICB1bnNpZ25lZCBjaGFyIGJ1Zls0MF07CisgICBoYXNoX3N0YXRlIG1kOworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgcm1kMzIwX2luaXQoJm1kKTsKKyAgICAgICBybWQzMjBfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbeF0ubXNnLCBzdHJsZW4odGVzdHNbeF0ubXNnKSk7CisgICAgICAgcm1kMzIwX2RvbmUoJm1kLCBidWYpOworICAgICAgIGlmIChYTUVNQ01QKGJ1ZiwgdGVzdHNbeF0ubWQsIDQwKSAhPSAwKSB7CisjaWYgMAorICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRlc3QgJWRcbiIsIHgpOworI2VuZGlmCisgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICB9CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvc2hhMS5jIGIvc3JjL2hhc2hlcy9zaGExLmMKaW5kZXggYTc1ZDA0ZC4uOGNjNjg1NSAxMDA2NDQKLS0tIGEvc3JjL2hhc2hlcy9zaGExLmMKKysrIGIvc3JjL2hhc2hlcy9zaGExLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTMyLDcgKzMyLDggQEAKICAgICAmc2hhMV9pbml0LAogICAgICZzaGExX3Byb2Nlc3MsCiAgICAgJnNoYTFfZG9uZSwKLSAgICAmc2hhMV90ZXN0CisgICAgJnNoYTFfdGVzdCwKKyAgICBOVUxMCiB9OwogCiAjZGVmaW5lIEYwKHgseSx6KSAgKHogXiAoeCAmICh5IF4geikpKQpAQCAtMjcwLDcgKzI3MSw3IEBACiAgICAgICBzaGExX2luaXQoJm1kKTsKICAgICAgIHNoYTFfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyKil0ZXN0c1tpXS5tc2csICh1bnNpZ25lZCBsb25nKXN0cmxlbih0ZXN0c1tpXS5tc2cpKTsKICAgICAgIHNoYTFfZG9uZSgmbWQsIHRtcCk7Ci0gICAgICBpZiAobWVtY21wKHRtcCwgdGVzdHNbaV0uaGFzaCwgMjApICE9IDApIHsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgMjApICE9IDApIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAgIH0KQEAgLTI4Myw1ICsyODQsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMjMgMDI6NDI6MDcgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jIGIvc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jCmluZGV4IGJmZjJmZGYuLmYwODVkNTAgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvc2hhMi9zaGEyMjQuYworKysgYi9zcmMvaGFzaGVzL3NoYTIvc2hhMjI0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogLyoqCiAgICBAcGFyYW0gc2hhMjI0LmMKQEAgLTI3LDcgKzI3LDggQEAKICAgICAmc2hhMjI0X2luaXQsCiAgICAgJnNoYTI1Nl9wcm9jZXNzLAogICAgICZzaGEyMjRfZG9uZSwKLSAgICAmc2hhMjI0X3Rlc3QKKyAgICAmc2hhMjI0X3Rlc3QsCisgICAgTlVMTAogfTsKIAogLyogaW5pdCB0aGUgc2hhMjU2IGVyLi4uIHNoYTIyNCBzdGF0ZSA7LSkgKi8KQEAgLTExMCw3ICsxMTEsNyBAQAogICAgICAgc2hhMjI0X2luaXQoJm1kKTsKICAgICAgIHNoYTIyNF9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIqKXRlc3RzW2ldLm1zZywgKHVuc2lnbmVkIGxvbmcpc3RybGVuKHRlc3RzW2ldLm1zZykpOwogICAgICAgc2hhMjI0X2RvbmUoJm1kLCB0bXApOwotICAgICAgaWYgKG1lbWNtcCh0bXAsIHRlc3RzW2ldLmhhc2gsIDI4KSAhPSAwKSB7CisgICAgICBpZiAoWE1FTUNNUCh0bXAsIHRlc3RzW2ldLmhhc2gsIDI4KSAhPSAwKSB7CiAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwogICAgICAgfQogICB9CkBAIC0xMjAsNSArMTIxLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTIvc2hhMjI0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMyAwMjo0MjowNyAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMgYi9zcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMKaW5kZXggYzQ4YzBmNi4uMmI0MmNiNyAxMDA2NDQKLS0tIGEvc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5jCisrKyBiL3NyYy9oYXNoZXMvc2hhMi9zaGEyNTYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMzEsMTIgKzMxLDEzIEBACiAgICAgJnNoYTI1Nl9pbml0LAogICAgICZzaGEyNTZfcHJvY2VzcywKICAgICAmc2hhMjU2X2RvbmUsCi0gICAgJnNoYTI1Nl90ZXN0CisgICAgJnNoYTI1Nl90ZXN0LAorICAgIE5VTEwKIH07CiAKICNpZmRlZiBMVENfU01BTExfQ09ERQogLyogdGhlIEsgYXJyYXkgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIEtbNjRdID0geworc3RhdGljIGNvbnN0IHVsb25nMzIgS1s2NF0gPSB7CiAgICAgMHg0MjhhMmY5OFVMLCAweDcxMzc0NDkxVUwsIDB4YjVjMGZiY2ZVTCwgMHhlOWI1ZGJhNVVMLCAweDM5NTZjMjViVUwsCiAgICAgMHg1OWYxMTFmMVVMLCAweDkyM2Y4MmE0VUwsIDB4YWIxYzVlZDVVTCwgMHhkODA3YWE5OFVMLCAweDEyODM1YjAxVUwsCiAgICAgMHgyNDMxODViZVVMLCAweDU1MGM3ZGMzVUwsIDB4NzJiZTVkNzRVTCwgMHg4MGRlYjFmZVVMLCAweDliZGMwNmE3VUwsCkBAIC0zMTgsNyArMzE5LDcgQEAKICAgICAgIHNoYTI1Nl9pbml0KCZtZCk7CiAgICAgICBzaGEyNTZfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyKil0ZXN0c1tpXS5tc2csICh1bnNpZ25lZCBsb25nKXN0cmxlbih0ZXN0c1tpXS5tc2cpKTsKICAgICAgIHNoYTI1Nl9kb25lKCZtZCwgdG1wKTsKLSAgICAgIGlmIChtZW1jbXAodG1wLCB0ZXN0c1tpXS5oYXNoLCAzMikgIT0gMCkgeworICAgICAgaWYgKFhNRU1DTVAodG1wLCB0ZXN0c1tpXS5oYXNoLCAzMikgIT0gMCkgewogICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKICAgICAgIH0KICAgfQpAQCAtMzM1LDUgKzMzNiw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMjMgMDI6NDI6MDcgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hhc2hlcy9zaGEyL3NoYTM4NC5jIGIvc3JjL2hhc2hlcy9zaGEyL3NoYTM4NC5jCmluZGV4IDQzZjhmYjYuLmFjNzcwOWMgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoZXMvc2hhMi9zaGEzODQuYworKysgYi9zcmMvaGFzaGVzL3NoYTIvc2hhMzg0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogLyoqIAogICAgQHBhcmFtIHNoYTM4NC5jCkBAIC0yNyw3ICsyNyw4IEBACiAgICAgJnNoYTM4NF9pbml0LAogICAgICZzaGE1MTJfcHJvY2VzcywKICAgICAmc2hhMzg0X2RvbmUsCi0gICAgJnNoYTM4NF90ZXN0CisgICAgJnNoYTM4NF90ZXN0LAorICAgIE5VTEwKIH07CiAKIC8qKgpAQCAtMTE2LDcgKzExNyw3IEBACiAgICAgICBzaGEzODRfaW5pdCgmbWQpOwogICAgICAgc2hhMzg0X3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CiAgICAgICBzaGEzODRfZG9uZSgmbWQsIHRtcCk7Ci0gICAgICBpZiAobWVtY21wKHRtcCwgdGVzdHNbaV0uaGFzaCwgNDgpICE9IDApIHsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgNDgpICE9IDApIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAgIH0KQEAgLTEzMCw1ICsxMzEsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEzODQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAyOjQyOjA3ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIuYyBiL3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIuYwppbmRleCA3YjY4MDViLi4wOGM5NWVmIDEwMDY0NAotLS0gYS9zcmMvaGFzaGVzL3NoYTIvc2hhNTEyLmMKKysrIGIvc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zMSw3ICszMSw4IEBACiAgICAgJnNoYTUxMl9pbml0LAogICAgICZzaGE1MTJfcHJvY2VzcywKICAgICAmc2hhNTEyX2RvbmUsCi0gICAgJnNoYTUxMl90ZXN0CisgICAgJnNoYTUxMl90ZXN0LAorICAgIE5VTEwKIH07CiAKIC8qIHRoZSBLIGFycmF5ICovCkBAIC0yOTYsNyArMjk3LDcgQEAKICAgICAgIHNoYTUxMl9pbml0KCZtZCk7CiAgICAgICBzaGE1MTJfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CiAgICAgICBzaGE1MTJfZG9uZSgmbWQsIHRtcCk7Ci0gICAgICBpZiAobWVtY21wKHRtcCwgdGVzdHNbaV0uaGFzaCwgNjQpICE9IDApIHsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgNjQpICE9IDApIHsKICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAgIH0KQEAgLTMxNCw1ICszMTUsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAyOjQyOjA3ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvdGlnZXIuYyBiL3NyYy9oYXNoZXMvdGlnZXIuYwppbmRleCAyNTBjMTg2Li45YTQwNTJjIDEwMDY0NAotLS0gYS9zcmMvaGFzaGVzL3RpZ2VyLmMKKysrIGIvc3JjL2hhc2hlcy90aWdlci5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogI2luY2x1ZGUgInRvbWNyeXB0LmgiCkBAIC0zMiw3ICszMiw4IEBACiAgICAgJnRpZ2VyX2luaXQsCiAgICAgJnRpZ2VyX3Byb2Nlc3MsCiAgICAgJnRpZ2VyX2RvbmUsCi0gICAgJnRpZ2VyX3Rlc3QKKyAgICAmdGlnZXJfdGVzdCwKKyAgICBOVUxMCiB9OwogCiAjZGVmaW5lIHQxICh0YWJsZSkKQEAgLTc3NCw3ICs3NzUsNyBAQAogICAgICAgdGlnZXJfaW5pdCgmbWQpOwogICAgICAgdGlnZXJfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CiAgICAgICB0aWdlcl9kb25lKCZtZCwgdG1wKTsKLSAgICAgIGlmIChtZW1jbXAodG1wLCB0ZXN0c1tpXS5oYXNoLCAyNCkgIT0gMCkgeworICAgICAgaWYgKFhNRU1DTVAodG1wLCB0ZXN0c1tpXS5oYXNoLCAyNCkgIT0gMCkgewogICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CiAgICAgICB9CiAgIH0KQEAgLTgwOSw1ICs4MTAsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvdGlnZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAyOjQyOjA3ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYyBiL3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYwppbmRleCAxYmQ3OTgzLi42NWUzOGE3IDEwMDY0NAotLS0gYS9zcmMvaGFzaGVzL3doaXJsL3doaXJsLmMKKysrIGIvc3JjL2hhc2hlcy93aGlybC93aGlybC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KIAogLyoqIApAQCAtMzIsNyArMzIsOCBAQAogICAgICZ3aGlybHBvb2xfaW5pdCwKICAgICAmd2hpcmxwb29sX3Byb2Nlc3MsCiAgICAgJndoaXJscG9vbF9kb25lLAotICAgICZ3aGlybHBvb2xfdGVzdAorICAgICZ3aGlybHBvb2xfdGVzdCwKKyAgICBOVUxMCiB9OwogCiAvKiB0aGUgc2JveGVzICovCkBAIC0yODksNyArMjkwLDcgQEAKICAgICAgIHdoaXJscG9vbF9pbml0KCZtZCk7CiAgICAgICB3aGlybHBvb2xfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbaV0ubXNnLCB0ZXN0c1tpXS5sZW4pOwogICAgICAgd2hpcmxwb29sX2RvbmUoJm1kLCB0bXApOwotICAgICAgaWYgKG1lbWNtcCh0bXAsIHRlc3RzW2ldLmhhc2gsIDY0KSAhPSAwKSB7CisgICAgICBpZiAoWE1FTUNNUCh0bXAsIHRlc3RzW2ldLmhhc2gsIDY0KSAhPSAwKSB7CiAjaWYgMCAgICAgIAogICAgICAgICAgcHJpbnRmKCJcbkZhaWxlZCB0ZXN0ICVkXG4iLCBpKTsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgKSB7CkBAIC0zMDksNSArMzEwLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsL3doaXJsLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMyAwMjo0MjowNyAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy9sdGNfdG9tbWF0aC5oIGIvc3JjL2hlYWRlcnMvbHRjX3RvbW1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ2MmI0ZS4uMDAwMDAwMAotLS0gYS9zcmMvaGVhZGVycy9sdGNfdG9tbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BpYWh1LmNhLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotI2lmbmRlZiBCTl9IXwotI2RlZmluZSBCTl9IXwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotCi0jaW5jbHVkZSA8dG9tbWF0aF9jbGFzcy5oPgotCi0jdW5kZWYgTUlOCi0jZGVmaW5lIE1JTih4LHkpICgoeCk8KHkpPyh4KTooeSkpCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LHkpICgoeCk+KHkpPyh4KTooeSkpCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0KLS8qIEMrKyBjb21waWxlcnMgZG9uJ3QgbGlrZSBhc3NpZ25pbmcgdm9pZCAqIHRvIG1wX2RpZ2l0ICogKi8KLSNkZWZpbmUgIE9QVF9DQVNUKHgpICAoeCAqKQotCi0jZWxzZQotCi0vKiBDIG9uIHRoZSBvdGhlciBoYW5kIGRvZXNuJ3QgY2FyZSAqLwotI2RlZmluZSAgT1BUX0NBU1QoeCkKLQotI2VuZGlmCi0KLQotLyogZGV0ZWN0IDY0LWJpdCBtb2RlIGlmIHBvc3NpYmxlICovCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAKLSAgICNpZiAhKGRlZmluZWQoTVBfNjRCSVQpICYmIGRlZmluZWQoTVBfMTZCSVQpICYmIGRlZmluZWQoTVBfOEJJVCkpCi0gICAgICAjZGVmaW5lIE1QXzY0QklUCi0gICAjZW5kaWYKLSNlbmRpZgotCi0vKiBzb21lIGRlZmF1bHQgY29uZmlndXJhdGlvbnMuCi0gKgotICogQSAibXBfZGlnaXQiIG11c3QgYmUgYWJsZSB0byBob2xkIERJR0lUX0JJVCArIDEgYml0cwotICogQSAibXBfd29yZCIgbXVzdCBiZSBhYmxlIHRvIGhvbGQgMipESUdJVF9CSVQgKyAxIGJpdHMKLSAqCi0gKiBBdCB0aGUgdmVyeSBsZWFzdCBhIG1wX2RpZ2l0IG11c3QgYmUgYWJsZSB0byBob2xkIDcgYml0cwotICogW2FueSBzaXplIGJleW9uZCB0aGF0IGlzIG9rIHByb3ZpZGVkIGl0IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGRhdGEgdHlwZV0KLSAqLwotI2lmZGVmIE1QXzhCSVQKLSAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgIG1wX2RpZ2l0OwotICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgbXBfd29yZDsKLSNlbGlmIGRlZmluZWQoTVBfMTZCSVQpCi0gICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICBtcF9kaWdpdDsKLSAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIG1wX3dvcmQ7Ci0jZWxpZiBkZWZpbmVkKE1QXzY0QklUKQotICAgLyogZm9yIEdDQyBvbmx5IG9uIHN1cHBvcnRlZCBwbGF0Zm9ybXMgKi8KLSNpZm5kZWYgQ1JZUFQKLSAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsb25nNjQ7Ci0gICB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgICBsb25nNjQ7Ci0jZW5kaWYKLQotICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfZGlnaXQ7Ci0gICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBtcF93b3JkIF9fYXR0cmlidXRlX18gKChtb2RlKFRJKSkpOwotCi0gICAjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgICA2MAotI2Vsc2UKLSAgIC8qIHRoaXMgaXMgdGhlIGRlZmF1bHQgY2FzZSwgMjgtYml0IGRpZ2l0cyAqLwotICAgCi0gICAvKiB0aGlzIGlzIHRvIG1ha2UgcG9ydGluZyBpbnRvIExpYlRvbUNyeXB0IGVhc2llciA6LSkgKi8KLSNpZm5kZWYgQ1JZUFQKLSAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgCi0gICAgICB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICB1bG9uZzY0OwotICAgICAgdHlwZWRlZiBzaWduZWQgX19pbnQ2NCAgICAgbG9uZzY0OwotICAgI2Vsc2UKLSAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsb25nNjQ7Ci0gICAgICB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgICBsb25nNjQ7Ci0gICAjZW5kaWYKLSNlbmRpZgotCi0gICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBtcF9kaWdpdDsKLSAgIHR5cGVkZWYgdWxvbmc2NCAgICAgICAgICAgIG1wX3dvcmQ7Ci0KLSNpZmRlZiBNUF8zMUJJVCAgIAotICAgLyogdGhpcyBpcyBhbiBleHRlbnNpb24gdGhhdCB1c2VzIDMxLWJpdCBkaWdpdHMgKi8KLSAgICNkZWZpbmUgRElHSVRfQklUICAgICAgICAgIDMxCi0jZWxzZQotICAgLyogZGVmYXVsdCBjYXNlIGlzIDI4LWJpdCBkaWdpdHMsIGRlZmluZXMgTVBfMjhCSVQgYXMgYSBoYW5keSBtYWNybyB0byB0ZXN0ICovCi0gICAjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgICAyOAotICAgI2RlZmluZSBNUF8yOEJJVAotI2VuZGlmICAgCi0jZW5kaWYKLQotLyogZGVmaW5lIGhlYXAgbWFjcm9zICovCi0jaWZuZGVmIENSWVBUCi0gICAvKiBkZWZhdWx0IHRvIGxpYmMgc3R1ZmYgKi8KLSAgICNpZm5kZWYgWE1BTExPQyAKLSAgICAgICAjZGVmaW5lIFhNQUxMT0MgIG1hbGxvYwotICAgICAgICNkZWZpbmUgWEZSRUUgICAgZnJlZQotICAgICAgICNkZWZpbmUgWFJFQUxMT0MgcmVhbGxvYwotICAgICAgICNkZWZpbmUgWENBTExPQyAgY2FsbG9jCi0gICAjZWxzZQotICAgICAgLyogcHJvdG90eXBlcyBmb3Igb3VyIGhlYXAgZnVuY3Rpb25zICovCi0gICAgICBleHRlcm4gdm9pZCAqWE1BTExPQyhzaXplX3Qgbik7Ci0gICAgICBleHRlcm4gdm9pZCAqWFJFQUxMT0Modm9pZCAqcCwgc2l6ZV90IG4pOwotICAgICAgZXh0ZXJuIHZvaWQgKlhDQUxMT0Moc2l6ZV90IG4sIHNpemVfdCBzKTsKLSAgICAgIGV4dGVybiB2b2lkIFhGUkVFKHZvaWQgKnApOwotICAgI2VuZGlmCi0jZW5kaWYKLQotCi0vKiBvdGhlcndpc2UgdGhlIGJpdHMgcGVyIGRpZ2l0IGlzIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBzaXplIG9mIGEgbXBfZGlnaXQgKi8KLSNpZm5kZWYgRElHSVRfQklUCi0gICAjZGVmaW5lIERJR0lUX0JJVCAgICAgKChpbnQpKChDSEFSX0JJVCAqIHNpemVvZihtcF9kaWdpdCkgLSAxKSkpICAvKiBiaXRzIHBlciBkaWdpdCAqLwotI2VuZGlmCi0KLSNkZWZpbmUgTVBfRElHSVRfQklUICAgICBESUdJVF9CSVQKLSNkZWZpbmUgTVBfTUFTSyAgICAgICAgICAoKCgobXBfZGlnaXQpMSk8PCgobXBfZGlnaXQpRElHSVRfQklUKSktKChtcF9kaWdpdCkxKSkKLSNkZWZpbmUgTVBfRElHSVRfTUFYICAgICBNUF9NQVNLCi0KLS8qIGVxdWFsaXRpZXMgKi8KLSNkZWZpbmUgTVBfTFQgICAgICAgIC0xICAgLyogbGVzcyB0aGFuICovCi0jZGVmaW5lIE1QX0VRICAgICAgICAgMCAgIC8qIGVxdWFsIHRvICovCi0jZGVmaW5lIE1QX0dUICAgICAgICAgMSAgIC8qIGdyZWF0ZXIgdGhhbiAqLwotCi0jZGVmaW5lIE1QX1pQT1MgICAgICAgMCAgIC8qIHBvc2l0aXZlIGludGVnZXIgKi8KLSNkZWZpbmUgTVBfTkVHICAgICAgICAxICAgLyogbmVnYXRpdmUgKi8KLQotI2RlZmluZSBNUF9PS0FZICAgICAgIDAgICAvKiBvayByZXN1bHQgKi8KLSNkZWZpbmUgTVBfTUVNICAgICAgICAtMiAgLyogb3V0IG9mIG1lbSAqLwotI2RlZmluZSBNUF9WQUwgICAgICAgIC0zICAvKiBpbnZhbGlkIGlucHV0ICovCi0jZGVmaW5lIE1QX1JBTkdFICAgICAgTVBfVkFMCi0KLSNkZWZpbmUgTVBfWUVTICAgICAgICAxICAgLyogeWVzIHJlc3BvbnNlICovCi0jZGVmaW5lIE1QX05PICAgICAgICAgMCAgIC8qIG5vIHJlc3BvbnNlICovCi0KLS8qIFByaW1hbGl0eSBnZW5lcmF0aW9uIGZsYWdzICovCi0jZGVmaW5lIExUTV9QUklNRV9CQlMgICAgICAweDAwMDEgLyogQkJTIHN0eWxlIHByaW1lICovCi0jZGVmaW5lIExUTV9QUklNRV9TQUZFICAgICAweDAwMDIgLyogU2FmZSBwcmltZSAocC0xKS8yID09IHByaW1lICovCi0jZGVmaW5lIExUTV9QUklNRV8yTVNCX09OICAweDAwMDggLyogZm9yY2UgMm5kIE1TQiB0byAxICovCi0KLXR5cGVkZWYgaW50ICAgICAgICAgICBtcF9lcnI7Ci0KLS8qIHlvdSdsbCBoYXZlIHRvIHR1bmUgdGhlc2UuLi4gKi8KLWV4dGVybiBpbnQgS0FSQVRTVUJBX01VTF9DVVRPRkYsCi0gICAgICAgICAgIEtBUkFUU1VCQV9TUVJfQ1VUT0ZGLAotICAgICAgICAgICBUT09NX01VTF9DVVRPRkYsCi0gICAgICAgICAgIFRPT01fU1FSX0NVVE9GRjsKLQotLyogZGVmaW5lIHRoaXMgdG8gdXNlIGxvd2VyIG1lbW9yeSB1c2FnZSByb3V0aW5lcyAoZXhwdG1vZHMgbW9zdGx5KSAqLwotLyogI2RlZmluZSBNUF9MT1dfTUVNICovCi0KLS8qIGRlZmF1bHQgcHJlY2lzaW9uICovCi0jaWZuZGVmIE1QX1BSRUMKLSAgICNpZm5kZWYgTVBfTE9XX01FTQotICAgICAgI2RlZmluZSBNUF9QUkVDICAgICAgICAgICAgICAgICA2NCAgICAgLyogZGVmYXVsdCBkaWdpdHMgb2YgcHJlY2lzaW9uICovCi0gICAjZWxzZQotICAgICAgI2RlZmluZSBNUF9QUkVDICAgICAgICAgICAgICAgICA4ICAgICAgLyogZGVmYXVsdCBkaWdpdHMgb2YgcHJlY2lzaW9uICovCi0gICAjZW5kaWYgICAKLSNlbmRpZgotCi0vKiBzaXplIG9mIGNvbWJhIGFycmF5cywgc2hvdWxkIGJlIGF0IGxlYXN0IDIgKiAyKiooQklUU19QRVJfV09SRCAtIEJJVFNfUEVSX0RJR0lUKjIpICovCi0jZGVmaW5lIE1QX1dBUlJBWSAgICAgICAgICAgICAgICgxIDw8IChzaXplb2YobXBfd29yZCkgKiBDSEFSX0JJVCAtIDIgKiBESUdJVF9CSVQgKyAxKSkKLQotLyogdGhlIGluZmFtb3VzIG1wX2ludCBzdHJ1Y3R1cmUgKi8KLXR5cGVkZWYgc3RydWN0ICB7Ci0gICAgaW50IHVzZWQsIGFsbG9jLCBzaWduOwotICAgIG1wX2RpZ2l0ICpkcDsKLX0gbXBfaW50OwotCi0vKiBjYWxsYmFjayBmb3IgbXBfcHJpbWVfcmFuZG9tLCBzaG91bGQgZmlsbCBkc3Qgd2l0aCByYW5kb20gYnl0ZXMgYW5kIHJldHVybiBob3cgbWFueSByZWFkIFt1cHRvIGxlbl0gKi8KLXR5cGVkZWYgaW50IGx0bV9wcmltZV9jYWxsYmFjayh1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHZvaWQgKmRhdCk7Ci0KLQotI2RlZmluZSBVU0VEKG0pICAgICgobSktPnVzZWQpCi0jZGVmaW5lIERJR0lUKG0saykgKChtKS0+ZHBbKGspXSkKLSNkZWZpbmUgU0lHTihtKSAgICAoKG0pLT5zaWduKQotCi0vKiBlcnJvciBjb2RlIHRvIGNoYXIqIHN0cmluZyAqLwotY2hhciAqbXBfZXJyb3JfdG9fc3RyaW5nKGludCBjb2RlKTsKLQotLyogLS0tPiBpbml0IGFuZCBkZWluaXQgYmlnbnVtIGZ1bmN0aW9ucyA8LS0tICovCi0vKiBpbml0IGEgYmlnbnVtICovCi1pbnQgbXBfaW5pdChtcF9pbnQgKmEpOwotCi0vKiBmcmVlIGEgYmlnbnVtICovCi12b2lkIG1wX2NsZWFyKG1wX2ludCAqYSk7Ci0KLS8qIGluaXQgYSBudWxsIHRlcm1pbmF0ZWQgc2VyaWVzIG9mIGFyZ3VtZW50cyAqLwotaW50IG1wX2luaXRfbXVsdGkobXBfaW50ICptcCwgLi4uKTsKLQotLyogY2xlYXIgYSBudWxsIHRlcm1pbmF0ZWQgc2VyaWVzIG9mIGFyZ3VtZW50cyAqLwotdm9pZCBtcF9jbGVhcl9tdWx0aShtcF9pbnQgKm1wLCAuLi4pOwotCi0vKiBleGNoYW5nZSB0d28gaW50cyAqLwotdm9pZCBtcF9leGNoKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKLQotLyogc2hyaW5rIHJhbSByZXF1aXJlZCBmb3IgYSBiaWdudW0gKi8KLWludCBtcF9zaHJpbmsobXBfaW50ICphKTsKLQotLyogZ3JvdyBhbiBpbnQgdG8gYSBnaXZlbiBzaXplICovCi1pbnQgbXBfZ3JvdyhtcF9pbnQgKmEsIGludCBzaXplKTsKLQotLyogaW5pdCB0byBhIGdpdmVuIG51bWJlciBvZiBkaWdpdHMgKi8KLWludCBtcF9pbml0X3NpemUobXBfaW50ICphLCBpbnQgc2l6ZSk7Ci0KLS8qIC0tLT4gQmFzaWMgTWFuaXB1bGF0aW9ucyA8LS0tICovCi0jZGVmaW5lIG1wX2lzemVybyhhKSAoKChhKS0+dXNlZCA9PSAwKSA/IE1QX1lFUyA6IE1QX05PKQotI2RlZmluZSBtcF9pc2V2ZW4oYSkgKCgoYSktPnVzZWQgPiAwICYmICgoKGEpLT5kcFswXSAmIDEpID09IDApKSA/IE1QX1lFUyA6IE1QX05PKQotI2RlZmluZSBtcF9pc29kZChhKSAgKCgoYSktPnVzZWQgPiAwICYmICgoKGEpLT5kcFswXSAmIDEpID09IDEpKSA/IE1QX1lFUyA6IE1QX05PKQotCi0vKiBzZXQgdG8gemVybyAqLwotdm9pZCBtcF96ZXJvKG1wX2ludCAqYSk7Ci0KLS8qIHNldCB0byBhIGRpZ2l0ICovCi12b2lkIG1wX3NldChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIpOwotCi0vKiBzZXQgYSAzMi1iaXQgY29uc3QgKi8KLWludCBtcF9zZXRfaW50KG1wX2ludCAqYSwgdW5zaWduZWQgbG9uZyBiKTsKLQotLyogZ2V0IGEgMzItYml0IHZhbHVlICovCi11bnNpZ25lZCBsb25nIG1wX2dldF9pbnQobXBfaW50ICogYSk7Ci0KLS8qIGluaXRpYWxpemUgYW5kIHNldCBhIGRpZ2l0ICovCi1pbnQgbXBfaW5pdF9zZXQgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpOwotCi0vKiBpbml0aWFsaXplIGFuZCBzZXQgMzItYml0IHZhbHVlICovCi1pbnQgbXBfaW5pdF9zZXRfaW50IChtcF9pbnQgKiBhLCB1bnNpZ25lZCBsb25nIGIpOwotCi0vKiBjb3B5LCBiID0gYSAqLwotaW50IG1wX2NvcHkobXBfaW50ICphLCBtcF9pbnQgKmIpOwotCi0vKiBpbml0cyBhbmQgY29waWVzLCBhID0gYiAqLwotaW50IG1wX2luaXRfY29weShtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIHRyaW0gdW51c2VkIGRpZ2l0cyAqLwotdm9pZCBtcF9jbGFtcChtcF9pbnQgKmEpOwotCi0vKiAtLS0+IGRpZ2l0IG1hbmlwdWxhdGlvbiA8LS0tICovCi0KLS8qIHJpZ2h0IHNoaWZ0IGJ5ICJiIiBkaWdpdHMgKi8KLXZvaWQgbXBfcnNoZChtcF9pbnQgKmEsIGludCBiKTsKLQotLyogbGVmdCBzaGlmdCBieSAiYiIgZGlnaXRzICovCi1pbnQgbXBfbHNoZChtcF9pbnQgKmEsIGludCBiKTsKLQotLyogYyA9IGEgLyAyKipiICovCi1pbnQgbXBfZGl2XzJkKG1wX2ludCAqYSwgaW50IGIsIG1wX2ludCAqYywgbXBfaW50ICpkKTsKLQotLyogYiA9IGEvMiAqLwotaW50IG1wX2Rpdl8yKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKLQotLyogYyA9IGEgKiAyKipiICovCi1pbnQgbXBfbXVsXzJkKG1wX2ludCAqYSwgaW50IGIsIG1wX2ludCAqYyk7Ci0KLS8qIGIgPSBhKjIgKi8KLWludCBtcF9tdWxfMihtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIGMgPSBhIG1vZCAyKipkICovCi1pbnQgbXBfbW9kXzJkKG1wX2ludCAqYSwgaW50IGIsIG1wX2ludCAqYyk7Ci0KLS8qIGNvbXB1dGVzIGEgPSAyKipiICovCi1pbnQgbXBfMmV4cHQobXBfaW50ICphLCBpbnQgYik7Ci0KLS8qIENvdW50cyB0aGUgbnVtYmVyIG9mIGxzYnMgd2hpY2ggYXJlIHplcm8gYmVmb3JlIHRoZSBmaXJzdCB6ZXJvIGJpdCAqLwotaW50IG1wX2NudF9sc2IobXBfaW50ICphKTsKLQotLyogSSBMb3ZlIEVhcnRoISAqLwotCi0vKiBtYWtlcyBhIHBzZXVkby1yYW5kb20gaW50IG9mIGEgZ2l2ZW4gc2l6ZSAqLwotaW50IG1wX3JhbmQobXBfaW50ICphLCBpbnQgZGlnaXRzKTsKLQotLyogLS0tPiBiaW5hcnkgb3BlcmF0aW9ucyA8LS0tICovCi0vKiBjID0gYSBYT1IgYiAgKi8KLWludCBtcF94b3IobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIGMgPSBhIE9SIGIgKi8KLWludCBtcF9vcihtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKLQotLyogYyA9IGEgQU5EIGIgKi8KLWludCBtcF9hbmQobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIC0tLT4gQmFzaWMgYXJpdGhtZXRpYyA8LS0tICovCi0KLS8qIGIgPSAtYSAqLwotaW50IG1wX25lZyhtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIGIgPSB8YXwgKi8KLWludCBtcF9hYnMobXBfaW50ICphLCBtcF9pbnQgKmIpOwotCi0vKiBjb21wYXJlIGEgdG8gYiAqLwotaW50IG1wX2NtcChtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIGNvbXBhcmUgfGF8IHRvIHxifCAqLwotaW50IG1wX2NtcF9tYWcobXBfaW50ICphLCBtcF9pbnQgKmIpOwotCi0vKiBjID0gYSArIGIgKi8KLWludCBtcF9hZGQobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIGMgPSBhIC0gYiAqLwotaW50IG1wX3N1YihtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKLQotLyogYyA9IGEgKiBiICovCi1pbnQgbXBfbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOwotCi0vKiBiID0gYSphICAqLwotaW50IG1wX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLwotaW50IG1wX2RpdihtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBtcF9pbnQgKmQpOwotCi0vKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KLWludCBtcF9tb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIC0tLT4gc2luZ2xlIGRpZ2l0IGZ1bmN0aW9ucyA8LS0tICovCi0KLS8qIGNvbXBhcmUgYWdhaW5zdCBhIHNpbmdsZSBkaWdpdCAqLwotaW50IG1wX2NtcF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYik7Ci0KLS8qIGMgPSBhICsgYiAqLwotaW50IG1wX2FkZF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjKTsKLQotLyogYyA9IGEgLSBiICovCi1pbnQgbXBfc3ViX2QobXBfaW50ICphLCBtcF9kaWdpdCBiLCBtcF9pbnQgKmMpOwotCi0vKiBjID0gYSAqIGIgKi8KLWludCBtcF9tdWxfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqYyk7Ci0KLS8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLwotaW50IG1wX2Rpdl9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjLCBtcF9kaWdpdCAqZCk7Ci0KLS8qIGEvMyA9PiAzYyArIGQgPT0gYSAqLwotaW50IG1wX2Rpdl8zKG1wX2ludCAqYSwgbXBfaW50ICpjLCBtcF9kaWdpdCAqZCk7Ci0KLS8qIGMgPSBhKipiICovCi1pbnQgbXBfZXhwdF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjKTsKLQotLyogYyA9IGEgbW9kIGIsIDAgPD0gYyA8IGIgICovCi1pbnQgbXBfbW9kX2QobXBfaW50ICphLCBtcF9kaWdpdCBiLCBtcF9kaWdpdCAqYyk7Ci0KLS8qIC0tLT4gbnVtYmVyIHRoZW9yeSA8LS0tICovCi0KLS8qIGQgPSBhICsgYiAobW9kIGMpICovCi1pbnQgbXBfYWRkbW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMsIG1wX2ludCAqZCk7Ci0KLS8qIGQgPSBhIC0gYiAobW9kIGMpICovCi1pbnQgbXBfc3VibW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMsIG1wX2ludCAqZCk7Ci0KLS8qIGQgPSBhICogYiAobW9kIGMpICovCi1pbnQgbXBfbXVsbW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMsIG1wX2ludCAqZCk7Ci0KLS8qIGMgPSBhICogYSAobW9kIGIpICovCi1pbnQgbXBfc3FybW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOwotCi0vKiBjID0gMS9hIChtb2QgYikgKi8KLWludCBtcF9pbnZtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIGMgPSAoYSwgYikgKi8KLWludCBtcF9nY2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIHByb2R1Y2VzIHZhbHVlIHN1Y2ggdGhhdCBVMSphICsgVTIqYiA9IFUzICovCi1pbnQgbXBfZXh0ZXVjbGlkKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKlUxLCBtcF9pbnQgKlUyLCBtcF9pbnQgKlUzKTsKLQotLyogYyA9IFthLCBiXSBvciAoYSpiKS8oYSwgYikgKi8KLWludCBtcF9sY20obXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIGZpbmRzIG9uZSBvZiB0aGUgYid0aCByb290IG9mIGEsIHN1Y2ggdGhhdCB8Y3wqKmIgPD0gfGF8Ci0gKgotICogcmV0dXJucyBlcnJvciBpZiBhIDwgMCBhbmQgYiBpcyBldmVuCi0gKi8KLWludCBtcF9uX3Jvb3QobXBfaW50ICphLCBtcF9kaWdpdCBiLCBtcF9pbnQgKmMpOwotCi0vKiBzcGVjaWFsIHNxcnQgYWxnbyAqLwotaW50IG1wX3NxcnQobXBfaW50ICphcmcsIG1wX2ludCAqcmV0KTsKLQotLyogaXMgbnVtYmVyIGEgc3F1YXJlPyAqLwotaW50IG1wX2lzX3NxdWFyZShtcF9pbnQgKmFyZywgaW50ICpyZXQpOwotCi0vKiBjb21wdXRlcyB0aGUgamFjb2JpIGMgPSAoYSB8IG4pIChvciBMZWdlbmRyZSBpZiBiIGlzIHByaW1lKSAgKi8KLWludCBtcF9qYWNvYmkobXBfaW50ICphLCBtcF9pbnQgKm4sIGludCAqYyk7Ci0KLS8qIHVzZWQgdG8gc2V0dXAgdGhlIEJhcnJldHQgcmVkdWN0aW9uIGZvciBhIGdpdmVuIG1vZHVsdXMgYiAqLwotaW50IG1wX3JlZHVjZV9zZXR1cChtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIEJhcnJldHQgUmVkdWN0aW9uLCBjb21wdXRlcyBhIChtb2QgYikgd2l0aCBhIHByZWNvbXB1dGVkIHZhbHVlIGMKLSAqCi0gKiBBc3N1bWVzIHRoYXQgMCA8IGEgPD0gYipiLCBub3RlIGlmIDAgPiBhID4gLShiKmIpIHRoZW4geW91IGNhbiBtZXJlbHkKLSAqIGNvbXB1dGUgdGhlIHJlZHVjdGlvbiBhcyAtMSAqIG1wX3JlZHVjZShtcF9hYnMoYSkpIFtwc2V1ZG8gY29kZV0uCi0gKi8KLWludCBtcF9yZWR1Y2UobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci0KLS8qIHNldHVwcyB0aGUgbW9udGdvbWVyeSByZWR1Y3Rpb24gKi8KLWludCBtcF9tb250Z29tZXJ5X3NldHVwKG1wX2ludCAqYSwgbXBfZGlnaXQgKm1wKTsKLQotLyogY29tcHV0ZXMgYSA9IEIqKm4gbW9kIGIgd2l0aG91dCBkaXZpc2lvbiBvciBtdWx0aXBsaWNhdGlvbiB1c2VmdWwgZm9yCi0gKiBub3JtYWxpemluZyBudW1iZXJzIGluIGEgTW9udGdvbWVyeSBzeXN0ZW0uCi0gKi8KLWludCBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbihtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci0KLS8qIGNvbXB1dGVzIHgvUiA9PSB4IChtb2QgTikgdmlhIE1vbnRnb21lcnkgUmVkdWN0aW9uICovCi1pbnQgbXBfbW9udGdvbWVyeV9yZWR1Y2UobXBfaW50ICphLCBtcF9pbnQgKm0sIG1wX2RpZ2l0IG1wKTsKLQotLyogcmV0dXJucyAxIGlmIGEgaXMgYSB2YWxpZCBEUiBtb2R1bHVzICovCi1pbnQgbXBfZHJfaXNfbW9kdWx1cyhtcF9pbnQgKmEpOwotCi0vKiBzZXRzIHRoZSB2YWx1ZSBvZiAiZCIgcmVxdWlyZWQgZm9yIG1wX2RyX3JlZHVjZSAqLwotdm9pZCBtcF9kcl9zZXR1cChtcF9pbnQgKmEsIG1wX2RpZ2l0ICpkKTsKLQotLyogcmVkdWNlcyBhIG1vZHVsbyBiIHVzaW5nIHRoZSBEaW1pbmlzaGVkIFJhZGl4IG1ldGhvZCAqLwotaW50IG1wX2RyX3JlZHVjZShtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfZGlnaXQgbXApOwotCi0vKiByZXR1cm5zIHRydWUgaWYgYSBjYW4gYmUgcmVkdWNlZCB3aXRoIG1wX3JlZHVjZV8yayAqLwotaW50IG1wX3JlZHVjZV9pc18yayhtcF9pbnQgKmEpOwotCi0vKiBkZXRlcm1pbmVzIGsgdmFsdWUgZm9yIDJrIHJlZHVjdGlvbiAqLwotaW50IG1wX3JlZHVjZV8ya19zZXR1cChtcF9pbnQgKmEsIG1wX2RpZ2l0ICpkKTsKLQotLyogcmVkdWNlcyBhIG1vZHVsbyBiIHdoZXJlIGIgaXMgb2YgdGhlIGZvcm0gMioqcCAtIGsgWzAgPD0gYV0gKi8KLWludCBtcF9yZWR1Y2VfMmsobXBfaW50ICphLCBtcF9pbnQgKm4sIG1wX2RpZ2l0IGQpOwotCi0vKiByZXR1cm5zIHRydWUgaWYgYSBjYW4gYmUgcmVkdWNlZCB3aXRoIG1wX3JlZHVjZV8ya19sICovCi1pbnQgbXBfcmVkdWNlX2lzXzJrX2wobXBfaW50ICphKTsKLQotLyogZGV0ZXJtaW5lcyBrIHZhbHVlIGZvciAyayByZWR1Y3Rpb24gKi8KLWludCBtcF9yZWR1Y2VfMmtfc2V0dXBfbChtcF9pbnQgKmEsIG1wX2ludCAqZCk7Ci0KLS8qIHJlZHVjZXMgYSBtb2R1bG8gYiB3aGVyZSBiIGlzIG9mIHRoZSBmb3JtIDIqKnAgLSBrIFswIDw9IGFdICovCi1pbnQgbXBfcmVkdWNlXzJrX2wobXBfaW50ICphLCBtcF9pbnQgKm4sIG1wX2ludCAqZCk7Ci0KLS8qIGQgPSBhKipiIChtb2QgYykgKi8KLWludCBtcF9leHB0bW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMsIG1wX2ludCAqZCk7Ci0KLS8qIC0tLT4gUHJpbWVzIDwtLS0gKi8KLQotLyogbnVtYmVyIG9mIHByaW1lcyAqLwotI2lmZGVmIE1QXzhCSVQKLSAgICNkZWZpbmUgUFJJTUVfU0laRSAgICAgIDMxCi0jZWxzZQotICAgI2RlZmluZSBQUklNRV9TSVpFICAgICAgMjU2Ci0jZW5kaWYKLQotLyogdGFibGUgb2YgZmlyc3QgUFJJTUVfU0laRSBwcmltZXMgKi8KLWV4dGVybiBjb25zdCBtcF9kaWdpdCBsdG1fcHJpbWVfdGFiW107Ci0KLS8qIHJlc3VsdD0xIGlmIGEgaXMgZGl2aXNpYmxlIGJ5IG9uZSBvZiB0aGUgZmlyc3QgUFJJTUVfU0laRSBwcmltZXMgKi8KLWludCBtcF9wcmltZV9pc19kaXZpc2libGUobXBfaW50ICphLCBpbnQgKnJlc3VsdCk7Ci0KLS8qIHBlcmZvcm1zIG9uZSBGZXJtYXQgdGVzdCBvZiAiYSIgdXNpbmcgYmFzZSAiYiIuCi0gKiBTZXRzIHJlc3VsdCB0byAwIGlmIGNvbXBvc2l0ZSBvciAxIGlmIHByb2JhYmxlIHByaW1lCi0gKi8KLWludCBtcF9wcmltZV9mZXJtYXQobXBfaW50ICphLCBtcF9pbnQgKmIsIGludCAqcmVzdWx0KTsKLQotLyogcGVyZm9ybXMgb25lIE1pbGxlci1SYWJpbiB0ZXN0IG9mICJhIiB1c2luZyBiYXNlICJiIi4KLSAqIFNldHMgcmVzdWx0IHRvIDAgaWYgY29tcG9zaXRlIG9yIDEgaWYgcHJvYmFibGUgcHJpbWUKLSAqLwotaW50IG1wX3ByaW1lX21pbGxlcl9yYWJpbihtcF9pbnQgKmEsIG1wX2ludCAqYiwgaW50ICpyZXN1bHQpOwotCi0vKiBUaGlzIGdpdmVzIFtmb3IgYSBnaXZlbiBiaXQgc2l6ZV0gdGhlIG51bWJlciBvZiB0cmlhbHMgcmVxdWlyZWQKLSAqIHN1Y2ggdGhhdCBNaWxsZXItUmFiaW4gZ2l2ZXMgYSBwcm9iIG9mIGZhaWx1cmUgbG93ZXIgdGhhbiAyXi05NiAKLSAqLwotaW50IG1wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMoaW50IHNpemUpOwotCi0vKiBwZXJmb3JtcyB0IHJvdW5kcyBvZiBNaWxsZXItUmFiaW4gb24gImEiIHVzaW5nIHRoZSBmaXJzdAotICogdCBwcmltZSBiYXNlcy4gIEFsc28gcGVyZm9ybXMgYW4gaW5pdGlhbCBzaWV2ZSBvZiB0cmlhbAotICogZGl2aXNpb24uICBEZXRlcm1pbmVzIGlmICJhIiBpcyBwcmltZSB3aXRoIHByb2JhYmlsaXR5Ci0gKiBvZiBlcnJvciBubyBtb3JlIHRoYW4gKDEvNCkqKnQuCi0gKgotICogU2V0cyByZXN1bHQgdG8gMSBpZiBwcm9iYWJseSBwcmltZSwgMCBvdGhlcndpc2UKLSAqLwotaW50IG1wX3ByaW1lX2lzX3ByaW1lKG1wX2ludCAqYSwgaW50IHQsIGludCAqcmVzdWx0KTsKLQotLyogZmluZHMgdGhlIG5leHQgcHJpbWUgYWZ0ZXIgdGhlIG51bWJlciAiYSIgdXNpbmcgInQiIHRyaWFscwotICogb2YgTWlsbGVyLVJhYmluLgotICoKLSAqIGJic19zdHlsZSA9IDEgbWVhbnMgdGhlIHByaW1lIG11c3QgYmUgY29uZ3J1ZW50IHRvIDMgbW9kIDQKLSAqLwotaW50IG1wX3ByaW1lX25leHRfcHJpbWUobXBfaW50ICphLCBpbnQgdCwgaW50IGJic19zdHlsZSk7Ci0KLS8qIG1ha2VzIGEgdHJ1bHkgcmFuZG9tIHByaW1lIG9mIGEgZ2l2ZW4gc2l6ZSAoYnl0ZXMpLAotICogY2FsbCB3aXRoIGJicyA9IDEgaWYgeW91IHdhbnQgaXQgdG8gYmUgY29uZ3J1ZW50IHRvIDMgbW9kIDQgCi0gKgotICogWW91IGhhdmUgdG8gc3VwcGx5IGEgY2FsbGJhY2sgd2hpY2ggZmlsbHMgaW4gYSBidWZmZXIgd2l0aCByYW5kb20gYnl0ZXMuICAiZGF0IiBpcyBhIHBhcmFtZXRlciB5b3UgY2FuCi0gKiBoYXZlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgKGUuZy4gYSBzdGF0ZSBvciBzb21ldGhpbmcpLiAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHVzZSAiZGF0IiBpdHNlbGYKLSAqIHNvIGl0IGNhbiBiZSBOVUxMCi0gKgotICogVGhlIHByaW1lIGdlbmVyYXRlZCB3aWxsIGJlIGxhcmdlciB0aGFuIDJeKDgqc2l6ZSkuCi0gKi8KLSNkZWZpbmUgbXBfcHJpbWVfcmFuZG9tKGEsIHQsIHNpemUsIGJicywgY2IsIGRhdCkgbXBfcHJpbWVfcmFuZG9tX2V4KGEsIHQsICgoc2l6ZSkgKiA4KSArIDEsIChiYnM9PTEpP0xUTV9QUklNRV9CQlM6MCwgY2IsIGRhdCkKLQotLyogbWFrZXMgYSB0cnVseSByYW5kb20gcHJpbWUgb2YgYSBnaXZlbiBzaXplIChiaXRzKSwKLSAqCi0gKiBGbGFncyBhcmUgYXMgZm9sbG93czoKLSAqIAotICogICBMVE1fUFJJTUVfQkJTICAgICAgLSBtYWtlIHByaW1lIGNvbmdydWVudCB0byAzIG1vZCA0Ci0gKiAgIExUTV9QUklNRV9TQUZFICAgICAtIG1ha2Ugc3VyZSAocC0xKS8yIGlzIHByaW1lIGFzIHdlbGwgKGltcGxpZXMgTFRNX1BSSU1FX0JCUykKLSAqICAgTFRNX1BSSU1FXzJNU0JfT0ZGIC0gbWFrZSB0aGUgMm5kIGhpZ2hlc3QgYml0IHplcm8KLSAqICAgTFRNX1BSSU1FXzJNU0JfT04gIC0gbWFrZSB0aGUgMm5kIGhpZ2hlc3QgYml0IG9uZQotICoKLSAqIFlvdSBoYXZlIHRvIHN1cHBseSBhIGNhbGxiYWNrIHdoaWNoIGZpbGxzIGluIGEgYnVmZmVyIHdpdGggcmFuZG9tIGJ5dGVzLiAgImRhdCIgaXMgYSBwYXJhbWV0ZXIgeW91IGNhbgotICogaGF2ZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIChlLmcuIGEgc3RhdGUgb3Igc29tZXRoaW5nKS4gIFRoaXMgZnVuY3Rpb24gZG9lc24ndCB1c2UgImRhdCIgaXRzZWxmCi0gKiBzbyBpdCBjYW4gYmUgTlVMTAotICoKLSAqLwotaW50IG1wX3ByaW1lX3JhbmRvbV9leChtcF9pbnQgKmEsIGludCB0LCBpbnQgc2l6ZSwgaW50IGZsYWdzLCBsdG1fcHJpbWVfY2FsbGJhY2sgY2IsIHZvaWQgKmRhdCk7Ci0KLS8qIC0tLT4gcmFkaXggY29udmVyc2lvbiA8LS0tICovCi1pbnQgbXBfY291bnRfYml0cyhtcF9pbnQgKmEpOwotCi1pbnQgbXBfdW5zaWduZWRfYmluX3NpemUobXBfaW50ICphKTsKLWludCBtcF9yZWFkX3Vuc2lnbmVkX2JpbihtcF9pbnQgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKTsKLWludCBtcF90b191bnNpZ25lZF9iaW4obXBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiKTsKLWludCBtcF90b191bnNpZ25lZF9iaW5fbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKLQotaW50IG1wX3NpZ25lZF9iaW5fc2l6ZShtcF9pbnQgKmEpOwotaW50IG1wX3JlYWRfc2lnbmVkX2JpbihtcF9pbnQgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKTsKLWludCBtcF90b19zaWduZWRfYmluKG1wX2ludCAqYSwgIHVuc2lnbmVkIGNoYXIgKmIpOwotaW50IG1wX3RvX3NpZ25lZF9iaW5fbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKLQotaW50IG1wX3JlYWRfcmFkaXgobXBfaW50ICphLCBjb25zdCBjaGFyICpzdHIsIGludCByYWRpeCk7Ci1pbnQgbXBfdG9yYWRpeChtcF9pbnQgKmEsIGNoYXIgKnN0ciwgaW50IHJhZGl4KTsKLWludCBtcF90b3JhZGl4X24obXBfaW50ICogYSwgY2hhciAqc3RyLCBpbnQgcmFkaXgsIGludCBtYXhsZW4pOwotaW50IG1wX3JhZGl4X3NpemUobXBfaW50ICphLCBpbnQgcmFkaXgsIGludCAqc2l6ZSk7Ci0KLWludCBtcF9mcmVhZChtcF9pbnQgKmEsIGludCByYWRpeCwgRklMRSAqc3RyZWFtKTsKLWludCBtcF9md3JpdGUobXBfaW50ICphLCBpbnQgcmFkaXgsIEZJTEUgKnN0cmVhbSk7Ci0KLSNkZWZpbmUgbXBfcmVhZF9yYXcobXAsIHN0ciwgbGVuKSBtcF9yZWFkX3NpZ25lZF9iaW4oKG1wKSwgKHN0ciksIChsZW4pKQotI2RlZmluZSBtcF9yYXdfc2l6ZShtcCkgICAgICAgICAgIG1wX3NpZ25lZF9iaW5fc2l6ZShtcCkKLSNkZWZpbmUgbXBfdG9yYXcobXAsIHN0cikgICAgICAgICBtcF90b19zaWduZWRfYmluKChtcCksIChzdHIpKQotI2RlZmluZSBtcF9yZWFkX21hZyhtcCwgc3RyLCBsZW4pIG1wX3JlYWRfdW5zaWduZWRfYmluKChtcCksIChzdHIpLCAobGVuKSkKLSNkZWZpbmUgbXBfbWFnX3NpemUobXApICAgICAgICAgICBtcF91bnNpZ25lZF9iaW5fc2l6ZShtcCkKLSNkZWZpbmUgbXBfdG9tYWcobXAsIHN0cikgICAgICAgICBtcF90b191bnNpZ25lZF9iaW4oKG1wKSwgKHN0cikpCi0KLSNkZWZpbmUgbXBfdG9iaW5hcnkoTSwgUykgIG1wX3RvcmFkaXgoKE0pLCAoUyksIDIpCi0jZGVmaW5lIG1wX3Rvb2N0YWwoTSwgUykgICBtcF90b3JhZGl4KChNKSwgKFMpLCA4KQotI2RlZmluZSBtcF90b2RlY2ltYWwoTSwgUykgbXBfdG9yYWRpeCgoTSksIChTKSwgMTApCi0jZGVmaW5lIG1wX3RvaGV4KE0sIFMpICAgICBtcF90b3JhZGl4KChNKSwgKFMpLCAxNikKLQotLyogbG93bGV2ZWwgZnVuY3Rpb25zLCBkbyBub3QgY2FsbCEgKi8KLWludCBzX21wX2FkZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKLWludCBzX21wX3N1YihtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKLSNkZWZpbmUgc19tcF9tdWwoYSwgYiwgYykgc19tcF9tdWxfZGlncyhhLCBiLCBjLCAoYSktPnVzZWQgKyAoYiktPnVzZWQgKyAxKQotaW50IGZhc3Rfc19tcF9tdWxfZGlncyhtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBpbnQgZGlncyk7Ci1pbnQgc19tcF9tdWxfZGlncyhtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBpbnQgZGlncyk7Ci1pbnQgZmFzdF9zX21wX211bF9oaWdoX2RpZ3MobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYywgaW50IGRpZ3MpOwotaW50IHNfbXBfbXVsX2hpZ2hfZGlncyhtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBpbnQgZGlncyk7Ci1pbnQgZmFzdF9zX21wX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci1pbnQgc19tcF9zcXIobXBfaW50ICphLCBtcF9pbnQgKmIpOwotaW50IG1wX2thcmF0c3ViYV9tdWwobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci1pbnQgbXBfdG9vbV9tdWwobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7Ci1pbnQgbXBfa2FyYXRzdWJhX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYik7Ci1pbnQgbXBfdG9vbV9zcXIobXBfaW50ICphLCBtcF9pbnQgKmIpOwotaW50IGZhc3RfbXBfaW52bW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOwotaW50IG1wX2ludm1vZF9zbG93IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKLWludCBmYXN0X21wX21vbnRnb21lcnlfcmVkdWNlKG1wX2ludCAqYSwgbXBfaW50ICptLCBtcF9kaWdpdCBtcCk7Ci1pbnQgbXBfZXhwdG1vZF9mYXN0KG1wX2ludCAqRywgbXBfaW50ICpYLCBtcF9pbnQgKlAsIG1wX2ludCAqWSwgaW50IG1vZGUpOwotaW50IHNfbXBfZXhwdG1vZCAobXBfaW50ICogRywgbXBfaW50ICogWCwgbXBfaW50ICogUCwgbXBfaW50ICogWSwgaW50IG1vZGUpOwotdm9pZCBibl9yZXZlcnNlKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pOwotCi1leHRlcm4gY29uc3QgY2hhciAqbXBfc19ybWFwOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgIH0KLSNlbmRpZgotCi0jZW5kaWYKLQotCi0vKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy9sdGNfdG9tbWF0aC5oLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0LmgKaW5kZXggODM2OWM3NC4uNWUxMjdkYyAxMDA2NDQKLS0tIGEvc3JjL2hlYWRlcnMvdG9tY3J5cHQuaAorKysgYi9zcmMvaGVhZGVycy90b21jcnlwdC5oCkBAIC0xNiw4ICsxNiw4IEBACiAjZW5kaWYKIAogLyogdmVyc2lvbiAqLwotI2RlZmluZSBDUllQVCAgIDB4MDEwNQotI2RlZmluZSBTQ1JZUFQgICIxLjA1IgorI2RlZmluZSBDUllQVCAgIDB4MDExNgorI2RlZmluZSBTQ1JZUFQgICIxLjE2IgogCiAvKiBtYXggc2l6ZSBvZiBlaXRoZXIgYSBjaXBoZXIvaGFzaCBibG9jayBvciBzeW1tZXRyaWMga2V5IFtsYXJnZXN0IG9mIHRoZSB0d29dICovCiAjZGVmaW5lIE1BWEJMT0NLU0laRSAgMTI4CkBAIC01OSw3ICs1OSw4IEBACiAgICBDUllQVF9QS19OT1RfRk9VTkQsICAgICAvKiBLZXkgbm90IGZvdW5kIGluIGtleXJpbmcgKi8KICAgIENSWVBUX1BLX0lOVkFMSURfU0laRSwgIC8qIEludmFsaWQgc2l6ZSBpbnB1dCBmb3IgUEsgcGFyYW1ldGVycyAqLwogCi0gICBDUllQVF9JTlZBTElEX1BSSU1FX1NJWkUvKiBJbnZhbGlkIHNpemUgb2YgcHJpbWUgcmVxdWVzdGVkICovCisgICBDUllQVF9JTlZBTElEX1BSSU1FX1NJWkUsLyogSW52YWxpZCBzaXplIG9mIHByaW1lIHJlcXVlc3RlZCAqLworICAgQ1JZUFRfUEtfSU5WQUxJRF9QQURESU5HIC8qIEludmFsaWQgcGFkZGluZyBvbiBpbnB1dCAqLwogfTsKIAogI2luY2x1ZGUgPHRvbWNyeXB0X2NmZy5oPgpAQCAtNjksNiArNzAsNyBAQAogI2luY2x1ZGUgPHRvbWNyeXB0X21hYy5oPgogI2luY2x1ZGUgPHRvbWNyeXB0X3BybmcuaD4KICNpbmNsdWRlIDx0b21jcnlwdF9way5oPgorI2luY2x1ZGUgPHRvbWNyeXB0X21hdGguaD4KICNpbmNsdWRlIDx0b21jcnlwdF9taXNjLmg+CiAjaW5jbHVkZSA8dG9tY3J5cHRfYXJnY2hrLmg+CiAjaW5jbHVkZSA8dG9tY3J5cHRfcGtjcy5oPgpAQCAtODEsNSArODMsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0LmgsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMzoyNSAkICovCisvKiAkUmV2aXNpb246IDEuMjAgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDE6NDU6MTQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmggYi9zcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaAppbmRleCBlZjM0NGVlLi5jZmM5M2FkIDEwMDY0NAotLS0gYS9zcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaAorKysgYi9zcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaApAQCAtNywxOSArNywzMiBAQAogLyogdGhpcyBpcyB0aGUgZGVmYXVsdCBMaWJUb21DcnlwdCBtYWNybyAgKi8KIHZvaWQgY3J5cHRfYXJnY2hrKGNoYXIgKnYsIGNoYXIgKnMsIGludCBkKTsKICNkZWZpbmUgTFRDX0FSR0NISyh4KSBpZiAoISh4KSkgeyBjcnlwdF9hcmdjaGsoI3gsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0KKyNkZWZpbmUgTFRDX0FSR0NIS1ZEKHgpIExUQ19BUkdDSEsoeCkKIAogI2VsaWYgQVJHVFlQRSA9PSAxCiAKIC8qIGZhdGFsIHR5cGUgb2YgZXJyb3IgKi8KICNkZWZpbmUgTFRDX0FSR0NISyh4KSBhc3NlcnQoKHgpKQorI2RlZmluZSBMVENfQVJHQ0hLVkQoeCkgTFRDX0FSR0NISyh4KQogCiAjZWxpZiBBUkdUWVBFID09IDIKIAorI2RlZmluZSBMVENfQVJHQ0hLKHgpIGlmICghKHgpKSB7IGZwcmludGYoc3RkZXJyLCAiXG53YXJuaW5nOiBBUkdDSEsgZmFpbGVkIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9CisjZGVmaW5lIExUQ19BUkdDSEtWRCh4KSBMVENfQVJHQ0hLKHgpCisKKyNlbGlmIEFSR1RZUEUgPT0gMworCiAjZGVmaW5lIExUQ19BUkdDSEsoeCkgCisjZGVmaW5lIExUQ19BUkdDSEtWRCh4KSBMVENfQVJHQ0hLKHgpCisKKyNlbGlmIEFSR1RZUEUgPT0gNAorCisjZGVmaW5lIExUQ19BUkdDSEsoeCkgICBpZiAoISh4KSkgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworI2RlZmluZSBMVENfQVJHQ0hLVkQoeCkgaWYgKCEoeCkpIHJldHVybjsKIAogI2VuZGlmCiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmgsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wOC8yNyAyMDo1MDoyMSAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCmluZGV4IDFkNWJjNmMuLjdmZWFlNmUgMTAwNjQ0Ci0tLSBhL3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCisrKyBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCkBAIC03LDIxICs3LDQ2IEBACiAjaWZuZGVmIFRPTUNSWVBUX0NGR19ICiAjZGVmaW5lIFRPTUNSWVBUX0NGR19ICiAKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTFRDX0NBTEwgX19jZGVjbAorI2Vsc2UKKyNpZm5kZWYgTFRDX0NBTEwKKyAgICNkZWZpbmUgTFRDX0NBTEwKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTFRDX0VYUE9SVAorI2RlZmluZSBMVENfRVhQT1JUCisjZW5kaWYKKworLyogY2VydGFpbiBwbGF0Zm9ybXMgdXNlIG1hY3JvcyBmb3IgdGhlc2UsIG1ha2luZyB0aGUgcHJvdG90eXBlcyBicm9rZW4gKi8KKyNpZm5kZWYgTFRDX05PX1BST1RPVFlQRVMKKwogLyogeW91IGNhbiBjaGFuZ2UgaG93IG1lbW9yeSBhbGxvY2F0aW9uIHdvcmtzIC4uLiAqLwotdm9pZCAqWE1BTExPQyhzaXplX3Qgbik7Ci12b2lkICpYUkVBTExPQyh2b2lkICpwLCBzaXplX3Qgbik7Ci12b2lkICpYQ0FMTE9DKHNpemVfdCBuLCBzaXplX3Qgcyk7Ci12b2lkIFhGUkVFKHZvaWQgKnApOworTFRDX0VYUE9SVCB2b2lkICogTFRDX0NBTEwgWE1BTExPQyhzaXplX3Qgbik7CitMVENfRVhQT1JUIHZvaWQgKiBMVENfQ0FMTCBYUkVBTExPQyh2b2lkICpwLCBzaXplX3Qgbik7CitMVENfRVhQT1JUIHZvaWQgKiBMVENfQ0FMTCBYQ0FMTE9DKHNpemVfdCBuLCBzaXplX3Qgcyk7CitMVENfRVhQT1JUIHZvaWQgTFRDX0NBTEwgWEZSRUUodm9pZCAqcCk7CisKK0xUQ19FWFBPUlQgdm9pZCBMVENfQ0FMTCBYUVNPUlQodm9pZCAqYmFzZSwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwgaW50KCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisKIAogLyogY2hhbmdlIHRoZSBjbG9jayBmdW5jdGlvbiB0b28gKi8KLSBjbG9ja190IFhDTE9DSyh2b2lkKTsKK0xUQ19FWFBPUlQgY2xvY2tfdCBMVENfQ0FMTCBYQ0xPQ0sodm9pZCk7CiAKIC8qIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zICovCi12b2lkICpYTUVNQ1BZKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOwotaW50ICAgWE1FTUNNUChjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuKTsKK0xUQ19FWFBPUlQgdm9pZCAqIExUQ19DQUxMIFhNRU1DUFkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CitMVENfRVhQT1JUIGludCAgIExUQ19DQUxMIFhNRU1DTVAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3Qgbik7CitMVENfRVhQT1JUIHZvaWQgKiBMVENfQ0FMTCBYTUVNU0VUKHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CiAKLS8qIHR5cGUgb2YgYXJndW1lbnQgY2hlY2tpbmcsIDA9ZGVmYXVsdCwgMT1mYXRhbCBhbmQgMj1ub25lICovCi0jZGVmaW5lIEFSR1RZUEUgIDAKK0xUQ19FWFBPUlQgaW50ICAgTFRDX0NBTEwgWFNUUkNNUChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOworCisjZW5kaWYKKworLyogdHlwZSBvZiBhcmd1bWVudCBjaGVja2luZywgMD1kZWZhdWx0LCAxPWZhdGFsIGFuZCAyPWVycm9yK2NvbnRpbnVlLCAzPW5vdGhpbmcgKi8KKyNpZm5kZWYgQVJHVFlQRQorICAgI2RlZmluZSBBUkdUWVBFICAwCisjZW5kaWYKIAogLyogQ29udHJvbHMgZW5kaWFuZXNzIGFuZCBzaXplIG9mIHJlZ2lzdGVycy4gIExlYXZlIHVuY29tbWVudGVkIHRvIGdldCBwbGF0Zm9ybSBuZXV0cmFsIFtzbG93ZXJdIGNvZGUgCiAgKiAKQEAgLTMxLDcgKzU2LDcgQEAKICAqLwogCiAvKiBkZXRlY3QgeDg2LTMyIG1hY2hpbmVzIHNvbWV3aGF0ICovCi0jaWYgZGVmaW5lZChJTlRFTF9DQykgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoV0lOMzIpKSB8fCAoZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19pMzg2X18pKSkKKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIChkZWZpbmVkKElOVEVMX0NDKSB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChXSU4zMikpIHx8IChkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX0RKR1BQX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX2kzODZfXykpKSkKICAgICNkZWZpbmUgRU5ESUFOX0xJVFRMRQogICAgI2RlZmluZSBFTkRJQU5fMzJCSVRXT1JECiAgICAjZGVmaW5lIExUQ19GQVNUCkBAIC00NSwxMyArNzAsMzIgQEAKICNlbmRpZgogCiAvKiBkZXRlY3QgYW1kNjQgKi8KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKICAgICNkZWZpbmUgRU5ESUFOXzY0QklUV09SRAogICAgI2RlZmluZSBMVENfRkFTVAogICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcKICNlbmRpZgogCisvKiBkZXRlY3QgUFBDMzIgKi8KKyNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIGRlZmluZWQoTFRDX1BQQzMyKQorICAgI2RlZmluZSBFTkRJQU5fQklHCisgICAjZGVmaW5lIEVORElBTl8zMkJJVFdPUkQKKyAgICNkZWZpbmUgTFRDX0ZBU1QKKyAgICNkZWZpbmUgTFRDX0ZBU1RfVFlQRSAgICB1bnNpZ25lZCBsb25nCisjZW5kaWYgICAKKworLyogZGV0ZWN0IHNwYXJjIGFuZCBzcGFyYzY0ICovCisjaWYgZGVmaW5lZChfX3NwYXJjX18pCisgICNkZWZpbmUgRU5ESUFOX0JJRworICAjaWYgZGVmaW5lZChfX2FyY2g2NF9fKQorICAgICNkZWZpbmUgRU5ESUFOXzY0QklUV09SRAorICAjZWxzZQorICAgICNkZWZpbmUgRU5ESUFOXzMyQklUV09SRAorICAjZW5kaWYKKyNlbmRpZgorCisKICNpZmRlZiBMVENfTk9fRkFTVAogICAgI2lmZGVmIExUQ19GQVNUCiAgICAgICAjdW5kZWYgTFRDX0ZBU1QKQEAgLTc3LDM2ICsxMjEsMTYgQEAKIC8qICNkZWZpbmUgRU5ESUFOXzY0QklUV09SRCAqLwogCiAjaWYgKGRlZmluZWQoRU5ESUFOX0JJRykgfHwgZGVmaW5lZChFTkRJQU5fTElUVExFKSkgJiYgIShkZWZpbmVkKEVORElBTl8zMkJJVFdPUkQpIHx8IGRlZmluZWQoRU5ESUFOXzY0QklUV09SRCkpCi0gICAgI2Vycm9yIFlvdSBtdXN0IHNwZWNpZnkgYSB3b3JkIHNpemUgYXMgd2VsbCBhcyBlbmRpYW5lc3MgaW4gbXljcnlwdF9jZmcuaAorICAgICNlcnJvciBZb3UgbXVzdCBzcGVjaWZ5IGEgd29yZCBzaXplIGFzIHdlbGwgYXMgZW5kaWFuZXNzIGluIHRvbWNyeXB0X2NmZy5oCiAjZW5kaWYKIAogI2lmICEoZGVmaW5lZChFTkRJQU5fQklHKSB8fCBkZWZpbmVkKEVORElBTl9MSVRUTEUpKQogICAgI2RlZmluZSBFTkRJQU5fTkVVVFJBTAogI2VuZGlmCiAKLS8qIHBhY2tldCBjb2RlICovCi0jaWYgZGVmaW5lZChNUlNBKSB8fCBkZWZpbmVkKE1ESCkgfHwgZGVmaW5lZChNRUNDKQotICAgICNkZWZpbmUgUEFDS0VUCi0KLSAgICAvKiBzaXplIG9mIGEgcGFja2V0IGhlYWRlciBpbiBieXRlcyAqLwotICAgICNkZWZpbmUgUEFDS0VUX1NJWkUgICAgICAgICAgICA0Ci0KLSAgICAvKiBTZWN0aW9uIHRhZ3MgKi8KLSAgICAjZGVmaW5lIFBBQ0tFVF9TRUNUX1JTQSAgICAgICAgMAotICAgICNkZWZpbmUgUEFDS0VUX1NFQ1RfREggICAgICAgICAxCi0gICAgI2RlZmluZSBQQUNLRVRfU0VDVF9FQ0MgICAgICAgIDIKLSAgICAjZGVmaW5lIFBBQ0tFVF9TRUNUX0RTQSAgICAgICAgMwotCi0gICAgLyogU3Vic2VjdGlvbiBUYWdzIGZvciB0aGUgZmlyc3QgdGhyZWUgc2VjdGlvbnMgKi8KLSAgICAjZGVmaW5lIFBBQ0tFVF9TVUJfS0VZICAgICAgICAgMAotICAgICNkZWZpbmUgUEFDS0VUX1NVQl9FTkNSWVBURUQgICAxCi0gICAgI2RlZmluZSBQQUNLRVRfU1VCX1NJR05FRCAgICAgIDIKLSAgICAjZGVmaW5lIFBBQ0tFVF9TVUJfRU5DX0tFWSAgICAgMwotI2VuZGlmCi0KICNlbmRpZgogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjE5ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjE5OjQ4ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmgKaW5kZXggNGYwMDMwMi4uNjJhMjZjNyAxMDA2NDQKLS0tIGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmgKKysrIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmgKQEAgLTM3LDYgKzM3LDIwIEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBLU0VFRAorc3RydWN0IGtzZWVkX2tleSB7CisgICAgdWxvbmczMiBLWzMyXSwgZEtbMzJdOworfTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0tBU1VNSQorc3RydWN0IGthc3VtaV9rZXkgeworICAgIHVsb25nMzIgS0xpMVs4XSwgS0xpMls4XSwKKyAgICAgICAgICAgIEtPaTFbOF0sIEtPaTJbOF0sIEtPaTNbOF0sCisgICAgICAgICAgICBLSWkxWzhdLCBLSWkyWzhdLCBLSWkzWzhdOworfTsKKyNlbmRpZgorCiAjaWZkZWYgWFRFQQogc3RydWN0IHh0ZWFfa2V5IHsKICAgIHVuc2lnbmVkIGxvbmcgQVszMl0sIEJbMzJdOwpAQCAtMTY0LDEwICsxNzgsMTcgQEAKICNpZmRlZiBBTlVCSVMKICAgIHN0cnVjdCBhbnViaXNfa2V5ICAgYW51YmlzOwogI2VuZGlmCisjaWZkZWYgS1NFRUQKKyAgIHN0cnVjdCBrc2VlZF9rZXkgICAga3NlZWQ7CisjZW5kaWYKKyNpZmRlZiBMVENfS0FTVU1JCisgICBzdHJ1Y3Qga2FzdW1pX2tleSAgIGthc3VtaTsKKyNlbmRpZiAgCiAgICB2b2lkICAgKmRhdGE7CiB9IHN5bW1ldHJpY19rZXk7CiAKLS8qIEEgYmxvY2sgY2lwaGVyIEVDQiBzdHJ1Y3R1cmUgKi8KKyNpZmRlZiBMVENfRUNCX01PREUKKy8qKiBBIGJsb2NrIGNpcGhlciBFQ0Igc3RydWN0dXJlICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAvKiogVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgY2hvc2VuICovCiAgICBpbnQgICAgICAgICAgICAgICAgIGNpcGhlciwgCkBAIC0xNzYsOCArMTk3LDEwIEBACiAgICAvKiogVGhlIHNjaGVkdWxlZCBrZXkgKi8gICAgICAgICAgICAgICAgICAgICAgIAogICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7CiB9IHN5bW1ldHJpY19FQ0I7CisjZW5kaWYKIAotLyogQSBibG9jayBjaXBoZXIgQ0ZCIHN0cnVjdHVyZSAqLworI2lmZGVmIExUQ19DRkJfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIENGQiBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKi8KICAgIGludCAgICAgICAgICAgICAgICAgY2lwaGVyLCAKQEAgLTE5Miw4ICsyMTUsMTAgQEAKICAgIC8qKiBUaGUgc2NoZWR1bGVkIGtleSAqLwogICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7CiB9IHN5bW1ldHJpY19DRkI7CisjZW5kaWYKIAotLyogQSBibG9jayBjaXBoZXIgT0ZCIHN0cnVjdHVyZSAqLworI2lmZGVmIExUQ19PRkJfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIE9GQiBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKi8KICAgIGludCAgICAgICAgICAgICAgICAgY2lwaGVyLCAKQEAgLTIwNiw4ICsyMzEsMTAgQEAKICAgIC8qKiBUaGUgc2NoZWR1bGVkIGtleSAqLwogICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7CiB9IHN5bW1ldHJpY19PRkI7CisjZW5kaWYKIAotLyogQSBibG9jayBjaXBoZXIgQ0JDIHN0cnVjdHVyZSAqLworI2lmZGVmIExUQ19DQkNfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIENCQyBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKi8KICAgIGludCAgICAgICAgICAgICAgICAgY2lwaGVyLCAKQEAgLTIxOCw4ICsyNDUsMTEgQEAKICAgIC8qKiBUaGUgc2NoZWR1bGVkIGtleSAqLwogICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7CiB9IHN5bW1ldHJpY19DQkM7CisjZW5kaWYKIAotLyogQSBibG9jayBjaXBoZXIgQ1RSIHN0cnVjdHVyZSAqLworCisjaWZkZWYgTFRDX0NUUl9NT0RFCisvKiogQSBibG9jayBjaXBoZXIgQ1RSIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGNob3NlbiAqLwogICAgaW50ICAgICAgICAgICAgICAgICBjaXBoZXIsCkBAIC0yMzYsOCArMjY2LDU1IEBACiAgICAvKiogVGhlIHNjaGVkdWxlZCBrZXkgKi8KICAgIHN5bW1ldHJpY19rZXkgICAgICAga2V5OwogfSBzeW1tZXRyaWNfQ1RSOworI2VuZGlmCiAKLS8qIGNpcGhlciBkZXNjcmlwdG9yIHRhYmxlLCBsYXN0IGVudHJ5IGhhcyAibmFtZSA9PSBOVUxMIiB0byBtYXJrIHRoZSBlbmQgb2YgdGFibGUgKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorLyoqIEEgTFJXIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKG11c3QgYmUgYSAxMjgtYml0IGJsb2NrIGNpcGhlcikgKi8KKyAgICBpbnQgICAgICAgICAgICAgICBjaXBoZXI7CisKKyAgICAvKiogVGhlIGN1cnJlbnQgSVYgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBJVlsxNl0sCisgCisgICAgLyoqIHRoZSB0d2VhayBrZXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICB0d2Vha1sxNl0sCisKKyAgICAvKiogVGhlIGN1cnJlbnQgcGFkLCBpdCdzIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCAxNSBieXRlcyBhZ2FpbnN0IHRoZSB0d2VhayBrZXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICBwYWRbMTZdOworCisgICAgLyoqIFRoZSBzY2hlZHVsZWQgc3ltbWV0cmljIGtleSAqLworICAgIHN5bW1ldHJpY19rZXkgICAgIGtleTsKKworI2lmZGVmIExSV19UQUJMRVMKKyAgICAvKiogVGhlIHByZS1jb21wdXRlZCBtdWx0aXBsaWNhdGlvbiB0YWJsZSAqLworICAgIHVuc2lnbmVkIGNoYXIgICAgIFBDWzE2XVsyNTZdWzE2XTsKKyNlbmRpZgorfSBzeW1tZXRyaWNfTFJXOworI2VuZGlmCisKKyNpZmRlZiBMVENfRjhfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIEY4IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGNob3NlbiAqLworICAgaW50ICAgICAgICAgICAgICAgICBjaXBoZXIsIAorICAgLyoqIFRoZSBibG9jayBzaXplIG9mIHRoZSBnaXZlbiBjaXBoZXIgKi8gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsZW4sIAorICAgLyoqIFRoZSBwYWRkaW5nIG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW47CisgICAvKiogVGhlIGN1cnJlbnQgSVYgKi8KKyAgIHVuc2lnbmVkIGNoYXIgICAgICAgSVZbTUFYQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgTUlWW01BWEJMT0NLU0laRV07CisgICAvKiogQ3VycmVudCBibG9jayBjb3VudCAqLworICAgdWxvbmczMiAgICAgICAgICAgICBibG9ja2NudDsKKyAgIC8qKiBUaGUgc2NoZWR1bGVkIGtleSAqLworICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7Cit9IHN5bW1ldHJpY19GODsKKyNlbmRpZgorCisKKy8qKiBjaXBoZXIgZGVzY3JpcHRvciB0YWJsZSwgbGFzdCBlbnRyeSBoYXMgIm5hbWUgPT0gTlVMTCIgdG8gbWFyayB0aGUgZW5kIG9mIHRhYmxlICovCiBleHRlcm4gc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciB7CiAgICAvKiogbmFtZSBvZiBjaXBoZXIgKi8KICAgIGNoYXIgKm5hbWU7CkBAIC0yNjMsMTQgKzM0MCwxNiBAQAogICAgICAgQHBhcmFtIHB0ICAgICAgVGhlIHBsYWludGV4dAogICAgICAgQHBhcmFtIGN0ICAgICAgW291dF0gVGhlIGNpcGhlcnRleHQKICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICovCi0gICB2b2lkICgqZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CisgICBpbnQgKCplY2JfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKICAgIC8qKiBEZWNyeXB0IGEgYmxvY2sKICAgICAgIEBwYXJhbSBjdCAgICAgIFRoZSBjaXBoZXJ0ZXh0CiAgICAgICBAcGFyYW0gcHQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CiAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgdm9pZCAoKmVjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgaW50ICgqZWNiX2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiAgICAvKiogVGVzdCB0aGUgYmxvY2sgY2lwaGVyCiAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0aW5nIGhhcyBiZWVuIGRpc2FibGVkCiAgICAqLwpAQCAtMjkzLDE2ICszNzIsMTggQEAKICAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CiAgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcwogICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICAgICovCi0gICB2b2lkICgqYWNjZWxfZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgaW50ICgqYWNjZWxfZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogCiAgICAvKiogQWNjZWxlcmF0ZWQgRUNCIGRlY3J5cHRpb24gCiAgICAgICAgQHBhcmFtIHB0ICAgICAgUGxhaW50ZXh0CiAgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAogICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKICAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAgICAqLwotICAgdm9pZCAoKmFjY2VsX2VjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKyAgIGludCAoKmFjY2VsX2VjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIAogICAgLyoqIEFjY2VsZXJhdGVkIENCQyBlbmNyeXB0aW9uIAogICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dApAQCAtMzEwLDggKzM5MSw5IEBACiAgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcwogICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCiAgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9jYmNfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGJsb2NrcywgdW5zaWduZWQgY2hhciAqSVYsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgaW50ICgqYWNjZWxfY2JjX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHVuc2lnbmVkIGNoYXIgKklWLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIAogICAgLyoqIEFjY2VsZXJhdGVkIENCQyBkZWNyeXB0aW9uIAogICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dApAQCAtMzE5LDggKzQwMSw5IEBACiAgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcwogICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCiAgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9jYmNfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGJsb2NrcywgdW5zaWduZWQgY2hhciAqSVYsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgaW50ICgqYWNjZWxfY2JjX2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHVuc2lnbmVkIGNoYXIgKklWLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIAogICAgLyoqIEFjY2VsZXJhdGVkIENUUiBlbmNyeXB0aW9uIAogICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dApAQCAtMzI5LDEyICs0MTIsMzYgQEAKICAgICAgICBAcGFyYW0gSVYgICAgICBUaGUgaW5pdGlhbCB2YWx1ZSAoaW5wdXQvb3V0cHV0KQogICAgICAgIEBwYXJhbSBtb2RlICAgIGxpdHRsZSBvciBiaWcgZW5kaWFuIGNvdW50ZXIgKG1vZGU9MCBvciBtb2RlPTEpCiAgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9jdHJfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGJsb2NrcywgdW5zaWduZWQgY2hhciAqSVYsIGludCBtb2RlLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKyAgIGludCAoKmFjY2VsX2N0cl9lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCB1bnNpZ25lZCBjaGFyICpJViwgaW50IG1vZGUsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworCisgICAvKiogQWNjZWxlcmF0ZWQgTFJXIAorICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAorICAgICAgIEBwYXJhbSBjdCAgICAgIENpcGhlcnRleHQKKyAgICAgICBAcGFyYW0gYmxvY2tzICBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzCisgICAgICAgQHBhcmFtIElWICAgICAgVGhlIGluaXRpYWwgdmFsdWUgKGlucHV0L291dHB1dCkKKyAgICAgICBAcGFyYW0gdHdlYWsgICBUaGUgTFJXIHR3ZWFrCisgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgKi8KKyAgIGludCAoKmFjY2VsX2xyd19lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCB1bnNpZ25lZCBjaGFyICpJViwgY29uc3QgdW5zaWduZWQgY2hhciAqdHdlYWssIHN5bW1ldHJpY19rZXkgKnNrZXkpOworCisgICAvKiogQWNjZWxlcmF0ZWQgTFJXIAorICAgICAgIEBwYXJhbSBjdCAgICAgIENpcGhlcnRleHQKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gYmxvY2tzICBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzCisgICAgICAgQHBhcmFtIElWICAgICAgVGhlIGluaXRpYWwgdmFsdWUgKGlucHV0L291dHB1dCkKKyAgICAgICBAcGFyYW0gdHdlYWsgICBUaGUgTFJXIHR3ZWFrCisgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgKi8KKyAgIGludCAoKmFjY2VsX2xyd19kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCB1bnNpZ25lZCBjaGFyICpJViwgY29uc3QgdW5zaWduZWQgY2hhciAqdHdlYWssIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogCiAgICAvKiogQWNjZWxlcmF0ZWQgQ0NNIHBhY2tldCAob25lLXNob3QpCiAgICAgICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkgdG8gdXNlCiAgICAgICAgQHBhcmFtIGtleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSB1c2tleSAgICAgIEEgcHJldmlvdXNseSBzY2hlZHVsZWQga2V5IFtvcHRpb25hbCBjYW4gYmUgTlVMTF0KICAgICAgICBAcGFyYW0gbm9uY2UgICAgICBUaGUgc2Vzc2lvbiBub25jZSBbdXNlIG9uY2VdCiAgICAgICAgQHBhcmFtIG5vbmNlbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgbm9uY2UKICAgICAgICBAcGFyYW0gaGVhZGVyICAgICBUaGUgaGVhZGVyIGZvciB0aGUgc2Vzc2lvbgpAQCAtMzQ3LDggKzQ1NCw5IEBACiAgICAgICAgQHBhcmFtIGRpcmVjdGlvbiAgRW5jcnlwdCBvciBEZWNyeXB0IGRpcmVjdGlvbiAoMCBvciAxKQogICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9jY21fbWVtb3J5KSgKKyAgIGludCAoKmFjY2VsX2NjbV9tZW1vcnkpKAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgc3ltbWV0cmljX2tleSAgICAgICAqdXNrZXksCiAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCiAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLApAQCAtMzU3LDIwICs0NjUsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBkaXJlY3Rpb24pOwogCiAgICAvKiogQWNjZWxlcmF0ZWQgR0NNIHBhY2tldCAob25lIHNob3QpCi0gICAgICAgQHBhcmFtIGtleSAgICAgICAgICAgICAgIFRoZSBzZWNyZXQga2V5Ci0gICAgICAgQHBhcmFtIGtleWxlbiAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkKLSAgICAgICBAcGFyYW0gSVYgICAgICAgICAgICAgICAgVGhlIGluaXRpYWwgdmVjdG9yIAotICAgICAgIEBwYXJhbSBJVmxlbiAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHZlY3RvcgotICAgICAgIEBwYXJhbSBhZGF0YSAgICAgICAgICAgICBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIChoZWFkZXIpCi0gICAgICAgQHBhcmFtIGFkYXRhbGVuICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGFkYXRhCi0gICAgICAgQHBhcmFtIHB0ICAgICAgICAgICAgICAgIFRoZSBwbGFpbnRleHQKLSAgICAgICBAcGFyYW0gcHRsZW4gICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChjaXBoZXJ0ZXh0IGxlbmd0aCBpcyB0aGUgc2FtZSkKLSAgICAgICBAcGFyYW0gY3QgICAgICAgICAgICAgICAgVGhlIGNpcGhlcnRleHQKLSAgICAgICBAcGFyYW0gdGFnICAgICAgICAgICAgICAgW291dF0gVGhlIE1BQyB0YWcKLSAgICAgICBAcGFyYW0gdGFnbGVuICAgICAgICAgICAgW2luL291dF0gVGhlIE1BQyB0YWcgbGVuZ3RoCi0gICAgICAgQHBhcmFtIGRpcmVjdGlvbiAgICAgICAgIEVuY3J5cHQgb3IgRGVjcnlwdCBtb2RlIChHQ01fRU5DUllQVCBvciBHQ01fREVDUllQVCkKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgICAgIEBwYXJhbSBrZXlsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0gSVYgICAgICAgICBUaGUgaW5pdGlhbCB2ZWN0b3IgCisgICAgICAgQHBhcmFtIElWbGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCB2ZWN0b3IKKyAgICAgICBAcGFyYW0gYWRhdGEgICAgICBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIChoZWFkZXIpCisgICAgICAgQHBhcmFtIGFkYXRhbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgYWRhdGEKKyAgICAgICBAcGFyYW0gcHQgICAgICAgICBUaGUgcGxhaW50ZXh0CisgICAgICAgQHBhcmFtIHB0bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChjaXBoZXJ0ZXh0IGxlbmd0aCBpcyB0aGUgc2FtZSkKKyAgICAgICBAcGFyYW0gY3QgICAgICAgICBUaGUgY2lwaGVydGV4dAorICAgICAgIEBwYXJhbSB0YWcgICAgICAgIFtvdXRdIFRoZSBNQUMgdGFnCisgICAgICAgQHBhcmFtIHRhZ2xlbiAgICAgW2luL291dF0gVGhlIE1BQyB0YWcgbGVuZ3RoCisgICAgICAgQHBhcmFtIGRpcmVjdGlvbiAgRW5jcnlwdCBvciBEZWNyeXB0IG1vZGUgKEdDTV9FTkNSWVBUIG9yIEdDTV9ERUNSWVBUKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcwogICAgKi8KLSAgIHZvaWQgKCphY2NlbF9nY21fbWVtb3J5KSgKKyAgIGludCAoKmFjY2VsX2djbV9tZW1vcnkpKAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCiAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsICAgICB1bnNpZ25lZCBsb25nIElWbGVuLAogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkYXRhLCAgdW5zaWduZWQgbG9uZyBhZGF0YWxlbiwKQEAgLTM3OCwxMiArNDg3LDU1IEBACiAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAogICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uKTsKKworICAgLyoqIEFjY2VsZXJhdGVkIG9uZSBzaG90IE9NQUMgCisgICAgICAgQHBhcmFtIGtleSAgICAgICAgICAgIFRoZSBzZWNyZXQga2V5CisgICAgICAgQHBhcmFtIGtleWxlbiAgICAgICAgIFRoZSBrZXkgbGVuZ3RoIChvY3RldHMpIAorICAgICAgIEBwYXJhbSBpbiAgICAgICAgICAgICBUaGUgbWVzc2FnZSAKKyAgICAgICBAcGFyYW0gaW5sZW4gICAgICAgICAgTGVuZ3RoIG9mIG1lc3NhZ2UgKG9jdGV0cykKKyAgICAgICBAcGFyYW0gb3V0ICAgICAgICAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRhZworICAgICAgIEBwYXJhbSBvdXRsZW4gICAgICAgICBbaW4vb3V0XSBJbml0aWFsIGFuZCBmaW5hbCBzaXplIG9mIG91dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm9tYWNfbWVtb3J5KSgKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBvbmUgc2hvdCBYQ0JDIAorICAgICAgIEBwYXJhbSBrZXkgICAgICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgICAgIEBwYXJhbSBrZXlsZW4gICAgICAgICBUaGUga2V5IGxlbmd0aCAob2N0ZXRzKSAKKyAgICAgICBAcGFyYW0gaW4gICAgICAgICAgICAgVGhlIG1lc3NhZ2UgCisgICAgICAgQHBhcmFtIGlubGVuICAgICAgICAgIExlbmd0aCBvZiBtZXNzYWdlIChvY3RldHMpCisgICAgICAgQHBhcmFtIG91dCAgICAgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0YWcKKyAgICAgICBAcGFyYW0gb3V0bGVuICAgICAgICAgW2luL291dF0gSW5pdGlhbCBhbmQgZmluYWwgc2l6ZSBvZiBvdXQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCp4Y2JjX21lbW9yeSkoCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCisgICAvKiogQWNjZWxlcmF0ZWQgb25lIHNob3QgRjkgCisgICAgICAgQHBhcmFtIGtleSAgICAgICAgICAgIFRoZSBzZWNyZXQga2V5CisgICAgICAgQHBhcmFtIGtleWxlbiAgICAgICAgIFRoZSBrZXkgbGVuZ3RoIChvY3RldHMpIAorICAgICAgIEBwYXJhbSBpbiAgICAgICAgICAgICBUaGUgbWVzc2FnZSAKKyAgICAgICBAcGFyYW0gaW5sZW4gICAgICAgICAgTGVuZ3RoIG9mIG1lc3NhZ2UgKG9jdGV0cykKKyAgICAgICBAcGFyYW0gb3V0ICAgICAgICAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRhZworICAgICAgIEBwYXJhbSBvdXRsZW4gICAgICAgICBbaW4vb3V0XSBJbml0aWFsIGFuZCBmaW5hbCBzaXplIG9mIG91dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgICAgIEByZW1hcmsgUmVxdWlyZXMgbWFudWFsIHBhZGRpbmcKKyAgICovCisgICBpbnQgKCpmOV9tZW1vcnkpKAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKIH0gY2lwaGVyX2Rlc2NyaXB0b3JbXTsKIAogI2lmZGVmIEJMT1dGSVNICiBpbnQgYmxvd2Zpc2hfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIGJsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIGJsb3dmaXNoX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYmxvd2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IGJsb3dmaXNoX3Rlc3Qodm9pZCk7CiB2b2lkIGJsb3dmaXNoX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgYmxvd2Zpc2hfa2V5c2l6ZShpbnQgKmtleXNpemUpOwpAQCAtMzkyLDggKzU0NCw4IEBACiAKICNpZmRlZiBSQzUKIGludCByYzVfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIHJjNV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCByYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByYzVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCByYzVfdGVzdCh2b2lkKTsKIHZvaWQgcmM1X2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgcmM1X2tleXNpemUoaW50ICprZXlzaXplKTsKQEAgLTQwMiw4ICs1NTQsOCBAQAogCiAjaWZkZWYgUkM2CiBpbnQgcmM2X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCByYzZfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgcmM2X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmM2X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmM2X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgcmM2X3Rlc3Qodm9pZCk7CiB2b2lkIHJjNl9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IHJjNl9rZXlzaXplKGludCAqa2V5c2l6ZSk7CkBAIC00MTIsOCArNTY0LDggQEAKIAogI2lmZGVmIFJDMgogaW50IHJjMl9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgcmMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIHJjMl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJjMl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJjMl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IHJjMl90ZXN0KHZvaWQpOwogdm9pZCByYzJfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCByYzJfa2V5c2l6ZShpbnQgKmtleXNpemUpOwpAQCAtNDIyLDggKzU3NCw4IEBACiAKICNpZmRlZiBTQUZFUlAKIGludCBzYWZlcnBfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIHNhZmVycF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBzYWZlcnBfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcnBfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcnBfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCBzYWZlcnBfdGVzdCh2b2lkKTsKIHZvaWQgc2FmZXJwX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgc2FmZXJwX2tleXNpemUoaW50ICprZXlzaXplKTsKQEAgLTQzNSw4ICs1ODcsOCBAQAogaW50IHNhZmVyX3NrNjRfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgc2FmZXJfazEyOF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCBzYWZlcl9zazEyOF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICprZXkpOwotdm9pZCBzYWZlcl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKmtleSk7CitpbnQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICprZXkpOworaW50IHNhZmVyX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqa2V5KTsKIGludCBzYWZlcl9rNjRfdGVzdCh2b2lkKTsKIGludCBzYWZlcl9zazY0X3Rlc3Qodm9pZCk7CiBpbnQgc2FmZXJfc2sxMjhfdGVzdCh2b2lkKTsKQEAgLTQ2MSwxMyArNjEzLDEzIEBACiAjZGVmaW5lIGFlc19lbmNfa2V5c2l6ZSAgICAgICAgIHJpam5kYWVsX2VuY19rZXlzaXplCiAKIGludCByaWpuZGFlbF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgcmlqbmRhZWxfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgcmlqbmRhZWxfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByaWpuZGFlbF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJpam5kYWVsX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgcmlqbmRhZWxfdGVzdCh2b2lkKTsKIHZvaWQgcmlqbmRhZWxfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCByaWpuZGFlbF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CiBpbnQgcmlqbmRhZWxfZW5jX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCByaWpuZGFlbF9lbmNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByaWpuZGFlbF9lbmNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIHZvaWQgcmlqbmRhZWxfZW5jX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgcmlqbmRhZWxfZW5jX2tleXNpemUoaW50ICprZXlzaXplKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHJpam5kYWVsX2Rlc2MsIGFlc19kZXNjOwpAQCAtNDc2LDggKzYyOCw4IEBACiAKICNpZmRlZiBYVEVBCiBpbnQgeHRlYV9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgeHRlYV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCB4dGVhX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgeHRlYV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHh0ZWFfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCB4dGVhX3Rlc3Qodm9pZCk7CiB2b2lkIHh0ZWFfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCB4dGVhX2tleXNpemUoaW50ICprZXlzaXplKTsKQEAgLTQ4Niw4ICs2MzgsOCBAQAogCiAjaWZkZWYgVFdPRklTSAogaW50IHR3b2Zpc2hfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIHR3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgdHdvZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHR3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCB0d29maXNoX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgdHdvZmlzaF90ZXN0KHZvaWQpOwogdm9pZCB0d29maXNoX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgdHdvZmlzaF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CkBAIC00OTYsMTQgKzY0OCwxNCBAQAogCiAjaWZkZWYgREVTCiBpbnQgZGVzX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBkZXNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgZGVzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgZGVzX3Rlc3Qodm9pZCk7CiB2b2lkIGRlc19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IGRlc19rZXlzaXplKGludCAqa2V5c2l6ZSk7CiBpbnQgZGVzM19zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgZGVzM19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBkZXMzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzM19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGRlczNfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCBkZXMzX3Rlc3Qodm9pZCk7CiB2b2lkIGRlczNfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCBkZXMzX2tleXNpemUoaW50ICprZXlzaXplKTsKQEAgLTUxMiw4ICs2NjQsOCBAQAogCiAjaWZkZWYgQ0FTVDUKIGludCBjYXN0NV9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgY2FzdDVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgY2FzdDVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBjYXN0NV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGNhc3Q1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgY2FzdDVfdGVzdCh2b2lkKTsKIHZvaWQgY2FzdDVfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCBjYXN0NV9rZXlzaXplKGludCAqa2V5c2l6ZSk7CkBAIC01MjIsOCArNjc0LDggQEAKIAogI2lmZGVmIE5PRUtFT04KIGludCBub2VrZW9uX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7Ci12b2lkIG5vZWtlb25fZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgbm9la2Vvbl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IG5vZWtlb25fdGVzdCh2b2lkKTsKIHZvaWQgbm9la2Vvbl9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IG5vZWtlb25fa2V5c2l6ZShpbnQgKmtleXNpemUpOwpAQCAtNTMyLDggKzY4NCw4IEBACiAKICNpZmRlZiBTS0lQSkFDSwogaW50IHNraXBqYWNrX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBza2lwamFja19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBza2lwamFja19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHNraXBqYWNrX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgc2tpcGphY2tfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKIGludCBza2lwamFja190ZXN0KHZvaWQpOwogdm9pZCBza2lwamFja19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IHNraXBqYWNrX2tleXNpemUoaW50ICprZXlzaXplKTsKQEAgLTU0Miw4ICs2OTQsOCBAQAogCiAjaWZkZWYgS0hBWkFECiBpbnQga2hhemFkX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBraGF6YWRfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQga2hhemFkX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQga2hhemFkX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQga2hhemFkX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQga2hhemFkX3Rlc3Qodm9pZCk7CiB2b2lkIGtoYXphZF9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IGtoYXphZF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CkBAIC01NTIsMTUgKzcwNCwzNSBAQAogCiAjaWZkZWYgQU5VQklTCiBpbnQgYW51YmlzX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwotdm9pZCBhbnViaXNfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKLXZvaWQgYW51YmlzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYW51YmlzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYW51YmlzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CiBpbnQgYW51YmlzX3Rlc3Qodm9pZCk7CiB2b2lkIGFudWJpc19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOwogaW50IGFudWJpc19rZXlzaXplKGludCAqa2V5c2l6ZSk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBhbnViaXNfZGVzYzsKICNlbmRpZgogCi0jaWZkZWYgRUNCCisjaWZkZWYgS1NFRUQKK2ludCBrc2VlZF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBrc2VlZF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGtzZWVkX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQga3NlZWRfdGVzdCh2b2lkKTsKK3ZvaWQga3NlZWRfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBrc2VlZF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBrc2VlZF9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBMVENfS0FTVU1JCitpbnQga2FzdW1pX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGthc3VtaV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGthc3VtaV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGthc3VtaV90ZXN0KHZvaWQpOwordm9pZCBrYXN1bWlfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBrYXN1bWlfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3Iga2FzdW1pX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIExUQ19FQ0JfTU9ERQogaW50IGVjYl9zdGFydChpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAogICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0VDQiAqZWNiKTsKIGludCBlY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfRUNCICplY2IpOwpAQCAtNTY4LDcgKzc0MCw3IEBACiBpbnQgZWNiX2RvbmUoc3ltbWV0cmljX0VDQiAqZWNiKTsKICNlbmRpZgogCi0jaWZkZWYgQ0ZCCisjaWZkZWYgTFRDX0NGQl9NT0RFCiBpbnQgY2ZiX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAogICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0NGQiAqY2ZiKTsKIGludCBjZmJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ0ZCICpjZmIpOwpAQCAtNTc4LDcgKzc1MCw3IEBACiBpbnQgY2ZiX2RvbmUoc3ltbWV0cmljX0NGQiAqY2ZiKTsKICNlbmRpZgogCi0jaWZkZWYgT0ZCCisjaWZkZWYgTFRDX09GQl9NT0RFCiBpbnQgb2ZiX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAogICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX09GQiAqb2ZiKTsKIGludCBvZmJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfT0ZCICpvZmIpOwpAQCAtNTg4LDcgKzc2MCw3IEBACiBpbnQgb2ZiX2RvbmUoc3ltbWV0cmljX09GQiAqb2ZiKTsKICNlbmRpZgogCi0jaWZkZWYgQ0JDCisjaWZkZWYgTFRDX0NCQ19NT0RFCiBpbnQgY2JjX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCiAgICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0NCQyAqY2JjKTsKIGludCBjYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ0JDICpjYmMpOwpAQCAtNTk4LDEwICs3NzAsMTEgQEAKIGludCBjYmNfZG9uZShzeW1tZXRyaWNfQ0JDICpjYmMpOwogI2VuZGlmCiAKLSNpZmRlZiBDVFIKKyNpZmRlZiBMVENfQ1RSX01PREUKIAogI2RlZmluZSBDVFJfQ09VTlRFUl9MSVRUTEVfRU5ESUFOICAgIDAKICNkZWZpbmUgQ1RSX0NPVU5URVJfQklHX0VORElBTiAgICAgICAxCisjZGVmaW5lIExUQ19DVFJfUkZDMzY4NiAgICAgICAgICAgICAgMgogCiBpbnQgY3RyX3N0YXJ0KCAgICAgICAgICAgICAgIGludCAgIGNpcGhlciwKICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsCkBAIC02MTMsOCArNzg2LDQ1IEBACiBpbnQgY3RyX2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nICpsZW4sIHN5bW1ldHJpY19DVFIgKmN0cik7CiBpbnQgY3RyX3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NUUiAqY3RyKTsKIGludCBjdHJfZG9uZShzeW1tZXRyaWNfQ1RSICpjdHIpOworaW50IGN0cl90ZXN0KHZvaWQpOwogI2VuZGlmCi0gICAgCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworI2RlZmluZSBMUldfRU5DUllQVCAwCisjZGVmaW5lIExSV19ERUNSWVBUIDEKKworaW50IGxyd19zdGFydCggICAgICAgICAgICAgICBpbnQgICBjaXBoZXIsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgIGludCBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnR3ZWFrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsIAorICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19MUlcgKmxydyk7CitpbnQgbHJ3X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0xSVyAqbHJ3KTsKK2ludCBscndfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfTFJXICpscncpOworaW50IGxyd19nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyAqbGVuLCBzeW1tZXRyaWNfTFJXICpscncpOworaW50IGxyd19zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19MUlcgKmxydyk7CitpbnQgbHJ3X2RvbmUoc3ltbWV0cmljX0xSVyAqbHJ3KTsKK2ludCBscndfdGVzdCh2b2lkKTsKKworLyogZG9uJ3QgY2FsbCAqLworaW50IGxyd19wcm9jZXNzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIGludCBtb2RlLCBzeW1tZXRyaWNfTFJXICpscncpOworI2VuZGlmICAgIAorCisjaWZkZWYgTFRDX0Y4X01PREUKK2ludCBmOF9zdGFydCggICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdF9rZXksICAgICAgICAgICAgICAgaW50ICBza2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsICAgc3ltbWV0cmljX0Y4ICAqZjgpOworaW50IGY4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0Y4ICpmOCk7CitpbnQgZjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfRjggKmY4KTsKK2ludCBmOF9nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyAqbGVuLCBzeW1tZXRyaWNfRjggKmY4KTsKK2ludCBmOF9zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19GOCAqZjgpOworaW50IGY4X2RvbmUoc3ltbWV0cmljX0Y4ICpmOCk7CitpbnQgZjhfdGVzdF9tb2RlKHZvaWQpOworI2VuZGlmCisKKwogaW50IGZpbmRfY2lwaGVyKGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGZpbmRfY2lwaGVyX2FueShjb25zdCBjaGFyICpuYW1lLCBpbnQgYmxvY2tsZW4sIGludCBrZXlsZW4pOwogaW50IGZpbmRfY2lwaGVyX2lkKHVuc2lnbmVkIGNoYXIgSUQpOwpAQCAtNjIyLDggKzgzMiw4IEBACiBpbnQgdW5yZWdpc3Rlcl9jaXBoZXIoY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciAqY2lwaGVyKTsKIGludCBjaXBoZXJfaXNfdmFsaWQoaW50IGlkeCk7CiAKLUxUQ19NVVRFWF9QUk9UTyhsdGNfY2lwaGVyX211dGV4KTsKK0xUQ19NVVRFWF9QUk9UTyhsdGNfY2lwaGVyX211dGV4KQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuNDYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTMgMjM6MDk6MzggJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmggYi9zcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaAppbmRleCBkYjkwMDQ4Li5lMDhiYzkyIDEwMDY0NAotLS0gYS9zcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaAorKysgYi9zcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaApAQCAtMiwxNiArMiwxMDUgQEAKICNkZWZpbmUgVE9NQ1JZUFRfQ1VTVE9NX0hfCiAKIC8qIG1hY3JvcyBmb3IgdmFyaW91cyBsaWJjIGZ1bmN0aW9ucyB5b3UgY2FuIGNoYW5nZSBmb3IgZW1iZWRkZWQgdGFyZ2V0cyAqLworI2lmbmRlZiBYTUFMTE9DCisgICAjaWZkZWYgbWFsbG9jIAorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCiAjZGVmaW5lIFhNQUxMT0MgIG1hbGxvYworI2VuZGlmCisjaWZuZGVmIFhSRUFMTE9DCisgICAjaWZkZWYgcmVhbGxvYyAKKyAgICNkZWZpbmUgTFRDX05PX1BST1RPVFlQRVMKKyAgICNlbmRpZgogI2RlZmluZSBYUkVBTExPQyByZWFsbG9jCisjZW5kaWYKKyNpZm5kZWYgWENBTExPQworICAgI2lmZGVmIGNhbGxvYyAKKyAgICNkZWZpbmUgTFRDX05PX1BST1RPVFlQRVMKKyAgICNlbmRpZgogI2RlZmluZSBYQ0FMTE9DICBjYWxsb2MKKyNlbmRpZgorI2lmbmRlZiBYRlJFRQorICAgI2lmZGVmIGZyZWUKKyAgICNkZWZpbmUgTFRDX05PX1BST1RPVFlQRVMKKyAgICNlbmRpZgogI2RlZmluZSBYRlJFRSAgICBmcmVlCisjZW5kaWYKIAorI2lmbmRlZiBYTUVNU0VUCisgICAjaWZkZWYgbWVtc2V0CisgICAjZGVmaW5lIExUQ19OT19QUk9UT1RZUEVTCisgICAjZW5kaWYKICNkZWZpbmUgWE1FTVNFVCAgbWVtc2V0CisjZW5kaWYKKyNpZm5kZWYgWE1FTUNQWQorICAgI2lmZGVmIG1lbWNweQorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCiAjZGVmaW5lIFhNRU1DUFkgIG1lbWNweQorI2VuZGlmCisjaWZuZGVmIFhNRU1DTVAKKyAgICNpZmRlZiBtZW1jbXAgCisgICAjZGVmaW5lIExUQ19OT19QUk9UT1RZUEVTCisgICAjZW5kaWYKKyNkZWZpbmUgWE1FTUNNUCAgbWVtY21wCisjZW5kaWYKKyNpZm5kZWYgWFNUUkNNUAorICAgI2lmZGVmIHN0cmNtcAorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCisjZGVmaW5lIFhTVFJDTVAgc3RyY21wCisjZW5kaWYKIAorI2lmbmRlZiBYQ0xPQ0sKICNkZWZpbmUgWENMT0NLICAgY2xvY2sKKyNlbmRpZgorI2lmbmRlZiBYQ0xPQ0tTX1BFUl9TRUMKICNkZWZpbmUgWENMT0NLU19QRVJfU0VDIENMT0NLU19QRVJfU0VDCisjZW5kaWYKKworI2lmbmRlZiBYUVNPUlQKKyAgICNpZmRlZiBxc29ydAorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCisjZGVmaW5lIFhRU09SVCBxc29ydAorI2VuZGlmCisKKy8qIEVhc3kgYnV0dG9uPyAqLworI2lmZGVmIExUQ19FQVNZCisgICAjZGVmaW5lIExUQ19OT19DSVBIRVJTCisgICAjZGVmaW5lIFJJSk5EQUVMCisgICAjZGVmaW5lIEJMT1dGSVNICisgICAjZGVmaW5lIERFUworICAgI2RlZmluZSBDQVNUNQorICAgCisgICAjZGVmaW5lIExUQ19OT19NT0RFUworICAgI2RlZmluZSBMVENfRUNCX01PREUKKyAgICNkZWZpbmUgTFRDX0NCQ19NT0RFCisgICAjZGVmaW5lIExUQ19DVFJfTU9ERQorICAgCisgICAjZGVmaW5lIExUQ19OT19IQVNIRVMKKyAgICNkZWZpbmUgU0hBMQorICAgI2RlZmluZSBTSEE1MTIKKyAgICNkZWZpbmUgU0hBMzg0CisgICAjZGVmaW5lIFNIQTI1NgorICAgI2RlZmluZSBTSEEyMjQKKyAgIAorICAgI2RlZmluZSBMVENfTk9fTUFDUworICAgI2RlZmluZSBITUFDCisgICAjZGVmaW5lIE9NQUMKKyAgICNkZWZpbmUgQ0NNX01PREUKKworICAgI2RlZmluZSBMVENfTk9fUFJOR1MKKyAgICNkZWZpbmUgU1BSTkcKKyAgICNkZWZpbmUgWUFSUk9XCisgICAjZGVmaW5lIERFVlJBTkRPTQorICAgI2RlZmluZSBUUllfVVJBTkRPTV9GSVJTVAorICAgICAgCisgICAjZGVmaW5lIExUQ19OT19QSworICAgI2RlZmluZSBNUlNBCisgICAjZGVmaW5lIE1FQ0MKKyNlbmRpZiAgIAogCiAvKiBVc2Ugc21hbGwgY29kZSB3aGVyZSBwb3NzaWJsZSAqLwogLyogI2RlZmluZSBMVENfU01BTExfQ09ERSAqLwpAQCAtNjUsNiArMTU0LDggQEAKICNkZWZpbmUgS0hBWkFECiAjZGVmaW5lIEFOVUJJUwogI2RlZmluZSBBTlVCSVNfVFdFQUsKKyNkZWZpbmUgS1NFRUQKKyNkZWZpbmUgTFRDX0tBU1VNSQogCiAjZW5kaWYgLyogTFRDX05PX0NJUEhFUlMgKi8KIApAQCAtNzIsMTEgKzE2MywyMyBAQAogLyogLS0tPiBCbG9jayBDaXBoZXIgTW9kZXMgb2YgT3BlcmF0aW9uIDwtLS0gKi8KICNpZm5kZWYgTFRDX05PX01PREVTCiAKLSNkZWZpbmUgQ0ZCCi0jZGVmaW5lIE9GQgotI2RlZmluZSBFQ0IKLSNkZWZpbmUgQ0JDCi0jZGVmaW5lIENUUgorI2RlZmluZSBMVENfQ0ZCX01PREUKKyNkZWZpbmUgTFRDX09GQl9NT0RFCisjZGVmaW5lIExUQ19FQ0JfTU9ERQorI2RlZmluZSBMVENfQ0JDX01PREUKKyNkZWZpbmUgTFRDX0NUUl9NT0RFCisKKy8qIEY4IGNoYWluaW5nIG1vZGUgKi8KKyNkZWZpbmUgTFRDX0Y4X01PREUKKworLyogTFJXIG1vZGUgKi8KKyNkZWZpbmUgTFRDX0xSV19NT0RFCisjaWZuZGVmIExUQ19OT19UQUJMRVMKKyAgIC8qIGxpa2UgR0NNIG1vZGUgdGhpcyB3aWxsIGVuYWJsZSAxNiA4eDEyOCB0YWJsZXMgWzY0S0JdIHRoYXQgbWFrZQorICAgICogc2Vla2luZyB2ZXJ5IGZhc3QuICAKKyAgICAqLworICAgI2RlZmluZSBMUldfVEFCTEVTCisjZW5kaWYKIAogI2VuZGlmIC8qIExUQ19OT19NT0RFUyAqLwogCkBAIC05NiwxNSArMTk5LDE5IEBACiAjZGVmaW5lIE1EMgogI2RlZmluZSBSSVBFTUQxMjgKICNkZWZpbmUgUklQRU1EMTYwCisjZGVmaW5lIFJJUEVNRDI1NgorI2RlZmluZSBSSVBFTUQzMjAKIAogI2VuZGlmIC8qIExUQ19OT19IQVNIRVMgKi8KIAogLyogLS0tPiBNQUMgZnVuY3Rpb25zIDwtLS0gKi8KICNpZm5kZWYgTFRDX05PX01BQ1MKIAotI2RlZmluZSBITUFDCi0jZGVmaW5lIE9NQUMKLSNkZWZpbmUgUE1BQworI2RlZmluZSBMVENfSE1BQworI2RlZmluZSBMVENfT01BQworI2RlZmluZSBMVENfUE1BQworI2RlZmluZSBMVENfWENCQworI2RlZmluZSBMVENfRjlfTU9ERQogI2RlZmluZSBQRUxJQ0FOCiAKICNpZiBkZWZpbmVkKFBFTElDQU4pICYmICFkZWZpbmVkKFJJSk5EQUVMKQpAQCAtMTE0LDEzICsyMjEsMTIgQEAKIC8qIC0tLT4gRW5jcnlwdCArIEF1dGhlbnRpY2F0ZSBNb2RlcyA8LS0tICovCiAKICNkZWZpbmUgRUFYX01PREUKLSNpZiBkZWZpbmVkKEVBWF9NT0RFKSAmJiAhKGRlZmluZWQoQ1RSKSAmJiBkZWZpbmVkKE9NQUMpKQorI2lmIGRlZmluZWQoRUFYX01PREUpICYmICEoZGVmaW5lZChMVENfQ1RSX01PREUpICYmIGRlZmluZWQoTFRDX09NQUMpKQogICAgI2Vycm9yIEVBWF9NT0RFIHJlcXVpcmVzIENUUiBhbmQgT01BQyBtb2RlCiAjZW5kaWYKIAogI2RlZmluZSBPQ0JfTU9ERQogI2RlZmluZSBDQ01fTU9ERQotCiAjZGVmaW5lIEdDTV9NT0RFCiAKIC8qIFVzZSA2NEtpQiB0YWJsZXMgKi8KQEAgLTEyOCw2ICsyMzQsMTEgQEAKICAgICNkZWZpbmUgR0NNX1RBQkxFUyAKICNlbmRpZgogCisvKiBVU0UgU1NFMj8gcmVxdWlyZXMgR0NDIHdvcmtzIG9uIHg4Nl8zMiBhbmQgeDg2XzY0Ki8KKyNpZmRlZiBHQ01fVEFCTEVTCisvKiAjZGVmaW5lIEdDTV9UQUJMRVNfU1NFMiAqLworI2VuZGlmCisKICNlbmRpZiAvKiBMVENfTk9fTUFDUyAqLwogCiAvKiBWYXJpb3VzIHRpZGJpdHMgb2YgbW9kZXJuIG5lYXRvbmVzcyAqLwpAQCAtMTQyLDggKzI1Myw4IEBACiAvKiAwID0gcmlqbmRhZWxfZW5jIDEgPSBhZXNfZW5jLCAyID0gcmlqbmRhZWwgW2Z1bGxdLCAzID0gYWVzIFtmdWxsXSAqLwogI2RlZmluZSBZQVJST1dfQUVTIDAKIAotI2lmIGRlZmluZWQoWUFSUk9XKSAmJiAhZGVmaW5lZChDVFIpCi0gICAjZXJyb3IgWUFSUk9XIHJlcXVpcmVzIENUUiBjaGFpbmluZyBtb2RlIHRvIGJlIGRlZmluZWQhCisjaWYgZGVmaW5lZChZQVJST1cpICYmICFkZWZpbmVkKExUQ19DVFJfTU9ERSkKKyAgICNlcnJvciBZQVJST1cgcmVxdWlyZXMgTFRDX0NUUl9NT0RFIGNoYWluaW5nIG1vZGUgdG8gYmUgZGVmaW5lZCEKICNlbmRpZgogCiAvKiBhIFBSTkcgdGhhdCBzaW1wbHkgcmVhZHMgZnJvbSBhbiBhdmFpbGFibGUgc3lzdGVtIHNvdXJjZSAqLwpAQCAtMTY5LDQyICsyODAsNDQgQEAKIAogI2VuZGlmIC8qIExUQ19OT19QUk5HUyAqLwogCisvKiAtLS0+IG1hdGggcHJvdmlkZXI/IDwtLS0gKi8KKyNpZm5kZWYgTFRDX05PX01BVEgKKworLyogTGliVG9tTWF0aCAqLworLyogI2RlZmluZSBMVE1fREVTQyAqLworCisvKiBUb21zRmFzdE1hdGggKi8KKy8qICNkZWZpbmUgVEZNX0RFU0MgKi8KKworI2VuZGlmIC8qIExUQ19OT19NQVRIICovCisKIC8qIC0tLT4gUHVibGljIEtleSBDcnlwdG8gPC0tLSAqLwogI2lmbmRlZiBMVENfTk9fUEsKIAorLyogSW5jbHVkZSBSU0Egc3VwcG9ydCAqLwogI2RlZmluZSBNUlNBCiAKKy8qIEluY2x1ZGUgS2F0amEgKGEgUmFiaW4gdmFyaWFudCBsaWtlIFJTQSkgKi8KKy8qICNkZWZpbmUgTUtBVCAqLyAKKwogLyogRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtICovCiAjZGVmaW5lIE1EU0EKLS8qIE1heCBkaWZmIGJldHdlZW4gZ3JvdXAgYW5kIG1vZHVsdXMgc2l6ZSBpbiBieXRlcyAqLwotI2RlZmluZSBNRFNBX0RFTFRBICAgICA1MTIKLS8qIE1heCBEU0EgZ3JvdXAgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdCBhbGxvd3MgNGstYml0IGdyb3VwcykgKi8KLSNkZWZpbmUgTURTQV9NQVhfR1JPVVAgNTEyCi0KLS8qIERpZmZpZS1IZWxsbWFuICovCi0jZGVmaW5lIE1ESAotLyogU3VwcG9ydGVkIEtleSBTaXplcyAqLwotI2RlZmluZSBESDc2OAotI2RlZmluZSBESDEwMjQKLSNkZWZpbmUgREgxMjgwCi0jZGVmaW5lIERIMTUzNgotI2RlZmluZSBESDE3OTIKLSNkZWZpbmUgREgyMDQ4Ci0jZGVmaW5lIERIMjU2MAotI2RlZmluZSBESDMwNzIKLSNkZWZpbmUgREg0MDk2CiAKIC8qIEVDQyAqLwogI2RlZmluZSBNRUNDCi0vKiBTdXBwb3J0ZWQgS2V5IFNpemVzICovCi0jZGVmaW5lIEVDQzE5MgotI2RlZmluZSBFQ0MyMjQKLSNkZWZpbmUgRUNDMjU2Ci0jZGVmaW5lIEVDQzM4NAotI2RlZmluZSBFQ0M1MjEKIAotLyogSW5jbHVkZSB0aGUgTVBJIGZ1bmN0aW9uYWxpdHk/ICAocmVxdWlyZWQgYnkgdGhlIFBLIGFsZ29yaXRobXMpICovCi0jZGVmaW5lIE1QSQorLyogdXNlIFNoYW1pcidzIHRyaWNrIGZvciBwb2ludCBtdWwgKHNwZWVkcyB1cCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uKSAqLworI2RlZmluZSBMVENfRUNDX1NIQU1JUgorCisjaWYgZGVmaW5lZChURk1fREVTQykgJiYgZGVmaW5lZChNRUNDKQorICAgI2RlZmluZSBNRUNDX0FDQ0VMCisjZW5kaWYgICAKKworLyogZG8gd2Ugd2FudCBmaXhlZCBwb2ludCBFQ0MgKi8KKy8qICNkZWZpbmUgTUVDQ19GUCAqLworCisvKiBUaW1pbmcgUmVzaXN0YW50PyAqLworLyogI2RlZmluZSBMVENfRUNDX1RJTUlOR19SRVNJU1RBTlQgKi8KIAogI2VuZGlmIC8qIExUQ19OT19QSyAqLwogCkBAIC0yMTYsNDEgKzMyOSw3NSBAQAogCiAvKiBJbmNsdWRlIEFTTi4xIERFUiAocmVxdWlyZWQgYnkgRFNBL1JTQSkgKi8KICNkZWZpbmUgTFRDX0RFUgorCisjZW5kaWYgLyogTFRDX05PX1BLQ1MgKi8KKworLyogY2xlYW51cCAqLworCisjaWZkZWYgTUVDQworLyogU3VwcG9ydGVkIEVDQyBLZXkgU2l6ZXMgKi8KKyNpZm5kZWYgTFRDX05PX0NVUlZFUworICAgI2RlZmluZSBFQ0MxMTIKKyAgICNkZWZpbmUgRUNDMTI4CisgICAjZGVmaW5lIEVDQzE2MAorICAgI2RlZmluZSBFQ0MxOTIKKyAgICNkZWZpbmUgRUNDMjI0CisgICAjZGVmaW5lIEVDQzI1NgorICAgI2RlZmluZSBFQ0MzODQKKyAgICNkZWZpbmUgRUNDNTIxCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNRUNDKSB8fCBkZWZpbmVkKE1SU0EpIHx8IGRlZmluZWQoTURTQSkgfHwgZGVmaW5lZChNS0FUSkEpCisgICAvKiBJbmNsdWRlIHRoZSBNUEkgZnVuY3Rpb25hbGl0eT8gIChyZXF1aXJlZCBieSB0aGUgUEsgYWxnb3JpdGhtcykgKi8KKyAgICNkZWZpbmUgTVBJCisjZW5kaWYKKworI2lmZGVmIE1SU0EKKyAgICNkZWZpbmUgUEtDU18xCisjZW5kaWYgICAKKwogI2lmIGRlZmluZWQoTFRDX0RFUikgJiYgIWRlZmluZWQoTVBJKSAKICAgICNlcnJvciBBU04uMSBERVIgcmVxdWlyZXMgTVBJIGZ1bmN0aW9uYWxpdHkKICNlbmRpZgogCi0jaWYgKGRlZmluZWQoTURTQSkgfHwgZGVmaW5lZChNUlNBKSkgJiYgIWRlZmluZWQoTFRDX0RFUikKLSAgICNlcnJvciBSU0EvRFNBIHJlcXVpcmVzIEFTTi4xIERFUiBmdW5jdGlvbmFsaXR5LCBtYWtlIHN1cmUgTFRDX0RFUiBpcyBlbmFibGVkCisjaWYgKGRlZmluZWQoTURTQSkgfHwgZGVmaW5lZChNUlNBKSB8fCBkZWZpbmVkKE1FQ0MpIHx8IGRlZmluZWQoTUtBVEpBKSkgJiYgIWRlZmluZWQoTFRDX0RFUikKKyAgICNlcnJvciBQSyByZXF1aXJlcyBBU04uMSBERVIgZnVuY3Rpb25hbGl0eSwgbWFrZSBzdXJlIExUQ19ERVIgaXMgZW5hYmxlZAogI2VuZGlmCiAKLSNlbmRpZiAvKiBMVENfTk9fUEtDUyAqLwotCi0jZW5kaWYKLQotCiAvKiBUSFJFQUQgbWFuYWdlbWVudCAqLwotCiAjaWZkZWYgTFRDX1BUSFJFQUQKIAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAogI2RlZmluZSBMVENfTVVURVhfR0xPQkFMKHgpICAgcHRocmVhZF9tdXRleF90IHggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogI2RlZmluZSBMVENfTVVURVhfUFJPVE8oeCkgICAgZXh0ZXJuIHB0aHJlYWRfbXV0ZXhfdCB4OworI2RlZmluZSBMVENfTVVURVhfVFlQRSh4KSAgICAgcHRocmVhZF9tdXRleF90IHg7CisjZGVmaW5lIExUQ19NVVRFWF9JTklUKHgpICAgICBwdGhyZWFkX211dGV4X2luaXQoeCwgTlVMTCk7CiAjZGVmaW5lIExUQ19NVVRFWF9MT0NLKHgpICAgICBwdGhyZWFkX211dGV4X2xvY2soeCk7CiAjZGVmaW5lIExUQ19NVVRFWF9VTkxPQ0soeCkgICBwdGhyZWFkX211dGV4X3VubG9jayh4KTsKIAotI2Vsc2UgCisjZWxzZQogCiAvKiBkZWZhdWx0IG5vIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBMVENfTVVURVhfR0xPQkFMKHgpCiAjZGVmaW5lIExUQ19NVVRFWF9QUk9UTyh4KQorI2RlZmluZSBMVENfTVVURVhfVFlQRSh4KQorI2RlZmluZSBMVENfTVVURVhfSU5JVCh4KQogI2RlZmluZSBMVENfTVVURVhfTE9DSyh4KQogI2RlZmluZSBMVENfTVVURVhfVU5MT0NLKHgpCiAKICNlbmRpZgogCisvKiBEZWJ1Z2dlcnMgKi8KKworLyogZGVmaW5lIHRoaXMgaWYgeW91IHVzZSBWYWxncmluZCwgbm90ZTogaXQgQ0hBTkdFUyB0aGUgd2F5IFNPQkVSLTEyOCBhbmQgUkM0IHdvcmsgKHNlZSB0aGUgY29kZSkgKi8KKy8qICNkZWZpbmUgTFRDX1ZBTEdSSU5EICovCisKKyNlbmRpZgorCisKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmgsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMTcgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTg6MDA6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjY2ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjUwOjExICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaAppbmRleCBhMDUzNGY5Li5kOTkxNmFjIDEwMDY0NAotLS0gYS9zcmMvaGVhZGVycy90b21jcnlwdF9oYXNoLmgKKysrIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oCkBAIC03MCw2ICs3MCwyMiBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgUklQRU1EMjU2CitzdHJ1Y3Qgcm1kMjU2X3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdWxvbmczMiBjdXJsZW4sIHN0YXRlWzhdOworfTsKKyNlbmRpZgorCisjaWZkZWYgUklQRU1EMzIwCitzdHJ1Y3Qgcm1kMzIwX3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdWxvbmczMiBjdXJsZW4sIHN0YXRlWzEwXTsKK307CisjZW5kaWYKKwogI2lmZGVmIFdISVJMUE9PTAogc3RydWN0IHdoaXJscG9vbF9zdGF0ZSB7CiAgICAgdWxvbmc2NCBsZW5ndGgsIHN0YXRlWzhdOwpAQCAtODcsNiArMTAzLDcgQEAKICNlbmRpZgogCiB0eXBlZGVmIHVuaW9uIEhhc2hfc3RhdGUgeworICAgIGNoYXIgZHVtbXlbMV07CiAjaWZkZWYgQ0hDX0hBU0gKICAgICBzdHJ1Y3QgY2hjX3N0YXRlIGNoYzsKICNlbmRpZgpAQCAtMTIwLDkgKzEzNywxNiBAQAogI2lmZGVmIFJJUEVNRDE2MAogICAgIHN0cnVjdCBybWQxNjBfc3RhdGUgcm1kMTYwOwogI2VuZGlmCisjaWZkZWYgUklQRU1EMjU2CisgICAgc3RydWN0IHJtZDI1Nl9zdGF0ZSBybWQyNTY7CisjZW5kaWYKKyNpZmRlZiBSSVBFTUQzMjAKKyAgICBzdHJ1Y3Qgcm1kMzIwX3N0YXRlIHJtZDMyMDsKKyNlbmRpZgogICAgIHZvaWQgKmRhdGE7CiB9IGhhc2hfc3RhdGU7CiAKKy8qKiBoYXNoIGRlc2NyaXB0b3IgKi8KIGV4dGVybiAgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgewogICAgIC8qKiBuYW1lIG9mIGhhc2ggKi8KICAgICBjaGFyICpuYW1lOwpAQCAtMTU5LDYgKzE4MywxMiBAQAogICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKICAgICAqLwogICAgIGludCAoKnRlc3QpKHZvaWQpOworCisgICAgLyogYWNjZWxlcmF0ZWQgaG1hYyBjYWxsYmFjazogaWYgeW91IG5lZWQgdG8tZG8gbXVsdGlwbGUgcGFja2V0cyBqdXN0IHVzZSB0aGUgZ2VuZXJpYyBobWFjX21lbW9yeSBhbmQgcHJvdmlkZSBhIGhhc2ggY2FsbGJhY2sgKi8KKyAgICBpbnQgICgqaG1hY19ibG9jaykoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKIH0gaGFzaF9kZXNjcmlwdG9yW107CiAKICNpZmRlZiBDSENfSEFTSApAQCAtMjcyLDE0ICszMDIsMzIgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBybWQxNjBfZGVzYzsKICNlbmRpZgogCisjaWZkZWYgUklQRU1EMjU2CitpbnQgcm1kMjU2X2luaXQoaGFzaF9zdGF0ZSAqIG1kKTsKK2ludCBybWQyNTZfcHJvY2VzcyhoYXNoX3N0YXRlICogbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBybWQyNTZfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKmhhc2gpOworaW50IHJtZDI1Nl90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHJtZDI1Nl9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBSSVBFTUQzMjAKK2ludCBybWQzMjBfaW5pdChoYXNoX3N0YXRlICogbWQpOworaW50IHJtZDMyMF9wcm9jZXNzKGhhc2hfc3RhdGUgKiBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IHJtZDMyMF9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqaGFzaCk7CitpbnQgcm1kMzIwX3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igcm1kMzIwX2Rlc2M7CisjZW5kaWYKKworCiBpbnQgZmluZF9oYXNoKGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGZpbmRfaGFzaF9pZCh1bnNpZ25lZCBjaGFyIElEKTsKK2ludCBmaW5kX2hhc2hfb2lkKGNvbnN0IHVuc2lnbmVkIGxvbmcgKklELCB1bnNpZ25lZCBsb25nIElEbGVuKTsKIGludCBmaW5kX2hhc2hfYW55KGNvbnN0IGNoYXIgKm5hbWUsIGludCBkaWdlc3RsZW4pOwogaW50IHJlZ2lzdGVyX2hhc2goY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgKmhhc2gpOwogaW50IHVucmVnaXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciAqaGFzaCk7CiBpbnQgaGFzaF9pc192YWxpZChpbnQgaWR4KTsKIAotTFRDX01VVEVYX1BST1RPKGx0Y19oYXNoX211dGV4KTsKK0xUQ19NVVRFWF9QUk9UTyhsdGNfaGFzaF9tdXRleCkKIAogaW50IGhhc2hfbWVtb3J5KGludCBoYXNoLCAKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIApAQCAtMzI3LDUgKzM3NSw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xMiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuMTkgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDUgMDE6MzY6NDMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjLmggYi9zcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaAppbmRleCA0MTFiMWJjLi40MmJmNjgwIDEwMDY0NAotLS0gYS9zcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaAorKysgYi9zcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaApAQCAtMSw0ICsxLDQgQEAKLSNpZmRlZiBITUFDCisjaWZkZWYgTFRDX0hNQUMKIHR5cGVkZWYgc3RydWN0IEhtYWNfc3RhdGUgewogICAgICBoYXNoX3N0YXRlICAgICBtZDsKICAgICAgaW50ICAgICAgICAgICAgaGFzaDsKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCB1bnNpZ25lZCBsb25nICpkc3RsZW4pOwogI2VuZGlmCiAKLSNpZmRlZiBPTUFDCisjaWZkZWYgTFRDX09NQUMKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50ICAgICAgICAgICAgIGNpcGhlcl9pZHgsIApAQCAtNTMsNyArNTMsNyBAQAogaW50IG9tYWNfdGVzdCh2b2lkKTsKICNlbmRpZiAvKiBPTUFDICovCiAKLSNpZmRlZiBQTUFDCisjaWZkZWYgTFRDX1BNQUMKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgY2hhciAgICAgTHNbMzJdW01BWEJMT0NLU0laRV0sICAgIC8qIEwgc2hpZnRlZCBieSBpIGJpdHMgdG8gdGhlIGxlZnQgKi8KQEAgLTk4LDcgKzk4LDcgQEAKIAogI2lmZGVmIEVBWF9NT0RFCiAKLSNpZiAhKGRlZmluZWQoT01BQykgJiYgZGVmaW5lZChDVFIpKQorI2lmICEoZGVmaW5lZChMVENfT01BQykgJiYgZGVmaW5lZChMVENfQ1RSX01PREUpKQogICAgI2Vycm9yIEVBWF9NT0RFIHJlcXVpcmVzIE9NQUMgYW5kIENUUgogI2VuZGlmCiAKQEAgLTIwMCw2ICsyMDAsNyBAQAogCiBpbnQgY2NtX21lbW9yeShpbnQgY2lwaGVyLAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgc3ltbWV0cmljX2tleSAgICAgICAqdXNrZXksCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCiAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLApAQCAtMjExLDYgKzIxMiwxNiBAQAogCiAjZW5kaWYgLyogQ0NNX01PREUgKi8KIAorI2lmIGRlZmluZWQoTFJXX01PREUpIHx8IGRlZmluZWQoR0NNX01PREUpCit2b2lkIGdjbV9nZl9tdWx0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGNoYXIgKmMpOworI2VuZGlmCisKKworLyogdGFibGUgc2hhcmVkIGJldHdlZW4gR0NNIGFuZCBMUlcgKi8KKyNpZiBkZWZpbmVkKEdDTV9UQUJMRVMpIHx8IGRlZmluZWQoTFJXX1RBQkxFUykgfHwgKChkZWZpbmVkKEdDTV9NT0RFKSB8fCBkZWZpbmVkKEdDTV9NT0RFKSkgJiYgZGVmaW5lZChMVENfRkFTVCkpCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnY21fc2hpZnRfdGFibGVbXTsKKyNlbmRpZgorCiAjaWZkZWYgR0NNX01PREUKIAogI2RlZmluZSBHQ01fRU5DUllQVCAwCkBAIC0yMzcsMTIgKzI0OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICBwdHRvdGxlbjsgICAgIC8qIDY0LWJpdCBjb3VudGVyIGZvciB0aGUgUFQgKi8KIAogI2lmZGVmIEdDTV9UQUJMRVMKLSAgIHVuc2lnbmVkIGNoYXIgICAgICAgUENbMTZdWzI1Nl1bMTZdOyAgLyogMTYgdGFibGVzIG9mIDh4MTI4ICovCisgICB1bnNpZ25lZCBjaGFyICAgICAgIFBDWzE2XVsyNTZdWzE2XSAgLyogMTYgdGFibGVzIG9mIDh4MTI4ICovCisjaWZkZWYgR0NNX1RBQkxFU19TU0UyCitfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSkKKyNlbmRpZgorOwogI2VuZGlmICAKLQogfSBnY21fc3RhdGU7CiAKLXZvaWQgZ2NtX2dmX211bHQoY29uc3QgdW5zaWduZWQgY2hhciAqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgY2hhciAqYyk7CiB2b2lkIGdjbV9tdWx0X2goZ2NtX3N0YXRlICpnY20sIHVuc2lnbmVkIGNoYXIgKkkpOwogCiBpbnQgZ2NtX2luaXQoZ2NtX3N0YXRlICpnY20sIGludCBjaXBoZXIsCkBAIC0yOTYsNiArMzA5LDczIEBACiAKICNlbmRpZgogCisjaWZkZWYgTFRDX1hDQkMKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgdW5zaWduZWQgY2hhciBLWzNdW01BWEJMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgIElWW01BWEJMT0NLU0laRV07CisKKyAgIHN5bW1ldHJpY19rZXkga2V5OworCisgICAgICAgICAgICAgaW50IGNpcGhlciwKKyAgICAgICAgICAgICAgICAgYnVmbGVuLAorICAgICAgICAgICAgICAgICBibG9ja3NpemU7Cit9IHhjYmNfc3RhdGU7CisKK2ludCB4Y2JjX2luaXQoeGNiY19zdGF0ZSAqeGNiYywgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbik7CitpbnQgeGNiY19wcm9jZXNzKHhjYmNfc3RhdGUgKnhjYmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCB4Y2JjX2RvbmUoeGNiY19zdGF0ZSAqeGNiYywgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IHhjYmNfbWVtb3J5KGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCB4Y2JjX21lbW9yeV9tdWx0aShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKTsKK2ludCB4Y2JjX2ZpbGUoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0ICAgICAgICAgIGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IHhjYmNfdGVzdCh2b2lkKTsKKworI2VuZGlmCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCit0eXBlZGVmIHN0cnVjdCB7CisgICB1bnNpZ25lZCBjaGFyIGFrZXlbTUFYQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgQUNDW01BWEJMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgIElWW01BWEJMT0NLU0laRV07CisKKyAgIHN5bW1ldHJpY19rZXkga2V5OworCisgICAgICAgICAgICAgaW50IGNpcGhlciwKKyAgICAgICAgICAgICAgICAgYnVmbGVuLAorICAgICAgICAgICAgICAgICBrZXlsZW4sCisgICAgICAgICAgICAgICAgIGJsb2Nrc2l6ZTsKK30gZjlfc3RhdGU7CisKK2ludCBmOV9pbml0KGY5X3N0YXRlICpmOSwgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbik7CitpbnQgZjlfcHJvY2VzcyhmOV9zdGF0ZSAqZjksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBmOV9kb25lKGY5X3N0YXRlICpmOSwgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGY5X21lbW9yeShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZjlfbWVtb3J5X211bHRpKGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pOworaW50IGY5X2ZpbGUoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0ICAgICAgICAgIGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGY5X3Rlc3Qodm9pZCk7CisKKyNlbmRpZgorCisKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjIwICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIxOjU3OjA0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKaW5kZXggNDg4OTMxZi4uNTNiZGE5YiAxMDA2NDQKLS0tIGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKKysrIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKQEAgLTEwLDcgKzEwLDcgQEAKIC8qIHRoaXMgaXMgdGhlICIzMi1iaXQgYXQgbGVhc3QiIGRhdGEgdHlwZSAKICAqIFJlLWRlZmluZSBpdCB0byBzdWl0IHlvdXIgcGxhdGZvcm0gYnV0IGl0IG11c3QgYmUgYXQgbGVhc3QgMzItYml0cyAKICAqLwotI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IChkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKSkKICAgIHR5cGVkZWYgdW5zaWduZWQgdWxvbmczMjsKICNlbHNlCiAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmczMjsKQEAgLTcyLDE1ICs3MiwxNSBAQAogI2RlZmluZSBTVE9SRTMySCh4LCB5KSAgICAgICAgICAgXAogYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgXAogICAgImJzd2FwbCAlMCAgICAgXG5cdCIgICAgICAgICAgXAotICAgIm1vdmwgICAlMCwoJTIpXG5cdCIgICAgICAgICAgXAorICAgIm1vdmwgICAlMCwoJTEpXG5cdCIgICAgICAgICAgXAogICAgImJzd2FwbCAlMCAgICAgXG5cdCIgICAgICAgICAgXAotICAgICAgOiI9ciIoeCk6IjAiKHgpLCAiciIoeSkpOworICAgICAgOjoiciIoeCksICJyIih5KSk7CiAKICNkZWZpbmUgTE9BRDMySCh4LCB5KSAgICAgICAgICBcCiBhc20gX192b2xhdGlsZV9fICggICAgICAgICAgICAgXAotICAgIm1vdmwgKCUyKSwlMFxuXHQiICAgICAgICAgIFwKKyAgICJtb3ZsICglMSksJTBcblx0IiAgICAgICAgICBcCiAgICAiYnN3YXBsICUwXG5cdCIgICAgICAgICAgICAgXAotICAgOiI9ciIoeCk6ICIwIih4KSwgInIiKHkpKTsKKyAgIDoiPXIiKHgpOiAiciIoeSkpOwogCiAjZWxzZQogCkBAIC0xMDMsMTUgKzEwMywxNSBAQAogI2RlZmluZSBTVE9SRTY0SCh4LCB5KSAgICAgICAgICAgXAogYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgICAgXAogICAgImJzd2FwcSAlMCAgICAgXG5cdCIgICAgICAgICAgXAotICAgIm1vdnEgICAlMCwoJTIpXG5cdCIgICAgICAgICAgXAorICAgIm1vdnEgICAlMCwoJTEpXG5cdCIgICAgICAgICAgXAogICAgImJzd2FwcSAlMCAgICAgXG5cdCIgICAgICAgICAgXAotICAgICAgOiI9ciIoeCk6IjAiKHgpLCAiciIoeSk6IjAiKTsKKyAgICAgIDo6InIiKHgpLCAiciIoeSkpOwogCiAjZGVmaW5lIExPQUQ2NEgoeCwgeSkgICAgICAgICAgXAogYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgIFwKLSAgICJtb3ZxICglMiksJTBcblx0IiAgICAgICAgICBcCisgICAibW92cSAoJTEpLCUwXG5cdCIgICAgICAgICAgXAogICAgImJzd2FwcSAlMFxuXHQiICAgICAgICAgICAgIFwKLSAgIDoiPXIiKHgpOiAiMCIoeCksICJyIih5KSk7CisgICA6Ij1yIih4KTogInIiKHkpKTsKIAogI2Vsc2UKIApAQCAtMTMyLDEwICsxMzIsMTAgQEAKICNpZmRlZiBFTkRJQU5fMzJCSVRXT1JEIAogCiAjZGVmaW5lIFNUT1JFMzJMKHgsIHkpICAgICAgICBcCi0gICAgIHsgdWxvbmczMiAgX190ID0gKHgpOyBtZW1jcHkoeSwgJl9fdCwgNCk7IH0KKyAgICAgeyB1bG9uZzMyICBfX3QgPSAoeCk7IFhNRU1DUFkoeSwgJl9fdCwgNCk7IH0KIAogI2RlZmluZSBMT0FEMzJMKHgsIHkpICAgICAgICAgXAotICAgICBtZW1jcHkoJih4KSwgeSwgNCk7CisgICAgIFhNRU1DUFkoJih4KSwgeSwgNCk7CiAKICNkZWZpbmUgU1RPUkU2NEwoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHsgKHkpWzddID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjU2KSYyNTUpOyAoeSlbNl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NDgpJjI1NSk7ICAgXApAQCAtMTUyLDE2ICsxNTIsMTYgQEAKICNlbHNlIC8qIDY0LWJpdCB3b3JkcyB0aGVuICAqLwogCiAjZGVmaW5lIFNUT1JFMzJMKHgsIHkpICAgICAgICBcCi0gICAgIHsgdWxvbmczMiBfX3QgPSAoeCk7IG1lbWNweSh5LCAmX190LCA0KTsgfQorICAgICB7IHVsb25nMzIgX190ID0gKHgpOyBYTUVNQ1BZKHksICZfX3QsIDQpOyB9CiAKICNkZWZpbmUgTE9BRDMyTCh4LCB5KSAgICAgICAgIFwKLSAgICAgeyBtZW1jcHkoJih4KSwgeSwgNCk7IHggJj0gMHhGRkZGRkZGRjsgfQorICAgICB7IFhNRU1DUFkoJih4KSwgeSwgNCk7IHggJj0gMHhGRkZGRkZGRjsgfQogCiAjZGVmaW5lIFNUT1JFNjRMKHgsIHkpICAgICAgICBcCi0gICAgIHsgdWxvbmc2NCBfX3QgPSAoeCk7IG1lbWNweSh5LCAmX190LCA4KTsgfQorICAgICB7IHVsb25nNjQgX190ID0gKHgpOyBYTUVNQ1BZKHksICZfX3QsIDgpOyB9CiAKICNkZWZpbmUgTE9BRDY0TCh4LCB5KSAgICAgICAgIFwKLSAgICB7IG1lbWNweSgmKHgpLCB5LCA4KTsgfQorICAgIHsgWE1FTUNQWSgmKHgpLCB5LCA4KTsgfQogCiAjZW5kaWYgLyogRU5ESUFOXzY0QklUV09SRCAqLwogCkBAIC0xOTMsMTAgKzE5MywxMCBAQAogI2lmZGVmIEVORElBTl8zMkJJVFdPUkQgCiAKICNkZWZpbmUgU1RPUkUzMkgoeCwgeSkgICAgICAgIFwKLSAgICAgeyB1bG9uZzMyIF9fdCA9ICh4KTsgbWVtY3B5KHksICZfX3QsIDQpOyB9CisgICAgIHsgdWxvbmczMiBfX3QgPSAoeCk7IFhNRU1DUFkoeSwgJl9fdCwgNCk7IH0KIAogI2RlZmluZSBMT0FEMzJIKHgsIHkpICAgICAgICAgXAotICAgICBtZW1jcHkoJih4KSwgeSwgNCk7CisgICAgIFhNRU1DUFkoJih4KSwgeSwgNCk7CiAKICNkZWZpbmUgU1RPUkU2NEgoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIHsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjU2KSYyNTUpOyAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NDgpJjI1NSk7ICAgXApAQCAtMjEzLDE2ICsyMTMsMTYgQEAKICNlbHNlIC8qIDY0LWJpdCB3b3JkcyB0aGVuICAqLwogCiAjZGVmaW5lIFNUT1JFMzJIKHgsIHkpICAgICAgICBcCi0gICAgIHsgdWxvbmczMiBfX3QgPSAoeCk7IG1lbWNweSh5LCAmX190LCA0KTsgfQorICAgICB7IHVsb25nMzIgX190ID0gKHgpOyBYTUVNQ1BZKHksICZfX3QsIDQpOyB9CiAKICNkZWZpbmUgTE9BRDMySCh4LCB5KSAgICAgICAgIFwKLSAgICAgeyBtZW1jcHkoJih4KSwgeSwgNCk7IHggJj0gMHhGRkZGRkZGRjsgfQorICAgICB7IFhNRU1DUFkoJih4KSwgeSwgNCk7IHggJj0gMHhGRkZGRkZGRjsgfQogCiAjZGVmaW5lIFNUT1JFNjRIKHgsIHkpICAgICAgICBcCi0gICAgIHsgdWxvbmc2NCBfX3QgPSAoeCk7IG1lbWNweSh5LCAmX190LCA4KTsgfQorICAgICB7IHVsb25nNjQgX190ID0gKHgpOyBYTUVNQ1BZKHksICZfX3QsIDgpOyB9CiAKICNkZWZpbmUgTE9BRDY0SCh4LCB5KSAgICAgICAgIFwKLSAgICB7IG1lbWNweSgmKHgpLCB5LCA4KTsgfQorICAgIHsgWE1FTUNQWSgmKHgpLCB5LCA4KTsgfQogCiAjZW5kaWYgLyogRU5ESUFOXzY0QklUV09SRCAqLwogI2VuZGlmIC8qIEVORElBTl9CSUcgKi8KQEAgLTI0Miw3ICsyNDIsNyBAQAogI2RlZmluZSBST1JjKHgsbikgX2xyb3RyKHgsbikKICNkZWZpbmUgUk9MYyh4LG4pIF9scm90bCh4LG4pCiAKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSAmJiAhZGVmaW5lZChJTlRFTF9DQykgJiYgIWRlZmluZWQoTFRDX05PX0FTTSkKKyNlbGlmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpICYmICFkZWZpbmVkKElOVEVMX0NDKSAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJPTCh1bnNpZ25lZCB3b3JkLCBpbnQgaSkKIHsKQEAgLTI4NSw2ICsyODUsNTAgQEAKIAogI2VuZGlmCiAKKyNlbGlmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChMVENfUFBDMzIpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9MKHVuc2lnbmVkIHdvcmQsIGludCBpKQoreworICAgYXNtICgicm90bHcgJTAsJTAsJTIiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJyIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9SKHVuc2lnbmVkIHdvcmQsIGludCBpKQoreworICAgYXNtICgicm90bHcgJTAsJTAsJTIiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJyIiAoMzItaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKKyNpZm5kZWYgTFRDX05PX1JPTEMKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBST0xjKHVuc2lnbmVkIHdvcmQsIGNvbnN0IGludCBpKQoreworICAgYXNtICgicm90bHdpICUwLCUwLCUyIgorICAgICAgOiI9ciIgKHdvcmQpCisgICAgICA6IjAiICh3b3JkKSwiSSIgKGkpKTsKKyAgIHJldHVybiB3b3JkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJPUmModW5zaWduZWQgd29yZCwgY29uc3QgaW50IGkpCit7CisgICBhc20gKCJyb3Ryd2kgJTAsJTAsJTIiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJJIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgUk9MYyBST0wKKyNkZWZpbmUgUk9SYyBST1IKKworI2VuZGlmCisKKwogI2Vsc2UKIAogLyogcm90YXRlcyB0aGUgaGFyZCB3YXkgKi8KQEAgLTI5Nyw3ICszNDEsNyBAQAogCiAKIC8qIDY0LWJpdCBSb3RhdGVzICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQorI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKIHsKQEAgLTM2MCwxMCArNDA0LDEzIEBACiAKICNlbmRpZgogCi0jdW5kZWYgTUFYCi0jdW5kZWYgTUlOCi0jZGVmaW5lIE1BWCh4LCB5KSAoICgoeCk+KHkpKT8oeCk6KHkpICkKLSNkZWZpbmUgTUlOKHgsIHkpICggKCh4KTwoeSkpPyh4KTooeSkgKQorI2lmbmRlZiBNQVgKKyAgICNkZWZpbmUgTUFYKHgsIHkpICggKCh4KT4oeSkpPyh4KTooeSkgKQorI2VuZGlmCisKKyNpZm5kZWYgTUlOCisgICAjZGVmaW5lIE1JTih4LCB5KSAoICgoeCk8KHkpKT8oeCk6KHkpICkKKyNlbmRpZgogCiAvKiBleHRyYWN0IGEgYnl0ZSBwb3J0YWJseSAqLwogI2lmZGVmIF9NU0NfVkVSCkBAIC0zNzMsNSArNDIwLDUgQEAKICNlbmRpZiAgIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS43ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yOSAyMzo0Mzo1NyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmggYi9zcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk5NmU0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hdGguaApAQCAtMCwwICsxLDUwMCBAQAorLyoqIG1hdGggZnVuY3Rpb25zICoqLworCisjZGVmaW5lIExUQ19NUF9MVCAgIC0xCisjZGVmaW5lIExUQ19NUF9FUSAgICAwCisjZGVmaW5lIExUQ19NUF9HVCAgICAxCisKKyNkZWZpbmUgTFRDX01QX05PICAgIDAKKyNkZWZpbmUgTFRDX01QX1lFUyAgIDEKKworI2lmbmRlZiBNRUNDCisgICB0eXBlZGVmIHZvaWQgZWNjX3BvaW50OworI2VuZGlmCisKKyNpZm5kZWYgTVJTQQorICAgdHlwZWRlZiB2b2lkIHJzYV9rZXk7CisjZW5kaWYKKworLyoqIG1hdGggZGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIE5hbWUgb2YgdGhlIG1hdGggcHJvdmlkZXIgKi8KKyAgIGNoYXIgKm5hbWU7CisKKyAgIC8qKiBCaXRzIHBlciBkaWdpdCwgYW1vdW50IG9mIGJpdHMgbXVzdCBmaXQgaW4gYW4gdW5zaWduZWQgbG9uZyAqLworICAgaW50ICBiaXRzX3Blcl9kaWdpdDsKKworLyogLS0tLSBpbml0L2RlaW5pdCBmdW5jdGlvbnMgLS0tLSAqLworCisgICAvKiogaW5pdGlhbGl6ZSBhIGJpZ251bQorICAgICBAcGFyYW0gICBhICAgICBUaGUgbnVtYmVyIHRvIGluaXRpYWxpemUKKyAgICAgQHJldHVybiAgQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmluaXQpKHZvaWQgKiphKTsKKyAgIAorICAgLyoqIGluaXQgY29weSAKKyAgICAgQHBhcmFtICBkc3QgICAgVGhlIG51bWJlciB0byBpbml0aWFsaXplIGFuZCB3cml0ZSB0bworICAgICBAcGFyYW0gIHNyYyAgICBUaGUgbnVtYmVyIHRvIGNvcHkgZnJvbQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCppbml0X2NvcHkpKHZvaWQgKipkc3QsIHZvaWQgKnNyYyk7CisKKyAgIC8qKiBkZWluaXQgCisgICAgICBAcGFyYW0gICBhICAgIFRoZSBudW1iZXIgdG8gZnJlZQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgdm9pZCAoKmRlaW5pdCkodm9pZCAqYSk7CisKKy8qIC0tLS0gZGF0YSBtb3ZlbWVudCAtLS0tICovCisKKyAgIC8qKiBuZWdhdGUKKyAgICAgIEBwYXJhbSAgIHNyYyAgIFRoZSBudW1iZXIgdG8gbmVnYXRlCisgICAgICBAcGFyYW0gICBkc3QgICBUaGUgZGVzdGluYXRpb24KKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm5lZykodm9pZCAqc3JjLCB2b2lkICpkc3QpOworICAgCisgICAvKiogY29weSAKKyAgICAgIEBwYXJhbSAgIHNyYyAgIFRoZSBudW1iZXIgdG8gY29weSBmcm9tCisgICAgICBAcGFyYW0gICBkc3QgICBUaGUgbnVtYmVyIHRvIHdyaXRlIHRvIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqY29weSkodm9pZCAqc3JjLCB2b2lkICpkc3QpOworCisvKiAtLS0tIHRyaXZpYWwgbG93IGxldmVsIGZ1bmN0aW9ucyAtLS0tICovCisKKyAgIC8qKiBzZXQgc21hbGwgY29uc3RhbnQgCisgICAgICBAcGFyYW0gYSAgICBOdW1iZXIgdG8gd3JpdGUgdG8KKyAgICAgIEBwYXJhbSBuICAgIFNvdXJjZSB1cHRvIGJpdHNfcGVyX2RpZ2l0IChhY3R1YWxseSBtZWFudCBmb3IgdmVyeSBzbWFsbCBjb25zdGFudHMpIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjY2VzcworICAgKi8KKyAgIGludCAoKnNldF9pbnQpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgbik7CisKKyAgIC8qKiBnZXQgc21hbGwgY29uc3RhbnQgCisgICAgICBAcGFyYW0gYSAgICBOdW1iZXIgdG8gcmVhZCwgb25seSBmZXRjaGVzIHVwdG8gYml0c19wZXJfZGlnaXQgZnJvbSB0aGUgbnVtYmVyCisgICAgICBAcmV0dXJuICBUaGUgbG93ZXIgYml0c19wZXJfZGlnaXQgb2YgdGhlIGludGVnZXIgKHVuc2lnbmVkKQorICAgKi8KKyAgIHVuc2lnbmVkIGxvbmcgKCpnZXRfaW50KSh2b2lkICphKTsKKworICAgLyoqIGdldCBkaWdpdCBuIAorICAgICBAcGFyYW0gYSAgVGhlIG51bWJlciB0byByZWFkIGZyb20KKyAgICAgQHBhcmFtIG4gIFRoZSBudW1iZXIgb2YgdGhlIGRpZ2l0IHRvIGZldGNoCisgICAgIEByZXR1cm4gIFRoZSBiaXRzX3Blcl9kaWdpdCAgc2l6ZWQgbid0aCBkaWdpdCBvZiBhCisgICAqLworICAgdW5zaWduZWQgbG9uZyAoKmdldF9kaWdpdCkodm9pZCAqYSwgaW50IG4pOworCisgICAvKiogR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIHRoYXQgcmVwcmVzZW50IHRoZSBudW1iZXIKKyAgICAgQHBhcmFtIGEgICBUaGUgbnVtYmVyIHRvIGNvdW50CisgICAgIEByZXR1cm4gVGhlIG51bWJlciBvZiBkaWdpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIG51bWJlcgorICAgKi8KKyAgIGludCAoKmdldF9kaWdpdF9jb3VudCkodm9pZCAqYSk7CisKKyAgIC8qKiBjb21wYXJlIHR3byBpbnRlZ2VycworICAgICBAcGFyYW0gYSAgIFRoZSBsZWZ0IHNpZGUgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSByaWdodCBzaWRlIGludGVnZXIKKyAgICAgQHJldHVybiBMVENfTVBfTFQgaWYgYSA8IGIsIExUQ19NUF9HVCBpZiBhID4gYiBhbmQgTFRDX01QX0VRIG90aGVyd2lzZS4gIChzaWduZWQgY29tcGFyaXNvbikKKyAgICovCisgICBpbnQgKCpjb21wYXJlKSh2b2lkICphLCB2b2lkICpiKTsKKworICAgLyoqIGNvbXBhcmUgYWdhaW5zdCBpbnQgCisgICAgIEBwYXJhbSBhICAgVGhlIGxlZnQgc2lkZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHJpZ2h0IHNpZGUgaW50ZWdlciAodXB0byBiaXRzX3Blcl9kaWdpdCkKKyAgICAgQHJldHVybiBMVENfTVBfTFQgaWYgYSA8IGIsIExUQ19NUF9HVCBpZiBhID4gYiBhbmQgTFRDX01QX0VRIG90aGVyd2lzZS4gIChzaWduZWQgY29tcGFyaXNvbikKKyAgICovCisgICBpbnQgKCpjb21wYXJlX2QpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgbik7CisKKyAgIC8qKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICBUaGUgaW50ZWdlciB0byBjb3VudAorICAgICBAcmV0dXJuIFRoZSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCB0byByZXByZXNlbnQgdGhlIGludGVnZXIKKyAgICovCisgICBpbnQgKCpjb3VudF9iaXRzKSh2b2lkICogYSk7CisKKyAgIC8qKiBDb3VudCB0aGUgbnVtYmVyIG9mIExTQiBiaXRzIHdoaWNoIGFyZSB6ZXJvIAorICAgICBAcGFyYW0gYSAgIFRoZSBpbnRlZ2VyIHRvIGNvdW50CisgICAgIEByZXR1cm4gVGhlIG51bWJlciBvZiBjb250aWd1b3VzIHplcm8gTFNCIGJpdHMKKyAgICovCisgICBpbnQgKCpjb3VudF9sc2JfYml0cykodm9pZCAqYSk7CisKKyAgIC8qKiBDb21wdXRlIGEgcG93ZXIgb2YgdHdvCisgICAgIEBwYXJhbSBhICBUaGUgaW50ZWdlciB0byBzdG9yZSB0aGUgcG93ZXIgaW4KKyAgICAgQHBhcmFtIG4gIFRoZSBwb3dlciBvZiB0d28geW91IHdhbnQgdG8gc3RvcmUgKGEgPSAyXm4pCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnR3b2V4cHQpKHZvaWQgKmEgLCBpbnQgbik7CisKKy8qIC0tLS0gcmFkaXggY29udmVyc2lvbnMgLS0tLSAqLworICAgCisgICAvKiogcmVhZCBhc2NpaSBzdHJpbmcgCisgICAgIEBwYXJhbSBhICAgICBUaGUgaW50ZWdlciB0byBzdG9yZSBpbnRvCisgICAgIEBwYXJhbSBzdHIgICBUaGUgc3RyaW5nIHRvIHJlYWQKKyAgICAgQHBhcmFtIHJhZGl4IFRoZSByYWRpeCB0aGUgaW50ZWdlciBoYXMgYmVlbiByZXByZXNlbnRlZCBpbiAoMi02NCkKKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqcmVhZF9yYWRpeCkodm9pZCAqYSwgY29uc3QgY2hhciAqc3RyLCBpbnQgcmFkaXgpOworCisgICAvKiogd3JpdGUgbnVtYmVyIHRvIHN0cmluZworICAgICBAcGFyYW0gYSAgICAgVGhlIGludGVnZXIgdG8gc3RvcmUKKyAgICAgQHBhcmFtIHN0ciAgIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHN0cmluZworICAgICBAcGFyYW0gcmFkaXggVGhlIHJhZGl4IHRoZSBpbnRlZ2VyIGlzIHRvIGJlIHJlcHJlc2VudGVkIGluICgyLTY0KQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCp3cml0ZV9yYWRpeCkodm9pZCAqYSwgY2hhciAqc3RyLCBpbnQgcmFkaXgpOworCisgICAvKiogZ2V0IHNpemUgYXMgdW5zaWduZWQgY2hhciBzdHJpbmcgCisgICAgIEBwYXJhbSBhICAgICBUaGUgaW50ZWdlciB0byBnZXQgdGhlIHNpemUgKHdoZW4gc3RvcmVkIGluIGFycmF5IG9mIG9jdGV0cykKKyAgICAgQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSBpbnRlZ2VyCisgICAqLworICAgdW5zaWduZWQgbG9uZyAoKnVuc2lnbmVkX3NpemUpKHZvaWQgKmEpOworCisgICAvKiogc3RvcmUgYW4gaW50ZWdlciBhcyBhbiBhcnJheSBvZiBvY3RldHMgCisgICAgIEBwYXJhbSBzcmMgICBUaGUgaW50ZWdlciB0byBzdG9yZQorICAgICBAcGFyYW0gZHN0ICAgVGhlIGJ1ZmZlciB0byBzdG9yZSB0aGUgaW50ZWdlciBpbgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCp1bnNpZ25lZF93cml0ZSkodm9pZCAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpOworCisgICAvKiogcmVhZCBhbiBhcnJheSBvZiBvY3RldHMgYW5kIHN0b3JlIGFzIGludGVnZXIKKyAgICAgQHBhcmFtIGRzdCAgIFRoZSBpbnRlZ2VyIHRvIGxvYWQKKyAgICAgQHBhcmFtIHNyYyAgIFRoZSBhcnJheSBvZiBvY3RldHMgCisgICAgIEBwYXJhbSBsZW4gICBUaGUgbnVtYmVyIG9mIG9jdGV0cyAKKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqdW5zaWduZWRfcmVhZCkodm9pZCAqZHN0LCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKKworLyogLS0tLSBiYXNpYyBtYXRoIC0tLS0gKi8KKworICAgLyoqIGFkZCB0d28gaW50ZWdlcnMgCisgICAgIEBwYXJhbSBhICAgVGhlIGZpcnN0IHNvdXJjZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHNlY29uZCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYyAgIFRoZSBkZXN0aW5hdGlvbiBvZiAiYSArIGIiCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmFkZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKworICAgLyoqIGFkZCB0d28gaW50ZWdlcnMgCisgICAgIEBwYXJhbSBhICAgVGhlIGZpcnN0IHNvdXJjZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHNlY29uZCBzb3VyY2UgaW50ZWdlciAoc2luZ2xlIGRpZ2l0IG9mIHVwdG8gYml0c19wZXJfZGlnaXQgaW4gbGVuZ3RoKQorICAgICBAcGFyYW0gYyAgIFRoZSBkZXN0aW5hdGlvbiBvZiAiYSArIGIiCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmFkZGkpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBzdWJ0cmFjdCB0d28gaW50ZWdlcnMgCisgICAgIEBwYXJhbSBhICAgVGhlIGZpcnN0IHNvdXJjZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHNlY29uZCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYyAgIFRoZSBkZXN0aW5hdGlvbiBvZiAiYSAtIGIiCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnN1Yikodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBzdWJ0cmFjdCB0d28gaW50ZWdlcnMgCisgICAgIEBwYXJhbSBhICAgVGhlIGZpcnN0IHNvdXJjZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHNlY29uZCBzb3VyY2UgaW50ZWdlciAoc2luZ2xlIGRpZ2l0IG9mIHVwdG8gYml0c19wZXJfZGlnaXQgaW4gbGVuZ3RoKQorICAgICBAcGFyYW0gYyAgIFRoZSBkZXN0aW5hdGlvbiBvZiAiYSAtIGIiCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnN1YmkpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBtdWx0aXBseSB0d28gaW50ZWdlcnMgCisgICAgIEBwYXJhbSBhICAgVGhlIGZpcnN0IHNvdXJjZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHNlY29uZCBzb3VyY2UgaW50ZWdlciAoc2luZ2xlIGRpZ2l0IG9mIHVwdG8gYml0c19wZXJfZGlnaXQgaW4gbGVuZ3RoKQorICAgICBAcGFyYW0gYyAgIFRoZSBkZXN0aW5hdGlvbiBvZiAiYSAqIGIiCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm11bCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBtdWx0aXBseSB0d28gaW50ZWdlcnMgCisgICAgIEBwYXJhbSBhICAgVGhlIGZpcnN0IHNvdXJjZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHNlY29uZCBzb3VyY2UgaW50ZWdlciAoc2luZ2xlIGRpZ2l0IG9mIHVwdG8gYml0c19wZXJfZGlnaXQgaW4gbGVuZ3RoKQorICAgICBAcGFyYW0gYyAgIFRoZSBkZXN0aW5hdGlvbiBvZiAiYSAqIGIiCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm11bGkpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBTcXVhcmUgYW4gaW50ZWdlcgorICAgICBAcGFyYW0gYSAgICBUaGUgaW50ZWdlciB0byBzcXVhcmUKKyAgICAgQHBhcmFtIGIgICAgVGhlIGRlc3RpbmF0aW9uCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnNxcikodm9pZCAqYSwgdm9pZCAqYik7CisKKyAgIC8qKiBEaXZpZGUgYW4gaW50ZWdlcgorICAgICBAcGFyYW0gYSAgICBUaGUgZGl2aWRlbmQKKyAgICAgQHBhcmFtIGIgICAgVGhlIGRpdmlzb3IKKyAgICAgQHBhcmFtIGMgICAgVGhlIHF1b3RpZW50IChjYW4gYmUgTlVMTCB0byBzaWduaWZ5IGRvbid0IGNhcmUpCisgICAgIEBwYXJhbSBkICAgIFRoZSByZW1haW5kZXIgKGNhbiBiZSBOVUxMIHRvIHNpZ25pZnkgZG9uJ3QgY2FyZSkKKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbXBkaXYpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpOworCisgICAvKiogZGl2aWRlIGJ5IHR3byAKKyAgICAgIEBwYXJhbSAgYSAgIFRoZSBpbnRlZ2VyIHRvIGRpdmlkZSAoc2hpZnQgcmlnaHQpCisgICAgICBAcGFyYW0gIGIgICBUaGUgZGVzdGluYXRpb24gCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpkaXZfMikodm9pZCAqYSwgdm9pZCAqYik7CisKKyAgIC8qKiBHZXQgcmVtYWluZGVyIChzbWFsbCB2YWx1ZSkKKyAgICAgIEBwYXJhbSAgYSAgICBUaGUgaW50ZWdlciB0byByZWR1Y2UKKyAgICAgIEBwYXJhbSAgYiAgICBUaGUgbW9kdWx1cyAodXB0byBiaXRzX3Blcl9kaWdpdCBpbiBsZW5ndGgpCisgICAgICBAcGFyYW0gIGMgICAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcmVzaWR1ZQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbW9kaSkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nICpjKTsKKworICAgLyoqIGdjZCAKKyAgICAgIEBwYXJhbSAgYSAgICAgVGhlIGZpcnN0IGludGVnZXIKKyAgICAgIEBwYXJhbSAgYiAgICAgVGhlIHNlY29uZCBpbnRlZ2VyCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBkZXN0aW5hdGlvbiBmb3IgKGEsIGIpCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpnY2QpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogbGNtIAorICAgICAgQHBhcmFtICBhICAgICBUaGUgZmlyc3QgaW50ZWdlcgorICAgICAgQHBhcmFtICBiICAgICBUaGUgc2Vjb25kIGludGVnZXIKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIGRlc3RpbmF0aW9uIGZvciBbYSwgYl0KKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmxjbSkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBNb2R1bGFyIG11bHRpcGxpY2F0aW9uCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSBmaXJzdCBzb3VyY2UKKyAgICAgIEBwYXJhbSAgYiAgICAgVGhlIHNlY29uZCBzb3VyY2UgCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBtb2R1bHVzCisgICAgICBAcGFyYW0gIGQgICAgIFRoZSBkZXN0aW5hdGlvbiAoYSpiIG1vZCBjKQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbXVsbW9kKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjLCB2b2lkICpkKTsKKworICAgLyoqIE1vZHVsYXIgc3F1YXJpbmcKKyAgICAgIEBwYXJhbSAgYSAgICAgVGhlIGZpcnN0IHNvdXJjZQorICAgICAgQHBhcmFtICBiICAgICBUaGUgbW9kdWx1cworICAgICAgQHBhcmFtICBjICAgICBUaGUgZGVzdGluYXRpb24gKGEqYSBtb2QgYikKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnNxcm1vZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBNb2R1bGFyIGludmVyc2lvbgorICAgICAgQHBhcmFtICBhICAgICBUaGUgdmFsdWUgdG8gaW52ZXJ0CisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBtb2R1bHVzIAorICAgICAgQHBhcmFtICBjICAgICBUaGUgZGVzdGluYXRpb24gKDEvYSBtb2QgYikKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmludm1vZCkodm9pZCAqLCB2b2lkICosIHZvaWQgKik7CisKKy8qIC0tLS0gcmVkdWN0aW9uIC0tLS0gKi8KKworICAgLyoqIHNldHVwIG1vbnRnb21lcnkKKyAgICAgICBAcGFyYW0gYSAgVGhlIG1vZHVsdXMgCisgICAgICAgQHBhcmFtIGIgIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHJlZHVjdGlvbiBkaWdpdCAKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptb250Z29tZXJ5X3NldHVwKSh2b2lkICphLCB2b2lkICoqYik7CisKKyAgIC8qKiBnZXQgbm9ybWFsaXphdGlvbiB2YWx1ZSAKKyAgICAgICBAcGFyYW0gYSAgIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIG5vcm1hbGl6YXRpb24gdmFsdWUKKyAgICAgICBAcGFyYW0gYiAgIFRoZSBtb2R1bHVzCisgICAgICAgQHJldHVybiAgQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm1vbnRnb21lcnlfbm9ybWFsaXphdGlvbikodm9pZCAqYSwgdm9pZCAqYik7CisKKyAgIC8qKiByZWR1Y2UgYSBudW1iZXIKKyAgICAgICBAcGFyYW0gYSAgIFRoZSBudW1iZXIgW2FuZCBkZXN0XSB0byByZWR1Y2UKKyAgICAgICBAcGFyYW0gYiAgIFRoZSBtb2R1bHVzCisgICAgICAgQHBhcmFtIGMgICBUaGUgdmFsdWUgImIiIGZyb20gbW9udGdvbWVyeV9zZXR1cCgpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbW9udGdvbWVyeV9yZWR1Y2UpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogY2xlYW4gdXAgIChmcmVlcyBtZW1vcnkpCisgICAgICAgQHBhcmFtIGEgICBUaGUgdmFsdWUgImIiIGZyb20gbW9udGdvbWVyeV9zZXR1cCgpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLyAgICAgIAorICAgdm9pZCAoKm1vbnRnb21lcnlfZGVpbml0KSh2b2lkICphKTsKKworLyogLS0tLSBleHBvbmVudGlhdGlvbiAtLS0tICovCisKKyAgIC8qKiBNb2R1bGFyIGV4cG9uZW50aWF0aW9uCisgICAgICAgQHBhcmFtIGEgICAgVGhlIGJhc2UgaW50ZWdlcgorICAgICAgIEBwYXJhbSBiICAgIFRoZSBwb3dlciAoY2FuIGJlIG5lZ2F0aXZlKSBpbnRlZ2VyCisgICAgICAgQHBhcmFtIGMgICAgVGhlIG1vZHVsdXMgaW50ZWdlcgorICAgICAgIEBwYXJhbSBkICAgIFRoZSBkZXN0aW5hdGlvbgorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmV4cHRtb2QpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpOworCisgICAvKiogUHJpbWFsaXR5IHRlc3RpbmcKKyAgICAgICBAcGFyYW0gYSAgICAgVGhlIGludGVnZXIgdG8gdGVzdAorICAgICAgIEBwYXJhbSBiICAgICBUaGUgZGVzdGluYXRpb24gb2YgdGhlIHJlc3VsdCAoRlBfWUVTIGlmIHByaW1lKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmlzcHJpbWUpKHZvaWQgKmEsIGludCAqYik7CisKKy8qIC0tLS0gIChvcHRpb25hbCkgZWNjIHBvaW50IG1hdGggLS0tLSAqLworCisgICAvKiogRUNDIEdGKHApIHBvaW50IG11bHRpcGxpY2F0aW9uIChmcm9tIHRoZSBOSVNUIGN1cnZlcykKKyAgICAgICBAcGFyYW0gayAgIFRoZSBpbnRlZ2VyIHRvIG11bHRpcGx5IHRoZSBwb2ludCBieQorICAgICAgIEBwYXJhbSBHICAgVGhlIHBvaW50IHRvIG11bHRpcGx5CisgICAgICAgQHBhcmFtIFIgICBUaGUgZGVzdGluYXRpb24gZm9yIGtHICAKKyAgICAgICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMgZm9yIHRoZSBmaWVsZAorICAgICAgIEBwYXJhbSBtYXAgQm9vbGVhbiBpbmRpY2F0ZWQgd2hldGhlciB0byBtYXAgYmFjayB0byBhZmZpbmUgb3Igbm90IChjYW4gYmUgaWdub3JlZCBpZiB5b3Ugd29yayBpbiBhZmZpbmUgb25seSkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCplY2NfcHRtdWwpKHZvaWQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCBpbnQgbWFwKTsKKworICAgLyoqIEVDQyBHRihwKSBwb2ludCBhZGRpdGlvbiAKKyAgICAgICBAcGFyYW0gUCAgICBUaGUgZmlyc3QgcG9pbnQKKyAgICAgICBAcGFyYW0gUSAgICBUaGUgc2Vjb25kIHBvaW50CisgICAgICAgQHBhcmFtIFIgICAgVGhlIGRlc3RpbmF0aW9uIG9mIFAgKyBRCisgICAgICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzCisgICAgICAgQHBhcmFtIG1wICAgVGhlICJiIiB2YWx1ZSBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmVjY19wdGFkZCkoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlEsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApOworCisgICAvKiogRUNDIEdGKHApIHBvaW50IGRvdWJsZSAKKyAgICAgICBAcGFyYW0gUCAgICBUaGUgZmlyc3QgcG9pbnQKKyAgICAgICBAcGFyYW0gUiAgICBUaGUgZGVzdGluYXRpb24gb2YgMlAKKyAgICAgICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMKKyAgICAgICBAcGFyYW0gbXAgICBUaGUgImIiIHZhbHVlIGZyb20gbW9udGdvbWVyeV9zZXR1cCgpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZWNjX3B0ZGJsKShlY2NfcG9pbnQgKlAsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApOworCisgICAvKiogRUNDIG1hcHBpbmcgZnJvbSBwcm9qZWN0aXZlIHRvIGFmZmluZSwgY3VycmVudGx5IHVzZXMgKHgseSx6KSA9PiAoeC96XjIsIHkvel4zLCAxKQorICAgICAgIEBwYXJhbSBQICAgICBUaGUgcG9pbnQgdG8gbWFwCisgICAgICAgQHBhcmFtIG1vZHVsdXMgVGhlIG1vZHVsdXMKKyAgICAgICBAcGFyYW0gbXAgICAgVGhlICJiIiB2YWx1ZSBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgICAgIEByZW1hcmsgIFRoZSBtYXBwaW5nIGNhbiBiZSBkaWZmZXJlbnQgYnV0IGtlZXAgaW4gbWluZCBhIGVjY19wb2ludCBvbmx5IGhhcyB0aHJlZSAKKyAgICAgICAgICAgICAgICBpbnRlZ2VycyAoeCx5LHopIHNvIGlmIHlvdSB1c2UgYSBkaWZmZXJlbnQgbWFwcGluZyB5b3UgaGF2ZSB0byBtYWtlIGl0IGZpdC4KKyAgICovCisgICBpbnQgKCplY2NfbWFwKShlY2NfcG9pbnQgKlAsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKTsKKworICAgLyoqIENvbXB1dGVzIGtBKkEgKyBrQipCID0gQyB1c2luZyBTaGFtaXIncyBUcmljaworICAgICAgIEBwYXJhbSBBICAgICAgICBGaXJzdCBwb2ludCB0byBtdWx0aXBseQorICAgICAgIEBwYXJhbSBrQSAgICAgICBXaGF0IHRvIG11bHRpcGxlIEEgYnkKKyAgICAgICBAcGFyYW0gQiAgICAgICAgU2Vjb25kIHBvaW50IHRvIG11bHRpcGx5CisgICAgICAgQHBhcmFtIGtCICAgICAgIFdoYXQgdG8gbXVsdGlwbGUgQiBieQorICAgICAgIEBwYXJhbSBDICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBwb2ludCAoY2FuIG92ZXJsYXAgd2l0aCBBIG9yIEIKKyAgICAgICBAcGFyYW0gbW9kdWx1cyAgTW9kdWx1cyBmb3IgY3VydmUgCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLyAKKyAgIGludCAoKmVjY19tdWwyYWRkKShlY2NfcG9pbnQgKkEsIHZvaWQgKmtBLAorICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQiwgdm9pZCAqa0IsCisgICAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbW9kdWx1cyk7CisKKy8qIC0tLS0gKG9wdGlvbmFsKSByc2Egb3B0aW1pemVkIG1hdGggKGZvciBpbnRlcm5hbCBDUlQpIC0tLS0gKi8KKworICAgLyoqIFJTQSBLZXkgR2VuZXJhdGlvbiAKKyAgICAgICBAcGFyYW0gcHJuZyAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgICAgICBAcGFyYW0gd3BybmcgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIGRlc2lyZWQKKyAgICAgICBAcGFyYW0gc2l6ZSAgICAgVGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKGtleSBzaXplKSBkZXNpcmVkIChvY3RldHMpCisgICAgICAgQHBhcmFtIGUgICAgICAgIFRoZSAiZSIgdmFsdWUgKHB1YmxpYyBrZXkpLiAgZT09NjU1MzcgaXMgYSBnb29kIGNob2ljZQorICAgICAgIEBwYXJhbSBrZXkgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBhIG5ld2x5IGNyZWF0ZWQgcHJpdmF0ZSBrZXkgcGFpcgorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGwgYWxsb2NhdGVkIHJhbSBpcyBmcmVlZAorICAgICovCisgICAgaW50ICgqcnNhX2tleWdlbikocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgc2l6ZSwgbG9uZyBlLCByc2Ffa2V5ICprZXkpOworICAgCisKKyAgIC8qKiBSU0EgZXhwb25lbnRpYXRpb24KKyAgICAgIEBwYXJhbSBpbiAgICAgICBUaGUgb2N0ZXQgYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBiYXNlCisgICAgICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQKKyAgICAgIEBwYXJhbSBvdXQgICAgICBUaGUgZGVzdGluYXRpb24gKHRvIGJlIHN0b3JlZCBpbiBhbiBvY3RldCBhcnJheSBmb3JtYXQpCisgICAgICBAcGFyYW0gb3V0bGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIHJlc3VsdGluZyBzaXplICh6ZXJvIHBhZGRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgbW9kdWx1cykKKyAgICAgIEBwYXJhbSB3aGljaCAgICBQS19QVUJMSUMgZm9yIHB1YmxpYyBSU0EgYW5kIFBLX1BSSVZBVEUgZm9yIHByaXZhdGUgUlNBCisgICAgICBAcGFyYW0ga2V5ICAgICAgVGhlIFJTQSBrZXkgdG8gdXNlIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqcnNhX21lKShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB3aGljaCwKKyAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK30gbHRjX21hdGhfZGVzY3JpcHRvcjsKKworZXh0ZXJuIGx0Y19tYXRoX2Rlc2NyaXB0b3IgbHRjX21wOworCitpbnQgbHRjX2luaXRfbXVsdGkodm9pZCAqKmEsIC4uLik7Cit2b2lkIGx0Y19kZWluaXRfbXVsdGkodm9pZCAqYSwgLi4uKTsKKworI2lmZGVmIExUTV9ERVNDCitleHRlcm4gY29uc3QgbHRjX21hdGhfZGVzY3JpcHRvciBsdG1fZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgVEZNX0RFU0MKK2V4dGVybiBjb25zdCBsdGNfbWF0aF9kZXNjcmlwdG9yIHRmbV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBHTVBfREVTQworZXh0ZXJuIGNvbnN0IGx0Y19tYXRoX2Rlc2NyaXB0b3IgZ21wX2Rlc2M7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKERFU0NfREVGX09OTFkpICYmIGRlZmluZWQoTFRDX1NPVVJDRSkKKworI2RlZmluZSBNUF9ESUdJVF9CSVQgICAgICAgICAgICAgICAgIGx0Y19tcC5iaXRzX3Blcl9kaWdpdAorCisvKiBzb21lIGhhbmR5IG1hY3JvcyAqLworI2RlZmluZSBtcF9pbml0KGEpICAgICAgICAgICAgICAgICAgIGx0Y19tcC5pbml0KGEpCisjZGVmaW5lIG1wX2luaXRfbXVsdGkgICAgICAgICAgICAgICAgbHRjX2luaXRfbXVsdGkKKyNkZWZpbmUgbXBfY2xlYXIoYSkgICAgICAgICAgICAgICAgICBsdGNfbXAuZGVpbml0KGEpCisjZGVmaW5lIG1wX2NsZWFyX211bHRpICAgICAgICAgICAgICAgbHRjX2RlaW5pdF9tdWx0aQorI2RlZmluZSBtcF9pbml0X2NvcHkoYSwgYikgICAgICAgICAgIGx0Y19tcC5pbml0X2NvcHkoYSwgYikKKworI2RlZmluZSBtcF9uZWcoYSwgYikgICAgICAgICAgICAgICAgIGx0Y19tcC5uZWcoYSwgYikKKyNkZWZpbmUgbXBfY29weShhLCBiKSAgICAgICAgICAgICAgICBsdGNfbXAuY29weShhLCBiKQorCisjZGVmaW5lIG1wX3NldChhLCBiKSAgICAgICAgICAgICAgICAgbHRjX21wLnNldF9pbnQoYSwgYikKKyNkZWZpbmUgbXBfc2V0X2ludChhLCBiKSAgICAgICAgICAgICBsdGNfbXAuc2V0X2ludChhLCBiKQorI2RlZmluZSBtcF9nZXRfaW50KGEpICAgICAgICAgICAgICAgIGx0Y19tcC5nZXRfaW50KGEpCisjZGVmaW5lIG1wX2dldF9kaWdpdChhLCBuKSAgICAgICAgICAgbHRjX21wLmdldF9kaWdpdChhLCBuKQorI2RlZmluZSBtcF9nZXRfZGlnaXRfY291bnQoYSkgICAgICAgIGx0Y19tcC5nZXRfZGlnaXRfY291bnQoYSkKKyNkZWZpbmUgbXBfY21wKGEsIGIpICAgICAgICAgICAgICAgICBsdGNfbXAuY29tcGFyZShhLCBiKQorI2RlZmluZSBtcF9jbXBfZChhLCBiKSAgICAgICAgICAgICAgIGx0Y19tcC5jb21wYXJlX2QoYSwgYikKKyNkZWZpbmUgbXBfY291bnRfYml0cyhhKSAgICAgICAgICAgICBsdGNfbXAuY291bnRfYml0cyhhKQorI2RlZmluZSBtcF9jbnRfbHNiKGEpICAgICAgICAgICAgICAgIGx0Y19tcC5jb3VudF9sc2JfYml0cyhhKQorI2RlZmluZSBtcF8yZXhwdChhLCBiKSAgICAgICAgICAgICAgIGx0Y19tcC50d29leHB0KGEsIGIpCisKKyNkZWZpbmUgbXBfcmVhZF9yYWRpeChhLCBiLCBjKSAgICAgICBsdGNfbXAucmVhZF9yYWRpeChhLCBiLCBjKQorI2RlZmluZSBtcF90b3JhZGl4KGEsIGIsIGMpICAgICAgICAgIGx0Y19tcC53cml0ZV9yYWRpeChhLCBiLCBjKQorI2RlZmluZSBtcF91bnNpZ25lZF9iaW5fc2l6ZShhKSAgICAgIGx0Y19tcC51bnNpZ25lZF9zaXplKGEpCisjZGVmaW5lIG1wX3RvX3Vuc2lnbmVkX2JpbihhLCBiKSAgICAgbHRjX21wLnVuc2lnbmVkX3dyaXRlKGEsIGIpCisjZGVmaW5lIG1wX3JlYWRfdW5zaWduZWRfYmluKGEsIGIsIGMpIGx0Y19tcC51bnNpZ25lZF9yZWFkKGEsIGIsIGMpCisKKyNkZWZpbmUgbXBfYWRkKGEsIGIsIGMpICAgICAgICAgICAgICBsdGNfbXAuYWRkKGEsIGIsIGMpCisjZGVmaW5lIG1wX2FkZF9kKGEsIGIsIGMpICAgICAgICAgICAgbHRjX21wLmFkZGkoYSwgYiwgYykKKyNkZWZpbmUgbXBfc3ViKGEsIGIsIGMpICAgICAgICAgICAgICBsdGNfbXAuc3ViKGEsIGIsIGMpCisjZGVmaW5lIG1wX3N1Yl9kKGEsIGIsIGMpICAgICAgICAgICAgbHRjX21wLnN1YmkoYSwgYiwgYykKKyNkZWZpbmUgbXBfbXVsKGEsIGIsIGMpICAgICAgICAgICAgICBsdGNfbXAubXVsKGEsIGIsIGMpCisjZGVmaW5lIG1wX211bF9kKGEsIGIsIGMpICAgICAgICAgICAgbHRjX21wLm11bGkoYSwgYiwgYykKKyNkZWZpbmUgbXBfc3FyKGEsIGIpICAgICAgICAgICAgICAgICBsdGNfbXAuc3FyKGEsIGIpCisjZGVmaW5lIG1wX2RpdihhLCBiLCBjLCBkKSAgICAgICAgICAgbHRjX21wLm1wZGl2KGEsIGIsIGMsIGQpCisjZGVmaW5lIG1wX2Rpdl8yKGEsIGIpICAgICAgICAgICAgICAgbHRjX21wLmRpdl8yKGEsIGIpCisjZGVmaW5lIG1wX21vZChhLCBiLCBjKSAgICAgICAgICAgICAgbHRjX21wLm1wZGl2KGEsIGIsIE5VTEwsIGMpCisjZGVmaW5lIG1wX21vZF9kKGEsIGIsIGMpICAgICAgICAgICAgbHRjX21wLm1vZGkoYSwgYiwgYykKKyNkZWZpbmUgbXBfZ2NkKGEsIGIsIGMpICAgICAgICAgICAgICBsdGNfbXAuZ2NkKGEsIGIsIGMpCisjZGVmaW5lIG1wX2xjbShhLCBiLCBjKSAgICAgICAgICAgICAgbHRjX21wLmxjbShhLCBiLCBjKQorCisjZGVmaW5lIG1wX211bG1vZChhLCBiLCBjLCBkKSAgICAgICAgbHRjX21wLm11bG1vZChhLCBiLCBjLCBkKQorI2RlZmluZSBtcF9zcXJtb2QoYSwgYiwgYykgICAgICAgICAgIGx0Y19tcC5zcXJtb2QoYSwgYiwgYykKKyNkZWZpbmUgbXBfaW52bW9kKGEsIGIsIGMpICAgICAgICAgICBsdGNfbXAuaW52bW9kKGEsIGIsIGMpCisKKyNkZWZpbmUgbXBfbW9udGdvbWVyeV9zZXR1cChhLCBiKSAgICBsdGNfbXAubW9udGdvbWVyeV9zZXR1cChhLCBiKQorI2RlZmluZSBtcF9tb250Z29tZXJ5X25vcm1hbGl6YXRpb24oYSwgYikgbHRjX21wLm1vbnRnb21lcnlfbm9ybWFsaXphdGlvbihhLCBiKQorI2RlZmluZSBtcF9tb250Z29tZXJ5X3JlZHVjZShhLCBiLCBjKSAgIGx0Y19tcC5tb250Z29tZXJ5X3JlZHVjZShhLCBiLCBjKQorI2RlZmluZSBtcF9tb250Z29tZXJ5X2ZyZWUoYSkgICAgICAgIGx0Y19tcC5tb250Z29tZXJ5X2RlaW5pdChhKQorCisjZGVmaW5lIG1wX2V4cHRtb2QoYSxiLGMsZCkgICAgICAgICAgbHRjX21wLmV4cHRtb2QoYSxiLGMsZCkKKyNkZWZpbmUgbXBfcHJpbWVfaXNfcHJpbWUoYSwgYiwgYykgICBsdGNfbXAuaXNwcmltZShhLCBjKQorCisjZGVmaW5lIG1wX2lzemVybyhhKSAgICAgICAgICAgICAgICAgKG1wX2NtcF9kKGEsIDApID09IExUQ19NUF9FUSA/IExUQ19NUF9ZRVMgOiBMVENfTVBfTk8pCisjZGVmaW5lIG1wX2lzb2RkKGEpICAgICAgICAgICAgICAgICAgKG1wX2dldF9kaWdpdF9jb3VudChhKSA+IDAgPyAobXBfZ2V0X2RpZ2l0KGEsIDApICYgMSA/IExUQ19NUF9ZRVMgOiBMVENfTVBfTk8pIDogTFRDX01QX05PKQorI2RlZmluZSBtcF9leGNoKGEsIGIpICAgICAgICAgICAgICAgIGRvIHsgdm9pZCAqQUJDX190bXAgPSBhOyBhID0gYjsgYiA9IEFCQ19fdG1wOyB9IHdoaWxlKDApOworCisjZGVmaW5lIG1wX3RvaGV4KGEsIGIpICAgICAgICAgICAgICAgbXBfdG9yYWRpeChhLCBiLCAxNikKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hdGguaCx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40MyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wMiAxOToyMzoxMyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmggYi9zcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmgKaW5kZXggM2I0NDc5NS4uMGI0NDRmOCAxMDA2NDQKLS0tIGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWlzYy5oCisrKyBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaApAQCAtMTIsMTAgKzEyLDEyIEBACiB2b2lkIGJ1cm5fc3RhY2sodW5zaWduZWQgbG9uZyBsZW4pOwogCiBjb25zdCBjaGFyICplcnJvcl90b19zdHJpbmcoaW50IGVycik7Ci1pbnQgbXBpX3RvX2x0Y19lcnJvcihpbnQgZXJyKTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmNyeXB0X2J1aWxkX3NldHRpbmdzOwogCisvKiAtLS0tIEhNTSAtLS0tICovCitpbnQgY3J5cHRfZnNhKHZvaWQgKm1wLCAuLi4pOworCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmgsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNiAwMzowMzowMSAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy90b21jcnlwdF9way5oIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGsuaAppbmRleCA0ZjA0N2RlLi4zYTBkN2FiIDEwMDY0NAotLS0gYS9zcmMvaGVhZGVycy90b21jcnlwdF9way5oCisrKyBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrLmgKQEAgLTEsODEgKzEsMTEgQEAKIC8qIC0tLS0gTlVNQkVSIFRIRU9SWSAtLS0tICovCi0jaWZkZWYgTVBJCiAKLSNpbmNsdWRlICJsdGNfdG9tbWF0aC5oIgorZW51bSB7CisgICBQS19QVUJMSUM9MCwKKyAgIFBLX1BSSVZBVEU9MQorfTsKIAotLyogaW4vb3V0IG1hY3JvcyAqLwotI2RlZmluZSBPVVRQVVRfQklHTlVNKG51bSwgb3V0LCB5LCB6KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGlmICgoeSArIDQpID4gKm91dGxlbikgeyByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeiA9ICh1bnNpZ25lZCBsb25nKW1wX3Vuc2lnbmVkX2Jpbl9zaXplKG51bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBTVE9SRTMyTCh6LCBvdXQreSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHkgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKCh5ICsgeikgPiAqb3V0bGVuKSB7IHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2JpbihudW0sIG91dCt5KSkgIT0gTVBfT0tBWSkgeyByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOyB9ICAgIFwKLSAgICAgIHkgKz0gejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0KLSNkZWZpbmUgSU5QVVRfQklHTlVNKG51bSwgaW4sIHgsIHksIGlubGVuKSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIC8qIGxvYWQgdmFsdWUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgaWYgKCh5ICsgNCkgPiBpbmxlbikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBMT0FEMzJMKHgsIGluK3kpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHkgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAvKiBzYW5pdHkgY2hlY2suLi4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGlmICgoeCt5KSA+IGlubGVuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAvKiBsb2FkIGl0ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4obnVtLCAodW5zaWduZWQgY2hhciAqKWluK3ksIChpbnQpeCkpICE9IE1QX09LQVkpIHtcCi0gICAgICAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHkgKz0geDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgaWYgKChlcnIgPSBtcF9zaHJpbmsobnVtKSkgIT0gTVBfT0tBWSkgeyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKGVycik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0gaW50IGlzX3ByaW1lKG1wX2ludCAqLCBpbnQgKik7Ci0gaW50IHJhbmRfcHJpbWUobXBfaW50ICpOLCBsb25nIGxlbiwgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nKTsKLQotI2Vsc2UKLSAgICNpZmRlZiBNUlNBCi0gICAgICAjZXJyb3IgUlNBIHJlcXVpcmVzIHRoZSBiaWcgaW50IGxpYnJhcnkgCi0gICAjZW5kaWYKLSAgICNpZmRlZiBNRUNDCi0gICAgICAjZXJyb3IgRUNDIHJlcXVpcmVzIHRoZSBiaWcgaW50IGxpYnJhcnkgCi0gICAjZW5kaWYKLSAgICNpZmRlZiBNREgKLSAgICAgICNlcnJvciBESCByZXF1aXJlcyB0aGUgYmlnIGludCBsaWJyYXJ5IAotICAgI2VuZGlmCi0gICAjaWZkZWYgTURTQQotICAgICAgI2Vycm9yIERTQSByZXF1aXJlcyB0aGUgYmlnIGludCBsaWJyYXJ5IAotICAgI2VuZGlmCi0jZW5kaWYgLyogTVBJICovCi0KLQotLyogLS0tLSBQVUJMSUMgS0VZIENSWVBUTyAtLS0tICovCi0KLSNkZWZpbmUgUEtfUFJJVkFURSAgICAgICAgICAgIDAgICAgICAgIC8qIFBLIHByaXZhdGUga2V5cyAqLwotI2RlZmluZSBQS19QVUJMSUMgICAgICAgICAgICAgMSAgICAgICAgLyogUEsgcHVibGljIGtleXMgKi8KLQotLyogLS0tLSBQQUNLRVQgLS0tLSAqLwotI2lmZGVmIFBBQ0tFVAotCi12b2lkIHBhY2tldF9zdG9yZV9oZWFkZXIodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgc2VjdGlvbiwgaW50IHN1YnNlY3Rpb24pOwotaW50IHBhY2tldF92YWxpZF9oZWFkZXIodW5zaWduZWQgY2hhciAqc3JjLCBpbnQgc2VjdGlvbiwgaW50IHN1YnNlY3Rpb24pOwotCi0jZW5kaWYKLQoraW50IHJhbmRfcHJpbWUodm9pZCAqTiwgbG9uZyBsZW4sIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZyk7CiAKIC8qIC0tLS0gUlNBIC0tLS0gKi8KICNpZmRlZiBNUlNBCkBAIC04NCw5ICsxNCwyNiBAQAogI2RlZmluZSBNSU5fUlNBX1NJWkUgMTAyNAogI2RlZmluZSBNQVhfUlNBX1NJWkUgNDA5NgogCisvKiogUlNBIFBLQ1Mgc3R5bGUga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBSc2Ffa2V5IHsKKyAgICAvKiogVHlwZSBvZiBrZXksIFBLX1BSSVZBVEUgb3IgUEtfUFVCTElDICovCiAgICAgaW50IHR5cGU7Ci0gICAgbXBfaW50IGUsIGQsIE4sIHAsIHEsIHFQLCBkUCwgZFE7CisgICAgLyoqIFRoZSBwdWJsaWMgZXhwb25lbnQgKi8KKyAgICB2b2lkICplOyAKKyAgICAvKiogVGhlIHByaXZhdGUgZXhwb25lbnQgKi8KKyAgICB2b2lkICpkOyAKKyAgICAvKiogVGhlIG1vZHVsdXMgKi8KKyAgICB2b2lkICpOOyAKKyAgICAvKiogVGhlIHAgZmFjdG9yIG9mIE4gKi8KKyAgICB2b2lkICpwOyAKKyAgICAvKiogVGhlIHEgZmFjdG9yIG9mIE4gKi8KKyAgICB2b2lkICpxOyAKKyAgICAvKiogVGhlIDEvcSBtb2QgcCBDUlQgcGFyYW0gKi8KKyAgICB2b2lkICpxUDsgCisgICAgLyoqIFRoZSBkIG1vZCAocCAtIDEpIENSVCBwYXJhbSAqLworICAgIHZvaWQgKmRQOyAKKyAgICAvKiogVGhlIGQgbW9kIChxIC0gMSkgQ1JUIHBhcmFtICovCisgICAgdm9pZCAqZFE7CiB9IHJzYV9rZXk7CiAKIGludCByc2FfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgc2l6ZSwgbG9uZyBlLCByc2Ffa2V5ICprZXkpOwpAQCAtOTgsMjcgKzQ1LDQyIEBACiB2b2lkIHJzYV9mcmVlKHJzYV9rZXkgKmtleSk7CiAKIC8qIFRoZXNlIHVzZSBQS0NTICMxIHYyLjAgcGFkZGluZyAqLwotaW50IHJzYV9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAotICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgcHJuZ19pZHgsIGludCBoYXNoX2lkeCwgcnNhX2tleSAqa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLWludCByc2FfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sICAgdW5zaWduZWQgbG9uZyBscGFyYW1sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCBpbnQgKnN0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgICAgICAgKmtleSk7CisjZGVmaW5lIHJzYV9lbmNyeXB0X2tleShfaW4sIF9pbmxlbiwgX291dCwgX291dGxlbiwgX2xwYXJhbSwgX2xwYXJhbWxlbiwgX3BybmcsIF9wcm5nX2lkeCwgX2hhc2hfaWR4LCBfa2V5KSBcCisgIHJzYV9lbmNyeXB0X2tleV9leChfaW4sIF9pbmxlbiwgX291dCwgX291dGxlbiwgX2xwYXJhbSwgX2xwYXJhbWxlbiwgX3BybmcsIF9wcm5nX2lkeCwgX2hhc2hfaWR4LCBMVENfUEtDU18xX09BRVAsIF9rZXkpCiAKLWludCByc2Ffc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAgICAqcHJuZywgICAgIGludCAgICAgICAgICAgIHBybmdfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsIHVuc2lnbmVkIGxvbmcgIHNhbHRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworI2RlZmluZSByc2FfZGVjcnlwdF9rZXkoX2luLCBfaW5sZW4sIF9vdXQsIF9vdXRsZW4sIF9scGFyYW0sIF9scGFyYW1sZW4sIF9oYXNoX2lkeCwgX3N0YXQsIF9rZXkpIFwKKyAgcnNhX2RlY3J5cHRfa2V5X2V4KF9pbiwgX2lubGVuLCBfb3V0LCBfb3V0bGVuLCBfbHBhcmFtLCBfbHBhcmFtbGVuLCBfaGFzaF9pZHgsIExUQ19QS0NTXzFfT0FFUCwgX3N0YXQsIF9rZXkpCiAKLWludCByc2FfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgICAgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCAgICAgdW5zaWduZWQgbG9uZyBoYXNobGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgdW5zaWduZWQgbG9uZyBzYWx0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0LCAgICAgcnNhX2tleSAgICAgICprZXkpOworI2RlZmluZSByc2Ffc2lnbl9oYXNoKF9pbiwgX2lubGVuLCBfb3V0LCBfb3V0bGVuLCBfcHJuZywgX3BybmdfaWR4LCBfaGFzaF9pZHgsIF9zYWx0bGVuLCBfa2V5KSBcCisgIHJzYV9zaWduX2hhc2hfZXgoX2luLCBfaW5sZW4sIF9vdXQsIF9vdXRsZW4sIExUQ19QS0NTXzFfUFNTLCBfcHJuZywgX3BybmdfaWR4LCBfaGFzaF9pZHgsIF9zYWx0bGVuLCBfa2V5KQorCisjZGVmaW5lIHJzYV92ZXJpZnlfaGFzaChfc2lnLCBfc2lnbGVuLCBfaGFzaCwgX2hhc2hsZW4sIF9oYXNoX2lkeCwgX3NhbHRsZW4sIF9zdGF0LCBfa2V5KSBcCisgIHJzYV92ZXJpZnlfaGFzaF9leChfc2lnLCBfc2lnbGVuLCBfaGFzaCwgX2hhc2hsZW4sIExUQ19QS0NTXzFfUFNTLCBfaGFzaF9pZHgsIF9zYWx0bGVuLCBfc3RhdCwgX2tleSkKKworLyogVGhlc2UgY2FuIGJlIHN3aXRjaGVkIGJldHdlZW4gUEtDUyAjMSB2Mi54IGFuZCBQS0NTICMxIHYxLjUgcGFkZGluZ3MgKi8KK2ludCByc2FfZW5jcnlwdF9rZXlfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCB1bnNpZ25lZCBsb25nIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHBybmdfaWR4LCBpbnQgaGFzaF9pZHgsIGludCBwYWRkaW5nLCByc2Ffa2V5ICprZXkpOworCitpbnQgcnNhX2RlY3J5cHRfa2V5X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAgIHVuc2lnbmVkIGxvbmcgIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsIGludCAgICAgICAgICAgIHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQsICAgICByc2Ffa2V5ICAgICAgICprZXkpOworCitpbnQgcnNhX3NpZ25faGFzaF9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgcGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgICAgKnBybmcsICAgICBpbnQgICAgICAgICAgICBwcm5nX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKKworaW50IHJzYV92ZXJpZnlfaGFzaF9leChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsICAgICAgdW5zaWduZWQgbG9uZyBzaWdsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsICAgICB1bnNpZ25lZCBsb25nIGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCB1bnNpZ25lZCBsb25nIHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQsICAgICByc2Ffa2V5ICAgICAgKmtleSk7CiAKIC8qIFBLQ1MgIzEgaW1wb3J0L2V4cG9ydCAqLwogaW50IHJzYV9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCByc2Ffa2V5ICprZXkpOwpAQCAtMTI2LDExMSArODgsMjUyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAKICNlbmRpZgogCi0vKiAtLS0tIERIIFJvdXRpbmVzIC0tLS0gKi8KLSNpZmRlZiBNREggCisvKiAtLS0tIEthdGphIC0tLS0gKi8KKyNpZmRlZiBNS0FUCiAKLXR5cGVkZWYgc3RydWN0IERoX2tleSB7Ci0gICAgaW50IGlkeCwgdHlwZTsKLSAgICBtcF9pbnQgeCwgeTsKLX0gZGhfa2V5OworLyogTWluIGFuZCBNYXggS0FUIGtleSBzaXplcyAoaW4gYml0cykgKi8KKyNkZWZpbmUgTUlOX0tBVF9TSVpFIDEwMjQKKyNkZWZpbmUgTUFYX0tBVF9TSVpFIDQwOTYKIAotaW50IGRoX3Rlc3Qodm9pZCk7Ci12b2lkIGRoX3NpemVzKGludCAqbG93LCBpbnQgKmhpZ2gpOwotaW50IGRoX2dldF9zaXplKGRoX2tleSAqa2V5KTsKKy8qKiBLYXRqYSBQS0NTIHN0eWxlIGtleSAqLwordHlwZWRlZiBzdHJ1Y3QgS0FUX2tleSB7CisgICAgLyoqIFR5cGUgb2Yga2V5LCBQS19QUklWQVRFIG9yIFBLX1BVQkxJQyAqLworICAgIGludCB0eXBlOworICAgIC8qKiBUaGUgcHJpdmF0ZSBleHBvbmVudCAqLworICAgIHZvaWQgKmQ7IAorICAgIC8qKiBUaGUgbW9kdWx1cyAqLworICAgIHZvaWQgKk47IAorICAgIC8qKiBUaGUgcCBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnA7IAorICAgIC8qKiBUaGUgcSBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnE7IAorICAgIC8qKiBUaGUgMS9xIG1vZCBwIENSVCBwYXJhbSAqLworICAgIHZvaWQgKnFQOyAKKyAgICAvKiogVGhlIGQgbW9kIChwIC0gMSkgQ1JUIHBhcmFtICovCisgICAgdm9pZCAqZFA7IAorICAgIC8qKiBUaGUgZCBtb2QgKHEgLSAxKSBDUlQgcGFyYW0gKi8KKyAgICB2b2lkICpkUTsKKyAgICAvKiogVGhlIHBxIHBhcmFtICovCisgICAgdm9pZCAqcHE7Cit9IGthdGphX2tleTsKIAotaW50IGRoX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGtleXNpemUsIGRoX2tleSAqa2V5KTsKLXZvaWQgZGhfZnJlZShkaF9rZXkgKmtleSk7CitpbnQga2F0amFfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgc2l6ZSwga2F0amFfa2V5ICprZXkpOwogCi1pbnQgZGhfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwgZGhfa2V5ICprZXkpOwotaW50IGRoX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZGhfa2V5ICprZXkpOworaW50IGthdGphX2V4cHRtb2QoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHdoaWNoLAorICAgICAgICAgICAgICAgICAgICAgICAga2F0amFfa2V5ICprZXkpOwogCi1pbnQgZGhfc2hhcmVkX3NlY3JldChkaF9rZXkgICAgICAgICpwcml2YXRlX2tleSwgZGhfa2V5ICAgICAgICAqcHVibGljX2tleSwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwordm9pZCBrYXRqYV9mcmVlKGthdGphX2tleSAqa2V5KTsKIAotaW50IGRoX2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAgICAqcHJuZywgIGludCB3cHJuZywgaW50IGhhc2gsIAotICAgICAgICAgICAgICAgICAgICAgICAgIGRoX2tleSAgICAgICAgKmtleSk7CisvKiBUaGVzZSB1c2UgUEtDUyAjMSB2Mi4wIHBhZGRpbmcgKi8KK2ludCBrYXRqYV9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCB1bnNpZ25lZCBsb25nIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgcHJuZ19pZHgsIGludCBoYXNoX2lkeCwga2F0amFfa2V5ICprZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoraW50IGthdGphX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgICB1bnNpZ25lZCBsb25nIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgaW50ICpzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdGphX2tleSAgICAgICAqa2V5KTsKIAotaW50IGRoX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBkaF9rZXkgKmtleSk7Ci0KLWludCBkaF9zaWduX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICAgICpwcm5nLCBpbnQgd3BybmcsIGRoX2tleSAqa2V5KTsKLQotaW50IGRoX3ZlcmlmeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwgCi0gICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCBkaF9rZXkgKmtleSk7Ci0KLQorLyogUEtDUyAjMSBpbXBvcnQvZXhwb3J0ICovCitpbnQga2F0amFfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwga2F0amFfa2V5ICprZXkpOworaW50IGthdGphX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwga2F0amFfa2V5ICprZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgCiAjZW5kaWYKIAogLyogLS0tLSBFQ0MgUm91dGluZXMgLS0tLSAqLwogI2lmZGVmIE1FQ0MKKworLyogc2l6ZSBvZiBvdXIgdGVtcCBidWZmZXJzIGZvciBleHBvcnRlZCBrZXlzICovCisjZGVmaW5lIEVDQ19CVUZfU0laRSAyNTYKKworLyogbWF4IHByaXZhdGUga2V5IHNpemUgKi8KKyNkZWZpbmUgRUNDX01BWFNJWkUgIDY2CisKKy8qKiBTdHJ1Y3R1cmUgZGVmaW5lcyBhIE5JU1QgR0YocCkgY3VydmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICBtcF9pbnQgeCwgeSwgejsKKyAgIC8qKiBUaGUgc2l6ZSBvZiB0aGUgY3VydmUgaW4gb2N0ZXRzICovCisgICBpbnQgc2l6ZTsKKworICAgLyoqIG5hbWUgb2YgY3VydmUgKi8KKyAgIGNoYXIgKm5hbWU7IAorCisgICAvKiogVGhlIHByaW1lIHRoYXQgZGVmaW5lcyB0aGUgZmllbGQgdGhlIGN1cnZlIGlzIGluIChlbmNvZGVkIGluIGhleCkgKi8KKyAgIGNoYXIgKnByaW1lOworCisgICAvKiogVGhlIGZpZWxkcyBCIHBhcmFtIChoZXgpICovCisgICBjaGFyICpCOworCisgICAvKiogVGhlIG9yZGVyIG9mIHRoZSBjdXJ2ZSAoaGV4KSAqLworICAgY2hhciAqb3JkZXI7CisgIAorICAgLyoqIFRoZSB4IGNvLW9yZGluYXRlIG9mIHRoZSBiYXNlIHBvaW50IG9uIHRoZSBjdXJ2ZSAoaGV4KSAqLworICAgY2hhciAqR3g7CisgCisgICAvKiogVGhlIHkgY28tb3JkaW5hdGUgb2YgdGhlIGJhc2UgcG9pbnQgb24gdGhlIGN1cnZlIChoZXgpICovCisgICBjaGFyICpHeTsKK30gbHRjX2VjY19zZXRfdHlwZTsKKworLyoqIEEgcG9pbnQgb24gYSBFQ0MgY3VydmUsIHN0b3JlZCBpbiBKYWNib2JpYW4gZm9ybWF0IHN1Y2ggdGhhdCAoeCx5LHopID0+ICh4L3peMiwgeS96XjMsIDEpIHdoZW4gaW50ZXJwcmV0dGVkIGFzIGFmZmluZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBUaGUgeCBjby1vcmRpbmF0ZSAqLworICAgIHZvaWQgKng7CisKKyAgICAvKiogVGhlIHkgY28tb3JkaW5hdGUgKi8KKyAgICB2b2lkICp5OworCisgICAgLyoqIFRoZSB6IGNvLW9yZGluYXRlICovCisgICAgdm9pZCAqejsKIH0gZWNjX3BvaW50OwogCisvKiogQW4gRUNDIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGludCB0eXBlLCBpZHg7CisgICAgLyoqIFR5cGUgb2Yga2V5LCBQS19QUklWQVRFIG9yIFBLX1BVQkxJQyAqLworICAgIGludCB0eXBlOworCisgICAgLyoqIEluZGV4IGludG8gdGhlIGx0Y19lY2Nfc2V0c1tdIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIGN1cnZlOyBpZiAtMSwgdGhlbiB0aGlzIGtleSBpcyB1c2luZyB1c2VyIHN1cHBsaWVkIGN1cnZlIGluIGRwICovCisgICAgaW50IGlkeDsKKworCS8qKiBwb2ludGVyIHRvIGRvbWFpbiBwYXJhbWV0ZXJzOyBlaXRoZXIgcG9pbnRzIHRvIE5JU1QgY3VydmVzIChpZGVudGlmaWVkIGJ5IGlkeCA+PSAwKSBvciB1c2VyIHN1cHBsaWVkIGN1cnZlICovCisJY29uc3QgbHRjX2VjY19zZXRfdHlwZSAqZHA7CisKKyAgICAvKiogVGhlIHB1YmxpYyBrZXkgKi8KICAgICBlY2NfcG9pbnQgcHVia2V5OwotICAgIG1wX2ludCBrOworCisgICAgLyoqIFRoZSBwcml2YXRlIGtleSAqLworICAgIHZvaWQgKms7CiB9IGVjY19rZXk7CiAKLWludCBlY2NfdGVzdCh2b2lkKTsKLXZvaWQgZWNjX3NpemVzKGludCAqbG93LCBpbnQgKmhpZ2gpOwotaW50IGVjY19nZXRfc2l6ZShlY2Nfa2V5ICprZXkpOworLyoqIHRoZSBFQ0MgcGFyYW1zIHByb3ZpZGVkICovCitleHRlcm4gY29uc3QgbHRjX2VjY19zZXRfdHlwZSBsdGNfZWNjX3NldHNbXTsKIAotaW50IGVjY19tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBrZXlzaXplLCBlY2Nfa2V5ICprZXkpOworaW50ICBlY2NfdGVzdCh2b2lkKTsKK3ZvaWQgZWNjX3NpemVzKGludCAqbG93LCBpbnQgKmhpZ2gpOworaW50ICBlY2NfZ2V0X3NpemUoZWNjX2tleSAqa2V5KTsKKworaW50ICBlY2NfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQga2V5c2l6ZSwgZWNjX2tleSAqa2V5KTsKK2ludCAgZWNjX21ha2Vfa2V5X2V4KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZWNjX2tleSAqa2V5LCBjb25zdCBsdGNfZWNjX3NldF90eXBlICpkcCk7CiB2b2lkIGVjY19mcmVlKGVjY19rZXkgKmtleSk7CiAKLWludCBlY2NfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwgZWNjX2tleSAqa2V5KTsKLWludCBlY2NfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpOworaW50ICBlY2NfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwgZWNjX2tleSAqa2V5KTsKK2ludCAgZWNjX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZWNjX2tleSAqa2V5KTsKK2ludCAgZWNjX2ltcG9ydF9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZWNjX2tleSAqa2V5LCBjb25zdCBsdGNfZWNjX3NldF90eXBlICpkcCk7CiAKLWludCBlY2Nfc2hhcmVkX3NlY3JldChlY2Nfa2V5ICpwcml2YXRlX2tleSwgZWNjX2tleSAqcHVibGljX2tleSwgCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGVjY19hbnNpX3g5NjNfZXhwb3J0KGVjY19rZXkgKmtleSwgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGVjY19hbnNpX3g5NjNfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpOworaW50IGVjY19hbnNpX3g5NjNfaW1wb3J0X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXksIGx0Y19lY2Nfc2V0X3R5cGUgKmRwKTsKIAotaW50IGVjY19lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBoYXNoLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK2ludCAgZWNjX3NoYXJlZF9zZWNyZXQoZWNjX2tleSAqcHJpdmF0ZV9rZXksIGVjY19rZXkgKnB1YmxpY19rZXksIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CiAKLWludCBlY2NfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpOworaW50ICBlY2NfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSk7CiAKLWludCBlY2Nfc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGVjY19rZXkgKmtleSk7CitpbnQgIGVjY19kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKIAotaW50IGVjY192ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsICB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgbG9uZyBoYXNobGVuLCAKLSAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCBlY2Nfa2V5ICprZXkpOworaW50ICBlY2Nfc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZWNjX2tleSAqa2V5KTsKKworaW50ICBlY2NfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgdW5zaWduZWQgbG9uZyBzaWdsZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGhhc2hsZW4sIAorICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCBlY2Nfa2V5ICprZXkpOworCisvKiBsb3cgbGV2ZWwgZnVuY3Rpb25zICovCitlY2NfcG9pbnQgKmx0Y19lY2NfbmV3X3BvaW50KHZvaWQpOwordm9pZCAgICAgICBsdGNfZWNjX2RlbF9wb2ludChlY2NfcG9pbnQgKnApOworaW50ICAgICAgICBsdGNfZWNjX2lzX3ZhbGlkX2lkeChpbnQgbik7CisKKy8qIHBvaW50IG9wcyAobXAgPT0gbW9udGdvbWVyeSBkaWdpdCkgKi8KKyNpZiAhZGVmaW5lZChNRUNDX0FDQ0VMKSB8fCBkZWZpbmVkKExUTV9ERVNDKSB8fCBkZWZpbmVkKEdNUF9ERVNDKQorLyogUiA9IDJQICovCitpbnQgbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludChlY2NfcG9pbnQgKlAsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApOworCisvKiBSID0gUCArIFEgKi8KK2ludCBsdGNfZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50KGVjY19wb2ludCAqUCwgZWNjX3BvaW50ICpRLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNRUNDX0ZQKQoraW50IGx0Y19lY2NfZnBfbXVsbW9kKHZvaWQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCBpbnQgbWFwKTsKK2ludCBsdGNfZWNjX2ZwX3NhdmVfc3RhdGUodW5zaWduZWQgY2hhciAqKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBsdGNfZWNjX2ZwX3Jlc3RvcmVfc3RhdGUodW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOwordm9pZCBsdGNfZWNjX2ZwX2ZyZWUodm9pZCk7CisjZW5kaWYKKworLyogUiA9IGtHICovCitpbnQgbHRjX2VjY19tdWxtb2Qodm9pZCAqaywgZWNjX3BvaW50ICpHLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIGludCBtYXApOworCisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKKy8qIGtBKkEgKyBrQipCID0gQyAqLworaW50IGx0Y19lY2NfbXVsMmFkZChlY2NfcG9pbnQgKkEsIHZvaWQgKmtBLAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkIsIHZvaWQgKmtCLAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbW9kdWx1cyk7CisKKyNpZmRlZiBNRUNDX0ZQCitpbnQgbHRjX2VjY19mcF9tdWwyYWRkKGVjY19wb2ludCAqQSwgdm9pZCAqa0EsCisgICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQiwgdm9pZCAqa0IsCisgICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQywgdm9pZCAqbW9kdWx1cyk7CisjZW5kaWYKKworI2VuZGlmCisKKworLyogbWFwIFAgdG8gYWZmaW5lIGZyb20gcHJvamVjdGl2ZSAqLworaW50IGx0Y19lY2NfbWFwKGVjY19wb2ludCAqUCwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApOwogCiAjZW5kaWYKIAogI2lmZGVmIE1EU0EKIAorLyogTWF4IGRpZmYgYmV0d2VlbiBncm91cCBhbmQgbW9kdWx1cyBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIE1EU0FfREVMVEEgICAgIDUxMgorCisvKiBNYXggRFNBIGdyb3VwIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQgYWxsb3dzIDRrLWJpdCBncm91cHMpICovCisjZGVmaW5lIE1EU0FfTUFYX0dST1VQIDUxMgorCisvKiogRFNBIGtleSBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgIGludCB0eXBlLCBxb3JkOwotICAgbXBfaW50IGcsIHEsIHAsIHgsIHk7CisgICAvKiogVGhlIGtleSB0eXBlLCBQS19QUklWQVRFIG9yIFBLX1BVQkxJQyAqLworICAgaW50IHR5cGU7IAorCisgICAvKiogVGhlIG9yZGVyIG9mIHRoZSBzdWItZ3JvdXAgdXNlZCBpbiBvY3RldHMgKi8KKyAgIGludCBxb3JkOworCisgICAvKiogVGhlIGdlbmVyYXRvciAgKi8KKyAgIHZvaWQgKmc7CisKKyAgIC8qKiBUaGUgcHJpbWUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc3ViLWdyb3VwICovCisgICB2b2lkICpxOworCisgICAvKiogVGhlIGxhcmdlIHByaW1lIHRoYXQgZ2VuZXJhdHMgdGhlIGZpZWxkIHRoZSBjb250YWlucyB0aGUgc3ViLWdyb3VwICovCisgICB2b2lkICpwOworCisgICAvKiogVGhlIHByaXZhdGUga2V5ICovCisgICB2b2lkICp4OworCisgICAvKiogVGhlIHB1YmxpYyBrZXkgKi8KKyAgIHZvaWQgKnk7CiB9IGRzYV9rZXk7CiAKIGludCBkc2FfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgZ3JvdXBfc2l6ZSwgaW50IG1vZHVsdXNfc2l6ZSwgZHNhX2tleSAqa2V5KTsKIHZvaWQgZHNhX2ZyZWUoZHNhX2tleSAqa2V5KTsKIAotCiBpbnQgZHNhX3NpZ25faGFzaF9yYXcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9pbnQgKnIsICAgbXBfaW50ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpyLCAgIHZvaWQgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBkc2Ffa2V5ICprZXkpOwogCiBpbnQgZHNhX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZHNhX2tleSAqa2V5KTsKIAotaW50IGRzYV92ZXJpZnlfaGFzaF9yYXcoICAgICAgICAgbXBfaW50ICpyLCAgICAgICAgICBtcF9pbnQgKnMsCitpbnQgZHNhX3ZlcmlmeV9oYXNoX3JhdyggICAgICAgICB2b2lkICpyLCAgICAgICAgICB2b2lkICpzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGhhc2hsZW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAgICAgIGRzYV9rZXkgKmtleSk7CiAKQEAgLTIzOCwxMiArMzQxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQsIGRzYV9rZXkgICAgICAgKmtleSk7CiAKK2ludCBkc2FfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgCitpbnQgZHNhX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCiBpbnQgZHNhX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZHNhX2tleSAqa2V5KTsKLQogaW50IGRzYV9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCBkc2Ffa2V5ICprZXkpOwotCiBpbnQgZHNhX3ZlcmlmeV9rZXkoZHNhX2tleSAqa2V5LCBpbnQgKnN0YXQpOwogCitpbnQgZHNhX3NoYXJlZF9zZWNyZXQodm9pZCAgICAgICAgICAqcHJpdmF0ZV9rZXksIHZvaWQgKmJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAgICAgICAqcHVibGljX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKICNlbmRpZgogCiAjaWZkZWYgTFRDX0RFUgpAQCAtMjUxLDYgKzM2NCw3IEBACiAKIGVudW0gewogIExUQ19BU04xX0VPTCwKKyBMVENfQVNOMV9CT09MRUFOLAogIExUQ19BU04xX0lOVEVHRVIsCiAgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwKICBMVENfQVNOMV9CSVRfU1RSSU5HLApAQCAtMjU5LDE3ICszNzMsMjYgQEAKICBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwKICBMVENfQVNOMV9JQTVfU1RSSU5HLAogIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkcsCisgTFRDX0FTTjFfVVRGOF9TVFJJTkcsCiAgTFRDX0FTTjFfVVRDVElNRSwKLQogIExUQ19BU04xX0NIT0lDRSwKLSBMVENfQVNOMV9TRVFVRU5DRQorIExUQ19BU04xX1NFUVVFTkNFLAorIExUQ19BU04xX1NFVCwKKyBMVENfQVNOMV9TRVRPRgogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgeworLyoqIEEgTFRDIEFTTi4xIGxpc3QgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgbHRjX2FzbjFfbGlzdF8geworICAgLyoqIFRoZSBMVEMgQVNOLjEgZW51bWVyYXRlZCB0eXBlIGlkZW50aWZpZXIgKi8KICAgIGludCAgICAgICAgICAgdHlwZTsKKyAgIC8qKiBUaGUgZGF0YSB0byBlbmNvZGUgb3IgcGxhY2UgZm9yIGRlY29kaW5nICovCiAgICB2b2lkICAgICAgICAgKmRhdGE7CisgICAvKiogVGhlIHNpemUgb2YgdGhlIGlucHV0IG9yIHJlc3VsdGluZyBvdXRwdXQgKi8KICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAgIC8qKiBUaGUgdXNlZCBmbGFnLCB0aGlzIGlzIHVzZWQgYnkgdGhlIENIT0lDRSBBU04uMSB0eXBlIHRvIGluZGljYXRlIHdoaWNoIGNob2ljZSB3YXMgbWFkZSAqLwogICAgaW50ICAgICAgICAgICB1c2VkOworICAgLyoqIHByZXYvbmV4dCBlbnRyeSBpbiB0aGUgbGlzdCAqLworICAgc3RydWN0IGx0Y19hc24xX2xpc3RfICpwcmV2LCAqbmV4dCwgKmNoaWxkLCAqcGFyZW50OwogfSBsdGNfYXNuMV9saXN0OwogCiAjZGVmaW5lIExUQ19TRVRfQVNOMShsaXN0LCBpbmRleCwgVHlwZSwgRGF0YSwgU2l6ZSkgIFwKQEAgLTI3NywyOSArNDAwLDUzIEBACiAgICAgICBpbnQgTFRDX01BQ1JPX3RlbXAgICAgICAgICAgICA9IChpbmRleCk7ICAgICAgIFwKICAgICAgIGx0Y19hc24xX2xpc3QgKkxUQ19NQUNST19saXN0ID0gKGxpc3QpOyAgICAgICAgXAogICAgICAgTFRDX01BQ1JPX2xpc3RbTFRDX01BQ1JPX3RlbXBdLnR5cGUgPSAoVHlwZSk7ICBcCi0gICAgICBMVENfTUFDUk9fbGlzdFtMVENfTUFDUk9fdGVtcF0uZGF0YSA9IChEYXRhKTsgIFwKKyAgICAgIExUQ19NQUNST19saXN0W0xUQ19NQUNST190ZW1wXS5kYXRhID0gKHZvaWQqKShEYXRhKTsgIFwKICAgICAgIExUQ19NQUNST19saXN0W0xUQ19NQUNST190ZW1wXS5zaXplID0gKFNpemUpOyAgXAogICAgICAgTFRDX01BQ1JPX2xpc3RbTFRDX01BQ1JPX3RlbXBdLnVzZWQgPSAwOyAgICAgICBcCiAgICB9IHdoaWxlICgwKTsKIAogLyogU0VRVUVOQ0UgKi8KLWludCBkZXJfZW5jb2RlX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGVfb2YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgZGVyX2VuY29kZV9zZXF1ZW5jZShsaXN0LCBpbmxlbiwgb3V0LCBvdXRsZW4pIGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgobGlzdCwgaW5sZW4sIG91dCwgb3V0bGVuLCBMVENfQVNOMV9TRVFVRU5DRSkgICAgICAgICAgICAgICAgICAgICAgICAKIAotaW50IGRlcl9kZWNvZGVfc2VxdWVuY2UoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYXNuMV9saXN0ICpsaXN0LCB1bnNpZ25lZCBsb25nICBvdXRsZW4pOworaW50IGRlcl9kZWNvZGVfc2VxdWVuY2VfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqbGlzdCwgICAgIHVuc2lnbmVkIGxvbmcgIG91dGxlbiwgaW50IG9yZGVyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBsaXN0LCBvdXRsZW4pIGRlcl9kZWNvZGVfc2VxdWVuY2VfZXgoaW4sIGlubGVuLCBsaXN0LCBvdXRsZW4sIDEpCiAKIGludCBkZXJfbGVuZ3RoX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOwogCi0vKiBWQSBsaXN0IGhhbmR5IGhlbHBlcnMgKi8KKy8qIFNFVCAqLworI2RlZmluZSBkZXJfZGVjb2RlX3NldChpbiwgaW5sZW4sIGxpc3QsIG91dGxlbikgZGVyX2RlY29kZV9zZXF1ZW5jZV9leChpbiwgaW5sZW4sIGxpc3QsIG91dGxlbiwgMCkKKyNkZWZpbmUgZGVyX2xlbmd0aF9zZXQgZGVyX2xlbmd0aF9zZXF1ZW5jZQoraW50IGRlcl9lbmNvZGVfc2V0KGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9lbmNvZGVfc2V0b2YobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIFZBIGxpc3QgaGFuZHkgaGVscGVycyB3aXRoIHRyaXBsZXRzIG9mIDx0eXBlLCBzaXplLCBkYXRhPiAqLwogaW50IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIC4uLik7CiBpbnQgZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKTsKIAorLyogRkxFWEkgREVDT0RFUiBoYW5kbGUgdW5rbm93biBsaXN0IGRlY29kZXIgKi8KK2ludCAgZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyAqaW5sZW4sIGx0Y19hc24xX2xpc3QgKipvdXQpOwordm9pZCBkZXJfZnJlZV9zZXF1ZW5jZV9mbGV4aShsdGNfYXNuMV9saXN0ICpsaXN0KTsKK3ZvaWQgZGVyX3NlcXVlbmNlX2ZyZWUobHRjX2FzbjFfbGlzdCAqaW4pOworCisvKiBCT09MRUFOICovCitpbnQgZGVyX2xlbmd0aF9ib29sZWFuKHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2VuY29kZV9ib29sZWFuKGludCBpbiwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZGVjb2RlX2Jvb2xlYW4oY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm91dCk7CQkgICAgICAgCiAvKiBJTlRFR0VSICovCi1pbnQgZGVyX2VuY29kZV9pbnRlZ2VyKG1wX2ludCAqbnVtLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7Ci1pbnQgZGVyX2RlY29kZV9pbnRlZ2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBtcF9pbnQgKm51bSk7Ci1pbnQgZGVyX2xlbmd0aF9pbnRlZ2VyKG1wX2ludCAqbnVtLCB1bnNpZ25lZCBsb25nICpsZW4pOworaW50IGRlcl9lbmNvZGVfaW50ZWdlcih2b2lkICpudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZGVjb2RlX2ludGVnZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHZvaWQgKm51bSk7CitpbnQgZGVyX2xlbmd0aF9pbnRlZ2VyKHZvaWQgKm51bSwgdW5zaWduZWQgbG9uZyAqbGVuKTsKIAogLyogSU5URUdFUiAtLSBoYW5keSBmb3IgMC4uMl4zMi0xIHZhbHVlcyAqLwogaW50IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgdW5zaWduZWQgbG9uZyAqbnVtKTsKQEAgLTM0OCw2ICs0OTUsMjIgQEAKIGludCBkZXJfcHJpbnRhYmxlX2NoYXJfZW5jb2RlKGludCBjKTsKIGludCBkZXJfcHJpbnRhYmxlX3ZhbHVlX2RlY29kZShpbnQgdik7CiAKKy8qIFVURi04ICovCisjaWYgKGRlZmluZWQoU0laRV9NQVgpIHx8IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCB8fCBkZWZpbmVkKFdDSEFSX01BWCkgfHwgZGVmaW5lZChfV0NIQVJfVCkgfHwgZGVmaW5lZChfV0NIQVJfVF9ERUZJTkVEKSkgJiYgIWRlZmluZWQoTFRDX05PX1dDSEFSKQorI2luY2x1ZGUgPHdjaGFyLmg+CisjZWxzZQordHlwZWRlZiB1bG9uZzMyIHdjaGFyX3Q7CisjZW5kaWYKKworaW50IGRlcl9lbmNvZGVfdXRmOF9zdHJpbmcoY29uc3Qgd2NoYXJfdCAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV91dGY4X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7Cit1bnNpZ25lZCBsb25nIGRlcl91dGY4X2NoYXJzaXplKGNvbnN0IHdjaGFyX3QgYyk7CitpbnQgZGVyX2xlbmd0aF91dGY4X3N0cmluZyhjb25zdCB3Y2hhcl90ICppbiwgdW5zaWduZWQgbG9uZyBub2N0ZXRzLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCisKIC8qIENIT0lDRSAqLwogaW50IGRlcl9kZWNvZGVfY2hvaWNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgKmlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgIG91dGxlbik7CkBAIC0zNzcsNSArNTQwLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9way5oLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMwICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDExOjIzOjAzICQgKi8KKy8qICRSZXZpc2lvbjogMS43NyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wMyAwMDozOTo1NiAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmggYi9zcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmgKaW5kZXggOGQ4NTBkZS4uNzFiY2RiOSAxMDA2NDQKLS0tIGEvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oCisrKyBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaApAQCAtMywxMiArMyw0MyBAQAogLyogPT09PiBQS0NTICMxIC0tIFJTQSBDcnlwdG9ncmFwaHkgPD09PSAqLwogI2lmZGVmIFBLQ1NfMQogCi1pbnQgcGtjc18xX21nZjEoY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWduZWQgbG9uZyBzZWVkbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LAorZW51bSBsdGNfcGtjc18xX3YxXzVfYmxvY2tzCit7CisgIExUQ19QS0NTXzFfRU1TQSAgID0gMSwgICAgICAgIC8qIEJsb2NrIHR5cGUgMSAoUEtDUyAjMSB2MS41IHNpZ25hdHVyZSBwYWRkaW5nKSAqLworICBMVENfUEtDU18xX0VNRSAgICA9IDIgICAgICAgICAvKiBCbG9jayB0eXBlIDIgKFBLQ1MgIzEgdjEuNSBlbmNyeXB0aW9uIHBhZGRpbmcpICovCit9OworCitlbnVtIGx0Y19wa2NzXzFfcGFkZGluZ3MKK3sKKyAgTFRDX1BLQ1NfMV9WMV81ICAgPSAxLCAgICAgICAgLyogUEtDUyAjMSB2MS41IHBhZGRpbmcgKFxzYSBsdGNfcGtjc18xX3YxXzVfYmxvY2tzKSAqLworICBMVENfUEtDU18xX09BRVAgICA9IDIsICAgICAgICAvKiBQS0NTICMxIHYyLjAgZW5jcnlwdGlvbiBwYWRkaW5nICovCisgIExUQ19QS0NTXzFfUFNTICAgID0gMyAgICAgICAgIC8qIFBLQ1MgIzEgdjIuMSBzaWduYXR1cmUgcGFkZGluZyAqLworfTsKKworaW50IHBrY3NfMV9tZ2YxKCAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGxvbmcgc2VlZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptYXNrLCB1bnNpZ25lZCBsb25nIG1hc2tsZW4pOwogCi1pbnQgcGtjc18xX2kyb3NwKG1wX2ludCAqbiwgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2xlbiwgdW5zaWduZWQgY2hhciAqb3V0KTsKLWludCBwa2NzXzFfb3MyaXAobXBfaW50ICpuLCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7CitpbnQgcGtjc18xX2kyb3NwKHZvaWQgKm4sIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19sZW4sIHVuc2lnbmVkIGNoYXIgKm91dCk7CitpbnQgcGtjc18xX29zMmlwKHZvaWQgKm4sIHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKKworLyogKioqIHYxLjUgcGFkZGluZyAqLworaW50IHBrY3NfMV92MV81X2VuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGJsb2NrX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBwa2NzXzFfdjFfNV9kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBibG9ja190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2R1bHVzX2JpdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppc192YWxpZCk7CiAKIC8qICoqKiB2Mi4xIHBhZGRpbmcgKi8KIGludCBwa2NzXzFfb2FlcF9lbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAgICB1bnNpZ25lZCBsb25nIG1zZ2xlbiwKQEAgLTU0LDUgKzg1LDUgQEAKICNlbmRpZiAgLyogUEtDU181ICovCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE0IDExOjQ2OjA4ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzE1IDEyOjQ0OjU5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BybmcuaCBiL3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BybmcuaAppbmRleCBmOTZkNDA4Li5kZDY0MGM5IDEwMDY0NAotLS0gYS9zcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmgKKysrIGIvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oCkBAIC00LDYgKzQsNyBAQAogICAgIGludCAgICAgICAgICAgICAgICAgICBjaXBoZXIsIGhhc2g7CiAgICAgdW5zaWduZWQgY2hhciAgICAgICAgIHBvb2xbTUFYQkxPQ0tTSVpFXTsKICAgICBzeW1tZXRyaWNfQ1RSICAgICAgICAgY3RyOworICAgIExUQ19NVVRFWF9UWVBFKHBybmdfbG9jaykKIH07CiAjZW5kaWYKIApAQCAtMjgsNiArMjksNyBAQAogICAgICAgICAgICAgICAgICAgd2Q7ICAgICAgICAgICAgCiAKICAgICB1bG9uZzY0ICAgICAgIHJlc2V0X2NudDsgIC8qIG51bWJlciBvZiB0aW1lcyB3ZSBoYXZlIHJlc2V0ICovCisgICAgTFRDX01VVEVYX1RZUEUocHJuZ19sb2NrKQogfTsKICNlbmRpZgogCkBAIC00Niw2ICs0OCw3IEBACiAjZW5kaWYKIAogdHlwZWRlZiB1bmlvbiBQcm5nX3N0YXRlIHsKKyAgICBjaGFyIGR1bW15WzFdOwogI2lmZGVmIFlBUlJPVwogICAgIHN0cnVjdCB5YXJyb3dfcHJuZyAgICB5YXJyb3c7CiAjZW5kaWYKQEAgLTYwLDYgKzYzLDcgQEAKICNlbmRpZgogfSBwcm5nX3N0YXRlOwogCisvKiogUFJORyBkZXNjcmlwdG9yICovCiBleHRlcm4gc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgewogICAgIC8qKiBOYW1lIG9mIHRoZSBQUk5HICovCiAgICAgY2hhciAqbmFtZTsKQEAgLTE3OCw3ICsxODIsNyBAQAogaW50IHJlZ2lzdGVyX3BybmcoY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgKnBybmcpOwogaW50IHVucmVnaXN0ZXJfcHJuZyhjb25zdCBzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvciAqcHJuZyk7CiBpbnQgcHJuZ19pc192YWxpZChpbnQgaWR4KTsKLUxUQ19NVVRFWF9QUk9UTyhsdGNfcHJuZ19tdXRleCk7CitMVENfTVVURVhfUFJPVE8obHRjX3BybmdfbXV0ZXgpCiAKIC8qIFNsb3cgUk5HIHlvdSAqKm1pZ2h0KiogYmUgYWJsZSB0byB1c2UgdG8gc2VlZCBhIFBSTkcgd2l0aC4gIEJlIGNhcmVmdWwgYXMgdGhpcwogICogbWlnaHQgbm90IHdvcmsgb24gYWxsIHBsYXRmb3JtcyBhcyBwbGFubmVkCkBAIC0xOTEsNSArMTk1LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmgsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNSAwMTozNjo0MyAkICovCmRpZmYgLS1naXQgYS9zcmMvaGVhZGVycy90b21tYXRoX2NsYXNzLmggYi9zcmMvaGVhZGVycy90b21tYXRoX2NsYXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZGQ3Y2YuLjAwMDAwMDAKLS0tIGEvc3JjL2hlYWRlcnMvdG9tbWF0aF9jbGFzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTk4ICswLDAgQEAKLSNpZiAhKGRlZmluZWQoTFRNMSkgJiYgZGVmaW5lZChMVE0yKSAmJiBkZWZpbmVkKExUTTMpKQotI2lmIGRlZmluZWQoTFRNMikKLSNkZWZpbmUgTFRNMwotI2VuZGlmCi0jaWYgZGVmaW5lZChMVE0xKQotI2RlZmluZSBMVE0yCi0jZW5kaWYKLSNkZWZpbmUgTFRNMQotCi0jaWYgZGVmaW5lZChMVE1fQUxMKQotI2RlZmluZSBCTl9FUlJPUl9DCi0jZGVmaW5lIEJOX0ZBU1RfTVBfSU5WTU9EX0MKLSNkZWZpbmUgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCi0jZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCi0jZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKLSNkZWZpbmUgQk5fRkFTVF9TX01QX1NRUl9DCi0jZGVmaW5lIEJOX01QXzJFWFBUX0MKLSNkZWZpbmUgQk5fTVBfQUJTX0MKLSNkZWZpbmUgQk5fTVBfQUREX0MKLSNkZWZpbmUgQk5fTVBfQUREX0RfQwotI2RlZmluZSBCTl9NUF9BRERNT0RfQwotI2RlZmluZSBCTl9NUF9BTkRfQwotI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0jZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQwotI2RlZmluZSBCTl9NUF9DTVBfQwotI2RlZmluZSBCTl9NUF9DTVBfRF9DCi0jZGVmaW5lIEJOX01QX0NNUF9NQUdfQwotI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKLSNkZWZpbmUgQk5fTVBfQ09QWV9DCi0jZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQwotI2RlZmluZSBCTl9NUF9ESVZfQwotI2RlZmluZSBCTl9NUF9ESVZfMl9DCi0jZGVmaW5lIEJOX01QX0RJVl8yRF9DCi0jZGVmaW5lIEJOX01QX0RJVl8zX0MKLSNkZWZpbmUgQk5fTVBfRElWX0RfQwotI2RlZmluZSBCTl9NUF9EUl9JU19NT0RVTFVTX0MKLSNkZWZpbmUgQk5fTVBfRFJfUkVEVUNFX0MKLSNkZWZpbmUgQk5fTVBfRFJfU0VUVVBfQwotI2RlZmluZSBCTl9NUF9FWENIX0MKLSNkZWZpbmUgQk5fTVBfRVhQVF9EX0MKLSNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCi0jZGVmaW5lIEJOX01QX0VYUFRNT0RfRkFTVF9DCi0jZGVmaW5lIEJOX01QX0VYVEVVQ0xJRF9DCi0jZGVmaW5lIEJOX01QX0ZSRUFEX0MKLSNkZWZpbmUgQk5fTVBfRldSSVRFX0MKLSNkZWZpbmUgQk5fTVBfR0NEX0MKLSNkZWZpbmUgQk5fTVBfR0VUX0lOVF9DCi0jZGVmaW5lIEJOX01QX0dST1dfQwotI2RlZmluZSBCTl9NUF9JTklUX0MKLSNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKLSNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCi0jZGVmaW5lIEJOX01QX0lOSVRfU0VUX0MKLSNkZWZpbmUgQk5fTVBfSU5JVF9TRVRfSU5UX0MKLSNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKLSNkZWZpbmUgQk5fTVBfSU5WTU9EX0MKLSNkZWZpbmUgQk5fTVBfSU5WTU9EX1NMT1dfQwotI2RlZmluZSBCTl9NUF9JU19TUVVBUkVfQwotI2RlZmluZSBCTl9NUF9KQUNPQklfQwotI2RlZmluZSBCTl9NUF9LQVJBVFNVQkFfTVVMX0MKLSNkZWZpbmUgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCi0jZGVmaW5lIEJOX01QX0xDTV9DCi0jZGVmaW5lIEJOX01QX0xTSERfQwotI2RlZmluZSBCTl9NUF9NT0RfQwotI2RlZmluZSBCTl9NUF9NT0RfMkRfQwotI2RlZmluZSBCTl9NUF9NT0RfRF9DCi0jZGVmaW5lIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKLSNkZWZpbmUgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQwotI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MKLSNkZWZpbmUgQk5fTVBfTVVMX0MKLSNkZWZpbmUgQk5fTVBfTVVMXzJfQwotI2RlZmluZSBCTl9NUF9NVUxfMkRfQwotI2RlZmluZSBCTl9NUF9NVUxfRF9DCi0jZGVmaW5lIEJOX01QX01VTE1PRF9DCi0jZGVmaW5lIEJOX01QX05fUk9PVF9DCi0jZGVmaW5lIEJOX01QX05FR19DCi0jZGVmaW5lIEJOX01QX09SX0MKLSNkZWZpbmUgQk5fTVBfUFJJTUVfRkVSTUFUX0MKLSNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfRElWSVNJQkxFX0MKLSNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQwotI2RlZmluZSBCTl9NUF9QUklNRV9NSUxMRVJfUkFCSU5fQwotI2RlZmluZSBCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MKLSNkZWZpbmUgQk5fTVBfUFJJTUVfUkFCSU5fTUlMTEVSX1RSSUFMU19DCi0jZGVmaW5lIEJOX01QX1BSSU1FX1JBTkRPTV9FWF9DCi0jZGVmaW5lIEJOX01QX1JBRElYX1NJWkVfQwotI2RlZmluZSBCTl9NUF9SQURJWF9TTUFQX0MKLSNkZWZpbmUgQk5fTVBfUkFORF9DCi0jZGVmaW5lIEJOX01QX1JFQURfUkFESVhfQwotI2RlZmluZSBCTl9NUF9SRUFEX1NJR05FRF9CSU5fQwotI2RlZmluZSBCTl9NUF9SRUFEX1VOU0lHTkVEX0JJTl9DCi0jZGVmaW5lIEJOX01QX1JFRFVDRV9DCi0jZGVmaW5lIEJOX01QX1JFRFVDRV8yS19DCi0jZGVmaW5lIEJOX01QX1JFRFVDRV8yS19MX0MKLSNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MKLSNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0xfQwotI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfQwotI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCi0jZGVmaW5lIEJOX01QX1JFRFVDRV9TRVRVUF9DCi0jZGVmaW5lIEJOX01QX1JTSERfQwotI2RlZmluZSBCTl9NUF9TRVRfQwotI2RlZmluZSBCTl9NUF9TRVRfSU5UX0MKLSNkZWZpbmUgQk5fTVBfU0hSSU5LX0MKLSNkZWZpbmUgQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MKLSNkZWZpbmUgQk5fTVBfU1FSX0MKLSNkZWZpbmUgQk5fTVBfU1FSTU9EX0MKLSNkZWZpbmUgQk5fTVBfU1FSVF9DCi0jZGVmaW5lIEJOX01QX1NVQl9DCi0jZGVmaW5lIEJOX01QX1NVQl9EX0MKLSNkZWZpbmUgQk5fTVBfU1VCTU9EX0MKLSNkZWZpbmUgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCi0jZGVmaW5lIEJOX01QX1RPX1NJR05FRF9CSU5fTl9DCi0jZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCi0jZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9OX0MKLSNkZWZpbmUgQk5fTVBfVE9PTV9NVUxfQwotI2RlZmluZSBCTl9NUF9UT09NX1NRUl9DCi0jZGVmaW5lIEJOX01QX1RPUkFESVhfQwotI2RlZmluZSBCTl9NUF9UT1JBRElYX05fQwotI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCi0jZGVmaW5lIEJOX01QX1hPUl9DCi0jZGVmaW5lIEJOX01QX1pFUk9fQwotI2RlZmluZSBCTl9QUklNRV9UQUJfQwotI2RlZmluZSBCTl9SRVZFUlNFX0MKLSNkZWZpbmUgQk5fU19NUF9BRERfQwotI2RlZmluZSBCTl9TX01QX0VYUFRNT0RfQwotI2RlZmluZSBCTl9TX01QX01VTF9ESUdTX0MKLSNkZWZpbmUgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKLSNkZWZpbmUgQk5fU19NUF9TUVJfQwotI2RlZmluZSBCTl9TX01QX1NVQl9DCi0jZGVmaW5lIEJOQ09SRV9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fRVJST1JfQykKLSAgICNkZWZpbmUgQk5fTVBfRVJST1JfVE9fU1RSSU5HX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9GQVNUX01QX0lOVk1PRF9DKQotICAgI2RlZmluZSBCTl9NUF9JU0VWRU5fQwotICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX01PRF9DCi0gICAjZGVmaW5lIEJOX01QX1NFVF9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKLSAgICNkZWZpbmUgQk5fTVBfSVNPRERfQwotICAgI2RlZmluZSBCTl9NUF9TVUJfQwotICAgI2RlZmluZSBCTl9NUF9DTVBfQwotICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DKQotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCi0gICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0RJR1NfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DKQotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX0ZBU1RfU19NUF9TUVJfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF8yRVhQVF9DKQotICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfQUJTX0MpCi0gICAjZGVmaW5lIEJOX01QX0NPUFlfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0FERF9DKQotICAgI2RlZmluZSBCTl9TX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQwotICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfQUREX0RfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0FERE1PRF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfQUREX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0FORF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfQ0xBTVBfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9DTEVBUl9DKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0NMRUFSX01VTFRJX0MpCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9DTVBfQykKLSAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfQ01QX0RfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9DTVBfTUFHX0MpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfQ05UX0xTQl9DKQotICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0NPUFlfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfQ09VTlRfQklUU19DKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0RJVl9DKQotICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCi0gICAjZGVmaW5lIEJOX01QX0FCU19DCi0gICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfU0laRV9DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9MU0hEX0MKLSAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCi0gICAjZGVmaW5lIEJOX01QX01VTF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfRElWXzJfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9ESVZfMkRfQykKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfTU9EXzJEX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9ESVZfM19DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQwotICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfRElWX0RfQykKLSAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8zX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0RSX0lTX01PRFVMVVNfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9EUl9SRURVQ0VfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCi0gICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9EUl9TRVRVUF9DKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0VYQ0hfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9FWFBUX0RfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfU1FSX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0VYUFRNT0RfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCi0gICAjZGVmaW5lIEJOX01QX0lOVk1PRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSAgICNkZWZpbmUgQk5fTVBfQUJTX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQwotICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCi0gICAjZGVmaW5lIEJOX1NfTVBfRVhQVE1PRF9DCi0gICAjZGVmaW5lIEJOX01QX0RSX0lTX01PRFVMVVNfQwotICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfQwotICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCi0gICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfRkFTVF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfRVhQVE1PRF9GQVNUX0MpCi0gICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQwotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MKLSAgICNkZWZpbmUgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCi0gICAjZGVmaW5lIEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MKLSAgICNkZWZpbmUgQk5fTVBfRFJfU0VUVVBfQwotICAgI2RlZmluZSBCTl9NUF9EUl9SRURVQ0VfQwotICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfU0VUVVBfQwotICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfQwotICAgI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX0NBTENfTk9STUFMSVpBVElPTl9DCi0gICAjZGVmaW5lIEJOX01QX01VTE1PRF9DCi0gICAjZGVmaW5lIEJOX01QX1NFVF9DCi0gICAjZGVmaW5lIEJOX01QX01PRF9DCi0gICAjZGVmaW5lIEJOX01QX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9TUVJfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9FWFRFVUNMSURfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCi0gICAjZGVmaW5lIEJOX01QX1NFVF9DCi0gICAjZGVmaW5lIEJOX01QX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9ESVZfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfQwotICAgI2RlZmluZSBCTl9NUF9TVUJfQwotICAgI2RlZmluZSBCTl9NUF9ORUdfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0ZSRUFEX0MpCi0gICAjZGVmaW5lIEJOX01QX1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX0RfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0ZXUklURV9DKQotICAgI2RlZmluZSBCTl9NUF9SQURJWF9TSVpFX0MKLSAgICNkZWZpbmUgQk5fTVBfVE9SQURJWF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfR0NEX0MpCi0gICAjZGVmaW5lIEJOX01QX0lTWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0FCU19DCi0gICAjZGVmaW5lIEJOX01QX1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9HRVRfSU5UX0MpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfR1JPV19DKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0lOSVRfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9JTklUX0NPUFlfQykKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfSU5JVF9NVUxUSV9DKQotICAgI2RlZmluZSBCTl9NUF9FUlJfQwotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0lOSVRfU0VUX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF9TRVRfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0lOSVRfU0VUX0lOVF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0lOVF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfSU5JVF9TSVpFX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0lOVk1PRF9DKQotICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCi0gICAjZGVmaW5lIEJOX0ZBU1RfTVBfSU5WTU9EX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5WTU9EX1NMT1dfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0lOVk1PRF9TTE9XX0MpCi0gICAjZGVmaW5lIEJOX01QX0lTWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfTVVMVElfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfSVNFVkVOX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWXzJfQwotICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfSVNfU1FVQVJFX0MpCi0gICAjZGVmaW5lIEJOX01QX01PRF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9TRVRfSU5UX0MKLSAgICNkZWZpbmUgQk5fTVBfTU9EX0MKLSAgICNkZWZpbmUgQk5fTVBfR0VUX0lOVF9DCi0gICAjZGVmaW5lIEJOX01QX1NRUlRfQwotICAgI2RlZmluZSBCTl9NUF9TUVJfQwotICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX0pBQ09CSV9DKQotICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCi0gICAjZGVmaW5lIEJOX01QX0lTWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX0NOVF9MU0JfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfS0FSQVRTVUJBX01VTF9DKQotICAgI2RlZmluZSBCTl9NUF9NVUxfQwotICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQwotICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0xTSERfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfS0FSQVRTVUJBX1NRUl9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQwotICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0gICAjZGVmaW5lIEJOX01QX1NRUl9DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX1NfTVBfQUREX0MKLSAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9MQ01fQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCi0gICAjZGVmaW5lIEJOX01QX0dDRF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfTFNIRF9DKQotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfTU9EX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX01PRF8yRF9DKQotICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9NT0RfRF9DKQotICAgI2RlZmluZSBCTl9NUF9ESVZfRF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfTU9OVEdPTUVSWV9DQUxDX05PUk1BTElaQVRJT05fQykKLSAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCi0gICAjZGVmaW5lIEJOX01QXzJFWFBUX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQwotICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKLSAgICNkZWZpbmUgQk5fU19NUF9TVUJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MpCi0gICAjZGVmaW5lIEJOX0ZBU1RfTVBfTU9OVEdPTUVSWV9SRURVQ0VfQwotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCi0gICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfTVVMX0MpCi0gICAjZGVmaW5lIEJOX01QX1RPT01fTVVMX0MKLSAgICNkZWZpbmUgQk5fTVBfS0FSQVRTVUJBX01VTF9DCi0gICAjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCi0gICAjZGVmaW5lIEJOX1NfTVBfTVVMX0MKLSAgICNkZWZpbmUgQk5fU19NUF9NVUxfRElHU19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfTVVMXzJfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfTVVMXzJEX0MpCi0gICAjZGVmaW5lIEJOX01QX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9NVUxfRF9DKQotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX01VTE1PRF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX05fUk9PVF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX0VYUFRfRF9DCi0gICAjZGVmaW5lIEJOX01QX01VTF9DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX01VTF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWX0MKLSAgICNkZWZpbmUgQk5fTVBfQ01QX0MKLSAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX05FR19DKQotICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9PUl9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfRkVSTUFUX0MpCi0gICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCi0gICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfQwotICAgI2RlZmluZSBCTl9NUF9DTVBfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfSVNfRElWSVNJQkxFX0MpCi0gICAjZGVmaW5lIEJOX01QX01PRF9EX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9QUklNRV9JU19QUklNRV9DKQotICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCi0gICAjZGVmaW5lIEJOX01QX1BSSU1FX0lTX0RJVklTSUJMRV9DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF9TRVRfQwotICAgI2RlZmluZSBCTl9NUF9QUklNRV9NSUxMRVJfUkFCSU5fQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfTUlMTEVSX1JBQklOX0MpCi0gICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQwotICAgI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKLSAgICNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9DCi0gICAjZGVmaW5lIEJOX01QX1NRUk1PRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MpCi0gICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQwotICAgI2RlZmluZSBCTl9NUF9JU0VWRU5fQwotICAgI2RlZmluZSBCTl9NUF9NT0RfRF9DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCi0gICAjZGVmaW5lIEJOX01QX1BSSU1FX01JTExFUl9SQUJJTl9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9QUklNRV9SQUJJTl9NSUxMRVJfVFJJQUxTX0MpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfUkFORE9NX0VYX0MpCi0gICAjZGVmaW5lIEJOX01QX1JFQURfVU5TSUdORURfQklOX0MKLSAgICNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQwotICAgI2RlZmluZSBCTl9NUF9TVUJfRF9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQwotICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUkFESVhfU0laRV9DKQotICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWX0RfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUkFESVhfU01BUF9DKQotICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1JBTkRfQykKLSAgICNkZWZpbmUgQk5fTVBfWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0FERF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUkVBRF9SQURJWF9DKQotICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKLSAgICNkZWZpbmUgQk5fTVBfU19STUFQX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMX0RfQwotICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCi0gICAjZGVmaW5lIEJOX01QX0lTWkVST19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUkVBRF9TSUdORURfQklOX0MpCi0gICAjZGVmaW5lIEJOX01QX1JFQURfVU5TSUdORURfQklOX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9SRUFEX1VOU0lHTkVEX0JJTl9DKQotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfWkVST19DCi0gICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfQykKLSAgICNkZWZpbmUgQk5fTVBfUkVEVUNFX1NFVFVQX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCi0gICAjZGVmaW5lIEJOX01QX01VTF9DCi0gICAjZGVmaW5lIEJOX1NfTVBfTVVMX0hJR0hfRElHU19DCi0gICAjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKLSAgICNkZWZpbmUgQk5fTVBfTU9EXzJEX0MKLSAgICNkZWZpbmUgQk5fU19NUF9NVUxfRElHU19DCi0gICAjZGVmaW5lIEJOX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCi0gICAjZGVmaW5lIEJOX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9DCi0gICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV8yS19DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCi0gICAjZGVmaW5lIEJOX01QX01VTF9EX0MKLSAgICNkZWZpbmUgQk5fU19NUF9BRERfQwotICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKLSAgICNkZWZpbmUgQk5fU19NUF9TVUJfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX0xfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCi0gICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfQwotICAgI2RlZmluZSBCTl9TX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQwotICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfU0VUVVBfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCi0gICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQwotICAgI2RlZmluZSBCTl9NUF8yRVhQVF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSAgICNkZWZpbmUgQk5fU19NUF9TVUJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV8yS19TRVRVUF9MX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF8yRVhQVF9DCi0gICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQwotICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfSVNfMktfQykKLSAgICNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX0MKLSAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0lTXzJLX0xfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfU0VUVVBfQykKLSAgICNkZWZpbmUgQk5fTVBfMkVYUFRfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1JTSERfQykKLSAgICNkZWZpbmUgQk5fTVBfWkVST19DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfU0VUX0MpCi0gICAjZGVmaW5lIEJOX01QX1pFUk9fQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1NFVF9JTlRfQykKLSAgICNkZWZpbmUgQk5fTVBfWkVST19DCi0gICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9TSFJJTktfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9TSUdORURfQklOX1NJWkVfQykKLSAgICNkZWZpbmUgQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1NRUl9DKQotICAgI2RlZmluZSBCTl9NUF9UT09NX1NRUl9DCi0gICAjZGVmaW5lIEJOX01QX0tBUkFUU1VCQV9TUVJfQwotICAgI2RlZmluZSBCTl9GQVNUX1NfTVBfU1FSX0MKLSAgICNkZWZpbmUgQk5fU19NUF9TUVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1NRUk1PRF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfU1FSX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1NRUlRfQykKLSAgICNkZWZpbmUgQk5fTVBfTl9ST09UX0MKLSAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKLSAgICNkZWZpbmUgQk5fTVBfWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX1JTSERfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfQwotICAgI2RlZmluZSBCTl9NUF9BRERfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfMl9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1NVQl9DKQotICAgI2RlZmluZSBCTl9TX01QX0FERF9DCi0gICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQwotICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfU1VCX0RfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX0FERF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1NVQk1PRF9DKQotICAgI2RlZmluZSBCTl9NUF9JTklUX0MKLSAgICNkZWZpbmUgQk5fTVBfU1VCX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1RPX1NJR05FRF9CSU5fQykKLSAgICNkZWZpbmUgQk5fTVBfVE9fVU5TSUdORURfQklOX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9UT19TSUdORURfQklOX05fQykKLSAgICNkZWZpbmUgQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MKLSAgICNkZWZpbmUgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfVE9fVU5TSUdORURfQklOX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX0lTWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9UT19VTlNJR05FRF9CSU5fTl9DKQotICAgI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCi0gICAjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fTVBfVE9PTV9NVUxfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCi0gICAjZGVmaW5lIEJOX01QX01PRF8yRF9DCi0gICAjZGVmaW5lIEJOX01QX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQwotICAgI2RlZmluZSBCTl9NUF9BRERfQwotICAgI2RlZmluZSBCTl9NUF9TVUJfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfMl9DCi0gICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCi0gICAjZGVmaW5lIEJOX01QX01VTF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWXzNfQwotICAgI2RlZmluZSBCTl9NUF9MU0hEX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1RPT01fU1FSX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfTVVMVElfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfMkRfQwotICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCi0gICAjZGVmaW5lIEJOX01QX1NRUl9DCi0gICAjZGVmaW5lIEJOX01QX01VTF8yX0MKLSAgICNkZWZpbmUgQk5fTVBfQUREX0MKLSAgICNkZWZpbmUgQk5fTVBfU1VCX0MKLSAgICNkZWZpbmUgQk5fTVBfRElWXzJfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQwotICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl8zX0MKLSAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX01VTFRJX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9UT1JBRElYX0MpCi0gICAjZGVmaW5lIEJOX01QX0lTWkVST19DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCi0gICAjZGVmaW5lIEJOX01QX0RJVl9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1RPUkFESVhfTl9DKQotICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQwotICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQwotICAgI2RlZmluZSBCTl9NUF9ESVZfRF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSAgICNkZWZpbmUgQk5fTVBfU19STUFQX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DKQotICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9NUF9YT1JfQykKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX01QX1pFUk9fQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9QUklNRV9UQUJfQykKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9SRVZFUlNFX0MpCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fU19NUF9BRERfQykKLSAgICNkZWZpbmUgQk5fTVBfR1JPV19DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9TX01QX0VYUFRNT0RfQykKLSAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0gICAjZGVmaW5lIEJOX01QX1JFRFVDRV9TRVRVUF9DCi0gICAjZGVmaW5lIEJOX01QX1JFRFVDRV9DCi0gICAjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19TRVRVUF9MX0MKLSAgICNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX0xfQwotICAgI2RlZmluZSBCTl9NUF9NT0RfQwotICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKLSAgICNkZWZpbmUgQk5fTVBfU1FSX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMX0MKLSAgICNkZWZpbmUgQk5fTVBfU0VUX0MKLSAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fU19NUF9NVUxfRElHU19DKQotICAgI2RlZmluZSBCTl9GQVNUX1NfTVBfTVVMX0RJR1NfQwotICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQwotICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCi0gICAjZGVmaW5lIEJOX01QX0VYQ0hfQwotICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQk5fU19NUF9NVUxfSElHSF9ESUdTX0MpCi0gICAjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotICAgI2RlZmluZSBCTl9NUF9FWENIX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOX1NfTVBfU1FSX0MpCi0gICAjZGVmaW5lIEJOX01QX0lOSVRfU0laRV9DCi0gICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKLSAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCi0gICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChCTl9TX01QX1NVQl9DKQotICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEJOQ09SRV9DKQotI2VuZGlmCi0KLSNpZmRlZiBMVE0zCi0jZGVmaW5lIExUTV9MQVNUCi0jZW5kaWYKLSNpbmNsdWRlIDx0b21tYXRoX3N1cGVyY2xhc3MuaD4KLSNpbmNsdWRlIDx0b21tYXRoX2NsYXNzLmg+Ci0jZWxzZQotI2RlZmluZSBMVE1fTEFTVAotI2VuZGlmCi0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbW1hdGhfY2xhc3MuaCx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4yICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9oZWFkZXJzL3RvbW1hdGhfc3VwZXJjbGFzcy5oIGIvc3JjL2hlYWRlcnMvdG9tbWF0aF9zdXBlcmNsYXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZjNmNTcuLjAwMDAwMDAKLS0tIGEvc3JjL2hlYWRlcnMvdG9tbWF0aF9zdXBlcmNsYXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKiBzdXBlciBjbGFzcyBmaWxlIGZvciBQSyBhbGdvcyAqLwotCi0vKiBkZWZhdWx0IC4uLiBpbmNsdWRlIGFsbCBNUEkgKi8KLSNpZm5kZWYgU0NfUlNBXzEKLQotI2RlZmluZSBMVE1fQUxMCi0KLSNlbmRpZgotCi0vKiBSU0Egb25seSAoZG9lcyBub3Qgc3VwcG9ydCBESC9EU0EvRUNDKSAqLwotLyogI2RlZmluZSBTQ19SU0FfMSAqLwotCi0vKiBGb3IgcmVmZXJlbmNlLi4uLiBPbiBhbiBBdGhsb242NCBvcHRpbWl6aW5nIGZvciBzcGVlZC4uLgotCi0gICBMVE0ncyBtcGkubyB3aXRoIGFsbCBmdW5jdGlvbnMgW3N0cmlwZWRdIGlzIDE0MktpQiBpbiBzaXplLgotCi0qLwotCi0vKiBXb3JrcyBmb3IgUlNBIG9ubHksIG1waS5vIGlzIDY4S2lCICovCi0jaWZkZWYgU0NfUlNBXzEKLSAgICNkZWZpbmUgQk5fTVBfU0hSSU5LX0MKLSAgICNkZWZpbmUgQk5fTVBfTENNX0MKLSAgICNkZWZpbmUgQk5fTVBfUFJJTUVfUkFORE9NX0VYX0MKLSAgICNkZWZpbmUgQk5fTVBfSU5WTU9EX0MKLSAgICNkZWZpbmUgQk5fTVBfR0NEX0MKLSAgICNkZWZpbmUgQk5fTVBfTU9EX0MKLSAgICNkZWZpbmUgQk5fTVBfTVVMTU9EX0MKLSAgICNkZWZpbmUgQk5fTVBfQURETU9EX0MKLSAgICNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCi0gICAjZGVmaW5lIEJOX01QX1NFVF9JTlRfQwotICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKLSAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQwotICAgI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCi0gICAjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCi0gICAjZGVmaW5lIEJOX01QX01PRF9EX0MKLSAgICNkZWZpbmUgQk5fTVBfUFJJTUVfUkFCSU5fTUlMTEVSX1RSSUFMU19DCi0gICAjZGVmaW5lIEJOX1JFVkVSU0VfQwotICAgI2RlZmluZSBCTl9QUklNRV9UQUJfQwotCi0gICAvKiBvdGhlciBtb2RpZmllcnMgKi8KLSAgICNkZWZpbmUgQk5fTVBfRElWX1NNQUxMICAgICAgICAgICAgICAgICAgICAvKiBTbG93ZXIgZGl2aXNpb24sIG5vdCBjcml0aWNhbCAqLwotCi0gICAvKiBoZXJlIHdlIGFyZSBvbiB0aGUgbGFzdCBwYXNzIHNvIHdlIHR1cm4gdGhpbmdzIG9mZi4gIFRoZSBmdW5jdGlvbnMgY2xhc3NlcyBhcmUgc3RpbGwgdGhlcmUKLSAgICAqIGJ1dCB3ZSByZW1vdmUgdGhlbSBzcGVjaWZpY2FsbHkgZnJvbSB0aGUgYnVpbGQuICBUaGlzIGFsc28gaW52b2tlcyB0d2Vha3MgaW4gZnVuY3Rpb25zCi0gICAgKiBsaWtlIHJlbW92aW5nIHN1cHBvcnQgZm9yIGV2ZW4gbW9kdWxpLCBldGMuLi4KLSAgICAqLwotI2lmZGVmIExUTV9MQVNUCi0gICAjdW5kZWYgIEJOX01QX1RPT01fTVVMX0MKLSAgICN1bmRlZiAgQk5fTVBfVE9PTV9TUVJfQwotICAgI3VuZGVmICBCTl9NUF9LQVJBVFNVQkFfTVVMX0MKLSAgICN1bmRlZiAgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCi0gICAjdW5kZWYgIEJOX01QX1JFRFVDRV9DCi0gICAjdW5kZWYgIEJOX01QX1JFRFVDRV9TRVRVUF9DCi0gICAjdW5kZWYgIEJOX01QX0RSX0lTX01PRFVMVVNfQwotICAgI3VuZGVmICBCTl9NUF9EUl9TRVRVUF9DCi0gICAjdW5kZWYgIEJOX01QX0RSX1JFRFVDRV9DCi0gICAjdW5kZWYgIEJOX01QX1JFRFVDRV9JU18yS19DCi0gICAjdW5kZWYgIEJOX01QX1JFRFVDRV8yS19TRVRVUF9DCi0gICAjdW5kZWYgIEJOX01QX1JFRFVDRV8yS19DCi0gICAjdW5kZWYgIEJOX1NfTVBfRVhQVE1PRF9DCi0gICAjdW5kZWYgIEJOX01QX0RJVl8zX0MKLSAgICN1bmRlZiAgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKLSAgICN1bmRlZiAgQk5fRkFTVF9TX01QX01VTF9ISUdIX0RJR1NfQwotICAgI3VuZGVmICBCTl9GQVNUX01QX0lOVk1PRF9DCi0KLSAgIC8qIFRvIHNhZmVseSB1bmRlZmluZSB0aGVzZSB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgeW91ciBSU0Ega2V5IHdvbid0IGV4Y2VlZCB0aGUgQ29tYmEgdGhyZXNob2xkCi0gICAgKiB3aGljaCBpcyByb3VnaGx5IDI1NSBkaWdpdHMgWzcxNDAgYml0cyBmb3IgMzItYml0IG1hY2hpbmVzLCAxNTMwMCBiaXRzIGZvciA2NC1iaXQgbWFjaGluZXNdIAotICAgICogd2hpY2ggbWVhbnMgcm91Z2hseSBzcGVha2luZyB5b3UgY2FuIGhhbmRsZSB1cHRvIDI1MzYtYml0IFJTQSBrZXlzIHdpdGggdGhlc2UgZGVmaW5lZCB3aXRob3V0Ci0gICAgKiB0cm91YmxlLiAgCi0gICAgKi8KLSAgICN1bmRlZiAgQk5fU19NUF9NVUxfRElHU19DCi0gICAjdW5kZWYgIEJOX1NfTVBfU1FSX0MKLSAgICN1bmRlZiAgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQwotI2VuZGlmCi0KLSNlbmRpZgotCi0vKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21tYXRoX3N1cGVyY2xhc3MuaCx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE0IDEzOjI3OjIwICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvZjkvZjlfZG9uZS5jIGIvc3JjL21hYy9mOS9mOV9kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NGVjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMvZjkvZjlfZG9uZS5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY5X2RvbmUuYworICBmOSBTdXBwb3J0LCB0ZXJtaW5hdGUgdGhlIHN0YXRlCisqLworCisjaWZkZWYgTFRDX0Y5X01PREUKKworLyoqIFRlcm1pbmF0ZSB0aGUgZjktTUFDIHN0YXRlCisgIEBwYXJhbSBmOSAgICAgZjkgc3RhdGUgdG8gdGVybWluYXRlCisgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGhlIE1BQyB0YWcKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIERlc3RpbmF0aW9uIHNpemUgYW5kIGZpbmFsIHRhZyBzaXplCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGY5X2RvbmUoZjlfc3RhdGUgKmY5LCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIGludCBlcnIsIHg7CisgICBMVENfQVJHQ0hLKGY5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICE9IE5VTEwpOworCisgICAvKiBjaGVjayBzdHJ1Y3R1cmUgKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGY5LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKChmOS0+YmxvY2tzaXplID4gY2lwaGVyX2Rlc2NyaXB0b3JbZjktPmNpcGhlcl0uYmxvY2tfbGVuZ3RoKSB8fCAoZjktPmJsb2Nrc2l6ZSA8IDApIHx8CisgICAgICAgKGY5LT5idWZsZW4gPiBmOS0+YmxvY2tzaXplKSB8fCAoZjktPmJ1ZmxlbiA8IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmIChmOS0+YnVmbGVuICE9IDApIHsKKyAgICAgIC8qIGVuY3J5cHQgKi8KKyAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2Y5LT5jaXBoZXJdLmVjYl9lbmNyeXB0KGY5LT5JViwgZjktPklWLCAmZjktPmtleSk7CisgICAgICBmOS0+YnVmbGVuID0gMDsKKyAgICAgIGZvciAoeCA9IDA7IHggPCBmOS0+YmxvY2tzaXplOyB4KyspIHsKKyAgICAgICAgIGY5LT5BQ0NbeF0gXj0gZjktPklWW3hdOworICAgICAgfQorICAgfQorCisgICAvKiBzY2hlZHVsZSBtb2RpZmllZCBrZXkgKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbZjktPmNpcGhlcl0uc2V0dXAoZjktPmFrZXksIGY5LT5rZXlsZW4sIDAsICZmOS0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGVuY3J5cHQgdGhlIEFDQyAqLworICAgY2lwaGVyX2Rlc2NyaXB0b3JbZjktPmNpcGhlcl0uZWNiX2VuY3J5cHQoZjktPkFDQywgZjktPkFDQywgJmY5LT5rZXkpOworICAgY2lwaGVyX2Rlc2NyaXB0b3JbZjktPmNpcGhlcl0uZG9uZSgmZjktPmtleSk7CisKKyAgIC8qIGV4dHJhY3QgdGFnICovCisgICBmb3IgKHggPSAwOyB4IDwgZjktPmJsb2Nrc2l6ZSAmJiAodW5zaWduZWQgbG9uZyl4IDwgKm91dGxlbjsgeCsrKSB7CisgICAgICBvdXRbeF0gPSBmOS0+QUNDW3hdOworICAgfQorICAgKm91dGxlbiA9IHg7CisgIAorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShmOSwgc2l6ZW9mKCpmOSkpOworI2VuZGlmCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X2RvbmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA5IDAxOjUzOjMyICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9mOS9mOV9maWxlLmMgYi9zcmMvbWFjL2Y5L2Y5X2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzUzZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21hYy9mOS9mOV9maWxlLmMKQEAgLTAsMCArMSw4MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgIEBmaWxlIGY5X2ZpbGUuYworICBmOSBzdXBwb3J0LCBwcm9jZXNzIGEgZmlsZSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0Y5X01PREUKKworLyoqCisgICBmOSBhIGZpbGUKKyAgIEBwYXJhbSBjaXBoZXIgICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0ga2V5ICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgeW91IHdpc2ggdG8gZjkKKyAgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBXaGVyZSB0aGUgYXV0aGVudGljYXRpb24gdGFnIGlzIHRvIGJlIHN0b3JlZAorICAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgZmlsZSBzdXBwb3J0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGY5X2ZpbGUoaW50IGNpcGhlciwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyNpZmRlZiBMVENfTk9fRklMRQorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBpbnQgZXJyLCB4OworICAgZjlfc3RhdGUgZjk7CisgICBGSUxFICppbjsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGZpbGVuYW1lICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICAgIT0gTlVMTCk7CisKKyAgIGluID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOworICAgaWYgKGluID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9GSUxFX05PVEZPVU5EOworICAgfQorCisgICBpZiAoKGVyciA9IGY5X2luaXQoJmY5LCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZjbG9zZShpbik7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBkbyB7CisgICAgICB4ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgaW4pOworICAgICAgaWYgKChlcnIgPSBmOV9wcm9jZXNzKCZmOSwgYnVmLCB4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGZjbG9zZShpbik7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfSB3aGlsZSAoeCA9PSBzaXplb2YoYnVmKSk7CisgICBmY2xvc2UoaW4pOworCisgICBpZiAoKGVyciA9IGY5X2RvbmUoJmY5LCAgICBvdXQsIG91dGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworI2VuZGlmCisKKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9maWxlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxODoyMyAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL2Y5L2Y5X2luaXQuYyBiL3NyYy9tYWMvZjkvZjlfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmQ4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFjL2Y5L2Y5X2luaXQuYwpAQCAtMCwwICsxLDcwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBmOV9pbml0LmMKKyAgRjkgU3VwcG9ydCwgc3RhcnQgYW4gRjkgc3RhdGUKKyovCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCisvKiogSW5pdGlhbGl6ZSBGOS1NQUMgc3RhdGUKKyAgQHBhcmFtIGY5ICAgIFtvdXRdIGY5IHN0YXRlIHRvIGluaXRpYWxpemUKKyAgQHBhcmFtIGNpcGhlciAgSW5kZXggb2YgY2lwaGVyIHRvIHVzZQorICBAcGFyYW0ga2V5ICAgICBbaW5dICBTZWNyZXQga2V5CisgIEBwYXJhbSBrZXlsZW4gIExlbmd0aCBvZiBzZWNyZXQga2V5IGluIG9jdGV0cworICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBmOV9pbml0KGY5X3N0YXRlICpmOSwgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbikKK3sKKyAgIGludCAgICAgICAgICAgIHgsIGVycjsKKworICAgTFRDX0FSR0NISyhmOSAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOworCisgICAvKiBzY2hlZHVsZSB0aGUga2V5ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGggJSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisjZW5kaWYKKworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCAwLCAmZjktPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGRvbmU7CisgICB9CisgICAKKyAgIC8qIG1ha2UgdGhlIHNlY29uZCBrZXkgKi8KKyAgIGZvciAoeCA9IDA7ICh1bnNpZ25lZCl4IDwga2V5bGVuOyB4KyspIHsKKyAgICAgIGY5LT5ha2V5W3hdID0ga2V5W3hdIF4gMHhBQTsKKyAgIH0KKyAKKyAgIC8qIHNldHVwIHN0cnVjdCAqLworICAgemVyb21lbShmOS0+SVYsICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCk7CisgICB6ZXJvbWVtKGY5LT5BQ0MsIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoKTsKKyAgIGY5LT5ibG9ja3NpemUgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgIGY5LT5jaXBoZXIgICAgPSBjaXBoZXI7CisgICBmOS0+YnVmbGVuICAgID0gMDsKKyAgIGY5LT5rZXlsZW4gICAgPSBrZXlsZW47Citkb25lOgorICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfaW5pdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjI6NTQ6MTggJCAqLworCmRpZmYgLS1naXQgYS9zcmMvbWFjL2Y5L2Y5X21lbW9yeS5jIGIvc3JjL21hYy9mOS9mOV9tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjM5MDFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21hYy9mOS9mOV9tZW1vcnkuYwpAQCAtMCwwICsxLDcxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBmOV9wcm9jZXNzLmMKKyAgZjkgU3VwcG9ydCwgUHJvY2VzcyBhIGJsb2NrIHRocm91Z2ggRjktTUFDCisqLworCisjaWZkZWYgTFRDX0Y5X01PREUKKworLyoqIGY5LU1BQyBhIGJsb2NrIG9mIG1lbW9yeSAKKyAgQHBhcmFtIGNpcGhlciAgICAgSW5kZXggb2YgY2lwaGVyIHRvIHVzZQorICBAcGFyYW0ga2V5ICAgICAgICBbaW5dICBTZWNyZXQga2V5CisgIEBwYXJhbSBrZXlsZW4gICAgIExlbmd0aCBvZiBrZXkgaW4gb2N0ZXRzCisgIEBwYXJhbSBpbiAgICAgICAgIFtpbl0gIE1lc3NhZ2UgdG8gTUFDCisgIEBwYXJhbSBpbmxlbiAgICAgIExlbmd0aCBvZiBpbnB1dCBpbiBvY3RldHMKKyAgQHBhcmFtIG91dCAgICAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRoZSBNQUMgdGFnCisgIEBwYXJhbSBvdXRsZW4gICAgIFtpbi9vdXRdIE91dHB1dCBzaXplIGFuZCBmaW5hbCB0YWcgc2l6ZQorICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2Vzcy4KKyovCitpbnQgZjlfbWVtb3J5KGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgZjlfc3RhdGUgKmY5OworICAgaW50ICAgICAgICAgZXJyOworCisgICAvKiBpcyB0aGUgY2lwaGVyIHZhbGlkPyAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIFVzZSBhY2NlbGVyYXRvciBpZiBmb3VuZCAqLworICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZjlfbWVtb3J5ICE9IE5VTEwpIHsKKyAgICAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmY5X21lbW9yeShrZXksIGtleWxlbiwgaW4sIGlubGVuLCBvdXQsIG91dGxlbik7CisgICB9CisKKyAgIGY5ID0gWENBTExPQygxLCBzaXplb2YoKmY5KSk7CisgICBpZiAoZjkgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBmOV9pbml0KGY5LCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgZ290byBkb25lOworICAgfQorCisgICBpZiAoKGVyciA9IGY5X3Byb2Nlc3MoZjksIGluLCBpbmxlbikpICE9IENSWVBUX09LKSB7CisgICAgIGdvdG8gZG9uZTsKKyAgIH0KKworICAgZXJyID0gZjlfZG9uZShmOSwgb3V0LCBvdXRsZW4pOworZG9uZToKKyAgIFhGUkVFKGY5KTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X21lbW9yeS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMjM6MDI6NDIgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9mOS9mOV9tZW1vcnlfbXVsdGkuYyBiL3NyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzMTVmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLmMKQEAgLTAsMCArMSw5MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiogCisgIEBmaWxlIGY5X21lbW9yeV9tdWx0aS5jCisgIGY5IHN1cHBvcnQsIHByb2Nlc3MgbXVsdGlwbGUgYmxvY2tzIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0Y5X01PREUKKworLyoqCisgICBmOSBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5IAorICAgQHBhcmFtIGNpcGhlciAgICBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgY2lwaGVyCisgICBAcGFyYW0ga2V5ICAgICAgIFRoZSBzZWNyZXQga2V5CisgICBAcGFyYW0ga2V5bGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBvdXQgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyAob2N0ZXRzKQorICAgQHBhcmFtIGluICAgICAgICBUaGUgZGF0YSB0byBzZW5kIHRocm91Z2ggZjkKKyAgIEBwYXJhbSBpbmxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBzZW5kIHRocm91Z2ggZjkgKG9jdGV0cykKKyAgIEBwYXJhbSAuLi4gICAgICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gZjksIHRlcm1pbmF0ZWQgd2l0aCBhIChOVUxMLHgpICh4PWRvbid0IGNhcmUpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZjlfbWVtb3J5X211bHRpKGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pCit7CisgICBpbnQgICAgICAgICAgICAgICAgICBlcnI7CisgICBmOV9zdGF0ZSAgICAgICAgICAqZjk7CisgICB2YV9saXN0ICAgICAgICAgICAgICBhcmdzOworICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycHRyOworICAgdW5zaWduZWQgbG9uZyAgICAgICAgY3VybGVuOworCisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogYWxsb2NhdGUgcmFtIGZvciBmOSBzdGF0ZSAqLworICAgZjkgPSBYTUFMTE9DKHNpemVvZihmOV9zdGF0ZSkpOworICAgaWYgKGY5ID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGY5IHByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KKyAgIGlmICgoZXJyID0gZjlfaW5pdChmOSwgY2lwaGVyLCBrZXksIGtleWxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisgICB2YV9zdGFydChhcmdzLCBpbmxlbik7CisgICBjdXJwdHIgPSBpbjsgCisgICBjdXJsZW4gPSBpbmxlbjsKKyAgIGZvciAoOzspIHsKKyAgICAgIC8qIHByb2Nlc3MgYnVmICovCisgICAgICBpZiAoKGVyciA9IGY5X3Byb2Nlc3MoZjksIGN1cnB0ciwgY3VybGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICAgIC8qIHN0ZXAgdG8gbmV4dCAqLworICAgICAgY3VycHRyID0gdmFfYXJnKGFyZ3MsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKKyAgICAgIGlmIChjdXJwdHIgPT0gTlVMTCkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjdXJsZW4gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CisgICB9CisgICBpZiAoKGVyciA9IGY5X2RvbmUoZjksIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGY5LCBzaXplb2YoZjlfc3RhdGUpKTsKKyNlbmRpZgorICAgWEZSRUUoZjkpOworICAgdmFfZW5kKGFyZ3MpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMTo1MDoxMyAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL2Y5L2Y5X3Byb2Nlc3MuYyBiL3NyYy9tYWMvZjkvZjlfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YmQ4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFjL2Y5L2Y5X3Byb2Nlc3MuYwpAQCAtMCwwICsxLDc4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBmOV9wcm9jZXNzLmMKKyAgZjkgU3VwcG9ydCwgcHJvY2VzcyBibG9ja3Mgd2l0aCBmOQorKi8KKworI2lmZGVmIExUQ19GOV9NT0RFCisKKy8qKiBQcm9jZXNzIGRhdGEgdGhyb3VnaCBmOS1NQUMKKyAgQHBhcmFtIGY5ICAgICAgIFRoZSBmOS1NQUMgc3RhdGUKKyAgQHBhcmFtIGluICAgICAgIElucHV0IGRhdGEgdG8gcHJvY2VzcworICBAcGFyYW0gaW5sZW4gICAgTGVuZ3RoIG9mIGlucHV0IGluIG9jdGV0cworICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBmOV9wcm9jZXNzKGY5X3N0YXRlICpmOSwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pCit7CisgICBpbnQgZXJyLCB4OworCisgICBMVENfQVJHQ0hLKGY5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICE9IE5VTEwpOworCisgICAvKiBjaGVjayBzdHJ1Y3R1cmUgKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGY5LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKChmOS0+YmxvY2tzaXplID4gY2lwaGVyX2Rlc2NyaXB0b3JbZjktPmNpcGhlcl0uYmxvY2tfbGVuZ3RoKSB8fCAoZjktPmJsb2Nrc2l6ZSA8IDApIHx8CisgICAgICAgKGY5LT5idWZsZW4gPiBmOS0+YmxvY2tzaXplKSB8fCAoZjktPmJ1ZmxlbiA8IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKGY5LT5idWZsZW4gPT0gMCkgeworICAgICAgIHdoaWxlIChpbmxlbiA+PSAodW5zaWduZWQgbG9uZylmOS0+YmxvY2tzaXplKSB7CisgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBmOS0+YmxvY2tzaXplOyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikmKGY5LT5JVlt4XSkpIF49ICooKExUQ19GQVNUX1RZUEUqKSYoaW5beF0pKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChmOS0+SVYsIGY5LT5JViwgJmY5LT5rZXkpOworICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgZjktPmJsb2Nrc2l6ZTsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopJihmOS0+QUNDW3hdKSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopJihmOS0+SVZbeF0pKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBpbiAgICArPSBmOS0+YmxvY2tzaXplOworICAgICAgICAgICBpbmxlbiAtPSBmOS0+YmxvY2tzaXplOworICAgICAgIH0KKyAgfQorI2VuZGlmCisKKyAgIHdoaWxlIChpbmxlbikgeworICAgICBpZiAoZjktPmJ1ZmxlbiA9PSBmOS0+YmxvY2tzaXplKSB7CisgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChmOS0+SVYsIGY5LT5JViwgJmY5LT5rZXkpOworICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGY5LT5ibG9ja3NpemU7IHgrKykgeworICAgICAgICAgICAgZjktPkFDQ1t4XSBePSBmOS0+SVZbeF07CisgICAgICAgICB9CisgICAgICAgICBmOS0+YnVmbGVuID0gMDsKKyAgICAgfQorICAgICBmOS0+SVZbZjktPmJ1ZmxlbisrXSBePSAqaW4rKzsKKyAgICAgLS1pbmxlbjsKKyAgfQorICByZXR1cm4gQ1JZUFRfT0s7ICAgICAgIAorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9wcm9jZXNzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8xNiAxNzo0MToyMSAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9tYWMvZjkvZjlfdGVzdC5jIGIvc3JjL21hYy9mOS9mOV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkZGZlNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMvZjkvZjlfdGVzdC5jCkBAIC0wLDAgKzEsNzggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY5X3Rlc3QuYworICBmOSBTdXBwb3J0LCBUZXN0IEY5IG1vZGUgCisqLworCisjaWZkZWYgTFRDX0Y5X01PREUKKworLyoqIFRlc3QgZjktTUFDIG1vZGUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2NlcworKi8KK2ludCBmOV90ZXN0KHZvaWQpCit7CisjaWZkZWYgTFRDX05PX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgaW50IG1zZ2xlbjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIEtbMTZdLCBNWzEyOF0sIFRbNF07CisgICB9IHRlc3RzW10gPSB7Cit7CisgICAyMCwKKyAgIHsgMHgyQiwgMHhENiwgMHg0NSwgMHg5RiwgMHg4MiwgMHhDNSwgMHhCMywgMHgwMCwgMHg5NSwgMHgyQywgMHg0OSwgMHgxMCwgMHg0OCwgMHg4MSwgMHhGRiwgMHg0OCB9LAorICAgeyAweDM4LCAweEE2LCAweEYwLCAweDU2LCAweEI4LCAweEFFLCAweEZELCAweEE5LCAweDMzLCAweDMyLCAweDM0LCAweDYyLCAweDYzLCAweDM5LCAweDM4LCAweDYxLCAweDM3LCAweDM0LCAweDc5LCAweDQwIH0sCisgICB7IDB4NDYsIDB4RTAsIDB4MEQsIDB4NEIgfQorfSwKKworeworICAgMTA1LAorICAgeyAweDgzLCAweEZELCAweDIzLCAweEEyLCAweDQ0LCAweEE3LCAweDRDLCAweEYzLCAweDU4LCAweERBLCAweDMwLCAweDE5LCAweEYxLCAweDcyLCAweDI2LCAweDM1IH0sCisgICB7IDB4MzYsIDB4QUYsIDB4NjEsIDB4NDQsIDB4NEYsIDB4MzAsIDB4MkEsIDB4RDIsIAorICAgICAweDM1LCAweEM2LCAweDg3LCAweDE2LCAweDYzLCAweDNDLCAweDY2LCAweEZCLCAweDc1LCAweDBDLCAweDI2LCAweDY4LCAweDY1LCAweEQ1LCAweDNDLCAweDExLCAweEVBLCAweDA1LCAweEIxLCAweEU5LCAweEZBLCAweDQ5LCAweEM4LCAweDM5LCAweDhELCAweDQ4LCAweEUxLCAweEVGLCAweEE1LCAweDkwLCAweDlELCAweDM5LAorICAgICAweDQ3LCAweDkwLCAweDI4LCAweDM3LCAweEY1LCAweEFFLCAweDk2LCAweEQ1LCAweEEwLCAweDVCLCAweEM4LCAweEQ2LCAweDFDLCAweEE4LCAweERCLCAweEVGLCAweDFCLCAweDEzLCAweEE0LCAweEI0LCAweEFCLCAweEZFLCAweDRGLCAweEIxLCAweDAwLCAweDYwLCAweDQ1LCAweEI2LCAweDc0LCAweEJCLCAweDU0LCAweDcyLAorICAgICAweDkzLCAweDA0LCAweEMzLCAweDgyLCAweEJFLCAweDUzLCAweEE1LCAweEFGLCAweDA1LCAweDU1LCAweDYxLCAweDc2LCAweEY2LCAweEVBLCAweEEyLCAweEVGLCAweDFELCAweDA1LCAweEU0LCAweEIwLCAweDgzLCAweDE4LCAweDFFLCAweEU2LCAweDc0LCAweENELCAweEE1LCAweEE0LCAweDg1LCAweEY3LCAweDRELCAweDdBLAorICAgICAweDQwfDB4ODAgfSwKKyAgIHsgMHg5NSwgMHhBRSwgMHg0MSwgMHhCQSB9LAorfQorfTsKKyAgdW5zaWduZWQgY2hhciBUWzE2XTsKKyAgdW5zaWduZWQgbG9uZyB0YWdsZW47CisgIGludCBlcnIsIHgsIGlkeDsKKworICAvKiBmaW5kIGthc3VtaSAqLworICBpZiAoKGlkeCA9IGZpbmRfY2lwaGVyKCJrYXN1bWkiKSkgPT0gLTEpIHsKKyAgICAgcmV0dXJuIENSWVBUX05PUDsKKyAgfQorCisgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgdGFnbGVuID0gNDsKKyAgICAgaWYgKChlcnIgPSBmOV9tZW1vcnkoaWR4LCB0ZXN0c1t4XS5LLCAxNiwgdGVzdHNbeF0uTSwgdGVzdHNbeF0ubXNnbGVuLCBULCAmdGFnbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorICAgICBpZiAodGFnbGVuICE9IDQgfHwgWE1FTUNNUChULCB0ZXN0c1t4XS5ULCA0KSkgeworICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICB9CisgIH0KKworICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMjM6MDI6NDIgJCAqLworCmRpZmYgLS1naXQgYS9zcmMvbWFjL2htYWMvaG1hY19kb25lLmMgYi9zcmMvbWFjL2htYWMvaG1hY19kb25lLmMKaW5kZXggZjY0ZDA0NC4uNWJhNTQxYSAxMDA2NDQKLS0tIGEvc3JjL21hYy9obWFjL2htYWNfZG9uZS5jCisrKyBiL3NyYy9tYWMvaG1hYy9obWFjX2RvbmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBITUFDIHN1cHBvcnQsIHRlcm1pbmF0ZSBzdHJlYW0sIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCiAqLwogCi0jaWZkZWYgSE1BQworI2lmZGVmIExUQ19ITUFDCiAKICNkZWZpbmUgSE1BQ19CTE9DS1NJWkUgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmJsb2Nrc2l6ZQogCkBAIC0xMDUsNSArMTA1LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19kb25lLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL2htYWMvaG1hY19maWxlLmMgYi9zcmMvbWFjL2htYWMvaG1hY19maWxlLmMKaW5kZXggZjg4ZDY5Mi4uYjI5NjMyMCAxMDA2NDQKLS0tIGEvc3JjL21hYy9obWFjL2htYWNfZmlsZS5jCisrKyBiL3NyYy9tYWMvaG1hYy9obWFjX2ZpbGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBITUFDIHN1cHBvcnQsIHByb2Nlc3MgYSBmaWxlLCBUb20gU3QgRGVuaXMvRG9iZXMgVmFuZGVybWVlcgogKi8KIAotI2lmZGVmIEhNQUMKKyNpZmRlZiBMVENfSE1BQwogCiAvKioKICAgSE1BQyBhIGZpbGUKQEAgLTg5LDUgKzg5LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19maWxlLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL2htYWMvaG1hY19pbml0LmMgYi9zcmMvbWFjL2htYWMvaG1hY19pbml0LmMKaW5kZXggZTY0ZDQ3Zi4uMmQ2MWE5YSAxMDA2NDQKLS0tIGEvc3JjL21hYy9obWFjL2htYWNfaW5pdC5jCisrKyBiL3NyYy9tYWMvaG1hYy9obWFjX2luaXQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBITUFDIHN1cHBvcnQsIGluaXRpYWxpemUgc3RhdGUsIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyIAogKi8KIAotI2lmZGVmIEhNQUMKKyNpZmRlZiBMVENfSE1BQwogCiAjZGVmaW5lIEhNQUNfQkxPQ0tTSVpFIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5ibG9ja3NpemUKIApAQCAtMTA4LDUgKzEwOCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfaW5pdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9obWFjL2htYWNfbWVtb3J5LmMgYi9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnkuYwppbmRleCA5OTk1OWY0Li43ZGMzNjRhIDEwMDY0NAotLS0gYS9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnkuYworKysgYi9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBITUFDIHN1cHBvcnQsIHByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnksIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCiAqLwogCi0jaWZkZWYgSE1BQworI2lmZGVmIExUQ19ITUFDCiAKIC8qKgogICAgSE1BQyBhIGJsb2NrIG9mIG1lbW9yeSB0byBwcm9kdWNlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKQEAgLTM0LDEzICszNCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKIHsKICAgICBobWFjX3N0YXRlICpobWFjOwotICAgIGludCBlcnI7CisgICAgaW50ICAgICAgICAgZXJyOwogCiAgICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7Ci0gICAgTFRDX0FSR0NISyhpbiAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOwogICAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOyAKICAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKIAorICAgIC8qIG1ha2Ugc3VyZSBoYXNoIGRlc2NyaXB0b3IgaXMgdmFsaWQgKi8KKyAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBpcyB0aGVyZSBhIGRlc2NyaXB0b3I/ICovCisgICAgaWYgKGhhc2hfZGVzY3JpcHRvcltoYXNoXS5obWFjX2Jsb2NrICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5obWFjX2Jsb2NrKGtleSwga2V5bGVuLCBpbiwgaW5sZW4sIG91dCwgb3V0bGVuKTsKKyAgICB9CisKKyAgICAvKiBub3BlLCBzbyBjYWxsIHRoZSBobWFjIGZ1bmN0aW9ucyAqLwogICAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgaG1hYyBzdGF0ZSAqLwogICAgIGhtYWMgPSBYTUFMTE9DKHNpemVvZihobWFjX3N0YXRlKSk7CiAgICAgaWYgKGhtYWMgPT0gTlVMTCkgewpAQCAtNzMsNSArODQsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9obWFjL2htYWNfbWVtb3J5X211bHRpLmMgYi9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkuYwppbmRleCBiN2E2ZDk2Li4yMzgyNTAyIDEwMDY0NAotLS0gYS9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkuYworKysgYi9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTE2LDcgKzE2LDcgQEAKICAgSE1BQyBzdXBwb3J0LCBwcm9jZXNzIG11bHRpcGxlIGJsb2NrcyBvZiBtZW1vcnksIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCiAqLwogCi0jaWZkZWYgSE1BQworI2lmZGVmIExUQ19ITUFDCiAKIC8qKgogICAgSE1BQyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5IHRvIHByb2R1Y2UgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZwpAQCAtODgsNSArODgsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5jIGIvc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5jCmluZGV4IDI5MTkyODIuLjA0YjVlZTIgMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3MuYworKysgYi9zcmMvbWFjL2htYWMvaG1hY19wcm9jZXNzLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgSE1BQyBzdXBwb3J0LCBwcm9jZXNzIGRhdGEsIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCiAqLwogCi0jaWZkZWYgSE1BQworI2lmZGVmIExUQ19ITUFDCiAKIC8qKiAKICAgUHJvY2VzcyBkYXRhIHRocm91Z2ggSE1BQwpAQCAtMzksNSArMzksNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3MuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvaG1hYy9obWFjX3Rlc3QuYyBiL3NyYy9tYWMvaG1hYy9obWFjX3Rlc3QuYwppbmRleCA4Nzc1OGY1Li40YTAzZjg3IDEwMDY0NAotLS0gYS9zcmMvbWFjL2htYWMvaG1hY190ZXN0LmMKKysrIGIvc3JjL21hYy9obWFjL2htYWNfdGVzdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgIEhNQUMgc3VwcG9ydCwgc2VsZi10ZXN0LCBUb20gU3QgRGVuaXMvRG9iZXMgVmFuZGVybWVlcgogKi8KIAotI2lmZGVmIEhNQUMKKyNpZmRlZiBMVENfSE1BQwogCiAjZGVmaW5lIEhNQUNfQkxPQ0tTSVpFIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5ibG9ja3NpemUKIApAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAzLiBUZXN0IENhc2VzIGZvciBITUFDLVNIQS0xCiAKICAgICAgICAgdGVzdF9jYXNlID0gICAgIDEKLSAgICAgICAga2V5ID0gICAgICAgICAgIDB4MGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYgorICAgICAgICBrZXkgPSAgICAgICAgICAgMHgwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjCiAgICAgICAgIGtleV9sZW4gPSAgICAgICAyMAogICAgICAgICBkYXRhID0gICAgICAgICAgIkhpIFRoZXIgICAgIDIwCiAgICAgICAgIGRpZ2VzdCA9ICAgICAgICAweDRjMWEwMzQyNGI1NWUwN2ZlN2YyN2JlMWQ1OGJiOTMyNGE5YTVhMDQKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgfQogCi0gICAgICAgIGlmKG1lbWNtcChkaWdlc3QsIGNhc2VzW2ldLmRpZ2VzdCwgKHNpemVfdCloYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemUpICE9IDApICB7CisgICAgICAgIGlmKFhNRU1DTVAoZGlnZXN0LCBjYXNlc1tpXS5kaWdlc3QsIChzaXplX3QpaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplKSAhPSAwKSAgewogICAgICAgICAgICAgZmFpbGVkKys7CiAjaWYgMAogICAgICAgICAgICAgdW5zaWduZWQgaW50IGo7CkBAIC0zMTIsNSArMzEyLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY190ZXN0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL29tYWMvb21hY19kb25lLmMgYi9zcmMvbWFjL29tYWMvb21hY19kb25lLmMKaW5kZXggMzcyOTJkNS4uN2EwNDUzYiAxMDA2NDQKLS0tIGEvc3JjL21hYy9vbWFjL29tYWNfZG9uZS5jCisrKyBiL3NyYy9tYWMvb21hYy9vbWFjX2RvbmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBPTUFDMSBzdXBwb3J0LCB0ZXJtaW5hdGUgYSBzdHJlYW0sIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIE9NQUMKKyNpZmRlZiBMVENfT01BQwogCiAvKioKICAgVGVybWluYXRlIGFuIE9NQUMgc3RyZWFtCkBAIC02MSw3ICs2MSw5IEBACiAgICB9CiAKICAgIC8qIGVuY3J5cHQgaXQgKi8KLSAgIGNpcGhlcl9kZXNjcmlwdG9yW29tYWMtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KG9tYWMtPmJsb2NrLCBvbWFjLT5ibG9jaywgJm9tYWMtPmtleSk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW29tYWMtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KG9tYWMtPmJsb2NrLCBvbWFjLT5ibG9jaywgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQogICAgY2lwaGVyX2Rlc2NyaXB0b3Jbb21hYy0+Y2lwaGVyX2lkeF0uZG9uZSgmb21hYy0+a2V5KTsKICAKICAgIC8qIG91dHB1dCBpdCAqLwpAQCAtODAsNSArODIsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvb21hYy9vbWFjX2ZpbGUuYyBiL3NyYy9tYWMvb21hYy9vbWFjX2ZpbGUuYwppbmRleCA2Mzc4NGIwLi43MTE3YWUzIDEwMDY0NAotLS0gYS9zcmMvbWFjL29tYWMvb21hY19maWxlLmMKKysrIGIvc3JjL21hYy9vbWFjL29tYWNfZmlsZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgIE9NQUMxIHN1cHBvcnQsIHByb2Nlc3MgYSBmaWxlLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBPTUFDCisjaWZkZWYgTFRDX09NQUMKIAogLyoqCiAgICBPTUFDIGEgZmlsZQpAQCAtNzksNSArNzksNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX2ZpbGUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvb21hYy9vbWFjX2luaXQuYyBiL3NyYy9tYWMvb21hYy9vbWFjX2luaXQuYwppbmRleCA4ODY2NzcyLi5jYmYyNmEyIDEwMDY0NAotLS0gYS9zcmMvbWFjL29tYWMvb21hY19pbml0LmMKKysrIGIvc3JjL21hYy9vbWFjL29tYWNfaW5pdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNiw3ICsxNiw3IEBACiAqLwogCiAKLSNpZmRlZiBPTUFDCisjaWZkZWYgTFRDX09NQUMKIAogLyoqCiAgICBJbml0aWFsaXplIGFuIE9NQUMgc3RhdGUKQEAgLTYzLDcgKzYzLDkgQEAKIAogICAgLyogZmlyc3QgY2FsYyBMIHdoaWNoIGlzIEVrKDApICovCiAgICB6ZXJvbWVtKG9tYWMtPkx1WzBdLCBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCk7Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KG9tYWMtPkx1WzBdLCBvbWFjLT5MdVswXSwgJm9tYWMtPmtleSk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQob21hYy0+THVbMF0sIG9tYWMtPkx1WzBdLCAmb21hYy0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CiAKICAgIC8qIG5vdyBkbyB0aGUgbXVsdHMsIHdob29weSEgKi8KICAgIGZvciAoeCA9IDA7IHggPCAyOyB4KyspIHsKQEAgLTk1LDUgKzk3LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19pbml0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8wNiAxMDoyMjo0NCAkICovCisvKiAkUmV2aXNpb246IDEuMTAgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5LmMgYi9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYwppbmRleCAzYjE1MjFjLi41MGIyZGIwIDEwMDY0NAotLS0gYS9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYworKysgYi9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBPTUFDMSBzdXBwb3J0LCBwcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5LCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBPTUFDCisjaWZkZWYgTFRDX09NQUMKIAogLyoqCiAgICBPTUFDIGEgYmxvY2sgb2YgbWVtb3J5IApAQCAtNDEsNiArNDEsMTYgQEAKICAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOwogICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CiAKKyAgIC8qIGlzIHRoZSBjaXBoZXIgdmFsaWQ/ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogVXNlIGFjY2VsZXJhdG9yIGlmIGZvdW5kICovCisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5vbWFjX21lbW9yeSAhPSBOVUxMKSB7CisgICAgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5vbWFjX21lbW9yeShrZXksIGtleWxlbiwgaW4sIGlubGVuLCBvdXQsIG91dGxlbik7CisgICB9CisKICAgIC8qIGFsbG9jYXRlIHJhbSBmb3Igb21hYyBzdGF0ZSAqLwogICAgb21hYyA9IFhNQUxMT0Moc2l6ZW9mKG9tYWNfc3RhdGUpKTsKICAgIGlmIChvbWFjID09IE5VTEwpIHsKQEAgLTcxLDUgKzgxLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU4ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5jIGIvc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLmMKaW5kZXggNTJmNzMyMy4uNDQ0NWNhMiAxMDA2NDQKLS0tIGEvc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLmMKKysrIGIvc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CkBAIC0xNiw3ICsxNiw3IEBACiAgIE9NQUMxIHN1cHBvcnQsIHByb2Nlc3MgbXVsdGlwbGUgYmxvY2tzIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgT01BQworI2lmZGVmIExUQ19PTUFDCiAKIC8qKgogICAgT01BQyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5IApAQCAtODYsNSArODYsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5jIGIvc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5jCmluZGV4IGNhM2VjNmIuLmY0Yjk2ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvb21hYy9vbWFjX3Byb2Nlc3MuYworKysgYi9zcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE2LDcgKzE2LDcgQEAKICovCiAKIAotI2lmZGVmIE9NQUMKKyNpZmRlZiBMVENfT01BQwogCiAvKiogCiAgICBQcm9jZXNzIGRhdGEgdGhyb3VnaCBPTUFDCkBAIC00OSw3ICs0OSw5IEBACiAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmb21hYy0+cHJldlt5XSkpIF49ICooKExUQ19GQVNUX1RZUEUqKSgmaW5beV0pKTsKICAgICAgICAgICB9CiAgICAgICAgICAgaW4gKz0gMTY7Ci0gICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3Jbb21hYy0+Y2lwaGVyX2lkeF0uZWNiX2VuY3J5cHQob21hYy0+cHJldiwgb21hYy0+cHJldiwgJm9tYWMtPmtleSk7CisgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltvbWFjLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChvbWFjLT5wcmV2LCBvbWFjLT5wcmV2LCAmb21hYy0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGlubGVuIC09IHg7CiAgICAgfQpAQCAtNjEsNyArNjMsOSBAQAogICAgICAgICAgIGZvciAoeCA9IDA7IHggPCAodW5zaWduZWQgbG9uZylvbWFjLT5ibGtsZW47IHgrKykgewogICAgICAgICAgICAgICBvbWFjLT5ibG9ja1t4XSBePSBvbWFjLT5wcmV2W3hdOwogICAgICAgICAgIH0KLSAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltvbWFjLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChvbWFjLT5ibG9jaywgb21hYy0+cHJldiwgJm9tYWMtPmtleSk7CisgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltvbWFjLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChvbWFjLT5ibG9jaywgb21hYy0+cHJldiwgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CiAgICAgICAgICAgb21hYy0+YnVmbGVuID0gMDsKICAgICAgICB9CiAKQEAgLTgwLDUgKzg0LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL29tYWMvb21hY190ZXN0LmMgYi9zcmMvbWFjL29tYWMvb21hY190ZXN0LmMKaW5kZXggMWJjOWVhZC4uMzIzMGE4YyAxMDA2NDQKLS0tIGEvc3JjL21hYy9vbWFjL29tYWNfdGVzdC5jCisrKyBiL3NyYy9tYWMvb21hYy9vbWFjX3Rlc3QuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBPTUFDMSBzdXBwb3J0LCBzZWxmLXRlc3QsIGJ5IFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIE9NQUMKKyNpZmRlZiBMVENfT01BQwogCiAvKioKICAgVGVzdCB0aGUgT01BQyBzZXR1cApAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgfQogCi0gICAgICAgaWYgKG1lbWNtcChvdXQsIHRlc3RzW3hdLnRhZywgMTYpICE9IDApIHsKKyAgICAgICBpZiAoWE1FTUNNUChvdXQsIHRlc3RzW3hdLnRhZywgMTYpICE9IDApIHsKICNpZiAwCiAgICAgICAgICAgaW50IHk7CiAgICAgICAgICAgcHJpbnRmKCJcblxuVGFnOiAiKTsKQEAgLTEwNiw1ICsxMDYsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX3Rlc3QuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLmMgYi9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5jCmluZGV4IDg1YmY5ZWUuLjczNGNkMzggMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLmMKKysrIGIvc3JjL21hYy9wZWxpY2FuL3BlbGljYW4uYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTgsOSArMTgsOSBAQAogI2lmZGVmIFBFTElDQU4KIAogI2RlZmluZSBFTkNSWVBUX09OTFkKKyNkZWZpbmUgUEVMSV9UQUIKICNpbmNsdWRlICIuLi8uLi9jaXBoZXJzL2Flcy9hZXNfdGFiLmMiCiAKLQogLyoqCiAgICBJbml0aWFsaXplIGEgUGVsaWNhbiBzdGF0ZQogICAgQHBhcmFtIHBlbG1hYyAgICBUaGUgUGVsaWNhbiBzdGF0ZSB0byBpbml0aWFsaXplCkBAIC0xNjEsNSArMTYxLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjE2ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xOCAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8wMiAxMzoxOToxMCAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbl9tZW1vcnkuYyBiL3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5jCmluZGV4IDA5MzM0MGQuLjdkZGU4NDMgMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5jCisrKyBiL3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC01NSw1ICs1NSw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0LmMgYi9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0LmMKaW5kZXggMDZlYzNmMC4uM2NmZjhlYyAxMDA2NDQKLS0tIGEvc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fdGVzdC5jCisrKyBiL3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjQsNyArMjQsNyBAQAogI2Vsc2UKICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogICAgICAgICB1bnNpZ25lZCBjaGFyIEtbMzJdLCBNU0dbNjRdLCBUWzE2XTsKLQlpbnQga2V5bGVuLCBwdGxlbjsKKyAgIGludCBrZXlsZW4sIHB0bGVuOwogICAgfSB0ZXN0c1tdID0gewogLyogSz0xNiwgTT0wICovCiB7CkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICB9CiAKLSAgICAgICBpZiAobWVtY21wKG91dCwgdGVzdHNbeF0uVCwgMTYpKSB7CisgICAgICAgaWYgKFhNRU1DTVAob3V0LCB0ZXN0c1t4XS5ULCAxNikpIHsKICNpZiAwCiAgICAgICAgICAgIGludCB5OwogICAgICAgICAgICBwcmludGYoIlxuRmFpbGVkIHRlc3QgJWRcbiIsIHgpOwpAQCAtMTE2LDUgKzExNiw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fdGVzdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjkgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjE4OjIzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUuYyBiL3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUuYwppbmRleCAwOWM0MzBjLi4wMDVmOTRmIDEwMDY0NAotLS0gYS9zcmMvbWFjL3BtYWMvcG1hY19kb25lLmMKKysrIGIvc3JjL21hYy9wbWFjL3BtYWNfZG9uZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgIFBNQUMgaW1wbGVtZW50YXRpb24sIHRlcm1pbmF0ZSBhIHNlc3Npb24sIGJ5IFRvbSBTdCBEZW5pcyAKICovCiAKLSNpZmRlZiBQTUFDCisjaWZkZWYgTFRDX1BNQUMKIAogaW50IHBtYWNfZG9uZShwbWFjX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCiB7CkBAIC00OSwxMSArNDksMTMgQEAKICAgIH0KIAogICAgLyogZW5jcnlwdCBpdCAqLwotICAgY2lwaGVyX2Rlc2NyaXB0b3Jbc3RhdGUtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KHN0YXRlLT5jaGVja3N1bSwgc3RhdGUtPmNoZWNrc3VtLCAmc3RhdGUtPmtleSk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW3N0YXRlLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChzdGF0ZS0+Y2hlY2tzdW0sIHN0YXRlLT5jaGVja3N1bSwgJnN0YXRlLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KICAgIGNpcGhlcl9kZXNjcmlwdG9yW3N0YXRlLT5jaXBoZXJfaWR4XS5kb25lKCZzdGF0ZS0+a2V5KTsKIAogICAgLyogc3RvcmUgaXQgKi8KLSAgIGZvciAoeCA9IDA7IHggPCBzdGF0ZS0+YmxvY2tfbGVuICYmIHggPD0gKGludCkqb3V0bGVuOyB4KyspIHsKKyAgIGZvciAoeCA9IDA7IHggPCBzdGF0ZS0+YmxvY2tfbGVuICYmIHggPCAoaW50KSpvdXRsZW47IHgrKykgewogICAgICAgIG91dFt4XSA9IHN0YXRlLT5jaGVja3N1bVt4XTsKICAgIH0KICAgICpvdXRsZW4gPSB4OwpAQCAtNjgsNSArNzAsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvcG1hYy9wbWFjX2ZpbGUuYyBiL3NyYy9tYWMvcG1hYy9wbWFjX2ZpbGUuYwppbmRleCAxMDM0YzZmLi5mODgwOWU4IDEwMDY0NAotLS0gYS9zcmMvbWFjL3BtYWMvcG1hY19maWxlLmMKKysrIGIvc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBQTUFDIGltcGxlbWVudGF0aW9uLCBwcm9jZXNzIGEgZmlsZSwgYnkgVG9tIFN0IERlbmlzIAogKi8KIAotI2lmZGVmIFBNQUMKKyNpZmRlZiBMVENfUE1BQwogCiAvKioKICAgIFBNQUMgYSBmaWxlIApAQCAtODAsNSArODAsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2ZpbGUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvcG1hYy9wbWFjX2luaXQuYyBiL3NyYy9tYWMvcG1hYy9wbWFjX2luaXQuYwppbmRleCA1YmQ5NGEwLi5jODQyMTYwIDEwMDY0NAotLS0gYS9zcmMvbWFjL3BtYWMvcG1hY19pbml0LmMKKysrIGIvc3JjL21hYy9wbWFjL3BtYWNfaW5pdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBQTUFDIGltcGxlbWVudGF0aW9uLCBpbml0aWFsaXplIHN0YXRlLCBieSBUb20gU3QgRGVuaXMgCiAqLwogCi0jaWZkZWYgUE1BQworI2lmZGVmIExUQ19QTUFDCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogICAgIGludCAgICAgICAgICAgbGVuOwpAQCAtODcsNyArODcsOSBAQAogCiAgICAvKiBmaW5kIEwgPSBFWzBdICovCiAgICB6ZXJvbWVtKEwsIHBtYWMtPmJsb2NrX2xlbik7Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KEwsIEwsICZwbWFjLT5rZXkpOworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KEwsIEwsICZwbWFjLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KIAogICAgLyogZmluZCBMc1tpXSA9IEwgPDwgaSBmb3IgaSA9PSAwLi4zMSAqLwogICAgWE1FTUNQWShwbWFjLT5Mc1swXSwgTCwgcG1hYy0+YmxvY2tfbGVuKTsKQEAgLTEyNywxOCArMTI5LDE5IEBACiAgICAgemVyb21lbShwbWFjLT5ibG9jaywgICAgc2l6ZW9mKHBtYWMtPmJsb2NrKSk7CiAgICAgemVyb21lbShwbWFjLT5MaSwgICAgICAgc2l6ZW9mKHBtYWMtPkxpKSk7CiAgICAgemVyb21lbShwbWFjLT5jaGVja3N1bSwgc2l6ZW9mKHBtYWMtPmNoZWNrc3VtKSk7Ci0KKyAgICBlcnIgPSBDUllQVF9PSzsKK2Vycm9yOgogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwogICAgIHplcm9tZW0oTCwgcG1hYy0+YmxvY2tfbGVuKTsKICNlbmRpZgogCiAgICAgWEZSRUUoTCk7CiAKLSAgICByZXR1cm4gQ1JZUFRfT0s7CisgICAgcmV0dXJuIGVycjsKIH0KIAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2luaXQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeS5jIGIvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5LmMKaW5kZXggZmNkZWY5OS4uY2ExNWU2MyAxMDA2NDQKLS0tIGEvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5LmMKKysrIGIvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgIFBNQUMgaW1wbGVtZW50YXRpb24sIHByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnksIGJ5IFRvbSBTdCBEZW5pcyAKICovCiAKLSNpZmRlZiBQTUFDCisjaWZkZWYgTFRDX1BNQUMKIAogLyoqCiAgICBQTUFDIGEgYmxvY2sgb2YgbWVtb3J5CkBAIC03MCw1ICs3MCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkuYyBiL3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5jCmluZGV4IDJjYzg1NzIuLjcwZTIzOTggMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5jCisrKyBiL3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMTYsNyArMTYsNyBAQAogICAgUE1BQyBpbXBsZW1lbnRhdGlvbiwgcHJvY2VzcyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5LCBieSBUb20gU3QgRGVuaXMgCiAqLwogCi0jaWZkZWYgUE1BQworI2lmZGVmIExUQ19QTUFDCiAKIC8qKgogICAgUE1BQyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5CkBAIC04NSw1ICs4NSw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5X211bHRpLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3BtYWMvcG1hY19udHouYyBiL3NyYy9tYWMvcG1hYy9wbWFjX250ei5jCmluZGV4IDdlYzQ1NTAuLjgzMjI1NjMgMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvcG1hYy9wbWFjX250ei5jCisrKyBiL3NyYy9tYWMvcG1hYy9wbWFjX250ei5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBQTUFDIGltcGxlbWVudGF0aW9uLCBpbnRlcm5hbCBmdW5jdGlvbiwgYnkgVG9tIFN0IERlbmlzIAogKi8KIAotI2lmZGVmIFBNQUMKKyNpZmRlZiBMVENfUE1BQwogCiAvKioKICAgSW50ZXJuYWwgUE1BQyBmdW5jdGlvbgpAQCAtMzUsNSArMzUsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX250ei5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5jIGIvc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5jCmluZGV4IDllYmQ0NGUuLmExOTE4MTIgMTAwNjQ0Ci0tLSBhL3NyYy9tYWMvcG1hYy9wbWFjX3Byb2Nlc3MuYworKysgYi9zcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE2LDcgKzE2LDcgQEAKICovCiAKIAotI2lmZGVmIFBNQUMKKyNpZmRlZiBMVENfUE1BQwogCiAvKioKICAgUHJvY2VzcyBkYXRhIGluIGEgUE1BQyBzdHJlYW0KQEAgLTUwLDcgKzUwLDkgQEAKICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CiAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmWlt5XSkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCZpblt5XSkpIF4gKigoTFRDX0ZBU1RfVFlQRSopKCZwbWFjLT5MaVt5XSkpOwogICAgICAgICAgIH0KLSAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltwbWFjLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChaLCBaLCAmcG1hYy0+a2V5KTsKKyAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW3BtYWMtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KFosIFosICZwbWFjLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQogICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZwbWFjLT5jaGVja3N1bVt5XSkpIF49ICooKExUQ19GQVNUX1RZUEUqKSgmWlt5XSkpOwogICAgICAgICAgIH0KQEAgLTY3LDcgKzY5LDkgQEAKICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKHVuc2lnbmVkIGxvbmcpcG1hYy0+YmxvY2tfbGVuOyB4KyspIHsKICAgICAgICAgICAgICAgIFpbeF0gPSBwbWFjLT5MaVt4XSBeIHBtYWMtPmJsb2NrW3hdOwogICAgICAgICAgIH0KLSAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltwbWFjLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChaLCBaLCAmcG1hYy0+a2V5KTsKKyAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW3BtYWMtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KFosIFosICZwbWFjLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgIH0KICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKHVuc2lnbmVkIGxvbmcpcG1hYy0+YmxvY2tfbGVuOyB4KyspIHsKICAgICAgICAgICAgICAgcG1hYy0+Y2hlY2tzdW1beF0gXj0gWlt4XTsKICAgICAgICAgICB9CkBAIC05Miw1ICs5Niw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLmMgYi9zcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IuYwppbmRleCBmMjRjMjJiLi42OTRhNDIzIDEwMDY0NAotLS0gYS9zcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IuYworKysgYi9zcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICAgUE1BQyBpbXBsZW1lbnRhdGlvbiwgaW50ZXJuYWwgZnVuY3Rpb24sIGJ5IFRvbSBTdCBEZW5pcyAKICovCiAKLSNpZmRlZiBQTUFDCisjaWZkZWYgTFRDX1BNQUMKIAogLyoqCiAgIEludGVybmFsIGZ1bmN0aW9uLiAgUGVyZm9ybXMgdGhlIHN0YXRlIHVwZGF0ZSAoYWRkaW5nIGNvcnJlY3QgbXVsdGlwbGUpCkBAIC00MCw1ICs0MCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3BtYWMvcG1hY190ZXN0LmMgYi9zcmMvbWFjL3BtYWMvcG1hY190ZXN0LmMKaW5kZXggNmQ4ODcwMy4uYTYzNWUxNSAxMDA2NDQKLS0tIGEvc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5jCisrKyBiL3NyYy9tYWMvcG1hYy9wbWFjX3Rlc3QuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTYsNyArMTYsNyBAQAogKi8KIAogCi0jaWZkZWYgUE1BQworI2lmZGVmIExUQ19QTUFDCiAKIC8qKiAKICAgIFRlc3QgdGhlIE9NQUMgaW1wbGVtZW50YXRpb24KQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobWVtY21wKG91dHRhZywgdGVzdHNbeF0udGFnLCBsZW4pKSB7CisgICAgICAgIGlmIChYTUVNQ01QKG91dHRhZywgdGVzdHNbeF0udGFnLCBsZW4pKSB7CiAjaWYgMAogICAgICAgICAgICB1bnNpZ25lZCBsb25nIHk7CiAgICAgICAgICAgIHByaW50ZigiXG5UQUc6XG4iKTsKQEAgLTE2MSw1ICsxNjEsNSBAQAogIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY190ZXN0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3hjYmMveGNiY19kb25lLmMgYi9zcmMvbWFjL3hjYmMveGNiY19kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3YzI0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMveGNiYy94Y2JjX2RvbmUuYwpAQCAtMCwwICsxLDc3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSB4Y2JjX2RvbmUuYworICBYQ0JDIFN1cHBvcnQsIHRlcm1pbmF0ZSB0aGUgc3RhdGUKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogVGVybWluYXRlIHRoZSBYQ0JDLU1BQyBzdGF0ZQorICBAcGFyYW0geGNiYyAgICAgWENCQyBzdGF0ZSB0byB0ZXJtaW5hdGUKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUgTUFDIHRhZworICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gRGVzdGluYXRpb24gc2l6ZSBhbmQgZmluYWwgdGFnIHNpemUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgeGNiY19kb25lKHhjYmNfc3RhdGUgKnhjYmMsIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaW50IGVyciwgeDsKKyAgIExUQ19BUkdDSEsoeGNiYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgc3RydWN0dXJlICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZCh4Y2JjLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKCh4Y2JjLT5ibG9ja3NpemUgPiBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCkgfHwgKHhjYmMtPmJsb2Nrc2l6ZSA8IDApIHx8CisgICAgICAgKHhjYmMtPmJ1ZmxlbiA+IHhjYmMtPmJsb2Nrc2l6ZSkgfHwgKHhjYmMtPmJ1ZmxlbiA8IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIHdoaWNoIGtleSBkbyB3ZSB1c2U/ICovCisgICBpZiAoeGNiYy0+YnVmbGVuID09IHhjYmMtPmJsb2Nrc2l6ZSkgeworICAgICAgLyogazIgKi8KKyAgICAgIGZvciAoeCA9IDA7IHggPCB4Y2JjLT5ibG9ja3NpemU7IHgrKykgeworICAgICAgICAgeGNiYy0+SVZbeF0gXj0geGNiYy0+S1sxXVt4XTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICB4Y2JjLT5JVlt4Y2JjLT5idWZsZW5dIF49IDB4ODA7CisgICAgICAvKiBrMyAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHhjYmMtPmJsb2Nrc2l6ZTsgeCsrKSB7CisgICAgICAgICB4Y2JjLT5JVlt4XSBePSB4Y2JjLT5LWzJdW3hdOworICAgICAgfQorICAgfQorCisgICAvKiBlbmNyeXB0ICovCisgICBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmVjYl9lbmNyeXB0KHhjYmMtPklWLCB4Y2JjLT5JViwgJnhjYmMtPmtleSk7CisgICBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmRvbmUoJnhjYmMtPmtleSk7CisKKyAgIC8qIGV4dHJhY3QgdGFnICovCisgICBmb3IgKHggPSAwOyB4IDwgeGNiYy0+YmxvY2tzaXplICYmICh1bnNpZ25lZCBsb25nKXggPCAqb3V0bGVuOyB4KyspIHsKKyAgICAgIG91dFt4XSA9IHhjYmMtPklWW3hdOworICAgfQorICAgKm91dGxlbiA9IHg7CisgIAorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbSh4Y2JjLCBzaXplb2YoKnhjYmMpKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDcgMDM6MjM6NDYgJCAqLworCmRpZmYgLS1naXQgYS9zcmMvbWFjL3hjYmMveGNiY19maWxlLmMgYi9zcmMvbWFjL3hjYmMveGNiY19maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4ZjdhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMveGNiYy94Y2JjX2ZpbGUuYwpAQCAtMCwwICsxLDgzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgeGNiY19maWxlLmMKKyAgWENCQyBzdXBwb3J0LCBwcm9jZXNzIGEgZmlsZSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX1hDQkMKKworLyoqCisgICBYQ0JDIGEgZmlsZQorICAgQHBhcmFtIGNpcGhlciAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBrZXkgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB5b3Ugd2lzaCB0byBYQ0JDCisgICBAcGFyYW0gb3V0ICAgICAgW291dF0gV2hlcmUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpcyB0byBiZSBzdG9yZWQKKyAgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIGZpbGUgc3VwcG9ydCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCB4Y2JjX2ZpbGUoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisjaWZkZWYgTFRDX05PX0ZJTEUKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgaW50IGVyciwgeDsKKyAgIHhjYmNfc3RhdGUgeGNiYzsKKyAgIEZJTEUgKmluOworICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKworICAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZmlsZW5hbWUgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICAhPSBOVUxMKTsKKworICAgaW4gPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX0ZJTEVfTk9URk9VTkQ7CisgICB9CisKKyAgIGlmICgoZXJyID0geGNiY19pbml0KCZ4Y2JjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZjbG9zZShpbik7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBkbyB7CisgICAgICB4ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgaW4pOworICAgICAgaWYgKChlcnIgPSB4Y2JjX3Byb2Nlc3MoJnhjYmMsIGJ1ZiwgeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBmY2xvc2UoaW4pOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gd2hpbGUgKHggPT0gc2l6ZW9mKGJ1ZikpOworICAgZmNsb3NlKGluKTsKKworICAgaWYgKChlcnIgPSB4Y2JjX2RvbmUoJnhjYmMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKworICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19maWxlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMTo1Njo0MSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3hjYmMveGNiY19pbml0LmMgYi9zcmMvbWFjL3hjYmMveGNiY19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwZGNhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMveGNiYy94Y2JjX2luaXQuYwpAQCAtMCwwICsxLDg2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSB4Y2JjX2luaXQuYworICBYQ0JDIFN1cHBvcnQsIHN0YXJ0IGFuIFhDQkMgc3RhdGUKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogSW5pdGlhbGl6ZSBYQ0JDLU1BQyBzdGF0ZQorICBAcGFyYW0geGNiYyAgICBbb3V0XSBYQ0JDIHN0YXRlIHRvIGluaXRpYWxpemUKKyAgQHBhcmFtIGNpcGhlciAgSW5kZXggb2YgY2lwaGVyIHRvIHVzZQorICBAcGFyYW0ga2V5ICAgICBbaW5dICBTZWNyZXQga2V5CisgIEBwYXJhbSBrZXlsZW4gIExlbmd0aCBvZiBzZWNyZXQga2V5IGluIG9jdGV0cworICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCB4Y2JjX2luaXQoeGNiY19zdGF0ZSAqeGNiYywgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbikKK3sKKyAgIGludCAgICAgICAgICAgIHgsIHksIGVycjsKKyAgIHN5bW1ldHJpY19rZXkgKnNrZXk7CisKKyAgIExUQ19BUkdDSEsoeGNiYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKworICAgLyogc2NoZWR1bGUgdGhlIGtleSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoICUgc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKyAgIC8qIHNjaGVkdWxlIHRoZSB1c2VyIGtleSAqLworICAgc2tleSA9IFhDQUxMT0MoMSwgc2l6ZW9mKCpza2V5KSk7CisgICBpZiAoc2tleSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIDAsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBkb25lOworICAgfQorICAgCisgICAvKiBtYWtlIHRoZSB0aHJlZSBrZXlzICovCisgICBmb3IgKHkgPSAwOyB5IDwgMzsgeSsrKSB7CisgICAgIGZvciAoeCA9IDA7IHggPCBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsgeCsrKSB7CisgICAgICAgIHhjYmMtPktbeV1beF0gPSB5ICsgMTsKKyAgICAgfQorICAgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KHhjYmMtPktbeV0sIHhjYmMtPktbeV0sIHNrZXkpOworICAgfQorCisgICAvKiBzZXR1cCBLMSAqLworICAgZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5zZXR1cCh4Y2JjLT5LWzBdLCBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCwgMCwgJnhjYmMtPmtleSk7CisgCisgICAvKiBzZXR1cCBzdHJ1Y3QgKi8KKyAgIHplcm9tZW0oeGNiYy0+SVYsIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoKTsKKyAgIHhjYmMtPmJsb2Nrc2l6ZSA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgeGNiYy0+Y2lwaGVyICAgID0gY2lwaGVyOworICAgeGNiYy0+YnVmbGVuICAgID0gMDsKK2RvbmU6CisgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmRvbmUoc2tleSk7CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHNrZXksIHNpemVvZigqc2tleSkpOworI2VuZGlmCisgICBYRlJFRShza2V5KTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19pbml0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNyAwMzoyMzo0NiAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5jIGIvc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyNmI2YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIHhjYmNfcHJvY2Vzcy5jCisgIFhDQkMgU3VwcG9ydCwgWENCQy1NQUMgYSBibG9jayBvZiBtZW1vcnkKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogWENCQy1NQUMgYSBibG9jayBvZiBtZW1vcnkgCisgIEBwYXJhbSBjaXBoZXIgICAgIEluZGV4IG9mIGNpcGhlciB0byB1c2UKKyAgQHBhcmFtIGtleSAgICAgICAgW2luXSAgU2VjcmV0IGtleQorICBAcGFyYW0ga2V5bGVuICAgICBMZW5ndGggb2Yga2V5IGluIG9jdGV0cworICBAcGFyYW0gaW4gICAgICAgICBbaW5dICBNZXNzYWdlIHRvIE1BQworICBAcGFyYW0gaW5sZW4gICAgICBMZW5ndGggb2YgaW5wdXQgaW4gb2N0ZXRzCisgIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUgTUFDIHRhZworICBAcGFyYW0gb3V0bGVuICAgICBbaW4vb3V0XSBPdXRwdXQgc2l6ZSBhbmQgZmluYWwgdGFnIHNpemUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MuCisqLworaW50IHhjYmNfbWVtb3J5KGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgeGNiY19zdGF0ZSAqeGNiYzsKKyAgIGludCAgICAgICAgIGVycjsKKworICAgLyogaXMgdGhlIGNpcGhlciB2YWxpZD8gKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBVc2UgYWNjZWxlcmF0b3IgaWYgZm91bmQgKi8KKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnhjYmNfbWVtb3J5ICE9IE5VTEwpIHsKKyAgICAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnhjYmNfbWVtb3J5KGtleSwga2V5bGVuLCBpbiwgaW5sZW4sIG91dCwgb3V0bGVuKTsKKyAgIH0KKworICAgeGNiYyA9IFhDQUxMT0MoMSwgc2l6ZW9mKCp4Y2JjKSk7CisgICBpZiAoeGNiYyA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IHhjYmNfaW5pdCh4Y2JjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgZ290byBkb25lOworICAgfQorCisgICBpZiAoKGVyciA9IHhjYmNfcHJvY2Vzcyh4Y2JjLCBpbiwgaW5sZW4pKSAhPSBDUllQVF9PSykgeworICAgICBnb3RvIGRvbmU7CisgICB9CisKKyAgIGVyciA9IHhjYmNfZG9uZSh4Y2JjLCBvdXQsIG91dGxlbik7Citkb25lOgorICAgWEZSRUUoeGNiYyk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAyMzowMjo0MiAkICovCmRpZmYgLS1naXQgYS9zcmMvbWFjL3hjYmMveGNiY19tZW1vcnlfbXVsdGkuYyBiL3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWU5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFjL3hjYmMveGNiY19tZW1vcnlfbXVsdGkuYwpAQCAtMCwwICsxLDkwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKiAKKyAgQGZpbGUgeGNiY19tZW1vcnlfbXVsdGkuYworICBYQ0JDIHN1cHBvcnQsIHByb2Nlc3MgbXVsdGlwbGUgYmxvY2tzIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX1hDQkMKKworLyoqCisgICBYQ0JDIG11bHRpcGxlIGJsb2NrcyBvZiBtZW1vcnkgCisgICBAcGFyYW0gY2lwaGVyICAgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnIChvY3RldHMpCisgICBAcGFyYW0gaW4gICAgICAgIFRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBYQ0JDCisgICBAcGFyYW0gaW5sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gc2VuZCB0aHJvdWdoIFhDQkMgKG9jdGV0cykKKyAgIEBwYXJhbSAuLi4gICAgICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gWENCQywgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCB4Y2JjX21lbW9yeV9tdWx0aShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKQoreworICAgaW50ICAgICAgICAgICAgICAgICAgZXJyOworICAgeGNiY19zdGF0ZSAgICAgICAgICAqeGNiYzsKKyAgIHZhX2xpc3QgICAgICAgICAgICAgIGFyZ3M7CisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXJwdHI7CisgICB1bnNpZ25lZCBsb25nICAgICAgICBjdXJsZW47CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBhbGxvY2F0ZSByYW0gZm9yIHhjYmMgc3RhdGUgKi8KKyAgIHhjYmMgPSBYTUFMTE9DKHNpemVvZih4Y2JjX3N0YXRlKSk7CisgICBpZiAoeGNiYyA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiB4Y2JjIHByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KKyAgIGlmICgoZXJyID0geGNiY19pbml0KHhjYmMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgdmFfc3RhcnQoYXJncywgaW5sZW4pOworICAgY3VycHRyID0gaW47IAorICAgY3VybGVuID0gaW5sZW47CisgICBmb3IgKDs7KSB7CisgICAgICAvKiBwcm9jZXNzIGJ1ZiAqLworICAgICAgaWYgKChlcnIgPSB4Y2JjX3Byb2Nlc3MoeGNiYywgY3VycHRyLCBjdXJsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAgLyogc3RlcCB0byBuZXh0ICovCisgICAgICBjdXJwdHIgPSB2YV9hcmcoYXJncywgY29uc3QgdW5zaWduZWQgY2hhciopOworICAgICAgaWYgKGN1cnB0ciA9PSBOVUxMKSB7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1cmxlbiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgIH0KKyAgIGlmICgoZXJyID0geGNiY19kb25lKHhjYmMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHhjYmMsIHNpemVvZih4Y2JjX3N0YXRlKSk7CisjZW5kaWYKKyAgIFhGUkVFKHhjYmMpOworICAgdmFfZW5kKGFyZ3MpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDE6NTM6MjUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5jIGIvc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDYzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLmMKQEAgLTAsMCArMSw3NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgeGNiY19wcm9jZXNzLmMKKyAgWENCQyBTdXBwb3J0LCBwcm9jZXNzIGJsb2NrcyB3aXRoIFhDQkMKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogUHJvY2VzcyBkYXRhIHRocm91Z2ggWENCQy1NQUMKKyAgQHBhcmFtIHhjYmMgICAgIFRoZSBYQ0JDLU1BQyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgSW5wdXQgZGF0YSB0byBwcm9jZXNzCisgIEBwYXJhbSBpbmxlbiAgICBMZW5ndGggb2YgaW5wdXQgaW4gb2N0ZXRzCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IHhjYmNfcHJvY2Vzcyh4Y2JjX3N0YXRlICp4Y2JjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIGludCBlcnI7CisjaWZkZWYgTFRDX0ZBU1QKKyAgIGludCB4OworI2VuZGlmCisKKyAgIExUQ19BUkdDSEsoeGNiYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW4gICAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgc3RydWN0dXJlICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZCh4Y2JjLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKCh4Y2JjLT5ibG9ja3NpemUgPiBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCkgfHwgKHhjYmMtPmJsb2Nrc2l6ZSA8IDApIHx8CisgICAgICAgKHhjYmMtPmJ1ZmxlbiA+IHhjYmMtPmJsb2Nrc2l6ZSkgfHwgKHhjYmMtPmJ1ZmxlbiA8IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKHhjYmMtPmJ1ZmxlbiA9PSAwKSB7CisgICAgICAgd2hpbGUgKGlubGVuID4gKHVuc2lnbmVkIGxvbmcpeGNiYy0+YmxvY2tzaXplKSB7CisgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB4Y2JjLT5ibG9ja3NpemU7IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSYoeGNiYy0+SVZbeF0pKSBePSAqKChMVENfRkFTVF9UWVBFKikmKGluW3hdKSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbeGNiYy0+Y2lwaGVyXS5lY2JfZW5jcnlwdCh4Y2JjLT5JViwgeGNiYy0+SVYsICZ4Y2JjLT5rZXkpOworICAgICAgICAgICBpbiAgICArPSB4Y2JjLT5ibG9ja3NpemU7CisgICAgICAgICAgIGlubGVuIC09IHhjYmMtPmJsb2Nrc2l6ZTsKKyAgICAgICB9CisgIH0KKyNlbmRpZgorCisgICB3aGlsZSAoaW5sZW4pIHsKKyAgICAgaWYgKHhjYmMtPmJ1ZmxlbiA9PSB4Y2JjLT5ibG9ja3NpemUpIHsKKyAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW3hjYmMtPmNpcGhlcl0uZWNiX2VuY3J5cHQoeGNiYy0+SVYsIHhjYmMtPklWLCAmeGNiYy0+a2V5KTsKKyAgICAgICAgIHhjYmMtPmJ1ZmxlbiA9IDA7CisgICAgIH0KKyAgICAgeGNiYy0+SVZbeGNiYy0+YnVmbGVuKytdIF49ICppbisrOworICAgICAtLWlubGVuOworICB9CisgIHJldHVybiBDUllQVF9PSzsgICAgICAgCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOSAyMjo0Mzo1MiAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9tYWMveGNiYy94Y2JjX3Rlc3QuYyBiL3NyYy9tYWMveGNiYy94Y2JjX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzU2YzBhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21hYy94Y2JjL3hjYmNfdGVzdC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSB4Y2JjX3Rlc3QuYworICBYQ0JDIFN1cHBvcnQsIFRlc3QgWENCQy1NQUMgbW9kZQorKi8KKworI2lmZGVmIExUQ19YQ0JDCisKKy8qKiBUZXN0IFhDQkMtTUFDIG1vZGUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2NlcworKi8KK2ludCB4Y2JjX3Rlc3Qodm9pZCkKK3sKKyNpZmRlZiBMVENfTk9fVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICBpbnQgbXNnbGVuOworICAgICAgIHVuc2lnbmVkIGNoYXIgS1sxNl0sIE1bMzRdLCBUWzE2XTsKKyAgIH0gdGVzdHNbXSA9IHsKK3sKKyAgIDAsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMCB9LAorCisgICB7IDB4NzUsIDB4ZjAsIDB4MjUsIDB4MWQsIDB4NTIsIDB4OGEsIDB4YzAsIDB4MWMsIAorICAgICAweDQ1LCAweDczLCAweGRmLCAweGQ1LCAweDg0LCAweGQ3LCAweDlmLCAweDI5IH0KK30sCisKK3sKKyAgIDMsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiB9LAorCisgICB7IDB4NWIsIDB4MzcsIDB4NjUsIDB4ODAsIDB4YWUsIDB4MmYsIDB4MTksIDB4YWYsIAorICAgICAweGU3LCAweDIxLCAweDljLCAweGVlLCAweGYxLCAweDcyLCAweDc1LCAweDZmIH0KK30sCisKK3sKKyAgIDE2LAorICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHhkMiwgMHhhMiwgMHg0NiwgMHhmYSwgMHgzNCwgMHg5YiwgMHg2OCwgMHhhNywgCisgICAgIDB4OTksIDB4OTgsIDB4YTQsIDB4MzksIDB4NGYsIDB4ZjcsIDB4YTIsIDB4NjMgfQorfSwKKworeworICAgMzIsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisKKyAgIHsgMHhmNSwgMHg0ZiwgMHgwZSwgMHhjOCwgMHhkMiwgMHhiOSwgMHhmMywgMHhkMywgCisgICAgIDB4NjgsIDB4MDcsIDB4NzMsIDB4NGIsIDB4ZDUsIDB4MjgsIDB4M2YsIDB4ZDQgfQorfSwKKworeworICAgMzQsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorICAgICAweDIwLCAweDIxIH0sCisKKyAgIHsgMHhiZSwgMHhjYiwgMHhiMywgMHhiYywgMHhjZCwgMHhiNSwgMHgxOCwgMHhhMywgCisgICAgIDB4MDYsIDB4NzcsIDB4ZDUsIDB4NDgsIDB4MWYsIDB4YjYsIDB4YjQsIDB4ZDggfSwKK30sCisKKworCit9OworICB1bnNpZ25lZCBjaGFyIFRbMTZdOworICB1bnNpZ25lZCBsb25nIHRhZ2xlbjsKKyAgaW50IGVyciwgeCwgaWR4OworCisgIC8qIEFFUyBjYW4gYmUgdW5kZXIgcmlqbmRhZWwgb3IgYWVzLi4uIHRyeSB0byBmaW5kIGl0ICovIAorICBpZiAoKGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKSkgPT0gLTEpIHsKKyAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX05PUDsKKyAgICAgfQorICB9CisKKyAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICB0YWdsZW4gPSAxNjsKKyAgICAgaWYgKChlcnIgPSB4Y2JjX21lbW9yeShpZHgsIHRlc3RzW3hdLkssIDE2LCB0ZXN0c1t4XS5NLCB0ZXN0c1t4XS5tc2dsZW4sIFQsICZ0YWdsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICAgIGlmICh0YWdsZW4gIT0gMTYgfHwgWE1FTUNNUChULCB0ZXN0c1t4XS5ULCAxNikpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgfQorICB9CisKKyAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY190ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAyMzowMjo0MiAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9tYXRoL2ZwL2x0Y19lY2NfZnBfbXVsbW9kLmMgYi9zcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzAyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jCkBAIC0wLDAgKzEsMTMxNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19mcF9tdWxtb2QuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmIGRlZmluZWQoTUVDQykgJiYgZGVmaW5lZChNRUNDX0ZQKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2FjaGUgKi8KKyNpZm5kZWYgRlBfRU5UUklFUworI2RlZmluZSBGUF9FTlRSSUVTIDE2CisjZW5kaWYKKworLyogbnVtYmVyIG9mIGJpdHMgaW4gTFVUICovCisjaWZuZGVmIEZQX0xVVAorI2RlZmluZSBGUF9MVVQgICAgIDhVCisjZW5kaWYKKworI2lmIChGUF9MVVQgPiAxMikgfHwgKEZQX0xVVCA8IDIpCisgICAjZXJyb3IgRlBfTFVUIG11c3QgYmUgYmV0d2VlbiAyIGFuZCAxMiBpbmNsdXNpdmVseQorI2VuZGlmICAgCisKKy8qKiBPdXIgRlAgY2FjaGUgKi8KK3N0YXRpYyBzdHJ1Y3QgeworICAgZWNjX3BvaW50ICpnLCAgICAgICAgICAgICAgLyogY2FjaGVkIENPUFkgb2YgYmFzZSBwb2ludCAqLworICAgICAgICAgICAgICpMVVRbMVU8PEZQX0xVVF07IC8qIGZpeGVkIHBvaW50IGxvb2t1cCAqLyAKKyAgIHZvaWQgICAgICAqbXU7ICAgICAgICAgICAgIC8qIGNvcHkgb2YgdGhlIG1vbnRnb21lcnkgY29uc3RhbnQgKi8KKyAgIGludCAgICAgICAgbHJ1X2NvdW50OyAgICAgIC8qIGFtb3VudCBvZiB0aW1lcyB0aGlzIGVudHJ5IGhhcyBiZWVuIHVzZWQgKi8KK30gZnBfY2FjaGVbRlBfRU5UUklFU107CisKK0xUQ19NVVRFWF9HTE9CQUwobHRjX2VjY19mcF9sb2NrKQorCisvKiBzaW1wbGUgdGFibGUgdG8gaGVscCBkaXJlY3QgdGhlIGdlbmVyYXRpb24gb2YgdGhlIExVVCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICBpbnQgaGFtLCB0ZXJtYSwgdGVybWI7Cit9IGx1dF9vcmRlcnNbXSA9IHsKKyAgIHsgMCwgMCwgMCB9LCB7IDEsIDAsIDAgfSwgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMiB9LCB7IDEsIDAsIDAgfSwgeyAyLCAxLCA0IH0sIHsgMiwgMiwgNCB9LCB7IDMsIDMsIDQgfSwgCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCA4IH0sIHsgMiwgMiwgOCB9LCB7IDMsIDMsIDggfSwgeyAyLCA0LCA4IH0sIHsgMywgNSwgOCB9LCB7IDMsIDYsIDggfSwgeyA0LCA3LCA4IH0sIAorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMTYgfSwgeyAyLCAyLCAxNiB9LCB7IDMsIDMsIDE2IH0sIHsgMiwgNCwgMTYgfSwgeyAzLCA1LCAxNiB9LCB7IDMsIDYsIDE2IH0sIHsgNCwgNywgMTYgfSwgCisgICB7IDIsIDgsIDE2IH0sIHsgMywgOSwgMTYgfSwgeyAzLCAxMCwgMTYgfSwgeyA0LCAxMSwgMTYgfSwgeyAzLCAxMiwgMTYgfSwgeyA0LCAxMywgMTYgfSwgeyA0LCAxNCwgMTYgfSwgeyA1LCAxNSwgMTYgfSwgCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCAzMiB9LCB7IDIsIDIsIDMyIH0sIHsgMywgMywgMzIgfSwgeyAyLCA0LCAzMiB9LCB7IDMsIDUsIDMyIH0sIHsgMywgNiwgMzIgfSwgeyA0LCA3LCAzMiB9LCAKKyAgIHsgMiwgOCwgMzIgfSwgeyAzLCA5LCAzMiB9LCB7IDMsIDEwLCAzMiB9LCB7IDQsIDExLCAzMiB9LCB7IDMsIDEyLCAzMiB9LCB7IDQsIDEzLCAzMiB9LCB7IDQsIDE0LCAzMiB9LCB7IDUsIDE1LCAzMiB9LCAKKyAgIHsgMiwgMTYsIDMyIH0sIHsgMywgMTcsIDMyIH0sIHsgMywgMTgsIDMyIH0sIHsgNCwgMTksIDMyIH0sIHsgMywgMjAsIDMyIH0sIHsgNCwgMjEsIDMyIH0sIHsgNCwgMjIsIDMyIH0sIHsgNSwgMjMsIDMyIH0sIAorICAgeyAzLCAyNCwgMzIgfSwgeyA0LCAyNSwgMzIgfSwgeyA0LCAyNiwgMzIgfSwgeyA1LCAyNywgMzIgfSwgeyA0LCAyOCwgMzIgfSwgeyA1LCAyOSwgMzIgfSwgeyA1LCAzMCwgMzIgfSwgeyA2LCAzMSwgMzIgfSwgCisjaWYgRlBfTFVUID4gNgorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgNjQgfSwgeyAyLCAyLCA2NCB9LCB7IDMsIDMsIDY0IH0sIHsgMiwgNCwgNjQgfSwgeyAzLCA1LCA2NCB9LCB7IDMsIDYsIDY0IH0sIHsgNCwgNywgNjQgfSwgCisgICB7IDIsIDgsIDY0IH0sIHsgMywgOSwgNjQgfSwgeyAzLCAxMCwgNjQgfSwgeyA0LCAxMSwgNjQgfSwgeyAzLCAxMiwgNjQgfSwgeyA0LCAxMywgNjQgfSwgeyA0LCAxNCwgNjQgfSwgeyA1LCAxNSwgNjQgfSwgCisgICB7IDIsIDE2LCA2NCB9LCB7IDMsIDE3LCA2NCB9LCB7IDMsIDE4LCA2NCB9LCB7IDQsIDE5LCA2NCB9LCB7IDMsIDIwLCA2NCB9LCB7IDQsIDIxLCA2NCB9LCB7IDQsIDIyLCA2NCB9LCB7IDUsIDIzLCA2NCB9LCAKKyAgIHsgMywgMjQsIDY0IH0sIHsgNCwgMjUsIDY0IH0sIHsgNCwgMjYsIDY0IH0sIHsgNSwgMjcsIDY0IH0sIHsgNCwgMjgsIDY0IH0sIHsgNSwgMjksIDY0IH0sIHsgNSwgMzAsIDY0IH0sIHsgNiwgMzEsIDY0IH0sIAorICAgeyAyLCAzMiwgNjQgfSwgeyAzLCAzMywgNjQgfSwgeyAzLCAzNCwgNjQgfSwgeyA0LCAzNSwgNjQgfSwgeyAzLCAzNiwgNjQgfSwgeyA0LCAzNywgNjQgfSwgeyA0LCAzOCwgNjQgfSwgeyA1LCAzOSwgNjQgfSwgCisgICB7IDMsIDQwLCA2NCB9LCB7IDQsIDQxLCA2NCB9LCB7IDQsIDQyLCA2NCB9LCB7IDUsIDQzLCA2NCB9LCB7IDQsIDQ0LCA2NCB9LCB7IDUsIDQ1LCA2NCB9LCB7IDUsIDQ2LCA2NCB9LCB7IDYsIDQ3LCA2NCB9LCAKKyAgIHsgMywgNDgsIDY0IH0sIHsgNCwgNDksIDY0IH0sIHsgNCwgNTAsIDY0IH0sIHsgNSwgNTEsIDY0IH0sIHsgNCwgNTIsIDY0IH0sIHsgNSwgNTMsIDY0IH0sIHsgNSwgNTQsIDY0IH0sIHsgNiwgNTUsIDY0IH0sIAorICAgeyA0LCA1NiwgNjQgfSwgeyA1LCA1NywgNjQgfSwgeyA1LCA1OCwgNjQgfSwgeyA2LCA1OSwgNjQgfSwgeyA1LCA2MCwgNjQgfSwgeyA2LCA2MSwgNjQgfSwgeyA2LCA2MiwgNjQgfSwgeyA3LCA2MywgNjQgfSwgCisjaWYgRlBfTFVUID4gNworICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMTI4IH0sIHsgMiwgMiwgMTI4IH0sIHsgMywgMywgMTI4IH0sIHsgMiwgNCwgMTI4IH0sIHsgMywgNSwgMTI4IH0sIHsgMywgNiwgMTI4IH0sIHsgNCwgNywgMTI4IH0sIAorICAgeyAyLCA4LCAxMjggfSwgeyAzLCA5LCAxMjggfSwgeyAzLCAxMCwgMTI4IH0sIHsgNCwgMTEsIDEyOCB9LCB7IDMsIDEyLCAxMjggfSwgeyA0LCAxMywgMTI4IH0sIHsgNCwgMTQsIDEyOCB9LCB7IDUsIDE1LCAxMjggfSwgCisgICB7IDIsIDE2LCAxMjggfSwgeyAzLCAxNywgMTI4IH0sIHsgMywgMTgsIDEyOCB9LCB7IDQsIDE5LCAxMjggfSwgeyAzLCAyMCwgMTI4IH0sIHsgNCwgMjEsIDEyOCB9LCB7IDQsIDIyLCAxMjggfSwgeyA1LCAyMywgMTI4IH0sIAorICAgeyAzLCAyNCwgMTI4IH0sIHsgNCwgMjUsIDEyOCB9LCB7IDQsIDI2LCAxMjggfSwgeyA1LCAyNywgMTI4IH0sIHsgNCwgMjgsIDEyOCB9LCB7IDUsIDI5LCAxMjggfSwgeyA1LCAzMCwgMTI4IH0sIHsgNiwgMzEsIDEyOCB9LCAKKyAgIHsgMiwgMzIsIDEyOCB9LCB7IDMsIDMzLCAxMjggfSwgeyAzLCAzNCwgMTI4IH0sIHsgNCwgMzUsIDEyOCB9LCB7IDMsIDM2LCAxMjggfSwgeyA0LCAzNywgMTI4IH0sIHsgNCwgMzgsIDEyOCB9LCB7IDUsIDM5LCAxMjggfSwgCisgICB7IDMsIDQwLCAxMjggfSwgeyA0LCA0MSwgMTI4IH0sIHsgNCwgNDIsIDEyOCB9LCB7IDUsIDQzLCAxMjggfSwgeyA0LCA0NCwgMTI4IH0sIHsgNSwgNDUsIDEyOCB9LCB7IDUsIDQ2LCAxMjggfSwgeyA2LCA0NywgMTI4IH0sIAorICAgeyAzLCA0OCwgMTI4IH0sIHsgNCwgNDksIDEyOCB9LCB7IDQsIDUwLCAxMjggfSwgeyA1LCA1MSwgMTI4IH0sIHsgNCwgNTIsIDEyOCB9LCB7IDUsIDUzLCAxMjggfSwgeyA1LCA1NCwgMTI4IH0sIHsgNiwgNTUsIDEyOCB9LCAKKyAgIHsgNCwgNTYsIDEyOCB9LCB7IDUsIDU3LCAxMjggfSwgeyA1LCA1OCwgMTI4IH0sIHsgNiwgNTksIDEyOCB9LCB7IDUsIDYwLCAxMjggfSwgeyA2LCA2MSwgMTI4IH0sIHsgNiwgNjIsIDEyOCB9LCB7IDcsIDYzLCAxMjggfSwgCisgICB7IDIsIDY0LCAxMjggfSwgeyAzLCA2NSwgMTI4IH0sIHsgMywgNjYsIDEyOCB9LCB7IDQsIDY3LCAxMjggfSwgeyAzLCA2OCwgMTI4IH0sIHsgNCwgNjksIDEyOCB9LCB7IDQsIDcwLCAxMjggfSwgeyA1LCA3MSwgMTI4IH0sIAorICAgeyAzLCA3MiwgMTI4IH0sIHsgNCwgNzMsIDEyOCB9LCB7IDQsIDc0LCAxMjggfSwgeyA1LCA3NSwgMTI4IH0sIHsgNCwgNzYsIDEyOCB9LCB7IDUsIDc3LCAxMjggfSwgeyA1LCA3OCwgMTI4IH0sIHsgNiwgNzksIDEyOCB9LCAKKyAgIHsgMywgODAsIDEyOCB9LCB7IDQsIDgxLCAxMjggfSwgeyA0LCA4MiwgMTI4IH0sIHsgNSwgODMsIDEyOCB9LCB7IDQsIDg0LCAxMjggfSwgeyA1LCA4NSwgMTI4IH0sIHsgNSwgODYsIDEyOCB9LCB7IDYsIDg3LCAxMjggfSwgCisgICB7IDQsIDg4LCAxMjggfSwgeyA1LCA4OSwgMTI4IH0sIHsgNSwgOTAsIDEyOCB9LCB7IDYsIDkxLCAxMjggfSwgeyA1LCA5MiwgMTI4IH0sIHsgNiwgOTMsIDEyOCB9LCB7IDYsIDk0LCAxMjggfSwgeyA3LCA5NSwgMTI4IH0sIAorICAgeyAzLCA5NiwgMTI4IH0sIHsgNCwgOTcsIDEyOCB9LCB7IDQsIDk4LCAxMjggfSwgeyA1LCA5OSwgMTI4IH0sIHsgNCwgMTAwLCAxMjggfSwgeyA1LCAxMDEsIDEyOCB9LCB7IDUsIDEwMiwgMTI4IH0sIHsgNiwgMTAzLCAxMjggfSwgCisgICB7IDQsIDEwNCwgMTI4IH0sIHsgNSwgMTA1LCAxMjggfSwgeyA1LCAxMDYsIDEyOCB9LCB7IDYsIDEwNywgMTI4IH0sIHsgNSwgMTA4LCAxMjggfSwgeyA2LCAxMDksIDEyOCB9LCB7IDYsIDExMCwgMTI4IH0sIHsgNywgMTExLCAxMjggfSwgCisgICB7IDQsIDExMiwgMTI4IH0sIHsgNSwgMTEzLCAxMjggfSwgeyA1LCAxMTQsIDEyOCB9LCB7IDYsIDExNSwgMTI4IH0sIHsgNSwgMTE2LCAxMjggfSwgeyA2LCAxMTcsIDEyOCB9LCB7IDYsIDExOCwgMTI4IH0sIHsgNywgMTE5LCAxMjggfSwgCisgICB7IDUsIDEyMCwgMTI4IH0sIHsgNiwgMTIxLCAxMjggfSwgeyA2LCAxMjIsIDEyOCB9LCB7IDcsIDEyMywgMTI4IH0sIHsgNiwgMTI0LCAxMjggfSwgeyA3LCAxMjUsIDEyOCB9LCB7IDcsIDEyNiwgMTI4IH0sIHsgOCwgMTI3LCAxMjggfSwgCisjaWYgRlBfTFVUID4gOAorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMjU2IH0sIHsgMiwgMiwgMjU2IH0sIHsgMywgMywgMjU2IH0sIHsgMiwgNCwgMjU2IH0sIHsgMywgNSwgMjU2IH0sIHsgMywgNiwgMjU2IH0sIHsgNCwgNywgMjU2IH0sIAorICAgeyAyLCA4LCAyNTYgfSwgeyAzLCA5LCAyNTYgfSwgeyAzLCAxMCwgMjU2IH0sIHsgNCwgMTEsIDI1NiB9LCB7IDMsIDEyLCAyNTYgfSwgeyA0LCAxMywgMjU2IH0sIHsgNCwgMTQsIDI1NiB9LCB7IDUsIDE1LCAyNTYgfSwgCisgICB7IDIsIDE2LCAyNTYgfSwgeyAzLCAxNywgMjU2IH0sIHsgMywgMTgsIDI1NiB9LCB7IDQsIDE5LCAyNTYgfSwgeyAzLCAyMCwgMjU2IH0sIHsgNCwgMjEsIDI1NiB9LCB7IDQsIDIyLCAyNTYgfSwgeyA1LCAyMywgMjU2IH0sIAorICAgeyAzLCAyNCwgMjU2IH0sIHsgNCwgMjUsIDI1NiB9LCB7IDQsIDI2LCAyNTYgfSwgeyA1LCAyNywgMjU2IH0sIHsgNCwgMjgsIDI1NiB9LCB7IDUsIDI5LCAyNTYgfSwgeyA1LCAzMCwgMjU2IH0sIHsgNiwgMzEsIDI1NiB9LCAKKyAgIHsgMiwgMzIsIDI1NiB9LCB7IDMsIDMzLCAyNTYgfSwgeyAzLCAzNCwgMjU2IH0sIHsgNCwgMzUsIDI1NiB9LCB7IDMsIDM2LCAyNTYgfSwgeyA0LCAzNywgMjU2IH0sIHsgNCwgMzgsIDI1NiB9LCB7IDUsIDM5LCAyNTYgfSwgCisgICB7IDMsIDQwLCAyNTYgfSwgeyA0LCA0MSwgMjU2IH0sIHsgNCwgNDIsIDI1NiB9LCB7IDUsIDQzLCAyNTYgfSwgeyA0LCA0NCwgMjU2IH0sIHsgNSwgNDUsIDI1NiB9LCB7IDUsIDQ2LCAyNTYgfSwgeyA2LCA0NywgMjU2IH0sIAorICAgeyAzLCA0OCwgMjU2IH0sIHsgNCwgNDksIDI1NiB9LCB7IDQsIDUwLCAyNTYgfSwgeyA1LCA1MSwgMjU2IH0sIHsgNCwgNTIsIDI1NiB9LCB7IDUsIDUzLCAyNTYgfSwgeyA1LCA1NCwgMjU2IH0sIHsgNiwgNTUsIDI1NiB9LCAKKyAgIHsgNCwgNTYsIDI1NiB9LCB7IDUsIDU3LCAyNTYgfSwgeyA1LCA1OCwgMjU2IH0sIHsgNiwgNTksIDI1NiB9LCB7IDUsIDYwLCAyNTYgfSwgeyA2LCA2MSwgMjU2IH0sIHsgNiwgNjIsIDI1NiB9LCB7IDcsIDYzLCAyNTYgfSwgCisgICB7IDIsIDY0LCAyNTYgfSwgeyAzLCA2NSwgMjU2IH0sIHsgMywgNjYsIDI1NiB9LCB7IDQsIDY3LCAyNTYgfSwgeyAzLCA2OCwgMjU2IH0sIHsgNCwgNjksIDI1NiB9LCB7IDQsIDcwLCAyNTYgfSwgeyA1LCA3MSwgMjU2IH0sIAorICAgeyAzLCA3MiwgMjU2IH0sIHsgNCwgNzMsIDI1NiB9LCB7IDQsIDc0LCAyNTYgfSwgeyA1LCA3NSwgMjU2IH0sIHsgNCwgNzYsIDI1NiB9LCB7IDUsIDc3LCAyNTYgfSwgeyA1LCA3OCwgMjU2IH0sIHsgNiwgNzksIDI1NiB9LCAKKyAgIHsgMywgODAsIDI1NiB9LCB7IDQsIDgxLCAyNTYgfSwgeyA0LCA4MiwgMjU2IH0sIHsgNSwgODMsIDI1NiB9LCB7IDQsIDg0LCAyNTYgfSwgeyA1LCA4NSwgMjU2IH0sIHsgNSwgODYsIDI1NiB9LCB7IDYsIDg3LCAyNTYgfSwgCisgICB7IDQsIDg4LCAyNTYgfSwgeyA1LCA4OSwgMjU2IH0sIHsgNSwgOTAsIDI1NiB9LCB7IDYsIDkxLCAyNTYgfSwgeyA1LCA5MiwgMjU2IH0sIHsgNiwgOTMsIDI1NiB9LCB7IDYsIDk0LCAyNTYgfSwgeyA3LCA5NSwgMjU2IH0sIAorICAgeyAzLCA5NiwgMjU2IH0sIHsgNCwgOTcsIDI1NiB9LCB7IDQsIDk4LCAyNTYgfSwgeyA1LCA5OSwgMjU2IH0sIHsgNCwgMTAwLCAyNTYgfSwgeyA1LCAxMDEsIDI1NiB9LCB7IDUsIDEwMiwgMjU2IH0sIHsgNiwgMTAzLCAyNTYgfSwgCisgICB7IDQsIDEwNCwgMjU2IH0sIHsgNSwgMTA1LCAyNTYgfSwgeyA1LCAxMDYsIDI1NiB9LCB7IDYsIDEwNywgMjU2IH0sIHsgNSwgMTA4LCAyNTYgfSwgeyA2LCAxMDksIDI1NiB9LCB7IDYsIDExMCwgMjU2IH0sIHsgNywgMTExLCAyNTYgfSwgCisgICB7IDQsIDExMiwgMjU2IH0sIHsgNSwgMTEzLCAyNTYgfSwgeyA1LCAxMTQsIDI1NiB9LCB7IDYsIDExNSwgMjU2IH0sIHsgNSwgMTE2LCAyNTYgfSwgeyA2LCAxMTcsIDI1NiB9LCB7IDYsIDExOCwgMjU2IH0sIHsgNywgMTE5LCAyNTYgfSwgCisgICB7IDUsIDEyMCwgMjU2IH0sIHsgNiwgMTIxLCAyNTYgfSwgeyA2LCAxMjIsIDI1NiB9LCB7IDcsIDEyMywgMjU2IH0sIHsgNiwgMTI0LCAyNTYgfSwgeyA3LCAxMjUsIDI1NiB9LCB7IDcsIDEyNiwgMjU2IH0sIHsgOCwgMTI3LCAyNTYgfSwgCisgICB7IDIsIDEyOCwgMjU2IH0sIHsgMywgMTI5LCAyNTYgfSwgeyAzLCAxMzAsIDI1NiB9LCB7IDQsIDEzMSwgMjU2IH0sIHsgMywgMTMyLCAyNTYgfSwgeyA0LCAxMzMsIDI1NiB9LCB7IDQsIDEzNCwgMjU2IH0sIHsgNSwgMTM1LCAyNTYgfSwgCisgICB7IDMsIDEzNiwgMjU2IH0sIHsgNCwgMTM3LCAyNTYgfSwgeyA0LCAxMzgsIDI1NiB9LCB7IDUsIDEzOSwgMjU2IH0sIHsgNCwgMTQwLCAyNTYgfSwgeyA1LCAxNDEsIDI1NiB9LCB7IDUsIDE0MiwgMjU2IH0sIHsgNiwgMTQzLCAyNTYgfSwgCisgICB7IDMsIDE0NCwgMjU2IH0sIHsgNCwgMTQ1LCAyNTYgfSwgeyA0LCAxNDYsIDI1NiB9LCB7IDUsIDE0NywgMjU2IH0sIHsgNCwgMTQ4LCAyNTYgfSwgeyA1LCAxNDksIDI1NiB9LCB7IDUsIDE1MCwgMjU2IH0sIHsgNiwgMTUxLCAyNTYgfSwgCisgICB7IDQsIDE1MiwgMjU2IH0sIHsgNSwgMTUzLCAyNTYgfSwgeyA1LCAxNTQsIDI1NiB9LCB7IDYsIDE1NSwgMjU2IH0sIHsgNSwgMTU2LCAyNTYgfSwgeyA2LCAxNTcsIDI1NiB9LCB7IDYsIDE1OCwgMjU2IH0sIHsgNywgMTU5LCAyNTYgfSwgCisgICB7IDMsIDE2MCwgMjU2IH0sIHsgNCwgMTYxLCAyNTYgfSwgeyA0LCAxNjIsIDI1NiB9LCB7IDUsIDE2MywgMjU2IH0sIHsgNCwgMTY0LCAyNTYgfSwgeyA1LCAxNjUsIDI1NiB9LCB7IDUsIDE2NiwgMjU2IH0sIHsgNiwgMTY3LCAyNTYgfSwgCisgICB7IDQsIDE2OCwgMjU2IH0sIHsgNSwgMTY5LCAyNTYgfSwgeyA1LCAxNzAsIDI1NiB9LCB7IDYsIDE3MSwgMjU2IH0sIHsgNSwgMTcyLCAyNTYgfSwgeyA2LCAxNzMsIDI1NiB9LCB7IDYsIDE3NCwgMjU2IH0sIHsgNywgMTc1LCAyNTYgfSwgCisgICB7IDQsIDE3NiwgMjU2IH0sIHsgNSwgMTc3LCAyNTYgfSwgeyA1LCAxNzgsIDI1NiB9LCB7IDYsIDE3OSwgMjU2IH0sIHsgNSwgMTgwLCAyNTYgfSwgeyA2LCAxODEsIDI1NiB9LCB7IDYsIDE4MiwgMjU2IH0sIHsgNywgMTgzLCAyNTYgfSwgCisgICB7IDUsIDE4NCwgMjU2IH0sIHsgNiwgMTg1LCAyNTYgfSwgeyA2LCAxODYsIDI1NiB9LCB7IDcsIDE4NywgMjU2IH0sIHsgNiwgMTg4LCAyNTYgfSwgeyA3LCAxODksIDI1NiB9LCB7IDcsIDE5MCwgMjU2IH0sIHsgOCwgMTkxLCAyNTYgfSwgCisgICB7IDMsIDE5MiwgMjU2IH0sIHsgNCwgMTkzLCAyNTYgfSwgeyA0LCAxOTQsIDI1NiB9LCB7IDUsIDE5NSwgMjU2IH0sIHsgNCwgMTk2LCAyNTYgfSwgeyA1LCAxOTcsIDI1NiB9LCB7IDUsIDE5OCwgMjU2IH0sIHsgNiwgMTk5LCAyNTYgfSwgCisgICB7IDQsIDIwMCwgMjU2IH0sIHsgNSwgMjAxLCAyNTYgfSwgeyA1LCAyMDIsIDI1NiB9LCB7IDYsIDIwMywgMjU2IH0sIHsgNSwgMjA0LCAyNTYgfSwgeyA2LCAyMDUsIDI1NiB9LCB7IDYsIDIwNiwgMjU2IH0sIHsgNywgMjA3LCAyNTYgfSwgCisgICB7IDQsIDIwOCwgMjU2IH0sIHsgNSwgMjA5LCAyNTYgfSwgeyA1LCAyMTAsIDI1NiB9LCB7IDYsIDIxMSwgMjU2IH0sIHsgNSwgMjEyLCAyNTYgfSwgeyA2LCAyMTMsIDI1NiB9LCB7IDYsIDIxNCwgMjU2IH0sIHsgNywgMjE1LCAyNTYgfSwgCisgICB7IDUsIDIxNiwgMjU2IH0sIHsgNiwgMjE3LCAyNTYgfSwgeyA2LCAyMTgsIDI1NiB9LCB7IDcsIDIxOSwgMjU2IH0sIHsgNiwgMjIwLCAyNTYgfSwgeyA3LCAyMjEsIDI1NiB9LCB7IDcsIDIyMiwgMjU2IH0sIHsgOCwgMjIzLCAyNTYgfSwgCisgICB7IDQsIDIyNCwgMjU2IH0sIHsgNSwgMjI1LCAyNTYgfSwgeyA1LCAyMjYsIDI1NiB9LCB7IDYsIDIyNywgMjU2IH0sIHsgNSwgMjI4LCAyNTYgfSwgeyA2LCAyMjksIDI1NiB9LCB7IDYsIDIzMCwgMjU2IH0sIHsgNywgMjMxLCAyNTYgfSwgCisgICB7IDUsIDIzMiwgMjU2IH0sIHsgNiwgMjMzLCAyNTYgfSwgeyA2LCAyMzQsIDI1NiB9LCB7IDcsIDIzNSwgMjU2IH0sIHsgNiwgMjM2LCAyNTYgfSwgeyA3LCAyMzcsIDI1NiB9LCB7IDcsIDIzOCwgMjU2IH0sIHsgOCwgMjM5LCAyNTYgfSwgCisgICB7IDUsIDI0MCwgMjU2IH0sIHsgNiwgMjQxLCAyNTYgfSwgeyA2LCAyNDIsIDI1NiB9LCB7IDcsIDI0MywgMjU2IH0sIHsgNiwgMjQ0LCAyNTYgfSwgeyA3LCAyNDUsIDI1NiB9LCB7IDcsIDI0NiwgMjU2IH0sIHsgOCwgMjQ3LCAyNTYgfSwgCisgICB7IDYsIDI0OCwgMjU2IH0sIHsgNywgMjQ5LCAyNTYgfSwgeyA3LCAyNTAsIDI1NiB9LCB7IDgsIDI1MSwgMjU2IH0sIHsgNywgMjUyLCAyNTYgfSwgeyA4LCAyNTMsIDI1NiB9LCB7IDgsIDI1NCwgMjU2IH0sIHsgOSwgMjU1LCAyNTYgfSwgCisjaWYgRlBfTFVUID4gOQorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgNTEyIH0sIHsgMiwgMiwgNTEyIH0sIHsgMywgMywgNTEyIH0sIHsgMiwgNCwgNTEyIH0sIHsgMywgNSwgNTEyIH0sIHsgMywgNiwgNTEyIH0sIHsgNCwgNywgNTEyIH0sIAorICAgeyAyLCA4LCA1MTIgfSwgeyAzLCA5LCA1MTIgfSwgeyAzLCAxMCwgNTEyIH0sIHsgNCwgMTEsIDUxMiB9LCB7IDMsIDEyLCA1MTIgfSwgeyA0LCAxMywgNTEyIH0sIHsgNCwgMTQsIDUxMiB9LCB7IDUsIDE1LCA1MTIgfSwgCisgICB7IDIsIDE2LCA1MTIgfSwgeyAzLCAxNywgNTEyIH0sIHsgMywgMTgsIDUxMiB9LCB7IDQsIDE5LCA1MTIgfSwgeyAzLCAyMCwgNTEyIH0sIHsgNCwgMjEsIDUxMiB9LCB7IDQsIDIyLCA1MTIgfSwgeyA1LCAyMywgNTEyIH0sIAorICAgeyAzLCAyNCwgNTEyIH0sIHsgNCwgMjUsIDUxMiB9LCB7IDQsIDI2LCA1MTIgfSwgeyA1LCAyNywgNTEyIH0sIHsgNCwgMjgsIDUxMiB9LCB7IDUsIDI5LCA1MTIgfSwgeyA1LCAzMCwgNTEyIH0sIHsgNiwgMzEsIDUxMiB9LCAKKyAgIHsgMiwgMzIsIDUxMiB9LCB7IDMsIDMzLCA1MTIgfSwgeyAzLCAzNCwgNTEyIH0sIHsgNCwgMzUsIDUxMiB9LCB7IDMsIDM2LCA1MTIgfSwgeyA0LCAzNywgNTEyIH0sIHsgNCwgMzgsIDUxMiB9LCB7IDUsIDM5LCA1MTIgfSwgCisgICB7IDMsIDQwLCA1MTIgfSwgeyA0LCA0MSwgNTEyIH0sIHsgNCwgNDIsIDUxMiB9LCB7IDUsIDQzLCA1MTIgfSwgeyA0LCA0NCwgNTEyIH0sIHsgNSwgNDUsIDUxMiB9LCB7IDUsIDQ2LCA1MTIgfSwgeyA2LCA0NywgNTEyIH0sIAorICAgeyAzLCA0OCwgNTEyIH0sIHsgNCwgNDksIDUxMiB9LCB7IDQsIDUwLCA1MTIgfSwgeyA1LCA1MSwgNTEyIH0sIHsgNCwgNTIsIDUxMiB9LCB7IDUsIDUzLCA1MTIgfSwgeyA1LCA1NCwgNTEyIH0sIHsgNiwgNTUsIDUxMiB9LCAKKyAgIHsgNCwgNTYsIDUxMiB9LCB7IDUsIDU3LCA1MTIgfSwgeyA1LCA1OCwgNTEyIH0sIHsgNiwgNTksIDUxMiB9LCB7IDUsIDYwLCA1MTIgfSwgeyA2LCA2MSwgNTEyIH0sIHsgNiwgNjIsIDUxMiB9LCB7IDcsIDYzLCA1MTIgfSwgCisgICB7IDIsIDY0LCA1MTIgfSwgeyAzLCA2NSwgNTEyIH0sIHsgMywgNjYsIDUxMiB9LCB7IDQsIDY3LCA1MTIgfSwgeyAzLCA2OCwgNTEyIH0sIHsgNCwgNjksIDUxMiB9LCB7IDQsIDcwLCA1MTIgfSwgeyA1LCA3MSwgNTEyIH0sIAorICAgeyAzLCA3MiwgNTEyIH0sIHsgNCwgNzMsIDUxMiB9LCB7IDQsIDc0LCA1MTIgfSwgeyA1LCA3NSwgNTEyIH0sIHsgNCwgNzYsIDUxMiB9LCB7IDUsIDc3LCA1MTIgfSwgeyA1LCA3OCwgNTEyIH0sIHsgNiwgNzksIDUxMiB9LCAKKyAgIHsgMywgODAsIDUxMiB9LCB7IDQsIDgxLCA1MTIgfSwgeyA0LCA4MiwgNTEyIH0sIHsgNSwgODMsIDUxMiB9LCB7IDQsIDg0LCA1MTIgfSwgeyA1LCA4NSwgNTEyIH0sIHsgNSwgODYsIDUxMiB9LCB7IDYsIDg3LCA1MTIgfSwgCisgICB7IDQsIDg4LCA1MTIgfSwgeyA1LCA4OSwgNTEyIH0sIHsgNSwgOTAsIDUxMiB9LCB7IDYsIDkxLCA1MTIgfSwgeyA1LCA5MiwgNTEyIH0sIHsgNiwgOTMsIDUxMiB9LCB7IDYsIDk0LCA1MTIgfSwgeyA3LCA5NSwgNTEyIH0sIAorICAgeyAzLCA5NiwgNTEyIH0sIHsgNCwgOTcsIDUxMiB9LCB7IDQsIDk4LCA1MTIgfSwgeyA1LCA5OSwgNTEyIH0sIHsgNCwgMTAwLCA1MTIgfSwgeyA1LCAxMDEsIDUxMiB9LCB7IDUsIDEwMiwgNTEyIH0sIHsgNiwgMTAzLCA1MTIgfSwgCisgICB7IDQsIDEwNCwgNTEyIH0sIHsgNSwgMTA1LCA1MTIgfSwgeyA1LCAxMDYsIDUxMiB9LCB7IDYsIDEwNywgNTEyIH0sIHsgNSwgMTA4LCA1MTIgfSwgeyA2LCAxMDksIDUxMiB9LCB7IDYsIDExMCwgNTEyIH0sIHsgNywgMTExLCA1MTIgfSwgCisgICB7IDQsIDExMiwgNTEyIH0sIHsgNSwgMTEzLCA1MTIgfSwgeyA1LCAxMTQsIDUxMiB9LCB7IDYsIDExNSwgNTEyIH0sIHsgNSwgMTE2LCA1MTIgfSwgeyA2LCAxMTcsIDUxMiB9LCB7IDYsIDExOCwgNTEyIH0sIHsgNywgMTE5LCA1MTIgfSwgCisgICB7IDUsIDEyMCwgNTEyIH0sIHsgNiwgMTIxLCA1MTIgfSwgeyA2LCAxMjIsIDUxMiB9LCB7IDcsIDEyMywgNTEyIH0sIHsgNiwgMTI0LCA1MTIgfSwgeyA3LCAxMjUsIDUxMiB9LCB7IDcsIDEyNiwgNTEyIH0sIHsgOCwgMTI3LCA1MTIgfSwgCisgICB7IDIsIDEyOCwgNTEyIH0sIHsgMywgMTI5LCA1MTIgfSwgeyAzLCAxMzAsIDUxMiB9LCB7IDQsIDEzMSwgNTEyIH0sIHsgMywgMTMyLCA1MTIgfSwgeyA0LCAxMzMsIDUxMiB9LCB7IDQsIDEzNCwgNTEyIH0sIHsgNSwgMTM1LCA1MTIgfSwgCisgICB7IDMsIDEzNiwgNTEyIH0sIHsgNCwgMTM3LCA1MTIgfSwgeyA0LCAxMzgsIDUxMiB9LCB7IDUsIDEzOSwgNTEyIH0sIHsgNCwgMTQwLCA1MTIgfSwgeyA1LCAxNDEsIDUxMiB9LCB7IDUsIDE0MiwgNTEyIH0sIHsgNiwgMTQzLCA1MTIgfSwgCisgICB7IDMsIDE0NCwgNTEyIH0sIHsgNCwgMTQ1LCA1MTIgfSwgeyA0LCAxNDYsIDUxMiB9LCB7IDUsIDE0NywgNTEyIH0sIHsgNCwgMTQ4LCA1MTIgfSwgeyA1LCAxNDksIDUxMiB9LCB7IDUsIDE1MCwgNTEyIH0sIHsgNiwgMTUxLCA1MTIgfSwgCisgICB7IDQsIDE1MiwgNTEyIH0sIHsgNSwgMTUzLCA1MTIgfSwgeyA1LCAxNTQsIDUxMiB9LCB7IDYsIDE1NSwgNTEyIH0sIHsgNSwgMTU2LCA1MTIgfSwgeyA2LCAxNTcsIDUxMiB9LCB7IDYsIDE1OCwgNTEyIH0sIHsgNywgMTU5LCA1MTIgfSwgCisgICB7IDMsIDE2MCwgNTEyIH0sIHsgNCwgMTYxLCA1MTIgfSwgeyA0LCAxNjIsIDUxMiB9LCB7IDUsIDE2MywgNTEyIH0sIHsgNCwgMTY0LCA1MTIgfSwgeyA1LCAxNjUsIDUxMiB9LCB7IDUsIDE2NiwgNTEyIH0sIHsgNiwgMTY3LCA1MTIgfSwgCisgICB7IDQsIDE2OCwgNTEyIH0sIHsgNSwgMTY5LCA1MTIgfSwgeyA1LCAxNzAsIDUxMiB9LCB7IDYsIDE3MSwgNTEyIH0sIHsgNSwgMTcyLCA1MTIgfSwgeyA2LCAxNzMsIDUxMiB9LCB7IDYsIDE3NCwgNTEyIH0sIHsgNywgMTc1LCA1MTIgfSwgCisgICB7IDQsIDE3NiwgNTEyIH0sIHsgNSwgMTc3LCA1MTIgfSwgeyA1LCAxNzgsIDUxMiB9LCB7IDYsIDE3OSwgNTEyIH0sIHsgNSwgMTgwLCA1MTIgfSwgeyA2LCAxODEsIDUxMiB9LCB7IDYsIDE4MiwgNTEyIH0sIHsgNywgMTgzLCA1MTIgfSwgCisgICB7IDUsIDE4NCwgNTEyIH0sIHsgNiwgMTg1LCA1MTIgfSwgeyA2LCAxODYsIDUxMiB9LCB7IDcsIDE4NywgNTEyIH0sIHsgNiwgMTg4LCA1MTIgfSwgeyA3LCAxODksIDUxMiB9LCB7IDcsIDE5MCwgNTEyIH0sIHsgOCwgMTkxLCA1MTIgfSwgCisgICB7IDMsIDE5MiwgNTEyIH0sIHsgNCwgMTkzLCA1MTIgfSwgeyA0LCAxOTQsIDUxMiB9LCB7IDUsIDE5NSwgNTEyIH0sIHsgNCwgMTk2LCA1MTIgfSwgeyA1LCAxOTcsIDUxMiB9LCB7IDUsIDE5OCwgNTEyIH0sIHsgNiwgMTk5LCA1MTIgfSwgCisgICB7IDQsIDIwMCwgNTEyIH0sIHsgNSwgMjAxLCA1MTIgfSwgeyA1LCAyMDIsIDUxMiB9LCB7IDYsIDIwMywgNTEyIH0sIHsgNSwgMjA0LCA1MTIgfSwgeyA2LCAyMDUsIDUxMiB9LCB7IDYsIDIwNiwgNTEyIH0sIHsgNywgMjA3LCA1MTIgfSwgCisgICB7IDQsIDIwOCwgNTEyIH0sIHsgNSwgMjA5LCA1MTIgfSwgeyA1LCAyMTAsIDUxMiB9LCB7IDYsIDIxMSwgNTEyIH0sIHsgNSwgMjEyLCA1MTIgfSwgeyA2LCAyMTMsIDUxMiB9LCB7IDYsIDIxNCwgNTEyIH0sIHsgNywgMjE1LCA1MTIgfSwgCisgICB7IDUsIDIxNiwgNTEyIH0sIHsgNiwgMjE3LCA1MTIgfSwgeyA2LCAyMTgsIDUxMiB9LCB7IDcsIDIxOSwgNTEyIH0sIHsgNiwgMjIwLCA1MTIgfSwgeyA3LCAyMjEsIDUxMiB9LCB7IDcsIDIyMiwgNTEyIH0sIHsgOCwgMjIzLCA1MTIgfSwgCisgICB7IDQsIDIyNCwgNTEyIH0sIHsgNSwgMjI1LCA1MTIgfSwgeyA1LCAyMjYsIDUxMiB9LCB7IDYsIDIyNywgNTEyIH0sIHsgNSwgMjI4LCA1MTIgfSwgeyA2LCAyMjksIDUxMiB9LCB7IDYsIDIzMCwgNTEyIH0sIHsgNywgMjMxLCA1MTIgfSwgCisgICB7IDUsIDIzMiwgNTEyIH0sIHsgNiwgMjMzLCA1MTIgfSwgeyA2LCAyMzQsIDUxMiB9LCB7IDcsIDIzNSwgNTEyIH0sIHsgNiwgMjM2LCA1MTIgfSwgeyA3LCAyMzcsIDUxMiB9LCB7IDcsIDIzOCwgNTEyIH0sIHsgOCwgMjM5LCA1MTIgfSwgCisgICB7IDUsIDI0MCwgNTEyIH0sIHsgNiwgMjQxLCA1MTIgfSwgeyA2LCAyNDIsIDUxMiB9LCB7IDcsIDI0MywgNTEyIH0sIHsgNiwgMjQ0LCA1MTIgfSwgeyA3LCAyNDUsIDUxMiB9LCB7IDcsIDI0NiwgNTEyIH0sIHsgOCwgMjQ3LCA1MTIgfSwgCisgICB7IDYsIDI0OCwgNTEyIH0sIHsgNywgMjQ5LCA1MTIgfSwgeyA3LCAyNTAsIDUxMiB9LCB7IDgsIDI1MSwgNTEyIH0sIHsgNywgMjUyLCA1MTIgfSwgeyA4LCAyNTMsIDUxMiB9LCB7IDgsIDI1NCwgNTEyIH0sIHsgOSwgMjU1LCA1MTIgfSwgCisgICB7IDIsIDI1NiwgNTEyIH0sIHsgMywgMjU3LCA1MTIgfSwgeyAzLCAyNTgsIDUxMiB9LCB7IDQsIDI1OSwgNTEyIH0sIHsgMywgMjYwLCA1MTIgfSwgeyA0LCAyNjEsIDUxMiB9LCB7IDQsIDI2MiwgNTEyIH0sIHsgNSwgMjYzLCA1MTIgfSwgCisgICB7IDMsIDI2NCwgNTEyIH0sIHsgNCwgMjY1LCA1MTIgfSwgeyA0LCAyNjYsIDUxMiB9LCB7IDUsIDI2NywgNTEyIH0sIHsgNCwgMjY4LCA1MTIgfSwgeyA1LCAyNjksIDUxMiB9LCB7IDUsIDI3MCwgNTEyIH0sIHsgNiwgMjcxLCA1MTIgfSwgCisgICB7IDMsIDI3MiwgNTEyIH0sIHsgNCwgMjczLCA1MTIgfSwgeyA0LCAyNzQsIDUxMiB9LCB7IDUsIDI3NSwgNTEyIH0sIHsgNCwgMjc2LCA1MTIgfSwgeyA1LCAyNzcsIDUxMiB9LCB7IDUsIDI3OCwgNTEyIH0sIHsgNiwgMjc5LCA1MTIgfSwgCisgICB7IDQsIDI4MCwgNTEyIH0sIHsgNSwgMjgxLCA1MTIgfSwgeyA1LCAyODIsIDUxMiB9LCB7IDYsIDI4MywgNTEyIH0sIHsgNSwgMjg0LCA1MTIgfSwgeyA2LCAyODUsIDUxMiB9LCB7IDYsIDI4NiwgNTEyIH0sIHsgNywgMjg3LCA1MTIgfSwgCisgICB7IDMsIDI4OCwgNTEyIH0sIHsgNCwgMjg5LCA1MTIgfSwgeyA0LCAyOTAsIDUxMiB9LCB7IDUsIDI5MSwgNTEyIH0sIHsgNCwgMjkyLCA1MTIgfSwgeyA1LCAyOTMsIDUxMiB9LCB7IDUsIDI5NCwgNTEyIH0sIHsgNiwgMjk1LCA1MTIgfSwgCisgICB7IDQsIDI5NiwgNTEyIH0sIHsgNSwgMjk3LCA1MTIgfSwgeyA1LCAyOTgsIDUxMiB9LCB7IDYsIDI5OSwgNTEyIH0sIHsgNSwgMzAwLCA1MTIgfSwgeyA2LCAzMDEsIDUxMiB9LCB7IDYsIDMwMiwgNTEyIH0sIHsgNywgMzAzLCA1MTIgfSwgCisgICB7IDQsIDMwNCwgNTEyIH0sIHsgNSwgMzA1LCA1MTIgfSwgeyA1LCAzMDYsIDUxMiB9LCB7IDYsIDMwNywgNTEyIH0sIHsgNSwgMzA4LCA1MTIgfSwgeyA2LCAzMDksIDUxMiB9LCB7IDYsIDMxMCwgNTEyIH0sIHsgNywgMzExLCA1MTIgfSwgCisgICB7IDUsIDMxMiwgNTEyIH0sIHsgNiwgMzEzLCA1MTIgfSwgeyA2LCAzMTQsIDUxMiB9LCB7IDcsIDMxNSwgNTEyIH0sIHsgNiwgMzE2LCA1MTIgfSwgeyA3LCAzMTcsIDUxMiB9LCB7IDcsIDMxOCwgNTEyIH0sIHsgOCwgMzE5LCA1MTIgfSwgCisgICB7IDMsIDMyMCwgNTEyIH0sIHsgNCwgMzIxLCA1MTIgfSwgeyA0LCAzMjIsIDUxMiB9LCB7IDUsIDMyMywgNTEyIH0sIHsgNCwgMzI0LCA1MTIgfSwgeyA1LCAzMjUsIDUxMiB9LCB7IDUsIDMyNiwgNTEyIH0sIHsgNiwgMzI3LCA1MTIgfSwgCisgICB7IDQsIDMyOCwgNTEyIH0sIHsgNSwgMzI5LCA1MTIgfSwgeyA1LCAzMzAsIDUxMiB9LCB7IDYsIDMzMSwgNTEyIH0sIHsgNSwgMzMyLCA1MTIgfSwgeyA2LCAzMzMsIDUxMiB9LCB7IDYsIDMzNCwgNTEyIH0sIHsgNywgMzM1LCA1MTIgfSwgCisgICB7IDQsIDMzNiwgNTEyIH0sIHsgNSwgMzM3LCA1MTIgfSwgeyA1LCAzMzgsIDUxMiB9LCB7IDYsIDMzOSwgNTEyIH0sIHsgNSwgMzQwLCA1MTIgfSwgeyA2LCAzNDEsIDUxMiB9LCB7IDYsIDM0MiwgNTEyIH0sIHsgNywgMzQzLCA1MTIgfSwgCisgICB7IDUsIDM0NCwgNTEyIH0sIHsgNiwgMzQ1LCA1MTIgfSwgeyA2LCAzNDYsIDUxMiB9LCB7IDcsIDM0NywgNTEyIH0sIHsgNiwgMzQ4LCA1MTIgfSwgeyA3LCAzNDksIDUxMiB9LCB7IDcsIDM1MCwgNTEyIH0sIHsgOCwgMzUxLCA1MTIgfSwgCisgICB7IDQsIDM1MiwgNTEyIH0sIHsgNSwgMzUzLCA1MTIgfSwgeyA1LCAzNTQsIDUxMiB9LCB7IDYsIDM1NSwgNTEyIH0sIHsgNSwgMzU2LCA1MTIgfSwgeyA2LCAzNTcsIDUxMiB9LCB7IDYsIDM1OCwgNTEyIH0sIHsgNywgMzU5LCA1MTIgfSwgCisgICB7IDUsIDM2MCwgNTEyIH0sIHsgNiwgMzYxLCA1MTIgfSwgeyA2LCAzNjIsIDUxMiB9LCB7IDcsIDM2MywgNTEyIH0sIHsgNiwgMzY0LCA1MTIgfSwgeyA3LCAzNjUsIDUxMiB9LCB7IDcsIDM2NiwgNTEyIH0sIHsgOCwgMzY3LCA1MTIgfSwgCisgICB7IDUsIDM2OCwgNTEyIH0sIHsgNiwgMzY5LCA1MTIgfSwgeyA2LCAzNzAsIDUxMiB9LCB7IDcsIDM3MSwgNTEyIH0sIHsgNiwgMzcyLCA1MTIgfSwgeyA3LCAzNzMsIDUxMiB9LCB7IDcsIDM3NCwgNTEyIH0sIHsgOCwgMzc1LCA1MTIgfSwgCisgICB7IDYsIDM3NiwgNTEyIH0sIHsgNywgMzc3LCA1MTIgfSwgeyA3LCAzNzgsIDUxMiB9LCB7IDgsIDM3OSwgNTEyIH0sIHsgNywgMzgwLCA1MTIgfSwgeyA4LCAzODEsIDUxMiB9LCB7IDgsIDM4MiwgNTEyIH0sIHsgOSwgMzgzLCA1MTIgfSwgCisgICB7IDMsIDM4NCwgNTEyIH0sIHsgNCwgMzg1LCA1MTIgfSwgeyA0LCAzODYsIDUxMiB9LCB7IDUsIDM4NywgNTEyIH0sIHsgNCwgMzg4LCA1MTIgfSwgeyA1LCAzODksIDUxMiB9LCB7IDUsIDM5MCwgNTEyIH0sIHsgNiwgMzkxLCA1MTIgfSwgCisgICB7IDQsIDM5MiwgNTEyIH0sIHsgNSwgMzkzLCA1MTIgfSwgeyA1LCAzOTQsIDUxMiB9LCB7IDYsIDM5NSwgNTEyIH0sIHsgNSwgMzk2LCA1MTIgfSwgeyA2LCAzOTcsIDUxMiB9LCB7IDYsIDM5OCwgNTEyIH0sIHsgNywgMzk5LCA1MTIgfSwgCisgICB7IDQsIDQwMCwgNTEyIH0sIHsgNSwgNDAxLCA1MTIgfSwgeyA1LCA0MDIsIDUxMiB9LCB7IDYsIDQwMywgNTEyIH0sIHsgNSwgNDA0LCA1MTIgfSwgeyA2LCA0MDUsIDUxMiB9LCB7IDYsIDQwNiwgNTEyIH0sIHsgNywgNDA3LCA1MTIgfSwgCisgICB7IDUsIDQwOCwgNTEyIH0sIHsgNiwgNDA5LCA1MTIgfSwgeyA2LCA0MTAsIDUxMiB9LCB7IDcsIDQxMSwgNTEyIH0sIHsgNiwgNDEyLCA1MTIgfSwgeyA3LCA0MTMsIDUxMiB9LCB7IDcsIDQxNCwgNTEyIH0sIHsgOCwgNDE1LCA1MTIgfSwgCisgICB7IDQsIDQxNiwgNTEyIH0sIHsgNSwgNDE3LCA1MTIgfSwgeyA1LCA0MTgsIDUxMiB9LCB7IDYsIDQxOSwgNTEyIH0sIHsgNSwgNDIwLCA1MTIgfSwgeyA2LCA0MjEsIDUxMiB9LCB7IDYsIDQyMiwgNTEyIH0sIHsgNywgNDIzLCA1MTIgfSwgCisgICB7IDUsIDQyNCwgNTEyIH0sIHsgNiwgNDI1LCA1MTIgfSwgeyA2LCA0MjYsIDUxMiB9LCB7IDcsIDQyNywgNTEyIH0sIHsgNiwgNDI4LCA1MTIgfSwgeyA3LCA0MjksIDUxMiB9LCB7IDcsIDQzMCwgNTEyIH0sIHsgOCwgNDMxLCA1MTIgfSwgCisgICB7IDUsIDQzMiwgNTEyIH0sIHsgNiwgNDMzLCA1MTIgfSwgeyA2LCA0MzQsIDUxMiB9LCB7IDcsIDQzNSwgNTEyIH0sIHsgNiwgNDM2LCA1MTIgfSwgeyA3LCA0MzcsIDUxMiB9LCB7IDcsIDQzOCwgNTEyIH0sIHsgOCwgNDM5LCA1MTIgfSwgCisgICB7IDYsIDQ0MCwgNTEyIH0sIHsgNywgNDQxLCA1MTIgfSwgeyA3LCA0NDIsIDUxMiB9LCB7IDgsIDQ0MywgNTEyIH0sIHsgNywgNDQ0LCA1MTIgfSwgeyA4LCA0NDUsIDUxMiB9LCB7IDgsIDQ0NiwgNTEyIH0sIHsgOSwgNDQ3LCA1MTIgfSwgCisgICB7IDQsIDQ0OCwgNTEyIH0sIHsgNSwgNDQ5LCA1MTIgfSwgeyA1LCA0NTAsIDUxMiB9LCB7IDYsIDQ1MSwgNTEyIH0sIHsgNSwgNDUyLCA1MTIgfSwgeyA2LCA0NTMsIDUxMiB9LCB7IDYsIDQ1NCwgNTEyIH0sIHsgNywgNDU1LCA1MTIgfSwgCisgICB7IDUsIDQ1NiwgNTEyIH0sIHsgNiwgNDU3LCA1MTIgfSwgeyA2LCA0NTgsIDUxMiB9LCB7IDcsIDQ1OSwgNTEyIH0sIHsgNiwgNDYwLCA1MTIgfSwgeyA3LCA0NjEsIDUxMiB9LCB7IDcsIDQ2MiwgNTEyIH0sIHsgOCwgNDYzLCA1MTIgfSwgCisgICB7IDUsIDQ2NCwgNTEyIH0sIHsgNiwgNDY1LCA1MTIgfSwgeyA2LCA0NjYsIDUxMiB9LCB7IDcsIDQ2NywgNTEyIH0sIHsgNiwgNDY4LCA1MTIgfSwgeyA3LCA0NjksIDUxMiB9LCB7IDcsIDQ3MCwgNTEyIH0sIHsgOCwgNDcxLCA1MTIgfSwgCisgICB7IDYsIDQ3MiwgNTEyIH0sIHsgNywgNDczLCA1MTIgfSwgeyA3LCA0NzQsIDUxMiB9LCB7IDgsIDQ3NSwgNTEyIH0sIHsgNywgNDc2LCA1MTIgfSwgeyA4LCA0NzcsIDUxMiB9LCB7IDgsIDQ3OCwgNTEyIH0sIHsgOSwgNDc5LCA1MTIgfSwgCisgICB7IDUsIDQ4MCwgNTEyIH0sIHsgNiwgNDgxLCA1MTIgfSwgeyA2LCA0ODIsIDUxMiB9LCB7IDcsIDQ4MywgNTEyIH0sIHsgNiwgNDg0LCA1MTIgfSwgeyA3LCA0ODUsIDUxMiB9LCB7IDcsIDQ4NiwgNTEyIH0sIHsgOCwgNDg3LCA1MTIgfSwgCisgICB7IDYsIDQ4OCwgNTEyIH0sIHsgNywgNDg5LCA1MTIgfSwgeyA3LCA0OTAsIDUxMiB9LCB7IDgsIDQ5MSwgNTEyIH0sIHsgNywgNDkyLCA1MTIgfSwgeyA4LCA0OTMsIDUxMiB9LCB7IDgsIDQ5NCwgNTEyIH0sIHsgOSwgNDk1LCA1MTIgfSwgCisgICB7IDYsIDQ5NiwgNTEyIH0sIHsgNywgNDk3LCA1MTIgfSwgeyA3LCA0OTgsIDUxMiB9LCB7IDgsIDQ5OSwgNTEyIH0sIHsgNywgNTAwLCA1MTIgfSwgeyA4LCA1MDEsIDUxMiB9LCB7IDgsIDUwMiwgNTEyIH0sIHsgOSwgNTAzLCA1MTIgfSwgCisgICB7IDcsIDUwNCwgNTEyIH0sIHsgOCwgNTA1LCA1MTIgfSwgeyA4LCA1MDYsIDUxMiB9LCB7IDksIDUwNywgNTEyIH0sIHsgOCwgNTA4LCA1MTIgfSwgeyA5LCA1MDksIDUxMiB9LCB7IDksIDUxMCwgNTEyIH0sIHsgMTAsIDUxMSwgNTEyIH0sIAorI2lmIEZQX0xVVCA+IDEwCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCAxMDI0IH0sIHsgMiwgMiwgMTAyNCB9LCB7IDMsIDMsIDEwMjQgfSwgeyAyLCA0LCAxMDI0IH0sIHsgMywgNSwgMTAyNCB9LCB7IDMsIDYsIDEwMjQgfSwgeyA0LCA3LCAxMDI0IH0sIAorICAgeyAyLCA4LCAxMDI0IH0sIHsgMywgOSwgMTAyNCB9LCB7IDMsIDEwLCAxMDI0IH0sIHsgNCwgMTEsIDEwMjQgfSwgeyAzLCAxMiwgMTAyNCB9LCB7IDQsIDEzLCAxMDI0IH0sIHsgNCwgMTQsIDEwMjQgfSwgeyA1LCAxNSwgMTAyNCB9LCAKKyAgIHsgMiwgMTYsIDEwMjQgfSwgeyAzLCAxNywgMTAyNCB9LCB7IDMsIDE4LCAxMDI0IH0sIHsgNCwgMTksIDEwMjQgfSwgeyAzLCAyMCwgMTAyNCB9LCB7IDQsIDIxLCAxMDI0IH0sIHsgNCwgMjIsIDEwMjQgfSwgeyA1LCAyMywgMTAyNCB9LCAKKyAgIHsgMywgMjQsIDEwMjQgfSwgeyA0LCAyNSwgMTAyNCB9LCB7IDQsIDI2LCAxMDI0IH0sIHsgNSwgMjcsIDEwMjQgfSwgeyA0LCAyOCwgMTAyNCB9LCB7IDUsIDI5LCAxMDI0IH0sIHsgNSwgMzAsIDEwMjQgfSwgeyA2LCAzMSwgMTAyNCB9LCAKKyAgIHsgMiwgMzIsIDEwMjQgfSwgeyAzLCAzMywgMTAyNCB9LCB7IDMsIDM0LCAxMDI0IH0sIHsgNCwgMzUsIDEwMjQgfSwgeyAzLCAzNiwgMTAyNCB9LCB7IDQsIDM3LCAxMDI0IH0sIHsgNCwgMzgsIDEwMjQgfSwgeyA1LCAzOSwgMTAyNCB9LCAKKyAgIHsgMywgNDAsIDEwMjQgfSwgeyA0LCA0MSwgMTAyNCB9LCB7IDQsIDQyLCAxMDI0IH0sIHsgNSwgNDMsIDEwMjQgfSwgeyA0LCA0NCwgMTAyNCB9LCB7IDUsIDQ1LCAxMDI0IH0sIHsgNSwgNDYsIDEwMjQgfSwgeyA2LCA0NywgMTAyNCB9LCAKKyAgIHsgMywgNDgsIDEwMjQgfSwgeyA0LCA0OSwgMTAyNCB9LCB7IDQsIDUwLCAxMDI0IH0sIHsgNSwgNTEsIDEwMjQgfSwgeyA0LCA1MiwgMTAyNCB9LCB7IDUsIDUzLCAxMDI0IH0sIHsgNSwgNTQsIDEwMjQgfSwgeyA2LCA1NSwgMTAyNCB9LCAKKyAgIHsgNCwgNTYsIDEwMjQgfSwgeyA1LCA1NywgMTAyNCB9LCB7IDUsIDU4LCAxMDI0IH0sIHsgNiwgNTksIDEwMjQgfSwgeyA1LCA2MCwgMTAyNCB9LCB7IDYsIDYxLCAxMDI0IH0sIHsgNiwgNjIsIDEwMjQgfSwgeyA3LCA2MywgMTAyNCB9LCAKKyAgIHsgMiwgNjQsIDEwMjQgfSwgeyAzLCA2NSwgMTAyNCB9LCB7IDMsIDY2LCAxMDI0IH0sIHsgNCwgNjcsIDEwMjQgfSwgeyAzLCA2OCwgMTAyNCB9LCB7IDQsIDY5LCAxMDI0IH0sIHsgNCwgNzAsIDEwMjQgfSwgeyA1LCA3MSwgMTAyNCB9LCAKKyAgIHsgMywgNzIsIDEwMjQgfSwgeyA0LCA3MywgMTAyNCB9LCB7IDQsIDc0LCAxMDI0IH0sIHsgNSwgNzUsIDEwMjQgfSwgeyA0LCA3NiwgMTAyNCB9LCB7IDUsIDc3LCAxMDI0IH0sIHsgNSwgNzgsIDEwMjQgfSwgeyA2LCA3OSwgMTAyNCB9LCAKKyAgIHsgMywgODAsIDEwMjQgfSwgeyA0LCA4MSwgMTAyNCB9LCB7IDQsIDgyLCAxMDI0IH0sIHsgNSwgODMsIDEwMjQgfSwgeyA0LCA4NCwgMTAyNCB9LCB7IDUsIDg1LCAxMDI0IH0sIHsgNSwgODYsIDEwMjQgfSwgeyA2LCA4NywgMTAyNCB9LCAKKyAgIHsgNCwgODgsIDEwMjQgfSwgeyA1LCA4OSwgMTAyNCB9LCB7IDUsIDkwLCAxMDI0IH0sIHsgNiwgOTEsIDEwMjQgfSwgeyA1LCA5MiwgMTAyNCB9LCB7IDYsIDkzLCAxMDI0IH0sIHsgNiwgOTQsIDEwMjQgfSwgeyA3LCA5NSwgMTAyNCB9LCAKKyAgIHsgMywgOTYsIDEwMjQgfSwgeyA0LCA5NywgMTAyNCB9LCB7IDQsIDk4LCAxMDI0IH0sIHsgNSwgOTksIDEwMjQgfSwgeyA0LCAxMDAsIDEwMjQgfSwgeyA1LCAxMDEsIDEwMjQgfSwgeyA1LCAxMDIsIDEwMjQgfSwgeyA2LCAxMDMsIDEwMjQgfSwgCisgICB7IDQsIDEwNCwgMTAyNCB9LCB7IDUsIDEwNSwgMTAyNCB9LCB7IDUsIDEwNiwgMTAyNCB9LCB7IDYsIDEwNywgMTAyNCB9LCB7IDUsIDEwOCwgMTAyNCB9LCB7IDYsIDEwOSwgMTAyNCB9LCB7IDYsIDExMCwgMTAyNCB9LCB7IDcsIDExMSwgMTAyNCB9LCAKKyAgIHsgNCwgMTEyLCAxMDI0IH0sIHsgNSwgMTEzLCAxMDI0IH0sIHsgNSwgMTE0LCAxMDI0IH0sIHsgNiwgMTE1LCAxMDI0IH0sIHsgNSwgMTE2LCAxMDI0IH0sIHsgNiwgMTE3LCAxMDI0IH0sIHsgNiwgMTE4LCAxMDI0IH0sIHsgNywgMTE5LCAxMDI0IH0sIAorICAgeyA1LCAxMjAsIDEwMjQgfSwgeyA2LCAxMjEsIDEwMjQgfSwgeyA2LCAxMjIsIDEwMjQgfSwgeyA3LCAxMjMsIDEwMjQgfSwgeyA2LCAxMjQsIDEwMjQgfSwgeyA3LCAxMjUsIDEwMjQgfSwgeyA3LCAxMjYsIDEwMjQgfSwgeyA4LCAxMjcsIDEwMjQgfSwgCisgICB7IDIsIDEyOCwgMTAyNCB9LCB7IDMsIDEyOSwgMTAyNCB9LCB7IDMsIDEzMCwgMTAyNCB9LCB7IDQsIDEzMSwgMTAyNCB9LCB7IDMsIDEzMiwgMTAyNCB9LCB7IDQsIDEzMywgMTAyNCB9LCB7IDQsIDEzNCwgMTAyNCB9LCB7IDUsIDEzNSwgMTAyNCB9LCAKKyAgIHsgMywgMTM2LCAxMDI0IH0sIHsgNCwgMTM3LCAxMDI0IH0sIHsgNCwgMTM4LCAxMDI0IH0sIHsgNSwgMTM5LCAxMDI0IH0sIHsgNCwgMTQwLCAxMDI0IH0sIHsgNSwgMTQxLCAxMDI0IH0sIHsgNSwgMTQyLCAxMDI0IH0sIHsgNiwgMTQzLCAxMDI0IH0sIAorICAgeyAzLCAxNDQsIDEwMjQgfSwgeyA0LCAxNDUsIDEwMjQgfSwgeyA0LCAxNDYsIDEwMjQgfSwgeyA1LCAxNDcsIDEwMjQgfSwgeyA0LCAxNDgsIDEwMjQgfSwgeyA1LCAxNDksIDEwMjQgfSwgeyA1LCAxNTAsIDEwMjQgfSwgeyA2LCAxNTEsIDEwMjQgfSwgCisgICB7IDQsIDE1MiwgMTAyNCB9LCB7IDUsIDE1MywgMTAyNCB9LCB7IDUsIDE1NCwgMTAyNCB9LCB7IDYsIDE1NSwgMTAyNCB9LCB7IDUsIDE1NiwgMTAyNCB9LCB7IDYsIDE1NywgMTAyNCB9LCB7IDYsIDE1OCwgMTAyNCB9LCB7IDcsIDE1OSwgMTAyNCB9LCAKKyAgIHsgMywgMTYwLCAxMDI0IH0sIHsgNCwgMTYxLCAxMDI0IH0sIHsgNCwgMTYyLCAxMDI0IH0sIHsgNSwgMTYzLCAxMDI0IH0sIHsgNCwgMTY0LCAxMDI0IH0sIHsgNSwgMTY1LCAxMDI0IH0sIHsgNSwgMTY2LCAxMDI0IH0sIHsgNiwgMTY3LCAxMDI0IH0sIAorICAgeyA0LCAxNjgsIDEwMjQgfSwgeyA1LCAxNjksIDEwMjQgfSwgeyA1LCAxNzAsIDEwMjQgfSwgeyA2LCAxNzEsIDEwMjQgfSwgeyA1LCAxNzIsIDEwMjQgfSwgeyA2LCAxNzMsIDEwMjQgfSwgeyA2LCAxNzQsIDEwMjQgfSwgeyA3LCAxNzUsIDEwMjQgfSwgCisgICB7IDQsIDE3NiwgMTAyNCB9LCB7IDUsIDE3NywgMTAyNCB9LCB7IDUsIDE3OCwgMTAyNCB9LCB7IDYsIDE3OSwgMTAyNCB9LCB7IDUsIDE4MCwgMTAyNCB9LCB7IDYsIDE4MSwgMTAyNCB9LCB7IDYsIDE4MiwgMTAyNCB9LCB7IDcsIDE4MywgMTAyNCB9LCAKKyAgIHsgNSwgMTg0LCAxMDI0IH0sIHsgNiwgMTg1LCAxMDI0IH0sIHsgNiwgMTg2LCAxMDI0IH0sIHsgNywgMTg3LCAxMDI0IH0sIHsgNiwgMTg4LCAxMDI0IH0sIHsgNywgMTg5LCAxMDI0IH0sIHsgNywgMTkwLCAxMDI0IH0sIHsgOCwgMTkxLCAxMDI0IH0sIAorICAgeyAzLCAxOTIsIDEwMjQgfSwgeyA0LCAxOTMsIDEwMjQgfSwgeyA0LCAxOTQsIDEwMjQgfSwgeyA1LCAxOTUsIDEwMjQgfSwgeyA0LCAxOTYsIDEwMjQgfSwgeyA1LCAxOTcsIDEwMjQgfSwgeyA1LCAxOTgsIDEwMjQgfSwgeyA2LCAxOTksIDEwMjQgfSwgCisgICB7IDQsIDIwMCwgMTAyNCB9LCB7IDUsIDIwMSwgMTAyNCB9LCB7IDUsIDIwMiwgMTAyNCB9LCB7IDYsIDIwMywgMTAyNCB9LCB7IDUsIDIwNCwgMTAyNCB9LCB7IDYsIDIwNSwgMTAyNCB9LCB7IDYsIDIwNiwgMTAyNCB9LCB7IDcsIDIwNywgMTAyNCB9LCAKKyAgIHsgNCwgMjA4LCAxMDI0IH0sIHsgNSwgMjA5LCAxMDI0IH0sIHsgNSwgMjEwLCAxMDI0IH0sIHsgNiwgMjExLCAxMDI0IH0sIHsgNSwgMjEyLCAxMDI0IH0sIHsgNiwgMjEzLCAxMDI0IH0sIHsgNiwgMjE0LCAxMDI0IH0sIHsgNywgMjE1LCAxMDI0IH0sIAorICAgeyA1LCAyMTYsIDEwMjQgfSwgeyA2LCAyMTcsIDEwMjQgfSwgeyA2LCAyMTgsIDEwMjQgfSwgeyA3LCAyMTksIDEwMjQgfSwgeyA2LCAyMjAsIDEwMjQgfSwgeyA3LCAyMjEsIDEwMjQgfSwgeyA3LCAyMjIsIDEwMjQgfSwgeyA4LCAyMjMsIDEwMjQgfSwgCisgICB7IDQsIDIyNCwgMTAyNCB9LCB7IDUsIDIyNSwgMTAyNCB9LCB7IDUsIDIyNiwgMTAyNCB9LCB7IDYsIDIyNywgMTAyNCB9LCB7IDUsIDIyOCwgMTAyNCB9LCB7IDYsIDIyOSwgMTAyNCB9LCB7IDYsIDIzMCwgMTAyNCB9LCB7IDcsIDIzMSwgMTAyNCB9LCAKKyAgIHsgNSwgMjMyLCAxMDI0IH0sIHsgNiwgMjMzLCAxMDI0IH0sIHsgNiwgMjM0LCAxMDI0IH0sIHsgNywgMjM1LCAxMDI0IH0sIHsgNiwgMjM2LCAxMDI0IH0sIHsgNywgMjM3LCAxMDI0IH0sIHsgNywgMjM4LCAxMDI0IH0sIHsgOCwgMjM5LCAxMDI0IH0sIAorICAgeyA1LCAyNDAsIDEwMjQgfSwgeyA2LCAyNDEsIDEwMjQgfSwgeyA2LCAyNDIsIDEwMjQgfSwgeyA3LCAyNDMsIDEwMjQgfSwgeyA2LCAyNDQsIDEwMjQgfSwgeyA3LCAyNDUsIDEwMjQgfSwgeyA3LCAyNDYsIDEwMjQgfSwgeyA4LCAyNDcsIDEwMjQgfSwgCisgICB7IDYsIDI0OCwgMTAyNCB9LCB7IDcsIDI0OSwgMTAyNCB9LCB7IDcsIDI1MCwgMTAyNCB9LCB7IDgsIDI1MSwgMTAyNCB9LCB7IDcsIDI1MiwgMTAyNCB9LCB7IDgsIDI1MywgMTAyNCB9LCB7IDgsIDI1NCwgMTAyNCB9LCB7IDksIDI1NSwgMTAyNCB9LCAKKyAgIHsgMiwgMjU2LCAxMDI0IH0sIHsgMywgMjU3LCAxMDI0IH0sIHsgMywgMjU4LCAxMDI0IH0sIHsgNCwgMjU5LCAxMDI0IH0sIHsgMywgMjYwLCAxMDI0IH0sIHsgNCwgMjYxLCAxMDI0IH0sIHsgNCwgMjYyLCAxMDI0IH0sIHsgNSwgMjYzLCAxMDI0IH0sIAorICAgeyAzLCAyNjQsIDEwMjQgfSwgeyA0LCAyNjUsIDEwMjQgfSwgeyA0LCAyNjYsIDEwMjQgfSwgeyA1LCAyNjcsIDEwMjQgfSwgeyA0LCAyNjgsIDEwMjQgfSwgeyA1LCAyNjksIDEwMjQgfSwgeyA1LCAyNzAsIDEwMjQgfSwgeyA2LCAyNzEsIDEwMjQgfSwgCisgICB7IDMsIDI3MiwgMTAyNCB9LCB7IDQsIDI3MywgMTAyNCB9LCB7IDQsIDI3NCwgMTAyNCB9LCB7IDUsIDI3NSwgMTAyNCB9LCB7IDQsIDI3NiwgMTAyNCB9LCB7IDUsIDI3NywgMTAyNCB9LCB7IDUsIDI3OCwgMTAyNCB9LCB7IDYsIDI3OSwgMTAyNCB9LCAKKyAgIHsgNCwgMjgwLCAxMDI0IH0sIHsgNSwgMjgxLCAxMDI0IH0sIHsgNSwgMjgyLCAxMDI0IH0sIHsgNiwgMjgzLCAxMDI0IH0sIHsgNSwgMjg0LCAxMDI0IH0sIHsgNiwgMjg1LCAxMDI0IH0sIHsgNiwgMjg2LCAxMDI0IH0sIHsgNywgMjg3LCAxMDI0IH0sIAorICAgeyAzLCAyODgsIDEwMjQgfSwgeyA0LCAyODksIDEwMjQgfSwgeyA0LCAyOTAsIDEwMjQgfSwgeyA1LCAyOTEsIDEwMjQgfSwgeyA0LCAyOTIsIDEwMjQgfSwgeyA1LCAyOTMsIDEwMjQgfSwgeyA1LCAyOTQsIDEwMjQgfSwgeyA2LCAyOTUsIDEwMjQgfSwgCisgICB7IDQsIDI5NiwgMTAyNCB9LCB7IDUsIDI5NywgMTAyNCB9LCB7IDUsIDI5OCwgMTAyNCB9LCB7IDYsIDI5OSwgMTAyNCB9LCB7IDUsIDMwMCwgMTAyNCB9LCB7IDYsIDMwMSwgMTAyNCB9LCB7IDYsIDMwMiwgMTAyNCB9LCB7IDcsIDMwMywgMTAyNCB9LCAKKyAgIHsgNCwgMzA0LCAxMDI0IH0sIHsgNSwgMzA1LCAxMDI0IH0sIHsgNSwgMzA2LCAxMDI0IH0sIHsgNiwgMzA3LCAxMDI0IH0sIHsgNSwgMzA4LCAxMDI0IH0sIHsgNiwgMzA5LCAxMDI0IH0sIHsgNiwgMzEwLCAxMDI0IH0sIHsgNywgMzExLCAxMDI0IH0sIAorICAgeyA1LCAzMTIsIDEwMjQgfSwgeyA2LCAzMTMsIDEwMjQgfSwgeyA2LCAzMTQsIDEwMjQgfSwgeyA3LCAzMTUsIDEwMjQgfSwgeyA2LCAzMTYsIDEwMjQgfSwgeyA3LCAzMTcsIDEwMjQgfSwgeyA3LCAzMTgsIDEwMjQgfSwgeyA4LCAzMTksIDEwMjQgfSwgCisgICB7IDMsIDMyMCwgMTAyNCB9LCB7IDQsIDMyMSwgMTAyNCB9LCB7IDQsIDMyMiwgMTAyNCB9LCB7IDUsIDMyMywgMTAyNCB9LCB7IDQsIDMyNCwgMTAyNCB9LCB7IDUsIDMyNSwgMTAyNCB9LCB7IDUsIDMyNiwgMTAyNCB9LCB7IDYsIDMyNywgMTAyNCB9LCAKKyAgIHsgNCwgMzI4LCAxMDI0IH0sIHsgNSwgMzI5LCAxMDI0IH0sIHsgNSwgMzMwLCAxMDI0IH0sIHsgNiwgMzMxLCAxMDI0IH0sIHsgNSwgMzMyLCAxMDI0IH0sIHsgNiwgMzMzLCAxMDI0IH0sIHsgNiwgMzM0LCAxMDI0IH0sIHsgNywgMzM1LCAxMDI0IH0sIAorICAgeyA0LCAzMzYsIDEwMjQgfSwgeyA1LCAzMzcsIDEwMjQgfSwgeyA1LCAzMzgsIDEwMjQgfSwgeyA2LCAzMzksIDEwMjQgfSwgeyA1LCAzNDAsIDEwMjQgfSwgeyA2LCAzNDEsIDEwMjQgfSwgeyA2LCAzNDIsIDEwMjQgfSwgeyA3LCAzNDMsIDEwMjQgfSwgCisgICB7IDUsIDM0NCwgMTAyNCB9LCB7IDYsIDM0NSwgMTAyNCB9LCB7IDYsIDM0NiwgMTAyNCB9LCB7IDcsIDM0NywgMTAyNCB9LCB7IDYsIDM0OCwgMTAyNCB9LCB7IDcsIDM0OSwgMTAyNCB9LCB7IDcsIDM1MCwgMTAyNCB9LCB7IDgsIDM1MSwgMTAyNCB9LCAKKyAgIHsgNCwgMzUyLCAxMDI0IH0sIHsgNSwgMzUzLCAxMDI0IH0sIHsgNSwgMzU0LCAxMDI0IH0sIHsgNiwgMzU1LCAxMDI0IH0sIHsgNSwgMzU2LCAxMDI0IH0sIHsgNiwgMzU3LCAxMDI0IH0sIHsgNiwgMzU4LCAxMDI0IH0sIHsgNywgMzU5LCAxMDI0IH0sIAorICAgeyA1LCAzNjAsIDEwMjQgfSwgeyA2LCAzNjEsIDEwMjQgfSwgeyA2LCAzNjIsIDEwMjQgfSwgeyA3LCAzNjMsIDEwMjQgfSwgeyA2LCAzNjQsIDEwMjQgfSwgeyA3LCAzNjUsIDEwMjQgfSwgeyA3LCAzNjYsIDEwMjQgfSwgeyA4LCAzNjcsIDEwMjQgfSwgCisgICB7IDUsIDM2OCwgMTAyNCB9LCB7IDYsIDM2OSwgMTAyNCB9LCB7IDYsIDM3MCwgMTAyNCB9LCB7IDcsIDM3MSwgMTAyNCB9LCB7IDYsIDM3MiwgMTAyNCB9LCB7IDcsIDM3MywgMTAyNCB9LCB7IDcsIDM3NCwgMTAyNCB9LCB7IDgsIDM3NSwgMTAyNCB9LCAKKyAgIHsgNiwgMzc2LCAxMDI0IH0sIHsgNywgMzc3LCAxMDI0IH0sIHsgNywgMzc4LCAxMDI0IH0sIHsgOCwgMzc5LCAxMDI0IH0sIHsgNywgMzgwLCAxMDI0IH0sIHsgOCwgMzgxLCAxMDI0IH0sIHsgOCwgMzgyLCAxMDI0IH0sIHsgOSwgMzgzLCAxMDI0IH0sIAorICAgeyAzLCAzODQsIDEwMjQgfSwgeyA0LCAzODUsIDEwMjQgfSwgeyA0LCAzODYsIDEwMjQgfSwgeyA1LCAzODcsIDEwMjQgfSwgeyA0LCAzODgsIDEwMjQgfSwgeyA1LCAzODksIDEwMjQgfSwgeyA1LCAzOTAsIDEwMjQgfSwgeyA2LCAzOTEsIDEwMjQgfSwgCisgICB7IDQsIDM5MiwgMTAyNCB9LCB7IDUsIDM5MywgMTAyNCB9LCB7IDUsIDM5NCwgMTAyNCB9LCB7IDYsIDM5NSwgMTAyNCB9LCB7IDUsIDM5NiwgMTAyNCB9LCB7IDYsIDM5NywgMTAyNCB9LCB7IDYsIDM5OCwgMTAyNCB9LCB7IDcsIDM5OSwgMTAyNCB9LCAKKyAgIHsgNCwgNDAwLCAxMDI0IH0sIHsgNSwgNDAxLCAxMDI0IH0sIHsgNSwgNDAyLCAxMDI0IH0sIHsgNiwgNDAzLCAxMDI0IH0sIHsgNSwgNDA0LCAxMDI0IH0sIHsgNiwgNDA1LCAxMDI0IH0sIHsgNiwgNDA2LCAxMDI0IH0sIHsgNywgNDA3LCAxMDI0IH0sIAorICAgeyA1LCA0MDgsIDEwMjQgfSwgeyA2LCA0MDksIDEwMjQgfSwgeyA2LCA0MTAsIDEwMjQgfSwgeyA3LCA0MTEsIDEwMjQgfSwgeyA2LCA0MTIsIDEwMjQgfSwgeyA3LCA0MTMsIDEwMjQgfSwgeyA3LCA0MTQsIDEwMjQgfSwgeyA4LCA0MTUsIDEwMjQgfSwgCisgICB7IDQsIDQxNiwgMTAyNCB9LCB7IDUsIDQxNywgMTAyNCB9LCB7IDUsIDQxOCwgMTAyNCB9LCB7IDYsIDQxOSwgMTAyNCB9LCB7IDUsIDQyMCwgMTAyNCB9LCB7IDYsIDQyMSwgMTAyNCB9LCB7IDYsIDQyMiwgMTAyNCB9LCB7IDcsIDQyMywgMTAyNCB9LCAKKyAgIHsgNSwgNDI0LCAxMDI0IH0sIHsgNiwgNDI1LCAxMDI0IH0sIHsgNiwgNDI2LCAxMDI0IH0sIHsgNywgNDI3LCAxMDI0IH0sIHsgNiwgNDI4LCAxMDI0IH0sIHsgNywgNDI5LCAxMDI0IH0sIHsgNywgNDMwLCAxMDI0IH0sIHsgOCwgNDMxLCAxMDI0IH0sIAorICAgeyA1LCA0MzIsIDEwMjQgfSwgeyA2LCA0MzMsIDEwMjQgfSwgeyA2LCA0MzQsIDEwMjQgfSwgeyA3LCA0MzUsIDEwMjQgfSwgeyA2LCA0MzYsIDEwMjQgfSwgeyA3LCA0MzcsIDEwMjQgfSwgeyA3LCA0MzgsIDEwMjQgfSwgeyA4LCA0MzksIDEwMjQgfSwgCisgICB7IDYsIDQ0MCwgMTAyNCB9LCB7IDcsIDQ0MSwgMTAyNCB9LCB7IDcsIDQ0MiwgMTAyNCB9LCB7IDgsIDQ0MywgMTAyNCB9LCB7IDcsIDQ0NCwgMTAyNCB9LCB7IDgsIDQ0NSwgMTAyNCB9LCB7IDgsIDQ0NiwgMTAyNCB9LCB7IDksIDQ0NywgMTAyNCB9LCAKKyAgIHsgNCwgNDQ4LCAxMDI0IH0sIHsgNSwgNDQ5LCAxMDI0IH0sIHsgNSwgNDUwLCAxMDI0IH0sIHsgNiwgNDUxLCAxMDI0IH0sIHsgNSwgNDUyLCAxMDI0IH0sIHsgNiwgNDUzLCAxMDI0IH0sIHsgNiwgNDU0LCAxMDI0IH0sIHsgNywgNDU1LCAxMDI0IH0sIAorICAgeyA1LCA0NTYsIDEwMjQgfSwgeyA2LCA0NTcsIDEwMjQgfSwgeyA2LCA0NTgsIDEwMjQgfSwgeyA3LCA0NTksIDEwMjQgfSwgeyA2LCA0NjAsIDEwMjQgfSwgeyA3LCA0NjEsIDEwMjQgfSwgeyA3LCA0NjIsIDEwMjQgfSwgeyA4LCA0NjMsIDEwMjQgfSwgCisgICB7IDUsIDQ2NCwgMTAyNCB9LCB7IDYsIDQ2NSwgMTAyNCB9LCB7IDYsIDQ2NiwgMTAyNCB9LCB7IDcsIDQ2NywgMTAyNCB9LCB7IDYsIDQ2OCwgMTAyNCB9LCB7IDcsIDQ2OSwgMTAyNCB9LCB7IDcsIDQ3MCwgMTAyNCB9LCB7IDgsIDQ3MSwgMTAyNCB9LCAKKyAgIHsgNiwgNDcyLCAxMDI0IH0sIHsgNywgNDczLCAxMDI0IH0sIHsgNywgNDc0LCAxMDI0IH0sIHsgOCwgNDc1LCAxMDI0IH0sIHsgNywgNDc2LCAxMDI0IH0sIHsgOCwgNDc3LCAxMDI0IH0sIHsgOCwgNDc4LCAxMDI0IH0sIHsgOSwgNDc5LCAxMDI0IH0sIAorICAgeyA1LCA0ODAsIDEwMjQgfSwgeyA2LCA0ODEsIDEwMjQgfSwgeyA2LCA0ODIsIDEwMjQgfSwgeyA3LCA0ODMsIDEwMjQgfSwgeyA2LCA0ODQsIDEwMjQgfSwgeyA3LCA0ODUsIDEwMjQgfSwgeyA3LCA0ODYsIDEwMjQgfSwgeyA4LCA0ODcsIDEwMjQgfSwgCisgICB7IDYsIDQ4OCwgMTAyNCB9LCB7IDcsIDQ4OSwgMTAyNCB9LCB7IDcsIDQ5MCwgMTAyNCB9LCB7IDgsIDQ5MSwgMTAyNCB9LCB7IDcsIDQ5MiwgMTAyNCB9LCB7IDgsIDQ5MywgMTAyNCB9LCB7IDgsIDQ5NCwgMTAyNCB9LCB7IDksIDQ5NSwgMTAyNCB9LCAKKyAgIHsgNiwgNDk2LCAxMDI0IH0sIHsgNywgNDk3LCAxMDI0IH0sIHsgNywgNDk4LCAxMDI0IH0sIHsgOCwgNDk5LCAxMDI0IH0sIHsgNywgNTAwLCAxMDI0IH0sIHsgOCwgNTAxLCAxMDI0IH0sIHsgOCwgNTAyLCAxMDI0IH0sIHsgOSwgNTAzLCAxMDI0IH0sIAorICAgeyA3LCA1MDQsIDEwMjQgfSwgeyA4LCA1MDUsIDEwMjQgfSwgeyA4LCA1MDYsIDEwMjQgfSwgeyA5LCA1MDcsIDEwMjQgfSwgeyA4LCA1MDgsIDEwMjQgfSwgeyA5LCA1MDksIDEwMjQgfSwgeyA5LCA1MTAsIDEwMjQgfSwgeyAxMCwgNTExLCAxMDI0IH0sIAorICAgeyAyLCA1MTIsIDEwMjQgfSwgeyAzLCA1MTMsIDEwMjQgfSwgeyAzLCA1MTQsIDEwMjQgfSwgeyA0LCA1MTUsIDEwMjQgfSwgeyAzLCA1MTYsIDEwMjQgfSwgeyA0LCA1MTcsIDEwMjQgfSwgeyA0LCA1MTgsIDEwMjQgfSwgeyA1LCA1MTksIDEwMjQgfSwgCisgICB7IDMsIDUyMCwgMTAyNCB9LCB7IDQsIDUyMSwgMTAyNCB9LCB7IDQsIDUyMiwgMTAyNCB9LCB7IDUsIDUyMywgMTAyNCB9LCB7IDQsIDUyNCwgMTAyNCB9LCB7IDUsIDUyNSwgMTAyNCB9LCB7IDUsIDUyNiwgMTAyNCB9LCB7IDYsIDUyNywgMTAyNCB9LCAKKyAgIHsgMywgNTI4LCAxMDI0IH0sIHsgNCwgNTI5LCAxMDI0IH0sIHsgNCwgNTMwLCAxMDI0IH0sIHsgNSwgNTMxLCAxMDI0IH0sIHsgNCwgNTMyLCAxMDI0IH0sIHsgNSwgNTMzLCAxMDI0IH0sIHsgNSwgNTM0LCAxMDI0IH0sIHsgNiwgNTM1LCAxMDI0IH0sIAorICAgeyA0LCA1MzYsIDEwMjQgfSwgeyA1LCA1MzcsIDEwMjQgfSwgeyA1LCA1MzgsIDEwMjQgfSwgeyA2LCA1MzksIDEwMjQgfSwgeyA1LCA1NDAsIDEwMjQgfSwgeyA2LCA1NDEsIDEwMjQgfSwgeyA2LCA1NDIsIDEwMjQgfSwgeyA3LCA1NDMsIDEwMjQgfSwgCisgICB7IDMsIDU0NCwgMTAyNCB9LCB7IDQsIDU0NSwgMTAyNCB9LCB7IDQsIDU0NiwgMTAyNCB9LCB7IDUsIDU0NywgMTAyNCB9LCB7IDQsIDU0OCwgMTAyNCB9LCB7IDUsIDU0OSwgMTAyNCB9LCB7IDUsIDU1MCwgMTAyNCB9LCB7IDYsIDU1MSwgMTAyNCB9LCAKKyAgIHsgNCwgNTUyLCAxMDI0IH0sIHsgNSwgNTUzLCAxMDI0IH0sIHsgNSwgNTU0LCAxMDI0IH0sIHsgNiwgNTU1LCAxMDI0IH0sIHsgNSwgNTU2LCAxMDI0IH0sIHsgNiwgNTU3LCAxMDI0IH0sIHsgNiwgNTU4LCAxMDI0IH0sIHsgNywgNTU5LCAxMDI0IH0sIAorICAgeyA0LCA1NjAsIDEwMjQgfSwgeyA1LCA1NjEsIDEwMjQgfSwgeyA1LCA1NjIsIDEwMjQgfSwgeyA2LCA1NjMsIDEwMjQgfSwgeyA1LCA1NjQsIDEwMjQgfSwgeyA2LCA1NjUsIDEwMjQgfSwgeyA2LCA1NjYsIDEwMjQgfSwgeyA3LCA1NjcsIDEwMjQgfSwgCisgICB7IDUsIDU2OCwgMTAyNCB9LCB7IDYsIDU2OSwgMTAyNCB9LCB7IDYsIDU3MCwgMTAyNCB9LCB7IDcsIDU3MSwgMTAyNCB9LCB7IDYsIDU3MiwgMTAyNCB9LCB7IDcsIDU3MywgMTAyNCB9LCB7IDcsIDU3NCwgMTAyNCB9LCB7IDgsIDU3NSwgMTAyNCB9LCAKKyAgIHsgMywgNTc2LCAxMDI0IH0sIHsgNCwgNTc3LCAxMDI0IH0sIHsgNCwgNTc4LCAxMDI0IH0sIHsgNSwgNTc5LCAxMDI0IH0sIHsgNCwgNTgwLCAxMDI0IH0sIHsgNSwgNTgxLCAxMDI0IH0sIHsgNSwgNTgyLCAxMDI0IH0sIHsgNiwgNTgzLCAxMDI0IH0sIAorICAgeyA0LCA1ODQsIDEwMjQgfSwgeyA1LCA1ODUsIDEwMjQgfSwgeyA1LCA1ODYsIDEwMjQgfSwgeyA2LCA1ODcsIDEwMjQgfSwgeyA1LCA1ODgsIDEwMjQgfSwgeyA2LCA1ODksIDEwMjQgfSwgeyA2LCA1OTAsIDEwMjQgfSwgeyA3LCA1OTEsIDEwMjQgfSwgCisgICB7IDQsIDU5MiwgMTAyNCB9LCB7IDUsIDU5MywgMTAyNCB9LCB7IDUsIDU5NCwgMTAyNCB9LCB7IDYsIDU5NSwgMTAyNCB9LCB7IDUsIDU5NiwgMTAyNCB9LCB7IDYsIDU5NywgMTAyNCB9LCB7IDYsIDU5OCwgMTAyNCB9LCB7IDcsIDU5OSwgMTAyNCB9LCAKKyAgIHsgNSwgNjAwLCAxMDI0IH0sIHsgNiwgNjAxLCAxMDI0IH0sIHsgNiwgNjAyLCAxMDI0IH0sIHsgNywgNjAzLCAxMDI0IH0sIHsgNiwgNjA0LCAxMDI0IH0sIHsgNywgNjA1LCAxMDI0IH0sIHsgNywgNjA2LCAxMDI0IH0sIHsgOCwgNjA3LCAxMDI0IH0sIAorICAgeyA0LCA2MDgsIDEwMjQgfSwgeyA1LCA2MDksIDEwMjQgfSwgeyA1LCA2MTAsIDEwMjQgfSwgeyA2LCA2MTEsIDEwMjQgfSwgeyA1LCA2MTIsIDEwMjQgfSwgeyA2LCA2MTMsIDEwMjQgfSwgeyA2LCA2MTQsIDEwMjQgfSwgeyA3LCA2MTUsIDEwMjQgfSwgCisgICB7IDUsIDYxNiwgMTAyNCB9LCB7IDYsIDYxNywgMTAyNCB9LCB7IDYsIDYxOCwgMTAyNCB9LCB7IDcsIDYxOSwgMTAyNCB9LCB7IDYsIDYyMCwgMTAyNCB9LCB7IDcsIDYyMSwgMTAyNCB9LCB7IDcsIDYyMiwgMTAyNCB9LCB7IDgsIDYyMywgMTAyNCB9LCAKKyAgIHsgNSwgNjI0LCAxMDI0IH0sIHsgNiwgNjI1LCAxMDI0IH0sIHsgNiwgNjI2LCAxMDI0IH0sIHsgNywgNjI3LCAxMDI0IH0sIHsgNiwgNjI4LCAxMDI0IH0sIHsgNywgNjI5LCAxMDI0IH0sIHsgNywgNjMwLCAxMDI0IH0sIHsgOCwgNjMxLCAxMDI0IH0sIAorICAgeyA2LCA2MzIsIDEwMjQgfSwgeyA3LCA2MzMsIDEwMjQgfSwgeyA3LCA2MzQsIDEwMjQgfSwgeyA4LCA2MzUsIDEwMjQgfSwgeyA3LCA2MzYsIDEwMjQgfSwgeyA4LCA2MzcsIDEwMjQgfSwgeyA4LCA2MzgsIDEwMjQgfSwgeyA5LCA2MzksIDEwMjQgfSwgCisgICB7IDMsIDY0MCwgMTAyNCB9LCB7IDQsIDY0MSwgMTAyNCB9LCB7IDQsIDY0MiwgMTAyNCB9LCB7IDUsIDY0MywgMTAyNCB9LCB7IDQsIDY0NCwgMTAyNCB9LCB7IDUsIDY0NSwgMTAyNCB9LCB7IDUsIDY0NiwgMTAyNCB9LCB7IDYsIDY0NywgMTAyNCB9LCAKKyAgIHsgNCwgNjQ4LCAxMDI0IH0sIHsgNSwgNjQ5LCAxMDI0IH0sIHsgNSwgNjUwLCAxMDI0IH0sIHsgNiwgNjUxLCAxMDI0IH0sIHsgNSwgNjUyLCAxMDI0IH0sIHsgNiwgNjUzLCAxMDI0IH0sIHsgNiwgNjU0LCAxMDI0IH0sIHsgNywgNjU1LCAxMDI0IH0sIAorICAgeyA0LCA2NTYsIDEwMjQgfSwgeyA1LCA2NTcsIDEwMjQgfSwgeyA1LCA2NTgsIDEwMjQgfSwgeyA2LCA2NTksIDEwMjQgfSwgeyA1LCA2NjAsIDEwMjQgfSwgeyA2LCA2NjEsIDEwMjQgfSwgeyA2LCA2NjIsIDEwMjQgfSwgeyA3LCA2NjMsIDEwMjQgfSwgCisgICB7IDUsIDY2NCwgMTAyNCB9LCB7IDYsIDY2NSwgMTAyNCB9LCB7IDYsIDY2NiwgMTAyNCB9LCB7IDcsIDY2NywgMTAyNCB9LCB7IDYsIDY2OCwgMTAyNCB9LCB7IDcsIDY2OSwgMTAyNCB9LCB7IDcsIDY3MCwgMTAyNCB9LCB7IDgsIDY3MSwgMTAyNCB9LCAKKyAgIHsgNCwgNjcyLCAxMDI0IH0sIHsgNSwgNjczLCAxMDI0IH0sIHsgNSwgNjc0LCAxMDI0IH0sIHsgNiwgNjc1LCAxMDI0IH0sIHsgNSwgNjc2LCAxMDI0IH0sIHsgNiwgNjc3LCAxMDI0IH0sIHsgNiwgNjc4LCAxMDI0IH0sIHsgNywgNjc5LCAxMDI0IH0sIAorICAgeyA1LCA2ODAsIDEwMjQgfSwgeyA2LCA2ODEsIDEwMjQgfSwgeyA2LCA2ODIsIDEwMjQgfSwgeyA3LCA2ODMsIDEwMjQgfSwgeyA2LCA2ODQsIDEwMjQgfSwgeyA3LCA2ODUsIDEwMjQgfSwgeyA3LCA2ODYsIDEwMjQgfSwgeyA4LCA2ODcsIDEwMjQgfSwgCisgICB7IDUsIDY4OCwgMTAyNCB9LCB7IDYsIDY4OSwgMTAyNCB9LCB7IDYsIDY5MCwgMTAyNCB9LCB7IDcsIDY5MSwgMTAyNCB9LCB7IDYsIDY5MiwgMTAyNCB9LCB7IDcsIDY5MywgMTAyNCB9LCB7IDcsIDY5NCwgMTAyNCB9LCB7IDgsIDY5NSwgMTAyNCB9LCAKKyAgIHsgNiwgNjk2LCAxMDI0IH0sIHsgNywgNjk3LCAxMDI0IH0sIHsgNywgNjk4LCAxMDI0IH0sIHsgOCwgNjk5LCAxMDI0IH0sIHsgNywgNzAwLCAxMDI0IH0sIHsgOCwgNzAxLCAxMDI0IH0sIHsgOCwgNzAyLCAxMDI0IH0sIHsgOSwgNzAzLCAxMDI0IH0sIAorICAgeyA0LCA3MDQsIDEwMjQgfSwgeyA1LCA3MDUsIDEwMjQgfSwgeyA1LCA3MDYsIDEwMjQgfSwgeyA2LCA3MDcsIDEwMjQgfSwgeyA1LCA3MDgsIDEwMjQgfSwgeyA2LCA3MDksIDEwMjQgfSwgeyA2LCA3MTAsIDEwMjQgfSwgeyA3LCA3MTEsIDEwMjQgfSwgCisgICB7IDUsIDcxMiwgMTAyNCB9LCB7IDYsIDcxMywgMTAyNCB9LCB7IDYsIDcxNCwgMTAyNCB9LCB7IDcsIDcxNSwgMTAyNCB9LCB7IDYsIDcxNiwgMTAyNCB9LCB7IDcsIDcxNywgMTAyNCB9LCB7IDcsIDcxOCwgMTAyNCB9LCB7IDgsIDcxOSwgMTAyNCB9LCAKKyAgIHsgNSwgNzIwLCAxMDI0IH0sIHsgNiwgNzIxLCAxMDI0IH0sIHsgNiwgNzIyLCAxMDI0IH0sIHsgNywgNzIzLCAxMDI0IH0sIHsgNiwgNzI0LCAxMDI0IH0sIHsgNywgNzI1LCAxMDI0IH0sIHsgNywgNzI2LCAxMDI0IH0sIHsgOCwgNzI3LCAxMDI0IH0sIAorICAgeyA2LCA3MjgsIDEwMjQgfSwgeyA3LCA3MjksIDEwMjQgfSwgeyA3LCA3MzAsIDEwMjQgfSwgeyA4LCA3MzEsIDEwMjQgfSwgeyA3LCA3MzIsIDEwMjQgfSwgeyA4LCA3MzMsIDEwMjQgfSwgeyA4LCA3MzQsIDEwMjQgfSwgeyA5LCA3MzUsIDEwMjQgfSwgCisgICB7IDUsIDczNiwgMTAyNCB9LCB7IDYsIDczNywgMTAyNCB9LCB7IDYsIDczOCwgMTAyNCB9LCB7IDcsIDczOSwgMTAyNCB9LCB7IDYsIDc0MCwgMTAyNCB9LCB7IDcsIDc0MSwgMTAyNCB9LCB7IDcsIDc0MiwgMTAyNCB9LCB7IDgsIDc0MywgMTAyNCB9LCAKKyAgIHsgNiwgNzQ0LCAxMDI0IH0sIHsgNywgNzQ1LCAxMDI0IH0sIHsgNywgNzQ2LCAxMDI0IH0sIHsgOCwgNzQ3LCAxMDI0IH0sIHsgNywgNzQ4LCAxMDI0IH0sIHsgOCwgNzQ5LCAxMDI0IH0sIHsgOCwgNzUwLCAxMDI0IH0sIHsgOSwgNzUxLCAxMDI0IH0sIAorICAgeyA2LCA3NTIsIDEwMjQgfSwgeyA3LCA3NTMsIDEwMjQgfSwgeyA3LCA3NTQsIDEwMjQgfSwgeyA4LCA3NTUsIDEwMjQgfSwgeyA3LCA3NTYsIDEwMjQgfSwgeyA4LCA3NTcsIDEwMjQgfSwgeyA4LCA3NTgsIDEwMjQgfSwgeyA5LCA3NTksIDEwMjQgfSwgCisgICB7IDcsIDc2MCwgMTAyNCB9LCB7IDgsIDc2MSwgMTAyNCB9LCB7IDgsIDc2MiwgMTAyNCB9LCB7IDksIDc2MywgMTAyNCB9LCB7IDgsIDc2NCwgMTAyNCB9LCB7IDksIDc2NSwgMTAyNCB9LCB7IDksIDc2NiwgMTAyNCB9LCB7IDEwLCA3NjcsIDEwMjQgfSwgCisgICB7IDMsIDc2OCwgMTAyNCB9LCB7IDQsIDc2OSwgMTAyNCB9LCB7IDQsIDc3MCwgMTAyNCB9LCB7IDUsIDc3MSwgMTAyNCB9LCB7IDQsIDc3MiwgMTAyNCB9LCB7IDUsIDc3MywgMTAyNCB9LCB7IDUsIDc3NCwgMTAyNCB9LCB7IDYsIDc3NSwgMTAyNCB9LCAKKyAgIHsgNCwgNzc2LCAxMDI0IH0sIHsgNSwgNzc3LCAxMDI0IH0sIHsgNSwgNzc4LCAxMDI0IH0sIHsgNiwgNzc5LCAxMDI0IH0sIHsgNSwgNzgwLCAxMDI0IH0sIHsgNiwgNzgxLCAxMDI0IH0sIHsgNiwgNzgyLCAxMDI0IH0sIHsgNywgNzgzLCAxMDI0IH0sIAorICAgeyA0LCA3ODQsIDEwMjQgfSwgeyA1LCA3ODUsIDEwMjQgfSwgeyA1LCA3ODYsIDEwMjQgfSwgeyA2LCA3ODcsIDEwMjQgfSwgeyA1LCA3ODgsIDEwMjQgfSwgeyA2LCA3ODksIDEwMjQgfSwgeyA2LCA3OTAsIDEwMjQgfSwgeyA3LCA3OTEsIDEwMjQgfSwgCisgICB7IDUsIDc5MiwgMTAyNCB9LCB7IDYsIDc5MywgMTAyNCB9LCB7IDYsIDc5NCwgMTAyNCB9LCB7IDcsIDc5NSwgMTAyNCB9LCB7IDYsIDc5NiwgMTAyNCB9LCB7IDcsIDc5NywgMTAyNCB9LCB7IDcsIDc5OCwgMTAyNCB9LCB7IDgsIDc5OSwgMTAyNCB9LCAKKyAgIHsgNCwgODAwLCAxMDI0IH0sIHsgNSwgODAxLCAxMDI0IH0sIHsgNSwgODAyLCAxMDI0IH0sIHsgNiwgODAzLCAxMDI0IH0sIHsgNSwgODA0LCAxMDI0IH0sIHsgNiwgODA1LCAxMDI0IH0sIHsgNiwgODA2LCAxMDI0IH0sIHsgNywgODA3LCAxMDI0IH0sIAorICAgeyA1LCA4MDgsIDEwMjQgfSwgeyA2LCA4MDksIDEwMjQgfSwgeyA2LCA4MTAsIDEwMjQgfSwgeyA3LCA4MTEsIDEwMjQgfSwgeyA2LCA4MTIsIDEwMjQgfSwgeyA3LCA4MTMsIDEwMjQgfSwgeyA3LCA4MTQsIDEwMjQgfSwgeyA4LCA4MTUsIDEwMjQgfSwgCisgICB7IDUsIDgxNiwgMTAyNCB9LCB7IDYsIDgxNywgMTAyNCB9LCB7IDYsIDgxOCwgMTAyNCB9LCB7IDcsIDgxOSwgMTAyNCB9LCB7IDYsIDgyMCwgMTAyNCB9LCB7IDcsIDgyMSwgMTAyNCB9LCB7IDcsIDgyMiwgMTAyNCB9LCB7IDgsIDgyMywgMTAyNCB9LCAKKyAgIHsgNiwgODI0LCAxMDI0IH0sIHsgNywgODI1LCAxMDI0IH0sIHsgNywgODI2LCAxMDI0IH0sIHsgOCwgODI3LCAxMDI0IH0sIHsgNywgODI4LCAxMDI0IH0sIHsgOCwgODI5LCAxMDI0IH0sIHsgOCwgODMwLCAxMDI0IH0sIHsgOSwgODMxLCAxMDI0IH0sIAorICAgeyA0LCA4MzIsIDEwMjQgfSwgeyA1LCA4MzMsIDEwMjQgfSwgeyA1LCA4MzQsIDEwMjQgfSwgeyA2LCA4MzUsIDEwMjQgfSwgeyA1LCA4MzYsIDEwMjQgfSwgeyA2LCA4MzcsIDEwMjQgfSwgeyA2LCA4MzgsIDEwMjQgfSwgeyA3LCA4MzksIDEwMjQgfSwgCisgICB7IDUsIDg0MCwgMTAyNCB9LCB7IDYsIDg0MSwgMTAyNCB9LCB7IDYsIDg0MiwgMTAyNCB9LCB7IDcsIDg0MywgMTAyNCB9LCB7IDYsIDg0NCwgMTAyNCB9LCB7IDcsIDg0NSwgMTAyNCB9LCB7IDcsIDg0NiwgMTAyNCB9LCB7IDgsIDg0NywgMTAyNCB9LCAKKyAgIHsgNSwgODQ4LCAxMDI0IH0sIHsgNiwgODQ5LCAxMDI0IH0sIHsgNiwgODUwLCAxMDI0IH0sIHsgNywgODUxLCAxMDI0IH0sIHsgNiwgODUyLCAxMDI0IH0sIHsgNywgODUzLCAxMDI0IH0sIHsgNywgODU0LCAxMDI0IH0sIHsgOCwgODU1LCAxMDI0IH0sIAorICAgeyA2LCA4NTYsIDEwMjQgfSwgeyA3LCA4NTcsIDEwMjQgfSwgeyA3LCA4NTgsIDEwMjQgfSwgeyA4LCA4NTksIDEwMjQgfSwgeyA3LCA4NjAsIDEwMjQgfSwgeyA4LCA4NjEsIDEwMjQgfSwgeyA4LCA4NjIsIDEwMjQgfSwgeyA5LCA4NjMsIDEwMjQgfSwgCisgICB7IDUsIDg2NCwgMTAyNCB9LCB7IDYsIDg2NSwgMTAyNCB9LCB7IDYsIDg2NiwgMTAyNCB9LCB7IDcsIDg2NywgMTAyNCB9LCB7IDYsIDg2OCwgMTAyNCB9LCB7IDcsIDg2OSwgMTAyNCB9LCB7IDcsIDg3MCwgMTAyNCB9LCB7IDgsIDg3MSwgMTAyNCB9LCAKKyAgIHsgNiwgODcyLCAxMDI0IH0sIHsgNywgODczLCAxMDI0IH0sIHsgNywgODc0LCAxMDI0IH0sIHsgOCwgODc1LCAxMDI0IH0sIHsgNywgODc2LCAxMDI0IH0sIHsgOCwgODc3LCAxMDI0IH0sIHsgOCwgODc4LCAxMDI0IH0sIHsgOSwgODc5LCAxMDI0IH0sIAorICAgeyA2LCA4ODAsIDEwMjQgfSwgeyA3LCA4ODEsIDEwMjQgfSwgeyA3LCA4ODIsIDEwMjQgfSwgeyA4LCA4ODMsIDEwMjQgfSwgeyA3LCA4ODQsIDEwMjQgfSwgeyA4LCA4ODUsIDEwMjQgfSwgeyA4LCA4ODYsIDEwMjQgfSwgeyA5LCA4ODcsIDEwMjQgfSwgCisgICB7IDcsIDg4OCwgMTAyNCB9LCB7IDgsIDg4OSwgMTAyNCB9LCB7IDgsIDg5MCwgMTAyNCB9LCB7IDksIDg5MSwgMTAyNCB9LCB7IDgsIDg5MiwgMTAyNCB9LCB7IDksIDg5MywgMTAyNCB9LCB7IDksIDg5NCwgMTAyNCB9LCB7IDEwLCA4OTUsIDEwMjQgfSwgCisgICB7IDQsIDg5NiwgMTAyNCB9LCB7IDUsIDg5NywgMTAyNCB9LCB7IDUsIDg5OCwgMTAyNCB9LCB7IDYsIDg5OSwgMTAyNCB9LCB7IDUsIDkwMCwgMTAyNCB9LCB7IDYsIDkwMSwgMTAyNCB9LCB7IDYsIDkwMiwgMTAyNCB9LCB7IDcsIDkwMywgMTAyNCB9LCAKKyAgIHsgNSwgOTA0LCAxMDI0IH0sIHsgNiwgOTA1LCAxMDI0IH0sIHsgNiwgOTA2LCAxMDI0IH0sIHsgNywgOTA3LCAxMDI0IH0sIHsgNiwgOTA4LCAxMDI0IH0sIHsgNywgOTA5LCAxMDI0IH0sIHsgNywgOTEwLCAxMDI0IH0sIHsgOCwgOTExLCAxMDI0IH0sIAorICAgeyA1LCA5MTIsIDEwMjQgfSwgeyA2LCA5MTMsIDEwMjQgfSwgeyA2LCA5MTQsIDEwMjQgfSwgeyA3LCA5MTUsIDEwMjQgfSwgeyA2LCA5MTYsIDEwMjQgfSwgeyA3LCA5MTcsIDEwMjQgfSwgeyA3LCA5MTgsIDEwMjQgfSwgeyA4LCA5MTksIDEwMjQgfSwgCisgICB7IDYsIDkyMCwgMTAyNCB9LCB7IDcsIDkyMSwgMTAyNCB9LCB7IDcsIDkyMiwgMTAyNCB9LCB7IDgsIDkyMywgMTAyNCB9LCB7IDcsIDkyNCwgMTAyNCB9LCB7IDgsIDkyNSwgMTAyNCB9LCB7IDgsIDkyNiwgMTAyNCB9LCB7IDksIDkyNywgMTAyNCB9LCAKKyAgIHsgNSwgOTI4LCAxMDI0IH0sIHsgNiwgOTI5LCAxMDI0IH0sIHsgNiwgOTMwLCAxMDI0IH0sIHsgNywgOTMxLCAxMDI0IH0sIHsgNiwgOTMyLCAxMDI0IH0sIHsgNywgOTMzLCAxMDI0IH0sIHsgNywgOTM0LCAxMDI0IH0sIHsgOCwgOTM1LCAxMDI0IH0sIAorICAgeyA2LCA5MzYsIDEwMjQgfSwgeyA3LCA5MzcsIDEwMjQgfSwgeyA3LCA5MzgsIDEwMjQgfSwgeyA4LCA5MzksIDEwMjQgfSwgeyA3LCA5NDAsIDEwMjQgfSwgeyA4LCA5NDEsIDEwMjQgfSwgeyA4LCA5NDIsIDEwMjQgfSwgeyA5LCA5NDMsIDEwMjQgfSwgCisgICB7IDYsIDk0NCwgMTAyNCB9LCB7IDcsIDk0NSwgMTAyNCB9LCB7IDcsIDk0NiwgMTAyNCB9LCB7IDgsIDk0NywgMTAyNCB9LCB7IDcsIDk0OCwgMTAyNCB9LCB7IDgsIDk0OSwgMTAyNCB9LCB7IDgsIDk1MCwgMTAyNCB9LCB7IDksIDk1MSwgMTAyNCB9LCAKKyAgIHsgNywgOTUyLCAxMDI0IH0sIHsgOCwgOTUzLCAxMDI0IH0sIHsgOCwgOTU0LCAxMDI0IH0sIHsgOSwgOTU1LCAxMDI0IH0sIHsgOCwgOTU2LCAxMDI0IH0sIHsgOSwgOTU3LCAxMDI0IH0sIHsgOSwgOTU4LCAxMDI0IH0sIHsgMTAsIDk1OSwgMTAyNCB9LCAKKyAgIHsgNSwgOTYwLCAxMDI0IH0sIHsgNiwgOTYxLCAxMDI0IH0sIHsgNiwgOTYyLCAxMDI0IH0sIHsgNywgOTYzLCAxMDI0IH0sIHsgNiwgOTY0LCAxMDI0IH0sIHsgNywgOTY1LCAxMDI0IH0sIHsgNywgOTY2LCAxMDI0IH0sIHsgOCwgOTY3LCAxMDI0IH0sIAorICAgeyA2LCA5NjgsIDEwMjQgfSwgeyA3LCA5NjksIDEwMjQgfSwgeyA3LCA5NzAsIDEwMjQgfSwgeyA4LCA5NzEsIDEwMjQgfSwgeyA3LCA5NzIsIDEwMjQgfSwgeyA4LCA5NzMsIDEwMjQgfSwgeyA4LCA5NzQsIDEwMjQgfSwgeyA5LCA5NzUsIDEwMjQgfSwgCisgICB7IDYsIDk3NiwgMTAyNCB9LCB7IDcsIDk3NywgMTAyNCB9LCB7IDcsIDk3OCwgMTAyNCB9LCB7IDgsIDk3OSwgMTAyNCB9LCB7IDcsIDk4MCwgMTAyNCB9LCB7IDgsIDk4MSwgMTAyNCB9LCB7IDgsIDk4MiwgMTAyNCB9LCB7IDksIDk4MywgMTAyNCB9LCAKKyAgIHsgNywgOTg0LCAxMDI0IH0sIHsgOCwgOTg1LCAxMDI0IH0sIHsgOCwgOTg2LCAxMDI0IH0sIHsgOSwgOTg3LCAxMDI0IH0sIHsgOCwgOTg4LCAxMDI0IH0sIHsgOSwgOTg5LCAxMDI0IH0sIHsgOSwgOTkwLCAxMDI0IH0sIHsgMTAsIDk5MSwgMTAyNCB9LCAKKyAgIHsgNiwgOTkyLCAxMDI0IH0sIHsgNywgOTkzLCAxMDI0IH0sIHsgNywgOTk0LCAxMDI0IH0sIHsgOCwgOTk1LCAxMDI0IH0sIHsgNywgOTk2LCAxMDI0IH0sIHsgOCwgOTk3LCAxMDI0IH0sIHsgOCwgOTk4LCAxMDI0IH0sIHsgOSwgOTk5LCAxMDI0IH0sIAorICAgeyA3LCAxMDAwLCAxMDI0IH0sIHsgOCwgMTAwMSwgMTAyNCB9LCB7IDgsIDEwMDIsIDEwMjQgfSwgeyA5LCAxMDAzLCAxMDI0IH0sIHsgOCwgMTAwNCwgMTAyNCB9LCB7IDksIDEwMDUsIDEwMjQgfSwgeyA5LCAxMDA2LCAxMDI0IH0sIHsgMTAsIDEwMDcsIDEwMjQgfSwgCisgICB7IDcsIDEwMDgsIDEwMjQgfSwgeyA4LCAxMDA5LCAxMDI0IH0sIHsgOCwgMTAxMCwgMTAyNCB9LCB7IDksIDEwMTEsIDEwMjQgfSwgeyA4LCAxMDEyLCAxMDI0IH0sIHsgOSwgMTAxMywgMTAyNCB9LCB7IDksIDEwMTQsIDEwMjQgfSwgeyAxMCwgMTAxNSwgMTAyNCB9LCAKKyAgIHsgOCwgMTAxNiwgMTAyNCB9LCB7IDksIDEwMTcsIDEwMjQgfSwgeyA5LCAxMDE4LCAxMDI0IH0sIHsgMTAsIDEwMTksIDEwMjQgfSwgeyA5LCAxMDIwLCAxMDI0IH0sIHsgMTAsIDEwMjEsIDEwMjQgfSwgeyAxMCwgMTAyMiwgMTAyNCB9LCB7IDExLCAxMDIzLCAxMDI0IH0sIAorI2lmIEZQX0xVVCA+IDExCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCAyMDQ4IH0sIHsgMiwgMiwgMjA0OCB9LCB7IDMsIDMsIDIwNDggfSwgeyAyLCA0LCAyMDQ4IH0sIHsgMywgNSwgMjA0OCB9LCB7IDMsIDYsIDIwNDggfSwgeyA0LCA3LCAyMDQ4IH0sIAorICAgeyAyLCA4LCAyMDQ4IH0sIHsgMywgOSwgMjA0OCB9LCB7IDMsIDEwLCAyMDQ4IH0sIHsgNCwgMTEsIDIwNDggfSwgeyAzLCAxMiwgMjA0OCB9LCB7IDQsIDEzLCAyMDQ4IH0sIHsgNCwgMTQsIDIwNDggfSwgeyA1LCAxNSwgMjA0OCB9LCAKKyAgIHsgMiwgMTYsIDIwNDggfSwgeyAzLCAxNywgMjA0OCB9LCB7IDMsIDE4LCAyMDQ4IH0sIHsgNCwgMTksIDIwNDggfSwgeyAzLCAyMCwgMjA0OCB9LCB7IDQsIDIxLCAyMDQ4IH0sIHsgNCwgMjIsIDIwNDggfSwgeyA1LCAyMywgMjA0OCB9LCAKKyAgIHsgMywgMjQsIDIwNDggfSwgeyA0LCAyNSwgMjA0OCB9LCB7IDQsIDI2LCAyMDQ4IH0sIHsgNSwgMjcsIDIwNDggfSwgeyA0LCAyOCwgMjA0OCB9LCB7IDUsIDI5LCAyMDQ4IH0sIHsgNSwgMzAsIDIwNDggfSwgeyA2LCAzMSwgMjA0OCB9LCAKKyAgIHsgMiwgMzIsIDIwNDggfSwgeyAzLCAzMywgMjA0OCB9LCB7IDMsIDM0LCAyMDQ4IH0sIHsgNCwgMzUsIDIwNDggfSwgeyAzLCAzNiwgMjA0OCB9LCB7IDQsIDM3LCAyMDQ4IH0sIHsgNCwgMzgsIDIwNDggfSwgeyA1LCAzOSwgMjA0OCB9LCAKKyAgIHsgMywgNDAsIDIwNDggfSwgeyA0LCA0MSwgMjA0OCB9LCB7IDQsIDQyLCAyMDQ4IH0sIHsgNSwgNDMsIDIwNDggfSwgeyA0LCA0NCwgMjA0OCB9LCB7IDUsIDQ1LCAyMDQ4IH0sIHsgNSwgNDYsIDIwNDggfSwgeyA2LCA0NywgMjA0OCB9LCAKKyAgIHsgMywgNDgsIDIwNDggfSwgeyA0LCA0OSwgMjA0OCB9LCB7IDQsIDUwLCAyMDQ4IH0sIHsgNSwgNTEsIDIwNDggfSwgeyA0LCA1MiwgMjA0OCB9LCB7IDUsIDUzLCAyMDQ4IH0sIHsgNSwgNTQsIDIwNDggfSwgeyA2LCA1NSwgMjA0OCB9LCAKKyAgIHsgNCwgNTYsIDIwNDggfSwgeyA1LCA1NywgMjA0OCB9LCB7IDUsIDU4LCAyMDQ4IH0sIHsgNiwgNTksIDIwNDggfSwgeyA1LCA2MCwgMjA0OCB9LCB7IDYsIDYxLCAyMDQ4IH0sIHsgNiwgNjIsIDIwNDggfSwgeyA3LCA2MywgMjA0OCB9LCAKKyAgIHsgMiwgNjQsIDIwNDggfSwgeyAzLCA2NSwgMjA0OCB9LCB7IDMsIDY2LCAyMDQ4IH0sIHsgNCwgNjcsIDIwNDggfSwgeyAzLCA2OCwgMjA0OCB9LCB7IDQsIDY5LCAyMDQ4IH0sIHsgNCwgNzAsIDIwNDggfSwgeyA1LCA3MSwgMjA0OCB9LCAKKyAgIHsgMywgNzIsIDIwNDggfSwgeyA0LCA3MywgMjA0OCB9LCB7IDQsIDc0LCAyMDQ4IH0sIHsgNSwgNzUsIDIwNDggfSwgeyA0LCA3NiwgMjA0OCB9LCB7IDUsIDc3LCAyMDQ4IH0sIHsgNSwgNzgsIDIwNDggfSwgeyA2LCA3OSwgMjA0OCB9LCAKKyAgIHsgMywgODAsIDIwNDggfSwgeyA0LCA4MSwgMjA0OCB9LCB7IDQsIDgyLCAyMDQ4IH0sIHsgNSwgODMsIDIwNDggfSwgeyA0LCA4NCwgMjA0OCB9LCB7IDUsIDg1LCAyMDQ4IH0sIHsgNSwgODYsIDIwNDggfSwgeyA2LCA4NywgMjA0OCB9LCAKKyAgIHsgNCwgODgsIDIwNDggfSwgeyA1LCA4OSwgMjA0OCB9LCB7IDUsIDkwLCAyMDQ4IH0sIHsgNiwgOTEsIDIwNDggfSwgeyA1LCA5MiwgMjA0OCB9LCB7IDYsIDkzLCAyMDQ4IH0sIHsgNiwgOTQsIDIwNDggfSwgeyA3LCA5NSwgMjA0OCB9LCAKKyAgIHsgMywgOTYsIDIwNDggfSwgeyA0LCA5NywgMjA0OCB9LCB7IDQsIDk4LCAyMDQ4IH0sIHsgNSwgOTksIDIwNDggfSwgeyA0LCAxMDAsIDIwNDggfSwgeyA1LCAxMDEsIDIwNDggfSwgeyA1LCAxMDIsIDIwNDggfSwgeyA2LCAxMDMsIDIwNDggfSwgCisgICB7IDQsIDEwNCwgMjA0OCB9LCB7IDUsIDEwNSwgMjA0OCB9LCB7IDUsIDEwNiwgMjA0OCB9LCB7IDYsIDEwNywgMjA0OCB9LCB7IDUsIDEwOCwgMjA0OCB9LCB7IDYsIDEwOSwgMjA0OCB9LCB7IDYsIDExMCwgMjA0OCB9LCB7IDcsIDExMSwgMjA0OCB9LCAKKyAgIHsgNCwgMTEyLCAyMDQ4IH0sIHsgNSwgMTEzLCAyMDQ4IH0sIHsgNSwgMTE0LCAyMDQ4IH0sIHsgNiwgMTE1LCAyMDQ4IH0sIHsgNSwgMTE2LCAyMDQ4IH0sIHsgNiwgMTE3LCAyMDQ4IH0sIHsgNiwgMTE4LCAyMDQ4IH0sIHsgNywgMTE5LCAyMDQ4IH0sIAorICAgeyA1LCAxMjAsIDIwNDggfSwgeyA2LCAxMjEsIDIwNDggfSwgeyA2LCAxMjIsIDIwNDggfSwgeyA3LCAxMjMsIDIwNDggfSwgeyA2LCAxMjQsIDIwNDggfSwgeyA3LCAxMjUsIDIwNDggfSwgeyA3LCAxMjYsIDIwNDggfSwgeyA4LCAxMjcsIDIwNDggfSwgCisgICB7IDIsIDEyOCwgMjA0OCB9LCB7IDMsIDEyOSwgMjA0OCB9LCB7IDMsIDEzMCwgMjA0OCB9LCB7IDQsIDEzMSwgMjA0OCB9LCB7IDMsIDEzMiwgMjA0OCB9LCB7IDQsIDEzMywgMjA0OCB9LCB7IDQsIDEzNCwgMjA0OCB9LCB7IDUsIDEzNSwgMjA0OCB9LCAKKyAgIHsgMywgMTM2LCAyMDQ4IH0sIHsgNCwgMTM3LCAyMDQ4IH0sIHsgNCwgMTM4LCAyMDQ4IH0sIHsgNSwgMTM5LCAyMDQ4IH0sIHsgNCwgMTQwLCAyMDQ4IH0sIHsgNSwgMTQxLCAyMDQ4IH0sIHsgNSwgMTQyLCAyMDQ4IH0sIHsgNiwgMTQzLCAyMDQ4IH0sIAorICAgeyAzLCAxNDQsIDIwNDggfSwgeyA0LCAxNDUsIDIwNDggfSwgeyA0LCAxNDYsIDIwNDggfSwgeyA1LCAxNDcsIDIwNDggfSwgeyA0LCAxNDgsIDIwNDggfSwgeyA1LCAxNDksIDIwNDggfSwgeyA1LCAxNTAsIDIwNDggfSwgeyA2LCAxNTEsIDIwNDggfSwgCisgICB7IDQsIDE1MiwgMjA0OCB9LCB7IDUsIDE1MywgMjA0OCB9LCB7IDUsIDE1NCwgMjA0OCB9LCB7IDYsIDE1NSwgMjA0OCB9LCB7IDUsIDE1NiwgMjA0OCB9LCB7IDYsIDE1NywgMjA0OCB9LCB7IDYsIDE1OCwgMjA0OCB9LCB7IDcsIDE1OSwgMjA0OCB9LCAKKyAgIHsgMywgMTYwLCAyMDQ4IH0sIHsgNCwgMTYxLCAyMDQ4IH0sIHsgNCwgMTYyLCAyMDQ4IH0sIHsgNSwgMTYzLCAyMDQ4IH0sIHsgNCwgMTY0LCAyMDQ4IH0sIHsgNSwgMTY1LCAyMDQ4IH0sIHsgNSwgMTY2LCAyMDQ4IH0sIHsgNiwgMTY3LCAyMDQ4IH0sIAorICAgeyA0LCAxNjgsIDIwNDggfSwgeyA1LCAxNjksIDIwNDggfSwgeyA1LCAxNzAsIDIwNDggfSwgeyA2LCAxNzEsIDIwNDggfSwgeyA1LCAxNzIsIDIwNDggfSwgeyA2LCAxNzMsIDIwNDggfSwgeyA2LCAxNzQsIDIwNDggfSwgeyA3LCAxNzUsIDIwNDggfSwgCisgICB7IDQsIDE3NiwgMjA0OCB9LCB7IDUsIDE3NywgMjA0OCB9LCB7IDUsIDE3OCwgMjA0OCB9LCB7IDYsIDE3OSwgMjA0OCB9LCB7IDUsIDE4MCwgMjA0OCB9LCB7IDYsIDE4MSwgMjA0OCB9LCB7IDYsIDE4MiwgMjA0OCB9LCB7IDcsIDE4MywgMjA0OCB9LCAKKyAgIHsgNSwgMTg0LCAyMDQ4IH0sIHsgNiwgMTg1LCAyMDQ4IH0sIHsgNiwgMTg2LCAyMDQ4IH0sIHsgNywgMTg3LCAyMDQ4IH0sIHsgNiwgMTg4LCAyMDQ4IH0sIHsgNywgMTg5LCAyMDQ4IH0sIHsgNywgMTkwLCAyMDQ4IH0sIHsgOCwgMTkxLCAyMDQ4IH0sIAorICAgeyAzLCAxOTIsIDIwNDggfSwgeyA0LCAxOTMsIDIwNDggfSwgeyA0LCAxOTQsIDIwNDggfSwgeyA1LCAxOTUsIDIwNDggfSwgeyA0LCAxOTYsIDIwNDggfSwgeyA1LCAxOTcsIDIwNDggfSwgeyA1LCAxOTgsIDIwNDggfSwgeyA2LCAxOTksIDIwNDggfSwgCisgICB7IDQsIDIwMCwgMjA0OCB9LCB7IDUsIDIwMSwgMjA0OCB9LCB7IDUsIDIwMiwgMjA0OCB9LCB7IDYsIDIwMywgMjA0OCB9LCB7IDUsIDIwNCwgMjA0OCB9LCB7IDYsIDIwNSwgMjA0OCB9LCB7IDYsIDIwNiwgMjA0OCB9LCB7IDcsIDIwNywgMjA0OCB9LCAKKyAgIHsgNCwgMjA4LCAyMDQ4IH0sIHsgNSwgMjA5LCAyMDQ4IH0sIHsgNSwgMjEwLCAyMDQ4IH0sIHsgNiwgMjExLCAyMDQ4IH0sIHsgNSwgMjEyLCAyMDQ4IH0sIHsgNiwgMjEzLCAyMDQ4IH0sIHsgNiwgMjE0LCAyMDQ4IH0sIHsgNywgMjE1LCAyMDQ4IH0sIAorICAgeyA1LCAyMTYsIDIwNDggfSwgeyA2LCAyMTcsIDIwNDggfSwgeyA2LCAyMTgsIDIwNDggfSwgeyA3LCAyMTksIDIwNDggfSwgeyA2LCAyMjAsIDIwNDggfSwgeyA3LCAyMjEsIDIwNDggfSwgeyA3LCAyMjIsIDIwNDggfSwgeyA4LCAyMjMsIDIwNDggfSwgCisgICB7IDQsIDIyNCwgMjA0OCB9LCB7IDUsIDIyNSwgMjA0OCB9LCB7IDUsIDIyNiwgMjA0OCB9LCB7IDYsIDIyNywgMjA0OCB9LCB7IDUsIDIyOCwgMjA0OCB9LCB7IDYsIDIyOSwgMjA0OCB9LCB7IDYsIDIzMCwgMjA0OCB9LCB7IDcsIDIzMSwgMjA0OCB9LCAKKyAgIHsgNSwgMjMyLCAyMDQ4IH0sIHsgNiwgMjMzLCAyMDQ4IH0sIHsgNiwgMjM0LCAyMDQ4IH0sIHsgNywgMjM1LCAyMDQ4IH0sIHsgNiwgMjM2LCAyMDQ4IH0sIHsgNywgMjM3LCAyMDQ4IH0sIHsgNywgMjM4LCAyMDQ4IH0sIHsgOCwgMjM5LCAyMDQ4IH0sIAorICAgeyA1LCAyNDAsIDIwNDggfSwgeyA2LCAyNDEsIDIwNDggfSwgeyA2LCAyNDIsIDIwNDggfSwgeyA3LCAyNDMsIDIwNDggfSwgeyA2LCAyNDQsIDIwNDggfSwgeyA3LCAyNDUsIDIwNDggfSwgeyA3LCAyNDYsIDIwNDggfSwgeyA4LCAyNDcsIDIwNDggfSwgCisgICB7IDYsIDI0OCwgMjA0OCB9LCB7IDcsIDI0OSwgMjA0OCB9LCB7IDcsIDI1MCwgMjA0OCB9LCB7IDgsIDI1MSwgMjA0OCB9LCB7IDcsIDI1MiwgMjA0OCB9LCB7IDgsIDI1MywgMjA0OCB9LCB7IDgsIDI1NCwgMjA0OCB9LCB7IDksIDI1NSwgMjA0OCB9LCAKKyAgIHsgMiwgMjU2LCAyMDQ4IH0sIHsgMywgMjU3LCAyMDQ4IH0sIHsgMywgMjU4LCAyMDQ4IH0sIHsgNCwgMjU5LCAyMDQ4IH0sIHsgMywgMjYwLCAyMDQ4IH0sIHsgNCwgMjYxLCAyMDQ4IH0sIHsgNCwgMjYyLCAyMDQ4IH0sIHsgNSwgMjYzLCAyMDQ4IH0sIAorICAgeyAzLCAyNjQsIDIwNDggfSwgeyA0LCAyNjUsIDIwNDggfSwgeyA0LCAyNjYsIDIwNDggfSwgeyA1LCAyNjcsIDIwNDggfSwgeyA0LCAyNjgsIDIwNDggfSwgeyA1LCAyNjksIDIwNDggfSwgeyA1LCAyNzAsIDIwNDggfSwgeyA2LCAyNzEsIDIwNDggfSwgCisgICB7IDMsIDI3MiwgMjA0OCB9LCB7IDQsIDI3MywgMjA0OCB9LCB7IDQsIDI3NCwgMjA0OCB9LCB7IDUsIDI3NSwgMjA0OCB9LCB7IDQsIDI3NiwgMjA0OCB9LCB7IDUsIDI3NywgMjA0OCB9LCB7IDUsIDI3OCwgMjA0OCB9LCB7IDYsIDI3OSwgMjA0OCB9LCAKKyAgIHsgNCwgMjgwLCAyMDQ4IH0sIHsgNSwgMjgxLCAyMDQ4IH0sIHsgNSwgMjgyLCAyMDQ4IH0sIHsgNiwgMjgzLCAyMDQ4IH0sIHsgNSwgMjg0LCAyMDQ4IH0sIHsgNiwgMjg1LCAyMDQ4IH0sIHsgNiwgMjg2LCAyMDQ4IH0sIHsgNywgMjg3LCAyMDQ4IH0sIAorICAgeyAzLCAyODgsIDIwNDggfSwgeyA0LCAyODksIDIwNDggfSwgeyA0LCAyOTAsIDIwNDggfSwgeyA1LCAyOTEsIDIwNDggfSwgeyA0LCAyOTIsIDIwNDggfSwgeyA1LCAyOTMsIDIwNDggfSwgeyA1LCAyOTQsIDIwNDggfSwgeyA2LCAyOTUsIDIwNDggfSwgCisgICB7IDQsIDI5NiwgMjA0OCB9LCB7IDUsIDI5NywgMjA0OCB9LCB7IDUsIDI5OCwgMjA0OCB9LCB7IDYsIDI5OSwgMjA0OCB9LCB7IDUsIDMwMCwgMjA0OCB9LCB7IDYsIDMwMSwgMjA0OCB9LCB7IDYsIDMwMiwgMjA0OCB9LCB7IDcsIDMwMywgMjA0OCB9LCAKKyAgIHsgNCwgMzA0LCAyMDQ4IH0sIHsgNSwgMzA1LCAyMDQ4IH0sIHsgNSwgMzA2LCAyMDQ4IH0sIHsgNiwgMzA3LCAyMDQ4IH0sIHsgNSwgMzA4LCAyMDQ4IH0sIHsgNiwgMzA5LCAyMDQ4IH0sIHsgNiwgMzEwLCAyMDQ4IH0sIHsgNywgMzExLCAyMDQ4IH0sIAorICAgeyA1LCAzMTIsIDIwNDggfSwgeyA2LCAzMTMsIDIwNDggfSwgeyA2LCAzMTQsIDIwNDggfSwgeyA3LCAzMTUsIDIwNDggfSwgeyA2LCAzMTYsIDIwNDggfSwgeyA3LCAzMTcsIDIwNDggfSwgeyA3LCAzMTgsIDIwNDggfSwgeyA4LCAzMTksIDIwNDggfSwgCisgICB7IDMsIDMyMCwgMjA0OCB9LCB7IDQsIDMyMSwgMjA0OCB9LCB7IDQsIDMyMiwgMjA0OCB9LCB7IDUsIDMyMywgMjA0OCB9LCB7IDQsIDMyNCwgMjA0OCB9LCB7IDUsIDMyNSwgMjA0OCB9LCB7IDUsIDMyNiwgMjA0OCB9LCB7IDYsIDMyNywgMjA0OCB9LCAKKyAgIHsgNCwgMzI4LCAyMDQ4IH0sIHsgNSwgMzI5LCAyMDQ4IH0sIHsgNSwgMzMwLCAyMDQ4IH0sIHsgNiwgMzMxLCAyMDQ4IH0sIHsgNSwgMzMyLCAyMDQ4IH0sIHsgNiwgMzMzLCAyMDQ4IH0sIHsgNiwgMzM0LCAyMDQ4IH0sIHsgNywgMzM1LCAyMDQ4IH0sIAorICAgeyA0LCAzMzYsIDIwNDggfSwgeyA1LCAzMzcsIDIwNDggfSwgeyA1LCAzMzgsIDIwNDggfSwgeyA2LCAzMzksIDIwNDggfSwgeyA1LCAzNDAsIDIwNDggfSwgeyA2LCAzNDEsIDIwNDggfSwgeyA2LCAzNDIsIDIwNDggfSwgeyA3LCAzNDMsIDIwNDggfSwgCisgICB7IDUsIDM0NCwgMjA0OCB9LCB7IDYsIDM0NSwgMjA0OCB9LCB7IDYsIDM0NiwgMjA0OCB9LCB7IDcsIDM0NywgMjA0OCB9LCB7IDYsIDM0OCwgMjA0OCB9LCB7IDcsIDM0OSwgMjA0OCB9LCB7IDcsIDM1MCwgMjA0OCB9LCB7IDgsIDM1MSwgMjA0OCB9LCAKKyAgIHsgNCwgMzUyLCAyMDQ4IH0sIHsgNSwgMzUzLCAyMDQ4IH0sIHsgNSwgMzU0LCAyMDQ4IH0sIHsgNiwgMzU1LCAyMDQ4IH0sIHsgNSwgMzU2LCAyMDQ4IH0sIHsgNiwgMzU3LCAyMDQ4IH0sIHsgNiwgMzU4LCAyMDQ4IH0sIHsgNywgMzU5LCAyMDQ4IH0sIAorICAgeyA1LCAzNjAsIDIwNDggfSwgeyA2LCAzNjEsIDIwNDggfSwgeyA2LCAzNjIsIDIwNDggfSwgeyA3LCAzNjMsIDIwNDggfSwgeyA2LCAzNjQsIDIwNDggfSwgeyA3LCAzNjUsIDIwNDggfSwgeyA3LCAzNjYsIDIwNDggfSwgeyA4LCAzNjcsIDIwNDggfSwgCisgICB7IDUsIDM2OCwgMjA0OCB9LCB7IDYsIDM2OSwgMjA0OCB9LCB7IDYsIDM3MCwgMjA0OCB9LCB7IDcsIDM3MSwgMjA0OCB9LCB7IDYsIDM3MiwgMjA0OCB9LCB7IDcsIDM3MywgMjA0OCB9LCB7IDcsIDM3NCwgMjA0OCB9LCB7IDgsIDM3NSwgMjA0OCB9LCAKKyAgIHsgNiwgMzc2LCAyMDQ4IH0sIHsgNywgMzc3LCAyMDQ4IH0sIHsgNywgMzc4LCAyMDQ4IH0sIHsgOCwgMzc5LCAyMDQ4IH0sIHsgNywgMzgwLCAyMDQ4IH0sIHsgOCwgMzgxLCAyMDQ4IH0sIHsgOCwgMzgyLCAyMDQ4IH0sIHsgOSwgMzgzLCAyMDQ4IH0sIAorICAgeyAzLCAzODQsIDIwNDggfSwgeyA0LCAzODUsIDIwNDggfSwgeyA0LCAzODYsIDIwNDggfSwgeyA1LCAzODcsIDIwNDggfSwgeyA0LCAzODgsIDIwNDggfSwgeyA1LCAzODksIDIwNDggfSwgeyA1LCAzOTAsIDIwNDggfSwgeyA2LCAzOTEsIDIwNDggfSwgCisgICB7IDQsIDM5MiwgMjA0OCB9LCB7IDUsIDM5MywgMjA0OCB9LCB7IDUsIDM5NCwgMjA0OCB9LCB7IDYsIDM5NSwgMjA0OCB9LCB7IDUsIDM5NiwgMjA0OCB9LCB7IDYsIDM5NywgMjA0OCB9LCB7IDYsIDM5OCwgMjA0OCB9LCB7IDcsIDM5OSwgMjA0OCB9LCAKKyAgIHsgNCwgNDAwLCAyMDQ4IH0sIHsgNSwgNDAxLCAyMDQ4IH0sIHsgNSwgNDAyLCAyMDQ4IH0sIHsgNiwgNDAzLCAyMDQ4IH0sIHsgNSwgNDA0LCAyMDQ4IH0sIHsgNiwgNDA1LCAyMDQ4IH0sIHsgNiwgNDA2LCAyMDQ4IH0sIHsgNywgNDA3LCAyMDQ4IH0sIAorICAgeyA1LCA0MDgsIDIwNDggfSwgeyA2LCA0MDksIDIwNDggfSwgeyA2LCA0MTAsIDIwNDggfSwgeyA3LCA0MTEsIDIwNDggfSwgeyA2LCA0MTIsIDIwNDggfSwgeyA3LCA0MTMsIDIwNDggfSwgeyA3LCA0MTQsIDIwNDggfSwgeyA4LCA0MTUsIDIwNDggfSwgCisgICB7IDQsIDQxNiwgMjA0OCB9LCB7IDUsIDQxNywgMjA0OCB9LCB7IDUsIDQxOCwgMjA0OCB9LCB7IDYsIDQxOSwgMjA0OCB9LCB7IDUsIDQyMCwgMjA0OCB9LCB7IDYsIDQyMSwgMjA0OCB9LCB7IDYsIDQyMiwgMjA0OCB9LCB7IDcsIDQyMywgMjA0OCB9LCAKKyAgIHsgNSwgNDI0LCAyMDQ4IH0sIHsgNiwgNDI1LCAyMDQ4IH0sIHsgNiwgNDI2LCAyMDQ4IH0sIHsgNywgNDI3LCAyMDQ4IH0sIHsgNiwgNDI4LCAyMDQ4IH0sIHsgNywgNDI5LCAyMDQ4IH0sIHsgNywgNDMwLCAyMDQ4IH0sIHsgOCwgNDMxLCAyMDQ4IH0sIAorICAgeyA1LCA0MzIsIDIwNDggfSwgeyA2LCA0MzMsIDIwNDggfSwgeyA2LCA0MzQsIDIwNDggfSwgeyA3LCA0MzUsIDIwNDggfSwgeyA2LCA0MzYsIDIwNDggfSwgeyA3LCA0MzcsIDIwNDggfSwgeyA3LCA0MzgsIDIwNDggfSwgeyA4LCA0MzksIDIwNDggfSwgCisgICB7IDYsIDQ0MCwgMjA0OCB9LCB7IDcsIDQ0MSwgMjA0OCB9LCB7IDcsIDQ0MiwgMjA0OCB9LCB7IDgsIDQ0MywgMjA0OCB9LCB7IDcsIDQ0NCwgMjA0OCB9LCB7IDgsIDQ0NSwgMjA0OCB9LCB7IDgsIDQ0NiwgMjA0OCB9LCB7IDksIDQ0NywgMjA0OCB9LCAKKyAgIHsgNCwgNDQ4LCAyMDQ4IH0sIHsgNSwgNDQ5LCAyMDQ4IH0sIHsgNSwgNDUwLCAyMDQ4IH0sIHsgNiwgNDUxLCAyMDQ4IH0sIHsgNSwgNDUyLCAyMDQ4IH0sIHsgNiwgNDUzLCAyMDQ4IH0sIHsgNiwgNDU0LCAyMDQ4IH0sIHsgNywgNDU1LCAyMDQ4IH0sIAorICAgeyA1LCA0NTYsIDIwNDggfSwgeyA2LCA0NTcsIDIwNDggfSwgeyA2LCA0NTgsIDIwNDggfSwgeyA3LCA0NTksIDIwNDggfSwgeyA2LCA0NjAsIDIwNDggfSwgeyA3LCA0NjEsIDIwNDggfSwgeyA3LCA0NjIsIDIwNDggfSwgeyA4LCA0NjMsIDIwNDggfSwgCisgICB7IDUsIDQ2NCwgMjA0OCB9LCB7IDYsIDQ2NSwgMjA0OCB9LCB7IDYsIDQ2NiwgMjA0OCB9LCB7IDcsIDQ2NywgMjA0OCB9LCB7IDYsIDQ2OCwgMjA0OCB9LCB7IDcsIDQ2OSwgMjA0OCB9LCB7IDcsIDQ3MCwgMjA0OCB9LCB7IDgsIDQ3MSwgMjA0OCB9LCAKKyAgIHsgNiwgNDcyLCAyMDQ4IH0sIHsgNywgNDczLCAyMDQ4IH0sIHsgNywgNDc0LCAyMDQ4IH0sIHsgOCwgNDc1LCAyMDQ4IH0sIHsgNywgNDc2LCAyMDQ4IH0sIHsgOCwgNDc3LCAyMDQ4IH0sIHsgOCwgNDc4LCAyMDQ4IH0sIHsgOSwgNDc5LCAyMDQ4IH0sIAorICAgeyA1LCA0ODAsIDIwNDggfSwgeyA2LCA0ODEsIDIwNDggfSwgeyA2LCA0ODIsIDIwNDggfSwgeyA3LCA0ODMsIDIwNDggfSwgeyA2LCA0ODQsIDIwNDggfSwgeyA3LCA0ODUsIDIwNDggfSwgeyA3LCA0ODYsIDIwNDggfSwgeyA4LCA0ODcsIDIwNDggfSwgCisgICB7IDYsIDQ4OCwgMjA0OCB9LCB7IDcsIDQ4OSwgMjA0OCB9LCB7IDcsIDQ5MCwgMjA0OCB9LCB7IDgsIDQ5MSwgMjA0OCB9LCB7IDcsIDQ5MiwgMjA0OCB9LCB7IDgsIDQ5MywgMjA0OCB9LCB7IDgsIDQ5NCwgMjA0OCB9LCB7IDksIDQ5NSwgMjA0OCB9LCAKKyAgIHsgNiwgNDk2LCAyMDQ4IH0sIHsgNywgNDk3LCAyMDQ4IH0sIHsgNywgNDk4LCAyMDQ4IH0sIHsgOCwgNDk5LCAyMDQ4IH0sIHsgNywgNTAwLCAyMDQ4IH0sIHsgOCwgNTAxLCAyMDQ4IH0sIHsgOCwgNTAyLCAyMDQ4IH0sIHsgOSwgNTAzLCAyMDQ4IH0sIAorICAgeyA3LCA1MDQsIDIwNDggfSwgeyA4LCA1MDUsIDIwNDggfSwgeyA4LCA1MDYsIDIwNDggfSwgeyA5LCA1MDcsIDIwNDggfSwgeyA4LCA1MDgsIDIwNDggfSwgeyA5LCA1MDksIDIwNDggfSwgeyA5LCA1MTAsIDIwNDggfSwgeyAxMCwgNTExLCAyMDQ4IH0sIAorICAgeyAyLCA1MTIsIDIwNDggfSwgeyAzLCA1MTMsIDIwNDggfSwgeyAzLCA1MTQsIDIwNDggfSwgeyA0LCA1MTUsIDIwNDggfSwgeyAzLCA1MTYsIDIwNDggfSwgeyA0LCA1MTcsIDIwNDggfSwgeyA0LCA1MTgsIDIwNDggfSwgeyA1LCA1MTksIDIwNDggfSwgCisgICB7IDMsIDUyMCwgMjA0OCB9LCB7IDQsIDUyMSwgMjA0OCB9LCB7IDQsIDUyMiwgMjA0OCB9LCB7IDUsIDUyMywgMjA0OCB9LCB7IDQsIDUyNCwgMjA0OCB9LCB7IDUsIDUyNSwgMjA0OCB9LCB7IDUsIDUyNiwgMjA0OCB9LCB7IDYsIDUyNywgMjA0OCB9LCAKKyAgIHsgMywgNTI4LCAyMDQ4IH0sIHsgNCwgNTI5LCAyMDQ4IH0sIHsgNCwgNTMwLCAyMDQ4IH0sIHsgNSwgNTMxLCAyMDQ4IH0sIHsgNCwgNTMyLCAyMDQ4IH0sIHsgNSwgNTMzLCAyMDQ4IH0sIHsgNSwgNTM0LCAyMDQ4IH0sIHsgNiwgNTM1LCAyMDQ4IH0sIAorICAgeyA0LCA1MzYsIDIwNDggfSwgeyA1LCA1MzcsIDIwNDggfSwgeyA1LCA1MzgsIDIwNDggfSwgeyA2LCA1MzksIDIwNDggfSwgeyA1LCA1NDAsIDIwNDggfSwgeyA2LCA1NDEsIDIwNDggfSwgeyA2LCA1NDIsIDIwNDggfSwgeyA3LCA1NDMsIDIwNDggfSwgCisgICB7IDMsIDU0NCwgMjA0OCB9LCB7IDQsIDU0NSwgMjA0OCB9LCB7IDQsIDU0NiwgMjA0OCB9LCB7IDUsIDU0NywgMjA0OCB9LCB7IDQsIDU0OCwgMjA0OCB9LCB7IDUsIDU0OSwgMjA0OCB9LCB7IDUsIDU1MCwgMjA0OCB9LCB7IDYsIDU1MSwgMjA0OCB9LCAKKyAgIHsgNCwgNTUyLCAyMDQ4IH0sIHsgNSwgNTUzLCAyMDQ4IH0sIHsgNSwgNTU0LCAyMDQ4IH0sIHsgNiwgNTU1LCAyMDQ4IH0sIHsgNSwgNTU2LCAyMDQ4IH0sIHsgNiwgNTU3LCAyMDQ4IH0sIHsgNiwgNTU4LCAyMDQ4IH0sIHsgNywgNTU5LCAyMDQ4IH0sIAorICAgeyA0LCA1NjAsIDIwNDggfSwgeyA1LCA1NjEsIDIwNDggfSwgeyA1LCA1NjIsIDIwNDggfSwgeyA2LCA1NjMsIDIwNDggfSwgeyA1LCA1NjQsIDIwNDggfSwgeyA2LCA1NjUsIDIwNDggfSwgeyA2LCA1NjYsIDIwNDggfSwgeyA3LCA1NjcsIDIwNDggfSwgCisgICB7IDUsIDU2OCwgMjA0OCB9LCB7IDYsIDU2OSwgMjA0OCB9LCB7IDYsIDU3MCwgMjA0OCB9LCB7IDcsIDU3MSwgMjA0OCB9LCB7IDYsIDU3MiwgMjA0OCB9LCB7IDcsIDU3MywgMjA0OCB9LCB7IDcsIDU3NCwgMjA0OCB9LCB7IDgsIDU3NSwgMjA0OCB9LCAKKyAgIHsgMywgNTc2LCAyMDQ4IH0sIHsgNCwgNTc3LCAyMDQ4IH0sIHsgNCwgNTc4LCAyMDQ4IH0sIHsgNSwgNTc5LCAyMDQ4IH0sIHsgNCwgNTgwLCAyMDQ4IH0sIHsgNSwgNTgxLCAyMDQ4IH0sIHsgNSwgNTgyLCAyMDQ4IH0sIHsgNiwgNTgzLCAyMDQ4IH0sIAorICAgeyA0LCA1ODQsIDIwNDggfSwgeyA1LCA1ODUsIDIwNDggfSwgeyA1LCA1ODYsIDIwNDggfSwgeyA2LCA1ODcsIDIwNDggfSwgeyA1LCA1ODgsIDIwNDggfSwgeyA2LCA1ODksIDIwNDggfSwgeyA2LCA1OTAsIDIwNDggfSwgeyA3LCA1OTEsIDIwNDggfSwgCisgICB7IDQsIDU5MiwgMjA0OCB9LCB7IDUsIDU5MywgMjA0OCB9LCB7IDUsIDU5NCwgMjA0OCB9LCB7IDYsIDU5NSwgMjA0OCB9LCB7IDUsIDU5NiwgMjA0OCB9LCB7IDYsIDU5NywgMjA0OCB9LCB7IDYsIDU5OCwgMjA0OCB9LCB7IDcsIDU5OSwgMjA0OCB9LCAKKyAgIHsgNSwgNjAwLCAyMDQ4IH0sIHsgNiwgNjAxLCAyMDQ4IH0sIHsgNiwgNjAyLCAyMDQ4IH0sIHsgNywgNjAzLCAyMDQ4IH0sIHsgNiwgNjA0LCAyMDQ4IH0sIHsgNywgNjA1LCAyMDQ4IH0sIHsgNywgNjA2LCAyMDQ4IH0sIHsgOCwgNjA3LCAyMDQ4IH0sIAorICAgeyA0LCA2MDgsIDIwNDggfSwgeyA1LCA2MDksIDIwNDggfSwgeyA1LCA2MTAsIDIwNDggfSwgeyA2LCA2MTEsIDIwNDggfSwgeyA1LCA2MTIsIDIwNDggfSwgeyA2LCA2MTMsIDIwNDggfSwgeyA2LCA2MTQsIDIwNDggfSwgeyA3LCA2MTUsIDIwNDggfSwgCisgICB7IDUsIDYxNiwgMjA0OCB9LCB7IDYsIDYxNywgMjA0OCB9LCB7IDYsIDYxOCwgMjA0OCB9LCB7IDcsIDYxOSwgMjA0OCB9LCB7IDYsIDYyMCwgMjA0OCB9LCB7IDcsIDYyMSwgMjA0OCB9LCB7IDcsIDYyMiwgMjA0OCB9LCB7IDgsIDYyMywgMjA0OCB9LCAKKyAgIHsgNSwgNjI0LCAyMDQ4IH0sIHsgNiwgNjI1LCAyMDQ4IH0sIHsgNiwgNjI2LCAyMDQ4IH0sIHsgNywgNjI3LCAyMDQ4IH0sIHsgNiwgNjI4LCAyMDQ4IH0sIHsgNywgNjI5LCAyMDQ4IH0sIHsgNywgNjMwLCAyMDQ4IH0sIHsgOCwgNjMxLCAyMDQ4IH0sIAorICAgeyA2LCA2MzIsIDIwNDggfSwgeyA3LCA2MzMsIDIwNDggfSwgeyA3LCA2MzQsIDIwNDggfSwgeyA4LCA2MzUsIDIwNDggfSwgeyA3LCA2MzYsIDIwNDggfSwgeyA4LCA2MzcsIDIwNDggfSwgeyA4LCA2MzgsIDIwNDggfSwgeyA5LCA2MzksIDIwNDggfSwgCisgICB7IDMsIDY0MCwgMjA0OCB9LCB7IDQsIDY0MSwgMjA0OCB9LCB7IDQsIDY0MiwgMjA0OCB9LCB7IDUsIDY0MywgMjA0OCB9LCB7IDQsIDY0NCwgMjA0OCB9LCB7IDUsIDY0NSwgMjA0OCB9LCB7IDUsIDY0NiwgMjA0OCB9LCB7IDYsIDY0NywgMjA0OCB9LCAKKyAgIHsgNCwgNjQ4LCAyMDQ4IH0sIHsgNSwgNjQ5LCAyMDQ4IH0sIHsgNSwgNjUwLCAyMDQ4IH0sIHsgNiwgNjUxLCAyMDQ4IH0sIHsgNSwgNjUyLCAyMDQ4IH0sIHsgNiwgNjUzLCAyMDQ4IH0sIHsgNiwgNjU0LCAyMDQ4IH0sIHsgNywgNjU1LCAyMDQ4IH0sIAorICAgeyA0LCA2NTYsIDIwNDggfSwgeyA1LCA2NTcsIDIwNDggfSwgeyA1LCA2NTgsIDIwNDggfSwgeyA2LCA2NTksIDIwNDggfSwgeyA1LCA2NjAsIDIwNDggfSwgeyA2LCA2NjEsIDIwNDggfSwgeyA2LCA2NjIsIDIwNDggfSwgeyA3LCA2NjMsIDIwNDggfSwgCisgICB7IDUsIDY2NCwgMjA0OCB9LCB7IDYsIDY2NSwgMjA0OCB9LCB7IDYsIDY2NiwgMjA0OCB9LCB7IDcsIDY2NywgMjA0OCB9LCB7IDYsIDY2OCwgMjA0OCB9LCB7IDcsIDY2OSwgMjA0OCB9LCB7IDcsIDY3MCwgMjA0OCB9LCB7IDgsIDY3MSwgMjA0OCB9LCAKKyAgIHsgNCwgNjcyLCAyMDQ4IH0sIHsgNSwgNjczLCAyMDQ4IH0sIHsgNSwgNjc0LCAyMDQ4IH0sIHsgNiwgNjc1LCAyMDQ4IH0sIHsgNSwgNjc2LCAyMDQ4IH0sIHsgNiwgNjc3LCAyMDQ4IH0sIHsgNiwgNjc4LCAyMDQ4IH0sIHsgNywgNjc5LCAyMDQ4IH0sIAorICAgeyA1LCA2ODAsIDIwNDggfSwgeyA2LCA2ODEsIDIwNDggfSwgeyA2LCA2ODIsIDIwNDggfSwgeyA3LCA2ODMsIDIwNDggfSwgeyA2LCA2ODQsIDIwNDggfSwgeyA3LCA2ODUsIDIwNDggfSwgeyA3LCA2ODYsIDIwNDggfSwgeyA4LCA2ODcsIDIwNDggfSwgCisgICB7IDUsIDY4OCwgMjA0OCB9LCB7IDYsIDY4OSwgMjA0OCB9LCB7IDYsIDY5MCwgMjA0OCB9LCB7IDcsIDY5MSwgMjA0OCB9LCB7IDYsIDY5MiwgMjA0OCB9LCB7IDcsIDY5MywgMjA0OCB9LCB7IDcsIDY5NCwgMjA0OCB9LCB7IDgsIDY5NSwgMjA0OCB9LCAKKyAgIHsgNiwgNjk2LCAyMDQ4IH0sIHsgNywgNjk3LCAyMDQ4IH0sIHsgNywgNjk4LCAyMDQ4IH0sIHsgOCwgNjk5LCAyMDQ4IH0sIHsgNywgNzAwLCAyMDQ4IH0sIHsgOCwgNzAxLCAyMDQ4IH0sIHsgOCwgNzAyLCAyMDQ4IH0sIHsgOSwgNzAzLCAyMDQ4IH0sIAorICAgeyA0LCA3MDQsIDIwNDggfSwgeyA1LCA3MDUsIDIwNDggfSwgeyA1LCA3MDYsIDIwNDggfSwgeyA2LCA3MDcsIDIwNDggfSwgeyA1LCA3MDgsIDIwNDggfSwgeyA2LCA3MDksIDIwNDggfSwgeyA2LCA3MTAsIDIwNDggfSwgeyA3LCA3MTEsIDIwNDggfSwgCisgICB7IDUsIDcxMiwgMjA0OCB9LCB7IDYsIDcxMywgMjA0OCB9LCB7IDYsIDcxNCwgMjA0OCB9LCB7IDcsIDcxNSwgMjA0OCB9LCB7IDYsIDcxNiwgMjA0OCB9LCB7IDcsIDcxNywgMjA0OCB9LCB7IDcsIDcxOCwgMjA0OCB9LCB7IDgsIDcxOSwgMjA0OCB9LCAKKyAgIHsgNSwgNzIwLCAyMDQ4IH0sIHsgNiwgNzIxLCAyMDQ4IH0sIHsgNiwgNzIyLCAyMDQ4IH0sIHsgNywgNzIzLCAyMDQ4IH0sIHsgNiwgNzI0LCAyMDQ4IH0sIHsgNywgNzI1LCAyMDQ4IH0sIHsgNywgNzI2LCAyMDQ4IH0sIHsgOCwgNzI3LCAyMDQ4IH0sIAorICAgeyA2LCA3MjgsIDIwNDggfSwgeyA3LCA3MjksIDIwNDggfSwgeyA3LCA3MzAsIDIwNDggfSwgeyA4LCA3MzEsIDIwNDggfSwgeyA3LCA3MzIsIDIwNDggfSwgeyA4LCA3MzMsIDIwNDggfSwgeyA4LCA3MzQsIDIwNDggfSwgeyA5LCA3MzUsIDIwNDggfSwgCisgICB7IDUsIDczNiwgMjA0OCB9LCB7IDYsIDczNywgMjA0OCB9LCB7IDYsIDczOCwgMjA0OCB9LCB7IDcsIDczOSwgMjA0OCB9LCB7IDYsIDc0MCwgMjA0OCB9LCB7IDcsIDc0MSwgMjA0OCB9LCB7IDcsIDc0MiwgMjA0OCB9LCB7IDgsIDc0MywgMjA0OCB9LCAKKyAgIHsgNiwgNzQ0LCAyMDQ4IH0sIHsgNywgNzQ1LCAyMDQ4IH0sIHsgNywgNzQ2LCAyMDQ4IH0sIHsgOCwgNzQ3LCAyMDQ4IH0sIHsgNywgNzQ4LCAyMDQ4IH0sIHsgOCwgNzQ5LCAyMDQ4IH0sIHsgOCwgNzUwLCAyMDQ4IH0sIHsgOSwgNzUxLCAyMDQ4IH0sIAorICAgeyA2LCA3NTIsIDIwNDggfSwgeyA3LCA3NTMsIDIwNDggfSwgeyA3LCA3NTQsIDIwNDggfSwgeyA4LCA3NTUsIDIwNDggfSwgeyA3LCA3NTYsIDIwNDggfSwgeyA4LCA3NTcsIDIwNDggfSwgeyA4LCA3NTgsIDIwNDggfSwgeyA5LCA3NTksIDIwNDggfSwgCisgICB7IDcsIDc2MCwgMjA0OCB9LCB7IDgsIDc2MSwgMjA0OCB9LCB7IDgsIDc2MiwgMjA0OCB9LCB7IDksIDc2MywgMjA0OCB9LCB7IDgsIDc2NCwgMjA0OCB9LCB7IDksIDc2NSwgMjA0OCB9LCB7IDksIDc2NiwgMjA0OCB9LCB7IDEwLCA3NjcsIDIwNDggfSwgCisgICB7IDMsIDc2OCwgMjA0OCB9LCB7IDQsIDc2OSwgMjA0OCB9LCB7IDQsIDc3MCwgMjA0OCB9LCB7IDUsIDc3MSwgMjA0OCB9LCB7IDQsIDc3MiwgMjA0OCB9LCB7IDUsIDc3MywgMjA0OCB9LCB7IDUsIDc3NCwgMjA0OCB9LCB7IDYsIDc3NSwgMjA0OCB9LCAKKyAgIHsgNCwgNzc2LCAyMDQ4IH0sIHsgNSwgNzc3LCAyMDQ4IH0sIHsgNSwgNzc4LCAyMDQ4IH0sIHsgNiwgNzc5LCAyMDQ4IH0sIHsgNSwgNzgwLCAyMDQ4IH0sIHsgNiwgNzgxLCAyMDQ4IH0sIHsgNiwgNzgyLCAyMDQ4IH0sIHsgNywgNzgzLCAyMDQ4IH0sIAorICAgeyA0LCA3ODQsIDIwNDggfSwgeyA1LCA3ODUsIDIwNDggfSwgeyA1LCA3ODYsIDIwNDggfSwgeyA2LCA3ODcsIDIwNDggfSwgeyA1LCA3ODgsIDIwNDggfSwgeyA2LCA3ODksIDIwNDggfSwgeyA2LCA3OTAsIDIwNDggfSwgeyA3LCA3OTEsIDIwNDggfSwgCisgICB7IDUsIDc5MiwgMjA0OCB9LCB7IDYsIDc5MywgMjA0OCB9LCB7IDYsIDc5NCwgMjA0OCB9LCB7IDcsIDc5NSwgMjA0OCB9LCB7IDYsIDc5NiwgMjA0OCB9LCB7IDcsIDc5NywgMjA0OCB9LCB7IDcsIDc5OCwgMjA0OCB9LCB7IDgsIDc5OSwgMjA0OCB9LCAKKyAgIHsgNCwgODAwLCAyMDQ4IH0sIHsgNSwgODAxLCAyMDQ4IH0sIHsgNSwgODAyLCAyMDQ4IH0sIHsgNiwgODAzLCAyMDQ4IH0sIHsgNSwgODA0LCAyMDQ4IH0sIHsgNiwgODA1LCAyMDQ4IH0sIHsgNiwgODA2LCAyMDQ4IH0sIHsgNywgODA3LCAyMDQ4IH0sIAorICAgeyA1LCA4MDgsIDIwNDggfSwgeyA2LCA4MDksIDIwNDggfSwgeyA2LCA4MTAsIDIwNDggfSwgeyA3LCA4MTEsIDIwNDggfSwgeyA2LCA4MTIsIDIwNDggfSwgeyA3LCA4MTMsIDIwNDggfSwgeyA3LCA4MTQsIDIwNDggfSwgeyA4LCA4MTUsIDIwNDggfSwgCisgICB7IDUsIDgxNiwgMjA0OCB9LCB7IDYsIDgxNywgMjA0OCB9LCB7IDYsIDgxOCwgMjA0OCB9LCB7IDcsIDgxOSwgMjA0OCB9LCB7IDYsIDgyMCwgMjA0OCB9LCB7IDcsIDgyMSwgMjA0OCB9LCB7IDcsIDgyMiwgMjA0OCB9LCB7IDgsIDgyMywgMjA0OCB9LCAKKyAgIHsgNiwgODI0LCAyMDQ4IH0sIHsgNywgODI1LCAyMDQ4IH0sIHsgNywgODI2LCAyMDQ4IH0sIHsgOCwgODI3LCAyMDQ4IH0sIHsgNywgODI4LCAyMDQ4IH0sIHsgOCwgODI5LCAyMDQ4IH0sIHsgOCwgODMwLCAyMDQ4IH0sIHsgOSwgODMxLCAyMDQ4IH0sIAorICAgeyA0LCA4MzIsIDIwNDggfSwgeyA1LCA4MzMsIDIwNDggfSwgeyA1LCA4MzQsIDIwNDggfSwgeyA2LCA4MzUsIDIwNDggfSwgeyA1LCA4MzYsIDIwNDggfSwgeyA2LCA4MzcsIDIwNDggfSwgeyA2LCA4MzgsIDIwNDggfSwgeyA3LCA4MzksIDIwNDggfSwgCisgICB7IDUsIDg0MCwgMjA0OCB9LCB7IDYsIDg0MSwgMjA0OCB9LCB7IDYsIDg0MiwgMjA0OCB9LCB7IDcsIDg0MywgMjA0OCB9LCB7IDYsIDg0NCwgMjA0OCB9LCB7IDcsIDg0NSwgMjA0OCB9LCB7IDcsIDg0NiwgMjA0OCB9LCB7IDgsIDg0NywgMjA0OCB9LCAKKyAgIHsgNSwgODQ4LCAyMDQ4IH0sIHsgNiwgODQ5LCAyMDQ4IH0sIHsgNiwgODUwLCAyMDQ4IH0sIHsgNywgODUxLCAyMDQ4IH0sIHsgNiwgODUyLCAyMDQ4IH0sIHsgNywgODUzLCAyMDQ4IH0sIHsgNywgODU0LCAyMDQ4IH0sIHsgOCwgODU1LCAyMDQ4IH0sIAorICAgeyA2LCA4NTYsIDIwNDggfSwgeyA3LCA4NTcsIDIwNDggfSwgeyA3LCA4NTgsIDIwNDggfSwgeyA4LCA4NTksIDIwNDggfSwgeyA3LCA4NjAsIDIwNDggfSwgeyA4LCA4NjEsIDIwNDggfSwgeyA4LCA4NjIsIDIwNDggfSwgeyA5LCA4NjMsIDIwNDggfSwgCisgICB7IDUsIDg2NCwgMjA0OCB9LCB7IDYsIDg2NSwgMjA0OCB9LCB7IDYsIDg2NiwgMjA0OCB9LCB7IDcsIDg2NywgMjA0OCB9LCB7IDYsIDg2OCwgMjA0OCB9LCB7IDcsIDg2OSwgMjA0OCB9LCB7IDcsIDg3MCwgMjA0OCB9LCB7IDgsIDg3MSwgMjA0OCB9LCAKKyAgIHsgNiwgODcyLCAyMDQ4IH0sIHsgNywgODczLCAyMDQ4IH0sIHsgNywgODc0LCAyMDQ4IH0sIHsgOCwgODc1LCAyMDQ4IH0sIHsgNywgODc2LCAyMDQ4IH0sIHsgOCwgODc3LCAyMDQ4IH0sIHsgOCwgODc4LCAyMDQ4IH0sIHsgOSwgODc5LCAyMDQ4IH0sIAorICAgeyA2LCA4ODAsIDIwNDggfSwgeyA3LCA4ODEsIDIwNDggfSwgeyA3LCA4ODIsIDIwNDggfSwgeyA4LCA4ODMsIDIwNDggfSwgeyA3LCA4ODQsIDIwNDggfSwgeyA4LCA4ODUsIDIwNDggfSwgeyA4LCA4ODYsIDIwNDggfSwgeyA5LCA4ODcsIDIwNDggfSwgCisgICB7IDcsIDg4OCwgMjA0OCB9LCB7IDgsIDg4OSwgMjA0OCB9LCB7IDgsIDg5MCwgMjA0OCB9LCB7IDksIDg5MSwgMjA0OCB9LCB7IDgsIDg5MiwgMjA0OCB9LCB7IDksIDg5MywgMjA0OCB9LCB7IDksIDg5NCwgMjA0OCB9LCB7IDEwLCA4OTUsIDIwNDggfSwgCisgICB7IDQsIDg5NiwgMjA0OCB9LCB7IDUsIDg5NywgMjA0OCB9LCB7IDUsIDg5OCwgMjA0OCB9LCB7IDYsIDg5OSwgMjA0OCB9LCB7IDUsIDkwMCwgMjA0OCB9LCB7IDYsIDkwMSwgMjA0OCB9LCB7IDYsIDkwMiwgMjA0OCB9LCB7IDcsIDkwMywgMjA0OCB9LCAKKyAgIHsgNSwgOTA0LCAyMDQ4IH0sIHsgNiwgOTA1LCAyMDQ4IH0sIHsgNiwgOTA2LCAyMDQ4IH0sIHsgNywgOTA3LCAyMDQ4IH0sIHsgNiwgOTA4LCAyMDQ4IH0sIHsgNywgOTA5LCAyMDQ4IH0sIHsgNywgOTEwLCAyMDQ4IH0sIHsgOCwgOTExLCAyMDQ4IH0sIAorICAgeyA1LCA5MTIsIDIwNDggfSwgeyA2LCA5MTMsIDIwNDggfSwgeyA2LCA5MTQsIDIwNDggfSwgeyA3LCA5MTUsIDIwNDggfSwgeyA2LCA5MTYsIDIwNDggfSwgeyA3LCA5MTcsIDIwNDggfSwgeyA3LCA5MTgsIDIwNDggfSwgeyA4LCA5MTksIDIwNDggfSwgCisgICB7IDYsIDkyMCwgMjA0OCB9LCB7IDcsIDkyMSwgMjA0OCB9LCB7IDcsIDkyMiwgMjA0OCB9LCB7IDgsIDkyMywgMjA0OCB9LCB7IDcsIDkyNCwgMjA0OCB9LCB7IDgsIDkyNSwgMjA0OCB9LCB7IDgsIDkyNiwgMjA0OCB9LCB7IDksIDkyNywgMjA0OCB9LCAKKyAgIHsgNSwgOTI4LCAyMDQ4IH0sIHsgNiwgOTI5LCAyMDQ4IH0sIHsgNiwgOTMwLCAyMDQ4IH0sIHsgNywgOTMxLCAyMDQ4IH0sIHsgNiwgOTMyLCAyMDQ4IH0sIHsgNywgOTMzLCAyMDQ4IH0sIHsgNywgOTM0LCAyMDQ4IH0sIHsgOCwgOTM1LCAyMDQ4IH0sIAorICAgeyA2LCA5MzYsIDIwNDggfSwgeyA3LCA5MzcsIDIwNDggfSwgeyA3LCA5MzgsIDIwNDggfSwgeyA4LCA5MzksIDIwNDggfSwgeyA3LCA5NDAsIDIwNDggfSwgeyA4LCA5NDEsIDIwNDggfSwgeyA4LCA5NDIsIDIwNDggfSwgeyA5LCA5NDMsIDIwNDggfSwgCisgICB7IDYsIDk0NCwgMjA0OCB9LCB7IDcsIDk0NSwgMjA0OCB9LCB7IDcsIDk0NiwgMjA0OCB9LCB7IDgsIDk0NywgMjA0OCB9LCB7IDcsIDk0OCwgMjA0OCB9LCB7IDgsIDk0OSwgMjA0OCB9LCB7IDgsIDk1MCwgMjA0OCB9LCB7IDksIDk1MSwgMjA0OCB9LCAKKyAgIHsgNywgOTUyLCAyMDQ4IH0sIHsgOCwgOTUzLCAyMDQ4IH0sIHsgOCwgOTU0LCAyMDQ4IH0sIHsgOSwgOTU1LCAyMDQ4IH0sIHsgOCwgOTU2LCAyMDQ4IH0sIHsgOSwgOTU3LCAyMDQ4IH0sIHsgOSwgOTU4LCAyMDQ4IH0sIHsgMTAsIDk1OSwgMjA0OCB9LCAKKyAgIHsgNSwgOTYwLCAyMDQ4IH0sIHsgNiwgOTYxLCAyMDQ4IH0sIHsgNiwgOTYyLCAyMDQ4IH0sIHsgNywgOTYzLCAyMDQ4IH0sIHsgNiwgOTY0LCAyMDQ4IH0sIHsgNywgOTY1LCAyMDQ4IH0sIHsgNywgOTY2LCAyMDQ4IH0sIHsgOCwgOTY3LCAyMDQ4IH0sIAorICAgeyA2LCA5NjgsIDIwNDggfSwgeyA3LCA5NjksIDIwNDggfSwgeyA3LCA5NzAsIDIwNDggfSwgeyA4LCA5NzEsIDIwNDggfSwgeyA3LCA5NzIsIDIwNDggfSwgeyA4LCA5NzMsIDIwNDggfSwgeyA4LCA5NzQsIDIwNDggfSwgeyA5LCA5NzUsIDIwNDggfSwgCisgICB7IDYsIDk3NiwgMjA0OCB9LCB7IDcsIDk3NywgMjA0OCB9LCB7IDcsIDk3OCwgMjA0OCB9LCB7IDgsIDk3OSwgMjA0OCB9LCB7IDcsIDk4MCwgMjA0OCB9LCB7IDgsIDk4MSwgMjA0OCB9LCB7IDgsIDk4MiwgMjA0OCB9LCB7IDksIDk4MywgMjA0OCB9LCAKKyAgIHsgNywgOTg0LCAyMDQ4IH0sIHsgOCwgOTg1LCAyMDQ4IH0sIHsgOCwgOTg2LCAyMDQ4IH0sIHsgOSwgOTg3LCAyMDQ4IH0sIHsgOCwgOTg4LCAyMDQ4IH0sIHsgOSwgOTg5LCAyMDQ4IH0sIHsgOSwgOTkwLCAyMDQ4IH0sIHsgMTAsIDk5MSwgMjA0OCB9LCAKKyAgIHsgNiwgOTkyLCAyMDQ4IH0sIHsgNywgOTkzLCAyMDQ4IH0sIHsgNywgOTk0LCAyMDQ4IH0sIHsgOCwgOTk1LCAyMDQ4IH0sIHsgNywgOTk2LCAyMDQ4IH0sIHsgOCwgOTk3LCAyMDQ4IH0sIHsgOCwgOTk4LCAyMDQ4IH0sIHsgOSwgOTk5LCAyMDQ4IH0sIAorICAgeyA3LCAxMDAwLCAyMDQ4IH0sIHsgOCwgMTAwMSwgMjA0OCB9LCB7IDgsIDEwMDIsIDIwNDggfSwgeyA5LCAxMDAzLCAyMDQ4IH0sIHsgOCwgMTAwNCwgMjA0OCB9LCB7IDksIDEwMDUsIDIwNDggfSwgeyA5LCAxMDA2LCAyMDQ4IH0sIHsgMTAsIDEwMDcsIDIwNDggfSwgCisgICB7IDcsIDEwMDgsIDIwNDggfSwgeyA4LCAxMDA5LCAyMDQ4IH0sIHsgOCwgMTAxMCwgMjA0OCB9LCB7IDksIDEwMTEsIDIwNDggfSwgeyA4LCAxMDEyLCAyMDQ4IH0sIHsgOSwgMTAxMywgMjA0OCB9LCB7IDksIDEwMTQsIDIwNDggfSwgeyAxMCwgMTAxNSwgMjA0OCB9LCAKKyAgIHsgOCwgMTAxNiwgMjA0OCB9LCB7IDksIDEwMTcsIDIwNDggfSwgeyA5LCAxMDE4LCAyMDQ4IH0sIHsgMTAsIDEwMTksIDIwNDggfSwgeyA5LCAxMDIwLCAyMDQ4IH0sIHsgMTAsIDEwMjEsIDIwNDggfSwgeyAxMCwgMTAyMiwgMjA0OCB9LCB7IDExLCAxMDIzLCAyMDQ4IH0sIAorICAgeyAyLCAxMDI0LCAyMDQ4IH0sIHsgMywgMTAyNSwgMjA0OCB9LCB7IDMsIDEwMjYsIDIwNDggfSwgeyA0LCAxMDI3LCAyMDQ4IH0sIHsgMywgMTAyOCwgMjA0OCB9LCB7IDQsIDEwMjksIDIwNDggfSwgeyA0LCAxMDMwLCAyMDQ4IH0sIHsgNSwgMTAzMSwgMjA0OCB9LCAKKyAgIHsgMywgMTAzMiwgMjA0OCB9LCB7IDQsIDEwMzMsIDIwNDggfSwgeyA0LCAxMDM0LCAyMDQ4IH0sIHsgNSwgMTAzNSwgMjA0OCB9LCB7IDQsIDEwMzYsIDIwNDggfSwgeyA1LCAxMDM3LCAyMDQ4IH0sIHsgNSwgMTAzOCwgMjA0OCB9LCB7IDYsIDEwMzksIDIwNDggfSwgCisgICB7IDMsIDEwNDAsIDIwNDggfSwgeyA0LCAxMDQxLCAyMDQ4IH0sIHsgNCwgMTA0MiwgMjA0OCB9LCB7IDUsIDEwNDMsIDIwNDggfSwgeyA0LCAxMDQ0LCAyMDQ4IH0sIHsgNSwgMTA0NSwgMjA0OCB9LCB7IDUsIDEwNDYsIDIwNDggfSwgeyA2LCAxMDQ3LCAyMDQ4IH0sIAorICAgeyA0LCAxMDQ4LCAyMDQ4IH0sIHsgNSwgMTA0OSwgMjA0OCB9LCB7IDUsIDEwNTAsIDIwNDggfSwgeyA2LCAxMDUxLCAyMDQ4IH0sIHsgNSwgMTA1MiwgMjA0OCB9LCB7IDYsIDEwNTMsIDIwNDggfSwgeyA2LCAxMDU0LCAyMDQ4IH0sIHsgNywgMTA1NSwgMjA0OCB9LCAKKyAgIHsgMywgMTA1NiwgMjA0OCB9LCB7IDQsIDEwNTcsIDIwNDggfSwgeyA0LCAxMDU4LCAyMDQ4IH0sIHsgNSwgMTA1OSwgMjA0OCB9LCB7IDQsIDEwNjAsIDIwNDggfSwgeyA1LCAxMDYxLCAyMDQ4IH0sIHsgNSwgMTA2MiwgMjA0OCB9LCB7IDYsIDEwNjMsIDIwNDggfSwgCisgICB7IDQsIDEwNjQsIDIwNDggfSwgeyA1LCAxMDY1LCAyMDQ4IH0sIHsgNSwgMTA2NiwgMjA0OCB9LCB7IDYsIDEwNjcsIDIwNDggfSwgeyA1LCAxMDY4LCAyMDQ4IH0sIHsgNiwgMTA2OSwgMjA0OCB9LCB7IDYsIDEwNzAsIDIwNDggfSwgeyA3LCAxMDcxLCAyMDQ4IH0sIAorICAgeyA0LCAxMDcyLCAyMDQ4IH0sIHsgNSwgMTA3MywgMjA0OCB9LCB7IDUsIDEwNzQsIDIwNDggfSwgeyA2LCAxMDc1LCAyMDQ4IH0sIHsgNSwgMTA3NiwgMjA0OCB9LCB7IDYsIDEwNzcsIDIwNDggfSwgeyA2LCAxMDc4LCAyMDQ4IH0sIHsgNywgMTA3OSwgMjA0OCB9LCAKKyAgIHsgNSwgMTA4MCwgMjA0OCB9LCB7IDYsIDEwODEsIDIwNDggfSwgeyA2LCAxMDgyLCAyMDQ4IH0sIHsgNywgMTA4MywgMjA0OCB9LCB7IDYsIDEwODQsIDIwNDggfSwgeyA3LCAxMDg1LCAyMDQ4IH0sIHsgNywgMTA4NiwgMjA0OCB9LCB7IDgsIDEwODcsIDIwNDggfSwgCisgICB7IDMsIDEwODgsIDIwNDggfSwgeyA0LCAxMDg5LCAyMDQ4IH0sIHsgNCwgMTA5MCwgMjA0OCB9LCB7IDUsIDEwOTEsIDIwNDggfSwgeyA0LCAxMDkyLCAyMDQ4IH0sIHsgNSwgMTA5MywgMjA0OCB9LCB7IDUsIDEwOTQsIDIwNDggfSwgeyA2LCAxMDk1LCAyMDQ4IH0sIAorICAgeyA0LCAxMDk2LCAyMDQ4IH0sIHsgNSwgMTA5NywgMjA0OCB9LCB7IDUsIDEwOTgsIDIwNDggfSwgeyA2LCAxMDk5LCAyMDQ4IH0sIHsgNSwgMTEwMCwgMjA0OCB9LCB7IDYsIDExMDEsIDIwNDggfSwgeyA2LCAxMTAyLCAyMDQ4IH0sIHsgNywgMTEwMywgMjA0OCB9LCAKKyAgIHsgNCwgMTEwNCwgMjA0OCB9LCB7IDUsIDExMDUsIDIwNDggfSwgeyA1LCAxMTA2LCAyMDQ4IH0sIHsgNiwgMTEwNywgMjA0OCB9LCB7IDUsIDExMDgsIDIwNDggfSwgeyA2LCAxMTA5LCAyMDQ4IH0sIHsgNiwgMTExMCwgMjA0OCB9LCB7IDcsIDExMTEsIDIwNDggfSwgCisgICB7IDUsIDExMTIsIDIwNDggfSwgeyA2LCAxMTEzLCAyMDQ4IH0sIHsgNiwgMTExNCwgMjA0OCB9LCB7IDcsIDExMTUsIDIwNDggfSwgeyA2LCAxMTE2LCAyMDQ4IH0sIHsgNywgMTExNywgMjA0OCB9LCB7IDcsIDExMTgsIDIwNDggfSwgeyA4LCAxMTE5LCAyMDQ4IH0sIAorICAgeyA0LCAxMTIwLCAyMDQ4IH0sIHsgNSwgMTEyMSwgMjA0OCB9LCB7IDUsIDExMjIsIDIwNDggfSwgeyA2LCAxMTIzLCAyMDQ4IH0sIHsgNSwgMTEyNCwgMjA0OCB9LCB7IDYsIDExMjUsIDIwNDggfSwgeyA2LCAxMTI2LCAyMDQ4IH0sIHsgNywgMTEyNywgMjA0OCB9LCAKKyAgIHsgNSwgMTEyOCwgMjA0OCB9LCB7IDYsIDExMjksIDIwNDggfSwgeyA2LCAxMTMwLCAyMDQ4IH0sIHsgNywgMTEzMSwgMjA0OCB9LCB7IDYsIDExMzIsIDIwNDggfSwgeyA3LCAxMTMzLCAyMDQ4IH0sIHsgNywgMTEzNCwgMjA0OCB9LCB7IDgsIDExMzUsIDIwNDggfSwgCisgICB7IDUsIDExMzYsIDIwNDggfSwgeyA2LCAxMTM3LCAyMDQ4IH0sIHsgNiwgMTEzOCwgMjA0OCB9LCB7IDcsIDExMzksIDIwNDggfSwgeyA2LCAxMTQwLCAyMDQ4IH0sIHsgNywgMTE0MSwgMjA0OCB9LCB7IDcsIDExNDIsIDIwNDggfSwgeyA4LCAxMTQzLCAyMDQ4IH0sIAorICAgeyA2LCAxMTQ0LCAyMDQ4IH0sIHsgNywgMTE0NSwgMjA0OCB9LCB7IDcsIDExNDYsIDIwNDggfSwgeyA4LCAxMTQ3LCAyMDQ4IH0sIHsgNywgMTE0OCwgMjA0OCB9LCB7IDgsIDExNDksIDIwNDggfSwgeyA4LCAxMTUwLCAyMDQ4IH0sIHsgOSwgMTE1MSwgMjA0OCB9LCAKKyAgIHsgMywgMTE1MiwgMjA0OCB9LCB7IDQsIDExNTMsIDIwNDggfSwgeyA0LCAxMTU0LCAyMDQ4IH0sIHsgNSwgMTE1NSwgMjA0OCB9LCB7IDQsIDExNTYsIDIwNDggfSwgeyA1LCAxMTU3LCAyMDQ4IH0sIHsgNSwgMTE1OCwgMjA0OCB9LCB7IDYsIDExNTksIDIwNDggfSwgCisgICB7IDQsIDExNjAsIDIwNDggfSwgeyA1LCAxMTYxLCAyMDQ4IH0sIHsgNSwgMTE2MiwgMjA0OCB9LCB7IDYsIDExNjMsIDIwNDggfSwgeyA1LCAxMTY0LCAyMDQ4IH0sIHsgNiwgMTE2NSwgMjA0OCB9LCB7IDYsIDExNjYsIDIwNDggfSwgeyA3LCAxMTY3LCAyMDQ4IH0sIAorICAgeyA0LCAxMTY4LCAyMDQ4IH0sIHsgNSwgMTE2OSwgMjA0OCB9LCB7IDUsIDExNzAsIDIwNDggfSwgeyA2LCAxMTcxLCAyMDQ4IH0sIHsgNSwgMTE3MiwgMjA0OCB9LCB7IDYsIDExNzMsIDIwNDggfSwgeyA2LCAxMTc0LCAyMDQ4IH0sIHsgNywgMTE3NSwgMjA0OCB9LCAKKyAgIHsgNSwgMTE3NiwgMjA0OCB9LCB7IDYsIDExNzcsIDIwNDggfSwgeyA2LCAxMTc4LCAyMDQ4IH0sIHsgNywgMTE3OSwgMjA0OCB9LCB7IDYsIDExODAsIDIwNDggfSwgeyA3LCAxMTgxLCAyMDQ4IH0sIHsgNywgMTE4MiwgMjA0OCB9LCB7IDgsIDExODMsIDIwNDggfSwgCisgICB7IDQsIDExODQsIDIwNDggfSwgeyA1LCAxMTg1LCAyMDQ4IH0sIHsgNSwgMTE4NiwgMjA0OCB9LCB7IDYsIDExODcsIDIwNDggfSwgeyA1LCAxMTg4LCAyMDQ4IH0sIHsgNiwgMTE4OSwgMjA0OCB9LCB7IDYsIDExOTAsIDIwNDggfSwgeyA3LCAxMTkxLCAyMDQ4IH0sIAorICAgeyA1LCAxMTkyLCAyMDQ4IH0sIHsgNiwgMTE5MywgMjA0OCB9LCB7IDYsIDExOTQsIDIwNDggfSwgeyA3LCAxMTk1LCAyMDQ4IH0sIHsgNiwgMTE5NiwgMjA0OCB9LCB7IDcsIDExOTcsIDIwNDggfSwgeyA3LCAxMTk4LCAyMDQ4IH0sIHsgOCwgMTE5OSwgMjA0OCB9LCAKKyAgIHsgNSwgMTIwMCwgMjA0OCB9LCB7IDYsIDEyMDEsIDIwNDggfSwgeyA2LCAxMjAyLCAyMDQ4IH0sIHsgNywgMTIwMywgMjA0OCB9LCB7IDYsIDEyMDQsIDIwNDggfSwgeyA3LCAxMjA1LCAyMDQ4IH0sIHsgNywgMTIwNiwgMjA0OCB9LCB7IDgsIDEyMDcsIDIwNDggfSwgCisgICB7IDYsIDEyMDgsIDIwNDggfSwgeyA3LCAxMjA5LCAyMDQ4IH0sIHsgNywgMTIxMCwgMjA0OCB9LCB7IDgsIDEyMTEsIDIwNDggfSwgeyA3LCAxMjEyLCAyMDQ4IH0sIHsgOCwgMTIxMywgMjA0OCB9LCB7IDgsIDEyMTQsIDIwNDggfSwgeyA5LCAxMjE1LCAyMDQ4IH0sIAorICAgeyA0LCAxMjE2LCAyMDQ4IH0sIHsgNSwgMTIxNywgMjA0OCB9LCB7IDUsIDEyMTgsIDIwNDggfSwgeyA2LCAxMjE5LCAyMDQ4IH0sIHsgNSwgMTIyMCwgMjA0OCB9LCB7IDYsIDEyMjEsIDIwNDggfSwgeyA2LCAxMjIyLCAyMDQ4IH0sIHsgNywgMTIyMywgMjA0OCB9LCAKKyAgIHsgNSwgMTIyNCwgMjA0OCB9LCB7IDYsIDEyMjUsIDIwNDggfSwgeyA2LCAxMjI2LCAyMDQ4IH0sIHsgNywgMTIyNywgMjA0OCB9LCB7IDYsIDEyMjgsIDIwNDggfSwgeyA3LCAxMjI5LCAyMDQ4IH0sIHsgNywgMTIzMCwgMjA0OCB9LCB7IDgsIDEyMzEsIDIwNDggfSwgCisgICB7IDUsIDEyMzIsIDIwNDggfSwgeyA2LCAxMjMzLCAyMDQ4IH0sIHsgNiwgMTIzNCwgMjA0OCB9LCB7IDcsIDEyMzUsIDIwNDggfSwgeyA2LCAxMjM2LCAyMDQ4IH0sIHsgNywgMTIzNywgMjA0OCB9LCB7IDcsIDEyMzgsIDIwNDggfSwgeyA4LCAxMjM5LCAyMDQ4IH0sIAorICAgeyA2LCAxMjQwLCAyMDQ4IH0sIHsgNywgMTI0MSwgMjA0OCB9LCB7IDcsIDEyNDIsIDIwNDggfSwgeyA4LCAxMjQzLCAyMDQ4IH0sIHsgNywgMTI0NCwgMjA0OCB9LCB7IDgsIDEyNDUsIDIwNDggfSwgeyA4LCAxMjQ2LCAyMDQ4IH0sIHsgOSwgMTI0NywgMjA0OCB9LCAKKyAgIHsgNSwgMTI0OCwgMjA0OCB9LCB7IDYsIDEyNDksIDIwNDggfSwgeyA2LCAxMjUwLCAyMDQ4IH0sIHsgNywgMTI1MSwgMjA0OCB9LCB7IDYsIDEyNTIsIDIwNDggfSwgeyA3LCAxMjUzLCAyMDQ4IH0sIHsgNywgMTI1NCwgMjA0OCB9LCB7IDgsIDEyNTUsIDIwNDggfSwgCisgICB7IDYsIDEyNTYsIDIwNDggfSwgeyA3LCAxMjU3LCAyMDQ4IH0sIHsgNywgMTI1OCwgMjA0OCB9LCB7IDgsIDEyNTksIDIwNDggfSwgeyA3LCAxMjYwLCAyMDQ4IH0sIHsgOCwgMTI2MSwgMjA0OCB9LCB7IDgsIDEyNjIsIDIwNDggfSwgeyA5LCAxMjYzLCAyMDQ4IH0sIAorICAgeyA2LCAxMjY0LCAyMDQ4IH0sIHsgNywgMTI2NSwgMjA0OCB9LCB7IDcsIDEyNjYsIDIwNDggfSwgeyA4LCAxMjY3LCAyMDQ4IH0sIHsgNywgMTI2OCwgMjA0OCB9LCB7IDgsIDEyNjksIDIwNDggfSwgeyA4LCAxMjcwLCAyMDQ4IH0sIHsgOSwgMTI3MSwgMjA0OCB9LCAKKyAgIHsgNywgMTI3MiwgMjA0OCB9LCB7IDgsIDEyNzMsIDIwNDggfSwgeyA4LCAxMjc0LCAyMDQ4IH0sIHsgOSwgMTI3NSwgMjA0OCB9LCB7IDgsIDEyNzYsIDIwNDggfSwgeyA5LCAxMjc3LCAyMDQ4IH0sIHsgOSwgMTI3OCwgMjA0OCB9LCB7IDEwLCAxMjc5LCAyMDQ4IH0sIAorICAgeyAzLCAxMjgwLCAyMDQ4IH0sIHsgNCwgMTI4MSwgMjA0OCB9LCB7IDQsIDEyODIsIDIwNDggfSwgeyA1LCAxMjgzLCAyMDQ4IH0sIHsgNCwgMTI4NCwgMjA0OCB9LCB7IDUsIDEyODUsIDIwNDggfSwgeyA1LCAxMjg2LCAyMDQ4IH0sIHsgNiwgMTI4NywgMjA0OCB9LCAKKyAgIHsgNCwgMTI4OCwgMjA0OCB9LCB7IDUsIDEyODksIDIwNDggfSwgeyA1LCAxMjkwLCAyMDQ4IH0sIHsgNiwgMTI5MSwgMjA0OCB9LCB7IDUsIDEyOTIsIDIwNDggfSwgeyA2LCAxMjkzLCAyMDQ4IH0sIHsgNiwgMTI5NCwgMjA0OCB9LCB7IDcsIDEyOTUsIDIwNDggfSwgCisgICB7IDQsIDEyOTYsIDIwNDggfSwgeyA1LCAxMjk3LCAyMDQ4IH0sIHsgNSwgMTI5OCwgMjA0OCB9LCB7IDYsIDEyOTksIDIwNDggfSwgeyA1LCAxMzAwLCAyMDQ4IH0sIHsgNiwgMTMwMSwgMjA0OCB9LCB7IDYsIDEzMDIsIDIwNDggfSwgeyA3LCAxMzAzLCAyMDQ4IH0sIAorICAgeyA1LCAxMzA0LCAyMDQ4IH0sIHsgNiwgMTMwNSwgMjA0OCB9LCB7IDYsIDEzMDYsIDIwNDggfSwgeyA3LCAxMzA3LCAyMDQ4IH0sIHsgNiwgMTMwOCwgMjA0OCB9LCB7IDcsIDEzMDksIDIwNDggfSwgeyA3LCAxMzEwLCAyMDQ4IH0sIHsgOCwgMTMxMSwgMjA0OCB9LCAKKyAgIHsgNCwgMTMxMiwgMjA0OCB9LCB7IDUsIDEzMTMsIDIwNDggfSwgeyA1LCAxMzE0LCAyMDQ4IH0sIHsgNiwgMTMxNSwgMjA0OCB9LCB7IDUsIDEzMTYsIDIwNDggfSwgeyA2LCAxMzE3LCAyMDQ4IH0sIHsgNiwgMTMxOCwgMjA0OCB9LCB7IDcsIDEzMTksIDIwNDggfSwgCisgICB7IDUsIDEzMjAsIDIwNDggfSwgeyA2LCAxMzIxLCAyMDQ4IH0sIHsgNiwgMTMyMiwgMjA0OCB9LCB7IDcsIDEzMjMsIDIwNDggfSwgeyA2LCAxMzI0LCAyMDQ4IH0sIHsgNywgMTMyNSwgMjA0OCB9LCB7IDcsIDEzMjYsIDIwNDggfSwgeyA4LCAxMzI3LCAyMDQ4IH0sIAorICAgeyA1LCAxMzI4LCAyMDQ4IH0sIHsgNiwgMTMyOSwgMjA0OCB9LCB7IDYsIDEzMzAsIDIwNDggfSwgeyA3LCAxMzMxLCAyMDQ4IH0sIHsgNiwgMTMzMiwgMjA0OCB9LCB7IDcsIDEzMzMsIDIwNDggfSwgeyA3LCAxMzM0LCAyMDQ4IH0sIHsgOCwgMTMzNSwgMjA0OCB9LCAKKyAgIHsgNiwgMTMzNiwgMjA0OCB9LCB7IDcsIDEzMzcsIDIwNDggfSwgeyA3LCAxMzM4LCAyMDQ4IH0sIHsgOCwgMTMzOSwgMjA0OCB9LCB7IDcsIDEzNDAsIDIwNDggfSwgeyA4LCAxMzQxLCAyMDQ4IH0sIHsgOCwgMTM0MiwgMjA0OCB9LCB7IDksIDEzNDMsIDIwNDggfSwgCisgICB7IDQsIDEzNDQsIDIwNDggfSwgeyA1LCAxMzQ1LCAyMDQ4IH0sIHsgNSwgMTM0NiwgMjA0OCB9LCB7IDYsIDEzNDcsIDIwNDggfSwgeyA1LCAxMzQ4LCAyMDQ4IH0sIHsgNiwgMTM0OSwgMjA0OCB9LCB7IDYsIDEzNTAsIDIwNDggfSwgeyA3LCAxMzUxLCAyMDQ4IH0sIAorICAgeyA1LCAxMzUyLCAyMDQ4IH0sIHsgNiwgMTM1MywgMjA0OCB9LCB7IDYsIDEzNTQsIDIwNDggfSwgeyA3LCAxMzU1LCAyMDQ4IH0sIHsgNiwgMTM1NiwgMjA0OCB9LCB7IDcsIDEzNTcsIDIwNDggfSwgeyA3LCAxMzU4LCAyMDQ4IH0sIHsgOCwgMTM1OSwgMjA0OCB9LCAKKyAgIHsgNSwgMTM2MCwgMjA0OCB9LCB7IDYsIDEzNjEsIDIwNDggfSwgeyA2LCAxMzYyLCAyMDQ4IH0sIHsgNywgMTM2MywgMjA0OCB9LCB7IDYsIDEzNjQsIDIwNDggfSwgeyA3LCAxMzY1LCAyMDQ4IH0sIHsgNywgMTM2NiwgMjA0OCB9LCB7IDgsIDEzNjcsIDIwNDggfSwgCisgICB7IDYsIDEzNjgsIDIwNDggfSwgeyA3LCAxMzY5LCAyMDQ4IH0sIHsgNywgMTM3MCwgMjA0OCB9LCB7IDgsIDEzNzEsIDIwNDggfSwgeyA3LCAxMzcyLCAyMDQ4IH0sIHsgOCwgMTM3MywgMjA0OCB9LCB7IDgsIDEzNzQsIDIwNDggfSwgeyA5LCAxMzc1LCAyMDQ4IH0sIAorICAgeyA1LCAxMzc2LCAyMDQ4IH0sIHsgNiwgMTM3NywgMjA0OCB9LCB7IDYsIDEzNzgsIDIwNDggfSwgeyA3LCAxMzc5LCAyMDQ4IH0sIHsgNiwgMTM4MCwgMjA0OCB9LCB7IDcsIDEzODEsIDIwNDggfSwgeyA3LCAxMzgyLCAyMDQ4IH0sIHsgOCwgMTM4MywgMjA0OCB9LCAKKyAgIHsgNiwgMTM4NCwgMjA0OCB9LCB7IDcsIDEzODUsIDIwNDggfSwgeyA3LCAxMzg2LCAyMDQ4IH0sIHsgOCwgMTM4NywgMjA0OCB9LCB7IDcsIDEzODgsIDIwNDggfSwgeyA4LCAxMzg5LCAyMDQ4IH0sIHsgOCwgMTM5MCwgMjA0OCB9LCB7IDksIDEzOTEsIDIwNDggfSwgCisgICB7IDYsIDEzOTIsIDIwNDggfSwgeyA3LCAxMzkzLCAyMDQ4IH0sIHsgNywgMTM5NCwgMjA0OCB9LCB7IDgsIDEzOTUsIDIwNDggfSwgeyA3LCAxMzk2LCAyMDQ4IH0sIHsgOCwgMTM5NywgMjA0OCB9LCB7IDgsIDEzOTgsIDIwNDggfSwgeyA5LCAxMzk5LCAyMDQ4IH0sIAorICAgeyA3LCAxNDAwLCAyMDQ4IH0sIHsgOCwgMTQwMSwgMjA0OCB9LCB7IDgsIDE0MDIsIDIwNDggfSwgeyA5LCAxNDAzLCAyMDQ4IH0sIHsgOCwgMTQwNCwgMjA0OCB9LCB7IDksIDE0MDUsIDIwNDggfSwgeyA5LCAxNDA2LCAyMDQ4IH0sIHsgMTAsIDE0MDcsIDIwNDggfSwgCisgICB7IDQsIDE0MDgsIDIwNDggfSwgeyA1LCAxNDA5LCAyMDQ4IH0sIHsgNSwgMTQxMCwgMjA0OCB9LCB7IDYsIDE0MTEsIDIwNDggfSwgeyA1LCAxNDEyLCAyMDQ4IH0sIHsgNiwgMTQxMywgMjA0OCB9LCB7IDYsIDE0MTQsIDIwNDggfSwgeyA3LCAxNDE1LCAyMDQ4IH0sIAorICAgeyA1LCAxNDE2LCAyMDQ4IH0sIHsgNiwgMTQxNywgMjA0OCB9LCB7IDYsIDE0MTgsIDIwNDggfSwgeyA3LCAxNDE5LCAyMDQ4IH0sIHsgNiwgMTQyMCwgMjA0OCB9LCB7IDcsIDE0MjEsIDIwNDggfSwgeyA3LCAxNDIyLCAyMDQ4IH0sIHsgOCwgMTQyMywgMjA0OCB9LCAKKyAgIHsgNSwgMTQyNCwgMjA0OCB9LCB7IDYsIDE0MjUsIDIwNDggfSwgeyA2LCAxNDI2LCAyMDQ4IH0sIHsgNywgMTQyNywgMjA0OCB9LCB7IDYsIDE0MjgsIDIwNDggfSwgeyA3LCAxNDI5LCAyMDQ4IH0sIHsgNywgMTQzMCwgMjA0OCB9LCB7IDgsIDE0MzEsIDIwNDggfSwgCisgICB7IDYsIDE0MzIsIDIwNDggfSwgeyA3LCAxNDMzLCAyMDQ4IH0sIHsgNywgMTQzNCwgMjA0OCB9LCB7IDgsIDE0MzUsIDIwNDggfSwgeyA3LCAxNDM2LCAyMDQ4IH0sIHsgOCwgMTQzNywgMjA0OCB9LCB7IDgsIDE0MzgsIDIwNDggfSwgeyA5LCAxNDM5LCAyMDQ4IH0sIAorICAgeyA1LCAxNDQwLCAyMDQ4IH0sIHsgNiwgMTQ0MSwgMjA0OCB9LCB7IDYsIDE0NDIsIDIwNDggfSwgeyA3LCAxNDQzLCAyMDQ4IH0sIHsgNiwgMTQ0NCwgMjA0OCB9LCB7IDcsIDE0NDUsIDIwNDggfSwgeyA3LCAxNDQ2LCAyMDQ4IH0sIHsgOCwgMTQ0NywgMjA0OCB9LCAKKyAgIHsgNiwgMTQ0OCwgMjA0OCB9LCB7IDcsIDE0NDksIDIwNDggfSwgeyA3LCAxNDUwLCAyMDQ4IH0sIHsgOCwgMTQ1MSwgMjA0OCB9LCB7IDcsIDE0NTIsIDIwNDggfSwgeyA4LCAxNDUzLCAyMDQ4IH0sIHsgOCwgMTQ1NCwgMjA0OCB9LCB7IDksIDE0NTUsIDIwNDggfSwgCisgICB7IDYsIDE0NTYsIDIwNDggfSwgeyA3LCAxNDU3LCAyMDQ4IH0sIHsgNywgMTQ1OCwgMjA0OCB9LCB7IDgsIDE0NTksIDIwNDggfSwgeyA3LCAxNDYwLCAyMDQ4IH0sIHsgOCwgMTQ2MSwgMjA0OCB9LCB7IDgsIDE0NjIsIDIwNDggfSwgeyA5LCAxNDYzLCAyMDQ4IH0sIAorICAgeyA3LCAxNDY0LCAyMDQ4IH0sIHsgOCwgMTQ2NSwgMjA0OCB9LCB7IDgsIDE0NjYsIDIwNDggfSwgeyA5LCAxNDY3LCAyMDQ4IH0sIHsgOCwgMTQ2OCwgMjA0OCB9LCB7IDksIDE0NjksIDIwNDggfSwgeyA5LCAxNDcwLCAyMDQ4IH0sIHsgMTAsIDE0NzEsIDIwNDggfSwgCisgICB7IDUsIDE0NzIsIDIwNDggfSwgeyA2LCAxNDczLCAyMDQ4IH0sIHsgNiwgMTQ3NCwgMjA0OCB9LCB7IDcsIDE0NzUsIDIwNDggfSwgeyA2LCAxNDc2LCAyMDQ4IH0sIHsgNywgMTQ3NywgMjA0OCB9LCB7IDcsIDE0NzgsIDIwNDggfSwgeyA4LCAxNDc5LCAyMDQ4IH0sIAorICAgeyA2LCAxNDgwLCAyMDQ4IH0sIHsgNywgMTQ4MSwgMjA0OCB9LCB7IDcsIDE0ODIsIDIwNDggfSwgeyA4LCAxNDgzLCAyMDQ4IH0sIHsgNywgMTQ4NCwgMjA0OCB9LCB7IDgsIDE0ODUsIDIwNDggfSwgeyA4LCAxNDg2LCAyMDQ4IH0sIHsgOSwgMTQ4NywgMjA0OCB9LCAKKyAgIHsgNiwgMTQ4OCwgMjA0OCB9LCB7IDcsIDE0ODksIDIwNDggfSwgeyA3LCAxNDkwLCAyMDQ4IH0sIHsgOCwgMTQ5MSwgMjA0OCB9LCB7IDcsIDE0OTIsIDIwNDggfSwgeyA4LCAxNDkzLCAyMDQ4IH0sIHsgOCwgMTQ5NCwgMjA0OCB9LCB7IDksIDE0OTUsIDIwNDggfSwgCisgICB7IDcsIDE0OTYsIDIwNDggfSwgeyA4LCAxNDk3LCAyMDQ4IH0sIHsgOCwgMTQ5OCwgMjA0OCB9LCB7IDksIDE0OTksIDIwNDggfSwgeyA4LCAxNTAwLCAyMDQ4IH0sIHsgOSwgMTUwMSwgMjA0OCB9LCB7IDksIDE1MDIsIDIwNDggfSwgeyAxMCwgMTUwMywgMjA0OCB9LCAKKyAgIHsgNiwgMTUwNCwgMjA0OCB9LCB7IDcsIDE1MDUsIDIwNDggfSwgeyA3LCAxNTA2LCAyMDQ4IH0sIHsgOCwgMTUwNywgMjA0OCB9LCB7IDcsIDE1MDgsIDIwNDggfSwgeyA4LCAxNTA5LCAyMDQ4IH0sIHsgOCwgMTUxMCwgMjA0OCB9LCB7IDksIDE1MTEsIDIwNDggfSwgCisgICB7IDcsIDE1MTIsIDIwNDggfSwgeyA4LCAxNTEzLCAyMDQ4IH0sIHsgOCwgMTUxNCwgMjA0OCB9LCB7IDksIDE1MTUsIDIwNDggfSwgeyA4LCAxNTE2LCAyMDQ4IH0sIHsgOSwgMTUxNywgMjA0OCB9LCB7IDksIDE1MTgsIDIwNDggfSwgeyAxMCwgMTUxOSwgMjA0OCB9LCAKKyAgIHsgNywgMTUyMCwgMjA0OCB9LCB7IDgsIDE1MjEsIDIwNDggfSwgeyA4LCAxNTIyLCAyMDQ4IH0sIHsgOSwgMTUyMywgMjA0OCB9LCB7IDgsIDE1MjQsIDIwNDggfSwgeyA5LCAxNTI1LCAyMDQ4IH0sIHsgOSwgMTUyNiwgMjA0OCB9LCB7IDEwLCAxNTI3LCAyMDQ4IH0sIAorICAgeyA4LCAxNTI4LCAyMDQ4IH0sIHsgOSwgMTUyOSwgMjA0OCB9LCB7IDksIDE1MzAsIDIwNDggfSwgeyAxMCwgMTUzMSwgMjA0OCB9LCB7IDksIDE1MzIsIDIwNDggfSwgeyAxMCwgMTUzMywgMjA0OCB9LCB7IDEwLCAxNTM0LCAyMDQ4IH0sIHsgMTEsIDE1MzUsIDIwNDggfSwgCisgICB7IDMsIDE1MzYsIDIwNDggfSwgeyA0LCAxNTM3LCAyMDQ4IH0sIHsgNCwgMTUzOCwgMjA0OCB9LCB7IDUsIDE1MzksIDIwNDggfSwgeyA0LCAxNTQwLCAyMDQ4IH0sIHsgNSwgMTU0MSwgMjA0OCB9LCB7IDUsIDE1NDIsIDIwNDggfSwgeyA2LCAxNTQzLCAyMDQ4IH0sIAorICAgeyA0LCAxNTQ0LCAyMDQ4IH0sIHsgNSwgMTU0NSwgMjA0OCB9LCB7IDUsIDE1NDYsIDIwNDggfSwgeyA2LCAxNTQ3LCAyMDQ4IH0sIHsgNSwgMTU0OCwgMjA0OCB9LCB7IDYsIDE1NDksIDIwNDggfSwgeyA2LCAxNTUwLCAyMDQ4IH0sIHsgNywgMTU1MSwgMjA0OCB9LCAKKyAgIHsgNCwgMTU1MiwgMjA0OCB9LCB7IDUsIDE1NTMsIDIwNDggfSwgeyA1LCAxNTU0LCAyMDQ4IH0sIHsgNiwgMTU1NSwgMjA0OCB9LCB7IDUsIDE1NTYsIDIwNDggfSwgeyA2LCAxNTU3LCAyMDQ4IH0sIHsgNiwgMTU1OCwgMjA0OCB9LCB7IDcsIDE1NTksIDIwNDggfSwgCisgICB7IDUsIDE1NjAsIDIwNDggfSwgeyA2LCAxNTYxLCAyMDQ4IH0sIHsgNiwgMTU2MiwgMjA0OCB9LCB7IDcsIDE1NjMsIDIwNDggfSwgeyA2LCAxNTY0LCAyMDQ4IH0sIHsgNywgMTU2NSwgMjA0OCB9LCB7IDcsIDE1NjYsIDIwNDggfSwgeyA4LCAxNTY3LCAyMDQ4IH0sIAorICAgeyA0LCAxNTY4LCAyMDQ4IH0sIHsgNSwgMTU2OSwgMjA0OCB9LCB7IDUsIDE1NzAsIDIwNDggfSwgeyA2LCAxNTcxLCAyMDQ4IH0sIHsgNSwgMTU3MiwgMjA0OCB9LCB7IDYsIDE1NzMsIDIwNDggfSwgeyA2LCAxNTc0LCAyMDQ4IH0sIHsgNywgMTU3NSwgMjA0OCB9LCAKKyAgIHsgNSwgMTU3NiwgMjA0OCB9LCB7IDYsIDE1NzcsIDIwNDggfSwgeyA2LCAxNTc4LCAyMDQ4IH0sIHsgNywgMTU3OSwgMjA0OCB9LCB7IDYsIDE1ODAsIDIwNDggfSwgeyA3LCAxNTgxLCAyMDQ4IH0sIHsgNywgMTU4MiwgMjA0OCB9LCB7IDgsIDE1ODMsIDIwNDggfSwgCisgICB7IDUsIDE1ODQsIDIwNDggfSwgeyA2LCAxNTg1LCAyMDQ4IH0sIHsgNiwgMTU4NiwgMjA0OCB9LCB7IDcsIDE1ODcsIDIwNDggfSwgeyA2LCAxNTg4LCAyMDQ4IH0sIHsgNywgMTU4OSwgMjA0OCB9LCB7IDcsIDE1OTAsIDIwNDggfSwgeyA4LCAxNTkxLCAyMDQ4IH0sIAorICAgeyA2LCAxNTkyLCAyMDQ4IH0sIHsgNywgMTU5MywgMjA0OCB9LCB7IDcsIDE1OTQsIDIwNDggfSwgeyA4LCAxNTk1LCAyMDQ4IH0sIHsgNywgMTU5NiwgMjA0OCB9LCB7IDgsIDE1OTcsIDIwNDggfSwgeyA4LCAxNTk4LCAyMDQ4IH0sIHsgOSwgMTU5OSwgMjA0OCB9LCAKKyAgIHsgNCwgMTYwMCwgMjA0OCB9LCB7IDUsIDE2MDEsIDIwNDggfSwgeyA1LCAxNjAyLCAyMDQ4IH0sIHsgNiwgMTYwMywgMjA0OCB9LCB7IDUsIDE2MDQsIDIwNDggfSwgeyA2LCAxNjA1LCAyMDQ4IH0sIHsgNiwgMTYwNiwgMjA0OCB9LCB7IDcsIDE2MDcsIDIwNDggfSwgCisgICB7IDUsIDE2MDgsIDIwNDggfSwgeyA2LCAxNjA5LCAyMDQ4IH0sIHsgNiwgMTYxMCwgMjA0OCB9LCB7IDcsIDE2MTEsIDIwNDggfSwgeyA2LCAxNjEyLCAyMDQ4IH0sIHsgNywgMTYxMywgMjA0OCB9LCB7IDcsIDE2MTQsIDIwNDggfSwgeyA4LCAxNjE1LCAyMDQ4IH0sIAorICAgeyA1LCAxNjE2LCAyMDQ4IH0sIHsgNiwgMTYxNywgMjA0OCB9LCB7IDYsIDE2MTgsIDIwNDggfSwgeyA3LCAxNjE5LCAyMDQ4IH0sIHsgNiwgMTYyMCwgMjA0OCB9LCB7IDcsIDE2MjEsIDIwNDggfSwgeyA3LCAxNjIyLCAyMDQ4IH0sIHsgOCwgMTYyMywgMjA0OCB9LCAKKyAgIHsgNiwgMTYyNCwgMjA0OCB9LCB7IDcsIDE2MjUsIDIwNDggfSwgeyA3LCAxNjI2LCAyMDQ4IH0sIHsgOCwgMTYyNywgMjA0OCB9LCB7IDcsIDE2MjgsIDIwNDggfSwgeyA4LCAxNjI5LCAyMDQ4IH0sIHsgOCwgMTYzMCwgMjA0OCB9LCB7IDksIDE2MzEsIDIwNDggfSwgCisgICB7IDUsIDE2MzIsIDIwNDggfSwgeyA2LCAxNjMzLCAyMDQ4IH0sIHsgNiwgMTYzNCwgMjA0OCB9LCB7IDcsIDE2MzUsIDIwNDggfSwgeyA2LCAxNjM2LCAyMDQ4IH0sIHsgNywgMTYzNywgMjA0OCB9LCB7IDcsIDE2MzgsIDIwNDggfSwgeyA4LCAxNjM5LCAyMDQ4IH0sIAorICAgeyA2LCAxNjQwLCAyMDQ4IH0sIHsgNywgMTY0MSwgMjA0OCB9LCB7IDcsIDE2NDIsIDIwNDggfSwgeyA4LCAxNjQzLCAyMDQ4IH0sIHsgNywgMTY0NCwgMjA0OCB9LCB7IDgsIDE2NDUsIDIwNDggfSwgeyA4LCAxNjQ2LCAyMDQ4IH0sIHsgOSwgMTY0NywgMjA0OCB9LCAKKyAgIHsgNiwgMTY0OCwgMjA0OCB9LCB7IDcsIDE2NDksIDIwNDggfSwgeyA3LCAxNjUwLCAyMDQ4IH0sIHsgOCwgMTY1MSwgMjA0OCB9LCB7IDcsIDE2NTIsIDIwNDggfSwgeyA4LCAxNjUzLCAyMDQ4IH0sIHsgOCwgMTY1NCwgMjA0OCB9LCB7IDksIDE2NTUsIDIwNDggfSwgCisgICB7IDcsIDE2NTYsIDIwNDggfSwgeyA4LCAxNjU3LCAyMDQ4IH0sIHsgOCwgMTY1OCwgMjA0OCB9LCB7IDksIDE2NTksIDIwNDggfSwgeyA4LCAxNjYwLCAyMDQ4IH0sIHsgOSwgMTY2MSwgMjA0OCB9LCB7IDksIDE2NjIsIDIwNDggfSwgeyAxMCwgMTY2MywgMjA0OCB9LCAKKyAgIHsgNCwgMTY2NCwgMjA0OCB9LCB7IDUsIDE2NjUsIDIwNDggfSwgeyA1LCAxNjY2LCAyMDQ4IH0sIHsgNiwgMTY2NywgMjA0OCB9LCB7IDUsIDE2NjgsIDIwNDggfSwgeyA2LCAxNjY5LCAyMDQ4IH0sIHsgNiwgMTY3MCwgMjA0OCB9LCB7IDcsIDE2NzEsIDIwNDggfSwgCisgICB7IDUsIDE2NzIsIDIwNDggfSwgeyA2LCAxNjczLCAyMDQ4IH0sIHsgNiwgMTY3NCwgMjA0OCB9LCB7IDcsIDE2NzUsIDIwNDggfSwgeyA2LCAxNjc2LCAyMDQ4IH0sIHsgNywgMTY3NywgMjA0OCB9LCB7IDcsIDE2NzgsIDIwNDggfSwgeyA4LCAxNjc5LCAyMDQ4IH0sIAorICAgeyA1LCAxNjgwLCAyMDQ4IH0sIHsgNiwgMTY4MSwgMjA0OCB9LCB7IDYsIDE2ODIsIDIwNDggfSwgeyA3LCAxNjgzLCAyMDQ4IH0sIHsgNiwgMTY4NCwgMjA0OCB9LCB7IDcsIDE2ODUsIDIwNDggfSwgeyA3LCAxNjg2LCAyMDQ4IH0sIHsgOCwgMTY4NywgMjA0OCB9LCAKKyAgIHsgNiwgMTY4OCwgMjA0OCB9LCB7IDcsIDE2ODksIDIwNDggfSwgeyA3LCAxNjkwLCAyMDQ4IH0sIHsgOCwgMTY5MSwgMjA0OCB9LCB7IDcsIDE2OTIsIDIwNDggfSwgeyA4LCAxNjkzLCAyMDQ4IH0sIHsgOCwgMTY5NCwgMjA0OCB9LCB7IDksIDE2OTUsIDIwNDggfSwgCisgICB7IDUsIDE2OTYsIDIwNDggfSwgeyA2LCAxNjk3LCAyMDQ4IH0sIHsgNiwgMTY5OCwgMjA0OCB9LCB7IDcsIDE2OTksIDIwNDggfSwgeyA2LCAxNzAwLCAyMDQ4IH0sIHsgNywgMTcwMSwgMjA0OCB9LCB7IDcsIDE3MDIsIDIwNDggfSwgeyA4LCAxNzAzLCAyMDQ4IH0sIAorICAgeyA2LCAxNzA0LCAyMDQ4IH0sIHsgNywgMTcwNSwgMjA0OCB9LCB7IDcsIDE3MDYsIDIwNDggfSwgeyA4LCAxNzA3LCAyMDQ4IH0sIHsgNywgMTcwOCwgMjA0OCB9LCB7IDgsIDE3MDksIDIwNDggfSwgeyA4LCAxNzEwLCAyMDQ4IH0sIHsgOSwgMTcxMSwgMjA0OCB9LCAKKyAgIHsgNiwgMTcxMiwgMjA0OCB9LCB7IDcsIDE3MTMsIDIwNDggfSwgeyA3LCAxNzE0LCAyMDQ4IH0sIHsgOCwgMTcxNSwgMjA0OCB9LCB7IDcsIDE3MTYsIDIwNDggfSwgeyA4LCAxNzE3LCAyMDQ4IH0sIHsgOCwgMTcxOCwgMjA0OCB9LCB7IDksIDE3MTksIDIwNDggfSwgCisgICB7IDcsIDE3MjAsIDIwNDggfSwgeyA4LCAxNzIxLCAyMDQ4IH0sIHsgOCwgMTcyMiwgMjA0OCB9LCB7IDksIDE3MjMsIDIwNDggfSwgeyA4LCAxNzI0LCAyMDQ4IH0sIHsgOSwgMTcyNSwgMjA0OCB9LCB7IDksIDE3MjYsIDIwNDggfSwgeyAxMCwgMTcyNywgMjA0OCB9LCAKKyAgIHsgNSwgMTcyOCwgMjA0OCB9LCB7IDYsIDE3MjksIDIwNDggfSwgeyA2LCAxNzMwLCAyMDQ4IH0sIHsgNywgMTczMSwgMjA0OCB9LCB7IDYsIDE3MzIsIDIwNDggfSwgeyA3LCAxNzMzLCAyMDQ4IH0sIHsgNywgMTczNCwgMjA0OCB9LCB7IDgsIDE3MzUsIDIwNDggfSwgCisgICB7IDYsIDE3MzYsIDIwNDggfSwgeyA3LCAxNzM3LCAyMDQ4IH0sIHsgNywgMTczOCwgMjA0OCB9LCB7IDgsIDE3MzksIDIwNDggfSwgeyA3LCAxNzQwLCAyMDQ4IH0sIHsgOCwgMTc0MSwgMjA0OCB9LCB7IDgsIDE3NDIsIDIwNDggfSwgeyA5LCAxNzQzLCAyMDQ4IH0sIAorICAgeyA2LCAxNzQ0LCAyMDQ4IH0sIHsgNywgMTc0NSwgMjA0OCB9LCB7IDcsIDE3NDYsIDIwNDggfSwgeyA4LCAxNzQ3LCAyMDQ4IH0sIHsgNywgMTc0OCwgMjA0OCB9LCB7IDgsIDE3NDksIDIwNDggfSwgeyA4LCAxNzUwLCAyMDQ4IH0sIHsgOSwgMTc1MSwgMjA0OCB9LCAKKyAgIHsgNywgMTc1MiwgMjA0OCB9LCB7IDgsIDE3NTMsIDIwNDggfSwgeyA4LCAxNzU0LCAyMDQ4IH0sIHsgOSwgMTc1NSwgMjA0OCB9LCB7IDgsIDE3NTYsIDIwNDggfSwgeyA5LCAxNzU3LCAyMDQ4IH0sIHsgOSwgMTc1OCwgMjA0OCB9LCB7IDEwLCAxNzU5LCAyMDQ4IH0sIAorICAgeyA2LCAxNzYwLCAyMDQ4IH0sIHsgNywgMTc2MSwgMjA0OCB9LCB7IDcsIDE3NjIsIDIwNDggfSwgeyA4LCAxNzYzLCAyMDQ4IH0sIHsgNywgMTc2NCwgMjA0OCB9LCB7IDgsIDE3NjUsIDIwNDggfSwgeyA4LCAxNzY2LCAyMDQ4IH0sIHsgOSwgMTc2NywgMjA0OCB9LCAKKyAgIHsgNywgMTc2OCwgMjA0OCB9LCB7IDgsIDE3NjksIDIwNDggfSwgeyA4LCAxNzcwLCAyMDQ4IH0sIHsgOSwgMTc3MSwgMjA0OCB9LCB7IDgsIDE3NzIsIDIwNDggfSwgeyA5LCAxNzczLCAyMDQ4IH0sIHsgOSwgMTc3NCwgMjA0OCB9LCB7IDEwLCAxNzc1LCAyMDQ4IH0sIAorICAgeyA3LCAxNzc2LCAyMDQ4IH0sIHsgOCwgMTc3NywgMjA0OCB9LCB7IDgsIDE3NzgsIDIwNDggfSwgeyA5LCAxNzc5LCAyMDQ4IH0sIHsgOCwgMTc4MCwgMjA0OCB9LCB7IDksIDE3ODEsIDIwNDggfSwgeyA5LCAxNzgyLCAyMDQ4IH0sIHsgMTAsIDE3ODMsIDIwNDggfSwgCisgICB7IDgsIDE3ODQsIDIwNDggfSwgeyA5LCAxNzg1LCAyMDQ4IH0sIHsgOSwgMTc4NiwgMjA0OCB9LCB7IDEwLCAxNzg3LCAyMDQ4IH0sIHsgOSwgMTc4OCwgMjA0OCB9LCB7IDEwLCAxNzg5LCAyMDQ4IH0sIHsgMTAsIDE3OTAsIDIwNDggfSwgeyAxMSwgMTc5MSwgMjA0OCB9LCAKKyAgIHsgNCwgMTc5MiwgMjA0OCB9LCB7IDUsIDE3OTMsIDIwNDggfSwgeyA1LCAxNzk0LCAyMDQ4IH0sIHsgNiwgMTc5NSwgMjA0OCB9LCB7IDUsIDE3OTYsIDIwNDggfSwgeyA2LCAxNzk3LCAyMDQ4IH0sIHsgNiwgMTc5OCwgMjA0OCB9LCB7IDcsIDE3OTksIDIwNDggfSwgCisgICB7IDUsIDE4MDAsIDIwNDggfSwgeyA2LCAxODAxLCAyMDQ4IH0sIHsgNiwgMTgwMiwgMjA0OCB9LCB7IDcsIDE4MDMsIDIwNDggfSwgeyA2LCAxODA0LCAyMDQ4IH0sIHsgNywgMTgwNSwgMjA0OCB9LCB7IDcsIDE4MDYsIDIwNDggfSwgeyA4LCAxODA3LCAyMDQ4IH0sIAorICAgeyA1LCAxODA4LCAyMDQ4IH0sIHsgNiwgMTgwOSwgMjA0OCB9LCB7IDYsIDE4MTAsIDIwNDggfSwgeyA3LCAxODExLCAyMDQ4IH0sIHsgNiwgMTgxMiwgMjA0OCB9LCB7IDcsIDE4MTMsIDIwNDggfSwgeyA3LCAxODE0LCAyMDQ4IH0sIHsgOCwgMTgxNSwgMjA0OCB9LCAKKyAgIHsgNiwgMTgxNiwgMjA0OCB9LCB7IDcsIDE4MTcsIDIwNDggfSwgeyA3LCAxODE4LCAyMDQ4IH0sIHsgOCwgMTgxOSwgMjA0OCB9LCB7IDcsIDE4MjAsIDIwNDggfSwgeyA4LCAxODIxLCAyMDQ4IH0sIHsgOCwgMTgyMiwgMjA0OCB9LCB7IDksIDE4MjMsIDIwNDggfSwgCisgICB7IDUsIDE4MjQsIDIwNDggfSwgeyA2LCAxODI1LCAyMDQ4IH0sIHsgNiwgMTgyNiwgMjA0OCB9LCB7IDcsIDE4MjcsIDIwNDggfSwgeyA2LCAxODI4LCAyMDQ4IH0sIHsgNywgMTgyOSwgMjA0OCB9LCB7IDcsIDE4MzAsIDIwNDggfSwgeyA4LCAxODMxLCAyMDQ4IH0sIAorICAgeyA2LCAxODMyLCAyMDQ4IH0sIHsgNywgMTgzMywgMjA0OCB9LCB7IDcsIDE4MzQsIDIwNDggfSwgeyA4LCAxODM1LCAyMDQ4IH0sIHsgNywgMTgzNiwgMjA0OCB9LCB7IDgsIDE4MzcsIDIwNDggfSwgeyA4LCAxODM4LCAyMDQ4IH0sIHsgOSwgMTgzOSwgMjA0OCB9LCAKKyAgIHsgNiwgMTg0MCwgMjA0OCB9LCB7IDcsIDE4NDEsIDIwNDggfSwgeyA3LCAxODQyLCAyMDQ4IH0sIHsgOCwgMTg0MywgMjA0OCB9LCB7IDcsIDE4NDQsIDIwNDggfSwgeyA4LCAxODQ1LCAyMDQ4IH0sIHsgOCwgMTg0NiwgMjA0OCB9LCB7IDksIDE4NDcsIDIwNDggfSwgCisgICB7IDcsIDE4NDgsIDIwNDggfSwgeyA4LCAxODQ5LCAyMDQ4IH0sIHsgOCwgMTg1MCwgMjA0OCB9LCB7IDksIDE4NTEsIDIwNDggfSwgeyA4LCAxODUyLCAyMDQ4IH0sIHsgOSwgMTg1MywgMjA0OCB9LCB7IDksIDE4NTQsIDIwNDggfSwgeyAxMCwgMTg1NSwgMjA0OCB9LCAKKyAgIHsgNSwgMTg1NiwgMjA0OCB9LCB7IDYsIDE4NTcsIDIwNDggfSwgeyA2LCAxODU4LCAyMDQ4IH0sIHsgNywgMTg1OSwgMjA0OCB9LCB7IDYsIDE4NjAsIDIwNDggfSwgeyA3LCAxODYxLCAyMDQ4IH0sIHsgNywgMTg2MiwgMjA0OCB9LCB7IDgsIDE4NjMsIDIwNDggfSwgCisgICB7IDYsIDE4NjQsIDIwNDggfSwgeyA3LCAxODY1LCAyMDQ4IH0sIHsgNywgMTg2NiwgMjA0OCB9LCB7IDgsIDE4NjcsIDIwNDggfSwgeyA3LCAxODY4LCAyMDQ4IH0sIHsgOCwgMTg2OSwgMjA0OCB9LCB7IDgsIDE4NzAsIDIwNDggfSwgeyA5LCAxODcxLCAyMDQ4IH0sIAorICAgeyA2LCAxODcyLCAyMDQ4IH0sIHsgNywgMTg3MywgMjA0OCB9LCB7IDcsIDE4NzQsIDIwNDggfSwgeyA4LCAxODc1LCAyMDQ4IH0sIHsgNywgMTg3NiwgMjA0OCB9LCB7IDgsIDE4NzcsIDIwNDggfSwgeyA4LCAxODc4LCAyMDQ4IH0sIHsgOSwgMTg3OSwgMjA0OCB9LCAKKyAgIHsgNywgMTg4MCwgMjA0OCB9LCB7IDgsIDE4ODEsIDIwNDggfSwgeyA4LCAxODgyLCAyMDQ4IH0sIHsgOSwgMTg4MywgMjA0OCB9LCB7IDgsIDE4ODQsIDIwNDggfSwgeyA5LCAxODg1LCAyMDQ4IH0sIHsgOSwgMTg4NiwgMjA0OCB9LCB7IDEwLCAxODg3LCAyMDQ4IH0sIAorICAgeyA2LCAxODg4LCAyMDQ4IH0sIHsgNywgMTg4OSwgMjA0OCB9LCB7IDcsIDE4OTAsIDIwNDggfSwgeyA4LCAxODkxLCAyMDQ4IH0sIHsgNywgMTg5MiwgMjA0OCB9LCB7IDgsIDE4OTMsIDIwNDggfSwgeyA4LCAxODk0LCAyMDQ4IH0sIHsgOSwgMTg5NSwgMjA0OCB9LCAKKyAgIHsgNywgMTg5NiwgMjA0OCB9LCB7IDgsIDE4OTcsIDIwNDggfSwgeyA4LCAxODk4LCAyMDQ4IH0sIHsgOSwgMTg5OSwgMjA0OCB9LCB7IDgsIDE5MDAsIDIwNDggfSwgeyA5LCAxOTAxLCAyMDQ4IH0sIHsgOSwgMTkwMiwgMjA0OCB9LCB7IDEwLCAxOTAzLCAyMDQ4IH0sIAorICAgeyA3LCAxOTA0LCAyMDQ4IH0sIHsgOCwgMTkwNSwgMjA0OCB9LCB7IDgsIDE5MDYsIDIwNDggfSwgeyA5LCAxOTA3LCAyMDQ4IH0sIHsgOCwgMTkwOCwgMjA0OCB9LCB7IDksIDE5MDksIDIwNDggfSwgeyA5LCAxOTEwLCAyMDQ4IH0sIHsgMTAsIDE5MTEsIDIwNDggfSwgCisgICB7IDgsIDE5MTIsIDIwNDggfSwgeyA5LCAxOTEzLCAyMDQ4IH0sIHsgOSwgMTkxNCwgMjA0OCB9LCB7IDEwLCAxOTE1LCAyMDQ4IH0sIHsgOSwgMTkxNiwgMjA0OCB9LCB7IDEwLCAxOTE3LCAyMDQ4IH0sIHsgMTAsIDE5MTgsIDIwNDggfSwgeyAxMSwgMTkxOSwgMjA0OCB9LCAKKyAgIHsgNSwgMTkyMCwgMjA0OCB9LCB7IDYsIDE5MjEsIDIwNDggfSwgeyA2LCAxOTIyLCAyMDQ4IH0sIHsgNywgMTkyMywgMjA0OCB9LCB7IDYsIDE5MjQsIDIwNDggfSwgeyA3LCAxOTI1LCAyMDQ4IH0sIHsgNywgMTkyNiwgMjA0OCB9LCB7IDgsIDE5MjcsIDIwNDggfSwgCisgICB7IDYsIDE5MjgsIDIwNDggfSwgeyA3LCAxOTI5LCAyMDQ4IH0sIHsgNywgMTkzMCwgMjA0OCB9LCB7IDgsIDE5MzEsIDIwNDggfSwgeyA3LCAxOTMyLCAyMDQ4IH0sIHsgOCwgMTkzMywgMjA0OCB9LCB7IDgsIDE5MzQsIDIwNDggfSwgeyA5LCAxOTM1LCAyMDQ4IH0sIAorICAgeyA2LCAxOTM2LCAyMDQ4IH0sIHsgNywgMTkzNywgMjA0OCB9LCB7IDcsIDE5MzgsIDIwNDggfSwgeyA4LCAxOTM5LCAyMDQ4IH0sIHsgNywgMTk0MCwgMjA0OCB9LCB7IDgsIDE5NDEsIDIwNDggfSwgeyA4LCAxOTQyLCAyMDQ4IH0sIHsgOSwgMTk0MywgMjA0OCB9LCAKKyAgIHsgNywgMTk0NCwgMjA0OCB9LCB7IDgsIDE5NDUsIDIwNDggfSwgeyA4LCAxOTQ2LCAyMDQ4IH0sIHsgOSwgMTk0NywgMjA0OCB9LCB7IDgsIDE5NDgsIDIwNDggfSwgeyA5LCAxOTQ5LCAyMDQ4IH0sIHsgOSwgMTk1MCwgMjA0OCB9LCB7IDEwLCAxOTUxLCAyMDQ4IH0sIAorICAgeyA2LCAxOTUyLCAyMDQ4IH0sIHsgNywgMTk1MywgMjA0OCB9LCB7IDcsIDE5NTQsIDIwNDggfSwgeyA4LCAxOTU1LCAyMDQ4IH0sIHsgNywgMTk1NiwgMjA0OCB9LCB7IDgsIDE5NTcsIDIwNDggfSwgeyA4LCAxOTU4LCAyMDQ4IH0sIHsgOSwgMTk1OSwgMjA0OCB9LCAKKyAgIHsgNywgMTk2MCwgMjA0OCB9LCB7IDgsIDE5NjEsIDIwNDggfSwgeyA4LCAxOTYyLCAyMDQ4IH0sIHsgOSwgMTk2MywgMjA0OCB9LCB7IDgsIDE5NjQsIDIwNDggfSwgeyA5LCAxOTY1LCAyMDQ4IH0sIHsgOSwgMTk2NiwgMjA0OCB9LCB7IDEwLCAxOTY3LCAyMDQ4IH0sIAorICAgeyA3LCAxOTY4LCAyMDQ4IH0sIHsgOCwgMTk2OSwgMjA0OCB9LCB7IDgsIDE5NzAsIDIwNDggfSwgeyA5LCAxOTcxLCAyMDQ4IH0sIHsgOCwgMTk3MiwgMjA0OCB9LCB7IDksIDE5NzMsIDIwNDggfSwgeyA5LCAxOTc0LCAyMDQ4IH0sIHsgMTAsIDE5NzUsIDIwNDggfSwgCisgICB7IDgsIDE5NzYsIDIwNDggfSwgeyA5LCAxOTc3LCAyMDQ4IH0sIHsgOSwgMTk3OCwgMjA0OCB9LCB7IDEwLCAxOTc5LCAyMDQ4IH0sIHsgOSwgMTk4MCwgMjA0OCB9LCB7IDEwLCAxOTgxLCAyMDQ4IH0sIHsgMTAsIDE5ODIsIDIwNDggfSwgeyAxMSwgMTk4MywgMjA0OCB9LCAKKyAgIHsgNiwgMTk4NCwgMjA0OCB9LCB7IDcsIDE5ODUsIDIwNDggfSwgeyA3LCAxOTg2LCAyMDQ4IH0sIHsgOCwgMTk4NywgMjA0OCB9LCB7IDcsIDE5ODgsIDIwNDggfSwgeyA4LCAxOTg5LCAyMDQ4IH0sIHsgOCwgMTk5MCwgMjA0OCB9LCB7IDksIDE5OTEsIDIwNDggfSwgCisgICB7IDcsIDE5OTIsIDIwNDggfSwgeyA4LCAxOTkzLCAyMDQ4IH0sIHsgOCwgMTk5NCwgMjA0OCB9LCB7IDksIDE5OTUsIDIwNDggfSwgeyA4LCAxOTk2LCAyMDQ4IH0sIHsgOSwgMTk5NywgMjA0OCB9LCB7IDksIDE5OTgsIDIwNDggfSwgeyAxMCwgMTk5OSwgMjA0OCB9LCAKKyAgIHsgNywgMjAwMCwgMjA0OCB9LCB7IDgsIDIwMDEsIDIwNDggfSwgeyA4LCAyMDAyLCAyMDQ4IH0sIHsgOSwgMjAwMywgMjA0OCB9LCB7IDgsIDIwMDQsIDIwNDggfSwgeyA5LCAyMDA1LCAyMDQ4IH0sIHsgOSwgMjAwNiwgMjA0OCB9LCB7IDEwLCAyMDA3LCAyMDQ4IH0sIAorICAgeyA4LCAyMDA4LCAyMDQ4IH0sIHsgOSwgMjAwOSwgMjA0OCB9LCB7IDksIDIwMTAsIDIwNDggfSwgeyAxMCwgMjAxMSwgMjA0OCB9LCB7IDksIDIwMTIsIDIwNDggfSwgeyAxMCwgMjAxMywgMjA0OCB9LCB7IDEwLCAyMDE0LCAyMDQ4IH0sIHsgMTEsIDIwMTUsIDIwNDggfSwgCisgICB7IDcsIDIwMTYsIDIwNDggfSwgeyA4LCAyMDE3LCAyMDQ4IH0sIHsgOCwgMjAxOCwgMjA0OCB9LCB7IDksIDIwMTksIDIwNDggfSwgeyA4LCAyMDIwLCAyMDQ4IH0sIHsgOSwgMjAyMSwgMjA0OCB9LCB7IDksIDIwMjIsIDIwNDggfSwgeyAxMCwgMjAyMywgMjA0OCB9LCAKKyAgIHsgOCwgMjAyNCwgMjA0OCB9LCB7IDksIDIwMjUsIDIwNDggfSwgeyA5LCAyMDI2LCAyMDQ4IH0sIHsgMTAsIDIwMjcsIDIwNDggfSwgeyA5LCAyMDI4LCAyMDQ4IH0sIHsgMTAsIDIwMjksIDIwNDggfSwgeyAxMCwgMjAzMCwgMjA0OCB9LCB7IDExLCAyMDMxLCAyMDQ4IH0sIAorICAgeyA4LCAyMDMyLCAyMDQ4IH0sIHsgOSwgMjAzMywgMjA0OCB9LCB7IDksIDIwMzQsIDIwNDggfSwgeyAxMCwgMjAzNSwgMjA0OCB9LCB7IDksIDIwMzYsIDIwNDggfSwgeyAxMCwgMjAzNywgMjA0OCB9LCB7IDEwLCAyMDM4LCAyMDQ4IH0sIHsgMTEsIDIwMzksIDIwNDggfSwgCisgICB7IDksIDIwNDAsIDIwNDggfSwgeyAxMCwgMjA0MSwgMjA0OCB9LCB7IDEwLCAyMDQyLCAyMDQ4IH0sIHsgMTEsIDIwNDMsIDIwNDggfSwgeyAxMCwgMjA0NCwgMjA0OCB9LCB7IDExLCAyMDQ1LCAyMDQ4IH0sIHsgMTEsIDIwNDYsIDIwNDggfSwgeyAxMiwgMjA0NywgMjA0OCB9LCAKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKK307CisKKy8qIGZpbmQgYSBob2xlIGFuZCBmcmVlIGFzIHJlcXVpcmVkICovCitzdGF0aWMgaW50IGZpbmRfaG9sZSh2b2lkKQoreworICAgdW5zaWduZWQgeDsKKyAgIGludCAgICAgIHksIHo7CisgICBmb3IgKHogPSAwLCB5ID0gSU5UX01BWCwgeCA9IDA7IHggPCBGUF9FTlRSSUVTOyB4KyspIHsKKyAgICAgICBpZiAoZnBfY2FjaGVbeF0ubHJ1X2NvdW50IDwgeSkgeworICAgICAgICAgIHogPSB4OworICAgICAgICAgIHkgPSBmcF9jYWNoZVt4XS5scnVfY291bnQ7CisgICAgICAgfQorICAgfQorCisgICAvKiBkZWNyZWFzZSBhbGwgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBGUF9FTlRSSUVTOyB4KyspIHsKKyAgICAgIGlmIChmcF9jYWNoZVt4XS5scnVfY291bnQgPiAzKSB7CisgICAgICAgICAtLShmcF9jYWNoZVt4XS5scnVfY291bnQpOworICAgICAgfQorICAgfQorCisgICAvKiBmcmVlIGVudHJ5IHogKi8KKyAgIGlmIChmcF9jYWNoZVt6XS5nKSB7CisgICAgICBpZiAoZnBfY2FjaGVbel0ubXUgIT0gTlVMTCkgeworICAgICAgICAgbXBfY2xlYXIoZnBfY2FjaGVbel0ubXUpOworICAgICAgICAgZnBfY2FjaGVbel0ubXUgPSBOVUxMOworICAgICAgfQorICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbel0uZyk7CisgICAgICBmcF9jYWNoZVt6XS5nICA9IE5VTEw7CisgICAgICBmb3IgKHggPSAwOyB4IDwgKDFVPDxGUF9MVVQpOyB4KyspIHsKKyAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGZwX2NhY2hlW3pdLkxVVFt4XSk7CisgICAgICAgICBmcF9jYWNoZVt6XS5MVVRbeF0gPSBOVUxMOworICAgICAgfQorICAgICAgZnBfY2FjaGVbel0ubHJ1X2NvdW50ID0gMDsKKyAgIH0KKyAgIHJldHVybiB6OworfQorCisvKiBkZXRlcm1pbmUgaWYgYSBiYXNlIGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlIGFuZCBpZiBzbywgd2hlcmUgKi8KK3N0YXRpYyBpbnQgZmluZF9iYXNlKGVjY19wb2ludCAqZykKK3sKKyAgIGludCB4OworICAgZm9yICh4ID0gMDsgeCA8IEZQX0VOVFJJRVM7IHgrKykgeworICAgICAgaWYgKGZwX2NhY2hlW3hdLmcgIT0gTlVMTCAmJiAKKyAgICAgICAgICBtcF9jbXAoZnBfY2FjaGVbeF0uZy0+eCwgZy0+eCkgPT0gTFRDX01QX0VRICYmIAorICAgICAgICAgIG1wX2NtcChmcF9jYWNoZVt4XS5nLT55LCBnLT55KSA9PSBMVENfTVBfRVEgJiYgCisgICAgICAgICAgbXBfY21wKGZwX2NhY2hlW3hdLmctPnosIGctPnopID09IExUQ19NUF9FUSkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisgICBpZiAoeCA9PSBGUF9FTlRSSUVTKSB7CisgICAgICB4ID0gLTE7CisgICB9CisgICByZXR1cm4geDsKK30KKworLyogYWRkIGEgbmV3IGJhc2UgdG8gdGhlIGNhY2hlICovCitzdGF0aWMgaW50IGFkZF9lbnRyeShpbnQgaWR4LCBlY2NfcG9pbnQgKmcpCit7CisgICB1bnNpZ25lZCB4LCB5OworCisgICAvKiBhbGxvY2F0ZSBiYXNlIGFuZCBMVVQgKi8KKyAgIGZwX2NhY2hlW2lkeF0uZyA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAoZnBfY2FjaGVbaWR4XS5nID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGNvcHkgeCBhbmQgeSAqLworICAgaWYgKChtcF9jb3B5KGctPngsIGZwX2NhY2hlW2lkeF0uZy0+eCkgIT0gQ1JZUFRfT0spIHx8CisgICAgICAgKG1wX2NvcHkoZy0+eSwgZnBfY2FjaGVbaWR4XS5nLT55KSAhPSBDUllQVF9PSykgfHwKKyAgICAgICAobXBfY29weShnLT56LCBmcF9jYWNoZVtpZHhdLmctPnopICE9IENSWVBUX09LKSkgeworICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbaWR4XS5nKTsKKyAgICAgIGZwX2NhY2hlW2lkeF0uZyA9IE5VTEw7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfSAgICAgICAgICAgICAgCisKKyAgIGZvciAoeCA9IDA7IHggPCAoMVU8PEZQX0xVVCk7IHgrKykgeworICAgICAgZnBfY2FjaGVbaWR4XS5MVVRbeF0gPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgICAgaWYgKGZwX2NhY2hlW2lkeF0uTFVUW3hdID09IE5VTEwpIHsKKyAgICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyB5KyspIHsKKyAgICAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGZwX2NhY2hlW2lkeF0uTFVUW3ldKTsKKyAgICAgICAgICAgIGZwX2NhY2hlW2lkeF0uTFVUW3ldID0gTlVMTDsKKyAgICAgICAgIH0KKyAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGZwX2NhY2hlW2lkeF0uZyk7CisgICAgICAgICBmcF9jYWNoZVtpZHhdLmcgICAgICAgICA9IE5VTEw7CisgICAgICAgICBmcF9jYWNoZVtpZHhdLmxydV9jb3VudCA9IDA7CisgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgICAgfQorICAgfQorICAgCisgICBmcF9jYWNoZVtpZHhdLmxydV9jb3VudCA9IDA7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGJ1aWxkIHRoZSBMVVQgYnkgc3BhY2luZyB0aGUgYml0cyBvZiB0aGUgaW5wdXQgYnkgI21vZHVsdXMvRlBfTFVUIGJpdHMgYXBhcnQgCisgKiAKKyAqIFRoZSBhbGdvcml0aG0gYnVpbGRzIHBhdHRlcm5zIGluIGluY3JlYXNpbmcgYml0IG9yZGVyIGJ5IGZpcnN0IG1ha2luZyBhbGwgCisgKiBzaW5nbGUgYml0IGlucHV0IHBhdHRlcm5zLCB0aGVuIGFsbCB0d28gYml0IGlucHV0IHBhdHRlcm5zIGFuZCBzbyBvbgorICovCitzdGF0aWMgaW50IGJ1aWxkX2x1dChpbnQgaWR4LCB2b2lkICptb2R1bHVzLCB2b2lkICptcCwgdm9pZCAqbXUpCit7IAorICAgdW5zaWduZWQgeCwgeSwgZXJyLCBiaXRsZW4sIGx1dF9nYXA7CisgICB2b2lkICAgICp0bXA7CisKKyAgIHRtcCA9IE5VTEw7CisKKyAgIC8qIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbHV0X29yZGVyIHRhYmxlIGlzIG9mIGNvcnJlY3Qgc2l6ZSwgc2hvdWxkIGNvbXBpbGUgb3V0IHRvIGEgTk9QIGlmIHRydWUgKi8KKyAgIGlmICgoc2l6ZW9mKGx1dF9vcmRlcnMpIC8gc2l6ZW9mKGx1dF9vcmRlcnNbMF0pKSA8ICgxVTw8RlBfTFVUKSkgeworICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgIGdvdG8gRE9ORTsKKyAgIH0gICAgICAgCisKKyAgIC8qIGdldCBiaXRsZW4gYW5kIHJvdW5kIHVwIHRvIG5leHQgbXVsdGlwbGUgb2YgRlBfTFVUICovCisgICBiaXRsZW4gID0gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cykgPDwgMzsKKyAgIHggICAgICAgPSBiaXRsZW4gJSBGUF9MVVQ7CisgICBpZiAoeCkgeworICAgICAgYml0bGVuICs9IEZQX0xVVCAtIHg7CisgICB9ICAKKyAgIGx1dF9nYXAgPSBiaXRsZW4gLyBGUF9MVVQ7CisKKyAgIC8qIGluaXQgdGhlIG11ICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfY29weSgmZnBfY2FjaGVbaWR4XS5tdSwgbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBFUlI7CisgICB9CisgICAKKyAgIC8qIGNvcHkgYmFzZSAqLworICAgaWYgKChtcF9tdWxtb2QoZnBfY2FjaGVbaWR4XS5nLT54LCBtdSwgbW9kdWx1cywgZnBfY2FjaGVbaWR4XS5MVVRbMV0tPngpICE9IENSWVBUX09LKSB8fCAKKyAgICAgICAobXBfbXVsbW9kKGZwX2NhY2hlW2lkeF0uZy0+eSwgbXUsIG1vZHVsdXMsIGZwX2NhY2hlW2lkeF0uTFVUWzFdLT55KSAhPSBDUllQVF9PSykgfHwgCisgICAgICAgKG1wX211bG1vZChmcF9jYWNoZVtpZHhdLmctPnosIG11LCBtb2R1bHVzLCBmcF9jYWNoZVtpZHhdLkxVVFsxXS0+eikgIT0gQ1JZUFRfT0spKSAgICAgICAgeyBnb3RvIEVSUjsgfQorICAgICAgIAorICAgLyogbWFrZSBhbGwgc2luZ2xlIGJpdCBlbnRyaWVzICovCisgICBmb3IgKHggPSAxOyB4IDwgRlBfTFVUOyB4KyspIHsKKyAgICAgIGlmICgobXBfY29weShmcF9jYWNoZVtpZHhdLkxVVFsxPDwoeC0xKV0tPngsIGZwX2NhY2hlW2lkeF0uTFVUWzE8PHhdLT54KSAhPSBDUllQVF9PSykgfHwgCisgICAgICAgICAgKG1wX2NvcHkoZnBfY2FjaGVbaWR4XS5MVVRbMTw8KHgtMSldLT55LCBmcF9jYWNoZVtpZHhdLkxVVFsxPDx4XS0+eSkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgIChtcF9jb3B5KGZwX2NhY2hlW2lkeF0uTFVUWzE8PCh4LTEpXS0+eiwgZnBfY2FjaGVbaWR4XS5MVVRbMTw8eF0tPnopICE9IENSWVBUX09LKSkgICAgIHsgZ290byBFUlI7IH0KKyAgICAgICAgICAKKyAgICAgIC8qIG5vdyBkb3VibGUgaXQgYml0bGVuL0ZQX0xVVCB0aW1lcyAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IGx1dF9nYXA7IHkrKykgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChmcF9jYWNoZVtpZHhdLkxVVFsxPDx4XSwgZnBfY2FjaGVbaWR4XS5MVVRbMTw8eF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICBnb3RvIEVSUjsKKyAgICAgICAgICB9CisgICAgICB9ICAgICAgICAgIAorICAgfQorICAgICAgCisgICAvKiBub3cgbWFrZSBhbGwgZW50cmllcyBpbiBpbmNyZWFzZSBvcmRlciBvZiBoYW1taW5nIHdlaWdodCAqLworICAgZm9yICh4ID0gMjsgeCA8PSBGUF9MVVQ7IHgrKykgeworICAgICAgIGZvciAoeSA9IDA7IHkgPCAoMVVMPDxGUF9MVVQpOyB5KyspIHsKKyAgICAgICAgICAgaWYgKGx1dF9vcmRlcnNbeV0uaGFtICE9IChpbnQpeCkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgLyogcGVyZm9ybSB0aGUgYWRkICovCisgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChmcF9jYWNoZVtpZHhdLkxVVFtsdXRfb3JkZXJzW3ldLnRlcm1hXSwgZnBfY2FjaGVbaWR4XS5MVVRbbHV0X29yZGVyc1t5XS50ZXJtYl0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBfY2FjaGVbaWR4XS5MVVRbeV0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZ290byBFUlI7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICB9CisgICAgICAKKyAgIC8qIG5vdyBtYXAgYWxsIGVudHJpZXMgYmFjayB0byBhZmZpbmUgc3BhY2UgdG8gbWFrZSBwb2ludCBhZGRpdGlvbiBmYXN0ZXIgKi8KKyAgIGlmICgoZXJyID0gbXBfaW5pdCgmdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSOyB9CisgICBmb3IgKHggPSAxOyB4IDwgKDFVTDw8RlBfTFVUKTsgeCsrKSB7CisgICAgICAgLyogY29udmVydCB6IHRvIG5vcm1hbCBmcm9tIG1vbnRnb21lcnkgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSOyB9CisgCisgICAgICAgLyogaW52ZXJ0IGl0ICovCisgICAgICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnosIG1vZHVsdXMsIGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgeyBnb3RvIEVSUjsgfQorCisgICAgICAgLyogbm93IHNxdWFyZSBpdCAqLworICAgICAgIGlmICgoZXJyID0gbXBfc3FybW9kKGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56LCBtb2R1bHVzLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlI7IH0KKyAgICAgICAKKyAgICAgICAvKiBmaXggeCAqLworICAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKGZwX2NhY2hlW2lkeF0uTFVUW3hdLT54LCB0bXAsIG1vZHVsdXMsIGZwX2NhY2hlW2lkeF0uTFVUW3hdLT54KSkgIT0gQ1JZUFRfT0spICAgIHsgZ290byBFUlI7IH0KKworICAgICAgIC8qIGdldCAxL3peMyAqLworICAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHRtcCwgZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnosIG1vZHVsdXMsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlI7IH0KKworICAgICAgIC8qIGZpeCB5ICovCisgICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnksIHRtcCwgbW9kdWx1cywgZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnkpKSAhPSBDUllQVF9PSykgICAgeyBnb3RvIEVSUjsgfQorCisgICAgICAgLyogZnJlZSB6ICovCisgICAgICAgbXBfY2xlYXIoZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnopOworICAgICAgIGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56ID0gTlVMTDsKKyAgIH0KKyAgIG1wX2NsZWFyKHRtcCk7CisKKyAgIHJldHVybiBDUllQVF9PSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorRVJSOgorICAgZXJyID0gQ1JZUFRfTUVNOworRE9ORTogICAKKyAgIGZvciAoeSA9IDA7IHkgPCAoMVU8PEZQX0xVVCk7IHkrKykgeworICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbaWR4XS5MVVRbeV0pOworICAgICAgZnBfY2FjaGVbaWR4XS5MVVRbeV0gPSBOVUxMOworICAgfQorICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbaWR4XS5nKTsKKyAgIGZwX2NhY2hlW2lkeF0uZyAgICAgICAgID0gTlVMTDsKKyAgIGZwX2NhY2hlW2lkeF0ubHJ1X2NvdW50ID0gMDsKKyAgIGlmIChmcF9jYWNoZVtpZHhdLm11ICE9IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyKGZwX2NhY2hlW2lkeF0ubXUpOworICAgICAgZnBfY2FjaGVbaWR4XS5tdSA9IE5VTEw7CisgICB9CisgICBpZiAodG1wICE9IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyKHRtcCk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisvKiBwZXJmb3JtIGEgZml4ZWQgcG9pbnQgRUNDIG11bG1vZCAqLworc3RhdGljIGludCBhY2NlbF9mcF9tdWwoaW50IGlkeCwgdm9pZCAqaywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCwgaW50IG1hcCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIga2JbMTI4XTsKKyAgIGludCAgICAgIHg7CisgICB1bnNpZ25lZCB5LCB6LCBlcnIsIGJpdGxlbiwgYml0cG9zLCBsdXRfZ2FwLCBmaXJzdDsKKyAgIHZvaWQgICAgICp0aywgKm9yZGVyOworCisgICAvKiBpZiBpdCdzIHNtYWxsZXIgdGhhbiBtb2R1bHVzIHdlIGZpbmUgKi8KKyAgIGlmIChtcF91bnNpZ25lZF9iaW5fc2l6ZShrKSA+IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1vZHVsdXMpKSB7CisgICAgICAvKiBmaW5kIG9yZGVyICovCisgICAgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cyk7CisgICAgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZTsgeCsrKSB7CisgICAgICAgICBpZiAoeSA8PSAodW5zaWduZWQpbHRjX2VjY19zZXRzW3hdLnNpemUpIGJyZWFrOworICAgICAgfQorICAgCisgICAgICAvKiBiYWNrIG9mZiBpZiB3ZSBhcmUgb24gdGhlIDUyMSBiaXQgY3VydmUgKi8KKyAgICAgIGlmICh5ID09IDY2KSAtLXg7CisgICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmb3JkZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0gICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChvcmRlciwgbHRjX2VjY19zZXRzW3hdLm9yZGVyLCAxNikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBtcF9jbGVhcigmb3JkZXIpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgLyogayBtdXN0IGJlIGxlc3MgdGhhbiBtb2R1bHVzICovCisgICAgICBpZiAobXBfY21wKGssIG9yZGVyKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmdGspKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgbXBfY2xlYXIob3JkZXIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfbW9kKGssIG9yZGVyLCB0aykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBtcF9jbGVhcih0ayk7CisgICAgICAgICAgICBtcF9jbGVhcihvcmRlcik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHRrID0gazsKKyAgICAgIH0KKyAgICAgIG1wX2NsZWFyKG9yZGVyKTsKKyAgIH0gZWxzZSB7CisgICAgICAgdGsgPSBrOworICAgfSAgICAgICAKKyAgIAorICAgLyogZ2V0IGJpdGxlbiBhbmQgcm91bmQgdXAgdG8gbmV4dCBtdWx0aXBsZSBvZiBGUF9MVVQgKi8KKyAgIGJpdGxlbiAgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShtb2R1bHVzKSA8PCAzOworICAgeCAgICAgICA9IGJpdGxlbiAlIEZQX0xVVDsKKyAgIGlmICh4KSB7CisgICAgICBiaXRsZW4gKz0gRlBfTFVUIC0geDsKKyAgIH0gIAorICAgbHV0X2dhcCA9IGJpdGxlbiAvIEZQX0xVVDsKKyAgICAgICAgCisgICAvKiBnZXQgdGhlIGsgdmFsdWUgKi8KKyAgIGlmIChtcF91bnNpZ25lZF9iaW5fc2l6ZSh0aykgPiAoc2l6ZW9mKGtiKSAtIDIpKSB7CisgICAgICBpZiAodGsgIT0gaykgeworICAgICAgICAgbXBfY2xlYXIodGspOworICAgICAgfSAgICAgICAgIAorICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKyAgIAorICAgLyogc3RvcmUgayAqLworICAgemVyb21lbShrYiwgc2l6ZW9mKGtiKSk7CisgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2Jpbih0aywga2IpKSAhPSBDUllQVF9PSykgeworICAgICAgaWYgKHRrICE9IGspIHsKKyAgICAgICAgIG1wX2NsZWFyKHRrKTsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIC8qIGxldCdzIHJldmVyc2Uga2Igc28gaXQncyBsaXR0bGUgZW5kaWFuICovCisgICB4ID0gMDsKKyAgIHkgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSh0aykgLSAxOworICAgaWYgKHRrICE9IGspIHsKKyAgICAgIG1wX2NsZWFyKHRrKTsKKyAgIH0gICAgICAgICAKKyAgIHdoaWxlICgodW5zaWduZWQpeCA8IHkpIHsKKyAgICAgIHogPSBrYlt4XTsga2JbeF0gPSBrYlt5XTsga2JbeV0gPSB6OworICAgICAgKyt4OyAtLXk7CisgICB9ICAgICAgCisgICAKKyAgIC8qIGF0IHRoaXMgcG9pbnQgd2UgY2FuIHN0YXJ0LCB5aXBlZSAqLworICAgZmlyc3QgPSAxOworICAgZm9yICh4ID0gbHV0X2dhcC0xOyB4ID49IDA7IHgtLSkgeworICAgICAgIC8qIGV4dHJhY3QgRlBfTFVUIGJpdHMgZnJvbSBrYiBzcHJlYWQgb3V0IGJ5IGx1dF9nYXAgYml0cyBhbmQgb2Zmc2V0IGJ5IHggYml0cyBmcm9tIHRoZSBzdGFydCAqLworICAgICAgIGJpdHBvcyA9IHg7CisgICAgICAgZm9yICh5ID0geiA9IDA7IHkgPCBGUF9MVVQ7IHkrKykgeworICAgICAgICAgIHogfD0gKChrYltiaXRwb3M+PjNdID4+IChiaXRwb3MmNykpICYgMSkgPDwgeTsKKyAgICAgICAgICBiaXRwb3MgKz0gbHV0X2dhcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXQncyB5Kmx1dF9nYXAgKyB4LCBidXQgaGVyZSB3ZSBjYW4gYXZvaWQgdGhlIG11bHQgaW4gZWFjaCBsb29wICovCisgICAgICAgfQorICAgICAgICAgICAgICAKKyAgICAgICAvKiBkb3VibGUgaWYgbm90IGZpcnN0ICovCisgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChSLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIAorICAgICAgIC8qIGFkZCBpZiBub3QgZmlyc3QsIG90aGVyd2lzZSBjb3B5ICovICAgICAgICAgIAorICAgICAgIGlmICghZmlyc3QgJiYgeikgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBmcF9jYWNoZVtpZHhdLkxVVFt6XSwgUiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgIH0gZWxzZSBpZiAoeikgeworICAgICAgICAgIGlmICgobXBfY29weShmcF9jYWNoZVtpZHhdLkxVVFt6XS0+eCwgUi0+eCkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgICAgICAobXBfY29weShmcF9jYWNoZVtpZHhdLkxVVFt6XS0+eSwgUi0+eSkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgICAgICAobXBfY29weShmcF9jYWNoZVtpZHhdLm11LCAgICAgICAgUi0+eikgIT0gQ1JZUFRfT0spKSB7IHJldHVybiBDUllQVF9NRU07IH0KKyAgICAgICAgICAgICAgZmlyc3QgPSAwOyAgICAgICAgICAgICAgCisgICAgICAgfQorICAgfSAgICAgCisgICB6ID0gMDsKKyAgIHplcm9tZW0oa2IsIHNpemVvZihrYikpOworICAgLyogbWFwIFIgYmFjayBmcm9tIHByb2plY3RpdmUgc3BhY2UgKi8KKyAgIGlmIChtYXApIHsKKyAgICAgIGVyciA9IGx0Y19lY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKKyAgIH0gZWxzZSB7CisgICAgICBlcnIgPSBDUllQVF9PSzsKKyAgIH0KKyAgIHJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBMVENfRUNDX1NIQU1JUgorLyogcGVyZm9ybSBhIGZpeGVkIHBvaW50IEVDQyBtdWxtb2QgKi8KK3N0YXRpYyBpbnQgYWNjZWxfZnBfbXVsMmFkZChpbnQgaWR4MSwgaW50IGlkeDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmtBLCB2b2lkICprQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKQoreworICAgdW5zaWduZWQgY2hhciBrYlsyXVsxMjhdOworICAgaW50ICAgICAgeDsKKyAgIHVuc2lnbmVkIHksIHosIGVyciwgYml0bGVuLCBiaXRwb3MsIGx1dF9nYXAsIGZpcnN0LCB6QSwgekI7CisgICB2b2lkICAgICAqdGthLCAqdGtiLCAqb3JkZXI7CisKKyAgIC8qIGlmIGl0J3Mgc21hbGxlciB0aGFuIG1vZHVsdXMgd2UgZmluZSAqLworICAgaWYgKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtBKSA+IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1vZHVsdXMpKSB7CisgICAgICAvKiBmaW5kIG9yZGVyICovCisgICAgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cyk7CisgICAgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZTsgeCsrKSB7CisgICAgICAgICBpZiAoeSA8PSAodW5zaWduZWQpbHRjX2VjY19zZXRzW3hdLnNpemUpIGJyZWFrOworICAgICAgfQorICAgCisgICAgICAvKiBiYWNrIG9mZiBpZiB3ZSBhcmUgb24gdGhlIDUyMSBiaXQgY3VydmUgKi8KKyAgICAgIGlmICh5ID09IDY2KSAtLXg7CisgICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmb3JkZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0gICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChvcmRlciwgbHRjX2VjY19zZXRzW3hdLm9yZGVyLCAxNikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBtcF9jbGVhcigmb3JkZXIpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgLyoga0EgbXVzdCBiZSBsZXNzIHRoYW4gbW9kdWx1cyAqLworICAgICAgaWYgKG1wX2NtcChrQSwgb3JkZXIpICE9IExUQ19NUF9MVCkgeworICAgICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZ0a2EpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgbXBfY2xlYXIob3JkZXIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfbW9kKGtBLCBvcmRlciwgdGthKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIG1wX2NsZWFyKHRrYSk7CisgICAgICAgICAgICBtcF9jbGVhcihvcmRlcik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHRrYSA9IGtBOworICAgICAgfQorICAgICAgbXBfY2xlYXIob3JkZXIpOworICAgfSBlbHNlIHsKKyAgICAgIHRrYSA9IGtBOworICAgfSAgICAgICAKKworICAgLyogaWYgaXQncyBzbWFsbGVyIHRoYW4gbW9kdWx1cyB3ZSBmaW5lICovCisgICBpZiAobXBfdW5zaWduZWRfYmluX3NpemUoa0IpID4gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cykpIHsKKyAgICAgIC8qIGZpbmQgb3JkZXIgKi8KKyAgICAgIHkgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShtb2R1bHVzKTsKKyAgICAgIGZvciAoeCA9IDA7IGx0Y19lY2Nfc2V0c1t4XS5zaXplOyB4KyspIHsKKyAgICAgICAgIGlmICh5IDw9ICh1bnNpZ25lZClsdGNfZWNjX3NldHNbeF0uc2l6ZSkgYnJlYWs7CisgICAgICB9CisgICAKKyAgICAgIC8qIGJhY2sgb2ZmIGlmIHdlIGFyZSBvbiB0aGUgNTIxIGJpdCBjdXJ2ZSAqLworICAgICAgaWYgKHkgPT0gNjYpIC0teDsKKyAgICAgIAorICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZvcmRlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfSAgICAgIAorICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG9yZGVyLCBsdGNfZWNjX3NldHNbeF0ub3JkZXIsIDE2KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIG1wX2NsZWFyKCZvcmRlcik7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorCisgICAgICAvKiBrQiBtdXN0IGJlIGxlc3MgdGhhbiBtb2R1bHVzICovCisgICAgICBpZiAobXBfY21wKGtCLCBvcmRlcikgIT0gTFRDX01QX0xUKSB7CisgICAgICAgICBpZiAoKGVyciA9IG1wX2luaXQoJnRrYikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBtcF9jbGVhcihvcmRlcik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgICAgaWYgKChlcnIgPSBtcF9tb2Qoa0IsIG9yZGVyLCB0a2IpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgbXBfY2xlYXIodGtiKTsKKyAgICAgICAgICAgIG1wX2NsZWFyKG9yZGVyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgdGtiID0ga0I7CisgICAgICB9CisgICAgICBtcF9jbGVhcihvcmRlcik7CisgICB9IGVsc2UgeworICAgICAgdGtiID0ga0I7CisgICB9ICAgICAKKworICAgLyogZ2V0IGJpdGxlbiBhbmQgcm91bmQgdXAgdG8gbmV4dCBtdWx0aXBsZSBvZiBGUF9MVVQgKi8KKyAgIGJpdGxlbiAgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShtb2R1bHVzKSA8PCAzOworICAgeCAgICAgICA9IGJpdGxlbiAlIEZQX0xVVDsKKyAgIGlmICh4KSB7CisgICAgICBiaXRsZW4gKz0gRlBfTFVUIC0geDsKKyAgIH0gIAorICAgbHV0X2dhcCA9IGJpdGxlbiAvIEZQX0xVVDsKKyAgICAgICAgCisgICAvKiBnZXQgdGhlIGsgdmFsdWUgKi8KKyAgIGlmICgobXBfdW5zaWduZWRfYmluX3NpemUodGthKSA+IChzaXplb2Yoa2JbMF0pIC0gMikpIHx8IChtcF91bnNpZ25lZF9iaW5fc2l6ZSh0a2IpID4gKHNpemVvZihrYlswXSkgLSAyKSkgICkgeworICAgICAgaWYgKHRrYSAhPSBrQSkgeworICAgICAgICAgbXBfY2xlYXIodGthKTsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIGlmICh0a2IgIT0ga0IpIHsKKyAgICAgICAgIG1wX2NsZWFyKHRrYik7CisgICAgICB9ICAgICAgICAgCisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorICAgCisgICAvKiBzdG9yZSBrICovCisgICB6ZXJvbWVtKGtiLCBzaXplb2Yoa2IpKTsKKyAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKHRrYSwga2JbMF0pKSAhPSBDUllQVF9PSykgeworICAgICAgaWYgKHRrYSAhPSBrQSkgeworICAgICAgICAgbXBfY2xlYXIodGthKTsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIGlmICh0a2IgIT0ga0IpIHsKKyAgICAgICAgIG1wX2NsZWFyKHRrYik7CisgICAgICB9ICAgICAgICAgCisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBsZXQncyByZXZlcnNlIGtiIHNvIGl0J3MgbGl0dGxlIGVuZGlhbiAqLworICAgeCA9IDA7CisgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUodGthKSAtIDE7CisgICBpZiAodGthICE9IGtBKSB7CisgICAgICBtcF9jbGVhcih0a2EpOworICAgfSAgICAgICAgIAorICAgd2hpbGUgKCh1bnNpZ25lZCl4IDwgeSkgeworICAgICAgeiA9IGtiWzBdW3hdOyBrYlswXVt4XSA9IGtiWzBdW3ldOyBrYlswXVt5XSA9IHo7CisgICAgICArK3g7IC0teTsKKyAgIH0gICAgICAKKyAgIAorICAgLyogc3RvcmUgYiAqLworICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4odGtiLCBrYlsxXSkpICE9IENSWVBUX09LKSB7CisgICAgICBpZiAodGtiICE9IGtCKSB7CisgICAgICAgICBtcF9jbGVhcih0a2IpOworICAgICAgfSAgICAgICAgIAorICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgeCA9IDA7CisgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUodGtiKSAtIDE7CisgICBpZiAodGtiICE9IGtCKSB7CisgICAgICBtcF9jbGVhcih0a2IpOworICAgfSAgICAgICAgIAorICAgd2hpbGUgKCh1bnNpZ25lZCl4IDwgeSkgeworICAgICAgeiA9IGtiWzFdW3hdOyBrYlsxXVt4XSA9IGtiWzFdW3ldOyBrYlsxXVt5XSA9IHo7CisgICAgICArK3g7IC0teTsKKyAgIH0gICAgICAKKworICAgLyogYXQgdGhpcyBwb2ludCB3ZSBjYW4gc3RhcnQsIHlpcGVlICovCisgICBmaXJzdCA9IDE7CisgICBmb3IgKHggPSBsdXRfZ2FwLTE7IHggPj0gMDsgeC0tKSB7CisgICAgICAgLyogZXh0cmFjdCBGUF9MVVQgYml0cyBmcm9tIGtiIHNwcmVhZCBvdXQgYnkgbHV0X2dhcCBiaXRzIGFuZCBvZmZzZXQgYnkgeCBiaXRzIGZyb20gdGhlIHN0YXJ0ICovCisgICAgICAgYml0cG9zID0geDsKKyAgICAgICBmb3IgKHkgPSB6QSA9IHpCID0gMDsgeSA8IEZQX0xVVDsgeSsrKSB7CisgICAgICAgICAgekEgfD0gKChrYlswXVtiaXRwb3M+PjNdID4+IChiaXRwb3MmNykpICYgMSkgPDwgeTsKKyAgICAgICAgICB6QiB8PSAoKGtiWzFdW2JpdHBvcz4+M10gPj4gKGJpdHBvcyY3KSkgJiAxKSA8PCB5OworICAgICAgICAgIGJpdHBvcyArPSBsdXRfZ2FwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIHkqbHV0X2dhcCArIHgsIGJ1dCBoZXJlIHdlIGNhbiBhdm9pZCB0aGUgbXVsdCBpbiBlYWNoIGxvb3AgKi8KKyAgICAgICB9CisgICAgICAgICAgICAgIAorICAgICAgIC8qIGRvdWJsZSBpZiBub3QgZmlyc3QgKi8KKyAgICAgICBpZiAoIWZpcnN0KSB7CisgICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgCisgICAgICAgLyogYWRkIGlmIG5vdCBmaXJzdCwgb3RoZXJ3aXNlIGNvcHkgKi8gICAgICAgICAgCisgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgIGlmICh6QSkgeworICAgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBmcF9jYWNoZVtpZHgxXS5MVVRbekFdLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh6QikgeworICAgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBmcF9jYWNoZVtpZHgyXS5MVVRbekJdLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHpBKSB7CisgICAgICAgICAgICAgIGlmICgobXBfY29weShmcF9jYWNoZVtpZHgxXS5MVVRbekFdLT54LCBSLT54KSAhPSBDUllQVF9PSykgfHwgCisgICAgICAgICAgICAgICAgIChtcF9jb3B5KGZwX2NhY2hlW2lkeDFdLkxVVFt6QV0tPnksIFItPnkpICE9IENSWVBUX09LKSB8fCAKKyAgICAgICAgICAgICAgICAgKG1wX2NvcHkoZnBfY2FjaGVbaWR4MV0ubXUsICAgICAgICBSLT56KSAhPSBDUllQVF9PSykpIHsgcmV0dXJuIENSWVBUX01FTTsgfQorICAgICAgICAgICAgICAgICBmaXJzdCA9IDA7ICAgICAgICAgICAgICAKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHpCICYmIGZpcnN0ID09IDApIHsKKyAgICAgICAgICAgICBpZiAoekIpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQoUiwgZnBfY2FjaGVbaWR4Ml0uTFVUW3pCXSwgUiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHpCICYmIGZpcnN0ID09IDEpIHsKKyAgICAgICAgICAgICAgaWYgKChtcF9jb3B5KGZwX2NhY2hlW2lkeDJdLkxVVFt6Ql0tPngsIFItPngpICE9IENSWVBUX09LKSB8fCAKKyAgICAgICAgICAgICAgICAgKG1wX2NvcHkoZnBfY2FjaGVbaWR4Ml0uTFVUW3pCXS0+eSwgUi0+eSkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgICAgICAgICAobXBfY29weShmcF9jYWNoZVtpZHgyXS5tdSwgICAgICAgIFItPnopICE9IENSWVBUX09LKSkgeyByZXR1cm4gQ1JZUFRfTUVNOyB9CisgICAgICAgICAgICAgICAgIGZpcnN0ID0gMDsgICAgICAgICAgICAgIAorICAgICAgICAgIH0KKyAgICAgICB9CisgICB9ICAgICAKKyAgIHplcm9tZW0oa2IsIHNpemVvZihrYikpOworICAgcmV0dXJuIGx0Y19lY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKK30KKworLyoqIEVDQyBGaXhlZCBQb2ludCBtdWxtb2QgZ2xvYmFsCisgICAgQHBhcmFtIGsgICAgICAgIFRoZSBtdWx0aXBsaWNhbmQKKyAgICBAcGFyYW0gRyAgICAgICAgQmFzZSBwb2ludCB0byBtdWx0aXBseQorICAgIEBwYXJhbSBSICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBwcm9kdWN0CisgICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIGZvciB0aGUgY3VydmUKKyAgICBAcGFyYW0gbWFwICAgICAgW2Jvb2xlYW5dIElmIG5vbi16ZXJvIG1hcHMgdGhlIHBvaW50IGJhY2sgdG8gYWZmaW5lIGNvLW9yZGluYXRlcywgb3RoZXJ3aXNlIGl0J3MgbGVmdCBpbiBqYWNvYmlhbi1tb250Z29tZXJ5IGZvcm0KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAgCitpbnQgbHRjX2VjY19mcF9tdWwyYWRkKGVjY19wb2ludCAqQSwgdm9pZCAqa0EsCisgICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQiwgdm9pZCAqa0IsCisgICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQywgdm9pZCAqbW9kdWx1cykKK3sKKyAgIGludCAgaWR4MSwgaWR4MiwgZXJyOworICAgdm9pZCAqbXAsICptdTsKKyAgIAorICAgbXAgPSBOVUxMOworICAgbXUgPSBOVUxMOworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19lY2NfZnBfbG9jayk7CisgICAgICAvKiBmaW5kIHBvaW50ICovCisgICAgICBpZHgxID0gZmluZF9iYXNlKEEpOworCisgICAgICAvKiBubyBlbnRyeT8gKi8KKyAgICAgIGlmIChpZHgxID09IC0xKSB7CisgICAgICAgICAvKiBmaW5kIGhvbGUgYW5kIGFkZCBpdCAqLworICAgICAgICAgaWR4MSA9IGZpbmRfaG9sZSgpOworCisgICAgICAgICBpZiAoKGVyciA9IGFkZF9lbnRyeShpZHgxLCBBKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogaW5jcmVtZW50IExSVSAqLworICAgICAgKysoZnBfY2FjaGVbaWR4MV0ubHJ1X2NvdW50KTsKKyAKKyAgICAgIC8qIGZpbmQgcG9pbnQgKi8KKyAgICAgIGlkeDIgPSBmaW5kX2Jhc2UoQik7CisKKyAgICAgIC8qIG5vIGVudHJ5PyAqLworICAgICAgaWYgKGlkeDIgPT0gLTEpIHsKKyAgICAgICAgIC8qIGZpbmQgaG9sZSBhbmQgYWRkIGl0ICovCisgICAgICAgICBpZHgyID0gZmluZF9ob2xlKCk7CisKKyAgICAgICAgIGlmICgoZXJyID0gYWRkX2VudHJ5KGlkeDIsIEIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBpbmNyZW1lbnQgTFJVICovCisgICAgICArKyhmcF9jYWNoZVtpZHgyXS5scnVfY291bnQpOworCisgICAgICAvKiBpZiBpdCdzIDIgYnVpbGQgdGhlIExVVCwgaWYgaXQncyBoaWdoZXIganVzdCB1c2UgdGhlIExVVCAqLworICAgICAgaWYgKGZwX2NhY2hlW2lkeDFdLmxydV9jb3VudCA9PSAyKSB7CisgICAgICAgICAvKiBjb21wdXRlIG1wICovCisgICAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsgZ290byBMQkxfRVJSOyB9CisKKyAgICAgICAgIC8qIGNvbXB1dGUgbXUgKi8KKyAgICAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKG11LCBtb2R1bHVzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAvKiBidWlsZCB0aGUgTFVUICovCisgICAgICAgICBpZiAoKGVyciA9IGJ1aWxkX2x1dChpZHgxLCBtb2R1bHVzLCBtcCwgbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjs7CisgICAgICAgICB9ICAKKyAgICAgIH0KKworICAgICAgLyogaWYgaXQncyAyIGJ1aWxkIHRoZSBMVVQsIGlmIGl0J3MgaGlnaGVyIGp1c3QgdXNlIHRoZSBMVVQgKi8KKyAgICAgIGlmIChmcF9jYWNoZVtpZHgyXS5scnVfY291bnQgPT0gMikgeworICAgICAgICAgaWYgKG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIGNvbXB1dGUgbXAgKi8KKyAgICAgICAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKSAhPSBDUllQVF9PSykgeyBnb3RvIExCTF9FUlI7IH0KKworICAgICAgICAgICAgLyogY29tcHV0ZSBtdSAqLworICAgICAgICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZtdSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X25vcm1hbGl6YXRpb24obXUsIG1vZHVsdXMpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgfQorICAgICAgICAgICAgICAgICAKKyAgICAgICAgIC8qIGJ1aWxkIHRoZSBMVVQgKi8KKyAgICAgICAgIGlmICgoZXJyID0gYnVpbGRfbHV0KGlkeDIsIG1vZHVsdXMsIG1wLCBtdSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgZ290byBMQkxfRVJSOzsKKyAgICAgICAgIH0gIAorICAgICAgfQorCisKKyAgICAgIGlmIChmcF9jYWNoZVtpZHgxXS5scnVfY291bnQgPj0gMiAmJiBmcF9jYWNoZVtpZHgyXS5scnVfY291bnQgPj0gMikgeworICAgICAgICAgaWYgKG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIGNvbXB1dGUgbXAgKi8KKyAgICAgICAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKSAhPSBDUllQVF9PSykgeyBnb3RvIExCTF9FUlI7IH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVyciA9IGFjY2VsX2ZwX211bDJhZGQoaWR4MSwgaWR4Miwga0EsIGtCLCBDLCBtb2R1bHVzLCBtcCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgZXJyID0gbHRjX2VjY19tdWwyYWRkKEEsIGtBLCBCLCBrQiwgQywgbW9kdWx1cyk7CisgICAgICB9CitMQkxfRVJSOgorICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19lY2NfZnBfbG9jayk7CisgICAgaWYgKG1wICE9IE5VTEwpIHsKKyAgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgIH0gICAgICAgCisgICAgaWYgKG11ICE9IE5VTEwpIHsKKyAgICAgICBtcF9jbGVhcihtdSk7CisgICAgfSAgICAgICAKKyAgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKiBFQ0MgRml4ZWQgUG9pbnQgbXVsbW9kIGdsb2JhbAorICAgIEBwYXJhbSBrICAgICAgICBUaGUgbXVsdGlwbGljYW5kCisgICAgQHBhcmFtIEcgICAgICAgIEJhc2UgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICBAcGFyYW0gUiAgICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgcHJvZHVjdAorICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBmb3IgdGhlIGN1cnZlCisgICAgQHBhcmFtIG1hcCAgICAgIFtib29sZWFuXSBJZiBub24temVybyBtYXBzIHRoZSBwb2ludCBiYWNrIHRvIGFmZmluZSBjby1vcmRpbmF0ZXMsIG90aGVyd2lzZSBpdCdzIGxlZnQgaW4gamFjb2JpYW4tbW9udGdvbWVyeSBmb3JtCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgIAoraW50IGx0Y19lY2NfZnBfbXVsbW9kKHZvaWQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCBpbnQgbWFwKQoreworICAgaW50ICAgaWR4LCBlcnI7CisgICB2b2lkICptcCwgKm11OworICAgCisgICBtcCA9IE5VTEw7CisgICBtdSA9IE5VTEw7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2VjY19mcF9sb2NrKTsKKyAgICAgIC8qIGZpbmQgcG9pbnQgKi8KKyAgICAgIGlkeCA9IGZpbmRfYmFzZShHKTsKKworICAgICAgLyogbm8gZW50cnk/ICovCisgICAgICBpZiAoaWR4ID09IC0xKSB7CisgICAgICAgICAvKiBmaW5kIGhvbGUgYW5kIGFkZCBpdCAqLworICAgICAgICAgaWR4ID0gZmluZF9ob2xlKCk7CisKKyAgICAgICAgIGlmICgoZXJyID0gYWRkX2VudHJ5KGlkeCwgRykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIGluY3JlbWVudCBMUlUgKi8KKyAgICAgICsrKGZwX2NhY2hlW2lkeF0ubHJ1X2NvdW50KTsKKyAKKyAgICAgIC8qIGlmIGl0J3MgMiBidWlsZCB0aGUgTFVULCBpZiBpdCdzIGhpZ2hlciBqdXN0IHVzZSB0aGUgTFVUICovCisgICAgICBpZiAoZnBfY2FjaGVbaWR4XS5scnVfY291bnQgPT0gMikgeworICAgICAgICAgLyogY29tcHV0ZSBtcCAqLworICAgICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3NldHVwKG1vZHVsdXMsICZtcCkpICE9IENSWVBUX09LKSB7IGdvdG8gTEJMX0VSUjsgfQorCisgICAgICAgICAvKiBjb21wdXRlIG11ICovCisgICAgICAgICBpZiAoKGVyciA9IG1wX2luaXQoJm11KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICB9CisgICAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfbm9ybWFsaXphdGlvbihtdSwgbW9kdWx1cykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgLyogYnVpbGQgdGhlIExVVCAqLworICAgICAgICAgaWYgKChlcnIgPSBidWlsZF9sdXQoaWR4LCBtb2R1bHVzLCBtcCwgbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjs7CisgICAgICAgICB9ICAKKyAgICAgIH0KKworICAgICAgaWYgKGZwX2NhY2hlW2lkeF0ubHJ1X2NvdW50ID49IDIpIHsKKyAgICAgICAgIGlmIChtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBjb21wdXRlIG1wICovCisgICAgICAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsgZ290byBMQkxfRVJSOyB9CisgICAgICAgICB9CisgICAgICAgICBlcnIgPSBhY2NlbF9mcF9tdWwoaWR4LCBrLCBSLCBtb2R1bHVzLCBtcCwgbWFwKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBlcnIgPSBsdGNfZWNjX211bG1vZChrLCBHLCBSLCBtb2R1bHVzLCBtYXApOworICAgICAgfQorTEJMX0VSUjoKKyAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfZWNjX2ZwX2xvY2spOworICAgIGlmIChtcCAhPSBOVUxMKSB7CisgICAgICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgICB9ICAgICAgIAorICAgIGlmIChtdSAhPSBOVUxMKSB7CisgICAgICAgbXBfY2xlYXIobXUpOworICAgIH0gICAgICAgCisgICAgcmV0dXJuIGVycjsKK30KKworLyoqIEZyZWUgdGhlIEZpeGVkIFBvaW50IHRhYmxlcyAqLwordm9pZCBsdGNfZWNjX2ZwX2ZyZWUodm9pZCkKK3sKKyAgIHVuc2lnbmVkIHgsIHk7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2VjY19mcF9sb2NrKTsKKyAgIGZvciAoeCA9IDA7IHggPCBGUF9FTlRSSUVTOyB4KyspIHsKKyAgICAgIGlmIChmcF9jYWNoZVt4XS5nICE9IE5VTEwpIHsKKyAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAoMVU8PEZQX0xVVCk7IHkrKykgeworICAgICAgICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbeF0uTFVUW3ldKTsKKyAgICAgICAgICAgIGZwX2NhY2hlW3hdLkxVVFt5XSA9IE5VTEw7CisgICAgICAgICB9CisgICAgICAgICBsdGNfZWNjX2RlbF9wb2ludChmcF9jYWNoZVt4XS5nKTsKKyAgICAgICAgIGZwX2NhY2hlW3hdLmcgICAgICAgICA9IE5VTEw7CisgICAgICAgICBpZiAoZnBfY2FjaGVbeF0ubXUgIT0gTlVMTCkgeworICAgICAgICAgICAgbXBfY2xlYXIoZnBfY2FjaGVbeF0ubXUpOworICAgICAgICAgICAgZnBfY2FjaGVbeF0ubXUgICAgID0gTlVMTDsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwX2NhY2hlW3hdLmxydV9jb3VudCA9IDA7CisgICAgICB9ICAgICAgICAgCisgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfZWNjX2ZwX2xvY2spOworfSAgICAgICAgIAorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjI3ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzAzIDAwOjM5OjU2ICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL21hdGgvZ21wX2Rlc2MuYyBiL3NyYy9tYXRoL2dtcF9kZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjMjc5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYXRoL2dtcF9kZXNjLmMKQEAgLTAsMCArMSw0NzggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKyNkZWZpbmUgREVTQ19ERUZfT05MWQorI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBHTVBfREVTQworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxnbXAuaD4KKworc3RhdGljIGludCBpbml0KHZvaWQgKiphKQoreyAKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKworICAgKmEgPSBYQ0FMTE9DKDEsIHNpemVvZihfX21wel9zdHJ1Y3QpKTsKKyAgIGlmICgqYSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorICAgbXB6X2luaXQoKChfX21wel9zdHJ1Y3QgKikqYSkpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgdm9pZCBkZWluaXQodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEtWRChhICE9IE5VTEwpOworICAgbXB6X2NsZWFyKGEpOworICAgWEZSRUUoYSk7Cit9CisKK3N0YXRpYyBpbnQgbmVnKHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBtcHpfbmVnKGIsIGEpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IGNvcHkodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIG1wel9zZXQoYiwgYSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jb3B5KHZvaWQgKiphLCB2b2lkICpiKQoreworICAgaWYgKGluaXQoYSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICByZXR1cm4gY29weShiLCAqYSk7Cit9CisKKy8qIC0tLS0gdHJpdmlhbCAtLS0tICovCitzdGF0aWMgaW50IHNldF9pbnQodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgbXB6X3NldF91aSgoKF9fbXB6X3N0cnVjdCAqKWEpLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2ludCh2b2lkICphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIG1wel9nZXRfdWkoYSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9kaWdpdCh2b2lkICphLCBpbnQgbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcHpfZ2V0bGltYm4oYSwgbik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RpZ2l0X2NvdW50KHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXB6X3NpemUoYSk7Cit9CisgICAKK3N0YXRpYyBpbnQgY29tcGFyZSh2b2lkICphLCB2b2lkICpiKQoreworICAgaW50IHJldDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldCA9IG1wel9jbXAoYSwgYik7CisgICBpZiAocmV0IDwgMCkgeworICAgICAgcmV0dXJuIExUQ19NUF9MVDsKKyAgIH0gZWxzZSBpZiAocmV0ID4gMCkgeworICAgICAgcmV0dXJuIExUQ19NUF9HVDsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gTFRDX01QX0VROworICAgfQorfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZCh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIpCit7CisgICBpbnQgcmV0OworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0ID0gbXB6X2NtcF91aSgoKF9fbXB6X3N0cnVjdCAqKWEpLCBiKTsKKyAgIGlmIChyZXQgPCAwKSB7CisgICAgICByZXR1cm4gTFRDX01QX0xUOworICAgfSBlbHNlIGlmIChyZXQgPiAwKSB7CisgICAgICByZXR1cm4gTFRDX01QX0dUOworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBMVENfTVBfRVE7CisgICB9Cit9CisKK3N0YXRpYyBpbnQgY291bnRfYml0cyh2b2lkICphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIG1wel9zaXplaW5iYXNlKGEsIDIpOworfQorCitzdGF0aWMgaW50IGNvdW50X2xzYl9iaXRzKHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXB6X3NjYW4xKGEsIDApOworfQorCisKK3N0YXRpYyBpbnQgdHdvZXhwdCh2b2lkICphLCBpbnQgbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIG1wel9zZXRfdWkoYSwgMCk7CisgICBtcHpfc2V0Yml0KGEsIG4pOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiAtLS0tIGNvbnZlcnNpb25zIC0tLS0gKi8KKworLyogcmVhZCBhc2NpaSBzdHJpbmcgKi8KK3N0YXRpYyBpbnQgcmVhZF9yYWRpeCh2b2lkICphLCBjb25zdCBjaGFyICpiLCBpbnQgcmFkaXgpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBtcHpfc2V0X3N0cihhLCBiLCByYWRpeCk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHdyaXRlIG9uZSAqLworc3RhdGljIGludCB3cml0ZV9yYWRpeCh2b2lkICphLCBjaGFyICpiLCBpbnQgcmFkaXgpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBtcHpfZ2V0X3N0cihiLCByYWRpeCwgYSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGdldCBzaXplIGFzIHVuc2lnbmVkIGNoYXIgc3RyaW5nICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9zaXplKHZvaWQgKmEpCit7CisgICB1bnNpZ25lZCBsb25nIHQ7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICB0ID0gbXB6X3NpemVpbmJhc2UoYSwgMik7CisgICBpZiAobXB6X2NtcF91aSgoKF9fbXB6X3N0cnVjdCAqKWEpLCAwKSA9PSAwKSByZXR1cm4gMDsKKyAgIHJldHVybiAodD4+MykgKyAoKHQmNyk/MTowKTsKK30KKworLyogc3RvcmUgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfd3JpdGUodm9pZCAqYSwgdW5zaWduZWQgY2hhciAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIG1wel9leHBvcnQoYiwgTlVMTCwgMSwgMSwgMSwgMCwgKChfX21wel9zdHJ1Y3QqKWEpKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogcmVhZCAqLworc3RhdGljIGludCB1bnNpZ25lZF9yZWFkKHZvaWQgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgbXB6X2ltcG9ydChhLCBsZW4sIDEsIDEsIDEsIDAsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBhZGQgKi8KK3N0YXRpYyBpbnQgYWRkKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfYWRkKGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorICAKK3N0YXRpYyBpbnQgYWRkaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfYWRkX3VpKGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBzdWIgKi8KK3N0YXRpYyBpbnQgc3ViKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfc3ViKGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IHN1Ymkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgbXB6X3N1Yl91aShjLCBhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogbXVsICovCitzdGF0aWMgaW50IG11bCh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgbXB6X211bChjLCBhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBtdWxpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9tdWxfdWkoYywgYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHNxciAqLworc3RhdGljIGludCBzcXIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIG1wel9tdWwoYiwgYSwgYSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGRpdiAqLworc3RhdGljIGludCBkaXZpZGUodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIG1wel90IHRtcDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgIG1wel9pbml0KHRtcCk7CisgICAgICBtcHpfZGl2ZXhhY3QodG1wLCBhLCBiKTsKKyAgIH0KKyAgIGlmIChkICE9IE5VTEwpIHsKKyAgICAgIG1wel9tb2QoZCwgYSwgYik7CisgICB9CisgICBpZiAoYyAhPSBOVUxMKSB7CisgICAgICBtcHpfc2V0KGMsIHRtcCk7CisgICAgICBtcHpfY2xlYXIodG1wKTsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBkaXZfMih2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgbXB6X2RpdmV4YWN0X3VpKGIsIGEsIDIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBtb2RpICovCitzdGF0aWMgaW50IG1vZGkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgCisgICAqYyA9IG1wel9mZGl2X3VpKGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfSAgCisKKy8qIGdjZCAqLworc3RhdGljIGludCBnY2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9nY2QoYywgYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGxjbSAqLworc3RhdGljIGludCBsY20odm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9sY20oYywgYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK3N0YXRpYyBpbnQgbXVsbW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGQgIT0gTlVMTCk7CisgICBtcHpfbXVsKGQsIGEsIGIpOworICAgbXB6X21vZChkLCBkLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBzcXJtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9tdWwoYywgYSwgYSk7CisgICBtcHpfbW9kKGMsIGMsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBpbnZtb2QgKi8KK3N0YXRpYyBpbnQgaW52bW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfaW52ZXJ0KGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBzZXR1cCAqLworc3RhdGljIGludCBtb250Z29tZXJ5X3NldHVwKHZvaWQgKmEsIHZvaWQgKipiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgKmIgPSAodm9pZCAqKTE7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGdldCBub3JtYWxpemF0aW9uIHZhbHVlICovCitzdGF0aWMgaW50IG1vbnRnb21lcnlfbm9ybWFsaXphdGlvbih2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgbXB6X3NldF91aShhLCAxKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogcmVkdWNlICovCitzdGF0aWMgaW50IG1vbnRnb21lcnlfcmVkdWNlKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfbW9kKGEsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBjbGVhbiB1cCAqLworc3RhdGljIHZvaWQgbW9udGdvbWVyeV9kZWluaXQodm9pZCAqYSkKK3sKK30KKworc3RhdGljIGludCBleHB0bW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGQgIT0gTlVMTCk7CisgICBtcHpfcG93bShkLCBhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30gICAKKworc3RhdGljIGludCBpc3ByaW1lKHZvaWQgKmEsIGludCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgICpiID0gbXB6X3Byb2JhYl9wcmltZV9wKGEsIDgpID4gMCA/IExUQ19NUF9ZRVMgOiBMVENfTVBfTk87CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK2NvbnN0IGx0Y19tYXRoX2Rlc2NyaXB0b3IgZ21wX2Rlc2MgPSB7CisgICAiR05VIE1QIiwKKyAgIHNpemVvZihtcF9saW1iX3QpICogQ0hBUl9CSVQgLSBHTVBfTkFJTF9CSVRTLAorCisgICAmaW5pdCwKKyAgICZpbml0X2NvcHksCisgICAmZGVpbml0LAorCisgICAmbmVnLAorICAgJmNvcHksCisKKyAgICZzZXRfaW50LAorICAgJmdldF9pbnQsCisgICAmZ2V0X2RpZ2l0LAorICAgJmdldF9kaWdpdF9jb3VudCwKKyAgICZjb21wYXJlLAorICAgJmNvbXBhcmVfZCwKKyAgICZjb3VudF9iaXRzLAorICAgJmNvdW50X2xzYl9iaXRzLAorICAgJnR3b2V4cHQsCisKKyAgICZyZWFkX3JhZGl4LAorICAgJndyaXRlX3JhZGl4LAorICAgJnVuc2lnbmVkX3NpemUsCisgICAmdW5zaWduZWRfd3JpdGUsCisgICAmdW5zaWduZWRfcmVhZCwKKworICAgJmFkZCwKKyAgICZhZGRpLAorICAgJnN1YiwKKyAgICZzdWJpLAorICAgJm11bCwKKyAgICZtdWxpLAorICAgJnNxciwKKyAgICZkaXZpZGUsCisgICAmZGl2XzIsCisgICAmbW9kaSwKKyAgICZnY2QsCisgICAmbGNtLAorCisgICAmbXVsbW9kLAorICAgJnNxcm1vZCwKKyAgICZpbnZtb2QsCisKKyAgICZtb250Z29tZXJ5X3NldHVwLAorICAgJm1vbnRnb21lcnlfbm9ybWFsaXphdGlvbiwKKyAgICZtb250Z29tZXJ5X3JlZHVjZSwKKyAgICZtb250Z29tZXJ5X2RlaW5pdCwKKworICAgJmV4cHRtb2QsCisgICAmaXNwcmltZSwKKworI2lmZGVmIE1FQ0MKKyNpZmRlZiBNRUNDX0ZQCisgICAmbHRjX2VjY19mcF9tdWxtb2QsCisjZWxzZQorICAgJmx0Y19lY2NfbXVsbW9kLAorI2VuZGlmIC8qIE1FQ0NfRlAgKi8KKyAgICZsdGNfZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50LAorICAgJmx0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQsCisgICAmbHRjX2VjY19tYXAsCisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKKyNpZmRlZiBNRUNDX0ZQCisgICAmbHRjX2VjY19mcF9tdWwyYWRkLAorI2Vsc2UKKyAgICZsdGNfZWNjX211bDJhZGQsCisjZW5kaWYgLyogTUVDQ19GUCAqLworI2Vsc2UKKyAgIE5VTEwsCisjZW5kaWYgLyogTFRDX0VDQ19TSEFNSVIgKi8KKyNlbHNlCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisjZW5kaWYgLyogTUVDQyAqLworCisjaWZkZWYgTVJTQQorICAgJnJzYV9tYWtlX2tleSwKKyAgICZyc2FfZXhwdG1vZCwKKyNlbHNlCisgICBOVUxMLCBOVUxMCisjZW5kaWYKKyAgIAorfTsKKworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hdGgvZ21wX2Rlc2MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wMyAwMDozOTo1NiAkICovCmRpZmYgLS1naXQgYS9zcmMvbWF0aC9sdG1fZGVzYy5jIGIvc3JjL21hdGgvbHRtX2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZkZDVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21hdGgvbHRtX2Rlc2MuYwpAQCAtMCwwICsxLDQ4MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworI2RlZmluZSBERVNDX0RFRl9PTkxZCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIExUTV9ERVNDCisKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCBtcGlfY29kZSwgbHRjX2NvZGU7Cit9IG1waV90b19sdGNfY29kZXNbXSA9IHsKKyAgIHsgTVBfT0tBWSAsICBDUllQVF9PS30sCisgICB7IE1QX01FTSAgLCAgQ1JZUFRfTUVNfSwKKyAgIHsgTVBfVkFMICAsICBDUllQVF9JTlZBTElEX0FSR30sCit9OworCisvKioKKyAgIENvbnZlcnQgYSBNUEkgZXJyb3IgdG8gYSBMVEMgZXJyb3IgKFBvc3NpYmx5IHRoZSBtb3N0IHBvd2VyZnVsIGZ1bmN0aW9uIGV2ZXIhICBPaCB3YWl0Li4uIG5vKSAKKyAgIEBwYXJhbSBlcnIgICAgVGhlIGVycm9yIHRvIGNvbnZlcnQKKyAgIEByZXR1cm4gVGhlIGVxdWl2YWxlbnQgTFRDIGVycm9yIGNvZGUgb3IgQ1JZUFRfRVJST1IgaWYgbm9uZSBmb3VuZAorKi8KK3N0YXRpYyBpbnQgbXBpX3RvX2x0Y19lcnJvcihpbnQgZXJyKQoreworICAgaW50IHg7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YobXBpX3RvX2x0Y19jb2Rlcykvc2l6ZW9mKG1waV90b19sdGNfY29kZXNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKGVyciA9PSBtcGlfdG9fbHRjX2NvZGVzW3hdLm1waV9jb2RlKSB7IAorICAgICAgICAgIHJldHVybiBtcGlfdG9fbHRjX2NvZGVzW3hdLmx0Y19jb2RlOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9FUlJPUjsKK30KKworc3RhdGljIGludCBpbml0KHZvaWQgKiphKQoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworCisgICAqYSA9IFhDQUxMT0MoMSwgc2l6ZW9mKG1wX2ludCkpOworICAgaWYgKCphID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICAKKyAgIGlmICgoZXJyID0gbXBpX3RvX2x0Y19lcnJvcihtcF9pbml0KCphKSkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRSgqYSk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkZWluaXQodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEtWRChhICE9IE5VTEwpOworICAgbXBfY2xlYXIoYSk7CisgICBYRlJFRShhKTsKK30KKworc3RhdGljIGludCBuZWcodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX25lZyhhLCBiKSk7Cit9CisKK3N0YXRpYyBpbnQgY29weSh2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfY29weShhLCBiKSk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jb3B5KHZvaWQgKiphLCB2b2lkICpiKQoreworICAgaWYgKGluaXQoYSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICByZXR1cm4gY29weShiLCAqYSk7Cit9CisKKy8qIC0tLS0gdHJpdmlhbCAtLS0tICovCitzdGF0aWMgaW50IHNldF9pbnQodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfc2V0X2ludChhLCBiKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9pbnQodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcF9nZXRfaW50KGEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZGlnaXQodm9pZCAqYSwgaW50IG4pCit7CisgICBtcF9pbnQgKkE7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBBID0gYTsKKyAgIHJldHVybiAobiA+PSBBLT51c2VkIHx8IG4gPCAwKSA/IDAgOiBBLT5kcFtuXTsKK30KKworc3RhdGljIGludCBnZXRfZGlnaXRfY291bnQodm9pZCAqYSkKK3sKKyAgIG1wX2ludCAqQTsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIEEgPSBhOworICAgcmV0dXJuIEEtPnVzZWQ7Cit9CisgICAKK3N0YXRpYyBpbnQgY29tcGFyZSh2b2lkICphLCB2b2lkICpiKQoreworICAgaW50IHJldDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldCA9IG1wX2NtcChhLCBiKTsKKyAgIHN3aXRjaCAocmV0KSB7CisgICAgICBjYXNlIE1QX0xUOiByZXR1cm4gTFRDX01QX0xUOworICAgICAgY2FzZSBNUF9FUTogcmV0dXJuIExUQ19NUF9FUTsKKyAgICAgIGNhc2UgTVBfR1Q6IHJldHVybiBMVENfTVBfR1Q7CisgICB9CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXJlX2Qodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiKQoreworICAgaW50IHJldDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldCA9IG1wX2NtcF9kKGEsIGIpOworICAgc3dpdGNoIChyZXQpIHsKKyAgICAgIGNhc2UgTVBfTFQ6IHJldHVybiBMVENfTVBfTFQ7CisgICAgICBjYXNlIE1QX0VROiByZXR1cm4gTFRDX01QX0VROworICAgICAgY2FzZSBNUF9HVDogcmV0dXJuIExUQ19NUF9HVDsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X2JpdHModm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcF9jb3VudF9iaXRzKGEpOworfQorCitzdGF0aWMgaW50IGNvdW50X2xzYl9iaXRzKHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXBfY250X2xzYihhKTsKK30KKworCitzdGF0aWMgaW50IHR3b2V4cHQodm9pZCAqYSwgaW50IG4pCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF8yZXhwdChhLCBuKSk7Cit9CisKKy8qIC0tLS0gY29udmVyc2lvbnMgLS0tLSAqLworCisvKiByZWFkIGFzY2lpIHN0cmluZyAqLworc3RhdGljIGludCByZWFkX3JhZGl4KHZvaWQgKmEsIGNvbnN0IGNoYXIgKmIsIGludCByYWRpeCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfcmFkaXgoYSwgYiwgcmFkaXgpKTsKK30KKworLyogd3JpdGUgb25lICovCitzdGF0aWMgaW50IHdyaXRlX3JhZGl4KHZvaWQgKmEsIGNoYXIgKmIsIGludCByYWRpeCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3RvcmFkaXgoYSwgYiwgcmFkaXgpKTsKK30KKworLyogZ2V0IHNpemUgYXMgdW5zaWduZWQgY2hhciBzdHJpbmcgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVuc2lnbmVkX3NpemUodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcF91bnNpZ25lZF9iaW5fc2l6ZShhKTsKK30KKworLyogc3RvcmUgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfd3JpdGUodm9pZCAqYSwgdW5zaWduZWQgY2hhciAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3RvX3Vuc2lnbmVkX2JpbihhLCBiKSk7Cit9CisKKy8qIHJlYWQgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfcmVhZCh2b2lkICphLCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfdW5zaWduZWRfYmluKGEsIGIsIGxlbikpOworfQorCisvKiBhZGQgKi8KK3N0YXRpYyBpbnQgYWRkKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9hZGQoYSwgYiwgYykpOworfQorICAKK3N0YXRpYyBpbnQgYWRkaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9hZGRfZChhLCBiLCBjKSk7Cit9CisKKy8qIHN1YiAqLworc3RhdGljIGludCBzdWIodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3N1YihhLCBiLCBjKSk7Cit9CisKK3N0YXRpYyBpbnQgc3ViaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9zdWJfZChhLCBiLCBjKSk7Cit9CisKKy8qIG11bCAqLworc3RhdGljIGludCBtdWwodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX211bChhLCBiLCBjKSk7Cit9CisKK3N0YXRpYyBpbnQgbXVsaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9tdWxfZChhLCBiLCBjKSk7Cit9CisKKy8qIHNxciAqLworc3RhdGljIGludCBzcXIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3NxcihhLCBiKSk7Cit9CisKKy8qIGRpdiAqLworc3RhdGljIGludCBkaXZpZGUodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2RpdihhLCBiLCBjLCBkKSk7Cit9CisKK3N0YXRpYyBpbnQgZGl2XzIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2Rpdl8yKGEsIGIpKTsKK30KKworLyogbW9kaSAqLworc3RhdGljIGludCBtb2RpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyAqYykKK3sKKyAgIG1wX2RpZ2l0IHRtcDsKKyAgIGludCAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IG1waV90b19sdGNfZXJyb3IobXBfbW9kX2QoYSwgYiwgJnRtcCkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgICpjID0gdG1wOworICAgcmV0dXJuIENSWVBUX09LOworfSAgCisKKy8qIGdjZCAqLworc3RhdGljIGludCBnY2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2djZChhLCBiLCBjKSk7Cit9CisKKy8qIGxjbSAqLworc3RhdGljIGludCBsY20odm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2xjbShhLCBiLCBjKSk7Cit9CisKK3N0YXRpYyBpbnQgbXVsbW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGQgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9tdWxtb2QoYSxiLGMsZCkpOworfQorCitzdGF0aWMgaW50IHNxcm1vZCh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfc3FybW9kKGEsYixjKSk7Cit9CisKKy8qIGludm1vZCAqLworc3RhdGljIGludCBpbnZtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2ludm1vZChhLCBiLCBjKSk7Cit9CisKKy8qIHNldHVwICovCitzdGF0aWMgaW50IG1vbnRnb21lcnlfc2V0dXAodm9pZCAqYSwgdm9pZCAqKmIpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgKmIgPSBYQ0FMTE9DKDEsIHNpemVvZihtcF9kaWdpdCkpOworICAgaWYgKCpiID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICBpZiAoKGVyciA9IG1waV90b19sdGNfZXJyb3IobXBfbW9udGdvbWVyeV9zZXR1cChhLCAobXBfZGlnaXQgKikqYikpKSAhPSBDUllQVF9PSykgeworICAgICAgWEZSRUUoKmIpOworICAgfQorICAgcmV0dXJuIGVycjsKK30KKworLyogZ2V0IG5vcm1hbGl6YXRpb24gdmFsdWUgKi8KK3N0YXRpYyBpbnQgbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbihhLCBiKSk7Cit9CisKKy8qIHJlZHVjZSAqLworc3RhdGljIGludCBtb250Z29tZXJ5X3JlZHVjZSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfbW9udGdvbWVyeV9yZWR1Y2UoYSwgYiwgKigobXBfZGlnaXQgKiljKSkpOworfQorCisvKiBjbGVhbiB1cCAqLworc3RhdGljIHZvaWQgbW9udGdvbWVyeV9kZWluaXQodm9pZCAqYSkKK3sKKyAgIFhGUkVFKGEpOworfQorCitzdGF0aWMgaW50IGV4cHRtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZCAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2V4cHRtb2QoYSxiLGMsZCkpOworfSAgIAorCitzdGF0aWMgaW50IGlzcHJpbWUodm9pZCAqYSwgaW50ICpiKQoreworICAgaW50IGVycjsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGVyciA9IG1waV90b19sdGNfZXJyb3IobXBfcHJpbWVfaXNfcHJpbWUoYSwgOCwgYikpOworICAgKmIgPSAoKmIgPT0gTVBfWUVTKSA/IExUQ19NUF9ZRVMgOiBMVENfTVBfTk87CisgICByZXR1cm4gZXJyOworfSAgIAorCitjb25zdCBsdGNfbWF0aF9kZXNjcmlwdG9yIGx0bV9kZXNjID0geworCisgICAiTGliVG9tTWF0aCIsCisgICAoaW50KURJR0lUX0JJVCwKKworICAgJmluaXQsCisgICAmaW5pdF9jb3B5LAorICAgJmRlaW5pdCwKKworICAgJm5lZywKKyAgICZjb3B5LAorCisgICAmc2V0X2ludCwKKyAgICZnZXRfaW50LAorICAgJmdldF9kaWdpdCwKKyAgICZnZXRfZGlnaXRfY291bnQsCisgICAmY29tcGFyZSwKKyAgICZjb21wYXJlX2QsCisgICAmY291bnRfYml0cywKKyAgICZjb3VudF9sc2JfYml0cywKKyAgICZ0d29leHB0LAorCisgICAmcmVhZF9yYWRpeCwKKyAgICZ3cml0ZV9yYWRpeCwKKyAgICZ1bnNpZ25lZF9zaXplLAorICAgJnVuc2lnbmVkX3dyaXRlLAorICAgJnVuc2lnbmVkX3JlYWQsCisKKyAgICZhZGQsCisgICAmYWRkaSwKKyAgICZzdWIsCisgICAmc3ViaSwKKyAgICZtdWwsCisgICAmbXVsaSwKKyAgICZzcXIsCisgICAmZGl2aWRlLAorICAgJmRpdl8yLAorICAgJm1vZGksCisgICAmZ2NkLAorICAgJmxjbSwKKworICAgJm11bG1vZCwKKyAgICZzcXJtb2QsCisgICAmaW52bW9kLAorICAgCisgICAmbW9udGdvbWVyeV9zZXR1cCwKKyAgICZtb250Z29tZXJ5X25vcm1hbGl6YXRpb24sCisgICAmbW9udGdvbWVyeV9yZWR1Y2UsCisgICAmbW9udGdvbWVyeV9kZWluaXQsCisKKyAgICZleHB0bW9kLAorICAgJmlzcHJpbWUsCisKKyNpZmRlZiBNRUNDCisjaWZkZWYgTUVDQ19GUAorICAgJmx0Y19lY2NfZnBfbXVsbW9kLAorI2Vsc2UgICAKKyAgICZsdGNfZWNjX211bG1vZCwKKyNlbmRpZgorICAgJmx0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQsCisgICAmbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludCwKKyAgICZsdGNfZWNjX21hcCwKKyNpZmRlZiBMVENfRUNDX1NIQU1JUgorI2lmZGVmIE1FQ0NfRlAKKyAgICZsdGNfZWNjX2ZwX211bDJhZGQsCisjZWxzZQorICAgJmx0Y19lY2NfbXVsMmFkZCwKKyNlbmRpZiAvKiBNRUNDX0ZQICovCisjZWxzZQorICAgTlVMTCwKKyNlbmRpZiAvKiBMVENfRUNDX1NIQU1JUiAqLworI2Vsc2UKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisjZW5kaWYgLyogTUVDQyAqLworCisjaWZkZWYgTVJTQQorICAgJnJzYV9tYWtlX2tleSwKKyAgICZyc2FfZXhwdG1vZCwKKyNlbHNlCisgICBOVUxMLCBOVUxMCisjZW5kaWYKK307CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYXRoL2x0bV9kZXNjLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMDA6Mzk6NTYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hdGgvbXVsdGkuYyBiL3NyYy9tYXRoL211bHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNGQ3OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYXRoL211bHRpLmMKQEAgLTAsMCArMSw2MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgTVBJCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludCBsdGNfaW5pdF9tdWx0aSh2b2lkICoqYSwgLi4uKQoreworICAgdm9pZCAgICAqKmN1ciA9IGE7CisgICBpbnQgICAgICAgbnAgID0gMDsKKyAgIHZhX2xpc3QgICBhcmdzOworCisgICB2YV9zdGFydChhcmdzLCBhKTsKKyAgIHdoaWxlIChjdXIgIT0gTlVMTCkgeworICAgICAgIGlmIChtcF9pbml0KGN1cikgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAvKiBmYWlsZWQgKi8KKyAgICAgICAgICB2YV9saXN0IGNsZWFuX2xpc3Q7CisKKyAgICAgICAgICB2YV9zdGFydChjbGVhbl9saXN0LCBhKTsKKyAgICAgICAgICBjdXIgPSBhOworICAgICAgICAgIHdoaWxlIChucC0tKSB7CisgICAgICAgICAgICAgIG1wX2NsZWFyKCpjdXIpOworICAgICAgICAgICAgICBjdXIgPSB2YV9hcmcoY2xlYW5fbGlzdCwgdm9pZCoqKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFfZW5kKGNsZWFuX2xpc3QpOworICAgICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgICAgfQorICAgICAgICsrbnA7CisgICAgICAgY3VyID0gdmFfYXJnKGFyZ3MsIHZvaWQqKik7CisgICB9CisgICB2YV9lbmQoYXJncyk7CisgICByZXR1cm4gQ1JZUFRfT0s7ICAgCit9CisKK3ZvaWQgbHRjX2RlaW5pdF9tdWx0aSh2b2lkICphLCAuLi4pCit7CisgICB2b2lkICAgICAqY3VyID0gYTsKKyAgIHZhX2xpc3QgICBhcmdzOworCisgICB2YV9zdGFydChhcmdzLCBhKTsKKyAgIHdoaWxlIChjdXIgIT0gTlVMTCkgeworICAgICAgIG1wX2NsZWFyKGN1cik7CisgICAgICAgY3VyID0gdmFfYXJnKGFyZ3MsIHZvaWQgKik7CisgICB9CisgICB2YV9lbmQoYXJncyk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWF0aC9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hdGgvcmFuZF9wcmltZS5jIGIvc3JjL21hdGgvcmFuZF9wcmltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDc3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWF0aC9yYW5kX3ByaW1lLmMKQEAgLTAsMCArMSw4NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcmFuZF9wcmltZS5jCisgIEdlbmVyYXRlIGEgcmFuZG9tIHByaW1lLCBUb20gU3QgRGVuaXMKKyovICAKKworI2RlZmluZSBVU0VfQkJTIDEKKworaW50IHJhbmRfcHJpbWUodm9pZCAqTiwgbG9uZyBsZW4sIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZykKK3sKKyAgIGludCAgICAgICAgICAgIGVyciwgcmVzLCB0eXBlOworICAgdW5zaWduZWQgY2hhciAqYnVmOworCisgICBMVENfQVJHQ0hLKE4gIT0gTlVMTCk7CisKKyAgIC8qIGdldCB0eXBlICovCisgICBpZiAobGVuIDwgMCkgeworICAgICAgdHlwZSA9IFVTRV9CQlM7CisgICAgICBsZW4gPSAtbGVuOworICAgfSBlbHNlIHsKKyAgICAgIHR5cGUgPSAwOworICAgfQorCisgICAvKiBhbGxvdyBzaXplcyBiZXR3ZWVuIDIgYW5kIDUxMiBieXRlcyBmb3IgYSBwcmltZSBzaXplICovCisgICBpZiAobGVuIDwgMiB8fCBsZW4gPiA1MTIpIHsgCisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QUklNRV9TSVpFOworICAgfQorICAgCisgICAvKiB2YWxpZCBQUk5HPyBCZXR0ZXIgYmUhICovCisgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsgCisgICB9CisKKyAgIC8qIGFsbG9jYXRlIGJ1ZmZlciB0byB3b3JrIHdpdGggKi8KKyAgIGJ1ZiA9IFhDQUxMT0MoMSwgbGVuKTsKKyAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIGRvIHsKKyAgICAgIC8qIGdlbmVyYXRlIHZhbHVlICovCisgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3dwcm5nXS5yZWFkKGJ1ZiwgbGVuLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylsZW4pIHsKKyAgICAgICAgIFhGUkVFKGJ1Zik7CisgICAgICAgICByZXR1cm4gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICB9CisKKyAgICAgIC8qIG11bmdlIGJpdHMgKi8KKyAgICAgIGJ1ZlswXSAgICAgfD0gMHg4MCB8IDB4NDA7CisgICAgICBidWZbbGVuLTFdIHw9IDB4MDEgfCAoKHR5cGUgJiBVU0VfQkJTKSA/IDB4MDIgOiAweDAwKTsKKyAKKyAgICAgIC8qIGxvYWQgdmFsdWUgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oTiwgYnVmLCBsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgWEZSRUUoYnVmKTsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisKKyAgICAgIC8qIHRlc3QgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUoTiwgOCwgJnJlcykpICE9IENSWVBUX09LKSB7CisgICAgICAgICBYRlJFRShidWYpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gd2hpbGUgKHJlcyA9PSBMVENfTVBfTk8pOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgbGVuKTsKKyNlbmRpZgorCisgICBYRlJFRShidWYpOworICAgcmV0dXJuIENSWVBUX09LOworfQorICAgICAgCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hdGgvcmFuZF9wcmltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21hdGgvdGZtX2Rlc2MuYyBiL3NyYy9tYXRoL3RmbV9kZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNzU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tYXRoL3RmbV9kZXNjLmMKQEAgLTAsMCArMSw3NzcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKyNkZWZpbmUgREVTQ19ERUZfT05MWQorI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBURk1fREVTQworCisjaW5jbHVkZSA8dGZtLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCB0Zm1fY29kZSwgbHRjX2NvZGU7Cit9IHRmbV90b19sdGNfY29kZXNbXSA9IHsKKyAgIHsgRlBfT0tBWSAsICBDUllQVF9PS30sCisgICB7IEZQX01FTSAgLCAgQ1JZUFRfTUVNfSwKKyAgIHsgRlBfVkFMICAsICBDUllQVF9JTlZBTElEX0FSR30sCit9OworCisvKioKKyAgIENvbnZlcnQgYSB0Zm0gZXJyb3IgdG8gYSBMVEMgZXJyb3IgKFBvc3NpYmx5IHRoZSBtb3N0IHBvd2VyZnVsIGZ1bmN0aW9uIGV2ZXIhICBPaCB3YWl0Li4uIG5vKSAKKyAgIEBwYXJhbSBlcnIgICAgVGhlIGVycm9yIHRvIGNvbnZlcnQKKyAgIEByZXR1cm4gVGhlIGVxdWl2YWxlbnQgTFRDIGVycm9yIGNvZGUgb3IgQ1JZUFRfRVJST1IgaWYgbm9uZSBmb3VuZAorKi8KK3N0YXRpYyBpbnQgdGZtX3RvX2x0Y19lcnJvcihpbnQgZXJyKQoreworICAgaW50IHg7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGZtX3RvX2x0Y19jb2Rlcykvc2l6ZW9mKHRmbV90b19sdGNfY29kZXNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKGVyciA9PSB0Zm1fdG9fbHRjX2NvZGVzW3hdLnRmbV9jb2RlKSB7IAorICAgICAgICAgIHJldHVybiB0Zm1fdG9fbHRjX2NvZGVzW3hdLmx0Y19jb2RlOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9FUlJPUjsKK30KKworc3RhdGljIGludCBpbml0KHZvaWQgKiphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworCisgICAqYSA9IFhDQUxMT0MoMSwgc2l6ZW9mKGZwX2ludCkpOworICAgaWYgKCphID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICBmcF9pbml0KCphKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIHZvaWQgZGVpbml0KHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLVkQoYSAhPSBOVUxMKTsKKyAgIFhGUkVFKGEpOworfQorCitzdGF0aWMgaW50IG5lZyh2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgZnBfbmVnKCgoZnBfaW50KilhKSwgKChmcF9pbnQqKWIpKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBjb3B5KHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBmcF9jb3B5KGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IGluaXRfY29weSh2b2lkICoqYSwgdm9pZCAqYikKK3sKKyAgIGlmIChpbml0KGEpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorICAgcmV0dXJuIGNvcHkoYiwgKmEpOworfQorCisvKiAtLS0tIHRyaXZpYWwgLS0tLSAqLworc3RhdGljIGludCBzZXRfaW50KHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIGZwX3NldChhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2ludCh2b2lkICphKQoreworICAgZnBfaW50ICpBOworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgQSA9IGE7CisgICByZXR1cm4gQS0+dXNlZCA+IDAgPyBBLT5kcFswXSA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9kaWdpdCh2b2lkICphLCBpbnQgbikKK3sKKyAgIGZwX2ludCAqQTsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIEEgPSBhOworICAgcmV0dXJuIChuID49IEEtPnVzZWQgfHwgbiA8IDApID8gMCA6IEEtPmRwW25dOworfQorCitzdGF0aWMgaW50IGdldF9kaWdpdF9jb3VudCh2b2lkICphKQoreworICAgZnBfaW50ICpBOworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgQSA9IGE7CisgICByZXR1cm4gQS0+dXNlZDsKK30KKyAgIAorc3RhdGljIGludCBjb21wYXJlKHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBpbnQgcmV0OworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0ID0gZnBfY21wKGEsIGIpOworICAgc3dpdGNoIChyZXQpIHsKKyAgICAgIGNhc2UgRlBfTFQ6IHJldHVybiBMVENfTVBfTFQ7CisgICAgICBjYXNlIEZQX0VROiByZXR1cm4gTFRDX01QX0VROworICAgICAgY2FzZSBGUF9HVDogcmV0dXJuIExUQ19NUF9HVDsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZCh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIpCit7CisgICBpbnQgcmV0OworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0ID0gZnBfY21wX2QoYSwgYik7CisgICBzd2l0Y2ggKHJldCkgeworICAgICAgY2FzZSBGUF9MVDogcmV0dXJuIExUQ19NUF9MVDsKKyAgICAgIGNhc2UgRlBfRVE6IHJldHVybiBMVENfTVBfRVE7CisgICAgICBjYXNlIEZQX0dUOiByZXR1cm4gTFRDX01QX0dUOworICAgfQorICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfYml0cyh2b2lkICphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIGZwX2NvdW50X2JpdHMoYSk7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfbHNiX2JpdHModm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBmcF9jbnRfbHNiKGEpOworfQorCitzdGF0aWMgaW50IHR3b2V4cHQodm9pZCAqYSwgaW50IG4pCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBmcF8yZXhwdChhLCBuKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogLS0tLSBjb252ZXJzaW9ucyAtLS0tICovCisKKy8qIHJlYWQgYXNjaWkgc3RyaW5nICovCitzdGF0aWMgaW50IHJlYWRfcmFkaXgodm9pZCAqYSwgY29uc3QgY2hhciAqYiwgaW50IHJhZGl4KQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0dXJuIHRmbV90b19sdGNfZXJyb3IoZnBfcmVhZF9yYWRpeChhLCAoY2hhciAqKWIsIHJhZGl4KSk7Cit9CisKKy8qIHdyaXRlIG9uZSAqLworc3RhdGljIGludCB3cml0ZV9yYWRpeCh2b2lkICphLCBjaGFyICpiLCBpbnQgcmFkaXgpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICByZXR1cm4gdGZtX3RvX2x0Y19lcnJvcihmcF90b3JhZGl4KGEsIGIsIHJhZGl4KSk7Cit9CisKKy8qIGdldCBzaXplIGFzIHVuc2lnbmVkIGNoYXIgc3RyaW5nICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9zaXplKHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gZnBfdW5zaWduZWRfYmluX3NpemUoYSk7Cit9CisKKy8qIHN0b3JlICovCitzdGF0aWMgaW50IHVuc2lnbmVkX3dyaXRlKHZvaWQgKmEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBmcF90b191bnNpZ25lZF9iaW4oYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHJlYWQgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfcmVhZCh2b2lkICphLCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGZwX3JlYWRfdW5zaWduZWRfYmluKGEsIGIsIGxlbik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGFkZCAqLworc3RhdGljIGludCBhZGQodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX2FkZChhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyAgCitzdGF0aWMgaW50IGFkZGkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgZnBfYWRkX2QoYSwgYiwgYyk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHN1YiAqLworc3RhdGljIGludCBzdWIodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX3N1YihhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBzdWJpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX3N1Yl9kKGEsIGIsIGMpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBtdWwgKi8KK3N0YXRpYyBpbnQgbXVsKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBmcF9tdWwoYSwgYiwgYyk7IAorICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IG11bGkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgZnBfbXVsX2QoYSwgYiwgYyk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHNxciAqLworc3RhdGljIGludCBzcXIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGZwX3NxcihhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogZGl2ICovCitzdGF0aWMgaW50IGRpdmlkZSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjLCB2b2lkICpkKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0dXJuIHRmbV90b19sdGNfZXJyb3IoZnBfZGl2KGEsIGIsIGMsIGQpKTsKK30KKworc3RhdGljIGludCBkaXZfMih2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgZnBfZGl2XzIoYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIG1vZGkgKi8KK3N0YXRpYyBpbnQgbW9kaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgKmMpCit7CisgICBmcF9kaWdpdCB0bXA7CisgICBpbnQgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSB0Zm1fdG9fbHRjX2Vycm9yKGZwX21vZF9kKGEsIGIsICZ0bXApKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAqYyA9IHRtcDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30gIAorCisvKiBnY2QgKi8KK3N0YXRpYyBpbnQgZ2NkKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBmcF9nY2QoYSwgYiwgYyk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGxjbSAqLworc3RhdGljIGludCBsY20odm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX2xjbShhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBtdWxtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZCAhPSBOVUxMKTsKKyAgIHJldHVybiB0Zm1fdG9fbHRjX2Vycm9yKGZwX211bG1vZChhLGIsYyxkKSk7Cit9CisKK3N0YXRpYyBpbnQgc3FybW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gdGZtX3RvX2x0Y19lcnJvcihmcF9zcXJtb2QoYSxiLGMpKTsKK30KKworLyogaW52bW9kICovCitzdGF0aWMgaW50IGludm1vZCh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgcmV0dXJuIHRmbV90b19sdGNfZXJyb3IoZnBfaW52bW9kKGEsIGIsIGMpKTsKK30KKworLyogc2V0dXAgKi8KK3N0YXRpYyBpbnQgbW9udGdvbWVyeV9zZXR1cCh2b2lkICphLCB2b2lkICoqYikKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICAqYiA9IFhDQUxMT0MoMSwgc2l6ZW9mKGZwX2RpZ2l0KSk7CisgICBpZiAoKmIgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKyAgIGlmICgoZXJyID0gdGZtX3RvX2x0Y19lcnJvcihmcF9tb250Z29tZXJ5X3NldHVwKGEsIChmcF9kaWdpdCAqKSpiKSkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRSgqYik7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisvKiBnZXQgbm9ybWFsaXphdGlvbiB2YWx1ZSAqLworc3RhdGljIGludCBtb250Z29tZXJ5X25vcm1hbGl6YXRpb24odm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGZwX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uKGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiByZWR1Y2UgKi8KK3N0YXRpYyBpbnQgbW9udGdvbWVyeV9yZWR1Y2Uodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKGEsIGIsICooKGZwX2RpZ2l0ICopYykpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBjbGVhbiB1cCAqLworc3RhdGljIHZvaWQgbW9udGdvbWVyeV9kZWluaXQodm9pZCAqYSkKK3sKKyAgIFhGUkVFKGEpOworfQorCitzdGF0aWMgaW50IGV4cHRtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZCAhPSBOVUxMKTsKKyAgIHJldHVybiB0Zm1fdG9fbHRjX2Vycm9yKGZwX2V4cHRtb2QoYSxiLGMsZCkpOworfSAgIAorCitzdGF0aWMgaW50IGlzcHJpbWUodm9pZCAqYSwgaW50ICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgKmIgPSAoZnBfaXNwcmltZShhKSA9PSBGUF9ZRVMpID8gTFRDX01QX1lFUyA6IExUQ19NUF9OTzsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmIGRlZmluZWQoTUVDQykgJiYgZGVmaW5lZChNRUNDX0FDQ0VMKQorCitzdGF0aWMgaW50IHRmbV9lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKk1wKQoreworICAgZnBfaW50IHQxLCB0MjsKKyAgIGZwX2RpZ2l0IG1wOworCisgICBMVENfQVJHQ0hLKFAgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKFIgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG1vZHVsdXMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKE1wICAgICAgIT0gTlVMTCk7CisKKyAgIG1wID0gKigoZnBfZGlnaXQqKU1wKTsKKworICAgZnBfaW5pdCgmdDEpOworICAgZnBfaW5pdCgmdDIpOworCisgICBpZiAoUCAhPSBSKSB7CisgICAgICBmcF9jb3B5KFAtPngsIFItPngpOworICAgICAgZnBfY29weShQLT55LCBSLT55KTsKKyAgICAgIGZwX2NvcHkoUC0+eiwgUi0+eik7CisgICB9CisKKyAgIC8qIHQxID0gWiAqIFogKi8KKyAgIGZwX3NxcihSLT56LCAmdDEpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCk7CisgICAvKiBaID0gWSAqIFogKi8KKyAgIGZwX211bChSLT56LCBSLT55LCBSLT56KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKFItPnosIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFogPSAyWiAqLworICAgZnBfYWRkKFItPnosIFItPnosIFItPnopOworICAgaWYgKGZwX2NtcChSLT56LCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKFItPnosIG1vZHVsdXMsIFItPnopOworICAgfQorICAgCisgICAvKiAmdDIgPSBYIC0gVDEgKi8KKyAgIGZwX3N1YihSLT54LCAmdDEsICZ0Mik7CisgICBpZiAoZnBfY21wX2QoJnQyLCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKCZ0MiwgbW9kdWx1cywgJnQyKTsKKyAgIH0KKyAgIC8qIFQxID0gWCArIFQxICovCisgICBmcF9hZGQoJnQxLCBSLT54LCAmdDEpOworICAgaWYgKGZwX2NtcCgmdDEsIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpOworICAgfQorICAgLyogVDIgPSBUMSAqIFQyICovCisgICBmcF9tdWwoJnQxLCAmdDIsICZ0Mik7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDIsIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFQxID0gMlQyICovCisgICBmcF9hZGQoJnQyLCAmdDIsICZ0MSk7CisgICBpZiAoZnBfY21wKCZ0MSwgbW9kdWx1cykgIT0gRlBfTFQpIHsKKyAgICAgIGZwX3N1YigmdDEsIG1vZHVsdXMsICZ0MSk7CisgICB9CisgICAvKiBUMSA9IFQxICsgVDIgKi8KKyAgIGZwX2FkZCgmdDEsICZ0MiwgJnQxKTsKKyAgIGlmIChmcF9jbXAoJnQxLCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKCZ0MSwgbW9kdWx1cywgJnQxKTsKKyAgIH0KKworICAgLyogWSA9IDJZICovCisgICBmcF9hZGQoUi0+eSwgUi0+eSwgUi0+eSk7CisgICBpZiAoZnBfY21wKFItPnksIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoUi0+eSwgbW9kdWx1cywgUi0+eSk7CisgICB9CisgICAvKiBZID0gWSAqIFkgKi8KKyAgIGZwX3NxcihSLT55LCBSLT55KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKFItPnksIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFQyID0gWSAqIFkgKi8KKyAgIGZwX3NxcihSLT55LCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBUMiA9IFQyLzIgKi8KKyAgIGlmIChmcF9pc29kZCgmdDIpKSB7CisgICAgICBmcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpOworICAgfQorICAgZnBfZGl2XzIoJnQyLCAmdDIpOworICAgLyogWSA9IFkgKiBYICovCisgICBmcF9tdWwoUi0+eSwgUi0+eCwgUi0+eSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZShSLT55LCBtb2R1bHVzLCBtcCk7CisKKyAgIC8qIFggID0gVDEgKiBUMSAqLworICAgZnBfc3FyKCZ0MSwgUi0+eCk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZShSLT54LCBtb2R1bHVzLCBtcCk7CisgICAvKiBYID0gWCAtIFkgKi8KKyAgIGZwX3N1YihSLT54LCBSLT55LCBSLT54KTsKKyAgIGlmIChmcF9jbXBfZChSLT54LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKFItPngsIG1vZHVsdXMsIFItPngpOworICAgfQorICAgLyogWCA9IFggLSBZICovCisgICBmcF9zdWIoUi0+eCwgUi0+eSwgUi0+eCk7CisgICBpZiAoZnBfY21wX2QoUi0+eCwgMCkgPT0gRlBfTFQpIHsKKyAgICAgIGZwX2FkZChSLT54LCBtb2R1bHVzLCBSLT54KTsKKyAgIH0KKworICAgLyogWSA9IFkgLSBYICovICAgICAKKyAgIGZwX3N1YihSLT55LCBSLT54LCBSLT55KTsKKyAgIGlmIChmcF9jbXBfZChSLT55LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKFItPnksIG1vZHVsdXMsIFItPnkpOworICAgfQorICAgLyogWSA9IFkgKiBUMSAqLworICAgZnBfbXVsKFItPnksICZ0MSwgUi0+eSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZShSLT55LCBtb2R1bHVzLCBtcCk7CisgICAvKiBZID0gWSAtIFQyICovCisgICBmcF9zdWIoUi0+eSwgJnQyLCBSLT55KTsKKyAgIGlmIChmcF9jbXBfZChSLT55LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKFItPnksIG1vZHVsdXMsIFItPnkpOworICAgfQorIAorICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIEFkZCB0d28gRUNDIHBvaW50cworICAgQHBhcmFtIFAgICAgICAgIFRoZSBwb2ludCB0byBhZGQKKyAgIEBwYXJhbSBRICAgICAgICBUaGUgcG9pbnQgdG8gYWRkCisgICBAcGFyYW0gUiAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkb3VibGUKKyAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBvZiB0aGUgZmllbGQgdGhlIEVDQyBjdXJ2ZSBpcyBpbgorICAgQHBhcmFtIG1wICAgICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK3N0YXRpYyBpbnQgdGZtX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludChlY2NfcG9pbnQgKlAsIGVjY19wb2ludCAqUSwgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICpNcCkKK3sKKyAgIGZwX2ludCAgdDEsIHQyLCB4LCB5LCB6OworICAgZnBfZGlnaXQgbXA7ICAKKyAgIAorICAgTFRDX0FSR0NISyhQICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhRICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhSICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtb2R1bHVzICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhNcCAgICAgICE9IE5VTEwpOworCisgICBtcCA9ICooKGZwX2RpZ2l0KilNcCk7CisKKyAgIGZwX2luaXQoJnQxKTsKKyAgIGZwX2luaXQoJnQyKTsKKyAgIGZwX2luaXQoJngpOworICAgZnBfaW5pdCgmeSk7CisgICBmcF9pbml0KCZ6KTsKKworICAgLyogc2hvdWxkIHdlIGRibCBpbnN0ZWFkPyAqLworICAgZnBfc3ViKG1vZHVsdXMsIFEtPnksICZ0MSk7CisgICBpZiAoIChmcF9jbXAoUC0+eCwgUS0+eCkgPT0gRlBfRVEpICYmIAorICAgICAgICAoUS0+eiAhPSBOVUxMICYmIGZwX2NtcChQLT56LCBRLT56KSA9PSBGUF9FUSkgJiYKKyAgICAgICAgKGZwX2NtcChQLT55LCBRLT55KSA9PSBGUF9FUSB8fCBmcF9jbXAoUC0+eSwgJnQxKSA9PSBGUF9FUSkpIHsKKyAgICAgICAgcmV0dXJuIHRmbV9lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoUCwgUiwgbW9kdWx1cywgTXApOworICAgfQorCisgICBmcF9jb3B5KFAtPngsICZ4KTsKKyAgIGZwX2NvcHkoUC0+eSwgJnkpOworICAgZnBfY29weShQLT56LCAmeik7CisKKyAgIC8qIGlmIFogaXMgb25lIHRoZW4gdGhlc2UgYXJlIG5vLW9wZXJhdGlvbnMgKi8KKyAgIGlmIChRLT56ICE9IE5VTEwpIHsKKyAgICAgIC8qIFQxID0gWicgKiBaJyAqLworICAgICAgZnBfc3FyKFEtPnosICZ0MSk7CisgICAgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKTsKKyAgICAgIC8qIFggPSBYICogVDEgKi8KKyAgICAgIGZwX211bCgmdDEsICZ4LCAmeCk7CisgICAgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmeCwgbW9kdWx1cywgbXApOworICAgICAgLyogVDEgPSBaJyAqIFQxICovCisgICAgICBmcF9tdWwoUS0+eiwgJnQxLCAmdDEpOworICAgICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCk7CisgICAgICAvKiBZID0gWSAqIFQxICovCisgICAgICBmcF9tdWwoJnQxLCAmeSwgJnkpOworICAgICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnksIG1vZHVsdXMsIG1wKTsKKyAgIH0KKworICAgLyogVDEgPSBaKlogKi8KKyAgIGZwX3NxcigmeiwgJnQxKTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApOworICAgLyogVDIgPSBYJyAqIFQxICovCisgICBmcF9tdWwoUS0+eCwgJnQxLCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBUMSA9IFogKiBUMSAqLworICAgZnBfbXVsKCZ6LCAmdDEsICZ0MSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFQxID0gWScgKiBUMSAqLworICAgZnBfbXVsKFEtPnksICZ0MSwgJnQxKTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApOworCisgICAvKiBZID0gWSAtIFQxICovCisgICBmcF9zdWIoJnksICZ0MSwgJnkpOworICAgaWYgKGZwX2NtcF9kKCZ5LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKCZ5LCBtb2R1bHVzLCAmeSk7CisgICB9CisgICAvKiBUMSA9IDJUMSAqLworICAgZnBfYWRkKCZ0MSwgJnQxLCAmdDEpOworICAgaWYgKGZwX2NtcCgmdDEsIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpOworICAgfQorICAgLyogVDEgPSBZICsgVDEgKi8KKyAgIGZwX2FkZCgmdDEsICZ5LCAmdDEpOworICAgaWYgKGZwX2NtcCgmdDEsIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpOworICAgfQorICAgLyogWCA9IFggLSBUMiAqLworICAgZnBfc3ViKCZ4LCAmdDIsICZ4KTsKKyAgIGlmIChmcF9jbXBfZCgmeCwgMCkgPT0gRlBfTFQpIHsKKyAgICAgIGZwX2FkZCgmeCwgbW9kdWx1cywgJngpOworICAgfQorICAgLyogVDIgPSAyVDIgKi8KKyAgIGZwX2FkZCgmdDIsICZ0MiwgJnQyKTsKKyAgIGlmIChmcF9jbXAoJnQyLCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKCZ0MiwgbW9kdWx1cywgJnQyKTsKKyAgIH0KKyAgIC8qIFQyID0gWCArIFQyICovCisgICBmcF9hZGQoJnQyLCAmeCwgJnQyKTsKKyAgIGlmIChmcF9jbXAoJnQyLCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKCZ0MiwgbW9kdWx1cywgJnQyKTsKKyAgIH0KKworICAgLyogaWYgWicgIT0gMSAqLworICAgaWYgKFEtPnogIT0gTlVMTCkgeworICAgICAgLyogWiA9IFogKiBaJyAqLworICAgICAgZnBfbXVsKCZ6LCBRLT56LCAmeik7CisgICAgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmeiwgbW9kdWx1cywgbXApOworICAgfQorCisgICAvKiBaID0gWiAqIFggKi8KKyAgIGZwX211bCgmeiwgJngsICZ6KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ6LCBtb2R1bHVzLCBtcCk7CisKKyAgIC8qIFQxID0gVDEgKiBYICAqLworICAgZnBfbXVsKCZ0MSwgJngsICZ0MSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFggPSBYICogWCAqLworICAgZnBfc3FyKCZ4LCAmeCk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmeCwgbW9kdWx1cywgbXApOworICAgLyogVDIgPSBUMiAqIHggKi8KKyAgIGZwX211bCgmdDIsICZ4LCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBUMSA9IFQxICogWCAgKi8KKyAgIGZwX211bCgmdDEsICZ4LCAmdDEpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCk7CisgCisgICAvKiBYID0gWSpZICovCisgICBmcF9zcXIoJnksICZ4KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ4LCBtb2R1bHVzLCBtcCk7CisgICAvKiBYID0gWCAtIFQyICovCisgICBmcF9zdWIoJngsICZ0MiwgJngpOworICAgaWYgKGZwX2NtcF9kKCZ4LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKCZ4LCBtb2R1bHVzLCAmeCk7CisgICB9CisKKyAgIC8qIFQyID0gVDIgLSBYICovCisgICBmcF9zdWIoJnQyLCAmeCwgJnQyKTsKKyAgIGlmIChmcF9jbXBfZCgmdDIsIDApID09IEZQX0xUKSB7CisgICAgICBmcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpOworICAgfSAKKyAgIC8qIFQyID0gVDIgLSBYICovCisgICBmcF9zdWIoJnQyLCAmeCwgJnQyKTsKKyAgIGlmIChmcF9jbXBfZCgmdDIsIDApID09IEZQX0xUKSB7CisgICAgICBmcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpOworICAgfQorICAgLyogVDIgPSBUMiAqIFkgKi8KKyAgIGZwX211bCgmdDIsICZ5LCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBZID0gVDIgLSBUMSAqLworICAgZnBfc3ViKCZ0MiwgJnQxLCAmeSk7CisgICBpZiAoZnBfY21wX2QoJnksIDApID09IEZQX0xUKSB7CisgICAgICBmcF9hZGQoJnksIG1vZHVsdXMsICZ5KTsKKyAgIH0KKyAgIC8qIFkgPSBZLzIgKi8KKyAgIGlmIChmcF9pc29kZCgmeSkpIHsKKyAgICAgIGZwX2FkZCgmeSwgbW9kdWx1cywgJnkpOworICAgfQorICAgZnBfZGl2XzIoJnksICZ5KTsKKworICAgZnBfY29weSgmeCwgUi0+eCk7CisgICBmcF9jb3B5KCZ5LCBSLT55KTsKKyAgIGZwX2NvcHkoJnosIFItPnopOworICAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKworI2VuZGlmCisKK2NvbnN0IGx0Y19tYXRoX2Rlc2NyaXB0b3IgdGZtX2Rlc2MgPSB7CisKKyAgICJUb21zRmFzdE1hdGgiLAorICAgKGludClESUdJVF9CSVQsCisKKyAgICZpbml0LAorICAgJmluaXRfY29weSwKKyAgICZkZWluaXQsCisKKyAgICZuZWcsCisgICAmY29weSwKKworICAgJnNldF9pbnQsCisgICAmZ2V0X2ludCwKKyAgICZnZXRfZGlnaXQsCisgICAmZ2V0X2RpZ2l0X2NvdW50LAorICAgJmNvbXBhcmUsCisgICAmY29tcGFyZV9kLAorICAgJmNvdW50X2JpdHMsCisgICAmY291bnRfbHNiX2JpdHMsCisgICAmdHdvZXhwdCwKKworICAgJnJlYWRfcmFkaXgsCisgICAmd3JpdGVfcmFkaXgsCisgICAmdW5zaWduZWRfc2l6ZSwKKyAgICZ1bnNpZ25lZF93cml0ZSwKKyAgICZ1bnNpZ25lZF9yZWFkLAorCisgICAmYWRkLAorICAgJmFkZGksCisgICAmc3ViLAorICAgJnN1YmksCisgICAmbXVsLAorICAgJm11bGksCisgICAmc3FyLAorICAgJmRpdmlkZSwKKyAgICZkaXZfMiwKKyAgICZtb2RpLAorICAgJmdjZCwKKyAgICZsY20sCisKKyAgICZtdWxtb2QsCisgICAmc3FybW9kLAorICAgJmludm1vZCwKKworICAgJm1vbnRnb21lcnlfc2V0dXAsCisgICAmbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uLAorICAgJm1vbnRnb21lcnlfcmVkdWNlLAorICAgJm1vbnRnb21lcnlfZGVpbml0LAorCisgICAmZXhwdG1vZCwKKyAgICZpc3ByaW1lLAorCisjaWZkZWYgTUVDQworI2lmZGVmIE1FQ0NfRlAKKyAgICZsdGNfZWNjX2ZwX211bG1vZCwKKyNlbHNlCisgICAmbHRjX2VjY19tdWxtb2QsCisjZW5kaWYgLyogTUVDQ19GUCAqLworI2lmZGVmIE1FQ0NfQUNDRUwKKyAgICZ0Zm1fZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50LAorICAgJnRmbV9lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQsCisjZWxzZQorICAgJmx0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQsCisgICAmbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludCwKKyNlbmRpZiAvKiBNRUNDX0FDQ0VMICovCisgICAmbHRjX2VjY19tYXAsCisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKKyNpZmRlZiBNRUNDX0ZQCisgICAmbHRjX2VjY19mcF9tdWwyYWRkLAorI2Vsc2UKKyAgICZsdGNfZWNjX211bDJhZGQsCisjZW5kaWYgLyogTUVDQ19GUCAqLworI2Vsc2UKKyAgIE5VTEwsCisjZW5kaWYgLyogTFRDX0VDQ19TSEFNSVIgKi8KKyNlbHNlCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorI2VuZGlmIC8qIE1FQ0MgKi8KKworI2lmZGVmIE1SU0EKKyAgICZyc2FfbWFrZV9rZXksCisgICAmcnNhX2V4cHRtb2QsCisjZWxzZQorICAgTlVMTCwgTlVMTAorI2VuZGlmCisgICAKK307CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYXRoL3RmbV9kZXNjLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjYgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMDA6Mzk6NTYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUuYyBiL3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLmMKaW5kZXggNTUxYWRkMS4uNmEzOWJhZiAxMDA2NDQKLS0tIGEvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUuYworKysgYi9zcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xMDAsNSArMTAwLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUuYyBiL3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZW5jb2RlLmMKaW5kZXggNTk3ODY0My4uYWM0ZGYzNSAxMDA2NDQKLS0tIGEvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUuYworKysgYi9zcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2VuY29kZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC00Miw2ICs0Miw3IEBACiAgICAvKiB2YWxpZCBvdXRwdXQgc2l6ZSA/ICovCiAgICBsZW4yID0gNCAqICgoaW5sZW4gKyAyKSAvIDMpOwogICAgaWYgKCpvdXRsZW4gPCBsZW4yICsgMSkgeworICAgICAgKm91dGxlbiA9IGxlbjIgKyAxOwogICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKICAgIH0KICAgIHAgPSBvdXQ7CkBAIC03Niw1ICs3Nyw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2J1cm5fc3RhY2suYyBiL3NyYy9taXNjL2J1cm5fc3RhY2suYwppbmRleCA3YWM2NTE4Li4wYmVlZTkyIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9idXJuX3N0YWNrLmMKKysrIGIvc3JjL21pc2MvYnVybl9zdGFjay5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zMCw1ICszMCw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvYnVybl9zdGFjay5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHQuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0LmMKaW5kZXggNmQ4NWNlYi4uZWJjOGMxZSAxMDA2NDQKLS0tIGEvc3JjL21pc2MvY3J5cHQvY3J5cHQuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xMTAsNiArMTEwLDEyIEBACiAgICAiICh0d2Vha2VkKSIKICNlbmRpZgogICAgIlxuIgorI2lmIGRlZmluZWQoS1NFRUQpCisgICAiICAgS1NFRURcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0tBU1VNSSkKKyAgICIgICBLQVNVTUlcbiIKKyNlbmRpZgogCiAgICAgIlxuSGFzaGVzIGJ1aWx0LWluOlxuIgogI2lmIGRlZmluZWQoU0hBNTEyKQpAQCAtMTUzLDM1ICsxNTksNTUgQEAKICNlbmRpZgogCiAgICAgIlxuQmxvY2sgQ2hhaW5pbmcgTW9kZXM6XG4iCi0jaWYgZGVmaW5lZChDRkIpCisjaWYgZGVmaW5lZChMVENfQ0ZCX01PREUpCiAgICAgIiAgIENGQlxuIgogI2VuZGlmCi0jaWYgZGVmaW5lZChPRkIpCisjaWYgZGVmaW5lZChMVENfT0ZCX01PREUpCiAgICAgIiAgIE9GQlxuIgogI2VuZGlmCi0jaWYgZGVmaW5lZChFQ0IpCisjaWYgZGVmaW5lZChMVENfRUNCX01PREUpCiAgICAgIiAgIEVDQlxuIgogI2VuZGlmCi0jaWYgZGVmaW5lZChDQkMpCisjaWYgZGVmaW5lZChMVENfQ0JDX01PREUpCiAgICAgIiAgIENCQ1xuIgogI2VuZGlmCi0jaWYgZGVmaW5lZChDVFIpCi0gICAgIiAgIENUUlxuIgorI2lmIGRlZmluZWQoTFRDX0NUUl9NT0RFKQorICAgICIgICBDVFIgIgogI2VuZGlmCisjaWYgZGVmaW5lZChMVENfQ1RSX09MRCkKKyAgICAiIChDVFJfT0xEKSAiCisjZW5kaWYKKyAgICAiXG4iCisjaWYgZGVmaW5lZChMUldfTU9ERSkKKyAgICAiICAgTFJXX01PREUiCisjaWYgZGVmaW5lZChMUldfVEFCTEVTKQorICAgICIgKExSV19UQUJMRVMpICIKKyNlbmRpZgorICAgICJcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0Y4X01PREUpCisgICAgIiAgIEY4IE1PREVcbiIKKyNlbmRpZiAgICAKIAogICAgICJcbk1BQ3M6XG4iCi0jaWYgZGVmaW5lZChITUFDKQorI2lmIGRlZmluZWQoTFRDX0hNQUMpCiAgICAgIiAgIEhNQUNcbiIKICNlbmRpZgotI2lmIGRlZmluZWQoT01BQykKKyNpZiBkZWZpbmVkKExUQ19PTUFDKQogICAgICIgICBPTUFDXG4iCiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBNQUMpCisjaWYgZGVmaW5lZChMVENfUE1BQykKICAgICAiICAgUE1BQ1xuIgogI2VuZGlmCiAjaWYgZGVmaW5lZChQRUxJQ0FOKQogICAgICIgICBQRUxJQ0FOXG4iCiAjZW5kaWYKKyNpZiBkZWZpbmVkKExUQ19YQ0JDKQorICAgICIgICBYQ0JDLU1BQ1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfRjlfTU9ERSkKKyAgICAiICAgRjktTUFDXG4iCisjZW5kaWYKIAogICAgICJcbkVOQyArIEFVVEggbW9kZXM6XG4iCiAjaWYgZGVmaW5lZChFQVhfTU9ERSkKQEAgLTIwMSw3ICsyMjcsNiBAQAogI2VuZGlmCiAgICAiXG4iCiAKLQogICAgICJcblBSTkc6XG4iCiAjaWYgZGVmaW5lZChZQVJST1cpCiAgICAgIiAgIFlhcnJvd1xuIgpAQCAtMjIzLDI0ICsyNDgsMjQgQEAKICNpZiBkZWZpbmVkKE1SU0EpCiAgICAgIiAgIFJTQSBcbiIKICNlbmRpZgotI2lmIGRlZmluZWQoTURIKQotICAgICIgICBESFxuIgotI2VuZGlmCiAjaWYgZGVmaW5lZChNRUNDKQogICAgICIgICBFQ0NcbiIKICNlbmRpZgogI2lmIGRlZmluZWQoTURTQSkKICAgICAiICAgRFNBXG4iCiAjZW5kaWYKKyNpZiBkZWZpbmVkKE1LQVQpCisgICAgIiAgIEthdGphXG4iCisjZW5kaWYgICAgCiAKICAgICAiXG5Db21waWxlcjpcbiIKICNpZiBkZWZpbmVkKFdJTjMyKQogICAgICIgICBXSU4zMiBwbGF0Zm9ybSBkZXRlY3RlZC5cbiIKICNlbmRpZgotI2lmIGRlZmluZWQoTEJMX0NZR1dJTl9fKQorI2lmIGRlZmluZWQoX19DWUdXSU5fXykKICAgICAiICAgQ1lHV0lOIERldGVjdGVkLlxuIgogI2VuZGlmCi0jaWYgZGVmaW5lZChMQkxfREpHUFBfXykKKyNpZiBkZWZpbmVkKF9fREpHUFBfXykKICAgICAiICAgREpHUFAgRGV0ZWN0ZWQuXG4iCiAjZW5kaWYKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMjUyLDkgKzI3NywxMiBAQAogI2lmIGRlZmluZWQoSU5URUxfQ0MpCiAgICAgIiAgIEludGVsIEMgQ29tcGlsZXIgZGV0ZWN0ZWQuXG4iCiAjZW5kaWYKLSNpZiBkZWZpbmVkKExCTF94ODZfNjRfXykKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICAgIiAgIHg4Ni02NCBkZXRlY3RlZC5cbiIKICNlbmRpZgorI2lmIGRlZmluZWQoTFRDX1BQQzMyKQorICAgICIgICBMVENfUFBDMzIgZGVmaW5lZCBcbiIKKyNlbmRpZiAgICAKIAogICAgICJcblZhcmlvdXMgb3RoZXJzOiAiCiAjaWYgZGVmaW5lZChCQVNFNjQpCkBAIC0zMDUsMTEgKzMzMywzMiBAQAogI2lmIGRlZmluZWQoTFRDX1BUSFJFQUQpCiAgICAgIiBMVENfUFRIUkVBRCAiCiAjZW5kaWYKKyNpZiBkZWZpbmVkKExUTV9ERVNDKQorICAgICIgTFRNX0RFU0MgIgorI2VuZGlmCisjaWYgZGVmaW5lZChURk1fREVTQykKKyAgICAiIFRGTV9ERVNDICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUVDQ19BQ0NFTCkKKyAgICAiIE1FQ0NfQUNDRUwgIgorI2VuZGlmCisjaWYgZGVmaW5lZChHTVBfREVTQykKKyAgICAiIEdNUF9ERVNDICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0VBU1kpCisgICAgIiAoZWFzeSkgIgorI2VuZGlmICAgIAorI2lmIGRlZmluZWQoTUVDQ19GUCkKKyAgICIgTUVDQ19GUCAiCisjZW5kaWYKKyNpZiBkZWZpbmVkKExUQ19FQ0NfU0hBTUlSKQorICAgIiBMVENfRUNDX1NIQU1JUiAiCisjZW5kaWYKICAgICAiXG4iCiAgICAgIlxuXG5cbiIKICAgICA7CiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuMjcgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMDM6NTA6NDUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYwppbmRleCA2OTljNmNmLi5jNjY3NWVmIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTI2LDUgKzI2LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfZGVzY3JpcHRvci5jCmluZGV4IDEyN2U4NWMuLjg4MGMxNDkgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3IuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTYsMTIgKzE2LDEyIEBACiAqLwogCiBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGNpcGhlcl9kZXNjcmlwdG9yW1RBQl9TSVpFXSA9IHsKLXsgTlVMTCwgMCwgMCwgMCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9Cit7IE5VTEwsIDAsIDAsIDAsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQogIH07CiAKLUxUQ19NVVRFWF9HTE9CQUwobHRjX2NpcGhlcl9tdXRleCk7CitMVENfTVVURVhfR0xPQkFMKGx0Y19jaXBoZXJfbXV0ZXgpCiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3IuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5jCmluZGV4IDc4MzAzMDMuLjBmODIwMmIgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5jCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zMiw1ICszMiw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTg6MDA6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLmMKaW5kZXggZTdmYmE3My4uMjdjNTllYiAxMDA2NDQKLS0tIGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlci5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNiw3ICsyNiw3IEBACiAgICBMVENfQVJHQ0hLKG5hbWUgIT0gTlVMTCk7CiAgICBMVENfTVVURVhfTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CiAgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgewotICAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEwgJiYgIXN0cmNtcChjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBuYW1lKSkgeworICAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEwgJiYgIVhTVFJDTVAoY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSwgbmFtZSkpIHsKICAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfY2lwaGVyX211dGV4KTsKICAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9CkBAIC0zNyw1ICszNyw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI5IDIzOjQzOjU3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55LmMKaW5kZXggNmRkMGU2ZC4uMzkzZWRlZCAxMDA2NDQKLS0tIGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55LmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTQ2LDUgKzQ2LDUgQEAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9pZC5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQuYwppbmRleCA1ZjVmODc0Li44ZGU3M2M2IDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9pZC5jCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTM2LDUgKzM2LDUgQEAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaC5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLmMKaW5kZXggZDAyYTQ0OS4uY2Q2MDQxMyAxMDA2NDQKLS0tIGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgIExUQ19BUkdDSEsobmFtZSAhPSBOVUxMKTsKICAgIExUQ19NVVRFWF9MT0NLKCZsdGNfaGFzaF9tdXRleCk7CiAgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgewotICAgICAgIGlmIChoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMICYmIHN0cmNtcChoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSwgbmFtZSkgPT0gMCkgeworICAgICAgIGlmIChoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMICYmIFhTVFJDTVAoaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUsIG5hbWUpID09IDApIHsKICAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CiAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgfQpAQCAtMzYsNSArMzYsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2guYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI5IDIzOjQzOjU3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkuYwppbmRleCAxMTcyZjIyLi5iMmNmY2NkIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfYW55LmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC00NSw1ICs0NSw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLmMKaW5kZXggOGNkMGQzOC4uZTU5Y2EwMCAxMDA2NDQKLS0tIGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTM2LDUgKzM2LDUgQEAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMzoyNSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0ZjgwYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9vaWQuYwpAQCAtMCwwICsxLDM1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9maW5kX2hhc2hfb2lkLmMKKyAgRmluZCBhIGhhc2gsIFRvbSBTdCBEZW5pcworKi8KKworaW50IGZpbmRfaGFzaF9vaWQoY29uc3QgdW5zaWduZWQgbG9uZyAqSUQsIHVuc2lnbmVkIGxvbmcgSURsZW4pCit7CisgICBpbnQgeDsKKyAgIExUQ19BUkdDSEsoSUQgIT0gTlVMTCk7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKKyAgICAgICBpZiAoaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTCAmJiBoYXNoX2Rlc2NyaXB0b3JbeF0uT0lEbGVuID09IElEbGVuICYmICFYTUVNQ01QKGhhc2hfZGVzY3JpcHRvclt4XS5PSUQsIElELCBzaXplb2YodW5zaWduZWQgbG9uZykgKiBJRGxlbikpIHsKKyAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgcmV0dXJuIC0xOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5jCmluZGV4IDUwMzgxM2QuLjRiM2JjNWEgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5jCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNiw3ICsyNiw3IEBACiAgICBMVENfQVJHQ0hLKG5hbWUgIT0gTlVMTCk7CiAgICBMVENfTVVURVhfTE9DSygmbHRjX3BybmdfbXV0ZXgpOwogICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKLSAgICAgICBpZiAoKHBybmdfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEwpICYmIHN0cmNtcChwcm5nX2Rlc2NyaXB0b3JbeF0ubmFtZSwgbmFtZSkgPT0gMCkgeworICAgICAgIGlmICgocHJuZ19kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTCkgJiYgWFNUUkNNUChwcm5nX2Rlc2NyaXB0b3JbeF0ubmFtZSwgbmFtZSkgPT0gMCkgewogICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19wcm5nX211dGV4KTsKICAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9CkBAIC0zNyw1ICszNyw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yOSAyMzo0Mzo1NyAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9mc2EuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTY5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9mc2EuYwpAQCAtMCwwICsxLDU5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKgorICBAZmlsZSBjcnlwdF9mc2EuYworICBMaWJUb21DcnlwdCBGVUxMIFNQRUVEIEFIRUFEISwgVG9tIFN0IERlbmlzCisqLyAgCisKKy8qIGZvcm1hdCBpcyBsdGNfbXAsIGNpcGhlcl9kZXNjLCBbY2lwaGVyX2Rlc2NdLCBOVUxMLCBoYXNoX2Rlc2MsIFtoYXNoX2Rlc2NdLCBOVUxMLCBwcm5nX2Rlc2MsIFtwcm5nX2Rlc2NdLCBOVUxMICovCitpbnQgY3J5cHRfZnNhKHZvaWQgKm1wLCAuLi4pCit7CisgICBpbnQgICAgICBlcnI7CisgICB2YV9saXN0ICBhcmdzOworICAgdm9pZCAgICAgKnA7CisKKyAgIHZhX3N0YXJ0KGFyZ3MsIG1wKTsKKyAgIGlmIChtcCAhPSBOVUxMKSB7CisgICAgICBYTUVNQ1BZKCZsdGNfbXAsIG1wLCBzaXplb2YobHRjX21wKSk7CisgICB9CisgICAKKyAgIHdoaWxlICgocCA9IHZhX2FyZyhhcmdzLCB2b2lkKikpICE9IE5VTEwpIHsKKyAgICAgIGlmICgoZXJyID0gcmVnaXN0ZXJfY2lwaGVyKHApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0KKworICAgd2hpbGUgKChwID0gdmFfYXJnKGFyZ3MsIHZvaWQqKSkgIT0gTlVMTCkgeworICAgICAgaWYgKChlcnIgPSByZWdpc3Rlcl9oYXNoKHApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0KKworICAgd2hpbGUgKChwID0gdmFfYXJnKGFyZ3MsIHZvaWQqKSkgIT0gTlVMTCkgeworICAgICAgaWYgKChlcnIgPSByZWdpc3Rlcl9wcm5nKHApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0KKworICAgdmFfZW5kKGFyZ3MpOworICAgcmV0dXJuIENSWVBUX09LOyAgIAorfQorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTMgMjM6MTQ6MzMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYwppbmRleCBmODU4M2Q4Li41ZmE1OWYxIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTYsMTIgKzE2LDEyIEBACiAqLwogCiBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBoYXNoX2Rlc2NyaXB0b3JbVEFCX1NJWkVdID0gewoteyBOVUxMLCAwLCAwLCAwLCB7IDAgfSwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9Cit7IE5VTEwsIDAsIDAsIDAsIHsgMCB9LCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAKLUxUQ19NVVRFWF9HTE9CQUwobHRjX2hhc2hfbXV0ZXgpOworTFRDX01VVEVYX0dMT0JBTChsdGNfaGFzaF9tdXRleCkKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS42ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQuYwppbmRleCBhODEzMGQ0Li41NGE5MWViIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zMiw1ICszMiw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9sdGNfbXBfZGVzY3JpcHRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzg2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9sdGNfbXBfZGVzY3JpcHRvci5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworbHRjX21hdGhfZGVzY3JpcHRvciBsdGNfbXA7CmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2Rlc2NyaXB0b3IuYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jCmluZGV4IDczMzVmNWQuLmEyYjVmMGUgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xOCw5ICsxOCw5IEBACiB7IE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQogfTsKIAotTFRDX01VVEVYX0dMT0JBTChsdGNfcHJuZ19tdXRleCk7CitMVENfTVVURVhfR0xPQkFMKGx0Y19wcm5nX211dGV4KQogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTg6MDA6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5jCmluZGV4IGE3YTdlZDYuLjZhZjBhM2MgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfaXNfdmFsaWQuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTMyLDUgKzMyLDUgQEAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTg6MDA6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIuYwppbmRleCBjNTVkN2MwLi44ZDc0Y2M1IDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtNTAsNSArNTAsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2guYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2guYwppbmRleCAwZmY1MjFmLi40NWQwZTg1IDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9oYXNoLmMKKysrIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfaGFzaC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yOSw3ICsyOSw3IEBACiAgICAvKiBpcyBpdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/ICovCiAgICBMVENfTVVURVhfTE9DSygmbHRjX2hhc2hfbXV0ZXgpOwogICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKLSAgICAgICBpZiAobWVtY21wKCZoYXNoX2Rlc2NyaXB0b3JbeF0sIGhhc2gsIHNpemVvZihzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvcikpID09IDApIHsKKyAgICAgICBpZiAoWE1FTUNNUCgmaGFzaF9kZXNjcmlwdG9yW3hdLCBoYXNoLCBzaXplb2Yoc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IpKSA9PSAwKSB7CiAgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2hhc2hfbXV0ZXgpOwogICAgICAgICAgIHJldHVybiB4OwogICAgICAgIH0KQEAgLTUwLDUgKzUwLDUgQEAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfaGFzaC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTg6MDA6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfcHJuZy5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfcHJuZy5jCmluZGV4IDVhYjRhNDkuLmE4MzRjNDcgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3BybmcuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI5LDcgKzI5LDcgQEAKICAgIC8qIGlzIGl0IGFscmVhZHkgcmVnaXN0ZXJlZD8gKi8KICAgIExUQ19NVVRFWF9MT0NLKCZsdGNfcHJuZ19tdXRleCk7CiAgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgewotICAgICAgIGlmIChtZW1jbXAoJnBybmdfZGVzY3JpcHRvclt4XSwgcHJuZywgc2l6ZW9mKHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yKSkgPT0gMCkgeworICAgICAgIGlmIChYTUVNQ01QKCZwcm5nX2Rlc2NyaXB0b3JbeF0sIHBybmcsIHNpemVvZihzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvcikpID09IDApIHsKICAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfcHJuZ19tdXRleCk7CiAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgfQpAQCAtNTAsNSArNTAsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5jIGIvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIuYwppbmRleCA0MDgxY2E4Li4zY2I0NmM0IDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5jCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfY2lwaGVyLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI5LDcgKzI5LDcgQEAKICAgIC8qIGlzIGl0IGFscmVhZHkgcmVnaXN0ZXJlZD8gKi8KICAgIExUQ19NVVRFWF9MT0NLKCZsdGNfY2lwaGVyX211dGV4KTsKICAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7Ci0gICAgICAgaWYgKG1lbWNtcCgmY2lwaGVyX2Rlc2NyaXB0b3JbeF0sIGNpcGhlciwgc2l6ZW9mKHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IpKSA9PSAwKSB7CisgICAgICAgaWYgKFhNRU1DTVAoJmNpcGhlcl9kZXNjcmlwdG9yW3hdLCBjaXBoZXIsIHNpemVvZihzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yKSkgPT0gMCkgewogICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgPSBOVUxMOwogICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW3hdLklEICAgPSAyNTU7CiAgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CkBAIC00MSw1ICs0MSw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfY2lwaGVyLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxODowMDoyOCAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2hhc2guYyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jCmluZGV4IGZkZDI1YjIuLmE4N2EzOTkgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jCisrKyBiL3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yOSw3ICsyOSw3IEBACiAgICAvKiBpcyBpdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/ICovCiAgICBMVENfTVVURVhfTE9DSygmbHRjX2hhc2hfbXV0ZXgpOwogICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKLSAgICAgICBpZiAobWVtY21wKCZoYXNoX2Rlc2NyaXB0b3JbeF0sIGhhc2gsIHNpemVvZihzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvcikpID09IDApIHsKKyAgICAgICBpZiAoWE1FTUNNUCgmaGFzaF9kZXNjcmlwdG9yW3hdLCBoYXNoLCBzaXplb2Yoc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IpKSA9PSAwKSB7CiAgICAgICAgICAgaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUgPSBOVUxMOwogICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19oYXNoX211dGV4KTsKICAgICAgICAgICByZXR1cm4gQ1JZUFRfT0s7CkBAIC00MCw1ICs0MCw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTg6MDA6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9wcm5nLmMgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcuYwppbmRleCA0YWZmNmRlLi42OTRjYmNmIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcuYworKysgYi9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjksNyArMjksNyBAQAogICAgLyogaXMgaXQgYWxyZWFkeSByZWdpc3RlcmVkPyAqLwogICAgTFRDX01VVEVYX0xPQ0soJmx0Y19wcm5nX211dGV4KTsKICAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7Ci0gICAgICAgaWYgKG1lbWNtcCgmcHJuZ19kZXNjcmlwdG9yW3hdLCBwcm5nLCBzaXplb2Yoc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IpKSAhPSAwKSB7CisgICAgICAgaWYgKFhNRU1DTVAoJnBybmdfZGVzY3JpcHRvclt4XSwgcHJuZywgc2l6ZW9mKHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yKSkgIT0gMCkgewogICAgICAgICAgIHBybmdfZGVzY3JpcHRvclt4XS5uYW1lID0gTlVMTDsKICAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfcHJuZ19tdXRleCk7CiAgICAgICAgICAgcmV0dXJuIENSWVBUX09LOwpAQCAtNDAsNSArNDAsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDE4OjAwOjI4ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL2Vycm9yX3RvX3N0cmluZy5jIGIvc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMKaW5kZXggNjE2N2E3MC4uMWRhMjU5NyAxMDA2NDQKLS0tIGEvc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMKKysrIGIvc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKQEAgLTcwLDUgKzcwLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9lcnJvcl90b19zdHJpbmcuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9taXNjL21waS9pc19wcmltZS5jIGIvc3JjL21pc2MvbXBpL2lzX3ByaW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZTRlZDIuLjAwMDAwMDAKLS0tIGEvc3JjL21pc2MvbXBpL2lzX3ByaW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCi0gKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKLSAqLwotI2luY2x1ZGUgInRvbWNyeXB0LmgiCi0KLS8qKgotICBAZmlsZSBpc19wcmltZS5jCi0gIERldGVybWluZXMgaWYgaW50ZWdlciBpcyBwcmltZSBmb3IgTFRDLCBUb20gU3QgRGVuaXMKLSovICAKLQotI2lmZGVmIE1QSQotCi0vKiBmaWd1cmVzIG91dCBpZiBhIG51bWJlciBpcyBwcmltZSAoTVIgdGVzdCkgKi8KLWludCBpc19wcmltZShtcF9pbnQgKk4sIGludCAqcmVzdWx0KQotewotICAgaW50IGVycjsKLSAgIExUQ19BUkdDSEsoTiAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsocmVzdWx0ICE9IE5VTEwpOwotICAgaWYgKChlcnIgPSBtcF9wcmltZV9pc19wcmltZShOLCBtcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzKG1wX2NvdW50X2JpdHMoTikpLCByZXN1bHQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotICAgfQotICAgcmV0dXJuIENSWVBUX09LOwotfQotCi0jZW5kaWYKLQotLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvbXBpL2lzX3ByaW1lLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9tcGkvbXBpLmMgYi9zcmMvbWlzYy9tcGkvbXBpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZGZhMDIuLjAwMDAwMDAKLS0tIGEvc3JjL21pc2MvbXBpL21waS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTA0OCArMCwwIEBACi0vKiBTdGFydDogYm5fZXJyb3IuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fRVJST1JfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICAgIGludCBjb2RlOwotICAgICBjaGFyICptc2c7Ci19IG1zZ3NbXSA9IHsKLSAgICAgeyBNUF9PS0FZLCAiU3VjY2Vzc2Z1bCIgfSwKLSAgICAgeyBNUF9NRU0sICAiT3V0IG9mIGhlYXAiIH0sCi0gICAgIHsgTVBfVkFMLCAgIlZhbHVlIG91dCBvZiByYW5nZSIgfQotfTsKLQotLyogcmV0dXJuIGEgY2hhciAqIHN0cmluZyBmb3IgYSBnaXZlbiBjb2RlICovCi1jaGFyICptcF9lcnJvcl90b19zdHJpbmcoaW50IGNvZGUpCi17Ci0gICBpbnQgeDsKLQotICAgLyogc2NhbiB0aGUgbG9va3VwIHRhYmxlIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSAqLwotICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZihtc2dzKSAvIHNpemVvZihtc2dzWzBdKSk7IHgrKykgewotICAgICAgIGlmIChtc2dzW3hdLmNvZGUgPT0gY29kZSkgewotICAgICAgICAgIHJldHVybiBtc2dzW3hdLm1zZzsKLSAgICAgICB9Ci0gICB9Ci0KLSAgIC8qIGdlbmVyaWMgcmVwbHkgZm9yIGludmFsaWQgY29kZSAqLwotICAgcmV0dXJuICJJbnZhbGlkIGVycm9yIGNvZGUiOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9lcnJvci5jICovCi0KLS8qIFN0YXJ0OiBibl9mYXN0X21wX2ludm1vZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9GQVNUX01QX0lOVk1PRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjb21wdXRlcyB0aGUgbW9kdWxhciBpbnZlcnNlIHZpYSBiaW5hcnkgZXh0ZW5kZWQgZXVjbGlkZWFuIGFsZ29yaXRobSwgCi0gKiB0aGF0IGlzIGMgPSAxL2EgbW9kIGIgCi0gKgotICogQmFzZWQgb24gc2xvdyBpbnZtb2QgZXhjZXB0IHRoaXMgaXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZSB3aGVyZSBiIGlzIAotICogb2RkIGFzIHBlciBIQUMgTm90ZSAxNC42NCBvbiBwcC4gNjEwCi0gKi8KLWludCBmYXN0X21wX2ludm1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgbXBfaW50ICB4LCB5LCB1LCB2LCBCLCBEOwotICBpbnQgICAgIHJlcywgbmVnOwotCi0gIC8qIDIuIFttb2RpZmllZF0gYiBtdXN0IGJlIG9kZCAgICovCi0gIGlmIChtcF9pc2V2ZW4gKGIpID09IDEpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogaW5pdCBhbGwgb3VyIHRlbXBzICovCi0gIGlmICgocmVzID0gbXBfaW5pdF9tdWx0aSgmeCwgJnksICZ1LCAmdiwgJkIsICZELCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgLyogeCA9PSBtb2R1bHVzLCB5ID09IHZhbHVlIHRvIGludmVydCAqLwotICBpZiAoKHJlcyA9IG1wX2NvcHkgKGIsICZ4KSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX0VSUjsKLSAgfQotCi0gIC8qIHdlIG5lZWQgeSA9IHxhfCAqLwotICBpZiAoKHJlcyA9IG1wX21vZCAoYSwgYiwgJnkpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfRVJSOwotICB9Ci0KLSAgLyogMy4gdT14LCB2PXksIEE9MSwgQj0wLCBDPTAsRD0xICovCi0gIGlmICgocmVzID0gbXBfY29weSAoJngsICZ1KSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX0VSUjsKLSAgfQotICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ5LCAmdikpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9FUlI7Ci0gIH0KLSAgbXBfc2V0ICgmRCwgMSk7Ci0KLXRvcDoKLSAgLyogNC4gIHdoaWxlIHUgaXMgZXZlbiBkbyAqLwotICB3aGlsZSAobXBfaXNldmVuICgmdSkgPT0gMSkgewotICAgIC8qIDQuMSB1ID0gdS8yICovCi0gICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJnUsICZ1KSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLSAgICAvKiA0LjIgaWYgQiBpcyBvZGQgdGhlbiAqLwotICAgIGlmIChtcF9pc29kZCAoJkIpID09IDEpIHsKLSAgICAgIGlmICgocmVzID0gbXBfc3ViICgmQiwgJngsICZCKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIEIgPSBCLzIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmQiwgJkIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotICB9Ci0KLSAgLyogNS4gIHdoaWxlIHYgaXMgZXZlbiBkbyAqLwotICB3aGlsZSAobXBfaXNldmVuICgmdikgPT0gMSkgewotICAgIC8qIDUuMSB2ID0gdi8yICovCi0gICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJnYsICZ2KSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLSAgICAvKiA1LjIgaWYgRCBpcyBvZGQgdGhlbiAqLwotICAgIGlmIChtcF9pc29kZCAoJkQpID09IDEpIHsKLSAgICAgIC8qIEQgPSAoRC14KS8yICovCi0gICAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkQsICZ4LCAmRCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfRVJSOwotICAgICAgfQotICAgIH0KLSAgICAvKiBEID0gRC8yICovCi0gICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJkQsICZEKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLSAgfQotCi0gIC8qIDYuICBpZiB1ID49IHYgdGhlbiAqLwotICBpZiAobXBfY21wICgmdSwgJnYpICE9IE1QX0xUKSB7Ci0gICAgLyogdSA9IHUgLSB2LCBCID0gQiAtIEQgKi8KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnUsICZ2LCAmdSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkIsICZELCAmQikpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogdiAtIHYgLSB1LCBEID0gRCAtIEIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnYsICZ1LCAmdikpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkQsICZCLCAmRCkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gIH0KLQotICAvKiBpZiBub3QgemVybyBnb3RvIHN0ZXAgNCAqLwotICBpZiAobXBfaXN6ZXJvICgmdSkgPT0gMCkgewotICAgIGdvdG8gdG9wOwotICB9Ci0KLSAgLyogbm93IGEgPSBDLCBiID0gRCwgZ2NkID09IGcqdiAqLwotCi0gIC8qIGlmIHYgIT0gMSB0aGVuIHRoZXJlIGlzIG5vIGludmVyc2UgKi8KLSAgaWYgKG1wX2NtcF9kICgmdiwgMSkgIT0gTVBfRVEpIHsKLSAgICByZXMgPSBNUF9WQUw7Ci0gICAgZ290byBMQkxfRVJSOwotICB9Ci0KLSAgLyogYiBpcyBub3cgdGhlIGludmVyc2UgKi8KLSAgbmVnID0gYS0+c2lnbjsKLSAgd2hpbGUgKEQuc2lnbiA9PSBNUF9ORUcpIHsKLSAgICBpZiAoKHJlcyA9IG1wX2FkZCAoJkQsIGIsICZEKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLSAgfQotICBtcF9leGNoICgmRCwgYyk7Ci0gIGMtPnNpZ24gPSBuZWc7Ci0gIHJlcyA9IE1QX09LQVk7Ci0KLUxCTF9FUlI6bXBfY2xlYXJfbXVsdGkgKCZ4LCAmeSwgJnUsICZ2LCAmQiwgJkQsIE5VTEwpOwotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fZmFzdF9tcF9pbnZtb2QuYyAqLwotCi0vKiBTdGFydDogYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9GQVNUX01QX01PTlRHT01FUllfUkVEVUNFX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGNvbXB1dGVzIHhSKiotMSA9PSB4IChtb2QgTikgdmlhIE1vbnRnb21lcnkgUmVkdWN0aW9uCi0gKgotICogVGhpcyBpcyBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgbW9udGdvbWVyeV9yZWR1Y2UKLSAqIHdoaWNoIHVzZXMgdGhlIGNvbWJhIG1ldGhvZCB0byBxdWlja2x5IGNhbGN1bGF0ZSB0aGUgY29sdW1ucyBvZiB0aGUKLSAqIHJlZHVjdGlvbi4KLSAqCi0gKiBCYXNlZCBvbiBBbGdvcml0aG0gMTQuMzIgb24gcHAuNjAxIG9mIEhBQy4KLSovCi1pbnQgZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbiwgbXBfZGlnaXQgcmhvKQotewotICBpbnQgICAgIGl4LCByZXMsIG9sZHVzZTsKLSAgbXBfd29yZCBXW01QX1dBUlJBWV07Ci0KLSAgLyogZ2V0IG9sZCB1c2VkIGNvdW50ICovCi0gIG9sZHVzZSA9IHgtPnVzZWQ7Ci0KLSAgLyogZ3JvdyBhIGFzIHJlcXVpcmVkICovCi0gIGlmICh4LT5hbGxvYyA8IG4tPnVzZWQgKyAxKSB7Ci0gICAgaWYgKChyZXMgPSBtcF9ncm93ICh4LCBuLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgLyogZmlyc3Qgd2UgaGF2ZSB0byBnZXQgdGhlIGRpZ2l0cyBvZiB0aGUgaW5wdXQgaW50bwotICAgKiBhbiBhcnJheSBvZiBkb3VibGUgcHJlY2lzaW9uIHdvcmRzIFdbLi4uXQotICAgKi8KLSAgewotICAgIHJlZ2lzdGVyIG1wX3dvcmQgKl9XOwotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXB4OwotCi0gICAgLyogYWxpYXMgZm9yIHRoZSBXW10gYXJyYXkgKi8KLSAgICBfVyAgID0gVzsKLQotICAgIC8qIGFsaWFzIGZvciB0aGUgZGlnaXRzIG9mICB4Ki8KLSAgICB0bXB4ID0geC0+ZHA7Ci0KLSAgICAvKiBjb3B5IHRoZSBkaWdpdHMgb2YgYSBpbnRvIFdbMC4uYS0+dXNlZC0xXSAqLwotICAgIGZvciAoaXggPSAwOyBpeCA8IHgtPnVzZWQ7IGl4KyspIHsKLSAgICAgICpfVysrID0gKnRtcHgrKzsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvIHRoZSBoaWdoIHdvcmRzIG9mIFdbYS0+dXNlZC4ubS0+dXNlZCoyXSAqLwotICAgIGZvciAoOyBpeCA8IG4tPnVzZWQgKiAyICsgMTsgaXgrKykgewotICAgICAgKl9XKysgPSAwOwotICAgIH0KLSAgfQotCi0gIC8qIG5vdyB3ZSBwcm9jZWVkIHRvIHplcm8gc3VjY2Vzc2l2ZSBkaWdpdHMKLSAgICogZnJvbSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdXB3YXJkcwotICAgKi8KLSAgZm9yIChpeCA9IDA7IGl4IDwgbi0+dXNlZDsgaXgrKykgewotICAgIC8qIG11ID0gYWkgKiBtJyBtb2QgYgotICAgICAqCi0gICAgICogV2UgYXZvaWQgYSBkb3VibGUgcHJlY2lzaW9uIG11bHRpcGxpY2F0aW9uICh3aGljaCBpc24ndCByZXF1aXJlZCkKLSAgICAgKiBieSBjYXN0aW5nIHRoZSB2YWx1ZSBkb3duIHRvIGEgbXBfZGlnaXQuICBOb3RlIHRoaXMgcmVxdWlyZXMKLSAgICAgKiB0aGF0IFdbaXgtMV0gaGF2ZSAgdGhlIGNhcnJ5IGNsZWFyZWQgKHNlZSBhZnRlciB0aGUgaW5uZXIgbG9vcCkKLSAgICAgKi8KLSAgICByZWdpc3RlciBtcF9kaWdpdCBtdTsKLSAgICBtdSA9IChtcF9kaWdpdCkgKCgoV1tpeF0gJiBNUF9NQVNLKSAqIHJobykgJiBNUF9NQVNLKTsKLQotICAgIC8qIGEgPSBhICsgbXUgKiBtICogYioqaQotICAgICAqCi0gICAgICogVGhpcyBpcyBjb21wdXRlZCBpbiBwbGFjZSBhbmQgb24gdGhlIGZseS4gIFRoZSBtdWx0aXBsaWNhdGlvbgotICAgICAqIGJ5IGIqKmkgaXMgaGFuZGxlZCBieSBvZmZzZXRpbmcgd2hpY2ggY29sdW1ucyB0aGUgcmVzdWx0cwotICAgICAqIGFyZSBhZGRlZCB0by4KLSAgICAgKgotICAgICAqIE5vdGUgdGhlIGNvbWJhIG1ldGhvZCBub3JtYWxseSBkb2Vzbid0IGhhbmRsZSBjYXJyaWVzIGluIHRoZQotICAgICAqIGlubmVyIGxvb3AgSW4gdGhpcyBjYXNlIHdlIGZpeCB0aGUgY2FycnkgZnJvbSB0aGUgcHJldmlvdXMKLSAgICAgKiBjb2x1bW4gc2luY2UgdGhlIE1vbnRnb21lcnkgcmVkdWN0aW9uIHJlcXVpcmVzIGRpZ2l0cyBvZiB0aGUKLSAgICAgKiByZXN1bHQgKHNvIGZhcikgW3NlZSBhYm92ZV0gdG8gd29yay4gIFRoaXMgaXMKLSAgICAgKiBoYW5kbGVkIGJ5IGZpeGluZyB1cCBvbmUgY2FycnkgYWZ0ZXIgdGhlIGlubmVyIGxvb3AuICBUaGUKLSAgICAgKiBjYXJyeSBmaXh1cHMgYXJlIGRvbmUgaW4gb3JkZXIgc28gYWZ0ZXIgdGhlc2UgbG9vcHMgdGhlCi0gICAgICogZmlyc3QgbS0+dXNlZCB3b3JkcyBvZiBXW10gaGF2ZSB0aGUgY2FycmllcyBmaXhlZAotICAgICAqLwotICAgIHsKLSAgICAgIHJlZ2lzdGVyIGludCBpeTsKLSAgICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBuOwotICAgICAgcmVnaXN0ZXIgbXBfd29yZCAqX1c7Ci0KLSAgICAgIC8qIGFsaWFzIGZvciB0aGUgZGlnaXRzIG9mIHRoZSBtb2R1bHVzICovCi0gICAgICB0bXBuID0gbi0+ZHA7Ci0KLSAgICAgIC8qIEFsaWFzIGZvciB0aGUgY29sdW1ucyBzZXQgYnkgYW4gb2Zmc2V0IG9mIGl4ICovCi0gICAgICBfVyA9IFcgKyBpeDsKLQotICAgICAgLyogaW5uZXIgbG9vcCAqLwotICAgICAgZm9yIChpeSA9IDA7IGl5IDwgbi0+dXNlZDsgaXkrKykgewotICAgICAgICAgICpfVysrICs9ICgobXBfd29yZCltdSkgKiAoKG1wX3dvcmQpKnRtcG4rKyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogbm93IGZpeCBjYXJyeSBmb3IgbmV4dCBkaWdpdCwgV1tpeCsxXSAqLwotICAgIFdbaXggKyAxXSArPSBXW2l4XSA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCk7Ci0gIH0KLQotICAvKiBub3cgd2UgaGF2ZSB0byBwcm9wYWdhdGUgdGhlIGNhcnJpZXMgYW5kCi0gICAqIHNoaWZ0IHRoZSB3b3JkcyBkb3dud2FyZCBbYWxsIHRob3NlIGxlYXN0Ci0gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB3ZSB6ZXJvZWRdLgotICAgKi8KLSAgewotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXB4OwotICAgIHJlZ2lzdGVyIG1wX3dvcmQgKl9XLCAqX1cxOwotCi0gICAgLyogbm94IGZpeCByZXN0IG9mIGNhcnJpZXMgKi8KLQotICAgIC8qIGFsaWFzIGZvciBjdXJyZW50IHdvcmQgKi8KLSAgICBfVzEgPSBXICsgaXg7Ci0KLSAgICAvKiBhbGlhcyBmb3IgbmV4dCB3b3JkLCB3aGVyZSB0aGUgY2FycnkgZ29lcyAqLwotICAgIF9XID0gVyArICsraXg7Ci0KLSAgICBmb3IgKDsgaXggPD0gbi0+dXNlZCAqIDIgKyAxOyBpeCsrKSB7Ci0gICAgICAqX1crKyArPSAqX1cxKysgPj4gKChtcF93b3JkKSBESUdJVF9CSVQpOwotICAgIH0KLQotICAgIC8qIGNvcHkgb3V0LCBBID0gQS9iKipuCi0gICAgICoKLSAgICAgKiBUaGUgcmVzdWx0IGlzIEEvYioqbiBidXQgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIGZyb20gYW4KLSAgICAgKiBhcnJheSBvZiBtcF93b3JkIHRvIG1wX2RpZ2l0IHRoYW4gY2FsbGluZyBtcF9yc2hkCi0gICAgICogd2UganVzdCBjb3B5IHRoZW0gaW4gdGhlIHJpZ2h0IG9yZGVyCi0gICAgICovCi0KLSAgICAvKiBhbGlhcyBmb3IgZGVzdGluYXRpb24gd29yZCAqLwotICAgIHRtcHggPSB4LT5kcDsKLQotICAgIC8qIGFsaWFzIGZvciBzaGlmdGVkIGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0ICovCi0gICAgX1cgPSBXICsgbi0+dXNlZDsKLQotICAgIGZvciAoaXggPSAwOyBpeCA8IG4tPnVzZWQgKyAxOyBpeCsrKSB7Ci0gICAgICAqdG1weCsrID0gKG1wX2RpZ2l0KSgqX1crKyAmICgobXBfd29yZCkgTVBfTUFTSykpOwotICAgIH0KLQotICAgIC8qIHplcm8gb2xkdXNlZCBkaWdpdHMsIGlmIHRoZSBpbnB1dCBhIHdhcyBsYXJnZXIgdGhhbgotICAgICAqIG0tPnVzZWQrMSB3ZSdsbCBoYXZlIHRvIGNsZWFyIHRoZSBkaWdpdHMKLSAgICAgKi8KLSAgICBmb3IgKDsgaXggPCBvbGR1c2U7IGl4KyspIHsKLSAgICAgICp0bXB4KysgPSAwOwotICAgIH0KLSAgfQotCi0gIC8qIHNldCB0aGUgbWF4IHVzZWQgYW5kIGNsYW1wICovCi0gIHgtPnVzZWQgPSBuLT51c2VkICsgMTsKLSAgbXBfY2xhbXAgKHgpOwotCi0gIC8qIGlmIEEgPj0gbSB0aGVuIEEgPSBBIC0gbSAqLwotICBpZiAobXBfY21wX21hZyAoeCwgbikgIT0gTVBfTFQpIHsKLSAgICByZXR1cm4gc19tcF9zdWIgKHgsIG4sIHgpOwotICB9Ci0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5jICovCi0KLS8qIFN0YXJ0OiBibl9mYXN0X3NfbXBfbXVsX2RpZ3MuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fRkFTVF9TX01QX01VTF9ESUdTX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIEZhc3QgKGNvbWJhKSBtdWx0aXBsaWVyCi0gKgotICogVGhpcyBpcyB0aGUgZmFzdCBjb2x1bW4tYXJyYXkgW2NvbWJhXSBtdWx0aXBsaWVyLiAgSXQgaXMgCi0gKiBkZXNpZ25lZCB0byBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBwcm9kdWN0IGZpcnN0IAotICogdGhlbiBoYW5kbGUgdGhlIGNhcnJpZXMgYWZ0ZXJ3YXJkcy4gIFRoaXMgaGFzIHRoZSBlZmZlY3QgCi0gKiBvZiBtYWtpbmcgdGhlIG5lc3RlZCBsb29wcyB0aGF0IGNvbXB1dGUgdGhlIGNvbHVtbnMgdmVyeQotICogc2ltcGxlIGFuZCBzY2hlZHVsYWJsZSBvbiBzdXBlci1zY2FsYXIgcHJvY2Vzc29ycy4KLSAqCi0gKiBUaGlzIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHByb2R1Y2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgCi0gKiBkaWdpdHMgb2Ygb3V0cHV0IHNvIGlmIHNheSBvbmx5IGEgaGFsZi1wcm9kdWN0IGlzIHJlcXVpcmVkIAotICogeW91IGRvbid0IGhhdmUgdG8gY29tcHV0ZSB0aGUgdXBwZXIgaGFsZiAoYSBmZWF0dXJlIAotICogcmVxdWlyZWQgZm9yIGZhc3QgQmFycmV0dCByZWR1Y3Rpb24pLgotICoKLSAqIEJhc2VkIG9uIEFsZ29yaXRobSAxNC4xMiBvbiBwcC41OTUgb2YgSEFDLgotICoKLSAqLwotaW50IGZhc3Rfc19tcF9tdWxfZGlncyAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgaW50IGRpZ3MpCi17Ci0gIGludCAgICAgb2xkdXNlLCByZXMsIHBhLCBpeCwgaXo7Ci0gIG1wX2RpZ2l0IFdbTVBfV0FSUkFZXTsKLSAgcmVnaXN0ZXIgbXBfd29yZCAgX1c7Ci0KLSAgLyogZ3JvdyB0aGUgZGVzdGluYXRpb24gYXMgcmVxdWlyZWQgKi8KLSAgaWYgKGMtPmFsbG9jIDwgZGlncykgewotICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgZGlncykpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgLyogbnVtYmVyIG9mIG91dHB1dCBkaWdpdHMgdG8gcHJvZHVjZSAqLwotICBwYSA9IE1JTihkaWdzLCBhLT51c2VkICsgYi0+dXNlZCk7Ci0KLSAgLyogY2xlYXIgdGhlIGNhcnJ5ICovCi0gIF9XID0gMDsKLSAgZm9yIChpeCA9IDA7IGl4IDwgcGE7IGl4KyspIHsgCi0gICAgICBpbnQgICAgICB0eCwgdHk7Ci0gICAgICBpbnQgICAgICBpeTsKLSAgICAgIG1wX2RpZ2l0ICp0bXB4LCAqdG1weTsKLQotICAgICAgLyogZ2V0IG9mZnNldHMgaW50byB0aGUgdHdvIGJpZ251bXMgKi8KLSAgICAgIHR5ID0gTUlOKGItPnVzZWQtMSwgaXgpOwotICAgICAgdHggPSBpeCAtIHR5OwotCi0gICAgICAvKiBzZXR1cCB0ZW1wIGFsaWFzZXMgKi8KLSAgICAgIHRtcHggPSBhLT5kcCArIHR4OwotICAgICAgdG1weSA9IGItPmRwICsgdHk7Ci0KLSAgICAgIC8qIHRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbG9vcCB3aWxsIGl0ZXJyYXRlLCBlc3NlbnRpYWxseSAKLSAgICAgICAgIHdoaWxlICh0eCsrIDwgYS0+dXNlZCAmJiB0eS0tID49IDApIHsgLi4uIH0KLSAgICAgICAqLwotICAgICAgaXkgPSBNSU4oYS0+dXNlZC10eCwgdHkrMSk7Ci0KLSAgICAgIC8qIGV4ZWN1dGUgbG9vcCAqLwotICAgICAgZm9yIChpeiA9IDA7IGl6IDwgaXk7ICsraXopIHsKLSAgICAgICAgIF9XICs9ICgobXBfd29yZCkqdG1weCsrKSooKG1wX3dvcmQpKnRtcHktLSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHN0b3JlIHRlcm0gKi8KLSAgICAgIFdbaXhdID0gKChtcF9kaWdpdClfVykgJiBNUF9NQVNLOwotCi0gICAgICAvKiBtYWtlIG5leHQgY2FycnkgKi8KLSAgICAgIF9XID0gX1cgPj4gKChtcF93b3JkKURJR0lUX0JJVCk7Ci0gIH0KLQotICAvKiBzdG9yZSBmaW5hbCBjYXJyeSAqLwotICBXW2l4XSA9IChtcF9kaWdpdCkoX1cgJiBNUF9NQVNLKTsKLQotICAvKiBzZXR1cCBkZXN0ICovCi0gIG9sZHVzZSAgPSBjLT51c2VkOwotICBjLT51c2VkID0gcGE7Ci0KLSAgewotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBjOwotICAgIHRtcGMgPSBjLT5kcDsKLSAgICBmb3IgKGl4ID0gMDsgaXggPCBwYSsxOyBpeCsrKSB7Ci0gICAgICAvKiBub3cgZXh0cmFjdCB0aGUgcHJldmlvdXMgZGlnaXQgW2JlbG93IHRoZSBjYXJyeV0gKi8KLSAgICAgICp0bXBjKysgPSBXW2l4XTsKLSAgICB9Ci0KLSAgICAvKiBjbGVhciB1bnVzZWQgZGlnaXRzIFt0aGF0IGV4aXN0ZWQgaW4gdGhlIG9sZCBjb3B5IG9mIGNdICovCi0gICAgZm9yICg7IGl4IDwgb2xkdXNlOyBpeCsrKSB7Ci0gICAgICAqdG1wYysrID0gMDsKLSAgICB9Ci0gIH0KLSAgbXBfY2xhbXAgKGMpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX2Zhc3Rfc19tcF9tdWxfZGlncy5jICovCi0KLS8qIFN0YXJ0OiBibl9mYXN0X3NfbXBfbXVsX2hpZ2hfZGlncy5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiB0aGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBmYXN0X3NfbXVsX2RpZ3MgdGhhdCBvbmx5IHByb2R1Y2VzCi0gKiBvdXRwdXQgZGlnaXRzICphYm92ZSogZGlncy4gIFNlZSB0aGUgY29tbWVudHMgZm9yIGZhc3Rfc19tdWxfZGlncwotICogdG8gc2VlIGhvdyBpdCB3b3Jrcy4KLSAqCi0gKiBUaGlzIGlzIHVzZWQgaW4gdGhlIEJhcnJldHQgcmVkdWN0aW9uIHNpbmNlIGZvciBvbmUgb2YgdGhlIG11bHRpcGxpY2F0aW9ucwotICogb25seSB0aGUgaGlnaGVyIGRpZ2l0cyB3ZXJlIG5lZWRlZC4gIFRoaXMgZXNzZW50aWFsbHkgaGFsdmVzIHRoZSB3b3JrLgotICoKLSAqIEJhc2VkIG9uIEFsZ29yaXRobSAxNC4xMiBvbiBwcC41OTUgb2YgSEFDLgotICovCi1pbnQgZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQotewotICBpbnQgICAgIG9sZHVzZSwgcmVzLCBwYSwgaXgsIGl6OwotICBtcF9kaWdpdCBXW01QX1dBUlJBWV07Ci0gIG1wX3dvcmQgIF9XOwotCi0gIC8qIGdyb3cgdGhlIGRlc3RpbmF0aW9uIGFzIHJlcXVpcmVkICovCi0gIHBhID0gYS0+dXNlZCArIGItPnVzZWQ7Ci0gIGlmIChjLT5hbGxvYyA8IHBhKSB7Ci0gICAgaWYgKChyZXMgPSBtcF9ncm93IChjLCBwYSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgLyogbnVtYmVyIG9mIG91dHB1dCBkaWdpdHMgdG8gcHJvZHVjZSAqLwotICBwYSA9IGEtPnVzZWQgKyBiLT51c2VkOwotICBfVyA9IDA7Ci0gIGZvciAoaXggPSBkaWdzOyBpeCA8IHBhOyBpeCsrKSB7IAotICAgICAgaW50ICAgICAgdHgsIHR5LCBpeTsKLSAgICAgIG1wX2RpZ2l0ICp0bXB4LCAqdG1weTsKLQotICAgICAgLyogZ2V0IG9mZnNldHMgaW50byB0aGUgdHdvIGJpZ251bXMgKi8KLSAgICAgIHR5ID0gTUlOKGItPnVzZWQtMSwgaXgpOwotICAgICAgdHggPSBpeCAtIHR5OwotCi0gICAgICAvKiBzZXR1cCB0ZW1wIGFsaWFzZXMgKi8KLSAgICAgIHRtcHggPSBhLT5kcCArIHR4OwotICAgICAgdG1weSA9IGItPmRwICsgdHk7Ci0KLSAgICAgIC8qIHRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbG9vcCB3aWxsIGl0ZXJyYXRlLCBlc3NlbnRpYWxseSBpdHMgCi0gICAgICAgICB3aGlsZSAodHgrKyA8IGEtPnVzZWQgJiYgdHktLSA+PSAwKSB7IC4uLiB9Ci0gICAgICAgKi8KLSAgICAgIGl5ID0gTUlOKGEtPnVzZWQtdHgsIHR5KzEpOwotCi0gICAgICAvKiBleGVjdXRlIGxvb3AgKi8KLSAgICAgIGZvciAoaXogPSAwOyBpeiA8IGl5OyBpeisrKSB7Ci0gICAgICAgICBfVyArPSAoKG1wX3dvcmQpKnRtcHgrKykqKChtcF93b3JkKSp0bXB5LS0pOwotICAgICAgfQotCi0gICAgICAvKiBzdG9yZSB0ZXJtICovCi0gICAgICBXW2l4XSA9ICgobXBfZGlnaXQpX1cpICYgTVBfTUFTSzsKLQotICAgICAgLyogbWFrZSBuZXh0IGNhcnJ5ICovCi0gICAgICBfVyA9IF9XID4+ICgobXBfd29yZClESUdJVF9CSVQpOwotICB9Ci0gIAotICAvKiBzdG9yZSBmaW5hbCBjYXJyeSAqLwotICBXW2l4XSA9IChtcF9kaWdpdCkoX1cgJiBNUF9NQVNLKTsKLQotICAvKiBzZXR1cCBkZXN0ICovCi0gIG9sZHVzZSAgPSBjLT51c2VkOwotICBjLT51c2VkID0gcGE7Ci0KLSAgewotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBjOwotCi0gICAgdG1wYyA9IGMtPmRwICsgZGlnczsKLSAgICBmb3IgKGl4ID0gZGlnczsgaXggPD0gcGE7IGl4KyspIHsKLSAgICAgIC8qIG5vdyBleHRyYWN0IHRoZSBwcmV2aW91cyBkaWdpdCBbYmVsb3cgdGhlIGNhcnJ5XSAqLwotICAgICAgKnRtcGMrKyA9IFdbaXhdOwotICAgIH0KLQotICAgIC8qIGNsZWFyIHVudXNlZCBkaWdpdHMgW3RoYXQgZXhpc3RlZCBpbiB0aGUgb2xkIGNvcHkgb2YgY10gKi8KLSAgICBmb3IgKDsgaXggPCBvbGR1c2U7IGl4KyspIHsKLSAgICAgICp0bXBjKysgPSAwOwotICAgIH0KLSAgfQotICBtcF9jbGFtcCAoYyk7Ci0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fZmFzdF9zX21wX211bF9oaWdoX2RpZ3MuYyAqLwotCi0vKiBTdGFydDogYm5fZmFzdF9zX21wX3Nxci5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9GQVNUX1NfTVBfU1FSX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHRoZSBqaXN0IG9mIHNxdWFyaW5nLi4uCi0gKiB5b3UgZG8gbGlrZSBtdWx0IGV4Y2VwdCB0aGUgb2Zmc2V0IG9mIHRoZSB0bXB4IFtvbmUgdGhhdCAKLSAqIHN0YXJ0cyBjbG9zZXIgdG8gemVyb10gY2FuJ3QgZXF1YWwgdGhlIG9mZnNldCBvZiB0bXB5LiAgCi0gKiBTbyBiYXNpY2FsbHkgeW91IHNldCB1cCBpeSBsaWtlIGJlZm9yZSB0aGVuIHlvdSBtaW4gaXQgd2l0aAotICogKHR5LXR4KSBzbyB0aGF0IGl0IG5ldmVyIGhhcHBlbnMuICBZb3UgZG91YmxlIGFsbCB0aG9zZSAKLSAqIHlvdSBhZGQgaW4gdGhlIGlubmVyIGxvb3AKLQotQWZ0ZXIgdGhhdCBsb29wIHlvdSBkbyB0aGUgc3F1YXJlcyBhbmQgYWRkIHRoZW0gaW4uCi0qLwotCi1pbnQgZmFzdF9zX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgaW50ICAgICAgIG9sZHVzZSwgcmVzLCBwYSwgaXgsIGl6OwotICBtcF9kaWdpdCAgIFdbTVBfV0FSUkFZXSwgKnRtcHg7Ci0gIG1wX3dvcmQgICBXMTsKLQotICAvKiBncm93IHRoZSBkZXN0aW5hdGlvbiBhcyByZXF1aXJlZCAqLwotICBwYSA9IGEtPnVzZWQgKyBhLT51c2VkOwotICBpZiAoYi0+YWxsb2MgPCBwYSkgewotICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYiwgcGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgfQotCi0gIC8qIG51bWJlciBvZiBvdXRwdXQgZGlnaXRzIHRvIHByb2R1Y2UgKi8KLSAgVzEgPSAwOwotICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeyAKLSAgICAgIGludCAgICAgIHR4LCB0eSwgaXk7Ci0gICAgICBtcF93b3JkICBfVzsKLSAgICAgIG1wX2RpZ2l0ICp0bXB5OwotCi0gICAgICAvKiBjbGVhciBjb3VudGVyICovCi0gICAgICBfVyA9IDA7Ci0KLSAgICAgIC8qIGdldCBvZmZzZXRzIGludG8gdGhlIHR3byBiaWdudW1zICovCi0gICAgICB0eSA9IE1JTihhLT51c2VkLTEsIGl4KTsKLSAgICAgIHR4ID0gaXggLSB0eTsKLQotICAgICAgLyogc2V0dXAgdGVtcCBhbGlhc2VzICovCi0gICAgICB0bXB4ID0gYS0+ZHAgKyB0eDsKLSAgICAgIHRtcHkgPSBhLT5kcCArIHR5OwotCi0gICAgICAvKiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGxvb3Agd2lsbCBpdGVycmF0ZSwgZXNzZW50aWFsbHkKLSAgICAgICAgIHdoaWxlICh0eCsrIDwgYS0+dXNlZCAmJiB0eS0tID49IDApIHsgLi4uIH0KLSAgICAgICAqLwotICAgICAgaXkgPSBNSU4oYS0+dXNlZC10eCwgdHkrMSk7Ci0KLSAgICAgIC8qIG5vdyBmb3Igc3F1YXJpbmcgdHggY2FuIG5ldmVyIGVxdWFsIHR5IAotICAgICAgICogd2UgaGFsdmUgdGhlIGRpc3RhbmNlIHNpbmNlIHRoZXkgYXBwcm9hY2ggYXQgYSByYXRlIG9mIDJ4Ci0gICAgICAgKiBhbmQgd2UgaGF2ZSB0byByb3VuZCBiZWNhdXNlIG9kZCBjYXNlcyBuZWVkIHRvIGJlIGV4ZWN1dGVkCi0gICAgICAgKi8KLSAgICAgIGl5ID0gTUlOKGl5LCAodHktdHgrMSk+PjEpOwotCi0gICAgICAvKiBleGVjdXRlIGxvb3AgKi8KLSAgICAgIGZvciAoaXogPSAwOyBpeiA8IGl5OyBpeisrKSB7Ci0gICAgICAgICBfVyArPSAoKG1wX3dvcmQpKnRtcHgrKykqKChtcF93b3JkKSp0bXB5LS0pOwotICAgICAgfQotCi0gICAgICAvKiBkb3VibGUgdGhlIGlubmVyIHByb2R1Y3QgYW5kIGFkZCBjYXJyeSAqLwotICAgICAgX1cgPSBfVyArIF9XICsgVzE7Ci0KLSAgICAgIC8qIGV2ZW4gY29sdW1ucyBoYXZlIHRoZSBzcXVhcmUgdGVybSBpbiB0aGVtICovCi0gICAgICBpZiAoKGl4JjEpID09IDApIHsKLSAgICAgICAgIF9XICs9ICgobXBfd29yZClhLT5kcFtpeD4+MV0pKigobXBfd29yZClhLT5kcFtpeD4+MV0pOwotICAgICAgfQotCi0gICAgICAvKiBzdG9yZSBpdCAqLwotICAgICAgV1tpeF0gPSAobXBfZGlnaXQpKF9XICYgTVBfTUFTSyk7Ci0KLSAgICAgIC8qIG1ha2UgbmV4dCBjYXJyeSAqLwotICAgICAgVzEgPSBfVyA+PiAoKG1wX3dvcmQpRElHSVRfQklUKTsKLSAgfQotCi0gIC8qIHNldHVwIGRlc3QgKi8KLSAgb2xkdXNlICA9IGItPnVzZWQ7Ci0gIGItPnVzZWQgPSBhLT51c2VkK2EtPnVzZWQ7Ci0KLSAgewotICAgIG1wX2RpZ2l0ICp0bXBiOwotICAgIHRtcGIgPSBiLT5kcDsKLSAgICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgewotICAgICAgKnRtcGIrKyA9IFdbaXhdICYgTVBfTUFTSzsKLSAgICB9Ci0KLSAgICAvKiBjbGVhciB1bnVzZWQgZGlnaXRzIFt0aGF0IGV4aXN0ZWQgaW4gdGhlIG9sZCBjb3B5IG9mIGNdICovCi0gICAgZm9yICg7IGl4IDwgb2xkdXNlOyBpeCsrKSB7Ci0gICAgICAqdG1wYisrID0gMDsKLSAgICB9Ci0gIH0KLSAgbXBfY2xhbXAgKGIpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX2Zhc3Rfc19tcF9zcXIuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfMmV4cHQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfMkVYUFRfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogY29tcHV0ZXMgYSA9IDIqKmIgCi0gKgotICogU2ltcGxlIGFsZ29yaXRobSB3aGljaCB6ZXJvZXMgdGhlIGludCwgZ3Jvd3MgaXQgdGhlbiBqdXN0IHNldHMgb25lIGJpdAotICogYXMgcmVxdWlyZWQuCi0gKi8KLWludAotbXBfMmV4cHQgKG1wX2ludCAqIGEsIGludCBiKQotewotICBpbnQgICAgIHJlczsKLQotICAvKiB6ZXJvIGEgYXMgcGVyIGRlZmF1bHQgKi8KLSAgbXBfemVybyAoYSk7Ci0KLSAgLyogZ3JvdyBhIHRvIGFjY29tb2RhdGUgdGhlIHNpbmdsZSBiaXQgKi8KLSAgaWYgKChyZXMgPSBtcF9ncm93IChhLCBiIC8gRElHSVRfQklUICsgMSkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgLyogc2V0IHRoZSB1c2VkIGNvdW50IG9mIHdoZXJlIHRoZSBiaXQgd2lsbCBnbyAqLwotICBhLT51c2VkID0gYiAvIERJR0lUX0JJVCArIDE7Ci0KLSAgLyogcHV0IHRoZSBzaW5nbGUgYml0IGluIGl0cyBwbGFjZSAqLwotICBhLT5kcFtiIC8gRElHSVRfQklUXSA9ICgobXBfZGlnaXQpMSkgPDwgKGIgJSBESUdJVF9CSVQpOwotCi0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfMmV4cHQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfYWJzLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0FCU19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBiID0gfGF8IAotICoKLSAqIFNpbXBsZSBmdW5jdGlvbiBjb3BpZXMgdGhlIGlucHV0IGFuZCBmaXhlcyB0aGUgc2lnbiB0byBwb3NpdGl2ZQotICovCi1pbnQKLW1wX2FicyAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgaW50ICAgICByZXM7Ci0KLSAgLyogY29weSBhIHRvIGIgKi8KLSAgaWYgKGEgIT0gYikgewotICAgICBpZiAoKHJlcyA9IG1wX2NvcHkgKGEsIGIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgcmV0dXJuIHJlczsKLSAgICAgfQotICB9Ci0KLSAgLyogZm9yY2UgdGhlIHNpZ24gb2YgYiB0byBwb3NpdGl2ZSAqLwotICBiLT5zaWduID0gTVBfWlBPUzsKLQotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2Ficy5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9hZGQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfQUREX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGhpZ2ggbGV2ZWwgYWRkaXRpb24gKGhhbmRsZXMgc2lnbnMpICovCi1pbnQgbXBfYWRkIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQotewotICBpbnQgICAgIHNhLCBzYiwgcmVzOwotCi0gIC8qIGdldCBzaWduIG9mIGJvdGggaW5wdXRzICovCi0gIHNhID0gYS0+c2lnbjsKLSAgc2IgPSBiLT5zaWduOwotCi0gIC8qIGhhbmRsZSB0d28gY2FzZXMsIG5vdCBmb3VyICovCi0gIGlmIChzYSA9PSBzYikgewotICAgIC8qIGJvdGggcG9zaXRpdmUgb3IgYm90aCBuZWdhdGl2ZSAqLwotICAgIC8qIGFkZCB0aGVpciBtYWduaXR1ZGVzLCBjb3B5IHRoZSBzaWduICovCi0gICAgYy0+c2lnbiA9IHNhOwotICAgIHJlcyA9IHNfbXBfYWRkIChhLCBiLCBjKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBvbmUgcG9zaXRpdmUsIHRoZSBvdGhlciBuZWdhdGl2ZSAqLwotICAgIC8qIHN1YnRyYWN0IHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlciBtYWduaXR1ZGUgZnJvbSAqLwotICAgIC8qIHRoZSBvbmUgb2YgdGhlIGxlc3NlciBtYWduaXR1ZGUuICBUaGUgcmVzdWx0IGdldHMgKi8KLSAgICAvKiB0aGUgc2lnbiBvZiB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXIgbWFnbml0dWRlLiAqLwotICAgIGlmIChtcF9jbXBfbWFnIChhLCBiKSA9PSBNUF9MVCkgewotICAgICAgYy0+c2lnbiA9IHNiOwotICAgICAgcmVzID0gc19tcF9zdWIgKGIsIGEsIGMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjLT5zaWduID0gc2E7Ci0gICAgICByZXMgPSBzX21wX3N1YiAoYSwgYiwgYyk7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2FkZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9hZGRfZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9BRERfRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzaW5nbGUgZGlnaXQgYWRkaXRpb24gKi8KLWludAotbXBfYWRkX2QgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqIGMpCi17Ci0gIGludCAgICAgcmVzLCBpeCwgb2xkdXNlZDsKLSAgbXBfZGlnaXQgKnRtcGEsICp0bXBjLCBtdTsKLQotICAvKiBncm93IGMgYXMgcmVxdWlyZWQgKi8KLSAgaWYgKGMtPmFsbG9jIDwgYS0+dXNlZCArIDEpIHsKLSAgICAgaWYgKChyZXMgPSBtcF9ncm93KGMsIGEtPnVzZWQgKyAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICByZXR1cm4gcmVzOwotICAgICB9Ci0gIH0KLQotICAvKiBpZiBhIGlzIG5lZ2F0aXZlIGFuZCB8YXwgPj0gYiwgY2FsbCBjID0gfGF8IC0gYiAqLwotICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcgJiYgKGEtPnVzZWQgPiAxIHx8IGEtPmRwWzBdID49IGIpKSB7Ci0gICAgIC8qIHRlbXBvcmFyaWx5IGZpeCBzaWduIG9mIGEgKi8KLSAgICAgYS0+c2lnbiA9IE1QX1pQT1M7Ci0KLSAgICAgLyogYyA9IHxhfCAtIGIgKi8KLSAgICAgcmVzID0gbXBfc3ViX2QoYSwgYiwgYyk7Ci0KLSAgICAgLyogZml4IHNpZ24gICovCi0gICAgIGEtPnNpZ24gPSBjLT5zaWduID0gTVBfTkVHOwotCi0gICAgIHJldHVybiByZXM7Ci0gIH0KLQotICAvKiBvbGQgbnVtYmVyIG9mIHVzZWQgZGlnaXRzIGluIGMgKi8KLSAgb2xkdXNlZCA9IGMtPnVzZWQ7Ci0KLSAgLyogc2lnbiBhbHdheXMgcG9zaXRpdmUgKi8KLSAgYy0+c2lnbiA9IE1QX1pQT1M7Ci0KLSAgLyogc291cmNlIGFsaWFzICovCi0gIHRtcGEgICAgPSBhLT5kcDsKLQotICAvKiBkZXN0aW5hdGlvbiBhbGlhcyAqLwotICB0bXBjICAgID0gYy0+ZHA7Ci0KLSAgLyogaWYgYSBpcyBwb3NpdGl2ZSAqLwotICBpZiAoYS0+c2lnbiA9PSBNUF9aUE9TKSB7Ci0gICAgIC8qIGFkZCBkaWdpdCwgYWZ0ZXIgdGhpcyB3ZSdyZSBwcm9wYWdhdGluZwotICAgICAgKiB0aGUgY2FycnkuCi0gICAgICAqLwotICAgICAqdG1wYyAgID0gKnRtcGErKyArIGI7Ci0gICAgIG11ICAgICAgPSAqdG1wYyA+PiBESUdJVF9CSVQ7Ci0gICAgICp0bXBjKysgJj0gTVBfTUFTSzsKLQotICAgICAvKiBub3cgaGFuZGxlIHJlc3Qgb2YgdGhlIGRpZ2l0cyAqLwotICAgICBmb3IgKGl4ID0gMTsgaXggPCBhLT51c2VkOyBpeCsrKSB7Ci0gICAgICAgICp0bXBjICAgPSAqdG1wYSsrICsgbXU7Ci0gICAgICAgIG11ICAgICAgPSAqdG1wYyA+PiBESUdJVF9CSVQ7Ci0gICAgICAgICp0bXBjKysgJj0gTVBfTUFTSzsKLSAgICAgfQotICAgICAvKiBzZXQgZmluYWwgY2FycnkgKi8KLSAgICAgaXgrKzsKLSAgICAgKnRtcGMrKyAgPSBtdTsKLQotICAgICAvKiBzZXR1cCBzaXplICovCi0gICAgIGMtPnVzZWQgPSBhLT51c2VkICsgMTsKLSAgfSBlbHNlIHsKLSAgICAgLyogYSB3YXMgbmVnYXRpdmUgYW5kIHxhfCA8IGIgKi8KLSAgICAgYy0+dXNlZCAgPSAxOwotCi0gICAgIC8qIHRoZSByZXN1bHQgaXMgYSBzaW5nbGUgZGlnaXQgKi8KLSAgICAgaWYgKGEtPnVzZWQgPT0gMSkgewotICAgICAgICAqdG1wYysrICA9ICBiIC0gYS0+ZHBbMF07Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgICp0bXBjKysgID0gIGI7Ci0gICAgIH0KLQotICAgICAvKiBzZXR1cCBjb3VudCBzbyB0aGUgY2xlYXJpbmcgb2Ygb2xkdXNlZAotICAgICAgKiBjYW4gZmFsbCB0aHJvdWdoIGNvcnJlY3RseQotICAgICAgKi8KLSAgICAgaXggICAgICAgPSAxOwotICB9Ci0KLSAgLyogbm93IHplcm8gdG8gb2xkdXNlZCAqLwotICB3aGlsZSAoaXgrKyA8IG9sZHVzZWQpIHsKLSAgICAgKnRtcGMrKyA9IDA7Ci0gIH0KLSAgbXBfY2xhbXAoYyk7Ci0KLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2FkZF9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2FkZG1vZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9BRERNT0RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogZCA9IGEgKyBiIChtb2QgYykgKi8KLWludAotbXBfYWRkbW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKQotewotICBpbnQgICAgIHJlczsKLSAgbXBfaW50ICB0OwotCi0gIGlmICgocmVzID0gbXBfaW5pdCAoJnQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfYWRkIChhLCBiLCAmdCkpICE9IE1QX09LQVkpIHsKLSAgICBtcF9jbGVhciAoJnQpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLSAgcmVzID0gbXBfbW9kICgmdCwgYywgZCk7Ci0gIG1wX2NsZWFyICgmdCk7Ci0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9hZGRtb2QuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfYW5kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0FORF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBBTkQgdHdvIGludHMgdG9nZXRoZXIgKi8KLWludAotbXBfYW5kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQotewotICBpbnQgICAgIHJlcywgaXgsIHB4OwotICBtcF9pbnQgIHQsICp4OwotCi0gIGlmIChhLT51c2VkID4gYi0+dXNlZCkgewotICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIHB4ID0gYi0+dXNlZDsKLSAgICB4ID0gYjsKLSAgfSBlbHNlIHsKLSAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBweCA9IGEtPnVzZWQ7Ci0gICAgeCA9IGE7Ci0gIH0KLQotICBmb3IgKGl4ID0gMDsgaXggPCBweDsgaXgrKykgewotICAgIHQuZHBbaXhdICY9IHgtPmRwW2l4XTsKLSAgfQotCi0gIC8qIHplcm8gZGlnaXRzIGFib3ZlIHRoZSBsYXN0IGZyb20gdGhlIHNtYWxsZXN0IG1wX2ludCAqLwotICBmb3IgKDsgaXggPCB0LnVzZWQ7IGl4KyspIHsKLSAgICB0LmRwW2l4XSA9IDA7Ci0gIH0KLQotICBtcF9jbGFtcCAoJnQpOwotICBtcF9leGNoIChjLCAmdCk7Ci0gIG1wX2NsZWFyICgmdCk7Ci0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfYW5kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2NsYW1wLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0NMQU1QX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHRyaW0gdW51c2VkIGRpZ2l0cyAKLSAqCi0gKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgbGVhZGluZyB6ZXJvIGRpZ2l0cyBhcmUKLSAqIHRyaW1lZCBhbmQgdGhlIGxlYWRpbmcgInVzZWQiIGRpZ2l0IHdpbGwgYmUgbm9uLXplcm8KLSAqIFR5cGljYWxseSB2ZXJ5IGZhc3QuICBBbHNvIGZpeGVzIHRoZSBzaWduIGlmIHRoZXJlCi0gKiBhcmUgbm8gbW9yZSBsZWFkaW5nIGRpZ2l0cwotICovCi12b2lkCi1tcF9jbGFtcCAobXBfaW50ICogYSkKLXsKLSAgLyogZGVjcmVhc2UgdXNlZCB3aGlsZSB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCBpcwotICAgKiB6ZXJvLgotICAgKi8KLSAgd2hpbGUgKGEtPnVzZWQgPiAwICYmIGEtPmRwW2EtPnVzZWQgLSAxXSA9PSAwKSB7Ci0gICAgLS0oYS0+dXNlZCk7Ci0gIH0KLQotICAvKiByZXNldCB0aGUgc2lnbiBmbGFnIGlmIHVzZWQgPT0gMCAqLwotICBpZiAoYS0+dXNlZCA9PSAwKSB7Ci0gICAgYS0+c2lnbiA9IE1QX1pQT1M7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2NsYW1wLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2NsZWFyLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0NMRUFSX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGNsZWFyIG9uZSAoZnJlZXMpICAqLwotdm9pZAotbXBfY2xlYXIgKG1wX2ludCAqIGEpCi17Ci0gIGludCBpOwotCi0gIC8qIG9ubHkgZG8gYW55dGhpbmcgaWYgYSBoYXNuJ3QgYmVlbiBmcmVlZCBwcmV2aW91c2x5ICovCi0gIGlmIChhLT5kcCAhPSBOVUxMKSB7Ci0gICAgLyogZmlyc3QgemVybyB0aGUgZGlnaXRzICovCi0gICAgZm9yIChpID0gMDsgaSA8IGEtPnVzZWQ7IGkrKykgewotICAgICAgICBhLT5kcFtpXSA9IDA7Ci0gICAgfQotCi0gICAgLyogZnJlZSByYW0gKi8KLSAgICBYRlJFRShhLT5kcCk7Ci0KLSAgICAvKiByZXNldCBtZW1iZXJzIHRvIG1ha2UgZGVidWdnaW5nIGVhc2llciAqLwotICAgIGEtPmRwICAgID0gTlVMTDsKLSAgICBhLT5hbGxvYyA9IGEtPnVzZWQgPSAwOwotICAgIGEtPnNpZ24gID0gTVBfWlBPUzsKLSAgfQotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfY2xlYXIuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfY2xlYXJfbXVsdGkuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfQ0xFQVJfTVVMVElfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotdm9pZCBtcF9jbGVhcl9tdWx0aShtcF9pbnQgKm1wLCAuLi4pIAotewotICAgIG1wX2ludCogbmV4dF9tcCA9IG1wOwotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChhcmdzLCBtcCk7Ci0gICAgd2hpbGUgKG5leHRfbXAgIT0gTlVMTCkgewotICAgICAgICBtcF9jbGVhcihuZXh0X21wKTsKLSAgICAgICAgbmV4dF9tcCA9IHZhX2FyZyhhcmdzLCBtcF9pbnQqKTsKLSAgICB9Ci0gICAgdmFfZW5kKGFyZ3MpOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfY2xlYXJfbXVsdGkuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfY21wLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0NNUF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjb21wYXJlIHR3byBpbnRzIChzaWduZWQpKi8KLWludAotbXBfY21wIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQotewotICAvKiBjb21wYXJlIGJhc2VkIG9uIHNpZ24gKi8KLSAgaWYgKGEtPnNpZ24gIT0gYi0+c2lnbikgewotICAgICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICAgICAgcmV0dXJuIE1QX0xUOwotICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTVBfR1Q7Ci0gICAgIH0KLSAgfQotICAKLSAgLyogY29tcGFyZSBkaWdpdHMgKi8KLSAgaWYgKGEtPnNpZ24gPT0gTVBfTkVHKSB7Ci0gICAgIC8qIGlmIG5lZ2F0aXZlIGNvbXBhcmUgb3Bwb3NpdGUgZGlyZWN0aW9uICovCi0gICAgIHJldHVybiBtcF9jbXBfbWFnKGIsIGEpOwotICB9IGVsc2UgewotICAgICByZXR1cm4gbXBfY21wX21hZyhhLCBiKTsKLSAgfQotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfY21wLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2NtcF9kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0NNUF9EX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGNvbXBhcmUgYSBkaWdpdCAqLwotaW50IG1wX2NtcF9kKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpCi17Ci0gIC8qIGNvbXBhcmUgYmFzZWQgb24gc2lnbiAqLwotICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICByZXR1cm4gTVBfTFQ7Ci0gIH0KLQotICAvKiBjb21wYXJlIGJhc2VkIG9uIG1hZ25pdHVkZSAqLwotICBpZiAoYS0+dXNlZCA+IDEpIHsKLSAgICByZXR1cm4gTVBfR1Q7Ci0gIH0KLQotICAvKiBjb21wYXJlIHRoZSBvbmx5IGRpZ2l0IG9mIGEgdG8gYiAqLwotICBpZiAoYS0+ZHBbMF0gPiBiKSB7Ci0gICAgcmV0dXJuIE1QX0dUOwotICB9IGVsc2UgaWYgKGEtPmRwWzBdIDwgYikgewotICAgIHJldHVybiBNUF9MVDsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTVBfRVE7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2NtcF9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2NtcF9tYWcuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfQ01QX01BR19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjb21wYXJlIG1hZ2luaXR1ZGUgb2YgdHdvIGludHMgKHVuc2lnbmVkKSAqLwotaW50IG1wX2NtcF9tYWcgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCi17Ci0gIGludCAgICAgbjsKLSAgbXBfZGlnaXQgKnRtcGEsICp0bXBiOwotCi0gIC8qIGNvbXBhcmUgYmFzZWQgb24gIyBvZiBub24temVybyBkaWdpdHMgKi8KLSAgaWYgKGEtPnVzZWQgPiBiLT51c2VkKSB7Ci0gICAgcmV0dXJuIE1QX0dUOwotICB9Ci0gIAotICBpZiAoYS0+dXNlZCA8IGItPnVzZWQpIHsKLSAgICByZXR1cm4gTVBfTFQ7Ci0gIH0KLQotICAvKiBhbGlhcyBmb3IgYSAqLwotICB0bXBhID0gYS0+ZHAgKyAoYS0+dXNlZCAtIDEpOwotCi0gIC8qIGFsaWFzIGZvciBiICovCi0gIHRtcGIgPSBiLT5kcCArIChhLT51c2VkIC0gMSk7Ci0KLSAgLyogY29tcGFyZSBiYXNlZCBvbiBkaWdpdHMgICovCi0gIGZvciAobiA9IDA7IG4gPCBhLT51c2VkOyArK24sIC0tdG1wYSwgLS10bXBiKSB7Ci0gICAgaWYgKCp0bXBhID4gKnRtcGIpIHsKLSAgICAgIHJldHVybiBNUF9HVDsKLSAgICB9Ci0KLSAgICBpZiAoKnRtcGEgPCAqdG1wYikgewotICAgICAgcmV0dXJuIE1QX0xUOwotICAgIH0KLSAgfQotICByZXR1cm4gTVBfRVE7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9jbXBfbWFnLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2NudF9sc2IuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfQ05UX0xTQl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi1zdGF0aWMgY29uc3QgaW50IGxuelsxNl0gPSB7IAotICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMAotfTsKLQotLyogQ291bnRzIHRoZSBudW1iZXIgb2YgbHNicyB3aGljaCBhcmUgemVybyBiZWZvcmUgdGhlIGZpcnN0IHplcm8gYml0ICovCi1pbnQgbXBfY250X2xzYihtcF9pbnQgKmEpCi17Ci0gICBpbnQgeDsKLSAgIG1wX2RpZ2l0IHEsIHFxOwotCi0gICAvKiBlYXN5IG91dCAqLwotICAgaWYgKG1wX2lzemVybyhhKSA9PSAxKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgIH0KLQotICAgLyogc2NhbiBsb3dlciBkaWdpdHMgdW50aWwgbm9uLXplcm8gKi8KLSAgIGZvciAoeCA9IDA7IHggPCBhLT51c2VkICYmIGEtPmRwW3hdID09IDA7IHgrKyk7Ci0gICBxID0gYS0+ZHBbeF07Ci0gICB4ICo9IERJR0lUX0JJVDsKLQotICAgLyogbm93IHNjYW4gdGhpcyBkaWdpdCB1bnRpbCBhIDEgaXMgZm91bmQgKi8KLSAgIGlmICgocSAmIDEpID09IDApIHsKLSAgICAgIGRvIHsKLSAgICAgICAgIHFxICA9IHEgJiAxNTsKLSAgICAgICAgIHggICs9IGxueltxcV07Ci0gICAgICAgICBxID4+PSA0OwotICAgICAgfSB3aGlsZSAocXEgPT0gMCk7Ci0gICB9Ci0gICByZXR1cm4geDsKLX0KLQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfY250X2xzYi5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9jb3B5LmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0NPUFlfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogY29weSwgYiA9IGEgKi8KLWludAotbXBfY29weSAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgaW50ICAgICByZXMsIG47Ci0KLSAgLyogaWYgZHN0ID09IHNyYyBkbyBub3RoaW5nICovCi0gIGlmIChhID09IGIpIHsKLSAgICByZXR1cm4gTVBfT0tBWTsKLSAgfQotCi0gIC8qIGdyb3cgZGVzdCAqLwotICBpZiAoYi0+YWxsb2MgPCBhLT51c2VkKSB7Ci0gICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYiwgYS0+dXNlZCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgfQotICB9Ci0KLSAgLyogemVybyBiIGFuZCBjb3B5IHRoZSBwYXJhbWV0ZXJzIG92ZXIgKi8KLSAgewotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBhLCAqdG1wYjsKLQotICAgIC8qIHBvaW50ZXIgYWxpYXNlcyAqLwotCi0gICAgLyogc291cmNlICovCi0gICAgdG1wYSA9IGEtPmRwOwotCi0gICAgLyogZGVzdGluYXRpb24gKi8KLSAgICB0bXBiID0gYi0+ZHA7Ci0KLSAgICAvKiBjb3B5IGFsbCB0aGUgZGlnaXRzICovCi0gICAgZm9yIChuID0gMDsgbiA8IGEtPnVzZWQ7IG4rKykgewotICAgICAgKnRtcGIrKyA9ICp0bXBhKys7Ci0gICAgfQotCi0gICAgLyogY2xlYXIgaGlnaCBkaWdpdHMgKi8KLSAgICBmb3IgKDsgbiA8IGItPnVzZWQ7IG4rKykgewotICAgICAgKnRtcGIrKyA9IDA7Ci0gICAgfQotICB9Ci0KLSAgLyogY29weSB1c2VkIGNvdW50IGFuZCBzaWduICovCi0gIGItPnVzZWQgPSBhLT51c2VkOwotICBiLT5zaWduID0gYS0+c2lnbjsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9jb3B5LmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2NvdW50X2JpdHMuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfQ09VTlRfQklUU19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhbiBpbnQgKi8KLWludAotbXBfY291bnRfYml0cyAobXBfaW50ICogYSkKLXsKLSAgaW50ICAgICByOwotICBtcF9kaWdpdCBxOwotCi0gIC8qIHNob3J0Y3V0ICovCi0gIGlmIChhLT51c2VkID09IDApIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIGdldCBudW1iZXIgb2YgZGlnaXRzIGFuZCBhZGQgdGhhdCAqLwotICByID0gKGEtPnVzZWQgLSAxKSAqIERJR0lUX0JJVDsKLSAgCi0gIC8qIHRha2UgdGhlIGxhc3QgZGlnaXQgYW5kIGNvdW50IHRoZSBiaXRzIGluIGl0ICovCi0gIHEgPSBhLT5kcFthLT51c2VkIC0gMV07Ci0gIHdoaWxlIChxID4gKChtcF9kaWdpdCkgMCkpIHsKLSAgICArK3I7Ci0gICAgcSA+Pj0gKChtcF9kaWdpdCkgMSk7Ci0gIH0KLSAgcmV0dXJuIHI7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9jb3VudF9iaXRzLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2Rpdi5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9ESVZfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotI2lmZGVmIEJOX01QX0RJVl9TTUFMTAotCi0vKiBzbG93ZXIgYml0LWJhbmcgZGl2aXNpb24uLi4gYWxzbyBzbWFsbGVyICovCi1pbnQgbXBfZGl2KG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCi17Ci0gICBtcF9pbnQgdGEsIHRiLCB0cSwgcTsKLSAgIGludCAgICByZXMsIG4sIG4yOwotCi0gIC8qIGlzIGRpdmlzb3IgemVybyA/ICovCi0gIGlmIChtcF9pc3plcm8gKGIpID09IDEpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogaWYgYSA8IGIgdGhlbiBxPTAsIHIgPSBhICovCi0gIGlmIChtcF9jbXBfbWFnIChhLCBiKSA9PSBNUF9MVCkgewotICAgIGlmIChkICE9IE5VTEwpIHsKLSAgICAgIHJlcyA9IG1wX2NvcHkgKGEsIGQpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXMgPSBNUF9PS0FZOwotICAgIH0KLSAgICBpZiAoYyAhPSBOVUxMKSB7Ci0gICAgICBtcF96ZXJvIChjKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCQotICAvKiBpbml0IG91ciB0ZW1wcyAqLwotICBpZiAoKHJlcyA9IG1wX2luaXRfbXVsdGkoJnRhLCAmdGIsICZ0cSwgJnEsIE5VTEwpICE9IE1QX09LQVkpKSB7Ci0gICAgIHJldHVybiByZXM7Ci0gIH0KLQotCi0gIG1wX3NldCgmdHEsIDEpOwotICBuID0gbXBfY291bnRfYml0cyhhKSAtIG1wX2NvdW50X2JpdHMoYik7Ci0gIGlmICgoKHJlcyA9IG1wX2FicyhhLCAmdGEpKSAhPSBNUF9PS0FZKSB8fAotICAgICAgKChyZXMgPSBtcF9hYnMoYiwgJnRiKSkgIT0gTVBfT0tBWSkgfHwgCi0gICAgICAoKHJlcyA9IG1wX211bF8yZCgmdGIsIG4sICZ0YikpICE9IE1QX09LQVkpIHx8Ci0gICAgICAoKHJlcyA9IG1wX211bF8yZCgmdHEsIG4sICZ0cSkpICE9IE1QX09LQVkpKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gIH0KLQotICB3aGlsZSAobi0tID49IDApIHsKLSAgICAgaWYgKG1wX2NtcCgmdGIsICZ0YSkgIT0gTVBfR1QpIHsKLSAgICAgICAgaWYgKCgocmVzID0gbXBfc3ViKCZ0YSwgJnRiLCAmdGEpKSAhPSBNUF9PS0FZKSB8fAotICAgICAgICAgICAgKChyZXMgPSBtcF9hZGQoJnEsICZ0cSwgJnEpKSAhPSBNUF9PS0FZKSkgewotICAgICAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgICAgIH0KLSAgICAgfQotICAgICBpZiAoKChyZXMgPSBtcF9kaXZfMmQoJnRiLCAxLCAmdGIsIE5VTEwpKSAhPSBNUF9PS0FZKSB8fAotICAgICAgICAgKChyZXMgPSBtcF9kaXZfMmQoJnRxLCAxLCAmdHEsIE5VTEwpKSAhPSBNUF9PS0FZKSkgewotICAgICAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgIH0KLSAgfQotCi0gIC8qIG5vdyBxID09IHF1b3RpZW50IGFuZCB0YSA9PSByZW1haW5kZXIgKi8KLSAgbiAgPSBhLT5zaWduOwotICBuMiA9IChhLT5zaWduID09IGItPnNpZ24gPyBNUF9aUE9TIDogTVBfTkVHKTsKLSAgaWYgKGMgIT0gTlVMTCkgewotICAgICBtcF9leGNoKGMsICZxKTsKLSAgICAgYy0+c2lnbiAgPSAobXBfaXN6ZXJvKGMpID09IE1QX1lFUykgPyBNUF9aUE9TIDogbjI7Ci0gIH0KLSAgaWYgKGQgIT0gTlVMTCkgewotICAgICBtcF9leGNoKGQsICZ0YSk7Ci0gICAgIGQtPnNpZ24gPSAobXBfaXN6ZXJvKGQpID09IE1QX1lFUykgPyBNUF9aUE9TIDogbjsKLSAgfQotTEJMX0VSUjoKLSAgIG1wX2NsZWFyX211bHRpKCZ0YSwgJnRiLCAmdHEsICZxLCBOVUxMKTsKLSAgIHJldHVybiByZXM7Ci19Ci0KLSNlbHNlCi0KLS8qIGludGVnZXIgc2lnbmVkIGRpdmlzaW9uLiAKLSAqIGMqYiArIGQgPT0gYSBbZS5nLiBhL2IsIGM9cXVvdGllbnQsIGQ9cmVtYWluZGVyXQotICogSEFDIHBwLjU5OCBBbGdvcml0aG0gMTQuMjAKLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGRlc2NyaXB0aW9uIGluIEhBQyBpcyBob3JyaWJseSAKLSAqIGluY29tcGxldGUuICBGb3IgZXhhbXBsZSwgaXQgZG9lc24ndCBjb25zaWRlciAKLSAqIHRoZSBjYXNlIHdoZXJlIGRpZ2l0cyBhcmUgcmVtb3ZlZCBmcm9tICd4JyBpbiAKLSAqIHRoZSBpbm5lciBsb29wLiAgSXQgYWxzbyBkb2Vzbid0IGNvbnNpZGVyIHRoZSAKLSAqIGNhc2UgdGhhdCB5IGhhcyBmZXdlciB0aGFuIHRocmVlIGRpZ2l0cywgZXRjLi4KLSAqCi0gKiBUaGUgb3ZlcmFsbCBhbGdvcml0aG0gaXMgYXMgZGVzY3JpYmVkIGFzIAotICogMTQuMjAgZnJvbSBIQUMgYnV0IGZpeGVkIHRvIHRyZWF0IHRoZXNlIGNhc2VzLgotKi8KLWludCBtcF9kaXYgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCi17Ci0gIG1wX2ludCAgcSwgeCwgeSwgdDEsIHQyOwotICBpbnQgICAgIHJlcywgbiwgdCwgaSwgbm9ybSwgbmVnOwotCi0gIC8qIGlzIGRpdmlzb3IgemVybyA/ICovCi0gIGlmIChtcF9pc3plcm8gKGIpID09IDEpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogaWYgYSA8IGIgdGhlbiBxPTAsIHIgPSBhICovCi0gIGlmIChtcF9jbXBfbWFnIChhLCBiKSA9PSBNUF9MVCkgewotICAgIGlmIChkICE9IE5VTEwpIHsKLSAgICAgIHJlcyA9IG1wX2NvcHkgKGEsIGQpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXMgPSBNUF9PS0FZOwotICAgIH0KLSAgICBpZiAoYyAhPSBOVUxMKSB7Ci0gICAgICBtcF96ZXJvIChjKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfaW5pdF9zaXplICgmcSwgYS0+dXNlZCArIDIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotICBxLnVzZWQgPSBhLT51c2VkICsgMjsKLQotICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0MSkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9ROwotICB9Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfVDE7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJngsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfVDI7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnksIGIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfWDsKLSAgfQotCi0gIC8qIGZpeCB0aGUgc2lnbiAqLwotICBuZWcgPSAoYS0+c2lnbiA9PSBiLT5zaWduKSA/IE1QX1pQT1MgOiBNUF9ORUc7Ci0gIHguc2lnbiA9IHkuc2lnbiA9IE1QX1pQT1M7Ci0KLSAgLyogbm9ybWFsaXplIGJvdGggeCBhbmQgeSwgZW5zdXJlIHRoYXQgeSA+PSBiLzIsIFtiID09IDIqKkRJR0lUX0JJVF0gKi8KLSAgbm9ybSA9IG1wX2NvdW50X2JpdHMoJnkpICUgRElHSVRfQklUOwotICBpZiAobm9ybSA8IChpbnQpKERJR0lUX0JJVC0xKSkgewotICAgICBub3JtID0gKERJR0lUX0JJVC0xKSAtIG5vcm07Ci0gICAgIGlmICgocmVzID0gbXBfbXVsXzJkICgmeCwgbm9ybSwgJngpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBMQkxfWTsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX211bF8yZCAoJnksIG5vcm0sICZ5KSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gTEJMX1k7Ci0gICAgIH0KLSAgfSBlbHNlIHsKLSAgICAgbm9ybSA9IDA7Ci0gIH0KLQotICAvKiBub3RlIGhhYyBkb2VzIDAgYmFzZWQsIHNvIGlmIHVzZWQ9PTUgdGhlbiBpdHMgMCwxLDIsMyw0LCBlLmcuIHVzZSA0ICovCi0gIG4gPSB4LnVzZWQgLSAxOwotICB0ID0geS51c2VkIC0gMTsKLQotICAvKiB3aGlsZSAoeCA+PSB5KmIqKm4tdCkgZG8geyBxW24tdF0gKz0gMTsgeCAtPSB5KmIqKntuLXR9IH0gKi8KLSAgaWYgKChyZXMgPSBtcF9sc2hkICgmeSwgbiAtIHQpKSAhPSBNUF9PS0FZKSB7IC8qIHkgPSB5KmIqKntuLXR9ICovCi0gICAgZ290byBMQkxfWTsKLSAgfQotCi0gIHdoaWxlIChtcF9jbXAgKCZ4LCAmeSkgIT0gTVBfTFQpIHsKLSAgICArKyhxLmRwW24gLSB0XSk7Ci0gICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ4LCAmeSwgJngpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9ZOwotICAgIH0KLSAgfQotCi0gIC8qIHJlc2V0IHkgYnkgc2hpZnRpbmcgaXQgYmFjayBkb3duICovCi0gIG1wX3JzaGQgKCZ5LCBuIC0gdCk7Ci0KLSAgLyogc3RlcCAzLiBmb3IgaSBmcm9tIG4gZG93biB0byAodCArIDEpICovCi0gIGZvciAoaSA9IG47IGkgPj0gKHQgKyAxKTsgaS0tKSB7Ci0gICAgaWYgKGkgPiB4LnVzZWQpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIHN0ZXAgMy4xIGlmIHhpID09IHl0IHRoZW4gc2V0IHF7aS10LTF9IHRvIGItMSwgCi0gICAgICogb3RoZXJ3aXNlIHNldCBxe2ktdC0xfSB0byAoeGkqYiArIHh7aS0xfSkveXQgKi8KLSAgICBpZiAoeC5kcFtpXSA9PSB5LmRwW3RdKSB7Ci0gICAgICBxLmRwW2kgLSB0IC0gMV0gPSAoKCgobXBfZGlnaXQpMSkgPDwgRElHSVRfQklUKSAtIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtcF93b3JkIHRtcDsKLSAgICAgIHRtcCA9ICgobXBfd29yZCkgeC5kcFtpXSkgPDwgKChtcF93b3JkKSBESUdJVF9CSVQpOwotICAgICAgdG1wIHw9ICgobXBfd29yZCkgeC5kcFtpIC0gMV0pOwotICAgICAgdG1wIC89ICgobXBfd29yZCkgeS5kcFt0XSk7Ci0gICAgICBpZiAodG1wID4gKG1wX3dvcmQpIE1QX01BU0spCi0gICAgICAgIHRtcCA9IE1QX01BU0s7Ci0gICAgICBxLmRwW2kgLSB0IC0gMV0gPSAobXBfZGlnaXQpICh0bXAgJiAobXBfd29yZCkgKE1QX01BU0spKTsKLSAgICB9Ci0KLSAgICAvKiB3aGlsZSAocXtpLXQtMX0gKiAoeXQgKiBiICsgeXt0LTF9KSkgPiAKLSAgICAgICAgICAgICB4aSAqIGIqKjIgKyB4aS0xICogYiArIHhpLTIgCi0gICAgIAotICAgICAgIGRvIHF7aS10LTF9IC09IDE7IAotICAgICovCi0gICAgcS5kcFtpIC0gdCAtIDFdID0gKHEuZHBbaSAtIHQgLSAxXSArIDEpICYgTVBfTUFTSzsKLSAgICBkbyB7Ci0gICAgICBxLmRwW2kgLSB0IC0gMV0gPSAocS5kcFtpIC0gdCAtIDFdIC0gMSkgJiBNUF9NQVNLOwotCi0gICAgICAvKiBmaW5kIGxlZnQgaGFuZCAqLwotICAgICAgbXBfemVybyAoJnQxKTsKLSAgICAgIHQxLmRwWzBdID0gKHQgLSAxIDwgMCkgPyAwIDogeS5kcFt0IC0gMV07Ci0gICAgICB0MS5kcFsxXSA9IHkuZHBbdF07Ci0gICAgICB0MS51c2VkID0gMjsKLSAgICAgIGlmICgocmVzID0gbXBfbXVsX2QgKCZ0MSwgcS5kcFtpIC0gdCAtIDFdLCAmdDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1k7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGZpbmQgcmlnaHQgaGFuZCAqLwotICAgICAgdDIuZHBbMF0gPSAoaSAtIDIgPCAwKSA/IDAgOiB4LmRwW2kgLSAyXTsKLSAgICAgIHQyLmRwWzFdID0gKGkgLSAxIDwgMCkgPyAwIDogeC5kcFtpIC0gMV07Ci0gICAgICB0Mi5kcFsyXSA9IHguZHBbaV07Ci0gICAgICB0Mi51c2VkID0gMzsKLSAgICB9IHdoaWxlIChtcF9jbXBfbWFnKCZ0MSwgJnQyKSA9PSBNUF9HVCk7Ci0KLSAgICAvKiBzdGVwIDMuMyB4ID0geCAtIHF7aS10LTF9ICogeSAqIGIqKntpLXQtMX0gKi8KLSAgICBpZiAoKHJlcyA9IG1wX211bF9kICgmeSwgcS5kcFtpIC0gdCAtIDFdLCAmdDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9ZOwotICAgIH0KLQotICAgIGlmICgocmVzID0gbXBfbHNoZCAoJnQxLCBpIC0gdCAtIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9ZOwotICAgIH0KLQotICAgIGlmICgocmVzID0gbXBfc3ViICgmeCwgJnQxLCAmeCkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX1k7Ci0gICAgfQotCi0gICAgLyogaWYgeCA8IDAgdGhlbiB7IHggPSB4ICsgeSpiKip7aS10LTF9OyBxe2ktdC0xfSAtPSAxOyB9ICovCi0gICAgaWYgKHguc2lnbiA9PSBNUF9ORUcpIHsKLSAgICAgIGlmICgocmVzID0gbXBfY29weSAoJnksICZ0MSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfWTsKLSAgICAgIH0KLSAgICAgIGlmICgocmVzID0gbXBfbHNoZCAoJnQxLCBpIC0gdCAtIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1k7Ci0gICAgICB9Ci0gICAgICBpZiAoKHJlcyA9IG1wX2FkZCAoJngsICZ0MSwgJngpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1k7Ci0gICAgICB9Ci0KLSAgICAgIHEuZHBbaSAtIHQgLSAxXSA9IChxLmRwW2kgLSB0IC0gMV0gLSAxVUwpICYgTVBfTUFTSzsKLSAgICB9Ci0gIH0KLQotICAvKiBub3cgcSBpcyB0aGUgcXVvdGllbnQgYW5kIHggaXMgdGhlIHJlbWFpbmRlciAKLSAgICogW3doaWNoIHdlIGhhdmUgdG8gbm9ybWFsaXplXSAKLSAgICovCi0gIAotICAvKiBnZXQgc2lnbiBiZWZvcmUgd3JpdGluZyB0byBjICovCi0gIHguc2lnbiA9IHgudXNlZCA9PSAwID8gTVBfWlBPUyA6IGEtPnNpZ247Ci0KLSAgaWYgKGMgIT0gTlVMTCkgewotICAgIG1wX2NsYW1wICgmcSk7Ci0gICAgbXBfZXhjaCAoJnEsIGMpOwotICAgIGMtPnNpZ24gPSBuZWc7Ci0gIH0KLQotICBpZiAoZCAhPSBOVUxMKSB7Ci0gICAgbXBfZGl2XzJkICgmeCwgbm9ybSwgJngsIE5VTEwpOwotICAgIG1wX2V4Y2ggKCZ4LCBkKTsKLSAgfQotCi0gIHJlcyA9IE1QX09LQVk7Ci0KLUxCTF9ZOm1wX2NsZWFyICgmeSk7Ci1MQkxfWDptcF9jbGVhciAoJngpOwotTEJMX1QyOm1wX2NsZWFyICgmdDIpOwotTEJMX1QxOm1wX2NsZWFyICgmdDEpOwotTEJMX1E6bXBfY2xlYXIgKCZxKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2Rpdi5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9kaXZfMi5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9ESVZfMl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBiID0gYS8yICovCi1pbnQgbXBfZGl2XzIobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgaW50ICAgICB4LCByZXMsIG9sZHVzZWQ7Ci0KLSAgLyogY29weSAqLwotICBpZiAoYi0+YWxsb2MgPCBhLT51c2VkKSB7Ci0gICAgaWYgKChyZXMgPSBtcF9ncm93IChiLCBhLT51c2VkKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gIH0KLQotICBvbGR1c2VkID0gYi0+dXNlZDsKLSAgYi0+dXNlZCA9IGEtPnVzZWQ7Ci0gIHsKLSAgICByZWdpc3RlciBtcF9kaWdpdCByLCByciwgKnRtcGEsICp0bXBiOwotCi0gICAgLyogc291cmNlIGFsaWFzICovCi0gICAgdG1wYSA9IGEtPmRwICsgYi0+dXNlZCAtIDE7Ci0KLSAgICAvKiBkZXN0IGFsaWFzICovCi0gICAgdG1wYiA9IGItPmRwICsgYi0+dXNlZCAtIDE7Ci0KLSAgICAvKiBjYXJyeSAqLwotICAgIHIgPSAwOwotICAgIGZvciAoeCA9IGItPnVzZWQgLSAxOyB4ID49IDA7IHgtLSkgewotICAgICAgLyogZ2V0IHRoZSBjYXJyeSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uICovCi0gICAgICByciA9ICp0bXBhICYgMTsKLQotICAgICAgLyogc2hpZnQgdGhlIGN1cnJlbnQgZGlnaXQsIGFkZCBpbiBjYXJyeSBhbmQgc3RvcmUgKi8KLSAgICAgICp0bXBiLS0gPSAoKnRtcGEtLSA+PiAxKSB8IChyIDw8IChESUdJVF9CSVQgLSAxKSk7Ci0KLSAgICAgIC8qIGZvcndhcmQgY2FycnkgdG8gbmV4dCBpdGVyYXRpb24gKi8KLSAgICAgIHIgPSBycjsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvIGV4Y2VzcyBkaWdpdHMgKi8KLSAgICB0bXBiID0gYi0+ZHAgKyBiLT51c2VkOwotICAgIGZvciAoeCA9IGItPnVzZWQ7IHggPCBvbGR1c2VkOyB4KyspIHsKLSAgICAgICp0bXBiKysgPSAwOwotICAgIH0KLSAgfQotICBiLT5zaWduID0gYS0+c2lnbjsKLSAgbXBfY2xhbXAgKGIpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2Rpdl8yLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2Rpdl8yZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9ESVZfMkRfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc2hpZnQgcmlnaHQgYnkgYSBjZXJ0YWluIGJpdCBjb3VudCAoc3RvcmUgcXVvdGllbnQgaW4gYywgb3B0aW9uYWwgcmVtYWluZGVyIGluIGQpICovCi1pbnQgbXBfZGl2XzJkIChtcF9pbnQgKiBhLCBpbnQgYiwgbXBfaW50ICogYywgbXBfaW50ICogZCkKLXsKLSAgbXBfZGlnaXQgRCwgciwgcnI7Ci0gIGludCAgICAgeCwgcmVzOwotICBtcF9pbnQgIHQ7Ci0KLQotICAvKiBpZiB0aGUgc2hpZnQgY291bnQgaXMgPD0gMCB0aGVuIHdlIGRvIG5vIHdvcmsgKi8KLSAgaWYgKGIgPD0gMCkgewotICAgIHJlcyA9IG1wX2NvcHkgKGEsIGMpOwotICAgIGlmIChkICE9IE5VTEwpIHsKLSAgICAgIG1wX3plcm8gKGQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgLyogZ2V0IHRoZSByZW1haW5kZXIgKi8KLSAgaWYgKGQgIT0gTlVMTCkgewotICAgIGlmICgocmVzID0gbXBfbW9kXzJkIChhLCBiLCAmdCkpICE9IE1QX09LQVkpIHsKLSAgICAgIG1wX2NsZWFyICgmdCk7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgfQotCi0gIC8qIGNvcHkgKi8KLSAgaWYgKChyZXMgPSBtcF9jb3B5IChhLCBjKSkgIT0gTVBfT0tBWSkgewotICAgIG1wX2NsZWFyICgmdCk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIHNoaWZ0IGJ5IGFzIG1hbnkgZGlnaXRzIGluIHRoZSBiaXQgY291bnQgKi8KLSAgaWYgKGIgPj0gKGludClESUdJVF9CSVQpIHsKLSAgICBtcF9yc2hkIChjLCBiIC8gRElHSVRfQklUKTsKLSAgfQotCi0gIC8qIHNoaWZ0IGFueSBiaXQgY291bnQgPCBESUdJVF9CSVQgKi8KLSAgRCA9IChtcF9kaWdpdCkgKGIgJSBESUdJVF9CSVQpOwotICBpZiAoRCAhPSAwKSB7Ci0gICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRtcGMsIG1hc2ssIHNoaWZ0OwotCi0gICAgLyogbWFzayAqLwotICAgIG1hc2sgPSAoKChtcF9kaWdpdCkxKSA8PCBEKSAtIDE7Ci0KLSAgICAvKiBzaGlmdCBmb3IgbHNiICovCi0gICAgc2hpZnQgPSBESUdJVF9CSVQgLSBEOwotCi0gICAgLyogYWxpYXMgKi8KLSAgICB0bXBjID0gYy0+ZHAgKyAoYy0+dXNlZCAtIDEpOwotCi0gICAgLyogY2FycnkgKi8KLSAgICByID0gMDsKLSAgICBmb3IgKHggPSBjLT51c2VkIC0gMTsgeCA+PSAwOyB4LS0pIHsKLSAgICAgIC8qIGdldCB0aGUgbG93ZXIgIGJpdHMgb2YgdGhpcyB3b3JkIGluIGEgdGVtcCAqLwotICAgICAgcnIgPSAqdG1wYyAmIG1hc2s7Ci0KLSAgICAgIC8qIHNoaWZ0IHRoZSBjdXJyZW50IHdvcmQgYW5kIG1peCBpbiB0aGUgY2FycnkgYml0cyBmcm9tIHRoZSBwcmV2aW91cyB3b3JkICovCi0gICAgICAqdG1wYyA9ICgqdG1wYyA+PiBEKSB8IChyIDw8IHNoaWZ0KTsKLSAgICAgIC0tdG1wYzsKLQotICAgICAgLyogc2V0IHRoZSBjYXJyeSB0byB0aGUgY2FycnkgYml0cyBvZiB0aGUgY3VycmVudCB3b3JkIGZvdW5kIGFib3ZlICovCi0gICAgICByID0gcnI7Ci0gICAgfQotICB9Ci0gIG1wX2NsYW1wIChjKTsKLSAgaWYgKGQgIT0gTlVMTCkgewotICAgIG1wX2V4Y2ggKCZ0LCBkKTsKLSAgfQotICBtcF9jbGVhciAoJnQpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2Rpdl8yZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9kaXZfMy5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9ESVZfM19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBkaXZpZGUgYnkgdGhyZWUgKGJhc2VkIG9uIHJvdXRpbmUgZnJvbSBNUEkgYW5kIHRoZSBHTVAgbWFudWFsKSAqLwotaW50Ci1tcF9kaXZfMyAobXBfaW50ICogYSwgbXBfaW50ICpjLCBtcF9kaWdpdCAqIGQpCi17Ci0gIG1wX2ludCAgIHE7Ci0gIG1wX3dvcmQgIHcsIHQ7Ci0gIG1wX2RpZ2l0IGI7Ci0gIGludCAgICAgIHJlcywgaXg7Ci0gIAotICAvKiBiID0gMioqRElHSVRfQklUIC8gMyAqLwotICBiID0gKCgobXBfd29yZCkxKSA8PCAoKG1wX3dvcmQpRElHSVRfQklUKSkgLyAoKG1wX3dvcmQpMyk7Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUoJnEsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgIHJldHVybiByZXM7Ci0gIH0KLSAgCi0gIHEudXNlZCA9IGEtPnVzZWQ7Ci0gIHEuc2lnbiA9IGEtPnNpZ247Ci0gIHcgPSAwOwotICBmb3IgKGl4ID0gYS0+dXNlZCAtIDE7IGl4ID49IDA7IGl4LS0pIHsKLSAgICAgdyA9ICh3IDw8ICgobXBfd29yZClESUdJVF9CSVQpKSB8ICgobXBfd29yZClhLT5kcFtpeF0pOwotCi0gICAgIGlmICh3ID49IDMpIHsKLSAgICAgICAgLyogbXVsdGlwbHkgdyBieSBbMS8zXSAqLwotICAgICAgICB0ID0gKHcgKiAoKG1wX3dvcmQpYikpID4+ICgobXBfd29yZClESUdJVF9CSVQpOwotCi0gICAgICAgIC8qIG5vdyBzdWJ0cmFjdCAzICogW3cvM10gZnJvbSB3LCB0byBnZXQgdGhlIHJlbWFpbmRlciAqLwotICAgICAgICB3IC09IHQrdCt0OwotCi0gICAgICAgIC8qIGZpeHVwIHRoZSByZW1haW5kZXIgYXMgcmVxdWlyZWQgc2luY2UKLSAgICAgICAgICogdGhlIG9wdGltaXphdGlvbiBpcyBub3QgZXhhY3QuCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAodyA+PSAzKSB7Ci0gICAgICAgICAgIHQgKz0gMTsKLSAgICAgICAgICAgdyAtPSAzOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0ID0gMDsKLSAgICAgIH0KLSAgICAgIHEuZHBbaXhdID0gKG1wX2RpZ2l0KXQ7Ci0gIH0KLQotICAvKiBbb3B0aW9uYWxdIHN0b3JlIHRoZSByZW1haW5kZXIgKi8KLSAgaWYgKGQgIT0gTlVMTCkgewotICAgICAqZCA9IChtcF9kaWdpdCl3OwotICB9Ci0KLSAgLyogW29wdGlvbmFsXSBzdG9yZSB0aGUgcXVvdGllbnQgKi8KLSAgaWYgKGMgIT0gTlVMTCkgewotICAgICBtcF9jbGFtcCgmcSk7Ci0gICAgIG1wX2V4Y2goJnEsIGMpOwotICB9Ci0gIG1wX2NsZWFyKCZxKTsKLSAgCi0gIHJldHVybiByZXM7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2Rpdl8zLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2Rpdl9kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0RJVl9EX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLXN0YXRpYyBpbnQgc19pc19wb3dlcl9vZl90d28obXBfZGlnaXQgYiwgaW50ICpwKQotewotICAgaW50IHg7Ci0KLSAgIGZvciAoeCA9IDE7IHggPCBESUdJVF9CSVQ7IHgrKykgewotICAgICAgaWYgKGIgPT0gKCgobXBfZGlnaXQpMSk8PHgpKSB7Ci0gICAgICAgICAqcCA9IHg7Ci0gICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgIH0KLSAgIHJldHVybiAwOwotfQotCi0vKiBzaW5nbGUgZGlnaXQgZGl2aXNpb24gKGJhc2VkIG9uIHJvdXRpbmUgZnJvbSBNUEkpICovCi1pbnQgbXBfZGl2X2QgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqIGMsIG1wX2RpZ2l0ICogZCkKLXsKLSAgbXBfaW50ICBxOwotICBtcF93b3JkIHc7Ci0gIG1wX2RpZ2l0IHQ7Ci0gIGludCAgICAgcmVzLCBpeDsKLQotICAvKiBjYW5ub3QgZGl2aWRlIGJ5IHplcm8gKi8KLSAgaWYgKGIgPT0gMCkgewotICAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogcXVpY2sgb3V0cyAqLwotICBpZiAoYiA9PSAxIHx8IG1wX2lzemVybyhhKSA9PSAxKSB7Ci0gICAgIGlmIChkICE9IE5VTEwpIHsKLSAgICAgICAgKmQgPSAwOwotICAgICB9Ci0gICAgIGlmIChjICE9IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIG1wX2NvcHkoYSwgYyk7Ci0gICAgIH0KLSAgICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBwb3dlciBvZiB0d28gPyAqLwotICBpZiAoc19pc19wb3dlcl9vZl90d28oYiwgJml4KSA9PSAxKSB7Ci0gICAgIGlmIChkICE9IE5VTEwpIHsKLSAgICAgICAgKmQgPSBhLT5kcFswXSAmICgoKChtcF9kaWdpdCkxKTw8aXgpIC0gMSk7Ci0gICAgIH0KLSAgICAgaWYgKGMgIT0gTlVMTCkgewotICAgICAgICByZXR1cm4gbXBfZGl2XzJkKGEsIGl4LCBjLCBOVUxMKTsKLSAgICAgfQotICAgICByZXR1cm4gTVBfT0tBWTsKLSAgfQotCi0jaWZkZWYgQk5fTVBfRElWXzNfQwotICAvKiB0aHJlZT8gKi8KLSAgaWYgKGIgPT0gMykgewotICAgICByZXR1cm4gbXBfZGl2XzMoYSwgYywgZCk7Ci0gIH0KLSNlbmRpZgotCi0gIC8qIG5vIGVhc3kgYW5zd2VyIFtjJ2VzdCBsYSB2aWVdLiAgSnVzdCBkaXZpc2lvbiAqLwotICBpZiAoKHJlcyA9IG1wX2luaXRfc2l6ZSgmcSwgYS0+dXNlZCkpICE9IE1QX09LQVkpIHsKLSAgICAgcmV0dXJuIHJlczsKLSAgfQotICAKLSAgcS51c2VkID0gYS0+dXNlZDsKLSAgcS5zaWduID0gYS0+c2lnbjsKLSAgdyA9IDA7Ci0gIGZvciAoaXggPSBhLT51c2VkIC0gMTsgaXggPj0gMDsgaXgtLSkgewotICAgICB3ID0gKHcgPDwgKChtcF93b3JkKURJR0lUX0JJVCkpIHwgKChtcF93b3JkKWEtPmRwW2l4XSk7Ci0gICAgIAotICAgICBpZiAodyA+PSBiKSB7Ci0gICAgICAgIHQgPSAobXBfZGlnaXQpKHcgLyBiKTsKLSAgICAgICAgdyAtPSAoKG1wX3dvcmQpdCkgKiAoKG1wX3dvcmQpYik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0ID0gMDsKLSAgICAgIH0KLSAgICAgIHEuZHBbaXhdID0gKG1wX2RpZ2l0KXQ7Ci0gIH0KLSAgCi0gIGlmIChkICE9IE5VTEwpIHsKLSAgICAgKmQgPSAobXBfZGlnaXQpdzsKLSAgfQotICAKLSAgaWYgKGMgIT0gTlVMTCkgewotICAgICBtcF9jbGFtcCgmcSk7Ci0gICAgIG1wX2V4Y2goJnEsIGMpOwotICB9Ci0gIG1wX2NsZWFyKCZxKTsKLSAgCi0gIHJldHVybiByZXM7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2Rpdl9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2RyX2lzX21vZHVsdXMuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfRFJfSVNfTU9EVUxVU19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBkZXRlcm1pbmVzIGlmIGEgbnVtYmVyIGlzIGEgdmFsaWQgRFIgbW9kdWx1cyAqLwotaW50IG1wX2RyX2lzX21vZHVsdXMobXBfaW50ICphKQotewotICAgaW50IGl4OwotCi0gICAvKiBtdXN0IGJlIGF0IGxlYXN0IHR3byBkaWdpdHMgKi8KLSAgIGlmIChhLT51c2VkIDwgMikgewotICAgICAgcmV0dXJuIDA7Ci0gICB9Ci0KLSAgIC8qIG11c3QgYmUgb2YgdGhlIGZvcm0gYioqayAtIGEgW2EgPD0gYl0gc28gYWxsCi0gICAgKiBidXQgdGhlIGZpcnN0IGRpZ2l0IG11c3QgYmUgZXF1YWwgdG8gLTEgKG1vZCBiKS4KLSAgICAqLwotICAgZm9yIChpeCA9IDE7IGl4IDwgYS0+dXNlZDsgaXgrKykgewotICAgICAgIGlmIChhLT5kcFtpeF0gIT0gTVBfTUFTSykgewotICAgICAgICAgIHJldHVybiAwOwotICAgICAgIH0KLSAgIH0KLSAgIHJldHVybiAxOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9kcl9pc19tb2R1bHVzLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2RyX3JlZHVjZS5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9EUl9SRURVQ0VfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogcmVkdWNlICJ4IiBpbiBwbGFjZSBtb2R1bG8gIm4iIHVzaW5nIHRoZSBEaW1pbmlzaGVkIFJhZGl4IGFsZ29yaXRobS4KLSAqCi0gKiBCYXNlZCBvbiBhbGdvcml0aG0gZnJvbSB0aGUgcGFwZXIKLSAqCi0gKiAiR2VuZXJhdGluZyBFZmZpY2llbnQgUHJpbWVzIGZvciBEaXNjcmV0ZSBMb2cgQ3J5cHRvc3lzdGVtcyIKLSAqICAgICAgICAgICAgICAgICBDaGFlIEhvb24gTGltLCBQaWwgSm9vbmcgTGVlLAotICogICAgICAgICAgUE9TVEVDSCBJbmZvcm1hdGlvbiBSZXNlYXJjaCBMYWJvcmF0b3JpZXMKLSAqCi0gKiBUaGUgbW9kdWx1cyBtdXN0IGJlIG9mIGEgc3BlY2lhbCBmb3JtYXQgW3NlZSBtYW51YWxdCi0gKgotICogSGFzIGJlZW4gbW9kaWZpZWQgdG8gdXNlIGFsZ29yaXRobSA3LjEwIGZyb20gdGhlIExUTSBib29rIGluc3RlYWQKLSAqCi0gKiBJbnB1dCB4IG11c3QgYmUgaW4gdGhlIHJhbmdlIDAgPD0geCA8PSAobi0xKSoqMgotICovCi1pbnQKLW1wX2RyX3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbiwgbXBfZGlnaXQgaykKLXsKLSAgaW50ICAgICAgZXJyLCBpLCBtOwotICBtcF93b3JkICByOwotICBtcF9kaWdpdCBtdSwgKnRtcHgxLCAqdG1weDI7Ci0KLSAgLyogbSA9IGRpZ2l0cyBpbiBtb2R1bHVzICovCi0gIG0gPSBuLT51c2VkOwotCi0gIC8qIGVuc3VyZSB0aGF0ICJ4IiBoYXMgYXQgbGVhc3QgMm0gZGlnaXRzICovCi0gIGlmICh4LT5hbGxvYyA8IG0gKyBtKSB7Ci0gICAgaWYgKChlcnIgPSBtcF9ncm93ICh4LCBtICsgbSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICB9Ci0KLS8qIHRvcCBvZiBsb29wLCB0aGlzIGlzIHdoZXJlIHRoZSBjb2RlIHJlc3VtZXMgaWYKLSAqIGFub3RoZXIgcmVkdWN0aW9uIHBhc3MgaXMgcmVxdWlyZWQuCi0gKi8KLXRvcDoKLSAgLyogYWxpYXNlcyBmb3IgZGlnaXRzICovCi0gIC8qIGFsaWFzIGZvciBsb3dlciBoYWxmIG9mIHggKi8KLSAgdG1weDEgPSB4LT5kcDsKLQotICAvKiBhbGlhcyBmb3IgdXBwZXIgaGFsZiBvZiB4LCBvciB4L0IqKm0gKi8KLSAgdG1weDIgPSB4LT5kcCArIG07Ci0KLSAgLyogc2V0IGNhcnJ5IHRvIHplcm8gKi8KLSAgbXUgPSAwOwotCi0gIC8qIGNvbXB1dGUgKHggbW9kIEIqKm0pICsgayAqIFt4L0IqKm1dIGlubGluZSBhbmQgaW5wbGFjZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7Ci0gICAgICByICAgICAgICAgPSAoKG1wX3dvcmQpKnRtcHgyKyspICogKChtcF93b3JkKWspICsgKnRtcHgxICsgbXU7Ci0gICAgICAqdG1weDErKyAgPSAobXBfZGlnaXQpKHIgJiBNUF9NQVNLKTsKLSAgICAgIG11ICAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpRElHSVRfQklUKSk7Ci0gIH0KLQotICAvKiBzZXQgZmluYWwgY2FycnkgKi8KLSAgKnRtcHgxKysgPSBtdTsKLQotICAvKiB6ZXJvIHdvcmRzIGFib3ZlIG0gKi8KLSAgZm9yIChpID0gbSArIDE7IGkgPCB4LT51c2VkOyBpKyspIHsKLSAgICAgICp0bXB4MSsrID0gMDsKLSAgfQotCi0gIC8qIGNsYW1wLCBzdWIgYW5kIHJldHVybiAqLwotICBtcF9jbGFtcCAoeCk7Ci0KLSAgLyogaWYgeCA+PSBuIHRoZW4gc3VidHJhY3QgYW5kIHJlZHVjZSBhZ2FpbgotICAgKiBFYWNoIHN1Y2Nlc3NpdmUgInJlY3Vyc2lvbiIgbWFrZXMgdGhlIGlucHV0IHNtYWxsZXIgYW5kIHNtYWxsZXIuCi0gICAqLwotICBpZiAobXBfY21wX21hZyAoeCwgbikgIT0gTVBfTFQpIHsKLSAgICBzX21wX3N1Yih4LCBuLCB4KTsKLSAgICBnb3RvIHRvcDsKLSAgfQotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2RyX3JlZHVjZS5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9kcl9zZXR1cC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9EUl9TRVRVUF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBkZXRlcm1pbmVzIHRoZSBzZXR1cCB2YWx1ZSAqLwotdm9pZCBtcF9kcl9zZXR1cChtcF9pbnQgKmEsIG1wX2RpZ2l0ICpkKQotewotICAgLyogdGhlIGNhc3RzIGFyZSByZXF1aXJlZCBpZiBESUdJVF9CSVQgaXMgb25lIGxlc3MgdGhhbgotICAgICogdGhlIG51bWJlciBvZiBiaXRzIGluIGEgbXBfZGlnaXQgW2UuZy4gRElHSVRfQklUPT0zMV0KLSAgICAqLwotICAgKmQgPSAobXBfZGlnaXQpKCgoKG1wX3dvcmQpMSkgPDwgKChtcF93b3JkKURJR0lUX0JJVCkpIC0gCi0gICAgICAgICgobXBfd29yZClhLT5kcFswXSkpOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9kcl9zZXR1cC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9leGNoLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0VYQ0hfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc3dhcCB0aGUgZWxlbWVudHMgb2YgdHdvIGludGVnZXJzLCBmb3IgY2FzZXMgd2hlcmUgeW91IGNhbid0IHNpbXBseSBzd2FwIHRoZSAKLSAqIG1wX2ludCBwb2ludGVycyBhcm91bmQKLSAqLwotdm9pZAotbXBfZXhjaCAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgbXBfaW50ICB0OwotCi0gIHQgID0gKmE7Ci0gICphID0gKmI7Ci0gICpiID0gdDsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2V4Y2guYyAqLwotCi0vKiBTdGFydDogYm5fbXBfZXhwdF9kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0VYUFRfRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjYWxjdWxhdGUgYyA9IGEqKmIgIHVzaW5nIGEgc3F1YXJlLW11bHRpcGx5IGFsZ29yaXRobSAqLwotaW50IG1wX2V4cHRfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKLXsKLSAgaW50ICAgICByZXMsIHg7Ci0gIG1wX2ludCAgZzsKLQotICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJmcsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIHNldCBpbml0aWFsIHJlc3VsdCAqLwotICBtcF9zZXQgKGMsIDEpOwotCi0gIGZvciAoeCA9IDA7IHggPCAoaW50KSBESUdJVF9CSVQ7IHgrKykgewotICAgIC8qIHNxdWFyZSAqLwotICAgIGlmICgocmVzID0gbXBfc3FyIChjLCBjKSkgIT0gTVBfT0tBWSkgewotICAgICAgbXBfY2xlYXIgKCZnKTsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIGJpdCBpcyBzZXQgbXVsdGlwbHkgKi8KLSAgICBpZiAoKGIgJiAobXBfZGlnaXQpICgoKG1wX2RpZ2l0KTEpIDw8IChESUdJVF9CSVQgLSAxKSkpICE9IDApIHsKLSAgICAgIGlmICgocmVzID0gbXBfbXVsIChjLCAmZywgYykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgIG1wX2NsZWFyICgmZyk7Ci0gICAgICAgICByZXR1cm4gcmVzOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIHNoaWZ0IHRvIG5leHQgYml0ICovCi0gICAgYiA8PD0gMTsKLSAgfQotCi0gIG1wX2NsZWFyICgmZyk7Ci0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfZXhwdF9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2V4cHRtb2QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfRVhQVE1PRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0KLS8qIHRoaXMgaXMgYSBzaGVsbCBmdW5jdGlvbiB0aGF0IGNhbGxzIGVpdGhlciB0aGUgbm9ybWFsIG9yIE1vbnRnb21lcnkKLSAqIGV4cHRtb2QgZnVuY3Rpb25zLiAgT3JpZ2luYWxseSB0aGUgY2FsbCB0byB0aGUgbW9udGdvbWVyeSBjb2RlIHdhcwotICogZW1iZWRkZWQgaW4gdGhlIG5vcm1hbCBmdW5jdGlvbiBidXQgdGhhdCB3YXN0ZWQgYWxvdCBvZiBzdGFjayBzcGFjZQotICogZm9yIG5vdGhpbmcgKHNpbmNlIDk5JSBvZiB0aGUgdGltZSB0aGUgTW9udGdvbWVyeSBjb2RlIHdvdWxkIGJlIGNhbGxlZCkKLSAqLwotaW50IG1wX2V4cHRtb2QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFkpCi17Ci0gIGludCBkcjsKLQotICAvKiBtb2R1bHVzIFAgbXVzdCBiZSBwb3NpdGl2ZSAqLwotICBpZiAoUC0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICAgcmV0dXJuIE1QX1ZBTDsKLSAgfQotCi0gIC8qIGlmIGV4cG9uZW50IFggaXMgbmVnYXRpdmUgd2UgaGF2ZSB0byByZWN1cnNlICovCi0gIGlmIChYLT5zaWduID09IE1QX05FRykgewotI2lmZGVmIEJOX01QX0lOVk1PRF9DCi0gICAgIG1wX2ludCB0bXBHLCB0bXBYOwotICAgICBpbnQgZXJyOwotCi0gICAgIC8qIGZpcnN0IGNvbXB1dGUgMS9HIG1vZCBQICovCi0gICAgIGlmICgoZXJyID0gbXBfaW5pdCgmdG1wRykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgfQotICAgICBpZiAoKGVyciA9IG1wX2ludm1vZChHLCBQLCAmdG1wRykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgbXBfY2xlYXIoJnRtcEcpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgICB9Ci0KLSAgICAgLyogbm93IGdldCB8WHwgKi8KLSAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZ0bXBYKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBtcF9jbGVhcigmdG1wRyk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgIH0KLSAgICAgaWYgKChlcnIgPSBtcF9hYnMoWCwgJnRtcFgpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIG1wX2NsZWFyX211bHRpKCZ0bXBHLCAmdG1wWCwgTlVMTCk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgIH0KLQotICAgICAvKiBhbmQgbm93IGNvbXB1dGUgKDEvRykqKnxYfCBpbnN0ZWFkIG9mIEcqKlggW1ggPCAwXSAqLwotICAgICBlcnIgPSBtcF9leHB0bW9kKCZ0bXBHLCAmdG1wWCwgUCwgWSk7Ci0gICAgIG1wX2NsZWFyX211bHRpKCZ0bXBHLCAmdG1wWCwgTlVMTCk7Ci0gICAgIHJldHVybiBlcnI7Ci0jZWxzZSAKLSAgICAgLyogbm8gaW52bW9kICovCi0gICAgIHJldHVybiBNUF9WQUw7Ci0jZW5kaWYKLSAgfQotCi0vKiBtb2RpZmllZCBkaW1pbmlzaGVkIHJhZGl4IHJlZHVjdGlvbiAqLwotI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0lTXzJLX0xfQykgJiYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfTF9DKQotICBpZiAobXBfcmVkdWNlX2lzXzJrX2woUCkgPT0gTVBfWUVTKSB7Ci0gICAgIHJldHVybiBzX21wX2V4cHRtb2QoRywgWCwgUCwgWSwgMSk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgQk5fTVBfRFJfSVNfTU9EVUxVU19DCi0gIC8qIGlzIGl0IGEgRFIgbW9kdWx1cz8gKi8KLSAgZHIgPSBtcF9kcl9pc19tb2R1bHVzKFApOwotI2Vsc2UKLSAgLyogZGVmYXVsdCB0byBubyAqLwotICBkciA9IDA7Ci0jZW5kaWYKLQotI2lmZGVmIEJOX01QX1JFRFVDRV9JU18yS19DCi0gIC8qIGlmIG5vdCwgaXMgaXQgYSB1bnJlc3RyaWN0ZWQgRFIgbW9kdWx1cz8gKi8KLSAgaWYgKGRyID09IDApIHsKLSAgICAgZHIgPSBtcF9yZWR1Y2VfaXNfMmsoUCkgPDwgMTsKLSAgfQotI2VuZGlmCi0gICAgCi0gIC8qIGlmIHRoZSBtb2R1bHVzIGlzIG9kZCBvciBkciAhPSAwIHVzZSB0aGUgbW9udGdvbWVyeSBtZXRob2QgKi8KLSNpZmRlZiBCTl9NUF9FWFBUTU9EX0ZBU1RfQwotICBpZiAobXBfaXNvZGQgKFApID09IDEgfHwgZHIgIT0gIDApIHsKLSAgICByZXR1cm4gbXBfZXhwdG1vZF9mYXN0IChHLCBYLCBQLCBZLCBkcik7Ci0gIH0gZWxzZSB7Ci0jZW5kaWYKLSNpZmRlZiBCTl9TX01QX0VYUFRNT0RfQwotICAgIC8qIG90aGVyd2lzZSB1c2UgdGhlIGdlbmVyaWMgQmFycmV0dCByZWR1Y3Rpb24gdGVjaG5pcXVlICovCi0gICAgcmV0dXJuIHNfbXBfZXhwdG1vZCAoRywgWCwgUCwgWSwgMCk7Ci0jZWxzZQotICAgIC8qIG5vIGV4cHRtb2QgZm9yIGV2ZW5zICovCi0gICAgcmV0dXJuIE1QX1ZBTDsKLSNlbmRpZgotI2lmZGVmIEJOX01QX0VYUFRNT0RfRkFTVF9DCi0gIH0KLSNlbmRpZgotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9leHB0bW9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2V4cHRtb2RfZmFzdC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9FWFBUTU9EX0ZBU1RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogY29tcHV0ZXMgWSA9PSBHKipYIG1vZCBQLCBIQUMgcHAuNjE2LCBBbGdvcml0aG0gMTQuODUKLSAqCi0gKiBVc2VzIGEgbGVmdC10by1yaWdodCBrLWFyeSBzbGlkaW5nIHdpbmRvdyB0byBjb21wdXRlIHRoZSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uLgotICogVGhlIHZhbHVlIG9mIGsgY2hhbmdlcyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgZXhwb25lbnQuCi0gKgotICogVXNlcyBNb250Z29tZXJ5IG9yIERpbWluaXNoZWQgUmFkaXggcmVkdWN0aW9uIFt3aGljaGV2ZXIgYXBwcm9wcmlhdGVdCi0gKi8KLQotI2lmZGVmIE1QX0xPV19NRU0KLSAgICNkZWZpbmUgVEFCX1NJWkUgMzIKLSNlbHNlCi0gICAjZGVmaW5lIFRBQl9TSVpFIDI1NgotI2VuZGlmCi0KLWludCBtcF9leHB0bW9kX2Zhc3QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFksIGludCByZWRtb2RlKQotewotICBtcF9pbnQgIE1bVEFCX1NJWkVdLCByZXM7Ci0gIG1wX2RpZ2l0IGJ1ZiwgbXA7Ci0gIGludCAgICAgZXJyLCBiaXRidWYsIGJpdGNweSwgYml0Y250LCBtb2RlLCBkaWdpZHgsIHgsIHksIHdpbnNpemU7Ci0KLSAgLyogdXNlIGEgcG9pbnRlciB0byB0aGUgcmVkdWN0aW9uIGFsZ29yaXRobS4gIFRoaXMgYWxsb3dzIHVzIHRvIHVzZQotICAgKiBvbmUgb2YgbWFueSByZWR1Y3Rpb24gYWxnb3JpdGhtcyB3aXRob3V0IG1vZGRpbmcgdGhlIGd1dHMgb2YKLSAgICogdGhlIGNvZGUgd2l0aCBpZiBzdGF0ZW1lbnRzIGV2ZXJ5d2hlcmUuCi0gICAqLwotICBpbnQgICAgICgqcmVkdXgpKG1wX2ludCosbXBfaW50KixtcF9kaWdpdCk7Ci0KLSAgLyogZmluZCB3aW5kb3cgc2l6ZSAqLwotICB4ID0gbXBfY291bnRfYml0cyAoWCk7Ci0gIGlmICh4IDw9IDcpIHsKLSAgICB3aW5zaXplID0gMjsKLSAgfSBlbHNlIGlmICh4IDw9IDM2KSB7Ci0gICAgd2luc2l6ZSA9IDM7Ci0gIH0gZWxzZSBpZiAoeCA8PSAxNDApIHsKLSAgICB3aW5zaXplID0gNDsKLSAgfSBlbHNlIGlmICh4IDw9IDQ1MCkgewotICAgIHdpbnNpemUgPSA1OwotICB9IGVsc2UgaWYgKHggPD0gMTMwMykgewotICAgIHdpbnNpemUgPSA2OwotICB9IGVsc2UgaWYgKHggPD0gMzUyOSkgewotICAgIHdpbnNpemUgPSA3OwotICB9IGVsc2UgewotICAgIHdpbnNpemUgPSA4OwotICB9Ci0KLSNpZmRlZiBNUF9MT1dfTUVNCi0gIGlmICh3aW5zaXplID4gNSkgewotICAgICB3aW5zaXplID0gNTsKLSAgfQotI2VuZGlmCi0KLSAgLyogaW5pdCBNIGFycmF5ICovCi0gIC8qIGluaXQgZmlyc3QgY2VsbCAqLwotICBpZiAoKGVyciA9IG1wX2luaXQoJk1bMV0pKSAhPSBNUF9PS0FZKSB7Ci0gICAgIHJldHVybiBlcnI7Ci0gIH0KLQotICAvKiBub3cgaW5pdCB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGFycmF5ICovCi0gIGZvciAoeCA9IDE8PCh3aW5zaXplLTEpOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgewotICAgIGlmICgoZXJyID0gbXBfaW5pdCgmTVt4XSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGZvciAoeSA9IDE8PCh3aW5zaXplLTEpOyB5IDwgeDsgeSsrKSB7Ci0gICAgICAgIG1wX2NsZWFyICgmTVt5XSk7Ci0gICAgICB9Ci0gICAgICBtcF9jbGVhcigmTVsxXSk7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0KLSAgfQotCi0gIC8qIGRldGVybWluZSBhbmQgc2V0dXAgcmVkdWN0aW9uIGNvZGUgKi8KLSAgaWYgKHJlZG1vZGUgPT0gMCkgewotI2lmZGVmIEJOX01QX01PTlRHT01FUllfU0VUVVBfQyAgICAgCi0gICAgIC8qIG5vdyBzZXR1cCBtb250Z29tZXJ5ICAqLwotICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAgKFAsICZtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfTTsKLSAgICAgfQotI2Vsc2UKLSAgICAgZXJyID0gTVBfVkFMOwotICAgICBnb3RvIExCTF9NOwotI2VuZGlmCi0KLSAgICAgLyogYXV0b21hdGljYWxseSBwaWNrIHRoZSBjb21iYSBvbmUgaWYgYXZhaWxhYmxlIChzYXZlcyBxdWl0ZSBhIGZldyBjYWxscy9pZnMpICovCi0jaWZkZWYgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCi0gICAgIGlmICgoKFAtPnVzZWQgKiAyICsgMSkgPCBNUF9XQVJSQVkpICYmCi0gICAgICAgICAgUC0+dXNlZCA8ICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7Ci0gICAgICAgIHJlZHV4ID0gZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZTsKLSAgICAgfSBlbHNlIAotI2VuZGlmCi0gICAgIHsKLSNpZmRlZiBCTl9NUF9NT05UR09NRVJZX1JFRFVDRV9DCi0gICAgICAgIC8qIHVzZSBzbG93ZXIgYmFzZWxpbmUgTW9udGdvbWVyeSBtZXRob2QgKi8KLSAgICAgICAgcmVkdXggPSBtcF9tb250Z29tZXJ5X3JlZHVjZTsKLSNlbHNlCi0gICAgICAgIGVyciA9IE1QX1ZBTDsKLSAgICAgICAgZ290byBMQkxfTTsKLSNlbmRpZgotICAgICB9Ci0gIH0gZWxzZSBpZiAocmVkbW9kZSA9PSAxKSB7Ci0jaWYgZGVmaW5lZChCTl9NUF9EUl9TRVRVUF9DKSAmJiBkZWZpbmVkKEJOX01QX0RSX1JFRFVDRV9DKQotICAgICAvKiBzZXR1cCBEUiByZWR1Y3Rpb24gZm9yIG1vZHVsaSBvZiB0aGUgZm9ybSBCKiprIC0gYiAqLwotICAgICBtcF9kcl9zZXR1cChQLCAmbXApOwotICAgICByZWR1eCA9IG1wX2RyX3JlZHVjZTsKLSNlbHNlCi0gICAgIGVyciA9IE1QX1ZBTDsKLSAgICAgZ290byBMQkxfTTsKLSNlbmRpZgotICB9IGVsc2UgewotI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MpICYmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX0MpCi0gICAgIC8qIHNldHVwIERSIHJlZHVjdGlvbiBmb3IgbW9kdWxpIG9mIHRoZSBmb3JtIDIqKmsgLSBiICovCi0gICAgIGlmICgoZXJyID0gbXBfcmVkdWNlXzJrX3NldHVwKFAsICZtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfTTsKLSAgICAgfQotICAgICByZWR1eCA9IG1wX3JlZHVjZV8yazsKLSNlbHNlCi0gICAgIGVyciA9IE1QX1ZBTDsKLSAgICAgZ290byBMQkxfTTsKLSNlbmRpZgotICB9Ci0KLSAgLyogc2V0dXAgcmVzdWx0ICovCi0gIGlmICgoZXJyID0gbXBfaW5pdCAoJnJlcykpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9NOwotICB9Ci0KLSAgLyogY3JlYXRlIE0gdGFibGUKLSAgICoKLQotICAgKgotICAgKiBUaGUgZmlyc3QgaGFsZiBvZiB0aGUgdGFibGUgaXMgbm90IGNvbXB1dGVkIHRob3VnaCBhY2NlcHQgZm9yIE1bMF0gYW5kIE1bMV0KLSAgICovCi0KLSAgaWYgKHJlZG1vZGUgPT0gMCkgewotI2lmZGVmIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKLSAgICAgLyogbm93IHdlIG5lZWQgUiBtb2QgbSAqLwotICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uICgmcmVzLCBQKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICAgfQotI2Vsc2UgCi0gICAgIGVyciA9IE1QX1ZBTDsKLSAgICAgZ290byBMQkxfUkVTOwotI2VuZGlmCi0KLSAgICAgLyogbm93IHNldCBNWzFdIHRvIEcgKiBSIG1vZCBtICovCi0gICAgIGlmICgoZXJyID0gbXBfbXVsbW9kIChHLCAmcmVzLCBQLCAmTVsxXSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgIH0KLSAgfSBlbHNlIHsKLSAgICAgbXBfc2V0KCZyZXMsIDEpOwotICAgICBpZiAoKGVyciA9IG1wX21vZChHLCBQLCAmTVsxXSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfUkVTOwotICAgICB9Ci0gIH0KLQotICAvKiBjb21wdXRlIHRoZSB2YWx1ZSBhdCBNWzE8PCh3aW5zaXplLTEpXSBieSBzcXVhcmluZyBNWzFdICh3aW5zaXplLTEpIHRpbWVzICovCi0gIGlmICgoZXJyID0gbXBfY29weSAoJk1bMV0sICZNWzEgPDwgKHdpbnNpemUgLSAxKV0pKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfUkVTOwotICB9Ci0KLSAgZm9yICh4ID0gMDsgeCA8ICh3aW5zaXplIC0gMSk7IHgrKykgewotICAgIGlmICgoZXJyID0gbXBfc3FyICgmTVsxIDw8ICh3aW5zaXplIC0gMSldLCAmTVsxIDw8ICh3aW5zaXplIC0gMSldKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfUkVTOwotICAgIH0KLSAgICBpZiAoKGVyciA9IHJlZHV4ICgmTVsxIDw8ICh3aW5zaXplIC0gMSldLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICB9Ci0gIH0KLQotICAvKiBjcmVhdGUgdXBwZXIgdGFibGUgKi8KLSAgZm9yICh4ID0gKDEgPDwgKHdpbnNpemUgLSAxKSkgKyAxOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgewotICAgIGlmICgoZXJyID0gbXBfbXVsICgmTVt4IC0gMV0sICZNWzFdLCAmTVt4XSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICB9Ci0gICAgaWYgKChlcnIgPSByZWR1eCAoJk1beF0sIFAsIG1wKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfUkVTOwotICAgIH0KLSAgfQotCi0gIC8qIHNldCBpbml0aWFsIG1vZGUgYW5kIGJpdCBjbnQgKi8KLSAgbW9kZSAgID0gMDsKLSAgYml0Y250ID0gMTsKLSAgYnVmICAgID0gMDsKLSAgZGlnaWR4ID0gWC0+dXNlZCAtIDE7Ci0gIGJpdGNweSA9IDA7Ci0gIGJpdGJ1ZiA9IDA7Ci0KLSAgZm9yICg7OykgewotICAgIC8qIGdyYWIgbmV4dCBkaWdpdCBhcyByZXF1aXJlZCAqLwotICAgIGlmICgtLWJpdGNudCA9PSAwKSB7Ci0gICAgICAvKiBpZiBkaWdpZHggPT0gLTEgd2UgYXJlIG91dCBvZiBkaWdpdHMgc28gYnJlYWsgKi8KLSAgICAgIGlmIChkaWdpZHggPT0gLTEpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAvKiByZWFkIG5leHQgZGlnaXQgYW5kIHJlc2V0IGJpdGNudCAqLwotICAgICAgYnVmICAgID0gWC0+ZHBbZGlnaWR4LS1dOwotICAgICAgYml0Y250ID0gKGludClESUdJVF9CSVQ7Ci0gICAgfQotCi0gICAgLyogZ3JhYiB0aGUgbmV4dCBtc2IgZnJvbSB0aGUgZXhwb25lbnQgKi8KLSAgICB5ICAgICA9IChtcF9kaWdpdCkoYnVmID4+IChESUdJVF9CSVQgLSAxKSkgJiAxOwotICAgIGJ1ZiA8PD0gKG1wX2RpZ2l0KTE7Ci0KLSAgICAvKiBpZiB0aGUgYml0IGlzIHplcm8gYW5kIG1vZGUgPT0gMCB0aGVuIHdlIGlnbm9yZSBpdAotICAgICAqIFRoZXNlIHJlcHJlc2VudCB0aGUgbGVhZGluZyB6ZXJvIGJpdHMgYmVmb3JlIHRoZSBmaXJzdCAxIGJpdAotICAgICAqIGluIHRoZSBleHBvbmVudC4gIFRlY2huaWNhbGx5IHRoaXMgb3B0IGlzIG5vdCByZXF1aXJlZCBidXQgaXQKLSAgICAgKiBkb2VzIGxvd2VyIHRoZSAjIG9mIHRyaXZpYWwgc3F1YXJpbmcvcmVkdWN0aW9ucyB1c2VkCi0gICAgICovCi0gICAgaWYgKG1vZGUgPT0gMCAmJiB5ID09IDApIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAxIHRoZW4gd2Ugc3F1YXJlICovCi0gICAgaWYgKG1vZGUgPT0gMSAmJiB5ID09IDApIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgfQotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogZWxzZSB3ZSBhZGQgaXQgdG8gdGhlIHdpbmRvdyAqLwotICAgIGJpdGJ1ZiB8PSAoeSA8PCAod2luc2l6ZSAtICsrYml0Y3B5KSk7Ci0gICAgbW9kZSAgICA9IDI7Ci0KLSAgICBpZiAoYml0Y3B5ID09IHdpbnNpemUpIHsKLSAgICAgIC8qIG9rIHdpbmRvdyBpcyBmaWxsZWQgc28gc3F1YXJlIGFzIHJlcXVpcmVkIGFuZCBtdWx0aXBseSAgKi8KLSAgICAgIC8qIHNxdWFyZSBmaXJzdCAqLwotICAgICAgZm9yICh4ID0gMDsgeCA8IHdpbnNpemU7IHgrKykgewotICAgICAgICBpZiAoKGVyciA9IG1wX3NxciAoJnJlcywgJnJlcykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIHRoZW4gbXVsdGlwbHkgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfbXVsICgmcmVzLCAmTVtiaXRidWZdLCAmcmVzKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgfQotCi0gICAgICAvKiBlbXB0eSB3aW5kb3cgYW5kIHJlc2V0ICovCi0gICAgICBiaXRjcHkgPSAwOwotICAgICAgYml0YnVmID0gMDsKLSAgICAgIG1vZGUgICA9IDE7Ci0gICAgfQotICB9Ci0KLSAgLyogaWYgYml0cyByZW1haW4gdGhlbiBzcXVhcmUvbXVsdGlwbHkgKi8KLSAgaWYgKG1vZGUgPT0gMiAmJiBiaXRjcHkgPiAwKSB7Ci0gICAgLyogc3F1YXJlIHRoZW4gbXVsdGlwbHkgaWYgdGhlIGJpdCBpcyBzZXQgKi8KLSAgICBmb3IgKHggPSAwOyB4IDwgYml0Y3B5OyB4KyspIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgfQotCi0gICAgICAvKiBnZXQgbmV4dCBiaXQgb2YgdGhlIHdpbmRvdyAqLwotICAgICAgYml0YnVmIDw8PSAxOwotICAgICAgaWYgKChiaXRidWYgJiAoMSA8PCB3aW5zaXplKSkgIT0gMCkgewotICAgICAgICAvKiB0aGVuIG11bHRpcGx5ICovCi0gICAgICAgIGlmICgoZXJyID0gbXBfbXVsICgmcmVzLCAmTVsxXSwgJnJlcykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKHJlZG1vZGUgPT0gMCkgewotICAgICAvKiBmaXh1cCByZXN1bHQgaWYgTW9udGdvbWVyeSByZWR1Y3Rpb24gaXMgdXNlZAotICAgICAgKiByZWNhbGwgdGhhdCBhbnkgdmFsdWUgaW4gYSBNb250Z29tZXJ5IHN5c3RlbSBpcwotICAgICAgKiBhY3R1YWxseSBtdWx0aXBsaWVkIGJ5IFIgbW9kIG4uICBTbyB3ZSBoYXZlCi0gICAgICAqIHRvIHJlZHVjZSBvbmUgbW9yZSB0aW1lIHRvIGNhbmNlbCBvdXQgdGhlIGZhY3RvcgotICAgICAgKiBvZiBSLgotICAgICAgKi8KLSAgICAgaWYgKChlcnIgPSByZWR1eCgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgIH0KLSAgfQotCi0gIC8qIHN3YXAgcmVzIHdpdGggWSAqLwotICBtcF9leGNoICgmcmVzLCBZKTsKLSAgZXJyID0gTVBfT0tBWTsKLUxCTF9SRVM6bXBfY2xlYXIgKCZyZXMpOwotTEJMX006Ci0gIG1wX2NsZWFyKCZNWzFdKTsKLSAgZm9yICh4ID0gMTw8KHdpbnNpemUtMSk7IHggPCAoMSA8PCB3aW5zaXplKTsgeCsrKSB7Ci0gICAgbXBfY2xlYXIgKCZNW3hdKTsKLSAgfQotICByZXR1cm4gZXJyOwotfQotI2VuZGlmCi0KLQotLyogRW5kOiBibl9tcF9leHB0bW9kX2Zhc3QuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfZXh0ZXVjbGlkLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0VYVEVVQ0xJRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBFeHRlbmRlZCBldWNsaWRlYW4gYWxnb3JpdGhtIG9mIChhLCBiKSBwcm9kdWNlcyAKLSAgIGEqdTEgKyBiKnUyID0gdTMKLSAqLwotaW50IG1wX2V4dGV1Y2xpZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpVMSwgbXBfaW50ICpVMiwgbXBfaW50ICpVMykKLXsKLSAgIG1wX2ludCB1MSx1Mix1Myx2MSx2Mix2Myx0MSx0Mix0MyxxLHRtcDsKLSAgIGludCBlcnI7Ci0KLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdTEsICZ1MiwgJnUzLCAmdjEsICZ2MiwgJnYzLCAmdDEsICZ0MiwgJnQzLCAmcSwgJnRtcCwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBlcnI7Ci0gICB9Ci0KLSAgIC8qIGluaXRpYWxpemUsICh1MSx1Mix1MykgPSAoMSwwLGEpICovCi0gICBtcF9zZXQoJnUxLCAxKTsKLSAgIGlmICgoZXJyID0gbXBfY29weShhLCAmdTMpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQotCi0gICAvKiBpbml0aWFsaXplLCAodjEsdjIsdjMpID0gKDAsMSxiKSAqLwotICAgbXBfc2V0KCZ2MiwgMSk7Ci0gICBpZiAoKGVyciA9IG1wX2NvcHkoYiwgJnYzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KLQotICAgLyogbG9vcCB3aGlsZSB2MyAhPSAwICovCi0gICB3aGlsZSAobXBfaXN6ZXJvKCZ2MykgPT0gTVBfTk8pIHsKLSAgICAgICAvKiBxID0gdTMvdjMgKi8KLSAgICAgICBpZiAoKGVyciA9IG1wX2RpdigmdTMsICZ2MywgJnEsIE5VTEwpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQotCi0gICAgICAgLyogKHQxLHQyLHQzKSA9ICh1MSx1Mix1MykgLSAodjEsdjIsdjMpcSAqLwotICAgICAgIGlmICgoZXJyID0gbXBfbXVsKCZ2MSwgJnEsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9Ci0gICAgICAgaWYgKChlcnIgPSBtcF9zdWIoJnUxLCAmdG1wLCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KLSAgICAgICBpZiAoKGVyciA9IG1wX211bCgmdjIsICZxLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQotICAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZ1MiwgJnRtcCwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9Ci0gICAgICAgaWYgKChlcnIgPSBtcF9tdWwoJnYzLCAmcSwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KLSAgICAgICBpZiAoKGVyciA9IG1wX3N1YigmdTMsICZ0bXAsICZ0MykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQotCi0gICAgICAgLyogKHUxLHUyLHUzKSA9ICh2MSx2Mix2MykgKi8KLSAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnYxLCAmdTEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQotICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmdjIsICZ1MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9Ci0gICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ2MywgJnUzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KLQotICAgICAgIC8qICh2MSx2Mix2MykgPSAodDEsdDIsdDMpICovCi0gICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ0MSwgJnYxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KLSAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnQyLCAmdjIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQotICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmdDMsICZ2MykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9Ci0gICB9Ci0KLSAgIC8qIG1ha2Ugc3VyZSBVMyA+PSAwICovCi0gICBpZiAodTMuc2lnbiA9PSBNUF9ORUcpIHsKLSAgICAgIG1wX25lZygmdTEsICZ1MSk7Ci0gICAgICBtcF9uZWcoJnUyLCAmdTIpOwotICAgICAgbXBfbmVnKCZ1MywgJnUzKTsKLSAgIH0KLQotICAgLyogY29weSByZXN1bHQgb3V0ICovCi0gICBpZiAoVTEgIT0gTlVMTCkgeyBtcF9leGNoKFUxLCAmdTEpOyB9Ci0gICBpZiAoVTIgIT0gTlVMTCkgeyBtcF9leGNoKFUyLCAmdTIpOyB9Ci0gICBpZiAoVTMgIT0gTlVMTCkgeyBtcF9leGNoKFUzLCAmdTMpOyB9Ci0KLSAgIGVyciA9IE1QX09LQVk7Ci1fRVJSOiBtcF9jbGVhcl9tdWx0aSgmdTEsICZ1MiwgJnUzLCAmdjEsICZ2MiwgJnYzLCAmdDEsICZ0MiwgJnQzLCAmcSwgJnRtcCwgTlVMTCk7Ci0gICByZXR1cm4gZXJyOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfZXh0ZXVjbGlkLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2ZyZWFkLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0ZSRUFEX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHJlYWQgYSBiaWdpbnQgZnJvbSBhIGZpbGUgc3RyZWFtIGluIEFTQ0lJICovCi1pbnQgbXBfZnJlYWQobXBfaW50ICphLCBpbnQgcmFkaXgsIEZJTEUgKnN0cmVhbSkKLXsKLSAgIGludCBlcnIsIGNoLCBuZWcsIHk7Ci0gICAKLSAgIC8qIGNsZWFyIGEgKi8KLSAgIG1wX3plcm8oYSk7Ci0gICAKLSAgIC8qIGlmIGZpcnN0IGRpZ2l0IGlzIC0gdGhlbiBzZXQgbmVnYXRpdmUgKi8KLSAgIGNoID0gZmdldGMoc3RyZWFtKTsKLSAgIGlmIChjaCA9PSAnLScpIHsKLSAgICAgIG5lZyA9IE1QX05FRzsKLSAgICAgIGNoID0gZmdldGMoc3RyZWFtKTsKLSAgIH0gZWxzZSB7Ci0gICAgICBuZWcgPSBNUF9aUE9TOwotICAgfQotICAgCi0gICBmb3IgKDs7KSB7Ci0gICAgICAvKiBmaW5kIHkgaW4gdGhlIHJhZGl4IG1hcCAqLwotICAgICAgZm9yICh5ID0gMDsgeSA8IHJhZGl4OyB5KyspIHsKLSAgICAgICAgICBpZiAobXBfc19ybWFwW3ldID09IGNoKSB7Ci0gICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHkgPT0gcmFkaXgpIHsKLSAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgCi0gICAgICAvKiBzaGlmdCB1cCBhbmQgYWRkICovCi0gICAgICBpZiAoKGVyciA9IG1wX211bF9kKGEsIHJhZGl4LCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgIH0KLSAgICAgIGlmICgoZXJyID0gbXBfYWRkX2QoYSwgeSwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGNoID0gZmdldGMoc3RyZWFtKTsKLSAgIH0KLSAgIGlmIChtcF9jbXBfZChhLCAwKSAhPSBNUF9FUSkgewotICAgICAgYS0+c2lnbiA9IG5lZzsKLSAgIH0KLSAgIAotICAgcmV0dXJuIE1QX09LQVk7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2ZyZWFkLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2Z3cml0ZS5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9GV1JJVEVfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotaW50IG1wX2Z3cml0ZShtcF9pbnQgKmEsIGludCByYWRpeCwgRklMRSAqc3RyZWFtKQotewotICAgY2hhciAqYnVmOwotICAgaW50IGVyciwgbGVuLCB4OwotICAgCi0gICBpZiAoKGVyciA9IG1wX3JhZGl4X3NpemUoYSwgcmFkaXgsICZsZW4pKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgfQotCi0gICBidWYgPSBPUFRfQ0FTVChjaGFyKSBYTUFMTE9DIChsZW4pOwotICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTVBfTUVNOwotICAgfQotICAgCi0gICBpZiAoKGVyciA9IG1wX3RvcmFkaXgoYSwgYnVmLCByYWRpeCkpICE9IE1QX09LQVkpIHsKLSAgICAgIFhGUkVFIChidWYpOwotICAgICAgcmV0dXJuIGVycjsKLSAgIH0KLSAgIAotICAgZm9yICh4ID0gMDsgeCA8IGxlbjsgeCsrKSB7Ci0gICAgICAgaWYgKGZwdXRjKGJ1Zlt4XSwgc3RyZWFtKSA9PSBFT0YpIHsKLSAgICAgICAgICBYRlJFRSAoYnVmKTsKLSAgICAgICAgICByZXR1cm4gTVBfVkFMOwotICAgICAgIH0KLSAgIH0KLSAgIAotICAgWEZSRUUgKGJ1Zik7Ci0gICByZXR1cm4gTVBfT0tBWTsKLX0KLQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfZndyaXRlLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2djZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9HQ0RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgdXNpbmcgdGhlIGJpbmFyeSBtZXRob2QgKi8KLWludCBtcF9nY2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCi17Ci0gIG1wX2ludCAgdSwgdjsKLSAgaW50ICAgICBrLCB1X2xzYiwgdl9sc2IsIHJlczsKLQotICAvKiBlaXRoZXIgemVybyB0aGFuIGdjZCBpcyB0aGUgbGFyZ2VzdCAqLwotICBpZiAobXBfaXN6ZXJvIChhKSA9PSAxICYmIG1wX2lzemVybyAoYikgPT0gMCkgewotICAgIHJldHVybiBtcF9hYnMgKGIsIGMpOwotICB9Ci0gIGlmIChtcF9pc3plcm8gKGEpID09IDAgJiYgbXBfaXN6ZXJvIChiKSA9PSAxKSB7Ci0gICAgcmV0dXJuIG1wX2FicyAoYSwgYyk7Ci0gIH0KLQotICAvKiBvcHRpbWl6ZWQuICBBdCB0aGlzIHBvaW50IGlmIGEgPT0gMCB0aGVuCi0gICAqIGIgbXVzdCBlcXVhbCB6ZXJvIHRvbwotICAgKi8KLSAgaWYgKG1wX2lzemVybyAoYSkgPT0gMSkgewotICAgIG1wX3plcm8oYyk7Ci0gICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBnZXQgY29waWVzIG9mIGEgYW5kIGIgd2UgY2FuIG1vZGlmeSAqLwotICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnUsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdiwgYikpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9VOwotICB9Ci0KLSAgLyogbXVzdCBiZSBwb3NpdGl2ZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgYWxnb3JpdGhtICovCi0gIHUuc2lnbiA9IHYuc2lnbiA9IE1QX1pQT1M7Ci0KLSAgLyogQjEuICBGaW5kIHRoZSBjb21tb24gcG93ZXIgb2YgdHdvIGZvciB1IGFuZCB2ICovCi0gIHVfbHNiID0gbXBfY250X2xzYigmdSk7Ci0gIHZfbHNiID0gbXBfY250X2xzYigmdik7Ci0gIGsgICAgID0gTUlOKHVfbHNiLCB2X2xzYik7Ci0KLSAgaWYgKGsgPiAwKSB7Ci0gICAgIC8qIGRpdmlkZSB0aGUgcG93ZXIgb2YgdHdvIG91dCAqLwotICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdSwgaywgJnUsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1Y7Ci0gICAgIH0KLQotICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdiwgaywgJnYsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1Y7Ci0gICAgIH0KLSAgfQotCi0gIC8qIGRpdmlkZSBhbnkgcmVtYWluaW5nIGZhY3RvcnMgb2YgdHdvIG91dCAqLwotICBpZiAodV9sc2IgIT0gaykgewotICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdSwgdV9sc2IgLSBrLCAmdSwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfVjsKLSAgICAgfQotICB9Ci0KLSAgaWYgKHZfbHNiICE9IGspIHsKLSAgICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoJnYsIHZfbHNiIC0gaywgJnYsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1Y7Ci0gICAgIH0KLSAgfQotCi0gIHdoaWxlIChtcF9pc3plcm8oJnYpID09IDApIHsKLSAgICAgLyogbWFrZSBzdXJlIHYgaXMgdGhlIGxhcmdlc3QgKi8KLSAgICAgaWYgKG1wX2NtcF9tYWcoJnUsICZ2KSA9PSBNUF9HVCkgewotICAgICAgICAvKiBzd2FwIHUgYW5kIHYgdG8gbWFrZSBzdXJlIHYgaXMgPj0gdSAqLwotICAgICAgICBtcF9leGNoKCZ1LCAmdik7Ci0gICAgIH0KLSAgICAgCi0gICAgIC8qIHN1YnRyYWN0IHNtYWxsZXN0IGZyb20gbGFyZ2VzdCAqLwotICAgICBpZiAoKHJlcyA9IHNfbXBfc3ViKCZ2LCAmdSwgJnYpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1Y7Ci0gICAgIH0KLSAgICAgCi0gICAgIC8qIERpdmlkZSBvdXQgYWxsIGZhY3RvcnMgb2YgdHdvICovCi0gICAgIGlmICgocmVzID0gbXBfZGl2XzJkKCZ2LCBtcF9jbnRfbHNiKCZ2KSwgJnYsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1Y7Ci0gICAgIH0gCi0gIH0gCi0KLSAgLyogbXVsdGlwbHkgYnkgMioqayB3aGljaCB3ZSBkaXZpZGVkIG91dCBhdCB0aGUgYmVnaW5uaW5nICovCi0gIGlmICgocmVzID0gbXBfbXVsXzJkICgmdSwgaywgYykpICE9IE1QX09LQVkpIHsKLSAgICAgZ290byBMQkxfVjsKLSAgfQotICBjLT5zaWduID0gTVBfWlBPUzsKLSAgcmVzID0gTVBfT0tBWTsKLUxCTF9WOm1wX2NsZWFyICgmdSk7Ci1MQkxfVTptcF9jbGVhciAoJnYpOwotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfZ2NkLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2dldF9pbnQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfR0VUX0lOVF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBnZXQgdGhlIGxvd2VyIDMyLWJpdHMgb2YgYW4gbXBfaW50ICovCi11bnNpZ25lZCBsb25nIG1wX2dldF9pbnQobXBfaW50ICogYSkgCi17Ci0gIGludCBpOwotICB1bnNpZ25lZCBsb25nIHJlczsKLQotICBpZiAoYS0+dXNlZCA9PSAwKSB7Ci0gICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogZ2V0IG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGxzYiB3ZSBoYXZlIHRvIHJlYWQgKi8KLSAgaSA9IE1JTihhLT51c2VkLChpbnQpKChzaXplb2YodW5zaWduZWQgbG9uZykqQ0hBUl9CSVQrRElHSVRfQklULTEpL0RJR0lUX0JJVCkpLTE7Ci0KLSAgLyogZ2V0IG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgb2YgcmVzdWx0ICovCi0gIHJlcyA9IERJR0lUKGEsaSk7Ci0gICAKLSAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgcmVzID0gKHJlcyA8PCBESUdJVF9CSVQpIHwgRElHSVQoYSxpKTsKLSAgfQotCi0gIC8qIGZvcmNlIHJlc3VsdCB0byAzMi1iaXRzIGFsd2F5cyBzbyBpdCBpcyBjb25zaXN0ZW50IG9uIG5vbiAzMi1iaXQgcGxhdGZvcm1zICovCi0gIHJldHVybiByZXMgJiAweEZGRkZGRkZGVUw7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9nZXRfaW50LmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2dyb3cuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfR1JPV19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBncm93IGFzIHJlcXVpcmVkICovCi1pbnQgbXBfZ3JvdyAobXBfaW50ICogYSwgaW50IHNpemUpCi17Ci0gIGludCAgICAgaTsKLSAgbXBfZGlnaXQgKnRtcDsKLQotICAvKiBpZiB0aGUgYWxsb2Mgc2l6ZSBpcyBzbWFsbGVyIGFsbG9jIG1vcmUgcmFtICovCi0gIGlmIChhLT5hbGxvYyA8IHNpemUpIHsKLSAgICAvKiBlbnN1cmUgdGhlcmUgYXJlIGFsd2F5cyBhdCBsZWFzdCBNUF9QUkVDIGRpZ2l0cyBleHRyYSBvbiB0b3AgKi8KLSAgICBzaXplICs9IChNUF9QUkVDICogMikgLSAoc2l6ZSAlIE1QX1BSRUMpOwotCi0gICAgLyogcmVhbGxvY2F0ZSB0aGUgYXJyYXkgYS0+ZHAKLSAgICAgKgotICAgICAqIFdlIHN0b3JlIHRoZSByZXR1cm4gaW4gYSB0ZW1wb3JhcnkgdmFyaWFibGUKLSAgICAgKiBpbiBjYXNlIHRoZSBvcGVyYXRpb24gZmFpbGVkIHdlIGRvbid0IHdhbnQKLSAgICAgKiB0byBvdmVyd3JpdGUgdGhlIGRwIG1lbWJlciBvZiBhLgotICAgICAqLwotICAgIHRtcCA9IE9QVF9DQVNUKG1wX2RpZ2l0KSBYUkVBTExPQyAoYS0+ZHAsIHNpemVvZiAobXBfZGlnaXQpICogc2l6ZSk7Ci0gICAgaWYgKHRtcCA9PSBOVUxMKSB7Ci0gICAgICAvKiByZWFsbG9jYXRpb24gZmFpbGVkIGJ1dCAiYSIgaXMgc3RpbGwgdmFsaWQgW2NhbiBiZSBmcmVlZF0gKi8KLSAgICAgIHJldHVybiBNUF9NRU07Ci0gICAgfQotCi0gICAgLyogcmVhbGxvY2F0aW9uIHN1Y2NlZWRlZCBzbyBzZXQgYS0+ZHAgKi8KLSAgICBhLT5kcCA9IHRtcDsKLQotICAgIC8qIHplcm8gZXhjZXNzIGRpZ2l0cyAqLwotICAgIGkgICAgICAgID0gYS0+YWxsb2M7Ci0gICAgYS0+YWxsb2MgPSBzaXplOwotICAgIGZvciAoOyBpIDwgYS0+YWxsb2M7IGkrKykgewotICAgICAgYS0+ZHBbaV0gPSAwOwotICAgIH0KLSAgfQotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2dyb3cuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfaW5pdC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9JTklUX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGluaXQgYSBuZXcgbXBfaW50ICovCi1pbnQgbXBfaW5pdCAobXBfaW50ICogYSkKLXsKLSAgaW50IGk7Ci0KLSAgLyogYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIGFuZCBjbGVhciBpdCAqLwotICBhLT5kcCA9IE9QVF9DQVNUKG1wX2RpZ2l0KSBYTUFMTE9DIChzaXplb2YgKG1wX2RpZ2l0KSAqIE1QX1BSRUMpOwotICBpZiAoYS0+ZHAgPT0gTlVMTCkgewotICAgIHJldHVybiBNUF9NRU07Ci0gIH0KLQotICAvKiBzZXQgdGhlIGRpZ2l0cyB0byB6ZXJvICovCi0gIGZvciAoaSA9IDA7IGkgPCBNUF9QUkVDOyBpKyspIHsKLSAgICAgIGEtPmRwW2ldID0gMDsKLSAgfQotCi0gIC8qIHNldCB0aGUgdXNlZCB0byB6ZXJvLCBhbGxvY2F0ZWQgZGlnaXRzIHRvIHRoZSBkZWZhdWx0IHByZWNpc2lvbgotICAgKiBhbmQgc2lnbiB0byBwb3NpdGl2ZSAqLwotICBhLT51c2VkICA9IDA7Ci0gIGEtPmFsbG9jID0gTVBfUFJFQzsKLSAgYS0+c2lnbiAgPSBNUF9aUE9TOwotCi0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfaW5pdC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9pbml0X2NvcHkuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfSU5JVF9DT1BZX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGNyZWF0ZXMgImEiIHRoZW4gY29waWVzIGIgaW50byBpdCAqLwotaW50IG1wX2luaXRfY29weSAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgaW50ICAgICByZXM7Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0IChhKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLSAgcmV0dXJuIG1wX2NvcHkgKGIsIGEpOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfaW5pdF9jb3B5LmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2luaXRfbXVsdGkuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfSU5JVF9NVUxUSV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQgbXBfaW5pdF9tdWx0aShtcF9pbnQgKm1wLCAuLi4pIAotewotICAgIG1wX2VyciByZXMgPSBNUF9PS0FZOyAgICAgIC8qIEFzc3VtZSBvayB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlICovCi0gICAgaW50IG4gPSAwOyAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIG9rIGluaXRzICovCi0gICAgbXBfaW50KiBjdXJfYXJnID0gbXA7Ci0gICAgdmFfbGlzdCBhcmdzOwotCi0gICAgdmFfc3RhcnQoYXJncywgbXApOyAgICAgICAgLyogaW5pdCBhcmdzIHRvIG5leHQgYXJndW1lbnQgZnJvbSBjYWxsZXIgKi8KLSAgICB3aGlsZSAoY3VyX2FyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChtcF9pbml0KGN1cl9hcmcpICE9IE1QX09LQVkpIHsKLSAgICAgICAgICAgIC8qIE9vcHMgLSBlcnJvciEgQmFjay10cmFjayBhbmQgbXBfY2xlYXIgd2hhdCB3ZSBhbHJlYWR5Ci0gICAgICAgICAgICAgICBzdWNjZWVkZWQgaW4gaW5pdC1pbmcsIHRoZW4gcmV0dXJuIGVycm9yLgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHZhX2xpc3QgY2xlYW5fYXJnczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyogZW5kIHRoZSBjdXJyZW50IGxpc3QgKi8KLSAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyogbm93IHN0YXJ0IGNsZWFuaW5nIHVwICovICAgICAgICAgICAgCi0gICAgICAgICAgICBjdXJfYXJnID0gbXA7Ci0gICAgICAgICAgICB2YV9zdGFydChjbGVhbl9hcmdzLCBtcCk7Ci0gICAgICAgICAgICB3aGlsZSAobi0tKSB7Ci0gICAgICAgICAgICAgICAgbXBfY2xlYXIoY3VyX2FyZyk7Ci0gICAgICAgICAgICAgICAgY3VyX2FyZyA9IHZhX2FyZyhjbGVhbl9hcmdzLCBtcF9pbnQqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhX2VuZChjbGVhbl9hcmdzKTsKLSAgICAgICAgICAgIHJlcyA9IE1QX01FTTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG4rKzsKLSAgICAgICAgY3VyX2FyZyA9IHZhX2FyZyhhcmdzLCBtcF9pbnQqKTsKLSAgICB9Ci0gICAgdmFfZW5kKGFyZ3MpOwotICAgIHJldHVybiByZXM7ICAgICAgICAgICAgICAgIC8qIEFzc3VtZWQgb2ssIGlmIGVycm9yIGZsYWdnZWQgYWJvdmUuICovCi19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2luaXRfbXVsdGkuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfaW5pdF9zZXQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfSU5JVF9TRVRfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogaW5pdGlhbGl6ZSBhbmQgc2V0IGEgZGlnaXQgKi8KLWludCBtcF9pbml0X3NldCAobXBfaW50ICogYSwgbXBfZGlnaXQgYikKLXsKLSAgaW50IGVycjsKLSAgaWYgKChlcnIgPSBtcF9pbml0KGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgIHJldHVybiBlcnI7Ci0gIH0KLSAgbXBfc2V0KGEsIGIpOwotICByZXR1cm4gZXJyOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfaW5pdF9zZXQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfaW5pdF9zZXRfaW50LmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0lOSVRfU0VUX0lOVF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBpbml0aWFsaXplIGFuZCBzZXQgYSBkaWdpdCAqLwotaW50IG1wX2luaXRfc2V0X2ludCAobXBfaW50ICogYSwgdW5zaWduZWQgbG9uZyBiKQotewotICBpbnQgZXJyOwotICBpZiAoKGVyciA9IG1wX2luaXQoYSkpICE9IE1QX09LQVkpIHsKLSAgICAgcmV0dXJuIGVycjsKLSAgfQotICByZXR1cm4gbXBfc2V0X2ludChhLCBiKTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2luaXRfc2V0X2ludC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9pbml0X3NpemUuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfSU5JVF9TSVpFX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGluaXQgYW4gbXBfaW5pdCBmb3IgYSBnaXZlbiBzaXplICovCi1pbnQgbXBfaW5pdF9zaXplIChtcF9pbnQgKiBhLCBpbnQgc2l6ZSkKLXsKLSAgaW50IHg7Ci0KLSAgLyogcGFkIHNpemUgc28gdGhlcmUgYXJlIGFsd2F5cyBleHRyYSBkaWdpdHMgKi8KLSAgc2l6ZSArPSAoTVBfUFJFQyAqIDIpIC0gKHNpemUgJSBNUF9QUkVDKTsJCi0gIAotICAvKiBhbGxvYyBtZW0gKi8KLSAgYS0+ZHAgPSBPUFRfQ0FTVChtcF9kaWdpdCkgWE1BTExPQyAoc2l6ZW9mIChtcF9kaWdpdCkgKiBzaXplKTsKLSAgaWYgKGEtPmRwID09IE5VTEwpIHsKLSAgICByZXR1cm4gTVBfTUVNOwotICB9Ci0KLSAgLyogc2V0IHRoZSBtZW1iZXJzICovCi0gIGEtPnVzZWQgID0gMDsKLSAgYS0+YWxsb2MgPSBzaXplOwotICBhLT5zaWduICA9IE1QX1pQT1M7Ci0KLSAgLyogemVybyB0aGUgZGlnaXRzICovCi0gIGZvciAoeCA9IDA7IHggPCBzaXplOyB4KyspIHsKLSAgICAgIGEtPmRwW3hdID0gMDsKLSAgfQotCi0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfaW5pdF9zaXplLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX2ludm1vZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9JTlZNT0RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogaGFjIDE0LjYxLCBwcDYwOCAqLwotaW50IG1wX2ludm1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgLyogYiBjYW5ub3QgYmUgbmVnYXRpdmUgKi8KLSAgaWYgKGItPnNpZ24gPT0gTVBfTkVHIHx8IG1wX2lzemVybyhiKSA9PSAxKSB7Ci0gICAgcmV0dXJuIE1QX1ZBTDsKLSAgfQotCi0jaWZkZWYgQk5fRkFTVF9NUF9JTlZNT0RfQwotICAvKiBpZiB0aGUgbW9kdWx1cyBpcyBvZGQgd2UgY2FuIHVzZSBhIGZhc3RlciByb3V0aW5lIGluc3RlYWQgKi8KLSAgaWYgKG1wX2lzb2RkIChiKSA9PSAxKSB7Ci0gICAgcmV0dXJuIGZhc3RfbXBfaW52bW9kIChhLCBiLCBjKTsKLSAgfQotI2VuZGlmCi0KLSNpZmRlZiBCTl9NUF9JTlZNT0RfU0xPV19DCi0gIHJldHVybiBtcF9pbnZtb2Rfc2xvdyhhLCBiLCBjKTsKLSNlbmRpZgotCi0gIHJldHVybiBNUF9WQUw7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9pbnZtb2QuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfaW52bW9kX3Nsb3cuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfSU5WTU9EX1NMT1dfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogaGFjIDE0LjYxLCBwcDYwOCAqLwotaW50IG1wX2ludm1vZF9zbG93IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQotewotICBtcF9pbnQgIHgsIHksIHUsIHYsIEEsIEIsIEMsIEQ7Ci0gIGludCAgICAgcmVzOwotCi0gIC8qIGIgY2Fubm90IGJlIG5lZ2F0aXZlICovCi0gIGlmIChiLT5zaWduID09IE1QX05FRyB8fCBtcF9pc3plcm8oYikgPT0gMSkgewotICAgIHJldHVybiBNUF9WQUw7Ci0gIH0KLQotICAvKiBpbml0IHRlbXBzICovCi0gIGlmICgocmVzID0gbXBfaW5pdF9tdWx0aSgmeCwgJnksICZ1LCAmdiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmQSwgJkIsICZDLCAmRCwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIHggPSBhLCB5ID0gYiAqLwotICBpZiAoKHJlcyA9IG1wX21vZChhLCBiLCAmeCkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgfQotICBpZiAoKHJlcyA9IG1wX2NvcHkgKGIsICZ5KSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX0VSUjsKLSAgfQotCi0gIC8qIDIuIFttb2RpZmllZF0gaWYgeCx5IGFyZSBib3RoIGV2ZW4gdGhlbiByZXR1cm4gYW4gZXJyb3IhICovCi0gIGlmIChtcF9pc2V2ZW4gKCZ4KSA9PSAxICYmIG1wX2lzZXZlbiAoJnkpID09IDEpIHsKLSAgICByZXMgPSBNUF9WQUw7Ci0gICAgZ290byBMQkxfRVJSOwotICB9Ci0KLSAgLyogMy4gdT14LCB2PXksIEE9MSwgQj0wLCBDPTAsRD0xICovCi0gIGlmICgocmVzID0gbXBfY29weSAoJngsICZ1KSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX0VSUjsKLSAgfQotICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ5LCAmdikpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9FUlI7Ci0gIH0KLSAgbXBfc2V0ICgmQSwgMSk7Ci0gIG1wX3NldCAoJkQsIDEpOwotCi10b3A6Ci0gIC8qIDQuICB3aGlsZSB1IGlzIGV2ZW4gZG8gKi8KLSAgd2hpbGUgKG1wX2lzZXZlbiAoJnUpID09IDEpIHsKLSAgICAvKiA0LjEgdSA9IHUvMiAqLwotICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZ1LCAmdSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gICAgLyogNC4yIGlmIEEgb3IgQiBpcyBvZGQgdGhlbiAqLwotICAgIGlmIChtcF9pc29kZCAoJkEpID09IDEgfHwgbXBfaXNvZGQgKCZCKSA9PSAxKSB7Ci0gICAgICAvKiBBID0gKEEreSkvMiwgQiA9IChCLXgpLzIgKi8KLSAgICAgIGlmICgocmVzID0gbXBfYWRkICgmQSwgJnksICZBKSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgZ290byBMQkxfRVJSOwotICAgICAgfQotICAgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZCLCAmeCwgJkIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIEEgPSBBLzIsIEIgPSBCLzIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmQSwgJkEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZCLCAmQikpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gIH0KLQotICAvKiA1LiAgd2hpbGUgdiBpcyBldmVuIGRvICovCi0gIHdoaWxlIChtcF9pc2V2ZW4gKCZ2KSA9PSAxKSB7Ci0gICAgLyogNS4xIHYgPSB2LzIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdiwgJnYpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotICAgIC8qIDUuMiBpZiBDIG9yIEQgaXMgb2RkIHRoZW4gKi8KLSAgICBpZiAobXBfaXNvZGQgKCZDKSA9PSAxIHx8IG1wX2lzb2RkICgmRCkgPT0gMSkgewotICAgICAgLyogQyA9IChDK3kpLzIsIEQgPSAoRC14KS8yICovCi0gICAgICBpZiAoKHJlcyA9IG1wX2FkZCAoJkMsICZ5LCAmQykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICAgIH0KLSAgICAgIGlmICgocmVzID0gbXBfc3ViICgmRCwgJngsICZEKSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgZ290byBMQkxfRVJSOwotICAgICAgfQotICAgIH0KLSAgICAvKiBDID0gQy8yLCBEID0gRC8yICovCi0gICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJkMsICZDKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmRCwgJkQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotICB9Ci0KLSAgLyogNi4gIGlmIHUgPj0gdiB0aGVuICovCi0gIGlmIChtcF9jbXAgKCZ1LCAmdikgIT0gTVBfTFQpIHsKLSAgICAvKiB1ID0gdSAtIHYsIEEgPSBBIC0gQywgQiA9IEIgLSBEICovCi0gICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ1LCAmdiwgJnUpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotCi0gICAgaWYgKChyZXMgPSBtcF9zdWIgKCZBLCAmQywgJkEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotCi0gICAgaWYgKChyZXMgPSBtcF9zdWIgKCZCLCAmRCwgJkIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIHYgLSB2IC0gdSwgQyA9IEMgLSBBLCBEID0gRCAtIEIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnYsICZ1LCAmdikpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkMsICZBLCAmQykpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkQsICZCLCAmRCkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gIH0KLQotICAvKiBpZiBub3QgemVybyBnb3RvIHN0ZXAgNCAqLwotICBpZiAobXBfaXN6ZXJvICgmdSkgPT0gMCkKLSAgICBnb3RvIHRvcDsKLQotICAvKiBub3cgYSA9IEMsIGIgPSBELCBnY2QgPT0gZyp2ICovCi0KLSAgLyogaWYgdiAhPSAxIHRoZW4gdGhlcmUgaXMgbm8gaW52ZXJzZSAqLwotICBpZiAobXBfY21wX2QgKCZ2LCAxKSAhPSBNUF9FUSkgewotICAgIHJlcyA9IE1QX1ZBTDsKLSAgICBnb3RvIExCTF9FUlI7Ci0gIH0KLQotICAvKiBpZiBpdHMgdG9vIGxvdyAqLwotICB3aGlsZSAobXBfY21wX2QoJkMsIDApID09IE1QX0xUKSB7Ci0gICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmQywgYiwgJkMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgICB9Ci0gIH0KLSAgCi0gIC8qIHRvbyBiaWcgKi8KLSAgd2hpbGUgKG1wX2NtcF9tYWcoJkMsIGIpICE9IE1QX0xUKSB7Ci0gICAgICBpZiAoKHJlcyA9IG1wX3N1YigmQywgYiwgJkMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgICB9Ci0gIH0KLSAgCi0gIC8qIEMgaXMgbm93IHRoZSBpbnZlcnNlICovCi0gIG1wX2V4Y2ggKCZDLCBjKTsKLSAgcmVzID0gTVBfT0tBWTsKLUxCTF9FUlI6bXBfY2xlYXJfbXVsdGkgKCZ4LCAmeSwgJnUsICZ2LCAmQSwgJkIsICZDLCAmRCwgTlVMTCk7Ci0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9pbnZtb2Rfc2xvdy5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9pc19zcXVhcmUuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfSVNfU1FVQVJFX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIENoZWNrIGlmIHJlbWFpbmRlcnMgYXJlIHBvc3NpYmxlIHNxdWFyZXMgLSBmYXN0IGV4Y2x1ZGUgbm9uLXNxdWFyZXMgKi8KLXN0YXRpYyBjb25zdCBjaGFyIHJlbV8xMjhbMTI4XSA9IHsKLSAwLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAotIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCi0gMSwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKLSAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAotIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCi0gMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKLSAxLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAotIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHJlbV8xMDVbMTA1XSA9IHsKLSAwLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLAotIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsCi0gMCwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwKLSAxLCAwLCAxLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAotIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsCi0gMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwKLSAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxCi19OwotCi0vKiBTdG9yZSBub24temVybyB0byByZXQgaWYgYXJnIGlzIHNxdWFyZSwgYW5kIHplcm8gaWYgbm90ICovCi1pbnQgbXBfaXNfc3F1YXJlKG1wX2ludCAqYXJnLGludCAqcmV0KSAKLXsKLSAgaW50ICAgICAgICAgICByZXM7Ci0gIG1wX2RpZ2l0ICAgICAgYzsKLSAgbXBfaW50ICAgICAgICB0OwotICB1bnNpZ25lZCBsb25nIHI7Ci0KLSAgLyogRGVmYXVsdCB0byBOb24tc3F1YXJlIDopICovCi0gICpyZXQgPSBNUF9OTzsgCi0KLSAgaWYgKGFyZy0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogZGlnaXRzIHVzZWQ/ICAoVFNEKSAqLwotICBpZiAoYXJnLT51c2VkID09IDApIHsKLSAgICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBGaXJzdCBjaGVjayBtb2QgMTI4IChzdXBwb3NlIHRoYXQgRElHSVRfQklUIGlzIGF0IGxlYXN0IDcpICovCi0gIGlmIChyZW1fMTI4WzEyNyAmIERJR0lUKGFyZywwKV0gPT0gMSkgewotICAgICByZXR1cm4gTVBfT0tBWTsKLSAgfQotCi0gIC8qIE5leHQgY2hlY2sgbW9kIDEwNSAoMyo1KjcpICovCi0gIGlmICgocmVzID0gbXBfbW9kX2QoYXJnLDEwNSwmYykpICE9IE1QX09LQVkpIHsKLSAgICAgcmV0dXJuIHJlczsKLSAgfQotICBpZiAocmVtXzEwNVtjXSA9PSAxKSB7Ci0gICAgIHJldHVybiBNUF9PS0FZOwotICB9Ci0KLQotICBpZiAoKHJlcyA9IG1wX2luaXRfc2V0X2ludCgmdCwxMUwqMTNMKjE3TCoxOUwqMjNMKjI5TCozMUwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgIHJldHVybiByZXM7Ci0gIH0KLSAgaWYgKChyZXMgPSBtcF9tb2QoYXJnLCZ0LCZ0KSkgIT0gTVBfT0tBWSkgewotICAgICBnb3RvIEVSUjsKLSAgfQotICByID0gbXBfZ2V0X2ludCgmdCk7Ci0gIC8qIENoZWNrIGZvciBvdGhlciBwcmltZSBtb2R1bGVzLCBub3RlIGl0J3Mgbm90IGFuIEVSUk9SIGJ1dCB3ZSBtdXN0Ci0gICAqIGZyZWUgInQiIHNvIHRoZSBlYXNpZXN0IHdheSBpcyB0byBnb3RvIEVSUi4gIFdlIGtub3cgdGhhdCByZXMKLSAgICogaXMgYWxyZWFkeSBlcXVhbCB0byBNUF9PS0FZIGZyb20gdGhlIG1wX21vZCBjYWxsIAotICAgKi8gCi0gIGlmICggKDFMPDwociUxMSkpICYgMHg1QzRMICkgICAgICAgICAgICAgZ290byBFUlI7Ci0gIGlmICggKDFMPDwociUxMykpICYgMHg5RTRMICkgICAgICAgICAgICAgZ290byBFUlI7Ci0gIGlmICggKDFMPDwociUxNykpICYgMHg1Q0U4TCApICAgICAgICAgICAgZ290byBFUlI7Ci0gIGlmICggKDFMPDwociUxOSkpICYgMHg0RjUwQ0wgKSAgICAgICAgICAgZ290byBFUlI7Ci0gIGlmICggKDFMPDwociUyMykpICYgMHg3QUNDQTBMICkgICAgICAgICAgZ290byBFUlI7Ci0gIGlmICggKDFMPDwociUyOSkpICYgMHhDMkVERDBDTCApICAgICAgICAgZ290byBFUlI7Ci0gIGlmICggKDFMPDwociUzMSkpICYgMHg2REUyQjg0OEwgKSAgICAgICAgZ290byBFUlI7Ci0KLSAgLyogRmluYWwgY2hlY2sgLSBpcyBzcXIoc3FydChhcmcpKSA9PSBhcmcgPyAqLwotICBpZiAoKHJlcyA9IG1wX3NxcnQoYXJnLCZ0KSkgIT0gTVBfT0tBWSkgewotICAgICBnb3RvIEVSUjsKLSAgfQotICBpZiAoKHJlcyA9IG1wX3NxcigmdCwmdCkpICE9IE1QX09LQVkpIHsKLSAgICAgZ290byBFUlI7Ci0gIH0KLQotICAqcmV0ID0gKG1wX2NtcF9tYWcoJnQsYXJnKSA9PSBNUF9FUSkgPyBNUF9ZRVMgOiBNUF9OTzsKLUVSUjptcF9jbGVhcigmdCk7Ci0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9pc19zcXVhcmUuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfamFjb2JpLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0pBQ09CSV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjb21wdXRlcyB0aGUgamFjb2JpIGMgPSAoYSB8IG4pIChvciBMZWdlbmRyZSBpZiBuIGlzIHByaW1lKQotICogSEFDIHBwLiA3MyBBbGdvcml0aG0gMi4xNDkKLSAqLwotaW50IG1wX2phY29iaSAobXBfaW50ICogYSwgbXBfaW50ICogcCwgaW50ICpjKQotewotICBtcF9pbnQgIGExLCBwMTsKLSAgaW50ICAgICBrLCBzLCByLCByZXM7Ci0gIG1wX2RpZ2l0IHJlc2lkdWU7Ci0KLSAgLyogaWYgcCA8PSAwIHJldHVybiBNUF9WQUwgKi8KLSAgaWYgKG1wX2NtcF9kKHAsIDApICE9IE1QX0dUKSB7Ci0gICAgIHJldHVybiBNUF9WQUw7Ci0gIH0KLQotICAvKiBzdGVwIDEuICBpZiBhID09IDAsIHJldHVybiAwICovCi0gIGlmIChtcF9pc3plcm8gKGEpID09IDEpIHsKLSAgICAqYyA9IDA7Ci0gICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBzdGVwIDIuICBpZiBhID09IDEsIHJldHVybiAxICovCi0gIGlmIChtcF9jbXBfZCAoYSwgMSkgPT0gTVBfRVEpIHsKLSAgICAqYyA9IDE7Ci0gICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBkZWZhdWx0ICovCi0gIHMgPSAwOwotCi0gIC8qIHN0ZXAgMy4gIHdyaXRlIGEgPSBhMSAqIDIqKmsgICovCi0gIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmYTEsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfaW5pdCAoJnAxKSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX0ExOwotICB9Ci0KLSAgLyogZGl2aWRlIG91dCBsYXJnZXIgcG93ZXIgb2YgdHdvICovCi0gIGsgPSBtcF9jbnRfbHNiKCZhMSk7Ci0gIGlmICgocmVzID0gbXBfZGl2XzJkKCZhMSwgaywgJmExLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICBnb3RvIExCTF9QMTsKLSAgfQotCi0gIC8qIHN0ZXAgNC4gIGlmIGUgaXMgZXZlbiBzZXQgcz0xICovCi0gIGlmICgoayAmIDEpID09IDApIHsKLSAgICBzID0gMTsKLSAgfSBlbHNlIHsKLSAgICAvKiBlbHNlIHNldCBzPTEgaWYgcCA9IDEvNyAobW9kIDgpIG9yIHM9LTEgaWYgcCA9IDMvNSAobW9kIDgpICovCi0gICAgcmVzaWR1ZSA9IHAtPmRwWzBdICYgNzsKLQotICAgIGlmIChyZXNpZHVlID09IDEgfHwgcmVzaWR1ZSA9PSA3KSB7Ci0gICAgICBzID0gMTsKLSAgICB9IGVsc2UgaWYgKHJlc2lkdWUgPT0gMyB8fCByZXNpZHVlID09IDUpIHsKLSAgICAgIHMgPSAtMTsKLSAgICB9Ci0gIH0KLQotICAvKiBzdGVwIDUuICBpZiBwID09IDMgKG1vZCA0KSAqYW5kKiBhMSA9PSAzIChtb2QgNCkgdGhlbiBzID0gLXMgKi8KLSAgaWYgKCAoKHAtPmRwWzBdICYgMykgPT0gMykgJiYgKChhMS5kcFswXSAmIDMpID09IDMpKSB7Ci0gICAgcyA9IC1zOwotICB9Ci0KLSAgLyogaWYgYTEgPT0gMSB3ZSdyZSBkb25lICovCi0gIGlmIChtcF9jbXBfZCAoJmExLCAxKSA9PSBNUF9FUSkgewotICAgICpjID0gczsKLSAgfSBlbHNlIHsKLSAgICAvKiBuMSA9IG4gbW9kIGExICovCi0gICAgaWYgKChyZXMgPSBtcF9tb2QgKHAsICZhMSwgJnAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfUDE7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfamFjb2JpICgmcDEsICZhMSwgJnIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9QMTsKLSAgICB9Ci0gICAgKmMgPSBzICogcjsKLSAgfQotCi0gIC8qIGRvbmUgKi8KLSAgcmVzID0gTVBfT0tBWTsKLUxCTF9QMTptcF9jbGVhciAoJnAxKTsKLUxCTF9BMTptcF9jbGVhciAoJmExKTsKLSAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2phY29iaS5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9rYXJhdHN1YmFfbXVsLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0tBUkFUU1VCQV9NVUxfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogYyA9IHxhfCAqIHxifCB1c2luZyBLYXJhdHN1YmEgTXVsdGlwbGljYXRpb24gdXNpbmcgCi0gKiB0aHJlZSBoYWxmIHNpemUgbXVsdGlwbGljYXRpb25zCi0gKgotICogTGV0IEIgcmVwcmVzZW50IHRoZSByYWRpeCBbZS5nLiAyKipESUdJVF9CSVRdIGFuZCAKLSAqIGxldCBuIHJlcHJlc2VudCBoYWxmIG9mIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIAotICogdGhlIG1pbihhLGIpCi0gKgotICogYSA9IGExICogQioqbiArIGEwCi0gKiBiID0gYjEgKiBCKipuICsgYjAKLSAqCi0gKiBUaGVuLCBhICogYiA9PiAKLSAgIGExYjEgKiBCKioybiArICgoYTEgLSBhMCkoYjEgLSBiMCkgKyBhMGIwICsgYTFiMSkgKiBCICsgYTBiMAotICoKLSAqIE5vdGUgdGhhdCBhMWIxIGFuZCBhMGIwIGFyZSB1c2VkIHR3aWNlIGFuZCBvbmx5IG5lZWQgdG8gYmUgCi0gKiBjb21wdXRlZCBvbmNlLiAgU28gaW4gdG90YWwgdGhyZWUgaGFsZiBzaXplIChoYWxmICMgb2YgCi0gKiBkaWdpdCkgbXVsdGlwbGljYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEwYjAsIGExYjEgYW5kIAotICogKGExLWIxKShhMC1iMCkKLSAqCi0gKiBOb3RlIHRoYXQgYSBtdWx0aXBsaWNhdGlvbiBvZiBoYWxmIHRoZSBkaWdpdHMgcmVxdWlyZXMKLSAqIDEvNHRoIHRoZSBudW1iZXIgb2Ygc2luZ2xlIHByZWNpc2lvbiBtdWx0aXBsaWNhdGlvbnMgc28gaW4gCi0gKiB0b3RhbCBhZnRlciBvbmUgY2FsbCAyNSUgb2YgdGhlIHNpbmdsZSBwcmVjaXNpb24gbXVsdGlwbGljYXRpb25zIAotICogYXJlIHNhdmVkLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNhbGwgdG8gbXBfbXVsIGNhbiBlbmQgdXAgYmFjayAKLSAqIGluIHRoaXMgZnVuY3Rpb24gaWYgdGhlIGEwLCBhMSwgYjAsIG9yIGIxIGFyZSBhYm92ZSB0aGUgdGhyZXNob2xkLiAgCi0gKiBUaGlzIGlzIGtub3duIGFzIGRpdmlkZS1hbmQtY29ucXVlciBhbmQgbGVhZHMgdG8gdGhlIGZhbW91cyAKLSAqIE8oTioqbGcoMykpIG9yIE8oTioqMS41ODQpIHdvcmsgd2hpY2ggaXMgYXN5bXB0b3BpY2FsbHkgbG93ZXIgdGhhbiAKLSAqIHRoZSBzdGFuZGFyZCBPKE4qKjIpIHRoYXQgdGhlIGJhc2VsaW5lL2NvbWJhIG1ldGhvZHMgdXNlLiAgCi0gKiBHZW5lcmFsbHkgdGhvdWdoIHRoZSBvdmVyaGVhZCBvZiB0aGlzIG1ldGhvZCBkb2Vzbid0IHBheSBvZmYgCi0gKiB1bnRpbCBhIGNlcnRhaW4gc2l6ZSAoTiB+IDgwKSBpcyByZWFjaGVkLgotICovCi1pbnQgbXBfa2FyYXRzdWJhX211bCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgbXBfaW50ICB4MCwgeDEsIHkwLCB5MSwgdDEsIHgweTAsIHgxeTE7Ci0gIGludCAgICAgQiwgZXJyOwotCi0gIC8qIGRlZmF1bHQgdGhlIHJldHVybiBjb2RlIHRvIGFuIGVycm9yICovCi0gIGVyciA9IE1QX01FTTsKLQotICAvKiBtaW4gIyBvZiBkaWdpdHMgKi8KLSAgQiA9IE1JTiAoYS0+dXNlZCwgYi0+dXNlZCk7Ci0KLSAgLyogbm93IGRpdmlkZSBpbiB0d28gKi8KLSAgQiA9IEIgPj4gMTsKLQotICAvKiBpbml0IGNvcHkgYWxsIHRoZSB0ZW1wcyAqLwotICBpZiAobXBfaW5pdF9zaXplICgmeDAsIEIpICE9IE1QX09LQVkpCi0gICAgZ290byBFUlI7Ci0gIGlmIChtcF9pbml0X3NpemUgKCZ4MSwgYS0+dXNlZCAtIEIpICE9IE1QX09LQVkpCi0gICAgZ290byBYMDsKLSAgaWYgKG1wX2luaXRfc2l6ZSAoJnkwLCBCKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDE7Ci0gIGlmIChtcF9pbml0X3NpemUgKCZ5MSwgYi0+dXNlZCAtIEIpICE9IE1QX09LQVkpCi0gICAgZ290byBZMDsKLQotICAvKiBpbml0IHRlbXBzICovCi0gIGlmIChtcF9pbml0X3NpemUgKCZ0MSwgQiAqIDIpICE9IE1QX09LQVkpCi0gICAgZ290byBZMTsKLSAgaWYgKG1wX2luaXRfc2l6ZSAoJngweTAsIEIgKiAyKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gVDE7Ci0gIGlmIChtcF9pbml0X3NpemUgKCZ4MXkxLCBCICogMikgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgwWTA7Ci0KLSAgLyogbm93IHNoaWZ0IHRoZSBkaWdpdHMgKi8KLSAgeDAudXNlZCA9IHkwLnVzZWQgPSBCOwotICB4MS51c2VkID0gYS0+dXNlZCAtIEI7Ci0gIHkxLnVzZWQgPSBiLT51c2VkIC0gQjsKLQotICB7Ci0gICAgcmVnaXN0ZXIgaW50IHg7Ci0gICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRtcGEsICp0bXBiLCAqdG1weCwgKnRtcHk7Ci0KLSAgICAvKiB3ZSBjb3B5IHRoZSBkaWdpdHMgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zCi0gICAgICogc2luY2Ugd2UgYWxzbyBuZWVkIHRvIHNoaWZ0IHRoZSBkaWdpdHMKLSAgICAgKi8KLSAgICB0bXBhID0gYS0+ZHA7Ci0gICAgdG1wYiA9IGItPmRwOwotCi0gICAgdG1weCA9IHgwLmRwOwotICAgIHRtcHkgPSB5MC5kcDsKLSAgICBmb3IgKHggPSAwOyB4IDwgQjsgeCsrKSB7Ci0gICAgICAqdG1weCsrID0gKnRtcGErKzsKLSAgICAgICp0bXB5KysgPSAqdG1wYisrOwotICAgIH0KLQotICAgIHRtcHggPSB4MS5kcDsKLSAgICBmb3IgKHggPSBCOyB4IDwgYS0+dXNlZDsgeCsrKSB7Ci0gICAgICAqdG1weCsrID0gKnRtcGErKzsKLSAgICB9Ci0KLSAgICB0bXB5ID0geTEuZHA7Ci0gICAgZm9yICh4ID0gQjsgeCA8IGItPnVzZWQ7IHgrKykgewotICAgICAgKnRtcHkrKyA9ICp0bXBiKys7Ci0gICAgfQotICB9Ci0KLSAgLyogb25seSBuZWVkIHRvIGNsYW1wIHRoZSBsb3dlciB3b3JkcyBzaW5jZSBieSBkZWZpbml0aW9uIHRoZSAKLSAgICogdXBwZXIgd29yZHMgeDEveTEgbXVzdCBoYXZlIGEga25vd24gbnVtYmVyIG9mIGRpZ2l0cwotICAgKi8KLSAgbXBfY2xhbXAgKCZ4MCk7Ci0gIG1wX2NsYW1wICgmeTApOwotCi0gIC8qIG5vdyBjYWxjIHRoZSBwcm9kdWN0cyB4MHkwIGFuZCB4MXkxICovCi0gIC8qIGFmdGVyIHRoaXMgeDAgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLCBmcmVlIHRlbXAgW3gwPT10Ml0hICovCi0gIGlmIChtcF9tdWwgKCZ4MCwgJnkwLCAmeDB5MCkgIT0gTVBfT0tBWSkgIAotICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogeDB5MCA9IHgwKnkwICovCi0gIGlmIChtcF9tdWwgKCZ4MSwgJnkxLCAmeDF5MSkgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHgxeTEgPSB4MSp5MSAqLwotCi0gIC8qIG5vdyBjYWxjIHgxLXgwIGFuZCB5MS15MCAqLwotICBpZiAobXBfc3ViICgmeDEsICZ4MCwgJnQxKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSB4MSAtIHgwICovCi0gIGlmIChtcF9zdWIgKCZ5MSwgJnkwLCAmeDApICE9IE1QX09LQVkpCi0gICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MiA9IHkxIC0geTAgKi8KLSAgaWYgKG1wX211bCAoJnQxLCAmeDAsICZ0MSkgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQxID0gKHgxIC0geDApICogKHkxIC0geTApICovCi0KLSAgLyogYWRkIHgweTAgKi8KLSAgaWYgKG1wX2FkZCAoJngweTAsICZ4MXkxLCAmeDApICE9IE1QX09LQVkpCi0gICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MiA9IHgweTAgKyB4MXkxICovCi0gIGlmIChtcF9zdWIgKCZ4MCwgJnQxLCAmdDEpICE9IE1QX09LQVkpCi0gICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MSA9IHgweTAgKyB4MXkxIC0gKHgxLXgwKSooeTEteTApICovCi0KLSAgLyogc2hpZnQgYnkgQiAqLwotICBpZiAobXBfbHNoZCAoJnQxLCBCKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSAoeDB5MCArIHgxeTEgLSAoeDEteDApKih5MS15MCkpPDxCICovCi0gIGlmIChtcF9sc2hkICgmeDF5MSwgQiAqIDIpICE9IE1QX09LQVkpCi0gICAgZ290byBYMVkxOyAgICAgICAgICAvKiB4MXkxID0geDF5MSA8PCAyKkIgKi8KLQotICBpZiAobXBfYWRkICgmeDB5MCwgJnQxLCAmdDEpICE9IE1QX09LQVkpCi0gICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MSA9IHgweTAgKyB0MSAqLwotICBpZiAobXBfYWRkICgmdDEsICZ4MXkxLCBjKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSB4MHkwICsgdDEgKyB4MXkxICovCi0KLSAgLyogQWxnb3JpdGhtIHN1Y2NlZWRlZCBzZXQgdGhlIHJldHVybiBjb2RlIHRvIE1QX09LQVkgKi8KLSAgZXJyID0gTVBfT0tBWTsKLQotWDFZMTptcF9jbGVhciAoJngxeTEpOwotWDBZMDptcF9jbGVhciAoJngweTApOwotVDE6bXBfY2xlYXIgKCZ0MSk7Ci1ZMTptcF9jbGVhciAoJnkxKTsKLVkwOm1wX2NsZWFyICgmeTApOwotWDE6bXBfY2xlYXIgKCZ4MSk7Ci1YMDptcF9jbGVhciAoJngwKTsKLUVSUjoKLSAgcmV0dXJuIGVycjsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2thcmF0c3ViYV9tdWwuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfa2FyYXRzdWJhX3Nxci5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9LQVJBVFNVQkFfU1FSX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIEthcmF0c3ViYSBzcXVhcmluZywgY29tcHV0ZXMgYiA9IGEqYSB1c2luZyB0aHJlZSAKLSAqIGhhbGYgc2l6ZSBzcXVhcmluZ3MKLSAqCi0gKiBTZWUgY29tbWVudHMgb2Yga2FyYXRzdWJhX211bCBmb3IgZGV0YWlscy4gIEl0IAotICogaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYWxnb3JpdGhtIGJ1dCBtZXJlbHkgCi0gKiB0dW5lZCB0byBwZXJmb3JtIHJlY3Vyc2l2ZSBzcXVhcmluZ3MuCi0gKi8KLWludCBtcF9rYXJhdHN1YmFfc3FyIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQotewotICBtcF9pbnQgIHgwLCB4MSwgdDEsIHQyLCB4MHgwLCB4MXgxOwotICBpbnQgICAgIEIsIGVycjsKLQotICBlcnIgPSBNUF9NRU07Ci0KLSAgLyogbWluICMgb2YgZGlnaXRzICovCi0gIEIgPSBhLT51c2VkOwotCi0gIC8qIG5vdyBkaXZpZGUgaW4gdHdvICovCi0gIEIgPSBCID4+IDE7Ci0KLSAgLyogaW5pdCBjb3B5IGFsbCB0aGUgdGVtcHMgKi8KLSAgaWYgKG1wX2luaXRfc2l6ZSAoJngwLCBCKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gRVJSOwotICBpZiAobXBfaW5pdF9zaXplICgmeDEsIGEtPnVzZWQgLSBCKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDA7Ci0KLSAgLyogaW5pdCB0ZW1wcyAqLwotICBpZiAobXBfaW5pdF9zaXplICgmdDEsIGEtPnVzZWQgKiAyKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDE7Ci0gIGlmIChtcF9pbml0X3NpemUgKCZ0MiwgYS0+dXNlZCAqIDIpICE9IE1QX09LQVkpCi0gICAgZ290byBUMTsKLSAgaWYgKG1wX2luaXRfc2l6ZSAoJngweDAsIEIgKiAyKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gVDI7Ci0gIGlmIChtcF9pbml0X3NpemUgKCZ4MXgxLCAoYS0+dXNlZCAtIEIpICogMikgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgwWDA7Ci0KLSAgewotICAgIHJlZ2lzdGVyIGludCB4OwotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICpkc3QsICpzcmM7Ci0KLSAgICBzcmMgPSBhLT5kcDsKLQotICAgIC8qIG5vdyBzaGlmdCB0aGUgZGlnaXRzICovCi0gICAgZHN0ID0geDAuZHA7Ci0gICAgZm9yICh4ID0gMDsgeCA8IEI7IHgrKykgewotICAgICAgKmRzdCsrID0gKnNyYysrOwotICAgIH0KLQotICAgIGRzdCA9IHgxLmRwOwotICAgIGZvciAoeCA9IEI7IHggPCBhLT51c2VkOyB4KyspIHsKLSAgICAgICpkc3QrKyA9ICpzcmMrKzsKLSAgICB9Ci0gIH0KLQotICB4MC51c2VkID0gQjsKLSAgeDEudXNlZCA9IGEtPnVzZWQgLSBCOwotCi0gIG1wX2NsYW1wICgmeDApOwotCi0gIC8qIG5vdyBjYWxjIHRoZSBwcm9kdWN0cyB4MCp4MCBhbmQgeDEqeDEgKi8KLSAgaWYgKG1wX3NxciAoJngwLCAmeDB4MCkgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MHgwID0geDAqeDAgKi8KLSAgaWYgKG1wX3NxciAoJngxLCAmeDF4MSkgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MXgxID0geDEqeDEgKi8KLQotICAvKiBub3cgY2FsYyAoeDEteDApKioyICovCi0gIGlmIChtcF9zdWIgKCZ4MSwgJngwLCAmdDEpICE9IE1QX09LQVkpCi0gICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSB4MSAtIHgwICovCi0gIGlmIChtcF9zcXIgKCZ0MSwgJnQxKSAhPSBNUF9PS0FZKQotICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQxID0gKHgxIC0geDApICogKHgxIC0geDApICovCi0KLSAgLyogYWRkIHgweTAgKi8KLSAgaWYgKHNfbXBfYWRkICgmeDB4MCwgJngxeDEsICZ0MikgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB0MiA9IHgweDAgKyB4MXgxICovCi0gIGlmIChtcF9zdWIgKCZ0MiwgJnQxLCAmdDEpICE9IE1QX09LQVkpCi0gICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSB4MHgwICsgeDF4MSAtICh4MS14MCkqKHgxLXgwKSAqLwotCi0gIC8qIHNoaWZ0IGJ5IEIgKi8KLSAgaWYgKG1wX2xzaGQgKCZ0MSwgQikgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB0MSA9ICh4MHgwICsgeDF4MSAtICh4MS14MCkqKHgxLXgwKSk8PEIgKi8KLSAgaWYgKG1wX2xzaGQgKCZ4MXgxLCBCICogMikgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MXgxID0geDF4MSA8PCAyKkIgKi8KLQotICBpZiAobXBfYWRkICgmeDB4MCwgJnQxLCAmdDEpICE9IE1QX09LQVkpCi0gICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSB4MHgwICsgdDEgKi8KLSAgaWYgKG1wX2FkZCAoJnQxLCAmeDF4MSwgYikgIT0gTVBfT0tBWSkKLSAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB0MSA9IHgweDAgKyB0MSArIHgxeDEgKi8KLQotICBlcnIgPSBNUF9PS0FZOwotCi1YMVgxOm1wX2NsZWFyICgmeDF4MSk7Ci1YMFgwOm1wX2NsZWFyICgmeDB4MCk7Ci1UMjptcF9jbGVhciAoJnQyKTsKLVQxOm1wX2NsZWFyICgmdDEpOwotWDE6bXBfY2xlYXIgKCZ4MSk7Ci1YMDptcF9jbGVhciAoJngwKTsKLUVSUjoKLSAgcmV0dXJuIGVycjsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX2thcmF0c3ViYV9zcXIuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbGNtLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX0xDTV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjb21wdXRlcyBsZWFzdCBjb21tb24gbXVsdGlwbGUgYXMgfGEqYnwvKGEsIGIpICovCi1pbnQgbXBfbGNtIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQotewotICBpbnQgICAgIHJlczsKLSAgbXBfaW50ICB0MSwgdDI7Ci0KLQotICBpZiAoKHJlcyA9IG1wX2luaXRfbXVsdGkgKCZ0MSwgJnQyLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICAvKiB0MSA9IGdldCB0aGUgR0NEIG9mIHRoZSB0d28gaW5wdXRzICovCi0gIGlmICgocmVzID0gbXBfZ2NkIChhLCBiLCAmdDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfVDsKLSAgfQotCi0gIC8qIGRpdmlkZSB0aGUgc21hbGxlc3QgYnkgdGhlIEdDRCAqLwotICBpZiAobXBfY21wX21hZyhhLCBiKSA9PSBNUF9MVCkgewotICAgICAvKiBzdG9yZSBxdW90aWVudCBpbiB0MiBzdWNoIHRoYXQgdDIgKiBiIGlzIHRoZSBMQ00gKi8KLSAgICAgaWYgKChyZXMgPSBtcF9kaXYoYSwgJnQxLCAmdDIsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1Q7Ci0gICAgIH0KLSAgICAgcmVzID0gbXBfbXVsKGIsICZ0MiwgYyk7Ci0gIH0gZWxzZSB7Ci0gICAgIC8qIHN0b3JlIHF1b3RpZW50IGluIHQyIHN1Y2ggdGhhdCB0MiAqIGEgaXMgdGhlIExDTSAqLwotICAgICBpZiAoKHJlcyA9IG1wX2RpdihiLCAmdDEsICZ0MiwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfVDsKLSAgICAgfQotICAgICByZXMgPSBtcF9tdWwoYSwgJnQyLCBjKTsKLSAgfQotCi0gIC8qIGZpeCB0aGUgc2lnbiB0byBwb3NpdGl2ZSAqLwotICBjLT5zaWduID0gTVBfWlBPUzsKLQotTEJMX1Q6Ci0gIG1wX2NsZWFyX211bHRpICgmdDEsICZ0MiwgTlVMTCk7Ci0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9sY20uYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbHNoZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9MU0hEX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHNoaWZ0IGxlZnQgYSBjZXJ0YWluIGFtb3VudCBvZiBkaWdpdHMgKi8KLWludCBtcF9sc2hkIChtcF9pbnQgKiBhLCBpbnQgYikKLXsKLSAgaW50ICAgICB4LCByZXM7Ci0KLSAgLyogaWYgaXRzIGxlc3MgdGhhbiB6ZXJvIHJldHVybiAqLwotICBpZiAoYiA8PSAwKSB7Ci0gICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBncm93IHRvIGZpdCB0aGUgbmV3IGRpZ2l0cyAqLwotICBpZiAoYS0+YWxsb2MgPCBhLT51c2VkICsgYikgewotICAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGEsIGEtPnVzZWQgKyBiKSkgIT0gTVBfT0tBWSkgewotICAgICAgIHJldHVybiByZXM7Ci0gICAgIH0KLSAgfQotCi0gIHsKLSAgICByZWdpc3RlciBtcF9kaWdpdCAqdG9wLCAqYm90dG9tOwotCi0gICAgLyogaW5jcmVtZW50IHRoZSB1c2VkIGJ5IHRoZSBzaGlmdCBhbW91bnQgdGhlbiBjb3B5IHVwd2FyZHMgKi8KLSAgICBhLT51c2VkICs9IGI7Ci0KLSAgICAvKiB0b3AgKi8KLSAgICB0b3AgPSBhLT5kcCArIGEtPnVzZWQgLSAxOwotCi0gICAgLyogYmFzZSAqLwotICAgIGJvdHRvbSA9IGEtPmRwICsgYS0+dXNlZCAtIDEgLSBiOwotCi0gICAgLyogbXVjaCBsaWtlIG1wX3JzaGQgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHNsaWRpbmcgd2luZG93Ci0gICAgICogZXhjZXB0IHRoZSB3aW5kb3cgZ29lcyB0aGUgb3RoZXJ3YXkgYXJvdW5kLiAgQ29weWluZyBmcm9tCi0gICAgICogdGhlIGJvdHRvbSB0byB0aGUgdG9wLiAgc2VlIGJuX21wX3JzaGQuYyBmb3IgbW9yZSBpbmZvLgotICAgICAqLwotICAgIGZvciAoeCA9IGEtPnVzZWQgLSAxOyB4ID49IGI7IHgtLSkgewotICAgICAgKnRvcC0tID0gKmJvdHRvbS0tOwotICAgIH0KLQotICAgIC8qIHplcm8gdGhlIGxvd2VyIGRpZ2l0cyAqLwotICAgIHRvcCA9IGEtPmRwOwotICAgIGZvciAoeCA9IDA7IHggPCBiOyB4KyspIHsKLSAgICAgICp0b3ArKyA9IDA7Ci0gICAgfQotICB9Ci0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfbHNoZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9tb2QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfTU9EX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGMgPSBhIG1vZCBiLCAwIDw9IGMgPCBiICovCi1pbnQKLW1wX21vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgbXBfaW50ICB0OwotICBpbnQgICAgIHJlczsKLQotICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX2RpdiAoYSwgYiwgTlVMTCwgJnQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgbXBfY2xlYXIgKCZ0KTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgaWYgKHQuc2lnbiAhPSBiLT5zaWduKSB7Ci0gICAgcmVzID0gbXBfYWRkIChiLCAmdCwgYyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gTVBfT0tBWTsKLSAgICBtcF9leGNoICgmdCwgYyk7Ci0gIH0KLQotICBtcF9jbGVhciAoJnQpOwotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfbW9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX21vZF8yZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9NT0RfMkRfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogY2FsYyBhIHZhbHVlIG1vZCAyKipiICovCi1pbnQKLW1wX21vZF8yZCAobXBfaW50ICogYSwgaW50IGIsIG1wX2ludCAqIGMpCi17Ci0gIGludCAgICAgeCwgcmVzOwotCi0gIC8qIGlmIGIgaXMgPD0gMCB0aGVuIHplcm8gdGhlIGludCAqLwotICBpZiAoYiA8PSAwKSB7Ci0gICAgbXBfemVybyAoYyk7Ci0gICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBpZiB0aGUgbW9kdWx1cyBpcyBsYXJnZXIgdGhhbiB0aGUgdmFsdWUgdGhhbiByZXR1cm4gKi8KLSAgaWYgKGIgPj0gKGludCkgKGEtPnVzZWQgKiBESUdJVF9CSVQpKSB7Ci0gICAgcmVzID0gbXBfY29weSAoYSwgYyk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIGNvcHkgKi8KLSAgaWYgKChyZXMgPSBtcF9jb3B5IChhLCBjKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICAvKiB6ZXJvIGRpZ2l0cyBhYm92ZSB0aGUgbGFzdCBkaWdpdCBvZiB0aGUgbW9kdWx1cyAqLwotICBmb3IgKHggPSAoYiAvIERJR0lUX0JJVCkgKyAoKGIgJSBESUdJVF9CSVQpID09IDAgPyAwIDogMSk7IHggPCBjLT51c2VkOyB4KyspIHsKLSAgICBjLT5kcFt4XSA9IDA7Ci0gIH0KLSAgLyogY2xlYXIgdGhlIGRpZ2l0IHRoYXQgaXMgbm90IGNvbXBsZXRlbHkgb3V0c2lkZS9pbnNpZGUgdGhlIG1vZHVsdXMgKi8KLSAgYy0+ZHBbYiAvIERJR0lUX0JJVF0gJj0KLSAgICAobXBfZGlnaXQpICgoKChtcF9kaWdpdCkgMSkgPDwgKCgobXBfZGlnaXQpIGIpICUgRElHSVRfQklUKSkgLSAoKG1wX2RpZ2l0KSAxKSk7Ci0gIG1wX2NsYW1wIChjKTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9tb2RfMmQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbW9kX2QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfTU9EX0RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotaW50Ci1tcF9tb2RfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfZGlnaXQgKiBjKQotewotICByZXR1cm4gbXBfZGl2X2QoYSwgYiwgTlVMTCwgYyk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9tb2RfZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9NT05UR09NRVJZX0NBTENfTk9STUFMSVpBVElPTl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKgotICogc2hpZnRzIHdpdGggc3VidHJhY3Rpb25zIHdoZW4gdGhlIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gYi4KLSAqCi0gKiBUaGUgbWV0aG9kIGlzIHNsaWdodGx5IG1vZGlmaWVkIHRvIHNoaWZ0IEIgdW5jb25kaXRpb25hbGx5IHVwdG8ganVzdCB1bmRlcgotICogdGhlIGxlYWRpbmcgYml0IG9mIGIuICBUaGlzIHNhdmVzIGFsb3Qgb2YgbXVsdGlwbGUgcHJlY2lzaW9uIHNoaWZ0aW5nLgotICovCi1pbnQgbXBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24gKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCi17Ci0gIGludCAgICAgeCwgYml0cywgcmVzOwotCi0gIC8qIGhvdyBtYW55IGJpdHMgb2YgbGFzdCBkaWdpdCBkb2VzIGIgdXNlICovCi0gIGJpdHMgPSBtcF9jb3VudF9iaXRzIChiKSAlIERJR0lUX0JJVDsKLQotICBpZiAoYi0+dXNlZCA+IDEpIHsKLSAgICAgaWYgKChyZXMgPSBtcF8yZXhwdCAoYSwgKGItPnVzZWQgLSAxKSAqIERJR0lUX0JJVCArIGJpdHMgLSAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICByZXR1cm4gcmVzOwotICAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgIG1wX3NldChhLCAxKTsKLSAgICAgYml0cyA9IDE7Ci0gIH0KLQotCi0gIC8qIG5vdyBjb21wdXRlIEMgPSBBICogQiBtb2QgYiAqLwotICBmb3IgKHggPSBiaXRzIC0gMTsgeCA8IChpbnQpRElHSVRfQklUOyB4KyspIHsKLSAgICBpZiAoKHJlcyA9IG1wX211bF8yIChhLCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgaWYgKG1wX2NtcF9tYWcgKGEsIGIpICE9IE1QX0xUKSB7Ci0gICAgICBpZiAoKHJlcyA9IHNfbXBfc3ViIChhLCBiLCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgICByZXR1cm4gcmVzOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24uYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbW9udGdvbWVyeV9yZWR1Y2UuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogY29tcHV0ZXMgeFIqKi0xID09IHggKG1vZCBOKSB2aWEgTW9udGdvbWVyeSBSZWR1Y3Rpb24gKi8KLWludAotbXBfbW9udGdvbWVyeV9yZWR1Y2UgKG1wX2ludCAqIHgsIG1wX2ludCAqIG4sIG1wX2RpZ2l0IHJobykKLXsKLSAgaW50ICAgICBpeCwgcmVzLCBkaWdzOwotICBtcF9kaWdpdCBtdTsKLQotICAvKiBjYW4gdGhlIGZhc3QgcmVkdWN0aW9uIFtjb21iYV0gbWV0aG9kIGJlIHVzZWQ/Ci0gICAqCi0gICAqIE5vdGUgdGhhdCB1bmxpa2UgaW4gbXVsIHlvdSdyZSBzYWZlbHkgYWxsb3dlZCAqbGVzcyoKLSAgICogdGhhbiB0aGUgYXZhaWxhYmxlIGNvbHVtbnMgWzI1NSBwZXIgZGVmYXVsdF0gc2luY2UgY2FycmllcwotICAgKiBhcmUgZml4ZWQgdXAgaW4gdGhlIGlubmVyIGxvb3AuCi0gICAqLwotICBkaWdzID0gbi0+dXNlZCAqIDIgKyAxOwotICBpZiAoKGRpZ3MgPCBNUF9XQVJSQVkpICYmCi0gICAgICBuLT51c2VkIDwKLSAgICAgICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7Ci0gICAgcmV0dXJuIGZhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UgKHgsIG4sIHJobyk7Ci0gIH0KLQotICAvKiBncm93IHRoZSBpbnB1dCBhcyByZXF1aXJlZCAqLwotICBpZiAoeC0+YWxsb2MgPCBkaWdzKSB7Ci0gICAgaWYgKChyZXMgPSBtcF9ncm93ICh4LCBkaWdzKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gIH0KLSAgeC0+dXNlZCA9IGRpZ3M7Ci0KLSAgZm9yIChpeCA9IDA7IGl4IDwgbi0+dXNlZDsgaXgrKykgewotICAgIC8qIG11ID0gYWkgKiByaG8gbW9kIGIKLSAgICAgKgotICAgICAqIFRoZSB2YWx1ZSBvZiByaG8gbXVzdCBiZSBwcmVjYWxjdWxhdGVkIHZpYQotICAgICAqIG1vbnRnb21lcnlfc2V0dXAoKSBzdWNoIHRoYXQKLSAgICAgKiBpdCBlcXVhbHMgLTEvbjAgbW9kIGIgdGhpcyBhbGxvd3MgdGhlCi0gICAgICogZm9sbG93aW5nIGlubmVyIGxvb3AgdG8gcmVkdWNlIHRoZQotICAgICAqIGlucHV0IG9uZSBkaWdpdCBhdCBhIHRpbWUKLSAgICAgKi8KLSAgICBtdSA9IChtcF9kaWdpdCkgKCgobXBfd29yZCl4LT5kcFtpeF0pICogKChtcF93b3JkKXJobykgJiBNUF9NQVNLKTsKLQotICAgIC8qIGEgPSBhICsgbXUgKiBtICogYioqaSAqLwotICAgIHsKLSAgICAgIHJlZ2lzdGVyIGludCBpeTsKLSAgICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBuLCAqdG1weCwgdTsKLSAgICAgIHJlZ2lzdGVyIG1wX3dvcmQgcjsKLQotICAgICAgLyogYWxpYXMgZm9yIGRpZ2l0cyBvZiB0aGUgbW9kdWx1cyAqLwotICAgICAgdG1wbiA9IG4tPmRwOwotCi0gICAgICAvKiBhbGlhcyBmb3IgdGhlIGRpZ2l0cyBvZiB4IFt0aGUgaW5wdXRdICovCi0gICAgICB0bXB4ID0geC0+ZHAgKyBpeDsKLQotICAgICAgLyogc2V0IHRoZSBjYXJyeSB0byB6ZXJvICovCi0gICAgICB1ID0gMDsKLQotICAgICAgLyogTXVsdGlwbHkgYW5kIGFkZCBpbiBwbGFjZSAqLwotICAgICAgZm9yIChpeSA9IDA7IGl5IDwgbi0+dXNlZDsgaXkrKykgewotICAgICAgICAvKiBjb21wdXRlIHByb2R1Y3QgYW5kIHN1bSAqLwotICAgICAgICByICAgICAgID0gKChtcF93b3JkKW11KSAqICgobXBfd29yZCkqdG1wbisrKSArCi0gICAgICAgICAgICAgICAgICAoKG1wX3dvcmQpIHUpICsgKChtcF93b3JkKSAqIHRtcHgpOwotCi0gICAgICAgIC8qIGdldCBjYXJyeSAqLwotICAgICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7Ci0KLSAgICAgICAgLyogZml4IGRpZ2l0ICovCi0gICAgICAgICp0bXB4KysgPSAobXBfZGlnaXQpKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKLSAgICAgIH0KLSAgICAgIC8qIEF0IHRoaXMgcG9pbnQgdGhlIGl4J3RoIGRpZ2l0IG9mIHggc2hvdWxkIGJlIHplcm8gKi8KLQotCi0gICAgICAvKiBwcm9wYWdhdGUgY2FycmllcyB1cHdhcmRzIGFzIHJlcXVpcmVkKi8KLSAgICAgIHdoaWxlICh1KSB7Ci0gICAgICAgICp0bXB4ICAgKz0gdTsKLSAgICAgICAgdSAgICAgICAgPSAqdG1weCA+PiBESUdJVF9CSVQ7Ci0gICAgICAgICp0bXB4KysgJj0gTVBfTUFTSzsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBhdCB0aGlzIHBvaW50IHRoZSBuLnVzZWQndGggbGVhc3QKLSAgICogc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHggYXJlIGFsbCB6ZXJvCi0gICAqIHdoaWNoIG1lYW5zIHdlIGNhbiBzaGlmdCB4IHRvIHRoZQotICAgKiByaWdodCBieSBuLnVzZWQgZGlnaXRzIGFuZCB0aGUKLSAgICogcmVzaWR1ZSBpcyB1bmNoYW5nZWQuCi0gICAqLwotCi0gIC8qIHggPSB4L2IqKm4udXNlZCAqLwotICBtcF9jbGFtcCh4KTsKLSAgbXBfcnNoZCAoeCwgbi0+dXNlZCk7Ci0KLSAgLyogaWYgeCA+PSBuIHRoZW4geCA9IHggLSBuICovCi0gIGlmIChtcF9jbXBfbWFnICh4LCBuKSAhPSBNUF9MVCkgewotICAgIHJldHVybiBzX21wX3N1YiAoeCwgbiwgeCk7Ci0gIH0KLQotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX21vbnRnb21lcnlfcmVkdWNlLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX21vbnRnb21lcnlfc2V0dXAuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfTU9OVEdPTUVSWV9TRVRVUF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzZXR1cHMgdGhlIG1vbnRnb21lcnkgcmVkdWN0aW9uIHN0dWZmICovCi1pbnQKLW1wX21vbnRnb21lcnlfc2V0dXAgKG1wX2ludCAqIG4sIG1wX2RpZ2l0ICogcmhvKQotewotICBtcF9kaWdpdCB4LCBiOwotCi0vKiBmYXN0IGludmVyc2lvbiBtb2QgMioqawotICoKLSAqIEJhc2VkIG9uIHRoZSBmYWN0IHRoYXQKLSAqCi0gKiBYQSA9IDEgKG1vZCAyKipuKSAgPT4gIChYKDItWEEpKSBBID0gMSAobW9kIDIqKjJuKQotICogICAgICAgICAgICAgICAgICAgID0+ICAyKlgqQSAtIFgqWCpBKkEgPSAxCi0gKiAgICAgICAgICAgICAgICAgICAgPT4gIDIqKDEpIC0gKDEpICAgICA9IDEKLSAqLwotICBiID0gbi0+ZHBbMF07Ci0KLSAgaWYgKChiICYgMSkgPT0gMCkgewotICAgIHJldHVybiBNUF9WQUw7Ci0gIH0KLQotICB4ID0gKCgoYiArIDIpICYgNCkgPDwgMSkgKyBiOyAvKiBoZXJlIHgqYT09MSBtb2QgMioqNCAqLwotICB4ICo9IDIgLSBiICogeDsgICAgICAgICAgICAgICAvKiBoZXJlIHgqYT09MSBtb2QgMioqOCAqLwotI2lmICFkZWZpbmVkKE1QXzhCSVQpCi0gIHggKj0gMiAtIGIgKiB4OyAgICAgICAgICAgICAgIC8qIGhlcmUgeCphPT0xIG1vZCAyKioxNiAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChNUF82NEJJVCkgfHwgIShkZWZpbmVkKE1QXzhCSVQpIHx8IGRlZmluZWQoTVBfMTZCSVQpKQotICB4ICo9IDIgLSBiICogeDsgICAgICAgICAgICAgICAvKiBoZXJlIHgqYT09MSBtb2QgMioqMzIgKi8KLSNlbmRpZgotI2lmZGVmIE1QXzY0QklUCi0gIHggKj0gMiAtIGIgKiB4OyAgICAgICAgICAgICAgIC8qIGhlcmUgeCphPT0xIG1vZCAyKio2NCAqLwotI2VuZGlmCi0KLSAgLyogcmhvID0gLTEvbSBtb2QgYiAqLwotICAqcmhvID0gKCgobXBfd29yZCkxIDw8ICgobXBfd29yZCkgRElHSVRfQklUKSkgLSB4KSAmIE1QX01BU0s7Ci0KLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9tb250Z29tZXJ5X3NldHVwLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX211bC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9NVUxfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogaGlnaCBsZXZlbCBtdWx0aXBsaWNhdGlvbiAoaGFuZGxlcyBzaWduKSAqLwotaW50IG1wX211bCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgaW50ICAgICByZXMsIG5lZzsKLSAgbmVnID0gKGEtPnNpZ24gPT0gYi0+c2lnbikgPyBNUF9aUE9TIDogTVBfTkVHOwotCi0gIC8qIHVzZSBUb29tLUNvb2s/ICovCi0jaWZkZWYgQk5fTVBfVE9PTV9NVUxfQwotICBpZiAoTUlOIChhLT51c2VkLCBiLT51c2VkKSA+PSBUT09NX01VTF9DVVRPRkYpIHsKLSAgICByZXMgPSBtcF90b29tX211bChhLCBiLCBjKTsKLSAgfSBlbHNlIAotI2VuZGlmCi0jaWZkZWYgQk5fTVBfS0FSQVRTVUJBX01VTF9DCi0gIC8qIHVzZSBLYXJhdHN1YmE/ICovCi0gIGlmIChNSU4gKGEtPnVzZWQsIGItPnVzZWQpID49IEtBUkFUU1VCQV9NVUxfQ1VUT0ZGKSB7Ci0gICAgcmVzID0gbXBfa2FyYXRzdWJhX211bCAoYSwgYiwgYyk7Ci0gIH0gZWxzZSAKLSNlbmRpZgotICB7Ci0gICAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBtdWx0aXBsaWVyPwotICAgICAqCi0gICAgICogVGhlIGZhc3QgbXVsdGlwbGllciBjYW4gYmUgdXNlZCBpZiB0aGUgb3V0cHV0IHdpbGwgCi0gICAgICogaGF2ZSBsZXNzIHRoYW4gTVBfV0FSUkFZIGRpZ2l0cyBhbmQgdGhlIG51bWJlciBvZiAKLSAgICAgKiBkaWdpdHMgd29uJ3QgYWZmZWN0IGNhcnJ5IHByb3BhZ2F0aW9uCi0gICAgICovCi0gICAgaW50ICAgICBkaWdzID0gYS0+dXNlZCArIGItPnVzZWQgKyAxOwotCi0jaWZkZWYgQk5fRkFTVF9TX01QX01VTF9ESUdTX0MKLSAgICBpZiAoKGRpZ3MgPCBNUF9XQVJSQVkpICYmCi0gICAgICAgIE1JTihhLT51c2VkLCBiLT51c2VkKSA8PSAKLSAgICAgICAgKDEgPDwgKChDSEFSX0JJVCAqIHNpemVvZiAobXBfd29yZCkpIC0gKDIgKiBESUdJVF9CSVQpKSkpIHsKLSAgICAgIHJlcyA9IGZhc3Rfc19tcF9tdWxfZGlncyAoYSwgYiwgYywgZGlncyk7Ci0gICAgfSBlbHNlIAotI2VuZGlmCi0jaWZkZWYgQk5fU19NUF9NVUxfRElHU19DCi0gICAgICByZXMgPSBzX21wX211bCAoYSwgYiwgYyk7IC8qIHVzZXMgc19tcF9tdWxfZGlncyAqLwotI2Vsc2UKLSAgICAgIHJlcyA9IE1QX1ZBTDsKLSNlbmRpZgotCi0gIH0KLSAgYy0+c2lnbiA9IChjLT51c2VkID4gMCkgPyBuZWcgOiBNUF9aUE9TOwotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfbXVsLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX211bF8yLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX01VTF8yX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGIgPSBhKjIgKi8KLWludCBtcF9tdWxfMihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQotewotICBpbnQgICAgIHgsIHJlcywgb2xkdXNlZDsKLQotICAvKiBncm93IHRvIGFjY29tb2RhdGUgcmVzdWx0ICovCi0gIGlmIChiLT5hbGxvYyA8IGEtPnVzZWQgKyAxKSB7Ci0gICAgaWYgKChyZXMgPSBtcF9ncm93IChiLCBhLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgb2xkdXNlZCA9IGItPnVzZWQ7Ci0gIGItPnVzZWQgPSBhLT51c2VkOwotCi0gIHsKLSAgICByZWdpc3RlciBtcF9kaWdpdCByLCByciwgKnRtcGEsICp0bXBiOwotCi0gICAgLyogYWxpYXMgZm9yIHNvdXJjZSAqLwotICAgIHRtcGEgPSBhLT5kcDsKLSAgICAKLSAgICAvKiBhbGlhcyBmb3IgZGVzdCAqLwotICAgIHRtcGIgPSBiLT5kcDsKLQotICAgIC8qIGNhcnJ5ICovCi0gICAgciA9IDA7Ci0gICAgZm9yICh4ID0gMDsgeCA8IGEtPnVzZWQ7IHgrKykgewotICAgIAotICAgICAgLyogZ2V0IHdoYXQgd2lsbCBiZSB0aGUgKm5leHQqIGNhcnJ5IGJpdCBmcm9tIHRoZSAKLSAgICAgICAqIE1TQiBvZiB0aGUgY3VycmVudCBkaWdpdCAKLSAgICAgICAqLwotICAgICAgcnIgPSAqdG1wYSA+PiAoKG1wX2RpZ2l0KShESUdJVF9CSVQgLSAxKSk7Ci0gICAgICAKLSAgICAgIC8qIG5vdyBzaGlmdCB1cCB0aGlzIGRpZ2l0LCBhZGQgaW4gdGhlIGNhcnJ5IFtmcm9tIHRoZSBwcmV2aW91c10gKi8KLSAgICAgICp0bXBiKysgPSAoKCp0bXBhKysgPDwgKChtcF9kaWdpdCkxKSkgfCByKSAmIE1QX01BU0s7Ci0gICAgICAKLSAgICAgIC8qIGNvcHkgdGhlIGNhcnJ5IHRoYXQgd291bGQgYmUgZnJvbSB0aGUgc291cmNlIAotICAgICAgICogZGlnaXQgaW50byB0aGUgbmV4dCBpdGVyYXRpb24gCi0gICAgICAgKi8KLSAgICAgIHIgPSBycjsKLSAgICB9Ci0KLSAgICAvKiBuZXcgbGVhZGluZyBkaWdpdD8gKi8KLSAgICBpZiAociAhPSAwKSB7Ci0gICAgICAvKiBhZGQgYSBNU0Igd2hpY2ggaXMgYWx3YXlzIDEgYXQgdGhpcyBwb2ludCAqLwotICAgICAgKnRtcGIgPSAxOwotICAgICAgKysoYi0+dXNlZCk7Ci0gICAgfQotCi0gICAgLyogbm93IHplcm8gYW55IGV4Y2VzcyBkaWdpdHMgb24gdGhlIGRlc3RpbmF0aW9uIAotICAgICAqIHRoYXQgd2UgZGlkbid0IHdyaXRlIHRvIAotICAgICAqLwotICAgIHRtcGIgPSBiLT5kcCArIGItPnVzZWQ7Ci0gICAgZm9yICh4ID0gYi0+dXNlZDsgeCA8IG9sZHVzZWQ7IHgrKykgewotICAgICAgKnRtcGIrKyA9IDA7Ci0gICAgfQotICB9Ci0gIGItPnNpZ24gPSBhLT5zaWduOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX211bF8yLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX211bF8yZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9NVUxfMkRfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc2hpZnQgbGVmdCBieSBhIGNlcnRhaW4gYml0IGNvdW50ICovCi1pbnQgbXBfbXVsXzJkIChtcF9pbnQgKiBhLCBpbnQgYiwgbXBfaW50ICogYykKLXsKLSAgbXBfZGlnaXQgZDsKLSAgaW50ICAgICAgcmVzOwotCi0gIC8qIGNvcHkgKi8KLSAgaWYgKGEgIT0gYykgewotICAgICBpZiAoKHJlcyA9IG1wX2NvcHkgKGEsIGMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgcmV0dXJuIHJlczsKLSAgICAgfQotICB9Ci0KLSAgaWYgKGMtPmFsbG9jIDwgKGludCkoYy0+dXNlZCArIGIvRElHSVRfQklUICsgMSkpIHsKLSAgICAgaWYgKChyZXMgPSBtcF9ncm93IChjLCBjLT51c2VkICsgYiAvIERJR0lUX0JJVCArIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgcmV0dXJuIHJlczsKLSAgICAgfQotICB9Ci0KLSAgLyogc2hpZnQgYnkgYXMgbWFueSBkaWdpdHMgaW4gdGhlIGJpdCBjb3VudCAqLwotICBpZiAoYiA+PSAoaW50KURJR0lUX0JJVCkgewotICAgIGlmICgocmVzID0gbXBfbHNoZCAoYywgYiAvIERJR0lUX0JJVCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgLyogc2hpZnQgYW55IGJpdCBjb3VudCA8IERJR0lUX0JJVCAqLwotICBkID0gKG1wX2RpZ2l0KSAoYiAlIERJR0lUX0JJVCk7Ci0gIGlmIChkICE9IDApIHsKLSAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1wYywgc2hpZnQsIG1hc2ssIHIsIHJyOwotICAgIHJlZ2lzdGVyIGludCB4OwotCi0gICAgLyogYml0bWFzayBmb3IgY2FycmllcyAqLwotICAgIG1hc2sgPSAoKChtcF9kaWdpdCkxKSA8PCBkKSAtIDE7Ci0KLSAgICAvKiBzaGlmdCBmb3IgbXNicyAqLwotICAgIHNoaWZ0ID0gRElHSVRfQklUIC0gZDsKLQotICAgIC8qIGFsaWFzICovCi0gICAgdG1wYyA9IGMtPmRwOwotCi0gICAgLyogY2FycnkgKi8KLSAgICByICAgID0gMDsKLSAgICBmb3IgKHggPSAwOyB4IDwgYy0+dXNlZDsgeCsrKSB7Ci0gICAgICAvKiBnZXQgdGhlIGhpZ2hlciBiaXRzIG9mIHRoZSBjdXJyZW50IHdvcmQgKi8KLSAgICAgIHJyID0gKCp0bXBjID4+IHNoaWZ0KSAmIG1hc2s7Ci0KLSAgICAgIC8qIHNoaWZ0IHRoZSBjdXJyZW50IHdvcmQgYW5kIE9SIGluIHRoZSBjYXJyeSAqLwotICAgICAgKnRtcGMgPSAoKCp0bXBjIDw8IGQpIHwgcikgJiBNUF9NQVNLOwotICAgICAgKyt0bXBjOwotCi0gICAgICAvKiBzZXQgdGhlIGNhcnJ5IHRvIHRoZSBjYXJyeSBiaXRzIG9mIHRoZSBjdXJyZW50IHdvcmQgKi8KLSAgICAgIHIgPSBycjsKLSAgICB9Ci0gICAgCi0gICAgLyogc2V0IGZpbmFsIGNhcnJ5ICovCi0gICAgaWYgKHIgIT0gMCkgewotICAgICAgIGMtPmRwWyhjLT51c2VkKSsrXSA9IHI7Ci0gICAgfQotICB9Ci0gIG1wX2NsYW1wIChjKTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9tdWxfMmQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbXVsX2QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfTVVMX0RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogbXVsdGlwbHkgYnkgYSBkaWdpdCAqLwotaW50Ci1tcF9tdWxfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKLXsKLSAgbXBfZGlnaXQgdSwgKnRtcGEsICp0bXBjOwotICBtcF93b3JkICByOwotICBpbnQgICAgICBpeCwgcmVzLCBvbGR1c2U7Ci0KLSAgLyogbWFrZSBzdXJlIGMgaXMgYmlnIGVub3VnaCB0byBob2xkIGEqYiAqLwotICBpZiAoYy0+YWxsb2MgPCBhLT51c2VkICsgMSkgewotICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgYS0+dXNlZCArIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgfQotCi0gIC8qIGdldCB0aGUgb3JpZ2luYWwgZGVzdGluYXRpb25zIHVzZWQgY291bnQgKi8KLSAgb2xkdXNlID0gYy0+dXNlZDsKLQotICAvKiBzZXQgdGhlIHNpZ24gKi8KLSAgYy0+c2lnbiA9IGEtPnNpZ247Ci0KLSAgLyogYWxpYXMgZm9yIGEtPmRwIFtzb3VyY2VdICovCi0gIHRtcGEgPSBhLT5kcDsKLQotICAvKiBhbGlhcyBmb3IgYy0+ZHAgW2Rlc3RdICovCi0gIHRtcGMgPSBjLT5kcDsKLQotICAvKiB6ZXJvIGNhcnJ5ICovCi0gIHUgPSAwOwotCi0gIC8qIGNvbXB1dGUgY29sdW1ucyAqLwotICBmb3IgKGl4ID0gMDsgaXggPCBhLT51c2VkOyBpeCsrKSB7Ci0gICAgLyogY29tcHV0ZSBwcm9kdWN0IGFuZCBjYXJyeSBzdW0gZm9yIHRoaXMgdGVybSAqLwotICAgIHIgICAgICAgPSAoKG1wX3dvcmQpIHUpICsgKChtcF93b3JkKSp0bXBhKyspICogKChtcF93b3JkKWIpOwotCi0gICAgLyogbWFzayBvZmYgaGlnaGVyIGJpdHMgdG8gZ2V0IGEgc2luZ2xlIGRpZ2l0ICovCi0gICAgKnRtcGMrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKLQotICAgIC8qIHNlbmQgY2FycnkgaW50byBuZXh0IGl0ZXJhdGlvbiAqLwotICAgIHUgICAgICAgPSAobXBfZGlnaXQpIChyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7Ci0gIH0KLQotICAvKiBzdG9yZSBmaW5hbCBjYXJyeSBbaWYgYW55XSBhbmQgaW5jcmVtZW50IGl4IG9mZnNldCAgKi8KLSAgKnRtcGMrKyA9IHU7Ci0gICsraXg7Ci0KLSAgLyogbm93IHplcm8gZGlnaXRzIGFib3ZlIHRoZSB0b3AgKi8KLSAgd2hpbGUgKGl4KysgPCBvbGR1c2UpIHsKLSAgICAgKnRtcGMrKyA9IDA7Ci0gIH0KLQotICAvKiBzZXQgdXNlZCBjb3VudCAqLwotICBjLT51c2VkID0gYS0+dXNlZCArIDE7Ci0gIG1wX2NsYW1wKGMpOwotCi0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfbXVsX2QuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbXVsbW9kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX01VTE1PRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBkID0gYSAqIGIgKG1vZCBjKSAqLwotaW50Ci1tcF9tdWxtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCi17Ci0gIGludCAgICAgcmVzOwotICBtcF9pbnQgIHQ7Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgaWYgKChyZXMgPSBtcF9tdWwgKGEsIGIsICZ0KSkgIT0gTVBfT0tBWSkgewotICAgIG1wX2NsZWFyICgmdCk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotICByZXMgPSBtcF9tb2QgKCZ0LCBjLCBkKTsKLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX211bG1vZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9uX3Jvb3QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfTl9ST09UX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGZpbmQgdGhlIG4ndGggcm9vdCBvZiBhbiBpbnRlZ2VyIAotICoKLSAqIFJlc3VsdCBmb3VuZCBzdWNoIHRoYXQgKGMpKipiIDw9IGEgYW5kIChjKzEpKipiID4gYSAKLSAqCi0gKiBUaGlzIGFsZ29yaXRobSB1c2VzIE5ld3RvbidzIGFwcHJveGltYXRpb24gCi0gKiB4W2krMV0gPSB4W2ldIC0gZih4W2ldKS9mJyh4W2ldKSAKLSAqIHdoaWNoIHdpbGwgZmluZCB0aGUgcm9vdCBpbiBsb2coTikgdGltZSB3aGVyZSAKLSAqIGVhY2ggc3RlcCBpbnZvbHZlcyBhIGZhaXIgYml0LiAgVGhpcyBpcyBub3QgbWVhbnQgdG8gCi0gKiBmaW5kIGh1Z2Ugcm9vdHMgW3NxdWFyZSBhbmQgY3ViZSwgZXRjXS4KLSAqLwotaW50IG1wX25fcm9vdCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKLXsKLSAgbXBfaW50ICB0MSwgdDIsIHQzOwotICBpbnQgICAgIHJlcywgbmVnOwotCi0gIC8qIGlucHV0IG11c3QgYmUgcG9zaXRpdmUgaWYgYiBpcyBldmVuICovCi0gIGlmICgoYiAmIDEpID09IDAgJiYgYS0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfaW5pdCAoJnQyKSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX1QxOwotICB9Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfVDI7Ci0gIH0KLQotICAvKiBpZiBhIGlzIG5lZ2F0aXZlIGZ1ZGdlIHRoZSBzaWduIGJ1dCBrZWVwIHRyYWNrICovCi0gIG5lZyAgICAgPSBhLT5zaWduOwotICBhLT5zaWduID0gTVBfWlBPUzsKLQotICAvKiB0MiA9IDIgKi8KLSAgbXBfc2V0ICgmdDIsIDIpOwotCi0gIGRvIHsKLSAgICAvKiB0MSA9IHQyICovCi0gICAgaWYgKChyZXMgPSBtcF9jb3B5ICgmdDIsICZ0MSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX1QzOwotICAgIH0KLQotICAgIC8qIHQyID0gdDEgLSAoKHQxKipiIC0gYSkgLyAoYiAqIHQxKiooYi0xKSkpICovCi0gICAgCi0gICAgLyogdDMgPSB0MSoqKGItMSkgKi8KLSAgICBpZiAoKHJlcyA9IG1wX2V4cHRfZCAoJnQxLCBiIC0gMSwgJnQzKSkgIT0gTVBfT0tBWSkgeyAgIAotICAgICAgZ290byBMQkxfVDM7Ci0gICAgfQotCi0gICAgLyogbnVtZXJhdG9yICovCi0gICAgLyogdDIgPSB0MSoqYiAqLwotICAgIGlmICgocmVzID0gbXBfbXVsICgmdDMsICZ0MSwgJnQyKSkgIT0gTVBfT0tBWSkgeyAgICAKLSAgICAgIGdvdG8gTEJMX1QzOwotICAgIH0KLQotICAgIC8qIHQyID0gdDEqKmIgLSBhICovCi0gICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ0MiwgYSwgJnQyKSkgIT0gTVBfT0tBWSkgeyAgCi0gICAgICBnb3RvIExCTF9UMzsKLSAgICB9Ci0KLSAgICAvKiBkZW5vbWluYXRvciAqLwotICAgIC8qIHQzID0gdDEqKihiLTEpICogYiAgKi8KLSAgICBpZiAoKHJlcyA9IG1wX211bF9kICgmdDMsIGIsICZ0MykpICE9IE1QX09LQVkpIHsgICAgCi0gICAgICBnb3RvIExCTF9UMzsKLSAgICB9Ci0KLSAgICAvKiB0MyA9ICh0MSoqYiAtIGEpLyhiICogdDEqKihiLTEpKSAqLwotICAgIGlmICgocmVzID0gbXBfZGl2ICgmdDIsICZ0MywgJnQzLCBOVUxMKSkgIT0gTVBfT0tBWSkgeyAgCi0gICAgICBnb3RvIExCTF9UMzsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnQxLCAmdDMsICZ0MikpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX1QzOwotICAgIH0KLSAgfSAgd2hpbGUgKG1wX2NtcCAoJnQxLCAmdDIpICE9IE1QX0VRKTsKLQotICAvKiByZXN1bHQgY2FuIGJlIG9mZiBieSBhIGZldyBzbyBjaGVjayAqLwotICBmb3IgKDs7KSB7Ci0gICAgaWYgKChyZXMgPSBtcF9leHB0X2QgKCZ0MSwgYiwgJnQyKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfVDM7Ci0gICAgfQotCi0gICAgaWYgKG1wX2NtcCAoJnQyLCBhKSA9PSBNUF9HVCkgewotICAgICAgaWYgKChyZXMgPSBtcF9zdWJfZCAoJnQxLCAxLCAmdDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICBnb3RvIExCTF9UMzsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogcmVzZXQgdGhlIHNpZ24gb2YgYSBmaXJzdCAqLwotICBhLT5zaWduID0gbmVnOwotCi0gIC8qIHNldCB0aGUgcmVzdWx0ICovCi0gIG1wX2V4Y2ggKCZ0MSwgYyk7Ci0KLSAgLyogc2V0IHRoZSBzaWduIG9mIHRoZSByZXN1bHQgKi8KLSAgYy0+c2lnbiA9IG5lZzsKLQotICByZXMgPSBNUF9PS0FZOwotCi1MQkxfVDM6bXBfY2xlYXIgKCZ0Myk7Ci1MQkxfVDI6bXBfY2xlYXIgKCZ0Mik7Ci1MQkxfVDE6bXBfY2xlYXIgKCZ0MSk7Ci0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9uX3Jvb3QuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfbmVnLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX05FR19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBiID0gLWEgKi8KLWludCBtcF9uZWcgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCi17Ci0gIGludCAgICAgcmVzOwotICBpZiAoYSAhPSBiKSB7Ci0gICAgIGlmICgocmVzID0gbXBfY29weSAoYSwgYikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgfQotICB9Ci0KLSAgaWYgKG1wX2lzemVybyhiKSAhPSBNUF9ZRVMpIHsKLSAgICAgYi0+c2lnbiA9IChhLT5zaWduID09IE1QX1pQT1MpID8gTVBfTkVHIDogTVBfWlBPUzsKLSAgfSBlbHNlIHsKLSAgICAgYi0+c2lnbiA9IE1QX1pQT1M7Ci0gIH0KLQotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX25lZy5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9vci5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9PUl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBPUiB0d28gaW50cyB0b2dldGhlciAqLwotaW50IG1wX29yIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQotewotICBpbnQgICAgIHJlcywgaXgsIHB4OwotICBtcF9pbnQgIHQsICp4OwotCi0gIGlmIChhLT51c2VkID4gYi0+dXNlZCkgewotICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgIHB4ID0gYi0+dXNlZDsKLSAgICB4ID0gYjsKLSAgfSBlbHNlIHsKLSAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBweCA9IGEtPnVzZWQ7Ci0gICAgeCA9IGE7Ci0gIH0KLQotICBmb3IgKGl4ID0gMDsgaXggPCBweDsgaXgrKykgewotICAgIHQuZHBbaXhdIHw9IHgtPmRwW2l4XTsKLSAgfQotICBtcF9jbGFtcCAoJnQpOwotICBtcF9leGNoIChjLCAmdCk7Ci0gIG1wX2NsZWFyICgmdCk7Ci0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfb3IuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcHJpbWVfZmVybWF0LmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1BSSU1FX0ZFUk1BVF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBwZXJmb3JtcyBvbmUgRmVybWF0IHRlc3QuCi0gKiAKLSAqIElmICJhIiB3ZXJlIHByaW1lIHRoZW4gYioqYSA9PSBiIChtb2QgYSkgc2luY2UgdGhlIG9yZGVyIG9mCi0gKiB0aGUgbXVsdGlwbGljYXRpdmUgc3ViLWdyb3VwIHdvdWxkIGJlIHBoaShhKSA9IGEtMS4gIFRoYXQgbWVhbnMKLSAqIGl0IHdvdWxkIGJlIHRoZSBzYW1lIGFzIGIqKihhIG1vZCAoYS0xKSkgPT0gYioqMSA9PSBiIChtb2QgYSkuCi0gKgotICogU2V0cyByZXN1bHQgdG8gMSBpZiB0aGUgY29uZ3J1ZW5jZSBob2xkcywgb3IgemVybyBvdGhlcndpc2UuCi0gKi8KLWludCBtcF9wcmltZV9mZXJtYXQgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIGludCAqcmVzdWx0KQotewotICBtcF9pbnQgIHQ7Ci0gIGludCAgICAgZXJyOwotCi0gIC8qIGRlZmF1bHQgdG8gY29tcG9zaXRlICAqLwotICAqcmVzdWx0ID0gTVBfTk87Ci0KLSAgLyogZW5zdXJlIGIgPiAxICovCi0gIGlmIChtcF9jbXBfZChiLCAxKSAhPSBNUF9HVCkgewotICAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogaW5pdCB0ICovCi0gIGlmICgoZXJyID0gbXBfaW5pdCAoJnQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotCi0gIC8qIGNvbXB1dGUgdCA9IGIqKmEgbW9kIGEgKi8KLSAgaWYgKChlcnIgPSBtcF9leHB0bW9kIChiLCBhLCBhLCAmdCkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9UOwotICB9Ci0KLSAgLyogaXMgaXQgZXF1YWwgdG8gYj8gKi8KLSAgaWYgKG1wX2NtcCAoJnQsIGIpID09IE1QX0VRKSB7Ci0gICAgKnJlc3VsdCA9IE1QX1lFUzsKLSAgfQotCi0gIGVyciA9IE1QX09LQVk7Ci1MQkxfVDptcF9jbGVhciAoJnQpOwotICByZXR1cm4gZXJyOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfcHJpbWVfZmVybWF0LmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3ByaW1lX2lzX2RpdmlzaWJsZS5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9QUklNRV9JU19ESVZJU0lCTEVfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogZGV0ZXJtaW5lcyBpZiBhbiBpbnRlZ2VycyBpcyBkaXZpc2libGUgYnkgb25lIAotICogb2YgdGhlIGZpcnN0IFBSSU1FX1NJWkUgcHJpbWVzIG9yIG5vdAotICoKLSAqIHNldHMgcmVzdWx0IHRvIDAgaWYgbm90LCAxIGlmIHllcwotICovCi1pbnQgbXBfcHJpbWVfaXNfZGl2aXNpYmxlIChtcF9pbnQgKiBhLCBpbnQgKnJlc3VsdCkKLXsKLSAgaW50ICAgICBlcnIsIGl4OwotICBtcF9kaWdpdCByZXM7Ci0KLSAgLyogZGVmYXVsdCB0byBub3QgKi8KLSAgKnJlc3VsdCA9IE1QX05POwotCi0gIGZvciAoaXggPSAwOyBpeCA8IFBSSU1FX1NJWkU7IGl4KyspIHsKLSAgICAvKiB3aGF0IGlzIGEgbW9kIExCTF9wcmltZV90YWJbaXhdICovCi0gICAgaWYgKChlcnIgPSBtcF9tb2RfZCAoYSwgbHRtX3ByaW1lX3RhYltpeF0sICZyZXMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8qIGlzIHRoZSByZXNpZHVlIHplcm8/ICovCi0gICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAqcmVzdWx0ID0gTVBfWUVTOwotICAgICAgcmV0dXJuIE1QX09LQVk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9wcmltZV9pc19kaXZpc2libGUuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcHJpbWVfaXNfcHJpbWUuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogcGVyZm9ybXMgYSB2YXJpYWJsZSBudW1iZXIgb2Ygcm91bmRzIG9mIE1pbGxlci1SYWJpbgotICoKLSAqIFByb2JhYmlsaXR5IG9mIGVycm9yIGFmdGVyIHQgcm91bmRzIGlzIG5vIG1vcmUgdGhhbgotCi0gKgotICogU2V0cyByZXN1bHQgdG8gMSBpZiBwcm9iYWJseSBwcmltZSwgMCBvdGhlcndpc2UKLSAqLwotaW50IG1wX3ByaW1lX2lzX3ByaW1lIChtcF9pbnQgKiBhLCBpbnQgdCwgaW50ICpyZXN1bHQpCi17Ci0gIG1wX2ludCAgYjsKLSAgaW50ICAgICBpeCwgZXJyLCByZXM7Ci0KLSAgLyogZGVmYXVsdCB0byBubyAqLwotICAqcmVzdWx0ID0gTVBfTk87Ci0KLSAgLyogdmFsaWQgdmFsdWUgb2YgdD8gKi8KLSAgaWYgKHQgPD0gMCB8fCB0ID4gUFJJTUVfU0laRSkgewotICAgIHJldHVybiBNUF9WQUw7Ci0gIH0KLQotICAvKiBpcyB0aGUgaW5wdXQgZXF1YWwgdG8gb25lIG9mIHRoZSBwcmltZXMgaW4gdGhlIHRhYmxlPyAqLwotICBmb3IgKGl4ID0gMDsgaXggPCBQUklNRV9TSVpFOyBpeCsrKSB7Ci0gICAgICBpZiAobXBfY21wX2QoYSwgbHRtX3ByaW1lX3RhYltpeF0pID09IE1QX0VRKSB7Ci0gICAgICAgICAqcmVzdWx0ID0gMTsKLSAgICAgICAgIHJldHVybiBNUF9PS0FZOwotICAgICAgfQotICB9Ci0KLSAgLyogZmlyc3QgcGVyZm9ybSB0cmlhbCBkaXZpc2lvbiAqLwotICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX2RpdmlzaWJsZSAoYSwgJnJlcykpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0KLSAgLyogcmV0dXJuIGlmIGl0IHdhcyB0cml2aWFsbHkgZGl2aXNpYmxlICovCi0gIGlmIChyZXMgPT0gTVBfWUVTKSB7Ci0gICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICAvKiBub3cgcGVyZm9ybSB0aGUgbWlsbGVyLXJhYmluIHJvdW5kcyAqLwotICBpZiAoKGVyciA9IG1wX2luaXQgKCZiKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiBlcnI7Ci0gIH0KLQotICBmb3IgKGl4ID0gMDsgaXggPCB0OyBpeCsrKSB7Ci0gICAgLyogc2V0IHRoZSBwcmltZSAqLwotICAgIG1wX3NldCAoJmIsIGx0bV9wcmltZV90YWJbaXhdKTsKLQotICAgIGlmICgoZXJyID0gbXBfcHJpbWVfbWlsbGVyX3JhYmluIChhLCAmYiwgJnJlcykpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX0I7Ci0gICAgfQotCi0gICAgaWYgKHJlcyA9PSBNUF9OTykgewotICAgICAgZ290byBMQkxfQjsKLSAgICB9Ci0gIH0KLQotICAvKiBwYXNzZWQgdGhlIHRlc3QgKi8KLSAgKnJlc3VsdCA9IE1QX1lFUzsKLUxCTF9COm1wX2NsZWFyICgmYik7Ci0gIHJldHVybiBlcnI7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9wcmltZV9pc19wcmltZS5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9wcmltZV9taWxsZXJfcmFiaW4uYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUFJJTUVfTUlMTEVSX1JBQklOX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIE1pbGxlci1SYWJpbiB0ZXN0IG9mICJhIiB0byB0aGUgYmFzZSBvZiAiYiIgYXMgZGVzY3JpYmVkIGluIAotICogSEFDIHBwLiAxMzkgQWxnb3JpdGhtIDQuMjQKLSAqCi0gKiBTZXRzIHJlc3VsdCB0byAwIGlmIGRlZmluaXRlbHkgY29tcG9zaXRlIG9yIDEgaWYgcHJvYmFibHkgcHJpbWUuCi0gKiBSYW5kb21seSB0aGUgY2hhbmNlIG9mIGVycm9yIGlzIG5vIG1vcmUgdGhhbiAxLzQgYW5kIG9mdGVuIAotICogdmVyeSBtdWNoIGxvd2VyLgotICovCi1pbnQgbXBfcHJpbWVfbWlsbGVyX3JhYmluIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKLXsKLSAgbXBfaW50ICBuMSwgeSwgcjsKLSAgaW50ICAgICBzLCBqLCBlcnI7Ci0KLSAgLyogZGVmYXVsdCAqLwotICAqcmVzdWx0ID0gTVBfTk87Ci0KLSAgLyogZW5zdXJlIGIgPiAxICovCi0gIGlmIChtcF9jbXBfZChiLCAxKSAhPSBNUF9HVCkgewotICAgICByZXR1cm4gTVBfVkFMOwotICB9ICAgICAKLQotICAvKiBnZXQgbjEgPSBhIC0gMSAqLwotICBpZiAoKGVyciA9IG1wX2luaXRfY29weSAoJm4xLCBhKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiBlcnI7Ci0gIH0KLSAgaWYgKChlcnIgPSBtcF9zdWJfZCAoJm4xLCAxLCAmbjEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfTjE7Ci0gIH0KLQotICAvKiBzZXQgMioqcyAqIHIgPSBuMSAqLwotICBpZiAoKGVyciA9IG1wX2luaXRfY29weSAoJnIsICZuMSkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9OMTsKLSAgfQotCi0gIC8qIGNvdW50IHRoZSBudW1iZXIgb2YgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cwotICAgKiB3aGljaCBhcmUgemVybwotICAgKi8KLSAgcyA9IG1wX2NudF9sc2IoJnIpOwotCi0gIC8qIG5vdyBkaXZpZGUgbiAtIDEgYnkgMioqcyAqLwotICBpZiAoKGVyciA9IG1wX2Rpdl8yZCAoJnIsIHMsICZyLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gTEJMX1I7Ci0gIH0KLQotICAvKiBjb21wdXRlIHkgPSBiKipyIG1vZCBhICovCi0gIGlmICgoZXJyID0gbXBfaW5pdCAoJnkpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfUjsKLSAgfQotICBpZiAoKGVyciA9IG1wX2V4cHRtb2QgKGIsICZyLCBhLCAmeSkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9ZOwotICB9Ci0KLSAgLyogaWYgeSAhPSAxIGFuZCB5ICE9IG4xIGRvICovCi0gIGlmIChtcF9jbXBfZCAoJnksIDEpICE9IE1QX0VRICYmIG1wX2NtcCAoJnksICZuMSkgIT0gTVBfRVEpIHsKLSAgICBqID0gMTsKLSAgICAvKiB3aGlsZSBqIDw9IHMtMSBhbmQgeSAhPSBuMSAqLwotICAgIHdoaWxlICgoaiA8PSAocyAtIDEpKSAmJiBtcF9jbXAgKCZ5LCAmbjEpICE9IE1QX0VRKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX3Nxcm1vZCAoJnksIGEsICZ5KSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgZ290byBMQkxfWTsKLSAgICAgIH0KLQotICAgICAgLyogaWYgeSA9PSAxIHRoZW4gY29tcG9zaXRlICovCi0gICAgICBpZiAobXBfY21wX2QgKCZ5LCAxKSA9PSBNUF9FUSkgewotICAgICAgICAgZ290byBMQkxfWTsKLSAgICAgIH0KLQotICAgICAgKytqOwotICAgIH0KLQotICAgIC8qIGlmIHkgIT0gbjEgdGhlbiBjb21wb3NpdGUgKi8KLSAgICBpZiAobXBfY21wICgmeSwgJm4xKSAhPSBNUF9FUSkgewotICAgICAgZ290byBMQkxfWTsKLSAgICB9Ci0gIH0KLQotICAvKiBwcm9iYWJseSBwcmltZSBub3cgKi8KLSAgKnJlc3VsdCA9IE1QX1lFUzsKLUxCTF9ZOm1wX2NsZWFyICgmeSk7Ci1MQkxfUjptcF9jbGVhciAoJnIpOwotTEJMX04xOm1wX2NsZWFyICgmbjEpOwotICByZXR1cm4gZXJyOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3ByaW1lX25leHRfcHJpbWUuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUFJJTUVfTkVYVF9QUklNRV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBmaW5kcyB0aGUgbmV4dCBwcmltZSBhZnRlciB0aGUgbnVtYmVyICJhIiB1c2luZyAidCIgdHJpYWxzCi0gKiBvZiBNaWxsZXItUmFiaW4uCi0gKgotICogYmJzX3N0eWxlID0gMSBtZWFucyB0aGUgcHJpbWUgbXVzdCBiZSBjb25ncnVlbnQgdG8gMyBtb2QgNAotICovCi1pbnQgbXBfcHJpbWVfbmV4dF9wcmltZShtcF9pbnQgKmEsIGludCB0LCBpbnQgYmJzX3N0eWxlKQotewotICAgaW50ICAgICAgZXJyLCByZXMsIHgsIHk7Ci0gICBtcF9kaWdpdCByZXNfdGFiW1BSSU1FX1NJWkVdLCBzdGVwLCBrc3RlcDsKLSAgIG1wX2ludCAgIGI7Ci0KLSAgIC8qIGVuc3VyZSB0IGlzIHZhbGlkICovCi0gICBpZiAodCA8PSAwIHx8IHQgPiBQUklNRV9TSVpFKSB7Ci0gICAgICByZXR1cm4gTVBfVkFMOwotICAgfQotCi0gICAvKiBmb3JjZSBwb3NpdGl2ZSAqLwotICAgYS0+c2lnbiA9IE1QX1pQT1M7Ci0KLSAgIC8qIHNpbXBsZSBhbGdvIGlmIGEgaXMgbGVzcyB0aGFuIHRoZSBsYXJnZXN0IHByaW1lIGluIHRoZSB0YWJsZSAqLwotICAgaWYgKG1wX2NtcF9kKGEsIGx0bV9wcmltZV90YWJbUFJJTUVfU0laRS0xXSkgPT0gTVBfTFQpIHsKLSAgICAgIC8qIGZpbmQgd2hpY2ggcHJpbWUgaXQgaXMgYmlnZ2VyIHRoYW4gKi8KLSAgICAgIGZvciAoeCA9IFBSSU1FX1NJWkUgLSAyOyB4ID49IDA7IHgtLSkgewotICAgICAgICAgIGlmIChtcF9jbXBfZChhLCBsdG1fcHJpbWVfdGFiW3hdKSAhPSBNUF9MVCkgewotICAgICAgICAgICAgIGlmIChiYnNfc3R5bGUgPT0gMSkgewotICAgICAgICAgICAgICAgIC8qIG9rIHdlIGZvdW5kIGEgcHJpbWUgc21hbGxlciBvcgotICAgICAgICAgICAgICAgICAqIGVxdWFsIFtzbyB0aGUgbmV4dCBpcyBsYXJnZXJdCi0gICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgKiBob3dldmVyLCB0aGUgcHJpbWUgbXVzdCBiZQotICAgICAgICAgICAgICAgICAqIGNvbmdydWVudCB0byAzIG1vZCA0Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKChsdG1fcHJpbWVfdGFiW3ggKyAxXSAmIDMpICE9IDMpIHsKLSAgICAgICAgICAgICAgICAgICAvKiBzY2FuIHVwd2FyZHMgZm9yIGEgcHJpbWUgY29uZ3J1ZW50IHRvIDMgbW9kIDQgKi8KLSAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSB4ICsgMTsgeSA8IFBSSU1FX1NJWkU7IHkrKykgewotICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGx0bV9wcmltZV90YWJbeV0gJiAzKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG1wX3NldChhLCBsdG1fcHJpbWVfdGFiW3ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1QX09LQVk7Ci0gICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbXBfc2V0KGEsIGx0bV9wcmltZV90YWJbeCArIDFdKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTVBfT0tBWTsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgLyogYXQgdGhpcyBwb2ludCBhIG1heWJlIDEgKi8KLSAgICAgIGlmIChtcF9jbXBfZChhLCAxKSA9PSBNUF9FUSkgewotICAgICAgICAgbXBfc2V0KGEsIDIpOwotICAgICAgICAgcmV0dXJuIE1QX09LQVk7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggdG8gdGhlIHNpZXZlICovCi0gICB9Ci0KLSAgIC8qIGdlbmVyYXRlIGEgcHJpbWUgY29uZ3J1ZW50IHRvIDMgbW9kIDQgb3IgMS8zIG1vZCA0PyAqLwotICAgaWYgKGJic19zdHlsZSA9PSAxKSB7Ci0gICAgICBrc3RlcCAgID0gNDsKLSAgIH0gZWxzZSB7Ci0gICAgICBrc3RlcCAgID0gMjsKLSAgIH0KLQotICAgLyogYXQgdGhpcyBwb2ludCB3ZSB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uIG9mIGEgc2lldmUgYW5kIE1pbGxlci1SYWJpbiAqLwotCi0gICBpZiAoYmJzX3N0eWxlID09IDEpIHsKLSAgICAgIC8qIGlmIGEgbW9kIDQgIT0gMyBzdWJ0cmFjdCB0aGUgY29ycmVjdCB2YWx1ZSB0byBtYWtlIGl0IHNvICovCi0gICAgICBpZiAoKGEtPmRwWzBdICYgMykgIT0gMykgewotICAgICAgICAgaWYgKChlcnIgPSBtcF9zdWJfZChhLCAoYS0+ZHBbMF0gJiAzKSArIDEsIGEpKSAhPSBNUF9PS0FZKSB7IHJldHVybiBlcnI7IH07Ci0gICAgICB9Ci0gICB9IGVsc2UgewotICAgICAgaWYgKG1wX2lzZXZlbihhKSA9PSAxKSB7Ci0gICAgICAgICAvKiBmb3JjZSBvZGQgKi8KLSAgICAgICAgIGlmICgoZXJyID0gbXBfc3ViX2QoYSwgMSwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8qIGdlbmVyYXRlIHRoZSByZXN0YWJsZSAqLwotICAgZm9yICh4ID0gMTsgeCA8IFBSSU1FX1NJWkU7IHgrKykgewotICAgICAgaWYgKChlcnIgPSBtcF9tb2RfZChhLCBsdG1fcHJpbWVfdGFiW3hdLCByZXNfdGFiICsgeCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICB9Ci0gICB9Ci0KLSAgIC8qIGluaXQgdGVtcCB1c2VkIGZvciBNaWxsZXItUmFiaW4gVGVzdGluZyAqLwotICAgaWYgKChlcnIgPSBtcF9pbml0KCZiKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIGVycjsKLSAgIH0KLQotICAgZm9yICg7OykgewotICAgICAgLyogc2tpcCB0byB0aGUgbmV4dCBub24tdHJpdmlhbGx5IGRpdmlzaWJsZSBjYW5kaWRhdGUgKi8KLSAgICAgIHN0ZXAgPSAwOwotICAgICAgZG8gewotICAgICAgICAgLyogeSA9PSAxIGlmIGFueSByZXNpZHVlIHdhcyB6ZXJvIFtlLmcuIGNhbm5vdCBiZSBwcmltZV0gKi8KLSAgICAgICAgIHkgICAgID0gIDA7Ci0KLSAgICAgICAgIC8qIGluY3JlYXNlIHN0ZXAgdG8gbmV4dCBjYW5kaWRhdGUgKi8KLSAgICAgICAgIHN0ZXAgKz0ga3N0ZXA7Ci0KLSAgICAgICAgIC8qIGNvbXB1dGUgdGhlIG5ldyByZXNpZHVlIHdpdGhvdXQgdXNpbmcgZGl2aXNpb24gKi8KLSAgICAgICAgIGZvciAoeCA9IDE7IHggPCBQUklNRV9TSVpFOyB4KyspIHsKLSAgICAgICAgICAgICAvKiBhZGQgdGhlIHN0ZXAgdG8gZWFjaCByZXNpZHVlICovCi0gICAgICAgICAgICAgcmVzX3RhYlt4XSArPSBrc3RlcDsKLQotICAgICAgICAgICAgIC8qIHN1YnRyYWN0IHRoZSBtb2R1bHVzIFtpbnN0ZWFkIG9mIHVzaW5nIGRpdmlzaW9uXSAqLwotICAgICAgICAgICAgIGlmIChyZXNfdGFiW3hdID49IGx0bV9wcmltZV90YWJbeF0pIHsKLSAgICAgICAgICAgICAgICByZXNfdGFiW3hdICAtPSBsdG1fcHJpbWVfdGFiW3hdOwotICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgIC8qIHNldCBmbGFnIGlmIHplcm8gKi8KLSAgICAgICAgICAgICBpZiAocmVzX3RhYlt4XSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgeSA9IDE7Ci0gICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgfSB3aGlsZSAoeSA9PSAxICYmIHN0ZXAgPCAoKCgobXBfZGlnaXQpMSk8PERJR0lUX0JJVCkgLSBrc3RlcCkpOwotCi0gICAgICAvKiBhZGQgdGhlIHN0ZXAgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfYWRkX2QoYSwgc3RlcCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICAgIH0KLQotICAgICAgLyogaWYgZGlkbid0IHBhc3Mgc2lldmUgYW5kIHN0ZXAgPT0gTUFYIHRoZW4gc2tpcCB0ZXN0ICovCi0gICAgICBpZiAoeSA9PSAxICYmIHN0ZXAgPj0gKCgoKG1wX2RpZ2l0KTEpPDxESUdJVF9CSVQpIC0ga3N0ZXApKSB7Ci0gICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLyogaXMgdGhpcyBwcmltZT8gKi8KLSAgICAgIGZvciAoeCA9IDA7IHggPCB0OyB4KyspIHsKLSAgICAgICAgICBtcF9zZXQoJmIsIGx0bV9wcmltZV90YWJbdF0pOwotICAgICAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfbWlsbGVyX3JhYmluKGEsICZiLCAmcmVzKSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHJlcyA9PSBNUF9OTykgewotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHJlcyA9PSBNUF9ZRVMpIHsKLSAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgfQotCi0gICBlcnIgPSBNUF9PS0FZOwotTEJMX0VSUjoKLSAgIG1wX2NsZWFyKCZiKTsKLSAgIHJldHVybiBlcnI7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3ByaW1lX25leHRfcHJpbWUuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscy5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9QUklNRV9SQUJJTl9NSUxMRVJfVFJJQUxTX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICBpbnQgaywgdDsKLX0gc2l6ZXNbXSA9IHsKLXsgICAxMjgsICAgIDI4IH0sCi17ICAgMjU2LCAgICAxNiB9LAoteyAgIDM4NCwgICAgMTAgfSwKLXsgICA1MTIsICAgICA3IH0sCi17ICAgNjQwLCAgICAgNiB9LAoteyAgIDc2OCwgICAgIDUgfSwKLXsgICA4OTYsICAgICA0IH0sCi17ICAxMDI0LCAgICAgNCB9Ci19OwotCi0vKiByZXR1cm5zICMgb2YgUk0gdHJpYWxzIHJlcXVpcmVkIGZvciBhIGdpdmVuIGJpdCBzaXplICovCi1pbnQgbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscyhpbnQgc2l6ZSkKLXsKLSAgIGludCB4OwotCi0gICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHNpemVzKS8oc2l6ZW9mKHNpemVzWzBdKSkpOyB4KyspIHsKLSAgICAgICBpZiAoc2l6ZXNbeF0uayA9PSBzaXplKSB7Ci0gICAgICAgICAgcmV0dXJuIHNpemVzW3hdLnQ7Ci0gICAgICAgfSBlbHNlIGlmIChzaXplc1t4XS5rID4gc2l6ZSkgewotICAgICAgICAgIHJldHVybiAoeCA9PSAwKSA/IHNpemVzWzBdLnQgOiBzaXplc1t4IC0gMV0udDsKLSAgICAgICB9Ci0gICB9Ci0gICByZXR1cm4gc2l6ZXNbeC0xXS50ICsgMTsKLX0KLQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3ByaW1lX3JhbmRvbV9leC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9QUklNRV9SQU5ET01fRVhfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogbWFrZXMgYSB0cnVseSByYW5kb20gcHJpbWUgb2YgYSBnaXZlbiBzaXplIChiaXRzKSwKLSAqCi0gKiBGbGFncyBhcmUgYXMgZm9sbG93czoKLSAqIAotICogICBMVE1fUFJJTUVfQkJTICAgICAgLSBtYWtlIHByaW1lIGNvbmdydWVudCB0byAzIG1vZCA0Ci0gKiAgIExUTV9QUklNRV9TQUZFICAgICAtIG1ha2Ugc3VyZSAocC0xKS8yIGlzIHByaW1lIGFzIHdlbGwgKGltcGxpZXMgTFRNX1BSSU1FX0JCUykKLSAqICAgTFRNX1BSSU1FXzJNU0JfT0ZGIC0gbWFrZSB0aGUgMm5kIGhpZ2hlc3QgYml0IHplcm8KLSAqICAgTFRNX1BSSU1FXzJNU0JfT04gIC0gbWFrZSB0aGUgMm5kIGhpZ2hlc3QgYml0IG9uZQotICoKLSAqIFlvdSBoYXZlIHRvIHN1cHBseSBhIGNhbGxiYWNrIHdoaWNoIGZpbGxzIGluIGEgYnVmZmVyIHdpdGggcmFuZG9tIGJ5dGVzLiAgImRhdCIgaXMgYSBwYXJhbWV0ZXIgeW91IGNhbgotICogaGF2ZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIChlLmcuIGEgc3RhdGUgb3Igc29tZXRoaW5nKS4gIFRoaXMgZnVuY3Rpb24gZG9lc24ndCB1c2UgImRhdCIgaXRzZWxmCi0gKiBzbyBpdCBjYW4gYmUgTlVMTAotICoKLSAqLwotCi0vKiBUaGlzIGlzIHBvc3NpYmx5IHRoZSBtb3RoZXIgb2YgYWxsIHByaW1lIGdlbmVyYXRpb24gZnVuY3Rpb25zLCBtdWFoYWhhaGFoYWhhISAqLwotaW50IG1wX3ByaW1lX3JhbmRvbV9leChtcF9pbnQgKmEsIGludCB0LCBpbnQgc2l6ZSwgaW50IGZsYWdzLCBsdG1fcHJpbWVfY2FsbGJhY2sgY2IsIHZvaWQgKmRhdCkKLXsKLSAgIHVuc2lnbmVkIGNoYXIgKnRtcCwgbWFza0FORCwgbWFza09SX21zYiwgbWFza09SX2xzYjsKLSAgIGludCByZXMsIGVyciwgYnNpemUsIG1hc2tPUl9tc2Jfb2Zmc2V0OwotCi0gICAvKiBzYW5pdHkgY2hlY2sgdGhlIGlucHV0ICovCi0gICBpZiAoc2l6ZSA8PSAxIHx8IHQgPD0gMCkgewotICAgICAgcmV0dXJuIE1QX1ZBTDsKLSAgIH0KLQotICAgLyogTFRNX1BSSU1FX1NBRkUgaW1wbGllcyBMVE1fUFJJTUVfQkJTICovCi0gICBpZiAoZmxhZ3MgJiBMVE1fUFJJTUVfU0FGRSkgewotICAgICAgZmxhZ3MgfD0gTFRNX1BSSU1FX0JCUzsKLSAgIH0KLQotICAgLyogY2FsYyB0aGUgYnl0ZSBzaXplICovCi0gICBic2l6ZSA9IChzaXplPj4zKSArICgoc2l6ZSY3KT8xOjApOwotCi0gICAvKiB3ZSBuZWVkIGEgYnVmZmVyIG9mIGJzaXplIGJ5dGVzICovCi0gICB0bXAgPSBPUFRfQ0FTVCh1bnNpZ25lZCBjaGFyKSBYTUFMTE9DKGJzaXplKTsKLSAgIGlmICh0bXAgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE1QX01FTTsKLSAgIH0KLQotICAgLyogY2FsYyB0aGUgbWFza0FORCB2YWx1ZSBmb3IgdGhlIE1TYnl0ZSovCi0gICBtYXNrQU5EID0gKChzaXplJjcpID09IDApID8gMHhGRiA6ICgweEZGID4+ICg4IC0gKHNpemUgJiA3KSkpOwotCi0gICAvKiBjYWxjIHRoZSBtYXNrT1JfbXNiICovCi0gICBtYXNrT1JfbXNiICAgICAgICA9IDA7Ci0gICBtYXNrT1JfbXNiX29mZnNldCA9ICgoc2l6ZSAmIDcpID09IDEpID8gMSA6IDA7Ci0gICBpZiAoZmxhZ3MgJiBMVE1fUFJJTUVfMk1TQl9PTikgewotICAgICAgbWFza09SX21zYiAgICAgICB8PSAweDgwID4+ICgoOSAtIHNpemUpICYgNyk7Ci0gICB9ICAKLQotICAgLyogZ2V0IHRoZSBtYXNrT1JfbHNiICovCi0gICBtYXNrT1JfbHNiICAgICAgICAgPSAxOwotICAgaWYgKGZsYWdzICYgTFRNX1BSSU1FX0JCUykgewotICAgICAgbWFza09SX2xzYiAgICAgfD0gMzsKLSAgIH0KLQotICAgZG8gewotICAgICAgLyogcmVhZCB0aGUgYnl0ZXMgKi8KLSAgICAgIGlmIChjYih0bXAsIGJzaXplLCBkYXQpICE9IGJzaXplKSB7Ci0gICAgICAgICBlcnIgPSBNUF9WQUw7Ci0gICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfQotIAotICAgICAgLyogd29yayBvdmVyIHRoZSBNU2J5dGUgKi8KLSAgICAgIHRtcFswXSAgICAmPSBtYXNrQU5EOwotICAgICAgdG1wWzBdICAgIHw9IDEgPDwgKChzaXplIC0gMSkgJiA3KTsKLQotICAgICAgLyogbWl4IGluIHRoZSBtYXNrT1JzICovCi0gICAgICB0bXBbbWFza09SX21zYl9vZmZzZXRdICAgfD0gbWFza09SX21zYjsKLSAgICAgIHRtcFtic2l6ZS0xXSAgICAgICAgICAgICB8PSBtYXNrT1JfbHNiOwotCi0gICAgICAvKiByZWFkIGl0IGluICovCi0gICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGEsIHRtcCwgYnNpemUpKSAhPSBNUF9PS0FZKSAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgICAgIC8qIGlzIGl0IHByaW1lPyAqLwotICAgICAgaWYgKChlcnIgPSBtcF9wcmltZV9pc19wcmltZShhLCB0LCAmcmVzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgaWYgKHJlcyA9PSBNUF9OTykgeyAgCi0gICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZsYWdzICYgTFRNX1BSSU1FX1NBRkUpIHsKLSAgICAgICAgIC8qIHNlZSBpZiAoYS0xKS8yIGlzIHByaW1lICovCi0gICAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKGEsIDEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAgICBpZiAoKGVyciA9IG1wX2Rpdl8yKGEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gCi0gICAgICAgICAvKiBpcyBpdCBwcmltZT8gKi8KLSAgICAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUoYSwgdCwgJnJlcykpICE9IE1QX09LQVkpICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgIH0KLSAgIH0gd2hpbGUgKHJlcyA9PSBNUF9OTyk7Ci0KLSAgIGlmIChmbGFncyAmIExUTV9QUklNRV9TQUZFKSB7Ci0gICAgICAvKiByZXN0b3JlIGEgdG8gdGhlIG9yaWdpbmFsIHZhbHVlICovCi0gICAgICBpZiAoKGVyciA9IG1wX211bF8yKGEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICBpZiAoKGVyciA9IG1wX2FkZF9kKGEsIDEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9Ci0KLSAgIGVyciA9IE1QX09LQVk7Ci1lcnJvcjoKLSAgIFhGUkVFKHRtcCk7Ci0gICByZXR1cm4gZXJyOwotfQotCi0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3ByaW1lX3JhbmRvbV9leC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9yYWRpeF9zaXplLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1JBRElYX1NJWkVfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogcmV0dXJucyBzaXplIG9mIEFTQ0lJIHJlcHJlbnNlbnRhdGlvbiAqLwotaW50IG1wX3JhZGl4X3NpemUgKG1wX2ludCAqIGEsIGludCByYWRpeCwgaW50ICpzaXplKQotewotICBpbnQgICAgIHJlcywgZGlnczsKLSAgbXBfaW50ICB0OwotICBtcF9kaWdpdCBkOwotCi0gICpzaXplID0gMDsKLQotICAvKiBzcGVjaWFsIGNhc2UgZm9yIGJpbmFyeSAqLwotICBpZiAocmFkaXggPT0gMikgewotICAgICpzaXplID0gbXBfY291bnRfYml0cyAoYSkgKyAoYS0+c2lnbiA9PSBNUF9ORUcgPyAxIDogMCkgKyAxOwotICAgIHJldHVybiBNUF9PS0FZOwotICB9Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSByYWRpeCBpcyBpbiByYW5nZSAqLwotICBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gNjQpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgaWYgKG1wX2lzemVybyhhKSA9PSBNUF9ZRVMpIHsKLSAgICAgKnNpemUgPSAyOwotICAgIHJldHVybiBNUF9PS0FZOwotICB9Ci0KLSAgLyogZGlncyBpcyB0aGUgZGlnaXQgY291bnQgKi8KLSAgZGlncyA9IDA7Ci0KLSAgLyogaWYgaXQncyBuZWdhdGl2ZSBhZGQgb25lIGZvciB0aGUgc2lnbiAqLwotICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICArK2RpZ3M7Ci0gIH0KLQotICAvKiBpbml0IGEgY29weSBvZiB0aGUgaW5wdXQgKi8KLSAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBhKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICAvKiBmb3JjZSB0ZW1wIHRvIHBvc2l0aXZlICovCi0gIHQuc2lnbiA9IE1QX1pQT1M7IAotCi0gIC8qIGZldGNoIG91dCBhbGwgb2YgdGhlIGRpZ2l0cyAqLwotICB3aGlsZSAobXBfaXN6ZXJvICgmdCkgPT0gTVBfTk8pIHsKLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl9kICgmdCwgKG1wX2RpZ2l0KSByYWRpeCwgJnQsICZkKSkgIT0gTVBfT0tBWSkgewotICAgICAgbXBfY2xlYXIgKCZ0KTsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgICsrZGlnczsKLSAgfQotICBtcF9jbGVhciAoJnQpOwotCi0gIC8qIHJldHVybiBkaWdzICsgMSwgdGhlIDEgaXMgZm9yIHRoZSBOVUxMIGJ5dGUgdGhhdCB3b3VsZCBiZSByZXF1aXJlZC4gKi8KLSAgKnNpemUgPSBkaWdzICsgMTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3JhZGl4X3NpemUuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmFkaXhfc21hcC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9SQURJWF9TTUFQX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGNoYXJzIHVzZWQgaW4gcmFkaXggY29udmVyc2lvbnMgKi8KLWNvbnN0IGNoYXIgKm1wX3Nfcm1hcCA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eisvIjsKLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3JhZGl4X3NtYXAuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmFuZC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9SQU5EX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIG1ha2VzIGEgcHNldWRvLXJhbmRvbSBpbnQgb2YgYSBnaXZlbiBzaXplICovCi1pbnQKLW1wX3JhbmQgKG1wX2ludCAqIGEsIGludCBkaWdpdHMpCi17Ci0gIGludCAgICAgcmVzOwotICBtcF9kaWdpdCBkOwotCi0gIG1wX3plcm8gKGEpOwotICBpZiAoZGlnaXRzIDw9IDApIHsKLSAgICByZXR1cm4gTVBfT0tBWTsKLSAgfQotCi0gIC8qIGZpcnN0IHBsYWNlIGEgcmFuZG9tIG5vbi16ZXJvIGRpZ2l0ICovCi0gIGRvIHsKLSAgICBkID0gKChtcF9kaWdpdCkgYWJzIChyYW5kICgpKSkgJiBNUF9NQVNLOwotICB9IHdoaWxlIChkID09IDApOwotCi0gIGlmICgocmVzID0gbXBfYWRkX2QgKGEsIGQsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIHdoaWxlICgtLWRpZ2l0cyA+IDApIHsKLSAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKGEsIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLQotICAgIGlmICgocmVzID0gbXBfYWRkX2QgKGEsICgobXBfZGlnaXQpIGFicyAocmFuZCAoKSkpLCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3JhbmQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmVhZF9yYWRpeC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9SRUFEX1JBRElYX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHJlYWQgYSBzdHJpbmcgW0FTQ0lJXSBpbiBhIGdpdmVuIHJhZGl4ICovCi1pbnQgbXBfcmVhZF9yYWRpeCAobXBfaW50ICogYSwgY29uc3QgY2hhciAqc3RyLCBpbnQgcmFkaXgpCi17Ci0gIGludCAgICAgeSwgcmVzLCBuZWc7Ci0gIGNoYXIgICAgY2g7Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSByYWRpeCBpcyBvayAqLwotICBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gNjQpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogaWYgdGhlIGxlYWRpbmcgZGlnaXQgaXMgYSAKLSAgICogbWludXMgc2V0IHRoZSBzaWduIHRvIG5lZ2F0aXZlLiAKLSAgICovCi0gIGlmICgqc3RyID09ICctJykgewotICAgICsrc3RyOwotICAgIG5lZyA9IE1QX05FRzsKLSAgfSBlbHNlIHsKLSAgICBuZWcgPSBNUF9aUE9TOwotICB9Ci0KLSAgLyogc2V0IHRoZSBpbnRlZ2VyIHRvIHRoZSBkZWZhdWx0IG9mIHplcm8gKi8KLSAgbXBfemVybyAoYSk7Ci0gIAotICAvKiBwcm9jZXNzIGVhY2ggZGlnaXQgb2YgdGhlIHN0cmluZyAqLwotICB3aGlsZSAoKnN0cikgewotICAgIC8qIGlmIHRoZSByYWRpeCA8IDM2IHRoZSBjb252ZXJzaW9uIGlzIGNhc2UgaW5zZW5zaXRpdmUKLSAgICAgKiB0aGlzIGFsbG93cyBudW1iZXJzIGxpa2UgMUFCIGFuZCAxYWIgdG8gcmVwcmVzZW50IHRoZSBzYW1lICB2YWx1ZQotICAgICAqIFtlLmcuIGluIGhleF0KLSAgICAgKi8KLSAgICBjaCA9IChjaGFyKSAoKHJhZGl4IDwgMzYpID8gdG91cHBlciAoKnN0cikgOiAqc3RyKTsKLSAgICBmb3IgKHkgPSAwOyB5IDwgNjQ7IHkrKykgewotICAgICAgaWYgKGNoID09IG1wX3Nfcm1hcFt5XSkgewotICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIGNoYXIgd2FzIGZvdW5kIGluIHRoZSBtYXAgCi0gICAgICogYW5kIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gcmFkaXggYWRkIGl0Ci0gICAgICogdG8gdGhlIG51bWJlciwgb3RoZXJ3aXNlIGV4aXQgdGhlIGxvb3AuIAotICAgICAqLwotICAgIGlmICh5IDwgcmFkaXgpIHsKLSAgICAgIGlmICgocmVzID0gbXBfbXVsX2QgKGEsIChtcF9kaWdpdCkgcmFkaXgsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICByZXR1cm4gcmVzOwotICAgICAgfQotICAgICAgaWYgKChyZXMgPSBtcF9hZGRfZCAoYSwgKG1wX2RpZ2l0KSB5LCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgYnJlYWs7Ci0gICAgfQotICAgICsrc3RyOwotICB9Ci0gIAotICAvKiBzZXQgdGhlIHNpZ24gb25seSBpZiBhICE9IDAgKi8KLSAgaWYgKG1wX2lzemVybyhhKSAhPSAxKSB7Ci0gICAgIGEtPnNpZ24gPSBuZWc7Ci0gIH0KLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWFkX3JhZGl4LmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3JlYWRfc2lnbmVkX2Jpbi5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9SRUFEX1NJR05FRF9CSU5fQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogcmVhZCBzaWduZWQgYmluLCBiaWcgZW5kaWFuLCBmaXJzdCBieXRlIGlzIDA9PXBvc2l0aXZlIG9yIDE9PW5lZ2F0aXZlICovCi1pbnQgbXBfcmVhZF9zaWduZWRfYmluIChtcF9pbnQgKiBhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYykKLXsKLSAgaW50ICAgICByZXM7Ci0KLSAgLyogcmVhZCBtYWduaXR1ZGUgKi8KLSAgaWYgKChyZXMgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbiAoYSwgYiArIDEsIGMgLSAxKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICAvKiBmaXJzdCBieXRlIGlzIDAgZm9yIHBvc2l0aXZlLCBub24temVybyBmb3IgbmVnYXRpdmUgKi8KLSAgaWYgKGJbMF0gPT0gMCkgewotICAgICBhLT5zaWduID0gTVBfWlBPUzsKLSAgfSBlbHNlIHsKLSAgICAgYS0+c2lnbiA9IE1QX05FRzsKLSAgfQotCi0gIHJldHVybiBNUF9PS0FZOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfcmVhZF9zaWduZWRfYmluLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3JlYWRfdW5zaWduZWRfYmluLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1JFQURfVU5TSUdORURfQklOX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHJlYWRzIGEgdW5zaWduZWQgY2hhciBhcnJheSwgYXNzdW1lcyB0aGUgbXNiIGlzIHN0b3JlZCBmaXJzdCBbYmlnIGVuZGlhbl0gKi8KLWludCBtcF9yZWFkX3Vuc2lnbmVkX2JpbiAobXBfaW50ICogYSwgY29uc3QgdW5zaWduZWQgY2hhciAqYiwgaW50IGMpCi17Ci0gIGludCAgICAgcmVzOwotCi0gIC8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIGRpZ2l0cyAqLwotICBpZiAoYS0+YWxsb2MgPCAyKSB7Ci0gICAgIGlmICgocmVzID0gbXBfZ3JvdyhhLCAyKSkgIT0gTVBfT0tBWSkgewotICAgICAgICByZXR1cm4gcmVzOwotICAgICB9Ci0gIH0KLQotICAvKiB6ZXJvIHRoZSBpbnQgKi8KLSAgbXBfemVybyAoYSk7Ci0KLSAgLyogcmVhZCB0aGUgYnl0ZXMgaW4gKi8KLSAgd2hpbGUgKGMtLSA+IDApIHsKLSAgICBpZiAoKHJlcyA9IG1wX211bF8yZCAoYSwgOCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0jaWZuZGVmIE1QXzhCSVQKLSAgICAgIGEtPmRwWzBdIHw9ICpiKys7Ci0gICAgICBhLT51c2VkICs9IDE7Ci0jZWxzZQotICAgICAgYS0+ZHBbMF0gPSAoKmIgJiBNUF9NQVNLKTsKLSAgICAgIGEtPmRwWzFdIHw9ICgoKmIrKyA+PiA3VSkgJiAxKTsKLSAgICAgIGEtPnVzZWQgKz0gMjsKLSNlbmRpZgotICB9Ci0gIG1wX2NsYW1wIChhKTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWFkX3Vuc2lnbmVkX2Jpbi5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9yZWR1Y2UuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHJlZHVjZXMgeCBtb2QgbSwgYXNzdW1lcyAwIDwgeCA8IG0qKjIsIG11IGlzIAotICogcHJlY29tcHV0ZWQgdmlhIG1wX3JlZHVjZV9zZXR1cC4KLSAqIEZyb20gSEFDIHBwLjYwNCBBbGdvcml0aG0gMTQuNDIKLSAqLwotaW50IG1wX3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbSwgbXBfaW50ICogbXUpCi17Ci0gIG1wX2ludCAgcTsKLSAgaW50ICAgICByZXMsIHVtID0gbS0+dXNlZDsKLQotICAvKiBxID0geCAqLwotICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnEsIHgpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIHExID0geCAvIGIqKihrLTEpICAqLwotICBtcF9yc2hkICgmcSwgdW0gLSAxKTsgICAgICAgICAKLQotICAvKiBhY2NvcmRpbmcgdG8gSEFDIHRoaXMgb3B0aW1pemF0aW9uIGlzIG9rICovCi0gIGlmICgoKHVuc2lnbmVkIGxvbmcpIHVtKSA+ICgoKG1wX2RpZ2l0KTEpIDw8IChESUdJVF9CSVQgLSAxKSkpIHsKLSAgICBpZiAoKHJlcyA9IG1wX211bCAoJnEsIG11LCAmcSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gQ0xFQU5VUDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0jaWZkZWYgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKLSAgICBpZiAoKHJlcyA9IHNfbXBfbXVsX2hpZ2hfZGlncyAoJnEsIG11LCAmcSwgdW0pKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIENMRUFOVVA7Ci0gICAgfQotI2VsaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DKQotICAgIGlmICgocmVzID0gZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgKCZxLCBtdSwgJnEsIHVtKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBDTEVBTlVQOwotICAgIH0KLSNlbHNlIAotICAgIHsgCi0gICAgICByZXMgPSBNUF9WQUw7Ci0gICAgICBnb3RvIENMRUFOVVA7Ci0gICAgfQotI2VuZGlmCi0gIH0KLQotICAvKiBxMyA9IHEyIC8gYioqKGsrMSkgKi8KLSAgbXBfcnNoZCAoJnEsIHVtICsgMSk7ICAgICAgICAgCi0KLSAgLyogeCA9IHggbW9kIGIqKihrKzEpLCBxdWljayAobm8gZGl2aXNpb24pICovCi0gIGlmICgocmVzID0gbXBfbW9kXzJkICh4LCBESUdJVF9CSVQgKiAodW0gKyAxKSwgeCkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIENMRUFOVVA7Ci0gIH0KLQotICAvKiBxID0gcSAqIG0gbW9kIGIqKihrKzEpLCBxdWljayAobm8gZGl2aXNpb24pICovCi0gIGlmICgocmVzID0gc19tcF9tdWxfZGlncyAoJnEsIG0sICZxLCB1bSArIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBDTEVBTlVQOwotICB9Ci0KLSAgLyogeCA9IHggLSBxICovCi0gIGlmICgocmVzID0gbXBfc3ViICh4LCAmcSwgeCkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIENMRUFOVVA7Ci0gIH0KLQotICAvKiBJZiB4IDwgMCwgYWRkIGIqKihrKzEpIHRvIGl0ICovCi0gIGlmIChtcF9jbXBfZCAoeCwgMCkgPT0gTVBfTFQpIHsKLSAgICBtcF9zZXQgKCZxLCAxKTsKLSAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKCZxLCB1bSArIDEpKSAhPSBNUF9PS0FZKQotICAgICAgZ290byBDTEVBTlVQOwotICAgIGlmICgocmVzID0gbXBfYWRkICh4LCAmcSwgeCkpICE9IE1QX09LQVkpCi0gICAgICBnb3RvIENMRUFOVVA7Ci0gIH0KLQotICAvKiBCYWNrIG9mZiBpZiBpdCdzIHRvbyBiaWcgKi8KLSAgd2hpbGUgKG1wX2NtcCAoeCwgbSkgIT0gTVBfTFQpIHsKLSAgICBpZiAoKHJlcyA9IHNfbXBfc3ViICh4LCBtLCB4KSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBDTEVBTlVQOwotICAgIH0KLSAgfQotICAKLUNMRUFOVVA6Ci0gIG1wX2NsZWFyICgmcSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3JlZHVjZS5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfMmsuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFXzJLX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHJlZHVjZXMgYSBtb2R1bG8gbiB3aGVyZSBuIGlzIG9mIHRoZSBmb3JtIDIqKnAgLSBkICovCi1pbnQgbXBfcmVkdWNlXzJrKG1wX2ludCAqYSwgbXBfaW50ICpuLCBtcF9kaWdpdCBkKQotewotICAgbXBfaW50IHE7Ci0gICBpbnQgICAgcCwgcmVzOwotICAgCi0gICBpZiAoKHJlcyA9IG1wX2luaXQoJnEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgfQotICAgCi0gICBwID0gbXBfY291bnRfYml0cyhuKTsgICAgCi10b3A6Ci0gICAvKiBxID0gYS8yKipwLCBhID0gYSBtb2QgMioqcCAqLwotICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoYSwgcCwgJnEsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIEVSUjsKLSAgIH0KLSAgIAotICAgaWYgKGQgIT0gMSkgewotICAgICAgLyogcSA9IHEgKiBkICovCi0gICAgICBpZiAoKHJlcyA9IG1wX211bF9kKCZxLCBkLCAmcSkpICE9IE1QX09LQVkpIHsgCi0gICAgICAgICBnb3RvIEVSUjsKLSAgICAgIH0KLSAgIH0KLSAgIAotICAgLyogYSA9IGEgKyBxICovCi0gICBpZiAoKHJlcyA9IHNfbXBfYWRkKGEsICZxLCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBFUlI7Ci0gICB9Ci0gICAKLSAgIGlmIChtcF9jbXBfbWFnKGEsIG4pICE9IE1QX0xUKSB7Ci0gICAgICBzX21wX3N1YihhLCBuLCBhKTsKLSAgICAgIGdvdG8gdG9wOwotICAgfQotICAgCi1FUlI6Ci0gICBtcF9jbGVhcigmcSk7Ci0gICByZXR1cm4gcmVzOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWR1Y2VfMmsuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmVkdWNlXzJrX2wuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFXzJLX0xfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogcmVkdWNlcyBhIG1vZHVsbyBuIHdoZXJlIG4gaXMgb2YgdGhlIGZvcm0gMioqcCAtIGQgCi0gICBUaGlzIGRpZmZlcnMgZnJvbSByZWR1Y2VfMmsgc2luY2UgImQiIGNhbiBiZSBsYXJnZXIKLSAgIHRoYW4gYSBzaW5nbGUgZGlnaXQuCi0qLwotaW50IG1wX3JlZHVjZV8ya19sKG1wX2ludCAqYSwgbXBfaW50ICpuLCBtcF9pbnQgKmQpCi17Ci0gICBtcF9pbnQgcTsKLSAgIGludCAgICBwLCByZXM7Ci0gICAKLSAgIGlmICgocmVzID0gbXBfaW5pdCgmcSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICB9Ci0gICAKLSAgIHAgPSBtcF9jb3VudF9iaXRzKG4pOyAgICAKLXRvcDoKLSAgIC8qIHEgPSBhLzIqKnAsIGEgPSBhIG1vZCAyKipwICovCi0gICBpZiAoKHJlcyA9IG1wX2Rpdl8yZChhLCBwLCAmcSwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gRVJSOwotICAgfQotICAgCi0gICAvKiBxID0gcSAqIGQgKi8KLSAgIGlmICgocmVzID0gbXBfbXVsKCZxLCBkLCAmcSkpICE9IE1QX09LQVkpIHsgCi0gICAgICBnb3RvIEVSUjsKLSAgIH0KLSAgIAotICAgLyogYSA9IGEgKyBxICovCi0gICBpZiAoKHJlcyA9IHNfbXBfYWRkKGEsICZxLCBhKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBFUlI7Ci0gICB9Ci0gICAKLSAgIGlmIChtcF9jbXBfbWFnKGEsIG4pICE9IE1QX0xUKSB7Ci0gICAgICBzX21wX3N1YihhLCBuLCBhKTsKLSAgICAgIGdvdG8gdG9wOwotICAgfQotICAgCi1FUlI6Ci0gICBtcF9jbGVhcigmcSk7Ci0gICByZXR1cm4gcmVzOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWR1Y2VfMmtfbC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfMmtfc2V0dXAuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGRldGVybWluZXMgdGhlIHNldHVwIHZhbHVlICovCi1pbnQgbXBfcmVkdWNlXzJrX3NldHVwKG1wX2ludCAqYSwgbXBfZGlnaXQgKmQpCi17Ci0gICBpbnQgcmVzLCBwOwotICAgbXBfaW50IHRtcDsKLSAgIAotICAgaWYgKChyZXMgPSBtcF9pbml0KCZ0bXApKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgfQotICAgCi0gICBwID0gbXBfY291bnRfYml0cyhhKTsKLSAgIGlmICgocmVzID0gbXBfMmV4cHQoJnRtcCwgcCkpICE9IE1QX09LQVkpIHsKLSAgICAgIG1wX2NsZWFyKCZ0bXApOwotICAgICAgcmV0dXJuIHJlczsKLSAgIH0KLSAgIAotICAgaWYgKChyZXMgPSBzX21wX3N1YigmdG1wLCBhLCAmdG1wKSkgIT0gTVBfT0tBWSkgewotICAgICAgbXBfY2xlYXIoJnRtcCk7Ci0gICAgICByZXR1cm4gcmVzOwotICAgfQotICAgCi0gICAqZCA9IHRtcC5kcFswXTsKLSAgIG1wX2NsZWFyKCZ0bXApOwotICAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWR1Y2VfMmtfc2V0dXAuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0xfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogZGV0ZXJtaW5lcyB0aGUgc2V0dXAgdmFsdWUgKi8KLWludCBtcF9yZWR1Y2VfMmtfc2V0dXBfbChtcF9pbnQgKmEsIG1wX2ludCAqZCkKLXsKLSAgIGludCAgICByZXM7Ci0gICBtcF9pbnQgdG1wOwotICAgCi0gICBpZiAoKHJlcyA9IG1wX2luaXQoJnRtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICB9Ci0gICAKLSAgIGlmICgocmVzID0gbXBfMmV4cHQoJnRtcCwgbXBfY291bnRfYml0cyhhKSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gRVJSOwotICAgfQotICAgCi0gICBpZiAoKHJlcyA9IHNfbXBfc3ViKCZ0bXAsIGEsIGQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIEVSUjsKLSAgIH0KLSAgIAotRVJSOgotICAgbXBfY2xlYXIoJnRtcCk7Ci0gICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmVkdWNlX2lzXzJrLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1JFRFVDRV9JU18yS19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBkZXRlcm1pbmVzIGlmIG1wX3JlZHVjZV8yayBjYW4gYmUgdXNlZCAqLwotaW50IG1wX3JlZHVjZV9pc18yayhtcF9pbnQgKmEpCi17Ci0gICBpbnQgaXgsIGl5LCBpdzsKLSAgIG1wX2RpZ2l0IGl6OwotICAgCi0gICBpZiAoYS0+dXNlZCA9PSAwKSB7Ci0gICAgICByZXR1cm4gTVBfTk87Ci0gICB9IGVsc2UgaWYgKGEtPnVzZWQgPT0gMSkgewotICAgICAgcmV0dXJuIE1QX1lFUzsKLSAgIH0gZWxzZSBpZiAoYS0+dXNlZCA+IDEpIHsKLSAgICAgIGl5ID0gbXBfY291bnRfYml0cyhhKTsKLSAgICAgIGl6ID0gMTsKLSAgICAgIGl3ID0gMTsKLSAgICAKLSAgICAgIC8qIFRlc3QgZXZlcnkgYml0IGZyb20gdGhlIHNlY29uZCBkaWdpdCB1cCwgbXVzdCBiZSAxICovCi0gICAgICBmb3IgKGl4ID0gRElHSVRfQklUOyBpeCA8IGl5OyBpeCsrKSB7Ci0gICAgICAgICAgaWYgKChhLT5kcFtpd10gJiBpeikgPT0gMCkgewotICAgICAgICAgICAgIHJldHVybiBNUF9OTzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaXogPDw9IDE7Ci0gICAgICAgICAgaWYgKGl6ID4gKG1wX2RpZ2l0KU1QX01BU0spIHsKLSAgICAgICAgICAgICArK2l3OwotICAgICAgICAgICAgIGl6ID0gMTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICB9Ci0gICByZXR1cm4gTVBfWUVTOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWR1Y2VfaXNfMmsuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfcmVkdWNlX2lzXzJrX2wuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFX0lTXzJLX0xfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogZGV0ZXJtaW5lcyBpZiByZWR1Y2VfMmtfbCBjYW4gYmUgdXNlZCAqLwotaW50IG1wX3JlZHVjZV9pc18ya19sKG1wX2ludCAqYSkKLXsKLSAgIGludCBpeCwgaXk7Ci0gICAKLSAgIGlmIChhLT51c2VkID09IDApIHsKLSAgICAgIHJldHVybiBNUF9OTzsKLSAgIH0gZWxzZSBpZiAoYS0+dXNlZCA9PSAxKSB7Ci0gICAgICByZXR1cm4gTVBfWUVTOwotICAgfSBlbHNlIGlmIChhLT51c2VkID4gMSkgewotICAgICAgLyogaWYgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGRpZ2l0cyBhcmUgLTEgd2UncmUgc29sZCAqLwotICAgICAgZm9yIChpeSA9IGl4ID0gMDsgaXggPCBhLT51c2VkOyBpeCsrKSB7Ci0gICAgICAgICAgaWYgKGEtPmRwW2l4XSA9PSBNUF9NQVNLKSB7Ci0gICAgICAgICAgICAgICsraXk7Ci0gICAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIChpeSA+PSAoYS0+dXNlZC8yKSkgPyBNUF9ZRVMgOiBNUF9OTzsKLSAgICAgIAotICAgfQotICAgcmV0dXJuIE1QX05POwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9yZWR1Y2VfaXNfMmtfbC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9yZWR1Y2Vfc2V0dXAuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUkVEVUNFX1NFVFVQX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHByZS1jYWxjdWxhdGUgdGhlIHZhbHVlIHJlcXVpcmVkIGZvciBCYXJyZXR0IHJlZHVjdGlvbgotICogRm9yIGEgZ2l2ZW4gbW9kdWx1cyAiYiIgaXQgY2FsdWxhdGVzIHRoZSB2YWx1ZSByZXF1aXJlZCBpbiAiYSIKLSAqLwotaW50IG1wX3JlZHVjZV9zZXR1cCAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgaW50ICAgICByZXM7Ci0gIAotICBpZiAoKHJlcyA9IG1wXzJleHB0IChhLCBiLT51c2VkICogMiAqIERJR0lUX0JJVCkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0gIHJldHVybiBtcF9kaXYgKGEsIGIsIGEsIE5VTEwpOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfcmVkdWNlX3NldHVwLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3JzaGQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfUlNIRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzaGlmdCByaWdodCBhIGNlcnRhaW4gYW1vdW50IG9mIGRpZ2l0cyAqLwotdm9pZCBtcF9yc2hkIChtcF9pbnQgKiBhLCBpbnQgYikKLXsKLSAgaW50ICAgICB4OwotCi0gIC8qIGlmIGIgPD0gMCB0aGVuIGlnbm9yZSBpdCAqLwotICBpZiAoYiA8PSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogaWYgYiA+IHVzZWQgdGhlbiBzaW1wbHkgemVybyBpdCBhbmQgcmV0dXJuICovCi0gIGlmIChhLT51c2VkIDw9IGIpIHsKLSAgICBtcF96ZXJvIChhKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICB7Ci0gICAgcmVnaXN0ZXIgbXBfZGlnaXQgKmJvdHRvbSwgKnRvcDsKLQotICAgIC8qIHNoaWZ0IHRoZSBkaWdpdHMgZG93biAqLwotCi0gICAgLyogYm90dG9tICovCi0gICAgYm90dG9tID0gYS0+ZHA7Ci0KLSAgICAvKiB0b3AgW29mZnNldCBpbnRvIGRpZ2l0c10gKi8KLSAgICB0b3AgPSBhLT5kcCArIGI7Ci0KLSAgICAvKiB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc2xpZGluZyB3aW5kb3cgd2hlcmUgCi0gICAgICogdGhlIHdpbmRvdyBpcyBiLWRpZ2l0cyBsb25nIGFuZCBkaWdpdHMgZnJvbSAKLSAgICAgKiB0aGUgdG9wIG9mIHRoZSB3aW5kb3cgYXJlIGNvcGllZCB0byB0aGUgYm90dG9tCi0gICAgICoKLSAgICAgKiBlLmcuCi0KLSAgICAgYi0yIHwgYi0xIHwgYjAgfCBiMSB8IGIyIHwgLi4uIHwgYmIgfCAgIC0tLS0+Ci0gICAgICAgICAgICAgICAgIC9cICAgICAgICAgICAgICAgICAgIHwgICAgICAtLS0tPgotICAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0vICAgICAgLS0tLT4KLSAgICAgKi8KLSAgICBmb3IgKHggPSAwOyB4IDwgKGEtPnVzZWQgLSBiKTsgeCsrKSB7Ci0gICAgICAqYm90dG9tKysgPSAqdG9wKys7Ci0gICAgfQotCi0gICAgLyogemVybyB0aGUgdG9wIGRpZ2l0cyAqLwotICAgIGZvciAoOyB4IDwgYS0+dXNlZDsgeCsrKSB7Ci0gICAgICAqYm90dG9tKysgPSAwOwotICAgIH0KLSAgfQotICAKLSAgLyogcmVtb3ZlIGV4Y2VzcyBkaWdpdHMgKi8KLSAgYS0+dXNlZCAtPSBiOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfcnNoZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9zZXQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfU0VUX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHNldCB0byBhIGRpZ2l0ICovCi12b2lkIG1wX3NldCAobXBfaW50ICogYSwgbXBfZGlnaXQgYikKLXsKLSAgbXBfemVybyAoYSk7Ci0gIGEtPmRwWzBdID0gYiAmIE1QX01BU0s7Ci0gIGEtPnVzZWQgID0gKGEtPmRwWzBdICE9IDApID8gMSA6IDA7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9zZXQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc2V0X2ludC5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9TRVRfSU5UX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHNldCBhIDMyLWJpdCBjb25zdCAqLwotaW50IG1wX3NldF9pbnQgKG1wX2ludCAqIGEsIHVuc2lnbmVkIGxvbmcgYikKLXsKLSAgaW50ICAgICB4LCByZXM7Ci0KLSAgbXBfemVybyAoYSk7Ci0gIAotICAvKiBzZXQgZm91ciBiaXRzIGF0IGEgdGltZSAqLwotICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0gICAgLyogc2hpZnQgdGhlIG51bWJlciB1cCBmb3VyIGJpdHMgKi8KLSAgICBpZiAoKHJlcyA9IG1wX211bF8yZCAoYSwgNCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgLyogT1IgaW4gdGhlIHRvcCBmb3VyIGJpdHMgb2YgdGhlIHNvdXJjZSAqLwotICAgIGEtPmRwWzBdIHw9IChiID4+IDI4KSAmIDE1OwotCi0gICAgLyogc2hpZnQgdGhlIHNvdXJjZSB1cCB0byB0aGUgbmV4dCBmb3VyIGJpdHMgKi8KLSAgICBiIDw8PSA0OwotCi0gICAgLyogZW5zdXJlIHRoYXQgZGlnaXRzIGFyZSBub3QgY2xhbXBlZCBvZmYgKi8KLSAgICBhLT51c2VkICs9IDE7Ci0gIH0KLSAgbXBfY2xhbXAgKGEpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3NldF9pbnQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc2hyaW5rLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1NIUklOS19DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzaHJpbmsgYSBiaWdudW0gKi8KLWludCBtcF9zaHJpbmsgKG1wX2ludCAqIGEpCi17Ci0gIG1wX2RpZ2l0ICp0bXA7Ci0gIGlmIChhLT5hbGxvYyAhPSBhLT51c2VkICYmIGEtPnVzZWQgPiAwKSB7Ci0gICAgaWYgKCh0bXAgPSBPUFRfQ0FTVChtcF9kaWdpdCkgWFJFQUxMT0MgKGEtPmRwLCBzaXplb2YgKG1wX2RpZ2l0KSAqIGEtPnVzZWQpKSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gTVBfTUVNOwotICAgIH0KLSAgICBhLT5kcCAgICA9IHRtcDsKLSAgICBhLT5hbGxvYyA9IGEtPnVzZWQ7Ci0gIH0KLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9zaHJpbmsuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc2lnbmVkX2Jpbl9zaXplLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1NJR05FRF9CSU5fU0laRV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBnZXQgdGhlIHNpemUgZm9yIGFuIHNpZ25lZCBlcXVpdmFsZW50ICovCi1pbnQgbXBfc2lnbmVkX2Jpbl9zaXplIChtcF9pbnQgKiBhKQotewotICByZXR1cm4gMSArIG1wX3Vuc2lnbmVkX2Jpbl9zaXplIChhKTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3NpZ25lZF9iaW5fc2l6ZS5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9zcXIuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfU1FSX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIGNvbXB1dGVzIGIgPSBhKmEgKi8KLWludAotbXBfc3FyIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQotewotICBpbnQgICAgIHJlczsKLQotI2lmZGVmIEJOX01QX1RPT01fU1FSX0MKLSAgLyogdXNlIFRvb20tQ29vaz8gKi8KLSAgaWYgKGEtPnVzZWQgPj0gVE9PTV9TUVJfQ1VUT0ZGKSB7Ci0gICAgcmVzID0gbXBfdG9vbV9zcXIoYSwgYik7Ci0gIC8qIEthcmF0c3ViYT8gKi8KLSAgfSBlbHNlIAotI2VuZGlmCi0jaWZkZWYgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCi1pZiAoYS0+dXNlZCA+PSBLQVJBVFNVQkFfU1FSX0NVVE9GRikgewotICAgIHJlcyA9IG1wX2thcmF0c3ViYV9zcXIgKGEsIGIpOwotICB9IGVsc2UgCi0jZW5kaWYKLSAgewotI2lmZGVmIEJOX0ZBU1RfU19NUF9TUVJfQwotICAgIC8qIGNhbiB3ZSB1c2UgdGhlIGZhc3QgY29tYmEgbXVsdGlwbGllcj8gKi8KLSAgICBpZiAoKGEtPnVzZWQgKiAyICsgMSkgPCBNUF9XQVJSQVkgJiYgCi0gICAgICAgICBhLT51c2VkIDwgCi0gICAgICAgICAoMSA8PCAoc2l6ZW9mKG1wX3dvcmQpICogQ0hBUl9CSVQgLSAyKkRJR0lUX0JJVCAtIDEpKSkgewotICAgICAgcmVzID0gZmFzdF9zX21wX3NxciAoYSwgYik7Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSNpZmRlZiBCTl9TX01QX1NRUl9DCi0gICAgICByZXMgPSBzX21wX3NxciAoYSwgYik7Ci0jZWxzZQotICAgICAgcmVzID0gTVBfVkFMOwotI2VuZGlmCi0gIH0KLSAgYi0+c2lnbiA9IE1QX1pQT1M7Ci0gIHJldHVybiByZXM7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9zcXIuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc3FybW9kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1NRUk1PRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBjID0gYSAqIGEgKG1vZCBiKSAqLwotaW50Ci1tcF9zcXJtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCi17Ci0gIGludCAgICAgcmVzOwotICBtcF9pbnQgIHQ7Ci0KLSAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgaWYgKChyZXMgPSBtcF9zcXIgKGEsICZ0KSkgIT0gTVBfT0tBWSkgewotICAgIG1wX2NsZWFyICgmdCk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotICByZXMgPSBtcF9tb2QgKCZ0LCBiLCBjKTsKLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3Nxcm1vZC5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF9zcXJ0LmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1NRUlRfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogdGhpcyBmdW5jdGlvbiBpcyBsZXNzIGdlbmVyaWMgdGhhbiBtcF9uX3Jvb3QsIHNpbXBsZXIgYW5kIGZhc3RlciAqLwotaW50IG1wX3NxcnQobXBfaW50ICphcmcsIG1wX2ludCAqcmV0KSAKLXsKLSAgaW50IHJlczsKLSAgbXBfaW50IHQxLHQyOwotCi0gIC8qIG11c3QgYmUgcG9zaXRpdmUgKi8KLSAgaWYgKGFyZy0+c2lnbiA9PSBNUF9ORUcpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogZWFzeSBvdXQgKi8KLSAgaWYgKG1wX2lzemVybyhhcmcpID09IE1QX1lFUykgewotICAgIG1wX3plcm8ocmV0KTsKLSAgICByZXR1cm4gTVBfT0tBWTsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfaW5pdF9jb3B5KCZ0MSwgYXJnKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX2luaXQoJnQyKSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gRTI7Ci0gIH0KLQotICAvKiBGaXJzdCBhcHByb3guIChub3QgdmVyeSBiYWQgZm9yIGxhcmdlIGFyZykgKi8KLSAgbXBfcnNoZCAoJnQxLHQxLnVzZWQvMik7Ci0KLSAgLyogdDEgPiAwICAqLyAKLSAgaWYgKChyZXMgPSBtcF9kaXYoYXJnLCZ0MSwmdDIsTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIEUxOwotICB9Ci0gIGlmICgocmVzID0gbXBfYWRkKCZ0MSwmdDIsJnQxKSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gRTE7Ci0gIH0KLSAgaWYgKChyZXMgPSBtcF9kaXZfMigmdDEsJnQxKSkgIT0gTVBfT0tBWSkgewotICAgIGdvdG8gRTE7Ci0gIH0KLSAgLyogQW5kIG5vdyB0MSA+IHNxcnQoYXJnKSAqLwotICBkbyB7IAotICAgIGlmICgocmVzID0gbXBfZGl2KGFyZywmdDEsJnQyLE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIEUxOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdDEsJnQyLCZ0MSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gRTE7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfZGl2XzIoJnQxLCZ0MSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gRTE7Ci0gICAgfQotICAgIC8qIHQxID49IHNxcnQoYXJnKSA+PSB0MiBhdCB0aGlzIHBvaW50ICovCi0gIH0gd2hpbGUgKG1wX2NtcF9tYWcoJnQxLCZ0MikgPT0gTVBfR1QpOwotCi0gIG1wX2V4Y2goJnQxLHJldCk7Ci0KLUUxOiBtcF9jbGVhcigmdDIpOwotRTI6IG1wX2NsZWFyKCZ0MSk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3NxcnQuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc3ViLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1NVQl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBoaWdoIGxldmVsIHN1YnRyYWN0aW9uIChoYW5kbGVzIHNpZ25zKSAqLwotaW50Ci1tcF9zdWIgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCi17Ci0gIGludCAgICAgc2EsIHNiLCByZXM7Ci0KLSAgc2EgPSBhLT5zaWduOwotICBzYiA9IGItPnNpZ247Ci0KLSAgaWYgKHNhICE9IHNiKSB7Ci0gICAgLyogc3VidHJhY3QgYSBuZWdhdGl2ZSBmcm9tIGEgcG9zaXRpdmUsIE9SICovCi0gICAgLyogc3VidHJhY3QgYSBwb3NpdGl2ZSBmcm9tIGEgbmVnYXRpdmUuICovCi0gICAgLyogSW4gZWl0aGVyIGNhc2UsIEFERCB0aGVpciBtYWduaXR1ZGVzLCAqLwotICAgIC8qIGFuZCB1c2UgdGhlIHNpZ24gb2YgdGhlIGZpcnN0IG51bWJlci4gKi8KLSAgICBjLT5zaWduID0gc2E7Ci0gICAgcmVzID0gc19tcF9hZGQgKGEsIGIsIGMpOwotICB9IGVsc2UgewotICAgIC8qIHN1YnRyYWN0IGEgcG9zaXRpdmUgZnJvbSBhIHBvc2l0aXZlLCBPUiAqLwotICAgIC8qIHN1YnRyYWN0IGEgbmVnYXRpdmUgZnJvbSBhIG5lZ2F0aXZlLiAqLwotICAgIC8qIEZpcnN0LCB0YWtlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlaXIgKi8KLSAgICAvKiBtYWduaXR1ZGVzLCB0aGVuLi4uICovCi0gICAgaWYgKG1wX2NtcF9tYWcgKGEsIGIpICE9IE1QX0xUKSB7Ci0gICAgICAvKiBDb3B5IHRoZSBzaWduIGZyb20gdGhlIGZpcnN0ICovCi0gICAgICBjLT5zaWduID0gc2E7Ci0gICAgICAvKiBUaGUgZmlyc3QgaGFzIGEgbGFyZ2VyIG9yIGVxdWFsIG1hZ25pdHVkZSAqLwotICAgICAgcmVzID0gc19tcF9zdWIgKGEsIGIsIGMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBUaGUgcmVzdWx0IGhhcyB0aGUgKm9wcG9zaXRlKiBzaWduIGZyb20gKi8KLSAgICAgIC8qIHRoZSBmaXJzdCBudW1iZXIuICovCi0gICAgICBjLT5zaWduID0gKHNhID09IE1QX1pQT1MpID8gTVBfTkVHIDogTVBfWlBPUzsKLSAgICAgIC8qIFRoZSBzZWNvbmQgaGFzIGEgbGFyZ2VyIG1hZ25pdHVkZSAqLwotICAgICAgcmVzID0gc19tcF9zdWIgKGIsIGEsIGMpOwotICAgIH0KLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF9zdWIuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc3ViX2QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfU1VCX0RfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc2luZ2xlIGRpZ2l0IHN1YnRyYWN0aW9uICovCi1pbnQKLW1wX3N1Yl9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKQotewotICBtcF9kaWdpdCAqdG1wYSwgKnRtcGMsIG11OwotICBpbnQgICAgICAgcmVzLCBpeCwgb2xkdXNlZDsKLQotICAvKiBncm93IGMgYXMgcmVxdWlyZWQgKi8KLSAgaWYgKGMtPmFsbG9jIDwgYS0+dXNlZCArIDEpIHsKLSAgICAgaWYgKChyZXMgPSBtcF9ncm93KGMsIGEtPnVzZWQgKyAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICByZXR1cm4gcmVzOwotICAgICB9Ci0gIH0KLQotICAvKiBpZiBhIGlzIG5lZ2F0aXZlIGp1c3QgZG8gYW4gdW5zaWduZWQKLSAgICogYWRkaXRpb24gW3dpdGggZnVkZ2VkIHNpZ25zXQotICAgKi8KLSAgaWYgKGEtPnNpZ24gPT0gTVBfTkVHKSB7Ci0gICAgIGEtPnNpZ24gPSBNUF9aUE9TOwotICAgICByZXMgICAgID0gbXBfYWRkX2QoYSwgYiwgYyk7Ci0gICAgIGEtPnNpZ24gPSBjLT5zaWduID0gTVBfTkVHOwotICAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgLyogc2V0dXAgcmVncyAqLwotICBvbGR1c2VkID0gYy0+dXNlZDsKLSAgdG1wYSAgICA9IGEtPmRwOwotICB0bXBjICAgID0gYy0+ZHA7Ci0KLSAgLyogaWYgYSA8PSBiIHNpbXBseSBmaXggdGhlIHNpbmdsZSBkaWdpdCAqLwotICBpZiAoKGEtPnVzZWQgPT0gMSAmJiBhLT5kcFswXSA8PSBiKSB8fCBhLT51c2VkID09IDApIHsKLSAgICAgaWYgKGEtPnVzZWQgPT0gMSkgewotICAgICAgICAqdG1wYysrID0gYiAtICp0bXBhOwotICAgICB9IGVsc2UgewotICAgICAgICAqdG1wYysrID0gYjsKLSAgICAgfQotICAgICBpeCAgICAgID0gMTsKLQotICAgICAvKiBuZWdhdGl2ZS8xZGlnaXQgKi8KLSAgICAgYy0+c2lnbiA9IE1QX05FRzsKLSAgICAgYy0+dXNlZCA9IDE7Ci0gIH0gZWxzZSB7Ci0gICAgIC8qIHBvc2l0aXZlL3NpemUgKi8KLSAgICAgYy0+c2lnbiA9IE1QX1pQT1M7Ci0gICAgIGMtPnVzZWQgPSBhLT51c2VkOwotCi0gICAgIC8qIHN1YnRyYWN0IGZpcnN0IGRpZ2l0ICovCi0gICAgICp0bXBjICAgID0gKnRtcGErKyAtIGI7Ci0gICAgIG11ICAgICAgID0gKnRtcGMgPj4gKHNpemVvZihtcF9kaWdpdCkgKiBDSEFSX0JJVCAtIDEpOwotICAgICAqdG1wYysrICY9IE1QX01BU0s7Ci0KLSAgICAgLyogaGFuZGxlIHJlc3Qgb2YgdGhlIGRpZ2l0cyAqLwotICAgICBmb3IgKGl4ID0gMTsgaXggPCBhLT51c2VkOyBpeCsrKSB7Ci0gICAgICAgICp0bXBjICAgID0gKnRtcGErKyAtIG11OwotICAgICAgICBtdSAgICAgICA9ICp0bXBjID4+IChzaXplb2YobXBfZGlnaXQpICogQ0hBUl9CSVQgLSAxKTsKLSAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOwotICAgICB9Ci0gIH0KLQotICAvKiB6ZXJvIGV4Y2VzcyBkaWdpdHMgKi8KLSAgd2hpbGUgKGl4KysgPCBvbGR1c2VkKSB7Ci0gICAgICp0bXBjKysgPSAwOwotICB9Ci0gIG1wX2NsYW1wKGMpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfc3ViX2QuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfc3VibW9kLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1NVQk1PRF9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBkID0gYSAtIGIgKG1vZCBjKSAqLwotaW50Ci1tcF9zdWJtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCi17Ci0gIGludCAgICAgcmVzOwotICBtcF9pbnQgIHQ7Ci0KLQotICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX3N1YiAoYSwgYiwgJnQpKSAhPSBNUF9PS0FZKSB7Ci0gICAgbXBfY2xlYXIgKCZ0KTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0gIHJlcyA9IG1wX21vZCAoJnQsIGMsIGQpOwotICBtcF9jbGVhciAoJnQpOwotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfc3VibW9kLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3RvX3NpZ25lZF9iaW4uYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzdG9yZSBpbiBzaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLwotaW50IG1wX3RvX3NpZ25lZF9iaW4gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIpCi17Ci0gIGludCAgICAgcmVzOwotCi0gIGlmICgocmVzID0gbXBfdG9fdW5zaWduZWRfYmluIChhLCBiICsgMSkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0gIGJbMF0gPSAodW5zaWduZWQgY2hhcikgKChhLT5zaWduID09IE1QX1pQT1MpID8gMCA6IDEpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3RvX3NpZ25lZF9iaW4uYyAqLwotCi0vKiBTdGFydDogYm5fbXBfdG9fc2lnbmVkX2Jpbl9uLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1RPX1NJR05FRF9CSU5fTl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzdG9yZSBpbiBzaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLwotaW50IG1wX3RvX3NpZ25lZF9iaW5fbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQotewotICAgaWYgKCpvdXRsZW4gPCAodW5zaWduZWQgbG9uZyltcF9zaWduZWRfYmluX3NpemUoYSkpIHsKLSAgICAgIHJldHVybiBNUF9WQUw7Ci0gICB9Ci0gICAqb3V0bGVuID0gbXBfc2lnbmVkX2Jpbl9zaXplKGEpOwotICAgcmV0dXJuIG1wX3RvX3NpZ25lZF9iaW4oYSwgYik7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF90b19zaWduZWRfYmluX24uYyAqLwotCi0vKiBTdGFydDogYm5fbXBfdG9fdW5zaWduZWRfYmluLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBzdG9yZSBpbiB1bnNpZ25lZCBbYmlnIGVuZGlhbl0gZm9ybWF0ICovCi1pbnQgbXBfdG9fdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCB1bnNpZ25lZCBjaGFyICpiKQotewotICBpbnQgICAgIHgsIHJlczsKLSAgbXBfaW50ICB0OwotCi0gIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgeCA9IDA7Ci0gIHdoaWxlIChtcF9pc3plcm8gKCZ0KSA9PSAwKSB7Ci0jaWZuZGVmIE1QXzhCSVQKLSAgICAgIGJbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSAodC5kcFswXSAmIDI1NSk7Ci0jZWxzZQotICAgICAgYlt4KytdID0gKHVuc2lnbmVkIGNoYXIpICh0LmRwWzBdIHwgKCh0LmRwWzFdICYgMHgwMSkgPDwgNykpOwotI2VuZGlmCi0gICAgaWYgKChyZXMgPSBtcF9kaXZfMmQgKCZ0LCA4LCAmdCwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgIG1wX2NsZWFyICgmdCk7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgfQotICBibl9yZXZlcnNlIChiLCB4KTsKLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF90b191bnNpZ25lZF9iaW4uYyAqLwotCi0vKiBTdGFydDogYm5fbXBfdG9fdW5zaWduZWRfYmluX24uYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfVE9fVU5TSUdORURfQklOX05fQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc3RvcmUgaW4gdW5zaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLwotaW50IG1wX3RvX3Vuc2lnbmVkX2Jpbl9uIChtcF9pbnQgKiBhLCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCi17Ci0gICBpZiAoKm91dGxlbiA8ICh1bnNpZ25lZCBsb25nKW1wX3Vuc2lnbmVkX2Jpbl9zaXplKGEpKSB7Ci0gICAgICByZXR1cm4gTVBfVkFMOwotICAgfQotICAgKm91dGxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGEpOwotICAgcmV0dXJuIG1wX3RvX3Vuc2lnbmVkX2JpbihhLCBiKTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3RvX3Vuc2lnbmVkX2Jpbl9uLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3Rvb21fbXVsLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1RPT01fTVVMX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIG11bHRpcGxpY2F0aW9uIHVzaW5nIHRoZSBUb29tLUNvb2sgMy13YXkgYWxnb3JpdGhtIAotICoKLSAqIE11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIEthcmF0c3ViYSBidXQgaGFzIGEgbG93ZXIgCi0gKiBhc3ltcHRvdGljIHJ1bm5pbmcgdGltZSBvZiBPKE4qKjEuNDY0KS4gIFRoaXMgYWxnb3JpdGhtIGlzIAotICogb25seSBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIFZFUlkgbGFyZ2UgaW5wdXRzIAotICogKHdlJ3JlIHRhbGtpbmcgMTAwMHMgb2YgZGlnaXRzIGhlcmUuLi4pLgotKi8KLWludCBtcF90b29tX211bChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKQotewotICAgIG1wX2ludCB3MCwgdzEsIHcyLCB3MywgdzQsIHRtcDEsIHRtcDIsIGEwLCBhMSwgYTIsIGIwLCBiMSwgYjI7Ci0gICAgaW50IHJlcywgQjsKLSAgICAgICAgCi0gICAgLyogaW5pdCB0ZW1wcyAqLwotICAgIGlmICgocmVzID0gbXBfaW5pdF9tdWx0aSgmdzAsICZ3MSwgJncyLCAmdzMsICZ3NCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhMCwgJmExLCAmYTIsICZiMCwgJmIxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmIyLCAmdG1wMSwgJnRtcDIsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgCi0gICAgLyogQiAqLwotICAgIEIgPSBNSU4oYS0+dXNlZCwgYi0+dXNlZCkgLyAzOwotICAgIAotICAgIC8qIGEgPSBhMiAqIEIqKjIgKyBhMSAqIEIgKyBhMCAqLwotICAgIGlmICgocmVzID0gbXBfbW9kXzJkKGEsIERJR0lUX0JJVCAqIEIsICZhMCkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX2NvcHkoYSwgJmExKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBtcF9yc2hkKCZhMSwgQik7Ci0gICAgbXBfbW9kXzJkKCZhMSwgRElHSVRfQklUICogQiwgJmExKTsKLQotICAgIGlmICgocmVzID0gbXBfY29weShhLCAmYTIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIG1wX3JzaGQoJmEyLCBCKjIpOwotICAgIAotICAgIC8qIGIgPSBiMiAqIEIqKjIgKyBiMSAqIEIgKyBiMCAqLwotICAgIGlmICgocmVzID0gbXBfbW9kXzJkKGIsIERJR0lUX0JJVCAqIEIsICZiMCkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX2NvcHkoYiwgJmIxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBtcF9yc2hkKCZiMSwgQik7Ci0gICAgbXBfbW9kXzJkKCZiMSwgRElHSVRfQklUICogQiwgJmIxKTsKLQotICAgIGlmICgocmVzID0gbXBfY29weShiLCAmYjIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIG1wX3JzaGQoJmIyLCBCKjIpOwotICAgIAotICAgIC8qIHcwID0gYTAqYjAgKi8KLSAgICBpZiAoKHJlcyA9IG1wX211bCgmYTAsICZiMCwgJncwKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICAKLSAgICAvKiB3NCA9IGEyICogYjIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX211bCgmYTIsICZiMiwgJnc0KSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICAKLSAgICAvKiB3MSA9IChhMiArIDIoYTEgKyAyYTApKShiMiArIDIoYjEgKyAyYjApKSAqLwotICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEyLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYjAsICZ0bXAyKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMiwgJmIxLCAmdG1wMikpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMiwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjIsICZ0bXAyKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICAKLSAgICBpZiAoKHJlcyA9IG1wX211bCgmdG1wMSwgJnRtcDIsICZ3MSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgCi0gICAgLyogdzMgPSAoYTAgKyAyKGExICsgMmEyKSkoYjAgKyAyKGIxICsgMmIyKSkgKi8KLSAgICBpZiAoKHJlcyA9IG1wX211bF8yKCZhMiwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX211bF8yKCZ0bXAxLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMCwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIAotICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmIyLCAmdG1wMikpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDIsICZiMSwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDIsICZ0bXAyKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMiwgJmIwLCAmdG1wMikpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKChyZXMgPSBtcF9tdWwoJnRtcDEsICZ0bXAyLCAmdzMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIAotCi0gICAgLyogdzIgPSAoYTIgKyBhMSArIGEwKShiMiArIGIxICsgYjApICovCi0gICAgaWYgKChyZXMgPSBtcF9hZGQoJmEyLCAmYTEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9hZGQoJmIyLCAmYjEsICZ0bXAyKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMiwgJmIwLCAmdG1wMikpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9tdWwoJnRtcDEsICZ0bXAyLCAmdzIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIAotICAgIC8qIG5vdyBzb2x2ZSB0aGUgbWF0cml4IAotICAgIAotICAgICAgIDAgIDAgIDAgIDAgIDEKLSAgICAgICAxICAyICA0ICA4ICAxNgotICAgICAgIDEgIDEgIDEgIDEgIDEKLSAgICAgICAxNiA4ICA0ICAyICAxCi0gICAgICAgMSAgMCAgMCAgMCAgMAotICAgICAgIAotICAgICAgIHVzaW5nIDEyIHN1YnRyYWN0aW9ucywgNCBzaGlmdHMsIAotICAgICAgICAgICAgICAyIHNtYWxsIGRpdmlzaW9ucyBhbmQgMSBzbWFsbCBtdWx0aXBsaWNhdGlvbiAKLSAgICAgKi8KLSAgICAgCi0gICAgIC8qIHIxIC0gcjQgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdzQsICZ3MSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjMgLSByMCAqLwotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ3MCwgJnczKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMS8yICovCi0gICAgIGlmICgocmVzID0gbXBfZGl2XzIoJncxLCAmdzEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIzLzIgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9kaXZfMigmdzMsICZ3MykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjIgLSByMCAtIHI0ICovCi0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MiwgJncwLCAmdzIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MiwgJnc0LCAmdzIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIxIC0gcjIgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdzIsICZ3MSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjMgLSByMiAqLwotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ3MiwgJnczKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMSAtIDhyMCAqLwotICAgICBpZiAoKHJlcyA9IG1wX211bF8yZCgmdzAsIDMsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ0bXAxLCAmdzEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIzIC0gOHI0ICovCi0gICAgIGlmICgocmVzID0gbXBfbXVsXzJkKCZ3NCwgMywgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJnRtcDEsICZ3MykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogM3IyIC0gcjEgLSByMyAqLwotICAgICBpZiAoKHJlcyA9IG1wX211bF9kKCZ3MiwgMywgJncyKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3MSwgJncyKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3MywgJncyKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMSAtIHIyICovCi0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJncyLCAmdzEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIzIC0gcjIgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzIsICZ3MykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjEvMyAqLwotICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8zKCZ3MSwgJncxLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMy8zICovCi0gICAgIGlmICgocmVzID0gbXBfZGl2XzMoJnczLCAmdzMsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIAotICAgICAvKiBhdCB0aGlzIHBvaW50IHNoaWZ0IFdbbl0gYnkgQipuICovCi0gICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzEsIDEqQikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3MiwgMipCKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX2xzaGQoJnczLCAzKkIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzQsIDQqQikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0gICAgIAotICAgICAKLSAgICAgaWYgKChyZXMgPSBtcF9hZGQoJncwLCAmdzEsIGMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfYWRkKCZ3MiwgJnczLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgaWYgKChyZXMgPSBtcF9hZGQoJnc0LCAmdG1wMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCBjLCBjKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfSAgICAgCi0gICAgIAotRVJSOgotICAgICBtcF9jbGVhcl9tdWx0aSgmdzAsICZ3MSwgJncyLCAmdzMsICZ3NCwgCi0gICAgICAgICAgICAgICAgICAgICZhMCwgJmExLCAmYTIsICZiMCwgJmIxLCAKLSAgICAgICAgICAgICAgICAgICAgJmIyLCAmdG1wMSwgJnRtcDIsIE5VTEwpOwotICAgICByZXR1cm4gcmVzOwotfSAgICAgCi0gICAgIAotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfdG9vbV9tdWwuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfdG9vbV9zcXIuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fTVBfVE9PTV9TUVJfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc3F1YXJpbmcgdXNpbmcgVG9vbS1Db29rIDMtd2F5IGFsZ29yaXRobSAqLwotaW50Ci1tcF90b29tX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYikKLXsKLSAgICBtcF9pbnQgdzAsIHcxLCB3MiwgdzMsIHc0LCB0bXAxLCBhMCwgYTEsIGEyOwotICAgIGludCByZXMsIEI7Ci0KLSAgICAvKiBpbml0IHRlbXBzICovCi0gICAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAmYTAsICZhMSwgJmEyLCAmdG1wMSwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLQotICAgIC8qIEIgKi8KLSAgICBCID0gYS0+dXNlZCAvIDM7Ci0KLSAgICAvKiBhID0gYTIgKiBCKioyICsgYTEgKiBCICsgYTAgKi8KLSAgICBpZiAoKHJlcyA9IG1wX21vZF8yZChhLCBESUdJVF9CSVQgKiBCLCAmYTApKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotCi0gICAgaWYgKChyZXMgPSBtcF9jb3B5KGEsICZhMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgbXBfcnNoZCgmYTEsIEIpOwotICAgIG1wX21vZF8yZCgmYTEsIERJR0lUX0JJVCAqIEIsICZhMSk7Ci0KLSAgICBpZiAoKHJlcyA9IG1wX2NvcHkoYSwgJmEyKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBtcF9yc2hkKCZhMiwgQioyKTsKLQotICAgIC8qIHcwID0gYTAqYTAgKi8KLSAgICBpZiAoKHJlcyA9IG1wX3NxcigmYTAsICZ3MCkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0KLSAgICAvKiB3NCA9IGEyICogYTIgKi8KLSAgICBpZiAoKHJlcyA9IG1wX3NxcigmYTIsICZ3NCkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0KLSAgICAvKiB3MSA9IChhMiArIDIoYTEgKyAyYTApKSoqMiAqLwotICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEyLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0KLSAgICBpZiAoKHJlcyA9IG1wX3NxcigmdG1wMSwgJncxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLQotICAgIC8qIHczID0gKGEwICsgMihhMSArIDJhMikpKioyICovCi0gICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYTIsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmExLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLQotICAgIGlmICgocmVzID0gbXBfc3FyKCZ0bXAxLCAmdzMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgZ290byBFUlI7Ci0gICAgfQotCi0KLSAgICAvKiB3MiA9IChhMiArIGExICsgYTApKioyICovCi0gICAgaWYgKChyZXMgPSBtcF9hZGQoJmEyLCAmYTEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgIGdvdG8gRVJSOwotICAgIH0KLSAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0gICAgaWYgKChyZXMgPSBtcF9zcXIoJnRtcDEsICZ3MikpICE9IE1QX09LQVkpIHsKLSAgICAgICBnb3RvIEVSUjsKLSAgICB9Ci0KLSAgICAvKiBub3cgc29sdmUgdGhlIG1hdHJpeAotCi0gICAgICAgMCAgMCAgMCAgMCAgMQotICAgICAgIDEgIDIgIDQgIDggIDE2Ci0gICAgICAgMSAgMSAgMSAgMSAgMQotICAgICAgIDE2IDggIDQgIDIgIDEKLSAgICAgICAxICAwICAwICAwICAwCi0KLSAgICAgICB1c2luZyAxMiBzdWJ0cmFjdGlvbnMsIDQgc2hpZnRzLCAyIHNtYWxsIGRpdmlzaW9ucyBhbmQgMSBzbWFsbCBtdWx0aXBsaWNhdGlvbi4KLSAgICAgKi8KLQotICAgICAvKiByMSAtIHI0ICovCi0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJnc0LCAmdzEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIzIC0gcjAgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzAsICZ3MykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjEvMiAqLwotICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ3MSwgJncxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMy8yICovCi0gICAgIGlmICgocmVzID0gbXBfZGl2XzIoJnczLCAmdzMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIyIC0gcjAgLSByNCAqLwotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3MCwgJncyKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3NCwgJncyKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMSAtIHIyICovCi0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJncyLCAmdzEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIzIC0gcjIgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzIsICZ3MykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjEgLSA4cjAgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQoJncwLCAzLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdG1wMSwgJncxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMyAtIDhyNCAqLwotICAgICBpZiAoKHJlcyA9IG1wX211bF8yZCgmdzQsIDMsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ0bXAxLCAmdzMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIDNyMiAtIHIxIC0gcjMgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9tdWxfZCgmdzIsIDMsICZ3MikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzEsICZ3MikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzMsICZ3MikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjEgLSByMiAqLwotICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3MiwgJncxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICAvKiByMyAtIHIyICovCi0gICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncyLCAmdzMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIC8qIHIxLzMgKi8KLSAgICAgaWYgKChyZXMgPSBtcF9kaXZfMygmdzEsICZ3MSwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgLyogcjMvMyAqLwotICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8zKCZ3MywgJnczLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotCi0gICAgIC8qIGF0IHRoaXMgcG9pbnQgc2hpZnQgV1tuXSBieSBCKm4gKi8KLSAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3MSwgMSpCKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX2xzaGQoJncyLCAyKkIpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzMsIDMqQikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLSAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3NCwgNCpCKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotCi0gICAgIGlmICgocmVzID0gbXBfYWRkKCZ3MCwgJncxLCBiKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzIsICZ3MywgJnRtcDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gRVJSOwotICAgICB9Ci0gICAgIGlmICgocmVzID0gbXBfYWRkKCZ3NCwgJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIEVSUjsKLSAgICAgfQotICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgYiwgYikpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBFUlI7Ci0gICAgIH0KLQotRVJSOgotICAgICBtcF9jbGVhcl9tdWx0aSgmdzAsICZ3MSwgJncyLCAmdzMsICZ3NCwgJmEwLCAmYTEsICZhMiwgJnRtcDEsIE5VTEwpOwotICAgICByZXR1cm4gcmVzOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF90b29tX3Nxci5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF90b3JhZGl4LmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOX01QX1RPUkFESVhfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc3RvcmVzIGEgYmlnbnVtIGFzIGEgQVNDSUkgc3RyaW5nIGluIGEgZ2l2ZW4gcmFkaXggKDIuLjY0KSAqLwotaW50IG1wX3RvcmFkaXggKG1wX2ludCAqIGEsIGNoYXIgKnN0ciwgaW50IHJhZGl4KQotewotICBpbnQgICAgIHJlcywgZGlnczsKLSAgbXBfaW50ICB0OwotICBtcF9kaWdpdCBkOwotICBjaGFyICAgKl9zID0gc3RyOwotCi0gIC8qIGNoZWNrIHJhbmdlIG9mIHRoZSByYWRpeCAqLwotICBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gNjQpIHsKLSAgICByZXR1cm4gTVBfVkFMOwotICB9Ci0KLSAgLyogcXVpY2sgb3V0IGlmIGl0cyB6ZXJvICovCi0gIGlmIChtcF9pc3plcm8oYSkgPT0gMSkgewotICAgICAqc3RyKysgPSAnMCc7Ci0gICAgICpzdHIgPSAnXDAnOwotICAgICByZXR1cm4gTVBfT0tBWTsKLSAgfQotCi0gIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKLSAgICByZXR1cm4gcmVzOwotICB9Ci0KLSAgLyogaWYgaXQgaXMgbmVnYXRpdmUgb3V0cHV0IGEgLSAqLwotICBpZiAodC5zaWduID09IE1QX05FRykgewotICAgICsrX3M7Ci0gICAgKnN0cisrID0gJy0nOwotICAgIHQuc2lnbiA9IE1QX1pQT1M7Ci0gIH0KLQotICBkaWdzID0gMDsKLSAgd2hpbGUgKG1wX2lzemVybyAoJnQpID09IDApIHsKLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl9kICgmdCwgKG1wX2RpZ2l0KSByYWRpeCwgJnQsICZkKSkgIT0gTVBfT0tBWSkgewotICAgICAgbXBfY2xlYXIgKCZ0KTsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgICpzdHIrKyA9IG1wX3Nfcm1hcFtkXTsKLSAgICArK2RpZ3M7Ci0gIH0KLQotICAvKiByZXZlcnNlIHRoZSBkaWdpdHMgb2YgdGhlIHN0cmluZy4gIEluIHRoaXMgY2FzZSBfcyBwb2ludHMKLSAgICogdG8gdGhlIGZpcnN0IGRpZ2l0IFtleGx1ZGluZyB0aGUgc2lnbl0gb2YgdGhlIG51bWJlcl0KLSAgICovCi0gIGJuX3JldmVyc2UgKCh1bnNpZ25lZCBjaGFyICopX3MsIGRpZ3MpOwotCi0gIC8qIGFwcGVuZCBhIE5VTEwgc28gdGhlIHN0cmluZyBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkICovCi0gICpzdHIgPSAnXDAnOwotCi0gIG1wX2NsZWFyICgmdCk7Ci0gIHJldHVybiBNUF9PS0FZOwotfQotCi0jZW5kaWYKLQotLyogRW5kOiBibl9tcF90b3JhZGl4LmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3RvcmFkaXhfbi5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9UT1JBRElYX05fQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogc3RvcmVzIGEgYmlnbnVtIGFzIGEgQVNDSUkgc3RyaW5nIGluIGEgZ2l2ZW4gcmFkaXggKDIuLjY0KSAKLSAqCi0gKiBTdG9yZXMgdXB0byBtYXhsZW4tMSBjaGFycyBhbmQgYWx3YXlzIGEgTlVMTCBieXRlIAotICovCi1pbnQgbXBfdG9yYWRpeF9uKG1wX2ludCAqIGEsIGNoYXIgKnN0ciwgaW50IHJhZGl4LCBpbnQgbWF4bGVuKQotewotICBpbnQgICAgIHJlcywgZGlnczsKLSAgbXBfaW50ICB0OwotICBtcF9kaWdpdCBkOwotICBjaGFyICAgKl9zID0gc3RyOwotCi0gIC8qIGNoZWNrIHJhbmdlIG9mIHRoZSBtYXhsZW4sIHJhZGl4ICovCi0gIGlmIChtYXhsZW4gPCAzIHx8IHJhZGl4IDwgMiB8fCByYWRpeCA+IDY0KSB7Ci0gICAgcmV0dXJuIE1QX1ZBTDsKLSAgfQotCi0gIC8qIHF1aWNrIG91dCBpZiBpdHMgemVybyAqLwotICBpZiAobXBfaXN6ZXJvKGEpID09IDEpIHsKLSAgICAgKnN0cisrID0gJzAnOwotICAgICAqc3RyID0gJ1wwJzsKLSAgICAgcmV0dXJuIE1QX09LQVk7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIGlmIGl0IGlzIG5lZ2F0aXZlIG91dHB1dCBhIC0gKi8KLSAgaWYgKHQuc2lnbiA9PSBNUF9ORUcpIHsKLSAgICAvKiB3ZSBoYXZlIHRvIHJldmVyc2Ugb3VyIGRpZ2l0cyBsYXRlci4uLiBidXQgbm90IHRoZSAtIHNpZ24hISAqLwotICAgICsrX3M7Ci0KLSAgICAvKiBzdG9yZSB0aGUgZmxhZyBhbmQgbWFyayB0aGUgbnVtYmVyIGFzIHBvc2l0aXZlICovCi0gICAgKnN0cisrID0gJy0nOwotICAgIHQuc2lnbiA9IE1QX1pQT1M7Ci0gCi0gICAgLyogc3VidHJhY3QgYSBjaGFyICovCi0gICAgLS1tYXhsZW47Ci0gIH0KLQotICBkaWdzID0gMDsKLSAgd2hpbGUgKG1wX2lzemVybyAoJnQpID09IDApIHsKLSAgICBpZiAoKHJlcyA9IG1wX2Rpdl9kICgmdCwgKG1wX2RpZ2l0KSByYWRpeCwgJnQsICZkKSkgIT0gTVBfT0tBWSkgewotICAgICAgbXBfY2xlYXIgKCZ0KTsKLSAgICAgIHJldHVybiByZXM7Ci0gICAgfQotICAgICpzdHIrKyA9IG1wX3Nfcm1hcFtkXTsKLSAgICArK2RpZ3M7Ci0KLSAgICBpZiAoLS1tYXhsZW4gPT0gMSkgewotICAgICAgIC8qIG5vIG1vcmUgcm9vbSAqLwotICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIHJldmVyc2UgdGhlIGRpZ2l0cyBvZiB0aGUgc3RyaW5nLiAgSW4gdGhpcyBjYXNlIF9zIHBvaW50cwotICAgKiB0byB0aGUgZmlyc3QgZGlnaXQgW2V4bHVkaW5nIHRoZSBzaWduXSBvZiB0aGUgbnVtYmVyXQotICAgKi8KLSAgYm5fcmV2ZXJzZSAoKHVuc2lnbmVkIGNoYXIgKilfcywgZGlncyk7Ci0KLSAgLyogYXBwZW5kIGEgTlVMTCBzbyB0aGUgc3RyaW5nIGlzIHByb3Blcmx5IHRlcm1pbmF0ZWQgKi8KLSAgKnN0ciA9ICdcMCc7Ci0KLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3RvcmFkaXhfbi5jICovCi0KLS8qIFN0YXJ0OiBibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBnZXQgdGhlIHNpemUgZm9yIGFuIHVuc2lnbmVkIGVxdWl2YWxlbnQgKi8KLWludCBtcF91bnNpZ25lZF9iaW5fc2l6ZSAobXBfaW50ICogYSkKLXsKLSAgaW50ICAgICBzaXplID0gbXBfY291bnRfYml0cyAoYSk7Ci0gIHJldHVybiAoc2l6ZSAvIDggKyAoKHNpemUgJiA3KSAhPSAwID8gMSA6IDApKTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX21wX3Vuc2lnbmVkX2Jpbl9zaXplLmMgKi8KLQotLyogU3RhcnQ6IGJuX21wX3hvci5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9YT1JfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogWE9SIHR3byBpbnRzIHRvZ2V0aGVyICovCi1pbnQKLW1wX3hvciAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgaW50ICAgICByZXMsIGl4LCBweDsKLSAgbXBfaW50ICB0LCAqeDsKLQotICBpZiAoYS0+dXNlZCA+IGItPnVzZWQpIHsKLSAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBweCA9IGItPnVzZWQ7Ci0gICAgeCA9IGI7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBiKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgcHggPSBhLT51c2VkOwotICAgIHggPSBhOwotICB9Ci0KLSAgZm9yIChpeCA9IDA7IGl4IDwgcHg7IGl4KyspIHsKLSAgICAgdC5kcFtpeF0gXj0geC0+ZHBbaXhdOwotICB9Ci0gIG1wX2NsYW1wICgmdCk7Ci0gIG1wX2V4Y2ggKGMsICZ0KTsKLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9tcF94b3IuYyAqLwotCi0vKiBTdGFydDogYm5fbXBfemVyby5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9NUF9aRVJPX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHNldCB0byB6ZXJvICovCi12b2lkIG1wX3plcm8gKG1wX2ludCAqIGEpCi17Ci0gIGludCAgICAgICBuOwotICBtcF9kaWdpdCAqdG1wOwotCi0gIGEtPnNpZ24gPSBNUF9aUE9TOwotICBhLT51c2VkID0gMDsKLQotICB0bXAgPSBhLT5kcDsKLSAgZm9yIChuID0gMDsgbiA8IGEtPmFsbG9jOyBuKyspIHsKLSAgICAgKnRtcCsrID0gMDsKLSAgfQotfQotI2VuZGlmCi0KLS8qIEVuZDogYm5fbXBfemVyby5jICovCi0KLS8qIFN0YXJ0OiBibl9wcmltZV90YWIuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fUFJJTUVfVEFCX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi1jb25zdCBtcF9kaWdpdCBsdG1fcHJpbWVfdGFiW10gPSB7Ci0gIDB4MDAwMiwgMHgwMDAzLCAweDAwMDUsIDB4MDAwNywgMHgwMDBCLCAweDAwMEQsIDB4MDAxMSwgMHgwMDEzLAotICAweDAwMTcsIDB4MDAxRCwgMHgwMDFGLCAweDAwMjUsIDB4MDAyOSwgMHgwMDJCLCAweDAwMkYsIDB4MDAzNSwKLSAgMHgwMDNCLCAweDAwM0QsIDB4MDA0MywgMHgwMDQ3LCAweDAwNDksIDB4MDA0RiwgMHgwMDUzLCAweDAwNTksCi0gIDB4MDA2MSwgMHgwMDY1LCAweDAwNjcsIDB4MDA2QiwgMHgwMDZELCAweDAwNzEsIDB4MDA3RiwKLSNpZm5kZWYgTVBfOEJJVAotICAweDAwODMsCi0gIDB4MDA4OSwgMHgwMDhCLCAweDAwOTUsIDB4MDA5NywgMHgwMDlELCAweDAwQTMsIDB4MDBBNywgMHgwMEFELAotICAweDAwQjMsIDB4MDBCNSwgMHgwMEJGLCAweDAwQzEsIDB4MDBDNSwgMHgwMEM3LCAweDAwRDMsIDB4MDBERiwKLSAgMHgwMEUzLCAweDAwRTUsIDB4MDBFOSwgMHgwMEVGLCAweDAwRjEsIDB4MDBGQiwgMHgwMTAxLCAweDAxMDcsCi0gIDB4MDEwRCwgMHgwMTBGLCAweDAxMTUsIDB4MDExOSwgMHgwMTFCLCAweDAxMjUsIDB4MDEzMywgMHgwMTM3LAotCi0gIDB4MDEzOSwgMHgwMTNELCAweDAxNEIsIDB4MDE1MSwgMHgwMTVCLCAweDAxNUQsIDB4MDE2MSwgMHgwMTY3LAotICAweDAxNkYsIDB4MDE3NSwgMHgwMTdCLCAweDAxN0YsIDB4MDE4NSwgMHgwMThELCAweDAxOTEsIDB4MDE5OSwKLSAgMHgwMUEzLCAweDAxQTUsIDB4MDFBRiwgMHgwMUIxLCAweDAxQjcsIDB4MDFCQiwgMHgwMUMxLCAweDAxQzksCi0gIDB4MDFDRCwgMHgwMUNGLCAweDAxRDMsIDB4MDFERiwgMHgwMUU3LCAweDAxRUIsIDB4MDFGMywgMHgwMUY3LAotICAweDAxRkQsIDB4MDIwOSwgMHgwMjBCLCAweDAyMUQsIDB4MDIyMywgMHgwMjJELCAweDAyMzMsIDB4MDIzOSwKLSAgMHgwMjNCLCAweDAyNDEsIDB4MDI0QiwgMHgwMjUxLCAweDAyNTcsIDB4MDI1OSwgMHgwMjVGLCAweDAyNjUsCi0gIDB4MDI2OSwgMHgwMjZCLCAweDAyNzcsIDB4MDI4MSwgMHgwMjgzLCAweDAyODcsIDB4MDI4RCwgMHgwMjkzLAotICAweDAyOTUsIDB4MDJBMSwgMHgwMkE1LCAweDAyQUIsIDB4MDJCMywgMHgwMkJELCAweDAyQzUsIDB4MDJDRiwKLQotICAweDAyRDcsIDB4MDJERCwgMHgwMkUzLCAweDAyRTcsIDB4MDJFRiwgMHgwMkY1LCAweDAyRjksIDB4MDMwMSwKLSAgMHgwMzA1LCAweDAzMTMsIDB4MDMxRCwgMHgwMzI5LCAweDAzMkIsIDB4MDMzNSwgMHgwMzM3LCAweDAzM0IsCi0gIDB4MDMzRCwgMHgwMzQ3LCAweDAzNTUsIDB4MDM1OSwgMHgwMzVCLCAweDAzNUYsIDB4MDM2RCwgMHgwMzcxLAotICAweDAzNzMsIDB4MDM3NywgMHgwMzhCLCAweDAzOEYsIDB4MDM5NywgMHgwM0ExLCAweDAzQTksIDB4MDNBRCwKLSAgMHgwM0IzLCAweDAzQjksIDB4MDNDNywgMHgwM0NCLCAweDAzRDEsIDB4MDNENywgMHgwM0RGLCAweDAzRTUsCi0gIDB4MDNGMSwgMHgwM0Y1LCAweDAzRkIsIDB4MDNGRCwgMHgwNDA3LCAweDA0MDksIDB4MDQwRiwgMHgwNDE5LAotICAweDA0MUIsIDB4MDQyNSwgMHgwNDI3LCAweDA0MkQsIDB4MDQzRiwgMHgwNDQzLCAweDA0NDUsIDB4MDQ0OSwKLSAgMHgwNDRGLCAweDA0NTUsIDB4MDQ1RCwgMHgwNDYzLCAweDA0NjksIDB4MDQ3RiwgMHgwNDgxLCAweDA0OEIsCi0KLSAgMHgwNDkzLCAweDA0OUQsIDB4MDRBMywgMHgwNEE5LCAweDA0QjEsIDB4MDRCRCwgMHgwNEMxLCAweDA0QzcsCi0gIDB4MDRDRCwgMHgwNENGLCAweDA0RDUsIDB4MDRFMSwgMHgwNEVCLCAweDA0RkQsIDB4MDRGRiwgMHgwNTAzLAotICAweDA1MDksIDB4MDUwQiwgMHgwNTExLCAweDA1MTUsIDB4MDUxNywgMHgwNTFCLCAweDA1MjcsIDB4MDUyOSwKLSAgMHgwNTJGLCAweDA1NTEsIDB4MDU1NywgMHgwNTVELCAweDA1NjUsIDB4MDU3NywgMHgwNTgxLCAweDA1OEYsCi0gIDB4MDU5MywgMHgwNTk1LCAweDA1OTksIDB4MDU5RiwgMHgwNUE3LCAweDA1QUIsIDB4MDVBRCwgMHgwNUIzLAotICAweDA1QkYsIDB4MDVDOSwgMHgwNUNCLCAweDA1Q0YsIDB4MDVEMSwgMHgwNUQ1LCAweDA1REIsIDB4MDVFNywKLSAgMHgwNUYzLCAweDA1RkIsIDB4MDYwNywgMHgwNjBELCAweDA2MTEsIDB4MDYxNywgMHgwNjFGLCAweDA2MjMsCi0gIDB4MDYyQiwgMHgwNjJGLCAweDA2M0QsIDB4MDY0MSwgMHgwNjQ3LCAweDA2NDksIDB4MDY0RCwgMHgwNjUzCi0jZW5kaWYKLX07Ci0jZW5kaWYKLQotLyogRW5kOiBibl9wcmltZV90YWIuYyAqLwotCi0vKiBTdGFydDogYm5fcmV2ZXJzZS5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9SRVZFUlNFX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIHJldmVyc2UgYW4gYXJyYXksIHVzZWQgZm9yIHJhZGl4IGNvZGUgKi8KLXZvaWQKLWJuX3JldmVyc2UgKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pCi17Ci0gIGludCAgICAgaXgsIGl5OwotICB1bnNpZ25lZCBjaGFyIHQ7Ci0KLSAgaXggPSAwOwotICBpeSA9IGxlbiAtIDE7Ci0gIHdoaWxlIChpeCA8IGl5KSB7Ci0gICAgdCAgICAgPSBzW2l4XTsKLSAgICBzW2l4XSA9IHNbaXldOwotICAgIHNbaXldID0gdDsKLSAgICArK2l4OwotICAgIC0taXk7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX3JldmVyc2UuYyAqLwotCi0vKiBTdGFydDogYm5fc19tcF9hZGQuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fU19NUF9BRERfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogbG93IGxldmVsIGFkZGl0aW9uLCBiYXNlZCBvbiBIQUMgcHAuNTk0LCBBbGdvcml0aG0gMTQuNyAqLwotaW50Ci1zX21wX2FkZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgbXBfaW50ICp4OwotICBpbnQgICAgIG9sZHVzZSwgcmVzLCBtaW4sIG1heDsKLQotICAvKiBmaW5kIHNpemVzLCB3ZSBsZXQgfGF8IDw9IHxifCB3aGljaCBtZWFucyB3ZSBoYXZlIHRvIHNvcnQKLSAgICogdGhlbS4gICJ4IiB3aWxsIHBvaW50IHRvIHRoZSBpbnB1dCB3aXRoIHRoZSBtb3N0IGRpZ2l0cwotICAgKi8KLSAgaWYgKGEtPnVzZWQgPiBiLT51c2VkKSB7Ci0gICAgbWluID0gYi0+dXNlZDsKLSAgICBtYXggPSBhLT51c2VkOwotICAgIHggPSBhOwotICB9IGVsc2UgewotICAgIG1pbiA9IGEtPnVzZWQ7Ci0gICAgbWF4ID0gYi0+dXNlZDsKLSAgICB4ID0gYjsKLSAgfQotCi0gIC8qIGluaXQgcmVzdWx0ICovCi0gIGlmIChjLT5hbGxvYyA8IG1heCArIDEpIHsKLSAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGMsIG1heCArIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgfQotCi0gIC8qIGdldCBvbGQgdXNlZCBkaWdpdCBjb3VudCBhbmQgc2V0IG5ldyBvbmUgKi8KLSAgb2xkdXNlID0gYy0+dXNlZDsKLSAgYy0+dXNlZCA9IG1heCArIDE7Ci0KLSAgewotICAgIHJlZ2lzdGVyIG1wX2RpZ2l0IHUsICp0bXBhLCAqdG1wYiwgKnRtcGM7Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0KLSAgICAvKiBhbGlhcyBmb3IgZGlnaXQgcG9pbnRlcnMgKi8KLQotICAgIC8qIGZpcnN0IGlucHV0ICovCi0gICAgdG1wYSA9IGEtPmRwOwotCi0gICAgLyogc2Vjb25kIGlucHV0ICovCi0gICAgdG1wYiA9IGItPmRwOwotCi0gICAgLyogZGVzdGluYXRpb24gKi8KLSAgICB0bXBjID0gYy0+ZHA7Ci0KLSAgICAvKiB6ZXJvIHRoZSBjYXJyeSAqLwotICAgIHUgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBtaW47IGkrKykgewotICAgICAgLyogQ29tcHV0ZSB0aGUgc3VtIGF0IG9uZSBkaWdpdCwgVFtpXSA9IEFbaV0gKyBCW2ldICsgVSAqLwotICAgICAgKnRtcGMgPSAqdG1wYSsrICsgKnRtcGIrKyArIHU7Ci0KLSAgICAgIC8qIFUgPSBjYXJyeSBiaXQgb2YgVFtpXSAqLwotICAgICAgdSA9ICp0bXBjID4+ICgobXBfZGlnaXQpRElHSVRfQklUKTsKLQotICAgICAgLyogdGFrZSBhd2F5IGNhcnJ5IGJpdCBmcm9tIFRbaV0gKi8KLSAgICAgICp0bXBjKysgJj0gTVBfTUFTSzsKLSAgICB9Ci0KLSAgICAvKiBub3cgY29weSBoaWdoZXIgd29yZHMgaWYgYW55LCB0aGF0IGlzIGluIEErQiAKLSAgICAgKiBpZiBBIG9yIEIgaGFzIG1vcmUgZGlnaXRzIGFkZCB0aG9zZSBpbiAKLSAgICAgKi8KLSAgICBpZiAobWluICE9IG1heCkgewotICAgICAgZm9yICg7IGkgPCBtYXg7IGkrKykgewotICAgICAgICAvKiBUW2ldID0gWFtpXSArIFUgKi8KLSAgICAgICAgKnRtcGMgPSB4LT5kcFtpXSArIHU7Ci0KLSAgICAgICAgLyogVSA9IGNhcnJ5IGJpdCBvZiBUW2ldICovCi0gICAgICAgIHUgPSAqdG1wYyA+PiAoKG1wX2RpZ2l0KURJR0lUX0JJVCk7Ci0KLSAgICAgICAgLyogdGFrZSBhd2F5IGNhcnJ5IGJpdCBmcm9tIFRbaV0gKi8KLSAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIGFkZCBjYXJyeSAqLwotICAgICp0bXBjKysgPSB1OwotCi0gICAgLyogY2xlYXIgZGlnaXRzIGFib3ZlIG9sZHVzZWQgKi8KLSAgICBmb3IgKGkgPSBjLT51c2VkOyBpIDwgb2xkdXNlOyBpKyspIHsKLSAgICAgICp0bXBjKysgPSAwOwotICAgIH0KLSAgfQotCi0gIG1wX2NsYW1wIChjKTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9zX21wX2FkZC5jICovCi0KLS8qIFN0YXJ0OiBibl9zX21wX2V4cHRtb2QuYyAqLwotI2luY2x1ZGUgPGx0Y190b21tYXRoLmg+Ci0jaWZkZWYgQk5fU19NUF9FWFBUTU9EX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLSNpZmRlZiBNUF9MT1dfTUVNCi0gICAjZGVmaW5lIFRBQl9TSVpFIDMyCi0jZWxzZQotICAgI2RlZmluZSBUQUJfU0laRSAyNTYKLSNlbmRpZgotCi1pbnQgc19tcF9leHB0bW9kIChtcF9pbnQgKiBHLCBtcF9pbnQgKiBYLCBtcF9pbnQgKiBQLCBtcF9pbnQgKiBZLCBpbnQgcmVkbW9kZSkKLXsKLSAgbXBfaW50ICBNW1RBQl9TSVpFXSwgcmVzLCBtdTsKLSAgbXBfZGlnaXQgYnVmOwotICBpbnQgICAgIGVyciwgYml0YnVmLCBiaXRjcHksIGJpdGNudCwgbW9kZSwgZGlnaWR4LCB4LCB5LCB3aW5zaXplOwotICBpbnQgKCpyZWR1eCkobXBfaW50KixtcF9pbnQqLG1wX2ludCopOwotCi0gIC8qIGZpbmQgd2luZG93IHNpemUgKi8KLSAgeCA9IG1wX2NvdW50X2JpdHMgKFgpOwotICBpZiAoeCA8PSA3KSB7Ci0gICAgd2luc2l6ZSA9IDI7Ci0gIH0gZWxzZSBpZiAoeCA8PSAzNikgewotICAgIHdpbnNpemUgPSAzOwotICB9IGVsc2UgaWYgKHggPD0gMTQwKSB7Ci0gICAgd2luc2l6ZSA9IDQ7Ci0gIH0gZWxzZSBpZiAoeCA8PSA0NTApIHsKLSAgICB3aW5zaXplID0gNTsKLSAgfSBlbHNlIGlmICh4IDw9IDEzMDMpIHsKLSAgICB3aW5zaXplID0gNjsKLSAgfSBlbHNlIGlmICh4IDw9IDM1MjkpIHsKLSAgICB3aW5zaXplID0gNzsKLSAgfSBlbHNlIHsKLSAgICB3aW5zaXplID0gODsKLSAgfQotCi0jaWZkZWYgTVBfTE9XX01FTQotICAgIGlmICh3aW5zaXplID4gNSkgewotICAgICAgIHdpbnNpemUgPSA1OwotICAgIH0KLSNlbmRpZgotCi0gIC8qIGluaXQgTSBhcnJheSAqLwotICAvKiBpbml0IGZpcnN0IGNlbGwgKi8KLSAgaWYgKChlcnIgPSBtcF9pbml0KCZNWzFdKSkgIT0gTVBfT0tBWSkgewotICAgICByZXR1cm4gZXJyOyAKLSAgfQotCi0gIC8qIG5vdyBpbml0IHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgYXJyYXkgKi8KLSAgZm9yICh4ID0gMTw8KHdpbnNpemUtMSk7IHggPCAoMSA8PCB3aW5zaXplKTsgeCsrKSB7Ci0gICAgaWYgKChlcnIgPSBtcF9pbml0KCZNW3hdKSkgIT0gTVBfT0tBWSkgewotICAgICAgZm9yICh5ID0gMTw8KHdpbnNpemUtMSk7IHkgPCB4OyB5KyspIHsKLSAgICAgICAgbXBfY2xlYXIgKCZNW3ldKTsKLSAgICAgIH0KLSAgICAgIG1wX2NsZWFyKCZNWzFdKTsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICB9Ci0KLSAgLyogY3JlYXRlIG11LCB1c2VkIGZvciBCYXJyZXR0IHJlZHVjdGlvbiAqLwotICBpZiAoKGVyciA9IG1wX2luaXQgKCZtdSkpICE9IE1QX09LQVkpIHsKLSAgICBnb3RvIExCTF9NOwotICB9Ci0gIAotICBpZiAocmVkbW9kZSA9PSAwKSB7Ci0gICAgIGlmICgoZXJyID0gbXBfcmVkdWNlX3NldHVwICgmbXUsIFApKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX01VOwotICAgICB9Ci0gICAgIHJlZHV4ID0gbXBfcmVkdWNlOwotICB9IGVsc2UgewotICAgICBpZiAoKGVyciA9IG1wX3JlZHVjZV8ya19zZXR1cF9sIChQLCAmbXUpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX01VOwotICAgICB9Ci0gICAgIHJlZHV4ID0gbXBfcmVkdWNlXzJrX2w7Ci0gIH0gICAgCi0KLSAgLyogY3JlYXRlIE0gdGFibGUKLSAgICoKLSAgICogVGhlIE0gdGFibGUgY29udGFpbnMgcG93ZXJzIG9mIHRoZSBiYXNlLCAKLSAgICogZS5nLiBNW3hdID0gRyoqeCBtb2QgUAotICAgKgotICAgKiBUaGUgZmlyc3QgaGFsZiBvZiB0aGUgdGFibGUgaXMgbm90IAotICAgKiBjb21wdXRlZCB0aG91Z2ggYWNjZXB0IGZvciBNWzBdIGFuZCBNWzFdCi0gICAqLwotICBpZiAoKGVyciA9IG1wX21vZCAoRywgUCwgJk1bMV0pKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfTVU7Ci0gIH0KLQotICAvKiBjb21wdXRlIHRoZSB2YWx1ZSBhdCBNWzE8PCh3aW5zaXplLTEpXSBieSBzcXVhcmluZyAKLSAgICogTVsxXSAod2luc2l6ZS0xKSB0aW1lcyAKLSAgICovCi0gIGlmICgoZXJyID0gbXBfY29weSAoJk1bMV0sICZNWzEgPDwgKHdpbnNpemUgLSAxKV0pKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfTVU7Ci0gIH0KLQotICBmb3IgKHggPSAwOyB4IDwgKHdpbnNpemUgLSAxKTsgeCsrKSB7Ci0gICAgLyogc3F1YXJlIGl0ICovCi0gICAgaWYgKChlcnIgPSBtcF9zcXIgKCZNWzEgPDwgKHdpbnNpemUgLSAxKV0sIAotICAgICAgICAgICAgICAgICAgICAgICAmTVsxIDw8ICh3aW5zaXplIC0gMSldKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfTVU7Ci0gICAgfQotCi0gICAgLyogcmVkdWNlIG1vZHVsbyBQICovCi0gICAgaWYgKChlcnIgPSByZWR1eCAoJk1bMSA8PCAod2luc2l6ZSAtIDEpXSwgUCwgJm11KSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBMQkxfTVU7Ci0gICAgfQotICB9Ci0KLSAgLyogY3JlYXRlIHVwcGVyIHRhYmxlLCB0aGF0IGlzIE1beF0gPSBNW3gtMV0gKiBNWzFdIChtb2QgUCkKLSAgICogZm9yIHggPSAoMioqKHdpbnNpemUgLSAxKSArIDEpIHRvICgyKip3aW5zaXplIC0gMSkKLSAgICovCi0gIGZvciAoeCA9ICgxIDw8ICh3aW5zaXplIC0gMSkpICsgMTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKLSAgICBpZiAoKGVyciA9IG1wX211bCAoJk1beCAtIDFdLCAmTVsxXSwgJk1beF0pKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBnb3RvIExCTF9NVTsKLSAgICB9Ci0gICAgaWYgKChlcnIgPSByZWR1eCAoJk1beF0sIFAsICZtdSkpICE9IE1QX09LQVkpIHsKLSAgICAgIGdvdG8gTEJMX01VOwotICAgIH0KLSAgfQotCi0gIC8qIHNldHVwIHJlc3VsdCAqLwotICBpZiAoKGVyciA9IG1wX2luaXQgKCZyZXMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgZ290byBMQkxfTVU7Ci0gIH0KLSAgbXBfc2V0ICgmcmVzLCAxKTsKLQotICAvKiBzZXQgaW5pdGlhbCBtb2RlIGFuZCBiaXQgY250ICovCi0gIG1vZGUgICA9IDA7Ci0gIGJpdGNudCA9IDE7Ci0gIGJ1ZiAgICA9IDA7Ci0gIGRpZ2lkeCA9IFgtPnVzZWQgLSAxOwotICBiaXRjcHkgPSAwOwotICBiaXRidWYgPSAwOwotCi0gIGZvciAoOzspIHsKLSAgICAvKiBncmFiIG5leHQgZGlnaXQgYXMgcmVxdWlyZWQgKi8KLSAgICBpZiAoLS1iaXRjbnQgPT0gMCkgewotICAgICAgLyogaWYgZGlnaWR4ID09IC0xIHdlIGFyZSBvdXQgb2YgZGlnaXRzICovCi0gICAgICBpZiAoZGlnaWR4ID09IC0xKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgLyogcmVhZCBuZXh0IGRpZ2l0IGFuZCByZXNldCB0aGUgYml0Y250ICovCi0gICAgICBidWYgICAgPSBYLT5kcFtkaWdpZHgtLV07Ci0gICAgICBiaXRjbnQgPSAoaW50KSBESUdJVF9CSVQ7Ci0gICAgfQotCi0gICAgLyogZ3JhYiB0aGUgbmV4dCBtc2IgZnJvbSB0aGUgZXhwb25lbnQgKi8KLSAgICB5ICAgICA9IChidWYgPj4gKG1wX2RpZ2l0KShESUdJVF9CSVQgLSAxKSkgJiAxOwotICAgIGJ1ZiA8PD0gKG1wX2RpZ2l0KTE7Ci0KLSAgICAvKiBpZiB0aGUgYml0IGlzIHplcm8gYW5kIG1vZGUgPT0gMCB0aGVuIHdlIGlnbm9yZSBpdAotICAgICAqIFRoZXNlIHJlcHJlc2VudCB0aGUgbGVhZGluZyB6ZXJvIGJpdHMgYmVmb3JlIHRoZSBmaXJzdCAxIGJpdAotICAgICAqIGluIHRoZSBleHBvbmVudC4gIFRlY2huaWNhbGx5IHRoaXMgb3B0IGlzIG5vdCByZXF1aXJlZCBidXQgaXQKLSAgICAgKiBkb2VzIGxvd2VyIHRoZSAjIG9mIHRyaXZpYWwgc3F1YXJpbmcvcmVkdWN0aW9ucyB1c2VkCi0gICAgICovCi0gICAgaWYgKG1vZGUgPT0gMCAmJiB5ID09IDApIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAxIHRoZW4gd2Ugc3F1YXJlICovCi0gICAgaWYgKG1vZGUgPT0gMSAmJiB5ID09IDApIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCAmbXUpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICAgIH0KLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGVsc2Ugd2UgYWRkIGl0IHRvIHRoZSB3aW5kb3cgKi8KLSAgICBiaXRidWYgfD0gKHkgPDwgKHdpbnNpemUgLSArK2JpdGNweSkpOwotICAgIG1vZGUgICAgPSAyOwotCi0gICAgaWYgKGJpdGNweSA9PSB3aW5zaXplKSB7Ci0gICAgICAvKiBvayB3aW5kb3cgaXMgZmlsbGVkIHNvIHNxdWFyZSBhcyByZXF1aXJlZCBhbmQgbXVsdGlwbHkgICovCi0gICAgICAvKiBzcXVhcmUgZmlyc3QgKi8KLSAgICAgIGZvciAoeCA9IDA7IHggPCB3aW5zaXplOyB4KyspIHsKLSAgICAgICAgaWYgKChlcnIgPSBtcF9zcXIgKCZyZXMsICZyZXMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsICZtdSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLyogdGhlbiBtdWx0aXBseSAqLwotICAgICAgaWYgKChlcnIgPSBtcF9tdWwgKCZyZXMsICZNW2JpdGJ1Zl0sICZyZXMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICAgIH0KLSAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsICZtdSkpICE9IE1QX09LQVkpIHsKLSAgICAgICAgZ290byBMQkxfUkVTOwotICAgICAgfQotCi0gICAgICAvKiBlbXB0eSB3aW5kb3cgYW5kIHJlc2V0ICovCi0gICAgICBiaXRjcHkgPSAwOwotICAgICAgYml0YnVmID0gMDsKLSAgICAgIG1vZGUgICA9IDE7Ci0gICAgfQotICB9Ci0KLSAgLyogaWYgYml0cyByZW1haW4gdGhlbiBzcXVhcmUvbXVsdGlwbHkgKi8KLSAgaWYgKG1vZGUgPT0gMiAmJiBiaXRjcHkgPiAwKSB7Ci0gICAgLyogc3F1YXJlIHRoZW4gbXVsdGlwbHkgaWYgdGhlIGJpdCBpcyBzZXQgKi8KLSAgICBmb3IgKHggPSAwOyB4IDwgYml0Y3B5OyB4KyspIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgewotICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICB9Ci0gICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCAmbXUpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICAgIH0KLQotICAgICAgYml0YnVmIDw8PSAxOwotICAgICAgaWYgKChiaXRidWYgJiAoMSA8PCB3aW5zaXplKSkgIT0gMCkgewotICAgICAgICAvKiB0aGVuIG11bHRpcGx5ICovCi0gICAgICAgIGlmICgoZXJyID0gbXBfbXVsICgmcmVzLCAmTVsxXSwgJnJlcykpICE9IE1QX09LQVkpIHsKLSAgICAgICAgICBnb3RvIExCTF9SRVM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgJm11KSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgIGdvdG8gTEJMX1JFUzsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIG1wX2V4Y2ggKCZyZXMsIFkpOwotICBlcnIgPSBNUF9PS0FZOwotTEJMX1JFUzptcF9jbGVhciAoJnJlcyk7Ci1MQkxfTVU6bXBfY2xlYXIgKCZtdSk7Ci1MQkxfTToKLSAgbXBfY2xlYXIoJk1bMV0pOwotICBmb3IgKHggPSAxPDwod2luc2l6ZS0xKTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKLSAgICBtcF9jbGVhciAoJk1beF0pOwotICB9Ci0gIHJldHVybiBlcnI7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9zX21wX2V4cHRtb2QuYyAqLwotCi0vKiBTdGFydDogYm5fc19tcF9tdWxfZGlncy5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9TX01QX01VTF9ESUdTX0MKLS8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KLSAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KLSAqCi0gKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5Ci0gKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKLSAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0Lm9yZwotICovCi0KLS8qIG11bHRpcGxpZXMgfGF8ICogfGJ8IGFuZCBvbmx5IGNvbXB1dGVzIHVwdG8gZGlncyBkaWdpdHMgb2YgcmVzdWx0Ci0gKiBIQUMgcHAuIDU5NSwgQWxnb3JpdGhtIDE0LjEyICBNb2RpZmllZCBzbyB5b3UgY2FuIGNvbnRyb2wgaG93IAotICogbWFueSBkaWdpdHMgb2Ygb3V0cHV0IGFyZSBjcmVhdGVkLgotICovCi1pbnQgc19tcF9tdWxfZGlncyAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgaW50IGRpZ3MpCi17Ci0gIG1wX2ludCAgdDsKLSAgaW50ICAgICByZXMsIHBhLCBwYiwgaXgsIGl5OwotICBtcF9kaWdpdCB1OwotICBtcF93b3JkIHI7Ci0gIG1wX2RpZ2l0IHRtcHgsICp0bXB0LCAqdG1weTsKLQotICAvKiBjYW4gd2UgdXNlIHRoZSBmYXN0IG11bHRpcGxpZXI/ICovCi0gIGlmICgoKGRpZ3MpIDwgTVBfV0FSUkFZKSAmJgotICAgICAgTUlOIChhLT51c2VkLCBiLT51c2VkKSA8IAotICAgICAgICAgICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7Ci0gICAgcmV0dXJuIGZhc3Rfc19tcF9tdWxfZGlncyAoYSwgYiwgYywgZGlncyk7Ci0gIH0KLQotICBpZiAoKHJlcyA9IG1wX2luaXRfc2l6ZSAoJnQsIGRpZ3MpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotICB0LnVzZWQgPSBkaWdzOwotCi0gIC8qIGNvbXB1dGUgdGhlIGRpZ2l0cyBvZiB0aGUgcHJvZHVjdCBkaXJlY3RseSAqLwotICBwYSA9IGEtPnVzZWQ7Ci0gIGZvciAoaXggPSAwOyBpeCA8IHBhOyBpeCsrKSB7Ci0gICAgLyogc2V0IHRoZSBjYXJyeSB0byB6ZXJvICovCi0gICAgdSA9IDA7Ci0KLSAgICAvKiBsaW1pdCBvdXJzZWx2ZXMgdG8gbWFraW5nIGRpZ3MgZGlnaXRzIG9mIG91dHB1dCAqLwotICAgIHBiID0gTUlOIChiLT51c2VkLCBkaWdzIC0gaXgpOwotCi0gICAgLyogc2V0dXAgc29tZSBhbGlhc2VzICovCi0gICAgLyogY29weSBvZiB0aGUgZGlnaXQgZnJvbSBhIHVzZWQgd2l0aGluIHRoZSBuZXN0ZWQgbG9vcCAqLwotICAgIHRtcHggPSBhLT5kcFtpeF07Ci0gICAgCi0gICAgLyogYW4gYWxpYXMgZm9yIHRoZSBkZXN0aW5hdGlvbiBzaGlmdGVkIGl4IHBsYWNlcyAqLwotICAgIHRtcHQgPSB0LmRwICsgaXg7Ci0gICAgCi0gICAgLyogYW4gYWxpYXMgZm9yIHRoZSBkaWdpdHMgb2YgYiAqLwotICAgIHRtcHkgPSBiLT5kcDsKLQotICAgIC8qIGNvbXB1dGUgdGhlIGNvbHVtbnMgb2YgdGhlIG91dHB1dCBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSAqLwotICAgIGZvciAoaXkgPSAwOyBpeSA8IHBiOyBpeSsrKSB7Ci0gICAgICAvKiBjb21wdXRlIHRoZSBjb2x1bW4gYXMgYSBtcF93b3JkICovCi0gICAgICByICAgICAgID0gKChtcF93b3JkKSp0bXB0KSArCi0gICAgICAgICAgICAgICAgKChtcF93b3JkKXRtcHgpICogKChtcF93b3JkKSp0bXB5KyspICsKLSAgICAgICAgICAgICAgICAoKG1wX3dvcmQpIHUpOwotCi0gICAgICAvKiB0aGUgbmV3IGNvbHVtbiBpcyB0aGUgbG93ZXIgcGFydCBvZiB0aGUgcmVzdWx0ICovCi0gICAgICAqdG1wdCsrID0gKG1wX2RpZ2l0KSAociAmICgobXBfd29yZCkgTVBfTUFTSykpOwotCi0gICAgICAvKiBnZXQgdGhlIGNhcnJ5IHdvcmQgZnJvbSB0aGUgcmVzdWx0ICovCi0gICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KSAociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOwotICAgIH0KLSAgICAvKiBzZXQgY2FycnkgaWYgaXQgaXMgcGxhY2VkIGJlbG93IGRpZ3MgKi8KLSAgICBpZiAoaXggKyBpeSA8IGRpZ3MpIHsKLSAgICAgICp0bXB0ID0gdTsKLSAgICB9Ci0gIH0KLQotICBtcF9jbGFtcCAoJnQpOwotICBtcF9leGNoICgmdCwgYyk7Ci0KLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9zX21wX211bF9kaWdzLmMgKi8KLQotLyogU3RhcnQ6IGJuX3NfbXBfbXVsX2hpZ2hfZGlncy5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9TX01QX01VTF9ISUdIX0RJR1NfQwotLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgotICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgotICoKLSAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKLSAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAotICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyogbXVsdGlwbGllcyB8YXwgKiB8YnwgYW5kIGRvZXMgbm90IGNvbXB1dGUgdGhlIGxvd2VyIGRpZ3MgZGlnaXRzCi0gKiBbbWVhbnQgdG8gZ2V0IHRoZSBoaWdoZXIgcGFydCBvZiB0aGUgcHJvZHVjdF0KLSAqLwotaW50Ci1zX21wX211bF9oaWdoX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQotewotICBtcF9pbnQgIHQ7Ci0gIGludCAgICAgcmVzLCBwYSwgcGIsIGl4LCBpeTsKLSAgbXBfZGlnaXQgdTsKLSAgbXBfd29yZCByOwotICBtcF9kaWdpdCB0bXB4LCAqdG1wdCwgKnRtcHk7Ci0KLSAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBtdWx0aXBsaWVyPyAqLwotI2lmZGVmIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKLSAgaWYgKCgoYS0+dXNlZCArIGItPnVzZWQgKyAxKSA8IE1QX1dBUlJBWSkKLSAgICAgICYmIE1JTiAoYS0+dXNlZCwgYi0+dXNlZCkgPCAoMSA8PCAoKENIQVJfQklUICogc2l6ZW9mIChtcF93b3JkKSkgLSAoMiAqIERJR0lUX0JJVCkpKSkgewotICAgIHJldHVybiBmYXN0X3NfbXBfbXVsX2hpZ2hfZGlncyAoYSwgYiwgYywgZGlncyk7Ci0gIH0KLSNlbmRpZgotCi0gIGlmICgocmVzID0gbXBfaW5pdF9zaXplICgmdCwgYS0+dXNlZCArIGItPnVzZWQgKyAxKSkgIT0gTVBfT0tBWSkgewotICAgIHJldHVybiByZXM7Ci0gIH0KLSAgdC51c2VkID0gYS0+dXNlZCArIGItPnVzZWQgKyAxOwotCi0gIHBhID0gYS0+dXNlZDsKLSAgcGIgPSBiLT51c2VkOwotICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgewotICAgIC8qIGNsZWFyIHRoZSBjYXJyeSAqLwotICAgIHUgPSAwOwotCi0gICAgLyogbGVmdCBoYW5kIHNpZGUgb2YgQVtpeF0gKiBCW2l5XSAqLwotICAgIHRtcHggPSBhLT5kcFtpeF07Ci0KLSAgICAvKiBhbGlhcyB0byB0aGUgYWRkcmVzcyBvZiB3aGVyZSB0aGUgZGlnaXRzIHdpbGwgYmUgc3RvcmVkICovCi0gICAgdG1wdCA9ICYodC5kcFtkaWdzXSk7Ci0KLSAgICAvKiBhbGlhcyBmb3Igd2hlcmUgdG8gcmVhZCB0aGUgcmlnaHQgaGFuZCBzaWRlIGZyb20gKi8KLSAgICB0bXB5ID0gYi0+ZHAgKyAoZGlncyAtIGl4KTsKLQotICAgIGZvciAoaXkgPSBkaWdzIC0gaXg7IGl5IDwgcGI7IGl5KyspIHsKLSAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQgKi8KLSAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpKnRtcHQpICsKLSAgICAgICAgICAgICAgICAoKG1wX3dvcmQpdG1weCkgKiAoKG1wX3dvcmQpKnRtcHkrKykgKwotICAgICAgICAgICAgICAgICgobXBfd29yZCkgdSk7Ci0KLSAgICAgIC8qIGdldCB0aGUgbG93ZXIgcGFydCAqLwotICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKLQotICAgICAgLyogY2FycnkgdGhlIGNhcnJ5ICovCi0gICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KSAociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOwotICAgIH0KLSAgICAqdG1wdCA9IHU7Ci0gIH0KLSAgbXBfY2xhbXAgKCZ0KTsKLSAgbXBfZXhjaCAoJnQsIGMpOwotICBtcF9jbGVhciAoJnQpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLSNlbmRpZgotCi0vKiBFbmQ6IGJuX3NfbXBfbXVsX2hpZ2hfZGlncy5jICovCi0KLS8qIFN0YXJ0OiBibl9zX21wX3Nxci5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9TX01QX1NRUl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBsb3cgbGV2ZWwgc3F1YXJpbmcsIGIgPSBhKmEsIEhBQyBwcC41OTYtNTk3LCBBbGdvcml0aG0gMTQuMTYgKi8KLWludCBzX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKLXsKLSAgbXBfaW50ICB0OwotICBpbnQgICAgIHJlcywgaXgsIGl5LCBwYTsKLSAgbXBfd29yZCByOwotICBtcF9kaWdpdCB1LCB0bXB4LCAqdG1wdDsKLQotICBwYSA9IGEtPnVzZWQ7Ci0gIGlmICgocmVzID0gbXBfaW5pdF9zaXplICgmdCwgMipwYSArIDEpKSAhPSBNUF9PS0FZKSB7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIGRlZmF1bHQgdXNlZCBpcyBtYXhpbXVtIHBvc3NpYmxlIHNpemUgKi8KLSAgdC51c2VkID0gMipwYSArIDE7Ci0KLSAgZm9yIChpeCA9IDA7IGl4IDwgcGE7IGl4KyspIHsKLSAgICAvKiBmaXJzdCBjYWxjdWxhdGUgdGhlIGRpZ2l0IGF0IDIqaXggKi8KLSAgICAvKiBjYWxjdWxhdGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQgKi8KLSAgICByID0gKChtcF93b3JkKSB0LmRwWzIqaXhdKSArCi0gICAgICAgICgobXBfd29yZClhLT5kcFtpeF0pKigobXBfd29yZClhLT5kcFtpeF0pOwotCi0gICAgLyogc3RvcmUgbG93ZXIgcGFydCBpbiByZXN1bHQgKi8KLSAgICB0LmRwW2l4K2l4XSA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKLQotICAgIC8qIGdldCB0aGUgY2FycnkgKi8KLSAgICB1ICAgICAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOwotCi0gICAgLyogbGVmdCBoYW5kIHNpZGUgb2YgQVtpeF0gKiBBW2l5XSAqLwotICAgIHRtcHggICAgICAgID0gYS0+ZHBbaXhdOwotCi0gICAgLyogYWxpYXMgZm9yIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzICovCi0gICAgdG1wdCAgICAgICAgPSB0LmRwICsgKDIqaXggKyAxKTsKLSAgICAKLSAgICBmb3IgKGl5ID0gaXggKyAxOyBpeSA8IHBhOyBpeSsrKSB7Ci0gICAgICAvKiBmaXJzdCBjYWxjdWxhdGUgdGhlIHByb2R1Y3QgKi8KLSAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpdG1weCkgKiAoKG1wX3dvcmQpYS0+ZHBbaXldKTsKLQotICAgICAgLyogbm93IGNhbGN1bGF0ZSB0aGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQsIG5vdGUgd2UgdXNlCi0gICAgICAgKiBhZGRpdGlvbiBpbnN0ZWFkIG9mICoyIHNpbmNlIGl0J3MgZWFzaWVyIHRvIG9wdGltaXplCi0gICAgICAgKi8KLSAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpICp0bXB0KSArIHIgKyByICsgKChtcF93b3JkKSB1KTsKLQotICAgICAgLyogc3RvcmUgbG93ZXIgcGFydCAqLwotICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKLQotICAgICAgLyogZ2V0IGNhcnJ5ICovCi0gICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7Ci0gICAgfQotICAgIC8qIHByb3BhZ2F0ZSB1cHdhcmRzICovCi0gICAgd2hpbGUgKHUgIT0gKChtcF9kaWdpdCkgMCkpIHsKLSAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpICp0bXB0KSArICgobXBfd29yZCkgdSk7Ci0gICAgICAqdG1wdCsrID0gKG1wX2RpZ2l0KSAociAmICgobXBfd29yZCkgTVBfTUFTSykpOwotICAgICAgdSAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOwotICAgIH0KLSAgfQotCi0gIG1wX2NsYW1wICgmdCk7Ci0gIG1wX2V4Y2ggKCZ0LCBiKTsKLSAgbXBfY2xlYXIgKCZ0KTsKLSAgcmV0dXJuIE1QX09LQVk7Ci19Ci0jZW5kaWYKLQotLyogRW5kOiBibl9zX21wX3Nxci5jICovCi0KLS8qIFN0YXJ0OiBibl9zX21wX3N1Yi5jICovCi0jaW5jbHVkZSA8bHRjX3RvbW1hdGguaD4KLSNpZmRlZiBCTl9TX01QX1NVQl9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBsb3cgbGV2ZWwgc3VidHJhY3Rpb24gKGFzc3VtZXMgfGF8ID4gfGJ8KSwgSEFDIHBwLjU5NSBBbGdvcml0aG0gMTQuOSAqLwotaW50Ci1zX21wX3N1YiAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKLXsKLSAgaW50ICAgICBvbGR1c2UsIHJlcywgbWluLCBtYXg7Ci0KLSAgLyogZmluZCBzaXplcyAqLwotICBtaW4gPSBiLT51c2VkOwotICBtYXggPSBhLT51c2VkOwotCi0gIC8qIGluaXQgcmVzdWx0ICovCi0gIGlmIChjLT5hbGxvYyA8IG1heCkgewotICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgbWF4KSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gIH0KLSAgb2xkdXNlID0gYy0+dXNlZDsKLSAgYy0+dXNlZCA9IG1heDsKLQotICB7Ci0gICAgcmVnaXN0ZXIgbXBfZGlnaXQgdSwgKnRtcGEsICp0bXBiLCAqdG1wYzsKLSAgICByZWdpc3RlciBpbnQgaTsKLQotICAgIC8qIGFsaWFzIGZvciBkaWdpdCBwb2ludGVycyAqLwotICAgIHRtcGEgPSBhLT5kcDsKLSAgICB0bXBiID0gYi0+ZHA7Ci0gICAgdG1wYyA9IGMtPmRwOwotCi0gICAgLyogc2V0IGNhcnJ5IHRvIHplcm8gKi8KLSAgICB1ID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbWluOyBpKyspIHsKLSAgICAgIC8qIFRbaV0gPSBBW2ldIC0gQltpXSAtIFUgKi8KLSAgICAgICp0bXBjID0gKnRtcGErKyAtICp0bXBiKysgLSB1OwotCi0gICAgICAvKiBVID0gY2FycnkgYml0IG9mIFRbaV0KLSAgICAgICAqIE5vdGUgdGhpcyBzYXZlcyBwZXJmb3JtaW5nIGFuIEFORCBvcGVyYXRpb24gc2luY2UKLSAgICAgICAqIGlmIGEgY2FycnkgZG9lcyBvY2N1ciBpdCB3aWxsIHByb3BhZ2F0ZSBhbGwgdGhlIHdheSB0byB0aGUKLSAgICAgICAqIE1TQi4gIEFzIGEgcmVzdWx0IGEgc2luZ2xlIHNoaWZ0IGlzIGVub3VnaCB0byBnZXQgdGhlIGNhcnJ5Ci0gICAgICAgKi8KLSAgICAgIHUgPSAqdG1wYyA+PiAoKG1wX2RpZ2l0KShDSEFSX0JJVCAqIHNpemVvZiAobXBfZGlnaXQpIC0gMSkpOwotCi0gICAgICAvKiBDbGVhciBjYXJyeSBmcm9tIFRbaV0gKi8KLSAgICAgICp0bXBjKysgJj0gTVBfTUFTSzsKLSAgICB9Ci0KLSAgICAvKiBub3cgY29weSBoaWdoZXIgd29yZHMgaWYgYW55LCBlLmcuIGlmIEEgaGFzIG1vcmUgZGlnaXRzIHRoYW4gQiAgKi8KLSAgICBmb3IgKDsgaSA8IG1heDsgaSsrKSB7Ci0gICAgICAvKiBUW2ldID0gQVtpXSAtIFUgKi8KLSAgICAgICp0bXBjID0gKnRtcGErKyAtIHU7Ci0KLSAgICAgIC8qIFUgPSBjYXJyeSBiaXQgb2YgVFtpXSAqLwotICAgICAgdSA9ICp0bXBjID4+ICgobXBfZGlnaXQpKENIQVJfQklUICogc2l6ZW9mIChtcF9kaWdpdCkgLSAxKSk7Ci0KLSAgICAgIC8qIENsZWFyIGNhcnJ5IGZyb20gVFtpXSAqLwotICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOwotICAgIH0KLQotICAgIC8qIGNsZWFyIGRpZ2l0cyBhYm92ZSB1c2VkIChzaW5jZSB3ZSBtYXkgbm90IGhhdmUgZ3Jvd24gcmVzdWx0IGFib3ZlKSAqLwotICAgIGZvciAoaSA9IGMtPnVzZWQ7IGkgPCBvbGR1c2U7IGkrKykgewotICAgICAgKnRtcGMrKyA9IDA7Ci0gICAgfQotICB9Ci0KLSAgbXBfY2xhbXAgKGMpOwotICByZXR1cm4gTVBfT0tBWTsKLX0KLQotI2VuZGlmCi0KLS8qIEVuZDogYm5fc19tcF9zdWIuYyAqLwotCi0vKiBTdGFydDogYm5jb3JlLmMgKi8KLSNpbmNsdWRlIDxsdGNfdG9tbWF0aC5oPgotI2lmZGVmIEJOQ09SRV9DCi0vKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCi0gKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCi0gKgotICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQotICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCi0gKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKiBLbm93biBvcHRpbWFsIGNvbmZpZ3VyYXRpb25zCi0KLSBDUFUgICAgICAgICAgICAgICAgICAgIC9Db21waWxlciAgICAgL01VTCBDVVRPRkYvU1FSIENVVE9GRgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEludGVsIFA0IE5vcnRod29vZCAgICAgL0dDQyB2My40LjEgICAvICAgICAgICA4OC8gICAgICAgMTI4L0xUTSAwLjMyIDstKQotIEFNRCBBdGhsb242NCAgICAgICAgICAgL0dDQyB2My40LjQgICAvICAgICAgICA3NC8gICAgICAgMTI0L0xUTSAwLjM0Ci0gCi0qLwotCi1pbnQgICAgIEtBUkFUU1VCQV9NVUxfQ1VUT0ZGID0gNzQsICAgICAgLyogTWluLiBudW1iZXIgb2YgZGlnaXRzIGJlZm9yZSBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb24gaXMgdXNlZC4gKi8KLSAgICAgICAgS0FSQVRTVUJBX1NRUl9DVVRPRkYgPSAxMjQsICAgICAvKiBNaW4uIG51bWJlciBvZiBkaWdpdHMgYmVmb3JlIEthcmF0c3ViYSBzcXVhcmluZyBpcyB1c2VkLiAqLwotICAgICAgICAKLSAgICAgICAgVE9PTV9NVUxfQ1VUT0ZGICAgICAgPSAzNTAsICAgICAgLyogbm8gb3B0aW1hbCB2YWx1ZXMgb2YgdGhlc2UgYXJlIGtub3duIHlldCBzbyBzZXQgZW0gaGlnaCAqLwotICAgICAgICBUT09NX1NRUl9DVVRPRkYgICAgICA9IDQwMDsgCi0jZW5kaWYKLQotLyogRW5kOiBibmNvcmUuYyAqLwotCi0KLS8qIEVPRiAqLwotCi0vKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9tcGkvbXBpLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9tcGkvbXBpX3RvX2x0Y19lcnJvci5jIGIvc3JjL21pc2MvbXBpL21waV90b19sdGNfZXJyb3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzOWVhMS4uMDAwMDAwMAotLS0gYS9zcmMvbWlzYy9tcGkvbXBpX3RvX2x0Y19lcnJvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYwotICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCi0gKi8KLSNpbmNsdWRlICJ0b21jcnlwdC5oIgotCi0vKioKLSAgQGZpbGUgbXBpX3RvX2x0Y19lcnJvci5jCi0gIENvbnZlcnQgTVBJIGVycm9ycyB0byBMVEMsIFRvbSBTdCBEZW5pcwotKi8gIAotCi0jaWZkZWYgTVBJCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAgICBpbnQgbXBpX2NvZGUsIGx0Y19jb2RlOwotfSBtcGlfdG9fbHRjX2NvZGVzW10gPSB7Ci0gICB7IE1QX09LQVkgLCAgQ1JZUFRfT0t9LAotICAgeyBNUF9NRU0gICwgIENSWVBUX01FTX0sCi0gICB7IE1QX1ZBTCAgLCAgQ1JZUFRfSU5WQUxJRF9BUkd9LAotfTsKLQotLyoqCi0gICBDb252ZXJ0IGEgTVBJIGVycm9yIHRvIGEgTFRDIGVycm9yIChQb3NzaWJseSB0aGUgbW9zdCBwb3dlcmZ1bCBmdW5jdGlvbiBldmVyISAgT2ggd2FpdC4uLiBubykgCi0gICBAcGFyYW0gZXJyICAgIFRoZSBlcnJvciB0byBjb252ZXJ0Ci0gICBAcmV0dXJuIFRoZSBlcXVpdmFsZW50IExUQyBlcnJvciBjb2RlIG9yIENSWVBUX0VSUk9SIGlmIG5vbmUgZm91bmQKLSovCi1pbnQgbXBpX3RvX2x0Y19lcnJvcihpbnQgZXJyKQotewotICAgaW50IHg7Ci0KLSAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YobXBpX3RvX2x0Y19jb2Rlcykvc2l6ZW9mKG1waV90b19sdGNfY29kZXNbMF0pKTsgeCsrKSB7Ci0gICAgICAgaWYgKGVyciA9PSBtcGlfdG9fbHRjX2NvZGVzW3hdLm1waV9jb2RlKSB7IAotICAgICAgICAgIHJldHVybiBtcGlfdG9fbHRjX2NvZGVzW3hdLmx0Y19jb2RlOwotICAgICAgIH0KLSAgIH0KLSAgIHJldHVybiBDUllQVF9FUlJPUjsKLX0KLSNlbmRpZgotCi0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL21waS9tcGlfdG9fbHRjX2Vycm9yLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9tcGkvcmFuZF9wcmltZS5jIGIvc3JjL21pc2MvbXBpL3JhbmRfcHJpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM1OTIxYS4uMDAwMDAwMAotLS0gYS9zcmMvbWlzYy9tcGkvcmFuZF9wcmltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYwotICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCi0gKi8KLSNpbmNsdWRlICJ0b21jcnlwdC5oIgotCi0vKioKLSAgQGZpbGUgcmFuZF9wcmltZS5jCi0gIEdlbmVyYXRlIGEgcmFuZG9tIHByaW1lLCBUb20gU3QgRGVuaXMKLSovICAKLSNpZmRlZiBNUEkKLQotc3RydWN0IHJuZ19kYXRhIHsKLSAgIHBybmdfc3RhdGUgKnBybmc7Ci0gICBpbnQgICAgICAgICB3cHJuZzsKLX07Ci0KLXN0YXRpYyBpbnQgcmFuZF9wcmltZV9oZWxwZXIodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB2b2lkICpkYXQpCi17Ci0gICByZXR1cm4gKGludClwcm5nX2Rlc2NyaXB0b3JbKChzdHJ1Y3Qgcm5nX2RhdGEgKilkYXQpLT53cHJuZ10ucmVhZChkc3QsIGxlbiwgKChzdHJ1Y3Qgcm5nX2RhdGEgKilkYXQpLT5wcm5nKTsKLX0KLQotaW50IHJhbmRfcHJpbWUobXBfaW50ICpOLCBsb25nIGxlbiwgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nKQotewotICAgc3RydWN0IHJuZ19kYXRhIHJuZzsKLSAgIGludCAgICAgICAgICAgICB0eXBlLCBlcnI7Ci0KLSAgIExUQ19BUkdDSEsoTiAhPSBOVUxMKTsKLQotICAgLyogYWxsb3cgc2l6ZXMgYmV0d2VlbiAyIGFuZCAyNTYgYnl0ZXMgZm9yIGEgcHJpbWUgc2l6ZSAqLwotICAgaWYgKGxlbiA8IDE2IHx8IGxlbiA+IDQwOTYpIHsgCi0gICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QUklNRV9TSVpFOwotICAgfQotICAgCi0gICAvKiB2YWxpZCBQUk5HPyBCZXR0ZXIgYmUhICovCi0gICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgewotICAgICAgcmV0dXJuIGVycjsgCi0gICB9Ci0KLSAgIC8qIHNldHVwIG91ciBjYWxsYmFjayBkYXRhLCB0aGVuIHdvcmxkIGRvbWluYXRpb24hICovCi0gICBybmcucHJuZyAgPSBwcm5nOwotICAgcm5nLndwcm5nID0gd3Bybmc7Ci0KLSAgIC8qIGdldCB0eXBlICovCi0gICBpZiAobGVuIDwgMCkgewotICAgICAgdHlwZSA9IExUTV9QUklNRV9CQlM7Ci0gICAgICBsZW4gPSAtbGVuOwotICAgfSBlbHNlIHsKLSAgICAgIHR5cGUgPSAwOwotICAgfQotICB0eXBlIHw9IExUTV9QUklNRV8yTVNCX09OOwotCi0gICAvKiBOZXcgcHJpbWUgZ2VuZXJhdGlvbiBtYWtlcyB0aGUgY29kZSBldmVuIG1vcmUgY3J5cHRvaXNoLWluc2FuZS4gIERvIHlvdSBrbm93IHdoYXQgdGhpcyBtZWFucyEhIQotICAgICAgLS0gR2lyOiAgWWVhaCwgb2ggd2FpdCwgZXIsIG5vLgotICAgICovCi0gICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9wcmltZV9yYW5kb21fZXgoTiwgbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscyhsZW4pLCBsZW4sIHR5cGUsIHJhbmRfcHJpbWVfaGVscGVyLCAmcm5nKSk7Ci19Ci0gICAgICAKLSNlbmRpZgotCi0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL21waS9yYW5kX3ByaW1lLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5jIGIvc3JjL21pc2MvcGtjczUvcGtjc181XzEuYwppbmRleCA5MDQxMWI3Li5lNmY3YjBjIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5jCisrKyBiL3NyYy9taXNjL3BrY3M1L3BrY3NfNV8xLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CiAKQEAgLTEwMiw1ICsxMDIsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1L3BrY3NfNV8xLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5jIGIvc3JjL21pc2MvcGtjczUvcGtjc181XzIuYwppbmRleCAwOGQ4YTE4Li42ZThkMTYxIDEwMDY0NAotLS0gYS9zcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5jCisrKyBiL3NyYy9taXNjL3BrY3M1L3BrY3NfNV8yLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CiAKQEAgLTEyNSw1ICsxMjUsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1L3BrY3NfNV8yLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbWlzYy96ZXJvbWVtLmMgYi9zcmMvbWlzYy96ZXJvbWVtLmMKaW5kZXggMWFiMDdkYy4uNDJkYzNjMiAxMDA2NDQKLS0tIGEvc3JjL21pc2MvemVyb21lbS5jCisrKyBiL3NyYy9taXNjL3plcm9tZW0uYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjMsMTIgKzIzLDEyIEBACiB2b2lkIHplcm9tZW0odm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKQogewogICAgdW5zaWduZWQgY2hhciAqbWVtID0gb3V0OwotICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLVkQob3V0ICE9IE5VTEwpOwogICAgd2hpbGUgKG91dGxlbi0tID4gMCkgewogICAgICAgKm1lbSsrID0gMDsKICAgIH0KIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvemVyb21lbS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMDkgMDE6Mzg6MTMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5jIGIvc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5jCmluZGV4IGZjM2ZkZDUuLmQ3NjhkODggMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQuYworKysgYi9zcmMvbW9kZXMvY2JjL2NiY19kZWNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE2LDcgKzE2LDcgQEAKICovCiAKIAotI2lmZGVmIENCQworI2lmZGVmIExUQ19DQkNfTU9ERQogCiAvKioKICAgQ0JDIGRlY3J5cHQKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgIH0KICAgIAogICAgLyogaXMgYmxvY2tsZW4gdmFsaWQ/ICovCi0gICBpZiAoY2JjLT5ibG9ja2xlbiA8IDAgfHwgY2JjLT5ibG9ja2xlbiA+IChpbnQpc2l6ZW9mKGNiYy0+SVYpKSB7CisgICBpZiAoY2JjLT5ibG9ja2xlbiA8IDEgfHwgY2JjLT5ibG9ja2xlbiA+IChpbnQpc2l6ZW9mKGNiYy0+SVYpKSB7CiAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CiAgICB9ICAgIAogCkBAIC01MywzMiArNTMsMzQgQEAKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKICAgIH0KICNpZmRlZiBMVENfRkFTVAotICAgaWYgKGxlbiAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeyAgIAorICAgaWYgKGNiYy0+YmxvY2tsZW4gJSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsgICAKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKICAgIH0KICNlbmRpZgogICAgCiAgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2JjLT5jaXBoZXJdLmFjY2VsX2NiY19kZWNyeXB0ICE9IE5VTEwpIHsKLSAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5hY2NlbF9jYmNfZGVjcnlwdChjdCwgcHQsIGxlbiAvIGNiYy0+YmxvY2tsZW4sIGNiYy0+SVYsICZjYmMtPmtleSk7CisgICAgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY2JjLT5jaXBoZXJdLmFjY2VsX2NiY19kZWNyeXB0KGN0LCBwdCwgbGVuIC8gY2JjLT5ibG9ja2xlbiwgY2JjLT5JViwgJmNiYy0+a2V5KTsKICAgIH0gZWxzZSB7CiAgICAgICB3aGlsZSAobGVuKSB7CiAgICAgICAgICAvKiBkZWNyeXB0ICovCi0gICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjYmMtPmNpcGhlcl0uZWNiX2RlY3J5cHQoY3QsIHRtcCwgJmNiYy0+a2V5KTsKKyAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2JjLT5jaXBoZXJdLmVjYl9kZWNyeXB0KGN0LCB0bXAsICZjYmMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQogCiAgICAgICAgICAvKiB4b3IgSVYgYWdhaW5zdCBwbGFpbnRleHQgKi8KICAgICAgICAgICNpZiBkZWZpbmVkKExUQ19GQVNUKQotCSAgICAgZm9yICh4ID0gMDsgeCA8IGNiYy0+YmxvY2tsZW47IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7Ci0JICAgICAgICAgdG1weSA9ICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKWNiYy0+SVYgKyB4KSkgXiAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKil0bXAgKyB4KSk7Ci0JCSAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljYmMtPklWICsgeCkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY3QgKyB4KSk7Ci0JCSAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKilwdCArIHgpKSA9IHRtcHk7Ci0JICAgICB9Ci0JICNlbHNlIAorICAgICAgICBmb3IgKHggPSAwOyB4IDwgY2JjLT5ibG9ja2xlbjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgIHRtcHkgPSAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljYmMtPklWICsgeCkpIF4gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopdG1wICsgeCkpOworICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKWNiYy0+SVYgKyB4KSkgPSAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljdCArIHgpKTsKKyAgICAgICAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKilwdCArIHgpKSA9IHRtcHk7CisgICAgICAgIH0KKyAgICAjZWxzZSAKICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBjYmMtPmJsb2NrbGVuOyB4KyspIHsKICAgICAgICAgICAgICAgIHRtcHkgICAgICAgPSB0bXBbeF0gXiBjYmMtPklWW3hdOwogICAgICAgICAgICAgICAgY2JjLT5JVlt4XSA9IGN0W3hdOwogICAgICAgICAgICAgICAgcHRbeF0gICAgICA9IHRtcHk7CiAgICAgICAgICAgICB9Ci0JICNlbmRpZgorICAgICNlbmRpZgogICAgICAgIAogICAgICAgICAgY3QgICs9IGNiYy0+YmxvY2tsZW47CiAgICAgICAgICBwdCAgKz0gY2JjLT5ibG9ja2xlbjsKQEAgLTkxLDUgKzkzLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19kZWNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuOSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuMTUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTg6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NiYy9jYmNfZG9uZS5jIGIvc3JjL21vZGVzL2NiYy9jYmNfZG9uZS5jCmluZGV4IGFmYWE5YmIuLjk5YjAzNWUgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jYmMvY2JjX2RvbmUuYworKysgYi9zcmMvbW9kZXMvY2JjL2NiY19kb25lLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgIENCQyBpbXBsZW1lbnRhdGlvbiwgZmluaXNoIGNoYWluLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBDQkMKKyNpZmRlZiBMVENfQ0JDX01PREUKIAogLyoqIFRlcm1pbmF0ZSB0aGUgY2hhaW4KICAgQHBhcmFtIGNiYyAgICBUaGUgQ0JDIGNoYWluIHRvIHRlcm1pbmF0ZQpAQCAtMzgsNSArMzgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjQ2OjQ2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9jYmMvY2JjX2VuY3J5cHQuYyBiL3NyYy9tb2Rlcy9jYmMvY2JjX2VuY3J5cHQuYwppbmRleCBhNmI0MWIxLi5iYmZkMWM0IDEwMDY0NAotLS0gYS9zcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0LmMKKysrIGIvc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNiw3ICsxNiw3IEBACiAqLwogCiAKLSNpZmRlZiBDQkMKKyNpZmRlZiBMVENfQ0JDX01PREUKIAogLyoqCiAgIENCQyBlbmNyeXB0CkBAIC0zOSw3ICszOSw3IEBACiAgICB9CiAgICAKICAgIC8qIGlzIGJsb2NrbGVuIHZhbGlkPyAqLwotICAgaWYgKGNiYy0+YmxvY2tsZW4gPCAwIHx8IGNiYy0+YmxvY2tsZW4gPiAoaW50KXNpemVvZihjYmMtPklWKSkgeworICAgaWYgKGNiYy0+YmxvY2tsZW4gPCAxIHx8IGNiYy0+YmxvY2tsZW4gPiAoaW50KXNpemVvZihjYmMtPklWKSkgewogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwogICAgfSAgICAKIApAQCAtNDcsMzkgKzQ3LDQxIEBACiAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CiAgICB9CiAjaWZkZWYgTFRDX0ZBU1QKLSAgIGlmIChsZW4gJSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsgICAKKyAgIGlmIChjYmMtPmJsb2NrbGVuICUgc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7ICAgCiAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CiAgICB9CiAjZW5kaWYKIAogICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5hY2NlbF9jYmNfZW5jcnlwdCAhPSBOVUxMKSB7Ci0gICAgICBjaXBoZXJfZGVzY3JpcHRvcltjYmMtPmNpcGhlcl0uYWNjZWxfY2JjX2VuY3J5cHQocHQsIGN0LCBsZW4gLyBjYmMtPmJsb2NrbGVuLCBjYmMtPklWLCAmY2JjLT5rZXkpOworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5hY2NlbF9jYmNfZW5jcnlwdChwdCwgY3QsIGxlbiAvIGNiYy0+YmxvY2tsZW4sIGNiYy0+SVYsICZjYmMtPmtleSk7CiAgICB9IGVsc2UgewogICAgICAgd2hpbGUgKGxlbikgewogICAgICAgICAgLyogeG9yIElWIGFnYWluc3QgcGxhaW50ZXh0ICovCiAgICAgICAgICAjaWYgZGVmaW5lZChMVENfRkFTVCkKLQkgICAgIGZvciAoeCA9IDA7IHggPCBjYmMtPmJsb2NrbGVuOyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgewotCSAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKWNiYy0+SVYgKyB4KSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopcHQgKyB4KSk7Ci0JICAgICB9Ci0JICNlbHNlIAorICAgICAgICBmb3IgKHggPSAwOyB4IDwgY2JjLT5ibG9ja2xlbjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKWNiYy0+SVYgKyB4KSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopcHQgKyB4KSk7CisgICAgICAgIH0KKyAgICAjZWxzZSAKICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBjYmMtPmJsb2NrbGVuOyB4KyspIHsKICAgICAgICAgICAgICAgIGNiYy0+SVZbeF0gXj0gcHRbeF07CiAgICAgICAgICAgICB9Ci0JICNlbmRpZgorICAgICNlbmRpZgogCiAgICAgICAgICAvKiBlbmNyeXB0ICovCi0gICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjYmMtPmNpcGhlcl0uZWNiX2VuY3J5cHQoY2JjLT5JViwgY3QsICZjYmMtPmtleSk7CisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5lY2JfZW5jcnlwdChjYmMtPklWLCBjdCwgJmNiYy0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICB9CiAKICAgICAgICAgLyogc3RvcmUgSVYgW2NpcGhlcnRleHRdIGZvciBhIGZ1dHVyZSBibG9jayAqLwogICAgICAgICAgI2lmIGRlZmluZWQoTFRDX0ZBU1QpCi0JICAgICBmb3IgKHggPSAwOyB4IDwgY2JjLT5ibG9ja2xlbjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKLQkgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljYmMtPklWICsgeCkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY3QgKyB4KSk7Ci0JICAgICB9Ci0JICNlbHNlIAorICAgICAgICBmb3IgKHggPSAwOyB4IDwgY2JjLT5ibG9ja2xlbjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKWNiYy0+SVYgKyB4KSkgPSAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljdCArIHgpKTsKKyAgICAgICAgfQorICAgICNlbHNlIAogICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBjYmMtPmJsb2NrbGVuOyB4KyspIHsKICAgICAgICAgICAgICAgICBjYmMtPklWW3hdID0gY3RbeF07CiAgICAgICAgICAgICAgfQotCSAjZW5kaWYKKyAgICAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGN0ICArPSBjYmMtPmJsb2NrbGVuOwogICAgICAgICBwdCAgKz0gY2JjLT5ibG9ja2xlbjsKQEAgLTkyLDUgKzk0LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuMTMgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTg6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NiYy9jYmNfZ2V0aXYuYyBiL3NyYy9tb2Rlcy9jYmMvY2JjX2dldGl2LmMKaW5kZXggYWI0MThiMS4uYzU0ZDU1OCAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2NiYy9jYmNfZ2V0aXYuYworKysgYi9zcmMvbW9kZXMvY2JjL2NiY19nZXRpdi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBDQkMgaW1wbGVtZW50YXRpb24sIGdldCBJViwgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgQ0JDCisjaWZkZWYgTFRDX0NCQ19NT0RFCiAKIC8qKgogICAgR2V0IHRoZSBjdXJyZW50IGluaXRpYWwgdmVjdG9yCkBAIC0zMCw2ICszMCw3IEBACiAgICBMVENfQVJHQ0hLKGxlbiAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsoY2JjICE9IE5VTEwpOwogICAgaWYgKCh1bnNpZ25lZCBsb25nKWNiYy0+YmxvY2tsZW4gPiAqbGVuKSB7CisgICAgICAqbGVuID0gY2JjLT5ibG9ja2xlbjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAgICBYTUVNQ1BZKElWLCBjYmMtPklWLCBjYmMtPmJsb2NrbGVuKTsKQEAgLTQxLDUgKzQyLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19nZXRpdi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYuYyBiL3NyYy9tb2Rlcy9jYmMvY2JjX3NldGl2LmMKaW5kZXggYzM4ZTcxMy4uNmZiNzBjYSAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYuYworKysgYi9zcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNiw3ICsxNiw3IEBACiAqLwogCiAKLSNpZmRlZiBDQkMKKyNpZmRlZiBMVENfQ0JDX01PREUKIAogLyoqCiAgICBTZXQgYW4gaW5pdGlhbCB2ZWN0b3IKQEAgLTQwLDUgKzQwLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQuYyBiL3NyYy9tb2Rlcy9jYmMvY2JjX3N0YXJ0LmMKaW5kZXggODMzYmI4Ny4uODZlYzdiOSAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQuYworKysgYi9zcmMvbW9kZXMvY2JjL2NiY19zdGFydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBDQkMgaW1wbGVtZW50YXRpb24sIHN0YXJ0IGNoYWluLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBDQkMKKyNpZmRlZiBMVENfQ0JDX01PREUKIAogLyoqCiAgICBJbml0aWFsaXplIGEgQ0JDIGNvbnRleHQKQEAgLTU4LDUgKzU4LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19zdGFydC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NmYi9jZmJfZGVjcnlwdC5jIGIvc3JjL21vZGVzL2NmYi9jZmJfZGVjcnlwdC5jCmluZGV4IDNkNTFiYTUuLjc2YTRkZTEgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQuYworKysgYi9zcmMvbW9kZXMvY2ZiL2NmYl9kZWNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgQ0ZCIGltcGxlbWVudGF0aW9uLCBkZWNyeXB0IGRhdGEsIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIENGQgorI2lmZGVmIExUQ19DRkJfTU9ERQogCiAvKioKICAgIENGQiBkZWNyeXB0CkBAIC00NSwxNCArNDUsMTYgQEAKIAogICAgd2hpbGUgKGxlbi0tID4gMCkgewogICAgICAgIGlmIChjZmItPnBhZGxlbiA9PSBjZmItPmJsb2NrbGVuKSB7Ci0gICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+cGFkLCBjZmItPklWLCAmY2ZiLT5rZXkpOworICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+cGFkLCBjZmItPklWLCAmY2ZiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQogICAgICAgICAgIGNmYi0+cGFkbGVuID0gMDsKICAgICAgICB9CiAgICAgICAgY2ZiLT5wYWRbY2ZiLT5wYWRsZW5dID0gKmN0OwogICAgICAgICpwdCA9ICpjdCBeIGNmYi0+SVZbY2ZiLT5wYWRsZW5dOwogICAgICAgICsrcHQ7IAogICAgICAgICsrY3Q7Ci0gICAgICAgKytjZmItPnBhZGxlbjsKKyAgICAgICArKyhjZmItPnBhZGxlbik7CiAgICB9CiAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CkBAIC02MSw1ICs2Myw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYi9jZmJfZGVjcnlwdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDE6NDU6MTQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NmYi9jZmJfZG9uZS5jIGIvc3JjL21vZGVzL2NmYi9jZmJfZG9uZS5jCmluZGV4IDg5MjQ3NjEuLjRlZTlkNTAgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUuYworKysgYi9zcmMvbW9kZXMvY2ZiL2NmYl9kb25lLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgIENGQiBpbXBsZW1lbnRhdGlvbiwgZmluaXNoIGNoYWluLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBDRkIKKyNpZmRlZiBMVENfQ0ZCX01PREUKIAogLyoqIFRlcm1pbmF0ZSB0aGUgY2hhaW4KICAgQHBhcmFtIGNmYiAgICBUaGUgQ0ZCIGNoYWluIHRvIHRlcm1pbmF0ZQpAQCAtMzgsNSArMzgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYyBiL3NyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYwppbmRleCBjY2EwMTE2Li5iNjE5NjgyIDEwMDY0NAotLS0gYS9zcmMvbW9kZXMvY2ZiL2NmYl9lbmNyeXB0LmMKKysrIGIvc3JjL21vZGVzL2NmYi9jZmJfZW5jcnlwdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgIENGQiBpbXBsZW1lbnRhdGlvbiwgZW5jcnlwdCBkYXRhLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBDRkIKKyNpZmRlZiBMVENfQ0ZCX01PREUKIAogLyoqCiAgIENGQiBlbmNyeXB0CkBAIC00NSwxMyArNDUsMTUgQEAKIAogICAgd2hpbGUgKGxlbi0tID4gMCkgewogICAgICAgIGlmIChjZmItPnBhZGxlbiA9PSBjZmItPmJsb2NrbGVuKSB7Ci0gICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+cGFkLCBjZmItPklWLCAmY2ZiLT5rZXkpOworICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+cGFkLCBjZmItPklWLCAmY2ZiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQogICAgICAgICAgIGNmYi0+cGFkbGVuID0gMDsKICAgICAgICB9CiAgICAgICAgY2ZiLT5wYWRbY2ZiLT5wYWRsZW5dID0gKCpjdCA9ICpwdCBeIGNmYi0+SVZbY2ZiLT5wYWRsZW5dKTsKICAgICAgICArK3B0OyAKICAgICAgICArK2N0OwotICAgICAgICsrY2ZiLT5wYWRsZW47CisgICAgICAgKysoY2ZiLT5wYWRsZW4pOwogICAgfQogICAgcmV0dXJuIENSWVBUX09LOwogfQpAQCAtNTksNSArNjEsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAxOjQ1OjE0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2LmMgYi9zcmMvbW9kZXMvY2ZiL2NmYl9nZXRpdi5jCmluZGV4IDVjNWI0YzQuLjE2ODlhNzUgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2LmMKKysrIGIvc3JjL21vZGVzL2NmYi9jZmJfZ2V0aXYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICAgQ0ZCIGltcGxlbWVudGF0aW9uLCBnZXQgSVYsIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIENGQgorI2lmZGVmIExUQ19DRkJfTU9ERQogCiAvKioKICAgIEdldCB0aGUgY3VycmVudCBpbml0aWFsIHZlY3RvcgpAQCAtMzAsNiArMzAsNyBAQAogICAgTFRDX0FSR0NISyhsZW4gIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKGNmYiAhPSBOVUxMKTsKICAgIGlmICgodW5zaWduZWQgbG9uZyljZmItPmJsb2NrbGVuID4gKmxlbikgeworICAgICAgKmxlbiA9IGNmYi0+YmxvY2tsZW47CiAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgfQogICAgWE1FTUNQWShJViwgY2ZiLT5JViwgY2ZiLT5ibG9ja2xlbik7CkBAIC00MSw1ICs0Miw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYi9jZmJfZ2V0aXYuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9jZmIvY2ZiX3NldGl2LmMgYi9zcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5jCmluZGV4IGQwNzVhMGQuLmVmYjg0OGIgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jZmIvY2ZiX3NldGl2LmMKKysrIGIvc3JjL21vZGVzL2NmYi9jZmJfc2V0aXYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTQsNyArMTQsOCBAQAogICBAZmlsZSBjZmJfc2V0aXYuYwogICBDRkIgaW1wbGVtZW50YXRpb24sIHNldCBJViwgVG9tIFN0IERlbmlzCiAqLyAgCi0jaWZkZWYgQ0ZCCisKKyNpZmRlZiBMVENfQ0ZCX01PREUKIAogLyoqCiAgICBTZXQgYW4gaW5pdGlhbCB2ZWN0b3IKQEAgLTQwLDE0ICs0MSwxMiBAQAogICAgICAgCiAgICAvKiBmb3JjZSBuZXh0IGJsb2NrICovCiAgICBjZmItPnBhZGxlbiA9IDA7Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjZmItPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIGNmYi0+SVYsICZjZmItPmtleSk7Ci0KLSAgIHJldHVybiBDUllQVF9PSzsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjZmItPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIGNmYi0+SVYsICZjZmItPmtleSk7CiB9CiAKICNlbmRpZiAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQuYyBiL3NyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0LmMKaW5kZXggNzU1ZTE3My4uZTcwZDYzNSAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQuYworKysgYi9zcmMvbW9kZXMvY2ZiL2NmYl9zdGFydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNiw3ICsxNiw3IEBACiAqLwogCiAKLSNpZmRlZiBDRkIKKyNpZmRlZiBMVENfQ0ZCX01PREUKIAogLyoqCiAgICBJbml0aWFsaXplIGEgQ0ZCIGNvbnRleHQKQEAgLTU0LDE0ICs1NCwxMiBAQAogICAgfQogCiAgICAvKiBlbmNyeXB0IHRoZSBJViAqLwotICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+SVYsIGNmYi0+SVYsICZjZmItPmtleSk7CiAgICBjZmItPnBhZGxlbiA9IDA7Ci0KLSAgIHJldHVybiBDUllQVF9PSzsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjZmItPmNpcGhlcl0uZWNiX2VuY3J5cHQoY2ZiLT5JViwgY2ZiLT5JViwgJmNmYi0+a2V5KTsKIH0KIAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MTozNCAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvY3RyL2N0cl9kZWNyeXB0LmMgYi9zcmMvbW9kZXMvY3RyL2N0cl9kZWNyeXB0LmMKaW5kZXggZTFkMWQ1MS4uZjMyODIxZiAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2N0ci9jdHJfZGVjcnlwdC5jCisrKyBiL3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBDVFIgaW1wbGVtZW50YXRpb24sIGRlY3J5cHQgZGF0YSwgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgQ1RSCisjaWZkZWYgTFRDX0NUUl9NT0RFCiAKIC8qKgogICAgQ1RSIGRlY3J5cHQKQEAgLTM4LDUgKzM4LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9kZWNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo0Njo0NiAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvY3RyL2N0cl9kb25lLmMgYi9zcmMvbW9kZXMvY3RyL2N0cl9kb25lLmMKaW5kZXggZjJlNzliYS4uMDc0YzhiNiAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2N0ci9jdHJfZG9uZS5jCisrKyBiL3NyYy9tb2Rlcy9jdHIvY3RyX2RvbmUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICAgQ1RSIGltcGxlbWVudGF0aW9uLCBmaW5pc2ggY2hhaW4sIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIENUUgorI2lmZGVmIExUQ19DVFJfTU9ERQogCiAvKiogVGVybWluYXRlIHRoZSBjaGFpbgogICBAcGFyYW0gY3RyICAgIFRoZSBDVFIgY2hhaW4gdG8gdGVybWluYXRlCkBAIC0zOCw1ICszOCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZG9uZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5jIGIvc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5jCmluZGV4IDc5Nzk1YWUuLjg0ZGQ2NWIgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jdHIvY3RyX2VuY3J5cHQuYworKysgYi9zcmMvbW9kZXMvY3RyL2N0cl9lbmNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE2LDcgKzE2LDcgQEAKICovCiAKIAotI2lmZGVmIENUUgorI2lmZGVmIExUQ19DVFJfTU9ERQogCiAvKioKICAgQ1RSIGVuY3J5cHQKQEAgLTM5LDcgKzM5LDcgQEAKICAgIH0KICAgIAogICAgLyogaXMgYmxvY2tsZW4vcGFkbGVuIHZhbGlkPyAqLwotICAgaWYgKGN0ci0+YmxvY2tsZW4gPCAwIHx8IGN0ci0+YmxvY2tsZW4gPiAoaW50KXNpemVvZihjdHItPmN0cikgfHwKKyAgIGlmIChjdHItPmJsb2NrbGVuIDwgMSB8fCBjdHItPmJsb2NrbGVuID4gKGludClzaXplb2YoY3RyLT5jdHIpIHx8CiAgICAgICAgY3RyLT5wYWRsZW4gICA8IDAgfHwgY3RyLT5wYWRsZW4gICA+IChpbnQpc2l6ZW9mKGN0ci0+cGFkKSkgewogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwogICAgfQpAQCAtNTIsNyArNTIsOSBAQAogICAgCiAgICAvKiBoYW5kbGUgYWNjZWxlcmF0aW9uIG9ubHkgaWYgcGFkIGlzIGVtcHR5LCBhY2NlbGVyYXRvciBpcyBwcmVzZW50IGFuZCBsZW5ndGggaXMgPj0gYSBibG9jayBzaXplICovCiAgICBpZiAoKGN0ci0+cGFkbGVuID09IGN0ci0+YmxvY2tsZW4pICYmIGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5hY2NlbF9jdHJfZW5jcnlwdCAhPSBOVUxMICYmIChsZW4gPj0gKHVuc2lnbmVkIGxvbmcpY3RyLT5ibG9ja2xlbikpIHsKLSAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5hY2NlbF9jdHJfZW5jcnlwdChwdCwgY3QsIGxlbi9jdHItPmJsb2NrbGVuLCBjdHItPmN0ciwgY3RyLT5tb2RlLCAmY3RyLT5rZXkpOworICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjdHItPmNpcGhlcl0uYWNjZWxfY3RyX2VuY3J5cHQocHQsIGN0LCBsZW4vY3RyLT5ibG9ja2xlbiwgY3RyLT5jdHIsIGN0ci0+bW9kZSwgJmN0ci0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CiAgICAgICBsZW4gJT0gY3RyLT5ibG9ja2xlbjsKICAgIH0KIApAQCAtNzksNyArODEsOSBAQAogICAgICAgICAgfQogCiAgICAgICAgICAvKiBlbmNyeXB0IGl0ICovCi0gICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltjdHItPmNpcGhlcl0uZWNiX2VuY3J5cHQoY3RyLT5jdHIsIGN0ci0+cGFkLCAmY3RyLT5rZXkpOworICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjdHItPmNpcGhlcl0uZWNiX2VuY3J5cHQoY3RyLT5jdHIsIGN0ci0+cGFkLCAmY3RyLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KICAgICAgICAgIGN0ci0+cGFkbGVuID0gMDsKICAgICAgIH0KICNpZmRlZiBMVENfRkFTVApAQCAtODgsMTUgKzkyLDE1IEBACiAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljdCArIHgpKSA9ICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKXB0ICsgeCkpIF4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY3RyLT5wYWQgKyB4KSk7CiAgICAgICAgICB9Ci0JICAgIHB0ICAgICAgICAgKz0gY3RyLT5ibG9ja2xlbjsKLQkgICAgY3QgICAgICAgICArPSBjdHItPmJsb2NrbGVuOwotCSAgICBsZW4gICAgICAgIC09IGN0ci0+YmxvY2tsZW47Ci0JICAgIGN0ci0+cGFkbGVuID0gY3RyLT5ibG9ja2xlbjsKLQkgICAgY29udGludWU7Ci0JIH0KLSNlbmRpZgkgCi0gICAgKmN0KysgPSAqcHQrKyBeIGN0ci0+cGFkW2N0ci0+cGFkbGVuKytdOwotCSAtLWxlbjsKKyAgICAgICBwdCAgICAgICAgICs9IGN0ci0+YmxvY2tsZW47CisgICAgICAgY3QgICAgICAgICArPSBjdHItPmJsb2NrbGVuOworICAgICAgIGxlbiAgICAgICAgLT0gY3RyLT5ibG9ja2xlbjsKKyAgICAgICBjdHItPnBhZGxlbiA9IGN0ci0+YmxvY2tsZW47CisgICAgICAgY29udGludWU7CisgICAgICB9CisjZW5kaWYgICAgCisgICAgICAqY3QrKyA9ICpwdCsrIF4gY3RyLT5wYWRbY3RyLT5wYWRsZW4rK107CisgICAgICAtLWxlbjsKICAgIH0KICAgIHJldHVybiBDUllQVF9PSzsKIH0KQEAgLTEwNCw1ICsxMDgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2VuY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuMjAgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTg6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYuYyBiL3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2LmMKaW5kZXggNTBjZTZhMC4uMmZiZjg4OCAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYuYworKysgYi9zcmMvbW9kZXMvY3RyL2N0cl9nZXRpdi5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBDVFIgaW1wbGVtZW50YXRpb24sIGdldCBJViwgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgQ1RSCisjaWZkZWYgTFRDX0NUUl9NT0RFCiAKIC8qKgogICAgR2V0IHRoZSBjdXJyZW50IGluaXRpYWwgdmVjdG9yCkBAIC0zMCw2ICszMCw3IEBACiAgICBMVENfQVJHQ0hLKGxlbiAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsoY3RyICE9IE5VTEwpOwogICAgaWYgKCh1bnNpZ25lZCBsb25nKWN0ci0+YmxvY2tsZW4gPiAqbGVuKSB7CisgICAgICAqbGVuID0gY3RyLT5ibG9ja2xlbjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAgICBYTUVNQ1BZKElWLCBjdHItPmN0ciwgY3RyLT5ibG9ja2xlbik7CkBAIC00MSw1ICs0Miw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjQ2OjQ2ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9jdHIvY3RyX3NldGl2LmMgYi9zcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5jCmluZGV4IDY0ZDRjNDMuLjhlODY0OWYgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9jdHIvY3RyX3NldGl2LmMKKysrIGIvc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBDVFIgaW1wbGVtZW50YXRpb24sIHNldCBJViwgVG9tIFN0IERlbmlzCiAqLwogICAKLSNpZmRlZiBDVFIKKyNpZmRlZiBMVENfQ1RSX01PREUKIAogLyoqCiAgICBTZXQgYW4gaW5pdGlhbCB2ZWN0b3IKQEAgLTQ1LDE0ICs0NSwxMiBAQAogICAgCiAgICAvKiBmb3JjZSBuZXh0IGJsb2NrICovCiAgICBjdHItPnBhZGxlbiA9IDA7Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjdHItPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIGN0ci0+cGFkLCAmY3RyLT5rZXkpOwotICAgCi0gICByZXR1cm4gQ1JZUFRfT0s7CisgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY3RyLT5jaXBoZXJdLmVjYl9lbmNyeXB0KElWLCBjdHItPnBhZCwgJmN0ci0+a2V5KTsKIH0KIAogI2VuZGlmIAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX3NldGl2LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo0Njo0NiAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5jIGIvc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQuYwppbmRleCA3YzdlZWJiLi44OTVjOGE0IDEwMDY0NAotLS0gYS9zcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5jCisrKyBiL3NyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE2LDcgKzE2LDcgQEAKICovCiAKIAotI2lmZGVmIENUUgorI2lmZGVmIExUQ19DVFJfTU9ERQogCiAvKioKICAgIEluaXRpYWxpemUgYSBDVFIgY29udGV4dApAQCAtNTUsMTYgKzU1LDM3IEBACiAgICBjdHItPmJsb2NrbGVuID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGg7CiAgICBjdHItPmNpcGhlciAgID0gY2lwaGVyOwogICAgY3RyLT5wYWRsZW4gICA9IDA7Ci0gICBjdHItPm1vZGUgICAgID0gY3RyX21vZGU7CisgICBjdHItPm1vZGUgICAgID0gY3RyX21vZGUgJiAxOwogICAgZm9yICh4ID0gMDsgeCA8IGN0ci0+YmxvY2tsZW47IHgrKykgewogICAgICAgIGN0ci0+Y3RyW3hdID0gSVZbeF07CiAgICB9Ci0gICBjaXBoZXJfZGVzY3JpcHRvcltjdHItPmNpcGhlcl0uZWNiX2VuY3J5cHQoY3RyLT5jdHIsIGN0ci0+cGFkLCAmY3RyLT5rZXkpOwotICAgcmV0dXJuIENSWVBUX09LOworCisgICBpZiAoY3RyX21vZGUgJiBMVENfQ1RSX1JGQzM2ODYpIHsKKyAgICAgIC8qIGluY3JlbWVudCB0aGUgSVYgYXMgcGVyIFJGQyAzNjg2ICovCisgICAgICBpZiAoY3RyLT5tb2RlID09IENUUl9DT1VOVEVSX0xJVFRMRV9FTkRJQU4pIHsKKyAgICAgICAgIC8qIGxpdHRsZS1lbmRpYW4gKi8KKyAgICAgICAgIGZvciAoeCA9IDA7IHggPCBjdHItPmJsb2NrbGVuOyB4KyspIHsKKyAgICAgICAgICAgICBjdHItPmN0clt4XSA9IChjdHItPmN0clt4XSArICh1bnNpZ25lZCBjaGFyKTEpICYgKHVuc2lnbmVkIGNoYXIpMjU1OworICAgICAgICAgICAgIGlmIChjdHItPmN0clt4XSAhPSAodW5zaWduZWQgY2hhcikwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIC8qIGJpZy1lbmRpYW4gKi8KKyAgICAgICAgIGZvciAoeCA9IGN0ci0+YmxvY2tsZW4tMTsgeCA+PSAwOyB4LS0pIHsKKyAgICAgICAgICAgICBjdHItPmN0clt4XSA9IChjdHItPmN0clt4XSArICh1bnNpZ25lZCBjaGFyKTEpICYgKHVuc2lnbmVkIGNoYXIpMjU1OworICAgICAgICAgICAgIGlmIChjdHItPmN0clt4XSAhPSAodW5zaWduZWQgY2hhcikwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY3RyLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGN0ci0+Y3RyLCBjdHItPnBhZCwgJmN0ci0+a2V5KTsgCiB9CiAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjYgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA1IDAxOjQ2OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QuYyBiL3NyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIwNzc4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21vZGVzL2N0ci9jdHJfdGVzdC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGN0cl90ZXN0LmMKKyAgQ1RSIGltcGxlbWVudGF0aW9uLCBUZXN0cyBhZ2FpbiBSRkMgMzY4NiwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0NUUl9NT0RFCisKK2ludCBjdHJfdGVzdCh2b2lkKQoreworI2lmZGVmIExUQ19OT19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgaW50IGtleWxlbiwgbXNnbGVuOworICAgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdLCBJVlsxNl0sIHB0WzY0XSwgY3RbNjRdOworICAgfSB0ZXN0c1tdID0geworLyogMTI4LWJpdCBrZXksIDE2LWJ5dGUgcHQgKi8KK3sKKyAgIDE2LCAxNiwKKyAgIHsweEFFLDB4NjgsMHg1MiwweEY4LDB4MTIsMHgxMCwweDY3LDB4Q0MsMHg0QiwweEY3LDB4QTUsMHg3NiwweDU1LDB4NzcsMHhGMywweDlFIH0sCisgICB7MHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAgezB4NTMsMHg2OSwweDZFLDB4NjcsMHg2QywweDY1LDB4MjAsMHg2MiwweDZDLDB4NkYsMHg2MywweDZCLDB4MjAsMHg2RCwweDczLDB4NjcgfSwKKyAgIHsweEU0LDB4MDksMHg1RCwweDRGLDB4QjcsMHhBNywweEIzLDB4NzksMHgyRCwweDYxLDB4NzUsMHhBMywweDI2LDB4MTMsMHgxMSwweEI4IH0sCit9LAorCisvKiAxMjgtYml0IGtleSwgMzYtYnl0ZSBwdCAqLworeworICAgMTYsIDM2LAorICAgezB4NzYsMHg5MSwweEJFLDB4MDMsMHg1RSwweDUwLDB4MjAsMHhBOCwweEFDLDB4NkUsMHg2MSwweDg1LDB4MjksMHhGOSwweEEwLDB4REMgfSwKKyAgIHsweDAwLDB4RTAsMHgwMSwweDdCLDB4MjcsMHg3NywweDdGLDB4M0YsMHg0QSwweDE3LDB4ODYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgICB7MHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiwKKyAgICAweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsMHgxOCwweDE5LDB4MUEsMHgxQiwweDFDLDB4MUQsMHgxRSwweDFGLAorICAgIDB4MjAsMHgyMSwweDIyLDB4MjN9LAorICAgezB4QzEsMHhDRiwweDQ4LDB4QTgsMHg5RiwweDJGLDB4RkQsMHhEOSwweENGLDB4NDYsMHg1MiwweEU5LDB4RUYsMHhEQiwweDcyLDB4RDcsCisgICAgMHg0NSwweDQwLDB4QTQsMHgyQiwweERFLDB4NkQsMHg3OCwweDM2LDB4RDUsMHg5QSwweDVDLDB4RUEsMHhBRSwweEYzLDB4MTAsMHg1MywKKyAgICAweDI1LDB4QjIsMHgwNywweDJGIH0sCit9LAorfTsKKyAgaW50IGlkeCwgZXJyLCB4OworICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgIHN5bW1ldHJpY19DVFIgY3RyOworCisgIC8qIEFFUyBjYW4gYmUgdW5kZXIgcmlqbmRhZWwgb3IgYWVzLi4uIHRyeSB0byBmaW5kIGl0ICovIAorICBpZiAoKGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKSkgPT0gLTEpIHsKKyAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX05PUDsKKyAgICAgfQorICB9CisKKyAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICBpZiAoKGVyciA9IGN0cl9zdGFydChpZHgsIHRlc3RzW3hdLklWLCB0ZXN0c1t4XS5rZXksIHRlc3RzW3hdLmtleWxlbiwgMCwgQ1RSX0NPVU5URVJfQklHX0VORElBTnxMVENfQ1RSX1JGQzM2ODYsICZjdHIpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICAgIGlmICgoZXJyID0gY3RyX2VuY3J5cHQodGVzdHNbeF0ucHQsIGJ1ZiwgdGVzdHNbeF0ubXNnbGVuLCAmY3RyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorICAgICBjdHJfZG9uZSgmY3RyKTsKKyAgICAgaWYgKFhNRU1DTVAoYnVmLCB0ZXN0c1t4XS5jdCwgdGVzdHNbeF0ubXNnbGVuKSkgeworICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICB9CisgIH0KKyAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNSAwMjowNjo0OSAkICovCisKKworCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0LmMgYi9zcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0LmMKaW5kZXggYWE4MzY2MS4uYzE2ZmNlMCAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL2VjYi9lY2JfZGVjcnlwdC5jCisrKyBiL3NyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBFQ0IgaW1wbGVtZW50YXRpb24sIGRlY3J5cHQgYSBibG9jaywgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgRUNCCisjaWZkZWYgTFRDX0VDQl9NT0RFCiAKIC8qKgogICBFQ0IgZGVjcnlwdApAQCAtNDAsMTAgKzQwLDEyIEBACiAKICAgIC8qIGNoZWNrIGZvciBhY2NlbCAqLwogICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5hY2NlbF9lY2JfZGVjcnlwdCAhPSBOVUxMKSB7Ci0gICAgICBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYWNjZWxfZWNiX2RlY3J5cHQoY3QsIHB0LCBsZW4gLyBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYmxvY2tfbGVuZ3RoLCAmZWNiLT5rZXkpOworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5hY2NlbF9lY2JfZGVjcnlwdChjdCwgcHQsIGxlbiAvIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGgsICZlY2ItPmtleSk7CiAgICB9IGVsc2UgewogICAgICAgd2hpbGUgKGxlbikgewotICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmVjYl9kZWNyeXB0KGN0LCBwdCwgJmVjYi0+a2V5KTsKKyAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmVjYl9kZWNyeXB0KGN0LCBwdCwgJmVjYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICB9CiAgICAgICAgICBwdCAgKz0gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aDsKICAgICAgICAgIGN0ICArPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYmxvY2tfbGVuZ3RoOwogICAgICAgICAgbGVuIC09IGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGg7CkBAIC01NSw1ICs1Nyw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZGVjcnlwdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5jIGIvc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5jCmluZGV4IGEwNzI2MTUuLjJhZjNhODMgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9lY2IvZWNiX2RvbmUuYworKysgYi9zcmMvbW9kZXMvZWNiL2VjYl9kb25lLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgIEVDQiBpbXBsZW1lbnRhdGlvbiwgZmluaXNoIGNoYWluLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBFQ0IKKyNpZmRlZiBMVENfRUNCX01PREUKIAogLyoqIFRlcm1pbmF0ZSB0aGUgY2hhaW4KICAgQHBhcmFtIGVjYiAgICBUaGUgRUNCIGNoYWluIHRvIHRlcm1pbmF0ZQpAQCAtMzgsNSArMzgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX2RvbmUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQuYyBiL3NyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQuYwppbmRleCAyMWUwMzg1Li5mNjkxMGM2IDEwMDY0NAotLS0gYS9zcmMvbW9kZXMvZWNiL2VjYl9lbmNyeXB0LmMKKysrIGIvc3JjL21vZGVzL2VjYi9lY2JfZW5jcnlwdC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgIEVDQiBpbXBsZW1lbnRhdGlvbiwgZW5jcnlwdCBhIGJsb2NrLCBUb20gU3QgRGVuaXMKICovCiAKLSNpZmRlZiBFQ0IKKyNpZmRlZiBMVENfRUNCX01PREUKIAogLyoqCiAgIEVDQiBlbmNyeXB0CkBAIC00MCwxMCArNDAsMTIgQEAKIAogICAgLyogY2hlY2sgZm9yIGFjY2VsICovCiAgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmFjY2VsX2VjYl9lbmNyeXB0ICE9IE5VTEwpIHsKLSAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5hY2NlbF9lY2JfZW5jcnlwdChwdCwgY3QsIGxlbiAvIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGgsICZlY2ItPmtleSk7CisgICAgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmFjY2VsX2VjYl9lbmNyeXB0KHB0LCBjdCwgbGVuIC8gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCwgJmVjYi0+a2V5KTsKICAgIH0gZWxzZSB7CiAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQocHQsIGN0LCAmZWNiLT5rZXkpOworICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQocHQsIGN0LCAmZWNiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KICAgICAgICAgIHB0ICArPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYmxvY2tfbGVuZ3RoOwogICAgICAgICAgY3QgICs9IGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGg7CiAgICAgICAgICBsZW4gLT0gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aDsKQEAgLTU1LDUgKzU3LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiL2VjYl9lbmNyeXB0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MTozNCAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5jIGIvc3JjL21vZGVzL2VjYi9lY2Jfc3RhcnQuYwppbmRleCBmN2JhYTgxLi5jYzg0NTc5IDEwMDY0NAotLS0gYS9zcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5jCisrKyBiL3NyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE2LDcgKzE2LDcgQEAKICovCiAKIAotI2lmZGVmIEVDQgorI2lmZGVmIExUQ19FQ0JfTU9ERQogCiAvKioKICAgIEluaXRpYWxpemUgYSBFQ0IgY29udGV4dApAQCAtNDQsNSArNDQsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MTozNCAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5jIGIvc3JjL21vZGVzL2Y4L2Y4X2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzhmNjFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21vZGVzL2Y4L2Y4X2RlY3J5cHQuYwpAQCAtMCwwICsxLDQzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBmOF9kZWNyeXB0LmMKKyAgRjggaW1wbGVtZW50YXRpb24sIGRlY3J5cHQgZGF0YSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0Y4X01PREUKKworLyoqCisgICBGOCBkZWNyeXB0CisgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICBAcGFyYW0gcHQgICAgICBbb3V0XSBQbGFpbnRleHQKKyAgIEBwYXJhbSBsZW4gICAgIExlbmd0aCBvZiBjaXBoZXJ0ZXh0IChvY3RldHMpCisgICBAcGFyYW0gZjggICAgICBGOCBzdGF0ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGY4X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0Y4ICpmOCkKK3sKKyAgIExUQ19BUkdDSEsocHQgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhmOCAhPSBOVUxMKTsKKyAgIHJldHVybiBmOF9lbmNyeXB0KGN0LCBwdCwgbGVuLCBmOCk7Cit9CisKKworI2VuZGlmCisKKyAKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X2RlY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIyOjQ5OjI1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9mOC9mOF9kb25lLmMgYi9zcmMvbW9kZXMvZjgvZjhfZG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjQ3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvZjgvZjhfZG9uZS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBmOF9kb25lLmMKKyAgIEY4IGltcGxlbWVudGF0aW9uLCBmaW5pc2ggY2hhaW4sIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19GOF9NT0RFCisKKy8qKiBUZXJtaW5hdGUgdGhlIGNoYWluCisgIEBwYXJhbSBmOCAgICBUaGUgRjggY2hhaW4gdG8gdGVybWluYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBmOF9kb25lKHN5bW1ldHJpY19GOCAqZjgpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhmOCAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZjgtPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgY2lwaGVyX2Rlc2NyaXB0b3JbZjgtPmNpcGhlcl0uZG9uZSgmZjgtPmtleSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyAgIAorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X2RvbmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIyOjQ5OjI1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0LmMgYi9zcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzNiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBmOF9lbmNyeXB0LmMKKyAgRjggaW1wbGVtZW50YXRpb24sIGVuY3J5cHQgZGF0YSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0Y4X01PREUKKworLyoqCisgIEY4IGVuY3J5cHQKKyAgQHBhcmFtIHB0ICAgICBQbGFpbnRleHQKKyAgQHBhcmFtIGN0ICAgICBbb3V0XSBDaXBoZXJ0ZXh0CisgIEBwYXJhbSBsZW4gICAgTGVuZ3RoIG9mIHBsYWludGV4dCAob2N0ZXRzKQorICBAcGFyYW0gZjggICAgIEY4IHN0YXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBmOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19GOCAqZjgpCit7CisgICBpbnQgICAgICAgICAgIGVyciwgeDsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmW01BWEJMT0NLU0laRV07CisgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZjggIT0gTlVMTCk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChmOC0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBpcyBibG9ja2xlbi9wYWRsZW4gdmFsaWQ/ICovCisgICBpZiAoZjgtPmJsb2NrbGVuIDwgMCB8fCBmOC0+YmxvY2tsZW4gPiAoaW50KXNpemVvZihmOC0+SVYpIHx8CisgICAgICAgZjgtPnBhZGxlbiAgIDwgMCB8fCBmOC0+cGFkbGVuICAgPiAoaW50KXNpemVvZihmOC0+SVYpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisgICAKKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisKKyAgIC8qIG1ha2Ugc3VyZSB0aGUgcGFkIGlzIGVtcHR5ICovCisgICBpZiAoZjgtPnBhZGxlbiA9PSBmOC0+YmxvY2tsZW4pIHsKKyAgICAgIC8qIHhvciBvZiBJViwgTUlWIGFuZCBibG9ja2NudCA9PSB3aGF0IGdvZXMgaW50byBjaXBoZXIgKi8KKyAgICAgIFNUT1JFMzJIKGY4LT5ibG9ja2NudCwgKGJ1ZisoZjgtPmJsb2NrbGVuLTQpKSk7CisgICAgICArKyhmOC0+YmxvY2tjbnQpOworICAgICAgZm9yICh4ID0gMDsgeCA8IGY4LT5ibG9ja2xlbjsgeCsrKSB7CisgICAgICAgICAgZjgtPklWW3hdIF49IGY4LT5NSVZbeF0gXiBidWZbeF07CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2Y4LT5jaXBoZXJdLmVjYl9lbmNyeXB0KGY4LT5JViwgZjgtPklWLCAmZjgtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgZjgtPnBhZGxlbiA9IDA7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKGY4LT5wYWRsZW4gPT0gMCkgeworICAgICAgd2hpbGUgKGxlbiA+PSAodW5zaWduZWQgbG9uZylmOC0+YmxvY2tsZW4pIHsKKyAgICAgICAgIFNUT1JFMzJIKGY4LT5ibG9ja2NudCwgKGJ1ZisoZjgtPmJsb2NrbGVuLTQpKSk7CisgICAgICAgICArKyhmOC0+YmxvY2tjbnQpOworICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGY4LT5ibG9ja2xlbjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoJmN0W3hdKSkgPSAqKChMVENfRkFTVF9UWVBFKikoJnB0W3hdKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJmY4LT5JVlt4XSkpOworICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmZjgtPklWW3hdKSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCZmOC0+TUlWW3hdKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJmJ1Zlt4XSkpOworICAgICAgICAgfQorICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5lY2JfZW5jcnlwdChmOC0+SVYsIGY4LT5JViwgJmY4LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIGxlbiAtPSB4OworICAgICAgICAgcHQgICs9IHg7CisgICAgICAgICBjdCAgKz0geDsKKyAgICAgIH0KKyAgIH0KKyNlbmRpZiAgICAgICAgICAgICAKKworICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICBpZiAoZjgtPnBhZGxlbiA9PSBmOC0+YmxvY2tsZW4pIHsKKyAgICAgICAgICAvKiB4b3Igb2YgSVYsIE1JViBhbmQgYmxvY2tjbnQgPT0gd2hhdCBnb2VzIGludG8gY2lwaGVyICovCisgICAgICAgICAgU1RPUkUzMkgoZjgtPmJsb2NrY250LCAoYnVmKyhmOC0+YmxvY2tsZW4tNCkpKTsKKyAgICAgICAgICArKyhmOC0+YmxvY2tjbnQpOworICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBmOC0+YmxvY2tsZW47IHgrKykgeworICAgICAgICAgICAgICBmOC0+SVZbeF0gXj0gZjgtPk1JVlt4XSBeIGJ1Zlt4XTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5lY2JfZW5jcnlwdChmOC0+SVYsIGY4LT5JViwgJmY4LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGY4LT5wYWRsZW4gPSAwOworICAgICAgIH0KKyAgICAgICAqY3QrKyA9ICpwdCsrIF4gZjgtPklWW2Y4LT5wYWRsZW4rK107CisgICAgICAgLS1sZW47CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDUgMDQ6MTY6MzIgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2Y4L2Y4X2dldGl2LmMgYi9zcmMvbW9kZXMvZjgvZjhfZ2V0aXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzVkOTJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21vZGVzL2Y4L2Y4X2dldGl2LmMKQEAgLTAsMCArMSw0NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIG9mYl9nZXRpdi5jCisgICBGOCBpbXBsZW1lbnRhdGlvbiwgZ2V0IElWLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfRjhfTU9ERQorCisvKioKKyAgIEdldCB0aGUgY3VycmVudCBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIGxlbiAgW2luL291dF0gIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gZjggICBUaGUgRjggc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBmOF9nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyAqbGVuLCBzeW1tZXRyaWNfRjggKmY4KQoreworICAgTFRDX0FSR0NISyhJViAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZjggICE9IE5VTEwpOworICAgaWYgKCh1bnNpZ25lZCBsb25nKWY4LT5ibG9ja2xlbiA+ICpsZW4pIHsKKyAgICAgICpsZW4gPSBmOC0+YmxvY2tsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorICAgWE1FTUNQWShJViwgZjgtPklWLCBmOC0+YmxvY2tsZW4pOworICAgKmxlbiA9IGY4LT5ibG9ja2xlbjsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X2dldGl2LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMjo0OToyNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvZjgvZjhfc2V0aXYuYyBiL3NyYy9tb2Rlcy9mOC9mOF9zZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OWNjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvZjgvZjhfc2V0aXYuYwpAQCAtMCwwICsxLDUyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgZjhfc2V0aXYuYworICAgRjggaW1wbGVtZW50YXRpb24sIHNldCBJViwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0Y4X01PREUKKworLyoqCisgICBTZXQgYW4gaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBJViAgIFRoZSBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIGxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yIChpbiBvY3RldHMpCisgICBAcGFyYW0gZjggICBUaGUgRjggc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBmOF9zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19GOCAqZjgpCit7CisgICBpbnQgZXJyOworCisgICBMVENfQVJHQ0hLKElWICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhmOCAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZjgtPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKGxlbiAhPSAodW5zaWduZWQgbG9uZylmOC0+YmxvY2tsZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogZm9yY2UgbmV4dCBibG9jayAqLworICAgZjgtPnBhZGxlbiA9IDA7CisgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbZjgtPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIGY4LT5JViwgJmY4LT5rZXkpOworfQorCisjZW5kaWYgCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X3NldGl2LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMjo0OToyNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvZjgvZjhfc3RhcnQuYyBiL3NyYy9tb2Rlcy9mOC9mOF9zdGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDVjMTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvZjgvZjhfc3RhcnQuYwpAQCAtMCwwICsxLDk4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgZjhfc3RhcnQuYworICAgRjggaW1wbGVtZW50YXRpb24sIHN0YXJ0IGNoYWluLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19GOF9NT0RFCisKKy8qKgorICAgSW5pdGlhbGl6ZSBhbiBGOCBjb250ZXh0CisgICBAcGFyYW0gY2lwaGVyICAgICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAorICAgQHBhcmFtIElWICAgICAgICAgIFRoZSBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIGtleSAgICAgICAgIFRoZSBzZWNyZXQga2V5IAorICAgQHBhcmFtIGtleWxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBzYWx0X2tleSAgICBUaGUgc2FsdGluZyBrZXkgZm9yIHRoZSBJVgorICAgQHBhcmFtIHNrZXlsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNhbHRpbmcga2V5IChvY3RldHMpCisgICBAcGFyYW0gbnVtX3JvdW5kcyAgTnVtYmVyIG9mIHJvdW5kcyBpbiB0aGUgY2lwaGVyIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICBAcGFyYW0gZjggICAgICAgICAgVGhlIEY4IHN0YXRlIHRvIGluaXRpYWxpemUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBmOF9zdGFydCggICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdF9rZXksICAgICAgICAgICAgICAgaW50ICBza2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsICAgc3ltbWV0cmljX0Y4ICAqZjgpCit7CisgICBpbnQgICAgICAgICAgIHgsIGVycjsKKyAgIHVuc2lnbmVkIGNoYXIgdGtleVtNQVhCTE9DS1NJWkVdOworCisgICBMVENfQVJHQ0hLKElWICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2FsdF9rZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGY4ICAgICAgICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGggJSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKyNlbmRpZgorCisgICAvKiBjb3B5IGRldGFpbHMgKi8KKyAgIGY4LT5ibG9ja2NudCA9IDA7CisgICBmOC0+Y2lwaGVyICAgPSBjaXBoZXI7CisgICBmOC0+YmxvY2tsZW4gPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgIGY4LT5wYWRsZW4gICA9IGY4LT5ibG9ja2xlbjsKKyAgIAorICAgLyogbm93IGdldCBrZXkgXiBzYWx0X2tleSBbZXh0ZW5kIHNhbHRfa2V0IHdpdGggMHg1NSBhcyByZXF1aXJlZCB0byBtYXRjaCBsZW5ndGhdICovCisgICB6ZXJvbWVtKHRrZXksIHNpemVvZih0a2V5KSk7CisgICBmb3IgKHggPSAwOyB4IDwga2V5bGVuICYmIHggPCAoaW50KXNpemVvZih0a2V5KTsgeCsrKSB7CisgICAgICAgdGtleVt4XSA9IGtleVt4XTsKKyAgIH0KKyAgIGZvciAoeCA9IDA7IHggPCBza2V5bGVuICYmIHggPCAoaW50KXNpemVvZih0a2V5KTsgeCsrKSB7CisgICAgICAgdGtleVt4XSBePSBzYWx0X2tleVt4XTsKKyAgIH0gICAgICAgCisgICBmb3IgKDsgeCA8IGtleWxlbiAmJiB4IDwgKGludClzaXplb2YodGtleSk7IHgrKykgeworICAgICAgIHRrZXlbeF0gXj0gMHg1NTsKKyAgIH0KKyAgIAorICAgLyogbm93IGVuY3J5cHQgd2l0aCB0a2V5WzAuLmtleWxlbi0xXSB0aGUgSVYgYW5kIHVzZSB0aGF0IGFzIHRoZSBJViAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKHRrZXksIGtleWxlbiwgbnVtX3JvdW5kcywgJmY4LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogZW5jcnlwdCBJViAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5lY2JfZW5jcnlwdChJViwgZjgtPk1JViwgJmY4LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbZjgtPmNpcGhlcl0uZG9uZSgmZjgtPmtleSk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgemVyb21lbSh0a2V5LCBzaXplb2YodGtleSkpOworICAgemVyb21lbShmOC0+SVYsIHNpemVvZihmOC0+SVYpKTsKKyAgIAorICAgLyogdGVybWluYXRlIHRoaXMgY2lwaGVyICovCisgICBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5kb25lKCZmOC0+a2V5KTsKKyAgIAorICAgLyogaW5pdCB0aGUgY2lwaGVyICovCisgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5zZXR1cChrZXksIGtleWxlbiwgbnVtX3JvdW5kcywgJmY4LT5rZXkpOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X3N0YXJ0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNSAwMTozNjo0MyAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLmMgYi9zcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxNjBlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUuYwpAQCAtMCwwICsxLDc2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgZjhfdGVzdF9tb2RlLmMKKyAgIEY4IGltcGxlbWVudGF0aW9uLCB0ZXN0LCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19GOF9NT0RFCisKK2ludCBmOF90ZXN0X21vZGUodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMHgyMywgMHg0OCwgMHgyOSwgMHgwMCwgMHg4NCwgMHg2NywgMHhiZSwgMHgxOCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZjLCAweDNkLCAweGUxLCAweDRhLCAweGFlLCAweDcyLCAweGQ2LCAweDJjIH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWx0WzRdID0geyAweDMyLCAweGYyLCAweDg3LCAweDBkIH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJVlsxNl0gID0geyAweDAwLCAweDZlLCAweDVjLCAweGJhLCAweDUwLCAweDY4LCAweDFkLCAweGU1LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NWMsIDB4NjIsIDB4MTUsIDB4OTksIDB4ZDQsIDB4NjIsIDB4NTYsIDB4NGEgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHB0WzM5XSAgPSB7IDB4NzAsIDB4NzMsIDB4NjUsIDB4NzUsIDB4NjQsIDB4NmYsIDB4NzIsIDB4NjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ZSwgMHg2NCwgMHg2ZiwgMHg2ZCwgMHg2ZSwgMHg2NSwgMHg3MywgMHg3MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjUsIDB4MjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ZSwgMHg2NSwgMHg3OCwgMHg3NCwgMHgyMCwgMHg2MiwgMHg2NSwgMHg3MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzQsIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjksIDB4NmUsIDB4NjcgICAgICAgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGN0WzM5XSAgPSB7IDB4MDEsIDB4OWMsIDB4ZTcsIDB4YTIsIDB4NmUsIDB4NzgsIDB4NTQsIDB4MDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0YSwgMHg2MywgMHg2NiwgMHhhYSwgMHg5NSwgMHhkNCwgMHhlZSwgMHhmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWEsIDB4ZDQsIDB4MTcsIDB4MmEsIDB4MTQsIDB4ZjksIDB4ZmEsIDB4ZjQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NSwgMHhiNywgMHhmMSwgMHhkNCwgMHhiNiwgMHgyYiwgMHhkMCwgMHg4ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTYsIDB4MmMsIDB4MGUsIDB4ZWYsIDB4N2MsIDB4NDgsIDB4MDIgICAgICAgfTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzM5XTsKKyAgIHN5bW1ldHJpY19GOCAgZjg7CisgICBpbnQgICAgICAgICAgIGVyciwgaWR4OworICAgCisgICBpZHggPSBmaW5kX2NpcGhlcigiYWVzIik7CisgICBpZiAoaWR4ID09IC0xKSB7CisgICAgICBpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKTsKKyAgICAgIGlmIChpZHggPT0gLTEpIHJldHVybiBDUllQVF9OT1A7CisgICB9ICAgICAgCisgICAKKyAgIC8qIGluaXRpYWxpemUgdGhlIGNvbnRleHQgKi8KKyAgIGlmICgoZXJyID0gZjhfc3RhcnQoaWR4LCBJViwga2V5LCBzaXplb2Yoa2V5KSwgc2FsdCwgc2l6ZW9mKHNhbHQpLCAwLCAmZjgpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogZW5jcnlwdCBibG9jayAqLworICAgaWYgKChlcnIgPSBmOF9lbmNyeXB0KHB0LCBidWYsIHNpemVvZihwdCksICZmOCkpICE9IENSWVBUX09LKSB7CisgICAgICBmOF9kb25lKCZmOCk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgZjhfZG9uZSgmZjgpOworCisgICAvKiBjb21wYXJlICovCisgICBpZiAoWE1FTUNNUChidWYsIGN0LCBzaXplb2YoY3QpKSkgeworICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgIH0gICAgICAKKyAgIAorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmICAgCit9ICAgCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xMyAxMTo1NToyNSAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0LmMgYi9zcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlZWNlOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tb2Rlcy9scncvbHJ3X2RlY3J5cHQuYwpAQCAtMCwwICsxLDUxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgbHJ3X2RlY3J5cHQuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIERlY3J5cHQgYmxvY2tzLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworLyoqCisgIExSVyBkZWNyeXB0IGJsb2NrcworICBAcGFyYW0gY3QgICAgIFRoZSBjaXBoZXJ0ZXh0CisgIEBwYXJhbSBwdCAgICAgW291dF0gVGhlIHBsYWludGV4dAorICBAcGFyYW0gbGVuICAgIFRoZSBsZW5ndGggaW4gb2N0ZXRzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYKKyAgQHBhcmFtIGxydyAgICBUaGUgTFJXIHN0YXRlCisqLworaW50IGxyd19kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19MUlcgKmxydykKK3sKKyAgIGludCBlcnI7CisKKyAgIExUQ19BUkdDSEsocHQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxydyAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQobHJ3LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5hY2NlbF9scndfZGVjcnlwdCAhPSBOVUxMKSB7CisgICAgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmFjY2VsX2xyd19kZWNyeXB0KGN0LCBwdCwgbGVuLCBscnctPklWLCBscnctPnR3ZWFrLCAmbHJ3LT5rZXkpOworICAgfQorCisgICByZXR1cm4gbHJ3X3Byb2Nlc3MoY3QsIHB0LCBsZW4sIExSV19ERUNSWVBULCBscncpOworfQorCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MzoxMyAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvbHJ3L2xyd19kb25lLmMgYi9zcmMvbW9kZXMvbHJ3L2xyd19kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlNzVjMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tb2Rlcy9scncvbHJ3X2RvbmUuYwpAQCAtMCwwICsxLDQyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgbHJ3X2RvbmUuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIEZyZWUgcmVzb3VyY2VzLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworLyoqCisgIFRlcm1pbmF0ZSBhIExSVyBzdGF0ZQorICBAcGFyYW0gbHJ3ICAgVGhlIHN0YXRlIHRvIHRlcm1pbmF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgbHJ3X2RvbmUoc3ltbWV0cmljX0xSVyAqbHJ3KSAKK3sKKyAgIGludCBlcnI7CisKKyAgIExUQ19BUkdDSEsobHJ3ICE9IE5VTEwpOworIAorICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQobHJ3LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5kb25lKCZscnctPmtleSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19kb25lLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MzoxMyAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0LmMgYi9zcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkMTFjOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQuYwpAQCAtMCwwICsxLDUwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgbHJ3X2VuY3J5cHQuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIEVuY3J5cHQgYmxvY2tzLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKyAKKy8qKgorICBMUlcgZW5jcnlwdCBibG9ja3MKKyAgQHBhcmFtIHB0ICAgICBUaGUgcGxhaW50ZXh0CisgIEBwYXJhbSBjdCAgICAgW291dF0gVGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIGxlbiAgICBUaGUgbGVuZ3RoIGluIG9jdGV0cywgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2CisgIEBwYXJhbSBscncgICAgVGhlIExSVyBzdGF0ZQorKi8KK2ludCBscndfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfTFJXICpscncpCit7CisgICBpbnQgZXJyOworCisgICBMVENfQVJHQ0hLKHB0ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhscncgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGxydy0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltscnctPmNpcGhlcl0uYWNjZWxfbHJ3X2VuY3J5cHQgIT0gTlVMTCkgeworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5hY2NlbF9scndfZW5jcnlwdChwdCwgY3QsIGxlbiwgbHJ3LT5JViwgbHJ3LT50d2VhaywgJmxydy0+a2V5KTsKKyAgIH0KKworICAgcmV0dXJuIGxyd19wcm9jZXNzKHB0LCBjdCwgbGVuLCBMUldfRU5DUllQVCwgbHJ3KTsKK30KKworCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUzOjEzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9scncvbHJ3X2dldGl2LmMgYi9zcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTU5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfZ2V0aXYuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIFJldHJpZXZlIHRoZSBjdXJyZW50IElWLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworLyoqCisgIEdldCB0aGUgSVYgZm9yIExSVworICBAcGFyYW0gSVYgICAgICBbb3V0XSBUaGUgSVYsIG11c3QgYmUgMTYgb2N0ZXRzCisgIEBwYXJhbSBsZW4gICAgIExlbmd0aCAuLi4gbXVzdCBiZSBhdCBsZWFzdCAxNiA6LSkKKyAgQHBhcmFtIGxydyAgICAgVGhlIExSVyBzdGF0ZSB0byByZWFkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBscndfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgKmxlbiwgc3ltbWV0cmljX0xSVyAqbHJ3KQoreworICAgTFRDX0FSR0NISyhJViAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhscncgIT0gTlVMTCk7CisgICBpZiAoKmxlbiA8IDE2KSB7CisgICAgICAgKmxlbiA9IDE2OworICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIFhNRU1DUFkoSVYsIGxydy0+SVYsIDE2KTsKKyAgICpsZW4gPSAxNjsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTM6MTMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL2xydy9scndfcHJvY2Vzcy5jIGIvc3JjL21vZGVzL2xydy9scndfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MWQ0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfcHJvY2Vzcy5jCisgICBMUldfTU9ERSBpbXBsZW1lbnRhdGlvbiwgRW5jcnlwdC9kZWNyeXB0IGJsb2NrcywgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0xSV19NT0RFCisKKy8qKgorICBQcm9jZXNzIGJsb2NrcyB3aXRoIExSVywgc2luY2UgZGVjcnlwdC9lbmNyeXB0IGFyZSBsYXJnZWx5IHRoZSBzYW1lIHRoZXkgc2hhcmUgdGhpcyBjb2RlLgorICBAcGFyYW0gcHQgICAgICAgIFRoZSAiaW5wdXQiIGRhdGEKKyAgQHBhcmFtIGN0ICAgICAgICBbb3V0XSBUaGUgIm91dHB1dCIgZGF0YQorICBAcGFyYW0gbGVuICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0LCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTI4LWJpdHMgKDE2IG9jdGV0cykKKyAgQHBhcmFtIG1vZGUgICAgICBMUldfRU5DUllQVCBvciBMUldfREVDUllQVAorICBAcGFyYW0gbHJ3ICAgICAgIFRoZSBMUlcgc3RhdGUKKyAgQHJldHVybiAgQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBscndfcHJvY2Vzcyhjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgbW9kZSwgc3ltbWV0cmljX0xSVyAqbHJ3KQoreworICAgdW5zaWduZWQgY2hhciBwcm9kWzE2XTsKKyAgIGludCAgICAgICAgICAgeCwgZXJyOworI2lmZGVmIExSV19UQUJMRVMKKyAgIGludCAgICAgICAgICAgeTsKKyNlbmRpZgorCisgICBMVENfQVJHQ0hLKHB0ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhscncgIT0gTlVMTCk7CisKKyAgIGlmIChsZW4gJiAxNSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICB3aGlsZSAobGVuKSB7CisgICAgICAvKiBjb3B5IHBhZCAqLworICAgICAgWE1FTUNQWShwcm9kLCBscnctPnBhZCwgMTYpOworCisgICAgICAvKiBpbmNyZW1lbnQgSVYgKi8KKyAgICAgIGZvciAoeCA9IDE1OyB4ID49IDA7IHgtLSkgeworICAgICAgICAgIGxydy0+SVZbeF0gPSAobHJ3LT5JVlt4XSArIDEpICYgMjU1OworICAgICAgICAgIGlmIChscnctPklWW3hdKSB7IAorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIHVwZGF0ZSBwYWQgKi8KKyNpZmRlZiBMUldfVEFCTEVTCisgICAgICAvKiBmb3IgZWFjaCBieXRlIGNoYW5nZWQgd2UgdW5kbyBpdCdzIGFmZmVjdCBvbiB0aGUgcGFkIHRoZW4gYWRkIHRoZSBuZXcgcHJvZHVjdCAqLworICAgICAgZm9yICg7IHggPCAxNjsgeCsrKSB7CisjaWZkZWYgTFRDX0ZBU1QKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUgKikobHJ3LT5wYWQgKyB5KSkgXj0gKigoTFRDX0ZBU1RfVFlQRSAqKSgmbHJ3LT5QQ1t4XVtscnctPklWW3hdXVt5XSkpIF4gKigoTFRDX0ZBU1RfVFlQRSAqKSgmbHJ3LT5QQ1t4XVsobHJ3LT5JVlt4XS0xKSYyNTVdW3ldKSk7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworICAgICAgICAgICAgICBscnctPnBhZFt5XSBePSBscnctPlBDW3hdW2xydy0+SVZbeF1dW3ldIF4gbHJ3LT5QQ1t4XVsobHJ3LT5JVlt4XS0xKSYyNTVdW3ldOworICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgfQorI2Vsc2UKKyAgICAgIGdjbV9nZl9tdWx0KGxydy0+dHdlYWssIGxydy0+SVYsIGxydy0+cGFkKTsKKyNlbmRpZgorCisgICAgICAvKiB4b3IgcHJvZCAqLworI2lmZGVmIExUQ19GQVNUCisgICAgICBmb3IgKHggPSAwOyB4IDwgMTY7IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUgKikoY3QgKyB4KSkgPSAqKChMVENfRkFTVF9UWVBFICopKHB0ICsgeCkpIF4gKigoTFRDX0ZBU1RfVFlQRSAqKShwcm9kICsgeCkpOworICAgICAgfQorI2Vsc2UKKyAgICAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7CisgICAgICAgICBjdFt4XSA9IHB0W3hdIF4gcHJvZFt4XTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKiBzZW5kIHRocm91Z2ggY2lwaGVyICovCisgICAgICBpZiAobW9kZSA9PSBMUldfRU5DUllQVCkgeworICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltscnctPmNpcGhlcl0uZWNiX2VuY3J5cHQoY3QsIGN0LCAmbHJ3LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5lY2JfZGVjcnlwdChjdCwgY3QsICZscnctPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgfSAgICAgICAgICAgICAgIAorCisgICAgICAvKiB4b3IgcHJvZCAqLworI2lmZGVmIExUQ19GQVNUCisgICAgICBmb3IgKHggPSAwOyB4IDwgMTY7IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUgKikoY3QgKyB4KSkgPSAqKChMVENfRkFTVF9UWVBFICopKGN0ICsgeCkpIF4gKigoTFRDX0ZBU1RfVFlQRSAqKShwcm9kICsgeCkpOworICAgICAgfQorI2Vsc2UKKyAgICAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7CisgICAgICAgICBjdFt4XSA9IGN0W3hdIF4gcHJvZFt4XTsKKyAgICAgIH0KKyNlbmRpZgorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIHB0ICArPSAxNjsKKyAgICAgIGN0ICArPSAxNjsKKyAgICAgIGxlbiAtPSAxNjsKKyAgIH0KKworICAgcmV0dXJuIENSWVBUX09LOworfQorICAgICAgCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3Byb2Nlc3MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMCAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MzoxMyAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5jIGIvc3JjL21vZGVzL2xydy9scndfc2V0aXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjNjMGFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL21vZGVzL2xydy9scndfc2V0aXYuYwpAQCAtMCwwICsxLDc5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgbHJ3X3NldGl2LmMKKyAgIExSV19NT0RFIGltcGxlbWVudGF0aW9uLCBTZXQgdGhlIGN1cnJlbnQgSVYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorCisvKioKKyAgU2V0IHRoZSBJViBmb3IgTFJXCisgIEBwYXJhbSBJViAgICAgIFRoZSBJViwgbXVzdCBiZSAxNiBvY3RldHMKKyAgQHBhcmFtIGxlbiAgICAgTGVuZ3RoIC4uLiBtdXN0IGJlIDE2IDotKQorICBAcGFyYW0gbHJ3ICAgICBUaGUgTFJXIHN0YXRlIHRvIHVwZGF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgbHJ3X3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0xSVyAqbHJ3KQoreworICAgaW50ICAgICAgICAgICBlcnI7CisjaWZkZWYgTFJXX1RBQkxFUworICAgdW5zaWduZWQgY2hhciBUWzE2XTsKKyAgIGludCAgICAgICAgICAgeCwgeTsKKyNlbmRpZgorICAgTFRDX0FSR0NISyhJViAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHJ3ICE9IE5VTEwpOworCisgICBpZiAobGVuICE9IDE2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGxydy0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGNvcHkgdGhlIElWICovCisgICBYTUVNQ1BZKGxydy0+SVYsIElWLCAxNik7CisKKyAgIC8qIGNoZWNrIGlmIHdlIGhhdmUgdG8gYWN0dWFsbHkgZG8gd29yayAqLworICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5hY2NlbF9scndfZW5jcnlwdCAhPSBOVUxMICYmIGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5hY2NlbF9scndfZGVjcnlwdCAhPSBOVUxMKSB7CisgICAgICAgLyogd2UgaGF2ZSBhY2NlbGVyYXRvcnMsIGxldCdzIGJhaWwgc2luY2UgdGhleSBkb24ndCB1c2UgbHJ3LT5wYWQgYW55d2F5cyAqLworICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0KKworI2lmZGVmIExSV19UQUJMRVMKKyAgIFhNRU1DUFkoVCwgJmxydy0+UENbMF1bSVZbMF1dWzBdLCAxNik7CisgICBmb3IgKHggPSAxOyB4IDwgMTY7IHgrKykgeworI2lmZGVmIExUQ19GQVNUCisgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFICopKFQgKyB5KSkgXj0gKigoTFRDX0ZBU1RfVFlQRSAqKSgmbHJ3LT5QQ1t4XVtJVlt4XV1beV0pKTsKKyAgICAgICB9CisjZWxzZQorICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAgIFRbeV0gXj0gbHJ3LT5QQ1t4XVtJVlt4XV1beV07CisgICAgICAgfQorI2VuZGlmCisgICB9CisgICBYTUVNQ1BZKGxydy0+cGFkLCBULCAxNik7CisjZWxzZSAgICAgCisgICBnY21fZ2ZfbXVsdChscnctPnR3ZWFrLCBJViwgbHJ3LT5wYWQpOyAKKyNlbmRpZgorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUzOjEzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0LmMgYi9zcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjI0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgbHJ3X3N0YXJ0LmMKKyAgIExSV19NT0RFIGltcGxlbWVudGF0aW9uLCBzdGFydCBtb2RlLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworLyoqCisgIEluaXRpYWxpemUgdGhlIExSVyBjb250ZXh0CisgIEBwYXJhbSBjaXBoZXIgICAgICAgIFRoZSBjaXBoZXIgZGVzaXJlZCwgbXVzdCBiZSBhIDEyOC1iaXQgYmxvY2sgY2lwaGVyIAorICBAcGFyYW0gSVYgICAgICAgICAgICBUaGUgaW5kZXggdmFsdWUsIG11c3QgYmUgMTI4LWJpdHMKKyAgQHBhcmFtIGtleSAgICAgICAgICAgVGhlIGNpcGhlciBrZXkgCisgIEBwYXJhbSBrZXlsZW4gICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlciBrZXkgaW4gb2N0ZXRzCisgIEBwYXJhbSB0d2VhayAgICAgICAgIFRoZSB0d2VhayB2YWx1ZSAoc2Vjb25kIGtleSksIG11c3QgYmUgMTI4LWJpdHMKKyAgQHBhcmFtIG51bV9yb3VuZHMgICAgVGhlIG51bWJlciBvZiByb3VuZHMgZm9yIHRoZSBjaXBoZXIgKDAgPT0gZGVmYXVsdCkKKyAgQHBhcmFtIGxydyAgICAgICAgICAgW291dF0gVGhlIExSVyBzdGF0ZQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MuCisqLworaW50IGxyd19zdGFydCggICAgICAgICAgICAgICBpbnQgICBjaXBoZXIsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgIGludCBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnR3ZWFrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsIAorICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19MUlcgKmxydykKK3sKKyAgIGludCAgICAgICAgICAgZXJyOworI2lmZGVmIExSV19UQUJMRVMKKyAgIHVuc2lnbmVkIGNoYXIgQlsxNl07CisgICBpbnQgICAgICAgICAgIHgsIHksIHosIHQ7CisjZW5kaWYKKworICBMVENfQVJHQ0hLKElWICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtleSAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKHR3ZWFrICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGxydyAgICE9IE5VTEwpOworCisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmICgxNiAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKyAgIC8qIGlzIGNpcGhlciB2YWxpZD8gKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoICE9IDE2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9DSVBIRVI7CisgICB9CisKKyAgIC8qIHNjaGVkdWxlIGtleSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCAmbHJ3LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGxydy0+Y2lwaGVyID0gY2lwaGVyOworCisgICAvKiBjb3B5IHRoZSBJViBhbmQgdHdlYWsgKi8KKyAgIFhNRU1DUFkobHJ3LT50d2VhaywgdHdlYWssIDE2KTsKKworI2lmZGVmIExSV19UQUJMRVMKKyAgIC8qIHNldHVwIHRhYmxlcyAqLworICAgLyogZ2VuZXJhdGUgdGhlIGZpcnN0IHRhYmxlIGFzIGl0IGhhcyBubyBzaGlmdGluZyAoZnJvbSB3aGljaCB3ZSBtYWtlIHRoZSBvdGhlciB0YWJsZXMpICovCisgICB6ZXJvbWVtKEIsIDE2KTsKKyAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkrKykgeworICAgICAgICBCWzBdID0geTsKKyAgICAgICAgZ2NtX2dmX211bHQodHdlYWssIEIsICZscnctPlBDWzBdW3ldWzBdKTsKKyAgIH0KKworICAgLyogbm93IGdlbmVyYXRlIHRoZSByZXN0IG9mIHRoZSB0YWJsZXMgYmFzZWQgdGhlIHByZXZpb3VzIHRhYmxlICovCisgICBmb3IgKHggPSAxOyB4IDwgMTY7IHgrKykgeworICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAvKiBub3cgc2hpZnQgaXQgcmlnaHQgYnkgOCBiaXRzICovCisgICAgICAgICB0ID0gbHJ3LT5QQ1t4LTFdW3ldWzE1XTsKKyAgICAgICAgIGZvciAoeiA9IDE1OyB6ID4gMDsgei0tKSB7CisgICAgICAgICAgICAgbHJ3LT5QQ1t4XVt5XVt6XSA9IGxydy0+UENbeC0xXVt5XVt6LTFdOworICAgICAgICAgfQorICAgICAgICAgbHJ3LT5QQ1t4XVt5XVswXSAgPSBnY21fc2hpZnRfdGFibGVbdDw8MV07CisgICAgICAgICBscnctPlBDW3hdW3ldWzFdIF49IGdjbV9zaGlmdF90YWJsZVsodDw8MSkrMV07CisgICAgIH0KKyAgfQorI2VuZGlmCisKKyAgIC8qIGdlbmVyYXRlIGZpcnN0IHBhZCAqLworICAgcmV0dXJuIGxyd19zZXRpdihJViwgMTYsIGxydyk7Cit9CisKKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUzOjEzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9scncvbHJ3X3Rlc3QuYyBiL3NyYy9tb2Rlcy9scncvbHJ3X3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTMzODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL21vZGVzL2xydy9scndfdGVzdC5jCkBAIC0wLDAgKzEsMTM2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgbHJ3X3Rlc3QuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIHRlc3QgTFJXLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworLyoqCisgIFRlc3QgTFJXIGFnYWluc3Qgc3BlY3MKKyAgQHJldHVybiBDUllQVF9PSyBpZiBnb29kbHkKKyovCitpbnQgbHJ3X3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCB0d2Vha1sxNl0sIElWWzE2XSwgUFsxNl0sIGV4cGVjdGVkX3R3ZWFrWzE2XSwgQ1sxNl07CisgICB9IHRlc3RzW10gPSB7CisKK3sKK3sgMHg0NSwgMHg2MiwgMHhhYywgMHgyNSwgMHhmOCwgMHgyOCwgMHgxNywgMHg2ZCwgMHg0YywgMHgyNiwgMHg4NCwgMHgxNCwgMHhiNSwgMHg2OCwgMHgwMSwgMHg4NSB9LAoreyAweDI1LCAweDhlLCAweDJhLCAweDA1LCAweGU3LCAweDNlLCAweDlkLCAweDAzLCAweGVlLCAweDVhLCAweDgzLCAweDBjLCAweGNjLCAweDA5LCAweDRjLCAweDg3IH0sCit7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKK3sgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiB9LAoreyAweDI1LCAweDhlLCAweDJhLCAweDA1LCAweGU3LCAweDNlLCAweDlkLCAweDAzLCAweGVlLCAweDVhLCAweDgzLCAweDBjLCAweGNjLCAweDA5LCAweDRjLCAweDg3IH0sCit7IDB4ZjEsIDB4YjIsIDB4NzMsIDB4Y2QsIDB4NjUsIDB4YTMsIDB4ZGYsIDB4NWYsIDB4ZTksIDB4NWQsIDB4NDgsIDB4OTIsIDB4NTQsIDB4NjMsIDB4NGUsIDB4YjggfQorfSwKKworeworeyAweDU5LCAweDcwLCAweDQ3LCAweDE0LCAweGY1LCAweDU3LCAweDQ3LCAweDhjLCAweGQ3LCAweDc5LCAweGU4LCAweDBmLCAweDU0LCAweDg4LCAweDc5LCAweDQ0IH0sCit7IDB4MzUsIDB4MjMsIDB4YzIsIDB4ZGUsIDB4YzUsIDB4NjksIDB4NGYsIDB4YTgsIDB4NzIsIDB4YTksIDB4YWMsIDB4YTcsIDB4MGIsIDB4MmIsIDB4ZWUsIDB4YmMgfSwKK3sgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAoreyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCit7IDB4MWEsIDB4OTEsIDB4ZTEsIDB4NmYsIDB4NjIsIDB4YjQsIDB4YTcsIDB4ZDQsIDB4MzksIDB4NTQsIDB4ZDYsIDB4NTMsIDB4ODUsIDB4OTUsIDB4ZjcsIDB4NWUgfSwKK3sgMHgwMCwgMHhjOCwgMHgyYiwgMHhhZSwgMHg5NSwgMHhiYiwgMHhjZCwgMHhlNSwgMHgyNywgMHg0ZiwgMHgwNywgMHg2OSwgMHhiMiwgMHg2MCwgMHhlMSwgMHgzNiB9LAorfSwKKworeworeyAweDU5LCAweDcwLCAweDQ3LCAweDE0LCAweGY1LCAweDU3LCAweDQ3LCAweDhjLCAweGQ3LCAweDc5LCAweGU4LCAweDBmLCAweDU0LCAweDg4LCAweDc5LCAweDQ0IH0sCit7IDB4NjcsIDB4NTMsIDB4YzksIDB4MGMsIDB4YjcsIDB4ZDgsIDB4Y2QsIDB4ZTUsIDB4MDYsIDB4YTAsIDB4NDcsIDB4NzgsIDB4MWEsIDB4YWQsIDB4ODUsIDB4MTEgfSwKK3sgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiB9LAoreyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCit7IDB4MWEsIDB4OTEsIDB4ZTEsIDB4NmYsIDB4NjIsIDB4YjQsIDB4YTcsIDB4ZDQsIDB4MzksIDB4NTQsIDB4ZDYsIDB4NTMsIDB4ODUsIDB4OTUsIDB4ZjcsIDB4NWUgfSwKK3sgMHgwMCwgMHhjOCwgMHgyYiwgMHhhZSwgMHg5NSwgMHhiYiwgMHhjZCwgMHhlNSwgMHgyNywgMHg0ZiwgMHgwNywgMHg2OSwgMHhiMiwgMHg2MCwgMHhlMSwgMHgzNiB9LAorfSwKKworeworCit7IDB4ZDgsIDB4MmEsIDB4OTEsIDB4MzQsIDB4YjIsIDB4NmEsIDB4NTYsIDB4NTAsIDB4MzAsIDB4ZmUsIDB4NjksIDB4ZTIsIDB4MzcsIDB4N2YsIDB4OTgsIDB4NDcgfSwKK3sgMHg0ZSwgMHhiNSwgMHg1ZCwgMHgzMSwgMHgwNSwgMHg5NywgMHgzYSwgMHgzZiwgMHg1ZSwgMHgyMywgMHhkYSwgMHhmYiwgMHg1YSwgMHg0NSwgMHhkNiwgMHhjMCB9LAoreyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCit7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKK3sgMHgxOCwgMHhjOSwgMHgxZiwgMHg2ZCwgMHg2MCwgMHgxYSwgMHgxYSwgMHgzNywgMHg1ZCwgMHgwYiwgMHgwZSwgMHhmNywgMHgzYSwgMHhkNSwgMHg3NCwgMHhjNCB9LAoreyAweDc2LCAweDMyLCAweDIxLCAweDgzLCAweGVkLCAweDhmLCAweGYxLCAweDgyLCAweGY5LCAweDU5LCAweDYyLCAweDAzLCAweDY5LCAweDBlLCAweDVlLCAweDAxIH0sCisKK30KK307CisKKyAgaW50IGlkeCwgZXJyLCB4OworICBzeW1tZXRyaWNfTFJXIGxydzsKKyAgdW5zaWduZWQgY2hhciBidWZbMl1bMTZdOworCisgIGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKTsKKyAgaWYgKGlkeCA9PSAtMSkgeworICAgICBpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKTsKKyAgICAgaWYgKGlkeCA9PSAtMSkgeworICAgICAgICByZXR1cm4gQ1JZUFRfTk9QOworICAgICB9CisgIH0KKworICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgIC8qIHNjaGVkdWxlIGl0ICovCisgICAgIGlmICgoZXJyID0gbHJ3X3N0YXJ0KGlkeCwgdGVzdHNbeF0uSVYsIHRlc3RzW3hdLmtleSwgMTYsIHRlc3RzW3hdLnR3ZWFrLCAwLCAmbHJ3KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorCisgICAgIC8qIGNoZWNrIHBhZCBhZ2FpbnN0IGV4cGVjdGVkIHR3ZWFrICovCisgICAgIGlmIChYTUVNQ01QKHRlc3RzW3hdLmV4cGVjdGVkX3R3ZWFrLCBscncucGFkLCAxNikpIHsKKyAgICAgICAgbHJ3X2RvbmUoJmxydyk7CisgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgIH0KKworICAgICAvKiBwcm9jZXNzIGJsb2NrICovCisgICAgIGlmICgoZXJyID0gbHJ3X2VuY3J5cHQodGVzdHNbeF0uUCwgYnVmWzBdLCAxNiwgJmxydykpICE9IENSWVBUX09LKSB7CisgICAgICAgIGxyd19kb25lKCZscncpOworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisKKyAgICAgaWYgKFhNRU1DTVAoYnVmWzBdLCB0ZXN0c1t4XS5DLCAxNikpIHsKKyAgICAgICAgbHJ3X2RvbmUoJmxydyk7CisgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgIH0KKworICAgICAvKiBwcm9jZXNzIGJsb2NrICovCisgICAgIGlmICgoZXJyID0gbHJ3X3NldGl2KHRlc3RzW3hdLklWLCAxNiwgJmxydykpICE9IENSWVBUX09LKSB7IAorICAgICAgICBscndfZG9uZSgmbHJ3KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorCisgICAgIGlmICgoZXJyID0gbHJ3X2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sIDE2LCAmbHJ3KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgbHJ3X2RvbmUoJmxydyk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKworICAgICBpZiAoWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLlAsIDE2KSkgeworICAgICAgICBscndfZG9uZSgmbHJ3KTsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgfQorICAgICBpZiAoKGVyciA9IGxyd19kb25lKCZscncpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30KKworI2VuZGlmCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd190ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTM6MTMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL29mYi9vZmJfZGVjcnlwdC5jIGIvc3JjL21vZGVzL29mYi9vZmJfZGVjcnlwdC5jCmluZGV4IGNmNWYxOWQuLjFhZGExZWQgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQuYworKysgYi9zcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE1LDcgKzE1LDcgQEAKICAgT0ZCIGltcGxlbWVudGF0aW9uLCBkZWNyeXB0IGRhdGEsIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIE9GQgorI2lmZGVmIExUQ19PRkJfTU9ERQogCiAvKioKICAgIE9GQiBkZWNyeXB0CkBAIC0zOSw1ICszOSw1IEBACiAgCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUuYyBiL3NyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUuYwppbmRleCA1ZTExNGY0Li41MGE5ZGUyIDEwMDY0NAotLS0gYS9zcmMvbW9kZXMvb2ZiL29mYl9kb25lLmMKKysrIGIvc3JjL21vZGVzL29mYi9vZmJfZG9uZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNSw3ICsxNSw3IEBACiAgICBPRkIgaW1wbGVtZW50YXRpb24sIGZpbmlzaCBjaGFpbiwgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgT0ZCCisjaWZkZWYgTFRDX09GQl9NT0RFCiAKIC8qKiBUZXJtaW5hdGUgdGhlIGNoYWluCiAgIEBwYXJhbSBvZmIgICAgVGhlIE9GQiBjaGFpbiB0byB0ZXJtaW5hdGUKQEAgLTM4LDUgKzM4LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9kb25lLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MTozNCAkICovCmRpZmYgLS1naXQgYS9zcmMvbW9kZXMvb2ZiL29mYl9lbmNyeXB0LmMgYi9zcmMvbW9kZXMvb2ZiL29mYl9lbmNyeXB0LmMKaW5kZXggZDY2OTc5YS4uMmMxOWYxZCAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL29mYi9vZmJfZW5jcnlwdC5jCisrKyBiL3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICBPRkIgaW1wbGVtZW50YXRpb24sIGVuY3J5cHQgZGF0YSwgVG9tIFN0IERlbmlzCiAqLwogCi0jaWZkZWYgT0ZCCisjaWZkZWYgTFRDX09GQl9NT0RFCiAKIC8qKgogICBPRkIgZW5jcnlwdApAQCAtNDMsMTAgKzQzLDEyIEBACiAgICAKICAgIHdoaWxlIChsZW4tLSA+IDApIHsKICAgICAgICBpZiAob2ZiLT5wYWRsZW4gPT0gb2ZiLT5ibG9ja2xlbikgewotICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW29mYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdChvZmItPklWLCBvZmItPklWLCAmb2ZiLT5rZXkpOworICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3Jbb2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KG9mYi0+SVYsIG9mYi0+SVYsICZvZmItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CiAgICAgICAgICAgb2ZiLT5wYWRsZW4gPSAwOwogICAgICAgIH0KLSAgICAgICAqY3QrKyA9ICpwdCsrIF4gb2ZiLT5JVltvZmItPnBhZGxlbisrXTsKKyAgICAgICAqY3QrKyA9ICpwdCsrIF4gb2ZiLT5JVlsob2ZiLT5wYWRsZW4pKytdOwogICAgfQogICAgcmV0dXJuIENSWVBUX09LOwogfQpAQCAtNTQsNSArNTYsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAxOjQ1OjE0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9vZmIvb2ZiX2dldGl2LmMgYi9zcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5jCmluZGV4IGY5NDVmZmYuLjY0MWQxNGIgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9vZmIvb2ZiX2dldGl2LmMKKysrIGIvc3JjL21vZGVzL29mYi9vZmJfZ2V0aXYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICAgT0ZCIGltcGxlbWVudGF0aW9uLCBnZXQgSVYsIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIE9GQgorI2lmZGVmIExUQ19PRkJfTU9ERQogCiAvKioKICAgIEdldCB0aGUgY3VycmVudCBpbml0aWFsIHZlY3RvcgpAQCAtMzAsNiArMzAsNyBAQAogICAgTFRDX0FSR0NISyhsZW4gIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKG9mYiAhPSBOVUxMKTsKICAgIGlmICgodW5zaWduZWQgbG9uZylvZmItPmJsb2NrbGVuID4gKmxlbikgeworICAgICAgKmxlbiA9IG9mYi0+YmxvY2tsZW47CiAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgfQogICAgWE1FTUNQWShJViwgb2ZiLT5JViwgb2ZiLT5ibG9ja2xlbik7CkBAIC00MSw1ICs0Miw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL29mYi9vZmJfZ2V0aXYuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2LmMgYi9zcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5jCmluZGV4IGY2Nzg2MDEuLjM1YTg0ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2LmMKKysrIGIvc3JjL21vZGVzL29mYi9vZmJfc2V0aXYuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTUsNyArMTUsNyBAQAogICAgT0ZCIGltcGxlbWVudGF0aW9uLCBzZXQgSVYsIFRvbSBTdCBEZW5pcwogKi8KIAotI2lmZGVmIE9GQgorI2lmZGVmIExUQ19PRkJfTU9ERQogCiAvKioKICAgIFNldCBhbiBpbml0aWFsIHZlY3RvcgpAQCAtNDEsMTMgKzQxLDEyIEBACiAKICAgIC8qIGZvcmNlIG5leHQgYmxvY2sgKi8KICAgIG9mYi0+cGFkbGVuID0gMDsKLSAgIGNpcGhlcl9kZXNjcmlwdG9yW29mYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdChJViwgb2ZiLT5JViwgJm9mYi0+a2V5KTsKLSAgIHJldHVybiBDUllQVF9PSzsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltvZmItPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIG9mYi0+SVYsICZvZmItPmtleSk7CiB9CiAKICNlbmRpZiAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL21vZGVzL29mYi9vZmJfc3RhcnQuYyBiL3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0LmMKaW5kZXggMDgzZTM4MS4uMWYwZjY1YSAxMDA2NDQKLS0tIGEvc3JjL21vZGVzL29mYi9vZmJfc3RhcnQuYworKysgYi9zcmMvbW9kZXMvb2ZiL29mYl9zdGFydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xNiw3ICsxNiw3IEBACiAqLwogCiAKLSNpZmRlZiBPRkIKKyNpZmRlZiBMVENfT0ZCX01PREUKIAogLyoqCiAgICBJbml0aWFsaXplIGEgT0ZCIGNvbnRleHQKQEAgLTU2LDUgKzU2LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9zdGFydC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZGVjb2RlX2JpdF9zdHJpbmcuYyBiL3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2RlY29kZV9iaXRfc3RyaW5nLmMKaW5kZXggZGE1Yjk4OS4uMWQzNTY5YyAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZGVjb2RlX2JpdF9zdHJpbmcuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC01MSw3ICs1MSw3IEBACiAgICAvKiBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAqLwogICAgaWYgKGluW3hdICYgMHg4MCkgewogICAgICAgLyogbG9uZyBmb3JtYXQgZ2V0IG51bWJlciBvZiBsZW5ndGggYnl0ZXMgKi8KLSAgICAgIHkgPSBpblt4KytdICYgMTI3OworICAgICAgeSA9IGluW3grK10gJiAweDdGOwogCiAgICAgICAvKiBpbnZhbGlkIGlmIDAgb3IgPiAyICovCiAgICAgICBpZiAoeSA9PSAwIHx8IHkgPiAyKSB7CkBAIC02NSw3ICs2NSw3IEBACiAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgLyogc2hvcnQgZm9ybWF0ICovCi0gICAgICBkbGVuID0gaW5beCsrXSAmIDEyNzsKKyAgICAgIGRsZW4gPSBpblt4KytdICYgMHg3RjsKICAgIH0KICAgCiAgICAvKiBpcyB0aGUgZGF0YSBsZW4gdG9vIGxvbmcgb3IgdG9vIHNob3J0PyAqLwpAQCAtNzgsNiArNzgsNyBAQAogCiAgICAvKiB0b28gbWFueSBiaXRzPyAqLwogICAgaWYgKGJsZW4gPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gYmxlbjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKQEAgLTk3LDUgKzk4LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjEgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMTYgMTU6MDg6MTEgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcuYyBiL3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLmMKaW5kZXggNTY5YzE1Yi4uNzU3OTYzYyAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9lbmNvZGVfYml0X3N0cmluZy5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yOSw3ICsyOSw4IEBACiBpbnQgZGVyX2VuY29kZV9iaXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKIHsKLSAgIHVuc2lnbmVkIGxvbmcgbGVuLCB4LCB5LCBidWY7CisgICB1bnNpZ25lZCBsb25nIGxlbiwgeCwgeTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmOwogICAgaW50ICAgICAgICAgICBlcnI7CiAKICAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOwpAQCAtNDIsNiArNDMsNyBAQAogICAgfQogCiAgICBpZiAobGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGxlbjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKQEAgLTUxLDE4ICs1MywxOCBAQAogCiAgICBvdXRbeCsrXSA9IDB4MDM7CiAgICBpZiAoeSA8IDEyOCkgewotICAgICAgb3V0W3grK10gPSB5OworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcil5OwogICAgfSBlbHNlIGlmICh5IDwgMjU2KSB7CiAgICAgICBvdXRbeCsrXSA9IDB4ODE7Ci0gICAgICBvdXRbeCsrXSA9IHk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKXk7CiAgICB9IGVsc2UgaWYgKHkgPCA2NTUzNikgewogICAgICAgb3V0W3grK10gPSAweDgyOwotICAgICAgb3V0W3grK10gPSAoeT4+OCkmMjU1OwotICAgICAgb3V0W3grK10gPSB5JjI1NTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKCh5Pj44KSYyNTUpOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoeSYyNTUpOwogICAgfQogCiAgICAvKiBzdG9yZSBudW1iZXIgb2YgemVybyBwYWRkaW5nIGJpdHMgKi8KLSAgIG91dFt4KytdID0gKDggLSBpbmxlbikgJiA3OworICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKDggLSBpbmxlbikgJiA3KTsKIAogICAgLyogc3RvcmUgdGhlIGJpdHMgaW4gYmlnIGVuZGlhbiBmb3JtYXQgKi8KICAgIGZvciAoeSA9IGJ1ZiA9IDA7IHkgPCBpbmxlbjsgeSsrKSB7CkBAIC04Myw1ICs4NSw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE2IDE1OjA4OjExICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2xlbmd0aF9iaXRfc3RyaW5nLmMgYi9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5jCmluZGV4IGRkNmVhNmQuLjNkYzJhYmYgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2xlbmd0aF9iaXRfc3RyaW5nLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfbGVuZ3RoX2JpdF9zdHJpbmcuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtNTAsNSArNTAsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2xlbmd0aF9iaXRfc3RyaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZGVjb2RlX2Jvb2xlYW4uYyBiL3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9kZWNvZGVfYm9vbGVhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTllNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZGVjb2RlX2Jvb2xlYW4uYwpAQCAtMCwwICsxLDQ3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX2Jvb2xlYW4uYworICBBU04uMSBERVIsIGRlY29kZSBhIEJPT0xFQU4sIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0RFUgorCisvKioKKyAgUmVhZCBhIEJPT0xFQU4KKyAgQHBhcmFtIGluICAgICAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgQk9PTEVBTgorICBAcGFyYW0gaW5sZW4gICBUaGUgc2l6ZSBvZiB0aGUgREVSIEJPT0xFQU4KKyAgQHBhcmFtIG91dCAgICAgW291dF0gIFRoZSBib29sZWFuIHRvIGRlY29kZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2RlY29kZV9ib29sZWFuKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpvdXQpCit7CisgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICE9IE5VTEwpOworICAgCisgICBpZiAoaW5sZW4gIT0gMyB8fCBpblswXSAhPSAweDAxIHx8IGluWzFdICE9IDB4MDEgfHwgKGluWzJdICE9IDB4MDAgJiYgaW5bMl0gIT0gMHhGRikpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKyAgIAorICAgKm91dCA9IChpblsyXT09MHhGRikgPyAxIDogMDsKKyAgIAorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2RlY29kZV9ib29sZWFuLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMSAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8yMiAxNzowMTo1OSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZW5jb2RlX2Jvb2xlYW4uYyBiL3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9lbmNvZGVfYm9vbGVhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNDRhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZW5jb2RlX2Jvb2xlYW4uYwpAQCAtMCwwICsxLDUxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX2Jvb2xlYW4uYworICBBU04uMSBERVIsIGVuY29kZSBhIEJPT0xFQU4sIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0RFUgorCisvKioKKyAgU3RvcmUgYSBCT09MRUFOCisgIEBwYXJhbSBpbiAgICAgICBUaGUgYm9vbGVhbiB0byBlbmNvZGUKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIERFUiBlbmNvZGVkIEJPT0xFQU4KKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBCT09MRUFOCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZW5jb2RlX2Jvb2xlYW4oaW50IGluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgCisgICBpZiAoKm91dGxlbiA8IDMpIHsKKyAgICAgICAqb3V0bGVuID0gMzsKKyAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorICAgCisgICAqb3V0bGVuID0gMzsKKyAgIG91dFswXSA9IDB4MDE7CisgICBvdXRbMV0gPSAweDAxOworICAgb3V0WzJdID0gaW4gPyAweEZGIDogMHgwMDsKKyAgIAorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2VuY29kZV9ib29sZWFuLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfbGVuZ3RoX2Jvb2xlYW4uYyBiL3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9sZW5ndGhfYm9vbGVhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNWJmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfbGVuZ3RoX2Jvb2xlYW4uYwpAQCAtMCwwICsxLDM1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfbGVuZ3RoX2Jvb2xlYW4uYworICBBU04uMSBERVIsIGdldCBsZW5ndGggb2YgYSBCT09MRUFOLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisvKioKKyAgR2V0cyBsZW5ndGggb2YgREVSIGVuY29kaW5nIG9mIGEgQk9PTEVBTiAKKyAgQHBhcmFtIG91dGxlbiBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9sZW5ndGhfYm9vbGVhbih1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgICpvdXRsZW4gPSAzOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2xlbmd0aF9ib29sZWFuLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8yMiAxNzoyODozOCAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLmMgYi9zcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLmMKaW5kZXggNjFjYmExMS4uNGZmNmYxNyAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5jCisrKyBiL3NyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtOTYsNiArOTYsNyBAQAogICAgICAgICAgICBjYXNlIExUQ19BU04xX05VTEw6CiAgICAgICAgICAgICAgICBpZiAoKmlubGVuID09IDIgJiYgaW5beF0gPT0gMHgwNSAmJiBpblt4KzFdID09IDB4MDApIHsKICAgICAgICAgICAgICAgICAgICppbmxlbiA9IDI7CisgICAgICAgICAgICAgICAgICBsaXN0W3hdLnVzZWQgICA9IDE7CiAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfT0s7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzNCw2ICsxMzUsMTcgQEAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRGOF9TVFJJTkc6CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV91dGY4X3N0cmluZyhpbiwgKmlubGVuLCBkYXRhLCAmc2l6ZSkgPT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmIChkZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nKGRhdGEsIHNpemUsICZ6KSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgICAgbGlzdFt4XS51c2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgICAgICAqaW5sZW4gICAgICAgPSB6OworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVENUSU1FOgogICAgICAgICAgICAgICAgeiA9ICppbmxlbjsKICAgICAgICAgICAgICAgIGlmIChkZXJfZGVjb2RlX3V0Y3RpbWUoaW4sICZ6LCBkYXRhKSA9PSBDUllQVF9PSykgewpAQCAtMTQzLDYgKzE1NSw4IEBACiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKICAgICAgICAgICAgICAgIGlmIChkZXJfZGVjb2RlX3NlcXVlbmNlKGluLCAqaW5sZW4sIGRhdGEsIHNpemUpID09IENSWVBUX09LKSB7CiAgICAgICAgICAgICAgICAgICBpZiAoZGVyX2xlbmd0aF9zZXF1ZW5jZShkYXRhLCBzaXplLCAmeikgPT0gQ1JZUFRfT0spIHsKQEAgLTE2NCw1ICsxNzgsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDExOjI1OjAxICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA2IDAyOjIzOjQ5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2RlY29kZV9pYTVfc3RyaW5nLmMgYi9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5jCmluZGV4IGFjMGE0YWYuLjI1MTRiNzcgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2RlY29kZV9pYTVfc3RyaW5nLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtNjcsNiArNjcsNyBAQAogCiAgICAvKiBpcyBpdCB0b28gbG9uZz8gKi8KICAgIGlmIChsZW4gPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOwogICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKICAgIH0KIApAQCAtOTEsNSArOTIsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2RlY29kZV9pYTVfc3RyaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9lbmNvZGVfaWE1X3N0cmluZy5jIGIvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZW5jb2RlX2lhNV9zdHJpbmcuYwppbmRleCBhNzliNDZlLi5hZmYzMzkyIDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9lbmNvZGVfaWE1X3N0cmluZy5jCisrKyBiL3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTQyLDYgKzQyLDcgQEAKIAogICAgLyogdG9vIGJpZz8gKi8KICAgIGlmIChsZW4gPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOwogICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKICAgIH0KIApAQCAtNDksMTkgKzUwLDE5IEBACiAgICB4ID0gMDsKICAgIG91dFt4KytdID0gMHgxNjsKICAgIGlmIChpbmxlbiA8IDEyOCkgewotICAgICAgb3V0W3grK10gPSBpbmxlbjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpaW5sZW47CiAgICB9IGVsc2UgaWYgKGlubGVuIDwgMjU2KSB7CiAgICAgICBvdXRbeCsrXSA9IDB4ODE7Ci0gICAgICBvdXRbeCsrXSA9IGlubGVuOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcilpbmxlbjsKICAgIH0gZWxzZSBpZiAoaW5sZW4gPCA2NTUzNlVMKSB7CiAgICAgICBvdXRbeCsrXSA9IDB4ODI7Ci0gICAgICBvdXRbeCsrXSA9IChpbmxlbj4+OCkmMjU1OwotICAgICAgb3V0W3grK10gPSBpbmxlbiYyNTU7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5sZW4+PjgpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKShpbmxlbiYyNTUpOwogICAgfSBlbHNlIGlmIChpbmxlbiA8IDE2Nzc3MjE2VUwpIHsKICAgICAgIG91dFt4KytdID0gMHg4MzsKLSAgICAgIG91dFt4KytdID0gKGlubGVuPj4xNikmMjU1OwotICAgICAgb3V0W3grK10gPSAoaW5sZW4+PjgpJjI1NTsKLSAgICAgIG91dFt4KytdID0gaW5sZW4mMjU1OworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKGlubGVuPj4xNikmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKGlubGVuJjI1NSk7CiAgICB9IGVsc2UgewogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwogICAgfQpAQCAtODAsNSArODEsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5jIGIvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfbGVuZ3RoX2lhNV9zdHJpbmcuYwppbmRleCBkMDdkNjMwLi42Mjc4ZGQyIDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5jCisrKyBiL3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE5MCw1ICsxOTAsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIuYyBiL3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5jCmluZGV4IGU2OGIyYzkuLmFlZjg3YTMgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5jCisrKyBiL3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNSw3ICsyNSw3IEBACiAgIEBwYXJhbSBudW0gICAgICBUaGUgZmlyc3QgbXBfaW50IHRvIGRlY29kZQogICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi1pbnQgZGVyX2RlY29kZV9pbnRlZ2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBtcF9pbnQgKm51bSkKK2ludCBkZXJfZGVjb2RlX2ludGVnZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHZvaWQgKm51bSkKIHsKICAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgejsKICAgIGludCAgICAgICAgICAgZXJyOwpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgfQogICAgICAKICAgICAgIC8qIG5vIHNvIHJlYWQgaXQgKi8KLSAgICAgIGlmICgoZXJyID0gbXBpX3RvX2x0Y19lcnJvcihtcF9yZWFkX3Vuc2lnbmVkX2JpbihudW0sICh1bnNpZ25lZCBjaGFyICopaW4gKyB4LCB6KSkpICE9IENSWVBUX09LKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKG51bSwgKHVuc2lnbmVkIGNoYXIgKilpbiArIHgsIHopKSAhPSBDUllQVF9PSykgewogICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgIH0KICAgIH0gZWxzZSB7CkBAIC04MCwyMyArODAsMjMgQEAKICAgICAgIH0KIAogICAgICAgLyogbm8gc28gcmVhZCBpdCAqLwotICAgICAgaWYgKChlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfdW5zaWduZWRfYmluKG51bSwgKHVuc2lnbmVkIGNoYXIgKilpbiArIHgsIHkpKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4obnVtLCAodW5zaWduZWQgY2hhciAqKWluICsgeCwgeSkpICE9IENSWVBUX09LKSB7CiAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgfQogICAgfQogCiAgICAvKiBzZWUgaWYgaXQncyBuZWdhdGl2ZSAqLwogICAgaWYgKGluW3hdICYgMHg4MCkgewotICAgICAgbXBfaW50IHRtcDsKLSAgICAgIGlmIChtcF9pbml0KCZ0bXApICE9IE1QX09LQVkpIHsKKyAgICAgIHZvaWQgKnRtcDsKKyAgICAgIGlmIChtcF9pbml0KCZ0bXApICE9IENSWVBUX09LKSB7CiAgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOwogICAgICAgfQogCi0gICAgICBpZiAobXBfMmV4cHQoJnRtcCwgbXBfY291bnRfYml0cyhudW0pKSAhPSBNUF9PS0FZIHx8IG1wX3N1YihudW0sICZ0bXAsIG51bSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgbXBfY2xlYXIoJnRtcCk7CisgICAgICBpZiAobXBfMmV4cHQodG1wLCBtcF9jb3VudF9iaXRzKG51bSkpICE9IENSWVBUX09LIHx8IG1wX3N1YihudW0sIHRtcCwgbnVtKSAhPSBDUllQVF9PSykgeworICAgICAgICAgbXBfY2xlYXIodG1wKTsKICAgICAgICAgIHJldHVybiBDUllQVF9NRU07CiAgICAgICB9Ci0gICAgICBtcF9jbGVhcigmdG1wKTsKKyAgICAgIG1wX2NsZWFyKHRtcCk7CiAgICB9IAogCiAgICByZXR1cm4gQ1JZUFRfT0s7CkBAIC0xMDYsNSArMTA2LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4yICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzAxIDAwOjA2OjA1ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5jIGIvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLmMKaW5kZXggZjBmNDFiZS4uZmY0ZmNlNiAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBlbmNvZGVkIGludGVnZXJzCiAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KLWludCBkZXJfZW5jb2RlX2ludGVnZXIobXBfaW50ICpudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoraW50IGRlcl9lbmNvZGVfaW50ZWdlcih2b2lkICpudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQogeyAgCiAgICB1bnNpZ25lZCBsb25nIHRtcGxlbiwgeTsKICAgIGludCAgICAgICAgICAgZXJyLCBsZWFkaW5nX3plcm87CkBAIC00MSwxMiArNDEsMTMgQEAKICAgIH0KIAogICAgaWYgKCpvdXRsZW4gPCB0bXBsZW4pIHsKKyAgICAgICpvdXRsZW4gPSB0bXBsZW47CiAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgfQogCi0gICBpZiAobXBfY21wX2QobnVtLCAwKSAhPSBNUF9MVCkgeworICAgaWYgKG1wX2NtcF9kKG51bSwgMCkgIT0gTFRDX01QX0xUKSB7CiAgICAgICAvKiB3ZSBvbmx5IG5lZWQgYSBsZWFkaW5nIHplcm8gaWYgdGhlIG1zYiBvZiB0aGUgZmlyc3QgYnl0ZSBpcyBvbmUgKi8KLSAgICAgIGlmICgobXBfY291bnRfYml0cyhudW0pICYgNykgPT0gMCB8fCBtcF9pc3plcm8obnVtKSA9PSBNUF9ZRVMpIHsKKyAgICAgIGlmICgobXBfY291bnRfYml0cyhudW0pICYgNykgPT0gMCB8fCBtcF9pc3plcm8obnVtKSA9PSBMVENfTVBfWUVTKSB7CiAgICAgICAgICBsZWFkaW5nX3plcm8gPSAxOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlYWRpbmdfemVybyA9IDA7CkBAIC01OSw3ICs2MCw3IEBACiAgICAgICB5ICAgICAgICAgICAgPSBtcF9jb3VudF9iaXRzKG51bSk7CiAgICAgICB5ICAgICAgICAgICAgPSB5ICsgKDggLSAoeSAmIDcpKTsKICAgICAgIHkgICAgICAgICAgICA9IHkgPj4gMzsKLQorICAgICAgaWYgKCgobXBfY250X2xzYihudW0pKzEpPT1tcF9jb3VudF9iaXRzKG51bSkpICYmICgobXBfY291bnRfYml0cyhudW0pJjcpPT0wKSkgLS15OwogICAgfQogCiAgICAvKiBub3cgc3RvcmUgaW5pdGlhbCBkYXRhICovCkBAIC02OSwxNiArNzAsMTYgQEAKICAgICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKXk7CiAgICB9IGVsc2UgaWYgKHkgPCAyNTYpIHsKICAgICAgICpvdXQrKyA9IDB4ODE7Ci0gICAgICAqb3V0KysgPSB5OworICAgICAgKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpeTsKICAgIH0gZWxzZSBpZiAoeSA8IDY1NTM2VUwpIHsKICAgICAgICpvdXQrKyA9IDB4ODI7Ci0gICAgICAqb3V0KysgPSAoeT4+OCkmMjU1OwotICAgICAgKm91dCsrID0geTsKKyAgICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSgoeT4+OCkmMjU1KTsKKyAgICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKXk7CiAgICB9IGVsc2UgaWYgKHkgPCAxNjc3NzIxNlVMKSB7CiAgICAgICAqb3V0KysgPSAweDgzOwotICAgICAgKm91dCsrID0gKHk+PjE2KSYyNTU7Ci0gICAgICAqb3V0KysgPSAoeT4+OCkmMjU1OwotICAgICAgKm91dCsrID0geTsKKyAgICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKSgoeT4+MTYpJjI1NSk7CisgICAgICAqb3V0KysgPSAodW5zaWduZWQgY2hhcikoKHk+PjgpJjI1NSk7CisgICAgICAqb3V0KysgPSAodW5zaWduZWQgY2hhcil5OwogICAgfSBlbHNlIHsKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKICAgIH0KQEAgLTg5LDMxICs5MCwzMiBAQAogICAgfQogCiAgICAvKiBpZiBpdCdzIG5vdCB6ZXJvIHN0b3JlIGl0IGFzIGJpZyBlbmRpYW4gKi8KLSAgIGlmIChtcF9jbXBfZChudW0sIDApID09IE1QX0dUKSB7CisgICBpZiAobXBfY21wX2QobnVtLCAwKSA9PSBMVENfTVBfR1QpIHsKICAgICAgIC8qIG5vdyBzdG9yZSB0aGUgbXBpbnQgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKG51bSwgb3V0KSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7CisgICAgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2JpbihudW0sIG91dCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgIH0KLSAgIH0gZWxzZSBpZiAobXBfaXN6ZXJvKG51bSkgIT0gTVBfWUVTKSB7Ci0gICAgICBtcF9pbnQgdG1wOworICAgfSBlbHNlIGlmIChtcF9pc3plcm8obnVtKSAhPSBMVENfTVBfWUVTKSB7CisgICAgICB2b2lkICp0bXA7CisgICAgICAgICAKICAgICAgIC8qIG5lZ2F0aXZlICovCi0gICAgICBpZiAobXBfaW5pdCgmdG1wKSAhPSBNUF9PS0FZKSB7CisgICAgICBpZiAobXBfaW5pdCgmdG1wKSAhPSBDUllQVF9PSykgewogICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKICAgICAgIH0KIAogICAgICAgLyogMl5yb3VuZHVwIGFuZCBzdWJ0cmFjdCAqLwogICAgICAgeSA9IG1wX2NvdW50X2JpdHMobnVtKTsKICAgICAgIHkgPSB5ICsgKDggLSAoeSAmIDcpKTsKLSAgICAgIGlmIChtcF8yZXhwdCgmdG1wLCB5KSAhPSBNUF9PS0FZIHx8IG1wX2FkZCgmdG1wLCBudW0sICZ0bXApICE9IE1QX09LQVkpIHsKLSAgICAgICAgIG1wX2NsZWFyKCZ0bXApOworICAgICAgaWYgKCgobXBfY250X2xzYihudW0pKzEpPT1tcF9jb3VudF9iaXRzKG51bSkpICYmICgobXBfY291bnRfYml0cyhudW0pJjcpPT0wKSkgeSAtPSA4OworICAgICAgaWYgKG1wXzJleHB0KHRtcCwgeSkgIT0gQ1JZUFRfT0sgfHwgbXBfYWRkKHRtcCwgbnVtLCB0bXApICE9IENSWVBUX09LKSB7CisgICAgICAgICBtcF9jbGVhcih0bXApOwogICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKICAgICAgIH0KLQotICAgICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4oJnRtcCwgb3V0KSkgIT0gTVBfT0tBWSkgewotICAgICAgICAgbXBfY2xlYXIoJnRtcCk7Ci0gICAgICAgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOworICAgICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4odG1wLCBvdXQpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgbXBfY2xlYXIodG1wKTsKKyAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICB9Ci0gICAgICBtcF9jbGVhcigmdG1wKTsKKyAgICAgIG1wX2NsZWFyKHRtcCk7CiAgICB9CiAKICAgIC8qIHdlIGdvb2QgKi8KQEAgLTEyNCw1ICsxMjYsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjEgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMTYgMTU6MDg6MTEgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLmMgYi9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIuYwppbmRleCAxYmZlZTQ1Li5iY2MzMzFkIDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTksMTEgKzE5LDExIEBACiAjaWZkZWYgTFRDX0RFUgogLyoqCiAgIEdldHMgbGVuZ3RoIG9mIERFUiBlbmNvZGluZyBvZiBudW0gCi0gIEBwYXJhbSBudW0gICAgVGhlIG1wX2ludCB0byBnZXQgdGhlIHNpemUgb2YgCisgIEBwYXJhbSBudW0gICAgVGhlIGludCB0byBnZXQgdGhlIHNpemUgb2YgCiAgIEBwYXJhbSBvdXRsZW4gW291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gaW50ZWdlcgogICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi1pbnQgZGVyX2xlbmd0aF9pbnRlZ2VyKG1wX2ludCAqbnVtLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCitpbnQgZGVyX2xlbmd0aF9pbnRlZ2VyKHZvaWQgKm51bSwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQogewogICAgdW5zaWduZWQgbG9uZyB6LCBsZW47CiAgICBpbnQgICAgICAgICAgIGxlYWRpbmdfemVybzsKQEAgLTMxLDExICszMSwxMSBAQAogICAgTFRDX0FSR0NISyhudW0gICAgICE9IE5VTEwpOwogICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOwogCi0gICBpZiAobXBfY21wX2QobnVtLCAwKSAhPSBNUF9MVCkgeworICAgaWYgKG1wX2NtcF9kKG51bSwgMCkgIT0gTFRDX01QX0xUKSB7CiAgICAgICAvKiBwb3NpdGl2ZSAqLwogCiAgICAgICAvKiB3ZSBvbmx5IG5lZWQgYSBsZWFkaW5nIHplcm8gaWYgdGhlIG1zYiBvZiB0aGUgZmlyc3QgYnl0ZSBpcyBvbmUgKi8KLSAgICAgIGlmICgobXBfY291bnRfYml0cyhudW0pICYgNykgPT0gMCB8fCBtcF9pc3plcm8obnVtKSA9PSBNUF9ZRVMpIHsKKyAgICAgIGlmICgobXBfY291bnRfYml0cyhudW0pICYgNykgPT0gMCB8fCBtcF9pc3plcm8obnVtKSA9PSBMVENfTVBfWUVTKSB7CiAgICAgICAgICBsZWFkaW5nX3plcm8gPSAxOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlYWRpbmdfemVybyA9IDA7CkBAIC00OSw2ICs0OSw3IEBACiAgICAgICBsZWFkaW5nX3plcm8gPSAwOwogICAgICAgeiA9IG1wX2NvdW50X2JpdHMobnVtKTsKICAgICAgIHogPSB6ICsgKDggLSAoeiAmIDcpKTsKKyAgICAgIGlmICgoKG1wX2NudF9sc2IobnVtKSsxKT09bXBfY291bnRfYml0cyhudW0pKSAmJiAoKG1wX2NvdW50X2JpdHMobnVtKSY3KT09MCkpIC0tejsKICAgICAgIGxlbiA9IHogPSB6ID4+IDM7CiAgICB9CiAKQEAgLTc3LDUgKzc4LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE2IDE1OjA4OjExICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzA0LzIyIDAxOjIyOjU1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLmMgYi9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllci5jCmluZGV4IGM2OWM5YTMuLjFmYTg3ZDggMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtNjcsMTQgKzY3LDggQEAKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKICAgIH0KIAotICAgLyogZGVjb2RlIHdvcmQxIGFuZCB3b3JkMiAqLwotICAgLS1sZW47Ci0gICB0ID0gaW5beCsrXTsKLSAgIHdvcmRzWzBdID0gdC80MDsKLSAgIHdvcmRzWzFdID0gdCU0MDsKLQotICAgLyogZGVjb2RlIHJlc3QgKi8KLSAgIHkgPSAyOworICAgLyogZGVjb2RlIHdvcmRzICovCisgICB5ID0gMDsKICAgIHQgPSAwOwogICAgd2hpbGUgKGxlbi0tKSB7CiAgICAgICAgdCA9ICh0IDw8IDcpIHwgKGluW3hdICYgMHg3Rik7CkBAIC04Myw3ICs3NywxMyBAQAogICAgICAgICAgICBpZiAoeSA+PSAqb3V0bGVuKSB7CiAgICAgICAgICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICAgICAgICAgIH0KLSAgICAgICAgICAgd29yZHNbeSsrXSA9IHQ7CisgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAgICB3b3Jkc1swXSA9IHQgLyA0MDsKKyAgICAgICAgIHdvcmRzWzFdID0gdCAlIDQwOworICAgICAgICAgeSA9IDI7CisgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB3b3Jkc1t5KytdID0gdDsKKyAgICAgIH0KICAgICAgICAgICAgdCAgICAgICAgICA9IDA7CiAgICAgICAgfQogICAgfQpAQCAtOTUsNSArOTUsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxODoyMyAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllci5jIGIvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYwppbmRleCAxNmViMTEyLi5iMzQzYWFhIDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllci5jCisrKyBiL3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI3LDcgKzI3LDcgQEAKIGludCBkZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCB1bnNpZ25lZCBsb25nICBud29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQogewotICAgdW5zaWduZWQgbG9uZyBpLCB4LCB5LCB6LCB0LCBtYXNrOworICAgdW5zaWduZWQgbG9uZyBpLCB4LCB5LCB6LCB0LCBtYXNrLCB3b3JkYnVmOwogICAgaW50ICAgICAgICAgICBlcnI7CiAKICAgIExUQ19BUkdDSEsod29yZHMgICE9IE5VTEwpOwpAQCAtMzksNTAgKzM5LDU0IEBACiAgICAgICByZXR1cm4gZXJyOwogICAgfQogICAgaWYgKHggPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0geDsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKICAgIC8qIGNvbXB1dGUgbGVuZ3RoIHRvIHN0b3JlIE9JRCBkYXRhICovCi0gICB6ID0gMTsKLSAgIGZvciAoeSA9IDI7IHkgPCBud29yZHM7IHkrKykgewotICAgICAgIHQgPSBkZXJfb2JqZWN0X2lkZW50aWZpZXJfYml0cyh3b3Jkc1t5XSk7Ci0gICAgICAgeiArPSB0LzcgKyAoKHQlNykgPyAxIDogMCk7CisgICB6ID0gMDsKKyAgIHdvcmRidWYgPSB3b3Jkc1swXSAqIDQwICsgd29yZHNbMV07CisgICBmb3IgKHkgPSAxOyB5IDwgbndvcmRzOyB5KyspIHsKKyAgICAgICB0ID0gZGVyX29iamVjdF9pZGVudGlmaWVyX2JpdHMod29yZGJ1Zik7CisgICAgICAgeiArPSB0LzcgKyAoKHQlNykgPyAxIDogMCkgKyAod29yZGJ1ZiA9PSAwID8gMSA6IDApOworICAgICAgIGlmICh5IDwgbndvcmRzIC0gMSkgeworICAgICAgICAgIHdvcmRidWYgPSB3b3Jkc1t5ICsgMV07CisgICAgICAgfQogICAgfQogCiAgICAvKiBzdG9yZSBoZWFkZXIgKyBsZW5ndGggKi8KICAgIHggPSAwOyAKICAgIG91dFt4KytdID0gMHgwNjsKICAgIGlmICh6IDwgMTI4KSB7Ci0gICAgICBvdXRbeCsrXSA9IHo7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKXo7CiAgICB9IGVsc2UgaWYgKHogPCAyNTYpIHsKICAgICAgIG91dFt4KytdID0gMHg4MTsKLSAgICAgIG91dFt4KytdID0gejsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpejsKICAgIH0gZWxzZSBpZiAoeiA8IDY1NTM2VUwpIHsKICAgICAgIG91dFt4KytdID0gMHg4MjsKLSAgICAgIG91dFt4KytdID0gKHo+PjgpJjI1NTsKLSAgICAgIG91dFt4KytdID0geiYyNTU7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoej4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKHomMjU1KTsKICAgIH0gZWxzZSB7CiAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CiAgICB9CiAKICAgIC8qIHN0b3JlIGZpcnN0IGJ5dGUgKi8KLSAgIG91dFt4KytdID0gd29yZHNbMF0gKiA0MCArIHdvcmRzWzFdOyAgIAotICAgCi0gICAgZm9yIChpID0gMjsgaSA8IG53b3JkczsgaSsrKSB7CisgICAgd29yZGJ1ZiA9IHdvcmRzWzBdICogNDAgKyB3b3Jkc1sxXTsgICAKKyAgICBmb3IgKGkgPSAxOyBpIDwgbndvcmRzOyBpKyspIHsKICAgICAgICAgLyogc3RvcmUgNyBiaXQgd29yZHMgaW4gbGl0dGxlIGVuZGlhbiAqLwotICAgICAgICB0ICAgID0gd29yZHNbaV0gJiAweEZGRkZGRkZGOworICAgICAgICB0ICAgID0gd29yZGJ1ZiAmIDB4RkZGRkZGRkY7CiAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgIHkgICAgPSB4OwogICAgICAgICAgICBtYXNrID0gMDsKICAgICAgICAgICAgd2hpbGUgKHQpIHsKLSAgICAgICAgICAgICAgIG91dFt4KytdID0gKHQgJiAweDdGKSB8IG1hc2s7CisgICAgICAgICAgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgodCAmIDB4N0YpIHwgbWFzayk7CiAgICAgICAgICAgICAgICB0ICAgID4+PSA3OwogICAgICAgICAgICAgICAgbWFzayAgfD0gMHg4MDsgIC8qIHVwcGVyIGJpdCBpcyBzZXQgb24gYWxsIGJ1dCB0aGUgbGFzdCBieXRlICovCiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyogbm93IHN3YXAgYnl0ZXMgeS4uLngtMSAqLwogICAgICAgICAgICB6ID0geCAtIDE7CiAgICAgICAgICAgIHdoaWxlICh5IDwgeikgewotICAgICAgICAgICAgICAgdCA9IG91dFt5XTsgb3V0W3ldID0gb3V0W3pdOyBvdXRbel0gPSB0OworICAgICAgICAgICAgICAgdCA9IG91dFt5XTsgb3V0W3ldID0gb3V0W3pdOyBvdXRbel0gPSAodW5zaWduZWQgY2hhcil0OwogICAgICAgICAgICAgICAgKyt5OyAKICAgICAgICAgICAgICAgIC0tejsKICAgICAgICAgICAgfQpAQCAtOTAsNiArOTQsMTAgQEAKICAgICAgICAgICAvKiB6ZXJvIHdvcmQgKi8KICAgICAgICAgICBvdXRbeCsrXSA9IDB4MDA7CiAgICAgICAgfQorICAgICAgIAorICAgICAgIGlmIChpIDwgbndvcmRzIC0gMSkgeworICAgICAgICAgIHdvcmRidWYgPSB3b3Jkc1tpICsgMV07CisgICAgICAgfQogICAgfQogCiAgICAqb3V0bGVuID0geDsKQEAgLTk5LDUgKzEwNyw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE2IDE1OjA4OjExICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLmMgYi9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5jCmluZGV4IGQwM2QxYTcuLmE0Y2Y1M2YgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMzksNyArMzksNyBAQAogKi8KIGludCBkZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCB1bnNpZ25lZCBsb25nIG53b3JkcywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQogewotICAgdW5zaWduZWQgbG9uZyB5LCB6LCB0OyAgIAorICAgdW5zaWduZWQgbG9uZyB5LCB6LCB0LCB3b3JkYnVmOyAgIAogCiAgICBMVENfQVJHQ0hLKHdvcmRzICAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOwpAQCAtNTAsMTYgKzUwLDIxIEBACiAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CiAgICB9CiAKLSAgIC8qIHdvcmQxID0gMCwxLDIgYW5kIHdvcmQyIDAuLjM5ICovCi0gICBpZiAod29yZHNbMF0gPiAyIHx8IHdvcmRzWzFdID4gMzkpIHsKKyAgIC8qIHdvcmQxID0gMCwxLDIsMyBhbmQgd29yZDIgMC4uMzkgKi8KKyAgIGlmICh3b3Jkc1swXSA+IDMgfHwgKHdvcmRzWzBdIDwgMiAmJiB3b3Jkc1sxXSA+IDM5KSkgewogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwogICAgfQogCi0gICAvKiBsZWFkaW5nIGJ5dGUgb2YgZmlyc3QgdHdvIHdvcmRzICovCi0gICB6ID0gMTsKLSAgIGZvciAoeSA9IDI7IHkgPCBud29yZHM7IHkrKykgewotICAgICAgIHQgPSBkZXJfb2JqZWN0X2lkZW50aWZpZXJfYml0cyh3b3Jkc1t5XSk7Ci0gICAgICAgeiArPSB0LzcgKyAoKHQlNykgPyAxIDogMCk7CisgICAvKiBsZWFkaW5nIHdvcmQgaXMgdGhlIGZpcnN0IHR3byAqLworICAgeiA9IDA7CisgICB3b3JkYnVmID0gd29yZHNbMF0gKiA0MCArIHdvcmRzWzFdOworICAgZm9yICh5ID0gMTsgeSA8IG53b3JkczsgeSsrKSB7CisgICAgICAgdCA9IGRlcl9vYmplY3RfaWRlbnRpZmllcl9iaXRzKHdvcmRidWYpOworICAgICAgIHogKz0gdC83ICsgKCh0JTcpID8gMSA6IDApICsgKHdvcmRidWYgPT0gMCA/IDEgOiAwKTsKKyAgICAgICBpZiAoeSA8IG53b3JkcyAtIDEpIHsKKyAgICAgICAgICAvKiBncmFiIG5leHQgd29yZCAqLworICAgICAgICAgIHdvcmRidWYgPSB3b3Jkc1t5KzFdOworICAgICAgIH0KICAgIH0KIAogICAgLyogbm93IGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG91ciBsZW5ndGggZW5jb2RpbmcgY2hhbmdlcyAqLwpAQCAtODAsNSArODUsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8xNiAyMDoxNzo0MiAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2RlY29kZV9vY3RldF9zdHJpbmcuYyBiL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZGVjb2RlX29jdGV0X3N0cmluZy5jCmluZGV4IDJkMzgwMGYuLmI5MzdlNjMgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZGVjb2RlX29jdGV0X3N0cmluZy5jCisrKyBiL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZGVjb2RlX29jdGV0X3N0cmluZy5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC02Niw2ICs2Niw3IEBACiAKICAgIC8qIGlzIGl0IHRvbyBsb25nPyAqLwogICAgaWYgKGxlbiA+ICpvdXRsZW4pIHsKKyAgICAgICpvdXRsZW4gPSBsZW47CiAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgfQogCkBAIC04Niw1ICs4Nyw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9kZWNvZGVfb2N0ZXRfc3RyaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8xNiAxNTowODoxMSAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2VuY29kZV9vY3RldF9zdHJpbmcuYyBiL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZW5jb2RlX29jdGV0X3N0cmluZy5jCmluZGV4IGYzNGI3MDguLmZlMGYxNjMgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZW5jb2RlX29jdGV0X3N0cmluZy5jCisrKyBiL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZW5jb2RlX29jdGV0X3N0cmluZy5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC00Myw2ICs0Myw3IEBACiAKICAgIC8qIHRvbyBiaWc/ICovCiAgICBpZiAobGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGxlbjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKQEAgLTUwLDE5ICs1MSwxOSBAQAogICAgeCA9IDA7CiAgICBvdXRbeCsrXSA9IDB4MDQ7CiAgICBpZiAoaW5sZW4gPCAxMjgpIHsKLSAgICAgIG91dFt4KytdID0gaW5sZW47CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKWlubGVuOwogICAgfSBlbHNlIGlmIChpbmxlbiA8IDI1NikgewogICAgICAgb3V0W3grK10gPSAweDgxOwotICAgICAgb3V0W3grK10gPSBpbmxlbjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpaW5sZW47CiAgICB9IGVsc2UgaWYgKGlubGVuIDwgNjU1MzZVTCkgewogICAgICAgb3V0W3grK10gPSAweDgyOwotICAgICAgb3V0W3grK10gPSAoaW5sZW4+PjgpJjI1NTsKLSAgICAgIG91dFt4KytdID0gaW5sZW4mMjU1OworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKGlubGVuPj44KSYyNTUpOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoaW5sZW4mMjU1KTsKICAgIH0gZWxzZSBpZiAoaW5sZW4gPCAxNjc3NzIxNlVMKSB7CiAgICAgICBvdXRbeCsrXSA9IDB4ODM7Ci0gICAgICBvdXRbeCsrXSA9IChpbmxlbj4+MTYpJjI1NTsKLSAgICAgIG91dFt4KytdID0gKGlubGVuPj44KSYyNTU7Ci0gICAgICBvdXRbeCsrXSA9IGlubGVuJjI1NTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+MTYpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5sZW4+PjgpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKShpbmxlbiYyNTUpOwogICAgfSBlbHNlIHsKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKICAgIH0KQEAgLTgxLDUgKzgyLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2VuY29kZV9vY3RldF9zdHJpbmcuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE2IDE1OjA4OjExICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfbGVuZ3RoX29jdGV0X3N0cmluZy5jIGIvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nLmMKaW5kZXggOWEwYmVkMy4uM2NhZjM1MiAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTQ5LDUgKzQ5LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE2IDE1OjA4OjExICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZy5jIGIvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMKaW5kZXggY2JjOTIzOS4uY2FlOTZkOCAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTY3LDYgKzY3LDcgQEAKIAogICAgLyogaXMgaXQgdG9vIGxvbmc/ICovCiAgICBpZiAobGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGxlbjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKQEAgLTkxLDUgKzkyLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIxIDAyOjI5OjU0ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5jIGIvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nLmMKaW5kZXggYWI0ZThiZi4uOTA2MWIxZiAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTQyLDYgKzQyLDcgQEAKIAogICAgLyogdG9vIGJpZz8gKi8KICAgIGlmIChsZW4gPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOwogICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKICAgIH0KIApAQCAtNDksMTkgKzUwLDE5IEBACiAgICB4ID0gMDsKICAgIG91dFt4KytdID0gMHgxMzsKICAgIGlmIChpbmxlbiA8IDEyOCkgewotICAgICAgb3V0W3grK10gPSBpbmxlbjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpaW5sZW47CiAgICB9IGVsc2UgaWYgKGlubGVuIDwgMjU2KSB7CiAgICAgICBvdXRbeCsrXSA9IDB4ODE7Ci0gICAgICBvdXRbeCsrXSA9IGlubGVuOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcilpbmxlbjsKICAgIH0gZWxzZSBpZiAoaW5sZW4gPCA2NTUzNlVMKSB7CiAgICAgICBvdXRbeCsrXSA9IDB4ODI7Ci0gICAgICBvdXRbeCsrXSA9IChpbmxlbj4+OCkmMjU1OwotICAgICAgb3V0W3grK10gPSBpbmxlbiYyNTU7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5sZW4+PjgpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKShpbmxlbiYyNTUpOwogICAgfSBlbHNlIGlmIChpbmxlbiA8IDE2Nzc3MjE2VUwpIHsKICAgICAgIG91dFt4KytdID0gMHg4MzsKLSAgICAgIG91dFt4KytdID0gKGlubGVuPj4xNikmMjU1OwotICAgICAgb3V0W3grK10gPSAoaW5sZW4+PjgpJjI1NTsKLSAgICAgIG91dFt4KytdID0gaW5sZW4mMjU1OworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKGlubGVuPj4xNikmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKGlubGVuJjI1NSk7CiAgICB9IGVsc2UgewogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwogICAgfQpAQCAtODAsNSArODEsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjEgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMjEgMDI6Mjk6NTQgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nLmMgYi9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcuYwppbmRleCAzNDA2NWYyLi43OTliNmI2IDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTYyLDUgKzE2Miw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMSAwMjoyOTo1NCAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZS5jIGIvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXguYwpzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZS5jCnJlbmFtZSB0byBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5jCmluZGV4IDMzNWE4ODIuLjFmNjU2MDIgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXguYwpAQCAtNiwxNCArNiwxNCBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAKIC8qKgotICBAZmlsZSBkZXJfZGVjb2RlX3NlcXVlbmNlLmMKKyAgQGZpbGUgZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5jCiAgIEFTTi4xIERFUiwgZGVjb2RlIGEgU0VRVUVOQ0UsIFRvbSBTdCBEZW5pcwogKi8KIApAQCAtMjUsMTAgKzI1LDExIEBACiAgICBAcGFyYW0gaW5sZW4gICAgVGhlIHNpemUgb2YgdGhlIGlucHV0CiAgICBAcGFyYW0gbGlzdCAgICAgVGhlIGxpc3Qgb2YgaXRlbXMgdG8gZGVjb2RlCiAgICBAcGFyYW0gb3V0bGVuICAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdAorICAgQHBhcmFtIG9yZGVyZWQgIFNlYXJjaCBhbiB1bm9yZGVkZWQgb3Igb3JkZXJlZCBsaXN0CiAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKICovCi1pbnQgZGVyX2RlY29kZV9zZXF1ZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgIG91dGxlbikKK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlX2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hc24xX2xpc3QgKmxpc3QsICAgICB1bnNpZ25lZCBsb25nICBvdXRsZW4sIGludCBvcmRlcmVkKQogewogICAgaW50ICAgICAgICAgICBlcnIsIHR5cGU7CiAgICB1bnNpZ25lZCBsb25nIHNpemUsIHgsIHksIHosIGksIGJsa3NpemU7CkBAIC0zNiwxNyArMzcsMTggQEAKIAogICAgTFRDX0FSR0NISyhpbiAgICE9IE5VTEwpOwogICAgTFRDX0FSR0NISyhsaXN0ICE9IE5VTEwpOwotCisgICAKICAgIC8qIGdldCBibGsgc2l6ZSAqLwogICAgaWYgKGlubGVuIDwgMikgewogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOwogICAgfQogCi0gICAvKiBzZXF1ZW5jZSB0eXBlPyAqLworICAgLyogc2VxdWVuY2UgdHlwZT8gV2UgYWxsb3cgMHgzMCBTRVFVRU5DRSBhbmQgMHgzMSBTRVQgc2luY2UgZnVuZGFtZW50YWxseSB0aGV5J3JlIHRoZSBzYW1lIHN0cnVjdHVyZSAqLwogICAgeCA9IDA7Ci0gICBpZiAoaW5beCsrXSAhPSAweDMwKSB7CisgICBpZiAoaW5beF0gIT0gMHgzMCAmJiBpblt4XSAhPSAweDMxKSB7CiAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CiAgICB9CisgICArK3g7CiAKICAgIGlmIChpblt4XSA8IDEyOCkgewogICAgICAgYmxrc2l6ZSA9IGluW3grK107CkBAIC03MywxNTQgKzc1LDIwNSBAQAogICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CiAgIH0KIAorICAgLyogbWFyayBhbGwgYXMgdW51c2VkICovCisgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpKyspIHsKKyAgICAgICBsaXN0W2ldLnVzZWQgPSAwOworICAgfSAgICAgCisKICAgLyogb2sgcmVhZCBkYXRhICovCiAgICBpbmxlbiA9IGJsa3NpemU7CiAgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpKyspIHsKKyAgICAgICB6ICAgID0gMDsKICAgICAgICB0eXBlID0gbGlzdFtpXS50eXBlOwogICAgICAgIHNpemUgPSBsaXN0W2ldLnNpemU7CiAgICAgICAgZGF0YSA9IGxpc3RbaV0uZGF0YTsKKyAgICAgICBpZiAoIW9yZGVyZWQgJiYgbGlzdFtpXS51c2VkID09IDEpIHsgY29udGludWU7IH0KIAogICAgICAgIGlmICh0eXBlID09IExUQ19BU04xX0VPTCkgeyAKICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CT09MRUFOOgorICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2Jvb2xlYW4oaW4gKyB4LCB6LCAoKGludCAqKWRhdGEpKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYm9vbGVhbigmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgogICAgICAgICAgICAgICAgeiA9IGlubGVuOwogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2ludGVnZXIoaW4gKyB4LCB6LCBkYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyAgY29udGludWU7IH0KICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9pbnRlZ2VyKGRhdGEsICZ6KSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIHggICAgICs9IHo7Ci0gICAgICAgICAgICAgICBpbmxlbiAtPSB6OwogICAgICAgICAgICAgICAgYnJlYWs7CiAKLQogICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CiAgICAgICAgICAgICAgICB6ID0gaW5sZW47CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihpbiArIHgsIHosIGRhdGEpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKCFvcmRlcmVkKSB7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfc2hvcnRfaW50ZWdlcihzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfc2hvcnRfaW50ZWdlcigoKHVuc2lnbmVkIGxvbmcqKWRhdGEpWzBdLCAmeikpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB4ICAgICArPSB6OwotICAgICAgICAgICAgICAgaW5sZW4gLT0gejsKKyAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOgogICAgICAgICAgICAgICAgeiA9IGlubGVuOwogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2JpdF9zdHJpbmcoaW4gKyB4LCB6LCBkYXRhLCAmc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3RbaV0uc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYml0X3N0cmluZyhzaXplLCAmeikpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB4ICAgICArPSB6OwotICAgICAgICAgICAgICAgaW5sZW4gLT0gejsKICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0NURVRfU1RSSU5HOgogICAgICAgICAgICAgICAgeiA9IGlubGVuOwogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX29jdGV0X3N0cmluZyhpbiArIHgsIHosIGRhdGEsICZzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdFtpXS5zaXplID0gc2l6ZTsKICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcoc2l6ZSwgJnopKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgeCAgICAgKz0gejsKLSAgICAgICAgICAgICAgIGlubGVuIC09IHo7CiAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICBjYXNlIExUQ19BU04xX05VTEw6CiAgICAgICAgICAgICAgICBpZiAoaW5sZW4gPCAyIHx8IGluW3hdICE9IDB4MDUgfHwgaW5beCsxXSAhPSAweDAwKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KICAgICAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOwogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgeCAgICAgKz0gMjsKLSAgICAgICAgICAgICAgIGlubGVuIC09IDI7CisgICAgICAgICAgICAgICB6ID0gMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CiAgICAgICAgICAgICAgICB6ID0gaW5sZW47CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIoaW4gKyB4LCB6LCBkYXRhLCAmc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpc3RbaV0uc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIoZGF0YSwgc2l6ZSwgJnopKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgeCAgICAgKz0gejsKLSAgICAgICAgICAgICAgIGlubGVuIC09IHo7CiAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6CiAgICAgICAgICAgICAgICB6ID0gaW5sZW47CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfaWE1X3N0cmluZyhpbiArIHgsIHosIGRhdGEsICZzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdFtpXS5zaXplID0gc2l6ZTsKICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9pYTVfc3RyaW5nKGRhdGEsIHNpemUsICZ6KSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIHggICAgICs9IHo7Ci0gICAgICAgICAgICAgICBpbmxlbiAtPSB6OwogICAgICAgICAgICAgICAgYnJlYWs7CiAKIAogICAgICAgICAgICBjYXNlIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkc6CiAgICAgICAgICAgICAgICB6ID0gaW5sZW47CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZyhpbiArIHgsIHosIGRhdGEsICZzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGlzdFtpXS5zaXplID0gc2l6ZTsKICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nKGRhdGEsIHNpemUsICZ6KSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIHggICAgICs9IHo7Ci0gICAgICAgICAgICAgICBpbmxlbiAtPSB6OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgICAgIHogPSBpbmxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV91dGY4X3N0cmluZyhpbiArIHgsIHosIGRhdGEsICZzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQorICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgbGlzdFtpXS5zaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGY4X3N0cmluZyhkYXRhLCBzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CiAgICAgICAgICAgICAgICB6ID0gaW5sZW47CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfdXRjdGltZShpbiArIHgsICZ6LCBkYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgeCAgICAgKz0gejsKLSAgICAgICAgICAgICAgIGlubGVuIC09IHo7CiAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFUVVFTkNFOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKICAgICAgICAgICAgICAgIHogPSBpbmxlbjsKLSAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZShpbiArIHgsIHosIGRhdGEsIHNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NldChpbiArIHgsIHosIGRhdGEsIHNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKCFvcmRlcmVkKSB7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfc2VxdWVuY2UoZGF0YSwgc2l6ZSwgJnopKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgeCAgICAgKz0gejsKLSAgICAgICAgICAgICAgIGlubGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgICAgICAvKiBkZXRlY3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgdHlwZSAqLworICAgICAgICAgICAgICAgaWYgKCh0eXBlID09IExUQ19BU04xX1NFVE9GICYmIChpblt4XSAmIDB4M0YpICE9IDB4MzEpIHx8ICh0eXBlID09IExUQ19BU04xX1NFUVVFTkNFICYmIChpblt4XSAmIDB4M0YpICE9IDB4MzApKSB7CisgICAgICAgICAgICAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKGluICsgeCwgeiwgZGF0YSwgc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zZXF1ZW5jZShkYXRhLCBzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKIAogCiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQ0hPSUNFOgogICAgICAgICAgICAgICAgeiA9IGlubGVuOwogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2Nob2ljZShpbiArIHgsICZ6LCBkYXRhLCBzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgeCAgICAgKz0gejsKLSAgICAgICAgICAgICAgIGlubGVuIC09IHo7CiAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9BUkc7CiAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICAgfQorICAgICAgIHggICAgICAgICAgICs9IHo7CisgICAgICAgaW5sZW4gICAgICAgLT0gejsKKyAgICAgICBsaXN0W2ldLnVzZWQgPSAxOworICAgICAgIGlmICghb3JkZXJlZCkgeyAKKyAgICAgICAgICAvKiByZXN0YXJ0IHRoZSBkZWNvZGVyICovCisgICAgICAgICAgaSA9IC0xOworICAgICAgIH0gICAgICAgICAgCiAgICB9CisgICAgIAorICAgZm9yIChpID0gMDsgaSA8IG91dGxlbjsgaSsrKSB7CisgICAgICBpZiAobGlzdFtpXS51c2VkID09IDApIHsKKyAgICAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICB9ICAgICAgICAgICAgICAgIAogICAgZXJyID0gQ1JZUFRfT0s7ICAgCiAKIExCTF9FUlI6CkBAIC0yMjksNiArMjgyLDYgQEAKICAKICNlbmRpZgogCi0vKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjggJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTggMTk6MjA6MjMgJCAqLworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZXguYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yNiAwMjoyNToxOCAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aS5jIGIvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQ4Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkuYwpAQCAtMCwwICsxLDM4NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aS5jCisgIEFTTi4xIERFUiwgZGVjb2RlIGFuIGFycmF5IG9mIEFTTi4xIHR5cGVzIHdpdGggYSBmbGV4aSBwYXJzZXIsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmV0Y2hfbGVuZ3RoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4LCB5LCB6OworCisgICB5ID0gMDsKKworICAgLyogc2tpcCB0eXBlIGFuZCByZWFkIGxlbiAqLworICAgaWYgKGlubGVuIDwgMikgeworICAgICAgcmV0dXJuIDB4RkZGRkZGRkY7CisgICB9CisgICArK2luOyArK3k7CisgICAKKyAgIC8qIHJlYWQgbGVuICovCisgICB4ID0gKmluKys7ICsreTsKKyAgIAorICAgLyogPDEyOCBtZWFucyBsaXRlcmFsICovCisgICBpZiAoeCA8IDEyOCkgeworICAgICAgcmV0dXJuIHgreTsKKyAgIH0KKyAgIHggICAgICY9IDB4N0Y7IC8qIHRoZSBsb3dlciA3IGJpdHMgYXJlIHRoZSBsZW5ndGggb2YgdGhlIGxlbmd0aCAqLworICAgaW5sZW4gLT0gMjsKKyAgIAorICAgLyogbGVuIG1lYW5zIGxlbiBvZiBsZW4hICovCisgICBpZiAoeCA9PSAwIHx8IHggPiA0IHx8IHggPiBpbmxlbikgeworICAgICAgcmV0dXJuIDB4RkZGRkZGRkY7CisgICB9CisgICAKKyAgIHkgKz0geDsKKyAgIHogPSAwOworICAgd2hpbGUgKHgtLSkgeyAgIAorICAgICAgeiA9ICh6PDw4KSB8ICgodW5zaWduZWQgbG9uZykqaW4pOworICAgICAgKytpbjsKKyAgIH0KKyAgIHJldHVybiB6K3k7Cit9CisKKy8qKiAKKyAgIEFTTi4xIERFUiBGbGV4aShibGUpIGRlY29kZXIgd2lsbCBkZWNvZGUgYXJiaXRyYXJ5IERFUiBwYWNrZXRzIGFuZCBjcmVhdGUgYSBsaW5rZWQgbGlzdCBvZiB0aGUgZGVjb2RlZCBlbGVtZW50cy4KKyAgIEBwYXJhbSBpbiAgICAgIFRoZSBpbnB1dCBidWZmZXIKKyAgIEBwYXJhbSBpbmxlbiAgIFtpbi9vdXRdIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJ1ZmZlciBhbmQgb24gb3V0cHV0IHRoZSBhbW91bnQgb2YgZGVjb2RlZCBkYXRhIAorICAgQHBhcmFtIG91dCAgICAgW291dF0gQSBwb2ludGVyIHRvIHRoZSBsaW5rZWQgbGlzdAorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzLgorKi8gICAKK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nICppbmxlbiwgbHRjX2FzbjFfbGlzdCAqKm91dCkKK3sKKyAgIGx0Y19hc24xX2xpc3QgKmw7CisgICB1bnNpZ25lZCBsb25nIGVyciwgdHlwZSwgbGVuLCB0b3RsZW4sIHgsIHk7CisgICB2b2lkICAgICAgICAgICpyZWFsbG9jX3RtcDsKKyAgIAorICAgTFRDX0FSR0NISyhpbiAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW5sZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICE9IE5VTEwpOworCisgICBsID0gTlVMTDsKKyAgIHRvdGxlbiA9IDA7CisgICAKKyAgIC8qIHNjYW4gdGhlIGlucHV0IGFuZCBhbmQgZ2V0IGxlbmd0aHMgYW5kIHdoYXQgbm90ICovCisgICB3aGlsZSAoKmlubGVuKSB7ICAgICAKKyAgICAgIC8qIHJlYWQgdGhlIHR5cGUgYnl0ZSAqLworICAgICAgdHlwZSA9ICppbjsKKworICAgICAgLyogZmV0Y2ggbGVuZ3RoICovCisgICAgICBsZW4gPSBmZXRjaF9sZW5ndGgoaW4sICppbmxlbik7CisgICAgICBpZiAobGVuID4gKmlubGVuKSB7CisgICAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisKKyAgICAgIC8qIGFsbG9jIG5ldyBsaW5rICovCisgICAgICBpZiAobCA9PSBOVUxMKSB7CisgICAgICAgICBsID0gWENBTExPQygxLCBzaXplb2YoKmwpKTsKKyAgICAgICAgIGlmIChsID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgbC0+bmV4dCA9IFhDQUxMT0MoMSwgc2l6ZW9mKCpsKSk7CisgICAgICAgICBpZiAobC0+bmV4dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgfQorICAgICAgICAgbC0+bmV4dC0+cHJldiA9IGw7CisgICAgICAgICBsID0gbC0+bmV4dDsKKyAgICAgIH0KKworICAgICAgLyogbm93IHN3aXRjaCBvbiB0eXBlICovCisgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgIGNhc2UgMHgwMTogLyogQk9PTEVBTiAqLworICAgICAgICAgICAgbC0+dHlwZSA9IExUQ19BU04xX0JPT0xFQU47CisgICAgICAgICAgICBsLT5zaXplID0gMTsKKyAgICAgICAgICAgIGwtPmRhdGEgPSBYQ0FMTE9DKDEsIHNpemVvZihpbnQpKTsKKyAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9ib29sZWFuKGluLCAqaW5sZW4sIGwtPmRhdGEpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYm9vbGVhbigmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgY2FzZSAweDAyOiAvKiBJTlRFR0VSICovCisgICAgICAgICAgICAgLyogaW5pdCBmaWVsZCAqLworICAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9JTlRFR0VSOworICAgICAgICAgICAgIGwtPnNpemUgPSAxOworICAgICAgICAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmbC0+ZGF0YSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIAorICAgICAgICAgICAgIC8qIGRlY29kZSBmaWVsZCAqLworICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9pbnRlZ2VyKGluLCAqaW5sZW4sIGwtPmRhdGEpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBjYWxjIGxlbmd0aCBvZiBvYmplY3QgKi8KKyAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfaW50ZWdlcihsLT5kYXRhLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMHgwMzogLyogQklUICovCisgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfQklUX1NUUklORzsKKyAgICAgICAgICAgIGwtPnNpemUgPSBsZW4gKiA4OyAvKiAqOCBiZWNhdXNlIHdlIHN0b3JlIGRlY29kZWQgYml0cyBvbmUgcGVyIGNoYXIgYW5kIHRoZXkgYXJlIGVuY29kZWQgOCBwZXIgY2hhci4gICovCisKKyAgICAgICAgICAgIGlmICgobC0+ZGF0YSA9IFhDQUxMT0MoMSwgbC0+c2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9iaXRfc3RyaW5nKGluLCAqaW5sZW4sIGwtPmRhdGEsICZsLT5zaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9iaXRfc3RyaW5nKGwtPnNpemUsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBjYXNlIDB4MDQ6IC8qIE9DVEVUICovCisKKyAgICAgICAgICAgIC8qIGluaXQgZmllbGQgKi8KKyAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9PQ1RFVF9TVFJJTkc7CisgICAgICAgICAgICBsLT5zaXplID0gbGVuOworCisgICAgICAgICAgICBpZiAoKGwtPmRhdGEgPSBYQ0FMTE9DKDEsIGwtPnNpemUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfb2N0ZXRfc3RyaW5nKGluLCAqaW5sZW4sIGwtPmRhdGEsICZsLT5zaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcobC0+c2l6ZSwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMHgwNTogLyogTlVMTCAqLworICAgICAgICAgCisgICAgICAgICAgICAvKiB2YWxpZCBOVUxMIGlzIDB4MDUgMHgwMCAqLworICAgICAgICAgICAgaWYgKGluWzBdICE9IDB4MDUgfHwgaW5bMV0gIT0gMHgwMCkgeworICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBzaW1wbGUgdG8gc3RvcmUgOy0pICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfTlVMTDsKKyAgICAgICAgICAgIGwtPmRhdGEgPSBOVUxMOworICAgICAgICAgICAgbC0+c2l6ZSA9IDA7CisgICAgICAgICAgICBsZW4gICAgID0gMjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAKKyAgICAgICAgIGNhc2UgMHgwNjogLyogT0lEICovCisgICAgICAgICAKKyAgICAgICAgICAgIC8qIGluaXQgZmllbGQgKi8KKyAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUjsKKyAgICAgICAgICAgIGwtPnNpemUgPSBsZW47CisKKyAgICAgICAgICAgIGlmICgobC0+ZGF0YSA9IFhDQUxMT0MobGVuLCBzaXplb2YodW5zaWduZWQgbG9uZykpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIoaW4sICppbmxlbiwgbC0+ZGF0YSwgJmwtPnNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyKGwtPmRhdGEsIGwtPnNpemUsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogcmVzaXplIGl0IHRvIHNhdmUgYSBidW5jaCBvZiBtZW0gKi8KKyAgICAgICAgICAgIGlmICgocmVhbGxvY190bXAgPSBYUkVBTExPQyhsLT5kYXRhLCBsLT5zaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgLyogb3V0IG9mIGhlYXAgYnV0IHRoaXMgaXMgbm90IGFuIGVycm9yICovCisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGwtPmRhdGEgPSByZWFsbG9jX3RtcDsKKyAgICAgICAgICAgIGJyZWFrOworICAKKyAgICAgICAgIGNhc2UgMHgwQzogLyogVVRGOCAqLworICAgICAgICAgCisgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfVVRGOF9TVFJJTkc7CisgICAgICAgICAgICBsLT5zaXplID0gbGVuOworCisgICAgICAgICAgICBpZiAoKGwtPmRhdGEgPSBYQ0FMTE9DKHNpemVvZih3Y2hhcl90KSwgbC0+c2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV91dGY4X3N0cmluZyhpbiwgKmlubGVuLCBsLT5kYXRhLCAmbC0+c2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfdXRmOF9zdHJpbmcobC0+ZGF0YSwgbC0+c2l6ZSwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMHgxMzogLyogUFJJTlRBQkxFICovCisgICAgICAgICAKKyAgICAgICAgICAgIC8qIGluaXQgZmllbGQgKi8KKyAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOworICAgICAgICAgICAgbC0+c2l6ZSA9IGxlbjsKKworICAgICAgICAgICAgaWYgKChsLT5kYXRhID0gWENBTExPQygxLCBsLT5zaXplKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcoaW4sICppbmxlbiwgbC0+ZGF0YSwgJmwtPnNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcobC0+ZGF0YSwgbC0+c2l6ZSwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAKKyAgICAgICAgIGNhc2UgMHgxNjogLyogSUE1ICovCisgICAgICAgICAKKyAgICAgICAgICAgIC8qIGluaXQgZmllbGQgKi8KKyAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9JQTVfU1RSSU5HOworICAgICAgICAgICAgbC0+c2l6ZSA9IGxlbjsKKworICAgICAgICAgICAgaWYgKChsLT5kYXRhID0gWENBTExPQygxLCBsLT5zaXplKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2lhNV9zdHJpbmcoaW4sICppbmxlbiwgbC0+ZGF0YSwgJmwtPnNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2lhNV9zdHJpbmcobC0+ZGF0YSwgbC0+c2l6ZSwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAKKyAgICAgICAgIGNhc2UgMHgxNzogLyogVVRDIFRJTUUgKi8KKyAgICAgICAgIAorICAgICAgICAgICAgLyogaW5pdCBmaWVsZCAqLworICAgICAgICAgICAgbC0+dHlwZSA9IExUQ19BU04xX1VUQ1RJTUU7CisgICAgICAgICAgICBsLT5zaXplID0gMTsKKworICAgICAgICAgICAgaWYgKChsLT5kYXRhID0gWENBTExPQygxLCBzaXplb2YobHRjX3V0Y3RpbWUpKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVuID0gKmlubGVuOworICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3V0Y3RpbWUoaW4sICZsZW4sIGwtPmRhdGEpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3V0Y3RpbWUobC0+ZGF0YSwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAKKyAgICAgICAgIGNhc2UgMHgzMDogLyogU0VRVUVOQ0UgKi8KKyAgICAgICAgIGNhc2UgMHgzMTogLyogU0VUICovCisgICAgICAgICAKKyAgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICAgbC0+dHlwZSA9ICh0eXBlID09IDB4MzApID8gTFRDX0FTTjFfU0VRVUVOQ0UgOiBMVENfQVNOMV9TRVQ7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogd2UgaGF2ZSB0byBkZWNvZGUgdGhlIFNFUVVFTkNFIGhlYWRlciBhbmQgZ2V0IGl0J3MgbGVuZ3RoICovCisgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogbW92ZSBwYXN0IHR5cGUgKi8KKyAgICAgICAgICAgICAgICArK2luOyAtLSgqaW5sZW4pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIHJlYWQgbGVuZ3RoIGJ5dGUgKi8KKyAgICAgICAgICAgICAgICB4ID0gKmluKys7IC0tKCppbmxlbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyogc21hbGxlc3QgU0VRVUVOQ0UvU0VUIGhlYWRlciAqLworICAgICAgICAgICAgICAgIHkgPSAyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIG5vdyBpZiBpdCdzID4gMTI3IHRoZSBuZXh0IGJ5dGVzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICBpZiAoeCA+IDEyOCkgeworICAgICAgICAgICAgICAgICAgIHggICAgICAmPSAweDdGOworICAgICAgICAgICAgICAgICAgIGluICAgICArPSB4OworICAgICAgICAgICAgICAgICAgICppbmxlbiAtPSB4OworICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBzZXF1ZW5jZSBoZWFkZXIgbGVuICovCisgICAgICAgICAgICAgICAgICAgeSAgICAgICs9IHg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIAorICAgICAgICAgICAgIC8qIFNlcXVlbmNlIGVsZW1lbnRzIGdvIGFzIGNoaWxkICovCisgICAgICAgICAgICAgbGVuID0gbGVuIC0geTsKKyAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkoaW4sICZsZW4sICYobC0+Y2hpbGQpKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBsZW4gdXBkYXRlICovCisgICAgICAgICAgICAgdG90bGVuICs9IHk7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogbGluayB0aGVtIHVwIHkwICovCisgICAgICAgICAgICAgbC0+Y2hpbGQtPnBhcmVudCA9IGw7CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAvKiBpbnZhbGlkIGJ5dGUgLi4uIHRoaXMgaXMgYSBzb2Z0IGVycm9yICovCisgICAgICAgICAgIC8qIHJlbW92ZSBsaW5rICovCisgICAgICAgICAgIGwgICAgICAgPSBsLT5wcmV2OworICAgICAgICAgICBYRlJFRShsLT5uZXh0KTsKKyAgICAgICAgICAgbC0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgIGdvdG8gb3V0c2lkZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogYWR2YW5jZSBwb2ludGVycyAqLworICAgICAgdG90bGVuICArPSBsZW47CisgICAgICBpbiAgICAgICs9IGxlbjsKKyAgICAgICppbmxlbiAgLT0gbGVuOworICAgfQorICAgCitvdXRzaWRlOiAgIAorCisgICAvKiByZXdpbmQgbCBwbGVhc2UgKi8KKyAgIHdoaWxlIChsLT5wcmV2ICE9IE5VTEwgfHwgbC0+cGFyZW50ICE9IE5VTEwpIHsKKyAgICAgIGlmIChsLT5wYXJlbnQgIT0gTlVMTCkgeworICAgICAgICAgbCA9IGwtPnBhcmVudDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBsID0gbC0+cHJldjsKKyAgICAgIH0KKyAgIH0KKyAgIAorICAgLyogcmV0dXJuICovCisgICAqb3V0ICAgPSBsOworICAgKmlubGVuID0gdG90bGVuOworICAgcmV0dXJuIENSWVBUX09LOworCitlcnJvcjoKKyAgIC8qIGZyZWUgbGlzdCAqLworICAgZGVyX3NlcXVlbmNlX2ZyZWUobCk7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDI6MjU6MTggJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkuYyBiL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLmMKaW5kZXggYTRhMTAzOC4uYTE1YzE4MiAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMTksNiArMTksMTMgQEAKIAogI2lmZGVmIExUQ19ERVIKIAorLyoqCisgIERlY29kZSBhIFNFUVVFTkNFIHR5cGUgdXNpbmcgYSBWQSBsaXN0CisgIEBwYXJhbSBpbiAgICBJbnB1dCBidWZmZXIKKyAgQHBhcmFtIGlubGVuIExlbmd0aCBvZiBpbnB1dCBpbiBvY3RldHMKKyAgQHJlbWFyayA8Li4uPiBpcyBvZiB0aGUgZm9ybSA8dHlwZSwgc2l6ZSwgZGF0YT4gKGludCwgdW5zaWduZWQgbG9uZywgdm9pZCopCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8gIAogaW50IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIC4uLikKIHsKICAgIGludCAgICAgICAgICAgZXJyLCB0eXBlOwpAQCAtNDIsNiArNDksNyBAQAogICAgICAgIH0KIAogICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TSE9SVF9JTlRFR0VSOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX0JJVF9TVFJJTkc6CkBAIC01MCw3ICs1OCwxMCBAQAogICAgICAgICAgICBjYXNlIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVENUSU1FOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9DSE9JQ0U6CiAgICAgICAgICAgICAgICAgKyt4OyAKQEAgLTg2LDYgKzk3LDcgQEAKICAgICAgICB9CiAKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CT09MRUFOOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX0lOVEVHRVI6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0hPUlRfSU5URUdFUjoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOgpAQCAtOTQsOCArMTA2LDExIEBACiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSUE1X1NUUklORzoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1VURjhfU1RSSU5HOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVE9GOiAgICAgICAgICAKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9DSE9JQ0U6CiAgICAgICAgICAgICAgICAgbGlzdFt4XS50eXBlICAgPSB0eXBlOwogICAgICAgICAgICAgICAgIGxpc3RbeF0uc2l6ZSAgID0gc2l6ZTsKQEAgLTEyMCw1ICsxMzUsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOCAxOToyMDoyMyAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDI6MjU6MTggJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2UuYyBiL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX2V4LmMKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2UuYwpyZW5hbWUgdG8gc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXguYwppbmRleCBkNTMxNTNjLi5jZGI0ZjFlIDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZS5jCisrKyBiL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX2V4LmMKQEAgLTYsMTQgKzYsMTQgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAogCiAvKioKLSAgQGZpbGUgZGVyX2VuY29kZV9zZXF1ZW5jZS5jCisgIEBmaWxlIGRlcl9lbmNvZGVfc2VxdWVuY2VfZXguYwogICBBU04uMSBERVIsIGVuY29kZSBhIFNFUVVFTkNFLCBUb20gU3QgRGVuaXMKICovCiAKQEAgLTI1LDEwICsyNSwxMSBAQAogICAgQHBhcmFtIGlubGVuICAgICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0CiAgICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiAKICAgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIHNpemUgb2YgdGhlIG91dHB1dAorICAgQHBhcmFtIHR5cGVfb2YgICBMVENfQVNOMV9TRVFVRU5DRSBvciBMVENfQVNOMV9TRVQvTFRDX0FTTjFfU0VUT0YKICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcwogKi8KLWludCBkZXJfZW5jb2RlX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4pIAoraW50IGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGVfb2YpIAogewogICAgaW50ICAgICAgICAgICBlcnIsIHR5cGU7CiAgICB1bnNpZ25lZCBsb25nIHNpemUsIHgsIHksIHosIGk7CkBAIC01MCw2ICs1MSwxMyBAQAogICAgICAgIH0KIAogICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CT09MRUFOOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2Jvb2xlYW4oJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2ludGVnZXIoZGF0YSwgJngpKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwpAQCAtMTAzLDYgKzExMSwxMyBAQAogICAgICAgICAgICAgICAgeSArPSB4OwogICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGY4X3N0cmluZyhkYXRhLCBzaXplLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfdXRjdGltZShkYXRhLCAmeCkpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CkBAIC0xMTAsMTMgKzEyNSwxNCBAQAogICAgICAgICAgICAgICAgeSArPSB4OwogICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVQ6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfc2VxdWVuY2UoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgeSArPSB4OwogICAgICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICAKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOwpAQCAtMTQ0LDI3ICsxNjAsMjkgQEAKIAogICAgLyogdG9vIGJpZyA/ICovCiAgICBpZiAoKm91dGxlbiA8IHkpIHsKKyAgICAgICpvdXRsZW4gPSB5OwogICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfQogCiAgICAvKiBzdG9yZSBoZWFkZXIgKi8KICAgIHggPSAwOwotICAgb3V0W3grK10gPSAweDMwOworICAgb3V0W3grK10gPSAodHlwZV9vZiA9PSBMVENfQVNOMV9TRVFVRU5DRSkgPyAweDMwIDogMHgzMTsKKyAgICAgIAogICAgaWYgKHogPCAxMjgpIHsKLSAgICAgIG91dFt4KytdID0gejsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpejsKICAgIH0gZWxzZSBpZiAoeiA8IDI1NikgewogICAgICAgb3V0W3grK10gPSAweDgxOwotICAgICAgb3V0W3grK10gPSB6OworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcil6OwogICAgfSBlbHNlIGlmICh6IDwgNjU1MzZVTCkgewogICAgICAgb3V0W3grK10gPSAweDgyOwotICAgICAgb3V0W3grK10gPSAoej4+OFVMKSYyNTU7Ci0gICAgICBvdXRbeCsrXSA9IHomMjU1OworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKHo+PjhVTCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKHomMjU1KTsKICAgIH0gZWxzZSBpZiAoeiA8IDE2Nzc3MjE2VUwpIHsKICAgICAgIG91dFt4KytdID0gMHg4MzsKLSAgICAgIG91dFt4KytdID0gKHo+PjE2VUwpJjI1NTsKLSAgICAgIG91dFt4KytdID0gKHo+PjhVTCkmMjU1OwotICAgICAgb3V0W3grK10gPSB6JjI1NTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKCh6Pj4xNlVMKSYyNTUpOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKHo+PjhVTCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKHomMjU1KTsKICAgIH0KIAogICAgLyogc3RvcmUgZGF0YSAqLwpAQCAtMTc5LDYgKzE5NywxNSBAQAogICAgICAgIH0KIAogICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CT09MRUFOOgorICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfYm9vbGVhbigqKChpbnQgKilkYXRhKSwgb3V0ICsgeCwgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeCAgICAgICArPSB6OworICAgICAgICAgICAgICAgKm91dGxlbiAtPSB6OworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKICAgICAgICAgICAgICAgIHogPSAqb3V0bGVuOwogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX2ludGVnZXIoZGF0YSwgb3V0ICsgeCwgJnopKSAhPSBDUllQVF9PSykgewpAQCAtMjQ4LDYgKzI3NSwxNSBAQAogICAgICAgICAgICAgICAgKm91dGxlbiAtPSB6OwogICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgICAgIHogPSAqb3V0bGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3V0Zjhfc3RyaW5nKGRhdGEsIHNpemUsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRDVElNRToKICAgICAgICAgICAgICAgIHogPSAqb3V0bGVuOwogICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3V0Y3RpbWUoZGF0YSwgb3V0ICsgeCwgJnopKSAhPSBDUllQVF9PSykgewpAQCAtMjU3LDE1ICsyOTMsMzMgQEAKICAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgogICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47Ci0gICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2UoZGF0YSwgc2l6ZSwgb3V0ICsgeCwgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3NldChkYXRhLCBzaXplLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CiAgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CiAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVE9GOgorICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2V0b2YoZGF0YSwgc2l6ZSwgb3V0ICsgeCwgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeCAgICAgICArPSB6OworICAgICAgICAgICAgICAgKm91dGxlbiAtPSB6OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKKyAgICAgICAgICAgICAgIHogPSAqb3V0bGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlX2V4KGRhdGEsIHNpemUsIG91dCArIHgsICZ6LCB0eXBlKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOwogICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkuYyBiL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLmMKaW5kZXggOWZmNDhiOS4uZGEzNGM2NCAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMTksNiArMTksMTMgQEAKIAogI2lmZGVmIExUQ19ERVIKIAorLyoqCisgIEVuY29kZSBhIFNFUVVFTkNFIHR5cGUgdXNpbmcgYSBWQSBsaXN0CisgIEBwYXJhbSBvdXQgICAgW291dF0gRGVzdGluYXRpb24gZm9yIGRhdGEKKyAgQHBhcmFtIG91dGxlbiBbaW4vb3V0XSBMZW5ndGggb2YgYnVmZmVyIGFuZCByZXN1bHRpbmcgbGVuZ3RoIG9mIG91dHB1dAorICBAcmVtYXJrIDwuLi4+IGlzIG9mIHRoZSBmb3JtIDx0eXBlLCBzaXplLCBkYXRhPiAoaW50LCB1bnNpZ25lZCBsb25nLCB2b2lkKikKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLyAgCiBpbnQgZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aSh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgLi4uKQogewogICAgaW50ICAgICAgICAgICBlcnIsIHR5cGU7CkBAIC00Myw2ICs1MCw3IEBACiAgICAgICAgfQogCiAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQk9PTEVBTjoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQklUX1NUUklORzoKQEAgLTUxLDggKzU5LDExIEBACiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSUE1X1NUUklORzoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1VURjhfU1RSSU5HOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVE9GOgogICAgICAgICAgICAgICAgICsreDsgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgCkBAIC04Niw2ICs5Nyw3IEBACiAgICAgICAgfQogCiAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQk9PTEVBTjoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQklUX1NUUklORzoKQEAgLTk0LDggKzEwNiwxMSBAQAogICAgICAgICAgICBjYXNlIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKICAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVENUSU1FOgogICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFUVVFTkNFOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKICAgICAgICAgICAgICAgICBsaXN0W3hdLnR5cGUgICA9IHR5cGU7CiAgICAgICAgICAgICAgICAgbGlzdFt4XS5zaXplICAgPSBzaXplOwogICAgICAgICAgICAgICAgIGxpc3RbeCsrXS5kYXRhID0gZGF0YTsKQEAgLTExOSw1ICsxMzQsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOCAxOToyMDoyMyAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDI6MjU6MTggJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UuYyBiL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLmMKaW5kZXggOTEyMDQ1MS4uMzZmNGEyYSAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2xlbmd0aF9zZXF1ZW5jZS5jCkBAIC02LDExICs2LDkgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQogCiAvKioKICAgQGZpbGUgZGVyX2xlbmd0aF9zZXF1ZW5jZS5jCkBAIC00OCw2ICs0NiwxMyBAQAogICAgICAgIH0KIAogICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CisgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9ib29sZWFuKCZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHkgKz0geDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKICAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9pbnRlZ2VyKGRhdGEsICZ4KSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKQEAgLTEwMSw2ICsxMDYsMjIgQEAKICAgICAgICAgICAgICAgIHkgKz0geDsKICAgICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRDVElNRToKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGN0aW1lKGRhdGEsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHkgKz0geDsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRGOF9TVFJJTkc6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfdXRmOF9zdHJpbmcoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVQ6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CiAgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CiAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfc2VxdWVuY2UoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgewogICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOwpAQCAtMTQyLDMgKzE2Myw3IEBACiB9CiAKICNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2xlbmd0aF9zZXF1ZW5jZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEzICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjI1OjE4ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfc2VxdWVuY2VfZnJlZS5jIGIvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9zZXF1ZW5jZV9mcmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4MjZlMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfc2VxdWVuY2VfZnJlZS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9zZXF1ZW5jZV9mcmVlLmMKKyAgQVNOLjEgREVSLCBmcmVlJ3MgYSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGJ5IGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkoKSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0RFUgorCisvKioKKyAgRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkoKQorICBAcGFyYW0gaW4gICAgIFRoZSBsaXN0IHRvIGZyZWUKKyovICAKK3ZvaWQgZGVyX3NlcXVlbmNlX2ZyZWUobHRjX2FzbjFfbGlzdCAqaW4pCit7CisgICBsdGNfYXNuMV9saXN0ICpsOworICAgCisgICAvKiB3YWxrIHRvIHRoZSBzdGFydCBvZiB0aGUgY2hhaW4gKi8KKyAgIHdoaWxlIChpbi0+cHJldiAhPSBOVUxMIHx8IGluLT5wYXJlbnQgIT0gTlVMTCkgeworICAgICAgaWYgKGluLT5wYXJlbnQgIT0gTlVMTCkgeworICAgICAgICAgIGluID0gaW4tPnBhcmVudDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW4gPSBpbi0+cHJldjsKKyAgICAgIH0KKyAgIH0KKyAgIAorICAgLyogbm93IHdhbGsgdGhlIGxpc3QgYW5kIGZyZWUgc3R1ZmYgKi8KKyAgIHdoaWxlIChpbiAhPSBOVUxMKSB7CisgICAgICAvKiBpcyB0aGVyZSBhIGNoaWxkPyAqLworICAgICAgaWYgKGluLT5jaGlsZCkgeworICAgICAgICAgLyogZGlzY29ubmVjdCAqLworICAgICAgICAgaW4tPmNoaWxkLT5wYXJlbnQgPSBOVUxMOworICAgICAgICAgZGVyX3NlcXVlbmNlX2ZyZWUoaW4tPmNoaWxkKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc3dpdGNoIChpbi0+dHlwZSkgeyAKKyAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgorICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKKyAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6IGJyZWFrOworICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSIDogaWYgKGluLT5kYXRhICE9IE5VTEwpIHsgbXBfY2xlYXIoaW4tPmRhdGEpOyB9IGJyZWFrOworICAgICAgICAgZGVmYXVsdCAgICAgICAgICAgICAgIDogaWYgKGluLT5kYXRhICE9IE5VTEwpIHsgWEZSRUUoaW4tPmRhdGEpOyAgICB9CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIG1vdmUgdG8gbmV4dCBhbmQgZnJlZSBjdXJyZW50ICovCisgICAgICBsID0gaW4tPm5leHQ7CisgICAgICBmcmVlKGluKTsKKyAgICAgIGluID0gbDsKKyAgIH0gICAgIAorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9zZXF1ZW5jZV9mcmVlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0LmMgYi9zcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ZDJiMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXQuYwpAQCAtMCwwICsxLDEwMyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9lbmNvZGVfc2V0LmMKKyAgQVNOLjEgREVSLCBFbmNvZGUgYSBTRVQsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworLyogTFRDIGRlZmluZSB0byBBU04uMSBUQUcgKi8KK3N0YXRpYyBpbnQgbHRjX3RvX2FzbjEoaW50IHYpCit7CisgICBzd2l0Y2ggKHYpIHsKKyAgICAgIGNhc2UgTFRDX0FTTjFfQk9PTEVBTjogICAgICAgICAgICAgICAgIHJldHVybiAweDAxOworICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgorICAgICAgY2FzZSBMVENfQVNOMV9TSE9SVF9JTlRFR0VSOiAgICAgICAgICAgcmV0dXJuIDB4MDI7CisgICAgICBjYXNlIExUQ19BU04xX0JJVF9TVFJJTkc6ICAgICAgICAgICAgICByZXR1cm4gMHgwMzsKKyAgICAgIGNhc2UgTFRDX0FTTjFfT0NURVRfU1RSSU5HOiAgICAgICAgICAgIHJldHVybiAweDA0OworICAgICAgY2FzZSBMVENfQVNOMV9OVUxMOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB4MDU7CisgICAgICBjYXNlIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSOiAgICAgICByZXR1cm4gMHgwNjsKKyAgICAgIGNhc2UgTFRDX0FTTjFfVVRGOF9TVFJJTkc6ICAgICAgICAgICAgIHJldHVybiAweDBDOworICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOiAgICAgICAgcmV0dXJuIDB4MTM7CisgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6ICAgICAgICAgICAgICByZXR1cm4gMHgxNjsKKyAgICAgIGNhc2UgTFRDX0FTTjFfVVRDVElNRTogICAgICAgICAgICAgICAgIHJldHVybiAweDE3OworICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRTogICAgICAgICAgICAgICAgcmV0dXJuIDB4MzA7CisgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6ICAgICAgICAgICAgICAgICAgIHJldHVybiAweDMxOworICAgICAgZGVmYXVsdDogcmV0dXJuIC0xOworICAgfQorfSAgICAgICAgIAorICAgICAgCisKK3N0YXRpYyBpbnQgcXNvcnRfaGVscGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICBsdGNfYXNuMV9saXN0ICpBID0gKGx0Y19hc24xX2xpc3QgKilhLCAqQiA9IChsdGNfYXNuMV9saXN0ICopYjsKKyAgIGludCAgICAgICAgICAgIHI7CisgICAKKyAgIHIgPSBsdGNfdG9fYXNuMShBLT50eXBlKSAtIGx0Y190b19hc24xKEItPnR5cGUpOworICAgCisgICAvKiBmb3IgUVNPUlQgdGhlIG9yZGVyIGlzIFVOREVGSU5FRCBpZiB0aGV5IGFyZSAiZXF1YWwiIHdoaWNoIG1lYW5zIGl0IGlzIE5PVCBERVRFUk1JTklTVElDLiAgU28gd2UgZm9yY2UgaXQgdG8gYmUgOi0pICovCisgICBpZiAociA9PSAwKSB7CisgICAgICAvKiB0aGVpciBvcmRlciBpbiB0aGUgb3JpZ2luYWwgbGlzdCBub3cgZGV0ZXJtaW5lcyB0aGUgcG9zaXRpb24gKi8KKyAgICAgIHJldHVybiBBLT51c2VkIC0gQi0+dXNlZDsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcjsKKyAgIH0KK30gICAKKworLyoKKyAgIEVuY29kZSBhIFNFVCB0eXBlCisgICBAcGFyYW0gbGlzdCAgICAgIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIGVuY29kZQorICAgQHBhcmFtIGlubGVuICAgICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0CisgICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiAKKyAgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIHNpemUgb2YgdGhlIG91dHB1dAorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGRlcl9lbmNvZGVfc2V0KGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgbHRjX2FzbjFfbGlzdCAgKmNvcHk7CisgICB1bnNpZ25lZCBsb25nICAgeDsKKyAgIGludCAgICAgICAgICAgICBlcnI7CisgICAKKyAgIC8qIG1ha2UgY29weSBvZiBsaXN0ICovCisgICBjb3B5ID0gWENBTExPQyhpbmxlbiwgc2l6ZW9mKCpjb3B5KSk7CisgICBpZiAoY29weSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfSAgICAgIAorICAgCisgICAvKiBmaWxsIGluIHVzZWQgbWVtYmVyIHdpdGggaW5kZXggc28gd2UgY2FuIGZ1bGx5IHNvcnQgaXQgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBpbmxlbjsgeCsrKSB7CisgICAgICAgY29weVt4XSAgICAgID0gbGlzdFt4XTsKKyAgICAgICBjb3B5W3hdLnVzZWQgPSB4OworICAgfSAgICAgICAKKyAgIAorICAgLyogc29ydCBpdCBieSB0aGUgInR5cGUiIGZpZWxkICovCisgICBYUVNPUlQoY29weSwgaW5sZW4sIHNpemVvZigqY29weSksICZxc29ydF9oZWxwZXIpOyAgIAorICAgCisgICAvKiBjYWxsIGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgoKSAqLworICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9leChjb3B5LCBpbmxlbiwgb3V0LCBvdXRsZW4sIExUQ19BU04xX1NFVCk7ICAgCisgICAKKyAgIC8qIGZyZWUgbGlzdCAqLworICAgWEZSRUUoY29weSk7CisgICAKKyAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgIAorCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDI6Mjc6MzcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldG9mLmMgYi9zcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0b2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzEyZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldG9mLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9lbmNvZGVfc2V0b2YuYworICBBU04uMSBERVIsIEVuY29kZSBTRVQgT0YsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworc3RydWN0IGVkZ2UgeworICAgdW5zaWduZWQgY2hhciAqc3RhcnQ7CisgICB1bnNpZ25lZCBsb25nICBzaXplOworfTsKKworc3RhdGljIGludCBxc29ydF9oZWxwZXIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgIHN0cnVjdCBlZGdlICAgKkEgPSAoc3RydWN0IGVkZ2UgKilhLCAqQiA9IChzdHJ1Y3QgZWRnZSAqKWI7CisgICBpbnQgICAgICAgICAgICByOworICAgdW5zaWduZWQgbG9uZyAgeDsKKyAgIAorICAgLyogY29tcGFyZSBtaW4gbGVuZ3RoICovCisgICByID0gWE1FTUNNUChBLT5zdGFydCwgQi0+c3RhcnQsIE1JTihBLT5zaXplLCBCLT5zaXplKSk7CisgICAKKyAgIGlmIChyID09IDAgJiYgQS0+c2l6ZSAhPSBCLT5zaXplKSB7CisgICAgICBpZiAoQS0+c2l6ZSA+IEItPnNpemUpIHsKKyAgICAgICAgIGZvciAoeCA9IEItPnNpemU7IHggPCBBLT5zaXplOyB4KyspIHsKKyAgICAgICAgICAgIGlmIChBLT5zdGFydFt4XSkgeworICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgZm9yICh4ID0gQS0+c2l6ZTsgeCA8IEItPnNpemU7IHgrKykgeworICAgICAgICAgICAgaWYgKEItPnN0YXJ0W3hdKSB7CisgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9ICAgICAgICAgCisgICB9CisgICAKKyAgIHJldHVybiByOyAgICAgIAorfQorCisvKioKKyAgIEVuY29kZSBhIFNFVE9GIHN0dWN0dXJlCisgICBAcGFyYW0gbGlzdCAgICAgIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIGVuY29kZQorICAgQHBhcmFtIGlubGVuICAgICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0CisgICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiAKKyAgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIHNpemUgb2YgdGhlIG91dHB1dAorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLyAgIAoraW50IGRlcl9lbmNvZGVfc2V0b2YobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgIHgsIHksIHosIGhkcmxlbjsKKyAgIGludCAgICAgICAgICAgIGVycjsKKyAgIHN0cnVjdCBlZGdlICAgKmVkZ2VzOworICAgdW5zaWduZWQgY2hhciAqcHRyLCAqYnVmOworICAgCisgICAvKiBjaGVjayB0aGF0IHRoZXkncmUgYWxsIHRoZSBzYW1lIHR5cGUgKi8KKyAgIGZvciAoeCA9IDE7IHggPCBpbmxlbjsgeCsrKSB7CisgICAgICBpZiAobGlzdFt4XS50eXBlICE9IGxpc3RbeC0xXS50eXBlKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICB9CisgICB9CisKKyAgIC8qIGFsbG9jIGJ1ZmZlciB0byBzdG9yZSBjb3B5IG9mIG91dHB1dCAqLworICAgYnVmID0gWENBTExPQygxLCAqb3V0bGVuKTsKKyAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0gICAgICAKKyAgICAgICAgICAgICAgICAgIAorICAgLyogZW5jb2RlIGxpc3QgKi8KKyAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9leChsaXN0LCBpbmxlbiwgYnVmLCBvdXRsZW4sIExUQ19BU04xX1NFVE9GKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBYRlJFRShidWYpOworICAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIC8qIGFsbG9jYXRlIGVkZ2VzICovCisgICBlZGdlcyA9IFhDQUxMT0MoaW5sZW4sIHNpemVvZigqZWRnZXMpKTsKKyAgIGlmIChlZGdlcyA9PSBOVUxMKSB7CisgICAgICBYRlJFRShidWYpOworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0gICAgICAKKyAgIAorICAgLyogc2tpcCBoZWFkZXIgKi8KKyAgICAgIHB0ciA9IGJ1ZiArIDE7CisKKyAgICAgIC8qIG5vdyBza2lwIGxlbmd0aCBkYXRhICovCisgICAgICB4ID0gKnB0cisrOworICAgICAgaWYgKHggPj0gMHg4MCkgeworICAgICAgICAgcHRyICs9ICh4ICYgMHg3Rik7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIGdldCB0aGUgc2l6ZSBvZiB0aGUgc3RhdGljIGhlYWRlciAqLworICAgICAgaGRybGVuID0gKCh1bnNpZ25lZCBsb25nKXB0cikgLSAoKHVuc2lnbmVkIGxvbmcpYnVmKTsKKyAgICAgIAorICAgICAgCisgICAvKiBzY2FuIGZvciBlZGdlcyAqLworICAgeCA9IDA7CisgICB3aGlsZSAocHRyIDwgKGJ1ZiArICpvdXRsZW4pKSB7CisgICAgICAvKiBzdG9yZSBzdGFydCAqLworICAgICAgZWRnZXNbeF0uc3RhcnQgPSBwdHI7CisgICAgICAKKyAgICAgIC8qIHNraXAgdHlwZSAqLworICAgICAgeiA9IDE7CisgICAgICAKKyAgICAgIC8qIHBhcnNlIGxlbmd0aCAqLworICAgICAgeSA9IHB0clt6KytdOworICAgICAgaWYgKHkgPCAxMjgpIHsKKyAgICAgICAgIGVkZ2VzW3hdLnNpemUgPSB5OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHkgJj0gMHg3RjsKKyAgICAgICAgIGVkZ2VzW3hdLnNpemUgPSAwOworICAgICAgICAgd2hpbGUgKHktLSkgeworICAgICAgICAgICAgZWRnZXNbeF0uc2l6ZSA9IChlZGdlc1t4XS5zaXplIDw8IDgpIHwgKCh1bnNpZ25lZCBsb25nKXB0clt6KytdKTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogc2tpcCBjb250ZW50ICovCisgICAgICBlZGdlc1t4XS5zaXplICs9IHo7CisgICAgICBwdHIgICAgICAgICAgICs9IGVkZ2VzW3hdLnNpemU7CisgICAgICArK3g7CisgICB9ICAgICAgCisgICAgICAKKyAgIC8qIHNvcnQgYmFzZWQgb24gY29udGVudHMgKHVzaW5nIGVkZ2VzKSAqLworICAgWFFTT1JUKGVkZ2VzLCBpbmxlbiwgc2l6ZW9mKCplZGdlcyksICZxc29ydF9oZWxwZXIpOworICAgCisgICAvKiBjb3B5IHN0YXRpYyBoZWFkZXIgKi8KKyAgIFhNRU1DUFkob3V0LCBidWYsIGhkcmxlbik7CisgICAKKyAgIC8qIGNvcHkrc29ydCB1c2luZyBlZGdlcytpbmRlY2llcyB0byBvdXRwdXQgZnJvbSBidWZmZXIgKi8KKyAgIGZvciAoeSA9IGhkcmxlbiwgeCA9IDA7IHggPCBpbmxlbjsgeCsrKSB7CisgICAgICBYTUVNQ1BZKG91dCt5LCBlZGdlc1t4XS5zdGFydCwgZWRnZXNbeF0uc2l6ZSk7CisgICAgICB5ICs9IGVkZ2VzW3hdLnNpemU7CisgICB9ICAgICAgCisgICAKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCAqb3V0bGVuKTsKKyNlbmRpZiAgICAgIAorICAgCisgICAvKiBmcmVlIGJ1ZmZlcnMgKi8KKyAgIFhGUkVFKGVkZ2VzKTsKKyAgIFhGUkVFKGJ1Zik7CisgICAKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5jIGIvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLmMKaW5kZXggN2QzZDNiNy4uMTQwN2U5YSAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE5LDcgKzE5LDcgQEAKICNpZmRlZiBMVENfREVSCiAKIC8qKgotICBSZWFkIGEgbXBfaW50IGludGVnZXIKKyAgUmVhZCBhIHNob3J0IGludGVnZXIKICAgQHBhcmFtIGluICAgICAgIFRoZSBERVIgZW5jb2RlZCBkYXRhCiAgIEBwYXJhbSBpbmxlbiAgICBTaXplIG9mIGRhdGEKICAgQHBhcmFtIG51bSAgICAgIFtvdXRdIFRoZSBpbnRlZ2VyIHRvIGRlY29kZQpAQCAtNjQsNSArNjQsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMjMgMDE6MDQ6MTMgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLmMgYi9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIuYwppbmRleCBlYjk0ZDM4Li45NWRhMmZhIDEwMDY0NAotLS0gYS9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIuYworKysgYi9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTgsOSArMTgsOCBAQAogCiAjaWZkZWYgTFRDX0RFUgogCi0vKiBFeHBvcnRzIGEgcG9zaXRpdmUgaW50ZWdlciBhcyBERVIgZm9ybWF0ICh1cHRvIDMyLWJpdHMgaW4gc2l6ZSkgKi8KIC8qKgotICBTdG9yZSBhIG1wX2ludCBpbnRlZ2VyCisgIFN0b3JlIGEgc2hvcnQgaW50ZWdlciBpbiB0aGUgcmFuZ2UgKDAsMl4zMi0xKQogICBAcGFyYW0gbnVtICAgICAgVGhlIGludGVnZXIgdG8gZW5jb2RlCiAgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBERVIgZW5jb2RlZCBpbnRlZ2VycwogICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgREVSIGVuY29kZWQgaW50ZWdlcnMKQEAgLTQzLDYgKzQyLDcgQEAKICAgIH0KIAogICAgaWYgKCpvdXRsZW4gPCBsZW4pIHsKKyAgICAgICpvdXRsZW4gPSBsZW47CiAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgfQogCkBAIC03MCw3ICs3MCw3IEBACiAgICAvKiBzdG9yZSBoZWFkZXIgKi8KICAgIHggPSAwOwogICAgb3V0W3grK10gPSAweDAyOwotICAgb3V0W3grK10gPSB6OworICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcil6OwogCiAgICAvKiBpZiAzMXN0IGJpdCBpcyBzZXQgb3V0cHV0IGEgbGVhZGluZyB6ZXJvIGFuZCBkZWNyZW1lbnQgY291bnQgKi8KICAgIGlmICh6ID09IDUpIHsKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgLyogc3RvcmUgdmFsdWVzICovCiAgICBmb3IgKHkgPSAwOyB5IDwgejsgeSsrKSB7Ci0gICAgICBvdXRbeCsrXSA9IChudW0gPj4gMjQpICYgMHhGRjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChudW0gPj4gMjQpICYgMHhGRik7CiAgICAgICBudW0gICAgPDw9IDg7CiAgICB9CiAKQEAgLTkzLDUgKzkzLDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzIzIDAxOjI3OjAzICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9sZW5ndGhfc2hvcnRfaW50ZWdlci5jIGIvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMKaW5kZXggNzMyNGI0YS4uMDczZTI5NCAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgKyt6OwogICAgICB5ID4+PSA4OwogICAgfQotCisgICAKICAgIC8qIGhhbmRsZSB6ZXJvICovCiAgICBpZiAoeiA9PSAwKSB7CiAgICAgICB6ID0gMTsKQEAgLTU5LDExICs1OSwxMiBAQAogCiAgICAvKiByZXR1cm4gbGVuZ3RoICovCiAgICAqb3V0bGVuID0gbGVuOyAKKyAgIAogICAgcmV0dXJuIENSWVBUX09LOwogfQogCiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMyAwMTozNTozOCAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZGVjb2RlX3V0Y3RpbWUuYyBiL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5jCmluZGV4IDQzYmEwMzMuLjhhMWY1ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5jCisrKyBiL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zOSw2ICszOSwxMyBAQAogICAgaWYgKHkgPj0gbWF4KSByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7ICAgICAgICAgICBcCiAgICB4ICs9IDI7CiAKKy8qKgorICBEZWNvZGVzIGEgVVRDIHRpbWUgc3RydWN0dXJlIGluIERFUiBmb3JtYXQgKHJlYWRzIGFsbCA2IHZhbGlkIGVuY29kaW5nIGZvcm1hdHMpCisgIEBwYXJhbSBpbiAgICAgSW5wdXQgYnVmZmVyCisgIEBwYXJhbSBpbmxlbiAgTGVuZ3RoIG9mIGlucHV0IGJ1ZmZlciBpbiBvY3RldHMKKyAgQHBhcmFtIG91dCAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBVVEMgdGltZSBzdHJ1Y3R1cmUKKyAgQHJldHVybiBDUllQVF9PSyAgIGlmIHN1Y2Nlc3NmdWwKKyovCiBpbnQgZGVyX2RlY29kZV91dGN0aW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nICppbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3V0Y3RpbWUgICAqb3V0KQogewpAQCAtMTE2LDUgKzEyMyw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2RlY29kZV91dGN0aW1lLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOSAxMjowNzowMCAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZW5jb2RlX3V0Y3RpbWUuYyBiL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5jCmluZGV4IGRhZDhjODQuLmFlMmNjYmUgMTAwNjQ0Ci0tLSBhL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5jCisrKyBiL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNCw4ICsyNCwxMCBAQAogICAgIG91dFt4KytdID0gZGVyX2lhNV9jaGFyX2VuY29kZShiYXNldGVuW3kgJSAxMF0pOwogCiAvKioKLSAgR2V0cyBsZW5ndGggb2YgREVSIGVuY29kaW5nIG9mIFVUQ1RJTUUKLSAgQHBhcmFtIG91dGxlbiBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcKKyAgRW5jb2RlcyBhIFVUQyB0aW1lIHN0cnVjdHVyZSBpbiBERVIgZm9ybWF0CisgIEBwYXJhbSB1dGN0aW1lICAgICAgVGhlIFVUQyB0aW1lIHN0cnVjdHVyZSB0byBlbmNvZGUKKyAgQHBhcmFtIG91dCAgICAgICAgICBUaGUgZGVzdGluYXRpb24gb2YgdGhlIERFUiBlbmNvZGluZyBvZiB0aGUgVVRDIHRpbWUgc3RydWN0dXJlCisgIEBwYXJhbSBvdXRsZW4gICAgICAgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nCiAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KIGludCBkZXJfZW5jb2RlX3V0Y3RpbWUobHRjX3V0Y3RpbWUgKnV0Y3RpbWUsIApAQCAtNDIsNiArNDQsNyBAQAogICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIGlmICh0bXBsZW4gPiAqb3V0bGVuKSB7CisgICAgICAgICpvdXRsZW4gPSB0bXBsZW47CiAgICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICAgfQogICAgIApAQCAtNjYsNyArNjksNyBAQAogICAgIH0KIAogICAgIC8qIHN0b3JlIGxlbmd0aCAqLwotICAgIG91dFsxXSA9IHggLSAyOworICAgIG91dFsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4IC0gMik7CiAgICAKICAgICAvKiBhbGwgZ29vZCBsZXQncyByZXR1cm4gKi8KICAgICAqb3V0bGVuID0geDsKQEAgLTc2LDUgKzc5LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZW5jb2RlX3V0Y3RpbWUuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE5IDEyOjA3OjAwICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5jIGIvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLmMKaW5kZXggODRlNjU0YS4uNjBmMDlkZSAxMDA2NDQKLS0tIGEvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLmMKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTE5LDYgKzE5LDcgQEAKIAogLyoqCiAgIEdldHMgbGVuZ3RoIG9mIERFUiBlbmNvZGluZyBvZiBVVENUSU1FCisgIEBwYXJhbSB1dGN0aW1lICAgICAgVGhlIFVUQyB0aW1lIHN0cnVjdHVyZSB0byBnZXQgdGhlIHNpemUgb2YKICAgQHBhcmFtIG91dGxlbiBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcKICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwpAQCAtNDEsNSArNDIsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjIgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTkgMTE6MjM6MDQgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5jIGIvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjU1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZGVjb2RlX3V0Zjhfc3RyaW5nLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9kZWNvZGVfdXRmOF9zdHJpbmcuYworICBBU04uMSBERVIsIGVuY29kZSBhIFVURjggU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGEgVVRGOCBTVFJJTkcKKyAgQHBhcmFtIGluICAgICAgVGhlIERFUiBlbmNvZGVkIFVURjggU1RSSU5HCisgIEBwYXJhbSBpbmxlbiAgIFRoZSBzaXplIG9mIHRoZSBERVIgVVRGOCBTVFJJTkcKKyAgQHBhcmFtIG91dCAgICAgW291dF0gVGhlIGFycmF5IG9mIHV0ZjhzIHN0b3JlZCAob25lIHBlciBjaGFyKQorICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbnVtYmVyIG9mIHV0ZjhzIHN0b3JlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2RlY29kZV91dGY4X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHdjaGFyX3QgICAgICAgdG1wOworICAgdW5zaWduZWQgbG9uZyB4LCB5LCB6LCBsZW47CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogbXVzdCBoYXZlIGhlYWRlciBhdCBsZWFzdCAqLworICAgaWYgKGlubGVuIDwgMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBjaGVjayBmb3IgMHgwQyAqLworICAgaWYgKChpblswXSAmIDB4MUYpICE9IDB4MEMpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKyAgIHggPSAxOworCisgICAvKiBkZWNvZGUgdGhlIGxlbmd0aCAqLworICAgaWYgKGluW3hdICYgMHg4MCkgeworICAgICAgLyogdmFsaWQgIyBvZiBieXRlcyBpbiBsZW5ndGggYXJlIDEsMiwzICovCisgICAgICB5ID0gaW5beF0gJiAweDdGOworICAgICAgaWYgKCh5ID09IDApIHx8ICh5ID4gMykgfHwgKCh4ICsgeSkgPiBpbmxlbikpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIH0KKworICAgICAgLyogcmVhZCB0aGUgbGVuZ3RoIGluICovCisgICAgICBsZW4gPSAwOworICAgICAgKyt4OworICAgICAgd2hpbGUgKHktLSkgeworICAgICAgICAgbGVuID0gKGxlbiA8PCA4KSB8IGluW3grK107CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgbGVuID0gaW5beCsrXSAmIDB4N0Y7CisgICB9CisKKyAgIGlmIChsZW4gKyB4ID4gaW5sZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgLyogcHJvY2VlZCB0byBkZWNvZGUgKi8KKyAgIGZvciAoeSA9IDA7IHggPCBpbmxlbjsgKSB7CisgICAgICAvKiBnZXQgZmlyc3QgYnl0ZSAqLworICAgICAgdG1wID0gaW5beCsrXTsKKyAKKyAgICAgIC8qIGNvdW50IG51bWJlciBvZiBieXRlcyAqLworICAgICAgZm9yICh6ID0gMDsgKHRtcCAmIDB4ODApICYmICh6IDw9IDQpOyB6KyssIHRtcCA9ICh0bXAgPDwgMSkgJiAweEZGKTsKKyAgICAgIAorICAgICAgaWYgKHogPiA0IHx8ICh4ICsgKHogLSAxKSA+IGlubGVuKSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgfQorCisgICAgICAvKiBkZWNvZGUsIGdyYWIgdXBwZXIgYml0cyAqLworICAgICAgdG1wID4+PSB6OworCisgICAgICAvKiBncmFiIHJlbWFpbmluZyBieXRlcyAqLworICAgICAgaWYgKHogPiAxKSB7IC0tejsgfQorICAgICAgd2hpbGUgKHotLSAhPSAwKSB7CisgICAgICAgICBpZiAoKGluW3hdICYgMHhDMCkgIT0gMHg4MCkgeworICAgICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgICAgfQorICAgICAgICAgdG1wID0gKHRtcCA8PCA2KSB8ICgod2NoYXJfdClpblt4KytdICYgMHgzRik7CisgICAgICB9CisKKyAgICAgIGlmICh5ID4gKm91dGxlbikgeworICAgICAgICAgKm91dGxlbiA9IHk7CisgICAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgfQorICAgICAgb3V0W3krK10gPSB0bXA7CisgICB9CisgICAqb3V0bGVuID0geTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorIAorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9kZWNvZGVfdXRmOF9zdHJpbmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjI3OjM3ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcuYyBiL3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ2MDgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2VuY29kZV91dGY4X3N0cmluZy5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX3V0Zjhfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBVVEY4IFNUUklORywgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBTdG9yZSBhbiBVVEY4IFNUUklORworICBAcGFyYW0gaW4gICAgICAgVGhlIGFycmF5IG9mIFVURjggdG8gc3RvcmUgKG9uZSBwZXIgd2NoYXJfdCkKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBudW1iZXIgb2YgVVRGOCB0byBzdG9yZQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgVVRGOCBTVFJJTkcKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBVVEY4IFNUUklORworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2VuY29kZV91dGY4X3N0cmluZyhjb25zdCB3Y2hhcl90ICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgbGVuOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGdldCB0aGUgc2l6ZSAqLworICAgZm9yICh4ID0gbGVuID0gMDsgeCA8IGlubGVuOyB4KyspIHsKKyAgICAgICBpZiAoaW5beF0gPCAwIHx8IGluW3hdID4gMHgxRkZGRikgeyAKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgfQorICAgICAgIGxlbiArPSBkZXJfdXRmOF9jaGFyc2l6ZShpblt4XSk7CisgICB9CisKKyAgIGlmIChsZW4gPCAxMjgpIHsKKyAgICAgIHkgPSAyICsgbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCAyNTYpIHsKKyAgICAgIHkgPSAzICsgbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCA2NTUzNlVMKSB7CisgICAgICB5ID0gNCArIGxlbjsKKyAgIH0gZWxzZSBpZiAobGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgeSA9IDUgKyBsZW47CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiB0b28gYmlnPyAqLworICAgaWYgKHkgPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgLyogZW5jb2RlIHRoZSBoZWFkZXIrbGVuICovCisgICB4ID0gMDsKKyAgIG91dFt4KytdID0gMHgwQzsKKyAgIGlmIChsZW4gPCAxMjgpIHsKKyAgICAgIG91dFt4KytdID0gbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCAyNTYpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MTsKKyAgICAgIG91dFt4KytdID0gbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCA2NTUzNlVMKSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODI7CisgICAgICBvdXRbeCsrXSA9IChsZW4+PjgpJjI1NTsKKyAgICAgIG91dFt4KytdID0gbGVuJjI1NTsKKyAgIH0gZWxzZSBpZiAobGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgb3V0W3grK10gPSAweDgzOworICAgICAgb3V0W3grK10gPSAobGVuPj4xNikmMjU1OworICAgICAgb3V0W3grK10gPSAobGVuPj44KSYyNTU7CisgICAgICBvdXRbeCsrXSA9IGxlbiYyNTU7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBzdG9yZSBVVEY4ICovCisgICBmb3IgKHkgPSAwOyB5IDwgaW5sZW47IHkrKykgeworICAgICAgIHN3aXRjaCAoZGVyX3V0ZjhfY2hhcnNpemUoaW5beV0pKSB7CisgICAgICAgICAgY2FzZSAxOiBvdXRbeCsrXSA9IGluW3ldOyBicmVhazsKKyAgICAgICAgICBjYXNlIDI6IG91dFt4KytdID0gMHhDMCB8ICgoaW5beV0gPj4gNikgJiAweDFGKTsgIG91dFt4KytdID0gMHg4MCB8IChpblt5XSAmIDB4M0YpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6IG91dFt4KytdID0gMHhFMCB8ICgoaW5beV0gPj4gMTIpICYgMHgwRik7IG91dFt4KytdID0gMHg4MCB8ICgoaW5beV0gPj4gNikgJiAweDNGKTsgb3V0W3grK10gPSAweDgwIHwgKGluW3ldICYgMHgzRik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogb3V0W3grK10gPSAweEYwIHwgKChpblt5XSA+PiAxOCkgJiAweDA3KTsgb3V0W3grK10gPSAweDgwIHwgKChpblt5XSA+PiAxMikgJiAweDNGKTsgb3V0W3grK10gPSAweDgwIHwgKChpblt5XSA+PiA2KSAmIDB4M0YpOyBvdXRbeCsrXSA9IDB4ODAgfCAoaW5beV0gJiAweDNGKTsgYnJlYWs7CisgICAgICAgfQorICAgfQorCisgICAvKiByZXR1biBsZW5ndGggKi8KKyAgICpvdXRsZW4gPSB4OworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZW5jb2RlX3V0Zjhfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8xNiAxNzo0MToyMSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLmMgYi9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMmJjNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9sZW5ndGhfdXRmOF9zdHJpbmcuYwpAQCAtMCwwICsxLDgzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBnZXQgbGVuZ3RoIG9mIFVURjggU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKiBSZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgYSBVVEYtOCBjaGFyYWN0ZXIKKyAgQHBhcmFtIGMgICBUaGUgVVRGLTggY2hhcmFjdGVyIHRvIG1lYXN1cmUKKyAgQHJldHVybiAgICBUaGUgc2l6ZSBpbiBieXRlcworKi8KK3Vuc2lnbmVkIGxvbmcgZGVyX3V0ZjhfY2hhcnNpemUoY29uc3Qgd2NoYXJfdCBjKQoreworICAgaWYgKGMgPD0gMHg3RikgeworICAgICAgcmV0dXJuIDE7CisgICB9IGVsc2UgaWYgKGMgPD0gMHg3RkYpIHsKKyAgICAgIHJldHVybiAyOworICAgfSBlbHNlIGlmIChjIDw9IDB4RkZGRikgeworICAgICAgcmV0dXJuIDM7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIDQ7CisgICB9Cit9CisKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgVVRGOCBTVFJJTkcgCisgIEBwYXJhbSBpbiAgICAgICBUaGUgY2hhcmFjdGVycyB0byBtZWFzdXJlIHRoZSBsZW5ndGggb2YKKyAgQHBhcmFtIG5vY3RldHMgIFRoZSBudW1iZXIgb2Ygb2N0ZXRzIGluIHRoZSBzdHJpbmcgdG8gZW5jb2RlCisgIEBwYXJhbSBvdXRsZW4gICBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcgZm9yIHRoZSBnaXZlbiBzdHJpbmcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9sZW5ndGhfdXRmOF9zdHJpbmcoY29uc3Qgd2NoYXJfdCAqaW4sIHVuc2lnbmVkIGxvbmcgbm9jdGV0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4LCBsZW47CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIGxlbiA9IDA7CisgICBmb3IgKHggPSAwOyB4IDwgbm9jdGV0czsgeCsrKSB7CisgICAgICBpZiAoaW5beF0gPCAwIHx8IGluW3hdID4gMHgxMEZGRkYpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgIH0KKyAgICAgIGxlbiArPSBkZXJfdXRmOF9jaGFyc2l6ZShpblt4XSk7CisgICB9CisKKyAgIGlmIChsZW4gPCAxMjgpIHsKKyAgICAgIC8qIDBDIExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDIgKyBsZW47CisgICB9IGVsc2UgaWYgKGxlbiA8IDI1NikgeworICAgICAgLyogMEMgODEgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gMyArIGxlbjsKKyAgIH0gZWxzZSBpZiAobGVuIDwgNjU1MzZVTCkgeworICAgICAgLyogMEMgODIgTEwgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNCArIGxlbjsKKyAgIH0gZWxzZSBpZiAobGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgLyogMEMgODMgTEwgTEwgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNSArIGxlbjsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2xlbmd0aF91dGY4X3N0cmluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMTYgMTc6NDE6MjEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2RoL2RoLmMgYi9zcmMvcGsvZGgvZGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0ZjI5Yi4uMDAwMDAwMAotLS0gYS9zcmMvcGsvZGgvZGguYworKysgL2Rldi9udWxsCkBAIC0xLDUyNCArMCwwIEBACi0vKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCi0gKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKLSAqLwotI2luY2x1ZGUgInRvbWNyeXB0LmgiCi0KLS8qKgotICBAZmlsZSBkaC5jCi0gIERIIGNyeXB0bywgVG9tIFN0IERlbmlzCi0qLwotICAKLSNpZmRlZiBNREgKLQotLyogbWF4IGV4cG9ydCBzaXplIHdlJ2xsIGVuY291bnRlciAoc21hbGxlciB0aGFuIHRoaXMgYnV0IGxldHMgcm91bmQgdXAgYSBiaXQpICovCi0jZGVmaW5lIERIX0JVRl9TSVpFIDEyMDAKLQotLyogVGhpcyBob2xkcyB0aGUga2V5IHNldHRpbmdzLiAgKioqTVVTVCoqKiBiZSBvcmdhbml6ZWQgYnkgc2l6ZSBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3QuICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAgICBpbnQgc2l6ZTsKLSAgICBjaGFyICpuYW1lLCAqYmFzZSwgKnByaW1lOwotfSBzZXRzW10gPSB7Ci0jaWZkZWYgREg3NjgKLXsKLSAgIDk2LAotICAgIkRILTc2OCIsCi0gICAiNCIsCi0gICAiRi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy9tM3d2ViIKLX0sCi0jZW5kaWYKLSNpZmRlZiBESDEwMjQKLXsKLSAgIDEyOCwKLSAgICJESC0xMDI0IiwKLSAgICI0IiwKLSAgICJGLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL20zQzQ3IgotfSwKLSNlbmRpZgotI2lmZGVmIERIMTI4MAotewotICAgMTYwLAotICAgIkRILTEyODAiLAotICAgIjQiLAotICAgIkYvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL200a1NOIgotfSwKLSNlbmRpZgotI2lmZGVmIERIMTUzNgotewotICAgMTkyLAotICAgIkRILTE1MzYiLAotICAgIjQiLAotICAgIkYvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy9tNXVxZCIKLX0sCi0jZW5kaWYKLSNpZmRlZiBESDE3OTIKLXsKLSAgIDIyNCwKLSAgICJESC0xNzkyIiwKLSAgICI0IiwKLSAgICJGLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vbVQvc2QiCi19LAotI2VuZGlmCi0jaWZkZWYgREgyMDQ4Ci17Ci0gICAyNTYsCi0gICAiREgtMjA0OCIsCi0gICAiNCIsCi0gICAiMy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL204TVBoIgotfSwKLSNlbmRpZgotI2lmZGVmIERIMjU2MAotewotICAgMzIwLAotICAgIkRILTI1NjAiLAotICAgIjQiLAotICAgIjMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vL21LRnBGIgotfSwKLSNlbmRpZgotI2lmZGVmIERIMzA3MgotewotICAgMzg0LAotICAgIkRILTMwNzIiLAotICAgIjQiLAotICAgIjMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9tMzJuTiIKLX0sCi0jZW5kaWYKLSNpZmRlZiBESDQwOTYKLXsKLSAgIDUxMiwKLSAgICJESC00MDk2IiwKLSAgICI0IiwKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIgotICAgIi8vLy8vLy8vLy8vLy8vLy8vLy8vL204cE9GIgotfSwKLSNlbmRpZgotewotICAgMCwKLSAgIE5VTEwsCi0gICBOVUxMLAotICAgTlVMTAotfQotfTsKLQotc3RhdGljIGludCBpc192YWxpZF9pZHgoaW50IG4pCi17Ci0gICBpbnQgeDsKLQotICAgZm9yICh4ID0gMDsgc2V0c1t4XS5zaXplOyB4KyspOwotICAgaWYgKChuIDwgMCkgfHwgKG4gPj0geCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgfQotICAgcmV0dXJuIDE7Ci19Ci0KLS8qKgotICAgVGVzdCB0aGUgREggc3ViLXN5c3RlbSAoY2FuIHRha2UgYSB3aGlsZSkKLSAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAotKi8KLWludCBkaF90ZXN0KHZvaWQpCi17Ci0gICAgbXBfaW50IHAsIGcsIHRtcDsKLSAgICBpbnQgeCwgZXJyLCBwcmltYWxpdHk7Ci0KLSAgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnAsICZnLCAmdG1wLCBOVUxMKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAgZm9yICh4ID0gMDsgc2V0c1t4XS5zaXplICE9IDA7IHgrKykgewotI2lmIDAKLSAgICAgICAgcHJpbnRmKCJkaF90ZXN0KCk6dGVzdGluZyBzaXplICVkLWJpdHNcbiIsIHNldHNbeF0uc2l6ZSAqIDgpOwotI2VuZGlmCi0gICAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmZywoY2hhciAqKXNldHNbeF0uYmFzZSwgNjQpKSAhPSBNUF9PS0FZKSAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KCZwLChjaGFyICopc2V0c1t4XS5wcmltZSwgNjQpKSAhPSBNUF9PS0FZKSAgIHsgZ290byBlcnJvcjsgfQotCi0gICAgICAgIC8qIGVuc3VyZSBwIGlzIHByaW1lICovCi0gICAgICAgIGlmICgoZXJyID0gaXNfcHJpbWUoJnAsICZwcmltYWxpdHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQotICAgICAgICBpZiAocHJpbWFsaXR5ID09IDApIHsKLSAgICAgICAgICAgZXJyID0gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwotICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCZwLCAxLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAgIGlmICgoZXJyID0gbXBfZGl2XzIoJnRtcCwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgICAgICAvKiBlbnN1cmUgKHAtMSkvMiBpcyBwcmltZSAqLwotICAgICAgICBpZiAoKGVyciA9IGlzX3ByaW1lKCZ0bXAsICZwcmltYWxpdHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KLSAgICAgICAgaWYgKHByaW1hbGl0eSA9PSAwKSB7Ci0gICAgICAgICAgIGVyciA9IENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKLSAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogbm93IHNlZSBpZiBnXigocC0xKS8yKSBtb2QgcCBpcyBpbiBmYWN0IDEgKi8KLSAgICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZnLCAmdG1wLCAmcCwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgICBpZiAobXBfY21wX2QoJnRtcCwgMSkpIHsKLSAgICAgICAgICAgZXJyID0gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwotICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZXJyID0gQ1JZUFRfT0s7Ci0gICAgZ290byBkb25lOwotZXJyb3I6Ci0gICAgZXJyID0gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotZG9uZToKLSAgICBtcF9jbGVhcl9tdWx0aSgmdG1wLCAmZywgJnAsIE5VTEwpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qKgotICAgR2V0IHRoZSBtaW4gYW5kIG1heCBESCBrZXkgc2l6ZXMgKG9jdGV0cykKLSAgIEBwYXJhbSBsb3cgICAgW291dF0gVGhlIHNtYWxsZXN0IGtleSBzaXplIHN1cHBvcnRlZAotICAgQHBhcmFtIGhpZ2ggICBbb3V0XSBUaGUgbGFyZ2VzdCBrZXkgc2l6ZSBzdXBwb3J0ZWQKLSovCi12b2lkIGRoX3NpemVzKGludCAqbG93LCBpbnQgKmhpZ2gpCi17Ci0gICBpbnQgeDsKLSAgIExUQ19BUkdDSEsobG93ICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhoaWdoICE9IE5VTEwpOwotICAgKmxvdyAgPSBJTlRfTUFYOwotICAgKmhpZ2ggPSAwOwotICAgZm9yICh4ID0gMDsgc2V0c1t4XS5zaXplICE9IDA7IHgrKykgewotICAgICAgIGlmICgqbG93ID4gc2V0c1t4XS5zaXplKSAgKmxvdyAgPSBzZXRzW3hdLnNpemU7Ci0gICAgICAgaWYgKCpoaWdoIDwgc2V0c1t4XS5zaXplKSAqaGlnaCA9IHNldHNbeF0uc2l6ZTsKLSAgIH0KLX0KLQotLyoqCi0gIFJldHVybnMgdGhlIGtleSBzaXplIG9mIGEgZ2l2ZW4gREgga2V5IChvY3RldHMpCi0gIEBwYXJhbSBrZXkgICBUaGUgREgga2V5IHRvIGdldCB0aGUgc2l6ZSBvZgotICBAcmV0dXJuIFRoZSBzaXplIGlmIHZhbGlkIG9yIElOVF9NQVggaWYgbm90Ci0qLwotaW50IGRoX2dldF9zaXplKGRoX2tleSAqa2V5KQotewotICAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOwotICAgIGlmIChpc192YWxpZF9pZHgoa2V5LT5pZHgpID09IDEpIHsKLSAgICAgICAgcmV0dXJuIHNldHNba2V5LT5pZHhdLnNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIElOVF9NQVg7IC8qIGxhcmdlIHZhbHVlIHRoYXQgd291bGQgY2F1c2UgZGhfbWFrZV9rZXkoKSB0byBmYWlsICovCi0gICAgfQotfQotCi0vKioKLSAgTWFrZSBhIERIIGtleSBbcHJpdmF0ZSBrZXkgcGFpcl0KLSAgQHBhcmFtIHBybmcgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCi0gIEBwYXJhbSB3cHJuZyAgICBUaGUgaW5kZXggZm9yIHRoZSBQUk5HIHlvdSBkZXNpcmUgdG8gdXNlCi0gIEBwYXJhbSBrZXlzaXplICBUaGUga2V5IHNpemUgKG9jdGV0cykgZGVzaXJlZAotICBAcGFyYW0ga2V5ICAgICAgW291dF0gV2hlcmUgdGhlIG5ld2x5IGNyZWF0ZWQgREgga2V5IHdpbGwgYmUgc3RvcmVkCi0gIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgbm90ZTogb24gZXJyb3IgYWxsIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmcmVlZCBhdXRvbWF0aWNhbGx5LgotKi8KLWludCBkaF9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBrZXlzaXplLCBkaF9rZXkgKmtleSkKLXsKLSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKLSAgIHVuc2lnbmVkIGxvbmcgeDsKLSAgIG1wX2ludCBwLCBnOwotICAgaW50IGVycjsKLQotICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOwotCi0gICAvKiBnb29kIHBybmc/ICovCi0gICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgewotICAgICAgcmV0dXJuIGVycjsKLSAgIH0KLQotICAgLyogZmluZCBrZXkgc2l6ZSAqLwotICAgZm9yICh4ID0gMDsgKGtleXNpemUgPiBzZXRzW3hdLnNpemUpICYmIChzZXRzW3hdLnNpemUgIT0gMCk7IHgrKyk7Ci0jaWZkZWYgRkFTVF9QSwotICAga2V5c2l6ZSA9IE1JTihzZXRzW3hdLnNpemUsIDMyKTsKLSNlbHNlCi0gICBrZXlzaXplID0gc2V0c1t4XS5zaXplOwotI2VuZGlmCi0KLSAgIGlmIChzZXRzW3hdLnNpemUgPT0gMCkgewotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKLSAgIH0KLSAgIGtleS0+aWR4ID0geDsKLQotICAgLyogYWxsb2NhdGUgYnVmZmVyICovCi0gICBidWYgPSBYTUFMTE9DKGtleXNpemUpOwotICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfTUVNOwotICAgfQotCi0gICAvKiBtYWtlIHVwIHJhbmRvbSBzdHJpbmcgKi8KLSAgIGlmIChwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWQoYnVmLCBrZXlzaXplLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylrZXlzaXplKSB7Ci0gICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsgCi0gICAgICBnb3RvIGVycm9yMjsKLSAgIH0KLQotICAgLyogaW5pdCBwYXJhbWV0ZXJzICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmcsICZwLCAma2V5LT54LCAma2V5LT55LCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBlcnJvcjsKLSAgIH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmZywgc2V0c1trZXktPmlkeF0uYmFzZSwgNjQpKSAhPSBNUF9PS0FZKSAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KCZwLCBzZXRzW2tleS0+aWR4XS5wcmltZSwgNjQpKSAhPSBNUF9PS0FZKSAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIGxvYWQgdGhlIHggdmFsdWUgKi8KLSAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oJmtleS0+eCwgYnVmLCBrZXlzaXplKSkgIT0gTVBfT0tBWSkgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZnLCAma2V5LT54LCAmcCwgJmtleS0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBrZXktPnR5cGUgPSBQS19QUklWQVRFOwotCi0gICBpZiAoKGVyciA9IG1wX3Nocmluaygma2V5LT54KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfc2hyaW5rKCZrZXktPnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBmcmVlIHVwIHJhbSAqLwotICAgZXJyID0gQ1JZUFRfT0s7Ci0gICBnb3RvIGRvbmU7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWVycm9yMjoKLSAgIG1wX2NsZWFyX211bHRpKCZrZXktPngsICZrZXktPnksIE5VTEwpOwotZG9uZToKLSNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLSAgIHplcm9tZW0oYnVmLCBrZXlzaXplKTsKLSNlbmRpZgotICAgbXBfY2xlYXJfbXVsdGkoJnAsICZnLCBOVUxMKTsKLSAgIFhGUkVFKGJ1Zik7Ci0gICByZXR1cm4gZXJyOwotfQotCi0vKioKLSAgRnJlZSB0aGUgYWxsb2NhdGVkIHJhbSBmb3IgYSBESCBrZXkKLSAgQHBhcmFtIGtleSAgIFRoZSBrZXkgd2hpY2ggeW91IHdpc2ggdG8gZnJlZQotKi8gCi12b2lkIGRoX2ZyZWUoZGhfa2V5ICprZXkpCi17Ci0gICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKLSAgIG1wX2NsZWFyX211bHRpKCZrZXktPngsICZrZXktPnksIE5VTEwpOwotfQotCi0vKioKLSAgRXhwb3J0IGEgREgga2V5IHRvIGEgYmluYXJ5IHBhY2tldAotICBAcGFyYW0gb3V0ICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGtleQotICBAcGFyYW0gb3V0bGVuIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERIIGtleQotICBAcGFyYW0gdHlwZSAgIFdoaWNoIHR5cGUgb2Yga2V5IChQS19QUklWQVRFIG9yIFBLX1BVQkxJQykKLSAgQHBhcmFtIGtleSAgICBUaGUga2V5IHlvdSB3aXNoIHRvIGV4cG9ydAotICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKLSovCi1pbnQgZGhfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwgZGhfa2V5ICprZXkpCi17Ci0gICB1bnNpZ25lZCBsb25nIHksIHo7Ci0gICBpbnQgZXJyOwotCi0gICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7Ci0KLSAgIC8qIGNhbiB3ZSBzdG9yZSB0aGUgc3RhdGljIGhlYWRlcj8gICovCi0gICBpZiAoKm91dGxlbiA8IChQQUNLRVRfU0laRSArIDIpKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwotICAgfQotICAgCi0gICBpZiAodHlwZSA9PSBQS19QUklWQVRFICYmIGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7Ci0gICB9Ci0KLSAgIC8qIGhlYWRlciAqLwotICAgeSA9IFBBQ0tFVF9TSVpFOwotCi0gICAvKiBoZWFkZXIgKi8KLSAgIG91dFt5KytdID0gdHlwZTsKLSAgIG91dFt5KytdID0gKHVuc2lnbmVkIGNoYXIpKHNldHNba2V5LT5pZHhdLnNpemUgLyA4KTsKLQotICAgLyogZXhwb3J0IHkgKi8KLSAgIE9VVFBVVF9CSUdOVU0oJmtleS0+eSwgb3V0LCB5LCB6KTsKLQotICAgaWYgKHR5cGUgPT0gUEtfUFJJVkFURSkgewotICAgICAgLyogZXhwb3J0IHggKi8KLSAgICAgIE9VVFBVVF9CSUdOVU0oJmtleS0+eCwgb3V0LCB5LCB6KTsKLSAgIH0KLQotICAgLyogc3RvcmUgaGVhZGVyICovCi0gICBwYWNrZXRfc3RvcmVfaGVhZGVyKG91dCwgUEFDS0VUX1NFQ1RfREgsIFBBQ0tFVF9TVUJfS0VZKTsKLQotICAgLyogc3RvcmUgbGVuICovCi0gICAqb3V0bGVuID0geTsKLSAgIHJldHVybiBDUllQVF9PSzsKLX0KLQotLyoqCi0gIEltcG9ydCBhIERIIGtleSBmcm9tIGEgYmluYXJ5IHBhY2tldAotICBAcGFyYW0gaW4gICAgIFRoZSBwYWNrZXQgdG8gcmVhZAotICBAcGFyYW0gaW5sZW4gIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IHBhY2tldAotICBAcGFyYW0ga2V5ICAgIFtvdXRdIFdoZXJlIHRvIGltcG9ydCB0aGUga2V5IHRvCi0gIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgb24gZXJyb3IgYWxsIGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJlZWQgYXV0b21hdGljYWxseQotKi8KLWludCBkaF9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGRoX2tleSAqa2V5KQotewotICAgdW5zaWduZWQgbG9uZyB4LCB5LCBzOwotICAgaW50IGVycjsKLQotICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKLQotICAgLyogbWFrZSBzdXJlIHZhbGlkIGxlbmd0aCAqLwotICAgaWYgKCgyK1BBQ0tFVF9TSVpFKSA+IGlubGVuKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7Ci0gICB9Ci0KLSAgIC8qIGNoZWNrIHR5cGUgYnl0ZSAqLwotICAgaWYgKChlcnIgPSBwYWNrZXRfdmFsaWRfaGVhZGVyKCh1bnNpZ25lZCBjaGFyICopaW4sIFBBQ0tFVF9TRUNUX0RILCBQQUNLRVRfU1VCX0tFWSkpICE9IENSWVBUX09LKSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgfQotCi0gICAvKiBpbml0ICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmtleS0+eCwgJmtleS0+eSwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci0gICB9Ci0KLSAgIC8qIGFkdmFuY2UgcGFzdCBwYWNrZXQgaGVhZGVyICovCi0gICB5ID0gUEFDS0VUX1NJWkU7Ci0KLSAgIC8qIGtleSB0eXBlLCBlLmcuIHByaXZhdGUsIHB1YmxpYyAqLwotICAga2V5LT50eXBlID0gKGludClpblt5KytdOwotCi0gICAvKiBrZXkgc2l6ZSBpbiBieXRlcyAqLwotICAgcyAgPSAodW5zaWduZWQgbG9uZylpblt5KytdICogODsKLQotICAgZm9yICh4ID0gMDsgKHMgPiAodW5zaWduZWQgbG9uZylzZXRzW3hdLnNpemUpICYmIChzZXRzW3hdLnNpemUgIT0gMCk7IHgrKyk7Ci0gICBpZiAoc2V0c1t4XS5zaXplID09IDApIHsKLSAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfS0VZU0laRTsKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICB9Ci0gICBrZXktPmlkeCA9IChpbnQpeDsKLQotICAgLyogdHlwZSBjaGVjayBib3RoIHZhbHVlcyAqLwotICAgaWYgKChrZXktPnR5cGUgIT0gUEtfUFVCTElDKSAmJiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUpKSAgewotICAgICAgZXJyID0gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICB9Ci0KLSAgIC8qIGlzIHRoZSBrZXkgaWR4IHZhbGlkPyAqLwotICAgaWYgKGlzX3ZhbGlkX2lkeChrZXktPmlkeCkgIT0gMSkgewotICAgICAgZXJyID0gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICB9Ci0KLSAgIC8qIGxvYWQgcHVibGljIHZhbHVlIGdeeCBtb2QgcCovCi0gICBJTlBVVF9CSUdOVU0oJmtleS0+eSwgaW4sIHgsIHksIGlubGVuKTsKLQotICAgaWYgKGtleS0+dHlwZSA9PSBQS19QUklWQVRFKSB7Ci0gICAgICBJTlBVVF9CSUdOVU0oJmtleS0+eCwgaW4sIHgsIHksIGlubGVuKTsKLSAgIH0KLQotICAgLyogZWxpbWluYXRlIHByaXZhdGUga2V5IGlmIHB1YmxpYyAqLwotICAgaWYgKGtleS0+dHlwZSA9PSBQS19QVUJMSUMpIHsKLSAgICAgIG1wX2NsZWFyKCZrZXktPngpOwotICAgfQotCi0gICByZXR1cm4gQ1JZUFRfT0s7Ci1lcnJvcjoKLSAgIG1wX2NsZWFyX211bHRpKCZrZXktPnksICZrZXktPngsIE5VTEwpOwotICAgcmV0dXJuIGVycjsKLX0KLQotLyoqCi0gICBDcmVhdGUgYSBESCBzaGFyZWQgc2VjcmV0LgotICAgQHBhcmFtIHByaXZhdGVfa2V5ICAgICBUaGUgcHJpdmF0ZSBESCBrZXkgaW4gdGhlIHBhaXIKLSAgIEBwYXJhbSBwdWJsaWNfa2V5ICAgICAgVGhlIHB1YmxpYyBESCBrZXkgaW4gdGhlIHBhaXIgCi0gICBAcGFyYW0gb3V0ICAgICAgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc2hhcmVkIGRhdGEKLSAgIEBwYXJhbSBvdXRsZW4gICAgICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgc2hhcmVkIGRhdGEuCi0gICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKLSovCi1pbnQgZGhfc2hhcmVkX3NlY3JldChkaF9rZXkgKnByaXZhdGVfa2V5LCBkaF9rZXkgKnB1YmxpY19rZXksCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKLXsKLSAgIG1wX2ludCB0bXAsIHA7Ci0gICB1bnNpZ25lZCBsb25nIHg7Ci0gICBpbnQgZXJyOwotCi0gICBMVENfQVJHQ0hLKHByaXZhdGVfa2V5ICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhwdWJsaWNfa2V5ICAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsob3V0ICAgICAgICAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKG91dGxlbiAgICAgICE9IE5VTEwpOwotCi0gICAvKiB0eXBlcyB2YWxpZD8gKi8KLSAgIGlmIChwcml2YXRlX2tleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7Ci0gICB9Ci0KLSAgIC8qIHNhbWUgaWR4PyAqLwotICAgaWYgKHByaXZhdGVfa2V5LT5pZHggIT0gcHVibGljX2tleS0+aWR4KSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKLSAgIH0KLQotICAgLyogY29tcHV0ZSB5XnggbW9kIHAgKi8KLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdG1wLCAmcCwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci0gICB9Ci0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmcCwgKGNoYXIgKilzZXRzW3ByaXZhdGVfa2V5LT5pZHhdLnByaW1lLCA2NCkpICE9IE1QX09LQVkpICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCgmcHVibGljX2tleS0+eSwgJnByaXZhdGVfa2V5LT54LCAmcCwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgLyogZW5vdWdoIHNwYWNlIGZvciBvdXRwdXQ/ICovCi0gICB4ID0gKHVuc2lnbmVkIGxvbmcpbXBfdW5zaWduZWRfYmluX3NpemUoJnRtcCk7Ci0gICBpZiAoKm91dGxlbiA8IHgpIHsKLSAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKLSAgICAgIGdvdG8gZG9uZTsKLSAgIH0KLSAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKCZ0bXAsIG91dCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICpvdXRsZW4gPSB4OwotICAgZXJyID0gQ1JZUFRfT0s7Ci0gICBnb3RvIGRvbmU7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmU6Ci0gICBtcF9jbGVhcl9tdWx0aSgmcCwgJnRtcCwgTlVMTCk7Ci0gICByZXR1cm4gZXJyOwotfQotCi0jaW5jbHVkZSAiZGhfc3lzLmMiCi0KLSNlbmRpZgotCi0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kaC9kaC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2RoL2RoX3N5cy5jIGIvc3JjL3BrL2RoL2RoX3N5cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjEwNTU2Li4wMDAwMDAwCi0tLSBhL3NyYy9way9kaC9kaF9zeXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCi0gKgotICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCi0gKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KLSAqCi0gKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwotICogZ3VhcmFudGVlIGl0IHdvcmtzLgotICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKLSAqLwotCi0vKioKLSAgQGZpbGUgZGhfc3lzLmMKLSAgREggQ3J5cHRvLCBUb20gU3QgRGVuaXMKLSovCi0gIAotLyoqCi0gIEVuY3J5cHQgYSBzaG9ydCBzeW1tZXRyaWMga2V5IHdpdGggYSBwdWJsaWMgREgga2V5Ci0gIEBwYXJhbSBpbiAgICAgICAgVGhlIHN5bW1ldHJpYyBrZXkgdG8gZW5jcnlwdAotICBAcGFyYW0gaW5sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGtleSAob2N0ZXRzKQotICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0Ci0gIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGNpcGhlcnRleHQKLSAgQHBhcmFtIHBybmcgICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQotICBAcGFyYW0gd3BybmcgICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCi0gIEBwYXJhbSBoYXNoICAgICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIGRlc2lyZWQgKG11c3QgcHJvZHVjZSBhIGRpZ2VzdCBvZiBzaXplID49IHRoZSBzaXplIG9mIHRoZSBwbGFpbnRleHQpCi0gIEBwYXJhbSBrZXkgICAgICAgVGhlIHB1YmxpYyBrZXkgeW91IHdpc2ggdG8gZW5jcnlwdCB3aXRoLgotICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKLSovCi1pbnQgZGhfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkaF9rZXkgKmtleSkKLXsKLSAgICB1bnNpZ25lZCBjaGFyICpwdWJfZXhwdCwgKmRoX3NoYXJlZCwgKnNrZXk7Ci0gICAgZGhfa2V5ICAgICAgICBwdWJrZXk7Ci0gICAgdW5zaWduZWQgbG9uZyB4LCB5LCB6LCBoYXNoc2l6ZSwgcHVia2V5c2l6ZTsKLSAgICBpbnQgICAgICAgICAgIGVycjsKLQotICAgIExUQ19BUkdDSEsoaW4gIT0gTlVMTCk7Ci0gICAgTFRDX0FSR0NISyhvdXQgICAhPSBOVUxMKTsKLSAgICBMVENfQVJHQ0hLKG91dGxlbiAgICE9IE5VTEwpOwotICAgIExUQ19BUkdDSEsoa2V5ICAgIT0gTlVMTCk7Ci0KLSAgICAvKiBjaGVjayB0aGF0IHdwcm5nL2hhc2ggYXJlIG5vdCBpbnZhbGlkICovCi0gICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmIChpbmxlbiA+IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZSkgIHsKLSAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfSEFTSDsKLSAgICB9Ci0KLSAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KLSAgICBwdWJfZXhwdCAgPSBYTUFMTE9DKERIX0JVRl9TSVpFKTsKLSAgICBkaF9zaGFyZWQgPSBYTUFMTE9DKERIX0JVRl9TSVpFKTsKLSAgICBza2V5ICAgICAgPSBYTUFMTE9DKE1BWEJMT0NLU0laRSk7Ci0gICAgaWYgKHB1Yl9leHB0ID09IE5VTEwgfHwgZGhfc2hhcmVkID09IE5VTEwgfHwgc2tleSA9PSBOVUxMKSB7Ci0gICAgICAgaWYgKHB1Yl9leHB0ICE9IE5VTEwpIHsKLSAgICAgICAgICBYRlJFRShwdWJfZXhwdCk7Ci0gICAgICAgfQotICAgICAgIGlmIChkaF9zaGFyZWQgIT0gTlVMTCkgewotICAgICAgICAgIFhGUkVFKGRoX3NoYXJlZCk7Ci0gICAgICAgfQotICAgICAgIGlmIChza2V5ICE9IE5VTEwpIHsKLSAgICAgICAgICBYRlJFRShza2V5KTsKLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgICB9Ci0KLSAgICAvKiBtYWtlIGEgcmFuZG9tIGtleSBhbmQgZXhwb3J0IHRoZSBwdWJsaWMgY29weSAqLwotICAgIGlmICgoZXJyID0gZGhfbWFrZV9rZXkocHJuZywgd3BybmcsIGRoX2dldF9zaXplKGtleSksICZwdWJrZXkpKSAhPSBDUllQVF9PSykgewotICAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0KLSAgICBwdWJrZXlzaXplID0gREhfQlVGX1NJWkU7Ci0gICAgaWYgKChlcnIgPSBkaF9leHBvcnQocHViX2V4cHQsICZwdWJrZXlzaXplLCBQS19QVUJMSUMsICZwdWJrZXkpKSAhPSBDUllQVF9PSykgewotICAgICAgIGRoX2ZyZWUoJnB1YmtleSk7Ci0gICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLQotICAgIC8qIG5vdyBjaGVjayBpZiB0aGUgb3V0IGJ1ZmZlciBpcyBiaWcgZW5vdWdoICovCi0gICAgaWYgKCpvdXRsZW4gPCAoMSArIDQgKyA0ICsgUEFDS0VUX1NJWkUgKyBwdWJrZXlzaXplICsgaW5sZW4pKSB7Ci0gICAgICAgZGhfZnJlZSgmcHVia2V5KTsKLSAgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLQotICAgIC8qIG1ha2UgcmFuZG9tIGtleSAqLwotICAgIGhhc2hzaXplICA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKLQotICAgIHggPSBESF9CVUZfU0laRTsKLSAgICBpZiAoKGVyciA9IGRoX3NoYXJlZF9zZWNyZXQoJnB1YmtleSwga2V5LCBkaF9zaGFyZWQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICBkaF9mcmVlKCZwdWJrZXkpOwotICAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gICAgZGhfZnJlZSgmcHVia2V5KTsKLQotICAgIHogPSBNQVhCTE9DS1NJWkU7Ci0gICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShoYXNoLCBkaF9zaGFyZWQsIHgsIHNrZXksICZ6KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotCi0gICAgLyogc3RvcmUgaGVhZGVyICovCi0gICAgcGFja2V0X3N0b3JlX2hlYWRlcihvdXQsIFBBQ0tFVF9TRUNUX0RILCBQQUNLRVRfU1VCX0VOQ19LRVkpOwotCi0gICAgLyogb3V0cHV0IGhlYWRlciAqLwotICAgIHkgPSBQQUNLRVRfU0laRTsKLQotICAgIC8qIHNpemUgb2YgaGFzaCBuYW1lIGFuZCB0aGUgbmFtZSBpdHNlbGYgKi8KLSAgICBvdXRbeSsrXSA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5JRDsKLQotICAgIC8qIGxlbmd0aCBvZiBESCBwdWJrZXkgYW5kIHRoZSBrZXkgaXRzZWxmICovCi0gICAgU1RPUkUzMkwocHVia2V5c2l6ZSwgb3V0K3kpOwotICAgIHkgKz0gNDsKLSAgICBmb3IgKHggPSAwOyB4IDwgcHVia2V5c2l6ZTsgeCsrLCB5KyspIHsKLSAgICAgICAgb3V0W3ldID0gcHViX2V4cHRbeF07Ci0gICAgfQotCi0gICAgLyogU3RvcmUgdGhlIGVuY3J5cHRlZCBrZXkgKi8KLSAgICBTVE9SRTMyTChpbmxlbiwgb3V0K3kpOwotICAgIHkgKz0gNDsKLQotICAgIGZvciAoeCA9IDA7IHggPCBpbmxlbjsgeCsrLCB5KyspIHsKLSAgICAgIG91dFt5XSA9IHNrZXlbeF0gXiBpblt4XTsKLSAgICB9Ci0gICAgKm91dGxlbiA9IHk7Ci0KLSAgICBlcnIgPSBDUllQVF9PSzsKLUxCTF9FUlI6Ci0jaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi0gICAgLyogY2xlYW4gdXAgKi8KLSAgICB6ZXJvbWVtKHB1Yl9leHB0LCAgREhfQlVGX1NJWkUpOwotICAgIHplcm9tZW0oZGhfc2hhcmVkLCBESF9CVUZfU0laRSk7Ci0gICAgemVyb21lbShza2V5LCAgICAgIE1BWEJMT0NLU0laRSk7Ci0jZW5kaWYKLSAgICBYRlJFRShza2V5KTsKLSAgICBYRlJFRShkaF9zaGFyZWQpOwotICAgIFhGUkVFKHB1Yl9leHB0KTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qKgotICAgRGVjcnlwdCBhIERIIGVuY3J5cHRlZCBzeW1tZXRyaWMga2V5Ci0gICBAcGFyYW0gaW4gICAgICAgVGhlIERIIGVuY3J5cHRlZCBwYWNrZXQKLSAgIEBwYXJhbSBpbmxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBESCBlbmNyeXB0ZWQgcGFja2V0Ci0gICBAcGFyYW0gb3V0ICAgICAgVGhlIHBsYWludGV4dAotICAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdICBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBwbGFpbnRleHQKLSAgIEBwYXJhbSBrZXkgICAgICBUaGUgcHJpdmF0ZSBESCBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgcHVibGljIGtleSB0aGF0IGVuY3J5cHRlZCB0aGUgcGxhaW50ZXh0Ci0gICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKLSovCi1pbnQgZGhfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgIGRoX2tleSAqa2V5KQotewotICAgdW5zaWduZWQgY2hhciAqc2hhcmVkX3NlY3JldCwgKnNrZXk7Ci0gICB1bnNpZ25lZCBsb25nICB4LCB5LCB6LCBoYXNoc2l6ZSwga2V5c2l6ZTsKLSAgIGludCAgICAgICAgICAgIGhhc2gsIGVycjsKLSAgIGRoX2tleSAgICAgICAgIHB1YmtleTsKLQotICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7Ci0KLSAgIC8qIHJpZ2h0IGtleSB0eXBlPyAqLwotICAgaWYgKGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7Ci0gICB9Ci0KLSAgIC8qIGFsbG9jYXRlIHJhbSAqLwotICAgc2hhcmVkX3NlY3JldCA9IFhNQUxMT0MoREhfQlVGX1NJWkUpOwotICAgc2tleSAgICAgICAgICA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFKTsKLSAgIGlmIChzaGFyZWRfc2VjcmV0ID09IE5VTEwgfHwgc2tleSA9PSBOVUxMKSB7Ci0gICAgICBpZiAoc2hhcmVkX3NlY3JldCAhPSBOVUxMKSB7Ci0gICAgICAgICBYRlJFRShzaGFyZWRfc2VjcmV0KTsKLSAgICAgIH0KLSAgICAgIGlmIChza2V5ICE9IE5VTEwpIHsKLSAgICAgICAgIFhGUkVFKHNrZXkpOwotICAgICAgfQotICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgIH0KLQotICAgLyogY2hlY2sgaWYgaW5pdGlhbCBoZWFkZXIgc2hvdWxkIGZpdCAqLwotICAgaWYgKGlubGVuIDwgUEFDS0VUX1NJWkUrMSs0KzQpIHsKLSAgICAgIGVyciA9ICBDUllQVF9JTlZBTElEX1BBQ0tFVDsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0gZWxzZSB7Ci0gICAgICBpbmxlbiAtPSBQQUNLRVRfU0laRSsxKzQrNDsKLSAgIH0KLQotICAgLyogaXMgaGVhZGVyIGNvcnJlY3Q/ICovCi0gICBpZiAoKGVyciA9IHBhY2tldF92YWxpZF9oZWFkZXIoKHVuc2lnbmVkIGNoYXIgKilpbiwgUEFDS0VUX1NFQ1RfREgsIFBBQ0tFVF9TVUJfRU5DX0tFWSkpICE9IENSWVBUX09LKSAgewotICAgICAgZ290byBMQkxfRVJSOwotICAgfQotCi0gICAvKiBub3cgbGV0cyBnZXQgdGhlIGhhc2ggbmFtZSAqLwotICAgeSA9IFBBQ0tFVF9TSVpFOwotICAgaGFzaCA9IGZpbmRfaGFzaF9pZChpblt5KytdKTsKLSAgIGlmIChoYXNoID09IC0xKSB7Ci0gICAgICBlcnIgPSBDUllQVF9JTlZBTElEX0hBU0g7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0KLSAgIC8qIGNvbW1vbiB2YWx1ZXMgKi8KLSAgIGhhc2hzaXplICA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKLQotICAgLyogZ2V0IHB1YmxpYyBrZXkgKi8KLSAgIExPQUQzMkwoeCwgaW4reSk7Ci0gICAKLSAgIC8qIG5vdyBjaGVjayBpZiB0aGUgaW1wb3J0ZWQga2V5IHdpbGwgZml0ICovCi0gICBpZiAoaW5sZW4gPCB4KSB7Ci0gICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0gZWxzZSB7Ci0gICAgICBpbmxlbiAtPSB4OwotICAgfQotICAgCi0gICB5ICs9IDQ7Ci0gICBpZiAoKGVyciA9IGRoX2ltcG9ydChpbit5LCB4LCAmcHVia2V5KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0KLSAgIHkgKz0geDsKLQotICAgLyogbWFrZSBzaGFyZWQga2V5ICovCi0gICB4ID0gREhfQlVGX1NJWkU7Ci0gICBpZiAoKGVyciA9IGRoX3NoYXJlZF9zZWNyZXQoa2V5LCAmcHVia2V5LCBzaGFyZWRfc2VjcmV0LCAmeCkpICE9IENSWVBUX09LKSB7Ci0gICAgICBkaF9mcmVlKCZwdWJrZXkpOwotICAgICAgZ290byBMQkxfRVJSOwotICAgfQotICAgZGhfZnJlZSgmcHVia2V5KTsKLQotICAgeiA9IE1BWEJMT0NLU0laRTsKLSAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaCwgc2hhcmVkX3NlY3JldCwgeCwgc2tleSwgJnopKSAhPSBDUllQVF9PSykgewotICAgICAgZ290byBMQkxfRVJSOwotICAgfQotCi0gICAvKiBsb2FkIGluIHRoZSBlbmNyeXB0ZWQga2V5ICovCi0gICBMT0FEMzJMKGtleXNpemUsIGluK3kpOwotICAgCi0gICAvKiB3aWxsIHRoZSBvdXQgZml0IGFzIHBhcnQgb2YgdGhlIGlucHV0ICovCi0gICBpZiAoaW5sZW4gPCBrZXlzaXplKSB7Ci0gICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0gZWxzZSB7Ci0gICAgICBpbmxlbiAtPSBrZXlzaXplOwotICAgfQotICAgCi0gICBpZiAoa2V5c2l6ZSA+ICpvdXRsZW4pIHsKLSAgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICAgZ290byBMQkxfRVJSOwotICAgfQotICAgeSArPSA0OwotCi0gICAqb3V0bGVuID0ga2V5c2l6ZTsKLQotICAgZm9yICh4ID0gMDsgeCA8IGtleXNpemU7IHgrKywgeSsrKSB7Ci0gICAgICBvdXRbeF0gPSBza2V5W3hdIF4gaW5beV07Ci0gICB9Ci0KLSAgIGVyciA9IENSWVBUX09LOwotTEJMX0VSUjoKLSNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKLSAgIHplcm9tZW0oc2hhcmVkX3NlY3JldCwgREhfQlVGX1NJWkUpOwotICAgemVyb21lbShza2V5LCAgICAgICAgICBNQVhCTE9DS1NJWkUpOwotI2VuZGlmCi0KLSAgIFhGUkVFKHNrZXkpOwotICAgWEZSRUUoc2hhcmVkX3NlY3JldCk7Ci0KLSAgIHJldHVybiBlcnI7Ci19Ci0KLS8qIHBlcmZvcm0gYW4gRWxHYW1hbCBTaWduYXR1cmUgb2YgYSBoYXNoIAotICoKLSAqIFRoZSBtYXRoIHdvcmtzIGFzIGZvbGxvd3MuICB4IGlzIHRoZSBwcml2YXRlIGtleSwgTSBpcyB0aGUgbWVzc2FnZSB0byBzaWduCi0gCi0gMS4gIHBpY2sgYSByYW5kb20gawotIDIuICBjb21wdXRlIGEgPSBnXmsgbW9kIHAKLSAzLiAgY29tcHV0ZSBiID0gKE0gLSB4YSkvayBtb2QgcAotIDQuICBTZW5kIChhLGIpCi0gCi0gTm93IHRvIHZlcmlmeSB3aXRoIHk9Z154IG1vZCBwLCBhIGFuZCBiCi0gCi0gMS4gIGNvbXB1dGUgeV5hICogYV5iID0gZ14oeGEpICogZ14oayooTS14YSkvaykKLSAgICAgICAgICAgICAgICAgICAgICAgPSBnXih4YSArIChNIC0geGEpKQotICAgICAgICAgICAgICAgICAgICAgICA9IGdeTSBbYWxsIG1vZCBwXQotICAgICAgICAgICAgICAgICAgICAgICAKLSAyLiAgQ29tcGFyZSBhZ2FpbnN0IGdeTSBtb2QgcCBbYmFzZWQgb24gaW5wdXQgaGFzaF0uCi0gMy4gIElmIHJlc3VsdCBvZiAjMiA9PSByZXN1bHQgb2YgIzEgdGhlbiBzaWduYXR1cmUgdmFsaWQgCi0qLwotCi0vKioKLSAgU2lnbiBhIG1lc3NhZ2UgZGlnZXN0IHVzaW5nIGEgREggcHJpdmF0ZSBrZXkgCi0gIEBwYXJhbSBpbiAgICAgIFRoZSBkYXRhIHRvIHNpZ24KLSAgQHBhcmFtIGlubGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgKG9jdGV0cykKLSAgQHBhcmFtIG91dCAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBzaWduYXR1cmUKLSAgQHBhcmFtIG91dGxlbiAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgb3V0cHV0Ci0gIEBwYXJhbSBwcm5nICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCi0gIEBwYXJhbSB3cHJuZyAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCi0gIEBwYXJhbSBrZXkgICAgIEEgcHJpdmF0ZSBESCBrZXkKLSAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCi0qLwotaW50IGRoX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGRoX2tleSAqa2V5KQotewotICAgbXBfaW50ICAgICAgICAgYSwgYiwgaywgbSwgZywgcCwgcDEsIHRtcDsKLSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKLSAgIHVuc2lnbmVkIGxvbmcgIHgsIHk7Ci0gICBpbnQgICAgICAgICAgICBlcnI7Ci0KLSAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOwotCi0gICAvKiBjaGVjayBwYXJhbWV0ZXJzICovCi0gICBpZiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUpIHsKLSAgICAgIHJldHVybiBDUllQVF9QS19OT1RfUFJJVkFURTsKLSAgIH0KLQotICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgIHJldHVybiBlcnI7Ci0gICB9Ci0KLSAgIC8qIGlzIHRoZSBJRFggdmFsaWQgPyAgKi8KLSAgIGlmIChpc192YWxpZF9pZHgoa2V5LT5pZHgpICE9IDEpIHsKLSAgICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1RZUEU7Ci0gICB9Ci0KLSAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgYnVmICovCi0gICBidWYgPSBYTUFMTE9DKDUyMCk7Ci0KLSAgIC8qIG1ha2UgdXAgYSByYW5kb20gdmFsdWUgaywKLSAgICAqIHNpbmNlIHRoZSBvcmRlciBvZiB0aGUgZ3JvdXAgaXMgcHJpbWUKLSAgICAqIHdlIG5lZWQgbm90IGNoZWNrIGlmIGdjZChrLCByKSBpcyAxIAotICAgICovCi0gICBpZiAocHJuZ19kZXNjcmlwdG9yW3dwcm5nXS5yZWFkKGJ1Ziwgc2V0c1trZXktPmlkeF0uc2l6ZSwgcHJuZykgIT0gCi0gICAgICAgKHVuc2lnbmVkIGxvbmcpKHNldHNba2V5LT5pZHhdLnNpemUpKSB7Ci0gICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0KLQotICAgLyogaW5pdCBiaWdudW1zICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmEsICZiLCAmaywgJm0sICZwLCAmZywgJnAxLCAmdG1wLCBOVUxMKSkgIT0gTVBfT0tBWSkgeyAKLSAgICAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0KLQotICAgLyogbG9hZCBrIGFuZCBtICovCi0gICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKCZtLCAodW5zaWduZWQgY2hhciAqKWluLCBpbmxlbikpICE9IE1QX09LQVkpICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oJmssIGJ1Ziwgc2V0c1trZXktPmlkeF0uc2l6ZSkpICE9IE1QX09LQVkpICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBsb2FkIGcsIHAgYW5kIHAxICovCi0gICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoJmcsIHNldHNba2V5LT5pZHhdLmJhc2UsIDY0KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmcCwgc2V0c1trZXktPmlkeF0ucHJpbWUsIDY0KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9zdWJfZCgmcCwgMSwgJnAxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX2Rpdl8yKCZwMSwgJnAxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogcDEgPSAocC0xKS8yICovCi0KLSAgIC8qIG5vdyBnZXQgYSA9IGdeayBtb2QgcCAqLwotICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZnLCAmaywgJnAsICZhKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIG5vdyBmaW5kIE0gPSB4YSArIGtiIG1vZCBwMSBvciBqdXN0IGIgPSAoTSAtIHhhKS9rIG1vZCBwMSAqLwotICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoJmssICZwMSwgJmspKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IC8qIGsgPSAxL2sgbW9kIHAxICovCi0gICBpZiAoKGVyciA9IG1wX211bG1vZCgmYSwgJmtleS0+eCwgJnAxLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogdG1wID0geGEgKi8KLSAgIGlmICgoZXJyID0gbXBfc3VibW9kKCZtLCAmdG1wLCAmcDEsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiB0bXAgPSBNIC0geGEgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsbW9kKCZrLCAmdG1wLCAmcDEsICZiKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiBiID0gKE0gLSB4YSkvayAqLwotICAgCi0gICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KLSAgIGlmICgodW5zaWduZWQgbG9uZykoUEFDS0VUX1NJWkUgKyA0ICsgNCArIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZhKSArIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZiKSkgPiAqb3V0bGVuKSB7Ci0gICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0gICAKLSAgIC8qIHN0b3JlIGhlYWRlciAgKi8KLSAgIHkgPSBQQUNLRVRfU0laRTsKLQotICAgLyogbm93IHN0b3JlIHRoZW0gYm90aCAoYSxiKSAqLwotICAgeCA9ICh1bnNpZ25lZCBsb25nKW1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZhKTsKLSAgIFNUT1JFMzJMKHgsIG91dCt5KTsgIHkgKz0gNDsKLSAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKCZhLCBvdXQreSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgeSArPSB4OwotCi0gICB4ID0gKHVuc2lnbmVkIGxvbmcpbXBfdW5zaWduZWRfYmluX3NpemUoJmIpOwotICAgU1RPUkUzMkwoeCwgb3V0K3kpOyAgeSArPSA0OwotICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4oJmIsIG91dCt5KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB5ICs9IHg7Ci0KLSAgIC8qIGNoZWNrIGlmIHNpemUgdG9vIGJpZyAqLwotICAgaWYgKCpvdXRsZW4gPCB5KSB7Ci0gICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0KLSAgIC8qIHN0b3JlIGhlYWRlciAqLwotICAgcGFja2V0X3N0b3JlX2hlYWRlcihvdXQsIFBBQ0tFVF9TRUNUX0RILCBQQUNLRVRfU1VCX1NJR05FRCk7Ci0gICAqb3V0bGVuID0geTsKLQotICAgZXJyID0gQ1JZUFRfT0s7Ci0gICBnb3RvIExCTF9FUlI7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLUxCTF9FUlI6Ci0gICBtcF9jbGVhcl9tdWx0aSgmdG1wLCAmcDEsICZnLCAmcCwgJm0sICZrLCAmYiwgJmEsIE5VTEwpOwotCi0gICBYRlJFRShidWYpOwotCi0gICByZXR1cm4gZXJyOwotfQotCi0KLS8qKgotICAgVmVyaWZ5IHRoZSBzaWduYXR1cmUgZ2l2ZW4KLSAgIEBwYXJhbSBzaWcgICAgICAgIFRoZSBzaWduYXR1cmUKLSAgIEBwYXJhbSBzaWdsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNpZ25hdHVyZSAob2N0ZXRzKQotICAgQHBhcmFtIGhhc2ggICAgICAgVGhlIGhhc2ggdGhhdCB3YXMgc2lnbmVkCi0gICBAcGFyYW0gaGFzaGxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIChvY3RldHMpCi0gICBAcGFyYW0gc3RhdCAgICAgICBbb3V0XSBSZXN1bHQgb2Ygc2lnbmF0dXJlIGNvbXBhcmlzb24sIDE9PXZhbGlkLCAwPT1pbnZhbGlkCi0gICBAcGFyYW0ga2V5ICAgICAgICBUaGUgcHVibGljIERIIGtleSB0aGF0IHNpZ25lZCB0aGUgaGFzaAotICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjc2Vzc2Z1bCAoZXZlbiBpZiBzaWduYXR1cmUgaXMgaW52YWxpZCkKLSovCi1pbnQgZGhfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGhhc2hsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3RhdCwgZGhfa2V5ICprZXkpCi17Ci0gICBtcF9pbnQgICAgICAgIGEsIGIsIHAsIGcsIG0sIHRtcDsKLSAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKLSAgIGludCAgICAgICAgICAgZXJyOwotCi0gICBMVENfQVJHQ0hLKHNpZyAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKGhhc2ggIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKHN0YXQgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7Ci0KLSAgIC8qIGRlZmF1bHQgdG8gaW52YWxpZCAqLwotICAgKnN0YXQgPSAwOwotCi0gICAvKiBjaGVjayBpbml0aWFsIGlucHV0IGxlbmd0aCAqLwotICAgaWYgKHNpZ2xlbiA8IFBBQ0tFVF9TSVpFKzQrNCkgewotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOwotICAgfSAKLQotICAgLyogaGVhZGVyIG9rPyAqLwotICAgaWYgKChlcnIgPSBwYWNrZXRfdmFsaWRfaGVhZGVyKCh1bnNpZ25lZCBjaGFyICopc2lnLCBQQUNLRVRfU0VDVF9ESCwgUEFDS0VUX1NVQl9TSUdORUQpKSAhPSBDUllQVF9PSykgewotICAgICAgcmV0dXJuIGVycjsKLSAgIH0KLSAgIAotICAgLyogZ2V0IGhhc2ggb3V0IG9mIHBhY2tldCAqLwotICAgeSA9IFBBQ0tFVF9TSVpFOwotCi0gICAvKiBpbml0IGFsbCBiaWdudW1zICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmEsICZwLCAmYiwgJmcsICZtLCAmdG1wLCBOVUxMKSkgIT0gTVBfT0tBWSkgeyAKLSAgICAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci0gICB9Ci0KLSAgIC8qIGxvYWQgYSBhbmQgYiAqLwotICAgSU5QVVRfQklHTlVNKCZhLCBzaWcsIHgsIHksIHNpZ2xlbik7Ci0gICBJTlBVVF9CSUdOVU0oJmIsIHNpZywgeCwgeSwgc2lnbGVuKTsKLQotICAgLyogbG9hZCBwIGFuZCBnICovCi0gICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoJnAsIHNldHNba2V5LT5pZHhdLnByaW1lLCA2NCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IxOyB9Ci0gICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoJmcsIHNldHNba2V5LT5pZHhdLmJhc2UsIDY0KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IxOyB9Ci0KLSAgIC8qIGxvYWQgbSAqLwotICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbigmbSwgKHVuc2lnbmVkIGNoYXIgKiloYXNoLCBoYXNobGVuKSkgIT0gTVBfT0tBWSkgeyBnb3RvIGVycm9yMTsgfQotCi0gICAvKiBmaW5kIGdebSBtb2QgcCAqLwotICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZnLCAmbSwgJnAsICZtKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMTsgfSAvKiBtID0gZ15tIG1vZCBwICovCi0KLSAgIC8qIGZpbmQgeV5hICogYV5iICovCi0gICBpZiAoKGVyciA9IG1wX2V4cHRtb2QoJmtleS0+eSwgJmEsICZwLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICB7IGdvdG8gZXJyb3IxOyB9IC8qIHRtcCA9IHleYSBtb2QgcCAqLwotICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZhLCAmYiwgJnAsICZhKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMTsgfSAvKiBhID0gYV5iIG1vZCBwICovCi0gICBpZiAoKGVyciA9IG1wX211bG1vZCgmYSwgJnRtcCwgJnAsICZhKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IxOyB9IC8qIGEgPSB5XmEgKiBhXmIgbW9kIHAgKi8KLQotICAgLyogeV5hICogYV5iID09IGdebSA/Pz8gKi8KLSAgIGlmIChtcF9jbXAoJmEsICZtKSA9PSAwKSB7Ci0gICAgICAqc3RhdCA9IDE7Ci0gICB9Ci0KLSAgIC8qIGNsZWFuIHVwICovCi0gICBlcnIgPSBDUllQVF9PSzsKLSAgIGdvdG8gZG9uZTsKLWVycm9yMToKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWVycm9yOgotZG9uZToKLSAgIG1wX2NsZWFyX211bHRpKCZ0bXAsICZtLCAmZywgJnAsICZiLCAmYSwgTlVMTCk7Ci0gICByZXR1cm4gZXJyOwotfQotCi0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kaC9kaF9zeXMuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9kc2EvZHNhX2RlY3J5cHRfa2V5LmMgYi9zcmMvcGsvZHNhL2RzYV9kZWNyeXB0X2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmVkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZHNhL2RzYV9kZWNyeXB0X2tleS5jCkBAIC0wLDAgKzEsMTM5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkc2FfZGVjcnlwdF9rZXkuYworICBEU0EgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1EU0EKKworLyoqCisgIERlY3J5cHQgYW4gRFNBIGVuY3J5cHRlZCBrZXkKKyAgQHBhcmFtIGluICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgIEBwYXJhbSBpbmxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IChvY3RldHMpCisgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBwbGFpbnRleHQKKyAgQHBhcmFtIGtleSAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHByaXZhdGUgRFNBIGtleQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZHNhX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KQoreworICAgdW5zaWduZWQgY2hhciAgKnNrZXksICpleHB0OworICAgdm9pZCAgICAgICAgICAgKmdfcHViOworICAgdW5zaWduZWQgbG9uZyAgeCwgeSwgaGFzaE9JRFszMl07CisgICBpbnQgICAgICAgICAgICBoYXNoLCBlcnI7CisgICBsdGNfYXNuMV9saXN0ICBkZWNvZGVbM107CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworCisgICAvKiByaWdodCBrZXkgdHlwZT8gKi8KKyAgIGlmIChrZXktPnR5cGUgIT0gUEtfUFJJVkFURSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX05PVF9QUklWQVRFOworICAgfQorICAgCisgICAvKiBkZWNvZGUgdG8gZmluZCBvdXQgaGFzaCAqLworICAgTFRDX1NFVF9BU04xKGRlY29kZSwgMCwgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVIsIGhhc2hPSUQsIHNpemVvZihoYXNoT0lEKS9zaXplb2YoaGFzaE9JRFswXSkpOworIAorICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKGluLCBpbmxlbiwgZGVjb2RlLCAxKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGhhc2ggPSBmaW5kX2hhc2hfb2lkKGhhc2hPSUQsIGRlY29kZVswXS5zaXplKTsgICAgICAgICAgICAgICAgICAgCisgICBpZiAoaGFzaF9pc192YWxpZChoYXNoKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiB3ZSBub3cgaGF2ZSB0aGUgaGFzaCEgKi8KKyAgIAorICAgaWYgKChlcnIgPSBtcF9pbml0KCZnX3B1YikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgIGV4cHQgICA9IFhNQUxMT0MobXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSArIDEpOworICAgc2tleSAgID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgaWYgKGV4cHQgPT0gTlVMTCB8fCBza2V5ID09IE5VTEwpIHsKKyAgICAgIGlmIChleHB0ICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKGV4cHQpOworICAgICAgfQorICAgICAgaWYgKHNrZXkgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoc2tleSk7CisgICAgICB9CisgICAgICBtcF9jbGVhcihnX3B1Yik7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorICAgCisgICBMVENfU0VUX0FTTjEoZGVjb2RlLCAxLCBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgICBnX3B1YiwgICAgICAxVUwpOworICAgTFRDX1NFVF9BU04xKGRlY29kZSwgMiwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgIHNrZXksICAgICAgTUFYQkxPQ0tTSVpFKTsKKworICAgLyogcmVhZCB0aGUgc3RydWN0dXJlIGluIG5vdyAqLworICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKGluLCBpbmxlbiwgZGVjb2RlLCAzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogbWFrZSBzaGFyZWQga2V5ICovCisgICB4ID0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSArIDE7CisgICBpZiAoKGVyciA9IGRzYV9zaGFyZWRfc2VjcmV0KGtleS0+eCwgZ19wdWIsIGtleSwgZXhwdCwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICB5ID0gTUlOKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cCkgKyAxLCBNQVhCTE9DS1NJWkUpOworICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShoYXNoLCBleHB0LCB4LCBleHB0LCAmeSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIGVuc3VyZSB0aGUgaGFzaCBvZiB0aGUgc2hhcmVkIHNlY3JldCBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIGVuY3J5cHQgaXRzZWxmICovCisgICBpZiAoZGVjb2RlWzJdLnNpemUgPiB5KSB7CisgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogYXZvaWQgYnVmZmVyIG92ZXJmbG93ICovCisgICBpZiAoKm91dGxlbiA8IGRlY29kZVsyXS5zaXplKSB7CisgICAgICAqb3V0bGVuID0gZGVjb2RlWzJdLnNpemU7CisgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIERlY3J5cHQgdGhlIGtleSAqLworICAgZm9yICh4ID0gMDsgeCA8IGRlY29kZVsyXS5zaXplOyB4KyspIHsKKyAgICAgb3V0W3hdID0gZXhwdFt4XSBeIHNrZXlbeF07CisgICB9CisgICAqb3V0bGVuID0geDsKKworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShleHB0LCAgIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cCkgKyAxKTsKKyAgIHplcm9tZW0oc2tleSwgICBNQVhCTE9DS1NJWkUpOworI2VuZGlmCisKKyAgIFhGUkVFKGV4cHQpOworICAgWEZSRUUoc2tleSk7CisgIAorICAgbXBfY2xlYXIoZ19wdWIpOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAzOjE4OjQzICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2RzYS9kc2FfZW5jcnlwdF9rZXkuYyBiL3NyYy9way9kc2EvZHNhX2VuY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmYTRkZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9kc2EvZHNhX2VuY3J5cHRfa2V5LmMKQEAgLTAsMCArMSwxMzUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRzYV9lbmNyeXB0X2tleS5jCisgIERTQSBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTURTQQorCisvKioKKyAgRW5jcnlwdCBhIHN5bW1ldHJpYyBrZXkgd2l0aCBEU0EKKyAgQHBhcmFtIGluICAgICAgICAgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdhbnQgdG8gZW5jcnlwdAorICBAcGFyYW0gaW5sZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBrZXkgdG8gZW5jcnlwdCAob2N0ZXRzKQorICBAcGFyYW0gb3V0ICAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBjaXBoZXJ0ZXh0CisgIEBwYXJhbSBvdXRsZW4gICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIHBybmcgICAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIHdwcm5nICAgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIHlvdSB3aXNoIHRvIHVzZSAKKyAgQHBhcmFtIGhhc2ggICAgICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIHlvdSB3YW50IHRvIHVzZSAKKyAgQHBhcmFtIGtleSAgICAgICAgVGhlIERTQSBrZXkgeW91IHdhbnQgdG8gZW5jcnlwdCB0bworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZHNhX2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGhhc2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpCit7CisgICAgdW5zaWduZWQgY2hhciAqZXhwdCwgKnNrZXk7CisgICAgdm9pZCAgICAgICAgICAqZ19wdWIsICpnX3ByaXY7CisgICAgdW5zaWduZWQgbG9uZyAgeCwgeTsKKyAgICBpbnQgICAgICAgICAgICBlcnI7CisKKyAgICBMVENfQVJHQ0hLKGluICAgICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0bGVuICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGtleSAgICAgIT0gTlVMTCk7CisKKyAgICAvKiBjaGVjayB0aGF0IHdwcm5nL2NpcGhlci9oYXNoIGFyZSBub3QgaW52YWxpZCAqLworICAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBpZiAoaW5sZW4gPiBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemUpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9IQVNIOworICAgIH0KKworICAgIC8qIG1ha2UgYSByYW5kb20ga2V5IGFuZCBleHBvcnQgdGhlIHB1YmxpYyBjb3B5ICovCisgICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZnX3B1YiwgJmdfcHJpdiwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAKKyAgICBleHB0ICAgICAgID0gWE1BTExPQyhtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnApICsgMSk7CisgICAgc2tleSAgICAgICA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFKTsKKyAgICBpZiAoZXhwdCA9PSBOVUxMICB8fCBza2V5ID09IE5VTEwpIHsKKyAgICAgICBpZiAoZXhwdCAhPSBOVUxMKSB7CisgICAgICAgICAgWEZSRUUoZXhwdCk7CisgICAgICAgfQorICAgICAgIGlmIChza2V5ICE9IE5VTEwpIHsKKyAgICAgICAgICBYRlJFRShza2V5KTsKKyAgICAgICB9CisgICAgICAgbXBfY2xlYXJfbXVsdGkoZ19wdWIsIGdfcHJpdiwgTlVMTCk7CisgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICB9CisgICAgCisgICAgLyogbWFrZSBhIHJhbmRvbSB4LCBnXnggcGFpciAqLworICAgIHggPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnEpOworICAgIGlmIChwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWQoZXhwdCwgeCwgcHJuZykgIT0geCkgeworICAgICAgIGVyciA9IENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgCisgICAgLyogbG9hZCB4ICovCisgICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbihnX3ByaXYsIGV4cHQsIHgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgCisgICAgLyogY29tcHV0ZSB5ICovCisgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+ZywgZ19wcml2LCBrZXktPnAsIGdfcHViKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIAorICAgIC8qIG1ha2UgcmFuZG9tIGtleSAqLworICAgIHggICAgICAgID0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSArIDE7CisgICAgaWYgKChlcnIgPSBkc2Ffc2hhcmVkX3NlY3JldChnX3ByaXYsIGtleS0+eSwga2V5LCBleHB0LCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIHkgPSBNQVhCTE9DS1NJWkU7CisgICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShoYXNoLCBleHB0LCB4LCBza2V5LCAmeSkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICAKKyAgICAvKiBFbmNyeXB0IGtleSAqLworICAgIGZvciAoeCA9IDA7IHggPCBpbmxlbjsgeCsrKSB7CisgICAgICBza2V5W3hdIF49IGluW3hdOworICAgIH0KKworICAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5PSURsZW4sICAgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgICAgMVVMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3B1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX09DVEVUX1NUUklORywgICAgICAgaW5sZW4sICAgICAgICAgICAgICAgICAgICAgICAgICBza2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAgICAgICAwVUwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIC8qIGNsZWFuIHVwICovCisgICAgemVyb21lbShleHB0LCAgIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cCkgKyAxKTsKKyAgICB6ZXJvbWVtKHNrZXksICAgTUFYQkxPQ0tTSVpFKTsKKyNlbmRpZgorCisgICAgWEZSRUUoc2tleSk7CisgICAgWEZSRUUoZXhwdCk7CisgICAgCisgICAgbXBfY2xlYXJfbXVsdGkoZ19wdWIsIGdfcHJpdiwgTlVMTCk7CisgICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDM6MTg6NDMgJCAqLworCmRpZmYgLS1naXQgYS9zcmMvcGsvZHNhL2RzYV9leHBvcnQuYyBiL3NyYy9way9kc2EvZHNhX2V4cG9ydC5jCmluZGV4IDVhMDkzZDkuLmQ4ODI3NzkgMTAwNjQ0Ci0tLSBhL3NyYy9way9kc2EvZHNhX2V4cG9ydC5jCisrKyBiL3NyYy9way9kc2EvZHNhX2V4cG9ydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC00NywxOSArNDcsMTkgQEAKICAgIGlmICh0eXBlID09IFBLX1BSSVZBVEUpIHsKICAgICAgIHJldHVybiBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKG91dCwgb3V0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAxVUwsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCAma2V5LT5xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAwVUwsIE5VTEwpOwogICAgfSBlbHNlIHsKICAgICAgIHJldHVybiBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKG91dCwgb3V0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAxVUwsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCAma2V5LT5xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAwVUwsIE5VTEwpOwogICAgfQogfQpAQCAtNjgsNSArNjgsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2V4cG9ydC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjYgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMDMgMTk6MjQ6MzEgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2RzYS9kc2FfZnJlZS5jIGIvc3JjL3BrL2RzYS9kc2FfZnJlZS5jCmluZGV4IDkxNTdhY2IuLjkyYTFlYjcgMTAwNjQ0Ci0tLSBhL3NyYy9way9kc2EvZHNhX2ZyZWUuYworKysgYi9zcmMvcGsvZHNhL2RzYV9mcmVlLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTIzLDEyICsyMywxMiBAQAogKi8KIHZvaWQgZHNhX2ZyZWUoZHNhX2tleSAqa2V5KQogewotICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7Ci0gICBtcF9jbGVhcl9tdWx0aSgma2V5LT5nLCAma2V5LT5xLCAma2V5LT5wLCAma2V5LT54LCAma2V5LT55LCBOVUxMKTsKKyAgIExUQ19BUkdDSEtWRChrZXkgIT0gTlVMTCk7CisgICBtcF9jbGVhcl9tdWx0aShrZXktPmcsIGtleS0+cSwga2V5LT5wLCBrZXktPngsIGtleS0+eSwgTlVMTCk7CiB9CiAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9mcmVlLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8wOSAwMTozODoxMyAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvZHNhL2RzYV9pbXBvcnQuYyBiL3NyYy9way9kc2EvZHNhX2ltcG9ydC5jCmluZGV4IGU4MWJhYzguLmJiMjI3MmEgMTAwNjQ0Ci0tLSBhL3NyYy9way9kc2EvZHNhX2ltcG9ydC5jCisrKyBiL3NyYy9way9kc2EvZHNhX2ltcG9ydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0zMSw5ICszMSwxMCBAQAogCiAgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsdGNfbXAubmFtZSAhPSBOVUxMKTsKIAogICAgLyogaW5pdCBrZXkgKi8KLSAgIGlmIChtcF9pbml0X211bHRpKCZrZXktPnAsICZrZXktPmcsICZrZXktPnEsICZrZXktPngsICZrZXktPnksIE5VTEwpICE9IE1QX09LQVkpIHsKKyAgIGlmIChtcF9pbml0X211bHRpKCZrZXktPnAsICZrZXktPmcsICZrZXktPnEsICZrZXktPngsICZrZXktPnksIE5VTEwpICE9IENSWVBUX09LKSB7CiAgICAgICByZXR1cm4gQ1JZUFRfTUVNOwogICAgfQogCkBAIC00NywxMSArNDgsMTEgQEAKICAgIGlmIChmbGFnc1swXSA9PSAxKSB7CiAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAxVUwsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCAma2V5LT5xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT54LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgewogICAgICAgICAgZ290byBlcnJvcjsKICAgICAgIH0KQEAgLTU5LDMxICs2MCwzMSBAQAogICAgfSBlbHNlIHsKICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgIDFVTCwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCAma2V5LT5wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsICZrZXktPnEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwgJmtleS0+eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CiAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgfQogICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOwogICB9Ci0gIGtleS0+cW9yZCA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZrZXktPnEpOworICBrZXktPnFvcmQgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnEpOwogCiAgIGlmIChrZXktPnFvcmQgPj0gTURTQV9NQVhfR1JPVVAgfHwga2V5LT5xb3JkIDw9IDE1IHx8Ci0gICAgICBrZXktPnFvcmQgPj0gbXBfdW5zaWduZWRfYmluX3NpemUoJmtleS0+cCkgfHwgKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZrZXktPnApIC0ga2V5LT5xb3JkKSA+PSBNRFNBX0RFTFRBKSB7CisgICAgICAodW5zaWduZWQgbG9uZylrZXktPnFvcmQgPj0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSB8fCAobXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSAtIGtleS0+cW9yZCkgPj0gTURTQV9ERUxUQSkgewogICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CiAgICAgICBnb3RvIGVycm9yOwogICAgfQogCiAgIHJldHVybiBDUllQVF9PSzsKIGVycm9yOiAKLSAgIG1wX2NsZWFyX211bHRpKCZrZXktPnAsICZrZXktPmcsICZrZXktPnEsICZrZXktPngsICZrZXktPnksIE5VTEwpOworICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5wLCBrZXktPmcsIGtleS0+cSwga2V5LT54LCBrZXktPnksIE5VTEwpOwogICAgcmV0dXJuIGVycjsKIH0KIAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2ltcG9ydC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjcgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMDggMjM6MzE6MTcgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9kc2EvZHNhX21ha2Vfa2V5LmMgYi9zcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5jCmluZGV4IDAyZjY5ZTAuLjI5M2U4MTQgMTAwNjQ0Ci0tLSBhL3NyYy9way9kc2EvZHNhX21ha2Vfa2V5LmMKKysrIGIvc3JjL3BrL2RzYS9kc2FfbWFrZV9rZXkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjgsMTEgKzI4LDEyIEBACiAqLwogaW50IGRzYV9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBncm91cF9zaXplLCBpbnQgbW9kdWx1c19zaXplLCBkc2Ffa2V5ICprZXkpCiB7Ci0gICBtcF9pbnQgICAgICAgICB0bXAsIHRtcDI7CisgICB2b2lkICAgICAgICAgICAqdG1wLCAqdG1wMjsKICAgIGludCAgICAgICAgICAgIGVyciwgcmVzOwogICAgdW5zaWduZWQgY2hhciAqYnVmOwogCiAgICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGx0Y19tcC5uYW1lICE9IE5VTEwpOwogCiAgICAvKiBjaGVjayBwcm5nICovCiAgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgewpAQCAtNTIsMjEgKzUzLDIxIEBACiAgICB9CiAKICAgIC8qIGluaXQgbXBfaW50cyAgKi8KLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdG1wLCAmdG1wMiwgJmtleS0+ZywgJmtleS0+cSwgJmtleS0+cCwgJmtleS0+eCwgJmtleS0+eSwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLSAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdG1wLCAmdG1wMiwgJmtleS0+ZywgJmtleS0+cSwgJmtleS0+cCwgJmtleS0+eCwgJmtleS0+eSwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRShidWYpOworICAgICAgcmV0dXJuIGVycjsKICAgIH0KIAogICAgLyogbWFrZSBvdXIgcHJpbWUgcSAqLwotICAgaWYgKChlcnIgPSByYW5kX3ByaW1lKCZrZXktPnEsIGdyb3VwX3NpemUqOCwgcHJuZywgd3BybmcpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgeyBnb3RvIExCTF9FUlI7IH0KKyAgIGlmICgoZXJyID0gcmFuZF9wcmltZShrZXktPnEsIGdyb3VwX3NpemUsIHBybmcsIHdwcm5nKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiBkb3VibGUgcSAgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsXzIoJmtleS0+cSwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9hZGQoa2V5LT5xLCBrZXktPnEsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CiAKICAgIC8qIG5vdyBtYWtlIGEgcmFuZG9tIHN0cmluZyBhbmQgbXVsdHBseSBpdCBhZ2FpbnN0IHEgKi8KICAgIGlmIChwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWQoYnVmKzEsIG1vZHVsdXNfc2l6ZSAtIGdyb3VwX3NpemUsIHBybmcpICE9ICh1bnNpZ25lZCBsb25nKShtb2R1bHVzX3NpemUgLSBncm91cF9zaXplKSkgewogICAgICAgZXJyID0gQ1JZUFRfRVJST1JfUkVBRFBSTkc7Ci0gICAgICBnb3RvIExCTF9FUlI7CisgICAgICBnb3RvIGVycm9yOwogICAgfQogCiAgICAvKiBmb3JjZSBtYWduaXR1ZGUgKi8KQEAgLTc1LDMwICs3NiwzMCBAQAogICAgLyogZm9yY2UgZXZlbiAqLwogICAgYnVmW21vZHVsdXNfc2l6ZSAtIGdyb3VwX3NpemUgLSAxXSAmPSB+MTsKIAotICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbigmdG1wMiwgYnVmLCBtb2R1bHVzX3NpemUgLSBncm91cF9zaXplKSkgIT0gTVBfT0tBWSkgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX211bCgma2V5LT5xLCAmdG1wMiwgJmtleS0+cCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfYWRkX2QoJmtleS0+cCwgMSwgJmtleS0+cCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2Jpbih0bXAyLCBidWYsIG1vZHVsdXNfc2l6ZSAtIGdyb3VwX3NpemUpKSAhPSBDUllQVF9PSykgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX211bChrZXktPnEsIHRtcDIsIGtleS0+cCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfYWRkX2Qoa2V5LT5wLCAxLCBrZXktPnApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiBub3cgbG9vcCB1bnRpbCBwIGlzIHByaW1lICovCiAgICBmb3IgKDs7KSB7Ci0gICAgICAgaWYgKChlcnIgPSBpc19wcmltZSgma2V5LT5wLCAmcmVzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gTEJMX0VSUjsgfQotICAgICAgIGlmIChyZXMgPT0gTVBfWUVTKSBicmVhazsKKyAgICAgICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX3ByaW1lKGtleS0+cCwgOCwgJnJlcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgIGlmIChyZXMgPT0gTFRDX01QX1lFUykgYnJlYWs7CiAKICAgICAgICAvKiBhZGQgMnEgdG8gcCBhbmQgMiB0byB0bXAyICovCi0gICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJnRtcCwgJmtleS0+cCwgJmtleS0+cCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgICBpZiAoKGVyciA9IG1wX2FkZF9kKCZ0bXAyLCAyLCAmdG1wMikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfYWRkKHRtcCwga2V5LT5wLCBrZXktPnApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZCh0bXAyLCAyLCB0bXAyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KICAgIH0KIAogICAgLyogbm93IHAgPSAocSAqIHRtcDIpICsgMSBpcyBwcmltZSwgZmluZCBhIHZhbHVlIGcgZm9yIHdoaWNoIGdedG1wMiAhPSAxICovCi0gICBtcF9zZXQoJmtleS0+ZywgMSk7CisgICBtcF9zZXQoa2V5LT5nLCAxKTsKIAogICAgZG8gewotICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZCgma2V5LT5nLCAxLCAma2V5LT5nKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QoJmtleS0+ZywgJnRtcDIsICZrZXktPnAsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0gd2hpbGUgKG1wX2NtcF9kKCZ0bXAsIDEpID09IE1QX0VRKTsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkX2Qoa2V5LT5nLCAxLCBrZXktPmcpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+ZywgdG1wMiwga2V5LT5wLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9IHdoaWxlIChtcF9jbXBfZCh0bXAsIDEpID09IExUQ19NUF9FUSk7CiAKICAgIC8qIGF0IHRoaXMgcG9pbnQgdG1wIGdlbmVyYXRlcyBhIGdyb3VwIG9mIG9yZGVyIHEgbW9kIHAgKi8KLSAgIG1wX2V4Y2goJnRtcCwgJmtleS0+Zyk7CisgICBtcF9leGNoKHRtcCwga2V5LT5nKTsKIAogICAgLyogc28gbm93IHdlIGhhdmUgb3VyIERIIHN0cnVjdHVyZSwgZ2VuZXJhdG9yIGcsIG9yZGVyIHEsIG1vZHVsdXMgcCAKICAgICAgIE5vdyB3ZSBuZWVkIGEgcmFuZG9tIGV4cG9uZW50IFttb2QgcV0gYW5kIGl0J3MgcG93ZXIgZ154IG1vZCBwIApAQCAtMTA2LDIyICsxMDcsMTUgQEAKICAgIGRvIHsKICAgICAgIGlmIChwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWQoYnVmLCBncm91cF9zaXplLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylncm91cF9zaXplKSB7CiAgICAgICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsKLSAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICB9Ci0gICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKCZrZXktPngsIGJ1ZiwgZ3JvdXBfc2l6ZSkpICE9IE1QX09LQVkpICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0gd2hpbGUgKG1wX2NtcF9kKCZrZXktPngsIDEpICE9IE1QX0dUKTsKLSAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCgma2V5LT5nLCAma2V5LT54LCAma2V5LT5wLCAma2V5LT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgCisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGtleS0+eCwgYnVmLCBncm91cF9zaXplKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKGtleS0+eCwgMSkgIT0gTFRDX01QX0dUKTsKKyAgIGlmICgoZXJyID0gbXBfZXhwdG1vZChrZXktPmcsIGtleS0+eCwga2V5LT5wLCBrZXktPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAKICAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CiAgICBrZXktPnFvcmQgPSBncm91cF9zaXplOwogCi0gICAvKiBzaHJpbmsgdGhlIHJhbSByZXF1aXJlZCAqLwotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+ZykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX3Nocmluaygma2V5LT5wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfc2hyaW5rKCZrZXktPnEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+eCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX3Nocmluaygma2V5LT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwogICAgemVyb21lbShidWYsIE1EU0FfREVMVEEpOwogI2VuZGlmCkBAIC0xMjksMTIgKzEyMyw5IEBACiAgICBlcnIgPSBDUllQVF9PSzsKICAgIGdvdG8gZG9uZTsKIGVycm9yOiAKLSAgICBlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci1MQkxfRVJSOiAKLSAgICBtcF9jbGVhcl9tdWx0aSgma2V5LT5nLCAma2V5LT5xLCAma2V5LT5wLCAma2V5LT54LCAma2V5LT55LCBOVUxMKTsKKyAgICBtcF9jbGVhcl9tdWx0aShrZXktPmcsIGtleS0+cSwga2V5LT5wLCBrZXktPngsIGtleS0+eSwgTlVMTCk7CiBkb25lOiAKLSAgICBtcF9jbGVhcl9tdWx0aSgmdG1wLCAmdG1wMiwgTlVMTCk7Ci0KKyAgICBtcF9jbGVhcl9tdWx0aSh0bXAsIHRtcDIsIE5VTEwpOwogICAgIFhGUkVFKGJ1Zik7CiAgICAgcmV0dXJuIGVycjsKIH0KQEAgLTE0Miw1ICsxMzMsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX21ha2Vfa2V5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xMSAwNTo0NTozNSAkICovCisvKiAkUmV2aXNpb246IDEuMTAgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDM6MTg6NDMgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2RzYS9kc2Ffc2hhcmVkX3NlY3JldC5jIGIvc3JjL3BrL2RzYS9kc2Ffc2hhcmVkX3NlY3JldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGQ2MzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZHNhL2RzYV9zaGFyZWRfc2VjcmV0LmMKQEAgLTAsMCArMSw3MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZHNhX3NoYXJlZF9zZWNyZXQuYworICBEU0EgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1EU0EKKworLyoqCisgIENyZWF0ZSBhIERTQSBzaGFyZWQgc2VjcmV0IGJldHdlZW4gdHdvIGtleXMKKyAgQHBhcmFtIHByaXZhdGVfa2V5ICAgICAgVGhlIHByaXZhdGUgRFNBIGtleSAodGhlIGV4cG9uZW50KQorICBAcGFyYW0gYmFzZSAgICAgICAgICAgICBUaGUgYmFzZSBvZiB0aGUgZXhwb25lbnRpYXRpb24gKGFsbG93cyB0aGlzIHRvIGJlIHVzZWQgZm9yIGJvdGggZW5jcnlwdCBhbmQgZGVjcnlwdCkgCisgIEBwYXJhbSBwdWJsaWNfa2V5ICAgICAgIFRoZSBwdWJsaWMga2V5CisgIEBwYXJhbSBvdXQgICAgICAgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIG9mIHRoZSBzaGFyZWQgc2VjcmV0CisgIEBwYXJhbSBvdXRsZW4gICAgICAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHNoYXJlZCBzZWNyZXQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRzYV9zaGFyZWRfc2VjcmV0KHZvaWQgICAgICAgICAgKnByaXZhdGVfa2V5LCB2b2lkICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgICAgICAgKnB1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgIHg7CisgICB2b2lkICAgICAgICAgICpyZXM7CisgICBpbnQgICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsocHJpdmF0ZV9rZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB1YmxpY19rZXkgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICAgICAgIT0gTlVMTCk7CisKKyAgIC8qIG1ha2UgbmV3IHBvaW50ICovCisgICBpZiAoKGVyciA9IG1wX2luaXQoJnJlcykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QoYmFzZSwgcHJpdmF0ZV9rZXksIHB1YmxpY19rZXktPnAsIHJlcykpICE9IENSWVBUX09LKSB7CisgICAgICBtcF9jbGVhcihyZXMpOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgeCA9ICh1bnNpZ25lZCBsb25nKW1wX3Vuc2lnbmVkX2Jpbl9zaXplKHJlcyk7CisgICBpZiAoKm91dGxlbiA8IHgpIHsKKyAgICAgICpvdXRsZW4gPSB4OworICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgZ290byBkb25lOworICAgfQorICAgemVyb21lbShvdXQsIHgpOworICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4ocmVzLCBvdXQgKyAoeCAtIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKHJlcykpKSkgICAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgZXJyICAgICA9IENSWVBUX09LOworICAgKm91dGxlbiA9IHg7Citkb25lOgorICAgbXBfY2xlYXIocmVzKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2Ffc2hhcmVkX3NlY3JldC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDM6MTg6NDMgJCAqLworCmRpZmYgLS1naXQgYS9zcmMvcGsvZHNhL2RzYV9zaWduX2hhc2guYyBiL3NyYy9way9kc2EvZHNhX3NpZ25faGFzaC5jCmluZGV4IDQ4ZDI5YTIuLmY4NGRkMjggMTAwNjQ0Ci0tLSBhL3NyYy9way9kc2EvZHNhX3NpZ25faGFzaC5jCisrKyBiL3NyYy9way9kc2EvZHNhX3NpZ25faGFzaC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yOSwxMCArMjksMTAgQEAKICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCiAqLwogaW50IGRzYV9zaWduX2hhc2hfcmF3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfaW50ICpyLCAgIG1wX2ludCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICpyLCAgIHZvaWQgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBkc2Ffa2V5ICprZXkpCiB7Ci0gICBtcF9pbnQgICAgICAgICBrLCBraW52LCB0bXA7CisgICB2b2lkICAgICAgICAgKmssICpraW52LCAqdG1wOwogICAgdW5zaWduZWQgY2hhciAqYnVmOwogICAgaW50ICAgICAgICAgICAgZXJyOwogCkBAIC01OSw3ICs1OSw3IEBACiAgICB9CiAKICAgIC8qIEluaXQgb3VyIHRlbXBzICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmssICZraW52LCAmdG1wLCBOVUxMKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmaywgJmtpbnYsICZ0bXAsIE5VTEwpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJCVUY7IH0KIAogcmV0cnk6CiAKQEAgLTY3LDQzICs2Nyw0MCBAQAogICAgICAgLyogZ2VuIHJhbmRvbSBrICovCiAgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3dwcm5nXS5yZWFkKGJ1Ziwga2V5LT5xb3JkLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylrZXktPnFvcmQpIHsKICAgICAgICAgIGVyciA9IENSWVBUX0VSUk9SX1JFQURQUk5HOwotICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgZ290byBlcnJvcjsKICAgICAgIH0KIAogICAgICAgLyogcmVhZCBrICovCi0gICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKCZrLCBidWYsIGtleS0+cW9yZCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbihrLCBidWYsIGtleS0+cW9yZCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CiAKICAgICAgIC8qIGsgPiAxID8gKi8KLSAgICAgIGlmIChtcF9jbXBfZCgmaywgMSkgIT0gTVBfR1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIHJldHJ5OyB9CisgICAgICBpZiAobXBfY21wX2QoaywgMSkgIT0gTFRDX01QX0dUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gcmV0cnk7IH0KIAogICAgICAgLyogdGVzdCBnY2QgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfZ2NkKCZrLCAma2V5LT5xLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9IHdoaWxlIChtcF9jbXBfZCgmdG1wLCAxKSAhPSBNUF9FUSk7CisgICAgICBpZiAoKGVyciA9IG1wX2djZChrLCBrZXktPnEsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKHRtcCwgMSkgIT0gTFRDX01QX0VRKTsKIAogICAgLyogbm93IGZpbmQgMS9rIG1vZCBxICovCi0gICBpZiAoKGVyciA9IG1wX2ludm1vZCgmaywgJmtleS0+cSwgJmtpbnYpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9pbnZtb2Qoaywga2V5LT5xLCBraW52KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CiAKICAgIC8qIG5vdyBmaW5kIHIgPSBnXmsgbW9kIHAgbW9kIHEgKi8KLSAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCgma2V5LT5nLCAmaywgJmtleS0+cCwgcikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vZChyLCAma2V5LT5xLCByKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+Zywgaywga2V5LT5wLCByKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX21vZChyLCBrZXktPnEsIHIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KIAotICAgaWYgKG1wX2lzemVybyhyKSA9PSBNUF9ZRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gcmV0cnk7IH0KKyAgIGlmIChtcF9pc3plcm8ocikgPT0gTFRDX01QX1lFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byByZXRyeTsgfQogCiAgICAvKiBub3cgZmluZCBzID0gKGluICsgeHIpL2sgbW9kIHEgKi8KLSAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oJnRtcCwgKHVuc2lnbmVkIGNoYXIgKilpbiwgaW5sZW4pKSAhPSBNUF9PS0FZKSAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX211bCgma2V5LT54LCByLCBzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9hZGQocywgJnRtcCwgcykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHMsICZraW52LCAma2V5LT5xLCBzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKHRtcCwgKHVuc2lnbmVkIGNoYXIgKilpbiwgaW5sZW4pKSAhPSBDUllQVF9PSykgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsKGtleS0+eCwgciwgcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9hZGQocywgdG1wLCBzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX211bG1vZChzLCBraW52LCBrZXktPnEsIHMpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KIAotICAgaWYgKG1wX2lzemVybyhzKSA9PSBNUF9ZRVMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gcmV0cnk7IH0KKyAgIGlmIChtcF9pc3plcm8ocykgPT0gTFRDX01QX1lFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byByZXRyeTsgfQogCiAgICBlcnIgPSBDUllQVF9PSzsKLSAgIGdvdG8gTEJMX0VSUjsKLQogZXJyb3I6IAotICAgZXJyID0gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotTEJMX0VSUjogCi0gICBtcF9jbGVhcl9tdWx0aSgmaywgJmtpbnYsICZ0bXAsIE5VTEwpOworICAgbXBfY2xlYXJfbXVsdGkoaywga2ludiwgdG1wLCBOVUxMKTsKK0VSUkJVRjoKICNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKICAgIHplcm9tZW0oYnVmLCBNRFNBX01BWF9HUk9VUCk7CiAjZW5kaWYKQEAgLTEyNiw3ICsxMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGRzYV9rZXkgKmtleSkKIHsKLSAgIG1wX2ludCAgICAgICAgciwgczsKKyAgIHZvaWQgICAgICAgICAqciwgKnM7CiAgICBpbnQgICAgICAgICAgIGVycjsKIAogICAgTFRDX0FSR0NISyhpbiAgICAgICE9IE5VTEwpOwpAQCAtMTM0LDI2ICsxMzEsMjYgQEAKICAgIExUQ19BUkdDSEsob3V0bGVuICAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsoa2V5ICAgICAhPSBOVUxMKTsKIAotICAgaWYgKG1wX2luaXRfbXVsdGkoJnIsICZzLCBOVUxMKSAhPSBNUF9PS0FZKSB7CisgICBpZiAobXBfaW5pdF9tdWx0aSgmciwgJnMsIE5VTEwpICE9IENSWVBUX09LKSB7CiAgICAgICByZXR1cm4gQ1JZUFRfTUVNOwogICAgfQogCi0gICBpZiAoKGVyciA9IGRzYV9zaWduX2hhc2hfcmF3KGluLCBpbmxlbiwgJnIsICZzLCBwcm5nLCB3cHJuZywga2V5KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIGlmICgoZXJyID0gZHNhX3NpZ25faGFzaF9yYXcoaW4sIGlubGVuLCByLCBzLCBwcm5nLCB3cHJuZywga2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CiAgICB9CiAKICAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAmcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCk7CiAKLUxCTF9FUlI6Ci0gICBtcF9jbGVhcl9tdWx0aSgmciwgJnMsIE5VTEwpOworZXJyb3I6CisgICBtcF9jbGVhcl9tdWx0aShyLCBzLCBOVUxMKTsKICAgIHJldHVybiBlcnI7CiB9CiAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9zaWduX2hhc2guYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS42ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE1IDIxOjQ4OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMjoyNzo1NiAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5jIGIvc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2hhc2guYwppbmRleCAxMWU1YzMzLi4wZThmZjIyIDEwMDY0NAotLS0gYS9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5jCisrKyBiL3NyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTI4LDExICsyOCwxMSBAQAogICBAcGFyYW0ga2V5ICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIERIIGtleQogICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwgKGV2ZW4gaWYgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkKQogKi8KLWludCBkc2FfdmVyaWZ5X2hhc2hfcmF3KCAgICAgICAgIG1wX2ludCAqciwgICAgICAgICAgbXBfaW50ICpzLAoraW50IGRzYV92ZXJpZnlfaGFzaF9yYXcoICAgICAgICAgdm9pZCAgICpyLCAgICAgICAgICB2b2lkICAgKnMsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsICAgICAgZHNhX2tleSAqa2V5KQogewotICAgbXBfaW50ICAgICAgICB3LCB2LCB1MSwgdTI7CisgICB2b2lkICAgICAgICAgICp3LCAqdiwgKnUxLCAqdTI7CiAgICBpbnQgICAgICAgICAgIGVycjsKIAogICAgTFRDX0FSR0NISyhyICAgICE9IE5VTEwpOwpAQCAtNDQsNDIgKzQ0LDQwIEBACiAgICAqc3RhdCA9IDA7CiAKICAgIC8qIGluaXQgb3VyIHZhcmlhYmxlcyAqLwotICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ3LCAmdiwgJnUxLCAmdTIsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ3LCAmdiwgJnUxLCAmdTIsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKICAgIH0KIAogICAgLyogbmVpdGhlciByIG9yIHMgY2FuIGJlIG51bGwgb3IgPnEqLwotICAgaWYgKG1wX2lzemVybyhyKSA9PSBNUF9ZRVMgfHwgbXBfaXN6ZXJvKHMpID09IE1QX1lFUyB8fCBtcF9jbXAociwgJmtleS0+cSkgIT0gTVBfTFQgfHwgbXBfY21wKHMsICZrZXktPnEpICE9IE1QX0xUKSB7CisgICBpZiAobXBfaXN6ZXJvKHIpID09IExUQ19NUF9ZRVMgfHwgbXBfaXN6ZXJvKHMpID09IExUQ19NUF9ZRVMgfHwgbXBfY21wKHIsIGtleS0+cSkgIT0gTFRDX01QX0xUIHx8IG1wX2NtcChzLCBrZXktPnEpICE9IExUQ19NUF9MVCkgewogICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7Ci0gICAgICBnb3RvIGRvbmU7CisgICAgICBnb3RvIGVycm9yOwogICAgfQogICAgCiAgICAvKiB3ID0gMS9zIG1vZCBxICovCi0gICBpZiAoKGVyciA9IG1wX2ludm1vZChzLCAma2V5LT5xLCAmdykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfaW52bW9kKHMsIGtleS0+cSwgdykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiB1MSA9IG0gKiB3IG1vZCBxICovCi0gICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKCZ1MSwgKHVuc2lnbmVkIGNoYXIgKiloYXNoLCBoYXNobGVuKSkgIT0gTVBfT0tBWSkgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX211bG1vZCgmdTEsICZ3LCAma2V5LT5xLCAmdTEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKHUxLCAodW5zaWduZWQgY2hhciAqKWhhc2gsIGhhc2hsZW4pKSAhPSBDUllQVF9PSykgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHUxLCB3LCBrZXktPnEsIHUxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiB1MiA9IHIqdyBtb2QgcSAqLwotICAgaWYgKChlcnIgPSBtcF9tdWxtb2QociwgJncsICZrZXktPnEsICZ1MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IAorICAgaWYgKChlcnIgPSBtcF9tdWxtb2Qociwgdywga2V5LT5xLCB1MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IAogCiAgICAvKiB2ID0gZ151MSAqIHledTIgbW9kIHAgbW9kIHEgKi8KLSAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCgma2V5LT5nLCAmdTEsICZrZXktPnAsICZ1MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCgma2V5LT55LCAmdTIsICZrZXktPnAsICZ1MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbXVsbW9kKCZ1MSwgJnUyLCAma2V5LT5wLCAmdikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9kKCZ2LCAma2V5LT5xLCAmdikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfZXhwdG1vZChrZXktPmcsIHUxLCBrZXktPnAsIHUxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+eSwgdTIsIGtleS0+cCwgdTIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX211bG1vZCh1MSwgdTIsIGtleS0+cCwgdikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9kKHYsIGtleS0+cSwgdikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiBpZiByID0gdiB0aGVuIHdlJ3JlIHNldCAqLwotICAgaWYgKG1wX2NtcChyLCAmdikgPT0gTVBfRVEpIHsKKyAgIGlmIChtcF9jbXAociwgdikgPT0gTFRDX01QX0VRKSB7CiAgICAgICAqc3RhdCA9IDE7CiAgICB9CiAKICAgIGVyciA9IENSWVBUX09LOwotICAgZ290byBkb25lOwotCi1lcnJvciA6IGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmUgIDogbXBfY2xlYXJfbXVsdGkoJncsICZ2LCAmdTEsICZ1MiwgTlVMTCk7CitlcnJvcjoKKyAgIG1wX2NsZWFyX211bHRpKHcsIHYsIHUxLCB1MiwgTlVMTCk7CiAgICByZXR1cm4gZXJyOwogfQogCkBAIC05OCw3ICs5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGludCAqc3RhdCwgZHNhX2tleSAqa2V5KQogewogICAgaW50ICAgIGVycjsKLSAgIG1wX2ludCByLCBzOworICAgdm9pZCAgICpyLCAqczsKIAogICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZyLCAmcywgTlVMTCkpICE9IENSWVBUX09LKSB7CiAgICAgICByZXR1cm4gQ1JZUFRfTUVNOwpAQCAtMTA2LDE3ICsxMDQsMTcgQEAKIAogICAgLyogZGVjb2RlIHRoZSBzZXF1ZW5jZSAqLwogICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKHNpZywgc2lnbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJnIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBzLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgewogICAgICAgZ290byBMQkxfRVJSOwogICAgfQogCiAgICAvKiBkbyB0aGUgb3AgKi8KLSAgIGVyciA9IGRzYV92ZXJpZnlfaGFzaF9yYXcoJnIsICZzLCBoYXNoLCBoYXNobGVuLCBzdGF0LCBrZXkpOworICAgZXJyID0gZHNhX3ZlcmlmeV9oYXNoX3JhdyhyLCBzLCBoYXNoLCBoYXNobGVuLCBzdGF0LCBrZXkpOwogCiBMQkxfRVJSOgotICAgbXBfY2xlYXJfbXVsdGkoJnIsICZzLCBOVUxMKTsKKyAgIG1wX2NsZWFyX211bHRpKHIsIHMsIE5VTEwpOwogICAgcmV0dXJuIGVycjsKIH0KIApAQCAtMTI0LDUgKzEyMiw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2hhc2guYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzE1IDIxOjQ4OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzoxODo0MyAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5LmMgYi9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5LmMKaW5kZXggYjdiZTEwMy4uMjcwNTRkNiAxMDA2NDQKLS0tIGEvc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5jCisrKyBiL3NyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjUsNyArMjUsNyBAQAogKi8KIGludCBkc2FfdmVyaWZ5X2tleShkc2Ffa2V5ICprZXksIGludCAqc3RhdCkKIHsKLSAgIG1wX2ludCB0bXAsIHRtcDI7CisgICB2b2lkICAgKnRtcCwgKnRtcDI7CiAgICBpbnQgICAgcmVzLCBlcnI7CiAKICAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKQEAgLTM1LDE1ICszNSwxNCBAQAogICAgKnN0YXQgPSAwOwogCiAgICAvKiBmaXJzdCBtYWtlIHN1cmUga2V5LT5xIGFuZCBrZXktPnAgYXJlIHByaW1lICovCi0gICBpZiAoKGVyciA9IGlzX3ByaW1lKCZrZXktPnEsICZyZXMpKSAhPSBDUllQVF9PSykgeworICAgaWYgKChlcnIgPSBtcF9wcmltZV9pc19wcmltZShrZXktPnEsIDgsICZyZXMpKSAhPSBDUllQVF9PSykgewogICAgICAgcmV0dXJuIGVycjsKICAgIH0KICAgIGlmIChyZXMgPT0gMCkgewogICAgICAgcmV0dXJuIENSWVBUX09LOwogICAgfQogCi0KLSAgIGlmICgoZXJyID0gaXNfcHJpbWUoJmtleS0+cCwgJnJlcykpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX3ByaW1lKGtleS0+cCwgOCwgJnJlcykpICE9IENSWVBUX09LKSB7CiAgICAgICByZXR1cm4gZXJyOwogICAgfQogICAgaWYgKHJlcyA9PSAwKSB7CkBAIC01MSw1MiArNTAsNTEgQEAKICAgIH0KIAogICAgLyogbm93IG1ha2Ugc3VyZSB0aGF0IGcgaXMgbm90IC0xLCAwIG9yIDEgYW5kIDxwICovCi0gICBpZiAobXBfY21wX2QoJmtleS0+ZywgMCkgPT0gTVBfRVEgfHwgbXBfY21wX2QoJmtleS0+ZywgMSkgPT0gTVBfRVEpIHsKKyAgIGlmIChtcF9jbXBfZChrZXktPmcsIDApID09IExUQ19NUF9FUSB8fCBtcF9jbXBfZChrZXktPmcsIDEpID09IExUQ19NUF9FUSkgewogICAgICAgcmV0dXJuIENSWVBUX09LOwogICAgfQotICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0bXAsICZ0bXAyLCBOVUxMKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfc3ViX2QoJmtleS0+cCwgMSwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wKCZ0bXAsICZrZXktPmcpID09IE1QX0VRIHx8IG1wX2NtcCgma2V5LT5nLCAma2V5LT5wKSAhPSBNUF9MVCkgeworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0bXAsICZ0bXAyLCBOVUxMKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyByZXR1cm4gZXJyOyB9CisgICBpZiAoKGVyciA9IG1wX3N1Yl9kKGtleS0+cCwgMSwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmIChtcF9jbXAodG1wLCBrZXktPmcpID09IExUQ19NUF9FUSB8fCBtcF9jbXAoa2V5LT5nLCBrZXktPnApICE9IExUQ19NUF9MVCkgewogICAgICAgZXJyID0gQ1JZUFRfT0s7Ci0gICAgICBnb3RvIGRvbmU7CisgICAgICBnb3RvIGVycm9yOwogICAgfQogCiAgICAvKiAxIDwgeSA8IHAtMSAqLwotICAgaWYgKCEobXBfY21wX2QoJmtleS0+eSwgMSkgPT0gTVBfR1QgJiYgbXBfY21wKCZrZXktPnksICZ0bXApID09IE1QX0xUKSkgeworICAgaWYgKCEobXBfY21wX2Qoa2V5LT55LCAxKSA9PSBMVENfTVBfR1QgJiYgbXBfY21wKGtleS0+eSwgdG1wKSA9PSBMVENfTVBfTFQpKSB7CiAgICAgICBlcnIgPSBDUllQVF9PSzsKLSAgICAgIGdvdG8gZG9uZTsKKyAgICAgIGdvdG8gZXJyb3I7CiAgICB9CiAKICAgIC8qIG5vdyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGdecSA9IDEsIGFuZCB0aGF0IHAtMS9xIGdpdmVzIDAgcmVtYWluZGVyICovCi0gICBpZiAoKGVyciA9IG1wX2RpdigmdG1wLCAma2V5LT5xLCAmdG1wLCAmdG1wMikpICE9IE1QX09LQVkpICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2lzemVybygmdG1wMikgIT0gTVBfWUVTKSB7CisgICBpZiAoKGVyciA9IG1wX2Rpdih0bXAsIGtleS0+cSwgdG1wLCB0bXAyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKG1wX2lzemVybyh0bXAyKSAhPSBMVENfTVBfWUVTKSB7CiAgICAgICBlcnIgPSBDUllQVF9PSzsKLSAgICAgIGdvdG8gZG9uZTsKKyAgICAgIGdvdG8gZXJyb3I7CiAgICB9CiAKLSAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCgma2V5LT5nLCAma2V5LT5xLCAma2V5LT5wLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wX2QoJnRtcCwgMSkgIT0gTVBfRVEpIHsKKyAgIGlmICgoZXJyID0gbXBfZXhwdG1vZChrZXktPmcsIGtleS0+cSwga2V5LT5wLCB0bXApKSAhPSBDUllQVF9PSykgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAobXBfY21wX2QodG1wLCAxKSAhPSBMVENfTVBfRVEpIHsKICAgICAgIGVyciA9IENSWVBUX09LOwotICAgICAgZ290byBkb25lOworICAgICAgZ290byBlcnJvcjsKICAgIH0KIAogICAgLyogbm93IHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgeV5xID0gMSwgdGhpcyBtYWtlcyBzdXJlIHkgXGluIGdeeCBtb2QgcCAqLwotICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZrZXktPnksICZrZXktPnEsICZrZXktPnAsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmIChtcF9jbXBfZCgmdG1wLCAxKSAhPSBNUF9FUSkgeworICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+eSwga2V5LT5xLCBrZXktPnAsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmIChtcF9jbXBfZCh0bXAsIDEpICE9IExUQ19NUF9FUSkgewogICAgICAgZXJyID0gQ1JZUFRfT0s7Ci0gICAgICBnb3RvIGRvbmU7CisgICAgICBnb3RvIGVycm9yOwogICAgfQogCiAgICAvKiBhdCB0aGlzIHBvaW50IHdlIGFyZSBvdXQgb2YgdGVzdHMgOy0oICovCiAgICBlcnIgICA9IENSWVBUX09LOwogICAgKnN0YXQgPSAxOwotICAgZ290byBkb25lOwotZXJyb3I6IGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmUgOiBtcF9jbGVhcl9tdWx0aSgmdG1wLCAmdG1wMiwgTlVMTCk7CitlcnJvcjogCisgICBtcF9jbGVhcl9tdWx0aSh0bXAsIHRtcDIsIE5VTEwpOwogICAgcmV0dXJuIGVycjsKIH0KICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzoxODo0MyAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvZWNjL2VjYy5jIGIvc3JjL3BrL2VjYy9lY2MuYwppbmRleCA0NjlkNTZkLi45MGJiZWQ0IDEwMDY0NAotLS0gYS9zcmMvcGsvZWNjL2VjYy5jCisrKyBiL3NyYy9way9lY2MvZWNjLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogCiAvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgpAQCAtMjMsMTI1ICsyMyw5NCBAQAogCiAjaWZkZWYgTUVDQwogCi0vKiBzaXplIG9mIG91ciB0ZW1wIGJ1ZmZlcnMgZm9yIGV4cG9ydGVkIGtleXMgKi8KLSNkZWZpbmUgRUNDX0JVRl9TSVpFIDI1NgotCi0vKiBtYXggcHJpdmF0ZSBrZXkgc2l6ZSAqLwotI2RlZmluZSBFQ0NfTUFYU0laRSAgNjYKLQogLyogVGhpcyBob2xkcyB0aGUga2V5IHNldHRpbmdzLiAgKioqTVVTVCoqKiBiZSBvcmdhbml6ZWQgYnkgc2l6ZSBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3QuICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLSAgIGludCBzaXplOwotICAgY2hhciAqbmFtZSwgKnByaW1lLCAqQiwgKm9yZGVyLCAqR3gsICpHeTsKLX0gc2V0c1tdID0geworY29uc3QgbHRjX2VjY19zZXRfdHlwZSBsdGNfZWNjX3NldHNbXSA9IHsKKyNpZmRlZiBFQ0MxMTIKK3sKKyAgICAgICAgMTQsCisgICAgICAgICJTRUNQMTEyUjEiLAorICAgICAgICAiREI3QzJBQkY2MkUzNUU2NjgwNzZCRUFEMjA4QiIsCisgICAgICAgICI2NTlFRjhCQTA0MzkxNkVFREU4OTExNzAyQjIyIiwKKyAgICAgICAgIkRCN0MyQUJGNjJFMzVFNzYyOERGQUM2NTYxQzUiLAorICAgICAgICAiMDk0ODcyMzk5OTVBNUVFNzZCNTVGOUMyRjA5OCIsCisgICAgICAgICJBODlDRTVBRjg3MjRDMEEyM0UwRTBGRjc3NTAwIgorfSwKKyNlbmRpZgorI2lmZGVmIEVDQzEyOAoreworICAgICAgICAxNiwKKyAgICAgICAgIlNFQ1AxMjhSMSIsCisgICAgICAgICJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsCisgICAgICAgICJFODc1NzlDMTEwNzlGNDNERDgyNDk5M0MyQ0VFNUVEMyIsCisgICAgICAgICJGRkZGRkZGRTAwMDAwMDAwNzVBMzBEMUI5MDM4QTExNSIsCisgICAgICAgICIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NiIsCisgICAgICAgICJDRjVBQzgzOTVCQUZFQjEzQzAyREEyOTJEREVEN0E4MyIsCit9LAorI2VuZGlmCisjaWZkZWYgRUNDMTYwCit7CisgICAgICAgIDIwLAorICAgICAgICAiU0VDUDE2MFIxIiwKKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkYiLAorICAgICAgICAiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NSIsCisgICAgICAgICIwMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjRDOEY5MjdBRUQzQ0E3NTIyNTciLAorICAgICAgICAiNEE5NkI1Njg4RUY1NzMyODQ2NjQ2OTg5NjhDMzhCQjkxM0NCRkM4MiIsCisgICAgICAgICIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyIiwKK30sCisjZW5kaWYKICNpZmRlZiBFQ0MxOTIKIHsKLSAgICAyNCwKLSAgICJFQ0MtMTkyIiwKLSAgIC8qIHByaW1lICovCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vbC8vLy8vLy8vLy8iLAotCi0gICAvKiBCICovCi0gICAiUDI0NTZVTVNXRVNGZitjaFNZR21JVnd1dGtwMUhoY24iLAotCi0gICAvKiBvcmRlciAqLwotICAgIi8vLy8vLy8vLy8vLy8vLy9jVHh1RFhIaG9SNnFxWVduIiwKLQotICAgLyogR3ggKi8KLSAgICI2OHNlM2gwbWFGUHlsbzNoR3c2ODBGSi8ybHMyL24wSSIsCi0KLSAgIC8qIEd5ICovCi0gICAiMW5haGJWLzhzZFhaNDE3alFvSkRyTkZ2VHc0VVVLV0giCisgICAgICAgIDI0LAorICAgICAgICAiRUNDLTE5MiIsCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkYiLAorICAgICAgICAiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxIiwKKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk5REVGODM2MTQ2QkM5QjFCNEQyMjgzMSIsCisgICAgICAgICIxODhEQTgwRUIwMzA5MEY2N0NCRjIwRUI0M0ExODgwMEY0RkYwQUZEODJGRjEwMTIiLAorICAgICAgICAiNzE5MkI5NUZGQzhEQTc4NjMxMDExRUQ2QjI0Q0RENTczRjk3N0ExMUU3OTQ4MTEiLAogfSwKICNlbmRpZgogI2lmZGVmIEVDQzIyNAogewotICAgMjgsCi0gICAiRUNDLTIyNCIsCi0KLSAgIC8qIHByaW1lICovCi0gICAiMy8vLy8vLy8vLy8vLy8vLy8vLy8vLzAwMDAwMDAwMDAwMDAwMDEiLAotCi0gICAvKiBCICovCi0gICAiMnExR2c1MzBJcGcvTDFDYlBHSEIydHJ4L09rWVNCRUtDWkxWK3EiLAotCi0gICAvKiBvcmRlciAqLwotICAgIjMvLy8vLy8vLy8vLy8vLy8vLy9uUVl1QlptRlhGVEFLTFNOMmV6IiwKLQotICAgLyogR3ggKi8KLSAgICIydDNXb3pReEkvVnA4SmFCYkEweTdKTGk4SDhaR29XRE9ITjFxWCIsCi0KLQotICAgLyogR3kgKi8KLSAgICIyekRzRThqVlNaK3FtWXQrUkRHdE1XTVdUN1A0SkxXUGM1MDd1cSIsCisgICAgICAgIDI4LAorICAgICAgICAiRUNDLTIyNCIsCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCisgICAgICAgICJCNDA1MEE4NTBDMDRCM0FCRjU0MTMyNTY1MDQ0QjBCN0Q3QkZEOEJBMjcwQjM5NDMyMzU1RkZCNCIsCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRCIsCisgICAgICAgICJCNzBFMENCRDZCQjRCRjdGMzIxMzkwQjk0QTAzQzFEMzU2QzIxMTIyMzQzMjgwRDYxMTVDMUQyMSIsCisgICAgICAgICJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNCIsCiB9LAogI2VuZGlmCiAjaWZkZWYgRUNDMjU2CiB7Ci0gICAzMiwKLSAgICJFQ0MtMjU2IiwKLSAgIC8qIFByaW1lICovCi0gICAiRi8vLy95MDAwMDEwMDAwMDAwMDAwMDAwMDAwLy8vLy8vLy8vLy8vLy8vLyIsCi0KLSAgIC8qIEIgKi8KLSAgICI1aDZEVFlnRWZGZGkra3pMTlFPWGhuYjdHUW1wNUVtelpsRUYzdWRxYzFCIiwKLQotICAgLyogT3JkZXIgKi8KLSAgICJGLy8vL3kwMDAwMC8vLy8vLy8vLy8reXZsZ2pmblVVWEZFdm9pQnlPb0xIIiwKLQotICAgLyogR3ggKi8KLSAgICI2aU5xVkJYQjQ5NytCcGN2TUVhR0Y5dDB0czFCVWlwZUZJWEVLTk9jQ0FNIiwKLQotICAgLyogR3kgKi8KLSAgICI0L1pHa0IrNmQrUlprVmhJZG1GZFhPaHBaRE5RcDVVcGlrc0c2V3RscjdyIgorICAgICAgICAzMiwKKyAgICAgICAgIkVDQy0yNTYiLAorICAgICAgICAiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsCisgICAgICAgICI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCIiwKKyAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTEiLAorICAgICAgICAiNkIxN0QxRjJFMTJDNDI0N0Y4QkNFNkU1NjNBNDQwRjI3NzAzN0Q4MTJERUIzM0EwRjRBMTM5NDVEODk4QzI5NiIsCisgICAgICAgICI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1IiwKIH0sCiAjZW5kaWYKICNpZmRlZiBFQ0MzODQKIHsKLSAgIDQ4LAotICAgIkVDQy0zODQiLAotICAgLyogcHJpbWUgKi8KLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy94Ly8vLy8wMDAwMDAwMDAwMy8iCi0gICAiLy8vLyIsCi0KLSAgIC8qIEIgKi8KLSAgICJpcDRsZis4K3YrSU9aV0xodS9XajZIV1RkNngrV0s0STBuRzhacjBKWHJoNkxaY0RZWXhIZElnNW9FdEoiCi0gICAieDJobCIsCi0KLSAgIC8qIE9yZGVyICovCi0gICAiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9uc0REV1ZHdEJUek82V3NvSUIyZFVrcGk2TWhDIgotICAgIm5JYnAiLAotCi0gICAvKiBHeCBhbmQgR3kgKi8KLSAgICJnZVZBOGh3QjFKVUVpU1NVeW8yalQ2dVRFc0FCZnZrT01WVDF1ODlLQVpYTDBsOVRscktmUjNmS05aWG8iCi0gICAiVFdndCIsCi0KLSAgICJEWFZVSWZPY0I2elRkZlkvYWZCU0FWWnE3UnFlY1hIeXdUZW40eE5ta0MwQU9CN0U3TncxZE5mMzdOb0ciCi0gICAid1d2ViIKKyAgICAgICAgNDgsCisgICAgICAgICJFQ0MtMzg0IiwKKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRiIsCisgICAgICAgICJCMzMxMkZBN0UyM0VFN0U0OTg4RTA1NkJFM0Y4MkQxOTE4MUQ5QzZFRkU4MTQxMTIwMzE0MDg4RjUwMTM4NzVBQzY1NjM5OEQ4QTJFRDE5RDJBODVDOEVERDNFQzJBRUYiLAorICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzc2MzREODFGNDM3MkRERjU4MUEwREIyNDhCMEE3N0FFQ0VDMTk2QUNDQzUyOTczIiwKKyAgICAgICAgIkFBODdDQTIyQkU4QjA1Mzc4RUIxQzcxRUYzMjBBRDc0NkUxRDNCNjI4QkE3OUI5ODU5Rjc0MUUwODI1NDJBMzg1NTAyRjI1REJGNTUyOTZDM0E1NDVFMzg3Mjc2MEFCNyIsCisgICAgICAgICIzNjE3REU0QTk2MjYyQzZGNUQ5RTk4QkY5MjkyREMyOUY4RjQxREJEMjg5QTE0N0NFOURBMzExM0I1RjBCOEMwMEE2MEIxQ0UxRDdFODE5RDdBNDMxRDdDOTBFQTBFNUYiLAogfSwKICNlbmRpZgogI2lmZGVmIEVDQzUyMQogewotICAgNjUsCi0gICAiRUNDLTUyMSIsCi0gICAvKiBwcmltZSAqLwotICAgIlYvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyIKLSAgICIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8iLAotCi0gICAvKiBCICovCi0gICAiNTZMRmhiWFpYb1E3dkFROFEyc1hLM2tlamZvTXZjcDVWRXVqOGNIWmw0OXVMT1BFTDdpVmZEeDViQjBsIgotICAgIkprbmxtU3JTeis4RkltcXlVejU3ekhoSzN5MCIsCi0KLSAgIC8qIE9yZGVyICovCi0gICAiVi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLytiNjZYdUUvQnZQaFZ5bTFJIgotICAgIkZTOWZUMHhqU2N1WVBuN2hoamxqbndIRTZHOSIsCi0KLSAgIC8qIEd4IGFuZCBHeSAqLwotICAgIkNRNVpXUXQxMEpmcFB1K29zT1piUkgyZDZJMUVHSy9qSTd1QUF6V1FxcXprZzVCTmRWbHZyYWUvWHQxOSIKLSAgICJ3Qi9nRHVwSUJGMVhNZjJjL2IrVlo3MnZScmMiLAotCi0gICAiSFd2QU1mdWNabDAxNW9BTnhHaVZIbFBjRkw0SUxVUkg2V05oeHFOOXB2Y0I5VmtTZmJVejJQMG5MMnYwIgotICAgIkorajFzNHJGNzI2ZWRCMkc4WStiN1FWcU1QRyIsCisgICAgICAgIDY2LAorICAgICAgICAiRUNDLTUyMSIsCisgICAgICAgICIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsCisgICAgICAgICI1MTk1M0VCOTYxOEUxQzlBMUY5MjlBMjFBMEI2ODU0MEVFQTJEQTcyNUI5OUIzMTVGM0I4QjQ4OTkxOEVGMTA5RTE1NjE5Mzk1MUVDN0U5MzdCMTY1MkMwQkQzQkIxQkYwNzM1NzNERjg4M0QyQzM0RjFFRjQ1MUZENDZCNTAzRjAwIiwKKyAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE1MTg2ODc4M0JGMkY5NjZCN0ZDQzAxNDhGNzA5QTVEMDNCQjVDOUI4ODk5QzQ3QUVCQjZGQjcxRTkxMzg2NDA5IiwKKyAgICAgICAgIkM2ODU4RTA2QjcwNDA0RTlDRDlFM0VDQjY2MjM5NUI0NDI5QzY0ODEzOTA1M0ZCNTIxRjgyOEFGNjA2QjREM0RCQUExNEI1RTc3RUZFNzU5MjhGRTFEQzEyN0EyRkZBOERFMzM0OEIzQzE4NTZBNDI5QkY5N0U3RTMxQzJFNUJENjYiLAorICAgICAgICAiMTE4MzkyOTZBNzg5QTNCQzAwNDVDOEE1RkI0MkM3RDFCRDk5OEY1NDQ0OTU3OUI0NDY4MTdBRkJEMTcyNzNFNjYyQzk3RUU3Mjk5NUVGNDI2NDBDNTUwQjkwMTNGQUQwNzYxMzUzQzcwODZBMjcyQzI0MDg4QkU5NDc2OUZEMTY2NTAiLAogfSwKICNlbmRpZgogewpAQCAtMTUwLDg4NyArMTE5LDkgQEAKIH0KIH07CiAKLXN0YXRpYyBpbnQgaXNfdmFsaWRfaWR4KGludCBuKQotewotICAgaW50IHg7Ci0KLSAgIGZvciAoeCA9IDA7IHNldHNbeF0uc2l6ZSAhPSAwOyB4KyspOwotICAgaWYgKChuIDwgMCkgfHwgKG4gPj0geCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgfQotICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBlY2NfcG9pbnQgKm5ld19wb2ludCh2b2lkKQotewotICAgZWNjX3BvaW50ICpwOwotICAgcCA9IFhNQUxMT0Moc2l6ZW9mKGVjY19wb2ludCkpOwotICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICB9Ci0gICBpZiAobXBfaW5pdF9tdWx0aSgmcC0+eCwgJnAtPnksICZwLT56LCBOVUxMKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBYRlJFRShwKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgfQotICAgcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbF9wb2ludChlY2NfcG9pbnQgKnApCi17Ci0gICAvKiBwcmV2ZW50cyBmcmVlJ2luZyBudWxsIGFyZ3VtZW50cyAqLwotICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgbXBfY2xlYXJfbXVsdGkoJnAtPngsICZwLT55LCAmcC0+eiwgTlVMTCk7Ci0gICAgICBYRlJFRShwKTsKLSAgIH0KLX0KLQotc3RhdGljIGludCBlY2NfbWFwKGVjY19wb2ludCAqUCwgbXBfaW50ICptb2R1bHVzLCBtcF9kaWdpdCBtcCkKLXsKLSAgIG1wX2ludCB0MSwgdDI7Ci0gICBpbnQgZXJyOwotCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnQxLCAmdDIsIE5VTEwpKSAhPSBDUllQVF9PSykgewotICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgIH0KLQotICAgLyogZmlyc3QgbWFwIHogYmFjayB0byBub3JtYWwgKi8KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJlAtPnosIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBnZXQgMS96ICovCi0gICBpZiAoKGVyciA9IG1wX2ludm1vZCgmUC0+eiwgbW9kdWx1cywgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAKLSAgIC8qIGdldCAxL3peMiBhbmQgMS96XjMgKi8KLSAgIGlmICgoZXJyID0gbXBfc3FyKCZ0MSwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9tb2QoJnQyLCBtb2R1bHVzLCAmdDIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX211bCgmdDEsICZ0MiwgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9kKCZ0MSwgbW9kdWx1cywgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBtdWx0aXBseSBhZ2FpbnN0IHgveSAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJlAtPngsICZ0MiwgJlAtPngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZQLT54LCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbXVsKCZQLT55LCAmdDEsICZQLT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSgmUC0+eSwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBtcF9zZXQoJlAtPnosIDEpOwotCi0gICBlcnIgPSBDUllQVF9PSzsKLSAgIGdvdG8gZG9uZTsKLWVycm9yOgotICAgZXJyID0gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotZG9uZToKLSAgIG1wX2NsZWFyX211bHRpKCZ0MSwgJnQyLCBOVUxMKTsKLSAgIHJldHVybiBlcnI7Ci0KLX0KLQotLyogZG91YmxlIGEgcG9pbnQgUiA9IDJQLCBSIGNhbiBiZSBQKi8KLXN0YXRpYyBpbnQgZGJsX3BvaW50KGVjY19wb2ludCAqUCwgZWNjX3BvaW50ICpSLCBtcF9pbnQgKm1vZHVsdXMsIG1wX2RpZ2l0IG1wKQotewotICAgbXBfaW50IHQxLCB0MjsKLSAgIGludCBlcnI7Ci0KLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdDEsICZ0MiwgTlVMTCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci0gICB9Ci0KLSAgIGlmICgoZXJyID0gbXBfY29weSgmUC0+eCwgJlItPngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX2NvcHkoJlAtPnksICZSLT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9jb3B5KCZQLT56LCAmUi0+eikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgLyogdDEgPSBaICogWiAqLwotICAgaWYgKChlcnIgPSBtcF9zcXIoJlItPnosICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBaID0gWSAqIFogKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsKCZSLT56LCAmUi0+eSwgJlItPnopKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZSLT56LCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgLyogWiA9IDJaICovCi0gICBpZiAoKGVyciA9IG1wX211bF8yKCZSLT56LCAmUi0+eikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcCgmUi0+eiwgbW9kdWx1cykgIT0gTVBfTFQpIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZSLT56LCBtb2R1bHVzLCAmUi0+eikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9Ci0KLSAgIC8qIFQyID0gWCAtIFQxICovCi0gICBpZiAoKGVyciA9IG1wX3N1YigmUi0+eCwgJnQxLCAmdDIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcF9kKCZ0MiwgMCkgPT0gTVBfTFQpIHsKLSAgICAgIGlmICgoZXJyID0gbXBfYWRkKCZ0MiwgbW9kdWx1cywgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9Ci0gICAvKiBUMSA9IFggKyBUMSAqLwotICAgaWYgKChlcnIgPSBtcF9hZGQoJnQxLCAmUi0+eCwgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmIChtcF9jbXAoJnQxLCBtb2R1bHVzKSAhPSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLSAgIC8qIFQyID0gVDEgKiBUMiAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJnQxLCAmdDIsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBUMSA9IDJUMiAqLwotICAgaWYgKChlcnIgPSBtcF9tdWxfMigmdDIsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmIChtcF9jbXAoJnQxLCBtb2R1bHVzKSAhPSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLSAgIC8qIFQxID0gVDEgKyBUMiAqLwotICAgaWYgKChlcnIgPSBtcF9hZGQoJnQxLCAmdDIsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmIChtcF9jbXAoJnQxLCBtb2R1bHVzKSAhPSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLQotICAgLyogWSA9IDJZICovCi0gICBpZiAoKGVyciA9IG1wX211bF8yKCZSLT55LCAmUi0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcCgmUi0+eSwgbW9kdWx1cykgIT0gTVBfTFQpIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZSLT55LCBtb2R1bHVzLCAmUi0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9Ci0gICAvKiBZID0gWSAqIFkgKi8KLSAgIGlmICgoZXJyID0gbXBfc3FyKCZSLT55LCAmUi0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZSLT55LCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgLyogVDIgPSBZICogWSAqLwotICAgaWYgKChlcnIgPSBtcF9zcXIoJlItPnksICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBUMiA9IFQyLzIgKi8KLSAgIGlmIChtcF9pc29kZCgmdDIpKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX2FkZCgmdDIsIG1vZHVsdXMsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgaWYgKChlcnIgPSBtcF9kaXZfMigmdDIsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIC8qIFkgPSBZICogWCAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJlItPnksICZSLT54LCAmUi0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJlItPnksIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIFggID0gVDEgKiBUMSAqLwotICAgaWYgKChlcnIgPSBtcF9zcXIoJnQxLCAmUi0+eCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJlItPngsIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBYID0gWCAtIFkgKi8KLSAgIGlmICgoZXJyID0gbXBfc3ViKCZSLT54LCAmUi0+eSwgJlItPngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wX2QoJlItPngsIDApID09IE1QX0xUKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX2FkZCgmUi0+eCwgbW9kdWx1cywgJlItPngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogWCA9IFggLSBZICovCi0gICBpZiAoKGVyciA9IG1wX3N1YigmUi0+eCwgJlItPnksICZSLT54KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcF9kKCZSLT54LCAwKSA9PSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJlItPngsIG1vZHVsdXMsICZSLT54KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLQotICAgLyogWSA9IFkgLSBYICovICAgICAKLSAgIGlmICgoZXJyID0gbXBfc3ViKCZSLT55LCAmUi0+eCwgJlItPnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wX2QoJlItPnksIDApID09IE1QX0xUKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX2FkZCgmUi0+eSwgbW9kdWx1cywgJlItPnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogWSA9IFkgKiBUMSAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJlItPnksICZ0MSwgJlItPnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJlItPnksIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBZID0gWSAtIFQyICovCi0gICBpZiAoKGVyciA9IG1wX3N1YigmUi0+eSwgJnQyLCAmUi0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcF9kKCZSLT55LCAwKSA9PSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJlItPnksIG1vZHVsdXMsICZSLT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLSAKLSAgIGVyciA9IENSWVBUX09LOwotICAgZ290byBkb25lOwotZXJyb3I6Ci0gICBlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci1kb25lOgotICAgbXBfY2xlYXJfbXVsdGkoJnQxLCAmdDIsIE5VTEwpOwotICAgcmV0dXJuIGVycjsKLX0KLQotLyogYWRkIHR3byBkaWZmZXJlbnQgcG9pbnRzIG92ZXIgWi9wWiwgUiA9IFAgKyBRLCBub3RlIFIgY2FuIGVxdWFsIGVpdGhlciBQIG9yIFEgKi8KLXN0YXRpYyBpbnQgYWRkX3BvaW50KGVjY19wb2ludCAqUCwgZWNjX3BvaW50ICpRLCBlY2NfcG9pbnQgKlIsIG1wX2ludCAqbW9kdWx1cywgbXBfZGlnaXQgbXApCi17Ci0gICBtcF9pbnQgdDEsIHQyLCB4LCB5LCB6OwotICAgaW50IGVycjsKLQotICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0MSwgJnQyLCAmeCwgJnksICZ6LCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IoZXJyKTsKLSAgIH0KLQotICAgaWYgKChlcnIgPSBtcF9jb3B5KCZQLT54LCAmeCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfY29weSgmUC0+eSwgJnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX2NvcHkoJlAtPnosICZ6KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAgICAvKiBUMSA9IFonICogWicgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfc3FyKCZRLT56LCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgLyogWCA9IFggKiBUMSAqLwotICAgICAgaWYgKChlcnIgPSBtcF9tdWwoJnQxLCAmeCwgJngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJngsIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAvKiBUMSA9IFonICogVDEgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfbXVsKCZRLT56LCAmdDEsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgLyogWSA9IFkgKiBUMSAqLwotICAgICAgaWYgKChlcnIgPSBtcF9tdWwoJnQxLCAmeSwgJnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnksIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIFQxID0gWipaICovCi0gICBpZiAoKGVyciA9IG1wX3NxcigmeiwgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIC8qIFQyID0gWCcgKiBUMSAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJlEtPngsICZ0MSwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBUMSA9IFogKiBUMSAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJnosICZ0MSwgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBUMSA9IFknICogVDEgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsKCZRLT55LCAmdDEsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBZID0gWSAtIFQxICovCi0gICBpZiAoKGVyciA9IG1wX3N1YigmeSwgJnQxLCAmeSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcF9kKCZ5LCAwKSA9PSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJnksIG1vZHVsdXMsICZ5KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLSAgIC8qIFQxID0gMlQxICovCi0gICBpZiAoKGVyciA9IG1wX211bF8yKCZ0MSwgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcCgmdDEsIG1vZHVsdXMpICE9IE1QX0xUKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX3N1YigmdDEsIG1vZHVsdXMsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogVDEgPSBZICsgVDEgKi8KLSAgIGlmICgoZXJyID0gbXBfYWRkKCZ0MSwgJnksICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wKCZ0MSwgbW9kdWx1cykgIT0gTVBfTFQpIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZ0MSwgbW9kdWx1cywgJnQxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9Ci0gICAvKiBYID0gWCAtIFQyICovCi0gICBpZiAoKGVyciA9IG1wX3N1YigmeCwgJnQyLCAmeCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcF9kKCZ4LCAwKSA9PSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJngsIG1vZHVsdXMsICZ4KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLSAgIC8qIFQyID0gMlQyICovCi0gICBpZiAoKGVyciA9IG1wX211bF8yKCZ0MiwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcCgmdDIsIG1vZHVsdXMpICE9IE1QX0xUKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX3N1YigmdDIsIG1vZHVsdXMsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogVDIgPSBYICsgVDIgKi8KLSAgIGlmICgoZXJyID0gbXBfYWRkKCZ0MiwgJngsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wKCZ0MiwgbW9kdWx1cykgIT0gTVBfTFQpIHsKLSAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZ0MiwgbW9kdWx1cywgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICB9Ci0KLSAgIC8qIGlmIFonICE9IDEgKi8KLSAgIGlmIChtcF9jbXBfZCgmUS0+eiwgMSkgIT0gTVBfRVEpIHsKLSAgICAgIC8qIFogPSBaICogWicgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfbXVsKCZ6LCAmUS0+eiwgJnopKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZ6LCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogWiA9IFogKiBYICovCi0gICBpZiAoKGVyciA9IG1wX211bCgmeiwgJngsICZ6KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSgmeiwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgLyogVDEgPSBUMSAqIFggICovCi0gICBpZiAoKGVyciA9IG1wX211bCgmdDEsICZ4LCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIC8qIFggPSBYICogWCAqLwotICAgaWYgKChlcnIgPSBtcF9zcXIoJngsICZ4KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJngsIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBUMiA9IFQyICogeCAqLwotICAgaWYgKChlcnIgPSBtcF9tdWwoJnQyLCAmeCwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBUMSA9IFQxICogWCAgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsKCZ0MSwgJngsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotIAotICAgLyogWCA9IFkqWSAqLwotICAgaWYgKChlcnIgPSBtcF9zcXIoJnksICZ4KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoJngsIG1vZHVsdXMsIG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAvKiBYID0gWCAtIFQyICovCi0gICBpZiAoKGVyciA9IG1wX3N1YigmeCwgJnQyLCAmeCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKG1wX2NtcF9kKCZ4LCAwKSA9PSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJngsIG1vZHVsdXMsICZ4KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLQotICAgLyogVDIgPSBUMiAtIFggKi8KLSAgIGlmICgoZXJyID0gbXBfc3ViKCZ0MiwgJngsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wX2QoJnQyLCAwKSA9PSBNUF9MVCkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0gCi0gICAvKiBUMiA9IFQyIC0gWCAqLwotICAgaWYgKChlcnIgPSBtcF9zdWIoJnQyLCAmeCwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmIChtcF9jbXBfZCgmdDIsIDApID09IE1QX0xUKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX2FkZCgmdDIsIG1vZHVsdXMsICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogVDIgPSBUMiAqIFkgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsKCZ0MiwgJnksICZ0MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZ0MiwgbW9kdWx1cywgbXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgLyogWSA9IFQyIC0gVDEgKi8KLSAgIGlmICgoZXJyID0gbXBfc3ViKCZ0MiwgJnQxLCAmeSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAobXBfY21wX2QoJnksIDApID09IE1QX0xUKSB7Ci0gICAgICBpZiAoKGVyciA9IG1wX2FkZCgmeSwgbW9kdWx1cywgJnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgfQotICAgLyogWSA9IFkvMiAqLwotICAgaWYgKG1wX2lzb2RkKCZ5KSkgewotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJnksIG1vZHVsdXMsICZ5KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIH0KLSAgIGlmICgoZXJyID0gbXBfZGl2XzIoJnksICZ5KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIGlmICgoZXJyID0gbXBfY29weSgmeCwgJlItPngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX2NvcHkoJnksICZSLT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ6LCAmUi0+eikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgZXJyID0gQ1JZUFRfT0s7Ci0gICBnb3RvIGRvbmU7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmU6Ci0gICBtcF9jbGVhcl9tdWx0aSgmdDEsICZ0MiwgJngsICZ5LCAmeiwgTlVMTCk7Ci0gICByZXR1cm4gZXJyOwotfQotCi0vKiBzaXplIG9mIHNsaWRpbmcgd2luZG93LCBkb24ndCBjaGFuZ2UgdGhpcyEgKi8KLSNkZWZpbmUgV0lOU0laRSA0Ci0KLS8qIHBlcmZvcm0gUiA9IGtHIHdoZXJlIGsgPT0gaW50ZWdlciBhbmQgRyA9PSBlY2NfcG9pbnQgKi8KLXN0YXRpYyBpbnQgZWNjX211bG1vZChtcF9pbnQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCBtcF9pbnQgKm1vZHVsdXMsIGludCBtYXApCi17Ci0gICBlY2NfcG9pbnQgKnRHLCAqTVs4XTsKLSAgIGludCAgICAgICAgaSwgaiwgZXJyOwotICAgbXBfaW50ICAgICBtdTsKLSAgIG1wX2RpZ2l0ICAgYnVmLCBtcDsKLSAgIGludCAgICAgICAgZmlyc3QsIGJpdGJ1ZiwgYml0Y3B5LCBiaXRjbnQsIG1vZGUsIGRpZ2lkeDsKLQotICAgLyogaW5pdCBtb250Z29tZXJ5IHJlZHVjdGlvbiAqLwotICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3NldHVwKG1vZHVsdXMsICZtcCkpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKLSAgIH0KLSAgIGlmICgoZXJyID0gbXBfaW5pdCgmbXUpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfTUVNOwotICAgfQotICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbigmbXUsIG1vZHVsdXMpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBtcF9jbGVhcigmbXUpOwotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwotICAgfQotCi0gIC8qIGFsbG9jIHJhbSBmb3Igd2luZG93IHRlbXBzICovCi0gIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgIE1baV0gPSBuZXdfcG9pbnQoKTsKLSAgICAgIGlmIChNW2ldID09IE5VTEwpIHsKLSAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLSAgICAgICAgICAgICBkZWxfcG9pbnQoTVtqXSk7Ci0gICAgICAgICB9Ci0gICAgICAgICBtcF9jbGVhcigmbXUpOwotICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgICAgIH0KLSAgfQotCi0gICAvKiBtYWtlIGEgY29weSBvZiBHIGluY2FzZSBSPT1HICovCi0gICB0RyA9IG5ld19wb2ludCgpOwotICAgaWYgKHRHID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBlcnIgPSBDUllQVF9NRU07IGdvdG8gZG9uZTsgfQotCi0gICAvKiB0RyA9IEcgIGFuZCBjb252ZXJ0IHRvIG1vbnRnb21lcnkgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsbW9kKCZHLT54LCAmbXUsIG1vZHVsdXMsICZ0Ry0+eCkpICE9IE1QX09LQVkpICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoJkctPnksICZtdSwgbW9kdWx1cywgJnRHLT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IG1wX211bG1vZCgmRy0+eiwgJm11LCBtb2R1bHVzLCAmdEctPnopKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIG1wX2NsZWFyKCZtdSk7Ci0gICAKLSAgIC8qIGNhbGMgdGhlIE0gdGFiLCB3aGljaCBob2xkcyBrRyBmb3Igaz09OC4uMTUgKi8KLSAgIC8qIE1bMF0gPT0gOEcgKi8KLSAgIGlmICgoZXJyID0gZGJsX3BvaW50KHRHLCAgIE1bMF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KLSAgIGlmICgoZXJyID0gZGJsX3BvaW50KE1bMF0sIE1bMF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KLSAgIGlmICgoZXJyID0gZGJsX3BvaW50KE1bMF0sIE1bMF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KLQotICAgLyogbm93IGZpbmQgKDgraylHIGZvciBrPTEuLjcgKi8KLSAgIGZvciAoaiA9IDk7IGogPCAxNjsgaisrKSB7Ci0gICAgICAgaWYgKChlcnIgPSBhZGRfcG9pbnQoTVtqLTldLCB0RywgTVtqLThdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgIHsgZ290byBkb25lOyB9Ci0gICB9Ci0KLSAgIC8qIHNldHVwIHNsaWRpbmcgd2luZG93ICovCi0gICBtb2RlICAgPSAwOwotICAgYml0Y250ID0gMTsKLSAgIGJ1ZiAgICA9IDA7Ci0gICBkaWdpZHggPSBrLT51c2VkIC0gMTsKLSAgIGJpdGNweSA9IGJpdGJ1ZiA9IDA7Ci0gICBmaXJzdCAgPSAxOwotCi0gICAvKiBwZXJmb3JtIG9wcyAqLwotICAgZm9yICg7OykgewotICAgICAvKiBncmFiIG5leHQgZGlnaXQgYXMgcmVxdWlyZWQgKi8KLSAgICAgaWYgKC0tYml0Y250ID09IDApIHsKLSAgICAgICBpZiAoZGlnaWR4ID09IC0xKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQotICAgICAgIGJ1ZiA9IGstPmRwW2RpZ2lkeC0tXTsKLSAgICAgICBiaXRjbnQgPSAoaW50KSBESUdJVF9CSVQ7Ci0gICAgIH0KLQotICAgICAvKiBncmFiIHRoZSBuZXh0IG1zYiBmcm9tIHRoZSBsdGlwbGljYW5kICovCi0gICAgIGkgPSAoYnVmID4+IChESUdJVF9CSVQgLSAxKSkgJiAxOwotICAgICBidWYgPDw9IDE7Ci0KLSAgICAgLyogc2tpcCBsZWFkaW5nIHplcm8gYml0cyAqLwotICAgICBpZiAobW9kZSA9PSAwICYmIGkgPT0gMCkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgfQotCi0gICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAxIHRoZW4gd2UgZG91YmxlICovCi0gICAgIGlmIChtb2RlID09IDEgJiYgaSA9PSAwKSB7Ci0gICAgICAgIGlmICgoZXJyID0gZGJsX3BvaW50KFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICB9Ci0KLSAgICAgLyogZWxzZSB3ZSBhZGQgaXQgdG8gdGhlIHdpbmRvdyAqLwotICAgICBiaXRidWYgfD0gKGkgPDwgKFdJTlNJWkUgLSArK2JpdGNweSkpOwotICAgICBtb2RlID0gMjsKLQotICAgICBpZiAoYml0Y3B5ID09IFdJTlNJWkUpIHsKLSAgICAgICAvKiBpZiB0aGlzIGlzIHRoZSBmaXJzdCB3aW5kb3cgd2UgZG8gYSBzaW1wbGUgY29weSAqLwotICAgICAgIGlmIChmaXJzdCA9PSAxKSB7Ci0gICAgICAgICAgLyogUiA9IGtHIFtrID0gZmlyc3Qgd2luZG93XSAqLwotICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmTVtiaXRidWYtOF0tPngsICZSLT54KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZNW2JpdGJ1Zi04XS0+eSwgJlItPnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJk1bYml0YnVmLThdLT56LCAmUi0+eikpICE9IE1QX09LQVkpICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgICAgIGZpcnN0ID0gMDsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgLyogbm9ybWFsIHdpbmRvdyAqLwotICAgICAgICAgLyogb2sgd2luZG93IGlzIGZpbGxlZCBzbyBkb3VibGUgYXMgcmVxdWlyZWQgYW5kIGFkZCAgKi8KLSAgICAgICAgIC8qIGRvdWJsZSBmaXJzdCAqLwotICAgICAgICAgZm9yIChqID0gMDsgaiA8IFdJTlNJWkU7IGorKykgewotICAgICAgICAgICBpZiAoKGVyciA9IGRibF9wb2ludChSLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQotICAgICAgICAgfQotCi0gICAgICAgICAvKiB0aGVuIGFkZCwgYml0YnVmIHdpbGwgYmUgOC4uMTUgWzguLjJeV0lOU0laRV0gZ3VhcmFudGVlZCAqLwotICAgICAgICAgaWYgKChlcnIgPSBhZGRfcG9pbnQoUiwgTVtiaXRidWYtOF0sIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICB7IGdvdG8gZG9uZTsgfQotICAgICAgIH0KLSAgICAgICAvKiBlbXB0eSB3aW5kb3cgYW5kIHJlc2V0ICovCi0gICAgICAgYml0Y3B5ID0gYml0YnVmID0gMDsKLSAgICAgICBtb2RlID0gMTsKLSAgICB9Ci0gIH0KLQotICAgLyogaWYgYml0cyByZW1haW4gdGhlbiBkb3VibGUvYWRkICovCi0gICBpZiAobW9kZSA9PSAyICYmIGJpdGNweSA+IDApIHsKLSAgICAgLyogZG91YmxlIHRoZW4gYWRkICovCi0gICAgIGZvciAoaiA9IDA7IGogPCBiaXRjcHk7IGorKykgewotICAgICAgIC8qIG9ubHkgZG91YmxlIGlmIHdlIGhhdmUgaGFkIGF0IGxlYXN0IG9uZSBhZGQgZmlyc3QgKi8KLSAgICAgICBpZiAoZmlyc3QgPT0gMCkgewotICAgICAgICAgIGlmICgoZXJyID0gZGJsX3BvaW50KFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KLSAgICAgICB9Ci0KLSAgICAgICBiaXRidWYgPDw9IDE7Ci0gICAgICAgaWYgKChiaXRidWYgJiAoMSA8PCBXSU5TSVpFKSkgIT0gMCkgewotICAgICAgICAgaWYgKGZpcnN0ID09IDEpewotICAgICAgICAgICAgLyogZmlyc3QgYWRkLCBzbyBjb3B5ICovCi0gICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnRHLT54LCAmUi0+eCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnRHLT55LCAmUi0+eSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnRHLT56LCAmUi0+eikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICAgICAgICAgICBmaXJzdCA9IDA7Ci0gICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdGhlbiBhZGQgKi8KLSAgICAgICAgICAgIGlmICgoZXJyID0gYWRkX3BvaW50KFIsIHRHLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgIHsgZ290byBkb25lOyB9Ci0gICAgICAgICB9Ci0gICAgICAgfQotICAgICB9Ci0gICB9Ci0KLSAgIC8qIG1hcCBSIGJhY2sgZnJvbSBwcm9qZWN0aXZlIHNwYWNlICovCi0gICBpZiAobWFwKSB7Ci0gICAgICBlcnIgPSBlY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKLSAgIH0gZWxzZSB7Ci0gICAgICBlcnIgPSBDUllQVF9PSzsKLSAgIH0KLQotICAgZ290byBkb25lOwotZXJyb3I6Ci0gICBlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci1kb25lOgotICAgZGVsX3BvaW50KHRHKTsKLSAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgICBkZWxfcG9pbnQoTVtpXSk7Ci0gICB9Ci0gICByZXR1cm4gZXJyOwotfQotCi0jdW5kZWYgV0lOU0laRQotCi0vKioKLSAgUGVyZm9ybSBvbiB0aGUgRUNDIHN5c3RlbQotICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKLSovCi1pbnQgZWNjX3Rlc3Qodm9pZCkKLXsKLSAgIG1wX2ludCAgICAgbW9kdWx1cywgb3JkZXI7Ci0gICBlY2NfcG9pbnQgICpHLCAqR0c7Ci0gICBpbnQgaSwgZXJyLCBwcmltYWxpdHk7Ci0KLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmbW9kdWx1cywgJm9yZGVyLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IoZXJyKTsKLSAgIH0KLQotICAgRyAgID0gbmV3X3BvaW50KCk7Ci0gICBHRyAgPSBuZXdfcG9pbnQoKTsKLSAgIGlmIChHID09IE5VTEwgfHwgR0cgPT0gTlVMTCkgewotICAgICAgbXBfY2xlYXJfbXVsdGkoJm1vZHVsdXMsICZvcmRlciwgTlVMTCk7Ci0gICAgICBkZWxfcG9pbnQoRyk7Ci0gICAgICBkZWxfcG9pbnQoR0cpOwotICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgIH0KLQotICAgZm9yIChpID0gMDsgc2V0c1tpXS5zaXplOyBpKyspIHsKLSAgICAgICAjaWYgMAotICAgICAgICAgIHByaW50ZigiVGVzdGluZyAlZFxuIiwgc2V0c1tpXS5zaXplKTsKLSAgICAgICAjZW5kaWYKLSAgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoJm1vZHVsdXMsIChjaGFyICopc2V0c1tpXS5wcmltZSwgNjQpKSAhPSBNUF9PS0FZKSAgIHsgZ290byBlcnJvcjsgfQotICAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmb3JkZXIsIChjaGFyICopc2V0c1tpXS5vcmRlciwgNjQpKSAhPSBNUF9PS0FZKSAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgICAgICAvKiBpcyBwcmltZSBhY3R1YWxseSBwcmltZT8gKi8KLSAgICAgICBpZiAoKGVyciA9IGlzX3ByaW1lKCZtb2R1bHVzLCAmcHJpbWFsaXR5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9Ci0gICAgICAgaWYgKHByaW1hbGl0eSA9PSAwKSB7Ci0gICAgICAgICAgZXJyID0gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICB9Ci0KLSAgICAgICAvKiBpcyBvcmRlciBwcmltZSA/ICovCi0gICAgICAgaWYgKChlcnIgPSBpc19wcmltZSgmb3JkZXIsICZwcmltYWxpdHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQotICAgICAgIGlmIChwcmltYWxpdHkgPT0gMCkgewotICAgICAgICAgIGVyciA9IENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgfQotCi0gICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KCZHLT54LCAoY2hhciAqKXNldHNbaV0uR3gsIDY0KSkgIT0gTVBfT0tBWSkgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoJkctPnksIChjaGFyICopc2V0c1tpXS5HeSwgNjQpKSAhPSBNUF9PS0FZKSAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgIG1wX3NldCgmRy0+eiwgMSk7Ci0KLSAgICAgICAvKiB0aGVuIHdlIHNob3VsZCBoYXZlIEcgPT0gKG9yZGVyICsgMSlHICovCi0gICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZCgmb3JkZXIsIDEsICZvcmRlcikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgICAgICBpZiAoKGVyciA9IGVjY19tdWxtb2QoJm9yZGVyLCBHLCBHRywgJm1vZHVsdXMsIDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9Ci0gICAgICAgaWYgKG1wX2NtcCgmRy0+eCwgJkdHLT54KSAhPSAwIHx8IG1wX2NtcCgmRy0+eSwgJkdHLT55KSAhPSAwKSB7Ci0gICAgICAgICAgZXJyID0gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICB9Ci0gICB9Ci0gICBlcnIgPSBDUllQVF9PSzsKLSAgIGdvdG8gZG9uZTsKLWVycm9yOgotICAgZXJyID0gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotZG9uZToKLSAgIGRlbF9wb2ludChHRyk7Ci0gICBkZWxfcG9pbnQoRyk7Ci0gICBtcF9jbGVhcl9tdWx0aSgmb3JkZXIsICZtb2R1bHVzLCBOVUxMKTsKLSAgIHJldHVybiBlcnI7Ci19Ci0KLXZvaWQgZWNjX3NpemVzKGludCAqbG93LCBpbnQgKmhpZ2gpCi17Ci0gaW50IGk7Ci0gTFRDX0FSR0NISyhsb3cgICE9IE5VTEwpOwotIExUQ19BUkdDSEsoaGlnaCAhPSBOVUxMKTsKLQotICpsb3cgPSBJTlRfTUFYOwotICpoaWdoID0gMDsKLSBmb3IgKGkgPSAwOyBzZXRzW2ldLnNpemUgIT0gMDsgaSsrKSB7Ci0gICAgIGlmIChzZXRzW2ldLnNpemUgPCAqbG93KSAgewotICAgICAgICAqbG93ICA9IHNldHNbaV0uc2l6ZTsKLSAgICAgfQotICAgICBpZiAoc2V0c1tpXS5zaXplID4gKmhpZ2gpIHsKLSAgICAgICAgKmhpZ2ggPSBzZXRzW2ldLnNpemU7Ci0gICAgIH0KLSB9Ci19Ci0KLS8qKgotICBNYWtlIGEgbmV3IEVDQyBrZXkgCi0gIEBwYXJhbSBwcm5nICAgICAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKLSAgQHBhcmFtIHdwcm5nICAgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgeW91IHdpc2ggdG8gdXNlCi0gIEBwYXJhbSBrZXlzaXplICAgICAgVGhlIGtleXNpemUgZm9yIHRoZSBuZXcga2V5IChpbiBvY3RldHMgZnJvbSAyMCB0byA2NSBieXRlcykKLSAgQHBhcmFtIGtleSAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgbmV3bHkgY3JlYXRlZCBrZXkKLSAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCB1cG9uIGVycm9yIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgYmUgZnJlZWQKLSovCi1pbnQgZWNjX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGtleXNpemUsIGVjY19rZXkgKmtleSkKLXsKLSAgIGludCAgICAgICAgICAgIHgsIGVycjsKLSAgIGVjY19wb2ludCAgICAgKmJhc2U7Ci0gICBtcF9pbnQgICAgICAgICBwcmltZTsKLSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7Ci0KLSAgIC8qIGdvb2QgcHJuZz8gKi8KLSAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgfQotCi0gICAvKiBmaW5kIGtleSBzaXplICovCi0gICBmb3IgKHggPSAwOyAoa2V5c2l6ZSA+IHNldHNbeF0uc2l6ZSkgJiYgKHNldHNbeF0uc2l6ZSAhPSAwKTsgeCsrKTsKLSAgIGtleXNpemUgPSBzZXRzW3hdLnNpemU7Ci0KLSAgIGlmIChrZXlzaXplID4gRUNDX01BWFNJWkUgfHwgc2V0c1t4XS5zaXplID09IDApIHsKLSAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7Ci0gICB9Ci0gICBrZXktPmlkeCA9IHg7Ci0KLSAgIC8qIGFsbG9jYXRlIHJhbSAqLwotICAgYmFzZSA9IE5VTEw7Ci0gICBidWYgID0gWE1BTExPQyhFQ0NfTUFYU0laRSk7Ci0gICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBDUllQVF9NRU07Ci0gICB9Ci0KLSAgIC8qIG1ha2UgdXAgcmFuZG9tIHN0cmluZyAqLwotICAgaWYgKHBybmdfZGVzY3JpcHRvclt3cHJuZ10ucmVhZChidWYsICh1bnNpZ25lZCBsb25nKWtleXNpemUsIHBybmcpICE9ICh1bnNpZ25lZCBsb25nKWtleXNpemUpIHsKLSAgICAgIGVyciA9IENSWVBUX0VSUk9SX1JFQURQUk5HOwotICAgICAgZ290byBMQkxfRVJSMjsKLSAgIH0KLQotICAgLyogc2V0dXAgdGhlIGtleSB2YXJpYWJsZXMgKi8KLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgma2V5LT5wdWJrZXkueCwgJmtleS0+cHVia2V5LnksICZrZXktPnB1YmtleS56LCAma2V5LT5rLCAmcHJpbWUsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0gICBiYXNlID0gbmV3X3BvaW50KCk7Ci0gICBpZiAoYmFzZSA9PSBOVUxMKSB7Ci0gICAgICBtcF9jbGVhcl9tdWx0aSgma2V5LT5wdWJrZXkueCwgJmtleS0+cHVia2V5LnksICZrZXktPnB1YmtleS56LCAma2V5LT5rLCAmcHJpbWUsIE5VTEwpOwotICAgICAgZXJyID0gQ1JZUFRfTUVNOwotICAgICAgZ290byBMQkxfRVJSOwotICAgfQotCi0gICAvKiByZWFkIGluIHRoZSBzcGVjcyBmb3IgdGhpcyBrZXkgKi8KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmcHJpbWUsIChjaGFyICopc2V0c1trZXktPmlkeF0ucHJpbWUsIDY0KSkgIT0gTVBfT0tBWSkgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmYmFzZS0+eCwgKGNoYXIgKilzZXRzW2tleS0+aWR4XS5HeCwgNjQpKSAhPSBNUF9PS0FZKSAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmYmFzZS0+eSwgKGNoYXIgKilzZXRzW2tleS0+aWR4XS5HeSwgNjQpKSAhPSBNUF9PS0FZKSAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIG1wX3NldCgmYmFzZS0+eiwgMSk7Ci0gICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKCZrZXktPmssICh1bnNpZ25lZCBjaGFyICopYnVmLCBrZXlzaXplKSkgIT0gTVBfT0tBWSkgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIG1ha2UgdGhlIHB1YmxpYyBrZXkgKi8KLSAgIGlmICgoZXJyID0gZWNjX211bG1vZCgma2V5LT5rLCBiYXNlLCAma2V5LT5wdWJrZXksICZwcmltZSwgMSkpICE9IENSWVBUX09LKSAgICAgICAgICB7IGdvdG8gTEJMX0VSUjsgfQotICAga2V5LT50eXBlID0gUEtfUFJJVkFURTsKLQotICAgLyogc2hyaW5rIGtleSAqLwotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+aykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+cHVia2V5LngpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+cHVia2V5LnkpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+cHVia2V5LnopKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBmcmVlIHVwIHJhbSAqLwotICAgZXJyID0gQ1JZUFRfT0s7Ci0gICBnb3RvIExCTF9FUlI7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLUxCTF9FUlI6Ci0gICBkZWxfcG9pbnQoYmFzZSk7Ci0gICBtcF9jbGVhcigmcHJpbWUpOwotTEJMX0VSUjI6Ci0jaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi0gICB6ZXJvbWVtKGJ1ZiwgRUNDX01BWFNJWkUpOwogI2VuZGlmCiAKLSAgIFhGUkVFKGJ1Zik7Ci0KLSAgIHJldHVybiBlcnI7Ci19Ci0KLS8qKgotICBGcmVlIGFuIEVDQyBrZXkgZnJvbSBtZW1vcnkKLSAgQHBhcmFtIGtleSAgIFRoZSBrZXkgeW91IHdpc2ggdG8gZnJlZQotKi8KLXZvaWQgZWNjX2ZyZWUoZWNjX2tleSAqa2V5KQotewotICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7Ci0gICBtcF9jbGVhcl9tdWx0aSgma2V5LT5wdWJrZXkueCwgJmtleS0+cHVia2V5LnksICZrZXktPnB1YmtleS56LCAma2V5LT5rLCBOVUxMKTsKLX0KLQotLyoqCi0gIEV4cG9ydCBhbiBFQ0Mga2V5IGFzIGEgYmluYXJ5IHBhY2tldAotICBAcGFyYW0gb3V0ICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGhlIGtleQotICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGV4cG9ydGVkIGtleQotICBAcGFyYW0gdHlwZSAgICBUaGUgdHlwZSBvZiBrZXkgeW91IHdhbnQgdG8gZXhwb3J0IChQS19QUklWQVRFIG9yIFBLX1BVQkxJQykKLSAgQHBhcmFtIGtleSAgICAgVGhlIGtleSB0byBleHBvcnQKLSAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCi0qLwotaW50IGVjY19leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCBlY2Nfa2V5ICprZXkpCi17Ci0gICBpbnQgICAgICAgICAgIGVycjsKLSAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMV07Ci0gICB1bnNpZ25lZCBsb25nIGtleV9zaXplOwotCi0gICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7Ci0gICAKLSAgIC8qIHR5cGUgdmFsaWQ/ICovCi0gICBpZiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUgJiYgdHlwZSA9PSBQS19QUklWQVRFKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKLSAgIH0KLQotICAgaWYgKGlzX3ZhbGlkX2lkeChrZXktPmlkeCkgPT0gMCkgewotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwotICAgfQotCi0gICAvKiB3ZSBzdG9yZSB0aGUgTklTVCBieXRlIHNpemUgKi8KLSAgIGtleV9zaXplID0gc2V0c1trZXktPmlkeF0uc2l6ZTsKLQotICAgaWYgKHR5cGUgPT0gUEtfUFJJVkFURSkgewotICAgICAgIGZsYWdzWzBdID0gMTsKLSAgICAgICBlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKG91dCwgb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAgICAxVUwsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwgICAxVUwsICZrZXlfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCAma2V5LT5wdWJrZXkueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCAma2V5LT5wdWJrZXkueSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCAma2V5LT5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAgICAwVUwsIE5VTEwpOwotICAgfSBlbHNlIHsKLSAgICAgICBmbGFnc1swXSA9IDA7Ci0gICAgICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgICAgMVVMLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICAgMVVMLCAma2V5X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwgJmtleS0+cHVia2V5LngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwgJmtleS0+cHVia2V5LnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgIDBVTCwgTlVMTCk7Ci0gICB9Ci0KLSAgIHJldHVybiBlcnI7Ci19Ci0KLS8qKgotICBJbXBvcnQgYW4gRUNDIGtleSBmcm9tIGEgYmluYXJ5IHBhY2tldAotICBAcGFyYW0gaW4gICAgICBUaGUgcGFja2V0IHRvIGltcG9ydAotICBAcGFyYW0gaW5sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQKLSAgQHBhcmFtIGtleSAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBpbXBvcnQKLSAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCB1cG9uIGVycm9yIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgYmUgZnJlZWQKLSovCi1pbnQgZWNjX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZWNjX2tleSAqa2V5KQotewotICAgdW5zaWduZWQgbG9uZyBrZXlfc2l6ZTsKLSAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMV07Ci0gICBpbnQgICAgICAgICAgIGVycjsKLQotICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKLQotICAgLyogaW5pdCBrZXkgKi8KLSAgIGlmIChtcF9pbml0X211bHRpKCZrZXktPnB1YmtleS54LCAma2V5LT5wdWJrZXkueSwgJmtleS0+cHVia2V5LnosICZrZXktPmssIE5VTEwpICE9IE1QX09LQVkpIHsKLSAgICAgIHJldHVybiBDUllQVF9NRU07Ci0gICB9Ci0KLSAgIC8qIGZpbmQgb3V0IHdoYXQgdHlwZSBvZiBrZXkgaXQgaXMgKi8KLSAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsIDFVTCwgJmZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7Ci0gICAgICBnb3RvIGVycm9yOwotICAgfQotCi0KLSAgIGlmIChmbGFnc1swXSA9PSAxKSB7Ci0gICAgICAvKiBwcml2YXRlIGtleSAqLwotICAgICAga2V5LT50eXBlID0gUEtfUFJJVkFURTsKLSAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAgICAxVUwsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICAgMVVMLCAma2V5X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsICZrZXktPnB1YmtleS54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCAma2V5LT5wdWJrZXkueSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwgJmtleS0+aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7Ci0gICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfQotICAgfSBlbHNlIHsKLSAgICAgIC8qIHB1YmxpYyBrZXkgKi8KLSAgICAgIC8qIHByaXZhdGUga2V5ICovCi0gICAgICBrZXktPnR5cGUgPSBQS19QVUJMSUM7Ci0gICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgICAgMVVMLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAgIDFVTCwgJmtleV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCAma2V5LT5wdWJrZXkueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwgJmtleS0+cHVia2V5LnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgewotICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIH0KLSAgIH0KLQotICAgLyogZmluZCB0aGUgaWR4ICovCi0gICBmb3IgKGtleS0+aWR4ID0gMDsgc2V0c1trZXktPmlkeF0uc2l6ZSAmJiAodW5zaWduZWQgbG9uZylzZXRzW2tleS0+aWR4XS5zaXplICE9IGtleV9zaXplOyArK2tleS0+aWR4KTsKLSAgIGlmIChzZXRzW2tleS0+aWR4XS5zaXplID09IDApIHsKLSAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOwotICAgICAgZ290byBlcnJvcjsKLSAgIH0KLQotICAgLyogc2V0IHogKi8KLSAgIG1wX3NldCgma2V5LT5wdWJrZXkueiwgMSk7Ci0KLSAgIC8qIHdlJ3JlIGdvb2QgKi8KLSAgIHJldHVybiBDUllQVF9PSzsKLWVycm9yOgotICAgbXBfY2xlYXJfbXVsdGkoJmtleS0+cHVia2V5LngsICZrZXktPnB1YmtleS55LCAma2V5LT5wdWJrZXkueiwgJmtleS0+aywgTlVMTCk7Ci0gICByZXR1cm4gZXJyOwotfQotCi0vKioKLSAgQ3JlYXRlIGFuIEVDQyBzaGFyZWQgc2VjcmV0IGJldHdlZW4gdHdvIGtleXMKLSAgQHBhcmFtIHByaXZhdGVfa2V5ICAgICAgVGhlIHByaXZhdGUgRUNDIGtleQotICBAcGFyYW0gcHVibGljX2tleSAgICAgICBUaGUgcHVibGljIGtleQotICBAcGFyYW0gb3V0ICAgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgc2hhcmVkIHNlY3JldCAoQ29uZm9ybXMgdG8gRUMtREggZnJvbSBBTlNJIFg5LjYzKQotICBAcGFyYW0gb3V0bGVuICAgICAgICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBzaGFyZWQgc2VjcmV0Ci0gIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAotKi8KLWludCBlY2Nfc2hhcmVkX3NlY3JldChlY2Nfa2V5ICpwcml2YXRlX2tleSwgZWNjX2tleSAqcHVibGljX2tleSwKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKLXsKLSAgIHVuc2lnbmVkIGxvbmcgeDsKLSAgIGVjY19wb2ludCAqcmVzdWx0OwotICAgbXBfaW50IHByaW1lOwotICAgaW50IGVycjsKLQotICAgTFRDX0FSR0NISyhwcml2YXRlX2tleSAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsocHVibGljX2tleSAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKG91dCAgICAgICAgICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhvdXRsZW4gICAgICAhPSBOVUxMKTsKLQotICAgLyogdHlwZSB2YWxpZD8gKi8KLSAgIGlmIChwcml2YXRlX2tleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7Ci0gICB9Ci0KLSAgIGlmIChpc192YWxpZF9pZHgocHJpdmF0ZV9rZXktPmlkeCkgPT0gMCkgewotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwotICAgfQotCi0gICBpZiAocHJpdmF0ZV9rZXktPmlkeCAhPSBwdWJsaWNfa2V5LT5pZHgpIHsKLSAgICAgIHJldHVybiBDUllQVF9QS19UWVBFX01JU01BVENIOwotICAgfQotCi0gICAvKiBtYWtlIG5ldyBwb2ludCAqLwotICAgcmVzdWx0ID0gbmV3X3BvaW50KCk7Ci0gICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgIHJldHVybiBDUllQVF9NRU07Ci0gICB9Ci0KLSAgIGlmICgoZXJyID0gbXBfaW5pdCgmcHJpbWUpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICBkZWxfcG9pbnQocmVzdWx0KTsKLSAgICAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci0gICB9Ci0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmcHJpbWUsIChjaGFyICopc2V0c1twcml2YXRlX2tleS0+aWR4XS5wcmltZSwgNjQpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBlY2NfbXVsbW9kKCZwcml2YXRlX2tleS0+aywgJnB1YmxpY19rZXktPnB1YmtleSwgcmVzdWx0LCAmcHJpbWUsIDEpKSAhPSBDUllQVF9PSykgICAgICAgeyBnb3RvIGRvbmUxOyB9Ci0KLSAgIHggPSAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZSgmcHJpbWUpOwotICAgaWYgKCpvdXRsZW4gPCB4KSB7Ci0gICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICBnb3RvIGRvbmUxOwotICAgfQotICAgemVyb21lbShvdXQsIHgpOwotICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4oJnJlc3VsdC0+eCwgb3V0ICsgKHggLSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgmcmVzdWx0LT54KSkpKSAgICE9IE1QX09LQVkpICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICBlcnIgICAgID0gQ1JZUFRfT0s7Ci0gICAqb3V0bGVuID0geDsKLSAgIGdvdG8gZG9uZTE7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmUxOgotICAgbXBfY2xlYXIoJnByaW1lKTsKLSAgIGRlbF9wb2ludChyZXN1bHQpOwotICAgcmV0dXJuIGVycjsKLX0KLQotLyoqCi0gIEdldCB0aGUgc2l6ZSBvZiBhbiBFQ0Mga2V5Ci0gIEBwYXJhbSBrZXkgICAgVGhlIGtleSB0byBnZXQgdGhlIHNpemUgb2YgCi0gIEByZXR1cm4gVGhlIHNpemUgKG9jdGV0cykgb2YgdGhlIGtleSBvciBJTlRfTUFYIG9uIGVycm9yCi0qLwotaW50IGVjY19nZXRfc2l6ZShlY2Nfa2V5ICprZXkpCi17Ci0gICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKLSAgIGlmIChpc192YWxpZF9pZHgoa2V5LT5pZHgpKQotICAgICAgcmV0dXJuIHNldHNba2V5LT5pZHhdLnNpemU7Ci0gICBlbHNlCi0gICAgICByZXR1cm4gSU5UX01BWDsgLyogbGFyZ2UgdmFsdWUga25vd24gdG8gY2F1c2UgaXQgdG8gZmFpbCB3aGVuIHBhc3NlZCB0byBlY2NfbWFrZV9rZXkoKSAqLwotfQotCi0jaW5jbHVkZSAiZWNjX3N5cy5jIgotCi0jZW5kaWYKLQotCi0KIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMjAgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTQgMjA6NDI6MjggJCAqLworLyogJFJldmlzaW9uOiAxLjM4ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA3IDIzOjE0OjI4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2V4cG9ydC5jIGIvc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2V4cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzI5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfZXhwb3J0LmMKQEAgLTAsMCArMSw3MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX2Fuc2lfeDk2M19leHBvcnQuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqIEVDQyBYOS42MyAoU2VjLiA0LjMuNikgdW5jb21wcmVzc2VkIGV4cG9ydAorICBAcGFyYW0ga2V5ICAgICBLZXkgdG8gZXhwb3J0CisgIEBwYXJhbSBvdXQgICAgIFtvdXRdIGRlc3RpbmF0aW9uIG9mIGV4cG9ydAorICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSAgTGVuZ3RoIG9mIGRlc3RpbmF0aW9uIGFuZCBmaW5hbCBvdXRwdXQgc2l6ZQorICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBlY2NfYW5zaV94OTYzX2V4cG9ydChlY2Nfa2V5ICprZXksIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgY2hhciBidWZbRUNDX0JVRl9TSVpFXTsKKyAgIHVuc2lnbmVkIGxvbmcgbnVtbGVuOworCisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIGlmIChsdGNfZWNjX2lzX3ZhbGlkX2lkeChrZXktPmlkeCkgPT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorICAgbnVtbGVuID0ga2V5LT5kcC0+c2l6ZTsKKworICAgaWYgKCpvdXRsZW4gPCAoMSArIDIqbnVtbGVuKSkgeworICAgICAgKm91dGxlbiA9IDEgKyAyKm51bWxlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIC8qIHN0b3JlIGJ5dGUgMHgwNCAqLworICAgb3V0WzBdID0gMHgwNDsKKworICAgLyogcGFkIGFuZCBzdG9yZSB4ICovCisgICB6ZXJvbWVtKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgbXBfdG9fdW5zaWduZWRfYmluKGtleS0+cHVia2V5LngsIGJ1ZiArIChudW1sZW4gLSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnB1YmtleS54KSkpOworICAgWE1FTUNQWShvdXQrMSwgYnVmLCBudW1sZW4pOworCisgICAvKiBwYWQgYW5kIHN0b3JlIHkgKi8KKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisgICBtcF90b191bnNpZ25lZF9iaW4oa2V5LT5wdWJrZXkueSwgYnVmICsgKG51bWxlbiAtIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cHVia2V5LnkpKSk7CisgICBYTUVNQ1BZKG91dCsxK251bWxlbiwgYnVmLCBudW1sZW4pOworCisgICAqb3V0bGVuID0gMSArIDIqbnVtbGVuOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2V4cG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6NTA6MTEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2ltcG9ydC5jIGIvc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2ltcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MmY1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0LmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19hbnNpX3g5NjNfaW1wb3J0LmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKiBJbXBvcnQgYW4gQU5TSSBYOS42MyBmb3JtYXQgcHVibGljIGtleSAKKyAgQHBhcmFtIGluICAgICAgVGhlIGlucHV0IGRhdGEgdG8gcmVhZAorICBAcGFyYW0gaW5sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBkYXRhCisgIEBwYXJhbSBrZXkgICAgIFtvdXRdIGRlc3RpbmF0aW9uIHRvIHN0b3JlIGltcG9ydGVkIGtleSBcCisqLworaW50IGVjY19hbnNpX3g5NjNfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpCit7CisgICByZXR1cm4gZWNjX2Fuc2lfeDk2M19pbXBvcnRfZXgoaW4sIGlubGVuLCBrZXksIE5VTEwpOworfQorCitpbnQgZWNjX2Fuc2lfeDk2M19pbXBvcnRfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGVjY19rZXkgKmtleSwgbHRjX2VjY19zZXRfdHlwZSAqZHApCit7CisgICBpbnQgeCwgZXJyOworIAorICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIAorICAgLyogbXVzdCBiZSBvZGQgKi8KKyAgIGlmICgoaW5sZW4gJiAxKSA9PSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGluaXQga2V5ICovCisgICBpZiAobXBfaW5pdF9tdWx0aSgma2V5LT5wdWJrZXkueCwgJmtleS0+cHVia2V5LnksICZrZXktPnB1YmtleS56LCAma2V5LT5rLCBOVUxMKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogY2hlY2sgZm9yIDQsIDYgb3IgNyAqLworICAgaWYgKGluWzBdICE9IDQgJiYgaW5bMF0gIT0gNiAmJiBpblswXSAhPSA3KSB7CisgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIHJlYWQgZGF0YSAqLworICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbihrZXktPnB1YmtleS54LCAodW5zaWduZWQgY2hhciAqKWluKzEsIChpbmxlbi0xKT4+MSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGtleS0+cHVia2V5LnksICh1bnNpZ25lZCBjaGFyICopaW4rMSsoKGlubGVuLTEpPj4xKSwgKGlubGVuLTEpPj4xKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisgICBpZiAoKGVyciA9IG1wX3NldChrZXktPnB1YmtleS56LCAxKSkgIT0gQ1JZUFRfT0spIHsgZ290byBlcnJvcjsgfQorCisgICBpZiAoZHAgPT0gTlVMTCkgeworICAgICAvKiBkZXRlcm1pbmUgdGhlIGlkeCAqLworICAgICAgZm9yICh4ID0gMDsgbHRjX2VjY19zZXRzW3hdLnNpemUgIT0gMDsgeCsrKSB7CisgICAgICAgICBpZiAoKHVuc2lnbmVkKWx0Y19lY2Nfc2V0c1t4XS5zaXplID49ICgoaW5sZW4tMSk+PjEpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChsdGNfZWNjX3NldHNbeF0uc2l6ZSA9PSAwKSB7CisgICAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgICAgICAvKiBzZXQgdGhlIGlkeCAqLworICAgICAga2V5LT5pZHggID0geDsKKyAgICAgIGtleS0+ZHAgPSAmbHRjX2VjY19zZXRzW3hdOworICAgfSBlbHNlIHsKKyAgICAgIGlmICgoKGlubGVuLTEpPj4xKSAhPSAodW5zaWduZWQgbG9uZykgZHAtPnNpemUpIHsKKyAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICAgIGtleS0+aWR4ID0gLTE7CisgICAgICBrZXktPmRwICA9IGRwOworICAgfQorICAga2V5LT50eXBlID0gUEtfUFVCTElDOworCisgICAvKiB3ZSdyZSBkb25lICovCisgICByZXR1cm4gQ1JZUFRfT0s7CitlcnJvcjoKKyAgIG1wX2NsZWFyX211bHRpKGtleS0+cHVia2V5LngsIGtleS0+cHVia2V5LnksIGtleS0+cHVia2V5LnosIGtleS0+aywgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2ltcG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjI6MTc6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkuYyBiL3NyYy9way9lY2MvZWNjX2RlY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1NjIwOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9lY2MvZWNjX2RlY3J5cHRfa2V5LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19kZWNyeXB0X2tleS5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKioKKyAgRGVjcnlwdCBhbiBFQ0MgZW5jcnlwdGVkIGtleQorICBAcGFyYW0gaW4gICAgICAgVGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKG9jdGV0cykKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIFRoZSBwbGFpbnRleHQKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHBsYWludGV4dAorICBAcGFyYW0ga2V5ICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgcHJpdmF0ZSBFQ0Mga2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlY2NfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpCit7CisgICB1bnNpZ25lZCBjaGFyICplY2Nfc2hhcmVkLCAqc2tleSwgKnB1Yl9leHB0OworICAgdW5zaWduZWQgbG9uZyAgeCwgeSwgaGFzaE9JRFszMl07CisgICBpbnQgICAgICAgICAgICBoYXNoLCBlcnI7CisgICBlY2Nfa2V5ICAgICAgICBwdWJrZXk7CisgICBsdGNfYXNuMV9saXN0ICBkZWNvZGVbM107CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworCisgICAvKiByaWdodCBrZXkgdHlwZT8gKi8KKyAgIGlmIChrZXktPnR5cGUgIT0gUEtfUFJJVkFURSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX05PVF9QUklWQVRFOworICAgfQorICAgCisgICAvKiBkZWNvZGUgdG8gZmluZCBvdXQgaGFzaCAqLworICAgTFRDX1NFVF9BU04xKGRlY29kZSwgMCwgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVIsIGhhc2hPSUQsIHNpemVvZihoYXNoT0lEKS9zaXplb2YoaGFzaE9JRFswXSkpOworIAorICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKGluLCBpbmxlbiwgZGVjb2RlLCAxKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGhhc2ggPSBmaW5kX2hhc2hfb2lkKGhhc2hPSUQsIGRlY29kZVswXS5zaXplKTsgICAgICAgICAgICAgICAgICAgCisgICBpZiAoaGFzaF9pc192YWxpZChoYXNoKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiB3ZSBub3cgaGF2ZSB0aGUgaGFzaCEgKi8KKworICAgLyogYWxsb2NhdGUgbWVtb3J5ICovCisgICBwdWJfZXhwdCAgID0gWE1BTExPQyhFQ0NfQlVGX1NJWkUpOworICAgZWNjX3NoYXJlZCA9IFhNQUxMT0MoRUNDX0JVRl9TSVpFKTsKKyAgIHNrZXkgICAgICAgPSBYTUFMTE9DKE1BWEJMT0NLU0laRSk7CisgICBpZiAocHViX2V4cHQgPT0gTlVMTCB8fCBlY2Nfc2hhcmVkID09IE5VTEwgfHwgc2tleSA9PSBOVUxMKSB7CisgICAgICBpZiAocHViX2V4cHQgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUocHViX2V4cHQpOworICAgICAgfQorICAgICAgaWYgKGVjY19zaGFyZWQgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoZWNjX3NoYXJlZCk7CisgICAgICB9CisgICAgICBpZiAoc2tleSAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShza2V5KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICBMVENfU0VUX0FTTjEoZGVjb2RlLCAxLCBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAgcHViX2V4cHQsICBFQ0NfQlVGX1NJWkUpOworICAgTFRDX1NFVF9BU04xKGRlY29kZSwgMiwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgIHNrZXksICAgICAgTUFYQkxPQ0tTSVpFKTsKKworICAgLyogcmVhZCB0aGUgc3RydWN0dXJlIGluIG5vdyAqLworICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKGluLCBpbmxlbiwgZGVjb2RlLCAzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogaW1wb3J0IEVDQyBrZXkgZnJvbSBwYWNrZXQgKi8KKyAgIGlmICgoZXJyID0gZWNjX2ltcG9ydChkZWNvZGVbMV0uZGF0YSwgZGVjb2RlWzFdLnNpemUsICZwdWJrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBtYWtlIHNoYXJlZCBrZXkgKi8KKyAgIHggPSBFQ0NfQlVGX1NJWkU7CisgICBpZiAoKGVyciA9IGVjY19zaGFyZWRfc2VjcmV0KGtleSwgJnB1YmtleSwgZWNjX3NoYXJlZCwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgZWNjX2ZyZWUoJnB1YmtleSk7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisgICBlY2NfZnJlZSgmcHVia2V5KTsKKworICAgeSA9IE1JTihFQ0NfQlVGX1NJWkUsIE1BWEJMT0NLU0laRSk7CisgICBpZiAoKGVyciA9IGhhc2hfbWVtb3J5KGhhc2gsIGVjY19zaGFyZWQsIHgsIGVjY19zaGFyZWQsICZ5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogZW5zdXJlIHRoZSBoYXNoIG9mIHRoZSBzaGFyZWQgc2VjcmV0IGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgZW5jcnlwdCBpdHNlbGYgKi8KKyAgIGlmIChkZWNvZGVbMl0uc2l6ZSA+IHkpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgKi8KKyAgIGlmICgqb3V0bGVuIDwgZGVjb2RlWzJdLnNpemUpIHsKKyAgICAgICpvdXRsZW4gPSBkZWNvZGVbMl0uc2l6ZTsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogRGVjcnlwdCB0aGUga2V5ICovCisgICBmb3IgKHggPSAwOyB4IDwgZGVjb2RlWzJdLnNpemU7IHgrKykgeworICAgICBvdXRbeF0gPSBza2V5W3hdIF4gZWNjX3NoYXJlZFt4XTsKKyAgIH0KKyAgICpvdXRsZW4gPSB4OworCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHB1Yl9leHB0LCAgIEVDQ19CVUZfU0laRSk7CisgICB6ZXJvbWVtKGVjY19zaGFyZWQsIEVDQ19CVUZfU0laRSk7CisgICB6ZXJvbWVtKHNrZXksICAgICAgIE1BWEJMT0NLU0laRSk7CisjZW5kaWYKKworICAgWEZSRUUocHViX2V4cHQpOworICAgWEZSRUUoZWNjX3NoYXJlZCk7CisgICBYRlJFRShza2V5KTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2RlY3J5cHRfa2V5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5LmMgYi9zcmMvcGsvZWNjL2VjY19lbmNyeXB0X2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOWJhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2VjY19lbmNyeXB0X2tleS5jCkBAIC0wLDAgKzEsMTM2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2NfZW5jcnlwdF9rZXkuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIEVuY3J5cHQgYSBzeW1tZXRyaWMga2V5IHdpdGggRUNDIAorICBAcGFyYW0gaW4gICAgICAgICBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2FudCB0byBlbmNyeXB0CisgIEBwYXJhbSBpbmxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGtleSB0byBlbmNyeXB0IChvY3RldHMpCisgIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIG91dGxlbiAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgY2lwaGVydGV4dAorICBAcGFyYW0gcHJuZyAgICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQorICBAcGFyYW0gd3BybmcgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgeW91IHdpc2ggdG8gdXNlIAorICBAcGFyYW0gaGFzaCAgICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdhbnQgdG8gdXNlIAorICBAcGFyYW0ga2V5ICAgICAgICBUaGUgRUNDIGtleSB5b3Ugd2FudCB0byBlbmNyeXB0IHRvCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlY2NfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpwdWJfZXhwdCwgKmVjY19zaGFyZWQsICpza2V5OworICAgIGVjY19rZXkgICAgICAgIHB1YmtleTsKKyAgICB1bnNpZ25lZCBsb25nICB4LCB5LCBwdWJrZXlzaXplOworICAgIGludCAgICAgICAgICAgIGVycjsKKworICAgIExUQ19BUkdDSEsoaW4gICAgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAgICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoa2V5ICAgICAhPSBOVUxMKTsKKworICAgIC8qIGNoZWNrIHRoYXQgd3BybmcvY2lwaGVyL2hhc2ggYXJlIG5vdCBpbnZhbGlkICovCisgICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmIChpbmxlbiA+IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0hBU0g7CisgICAgfQorCisgICAgLyogbWFrZSBhIHJhbmRvbSBrZXkgYW5kIGV4cG9ydCB0aGUgcHVibGljIGNvcHkgKi8KKyAgICBpZiAoKGVyciA9IGVjY19tYWtlX2tleV9leChwcm5nLCB3cHJuZywgJnB1YmtleSwga2V5LT5kcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBwdWJfZXhwdCAgID0gWE1BTExPQyhFQ0NfQlVGX1NJWkUpOworICAgIGVjY19zaGFyZWQgPSBYTUFMTE9DKEVDQ19CVUZfU0laRSk7CisgICAgc2tleSAgICAgICA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFKTsKKyAgICBpZiAocHViX2V4cHQgPT0gTlVMTCB8fCBlY2Nfc2hhcmVkID09IE5VTEwgfHwgc2tleSA9PSBOVUxMKSB7CisgICAgICAgaWYgKHB1Yl9leHB0ICE9IE5VTEwpIHsKKyAgICAgICAgICBYRlJFRShwdWJfZXhwdCk7CisgICAgICAgfQorICAgICAgIGlmIChlY2Nfc2hhcmVkICE9IE5VTEwpIHsKKyAgICAgICAgICBYRlJFRShlY2Nfc2hhcmVkKTsKKyAgICAgICB9CisgICAgICAgaWYgKHNrZXkgIT0gTlVMTCkgeworICAgICAgICAgIFhGUkVFKHNrZXkpOworICAgICAgIH0KKyAgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgIH0KKworICAgIHB1YmtleXNpemUgPSBFQ0NfQlVGX1NJWkU7CisgICAgaWYgKChlcnIgPSBlY2NfZXhwb3J0KHB1Yl9leHB0LCAmcHVia2V5c2l6ZSwgUEtfUFVCTElDLCAmcHVia2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIAorICAgIC8qIG1ha2UgcmFuZG9tIGtleSAqLworICAgIHggICAgICAgID0gRUNDX0JVRl9TSVpFOworICAgIGlmICgoZXJyID0gZWNjX3NoYXJlZF9zZWNyZXQoJnB1YmtleSwga2V5LCBlY2Nfc2hhcmVkLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgZWNjX2ZyZWUoJnB1YmtleSk7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICB5ID0gTUFYQkxPQ0tTSVpFOworICAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaCwgZWNjX3NoYXJlZCwgeCwgc2tleSwgJnkpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgCisgICAgLyogRW5jcnlwdCBrZXkgKi8KKyAgICBmb3IgKHggPSAwOyB4IDwgaW5sZW47IHgrKykgeworICAgICAgc2tleVt4XSBePSBpblt4XTsKKyAgICB9CisKKyAgICBlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKG91dCwgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVIsICBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uT0lEbGVuLCAgIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5PSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAgIHB1YmtleXNpemUsICAgICAgICAgICAgICAgICAgICAgcHViX2V4cHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAgIGlubGVuLCAgICAgICAgICAgICAgICAgICAgICAgICAgc2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgICAgICAgICAgICAgMFVMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworTEJMX0VSUjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICAvKiBjbGVhbiB1cCAqLworICAgIHplcm9tZW0ocHViX2V4cHQsICAgRUNDX0JVRl9TSVpFKTsKKyAgICB6ZXJvbWVtKGVjY19zaGFyZWQsIEVDQ19CVUZfU0laRSk7CisgICAgemVyb21lbShza2V5LCAgICAgICBNQVhCTE9DS1NJWkUpOworI2VuZGlmCisKKyAgICBYRlJFRShza2V5KTsKKyAgICBYRlJFRShlY2Nfc2hhcmVkKTsKKyAgICBYRlJFRShwdWJfZXhwdCk7CisKKyAgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxMDoxOCAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX2V4cG9ydC5jIGIvc3JjL3BrL2VjYy9lY2NfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxOTg0OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9lY2MvZWNjX2V4cG9ydC5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19leHBvcnQuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIEV4cG9ydCBhbiBFQ0Mga2V5IGFzIGEgYmluYXJ5IHBhY2tldAorICBAcGFyYW0gb3V0ICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGhlIGtleQorICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGV4cG9ydGVkIGtleQorICBAcGFyYW0gdHlwZSAgICBUaGUgdHlwZSBvZiBrZXkgeW91IHdhbnQgdG8gZXhwb3J0IChQS19QUklWQVRFIG9yIFBLX1BVQkxJQykKKyAgQHBhcmFtIGtleSAgICAgVGhlIGtleSB0byBleHBvcnQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjY19leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCBlY2Nfa2V5ICprZXkpCit7CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMV07CisgICB1bnNpZ25lZCBsb25nIGtleV9zaXplOworCisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisgICAKKyAgIC8qIHR5cGUgdmFsaWQ/ICovCisgICBpZiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUgJiYgdHlwZSA9PSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKKyAgIH0KKworICAgaWYgKGx0Y19lY2NfaXNfdmFsaWRfaWR4KGtleS0+aWR4KSA9PSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIHdlIHN0b3JlIHRoZSBOSVNUIGJ5dGUgc2l6ZSAqLworICAga2V5X3NpemUgPSBrZXktPmRwLT5zaXplOworCisgICBpZiAodHlwZSA9PSBQS19QUklWQVRFKSB7CisgICAgICAgZmxhZ3NbMF0gPSAxOworICAgICAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgICAgIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAgIDFVTCwgJmtleV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwga2V5LT5wdWJrZXkueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCBrZXktPmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgIDBVTCwgTlVMTCk7CisgICB9IGVsc2UgeworICAgICAgIGZsYWdzWzBdID0gMDsKKyAgICAgICBlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKG91dCwgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAgICAxVUwsIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwgICAxVUwsICZrZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCBrZXktPnB1YmtleS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgIDBVTCwgTlVMTCk7CisgICB9CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZXhwb3J0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxMDoxOCAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX2ZyZWUuYyBiL3NyYy9way9lY2MvZWNjX2ZyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzkxNzhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9lY2NfZnJlZS5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19mcmVlLmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICBGcmVlIGFuIEVDQyBrZXkgZnJvbSBtZW1vcnkKKyAgQHBhcmFtIGtleSAgIFRoZSBrZXkgeW91IHdpc2ggdG8gZnJlZQorKi8KK3ZvaWQgZWNjX2ZyZWUoZWNjX2tleSAqa2V5KQoreworICAgTFRDX0FSR0NIS1ZEKGtleSAhPSBOVUxMKTsKKyAgIG1wX2NsZWFyX211bHRpKGtleS0+cHVia2V5LngsIGtleS0+cHVia2V5LnksIGtleS0+cHVia2V5LnosIGtleS0+aywgTlVMTCk7Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZnJlZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMDkgMDE6Mzg6MTQgJCAqLworCmRpZmYgLS1naXQgYS9zcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5jIGIvc3JjL3BrL2VjYy9lY2NfZ2V0X3NpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWFmZGViCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9lY2NfZ2V0X3NpemUuYwpAQCAtMCwwICsxLDQ0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2NfZ2V0X3NpemUuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIEdldCB0aGUgc2l6ZSBvZiBhbiBFQ0Mga2V5CisgIEBwYXJhbSBrZXkgICAgVGhlIGtleSB0byBnZXQgdGhlIHNpemUgb2YgCisgIEByZXR1cm4gVGhlIHNpemUgKG9jdGV0cykgb2YgdGhlIGtleSBvciBJTlRfTUFYIG9uIGVycm9yCisqLworaW50IGVjY19nZXRfc2l6ZShlY2Nfa2V5ICprZXkpCit7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIGlmIChsdGNfZWNjX2lzX3ZhbGlkX2lkeChrZXktPmlkeCkpCisgICAgICByZXR1cm4ga2V5LT5kcC0+c2l6ZTsKKyAgIGVsc2UKKyAgICAgIHJldHVybiBJTlRfTUFYOyAvKiBsYXJnZSB2YWx1ZSBrbm93biB0byBjYXVzZSBpdCB0byBmYWlsIHdoZW4gcGFzc2VkIHRvIGVjY19tYWtlX2tleSgpICovCit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZ2V0X3NpemUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjEwOjE4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9lY2NfaW1wb3J0LmMgYi9zcmMvcGsvZWNjL2VjY19pbXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWRiMjhlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9lY2NfaW1wb3J0LmMKQEAgLTAsMCArMSwxNzIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19pbXBvcnQuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworc3RhdGljIGludCBpc19wb2ludChlY2Nfa2V5ICprZXkpCit7CisgICB2b2lkICpwcmltZSwgKmIsICp0MSwgKnQyOworICAgaW50IGVycjsKKyAgIAorICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZwcmltZSwgJmIsICZ0MSwgJnQyLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIC8qIGxvYWQgcHJpbWUgYW5kIGIgKi8KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChwcmltZSwga2V5LT5kcC0+cHJpbWUsIDE2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChiLCBrZXktPmRwLT5CLCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIAorICAgLyogY29tcHV0ZSB5XjIgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKGtleS0+cHVia2V5LnksIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIAorICAgLyogY29tcHV0ZSB4XjMgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKGtleS0+cHVia2V5LngsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9kKHQyLCBwcmltZSwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsKGtleS0+cHVia2V5LngsIHQyLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIAorICAgLyogY29tcHV0ZSB5XjIgLSB4XjMgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKHQxLCB0MiwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIAorICAgLyogY29tcHV0ZSB5XjIgLSB4XjMgKyAzeCAqLworICAgaWYgKChlcnIgPSBtcF9hZGQodDEsIGtleS0+cHVia2V5LngsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9hZGQodDEsIGtleS0+cHVia2V5LngsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9hZGQodDEsIGtleS0+cHVia2V5LngsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tb2QodDEsIHByaW1lLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgd2hpbGUgKG1wX2NtcF9kKHQxLCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHQxLCBwcmltZSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0KKyAgIHdoaWxlIChtcF9jbXAodDEsIHByaW1lKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3ViKHQxLCBwcmltZSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0KKyAgIAorICAgLyogY29tcGFyZSB0byBiICovCisgICBpZiAobXBfY21wKHQxLCBiKSAhPSBMVENfTVBfRVEpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfSBlbHNlIHsKKyAgICAgIGVyciA9IENSWVBUX09LOworICAgfQorICAgCitlcnJvcjoKKyAgIG1wX2NsZWFyX211bHRpKHByaW1lLCBiLCB0MSwgdDIsIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgIEltcG9ydCBhbiBFQ0Mga2V5IGZyb20gYSBiaW5hcnkgcGFja2V0CisgIEBwYXJhbSBpbiAgICAgIFRoZSBwYWNrZXQgdG8gaW1wb3J0CisgIEBwYXJhbSBpbmxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHBhY2tldAorICBAcGFyYW0ga2V5ICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGltcG9ydAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmcmVlZAorKi8KK2ludCBlY2NfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpCit7CisgICByZXR1cm4gZWNjX2ltcG9ydF9leChpbiwgaW5sZW4sIGtleSwgTlVMTCk7Cit9CisKKy8qKgorICBJbXBvcnQgYW4gRUNDIGtleSBmcm9tIGEgYmluYXJ5IHBhY2tldCwgdXNpbmcgdXNlciBzdXBwbGllZCBkb21haW4gcGFyYW1zIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgTklTVCBvbmVzCisgIEBwYXJhbSBpbiAgICAgIFRoZSBwYWNrZXQgdG8gaW1wb3J0CisgIEBwYXJhbSBpbmxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHBhY2tldAorICBAcGFyYW0ga2V5ICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGltcG9ydAorICBAcGFyYW0gZHAgICAgICBwb2ludGVyIHRvIHVzZXIgc3VwcGxpZWQgcGFyYW1zOyBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBwYXJhbXMgdXNlZCB3aGVuIGV4cG9ydGluZworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsIGFsbG9jYXRlZCBtZW1vcnkgd2lsbCBiZSBmcmVlZAorKi8KK2ludCBlY2NfaW1wb3J0X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXksIGNvbnN0IGx0Y19lY2Nfc2V0X3R5cGUgKmRwKQoreworICAgdW5zaWduZWQgbG9uZyBrZXlfc2l6ZTsKKyAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMV07CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CisKKyAgIC8qIGluaXQga2V5ICovCisgICBpZiAobXBfaW5pdF9tdWx0aSgma2V5LT5wdWJrZXkueCwgJmtleS0+cHVia2V5LnksICZrZXktPnB1YmtleS56LCAma2V5LT5rLCBOVUxMKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogZmluZCBvdXQgd2hhdCB0eXBlIG9mIGtleSBpdCBpcyAqLworICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGluLCBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgMVVMLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZG9uZTsKKyAgIH0KKworCisgICBpZiAoZmxhZ3NbMF0gPT0gMSkgeworICAgICAgLyogcHJpdmF0ZSBrZXkgKi8KKyAgICAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CisgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgICAgMVVMLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAgIDFVTCwgJmtleV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCBrZXktPnB1YmtleS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCBrZXktPnB1YmtleS55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCBrZXktPmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBkb25lOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIC8qIHB1YmxpYyBrZXkgKi8KKyAgICAgIGtleS0+dHlwZSA9IFBLX1BVQkxJQzsKKyAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAgICAxVUwsIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICAgMVVMLCAma2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBkb25lOworICAgICAgfQorICAgfQorCisgICBpZiAoZHAgPT0gTlVMTCkgeworICAgICAvKiBmaW5kIHRoZSBpZHggKi8KKyAgICAgZm9yIChrZXktPmlkeCA9IDA7IGx0Y19lY2Nfc2V0c1trZXktPmlkeF0uc2l6ZSAmJiAodW5zaWduZWQgbG9uZylsdGNfZWNjX3NldHNba2V5LT5pZHhdLnNpemUgIT0ga2V5X3NpemU7ICsra2V5LT5pZHgpOworICAgICBpZiAobHRjX2VjY19zZXRzW2tleS0+aWR4XS5zaXplID09IDApIHsKKyAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICBnb3RvIGRvbmU7CisgICAgIH0KKyAgICAga2V5LT5kcCA9ICZsdGNfZWNjX3NldHNba2V5LT5pZHhdOworICAgfSBlbHNlIHsKKyAgICAga2V5LT5pZHggPSAtMTsKKyAgICAga2V5LT5kcCA9IGRwOworICAgfQorICAgLyogc2V0IHogKi8KKyAgIGlmICgoZXJyID0gbXBfc2V0KGtleS0+cHVia2V5LnosIDEpKSAhPSBDUllQVF9PSykgeyBnb3RvIGRvbmU7IH0KKyAgIAorICAgLyogaXMgaXQgYSBwb2ludCBvbiB0aGUgY3VydmU/ICAqLworICAgaWYgKChlcnIgPSBpc19wb2ludChrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBkb25lOworICAgfQorCisgICAvKiB3ZSdyZSBnb29kICovCisgICByZXR1cm4gQ1JZUFRfT0s7Citkb25lOgorICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5wdWJrZXkueCwga2V5LT5wdWJrZXkueSwga2V5LT5wdWJrZXkueiwga2V5LT5rLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2ltcG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjE5OjQ4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkuYyBiL3NyYy9way9lY2MvZWNjX21ha2Vfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2YjY3NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9lY2MvZWNjX21ha2Vfa2V5LmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19tYWtlX2tleS5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKioKKyAgTWFrZSBhIG5ldyBFQ0Mga2V5IAorICBAcGFyYW0gcHJuZyAgICAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCisgIEBwYXJhbSB3cHJuZyAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIHlvdSB3aXNoIHRvIHVzZQorICBAcGFyYW0ga2V5c2l6ZSAgICAgIFRoZSBrZXlzaXplIGZvciB0aGUgbmV3IGtleSAoaW4gb2N0ZXRzIGZyb20gMjAgdG8gNjUgYnl0ZXMpCisgIEBwYXJhbSBrZXkgICAgICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgdGhlIG5ld2x5IGNyZWF0ZWQga2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGwgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlIGZyZWVkCisqLworaW50IGVjY19tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBrZXlzaXplLCBlY2Nfa2V5ICprZXkpCit7CisgICBpbnQgeCwgZXJyOworCisgICAvKiBmaW5kIGtleSBzaXplICovCisgICBmb3IgKHggPSAwOyAoa2V5c2l6ZSA+IGx0Y19lY2Nfc2V0c1t4XS5zaXplKSAmJiAobHRjX2VjY19zZXRzW3hdLnNpemUgIT0gMCk7IHgrKyk7CisgICBrZXlzaXplID0gbHRjX2VjY19zZXRzW3hdLnNpemU7CisKKyAgIGlmIChrZXlzaXplID4gRUNDX01BWFNJWkUgfHwgbHRjX2VjY19zZXRzW3hdLnNpemUgPT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKyAgIGVyciA9IGVjY19tYWtlX2tleV9leChwcm5nLCB3cHJuZywga2V5LCAmbHRjX2VjY19zZXRzW3hdKTsKKyAgIGtleS0+aWR4ID0geDsKKyAgIHJldHVybiBlcnI7Cit9CisKK2ludCBlY2NfbWFrZV9rZXlfZXgocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBlY2Nfa2V5ICprZXksIGNvbnN0IGx0Y19lY2Nfc2V0X3R5cGUgKmRwKQoreworICAgaW50ICAgICAgICAgICAgZXJyOworICAgZWNjX3BvaW50ICAgICAqYmFzZTsKKyAgIHZvaWQgICAgICAgICAgKnByaW1lOworICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgaW50ICAgICAgICAgICAga2V5c2l6ZTsKKworICAgTFRDX0FSR0NISyhrZXkgICAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGRwICAgICAgICAgICE9IE5VTEwpOworCisgICAvKiBnb29kIHBybmc/ICovCisgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAga2V5LT5pZHggPSAtMTsKKyAgIGtleS0+ZHAgID0gZHA7CisgICBrZXlzaXplICA9IGRwLT5zaXplOworCisgICAvKiBhbGxvY2F0ZSByYW0gKi8KKyAgIGJhc2UgPSBOVUxMOworICAgYnVmICA9IFhNQUxMT0MoRUNDX01BWFNJWkUpOworICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBtYWtlIHVwIHJhbmRvbSBzdHJpbmcgKi8KKyAgIGlmIChwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWQoYnVmLCAodW5zaWduZWQgbG9uZylrZXlzaXplLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylrZXlzaXplKSB7CisgICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsKKyAgICAgIGdvdG8gRVJSX0JVRjsKKyAgIH0KKworICAgLyogc2V0dXAgdGhlIGtleSB2YXJpYWJsZXMgKi8KKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgma2V5LT5wdWJrZXkueCwgJmtleS0+cHVia2V5LnksICZrZXktPnB1YmtleS56LCAma2V5LT5rLCAmcHJpbWUsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBFUlJfQlVGOworICAgfQorICAgYmFzZSA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAoYmFzZSA9PSBOVUxMKSB7CisgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICBnb3RvIGVycmtleTsKKyAgIH0KKworICAgLyogcmVhZCBpbiB0aGUgc3BlY3MgZm9yIHRoaXMga2V5ICovCisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgocHJpbWUsICAgKGNoYXIgKilrZXktPmRwLT5wcmltZSwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoYmFzZS0+eCwgKGNoYXIgKilrZXktPmRwLT5HeCwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoYmFzZS0+eSwgKGNoYXIgKilrZXktPmRwLT5HeSwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CisgICBpZiAoKGVyciA9IG1wX3NldChiYXNlLT56LCAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGtleS0+aywgKHVuc2lnbmVkIGNoYXIgKilidWYsIGtleXNpemUpKSAhPSBDUllQVF9PSykgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CisKKyAgIC8qIG1ha2UgdGhlIHB1YmxpYyBrZXkgKi8KKyAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdG11bChrZXktPmssIGJhc2UsICZrZXktPnB1YmtleSwgcHJpbWUsIDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0KKyAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CisKKyAgIC8qIGZyZWUgdXAgcmFtICovCisgICBlcnIgPSBDUllQVF9PSzsKKyAgIGdvdG8gY2xlYW51cDsKK2VycmtleToKKyAgIG1wX2NsZWFyX211bHRpKGtleS0+cHVia2V5LngsIGtleS0+cHVia2V5LnksIGtleS0+cHVia2V5LnosIGtleS0+aywgTlVMTCk7CitjbGVhbnVwOgorICAgbHRjX2VjY19kZWxfcG9pbnQoYmFzZSk7CisgICBtcF9jbGVhcihwcmltZSk7CitFUlJfQlVGOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShidWYsIEVDQ19NQVhTSVpFKTsKKyNlbmRpZgorICAgWEZSRUUoYnVmKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjUwOjExICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9lY2Nfc2hhcmVkX3NlY3JldC5jIGIvc3JjL3BrL2VjYy9lY2Nfc2hhcmVkX3NlY3JldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWY4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0LmMKQEAgLTAsMCArMSw5NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX3NoYXJlZF9zZWNyZXQuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIENyZWF0ZSBhbiBFQ0Mgc2hhcmVkIHNlY3JldCBiZXR3ZWVuIHR3byBrZXlzCisgIEBwYXJhbSBwcml2YXRlX2tleSAgICAgIFRoZSBwcml2YXRlIEVDQyBrZXkKKyAgQHBhcmFtIHB1YmxpY19rZXkgICAgICAgVGhlIHB1YmxpYyBrZXkKKyAgQHBhcmFtIG91dCAgICAgICAgICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgdGhlIHNoYXJlZCBzZWNyZXQgKENvbmZvcm1zIHRvIEVDLURIIGZyb20gQU5TSSBYOS42MykKKyAgQHBhcmFtIG91dGxlbiAgICAgICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgc2hhcmVkIHNlY3JldAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZWNjX3NoYXJlZF9zZWNyZXQoZWNjX2tleSAqcHJpdmF0ZV9rZXksIGVjY19rZXkgKnB1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICB1bnNpZ25lZCBsb25nICB4OworICAgZWNjX3BvaW50ICAgICAqcmVzdWx0OworICAgdm9pZCAgICAgICAgICAqcHJpbWU7CisgICBpbnQgICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsocHJpdmF0ZV9rZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB1YmxpY19rZXkgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICAgICAgIT0gTlVMTCk7CisKKyAgIC8qIHR5cGUgdmFsaWQ/ICovCisgICBpZiAocHJpdmF0ZV9rZXktPnR5cGUgIT0gUEtfUFJJVkFURSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX05PVF9QUklWQVRFOworICAgfQorCisgICBpZiAobHRjX2VjY19pc192YWxpZF9pZHgocHJpdmF0ZV9rZXktPmlkeCkgPT0gMCB8fCBsdGNfZWNjX2lzX3ZhbGlkX2lkeChwdWJsaWNfa2V5LT5pZHgpID09IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgaWYgKFhTVFJDTVAocHJpdmF0ZV9rZXktPmRwLT5uYW1lLCBwdWJsaWNfa2V5LT5kcC0+bmFtZSkgIT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX1RZUEVfTUlTTUFUQ0g7CisgICB9CisKKyAgIC8qIG1ha2UgbmV3IHBvaW50ICovCisgICByZXN1bHQgPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX2luaXQoJnByaW1lKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGx0Y19lY2NfZGVsX3BvaW50KHJlc3VsdCk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgocHJpbWUsIChjaGFyICopcHJpdmF0ZV9rZXktPmRwLT5wcmltZSwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdG11bChwcml2YXRlX2tleS0+aywgJnB1YmxpY19rZXktPnB1YmtleSwgcmVzdWx0LCBwcmltZSwgMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICB4ID0gKHVuc2lnbmVkIGxvbmcpbXBfdW5zaWduZWRfYmluX3NpemUocHJpbWUpOworICAgaWYgKCpvdXRsZW4gPCB4KSB7CisgICAgICAqb3V0bGVuID0geDsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gZG9uZTsKKyAgIH0KKyAgIHplcm9tZW0ob3V0LCB4KTsKKyAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKHJlc3VsdC0+eCwgb3V0ICsgKHggLSBtcF91bnNpZ25lZF9iaW5fc2l6ZShyZXN1bHQtPngpKSkpICAgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICBlcnIgICAgID0gQ1JZUFRfT0s7CisgICAqb3V0bGVuID0geDsKK2RvbmU6CisgICBtcF9jbGVhcihwcmltZSk7CisgICBsdGNfZWNjX2RlbF9wb2ludChyZXN1bHQpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMjoxOTo0OCAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5jIGIvc3JjL3BrL2VjYy9lY2Nfc2lnbl9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmOTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5jCkBAIC0wLDAgKzEsMTE0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2Nfc2lnbl9oYXNoLmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICBTaWduIGEgbWVzc2FnZSBkaWdlc3QKKyAgQHBhcmFtIGluICAgICAgICBUaGUgbWVzc2FnZSBkaWdlc3QgdG8gc2lnbgorICBAcGFyYW0gaW5sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdAorICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHNpZ25hdHVyZQorICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHNpZ25hdHVyZQorICBAcGFyYW0gcHJuZyAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCisgIEBwYXJhbSB3cHJuZyAgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIHlvdSB3aXNoIHRvIHVzZQorICBAcGFyYW0ga2V5ICAgICAgIEEgcHJpdmF0ZSBFQ0Mga2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlY2Nfc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGVjY19rZXkgKmtleSkKK3sKKyAgIGVjY19rZXkgICAgICAgcHVia2V5OworICAgdm9pZCAgICAgICAgICAqciwgKnMsICplLCAqcDsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKworICAgLyogaXMgdGhpcyBhIHByaXZhdGUga2V5PyAqLworICAgaWYgKGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7CisgICB9CisgICAKKyAgIC8qIGlzIHRoZSBJRFggdmFsaWQgPyAgKi8KKyAgIGlmIChsdGNfZWNjX2lzX3ZhbGlkX2lkeChrZXktPmlkeCkgIT0gMSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfVFlQRTsKKyAgIH0KKyAgIAorICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGdldCB0aGUgaGFzaCBhbmQgbG9hZCBpdCBhcyBhIGJpZ251bSBpbnRvICdlJyAqLworICAgLyogaW5pdCB0aGUgYmlnbnVtcyAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZyLCAmcywgJnAsICZlLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsgCisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KHAsIChjaGFyICopa2V5LT5kcC0+b3JkZXIsIDE2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJub2tleTsgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbihlLCAodW5zaWduZWQgY2hhciAqKWluLCAoaW50KWlubGVuKSkgIT0gQ1JZUFRfT0spICAgICAgICAgIHsgZ290byBlcnJub2tleTsgfQorCisgICAvKiBtYWtlIHVwIGEga2V5IGFuZCBleHBvcnQgdGhlIHB1YmxpYyBjb3B5ICovCisgICBmb3IgKDs7KSB7CisgICAgICBpZiAoKGVyciA9IGVjY19tYWtlX2tleV9leChwcm5nLCB3cHJuZywgJnB1YmtleSwga2V5LT5kcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIGVycm5va2V5OworICAgICAgfQorCisgICAgICAvKiBmaW5kIHIgPSB4MSBtb2QgbiAqLworICAgICAgaWYgKChlcnIgPSBtcF9tb2QocHVia2V5LnB1YmtleS54LCBwLCByKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgICAgaWYgKG1wX2lzemVybyhyKSA9PSBMVENfTVBfWUVTKSB7CisgICAgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICAgIH0gZWxzZSB7IAorICAgICAgICAvKiBmaW5kIHMgPSAoZSArIHhyKS9rICovCisgICAgICAgIGlmICgoZXJyID0gbXBfaW52bW9kKHB1YmtleS5rLCBwLCBwdWJrZXkuaykpICE9IENSWVBUX09LKSAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiBrID0gMS9rICovCisgICAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKGtleS0+aywgciwgcCwgcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiBzID0geHIgKi8KKyAgICAgICAgaWYgKChlcnIgPSBtcF9hZGQoZSwgcywgcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IC8qIHMgPSBlICsgIHhyICovCisgICAgICAgIGlmICgoZXJyID0gbXBfbW9kKHMsIHAsIHMpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiBzID0gZSArICB4ciAqLworICAgICAgICBpZiAoKGVyciA9IG1wX211bG1vZChzLCBwdWJrZXkuaywgcCwgcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogcyA9IChlICsgeHIpL2sgKi8KKyAgICAgICAgZWNjX2ZyZWUoJnB1YmtleSk7CisgICAgICAgIGlmIChtcF9pc3plcm8ocykgPT0gTFRDX01QX05PKSB7CisgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICB9CisKKyAgIC8qIHN0b3JlIGFzIFNFUVVFTkNFIHsgciwgcyAtLSBpbnRlZ2VyIH0gKi8KKyAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsIDBVTCwgTlVMTCk7CisgICBnb3RvIGVycm5va2V5OworZXJyb3I6CisgICBlY2NfZnJlZSgmcHVia2V5KTsKK2Vycm5va2V5OgorICAgbXBfY2xlYXJfbXVsdGkociwgcywgcCwgZSwgTlVMTCk7CisgICByZXR1cm4gZXJyOyAgIAorfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6NTA6MTEgJCAqLworCmRpZmYgLS1naXQgYS9zcmMvcGsvZWNjL2VjY19zaXplcy5jIGIvc3JjL3BrL2VjYy9lY2Nfc2l6ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGIyZDgyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9lY2Nfc2l6ZXMuYwpAQCAtMCwwICsxLDQ4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2Nfc2l6ZXMuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKwordm9pZCBlY2Nfc2l6ZXMoaW50ICpsb3csIGludCAqaGlnaCkKK3sKKyBpbnQgaTsKKyBMVENfQVJHQ0hLVkQobG93ICAhPSBOVUxMKTsKKyBMVENfQVJHQ0hLVkQoaGlnaCAhPSBOVUxMKTsKKworICpsb3cgPSBJTlRfTUFYOworICpoaWdoID0gMDsKKyBmb3IgKGkgPSAwOyBsdGNfZWNjX3NldHNbaV0uc2l6ZSAhPSAwOyBpKyspIHsKKyAgICAgaWYgKGx0Y19lY2Nfc2V0c1tpXS5zaXplIDwgKmxvdykgIHsKKyAgICAgICAgKmxvdyAgPSBsdGNfZWNjX3NldHNbaV0uc2l6ZTsKKyAgICAgfQorICAgICBpZiAobHRjX2VjY19zZXRzW2ldLnNpemUgPiAqaGlnaCkgeworICAgICAgICAqaGlnaCA9IGx0Y19lY2Nfc2V0c1tpXS5zaXplOworICAgICB9CisgfQorfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3NpemVzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8wOSAwMTozODoxNCAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX3N5cy5jIGIvc3JjL3BrL2VjYy9lY2Nfc3lzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZWFkMzEuLjAwMDAwMDAKLS0tIGEvc3JjL3BrL2VjYy9lY2Nfc3lzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjIgKzAsMCBAQAotLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcwotICoKLSAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYwotICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCi0gKgotICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KLSAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCi0gKi8KLQotLyoqCi0gIEBmaWxlIGVjY19zeXMuYwotICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKLSovCi0gIAotLyoqCi0gIEVuY3J5cHQgYSBzeW1tZXRyaWMga2V5IHdpdGggRUNDIAotICBAcGFyYW0gaW4gICAgICAgICBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2FudCB0byBlbmNyeXB0Ci0gIEBwYXJhbSBpbmxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGtleSB0byBlbmNyeXB0IChvY3RldHMpCi0gIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGNpcGhlcnRleHQKLSAgQHBhcmFtIG91dGxlbiAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgY2lwaGVydGV4dAotICBAcGFyYW0gcHJuZyAgICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQotICBAcGFyYW0gd3BybmcgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgeW91IHdpc2ggdG8gdXNlIAotICBAcGFyYW0gaGFzaCAgICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdhbnQgdG8gdXNlIAotICBAcGFyYW0ga2V5ICAgICAgICBUaGUgRUNDIGtleSB5b3Ugd2FudCB0byBlbmNyeXB0IHRvCi0gIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAotKi8KLWludCBlY2NfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgaGFzaCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSkKLXsKLSAgICB1bnNpZ25lZCBjaGFyICpwdWJfZXhwdCwgKmVjY19zaGFyZWQsICpza2V5OwotICAgIGVjY19rZXkgICAgICAgIHB1YmtleTsKLSAgICB1bnNpZ25lZCBsb25nICB4LCB5LCBwdWJrZXlzaXplOwotICAgIGludCAgICAgICAgICAgIGVycjsKLQotICAgIExUQ19BUkdDSEsoaW4gICAgICAhPSBOVUxMKTsKLSAgICBMVENfQVJHQ0hLKG91dCAgICAgIT0gTlVMTCk7Ci0gICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOwotICAgIExUQ19BUkdDSEsoa2V5ICAgICAhPSBOVUxMKTsKLQotICAgIC8qIGNoZWNrIHRoYXQgd3BybmcvY2lwaGVyL2hhc2ggYXJlIG5vdCBpbnZhbGlkICovCi0gICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmIChpbmxlbiA+IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZSkgewotICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0hBU0g7Ci0gICAgfQotCi0gICAgLyogbWFrZSBhIHJhbmRvbSBrZXkgYW5kIGV4cG9ydCB0aGUgcHVibGljIGNvcHkgKi8KLSAgICBpZiAoKGVyciA9IGVjY19tYWtlX2tleShwcm5nLCB3cHJuZywgZWNjX2dldF9zaXplKGtleSksICZwdWJrZXkpKSAhPSBDUllQVF9PSykgewotICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcHViX2V4cHQgICA9IFhNQUxMT0MoRUNDX0JVRl9TSVpFKTsKLSAgICBlY2Nfc2hhcmVkID0gWE1BTExPQyhFQ0NfQlVGX1NJWkUpOwotICAgIHNrZXkgICAgICAgPSBYTUFMTE9DKE1BWEJMT0NLU0laRSk7Ci0gICAgaWYgKHB1Yl9leHB0ID09IE5VTEwgfHwgZWNjX3NoYXJlZCA9PSBOVUxMIHx8IHNrZXkgPT0gTlVMTCkgewotICAgICAgIGlmIChwdWJfZXhwdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgWEZSRUUocHViX2V4cHQpOwotICAgICAgIH0KLSAgICAgICBpZiAoZWNjX3NoYXJlZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgWEZSRUUoZWNjX3NoYXJlZCk7Ci0gICAgICAgfQotICAgICAgIGlmIChza2V5ICE9IE5VTEwpIHsKLSAgICAgICAgICBYRlJFRShza2V5KTsKLSAgICAgICB9Ci0gICAgICAgZWNjX2ZyZWUoJnB1YmtleSk7Ci0gICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgICB9Ci0KLSAgICBwdWJrZXlzaXplID0gRUNDX0JVRl9TSVpFOwotICAgIGlmICgoZXJyID0gZWNjX2V4cG9ydChwdWJfZXhwdCwgJnB1YmtleXNpemUsIFBLX1BVQkxJQywgJnB1YmtleSkpICE9IENSWVBUX09LKSB7Ci0gICAgICAgZWNjX2ZyZWUoJnB1YmtleSk7Ci0gICAgICAgZ290byBMQkxfRVJSOwotICAgIH0KLSAgICAKLSAgICAvKiBtYWtlIHJhbmRvbSBrZXkgKi8KLSAgICB4ICAgICAgICA9IEVDQ19CVUZfU0laRTsKLSAgICBpZiAoKGVyciA9IGVjY19zaGFyZWRfc2VjcmV0KCZwdWJrZXksIGtleSwgZWNjX3NoYXJlZCwgJngpKSAhPSBDUllQVF9PSykgewotICAgICAgIGVjY19mcmVlKCZwdWJrZXkpOwotICAgICAgIGdvdG8gTEJMX0VSUjsKLSAgICB9Ci0gICAgZWNjX2ZyZWUoJnB1YmtleSk7Ci0gICAgeSA9IE1BWEJMT0NLU0laRTsKLSAgICBpZiAoKGVyciA9IGhhc2hfbWVtb3J5KGhhc2gsIGVjY19zaGFyZWQsIHgsIHNrZXksICZ5KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICBnb3RvIExCTF9FUlI7Ci0gICAgfQotICAgIAotICAgIC8qIEVuY3J5cHQga2V5ICovCi0gICAgZm9yICh4ID0gMDsgeCA8IGlubGVuOyB4KyspIHsKLSAgICAgIHNrZXlbeF0gXj0gaW5beF07Ci0gICAgfQotCi0gICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSLCAgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLk9JRGxlbiwgICBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uT0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgICBwdWJrZXlzaXplLCAgICAgICAgICAgICAgICAgICAgIHB1Yl9leHB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgICBpbmxlbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgICAgIDBVTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLUxCTF9FUlI6Ci0jaWZkZWYgTFRDX0NMRUFOX1NUQUNLCi0gICAgLyogY2xlYW4gdXAgKi8KLSAgICB6ZXJvbWVtKHB1Yl9leHB0LCAgIEVDQ19CVUZfU0laRSk7Ci0gICAgemVyb21lbShlY2Nfc2hhcmVkLCBFQ0NfQlVGX1NJWkUpOwotICAgIHplcm9tZW0oc2tleSwgICAgICAgTUFYQkxPQ0tTSVpFKTsKLSNlbmRpZgotCi0gICAgWEZSRUUoc2tleSk7Ci0gICAgWEZSRUUoZWNjX3NoYXJlZCk7Ci0gICAgWEZSRUUocHViX2V4cHQpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLyoqCi0gIERlY3J5cHQgYW4gRUNDIGVuY3J5cHRlZCBrZXkKLSAgQHBhcmFtIGluICAgICAgIFRoZSBjaXBoZXJ0ZXh0Ci0gIEBwYXJhbSBpbmxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IChvY3RldHMpCi0gIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0Ci0gIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBwbGFpbnRleHQKLSAgQHBhcmFtIGtleSAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHByaXZhdGUgRUNDIGtleQotICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKLSovCi1pbnQgZWNjX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KQotewotICAgdW5zaWduZWQgY2hhciAqZWNjX3NoYXJlZCwgKnNrZXksICpwdWJfZXhwdDsKLSAgIHVuc2lnbmVkIGxvbmcgIHgsIHksIGhhc2hPSURbMzJdOwotICAgaW50ICAgICAgICAgICAgaGFzaCwgZXJyOwotICAgZWNjX2tleSAgICAgICAgcHVia2V5OwotICAgbHRjX2FzbjFfbGlzdCAgZGVjb2RlWzNdOwotCi0gICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKLQotICAgLyogcmlnaHQga2V5IHR5cGU/ICovCi0gICBpZiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUpIHsKLSAgICAgIHJldHVybiBDUllQVF9QS19OT1RfUFJJVkFURTsKLSAgIH0KLSAgIAotICAgLyogZGVjb2RlIHRvIGZpbmQgb3V0IGhhc2ggKi8KLSAgIExUQ19TRVRfQVNOMShkZWNvZGUsIDAsIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSLCBoYXNoT0lELCBzaXplb2YoaGFzaE9JRCkvc2l6ZW9mKGhhc2hPSURbMF0pKTsKLSAKLSAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZShpbiwgaW5sZW4sIGRlY29kZSwgMSkpICE9IENSWVBUX09LKSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgfQotICAgZm9yIChoYXNoID0gMDsgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLm5hbWUgICAhPSBOVUxMICAgICAgICAgICAgICYmIAotICAgICAgICAgICAgICAgICAgKGhhc2hfZGVzY3JpcHRvcltoYXNoXS5PSURsZW4gIT0gZGVjb2RlWzBdLnNpemUgICB8fCAKLSAgICAgICAgICAgICAgICAgICBtZW1jbXAoaGFzaF9kZXNjcmlwdG9yW2hhc2hdLk9JRCwgaGFzaE9JRCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKmRlY29kZVswXS5zaXplKSk7IGhhc2grKyk7Ci0KLSAgIGlmIChoYXNoX2Rlc2NyaXB0b3JbaGFzaF0ubmFtZSA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7Ci0gICB9Ci0KLSAgIC8qIHdlIG5vdyBoYXZlIHRoZSBoYXNoISAqLwotCi0gICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KLSAgIHB1Yl9leHB0ICAgPSBYTUFMTE9DKEVDQ19CVUZfU0laRSk7Ci0gICBlY2Nfc2hhcmVkID0gWE1BTExPQyhFQ0NfQlVGX1NJWkUpOwotICAgc2tleSAgICAgICA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFKTsKLSAgIGlmIChwdWJfZXhwdCA9PSBOVUxMIHx8IGVjY19zaGFyZWQgPT0gTlVMTCB8fCBza2V5ID09IE5VTEwpIHsKLSAgICAgIGlmIChwdWJfZXhwdCAhPSBOVUxMKSB7Ci0gICAgICAgICBYRlJFRShwdWJfZXhwdCk7Ci0gICAgICB9Ci0gICAgICBpZiAoZWNjX3NoYXJlZCAhPSBOVUxMKSB7Ci0gICAgICAgICBYRlJFRShlY2Nfc2hhcmVkKTsKLSAgICAgIH0KLSAgICAgIGlmIChza2V5ICE9IE5VTEwpIHsKLSAgICAgICAgIFhGUkVFKHNrZXkpOwotICAgICAgfQotICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgIH0KLSAgIExUQ19TRVRfQVNOMShkZWNvZGUsIDEsIExUQ19BU04xX09DVEVUX1NUUklORywgICAgICBwdWJfZXhwdCwgIEVDQ19CVUZfU0laRSk7Ci0gICBMVENfU0VUX0FTTjEoZGVjb2RlLCAyLCBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAgc2tleSwgICAgICBNQVhCTE9DS1NJWkUpOwotCi0gICAvKiByZWFkIHRoZSBzdHJ1Y3R1cmUgaW4gbm93ICovCi0gICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBkZWNvZGUsIDMpKSAhPSBDUllQVF9PSykgewotICAgICAgZ290byBMQkxfRVJSOwotICAgfQotCi0gICAvKiBpbXBvcnQgRUNDIGtleSBmcm9tIHBhY2tldCAqLwotICAgaWYgKChlcnIgPSBlY2NfaW1wb3J0KGRlY29kZVsxXS5kYXRhLCBkZWNvZGVbMV0uc2l6ZSwgJnB1YmtleSkpICE9IENSWVBUX09LKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0KLSAgIC8qIG1ha2Ugc2hhcmVkIGtleSAqLwotICAgeCA9IEVDQ19CVUZfU0laRTsKLSAgIGlmICgoZXJyID0gZWNjX3NoYXJlZF9zZWNyZXQoa2V5LCAmcHVia2V5LCBlY2Nfc2hhcmVkLCAmeCkpICE9IENSWVBUX09LKSB7Ci0gICAgICBlY2NfZnJlZSgmcHVia2V5KTsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0KLSAgIGVjY19mcmVlKCZwdWJrZXkpOwotCi0gICB5ID0gTUFYQkxPQ0tTSVpFOwotICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShoYXNoLCBlY2Nfc2hhcmVkLCB4LCBlY2Nfc2hhcmVkLCAmeSkpICE9IENSWVBUX09LKSB7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0KLSAgIC8qIGVuc3VyZSB0aGUgaGFzaCBvZiB0aGUgc2hhcmVkIHNlY3JldCBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIGVuY3J5cHQgaXRzZWxmICovCi0gICBpZiAoZGVjb2RlWzJdLnNpemUgPiB5KSB7Ci0gICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKLSAgICAgIGdvdG8gTEJMX0VSUjsKLSAgIH0KLQotICAgLyogYXZvaWQgYnVmZmVyIG92ZXJmbG93ICovCi0gICBpZiAoKm91dGxlbiA8IGRlY29kZVsyXS5zaXplKSB7Ci0gICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICBnb3RvIExCTF9FUlI7Ci0gICB9Ci0KLSAgIC8qIERlY3J5cHQgdGhlIGtleSAqLwotICAgZm9yICh4ID0gMDsgeCA8IGRlY29kZVsyXS5zaXplOyB4KyspIHsKLSAgICAgb3V0W3hdID0gc2tleVt4XSBeIGVjY19zaGFyZWRbeF07Ci0gICB9Ci0gICAqb3V0bGVuID0geDsKLQotICAgZXJyID0gQ1JZUFRfT0s7Ci1MQkxfRVJSOgotI2lmZGVmIExUQ19DTEVBTl9TVEFDSwotICAgemVyb21lbShwdWJfZXhwdCwgICBFQ0NfQlVGX1NJWkUpOwotICAgemVyb21lbShlY2Nfc2hhcmVkLCBFQ0NfQlVGX1NJWkUpOwotICAgemVyb21lbShza2V5LCAgICAgICBNQVhCTE9DS1NJWkUpOwotI2VuZGlmCi0KLSAgIFhGUkVFKHB1Yl9leHB0KTsKLSAgIFhGUkVFKGVjY19zaGFyZWQpOwotICAgWEZSRUUoc2tleSk7Ci0KLSAgIHJldHVybiBlcnI7Ci19Ci0KLS8qKgotICBTaWduIGEgbWVzc2FnZSBkaWdlc3QKLSAgQHBhcmFtIGluICAgICAgICBUaGUgbWVzc2FnZSBkaWdlc3QgdG8gc2lnbgotICBAcGFyYW0gaW5sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGRpZ2VzdAotICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHNpZ25hdHVyZQotICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHNpZ25hdHVyZQotICBAcGFyYW0gcHJuZyAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCi0gIEBwYXJhbSB3cHJuZyAgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIHlvdSB3aXNoIHRvIHVzZQotICBAcGFyYW0ga2V5ICAgICAgIEEgcHJpdmF0ZSBFQ0Mga2V5Ci0gIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAotKi8KLWludCBlY2Nfc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGVjY19rZXkgKmtleSkKLXsKLSAgIGVjY19rZXkgICAgICAgcHVia2V5OwotICAgbXBfaW50ICAgICAgICByLCBzLCBlLCBwOwotICAgaW50ICAgICAgICAgICBlcnI7Ci0KLSAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7Ci0gICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOwotCi0gICAvKiBpcyB0aGlzIGEgcHJpdmF0ZSBrZXk/ICovCi0gICBpZiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUpIHsKLSAgICAgIHJldHVybiBDUllQVF9QS19OT1RfUFJJVkFURTsKLSAgIH0KLSAgIAotICAgLyogaXMgdGhlIElEWCB2YWxpZCA/ICAqLwotICAgaWYgKGlzX3ZhbGlkX2lkeChrZXktPmlkeCkgIT0gMSkgewotICAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfVFlQRTsKLSAgIH0KLSAgIAotICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgIHJldHVybiBlcnI7Ci0gICB9Ci0KLSAgIC8qIGdldCB0aGUgaGFzaCBhbmQgbG9hZCBpdCBhcyBhIGJpZ251bSBpbnRvICdlJyAqLwotICAgLyogaW5pdCB0aGUgYmlnbnVtcyAqLwotICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZyLCAmcywgJnAsICZlLCBOVUxMKSkgIT0gTVBfT0tBWSkgeyAKLSAgICAgIGVjY19mcmVlKCZwdWJrZXkpOwotICAgICAgZXJyID0gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotICAgICAgZ290byBMQkxfRVJSOwotICAgfQotICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KCZwLCAoY2hhciAqKXNldHNba2V5LT5pZHhdLm9yZGVyLCA2NCkpICE9IE1QX09LQVkpICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oJmUsICh1bnNpZ25lZCBjaGFyICopaW4sIChpbnQpaW5sZW4pKSAhPSBNUF9PS0FZKSAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIG1ha2UgdXAgYSBrZXkgYW5kIGV4cG9ydCB0aGUgcHVibGljIGNvcHkgKi8KLSAgIGZvciAoOzspIHsKLSAgICAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5KHBybmcsIHdwcm5nLCBlY2NfZ2V0X3NpemUoa2V5KSwgJnB1YmtleSkpICE9IENSWVBUX09LKSB7Ci0gICAgICAgICByZXR1cm4gZXJyOwotICAgICAgfQotCi0gICAgICAvKiBmaW5kIHIgPSB4MSBtb2QgbiAqLwotICAgICAgaWYgKChlcnIgPSBtcF9tb2QoJnB1YmtleS5wdWJrZXkueCwgJnAsICZyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgICAgaWYgKG1wX2lzemVybygmcikpIHsKLSAgICAgICAgIGVjY19mcmVlKCZwdWJrZXkpOwotICAgICAgfSBlbHNlIHsgCi0gICAgICAgIC8qIGZpbmQgcyA9IChlICsgeHIpL2sgKi8KLSAgICAgICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoJnB1YmtleS5rLCAmcCwgJnB1YmtleS5rKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogayA9IDEvayAqLwotICAgICAgICBpZiAoKGVyciA9IG1wX211bG1vZCgma2V5LT5rLCAmciwgJnAsICZzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiBzID0geHIgKi8KLSAgICAgICAgaWYgKChlcnIgPSBtcF9hZGRtb2QoJmUsICZzLCAmcCwgJnMpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogcyA9IGUgKyAgeHIgKi8KLSAgICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoJnMsICZwdWJrZXkuaywgJnAsICZzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogcyA9IChlICsgeHIpL2sgKi8KLQotICAgICAgICBpZiAobXBfaXN6ZXJvKCZzKSkgewotICAgICAgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgIH0KLQotICAgLyogc3RvcmUgYXMgU0VRVUVOQ0UgeyByLCBzIC0tIGludGVnZXIgfSAqLwotICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAmciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAwVUwsIE5VTEwpOwotICAgZ290byBMQkxfRVJSOwotZXJyb3I6Ci0gICBlcnIgPSBtcGlfdG9fbHRjX2Vycm9yKGVycik7Ci1MQkxfRVJSOgotICAgbXBfY2xlYXJfbXVsdGkoJnIsICZzLCAmcCwgJmUsIE5VTEwpOwotICAgZWNjX2ZyZWUoJnB1YmtleSk7Ci0KLSAgIHJldHVybiBlcnI7ICAgCi19Ci0KLS8qIHZlcmlmeSAKLSAqCi0gKiB3ICA9IHNeLTEgbW9kIG4KLSAqIHUxID0geHcgCi0gKiB1MiA9IHJ3Ci0gKiBYID0gdTEqRyArIHUyKlEKLSAqIHYgPSBYX3gxIG1vZCBuCi0gKiBhY2NlcHQgaWYgdiA9PSByCi0gKi8KLQotLyoqCi0gICBWZXJpZnkgYW4gRUNDIHNpZ25hdHVyZQotICAgQHBhcmFtIHNpZyAgICAgICAgIFRoZSBzaWduYXR1cmUgdG8gdmVyaWZ5Ci0gICBAcGFyYW0gc2lnbGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2lnbmF0dXJlIChvY3RldHMpCi0gICBAcGFyYW0gaGFzaCAgICAgICAgVGhlIGhhc2ggKG1lc3NhZ2UgZGlnZXN0KSB0aGF0IHdhcyBzaWduZWQKLSAgIEBwYXJhbSBoYXNobGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIChvY3RldHMpCi0gICBAcGFyYW0gc3RhdCAgICAgICAgUmVzdWx0IG9mIHNpZ25hdHVyZSwgMT09dmFsaWQsIDA9PWludmFsaWQKLSAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBwdWJsaWMgRUNDIGtleQotICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsIChldmVuIGlmIHRoZSBzaWduYXR1cmUgaXMgbm90IHZhbGlkKQotKi8KLWludCBlY2NfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgdW5zaWduZWQgbG9uZyBzaWdsZW4sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwgCi0gICAgICAgICAgICAgICAgICAgIGludCAqc3RhdCwgZWNjX2tleSAqa2V5KQotewotICAgZWNjX3BvaW50ICAgICptRywgKm1ROwotICAgbXBfaW50ICAgICAgICByLCBzLCB2LCB3LCB1MSwgdTIsIGUsIHAsIG07Ci0gICBtcF9kaWdpdCAgICAgIG1wOwotICAgaW50ICAgICAgICAgICBlcnI7Ci0KLSAgIExUQ19BUkdDSEsoc2lnICAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsoaGFzaCAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsoc3RhdCAhPSBOVUxMKTsKLSAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKLQotICAgLyogZGVmYXVsdCB0byBpbnZhbGlkIHNpZ25hdHVyZSAqLwotICAgKnN0YXQgPSAwOwotCi0gICAvKiBpcyB0aGUgSURYIHZhbGlkID8gICovCi0gICBpZiAoaXNfdmFsaWRfaWR4KGtleS0+aWR4KSAhPSAxKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9UWVBFOwotICAgfQotCi0gICAvKiBhbGxvY2F0ZSBpbnRzICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnIsICZzLCAmdiwgJncsICZ1MSwgJnUyLCAmcCwgJmUsICZtLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIENSWVBUX01FTTsKLSAgIH0KLQotICAgLyogYWxsb2NhdGUgcG9pbnRzICovCi0gICBtRyA9IG5ld19wb2ludCgpOwotICAgbVEgPSBuZXdfcG9pbnQoKTsKLSAgIGlmIChtUSAgPT0gTlVMTCB8fCBtRyA9PSBOVUxMKSB7Ci0gICAgICBlcnIgPSBDUllQVF9NRU07Ci0gICAgICBnb3RvIGRvbmU7Ci0gICB9Ci0KLSAgIC8qIHBhcnNlIGhlYWRlciAqLwotICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKHNpZywgc2lnbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICB9Ci0KLSAgIC8qIGdldCB0aGUgb3JkZXIgKi8KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmcCwgKGNoYXIgKilzZXRzW2tleS0+aWR4XS5vcmRlciwgNjQpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBnZXQgdGhlIG1vZHVsdXMgKi8KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmbSwgKGNoYXIgKilzZXRzW2tleS0+aWR4XS5wcmltZSwgNjQpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiBjaGVjayBmb3IgemVybyAqLwotICAgaWYgKG1wX2lzemVybygmcikgfHwgbXBfaXN6ZXJvKCZzKSB8fCBtcF9jbXAoJnIsICZwKSAhPSBNUF9MVCB8fCBtcF9jbXAoJnMsICZwKSAhPSBNUF9MVCkgewotICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICB9Ci0KLSAgIC8qIHJlYWQgaGFzaCAqLwotICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbigmZSwgKHVuc2lnbmVkIGNoYXIgKiloYXNoLCAoaW50KWhhc2hsZW4pKSAhPSBNUF9PS0FZKSAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qICB3ICA9IHNeLTEgbW9kIG4gKi8KLSAgIGlmICgoZXJyID0gbXBfaW52bW9kKCZzLCAmcCwgJncpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotCi0gICAvKiB1MSA9IGV3ICovCi0gICBpZiAoKGVyciA9IG1wX211bG1vZCgmZSwgJncsICZwLCAmdTEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLQotICAgLyogdTIgPSBydyAqLwotICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoJnIsICZ3LCAmcCwgJnUyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0KLSAgIC8qIGZpbmQgbUcgPSB1MSpHICovCi0gICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgoJm1HLT54LCAoY2hhciAqKXNldHNba2V5LT5pZHhdLkd4LCA2NCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeCgmbUctPnksIChjaGFyICopc2V0c1trZXktPmlkeF0uR3ksIDY0KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgbXBfc2V0KCZtRy0+eiwgMSk7ICAKLSAgIGlmICgoZXJyID0gZWNjX211bG1vZCgmdTEsIG1HLCBtRywgJm0sIDApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9Ci0KLSAgIC8qIGZpbmQgbVEgPSB1MipRICovCi0gICBpZiAoKGVyciA9IG1wX2NvcHkoJmtleS0+cHVia2V5LngsICZtUS0+eCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KLSAgIGlmICgoZXJyID0gbXBfY29weSgma2V5LT5wdWJrZXkueSwgJm1RLT55KSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgaWYgKChlcnIgPSBtcF9jb3B5KCZrZXktPnB1YmtleS56LCAmbVEtPnopKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9Ci0gICBpZiAoKGVyciA9IGVjY19tdWxtb2QoJnUyLCBtUSwgbVEsICZtLCAwKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQotICAKLSAgIC8qIGZpbmQgdGhlIG1vbnRnb21lcnkgbXAgKi8KLSAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cCgmbSwgJm1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgLyogYWRkIHRoZW0gKi8KLSAgIGlmICgoZXJyID0gYWRkX3BvaW50KG1RLCBtRywgbUcsICZtLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9Ci0gICAKLSAgIC8qIHJlZHVjZSAqLwotICAgaWYgKChlcnIgPSBlY2NfbWFwKG1HLCAmbSwgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KLQotICAgLyogdiA9IFhfeDEgbW9kIG4gKi8KLSAgIGlmICgoZXJyID0gbXBfbW9kKCZtRy0+eCwgJnAsICZ2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9Ci0KLSAgIC8qIGRvZXMgdiA9PSByICovCi0gICBpZiAobXBfY21wKCZ2LCAmcikgPT0gTVBfRVEpIHsKLSAgICAgICpzdGF0ID0gMTsKLSAgIH0KLQotICAgLyogY2xlYXIgdXAgYW5kIHJldHVybiAqLwotICAgZXJyID0gQ1JZUFRfT0s7Ci0gICBnb3RvIGRvbmU7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmU6Ci0gICBkZWxfcG9pbnQobUcpOwotICAgZGVsX3BvaW50KG1RKTsKLSAgIG1wX2NsZWFyX211bHRpKCZyLCAmcywgJnYsICZ3LCAmdTEsICZ1MiwgJnAsICZlLCAmbSwgTlVMTCk7Ci0gICByZXR1cm4gZXJyOwotfQotCi0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3N5cy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjE4ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzE0IDIwOjQ3OjU1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX3Rlc3QuYyBiL3NyYy9way9lY2MvZWNjX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWExNjdjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9lY2NfdGVzdC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY190ZXN0LmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICBQZXJmb3JtIG9uIHRoZSBFQ0Mgc3lzdGVtCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlY2NfdGVzdCh2b2lkKQoreworICAgdm9pZCAgICAgKm1vZHVsdXMsICpvcmRlcjsKKyAgIGVjY19wb2ludCAgKkcsICpHRzsKKyAgIGludCBpLCBlcnIsIHByaW1hbGl0eTsKKworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZtb2R1bHVzLCAmb3JkZXIsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgRyAgID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIEdHICA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAoRyA9PSBOVUxMIHx8IEdHID09IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyX211bHRpKG1vZHVsdXMsIG9yZGVyLCBOVUxMKTsKKyAgICAgIGx0Y19lY2NfZGVsX3BvaW50KEcpOworICAgICAgbHRjX2VjY19kZWxfcG9pbnQoR0cpOworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgZm9yIChpID0gMDsgbHRjX2VjY19zZXRzW2ldLnNpemU7IGkrKykgeworICAgICAgICNpZiAwCisgICAgICAgICAgcHJpbnRmKCJUZXN0aW5nICVkXG4iLCBsdGNfZWNjX3NldHNbaV0uc2l6ZSk7CisgICAgICAgI2VuZGlmCisgICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG1vZHVsdXMsIChjaGFyICopbHRjX2VjY19zZXRzW2ldLnByaW1lLCAxNikpICE9IENSWVBUX09LKSAgIHsgZ290byBkb25lOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG9yZGVyLCAoY2hhciAqKWx0Y19lY2Nfc2V0c1tpXS5vcmRlciwgMTYpKSAhPSBDUllQVF9PSykgICAgIHsgZ290byBkb25lOyB9CisKKyAgICAgICAvKiBpcyBwcmltZSBhY3R1YWxseSBwcmltZT8gKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX3ByaW1lKG1vZHVsdXMsIDgsICZwcmltYWxpdHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICBpZiAocHJpbWFsaXR5ID09IDApIHsKKyAgICAgICAgICBlcnIgPSBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgICAgZ290byBkb25lOworICAgICAgIH0KKworICAgICAgIC8qIGlzIG9yZGVyIHByaW1lID8gKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX3ByaW1lKG9yZGVyLCA4LCAmcHJpbWFsaXR5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICBpZiAocHJpbWFsaXR5ID09IDApIHsKKyAgICAgICAgICBlcnIgPSBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgICAgZ290byBkb25lOworICAgICAgIH0KKworICAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChHLT54LCAoY2hhciAqKWx0Y19lY2Nfc2V0c1tpXS5HeCwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChHLT55LCAoY2hhciAqKWx0Y19lY2Nfc2V0c1tpXS5HeSwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIG1wX3NldChHLT56LCAxKTsKKworICAgICAgIC8qIHRoZW4gd2Ugc2hvdWxkIGhhdmUgRyA9PSAob3JkZXIgKyAxKUcgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX2FkZF9kKG9yZGVyLCAxLCBvcmRlcikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRtdWwob3JkZXIsIEcsIEdHLCBtb2R1bHVzLCAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICBpZiAobXBfY21wKEctPngsIEdHLT54KSAhPSBMVENfTVBfRVEgfHwgbXBfY21wKEctPnksIEdHLT55KSAhPSBMVENfTVBfRVEpIHsKKyAgICAgICAgICBlcnIgPSBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgICAgZ290byBkb25lOworICAgICAgIH0KKyAgIH0KKyAgIGVyciA9IENSWVBUX09LOworZG9uZToKKyAgIGx0Y19lY2NfZGVsX3BvaW50KEdHKTsKKyAgIGx0Y19lY2NfZGVsX3BvaW50KEcpOworICAgbXBfY2xlYXJfbXVsdGkob3JkZXIsIG1vZHVsdXMsIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMjoxOTo0OCAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLmMgYi9zcmMvcGsvZWNjL2VjY192ZXJpZnlfaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGE4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2VjY192ZXJpZnlfaGFzaC5jCkBAIC0wLDAgKzEsMTY1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2NfdmVyaWZ5X2hhc2guYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyogdmVyaWZ5IAorICoKKyAqIHcgID0gc14tMSBtb2QgbgorICogdTEgPSB4dyAKKyAqIHUyID0gcncKKyAqIFggPSB1MSpHICsgdTIqUQorICogdiA9IFhfeDEgbW9kIG4KKyAqIGFjY2VwdCBpZiB2ID09IHIKKyAqLworCisvKioKKyAgIFZlcmlmeSBhbiBFQ0Mgc2lnbmF0dXJlCisgICBAcGFyYW0gc2lnICAgICAgICAgVGhlIHNpZ25hdHVyZSB0byB2ZXJpZnkKKyAgIEBwYXJhbSBzaWdsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzaWduYXR1cmUgKG9jdGV0cykKKyAgIEBwYXJhbSBoYXNoICAgICAgICBUaGUgaGFzaCAobWVzc2FnZSBkaWdlc3QpIHRoYXQgd2FzIHNpZ25lZAorICAgQHBhcmFtIGhhc2hsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGhhc2ggKG9jdGV0cykKKyAgIEBwYXJhbSBzdGF0ICAgICAgICBSZXN1bHQgb2Ygc2lnbmF0dXJlLCAxPT12YWxpZCwgMD09aW52YWxpZAorICAgQHBhcmFtIGtleSAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHB1YmxpYyBFQ0Mga2V5CisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwgKGV2ZW4gaWYgdGhlIHNpZ25hdHVyZSBpcyBub3QgdmFsaWQpCisqLworaW50IGVjY192ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsICB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgbG9uZyBoYXNobGVuLCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCBlY2Nfa2V5ICprZXkpCit7CisgICBlY2NfcG9pbnQgICAgKm1HLCAqbVE7CisgICB2b2lkICAgICAgICAgICpyLCAqcywgKnYsICp3LCAqdTEsICp1MiwgKmUsICpwLCAqbTsKKyAgIHZvaWQgICAgICAgICAgKm1wOworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoc2lnICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaGFzaCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc3RhdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKworICAgLyogZGVmYXVsdCB0byBpbnZhbGlkIHNpZ25hdHVyZSAqLworICAgKnN0YXQgPSAwOworICAgbXAgICAgPSBOVUxMOworCisgICAvKiBpcyB0aGUgSURYIHZhbGlkID8gICovCisgICBpZiAobHRjX2VjY19pc192YWxpZF9pZHgoa2V5LT5pZHgpICE9IDEpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1RZUEU7CisgICB9CisKKyAgIC8qIGFsbG9jYXRlIGludHMgKi8KKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmciwgJnMsICZ2LCAmdywgJnUxLCAmdTIsICZwLCAmZSwgJm0sIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgcG9pbnRzICovCisgICBtRyA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBtUSA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAobVEgID09IE5VTEwgfHwgbUcgPT0gTlVMTCkgeworICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogcGFyc2UgaGVhZGVyICovCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoc2lnLCBzaWdsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCByLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICAvKiBnZXQgdGhlIG9yZGVyICovCisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgocCwgKGNoYXIgKilrZXktPmRwLT5vcmRlciwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiBnZXQgdGhlIG1vZHVsdXMgKi8KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChtLCAoY2hhciAqKWtleS0+ZHAtPnByaW1lLCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGNoZWNrIGZvciB6ZXJvICovCisgICBpZiAobXBfaXN6ZXJvKHIpIHx8IG1wX2lzemVybyhzKSB8fCBtcF9jbXAociwgcCkgIT0gTFRDX01QX0xUIHx8IG1wX2NtcChzLCBwKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogcmVhZCBoYXNoICovCisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGUsICh1bnNpZ25lZCBjaGFyICopaGFzaCwgKGludCloYXNobGVuKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiAgdyAgPSBzXi0xIG1vZCBuICovCisgICBpZiAoKGVyciA9IG1wX2ludm1vZChzLCBwLCB3KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiB1MSA9IGV3ICovCisgICBpZiAoKGVyciA9IG1wX211bG1vZChlLCB3LCBwLCB1MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiB1MiA9IHJ3ICovCisgICBpZiAoKGVyciA9IG1wX211bG1vZChyLCB3LCBwLCB1MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiBmaW5kIG1HIGFuZCBtUSAqLworICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG1HLT54LCAoY2hhciAqKWtleS0+ZHAtPkd4LCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChtRy0+eSwgKGNoYXIgKilrZXktPmRwLT5HeSwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX3NldChtRy0+eiwgMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICBpZiAoKGVyciA9IG1wX2NvcHkoa2V5LT5wdWJrZXkueCwgbVEtPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KGtleS0+cHVia2V5LnksIG1RLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weShrZXktPnB1YmtleS56LCBtUS0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGNvbXB1dGUgdTEqbUcgKyB1MiptUSA9IG1HICovCisgICBpZiAobHRjX21wLmVjY19tdWwyYWRkID09IE5VTEwpIHsKKyAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdG11bCh1MSwgbUcsIG1HLCBtLCAwKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRtdWwodTIsIG1RLCBtUSwgbSwgMCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAKKyAgICAgIC8qIGZpbmQgdGhlIG1vbnRnb21lcnkgbXAgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtLCAmbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgICAgIC8qIGFkZCB0aGVtICovCisgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQobVEsIG1HLCBtRywgbSwgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgCisgICAgICAvKiByZWR1Y2UgKi8KKyAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19tYXAobUcsIG0sIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9IGVsc2UgeworICAgICAgLyogdXNlIFNoYW1pcidzIHRyaWNrIHRvIGNvbXB1dGUgdTEqbUcgKyB1MiptUSB1c2luZyBoYWxmIG9mIHRoZSBkb3VibGVzICovCisgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfbXVsMmFkZChtRywgdTEsIG1RLCB1MiwgbUcsIG0pKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgfQorCisgICAvKiB2ID0gWF94MSBtb2QgbiAqLworICAgaWYgKChlcnIgPSBtcF9tb2QobUctPngsIHAsIHYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogZG9lcyB2ID09IHIgKi8KKyAgIGlmIChtcF9jbXAodiwgcikgPT0gTFRDX01QX0VRKSB7CisgICAgICAqc3RhdCA9IDE7CisgICB9CisKKyAgIC8qIGNsZWFyIHVwIGFuZCByZXR1cm4gKi8KKyAgIGVyciA9IENSWVBUX09LOworZXJyb3I6CisgICBsdGNfZWNjX2RlbF9wb2ludChtRyk7CisgICBsdGNfZWNjX2RlbF9wb2ludChtUSk7CisgICBtcF9jbGVhcl9tdWx0aShyLCBzLCB2LCB3LCB1MSwgdTIsIHAsIGUsIG0sIE5VTEwpOworICAgaWYgKG1wICE9IE5VTEwpIHsgCisgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgfQorICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY192ZXJpZnlfaGFzaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDA1OjA3OjU5ICQgKi8KKwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5jIGIvc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODFmMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4LmMKQEAgLTAsMCArMSw0NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19pc192YWxpZF9pZHguYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqIFJldHVybnMgd2hldGhlciBhbiBFQ0MgaWR4IGlzIHZhbGlkIG9yIG5vdAorICBAcGFyYW0gbiAgIFRoZSBpZHggbnVtYmVyIHRvIGNoZWNrCisgIEByZXR1cm4gMSBpZiB2YWxpZCwgMCBpZiBub3QKKyovICAKK2ludCBsdGNfZWNjX2lzX3ZhbGlkX2lkeChpbnQgbikKK3sKKyAgIGludCB4OworCisgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZSAhPSAwOyB4KyspOworICAgLyogLTEgaXMgYSB2YWxpZCBpbmRleCAtLS0gaW5kaWNhdGluZyB0aGF0IHRoZSBkb21haW4gcGFyYW1zIHdlcmUgc3VwcGxpZWQgYnkgdGhlIHVzZXIgKi8KKyAgIGlmICgobiA+PSAtMSkgfHwgKG4gPCB4KSkgeworICAgICAgcmV0dXJuIDE7CisgICB9CisgICByZXR1cm4gMDsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxMDoxOCAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvbHRjX2VjY19tYXAuYyBiL3NyYy9way9lY2MvbHRjX2VjY19tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWMyOGIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9sdGNfZWNjX21hcC5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGx0Y19lY2NfbWFwLmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICBNYXAgYSBwcm9qZWN0aXZlIGphY2JvYmlhbiBwb2ludCBiYWNrIHRvIGFmZmluZSBzcGFjZQorICBAcGFyYW0gUCAgICAgICAgW2luL291dF0gVGhlIHBvaW50IHRvIG1hcAorICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMgb2YgdGhlIGZpZWxkIHRoZSBFQ0MgY3VydmUgaXMgaW4KKyAgQHBhcmFtIG1wICAgICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGx0Y19lY2NfbWFwKGVjY19wb2ludCAqUCwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApCit7CisgICB2b2lkICp0MSwgKnQyOworICAgaW50ICAgZXJyOworCisgICBMVENfQVJHQ0hLKFAgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG1vZHVsdXMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG1wICAgICAgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdDEsICZ0MiwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBmaXJzdCBtYXAgeiBiYWNrIHRvIG5vcm1hbCAqLworICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZShQLT56LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogZ2V0IDEveiAqLworICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoUC0+eiwgbW9kdWx1cywgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAKKyAgIC8qIGdldCAxL3peMiBhbmQgMS96XjMgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKHQxLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vZCh0MiwgbW9kdWx1cywgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tdWwodDEsIHQyLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9kKHQxLCBtb2R1bHVzLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIG11bHRpcGx5IGFnYWluc3QgeC95ICovCisgICBpZiAoKGVyciA9IG1wX211bChQLT54LCB0MiwgUC0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZShQLT54LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsKFAtPnksIHQxLCBQLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFAtPnksIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9zZXQoUC0+eiwgMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgZXJyID0gQ1JZUFRfT0s7Citkb25lOgorICAgbXBfY2xlYXJfbXVsdGkodDEsIHQyLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbWFwLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMjo1MDoxMSAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvbHRjX2VjY19tdWwyYWRkLmMgYi9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMWMyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5jCkBAIC0wLDAgKzEsMjA3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBsdGNfZWNjX211bDJhZGQuYworICBFQ0MgQ3J5cHRvLCBTaGFtaXIncyBUcmljaywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKyNpZmRlZiBMVENfRUNDX1NIQU1JUgorCisvKiogQ29tcHV0ZXMga0EqQSArIGtCKkIgPSBDIHVzaW5nIFNoYW1pcidzIFRyaWNrCisgIEBwYXJhbSBBICAgICAgICBGaXJzdCBwb2ludCB0byBtdWx0aXBseQorICBAcGFyYW0ga0EgICAgICAgV2hhdCB0byBtdWx0aXBsZSBBIGJ5CisgIEBwYXJhbSBCICAgICAgICBTZWNvbmQgcG9pbnQgdG8gbXVsdGlwbHkKKyAgQHBhcmFtIGtCICAgICAgIFdoYXQgdG8gbXVsdGlwbGUgQiBieQorICBAcGFyYW0gQyAgICAgICAgW291dF0gRGVzdGluYXRpb24gcG9pbnQgKGNhbiBvdmVybGFwIHdpdGggQSBvciBCCisgIEBwYXJhbSBtb2R1bHVzICBNb2R1bHVzIGZvciBjdXJ2ZSAKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLyAKK2ludCBsdGNfZWNjX211bDJhZGQoZWNjX3BvaW50ICpBLCB2b2lkICprQSwKKyAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpCLCB2b2lkICprQiwKKyAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpDLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1vZHVsdXMpCit7CisgIGVjY19wb2ludCAgICAgKnByZWNvbXBbMTZdOworICB1bnNpZ25lZCAgICAgICBiaXRidWZBLCBiaXRidWZCLCBsZW5BLCBsZW5CLCBsZW4sIHgsIHksIG5BLCBuQiwgbmliYmxlOworICB1bnNpZ25lZCBjaGFyICp0QSwgKnRCOworICBpbnQgICAgICAgICAgICBlcnIsIGZpcnN0OworICB2b2lkICAgICAgICAgICptcCwgKm11OworIAorICAvKiBhcmdjaGtzICovCisgIExUQ19BUkdDSEsoQSAgICAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhCICAgICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKEMgICAgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsoa0EgICAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhrQiAgICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKG1vZHVsdXMgIT0gTlVMTCk7CisKKyAgLyogYWxsb2NhdGUgbWVtb3J5ICovCisgIHRBID0gWENBTExPQygxLCBFQ0NfQlVGX1NJWkUpOworICBpZiAodEEgPT0gTlVMTCkgeworICAgICByZXR1cm4gQ1JZUFRfTUVNOworICB9CisgIHRCID0gWENBTExPQygxLCBFQ0NfQlVGX1NJWkUpOworICBpZiAodEIgPT0gTlVMTCkgeworICAgICBYRlJFRSh0QSk7CisgICAgIHJldHVybiBDUllQVF9NRU07CisgIH0KKworICAvKiBnZXQgc2l6ZXMgKi8KKyAgbGVuQSA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtBKTsKKyAgbGVuQiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtCKTsKKyAgbGVuICA9IE1BWChsZW5BLCBsZW5CKTsKKworICAvKiBzYW5pdHkgY2hlY2sgKi8KKyAgaWYgKChsZW5BID4gRUNDX0JVRl9TSVpFKSB8fCAobGVuQiA+IEVDQ19CVUZfU0laRSkpIHsKKyAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgIGdvdG8gRVJSX1Q7CisgIH0KKworICAvKiBleHRyYWN0IGFuZCBqdXN0aWZ5IGtBICovCisgIG1wX3RvX3Vuc2lnbmVkX2JpbihrQSwgKGxlbiAtIGxlbkEpICsgdEEpOworCisgIC8qIGV4dHJhY3QgYW5kIGp1c3RpZnkga0IgKi8KKyAgbXBfdG9fdW5zaWduZWRfYmluKGtCLCAobGVuIC0gbGVuQikgKyB0Qik7CisKKyAgLyogYWxsb2NhdGUgdGhlIHRhYmxlICovCisgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7CisgICAgIHByZWNvbXBbeF0gPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgICBpZiAocHJlY29tcFt4XSA9PSBOVUxMKSB7CisgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgKyt5KSB7CisgICAgICAgICAgICBsdGNfZWNjX2RlbF9wb2ludChwcmVjb21wW3ldKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgIGdvdG8gRVJSX1Q7CisgICAgIH0KKyAgfQorCisgICAvKiBpbml0IG1vbnRnb21lcnkgcmVkdWN0aW9uICovCisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gRVJSX1A7CisgICB9CisgICBpZiAoKGVyciA9IG1wX2luaXQoJm11KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gRVJSX01QOworICAgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X25vcm1hbGl6YXRpb24obXUsIG1vZHVsdXMpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBFUlJfTVU7CisgICB9CisKKyAgLyogY29weSBvbmVzIC4uLiAqLworICBpZiAoKGVyciA9IG1wX211bG1vZChBLT54LCBtdSwgbW9kdWx1cywgcHJlY29tcFsxXS0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICBpZiAoKGVyciA9IG1wX211bG1vZChBLT55LCBtdSwgbW9kdWx1cywgcHJlY29tcFsxXS0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICBpZiAoKGVyciA9IG1wX211bG1vZChBLT56LCBtdSwgbW9kdWx1cywgcHJlY29tcFsxXS0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorCisgIGlmICgoZXJyID0gbXBfbXVsbW9kKEItPngsIG11LCBtb2R1bHVzLCBwcmVjb21wWzE8PDJdLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgIGlmICgoZXJyID0gbXBfbXVsbW9kKEItPnksIG11LCBtb2R1bHVzLCBwcmVjb21wWzE8PDJdLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgIGlmICgoZXJyID0gbXBfbXVsbW9kKEItPnosIG11LCBtb2R1bHVzLCBwcmVjb21wWzE8PDJdLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisKKyAgLyogcHJlY29tcCBbaSwwXShBICsgQikgdGFibGUgKi8KKyAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKHByZWNvbXBbMV0sIHByZWNvbXBbMl0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKyAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKHByZWNvbXBbMV0sIHByZWNvbXBbMl0sIHByZWNvbXBbM10sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKworICAvKiBwcmVjb21wIFswLGldKEEgKyBCKSB0YWJsZSAqLworICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwocHJlY29tcFsxPDwyXSwgcHJlY29tcFsyPDwyXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQocHJlY29tcFsxPDwyXSwgcHJlY29tcFsyPDwyXSwgcHJlY29tcFszPDwyXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorCisgIC8qIHByZWNvbXAgW2ksal0oQSArIEIpIHRhYmxlIChpICE9IDAsIGogIT0gMCkgKi8KKyAgZm9yICh4ID0gMTsgeCA8IDQ7IHgrKykgeworICAgICBmb3IgKHkgPSAxOyB5IDwgNDsgeSsrKSB7CisgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChwcmVjb21wW3hdLCBwcmVjb21wWyh5PDwyKV0sIHByZWNvbXBbeCsoeTw8MildLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7IGdvdG8gRVJSX01VOyB9CisgICAgIH0KKyAgfSAgIAorCisgIG5pYmJsZSAgPSAzOworICBmaXJzdCAgID0gMTsKKyAgYml0YnVmQSA9IHRBWzBdOworICBiaXRidWZCID0gdEJbMF07CisKKyAgLyogZm9yIGV2ZXJ5IGJ5dGUgb2YgdGhlIG11bHRpcGxpY2FuZHMgKi8KKyAgZm9yICh4ID0gLTE7OyApIHsKKyAgICAgLyogZ3JhYiBhIG5pYmJsZSAqLworICAgICBpZiAoKytuaWJibGUgPT0gNCkgeworICAgICAgICArK3g7IGlmICh4ID09IGxlbikgYnJlYWs7CisgICAgICAgIGJpdGJ1ZkEgPSB0QVt4XTsKKyAgICAgICAgYml0YnVmQiA9IHRCW3hdOworICAgICAgICBuaWJibGUgID0gMDsKKyAgICAgfQorCisgICAgIC8qIGV4dHJhY3QgdHdvIGJpdHMgZnJvbSBib3RoLCBzaGlmdC91cGRhdGUgKi8KKyAgICAgbkEgPSAoYml0YnVmQSA+PiA2KSAmIDB4MDM7CisgICAgIG5CID0gKGJpdGJ1ZkIgPj4gNikgJiAweDAzOworICAgICBiaXRidWZBID0gKGJpdGJ1ZkEgPDwgMikgJiAweEZGOyAgIAorICAgICBiaXRidWZCID0gKGJpdGJ1ZkIgPDwgMikgJiAweEZGOyAgIAorCisgICAgIC8qIGlmIGJvdGggemVybywgaWYgZmlyc3QsIGNvbnRpbnVlICovCisgICAgIGlmICgobkEgPT0gMCkgJiYgKG5CID09IDApICYmIChmaXJzdCA9PSAxKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgfQorCisgICAgIC8qIGRvdWJsZSB0d2ljZSwgb25seSBpZiB0aGlzIGlzbid0IHRoZSBmaXJzdCAqLworICAgICBpZiAoZmlyc3QgPT0gMCkgeworICAgICAgICAvKiBkb3VibGUgdHdpY2UgKi8KKyAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKEMsIEMsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwoQywgQywgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgICAgIH0KKworICAgICAvKiBpZiBub3QgYm90aCB6ZXJvICovCisgICAgIGlmICgobkEgIT0gMCkgfHwgKG5CICE9IDApKSB7CisgICAgICAgIGlmIChmaXJzdCA9PSAxKSB7CisgICAgICAgICAgIC8qIGlmIGZpcnN0LCBjb3B5IGZyb20gdGFibGUgKi8KKyAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkocHJlY29tcFtuQSArIChuQjw8MildLT54LCBDLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weShwcmVjb21wW25BICsgKG5CPDwyKV0tPnksIEMtPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKyAgICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KHByZWNvbXBbbkEgKyAobkI8PDIpXS0+eiwgQy0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAvKiBpZiBub3QgZmlyc3QsIGFkZCBmcm9tIHRhYmxlICovCisgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChDLCBwcmVjb21wW25BICsgKG5CPDwyKV0sIEMsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsgZ290byBFUlJfTVU7IH0KKyAgICAgICAgfQorICAgICB9CisgIH0KKworICAvKiByZWR1Y2UgdG8gYWZmaW5lICovCisgIGVyciA9IGx0Y19lY2NfbWFwKEMsIG1vZHVsdXMsIG1wKTsKKworICAvKiBjbGVhbiB1cCAqLworRVJSX01VOgorICAgbXBfY2xlYXIobXUpOworRVJSX01QOgorICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKK0VSUl9QOgorICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgICBsdGNfZWNjX2RlbF9wb2ludChwcmVjb21wW3hdKTsKKyAgIH0KK0VSUl9UOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbSh0QSwgRUNDX0JVRl9TSVpFKTsKKyAgIHplcm9tZW0odEIsIEVDQ19CVUZfU0laRSk7CisjZW5kaWYKKyAgIFhGUkVFKHRBKTsKKyAgIFhGUkVFKHRCKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX211bDJhZGQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDA1OjA3OjU5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QuYyBiL3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTRjOTJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5jCkBAIC0wLDAgKzEsMjIyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBsdGNfZWNjX211bG1vZC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworI2lmbmRlZiBMVENfRUNDX1RJTUlOR19SRVNJU1RBTlQKKworLyogc2l6ZSBvZiBzbGlkaW5nIHdpbmRvdywgZG9uJ3QgY2hhbmdlIHRoaXMhICovCisjZGVmaW5lIFdJTlNJWkUgNAorCisvKioKKyAgIFBlcmZvcm0gYSBwb2ludCBtdWx0aXBsaWNhdGlvbiAKKyAgIEBwYXJhbSBrICAgIFRoZSBzY2FsYXIgdG8gbXVsdGlwbHkgYnkKKyAgIEBwYXJhbSBHICAgIFRoZSBiYXNlIHBvaW50CisgICBAcGFyYW0gUiAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3Iga0cKKyAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBvZiB0aGUgZmllbGQgdGhlIEVDQyBjdXJ2ZSBpcyBpbgorICAgQHBhcmFtIG1hcCAgICAgIEJvb2xlYW4gd2hldGhlciB0byBtYXAgYmFjayB0byBhZmZpbmUgb3Igbm90ICgxPT1tYXAsIDAgPT0gbGVhdmUgaW4gcHJvamVjdGl2ZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBsdGNfZWNjX211bG1vZCh2b2lkICprLCBlY2NfcG9pbnQgKkcsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgaW50IG1hcCkKK3sKKyAgIGVjY19wb2ludCAqdEcsICpNWzhdOworICAgaW50ICAgICAgICBpLCBqLCBlcnI7CisgICB2b2lkICAgICAgICptdSwgKm1wOworICAgdW5zaWduZWQgbG9uZyBidWY7CisgICBpbnQgICAgICAgIGZpcnN0LCBiaXRidWYsIGJpdGNweSwgYml0Y250LCBtb2RlLCBkaWdpZHg7CisKKyAgIExUQ19BUkdDSEsoayAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoRyAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoUiAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobW9kdWx1cyAhPSBOVUxMKTsKKworICAgLyogaW5pdCBtb250Z29tZXJ5IHJlZHVjdGlvbiAqLworICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3NldHVwKG1vZHVsdXMsICZtcCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKChlcnIgPSBtcF9pbml0KCZtdSkpICE9IENSWVBUX09LKSB7CisgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKG11LCBtb2R1bHVzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICAgICBtcF9jbGVhcihtdSk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAKKyAgLyogYWxsb2MgcmFtIGZvciB3aW5kb3cgdGVtcHMgKi8KKyAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgTVtpXSA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICAgICBpZiAoTVtpXSA9PSBOVUxMKSB7CisgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgbHRjX2VjY19kZWxfcG9pbnQoTVtqXSk7CisgICAgICAgICB9CisgICAgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgICAgICAgbXBfY2xlYXIobXUpOworICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICAgIH0KKyAgfQorCisgICAvKiBtYWtlIGEgY29weSBvZiBHIGluY2FzZSBSPT1HICovCisgICB0RyA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAodEcgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBlcnIgPSBDUllQVF9NRU07IGdvdG8gZG9uZTsgfQorCisgICAvKiB0RyA9IEcgIGFuZCBjb252ZXJ0IHRvIG1vbnRnb21lcnkgKi8KKyAgIGlmIChtcF9jbXBfZChtdSwgMSkgPT0gTFRDX01QX0VRKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoRy0+eCwgdEctPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfY29weShHLT55LCB0Ry0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KEctPnosIHRHLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9IGVsc2UgeyAgICAgIAorICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoRy0+eCwgbXUsIG1vZHVsdXMsIHRHLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX211bG1vZChHLT55LCBtdSwgbW9kdWx1cywgdEctPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKEctPnosIG11LCBtb2R1bHVzLCB0Ry0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgbXBfY2xlYXIobXUpOworICAgbXUgPSBOVUxMOworICAgCisgICAvKiBjYWxjIHRoZSBNIHRhYiwgd2hpY2ggaG9sZHMga0cgZm9yIGs9PTguLjE1ICovCisgICAvKiBNWzBdID09IDhHICovCisgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwodEcsIE1bMF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKE1bMF0sIE1bMF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChNWzBdLCBNWzBdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIG5vdyBmaW5kICg4K2spRyBmb3Igaz0xLi43ICovCisgICBmb3IgKGogPSA5OyBqIDwgMTY7IGorKykgeworICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChNW2otOV0sIHRHLCBNW2otOF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogc2V0dXAgc2xpZGluZyB3aW5kb3cgKi8KKyAgIG1vZGUgICA9IDA7CisgICBiaXRjbnQgPSAxOworICAgYnVmICAgID0gMDsKKyAgIGRpZ2lkeCA9IG1wX2dldF9kaWdpdF9jb3VudChrKSAtIDE7CisgICBiaXRjcHkgPSBiaXRidWYgPSAwOworICAgZmlyc3QgID0gMTsKKworICAgLyogcGVyZm9ybSBvcHMgKi8KKyAgIGZvciAoOzspIHsKKyAgICAgLyogZ3JhYiBuZXh0IGRpZ2l0IGFzIHJlcXVpcmVkICovCisgICAgIGlmICgtLWJpdGNudCA9PSAwKSB7CisgICAgICAgaWYgKGRpZ2lkeCA9PSAtMSkgeworICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgICBidWYgICAgPSBtcF9nZXRfZGlnaXQoaywgZGlnaWR4KTsKKyAgICAgICBiaXRjbnQgPSAoaW50KSBsdGNfbXAuYml0c19wZXJfZGlnaXQ7CisgICAgICAgLS1kaWdpZHg7CisgICAgIH0KKworICAgICAvKiBncmFiIHRoZSBuZXh0IG1zYiBmcm9tIHRoZSBsdGlwbGljYW5kICovCisgICAgIGkgPSAoYnVmID4+IChsdGNfbXAuYml0c19wZXJfZGlnaXQgLSAxKSkgJiAxOworICAgICBidWYgPDw9IDE7CisKKyAgICAgLyogc2tpcCBsZWFkaW5nIHplcm8gYml0cyAqLworICAgICBpZiAobW9kZSA9PSAwICYmIGkgPT0gMCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgfQorCisgICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAxIHRoZW4gd2UgZG91YmxlICovCisgICAgIGlmIChtb2RlID09IDEgJiYgaSA9PSAwKSB7CisgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChSLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgY29udGludWU7CisgICAgIH0KKworICAgICAvKiBlbHNlIHdlIGFkZCBpdCB0byB0aGUgd2luZG93ICovCisgICAgIGJpdGJ1ZiB8PSAoaSA8PCAoV0lOU0laRSAtICsrYml0Y3B5KSk7CisgICAgIG1vZGUgPSAyOworCisgICAgIGlmIChiaXRjcHkgPT0gV0lOU0laRSkgeworICAgICAgIC8qIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHdpbmRvdyB3ZSBkbyBhIHNpbXBsZSBjb3B5ICovCisgICAgICAgaWYgKGZpcnN0ID09IDEpIHsKKyAgICAgICAgICAvKiBSID0ga0cgW2sgPSBmaXJzdCB3aW5kb3ddICovCisgICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KE1bYml0YnVmLThdLT54LCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoTVtiaXRidWYtOF0tPnksIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weShNW2JpdGJ1Zi04XS0+eiwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgIH0gZWxzZSB7CisgICAgICAgICAvKiBub3JtYWwgd2luZG93ICovCisgICAgICAgICAvKiBvayB3aW5kb3cgaXMgZmlsbGVkIHNvIGRvdWJsZSBhcyByZXF1aXJlZCBhbmQgYWRkICAqLworICAgICAgICAgLyogZG91YmxlIGZpcnN0ICovCisgICAgICAgICBmb3IgKGogPSAwOyBqIDwgV0lOU0laRTsgaisrKSB7CisgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChSLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgIH0KKworICAgICAgICAgLyogdGhlbiBhZGQsIGJpdGJ1ZiB3aWxsIGJlIDguLjE1IFs4Li4yXldJTlNJWkVdIGd1YXJhbnRlZWQgKi8KKyAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBNW2JpdGJ1Zi04XSwgUiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIH0KKyAgICAgICAvKiBlbXB0eSB3aW5kb3cgYW5kIHJlc2V0ICovCisgICAgICAgYml0Y3B5ID0gYml0YnVmID0gMDsKKyAgICAgICBtb2RlID0gMTsKKyAgICB9CisgIH0KKworICAgLyogaWYgYml0cyByZW1haW4gdGhlbiBkb3VibGUvYWRkICovCisgICBpZiAobW9kZSA9PSAyICYmIGJpdGNweSA+IDApIHsKKyAgICAgLyogZG91YmxlIHRoZW4gYWRkICovCisgICAgIGZvciAoaiA9IDA7IGogPCBiaXRjcHk7IGorKykgeworICAgICAgIC8qIG9ubHkgZG91YmxlIGlmIHdlIGhhdmUgaGFkIGF0IGxlYXN0IG9uZSBhZGQgZmlyc3QgKi8KKyAgICAgICBpZiAoZmlyc3QgPT0gMCkgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChSLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICB9CisKKyAgICAgICBiaXRidWYgPDw9IDE7CisgICAgICAgaWYgKChiaXRidWYgJiAoMSA8PCBXSU5TSVpFKSkgIT0gMCkgeworICAgICAgICAgaWYgKGZpcnN0ID09IDEpeworICAgICAgICAgICAgLyogZmlyc3QgYWRkLCBzbyBjb3B5ICovCisgICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkodEctPngsIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KHRHLT55LCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weSh0Ry0+eiwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogdGhlbiBhZGQgKi8KKyAgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCB0RywgUiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICB9CisgICAgICAgfQorICAgICB9CisgICB9CisKKyAgIC8qIG1hcCBSIGJhY2sgZnJvbSBwcm9qZWN0aXZlIHNwYWNlICovCisgICBpZiAobWFwKSB7CisgICAgICBlcnIgPSBsdGNfZWNjX21hcChSLCBtb2R1bHVzLCBtcCk7CisgICB9IGVsc2UgeworICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICB9Citkb25lOgorICAgaWYgKG11ICE9IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyKG11KTsKKyAgIH0KKyAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICBsdGNfZWNjX2RlbF9wb2ludCh0Ryk7CisgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgbHRjX2VjY19kZWxfcG9pbnQoTVtpXSk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworI3VuZGVmIFdJTlNJWkUKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwNTowNzo1OSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5jIGIvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZF90aW1pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTRhNTBjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZF90aW1pbmcuYwpAQCAtMCwwICsxLDE2NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19tdWxtb2RfdGltaW5nLmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKyNpZmRlZiBMVENfRUNDX1RJTUlOR19SRVNJU1RBTlQKKworLyoqCisgICBQZXJmb3JtIGEgcG9pbnQgbXVsdGlwbGljYXRpb24gICh0aW1pbmcgcmVzaXN0YW50KQorICAgQHBhcmFtIGsgICAgVGhlIHNjYWxhciB0byBtdWx0aXBseSBieQorICAgQHBhcmFtIEcgICAgVGhlIGJhc2UgcG9pbnQKKyAgIEBwYXJhbSBSICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciBrRworICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIG9mIHRoZSBmaWVsZCB0aGUgRUNDIGN1cnZlIGlzIGluCisgICBAcGFyYW0gbWFwICAgICAgQm9vbGVhbiB3aGV0aGVyIHRvIG1hcCBiYWNrIHRvIGFmZmluZSBvciBub3QgKDE9PW1hcCwgMCA9PSBsZWF2ZSBpbiBwcm9qZWN0aXZlKQorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGx0Y19lY2NfbXVsbW9kKHZvaWQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCBpbnQgbWFwKQoreworICAgZWNjX3BvaW50ICp0RywgKk1bM107CisgICBpbnQgICAgICAgIGksIGosIGVycjsKKyAgIHZvaWQgICAgICAgKm11LCAqbXA7CisgICB1bnNpZ25lZCBsb25nIGJ1ZjsKKyAgIGludCAgICAgICAgZmlyc3QsIGJpdGJ1ZiwgYml0Y3B5LCBiaXRjbnQsIG1vZGUsIGRpZ2lkeDsKKworICAgTFRDX0FSR0NISyhrICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhHICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhSICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtb2R1bHVzICE9IE5VTEwpOworCisgICAvKiBpbml0IG1vbnRnb21lcnkgcmVkdWN0aW9uICovCisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAoKGVyciA9IG1wX2luaXQoJm11KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X25vcm1hbGl6YXRpb24obXUsIG1vZHVsdXMpKSAhPSBDUllQVF9PSykgeworICAgICAgbXBfY2xlYXIobXUpOworICAgICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgLyogYWxsb2MgcmFtIGZvciB3aW5kb3cgdGVtcHMgKi8KKyAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgTVtpXSA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICAgICBpZiAoTVtpXSA9PSBOVUxMKSB7CisgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAgICAgICAgICAgbHRjX2VjY19kZWxfcG9pbnQoTVtqXSk7CisgICAgICAgICB9CisgICAgICAgICBtcF9jbGVhcihtdSk7CisgICAgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICAgIH0KKyAgfQorCisgICAvKiBtYWtlIGEgY29weSBvZiBHIGluY2FzZSBSPT1HICovCisgICB0RyA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAodEcgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBlcnIgPSBDUllQVF9NRU07IGdvdG8gZG9uZTsgfQorCisgICAvKiB0RyA9IEcgIGFuZCBjb252ZXJ0IHRvIG1vbnRnb21lcnkgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsbW9kKEctPngsIG11LCBtb2R1bHVzLCB0Ry0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoRy0+eSwgbXUsIG1vZHVsdXMsIHRHLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX211bG1vZChHLT56LCBtdSwgbW9kdWx1cywgdEctPnopKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIG1wX2NsZWFyKG11KTsKKyAgIG11ID0gTlVMTDsKKyAgIAorICAgLyogY2FsYyB0aGUgTSB0YWIgKi8KKyAgIC8qIE1bMF0gPT0gRyAqLworICAgaWYgKChlcnIgPSBtcF9jb3B5KHRHLT54LCBNWzBdLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkodEctPnksIE1bMF0tPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weSh0Ry0+eiwgTVswXS0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogTVsxXSA9PSAyRyAqLworICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKHRHLCBNWzFdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIHNldHVwIHNsaWRpbmcgd2luZG93ICovCisgICBtb2RlICAgPSAwOworICAgYml0Y250ID0gMTsKKyAgIGJ1ZiAgICA9IDA7CisgICBkaWdpZHggPSBtcF9nZXRfZGlnaXRfY291bnQoaykgLSAxOworICAgYml0Y3B5ID0gYml0YnVmID0gMDsKKyAgIGZpcnN0ICA9IDE7CisKKyAgIC8qIHBlcmZvcm0gb3BzICovCisgICBmb3IgKDs7KSB7CisgICAgIC8qIGdyYWIgbmV4dCBkaWdpdCBhcyByZXF1aXJlZCAqLworICAgICAgaWYgKC0tYml0Y250ID09IDApIHsKKyAgICAgICAgIGlmIChkaWdpZHggPT0gLTEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnVmICAgID0gbXBfZ2V0X2RpZ2l0KGssIGRpZ2lkeCk7CisgICAgICAgICBiaXRjbnQgPSAoaW50KSBNUF9ESUdJVF9CSVQ7CisgICAgICAgICAtLWRpZ2lkeDsKKyAgICAgIH0KKworICAgICAgLyogZ3JhYiB0aGUgbmV4dCBtc2IgZnJvbSB0aGUgbHRpcGxpY2FuZCAqLworICAgICAgaSA9IChidWYgPj4gKE1QX0RJR0lUX0JJVCAtIDEpKSAmIDE7CisgICAgICBidWYgPDw9IDE7CisKKyAgICAgIGlmIChtb2RlID09IDAgJiYgaSA9PSAwKSB7CisgICAgICAgICAvKiBkdW1teSBvcGVyYXRpb25zICovCisgICAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQoTVswXSwgTVsxXSwgTVsyXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChNWzFdLCBNWzJdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmIChtb2RlID09IDAgJiYgaSA9PSAxKSB7CisgICAgICAgICBtb2RlID0gMTsKKyAgICAgICAgIC8qIGR1bW15IG9wZXJhdGlvbnMgKi8KKyAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChNWzBdLCBNWzFdLCBNWzJdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKE1bMV0sIE1bMl0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKE1bMF0sIE1bMV0sIE1baV4xXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwoTVtpXSwgTVtpXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogY29weSByZXN1bHQgb3V0ICovCisgICBpZiAoKGVyciA9IG1wX2NvcHkoTVswXS0+eCwgUi0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weShNWzBdLT55LCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KE1bMF0tPnosIFItPnopKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIG1hcCBSIGJhY2sgZnJvbSBwcm9qZWN0aXZlIHNwYWNlICovCisgICBpZiAobWFwKSB7CisgICAgICBlcnIgPSBsdGNfZWNjX21hcChSLCBtb2R1bHVzLCBtcCk7CisgICB9IGVsc2UgeworICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICB9Citkb25lOgorICAgaWYgKG11ICE9IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyKG11KTsKKyAgIH0KKyAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICBsdGNfZWNjX2RlbF9wb2ludCh0Ryk7CisgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgbHRjX2VjY19kZWxfcG9pbnQoTVtpXSk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZF90aW1pbmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMjoxNzo0NiAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvbHRjX2VjY19wb2ludHMuYyBiL3NyYy9way9lY2MvbHRjX2VjY19wb2ludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWYxMzIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2VjYy9sdGNfZWNjX3BvaW50cy5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGx0Y19lY2NfcG9pbnRzLmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICAgQWxsb2NhdGUgYSBuZXcgRUNDIHBvaW50CisgICBAcmV0dXJuIEEgbmV3bHkgYWxsb2NhdGVkIHBvaW50IG9yIE5VTEwgb24gZXJyb3IgCisqLworZWNjX3BvaW50ICpsdGNfZWNjX25ld19wb2ludCh2b2lkKQoreworICAgZWNjX3BvaW50ICpwOworICAgcCA9IFhDQUxMT0MoMSwgc2l6ZW9mKCpwKSk7CisgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKyAgIGlmIChtcF9pbml0X211bHRpKCZwLT54LCAmcC0+eSwgJnAtPnosIE5VTEwpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRShwKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgcmV0dXJuIHA7Cit9CisKKy8qKiBGcmVlIGFuIEVDQyBwb2ludCBmcm9tIG1lbW9yeQorICBAcGFyYW0gcCAgIFRoZSBwb2ludCB0byBmcmVlCisqLwordm9pZCBsdGNfZWNjX2RlbF9wb2ludChlY2NfcG9pbnQgKnApCit7CisgICAvKiBwcmV2ZW50cyBmcmVlJ2luZyBudWxsIGFyZ3VtZW50cyAqLworICAgaWYgKHAgIT0gTlVMTCkgeworICAgICAgbXBfY2xlYXJfbXVsdGkocC0+eCwgcC0+eSwgcC0+eiwgTlVMTCk7IC8qIG5vdGU6IHAtPnogbWF5IGJlIE5VTEwgYnV0IHRoYXQncyBvayB3aXRoIHRoaXMgZnVuY3Rpb24gYW55d2F5cyAqLworICAgICAgWEZSRUUocCk7CisgICB9Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3BvaW50cy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6MTk6NDggJCAqLworCmRpZmYgLS1naXQgYS9zcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQuYyBiL3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTM1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQuYwpAQCAtMCwwICsxLDE5NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWYgZGVmaW5lZChNRUNDKSAmJiAoIWRlZmluZWQoTUVDQ19BQ0NFTCkgfHwgZGVmaW5lZChMVE1fREVTQykpCisKKy8qKgorICAgQWRkIHR3byBFQ0MgcG9pbnRzCisgICBAcGFyYW0gUCAgICAgICAgVGhlIHBvaW50IHRvIGFkZAorICAgQHBhcmFtIFEgICAgICAgIFRoZSBwb2ludCB0byBhZGQKKyAgIEBwYXJhbSBSICAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGRvdWJsZQorICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIG9mIHRoZSBmaWVsZCB0aGUgRUNDIGN1cnZlIGlzIGluCisgICBAcGFyYW0gbXAgICAgICAgVGhlICJiIiB2YWx1ZSBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGx0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlEsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApCit7CisgICB2b2lkICAqdDEsICp0MiwgKngsICp5LCAqejsKKyAgIGludCAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoUCAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoUSAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoUiAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobW9kdWx1cyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobXAgICAgICAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0MSwgJnQyLCAmeCwgJnksICZ6LCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIC8qIHNob3VsZCB3ZSBkYmwgaW5zdGVhZD8gKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKG1vZHVsdXMsIFEtPnksIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICBpZiAoIChtcF9jbXAoUC0+eCwgUS0+eCkgPT0gTFRDX01QX0VRKSAmJiAKKyAgICAgICAgKFEtPnogIT0gTlVMTCAmJiBtcF9jbXAoUC0+eiwgUS0+eikgPT0gTFRDX01QX0VRKSAmJgorICAgICAgICAobXBfY21wKFAtPnksIFEtPnkpID09IExUQ19NUF9FUSB8fCBtcF9jbXAoUC0+eSwgdDEpID09IExUQ19NUF9FUSkpIHsKKyAgICAgICAgbXBfY2xlYXJfbXVsdGkodDEsIHQyLCB4LCB5LCB6LCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIGx0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoUCwgUiwgbW9kdWx1cywgbXApOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX2NvcHkoUC0+eCwgeCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weShQLT55LCB5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KFAtPnosIHopKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIGlmIFogaXMgb25lIHRoZW4gdGhlc2UgYXJlIG5vLW9wZXJhdGlvbnMgKi8KKyAgIGlmIChRLT56ICE9IE5VTEwpIHsKKyAgICAgIC8qIFQxID0gWicgKiBaJyAqLworICAgICAgaWYgKChlcnIgPSBtcF9zcXIoUS0+eiwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQxLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIC8qIFggPSBYICogVDEgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsKHQxLCB4LCB4KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh4LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAvKiBUMSA9IFonICogVDEgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsKFEtPnosIHQxLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAvKiBZID0gWSAqIFQxICovCisgICAgICBpZiAoKGVyciA9IG1wX211bCh0MSwgeSwgeSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoeSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorCisgICAvKiBUMSA9IFoqWiAqLworICAgaWYgKChlcnIgPSBtcF9zcXIoeiwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQxLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFQyID0gWCcgKiBUMSAqLworICAgaWYgKChlcnIgPSBtcF9tdWwoUS0+eCwgdDEsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQyLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFQxID0gWiAqIFQxICovCisgICBpZiAoKGVyciA9IG1wX211bCh6LCB0MSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDEsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogVDEgPSBZJyAqIFQxICovCisgICBpZiAoKGVyciA9IG1wX211bChRLT55LCB0MSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDEsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICAvKiBZID0gWSAtIFQxICovCisgICBpZiAoKGVyciA9IG1wX3N1Yih5LCB0MSwgeSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXBfZCh5LCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHksIG1vZHVsdXMsIHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDEgPSAyVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfYWRkKHQxLCB0MSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcCh0MSwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0MSwgbW9kdWx1cywgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFQxID0gWSArIFQxICovCisgICBpZiAoKGVyciA9IG1wX2FkZCh0MSwgeSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAodDEsIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIodDEsIG1vZHVsdXMsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBYID0gWCAtIFQyICovCisgICBpZiAoKGVyciA9IG1wX3N1Yih4LCB0MiwgeCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXBfZCh4LCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHgsIG1vZHVsdXMsIHgpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDIgPSAyVDIgKi8KKyAgIGlmICgoZXJyID0gbXBfYWRkKHQyLCB0MiwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcCh0MiwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0MiwgbW9kdWx1cywgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFQyID0gWCArIFQyICovCisgICBpZiAoKGVyciA9IG1wX2FkZCh0MiwgeCwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAodDIsIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIodDIsIG1vZHVsdXMsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisKKyAgIC8qIGlmIFonICE9IDEgKi8KKyAgIGlmIChRLT56ICE9IE5VTEwpIHsKKyAgICAgIC8qIFogPSBaICogWicgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsKHosIFEtPnosIHopKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh6LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisKKyAgIC8qIFogPSBaICogWCAqLworICAgaWYgKChlcnIgPSBtcF9tdWwoeiwgeCwgeikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHosIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogVDEgPSBUMSAqIFggICovCisgICBpZiAoKGVyciA9IG1wX211bCh0MSwgeCwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDEsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWCA9IFggKiBYICovCisgICBpZiAoKGVyciA9IG1wX3Nxcih4LCB4KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoeCwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogVDIgPSBUMiAqIHggKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKHQyLCB4LCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBUMSA9IFQxICogWCAgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKHQxLCB4LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgCisgICAvKiBYID0gWSpZICovCisgICBpZiAoKGVyciA9IG1wX3Nxcih5LCB4KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoeCwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWCA9IFggLSBUMiAqLworICAgaWYgKChlcnIgPSBtcF9zdWIoeCwgdDIsIHgpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wX2QoeCwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh4LCBtb2R1bHVzLCB4KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogVDIgPSBUMiAtIFggKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKHQyLCB4LCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKHQyLCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHQyLCBtb2R1bHVzLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfSAKKyAgIC8qIFQyID0gVDIgLSBYICovCisgICBpZiAoKGVyciA9IG1wX3N1Yih0MiwgeCwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXBfZCh0MiwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh0MiwgbW9kdWx1cywgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFQyID0gVDIgKiBZICovCisgICBpZiAoKGVyciA9IG1wX211bCh0MiwgeSwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWSA9IFQyIC0gVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKHQyLCB0MSwgeSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKHksIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoeSwgbW9kdWx1cywgeSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBZID0gWS8yICovCisgICBpZiAobXBfaXNvZGQoeSkpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHksIG1vZHVsdXMsIHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgaWYgKChlcnIgPSBtcF9kaXZfMih5LCB5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIGlmICgoZXJyID0gbXBfY29weSh4LCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KHksIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkoeiwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgZXJyID0gQ1JZUFRfT0s7Citkb25lOgorICAgbXBfY2xlYXJfbXVsdGkodDEsIHQyLCB4LCB5LCB6LCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwNTowNzo1OSAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludC5jIGIvc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiM2UxZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludC5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBsdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50LmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZiBkZWZpbmVkKE1FQ0MpICYmICghZGVmaW5lZChNRUNDX0FDQ0VMKSB8fCBkZWZpbmVkKExUTV9ERVNDKSkKKworLyoqCisgICBEb3VibGUgYW4gRUNDIHBvaW50CisgICBAcGFyYW0gUCAgIFRoZSBwb2ludCB0byBkb3VibGUKKyAgIEBwYXJhbSBSICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkb3VibGUKKyAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBvZiB0aGUgZmllbGQgdGhlIEVDQyBjdXJ2ZSBpcyBpbgorICAgQHBhcmFtIG1wICAgICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBsdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50KGVjY19wb2ludCAqUCwgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCkKK3sKKyAgIHZvaWQgKnQxLCAqdDI7CisgICBpbnQgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoUCAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoUiAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobW9kdWx1cyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobXAgICAgICAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0MSwgJnQyLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmIChQICE9IFIpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfY29weShQLT54LCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KFAtPnksIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoUC0+eiwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogdDEgPSBaICogWiAqLworICAgaWYgKChlcnIgPSBtcF9zcXIoUi0+eiwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQxLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFogPSBZICogWiAqLworICAgaWYgKChlcnIgPSBtcF9tdWwoUi0+eiwgUi0+eSwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFItPnosIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFogPSAyWiAqLworICAgaWYgKChlcnIgPSBtcF9hZGQoUi0+eiwgUi0+eiwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wKFItPnosIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIoUi0+eiwgbW9kdWx1cywgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAKKyAgIC8qIFQyID0gWCAtIFQxICovCisgICBpZiAoKGVyciA9IG1wX3N1YihSLT54LCB0MSwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXBfZCh0MiwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh0MiwgbW9kdWx1cywgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFQxID0gWCArIFQxICovCisgICBpZiAoKGVyciA9IG1wX2FkZCh0MSwgUi0+eCwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAodDEsIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIodDEsIG1vZHVsdXMsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBUMiA9IFQxICogVDIgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKHQxLCB0MiwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBUMSA9IDJUMiAqLworICAgaWYgKChlcnIgPSBtcF9hZGQodDIsIHQyLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wKHQxLCBtb2R1bHVzKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3ViKHQxLCBtb2R1bHVzLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDEgPSBUMSArIFQyICovCisgICBpZiAoKGVyciA9IG1wX2FkZCh0MSwgdDIsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAodDEsIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIodDEsIG1vZHVsdXMsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisKKyAgIC8qIFkgPSAyWSAqLworICAgaWYgKChlcnIgPSBtcF9hZGQoUi0+eSwgUi0+eSwgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wKFItPnksIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIoUi0+eSwgbW9kdWx1cywgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBZID0gWSAqIFkgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKFItPnksIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZShSLT55LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBUMiA9IFkgKiBZICovCisgICBpZiAoKGVyciA9IG1wX3NxcihSLT55LCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogVDIgPSBUMi8yICovCisgICBpZiAobXBfaXNvZGQodDIpKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh0MiwgbW9kdWx1cywgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIGlmICgoZXJyID0gbXBfZGl2XzIodDIsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWSA9IFkgKiBYICovCisgICBpZiAoKGVyciA9IG1wX211bChSLT55LCBSLT54LCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoUi0+eSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICAvKiBYICA9IFQxICogVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKHQxLCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZShSLT54LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBYID0gWCAtIFkgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKFItPngsIFItPnksIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKFItPngsIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoUi0+eCwgbW9kdWx1cywgUi0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBYID0gWCAtIFkgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKFItPngsIFItPnksIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKFItPngsIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoUi0+eCwgbW9kdWx1cywgUi0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisKKyAgIC8qIFkgPSBZIC0gWCAqLyAgICAgCisgICBpZiAoKGVyciA9IG1wX3N1YihSLT55LCBSLT54LCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXBfZChSLT55LCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKFItPnksIG1vZHVsdXMsIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogWSA9IFkgKiBUMSAqLworICAgaWYgKChlcnIgPSBtcF9tdWwoUi0+eSwgdDEsIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFItPnksIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFkgPSBZIC0gVDIgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKFItPnksIHQyLCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKFItPnksIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoUi0+eSwgbW9kdWx1cywgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgCisgICBlcnIgPSBDUllQVF9PSzsKK2RvbmU6CisgICBtcF9jbGVhcl9tdWx0aSh0MSwgdDIsIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwNTowNzo1OSAkICovCisKZGlmZiAtLWdpdCBhL3NyYy9way9rYXRqYS9rYXRqYV9kZWNyeXB0X2tleS5jIGIvc3JjL3BrL2thdGphL2thdGphX2RlY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxMGQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9rYXRqYS9rYXRqYV9kZWNyeXB0X2tleS5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBrYXRqYV9kZWNyeXB0X2tleS5jCisgIEthdGphIFBLQ1MgIzEgT0FFUCBEZWNyeXB0aW9uLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1LQVQKKworLyoqCisgICAoUEtDUyAjMSB2Mi4wKSBkZWNyeXB0IHRoZW4gT0FFUCBkZXBhZCAgCisgICBAcGFyYW0gaW4gICAgICAgICAgVGhlIGNpcGhlcnRleHQKKyAgIEBwYXJhbSBpbmxlbiAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IChvY3RldHMpCisgICBAcGFyYW0gb3V0ICAgICAgICAgW291dF0gVGhlIHBsYWludGV4dAorICAgQHBhcmFtIG91dGxlbiAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHBsYWludGV4dCAob2N0ZXRzKQorICAgQHBhcmFtIGxwYXJhbSAgICAgIFRoZSBzeXN0ZW0gImxwYXJhbSIgdmFsdWUKKyAgIEBwYXJhbSBscGFyYW1sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBscGFyYW0gdmFsdWUgKG9jdGV0cykKKyAgIEBwYXJhbSBoYXNoX2lkeCAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggZGVzaXJlZAorICAgQHBhcmFtIHN0YXQgICAgICAgIFtvdXRdIFJlc3VsdCBvZiB0aGUgZGVjcnlwdGlvbiwgMT09dmFsaWQsIDA9PWludmFsaWQKKyAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBwcml2YXRlIEthdGphIGtleQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjY2Vzc3VsIChldmVuIGlmIGludmFsaWQpCisqLworaW50IGthdGphX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCBpbnQgICAgICAgICAgICpzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRqYV9rZXkgICAgICAgKmtleSkKK3sKKyAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwgbW9kdWx1c19ieXRlbGVuLCB4OworICBpbnQgICAgICAgICAgIGVycjsKKyAgdW5zaWduZWQgY2hhciAqdG1wOworICAKKyAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhzdGF0ICAgIT0gTlVMTCk7CisKKyAgLyogZGVmYXVsdCB0byBpbnZhbGlkICovCisgICpzdGF0ID0gMDsKKworICAvKiB2YWxpZCBoYXNoID8gKi8KKyAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgcmV0dXJuIGVycjsKKyAgfQorICAKKyAgLyogZ2V0IG1vZHVsdXMgbGVuIGluIGJpdHMgKi8KKyAgbW9kdWx1c19iaXRsZW4gPSBtcF9jb3VudF9iaXRzKCAoa2V5LT5OKSk7CisKKyAgLyogcGF5bG9hZCBpcyB1cHRvIHBxLCBzbyB3ZSBrbm93IHEgaXMgMS8zcmQgdGhlIHNpemUgb2YgTiBhbmQgdGhlcmVmb3JlIHBxIGlzIDIvM3RoIHRoZSBzaXplICovCisgbW9kdWx1c19iaXRsZW4gPSAoKG1vZHVsdXNfYml0bGVuIDw8IDEpIC8gMyk7CisKKyAgLyogcm91bmQgZG93biB0byBuZXh0IGJ5dGUgKi8KKyAgbW9kdWx1c19iaXRsZW4gLT0gKG1vZHVsdXNfYml0bGVuICYgNykgKyA4OworCisgIC8qIG91dGxlbiBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBtb2R1bHVzICovCisgIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCAoa2V5LT5OKSk7CisgIGlmIChtb2R1bHVzX2J5dGVsZW4gIT0gaW5sZW4pIHsKKyAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICB9CisKKyAgLyogYWxsb2NhdGUgcmFtICovCisgIHRtcCA9IFhNQUxMT0MoaW5sZW4pOworICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgfQorCisgIC8qIHJzYSBkZWNvZGUgdGhlIHBhY2tldCAqLworICB4ID0gaW5sZW47CisgIGlmICgoZXJyID0ga2F0amFfZXhwdG1vZChpbiwgaW5sZW4sIHRtcCwgJngsIFBLX1BSSVZBVEUsIGtleSkpICE9IENSWVBUX09LKSB7CisgICAgIFhGUkVFKHRtcCk7CisgICAgIHJldHVybiBlcnI7CisgIH0KKworICAvKiBzaGlmdCByaWdodCBieSBtb2R1bHVzX2J5dGVsZW4gLSBtb2R1bHVzX2JpdGxlbi84ICBieXRlcyAqLworICBmb3IgKHggPSAwOyB4IDwgKG1vZHVsdXNfYml0bGVuID4+IDMpOyB4KyspIHsKKyAgICAgdG1wW3hdID0gdG1wW3grKG1vZHVsdXNfYnl0ZWxlbi0obW9kdWx1c19iaXRsZW4+PjMpKV07CisgIH0KKworICAvKiBub3cgT0FFUCBkZWNvZGUgdGhlIHBhY2tldCAqLworICBlcnIgPSBwa2NzXzFfb2FlcF9kZWNvZGUodG1wLCB4LCBscGFyYW0sIGxwYXJhbWxlbiwgbW9kdWx1c19iaXRsZW4sIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBvdXRsZW4sIHN0YXQpOworCisgIFhGUkVFKHRtcCk7CisgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBNUlNBICovCisKKworCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2RlY3J5cHRfa2V5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkuYyBiL3NyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTMzNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkuYwpAQCAtMCwwICsxLDg3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBrYXRqYV9lbmNyeXB0X2tleS5jCisgIEthdGphIFBLQ1Mtc3R5bGUgT0FFUCBlbmNyeXB0aW9uLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1LQVQKKworLyoqCisgICAgKFBLQ1MgIzEgdjIuMCkgT0FFUCBwYWQgdGhlbiBlbmNyeXB0CisgICAgQHBhcmFtIGluICAgICAgICAgIFRoZSBwbGFpbnRleHQKKyAgICBAcGFyYW0gaW5sZW4gICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChvY3RldHMpCisgICAgQHBhcmFtIG91dCAgICAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0CisgICAgQHBhcmFtIG91dGxlbiAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGNpcGhlcnRleHQKKyAgICBAcGFyYW0gbHBhcmFtICAgICAgVGhlIHN5c3RlbSAibHBhcmFtIiBmb3IgdGhlIGVuY3J5cHRpb24KKyAgICBAcGFyYW0gbHBhcmFtbGVuICAgVGhlIGxlbmd0aCBvZiBscGFyYW0gKG9jdGV0cykKKyAgICBAcGFyYW0gcHJuZyAgICAgICAgQW4gYWN0aXZlIFBSTkcKKyAgICBAcGFyYW0gcHJuZ19pZHggICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIHBybmcKKyAgICBAcGFyYW0gaGFzaF9pZHggICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGhhc2gKKyAgICBAcGFyYW0ga2V5ICAgICAgICAgVGhlIEthdGphIGtleSB0byBlbmNyeXB0IHRvCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgICAKK2ludCBrYXRqYV9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgcHJuZ19pZHgsIGludCBoYXNoX2lkeCwga2F0amFfa2V5ICprZXkpCit7CisgIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19iaXRsZW4sIG1vZHVsdXNfYnl0ZWxlbiwgeDsKKyAgaW50ICAgICAgICAgICBlcnI7CisgIAorICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgCisgIC8qIHZhbGlkIHBybmcgYW5kIGhhc2ggPyAqLworICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQocHJuZ19pZHgpKSAhPSBDUllQVF9PSykgeworICAgICByZXR1cm4gZXJyOworICB9CisgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgIHJldHVybiBlcnI7CisgIH0KKyAgCisgIC8qIGdldCBtb2R1bHVzIGxlbiBpbiBiaXRzICovCisgIG1vZHVsdXNfYml0bGVuID0gbXBfY291bnRfYml0cygoa2V5LT5OKSk7CisKKyAgLyogcGF5bG9hZCBpcyB1cHRvIHBxLCBzbyB3ZSBrbm93IHEgaXMgMS8zcmQgdGhlIHNpemUgb2YgTiBhbmQgdGhlcmVmb3JlIHBxIGlzIDIvM3RoIHRoZSBzaXplICovCisgIG1vZHVsdXNfYml0bGVuID0gKChtb2R1bHVzX2JpdGxlbiA8PCAxKSAvIDMpOworCisgIC8qIHJvdW5kIGRvd24gdG8gbmV4dCBieXRlICovCisgIG1vZHVsdXNfYml0bGVuIC09IChtb2R1bHVzX2JpdGxlbiAmIDcpICsgODsKKworICAvKiBvdXRsZW4gbXVzdCBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgbW9kdWx1cyAqLworICBtb2R1bHVzX2J5dGVsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgoa2V5LT5OKSk7CisgIGlmIChtb2R1bHVzX2J5dGVsZW4gPiAqb3V0bGVuKSB7CisgICAgICpvdXRsZW4gPSBtb2R1bHVzX2J5dGVsZW47CisgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgIH0KKworICAvKiBPQUVQIHBhZCB0aGUga2V5ICovCisgIHggPSAqb3V0bGVuOworICBpZiAoKGVyciA9IHBrY3NfMV9vYWVwX2VuY29kZShpbiwgaW5sZW4sIGxwYXJhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwYXJhbWxlbiwgbW9kdWx1c19iaXRsZW4sIHBybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgJngpKSAhPSBDUllQVF9PSykgeworICAgICByZXR1cm4gZXJyOworICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAvKiBLYXRqYSBleHB0bW9kIHRoZSBPQUVQIHBhZCAqLworICByZXR1cm4ga2F0amFfZXhwdG1vZChvdXQsIHgsIG91dCwgb3V0bGVuLCBQS19QVUJMSUMsIGtleSk7Cit9CisKKyNlbmRpZiAvKiBNUlNBICovCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2thdGphL2thdGphX2V4cG9ydC5jIGIvc3JjL3BrL2thdGphL2thdGphX2V4cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNTU2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsva2F0amEva2F0amFfZXhwb3J0LmMKQEAgLTAsMCArMSw3NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUga2F0amFfZXhwb3J0LmMKKyAgRXhwb3J0IEthdGphIFBLQ1Mtc3R5bGUga2V5cywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNS0FUCisKKy8qKgorICAgIFRoaXMgd2lsbCBleHBvcnQgZWl0aGVyIGFuIEthdGphUHVibGljS2V5IG9yIEthdGphUHJpdmF0ZUtleQorICAgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgdGhlIHBhY2tldAorICAgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgcGFja2V0CisgICAgQHBhcmFtIHR5cGUgICAgICBUaGUgdHlwZSBvZiBleHBvcnRlZCBrZXkgKFBLX1BSSVZBVEUgb3IgUEtfUFVCTElDKQorICAgIEBwYXJhbSBrZXkgICAgICAgVGhlIEthdGphIGtleSB0byBleHBvcnQKKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAgIAoraW50IGthdGphX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGUsIGthdGphX2tleSAqa2V5KQoreworICAgaW50ICAgICAgICAgICBlcnI7CisgICB1bnNpZ25lZCBsb25nIHplcm89MDsKKworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworCisgICAvKiB0eXBlIHZhbGlkPyAqLworICAgaWYgKCEoa2V5LT50eXBlID09IFBLX1BSSVZBVEUpICYmICh0eXBlID09IFBLX1BSSVZBVEUpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9UWVBFOworICAgfQorCisgICBpZiAodHlwZSA9PSBQS19QUklWQVRFKSB7CisgICAgICAvKiBwcml2YXRlIGtleSAqLworICAgICAgLyogb3V0cHV0IGlzIAorICAgICAgICAgICAgVmVyc2lvbiwgbiwgZCwgcCwgcSwgZCBtb2QgKHAtMSksIGQgbW9kIChxIC0gMSksIDEvcSBtb2QgcCwgcHEKKyAgICAgICAqLworICAgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKG91dCwgb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwgMVVMLCAmemVybywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+TiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+ZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+cCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+cSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+ZFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+ZFEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPnFQLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5wcSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorIAorICAgICAgLyogY2xlYXIgemVybyBhbmQgcmV0dXJuICovCisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9IGVsc2UgeworICAgICAgLyogcHVibGljIGtleSAqLworICAgICAgcmV0dXJuIGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKTsKKyAgIH0KK30KKworI2VuZGlmIC8qIE1SU0EgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2V4cG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QuYyBiL3NyYy9way9rYXRqYS9rYXRqYV9leHB0bW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjNDdkOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9rYXRqYS9rYXRqYV9leHB0bW9kLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGthdGphX2V4cHRtb2QuYworICBLYXRqYSBQS0NTLXN0eWxlIGV4cHRtb2QsIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUtBVAorCisvKiogCisgICBDb21wdXRlIGFuIFJTQSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uIAorICAgQHBhcmFtIGluICAgICAgICAgVGhlIGlucHV0IGRhdGEgdG8gc2VuZCBpbnRvIFJTQQorICAgQHBhcmFtIGlubGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgKG9jdGV0cykKKyAgIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiAKKyAgIEBwYXJhbSBvdXRsZW4gICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIG91dHB1dAorICAgQHBhcmFtIHdoaWNoICAgICAgV2hpY2ggZXhwb25lbnQgdG8gdXNlLCBlLmcuIFBLX1BSSVZBVEUgb3IgUEtfUFVCTElDCisgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgUlNBIGtleSB0byB1c2UgCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAgCitpbnQga2F0amFfZXhwdG1vZChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgd2hpY2gsCisgICAgICAgICAgICAgICAgICAgICAgICBrYXRqYV9rZXkgKmtleSkKK3sKKyAgIHZvaWQgICAgICAgICAqdG1wLCAqdG1wYSwgKnRtcGI7CisgICB1bnNpZ25lZCBsb25nIHg7CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisgIAorICAgLyogaXMgdGhlIGtleSBvZiB0aGUgcmlnaHQgdHlwZSBmb3IgdGhlIG9wZXJhdGlvbj8gKi8KKyAgIGlmICh3aGljaCA9PSBQS19QUklWQVRFICYmIChrZXktPnR5cGUgIT0gUEtfUFJJVkFURSkpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19OT1RfUFJJVkFURTsKKyAgIH0KKworICAgLyogbXVzdCBiZSBhIHByaXZhdGUgb3IgcHVibGljIG9wZXJhdGlvbiAqLworICAgaWYgKHdoaWNoICE9IFBLX1BSSVZBVEUgJiYgd2hpY2ggIT0gUEtfUFVCTElDKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9UWVBFOworICAgfQorCisgICAvKiBpbml0IGFuZCBjb3B5IGludG8gdG1wICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnRtcCwgJnRtcGEsICZ0bXBiLCBOVUxMKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZXJyOyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKHRtcCwgKHVuc2lnbmVkIGNoYXIgKilpbiwgKGludClpbmxlbikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIHNhbml0eSBjaGVjayBvbiB0aGUgaW5wdXQgKi8KKyAgIGlmIChtcF9jbXAoa2V5LT5OLCB0bXApID09IExUQ19NUF9MVCkgeworICAgICAgZXJyID0gQ1JZUFRfUEtfSU5WQUxJRF9TSVpFOworICAgICAgZ290byBkb25lOworICAgfQorCisgICAvKiBhcmUgd2UgdXNpbmcgdGhlIHByaXZhdGUgZXhwb25lbnQgYW5kIGlzIHRoZSBrZXkgb3B0aW1pemVkPyAqLworICAgaWYgKHdoaWNoID09IFBLX1BSSVZBVEUpIHsKKyAgICAgIC8qIHRtcGEgPSB0bXBeZFAgbW9kIHAgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCh0bXAsIGtleS0+ZFAsIGtleS0+cCwgdG1wYSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgICAgLyogdG1wYiA9IHRtcF5kUSBtb2QgcSAqLworICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKHRtcCwga2V5LT5kUSwga2V5LT5xLCB0bXBiKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAgICAvKiB0bXAgPSAodG1wYSAtIHRtcGIpICogcUludiAobW9kIHApICovCisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0bXBhLCB0bXBiLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX211bG1vZCh0bXAsIGtleS0+cVAsIGtleS0+cCwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgICAgIC8qIHRtcCA9IHRtcGIgKyBxICogdG1wICovCisgICAgICBpZiAoKGVyciA9IG1wX211bCh0bXAsIGtleS0+cSwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh0bXAsIHRtcGIsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9IGVsc2UgeworICAgICAgLyogZXhwdG1vZCBpdCAqLworICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKHRtcCwga2V5LT5OLCBrZXktPk4sIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgfQorCisgICAvKiByZWFkIGl0IGJhY2sgKi8KKyAgIHggPSAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPk4pOworICAgaWYgKHggPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0geDsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gZG9uZTsKKyAgIH0KKworICAgLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIC4uLiAqLworICAgaWYgKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKHRtcCkgPiBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPk4pKSB7CisgICAgICBlcnIgPSBDUllQVF9FUlJPUjsKKyAgICAgIGdvdG8gZG9uZTsKKyAgIH0KKyAgICpvdXRsZW4gPSB4OworCisgICAvKiBjb252ZXJ0IGl0ICovCisgICB6ZXJvbWVtKG91dCwgeCk7CisgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2Jpbih0bXAsIG91dCsoeC1tcF91bnNpZ25lZF9iaW5fc2l6ZSh0bXApKSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiBjbGVhbiB1cCBhbmQgcmV0dXJuICovCisgICBlcnIgPSBDUllQVF9PSzsKKyAgIGdvdG8gZG9uZTsKK2Vycm9yOgorZG9uZToKKyAgIG1wX2NsZWFyX211bHRpKHRtcCwgdG1wYSwgdG1wYiwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9rYXRqYS9rYXRqYV9mcmVlLmMgYi9zcmMvcGsva2F0amEva2F0amFfZnJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZWQzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsva2F0amEva2F0amFfZnJlZS5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGthdGphX2ZyZWUuYworICBGcmVlIGFuIEthdGphIGtleSwgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNS0FUCisKKy8qKgorICBGcmVlIGFuIEthdGphIGtleSBmcm9tIG1lbW9yeQorICBAcGFyYW0ga2V5ICAgVGhlIFJTQSBrZXkgdG8gZnJlZQorKi8KK3ZvaWQga2F0amFfZnJlZShrYXRqYV9rZXkgKmtleSkKK3sKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgbXBfY2xlYXJfbXVsdGkoIGtleS0+ZCwgIGtleS0+TiwgIGtleS0+ZFEsICBrZXktPmRQLAorICAgICAgICAgICAgICAgICAgIGtleS0+cVAsICBrZXktPnAsICBrZXktPnEsIGtleS0+cHEsIE5VTEwpOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2ZyZWUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQuYyBiL3NyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmRiZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGthdGphX2ltcG9ydC5jCisgIEltcG9ydCBhIFBLQ1Mtc3R5bGUgS2F0amEga2V5LCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1LQVQKKworLyoqCisgIEltcG9ydCBhbiBLYXRqYVB1YmxpY0tleSBvciBLYXRqYVByaXZhdGVLZXkgW3R3by1wcmltZSBvbmx5LCBvbmx5IHN1cHBvcnQgPj0gMTAyNC1iaXQga2V5cywgZGVmaW5lZCBpbiBQS0NTICMxIHYyLjFdCisgIEBwYXJhbSBpbiAgICAgIFRoZSBwYWNrZXQgdG8gaW1wb3J0IGZyb20KKyAgQHBhcmFtIGlubGVuICAgSXQncyBsZW5ndGggKG9jdGV0cykKKyAgQHBhcmFtIGtleSAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIG5ld2x5IGltcG9ydGVkIGtleQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZAorKi8KK2ludCBrYXRqYV9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGthdGphX2tleSAqa2V5KQoreworICAgaW50ICAgICAgICAgICBlcnI7CisgICB2b2lkICAgICAgICAgKnplcm87CisKKyAgIExUQ19BUkdDSEsoaW4gICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGx0Y19tcC5uYW1lICE9IE5VTEwpOworCisgICAvKiBpbml0IGtleSAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ6ZXJvLCAma2V5LT5kLCAma2V5LT5OLCAma2V5LT5kUSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleS0+ZFAsICZrZXktPnFQLCAma2V5LT5wLCAma2V5LT5xLCAma2V5LT5wcSwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+TiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgaWYgKG1wX2NtcF9kKGtleS0+TiwgMCkgPT0gTFRDX01QX0VRKSB7CisgICAgICAvKiBpdCdzIGEgcHJpdmF0ZSBrZXkgKi8KKyAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHplcm8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+TiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+cSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5kUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPmRRLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPnFQLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPnBxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CisgICB9IGVsc2UgeworICAgICAgLyogcHVibGljIHdlIGhhdmUgTiAqLworICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOworICAgfQorICAgbXBfY2xlYXIoemVybyk7CisgICByZXR1cm4gQ1JZUFRfT0s7CitMQkxfRVJSOgorICAgbXBfY2xlYXJfbXVsdGkoemVybywgICAga2V5LT5kLCBrZXktPk4sIGtleS0+ZFEsIGtleS0+ZFAsCisgICAgICAgICAgICAgICAgICBrZXktPnFQLCBrZXktPnAsIGtleS0+cSwga2V5LT5wcSwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYgLyogTVJTQSAqLworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9rYXRqYS9rYXRqYV9tYWtlX2tleS5jIGIvc3JjL3BrL2thdGphL2thdGphX21ha2Vfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwMTZjOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9way9rYXRqYS9rYXRqYV9tYWtlX2tleS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBrYXRqYV9tYWtlX2tleS5jCisgIEthdGphIGtleSBnZW5lcmF0aW9uLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1LQVQKKworLyoqIAorICAgQ3JlYXRlIGEgS2F0amEga2V5CisgICBAcGFyYW0gcHJuZyAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgIEBwYXJhbSB3cHJuZyAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgZGVzaXJlZAorICAgQHBhcmFtIHNpemUgICAgIFRoZSBzaXplIG9mIHRoZSBtb2R1bHVzIChrZXkgc2l6ZSkgZGVzaXJlZCAob2N0ZXRzKQorICAgQHBhcmFtIGtleSAgICAgIFtvdXRdIERlc3RpbmF0aW9uIG9mIGEgbmV3bHkgY3JlYXRlZCBwcml2YXRlIGtleSBwYWlyCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsIGFsbG9jYXRlZCByYW0gaXMgZnJlZWQKKyovCitpbnQga2F0amFfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgc2l6ZSwga2F0amFfa2V5ICprZXkpCit7CisgICB2b2lkICpwLCAqcSwgKnRtcDEsICp0bXAyOworICAgaW50ICAgIGVycjsKKyAgCisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CisKKyAgIGlmICgoc2l6ZSA8IChNSU5fS0FUX1NJWkUvOCkpIHx8IChzaXplID4gKE1BWF9LQVRfU0laRS84KSkpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisKKyAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnAsICZxLCAmdG1wMSwgJnRtcDIsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogZGl2aWRlIHNpemUgYnkgdGhyZWUgICovCisgICBzaXplICAgPSAoKChzaXplIDw8IDMpIC8gMykgKyA3KSA+PiAzOworCisgICAvKiBtYWtlIHByaW1lICJxIiAod2UgbmVnYXRlIHNpemUgdG8gbWFrZSBxID09IDMgbW9kIDQpICovCisgICBpZiAoKGVyciA9IHJhbmRfcHJpbWUocSwgLXNpemUsIHBybmcsIHdwcm5nKSkgIT0gQ1JZUFRfT0spICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfc3ViX2QocSwgMSwgdG1wMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICAvKiBtYWtlIHByaW1lICJwIiAqLworICAgZG8geworICAgICAgaWYgKChlcnIgPSByYW5kX3ByaW1lKHAsIHNpemUrMSwgcHJuZywgd3BybmcpKSAhPSBDUllQVF9PSykgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2djZChwLCB0bXAxLCB0bXAyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKHRtcDIsIDEpICE9IExUQ19NUF9FUSk7CisKKyAgIC8qIG1ha2Uga2V5ICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmtleS0+ZCwgJmtleS0+TiwgJmtleS0+ZFEsICZrZXktPmRQLAorICAgICAgICAgICAgICAgICAgICAgJmtleS0+cVAsICZrZXktPnAsICZrZXktPnEsICZrZXktPnBxLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIG49cF4ycSBhbmQgMS9uIG1vZCBwcSAqLworICAgaWYgKChlcnIgPSBtcF9jb3B5KCBwLCAga2V5LT5wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkoIHEsICBrZXktPnEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsKGtleS0+cCwga2V5LT5xLCBrZXktPnBxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiB0bXAxID0gcHEgICovCisgICBpZiAoKGVyciA9IG1wX211bChrZXktPnBxLCBrZXktPnAsIGtleS0+TikpICE9IENSWVBUX09LKSAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyogTiA9IHBeMnEgICAqLyAgCisgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCBwLCAxLCAgdG1wMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyogdG1wMSA9IHEtMSAqLworICAgaWYgKChlcnIgPSBtcF9zdWJfZCggcSwgMSwgIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIHRtcDIgPSBwLTEgKi8KKyAgIGlmICgoZXJyID0gbXBfbGNtKHRtcDEsIHRtcDIsIGtleS0+ZCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiB0bXAxID0gbGNkKHAtMSxxLTEpICovCisgICBpZiAoKGVyciA9IG1wX2ludm1vZCgga2V5LT5OLCAga2V5LT5kLCAga2V5LT5kKSkgIT0gQ1JZUFRfT0spICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyoga2V5LT5kID0gMS9OIG1vZCBwcSAqLworCisgICAvKiBvcHRpbWl6ZSBmb3IgQ1JUIG5vdyAqLworICAgLyogZmluZCBkIG1vZCBxLTEgYW5kIGQgbW9kIHAtMSAqLworICAgaWYgKChlcnIgPSBtcF9tb2QoIGtleS0+ZCwgIHRtcDEsICBrZXktPmRQKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIGRQID0gZCBtb2QgcC0xICovCisgICBpZiAoKGVyciA9IG1wX21vZCgga2V5LT5kLCAgdG1wMiwgIGtleS0+ZFEpKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyogZFEgPSBkIG1vZCBxLTEgKi8KKyAgIGlmICgoZXJyID0gbXBfaW52bW9kKCBxLCAgcCwgIGtleS0+cVApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiBxUCA9IDEvcSBtb2QgcCAqLworCisgICAvKiBzZXQga2V5IHR5cGUgKGluIHRoaXMgY2FzZSBpdCdzIENSVCBvcHRpbWl6ZWQpICovCisgICBrZXktPnR5cGUgPSBQS19QUklWQVRFOworCisgICAvKiByZXR1cm4gb2sgYW5kIGZyZWUgdGVtcHMgKi8KKyAgIGVyciAgICAgICA9IENSWVBUX09LOworICAgZ290byBkb25lOworZXJyb3IyOgorICAgbXBfY2xlYXJfbXVsdGkoIGtleS0+ZCwgIGtleS0+TiwgIGtleS0+ZFEsICBrZXktPmRQLCAga2V5LT5xUCwgIGtleS0+cCwgIGtleS0+cSwga2V5LT5wcSwgTlVMTCk7CitlcnJvcjoKK2RvbmU6CisgICBtcF9jbGVhcl9tdWx0aSggdG1wMiwgIHRtcDEsICBwLCAgcSwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX21ha2Vfa2V5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTAgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BhY2tldF9zdG9yZV9oZWFkZXIuYyBiL3NyYy9way9wYWNrZXRfc3RvcmVfaGVhZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NWNhNzAuLjAwMDAwMDAKLS0tIGEvc3JjL3BrL3BhY2tldF9zdG9yZV9oZWFkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKLSAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZwotICovCi0jaW5jbHVkZSAidG9tY3J5cHQuaCIKLQotI2lmZGVmIFBBQ0tFVAotCi12b2lkIHBhY2tldF9zdG9yZV9oZWFkZXIodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgc2VjdGlvbiwgaW50IHN1YnNlY3Rpb24pCi17Ci0gICBMVENfQVJHQ0hLKGRzdCAhPSBOVUxMKTsKLQotICAgLyogc3RvcmUgdmVyc2lvbiBudW1iZXIgKi8KLSAgIGRzdFswXSA9ICh1bnNpZ25lZCBjaGFyKShDUllQVCYyNTUpOwotICAgZHN0WzFdID0gKHVuc2lnbmVkIGNoYXIpKChDUllQVD4+OCkmMjU1KTsKLQotICAgLyogc3RvcmUgc2VjdGlvbiBhbmQgc3Vic2VjdGlvbiAqLwotICAgZHN0WzJdID0gKHVuc2lnbmVkIGNoYXIpKHNlY3Rpb24gJiAyNTUpOwotICAgZHN0WzNdID0gKHVuc2lnbmVkIGNoYXIpKHN1YnNlY3Rpb24gJiAyNTUpOwotCi19Ci0KLSNlbmRpZgotCi0vKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGFja2V0X3N0b3JlX2hlYWRlci5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BhY2tldF92YWxpZF9oZWFkZXIuYyBiL3NyYy9way9wYWNrZXRfdmFsaWRfaGVhZGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZGIwZjcuLjAwMDAwMDAKLS0tIGEvc3JjL3BrL3BhY2tldF92YWxpZF9oZWFkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKLSAqCi0gKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKLSAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgotICoKLSAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndWFyYW50ZWUgaXQgd29ya3MuCi0gKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZwotICovCi0jaW5jbHVkZSAidG9tY3J5cHQuaCIKLQotI2lmZGVmIFBBQ0tFVAotCi1pbnQgcGFja2V0X3ZhbGlkX2hlYWRlcih1bnNpZ25lZCBjaGFyICpzcmMsIGludCBzZWN0aW9uLCBpbnQgc3Vic2VjdGlvbikKLXsKLSAgIHVuc2lnbmVkIGxvbmcgdmVyOwotCi0gICBMVENfQVJHQ0hLKHNyYyAhPSBOVUxMKTsKLQotICAgLyogY2hlY2sgdmVyc2lvbiAqLwotICAgdmVyID0gKCh1bnNpZ25lZCBsb25nKXNyY1swXSkgfCAoKHVuc2lnbmVkIGxvbmcpc3JjWzFdIDw8IDhVKTsKLSAgIGlmIChDUllQVCA8IHZlcikgewotICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOwotICAgfQotCi0gICAvKiBjaGVjayBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uICovCi0gICBpZiAoc2VjdGlvbiAhPSAoaW50KXNyY1syXSB8fCBzdWJzZWN0aW9uICE9IChpbnQpc3JjWzNdKSB7Ci0gICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7Ci0gICB9Ci0KLSAgIHJldHVybiBDUllQVF9PSzsKLX0KLQotI2VuZGlmCi0KLSAKLQotLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BhY2tldF92YWxpZF9oZWFkZXIuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AuYyBiL3NyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AuYwppbmRleCAzZTY4ZWI4Li40YTM5YmQ1IDEwMDY0NAotLS0gYS9zcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLmMKKysrIGIvc3JjL3BrL3BrY3MxL3BrY3NfMV9pMm9zcC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yOCw5ICsyOCw4IEBACiAgICBAcGFyYW0gb3V0ICAgICAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBpbnRlZ2VyCiAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi1pbnQgcGtjc18xX2kyb3NwKG1wX2ludCAqbiwgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2xlbiwgdW5zaWduZWQgY2hhciAqb3V0KQoraW50IHBrY3NfMV9pMm9zcCh2b2lkICpuLCB1bnNpZ25lZCBsb25nIG1vZHVsdXNfbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCiB7Ci0gICBpbnQgZXJyOwogICAgdW5zaWduZWQgbG9uZyBzaXplOwogCiAgICBzaXplID0gbXBfdW5zaWduZWRfYmluX3NpemUobik7CkBAIC00MSwxNSArNDAsMTIgQEAKIAogICAgLyogc3RvcmUgaXQgKi8KICAgIHplcm9tZW0ob3V0LCBtb2R1bHVzX2xlbik7Ci0gICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2JpbihuLCBvdXQrKG1vZHVsdXNfbGVuLXNpemUpKSkgIT0gTVBfT0tBWSkgewotICAgICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IoZXJyKTsKLSAgIH0KLSAgIHJldHVybiBDUllQVF9PSzsKKyAgIHJldHVybiBtcF90b191bnNpZ25lZF9iaW4obiwgb3V0Kyhtb2R1bHVzX2xlbi1zaXplKSk7CiB9CiAKICNlbmRpZiAvKiBQS0NTXzEgKi8KIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcGtjczEvcGtjc18xX21nZjEuYyBiL3NyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5jCmluZGV4IGFhYzc0OTQuLmJmYzgwYmQgMTAwNjQ0Ci0tLSBhL3NyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5jCisrKyBiL3NyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNiw4ICsyNiw4IEBACiAgICBAcGFyYW0gbWFza2xlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgbWFzayBkZXNpcmVkCiAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKICovCi1pbnQgcGtjc18xX21nZjEoY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWduZWQgbG9uZyBzZWVkbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LAoraW50IHBrY3NfMV9tZ2YxKGludCAgICAgICAgICAgICAgICAgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGxvbmcgc2VlZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptYXNrLCB1bnNpZ25lZCBsb25nIG1hc2tsZW4pCiB7CiAgICB1bnNpZ25lZCBsb25nIGhMZW4sIHg7CkBAIC0xMDQsNSArMTA0LDUgQEAKICNlbmRpZiAvKiBQS0NTXzEgKi8KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9tZ2YxLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLmMgYi9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLmMKaW5kZXggY2Q0OTMxYi4uZTcwYTAxNiAxMDA2NDQKLS0tIGEvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5jCisrKyBiL3NyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9kZWNvZGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICB4ICs9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDE7CiAKICAgIC8qIGNvbXB1dGUgTUdGMSBvZiBtYXNrZWREQiAoaExlbikgKi8gCi0gICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKERCLCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxLCBoYXNoX2lkeCwgbWFzaywgaExlbikpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2hfaWR4LCBEQiwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSwgbWFzaywgaExlbikpICE9IENSWVBUX09LKSB7CiAgICAgICBnb3RvIExCTF9FUlI7CiAgICB9CiAKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgfQogCiAgICAvKiBjb21wdXRlIE1HRjEgb2Ygc2VlZCAoayAtIGhsZW4gLSAxKSAqLwotICAgaWYgKChlcnIgPSBwa2NzXzFfbWdmMShzZWVkLCBoTGVuLCBoYXNoX2lkeCwgbWFzaywgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSkpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2hfaWR4LCBzZWVkLCBoTGVuLCBtYXNrLCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgIGdvdG8gTEJMX0VSUjsKICAgIH0KIApAQCAtMTM2LDcgKzEzNiw3IEBACiAgICB9CiAKICAgIC8qIGNvbXBhcmUgdGhlIGxoYXNoJ2VzICovCi0gICBpZiAobWVtY21wKHNlZWQsIERCLCBoTGVuKSAhPSAwKSB7CisgICBpZiAoWE1FTUNNUChzZWVkLCBEQiwgaExlbikgIT0gMCkgewogICAgICAgZXJyID0gQ1JZUFRfT0s7CiAgICAgICBnb3RvIExCTF9FUlI7CiAgICB9CkBAIC0xNDgsMTggKzE0OCwxOSBAQAogCiAgICAvKiBlcnJvciBvdXQgaWYgd2Fzbid0IDB4MDEgKi8KICAgIGlmICh4ID09IChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSB8fCBEQlt4XSAhPSAweDAxKSB7Ci0gICAgICBlcnIgPSBDUllQVF9PSzsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfQogCiAgICAvKiByZXN0IGlzIHRoZSBtZXNzYWdlIChhbmQgc2tpcCAweDAxKSAqLwotICAgaWYgKChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSAtICsreCA+ICpvdXRsZW4pIHsKKyAgIGlmICgobW9kdWx1c19sZW4gLSBoTGVuIC0gMSAtICsreCkgPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbW9kdWx1c19sZW4gLSBoTGVuIC0gMSAtIHg7CiAgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICAgICBnb3RvIExCTF9FUlI7CiAgICB9CiAKICAgIC8qIGNvcHkgbWVzc2FnZSAqLwotICAgKm91dGxlbiA9IChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSAtIHg7CisgICAqb3V0bGVuID0gbW9kdWx1c19sZW4gLSBoTGVuIC0gMSAtIHg7CiAgICBYTUVNQ1BZKG91dCwgREIgKyB4LCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxIC0geCk7CiAgICB4ICs9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDE7CiAKQEAgLTE4NCw1ICsxODUsNSBAQAogI2VuZGlmIC8qIFBLQ1NfMSAqLwogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xOCAwMjozNzowNiAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5jIGIvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5jCmluZGV4IDEyNjcwYjUuLjk5ZTFhYzYgMTAwNjQ0Ci0tLSBhL3NyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUuYworKysgYi9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZW5jb2RlLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgfQogCiAgICAvKiBjb21wdXRlIE1HRjEgb2Ygc2VlZCAoayAtIGhsZW4gLSAxKSAqLwotICAgaWYgKChlcnIgPSBwa2NzXzFfbWdmMShzZWVkLCBoTGVuLCBoYXNoX2lkeCwgbWFzaywgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSkpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2hfaWR4LCBzZWVkLCBoTGVuLCBtYXNrLCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgIGdvdG8gTEJMX0VSUjsKICAgIH0KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAgICB9CiAKICAgIC8qIGNvbXB1dGUgTUdGMSBvZiBtYXNrZWREQiAoaExlbikgKi8gCi0gICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKERCLCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxLCBoYXNoX2lkeCwgbWFzaywgaExlbikpICE9IENSWVBUX09LKSB7CisgICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2hfaWR4LCBEQiwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSwgbWFzaywgaExlbikpICE9IENSWVBUX09LKSB7CiAgICAgICBnb3RvIExCTF9FUlI7CiAgICB9CiAKQEAgLTEzNSw2ICsxMzUsNyBAQAogCiAgICAvKiBjcmVhdGUgc3RyaW5nIG9mIGxlbmd0aCBtb2R1bHVzX2xlbiAqLwogICAgaWYgKCpvdXRsZW4gPCBtb2R1bHVzX2xlbikgeworICAgICAgKm91dGxlbiA9IG1vZHVsdXNfbGVuOwogICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfQpAQCAtMTY4LDUgKzE2OSw1IEBACiAKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5jIGIvc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5jCmluZGV4IGE5YTE4NTguLjU2M2FlOGQgMTAwNjQ0Ci0tLSBhL3NyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAuYworKysgYi9zcmMvcGsvcGtjczEvcGtjc18xX29zMmlwLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTIzLDE5ICsyMywxNCBAQAogICBAcGFyYW0gaW5sZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBiaW5hcnkgc3RyaW5nCiAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KLWludCBwa2NzXzFfb3MyaXAobXBfaW50ICpuLCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK2ludCBwa2NzXzFfb3MyaXAodm9pZCAqbiwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pCiB7Ci0gICBpbnQgZXJyOwotICAgLyogcmVhZCBpdCAqLwotICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbihuLCBpbiwgaW5sZW4pKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotICAgfQotICAgcmV0dXJuIENSWVBUX09LOworICAgcmV0dXJuIG1wX3JlYWRfdW5zaWduZWRfYmluKG4sIGluLCBpbmxlbik7CiB9CiAKICNlbmRpZiAvKiBQS0NTXzEgKi8KIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX29zMmlwLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19kZWNvZGUuYyBiL3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5jCmluZGV4IGU2MWMzM2YuLjJjMTZkNTAgMTAwNjQ0Ci0tLSBhL3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5jCisrKyBiL3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC04Miw3ICs4Miw3IEBACiAKICAgIC8qIGVuc3VyZSB0aGUgMHhCQyBieXRlICovCiAgICBpZiAoc2lnW3NpZ2xlbi0xXSAhPSAweEJDKSB7Ci0gICAgICBlcnIgPSBDUllQVF9PSzsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfQogCkBAIC05NywxMiArOTcsMTIgQEAKIAogICAgLyogY2hlY2sgdGhlIE1TQiAqLwogICAgaWYgKChzaWdbMF0gJiB+KDB4RkYgPj4gKChtb2R1bHVzX2xlbjw8MykgLSAobW9kdWx1c19iaXRsZW4tMSkpKSkgIT0gMCkgewotICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKICAgICAgIGdvdG8gTEJMX0VSUjsKICAgIH0KIAogICAgLyogZ2VuZXJhdGUgbWFzayBvZiBsZW5ndGggbW9kdWx1c19sZW4gLSBoTGVuIC0gMSBmcm9tIGhhc2ggKi8KLSAgIGlmICgoZXJyID0gcGtjc18xX21nZjEoaGFzaCwgaExlbiwgaGFzaF9pZHgsIG1hc2ssIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEpKSAhPSBDUllQVF9PSykgeworICAgaWYgKChlcnIgPSBwa2NzXzFfbWdmMShoYXNoX2lkeCwgaGFzaCwgaExlbiwgbWFzaywgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSkpICE9IENSWVBUX09LKSB7CiAgICAgICBnb3RvIExCTF9FUlI7CiAgICB9CiAKQEAgLTExOSwxNCArMTE5LDE0IEBACiAgICAvKiBjaGVjayBmb3IgemVyb2VzIGFuZCAweDAxICovCiAgICBmb3IgKHggPSAwOyB4IDwgbW9kdWx1c19sZW4gLSBzYWx0bGVuIC0gaExlbiAtIDI7IHgrKykgewogICAgICAgIGlmIChEQlt4XSAhPSAweDAwKSB7Ci0gICAgICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CiAgICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgIH0KICAgIH0KIAogICAgLyogY2hlY2sgZm9yIHRoZSAweDAxICovCiAgICBpZiAoREJbeCsrXSAhPSAweDAxKSB7Ci0gICAgICBlcnIgPSBDUllQVF9PSzsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgIH0KIAogICAgLyogbWFzayA9PSBoYXNoIG1lYW5zIHZhbGlkIHNpZ25hdHVyZSAqLwotICAgaWYgKG1lbWNtcChtYXNrLCBoYXNoLCBoTGVuKSA9PSAwKSB7CisgICBpZiAoWE1FTUNNUChtYXNrLCBoYXNoLCBoTGVuKSA9PSAwKSB7CiAgICAgICAqcmVzID0gMTsKICAgIH0KIApAQCAtMTczLDUgKzE3Myw1IEBACiAjZW5kaWYgLyogUEtDU18xICovCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2RlY29kZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMzAgMDI6Mzc6MjEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLmMgYi9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUuYwppbmRleCA4OTk2MDVjLi42NGJkMzEyIDEwMDY0NAotLS0gYS9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUuYworKysgYi9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICB4ICs9IHNhbHRsZW47CiAKICAgIC8qIGdlbmVyYXRlIG1hc2sgb2YgbGVuZ3RoIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEgZnJvbSBoYXNoICovCi0gICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2gsIGhMZW4sIGhhc2hfaWR4LCBtYXNrLCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSkgIT0gQ1JZUFRfT0spIHsKKyAgIGlmICgoZXJyID0gcGtjc18xX21nZjEoaGFzaF9pZHgsIGhhc2gsIGhMZW4sIG1hc2ssIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEpKSAhPSBDUllQVF9PSykgewogICAgICAgZ290byBMQkxfRVJSOwogICAgfQogCkBAIC0xMjksNiArMTI5LDcgQEAKIAogICAgLyogb3V0cHV0IGlzIERCIHx8IGhhc2ggfHwgMHhCQyAqLwogICAgaWYgKCpvdXRsZW4gPCBtb2R1bHVzX2xlbikgeworICAgICAgKm91dGxlbiA9IG1vZHVsdXNfbGVuOwogICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfQpAQCAtMTcwLDUgKzE3MSw1IEBACiAjZW5kaWYgLyogUEtDU18xICovCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2VuY29kZS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjQgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5jIGIvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTdjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZGVjb2RlLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIEBmaWxlIHBrY3NfMV92MV81X2RlY29kZS5jCisgKgorICogIFBLQ1MgIzEgdjEuNSBQYWRkaW5nLiAoQW5kcmVhcyBMYW5nZSkKKyAqLworCisjaWZkZWYgUEtDU18xCisKKy8qKiBAYnJpZWYgUEtDUyAjMSB2MS41IGRlY29kZS4KKyAqCisgKiAgQHBhcmFtIG1zZyAgICAgICAgICAgICAgVGhlIGVuY29kZWQgZGF0YSB0byBkZWNvZGUKKyAqICBAcGFyYW0gbXNnbGVuICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIGRhdGEgKG9jdGV0cykKKyAqICBAcGFyYW0gYmxvY2tfdHlwZSAgICAgICBCbG9jayB0eXBlIHRvIHVzZSBpbiBwYWRkaW5nIChcc2EgbHRjX3BrY3NfMV92MV81X2Jsb2NrcykKKyAqICBAcGFyYW0gbW9kdWx1c19iaXRsZW4gICBUaGUgYml0IGxlbmd0aCBvZiB0aGUgUlNBIG1vZHVsdXMKKyAqICBAcGFyYW0gb3V0ICAgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBkZWNvZGluZworICogIEBwYXJhbSBvdXRsZW4gICAgICAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGRlY29kaW5nCisgKiAgQHBhcmFtIGlzX3ZhbGlkICAgICAgICAgW291dF0gQm9vbGVhbiB3aGV0aGVyIHRoZSBwYWRkaW5nIHdhcyB2YWxpZAorICoKKyAqICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwgKGV2ZW4gaWYgaW52YWxpZCkKKyAqLworaW50IHBrY3NfMV92MV81X2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGJsb2NrX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmlzX3ZhbGlkKQoreworICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfbGVuLCBwc19sZW4sIGk7CisgIGludCByZXN1bHQ7CisKKyAgLyogZGVmYXVsdCB0byBpbnZhbGlkIHBhY2tldCAqLworICAqaXNfdmFsaWQgPSAwOworCisgIG1vZHVsdXNfbGVuID0gKG1vZHVsdXNfYml0bGVuID4+IDMpICsgKG1vZHVsdXNfYml0bGVuICYgNyA/IDEgOiAwKTsKKworICAvKiB0ZXN0IG1lc3NhZ2Ugc2l6ZSAqLworCisgIGlmICgobXNnbGVuID4gbW9kdWx1c19sZW4pIHx8IChtb2R1bHVzX2xlbiA8IDExKSkgeworICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1NJWkU7CisgIH0KKworICAvKiBzZXBhcmF0ZSBlbmNvZGVkIG1lc3NhZ2UgKi8KKworICBpZiAoKG1zZ1swXSAhPSAweDAwKSB8fCAobXNnWzFdICE9ICh1bnNpZ25lZCBjaGFyKWJsb2NrX3R5cGUpKSB7CisgICAgcmVzdWx0ID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgZ290byBiYWlsOworICB9CisKKyAgaWYgKGJsb2NrX3R5cGUgPT0gTFRDX1BLQ1NfMV9FTUUpIHsKKyAgICBmb3IgKGkgPSAyOyBpIDwgbW9kdWx1c19sZW47IGkrKykgeworICAgICAgLyogc2VwYXJhdG9yICovCisgICAgICBpZiAobXNnW2ldID09IDB4MDApIHsgYnJlYWs7IH0KKyAgICB9CisgICAgcHNfbGVuID0gaSsrIC0gMjsKKworICAgIGlmICgoaSA+PSBtb2R1bHVzX2xlbikgfHwgKHBzX2xlbiA8IDgpKSB7CisgICAgICAvKiBUaGVyZSB3YXMgbm8gb2N0ZXQgd2l0aCBoZXhhZGVjaW1hbCB2YWx1ZSAweDAwIHRvIHNlcGFyYXRlIHBzIGZyb20gbSwKKyAgICAgICAqIG9yIHRoZSBsZW5ndGggb2YgcHMgaXMgbGVzcyB0aGFuIDggb2N0ZXRzLgorICAgICAgICovCisgICAgICByZXN1bHQgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yIChpID0gMjsgaSA8IG1vZHVsdXNfbGVuIC0gMTsgaSsrKSB7CisgICAgICAgaWYgKG1zZ1tpXSAhPSAweEZGKSB7IGJyZWFrOyB9CisgICAgfQorCisgICAgLyogc2VwYXJhdG9yIGNoZWNrICovCisgICAgaWYgKG1zZ1tpXSAhPSAwKSB7CisgICAgICAvKiBUaGVyZSB3YXMgbm8gb2N0ZXQgd2l0aCBoZXhhZGVjaW1hbCB2YWx1ZSAweDAwIHRvIHNlcGFyYXRlIHBzIGZyb20gbS4gKi8KKyAgICAgIHJlc3VsdCA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHBzX2xlbiA9IGkgLSAyOworICB9CisKKyAgaWYgKCpvdXRsZW4gPCAobXNnbGVuIC0gKDIgKyBwc19sZW4gKyAxKSkpIHsKKyAgICAqb3V0bGVuID0gbXNnbGVuIC0gKDIgKyBwc19sZW4gKyAxKTsKKyAgICByZXN1bHQgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgZ290byBiYWlsOworICB9CisKKyAgKm91dGxlbiA9IChtc2dsZW4gLSAoMiArIHBzX2xlbiArIDEpKTsKKyAgWE1FTUNQWShvdXQsICZtc2dbMiArIHBzX2xlbiArIDFdLCAqb3V0bGVuKTsKKworICAvKiB2YWxpZCBwYWNrZXQgKi8KKyAgKmlzX3ZhbGlkID0gMTsKKyAgcmVzdWx0ICAgID0gQ1JZUFRfT0s7CitiYWlsOgorICByZXR1cm4gcmVzdWx0OworfSAvKiBwa2NzXzFfdjFfNV9kZWNvZGUgKi8KKworI2VuZGlmIC8qICNpZmRlZiBQS0NTXzEgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMTYgMTc6NDE6MjEgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2VuY29kZS5jIGIvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2VuY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZGQxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZW5jb2RlLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyohIFxmaWxlIHBrY3NfMV92MV81X2VuY29kZS5jCisgKgorICogIFBLQ1MgIzEgdjEuNSBQYWRkaW5nIChBbmRyZWFzIExhbmdlKQorICovCisKKyNpZmRlZiBQS0NTXzEKKworLyohIFxicmllZiBQS0NTICMxIHYxLjUgZW5jb2RlLgorICoKKyAqICBccGFyYW0gbXNnICAgICAgICAgICAgICBUaGUgZGF0YSB0byBlbmNvZGUKKyAqICBccGFyYW0gbXNnbGVuICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGVuY29kZSAob2N0ZXRzKQorICogIFxwYXJhbSBibG9ja190eXBlICAgICAgIEJsb2NrIHR5cGUgdG8gdXNlIGluIHBhZGRpbmcgKFxzYSBsdGNfcGtjc18xX3YxXzVfYmxvY2tzKQorICogIFxwYXJhbSBtb2R1bHVzX2JpdGxlbiAgIFRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBSU0EgbW9kdWx1cworICogIFxwYXJhbSBwcm5nICAgICAgICAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlIChvbmx5IGZvciBMVENfUEtDU18xX0VNRSkKKyAqICBccGFyYW0gcHJuZ19pZHggICAgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgZGVzaXJlZCAob25seSBmb3IgTFRDX1BLQ1NfMV9FTUUpCisgKiAgXHBhcmFtIG91dCAgICAgICAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgZW5jb2RlZCBkYXRhCisgKiAgXHBhcmFtIG91dGxlbiAgICAgICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZW5jb2RlZCBkYXRhCisgKgorICogIFxyZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgcGtjc18xX3YxXzVfZW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgYmxvY2tfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfbGVuLCBwc19sZW4sIGk7CisgIHVuc2lnbmVkIGNoYXIgKnBzOworICBpbnQgcmVzdWx0OworCisgIC8qIHZhbGlkIGJsb2NrX3R5cGU/ICovCisgIGlmICgoYmxvY2tfdHlwZSAhPSBMVENfUEtDU18xX0VNU0EpICYmCisgICAgICAoYmxvY2tfdHlwZSAhPSBMVENfUEtDU18xX0VNRSkpIHsKKyAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfUEFERElORzsKKyAgfQorCisgIGlmIChibG9ja190eXBlID09IExUQ19QS0NTXzFfRU1FKSB7ICAgIC8qIGVuY3J5cHRpb24gcGFkZGluZywgd2UgbmVlZCBhIHZhbGlkIFBSTkcgKi8KKyAgICBpZiAoKHJlc3VsdCA9IHBybmdfaXNfdmFsaWQocHJuZ19pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgbW9kdWx1c19sZW4gPSAobW9kdWx1c19iaXRsZW4gPj4gMykgKyAobW9kdWx1c19iaXRsZW4gJiA3ID8gMSA6IDApOworCisgIC8qIHRlc3QgbWVzc2FnZSBzaXplICovCisgIGlmICgobXNnbGVuICsgMTEpID4gbW9kdWx1c19sZW4pIHsKKyAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9TSVpFOworICB9CisKKyAgaWYgKCpvdXRsZW4gPCBtb2R1bHVzX2xlbikgeworICAgICpvdXRsZW4gPSBtb2R1bHVzX2xlbjsKKyAgICByZXN1bHQgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgZ290byBiYWlsOworICB9CisKKyAgLyogZ2VuZXJhdGUgYW4gb2N0ZXRzIHN0cmluZyBQUyAqLworICBwcyA9ICZvdXRbMl07CisgIHBzX2xlbiA9IG1vZHVsdXNfbGVuIC0gbXNnbGVuIC0gMzsKKworICBpZiAoYmxvY2tfdHlwZSA9PSBMVENfUEtDU18xX0VNRSkgeworICAgIC8qIG5vdyBjaG9vc2UgYSByYW5kb20gcHMgKi8KKyAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3BybmdfaWR4XS5yZWFkKHBzLCBwc19sZW4sIHBybmcpICE9IHBzX2xlbikgeworICAgICAgcmVzdWx0ID0gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLyogdHJhbnNmb3JtIHplcm8gYnl0ZXMgKGlmIGFueSkgdG8gbm9uLXplcm8gcmFuZG9tIGJ5dGVzICovCisgICAgZm9yIChpID0gMDsgaSA8IHBzX2xlbjsgaSsrKSB7CisgICAgICB3aGlsZSAocHNbaV0gPT0gMCkgeworICAgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3BybmdfaWR4XS5yZWFkKCZwc1tpXSwgMSwgcHJuZykgIT0gMSkgeworICAgICAgICAgIHJlc3VsdCA9IENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBYTUVNU0VUKHBzLCAweEZGLCBwc19sZW4pOworICB9CisKKyAgLyogY3JlYXRlIHN0cmluZyBvZiBsZW5ndGggbW9kdWx1c19sZW4gKi8KKyAgb3V0WzBdICAgICAgICAgID0gMHgwMDsKKyAgb3V0WzFdICAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIpYmxvY2tfdHlwZTsgIC8qIGJsb2NrX3R5cGUgMSBvciAyICovCisgIG91dFsyICsgcHNfbGVuXSA9IDB4MDA7CisgIFhNRU1DUFkoJm91dFsyICsgcHNfbGVuICsgMV0sIG1zZywgbXNnbGVuKTsKKyAgKm91dGxlbiA9IG1vZHVsdXNfbGVuOworCisgIHJlc3VsdCAgPSBDUllQVF9PSzsKK2JhaWw6CisgIHJldHVybiByZXN1bHQ7Cit9IC8qIHBrY3NfMV92MV81X2VuY29kZSAqLworCisjZW5kaWYgLyogI2lmZGVmIFBLQ1NfMSAqLworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZW5jb2RlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToxMjowNiAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5jIGIvc3JjL3BrL3JzYS9yc2FfZGVjcnlwdF9rZXkuYwppbmRleCA3Y2VhODA3Li4zZGNlMjBmIDEwMDY0NAotLS0gYS9zcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5jCisrKyBiL3NyYy9way9yc2EvcnNhX2RlY3J5cHRfa2V5LmMKQEAgLTYsMTkgKzYsMTkgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIAogLyoqCiAgIEBmaWxlIHJzYV9kZWNyeXB0X2tleS5jCi0gIFJTQSBQS0NTICMxIE9BRVAgRGVjcnlwdGlvbiwgVG9tIFN0IERlbmlzCi0qLyAgCisgIFJTQSBQS0NTICMxIERlY3J5cHRpb24sIFRvbSBTdCBEZW5pcyBhbmQgQW5kcmVhcyBMYW5nZQorKi8KIAogI2lmZGVmIE1SU0EKIAogLyoqCi0gICAoUEtDUyAjMSB2Mi4wKSBkZWNyeXB0IHRoZW4gT0FFUCBkZXBhZCAgCisgICBQS0NTICMxIGRlY3J5cHQgdGhlbiB2MS41IG9yIE9BRVAgZGVwYWQKICAgIEBwYXJhbSBpbiAgICAgICAgICBUaGUgY2lwaGVydGV4dAogICAgQHBhcmFtIGlubGVuICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKG9jdGV0cykKICAgIEBwYXJhbSBvdXQgICAgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CkBAIC0yNiwyMCArMjYsMjEgQEAKICAgIEBwYXJhbSBscGFyYW0gICAgICBUaGUgc3lzdGVtICJscGFyYW0iIHZhbHVlCiAgICBAcGFyYW0gbHBhcmFtbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgbHBhcmFtIHZhbHVlIChvY3RldHMpCiAgICBAcGFyYW0gaGFzaF9pZHggICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIGRlc2lyZWQKKyAgIEBwYXJhbSBwYWRkaW5nICAgICBUeXBlIG9mIHBhZGRpbmcgKExUQ19QS0NTXzFfT0FFUCBvciBMVENfUEtDU18xX1YxXzUpCiAgICBAcGFyYW0gc3RhdCAgICAgICAgW291dF0gUmVzdWx0IG9mIHRoZSBkZWNyeXB0aW9uLCAxPT12YWxpZCwgMD09aW52YWxpZAogICAgQHBhcmFtIGtleSAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHByaXZhdGUgUlNBIGtleQogICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjY2Vzc3VsIChldmVuIGlmIGludmFsaWQpCiAqLwotaW50IHJzYV9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sICAgdW5zaWduZWQgbG9uZyAgbHBhcmFtbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgaW50ICAgICAgICAgICAqc3RhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAgICAgICAqa2V5KQoraW50IHJzYV9kZWNyeXB0X2tleV9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCBpbnQgICAgICAgICAgICBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0LCAgICAgcnNhX2tleSAgICAgICAqa2V5KQogewogICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBtb2R1bHVzX2J5dGVsZW4sIHg7CiAgIGludCAgICAgICAgICAgZXJyOwogICB1bnNpZ25lZCBjaGFyICp0bXA7Ci0gIAorCiAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOwogICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CkBAIC00OCwxNiArNDksMjUgQEAKICAgLyogZGVmYXVsdCB0byBpbnZhbGlkICovCiAgICpzdGF0ID0gMDsKIAotICAvKiB2YWxpZCBoYXNoID8gKi8KLSAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgcmV0dXJuIGVycjsKKyAgLyogdmFsaWQgcGFkZGluZz8gKi8KKworICBpZiAoKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9WMV81KSAmJgorICAgICAgKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9PQUVQKSkgeworICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1BBRERJTkc7CiAgIH0KLSAgCisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9PQUVQKSB7CisgICAgLyogdmFsaWQgaGFzaCA/ICovCisgICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgfQorCiAgIC8qIGdldCBtb2R1bHVzIGxlbiBpbiBiaXRzICovCi0gIG1vZHVsdXNfYml0bGVuID0gbXBfY291bnRfYml0cygmKGtleS0+TikpOworICBtb2R1bHVzX2JpdGxlbiA9IG1wX2NvdW50X2JpdHMoIChrZXktPk4pKTsKIAogICAvKiBvdXRsZW4gbXVzdCBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgbW9kdWx1cyAqLwotICBtb2R1bHVzX2J5dGVsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgmKGtleS0+TikpOworICBtb2R1bHVzX2J5dGVsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSggKGtleS0+TikpOwogICBpZiAobW9kdWx1c19ieXRlbGVuICE9IGlubGVuKSB7CiAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKICAgfQpAQCAtNzAsMjQgKzgwLDI2IEBACiAKICAgLyogcnNhIGRlY29kZSB0aGUgcGFja2V0ICovCiAgIHggPSBpbmxlbjsKLSAgaWYgKChlcnIgPSByc2FfZXhwdG1vZChpbiwgaW5sZW4sIHRtcCwgJngsIFBLX1BSSVZBVEUsIGtleSkpICE9IENSWVBUX09LKSB7CisgIGlmICgoZXJyID0gbHRjX21wLnJzYV9tZShpbiwgaW5sZW4sIHRtcCwgJngsIFBLX1BSSVZBVEUsIGtleSkpICE9IENSWVBUX09LKSB7CiAgICAgIFhGUkVFKHRtcCk7CiAgICAgIHJldHVybiBlcnI7CiAgIH0KIAotICAvKiBub3cgT0FFUCBkZWNvZGUgdGhlIHBhY2tldCAqLwotICBlcnIgPSBwa2NzXzFfb2FlcF9kZWNvZGUodG1wLCB4LCBscGFyYW0sIGxwYXJhbWxlbiwgbW9kdWx1c19iaXRsZW4sIGhhc2hfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBvdXRsZW4sIHN0YXQpOworICBpZiAocGFkZGluZyA9PSBMVENfUEtDU18xX09BRVApIHsKKyAgICAvKiBub3cgT0FFUCBkZWNvZGUgdGhlIHBhY2tldCAqLworICAgIGVyciA9IHBrY3NfMV9vYWVwX2RlY29kZSh0bXAsIHgsIGxwYXJhbSwgbHBhcmFtbGVuLCBtb2R1bHVzX2JpdGxlbiwgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgb3V0bGVuLCBzdGF0KTsKKyAgfSBlbHNlIHsKKyAgICAvKiBub3cgUEtDUyAjMSB2MS41IGRlcGFkIHRoZSBwYWNrZXQgKi8KKyAgICBlcnIgPSBwa2NzXzFfdjFfNV9kZWNvZGUodG1wLCB4LCBMVENfUEtDU18xX0VNRSwgbW9kdWx1c19iaXRsZW4sIG91dCwgb3V0bGVuLCBzdGF0KTsKKyAgfQorCiAgIFhGUkVFKHRtcCk7CiAgIHJldHVybiBlcnI7CiB9CiAKICNlbmRpZiAvKiBNUlNBICovCiAKLQotCi0KLQogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZGVjcnlwdF9rZXkuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjE4OjIyICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5LmMgYi9zcmMvcGsvcnNhL3JzYV9lbmNyeXB0X2tleS5jCmluZGV4IGQyOWFhODMuLjhkMmMyMjggMTAwNjQ0Ci0tLSBhL3NyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5LmMKKysrIGIvc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkuYwpAQCAtNiwxNCArNiwxNCBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCiAvKioKICAgQGZpbGUgcnNhX2VuY3J5cHRfa2V5LmMKLSAgUlNBIFBLQ1MgT0FFUCBlbmNyeXB0aW9uLCBUb20gU3QgRGVuaXMKLSovICAKKyAgUlNBIFBLQ1MgIzEgZW5jcnlwdGlvbiwgVG9tIFN0IERlbmlzIGFuZCBBbmRyZWFzIExhbmdlCisqLwogCiAjaWZkZWYgTVJTQQogCkBAIC0yOCw1MyArMjgsNzUgQEAKICAgICBAcGFyYW0gcHJuZyAgICAgICAgQW4gYWN0aXZlIFBSTkcKICAgICBAcGFyYW0gcHJuZ19pZHggICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIHBybmcKICAgICBAcGFyYW0gaGFzaF9pZHggICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGhhc2gKKyAgICBAcGFyYW0gcGFkZGluZyAgICAgVHlwZSBvZiBwYWRkaW5nIChMVENfUEtDU18xX09BRVAgb3IgTFRDX1BLQ1NfMV9WMV81KQogICAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgUlNBIGtleSB0byBlbmNyeXB0IHRvCiAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCi0qLyAgICAKLWludCByc2FfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICB1bnNpZ25lZCBsb25nIGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCB1bnNpZ25lZCBsb25nIGxwYXJhbWxlbiwKLSAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHBybmdfaWR4LCBpbnQgaGFzaF9pZHgsIHJzYV9rZXkgKmtleSkKKyovCitpbnQgcnNhX2VuY3J5cHRfa2V5X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgdW5zaWduZWQgbG9uZyBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCBwcm5nX2lkeCwgaW50IGhhc2hfaWR4LCBpbnQgcGFkZGluZywgcnNhX2tleSAqa2V5KQogewogICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBtb2R1bHVzX2J5dGVsZW4sIHg7CiAgIGludCAgICAgICAgICAgZXJyOwotICAKKwogICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CiAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOwogICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKLSAgCi0gIC8qIHZhbGlkIHBybmcgYW5kIGhhc2ggPyAqLworCisgIC8qIHZhbGlkIHBhZGRpbmc/ICovCisgIGlmICgocGFkZGluZyAhPSBMVENfUEtDU18xX1YxXzUpICYmCisgICAgICAocGFkZGluZyAhPSBMVENfUEtDU18xX09BRVApKSB7CisgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfUEFERElORzsKKyAgfQorCisgIC8qIHZhbGlkIHBybmc/ICovCiAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZChwcm5nX2lkeCkpICE9IENSWVBUX09LKSB7CiAgICAgIHJldHVybiBlcnI7CiAgIH0KLSAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgcmV0dXJuIGVycjsKKworICBpZiAocGFkZGluZyA9PSBMVENfUEtDU18xX09BRVApIHsKKyAgICAvKiB2YWxpZCBoYXNoPyAqLworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CiAgIH0KLSAgCisKICAgLyogZ2V0IG1vZHVsdXMgbGVuIGluIGJpdHMgKi8KLSAgbW9kdWx1c19iaXRsZW4gPSBtcF9jb3VudF9iaXRzKCYoa2V5LT5OKSk7CisgIG1vZHVsdXNfYml0bGVuID0gbXBfY291bnRfYml0cyggKGtleS0+TikpOwogCiAgIC8qIG91dGxlbiBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBtb2R1bHVzICovCi0gIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCYoa2V5LT5OKSk7CisgIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCAoa2V5LT5OKSk7CiAgIGlmIChtb2R1bHVzX2J5dGVsZW4gPiAqb3V0bGVuKSB7CisgICAgICpvdXRsZW4gPSBtb2R1bHVzX2J5dGVsZW47CiAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgIH0KLSAgICAgIAotICAvKiBPQUVQIHBhZCB0aGUga2V5ICovCi0gIHggPSAqb3V0bGVuOwotICBpZiAoKGVyciA9IHBrY3NfMV9vYWVwX2VuY29kZShpbiwgaW5sZW4sIGxwYXJhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwYXJhbWxlbiwgbW9kdWx1c19iaXRsZW4sIHBybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgJngpKSAhPSBDUllQVF9PSykgewotICAgICByZXR1cm4gZXJyOwotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotICAvKiByc2EgZXhwdG1vZCB0aGUgT0FFUCBwYWQgKi8KLSAgcmV0dXJuIHJzYV9leHB0bW9kKG91dCwgeCwgb3V0LCBvdXRsZW4sIFBLX1BVQkxJQywga2V5KTsKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9PQUVQKSB7CisgICAgLyogT0FFUCBwYWQgdGhlIGtleSAqLworICAgIHggPSAqb3V0bGVuOworICAgIGlmICgoZXJyID0gcGtjc18xX29hZXBfZW5jb2RlKGluLCBpbmxlbiwgbHBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwYXJhbWxlbiwgbW9kdWx1c19iaXRsZW4sIHBybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiBQS0NTICMxIHYxLjUgcGFkIHRoZSBrZXkgKi8KKyAgICB4ID0gKm91dGxlbjsKKyAgICBpZiAoKGVyciA9IHBrY3NfMV92MV81X2VuY29kZShpbiwgaW5sZW4sIExUQ19QS0NTXzFfRU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsdXNfYml0bGVuLCBwcm5nLCBwcm5nX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICB9CisKKyAgLyogcnNhIGV4cHRtb2QgdGhlIE9BRVAgb3IgUEtDUyAjMSB2MS41IHBhZCAqLworICByZXR1cm4gbHRjX21wLnJzYV9tZShvdXQsIHgsIG91dCwgb3V0bGVuLCBQS19QVUJMSUMsIGtleSk7CiB9CiAKICNlbmRpZiAvKiBNUlNBICovCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToxODoyMiAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcnNhL3JzYV9leHBvcnQuYyBiL3NyYy9way9yc2EvcnNhX2V4cG9ydC5jCmluZGV4IGYyZTMyNGQuLjViMzg5ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9way9yc2EvcnNhX2V4cG9ydC5jCisrKyBiL3NyYy9way9yc2EvcnNhX2V4cG9ydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNyw5ICsyNyw3IEBACiAqLyAgICAKIGludCByc2FfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwgcnNhX2tleSAqa2V5KQogewotICAgaW50ICAgICAgICAgICBlcnI7CiAgICB1bnNpZ25lZCBsb25nIHplcm89MDsKLQogICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOwpAQCAtNDQsMjcgKzQyLDIyIEBACiAgICAgICAvKiBvdXRwdXQgaXMgCiAgICAgICAgICAgICBWZXJzaW9uLCBuLCBlLCBkLCBwLCBxLCBkIG1vZCAocC0xKSwgZCBtb2QgKHEgLSAxKSwgMS9xIG1vZCBwCiAgICAgICAgKi8KLSAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwgCisgICAgICByZXR1cm4gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsIDFVTCwgJnplcm8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPk4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+ZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+cCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+cSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+ZFAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+ZFEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPnFQLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICB9Ci0gCi0gICAgICAvKiBjbGVhciB6ZXJvIGFuZCByZXR1cm4gKi8KLSAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPnEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPmRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPmRRLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5xUCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCk7CiAgICB9IGVsc2UgewogICAgICAgLyogcHVibGljIGtleSAqLwogICAgICAgcmV0dXJuIGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAma2V5LT5OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5lLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCk7CiAgICB9CiB9CkBAIC03Miw1ICs2NSw1IEBACiAjZW5kaWYgLyogTVJTQSAqLwogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9leHBvcnQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xMSAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8wNCAwMTo0Mjo0OCAkICovCisvKiAkUmV2aXNpb246IDEuMTUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5jIGIvc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5jCmluZGV4IDM3OTQwNGMuLjUzZGJmNmIgMTAwNjQ0Ci0tLSBhL3NyYy9way9yc2EvcnNhX2V4cHRtb2QuYworKysgYi9zcmMvcGsvcnNhL3JzYV9leHB0bW9kLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB3aGljaCwKICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpCiB7Ci0gICBtcF9pbnQgICAgICAgIHRtcCwgdG1wYSwgdG1wYjsKKyAgIHZvaWQgICAgICAgICAqdG1wLCAqdG1wYSwgKnRtcGI7CiAgICB1bnNpZ25lZCBsb25nIHg7CiAgICBpbnQgICAgICAgICAgIGVycjsKIApAQCAtMzksNyArMzksNyBAQAogICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOwotICAgCisgIAogICAgLyogaXMgdGhlIGtleSBvZiB0aGUgcmlnaHQgdHlwZSBmb3IgdGhlIG9wZXJhdGlvbj8gKi8KICAgIGlmICh3aGljaCA9PSBQS19QUklWQVRFICYmIChrZXktPnR5cGUgIT0gUEtfUFJJVkFURSkpIHsKICAgICAgIHJldHVybiBDUllQVF9QS19OT1RfUFJJVkFURTsKQEAgLTUxLDY1ICs1MSw2MyBAQAogICAgfQogCiAgICAvKiBpbml0IGFuZCBjb3B5IGludG8gdG1wICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnRtcCwgJnRtcGEsICZ0bXBiLCBOVUxMKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKGVycik7IH0KLSAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oJnRtcCwgKHVuc2lnbmVkIGNoYXIgKilpbiwgKGludClpbmxlbikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0bXAsICZ0bXBhLCAmdG1wYiwgTlVMTCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGVycjsgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2Jpbih0bXAsICh1bnNpZ25lZCBjaGFyICopaW4sIChpbnQpaW5sZW4pKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiBzYW5pdHkgY2hlY2sgb24gdGhlIGlucHV0ICovCi0gICBpZiAobXBfY21wKCZrZXktPk4sICZ0bXApID09IE1QX0xUKSB7CisgICBpZiAobXBfY21wKGtleS0+TiwgdG1wKSA9PSBMVENfTVBfTFQpIHsKICAgICAgIGVyciA9IENSWVBUX1BLX0lOVkFMSURfU0laRTsKLSAgICAgIGdvdG8gZG9uZTsKKyAgICAgIGdvdG8gZXJyb3I7CiAgICB9CiAKICAgIC8qIGFyZSB3ZSB1c2luZyB0aGUgcHJpdmF0ZSBleHBvbmVudCBhbmQgaXMgdGhlIGtleSBvcHRpbWl6ZWQ/ICovCiAgICBpZiAod2hpY2ggPT0gUEtfUFJJVkFURSkgewogICAgICAgLyogdG1wYSA9IHRtcF5kUCBtb2QgcCAqLwotICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZ0bXAsICZrZXktPmRQLCAma2V5LT5wLCAmdG1wYSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKHRtcCwga2V5LT5kUCwga2V5LT5wLCB0bXBhKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAgICAvKiB0bXBiID0gdG1wXmRRIG1vZCBxICovCi0gICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QoJnRtcCwgJmtleS0+ZFEsICZrZXktPnEsICZ0bXBiKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QodG1wLCBrZXktPmRRLCBrZXktPnEsIHRtcGIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CiAKICAgICAgIC8qIHRtcCA9ICh0bXBhIC0gdG1wYikgKiBxSW52IChtb2QgcCkgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZ0bXBhLCAmdG1wYiwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoJnRtcCwgJmtleS0+cVAsICZrZXktPnAsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0bXBhLCB0bXBiLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX211bG1vZCh0bXAsIGtleS0+cVAsIGtleS0+cCwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KIAogICAgICAgLyogdG1wID0gdG1wYiArIHEgKiB0bXAgKi8KLSAgICAgIGlmICgoZXJyID0gbXBfbXVsKCZ0bXAsICZrZXktPnEsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQotICAgICAgaWYgKChlcnIgPSBtcF9hZGQoJnRtcCwgJnRtcGIsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX211bCh0bXAsIGtleS0+cSwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh0bXAsIHRtcGIsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CiAgICB9IGVsc2UgewogICAgICAgLyogZXhwdG1vZCBpdCAqLwotICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKCZ0bXAsICZrZXktPmUsICZrZXktPk4sICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QodG1wLCBrZXktPmUsIGtleS0+TiwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KICAgIH0KIAogICAgLyogcmVhZCBpdCBiYWNrICovCi0gICB4ID0gKHVuc2lnbmVkIGxvbmcpbXBfdW5zaWduZWRfYmluX3NpemUoJmtleS0+Tik7CisgICB4ID0gKHVuc2lnbmVkIGxvbmcpbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5OKTsKICAgIGlmICh4ID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IHg7CiAgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7Ci0gICAgICBnb3RvIGRvbmU7CisgICAgICBnb3RvIGVycm9yOwogICAgfQogCiAgICAvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gLi4uICovCi0gICBpZiAobXBfdW5zaWduZWRfYmluX3NpemUoJnRtcCkgPiBtcF91bnNpZ25lZF9iaW5fc2l6ZSgma2V5LT5OKSkgeworICAgaWYgKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKHRtcCkgPiBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPk4pKSB7CiAgICAgICBlcnIgPSBDUllQVF9FUlJPUjsKLSAgICAgIGdvdG8gZG9uZTsKKyAgICAgIGdvdG8gZXJyb3I7CiAgICB9CiAgICAqb3V0bGVuID0geDsKIAogICAgLyogY29udmVydCBpdCAqLwogICAgemVyb21lbShvdXQsIHgpOwotICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4oJnRtcCwgb3V0Kyh4LW1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZ0bXApKSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2Jpbih0bXAsIG91dCsoeC1tcF91bnNpZ25lZF9iaW5fc2l6ZSh0bXApKSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQogCiAgICAvKiBjbGVhbiB1cCBhbmQgcmV0dXJuICovCiAgICBlcnIgPSBDUllQVF9PSzsKLSAgIGdvdG8gZG9uZTsKIGVycm9yOgotICAgZXJyID0gbXBpX3RvX2x0Y19lcnJvcihlcnIpOwotZG9uZToKLSAgIG1wX2NsZWFyX211bHRpKCZ0bXAsICZ0bXBhLCAmdG1wYiwgTlVMTCk7CisgICBtcF9jbGVhcl9tdWx0aSh0bXAsIHRtcGEsIHRtcGIsIE5VTEwpOwogICAgcmV0dXJuIGVycjsKIH0KIAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2V4cHRtb2QuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS40ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzIzIDAyOjEwOjIyICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzowOToyOCAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcnNhL3JzYV9mcmVlLmMgYi9zcmMvcGsvcnNhL3JzYV9mcmVlLmMKaW5kZXggNjllZWFlYy4uZjQ4OTc2YSAxMDA2NDQKLS0tIGEvc3JjL3BrL3JzYS9yc2FfZnJlZS5jCisrKyBiL3NyYy9way9yc2EvcnNhX2ZyZWUuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjMsMTMgKzIzLDEyIEBACiAqLwogdm9pZCByc2FfZnJlZShyc2Ffa2V5ICprZXkpCiB7Ci0gICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKLSAgIG1wX2NsZWFyX211bHRpKCZrZXktPmUsICZrZXktPmQsICZrZXktPk4sICZrZXktPmRRLCAma2V5LT5kUCwKLSAgICAgICAgICAgICAgICAgICZrZXktPnFQLCAma2V5LT5wLCAma2V5LT5xLCBOVUxMKTsKKyAgIExUQ19BUkdDSEtWRChrZXkgIT0gTlVMTCk7CisgICBtcF9jbGVhcl9tdWx0aShrZXktPmUsIGtleS0+ZCwga2V5LT5OLCBrZXktPmRRLCBrZXktPmRQLCBrZXktPnFQLCBrZXktPnAsIGtleS0+cSwgTlVMTCk7CiB9CiAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9mcmVlLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMjoyMzoyNyAkICovCmRpZmYgLS1naXQgYS9zcmMvcGsvcnNhL3JzYV9pbXBvcnQuYyBiL3NyYy9way9yc2EvcnNhX2ltcG9ydC5jCmluZGV4IDU3MDYxMzQuLjdiMTJmZDkgMTAwNjQ0Ci0tLSBhL3NyYy9way9yc2EvcnNhX2ltcG9ydC5jCisrKyBiL3NyYy9way9yc2EvcnNhX2ltcG9ydC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yNyw2MCArMjcsMTExIEBACiBpbnQgcnNhX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcnNhX2tleSAqa2V5KQogewogICAgaW50ICAgICAgICAgICBlcnI7Ci0gICBtcF9pbnQgICAgICAgIHplcm87CisgICB2b2lkICAgICAgICAgKnplcm87CisgICB1bnNpZ25lZCBjaGFyICp0bXBidWY7CisgICB1bnNpZ25lZCBsb25nICB0LCB4LCB5LCB6LCB0bXBvaWRbMTZdOworICAgbHRjX2FzbjFfbGlzdCBzc2xfcHVia2V5X2hhc2hvaWRbMl07CisgICBsdGNfYXNuMV9saXN0IHNzbF9wdWJrZXlbMl07CiAKLSAgIExUQ19BUkdDSEsoaW4gICE9IE5VTEwpOwotICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGluICAgICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CiAKICAgIC8qIGluaXQga2V5ICovCi0gICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnplcm8sICZrZXktPmUsICZrZXktPmQsICZrZXktPk4sICZrZXktPmRRLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LT5kUCwgJmtleS0+cVAsICZrZXktPnAsICZrZXktPnEsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZrZXktPmUsICZrZXktPmQsICZrZXktPk4sICZrZXktPmRRLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LT5kUCwgJmtleS0+cVAsICZrZXktPnAsICZrZXktPnEsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKICAgIH0KIAorICAgLyogc2VlIGlmIHRoZSBPcGVuU1NMIERFUiBmb3JtYXQgUlNBIHB1YmxpYyBrZXkgd2lsbCB3b3JrICovCisgICB0bXBidWYgPSBYQ0FMTE9DKDEsIE1BWF9SU0FfU0laRSo4KTsKKyAgIGlmICh0bXBidWYgPT0gTlVMTCkgeworICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIHRoaXMgaW5jbHVkZXMgdGhlIGludGVybmFsIGhhc2ggSUQgYW5kIG9wdGlvbmFsIHBhcmFtcyAoTlVMTCBpbiB0aGlzIGNhc2UpICovCisgICBMVENfU0VUX0FTTjEoc3NsX3B1YmtleV9oYXNob2lkLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgdG1wb2lkLCAgICAgICAgICAgICAgICBzaXplb2YodG1wb2lkKS9zaXplb2YodG1wb2lkWzBdKSk7ICAgCisgICBMVENfU0VUX0FTTjEoc3NsX3B1YmtleV9oYXNob2lkLCAxLCBMVENfQVNOMV9OVUxMLCAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAwKTsKKworICAgLyogdGhlIGFjdHVhbCBmb3JtYXQgb2YgdGhlIFNTTCBERVIga2V5IGlzIG9kZCwgaXQgc3RvcmVzIGEgUlNBUHVibGljS2V5IGluIGEgKipCSVQqKiBzdHJpbmcgLi4uIHNvIHdlIGhhdmUgdG8gZXh0cmFjdCBpdAorICAgICAgdGhlbiBwcm9jZWVkIHRvIGNvbnZlcnQgYml0IHRvIG9jdGV0IAorICAgICovCisgICBMVENfU0VUX0FTTjEoc3NsX3B1YmtleSwgMCwgICAgICAgICBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICAgJnNzbF9wdWJrZXlfaGFzaG9pZCwgICAyKTsKKyAgIExUQ19TRVRfQVNOMShzc2xfcHVia2V5LCAxLCAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgICAgICB0bXBidWYsICAgICAgICAgICAgICAgIE1BWF9SU0FfU0laRSo4KTsKKworICAgaWYgKGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3B1YmtleSwgMlVMKSA9PSBDUllQVF9PSykgeworCisgICAgICAvKiBvayBub3cgd2UgaGF2ZSB0byByZWFzc2VtYmxlIHRoZSBCSVQgU1RSSU5HIHRvIGFuIE9DVEVUIFNUUklORy4gIFRoYW5rcyBPcGVuU1NMLi4uICovCisgICAgICBmb3IgKHQgPSB5ID0geiA9IHggPSAwOyB4IDwgc3NsX3B1YmtleVsxXS5zaXplOyB4KyspIHsKKyAgICAgICAgICB5ID0gKHkgPDwgMSkgfCB0bXBidWZbeF07CisgICAgICAgICAgaWYgKCsreiA9PSA4KSB7CisgICAgICAgICAgICAgdG1wYnVmW3QrK10gPSAodW5zaWduZWQgY2hhcil5OworICAgICAgICAgICAgIHkgICAgICAgICAgID0gMDsKKyAgICAgICAgICAgICB6ICAgICAgICAgICA9IDA7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBub3cgaXQgc2hvdWxkIGJlIFNFUVVFTkNFIHsgSU5URUdFUiwgSU5URUdFUiB9ICovCisgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkodG1wYnVmLCB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIFhGUkVFKHRtcGJ1Zik7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgICBYRlJFRSh0bXBidWYpOworICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOworICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfQorICAgWEZSRUUodG1wYnVmKTsKKworICAgLyogbm90IFNTTCBwdWJsaWMga2V5LCB0cnkgdG8gbWF0Y2ggYWdhaW5zdCBQS0NTICMxIHN0YW5kYXJkcyAqLwogICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGluLCBpbmxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAma2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+TiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKICAgICAgIGdvdG8gTEJMX0VSUjsKICAgIH0KIAotICAgaWYgKG1wX2NtcF9kKCZrZXktPk4sIDApID09IE1QX0VRKSB7Ci0gICAgICAvKiBpdCdzIGEgcHJpdmF0ZSBrZXkgKi8KLSAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZ6ZXJvLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAma2V5LT5OLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAma2V5LT5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPmQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPnAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPnEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPmRQLAotICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICZrZXktPmRRLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAma2V5LT5xUCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICBpZiAobXBfY21wX2Qoa2V5LT5OLCAwKSA9PSBMVENfTVBfRVEpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmemVybykpICE9IENSWVBUX09LKSB7IAogICAgICAgICAgZ290byBMQkxfRVJSOwogICAgICAgfQorICAgICAgLyogaXQncyBhIHByaXZhdGUga2V5ICovCisgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCB6ZXJvLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+cCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPmRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZFEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+cVAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgbXBfY2xlYXIoemVybyk7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgICBtcF9jbGVhcih6ZXJvKTsKICAgICAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7Ci0gICB9IGVsc2UgaWYgKG1wX2NtcF9kKCZrZXktPk4sIDEpID09IE1QX0VRKSB7CisgICB9IGVsc2UgaWYgKG1wX2NtcF9kKGtleS0+TiwgMSkgPT0gTFRDX01QX0VRKSB7CiAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IG11bHRpLXByaW1lIFJTQSAqLwogICAgICAgZXJyID0gQ1JZUFRfUEtfSU5WQUxJRF9UWVBFOwogICAgICAgZ290byBMQkxfRVJSOwogICAgfSBlbHNlIHsKICAgICAgIC8qIGl0J3MgYSBwdWJsaWMga2V5IGFuZCB3ZSBsYWNrIGUgKi8KICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgJmtleS0+TiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAma2V5LT5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+TiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPmUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CiAgICAgICAgICBnb3RvIExCTF9FUlI7CiAgICAgICB9Ci0KLSAgICAgIC8qIGZyZWUgdXAgc29tZSByYW0gKi8KLSAgICAgIG1wX2NsZWFyX211bHRpKCZrZXktPnAsICZrZXktPnEsICZrZXktPnFQLCAma2V5LT5kUCwgJmtleS0+ZFEsIE5VTEwpOwogICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOwogICAgfQogICAgcmV0dXJuIENSWVBUX09LOwogTEJMX0VSUjoKLSAgIG1wX2NsZWFyX211bHRpKCZ6ZXJvLCAma2V5LT5kLCAma2V5LT5lLCAma2V5LT5OLCAma2V5LT5kUSwgJmtleS0+ZFAsCi0gICAgICAgICAgICAgICAgICAma2V5LT5xUCwgJmtleS0+cCwgJmtleS0+cSwgTlVMTCk7CisgICBtcF9jbGVhcl9tdWx0aShrZXktPmQsICBrZXktPmUsIGtleS0+Tiwga2V5LT5kUSwga2V5LT5kUCwga2V5LT5xUCwga2V5LT5wLCBrZXktPnEsIE5VTEwpOwogICAgcmV0dXJuIGVycjsKIH0KIApAQCAtODgsNSArMTM5LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9pbXBvcnQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xMCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8wMyAxODo0ODoyOCAkICovCisvKiAkUmV2aXNpb246IDEuMjEgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjI6MjM6MjcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3JzYS9yc2FfbWFrZV9rZXkuYyBiL3NyYy9way9yc2EvcnNhX21ha2Vfa2V5LmMKaW5kZXggZDg3NDEwNi4uYmQyYTI5YiAxMDA2NDQKLS0tIGEvc3JjL3BrL3JzYS9yc2FfbWFrZV9rZXkuYworKysgYi9zcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0yOCwxMCArMjgsMTEgQEAKICovCiBpbnQgcnNhX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IHNpemUsIGxvbmcgZSwgcnNhX2tleSAqa2V5KQogewotICAgbXBfaW50IHAsIHEsIHRtcDEsIHRtcDIsIHRtcDM7CisgICB2b2lkICpwLCAqcSwgKnRtcDEsICp0bXAyLCAqdG1wMzsKICAgIGludCAgICBlcnI7CiAKLSAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsdGNfbXAubmFtZSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICAgICAgIT0gTlVMTCk7CiAKICAgIGlmICgoc2l6ZSA8IChNSU5fUlNBX1NJWkUvOCkpIHx8IChzaXplID4gKE1BWF9SU0FfU0laRS84KSkpIHsKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CkBAIC00NSw4MSArNDYsNjcgQEAKICAgICAgIHJldHVybiBlcnI7CiAgICB9CiAKLSAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmcCwgJnEsICZ0bXAxLCAmdG1wMiwgJnRtcDMsIE5VTEwpKSAhPSBNUF9PS0FZKSB7Ci0gICAgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihlcnIpOworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZwLCAmcSwgJnRtcDEsICZ0bXAyLCAmdG1wMywgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOwogICAgfQogCiAgICAvKiBtYWtlIHByaW1lcyBwIGFuZCBxIChvcHRpbWl6YXRpb24gcHJvdmlkZWQgYnkgV2F5bmUgU2NvdHQpICovCi0gICBpZiAoKGVyciA9IG1wX3NldF9pbnQoJnRtcDMsIGUpKSAhPSBNUF9PS0FZKSB7IGdvdG8gZXJyb3I7IH0gICAgICAgICAgICAvKiB0bXAzID0gZSAqLworICAgaWYgKChlcnIgPSBtcF9zZXRfaW50KHRtcDMsIGUpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAgLyogdG1wMyA9IGUgKi8KIAogICAgLyogbWFrZSBwcmltZSAicCIgKi8KICAgIGRvIHsKLSAgICAgICBpZiAoKGVyciA9IHJhbmRfcHJpbWUoJnAsIHNpemUqNCwgcHJuZywgd3BybmcpKSAhPSBDUllQVF9PSykgeyBnb3RvIGRvbmU7IH0KLSAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCZwLCAxLCAmdG1wMSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9ICAvKiB0bXAxID0gcC0xICovCi0gICAgICAgaWYgKChlcnIgPSBtcF9nY2QoJnRtcDEsICZ0bXAzLCAmdG1wMikpICE9IE1QX09LQVkpICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAgLyogdG1wMiA9IGdjZChwLTEsIGUpICovCi0gICB9IHdoaWxlIChtcF9jbXBfZCgmdG1wMiwgMSkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpbGUgZSBkaXZpZGVzIHAtMSAqLworICAgICAgIGlmICgoZXJyID0gcmFuZF9wcmltZSggcCwgc2l6ZS8yLCBwcm5nLCB3cHJuZykpICE9IENSWVBUX09LKSAgeyBnb3RvIGVycmtleTsgfQorICAgICAgIGlmICgoZXJyID0gbXBfc3ViX2QoIHAsIDEsICB0bXAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAgLyogdG1wMSA9IHAtMSAqLworICAgICAgIGlmICgoZXJyID0gbXBfZ2NkKCB0bXAxLCAgdG1wMywgIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAgLyogdG1wMiA9IGdjZChwLTEsIGUpICovCisgICB9IHdoaWxlIChtcF9jbXBfZCggdG1wMiwgMSkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBlIGRpdmlkZXMgcC0xICovCiAKICAgIC8qIG1ha2UgcHJpbWUgInEiICovCiAgICBkbyB7Ci0gICAgICAgaWYgKChlcnIgPSByYW5kX3ByaW1lKCZxLCBzaXplKjQsIHBybmcsIHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsgZ290byBkb25lOyB9Ci0gICAgICAgaWYgKChlcnIgPSBtcF9zdWJfZCgmcSwgMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiB0bXAxID0gcS0xICovCi0gICAgICAgaWYgKChlcnIgPSBtcF9nY2QoJnRtcDEsICZ0bXAzLCAmdG1wMikpICE9IE1QX09LQVkpICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiB0bXAyID0gZ2NkKHEtMSwgZSkgKi8KLSAgIH0gd2hpbGUgKG1wX2NtcF9kKCZ0bXAyLCAxKSAhPSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaWxlIGUgZGl2aWRlcyBxLTEgKi8KKyAgICAgICBpZiAoKGVyciA9IHJhbmRfcHJpbWUoIHEsIHNpemUvMiwgcHJuZywgd3BybmcpKSAhPSBDUllQVF9PSykgIHsgZ290byBlcnJrZXk7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCBxLCAxLCAgdG1wMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyogdG1wMSA9IHEtMSAqLworICAgICAgIGlmICgoZXJyID0gbXBfZ2NkKCB0bXAxLCAgdG1wMywgIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiB0bXAyID0gZ2NkKHEtMSwgZSkgKi8KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKCB0bXAyLCAxKSAhPSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpbGUgZSBkaXZpZGVzIHEtMSAqLwogCiAgICAvKiB0bXAxID0gbGNtKHAtMSwgcS0xKSAqLwotICAgaWYgKChlcnIgPSBtcF9zdWJfZCgmcCwgMSwgJnRtcDIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiB0bXAyID0gcC0xICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG1wMSA9IHEtMSAocHJldmlvdXMgZG8vd2hpbGUgbG9vcCkgKi8KLSAgIGlmICgoZXJyID0gbXBfbGNtKCZ0bXAxLCAmdG1wMiwgJnRtcDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogdG1wMSA9IGxjbShwLTEsIHEtMSkgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViX2QoIHAsIDEsICB0bXAyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyogdG1wMiA9IHAtMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0bXAxID0gcS0xIChwcmV2aW91cyBkby93aGlsZSBsb29wKSAqLworICAgaWYgKChlcnIgPSBtcF9sY20oIHRtcDEsICB0bXAyLCAgdG1wMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiB0bXAxID0gbGNtKHAtMSwgcS0xKSAqLwogCiAgICAvKiBtYWtlIGtleSAqLwotICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZrZXktPmUsICZrZXktPmQsICZrZXktPk4sICZrZXktPmRRLCAma2V5LT5kUCwKLSAgICAgICAgICAgICAgICAgICAgICZrZXktPnFQLCAma2V5LT5wLCAma2V5LT5xLCBOVUxMKSkgIT0gTVBfT0tBWSkgewotICAgICAgZ290byBlcnJvcjsKKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgma2V5LT5lLCAma2V5LT5kLCAma2V5LT5OLCAma2V5LT5kUSwgJmtleS0+ZFAsICZrZXktPnFQLCAma2V5LT5wLCAma2V5LT5xLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJya2V5OwogICAgfQogCi0gICBpZiAoKGVyciA9IG1wX3NldF9pbnQoJmtleS0+ZSwgZSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiBrZXktPmUgPSAgZSAqLwotICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoJmtleS0+ZSwgJnRtcDEsICZrZXktPmQpKSAhPSBNUF9PS0FZKSAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyoga2V5LT5kID0gMS9lIG1vZCBsY20ocC0xLHEtMSkgKi8KLSAgIGlmICgoZXJyID0gbXBfbXVsKCZwLCAmcSwgJmtleS0+TikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIGtleS0+TiA9IHBxICovCisgICBpZiAoKGVyciA9IG1wX3NldF9pbnQoIGtleS0+ZSwgZSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyoga2V5LT5lID0gIGUgKi8KKyAgIGlmICgoZXJyID0gbXBfaW52bW9kKCBrZXktPmUsICB0bXAxLCAga2V5LT5kKSkgIT0gQ1JZUFRfT0spICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiBrZXktPmQgPSAxL2UgbW9kIGxjbShwLTEscS0xKSAqLworICAgaWYgKChlcnIgPSBtcF9tdWwoIHAsICBxLCAga2V5LT5OKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIGtleS0+TiA9IHBxICovCiAKICAgIC8qIG9wdGltaXplIGZvciBDUlQgbm93ICovCiAgICAvKiBmaW5kIGQgbW9kIHEtMSBhbmQgZCBtb2QgcC0xICovCi0gICBpZiAoKGVyciA9IG1wX3N1Yl9kKCZwLCAxLCAmdG1wMSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiB0bXAxID0gcS0xICovCi0gICBpZiAoKGVyciA9IG1wX3N1Yl9kKCZxLCAxLCAmdG1wMikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiB0bXAyID0gcC0xICovCi0gICBpZiAoKGVyciA9IG1wX21vZCgma2V5LT5kLCAmdG1wMSwgJmtleS0+ZFApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiBkUCA9IGQgbW9kIHAtMSAqLwotICAgaWYgKChlcnIgPSBtcF9tb2QoJmtleS0+ZCwgJnRtcDIsICZrZXktPmRRKSkgIT0gTVBfT0tBWSkgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyogZFEgPSBkIG1vZCBxLTEgKi8KLSAgIGlmICgoZXJyID0gbXBfaW52bW9kKCZxLCAmcCwgJmtleS0+cVApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIHFQID0gMS9xIG1vZCBwICovCisgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCBwLCAxLCAgdG1wMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyogdG1wMSA9IHEtMSAqLworICAgaWYgKChlcnIgPSBtcF9zdWJfZCggcSwgMSwgIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIHRtcDIgPSBwLTEgKi8KKyAgIGlmICgoZXJyID0gbXBfbW9kKCBrZXktPmQsICB0bXAxLCAga2V5LT5kUCkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiBkUCA9IGQgbW9kIHAtMSAqLworICAgaWYgKChlcnIgPSBtcF9tb2QoIGtleS0+ZCwgIHRtcDIsICBrZXktPmRRKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIGRRID0gZCBtb2QgcS0xICovCisgICBpZiAoKGVyciA9IG1wX2ludm1vZCggcSwgIHAsICBrZXktPnFQKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyogcVAgPSAxL3EgbW9kIHAgKi8KIAotICAgaWYgKChlcnIgPSBtcF9jb3B5KCZwLCAma2V5LT5wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0KLSAgIGlmICgoZXJyID0gbXBfY29weSgmcSwgJmtleS0+cSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9Ci0KLSAgIC8qIHNocmluayByYW0gcmVxdWlyZWQgICovCi0gICBpZiAoKGVyciA9IG1wX3Nocmluaygma2V5LT5lKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+ZCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0KLSAgIGlmICgoZXJyID0gbXBfc2hyaW5rKCZrZXktPk4pKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9Ci0gICBpZiAoKGVyciA9IG1wX3Nocmluaygma2V5LT5kUSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+ZFApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0KLSAgIGlmICgoZXJyID0gbXBfc2hyaW5rKCZrZXktPnFQKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9Ci0gICBpZiAoKGVyciA9IG1wX3Nocmluaygma2V5LT5wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfQotICAgaWYgKChlcnIgPSBtcF9zaHJpbmsoJmtleS0+cSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weSggcCwgIGtleS0+cCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KCBxLCAga2V5LT5xKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CiAKICAgIC8qIHNldCBrZXkgdHlwZSAoaW4gdGhpcyBjYXNlIGl0J3MgQ1JUIG9wdGltaXplZCkgKi8KICAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CiAKICAgIC8qIHJldHVybiBvayBhbmQgZnJlZSB0ZW1wcyAqLwogICAgZXJyICAgICAgID0gQ1JZUFRfT0s7Ci0gICBnb3RvIGRvbmU7Ci1lcnJvcjI6Ci0gICBtcF9jbGVhcl9tdWx0aSgma2V5LT5kLCAma2V5LT5lLCAma2V5LT5OLCAma2V5LT5kUSwgJmtleS0+ZFAsCi0gICAgICAgICAgICAgICAgICAma2V5LT5xUCwgJmtleS0+cCwgJmtleS0+cSwgTlVMTCk7Ci1lcnJvcjoKLSAgIGVyciA9IG1waV90b19sdGNfZXJyb3IoZXJyKTsKLWRvbmU6Ci0gICBtcF9jbGVhcl9tdWx0aSgmdG1wMywgJnRtcDIsICZ0bXAxLCAmcCwgJnEsIE5VTEwpOworICAgZ290byBjbGVhbnVwOworZXJya2V5OgorICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5kLCBrZXktPmUsIGtleS0+Tiwga2V5LT5kUSwga2V5LT5kUCwga2V5LT5xUCwga2V5LT5wLCBrZXktPnEsIE5VTEwpOworY2xlYW51cDoKKyAgIG1wX2NsZWFyX211bHRpKHRtcDMsIHRtcDIsIHRtcDEsIHAsIHEsIE5VTEwpOwogICAgcmV0dXJuIGVycjsKIH0KIAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX21ha2Vfa2V5LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuMTQgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjI6MjM6MjcgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3JzYS9yc2Ffc2lnbl9oYXNoLmMgYi9zcmMvcGsvcnNhL3JzYV9zaWduX2hhc2guYwppbmRleCBkMzFiZGEzLi5mMTBhOTdhIDEwMDY0NAotLS0gYS9zcmMvcGsvcnNhL3JzYV9zaWduX2hhc2guYworKysgYi9zcmMvcGsvcnNhL3JzYV9zaWduX2hhc2guYwpAQCAtNiwyMyArNiwyNCBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCiAvKioKICAgQGZpbGUgcnNhX3NpZ25faGFzaC5jCi0gIFJTQSBQS0NTIHYyIFBTUyBzaWduIGhhc2gsIFRvbSBTdCBEZW5pcwotKi8gIAorICBSU0EgUEtDUyAjMSB2MS41IGFuZCB2MiBQU1Mgc2lnbiBoYXNoLCBUb20gU3QgRGVuaXMgYW5kIEFuZHJlYXMgTGFuZ2UKKyovCiAKICNpZmRlZiBNUlNBCiAKIC8qKgotICAoUEtDUyAjMSwgdjIuMCkgUFNTIHBhZCB0aGVuIHNpZ24gCisgIFBLQ1MgIzEgcGFkIHRoZW4gc2lnbgogICBAcGFyYW0gaW4gICAgICAgIFRoZSBoYXNoIHRvIHNpZ24KICAgQHBhcmFtIGlubGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRvIHNpZ24gKG9jdGV0cykKICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgc2lnbmF0dXJlCi0gIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlIAorICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHNpZ25hdHVyZQorICBAcGFyYW0gcGFkZGluZyAgIFR5cGUgb2YgcGFkZGluZyAoTFRDX1BLQ1NfMV9QU1Mgb3IgTFRDX1BLQ1NfMV9WMV81KQogICBAcGFyYW0gcHJuZyAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCiAgIEBwYXJhbSBwcm5nX2lkeCAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIGRlc2lyZWQKICAgQHBhcmFtIGhhc2hfaWR4ICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggZGVzaXJlZApAQCAtMzAsNTAgKzMxLDEwNCBAQAogICBAcGFyYW0ga2V5ICAgICAgIFRoZSBwcml2YXRlIFJTQSBrZXkgdG8gdXNlCiAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAogKi8KLWludCByc2Ffc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgICAgKnBybmcsICAgICBpbnQgICAgICAgICAgICBwcm5nX2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KQoraW50IHJzYV9zaWduX2hhc2hfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICAgICpwcm5nLCAgICAgaW50ICAgICAgICAgICAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSkKIHsKLSAgIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19iaXRsZW4sIG1vZHVsdXNfYnl0ZWxlbiwgeDsKKyAgIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19iaXRsZW4sIG1vZHVsdXNfYnl0ZWxlbiwgeCwgeTsKICAgIGludCAgICAgICAgICAgZXJyOwotICAgCi0gIExUQ19BUkdDSEsoaW4gICAgICAgIT0gTlVMTCk7Ci0gIExUQ19BUkdDSEsob3V0ICAgICAgIT0gTlVMTCk7Ci0gIExUQ19BUkdDSEsob3V0bGVuICAgIT0gTlVMTCk7Ci0gIExUQ19BUkdDSEsoa2V5ICAgICAgIT0gTlVMTCk7Ci0gIAotICAvKiB2YWxpZCBwcm5nIGFuZCBoYXNoID8gKi8KLSAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHBybmdfaWR4KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgcmV0dXJuIGVycjsKLSAgfQotICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgewotICAgICByZXR1cm4gZXJyOwotICB9Ci0gIAotICAvKiBnZXQgbW9kdWx1cyBsZW4gaW4gYml0cyAqLwotICBtb2R1bHVzX2JpdGxlbiA9IG1wX2NvdW50X2JpdHMoJihrZXktPk4pKTsKKworICAgTFRDX0FSR0NISyhpbiAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKworICAgLyogdmFsaWQgcGFkZGluZz8gKi8KKyAgIGlmICgocGFkZGluZyAhPSBMVENfUEtDU18xX1YxXzUpICYmIChwYWRkaW5nICE9IExUQ19QS0NTXzFfUFNTKSkgeworICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9QQURESU5HOworICAgfQorCisgICBpZiAocGFkZGluZyA9PSBMVENfUEtDU18xX1BTUykgeworICAgICAvKiB2YWxpZCBwcm5nIGFuZCBoYXNoID8gKi8KKyAgICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHBybmdfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorICAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICB9CisKKyAgIC8qIGdldCBtb2R1bHVzIGxlbiBpbiBiaXRzICovCisgICBtb2R1bHVzX2JpdGxlbiA9IG1wX2NvdW50X2JpdHMoKGtleS0+TikpOwogCiAgIC8qIG91dGxlbiBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBtb2R1bHVzICovCi0gIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCYoa2V5LT5OKSk7CisgIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKChrZXktPk4pKTsKICAgaWYgKG1vZHVsdXNfYnl0ZWxlbiA+ICpvdXRsZW4pIHsKKyAgICAgKm91dGxlbiA9IG1vZHVsdXNfYnl0ZWxlbjsKICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKICAgfQotICAgICAgCi0gIC8qIFBTUyBwYWQgdGhlIGtleSAqLwotICB4ID0gKm91dGxlbjsKLSAgaWYgKChlcnIgPSBwa2NzXzFfcHNzX2VuY29kZShpbiwgaW5sZW4sIHNhbHRsZW4sIHBybmcsIHBybmdfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfaWR4LCBtb2R1bHVzX2JpdGxlbiwgb3V0LCAmeCkpICE9IENSWVBUX09LKSB7Ci0gICAgIHJldHVybiBlcnI7CisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9QU1MpIHsKKyAgICAvKiBQU1MgcGFkIHRoZSBrZXkgKi8KKyAgICB4ID0gKm91dGxlbjsKKyAgICBpZiAoKGVyciA9IHBrY3NfMV9wc3NfZW5jb2RlKGluLCBpbmxlbiwgc2FsdGxlbiwgcHJuZywgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2lkeCwgbW9kdWx1c19iaXRsZW4sIG91dCwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIFBLQ1MgIzEgdjEuNSBwYWQgdGhlIGhhc2ggKi8KKyAgICB1bnNpZ25lZCBjaGFyICp0bXBpbjsKKyAgICBsdGNfYXNuMV9saXN0IGRpZ2VzdGluZm9bMl0sIHNpZ2luZm9bMl07CisKKyAgICAvKiBub3QgYWxsIGhhc2hlcyBoYXZlIE9JRHMuLi4gc28gc2FkICovCisgICAgaWYgKGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uT0lEbGVuID09IDApIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgfQorCisgICAgLyogY29uc3RydWN0IHRoZSBTRVFVRU5DRSAKKyAgICAgIFNFUVVFTkNFIHsKKyAgICAgICAgIFNFUVVFTkNFIHtoYXNob2lkIE9JRAorICAgICAgICAgICAgICAgICAgIGJsYWggICAgTlVMTAorICAgICAgICAgfQorICAgICAgICAgaGFzaCAgICBPQ1RFVCBTVFJJTkcgCisgICAgICB9CisgICAqLworICAgIExUQ19TRVRfQVNOMShkaWdlc3RpbmZvLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSUQsIGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uT0lEbGVuKTsKKyAgICBMVENfU0VUX0FTTjEoZGlnZXN0aW5mbywgMSwgTFRDX0FTTjFfTlVMTCwgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMCwgTFRDX0FTTjFfU0VRVUVOQ0UsICAgICAgICAgIGRpZ2VzdGluZm8sICAgICAgICAgICAgICAgICAgICAyKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMSwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgIGluLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxlbik7CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBlbmNvZGluZyAqLworICAgIHkgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPk4pOworICAgIHRtcGluID0gWE1BTExPQyh5KTsKKyAgICBpZiAodG1waW4gPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgfQorCisgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlKHNpZ2luZm8sIDIsIHRtcGluLCAmeSkpICE9IENSWVBUX09LKSB7CisgICAgICAgWEZSRUUodG1waW4pOworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgeCA9ICpvdXRsZW47CisgICAgaWYgKChlcnIgPSBwa2NzXzFfdjFfNV9lbmNvZGUodG1waW4sIHksIExUQ19QS0NTXzFfRU1TQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bHVzX2JpdGxlbiwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIFhGUkVFKHRtcGluKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIFhGUkVFKHRtcGluKTsKICAgfQogCiAgIC8qIFJTQSBlbmNvZGUgaXQgKi8KLSAgcmV0dXJuIHJzYV9leHB0bW9kKG91dCwgeCwgb3V0LCBvdXRsZW4sIFBLX1BSSVZBVEUsIGtleSk7CisgIHJldHVybiBsdGNfbXAucnNhX21lKG91dCwgeCwgb3V0LCBvdXRsZW4sIFBLX1BSSVZBVEUsIGtleSk7CiB9CiAKICNlbmRpZiAvKiBNUlNBICovCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX3NpZ25faGFzaC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDkgMjM6MTU6MzkgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2guYyBiL3NyYy9way9yc2EvcnNhX3ZlcmlmeV9oYXNoLmMKaW5kZXggNjkwMzY0ZC4uNGI2MTAyOSAxMDA2NDQKLS0tIGEvc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2guYworKysgYi9zcmMvcGsvcnNhL3JzYV92ZXJpZnlfaGFzaC5jCkBAIC02LDc1ICs2LDE1NiBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCiAvKioKICAgQGZpbGUgcnNhX3ZlcmlmeV9oYXNoLmMKLSAgUlNBIFBLQ1MgdjIgUFNTIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIFRvbSBTdCBEZW5pcwotKi8gIAorICBSU0EgUEtDUyAjMSB2MS41IG9yIHYyIFBTUyBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLCBUb20gU3QgRGVuaXMgYW5kIEFuZHJlYXMgTGFuZ2UKKyovCiAKICNpZmRlZiBNUlNBCiAKIC8qKgotICAoUEtDUyAjMSwgdjIuMCkgZGUtc2lnbiB0aGVuIFBTUyBkZXBhZAorICBQS0NTICMxIGRlLXNpZ24gdGhlbiB2MS41IG9yIFBTUyBkZXBhZAogICBAcGFyYW0gc2lnICAgICAgICAgICAgICBUaGUgc2lnbmF0dXJlIGRhdGEKICAgQHBhcmFtIHNpZ2xlbiAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2lnbmF0dXJlIGRhdGEgKG9jdGV0cykKICAgQHBhcmFtIGhhc2ggICAgICAgICAgICAgVGhlIGhhc2ggb2YgdGhlIG1lc3NhZ2UgdGhhdCB3YXMgc2lnbmVkCiAgIEBwYXJhbSBoYXNobGVuICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGhhc2ggb2YgdGhlIG1lc3NhZ2UgdGhhdCB3YXMgc2lnbmVkIChvY3RldHMpCisgIEBwYXJhbSBwYWRkaW5nICAgICAgICAgIFR5cGUgb2YgcGFkZGluZyAoTFRDX1BLQ1NfMV9QU1Mgb3IgTFRDX1BLQ1NfMV9WMV81KQogICBAcGFyYW0gaGFzaF9pZHggICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgaGFzaAogICBAcGFyYW0gc2FsdGxlbiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzYWx0IHVzZWQgZHVyaW5nIHNpZ25hdHVyZQogICBAcGFyYW0gc3RhdCAgICAgICAgICAgICBbb3V0XSBUaGUgcmVzdWx0IG9mIHRoZSBzaWduYXR1cmUgY29tcGFyaXNvbiwgMT09dmFsaWQsIDA9PWludmFsaWQKICAgQHBhcmFtIGtleSAgICAgICAgICAgICAgVGhlIHB1YmxpYyBSU0Ega2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSB0aGF0IHBlcmZvcm1lZCB0aGUgc2lnbmF0dXJlCiAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcyAoZXZlbiBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQpCiAqLwotaW50IHJzYV92ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsICAgICAgdW5zaWduZWQgbG9uZyBzaWdsZW4sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsICAgICB1bnNpZ25lZCBsb25nIGhhc2hsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCB1bnNpZ25lZCBsb25nIHNhbHRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQsICAgICByc2Ffa2V5ICAgICAgKmtleSkKK2ludCByc2FfdmVyaWZ5X2hhc2hfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgICAgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCAgICAgdW5zaWduZWQgbG9uZyBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgdW5zaWduZWQgbG9uZyBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0LCAgICAgcnNhX2tleSAgICAgICprZXkpCiB7Ci0gICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBtb2R1bHVzX2J5dGVsZW4sIHg7Ci0gICBpbnQgICAgICAgICAgIGVycjsKLSAgIHVuc2lnbmVkIGNoYXIgKnRtcGJ1ZjsKLSAgIAorICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBtb2R1bHVzX2J5dGVsZW4sIHg7CisgIGludCAgICAgICAgICAgZXJyOworICB1bnNpZ25lZCBjaGFyICp0bXBidWY7CisKICAgTFRDX0FSR0NISyhoYXNoICAhPSBOVUxMKTsKLSAgTFRDX0FSR0NISyhzaWcgICAgICAhPSBOVUxMKTsKLSAgTFRDX0FSR0NISyhzdGF0ICAgICAhPSBOVUxMKTsKLSAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhzaWcgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhzdGF0ICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhrZXkgICAhPSBOVUxMKTsKIAogICAvKiBkZWZhdWx0IHRvIGludmFsaWQgKi8KICAgKnN0YXQgPSAwOwotICAKLSAgLyogdmFsaWQgaGFzaCA/ICovCi0gIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7Ci0gICAgIHJldHVybiBlcnI7CisKKyAgLyogdmFsaWQgcGFkZGluZz8gKi8KKworICBpZiAoKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9WMV81KSAmJgorICAgICAgKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9QU1MpKSB7CisgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfUEFERElORzsKICAgfQotICAKKworICBpZiAocGFkZGluZyA9PSBMVENfUEtDU18xX1BTUykgeworICAgIC8qIHZhbGlkIGhhc2ggPyAqLworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIH0KKwogICAvKiBnZXQgbW9kdWx1cyBsZW4gaW4gYml0cyAqLwotICBtb2R1bHVzX2JpdGxlbiA9IG1wX2NvdW50X2JpdHMoJihrZXktPk4pKTsKKyAgbW9kdWx1c19iaXRsZW4gPSBtcF9jb3VudF9iaXRzKCAoa2V5LT5OKSk7CiAKICAgLyogb3V0bGVuIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKi8KLSAgbW9kdWx1c19ieXRlbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoJihrZXktPk4pKTsKKyAgbW9kdWx1c19ieXRlbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoIChrZXktPk4pKTsKICAgaWYgKG1vZHVsdXNfYnl0ZWxlbiAhPSBzaWdsZW4pIHsKICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOwogICB9Ci0gIAorCiAgIC8qIGFsbG9jYXRlIHRlbXAgYnVmZmVyIGZvciBkZWNvZGVkIHNpZyAqLwogICB0bXBidWYgPSBYTUFMTE9DKHNpZ2xlbik7CiAgIGlmICh0bXBidWYgPT0gTlVMTCkgewogICAgICByZXR1cm4gQ1JZUFRfTUVNOwogICB9Ci0gICAgICAKKwogICAvKiBSU0EgZGVjb2RlIGl0ICAqLwogICB4ID0gc2lnbGVuOwotICBpZiAoKGVyciA9IHJzYV9leHB0bW9kKHNpZywgc2lnbGVuLCB0bXBidWYsICZ4LCBQS19QVUJMSUMsIGtleSkpICE9IENSWVBUX09LKSB7CisgIGlmICgoZXJyID0gbHRjX21wLnJzYV9tZShzaWcsIHNpZ2xlbiwgdG1wYnVmLCAmeCwgUEtfUFVCTElDLCBrZXkpKSAhPSBDUllQVF9PSykgewogICAgICBYRlJFRSh0bXBidWYpOwogICAgICByZXR1cm4gZXJyOwogICB9Ci0gIAotICAvKiBQU1MgZGVjb2RlIGl0ICovCi0gIGVyciA9IHBrY3NfMV9wc3NfZGVjb2RlKGhhc2gsIGhhc2hsZW4sIHRtcGJ1ZiwgeCwgc2FsdGxlbiwgaGFzaF9pZHgsIG1vZHVsdXNfYml0bGVuLCBzdGF0KTsKKworICAvKiBtYWtlIHN1cmUgdGhlIG91dHB1dCBpcyB0aGUgcmlnaHQgc2l6ZSAqLworICBpZiAoeCAhPSBzaWdsZW4pIHsKKyAgICAgWEZSRUUodG1wYnVmKTsKKyAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICB9CisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9QU1MpIHsKKyAgICAvKiBQU1MgZGVjb2RlIGFuZCB2ZXJpZnkgaXQgKi8KKyAgICBlcnIgPSBwa2NzXzFfcHNzX2RlY29kZShoYXNoLCBoYXNobGVuLCB0bXBidWYsIHgsIHNhbHRsZW4sIGhhc2hfaWR4LCBtb2R1bHVzX2JpdGxlbiwgc3RhdCk7CisgIH0gZWxzZSB7CisgICAgLyogUEtDUyAjMSB2MS41IGRlY29kZSBpdCAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dDsKKyAgICB1bnNpZ25lZCBsb25nIG91dGxlbiwgbG9pZFsxNl07CisgICAgaW50ICAgICAgICAgICBkZWNvZGVkOworICAgIGx0Y19hc24xX2xpc3QgZGlnZXN0aW5mb1syXSwgc2lnaW5mb1syXTsKKworICAgIC8qIG5vdCBhbGwgaGFzaGVzIGhhdmUgT0lEcy4uLiBzbyBzYWQgKi8KKyAgICBpZiAoaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSURsZW4gPT0gMCkgeworICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIHRlbXAgYnVmZmVyIGZvciBkZWNvZGVkIGhhc2ggKi8KKyAgICBvdXRsZW4gPSAoKG1vZHVsdXNfYml0bGVuID4+IDMpICsgKG1vZHVsdXNfYml0bGVuICYgNyA/IDEgOiAwKSkgLSAzOworICAgIG91dCAgICA9IFhNQUxMT0Mob3V0bGVuKTsKKyAgICBpZiAob3V0ID09IE5VTEwpIHsKKyAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIGlmICgoZXJyID0gcGtjc18xX3YxXzVfZGVjb2RlKHRtcGJ1ZiwgeCwgTFRDX1BLQ1NfMV9FTVNBLCBtb2R1bHVzX2JpdGxlbiwgb3V0LCAmb3V0bGVuLCAmZGVjb2RlZCkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRShvdXQpOyAgICAgICAKKyAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIC8qIG5vdyB3ZSBtdXN0IGRlY29kZSBvdXRbMC4uLm91dGxlbi0xXSB1c2luZyBBU04uMSwgdGVzdCB0aGUgT0lEIGFuZCB0aGVuIHRlc3QgdGhlIGhhc2ggKi8KKyAgICAvKiBjb25zdHJ1Y3QgdGhlIFNFUVVFTkNFIAorICAgICAgU0VRVUVOQ0UgeworICAgICAgICAgU0VRVUVOQ0Uge2hhc2hvaWQgT0lECisgICAgICAgICAgICAgICAgICAgYmxhaCAgICBOVUxMCisgICAgICAgICB9CisgICAgICAgICBoYXNoICAgIE9DVEVUIFNUUklORyAKKyAgICAgIH0KKyAgICovCisgICAgTFRDX1NFVF9BU04xKGRpZ2VzdGluZm8sIDAsIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSLCBsb2lkLCBzaXplb2YobG9pZCkvc2l6ZW9mKGxvaWRbMF0pKTsKKyAgICBMVENfU0VUX0FTTjEoZGlnZXN0aW5mbywgMSwgTFRDX0FTTjFfTlVMTCwgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMCwgTFRDX0FTTjFfU0VRVUVOQ0UsICAgICAgICAgIGRpZ2VzdGluZm8sICAgICAgICAgICAgICAgICAgICAyKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMSwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgIHRtcGJ1ZiwgICAgICAgICAgICAgICAgICAgICAgICBzaWdsZW4pOworICAgCisgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKG91dCwgb3V0bGVuLCBzaWdpbmZvLCAyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBYRlJFRShvdXQpOworICAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIC8qIHRlc3QgT0lEICovCisgICAgaWYgKChkaWdlc3RpbmZvWzBdLnNpemUgPT0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSURsZW4pICYmCisgICAgICAgIChYTUVNQ01QKGRpZ2VzdGluZm9bMF0uZGF0YSwgaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSUQsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uT0lEbGVuKSA9PSAwKSAmJgorICAgICAgICAoc2lnaW5mb1sxXS5zaXplID09IGhhc2hsZW4pICYmCisgICAgICAgIChYTUVNQ01QKHNpZ2luZm9bMV0uZGF0YSwgaGFzaCwgaGFzaGxlbikgPT0gMCkpIHsKKyAgICAgICAqc3RhdCA9IDE7CisgICAgfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShvdXQsIG91dGxlbik7CisjZW5kaWYKKyAgICBYRlJFRShvdXQpOworICB9CisKK2JhaWxfMjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgemVyb21lbSh0bXBidWYsIHNpZ2xlbik7CisjZW5kaWYKICAgWEZSRUUodG1wYnVmKTsKICAgcmV0dXJuIGVycjsKIH0KQEAgLTgyLDUgKzE2Myw1IEBACiAjZW5kaWYgLyogTVJTQSAqLwogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV92ZXJpZnlfaGFzaC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAzOjA5OjI4ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm5ncy9mb3J0dW5hLmMgYi9zcmMvcHJuZ3MvZm9ydHVuYS5jCmluZGV4IDhhM2I4ZWEuLjE1OWRiNTIgMTAwNjQ0Ci0tLSBhL3NyYy9wcm5ncy9mb3J0dW5hLmMKKysrIGIvc3JjL3BybmdzL2ZvcnR1bmEuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtNzQsNiArNzQsNyBAQAogICAgLyogbmV3IEsgPT0gU0hBMjU2KEsgfHwgcykgd2hlcmUgcyA9PSBTSEEyNTYoUDApIHx8IFNIQTI1NihQMSkgLi4uICovCiAgICBzaGEyNTZfaW5pdCgmbWQpOwogICAgaWYgKChlcnIgPSBzaGEyNTZfcHJvY2VzcygmbWQsIHBybmctPmZvcnR1bmEuSywgMzIpKSAhPSBDUllQVF9PSykgeworICAgICAgc2hhMjU2X2RvbmUoJm1kLCB0bXApOwogICAgICAgcmV0dXJuIGVycjsKICAgIH0KIApAQCAtODEsMTQgKzgyLDE5IEBACiAgICAgICAgaWYgKHggPT0gMCB8fCAoKHBybmctPmZvcnR1bmEucmVzZXRfY250ID4+ICh4LTEpKSAmIDEpID09IDApIHsgCiAgICAgICAgICAgLyogdGVybWluYXRlIHRoaXMgaGFzaCAqLwogICAgICAgICAgIGlmICgoZXJyID0gc2hhMjU2X2RvbmUoJnBybmctPmZvcnR1bmEucG9vbFt4XSwgdG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICBzaGEyNTZfZG9uZSgmbWQsIHRtcCk7CiAgICAgICAgICAgICAgcmV0dXJuIGVycjsgCiAgICAgICAgICAgfQogICAgICAgICAgIC8qIGFkZCBpdCB0byB0aGUgc3RyaW5nICovCiAgICAgICAgICAgaWYgKChlcnIgPSBzaGEyNTZfcHJvY2VzcygmbWQsIHRtcCwgMzIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHNoYTI1Nl9kb25lKCZtZCwgdG1wKTsKICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgIH0KICAgICAgICAgICAvKiByZXNldCB0aGlzIHBvb2wgKi8KLSAgICAgICAgICBzaGEyNTZfaW5pdCgmcHJuZy0+Zm9ydHVuYS5wb29sW3hdKTsKKyAgICAgICAgICBpZiAoKGVyciA9IHNoYTI1Nl9pbml0KCZwcm5nLT5mb3J0dW5hLnBvb2xbeF0pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHNoYTI1Nl9kb25lKCZtZCwgdG1wKTsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KQEAgLTEyMywyNCArMTI5LDM1IEBACiAqLyAgCiBpbnQgZm9ydHVuYV9zdGFydChwcm5nX3N0YXRlICpwcm5nKQogewotICAgaW50IGVyciwgeDsKKyAgIGludCBlcnIsIHgsIHk7CisgICB1bnNpZ25lZCBjaGFyIHRtcFtNQVhCTE9DS1NJWkVdOwogCiAgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CiAgICAKICAgIC8qIGluaXRpYWxpemUgdGhlIHBvb2xzICovCiAgICBmb3IgKHggPSAwOyB4IDwgRk9SVFVOQV9QT09MUzsgeCsrKSB7Ci0gICAgICAgc2hhMjU2X2luaXQoJnBybmctPmZvcnR1bmEucG9vbFt4XSk7CisgICAgICAgaWYgKChlcnIgPSBzaGEyNTZfaW5pdCgmcHJuZy0+Zm9ydHVuYS5wb29sW3hdKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSB7CisgICAgICAgICAgICAgIHNoYTI1Nl9kb25lKCZwcm5nLT5mb3J0dW5hLnBvb2xbeV0sIHRtcCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgfQogICAgfQotICAgcHJuZy0+Zm9ydHVuYS5wb29sX2lkeCA9IHBybmctPmZvcnR1bmEucG9vbDBfbGVuID0gcHJuZy0+Zm9ydHVuYS5yZXNldF9jbnQgPSAKLSAgIHBybmctPmZvcnR1bmEud2QgPSAwOworICAgcHJuZy0+Zm9ydHVuYS5wb29sX2lkeCA9IHBybmctPmZvcnR1bmEucG9vbDBfbGVuID0gcHJuZy0+Zm9ydHVuYS53ZCA9IDA7CisgICBwcm5nLT5mb3J0dW5hLnJlc2V0X2NudCA9IDA7CiAKICAgIC8qIHJlc2V0IGJ1ZnMgKi8KICAgIHplcm9tZW0ocHJuZy0+Zm9ydHVuYS5LLCAzMik7CiAgICBpZiAoKGVyciA9IHJpam5kYWVsX3NldHVwKHBybmctPmZvcnR1bmEuSywgMzIsIDAsICZwcm5nLT5mb3J0dW5hLnNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZm9yICh4ID0gMDsgeCA8IEZPUlRVTkFfUE9PTFM7IHgrKykgeworICAgICAgICAgIHNoYTI1Nl9kb25lKCZwcm5nLT5mb3J0dW5hLnBvb2xbeF0sIHRtcCk7CisgICAgICB9CiAgICAgICByZXR1cm4gZXJyOwogICAgfQogICAgemVyb21lbShwcm5nLT5mb3J0dW5hLklWLCAxNik7Ci0KKyAgIAorICAgTFRDX01VVEVYX0lOSVQoJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKQorICAgCiAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKQEAgLTE1OSwxOCArMTc2LDIzIEBACiAgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKIAorICAgTFRDX01VVEVYX0xPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKwogICAgLyogZW5zdXJlIGlubGVuIDw9IDMyICovCiAgICBpZiAoaW5sZW4gPiAzMikgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOwogICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOwogICAgfQogCiAgICAvKiBhZGQgcyB8fCBsZW5ndGgoaW4pIHx8IGluIHRvIHBvb2xbcG9vbF9pZHhdICovCiAgICB0bXBbMF0gPSAwOwotICAgdG1wWzFdID0gaW5sZW47CisgICB0bXBbMV0gPSAodW5zaWduZWQgY2hhcilpbmxlbjsKICAgIGlmICgoZXJyID0gc2hhMjU2X3Byb2Nlc3MoJnBybmctPmZvcnR1bmEucG9vbFtwcm5nLT5mb3J0dW5hLnBvb2xfaWR4XSwgdG1wLCAyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKICAgICAgIHJldHVybiBlcnI7CiAgICB9CiAgICBpZiAoKGVyciA9IHNoYTI1Nl9wcm9jZXNzKCZwcm5nLT5mb3J0dW5hLnBvb2xbcHJuZy0+Zm9ydHVuYS5wb29sX2lkeF0sIGluLCBpbmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gZXJyOwogICAgfQogICAgaWYgKHBybmctPmZvcnR1bmEucG9vbF9pZHggPT0gMCkgewpAQCAtMTgwLDYgKzIwMiw3IEBACiAgICAgICBwcm5nLT5mb3J0dW5hLnBvb2xfaWR4ID0gMDsKICAgIH0KIAorICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOwogICAgcmV0dXJuIENSWVBUX09LOwogfQogCkBAIC0yMDksOSArMjMyLDEyIEBACiAgICBMVENfQVJHQ0hLKG91dCAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CiAKKyAgIExUQ19NVVRFWF9MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CisKICAgIC8qIGRvIHdlIGhhdmUgdG8gcmVzZWVkPyAqLwogICAgaWYgKCsrcHJuZy0+Zm9ydHVuYS53ZCA9PSBGT1JUVU5BX1dEIHx8IHBybmctPmZvcnR1bmEucG9vbDBfbGVuID49IDY0KSB7CiAgICAgICBpZiAoKGVyciA9IGZvcnR1bmFfcmVzZWVkKHBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAgICB9CkBAIC0yMTksNyArMjQ1LDcgQEAKICAgIC8qIG5vdyBnZW5lcmF0ZSB0aGUgYmxvY2tzIHJlcXVpcmVkICovCiAgICB0bGVuID0gb3V0bGVuOwogCi0gICAvKiBoYW5kbGUgd2hvbGUgYmxvY2tzIHdpdGhvdXQgdGhlIGV4dHJhIG1lbWNweSAqLworICAgLyogaGFuZGxlIHdob2xlIGJsb2NrcyB3aXRob3V0IHRoZSBleHRyYSBYTUVNQ1BZICovCiAgICB3aGlsZSAob3V0bGVuID49IDE2KSB7CiAgICAgICAvKiBlbmNyeXB0IHRoZSBJViBhbmQgc3RvcmUgaXQgKi8KICAgICAgIHJpam5kYWVsX2VjYl9lbmNyeXB0KHBybmctPmZvcnR1bmEuSVYsIG91dCwgJnBybmctPmZvcnR1bmEuc2tleSk7CkBAIC0yMzksMTIgKzI2NSwxNCBAQAogICAgcmlqbmRhZWxfZWNiX2VuY3J5cHQocHJuZy0+Zm9ydHVuYS5JViwgcHJuZy0+Zm9ydHVuYS5LICAgLCAmcHJuZy0+Zm9ydHVuYS5za2V5KTsgZm9ydHVuYV91cGRhdGVfaXYocHJuZyk7CiAgICByaWpuZGFlbF9lY2JfZW5jcnlwdChwcm5nLT5mb3J0dW5hLklWLCBwcm5nLT5mb3J0dW5hLksrMTYsICZwcm5nLT5mb3J0dW5hLnNrZXkpOyBmb3J0dW5hX3VwZGF0ZV9pdihwcm5nKTsKICAgIGlmICgoZXJyID0gcmlqbmRhZWxfc2V0dXAocHJuZy0+Zm9ydHVuYS5LLCAzMiwgMCwgJnBybmctPmZvcnR1bmEuc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gMDsKICAgIH0KIAogI2lmZGVmIExUQ19DTEVBTl9TVEFDSwogICAgemVyb21lbSh0bXAsIHNpemVvZih0bXApKTsKICNlbmRpZgorICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOwogICAgcmV0dXJuIHRsZW47CiB9ICAgCiAKQEAgLTI1OSwxMCArMjg3LDEyIEBACiAgICB1bnNpZ25lZCBjaGFyIHRtcFszMl07CiAKICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKKyAgIExUQ19NVVRFWF9MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CiAKICAgIC8qIHRlcm1pbmF0ZSBhbGwgdGhlIGhhc2hlcyAqLwogICAgZm9yICh4ID0gMDsgeCA8IEZPUlRVTkFfUE9PTFM7IHgrKykgewogICAgICAgIGlmICgoZXJyID0gc2hhMjU2X2RvbmUoJihwcm5nLT5mb3J0dW5hLnBvb2xbeF0pLCB0bXApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKICAgICAgICAgICByZXR1cm4gZXJyOyAKICAgICAgICB9CiAgICB9CkBAIC0yNzIsNiArMzAyLDcgQEAKICAgIHplcm9tZW0odG1wLCBzaXplb2YodG1wKSk7CiAjZW5kaWYKIAorICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOwogICAgcmV0dXJuIENSWVBUX09LOwogfQogCkBAIC0yOTEsMTMgKzMyMiwxOCBAQAogICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKHBybmcgICAhPSBOVUxMKTsKIAorICAgTFRDX01VVEVYX0xPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKwogICAgLyogd2UnbGwgd3JpdGUgYnl0ZXMgZm9yIHMmZydzICovCiAgICBpZiAoKm91dGxlbiA8IDMyKkZPUlRVTkFfUE9PTFMpIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKyAgICAgICpvdXRsZW4gPSAzMipGT1JUVU5BX1BPT0xTOwogICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKICAgIH0KIAogICAgbWQgPSBYTUFMTE9DKHNpemVvZihoYXNoX3N0YXRlKSk7CiAgICBpZiAobWQgPT0gTlVMTCkgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOwogICAgICAgcmV0dXJuIENSWVBUX01FTTsKICAgIH0KIApAQCAtMzMyLDYgKzM2OCw3IEBACiAgICB6ZXJvbWVtKG1kLCBzaXplb2YoKm1kKSk7CiAjZW5kaWYKICAgIFhGUkVFKG1kKTsKKyAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKICAgIHJldHVybiBlcnI7CiB9CiAgCkBAIC0zODYsNSArNDIzLDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcHJuZ3MvZm9ydHVuYS5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm5ncy9yYzQuYyBiL3NyYy9wcm5ncy9yYzQuYwppbmRleCA0ZDI5ZDlhLi5jZjExOGFkIDEwMDY0NAotLS0gYS9zcmMvcHJuZ3MvcmM0LmMKKysrIGIvc3JjL3BybmdzL3JjNC5jCkBAIC02LDcgKzYsNyBAQAogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKICAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCi0gKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQub3JnCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCiAgKi8KICNpbmNsdWRlICJ0b21jcnlwdC5oIgogCkBAIC0xMzAsNiArMTMwLDEwIEBACiAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKIAorI2lmZGVmIExUQ19WQUxHUklORAorICAgemVyb21lbShvdXQsIG91dGxlbik7CisjZW5kaWYKKwogICAgbiA9IG91dGxlbjsKICAgIHggPSBwcm5nLT5yYzQueDsKICAgIHkgPSBwcm5nLT5yYzQueTsKQEAgLTE3MSw2ICsxNzUsNyBAQAogICAgTFRDX0FSR0NISyhwcm5nICAgIT0gTlVMTCk7CiAKICAgIGlmICgqb3V0bGVuIDwgMzIpIHsKKyAgICAgICpvdXRsZW4gPSAzMjsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKQEAgLTIxMSw3ICsyMTYsNyBAQAogKi8gIAogaW50IHJjNF90ZXN0KHZvaWQpCiB7Ci0jaWZuZGVmIExUQ19URVNUCisjaWYgIWRlZmluZWQoTFRDX1RFU1QpIHx8IGRlZmluZWQoTFRDX1ZBTEdSSU5EKQogICAgcmV0dXJuIENSWVBUX05PUDsKICNlbHNlCiAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKQEAgLTI0Miw3ICsyNDcsNyBAQAogICAgICAgICAgIHJldHVybiBDUllQVF9FUlJPUl9SRUFEUFJORzsKICAgICAgICB9CiAgICAgICAgcmM0X2RvbmUoJnBybmcpOwotICAgICAgIGlmIChtZW1jbXAoZHN0LCB0ZXN0c1t4XS5jdCwgOCkpIHsKKyAgICAgICBpZiAoWE1FTUNNUChkc3QsIHRlc3RzW3hdLmN0LCA4KSkgewogI2lmIDAKICAgICAgICAgICBpbnQgeTsKICAgICAgICAgICBwcmludGYoIlxuXG5SQzQgZmFpbGVkLCBJIGdvdDpcbiIpOyAKQEAgLTI2MCw1ICsyNjUsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9yYzQuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4zICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzE2IDAwOjMyOjE4ICQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLmMgYi9zcmMvcHJuZ3Mvcm5nX2dldF9ieXRlcy5jCmluZGV4IGE3MTFkZmEuLjdkMzMyYjUgMTAwNjQ0Ci0tLSBhL3NyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLmMKKysrIGIvc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtNTAsNyArNTAsNyBAQAogI2VuZGlmIC8qIERFVlJBTkRPTSAqLwogCiAvKiBvbiBBTlNJIEMgcGxhdGZvcm1zIHdpdGggMTAwIDwgQ0xPQ0tTX1BFUl9TRUMgPCAxMDAwMCAqLwotI2lmIGRlZmluZWQoQ0xPQ0tTX1BFUl9TRUMpCisjaWYgZGVmaW5lZChDTE9DS1NfUEVSX1NFQykgJiYgIWRlZmluZWQoV0lOQ0UpCiAKICNkZWZpbmUgQU5TSV9STkcKIApAQCAtODcsOCArODcsMTIgQEAKICNlbmRpZiAKIAogLyogVHJ5IHRoZSBNaWNyb3NvZnQgQ1NQICovCi0jaWZkZWYgV0lOMzIKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKFdJTkNFKQogI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNDAwCisjaWZkZWYgV0lOQ0UKKyAgICNkZWZpbmUgVU5ERVJfQ0UKKyAgICNkZWZpbmUgQVJNCisjZW5kaWYKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luY3J5cHQuaD4KIApAQCAtMTQwLDUgKzE0NCw1IEBACiB9CiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMyAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNiAwMjowMToyOSAkICovCmRpZmYgLS1naXQgYS9zcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5jIGIvc3JjL3BybmdzL3JuZ19tYWtlX3BybmcuYwppbmRleCA1MWI2ZTZjLi4zNTYzMWFiIDEwMDY0NAotLS0gYS9zcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5jCisrKyBiL3NyYy9wcm5ncy9ybmdfbWFrZV9wcm5nLmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTY1LDUgKzY1LDUgQEAKIAogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BybmdzL3NvYmVyMTI4LmMgYi9zcmMvcHJuZ3Mvc29iZXIxMjguYwppbmRleCBjODlmMDFjLi4wMzYxMzg3IDEwMDY0NAotLS0gYS9zcmMvcHJuZ3Mvc29iZXIxMjguYworKysgYi9zcmMvcHJuZ3Mvc29iZXIxMjguYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMjk0LDYgKzI5NCwxMCBAQAogICAgTFRDX0FSR0NISyhvdXQgICE9IE5VTEwpOwogICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOwogCisjaWZkZWYgTFRDX1ZBTEdSSU5ECisgICB6ZXJvbWVtKG91dCwgb3V0bGVuKTsKKyNlbmRpZgorCiAgICBjID0gJihwcm5nLT5zb2JlcjEyOCk7CiAgICB0ID0gMDsKICAgIHRsZW4gPSBvdXRsZW47CkBAIC0zODEsNiArMzg1LDcgQEAKICAgIExUQ19BUkdDSEsocHJuZyAgICE9IE5VTEwpOwogCiAgICBpZiAoKm91dGxlbiA8IDY0KSB7CisgICAgICAqb3V0bGVuID0gNjQ7CiAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOwogICAgfQogCkBAIC00MzYsMTEgKzQ0MSwxMSBAQAogICAgMTYsIDQsIDIwLAogCiAgICAvKiBrZXkgKi8KLSAgIHsgJ3QnLCAnZScsICdzJywgJ3QnLCAnICcsICdrJywgJ2UnLCAneScsIAotICAgICAnICcsICcxJywgJzInLCAnOCcsICdiJywgJ2knLCAndCcsICdzJyB9LAorICAgeyAweDc0LCAweDY1LCAweDczLCAweDc0LCAweDIwLCAweDZiLCAweDY1LCAweDc5LCAKKyAgICAgMHgyMCwgMHgzMSwgMHgzMiwgMHgzOCwgMHg2MiwgMHg2OSwgMHg3NCwgMHg3MyB9LAogCiAgICAvKiBJViAqLwotICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAogCiAgICAvKiBleHBlY3RlZCBvdXRwdXQgKi8KICAgIHsgMHg0MywgMHg1MCwgMHgwYywgMHhjZiwgMHg4OSwgMHg5MSwgMHg5ZiwgMHgxZCwKQEAgLTQ2OSwxMiArNDc0LDEyIEBACiAgICAgICAgaWYgKChlcnIgPSBzb2JlcjEyOF9yZWFkeSgmcHJuZykpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICB9Ci0gICAgICAgbWVtc2V0KGRzdCwgMCwgdGVzdHNbeF0ubGVuKTsKKyAgICAgICBYTUVNU0VUKGRzdCwgMCwgdGVzdHNbeF0ubGVuKTsKICAgICAgICBpZiAoc29iZXIxMjhfcmVhZChkc3QsIHRlc3RzW3hdLmxlbiwgJnBybmcpICE9ICh1bnNpZ25lZCBsb25nKXRlc3RzW3hdLmxlbikgewogICAgICAgICAgIHJldHVybiBDUllQVF9FUlJPUl9SRUFEUFJORzsKICAgICAgICB9CiAgICAgICAgc29iZXIxMjhfZG9uZSgmcHJuZyk7Ci0gICAgICAgaWYgKG1lbWNtcChkc3QsIHRlc3RzW3hdLm91dCwgdGVzdHNbeF0ubGVuKSkgeworICAgICAgIGlmIChYTUVNQ01QKGRzdCwgdGVzdHNbeF0ub3V0LCB0ZXN0c1t4XS5sZW4pKSB7CiAjaWYgMAogICAgICAgICAgIHByaW50ZigiXG5cblNPQkVSMTI4IGZhaWxlZCwgSSBnb3Q6XG4iKTsgCiAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IHRlc3RzW3hdLmxlbjsgeSsrKSBwcmludGYoIiUwMnggIiwgZHN0W3ldKTsKQEAgLTQ5MSw1ICs0OTYsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9zb2JlcjEyOC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDUgMDA6MTE6MzYgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BybmdzL3Nwcm5nLmMgYi9zcmMvcHJuZ3Mvc3BybmcuYwppbmRleCA0ZTY1N2RhLi4xOTBlMzNkIDEwMDY0NAotLS0gYS9zcmMvcHJuZ3Mvc3BybmcuYworKysgYi9zcmMvcHJuZ3Mvc3BybmcuYwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCiAgKiBndWFyYW50ZWUgaXQgd29ya3MuCiAgKgotICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0Lm9yZworICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQogICovCiAjaW5jbHVkZSAidG9tY3J5cHQuaCIKIApAQCAtMTMyLDUgKzEzMiw1IEBACiAgCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9zcHJuZy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BybmdzL3lhcnJvdy5jIGIvc3JjL3BybmdzL3lhcnJvdy5jCmluZGV4IDBlNTljMjIuLjlmYmQ0ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm5ncy95YXJyb3cuYworKysgYi9zcmMvcHJuZ3MveWFycm93LmMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcwogICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKLSAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5vcmcKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KICAqLwogI2luY2x1ZGUgInRvbWNyeXB0LmgiCiAKQEAgLTY2LDYgKzY2LDEyIEBACiAgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZyYzJfZGVzYyk7CiAjZWxpZiBkZWZpbmVkKE5PRUtFT04pICAgCiAgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZub2VrZW9uX2Rlc2MpOworI2VsaWYgZGVmaW5lZChBTlVCSVMpICAgCisgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZhbnViaXNfZGVzYyk7CisjZWxpZiBkZWZpbmVkKEtTRUVEKSAgIAorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigma3NlZWRfZGVzYyk7CisjZWxpZiBkZWZpbmVkKEtIQVpBRCkgICAKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJmtoYXphZF9kZXNjKTsKICNlbGlmIGRlZmluZWQoQ0FTVDUpCiAgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZjYXN0NV9kZXNjKTsKICNlbGlmIGRlZmluZWQoWFRFQSkKQEAgLTg5LDYgKzk1LDEwIEBACiAgICBwcm5nLT55YXJyb3cuaGFzaCAgID0gcmVnaXN0ZXJfaGFzaCgmdGlnZXJfZGVzYyk7CiAjZWxpZiBkZWZpbmVkKFNIQTEpCiAgICBwcm5nLT55YXJyb3cuaGFzaCAgID0gcmVnaXN0ZXJfaGFzaCgmc2hhMV9kZXNjKTsKKyNlbGlmIGRlZmluZWQoUklQRU1EMzIwKQorICAgcHJuZy0+eWFycm93Lmhhc2ggICA9IHJlZ2lzdGVyX2hhc2goJnJtZDMyMF9kZXNjKTsKKyNlbGlmIGRlZmluZWQoUklQRU1EMjU2KQorICAgcHJuZy0+eWFycm93Lmhhc2ggICA9IHJlZ2lzdGVyX2hhc2goJnJtZDI1Nl9kZXNjKTsKICNlbGlmIGRlZmluZWQoUklQRU1EMTYwKQogICAgcHJuZy0+eWFycm93Lmhhc2ggICA9IHJlZ2lzdGVyX2hhc2goJnJtZDE2MF9kZXNjKTsKICNlbGlmIGRlZmluZWQoUklQRU1EMTI4KQpAQCAtMTEwLDYgKzEyMCw3IEBACiAKICAgIC8qIHplcm8gdGhlIG1lbW9yeSB1c2VkICovCiAgICB6ZXJvbWVtKHBybmctPnlhcnJvdy5wb29sLCBzaXplb2YocHJuZy0+eWFycm93LnBvb2wpKTsKKyAgIExUQ19NVVRFWF9JTklUKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKQogCiAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CkBAIC0xMjgsMzIgKzEzOSw0MCBAQAogCiAgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKLQorICAgCisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAKICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChwcm5nLT55YXJyb3cuaGFzaCkpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKICAgICAgIHJldHVybiBlcnI7CiAgICB9CiAKICAgIC8qIHN0YXJ0IHRoZSBoYXNoICovCiAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltwcm5nLT55YXJyb3cuaGFzaF0uaW5pdCgmbWQpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gZXJyOyAKICAgIH0KIAogICAgLyogaGFzaCB0aGUgY3VycmVudCBwb29sICovCiAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltwcm5nLT55YXJyb3cuaGFzaF0ucHJvY2VzcygmbWQsIHBybmctPnlhcnJvdy5wb29sLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9kZXNjcmlwdG9yW3BybmctPnlhcnJvdy5oYXNoXS5oYXNoc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKICAgICAgIHJldHVybiBlcnI7CiAgICB9CiAKICAgIC8qIGFkZCB0aGUgbmV3IGVudHJvcHkgKi8KICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW3BybmctPnlhcnJvdy5oYXNoXS5wcm9jZXNzKCZtZCwgaW4sIGlubGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOwogICAgICAgcmV0dXJuIGVycjsKICAgIH0KIAogICAgLyogc3RvcmUgcmVzdWx0ICovCiAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltwcm5nLT55YXJyb3cuaGFzaF0uZG9uZSgmbWQsIHBybmctPnlhcnJvdy5wb29sKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOwogICAgICAgcmV0dXJuIGVycjsKICAgIH0KIAorICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CiAgICByZXR1cm4gQ1JZUFRfT0s7CiB9CiAKQEAgLTE2NywxOCArMTg2LDIyIEBACiAgICBpbnQga3MsIGVycjsKIAogICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworICAgTFRDX01VVEVYX0xPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOwogCiAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQocHJuZy0+eWFycm93Lmhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gZXJyOwogICAgfQogICAgCiAgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChwcm5nLT55YXJyb3cuY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOwogICAgICAgcmV0dXJuIGVycjsKICAgIH0KIAogICAgLyogc2V0dXAgQ1RSIG1vZGUgdXNpbmcgdGhlICJwb29sIiBhcyB0aGUga2V5ICovCiAgICBrcyA9IChpbnQpaGFzaF9kZXNjcmlwdG9yW3BybmctPnlhcnJvdy5oYXNoXS5oYXNoc2l6ZTsKICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbcHJuZy0+eWFycm93LmNpcGhlcl0ua2V5c2l6ZSgma3MpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gZXJyOwogICAgfQogCkBAIC0xODgsOCArMjExLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHJvdW5kcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgQ1RSX0NPVU5URVJfTElUVExFX0VORElBTiwgLyogbGl0dGxlIGVuZGlhbiBjb3VudGVyICovCiAgICAgICAgICAgICAgICAgICAgICAgICAmcHJuZy0+eWFycm93LmN0cikpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKICAgICAgIHJldHVybiBlcnI7CiAgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKICAgIHJldHVybiBDUllQVF9PSzsKIH0KIApAQCAtMjA1LDEzICsyMzAsMTcgQEAKICAgIExUQ19BUkdDSEsob3V0ICAhPSBOVUxMKTsKICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKIAorICAgTFRDX01VVEVYX0xPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworCiAgICAvKiBwdXQgb3V0IGluIHByZWRpY3RhYmxlIHN0YXRlIGZpcnN0ICovCiAgICB6ZXJvbWVtKG91dCwgb3V0bGVuKTsKICAgIAogICAgLyogbm93IHJhbmRvbWl6ZSBpdCAqLwogICAgaWYgKGN0cl9lbmNyeXB0KG91dCwgb3V0LCBvdXRsZW4sICZwcm5nLT55YXJyb3cuY3RyKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gMDsKICAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOwogICAgcmV0dXJuIG91dGxlbjsKIH0KIApAQCAtMjIyLDEyICsyNTEsMTggQEAKICovICAKIGludCB5YXJyb3dfZG9uZShwcm5nX3N0YXRlICpwcm5nKQogeworICAgaW50IGVycjsKICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKIAorICAgTFRDX01VVEVYX0xPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworCiAgICAvKiBjYWxsIGNpcGhlciBkb25lIHdoZW4gd2UgaW52ZW50IG9uZSA7LSkgKi8KIAogICAgLyogd2UgaW52ZW50ZWQgb25lICovCi0gICByZXR1cm4gY3RyX2RvbmUoJnBybmctPnlhcnJvdy5jdHIpOworICAgZXJyID0gY3RyX2RvbmUoJnBybmctPnlhcnJvdy5jdHIpOworICAgCisgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgIHJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMjQzLDEyICsyNzgsMTcgQEAKICAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOwogICAgTFRDX0FSR0NISyhwcm5nICAgIT0gTlVMTCk7CiAKKyAgIExUQ19NVVRFWF9MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKwogICAgLyogd2UnbGwgd3JpdGUgNjQgYnl0ZXMgZm9yIHMmZydzICovCiAgICBpZiAoKm91dGxlbiA8IDY0KSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgICpvdXRsZW4gPSA2NDsKICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CiAgICB9CiAKICAgIGlmICh5YXJyb3dfcmVhZChvdXQsIDY0LCBwcm5nKSAhPSA2NCkgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CiAgICAgICByZXR1cm4gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CiAgICB9CiAgICAqb3V0bGVuID0gNjQ7CkBAIC0yNjksMTUgKzMwOSwyMSBAQAogCiAgICBMVENfQVJHQ0hLKGluICAgIT0gTlVMTCk7CiAgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisgICAKKyAgIExUQ19NVVRFWF9MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKIAogICAgaWYgKGlubGVuICE9IDY0KSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKICAgIH0KIAogICAgaWYgKChlcnIgPSB5YXJyb3dfc3RhcnQocHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKICAgICAgIHJldHVybiBlcnI7CiAgICB9Ci0gICByZXR1cm4geWFycm93X2FkZF9lbnRyb3B5KGluLCA2NCwgcHJuZyk7CisgICBlcnIgPSB5YXJyb3dfYWRkX2VudHJvcHkoaW4sIDY0LCBwcm5nKTsKKyAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworICAgcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0zMDQsNyArMzUwLDYgQEAKICAgICAgIHJldHVybiBlcnI7IAogICAgfQogCi0gICB5YXJyb3dfZG9uZSgmcHJuZyk7CiAgICByZXR1cm4gQ1JZUFRfT0s7CiAjZW5kaWYKIH0KQEAgLTMxMyw1ICszNTgsNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy95YXJyb3cuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS41ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xNCAwNDoyMToxNyAkICovCmRpZmYgLS1naXQgYS90ZXN0YnVpbGQuc2ggYi90ZXN0YnVpbGQuc2gKaW5kZXggYTE3YzY3Ny4uNmE5ZTNlNiAxMDA2NDQKLS0tIGEvdGVzdGJ1aWxkLnNoCisrKyBiL3Rlc3RidWlsZC5zaApAQCAtMyw3ICszLDcgQEAKIG1ha2UgY2xlYW4gMT4vZGV2L251bGwgMj4vZGV2L251bGwKIGVjaG8gLW4gImJ1aWxkaW5nLi4uIgogdG91Y2ggdGVzdG9rLnR4dAotQ0ZMQUdTPSIkMiIgbWFrZSAtZiAkMyB0ZXN0IHR2X2dlbiAxPmdjY18xLnR4dCAyPmdjY18yLnR4dCB8fCAoZWNobyAiYnVpbGQgJDEgZmFpbGVkIHNlZSBnY2NfMi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24iICYmIGNhdCBnY2NfMi50eHQgJiYgcm0gLWYgdGVzdG9rLnR4dCAmJiBleGl0IDEpCitDRkxBR1M9IiQyICRDRkxBR1MgJDQiIEVYVFJBTElCUz0iJDUiIG1ha2UgLWYgJDMgdGVzdCB0dl9nZW4gMT5nY2NfMS50eHQgMj5nY2NfMi50eHQgfHwgKGVjaG8gImJ1aWxkICQxIGZhaWxlZCBzZWUgZ2NjXzIudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIiAmJiBjYXQgZ2NjXzIudHh0ICYmIHJtIC1mIHRlc3Rvay50eHQgJiYgZXhpdCAxKQogaWYgZmluZCB0ZXN0b2sudHh0IC10eXBlIGYgMT4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCiAgICBlY2hvICJzdWNjZXNzZnVsIgogICAgZXhpdCAwCmRpZmYgLS1naXQgYS90ZXN0bWUuc2ggYi90ZXN0bWUuc2gKaW5kZXggZGEwZjk3Yi4uYjYyZmRhOCAxMDA2NDQKLS0tIGEvdGVzdG1lLnNoCisrKyBiL3Rlc3RtZS5zaApAQCAtOSw0NCArOSw1MCBAQAogCiAjIGdldCB1bmFtZSAKIGVjaG8gInVuYW1lPSJgdW5hbWUgLWFgCisKKyMgZ2V0IGdjYyBuYW1lCitlY2hvICJnY2M9ImBnY2MgLWR1bXB2ZXJzaW9uYAogZWNobwogCiAjIHN0b2NrIGJ1aWxkCi1iYXNoIHJ1bi5zaCAiU1RPQ0siICIgIiAkMSB8fCBleGl0IDEKK2Jhc2ggcnVuLnNoICJTVE9DSyIgIiAiICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQogCiAjIFNNQUxMIGNvZGUKLWJhc2ggcnVuLnNoICJTTUFMTCIgIi1ETFRDX1NNQUxMX0NPREUiICQxIHx8IGV4aXQgMQorYmFzaCBydW4uc2ggIlNNQUxMIiAiLURMVENfU01BTExfQ09ERSIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCiAKICMgTk9UQUJMRVMKLWJhc2ggcnVuLnNoICJOT1RBQkxFUyIgIi1ETFRDX05PX1RBQkxFUyIgJDEgfHwgZXhpdCAxCitiYXNoIHJ1bi5zaCAiTk9UQUJMRVMiICItRExUQ19OT19UQUJMRVMiICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQogCiAjIFNNQUxMK05PVEFCTEVTCi1iYXNoIHJ1bi5zaCAiU01BTEwrTk9UQUJMRVMiICItRExUQ19TTUFMTF9DT0RFIC1ETFRDX05PX1RBQkxFUyIgJDEgfHwgZXhpdCAxCitiYXNoIHJ1bi5zaCAiU01BTEwrTk9UQUJMRVMiICItRExUQ19TTUFMTF9DT0RFIC1ETFRDX05PX1RBQkxFUyIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCiAKICMgQ0xFQU5TVEFDSwotYmFzaCBydW4uc2ggIkNMRUFOU1RBQ0siICItRExUQ19DTEVBTl9TVEFDSyIgJDEgfHwgZXhpdCAxCitiYXNoIHJ1bi5zaCAiQ0xFQU5TVEFDSyIgIi1ETFRDX0NMRUFOX1NUQUNLIiAiJDEiICIkMiIgIiQzIiB8fCBleGl0IDEKIAogIyBDTEVBTlNUQUNLICsgU01BTEwKLWJhc2ggcnVuLnNoICJDTEVBTlNUQUNLK1NNQUxMIiAiLURMVENfU01BTExfQ09ERSAtRExUQ19DTEVBTl9TVEFDSyIgJDEgfHwgZXhpdCAxCitiYXNoIHJ1bi5zaCAiQ0xFQU5TVEFDSytTTUFMTCIgIi1ETFRDX1NNQUxMX0NPREUgLURMVENfQ0xFQU5fU1RBQ0siICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQogCiAjIENMRUFOU1RBQ0sgKyBOT1RBQkxFUwotYmFzaCBydW4uc2ggIkNMRUFOU1RBQ0srTk9UQUJMRVMiICItRExUQ19OT19UQUJMRVMgLURMVENfQ0xFQU5fU1RBQ0siICQxIHx8IGV4aXQgMQorYmFzaCBydW4uc2ggIkNMRUFOU1RBQ0srTk9UQUJMRVMiICItRExUQ19OT19UQUJMRVMgLURMVENfQ0xFQU5fU1RBQ0siICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQogCiAjIENMRUFOU1RBQ0sgKyBOT1RBQkxFUyArIFNNQUxMCi1iYXNoIHJ1bi5zaCAiQ0xFQU5TVEFDSytOT1RBQkxFUytTTUFMTCIgIi1ETFRDX05PX1RBQkxFUyAtRExUQ19DTEVBTl9TVEFDSyAtRExUQ19TTUFMTF9DT0RFIiAkMSB8fCBleGl0IDEKK2Jhc2ggcnVuLnNoICJDTEVBTlNUQUNLK05PVEFCTEVTK1NNQUxMIiAiLURMVENfTk9fVEFCTEVTIC1ETFRDX0NMRUFOX1NUQUNLIC1ETFRDX1NNQUxMX0NPREUiICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQogCiAjIE5PX0ZBU1QKLWJhc2ggcnVuLnNoICJOT19GQVNUIiAiLURMVENfTk9fRkFTVCIgJDEgfHwgZXhpdCAxCitiYXNoIHJ1bi5zaCAiTk9fRkFTVCIgIi1ETFRDX05PX0ZBU1QiICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQorCisjIE5PX0ZBU1QgKyBOT1RBQkxFUworYmFzaCBydW4uc2ggIk5PX0ZBU1QrTk9UQUJMRVMiICItRExUQ19OT19GQVNUIC1ETFRDX05PX1RBQkxFUyIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCiAKICMgTk9fQVNNCi1iYXNoIHJ1bi5zaCAiTk9fQVNNIiAiLURMVENfTk9fQVNNIiAkMSB8fCBleGl0IDEKK2Jhc2ggcnVuLnNoICJOT19BU00iICItRExUQ19OT19BU00iICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQogCiAjIHRlc3QgYnVpbGQgd2l0aCBubyB0ZXN0aW5nCi1iYXNoIHRlc3RidWlsZC5zaCAiTk9URVNUIiAiLURMVENfTk9fVEVTVCIgJDEgfHwgZXhpdCAxCitiYXNoIHRlc3RidWlsZC5zaCAiTk9URVNUIiAiLURMVENfTk9fVEVTVCIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCiAKICMgdGVzdCBidWlsZCB3aXRoIG5vIGZpbGUgcm91dGluZXMKLWJhc2ggdGVzdGJ1aWxkLnNoICJOT0ZJTEUiICItRExUQ19OT19GSUxFIiAkMSB8fCBleGl0IDEKK2Jhc2ggdGVzdGJ1aWxkLnNoICJOT0ZJTEUiICItRExUQ19OT19GSUxFIiAiJDEiICIkMiIgIiQzIiB8fCBleGl0IDEKIAogIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0bWUuc2gsdiAkICAgCi0jICRSZXZpc2lvbjogMS4xNiAkICAgCi0jICREYXRlOiAyMDA1LzA1LzExIDE4OjU5OjUzICQgCisjICRSZXZpc2lvbjogMS4yMCAkICAgCisjICREYXRlOiAyMDA2LzAxLzI2IDE0OjQ5OjQzICQgCmRpZmYgLS1naXQgYS90ZXN0cHJvZi9kZXJfdGVzdHMuYyBiL3Rlc3Rwcm9mL2Rlcl90ZXN0cy5jCmluZGV4IDgxMTkzNTEuLjI4ODE4ODYgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9mL2Rlcl90ZXN0cy5jCisrKyBiL3Rlc3Rwcm9mL2Rlcl90ZXN0cy5jCkBAIC0xLDQgKzEsNyBAQAogI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKyNpZiBkZWZpbmVkKEdNUF9ERVNDKSB8fCBkZWZpbmVkKFVTRV9HTVApCisjaW5jbHVkZSA8Z21wLmg+CisjZW5kaWYKIAogI2lmbmRlZiBMVENfREVSCiAKQEAgLTEwLDEyICsxMyw0NDkgQEAKIAogI2Vsc2UKIAorc3RhdGljIHZvaWQgZGVyX3NldF90ZXN0KHZvaWQpCit7CisgICBsdGNfYXNuMV9saXN0IGxpc3RbMTBdOworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2N0X3N0cltdID0geyAxLCAyLCAzLCA0IH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaW5fc3RyW10gPSB7IDEsIDAsIDAsIDEgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGludF92YWwgICA9IDEyMzQ1Njc4VUw7CisKKyAgIHVuc2lnbmVkIGNoYXIgc3Ryc1sxMF1bMTBdLCBvdXRidWZbMTI4XTsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgdmFsLCBvdXRsZW47CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIAorICAgLyogbWFrZSBzdHJ1Y3R1cmUgYW5kIGVuY29kZSBpdCAqLworICAgTFRDX1NFVF9BU04xKGxpc3QsIDAsIExUQ19BU04xX09DVEVUX1NUUklORywgIG9jdF9zdHIsIHNpemVvZihvY3Rfc3RyKSk7CisgICBMVENfU0VUX0FTTjEobGlzdCwgMSwgTFRDX0FTTjFfQklUX1NUUklORywgICAgYmluX3N0ciwgc2l6ZW9mKGJpbl9zdHIpKTsKKyAgIExUQ19TRVRfQVNOMShsaXN0LCAyLCBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAmaW50X3ZhbCwgMSk7CisgICAKKyAgIC8qIGVuY29kZSBpdCAqLworICAgb3V0bGVuID0gc2l6ZW9mKG91dGJ1Zik7CisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2V0KGxpc3QsIDMsIG91dGJ1ZiwgJm91dGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGVuY29kaW5nIHNldDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorICAKKyAgIC8qIGZpcnN0IGxldCdzIHRlc3QgdGhlIHNldF9kZWNvZGVyIG91dCBvZiBvcmRlciB0byBzZWUgd2hhdCBoYXBwZW5zLCB3ZSBzaG91bGQgZ2V0IGFsbCB0aGUgZmllbGRzIHdlIGV4cGVjdCBldmVuIHRob3VnaCB0aGV5J3JlIGluIGEgZGlmZiBvcmRlciAqLworICAgTFRDX1NFVF9BU04xKGxpc3QsIDAsIExUQ19BU04xX0JJVF9TVFJJTkcsICAgIHN0cnNbMV0sIHNpemVvZihzdHJzWzFdKSk7CisgICBMVENfU0VUX0FTTjEobGlzdCwgMSwgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwgJnZhbCwgMSk7CisgICBMVENfU0VUX0FTTjEobGlzdCwgMiwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgc3Ryc1swXSwgc2l6ZW9mKHN0cnNbMF0pKTsKKyAgIAorICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NldChvdXRidWYsIG91dGxlbiwgbGlzdCwgMykpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGRlY29kaW5nIHNldCB1c2luZyBkZXJfZGVjb2RlX3NldDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorICAgLyogbm93IGNvbXBhcmUgdGhlIGl0ZW1zICovCisgICBpZiAobWVtY21wKHN0cnNbMF0sIG9jdF9zdHIsIHNpemVvZihvY3Rfc3RyKSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgZGVjb2Rpbmcgc2V0IHVzaW5nIGRlcl9kZWNvZGVfc2V0IChvY3Rfc3RyIGlzIHdyb25nKTpcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgICAgCisgICBpZiAobWVtY21wKHN0cnNbMV0sIGJpbl9zdHIsIHNpemVvZihiaW5fc3RyKSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgZGVjb2Rpbmcgc2V0IHVzaW5nIGRlcl9kZWNvZGVfc2V0IChiaW5fc3RyIGlzIHdyb25nKTpcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICBpZiAodmFsICE9IGludF92YWwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgZGVjb2Rpbmcgc2V0IHVzaW5nIGRlcl9kZWNvZGVfc2V0IChpbnRfdmFsIGlzIHdyb25nKTpcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICBzdHJjcHkoKGNoYXIqKXN0cnNbMF0sICJvbmUiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1sxXSwgIm9uZTIiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1syXSwgInR3byIpOworICAgc3RyY3B5KChjaGFyKilzdHJzWzNdLCAiYWFhIik7CisgICBzdHJjcHkoKGNoYXIqKXN0cnNbNF0sICJhYWFhIik7CisgICBzdHJjcHkoKGNoYXIqKXN0cnNbNV0sICJhYWIiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1s2XSwgImFhYWIiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1s3XSwgImJiYiIpOworICAgc3RyY3B5KChjaGFyKilzdHJzWzhdLCAiYmJiYSIpOworICAgc3RyY3B5KChjaGFyKilzdHJzWzldLCAiYmJiYiIpOworICAgCisgICBmb3IgKHggPSAwOyB4IDwgMTA7IHgrKykgeworICAgICAgIExUQ19TRVRfQVNOMShsaXN0LCB4LCBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HLCBzdHJzW3hdLCBzdHJsZW4oKGNoYXIqKXN0cnNbeF0pKTsKKyAgIH0KKyAgIAorICAgb3V0bGVuID0gc2l6ZW9mKG91dGJ1Zik7CisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2V0b2YobGlzdCwgMTAsIG91dGJ1ZiwgJm91dGxlbikpICE9IENSWVBUX09LKSB7ICAgICAgIAorICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBlbmNvZGluZyBTRVQgT0Y6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICB9CisgICAKKyAgIGZvciAoeCA9IDA7IHggPCAxMDsgeCsrKSB7CisgICAgICAgTFRDX1NFVF9BU04xKGxpc3QsIHgsIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkcsIHN0cnNbeF0sIHNpemVvZihzdHJzW3hdKSAtIDEpOworICAgfQorICAgWE1FTVNFVChzdHJzLCAwLCBzaXplb2Yoc3RycykpOworICAgCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2V0KG91dGJ1Ziwgb3V0bGVuLCBsaXN0LCAxMCkpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGRlY29kaW5nIFNFVCBPRjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorICAgLyogbm93IGNvbXBhcmUgKi8KKyAgIGZvciAoeCA9IDE7IHggPCAxMDsgeCsrKSB7CisgICAgICBpZiAoIShzdHJsZW4oKGNoYXIqKXN0cnNbeC0xXSkgPD0gc3RybGVuKChjaGFyKilzdHJzW3hdKSkgJiYgc3RyY21wKChjaGFyKilzdHJzW3gtMV0sIChjaGFyKilzdHJzW3hdKSA+PSAwKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIFNFVCBPRiBvcmRlciBhdCAlbHUgaXMgd3JvbmdcbiIsIHgpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgfSAgICAgIAorICAgCit9CisKKworLyogd2UgYXJlIGVuY29kaW5nIAorCisgIFNFUVVFTkNFIHsKKyAgICAgUFJJTlRBQkxFICJwcmludGFibGUiCisgICAgIElBNSAgICAgICAiaWE1IgorICAgICBTRVFVRU5DRSB7CisgICAgICAgIElOVEVHRVIgMTIzNDU2NzgKKyAgICAgICAgVVRDVElNRSB7IDkxLCA1LCA2LCAxNiwgNDUsIDQwLCAxLCA3LCAwIH0KKyAgICAgICAgU0VRVUVOQ0UgeworICAgICAgICAgICBPQ1RFVCBTVFJJTkcgeyAxLCAyLCAzLCA0IH0KKyAgICAgICAgICAgQklUIFNUUklORyAgIHsgMSwgMCwgMCwgMSB9CisgICAgICAgICAgIFNFUVVFTkNFIHsKKyAgICAgICAgICAgICAgT0lEICAgICAgIHsgMSwgMiwgODQwLCAxMTM1NDkgfQorICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgIFNFVCBPRiB7CisgICAgICAgICAgICAgICAgIFBSSU5UQUJMRSAiMzMzIiAgLy8gV0lMTCBHRVQgU09SVEVECisgICAgICAgICAgICAgICAgIFBSSU5UQUJMRSAiMjIyIgorICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgfQorICB9ICAgICAKKworKi8gIAorCitzdGF0aWMgdm9pZCBkZXJfZmxleGlfdGVzdCh2b2lkKQoreworICAgc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRhYmxlX3N0cltdICAgID0gInByaW50YWJsZSI7CisgICBzdGF0aWMgY29uc3QgY2hhciBzZXQxX3N0cltdICAgICAgICAgPSAiMzMzIjsKKyAgIHN0YXRpYyBjb25zdCBjaGFyIHNldDJfc3RyW10gICAgICAgICA9ICIyMjIiOworICAgc3RhdGljIGNvbnN0IGNoYXIgaWE1X3N0cltdICAgICAgICAgID0gImlhNSI7CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBpbnRfdmFsICAgPSAxMjM0NTY3OFVMOworICAgc3RhdGljIGNvbnN0IGx0Y191dGN0aW1lICAgdXRjdGltZSAgID0geyA5MSwgNSwgNiwgMTYsIDQ1LCA0MCwgMSwgNywgMCB9OworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2N0X3N0cltdID0geyAxLCAyLCAzLCA0IH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaXRfc3RyW10gPSB7IDEsIDAsIDAsIDEgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9pZF9zdHJbXSA9IHsgMSwgMiwgODQwLCAxMTM1NDkgfTsKKyAgIAorICAgdW5zaWduZWQgY2hhciBlbmNvZGVfYnVmWzE5Ml07CisgICB1bnNpZ25lZCBsb25nIGVuY29kZV9idWZfbGVuLCBkZWNvZGVfbGVuOworICAgaW50ICAgICAgICAgICBlcnI7CisgICAKKyAgIGx0Y19hc24xX2xpc3Qgc3RhdGljX2xpc3RbNV1bM10sICpkZWNvZGVkX2xpc3QsICpsOworICAgCisgICAvKiBidWlsZCBsaXN0ICovCisgICBMVENfU0VUX0FTTjEoc3RhdGljX2xpc3RbMF0sIDAsIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkcsICh2b2lkICopcHJpbnRhYmxlX3N0ciwgc3RybGVuKHByaW50YWJsZV9zdHIpKTsKKyAgIExUQ19TRVRfQVNOMShzdGF0aWNfbGlzdFswXSwgMSwgTFRDX0FTTjFfSUE1X1NUUklORywgICAgICAgKHZvaWQgKilpYTVfc3RyLCAgICAgICBzdHJsZW4oaWE1X3N0cikpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzBdLCAyLCBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICBzdGF0aWNfbGlzdFsxXSwgICAzKTsKKyAgIAorICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzFdLCAwLCBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAgICAodm9pZCAqKSZpbnRfdmFsLCAgICAgICAgIDEpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzFdLCAxLCBMVENfQVNOMV9VVENUSU1FLCAgICAgICAgICAodm9pZCAqKSZ1dGN0aW1lLCAgICAgICAgIDEpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzFdLCAyLCBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICBzdGF0aWNfbGlzdFsyXSwgICAzKTsKKworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzJdLCAwLCBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAodm9pZCAqKW9jdF9zdHIsICAgICAgICAgIDQpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzJdLCAxLCBMVENfQVNOMV9CSVRfU1RSSU5HLCAgICAgICAodm9pZCAqKWJpdF9zdHIsICAgICAgICAgIDQpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzJdLCAyLCBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICBzdGF0aWNfbGlzdFszXSwgICAzKTsKKworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzNdLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwodm9pZCAqKW9pZF9zdHIsICAgICAgICAgIDQpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzNdLCAxLCBMVENfQVNOMV9OVUxMLCAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAwKTsKKyAgIExUQ19TRVRfQVNOMShzdGF0aWNfbGlzdFszXSwgMiwgTFRDX0FTTjFfU0VUT0YsICAgICAgICAgICAgc3RhdGljX2xpc3RbNF0sICAgMik7CisKKyAgIExUQ19TRVRfQVNOMShzdGF0aWNfbGlzdFs0XSwgMCwgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORywgc2V0MV9zdHIsIHN0cmxlbihzZXQxX3N0cikpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzRdLCAxLCBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HLCBzZXQyX3N0ciwgc3RybGVuKHNldDJfc3RyKSk7CisKKyAgIC8qIGVuY29kZSBpdCAqLworICAgZW5jb2RlX2J1Zl9sZW4gPSBzaXplb2YoZW5jb2RlX2J1Zik7CisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2UoJnN0YXRpY19saXN0WzBdWzBdLCAzLCBlbmNvZGVfYnVmLCAmZW5jb2RlX2J1Zl9sZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZnByaW50ZihzdGRlcnIsICJFbmNvZGluZyBzdGF0aWNfbGlzdDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorI2lmIDAKKyAgIHsKKyAgICAgRklMRSAqZjsKKyAgICAgZiA9IGZvcGVuKCJ0LmJpbiIsICJ3YiIpOworICAgICBmd3JpdGUoZW5jb2RlX2J1ZiwgMSwgZW5jb2RlX2J1Zl9sZW4sIGYpOworICAgICBmY2xvc2UoZik7CisgICB9IAorI2VuZGlmICAgIAorICAgCisgICAvKiBkZWNvZGUgd2l0aCBmbGV4aSAqLworICAgZGVjb2RlX2xlbiA9IGVuY29kZV9idWZfbGVuOworICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpKGVuY29kZV9idWYsICZkZWNvZGVfbGVuLCAmZGVjb2RlZF9saXN0KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZGVjb2Rpbmcgc3RhdGljX2xpc3Q6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICB9CisgICAKKyAgIGlmIChkZWNvZGVfbGVuICE9IGVuY29kZV9idWZfbGVuKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29kZSBsZW4gb2YgJWx1IGRvZXMgbm90IG1hdGNoIGVuY29kZSBsZW4gb2YgJWx1IFxuIiwgZGVjb2RlX2xlbiwgZW5jb2RlX2J1Zl9sZW4pOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICAvKiB3ZSBleHBlY3QgbC0+bmV4dCB0byBiZSBOVUxMIGFuZCBsLT5jaGlsZCB0byBub3QgYmUgKi8KKyAgIGwgPSBkZWNvZGVkX2xpc3Q7CisgICBpZiAobC0+bmV4dCAhPSBOVUxMIHx8IGwtPmNoaWxkID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICAvKiB3ZSBleHBlY3QgYSBTRVFVRU5DRSAqLworICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfU0VRVUVOQ0UpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbCA9IGwtPmNoaWxkOworICAgICAgICAgCisgICAvKiBQUklOVEFCTEUgU1RSSU5HICovCisgICAgICAvKiB3ZSBleHBlY3QgcHJpbnRhYmxlX3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChsLT5zaXplICE9IHN0cmxlbihwcmludGFibGVfc3RyKSB8fCBtZW1jbXAocHJpbnRhYmxlX3N0ciwgbC0+ZGF0YSwgbC0+c2l6ZSkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgICAgCisgICAvKiBJQTUgU1RSSU5HICovICAgICAgCisgICAgICAvKiB3ZSBleHBlY3QgaWE1X3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfSUE1X1NUUklORykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChsLT5zaXplICE9IHN0cmxlbihpYTVfc3RyKSB8fCBtZW1jbXAoaWE1X3N0ciwgbC0+ZGF0YSwgbC0+c2l6ZSkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgCisgICAvKiBleHBlY3QgY2hpbGQgYW52ZSBtb3ZlIGRvd24gKi8KKyAgICAgIAorICAgICAgaWYgKGwtPm5leHQgIT0gTlVMTCB8fCBsLT5jaGlsZCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfU0VRVUVOQ0UpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbCA9IGwtPmNoaWxkOworICAgICAgCisKKyAgIC8qIElOVEVHRVIgKi8KKyAgIAorICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfSU5URUdFUikgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChtcF9jbXBfZChsLT5kYXRhLCAxMjM0NTY3OFVMKSAhPSBMVENfTVBfRVEpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgICAgCisgICAvKiBVVENUSU1FICovCisgICAgICAgICAKKyAgICAgIGlmIChsLT5uZXh0ID09IE5VTEwgfHwgbC0+Y2hpbGQgIT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX1VUQ1RJTUUpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobWVtY21wKGwtPmRhdGEsICZ1dGN0aW1lLCBzaXplb2YodXRjdGltZSkpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKyAgICAgIAorICAgLyogZXhwZWN0IGNoaWxkIGFudmUgbW92ZSBkb3duICovCisgICAgICAKKyAgICAgIGlmIChsLT5uZXh0ICE9IE5VTEwgfHwgbC0+Y2hpbGQgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX1NFUVVFTkNFKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIGwgPSBsLT5jaGlsZDsKKyAgICAgIAorICAgICAgCisgICAvKiBPQ1RFVCBTVFJJTkcgKi8gICAgICAKKyAgICAgIC8qIHdlIGV4cGVjdCBvY3Rfc3RyICovCisgICAgICBpZiAobC0+bmV4dCA9PSBOVUxMIHx8IGwtPmNoaWxkICE9IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9PQ1RFVF9TVFJJTkcpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobC0+c2l6ZSAhPSBzaXplb2Yob2N0X3N0cikgfHwgbWVtY21wKG9jdF9zdHIsIGwtPmRhdGEsIGwtPnNpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKworICAgLyogQklUIFNUUklORyAqLyAgICAgIAorICAgICAgLyogd2UgZXhwZWN0IG9jdF9zdHIgKi8KKyAgICAgIGlmIChsLT5uZXh0ID09IE5VTEwgfHwgbC0+Y2hpbGQgIT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX0JJVF9TVFJJTkcpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobC0+c2l6ZSAhPSBzaXplb2YoYml0X3N0cikgfHwgbWVtY21wKGJpdF9zdHIsIGwtPmRhdGEsIGwtPnNpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKworICAgLyogZXhwZWN0IGNoaWxkIGFudmUgbW92ZSBkb3duICovCisgICAgICAKKyAgICAgIGlmIChsLT5uZXh0ICE9IE5VTEwgfHwgbC0+Y2hpbGQgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX1NFUVVFTkNFKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIGwgPSBsLT5jaGlsZDsKKworCisgICAvKiBPSUQgU1RSSU5HICovICAgICAgCisgICAgICAvKiB3ZSBleHBlY3Qgb2lkX3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVIpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobC0+c2l6ZSAhPSBzaXplb2Yob2lkX3N0cikvc2l6ZW9mKG9pZF9zdHJbMF0pIHx8IG1lbWNtcChvaWRfc3RyLCBsLT5kYXRhLCBsLT5zaXplKnNpemVvZihvaWRfc3RyWzBdKSkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgICAgCisgICAvKiBOVUxMICovCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9OVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKyAgICAgIAorICAgLyogZXhwZWN0IGNoaWxkIGFudmUgbW92ZSBkb3duICovCisgICAgICBpZiAobC0+bmV4dCAhPSBOVUxMIHx8IGwtPmNoaWxkID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9TRVQpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbCA9IGwtPmNoaWxkOworICAgICAgCisgICAvKiBQUklOVEFCTEUgU1RSSU5HICovCisgICAgICAvKiB3ZSBleHBlY3QgcHJpbnRhYmxlX3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKy8qIG5vdGUgd2UgY29tcGFyZSBzZXQyX3N0ciBGSVJTVCBiZWNhdXNlIHRoZSBTRVQgT0YgaXMgc29ydGVkIGFuZCAiMjIyIiBjb21lcyBiZWZvcmUgIjMzMyIgKi8gICAKKyAgICAgIGlmIChsLT5zaXplICE9IHN0cmxlbihzZXQyX3N0cikgfHwgbWVtY21wKHNldDJfc3RyLCBsLT5kYXRhLCBsLT5zaXplKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIC8qIG1vdmUgdG8gbmV4dCAqLworICAgICAgbCA9IGwtPm5leHQ7CisKKyAgIC8qIFBSSU5UQUJMRSBTVFJJTkcgKi8KKyAgICAgIC8qIHdlIGV4cGVjdCBwcmludGFibGVfc3RyICovCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKGwtPnNpemUgIT0gc3RybGVuKHNldDFfc3RyKSB8fCBtZW1jbXAoc2V0MV9zdHIsIGwtPmRhdGEsIGwtPnNpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorCisgICBkZXJfc2VxdWVuY2VfZnJlZShsKTsKKworfQorCiBzdGF0aWMgaW50IGRlcl9jaG9pY2VfdGVzdCh2b2lkKQogewogICAgbHRjX2FzbjFfbGlzdCB0eXBlc1s3XSwgaG9zdFsxXTsKICAgIHVuc2lnbmVkIGNoYXIgYml0YnVmWzEwXSwgb2N0ZXRidWZbMTBdLCBpYTVidWZbMTBdLCBwcmludGJ1ZlsxMF0sIG91dGJ1ZlsyNTZdOwogICAgdW5zaWduZWQgbG9uZyBpbnRlZ2VyLCBvaWRidWZbMTBdLCBvdXRsZW4sIGlubGVuLCB4LCB5OwotICAgbXBfaW50ICAgICAgICBtcGludGVnZXI7CisgICB2b2lkICAgICAgICAgICptcGludGVnZXI7CiAgICBsdGNfdXRjdGltZSAgIHV0Y3RpbWUgPSB7IDkxLCA1LCA2LCAxNiwgNDUsIDQwLCAxLCA3LCAwIH07CiAKICAgIC8qIHNldHVwIHZhcmlhYmxlcyAqLwpAQCAtMjUsNyArNDY1LDcgQEAKICAgIGZvciAoeCA9IDA7IHggPCBzaXplb2YocHJpbnRidWYpOyB4KyspIHsgcHJpbnRidWZbeF0gPSAnYSc7ICAgfQogICAgaW50ZWdlciA9IDE7CiAgICBmb3IgKHggPSAwOyB4IDwgc2l6ZW9mKG9pZGJ1Zikvc2l6ZW9mKG9pZGJ1ZlswXSk7IHgrKykgICB7IG9pZGJ1Zlt4XSA9IHggKyAxOyAgIH0KLSAgIERPKG1waV90b19sdGNfZXJyb3IobXBfaW5pdCgmbXBpbnRlZ2VyKSkpOworICAgRE8obXBfaW5pdCgmbXBpbnRlZ2VyKSk7CiAKICAgIGZvciAoeCA9IDA7IHggPCAxNDsgeCsrKSB7CiAgICAgICAgLyogc2V0dXAgbGlzdCAqLwpAQCAtMzYsNyArNDc2LDcgQEAKICAgICAgICBpZiAoeCA+IDcpIHsKICAgICAgICAgICBMVENfU0VUX0FTTjEodHlwZXMsIDQsIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICZpbnRlZ2VyLCAxKTsKICAgICAgICB9IGVsc2UgewotICAgICAgICAgIExUQ19TRVRfQVNOMSh0eXBlcywgNCwgTFRDX0FTTjFfSU5URUdFUiwgJm1waW50ZWdlciwgMSk7CisgICAgICAgICAgTFRDX1NFVF9BU04xKHR5cGVzLCA0LCBMVENfQVNOMV9JTlRFR0VSLCBtcGludGVnZXIsIDEpOwogICAgICAgIH0KICAgICAgICBMVENfU0VUX0FTTjEodHlwZXMsIDUsIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSLCBvaWRidWYsIHNpemVvZihvaWRidWYpL3NpemVvZihvaWRidWZbMF0pKTsKICAgICAgICBMVENfU0VUX0FTTjEodHlwZXMsIDYsIExUQ19BU04xX1VUQ1RJTUUsICZ1dGN0aW1lLCAxKTsKQEAgLTUwLDcgKzQ5MCw3IEBACiAKICAgICAgICAvKiBkZWNvZGUgaXQgKi8KICAgICAgICBpbmxlbiA9IG91dGxlbjsKLSAgICAgICBETyhkZXJfZGVjb2RlX3NlcXVlbmNlKG91dGJ1ZiwgaW5sZW4sICZob3N0LCAxKSk7CisgICAgICAgRE8oZGVyX2RlY29kZV9zZXF1ZW5jZShvdXRidWYsIGlubGVuLCAmaG9zdFswXSwgMSkpOwogCiAgICAgICAgZm9yICh5ID0gMDsgeSA8IDc7IHkrKykgewogICAgICAgICAgICBpZiAodHlwZXNbeV0udXNlZCAmJiB5ICE9ICh4PjY/eC03OngpKSB7CkBAIC02Myw3ICs1MDMsNyBAQAogICAgICAgICAgICB9CiAgICAgICB9CiAgIH0KLSAgbXBfY2xlYXIoJm1waW50ZWdlcik7CisgIG1wX2NsZWFyKG1waW50ZWdlcik7CiAgIHJldHVybiAwOwogfQogICAgCkBAIC03Miw3ICs1MTIsNyBAQAogewogICAgdW5zaWduZWQgbG9uZyB4LCB5LCB6LCB6eiwgb2lkWzJdWzMyXTsKICAgIHVuc2lnbmVkIGNoYXIgYnVmWzNdWzIwNDhdOwotICAgbXBfaW50IGEsIGIsIGMsIGQsIGUsIGYsIGc7CisgICB2b2lkICphLCAqYiwgKmMsICpkLCAqZSwgKmYsICpnOwogCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByc2Ffb2lkX2RlcltdID0geyAweDA2LCAweDA2LCAweDJhLCAweDg2LCAweDQ4LCAweDg2LCAweGY3LCAweDBkIH07CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyByc2Ffb2lkW10gICAgID0geyAxLCAyLCA4NDAsIDExMzU0OSB9OwpAQCAtOTIsMjkgKzUzMiwzNiBAQAogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcnNhX3RpbWUxX2RlcltdID0geyAweDE3LCAweDExLCAweDM5LCAweDMxLCAweDMwLCAweDM1LCAweDMwLCAweDM2LCAweDMxLCAweDM2LCAweDM0LCAweDM1LCAweDM0LCAweDMwLCAweDJELCAweDMwLCAweDM3LCAweDMwLCAweDMwIH07CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByc2FfdGltZTJfZGVyW10gPSB7IDB4MTcsIDB4MGQsIDB4MzksIDB4MzEsIDB4MzAsIDB4MzUsIDB4MzAsIDB4MzYsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzQsIDB4MzAsIDB4NWEgfTsKIAotICAgRE8obXBpX3RvX2x0Y19lcnJvcihtcF9pbml0X211bHRpKCZhLCAmYiwgJmMsICZkLCAmZSwgJmYsICZnLCBOVUxMKSkpOworICAgc3RhdGljIGNvbnN0IHdjaGFyX3QgdXRmOF8xW10gICAgICAgICAgID0geyAweDAwNDEsIDB4MjI2MiwgMHgwMzkxLCAweDAwMkUgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHV0ZjhfMV9kZXJbXSA9IHsgMHgwQywgMHgwNywgMHg0MSwgMHhFMiwgMHg4OSwgMHhBMiwgMHhDRSwgMHg5MSwgMHgyRSB9OworICAgc3RhdGljIGNvbnN0IHdjaGFyX3QgdXRmOF8yW10gICAgICAgICAgID0geyAweEQ1NUMsIDB4QUQ2RCwgMHhDNUI0IH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB1dGY4XzJfZGVyW10gPSB7IDB4MEMsIDB4MDksIDB4RUQsIDB4OTUsIDB4OUMsIDB4RUEsIDB4QjUsIDB4QUQsIDB4RUMsIDB4OTYsIDB4QjQgfTsKKworICAgdW5zaWduZWQgY2hhciB1dGY4X2J1ZlszMl07CisgICB3Y2hhcl90IHV0Zjhfb3V0WzMyXTsKKworICAgRE8obXBfaW5pdF9tdWx0aSgmYSwgJmIsICZjLCAmZCwgJmUsICZmLCAmZywgTlVMTCkpOwogICAgZm9yICh6eiA9IDA7IHp6IDwgMTY7IHp6KyspIHsKKyNpZmRlZiBVU0VfVEZNCisgICAgICBmb3IgKHogPSAwOyB6IDwgMjU2OyB6KyspIHsKKyNlbHNlCiAgICAgICBmb3IgKHogPSAwOyB6IDwgMTAyNDsgeisrKSB7CisjZW5kaWYKICAgICAgICAgIGlmICh5YXJyb3dfcmVhZChidWZbMF0sIHosICZ5YXJyb3dfcHJuZykgIT0geikgewogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCAlbHUgYnl0ZXMgZnJvbSB5YXJyb3dcbiIsIHopOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9Ci0gICAgICAgICBETyhtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfdW5zaWduZWRfYmluKCZhLCBidWZbMF0sIHopKSk7Ci0gICAgICAgICBpZiAobXBfaXN6ZXJvKCZhKSA9PSBNUF9OTykgeyBhLnNpZ24gPSBidWZbMF1bMF0gJiAxID8gTVBfWlBPUyA6IE1QX05FRzsgfQorICAgICAgICAgRE8obXBfcmVhZF91bnNpZ25lZF9iaW4oYSwgYnVmWzBdLCB6KSk7CisvKiAgICAgICAgICBpZiAobXBfaXN6ZXJvKGEpID09IExUQ19NUF9OTykgeyBhLnNpZ24gPSBidWZbMF1bMF0gJiAxID8gTFRDX01QX1pQT1MgOiBMVENfTVBfTkVHOyB9ICovCiAgICAgICAgICB4ID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICAgICAgICBETyhkZXJfZW5jb2RlX2ludGVnZXIoJmEsIGJ1ZlswXSwgJngpKTsKLSAgICAgICAgIERPKGRlcl9sZW5ndGhfaW50ZWdlcigmYSwgJnkpKTsKKyAgICAgICAgIERPKGRlcl9lbmNvZGVfaW50ZWdlcihhLCBidWZbMF0sICZ4KSk7CisgICAgICAgICBETyhkZXJfbGVuZ3RoX2ludGVnZXIoYSwgJnkpKTsKICAgICAgICAgIGlmICh5ICE9IHgpIHsgZnByaW50ZihzdGRlcnIsICJERVIgSU5URUdFUiBzaXplIG1pc21hdGNoXG4iKTsgcmV0dXJuIDE7IH0KLSAgICAgICAgIG1wX3plcm8oJmIpOwotICAgICAgICAgRE8oZGVyX2RlY29kZV9pbnRlZ2VyKGJ1ZlswXSwgeSwgJmIpKTsKLSAgICAgICAgIGlmICh5ICE9IHggfHwgbXBfY21wKCZhLCAmYikgIT0gTVBfRVEpIHsKKyAgICAgICAgIG1wX3NldF9pbnQoYiwgMCk7CisgICAgICAgICBETyhkZXJfZGVjb2RlX2ludGVnZXIoYnVmWzBdLCB5LCBiKSk7CisgICAgICAgICBpZiAoeSAhPSB4IHx8IG1wX2NtcChhLCBiKSAhPSBMVENfTVBfRVEpIHsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWx1OiAlbHUgdnMgJWx1XG4iLCB6LCB4LCB5KTsKLSNpZmRlZiBCTl9NUF9UT1JBRElYX0MKLSAgICAgICAgICAgIG1wX3RvZGVjaW1hbCgmYSwgYnVmWzBdKTsKLSAgICAgICAgICAgIG1wX3RvZGVjaW1hbCgmYiwgYnVmWzFdKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYSA9PSAlc1xuYiA9PSAlc1xuIiwgYnVmWzBdLCBidWZbMV0pOwotI2VuZGlmCi0gICAgICAgICAgICBtcF9jbGVhcl9tdWx0aSgmYSwgJmIsICZjLCAmZCwgJmUsICZmLCAmZywgTlVMTCk7CisgICAgICAgICAgICBtcF9jbGVhcl9tdWx0aShhLCBiLCBjLCBkLCBlLCBmLCBnLCBOVUxMKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogICAgICAgfQpAQCAtMTI4LDMzICs1NzUsMzMgQEAKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogICAgICAgICAgLyogZW5jb2RlIHdpdGggbm9ybWFsICovCi0gICAgICAgICBETyhtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfdW5zaWduZWRfYmluKCZhLCBidWZbMF0sIHopKSk7CisgICAgICAgICBETyhtcF9yZWFkX3Vuc2lnbmVkX2JpbihhLCBidWZbMF0sIHopKTsKIAogICAgICAgICAgeCA9IHNpemVvZihidWZbMF0pOwotICAgICAgICAgRE8oZGVyX2VuY29kZV9pbnRlZ2VyKCZhLCBidWZbMF0sICZ4KSk7CisgICAgICAgICBETyhkZXJfZW5jb2RlX2ludGVnZXIoYSwgYnVmWzBdLCAmeCkpOwogCiAgICAgICAgICAvKiBlbmNvZGUgd2l0aCBzaG9ydCAqLwogICAgICAgICAgeSA9IHNpemVvZihidWZbMV0pOwotICAgICAgICAgRE8oZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyKG1wX2dldF9pbnQoJmEpLCBidWZbMV0sICZ5KSk7CisgICAgICAgICBETyhkZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIobXBfZ2V0X2ludChhKSwgYnVmWzFdLCAmeSkpOwogICAgICAgICAgaWYgKHggIT0geSB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIHgpKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRFUiBJTlRFR0VSIHNob3J0IGVuY29kaW5nIGZhaWxlZCwgJWx1LCAlbHVcbiIsIHgsIHkpOwogICAgICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHg7IHorKykgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIGJ1ZlswXVt6XSk7IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCB5OyB6KyspIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCBidWZbMV1bel0pOyBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gICAgICAgICAgICBtcF9jbGVhcl9tdWx0aSgmYSwgJmIsICZjLCAmZCwgJmUsICZmLCAmZywgTlVMTCk7CisgICAgICAgICAgICBtcF9jbGVhcl9tdWx0aShhLCBiLCBjLCBkLCBlLCBmLCBnLCBOVUxMKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogCiAgICAgICAgICAvKiBkZWNvZGUgaXQgKi8KICAgICAgICAgIHggPSAwOwogICAgICAgICAgRE8oZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyKGJ1ZlsxXSwgeSwgJngpKTsKLSAgICAgICAgIGlmICh4ICE9IG1wX2dldF9pbnQoJmEpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRFUiBJTlRFR0VSIHNob3J0IGRlY29kaW5nIGZhaWxlZCwgJWx1LCAlbHVcbiIsIHgsIG1wX2dldF9pbnQoJmEpKTsKLSAgICAgICAgICAgIG1wX2NsZWFyX211bHRpKCZhLCAmYiwgJmMsICZkLCAmZSwgJmYsICZnLCBOVUxMKTsKKyAgICAgICAgIGlmICh4ICE9IG1wX2dldF9pbnQoYSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREVSIElOVEVHRVIgc2hvcnQgZGVjb2RpbmcgZmFpbGVkLCAlbHUsICVsdVxuIiwgeCwgbXBfZ2V0X2ludChhKSk7CisgICAgICAgICAgICBtcF9jbGVhcl9tdWx0aShhLCBiLCBjLCBkLCBlLCBmLCBnLCBOVUxMKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogICAgICAgfQogICAgfSAKLSAgIG1wX2NsZWFyX211bHRpKCZhLCAmYiwgJmMsICZkLCAmZSwgJmYsICZnLCBOVUxMKTsKKyAgIG1wX2NsZWFyX211bHRpKGEsIGIsIGMsIGQsIGUsIGYsIGcsIE5VTEwpOwogCiAgICAKIC8qIFRlc3QgYml0IHN0cmluZyAqLwpAQCAtMTk5LDcgKzY0Niw3IEBACiAKIC8qIHRlc3QgT0lEICovCiAgICB4ID0gc2l6ZW9mKGJ1ZlswXSk7Ci0gICBETyhkZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyKHJzYV9vaWQsIHNpemVvZihyc2Ffb2lkKS9zaXplb2YocnNhX29pZFswXSksIGJ1ZlswXSwgJngpKTsKKyAgIERPKGRlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIoKHVuc2lnbmVkIGxvbmcqKXJzYV9vaWQsIHNpemVvZihyc2Ffb2lkKS9zaXplb2YocnNhX29pZFswXSksIGJ1ZlswXSwgJngpKTsKICAgIGlmICh4ICE9IHNpemVvZihyc2Ffb2lkX2RlcikgfHwgbWVtY21wKHJzYV9vaWRfZGVyLCBidWZbMF0sIHgpKSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV9vaWRfZGVyIGVuY29kZSBmYWlsZWQgdG8gbWF0Y2gsICVsdSwgIiwgeCk7CiAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgYnVmWzBdW3ldKTsKQEAgLTI1OSw0NSArNzA2LDQ1IEBACiAKIC8qIElBNSBzdHJpbmcgKi8KICAgIHggPSBzaXplb2YoYnVmWzBdKTsKLSAgIERPKGRlcl9lbmNvZGVfaWE1X3N0cmluZyhyc2FfaWE1LCBzdHJsZW4ocnNhX2lhNSksIGJ1ZlswXSwgJngpKTsKKyAgIERPKGRlcl9lbmNvZGVfaWE1X3N0cmluZyhyc2FfaWE1LCBzdHJsZW4oKGNoYXIqKXJzYV9pYTUpLCBidWZbMF0sICZ4KSk7CiAgICBpZiAoeCAhPSBzaXplb2YocnNhX2lhNV9kZXIpIHx8IG1lbWNtcChidWZbMF0sIHJzYV9pYTVfZGVyLCB4KSkgewogICAgICAgZnByaW50ZihzdGRlcnIsICJJQTUgZW5jb2RlIGZhaWxlZDogJWx1LCAlbHVcbiIsIHgsICh1bnNpZ25lZCBsb25nKXNpemVvZihyc2FfaWE1X2RlcikpOwogICAgICAgcmV0dXJuIDE7CiAgICB9Ci0gICBETyhkZXJfbGVuZ3RoX2lhNV9zdHJpbmcocnNhX2lhNSwgc3RybGVuKHJzYV9pYTUpLCAmeSkpOworICAgRE8oZGVyX2xlbmd0aF9pYTVfc3RyaW5nKHJzYV9pYTUsIHN0cmxlbigoY2hhciopcnNhX2lhNSksICZ5KSk7CiAgICBpZiAoeSAhPSB4KSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgIklBNSBsZW5ndGggZmFpbGVkIHRvIG1hdGNoOiAlbHUsICVsdVxuIiwgeCwgeSk7CiAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHkgPSBzaXplb2YoYnVmWzFdKTsKICAgIERPKGRlcl9kZWNvZGVfaWE1X3N0cmluZyhidWZbMF0sIHgsIGJ1ZlsxXSwgJnkpKTsKLSAgIGlmICh5ICE9IHN0cmxlbihyc2FfaWE1KSB8fCBtZW1jbXAoYnVmWzFdLCByc2FfaWE1LCBzdHJsZW4ocnNhX2lhNSkpKSB7CisgICBpZiAoeSAhPSBzdHJsZW4oKGNoYXIqKXJzYV9pYTUpIHx8IG1lbWNtcChidWZbMV0sIHJzYV9pYTUsIHN0cmxlbigoY2hhciopcnNhX2lhNSkpKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJERVIgSUE1IGZhaWxlZCB0ZXN0IHZlY3RvclxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAKIC8qIFByaW50YWJsZSBzdHJpbmcgKi8KICAgIHggPSBzaXplb2YoYnVmWzBdKTsKLSAgIERPKGRlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZyhyc2FfcHJpbnRhYmxlLCBzdHJsZW4ocnNhX3ByaW50YWJsZSksIGJ1ZlswXSwgJngpKTsKKyAgIERPKGRlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZyhyc2FfcHJpbnRhYmxlLCBzdHJsZW4oKGNoYXIqKXJzYV9wcmludGFibGUpLCBidWZbMF0sICZ4KSk7CiAgICBpZiAoeCAhPSBzaXplb2YocnNhX3ByaW50YWJsZV9kZXIpIHx8IG1lbWNtcChidWZbMF0sIHJzYV9wcmludGFibGVfZGVyLCB4KSkgewogICAgICAgZnByaW50ZihzdGRlcnIsICJQUklOVEFCTEUgZW5jb2RlIGZhaWxlZDogJWx1LCAlbHVcbiIsIHgsICh1bnNpZ25lZCBsb25nKXNpemVvZihyc2FfcHJpbnRhYmxlX2RlcikpOwogICAgICAgcmV0dXJuIDE7CiAgICB9Ci0gICBETyhkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcocnNhX3ByaW50YWJsZSwgc3RybGVuKHJzYV9wcmludGFibGUpLCAmeSkpOworICAgRE8oZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nKHJzYV9wcmludGFibGUsIHN0cmxlbigoY2hhciopcnNhX3ByaW50YWJsZSksICZ5KSk7CiAgICBpZiAoeSAhPSB4KSB7CiAgICAgICBmcHJpbnRmKHN0ZGVyciwgInByaW50YWJsZSBsZW5ndGggZmFpbGVkIHRvIG1hdGNoOiAlbHUsICVsdVxuIiwgeCwgeSk7CiAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHkgPSBzaXplb2YoYnVmWzFdKTsKICAgIERPKGRlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZyhidWZbMF0sIHgsIGJ1ZlsxXSwgJnkpKTsKLSAgIGlmICh5ICE9IHN0cmxlbihyc2FfcHJpbnRhYmxlKSB8fCBtZW1jbXAoYnVmWzFdLCByc2FfcHJpbnRhYmxlLCBzdHJsZW4ocnNhX3ByaW50YWJsZSkpKSB7CisgICBpZiAoeSAhPSBzdHJsZW4oKGNoYXIqKXJzYV9wcmludGFibGUpIHx8IG1lbWNtcChidWZbMV0sIHJzYV9wcmludGFibGUsIHN0cmxlbigoY2hhciopcnNhX3ByaW50YWJsZSkpKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJERVIgcHJpbnRhYmxlIGZhaWxlZCB0ZXN0IHZlY3RvclxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAKIC8qIFRlc3QgVVRDIHRpbWUgKi8KICAgIHggPSBzaXplb2YoYnVmWzBdKTsKLSAgIERPKGRlcl9lbmNvZGVfdXRjdGltZSgmcnNhX3RpbWUxLCBidWZbMF0sICZ4KSk7CisgICBETyhkZXJfZW5jb2RlX3V0Y3RpbWUoKGx0Y191dGN0aW1lKikmcnNhX3RpbWUxLCBidWZbMF0sICZ4KSk7CiAgICBpZiAoeCAhPSBzaXplb2YocnNhX3RpbWUxX2RlcikgfHwgbWVtY21wKGJ1ZlswXSwgcnNhX3RpbWUxX2RlciwgeCkpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRDVElNRSBlbmNvZGUgb2YgcnNhX3RpbWUxIGZhaWxlZDogJWx1LCAlbHVcbiIsIHgsICh1bnNpZ25lZCBsb25nKXNpemVvZihyc2FfdGltZTFfZGVyKSk7CiBmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKQEAgLTMwNSw3ICs3NTIsNyBAQAogCiAgICAgICByZXR1cm4gMTsKICAgIH0KLSAgIERPKGRlcl9sZW5ndGhfdXRjdGltZSgmcnNhX3RpbWUxLCAmeSkpOworICAgRE8oZGVyX2xlbmd0aF91dGN0aW1lKChsdGNfdXRjdGltZSopJnJzYV90aW1lMSwgJnkpKTsKICAgIGlmICh5ICE9IHgpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRDVElNRSBsZW5ndGggZmFpbGVkIHRvIG1hdGNoIGZvciByc2FfdGltZTE6ICVsdSwgJWx1XG4iLCB4LCB5KTsKICAgICAgIHJldHVybiAxOwpAQCAtMzI3LDcgKzc3NCw3IEBACiAgICB9CiAKICAgIHggPSBzaXplb2YoYnVmWzBdKTsKLSAgIERPKGRlcl9lbmNvZGVfdXRjdGltZSgmcnNhX3RpbWUyLCBidWZbMF0sICZ4KSk7CisgICBETyhkZXJfZW5jb2RlX3V0Y3RpbWUoKGx0Y191dGN0aW1lKikmcnNhX3RpbWUyLCBidWZbMF0sICZ4KSk7CiAgICBpZiAoeCAhPSBzaXplb2YocnNhX3RpbWUyX2RlcikgfHwgbWVtY21wKGJ1ZlswXSwgcnNhX3RpbWUyX2RlciwgeCkpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRDVElNRSBlbmNvZGUgb2YgcnNhX3RpbWUyIGZhaWxlZDogJWx1LCAlbHVcbiIsIHgsICh1bnNpZ25lZCBsb25nKXNpemVvZihyc2FfdGltZTFfZGVyKSk7CiBmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKQEAgLTMzNSw3ICs3ODIsNyBAQAogCiAgICAgICByZXR1cm4gMTsKICAgIH0KLSAgIERPKGRlcl9sZW5ndGhfdXRjdGltZSgmcnNhX3RpbWUyLCAmeSkpOworICAgRE8oZGVyX2xlbmd0aF91dGN0aW1lKChsdGNfdXRjdGltZSopJnJzYV90aW1lMiwgJnkpKTsKICAgIGlmICh5ICE9IHgpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRDVElNRSBsZW5ndGggZmFpbGVkIHRvIG1hdGNoIGZvciByc2FfdGltZTI6ICVsdSwgJWx1XG4iLCB4LCB5KTsKICAgICAgIHJldHVybiAxOwpAQCAtMzU4LDEzICs4MDUsNDkgQEAKICAgICAgIHJldHVybiAxOwogICAgfQogCisgICAvKiBVVEYgOCAqLworICAgICAvKiBlbmNvZGUgaXQgKi8KKyAgICAgeCA9IHNpemVvZih1dGY4X2J1Zik7CisgICAgIERPKGRlcl9lbmNvZGVfdXRmOF9zdHJpbmcodXRmOF8xLCBzaXplb2YodXRmOF8xKSAvIHNpemVvZih1dGY4XzFbMF0pLCB1dGY4X2J1ZiwgJngpKTsKKyAgICAgaWYgKHggIT0gc2l6ZW9mKHV0ZjhfMV9kZXIpIHx8IG1lbWNtcCh1dGY4X2J1ZiwgdXRmOF8xX2RlciwgeCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJERVIgVVRGOF8xIGVuY29kZWQgdG8gJWx1IGJ5dGVzXG4iLCB4KTsKKyAgICAgICAgZm9yICh5ID0gMDsgeSA8IHg7IHkrKykgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsICh1bnNpZ25lZCl1dGY4X2J1Zlt5XSk7IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAgICAgLyogZGVjb2RlIGl0ICovCisgICAgIHkgPSBzaXplb2YodXRmOF9vdXQpIC8gc2l6ZW9mKHV0Zjhfb3V0WzBdKTsKKyAgICAgRE8oZGVyX2RlY29kZV91dGY4X3N0cmluZyh1dGY4X2J1ZiwgeCwgdXRmOF9vdXQsICZ5KSk7CisgICAgIGlmICh5ICE9IChzaXplb2YodXRmOF8xKSAvIHNpemVvZih1dGY4XzFbMF0pKSB8fCBtZW1jbXAodXRmOF8xLCB1dGY4X291dCwgeSAqIHNpemVvZih3Y2hhcl90KSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJERVIgVVRGOF8xIGRlY29kZWQgdG8gJWx1IHdjaGFyX3RcbiIsIHkpOworICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSBmcHJpbnRmKHN0ZGVyciwgIiUwNGx4ICIsICh1bnNpZ25lZCBsb25nKXV0Zjhfb3V0W3hdKTsgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorCisgICAgIC8qIGVuY29kZSBpdCAqLworICAgICB4ID0gc2l6ZW9mKHV0ZjhfYnVmKTsKKyAgICAgRE8oZGVyX2VuY29kZV91dGY4X3N0cmluZyh1dGY4XzIsIHNpemVvZih1dGY4XzIpIC8gc2l6ZW9mKHV0ZjhfMlswXSksIHV0ZjhfYnVmLCAmeCkpOworICAgICBpZiAoeCAhPSBzaXplb2YodXRmOF8yX2RlcikgfHwgbWVtY21wKHV0ZjhfYnVmLCB1dGY4XzJfZGVyLCB4KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRFUiBVVEY4XzIgZW5jb2RlZCB0byAlbHUgYnl0ZXNcbiIsIHgpOworICAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgKHVuc2lnbmVkKXV0ZjhfYnVmW3ldKTsgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorICAgICAvKiBkZWNvZGUgaXQgKi8KKyAgICAgeSA9IHNpemVvZih1dGY4X291dCkgLyBzaXplb2YodXRmOF9vdXRbMF0pOworICAgICBETyhkZXJfZGVjb2RlX3V0Zjhfc3RyaW5nKHV0ZjhfYnVmLCB4LCB1dGY4X291dCwgJnkpKTsKKyAgICAgaWYgKHkgIT0gKHNpemVvZih1dGY4XzIpIC8gc2l6ZW9mKHV0ZjhfMlswXSkpIHx8IG1lbWNtcCh1dGY4XzIsIHV0Zjhfb3V0LCB5ICogc2l6ZW9mKHdjaGFyX3QpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRFUiBVVEY4XzIgZGVjb2RlZCB0byAlbHUgd2NoYXJfdFxuIiwgeSk7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIGZwcmludGYoc3RkZXJyLCAiJTA0bHggIiwgKHVuc2lnbmVkIGxvbmcpdXRmOF9vdXRbeF0pOyBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgICB9CiAKIAorICAgZGVyX3NldF90ZXN0KCk7CisgICBkZXJfZmxleGlfdGVzdCgpOwogICAgcmV0dXJuIGRlcl9jaG9pY2VfdGVzdCgpOwogfQogCiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvZGVyX3Rlc3RzLmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMjAgMjA6Mzc6NDUgJCAqLworLyogJFJldmlzaW9uOiAxLjQ5ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjEwOjIxICQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL2RoX3Rlc3RzLmMgYi90ZXN0cHJvZi9kaF90ZXN0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODUyZTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3Rwcm9mL2RoX3Rlc3RzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KLQotI2lmZGVmIE1ESAotCi1pbnQgZGhfdGVzdHMgKHZvaWQpCi17Ci0gIHVuc2lnbmVkIGNoYXIgYnVmWzNdWzQwOTZdOwotICB1bnNpZ25lZCBsb25nIHgsIHksIHo7Ci0gIGludCAgICAgICAgICAgc3RhdCwgc3RhdDI7Ci0gIGRoX2tleSAgICAgICAgdXNlcmEsIHVzZXJiOwotCi0gIERPKGRoX3Rlc3QoKSk7Ci0KLSAgLyogbWFrZSB1cCB0d28ga2V5cyAqLwotICBETyhkaF9tYWtlX2tleSAoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcgKCJ5YXJyb3ciKSwgNTEyLCAmdXNlcmEpKTsKLSAgRE8oZGhfbWFrZV9rZXkgKCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nICgieWFycm93IiksIDUxMiwgJnVzZXJiKSk7Ci0KLSAgLyogbWFrZSB0aGUgc2hhcmVkIHNlY3JldCAqLwotICB4ID0gNDA5NjsKLSAgRE8oZGhfc2hhcmVkX3NlY3JldCAoJnVzZXJhLCAmdXNlcmIsIGJ1ZlswXSwgJngpKTsKLQotICB5ID0gNDA5NjsKLSAgRE8oZGhfc2hhcmVkX3NlY3JldCAoJnVzZXJiLCAmdXNlcmEsIGJ1ZlsxXSwgJnkpKTsKLSAgaWYgKHkgIT0geCkgewotICAgIGZwcmludGYoc3RkZXJyLCAiREggU2hhcmVkIGtleXMgYXJlIG5vdCBzYW1lIHNpemUuXG4iKTsKLSAgICByZXR1cm4gMTsKLSAgfQotICBpZiAobWVtY21wIChidWZbMF0sIGJ1ZlsxXSwgeCkpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRIIFNoYXJlZCBrZXlzIG5vdCBzYW1lIGNvbnRlbnRzLlxuIik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICAvKiBub3cgZXhwb3J0IHVzZXJiICovCi0gIHkgPSA0MDk2OwotICBETyhkaF9leHBvcnQgKGJ1ZlsxXSwgJnksIFBLX1BVQkxJQywgJnVzZXJiKSk7Ci0JICBkaF9mcmVlICgmdXNlcmIpOwotCi0gIC8qIGltcG9ydCBhbmQgbWFrZSB0aGUgc2hhcmVkIHNlY3JldCBhZ2FpbiAqLwotICBETyhkaF9pbXBvcnQgKGJ1ZlsxXSwgeSwgJnVzZXJiKSk7Ci0gIHogPSA0MDk2OwotICBETyhkaF9zaGFyZWRfc2VjcmV0ICgmdXNlcmEsICZ1c2VyYiwgYnVmWzJdLCAmeikpOwotCi0gIGlmICh6ICE9IHgpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZC4gIFNpemUgZG9uJ3QgbWF0Y2g/XG4iKTsKLSAgICByZXR1cm4gMTsKLSAgfQotICBpZiAobWVtY21wIChidWZbMF0sIGJ1ZlsyXSwgeCkpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZC4gIENvbnRlbnQgZGlkbid0IG1hdGNoLlxuIik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgZGhfZnJlZSAoJnVzZXJhKTsKLSAgZGhfZnJlZSAoJnVzZXJiKTsKLQotLyogdGVzdCBlbmNyeXB0X2tleSAqLwotICBkaF9tYWtlX2tleSAoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcgKCJ5YXJyb3ciKSwgNTEyLCAmdXNlcmEpOwotICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgewotICAgIGJ1ZlswXVt4XSA9IHg7Ci0gIH0KLSAgeSA9IHNpemVvZiAoYnVmWzFdKTsKLSAgRE8oZGhfZW5jcnlwdF9rZXkgKGJ1ZlswXSwgMTYsIGJ1ZlsxXSwgJnksICZ5YXJyb3dfcHJuZywgZmluZF9wcm5nICgieWFycm93IiksIGZpbmRfaGFzaCAoIm1kNSIpLCAmdXNlcmEpKTsKLSAgemVyb21lbSAoYnVmWzBdLCBzaXplb2YgKGJ1ZlswXSkpOwotICB4ID0gc2l6ZW9mIChidWZbMF0pOwotICBETyhkaF9kZWNyeXB0X2tleSAoYnVmWzFdLCB5LCBidWZbMF0sICZ4LCAmdXNlcmEpKTsKLSAgaWYgKHggIT0gMTYpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCAobGVuZ3RoKVxuIik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspCi0gICAgaWYgKGJ1ZlswXVt4XSAhPSB4KSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCAoY29udGVudHMpXG4iKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLQotLyogdGVzdCBzaWduX2hhc2ggKi8KLSAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKLSAgICAgYnVmWzBdW3hdID0geDsKLSAgfQotICB4ID0gc2l6ZW9mIChidWZbMV0pOwotICBETyhkaF9zaWduX2hhc2ggKGJ1ZlswXSwgMTYsIGJ1ZlsxXSwgJngsICZ5YXJyb3dfcHJuZwkJLCBmaW5kX3BybmcgKCJ5YXJyb3ciKSwgJnVzZXJhKSk7Ci0gIERPKGRoX3ZlcmlmeV9oYXNoIChidWZbMV0sIHgsIGJ1ZlswXSwgMTYsICZzdGF0LCAmdXNlcmEpKTsKLSAgYnVmWzBdWzBdIF49IDE7Ci0gIERPKGRoX3ZlcmlmeV9oYXNoIChidWZbMV0sIHgsIGJ1ZlswXSwgMTYsICZzdGF0MiwgJnVzZXJhKSk7Ci0gIGlmICghKHN0YXQgPT0gMSAmJiBzdGF0MiA9PSAwKSkgeyAKLSAgICAgZnByaW50ZihzdGRlcnIsICJkaF9zaWduL3ZlcmlmeV9oYXNoICVkICVkIiwgc3RhdCwgc3RhdDIpOwotICAgICByZXR1cm4gMTsKLSAgfQotICBkaF9mcmVlICgmdXNlcmEpOwotICByZXR1cm4gMDsKLX0KLQotI2Vsc2UKLQotaW50IGRoX3Rlc3RzKHZvaWQpCi17Ci0gICBmcHJpbnRmKHN0ZGVyciwgIk5PUCIpOwotICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCi0vKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9kaF90ZXN0cy5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjUgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMjEgMTI6NTE6MjUgJCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHByb2YvZHNhX3Rlc3QuYyBiL3Rlc3Rwcm9mL2RzYV90ZXN0LmMKaW5kZXggYWE0OTg4Yy4uZjYyMzA5MiAxMDA2NDQKLS0tIGEvdGVzdHByb2YvZHNhX3Rlc3QuYworKysgYi90ZXN0cHJvZi9kc2FfdGVzdC5jCkBAIC01LDcgKzUsNyBAQAogaW50IGRzYV90ZXN0KHZvaWQpCiB7CiAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxNl0sIG91dFsxMDI0XSwgb3V0MlsxMDI0XTsKLSAgIHVuc2lnbmVkIGxvbmcgeDsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKICAgIGludCBzdGF0MSwgc3RhdDI7CiAgICBkc2Ffa2V5IGtleSwga2V5MjsKIApAQCAtMTUsNiArMTUsMjAgQEAKICAgIC8qIHZlcmlmeSBpdCAqLwogICAgRE8oZHNhX3ZlcmlmeV9rZXkoJmtleSwgJnN0YXQxKSk7CiAgICBpZiAoc3RhdDEgPT0gMCkgeyBmcHJpbnRmKHN0ZGVyciwgImRzYV92ZXJpZnlfa2V5ICIpOyByZXR1cm4gMTsgfQorICAgCisgICAvKiBlbmNyeXB0IGEgbWVzc2FnZSAqLworICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsgbXNnW3hdID0geDsgfQorICAgeCA9IHNpemVvZihvdXQpOworICAgRE8oZHNhX2VuY3J5cHRfa2V5KG1zZywgMTYsIG91dCwgJngsICZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgZmluZF9oYXNoKCJzaGExIiksICZrZXkpKTsKKyAgIAorICAgLyogZGVjcnlwdCAqLworICAgeSA9IHNpemVvZihvdXQyKTsKKyAgIERPKGRzYV9kZWNyeXB0X2tleShvdXQsIHgsIG91dDIsICZ5LCAma2V5KSk7CisgICAKKyAgIGlmICh5ICE9IDE2IHx8IG1lbWNtcChvdXQyLCBtc2csIDE2KSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJkc2FfZGVjcnlwdCBmYWlsZWQsIHkgPT0gJWx1XG4iLCB5KTsKKyAgICAgIHJldHVybiAxOworICAgfQogCiAgICAvKiBzaWduIHRoZSBtZXNzYWdlICovCiAgICB4ID0gc2l6ZW9mKG91dCk7CkBAIC02NCw1ICs3OCw1IEBACiAjZW5kaWYKIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvZHNhX3Rlc3QuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS44ICQgKi8KLS8qICREYXRlOiAyMDA1LzA2LzAzIDE5OjI0OjMyICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA1LzEwLzMwIDE4OjQ5OjE0ICQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL2VjY190ZXN0LmMgYi90ZXN0cHJvZi9lY2NfdGVzdC5jCmluZGV4IGQ1Zjg4YWIuLmNjZmFiZTIgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9mL2VjY190ZXN0LmMKKysrIGIvdGVzdHByb2YvZWNjX3Rlc3QuYwpAQCAtMyw2ICszLDE1IEBACiAjaWZkZWYgTUVDQwogCiBzdGF0aWMgaW50IHNpemVzW10gPSB7CisjaWZkZWYgRUNDMTEyCisxNCwKKyNlbmRpZgorI2lmZGVmIEVDQzEyOAorMTYsCisjZW5kaWYKKyNpZmRlZiBFQ0MxNjAKKzIwLAorI2VuZGlmCiAjaWZkZWYgRUNDMTkyCiAyNCwKICNlbmRpZgpAQCAtMTUsMTEgKzI0LDg3IEBACiAjaWZkZWYgRUNDMzg0CiA0OCwKICNlbmRpZgotI2lmZGVmIEVDQzUxMgorI2lmZGVmIEVDQzUyMQogNjUKICNlbmRpZgogfTsKIAorI2lmZGVmIExUQ19FQ0NfU0hBTUlSCitpbnQgZWNjX3Rlc3Rfc2hhbWlyKHZvaWQpCit7CisgICB2b2lkICptb2R1bHVzLCAqbXAsICprQSwgKmtCLCAqckEsICpyQjsKKyAgIGVjY19wb2ludCAqRywgKkEsICpCLCAqQzEsICpDMjsKKyAgIGludCB4LCB5LCB6OworICAgdW5zaWduZWQgY2hhciBidWZbRUNDX0JVRl9TSVpFXTsKKworICAgRE8obXBfaW5pdF9tdWx0aSgma0EsICZrQiwgJnJBLCAmckIsICZtb2R1bHVzLCBOVUxMKSk7CisgICBMVENfQVJHQ0hLKChHICA9IGx0Y19lY2NfbmV3X3BvaW50KCkpICE9IE5VTEwpOworICAgTFRDX0FSR0NISygoQSAgPSBsdGNfZWNjX25ld19wb2ludCgpKSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoKEIgID0gbHRjX2VjY19uZXdfcG9pbnQoKSkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKChDMSA9IGx0Y19lY2NfbmV3X3BvaW50KCkpICE9IE5VTEwpOworICAgTFRDX0FSR0NISygoQzIgPSBsdGNfZWNjX25ld19wb2ludCgpKSAhPSBOVUxMKTsKKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZihzaXplcykvc2l6ZW9mKHNpemVzWzBdKSk7IHgrKykgeworICAgICAgIC8qIGdldCB0aGUgYmFzZSBwb2ludCAqLworICAgICAgIGZvciAoeiA9IDA7IGx0Y19lY2Nfc2V0c1t6XS5uYW1lOyB6KyspIHsKKyAgICAgICAgICAgaWYgKHNpemVzW3pdIDwgbHRjX2VjY19zZXRzW3pdLnNpemUpIGJyZWFrOworICAgICAgIH0KKyAgICAgICBMVENfQVJHQ0hLKGx0Y19lY2Nfc2V0c1t6XS5uYW1lICE9IE5VTEwpOworCisgICAgICAgLyogbG9hZCBpdCAqLworICAgICAgIERPKG1wX3JlYWRfcmFkaXgoRy0+eCwgbHRjX2VjY19zZXRzW3pdLkd4LCAxNikpOworICAgICAgIERPKG1wX3JlYWRfcmFkaXgoRy0+eSwgbHRjX2VjY19zZXRzW3pdLkd5LCAxNikpOworICAgICAgIERPKG1wX3NldChHLT56LCAxKSk7CisgICAgICAgRE8obXBfcmVhZF9yYWRpeChtb2R1bHVzLCBsdGNfZWNjX3NldHNbel0ucHJpbWUsIDE2KSk7CisgICAgICAgRE8obXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKTsKKworICAgICAgIC8qIGRvIDEwMCByYW5kb20gdGVzdHMgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwOyB5KyspIHsKKyAgICAgICAgICAvKiBwaWNrIGEgcmFuZG9tIHIxLCByMiAqLworICAgICAgICAgIExUQ19BUkdDSEsoeWFycm93X3JlYWQoYnVmLCBzaXplc1t4XSwgJnlhcnJvd19wcm5nKSA9PSBzaXplc1t4XSk7CisgICAgICAgICAgRE8obXBfcmVhZF91bnNpZ25lZF9iaW4ockEsIGJ1Ziwgc2l6ZXNbeF0pKTsKKyAgICAgICAgICBMVENfQVJHQ0hLKHlhcnJvd19yZWFkKGJ1Ziwgc2l6ZXNbeF0sICZ5YXJyb3dfcHJuZykgPT0gc2l6ZXNbeF0pOworICAgICAgICAgIERPKG1wX3JlYWRfdW5zaWduZWRfYmluKHJCLCBidWYsIHNpemVzW3hdKSk7CisKKyAgICAgICAgICAvKiBjb21wdXRlIHJBICogRyA9IEEgKi8KKyAgICAgICAgICBETyhsdGNfbXAuZWNjX3B0bXVsKHJBLCBHLCBBLCBtb2R1bHVzLCAxKSk7CisgICAgICAgCisgICAgICAgICAgLyogY29tcHV0ZSByQiAqIEcgPSBCICovCisgICAgICAgICAgRE8obHRjX21wLmVjY19wdG11bChyQiwgRywgQiwgbW9kdWx1cywgMSkpOworCisgICAgICAgICAgLyogcGljayBhIHJhbmRvbSBrQSwga0IgKi8KKyAgICAgICAgICBMVENfQVJHQ0hLKHlhcnJvd19yZWFkKGJ1Ziwgc2l6ZXNbeF0sICZ5YXJyb3dfcHJuZykgPT0gc2l6ZXNbeF0pOworICAgICAgICAgIERPKG1wX3JlYWRfdW5zaWduZWRfYmluKGtBLCBidWYsIHNpemVzW3hdKSk7CisgICAgICAgICAgTFRDX0FSR0NISyh5YXJyb3dfcmVhZChidWYsIHNpemVzW3hdLCAmeWFycm93X3BybmcpID09IHNpemVzW3hdKTsKKyAgICAgICAgICBETyhtcF9yZWFkX3Vuc2lnbmVkX2JpbihrQiwgYnVmLCBzaXplc1t4XSkpOworCisgICAgICAgICAgLyogbm93LCBjb21wdXRlIGtBKkEgKyBrQipCID0gQzEgdXNpbmcgdGhlIG9sZGVyIG1ldGhvZCAqLworICAgICAgICAgIERPKGx0Y19tcC5lY2NfcHRtdWwoa0EsIEEsIEMxLCBtb2R1bHVzLCAwKSk7CisgICAgICAgICAgRE8obHRjX21wLmVjY19wdG11bChrQiwgQiwgQzIsIG1vZHVsdXMsIDApKTsKKyAgICAgICAgICBETyhsdGNfbXAuZWNjX3B0YWRkKEMxLCBDMiwgQzEsIG1vZHVsdXMsIG1wKSk7CisgICAgICAgICAgRE8obHRjX21wLmVjY19tYXAoQzEsIG1vZHVsdXMsIG1wKSk7CisKKyAgICAgICAgICAvKiBub3cgY29tcHV0ZSB1c2luZyBtdWwyYWRkICovCisgICAgICAgICAgRE8obHRjX21wLmVjY19tdWwyYWRkKEEsIGtBLCBCLCBrQiwgQzIsIG1vZHVsdXMpKTsKKworICAgICAgICAgIC8qIGlzIHRoZXkgdGhlIHNhbWVzPyAgKi8KKyAgICAgICAgICBpZiAoKG1wX2NtcChDMS0+eCwgQzItPngpICE9IExUQ19NUF9FUSkgfHwgKG1wX2NtcChDMS0+eSwgQzItPnkpICE9IExUQ19NUF9FUSkgfHwgKG1wX2NtcChDMS0+eiwgQzItPnopICE9IExUQ19NUF9FUSkpIHsKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVDQyBmYWlsZWQgc2hhbWlyIHRlc3Q6IHNpemU9JWQsIHRlc3Rubz0lZFxuIiwgc2l6ZXNbeF0sIHkpOworICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgIH0KKyAgbHRjX2VjY19kZWxfcG9pbnQoQzIpOworICBsdGNfZWNjX2RlbF9wb2ludChDMSk7CisgIGx0Y19lY2NfZGVsX3BvaW50KEIpOworICBsdGNfZWNjX2RlbF9wb2ludChBKTsKKyAgbHRjX2VjY19kZWxfcG9pbnQoRyk7CisgIG1wX2NsZWFyX211bHRpKGtBLCBrQiwgckEsIHJCLCBtb2R1bHVzLCBOVUxMKTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogaW50IGVjY190ZXN0cyAodm9pZCkKIHsKICAgdW5zaWduZWQgY2hhciBidWZbNF1bNDA5Nl07CkBAIC0yOCwxNyArMTEzLDIxIEBACiAgIGVjY19rZXkgdXNlcmEsIHVzZXJiLCBwdWJLZXksIHByaXZLZXk7CiAJCiAgIERPKGVjY190ZXN0ICgpKTsKKyAgRE8oZWNjX3Rlc3QgKCkpOworICBETyhlY2NfdGVzdCAoKSk7CisgIERPKGVjY190ZXN0ICgpKTsKKyAgRE8oZWNjX3Rlc3QgKCkpOwogCi0gIGZvciAocyA9IDA7IHMgPCAoaW50KShzaXplb2Yoc2l6ZXMpL3NpemVvZihzaXplc1swXSkpOyBzKyspIHsKKyAgZm9yIChzID0gMDsgcyA8IChzaXplb2Yoc2l6ZXMpL3NpemVvZihzaXplc1swXSkpOyBzKyspIHsKICAgICAgLyogbWFrZSB1cCB0d28ga2V5cyAqLwogICAgICBETyhlY2NfbWFrZV9rZXkgKCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nICgieWFycm93IiksIHNpemVzW3NdLCAmdXNlcmEpKTsKICAgICAgRE8oZWNjX21ha2Vfa2V5ICgmeWFycm93X3BybmcsIGZpbmRfcHJuZyAoInlhcnJvdyIpLCBzaXplc1tzXSwgJnVzZXJiKSk7CiAKICAgICAgLyogbWFrZSB0aGUgc2hhcmVkIHNlY3JldCAqLwotICAgICB4ID0gNDA5NjsKKyAgICAgeCA9IHNpemVvZihidWZbMF0pOwogICAgICBETyhlY2Nfc2hhcmVkX3NlY3JldCAoJnVzZXJhLCAmdXNlcmIsIGJ1ZlswXSwgJngpKTsKIAotICAgICB5ID0gNDA5NjsKKyAgICAgeSA9IHNpemVvZihidWZbMV0pOwogICAgICBETyhlY2Nfc2hhcmVkX3NlY3JldCAoJnVzZXJiLCAmdXNlcmEsIGJ1ZlsxXSwgJnkpKTsKIAogICAgICBpZiAoeSAhPSB4KSB7CkBAIC01MiwxNCArMTQxLDE0IEBACiAgICAgIH0KIAogICAgICAvKiBub3cgZXhwb3J0IHVzZXJiICovCi0gICAgIHkgPSA0MDk2OworICAgICB5ID0gc2l6ZW9mKGJ1ZlswXSk7CiAgICAgIERPKGVjY19leHBvcnQgKGJ1ZlsxXSwgJnksIFBLX1BVQkxJQywgJnVzZXJiKSk7CiAgICAgIGVjY19mcmVlICgmdXNlcmIpOwogCiAgICAgIC8qIGltcG9ydCBhbmQgbWFrZSB0aGUgc2hhcmVkIHNlY3JldCBhZ2FpbiAqLwogICAgICBETyhlY2NfaW1wb3J0IChidWZbMV0sIHksICZ1c2VyYikpOwogCi0gICAgIHogPSA0MDk2OworICAgICB6ID0gc2l6ZW9mKGJ1ZlswXSk7CiAgICAgIERPKGVjY19zaGFyZWRfc2VjcmV0ICgmdXNlcmEsICZ1c2VyYiwgYnVmWzJdLCAmeikpOwogCiAgICAgIGlmICh6ICE9IHgpIHsKQEAgLTcwLDYgKzE1OSwyOCBAQAogICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkLiAgQ29udGVudHMgZGlkbid0IG1hdGNoLiIpOwogICAgICAgIHJldHVybiAxOwogICAgICB9CisKKyAgICAgLyogZXhwb3J0IHdpdGggQU5TSSBYOS42MyAqLworICAgICB5ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgIERPKGVjY19hbnNpX3g5NjNfZXhwb3J0KCZ1c2VyYiwgYnVmWzFdLCAmeSkpOworICAgICBlY2NfZnJlZSAoJnVzZXJiKTsKKworICAgICAvKiBub3cgaW1wb3J0IHRoZSBBTlNJIGtleSAqLworICAgICBETyhlY2NfYW5zaV94OTYzX2ltcG9ydChidWZbMV0sIHksICZ1c2VyYikpOworCisgICAgIC8qIHNoYXJlZCBzZWNyZXQgKi8KKyAgICAgeiA9IHNpemVvZihidWZbMF0pOworICAgICBETyhlY2Nfc2hhcmVkX3NlY3JldCAoJnVzZXJhLCAmdXNlcmIsIGJ1ZlsyXSwgJnopKTsKKworICAgICBpZiAoeiAhPSB4KSB7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQuICBTaXplIGRvbid0IG1hdGNoPyIpOworICAgICAgIHJldHVybiAxOworICAgICB9CisgICAgIGlmIChtZW1jbXAgKGJ1ZlswXSwgYnVmWzJdLCB4KSkgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkLiAgQ29udGVudHMgZGlkbid0IG1hdGNoLiIpOworICAgICAgIHJldHVybiAxOworICAgICB9CisKICAgICAgZWNjX2ZyZWUgKCZ1c2VyYSk7CiAgICAgIGVjY19mcmVlICgmdXNlcmIpOwogCkBAIC0xMTksNyArMjMwLDExIEBACiAgICAgIGVjY19mcmVlICgmcHViS2V5KTsKICAgICAgZWNjX2ZyZWUgKCZwcml2S2V5KTsKICAgfQorI2lmZGVmIExUQ19FQ0NfU0hBTUlSCisgIHJldHVybiBlY2NfdGVzdF9zaGFtaXIoKTsKKyNlbHNlCiAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKICNlbHNlCkBAIC0xMzMsNSArMjQ4LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9lY2NfdGVzdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjkgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMTQgMTk6NDM6MjkgJCAqLworLyogJFJldmlzaW9uOiAxLjIxICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAzOjIxOjAzICQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL2thdGphX3Rlc3QuYyBiL3Rlc3Rwcm9mL2thdGphX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2QwMWZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHByb2Yva2F0amFfdGVzdC5jCkBAIC0wLDAgKzEsMjMxIEBACisjaW5jbHVkZSA8dG9tY3J5cHRfdGVzdC5oPgorCisjaWZkZWYgTUtBVAorCitpbnQga2F0amFfdGVzdCh2b2lkKQoreworICAgdW5zaWduZWQgY2hhciBpblsxMDI0XSwgb3V0WzEwMjRdLCB0bXBbMTAyNF07CisgICBrYXRqYV9rZXkgICAgIGtleSwgcHJpdktleSwgcHViS2V5OworICAgaW50ICAgICAgICAgICBoYXNoX2lkeCwgcHJuZ19pZHgsIHN0YXQsIHN0YXQyLCBzaXplOworICAgdW5zaWduZWQgbG9uZyBrYXRfbXNnc2l6ZSwgbGVuLCBsZW4yLCBjbnQ7CisgICBzdGF0aWMgdW5zaWduZWQgY2hhciBscGFyYW1bXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworCisgICBoYXNoX2lkeCA9IGZpbmRfaGFzaCgic2hhMSIpOworICAgcHJuZ19pZHggPSBmaW5kX3BybmcoInlhcnJvdyIpOworICAgaWYgKGhhc2hfaWR4ID09IC0xIHx8IHBybmdfaWR4ID09IC0xKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX3Rlc3QgcmVxdWlyZXMgU0hBMSBhbmQgeWFycm93Iik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKworZm9yIChzaXplID0gMTAyNDsgc2l6ZSA8PSAyMDQ4OyBzaXplICs9IDI1NikgeworICAKKyAgIC8qIG1ha2UgMTAgcmFuZG9tIGtleSAqLworICAgZm9yIChjbnQgPSAwOyBjbnQgPCAxMDsgY250KyspIHsKKyAgICAgIERPKGthdGphX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIHNpemUvOCwgJmtleSkpOworICAgICAgaWYgKG1wX2NvdW50X2JpdHMoa2V5Lk4pIDwgc2l6ZSAtIDcpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAia2F0amFfJWQga2V5IG1vZHVsdXMgaGFzICVkIGJpdHNcbiIsIHNpemUsIG1wX2NvdW50X2JpdHMoa2V5Lk4pKTsKKworbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5Lk4pOworbXBfdG9fdW5zaWduZWRfYmluKGtleS5OLCB0bXApOworIGZwcmludGYoc3RkZXJyLCAiTiA9PSBcbiIpOworZm9yIChjbnQgPSAwOyBjbnQgPCBsZW47ICkgeworICAgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIHRtcFtjbnRdKTsKKyAgIGlmICghKCsrY250ICYgMTUpKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK2xlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS5wKTsKK21wX3RvX3Vuc2lnbmVkX2JpbihrZXkucCwgdG1wKTsKKyBmcHJpbnRmKHN0ZGVyciwgInAgPT0gXG4iKTsKK2ZvciAoY250ID0gMDsgY250IDwgbGVuOyApIHsKKyAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCB0bXBbY250XSk7CisgICBpZiAoISgrK2NudCAmIDE1KSkgZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXkucSk7CittcF90b191bnNpZ25lZF9iaW4oa2V5LnEsIHRtcCk7CisgZnByaW50ZihzdGRlcnIsICJcbnEgPT0gXG4iKTsKK2ZvciAoY250ID0gMDsgY250IDwgbGVuOyApIHsKKyAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCB0bXBbY250XSk7CisgICBpZiAoISgrK2NudCAmIDE1KSkgZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGlmIChjbnQgIT0gOSkgeworICAgICAgICAga2F0amFfZnJlZSgma2V5KTsKKyAgICAgIH0KKyAgIH0KKyAgIC8qIGVuY3J5cHQgdGhlIGtleSAod2l0aG91dCBscGFyYW0pICovCisgICBmb3IgKGNudCA9IDA7IGNudCA8IDQ7IGNudCsrKSB7CisgICBmb3IgKGthdF9tc2dzaXplID0gMTsga2F0X21zZ3NpemUgPD0gNDI7IGthdF9tc2dzaXplKyspIHsKKyAgICAgIC8qIG1ha2UgYSByYW5kb20ga2V5L21zZyAqLworICAgICAgeWFycm93X3JlYWQoaW4sIGthdF9tc2dzaXplLCAmeWFycm93X3BybmcpOworCisgICAgICBsZW4gID0gc2l6ZW9mKG91dCk7CisgICAgICBsZW4yID0ga2F0X21zZ3NpemU7CisgICAKKyAgICAgIERPKGthdGphX2VuY3J5cHRfa2V5KGluLCBrYXRfbXNnc2l6ZSwgb3V0LCAmbGVuLCBOVUxMLCAwLCAmeWFycm93X3BybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgJmtleSkpOworICAgICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgICAgb3V0WzhdIF49IDE7CisgICAgICBETyhrYXRqYV9kZWNyeXB0X2tleShvdXQsIGxlbiwgdG1wLCAmbGVuMiwgTlVMTCwgMCwgaGFzaF9pZHgsICZzdGF0MiwgJmtleSkpOworICAgICAgLyogY2hhbmdlIGEgYnl0ZSBiYWNrICovCisgICAgICBvdXRbOF0gXj0gMTsKKyAgICAgIGlmIChsZW4yICE9IGthdF9tc2dzaXplKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxua2F0amFfZGVjcnlwdF9rZXkgbWlzbWF0Y2ggbGVuICVsdSAoZmlyc3QgZGVjcnlwdCkiLCBsZW4yKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorCisgICAgICBsZW4yID0ga2F0X21zZ3NpemU7CisgICAgICBETyhrYXRqYV9kZWNyeXB0X2tleShvdXQsIGxlbiwgdG1wLCAmbGVuMiwgTlVMTCwgMCwgaGFzaF9pZHgsICZzdGF0LCAma2V5KSk7CisgICAgICBpZiAoIShzdGF0ID09IDEgJiYgc3RhdDIgPT0gMCkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAia2F0amFfZGVjcnlwdF9rZXkgZmFpbGVkIik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGlmIChsZW4yICE9IGthdF9tc2dzaXplIHx8IG1lbWNtcCh0bXAsIGluLCBrYXRfbXNnc2l6ZSkpIHsKKyAgICAgICAgIHVuc2lnbmVkIGxvbmcgeDsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5rYXRqYV9kZWNyeXB0X2tleSBtaXNtYXRjaCwgbGVuICVsdSAoc2Vjb25kIGRlY3J5cHQpXG4iLCBsZW4yKTsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3JpZ2luYWwgY29udGVudHM6IFxuIik7IAorICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGthdF9tc2dzaXplOyApIHsKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgaW5beF0pOworICAgICAgICAgICAgIGlmICghKCsreCAlIDE2KSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk91dHB1dCBjb250ZW50czogXG4iKTsgCisgICAgICAgICBmb3IgKHggPSAwOyB4IDwga2F0X21zZ3NpemU7ICkgeworICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCBvdXRbeF0pOworICAgICAgICAgICAgIGlmICghKCsreCAlIDE2KSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9ICAgICAKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgfQorICAgfQorCisgICAvKiBlbmNyeXB0IHRoZSBrZXkgKHdpdGggbHBhcmFtKSAqLworICAgZm9yIChrYXRfbXNnc2l6ZSA9IDE7IGthdF9tc2dzaXplIDw9IDQyOyBrYXRfbXNnc2l6ZSsrKSB7CisgICAgICBsZW4gID0gc2l6ZW9mKG91dCk7CisgICAgICBsZW4yID0ga2F0X21zZ3NpemU7CisgICAgICBETyhrYXRqYV9lbmNyeXB0X2tleShpbiwga2F0X21zZ3NpemUsIG91dCwgJmxlbiwgbHBhcmFtLCBzaXplb2YobHBhcmFtKSwgJnlhcnJvd19wcm5nLCBwcm5nX2lkeCwgaGFzaF9pZHgsICZrZXkpKTsKKyAgICAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgICAgIG91dFs4XSBePSAxOworICAgICAgRE8oa2F0amFfZGVjcnlwdF9rZXkob3V0LCBsZW4sIHRtcCwgJmxlbjIsIGxwYXJhbSwgc2l6ZW9mKGxwYXJhbSksIGhhc2hfaWR4LCAmc3RhdDIsICZrZXkpKTsKKyAgICAgIGlmIChsZW4yICE9IGthdF9tc2dzaXplKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxua2F0amFfZGVjcnlwdF9rZXkgbWlzbWF0Y2ggbGVuICVsdSAoZmlyc3QgZGVjcnlwdCkiLCBsZW4yKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgLyogY2hhbmdlIGEgYnl0ZSBiYWNrICovCisgICAgICBvdXRbOF0gXj0gMTsKKworICAgICAgbGVuMiA9IGthdF9tc2dzaXplOworICAgICAgRE8oa2F0amFfZGVjcnlwdF9rZXkob3V0LCBsZW4sIHRtcCwgJmxlbjIsIGxwYXJhbSwgc2l6ZW9mKGxwYXJhbSksIGhhc2hfaWR4LCAmc3RhdCwgJmtleSkpOworICAgICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX2RlY3J5cHRfa2V5IGZhaWxlZCIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBpZiAobGVuMiAhPSBrYXRfbXNnc2l6ZSB8fCBtZW1jbXAodG1wLCBpbiwga2F0X21zZ3NpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX2RlY3J5cHRfa2V5IG1pc21hdGNoIGxlbiAlbHUiLCBsZW4yKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgfQorCisjaWYgMAorCisgICAvKiBzaWduIGEgbWVzc2FnZSAodW5zYWx0ZWQsIGxvd2VyIGNob2xlc3Rvcm9sIGFuZCBBdGtpbnMgYXBwcm92ZWQpIG5vdyAqLworICAgbGVuID0gc2l6ZW9mKG91dCk7CisgICBETyhrYXRqYV9zaWduX2hhc2goaW4sIDIwLCBvdXQsICZsZW4sICZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCAwLCAma2V5KSk7CisKKy8qIGV4cG9ydCBrZXkgYW5kIGltcG9ydCBhcyBib3RoIHByaXZhdGUgYW5kIHB1YmxpYyAqLworICAgbGVuMiA9IHNpemVvZih0bXApOworICAgRE8oa2F0amFfZXhwb3J0KHRtcCwgJmxlbjIsIFBLX1BSSVZBVEUsICZrZXkpKTsgCisgICBETyhrYXRqYV9pbXBvcnQodG1wLCBsZW4yLCAmcHJpdktleSkpOyAKKyAgIGxlbjIgPSBzaXplb2YodG1wKTsKKyAgIERPKGthdGphX2V4cG9ydCh0bXAsICZsZW4yLCBQS19QVUJMSUMsICZrZXkpKTsKKyAgIERPKGthdGphX2ltcG9ydCh0bXAsIGxlbjIsICZwdWJLZXkpKTsKKworICAgLyogdmVyaWZ5IHdpdGggb3JpZ2luYWwgKi8KKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdCwgJmtleSkpOworICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgaW5bMF0gXj0gMTsKKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdDIsICZrZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX3ZlcmlmeV9oYXNoICh1bnNhbHRlZCwgb3JpZ0tleSkgZmFpbGVkLCAlZCwgJWQiLCBzdGF0LCBzdGF0Mik7CisgICAgICBrYXRqYV9mcmVlKCZrZXkpOworICAgICAga2F0amFfZnJlZSgmcHViS2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnByaXZLZXkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIC8qIHZlcmlmeSB3aXRoIHByaXZLZXkgKi8KKyAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgIGluWzBdIF49IDE7CisgICBETyhrYXRqYV92ZXJpZnlfaGFzaChvdXQsIGxlbiwgaW4sIDIwLCBoYXNoX2lkeCwgMCwgJnN0YXQsICZwcml2S2V5KSk7CisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8oa2F0amFfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDAsICZzdGF0MiwgJnByaXZLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX3ZlcmlmeV9oYXNoICh1bnNhbHRlZCwgcHJpdktleSkgZmFpbGVkLCAlZCwgJWQiLCBzdGF0LCBzdGF0Mik7CisgICAgICBrYXRqYV9mcmVlKCZrZXkpOworICAgICAga2F0amFfZnJlZSgmcHViS2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnByaXZLZXkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIC8qIHZlcmlmeSB3aXRoIHB1YktleSAqLworICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgaW5bMF0gXj0gMTsKKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdCwgJnB1YktleSkpOworICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgaW5bMF0gXj0gMTsKKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdDIsICZwdWJLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX3ZlcmlmeV9oYXNoICh1bnNhbHRlZCwgcHVia2V5KSBmYWlsZWQsICVkLCAlZCIsIHN0YXQsIHN0YXQyKTsKKyAgICAgIGthdGphX2ZyZWUoJmtleSk7CisgICAgICBrYXRqYV9mcmVlKCZwdWJLZXkpOworICAgICAga2F0amFfZnJlZSgmcHJpdktleSk7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKworICAgLyogc2lnbiBhIG1lc3NhZ2UgKHNhbHRlZCkgbm93ICh1c2UgcHJpdktleSB0byBtYWtlLCBwdWJLZXkgdG8gdmVyaWZ5KSAqLworICAgbGVuID0gc2l6ZW9mKG91dCk7CisgICBETyhrYXRqYV9zaWduX2hhc2goaW4sIDIwLCBvdXQsICZsZW4sICZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCA4LCAmcHJpdktleSkpOworICAgRE8oa2F0amFfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDgsICZzdGF0LCAmcHViS2V5KSk7CisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8oa2F0amFfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDgsICZzdGF0MiwgJnB1YktleSkpOworICAgCisgICBpZiAoIShzdGF0ID09IDEgJiYgc3RhdDIgPT0gMCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAia2F0amFfdmVyaWZ5X2hhc2ggKHNhbHRlZCkgZmFpbGVkLCAlZCwgJWQiLCBzdGF0LCBzdGF0Mik7CisgICAgICBrYXRqYV9mcmVlKCZrZXkpOworICAgICAga2F0amFfZnJlZSgmcHViS2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnByaXZLZXkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisjZW5kaWYKKworICAga2F0amFfZnJlZSgma2V5KTsKKyAgIGthdGphX2ZyZWUoJnB1YktleSk7CisgICBrYXRqYV9mcmVlKCZwcml2S2V5KTsKK30KKyAgIAorICAgLyogZnJlZSB0aGUga2V5IGFuZCByZXR1cm4gKi8KKyAgIHJldHVybiAwOworfQorCisjZWxzZQorCitpbnQga2F0amFfdGVzdCh2b2lkKQoreworICAgZnByaW50ZihzdGRlcnIsICJOT1AiKTsKKyAgIHJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL21hY190ZXN0LmMgYi90ZXN0cHJvZi9tYWNfdGVzdC5jCmluZGV4IDNjOWU5MDIuLjQxMGU0YjUgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9mL21hY190ZXN0LmMKKysrIGIvdGVzdHByb2YvbWFjX3Rlc3QuYwpAQCAtMywxNSArMywyMSBAQAogCiBpbnQgbWFjX3Rlc3Qodm9pZCkKIHsKLSNpZmRlZiBITUFDCisjaWZkZWYgTFRDX0hNQUMKICAgIERPKGhtYWNfdGVzdCgpKTsgCiAjZW5kaWYKLSNpZmRlZiBQTUFDCisjaWZkZWYgTFRDX1BNQUMKICAgIERPKHBtYWNfdGVzdCgpKTsgCiAjZW5kaWYKLSNpZmRlZiBPTUFDCisjaWZkZWYgTFRDX09NQUMKICAgIERPKG9tYWNfdGVzdCgpKTsgCiAjZW5kaWYKKyNpZmRlZiBMVENfWENCQworICAgRE8oeGNiY190ZXN0KCkpOworI2VuZGlmCisjaWZkZWYgTFRDX0Y5X01PREUKKyAgIERPKGY5X3Rlc3QoKSk7CisjZW5kaWYKICNpZmRlZiBFQVhfTU9ERQogICAgRE8oZWF4X3Rlc3QoKSk7ICAKICNlbmRpZgpAQCAtMzEsNSArMzcsNSBAQAogfQogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9tYWNfdGVzdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjMgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjE6NTc6MDQgJCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHByb2YvbWFrZWZpbGUgYi90ZXN0cHJvZi9tYWtlZmlsZQppbmRleCBmNGJlNTc3Li40Y2M3MGZmIDEwMDY0NAotLS0gYS90ZXN0cHJvZi9tYWtlZmlsZQorKysgYi90ZXN0cHJvZi9tYWtlZmlsZQpAQCAtMSwxNCArMSwyMyBAQAogQ0ZMQUdTICs9IC1JLi4vc3JjL2hlYWRlcnMgLUkuLyAtV2FsbCAtVwogCi1PQkpFQ1RTID0gYmFzZTY0X3Rlc3QubyBjaXBoZXJfaGFzaF90ZXN0Lm8gZGVyX3Rlc3RzLm8gZGhfdGVzdHMubyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyMgcmFubGliIHRvb2xzCitpZm5kZWYgUkFOTElCCisgICBSQU5MSUI9cmFubGliCitlbmRpZgorCitPQkpFQ1RTID0gYmFzZTY0X3Rlc3QubyBjaXBoZXJfaGFzaF90ZXN0Lm8gZGVyX3Rlc3RzLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIGRzYV90ZXN0Lm8gZWNjX3Rlc3QubyBtYWNfdGVzdC5vIG1vZGVzX3Rlc3QubyBwa2NzXzFfdGVzdC5vIHJzYV90ZXN0Lm8gICAgICAgICAgICAgICAgICAgXAotc3RvcmVfdGVzdC5vIHRlc3QubyB4ODZfcHJvZi5vCitzdG9yZV90ZXN0Lm8gdGVzdF9kcml2ZXIubyB4ODZfcHJvZi5vIGthdGphX3Rlc3QubwogCi1kZWZhdWx0OiBsaWJ0b21jcnlwdF9wcm9mLmEKK2lmbmRlZiBMSUJURVNUX1MKKyAgIExJQlRFU1RfUz1saWJ0b21jcnlwdF9wcm9mLmEKK2VuZGlmCiAKLWxpYnRvbWNyeXB0X3Byb2YuYTogJChPQkpFQ1RTKQotCSQoQVIpICQoQVJGTEFHUykgbGlidG9tY3J5cHRfcHJvZi5hICQoT0JKRUNUUykKLQlyYW5saWIgbGlidG9tY3J5cHRfcHJvZi5hCitkZWZhdWx0OiAkKExJQlRFU1RfUykKKworJChMSUJURVNUX1MpOiAkKE9CSkVDVFMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSkVDVFMpCisJJChSQU5MSUIpICRACiAKIGNsZWFuOgogCXJtIC1mICoubyAqLmEKZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL21ha2VmaWxlLmljYyBiL3Rlc3Rwcm9mL21ha2VmaWxlLmljYwppbmRleCBmZjg3NjYwLi42MDYyOGNlIDEwMDY0NAotLS0gYS90ZXN0cHJvZi9tYWtlZmlsZS5pY2MKKysrIGIvdGVzdHByb2YvbWFrZWZpbGUuaWNjCkBAIC0xLDE0ICsxLDE5IEBACiBDRkxBR1MgKz0gLUkuLi9zcmMvaGVhZGVycyAtSS4vIAogQ0M9aWNjCiAKLU9CSkVDVFMgPSBiYXNlNjRfdGVzdC5vIGNpcGhlcl9oYXNoX3Rlc3QubyBkZXJfdGVzdHMubyBkaF90ZXN0cy5vICAgICAgICAgICAgICAgICAgICAgICAgXAorT0JKRUNUUyA9IGJhc2U2NF90ZXN0Lm8gY2lwaGVyX2hhc2hfdGVzdC5vIGRlcl90ZXN0cy5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiBkc2FfdGVzdC5vIGVjY190ZXN0Lm8gbWFjX3Rlc3QubyBtb2Rlc190ZXN0Lm8gcGtjc18xX3Rlc3QubyByc2FfdGVzdC5vICAgICAgICAgICAgICAgICAgIFwKLXN0b3JlX3Rlc3QubyB0ZXN0Lm8geDg2X3Byb2Yubworc3RvcmVfdGVzdC5vIHRlc3RfZHJpdmVyLm8geDg2X3Byb2YubyBrYXRqYV90ZXN0Lm8KIAotZGVmYXVsdDogbGlidG9tY3J5cHRfcHJvZi5hCitpZm5kZWYgTElCVEVTVF9TCisgICBMSUJURVNUX1MgPSBsaWJ0b21jcnlwdF9wcm9mLmEKK2VuZGlmCiAKLWxpYnRvbWNyeXB0X3Byb2YuYTogJChPQkpFQ1RTKQotCSQoQVIpICQoQVJGTEFHUykgbGlidG9tY3J5cHRfcHJvZi5hICQoT0JKRUNUUykKK2RlZmF1bHQ6ICQoTElCVEVTVF9TKQorCiskKExJQlRFU1RfUyk6ICQoT0JKRUNUUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKRUNUUykKKwlyYW5saWIgJEAKIAogY2xlYW46CiAJcm0gLWYgKi5vICouYQpkaWZmIC0tZ2l0IGEvdGVzdHByb2YvbWFrZWZpbGUubXN2YyBiL3Rlc3Rwcm9mL21ha2VmaWxlLm1zdmMKaW5kZXggNmUxNWZmYi4uZDMzMGY5MyAxMDA2NDQKLS0tIGEvdGVzdHByb2YvbWFrZWZpbGUubXN2YworKysgYi90ZXN0cHJvZi9tYWtlZmlsZS5tc3ZjCkBAIC0xLDggKzEsOCBAQAotQ0ZMQUdTID0gL0kuLi9zcmMvaGVhZGVycy8gL0kuLyAvT3ggL0RXSU4zMiAvVzMgL0ZvJEAKK0NGTEFHUyA9IC9JLi4vc3JjL2hlYWRlcnMvIC9JLi8gL094IC9EV0lOMzIgL0RMVENfU09VUkNFIC9XMyAvRm8kQAogCi1PQkpFQ1RTPWJhc2U2NF90ZXN0Lm9iaiBjaXBoZXJfaGFzaF90ZXN0Lm9iaiBkZXJfdGVzdHMub2JqIGRoX3Rlc3RzLm9iaiBcCitPQkpFQ1RTPWJhc2U2NF90ZXN0Lm9iaiBjaXBoZXJfaGFzaF90ZXN0Lm9iaiBkZXJfdGVzdHMub2JqICAgICAgICAgICAgXAogZHNhX3Rlc3Qub2JqIGVjY190ZXN0Lm9iaiBtYWNfdGVzdC5vYmogbW9kZXNfdGVzdC5vYmogcGtjc18xX3Rlc3Qub2JqIFwKLXJzYV90ZXN0Lm9iaiBzdG9yZV90ZXN0Lm9iaiB0ZXN0Lm9iaiB4ODZfcHJvZi5vYmoKK3JzYV90ZXN0Lm9iaiBzdG9yZV90ZXN0Lm9iaiB0ZXN0X2RyaXZlci5vYmogeDg2X3Byb2Yub2JqIGthdGphX3Rlc3Qub2JqCiAKIHRvbWNyeXB0X3Byb2YubGliOiAkKE9CSkVDVFMpCiAJbGliIC9vdXQ6dG9tY3J5cHRfcHJvZi5saWIgJChPQkpFQ1RTKQpkaWZmIC0tZ2l0IGEvdGVzdHByb2YvbWFrZWZpbGUuc2hhcmVkIGIvdGVzdHByb2YvbWFrZWZpbGUuc2hhcmVkCmluZGV4IGI0MjE5ZjAuLmIzYWJiYTUgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9mL21ha2VmaWxlLnNoYXJlZAorKysgYi90ZXN0cHJvZi9tYWtlZmlsZS5zaGFyZWQKQEAgLTEsMTUgKzEsMjQgQEAKIENDPWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgZ2NjCiAKLUNGTEFHUyArPSAtSS4uL3NyYy9oZWFkZXJzIC1JLi8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mdW5yb2xsLWxvb3BzIC1XYWxsIC1XCitDRkxBR1MgKz0gLUkuLi9zcmMvaGVhZGVycyAtSS4vIC1XYWxsIC1XCiAKLU9CSkVDVFMgPSBiYXNlNjRfdGVzdC5vIGNpcGhlcl9oYXNoX3Rlc3QubyBkZXJfdGVzdHMubyBkaF90ZXN0cy5vICAgICAgICAgICAgICAgICAgICAgICAgXAorIyByYW5saWIgdG9vbHMKK2lmbmRlZiBSQU5MSUIKKyAgIFJBTkxJQj1yYW5saWIKK2VuZGlmCisKK09CSkVDVFMgPSBiYXNlNjRfdGVzdC5vIGNpcGhlcl9oYXNoX3Rlc3QubyBkZXJfdGVzdHMubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogZHNhX3Rlc3QubyBlY2NfdGVzdC5vIG1hY190ZXN0Lm8gbW9kZXNfdGVzdC5vIHBrY3NfMV90ZXN0Lm8gcnNhX3Rlc3QubyAgICAgICAgICAgICAgICAgICBcCi1zdG9yZV90ZXN0Lm8gdGVzdC5vIHg4Nl9wcm9mLm8KK3N0b3JlX3Rlc3QubyB0ZXN0X2RyaXZlci5vIHg4Nl9wcm9mLm8ga2F0amFfdGVzdC5vCiAKLWRlZmF1bHQ6ICQoTElCTkFNRSkKK2lmbmRlZiBMSUJURVNUCisgICBMSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YubGEKK2VuZGlmCiAKLSQoTElCTkFNRSk6ICQoT0JKRUNUUykKLQlsaWJ0b29sIC0tc2lsZW50IC0tbW9kZT1saW5rIGdjYyAkKENGTEFHUykgYGZpbmQgLiAtdHlwZSBmIHwgZ3JlcCAiWy5dbG8iIHwgIHhhcmdzYCAtbyBsaWJ0b21jcnlwdF9wcm9mLmxhIC1ycGF0aCAkKExJQlBBVEgpIC12ZXJzaW9uLWluZm8gJChWRVJTSU9OKQotCWxpYnRvb2wgLS1zaWxlbnQgLS1tb2RlPWxpbmsgZ2NjICQoQ0ZMQUdTKSBgZmluZCAuIC10eXBlIGYgfCBncmVwICJbLl1vIiB8IHhhcmdzYCAgLW8gbGlidG9tY3J5cHRfcHJvZi5hCi0JcmFubGliIGxpYnRvbWNyeXB0X3Byb2YuYQotCWxpYnRvb2wgLS1zaWxlbnQgLS1tb2RlPWluc3RhbGwgaW5zdGFsbCAtYyBsaWJ0b21jcnlwdF9wcm9mLmxhICQoTElCUEFUSCkvbGlidG9tY3J5cHRfcHJvZi5sYQorZGVmYXVsdDogJChMSUJURVNUKQorCiskKExJQlRFU1QpOiAkKE9CSkVDVFMpCisJbGlidG9vbCAtLXNpbGVudCAtLW1vZGU9bGluayBnY2MgJChDRkxBR1MpIGBmaW5kIC4gLXR5cGUgZiB8IGdyZXAgIlsuXWxvIiB8ICB4YXJnc2AgLW8gJEAgLXJwYXRoICQoTElCUEFUSCkgLXZlcnNpb24taW5mbyAkKFZFUlNJT04pCisKK2luc3RhbGw6ICQoTElCVEVTVCkKKwlsaWJ0b29sIC0tc2lsZW50IC0tbW9kZT1pbnN0YWxsIGluc3RhbGwgLWMgJChMSUJURVNUKSAkKERFU1RESVIpJChMSUJQQVRIKS8kKExJQlRFU1QpCmRpZmYgLS1naXQgYS90ZXN0cHJvZi9tb2Rlc190ZXN0LmMgYi90ZXN0cHJvZi9tb2Rlc190ZXN0LmMKaW5kZXggZDM5NDI2Ny4uODk5OWMwZCAxMDA2NDQKLS0tIGEvdGVzdHByb2YvbW9kZXNfdGVzdC5jCisrKyBiL3Rlc3Rwcm9mL21vZGVzX3Rlc3QuYwpAQCAtNSwxMCArNSwxNSBAQAogewogICAgdW5zaWduZWQgY2hhciBwdFs2NF0sIGN0WzY0XSwgdG1wWzY0XSwga2V5WzE2XSwgaXZbMTZdLCBpdjJbMTZdOwogICAgaW50IGNpcGhlcl9pZHg7CisjaWZkZWYgTFRDX0NCQ19NT0RFCiAgICBzeW1tZXRyaWNfQ0JDIGNiYzsKKyNlbmRpZgorI2lmZGVmIExUQ19DRkJfTU9ERQogICAgc3ltbWV0cmljX0NGQiBjZmI7CisjZW5kaWYKKyNpZmRlZiBMVENfT0ZCX01PREUKICAgIHN5bW1ldHJpY19PRkIgb2ZiOwotICAgc3ltbWV0cmljX0NUUiBjdHI7CisjZW5kaWYKICAgIHVuc2lnbmVkIGxvbmcgbDsKICAgIAogICAgLyogbWFrZSBhIHJhbmRvbSBwdCwga2V5IGFuZCBpdiAqLwpAQCAtMjMsNyArMjgsMTUgQEAKICAgICAgIHJldHVybiAxOwogICAgfQogICAgCi0jaWZkZWYgQ0JDCisjaWZkZWYgTFRDX0Y4X01PREUKKyAgIERPKGY4X3Rlc3RfbW9kZSgpKTsKKyNlbmRpZiAgIAorICAgCisjaWZkZWYgTFRDX0xSV19NT0RFCisgICBETyhscndfdGVzdCgpKTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0NCQ19NT0RFCiAgICAvKiB0ZXN0IENCQyBtb2RlICovCiAgICAvKiBlbmNvZGUgdGhlIGJsb2NrICovCiAgICBETyhjYmNfc3RhcnQoY2lwaGVyX2lkeCwgaXYsIGtleSwgMTYsIDAsICZjYmMpKTsKQEAgLTQ1LDcgKzU4LDcgQEAKICAgIH0KICNlbmRpZgogCi0jaWZkZWYgQ0ZCICAgCisjaWZkZWYgTFRDX0NGQl9NT0RFCiAgICAvKiB0ZXN0IENGQiBtb2RlICovCiAgICAvKiBlbmNvZGUgdGhlIGJsb2NrICovCiAgICBETyhjZmJfc3RhcnQoY2lwaGVyX2lkeCwgaXYsIGtleSwgMTYsIDAsICZjZmIpKTsKQEAgLTY4LDcgKzgxLDcgQEAKICAgIH0KICNlbmRpZgogICAgCi0jaWZkZWYgT0ZCCisjaWZkZWYgTFRDX09GQl9NT0RFCiAgICAvKiB0ZXN0IE9GQiBtb2RlICovCiAgICAvKiBlbmNvZGUgdGhlIGJsb2NrICovCiAgICBETyhvZmJfc3RhcnQoY2lwaGVyX2lkeCwgaXYsIGtleSwgMTYsIDAsICZvZmIpKTsKQEAgLTkwLDMxICsxMDMsMTMgQEAKICAgIH0KICNlbmRpZgogCi0jaWZkZWYgQ1RSICAgCi0gICAvKiB0ZXN0IENUUiBtb2RlICovCi0gICAvKiBlbmNvZGUgdGhlIGJsb2NrICovCi0gICBETyhjdHJfc3RhcnQoY2lwaGVyX2lkeCwgaXYsIGtleSwgMTYsIDAsIENUUl9DT1VOVEVSX0xJVFRMRV9FTkRJQU4sICZjdHIpKTsKLSAgIGwgPSBzaXplb2YoaXYyKTsKLSAgIERPKGN0cl9nZXRpdihpdjIsICZsLCAmY3RyKSk7Ci0gICBpZiAobCAhPSAxNiB8fCBtZW1jbXAoaXYyLCBpdiwgMTYpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgImN0cl9nZXRpdiBmYWlsZWQiKTsKLSAgICAgIHJldHVybiAxOwotICAgfQotICAgRE8oY3RyX2VuY3J5cHQocHQsIGN0LCA1NywgJmN0cikpOwotICAgCi0gICAvKiBkZWNvZGUgdGhlIGJsb2NrICovCi0gICBETyhjdHJfc2V0aXYoaXYyLCBsLCAmY3RyKSk7Ci0gICB6ZXJvbWVtKHRtcCwgc2l6ZW9mKHRtcCkpOwotICAgRE8oY3RyX2RlY3J5cHQoY3QsIHRtcCwgNTcsICZjdHIpKTsKLSAgIGlmIChtZW1jbXAodG1wLCBwdCwgNTcpICE9IDApIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1RSIGZhaWxlZCIpOwotICAgICAgcmV0dXJuIDE7Ci0gICB9CisjaWZkZWYgTFRDX0NUUl9NT0RFICAgCisgICBETyhjdHJfdGVzdCgpKTsKICNlbmRpZgogICAgICAgICAgCiAgICByZXR1cm4gMDsKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvbW9kZXNfdGVzdC5jLHYgJCAqLwotLyogJFJldmlzaW9uOiAxLjYgJCAqLwotLyogJERhdGU6IDIwMDUvMDUvMjEgMTI6NTE6MjUgJCAqLworLyogJFJldmlzaW9uOiAxLjE0ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzEzIDExOjU1OjI1ICQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL3BrY3NfMV90ZXN0LmMgYi90ZXN0cHJvZi9wa2NzXzFfdGVzdC5jCmluZGV4IDFhNDdkODUuLmRhNzI1ZmMgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9mL3BrY3NfMV90ZXN0LmMKKysrIGIvdGVzdHByb2YvcGtjc18xX3Rlc3QuYwpAQCAtNSw3ICs1LDcgQEAKIGludCBwa2NzXzFfdGVzdCh2b2lkKQogewogICAgdW5zaWduZWQgY2hhciBidWZbM11bMTI4XTsKLSAgIGludCByZXMxLCByZXMyLCByZXMzLCBwcm5nX2lkeCwgaGFzaF9pZHg7CisgICBpbnQgcmVzMSwgcmVzMiwgcmVzMywgcHJuZ19pZHgsIGhhc2hfaWR4LCBlcnI7CiAgICB1bnNpZ25lZCBsb25nIHgsIHksIGwxLCBsMiwgbDMsIGkxLCBpMiwgbHBhcmFtbGVuLCBzYWx0bGVuLCBtb2RsZW47CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBscGFyYW1bXSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYgfTsKIApAQCAtMTgsNiArMTgsNyBAQAogICAgICAgcmV0dXJuIDE7CiAgICB9ICAgCiAKKyAgIHNyYW5kKHRpbWUoTlVMTCkpOwogICAgLyogZG8gbWFueSB0ZXN0cyAqLwogICAgZm9yICh4ID0gMDsgeCA8IDEwMDsgeCsrKSB7CiAgICAgICB6ZXJvbWVtKGJ1Ziwgc2l6ZW9mKGJ1ZikpOwpAQCAtMjYsOSArMjcsNiBAQAogICAgICAgbDMgPSAocmFuZCgpICYgMzEpICsgODsKICAgICAgIGZvciAoeSA9IDA7IHkgPCBsMzsgeSsrKSBidWZbMF1beV0gPSByYW5kKCkgJiAyNTU7CiAKLSAgICAgIC8qIHJhbmRvbSBtb2R1bHVzIGxlbiAodjEuNSBtdXN0IGJlIG11bHRpcGxlIG9mIDggdGhvdWdoIGFyYml0cmFyeSBzaXplcyBzZWVtIHRvIHdvcmspICovCi0gICAgICBtb2RsZW4gPSA4MDAgKyA4ICogKGFicyhyYW5kKCkpICUgMjgpOwotCiAgICAgICAvKiBwaWNrIGEgcmFuZG9tIGxwYXJhbSBsZW4gWzAuLjE2XSAqLwogICAgICAgbHBhcmFtbGVuID0gYWJzKHJhbmQoKSkgJSAxNzsKIApAQCAtNjksOSArNjcsOCBAQAogICAgICAgRE8ocGtjc18xX3Bzc19kZWNvZGUoYnVmWzBdLCBsMywgYnVmWzFdLCBsMSwgc2FsdGxlbiwgaGFzaF9pZHgsIG1vZGxlbiwgJnJlczIpKTsKIAogICAgICAgYnVmWzBdW2kxXSBePSAxOwotICAgICAgYnVmWzFdW2kyID0gYWJzKHJhbmQoKSkgJSBsMV0gXj0gMTsKLSAgICAgIERPKHBrY3NfMV9wc3NfZGVjb2RlKGJ1ZlswXSwgbDMsIGJ1ZlsxXSwgbDEsIHNhbHRsZW4sIGhhc2hfaWR4LCBtb2RsZW4sICZyZXMzKSk7Ci0KKyAgICAgIGJ1ZlsxXVtpMiA9IGFicyhyYW5kKCkpICUgKGwxIC0gMSldIF49IDE7CisgICAgICBwa2NzXzFfcHNzX2RlY29kZShidWZbMF0sIGwzLCBidWZbMV0sIGwxLCBzYWx0bGVuLCBoYXNoX2lkeCwgbW9kbGVuLCAmcmVzMyk7CiAgICAgICBpZiAoIShyZXMxID09IDEgJiYgcmVzMiA9PSAwICYmIHJlczMgPT0gMCkpIHsKICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUFNTIGZhaWxlZDogJWQsICVkLCAlZCwgJWx1LCAlbHVcbiIsIHJlczEsIHJlczIsIHJlczMsIGwzLCBzYWx0bGVuKTsKICAgICAgICAgIHJldHVybiAxOwpAQCAtOTIsNSArODksNSBAQAogCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3BrY3NfMV90ZXN0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8yMSAxMjo1MToyNSAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8zMCAwMzozMDo0NSAkICovCmRpZmYgLS1naXQgYS90ZXN0cHJvZi9yc2FfdGVzdC5jIGIvdGVzdHByb2YvcnNhX3Rlc3QuYwppbmRleCA0ZmFjZGNkLi40ODY4ZDZiIDEwMDY0NAotLS0gYS90ZXN0cHJvZi9yc2FfdGVzdC5jCisrKyBiL3Rlc3Rwcm9mL3JzYV90ZXN0LmMKQEAgLTQ3LDggKzQ3LDIyIEBACiAgICAweDRhLCAweDlmLCAgfTsKIAogCi0vKioqIE5PVEU6ICBPcGVuU1NMIHNlZW1zIHRvIGhhdmUgbW9yZSB0byB0aGVpciBwdWJsaWMga2V5IGZvcm1hdC4gIEkndmUgc3RyaXBwZWQgdGhlIGV4dHJhIGhlYWRlcnMuLi4gKi8KKy8qKiogb3BlbnNzbCBwdWJsaWMgUlNBIGtleSBpbiBERVIgZm9ybWF0ICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvcGVuc3NsX3B1YmxpY19yc2FbXSA9IHsKKyAgIDB4MzAsIDB4ODEsIDB4OWYsIDB4MzAsIDB4MGQsIDB4MDYsIDB4MDksIDB4MmEsIDB4ODYsIDB4NDgsIDB4ODYsIDB4ZjcsIDB4MGQsIDB4MDEsIDB4MDEsIDB4MDEsCisgICAweDA1LCAweDAwLCAweDAzLCAweDgxLCAweDhkLCAweDAwLCAweDMwLCAweDgxLCAweDg5LCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweGNmLCAweDlhLCAweGRlLAorICAgMHg2NCwgMHg4YSwgMHhkYSwgMHhjOCwgMHgzMywgMHgyMCwgMHhhOSwgMHhkNywgMHg4MywgMHgzMSwgMHgxOSwgMHg1NCwgMHhiMiwgMHg5YSwgMHg4NSwgMHhhNywKKyAgIDB4YTEsIDB4YjcsIDB4NzUsIDB4MzMsIDB4YjYsIDB4YTksIDB4YWMsIDB4ODQsIDB4MjQsIDB4YjMsIDB4ZGUsIDB4ZGIsIDB4N2QsIDB4ODUsIDB4MmQsIDB4OTYsCisgICAweDY1LCAweGU1LCAweDNmLCAweDcyLCAweDk1LCAweDI0LCAweDlmLCAweDI4LCAweDY4LCAweGNhLCAweDRmLCAweGRiLCAweDQ0LCAweDFjLCAweDNlLCAweDYwLAorICAgMHgxMiwgMHg4YSwgMHhkZCwgMHgyNiwgMHhhNSwgMHhlYiwgMHhmZiwgMHgwYiwgMHg1ZSwgMHhkNCwgMHg4OCwgMHgzOCwgMHg0OSwgMHgyYSwgMHg2ZSwgMHg1YiwKKyAgIDB4YmYsIDB4MTIsIDB4MzcsIDB4NDcsIDB4YmQsIDB4MDUsIDB4NmIsIDB4YmMsIDB4ZGIsIDB4ZjMsIDB4ZWUsIDB4ZTQsIDB4MTEsIDB4OGUsIDB4NDEsIDB4NjgsCisgICAweDdjLCAweDYxLCAweDEzLCAweGQ3LCAweDQyLCAweGM4LCAweDgwLCAweGJlLCAweDM2LCAweDhmLCAweGRjLCAweDA4LCAweDhiLCAweDRmLCAweGFjLCAweGE0LAorICAgMHhlMiwgMHg3NiwgMHgwYywgMHhjOSwgMHg2MywgMHg2YywgMHg0OSwgMHg1OCwgMHg5MywgMHhlZCwgMHhjYywgMHhhYSwgMHhkYywgMHgyNSwgMHgzYiwgMHgwYSwKKyAgIDB4NjAsIDB4M2YsIDB4OGIsIDB4NTQsIDB4M2EsIDB4YzMsIDB4NGQsIDB4MzEsIDB4ZTcsIDB4OTQsIDB4YTQsIDB4NDQsIDB4ZmQsIDB4MDIsIDB4MDMsIDB4MDEsCisgICAweDAwLCAweDAxLCAgfTsKKworLyogc2FtZSBrZXkgYnV0IHdpdGggZXh0cmEgaGVhZGVycyBzdHJpcHBlZCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb3BlbnNzbF9wdWJsaWNfcnNhX3N0cmlwcGVkW10gPSB7CiAgICAweDMwLCAweDgxLCAweDg5LCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweGNmLCAweDlhLCAweGRlLCAKICAgIDB4NjQsIDB4OGEsIDB4ZGEsIDB4YzgsIDB4MzMsIDB4MjAsIDB4YTksIDB4ZDcsIDB4ODMsIDB4MzEsIDB4MTksIDB4NTQsIDB4YjIsIDB4OWEsIDB4ODUsIDB4YTcsIAogICAgMHhhMSwgMHhiNywgMHg3NSwgMHgzMywgMHhiNiwgMHhhOSwgMHhhYywgMHg4NCwgMHgyNCwgMHhiMywgMHhkZSwgMHhkYiwgMHg3ZCwgMHg4NSwgMHgyZCwgMHg5NiwgCkBAIC03MywzMyArODcsMzQgQEAKICAgIGxlbiA9IHNpemVvZihidWYpOwogICAgRE8ocnNhX2V4cG9ydChidWYsICZsZW4sIFBLX1BSSVZBVEUsICZrZXkpKTsKICAgIGlmIChsZW4gIT0gc2l6ZW9mKG9wZW5zc2xfcHJpdmF0ZV9yc2EpIHx8IG1lbWNtcChidWYsIG9wZW5zc2xfcHJpdmF0ZV9yc2EsIGxlbikpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBIHByaXZhdGUgZXhwb3J0IGZhaWxlZCB0byBtYXRjaCBPcGVuU1NMIG91dHB1dCwgJWx1LCAlbHVcbiIsIGxlbiwgc2l6ZW9mKG9wZW5zc2xfcHJpdmF0ZV9yc2EpKTsKLQotCi17Ci1pbnQgeDsKLXByaW50ZigiXG5cbiIpOwotZm9yICh4ID0gMDsgeCA8IGxlbjsgKSB7IGlmIChidWZbeF0gPT0gb3BlbnNzbF9wcml2YXRlX3JzYVt4XSkgcHJpbnRmKCItLSAiKTsgZWxzZSBwcmludGYoIiUwMnggIiwgYnVmW3hdXm9wZW5zc2xfcHJpdmF0ZV9yc2FbeF0pOyBpZiAoISgrK3ggJiAxNSkpIHByaW50ZigiXG4iKTsgfQotfQotcHJpbnRmKCJcblxuIik7Ci0KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBIHByaXZhdGUgZXhwb3J0IGZhaWxlZCB0byBtYXRjaCBPcGVuU1NMIG91dHB1dCwgJWx1LCAlbHVcbiIsIGxlbiwgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKG9wZW5zc2xfcHJpdmF0ZV9yc2EpKTsKICAgICAgIHJldHVybiAxOwogICAgfQogCiAgICBsZW4gPSBzaXplb2YoYnVmKTsKICAgIERPKHJzYV9leHBvcnQoYnVmLCAmbGVuLCBQS19QVUJMSUMsICZrZXkpKTsKLSAgIGlmIChsZW4gIT0gc2l6ZW9mKG9wZW5zc2xfcHVibGljX3JzYSkgfHwgbWVtY21wKGJ1Ziwgb3BlbnNzbF9wdWJsaWNfcnNhLCBsZW4pKSB7CisgICBpZiAobGVuICE9IHNpemVvZihvcGVuc3NsX3B1YmxpY19yc2Ffc3RyaXBwZWQpIHx8IG1lbWNtcChidWYsIG9wZW5zc2xfcHVibGljX3JzYV9zdHJpcHBlZCwgbGVuKSkgewogICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EocHJpdmF0ZSkgcHVibGljIGV4cG9ydCBmYWlsZWQgdG8gbWF0Y2ggT3BlblNTTCBvdXRwdXRcbiIpOwogICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByc2FfZnJlZSgma2V5KTsKIAogICAgLyogdHJ5IHJlYWRpbmcgdGhlIHB1YmxpYyBrZXkgKi8KKyAgIERPKHJzYV9pbXBvcnQob3BlbnNzbF9wdWJsaWNfcnNhX3N0cmlwcGVkLCBzaXplb2Yob3BlbnNzbF9wdWJsaWNfcnNhX3N0cmlwcGVkKSwgJmtleSkpOworICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICBETyhyc2FfZXhwb3J0KGJ1ZiwgJmxlbiwgUEtfUFVCTElDLCAma2V5KSk7CisgICBpZiAobGVuICE9IHNpemVvZihvcGVuc3NsX3B1YmxpY19yc2Ffc3RyaXBwZWQpIHx8IG1lbWNtcChidWYsIG9wZW5zc2xfcHVibGljX3JzYV9zdHJpcHBlZCwgbGVuKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EocHVibGljKSBzdHJpcHBlZCBwdWJsaWMgaW1wb3J0IGZhaWxlZCB0byBtYXRjaCBPcGVuU1NMIG91dHB1dFxuIik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIHJzYV9mcmVlKCZrZXkpOworCisgICAvKiB0cnkgcmVhZGluZyB0aGUgcHVibGljIGtleSAqLwogICAgRE8ocnNhX2ltcG9ydChvcGVuc3NsX3B1YmxpY19yc2EsIHNpemVvZihvcGVuc3NsX3B1YmxpY19yc2EpLCAma2V5KSk7CiAgICBsZW4gPSBzaXplb2YoYnVmKTsKICAgIERPKHJzYV9leHBvcnQoYnVmLCAmbGVuLCBQS19QVUJMSUMsICZrZXkpKTsKLSAgIGlmIChsZW4gIT0gc2l6ZW9mKG9wZW5zc2xfcHVibGljX3JzYSkgfHwgbWVtY21wKGJ1Ziwgb3BlbnNzbF9wdWJsaWNfcnNhLCBsZW4pKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIlJTQShwdWJsaWMpIHB1YmxpYyBleHBvcnQgZmFpbGVkIHRvIG1hdGNoIE9wZW5TU0wgb3V0cHV0XG4iKTsKKyAgIGlmIChsZW4gIT0gc2l6ZW9mKG9wZW5zc2xfcHVibGljX3JzYV9zdHJpcHBlZCkgfHwgbWVtY21wKGJ1Ziwgb3BlbnNzbF9wdWJsaWNfcnNhX3N0cmlwcGVkLCBsZW4pKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJTQShwdWJsaWMpIFNTTCBwdWJsaWMgaW1wb3J0IGZhaWxlZCB0byBtYXRjaCBPcGVuU1NMIG91dHB1dFxuIik7CiAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJzYV9mcmVlKCZrZXkpOwpAQCAtMTI5LDI3ICsxNDQsMjcgQEAKICAgIC8qIG1ha2UgMTAgcmFuZG9tIGtleSAqLwogICAgZm9yIChjbnQgPSAwOyBjbnQgPCAxMDsgY250KyspIHsKICAgICAgIERPKHJzYV9tYWtlX2tleSgmeWFycm93X3BybmcsIHBybmdfaWR4LCAxMDI0LzgsIDY1NTM3LCAma2V5KSk7Ci0gICAgICBpZiAobXBfY291bnRfYml0cygma2V5Lk4pICE9IDEwMjQpIHsKLSAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicnNhXzEwMjQga2V5IG1vZHVsdXMgaGFzICVkIGJpdHNcbiIsIG1wX2NvdW50X2JpdHMoJmtleS5OKSk7CisgICAgICBpZiAobXBfY291bnRfYml0cyhrZXkuTikgIT0gMTAyNCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJyc2FfMTAyNCBrZXkgbW9kdWx1cyBoYXMgJWQgYml0c1xuIiwgbXBfY291bnRfYml0cyhrZXkuTikpOwogCi1sZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgma2V5Lk4pOwotbXBfdG9fdW5zaWduZWRfYmluKCZrZXkuTiwgdG1wKTsKK2xlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS5OKTsKK21wX3RvX3Vuc2lnbmVkX2JpbihrZXkuTiwgdG1wKTsKICBmcHJpbnRmKHN0ZGVyciwgIk4gPT0gXG4iKTsKIGZvciAoY250ID0gMDsgY250IDwgbGVuOyApIHsKICAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCB0bXBbY250XSk7CiAgICBpZiAoISgrK2NudCAmIDE1KSkgZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQogCi1sZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgma2V5LnApOwotbXBfdG9fdW5zaWduZWRfYmluKCZrZXkucCwgdG1wKTsKK2xlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS5wKTsKK21wX3RvX3Vuc2lnbmVkX2JpbihrZXkucCwgdG1wKTsKICBmcHJpbnRmKHN0ZGVyciwgInAgPT0gXG4iKTsKIGZvciAoY250ID0gMDsgY250IDwgbGVuOyApIHsKICAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCB0bXBbY250XSk7CiAgICBpZiAoISgrK2NudCAmIDE1KSkgZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQogCi1sZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgma2V5LnEpOwotbXBfdG9fdW5zaWduZWRfYmluKCZrZXkucSwgdG1wKTsKK2xlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS5xKTsKK21wX3RvX3Vuc2lnbmVkX2JpbihrZXkucSwgdG1wKTsKICBmcHJpbnRmKHN0ZGVyciwgIlxucSA9PSBcbiIpOwogZm9yIChjbnQgPSAwOyBjbnQgPCBsZW47ICkgewogICAgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIHRtcFtjbnRdKTsKQEAgLTI0Miw2ICsyNTcsMjQgQEAKICAgICAgIH0KICAgIH0KIAorICAgLyogZW5jcnlwdCB0aGUga2V5IFBLQ1MgIzEgdjEuNSAocGF5bG9hZCBmcm9tIDEgdG8gMTE3IGJ5dGVzKSAqLworICAgZm9yIChyc2FfbXNnc2l6ZSA9IDE7IHJzYV9tc2dzaXplIDw9IDExNzsgcnNhX21zZ3NpemUrKykgeworICAgICAgbGVuICA9IHNpemVvZihvdXQpOworICAgICAgbGVuMiA9IHJzYV9tc2dzaXplOworICAgICAgRE8ocnNhX2VuY3J5cHRfa2V5X2V4KGluLCByc2FfbXNnc2l6ZSwgb3V0LCAmbGVuLCBOVUxMLCAwLCAmeWFycm93X3BybmcsIHBybmdfaWR4LCAwLCBMVENfUEtDU18xX1YxXzUsICZrZXkpKTsKKworICAgICAgbGVuMiA9IHJzYV9tc2dzaXplOworICAgICAgRE8ocnNhX2RlY3J5cHRfa2V5X2V4KG91dCwgbGVuLCB0bXAsICZsZW4yLCBOVUxMLCAwLCAwLCBMVENfUEtDU18xX1YxXzUsICZzdGF0LCAma2V5KSk7CisgICAgICBpZiAoIShzdGF0ID09IDEgJiYgc3RhdDIgPT0gMCkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicnNhX2RlY3J5cHRfa2V5X2V4IGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBpZiAobGVuMiAhPSByc2FfbXNnc2l6ZSB8fCBtZW1jbXAodG1wLCBpbiwgcnNhX21zZ3NpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV9kZWNyeXB0X2tleV9leCBtaXNtYXRjaCBsZW4gJWx1IiwgbGVuMik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgIH0KKwogICAgLyogc2lnbiBhIG1lc3NhZ2UgKHVuc2FsdGVkLCBsb3dlciBjaG9sZXN0b3JvbCBhbmQgQXRraW5zIGFwcHJvdmVkKSBub3cgKi8KICAgIGxlbiA9IHNpemVvZihvdXQpOwogICAgRE8ocnNhX3NpZ25faGFzaChpbiwgMjAsIG91dCwgJmxlbiwgJnlhcnJvd19wcm5nLCBwcm5nX2lkeCwgaGFzaF9pZHgsIDAsICZrZXkpKTsKQEAgLTMxNiw2ICszNDksMjIgQEAKICAgICAgIHJldHVybiAxOwogICAgfQogICAgCisgICAvKiBzaWduIGEgbWVzc2FnZSB3aXRoIFBLQ1MgIzEgdjEuNSAqLworICAgbGVuID0gc2l6ZW9mKG91dCk7CisgICBETyhyc2Ffc2lnbl9oYXNoX2V4KGluLCAyMCwgb3V0LCAmbGVuLCBMVENfUEtDU18xX1YxXzUsICZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCA4LCAmcHJpdktleSkpOworICAgRE8ocnNhX3ZlcmlmeV9oYXNoX2V4KG91dCwgbGVuLCBpbiwgMjAsIExUQ19QS0NTXzFfVjFfNSwgaGFzaF9pZHgsIDgsICZzdGF0LCAmcHViS2V5KSk7CisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8ocnNhX3ZlcmlmeV9oYXNoX2V4KG91dCwgbGVuLCBpbiwgMjAsIExUQ19QS0NTXzFfVjFfNSwgaGFzaF9pZHgsIDgsICZzdGF0MiwgJnB1YktleSkpOworICAgCisgICBpZiAoIShzdGF0ID09IDEgJiYgc3RhdDIgPT0gMCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicnNhX3ZlcmlmeV9oYXNoX2V4IGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAgcnNhX2ZyZWUoJmtleSk7CisgICAgICByc2FfZnJlZSgmcHViS2V5KTsKKyAgICAgIHJzYV9mcmVlKCZwcml2S2V5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorCiAgICAvKiBmcmVlIHRoZSBrZXkgYW5kIHJldHVybiAqLwogICAgcnNhX2ZyZWUoJmtleSk7CiAgICByc2FfZnJlZSgmcHViS2V5KTsKQEAgLTMzNCw1ICszODMsNSBAQAogI2VuZGlmCiAKIC8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3JzYV90ZXN0LmMsdiAkICovCi0vKiAkUmV2aXNpb246IDEuMTAgJCAqLwotLyogJERhdGU6IDIwMDUvMDYvMDMgMTk6MTg6MzMgJCAqLworLyogJFJldmlzaW9uOiAxLjE4ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjEwOjE4ICQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL3Rlc3QuYyBiL3Rlc3Rwcm9mL3Rlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEzODQyMS4uMDAwMDAwMAotLS0gYS90ZXN0cHJvZi90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaW5jbHVkZSA8dG9tY3J5cHRfdGVzdC5oPgotCi12b2lkIHJ1bl9jbWQoaW50IHJlcywgaW50IGxpbmUsIGNoYXIgKmZpbGUsIGNoYXIgKmNtZCkKLXsKLSAgIGlmIChyZXMgIT0gQ1JZUFRfT0spIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgKCVkKVxuJXM6JWQ6JXNcbiIsIGVycm9yX3RvX3N0cmluZyhyZXMpLCByZXMsIGZpbGUsIGxpbmUsIGNtZCk7Ci0gICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICB9Ci19Ci0KLS8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3Rlc3QuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS42ICQgKi8KLS8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU5ICQgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL3Rlc3QuZGVyIGIvdGVzdHByb2YvdGVzdC5kZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNDFmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Rwcm9mL3Rlc3QuZGVyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3Rwcm9mL3Rlc3RfZHJpdmVyLmMgYi90ZXN0cHJvZi90ZXN0X2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NzQwYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZi90ZXN0X2RyaXZlci5jCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlIDx0b21jcnlwdF90ZXN0Lmg+CisKK3ZvaWQgcnVuX2NtZChpbnQgcmVzLCBpbnQgbGluZSwgY2hhciAqZmlsZSwgY2hhciAqY21kKQoreworICAgaWYgKHJlcyAhPSBDUllQVF9PSykgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlcyAoJWQpXG4lczolZDolc1xuIiwgZXJyb3JfdG9fc3RyaW5nKHJlcyksIHJlcywgZmlsZSwgbGluZSwgY21kKTsKKyAgICAgIGlmIChyZXMgIT0gQ1JZUFRfTk9QKSB7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICB9Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3Rlc3RfZHJpdmVyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xMyAyMzoxNDozMyAkICovCmRpZmYgLS1naXQgYS90ZXN0cHJvZi90b21jcnlwdF90ZXN0LmggYi90ZXN0cHJvZi90b21jcnlwdF90ZXN0LmgKaW5kZXggMmM2NmJhZC4uYjQzOTZmYiAxMDA2NDQKLS0tIGEvdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCisrKyBiL3Rlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaApAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlIDx0b21jcnlwdC5oPgogCiAvKiBlbmFibGUgc3RhY2sgdGVzdGluZyAqLwotLy8gI2RlZmluZSBTVEFDS19URVNUCisvKiAjZGVmaW5lIFNUQUNLX1RFU1QgKi8KIAogLyogc3RhY2sgdGVzdGluZywgZGVmaW5lIHRoaXMgaWYgc3RhY2sgdXNhZ2UgZ29lcyBkb3dud2FyZHMgW2UuZy4geDg2XSAqLwogI2RlZmluZSBTVEFDS19ET1dOCkBAIC0xOCw3ICsxOCwxMiBAQAogZXh0ZXJuIHBybmdfc3RhdGUgeWFycm93X3Bybmc7CiAKIHZvaWQgcnVuX2NtZChpbnQgcmVzLCBpbnQgbGluZSwgY2hhciAqZmlsZSwgY2hhciAqY21kKTsKLSNkZWZpbmUgRE8oeCkgeyBydW5fY21kKCh4KSwgX19MSU5FX18sIF9fRklMRV9fLCAjeCk7IH0KKworI2lmZGVmIExUQ19WRVJCT1NFCisjZGVmaW5lIERPKHgpIGRvIHsgZnByaW50ZihzdGRlcnIsICIlczpcbiIsICN4KTsgcnVuX2NtZCgoeCksIF9fTElORV9fLCBfX0ZJTEVfXywgI3gpOyB9IHdoaWxlICgwKTsKKyNlbHNlCisjZGVmaW5lIERPKHgpIGRvIHsgcnVuX2NtZCgoeCksIF9fTElORV9fLCBfX0ZJTEVfXywgI3gpOyB9IHdoaWxlICgwKTsKKyNlbmRpZgogCiAvKiBURVNUUyAqLwogaW50IGNpcGhlcl9oYXNoX3Rlc3Qodm9pZCk7CkBAIC0yNyw5ICszMiw5IEBACiBpbnQgcGtjc18xX3Rlc3Qodm9pZCk7CiBpbnQgc3RvcmVfdGVzdCh2b2lkKTsKIGludCByc2FfdGVzdCh2b2lkKTsKK2ludCBrYXRqYV90ZXN0KHZvaWQpOwogaW50IGVjY190ZXN0cyh2b2lkKTsKIGludCBkc2FfdGVzdCh2b2lkKTsKLWludCBkaF90ZXN0cyh2b2lkKTsKIGludCBkZXJfdGVzdHModm9pZCk7CiAKIC8qIHRpbWluZyAqLwpAQCAtNjIsOCArNjcsOSBAQAogdm9pZCB0aW1lX3Nxcih2b2lkKTsKIHZvaWQgdGltZV9wcm5nKHZvaWQpOwogdm9pZCB0aW1lX3JzYSh2b2lkKTsKK3ZvaWQgdGltZV9kc2Eodm9pZCk7Cit2b2lkIHRpbWVfa2F0amEodm9pZCk7CiB2b2lkIHRpbWVfZWNjKHZvaWQpOwotdm9pZCB0aW1lX2RoKHZvaWQpOwogdm9pZCB0aW1lX21hY3NfKHVuc2lnbmVkIGxvbmcgTUFDX1NJWkUpOwogdm9pZCB0aW1lX21hY3Modm9pZCk7CiB2b2lkIHRpbWVfZW5jbWFjcyh2b2lkKTsKQEAgLTczLDUgKzc5LDUgQEAKICNlbmRpZgogCiAvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi90b21jcnlwdF90ZXN0LmgsdiAkICovCi0vKiAkUmV2aXNpb246IDEuOCAkICovCi0vKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCisvKiAkUmV2aXNpb246IDEuMTQgJCAqLworLyogJERhdGU6IDIwMDYvMTAvMTggMDM6MzY6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHByb2YveDg2X3Byb2YuYyBiL3Rlc3Rwcm9mL3g4Nl9wcm9mLmMKaW5kZXggOTk3MTgwYy4uOTY2NjdhMiAxMDA2NDQKLS0tIGEvdGVzdHByb2YveDg2X3Byb2YuYworKysgYi90ZXN0cHJvZi94ODZfcHJvZi5jCkBAIC0xOCw3ICsxOCw3IEBACiB7CiAgICBpbnQgeDsKIAotICAgLy8gcXNvcnQgdGhlIHJlc3VsdHMKKyAgIC8qIHFzb3J0IHRoZSByZXN1bHRzICovCiAgICBxc29ydChyZXN1bHRzLCBub19yZXN1bHRzLCBzaXplb2Yoc3RydWN0IGxpc3QpLCAmc29ydGVyKTsKIAogICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwpAQCAtNTEsMTcgKzUxLDMxIEBACiAgICAgICAgICB1bG9uZzY0IGE7CiAgICAgICAgICBhc20gX192b2xhdGlsZV9fICgicmR0c2Ncbm1vdmwgJSVlYXgsKCUwKVxubW92bCAlJWVkeCw0KCUwKVxuIjo6InIiKCZhKToiJWVheCIsIiVlZHgiKTsKICAgICAgICAgIHJldHVybiBhOworICAgICAgI2VsaWYgZGVmaW5lZChMVENfUFBDMzIpIHx8IGRlZmluZWQoVEZNX1BQQzMyKQorICAgICAgICAgdW5zaWduZWQgbG9uZyBhLCBiOworICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZnRidSAlMSBcbm1mdGIgJTBcbiI6Ij1yIihhKSwgIj1yIihiKSk7CisgICAgICAgICByZXR1cm4gKCgodWxvbmc2NCliKSA8PCAzMlVMTCkgfCAoKHVsb25nNjQpYSk7CiAgICAgICAjZWxpZiBkZWZpbmVkKF9faWE2NF9fKSAgLyogZ2NjLUlBNjQgdmVyc2lvbiAqLwogICAgICAgICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7CiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwPWFyLml0YyIgOiAiPXIiKHJlc3VsdCkgOjogIm1lbW9yeSIpOwogICAgICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QgKChpbnQpIHJlc3VsdCA9PSAtMSwgMCkpCiAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwPWFyLml0YyIgOiAiPXIiKHJlc3VsdCkgOjogIm1lbW9yeSIpOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorICAgICAgICAgI2lmIGRlZmluZWQoX19hcmNoNjRfXykKKyAgICAgICAgICAgdWxvbmc2NCBhOworICAgICAgICAgICBhc20gdm9sYXRpbGUoInJkICUldGljaywlMCIgOiAiPXIiIChhKSk7CisgICAgICAgICAgIHJldHVybiBhOworICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB4LCB5OworICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkICUldGljaywgJTA7IGNscnV3ICUwLCAlMTsgc3JseCAlMCwgMzIsICUwIiA6ICI9ciIgKHgpLCAiPXIiICh5KSA6ICIwIiAoeCksICIxIiAoeSkpOworICAgICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBsb25nIGxvbmcpIHggPDwgMzIpIHwgeTsgCisgICAgICAgICAjZW5kaWYKICAgICAgICNlbHNlIAogICAgICAgICAgcmV0dXJuIFhDTE9DSygpOwogICAgICAgI2VuZGlmCiAKLSAgIC8vIE1pY3Jvc29mdCBhbmQgSW50ZWwgV2luZG93cyBjb21waWxlcnMKKyAgIC8qIE1pY3Jvc29mdCBhbmQgSW50ZWwgV2luZG93cyBjb21waWxlcnMgKi8KICAgICNlbGlmIGRlZmluZWQgX01fSVg4NiAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQogICAgICBfX2FzbSByZHRzYwogICAgI2VsaWYgZGVmaW5lZCBfTV9BTUQ2NCAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQpAQCAtMTU5LDYgKzE3MywxMiBAQAogI2lmZGVmIEFOVUJJUwogICByZWdpc3Rlcl9jaXBoZXIgKCZhbnViaXNfZGVzYyk7CiAjZW5kaWYKKyNpZmRlZiBLU0VFRAorICByZWdpc3Rlcl9jaXBoZXIgKCZrc2VlZF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIExUQ19LQVNVTUkKKyAgcmVnaXN0ZXJfY2lwaGVyICgma2FzdW1pX2Rlc2MpOworI2VuZGlmCiAKICNpZmRlZiBUSUdFUgogICByZWdpc3Rlcl9oYXNoICgmdGlnZXJfZGVzYyk7CkBAIC0xOTMsNiArMjEzLDEyIEBACiAjaWZkZWYgUklQRU1EMTYwCiAgIHJlZ2lzdGVyX2hhc2ggKCZybWQxNjBfZGVzYyk7CiAjZW5kaWYKKyNpZmRlZiBSSVBFTUQyNTYKKyAgcmVnaXN0ZXJfaGFzaCAoJnJtZDI1Nl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJJUEVNRDMyMAorICByZWdpc3Rlcl9oYXNoICgmcm1kMzIwX2Rlc2MpOworI2VuZGlmCiAjaWZkZWYgV0hJUkxQT09MCiAgIHJlZ2lzdGVyX2hhc2ggKCZ3aGlybHBvb2xfZGVzYyk7CiAjZW5kaWYKQEAgLTIxOSw3ICsyNDUsMTEgQEAKIHJlZ2lzdGVyX3BybmcoJnNvYmVyMTI4X2Rlc2MpOwogI2VuZGlmCiAKLXJuZ19tYWtlX3BybmcoMTI4LCBmaW5kX3BybmcoInlhcnJvdyIpLCAmeWFycm93X3BybmcsIE5VTEwpOworICAgaWYgKChlcnIgPSBybmdfbWFrZV9wcm5nKDEyOCwgZmluZF9wcm5nKCJ5YXJyb3ciKSwgJnlhcnJvd19wcm5nLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicm5nX21ha2VfcHJuZyBmYWlsZWQ6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICB9CisgICAKIH0KIAogaW50IHRpbWVfa2V5c2NoZWQodm9pZCkKQEAgLTMxMiw2ICszNDIsNyBAQAogICAgICAgICBjMiA9ICh0MiA+IGMyID8gYzIgOiB0Mik7CiAgICAgfQogICAgIGEyID0gYzIgLSBjMSAtIHNrZXc7CisgICAgZWNiX2RvbmUoJmVjYik7CiAgICAgCiAgICAgcmVzdWx0c1tub19yZXN1bHRzXS5pZCA9IHg7CiAgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQxID0gYTEvKHNpemVvZihwdCkvY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKTsKQEAgLTMyOCw3ICszNTksNyBAQAogICAgcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDQkMgCisjaWZkZWYgTFRDX0NCQ19NT0RFIAogaW50IHRpbWVfY2lwaGVyMih2b2lkKQogewogICB1bnNpZ25lZCBsb25nIHgsIHkxOwpAQCAtMzgzLDYgKzQxNCw3IEBACiAgICAgICAgIGMyID0gKHQyID4gYzIgPyBjMiA6IHQyKTsKICAgICB9CiAgICAgYTIgPSBjMiAtIGMxIC0gc2tldzsKKyAgICBjYmNfZG9uZSgmY2JjKTsKICAgICAKICAgICByZXN1bHRzW25vX3Jlc3VsdHNdLmlkID0geDsKICAgICByZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDEgPSBhMS8oc2l6ZW9mKHB0KS9jaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGgpOwpAQCAtNDAyLDcgKzQzNCw3IEBACiBpbnQgdGltZV9jaXBoZXIyKHZvaWQpIHsgZnByaW50ZihzdGRlcnIsICJOTyBDQkNcbiIpOyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSNpZmRlZiBDVFIKKyNpZmRlZiBMVENfQ1RSX01PREUKIGludCB0aW1lX2NpcGhlcjModm9pZCkKIHsKICAgdW5zaWduZWQgbG9uZyB4LCB5MTsKQEAgLTQ1Nyw2ICs0ODksNyBAQAogICAgICAgICBjMiA9ICh0MiA+IGMyID8gYzIgOiB0Mik7CiAgICAgfQogICAgIGEyID0gYzIgLSBjMSAtIHNrZXc7CisgICAgY3RyX2RvbmUoJmN0cik7CiAgICAgCiAgICAgcmVzdWx0c1tub19yZXN1bHRzXS5pZCA9IHg7CiAgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQxID0gYTEvKHNpemVvZihwdCkvY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKTsKQEAgLTQ3Niw2ICs1MDksODQgQEAKIGludCB0aW1lX2NpcGhlcjModm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIENUUlxuIik7IHJldHVybiAwOyB9CiAjZW5kaWYKIAorI2lmZGVmIExUQ19MUldfTU9ERQoraW50IHRpbWVfY2lwaGVyNCh2b2lkKQoreworICB1bnNpZ25lZCBsb25nIHgsIHkxOworICB1bG9uZzY0ICB0MSwgdDIsIGMxLCBjMiwgYTEsIGEyOworICBzeW1tZXRyaWNfTFJXIGxydzsKKyAgdW5zaWduZWQgY2hhciBrZXlbTUFYQkxPQ0tTSVpFXSwgcHRbNDA5Nl07CisgIGludCBlcnI7CisKKyAgZnByaW50ZihzdGRlcnIsICJcblxuTFJXIFRpbWUgVHJpYWxzIGZvciB0aGUgU3ltbWV0cmljIENpcGhlcnM6XG4iKTsKKyAgbm9fcmVzdWx0cyA9IDA7CisgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aCAhPSAxNikgY29udGludWU7CisgICAgbHJ3X3N0YXJ0KHgsIHB0LCBrZXksIGNpcGhlcl9kZXNjcmlwdG9yW3hdLm1pbl9rZXlfbGVuZ3RoLCBrZXksIDAsICZscncpOworCisgICAgLyogc2FuaXR5IGNoZWNrIG9uIGNpcGhlciAqLworICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0udGVzdCgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbkVSUk9SOiBDaXBoZXIgJXMgZmFpbGVkIHNlbGYtdGVzdCAlc1xuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyNkZWZpbmUgRE8xICAgbHJ3X2VuY3J5cHQocHQsIHB0LCBzaXplb2YocHQpLCAmbHJ3KTsKKyNkZWZpbmUgRE8yICAgRE8xIERPMQorCisgICAgYzEgPSBjMiA9ICh1bG9uZzY0KS0xOworICAgIGZvciAoeTEgPSAwOyB5MSA8IDEwMDsgeTErKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIERPMTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgRE8yOworICAgICAgICB0MiA9IHRfcmVhZCgpOworICAgICAgICB0MiAtPSB0MTsKKworICAgICAgICBjMSA9ICh0MSA+IGMxID8gYzEgOiB0MSk7CisgICAgICAgIGMyID0gKHQyID4gYzIgPyBjMiA6IHQyKTsKKyAgICB9CisgICAgYTEgPSBjMiAtIGMxIC0gc2tldzsKKworI3VuZGVmIERPMQorI3VuZGVmIERPMgorI2RlZmluZSBETzEgICBscndfZGVjcnlwdChwdCwgcHQsIHNpemVvZihwdCksICZscncpOworI2RlZmluZSBETzIgICBETzEgRE8xCisKKyAgICBjMSA9IGMyID0gKHVsb25nNjQpLTE7CisgICAgZm9yICh5MSA9IDA7IHkxIDwgMTAwOyB5MSsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgRE8xOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICBETzI7CisgICAgICAgIHQyID0gdF9yZWFkKCk7CisgICAgICAgIHQyIC09IHQxOworCisgICAgICAgIGMxID0gKHQxID4gYzEgPyBjMSA6IHQxKTsKKyAgICAgICAgYzIgPSAodDIgPiBjMiA/IGMyIDogdDIpOworICAgIH0KKyAgICBhMiA9IGMyIC0gYzEgLSBza2V3OworCisgICAgbHJ3X2RvbmUoJmxydyk7CisgICAgCisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5pZCA9IHg7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQxID0gYTEvKHNpemVvZihwdCkvY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKTsKKyAgICByZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDIgPSBhMi8oc2l6ZW9mKHB0KS9jaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGgpOworICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uYXZnID0gKHJlc3VsdHNbbm9fcmVzdWx0c10uc3BkMSArIHJlc3VsdHNbbm9fcmVzdWx0c10uc3BkMisxKS8yOworICAgICsrbm9fcmVzdWx0czsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi4iKTsgZmZsdXNoKHN0ZG91dCk7CisgICAgCisjdW5kZWYgRE8yCisjdW5kZWYgRE8xCisgICB9CisgICB0YWxseV9yZXN1bHRzKDEpOworCisgICByZXR1cm4gMDsKK30KKyNlbHNlCitpbnQgdGltZV9jaXBoZXI0KHZvaWQpIHsgZnByaW50ZihzdGRlcnIsICJOTyBMUldcbiIpOyByZXR1cm4gMDsgfQorI2VuZGlmCisKKwogaW50IHRpbWVfaGFzaCh2b2lkKQogewogICB1bnNpZ25lZCBsb25nIHgsIHkxLCBsZW47CkBAIC01MjcsMTIgKzYzOCwxNSBAQAogICAgcmV0dXJuIDA7CiB9CiAKKyN1bmRlZiBNUEkKKy8qI3dhcm5pbmcgeW91IG5lZWQgYW4gbXBfcmFuZCEhISovCisKICNpZmRlZiBNUEkKIHZvaWQgdGltZV9tdWx0KHZvaWQpCiB7CiAgICB1bG9uZzY0IHQxLCB0MjsKICAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKLSAgIG1wX2ludCAgYSwgYiwgYzsKKyAgIHZvaWQgICphLCAqYiwgKmM7CiAKICAgIGZwcmludGYoc3RkZXJyLCAiVGltaW5nIE11bHRpcGx5aW5nOlxuIik7CiAgICBtcF9pbml0X211bHRpKCZhLCZiLCZjLE5VTEwpOwpAQCAtNjQ1LDE5ICs3NTksNjQgQEAKICAgIH0KIH0KIAorI2lmZGVmIE1EU0EKKy8qIHRpbWUgdmFyaW91cyBEU0Egb3BlcmF0aW9ucyAqLwordm9pZCB0aW1lX2RzYSh2b2lkKQoreworICAgZHNhX2tleSAgICAgICBrZXk7CisgICB1bG9uZzY0ICAgICAgIHQxLCB0MjsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKKyAgIGludCAgICAgICAgICAgZXJyOworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICBpbnQgZ3JvdXAsIG1vZHVsdXM7Cit9IGdyb3Vwc1tdID0geworeyAyMCwgOTYgIH0sIAoreyAyMCwgMTI4IH0sCit7IDI0LCAxOTIgfSwKK3sgMjgsIDI1NiB9LAoreyAzMiwgNTEyIH0KK307CisKKyAgIGZvciAoeCA9IDA7IHggPCAoc2l6ZW9mKGdyb3Vwcykvc2l6ZW9mKGdyb3Vwc1swXSkpOyB4KyspIHsKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDQ7IHkrKykgeworICAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgIGlmICgoZXJyID0gZHNhX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgZ3JvdXBzW3hdLmdyb3VwLCBncm91cHNbeF0ubW9kdWx1cywgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmRzYV9tYWtlX2tleSBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOworICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgICB0MiArPSB0MTsKKworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDI7CisgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgaWYgKHkgPCAzKSB7CisgICAgICAgICAgICAgIGRzYV9mcmVlKCZrZXkpOworICAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIHQyID4+PSAyOworICAgICAgIGZwcmludGYoc3RkZXJyLCAiRFNBLSglbHUsICVsdSkgbWFrZV9rZXkgICAgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCAodW5zaWduZWQgbG9uZylncm91cHNbeF0uZ3JvdXAqOCwgKHVuc2lnbmVkIGxvbmcpZ3JvdXBzW3hdLm1vZHVsdXMqOCwgdDIpOworICAgfQorfQorI2VuZGlmCisKKwogI2lmZGVmIE1SU0EgICAgICAKIC8qIHRpbWUgdmFyaW91cyBSU0Egb3BlcmF0aW9ucyAqLwogdm9pZCB0aW1lX3JzYSh2b2lkKQogewotICAgcnNhX2tleSBrZXk7Ci0gICB1bG9uZzY0IHQxLCB0MjsKLSAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzQwOTZdOworICAgcnNhX2tleSAgICAgICBrZXk7CisgICB1bG9uZzY0ICAgICAgIHQxLCB0MjsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzIwNDhdOwogICAgdW5zaWduZWQgbG9uZyB4LCB5LCB6LCB6eno7Ci0gICBpbnQgICAgICAgICAgIGVyciwgeno7CisgICBpbnQgICAgICAgICAgIGVyciwgenosIHN0YXQ7CiAKLSAgIGZvciAoeCA9IDEwMjQ7IHggPD0gMjA0ODsgeCArPSA1MTIpIHsKKyAgIGZvciAoeCA9IDEwMjQ7IHggPD0gMjA0ODsgeCArPSAyNTYpIHsKICAgICAgICB0MiA9IDA7Ci0gICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgNDsgeSsrKSB7CiAgICAgICAgICAgIHRfc3RhcnQoKTsKICAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKICAgICAgICAgICAgaWYgKChlcnIgPSByc2FfbWFrZV9rZXkoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCB4LzgsIDY1NTM3LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKQEAgLTY2NywxMSArODI2LDE2IEBACiAgICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKICAgICAgICAgICAgdDIgKz0gdDE7CiAKLSAgICAgICAgICAgaWYgKHkgPCAxNSkgeworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDI7CisgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICAgICBpZiAoeSA8IDMpIHsKICAgICAgICAgICAgICAgcnNhX2ZyZWUoJmtleSk7CiAgICAgICAgICAgIH0KICAgICAgICB9Ci0gICAgICAgdDIgPj49IDQ7CisgICAgICAgdDIgPj49IDI7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EtJWx1IG1ha2Vfa2V5ICAgIHRvb2sgJTE1bGx1IGN5Y2xlc1xuIiwgeCwgdDIpOwogCiAgICAgICAgdDIgPSAwOwpAQCAtNjc5LDcgKzg0Myw3IEBACiAgICAgICAgICAgIHRfc3RhcnQoKTsKICAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKICAgICAgICAgICAgeiA9IHNpemVvZihidWZbMV0pOwotICAgICAgICAgICBpZiAoKGVyciA9IHJzYV9lbmNyeXB0X2tleShidWZbMF0sIDMyLCBidWZbMV0sICZ6LCAidGVzdHByb2ciLCA4LCAmeWFycm93X3BybmcsCisgICAgICAgICAgIGlmICgoZXJyID0gcnNhX2VuY3J5cHRfa2V5KGJ1ZlswXSwgMzIsIGJ1ZlsxXSwgJnosIChjb25zdCB1bnNpZ25lZCBjaGFyICopInRlc3Rwcm9nIiwgOCwgJnlhcnJvd19wcm5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3BybmcoInlhcnJvdyIpLCBmaW5kX2hhc2goInNoYTEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbnJzYV9lbmNyeXB0X2tleSBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOwpAQCAtNjg3LDI3ICs4NTEsNzYgQEAKICAgICAgICAgICAgfQogICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CiAgICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDQ7CisgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICB9CiAgICAgICAgdDIgPj49IDQ7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EtJWx1IGVuY3J5cHRfa2V5IHRvb2sgJTE1bGx1IGN5Y2xlc1xuIiwgeCwgdDIpOwogCiAgICAgICAgdDIgPSAwOwotICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDIwNDg7IHkrKykgewogICAgICAgICAgICB0X3N0YXJ0KCk7CiAgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CiAgICAgICAgICAgIHp6eiA9IHNpemVvZihidWZbMF0pOwotICAgICAgICAgICBpZiAoKGVyciA9IHJzYV9kZWNyeXB0X2tleShidWZbMV0sIHosIGJ1ZlswXSwgJnp6eiwgInRlc3Rwcm9nIiwgOCwgIGZpbmRfaGFzaCgic2hhMSIpLCAKKyAgICAgICAgICAgaWYgKChlcnIgPSByc2FfZGVjcnlwdF9rZXkoYnVmWzFdLCB6LCBidWZbMF0sICZ6enosIChjb25zdCB1bnNpZ25lZCBjaGFyICopInRlc3Rwcm9nIiwgOCwgIGZpbmRfaGFzaCgic2hhMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnp6LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxucnNhX2RlY3J5cHRfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CiAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CiAgICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDExOworICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgfQotICAgICAgIHQyID4+PSA0OworICAgICAgIHQyID4+PSAxMTsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJTQS0lbHUgZGVjcnlwdF9rZXkgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CiAKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgeiA9IHNpemVvZihidWZbMV0pOworICAgICAgICAgIGlmICgoZXJyID0gcnNhX3NpZ25faGFzaChidWZbMF0sIDIwLCBidWZbMV0sICZ6LCAmeWFycm93X3BybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3BybmcoInlhcnJvdyIpLCBmaW5kX2hhc2goInNoYTEiKSwgOCwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbnJzYV9zaWduX2hhc2ggc2F5cyAlcywgd2FpdC4uLm5vIGl0IHNob3VsZCBzYXkgJXMuLi5kYW1uIHlvdSFcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpLCBlcnJvcl90b19zdHJpbmcoQ1JZUFRfT0spKTsKKyAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICB9CisgICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgICAgdDIgKz0gdDE7CisjaWZkZWYgTFRDX1BST0ZJTEUKKyAgICAgICB0MiA8PD0gODsKKyAgICAgICBicmVhazsKKyNlbmRpZgorCX0KKyAgICAgICAgdDIgPj49IDg7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBLSVsdSBzaWduX2hhc2ggdG9vayAgICUxNWxsdSBjeWNsZXNcbiIsIHgsIHQyKTsKIAorICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjA0ODsgeSsrKSB7CisgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgaWYgKChlcnIgPSByc2FfdmVyaWZ5X2hhc2goYnVmWzFdLCB6LCBidWZbMF0sIDIwLCBmaW5kX2hhc2goInNoYTEiKSwgOCwgJnN0YXQsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5yc2FfdmVyaWZ5X2hhc2ggc2F5cyAlcywgd2FpdC4uLm5vIGl0IHNob3VsZCBzYXkgJXMuLi5kYW1uIHlvdSFcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpLCBlcnJvcl90b19zdHJpbmcoQ1JZUFRfT0spKTsKKyAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoc3RhdCA9PSAwKSB7CisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxucnNhX3ZlcmlmeV9oYXNoIGZvciBSU0EtJWx1IGZhaWxlZCB0byB2ZXJpZnkgc2lnbmF0dXJlKCVsdSlcbiIsIHgsIHkpOworICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDExOworICAgICAgIGJyZWFrOworI2VuZGlmCisJfQorICAgICAgICB0MiA+Pj0gMTE7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBLSVsdSB2ZXJpZnlfaGFzaCB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgsIHQyKTsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKICAgICAgICByc2FfZnJlZSgma2V5KTsKICAgfQogfQpAQCAtNzE1LDIwICs5MjgsMTE1IEBACiB2b2lkIHRpbWVfcnNhKHZvaWQpIHsgZnByaW50ZihzdGRlcnIsICJOTyBSU0FcbiIpOyB9CiAjZW5kaWYKIAorI2lmZGVmIE1LQVQgICAgICAKKy8qIHRpbWUgdmFyaW91cyBLQVQgb3BlcmF0aW9ucyAqLwordm9pZCB0aW1lX2thdGphKHZvaWQpCit7CisgICBrYXRqYV9rZXkga2V5OworICAgdWxvbmc2NCB0MSwgdDI7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVs0MDk2XTsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgeiwgenp6OworICAgaW50ICAgICAgICAgICBlcnIsIHp6OworCisgICBmb3IgKHggPSAxMDI0OyB4IDw9IDIwNDg7IHggKz0gMjU2KSB7CisgICAgICAgdDIgPSAwOworICAgICAgIGZvciAoeSA9IDA7IHkgPCA0OyB5KyspIHsKKyAgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgICBpZiAoKGVyciA9IGthdGphX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgeC84LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxua2F0amFfbWFrZV9rZXkgc2F5cyAlcywgd2FpdC4uLm5vIGl0IHNob3VsZCBzYXkgJXMuLi5kYW1uIHlvdSFcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpLCBlcnJvcl90b19zdHJpbmcoQ1JZUFRfT0spKTsKKyAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICB9CisgICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgICAgdDIgKz0gdDE7CisKKyAgICAgICAgICAgaWYgKHkgPCAzKSB7CisgICAgICAgICAgICAgIGthdGphX2ZyZWUoJmtleSk7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgdDIgPj49IDI7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJLYXRqYS0lbHUgbWFrZV9rZXkgICAgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKyAgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgICB6ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgICAgICAgIGlmICgoZXJyID0ga2F0amFfZW5jcnlwdF9rZXkoYnVmWzBdLCAzMiwgYnVmWzFdLCAmeiwgInRlc3Rwcm9nIiwgOCwgJnlhcnJvd19wcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3BybmcoInlhcnJvdyIpLCBmaW5kX2hhc2goInNoYTEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmthdGphX2VuY3J5cHRfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworICAgICAgIH0KKyAgICAgICB0MiA+Pj0gNDsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkthdGphLSVsdSBlbmNyeXB0X2tleSB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgsIHQyKTsKKworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjA0ODsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgenp6ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgICAgICAgIGlmICgoZXJyID0ga2F0amFfZGVjcnlwdF9rZXkoYnVmWzFdLCB6LCBidWZbMF0sICZ6enosICJ0ZXN0cHJvZyIsIDgsICBmaW5kX2hhc2goInNoYTEiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ6eiwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmthdGphX2RlY3J5cHRfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworICAgICAgIH0KKyAgICAgICB0MiA+Pj0gMTE7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJLYXRqYS0lbHUgZGVjcnlwdF9rZXkgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisKKworICAgICAgIGthdGphX2ZyZWUoJmtleSk7CisgIH0KK30KKyNlbHNlCit2b2lkIHRpbWVfa2F0amEodm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIEthdGphXG4iKTsgfQorI2VuZGlmCisKICNpZmRlZiBNRUNDCiAvKiB0aW1lIHZhcmlvdXMgRUNDIG9wZXJhdGlvbnMgKi8KIHZvaWQgdGltZV9lY2Modm9pZCkKIHsKICAgIGVjY19rZXkga2V5OwogICAgdWxvbmc2NCB0MSwgdDI7Ci0gICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVs0MDk2XTsKLSAgIHVuc2lnbmVkIGxvbmcgaSwgeCwgeSwgejsKLSAgIGludCAgICAgICAgICAgZXJyOwotICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2l6ZXNbXSA9IHsxOTIvOCwgMjU2LzgsIDM4NC84LCA1MjEvOCwgMTAwMDAwfTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzI1Nl07CisgICB1bnNpZ25lZCBsb25nIGksIHcsIHgsIHksIHo7CisgICBpbnQgICAgICAgICAgIGVyciwgc3RhdDsKKyAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpemVzW10gPSB7CisjaWZkZWYgRUNDMTEyCisxMTIvOCwgCisjZW5kaWYKKyNpZmRlZiBFQ0MxMjgKKzEyOC84LCAKKyNlbmRpZgorI2lmZGVmIEVDQzE2MAorMTYwLzgsIAorI2VuZGlmCisjaWZkZWYgRUNDMTkyCisxOTIvOCwgCisjZW5kaWYKKyNpZmRlZiBFQ0MyMjQKKzIyNC84LAorI2VuZGlmCisjaWZkZWYgRUNDMjU2CisyNTYvOCwgCisjZW5kaWYKKyNpZmRlZiBFQ0MzODQKKzM4NC84LCAKKyNlbmRpZgorI2lmZGVmIEVDQzUyMQorNTIxLzgsIAorI2VuZGlmCisxMDAwMDB9OwogCiAgICBmb3IgKHggPSBzaXplc1tpPTBdOyB4IDwgMTAwMDAwOyB4ID0gc2l6ZXNbKytpXSkgewogICAgICAgIHQyID0gMDsKLSAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkrKykgewogICAgICAgICAgICB0X3N0YXJ0KCk7CiAgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CiAgICAgICAgICAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgeCwgJmtleSkpICE9IENSWVBUX09LKSB7CkBAIC03MzgsMTUgKzEwNDYsMjAgQEAKICAgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOwogICAgICAgICAgICB0MiArPSB0MTsKIAotICAgICAgICAgICBpZiAoeSA8IDE1KSB7CisjaWZkZWYgTFRDX1BST0ZJTEUKKyAgICAgICB0MiA8PD0gODsKKyAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgIGlmICh5IDwgMjU1KSB7CiAgICAgICAgICAgICAgIGVjY19mcmVlKCZrZXkpOwogICAgICAgICAgICB9CiAgICAgICAgfQotICAgICAgIHQyID4+PSA0OworICAgICAgIHQyID4+PSA4OwogICAgICAgIGZwcmludGYoc3RkZXJyLCAiRUNDLSVsdSBtYWtlX2tleSAgICB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgqOCwgdDIpOwogCiAgICAgICAgdDIgPSAwOwotICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CiAgICAgICAgICAgIHRfc3RhcnQoKTsKICAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKICAgICAgICAgICAgeiA9IHNpemVvZihidWZbMV0pOwpAQCAtNzU3LDkgKzEwNzAsNzYgQEAKICAgICAgICAgICAgfQogICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CiAgICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDg7CisgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICB9Ci0gICAgICAgdDIgPj49IDQ7CisgICAgICAgdDIgPj49IDg7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJFQ0MtJWx1IGVuY3J5cHRfa2V5IHRvb2sgJTE1bGx1IGN5Y2xlc1xuIiwgeCo4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgdyA9IDIwOworICAgICAgICAgICBpZiAoKGVyciA9IGVjY19kZWNyeXB0X2tleShidWZbMV0sIHosIGJ1ZlswXSwgJncsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5lY2NfZGVjcnlwdF9rZXkgc2F5cyAlcywgd2FpdC4uLm5vIGl0IHNob3VsZCBzYXkgJXMuLi5kYW1uIHlvdSFcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpLCBlcnJvcl90b19zdHJpbmcoQ1JZUFRfT0spKTsKKyAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICB9CisgICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgICAgdDIgKz0gdDE7CisjaWZkZWYgTFRDX1BST0ZJTEUKKyAgICAgICB0MiA8PD0gODsKKyAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgIH0KKyAgICAgICB0MiA+Pj0gODsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVDQy0lbHUgZGVjcnlwdF9rZXkgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4KjgsIHQyKTsKKworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjU2OyB5KyspIHsKKyAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICB6ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgICAgICAgaWYgKChlcnIgPSBlY2Nfc2lnbl9oYXNoKGJ1ZlswXSwgMjAsIGJ1ZlsxXSwgJnosICZ5YXJyb3dfcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRfcHJuZygieWFycm93IiksICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5lY2Nfc2lnbl9oYXNoIHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDg7CisgICAgICAgYnJlYWs7CisjZW5kaWYKKwl9CisgICAgICAgIHQyID4+PSA4OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVDQy0lbHUgc2lnbl9oYXNoIHRvb2sgICAlMTVsbHUgY3ljbGVzXG4iLCB4KjgsIHQyKTsKKworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjU2OyB5KyspIHsKKyAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICBpZiAoKGVyciA9IGVjY192ZXJpZnlfaGFzaChidWZbMV0sIHosIGJ1ZlswXSwgMjAsICZzdGF0LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuZWNjX3ZlcmlmeV9oYXNoIHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHN0YXQgPT0gMCkgeworICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmVjY192ZXJpZnlfaGFzaCBmb3IgRUNDLSVsdSBmYWlsZWQgdG8gdmVyaWZ5IHNpZ25hdHVyZSglbHUpXG4iLCB4KjgsIHkpOworICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDg7CisgICAgICAgYnJlYWs7CisjZW5kaWYKKwl9CisgICAgICAgIHQyID4+PSA4OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVDQy0lbHUgdmVyaWZ5X2hhc2ggdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4KjgsIHQyKTsKKworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbiIpOwogICAgICAgIGVjY19mcmVlKCZrZXkpOwogICB9CiB9CkBAIC03NjcsNTggKzExNDcsNiBAQAogdm9pZCB0aW1lX2VjYyh2b2lkKSB7IGZwcmludGYoc3RkZXJyLCAiTk8gRUNDXG4iKTsgfQogI2VuZGlmCiAKLSNpZmRlZiBNREgKLS8qIHRpbWUgdmFyaW91cyBESCBvcGVyYXRpb25zICovCi12b2lkIHRpbWVfZGgodm9pZCkKLXsKLSAgIGRoX2tleSBrZXk7Ci0gICB1bG9uZzY0IHQxLCB0MjsKLSAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzQwOTZdOwotICAgdW5zaWduZWQgbG9uZyBpLCB4LCB5LCB6OwotICAgaW50ICAgICAgICAgICBlcnI7Ci0gICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplc1tdID0gezc2OC84LCAxMDI0LzgsIDE1MzYvOCwgMjA0OC84LCAzMDcyLzgsIDQwOTYvOCwgMTAwMDAwfTsKLQotICAgZm9yICh4ID0gc2l6ZXNbaT0wXTsgeCA8IDEwMDAwMDsgeCA9IHNpemVzWysraV0pIHsKLSAgICAgICB0MiA9IDA7Ci0gICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKLSAgICAgICAgICAgdF9zdGFydCgpOwotICAgICAgICAgICB0MSA9IHRfcmVhZCgpOwotICAgICAgICAgICBpZiAoKGVyciA9IGRoX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgeCwgJmtleSkpICE9IENSWVBUX09LKSB7Ci0gICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmRoX21ha2Vfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7Ci0gICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7Ci0gICAgICAgICAgIHQyICs9IHQxOwotCi0gICAgICAgICAgIGlmICh5IDwgMTUpIHsKLSAgICAgICAgICAgICAgZGhfZnJlZSgma2V5KTsKLSAgICAgICAgICAgfQotICAgICAgIH0KLSAgICAgICB0MiA+Pj0gNDsKLSAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRILSU0bHUgbWFrZV9rZXkgICAgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4KjgsIHQyKTsKLQotICAgICAgIHQyID0gMDsKLSAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgewotICAgICAgICAgICB0X3N0YXJ0KCk7Ci0gICAgICAgICAgIHQxID0gdF9yZWFkKCk7Ci0gICAgICAgICAgIHogPSBzaXplb2YoYnVmWzFdKTsKLSAgICAgICAgICAgaWYgKChlcnIgPSBkaF9lbmNyeXB0X2tleShidWZbMF0sIDIwLCBidWZbMV0sICZ6LCAmeWFycm93X3BybmcsIGZpbmRfcHJuZygieWFycm93IiksIGZpbmRfaGFzaCgic2hhMSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5KSkgIT0gQ1JZUFRfT0spIHsKLSAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuZGhfZW5jcnlwdF9rZXkgc2F5cyAlcywgd2FpdC4uLm5vIGl0IHNob3VsZCBzYXkgJXMuLi5kYW1uIHlvdSFcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpLCBlcnJvcl90b19zdHJpbmcoQ1JZUFRfT0spKTsKLSAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKLSAgICAgICAgICAgdDIgKz0gdDE7Ci0gICAgICAgfQotICAgICAgIHQyID4+PSA0OwotICAgICAgIGZwcmludGYoc3RkZXJyLCAiREgtJTRsdSBlbmNyeXB0X2tleSB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgqOCwgdDIpOwotICAgICAgIGRoX2ZyZWUoJmtleSk7Ci0gIH0KLX0KLSNlbHNlCi12b2lkIHRpbWVfZGgodm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIERIXG4iKTsgfQotI2VuZGlmCi0KIHZvaWQgdGltZV9tYWNzXyh1bnNpZ25lZCBsb25nIE1BQ19TSVpFKQogewogICAgdW5zaWduZWQgY2hhciAqYnVmLCBrZXlbMTZdLCB0YWdbMTZdOwpAQCAtODM1LDEyICsxMTYzLDE3IEBACiAgICB9CiAKICAgIGNpcGhlcl9pZHggPSBmaW5kX2NpcGhlcigiYWVzIik7Ci0gICBoYXNoX2lkeCAgID0gZmluZF9oYXNoKCJtZDUiKTsKKyAgIGhhc2hfaWR4ICAgPSBmaW5kX2hhc2goInNoYTEiKTsKKyAgIAorICAgaWYgKGNpcGhlcl9pZHggPT0gLTEgfHwgaGFzaF9pZHggPT0gLTEpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiV2FybmluZyB0aGUgTUFDIHRlc3RzIHJlcXVpcmVzIEFFUyBhbmQgU0hBMSB0byBvcGVyYXRlLi4uIHNvIHNvcnJ5XG4iKTsKKyAgICAgIHJldHVybjsKKyAgIH0KIAogICAgeWFycm93X3JlYWQoYnVmLCBNQUNfU0laRSoxMDI0LCAmeWFycm93X3BybmcpOwogICAgeWFycm93X3JlYWQoa2V5LCAxNiwgJnlhcnJvd19wcm5nKTsKIAotI2lmZGVmIE9NQUMKKyNpZmRlZiBMVENfT01BQwogICAgdDIgPSAtMTsKICAgIGZvciAoeCA9IDA7IHggPCAxMDAwMDsgeCsrKSB7CiAgICAgICAgIHRfc3RhcnQoKTsKQEAgLTg1MywxMCArMTE4Niw0MiBAQAogICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CiAgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOwogICAgfQotICAgZnByaW50ZihzdGRlcnIsICJPTUFDLUFFU1x0XHQlOWxsdVxuIiwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyAgIGZwcmludGYoc3RkZXJyLCAiT01BQy0lc1x0XHQlOWxsdVxuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0ubmFtZSwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKICNlbmRpZgogCi0jaWZkZWYgUE1BQworI2lmZGVmIExUQ19YQ0JDCisgICB0MiA9IC0xOworICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICB6ID0gMTY7CisgICAgICAgIGlmICgoZXJyID0geGNiY19tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgYnVmLCBNQUNfU0laRSoxMDI0LCB0YWcsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxueGNiYyBlcnJvci4uLiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKKyAgIH0KKyAgIGZwcmludGYoc3RkZXJyLCAiWENCQy0lc1x0XHQlOWxsdVxuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0ubmFtZSwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0Y5X01PREUKKyAgIHQyID0gLTE7CisgICBmb3IgKHggPSAwOyB4IDwgMTAwMDA7IHgrKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgIHogPSAxNjsKKyAgICAgICAgaWYgKChlcnIgPSBmOV9tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgYnVmLCBNQUNfU0laRSoxMDI0LCB0YWcsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuRjkgZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CisgICB9CisgICBmcHJpbnRmKHN0ZGVyciwgIkY5LSVzXHRcdFx0JTlsbHVcbiIsIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLm5hbWUsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworI2lmZGVmIExUQ19QTUFDCiAgICB0MiA9IC0xOwogICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKICAgICAgICAgdF9zdGFydCgpOwpAQCAtODg4LDcgKzEyNTMsNyBAQAogICAgZnByaW50ZihzdGRlcnIsICJQRUxJQ0FOIFx0XHQlOWxsdVxuIiwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKICNlbmRpZgogCi0jaWZkZWYgSE1BQworI2lmZGVmIExUQ19ITUFDCiAgICB0MiA9IC0xOwogICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKICAgICAgICAgdF9zdGFydCgpOwpAQCAtOTAxLDcgKzEyNjYsNyBAQAogICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CiAgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOwogICAgfQotICAgZnByaW50ZihzdGRlcnIsICJITUFDLU1ENVx0XHQlOWxsdVxuIiwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyAgIGZwcmludGYoc3RkZXJyLCAiSE1BQy0lc1x0XHQlOWxsdVxuIiwgaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5uYW1lLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOwogI2VuZGlmCiAKICAgIFhGUkVFKGJ1Zik7CkBAIC05MjAsNiArMTI4NSw3IEBACiAgICB1bG9uZzY0IHQxLCB0MjsKICAgIHVuc2lnbmVkIGxvbmcgeCwgejsKICAgIGludCBlcnIsIGNpcGhlcl9pZHg7CisgICBzeW1tZXRyaWNfa2V5IHNrZXk7CiAKICAgIGZwcmludGYoc3RkZXJyLCAiXG5FTkMrTUFDIFRpbWluZ3MgKHplcm8gYnl0ZSBBQUQsIDE2IGJ5dGUgSVYsIGN5Y2xlcy9ieXRlIG9uICVsdUtCIGJsb2Nrcyk6XG4iLCBNQUNfU0laRSk7CiAKQEAgLTk0OCw3ICsxMzE0LDcgQEAKICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOwogICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKICAgIH0KLSAgIGZwcmludGYoc3RkZXJyLCAiRUFYIFx0XHQlOWxsdVxuIiwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyAgIGZwcmludGYoc3RkZXJyLCAiRUFYIFx0XHRcdCU5bGx1XG4iLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOwogI2VuZGlmCiAKICNpZmRlZiBPQ0JfTU9ERQpAQCAtOTY0LDcgKzEzMzAsNyBAQAogICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CiAgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOwogICAgfQotICAgZnByaW50ZihzdGRlcnIsICJPQ0IgXHRcdCU5bGx1XG4iLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOworICAgZnByaW50ZihzdGRlcnIsICJPQ0IgXHRcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CiAjZW5kaWYKIAogI2lmZGVmIENDTV9NT0RFCkBAIC05NzMsMTQgKzEzMzksMzAgQEAKICAgICAgICAgdF9zdGFydCgpOwogICAgICAgICB0MSA9IHRfcmVhZCgpOwogICAgICAgICB6ID0gMTY7Ci0gICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeShjaXBoZXJfaWR4LCBrZXksIDE2LCBJViwgMTYsIE5VTEwsIDAsIGJ1ZiwgTUFDX1NJWkUqMTAyNCwgYnVmLCB0YWcsICZ6LCBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeShjaXBoZXJfaWR4LCBrZXksIDE2LCBOVUxMLCBJViwgMTYsIE5VTEwsIDAsIGJ1ZiwgTUFDX1NJWkUqMTAyNCwgYnVmLCB0YWcsICZ6LCBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CiAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5DQ00gZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAgICB9CiAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKICAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CiAgICB9Ci0gICBmcHJpbnRmKHN0ZGVyciwgIkNDTSBcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisgICBmcHJpbnRmKHN0ZGVyciwgIkNDTSAobm8tcHJlY29tcCkgXHQlOWxsdVxuIiwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyAgIAorICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0uc2V0dXAoa2V5LCAxNiwgMCwgJnNrZXkpOworICAgdDIgPSAtMTsKKyAgIGZvciAoeCA9IDA7IHggPCAxMDAwMDsgeCsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgeiA9IDE2OworICAgICAgICBpZiAoKGVyciA9IGNjbV9tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgJnNrZXksIElWLCAxNiwgTlVMTCwgMCwgYnVmLCBNQUNfU0laRSoxMDI0LCBidWYsIHRhZywgJnosIENDTV9FTkNSWVBUKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkNDTSBlcnJvci4uLiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKKyAgIH0KKyAgIGZwcmludGYoc3RkZXJyLCAiQ0NNIChwcmVjb21wKSBcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJfaWR4XS5kb25lKCZza2V5KTsgICAKICNlbmRpZgogCiAjaWZkZWYgR0NNX01PREUKQEAgLTk5OSw3ICsxMzgxLDExIEBACiAgICBmcHJpbnRmKHN0ZGVyciwgIkdDTSAobm8tcHJlY29tcClcdCU5bGx1XG4iLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOwogCiAgICB7Ci0gICBnY21fc3RhdGUgZ2NtOworICAgZ2NtX3N0YXRlIGdjbQorI2lmZGVmIEdDTV9UQUJMRVNfU1NFMgorX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpCisjZW5kaWYKKzsKIAogICAgaWYgKChlcnIgPSBnY21faW5pdCgmZ2NtLCBjaXBoZXJfaWR4LCBrZXksIDE2KSkgIT0gQ1JZUFRfT0spIHsgZnByaW50ZihzdGRlcnIsICJnY21faW5pdDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsgZXhpdChFWElUX0ZBSUxVUkUpOyB9CiAgICB0MiA9IC0xOwpAQCAtMTAzMSw3ICsxNDE3LDcgQEAKICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOwogICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKICAgIH0KLSAgIGZwcmludGYoc3RkZXJyLCAiR0NNIChwcmVjb21wKVx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisgICBmcHJpbnRmKHN0ZGVyciwgIkdDTSAocHJlY29tcClcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CiAgICB9CiAKICNlbmRpZgpAQCAtMTA0Niw1ICsxNDMyLDUgQEAKIH0KIAogLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YveDg2X3Byb2YuYyx2ICQgKi8KLS8qICRSZXZpc2lvbjogMS4xNiAkICovCi0vKiAkRGF0ZTogMjAwNS8wNi8xNCAyMDo0NDoyMyAkICovCisvKiAkUmV2aXNpb246IDEuNTEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTA6MTggJCAqLwpkaWZmIC0tZ2l0IGEvdXBkYXRlbWFrZXMuc2ggYi91cGRhdGVtYWtlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZjYmRlCi0tLSAvZGV2L251bGwKKysrIGIvdXBkYXRlbWFrZXMuc2gKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL2Jhc2gKKworYmFzaCBnZW5saXN0LnNoID4gdG1wbGlzdAorCitwZXJsIGZpbHRlci5wbCBtYWtlZmlsZSB0bXBsaXN0CittdiAtZiB0bXAuZGVsbWUgbWFrZWZpbGUKKworcGVybCBmaWx0ZXIucGwgbWFrZWZpbGUuaWNjIHRtcGxpc3QKK212IC1mIHRtcC5kZWxtZSBtYWtlZmlsZS5pY2MKKworcGVybCBmaWx0ZXIucGwgbWFrZWZpbGUuc2hhcmVkIHRtcGxpc3QKK212IC1mIHRtcC5kZWxtZSBtYWtlZmlsZS5zaGFyZWQKKworcGVybCBmaWx0ZXIucGwgbWFrZWZpbGUudW5peCB0bXBsaXN0CittdiAtZiB0bXAuZGVsbWUgbWFrZWZpbGUudW5peAorCitwZXJsIGZpbHRlci5wbCBtYWtlZmlsZS5tc3ZjIHRtcGxpc3QKK3NlZCAtZSAncy9cLm8gLy5vYmogL2cnIDwgdG1wLmRlbG1lID4gbWFrZWZpbGUubXN2YworCitybSAtZiB0bXBsaXN0CitybSAtZiB0bXAuZGVsbWUK