ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGJiYTlkNWQuLmQ0ZTA0NTQgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSw2ICsxLDYgQEAKLS90ZXN0cy1jbGFyL2NsYXIuc3VpdGUKLS90ZXN0cy1jbGFyL2NsYXIuc3VpdGUucnVsZQotL3Rlc3RzLWNsYXIvLmNsYXJjYWNoZQorL3Rlc3RzL2NsYXIuc3VpdGUKKy90ZXN0cy9jbGFyLnN1aXRlLnJ1bGUKKy90ZXN0cy8uY2xhcmNhY2hlCiAvYXBpZG9jcwogL3RyYXNoLSouZXhlCiAvbGliZ2l0Mi5wYwpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCAzZjVhMDg3Li5jNjU2ZjY0IDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtMTYsMyArMTYsNiBAQAogU2FzY2hhIEN1bnogPHNhc2NoYUBiYWJiZWxib3gub3JnPiA8U2FzY2hhQEJhYmJlbEJveC5vcmc+CiBBdXRobWlsbGVub24gPGF1dGhtaWxsZW5vbkBnb29nbGVtYWlsLmNvbT4gPG1hcnRpbkB1Y3NtYWlsLmRlPgogQXV0aG1pbGxlbm9uIDxhdXRobWlsbGVub25AZ29vZ2xlbWFpbC5jb20+IDxhdXRobWlsbGVub25AZ29vZ2xlbWFpbC5jb20+CitFZHdhcmQgVGhvbXNvbiA8ZXRob21zb25AbWljcm9zb2Z0LmNvbT4gPGV0aG9tc29uQGVkd2FyZHRob21zb24uY29tPgorSi4gRGF2aWQgSWLDocOxZXogPGpkYXZpZC5pYnBAZ21haWwuY29tPiA8amRhdmlkQGl0YWFweS5jb20+CitSdXNzZWxsIEJlbGZlciA8cmJAZ2l0aHViLmNvbT4gPGFycmJlZUBhcnJiZWUuY29tPgpkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbAppbmRleCAwZDU3NDZmLi4xNTEwNjBmIDEwMDY0NAotLS0gYS8udHJhdmlzLnltbAorKysgYi8udHJhdmlzLnltbApAQCAtMSw3ICsxLDYgQEAKICMgVHJhdmlzLUNJIEJ1aWxkIGZvciBsaWJnaXQyCiAjIHNlZSB0cmF2aXMtY2kub3JnIGZvciBkZXRhaWxzCiAKLSMgQXMgQ01ha2UgaXMgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkIHdlIHVzZSBlcmxhbmcgVk1zCiBsYW5ndWFnZTogYwogCiBjb21waWxlcjoKQEAgLTE4LDI2ICsxNywxOCBAQAogICAgLSBjb21waWxlcjogaTU4Ni1taW5ndzMybXN2Yy1nY2MKICAgICAgZW52OiBPUFRJT05TPSItREJVSUxEX0NMQVI9T0ZGIC1EV0lOMzI9T04gLURNSU5HVz1PTiIKIAotIyBNYWtlIHN1cmUgQ01ha2UgaXMgaW5zdGFsbGVkCiBpbnN0YWxsOgotIC0gc3VkbyBhcHQtZ2V0IHVwZGF0ZSA+L2Rldi9udWxsCi0gLSBzdWRvIGFwdC1nZXQgLXEgaW5zdGFsbCBjbWFrZSB2YWxncmluZAorIC0gc3VkbyBhcHQtZ2V0IC1xcSB1cGRhdGUKKyAtIHN1ZG8gYXB0LWdldCAtcXEgaW5zdGFsbCBjbWFrZSBsaWJzc2gyLTEtZGV2IG9wZW5zc2gtY2xpZW50IG9wZW5zc2gtc2VydmVyCiAKLSMgUnVuIHRoZSBCdWlsZCBzY3JpcHQKKyMgUnVuIHRoZSBCdWlsZCBzY3JpcHQgYW5kIHRlc3RzCiBzY3JpcHQ6Ci0gLSBta2RpciBfdGVtcAotIC0gZ2l0IGluaXQgLS1iYXJlIF90ZW1wL3Rlc3QuZ2l0Ci0gLSBnaXQgZGFlbW9uIC0tbGlzdGVuPWxvY2FsaG9zdCAtLWV4cG9ydC1hbGwgLS1lbmFibGU9cmVjZWl2ZS1wYWNrIC0tYmFzZS1wYXRoPV90ZW1wIF90ZW1wIDI+L2Rldi9udWxsICYKLSAtIGV4cG9ydCBHSVRURVNUX1JFTU9URV9VUkw9ImdpdDovL2xvY2FsaG9zdC90ZXN0LmdpdCIKLSAtIG1rZGlyIF9idWlsZAotIC0gY2QgX2J1aWxkCi0gLSBjbWFrZSAuLiAtRENNQUtFX0lOU1RBTExfUFJFRklYPS4uL19pbnN0YWxsICRPUFRJT05TCi0gLSBjbWFrZSAtLWJ1aWxkIC4gLS10YXJnZXQgaW5zdGFsbAotIC0gY3Rlc3QgLVYgLgorIC0gc2NyaXB0L2NpYnVpbGQuc2gKIAogIyBSdW4gVGVzdHMKIGFmdGVyX3N1Y2Nlc3M6Ci0gLSB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAtLXNob3ctcmVhY2hhYmxlPXllcyAtLXN1cHByZXNzaW9ucz0uLi9saWJnaXQyX2NsYXIuc3VwcCAuL2xpYmdpdDJfY2xhciAtaW9ubGluZQorIC0gc3VkbyBhcHQtZ2V0IC1xcSBpbnN0YWxsIHZhbGdyaW5kCisgLSB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAtLXNob3ctcmVhY2hhYmxlPXllcyAtLXN1cHByZXNzaW9ucz0uL2xpYmdpdDJfY2xhci5zdXBwIF9idWlsZC9saWJnaXQyX2NsYXIgLWlvbmxpbmUKIAogIyBPbmx5IHdhdGNoIHRoZSBkZXZlbG9wbWVudCBicmFuY2gKIGJyYW5jaGVzOgpkaWZmIC0tZ2l0IGEvQVVUSE9SUyBiL0FVVEhPUlMKaW5kZXggNTg3ZGEyNC4uZjNhMDNlZSAxMDA2NDQKLS0tIGEvQVVUSE9SUworKysgYi9BVVRIT1JTCkBAIC02OCw1ICs2OCw2IEBACiBUaW0gQnJhbnllbgogVGltIENsZW0KIFRpbSBIYXJkZXIKK1RvcnN0ZW4gQsO2Z2Vyc2hhdXNlbgogVHJlbnQgTWljawogVmljZW50IE1hcnRpCmRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IDM0ZDU2YjMuLmFjMTAzMmEgMTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0yNywyNSArMjcsNDQgQEAKIE9QVElPTiggVEFHUwkJCQkiR2VuZXJhdGUgdGFncyIJCQkJCQkJT0ZGICkKIE9QVElPTiggUFJPRklMRQkJCQkiR2VuZXJhdGUgcHJvZmlsaW5nIGluZm9ybWF0aW9uIgkJT0ZGICkKIE9QVElPTiggRU5BQkxFX1RSQUNFCQkiRW5hYmxlcyB0cmFjaW5nIHN1cHBvcnQiCQkJCU9GRiApCi1PUFRJT04oIExJQkdJVDJfRklMRU5BTUUJIk5hbWUgb2YgdGhlIHByb2R1Y2VkIGJpbmFyeSIgT0ZGICkKK09QVElPTiggTElCR0lUMl9GSUxFTkFNRQkiTmFtZSBvZiB0aGUgcHJvZHVjZWQgYmluYXJ5IgkJCU9GRiApCisKK09QVElPTiggQU5EUk9JRAkJCQkiQnVpbGQgZm9yIGFuZHJvaWQgTkRLIgkgCQkJCU9GRiApCisKK09QVElPTiggVVNFX0lDT05WCQkJIkxpbmsgd2l0aCBhbmQgdXNlIGljb252IGxpYnJhcnkiIAkJT0ZGICkKK09QVElPTiggVVNFX1NTSAkJCQkiTGluayB3aXRoIGxpYnNzaCB0byBlbmFibGUgU1NIIHN1cHBvcnQiIE9OICkKKworSUYoQVBQTEUpCisJU0VUKCBVU0VfSUNPTlYgT04gKQorRU5ESUYoKQogCiBJRihNU1ZDKQotCSMgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFsYmUgd2hlbiBidWlsZGluZyB3aXRoIE1TVkMuIEJ5IGRlZmF1bHQsCi0JIyBsaWJnaXQyIGlzIGJ1aWxkIHVzaW5nIHRoZSBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgYXMgdGhhdCdzIHdoYXQKLQkjIHRoZSBDTFIgZXhwZWN0cyBieSBkZWZhdWx0IGFuZCBob3cgdGhlIFdpbmRvd3MgQVBJIGlzIGJ1aWx0LgorCSMgVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgd2hlbiBidWlsZGluZyB3aXRoIE1TVkMuIEJ5IGRlZmF1bHQsIGxpYmdpdDIKKwkjIGlzIGJ1aWxkIHVzaW5nIHRoZSBjZGVjbCBjYWxsaW5nIGNvbnZlbnRpb24sIHdoaWNoIGlzIHVzZWZ1bCBpZiB5b3UncmUKKwkjIHdyaXRpbmcgQy4gSG93ZXZlciwgdGhlIENMUiBhbmQgV2luMzIgQVBJIGJvdGggZXhwZWN0IHN0ZGNhbGwuCiAJIwotCSMgSWYgeW91IGFyZSB3cml0aW5nIGEgQyBvciBDKysgcHJvZ3JhbSBhbmQgd2FudCB0byBsaW5rIHRvIGxpYmdpdDIsIHlvdQotCSMgaGF2ZSB0byBlaXRoZXI6Ci0JIyAtIEFkZCAvR3ogdG8gdGhlIGNvbXBpbGVyIG9wdGlvbnMgb2YgX3lvdXJfIHByb2dyYW0gLyBsaWJyYXJ5LgotCSMgLSBUdXJuIHRoaXMgb2ZmIGJ5IGludm9raW5nIENNYWtlIHdpdGggdGhlICItRFNURENBTEw9T2ZmIiBhcmd1bWVudC4KLQkjCi0JT1BUSU9OKCBTVERDQUxMCQkJIkJ1aWxkIGxpYmdpdDIgd2l0aCB0aGUgX19zdGRjYWxsIGNvbnZlbnRpb24iCU9OICApCisJIyBJZiB5b3UgYXJlIHdyaXRpbmcgYSBDTFIgcHJvZ3JhbSBhbmQgd2FudCB0byBsaW5rIHRvIGxpYmdpdDIsIHlvdSdsbCB3YW50CisJIyB0byB0dXJuIHRoaXMgb24gYnkgaW52b2tpbmcgQ01ha2Ugd2l0aCB0aGUgIi1EU1REQ0FMTD1PTiIgYXJndW1lbnQuCisJT1BUSU9OKCBTVERDQUxMCQkJIkJ1aWxkIGxpYmdpdDIgd2l0aCB0aGUgX19zdGRjYWxsIGNvbnZlbnRpb24iCU9GRiAgKQogCiAJIyBUaGlzIG9wdGlvbiBtdXN0IG1hdGNoIHRoZSBzZXR0aW5ncyB1c2VkIGluIHlvdXIgcHJvZ3JhbSwgaW4gcGFydGljdWxhciBpZiB5b3UKIAkjIGFyZSBsaW5raW5nIHN0YXRpY2FsbHkKIAlPUFRJT04oIFNUQVRJQ19DUlQJCSJMaW5rIHRoZSBzdGF0aWMgQ1JUIGxpYnJhcmllcyIJT04gICkKKworCSMgQnkgZGVmYXVsdCwgbGliZ2l0MiBpcyBidWlsdCB3aXRoIFdpbkhUVFAuICBUbyB1c2UgdGhlIGJ1aWx0LWluCisJIyBIVFRQIHRyYW5zcG9ydCwgaW52b2tlIENNYWtlIHdpdGggdGhlICItRFdJTkhUVFA9T0ZGIiBhcmd1bWVudC4KKwlPUFRJT04oIFdJTkhUVFAJCQkiVXNlIFdpbjMyIFdpbkhUVFAgcm91dGluZXMiCU9OICApCiBFTkRJRigpCiAKKyMgVGhpcyB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGxpYnJhcmllcyB3ZSBuZWVkIHRvIHB1dCBpbnRvCisjIGxpYmdpdDIucGMncyBSZXF1aXJlcy5wcml2YXRlLiBUaGF0IGlzLCB3aGF0IHdlJ3JlIGxpbmtpbmcgdG8gb3IKKyMgd2hhdCBzb21lb25lIHdobydzIHN0YXRpY2FsbHkgbGlua2luZyB1cyBuZWVkcyB0byBsaW5rIHRvLgorU0VUKExJQkdJVDJfUENfUkVRVUlSRVMgIiIpCisjIFRoaXMgd2lsbCBiZSBzZXQgbGF0ZXIgaWYgd2UgdXNlIHRoZSBzeXN0ZW0ncyBodHRwLXBhcnNlciBsaWJyYXJ5IG9yCisjIHVzZSBpY29udiAoT1NYKSBhbmQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBMaWJzLnByaXZhdGUgZmllbGQgaW4gdGhlCisjIHBjIGZpbGUuCitTRVQoTElCR0lUMl9QQ19MSUJTICIiKQorCiAjIEluc3RhbGxhdGlvbiBwYXRocwogIwogU0VUKEJJTl9JTlNUQUxMX0RJUiBiaW4gQ0FDSEUgUEFUSCAiV2hlcmUgdG8gaW5zdGFsbCBiaW5hcmllcyB0by4iKQpAQCAtNTcsNyArNzYsMTggQEAKIAkJVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7dGFyZ2V0fSB3czJfMzIpCiAJRUxTRUlGKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIihTb2xhcmlzfFN1bk9TKSIpCiAJCVRBUkdFVF9MSU5LX0xJQlJBUklFUygke3RhcmdldH0gc29ja2V0IG5zbCkKLQlFTkRJRiAoKQorCQlTRVQoTElCR0lUMl9QQ19MSUJTICIke0xJQkdJVDJfUENfTElCU30gLWxzb2NrZXQgLWxuc2wiIFBBUkVOVF9TQ09QRSkKKwlFTFNFSUYoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgiKQorCQlUQVJHRVRfTElOS19MSUJSQVJJRVMoJHt0YXJnZXR9IHJ0KQorCQlTRVQoTElCR0lUMl9QQ19MSUJTICIke0xJQkdJVDJfUENfTElCU30gLWxydCIgUEFSRU5UX1NDT1BFKQorCUVORElGKCkKKworCUlGKFVTRV9JQ09OVikKKwkJVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7dGFyZ2V0fSBpY29udikKKwkJQUREX0RFRklOSVRJT05TKC1ER0lUX1VTRV9JQ09OVikKKwkJU0VUKExJQkdJVDJfUENfTElCUyAiJHtMSUJHSVQyX1BDX0xJQlN9IC1saWNvbnYiIFBBUkVOVF9TQ09QRSkKKwlFTkRJRigpCisKIAlJRihUSFJFQURTQUZFKQogCQlUQVJHRVRfTElOS19MSUJSQVJJRVMoJHt0YXJnZXR9ICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0pCiAJRU5ESUYoKQpAQCAtNjcsNyArOTcsNyBAQAogIyBleHBsb3JlciBkb2VzLiBUaGlzIGlzIGVzcC4gdXNlZnVsIHdpdGggdGhlIGxpYmdpdDJfY2xhciBwcm9qZWN0LCB3ZXJlCiAjIHVzdWFsbHkgMiBvciBtb3JlIGZpbGVzIHNoYXJlIHRoZSBzYW1lIG5hbWUuICBTYWRseSwgdGhpcyBmaWxlIGdyb3VwaW5nCiAjIGlzIGEgcGVyLWRpcmVjdG9yeSBvcHRpb24gaW4gY21ha2UgYW5kIG5vdCBwZXItdGFyZ2V0LCByZXN1bHRpbmcgaW4KLSMgZW1wdHkgdmlydHVhbCBmb2xkZXJzICJ0ZXN0cy1jbGFyIiBmb3IgdGhlIGdpdDIuZGxsCisjIGVtcHR5IHZpcnR1YWwgZm9sZGVycyAidGVzdHMiIGZvciB0aGUgZ2l0Mi5kbGwKIEZVTkNUSU9OKE1TVkNfU1BMSVRfU09VUkNFUyB0YXJnZXQpCiAJSUYoTVNWQ19JREUpCiAJCUdFVF9UQVJHRVRfUFJPUEVSVFkoc291cmNlcyAke3RhcmdldH0gU09VUkNFUykKQEAgLTk2LDggKzEyNiwxMCBAQAogIyBGaW5kIHJlcXVpcmVkIGRlcGVuZGVuY2llcwogSU5DTFVERV9ESVJFQ1RPUklFUyhzcmMgaW5jbHVkZSkKIAotSUYgKFdJTjMyIEFORCBOT1QgTUlOR1cpCitJRiAoV0lOMzIgQU5EIFdJTkhUVFAgQU5EIE5PVCBNSU5HVykKIAlBRERfREVGSU5JVElPTlMoLURHSVRfV0lOSFRUUCkKKwlJTkNMVURFX0RJUkVDVE9SSUVTKGRlcHMvaHR0cC1wYXJzZXIpCisJRklMRShHTE9CIFNSQ19IVFRQIGRlcHMvaHR0cC1wYXJzZXIvKi5jIGRlcHMvaHR0cC1wYXJzZXIvKi5oKQogRUxTRSAoKQogCUlGIChOT1QgQU1JR0EpCiAJCUZJTkRfUEFDS0FHRShPcGVuU1NMKQpAQCAtMTA3LDEwICsxMzksMTEgQEAKIAlJRiAoSFRUUF9QQVJTRVJfRk9VTkQgQU5EIEhUVFBfUEFSU0VSX1ZFUlNJT05fTUFKT1IgRVFVQUwgMikKIAkJSU5DTFVERV9ESVJFQ1RPUklFUygke0hUVFBfUEFSU0VSX0lOQ0xVREVfRElSU30pCiAJCUxJTktfTElCUkFSSUVTKCR7SFRUUF9QQVJTRVJfTElCUkFSSUVTfSkKKwkJU0VUKExJQkdJVDJfUENfTElCUyAiJHtMSUJHSVQyX1BDX0xJQlN9IC1saHR0cF9wYXJzZXIiKQogCUVMU0UoKQogCQlNRVNTQUdFKCJodHRwLXBhcnNlciB3YXMgbm90IGZvdW5kIG9yIGlzIHRvbyBvbGQ7IHVzaW5nIGJ1bmRsZWQgM3JkLXBhcnR5IHNvdXJjZXMuIikKIAkJSU5DTFVERV9ESVJFQ1RPUklFUyhkZXBzL2h0dHAtcGFyc2VyKQotCQlGSUxFKEdMT0IgU1JDX0hUVFAgZGVwcy9odHRwLXBhcnNlci8qLmMpCisJCUZJTEUoR0xPQiBTUkNfSFRUUCBkZXBzL2h0dHAtcGFyc2VyLyouYyBkZXBzL2h0dHAtcGFyc2VyLyouaCkKIAlFTkRJRigpCiBFTkRJRigpCiAKQEAgLTEyMCw2ICsxNTMsNyBAQAogCUZJTEUoR0xPQiBTUkNfU0hBMSBzcmMvaGFzaC9oYXNoX3dpbjMyLmMpCiBFTFNFSUYgKE9QRU5TU0xfRk9VTkQgQU5EIE5PVCBTSEExX1RZUEUgU1RSRVFVQUwgImJ1aWx0aW4iKQogCUFERF9ERUZJTklUSU9OUygtRE9QRU5TU0xfU0hBMSkKKwlTRVQoTElCR0lUMl9QQ19SRVFVSVJFUyAiJHtMSUJHSVQyX1BDX1JFUVVJUkVTfSBvcGVuc3NsIikKIEVMU0UoKQogCUZJTEUoR0xPQiBTUkNfU0hBMSBzcmMvaGFzaC9oYXNoX2dlbmVyaWMuYykKIEVORElGKCkKQEAgLTEzMCw3ICsxNjQsNyBAQAogRU5ESUYoKQogCiAjIEluY2x1ZGUgUE9TSVggcmVnZXggd2hlbiBpdCBpcyByZXF1aXJlZAotSUYoV0lOMzIgT1IgQU1JR0EpCitJRihXSU4zMiBPUiBBTUlHQSBPUiBBTkRST0lEKQogCUlOQ0xVREVfRElSRUNUT1JJRVMoZGVwcy9yZWdleCkKIAlTRVQoU1JDX1JFR0VYIGRlcHMvcmVnZXgvcmVnZXguYykKIEVORElGKCkKQEAgLTE0MiwyNCArMTc2LDMxIEBACiBJRiAoWkxJQl9GT1VORCkKIAlJTkNMVURFX0RJUkVDVE9SSUVTKCR7WkxJQl9JTkNMVURFX0RJUlN9KQogCUxJTktfTElCUkFSSUVTKCR7WkxJQl9MSUJSQVJJRVN9KQorCUlGKEFQUExFKQorCQlTRVQoTElCR0lUMl9QQ19MSUJTICIke0xJQkdJVDJfUENfTElCU30gLWx6IikKKwlFTFNFKCkKKwkJU0VUKExJQkdJVDJfUENfUkVRVUlSRVMgIiR7TElCR0lUMl9QQ19SRVFVSVJFU30gemxpYiIpCisJRU5ESUYoKQogCSMgRmFrZSB0aGUgbWVzc2FnZSBDTWFrZSB3b3VsZCBoYXZlIHNob3duCiAJTUVTU0FHRSgiLS0gRm91bmQgemxpYjogJHtaTElCX0xJQlJBUll9IikKIEVMU0UoKQogCU1FU1NBR0UoICJ6bGliIHdhcyBub3QgZm91bmQ7IHVzaW5nIGJ1bmRsZWQgM3JkLXBhcnR5IHNvdXJjZXMuIiApCiAJSU5DTFVERV9ESVJFQ1RPUklFUyhkZXBzL3psaWIpCiAJQUREX0RFRklOSVRJT05TKC1ETk9fVklaIC1EU1REQyAtRE5PX0daSVApCi0JRklMRShHTE9CIFNSQ19aTElCIGRlcHMvemxpYi8qLmMpCisJRklMRShHTE9CIFNSQ19aTElCIGRlcHMvemxpYi8qLmMgZGVwcy96bGliLyouaCkKIEVORElGKCkKIAotSUYoTk9UIExJQlNTSDJfTElCUkFSWSkKK0lGIChVU0VfU1NIIEFORCBOT1QgTUlOR1cpCiAJRklORF9QQUNLQUdFKExJQlNTSDIgUVVJRVQpCiBFTkRJRigpCiBJRiAoTElCU1NIMl9GT1VORCkKIAlBRERfREVGSU5JVElPTlMoLURHSVRfU1NIKQogCUlOQ0xVREVfRElSRUNUT1JJRVMoJHtMSUJTU0gyX0lOQ0xVREVfRElSfSkKKwlTRVQoTElCR0lUMl9QQ19SRVFVSVJFUyAiJHtMSUJHSVQyX1BDX1JFUVVJUkVTfSBsaWJzc2gyIikKIAlTRVQoU1NIX0xJQlJBUklFUyAke0xJQlNTSDJfTElCUkFSSUVTfSkKIEVORElGKCkKIAorCiAjIFBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzCiBJRiAoTVNWQykKIApAQCAtMjg1LDE5ICszMjYsMTkgQEAKIEFERF9ERUZJTklUSU9OUygtRF9GSUxFX09GRlNFVF9CSVRTPTY0KQogCiAjIENvbGxlY3Qgc291cmNlZmlsZXMKLUZJTEUoR0xPQiBTUkNfSCBpbmNsdWRlL2dpdDIvKi5oKQorRklMRShHTE9CIFNSQ19IIGluY2x1ZGUvZ2l0Mi5oIGluY2x1ZGUvZ2l0Mi8qLmggaW5jbHVkZS9naXQyL3N5cy8qLmgpCiAKICMgT24gV2luZG93cyB1c2Ugc3BlY2lmaWMgcGxhdGZvcm0gc291cmNlcwogSUYgKFdJTjMyIEFORCBOT1QgQ1lHV0lOKQogCUFERF9ERUZJTklUSU9OUygtRFdJTjMyIC1EX1dJTjMyX1dJTk5UPTB4MDUwMSkKLQlGSUxFKEdMT0IgU1JDX09TIHNyYy93aW4zMi8qLmMpCisJRklMRShHTE9CIFNSQ19PUyBzcmMvd2luMzIvKi5jIHNyYy93aW4zMi8qLmgpCiBFTFNFSUYgKEFNSUdBKQogCUFERF9ERUZJTklUSU9OUygtRE5PX0FERFJJTkZPIC1ETk9fUkVBRERJUl9SKQotCUZJTEUoR0xPQiBTUkNfT1Mgc3JjL2FtaWdhLyouYykKKwlGSUxFKEdMT0IgU1JDX09TIHNyYy9hbWlnYS8qLmMgc3JjL2FtaWdhLyouaCkKIEVMU0UoKQotCUZJTEUoR0xPQiBTUkNfT1Mgc3JjL3VuaXgvKi5jKQorCUZJTEUoR0xPQiBTUkNfT1Mgc3JjL3VuaXgvKi5jIHNyYy91bml4LyouaCkKIEVORElGKCkKLUZJTEUoR0xPQiBTUkNfR0lUMiBzcmMvKi5jIHNyYy90cmFuc3BvcnRzLyouYyBzcmMveGRpZmYvKi5jKQorRklMRShHTE9CIFNSQ19HSVQyIHNyYy8qLmMgc3JjLyouaCBzcmMvdHJhbnNwb3J0cy8qLmMgc3JjL3RyYW5zcG9ydHMvKi5oIHNyYy94ZGlmZi8qLmMgc3JjL3hkaWZmLyouaCkKIAogIyBEZXRlcm1pbmUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtYWNoaW5lCiBJRiAoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQpAQCAtMzA5LDcgKzM1MCw3IEBACiBFTkRJRigpCiAKICMgQ29tcGlsZSBhbmQgbGluayBsaWJnaXQyCi1BRERfTElCUkFSWShnaXQyICR7U1JDX0dJVDJ9ICR7U1JDX09TfSAke1NSQ19aTElCfSAke1NSQ19IVFRQfSAke1NSQ19SRUdFWH0gJHtTUkNfU0hBMX0gJHtXSU5fUkN9KQorQUREX0xJQlJBUlkoZ2l0MiAke1NSQ19IfSAke1NSQ19HSVQyfSAke1NSQ19PU30gJHtTUkNfWkxJQn0gJHtTUkNfSFRUUH0gJHtTUkNfUkVHRVh9ICR7U1JDX1NIQTF9ICR7V0lOX1JDfSkKIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhnaXQyICR7U1NMX0xJQlJBUklFU30pCiBUQVJHRVRfTElOS19MSUJSQVJJRVMoZ2l0MiAke1NTSF9MSUJSQVJJRVN9KQogVEFSR0VUX09TX0xJQlJBUklFUyhnaXQyKQpAQCAtMzUyLDE5ICszOTMsMTkgQEAKIElGIChCVUlMRF9DTEFSKQogCUZJTkRfUEFDS0FHRShQeXRob25JbnRlcnAgUkVRVUlSRUQpCiAKLQlTRVQoQ0xBUl9GSVhUVVJFUyAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RzLWNsYXIvcmVzb3VyY2VzLyIpCi0JU0VUKENMQVJfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RzLWNsYXIiKQotCVNFVChDTEFSX1JFU09VUkNFUyAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RzLWNsYXIvcmVzb3VyY2VzIiBDQUNIRSBQQVRIICJQYXRoIHRvIHRlc3QgcmVzb3VyY2VzLiIpCisJU0VUKENMQVJfRklYVFVSRVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS90ZXN0cy9yZXNvdXJjZXMvIikKKwlTRVQoQ0xBUl9QQVRIICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vdGVzdHMiKQorCVNFVChDTEFSX1JFU09VUkNFUyAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3Rlc3RzL3Jlc291cmNlcyIgQ0FDSEUgUEFUSCAiUGF0aCB0byB0ZXN0IHJlc291cmNlcy4iKQogCUFERF9ERUZJTklUSU9OUygtRENMQVJfRklYVFVSRV9QQVRIPVwiJHtDTEFSX0ZJWFRVUkVTfVwiKQogCUFERF9ERUZJTklUSU9OUygtRENMQVJfUkVTT1VSQ0VTPVwiJHtURVNUX1JFU09VUkNFU31cIikKIAogCUlOQ0xVREVfRElSRUNUT1JJRVMoJHtDTEFSX1BBVEh9KQotCUZJTEUoR0xPQl9SRUNVUlNFIFNSQ19URVNUICR7Q0xBUl9QQVRIfS8qLyouYykKKwlGSUxFKEdMT0JfUkVDVVJTRSBTUkNfVEVTVCAke0NMQVJfUEFUSH0vKi8qLmMgJHtDTEFSX1BBVEh9LyovKi5oKQogCVNFVChTUkNfQ0xBUiAiJHtDTEFSX1BBVEh9L21haW4uYyIgIiR7Q0xBUl9QQVRIfS9jbGFyX2xpYmdpdDIuYyIgIiR7Q0xBUl9QQVRIfS9jbGFyLmMiKQogCiAJQUREX0NVU1RPTV9DT01NQU5EKAogCQlPVVRQVVQgJHtDTEFSX1BBVEh9L2NsYXIuc3VpdGUKLQkJQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSBnZW5lcmF0ZS5weSAtZiAteG9ubGluZSAuCisJCUNPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gZ2VuZXJhdGUucHkgLWYgLXhvbmxpbmUgLXhzdHJlc3MgLgogCQlERVBFTkRTICR7U1JDX1RFU1R9CiAJCVdPUktJTkdfRElSRUNUT1JZICR7Q0xBUl9QQVRIfQogCSkKQEAgLTM3Myw3ICs0MTQsNyBAQAogCQkke0NMQVJfUEFUSH0vY2xhci5jCiAJCVBST1BFUlRJRVMgT0JKRUNUX0RFUEVORFMgJHtDTEFSX1BBVEh9L2NsYXIuc3VpdGUpCiAKLQlBRERfRVhFQ1VUQUJMRShsaWJnaXQyX2NsYXIgJHtTUkNfR0lUMn0gJHtTUkNfT1N9ICR7U1JDX0NMQVJ9ICR7U1JDX1RFU1R9ICR7U1JDX1pMSUJ9ICR7U1JDX0hUVFB9ICR7U1JDX1JFR0VYfSAke1NSQ19TSEExfSkKKwlBRERfRVhFQ1VUQUJMRShsaWJnaXQyX2NsYXIgJHtTUkNfSH0gJHtTUkNfR0lUMn0gJHtTUkNfT1N9ICR7U1JDX0NMQVJ9ICR7U1JDX1RFU1R9ICR7U1JDX1pMSUJ9ICR7U1JDX0hUVFB9ICR7U1JDX1JFR0VYfSAke1NSQ19TSEExfSkKIAogCVRBUkdFVF9MSU5LX0xJQlJBUklFUyhsaWJnaXQyX2NsYXIgJHtTU0xfTElCUkFSSUVTfSkKIAlUQVJHRVRfTElOS19MSUJSQVJJRVMobGliZ2l0Ml9jbGFyICR7U1NIX0xJQlJBUklFU30pCkBAIC00MDksMjMgKzQ1MCw1IEBACiBFTkRJRiAoKQogCiBJRiAoQlVJTERfRVhBTVBMRVMpCi0JRklMRShHTE9CX1JFQ1VSU0UgRVhBTVBMRV9TUkMgZXhhbXBsZXMvbmV0d29yay8qLmMpCi0JQUREX0VYRUNVVEFCTEUoY2dpdDIgJHtFWEFNUExFX1NSQ30pCi0JSUYoV0lOMzIpCi0JCVRBUkdFVF9MSU5LX0xJQlJBUklFUyhjZ2l0MiBnaXQyKQotCUVMU0UoKQotCQlUQVJHRVRfTElOS19MSUJSQVJJRVMoY2dpdDIgZ2l0MiBwdGhyZWFkKQotCUVORElGKCkKLQotCUFERF9FWEVDVVRBQkxFKGdpdC1kaWZmIGV4YW1wbGVzL2RpZmYuYykKLQlUQVJHRVRfTElOS19MSUJSQVJJRVMoZ2l0LWRpZmYgZ2l0MikKLQotCUFERF9FWEVDVVRBQkxFKGdpdC1nZW5lcmFsIGV4YW1wbGVzL2dlbmVyYWwuYykKLQlUQVJHRVRfTElOS19MSUJSQVJJRVMoZ2l0LWdlbmVyYWwgZ2l0MikKLQotCUFERF9FWEVDVVRBQkxFKGdpdC1zaG93aW5kZXggZXhhbXBsZXMvc2hvd2luZGV4LmMpCi0JVEFSR0VUX0xJTktfTElCUkFSSUVTKGdpdC1zaG93aW5kZXggZ2l0MikKLQotCUFERF9FWEVDVVRBQkxFKGdpdC1yZXYtbGlzdCBleGFtcGxlcy9yZXYtbGlzdC5jKQotCVRBUkdFVF9MSU5LX0xJQlJBUklFUyhnaXQtcmV2LWxpc3QgZ2l0MikKKwlBRERfU1VCRElSRUNUT1JZKGV4YW1wbGVzKQogRU5ESUYgKCkKZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZAppbmRleCAyOGVmMjdmLi44MDdjZDUzIDEwMDY0NAotLS0gYS9DT05UUklCVVRJTkcubWQKKysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0zLDYgKzMsMTIgQEAKIFdlJ3JlIG1ha2luZyBpdCBlYXN5IHRvIGRvIGludGVyZXN0aW5nIHRoaW5ncyB3aXRoIGdpdCwgYW5kIHdlJ2QgbG92ZSB0byBoYXZlCiB5b3VyIGhlbHAuCiAKKyMjIExpY2Vuc2luZworCitCeSBjb250cmlidXRpbmcgdG8gbGliZ2l0MiwgeW91IGFncmVlIHRvIHJlbGVhc2UgeW91ciBjb250cmlidXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlLgorRm9yIGNvZGUgdW5kZXIgYGV4YW1wbGVzYCwgdGhpcyBpcyBnb3Zlcm5lZCBieSB0aGUgW0NDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb25dKGV4YW1wbGVzL0NPUFlJTkcpLgorQWxsIG90aGVyIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFtHUEwgdjIgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbl0oQ09QWUlORykuCisKICMjIERpc2N1c3Npb24gJiBDaGF0CiAKIFdlIGhhbmcgb3V0IGluIHRoZSAjbGliZ2l0MiBjaGFubmVsIG9uIGlyYy5mcmVlbm9kZS5uZXQuCkBAIC00OCw2ICs1NCwxMiBAQAogdG8gcmVhZCB0aGUgd2hvbGUgZGlmZiB0byBmaWd1cmUgb3V0IHdoeSB5b3UncmUgY29udHJpYnV0aW5nIGluIHRoZSBmaXJzdAogcGxhY2UsIHlvdSdyZSBsZXNzIGxpa2VseSB0byBnZXQgZmVlZGJhY2sgYW5kIGhhdmUgeW91ciBjaGFuZ2UgbWVyZ2VkIGluLgogCitJZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBwYXJ0aWN1bGFyIGFyZWEgdGhlbiBmZWVsIGZyZWUgdG8gc3VibWl0IGEgUFIgdGhhdAoraGlnaGxpZ2h0cyB5b3VyIHdvcmsgaW4gcHJvZ3Jlc3MgKGFuZCBmbGFnIGluIHRoZSBQUiB0aXRsZSB0aGF0IGl0J3Mgbm90CityZWFkeSB0byBtZXJnZSkuIFRoaXMgd2lsbCBoZWxwIGluIGdldHRpbmcgdmlzaWJpbGl0eSBmb3IgeW91ciBmaXgsIGFsbG93CitvdGhlcnMgdG8gY29tbWVudCBlYXJseSBvbiB0aGUgY2hhbmdlcyBhbmQgYWxzbyBsZXQgb3RoZXJzIGtub3cgdGhhdCB5b3UKK2FyZSBjdXJyZW50bHkgd29ya2luZyBvbiBzb21ldGhpbmcuCisKICMjIFBvcnRpbmcgQ29kZSBGcm9tIE90aGVyIE9wZW4tU291cmNlIFByb2plY3RzCiAKIGBsaWJnaXQyYCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCB2MiB3aXRoIGEgbGlua2luZwpAQCAtNTcsMTQgKzY5LDE3IEBACiBwcm9qZWN0LCB3aGljaCBtZWFucyB0aGF0IGluIG9yZGVyIHRvIHBvcnQgY29kZSB0byB0aGlzIHByb2plY3QsIHdlIG5lZWQgdGhlCiBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBhdXRob3IuICBDaGVjayB0aGUKIFtgZ2l0LmdpdC1hdXRob3JzYF0oaHR0cHM6Ly9naXRodWIuY29tL2xpYmdpdDIvbGliZ2l0Mi9ibG9iL2RldmVsb3BtZW50L2dpdC5naXQtYXV0aG9ycykKLWZpbGUgZm9yIGF1dGhvcnMgd2hvIGhhdmUgYWxyZWFkeSBjb25zZW50ZWQ7IGZlZWwgZnJlZSB0byBhZGQgc29tZW9uZSBpZgoteW91J3ZlIG9idGFpbmVkIHRoZWlyIGNvbnNlbnQuCitmaWxlIGZvciBhdXRob3JzIHdobyBoYXZlIGFscmVhZHkgY29uc2VudGVkLgogCiBPdGhlciBsaWNlbnNlcyBoYXZlIG90aGVyIHJlcXVpcmVtZW50czsgY2hlY2sgdGhlIGxpY2Vuc2Ugb2YgdGhlIGxpYnJhcnkKIHlvdSdyZSBwb3J0aW5nIGNvZGUgKmZyb20qIHRvIHNlZSB3aGF0IHlvdSBuZWVkIHRvIGRvLiAgQXMgYSBnZW5lcmFsIHJ1bGUsCiBNSVQgYW5kIEJTRCAoMy1jbGF1c2UpIGxpY2Vuc2VzIGFyZSB0eXBpY2FsbHkgbm8gcHJvYmxlbS4gIEFwYWNoZSAyLjAKIGxpY2Vuc2UgdHlwaWNhbGx5IGRvZXNuJ3Qgd29yayBkdWUgdG8gR1BMIGluY29tcGF0aWJpbGl0eS4KIAorSWYgeW91IGFyZSBwdWxsaW5nIGluIGNvZGUgZnJvbSBjb3JlIEdpdCwgYW5vdGhlciBwcm9qZWN0IG9yIGNvZGUgeW91J3ZlIHB1bGxlZCBmcm9tCithIGZvcnVtIC8gU3RhY2sgT3ZlcmZsb3cgdGhlbiBwbGVhc2UgZmxhZyB0aGlzIGluIHlvdXIgUFIgYW5kIGFsc28gbWFrZSBzdXJlIHlvdSd2ZQorZ2l2ZW4gcHJvcGVyIGNyZWRpdCB0byB0aGUgb3JpZ2luYWwgYXV0aG9yIGluIHRoZSBjb2RlIHNuaXBwZXQuCisKICMjIFN0eWxlIEd1aWRlCiAKIGBsaWJnaXQyYCBpcyB3cml0dGVuIGluIFtBTlNJIENdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9DKQpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKaW5kZXggZDFjYTRkNC4uZjdlOWYzYSAxMDA2NDQKLS0tIGEvQ09QWUlORworKysgYi9DT1BZSU5HCkBAIC05MjgsMyArOTI4LDY2IEBACiAgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCiAKIFRoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUG9ydGlvbnMgb2Ygc3JjL3dpbjMyL3Bvc2l4X3czMi5jIGFyZSBkZXJyaXZlZCBmcm9tIGxpbmtfd2luMzIuYyBpbiBQSFA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgVGhlIFBIUCBMaWNlbnNlLCB2ZXJzaW9uIDMuMDEKK0NvcHlyaWdodCAoYykgMTk5OSAtIDIwMTIgVGhlIFBIUCBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgZGlzdHJpYnV0aW9uLgorIAorICAzLiBUaGUgbmFtZSAiUEhQIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgZ3JvdXBAcGhwLm5ldC4KKyAgCisgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJQSFAiLCBub3IKKyAgICAgbWF5ICJQSFAiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICAgICBmcm9tIGdyb3VwQHBocC5uZXQuICBZb3UgbWF5IGluZGljYXRlIHRoYXQgeW91ciBzb2Z0d2FyZSB3b3JrcyBpbgorICAgICBjb25qdW5jdGlvbiB3aXRoIFBIUCBieSBzYXlpbmcgIkZvbyBmb3IgUEhQIiBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAgICAgaXQgIlBIUCBGb28iIG9yICJwaHBmb28iCisgCisgIDUuIFRoZSBQSFAgR3JvdXAgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorICAgICBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCisgICAgIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorICAgICBPbmNlIGNvdmVyZWQgY29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24KKyAgICAgb2YgdGhlIGxpY2Vuc2UsIHlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIGNvdmVyZWQgY29kZQorICAgICB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZQorICAgICBwdWJsaXNoZWQgYnkgdGhlIFBIUCBHcm91cC4gTm8gb25lIG90aGVyIHRoYW4gdGhlIFBIUCBHcm91cCBoYXMKKyAgICAgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBjb3ZlcmVkIGNvZGUgY3JlYXRlZAorICAgICB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBQSFAgc29mdHdhcmUsIGZyZWVseSBhdmFpbGFibGUgZnJvbQorICAgICA8aHR0cDovL3d3dy5waHAubmV0L3NvZnR3YXJlLz4iLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBgYEFTIElTJycgQU5EIAorQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUEhQCitERVZFTE9QTUVOVCBURUFNIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuZW1iZWQgYi9NYWtlZmlsZS5lbWJlZAppbmRleCA3NmI0ZDNjLi5lYjhhNzhlIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5lbWJlZAorKysgYi9NYWtlZmlsZS5lbWJlZApAQCAtMSwyNiArMSw0NCBAQAotUExBVEZPUk09JChzaGVsbCB1bmFtZSAtbykKK1BMQVRGT1JNPSQoc2hlbGwgdW5hbWUgLXMpCisKK2lmbmVxICgsJChDUk9TU19DT01QSUxFKSkKKwlQUkVGSVg9JChDUk9TU19DT01QSUxFKS0KK2Vsc2UKKwlQUkVGSVg9CitlbmRpZgorCitNSU5HVz0wCitpZm5lcSAoLCQoZmluZHN0cmluZyBNSU5HVzMyLCQoUExBVEZPUk0pKSkKKwlNSU5HVz0xCitlbmRpZgoraWZuZXEgKCwkKGZpbmRzdHJpbmcgbWluZ3csJChDUk9TU19DT01QSUxFKSkpCisJTUlOR1c9MQorZW5kaWYKIAogcm09cm0gLWYKLUFSPWFyIGNxCi1SQU5MSUI9cmFubGliCitBUj0kKFBSRUZJWClhciBjcQorUkFOTElCPSQoUFJFRklYKXJhbmxpYgorCiBMSUJOQU1FPWxpYmdpdDIuYQotaWZlcSAoJChQTEFURk9STSksTXN5cykKKworaWZlcSAoJChNSU5HVyksMSkKIAlDQz1nY2MKIGVsc2UKIAlDQz1jYwogZW5kaWYKIAorQ0M6PSQoUFJFRklYKSQoQ0MpCisKIElOQ0xVREVTPSAtSS4gLUlzcmMgLUlpbmNsdWRlIC1JZGVwcy9odHRwLXBhcnNlciAtSWRlcHMvemxpYgogCiBERUZJTkVTPSAkKElOQ0xVREVTKSAtRE5PX1ZJWiAtRFNUREMgLUROT19HWklQIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfR05VX1NPVVJDRSAkKEVYVFJBX0RFRklORVMpCi1DRkxBR1M9IC1nICQoREVGSU5FUykgLVdhbGwgLVdleHRyYSAtTzIgJChFWFRSQV9DRkxBR1MpCitDRkxBR1M9IC1nICQoREVGSU5FUykgLVdhbGwgLVdleHRyYSAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIC1PMiAkKEVYVFJBX0NGTEFHUykKIAogU1JDUyA9ICQod2lsZGNhcmQgc3JjLyouYykgJCh3aWxkY2FyZCBzcmMvdHJhbnNwb3J0cy8qLmMpICQod2lsZGNhcmQgc3JjL3hkaWZmLyouYykgJCh3aWxkY2FyZCBkZXBzL2h0dHAtcGFyc2VyLyouYykgJCh3aWxkY2FyZCBkZXBzL3psaWIvKi5jKSBzcmMvaGFzaC9oYXNoX2dlbmVyaWMuYwogCi1pZmVxICgkKFBMQVRGT1JNKSxNc3lzKQoraWZlcSAoJChNSU5HVyksMSkKIAlTUkNTICs9ICQod2lsZGNhcmQgc3JjL3dpbjMyLyouYykgJCh3aWxkY2FyZCBzcmMvY29tcGF0LyouYykgZGVwcy9yZWdleC9yZWdleC5jCiAJSU5DTFVERVMgKz0gLUlkZXBzL3JlZ2V4Ci0JREVGSU5FUyArPSAtRFdJTjMyIC1EX1dJTjMyX1dJTk5UPTB4MDUwMQorCURFRklORVMgKz0gLURXSU4zMiAtRF9XSU4zMl9XSU5OVD0weDA1MDEgLURfX1VTRV9NSU5HV19BTlNJX1NURElPPTEKIGVsc2UKIAlTUkNTICs9ICQod2lsZGNhcmQgc3JjL3VuaXgvKi5jKSAKIAlDRkxBR1MgKz0gLWZQSUMKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCBhMmExODc2Li44Y2U2MGFmIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC0xLDMwICsxLDM2IEBACiBsaWJnaXQyIC0gdGhlIEdpdCBsaW5rYWJsZSBsaWJyYXJ5Ci09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9zZWN1cmUudHJhdmlzLWNpLm9yZy9saWJnaXQyL2xpYmdpdDIucG5nP2JyYW5jaD1kZXZlbG9wbWVudCldKGh0dHA6Ly90cmF2aXMtY2kub3JnL2xpYmdpdDIvbGliZ2l0MikKIAotbGliZ2l0MiBpcyBhIHBvcnRhYmxlLCBwdXJlIEMgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdpdCBjb3JlIG1ldGhvZHMgcHJvdmlkZWQgYXMgYQorYGxpYmdpdDJgIGlzIGEgcG9ydGFibGUsIHB1cmUgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR2l0IGNvcmUgbWV0aG9kcyBwcm92aWRlZCBhcyBhCiByZS1lbnRyYW50IGxpbmthYmxlIGxpYnJhcnkgd2l0aCBhIHNvbGlkIEFQSSwgYWxsb3dpbmcgeW91IHRvIHdyaXRlIG5hdGl2ZQogc3BlZWQgY3VzdG9tIEdpdCBhcHBsaWNhdGlvbnMgaW4gYW55IGxhbmd1YWdlIHdpdGggYmluZGluZ3MuCiAKLWxpYmdpdDIgaXMgbGljZW5zZWQgdW5kZXIgYSAqKnZlcnkgcGVybWlzc2l2ZSBsaWNlbnNlKiogKEdQTHYyIHdpdGggYSBzcGVjaWFsIExpbmtpbmcgRXhjZXB0aW9uKS4KLVRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgeW91IGNhbiBsaW5rIGl0ICh1bm1vZGlmaWVkKSB3aXRoIGFueSBraW5kIG9mIHNvZnR3YXJlIHdpdGhvdXQgaGF2aW5nIHRvCi1yZWxlYXNlIGl0cyBzb3VyY2UgY29kZS4KK2BsaWJnaXQyYCBpcyBsaWNlbnNlZCB1bmRlciBhICoqdmVyeSBwZXJtaXNzaXZlIGxpY2Vuc2UqKiAoR1BMdjIgd2l0aCBhIHNwZWNpYWwKK0xpbmtpbmcgRXhjZXB0aW9uKS4gIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgeW91IGNhbiBsaW5rIGl0ICh1bm1vZGlmaWVkKQord2l0aCBhbnkga2luZCBvZiBzb2Z0d2FyZSB3aXRob3V0IGhhdmluZyB0byByZWxlYXNlIGl0cyBzb3VyY2UgY29kZS4KK0FkZGl0aW9uYWxseSwgdGhlIGV4YW1wbGUgY29kZSBoYXMgYmVlbiByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiAoc2VlIHRoZQorW3NlcGFyYXRlIGxpY2Vuc2VdKGV4YW1wbGVzL0NPUFlJTkcpIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KIAotKiBNYWlsaW5nIGxpc3Q6IH5+PGxpYmdpdDJAbGlicmVsaXN0Lm9yZz5+fgotICAgIFRoZSBsaWJnaXQyIG1haWxpbmcgbGlzdCBoYXMKLSAgICB0cmFkaXRpb25hbGx5IGJlZW4gaG9zdGVkIGluIExpYnJlbGlzdCwgYnV0IExpYnJlbGlzdCBpcyBhbmQgaGFzIGFsd2F5cwotICAgIGJlZW4gYSBzaGl0c2hvdy4gV2UgZW5jb3VyYWdlIHlvdSB0byBbb3BlbiBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL2xpYmdpdDIvbGliZ2l0Mi9pc3N1ZXMpCi0gICAgb24gR2l0SHViIGluc3RlYWQgZm9yIGFueSBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoZSBsaWJyYXJ5LgotICAgICogQXJjaGl2ZXM6IDxodHRwOi8vbGlicmVsaXN0LmNvbS9icm93c2VyL2xpYmdpdDIvPgotKiBXZWJzaXRlOiA8aHR0cDovL2xpYmdpdDIuZ2l0aHViLmNvbT4KKyogV2Vic2l0ZTogW2xpYmdpdDIuZ2l0aHViLmNvbV0oaHR0cDovL2xpYmdpdDIuZ2l0aHViLmNvbSkKKyogU3RhY2tPdmVyZmxvdyBUYWc6IFtsaWJnaXQyXShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zL3RhZ2dlZC9saWJnaXQyKQorKiBJc3N1ZXM6IFtHaXRIdWIgSXNzdWVzXShodHRwczovL2dpdGh1Yi5jb20vbGliZ2l0Mi9saWJnaXQyL2lzc3VlcykgKFJpZ2h0IGhlcmUhKQogKiBBUEkgZG9jdW1lbnRhdGlvbjogPGh0dHA6Ly9saWJnaXQyLmdpdGh1Yi5jb20vbGliZ2l0Mj4KLSogSVJDOiAjbGliZ2l0MiBvbiBpcmMuZnJlZW5vZGUubmV0LgorKiBJUkM6IFsjbGliZ2l0Ml0oaXJjOi8vaXJjLmZyZWVub2RlLm5ldC9saWJnaXQyKSBvbiBpcmMuZnJlZW5vZGUubmV0LgorKiBNYWlsaW5nIGxpc3Q6IFRoZSBsaWJnaXQyIG1haWxpbmcgbGlzdCB3YXMKKyAgICB0cmFkaXRpb25hbGx5IGhvc3RlZCBpbiBMaWJyZWxpc3QgYnV0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFdlIGVuY291cmFnZSB5b3UgdG8gCisgICAgW3VzZSBTdGFja092ZXJmbG93XShodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zL3RhZ2dlZC9saWJnaXQyKSBpbnN0ZWFkIGZvciBhbnkgcXVlc3Rpb25zIHJlZ2FyZGluZworICAgIHRoZSBsaWJyYXJ5LCBvciBbb3BlbiBhbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL2xpYmdpdDIvbGliZ2l0Mi9pc3N1ZXMpIAorICAgIG9uIEdpdEh1YiBmb3IgYnVnIHJlcG9ydHMuICBUaGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgCisgICAgPGh0dHA6Ly9saWJyZWxpc3QuY29tL2Jyb3dzZXIvbGliZ2l0Mi8+LgorCiAKIFdoYXQgSXQgQ2FuIERvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PQogCi1saWJnaXQyIGlzIGFscmVhZHkgdmVyeSB1c2FibGUuCitgbGliZ2l0MmAgaXMgYWxyZWFkeSB2ZXJ5IHVzYWJsZSBhbmQgaXMgYmVpbmcgdXNlZCBpbiBwcm9kdWN0aW9uIGZvciBtYW55IGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcgdGhlIEdpdEh1Yi5jb20gc2l0ZSwgaW4gUGxhc3RpYyBTQ00gCithbmQgYWxzbyBwb3dlcmluZyBNaWNyb3NvZnQncyBWaXN1YWwgU3R1ZGlvIHRvb2xzIGZvciBHaXQuICBUaGUgbGlicmFyeSBwcm92aWRlczoKIAogKiBTSEEgY29udmVyc2lvbnMsIGZvcm1hdHRpbmcgYW5kIHNob3J0ZW5pbmcKICogYWJzdHJhY3RlZCBPREIgYmFja2VuZCBzeXN0ZW0KQEAgLTM5LDE1ICs0NSwyNiBAQAogKiBkZXNjcmlwdGl2ZSBhbmQgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMKICogLi4uYW5kIG1vcmUgKG92ZXIgMTc1IGRpZmZlcmVudCBBUEkgY2FsbHMpCiAKK09wdGlvbmFsIGRlcGVuZGVuY2llcworPT09PT09PT09PT09PT09PT09PT09CisKK1doaWxlIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIGdpdCBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgdGhlIG5lZWQgZm9yCitkZXBlbmRlbmNpZXMsIGl0IGNhbiBtYWtlIHVzZSBvZiBhIGZldyBsaWJyYXJpZXMgdG8gYWRkIHRvIGl0OgorCistIHB0aHJlYWRzIChub24tV2luZG93cykgdG8gZW5hYmxlIHRocmVhZHNhZmUgYWNjZXNzIGFzIHdlbGwgYXMgbXVsdGktdGhyZWFkZWQgcGFjayBnZW5lcmF0aW9uCistIE9wZW5TU0wgKG5vbi1XaW5kb3dzKSB0byB0YWxrIG92ZXIgSFRUUFMgYW5kIHByb3ZpZGUgdGhlIFNIQS0xIGZ1bmN0aW9ucworLSBMaWJTU0gyIHRvIGVuYWJsZSB0aGUgc3NoIHRyYW5zcG9ydAorLSBpY29udiAoT1NYKSB0byBoYW5kbGUgdGhlIEhGUysgcGF0aCBlbmNvZGluZyBwZWN1bGlhcml0aWVzCisKIEJ1aWxkaW5nIGxpYmdpdDIgLSBVc2luZyBDTWFrZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLWxpYmdpdDIgYnVpbGRzIGNsZWFubHkgb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLgorYGxpYmdpdDJgIGJ1aWxkcyBjbGVhbmx5IG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcy4KIFVuZGVyIFVuaXgtbGlrZSBzeXN0ZW1zLCBsaWtlIExpbnV4LCBcKkJTRCBhbmQgTWFjIE9TIFgsIGxpYmdpdDIgZXhwZWN0cyBgcHRocmVhZHNgIHRvIGJlIGF2YWlsYWJsZTsKIHRoZXkgc2hvdWxkIGJlIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIGFsbCBzeXN0ZW1zLiBVbmRlciBXaW5kb3dzLCBsaWJnaXQyIHVzZXMgdGhlIG5hdGl2ZSBXaW5kb3dzIEFQSQogZm9yIHRocmVhZGluZy4KIAotVGhlIGxpYmdpdDIgbGlicmFyeSBpcyBidWlsdCB1c2luZyBDTWFrZSAyLjYrICg8aHR0cDovL3d3dy5jbWFrZS5vcmc+KSBvbiBhbGwgcGxhdGZvcm1zLgorVGhlIGBsaWJnaXQyYCBsaWJyYXJ5IGlzIGJ1aWx0IHVzaW5nIGBDTWFrZSAyLjYrYCAoPGh0dHA6Ly93d3cuY21ha2Uub3JnPikgb24gYWxsIHBsYXRmb3Jtcy4KIAogT24gbW9zdCBzeXN0ZW1zIHlvdSBjYW4gYnVpbGQgdGhlIGxpYnJhcnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kcwogCkBAIC0xMDQsNiArMTIxLDI4IEBACiAoaHR0cHM6Ly9naXRodWIuY29tL2xpYmdpdDIvbGliZ2l0Mi93aWtpL0J1aWxkaW5nLWxpYmdpdDItb24tV2luZG93cykKIGZvciBtb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucy4KIAorQW5kcm9pZAorLS0tLS0tLQorCitFeHRyYWN0IHRvb2xjaGFpbiBmcm9tIE5ESyB1c2luZywgYG1ha2Utc3RhbmRhbG9uZS10b29sY2hhaW4uc2hgIHNjcmlwdC4KK09wdGlvbmFsbHksIGNyb3NzY29tcGlsZSBhbmQgaW5zdGFsbCBPcGVuU1NMIGluc2lkZSBvZiBpdC4gVGhlbiBjcmVhdGUgQ01ha2UKK3Rvb2xjaGFpbiBmaWxlIHRoYXQgY29uZmlndXJlcyBwYXRocyB0byB5b3VyIGNyb3NzY29tcGlsZXIgKHN1YnN0aXR1dGUgYHtQQVRIfWAKK3dpdGggZnVsbCBwYXRoIHRvIHRoZSB0b29sY2hhaW4pOgorCisJU0VUKENNQUtFX1NZU1RFTV9OQU1FIExpbnV4KQorCVNFVChDTUFLRV9TWVNURU1fVkVSU0lPTiBBbmRyb2lkKQorCQorCVNFVChDTUFLRV9DX0NPTVBJTEVSICAge1BBVEh9L2Jpbi9hcm0tbGludXgtYW5kcm9pZGVhYmktZ2NjKQorCVNFVChDTUFLRV9DWFhfQ09NUElMRVIge1BBVEh9L2Jpbi9hcm0tbGludXgtYW5kcm9pZGVhYmktZysrKQorCVNFVChDTUFLRV9GSU5EX1JPT1RfUEFUSCB7UEFUSH0vc3lzcm9vdC8pCisJCisJU0VUKENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBORVZFUikKKwlTRVQoQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkpCisJU0VUKENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZKQorCitBZGQgYC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9e3BhdGhUb1Rvb2xjaGFpbkZpbGV9IC1EQU5EUk9JRD0xYCB0byBjbWFrZSBjb21tYW5kCit3aGVuIGNvbmZpZ3VyaW5nLgorCiBMYW5ndWFnZSBCaW5kaW5ncwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMTgsOSArMTU3LDkgQEAKICogRGVscGhpCiAgICAgKiBHaXRGb3JEZWxwaGkgPGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnaXQyL0dpdEZvckRlbHBoaT4KICogRXJsYW5nCi0gICAgKiBHZWVmIDxodHRwczovL2dpdGh1Yi5jb20vc2NoYWNvbi9nZWVmPgorICAgICogR2VlZiA8aHR0cHM6Ly9naXRodWIuY29tL2Nhcmxvc21uL2dlZWY+CiAqIEdvCi0gICAgKiBnby1naXQgPGh0dHBzOi8vZ2l0aHViLmNvbS9zdHIxbmdzL2dvLWdpdD4KKyAgICAqIGdpdDJnbyA8aHR0cHM6Ly9naXRodWIuY29tL2xpYmdpdDIvZ2l0MmdvPgogKiBHT2JqZWN0CiAgICAgKiBsaWJnaXQyLWdsaWIgPGh0dHBzOi8vbGl2ZS5nbm9tZS5vcmcvTGliZ2l0Mi1nbGliPgogKiBIYXNrZWxsCkBAIC0xMjgsOCArMTY3LDggQEAKICogTHVhCiAgICAgKiBsdWFnaXQyIDxodHRwczovL2dpdGh1Yi5jb20vbGliZ2l0Mi9sdWFnaXQyPgogKiAuTkVUCi0gICAgKiBsaWJnaXQybmV0LCBsb3cgbGV2ZWwgYmluZGluZ3MgPGh0dHBzOi8vZ2l0aHViLmNvbS90eGR2L2xpYmdpdDJuZXQ+CiAgICAgKiBsaWJnaXQyc2hhcnAgPGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnaXQyL2xpYmdpdDJzaGFycD4KKyAgICAqIGxpYmdpdDJuZXQsIGxvdyBsZXZlbCBiaW5kaW5ncyBzdXBlcnNlZGVkIGJ5IGxpYmdpdDJzaGFycCA8aHR0cHM6Ly9naXRodWIuY29tL3R4ZHYvbGliZ2l0Mm5ldD4KICogTm9kZS5qcwogICAgICogbm9kZS1naXR0ZWggPGh0dHBzOi8vZ2l0aHViLmNvbS9saWJnaXQyL25vZGUtZ2l0dGVoPgogICAgICogbm9kZWdpdCA8aHR0cHM6Ly9naXRodWIuY29tL3RicmFueWVuL25vZGVnaXQ+CkBAIC0xNjEsOSArMjAwLDkgQEAKIAogTGljZW5zZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotbGliZ2l0MiBpcyB1bmRlciBHUEwyICoqd2l0aCBsaW5raW5nIGV4ZW1wdGlvbioqLiBUaGlzIG1lYW5zIHlvdQotY2FuIGxpbmsgdG8gdGhlIGxpYnJhcnkgd2l0aCBhbnkgcHJvZ3JhbSwgY29tbWVyY2lhbCwgb3BlbiBzb3VyY2Ugb3IKLW90aGVyLiAgSG93ZXZlciwgeW91IGNhbm5vdCBtb2RpZnkgbGliZ2l0MiBhbmQgZGlzdHJpYnV0ZSBpdCB3aXRob3V0CitgbGliZ2l0MmAgaXMgdW5kZXIgR1BMMiAqKndpdGggbGlua2luZyBleGVtcHRpb24qKi4gVGhpcyBtZWFucyB5b3UKK2NhbiBsaW5rIHRvIGFuZCB1c2UgdGhlIGxpYnJhcnkgZnJvbSBhbnkgcHJvZ3JhbSwgcHJvcHJpZXRhcnkgb3Igb3BlbiBzb3VyY2U7IHBhaWQKK29yIGdyYXRpcy4gIEhvd2V2ZXIsIHlvdSBjYW5ub3QgbW9kaWZ5IGxpYmdpdDIgYW5kIGRpc3RyaWJ1dGUgaXQgd2l0aG91dAogc3VwcGx5aW5nIHRoZSBzb3VyY2UuCiAKIFNlZSB0aGUgQ09QWUlORyBmaWxlIGZvciB0aGUgZnVsbCBsaWNlbnNlIHRleHQuCmRpZmYgLS1naXQgYS9kb2NzL2NoZWNrb3V0LWludGVybmFscy5tZCBiL2RvY3MvY2hlY2tvdXQtaW50ZXJuYWxzLm1kCmluZGV4IGNiNjQ2ZGEuLjYxNDdmZmQgMTAwNjQ0Ci0tLSBhL2RvY3MvY2hlY2tvdXQtaW50ZXJuYWxzLm1kCisrKyBiL2RvY3MvY2hlY2tvdXQtaW50ZXJuYWxzLm1kCkBAIC03MSwxOSArNzEsMTkgQEAKIERpZmYgd2l0aCAyIG5vbi13b3JrZGlyIGl0ZXJhdG9ycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBPbGQgTmV3Ci0gICAgLS0tIC0tLQotICAwICAgeCAgIHggLSBub3RoaW5nCi0gIDEgICB4ICBCMSAtIGFkZGVkIGJsb2IKLSAgMiAgIHggIFQxIC0gYWRkZWQgdHJlZQotICAzICBCMSAgIHggLSByZW1vdmVkIGJsb2IKLSAgNCAgQjEgIEIxIC0gdW5tb2RpZmllZCBibG9iCi0gIDUgIEIxICBCMiAtIG1vZGlmaWVkIGJsb2IKLSAgNiAgQjEgIFQxIC0gdHlwZWNoYW5nZSBibG9iIC0+IHRyZWUKLSAgNyAgVDEgICB4IC0gcmVtb3ZlZCB0cmVlCi0gIDggIFQxICBCMSAtIHR5cGVjaGFuZ2UgdHJlZSAtPiBibG9iCi0gIDkgIFQxICBUMSAtIHVubW9kaWZpZWQgdHJlZQotIDEwICBUMSAgVDIgLSBtb2RpZmllZCB0cmVlIChpbXBsaWVzIG1vZGlmaWVkL2FkZGVkL3JlbW92ZWQgYmxvYiBpbnNpZGUpCit8ICAgIHwgT2xkIHwgTmV3IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8LS0tLXwtLS0tLXwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8ICAwIHwgICB4IHwgICB4IHwgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAxIHwgICB4IHwgIEIxIHwgYWRkZWQgYmxvYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyIHwgICB4IHwgIFQxIHwgYWRkZWQgdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAzIHwgIEIxIHwgICB4IHwgcmVtb3ZlZCBibG9iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA0IHwgIEIxIHwgIEIxIHwgdW5tb2RpZmllZCBibG9iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1IHwgIEIxIHwgIEIyIHwgbW9kaWZpZWQgYmxvYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA2IHwgIEIxIHwgIFQxIHwgdHlwZWNoYW5nZSBibG9iIC0+IHRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA3IHwgIFQxIHwgICB4IHwgcmVtb3ZlZCB0cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4IHwgIFQxIHwgIEIxIHwgdHlwZWNoYW5nZSB0cmVlIC0+IGJsb2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA5IHwgIFQxIHwgIFQxIHwgdW5tb2RpZmllZCB0cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEwIHwgIFQxIHwgIFQyIHwgbW9kaWZpZWQgdHJlZSAoaW1wbGllcyBtb2RpZmllZC9hZGRlZC9yZW1vdmVkIGJsb2IgaW5zaWRlKSB8CiAKIAogTm93LCBsZXQncyBtYWtlIHRoZSAiTmV3IiBpdGVyYXRvciBpbnRvIGEgd29ya2luZyBkaXJlY3RvcnkgaXRlcmF0b3IsIHNvCkBAIC05MiwyMyArOTIsMjMgQEAKIERpZmYgd2l0aCBub24td29yayAmIHdvcmtkaXIgaXRlcmF0b3JzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgT2xkIE5ldy1XRAotICAgIC0tLSAtLS0tLS0KLSAgMCAgIHggICB4IC0gbm90aGluZwotICAxICAgeCAgQjEgLSB1bnRyYWNrZWQgYmxvYgotICAyICAgeCAgQmkgLSBpZ25vcmVkIGZpbGUKLSAgMyAgIHggIFQxIC0gdW50cmFja2VkIHRyZWUKLSAgNCAgIHggIFRpIC0gaWdub3JlZCB0cmVlCi0gIDUgIEIxICAgeCAtIHJlbW92ZWQgYmxvYgotICA2ICBCMSAgQjEgLSB1bm1vZGlmaWVkIGJsb2IKLSAgNyAgQjEgIEIyIC0gbW9kaWZpZWQgYmxvYgotICA4ICBCMSAgVDEgLSB0eXBlY2hhbmdlIGJsb2IgLT4gdHJlZQotICA5ICBCMSAgVGkgLSByZW1vdmVkIGJsb2IgQU5EIGlnbm9yZWQgdHJlZSBhcyBzZXBhcmF0ZSBpdGVtcwotIDEwICBUMSAgIHggLSByZW1vdmVkIHRyZWUKLSAxMSAgVDEgIEIxIC0gdHlwZWNoYW5nZSB0cmVlIC0+IGJsb2IKLSAxMiAgVDEgIEJpIC0gcmVtb3ZlZCB0cmVlIEFORCBpZ25vcmVkIGJsb2IgYXMgc2VwYXJhdGUgaXRlbXMKLSAxMyAgVDEgIFQxIC0gdW5tb2RpZmllZCB0cmVlCi0gMTQgIFQxICBUMiAtIG1vZGlmaWVkIHRyZWUgKGltcGxpZXMgbW9kaWZpZWQvYWRkZWQvcmVtb3ZlZCBibG9iIGluc2lkZSkKK3wgICAgfCBPbGQgfCBOZXcgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tfC0tLS0tfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgIDAgfCAgeCAgfCB4ICAgfCBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDEgfCAgeCAgfCBCMSAgfCB1bnRyYWNrZWQgYmxvYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDIgfCAgeCAgfCBCaSAgfCBpZ25vcmVkIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMgfCAgeCAgfCBUMSAgfCB1bnRyYWNrZWQgdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDQgfCAgeCAgfCBUaSAgfCBpZ25vcmVkIHRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDUgfCBCMSAgfCB4ICAgfCByZW1vdmVkIGJsb2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYgfCBCMSAgfCBCMSAgfCB1bm1vZGlmaWVkIGJsb2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDcgfCBCMSAgfCBCMiAgfCBtb2RpZmllZCBibG9iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDggfCBCMSAgfCBUMSAgfCB0eXBlY2hhbmdlIGJsb2IgLT4gdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDkgfCBCMSAgfCBUaSAgfCByZW1vdmVkIGJsb2IgQU5EIGlnbm9yZWQgdHJlZSBhcyBzZXBhcmF0ZSBpdGVtcyAgICAgICAgICAgIHwKK3wgMTAgfCBUMSAgfCB4ICAgfCByZW1vdmVkIHRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEgfCBUMSAgfCBCMSAgfCB0eXBlY2hhbmdlIHRyZWUgLT4gYmxvYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTIgfCBUMSAgfCBCaSAgfCByZW1vdmVkIHRyZWUgQU5EIGlnbm9yZWQgYmxvYiBhcyBzZXBhcmF0ZSBpdGVtcyAgICAgICAgICAgIHwKK3wgMTMgfCBUMSAgfCBUMSAgfCB1bm1vZGlmaWVkIHRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTQgfCBUMSAgfCBUMiAgfCBtb2RpZmllZCB0cmVlIChpbXBsaWVzIG1vZGlmaWVkL2FkZGVkL3JlbW92ZWQgYmxvYiBpbnNpZGUpIHwKIAogTm90ZTogaWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBvbGQgdHJlZSwgdGhlbiBhIHdvcmtpbmcKIGRpcmVjdG9yeSBpdGVtIHdvbid0IGJlIGlnbm9yZWQgKGkuZS4gbm8gQmkgb3IgVGkgZm9yIHRyYWNrZWQgaXRlbXMpLgpAQCAtMTIyLDQ2ICsxMjIsNDcgQEAKIAogKGJhc2UgPT0gb2xkIEhFQUQ7IHRhcmdldCA9PSB3aGF0IHRvIGNoZWNrb3V0OyBhY3R1YWwgPT0gd29ya2luZyBkaXIpCiAKLSAgICAgIGJhc2UgdGFyZ2V0IGFjdHVhbC93b3JrZGlyCi0gICAgICAtLS0tIC0tLS0tLSAtLS0tLS0KLSAgMCAgICAgIHggICAgICB4ICAgICAgeCAtIG5vdGhpbmcKLSAgMSAgICAgIHggICAgICB4IEIxL0JpL1QxL1RpIC0gdW50cmFja2VkL2lnbm9yZWQgYmxvYi90cmVlIChTQUZFKQotICAyKyAgICAgeCAgICAgQjEgICAgICB4IC0gYWRkIGJsb2IgKFNBRkUpCi0gIDMgICAgICB4ICAgICBCMSAgICAgQjEgLSBpbmRlcGVuZGVudGx5IGFkZGVkIGJsb2IgKEZPUkNFQUJMRS0yKQotICA0KiAgICAgeCAgICAgQjEgQjIvQmkvVDEvVGkgLSBhZGQgYmxvYiB3aXRoIGNvbnRlbnQgY29uZmxpY3QgKEZPUkNFQUJMRS0yKQotICA1KyAgICAgeCAgICAgVDEgICAgICB4IC0gYWRkIHRyZWUgKFNBRkUpCi0gIDYqICAgICB4ICAgICBUMSAgQjEvQmkgLSBhZGQgdHJlZSB3aXRoIGJsb2IgY29uZmxpY3QgKEZPUkNFQUJMRS0yKQotICA3ICAgICAgeCAgICAgVDEgICBUMS9pIC0gaW5kZXBlbmRlbnRseSBhZGRlZCB0cmVlIChTQUZFK01JU1NJTkcpCi0gIDggICAgIEIxICAgICAgeCAgICAgIHggLSBpbmRlcGVuZGVudGx5IGRlbGV0ZWQgYmxvYiAoU0FGRStNSVNTSU5HKQotICA5LSAgICBCMSAgICAgIHggICAgIEIxIC0gZGVsZXRlIGJsb2IgKFNBRkUpCi0gMTAtICAgIEIxICAgICAgeCAgICAgQjIgLSBkZWxldGUgb2YgbW9kaWZpZWQgYmxvYiAoRk9SQ0VBQkxFLTEpCi0gMTEgICAgIEIxICAgICAgeCAgVDEvVGkgLSBpbmRlcGVuZGVudGx5IGRlbGV0ZWQgYmxvYiBBTkQgdW50cmFjay9pZ24gdHJlZSAoU0FGRStNSVNTSU5HICEhISkKLSAxMiAgICAgQjEgICAgIEIxICAgICAgeCAtIGxvY2FsbHkgZGVsZXRlZCBibG9iIChESVJUWSB8fCBTQUZFK0NSRUFURSkKLSAxMysgICAgQjEgICAgIEIyICAgICAgeCAtIHVwZGF0ZSB0byBkZWxldGVkIGJsb2IgKFNBRkUrTUlTU0lORykKLSAxNCAgICAgQjEgICAgIEIxICAgICBCMSAtIHVubW9kaWZpZWQgZmlsZSAoU0FGRSkKLSAxNSAgICAgQjEgICAgIEIxICAgICBCMiAtIGxvY2FsbHkgbW9kaWZpZWQgZmlsZSAoRElSVFkpCi0gMTYrICAgIEIxICAgICBCMiAgICAgQjEgLSB1cGRhdGUgdW5tb2RpZmllZCBibG9iIChTQUZFKQotIDE3ICAgICBCMSAgICAgQjIgICAgIEIyIC0gaW5kZXBlbmRlbnRseSB1cGRhdGVkIGJsb2IgKEZPUkNFQUJMRS0xKQotIDE4KyAgICBCMSAgICAgQjIgICAgIEIzIC0gdXBkYXRlIHRvIG1vZGlmaWVkIGJsb2IgKEZPUkNFQUJMRS0xKQotIDE5ICAgICBCMSAgICAgQjEgIFQxL1RpIC0gbG9jYWxseSBkZWxldGVkIGJsb2IgQU5EIHVudHJhY2svaWduIHRyZWUgKERJUlRZKQotIDIwKiAgICBCMSAgICAgQjIgIFQxL1RpIC0gdXBkYXRlIHRvIGRlbGV0ZWQgYmxvYiBBTkQgdW50cmFjay9pZ24gdHJlZSAoRi0xKQotIDIxKyAgICBCMSAgICAgVDEgICAgICB4IC0gYWRkIHRyZWUgd2l0aCBsb2NhbGx5IGRlbGV0ZWQgYmxvYiAoU0FGRStNSVNTSU5HKQotIDIyKiAgICBCMSAgICAgVDEgICAgIEIxIC0gYWRkIHRyZWUgQU5EIGRlbGV0ZWQgYmxvYiAoU0FGRSkKLSAyMyogICAgQjEgICAgIFQxICAgICBCMiAtIGFkZCB0cmVlIHdpdGggZGVsZXRlIG9mIG1vZGlmaWVkIGJsb2IgKEYtMSkKLSAyNCAgICAgQjEgICAgIFQxICAgICBUMSAtIGFkZCB0cmVlIHdpdGggZGVsZXRlZCBibG9iIChGLTEpCi0gMjUgICAgIFQxICAgICAgeCAgICAgIHggLSBpbmRlcGVuZGVudGx5IGRlbGV0ZWQgdHJlZSAoU0FGRStNSVNTSU5HKQotIDI2ICAgICBUMSAgICAgIHggIEIxL0JpIC0gaW5kZXBlbmRlbnRseSBkZWxldGVkIHRyZWUgQU5EIHVudHJhY2svaWduIGJsb2IgKEYtMSkKLSAyNy0gICAgVDEgICAgICB4ICAgICBUMSAtIGRlbGV0ZWQgdHJlZSAoTUFZQkUgU0FGRSkKLSAyOCsgICAgVDEgICAgIEIxICAgICAgeCAtIGRlbGV0ZWQgdHJlZSBBTkQgYWRkZWQgYmxvYiAoU0FGRStNSVNTSU5HKQotIDI5ICAgICBUMSAgICAgQjEgICAgIEIxIC0gaW5kZXBlbmRlbnRseSB0eXBlY2hhbmdlZCB0cmVlIC0+IGJsb2IgKEYtMSkKLSAzMCsgICAgVDEgICAgIEIxICAgICBCMiAtIHR5cGVjaGFuZ2UgdHJlZS0+YmxvYiB3aXRoIGNvbmZsaWN0aW5nIGJsb2IgKEYtMSkKLSAzMSogICAgVDEgICAgIEIxICBUMS9UMiAtIHR5cGVjaGFuZ2UgdHJlZS0+YmxvYiAoTUFZQkUgU0FGRSkKLSAzMisgICAgVDEgICAgIFQxICAgICAgeCAtIHJlc3RvcmUgbG9jYWxseSBkZWxldGVkIHRyZWUgKFNBRkUrTUlTU0lORykKLSAzMyAgICAgVDEgICAgIFQxICBCMS9CaSAtIGxvY2FsbHkgdHlwZWNoYW5nZSB0cmVlLT51bnRyYWNrL2lnbiBibG9iIChESVJUWSkKLSAzNCAgICAgVDEgICAgIFQxICBUMS9UMiAtIHVubW9kaWZpZWQgdHJlZSAoTUFZQkUgU0FGRSkKLSAzNSsgICAgVDEgICAgIFQyICAgICAgeCAtIHVwZGF0ZSBsb2NhbGx5IGRlbGV0ZWQgdHJlZSAoU0FGRStNSVNTSU5HKQotIDM2KiAgICBUMSAgICAgVDIgIEIxL0JpIC0gdXBkYXRlIHRvIHRyZWUgd2l0aCB0eXBlY2hhbmdlZCB0cmVlLT5ibG9iIGNvbmZsaWN0IChGLTEpCi0gMzcgICAgIFQxICAgICBUMiBUMS9UMi9UMyAtIHVwZGF0ZSB0byBleGlzdGluZyB0cmVlIChNQVlCRSBTQUZFKQorfCAgICAgfGJhc2UgfCB0YXJnZXQgfCBhY3R1YWwvd29ya2RpciB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8LS0tLS18LS0tLS18LS0tLS0tLSB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgIDAgIHwgICB4IHwgICAgICB4IHwgICAgICB4ICAgICAgICAgfCBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgMSAgfCAgIHggfCAgICAgIHggfCBCMS9CaS9UMS9UaSAgICB8IHVudHJhY2tlZC9pZ25vcmVkIGJsb2IvdHJlZSAoU0FGRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAyKyB8ICAgeCB8ICAgICBCMSB8ICAgICAgeCAgICAgICAgIHwgYWRkIGJsb2IgKFNBRkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDMgIHwgICB4IHwgICAgIEIxIHwgICAgIEIxICAgICAgICAgfCBpbmRlcGVuZGVudGx5IGFkZGVkIGJsb2IgKEZPUkNFQUJMRS0yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNCogfCAgIHggfCAgICAgQjEgfCBCMi9CaS9UMS9UaSAgICB8IGFkZCBibG9iIHdpdGggY29udGVudCBjb25mbGljdCAoRk9SQ0VBQkxFLTIpICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA1KyB8ICAgeCB8ICAgICBUMSB8ICAgICAgeCAgICAgICAgIHwgYWRkIHRyZWUgKFNBRkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDYqIHwgICB4IHwgICAgIFQxIHwgIEIxL0JpICAgICAgICAgfCBhZGQgdHJlZSB3aXRoIGJsb2IgY29uZmxpY3QgKEZPUkNFQUJMRS0yKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgNyAgfCAgIHggfCAgICAgVDEgfCAgIFQxL2kgICAgICAgICB8IGluZGVwZW5kZW50bHkgYWRkZWQgdHJlZSAoU0FGRStNSVNTSU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICA4ICB8ICBCMSB8ICAgICAgeCB8ICAgICAgeCAgICAgICAgIHwgaW5kZXBlbmRlbnRseSBkZWxldGVkIGJsb2IgKFNBRkUrTUlTU0lORykgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIDktIHwgIEIxIHwgICAgICB4IHwgICAgIEIxICAgICAgICAgfCBkZWxldGUgYmxvYiAoU0FGRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMC0gfCAgQjEgfCAgICAgIHggfCAgICAgQjIgICAgICAgICB8IGRlbGV0ZSBvZiBtb2RpZmllZCBibG9iIChGT1JDRUFCTEUtMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDExICB8ICBCMSB8ICAgICAgeCB8ICBUMS9UaSAgICAgICAgIHwgaW5kZXBlbmRlbnRseSBkZWxldGVkIGJsb2IgQU5EIHVudHJhY2svaWduIHRyZWUgKFNBRkUrTUlTU0lORyAhISEpIHwKK3wgMTIgIHwgIEIxIHwgICAgIEIxIHwgICAgICB4ICAgICAgICAgfCBsb2NhbGx5IGRlbGV0ZWQgYmxvYiAoRElSVFkgfHwgU0FGRStDUkVBVEUpICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxMysgfCAgQjEgfCAgICAgQjIgfCAgICAgIHggICAgICAgICB8IHVwZGF0ZSB0byBkZWxldGVkIGJsb2IgKFNBRkUrTUlTU0lORykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE0ICB8ICBCMSB8ICAgICBCMSB8ICAgICBCMSAgICAgICAgIHwgdW5tb2RpZmllZCBmaWxlIChTQUZFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTUgIHwgIEIxIHwgICAgIEIxIHwgICAgIEIyICAgICAgICAgfCBsb2NhbGx5IG1vZGlmaWVkIGZpbGUgKERJUlRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxNisgfCAgQjEgfCAgICAgQjIgfCAgICAgQjEgICAgICAgICB8IHVwZGF0ZSB1bm1vZGlmaWVkIGJsb2IgKFNBRkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDE3ICB8ICBCMSB8ICAgICBCMiB8ICAgICBCMiAgICAgICAgIHwgaW5kZXBlbmRlbnRseSB1cGRhdGVkIGJsb2IgKEZPUkNFQUJMRS0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTgrIHwgIEIxIHwgICAgIEIyIHwgICAgIEIzICAgICAgICAgfCB1cGRhdGUgdG8gbW9kaWZpZWQgYmxvYiAoRk9SQ0VBQkxFLTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAxOSAgfCAgQjEgfCAgICAgQjEgfCAgVDEvVGkgICAgICAgICB8IGxvY2FsbHkgZGVsZXRlZCBibG9iIEFORCB1bnRyYWNrL2lnbiB0cmVlIChESVJUWSkgICAgICAgICAgICAgICAgICB8Cit8IDIwKiB8ICBCMSB8ICAgICBCMiB8ICBUMS9UaSAgICAgICAgIHwgdXBkYXRlIHRvIGRlbGV0ZWQgYmxvYiBBTkQgdW50cmFjay9pZ24gdHJlZSAoRi0xKSAgICAgICAgICAgICAgICAgIHwKK3wgMjErIHwgIEIxIHwgICAgIFQxIHwgICAgICB4ICAgICAgICAgfCBhZGQgdHJlZSB3aXRoIGxvY2FsbHkgZGVsZXRlZCBibG9iIChTQUZFK01JU1NJTkcpICAgICAgICAgICAgICAgICAgfAorfCAyMiogfCAgQjEgfCAgICAgVDEgfCAgICAgQjEgICAgICAgICB8IGFkZCB0cmVlIEFORCBkZWxldGVkIGJsb2IgKFNBRkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDIzKiB8ICBCMSB8ICAgICBUMSB8ICAgICBCMiAgICAgICAgIHwgYWRkIHRyZWUgd2l0aCBkZWxldGUgb2YgbW9kaWZpZWQgYmxvYiAoRi0xKSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMjQgIHwgIEIxIHwgICAgIFQxIHwgICAgIFQxICAgICAgICAgfCBhZGQgdHJlZSB3aXRoIGRlbGV0ZWQgYmxvYiAoRi0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyNSAgfCAgVDEgfCAgICAgIHggfCAgICAgIHggICAgICAgICB8IGluZGVwZW5kZW50bHkgZGVsZXRlZCB0cmVlIChTQUZFK01JU1NJTkcpICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI2ICB8ICBUMSB8ICAgICAgeCB8ICBCMS9CaSAgICAgICAgIHwgaW5kZXBlbmRlbnRseSBkZWxldGVkIHRyZWUgQU5EIHVudHJhY2svaWduIGJsb2IgKEYtMSkgICAgICAgICAgICAgIHwKK3wgMjctIHwgIFQxIHwgICAgICB4IHwgICAgIFQxICAgICAgICAgfCBkZWxldGVkIHRyZWUgKE1BWUJFIFNBRkUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAyOCsgfCAgVDEgfCAgICAgQjEgfCAgICAgIHggICAgICAgICB8IGRlbGV0ZWQgdHJlZSBBTkQgYWRkZWQgYmxvYiAoU0FGRStNSVNTSU5HKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDI5ICB8ICBUMSB8ICAgICBCMSB8ICAgICBCMSAgICAgICAgIHwgaW5kZXBlbmRlbnRseSB0eXBlY2hhbmdlZCB0cmVlIC0+IGJsb2IgKEYtMSkgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMzArIHwgIFQxIHwgICAgIEIxIHwgICAgIEIyICAgICAgICAgfCB0eXBlY2hhbmdlIHRyZWUtPmJsb2Igd2l0aCBjb25mbGljdGluZyBibG9iIChGLTEpICAgICAgICAgICAgICAgICAgfAorfCAzMSogfCAgVDEgfCAgICAgQjEgfCAgVDEvVDIgICAgICAgICB8IHR5cGVjaGFuZ2UgdHJlZS0+YmxvYiAoTUFZQkUgU0FGRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDMyKyB8ICBUMSB8ICAgICBUMSB8ICAgICAgeCAgICAgICAgIHwgcmVzdG9yZSBsb2NhbGx5IGRlbGV0ZWQgdHJlZSAoU0FGRStNSVNTSU5HKSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMzMgIHwgIFQxIHwgICAgIFQxIHwgIEIxL0JpICAgICAgICAgfCBsb2NhbGx5IHR5cGVjaGFuZ2UgdHJlZS0+dW50cmFjay9pZ24gYmxvYiAoRElSVFkpICAgICAgICAgICAgICAgICAgfAorfCAzNCAgfCAgVDEgfCAgICAgVDEgfCAgVDEvVDIgICAgICAgICB8IHVubW9kaWZpZWQgdHJlZSAoTUFZQkUgU0FGRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDM1KyB8ICBUMSB8ICAgICBUMiB8ICAgICAgeCAgICAgICAgIHwgdXBkYXRlIGxvY2FsbHkgZGVsZXRlZCB0cmVlIChTQUZFK01JU1NJTkcpICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMzYqIHwgIFQxIHwgICAgIFQyIHwgIEIxL0JpICAgICAgICAgfCB1cGRhdGUgdG8gdHJlZSB3aXRoIHR5cGVjaGFuZ2VkIHRyZWUtPmJsb2IgY29uZmxpY3QgKEYtMSkgICAgICAgICAgfAorfCAzNyAgfCAgVDEgfCAgICAgVDIgfCBUMS9UMi9UMyAgICAgICB8IHVwZGF0ZSB0byBleGlzdGluZyB0cmVlIChNQVlCRSBTQUZFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKIAogVGhlIG51bWJlciBpcyBmb2xsb3dlZCBieSAnICcgaWYgbm8gY2hhbmdlIGlzIG5lZWRlZCBvciAnKycgaWYgdGhlIGNhc2UKIG5lZWRzIHRvIHdyaXRlIHRvIGRpc2sgb3IgJy0nIGlmIHNvbWV0aGluZyBtdXN0IGJlIGRlbGV0ZWQgYW5kICcqJyBpZgpAQCAtMTY5LDM0ICsxNzAsMzQgQEAKIAogVGhlcmUgYXJlIGZvdXIgdGllcnMgb2Ygc2FmZSBjYXNlczoKIAotLSBTQUZFICAgICAgICAgPT0gY29tcGxldGVseSBzYWZlIHRvIHVwZGF0ZQotLSBTQUZFK01JU1NJTkcgPT0gc2FmZSBleGNlcHQgdGhlIHdvcmtkaXIgaXMgbWlzc2luZyB0aGUgZXhwZWN0IGNvbnRlbnQKLS0gTUFZQkUgU0FGRSAgID09IHNhZmUgaWYgd29ya2RpciB0cmVlIG1hdGNoZXMgKG9yIGlzIG1pc3NpbmcpIGJhc2VsaW5lCisqIFNBRkUgICAgICAgICA9PSBjb21wbGV0ZWx5IHNhZmUgdG8gdXBkYXRlCisqIFNBRkUrTUlTU0lORyA9PSBzYWZlIGV4Y2VwdCB0aGUgd29ya2RpciBpcyBtaXNzaW5nIHRoZSBleHBlY3QgY29udGVudAorKiBNQVlCRSBTQUZFICAgPT0gc2FmZSBpZiB3b3JrZGlyIHRyZWUgbWF0Y2hlcyAob3IgaXMgbWlzc2luZykgYmFzZWxpbmUKICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsIHdoaWNoIGlzIHVua25vd24gYXQgdGhpcyBwb2ludAotLSBGT1JDRUFCTEUgPT0gY29uZmxpY3QgdW5sZXNzIEZPUkNFIGlzIGdpdmVuCi0tIERJUlRZICAgICA9PSBubyBjb25mbGljdCBidXQgY2hhbmdlIGlzIG5vdCBhcHBsaWVkIHVubGVzcyBGT1JDRQorKiBGT1JDRUFCTEUgPT0gY29uZmxpY3QgdW5sZXNzIEZPUkNFIGlzIGdpdmVuCisqIERJUlRZICAgICA9PSBubyBjb25mbGljdCBidXQgY2hhbmdlIGlzIG5vdCBhcHBsaWVkIHVubGVzcyBGT1JDRQogCiBTb21lIHNsaWdodGx5IHVudXN1YWwgY2lyY3Vtc3RhbmNlczoKIAotICA4IC0gcGFyZW50IGRpciBpcyBvbmx5IGRlbGV0ZWQgd2hlbiBmaWxlIGlzLCBzbyBwYXJlbnQgd2lsbCBiZSBsZWZ0IGlmCi0gICAgICBlbXB0eSBldmVuIHRob3VnaCBpdCB3b3VsZCBiZSBkZWxldGVkIGlmIHRoZSBmaWxlIHdlcmUgcHJlc2VudAotIDExIC0gY29yZSBnaXQgZG9lcyBub3QgY29uc2lkZXIgdGhpcyBhIGNvbmZsaWN0IGJ1dCBhdHRlbXB0cyB0byBkZWxldGUgVDEKLSAgICAgIGFuZCBnaXZlcyAidW5hYmxlIHRvIHVubGluayBmaWxlIiBlcnJvciB5ZXQgZG9lcyBub3Qgc2tpcCB0aGUgcmVzdAotICAgICAgb2YgdGhlIG9wZXJhdGlvbgotIDEyIC0gd2l0aG91dCBGT1JDRSBmaWxlIGlzIGxlZnQgZGVsZXRlZCAoaS5lLiBub3QgcmVzdG9yZWQpIHNvIG5ldyB3ZCBpcwotICAgICAgZGlydHkgKGFuZCB3YXJuaW5nIG1lc3NhZ2UgIkQgZmlsZSIgaXMgcHJpbnRlZCksIHdpdGggRk9SQ0UsIGZpbGUgaXMKLSAgICAgIHJlc3RvcmVkLgotIDI0IC0gVGhpcyBzaG91bGQgYmUgY29uc2lkZXJlZCBNQVlCRSBTQUZFIHNpbmNlIGVmZmVjdGl2ZWx5IGl0IGlzIDcgYW5kIDgKLSAgICAgIGNvbWJpbmVkLCBidXQgY29yZSBnaXQgY29uc2lkZXJzIHRoaXMgYSBjb25mbGljdCB1bmxlc3MgZm9yY2VkLgotIDI2IC0gVGhpcyBjb21iaW5lcyB0d28gY2FzZXMgKDEgJiAyNSkgKGFuZCBhbHNvIGltcGxpZWQgOCBmb3IgdHJlZSBjb250ZW50KQotICAgICAgd2hpY2ggYXJlIG9rIG9uIHRoZWlyIG93biwgYnV0IGNvcmUgZ2l0IHRyZWF0IHRoaXMgYXMgYSBjb25mbGljdC4KLSAgICAgIElmIG5vdCBmb3JjZWQsIHRoaXMgaXMgYSBjb25mbGljdC4gIElmIGZvcmNlZCwgdGhpcyBhY3R1YWxseSBkb2Vzbid0Ci0gICAgICBoYXZlIHRvIHdyaXRlIGFueXRoaW5nIGFuZCBsZWF2ZXMgdGhlIG5ldyBibG9iIGFzIGFuIHVudHJhY2tlZCBmaWxlLgotIDMyIC0gVGhpcyBpcyB0aGUgb25seSBjYXNlIHdoZXJlIHRoZSBiYXNlbGluZSBhbmQgdGFyZ2V0IHZhbHVlcyBtYXRjaAotICAgICAgYW5kIHlldCB3ZSB3aWxsIHN0aWxsIHdyaXRlIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIEluIGFsbCBvdGhlcgotICAgICAgY2FzZXMsIGlmIGJhc2VsaW5lID09IHRhcmdldCwgd2UgZG9uJ3QgdG91Y2ggdGhlIHdvcmtkaXIgKGl0IGlzCi0gICAgICBlaXRoZXIgYWxyZWFkeSByaWdodCBvciBpcyAiZGlydHkiKS4gIEhvd2V2ZXIsIHNpbmNlIHRoaXMgY2FzZSBhbHNvCi0gICAgICBpbXBsaWVzIHRoYXQgYSA/L0IxL3ggY2FzZSB3aWxsIGV4aXN0IGFzIHdlbGwsIGl0IGNhbiBiZSBza2lwcGVkLgorKiA4IC0gcGFyZW50IGRpciBpcyBvbmx5IGRlbGV0ZWQgd2hlbiBmaWxlIGlzLCBzbyBwYXJlbnQgd2lsbCBiZSBsZWZ0IGlmCisgICAgZW1wdHkgZXZlbiB0aG91Z2ggaXQgd291bGQgYmUgZGVsZXRlZCBpZiB0aGUgZmlsZSB3ZXJlIHByZXNlbnQKKyogMTEgLSBjb3JlIGdpdCBkb2VzIG5vdCBjb25zaWRlciB0aGlzIGEgY29uZmxpY3QgYnV0IGF0dGVtcHRzIHRvIGRlbGV0ZSBUMQorICAgIGFuZCBnaXZlcyAidW5hYmxlIHRvIHVubGluayBmaWxlIiBlcnJvciB5ZXQgZG9lcyBub3Qgc2tpcCB0aGUgcmVzdAorICAgIG9mIHRoZSBvcGVyYXRpb24KKyogMTIgLSB3aXRob3V0IEZPUkNFIGZpbGUgaXMgbGVmdCBkZWxldGVkIChpLmUuIG5vdCByZXN0b3JlZCkgc28gbmV3IHdkIGlzCisgICAgZGlydHkgKGFuZCB3YXJuaW5nIG1lc3NhZ2UgIkQgZmlsZSIgaXMgcHJpbnRlZCksIHdpdGggRk9SQ0UsIGZpbGUgaXMKKyAgICByZXN0b3JlZC4KKyogMjQgLSBUaGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIE1BWUJFIFNBRkUgc2luY2UgZWZmZWN0aXZlbHkgaXQgaXMgNyBhbmQgOAorICAgIGNvbWJpbmVkLCBidXQgY29yZSBnaXQgY29uc2lkZXJzIHRoaXMgYSBjb25mbGljdCB1bmxlc3MgZm9yY2VkLgorKiAyNiAtIFRoaXMgY29tYmluZXMgdHdvIGNhc2VzICgxICYgMjUpIChhbmQgYWxzbyBpbXBsaWVkIDggZm9yIHRyZWUgY29udGVudCkKKyAgICB3aGljaCBhcmUgb2sgb24gdGhlaXIgb3duLCBidXQgY29yZSBnaXQgdHJlYXQgdGhpcyBhcyBhIGNvbmZsaWN0LgorICAgIElmIG5vdCBmb3JjZWQsIHRoaXMgaXMgYSBjb25mbGljdC4gIElmIGZvcmNlZCwgdGhpcyBhY3R1YWxseSBkb2Vzbid0CisgICAgaGF2ZSB0byB3cml0ZSBhbnl0aGluZyBhbmQgbGVhdmVzIHRoZSBuZXcgYmxvYiBhcyBhbiB1bnRyYWNrZWQgZmlsZS4KKyogMzIgLSBUaGlzIGlzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhlIGJhc2VsaW5lIGFuZCB0YXJnZXQgdmFsdWVzIG1hdGNoCisgICAgYW5kIHlldCB3ZSB3aWxsIHN0aWxsIHdyaXRlIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIEluIGFsbCBvdGhlcgorICAgIGNhc2VzLCBpZiBiYXNlbGluZSA9PSB0YXJnZXQsIHdlIGRvbid0IHRvdWNoIHRoZSB3b3JrZGlyIChpdCBpcworICAgIGVpdGhlciBhbHJlYWR5IHJpZ2h0IG9yIGlzICJkaXJ0eSIpLiAgSG93ZXZlciwgc2luY2UgdGhpcyBjYXNlIGFsc28KKyAgICBpbXBsaWVzIHRoYXQgYSA/L0IxL3ggY2FzZSB3aWxsIGV4aXN0IGFzIHdlbGwsIGl0IGNhbiBiZSBza2lwcGVkLgogCiBDYXNlcyAzLCAxNywgMjQsIDI2LCBhbmQgMjkgYXJlIGFsbCBjb25zaWRlcmVkIGNvbmZsaWN0cyBldmVuIHRob3VnaAogbm9uZSBvZiB0aGVtIHdpbGwgcmVxdWlyZSBtYWtpbmcgYW55IHVwZGF0ZXMgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvZG9jcy9kaWZmLWludGVybmFscy5tZCBiL2RvY3MvZGlmZi1pbnRlcm5hbHMubWQKaW5kZXggNTNlNzFmNS4uY2Y4YWQ1MyAxMDA2NDQKLS0tIGEvZG9jcy9kaWZmLWludGVybmFscy5tZAorKysgYi9kb2NzL2RpZmYtaW50ZXJuYWxzLm1kCkBAIC00NSw0NCArNDUsNDggQEAKICogYGdpdF9kaWZmX2ZpbGVfY29udGVudGAgaXMgYW4gaW50ZXJuYWwgc3RydWN0dXJlIHRoYXQgcmVwcmVzZW50cyB0aGUKICAgZGF0YSBvbiBvbmUgc2lkZSBvZiBhbiBpdGVtIHRvIGJlIGRpZmZlZDsgaXQgaXMgYW4gYXVnbWVudGVkCiAgIGBnaXRfZGlmZl9maWxlYCB3aXRoIG1vcmUgZmxhZ3MgYW5kIHRoZSBhY3R1YWwgZmlsZSBkYXRhLgotKiogaXQgaXMgY3JlYXRlZCBmcm9tIGEgcmVwb3NpdG9yeSBwbHVzIGEpIGEgZ2l0X2RpZmZfZmlsZSwgYikgYSBnaXRfYmxvYiwKKworICAgICogaXQgaXMgY3JlYXRlZCBmcm9tIGEgcmVwb3NpdG9yeSBwbHVzIGEpIGEgZ2l0X2RpZmZfZmlsZSwgYikgYSBnaXRfYmxvYiwKICAgIG9yIGMpIHJhdyBkYXRhIGFuZCBzaXplCi0qKiB0aGVyZSBhcmUgdGhyZWUgbWFpbiBvcGVyYXRpb25zIG9uIGdpdF9kaWZmX2ZpbGVfY29udGVudDoKLSoqKiBfaW5pdGlhbGl6YXRpb25fIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlIGFuZCBkb2VzIHdoYXQgaXQgY2FuIHVwIHRvLAotICAgIGJ1dCBub3QgaW5jbHVkaW5nIGxvYWRpbmcgYW5kIGxvb2tpbmcgYXQgdGhlIGFjdHVhbCBkYXRhCi0qKiogX2xvYWRpbmdfIGxvYWRzIHRoZSBkYXRhLCBwcmVwcm9jZXNzZXMgaXQgKGkuZS4gYXBwbGllcyBmaWx0ZXJzKSBhbmQKLSAgICBwb3RlbnRpYWxseSBhbmFseXplcyBpdCAodG8gZGVjaWRlIGlmIGJpbmFyeSkKLSoqKiBfZnJlZV8gcmVsZWFzZXMgbG9hZGVkIGRhdGEgYW5kIGZyZWVzIGFueSBhbGxvY2F0ZWQgbWVtb3J5CisgICAgKiB0aGVyZSBhcmUgdGhyZWUgbWFpbiBvcGVyYXRpb25zIG9uIGdpdF9kaWZmX2ZpbGVfY29udGVudDoKKyAgICAKKyAgICAgICAgKiBfaW5pdGlhbGl6YXRpb25fIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlIGFuZCBkb2VzIHdoYXQgaXQgY2FuIHVwIHRvLAorICAgICAgICAgIGJ1dCBub3QgaW5jbHVkaW5nIGxvYWRpbmcgYW5kIGxvb2tpbmcgYXQgdGhlIGFjdHVhbCBkYXRhCisgICAgICAgICogX2xvYWRpbmdfIGxvYWRzIHRoZSBkYXRhLCBwcmVwcm9jZXNzZXMgaXQgKGkuZS4gYXBwbGllcyBmaWx0ZXJzKSBhbmQKKyAgICAgICAgICBwb3RlbnRpYWxseSBhbmFseXplcyBpdCAodG8gZGVjaWRlIGlmIGJpbmFyeSkKKyAgICAgICAgKiBfZnJlZV8gcmVsZWFzZXMgbG9hZGVkIGRhdGEgYW5kIGZyZWVzIGFueSBhbGxvY2F0ZWQgbWVtb3J5CiAKICogVGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiBhIGBnaXRfZGlmZl9wYXRjaGAgc3RvcmVzIHRoZSBhY3R1YWwgZGlmZgogICBiZXR3ZWVuIGEgcGFpciBvZiBgZ2l0X2RpZmZfZmlsZV9jb250ZW50YCBpdGVtcwotKiogaXQgbWF5IGJlICJ1bnNldCIgaWYgdGhlIGl0ZW1zIGFyZSBub3QgZGlmZmFibGUKLSoqICJlbXB0eSIgaWYgdGhlIGl0ZW1zIGFyZSB0aGUgc2FtZQotKiogb3RoZXJ3aXNlIGl0IHdpbGwgY29uc2lzdCBvZiBhIHNldCBvZiBodW5rcyBlYWNoIG9mIHdoaWNoIGNvdmVycyBzb21lCi0gICBudW1iZXIgb2YgbGluZXMgb2YgY29udGV4dCwgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMKLSoqIGEgcGF0Y2ggaXMgY3JlYXRlZCBmcm9tIHR3byBnaXRfZGlmZl9maWxlX2NvbnRlbnQgaXRlbXMKLSoqIGEgcGF0Y2ggaXMgZnVsbHkgaW5zdGFudGlhdGVkIGluIHRocmVlIHBoYXNlczoKLSoqKiBpbml0aWFsIGNyZWF0aW9uIGFuZCBpbml0aWFsaXphdGlvbgotKioqIGxvYWRpbmcgb2YgZGF0YSBhbmQgcHJlbGltaW5hcnkgZGF0YSBleGFtaW5hdGlvbgotKioqIGRpZmZpbmcgb2YgZGF0YSBhbmQgb3B0aW9uYWwgc3RvcmFnZSBvZiBkaWZmcwotKiogKFRCRCkgaWYgYSBwYXRjaCBpcyBhc2tlZCB0byBzdG9yZSB0aGUgZGlmZnMgYW5kIHRoZSBzaXplIG9mIHRoZSBkaWZmCi0gICBpcyBzaWduaWZpY2FudGx5IHNtYWxsZXIgdGhhbiB0aGUgcmF3IGRhdGEgb2YgdGhlIHR3byBzaWRlcywgdGhlbiB0aGUKLSAgIHBhdGNoIG1heSBiZSBmbGF0dGVuZWQgdXNpbmcgYSBwb29sIG9mIHN0cmluZyBkYXRhCisKKyAgICAqIGl0IG1heSBiZSAidW5zZXQiIGlmIHRoZSBpdGVtcyBhcmUgbm90IGRpZmZhYmxlCisgICAgKiAiZW1wdHkiIGlmIHRoZSBpdGVtcyBhcmUgdGhlIHNhbWUKKyAgICAqIG90aGVyd2lzZSBpdCB3aWxsIGNvbnNpc3Qgb2YgYSBzZXQgb2YgaHVua3MgZWFjaCBvZiB3aGljaCBjb3ZlcnMgc29tZQorICAgICAgbnVtYmVyIG9mIGxpbmVzIG9mIGNvbnRleHQsIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zCisgICAgKiBhIHBhdGNoIGlzIGNyZWF0ZWQgZnJvbSB0d28gZ2l0X2RpZmZfZmlsZV9jb250ZW50IGl0ZW1zCisgICAgKiBhIHBhdGNoIGlzIGZ1bGx5IGluc3RhbnRpYXRlZCBpbiB0aHJlZSBwaGFzZXM6CisgICAgCisgICAgICAgICogaW5pdGlhbCBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24KKyAgICAgICAgKiBsb2FkaW5nIG9mIGRhdGEgYW5kIHByZWxpbWluYXJ5IGRhdGEgZXhhbWluYXRpb24KKyAgICAgICAgKiBkaWZmaW5nIG9mIGRhdGEgYW5kIG9wdGlvbmFsIHN0b3JhZ2Ugb2YgZGlmZnMKKyAgICAqIChUQkQpIGlmIGEgcGF0Y2ggaXMgYXNrZWQgdG8gc3RvcmUgdGhlIGRpZmZzIGFuZCB0aGUgc2l6ZSBvZiB0aGUgZGlmZgorICAgICAgaXMgc2lnbmlmaWNhbnRseSBzbWFsbGVyIHRoYW4gdGhlIHJhdyBkYXRhIG9mIHRoZSB0d28gc2lkZXMsIHRoZW4gdGhlCisgICAgICBwYXRjaCBtYXkgYmUgZmxhdHRlbmVkIHVzaW5nIGEgcG9vbCBvZiBzdHJpbmcgZGF0YQogCiAqIGBnaXRfZGlmZl9vdXRwdXRgIGlzIGFuIGludGVybmFsIHN0cnVjdHVyZSB0aGF0IHJlcHJlc2VudHMgYW4gb3V0cHV0CiAgIHRhcmdldCBmb3IgYSBgZ2l0X2RpZmZfcGF0Y2hgCi0qKiBJdCBjb25zaXN0cyBvZiBmaWxlLCBodW5rLCBhbmQgbGluZSBjYWxsYmFja3MsIHBsdXMgYSBwYXlsb2FkCi0qKiBUaGVyZSBpcyBhIHN0YW5kYXJkIGZsYXR0ZW5lZCBvdXRwdXQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcGxhaW4gdGV4dCBvdXRwdXQKLSoqIFR5cGljYWxseSB3ZSB1c2UgYSBgZ2l0X3hkaWZmX291dHB1dGAgd2hpY2ggZHJpdmVzIHRoZSBjYWxsYmFja3MgdmlhIHRoZQotICAgeGRpZmYgY29kZSB0YWtlbiBmcm9tIGNvcmUgR2l0LgorICAgICogSXQgY29uc2lzdHMgb2YgZmlsZSwgaHVuaywgYW5kIGxpbmUgY2FsbGJhY2tzLCBwbHVzIGEgcGF5bG9hZAorICAgICogVGhlcmUgaXMgYSBzdGFuZGFyZCBmbGF0dGVuZWQgb3V0cHV0IHRoYXQgY2FuIGJlIHVzZWQgZm9yIHBsYWluIHRleHQgb3V0cHV0CisgICAgKiBUeXBpY2FsbHkgd2UgdXNlIGEgYGdpdF94ZGlmZl9vdXRwdXRgIHdoaWNoIGRyaXZlcyB0aGUgY2FsbGJhY2tzIHZpYSB0aGUKKyAgICAgIHhkaWZmIGNvZGUgdGFrZW4gZnJvbSBjb3JlIEdpdC4KIAogKiBgZ2l0X2RpZmZfZHJpdmVyYCBpcyBhbiBpbnRlcm5hbCBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlIGxvZ2ljCiAgIGZvciBhIGdpdmVuIHR5cGUgb2YgZmlsZQotKiogYSBkcml2ZXIgaXMgbG9va2VkIHVwIGJhc2VkIG9uIHRoZSBuYW1lIGFuZCBtb2RlIG9mIGEgZmlsZS4KLSoqIHRoZSBkcml2ZXIgY2FuIHRoZW4gYmUgdXNlZCB0bzoKLSoqKiBkZXRlcm1pbmUgaWYgYSBmaWxlIGlzIGJpbmFyeSAoYnkgYXR0cmlidXRlcywgYnkgZ2l0X2RpZmZfb3B0aW9ucwotICAgIHNldHRpbmdzLCBvciBieSBleGFtaW5pbmcgdGhlIGNvbnRlbnQpCi0qKiogZ2l2ZSB5b3UgYSBmdW5jdGlvbiBwb2ludGVyIHRoYXQgaXMgdXNlZCB0byBldmFsdWF0ZSBmdW5jdGlvbiBjb250ZXh0Ci0gICAgZm9yIGh1bmsgaGVhZGVycwotKiogQXQgc29tZSBwb2ludCwgdGhlIGxvZ2ljIGZvciBnZXR0aW5nIGEgZmlsdGVyZWQgdmVyc2lvbiBvZiBmaWxlIGNvbnRlbnQKLSAgIG9yIGNhbGN1bGF0aW5nIHRoZSBPSUQgb2YgYSBmaWxlIG1heSBiZSBtb3ZlZCBpbnRvIHRoZSBkcml2ZXIuCisgICAgKiBhIGRyaXZlciBpcyBsb29rZWQgdXAgYmFzZWQgb24gdGhlIG5hbWUgYW5kIG1vZGUgb2YgYSBmaWxlLgorICAgICogdGhlIGRyaXZlciBjYW4gdGhlbiBiZSB1c2VkIHRvOgorICAgICAgICAqIGRldGVybWluZSBpZiBhIGZpbGUgaXMgYmluYXJ5IChieSBhdHRyaWJ1dGVzLCBieSBnaXRfZGlmZl9vcHRpb25zCisgICAgICAgICAgc2V0dGluZ3MsIG9yIGJ5IGV4YW1pbmluZyB0aGUgY29udGVudCkKKyAgICAgICAgKiBnaXZlIHlvdSBhIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBpcyB1c2VkIHRvIGV2YWx1YXRlIGZ1bmN0aW9uIGNvbnRleHQKKyAgICAgICAgICBmb3IgaHVuayBoZWFkZXJzCisgICAgKiBBdCBzb21lIHBvaW50LCB0aGUgbG9naWMgZm9yIGdldHRpbmcgYSBmaWx0ZXJlZCB2ZXJzaW9uIG9mIGZpbGUgY29udGVudAorICAgICAgb3IgY2FsY3VsYXRpbmcgdGhlIE9JRCBvZiBhIGZpbGUgbWF5IGJlIG1vdmVkIGludG8gdGhlIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RvY3MvZXJyb3ItaGFuZGxpbmcubWQgYi9kb2NzL2Vycm9yLWhhbmRsaW5nLm1kCmluZGV4IDY1NWFmZWIuLjJkYmU2NGEgMTAwNjQ0Ci0tLSBhL2RvY3MvZXJyb3ItaGFuZGxpbmcubWQKKysrIGIvZG9jcy9lcnJvci1oYW5kbGluZy5tZApAQCAtMSwxMTEgKzEsMjcwIEBACiBFcnJvciByZXBvcnRpbmcgaW4gbGliZ2l0MgogPT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotRXJyb3IgcmVwb3J0aW5nIGlzIHBlcmZvcm1lZCBvbiBhbiBleHBsaWNpdCBgZ2l0X2Vycm9yICoqYCBhcmd1bWVudCwgd2hpY2ggYXBwZWFycyBhdCB0aGUgZW5kIG9mIGFsbCBBUEkgY2FsbHMgdGhhdCBjYW4gcmV0dXJuIGFuIGVycm9yLiBZZXMsIHRoaXMgZG9lcyBjbHV0dGVyIHRoZSBBUEkuCitMaWJnaXQyIHRyaWVzIHRvIGZvbGxvdyB0aGUgUE9TSVggc3R5bGU6IGZ1bmN0aW9ucyByZXR1cm4gYW4gYGludGAgdmFsdWUKK3dpdGggMCAoemVybykgaW5kaWNhdGluZyBzdWNjZXNzIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgaW5kaWNhdGluZyBhbiBlcnJvci4KK1RoZXJlIGFyZSBzcGVjaWZpYyBuZWdhdGl2ZSBlcnJvciBjb2RlcyBmb3IgZWFjaCAiZXhwZWN0ZWQgZmFpbHVyZSIKKyhlLmcuIGBHSVRfRU5PVEZPVU5EYCBmb3IgZmlsZXMgdGhhdCB0YWtlIGEgcGF0aCB3aGljaCBtaWdodCBiZSBtaXNzaW5nKQorYW5kIGEgZ2VuZXJpYyBlcnJvciBjb2RlICgtMSkgZm9yIGFsbCBjcml0aWNhbCBvciBub24tc3BlY2lmaWMgZmFpbHVyZXMKKyhlLmcuIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeSBvciBzeXN0ZW0gY29ycnVwdGlvbikuCiAKLVdoZW4gYSBmdW5jdGlvbiBmYWlscywgYW4gZXJyb3IgaXMgc2V0IG9uIHRoZSBlcnJvciB2YXJpYWJsZSAqKmFuZCoqIHJldHVybnMgb25lIG9mIHRoZSBnZW5lcmljIGVycm9yIGNvZGVzLgorV2hlbiBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkLCBhbiBlcnJvciBtZXNzYWdlIGlzIGFsc28gc2V0LiAgVGhlCittZXNzYWdlIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIGBnaXRlcnJfbGFzdGAgZnVuY3Rpb24gd2hpY2ggd2lsbCByZXR1cm4gYQorcG9pbnRlciB0byBhIGBnaXRfZXJyb3JgIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBlcnJvciBtZXNzYWdlIHRleHQgYW5kCit0aGUgY2xhc3Mgb2YgZXJyb3IgKGkuZS4gd2hhdCBwYXJ0IG9mIHRoZSBsaWJyYXJ5IGdlbmVyYXRlZCB0aGUgZXJyb3IpLgorCitGb3IgaW5zdGFuY2U6IEFuIG9iamVjdCBsb29rdXAgYnkgU0hBIHByZWZpeCAoYGdpdF9vYmplY3RfbG9va3VwX3ByZWZpeGApCitoYXMgdHdvIGV4cGVjdGVkIGZhaWx1cmUgY2FzZXM6IHRoZSBTSEEgaXMgbm90IGZvdW5kIGF0IGFsbCB3aGljaCByZXR1cm5zCitgR0lUX0VOT1RGT1VORGAgb3IgdGhlIFNIQSBwcmVmaXggaXMgYW1iaWd1b3VzIChpLmUuIHR3byBvciBtb3JlIG9iamVjdHMKK3NoYXJlIHRoZSBwcmVmaXgpIHdoaWNoIHJldHVybnMgYEdJVF9FQU1CSUdVT1VTYC4gIFRoZXJlIGFyZSBhbnkgbnVtYmVyIG9mCitjcml0aWNhbCBmYWlsdXJlcyAoc3VjaCBhcyBhIHBhY2tmaWxlIGJlaW5nIGNvcnJ1cHRlZCwgYSBsb29zZSBvYmplY3QKK2hhdmluZyB0aGUgd3JvbmcgYWNjZXNzIHBlcm1pc3Npb25zLCBldGMuKSBhbGwgb2Ygd2hpY2ggd2lsbCByZXR1cm4gLTEuCitXaGVuIHRoZSBvYmplY3QgbG9va3VwIGlzIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgcmV0dXJuIDAuCisKK0lmIGxpYmdpdDIgd2FzIGNvbXBpbGVkIHdpdGggdGhyZWFkcyBlbmFibGVkIChgLURUSFJFQURTQUZFPU9OYCB3aGVuIHVzaW5nCitDTWFrZSksIHRoZW4gdGhlIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBrZXB0IGluIHRocmVhZC1sb2NhbCBzdG9yYWdlLCBzbyBpdAord2lsbCBub3QgYmUgbW9kaWZpZWQgYnkgb3RoZXIgdGhyZWFkcy4gIElmIHRocmVhZHMgYXJlIG5vdCBlbmFibGVkLCB0aGVuCit0aGUgZXJyb3IgbWVzc2FnZSBpcyBpbiBnbG9iYWwgZGF0YS4KKworQWxsIG9mIHRoZSBlcnJvciByZXR1cm4gY29kZXMsIHRoZSBgZ2l0X2Vycm9yYCB0eXBlLCB0aGUgZXJyb3IgYWNjZXNzCitmdW5jdGlvbnMsIGFuZCB0aGUgZXJyb3IgY2xhc3NlcyBhcmUgZGVmaW5lZCBpbiBgaW5jbHVkZS9naXQyL2Vycm9ycy5oYC4KK1NlZSB0aGUgZG9jdW1lbnRhdGlvbiB0aGVyZSBmb3IgZGV0YWlscyBvbiB0aGUgQVBJcyBmb3IgYWNjZXNzaW5nLAorY2xlYXJpbmcsIGFuZCBldmVuIHNldHRpbmcgZXJyb3IgY29kZXMuCisKK1doZW4gd3JpdGluZyBsaWJnaXQyIGNvZGUsIHBsZWFzZSBiZSBzbWFydCBhbmQgY29uc2VydmF0aXZlIHdoZW4gcmV0dXJuaW5nCitlcnJvciBjb2Rlcy4gIEZ1bmN0aW9ucyB1c3VhbGx5IGhhdmUgYSBtYXhpbXVtIG9mIHR3byBvciB0aHJlZSAiZXhwZWN0ZWQKK2Vycm9ycyIgYW5kIGluIG1vc3QgY2FzZXMgb25seSBvbmUuICBJZiB5b3UgZmVlbCB0aGVyZSBhcmUgbW9yZSBwb3NzaWJsZQorZXhwZWN0ZWQgZXJyb3Igc2NlbmFyaW9zLCB0aGVuIHRoZSBBUEkgeW91IGFyZSB3cml0aW5nIG1heSBiZSBhdCB0b28gaGlnaAorYSBsZXZlbCBmb3IgY29yZSBsaWJnaXQyLgorCitFeGFtcGxlIHVzYWdlCistLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgbGliZ2l0MiwgeW91IHdpbGwgdHlwaWNhbGx5IGNhcHR1cmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tCitmdW5jdGlvbnMgdXNpbmcgYW4gYGludGAgdmFyaWFibGUgYW5kIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBuZWdhdGl2ZS4KK1doZW4gdGhhdCBoYXBwZW5zLCB5b3UgY2FuLCBpZiB5b3Ugd2lzaCwgbG9vayBhdCB0aGUgc3BlY2lmaWMgdmFsdWUgb3IKK2xvb2sgYXQgdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCB3YXMgZ2VuZXJhdGVkLgogCiB+fn5jCi1pbnQgZ2l0X3JlcG9zaXRvcnlfb3BlbihnaXRfcmVwb3NpdG9yeSAqKnJlcG9zaXRvcnksIGNvbnN0IGNoYXIgKnBhdGgsIGdpdF9lcnJvciAqKmVycm9yKQogewotCS8vIHBlcmZvcm0gc29tZSBvcGVuaW5nCi0JaWYgKHBfZXhpc3RzKHBhdGgpIDwgMCkgewotCQlnaXRlcnJfc2V0KGVycm9yLCBHSVRFUlJfUkVQT1NJVE9SWSwgIlRoZSBwYXRoICclcycgZG9lc24ndCBleGlzdCIsIHBhdGgpOwotCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlpbnQgZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9vcGVuKCZyZXBvLCAicGF0aC90by9yZXBvIik7CisKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gcmVwb3NpdG9yeTogJXNcbiIsIGdpdGVycl9sYXN0KCktPm1lc3NhZ2UpOworCQlleGl0KDEpOwogCX0KIAotCS4uLgorCS4uLiB1c2UgYHJlcG9gIGhlcmUgLi4uCiAKLQlpZiAodHJ5X3RvX3BhcnNlKHBhdGgsIGVycm9yKSA8IDApCi0JCXJldHVybiBHSVRfRVJST1I7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsgLyogdm9pZCBmdW5jdGlvbiAtIG5vIGVycm9yIHJldHVybiBjb2RlICovCit9Cit+fn4KKworU29tZSBvZiB0aGUgZXJyb3IgcmV0dXJuIHZhbHVlcyBkbyBoYXZlIG1lYW5pbmcuICBPcHRpb25hbGx5LCB5b3UgY2FuIGxvb2sKK2F0IHRoZSBzcGVjaWZpYyBlcnJvciB2YWx1ZXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8uCisKK35+fmMKK3sKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICpwYXRoID0gInBhdGgvdG8vcmVwbyI7CisJaW50IGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbywgcGF0aCk7CisKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKQorCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZmluZCByZXBvc2l0b3J5IGF0IHBhdGggJyVzJ1xuIiwgcGF0aCk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gcmVwb3NpdG9yeTogJXNcbiIsCisJCQkJZ2l0ZXJyX2xhc3QoKS0+bWVzc2FnZSk7CisJCWV4aXQoMSk7CisJfQorCisJLi4uIGhhcHB5IC4uLgorfQorfn5+CisKK1NvbWUgb2YgdGhlIGhpZ2hlci1sZXZlbCBsYW5ndWFnZSBiaW5kaW5ncyBtYXkgdXNlIGEgcmFuZ2Ugb2YgaW5mb3JtYXRpb24KK2Zyb20gbGliZ2l0MiB0byBjb252ZXJ0IGVycm9yIHJldHVybiBjb2RlcyBpbnRvIGV4Y2VwdGlvbnMsIGluY2x1ZGluZyB0aGUKK3NwZWNpZmljIGVycm9yIHJldHVybiBjb2RlcyBhbmQgZXZlbiB0aGUgY2xhc3Mgb2YgZXJyb3IgYW5kIHRoZSBlcnJvcgorbWVzc2FnZSByZXR1cm5lZCBieSBgZ2l0ZXJyX2xhc3RgLCBidXQgdGhlIGZ1bGwgcmFuZ2Ugb2YgdGhhdCBsb2dpYyBpcworYmV5b25kIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50LgorCitFeGFtcGxlIGludGVybmFsIGltcGxlbWVudGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludGVybmFsbHksIGxpYmdpdDIgZGV0ZWN0cyBlcnJvciBzY2VuYXJpb3MsIHJlY29yZHMgZXJyb3IgbWVzc2FnZXMsIGFuZAorcmV0dXJucyBlcnJvciB2YWx1ZXMuICBFcnJvcnMgZnJvbSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkKK3Bhc3NlZCB1cHdhcmRzICh1bmxlc3MgdGhlIGhpZ2hlciBsZXZlbCBjYW4gZWl0aGVyIGhhbmRsZSB0aGUgZXJyb3Igb3IKK3dhbnRzIHRvIHRyYW5zbGF0ZSB0aGUgZXJyb3IgaW50byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsKS4KKworfn5+YworaW50IGdpdF9yZXBvc2l0b3J5X29wZW4oZ2l0X3JlcG9zaXRvcnkgKipyZXBvc2l0b3J5LCBjb25zdCBjaGFyICpwYXRoKQoreworCS8qIHBlcmZvcm0gc29tZSBsb2dpYyB0byBvcGVuIHRoZSByZXBvc2l0b3J5ICovCisJaWYgKHBfZXhpc3RzKHBhdGgpIDwgMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9SRVBPU0lUT1JZLCAiVGhlIHBhdGggJyVzJyBkb2Vzbid0IGV4aXN0IiwgcGF0aCk7CisJCXJldHVybiBHSVRfRU5PVEZPVU5EOworCX0KIAogCS4uLgogfQogfn5+CiAKLVRoZSBzaW1wbGUgZXJyb3IgQVBJCitUaGUgcHVibGljIGVycm9yIEFQSQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLSBgdm9pZCBnaXRlcnJfc2V0KGdpdF9lcnJvciAqKiwgaW50LCBjb25zdCBjaGFyICosIC4uLilgOiB0aGUgbWFpbiBmdW5jdGlvbiB1c2VkIHRvIHNldCBhbiBlcnJvci4gSXQgYWxsb2NhdGVzIGEgbmV3IGVycm9yIG9iamVjdCBhbmQgc3RvcmVzIGl0IGluIHRoZSBwYXNzZWQgZXJyb3IgcG9pbnRlci4gSXQgaGFzIG5vIHJldHVybiB2YWx1ZS4gVGhlIGFyZ3VtZW50cyBmb3IgYGdpdGVycl9zZXRgIGFyZSBhcyBmb2xsb3dzOgorLSBgY29uc3QgZ2l0X2Vycm9yICpnaXRlcnJfbGFzdCh2b2lkKWA6IFRoZSBtYWluIGZ1bmN0aW9uIHVzZWQgdG8gbG9vayB1cAorICB0aGUgbGFzdCBlcnJvci4gIFRoaXMgbWF5IHJldHVybiBOVUxMIGlmIG5vIGVycm9yIGhhcyBvY2N1cnJlZC4KKyAgT3RoZXJ3aXNlIHRoaXMgc2hvdWxkIHJldHVybiBhIGBnaXRfZXJyb3JgIG9iamVjdCBpbmRpY2F0aW5nIHRoZSBjbGFzcworICBvZiBlcnJvciBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSBsaWJyYXJ5LgogCi0JLSBgZ2l0X2Vycm9yICoqZXJyb3JfcHRyYDogdGhlIHBvaW50ZXIgd2hlcmUgdGhlIGVycm9yIHdpbGwgYmUgY3JlYXRlZC4KLQktIGBpbnQgZXJyb3JfY2xhc3NgOiB0aGUgY2xhc3MgZm9yIHRoZSBlcnJvci4gVGhpcyBpcyAqKm5vdCoqIGFuIGVycm9yIGNvZGU6IHRoaXMgaXMgYW4gc3BlY2lmaWMgZW51bSB0aGF0IHNwZWNpZmllcyB0aGUgZXJyb3IgZmFtaWx5LiBUaGUgcG9pbnQgaXMgdG8gbWFwIHRoZXNlIGZhbWlsaWVzIDEtMSB3aXRoIEV4Y2VwdGlvbiB0eXBlcyBvbiBoaWdoZXIgbGV2ZWwgbGFuZ3VhZ2VzIChlLmcuIEdpdFJlcG9zaXRvcnlFeGNlcHRpb24pCi0JLSBgY29uc3QgY2hhciAqZXJyb3Jfc3RyLCAuLi5gOiB0aGUgZXJyb3Igc3RyaW5nLCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgYXJndW1lbnRzCisgIFRoZSBsYXN0IGVycm9yIGlzIHN0b3JlZCBpbiB0aHJlYWQtbG9jYWwgc3RvcmFnZSB3aGVuIGxpYmdpdDIgaXMKKyAgY29tcGlsZWQgd2l0aCB0aHJlYWQgc3VwcG9ydCwgc28geW91IGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFub3RoZXIKKyAgdGhyZWFkIG92ZXJ3cml0aW5nIHRoZSB2YWx1ZS4gIFdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgb2ZmLCB0aGUgbGFzdAorICBlcnJvciBpcyBhIGdsb2JhbCB2YWx1ZS4KIAotLSBgdm9pZCBnaXRlcnJfZnJlZShnaXRfZXJyb3IgKilgOiB0YWtlcyBhbiBlcnJvciBhbmQgZnJlZXMgaXQuIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBleHRlcm5hbCBBUEkuCisgIF9Ob3RlXyBUaGVyZSBhcmUgc29tZSBrbm93biBidWdzIGluIHRoZSBsaWJyYXJ5IHdoZXJlIHRoaXMgbWF5IHJldHVybgorICBOVUxMIGV2ZW4gd2hlbiBhbiBlcnJvciBjb2RlIHdhcyBnZW5lcmF0ZWQuICBQbGVhc2UgcmVwb3J0IHRoZXNlIGFzCisgIGJ1Z3MsIGJ1dCBpbiB0aGUgbWVhbnRpbWUsIHBsZWFzZSBjb2RlIGRlZmVuc2l2ZWx5IGFuZCBjaGVjayBmb3IgTlVMTAorICB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KIAotLSBgdm9pZCBnaXRlcnJfY2xlYXIoZ2l0X2Vycm9yICoqKWA6IGNsZWFycyBhbiBlcnJvciBwcmV2aW91c2x5IHNldCBpbiBhbiBlcnJvciBwb2ludGVyLCBzZXR0aW5nIGl0IHRvIE5VTEwgYW5kIGNhbGxpbmcgYGdpdGVycl9mcmVlYCBvbiBpdC4KKy0gYHZvaWQgZ2V0ZXJyX2NsZWFyKHZvaWQpYDogVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGxhc3QgZXJyb3IuICBUaGUKKyAgbGlicmFyeSB3aWxsIGNhbGwgdGhpcyB3aGVuIGFuIGVycm9yIGlzIGdlbmVyYXRlZCBieSBsb3cgbGV2ZWwgZnVuY3Rpb24KKyAgYW5kIHRoZSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXJyb3IuCiAKLS0gYHZvaWQgZ2l0ZXJyX3Byb3BhZ2F0ZShnaXRfZXJyb3IgKiosIGdpdF9lcnJvciAqKWA6IG1vdmVzIGFuIGVycm9yIHRvIGEgZ2l2ZW4gZXJyb3IgcG9pbnRlciwgaGFuZGxpbmcgdGhlIGNhc2Ugd2hlbiB0aGUgZXJyb3IgcG9pbnRlciBpcyBOVUxMIChpbiB0aGF0IGNhc2UgdGhlIGVycm9yIGdldHMgZnJlZWQsIGJlY2F1c2UgaXQgY2Fubm90IGJlIHByb3BhZ2F0ZWQpLgorICBfTm90ZV8gVGhlcmUgYXJlIHNvbWUga25vd24gYnVncyBpbiB0aGUgbGlicmFyeSB3aGVyZSBhIGxvdyBsZXZlbAorICBmdW5jdGlvbidzIGVycm9yIG1lc3NhZ2UgaXMgbm90IGNsZWFyZWQgYnkgaGlnaGVyIGxldmVsIGNvZGUgdGhhdAorICBoYW5kbGVzIHRoZSBlcnJvciBhbmQgcmV0dXJucyB6ZXJvLiAgUGxlYXNlIHJlcG9ydCB0aGVzZSBhcyBidWdzLCBidXQgaW4KKyAgdGhlIG1lYW50aW1lLCBhIHplcm8gcmV0dXJuIHZhbHVlIGZyb20gYSBsaWJnaXQyIEFQSSBkb2VzIG5vdCBndWFyYW50ZWUKKyAgdGhhdCBgZ2l0ZXJyX2xhc3QoKWAgd2lsbCByZXR1cm4gTlVMTC4KIAotVGhlIG5ldyBlcnJvciBjb2RlIHJldHVybiB2YWx1ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIGB2b2lkIGdpdGVycl9zZXRfc3RyKGludCBlcnJvcl9jbGFzcywgY29uc3QgY2hhciAqbWVzc2FnZSlgOiBUaGlzCisgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdoZW4gd3JpdGluZyBhIGN1c3RvbSBiYWNrZW5kIG1vZHVsZSB0byBzZXQgdGhlCisgIGxpYmdpdDIgZXJyb3IgbWVzc2FnZS4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIGZ1bmN0aW9uIGZvciBpdHMKKyAgdXNlLiAgTm9ybWFsIHVzYWdlIG9mIGxpYmdpdDIgd2lsbCBwcm9iYWJseSBuZXZlciBuZWVkIHRvIGNhbGwgdGhpcyBBUEkuCiAKLVdlIGFyZSBkb2luZyB0aGlzIHRoZSBQT1NJWCB3YXk6IG9uZSBlcnJvciBjb2RlIGZvciBlYWNoICJleHBlY3RlZCBmYWlsdXJlIiwgYW5kIGEgZ2VuZXJpYyBlcnJvciBjb2RlIGZvciBhbGwgdGhlIGNyaXRpY2FsIGZhaWx1cmVzLgorLSBgdm9pZCBnaXRlcnJfc2V0X29vbSh2b2lkKWA6IFRoaXMgaXMgYSBzdGFuZGFyZCBmdW5jdGlvbiBmb3IgcmVwb3J0aW5nCisgIGFuIG91dC1vZi1tZW1vcnkgZXJyb3IuICBJdCBpcyB3cml0dGVuIGluIGEgbWFubmVyIHRoYXQgaXQgZG9lc24ndCBoYXZlCisgIHRvIGFsbG9jYXRlIGFueSBleHRyYSBtZW1vcnkgaW4gb3JkZXIgdG8gcmVjb3JkIHRoZSBlcnJvciwgc28gdGhpcyBpcworICB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IHRoYXQgc2NlbmFyaW8uCiAKLUZvciBpbnN0YW5jZTogQSByZWZlcmVuY2UgbG9va3VwIGNhbiBoYXZlIGFuIGV4cGVjdGVkIGZhaWx1cmUgKHdoaWNoIGlzIHdoZW4gdGhlIHJlZmVyZW5jZSBjYW5ub3QgYmUgZm91bmQpLCBhbmQgYSBjcml0aWNhbCBmYWlsdXJlICh3aGljaCBjb3VsZCBiZSBhbnkgb2YgYSBsb25nIGxpc3Qgb2YgdGhpbmdzIHRoYXQgY291bGQgZ28gd3JvbmcsIHN1Y2ggYXMgdGhlIHJlZnMgcGFja2ZpbGUgYmVpbmcgY29ycnVwdGVkLCBhIGxvb3NlIHJlZiBiZWluZyB3cml0dGVuIHdpdGggdGhlIHdyb25nIHBlcm1pc3Npb25zLCBldGMpLiBXZSBjYW5ub3QgaGF2ZSBkaXN0aW5jdCBlcnJvciBjb2RlcyBmb3IgZXZlcnkgc2luZ2xlIGVycm9yIGluIHRoZSBsaWJyYXJ5LCBoZW5jZSBgZ2l0X3JlZmVyZW5jZV9sb29rdXBgIHdvdWxkIHJldHVybiBHSVRfU1VDQ0VTUyBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLCBHSVRfRU5PVEZPVU5EIHdoZW4gdGhlIHJlZmVyZW5jZSBkb2Vzbid0IGV4aXN0LCBhbmQgR0lUX0VSUk9SIHdoZW4gYW4gZXJyb3IgaGFwcGVucyAtLSAqKnRoZSBlcnJvciBpcyB0aGVuIGRldGFpbGVkIGluIHRoZSBgZ2l0X2Vycm9yYCBwYXJhbWV0ZXIqKi4KK0RldmlhdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUGxlYXNlIGJlIHNtYXJ0IHdoZW4gcmV0dXJuaW5nIGVycm9yIGNvZGVzLiBGdW5jdGlvbnMgaGF2ZSBtYXggdHdvICJleHBlY3RlZCBlcnJvcnMiLCBhbmQgaW4gbW9zdCBjYXNlcyBvbmx5IG9uZS4KK1RoZXJlIGFyZSBzb21lIHB1YmxpYyBmdW5jdGlvbnMgdGhhdCBkbyBub3QgcmV0dXJuIGBpbnRgIHZhbHVlcy4gIFRoZXJlCithcmUgdHdvIHByaW1hcnkgY2FzZXM6CisKKyogYHZvaWRgIHJldHVybiB2YWx1ZXM6IElmIGEgZnVuY3Rpb24gaGFzIGEgYHZvaWRgIHJldHVybiwgdGhlbiBpdCB3aWxsCisgIG5ldmVyIGZhaWwuICBUaGlzIHByaW1hcnkgd2lsbCBiZSB1c2VkIGZvciBvYmplY3QgZGVzdHJ1Y3RvcnMuCisKKyogYGdpdF94eXogKmAgcmV0dXJuIHZhbHVlczogVGhlc2UgYXJlIHNpbXBsZSBhY2Nlc3NvciBmdW5jdGlvbnMgd2hlcmUgdGhlCisgIG9ubHkgbWVhbmluZ2Z1bCBlcnJvciB3b3VsZCB0eXBpY2FsbHkgYmUgbG9va2luZyBzb21ldGhpbmcgdXAgYnkgaW5kZXgKKyAgYW5kIGhhdmluZyB0aGUgaW5kZXggYmUgb3V0IG9mIGJvdW5kcy4gIEluIHRob3NlIGNhc2VzLCB0aGUgZnVuY3Rpb24KKyAgd2lsbCB0eXBpY2FsbHkgcmV0dXJuIE5VTEwuCisKKyogQm9vbGVhbiByZXR1cm4gdmFsdWVzOiBUaGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSBhIGZ1bmN0aW9uIGNhbm5vdCBmYWlsCisgIGFuZCB3YW50cyB0byByZXR1cm4gYSBib29sZWFuIHZhbHVlLiAgSW4gdGhvc2UgY2FzZXMsIHdlIHRyeSB0byByZXR1cm4gMQorICBmb3IgdHJ1ZSBhbmQgMCBmb3IgZmFsc2UuICBUaGVzZSBjYXNlcyBhcmUgcmFyZSBhbmQgdGhlIHJldHVybiB2YWx1ZSBmb3IKKyAgdGhlIGZ1bmN0aW9uIHNob3VsZCBwcm9iYWJseSBiZSBhbiBgdW5zaWduZWQgaW50YCB0byBkZW5vdGUgdGhlc2UgY2FzZXMuCisgIElmIHlvdSBmaW5kIGFuIGV4Y2VwdGlvbiwgcGxlYXNlIG9wZW4gYW4gaXNzdWUgYW5kIGxldCdzIGZpeCBpdC4KKworVGhlcmUgYXJlIGEgZmV3IG90aGVyIGV4Y2VwdGlvbnMgdG8gdGhlc2UgcnVsZXMgaGVyZSBhbmQgdGhlcmUgaW4gdGhlCitsaWJyYXJ5LCBidXQgdGhvc2UgYXJlIGV4dHJlbWVseSByYXJlIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgY29udmVydGVkCitvdmVyIHRvIG90aGVyIHRvIG1vcmUgc3RhbmRhcmQgcGF0dGVybnMgZm9yIHVzYWdlLiAgRmVlbCBmcmVlIHRvIG9wZW4KK2lzc3VlcyBwb2ludGluZyB0aGVzZSBvdXQuCisKK1RoZXJlIGFyZSBzb21lIGtub3duIGJ1Z3MgaW4gdGhlIGxpYnJhcnkgd2hlcmUgc29tZSBmdW5jdGlvbnMgbWF5IHJldHVybiBhCituZWdhdGl2ZSB2YWx1ZSBidXQgbm90IHNldCBhbiBlcnJvciBtZXNzYWdlIGFuZCBzb21lIG90aGVyIGZ1bmN0aW9ucyBtYXkKK3JldHVybiB6ZXJvIChubyBlcnJvcikgYW5kIHlldCBsZWF2ZSBhbiBlcnJvciBtZXNzYWdlIHNldC4gIFBsZWFzZSByZXBvcnQKK3RoZXNlIGNhc2VzIGFzIGlzc3VlcyBhbmQgdGhleSB3aWxsIGJlIGZpeGVkLiAgSW4gdGhlIG1lYW53aGlsZSwgcGxlYXNlCitjb2RlIGRlZmVuc2l2ZWx5LCBjaGVja2luZyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgYGdpdGVycl9sYXN0YCBpcyBub3QKK05VTEwgYmVmb3JlIHVzaW5nIGl0LCBhbmQgbm90IHJlbHlpbmcgb24gYGdpdGVycl9sYXN0YCB0byByZXR1cm4gTlVMTCB3aGVuCithIGZ1bmN0aW9uIHJldHVybnMgMCBmb3Igc3VjY2Vzcy4KKworVGhlIGludGVybmFsIGVycm9yIEFQSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIGB2b2lkIGdpdGVycl9zZXQoaW50IGVycm9yX2NsYXNzLCBjb25zdCBjaGFyICpmbXQsIC4uLilgOiBUaGlzIGlzIHRoZQorICBtYWluIGludGVybmFsIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGFuIGVycm9yLiAgSXQgd29ya3MgbGlrZSBgcHJpbnRmYCB0bworICBmb3JtYXQgdGhlIGVycm9yIG1lc3NhZ2UuICBTZWUgdGhlIG5vdGVzIG9mIGBnaXRlcnJfc2V0X3N0cmAgZm9yIGEKKyAgZ2VuZXJhbCBkZXNjcmlwdGlvbiBvZiBob3cgZXJyb3IgbWVzc2FnZXMgYXJlIHN0b3JlZCAoYW5kIGFsc28gYWJvdXQKKyAgc3BlY2lhbCBoYW5kbGluZyBmb3IgYGVycm9yX2NsYXNzYCBvZiBgR0lURVJSX09TYCkuCiAKIFdyaXRpbmcgZXJyb3IgbWVzc2FnZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSGVyZSBhcmUgc29tZSBndWlkZWxpbmVzIHdoZW4gd3JpdGluZyBlcnJvciBtZXNzYWdlczoKIAotLSBVc2UgcHJvcGVyIEVuZ2xpc2gsIGFuZCBhbiBpbXBlcnNvbmFsIG9yIHBhc3QgdGVuc2VzOiAqVGhlIGdpdmVuIHBhdGggZG9lcyBub3QgZXhpc3QqLCAqRmFpbGVkIHRvIGxvb2t1cCBvYmplY3QgaW4gT0RCKgorLSBVc2UgcHJvcGVyIEVuZ2xpc2gsIGFuZCBhbiBpbXBlcnNvbmFsIG9yIHBhc3QgdGVuc2VzOiAqVGhlIGdpdmVuIHBhdGgKKyAgZG9lcyBub3QgZXhpc3QqLCAqRmFpbGVkIHRvIGxvb2t1cCBvYmplY3QgaW4gT0RCKgogCi0tIFVzZSBzaG9ydCwgZGlyZWN0IGFuZCBvYmplY3RpdmUgbWVzc2FnZXMuICoqT25lIGxpbmUsIG1heCoqLiBsaWJnaXQyIGlzIGEgbG93IGxldmVsIGxpYnJhcnk6IHRoaW5rIHRoYXQgYWxsIHRoZSBtZXNzYWdlcyByZXBvcnRlZCB3aWxsIGJlIHRocm93biBhcyBSdWJ5IG9yIFB5dGhvbiBleGNlcHRpb25zLiBUaGluayBob3cgbG9uZyBhcmUgY29tbW9uIGV4Y2VwdGlvbiBtZXNzYWdlcyBpbiB0aG9zZSBsYW5ndWFnZXMuCistIFVzZSBzaG9ydCwgZGlyZWN0IGFuZCBvYmplY3RpdmUgbWVzc2FnZXMuICoqT25lIGxpbmUsIG1heCoqLiBsaWJnaXQyIGlzCisgIGEgbG93IGxldmVsIGxpYnJhcnk6IHRoaW5rIHRoYXQgYWxsIHRoZSBtZXNzYWdlcyByZXBvcnRlZCB3aWxsIGJlIHRocm93bgorICBhcyBSdWJ5IG9yIFB5dGhvbiBleGNlcHRpb25zLiBUaGluayBob3cgbG9uZyBhcmUgY29tbW9uIGV4Y2VwdGlvbgorICBtZXNzYWdlcyBpbiB0aG9zZSBsYW5ndWFnZXMuCiAKLS0gKipEbyBub3QgYWRkIHJlZHVuZGFudCBpbmZvcm1hdGlvbiB0byB0aGUgZXJyb3IgbWVzc2FnZSoqLCBzcGVjaWFsbHkgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgY29udGV4dC4KKy0gKipEbyBub3QgYWRkIHJlZHVuZGFudCBpbmZvcm1hdGlvbiB0byB0aGUgZXJyb3IgbWVzc2FnZSoqLCBzcGVjaWFsbHkKKyAgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgY29udGV4dC4KIAotCUUuZy4gaW4gYGdpdF9yZXBvc2l0b3J5X29wZW5gLCBkbyBub3QgcmVwb3J0IGEgbWVzc2FnZSBsaWtlICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5OiBwYXRoIG5vdCBmb3VuZCIuIFNvbWVib2R5IGlzCi0JY2FsbGluZyB0aGF0IGZ1bmN0aW9uLiBJZiBpdCBmYWlscywgaGUgYWxyZWFkeSBrbm93cyB0aGF0IHRoZSByZXBvc2l0b3J5IGZhaWxlZCB0byBvcGVuIQorCUUuZy4gaW4gYGdpdF9yZXBvc2l0b3J5X29wZW5gLCBkbyBub3QgcmVwb3J0IGEgbWVzc2FnZSBsaWtlICJGYWlsZWQgdG8KKwlvcGVuIHJlcG9zaXRvcnk6IHBhdGggbm90IGZvdW5kIi4gU29tZWJvZHkgaXMgY2FsbGluZyB0aGF0CisJZnVuY3Rpb24uIElmIGl0IGZhaWxzLCB0aGV5IGFscmVhZHkga25vdyB0aGF0IHRoZSByZXBvc2l0b3J5IGZhaWxlZCB0bworCW9wZW4hCiAKIEdlbmVyYWwgZ3VpZGVsaW5lcyBmb3IgZXJyb3IgcmVwb3J0aW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0tIFdlIG5ldmVyIGhhbmRsZSBwcm9ncmFtbWluZyBlcnJvcnMgd2l0aCB0aGVzZSBmdW5jdGlvbnMuIFByb2dyYW1taW5nIGVycm9ycyBhcmUgYGFzc2VydGBlZCwgYW5kIHdoZW4gdGhlaXIgc291cmNlIGlzIGludGVybmFsLCBmaXhlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBUaGlzIGlzIEMsIHBlb3BsZS4KKy0gTGliZ2l0MiBkb2VzIG5vdCBoYW5kbGUgcHJvZ3JhbW1pbmcgZXJyb3JzIHdpdGggdGhlc2UKKyAgZnVuY3Rpb25zLiBQcm9ncmFtbWluZyBlcnJvcnMgYXJlIGBhc3NlcnRgZWQsIGFuZCB3aGVuIHRoZWlyIHNvdXJjZSBpcworICBpbnRlcm5hbCwgZml4ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhpcyBpcyBDLCBwZW9wbGUuCiAKLQlFeGFtcGxlIG9mIHByb2dyYW1taW5nIGVycm9ycyB0aGF0IHdvdWxkICoqbm90KiogYmUgaGFuZGxlZDogcGFzc2luZyBOVUxMIHRvIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGEgdmFsaWQgcG9pbnRlcjsgcGFzc2luZyBhIGBnaXRfdHJlZWAgdG8gYSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYSBgZ2l0X2NvbW1pdGAuIEFsbCB0aGVzZSBjYXNlcyBuZWVkIHRvIGJlIGlkZW50aWZpZWQgd2l0aCBgYXNzZXJ0YCBhbmQgZml4ZWQgYXNhcC4KKwlFeGFtcGxlIG9mIHByb2dyYW1taW5nIGVycm9ycyB0aGF0IHdvdWxkICoqbm90KiogYmUgaGFuZGxlZDogcGFzc2luZworICAgIE5VTEwgdG8gYSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYSB2YWxpZCBwb2ludGVyOyBwYXNzaW5nIGEgYGdpdF90cmVlYAorICAgIHRvIGEgZnVuY3Rpb24gdGhhdCBleHBlY3RzIGEgYGdpdF9jb21taXRgLiBBbGwgdGhlc2UgY2FzZXMgbmVlZCB0byBiZQorICAgIGlkZW50aWZpZWQgd2l0aCBgYXNzZXJ0YCBhbmQgZml4ZWQgYXNhcC4KIAotCUV4YW1wbGUgb2YgYSBydW50aW1lIGVycm9yOiBmYWlsaW5nIHRvIHBhcnNlIGEgYGdpdF90cmVlYCBiZWNhdXNlIGl0IGNvbnRhaW5zIGludmFsaWQgZGF0YS4gRmFpbGluZyB0byBvcGVuIGEgZmlsZSBiZWNhdXNlIGl0IGRvZXNuJ3QgZXhpc3Qgb24gZGlzay4gVGhlc2UgZXJyb3JzIHdvdWxkIGJlIGhhbmRsZWQsIGFuZCBhIGBnaXRfZXJyb3JgIHdvdWxkIGJlIHNldC4KKwlFeGFtcGxlIG9mIGEgcnVudGltZSBlcnJvcjogZmFpbGluZyB0byBwYXJzZSBhIGBnaXRfdHJlZWAgYmVjYXVzZSBpdAorICAgIGNvbnRhaW5zIGludmFsaWQgZGF0YS4gRmFpbGluZyB0byBvcGVuIGEgZmlsZSBiZWNhdXNlIGl0IGRvZXNuJ3QgZXhpc3QKKyAgICBvbiBkaXNrLiBUaGVzZSBlcnJvcnMgYXJlIGhhbmRsZWQsIGEgbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlIGlzIHNldCwKKyAgICBhbmQgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KIAotLSBUaGUgYGdpdF9lcnJvciAqKmAgYXJndW1lbnQgaXMgYWx3YXlzIHRoZSBsYXN0IGluIHRoZSBzaWduYXR1cmUgb2YgYWxsIEFQSSBjYWxscy4gTm8gZXhjZXB0aW9ucy4KKy0gSW4gZ2VuZXJhbCwgKmRvIG5vdCogdHJ5IHRvIG92ZXJ3cml0ZSBlcnJvcnMgaW50ZXJuYWxseSBhbmQgKmRvKgorICBwcm9wYWdhdGUgZXJyb3IgY29kZXMgZnJvbSBsb3dlciBsZXZlbCBmdW5jdGlvbnMgdG8gdGhlIGhpZ2hlciBsZXZlbC4KKyAgVGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgcHJvcGFnYXRpbmcgYW4gZXJyb3IgY29kZSB3aWxsIGJlIG1vcmUKKyAgY29uZnVzaW5nIHJhdGhlciB0aGFuIGxlc3MsIHNvIHRoZXJlIGFyZSBzb21lIGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlLAorICBidXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igc2hvdWxkIGJlIHRvIHNpbXBseSBjbGVhbiB1cCBhbmQgcGFzcyB0aGUgZXJyb3IKKyAgb24gdXAgdG8gdGhlIGNhbGxlci4KIAotLSBXaGVuIHRoZSBwcm9ncmFtbWVyIChvciB1cywgaW50ZXJuYWxseSkgZG9lc24ndCBuZWVkIGVycm9yIGhhbmRsaW5nLCBoZSBjYW4gcGFzcyBgTlVMTGAgdG8gdGhlIGBnaXRfZXJyb3IgKipgIHBhcmFtLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVycm9ycyB3b24ndCBiZSAqcmVwb3J0ZWQqLCBidXQgb2J2aW91c2x5IHRoZXkgc3RpbGwgd2lsbCBiZSBoYW5kbGVkIChpLmUuIHRoZSBmYWlsaW5nIGZ1bmN0aW9uIHdpbGwgaW50ZXJydXB0IGFuZCByZXR1cm4gY2xlYW5seSkuIFRoaXMgaXMgdHJhbnNwYXJlbnRseSBoYW5kbGVkIGJ5IGBnaXRlcnJfc2V0YAotCi0tIGBnaXRfZXJyb3IgKmAgKiptdXN0IGJlIGluaXRpYWxpemVkIHRvIGBOVUxMYCBiZWZvcmUgcGFzc2luZyBpdHMgdmFsdWUgdG8gYSBmdW5jdGlvbiEhKioKKyAgICAqKldST05HKioKIAogCX5+fmMKLQlnaXRfZXJyb3IgKmVycjsKLQlnaXRfZXJyb3IgKmdvb2RfZXJyb3IgPSBOVUxMOwotCi0JZ2l0X2Zvb19mdW5jKGFyZzEsIGFyZzIsICZlcnJvcik7IC8vIGludmFsaWQ6IGBlcnJvcmAgaXMgbm90IGluaXRpYWxpemVkCi0JZ2l0X2Zvb19mdW5jMihhcmcxLCBhcmcyLCAmZ29vZF9lcnJvcik7IC8vIE9LIQotCWdpdF9mb29fZnVuYzMoYXJnMSwgYXJnMiwgTlVMTCk7IC8vIE9LISBCdXQgbm8gZXJyb3IgcmVwb3J0aW5nIQotCX5+fgotCi0tIFBpbGluZyB1cCBlcnJvcnMgaXMgYW4gZXJyb3IhIERvbid0IGRvIHRoaXMhIEVycm9ycyBtdXN0IGFsd2F5cyBiZSBmcmVlJ2Qgd2hlbiBhIGZ1bmN0aW9uIHJldHVybnMuCi0KLQl+fn5jCi0JZ2l0X2Vycm9yICplcnJvciA9IE5VTEw7Ci0KLQlnaXRfZm9vX2Z1bmMxKGFyZzEsICZlcnJvcik7Ci0JZ2l0X2Zvb19mdW5jMihhcmcyLCAmZXJyb3IpOyAvLyBXUk9ORyEgV2hhdCBpZiBmdW5jMSBmYWlsZWQ/IGBlcnJvcmAgd291bGQgbGVhayEKLQl+fn4KLQotLSBMaWtld2lzZTogZG8gbm90IHJldGhyb3cgZXJyb3JzIGludGVybmFsbHkhCi0KLQl+fn5jCi0JaW50IGdpdF9jb21taXRfY3JlYXRlKC4uLiwgZ2l0X2Vycm9yICoqZXJyb3IpCisJaW50IGdpdF9jb21taXRfcGFyZW50KC4uLikKIAl7Ci0JCWlmIChnaXRfcmVmZXJlbmNlX2V4aXN0cygiSEVBRCIsIGVycm9yKSA8IDApIHsKLQkJCS8qIEhFQUQgZG9lcyBub3QgZXhpc3Q7IGNyZWF0ZSBpdCBzbyB3ZSBjYW4gY29tbWl0Li4uICovCi0JCQlpZiAoZ2l0X3JlZmVyZW5jZV9jcmVhdGUoIkhFQUQiLCBlcnJvcikgPCAwKSB7Ci0JCQkJLyogZXJyb3IgY291bGQgYmUgcmV0aHJvd24gKi8KLQkJCX0KKwkJLi4uCisKKwkJaWYgKGdpdF9jb21taXRfbG9va3VwKHBhcmVudCwgcmVwbywgcGFyZW50X2lkKSA8IDApIHsKKwkJCWdpdGVycl9zZXQoR0lURVJSX0NPTU1JVCwgIk92ZXJ3cml0ZSBsb29rdXAgZXJyb3IgbWVzc2FnZSIpOworCQkJcmV0dXJuIC0xOyAvKiBtYXNrIGVycm9yIGNvZGUgKi8KIAkJfQogCi0tIFJlbWVtYmVyIHRoYXQgZXJyb3JzIGFyZSBub3cgYWxsb2NhdGVkLCBhbmQgaGVuY2UgdGhleSBuZWVkIHRvIGJlIGZyZWUnZCBhZnRlciB0aGV5J3ZlIGJlZW4gdXNlZC4gRmFpbHVyZSB0byBkbyBzbyBpbnRlcm5hbGx5IChlLmcuIGluIHRoZSBhbHJlYWR5IHNlZW4gZXhhbXBsZXMgb2YgZXJyb3IgcGlsaW5nKSB3aWxsIGJlIHJlcG9ydGVkIGJ5IFZhbGdyaW5kLCBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgd2hlcmUgYXJlIHdlIHJldGhyb3dpbmcgZXJyb3JzLgorCQkuLi4KKwl9CisJfn5+CiAKLS0gUmVtZW1iZXIgdGhhdCBhbnkgZnVuY3Rpb24gdGhhdCBmYWlscyAqKndpbGwgc2V0IGFuIGVycm9yIG9iamVjdCoqLCBhbmQgdGhhdCBvYmplY3Qgd2lsbCBiZSBmcmVlZC4KKwkqKlJJR0hUKioKKworCX5+fmMKKwlpbnQgZ2l0X2NvbW1pdF9wYXJlbnQoLi4uKQorCXsKKwkJLi4uCisKKwkJZXJyb3IgPSBnaXRfY29tbWl0X2xvb2t1cChwYXJlbnQsIHJlcG8sIHBhcmVudF9pZCk7CisJCWlmIChlcnJvciA8IDApIHsKKwkJCS8qIGNsZWFudXAgaW50ZXJtZWRpYXRlIG9iamVjdHMgaWYgbmVjZXNzYXJ5ICovCisJCQkvKiBsZWF2ZSBlcnJvciBtZXNzYWdlIGFuZCBwcm9wYWdhdGUgZXJyb3IgY29kZSAqLworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLi4uCisJfQorCX5+fgpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvLmdpdGlnbm9yZSBiL2V4YW1wbGVzLy5naXRpZ25vcmUKaW5kZXggZThlMDgyMC4uNzExNDkzOSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvLmdpdGlnbm9yZQorKysgYi9leGFtcGxlcy8uZ2l0aWdub3JlCkBAIC0yLDQgKzIsMTAgQEAKIHNob3dpbmRleAogZGlmZgogcmV2LWxpc3QKK2JsYW1lCitjYXQtZmlsZQoraW5pdAorbG9nCityZXYtcGFyc2UKK3N0YXR1cwogKi5kU1lNCmRpZmYgLS1naXQgYS9leGFtcGxlcy9DTWFrZUxpc3RzLnR4dCBiL2V4YW1wbGVzL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NmJlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDE2IEBACitGSUxFKEdMT0JfUkVDVVJTRSBTUkNfRVhBTVBMRV9HSVQyIG5ldHdvcmsvKi5jIG5ldHdvcmsvKi5oKQorQUREX0VYRUNVVEFCTEUoY2dpdDIgJHtTUkNfRVhBTVBMRV9HSVQyfSkKK0lGKFdJTjMyIE9SIEFORFJPSUQpCisJVEFSR0VUX0xJTktfTElCUkFSSUVTKGNnaXQyIGdpdDIpCitFTFNFKCkKKwlUQVJHRVRfTElOS19MSUJSQVJJRVMoY2dpdDIgZ2l0MiBwdGhyZWFkKQorRU5ESUYoKQorCitGSUxFKEdMT0IgU1JDX0VYQU1QTEVfQVBQUyBSRUxBVElWRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0gKi5jKQorRk9SRUFDSChzcmNfYXBwICR7U1JDX0VYQU1QTEVfQVBQU30pCisJU1RSSU5HKFJFUExBQ0UgIi5jIiAiIiBhcHBfbmFtZSAke3NyY19hcHB9KQorCUlGKE5PVCAke2FwcF9uYW1lfSBTVFJFUVVBTCAiY29tbW9uIikKKwkJQUREX0VYRUNVVEFCTEUoJHthcHBfbmFtZX0gJHtzcmNfYXBwfSAiY29tbW9uLmMiKQorCQlUQVJHRVRfTElOS19MSUJSQVJJRVMoJHthcHBfbmFtZX0gZ2l0MikKKwlFTkRJRigpCitFTkRGT1JFQUNIKCkKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NPUFlJTkcgYi9leGFtcGxlcy9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMjU5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9DT1BZSU5HCkBAIC0wLDAgKzEsMTIxIEBACitDcmVhdGl2ZSBDb21tb25zIExlZ2FsIENvZGUKKworQ0MwIDEuMCBVbml2ZXJzYWwKKworICAgIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUKKyAgICBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRE9DVU1FTlQgRE9FUyBOT1QgQ1JFQVRFIEFOCisgICAgQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTCisgICAgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTCisgICAgUkVHQVJESU5HIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MKKyAgICBQUk9WSURFRCBIRVJFVU5ERVIsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NCisgICAgVEhFIFVTRSBPRiBUSElTIERPQ1VNRU5UIE9SIFRIRSBJTkZPUk1BVElPTiBPUiBXT1JLUyBQUk9WSURFRAorICAgIEhFUkVVTkRFUi4KKworU3RhdGVtZW50IG9mIFB1cnBvc2UKKworVGhlIGxhd3Mgb2YgbW9zdCBqdXJpc2RpY3Rpb25zIHRocm91Z2hvdXQgdGhlIHdvcmxkIGF1dG9tYXRpY2FsbHkgY29uZmVyCitleGNsdXNpdmUgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyAoZGVmaW5lZCBiZWxvdykgdXBvbiB0aGUgY3JlYXRvcgorYW5kIHN1YnNlcXVlbnQgb3duZXIocykgKGVhY2ggYW5kIGFsbCwgYW4gIm93bmVyIikgb2YgYW4gb3JpZ2luYWwgd29yayBvZgorYXV0aG9yc2hpcCBhbmQvb3IgYSBkYXRhYmFzZSAoZWFjaCwgYSAiV29yayIpLgorCitDZXJ0YWluIG93bmVycyB3aXNoIHRvIHBlcm1hbmVudGx5IHJlbGlucXVpc2ggdGhvc2UgcmlnaHRzIHRvIGEgV29yayBmb3IKK3RoZSBwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyB0byBhIGNvbW1vbnMgb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZAorc2NpZW50aWZpYyB3b3JrcyAoIkNvbW1vbnMiKSB0aGF0IHRoZSBwdWJsaWMgY2FuIHJlbGlhYmx5IGFuZCB3aXRob3V0IGZlYXIKK29mIGxhdGVyIGNsYWltcyBvZiBpbmZyaW5nZW1lbnQgYnVpbGQgdXBvbiwgbW9kaWZ5LCBpbmNvcnBvcmF0ZSBpbiBvdGhlcgord29ya3MsIHJldXNlIGFuZCByZWRpc3RyaWJ1dGUgYXMgZnJlZWx5IGFzIHBvc3NpYmxlIGluIGFueSBmb3JtIHdoYXRzb2V2ZXIKK2FuZCBmb3IgYW55IHB1cnBvc2VzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwgcHVycG9zZXMuCitUaGVzZSBvd25lcnMgbWF5IGNvbnRyaWJ1dGUgdG8gdGhlIENvbW1vbnMgdG8gcHJvbW90ZSB0aGUgaWRlYWwgb2YgYSBmcmVlCitjdWx0dXJlIGFuZCB0aGUgZnVydGhlciBwcm9kdWN0aW9uIG9mIGNyZWF0aXZlLCBjdWx0dXJhbCBhbmQgc2NpZW50aWZpYword29ya3MsIG9yIHRvIGdhaW4gcmVwdXRhdGlvbiBvciBncmVhdGVyIGRpc3RyaWJ1dGlvbiBmb3IgdGhlaXIgV29yayBpbgorcGFydCB0aHJvdWdoIHRoZSB1c2UgYW5kIGVmZm9ydHMgb2Ygb3RoZXJzLgorCitGb3IgdGhlc2UgYW5kL29yIG90aGVyIHB1cnBvc2VzIGFuZCBtb3RpdmF0aW9ucywgYW5kIHdpdGhvdXQgYW55CitleHBlY3RhdGlvbiBvZiBhZGRpdGlvbmFsIGNvbnNpZGVyYXRpb24gb3IgY29tcGVuc2F0aW9uLCB0aGUgcGVyc29uCithc3NvY2lhdGluZyBDQzAgd2l0aCBhIFdvcmsgKHRoZSAiQWZmaXJtZXIiKSwgdG8gdGhlIGV4dGVudCB0aGF0IGhlIG9yIHNoZQoraXMgYW4gb3duZXIgb2YgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yaywgdm9sdW50YXJpbHkKK2VsZWN0cyB0byBhcHBseSBDQzAgdG8gdGhlIFdvcmsgYW5kIHB1YmxpY2x5IGRpc3RyaWJ1dGUgdGhlIFdvcmsgdW5kZXIgaXRzCit0ZXJtcywgd2l0aCBrbm93bGVkZ2Ugb2YgaGlzIG9yIGhlciBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZQorV29yayBhbmQgdGhlIG1lYW5pbmcgYW5kIGludGVuZGVkIGxlZ2FsIGVmZmVjdCBvZiBDQzAgb24gdGhvc2UgcmlnaHRzLgorCisxLiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzLiBBIFdvcmsgbWFkZSBhdmFpbGFibGUgdW5kZXIgQ0MwIG1heSBiZQorcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgKCJDb3B5cmlnaHQgYW5kCitSZWxhdGVkIFJpZ2h0cyIpLiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluY2x1ZGUsIGJ1dCBhcmUgbm90CitsaW1pdGVkIHRvLCB0aGUgZm9sbG93aW5nOgorCisgIGkuIHRoZSByaWdodCB0byByZXByb2R1Y2UsIGFkYXB0LCBkaXN0cmlidXRlLCBwZXJmb3JtLCBkaXNwbGF5LAorICAgICBjb21tdW5pY2F0ZSwgYW5kIHRyYW5zbGF0ZSBhIFdvcms7CisgaWkuIG1vcmFsIHJpZ2h0cyByZXRhaW5lZCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGFuZC9vciBwZXJmb3JtZXIocyk7CitpaWkuIHB1YmxpY2l0eSBhbmQgcHJpdmFjeSByaWdodHMgcGVydGFpbmluZyB0byBhIHBlcnNvbidzIGltYWdlIG9yCisgICAgIGxpa2VuZXNzIGRlcGljdGVkIGluIGEgV29yazsKKyBpdi4gcmlnaHRzIHByb3RlY3RpbmcgYWdhaW5zdCB1bmZhaXIgY29tcGV0aXRpb24gaW4gcmVnYXJkcyB0byBhIFdvcmssCisgICAgIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIGluIHBhcmFncmFwaCA0KGEpLCBiZWxvdzsKKyAgdi4gcmlnaHRzIHByb3RlY3RpbmcgdGhlIGV4dHJhY3Rpb24sIGRpc3NlbWluYXRpb24sIHVzZSBhbmQgcmV1c2Ugb2YgZGF0YQorICAgICBpbiBhIFdvcms7CisgdmkuIGRhdGFiYXNlIHJpZ2h0cyAoc3VjaCBhcyB0aG9zZSBhcmlzaW5nIHVuZGVyIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZQorICAgICBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZiAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbAorICAgICBwcm90ZWN0aW9uIG9mIGRhdGFiYXNlcywgYW5kIHVuZGVyIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbgorICAgICB0aGVyZW9mLCBpbmNsdWRpbmcgYW55IGFtZW5kZWQgb3Igc3VjY2Vzc29yIHZlcnNpb24gb2Ygc3VjaAorICAgICBkaXJlY3RpdmUpOyBhbmQKK3ZpaS4gb3RoZXIgc2ltaWxhciwgZXF1aXZhbGVudCBvciBjb3JyZXNwb25kaW5nIHJpZ2h0cyB0aHJvdWdob3V0IHRoZQorICAgICB3b3JsZCBiYXNlZCBvbiBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHksIGFuZCBhbnkgbmF0aW9uYWwKKyAgICAgaW1wbGVtZW50YXRpb25zIHRoZXJlb2YuCisKKzIuIFdhaXZlci4gVG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnksIGJ1dCBub3QgaW4gY29udHJhdmVudGlvbgorb2YsIGFwcGxpY2FibGUgbGF3LCBBZmZpcm1lciBoZXJlYnkgb3ZlcnRseSwgZnVsbHksIHBlcm1hbmVudGx5LAoraXJyZXZvY2FibHkgYW5kIHVuY29uZGl0aW9uYWxseSB3YWl2ZXMsIGFiYW5kb25zLCBhbmQgc3VycmVuZGVycyBhbGwgb2YKK0FmZmlybWVyJ3MgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBhbmQgYXNzb2NpYXRlZCBjbGFpbXMgYW5kIGNhdXNlcworb2YgYWN0aW9uLCB3aGV0aGVyIG5vdyBrbm93biBvciB1bmtub3duIChpbmNsdWRpbmcgZXhpc3RpbmcgYXMgd2VsbCBhcworZnV0dXJlIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiksIGluIHRoZSBXb3JrIChpKSBpbiBhbGwgdGVycml0b3JpZXMKK3dvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0gZHVyYXRpb24gcHJvdmlkZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKK3RyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZSB0aW1lIGV4dGVuc2lvbnMpLCAoaWlpKSBpbiBhbnkgY3VycmVudCBvciBmdXR1cmUKK21lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIgb2YgY29waWVzLCBhbmQgKGl2KSBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwKK2luY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwKK3B1cnBvc2VzICh0aGUgIldhaXZlciIpLiBBZmZpcm1lciBtYWtlcyB0aGUgV2FpdmVyIGZvciB0aGUgYmVuZWZpdCBvZiBlYWNoCittZW1iZXIgb2YgdGhlIHB1YmxpYyBhdCBsYXJnZSBhbmQgdG8gdGhlIGRldHJpbWVudCBvZiBBZmZpcm1lcidzIGhlaXJzIGFuZAorc3VjY2Vzc29ycywgZnVsbHkgaW50ZW5kaW5nIHRoYXQgc3VjaCBXYWl2ZXIgc2hhbGwgbm90IGJlIHN1YmplY3QgdG8KK3Jldm9jYXRpb24sIHJlc2Npc3Npb24sIGNhbmNlbGxhdGlvbiwgdGVybWluYXRpb24sIG9yIGFueSBvdGhlciBsZWdhbCBvcgorZXF1aXRhYmxlIGFjdGlvbiB0byBkaXNydXB0IHRoZSBxdWlldCBlbmpveW1lbnQgb2YgdGhlIFdvcmsgYnkgdGhlIHB1YmxpYworYXMgY29udGVtcGxhdGVkIGJ5IEFmZmlybWVyJ3MgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4KKworMy4gUHVibGljIExpY2Vuc2UgRmFsbGJhY2suIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgV2FpdmVyIGZvciBhbnkgcmVhc29uCitiZSBqdWRnZWQgbGVnYWxseSBpbnZhbGlkIG9yIGluZWZmZWN0aXZlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGVuIHRoZQorV2FpdmVyIHNoYWxsIGJlIHByZXNlcnZlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIHRha2luZyBpbnRvCithY2NvdW50IEFmZmlybWVyJ3MgZXhwcmVzcyBTdGF0ZW1lbnQgb2YgUHVycG9zZS4gSW4gYWRkaXRpb24sIHRvIHRoZQorZXh0ZW50IHRoZSBXYWl2ZXIgaXMgc28ganVkZ2VkIEFmZmlybWVyIGhlcmVieSBncmFudHMgdG8gZWFjaCBhZmZlY3RlZAorcGVyc29uIGEgcm95YWx0eS1mcmVlLCBub24gdHJhbnNmZXJhYmxlLCBub24gc3VibGljZW5zYWJsZSwgbm9uIGV4Y2x1c2l2ZSwKK2lycmV2b2NhYmxlIGFuZCB1bmNvbmRpdGlvbmFsIGxpY2Vuc2UgdG8gZXhlcmNpc2UgQWZmaXJtZXIncyBDb3B5cmlnaHQgYW5kCitSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlCittYXhpbXVtIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZQordGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIKK29mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nIG9yIHByb21vdGlvbmFsIHB1cnBvc2VzICh0aGUKKyJMaWNlbnNlIikuIFRoZSBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgQ0MwIHdhcworYXBwbGllZCBieSBBZmZpcm1lciB0byB0aGUgV29yay4gU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBMaWNlbnNlIGZvciBhbnkKK3JlYXNvbiBiZSBqdWRnZWQgbGVnYWxseSBpbnZhbGlkIG9yIGluZWZmZWN0aXZlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBzdWNoCitwYXJ0aWFsIGludmFsaWRpdHkgb3IgaW5lZmZlY3RpdmVuZXNzIHNoYWxsIG5vdCBpbnZhbGlkYXRlIHRoZSByZW1haW5kZXIKK29mIHRoZSBMaWNlbnNlLCBhbmQgaW4gc3VjaCBjYXNlIEFmZmlybWVyIGhlcmVieSBhZmZpcm1zIHRoYXQgaGUgb3Igc2hlCit3aWxsIG5vdCAoaSkgZXhlcmNpc2UgYW55IG9mIGhpcyBvciBoZXIgcmVtYWluaW5nIENvcHlyaWdodCBhbmQgUmVsYXRlZAorUmlnaHRzIGluIHRoZSBXb3JrIG9yIChpaSkgYXNzZXJ0IGFueSBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mCithY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBpbiBlaXRoZXIgY2FzZSBjb250cmFyeSB0byBBZmZpcm1lcidzCitleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLgorCis0LiBMaW1pdGF0aW9ucyBhbmQgRGlzY2xhaW1lcnMuCisKKyBhLiBObyB0cmFkZW1hcmsgb3IgcGF0ZW50IHJpZ2h0cyBoZWxkIGJ5IEFmZmlybWVyIGFyZSB3YWl2ZWQsIGFiYW5kb25lZCwKKyAgICBzdXJyZW5kZXJlZCwgbGljZW5zZWQgb3Igb3RoZXJ3aXNlIGFmZmVjdGVkIGJ5IHRoaXMgZG9jdW1lbnQuCisgYi4gQWZmaXJtZXIgb2ZmZXJzIHRoZSBXb3JrIGFzLWlzIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgb3IKKyAgICB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGV4cHJlc3MsIGltcGxpZWQsCisgICAgc3RhdHV0b3J5IG9yIG90aGVyd2lzZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB3YXJyYW50aWVzIG9mCisgICAgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG5vbgorICAgIGluZnJpbmdlbWVudCwgb3IgdGhlIGFic2VuY2Ugb2YgbGF0ZW50IG9yIG90aGVyIGRlZmVjdHMsIGFjY3VyYWN5LCBvcgorICAgIHRoZSBwcmVzZW50IG9yIGFic2VuY2Ugb2YgZXJyb3JzLCB3aGV0aGVyIG9yIG5vdCBkaXNjb3ZlcmFibGUsIGFsbCB0bworICAgIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWlzc2libGUgdW5kZXIgYXBwbGljYWJsZSBsYXcuCisgYy4gQWZmaXJtZXIgZGlzY2xhaW1zIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhcmluZyByaWdodHMgb2Ygb3RoZXIgcGVyc29ucworICAgIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBXb3JrIG9yIGFueSB1c2UgdGhlcmVvZiwgaW5jbHVkaW5nIHdpdGhvdXQKKyAgICBsaW1pdGF0aW9uIGFueSBwZXJzb24ncyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrLgorICAgIEZ1cnRoZXIsIEFmZmlybWVyIGRpc2NsYWltcyByZXNwb25zaWJpbGl0eSBmb3Igb2J0YWluaW5nIGFueSBuZWNlc3NhcnkKKyAgICBjb25zZW50cywgcGVybWlzc2lvbnMgb3Igb3RoZXIgcmlnaHRzIHJlcXVpcmVkIGZvciBhbnkgdXNlIG9mIHRoZQorICAgIFdvcmsuCisgZC4gQWZmaXJtZXIgdW5kZXJzdGFuZHMgYW5kIGFja25vd2xlZGdlcyB0aGF0IENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEKKyAgICBwYXJ0eSB0byB0aGlzIGRvY3VtZW50IGFuZCBoYXMgbm8gZHV0eSBvciBvYmxpZ2F0aW9uIHdpdGggcmVzcGVjdCB0bworICAgIHRoaXMgQ0MwIG9yIHVzZSBvZiB0aGUgV29yay4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL01ha2VmaWxlIGIvZXhhbXBsZXMvTWFrZWZpbGUKaW5kZXggMTQwY2M0ZC4uMmU3ZjY4ZiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUKKysrIGIvZXhhbXBsZXMvTWFrZWZpbGUKQEAgLTMsMTIgKzMsMTIgQEAKIENDID0gZ2NjCiBDRkxBR1MgPSAtZyAtSS4uL2luY2x1ZGUgLUkuLi9zcmMgLVdhbGwgLVdleHRyYSAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzCiBMRkxBR1MgPSAtTC4uL2J1aWxkIC1sZ2l0MiAtbHoKLUFQUFMgPSBnZW5lcmFsIHNob3dpbmRleCBkaWZmIHJldi1saXN0IGNhdC1maWxlIHN0YXR1cworQVBQUyA9IGdlbmVyYWwgc2hvd2luZGV4IGRpZmYgcmV2LWxpc3QgY2F0LWZpbGUgc3RhdHVzIGxvZyByZXYtcGFyc2UgaW5pdCBibGFtZQogCiBhbGw6ICQoQVBQUykKIAogJSA6ICUuYwotCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkPCAkKExGTEFHUykKKwkkKENDKSAtbyAkQCBjb21tb24uYyAkKENGTEFHUykgJDwgJChMRkxBR1MpCiAKIGNsZWFuOgogCSQoUk0pICQoQVBQUykKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL1JFQURNRS5tZCBiL2V4YW1wbGVzL1JFQURNRS5tZAppbmRleCBmMmI2ZDdkLi43NjljNGIyIDEwMDY0NAotLS0gYS9leGFtcGxlcy9SRUFETUUubWQKKysrIGIvZXhhbXBsZXMvUkVBRE1FLm1kCkBAIC0xLDExICsxLDIyIEBACiBsaWJnaXQyIGV4YW1wbGVzCiA9PT09PT09PT09PT09PT09CiAKLVRoZXNlIGV4YW1wbGVzIGFyZSBtZWFudCBhcyB0aGluLCBlYXN5LXRvLXJlYWQgc25pcHBldHMgZm9yIERvY3VyaXVtCi0oaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9kb2N1cml1bSkgcmF0aGVyIHRoYW4gZnVsbC1ibG93bgotaW1wbGVtZW50YXRpb25zIG9mIEdpdCBjb21tYW5kcy4gIFRoZXkgYXJlIG5vdCB2ZXR0ZWQgYXMgY2FyZWZ1bGx5Ci1mb3IgYnVncywgZXJyb3IgaGFuZGxpbmcsIG9yIGNyb3NzLXBsYXRmb3JtIGNvbXBhdGliaWxpdHkgYXMgdGhlCi1yZXN0IG9mIHRoZSBjb2RlIGluIGxpYmdpdDIsIHNvIGNvcHkgd2l0aCBzb21lIGNhdXRpb24uCitUaGVzZSBleGFtcGxlcyBhcmUgYSBtaXh0dXJlIG9mIGJhc2ljIGVtdWxhdGlvbiBvZiBjb3JlIEdpdCBjb21tYW5kIGxpbmUKK2Z1bmN0aW9ucyBhbmQgc2ltcGxlIHNuaXBwZXRzIGRlbW9uc3RyYXRpbmcgbGliZ2l0MiBBUEkgdXNhZ2UgKGZvciB1c2UKK3dpdGggRG9jdXJpdW0pLiAgQXMgYSB3aG9sZSwgdGhleSBhcmUgbm90IHZldHRlZCBjYXJlZnVsbHkgZm9yIGJ1Z3MsIGVycm9yCitoYW5kbGluZywgYW5kIGNyb3NzLXBsYXRmb3JtIGNvbXBhdGliaWxpdHkgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSByZXN0CitvZiB0aGUgY29kZSBpbiBsaWJnaXQyLCBzbyBjb3B5IHdpdGggY2F1dGlvbi4KIAotRm9yIEhUTUwgdmVyc2lvbnMsIGNoZWNrICJFeGFtcGxlcyIgYXQgaHR0cDovL2xpYmdpdDIuZ2l0aHViLmNvbS9saWJnaXQyCitUaGF0IGJlaW5nIHNhaWQsIHlvdSBhcmUgd2VsY29tZSB0byBjb3B5IGNvZGUgZnJvbSB0aGVzZSBleGFtcGxlcyBhcworZGVzaXJlZCB3aGVuIHVzaW5nIGxpYmdpdDIuIFRoZXkgaGF2ZSBiZWVuIFtyZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbl1bY2MwXSwKK3NvIHRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gdGhlaXIgdXNlLgogCitbY2MwXTogQ09QWUlORworCitGb3IgYW5ub3RhdGVkIEhUTUwgdmVyc2lvbnMsIHNlZSB0aGUgIkV4YW1wbGVzIiBzZWN0aW9uIG9mOgorCisgICAgaHR0cDovL2xpYmdpdDIuZ2l0aHViLmNvbS9saWJnaXQyCisKK3N1Y2ggYXM6CisKKyAgICBodHRwOi8vbGliZ2l0Mi5naXRodWIuY29tL2xpYmdpdDIvZXgvSEVBRC9nZW5lcmFsLmh0bWwKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FkZC5jIGIvZXhhbXBsZXMvYWRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2NTk2YgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2FkZC5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogbGliZ2l0MiAiYWRkIiBleGFtcGxlIC0gc2hvd3MgaG93IHRvIG1vZGlmeSB0aGUgaW5kZXgKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK2VudW0gcHJpbnRfb3B0aW9ucyB7CisJU0tJUCA9IDEsCisJVkVSQk9TRSA9IDIsCisJVVBEQVRFID0gNCwKK307CisKK3N0cnVjdCBwcmludF9wYXlsb2FkIHsKKwllbnVtIHByaW50X29wdGlvbnMgb3B0aW9uczsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKK307CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBoZWxwZXJzICovCitzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKGludCAqb3B0aW9ucywgaW50ICpjb3VudCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cit2b2lkIGluaXRfYXJyYXkoZ2l0X3N0cmFycmF5ICphcnJheSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBwcmludF9tYXRjaGVkX2NiKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1hdGNoZWRfcGF0aHNwZWMsIHZvaWQgKnBheWxvYWQpOworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworCWdpdF9pbmRleF9tYXRjaGVkX3BhdGhfY2IgbWF0Y2hlZF9jYiA9IE5VTEw7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBOVUxMOworCWdpdF9pbmRleCAqaW5kZXg7CisJZ2l0X3N0cmFycmF5IGFycmF5ID0gezB9OworCWludCBvcHRpb25zID0gMCwgY291bnQgPSAwOworCXN0cnVjdCBwcmludF9wYXlsb2FkIHBheWxvYWQgPSB7MH07CisKKwlnaXRfdGhyZWFkc19pbml0KCk7CisKKwlwYXJzZV9vcHRzKCZvcHRpb25zLCAmY291bnQsIGFyZ2MsIGFyZ3YpOworCisJaW5pdF9hcnJheSgmYXJyYXksIGFyZ2MtY291bnQsIGFyZ3YrY291bnQpOworCisJY2hlY2tfbGcyKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8sICIuIiksICJObyBnaXQgcmVwb3NpdG9yeSIsIE5VTEwpOworCWNoZWNrX2xnMihnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pLCAiQ291bGQgbm90IG9wZW4gcmVwb3NpdG9yeSBpbmRleCIsIE5VTEwpOworCisJaWYgKG9wdGlvbnMmVkVSQk9TRSB8fCBvcHRpb25zJlNLSVApIHsKKwkJbWF0Y2hlZF9jYiA9ICZwcmludF9tYXRjaGVkX2NiOworCX0KKworCXBheWxvYWQub3B0aW9ucyA9IG9wdGlvbnM7CisJcGF5bG9hZC5yZXBvID0gcmVwbzsKKworCWlmIChvcHRpb25zJlVQREFURSkgeworCQlnaXRfaW5kZXhfdXBkYXRlX2FsbChpbmRleCwgJmFycmF5LCBtYXRjaGVkX2NiLCAmcGF5bG9hZCk7CisJfSBlbHNlIHsKKwkJZ2l0X2luZGV4X2FkZF9hbGwoaW5kZXgsICZhcnJheSwgMCwgbWF0Y2hlZF9jYiwgJnBheWxvYWQpOworCX0KKworCWdpdF9pbmRleF93cml0ZShpbmRleCk7CisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisKKwlnaXRfdGhyZWFkc19zaHV0ZG93bigpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwcmludF9tYXRjaGVkX2NiKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1hdGNoZWRfcGF0aHNwZWMsIHZvaWQgKnBheWxvYWQpCit7CisJc3RydWN0IHByaW50X3BheWxvYWQgcCA9ICooc3RydWN0IHByaW50X3BheWxvYWQqKShwYXlsb2FkKTsKKwlpbnQgcmV0OworCWdpdF9zdGF0dXNfdCBzdGF0dXM7CisJKHZvaWQpbWF0Y2hlZF9wYXRoc3BlYzsKKworCWlmIChnaXRfc3RhdHVzX2ZpbGUoJnN0YXR1cywgcC5yZXBvLCBwYXRoKSkgeworCQlyZXR1cm4gLTE7IC8vYWJvcnQKKwl9CisKKwlpZiAoc3RhdHVzICYgR0lUX1NUQVRVU19XVF9NT0RJRklFRCB8fAorCSAgICAgICAgIHN0YXR1cyAmIEdJVF9TVEFUVVNfV1RfTkVXKSB7CisJCXByaW50ZigiYWRkICclcydcbiIsIHBhdGgpOworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IDE7CisJfQorCisJaWYocC5vcHRpb25zICYgU0tJUCkgeworCQlyZXQgPSAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaW5pdF9hcnJheShnaXRfc3RyYXJyYXkgKmFycmF5LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlhcnJheS0+Y291bnQgPSBhcmdjOworCWFycmF5LT5zdHJpbmdzID0gbWFsbG9jKHNpemVvZihjaGFyKikgKiBhcnJheS0+Y291bnQpOworCWFzc2VydChhcnJheS0+c3RyaW5ncyE9TlVMTCk7CisKKwlmb3IoaT0wOyBpPGFycmF5LT5jb3VudDsgaSsrKSB7CisJCWFycmF5LT5zdHJpbmdzW2ldPWFyZ3ZbaV07CisJfQorCisJcmV0dXJuOworfQorCit2b2lkIHByaW50X3VzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogYWRkIFtvcHRpb25zXSBbLS1dIGZpbGUtc3BlYyBbZmlsZS1zcGVjXSBbLi4uXVxuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LW4sIC0tZHJ5LXJ1biAgICBkcnkgcnVuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LXYsIC0tdmVyYm9zZSAgICBiZSB2ZXJib3NlXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LXUsIC0tdXBkYXRlICAgICB1cGRhdGUgdHJhY2tlZCBmaWxlc1xuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhpbnQgKm9wdGlvbnMsIGludCAqY291bnQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisJCWlmIChhcmd2W2ldWzBdICE9ICctJykgeworCQkJYnJlYWs7CisJCX0KKwkJZWxzZSBpZighc3RyY21wKGFyZ3ZbaV0sICItLXZlcmJvc2UiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICItdiIpKSB7CisJCQkqb3B0aW9ucyB8PSBWRVJCT1NFOworCQl9CisJCWVsc2UgaWYoIXN0cmNtcChhcmd2W2ldLCAiLS1kcnktcnVuIikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLW4iKSkgeworCQkJKm9wdGlvbnMgfD0gU0tJUDsKKwkJfQorCQllbHNlIGlmKCFzdHJjbXAoYXJndltpXSwgIi0tdXBkYXRlIikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLXUiKSkgeworCQkJKm9wdGlvbnMgfD0gVVBEQVRFOworCQl9CisJCWVsc2UgaWYoIXN0cmNtcChhcmd2W2ldLCAiLWgiKSkgeworCQkJcHJpbnRfdXNhZ2UoKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwkJZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIG9wdGlvbiAlcy5cbiIsIGFyZ3ZbaV0pOworCQkJcHJpbnRfdXNhZ2UoKTsKKwkJfQorCX0KKworCWlmIChhcmdjPD1pKQorCQlwcmludF91c2FnZSgpOworCisJKmNvdW50ID0gaTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2JsYW1lLmMgYi9leGFtcGxlcy9ibGFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzEwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9ibGFtZS5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogbGliZ2l0MiAiYmxhbWUiIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gdXNlIHRoZSBibGFtZSBBUEkKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qKgorICogVGhpcyBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgdG8gaW52b2tlIHRoZSBsaWJnaXQyIGJsYW1lIEFQSSB0byByb3VnaGx5CisgKiBzaW11bGF0ZSB0aGUgb3V0cHV0IG9mIGBnaXQgYmxhbWVgIGFuZCBhIGZldyBvZiBpdHMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAqLworCitzdHJ1Y3Qgb3B0cyB7CisJY2hhciAqcGF0aDsKKwljaGFyICpjb21taXRzcGVjOworCWludCBDOworCWludCBNOworCWludCBzdGFydF9saW5lOworCWludCBlbmRfbGluZTsKK307CitzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKHN0cnVjdCBvcHRzICpvLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgaSwgbGluZSwgYnJlYWtfb25fbnVsbF9odW5rOworCWNoYXIgc3BlY1sxMDI0XSA9IHswfTsKKwlzdHJ1Y3Qgb3B0cyBvID0gezB9OworCWNvbnN0IGNoYXIgKnJhd2RhdGE7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBOVUxMOworCWdpdF9yZXZzcGVjIHJldnNwZWMgPSB7MH07CisJZ2l0X2JsYW1lX29wdGlvbnMgYmxhbWVvcHRzID0gR0lUX0JMQU1FX09QVElPTlNfSU5JVDsKKwlnaXRfYmxhbWUgKmJsYW1lID0gTlVMTDsKKwlnaXRfYmxvYiAqYmxvYjsKKwlnaXRfb2JqZWN0ICpvYmo7CisKKwlnaXRfdGhyZWFkc19pbml0KCk7CisKKwlwYXJzZV9vcHRzKCZvLCBhcmdjLCBhcmd2KTsKKwlpZiAoby5NKSBibGFtZW9wdHMuZmxhZ3MgfD0gR0lUX0JMQU1FX1RSQUNLX0NPUElFU19TQU1FX0NPTU1JVF9NT1ZFUzsKKwlpZiAoby5DKSBibGFtZW9wdHMuZmxhZ3MgfD0gR0lUX0JMQU1FX1RSQUNLX0NPUElFU19TQU1FX0NPTU1JVF9DT1BJRVM7CisKKwkvKiogT3BlbiB0aGUgcmVwb3NpdG9yeS4gKi8KKwljaGVja19sZzIoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnJlcG8sICIuIiwgMCwgTlVMTCksICJDb3VsZG4ndCBvcGVuIHJlcG9zaXRvcnkiLCBOVUxMKTsKKworCS8qKgorCSAqIFRoZSBjb21taXQgcmFuZ2UgY29tZXMgaW4gImNvbW1pdGlzaCIgZm9ybS4gVXNlIHRoZSByZXYtcGFyc2UgQVBJIHRvCisJICogbmFpbCBkb3duIHRoZSBlbmQgcG9pbnRzLgorCSAqLworCWlmIChvLmNvbW1pdHNwZWMpIHsKKwkJY2hlY2tfbGcyKGdpdF9yZXZwYXJzZSgmcmV2c3BlYywgcmVwbywgby5jb21taXRzcGVjKSwgIkNvdWxkbid0IHBhcnNlIGNvbW1pdCBzcGVjIiwgTlVMTCk7CisJCWlmIChyZXZzcGVjLmZsYWdzICYgR0lUX1JFVlBBUlNFX1NJTkdMRSkgeworCQkJZ2l0X29pZF9jcHkoJmJsYW1lb3B0cy5uZXdlc3RfY29tbWl0LCBnaXRfb2JqZWN0X2lkKHJldnNwZWMuZnJvbSkpOworCQkJZ2l0X29iamVjdF9mcmVlKHJldnNwZWMuZnJvbSk7CisJCX0gZWxzZSB7CisJCQlnaXRfb2lkX2NweSgmYmxhbWVvcHRzLm9sZGVzdF9jb21taXQsIGdpdF9vYmplY3RfaWQocmV2c3BlYy5mcm9tKSk7CisJCQlnaXRfb2lkX2NweSgmYmxhbWVvcHRzLm5ld2VzdF9jb21taXQsIGdpdF9vYmplY3RfaWQocmV2c3BlYy50bykpOworCQkJZ2l0X29iamVjdF9mcmVlKHJldnNwZWMuZnJvbSk7CisJCQlnaXRfb2JqZWN0X2ZyZWUocmV2c3BlYy50byk7CisJCX0KKwl9CisKKwkvKiogUnVuIHRoZSBibGFtZS4gKi8KKwljaGVja19sZzIoZ2l0X2JsYW1lX2ZpbGUoJmJsYW1lLCByZXBvLCBvLnBhdGgsICZibGFtZW9wdHMpLCAiQmxhbWUgZXJyb3IiLCBOVUxMKTsKKworCS8qKgorCSAqIEdldCB0aGUgcmF3IGRhdGEgaW5zaWRlIHRoZSBibG9iIGZvciBvdXRwdXQuIFdlIHVzZSB0aGUKKwkgKiBgY29tbWl0aXNoOnBhdGgvdG8vZmlsZS50eHRgIGZvcm1hdCB0byBmaW5kIGl0LgorCSAqLworCWlmIChnaXRfb2lkX2lzemVybygmYmxhbWVvcHRzLm5ld2VzdF9jb21taXQpKQorCQlzdHJjcHkoc3BlYywgIkhFQUQiKTsKKwllbHNlCisJCWdpdF9vaWRfdG9zdHIoc3BlYywgc2l6ZW9mKHNwZWMpLCAmYmxhbWVvcHRzLm5ld2VzdF9jb21taXQpOworCXN0cmNhdChzcGVjLCAiOiIpOworCXN0cmNhdChzcGVjLCBvLnBhdGgpOworCisJY2hlY2tfbGcyKGdpdF9yZXZwYXJzZV9zaW5nbGUoJm9iaiwgcmVwbywgc3BlYyksICJPYmplY3QgbG9va3VwIGVycm9yIiwgTlVMTCk7CisJY2hlY2tfbGcyKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgcmVwbywgZ2l0X29iamVjdF9pZChvYmopKSwgIkJsb2IgbG9va3VwIGVycm9yIiwgTlVMTCk7CisJZ2l0X29iamVjdF9mcmVlKG9iaik7CisKKwlyYXdkYXRhID0gZ2l0X2Jsb2JfcmF3Y29udGVudChibG9iKTsKKworCS8qKiBQcm9kdWNlIHRoZSBvdXRwdXQuICovCisJbGluZSA9IDE7CisJaSA9IDA7CisJYnJlYWtfb25fbnVsbF9odW5rID0gMDsKKwl3aGlsZSAoaSA8IGdpdF9ibG9iX3Jhd3NpemUoYmxvYikpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hyKHJhd2RhdGEraSwgJ1xuJyk7CisJCWNoYXIgb2lkWzEwXSA9IHswfTsKKwkJY29uc3QgZ2l0X2JsYW1lX2h1bmsgKmh1bmsgPSBnaXRfYmxhbWVfZ2V0X2h1bmtfYnlsaW5lKGJsYW1lLCBsaW5lKTsKKworCQlpZiAoYnJlYWtfb25fbnVsbF9odW5rICYmICFodW5rKSBicmVhazsKKworCQlpZiAoaHVuaykgeworCQkJYnJlYWtfb25fbnVsbF9odW5rID0gMTsKKwkJCWNoYXIgc2lnWzEyOF0gPSB7MH07CisKKwkJCWdpdF9vaWRfdG9zdHIob2lkLCAxMCwgJmh1bmstPmZpbmFsX2NvbW1pdF9pZCk7CisJCQlzbnByaW50ZihzaWcsIDMwLCAiJXMgPCVzPiIsIGh1bmstPmZpbmFsX3NpZ25hdHVyZS0+bmFtZSwgaHVuay0+ZmluYWxfc2lnbmF0dXJlLT5lbWFpbCk7CisKKwkJCXByaW50ZigiJXMgKCAlLTMwcyAlM2QpICUuKnNcbiIsCisJCQkJCW9pZCwKKwkJCQkJc2lnLAorCQkJCQlsaW5lLAorCQkJCQkoaW50KShlb2wtcmF3ZGF0YS1pKSwKKwkJCQkJcmF3ZGF0YStpKTsKKwkJfQorCisJCWkgPSAoaW50KShlb2wgLSByYXdkYXRhICsgMSk7CisJCWxpbmUrKzsKKwl9CisKKwkvKiogQ2xlYW51cC4gKi8KKwlnaXRfYmxvYl9mcmVlKGJsb2IpOworCWdpdF9ibGFtZV9mcmVlKGJsYW1lKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworCisJZ2l0X3RocmVhZHNfc2h1dGRvd24oKTsKKworCXJldHVybiAwOworfQorCisvKiogVGVsbCB0aGUgdXNlciBob3cgdG8gbWFrZSB0aGlzIHRoaW5nIHdvcmsuICovCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAobXNnICYmIGFyZykKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG1zZywgYXJnKTsKKwllbHNlIGlmIChtc2cpCisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogYmxhbWUgW29wdGlvbnNdIFs8Y29tbWl0IHJhbmdlPl0gPHBhdGg+XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJZnByaW50ZihzdGRlcnIsICIgICA8Y29tbWl0IHJhbmdlPiAgICAgIGV4YW1wbGU6IGBIRUFEfjEwLi5IRUFEYCwgb3IgYDEyMzRhYmNkYFxuIik7CisJZnByaW50ZihzdGRlcnIsICIgICAtTCA8bixtPiAgICAgICAgICAgIHByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4tbSwgY291bnRpbmcgZnJvbSAxXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgIC1NICAgICAgICAgICAgICAgICAgZmluZCBsaW5lIG1vdmVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgIC1DICAgICAgICAgICAgICAgICAgZmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlc1xuIik7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCWV4aXQoMSk7Cit9CisKKy8qKiBQYXJzZSB0aGUgYXJndW1lbnRzLiAqLworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhzdHJ1Y3Qgb3B0cyAqbywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgaTsKKwljaGFyICpiYXJlX2FyZ3NbM10gPSB7MH07CisKKwlpZiAoYXJnYyA8IDIpIHVzYWdlKE5VTEwsIE5VTEwpOworCisJZm9yIChpPTE7IGk8YXJnYzsgaSsrKSB7CisJCWNoYXIgKmEgPSBhcmd2W2ldOworCisJCWlmIChhWzBdICE9ICctJykgeworCQkJaW50IGk9MDsKKwkJCXdoaWxlIChiYXJlX2FyZ3NbaV0gJiYgaSA8IDMpICsraTsKKwkJCWlmIChpID49IDMpCisJCQkJdXNhZ2UoIkludmFsaWQgYXJndW1lbnQgc2V0IiwgTlVMTCk7CisJCQliYXJlX2FyZ3NbaV0gPSBhOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tIikpCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYSwgIi1NIikpCisJCQlvLT5NID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYSwgIi1DIikpCisJCQlvLT5DID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYSwgIi1MIikpIHsKKwkJCWkrKzsgYSA9IGFyZ3ZbaV07CisJCQlpZiAoaSA+PSBhcmdjKSBmYXRhbCgiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gLUwiLCBOVUxMKTsKKwkJCWNoZWNrX2xnMihzc2NhbmYoYSwgIiVkLCVkIiwgJm8tPnN0YXJ0X2xpbmUsICZvLT5lbmRfbGluZSktMiwgIi1MIGZvcm1hdCBlcnJvciIsIE5VTEwpOworCQl9CisJCWVsc2UgeworCQkJLyogY29tbWl0IHJhbmdlICovCisJCQlpZiAoby0+Y29tbWl0c3BlYykgZmF0YWwoIk9ubHkgb25lIGNvbW1pdCBzcGVjIGFsbG93ZWQiLCBOVUxMKTsKKwkJCW8tPmNvbW1pdHNwZWMgPSBhOworCQl9CisJfQorCisJLyogSGFuZGxlIHRoZSBiYXJlIGFyZ3VtZW50cyAqLworCWlmICghYmFyZV9hcmdzWzBdKSB1c2FnZSgiUGxlYXNlIHNwZWNpZnkgYSBwYXRoIiwgTlVMTCk7CisJby0+cGF0aCA9IGJhcmVfYXJnc1swXTsKKwlpZiAoYmFyZV9hcmdzWzFdKSB7CisJCS8qIDxjb21taXRzcGVjPiA8cGF0aD4gKi8KKwkJby0+cGF0aCA9IGJhcmVfYXJnc1sxXTsKKwkJby0+Y29tbWl0c3BlYyA9IGJhcmVfYXJnc1swXTsKKwl9CisJaWYgKGJhcmVfYXJnc1syXSkgeworCQkvKiA8b2xkY29tbWl0PiA8bmV3Y29tbWl0PiA8cGF0aD4gKi8KKwkJY2hhciBzcGVjWzEyOF0gPSB7MH07CisJCW8tPnBhdGggPSBiYXJlX2FyZ3NbMl07CisJCXNwcmludGYoc3BlYywgIiVzLi4lcyIsIGJhcmVfYXJnc1swXSwgYmFyZV9hcmdzWzFdKTsKKwkJby0+Y29tbWl0c3BlYyA9IHNwZWM7CisJfQorfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY2F0LWZpbGUuYyBiL2V4YW1wbGVzL2NhdC1maWxlLmMKaW5kZXggZWJiNmNiMC4uZmE2YWRkMCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvY2F0LWZpbGUuYworKysgYi9leGFtcGxlcy9jYXQtZmlsZS5jCkBAIC0xLDM3ICsxLDE4IEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxnaXQyLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisvKgorICogbGliZ2l0MiAiY2F0LWZpbGUiIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gcHJpbnQgZGF0YSBmcm9tIHRoZSBPREIKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLwogCi1zdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbzsKLQotc3RhdGljIHZvaWQgY2hlY2soaW50IGVycm9yLCBjb25zdCBjaGFyICptZXNzYWdlKQotewotCWlmIChlcnJvcikgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzICglZClcbiIsIG1lc3NhZ2UsIGVycm9yKTsKLQkJZXhpdCgxKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmFyZykKLXsKLQlpZiAobWVzc2FnZSAmJiBhcmcpCi0JCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBtZXNzYWdlLCBhcmcpOwotCWVsc2UgaWYgKG1lc3NhZ2UpCi0JCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1lc3NhZ2UpOwotCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IGNhdC1maWxlICgtdCB8IC1zIHwgLWUgfCAtcCkgWzxvcHRpb25zPl0gPG9iamVjdD5cbiIpOwotCWV4aXQoMSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfc3RyX3BhcmFtKAotCWNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqKnZhbCkKLXsKLQlzaXplX3QgbGVuID0gc3RybGVuKHBhdHRlcm4pOwotCWlmIChzdHJuY21wKGFyZywgcGF0dGVybiwgbGVuKSkKLQkJcmV0dXJuIDA7Ci0JKnZhbCA9IChjb25zdCBjaGFyICopKGFyZyArIGxlbik7Ci0JcmV0dXJuIDE7Ci19CisjaW5jbHVkZSAiY29tbW9uLmgiCiAKIHN0YXRpYyB2b2lkIHByaW50X3NpZ25hdHVyZShjb25zdCBjaGFyICpoZWFkZXIsIGNvbnN0IGdpdF9zaWduYXR1cmUgKnNpZykKIHsKQEAgLTU3LDEyICszOCwxNCBAQAogCQkgICBzaWduLCBob3VycywgbWludXRlcyk7CiB9CiAKKy8qKiBQcmludGluZyBvdXQgYSBibG9iIGlzIHNpbXBsZSwgZ2V0IHRoZSBjb250ZW50cyBhbmQgcHJpbnQgKi8KIHN0YXRpYyB2b2lkIHNob3dfYmxvYihjb25zdCBnaXRfYmxvYiAqYmxvYikKIHsKIAkvKiA/IERvZXMgdGhpcyBuZWVkIGNybGYgZmlsdGVyaW5nPyAqLwogCWZ3cml0ZShnaXRfYmxvYl9yYXdjb250ZW50KGJsb2IpLCBnaXRfYmxvYl9yYXdzaXplKGJsb2IpLCAxLCBzdGRvdXQpOwogfQogCisvKiogU2hvdyBlYWNoIGVudHJ5IHdpdGggaXRzIHR5cGUsIGlkIGFuZCBhdHRyaWJ1dGVzICovCiBzdGF0aWMgdm9pZCBzaG93X3RyZWUoY29uc3QgZ2l0X3RyZWUgKnRyZWUpCiB7CiAJc2l6ZV90IGksIG1heF9pID0gKGludClnaXRfdHJlZV9lbnRyeWNvdW50KHRyZWUpOwpAQCAtODEsNiArNjQsOSBAQAogCX0KIH0KIAorLyoqCisgKiBDb21taXRzIGFuZCB0YWdzIGhhdmUgYSBmZXcgaW50ZXJlc3RpbmcgZmllbGRzIGluIHRoZWlyIGhlYWRlci4KKyAqLwogc3RhdGljIHZvaWQgc2hvd19jb21taXQoY29uc3QgZ2l0X2NvbW1pdCAqY29tbWl0KQogewogCXVuc2lnbmVkIGludCBpLCBtYXhfaTsKQEAgLTEyMyw1MyArMTA5LDM0IEBACiAJU0hPV19QUkVUVFkgPSA0CiB9OwogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3Igb3B0aW9uLXBhcnNpbmcgaGVscGVyICovCitzdHJ1Y3Qgb3B0cyB7CisJY29uc3QgY2hhciAqZGlyOworCWNvbnN0IGNoYXIgKnJldjsKKwlpbnQgYWN0aW9uOworCWludCB2ZXJib3NlOworfTsKK3N0YXRpYyB2b2lkIHBhcnNlX29wdHMoc3RydWN0IG9wdHMgKm8sIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCisKKy8qKiBFbnRyeSBwb2ludCBmb3IgdGhpcyBjb21tYW5kICovCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCWNvbnN0IGNoYXIgKmRpciA9ICIuIiwgKnJldiA9IE5VTEw7Ci0JaW50IGksIGFjdGlvbiA9IDAsIHZlcmJvc2UgPSAwOworCWdpdF9yZXBvc2l0b3J5ICpyZXBvOworCXN0cnVjdCBvcHRzIG8gPSB7ICIuIiwgTlVMTCwgMCwgMCB9OwogCWdpdF9vYmplY3QgKm9iaiA9IE5VTEw7CiAJY2hhciBvaWRzdHJbR0lUX09JRF9IRVhTWiArIDFdOwogCiAJZ2l0X3RocmVhZHNfaW5pdCgpOwogCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7ICsraSkgewotCQljaGFyICphID0gYXJndltpXTsKKwlwYXJzZV9vcHRzKCZvLCBhcmdjLCBhcmd2KTsKIAotCQlpZiAoYVswXSAhPSAnLScpIHsKLQkJCWlmIChyZXYgIT0gTlVMTCkKLQkJCQl1c2FnZSgiT25seSBvbmUgcmV2IHNob3VsZCBiZSBwcm92aWRlZCIsIE5VTEwpOwotCQkJZWxzZQotCQkJCXJldiA9IGE7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXQiKSkKLQkJCWFjdGlvbiA9IFNIT1dfVFlQRTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXMiKSkKLQkJCWFjdGlvbiA9IFNIT1dfU0laRTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLWUiKSkKLQkJCWFjdGlvbiA9IFNIT1dfTk9ORTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXAiKSkKLQkJCWFjdGlvbiA9IFNIT1dfUFJFVFRZOwotCQllbHNlIGlmICghc3RyY21wKGEsICItcSIpKQotCQkJdmVyYm9zZSA9IDA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi12IikpCi0JCQl2ZXJib3NlID0gMTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1oZWxwIikgfHwgIXN0cmNtcChhLCAiLWgiKSkKLQkJCXVzYWdlKE5VTEwsIE5VTEwpOwotCQllbHNlIGlmICghY2hlY2tfc3RyX3BhcmFtKGEsICItLWdpdC1kaXI9IiwgJmRpcikpCi0JCQl1c2FnZSgiVW5rbm93biBvcHRpb24iLCBhKTsKLQl9CisJY2hlY2tfbGcyKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KCZyZXBvLCBvLmRpciwgMCwgTlVMTCksCisJCQkiQ291bGQgbm90IG9wZW4gcmVwb3NpdG9yeSIsIE5VTEwpOworCWNoZWNrX2xnMihnaXRfcmV2cGFyc2Vfc2luZ2xlKCZvYmosIHJlcG8sIG8ucmV2KSwKKwkJCSJDb3VsZCBub3QgcmVzb2x2ZSIsIG8ucmV2KTsKIAotCWlmICghYWN0aW9uIHx8ICFyZXYpCi0JCXVzYWdlKE5VTEwsIE5VTEwpOwotCi0JY2hlY2soZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJmdfcmVwbywgZGlyLCAwLCBOVUxMKSwKLQkJIkNvdWxkIG5vdCBvcGVuIHJlcG9zaXRvcnkiKTsKLQotCWlmIChnaXRfcmV2cGFyc2Vfc2luZ2xlKCZvYmosIGdfcmVwbywgcmV2KSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgcmVzb2x2ZSAnJXMnXG4iLCByZXYpOwotCQlleGl0KDEpOwotCX0KLQlpZiAodmVyYm9zZSkgeworCWlmIChvLnZlcmJvc2UpIHsKIAkJY2hhciBvaWRzdHJbR0lUX09JRF9IRVhTWiArIDFdOwogCQlnaXRfb2lkX3Rvc3RyKG9pZHN0ciwgc2l6ZW9mKG9pZHN0ciksIGdpdF9vYmplY3RfaWQob2JqKSk7CiAKQEAgLTE3Nyw3ICsxNDQsNyBAQAogCQkJZ2l0X29iamVjdF90eXBlMnN0cmluZyhnaXRfb2JqZWN0X3R5cGUob2JqKSksIG9pZHN0cik7CiAJfQogCi0Jc3dpdGNoIChhY3Rpb24pIHsKKwlzd2l0Y2ggKG8uYWN0aW9uKSB7CiAJY2FzZSBTSE9XX1RZUEU6CiAJCXByaW50ZigiJXNcbiIsIGdpdF9vYmplY3RfdHlwZTJzdHJpbmcoZ2l0X29iamVjdF90eXBlKG9iaikpKTsKIAkJYnJlYWs7CkBAIC0xODUsOSArMTUyLDkgQEAKIAkJZ2l0X29kYiAqb2RiOwogCQlnaXRfb2RiX29iamVjdCAqb2Rib2JqOwogCi0JCWNoZWNrKGdpdF9yZXBvc2l0b3J5X29kYigmb2RiLCBnX3JlcG8pLCAiQ291bGQgbm90IG9wZW4gT0RCIik7Ci0JCWNoZWNrKGdpdF9vZGJfcmVhZCgmb2Rib2JqLCBvZGIsIGdpdF9vYmplY3RfaWQob2JqKSksCi0JCQkiQ291bGQgbm90IGZpbmQgb2JqIik7CisJCWNoZWNrX2xnMihnaXRfcmVwb3NpdG9yeV9vZGIoJm9kYiwgcmVwbyksICJDb3VsZCBub3Qgb3BlbiBPREIiLCBOVUxMKTsKKwkJY2hlY2tfbGcyKGdpdF9vZGJfcmVhZCgmb2Rib2JqLCBvZGIsIGdpdF9vYmplY3RfaWQob2JqKSksCisJCQkiQ291bGQgbm90IGZpbmQgb2JqIiwgTlVMTCk7CiAKIAkJcHJpbnRmKCIlbGRcbiIsIChsb25nKWdpdF9vZGJfb2JqZWN0X3NpemUob2Rib2JqKSk7CiAKQEAgLTIyMSw5ICsxODgsNTkgQEAKIAl9CiAKIAlnaXRfb2JqZWN0X2ZyZWUob2JqKTsKLQlnaXRfcmVwb3NpdG9yeV9mcmVlKGdfcmVwbyk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKIAogCWdpdF90aHJlYWRzX3NodXRkb3duKCk7CiAKIAlyZXR1cm4gMDsKIH0KKworLyoqIFByaW50IG91dCB1c2FnZSBpbmZvcm1hdGlvbiAqLworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqYXJnKQoreworCWlmIChtZXNzYWdlICYmIGFyZykKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG1lc3NhZ2UsIGFyZyk7CisJZWxzZSBpZiAobWVzc2FnZSkKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CisJZnByaW50ZihzdGRlcnIsCisJCQkidXNhZ2U6IGNhdC1maWxlICgtdCB8IC1zIHwgLWUgfCAtcCkgWy12XSBbLXFdICIKKwkJCSJbLWh8LS1oZWxwXSBbLS1naXQtZGlyPTxkaXI+XSA8b2JqZWN0PlxuIik7CisJZXhpdCgxKTsKK30KKworLyoqIFBhcnNlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0YWtlbiBmcm9tIGdpdCAqLworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhzdHJ1Y3Qgb3B0cyAqbywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgYXJnc19pbmZvIGFyZ3MgPSBBUkdTX0lORk9fSU5JVDsKKworCWZvciAoYXJncy5wb3MgPSAxOyBhcmdzLnBvcyA8IGFyZ2M7ICsrYXJncy5wb3MpIHsKKwkJY2hhciAqYSA9IGFyZ3ZbYXJncy5wb3NdOworCisJCWlmIChhWzBdICE9ICctJykgeworCQkJaWYgKG8tPnJldiAhPSBOVUxMKQorCQkJCXVzYWdlKCJPbmx5IG9uZSByZXYgc2hvdWxkIGJlIHByb3ZpZGVkIiwgTlVMTCk7CisJCQllbHNlCisJCQkJby0+cmV2ID0gYTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKGEsICItdCIpKQorCQkJby0+YWN0aW9uID0gU0hPV19UWVBFOworCQllbHNlIGlmICghc3RyY21wKGEsICItcyIpKQorCQkJby0+YWN0aW9uID0gU0hPV19TSVpFOworCQllbHNlIGlmICghc3RyY21wKGEsICItZSIpKQorCQkJby0+YWN0aW9uID0gU0hPV19OT05FOworCQllbHNlIGlmICghc3RyY21wKGEsICItcCIpKQorCQkJby0+YWN0aW9uID0gU0hPV19QUkVUVFk7CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi1xIikpCisJCQlvLT52ZXJib3NlID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXYiKSkKKwkJCW8tPnZlcmJvc2UgPSAxOworCQllbHNlIGlmICghc3RyY21wKGEsICItLWhlbHAiKSB8fCAhc3RyY21wKGEsICItaCIpKQorCQkJdXNhZ2UoTlVMTCwgTlVMTCk7CisJCWVsc2UgaWYgKCFtYXRjaF9zdHJfYXJnKCZvLT5kaXIsICZhcmdzLCAiLS1naXQtZGlyIikpCisJCQl1c2FnZSgiVW5rbm93biBvcHRpb24iLCBhKTsKKwl9CisKKwlpZiAoIW8tPmFjdGlvbiB8fCAhby0+cmV2KQorCQl1c2FnZShOVUxMLCBOVUxMKTsKKworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvY29tbW9uLmMgYi9leGFtcGxlcy9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmRiY2NmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvY29tbW9uLmMKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBVdGlsaXRpZXMgbGlicmFyeSBmb3IgbGliZ2l0MiBleGFtcGxlcworICoKKyAqIFdyaXR0ZW4gYnkgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzCisgKgorICogVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBhdXRob3IocykgaGF2ZSBkZWRpY2F0ZWQgYWxsIGNvcHlyaWdodAorICogYW5kIHJlbGF0ZWQgYW5kIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGlzIHNvZnR3YXJlIHRvIHRoZSBwdWJsaWMgZG9tYWluCisgKiB3b3JsZHdpZGUuIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgd2l0aG91dCBhbnkgd2FycmFudHkuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgQ0MwIFB1YmxpYyBEb21haW4gRGVkaWNhdGlvbiBhbG9uZworICogd2l0aCB0aGlzIHNvZnR3YXJlLiBJZiBub3QsIHNlZQorICogPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8+LgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKwordm9pZCBjaGVja19sZzIoaW50IGVycm9yLCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpleHRyYSkKK3sKKwljb25zdCBnaXRfZXJyb3IgKmxnMmVycjsKKwljb25zdCBjaGFyICpsZzJtc2cgPSAiIiwgKmxnMnNwYWNlciA9ICIiOworCisJaWYgKCFlcnJvcikKKwkJcmV0dXJuOworCisJaWYgKChsZzJlcnIgPSBnaXRlcnJfbGFzdCgpKSAhPSBOVUxMICYmIGxnMmVyci0+bWVzc2FnZSAhPSBOVUxMKSB7CisJCWxnMm1zZyA9IGxnMmVyci0+bWVzc2FnZTsKKwkJbGcyc3BhY2VyID0gIiAtICI7CisJfQorCisJaWYgKGV4dHJhKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzICclcycgWyVkXSVzJXNcbiIsCisJCQltZXNzYWdlLCBleHRyYSwgZXJyb3IsIGxnMnNwYWNlciwgbGcybXNnKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiJXMgWyVkXSVzJXNcbiIsCisJCQltZXNzYWdlLCBlcnJvciwgbGcyc3BhY2VyLCBsZzJtc2cpOworCisJZXhpdCgxKTsKK30KKwordm9pZCBmYXRhbChjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpleHRyYSkKK3sKKwlpZiAoZXh0cmEpCisJCWZwcmludGYoc3RkZXJyLCAiJXMgJXNcbiIsIG1lc3NhZ2UsIGV4dHJhKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1lc3NhZ2UpOworCisJZXhpdCgxKTsKK30KKworc2l6ZV90IGlzX3ByZWZpeGVkKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGZ4KQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4ocGZ4KTsKKwlyZXR1cm4gc3RybmNtcChzdHIsIHBmeCwgbGVuKSA/IDAgOiBsZW47Cit9CisKK2ludCBtYXRjaF9zdHJfYXJnKAorCWNvbnN0IGNoYXIgKipvdXQsIHN0cnVjdCBhcmdzX2luZm8gKmFyZ3MsIGNvbnN0IGNoYXIgKm9wdCkKK3sKKwljb25zdCBjaGFyICpmb3VuZCA9IGFyZ3MtPmFyZ3ZbYXJncy0+cG9zXTsKKwlzaXplX3QgbGVuID0gaXNfcHJlZml4ZWQoZm91bmQsIG9wdCk7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWZvdW5kW2xlbl0pIHsKKwkJaWYgKGFyZ3MtPnBvcyArIDEgPT0gYXJncy0+YXJnYykKKwkJCWZhdGFsKCJleHBlY3RlZCB2YWx1ZSBmb2xsb3dpbmcgYXJndW1lbnQiLCBvcHQpOworCQlhcmdzLT5wb3MgKz0gMTsKKwkJKm91dCA9IGFyZ3MtPmFyZ3ZbYXJncy0+cG9zXTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGZvdW5kW2xlbl0gPT0gJz0nKSB7CisJCSpvdXQgPSBmb3VuZCArIGxlbiArIDE7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbWF0Y2hfbnVtZXJpY19hcmcoc3RydWN0IGFyZ3NfaW5mbyAqYXJncywgY29uc3QgY2hhciAqb3B0KQoreworCWNvbnN0IGNoYXIgKmZvdW5kID0gYXJncy0+YXJndlthcmdzLT5wb3NdOworCXNpemVfdCBsZW4gPSBpc19wcmVmaXhlZChmb3VuZCwgb3B0KTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghZm91bmRbbGVuXSkgeworCQlpZiAoYXJncy0+cG9zICsgMSA9PSBhcmdzLT5hcmdjKQorCQkJZmF0YWwoImV4cGVjdGVkIG51bWVyaWMgdmFsdWUgZm9sbG93aW5nIGFyZ3VtZW50Iiwgb3B0KTsKKwkJYXJncy0+cG9zICs9IDE7CisJCWZvdW5kID0gYXJncy0+YXJndlthcmdzLT5wb3NdOworCX0gZWxzZSB7CisJCWZvdW5kID0gZm91bmQgKyBsZW47CisJCWlmICgqZm91bmQgPT0gJz0nKQorCQkJZm91bmQrKzsKKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK2ludCBtYXRjaF91aW50MTZfYXJnKAorCXVpbnQxNl90ICpvdXQsIHN0cnVjdCBhcmdzX2luZm8gKmFyZ3MsIGNvbnN0IGNoYXIgKm9wdCkKK3sKKwljb25zdCBjaGFyICpmb3VuZCA9IG1hdGNoX251bWVyaWNfYXJnKGFyZ3MsIG9wdCk7CisJdWludDE2X3QgdmFsOworCWNoYXIgKmVuZHB0ciA9IE5VTEw7CisKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gMDsKKworCXZhbCA9ICh1aW50MTZfdClzdHJ0b3VsKGZvdW5kLCAmZW5kcHRyLCAwKTsKKwlpZiAoIWVuZHB0ciB8fCAqZW5kcHRyICE9ICdcMCcpCisJCWZhdGFsKCJleHBlY3RlZCBudW1iZXIgYWZ0ZXIgYXJndW1lbnQiLCBvcHQpOworCisJaWYgKG91dCkKKwkJKm91dCA9IHZhbDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtYXRjaF9pbnRfaW50ZXJuYWwoCisJaW50ICpvdXQsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGFsbG93X25lZ2F0aXZlLCBjb25zdCBjaGFyICpvcHQpCit7CisJY2hhciAqZW5kcHRyID0gTlVMTDsKKwlpbnQJICB2YWwgPSAoaW50KXN0cnRvbChzdHIsICZlbmRwdHIsIDEwKTsKKworCWlmICghZW5kcHRyIHx8ICplbmRwdHIgIT0gJ1wwJykKKwkJZmF0YWwoImV4cGVjdGVkIG51bWJlciIsIG9wdCk7CisJZWxzZSBpZiAodmFsIDwgMCAmJiAhYWxsb3dfbmVnYXRpdmUpCisJCWZhdGFsKCJuZWdhdGl2ZSB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkIiwgb3B0KTsKKworCWlmIChvdXQpCisJCSpvdXQgPSB2YWw7CisKKwlyZXR1cm4gMTsKK30KKworaW50IGlzX2ludGVnZXIoaW50ICpvdXQsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGFsbG93X25lZ2F0aXZlKQoreworCXJldHVybiBtYXRjaF9pbnRfaW50ZXJuYWwob3V0LCBzdHIsIGFsbG93X25lZ2F0aXZlLCBOVUxMKTsKK30KKworaW50IG1hdGNoX2ludF9hcmcoCisJaW50ICpvdXQsIHN0cnVjdCBhcmdzX2luZm8gKmFyZ3MsIGNvbnN0IGNoYXIgKm9wdCwgaW50IGFsbG93X25lZ2F0aXZlKQoreworCWNvbnN0IGNoYXIgKmZvdW5kID0gbWF0Y2hfbnVtZXJpY19hcmcoYXJncywgb3B0KTsKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbWF0Y2hfaW50X2ludGVybmFsKG91dCwgZm91bmQsIGFsbG93X25lZ2F0aXZlLCBvcHQpOworfQorCitpbnQgZGlmZl9vdXRwdXQoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmQsCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqaCwKKwljb25zdCBnaXRfZGlmZl9saW5lICpsLAorCXZvaWQgKnApCit7CisJRklMRSAqZnAgPSBwOworCisJKHZvaWQpZDsgKHZvaWQpaDsKKworCWlmICghZnApCisJCWZwID0gc3Rkb3V0OworCisJaWYgKGwtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0NPTlRFWFQgfHwKKwkJbC0+b3JpZ2luID09IEdJVF9ESUZGX0xJTkVfQURESVRJT04gfHwKKwkJbC0+b3JpZ2luID09IEdJVF9ESUZGX0xJTkVfREVMRVRJT04pCisJCWZwdXRjKGwtPm9yaWdpbiwgZnApOworCisJZndyaXRlKGwtPmNvbnRlbnQsIDEsIGwtPmNvbnRlbnRfbGVuLCBmcCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0cmVlaXNoX3RvX3RyZWUoCisJZ2l0X3RyZWUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICp0cmVlaXNoKQoreworCWdpdF9vYmplY3QgKm9iaiA9IE5VTEw7CisKKwljaGVja19sZzIoCisJCWdpdF9yZXZwYXJzZV9zaW5nbGUoJm9iaiwgcmVwbywgdHJlZWlzaCksCisJCSJsb29raW5nIHVwIG9iamVjdCIsIHRyZWVpc2gpOworCisJY2hlY2tfbGcyKAorCQlnaXRfb2JqZWN0X3BlZWwoKGdpdF9vYmplY3QgKiopb3V0LCBvYmosIEdJVF9PQkpfVFJFRSksCisJCSJyZXNvbHZpbmcgb2JqZWN0IHRvIHRyZWUiLCB0cmVlaXNoKTsKKworCWdpdF9vYmplY3RfZnJlZShvYmopOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9jb21tb24uaCBiL2V4YW1wbGVzL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDdkNTcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jb21tb24uaApAQCAtMCwwICsxLDg3IEBACisvKgorICogVXRpbGl0aWVzIGxpYnJhcnkgZm9yIGxpYmdpdDIgZXhhbXBsZXMKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxnaXQyLmg+CisKKy8qKgorICogQ2hlY2sgbGliZ2l0MiBlcnJvciBjb2RlLCBwcmludGluZyBlcnJvciB0byBzdGRlcnIgb24gZmFpbHVyZSBhbmQKKyAqIGV4aXRpbmcgdGhlIHByb2dyYW0uCisgKi8KK2V4dGVybiB2b2lkIGNoZWNrX2xnMihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmV4dHJhKTsKKworLyoqCisgKiBFeGl0IHRoZSBwcm9ncmFtLCBwcmludGluZyBlcnJvciB0byBzdGRlcnIKKyAqLworZXh0ZXJuIHZvaWQgZmF0YWwoY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZXh0cmEpOworCisvKioKKyAqIENoZWNrIGlmIGEgc3RyaW5nIGhhcyB0aGUgZ2l2ZW4gcHJlZml4LiAgUmV0dXJucyAwIGlmIG5vdCBwcmVmaXhlZAorICogb3IgdGhlIGxlbmd0aCBvZiB0aGUgcHJlZml4IGlmIGl0IGlzLgorICovCitleHRlcm4gc2l6ZV90IGlzX3ByZWZpeGVkKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGZ4KTsKKworLyoqCisgKiBNYXRjaCBhbiBpbnRlZ2VyIHN0cmluZywgcmV0dXJuaW5nIDEgaWYgbWF0Y2hlZCwgMCBpZiBub3QuCisgKi8KK2V4dGVybiBpbnQgaXNfaW50ZWdlcihpbnQgKm91dCwgY29uc3QgY2hhciAqc3RyLCBpbnQgYWxsb3dfbmVnYXRpdmUpOworCitzdHJ1Y3QgYXJnc19pbmZvIHsKKwlpbnQgICAgYXJnYzsKKwljaGFyICoqYXJndjsKKwlpbnQgICAgcG9zOworfTsKKyNkZWZpbmUgQVJHU19JTkZPX0lOSVQgeyBhcmdjLCBhcmd2LCAwIH0KKworLyoqCisgKiBDaGVjayBjdXJyZW50IGBhcmdzYCBlbnRyeSBhZ2FpbnN0IGBvcHRgIHN0cmluZy4gIElmIGl0IG1hdGNoZXMKKyAqIGV4YWN0bHksIHRha2UgdGhlIG5leHQgYXJnIGFzIGEgc3RyaW5nOyBpZiBpdCBtYXRjaGVzIGFzIGEgcHJlZml4IHdpdGgKKyAqIGFuIGVxdWFsIHNpZ24sIHRha2UgdGhlIHJlbWFpbmRlciBhcyBhIHN0cmluZzsgb3RoZXJ3aXNlIHJldHVybiAwLgorICovCitleHRlcm4gaW50IG1hdGNoX3N0cl9hcmcoCisJY29uc3QgY2hhciAqKm91dCwgc3RydWN0IGFyZ3NfaW5mbyAqYXJncywgY29uc3QgY2hhciAqb3B0KTsKKworLyoqCisgKiBDaGVjayBjdXJyZW50IGBhcmdzYCBlbnRyeSBhZ2FpbnN0IGBvcHRgIHN0cmluZyBwYXJzaW5nIGFzIHVpbnQxNi4gIElmCisgKiBgb3B0YCBtYXRjaGVzIGV4YWN0bHksIHRha2UgdGhlIG5leHQgYXJnIGFzIGEgdWludDE2X3QgdmFsdWU7IGlmIGBvcHRgCisgKiBpcyBhIHByZWZpeCAoZXF1YWwgc2lnbiBvcHRpb25hbCksIHRha2UgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJnIGFzIGEKKyAqIHVpbnQxNl90IHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCisgKi8KK2V4dGVybiBpbnQgbWF0Y2hfdWludDE2X2FyZygKKwl1aW50MTZfdCAqb3V0LCBzdHJ1Y3QgYXJnc19pbmZvICphcmdzLCBjb25zdCBjaGFyICpvcHQpOworCisvKioKKyAqIENoZWNrIGN1cnJlbnQgYGFyZ3NgIGVudHJ5IGFnYWluc3QgYG9wdGAgc3RyaW5nIHBhcnNpbmcgYXMgaW50LiAgSWYKKyAqIGBvcHRgIG1hdGNoZXMgZXhhY3RseSwgdGFrZSB0aGUgbmV4dCBhcmcgYXMgYW4gaW50IHZhbHVlOyBpZiBpdCBtYXRjaGVzCisgKiBhcyBhIHByZWZpeCAoZXF1YWwgc2lnbiBvcHRpb25hbCksIHRha2UgdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJnIGFzIGEKKyAqIGludCB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiAwLgorICovCitleHRlcm4gaW50IG1hdGNoX2ludF9hcmcoCisJaW50ICpvdXQsIHN0cnVjdCBhcmdzX2luZm8gKmFyZ3MsIGNvbnN0IGNoYXIgKm9wdCwgaW50IGFsbG93X25lZ2F0aXZlKTsKKworLyoqCisgKiBCYXNpYyBvdXRwdXQgZnVuY3Rpb24gZm9yIHBsYWluIHRleHQgZGlmZiBvdXRwdXQKKyAqIFBhc3MgYEZJTEUqYCBzdWNoIGFzIGBzdGRvdXRgIG9yIGBzdGRlcnJgIGFzIHBheWxvYWQgKG9yIE5VTEwgPT0gYHN0ZG91dGApCisgKi8KK2V4dGVybiBpbnQgZGlmZl9vdXRwdXQoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEqLCBjb25zdCBnaXRfZGlmZl9odW5rKiwgY29uc3QgZ2l0X2RpZmZfbGluZSosIHZvaWQqKTsKKworLyoqCisgKiBDb252ZXJ0IGEgdHJlZWlzaCBhcmd1bWVudCB0byBhbiBhY3R1YWwgdHJlZTsgdGhpcyB3aWxsIGNhbGwgY2hlY2tfbGcyCisgKiBhbmQgZXhpdCB0aGUgcHJvZ3JhbSBpZiBgdHJlZWlzaGAgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgdHJlZQorICovCitleHRlcm4gdm9pZCB0cmVlaXNoX3RvX3RyZWUoCisJZ2l0X3RyZWUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICp0cmVlaXNoKTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RpZmYuYyBiL2V4YW1wbGVzL2RpZmYuYwppbmRleCAxMWVmYTIxLi5kYWY1ZDcwIDEwMDY0NAotLS0gYS9leGFtcGxlcy9kaWZmLmMKKysrIGIvZXhhbXBsZXMvZGlmZi5jCkBAIC0xLDQxICsxLDMxIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxnaXQyLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisvKgorICogbGliZ2l0MiAiZGlmZiIgZXhhbXBsZSAtIHNob3dzIGhvdyB0byB1c2UgdGhlIGRpZmYgQVBJCisgKgorICogV3JpdHRlbiBieSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMKKyAqCisgKiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGF1dGhvcihzKSBoYXZlIGRlZGljYXRlZCBhbGwgY29weXJpZ2h0CisgKiBhbmQgcmVsYXRlZCBhbmQgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoaXMgc29mdHdhcmUgdG8gdGhlIHB1YmxpYyBkb21haW4KKyAqIHdvcmxkd2lkZS4gVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBDQzAgUHVibGljIERvbWFpbiBEZWRpY2F0aW9uIGFsb25nCisgKiB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgc2VlCisgKiA8aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLz4uCisgKi8KIAotc3RhdGljIHZvaWQgY2hlY2soaW50IGVycm9yLCBjb25zdCBjaGFyICptZXNzYWdlKQotewotCWlmIChlcnJvcikgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzICglZClcbiIsIG1lc3NhZ2UsIGVycm9yKTsKLQkJZXhpdCgxKTsKLQl9Ci19CisjaW5jbHVkZSAiY29tbW9uLmgiCiAKLXN0YXRpYyBpbnQgcmVzb2x2ZV90b190cmVlKAotCWdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICppZGVudGlmaWVyLCBnaXRfdHJlZSAqKnRyZWUpCi17Ci0JaW50IGVyciA9IDA7Ci0JZ2l0X29iamVjdCAqb2JqID0gTlVMTDsKKy8qKgorICogVGhpcyBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZSBsaWJnaXQyIGRpZmYgQVBJcyB0bworICogY3JlYXRlIGBnaXRfZGlmZmAgb2JqZWN0cyBhbmQgZGlzcGxheSB0aGVtLCBlbXVsYXRpbmcgYSBudW1iZXIgb2YKKyAqIGNvcmUgR2l0IGBkaWZmYCBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKyAqCisgKiBUaGlzIGNvdmVycyBvbiBhIHBvcnRpb24gb2YgdGhlIGNvcmUgR2l0IGRpZmYgb3B0aW9ucyBhbmQgZG9lc24ndAorICogaGF2ZSBwYXJ0aWN1bGFybHkgZ29vZCBlcnJvciBoYW5kbGluZywgYnV0IGl0IHNob3VsZCBzaG93IG1vc3Qgb2YKKyAqIHRoZSBjb3JlIGxpYmdpdDIgZGlmZiBBUElzLCBpbmNsdWRpbmcgdmFyaW91cyB0eXBlcyBvZiBkaWZmcyBhbmQKKyAqIGhvdyB0byBkbyByZW5hbWluZyBkZXRlY3Rpb24gYW5kIHBhdGNoIGZvcm1hdHRpbmcuCisgKi8KIAotCWlmICgoZXJyID0gZ2l0X3JldnBhcnNlX3NpbmdsZSgmb2JqLCByZXBvLCBpZGVudGlmaWVyKSkgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0Jc3dpdGNoIChnaXRfb2JqZWN0X3R5cGUob2JqKSkgewotCWNhc2UgR0lUX09CSl9UUkVFOgotCQkqdHJlZSA9IChnaXRfdHJlZSAqKW9iajsKLQkJYnJlYWs7Ci0JY2FzZSBHSVRfT0JKX0NPTU1JVDoKLQkJZXJyID0gZ2l0X2NvbW1pdF90cmVlKHRyZWUsIChnaXRfY29tbWl0ICopb2JqKTsKLQkJZ2l0X29iamVjdF9mcmVlKG9iaik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IEdJVF9FTk9URk9VTkQ7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotY2hhciAqY29sb3JzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JzW10gPSB7CiAJIlwwMzNbbSIsIC8qIHJlc2V0ICovCiAJIlwwMzNbMW0iLCAvKiBib2xkICovCiAJIlwwMzNbMzFtIiwgLyogcmVkICovCkBAIC00Myw2NyArMzMsMTEyIEBACiAJIlwwMzNbMzZtIiAvKiBjeWFuICovCiB9OwogCi1zdGF0aWMgaW50IHByaW50ZXIoCi0JY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAotCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyYW5nZSwKLQljaGFyIHVzYWdlLAotCWNvbnN0IGNoYXIgKmxpbmUsCi0Jc2l6ZV90IGxpbmVfbGVuLAotCXZvaWQgKmRhdGEpCisvKiogVGhlICdvcHRzJyBzdHJ1Y3QgY2FwdHVyZXMgYWxsIHRoZSB2YXJpb3VzIHBhcnNlZCBjb21tYW5kIGxpbmUgb3B0aW9ucy4gKi8KK3N0cnVjdCBvcHRzIHsKKwlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzOworCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBmaW5kb3B0czsKKwlpbnQgY29sb3I7CisJaW50IGNhY2hlZDsKKwlnaXRfZGlmZl9mb3JtYXRfdCBmb3JtYXQ7CisJY29uc3QgY2hhciAqdHJlZWlzaDE7CisJY29uc3QgY2hhciAqdHJlZWlzaDI7CisJY29uc3QgY2hhciAqZGlyOworfTsKKworLyoqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGVuZCAqLworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhzdHJ1Y3Qgb3B0cyAqbywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CitzdGF0aWMgaW50IGNvbG9yX3ByaW50ZXIoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEqLCBjb25zdCBnaXRfZGlmZl9odW5rKiwgY29uc3QgZ2l0X2RpZmZfbGluZSosIHZvaWQqKTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLQlpbnQgKmxhc3RfY29sb3IgPSBkYXRhLCBjb2xvciA9IDA7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBOVUxMOworCWdpdF90cmVlICp0MSA9IE5VTEwsICp0MiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmY7CisJc3RydWN0IG9wdHMgbyA9IHsKKwkJR0lUX0RJRkZfT1BUSU9OU19JTklULCBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVCwKKwkJLTEsIDAsIEdJVF9ESUZGX0ZPUk1BVF9QQVRDSCwgTlVMTCwgTlVMTCwgIi4iCisJfTsKIAotCSh2b2lkKWRlbHRhOyAodm9pZClyYW5nZTsgKHZvaWQpbGluZV9sZW47CisJZ2l0X3RocmVhZHNfaW5pdCgpOwogCi0JaWYgKCpsYXN0X2NvbG9yID49IDApIHsKLQkJc3dpdGNoICh1c2FnZSkgewotCQljYXNlIEdJVF9ESUZGX0xJTkVfQURESVRJT046IGNvbG9yID0gMzsgYnJlYWs7Ci0JCWNhc2UgR0lUX0RJRkZfTElORV9ERUxFVElPTjogY29sb3IgPSAyOyBicmVhazsKLQkJY2FzZSBHSVRfRElGRl9MSU5FX0FERF9FT0ZOTDogY29sb3IgPSAzOyBicmVhazsKLQkJY2FzZSBHSVRfRElGRl9MSU5FX0RFTF9FT0ZOTDogY29sb3IgPSAyOyBicmVhazsKLQkJY2FzZSBHSVRfRElGRl9MSU5FX0ZJTEVfSERSOiBjb2xvciA9IDE7IGJyZWFrOwotCQljYXNlIEdJVF9ESUZGX0xJTkVfSFVOS19IRFI6IGNvbG9yID0gNDsgYnJlYWs7Ci0JCWRlZmF1bHQ6IGNvbG9yID0gMDsKLQkJfQotCQlpZiAoY29sb3IgIT0gKmxhc3RfY29sb3IpIHsKLQkJCWlmICgqbGFzdF9jb2xvciA9PSAxIHx8IGNvbG9yID09IDEpCi0JCQkJZnB1dHMoY29sb3JzWzBdLCBzdGRvdXQpOwotCQkJZnB1dHMoY29sb3JzW2NvbG9yXSwgc3Rkb3V0KTsKLQkJCSpsYXN0X2NvbG9yID0gY29sb3I7Ci0JCX0KKwlwYXJzZV9vcHRzKCZvLCBhcmdjLCBhcmd2KTsKKworCWNoZWNrX2xnMihnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgmcmVwbywgby5kaXIsIDAsIE5VTEwpLAorCQkiQ291bGQgbm90IG9wZW4gcmVwb3NpdG9yeSIsIG8uZGlyKTsKKworCS8qKgorCSAqIFBvc3NpYmxlIGFyZ3VtZW50IHBhdHRlcm5zOgorCSAqCisJICogICogJmx0O3NoYTEmZ3Q7ICZsdDtzaGEyJmd0OworCSAqICAqICZsdDtzaGExJmd0OyAtLWNhY2hlZAorCSAqICAqICZsdDtzaGExJmd0OworCSAqICAqIC0tY2FjaGVkCisJICogICogbm90aGluZworCSAqCisJICogQ3VycmVudGx5IHJhbmdlZCBhcmd1bWVudHMgbGlrZSAmbHQ7c2hhMSZndDsuLiZsdDtzaGEyJmd0OyBhbmQgJmx0O3NoYTEmZ3Q7Li4uJmx0O3NoYTImZ3Q7CisJICogYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBleGFtcGxlCisJICovCisKKwlpZiAoby50cmVlaXNoMSkKKwkJdHJlZWlzaF90b190cmVlKCZ0MSwgcmVwbywgby50cmVlaXNoMSk7CisJaWYgKG8udHJlZWlzaDIpCisJCXRyZWVpc2hfdG9fdHJlZSgmdDIsIHJlcG8sIG8udHJlZWlzaDIpOworCisJaWYgKHQxICYmIHQyKQorCQljaGVja19sZzIoCisJCQlnaXRfZGlmZl90cmVlX3RvX3RyZWUoJmRpZmYsIHJlcG8sIHQxLCB0MiwgJm8uZGlmZm9wdHMpLAorCQkJImRpZmYgdHJlZXMiLCBOVUxMKTsKKwllbHNlIGlmICh0MSAmJiBvLmNhY2hlZCkKKwkJY2hlY2tfbGcyKAorCQkJZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgcmVwbywgdDEsIE5VTEwsICZvLmRpZmZvcHRzKSwKKwkJCSJkaWZmIHRyZWUgdG8gaW5kZXgiLCBOVUxMKTsKKwllbHNlIGlmICh0MSkKKwkJY2hlY2tfbGcyKAorCQkJZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyX3dpdGhfaW5kZXgoJmRpZmYsIHJlcG8sIHQxLCAmby5kaWZmb3B0cyksCisJCQkiZGlmZiB0cmVlIHRvIHdvcmtpbmcgZGlyZWN0b3J5IiwgTlVMTCk7CisJZWxzZSBpZiAoby5jYWNoZWQpIHsKKwkJdHJlZWlzaF90b190cmVlKCZ0MSwgcmVwbywgIkhFQUQiKTsKKwkJY2hlY2tfbGcyKAorCQkJZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgcmVwbywgdDEsIE5VTEwsICZvLmRpZmZvcHRzKSwKKwkJCSJkaWZmIHRyZWUgdG8gaW5kZXgiLCBOVUxMKTsKIAl9CisJZWxzZQorCQljaGVja19sZzIoCisJCQlnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCByZXBvLCBOVUxMLCAmby5kaWZmb3B0cyksCisJCQkiZGlmZiBpbmRleCB0byB3b3JraW5nIGRpcmVjdG9yeSIsIE5VTEwpOwogCi0JZnB1dHMobGluZSwgc3Rkb3V0KTsKKwkvKiogQXBwbHkgcmVuYW1lIGFuZCBjb3B5IGRldGVjdGlvbiBpZiByZXF1ZXN0ZWQuICovCisKKwlpZiAoKG8uZmluZG9wdHMuZmxhZ3MgJiBHSVRfRElGRl9GSU5EX0FMTCkgIT0gMCkKKwkJY2hlY2tfbGcyKAorCQkJZ2l0X2RpZmZfZmluZF9zaW1pbGFyKGRpZmYsICZvLmZpbmRvcHRzKSwKKwkJCSJmaW5kaW5nIHJlbmFtZXMgYW5kIGNvcGllcyIsIE5VTEwpOworCisJLyoqIEdlbmVyYXRlIHNpbXBsZSBvdXRwdXQgdXNpbmcgbGliZ2l0MiBkaXNwbGF5IGhlbHBlci4gKi8KKworCWlmIChvLmNvbG9yID49IDApCisJCWZwdXRzKGNvbG9yc1swXSwgc3Rkb3V0KTsKKworCWNoZWNrX2xnMigKKwkJZ2l0X2RpZmZfcHJpbnQoZGlmZiwgby5mb3JtYXQsIGNvbG9yX3ByaW50ZXIsICZvLmNvbG9yKSwKKwkJImRpc3BsYXlpbmcgZGlmZiIsIE5VTEwpOworCisJaWYgKG8uY29sb3IgPj0gMCkKKwkJZnB1dHMoY29sb3JzWzBdLCBzdGRvdXQpOworCisJLyoqIENsZWFudXAgYmVmb3JlIGV4aXRpbmcuICovCisKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCWdpdF90cmVlX2ZyZWUodDEpOworCWdpdF90cmVlX2ZyZWUodDIpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisKKwlnaXRfdGhyZWFkc19zaHV0ZG93bigpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfdWludDE2X3BhcmFtKGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqcGF0dGVybiwgdWludDE2X3QgKnZhbCkKLXsKLQlzaXplX3QgbGVuID0gc3RybGVuKHBhdHRlcm4pOwotCXVpbnQxNl90IHN0cnZhbDsKLQljaGFyICplbmRwdHIgPSBOVUxMOwotCWlmIChzdHJuY21wKGFyZywgcGF0dGVybiwgbGVuKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKGFyZ1tsZW5dID09ICdcMCcgJiYgcGF0dGVybltsZW4gLSAxXSAhPSAnPScpCi0JCXJldHVybiAxOwotCWlmIChhcmdbbGVuXSA9PSAnPScpCi0JCWxlbisrOwotCXN0cnZhbCA9IHN0cnRvdWwoYXJnICsgbGVuLCAmZW5kcHRyLCAwKTsKLQlpZiAoZW5kcHRyID09IGFyZykKLQkJcmV0dXJuIDA7Ci0JKnZhbCA9IHN0cnZhbDsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBjaGVja19zdHJfcGFyYW0oY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICoqdmFsKQotewotCXNpemVfdCBsZW4gPSBzdHJsZW4ocGF0dGVybik7Ci0JaWYgKHN0cm5jbXAoYXJnLCBwYXR0ZXJuLCBsZW4pKQotCQlyZXR1cm4gMDsKLQkqdmFsID0gKGNvbnN0IGNoYXIgKikoYXJnICsgbGVuKTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqYXJnKQogewogCWlmIChtZXNzYWdlICYmIGFyZykKQEAgLTExNCwxNTIgKzE0OSwxMDkgQEAKIAlleGl0KDEpOwogfQogCi1lbnVtIHsKLQlGT1JNQVRfUEFUQ0ggPSAwLAotCUZPUk1BVF9DT01QQUNUID0gMSwKLQlGT1JNQVRfUkFXID0gMgotfTsKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKy8qKiBUaGlzIGltcGxlbWVudHMgdmVyeSBydWRpbWVudGFyeSBjb2xvcml6ZWQgb3V0cHV0LiAqLworc3RhdGljIGludCBjb2xvcl9wcmludGVyKAorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKKwljb25zdCBnaXRfZGlmZl9odW5rICpodW5rLAorCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmUsCisJdm9pZCAqZGF0YSkKIHsKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IE5VTEw7Ci0JZ2l0X3RyZWUgKnQxID0gTlVMTCwgKnQyID0gTlVMTDsKLQlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfZmluZF9vcHRpb25zIGZpbmRvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKLQlpbnQgaSwgY29sb3IgPSAtMSwgZm9ybWF0ID0gRk9STUFUX1BBVENILCBjYWNoZWQgPSAwOwotCWNoYXIgKmEsICp0cmVlaXNoMSA9IE5VTEwsICp0cmVlaXNoMiA9IE5VTEw7Ci0JY29uc3QgY2hhciAqZGlyID0gIi4iOworCWludCAqbGFzdF9jb2xvciA9IGRhdGEsIGNvbG9yID0gMDsKIAotCWdpdF90aHJlYWRzX2luaXQoKTsKKwkodm9pZClkZWx0YTsgKHZvaWQpaHVuazsKIAotCS8qIHBhcnNlIGFyZ3VtZW50cyBhcyBjb3BpZWQgZnJvbSBnaXQtZGlmZiAqLworCWlmICgqbGFzdF9jb2xvciA+PSAwKSB7CisJCXN3aXRjaCAobGluZS0+b3JpZ2luKSB7CisJCWNhc2UgR0lUX0RJRkZfTElORV9BRERJVElPTjogIGNvbG9yID0gMzsgYnJlYWs7CisJCWNhc2UgR0lUX0RJRkZfTElORV9ERUxFVElPTjogIGNvbG9yID0gMjsgYnJlYWs7CisJCWNhc2UgR0lUX0RJRkZfTElORV9BRERfRU9GTkw6IGNvbG9yID0gMzsgYnJlYWs7CisJCWNhc2UgR0lUX0RJRkZfTElORV9ERUxfRU9GTkw6IGNvbG9yID0gMjsgYnJlYWs7CisJCWNhc2UgR0lUX0RJRkZfTElORV9GSUxFX0hEUjogIGNvbG9yID0gMTsgYnJlYWs7CisJCWNhc2UgR0lUX0RJRkZfTElORV9IVU5LX0hEUjogIGNvbG9yID0gNDsgYnJlYWs7CisJCWRlZmF1bHQ6IGJyZWFrOworCQl9CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7Ci0JCWEgPSBhcmd2W2ldOworCQlpZiAoY29sb3IgIT0gKmxhc3RfY29sb3IpIHsKKwkJCWlmICgqbGFzdF9jb2xvciA9PSAxIHx8IGNvbG9yID09IDEpCisJCQkJZnB1dHMoY29sb3JzWzBdLCBzdGRvdXQpOworCQkJZnB1dHMoY29sb3JzW2NvbG9yXSwgc3Rkb3V0KTsKKwkJCSpsYXN0X2NvbG9yID0gY29sb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gZGlmZl9vdXRwdXQoZGVsdGEsIGh1bmssIGxpbmUsIHN0ZG91dCk7Cit9CisKKy8qKiBQYXJzZSBhcmd1bWVudHMgYXMgY29waWVkIGZyb20gZ2l0LWRpZmYuICovCitzdGF0aWMgdm9pZCBwYXJzZV9vcHRzKHN0cnVjdCBvcHRzICpvLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBhcmdzX2luZm8gYXJncyA9IEFSR1NfSU5GT19JTklUOworCisKKwlmb3IgKGFyZ3MucG9zID0gMTsgYXJncy5wb3MgPCBhcmdjOyArK2FyZ3MucG9zKSB7CisJCWNvbnN0IGNoYXIgKmEgPSBhcmd2W2FyZ3MucG9zXTsKIAogCQlpZiAoYVswXSAhPSAnLScpIHsKLQkJCWlmICh0cmVlaXNoMSA9PSBOVUxMKQotCQkJCXRyZWVpc2gxID0gYTsKLQkJCWVsc2UgaWYgKHRyZWVpc2gyID09IE5VTEwpCi0JCQkJdHJlZWlzaDIgPSBhOworCQkJaWYgKG8tPnRyZWVpc2gxID09IE5VTEwpCisJCQkJby0+dHJlZWlzaDEgPSBhOworCQkJZWxzZSBpZiAoby0+dHJlZWlzaDIgPT0gTlVMTCkKKwkJCQlvLT50cmVlaXNoMiA9IGE7CiAJCQllbHNlCiAJCQkJdXNhZ2UoIk9ubHkgb25lIG9yIHR3byB0cmVlIGlkZW50aWZpZXJzIGNhbiBiZSBwcm92aWRlZCIsIE5VTEwpOwogCQl9CiAJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi1wIikgfHwgIXN0cmNtcChhLCAiLXUiKSB8fAogCQkJIXN0cmNtcChhLCAiLS1wYXRjaCIpKQotCQkJZm9ybWF0ID0gRk9STUFUX1BBVENIOworCQkJby0+Zm9ybWF0ID0gR0lUX0RJRkZfRk9STUFUX1BBVENIOwogCQllbHNlIGlmICghc3RyY21wKGEsICItLWNhY2hlZCIpKQotCQkJY2FjaGVkID0gMTsKKwkJCW8tPmNhY2hlZCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tbmFtZS1vbmx5IikpCisJCQlvLT5mb3JtYXQgPSBHSVRfRElGRl9GT1JNQVRfTkFNRV9PTkxZOwogCQllbHNlIGlmICghc3RyY21wKGEsICItLW5hbWUtc3RhdHVzIikpCi0JCQlmb3JtYXQgPSBGT1JNQVRfQ09NUEFDVDsKKwkJCW8tPmZvcm1hdCA9IEdJVF9ESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUzsKIAkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1yYXciKSkKLQkJCWZvcm1hdCA9IEZPUk1BVF9SQVc7CisJCQlvLT5mb3JtYXQgPSBHSVRfRElGRl9GT1JNQVRfUkFXOwogCQllbHNlIGlmICghc3RyY21wKGEsICItLWNvbG9yIikpCi0JCQljb2xvciA9IDA7CisJCQlvLT5jb2xvciA9IDA7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tbm8tY29sb3IiKSkKLQkJCWNvbG9yID0gLTE7CisJCQlvLT5jb2xvciA9IC0xOwogCQllbHNlIGlmICghc3RyY21wKGEsICItUiIpKQotCQkJb3B0cy5mbGFncyB8PSBHSVRfRElGRl9SRVZFUlNFOworCQkJby0+ZGlmZm9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfUkVWRVJTRTsKIAkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLWEiKSB8fCAhc3RyY21wKGEsICItLXRleHQiKSkKLQkJCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfRk9SQ0VfVEVYVDsKKwkJCW8tPmRpZmZvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZPUkNFX1RFWFQ7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0taWdub3JlLXNwYWNlLWF0LWVvbCIpKQotCQkJb3B0cy5mbGFncyB8PSBHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRV9FT0w7CisJCQlvLT5kaWZmb3B0cy5mbGFncyB8PSBHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRV9FT0w7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi1iIikgfHwgIXN0cmNtcChhLCAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIikpCi0JCQlvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRTsKKwkJCW8tPmRpZmZvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRTsKIAkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXciKSB8fCAhc3RyY21wKGEsICItLWlnbm9yZS1hbGwtc3BhY2UiKSkKLQkJCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSUdOT1JFX1dISVRFU1BBQ0U7CisJCQlvLT5kaWZmb3B0cy5mbGFncyB8PSBHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRTsKIAkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1pZ25vcmVkIikpCi0JCQlvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRDsKKwkJCW8tPmRpZmZvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRDsKIAkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS11bnRyYWNrZWQiKSkKLQkJCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7Ci0JCWVsc2UgaWYgKGNoZWNrX3VpbnQxNl9wYXJhbShhLCAiLU0iLCAmZmluZG9wdHMucmVuYW1lX3RocmVzaG9sZCkgfHwKLQkJCQkgY2hlY2tfdWludDE2X3BhcmFtKGEsICItLWZpbmQtcmVuYW1lcyIsCi0JCQkJCSZmaW5kb3B0cy5yZW5hbWVfdGhyZXNob2xkKSkKLQkJCWZpbmRvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZJTkRfUkVOQU1FUzsKLQkJZWxzZSBpZiAoY2hlY2tfdWludDE2X3BhcmFtKGEsICItQyIsICZmaW5kb3B0cy5jb3B5X3RocmVzaG9sZCkgfHwKLQkJCQkgY2hlY2tfdWludDE2X3BhcmFtKGEsICItLWZpbmQtY29waWVzIiwKLQkJCQkJJmZpbmRvcHRzLmNvcHlfdGhyZXNob2xkKSkKLQkJCWZpbmRvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZJTkRfQ09QSUVTOworCQkJby0+ZGlmZm9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7CisJCWVsc2UgaWYgKG1hdGNoX3VpbnQxNl9hcmcoCisJCQkJJm8tPmZpbmRvcHRzLnJlbmFtZV90aHJlc2hvbGQsICZhcmdzLCAiLU0iKSB8fAorCQkJbWF0Y2hfdWludDE2X2FyZygKKwkJCQkmby0+ZmluZG9wdHMucmVuYW1lX3RocmVzaG9sZCwgJmFyZ3MsICItLWZpbmQtcmVuYW1lcyIpKQorCQkJby0+ZmluZG9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfRklORF9SRU5BTUVTOworCQllbHNlIGlmIChtYXRjaF91aW50MTZfYXJnKAorCQkJCSZvLT5maW5kb3B0cy5jb3B5X3RocmVzaG9sZCwgJmFyZ3MsICItQyIpIHx8CisJCQltYXRjaF91aW50MTZfYXJnKAorCQkJCSZvLT5maW5kb3B0cy5jb3B5X3RocmVzaG9sZCwgJmFyZ3MsICItLWZpbmQtY29waWVzIikpCisJCQlvLT5maW5kb3B0cy5mbGFncyB8PSBHSVRfRElGRl9GSU5EX0NPUElFUzsKIAkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1maW5kLWNvcGllcy1oYXJkZXIiKSkKLQkJCWZpbmRvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZJTkRfQ09QSUVTX0ZST01fVU5NT0RJRklFRDsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYSwgIi1CIiwgMikgfHwgIXN0cm5jbXAoYSwgIi0tYnJlYWstcmV3cml0ZXMiLCAxNikpIHsKKwkJCW8tPmZpbmRvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZJTkRfQ09QSUVTX0ZST01fVU5NT0RJRklFRDsKKwkJZWxzZSBpZiAoaXNfcHJlZml4ZWQoYSwgIi1CIikgfHwgaXNfcHJlZml4ZWQoYSwgIi0tYnJlYWstcmV3cml0ZXMiKSkKIAkJCS8qIFRPRE86IHBhcnNlIHRocmVzaG9sZHMgKi8KLQkJCWZpbmRvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZJTkRfUkVXUklURVM7Ci0JCX0KLQkJZWxzZSBpZiAoIWNoZWNrX3VpbnQxNl9wYXJhbShhLCAiLVUiLCAmb3B0cy5jb250ZXh0X2xpbmVzKSAmJgotCQkJIWNoZWNrX3VpbnQxNl9wYXJhbShhLCAiLS11bmlmaWVkPSIsICZvcHRzLmNvbnRleHRfbGluZXMpICYmCi0JCQkhY2hlY2tfdWludDE2X3BhcmFtKGEsICItLWludGVyLWh1bmstY29udGV4dD0iLAotCQkJCSZvcHRzLmludGVyaHVua19saW5lcykgJiYKLQkJCSFjaGVja19zdHJfcGFyYW0oYSwgIi0tc3JjLXByZWZpeD0iLCAmb3B0cy5vbGRfcHJlZml4KSAmJgotCQkJIWNoZWNrX3N0cl9wYXJhbShhLCAiLS1kc3QtcHJlZml4PSIsICZvcHRzLm5ld19wcmVmaXgpICYmCi0JCQkhY2hlY2tfc3RyX3BhcmFtKGEsICItLWdpdC1kaXI9IiwgJmRpcikpCi0JCQl1c2FnZSgiVW5rbm93biBhcmciLCBhKTsKKwkJCW8tPmZpbmRvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0ZJTkRfUkVXUklURVM7CisJCWVsc2UgaWYgKCFtYXRjaF91aW50MTZfYXJnKAorCQkJCSZvLT5kaWZmb3B0cy5jb250ZXh0X2xpbmVzLCAmYXJncywgIi1VIikgJiYKKwkJCSFtYXRjaF91aW50MTZfYXJnKAorCQkJCSZvLT5kaWZmb3B0cy5jb250ZXh0X2xpbmVzLCAmYXJncywgIi0tdW5pZmllZCIpICYmCisJCQkhbWF0Y2hfdWludDE2X2FyZygKKwkJCQkmby0+ZGlmZm9wdHMuaW50ZXJodW5rX2xpbmVzLCAmYXJncywgIi0taW50ZXItaHVuay1jb250ZXh0IikgJiYKKwkJCSFtYXRjaF9zdHJfYXJnKCZvLT5kaWZmb3B0cy5vbGRfcHJlZml4LCAmYXJncywgIi0tc3JjLXByZWZpeCIpICYmCisJCQkhbWF0Y2hfc3RyX2FyZygmby0+ZGlmZm9wdHMubmV3X3ByZWZpeCwgJmFyZ3MsICItLWRzdC1wcmVmaXgiKSAmJgorCQkJIW1hdGNoX3N0cl9hcmcoJm8tPmRpciwgJmFyZ3MsICItLWdpdC1kaXIiKSkKKwkJCXVzYWdlKCJVbmtub3duIGNvbW1hbmQgbGluZSBhcmd1bWVudCIsIGEpOwogCX0KLQotCS8qIG9wZW4gcmVwbyAqLwotCi0JY2hlY2soZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnJlcG8sIGRpciwgMCwgTlVMTCksCi0JCSJDb3VsZCBub3Qgb3BlbiByZXBvc2l0b3J5Iik7Ci0KLQlpZiAodHJlZWlzaDEpCi0JCWNoZWNrKHJlc29sdmVfdG9fdHJlZShyZXBvLCB0cmVlaXNoMSwgJnQxKSwgIkxvb2tpbmcgdXAgZmlyc3QgdHJlZSIpOwotCWlmICh0cmVlaXNoMikKLQkJY2hlY2socmVzb2x2ZV90b190cmVlKHJlcG8sIHRyZWVpc2gyLCAmdDIpLCAiTG9va2luZyB1cCBzZWNvbmQgdHJlZSIpOwotCi0JLyogPHNoYTE+IDxzaGEyPiAqLwotCS8qIDxzaGExPiAtLWNhY2hlZCAqLwotCS8qIDxzaGExPiAqLwotCS8qIC0tY2FjaGVkICovCi0JLyogbm90aGluZyAqLwotCi0JaWYgKHQxICYmIHQyKQotCQljaGVjayhnaXRfZGlmZl90cmVlX3RvX3RyZWUoJmRpZmYsIHJlcG8sIHQxLCB0MiwgJm9wdHMpLCAiRGlmZiIpOwotCWVsc2UgaWYgKHQxICYmIGNhY2hlZCkKLQkJY2hlY2soZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgcmVwbywgdDEsIE5VTEwsICZvcHRzKSwgIkRpZmYiKTsKLQllbHNlIGlmICh0MSkgewotCQlnaXRfZGlmZl9saXN0ICpkaWZmMjsKLQkJY2hlY2soZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgcmVwbywgdDEsIE5VTEwsICZvcHRzKSwgIkRpZmYiKTsKLQkJY2hlY2soZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZjIsIHJlcG8sIE5VTEwsICZvcHRzKSwgIkRpZmYiKTsKLQkJY2hlY2soZ2l0X2RpZmZfbWVyZ2UoZGlmZiwgZGlmZjIpLCAiTWVyZ2UgZGlmZnMiKTsKLQkJZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYyKTsKLQl9Ci0JZWxzZSBpZiAoY2FjaGVkKSB7Ci0JCWNoZWNrKHJlc29sdmVfdG9fdHJlZShyZXBvLCAiSEVBRCIsICZ0MSksICJsb29raW5nIHVwIEhFQUQiKTsKLQkJY2hlY2soZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgcmVwbywgdDEsIE5VTEwsICZvcHRzKSwgIkRpZmYiKTsKLQl9Ci0JZWxzZQotCQljaGVjayhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCByZXBvLCBOVUxMLCAmb3B0cyksICJEaWZmIik7Ci0KLQlpZiAoKGZpbmRvcHRzLmZsYWdzICYgR0lUX0RJRkZfRklORF9BTEwpICE9IDApCi0JCWNoZWNrKGdpdF9kaWZmX2ZpbmRfc2ltaWxhcihkaWZmLCAmZmluZG9wdHMpLAotCQkJImZpbmRpbmcgcmVuYW1lcyBhbmQgY29waWVzICIpOwotCi0JaWYgKGNvbG9yID49IDApCi0JCWZwdXRzKGNvbG9yc1swXSwgc3Rkb3V0KTsKLQotCXN3aXRjaCAoZm9ybWF0KSB7Ci0JY2FzZSBGT1JNQVRfUEFUQ0g6Ci0JCWNoZWNrKGdpdF9kaWZmX3ByaW50X3BhdGNoKGRpZmYsIHByaW50ZXIsICZjb2xvciksICJEaXNwbGF5aW5nIGRpZmYiKTsKLQkJYnJlYWs7Ci0JY2FzZSBGT1JNQVRfQ09NUEFDVDoKLQkJY2hlY2soZ2l0X2RpZmZfcHJpbnRfY29tcGFjdChkaWZmLCBwcmludGVyLCAmY29sb3IpLCAiRGlzcGxheWluZyBkaWZmIik7Ci0JCWJyZWFrOwotCWNhc2UgRk9STUFUX1JBVzoKLQkJY2hlY2soZ2l0X2RpZmZfcHJpbnRfcmF3KGRpZmYsIHByaW50ZXIsICZjb2xvciksICJEaXNwbGF5aW5nIGRpZmYiKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNvbG9yID49IDApCi0JCWZwdXRzKGNvbG9yc1swXSwgc3Rkb3V0KTsKLQotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKLQlnaXRfdHJlZV9mcmVlKHQxKTsKLQlnaXRfdHJlZV9mcmVlKHQyKTsKLQlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOwotCi0JZ2l0X3RocmVhZHNfc2h1dGRvd24oKTsKLQotCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9leGFtcGxlcy9nZW5lcmFsLmMgYi9leGFtcGxlcy9nZW5lcmFsLmMKaW5kZXggZDdhNTg0Ny4uNThlMTQxYiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvZ2VuZXJhbC5jCisrKyBiL2V4YW1wbGVzL2dlbmVyYWwuYwpAQCAtMSwzICsxLDE3IEBACisvKgorICogbGliZ2l0MiAiZ2VuZXJhbCIgZXhhbXBsZSAtIHNob3dzIGJhc2ljIGxpYmdpdDIgY29uY2VwdHMKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLworCiAvLyBbKipsaWJnaXQyKipdW2xnXSBpcyBhIHBvcnRhYmxlLCBwdXJlIEMgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdpdCBjb3JlCiAvLyBtZXRob2RzIHByb3ZpZGVkIGFzIGEgcmUtZW50cmFudCBsaW5rYWJsZSBsaWJyYXJ5IHdpdGggYSBzb2xpZCBBUEksCiAvLyBhbGxvd2luZyB5b3UgdG8gd3JpdGUgbmF0aXZlIHNwZWVkIGN1c3RvbSBHaXQgYXBwbGljYXRpb25zIGluIGFueQpAQCAtNTIsNyArNjYsNyBAQAogICAvLyBzaW1wbGVzdC4gIFRoZXJlIGFyZSBhbHNvIFttZXRob2RzXVttZV0gZm9yIHNwZWNpZnlpbmcgdGhlIGluZGV4IGZpbGUKICAgLy8gYW5kIHdvcmsgdHJlZSBsb2NhdGlvbnMsIGhlcmUgd2UgYXNzdW1lIHRoZXkgYXJlIGluIHRoZSBub3JtYWwgcGxhY2VzLgogCS8vCi0JLy8gKFRyeSBydW5uaW5nIHRoaXMgcHJvZ3JhbSBhZ2FpbnN0IHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC4pCisJLy8gKFRyeSBydW5uaW5nIHRoaXMgcHJvZ3JhbSBhZ2FpbnN0IHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQuKQogICAvLwogICAvLyBbbWVdOiBodHRwOi8vbGliZ2l0Mi5naXRodWIuY29tL2xpYmdpdDIvI0hFQUQvZ3JvdXAvcmVwb3NpdG9yeQogICBpbnQgZXJyb3I7CmRpZmYgLS1naXQgYS9leGFtcGxlcy9pbml0LmMgYi9leGFtcGxlcy9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4MjNhYgotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL2luaXQuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIGxpYmdpdDIgImluaXQiIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gaW5pdGlhbGl6ZSBhIG5ldyByZXBvCisgKgorICogV3JpdHRlbiBieSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMKKyAqCisgKiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGF1dGhvcihzKSBoYXZlIGRlZGljYXRlZCBhbGwgY29weXJpZ2h0CisgKiBhbmQgcmVsYXRlZCBhbmQgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoaXMgc29mdHdhcmUgdG8gdGhlIHB1YmxpYyBkb21haW4KKyAqIHdvcmxkd2lkZS4gVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBDQzAgUHVibGljIERvbWFpbiBEZWRpY2F0aW9uIGFsb25nCisgKiB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgc2VlCisgKiA8aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLz4uCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCisvKioKKyAqIFRoaXMgaXMgYSBzYW1wbGUgcHJvZ3JhbSB0aGF0IGlzIHNpbWlsYXIgdG8gImdpdCBpbml0Ii4gIFNlZSB0aGUKKyAqIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgKHRyeSAiZ2l0IGhlbHAgaW5pdCIpIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzCisgKiBwcm9ncmFtIGlzIGVtdWxhdGluZy4KKyAqCisgKiBUaGlzIGRlbW9uc3RyYXRlcyB1c2luZyB0aGUgbGliZ2l0MiBBUElzIHRvIGluaXRpYWxpemUgYSBuZXcgcmVwb3NpdG9yeS4KKyAqCisgKiBUaGlzIGFsc28gY29udGFpbnMgYSBzcGVjaWFsIGFkZGl0aW9uYWwgb3B0aW9uIHRoYXQgcmVndWxhciAiZ2l0IGluaXQiCisgKiBkb2VzIG5vdCBzdXBwb3J0IHdoaWNoIGlzICItLWluaXRpYWwtY29tbWl0IiB0byBtYWtlIGEgZmlyc3QgZW1wdHkgY29tbWl0LgorICogVGhhdCBpcyBkZW1vbnN0cmF0ZWQgaW4gdGhlICJjcmVhdGVfaW5pdGlhbF9jb21taXQiIGhlbHBlciBmdW5jdGlvbi4KKyAqLworCisvKiogRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgaGVscGVycyAqLworc3RydWN0IG9wdHMgeworCWludCBub19vcHRpb25zOworCWludCBxdWlldDsKKwlpbnQgYmFyZTsKKwlpbnQgaW5pdGlhbF9jb21taXQ7CisJdWludDMyX3Qgc2hhcmVkOworCWNvbnN0IGNoYXIgKnRlbXBsYXRlOworCWNvbnN0IGNoYXIgKmdpdGRpcjsKKwljb25zdCBjaGFyICpkaXI7Cit9Oworc3RhdGljIHZvaWQgY3JlYXRlX2luaXRpYWxfY29tbWl0KGdpdF9yZXBvc2l0b3J5ICpyZXBvKTsKK3N0YXRpYyB2b2lkIHBhcnNlX29wdHMoc3RydWN0IG9wdHMgKm8sIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBOVUxMOworCXN0cnVjdCBvcHRzIG8gPSB7IDEsIDAsIDAsIDAsIEdJVF9SRVBPU0lUT1JZX0lOSVRfU0hBUkVEX1VNQVNLLCAwLCAwLCAwIH07CisKKwlnaXRfdGhyZWFkc19pbml0KCk7CisKKwlwYXJzZV9vcHRzKCZvLCBhcmdjLCBhcmd2KTsKKworCS8qIEluaXRpYWxpemUgcmVwb3NpdG9yeS4gKi8KKworCWlmIChvLm5vX29wdGlvbnMpIHsKKwkJLyoqCisJCSAqIE5vIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQsIHNvIGxldCdzIGRlbW9uc3RyYXRlIHRoZSBkZWZhdWx0CisJCSAqIHNpbXBsZSBjYXNlIG9mIGdpdF9yZXBvc2l0b3J5X2luaXQoKSBBUEkgdXNhZ2UuLi4KKwkJICovCisJCWNoZWNrX2xnMihnaXRfcmVwb3NpdG9yeV9pbml0KCZyZXBvLCBvLmRpciwgMCksCisJCQkiQ291bGQgbm90IGluaXRpYWxpemUgcmVwb3NpdG9yeSIsIE5VTEwpOworCX0KKwllbHNlIHsKKwkJLyoqCisJCSAqIFNvbWUgY29tbWFuZCBsaW5lIG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQsIHNvIHdlJ2xsIHVzZSB0aGUKKwkJICogZXh0ZW5kZWQgaW5pdCBBUEkgdG8gaGFuZGxlIHRoZW0KKwkJICovCisJCWdpdF9yZXBvc2l0b3J5X2luaXRfb3B0aW9ucyBpbml0b3B0cyA9IEdJVF9SRVBPU0lUT1JZX0lOSVRfT1BUSU9OU19JTklUOworCQlpbml0b3B0cy5mbGFncyA9IEdJVF9SRVBPU0lUT1JZX0lOSVRfTUtQQVRIOworCisJCWlmIChvLmJhcmUpCisJCQlpbml0b3B0cy5mbGFncyB8PSBHSVRfUkVQT1NJVE9SWV9JTklUX0JBUkU7CisKKwkJaWYgKG8udGVtcGxhdGUpIHsKKwkJCWluaXRvcHRzLmZsYWdzIHw9IEdJVF9SRVBPU0lUT1JZX0lOSVRfRVhURVJOQUxfVEVNUExBVEU7CisJCQlpbml0b3B0cy50ZW1wbGF0ZV9wYXRoID0gby50ZW1wbGF0ZTsKKwkJfQorCisJCWlmIChvLmdpdGRpcikgeworCQkJLyoqCisJCQkgKiBJZiB5b3Ugc3BlY2lmaWVkIGEgc2VwYXJhdGUgZ2l0IGRpcmVjdG9yeSwgdGhlbiBpbml0aWFsaXplCisJCQkgKiB0aGUgcmVwb3NpdG9yeSBhdCB0aGF0IHBhdGggYW5kIHVzZSB0aGUgc2Vjb25kIHBhdGggYXMgdGhlCisJCQkgKiB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgcmVwb3NpdG9yeSAod2l0aCBhIGdpdC1saW5rIGZpbGUpCisJCQkgKi8KKwkJCWluaXRvcHRzLndvcmtkaXJfcGF0aCA9IG8uZGlyOworCQkJby5kaXIgPSBvLmdpdGRpcjsKKwkJfQorCisJCWlmIChvLnNoYXJlZCAhPSAwKQorCQkJaW5pdG9wdHMubW9kZSA9IG8uc2hhcmVkOworCisJCWNoZWNrX2xnMihnaXRfcmVwb3NpdG9yeV9pbml0X2V4dCgmcmVwbywgby5kaXIsICZpbml0b3B0cyksCisJCQkJIkNvdWxkIG5vdCBpbml0aWFsaXplIHJlcG9zaXRvcnkiLCBOVUxMKTsKKwl9CisKKwkvKiogUHJpbnQgYSBtZXNzYWdlIHRvIHN0ZG91dCBsaWtlICJnaXQgaW5pdCIgZG9lcy4gKi8KKworCWlmICghby5xdWlldCkgeworCQlpZiAoby5iYXJlIHx8IG8uZ2l0ZGlyKQorCQkJby5kaXIgPSBnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pOworCQllbHNlCisJCQlvLmRpciA9IGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyk7CisKKwkJcHJpbnRmKCJJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAlc1xuIiwgby5kaXIpOworCX0KKworCS8qKgorCSAqIEFzIGFuIGV4dGVuc2lvbiB0byB0aGUgYmFzaWMgImdpdCBpbml0IiBjb21tYW5kLCB0aGlzIGV4YW1wbGUKKwkgKiBnaXZlcyB0aGUgb3B0aW9uIHRvIGNyZWF0ZSBhbiBlbXB0eSBpbml0aWFsIGNvbW1pdC4gIFRoaXMgaXMKKwkgKiBtb3N0bHkgdG8gZGVtb25zdHJhdGUgd2hhdCBpdCB0YWtlcyB0byBkbyB0aGF0LCBidXQgYWxzbyBzb21lCisJICogcGVvcGxlIGxpa2UgdG8gaGF2ZSB0aGF0IGVtcHR5IGJhc2UgY29tbWl0IGluIHRoZWlyIHJlcG8uCisJICovCisJaWYgKG8uaW5pdGlhbF9jb21taXQpIHsKKwkJY3JlYXRlX2luaXRpYWxfY29tbWl0KHJlcG8pOworCQlwcmludGYoIkNyZWF0ZWQgZW1wdHkgaW5pdGlhbCBjb21taXRcbiIpOworCX0KKworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisJZ2l0X3RocmVhZHNfc2h1dGRvd24oKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIFVubGlrZSByZWd1bGFyICJnaXQgaW5pdCIsIHRoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGluaXRpYWwKKyAqIGVtcHR5IGNvbW1pdCBpbiB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgaXMgdGhlIGhlbHBlciBmdW5jdGlvbiB0aGF0IGRvZXMKKyAqIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkIGNyZWF0ZV9pbml0aWFsX2NvbW1pdChnaXRfcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlnaXRfc2lnbmF0dXJlICpzaWc7CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfb2lkIHRyZWVfaWQsIGNvbW1pdF9pZDsKKwlnaXRfdHJlZSAqdHJlZTsKKworCS8qKiBGaXJzdCB1c2UgdGhlIGNvbmZpZyB0byBpbml0aWFsaXplIGEgY29tbWl0IHNpZ25hdHVyZSBmb3IgdGhlIHVzZXIuICovCisKKwlpZiAoZ2l0X3NpZ25hdHVyZV9kZWZhdWx0KCZzaWcsIHJlcG8pIDwgMCkKKwkJZmF0YWwoIlVuYWJsZSB0byBjcmVhdGUgYSBjb21taXQgc2lnbmF0dXJlLiIsCisJCSAgICAgICJQZXJoYXBzICd1c2VyLm5hbWUnIGFuZCAndXNlci5lbWFpbCcgYXJlIG5vdCBzZXQiKTsKKworCS8qIE5vdyBsZXQncyBjcmVhdGUgYW4gZW1wdHkgdHJlZSBmb3IgdGhpcyBjb21taXQgKi8KKworCWlmIChnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pIDwgMCkKKwkJZmF0YWwoIkNvdWxkIG5vdCBvcGVuIHJlcG9zaXRvcnkgaW5kZXgiLCBOVUxMKTsKKworCS8qKgorCSAqIE91dHNpZGUgb2YgdGhpcyBleGFtcGxlLCB5b3UgY291bGQgY2FsbCBnaXRfaW5kZXhfYWRkX2J5cGF0aCgpCisJICogaGVyZSB0byBwdXQgYWN0dWFsIGZpbGVzIGludG8gdGhlIGluZGV4LiAgRm9yIG91ciBwdXJwb3Nlcywgd2UnbGwKKwkgKiBsZWF2ZSBpdCBlbXB0eSBmb3Igbm93LgorCSAqLworCisJaWYgKGdpdF9pbmRleF93cml0ZV90cmVlKCZ0cmVlX2lkLCBpbmRleCkgPCAwKQorCQlmYXRhbCgiVW5hYmxlIHRvIHdyaXRlIGluaXRpYWwgdHJlZSBmcm9tIGluZGV4IiwgTlVMTCk7CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisKKwlpZiAoZ2l0X3RyZWVfbG9va3VwKCZ0cmVlLCByZXBvLCAmdHJlZV9pZCkgPCAwKQorCQlmYXRhbCgiQ291bGQgbm90IGxvb2sgdXAgaW5pdGlhbCB0cmVlIiwgTlVMTCk7CisKKwkvKioKKwkgKiBSZWFkeSB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LgorCSAqCisJICogTm9ybWFsbHkgY3JlYXRpbmcgYSBjb21taXQgd291bGQgaW52b2x2ZSBsb29raW5nIHVwIHRoZSBjdXJyZW50CisJICogSEVBRCBjb21taXQgYW5kIG1ha2luZyB0aGF0IGJlIHRoZSBwYXJlbnQgb2YgdGhlIGluaXRpYWwgY29tbWl0LAorCSAqIGJ1dCBoZXJlIHRoaXMgaXMgdGhlIGZpcnN0IGNvbW1pdCBzbyB0aGVyZSB3aWxsIGJlIG5vIHBhcmVudC4KKwkgKi8KKworCWlmIChnaXRfY29tbWl0X2NyZWF0ZV92KAorCQkJJmNvbW1pdF9pZCwgcmVwbywgIkhFQUQiLCBzaWcsIHNpZywKKwkJCU5VTEwsICJJbml0aWFsIGNvbW1pdCIsIHRyZWUsIDApIDwgMCkKKwkJZmF0YWwoIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0IiwgTlVMTCk7CisKKwkvKiogQ2xlYW4gdXAgc28gd2UgZG9uJ3QgbGVhayBtZW1vcnkuICovCisKKwlnaXRfdHJlZV9mcmVlKHRyZWUpOworCWdpdF9zaWduYXR1cmVfZnJlZShzaWcpOworfQorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICplcnJvciwgY29uc3QgY2hhciAqYXJnKQoreworCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6ICVzICclcydcbiIsIGVycm9yLCBhcmcpOworCWZwcmludGYoc3RkZXJyLAorCQkJInVzYWdlOiBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTxkaXI+XVxuIgorCQkJIiAgICAgICAgICAgIFstLXNoYXJlZFs9cGVybXNdXSBbLS1pbml0aWFsLWNvbW1pdF1cbiIKKwkJCSIgICAgICAgICAgICBbLS1zZXBhcmF0ZS1naXQtZGlyXSA8ZGlyZWN0b3J5PlxuIik7CisJZXhpdCgxKTsKK30KKworLyoqIFBhcnNlIHRoZSB0YWlsIG9mIHRoZSAtLXNoYXJlZD0gYXJndW1lbnQuICovCitzdGF0aWMgdWludDMyX3QgcGFyc2Vfc2hhcmVkKGNvbnN0IGNoYXIgKnNoYXJlZCkKK3sKKwlpZiAoIXN0cmNtcChzaGFyZWQsICJmYWxzZSIpIHx8ICFzdHJjbXAoc2hhcmVkLCAidW1hc2siKSkKKwkJcmV0dXJuIEdJVF9SRVBPU0lUT1JZX0lOSVRfU0hBUkVEX1VNQVNLOworCisJZWxzZSBpZiAoIXN0cmNtcChzaGFyZWQsICJ0cnVlIikgfHwgIXN0cmNtcChzaGFyZWQsICJncm91cCIpKQorCQlyZXR1cm4gR0lUX1JFUE9TSVRPUllfSU5JVF9TSEFSRURfR1JPVVA7CisKKwllbHNlIGlmICghc3RyY21wKHNoYXJlZCwgImFsbCIpIHx8ICFzdHJjbXAoc2hhcmVkLCAid29ybGQiKSB8fAorCQkJICFzdHJjbXAoc2hhcmVkLCAiZXZlcnlib2R5IikpCisJCXJldHVybiBHSVRfUkVQT1NJVE9SWV9JTklUX1NIQVJFRF9BTEw7CisKKwllbHNlIGlmIChzaGFyZWRbMF0gPT0gJzAnKSB7CisJCWxvbmcgdmFsOworCQljaGFyICplbmQgPSBOVUxMOworCQl2YWwgPSBzdHJ0b2woc2hhcmVkICsgMSwgJmVuZCwgOCk7CisJCWlmIChlbmQgPT0gc2hhcmVkICsgMSB8fCAqZW5kICE9IDApCisJCQl1c2FnZSgiaW52YWxpZCBvY3RhbCB2YWx1ZSBmb3IgLS1zaGFyZWQiLCBzaGFyZWQpOworCQlyZXR1cm4gKHVpbnQzMl90KXZhbDsKKwl9CisKKwllbHNlCisJCXVzYWdlKCJ1bmtub3duIHZhbHVlIGZvciAtLXNoYXJlZCIsIHNoYXJlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhzdHJ1Y3Qgb3B0cyAqbywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgYXJnc19pbmZvIGFyZ3MgPSBBUkdTX0lORk9fSU5JVDsKKwljb25zdCBjaGFyICpzaGFyZWRhcmc7CisKKwkvKiogUHJvY2VzcyBhcmd1bWVudHMuICovCisKKwlmb3IgKGFyZ3MucG9zID0gMTsgYXJncy5wb3MgPCBhcmdjOyArK2FyZ3MucG9zKSB7CisJCWNoYXIgKmEgPSBhcmd2W2FyZ3MucG9zXTsKKworCQlpZiAoYVswXSA9PSAnLScpCisJCQlvLT5ub19vcHRpb25zID0gMDsKKworCQlpZiAoYVswXSAhPSAnLScpIHsKKwkJCWlmIChvLT5kaXIgIT0gTlVMTCkKKwkJCQl1c2FnZSgiZXh0cmEgYXJndW1lbnQiLCBhKTsKKwkJCW8tPmRpciA9IGE7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXEiKSB8fCAhc3RyY21wKGEsICItLXF1aWV0IikpCisJCQlvLT5xdWlldCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tYmFyZSIpKQorCQkJby0+YmFyZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tc2hhcmVkIikpCisJCQlvLT5zaGFyZWQgPSBHSVRfUkVQT1NJVE9SWV9JTklUX1NIQVJFRF9HUk9VUDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1pbml0aWFsLWNvbW1pdCIpKQorCQkJby0+aW5pdGlhbF9jb21taXQgPSAxOworCQllbHNlIGlmIChtYXRjaF9zdHJfYXJnKCZzaGFyZWRhcmcsICZhcmdzLCAiLS1zaGFyZWQiKSkKKwkJCW8tPnNoYXJlZCA9IHBhcnNlX3NoYXJlZChzaGFyZWRhcmcpOworCQllbHNlIGlmICghbWF0Y2hfc3RyX2FyZygmby0+dGVtcGxhdGUsICZhcmdzLCAiLS10ZW1wbGF0ZSIpIHx8CisJCSAgICAgICAgICFtYXRjaF9zdHJfYXJnKCZvLT5naXRkaXIsICZhcmdzLCAiLS1zZXBhcmF0ZS1naXQtZGlyIikpCisJCQl1c2FnZSgidW5rbm93biBvcHRpb24iLCBhKTsKKwl9CisKKwlpZiAoIW8tPmRpcikKKwkJdXNhZ2UoIm11c3Qgc3BlY2lmeSBkaXJlY3RvcnkgdG8gaW5pdCIsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvbG9nLmMgYi9leGFtcGxlcy9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFjNWZmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvbG9nLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBsaWJnaXQyICJsb2ciIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gd2FsayBoaXN0b3J5IGFuZCBnZXQgY29tbWl0IGluZm8KKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qKgorICogVGhpcyBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgbGliZ2l0MiByZXYgd2Fsa2VyIEFQSXMgdG8gcm91Z2hseQorICogc2ltdWxhdGUgdGhlIG91dHB1dCBvZiBgZ2l0IGxvZ2AgYW5kIGEgZmV3IG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgKiBgZ2l0IGxvZ2AgaGFzIG1hbnkgbWFueSBvcHRpb25zIGFuZCB0aGlzIG9ubHkgc2hvd3MgYSBmZXcgb2YgdGhlbS4KKyAqCisgKiBUaGlzIGRvZXMgbm90IGhhdmU6CisgKgorICogLSBSb2J1c3QgZXJyb3IgaGFuZGxpbmcKKyAqIC0gQ29sb3JpemVkIG9yIHBhZ2luYXRlZCBvdXRwdXQgZm9ybWF0dGluZworICogLSBNb3N0IG9mIHRoZSBgZ2l0IGxvZ2Agb3B0aW9ucworICoKKyAqIFRoaXMgZG9lcyBoYXZlOgorICoKKyAqIC0gRXhhbXBsZXMgb2YgdHJhbnNsYXRpbmcgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBlcXVpdmFsZW50IGxpYmdpdDIKKyAqICAgcmV2d2Fsa2VyIGNvbmZpZ3VyYXRpb24gY2FsbHMKKyAqIC0gU2ltcGxpZmllZCBvcHRpb25zIHRvIGFwcGx5IHBhdGhzcGVjIGxpbWl0cyBhbmQgdG8gc2hvdyBiYXNpYyBkaWZmcworICovCisKKy8qKiBsb2dfc3RhdGUgcmVwcmVzZW50cyB3YWxrZXIgYmVpbmcgY29uZmlndXJlZCB3aGlsZSBoYW5kbGluZyBvcHRpb25zICovCitzdHJ1Y3QgbG9nX3N0YXRlIHsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICpyZXBvZGlyOworCWdpdF9yZXZ3YWxrICp3YWxrZXI7CisJaW50IGhpZGU7CisJaW50IHNvcnRpbmc7CisJaW50IHJldmlzaW9uczsKK307CisKKy8qKiB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdG8gY29uZmlndXJlIHRoZSB3YWxrZXIgKi8KK3N0YXRpYyB2b2lkIHNldF9zb3J0aW5nKHN0cnVjdCBsb2dfc3RhdGUgKnMsIHVuc2lnbmVkIGludCBzb3J0X21vZGUpOworc3RhdGljIHZvaWQgcHVzaF9yZXYoc3RydWN0IGxvZ19zdGF0ZSAqcywgZ2l0X29iamVjdCAqb2JqLCBpbnQgaGlkZSk7CitzdGF0aWMgaW50IGFkZF9yZXZpc2lvbihzdHJ1Y3QgbG9nX3N0YXRlICpzLCBjb25zdCBjaGFyICpyZXZzdHIpOworCisvKiogbG9nX29wdGlvbnMgaG9sZHMgb3RoZXIgY29tbWFuZCBsaW5lIG9wdGlvbnMgdGhhdCBhZmZlY3QgbG9nIG91dHB1dCAqLworc3RydWN0IGxvZ19vcHRpb25zIHsKKwlpbnQgc2hvd19kaWZmOworCWludCBza2lwLCBsaW1pdDsKKwlpbnQgbWluX3BhcmVudHMsIG1heF9wYXJlbnRzOworCWdpdF90aW1lX3QgYmVmb3JlOworCWdpdF90aW1lX3QgYWZ0ZXI7CisJY2hhciAqYXV0aG9yOworCWNoYXIgKmNvbW1pdHRlcjsKK307CisKKy8qKiB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IHBhcnNlIG9wdGlvbnMgYW5kIGhlbHAgd2l0aCBsb2cgb3V0cHV0ICovCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoCisJc3RydWN0IGxvZ19zdGF0ZSAqcywgc3RydWN0IGxvZ19vcHRpb25zICpvcHQsIGludCBhcmdjLCBjaGFyICoqYXJndik7CitzdGF0aWMgdm9pZCBwcmludF90aW1lKGNvbnN0IGdpdF90aW1lICppbnRpbWUsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitzdGF0aWMgdm9pZCBwcmludF9jb21taXQoZ2l0X2NvbW1pdCAqY29tbWl0KTsKK3N0YXRpYyBpbnQgbWF0Y2hfd2l0aF9wYXJlbnQoZ2l0X2NvbW1pdCAqY29tbWl0LCBpbnQgaSwgZ2l0X2RpZmZfb3B0aW9ucyAqKTsKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBpLCBjb3VudCA9IDAsIHByaW50ZWQgPSAwLCBwYXJlbnRzLCBsYXN0X2FyZzsKKwlzdHJ1Y3QgbG9nX3N0YXRlIHM7CisJc3RydWN0IGxvZ19vcHRpb25zIG9wdDsKKwlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCWdpdF9vaWQgb2lkOworCWdpdF9jb21taXQgKmNvbW1pdCA9IE5VTEw7CisJZ2l0X3BhdGhzcGVjICpwcyA9IE5VTEw7CisKKwlnaXRfdGhyZWFkc19pbml0KCk7CisKKwkvKiogUGFyc2UgYXJndW1lbnRzIGFuZCBzZXQgdXAgcmV2d2Fsa2VyLiAqLworCisJbGFzdF9hcmcgPSBwYXJzZV9vcHRpb25zKCZzLCAmb3B0LCBhcmdjLCBhcmd2KTsKKworCWRpZmZvcHRzLnBhdGhzcGVjLnN0cmluZ3MgPSAmYXJndltsYXN0X2FyZ107CisJZGlmZm9wdHMucGF0aHNwZWMuY291bnQJICA9IGFyZ2MgLSBsYXN0X2FyZzsKKwlpZiAoZGlmZm9wdHMucGF0aHNwZWMuY291bnQgPiAwKQorCQljaGVja19sZzIoZ2l0X3BhdGhzcGVjX25ldygmcHMsICZkaWZmb3B0cy5wYXRoc3BlYyksCisJCQkiQnVpbGRpbmcgcGF0aHNwZWMiLCBOVUxMKTsKKworCWlmICghcy5yZXZpc2lvbnMpCisJCWFkZF9yZXZpc2lvbigmcywgTlVMTCk7CisKKwkvKiogVXNlIHRoZSByZXZ3YWxrZXIgdG8gdHJhdmVyc2UgdGhlIGhpc3RvcnkuICovCisKKwlwcmludGVkID0gY291bnQgPSAwOworCisJZm9yICg7ICFnaXRfcmV2d2Fsa19uZXh0KCZvaWQsIHMud2Fsa2VyKTsgZ2l0X2NvbW1pdF9mcmVlKGNvbW1pdCkpIHsKKwkJY2hlY2tfbGcyKGdpdF9jb21taXRfbG9va3VwKCZjb21taXQsIHMucmVwbywgJm9pZCksCisJCQkiRmFpbGVkIHRvIGxvb2sgdXAgY29tbWl0IiwgTlVMTCk7CisKKwkJcGFyZW50cyA9IChpbnQpZ2l0X2NvbW1pdF9wYXJlbnRjb3VudChjb21taXQpOworCQlpZiAocGFyZW50cyA8IG9wdC5taW5fcGFyZW50cykKKwkJCWNvbnRpbnVlOworCQlpZiAob3B0Lm1heF9wYXJlbnRzID4gMCAmJiBwYXJlbnRzID4gb3B0Lm1heF9wYXJlbnRzKQorCQkJY29udGludWU7CisKKwkJaWYgKGRpZmZvcHRzLnBhdGhzcGVjLmNvdW50ID4gMCkgeworCQkJaW50IHVubWF0Y2hlZCA9IHBhcmVudHM7CisKKwkJCWlmIChwYXJlbnRzID09IDApIHsKKwkJCQlnaXRfdHJlZSAqdHJlZTsKKwkJCQljaGVja19sZzIoZ2l0X2NvbW1pdF90cmVlKCZ0cmVlLCBjb21taXQpLCAiR2V0IHRyZWUiLCBOVUxMKTsKKwkJCQlpZiAoZ2l0X3BhdGhzcGVjX21hdGNoX3RyZWUoCisJCQkJCQlOVUxMLCB0cmVlLCBHSVRfUEFUSFNQRUNfTk9fTUFUQ0hfRVJST1IsIHBzKSAhPSAwKQorCQkJCQl1bm1hdGNoZWQgPSAxOworCQkJCWdpdF90cmVlX2ZyZWUodHJlZSk7CisJCQl9IGVsc2UgaWYgKHBhcmVudHMgPT0gMSkgeworCQkJCXVubWF0Y2hlZCA9IG1hdGNoX3dpdGhfcGFyZW50KGNvbW1pdCwgMCwgJmRpZmZvcHRzKSA/IDAgOiAxOworCQkJfSBlbHNlIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgcGFyZW50czsgKytpKSB7CisJCQkJCWlmIChtYXRjaF93aXRoX3BhcmVudChjb21taXQsIGksICZkaWZmb3B0cykpCisJCQkJCQl1bm1hdGNoZWQtLTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICh1bm1hdGNoZWQgPiAwKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNvdW50KysgPCBvcHQuc2tpcCkKKwkJCWNvbnRpbnVlOworCQlpZiAob3B0LmxpbWl0ICE9IC0xICYmIHByaW50ZWQrKyA+PSBvcHQubGltaXQpIHsKKwkJCWdpdF9jb21taXRfZnJlZShjb21taXQpOworCQkJYnJlYWs7CisJCX0KKworCQlwcmludF9jb21taXQoY29tbWl0KTsKKworCQlpZiAob3B0LnNob3dfZGlmZikgeworCQkJZ2l0X3RyZWUgKmEgPSBOVUxMLCAqYiA9IE5VTEw7CisJCQlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CisKKwkJCWlmIChwYXJlbnRzID4gMSkKKwkJCQljb250aW51ZTsKKwkJCWNoZWNrX2xnMihnaXRfY29tbWl0X3RyZWUoJmIsIGNvbW1pdCksICJHZXQgdHJlZSIsIE5VTEwpOworCQkJaWYgKHBhcmVudHMgPT0gMSkgeworCQkJCWdpdF9jb21taXQgKnBhcmVudDsKKwkJCQljaGVja19sZzIoZ2l0X2NvbW1pdF9wYXJlbnQoJnBhcmVudCwgY29tbWl0LCAwKSwgIkdldCBwYXJlbnQiLCBOVUxMKTsKKwkJCQljaGVja19sZzIoZ2l0X2NvbW1pdF90cmVlKCZhLCBwYXJlbnQpLCAiVHJlZSBmb3IgcGFyZW50IiwgTlVMTCk7CisJCQkJZ2l0X2NvbW1pdF9mcmVlKHBhcmVudCk7CisJCQl9CisKKwkJCWNoZWNrX2xnMihnaXRfZGlmZl90cmVlX3RvX3RyZWUoCisJCQkJJmRpZmYsIGdpdF9jb21taXRfb3duZXIoY29tbWl0KSwgYSwgYiwgJmRpZmZvcHRzKSwKKwkJCQkiRGlmZiBjb21taXQgd2l0aCBwYXJlbnQiLCBOVUxMKTsKKwkJCWNoZWNrX2xnMigKKyAgICAgICAgICAgICAgICBnaXRfZGlmZl9wcmludChkaWZmLCBHSVRfRElGRl9GT1JNQVRfUEFUQ0gsIGRpZmZfb3V0cHV0LCBOVUxMKSwKKwkJCQkiRGlzcGxheWluZyBkaWZmIiwgTlVMTCk7CisKKwkJCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisJCQlnaXRfdHJlZV9mcmVlKGEpOworCQkJZ2l0X3RyZWVfZnJlZShiKTsKKwkJfQorCX0KKworCWdpdF9wYXRoc3BlY19mcmVlKHBzKTsKKwlnaXRfcmV2d2Fsa19mcmVlKHMud2Fsa2VyKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHMucmVwbyk7CisJZ2l0X3RocmVhZHNfc2h1dGRvd24oKTsKKworCXJldHVybiAwOworfQorCisvKiogUHVzaCBvYmplY3QgKGZvciBoaWRlIG9yIHNob3cpIG9udG8gcmV2d2Fsa2VyLiAqLworc3RhdGljIHZvaWQgcHVzaF9yZXYoc3RydWN0IGxvZ19zdGF0ZSAqcywgZ2l0X29iamVjdCAqb2JqLCBpbnQgaGlkZSkKK3sKKwloaWRlID0gcy0+aGlkZSBeIGhpZGU7CisKKwkvKiogQ3JlYXRlIHJldndhbGtlciBvbiBkZW1hbmQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAqLworCWlmICghcy0+d2Fsa2VyKSB7CisJCWNoZWNrX2xnMihnaXRfcmV2d2Fsa19uZXcoJnMtPndhbGtlciwgcy0+cmVwbyksCisJCQkiQ291bGQgbm90IGNyZWF0ZSByZXZpc2lvbiB3YWxrZXIiLCBOVUxMKTsKKwkJZ2l0X3JldndhbGtfc29ydGluZyhzLT53YWxrZXIsIHMtPnNvcnRpbmcpOworCX0KKworCWlmICghb2JqKQorCQljaGVja19sZzIoZ2l0X3JldndhbGtfcHVzaF9oZWFkKHMtPndhbGtlciksCisJCQkiQ291bGQgbm90IGZpbmQgcmVwb3NpdG9yeSBIRUFEIiwgTlVMTCk7CisJZWxzZSBpZiAoaGlkZSkKKwkJY2hlY2tfbGcyKGdpdF9yZXZ3YWxrX2hpZGUocy0+d2Fsa2VyLCBnaXRfb2JqZWN0X2lkKG9iaikpLAorCQkJIlJlZmVyZW5jZSBkb2VzIG5vdCByZWZlciB0byBhIGNvbW1pdCIsIE5VTEwpOworCWVsc2UKKwkJY2hlY2tfbGcyKGdpdF9yZXZ3YWxrX3B1c2gocy0+d2Fsa2VyLCBnaXRfb2JqZWN0X2lkKG9iaikpLAorCQkJIlJlZmVyZW5jZSBkb2VzIG5vdCByZWZlciB0byBhIGNvbW1pdCIsIE5VTEwpOworCisJZ2l0X29iamVjdF9mcmVlKG9iaik7Cit9CisKKy8qKiBQYXJzZSByZXZpc2lvbiBzdHJpbmcgYW5kIGFkZCByZXZzIHRvIHdhbGtlci4gKi8KK3N0YXRpYyBpbnQgYWRkX3JldmlzaW9uKHN0cnVjdCBsb2dfc3RhdGUgKnMsIGNvbnN0IGNoYXIgKnJldnN0cikKK3sKKwlnaXRfcmV2c3BlYyByZXZzOworCWludCBoaWRlID0gMDsKKworCS8qKiBPcGVuIHJlcG8gb24gZGVtYW5kIGlmIGl0IGlzbid0IGFscmVhZHkgb3Blbi4gKi8KKwlpZiAoIXMtPnJlcG8pIHsKKwkJaWYgKCFzLT5yZXBvZGlyKSBzLT5yZXBvZGlyID0gIi4iOworCQljaGVja19sZzIoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnMtPnJlcG8sIHMtPnJlcG9kaXIsIDAsIE5VTEwpLAorCQkJIkNvdWxkIG5vdCBvcGVuIHJlcG9zaXRvcnkiLCBzLT5yZXBvZGlyKTsKKwl9CisKKwlpZiAoIXJldnN0cikgeworCQlwdXNoX3JldihzLCBOVUxMLCBoaWRlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpyZXZzdHIgPT0gJ14nKSB7CisJCXJldnMuZmxhZ3MgPSBHSVRfUkVWUEFSU0VfU0lOR0xFOworCQloaWRlID0gIWhpZGU7CisKKwkJaWYgKGdpdF9yZXZwYXJzZV9zaW5nbGUoJnJldnMuZnJvbSwgcy0+cmVwbywgcmV2c3RyICsgMSkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoZ2l0X3JldnBhcnNlKCZyZXZzLCBzLT5yZXBvLCByZXZzdHIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKChyZXZzLmZsYWdzICYgR0lUX1JFVlBBUlNFX1NJTkdMRSkgIT0gMCkKKwkJcHVzaF9yZXYocywgcmV2cy5mcm9tLCBoaWRlKTsKKwllbHNlIHsKKwkJcHVzaF9yZXYocywgcmV2cy50bywgaGlkZSk7CisKKwkJaWYgKChyZXZzLmZsYWdzICYgR0lUX1JFVlBBUlNFX01FUkdFX0JBU0UpICE9IDApIHsKKwkJCWdpdF9vaWQgYmFzZTsKKwkJCWNoZWNrX2xnMihnaXRfbWVyZ2VfYmFzZSgmYmFzZSwgcy0+cmVwbywKKwkJCQlnaXRfb2JqZWN0X2lkKHJldnMuZnJvbSksIGdpdF9vYmplY3RfaWQocmV2cy50bykpLAorCQkJCSJDb3VsZCBub3QgZmluZCBtZXJnZSBiYXNlIiwgcmV2c3RyKTsKKwkJCWNoZWNrX2xnMigKKwkJCQlnaXRfb2JqZWN0X2xvb2t1cCgmcmV2cy50bywgcy0+cmVwbywgJmJhc2UsIEdJVF9PQkpfQ09NTUlUKSwKKwkJCQkiQ291bGQgbm90IGZpbmQgbWVyZ2UgYmFzZSBjb21taXQiLCBOVUxMKTsKKworCQkJcHVzaF9yZXYocywgcmV2cy50bywgaGlkZSk7CisJCX0KKworCQlwdXNoX3JldihzLCByZXZzLmZyb20sICFoaWRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqIFVwZGF0ZSByZXZ3YWxrZXIgd2l0aCBzb3J0aW5nIG1vZGUuICovCitzdGF0aWMgdm9pZCBzZXRfc29ydGluZyhzdHJ1Y3QgbG9nX3N0YXRlICpzLCB1bnNpZ25lZCBpbnQgc29ydF9tb2RlKQoreworCS8qKiBPcGVuIHJlcG8gb24gZGVtYW5kIGlmIGl0IGlzbid0IGFscmVhZHkgb3Blbi4gKi8KKwlpZiAoIXMtPnJlcG8pIHsKKwkJaWYgKCFzLT5yZXBvZGlyKSBzLT5yZXBvZGlyID0gIi4iOworCQljaGVja19sZzIoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnMtPnJlcG8sIHMtPnJlcG9kaXIsIDAsIE5VTEwpLAorCQkJIkNvdWxkIG5vdCBvcGVuIHJlcG9zaXRvcnkiLCBzLT5yZXBvZGlyKTsKKwl9CisKKwkvKiogQ3JlYXRlIHJldndhbGtlciBvbiBkZW1hbmQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAqLworCWlmICghcy0+d2Fsa2VyKQorCQljaGVja19sZzIoZ2l0X3JldndhbGtfbmV3KCZzLT53YWxrZXIsIHMtPnJlcG8pLAorCQkJIkNvdWxkIG5vdCBjcmVhdGUgcmV2aXNpb24gd2Fsa2VyIiwgTlVMTCk7CisKKwlpZiAoc29ydF9tb2RlID09IEdJVF9TT1JUX1JFVkVSU0UpCisJCXMtPnNvcnRpbmcgPSBzLT5zb3J0aW5nIF4gR0lUX1NPUlRfUkVWRVJTRTsKKwllbHNlCisJCXMtPnNvcnRpbmcgPSBzb3J0X21vZGUgfCAocy0+c29ydGluZyAmIEdJVF9TT1JUX1JFVkVSU0UpOworCisJZ2l0X3JldndhbGtfc29ydGluZyhzLT53YWxrZXIsIHMtPnNvcnRpbmcpOworfQorCisvKiogSGVscGVyIHRvIGZvcm1hdCBhIGdpdF90aW1lIHZhbHVlIGxpa2UgR2l0LiAqLworc3RhdGljIHZvaWQgcHJpbnRfdGltZShjb25zdCBnaXRfdGltZSAqaW50aW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY2hhciBzaWduLCBvdXRbMzJdOworCXN0cnVjdCB0bSAqaW50bTsKKwlpbnQgb2Zmc2V0LCBob3VycywgbWludXRlczsKKwl0aW1lX3QgdDsKKworCW9mZnNldCA9IGludGltZS0+b2Zmc2V0OworCWlmIChvZmZzZXQgPCAwKSB7CisJCXNpZ24gPSAnLSc7CisJCW9mZnNldCA9IC1vZmZzZXQ7CisJfSBlbHNlIHsKKwkJc2lnbiA9ICcrJzsKKwl9CisKKwlob3VycyAgID0gb2Zmc2V0IC8gNjA7CisJbWludXRlcyA9IG9mZnNldCAlIDYwOworCisJdCA9ICh0aW1lX3QpaW50aW1lLT50aW1lICsgKGludGltZS0+b2Zmc2V0ICogNjApOworCisJaW50bSA9IGdtdGltZSgmdCk7CisJc3RyZnRpbWUob3V0LCBzaXplb2Yob3V0KSwgIiVhICViICVlICVUICVZIiwgaW50bSk7CisKKwlwcmludGYoIiVzJXMgJWMlMDJkJTAyZFxuIiwgcHJlZml4LCBvdXQsIHNpZ24sIGhvdXJzLCBtaW51dGVzKTsKK30KKworLyoqIEhlbHBlciB0byBwcmludCBhIGNvbW1pdCBvYmplY3QuICovCitzdGF0aWMgdm9pZCBwcmludF9jb21taXQoZ2l0X2NvbW1pdCAqY29tbWl0KQoreworCWNoYXIgYnVmW0dJVF9PSURfSEVYU1ogKyAxXTsKKwlpbnQgaSwgY291bnQ7CisJY29uc3QgZ2l0X3NpZ25hdHVyZSAqc2lnOworCWNvbnN0IGNoYXIgKnNjYW4sICplb2w7CisKKwlnaXRfb2lkX3Rvc3RyKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGdpdF9jb21taXRfaWQoY29tbWl0KSk7CisJcHJpbnRmKCJjb21taXQgJXNcbiIsIGJ1Zik7CisKKwlpZiAoKGNvdW50ID0gKGludClnaXRfY29tbWl0X3BhcmVudGNvdW50KGNvbW1pdCkpID4gMSkgeworCQlwcmludGYoIk1lcmdlOiIpOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJZ2l0X29pZF90b3N0cihidWYsIDgsIGdpdF9jb21taXRfcGFyZW50X2lkKGNvbW1pdCwgaSkpOworCQkJcHJpbnRmKCIgJXMiLCBidWYpOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwlpZiAoKHNpZyA9IGdpdF9jb21taXRfYXV0aG9yKGNvbW1pdCkpICE9IE5VTEwpIHsKKwkJcHJpbnRmKCJBdXRob3I6ICVzIDwlcz5cbiIsIHNpZy0+bmFtZSwgc2lnLT5lbWFpbCk7CisJCXByaW50X3RpbWUoJnNpZy0+d2hlbiwgIkRhdGU6ICAgIik7CisJfQorCXByaW50ZigiXG4iKTsKKworCWZvciAoc2NhbiA9IGdpdF9jb21taXRfbWVzc2FnZShjb21taXQpOyBzY2FuICYmICpzY2FuOyApIHsKKwkJZm9yIChlb2wgPSBzY2FuOyAqZW9sICYmICplb2wgIT0gJ1xuJzsgKytlb2wpIC8qIGZpbmQgZW9sICovOworCisJCXByaW50ZigiICAgICUuKnNcbiIsIChpbnQpKGVvbCAtIHNjYW4pLCBzY2FuKTsKKwkJc2NhbiA9ICplb2wgPyBlb2wgKyAxIDogTlVMTDsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCisvKiogSGVscGVyIHRvIGZpbmQgaG93IG1hbnkgZmlsZXMgaW4gYSBjb21taXQgY2hhbmdlZCBmcm9tIGl0cyBudGggcGFyZW50LiAqLworc3RhdGljIGludCBtYXRjaF93aXRoX3BhcmVudChnaXRfY29tbWl0ICpjb21taXQsIGludCBpLCBnaXRfZGlmZl9vcHRpb25zICpvcHRzKQoreworCWdpdF9jb21taXQgKnBhcmVudDsKKwlnaXRfdHJlZSAqYSwgKmI7CisJZ2l0X2RpZmYgKmRpZmY7CisJaW50IG5kZWx0YXM7CisKKwljaGVja19sZzIoCisJCWdpdF9jb21taXRfcGFyZW50KCZwYXJlbnQsIGNvbW1pdCwgKHNpemVfdClpKSwgIkdldCBwYXJlbnQiLCBOVUxMKTsKKwljaGVja19sZzIoZ2l0X2NvbW1pdF90cmVlKCZhLCBwYXJlbnQpLCAiVHJlZSBmb3IgcGFyZW50IiwgTlVMTCk7CisJY2hlY2tfbGcyKGdpdF9jb21taXRfdHJlZSgmYiwgY29tbWl0KSwgIlRyZWUgZm9yIGNvbW1pdCIsIE5VTEwpOworCWNoZWNrX2xnMigKKwkJZ2l0X2RpZmZfdHJlZV90b190cmVlKCZkaWZmLCBnaXRfY29tbWl0X293bmVyKGNvbW1pdCksIGEsIGIsIG9wdHMpLAorCQkiQ2hlY2tpbmcgZGlmZiBiZXR3ZWVuIHBhcmVudCBhbmQgY29tbWl0IiwgTlVMTCk7CisKKwluZGVsdGFzID0gKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpOworCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlnaXRfdHJlZV9mcmVlKGEpOworCWdpdF90cmVlX2ZyZWUoYik7CisJZ2l0X2NvbW1pdF9mcmVlKHBhcmVudCk7CisKKwlyZXR1cm4gbmRlbHRhcyA+IDA7Cit9CisKKy8qKiBQcmludCBhIHVzYWdlIG1lc3NhZ2UgZm9yIHRoZSBwcm9ncmFtLiAqLworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqYXJnKQoreworCWlmIChtZXNzYWdlICYmIGFyZykKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG1lc3NhZ2UsIGFyZyk7CisJZWxzZSBpZiAobWVzc2FnZSkKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogbG9nIFs8b3B0aW9ucz5dXG4iKTsKKwlleGl0KDEpOworfQorCisvKiogUGFyc2Ugc29tZSBsb2cgY29tbWFuZCBsaW5lIG9wdGlvbnMuICovCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnMoCisJc3RydWN0IGxvZ19zdGF0ZSAqcywgc3RydWN0IGxvZ19vcHRpb25zICpvcHQsIGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgYXJnc19pbmZvIGFyZ3MgPSBBUkdTX0lORk9fSU5JVDsKKworCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKKwlzLT5zb3J0aW5nID0gR0lUX1NPUlRfVElNRTsKKworCW1lbXNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CisJb3B0LT5tYXhfcGFyZW50cyA9IC0xOworCW9wdC0+bGltaXQgPSAtMTsKKworCWZvciAoYXJncy5wb3MgPSAxOyBhcmdzLnBvcyA8IGFyZ2M7ICsrYXJncy5wb3MpIHsKKwkJY29uc3QgY2hhciAqYSA9IGFyZ3ZbYXJncy5wb3NdOworCisJCWlmIChhWzBdICE9ICctJykgeworCQkJaWYgKCFhZGRfcmV2aXNpb24ocywgYSkpCisJCQkJcy0+cmV2aXNpb25zKys7CisJCQllbHNlCisJCQkJLyoqIFRyeSBmYWlsZWQgcmV2aXNpb24gcGFyc2UgYXMgZmlsZW5hbWUuICovCisJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhLCAiLS0iKSkgeworCQkJKythcmdzLnBvczsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tZGF0ZS1vcmRlciIpKQorCQkJc2V0X3NvcnRpbmcocywgR0lUX1NPUlRfVElNRSk7CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tdG9wby1vcmRlciIpKQorCQkJc2V0X3NvcnRpbmcocywgR0lUX1NPUlRfVE9QT0xPR0lDQUwpOworCQllbHNlIGlmICghc3RyY21wKGEsICItLXJldmVyc2UiKSkKKwkJCXNldF9zb3J0aW5nKHMsIEdJVF9TT1JUX1JFVkVSU0UpOworCQllbHNlIGlmIChtYXRjaF9zdHJfYXJnKCZzLT5yZXBvZGlyLCAmYXJncywgIi0tZ2l0LWRpciIpKQorCQkJLyoqIEZvdW5kIGdpdC1kaXIuICovOworCQllbHNlIGlmIChtYXRjaF9pbnRfYXJnKCZvcHQtPnNraXAsICZhcmdzLCAiLS1za2lwIiwgMCkpCisJCQkvKiogRm91bmQgdmFsaWQgLS1za2lwLiAqLzsKKwkJZWxzZSBpZiAobWF0Y2hfaW50X2FyZygmb3B0LT5saW1pdCwgJmFyZ3MsICItLW1heC1jb3VudCIsIDApKQorCQkJLyoqIEZvdW5kIHZhbGlkIC0tbWF4LWNvdW50LiAqLzsKKwkJZWxzZSBpZiAoYVsxXSA+PSAnMCcgJiYgYVsxXSA8PSAnOScpCisJCQlpc19pbnRlZ2VyKCZvcHQtPmxpbWl0LCBhICsgMSwgMCk7CisJCWVsc2UgaWYgKG1hdGNoX2ludF9hcmcoJm9wdC0+bGltaXQsICZhcmdzLCAiLW4iLCAwKSkKKwkJCS8qKiBGb3VuZCB2YWxpZCAtbi4gKi87CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0tbWVyZ2VzIikpCisJCQlvcHQtPm1pbl9wYXJlbnRzID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1uby1tZXJnZXMiKSkKKwkJCW9wdC0+bWF4X3BhcmVudHMgPSAxOworCQllbHNlIGlmICghc3RyY21wKGEsICItLW5vLW1pbi1wYXJlbnRzIikpCisJCQlvcHQtPm1pbl9wYXJlbnRzID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLS1uby1tYXgtcGFyZW50cyIpKQorCQkJb3B0LT5tYXhfcGFyZW50cyA9IC0xOworCQllbHNlIGlmIChtYXRjaF9pbnRfYXJnKCZvcHQtPm1heF9wYXJlbnRzLCAmYXJncywgIi0tbWF4LXBhcmVudHM9IiwgMSkpCisJCQkvKiogRm91bmQgdmFsaWQgLS1tYXgtcGFyZW50cy4gKi87CisJCWVsc2UgaWYgKG1hdGNoX2ludF9hcmcoJm9wdC0+bWluX3BhcmVudHMsICZhcmdzLCAiLS1taW4tcGFyZW50cz0iLCAwKSkKKwkJCS8qKiBGb3VuZCB2YWxpZCAtLW1pbl9wYXJlbnRzLiAqLzsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXAiKSB8fCAhc3RyY21wKGEsICItdSIpIHx8ICFzdHJjbXAoYSwgIi0tcGF0Y2giKSkKKwkJCW9wdC0+c2hvd19kaWZmID0gMTsKKwkJZWxzZQorCQkJdXNhZ2UoIlVuc3VwcG9ydGVkIGFyZ3VtZW50IiwgYSk7CisJfQorCisJcmV0dXJuIGFyZ3MucG9zOworfQorCmRpZmYgLS1naXQgYS9leGFtcGxlcy9uZXR3b3JrL01ha2VmaWxlIGIvZXhhbXBsZXMvbmV0d29yay9NYWtlZmlsZQppbmRleCA4MTBlYjcwLi5mNjVjNmNiIDEwMDY0NAotLS0gYS9leGFtcGxlcy9uZXR3b3JrL01ha2VmaWxlCisrKyBiL2V4YW1wbGVzL25ldHdvcmsvTWFrZWZpbGUKQEAgLTExLDcgKzExLDggQEAKICAgbHMtcmVtb3RlLm8gXAogICBmZXRjaC5vIFwKICAgY2xvbmUubyBcCi0gIGluZGV4LXBhY2subworICBpbmRleC1wYWNrLm8gXAorICBjb21tb24ubwogCiBhbGw6ICQoT0JKRUNUUykKIAkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyBnaXQyICQoT0JKRUNUUykgJChMSUJSQVJJRVMpCmRpZmYgLS1naXQgYS9leGFtcGxlcy9uZXR3b3JrL2Nsb25lLmMgYi9leGFtcGxlcy9uZXR3b3JrL2Nsb25lLmMKaW5kZXggMDBjMjVjMS4uNGRmNDdlYiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvbmV0d29yay9jbG9uZS5jCisrKyBiL2V4YW1wbGVzL25ldHdvcmsvY2xvbmUuYwpAQCAtOSwxOSArOSw2IEBACiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKLS8qIFNoYW1lbGVzc2x5IGJvcnJvd2VkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNDE3ODM3LwotICogd2l0aCBwZXJtaXNzaW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIE1hcnRpbiBQb29sLgotICogaHR0cDovL3NvdXJjZWZyb2cubmV0L3dlYmxvZy9zb2Z0d2FyZS9sYW5ndWFnZXMvQy91bnVzZWQuaHRtbAotICovCi0jaWZkZWYgVU5VU0VECi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKQotIyBkZWZpbmUgVU5VU0VEKHgpIFVOVVNFRF8gIyMgeCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQotI2VsaWYgZGVmaW5lZChfX0xDTElOVF9fKQotIyBkZWZpbmUgVU5VU0VEKHgpIC8qQHVudXNlZEAqLyB4Ci0jZWxzZQotIyBkZWZpbmUgVU5VU0VEKHgpIHgKLSNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBwcm9ncmVzc19kYXRhIHsKIAlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgZmV0Y2hfcHJvZ3Jlc3M7CiAJc2l6ZV90IGNvbXBsZXRlZF9zdGVwczsKQEAgLTM4LDEzICsyNSwxOSBAQAogCQk6IDAuZjsKIAlpbnQga2J5dGVzID0gcGQtPmZldGNoX3Byb2dyZXNzLnJlY2VpdmVkX2J5dGVzIC8gMTAyNDsKIAotCXByaW50ZigibmV0ICUzZCUlICglNGQga2IsICU1ZC8lNWQpICAvICBpZHggJTNkJSUgKCU1ZC8lNWQpICAvICBjaGsgJTNkJSUgKCU0IiBQUkl1WiAiLyU0IiBQUkl1WiAiKSAlc1xuIiwKKwlpZiAocGQtPmZldGNoX3Byb2dyZXNzLnJlY2VpdmVkX29iamVjdHMgPT0gcGQtPmZldGNoX3Byb2dyZXNzLnRvdGFsX29iamVjdHMpIHsKKwkJcHJpbnRmKCJSZXNvbHZpbmcgZGVsdGFzICVkLyVkXHIiLAorCQkgICAgICAgcGQtPmZldGNoX3Byb2dyZXNzLmluZGV4ZWRfZGVsdGFzLAorCQkgICAgICAgcGQtPmZldGNoX3Byb2dyZXNzLnRvdGFsX2RlbHRhcyk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJuZXQgJTNkJSUgKCU0ZCBrYiwgJTVkLyU1ZCkgIC8gIGlkeCAlM2QlJSAoJTVkLyU1ZCkgIC8gIGNoayAlM2QlJSAoJTQiIFBSSXVaICIvJTQiIFBSSXVaICIpICVzXG4iLAogCQkgICBuZXR3b3JrX3BlcmNlbnQsIGtieXRlcywKIAkJICAgcGQtPmZldGNoX3Byb2dyZXNzLnJlY2VpdmVkX29iamVjdHMsIHBkLT5mZXRjaF9wcm9ncmVzcy50b3RhbF9vYmplY3RzLAogCQkgICBpbmRleF9wZXJjZW50LCBwZC0+ZmV0Y2hfcHJvZ3Jlc3MuaW5kZXhlZF9vYmplY3RzLCBwZC0+ZmV0Y2hfcHJvZ3Jlc3MudG90YWxfb2JqZWN0cywKIAkJICAgY2hlY2tvdXRfcGVyY2VudCwKIAkJICAgcGQtPmNvbXBsZXRlZF9zdGVwcywgcGQtPnRvdGFsX3N0ZXBzLAogCQkgICBwZC0+cGF0aCk7CisJfQogfQogCiBzdGF0aWMgaW50IGZldGNoX3Byb2dyZXNzKGNvbnN0IGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMsIHZvaWQgKnBheWxvYWQpCkBAIC02MywyNCArNTYsNiBAQAogCXByaW50X3Byb2dyZXNzKHBkKTsKIH0KIAotc3RhdGljIGludCBjcmVkX2FjcXVpcmUoZ2l0X2NyZWQgKipvdXQsCi0JCWNvbnN0IGNoYXIgKiBVTlVTRUQodXJsKSwKLQkJY29uc3QgY2hhciAqIFVOVVNFRCh1c2VybmFtZV9mcm9tX3VybCksCi0JCXVuc2lnbmVkIGludCBVTlVTRUQoYWxsb3dlZF90eXBlcyksCi0JCXZvaWQgKiBVTlVTRUQocGF5bG9hZCkpCi17Ci0JY2hhciB1c2VybmFtZVsxMjhdID0gezB9OwotCWNoYXIgcGFzc3dvcmRbMTI4XSA9IHswfTsKLQotCXByaW50ZigiVXNlcm5hbWU6ICIpOwotCXNjYW5mKCIlcyIsIHVzZXJuYW1lKTsKLQotCS8qIFl1cC4gUmlnaHQgdGhlcmUgb24geW91ciB0ZXJtaW5hbC4gQ2FyZWZ1bCB3aGVyZSB5b3UgY29weS9wYXN0ZSBvdXRwdXQuICovCi0JcHJpbnRmKCJQYXNzd29yZDogIik7Ci0Jc2NhbmYoIiVzIiwgcGFzc3dvcmQpOwotCi0JcmV0dXJuIGdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dF9uZXcob3V0LCB1c2VybmFtZSwgcGFzc3dvcmQpOwotfQogCiBpbnQgZG9fY2xvbmUoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKQEAgLTEwNSw5ICs4MCw5IEBACiAJY2hlY2tvdXRfb3B0cy5wcm9ncmVzc19jYiA9IGNoZWNrb3V0X3Byb2dyZXNzOwogCWNoZWNrb3V0X29wdHMucHJvZ3Jlc3NfcGF5bG9hZCA9ICZwZDsKIAljbG9uZV9vcHRzLmNoZWNrb3V0X29wdHMgPSBjaGVja291dF9vcHRzOwotCWNsb25lX29wdHMuZmV0Y2hfcHJvZ3Jlc3NfY2IgPSAmZmV0Y2hfcHJvZ3Jlc3M7Ci0JY2xvbmVfb3B0cy5mZXRjaF9wcm9ncmVzc19wYXlsb2FkID0gJnBkOwotCWNsb25lX29wdHMuY3JlZF9hY3F1aXJlX2NiID0gY3JlZF9hY3F1aXJlOworCWNsb25lX29wdHMucmVtb3RlX2NhbGxiYWNrcy50cmFuc2Zlcl9wcm9ncmVzcyA9ICZmZXRjaF9wcm9ncmVzczsKKwljbG9uZV9vcHRzLnJlbW90ZV9jYWxsYmFja3MuY3JlZGVudGlhbHMgPSBjcmVkX2FjcXVpcmVfY2I7CisJY2xvbmVfb3B0cy5yZW1vdGVfY2FsbGJhY2tzLnBheWxvYWQgPSAmcGQ7CiAKIAkvLyBEbyB0aGUgY2xvbmUKIAllcnJvciA9IGdpdF9jbG9uZSgmY2xvbmVkX3JlcG8sIHVybCwgcGF0aCwgJmNsb25lX29wdHMpOwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvbmV0d29yay9jb21tb24uYyBiL2V4YW1wbGVzL25ldHdvcmsvY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyM2VlZAotLS0gL2Rldi9udWxsCisrKyBiL2V4YW1wbGVzL25ldHdvcmsvY29tbW9uLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qIFNoYW1lbGVzc2x5IGJvcnJvd2VkIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNDE3ODM3LworICogd2l0aCBwZXJtaXNzaW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIE1hcnRpbiBQb29sLgorICogaHR0cDovL3NvdXJjZWZyb2cubmV0L3dlYmxvZy9zb2Z0d2FyZS9sYW5ndWFnZXMvQy91bnVzZWQuaHRtbAorICovCisjaWZkZWYgVU5VU0VECisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorIyBkZWZpbmUgVU5VU0VEKHgpIFVOVVNFRF8gIyMgeCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2VsaWYgZGVmaW5lZChfX0xDTElOVF9fKQorIyBkZWZpbmUgVU5VU0VEKHgpIC8qQHVudXNlZEAqLyB4CisjZWxzZQorIyBkZWZpbmUgVU5VU0VEKHgpIHgKKyNlbmRpZgorCitpbnQgY3JlZF9hY3F1aXJlX2NiKGdpdF9jcmVkICoqb3V0LAorCQljb25zdCBjaGFyICogVU5VU0VEKHVybCksCisJCWNvbnN0IGNoYXIgKiBVTlVTRUQodXNlcm5hbWVfZnJvbV91cmwpLAorCQl1bnNpZ25lZCBpbnQgVU5VU0VEKGFsbG93ZWRfdHlwZXMpLAorCQl2b2lkICogVU5VU0VEKHBheWxvYWQpKQoreworCWNoYXIgdXNlcm5hbWVbMTI4XSA9IHswfTsKKwljaGFyIHBhc3N3b3JkWzEyOF0gPSB7MH07CisKKwlwcmludGYoIlVzZXJuYW1lOiAiKTsKKwlzY2FuZigiJXMiLCB1c2VybmFtZSk7CisKKwkvKiBZdXAuIFJpZ2h0IHRoZXJlIG9uIHlvdXIgdGVybWluYWwuIENhcmVmdWwgd2hlcmUgeW91IGNvcHkvcGFzdGUgb3V0cHV0LiAqLworCXByaW50ZigiUGFzc3dvcmQ6ICIpOworCXNjYW5mKCIlcyIsIHBhc3N3b3JkKTsKKworCXJldHVybiBnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHRfbmV3KG91dCwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL25ldHdvcmsvY29tbW9uLmggYi9leGFtcGxlcy9uZXR3b3JrL2NvbW1vbi5oCmluZGV4IGE0Y2ZhMWEuLjFiMDljYWEgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL25ldHdvcmsvY29tbW9uLmgKKysrIGIvZXhhbXBsZXMvbmV0d29yay9jb21tb24uaApAQCAtMTIsNiArMTIsMTIgQEAKIGludCBpbmRleF9wYWNrKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IGRvX2Nsb25lKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogCitpbnQgY3JlZF9hY3F1aXJlX2NiKGdpdF9jcmVkICoqb3V0LAorCQljb25zdCBjaGFyICogdXJsLAorCQljb25zdCBjaGFyICogdXNlcm5hbWVfZnJvbV91cmwsCisJCXVuc2lnbmVkIGludCBhbGxvd2VkX3R5cGVzLAorCQl2b2lkICpwYXlsb2FkKTsKKwogI2lmbmRlZiBQUkl1WgogLyogRGVmaW5lIHRoZSBwcmludGYgZm9ybWF0IHNwZWNpZmVyIHRvIHVzZSBmb3Igc2l6ZV90IG91dHB1dCAqLwogI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCmRpZmYgLS1naXQgYS9leGFtcGxlcy9uZXR3b3JrL2ZldGNoLmMgYi9leGFtcGxlcy9uZXR3b3JrL2ZldGNoLmMKaW5kZXggNjAyMGVjNi4uNDc0YjQ1YiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvbmV0d29yay9mZXRjaC5jCisrKyBiL2V4YW1wbGVzL25ldHdvcmsvZmV0Y2guYwpAQCAtMTQsMTEgKzE0LDEyIEBACiAJaW50IGZpbmlzaGVkOwogfTsKIAotc3RhdGljIHZvaWQgcHJvZ3Jlc3NfY2IoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwcm9ncmVzc19jYihjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHZvaWQgKmRhdGEpCiB7CiAJKHZvaWQpZGF0YTsKIAlwcmludGYoInJlbW90ZTogJS4qcyIsIGxlbiwgc3RyKTsKIAlmZmx1c2goc3Rkb3V0KTsgLyogV2UgZG9uJ3QgaGF2ZSB0aGUgXG4gdG8gZm9yY2UgdGhlIGZsdXNoICovCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkICpkb3dubG9hZCh2b2lkICpwdHIpCkBAIC0zNSw3ICszNiw3IEBACiAJLy8gRG93bmxvYWQgdGhlIHBhY2tmaWxlIGFuZCBpbmRleCBpdC4gVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZQogCS8vIGFtb3VudCBvZiByZWNlaXZlZCBkYXRhIGFuZCB0aGUgaW5kZXhlciBzdGF0cyB3aGljaCBsZXRzIHlvdQogCS8vIGluZm9ybSB0aGUgdXNlciBhYm91dCBwcm9ncmVzcy4KLQlpZiAoZ2l0X3JlbW90ZV9kb3dubG9hZChkYXRhLT5yZW1vdGUsIE5VTEwsIE5VTEwpIDwgMCkgeworCWlmIChnaXRfcmVtb3RlX2Rvd25sb2FkKGRhdGEtPnJlbW90ZSkgPCAwKSB7CiAJCWRhdGEtPnJldCA9IC0xOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNDcsNiArNDgsMTEgQEAKIAlyZXR1cm4gJmRhdGEtPnJldDsKIH0KIAorLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGZvciBlYWNoIHJlbW90ZS10cmFja2luZyBicmFuY2ggdGhhdCBnZXRzCisgKiB1cGRhdGVkLiBUaGUgbWVzc2FnZSB3ZSBvdXRwdXQgZGVwZW5kcyBvbiB3aGV0aGVyIGl0J3MgYSBuZXcgb25lIG9yCisgKiBhbiB1cGRhdGUuCisgKi8KIHN0YXRpYyBpbnQgdXBkYXRlX2NiKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IGdpdF9vaWQgKmEsIGNvbnN0IGdpdF9vaWQgKmIsIHZvaWQgKmRhdGEpCiB7CiAJY2hhciBhX3N0cltHSVRfT0lEX0hFWFNaKzFdLCBiX3N0cltHSVRfT0lEX0hFWFNaKzFdOwpAQCAtNjYsNiArNzIsNyBAQAogCXJldHVybiAwOwogfQogCisvKiogRW50cnkgcG9pbnQgZm9yIHRoaXMgY29tbWFuZCAqLwogaW50IGZldGNoKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJZ2l0X3JlbW90ZSAqcmVtb3RlID0gTlVMTDsKQEAgLTkxLDYgKzk4LDcgQEAKIAkvLyBTZXQgdXAgdGhlIGNhbGxiYWNrcyAob25seSB1cGRhdGVfdGlwcyBmb3Igbm93KQogCWNhbGxiYWNrcy51cGRhdGVfdGlwcyA9ICZ1cGRhdGVfY2I7CiAJY2FsbGJhY2tzLnByb2dyZXNzID0gJnByb2dyZXNzX2NiOworCWNhbGxiYWNrcy5jcmVkZW50aWFscyA9IGNyZWRfYWNxdWlyZV9jYjsKIAlnaXRfcmVtb3RlX3NldF9jYWxsYmFja3MocmVtb3RlLCAmY2FsbGJhY2tzKTsKIAogCS8vIFNldCB1cCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBiYWNrZ3JvdW5kIHdvcmtlciB0aHJlYWQKQEAgLTExMiwxMCArMTIwLDE0IEBACiAJZG8gewogCQl1c2xlZXAoMTAwMDApOwogCi0JCWlmIChzdGF0cy0+dG90YWxfb2JqZWN0cyA+IDApCisJCWlmIChzdGF0cy0+cmVjZWl2ZWRfb2JqZWN0cyA9PSBzdGF0cy0+dG90YWxfb2JqZWN0cykgeworCQkJcHJpbnRmKCJSZXNvbHZpbmcgZGVsdGFzICVkLyVkXHIiLAorCQkJICAgICAgIHN0YXRzLT5pbmRleGVkX2RlbHRhcywgc3RhdHMtPnRvdGFsX2RlbHRhcyk7CisJCX0gZWxzZSBpZiAoc3RhdHMtPnRvdGFsX29iamVjdHMgPiAwKSB7CiAJCQlwcmludGYoIlJlY2VpdmVkICVkLyVkIG9iamVjdHMgKCVkKSBpbiAlIiBQUkl1WiAiIGJ5dGVzXHIiLAogCQkJICAgICAgIHN0YXRzLT5yZWNlaXZlZF9vYmplY3RzLCBzdGF0cy0+dG90YWxfb2JqZWN0cywKIAkJCQkgICBzdGF0cy0+aW5kZXhlZF9vYmplY3RzLCBzdGF0cy0+cmVjZWl2ZWRfYnl0ZXMpOworCQl9CiAJfSB3aGlsZSAoIWRhdGEuZmluaXNoZWQpOwogCiAJaWYgKGRhdGEucmV0IDwgMCkKQEAgLTEyNCw4ICsxMzYsMTggQEAKIAlwdGhyZWFkX2pvaW4od29ya2VyLCBOVUxMKTsKICNlbmRpZgogCi0JcHJpbnRmKCJcclJlY2VpdmVkICVkLyVkIG9iamVjdHMgaW4gJXp1IGJ5dGVzXG4iLAorCS8qKgorCSAqIElmIHRoZXJlIGFyZSBsb2NhbCBvYmplY3RzICh3ZSBnb3QgYSB0aGluIHBhY2spLCB0aGVuIHRlbGwKKwkgKiB0aGUgdXNlciBob3cgbWFueSBvYmplY3RzIHdlIHNhdmVkIGZyb20gaGF2aW5nIHRvIGNyb3NzIHRoZQorCSAqIG5ldHdvcmsuCisJICovCisJaWYgKHN0YXRzLT5sb2NhbF9vYmplY3RzID4gMCkgeworCQlwcmludGYoIlxyUmVjZWl2ZWQgJWQvJWQgb2JqZWN0cyBpbiAlenUgYnl0ZXMgKHVzZWQgJWQgbG9jYWwgb2JqZWN0cylcbiIsCisJCSAgICAgICBzdGF0cy0+aW5kZXhlZF9vYmplY3RzLCBzdGF0cy0+dG90YWxfb2JqZWN0cywgc3RhdHMtPnJlY2VpdmVkX2J5dGVzLCBzdGF0cy0+bG9jYWxfb2JqZWN0cyk7CisJfSBlbHNleworCQlwcmludGYoIlxyUmVjZWl2ZWQgJWQvJWQgb2JqZWN0cyBpbiAlenUgYnl0ZXNcbiIsCiAJCQlzdGF0cy0+aW5kZXhlZF9vYmplY3RzLCBzdGF0cy0+dG90YWxfb2JqZWN0cywgc3RhdHMtPnJlY2VpdmVkX2J5dGVzKTsKKwl9CiAKIAkvLyBEaXNjb25uZWN0IHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gdG8gcHJldmVudCBmcm9tIGlkbGluZy4KIAlnaXRfcmVtb3RlX2Rpc2Nvbm5lY3QocmVtb3RlKTsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL25ldHdvcmsvaW5kZXgtcGFjay5jIGIvZXhhbXBsZXMvbmV0d29yay9pbmRleC1wYWNrLmMKaW5kZXggODg5MzA1ZC4uMzE0ZjIxMSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvbmV0d29yay9pbmRleC1wYWNrLmMKKysrIGIvZXhhbXBsZXMvbmV0d29yay9pbmRleC1wYWNrLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogaW50IGluZGV4X3BhY2soZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlnaXRfaW5kZXhlcl9zdHJlYW0gKmlkeDsKKwlnaXRfaW5kZXhlciAqaWR4OwogCWdpdF90cmFuc2Zlcl9wcm9ncmVzcyBzdGF0cyA9IHswLCAwfTsKIAlpbnQgZXJyb3I7CiAJY2hhciBoYXNoW0dJVF9PSURfSEVYU1ogKyAxXSA9IHswfTsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKIAl9CiAKLQlpZiAoZ2l0X2luZGV4ZXJfc3RyZWFtX25ldygmaWR4LCAiLiIsIE5VTEwsIE5VTEwpIDwgMCkgeworCWlmIChnaXRfaW5kZXhlcl9uZXcoJmlkeCwgIi4iLCAwLCBOVUxMLCBOVUxMLCBOVUxMKSA8IDApIHsKIAkJcHV0cygiYmFkIGlkeCIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNjEsNyArNjEsNyBAQAogCQlpZiAocmVhZF9ieXRlcyA8IDApCiAJCQlicmVhazsKIAotCQlpZiAoKGVycm9yID0gZ2l0X2luZGV4ZXJfc3RyZWFtX2FkZChpZHgsIGJ1ZiwgcmVhZF9ieXRlcywgJnN0YXRzKSkgPCAwKQorCQlpZiAoKGVycm9yID0gZ2l0X2luZGV4ZXJfYXBwZW5kKGlkeCwgYnVmLCByZWFkX2J5dGVzLCAmc3RhdHMpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAKIAkJaW5kZXhfY2IoJnN0YXRzLCBOVUxMKTsKQEAgLTczLDE2ICs3MywxNiBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JaWYgKChlcnJvciA9IGdpdF9pbmRleGVyX3N0cmVhbV9maW5hbGl6ZShpZHgsICZzdGF0cykpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2luZGV4ZXJfY29tbWl0KGlkeCwgJnN0YXRzKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAlwcmludGYoIlxySW5kZXhpbmcgJWQgb2YgJWRcbiIsIHN0YXRzLmluZGV4ZWRfb2JqZWN0cywgc3RhdHMudG90YWxfb2JqZWN0cyk7CiAKLQlnaXRfb2lkX2ZtdChoYXNoLCBnaXRfaW5kZXhlcl9zdHJlYW1faGFzaChpZHgpKTsKKwlnaXRfb2lkX2ZtdChoYXNoLCBnaXRfaW5kZXhlcl9oYXNoKGlkeCkpOwogCXB1dHMoaGFzaCk7CiAKICBjbGVhbnVwOgogCWNsb3NlKGZkKTsKLQlnaXRfaW5kZXhlcl9zdHJlYW1fZnJlZShpZHgpOworCWdpdF9pbmRleGVyX2ZyZWUoaWR4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9leGFtcGxlcy9uZXR3b3JrL2xzLXJlbW90ZS5jIGIvZXhhbXBsZXMvbmV0d29yay9scy1yZW1vdGUuYwppbmRleCAyNTIwMTE4Li4xZTA4YjI5IDEwMDY0NAotLS0gYS9leGFtcGxlcy9uZXR3b3JrL2xzLXJlbW90ZS5jCisrKyBiL2V4YW1wbGVzL25ldHdvcmsvbHMtcmVtb3RlLmMKQEAgLTQsNjUgKzQsNTIgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJjb21tb24uaCIKIAotc3RhdGljIGludCBzaG93X3JlZl9fY2IoZ2l0X3JlbW90ZV9oZWFkICpoZWFkLCB2b2lkICpwYXlsb2FkKQotewotCWNoYXIgb2lkW0dJVF9PSURfSEVYU1ogKyAxXSA9IHswfTsKLQotCSh2b2lkKXBheWxvYWQ7Ci0JZ2l0X29pZF9mbXQob2lkLCAmaGVhZC0+b2lkKTsKLQlwcmludGYoIiVzXHQlc1xuIiwgb2lkLCBoZWFkLT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB1c2VfdW5uYW1lZChnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqdXJsKQotewotCWdpdF9yZW1vdGUgKnJlbW90ZSA9IE5VTEw7Ci0JaW50IGVycm9yOwotCi0JLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgcmVtb3RlIGZyb20gdGhlIFVSTC4gVGhlIHRyYW5zcG9ydCB0byB1c2UKLQkvLyBpcyBkZXRlY3RlZCBmcm9tIHRoZSBVUkwKLQllcnJvciA9IGdpdF9yZW1vdGVfY3JlYXRlX2lubWVtb3J5KCZyZW1vdGUsIHJlcG8sIE5VTEwsIHVybCk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCi0JLy8gV2hlbiBjb25uZWN0aW5nLCB0aGUgdW5kZXJseWluZyBjb2RlIG5lZWRzIHRvIGtub3cgd2V0aGVyIHdlCi0JLy8gd2FudCB0byBwdXNoIG9yIGZldGNoCi0JZXJyb3IgPSBnaXRfcmVtb3RlX2Nvbm5lY3QocmVtb3RlLCBHSVRfRElSRUNUSU9OX0ZFVENIKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQkvLyBXaXRoIGdpdF9yZW1vdGVfbHMgd2UgY2FuIHJldHJpZXZlIHRoZSBhZHZlcnRpc2VkIGhlYWRzCi0JZXJyb3IgPSBnaXRfcmVtb3RlX2xzKHJlbW90ZSwgJnNob3dfcmVmX19jYiwgTlVMTCk7Ci0KLWNsZWFudXA6Ci0JZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7Ci0JcmV0dXJuIGVycm9yOwotfQotCiBzdGF0aWMgaW50IHVzZV9yZW1vdGUoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNoYXIgKm5hbWUpCiB7CiAJZ2l0X3JlbW90ZSAqcmVtb3RlID0gTlVMTDsKIAlpbnQgZXJyb3I7CisJY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqcmVmczsKKwlzaXplX3QgcmVmc19sZW4sIGk7CisJZ2l0X3JlbW90ZV9jYWxsYmFja3MgY2FsbGJhY2tzID0gR0lUX1JFTU9URV9DQUxMQkFDS1NfSU5JVDsKIAogCS8vIEZpbmQgdGhlIHJlbW90ZSBieSBuYW1lCiAJZXJyb3IgPSBnaXRfcmVtb3RlX2xvYWQoJnJlbW90ZSwgcmVwbywgbmFtZSk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJZ290byBjbGVhbnVwOworCWlmIChlcnJvciA8IDApIHsKKwkJZXJyb3IgPSBnaXRfcmVtb3RlX2NyZWF0ZV9pbm1lbW9yeSgmcmVtb3RlLCByZXBvLCBOVUxMLCBuYW1lKTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKioKKwkgKiBDb25uZWN0IHRvIHRoZSByZW1vdGUgYW5kIGNhbGwgdGhlIHByaW50aW5nIGZ1bmN0aW9uIGZvcgorCSAqIGVhY2ggb2YgdGhlIHJlbW90ZSByZWZlcmVuY2VzLgorCSAqLworCWNhbGxiYWNrcy5jcmVkZW50aWFscyA9IGNyZWRfYWNxdWlyZV9jYjsKKwlnaXRfcmVtb3RlX3NldF9jYWxsYmFja3MocmVtb3RlLCAmY2FsbGJhY2tzKTsKIAogCWVycm9yID0gZ2l0X3JlbW90ZV9jb25uZWN0KHJlbW90ZSwgR0lUX0RJUkVDVElPTl9GRVRDSCk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCi0JZXJyb3IgPSBnaXRfcmVtb3RlX2xzKHJlbW90ZSwgJnNob3dfcmVmX19jYiwgTlVMTCk7CisJLyoqCisJICogR2V0IHRoZSBsaXN0IG9mIHJlZmVyZW5jZXMgb24gdGhlIHJlbW90ZSBhbmQgcHJpbnQgb3V0CisJICogdGhlaXIgbmFtZSBuZXh0IHRvIHdoYXQgdGhleSBwb2ludCB0by4KKwkgKi8KKwlpZiAoZ2l0X3JlbW90ZV9scygmcmVmcywgJnJlZnNfbGVuLCByZW1vdGUpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJZm9yIChpID0gMDsgaSA8IHJlZnNfbGVuOyBpKyspIHsKKwkJY2hhciBvaWRbR0lUX09JRF9IRVhTWiArIDFdID0gezB9OworCQlnaXRfb2lkX2ZtdChvaWQsICZyZWZzW2ldLT5vaWQpOworCQlwcmludGYoIiVzXHQlc1xuIiwgb2lkLCByZWZzW2ldLT5uYW1lKTsKKwl9CiAKIGNsZWFudXA6CiAJZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CiAJcmV0dXJuIGVycm9yOwogfQogCi0vLyBUaGlzIGdldHMgY2FsbGVkIHRvIGRvIHRoZSB3b3JrLiBUaGUgcmVtb3RlIGNhbiBiZSBnaXZlbiBlaXRoZXIgYXMKLS8vIHRoZSBuYW1lIG9mIGEgY29uZmlndXJlZCByZW1vdGUgb3IgYW4gVVJMLgotCisvKiogRW50cnkgcG9pbnQgZm9yIHRoaXMgY29tbWFuZCAqLwogaW50IGxzX3JlbW90ZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWludCBlcnJvcjsKQEAgLTcyLDEyICs1OSw3IEBACiAJCXJldHVybiBFWElUX0ZBSUxVUkU7CiAJfQogCi0JLyogSWYgdGhlcmUncyBhICc6JyBpbiB0aGUgbmFtZSwgYXNzdW1lIGl0J3MgYW4gVVJMICovCi0JaWYgKHN0cmNocihhcmd2WzFdLCAnOicpICE9IE5VTEwpIHsKLQkJZXJyb3IgPSB1c2VfdW5uYW1lZChyZXBvLCBhcmd2WzFdKTsKLQl9IGVsc2UgewotCQllcnJvciA9IHVzZV9yZW1vdGUocmVwbywgYXJndlsxXSk7Ci0JfQorCWVycm9yID0gdXNlX3JlbW90ZShyZXBvLCBhcmd2WzFdKTsKIAogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Jldi1saXN0LmMgYi9leGFtcGxlcy9yZXYtbGlzdC5jCmluZGV4IDFmYjdlYmYuLjVjMGQ3NTEgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL3Jldi1saXN0LmMKKysrIGIvZXhhbXBsZXMvcmV2LWxpc3QuYwpAQCAtMSwxNyArMSw0MyBAQAotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisvKgorICogbGliZ2l0MiAicmV2LWxpc3QiIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gdHJhbnNmb3JtIGEgcmV2LXNwZWMgaW50byBhIGxpc3QKKyAqIG9mIGNvbW1pdCBpZHMKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLwogCi0jaW5jbHVkZSA8Z2l0Mi5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgogCi1zdGF0aWMgdm9pZCBjaGVja19lcnJvcihpbnQgZXJyb3JfY29kZSwgY29uc3QgY2hhciAqYWN0aW9uKQorc3RhdGljIGludCByZXZ3YWxrX3BhcnNlb3B0cyhnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X3JldndhbGsgKndhbGssIGludCBub3B0cywgY2hhciAqKm9wdHMpOworCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotCWlmICghZXJyb3JfY29kZSkKLQkJcmV0dXJuOworCWdpdF9yZXBvc2l0b3J5ICpyZXBvOworCWdpdF9yZXZ3YWxrICp3YWxrOworCWdpdF9vaWQgb2lkOworCWNoYXIgYnVmWzQxXTsKIAotCWNvbnN0IGdpdF9lcnJvciAqZXJyb3IgPSBnaXRlcnJfbGFzdCgpOwotCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQgJXM6ICVzXG4iLCAtZXJyb3JfY29kZSwgYWN0aW9uLAotCSAgICAgICAgKGVycm9yICYmIGVycm9yLT5tZXNzYWdlKSA/IGVycm9yLT5tZXNzYWdlIDogIj8/PyIpOwotCWV4aXQoMSk7CisJZ2l0X3RocmVhZHNfaW5pdCgpOworCisJY2hlY2tfbGcyKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KCZyZXBvLCAiLiIsIDAsIE5VTEwpLCAib3BlbmluZyByZXBvc2l0b3J5IiwgTlVMTCk7CisJY2hlY2tfbGcyKGdpdF9yZXZ3YWxrX25ldygmd2FsaywgcmVwbyksICJhbGxvY2F0aW5nIHJldndhbGsiLCBOVUxMKTsKKwljaGVja19sZzIocmV2d2Fsa19wYXJzZW9wdHMocmVwbywgd2FsaywgYXJnYy0xLCBhcmd2KzEpLCAicGFyc2luZyBvcHRpb25zIiwgTlVMTCk7CisKKwl3aGlsZSAoIWdpdF9yZXZ3YWxrX25leHQoJm9pZCwgd2FsaykpIHsKKwkJZ2l0X29pZF9mbXQoYnVmLCAmb2lkKTsKKwkJYnVmWzQwXSA9ICdcMCc7CisJCXByaW50ZigiJXNcbiIsIGJ1Zik7CisJfQorCisJZ2l0X3RocmVhZHNfc2h1dGRvd24oKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwdXNoX2NvbW1pdChnaXRfcmV2d2FsayAqd2FsaywgY29uc3QgZ2l0X29pZCAqb2lkLCBpbnQgaGlkZSkKQEAgLTkzLDI3ICsxMTksMyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWludCBlcnJvcjsKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKLQlnaXRfcmV2d2FsayAqd2FsazsKLQlnaXRfb2lkIG9pZDsKLQljaGFyIGJ1Zls0MV07Ci0KLQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KCZyZXBvLCAiLiIsIDAsIE5VTEwpOwotCWNoZWNrX2Vycm9yKGVycm9yLCAib3BlbmluZyByZXBvc2l0b3J5Iik7Ci0KLQllcnJvciA9IGdpdF9yZXZ3YWxrX25ldygmd2FsaywgcmVwbyk7Ci0JY2hlY2tfZXJyb3IoZXJyb3IsICJhbGxvY2F0aW5nIHJldndhbGsiKTsKLQllcnJvciA9IHJldndhbGtfcGFyc2VvcHRzKHJlcG8sIHdhbGssIGFyZ2MtMSwgYXJndisxKTsKLQljaGVja19lcnJvcihlcnJvciwgInBhcnNpbmcgb3B0aW9ucyIpOwotCi0Jd2hpbGUgKCFnaXRfcmV2d2Fsa19uZXh0KCZvaWQsIHdhbGspKSB7Ci0JCWdpdF9vaWRfZm10KGJ1ZiwgJm9pZCk7Ci0JCWJ1Zls0MF0gPSAnXDAnOwotCQlwcmludGYoIiVzXG4iLCBidWYpOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvcmV2LXBhcnNlLmMgYi9leGFtcGxlcy9yZXYtcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ4MzM3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvcmV2LXBhcnNlLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBsaWJnaXQyICJyZXYtcGFyc2UiIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gcGFyc2UgcmV2c3BlY3MKKyAqCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgaGVscGVycy4gKi8KK3N0cnVjdCBwYXJzZV9zdGF0ZSB7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJY29uc3QgY2hhciAqcmVwb2RpcjsKKwljb25zdCBjaGFyICpzcGVjOworCWludCBub3Q7Cit9Oworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhzdHJ1Y3QgcGFyc2Vfc3RhdGUgKnBzLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKK3N0YXRpYyBpbnQgcGFyc2VfcmV2aXNpb24oc3RydWN0IHBhcnNlX3N0YXRlICpwcyk7CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgcGFyc2Vfc3RhdGUgcHMgPSB7MH07CisKKwlnaXRfdGhyZWFkc19pbml0KCk7CisJcGFyc2Vfb3B0cygmcHMsIGFyZ2MsIGFyZ3YpOworCisJY2hlY2tfbGcyKHBhcnNlX3JldmlzaW9uKCZwcyksICJQYXJzaW5nIiwgTlVMTCk7CisKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHBzLnJlcG8pOworCWdpdF90aHJlYWRzX3NodXRkb3duKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqYXJnKQoreworCWlmIChtZXNzYWdlICYmIGFyZykKKwkJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIG1lc3NhZ2UsIGFyZyk7CisJZWxzZSBpZiAobWVzc2FnZSkKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbWVzc2FnZSk7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogcmV2LXBhcnNlIFsgLS1vcHRpb24gXSA8YXJncz4uLi5cbiIpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX29wdHMoc3RydWN0IHBhcnNlX3N0YXRlICpwcywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgYXJnc19pbmZvIGFyZ3MgPSBBUkdTX0lORk9fSU5JVDsKKworCWZvciAoYXJncy5wb3M9MTsgYXJncy5wb3MgPCBhcmdjOyArK2FyZ3MucG9zKSB7CisJCWNvbnN0IGNoYXIgKmEgPSBhcmd2W2FyZ3MucG9zXTsKKworCQlpZiAoYVswXSAhPSAnLScpIHsKKwkJCWlmIChwcy0+c3BlYykKKwkJCQl1c2FnZSgiVG9vIG1hbnkgc3BlY3MiLCBhKTsKKwkJCXBzLT5zcGVjID0gYTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGEsICItLW5vdCIpKQorCQkJcHMtPm5vdCA9ICFwcy0+bm90OworCQllbHNlIGlmICghbWF0Y2hfc3RyX2FyZygmcHMtPnJlcG9kaXIsICZhcmdzLCAiLS1naXQtZGlyIikpCisJCQl1c2FnZSgiQ2Fubm90IGhhbmRsZSBhcmd1bWVudCIsIGEpOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9yZXZpc2lvbihzdHJ1Y3QgcGFyc2Vfc3RhdGUgKnBzKQoreworCWdpdF9yZXZzcGVjIHJzOworCWNoYXIgc3RyW0dJVF9PSURfSEVYU1ogKyAxXTsKKworCWlmICghcHMtPnJlcG8pIHsKKwkJaWYgKCFwcy0+cmVwb2RpcikKKwkJCXBzLT5yZXBvZGlyID0gIi4iOworCQljaGVja19sZzIoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnBzLT5yZXBvLCBwcy0+cmVwb2RpciwgMCwgTlVMTCksCisJCQkiQ291bGQgbm90IG9wZW4gcmVwb3NpdG9yeSBmcm9tIiwgcHMtPnJlcG9kaXIpOworCX0KKworCWNoZWNrX2xnMihnaXRfcmV2cGFyc2UoJnJzLCBwcy0+cmVwbywgcHMtPnNwZWMpLCAiQ291bGQgbm90IHBhcnNlIiwgcHMtPnNwZWMpOworCisJaWYgKChycy5mbGFncyAmIEdJVF9SRVZQQVJTRV9TSU5HTEUpICE9IDApIHsKKwkJZ2l0X29pZF90b3N0cihzdHIsIHNpemVvZihzdHIpLCBnaXRfb2JqZWN0X2lkKHJzLmZyb20pKTsKKwkJcHJpbnRmKCIlc1xuIiwgc3RyKTsKKwkJZ2l0X29iamVjdF9mcmVlKHJzLmZyb20pOworCX0KKwllbHNlIGlmICgocnMuZmxhZ3MgJiBHSVRfUkVWUEFSU0VfUkFOR0UpICE9IDApIHsKKwkJZ2l0X29pZF90b3N0cihzdHIsIHNpemVvZihzdHIpLCBnaXRfb2JqZWN0X2lkKHJzLnRvKSk7CisJCXByaW50ZigiJXNcbiIsIHN0cik7CisJCWdpdF9vYmplY3RfZnJlZShycy50byk7CisKKwkJaWYgKChycy5mbGFncyAmIEdJVF9SRVZQQVJTRV9NRVJHRV9CQVNFKSAhPSAwKSB7CisJCQlnaXRfb2lkIGJhc2U7CisJCQljaGVja19sZzIoZ2l0X21lcmdlX2Jhc2UoJmJhc2UsIHBzLT5yZXBvLAorCQkJCQkJZ2l0X29iamVjdF9pZChycy5mcm9tKSwgZ2l0X29iamVjdF9pZChycy50bykpLAorCQkJCQkiQ291bGQgbm90IGZpbmQgbWVyZ2UgYmFzZSIsIHBzLT5zcGVjKTsKKworCQkJZ2l0X29pZF90b3N0cihzdHIsIHNpemVvZihzdHIpLCAmYmFzZSk7CisJCQlwcmludGYoIiVzXG4iLCBzdHIpOworCQl9CisKKwkJZ2l0X29pZF90b3N0cihzdHIsIHNpemVvZihzdHIpLCBnaXRfb2JqZWN0X2lkKHJzLmZyb20pKTsKKwkJcHJpbnRmKCJeJXNcbiIsIHN0cik7CisJCWdpdF9vYmplY3RfZnJlZShycy5mcm9tKTsKKwl9CisJZWxzZSB7CisJCWZhdGFsKCJJbnZhbGlkIHJlc3VsdHMgZnJvbSBnaXRfcmV2cGFyc2UiLCBwcy0+c3BlYyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Nob3dpbmRleC5jIGIvZXhhbXBsZXMvc2hvd2luZGV4LmMKaW5kZXggZTkyYTljOC4uN2Y3YzM4MyAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvc2hvd2luZGV4LmMKKysrIGIvZXhhbXBsZXMvc2hvd2luZGV4LmMKQEAgLTEsMTAgKzEsMjEgQEAKLSNpbmNsdWRlIDxnaXQyLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy8qCisgKiBsaWJnaXQyICJzaG93aW5kZXgiIGV4YW1wbGUgLSBzaG93cyBob3cgdG8gZXh0cmFjdCBkYXRhIGZyb20gdGhlIGluZGV4CisgKgorICogV3JpdHRlbiBieSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMKKyAqCisgKiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGF1dGhvcihzKSBoYXZlIGRlZGljYXRlZCBhbGwgY29weXJpZ2h0CisgKiBhbmQgcmVsYXRlZCBhbmQgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoaXMgc29mdHdhcmUgdG8gdGhlIHB1YmxpYyBkb21haW4KKyAqIHdvcmxkd2lkZS4gVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBDQzAgUHVibGljIERvbWFpbiBEZWRpY2F0aW9uIGFsb25nCisgKiB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgc2VlCisgKiA8aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLz4uCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgogCiBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gTlVMTDsKIAlnaXRfaW5kZXggKmluZGV4OwogCXVuc2lnbmVkIGludCBpLCBlY291bnQ7CiAJY2hhciAqZGlyID0gIi4iOwpAQCAtMTIsMzEgKzIzLDI0IEBACiAJY2hhciBvdXRbNDFdOwogCW91dFs0MF0gPSAnXDAnOwogCisJZ2l0X3RocmVhZHNfaW5pdCgpOworCisJaWYgKGFyZ2MgPiAyKQorCQlmYXRhbCgidXNhZ2U6IHNob3dpbmRleCBbPHJlcG8tZGlyPl0iLCBOVUxMKTsKIAlpZiAoYXJnYyA+IDEpCiAJCWRpciA9IGFyZ3ZbMV07Ci0JaWYgKCFkaXIgfHwgYXJnYyA+IDIpIHsKLQkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogc2hvd2luZGV4IFs8cmVwby1kaXI+XVxuIik7Ci0JCXJldHVybiAxOwotCX0KIAogCWRpcmxlbiA9IHN0cmxlbihkaXIpOwogCWlmIChkaXJsZW4gPiA1ICYmIHN0cmNtcChkaXIgKyBkaXJsZW4gLSA1LCAiaW5kZXgiKSA9PSAwKSB7Ci0JCWlmIChnaXRfaW5kZXhfb3BlbigmaW5kZXgsIGRpcikgPCAwKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBvcGVuIGluZGV4OiAlc1xuIiwgZGlyKTsKLQkJCXJldHVybiAxOwotCQl9CisJCWNoZWNrX2xnMihnaXRfaW5kZXhfb3BlbigmaW5kZXgsIGRpciksICJjb3VsZCBub3Qgb3BlbiBpbmRleCIsIGRpcik7CiAJfSBlbHNlIHsKLQkJaWYgKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KCZyZXBvLCBkaXIsIDAsIE5VTEwpIDwgMCkgewotCQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiByZXBvc2l0b3J5OiAlc1xuIiwgZGlyKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pIDwgMCkgewotCQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiByZXBvc2l0b3J5IGluZGV4XG4iKTsKLQkJCXJldHVybiAxOwotCQl9CisJCWdpdF9yZXBvc2l0b3J5ICpyZXBvOworCQljaGVja19sZzIoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnJlcG8sIGRpciwgMCwgTlVMTCksICJjb3VsZCBub3Qgb3BlbiByZXBvc2l0b3J5IiwgZGlyKTsKKwkJY2hlY2tfbGcyKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgcmVwbyksICJjb3VsZCBub3Qgb3BlbiByZXBvc2l0b3J5IGluZGV4IiwgTlVMTCk7CisJCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CiAJfQogCi0JZ2l0X2luZGV4X3JlYWQoaW5kZXgpOworCWdpdF9pbmRleF9yZWFkKGluZGV4LCAwKTsKIAogCWVjb3VudCA9IGdpdF9pbmRleF9lbnRyeWNvdW50KGluZGV4KTsKIAlpZiAoIWVjb3VudCkKQEAgLTYwLDggKzY0LDcgQEAKIAl9CiAKIAlnaXRfaW5kZXhfZnJlZShpbmRleCk7Ci0JZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKKwlnaXRfdGhyZWFkc19zaHV0ZG93bigpOwogCiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3N0YXR1cy5jIGIvZXhhbXBsZXMvc3RhdHVzLmMKaW5kZXggNjg5MDk4NC4uM2FkZmUwZCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvc3RhdHVzLmMKKysrIGIvZXhhbXBsZXMvc3RhdHVzLmMKQEAgLTEsMzMgKzEsMzIgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIGxpYmdpdDIgInN0YXR1cyIgZXhhbXBsZSAtIHNob3dzIGhvdyB0byB1c2UgdGhlIHN0YXR1cyBBUElzCiAgKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAotICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKiBXcml0dGVuIGJ5IHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgYXV0aG9yKHMpIGhhdmUgZGVkaWNhdGVkIGFsbCBjb3B5cmlnaHQKKyAqIGFuZCByZWxhdGVkIGFuZCBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhpcyBzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbgorICogd29ybGR3aWRlLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQgYW55IHdhcnJhbnR5LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIENDMCBQdWJsaWMgRG9tYWluIERlZGljYXRpb24gYWxvbmcKKyAqIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBzZWUKKyAqIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvPi4KICAqLwotI2luY2x1ZGUgPGdpdDIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgogCi1lbnVtIHsKLQlGT1JNQVRfREVGQVVMVCAgID0gMCwKLQlGT1JNQVRfTE9ORyAgICAgID0gMSwKLQlGT1JNQVRfU0hPUlQgICAgID0gMiwKLQlGT1JNQVRfUE9SQ0VMQUlOID0gMywKLX07Ci0jZGVmaW5lIE1BWF9QQVRIU1BFQyA4CisjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qCisvKioKICAqIFRoaXMgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgbGliZ2l0MiBzdGF0dXMgQVBJcywKICAqIHBhcnRpY3VsYXJseSB0aGUgYGdpdF9zdGF0dXNfbGlzdGAgb2JqZWN0LCB0byByb3VnaGx5IHNpbXVsYXRlIHRoZQogICogb3V0cHV0IG9mIHJ1bm5pbmcgYGdpdCBzdGF0dXNgLiAgSXQgc2VydmVzIGFzIGEgc2ltcGxlIGV4YW1wbGUgb2YKICAqIHVzaW5nIHRob3NlIEFQSXMgdG8gZ2V0IGJhc2ljIHN0YXR1cyBpbmZvcm1hdGlvbi4KICAqCiAgKiBUaGlzIGRvZXMgbm90IGhhdmU6CisgKgogICogLSBSb2J1c3QgZXJyb3IgaGFuZGxpbmcKICAqIC0gQ29sb3JpemVkIG9yIHBhZ2luYXRlZCBvdXRwdXQgZm9ybWF0dGluZwogICoKICAqIFRoaXMgZG9lcyBoYXZlOgorICoKICAqIC0gRXhhbXBsZXMgb2YgdHJhbnNsYXRpbmcgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byB0aGUgc3RhdHVzCiAgKiAgIG9wdGlvbnMgc2V0dGluZ3MgdG8gbWltaWMgYGdpdCBzdGF0dXNgIHJlc3VsdHMuCiAgKiAtIEEgc2FtcGxlIHN0YXR1cyBmb3JtYXR0ZXIgdGhhdCBtYXRjaGVzIHRoZSBkZWZhdWx0ICJsb25nIiBmb3JtYXQKQEAgLTM1LDM0ICszNCw5MSBAQAogICogLSBBIHNhbXBsZSBzdGF0dXMgZm9ybWF0dGVyIHRoYXQgbWF0Y2hlcyB0aGUgInNob3J0IiBmb3JtYXQKICAqLwogCi1zdGF0aWMgdm9pZCBjaGVjayhpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmV4dHJhKQorZW51bSB7CisJRk9STUFUX0RFRkFVTFQgICA9IDAsCisJRk9STUFUX0xPTkcgICAgICA9IDEsCisJRk9STUFUX1NIT1JUICAgICA9IDIsCisJRk9STUFUX1BPUkNFTEFJTiA9IDMsCit9OworCisjZGVmaW5lIE1BWF9QQVRIU1BFQyA4CisKK3N0cnVjdCBvcHRzIHsKKyAgICBnaXRfc3RhdHVzX29wdGlvbnMgc3RhdHVzb3B0OworICAgIGNoYXIgKnJlcG9kaXI7CisgICAgY2hhciAqcGF0aHNwZWNbTUFYX1BBVEhTUEVDXTsKKyAgICBpbnQgbnBhdGhzOworICAgIGludCBmb3JtYXQ7CisgICAgaW50IHp0ZXJtOworICAgIGludCBzaG93YnJhbmNoOworfTsKKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0cyhzdHJ1Y3Qgb3B0cyAqbywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CitzdGF0aWMgdm9pZCBzaG93X2JyYW5jaChnaXRfcmVwb3NpdG9yeSAqcmVwbywgaW50IGZvcm1hdCk7CitzdGF0aWMgdm9pZCBwcmludF9sb25nKGdpdF9zdGF0dXNfbGlzdCAqc3RhdHVzKTsKK3N0YXRpYyB2b2lkIHByaW50X3Nob3J0KGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfc3RhdHVzX2xpc3QgKnN0YXR1cyk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JY29uc3QgZ2l0X2Vycm9yICpsZzJlcnI7Ci0JY29uc3QgY2hhciAqbGcybXNnID0gIiIsICpsZzJzcGFjZXIgPSAiIjsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IE5VTEw7CisJZ2l0X3N0YXR1c19saXN0ICpzdGF0dXM7CisJc3RydWN0IG9wdHMgbyA9IHsgR0lUX1NUQVRVU19PUFRJT05TX0lOSVQsICIuIiB9OwogCi0JaWYgKCFlcnJvcikKLQkJcmV0dXJuOworCWdpdF90aHJlYWRzX2luaXQoKTsKIAotCWlmICgobGcyZXJyID0gZ2l0ZXJyX2xhc3QoKSkgIT0gTlVMTCAmJiBsZzJlcnItPm1lc3NhZ2UgIT0gTlVMTCkgewotCQlsZzJtc2cgPSBsZzJlcnItPm1lc3NhZ2U7Ci0JCWxnMnNwYWNlciA9ICIgLSAiOwotCX0KKwlvLnN0YXR1c29wdC5zaG93ICA9IEdJVF9TVEFUVVNfU0hPV19JTkRFWF9BTkRfV09SS0RJUjsKKwlvLnN0YXR1c29wdC5mbGFncyA9IEdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfVU5UUkFDS0VEIHwKKwkJR0lUX1NUQVRVU19PUFRfUkVOQU1FU19IRUFEX1RPX0lOREVYIHwKKwkJR0lUX1NUQVRVU19PUFRfU09SVF9DQVNFX1NFTlNJVElWRUxZOwogCi0JaWYgKGV4dHJhKQotCQlmcHJpbnRmKHN0ZGVyciwgIiVzICclcycgWyVkXSVzJXNcbiIsCi0JCQltZXNzYWdlLCBleHRyYSwgZXJyb3IsIGxnMnNwYWNlciwgbGcybXNnKTsKKwlwYXJzZV9vcHRzKCZvLCBhcmdjLCBhcmd2KTsKKworCS8qKgorCSAqIFRyeSB0byBvcGVuIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBnaXZlbiBwYXRoIChvciBhdCB0aGUgY3VycmVudAorCSAqIGRpcmVjdG9yeSBpZiBub25lIHdhcyBnaXZlbikuCisJICovCisJY2hlY2tfbGcyKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KCZyZXBvLCBvLnJlcG9kaXIsIDAsIE5VTEwpLAorCQkgICJDb3VsZCBub3Qgb3BlbiByZXBvc2l0b3J5Iiwgby5yZXBvZGlyKTsKKworCWlmIChnaXRfcmVwb3NpdG9yeV9pc19iYXJlKHJlcG8pKQorCQlmYXRhbCgiQ2Fubm90IHJlcG9ydCBzdGF0dXMgb24gYmFyZSByZXBvc2l0b3J5IiwKKwkJCWdpdF9yZXBvc2l0b3J5X3BhdGgocmVwbykpOworCisJLyoqCisJICogUnVuIHN0YXR1cyBvbiB0aGUgcmVwb3NpdG9yeQorCSAqCisJICogV2UgdXNlIGBnaXRfc3RhdHVzX2xpc3RfbmV3KClgIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzdGF0dXMKKwkgKiBpbmZvcm1hdGlvbiB3aGljaCBsZXRzIHVzIGl0ZXJhdGUgb3ZlciBpdCBhdCBvdXIKKwkgKiBjb252ZW5pZW5jZSBhbmQgZXh0cmFjdCB0aGUgZGF0YSB3ZSB3YW50IHRvIHNob3cgb3V0IG9mCisJICogZWFjaCBlbnRyeS4KKwkgKgorCSAqIFlvdSBjYW4gdXNlIGBnaXRfc3RhdHVzX2ZvcmVhY2goKWAgb3IKKwkgKiBgZ2l0X3N0YXR1c19mb3JlYWNoX2V4dCgpYCBpZiB5b3UnZCBwcmVmZXIgdG8gZXhlY3V0ZSBhCisJICogY2FsbGJhY2sgZm9yIGVhY2ggZW50cnkuIFRoZSBsYXR0ZXIgZ2l2ZXMgeW91IG1vcmUgY29udHJvbAorCSAqIGFib3V0IHdoYXQgcmVzdWx0cyBhcmUgcHJlc2VudGVkLgorCSAqLworCWNoZWNrX2xnMihnaXRfc3RhdHVzX2xpc3RfbmV3KCZzdGF0dXMsIHJlcG8sICZvLnN0YXR1c29wdCksCisJCSAgIkNvdWxkIG5vdCBnZXQgc3RhdHVzIiwgTlVMTCk7CisKKwlpZiAoby5zaG93YnJhbmNoKQorCQlzaG93X2JyYW5jaChyZXBvLCBvLmZvcm1hdCk7CisKKwlpZiAoby5mb3JtYXQgPT0gRk9STUFUX0xPTkcpCisJCXByaW50X2xvbmcoc3RhdHVzKTsKIAllbHNlCi0JCWZwcmludGYoc3RkZXJyLCAiJXMgWyVkXSVzJXNcbiIsCi0JCQltZXNzYWdlLCBlcnJvciwgbGcyc3BhY2VyLCBsZzJtc2cpOworCQlwcmludF9zaG9ydChyZXBvLCBzdGF0dXMpOwogCi0JZXhpdCgxKTsKKwlnaXRfc3RhdHVzX2xpc3RfZnJlZShzdGF0dXMpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisJZ2l0X3RocmVhZHNfc2h1dGRvd24oKTsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBmYWlsKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCi17Ci0JY2hlY2soLTEsIG1lc3NhZ2UsIE5VTEwpOwotfQotCisvKioKKyAqIElmIHRoZSB1c2VyIGFza2VkIGZvciB0aGUgYnJhbmNoLCBsZXQncyBzaG93IHRoZSBzaG9ydCBuYW1lIG9mIHRoZQorICogYnJhbmNoLgorICovCiBzdGF0aWMgdm9pZCBzaG93X2JyYW5jaChnaXRfcmVwb3NpdG9yeSAqcmVwbywgaW50IGZvcm1hdCkKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtNzEsMTQgKzEyNywxMiBAQAogCiAJZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9oZWFkKCZoZWFkLCByZXBvKTsKIAotCWlmIChlcnJvciA9PSBHSVRfRU9SUEhBTkVESEVBRCB8fCBlcnJvciA9PSBHSVRfRU5PVEZPVU5EKQorCWlmIChlcnJvciA9PSBHSVRfRVVOQk9STkJSQU5DSCB8fCBlcnJvciA9PSBHSVRfRU5PVEZPVU5EKQogCQlicmFuY2ggPSBOVUxMOwogCWVsc2UgaWYgKCFlcnJvcikgewotCQlicmFuY2ggPSBnaXRfcmVmZXJlbmNlX25hbWUoaGVhZCk7Ci0JCWlmICghc3RybmNtcChicmFuY2gsICJyZWZzL2hlYWRzLyIsIHN0cmxlbigicmVmcy9oZWFkcy8iKSkpCi0JCQlicmFuY2ggKz0gc3RybGVuKCJyZWZzL2hlYWRzLyIpOworCQlicmFuY2ggPSBnaXRfcmVmZXJlbmNlX3Nob3J0aGFuZChoZWFkKTsKIAl9IGVsc2UKLQkJY2hlY2soZXJyb3IsICJmYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYnJhbmNoIiwgTlVMTCk7CisJCWNoZWNrX2xnMihlcnJvciwgImZhaWxlZCB0byBnZXQgY3VycmVudCBicmFuY2giLCBOVUxMKTsKIAogCWlmIChmb3JtYXQgPT0gRk9STUFUX0xPTkcpCiAJCXByaW50ZigiIyBPbiBicmFuY2ggJXNcbiIsCkBAIC04OSw3ICsxNDMsMTEgQEAKIAlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X2xvbmcoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGdpdF9zdGF0dXNfbGlzdCAqc3RhdHVzKQorLyoqCisgKiBUaGlzIGZ1bmN0aW9uIHByaW50IG91dCBhbiBvdXRwdXQgc2ltaWxhciB0byBnaXQncyBzdGF0dXMgY29tbWFuZAorICogaW4gbG9uZyBmb3JtLCBpbmNsdWRpbmcgdGhlIGNvbW1hbmQtbGluZSBoaW50cy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfbG9uZyhnaXRfc3RhdHVzX2xpc3QgKnN0YXR1cykKIHsKIAlzaXplX3QgaSwgbWF4aSA9IGdpdF9zdGF0dXNfbGlzdF9lbnRyeWNvdW50KHN0YXR1cyk7CiAJY29uc3QgZ2l0X3N0YXR1c19lbnRyeSAqczsKQEAgLTk3LDkgKzE1NSw3IEBACiAJaW50IGNoYW5nZWRfaW5fd29ya2RpciA9IDAsIHJtX2luX3dvcmtkaXIgPSAwOwogCWNvbnN0IGNoYXIgKm9sZF9wYXRoLCAqbmV3X3BhdGg7CiAKLQkodm9pZClyZXBvOwotCi0JLyogcHJpbnQgaW5kZXggY2hhbmdlcyAqLworCS8qKiBQcmludCBpbmRleCBjaGFuZ2VzLiAqLwogCiAJZm9yIChpID0gMDsgaSA8IG1heGk7ICsraSkgewogCQljaGFyICppc3RhdHVzID0gTlVMTDsKQEAgLTE0OCwxNiArMjA0LDIyIEBACiAJfQogCWhlYWRlciA9IDA7CiAKLQkvKiBwcmludCB3b3JrZGlyIGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcyAqLworCS8qKiBQcmludCB3b3JrZGlyIGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcy4gKi8KIAogCWZvciAoaSA9IDA7IGkgPCBtYXhpOyArK2kpIHsKIAkJY2hhciAqd3N0YXR1cyA9IE5VTEw7CiAKIAkJcyA9IGdpdF9zdGF0dXNfYnlpbmRleChzdGF0dXMsIGkpOwogCisJCS8qKgorCQkgKiBXaXRoIGBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOTU9ESUZJRURgIChub3QgdXNlZCBpbiB0aGlzIGV4YW1wbGUpCisJCSAqIGBpbmRleF90b193b3JrZGlyYCBtYXkgbm90IGJlIGBOVUxMYCBldmVuIGlmIHRoZXJlIGFyZQorCQkgKiBubyBkaWZmZXJlbmNlcywgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGEgYEdJVF9ERUxUQV9VTk1PRElGSUVEYC4KKwkJICovCiAJCWlmIChzLT5zdGF0dXMgPT0gR0lUX1NUQVRVU19DVVJSRU5UIHx8IHMtPmluZGV4X3RvX3dvcmtkaXIgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCisJCS8qKiBQcmludCBvdXQgdGhlIG91dHB1dCBzaW5jZSB3ZSBrbm93IHRoZSBmaWxlIGhhcyBzb21lIGNoYW5nZXMgKi8KIAkJaWYgKHMtPnN0YXR1cyAmIEdJVF9TVEFUVVNfV1RfTU9ESUZJRUQpCiAJCQl3c3RhdHVzID0gIm1vZGlmaWVkOiAiOwogCQlpZiAocy0+c3RhdHVzICYgR0lUX1NUQVRVU19XVF9ERUxFVEVEKQpAQCAtMTkxLDkgKzI1Myw4IEBACiAJCWNoYW5nZWRfaW5fd29ya2RpciA9IDE7CiAJCXByaW50ZigiI1xuIik7CiAJfQotCWhlYWRlciA9IDA7CiAKLQkvKiBwcmludCB1bnRyYWNrZWQgZmlsZXMgKi8KKwkvKiogUHJpbnQgdW50cmFja2VkIGZpbGVzLiAqLwogCiAJaGVhZGVyID0gMDsKIApAQCAtMjE1LDcgKzI3Niw3IEBACiAKIAloZWFkZXIgPSAwOwogCi0JLyogcHJpbnQgaWdub3JlZCBmaWxlcyAqLworCS8qKiBQcmludCBpZ25vcmVkIGZpbGVzLiAqLwogCiAJZm9yIChpID0gMDsgaSA8IG1heGk7ICsraSkgewogCQlzID0gZ2l0X3N0YXR1c19ieWluZGV4KHN0YXR1cywgaSk7CkBAIC0yMzcsNiArMjk4LDEwIEBACiAJCXByaW50Zigibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iKTsKIH0KIAorLyoqCisgKiBUaGlzIHZlcnNpb24gb2YgdGhlIG91dHB1dCBwcmVmaXhlcyBlYWNoIHBhdGggd2l0aCB0d28gc3RhdHVzCisgKiBjb2x1bW5zIGFuZCBzaG93cyBzdWJtb2R1bGUgc3RhdHVzIGluZm9ybWF0aW9uLgorICovCiBzdGF0aWMgdm9pZCBwcmludF9zaG9ydChnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X3N0YXR1c19saXN0ICpzdGF0dXMpCiB7CiAJc2l6ZV90IGksIG1heGkgPSBnaXRfc3RhdHVzX2xpc3RfZW50cnljb3VudChzdGF0dXMpOwpAQCAtMjg3LDYgKzM1MiwxMCBAQAogCQlpZiAoaXN0YXR1cyA9PSAnPycgJiYgd3N0YXR1cyA9PSAnPycpCiAJCQljb250aW51ZTsKIAorCQkvKioKKwkJICogQSBjb21taXQgaW4gYSB0cmVlIGlzIGhvdyBzdWJtb2R1bGVzIGFyZSBzdG9yZWQsIHNvCisJCSAqIGxldCdzIGdvIHRha2UgYSBsb29rIGF0IGl0cyBzdGF0dXMuCisJCSAqLwogCQlpZiAocy0+aW5kZXhfdG9fd29ya2RpciAmJgogCQkJcy0+aW5kZXhfdG9fd29ya2Rpci0+bmV3X2ZpbGUubW9kZSA9PSBHSVRfRklMRU1PREVfQ09NTUlUKQogCQl7CkBAIC0zMDgsNiArMzc3LDEwIEBACiAJCQl9CiAJCX0KIAorCQkvKioKKwkJICogTm93IHRoYXQgd2UgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uLCBpdCdzIHRpbWUgdG8gZm9ybWF0IHRoZSBvdXRwdXQuCisJCSAqLworCiAJCWlmIChzLT5oZWFkX3RvX2luZGV4KSB7CiAJCQlhID0gcy0+aGVhZF90b19pbmRleC0+b2xkX2ZpbGUucGF0aDsKIAkJCWIgPSBzLT5oZWFkX3RvX2luZGV4LT5uZXdfZmlsZS5wYXRoOwpAQCAtMzQxLDEwMyArNDE0LDYxIEBACiAJfQogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorLyoqCisgKiBQYXJzZSBvcHRpb25zIHRoYXQgZ2l0J3Mgc3RhdHVzIGNvbW1hbmQgc3VwcG9ydHMuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX29wdHMoc3RydWN0IG9wdHMgKm8sIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBOVUxMOwotCWludCBpLCBucGF0aHMgPSAwLCBmb3JtYXQgPSBGT1JNQVRfREVGQVVMVCwgenRlcm0gPSAwLCBzaG93YnJhbmNoID0gMDsKLQlnaXRfc3RhdHVzX29wdGlvbnMgb3B0ID0gR0lUX1NUQVRVU19PUFRJT05TX0lOSVQ7Ci0JZ2l0X3N0YXR1c19saXN0ICpzdGF0dXM7Ci0JY2hhciAqcmVwb2RpciA9ICIuIiwgKnBhdGhzcGVjW01BWF9QQVRIU1BFQ107CisJc3RydWN0IGFyZ3NfaW5mbyBhcmdzID0gQVJHU19JTkZPX0lOSVQ7CiAKLQlvcHQuc2hvdyAgPSBHSVRfU1RBVFVTX1NIT1dfSU5ERVhfQU5EX1dPUktESVI7Ci0Jb3B0LmZsYWdzID0gR0lUX1NUQVRVU19PUFRfSU5DTFVERV9VTlRSQUNLRUQgfAotCQlHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0hFQURfVE9fSU5ERVggfAotCQlHSVRfU1RBVFVTX09QVF9TT1JUX0NBU0VfU0VOU0lUSVZFTFk7CisJZm9yIChhcmdzLnBvcyA9IDE7IGFyZ3MucG9zIDwgYXJnYzsgKythcmdzLnBvcykgeworCQljaGFyICphID0gYXJndlthcmdzLnBvc107CiAKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7Ci0JCWlmIChhcmd2W2ldWzBdICE9ICctJykgewotCQkJaWYgKG5wYXRocyA8IE1BWF9QQVRIU1BFQykKLQkJCQlwYXRoc3BlY1tucGF0aHMrK10gPSBhcmd2W2ldOworCQlpZiAoYVswXSAhPSAnLScpIHsKKwkJCWlmIChvLT5ucGF0aHMgPCBNQVhfUEFUSFNQRUMpCisJCQkJby0+cGF0aHNwZWNbby0+bnBhdGhzKytdID0gYTsKIAkJCWVsc2UKLQkJCQlmYWlsKCJFeGFtcGxlIG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHBhdGhzcGVjIik7CisJCQkJZmF0YWwoIkV4YW1wbGUgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgcGF0aHNwZWMiLCBOVUxMKTsKIAkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItcyIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0tc2hvcnQiKSkKLQkJCWZvcm1hdCA9IEZPUk1BVF9TSE9SVDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1sb25nIikpCi0JCQlmb3JtYXQgPSBGT1JNQVRfTE9ORzsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1wb3JjZWxhaW4iKSkKLQkJCWZvcm1hdCA9IEZPUk1BVF9QT1JDRUxBSU47Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi1iIikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLS1icmFuY2giKSkKLQkJCXNob3dicmFuY2ggPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICIteiIpKSB7Ci0JCQl6dGVybSA9IDE7Ci0JCQlpZiAoZm9ybWF0ID09IEZPUk1BVF9ERUZBVUxUKQotCQkJCWZvcm1hdCA9IEZPUk1BVF9QT1JDRUxBSU47CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi1zIikgfHwgIXN0cmNtcChhLCAiLS1zaG9ydCIpKQorCQkJby0+Zm9ybWF0ID0gRk9STUFUX1NIT1JUOworCQllbHNlIGlmICghc3RyY21wKGEsICItLWxvbmciKSkKKwkJCW8tPmZvcm1hdCA9IEZPUk1BVF9MT05HOworCQllbHNlIGlmICghc3RyY21wKGEsICItLXBvcmNlbGFpbiIpKQorCQkJby0+Zm9ybWF0ID0gRk9STUFUX1BPUkNFTEFJTjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLWIiKSB8fCAhc3RyY21wKGEsICItLWJyYW5jaCIpKQorCQkJby0+c2hvd2JyYW5jaCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi16IikpIHsKKwkJCW8tPnp0ZXJtID0gMTsKKwkJCWlmIChvLT5mb3JtYXQgPT0gRk9STUFUX0RFRkFVTFQpCisJCQkJby0+Zm9ybWF0ID0gRk9STUFUX1BPUkNFTEFJTjsKIAkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWlnbm9yZWQiKSkKLQkJCW9wdC5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9JTkNMVURFX0lHTk9SRUQ7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi11bm8iKSB8fAotCQkJCSAhc3RyY21wKGFyZ3ZbaV0sICItLXVudHJhY2tlZC1maWxlcz1ubyIpKQotCQkJb3B0LmZsYWdzICY9IH5HSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLXVub3JtYWwiKSB8fAotCQkJCSAhc3RyY21wKGFyZ3ZbaV0sICItLXVudHJhY2tlZC1maWxlcz1ub3JtYWwiKSkKLQkJCW9wdC5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRDsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLXVhbGwiKSB8fAotCQkJCSAhc3RyY21wKGFyZ3ZbaV0sICItLXVudHJhY2tlZC1maWxlcz1hbGwiKSkKLQkJCW9wdC5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRCB8CisJCWVsc2UgaWYgKCFzdHJjbXAoYSwgIi0taWdub3JlZCIpKQorCQkJby0+c3RhdHVzb3B0LmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfSUdOT1JFRDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhLCAiLXVubyIpIHx8CisJCQkJICFzdHJjbXAoYSwgIi0tdW50cmFja2VkLWZpbGVzPW5vIikpCisJCQlvLT5zdGF0dXNvcHQuZmxhZ3MgJj0gfkdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfVU5UUkFDS0VEOworCQllbHNlIGlmICghc3RyY21wKGEsICItdW5vcm1hbCIpIHx8CisJCQkJICFzdHJjbXAoYSwgIi0tdW50cmFja2VkLWZpbGVzPW5vcm1hbCIpKQorCQkJby0+c3RhdHVzb3B0LmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfVU5UUkFDS0VEOworCQllbHNlIGlmICghc3RyY21wKGEsICItdWFsbCIpIHx8CisJCQkJICFzdHJjbXAoYSwgIi0tdW50cmFja2VkLWZpbGVzPWFsbCIpKQorCQkJby0+c3RhdHVzb3B0LmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfVU5UUkFDS0VEIHwKIAkJCQlHSVRfU1RBVFVTX09QVF9SRUNVUlNFX1VOVFJBQ0tFRF9ESVJTOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCIpKQotCQkJb3B0LmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX0VYQ0xVREVfU1VCTU9EVUxFUzsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndltpXSwgIi0tZ2l0LWRpcj0iLCBzdHJsZW4oIi0tZ2l0LWRpcj0iKSkpCi0JCQlyZXBvZGlyID0gYXJndltpXSArIHN0cmxlbigiLS1naXQtZGlyPSIpOworCQllbHNlIGlmICghc3RyY21wKGEsICItLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCIpKQorCQkJby0+c3RhdHVzb3B0LmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX0VYQ0xVREVfU1VCTU9EVUxFUzsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYSwgIi0tZ2l0LWRpcj0iLCBzdHJsZW4oIi0tZ2l0LWRpcj0iKSkpCisJCQlvLT5yZXBvZGlyID0gYSArIHN0cmxlbigiLS1naXQtZGlyPSIpOwogCQllbHNlCi0JCQljaGVjaygtMSwgIlVuc3VwcG9ydGVkIG9wdGlvbiIsIGFyZ3ZbaV0pOworCQkJY2hlY2tfbGcyKC0xLCAiVW5zdXBwb3J0ZWQgb3B0aW9uIiwgYSk7CiAJfQogCi0JaWYgKGZvcm1hdCA9PSBGT1JNQVRfREVGQVVMVCkKLQkJZm9ybWF0ID0gRk9STUFUX0xPTkc7Ci0JaWYgKGZvcm1hdCA9PSBGT1JNQVRfTE9ORykKLQkJc2hvd2JyYW5jaCA9IDE7Ci0JaWYgKG5wYXRocyA+IDApIHsKLQkJb3B0LnBhdGhzcGVjLnN0cmluZ3MgPSBwYXRoc3BlYzsKLQkJb3B0LnBhdGhzcGVjLmNvdW50ICAgPSBucGF0aHM7CisJaWYgKG8tPmZvcm1hdCA9PSBGT1JNQVRfREVGQVVMVCkKKwkJby0+Zm9ybWF0ID0gRk9STUFUX0xPTkc7CisJaWYgKG8tPmZvcm1hdCA9PSBGT1JNQVRfTE9ORykKKwkJby0+c2hvd2JyYW5jaCA9IDE7CisJaWYgKG8tPm5wYXRocyA+IDApIHsKKwkJby0+c3RhdHVzb3B0LnBhdGhzcGVjLnN0cmluZ3MgPSBvLT5wYXRoc3BlYzsKKwkJby0+c3RhdHVzb3B0LnBhdGhzcGVjLmNvdW50ICAgPSBvLT5ucGF0aHM7CiAJfQotCi0JLyoKLQkgKiBUcnkgdG8gb3BlbiB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgZ2l2ZW4gcGF0aCAob3IgYXQgdGhlIGN1cnJlbnQKLQkgKiBkaXJlY3RvcnkgaWYgbm9uZSB3YXMgZ2l2ZW4pLgotCSAqLwotCWNoZWNrKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KCZyZXBvLCByZXBvZGlyLCAwLCBOVUxMKSwKLQkJICAiQ291bGQgbm90IG9wZW4gcmVwb3NpdG9yeSIsIHJlcG9kaXIpOwotCi0JaWYgKGdpdF9yZXBvc2l0b3J5X2lzX2JhcmUocmVwbykpCi0JCWZhaWwoIkNhbm5vdCByZXBvcnQgc3RhdHVzIG9uIGJhcmUgcmVwb3NpdG9yeSIpOwotCi0JLyoKLQkgKiBSdW4gc3RhdHVzIG9uIHRoZSByZXBvc2l0b3J5Ci0JICoKLQkgKiBCZWNhdXNlIHdlIHdhbnQgdG8gc2ltbHVhdGUgYSBmdWxsICJnaXQgc3RhdHVzIiBydW4gYW5kIHdhbnQgdG8KLQkgKiBzdXBwb3J0IHNvbWUgY29tbWFuZCBsaW5lIG9wdGlvbnMsIHdlIHVzZSBgZ2l0X3N0YXR1c19mb3JlYWNoX2V4dCgpYAotCSAqIGluc3RlYWQgb2YganVzdCB0aGUgcGxhaW4gc3RhdHVzIGNhbGwuICBUaGlzIGFsbG93cyAoYSkgaXRlcmF0aW5nCi0JICogb3ZlciB0aGUgaW5kZXggYW5kIHRoZW4gdGhlIHdvcmtkaXIgYW5kIChiKSBleHRyYSBmbGFncyB0aGF0IGNvbnRyb2wKLQkgKiB3aGljaCBmaWxlcyBhcmUgaW5jbHVkZWQuICBJZiB5b3UganVzdCB3YW50IHNpbXBsZSBzdGF0dXMgKGUuZy4gdG8KLQkgKiBlbnVtZXJhdGUgZmlsZXMgdGhhdCBhcmUgbW9kaWZpZWQpIHRoZW4geW91IHByb2JhYmx5IGRvbid0IG5lZWQgdGhlCi0JICogZXh0ZW5kZWQgQVBJLgotCSAqLwotCWNoZWNrKGdpdF9zdGF0dXNfbGlzdF9uZXcoJnN0YXR1cywgcmVwbywgJm9wdCksCi0JCSAgIkNvdWxkIG5vdCBnZXQgc3RhdHVzIiwgTlVMTCk7Ci0KLQlpZiAoc2hvd2JyYW5jaCkKLQkJc2hvd19icmFuY2gocmVwbywgZm9ybWF0KTsKLQotCWlmIChmb3JtYXQgPT0gRk9STUFUX0xPTkcpCi0JCXByaW50X2xvbmcocmVwbywgc3RhdHVzKTsKLQllbHNlCi0JCXByaW50X3Nob3J0KHJlcG8sIHN0YXR1cyk7Ci0KLQlnaXRfc3RhdHVzX2xpc3RfZnJlZShzdGF0dXMpOwotCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Ci0KLQlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdGVzdC90ZXN0LXJldi1saXN0LnNoIGIvZXhhbXBsZXMvdGVzdC90ZXN0LXJldi1saXN0LnNoCmluZGV4IGJjMGVlYTcuLmFhNjQ1YmUgMTAwNzU1Ci0tLSBhL2V4YW1wbGVzL3Rlc3QvdGVzdC1yZXYtbGlzdC5zaAorKysgYi9leGFtcGxlcy90ZXN0L3Rlc3QtcmV2LWxpc3Quc2gKQEAgLTQsNyArNCw3IEBACiBST09UPSIkKGRpcm5hbWUgIiQoZGlybmFtZSAiJChkaXJuYW1lICIkVEhJU19GSUxFIikiKSIpIgogUFJPR1JBTT0iJFJPT1QiL2V4YW1wbGVzL3Jldi1saXN0CiBMSUJESVI9IiRST09UIi9idWlsZAotUkVQTz0iJFJPT1QiL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdAorUkVQTz0iJFJPT1QiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQKIAogY2QgIiRSRVBPIgogCmRpZmYgLS1naXQgYS9naXQuZ2l0LWF1dGhvcnMgYi9naXQuZ2l0LWF1dGhvcnMKaW5kZXggM2ZjZjI3Zi4uN2Q0Yzk1YiAxMDA2NDQKLS0tIGEvZ2l0LmdpdC1hdXRob3JzCisrKyBiL2dpdC5naXQtYXV0aG9ycwpAQCAtNjgsMyArNjgsNCBAQAogb2sJU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgogb2sJU3RlZmZlbiBQcm9oYXNrYSA8cHJvaGFza2FAemliLmRlPgogb2sJU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9Aa290bmV0Lm9yZz4KK29rCVRvcnN0ZW4gQsO2Z2Vyc2hhdXNlbiA8dGJvZWdpQHdlYi5kZT4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi5oIGIvaW5jbHVkZS9naXQyLmgKaW5kZXggNWY5ZmM0OC4uZDAwYTIwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyLmgKKysrIGIvaW5jbHVkZS9naXQyLmgKQEAgLTgsNTMgKzgsNTIgQEAKICNpZm5kZWYgSU5DTFVERV9naXRfZ2l0X2hfXwogI2RlZmluZSBJTkNMVURFX2dpdF9naXRfaF9fCiAKLSNpbmNsdWRlICJnaXQyL3ZlcnNpb24uaCIKLQotI2luY2x1ZGUgImdpdDIvY29tbW9uLmgiCi0jaW5jbHVkZSAiZ2l0Mi90aHJlYWRzLmgiCi0jaW5jbHVkZSAiZ2l0Mi9lcnJvcnMuaCIKLQotI2luY2x1ZGUgImdpdDIvdHlwZXMuaCIKLQotI2luY2x1ZGUgImdpdDIvb2lkLmgiCi0jaW5jbHVkZSAiZ2l0Mi9zaWduYXR1cmUuaCIKLSNpbmNsdWRlICJnaXQyL29kYi5oIgotCi0jaW5jbHVkZSAiZ2l0Mi9yZXBvc2l0b3J5LmgiCi0jaW5jbHVkZSAiZ2l0Mi9yZXZ3YWxrLmgiCi0jaW5jbHVkZSAiZ2l0Mi9tZXJnZS5oIgotI2luY2x1ZGUgImdpdDIvZ3JhcGguaCIKLSNpbmNsdWRlICJnaXQyL3JlZnMuaCIKLSNpbmNsdWRlICJnaXQyL3JlZmxvZy5oIgotI2luY2x1ZGUgImdpdDIvcmV2cGFyc2UuaCIKLQotI2luY2x1ZGUgImdpdDIvb2JqZWN0LmgiCi0jaW5jbHVkZSAiZ2l0Mi9ibG9iLmgiCi0jaW5jbHVkZSAiZ2l0Mi9jb21taXQuaCIKLSNpbmNsdWRlICJnaXQyL3RhZy5oIgotI2luY2x1ZGUgImdpdDIvdHJlZS5oIgotI2luY2x1ZGUgImdpdDIvZGlmZi5oIgotCi0jaW5jbHVkZSAiZ2l0Mi9pbmRleC5oIgotI2luY2x1ZGUgImdpdDIvY29uZmlnLmgiCi0jaW5jbHVkZSAiZ2l0Mi90cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJnaXQyL3JlbW90ZS5oIgotI2luY2x1ZGUgImdpdDIvY2xvbmUuaCIKLSNpbmNsdWRlICJnaXQyL2NoZWNrb3V0LmgiCi0jaW5jbHVkZSAiZ2l0Mi9wdXNoLmgiCi0KICNpbmNsdWRlICJnaXQyL2F0dHIuaCIKLSNpbmNsdWRlICJnaXQyL2lnbm9yZS5oIgorI2luY2x1ZGUgImdpdDIvYmxvYi5oIgorI2luY2x1ZGUgImdpdDIvYmxhbWUuaCIKICNpbmNsdWRlICJnaXQyL2JyYW5jaC5oIgotI2luY2x1ZGUgImdpdDIvcmVmc3BlYy5oIgotI2luY2x1ZGUgImdpdDIvbmV0LmgiCi0jaW5jbHVkZSAiZ2l0Mi9zdGF0dXMuaCIKKyNpbmNsdWRlICJnaXQyL2J1ZmZlci5oIgorI2luY2x1ZGUgImdpdDIvY2hlY2tvdXQuaCIKKyNpbmNsdWRlICJnaXQyL2Nsb25lLmgiCisjaW5jbHVkZSAiZ2l0Mi9jb21taXQuaCIKKyNpbmNsdWRlICJnaXQyL2NvbW1vbi5oIgorI2luY2x1ZGUgImdpdDIvY29uZmlnLmgiCisjaW5jbHVkZSAiZ2l0Mi9kaWZmLmgiCisjaW5jbHVkZSAiZ2l0Mi9lcnJvcnMuaCIKKyNpbmNsdWRlICJnaXQyL2ZpbHRlci5oIgorI2luY2x1ZGUgImdpdDIvZ3JhcGguaCIKKyNpbmNsdWRlICJnaXQyL2lnbm9yZS5oIgorI2luY2x1ZGUgImdpdDIvaW5kZXguaCIKICNpbmNsdWRlICJnaXQyL2luZGV4ZXIuaCIKLSNpbmNsdWRlICJnaXQyL3N1Ym1vZHVsZS5oIgotI2luY2x1ZGUgImdpdDIvbm90ZXMuaCIKLSNpbmNsdWRlICJnaXQyL3Jlc2V0LmgiCisjaW5jbHVkZSAiZ2l0Mi9tZXJnZS5oIgogI2luY2x1ZGUgImdpdDIvbWVzc2FnZS5oIgorI2luY2x1ZGUgImdpdDIvbmV0LmgiCisjaW5jbHVkZSAiZ2l0Mi9ub3Rlcy5oIgorI2luY2x1ZGUgImdpdDIvb2JqZWN0LmgiCisjaW5jbHVkZSAiZ2l0Mi9vZGIuaCIKKyNpbmNsdWRlICJnaXQyL29pZC5oIgogI2luY2x1ZGUgImdpdDIvcGFjay5oIgorI2luY2x1ZGUgImdpdDIvcGF0Y2guaCIKKyNpbmNsdWRlICJnaXQyL3BhdGhzcGVjLmgiCisjaW5jbHVkZSAiZ2l0Mi9wdXNoLmgiCisjaW5jbHVkZSAiZ2l0Mi9yZWZkYi5oIgorI2luY2x1ZGUgImdpdDIvcmVmbG9nLmgiCisjaW5jbHVkZSAiZ2l0Mi9yZWZzLmgiCisjaW5jbHVkZSAiZ2l0Mi9yZWZzcGVjLmgiCisjaW5jbHVkZSAiZ2l0Mi9yZW1vdGUuaCIKKyNpbmNsdWRlICJnaXQyL3JlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJnaXQyL3Jlc2V0LmgiCisjaW5jbHVkZSAiZ2l0Mi9yZXZwYXJzZS5oIgorI2luY2x1ZGUgImdpdDIvcmV2d2Fsay5oIgorI2luY2x1ZGUgImdpdDIvc2lnbmF0dXJlLmgiCiAjaW5jbHVkZSAiZ2l0Mi9zdGFzaC5oIgorI2luY2x1ZGUgImdpdDIvc3RhdHVzLmgiCisjaW5jbHVkZSAiZ2l0Mi9zdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJnaXQyL3RhZy5oIgorI2luY2x1ZGUgImdpdDIvdGhyZWFkcy5oIgorI2luY2x1ZGUgImdpdDIvdHJhbnNwb3J0LmgiCisjaW5jbHVkZSAiZ2l0Mi90cmVlLmgiCisjaW5jbHVkZSAiZ2l0Mi90eXBlcy5oIgorI2luY2x1ZGUgImdpdDIvdmVyc2lvbi5oIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9ibGFtZS5oIGIvaW5jbHVkZS9naXQyL2JsYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiY2M1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZ2l0Mi9ibGFtZS5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKworI2lmbmRlZiBJTkNMVURFX2dpdF9ibGFtZV9oX18KKyNkZWZpbmUgSU5DTFVERV9naXRfYmxhbWVfaF9fCisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJvaWQuaCIKKworLyoqCisgKiBAZmlsZSBnaXQyL2JsYW1lLmgKKyAqIEBicmllZiBHaXQgYmxhbWUgcm91dGluZXMKKyAqIEBkZWZncm91cCBnaXRfYmxhbWUgR2l0IGJsYW1lIHJvdXRpbmVzCisgKiBAaW5ncm91cCBHaXQKKyAqIEB7CisgKi8KK0dJVF9CRUdJTl9ERUNMCisKKy8qKgorICogRmxhZ3MgZm9yIGluZGljYXRpbmcgb3B0aW9uIGJlaGF2aW9yIGZvciBnaXRfYmxhbWUgQVBJcy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwkvKiogTm9ybWFsIGJsYW1lLCB0aGUgZGVmYXVsdCAqLworCUdJVF9CTEFNRV9OT1JNQUwgPSAwLAorCS8qKiBUcmFjayBsaW5lcyB0aGF0IGhhdmUgbW92ZWQgd2l0aGluIGEgZmlsZSAobGlrZSBgZ2l0IGJsYW1lIC1NYCkuCisJICogTk9UIElNUExFTUVOVEVELiAqLworCUdJVF9CTEFNRV9UUkFDS19DT1BJRVNfU0FNRV9GSUxFID0gKDE8PDApLAorCS8qKiBUcmFjayBsaW5lcyB0aGF0IGhhdmUgbW92ZWQgYWNyb3NzIGZpbGVzIGluIHRoZSBzYW1lIGNvbW1pdCAobGlrZSBgZ2l0IGJsYW1lIC1DYCkuCisJICogTk9UIElNUExFTUVOVEVELiAqLworCUdJVF9CTEFNRV9UUkFDS19DT1BJRVNfU0FNRV9DT01NSVRfTU9WRVMgPSAoMTw8MSksCisJLyoqIFRyYWNrIGxpbmVzIHRoYXQgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIGFub3RoZXIgZmlsZSB0aGF0IGV4aXN0cyBpbiB0aGUKKwkgKiBzYW1lIGNvbW1pdCAobGlrZSBgZ2l0IGJsYW1lIC1DQ2ApLiBJbXBsaWVzIFNBTUVfRklMRS4KKwkgKiBOT1QgSU1QTEVNRU5URUQuICovCisJR0lUX0JMQU1FX1RSQUNLX0NPUElFU19TQU1FX0NPTU1JVF9DT1BJRVMgPSAoMTw8MiksCisJLyoqIFRyYWNrIGxpbmVzIHRoYXQgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIGFub3RoZXIgZmlsZSB0aGF0IGV4aXN0cyBpbiAqYW55KgorCSAqIGNvbW1pdCAobGlrZSBgZ2l0IGJsYW1lIC1DQ0NgKS4gSW1wbGllcyBTQU1FX0NPTU1JVF9DT1BJRVMuCisJICogTk9UIElNUExFTUVOVEVELiAqLworCUdJVF9CTEFNRV9UUkFDS19DT1BJRVNfQU5ZX0NPTU1JVF9DT1BJRVMgPSAoMTw8MyksCit9IGdpdF9ibGFtZV9mbGFnX3Q7CisKKy8qKgorICogQmxhbWUgb3B0aW9ucyBzdHJ1Y3R1cmUKKyAqCisgKiBVc2UgemVyb3MgdG8gaW5kaWNhdGUgZGVmYXVsdCBzZXR0aW5ncy4gIEl0J3MgZWFzaWVzdCB0byB1c2UgdGhlCisgKiBgR0lUX0JMQU1FX09QVElPTlNfSU5JVGAgbWFjcm86CisgKiAgICAgZ2l0X2JsYW1lX29wdGlvbnMgb3B0cyA9IEdJVF9CTEFNRV9PUFRJT05TX0lOSVQ7CisgKgorICogLSBgZmxhZ3NgIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGBnaXRfYmxhbWVfZmxhZ190YCB2YWx1ZXMgYWJvdmUuCisgKiAtIGBtaW5fbWF0Y2hfY2hhcmFjdGVyc2AgaXMgdGhlIGxvd2VyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgYWxwaGFudW1lcmljCisgKiAgIGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGRldGVjdGVkIGFzIG1vdmluZy9jb3B5aW5nIHdpdGhpbiBhIGZpbGUgZm9yIGl0IHRvCisgKiAgIGFzc29jaWF0ZSB0aG9zZSBsaW5lcyB3aXRoIHRoZSBwYXJlbnQgY29tbWl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMC4KKyAqICAgVGhpcyB2YWx1ZSBvbmx5IHRha2VzIGVmZmVjdCBpZiBhbnkgb2YgdGhlIGBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTXypgCisgKiAgIGZsYWdzIGFyZSBzcGVjaWZpZWQuCisgKiAtIGBuZXdlc3RfY29tbWl0YCBpcyB0aGUgaWQgb2YgdGhlIG5ld2VzdCBjb21taXQgdG8gY29uc2lkZXIuICBUaGUgZGVmYXVsdAorICogICAgICAgICAgICAgICAgICAgaXMgSEVBRC4KKyAqIC0gYG9sZGVzdF9jb21taXRgIGlzIHRoZSBpZCBvZiB0aGUgb2xkZXN0IGNvbW1pdCB0byBjb25zaWRlci4gIFRoZSBkZWZhdWx0CisgKiAgICAgICAgICAgICAgICAgICBpcyB0aGUgZmlyc3QgY29tbWl0IGVuY291bnRlcmVkIHdpdGggYSBOVUxMIHBhcmVudC4KKyAqCS0gYG1pbl9saW5lYCBpcyB0aGUgZmlyc3QgbGluZSBpbiB0aGUgZmlsZSB0byBibGFtZS4gIFRoZSBkZWZhdWx0IGlzIDEgKGxpbmUKKyAqCSAgICAgICAgICAgICBudW1iZXJzIHN0YXJ0IHdpdGggMSkuCisgKgktIGBtYXhfbGluZWAgaXMgdGhlIGxhc3QgbGluZSBpbiB0aGUgZmlsZSB0byBibGFtZS4gIFRoZSBkZWZhdWx0IGlzIHRoZSBsYXN0CisgKgkgICAgICAgICAgICAgbGluZSBvZiB0aGUgZmlsZS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBnaXRfYmxhbWVfb3B0aW9ucyB7CisJdW5zaWduZWQgaW50IHZlcnNpb247CisKKwl1aW50MzJfdCBmbGFnczsKKwl1aW50MTZfdCBtaW5fbWF0Y2hfY2hhcmFjdGVyczsKKwlnaXRfb2lkIG5ld2VzdF9jb21taXQ7CisJZ2l0X29pZCBvbGRlc3RfY29tbWl0OworCXVpbnQzMl90IG1pbl9saW5lOworCXVpbnQzMl90IG1heF9saW5lOworfSBnaXRfYmxhbWVfb3B0aW9uczsKKworI2RlZmluZSBHSVRfQkxBTUVfT1BUSU9OU19WRVJTSU9OIDEKKyNkZWZpbmUgR0lUX0JMQU1FX09QVElPTlNfSU5JVCB7R0lUX0JMQU1FX09QVElPTlNfVkVSU0lPTn0KKworLyoqCisgKiBTdHJ1Y3R1cmUgdGhhdCByZXByZXNlbnRzIGEgYmxhbWUgaHVuay4KKyAqCisgKiAtIGBsaW5lc19pbl9odW5rYCBpcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMgaHVuaworICogLSBgZmluYWxfY29tbWl0X2lkYCBpcyB0aGUgT0lEIG9mIHRoZSBjb21taXQgd2hlcmUgdGhpcyBsaW5lIHdhcyBsYXN0CisgKiAgIGNoYW5nZWQuCisgKiAtIGBmaW5hbF9zdGFydF9saW5lX251bWJlcmAgaXMgdGhlIDEtYmFzZWQgbGluZSBudW1iZXIgd2hlcmUgdGhpcyBodW5rCisgKiAgIGJlZ2lucywgaW4gdGhlIGZpbmFsIHZlcnNpb24gb2YgdGhlIGZpbGUKKyAqIC0gYG9yaWdfY29tbWl0X2lkYCBpcyB0aGUgT0lEIG9mIHRoZSBjb21taXQgd2hlcmUgdGhpcyBodW5rIHdhcyBmb3VuZC4gIFRoaXMKKyAqICAgd2lsbCB1c3VhbGx5IGJlIHRoZSBzYW1lIGFzIGBmaW5hbF9jb21taXRfaWRgLCBleGNlcHQgd2hlbgorICogICBgR0lUX0JMQU1FX1RSQUNLX0NPUElFU19BTllfQ09NTUlUX0NPUElFU2AgaGFzIGJlZW4gc3BlY2lmaWVkLgorICogLSBgb3JpZ19wYXRoYCBpcyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0aGlzIGh1bmsgb3JpZ2luYXRlZCwgYXMgb2YgdGhlCisgKiAgIGNvbW1pdCBzcGVjaWZpZWQgYnkgYG9yaWdfY29tbWl0X2lkYC4KKyAqIC0gYG9yaWdfc3RhcnRfbGluZV9udW1iZXJgIGlzIHRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyIHdoZXJlIHRoaXMgaHVuayBiZWdpbnMKKyAqICAgaW4gdGhlIGZpbGUgbmFtZWQgYnkgYG9yaWdfcGF0aGAgaW4gdGhlIGNvbW1pdCBzcGVjaWZpZWQgYnkKKyAqICAgYG9yaWdfY29tbWl0X2lkYC4KKyAqIC0gYGJvdW5kYXJ5YCBpcyAxIGlmZiB0aGUgaHVuayBoYXMgYmVlbiB0cmFja2VkIHRvIGEgYm91bmRhcnkgY29tbWl0ICh0aGUKKyAqICAgcm9vdCwgb3IgdGhlIGNvbW1pdCBzcGVjaWZpZWQgaW4gZ2l0X2JsYW1lX29wdGlvbnMub2xkZXN0X2NvbW1pdCkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZ2l0X2JsYW1lX2h1bmsgeworCXVpbnQxNl90IGxpbmVzX2luX2h1bms7CisKKwlnaXRfb2lkIGZpbmFsX2NvbW1pdF9pZDsKKwl1aW50MTZfdCBmaW5hbF9zdGFydF9saW5lX251bWJlcjsKKwlnaXRfc2lnbmF0dXJlICpmaW5hbF9zaWduYXR1cmU7CisKKwlnaXRfb2lkIG9yaWdfY29tbWl0X2lkOworCWNvbnN0IGNoYXIgKm9yaWdfcGF0aDsKKwl1aW50MTZfdCBvcmlnX3N0YXJ0X2xpbmVfbnVtYmVyOworCWdpdF9zaWduYXR1cmUgKm9yaWdfc2lnbmF0dXJlOworCisJY2hhciBib3VuZGFyeTsKK30gZ2l0X2JsYW1lX2h1bms7CisKKworLyogT3BhcXVlIHN0cnVjdHVyZSB0byBob2xkIGJsYW1lIHJlc3VsdHMgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9ibGFtZSBnaXRfYmxhbWU7CisKKy8qKgorICogR2V0cyB0aGUgbnVtYmVyIG9mIGh1bmtzIHRoYXQgZXhpc3QgaW4gdGhlIGJsYW1lIHN0cnVjdHVyZS4KKyAqLworR0lUX0VYVEVSTih1aW50MzJfdCkgZ2l0X2JsYW1lX2dldF9odW5rX2NvdW50KGdpdF9ibGFtZSAqYmxhbWUpOworCisvKioKKyAqIEdldHMgdGhlIGJsYW1lIGh1bmsgYXQgdGhlIGdpdmVuIGluZGV4LgorICoKKyAqIEBwYXJhbSBibGFtZSB0aGUgYmxhbWUgc3RydWN0dXJlIHRvIHF1ZXJ5CisgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIGh1bmsgdG8gcmV0cmlldmUKKyAqIEByZXR1cm4gdGhlIGh1bmsgYXQgdGhlIGdpdmVuIGluZGV4LCBvciBOVUxMIG9uIGVycm9yCisgKi8KK0dJVF9FWFRFUk4oY29uc3QgZ2l0X2JsYW1lX2h1bmsqKSBnaXRfYmxhbWVfZ2V0X2h1bmtfYnlpbmRleCgKKwkJZ2l0X2JsYW1lICpibGFtZSwKKwkJdWludDMyX3QgaW5kZXgpOworCisvKioKKyAqIEdldHMgdGhlIGh1bmsgdGhhdCByZWxhdGVzIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlciBpbiB0aGUgbmV3ZXN0IGNvbW1pdC4KKyAqCisgKiBAcGFyYW0gYmxhbWUgdGhlIGJsYW1lIHN0cnVjdHVyZSB0byBxdWVyeQorICogQHBhcmFtIGxpbmVubyB0aGUgKDEtYmFzZWQpIGxpbmUgbnVtYmVyIHRvIGZpbmQgYSBodW5rIGZvcgorICogQHJldHVybiB0aGUgaHVuayB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBsaW5lLCBvciBOVUxMIG9uIGVycm9yCisgKi8KK0dJVF9FWFRFUk4oY29uc3QgZ2l0X2JsYW1lX2h1bmsqKSBnaXRfYmxhbWVfZ2V0X2h1bmtfYnlsaW5lKAorCQlnaXRfYmxhbWUgKmJsYW1lLAorCQl1aW50MzJfdCBsaW5lbm8pOworCisvKioKKyAqIEdldCB0aGUgYmxhbWUgZm9yIGEgc2luZ2xlIGZpbGUuCisgKgorICogQHBhcmFtIG91dCBwb2ludGVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBibGFtZSBvYmplY3QKKyAqIEBwYXJhbSByZXBvIHJlcG9zaXRvcnkgd2hvc2UgaGlzdG9yeSBpcyB0byBiZSB3YWxrZWQKKyAqIEBwYXJhbSBwYXRoIHBhdGggdG8gZmlsZSB0byBjb25zaWRlcgorICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgdGhlIGJsYW1lIG9wZXJhdGlvbi4gIElmIE5VTEwsIHRoaXMgaXMgdHJlYXRlZCBhcworICogICAgICAgICAgICAgICAgdGhvdWdoIEdJVF9CTEFNRV9PUFRJT05TX0lOSVQgd2VyZSBwYXNzZWQuCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgYW4gZXJyb3IgY29kZS4gKHVzZSBnaXRlcnJfbGFzdCBmb3IgaW5mb3JtYXRpb24KKyAqICAgICAgICAgYWJvdXQgdGhlIGVycm9yLikKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9ibGFtZV9maWxlKAorCQlnaXRfYmxhbWUgKipvdXQsCisJCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCQljb25zdCBjaGFyICpwYXRoLAorCQlnaXRfYmxhbWVfb3B0aW9ucyAqb3B0aW9ucyk7CisKKworLyoqCisgKiBHZXQgYmxhbWUgZGF0YSBmb3IgYSBmaWxlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgaW4gbWVtb3J5LiBUaGUgYHJlZmVyZW5jZWAKKyAqIHBhcmFtZXRlciBpcyBhIHByZS1jYWxjdWxhdGVkIGJsYW1lIGZvciB0aGUgaW4tb2RiIGhpc3Rvcnkgb2YgdGhlIGZpbGUuIFRoaXMKKyAqIG1lYW5zIHRoYXQgb25jZSBhIGZpbGUgYmxhbWUgaXMgY29tcGxldGVkICh3aGljaCBjYW4gYmUgZXhwZW5zaXZlKSwgdXBkYXRpbmcKKyAqIHRoZSBidWZmZXIgYmxhbWUgaXMgdmVyeSBmYXN0LgorICoKKyAqIExpbmVzIHRoYXQgZGlmZmVyIGJldHdlZW4gdGhlIGJ1ZmZlciBhbmQgdGhlIGNvbW1pdHRlZCB2ZXJzaW9uIGFyZSBtYXJrZWQgYXMKKyAqIGhhdmluZyBhIHplcm8gT0lEIGZvciB0aGVpciBmaW5hbF9jb21taXRfaWQuCisgKgorICogQHBhcmFtIG91dCBwb2ludGVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSByZXN1bHRpbmcgYmxhbWUgZGF0YQorICogQHBhcmFtIHJlZmVyZW5jZSBjYWNoZWQgYmxhbWUgZnJvbSB0aGUgaGlzdG9yeSBvZiB0aGUgZmlsZSAodXN1YWxseSB0aGUgb3V0cHV0CisgKiAgICAgICAgICAgICAgICAgIGZyb20gZ2l0X2JsYW1lX2ZpbGUpCisgKiBAcGFyYW0gYnVmZmVyIHRoZSAocG9zc2libHkpIG1vZGlmaWVkIGNvbnRlbnRzIG9mIHRoZSBmaWxlCisgKiBAcGFyYW0gYnVmZmVyX2xlbiBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgaW4gdGhlIGJ1ZmZlcgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUuICh1c2UgZ2l0ZXJyX2xhc3QgZm9yIGluZm9ybWF0aW9uCisgKiAgICAgICAgIGFib3V0IHRoZSBlcnJvcikKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9ibGFtZV9idWZmZXIoCisJCWdpdF9ibGFtZSAqKm91dCwKKwkJZ2l0X2JsYW1lICpyZWZlcmVuY2UsCisJCWNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJdWludDMyX3QgYnVmZmVyX2xlbik7CisKKy8qKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGdpdF9ibGFtZV9maWxlIG9yIGdpdF9ibGFtZV9idWZmZXIuCisgKgorICogQHBhcmFtIGJsYW1lIHRoZSBibGFtZSBzdHJ1Y3R1cmUgdG8gZnJlZQorICovCitHSVRfRVhURVJOKHZvaWQpIGdpdF9ibGFtZV9mcmVlKGdpdF9ibGFtZSAqYmxhbWUpOworCisvKiogQH0gKi8KK0dJVF9FTkRfREVDTAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9ibG9iLmggYi9pbmNsdWRlL2dpdDIvYmxvYi5oCmluZGV4IDhmY2E0ODkuLmRjYWI0ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9ibG9iLmgKKysrIGIvaW5jbHVkZS9naXQyL2Jsb2IuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAib2lkLmgiCiAjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCiAKIC8qKgogICogQGZpbGUgZ2l0Mi9ibG9iLmgKQEAgLTk2LDYgKzk3LDM3IEBACiBHSVRfRVhURVJOKGdpdF9vZmZfdCkgZ2l0X2Jsb2JfcmF3c2l6ZShjb25zdCBnaXRfYmxvYiAqYmxvYik7CiAKIC8qKgorICogR2V0IGEgYnVmZmVyIHdpdGggdGhlIGZpbHRlcmVkIGNvbnRlbnQgb2YgYSBibG9iLgorICoKKyAqIFRoaXMgYXBwbGllcyBmaWx0ZXJzIGFzIGlmIHRoZSBibG9iIHdhcyBiZWluZyBjaGVja2VkIG91dCB0byB0aGUKKyAqIHdvcmtpbmcgZGlyZWN0b3J5IHVuZGVyIHRoZSBzcGVjaWZpZWQgZmlsZW5hbWUuICBUaGlzIG1heSBhcHBseQorICogQ1JMRiBmaWx0ZXJpbmcgb3Igb3RoZXIgdHlwZXMgb2YgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIGZpbGUKKyAqIGF0dHJpYnV0ZXMgc2V0IGZvciB0aGUgYmxvYiBhbmQgdGhlIGNvbnRlbnQgZGV0ZWN0ZWQgaW4gaXQuCisgKgorICogVGhlIG91dHB1dCBpcyB3cml0dGVuIGludG8gYSBgZ2l0X2J1ZmAgd2hpY2ggdGhlIGNhbGxlciBtdXN0IGZyZWUKKyAqIHdoZW4gZG9uZSAodmlhIGBnaXRfYnVmX2ZyZWVgKS4KKyAqCisgKiBJZiBubyBmaWx0ZXJzIG5lZWQgdG8gYmUgYXBwbGllZCwgdGhlbiB0aGUgYG91dGAgYnVmZmVyIHdpbGwganVzdCBiZQorICogcG9wdWxhdGVkIHdpdGggYSBwb2ludGVyIHRvIHRoZSByYXcgY29udGVudCBvZiB0aGUgYmxvYi4gIEluIHRoYXQgY2FzZSwKKyAqIGJlIGNhcmVmdWwgdG8gKm5vdCogZnJlZSB0aGUgYmxvYiB1bnRpbCBkb25lIHdpdGggdGhlIGJ1ZmZlci4gIFRvIGtlZXAKKyAqIHRoZSBkYXRhIGRldGFjaGVkIGZyb20gdGhlIGJsb2IsIGNhbGwgYGdpdF9idWZfZ3Jvd2Agb24gdGhlIGJ1ZmZlcgorICogd2l0aCBhIGB3YW50X3NpemVgIG9mIDAgYW5kIHRoZSBidWZmZXIgd2lsbCBiZSByZWFsbG9jYXRlZCB0byBiZQorICogZGV0YWNoZWQgZnJvbSB0aGUgYmxvYi4KKyAqCisgKiBAcGFyYW0gb3V0IFRoZSBnaXRfYnVmIHRvIGJlIGZpbGxlZCBpbgorICogQHBhcmFtIGJsb2IgUG9pbnRlciB0byB0aGUgYmxvYgorICogQHBhcmFtIGFzX3BhdGggUGF0aCB1c2VkIGZvciBmaWxlIGF0dHJpYnV0ZSBsb29rdXBzLCBldGMuCisgKiBAcGFyYW0gY2hlY2tfZm9yX2JpbmFyeV9kYXRhIFNob3VsZCB0aGlzIHRlc3QgaWYgYmxvYiBjb250ZW50IGNvbnRhaW5zCisgKiAgICAgICAgTlVMIGJ5dGVzIC8gbG9va3MgbGlrZSBiaW5hcnkgZGF0YSBiZWZvcmUgYXBwbHlpbmcgZmlsdGVycz8KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9ibG9iX2ZpbHRlcmVkX2NvbnRlbnQoCisJZ2l0X2J1ZiAqb3V0LAorCWdpdF9ibG9iICpibG9iLAorCWNvbnN0IGNoYXIgKmFzX3BhdGgsCisJaW50IGNoZWNrX2Zvcl9iaW5hcnlfZGF0YSk7CisKKy8qKgogICogUmVhZCBhIGZpbGUgZnJvbSB0aGUgd29ya2luZyBmb2xkZXIgb2YgYSByZXBvc2l0b3J5CiAgKiBhbmQgd3JpdGUgaXQgdG8gdGhlIE9iamVjdCBEYXRhYmFzZSBhcyBhIGxvb3NlIGJsb2IKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvYnJhbmNoLmggYi9pbmNsdWRlL2dpdDIvYnJhbmNoLmgKaW5kZXggZGU0MTRlOS4uNDRkNmZkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL2JyYW5jaC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9icmFuY2guaApAQCAtNjYsMzMgKzY2LDQxIEBACiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfYnJhbmNoX2RlbGV0ZShnaXRfcmVmZXJlbmNlICpicmFuY2gpOwogCi10eXBlZGVmIGludCAoKmdpdF9icmFuY2hfZm9yZWFjaF9jYikoCi0JY29uc3QgY2hhciAqYnJhbmNoX25hbWUsCi0JZ2l0X2JyYW5jaF90IGJyYW5jaF90eXBlLAotCXZvaWQgKnBheWxvYWQpOworLyoqIEl0ZXJhdG9yIHR5cGUgZm9yIGJyYW5jaGVzICovCit0eXBlZGVmIHN0cnVjdCBnaXRfYnJhbmNoX2l0ZXJhdG9yIGdpdF9icmFuY2hfaXRlcmF0b3I7CiAKIC8qKgotICogTG9vcCBvdmVyIGFsbCB0aGUgYnJhbmNoZXMgYW5kIGlzc3VlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb25lLgorICogQ3JlYXRlIGFuIGl0ZXJhdG9yIHdoaWNoIGxvb3BzIG92ZXIgdGhlIHJlcXVlc3RlZCBicmFuY2hlcy4KICAqCi0gKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB0aGlzIHdpbGwgc3RvcCBsb29waW5nLgotICoKKyAqIEBwYXJhbSBvdXQgdGhlIGl0ZXJhdG9yCiAgKiBAcGFyYW0gcmVwbyBSZXBvc2l0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIGJyYW5jaGVzLgotICoKICAqIEBwYXJhbSBsaXN0X2ZsYWdzIEZpbHRlcmluZyBmbGFncyBmb3IgdGhlIGJyYW5jaAogICogbGlzdGluZy4gVmFsaWQgdmFsdWVzIGFyZSBHSVRfQlJBTkNIX0xPQ0FMLCBHSVRfQlJBTkNIX1JFTU9URQogICogb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvLgogICoKLSAqIEBwYXJhbSBicmFuY2hfY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHBlciBmb3VuZCBicmFuY2guCi0gKgotICogQHBhcmFtIHBheWxvYWQgRXh0cmEgcGFyYW1ldGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uLgotICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVTRVIgb24gbm9uLXplcm8gY2FsbGJhY2ssIG9yIGVycm9yIGNvZGUKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzICBvciBhbiBlcnJvciBjb2RlCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfYnJhbmNoX2ZvcmVhY2goCitHSVRfRVhURVJOKGludCkgZ2l0X2JyYW5jaF9pdGVyYXRvcl9uZXcoCisJZ2l0X2JyYW5jaF9pdGVyYXRvciAqKm91dCwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQl1bnNpZ25lZCBpbnQgbGlzdF9mbGFncywKLQlnaXRfYnJhbmNoX2ZvcmVhY2hfY2IgYnJhbmNoX2NiLAotCXZvaWQgKnBheWxvYWQpOworCWdpdF9icmFuY2hfdCBsaXN0X2ZsYWdzKTsKKworLyoqCisgKiBSZXRyaWV2ZSB0aGUgbmV4dCBicmFuY2ggZnJvbSB0aGUgaXRlcmF0b3IKKyAqCisgKiBAcGFyYW0gb3V0IHRoZSByZWZlcmVuY2UKKyAqIEBwYXJhbSBvdXRfdHlwZSB0aGUgdHlwZSBvZiBicmFuY2ggKGxvY2FsIG9yIHJlbW90ZS10cmFja2luZykKKyAqIEBwYXJhbSBpdGVyIHRoZSBicmFuY2ggaXRlcmF0b3IKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfSVRFUk9WRVIgaWYgdGhlcmUgYXJlIG5vIG1vcmUgYnJhbmNoZXMgb3IgYW4gZXJyb3IgY29kZS4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9icmFuY2hfbmV4dChnaXRfcmVmZXJlbmNlICoqb3V0LCBnaXRfYnJhbmNoX3QgKm91dF90eXBlLCBnaXRfYnJhbmNoX2l0ZXJhdG9yICppdGVyKTsKKworLyoqCisgKiBGcmVlIGEgYnJhbmNoIGl0ZXJhdG9yCisgKgorICogQHBhcmFtIGl0ZXIgdGhlIGl0ZXJhdG9yIHRvIGZyZWUKKyAqLworR0lUX0VYVEVSTih2b2lkKSBnaXRfYnJhbmNoX2l0ZXJhdG9yX2ZyZWUoZ2l0X2JyYW5jaF9pdGVyYXRvciAqaXRlcik7CiAKIC8qKgogICogTW92ZS9yZW5hbWUgYW4gZXhpc3RpbmcgbG9jYWwgYnJhbmNoIHJlZmVyZW5jZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9idWZmZXIuaCBiL2luY2x1ZGUvZ2l0Mi9idWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmE2MWU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9naXQyL2J1ZmZlci5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKyNpZm5kZWYgSU5DTFVERV9naXRfYnVmX2hfXworI2RlZmluZSBJTkNMVURFX2dpdF9idWZfaF9fCisKKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoqCisgKiBAZmlsZSBnaXQyL2J1ZmZlci5oCisgKiBAYnJpZWYgQnVmZmVyIGV4cG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiBAaW5ncm91cCBHaXQKKyAqIEB7CisgKi8KK0dJVF9CRUdJTl9ERUNMCisKKy8qKgorICogQSBkYXRhIGJ1ZmZlciBmb3IgZXhwb3J0aW5nIGRhdGEgZnJvbSBsaWJnaXQyCisgKgorICogU29tZXRpbWVzIGxpYmdpdDIgd2FudHMgdG8gcmV0dXJuIGFuIGFsbG9jYXRlZCBkYXRhIGJ1ZmZlciB0byB0aGUKKyAqIGNhbGxlciBhbmQgaGF2ZSB0aGUgY2FsbGVyIHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIGZyZWVpbmcgdGhhdCBtZW1vcnkuCisgKiBUaGlzIGNhbiBiZSBhd2t3YXJkIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBlYXN5IGFjY2VzcyB0byB0aGUgc2FtZQorICogYWxsb2NhdGlvbiBmdW5jdGlvbnMgdGhhdCBsaWJnaXQyIGlzIHVzaW5nLiAgSW4gdGhvc2UgY2FzZXMsIGxpYmdpdDIKKyAqIHdpbGwgZmlsbCBpbiBhIGBnaXRfYnVmYCBhbmQgdGhlIGNhbGxlciBjYW4gdXNlIGBnaXRfYnVmX2ZyZWUoKWAgdG8KKyAqIHJlbGVhc2UgaXQgd2hlbiB0aGV5IGFyZSBkb25lLgorICoKKyAqIEEgYGdpdF9idWZgIG1heSBhbHNvIGJlIHVzZWQgZm9yIHRoZSBjYWxsZXIgdG8gcGFzcyBpbiBhIHJlZmVyZW5jZSB0bworICogYSBibG9jayBvZiBtZW1vcnkgdGhleSBob2xkLiAgSW4gdGhpcyBjYXNlLCBsaWJnaXQyIHdpbGwgbm90IHJlc2l6ZSBvcgorICogZnJlZSB0aGUgbWVtb3J5LCBidXQgd2lsbCByZWFkIGZyb20gaXQgYXMgbmVlZGVkLgorICoKKyAqIEEgYGdpdF9idWZgIGlzIGEgcHVibGljIHN0cnVjdHVyZSB3aXRoIHRocmVlIGZpZWxkczoKKyAqCisgKiAtIGBwdHJgIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGFsbG9jYXRlZCBtZW1vcnkuICBJZiBpdCBpcyBOVUxMLAorICogICB0aGVuIHRoZSBgZ2l0X2J1ZmAgaXMgY29uc2lkZXJlZCBlbXB0eSBhbmQgbGliZ2l0MiB3aWxsIGZlZWwgZnJlZQorICogICB0byBvdmVyd3JpdGUgaXQgd2l0aCBuZXcgZGF0YS4KKyAqCisgKiAtIGBzaXplYCBob2xkcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHRoYXQgaXMgYWN0dWFsbHkgdXNlZC4KKyAqCisgKiAtIGBhc2l6ZWAgaG9sZHMgdGhlIGtub3duIHRvdGFsIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5IGlmIHRoZSBgcHRyYAorICogICAgd2FzIGFsbG9jYXRlZCBieSBsaWJnaXQyLiAgSXQgbWF5IGJlIGxhcmdlciB0aGFuIGBzaXplYC4gIElmIGBwdHJgCisgKiAgICB3YXMgbm90IGFsbG9jYXRlZCBieSBsaWJnaXQyIGFuZCBzaG91bGQgbm90IGJlIHJlc2l6ZWQgYW5kL29yIGZyZWVkLAorICogICAgdGhlbiBgYXNpemVgIHdpbGwgYmUgc2V0IHRvIHplcm8uCisgKgorICogU29tZSBBUElzIG1heSBvY2Nhc2lvbmFsbHkgZG8gc29tZXRoaW5nIHNsaWdodGx5IHVudXN1YWwgd2l0aCBhIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgc2V0dGluZyBgcHRyYCB0byBhIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBpbiBieSB0aGUgdXNlci4gIEluCisgKiB0aG9zZSBjYXNlcywgdGhlIGJlaGF2aW9yIHdpbGwgYmUgY2xlYXJseSBkb2N1bWVudGVkIGJ5IHRoZSBBUEkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyICAgKnB0cjsKKwlzaXplX3QgYXNpemUsIHNpemU7Cit9IGdpdF9idWY7CisKKy8qKgorICogU3RhdGljIGluaXRpYWxpemVyIGZvciBnaXRfYnVmIGZyb20gc3RhdGljIGJ1ZmZlcgorICovCisjZGVmaW5lIEdJVF9CVUZfSU5JVF9DT05TVChTVFIsTEVOKSB7IChjaGFyICopKFNUUiksIDAsIChzaXplX3QpKExFTikgfQorCisvKioKKyAqIEZyZWUgdGhlIG1lbW9yeSByZWZlcnJlZCB0byBieSB0aGUgZ2l0X2J1Zi4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBmcmVlIHRoZSBgZ2l0X2J1ZmAgaXRzZWxmLCBqdXN0IHRoZSBtZW1vcnkKKyAqIHBvaW50ZWQgdG8gYnkgYGJ1ZmZlci0+cHRyYC4gIFRoaXMgd2lsbCBub3QgZnJlZSB0aGUgbWVtb3J5IGlmIGl0IGxvb2tzCisgKiBsaWtlIGl0IHdhcyBub3QgYWxsb2NhdGVkIGludGVybmFsbHksIGJ1dCBpdCB3aWxsIGNsZWFyIHRoZSBidWZmZXIgYmFjaworICogdG8gdGhlIGVtcHR5IHN0YXRlLgorICoKKyAqIEBwYXJhbSBidWZmZXIgVGhlIGJ1ZmZlciB0byBkZWFsbG9jYXRlCisgKi8KK0dJVF9FWFRFUk4odm9pZCkgZ2l0X2J1Zl9mcmVlKGdpdF9idWYgKmJ1ZmZlcik7CisKKy8qKgorICogUmVzaXplIHRoZSBidWZmZXIgYWxsb2NhdGlvbiB0byBtYWtlIG1vcmUgc3BhY2UuCisgKgorICogVGhpcyB3aWxsIGF0dGVtcHQgdG8gZ3JvdyB0aGUgYnVmZmVyIHRvIGFjY29tb2RhdGUgdGhlIHRhcmdldCBzaXplLgorICoKKyAqIElmIHRoZSBidWZmZXIgcmVmZXJzIHRvIG1lbW9yeSB0aGF0IHdhcyBub3QgYWxsb2NhdGVkIGJ5IGxpYmdpdDIgKGkuZS4KKyAqIHRoZSBgYXNpemVgIGZpZWxkIGlzIHplcm8pLCB0aGVuIGBwdHJgIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG5ld2x5CisgKiBhbGxvY2F0ZWQgYmxvY2sgb2YgZGF0YS4gIEJlIGNhcmVmdWwgc28gdGhhdCBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZQorICogY2FsbGVyIGlzIG5vdCBsb3N0LiAgQXMgYSBzcGVjaWFsIHZhcmlhbnQsIGlmIHlvdSBwYXNzIGB0YXJnZXRfc2l6ZWAgYXMKKyAqIDAgYW5kIHRoZSBtZW1vcnkgaXMgbm90IGFsbG9jYXRlZCBieSBsaWJnaXQyLCB0aGlzIHdpbGwgYWxsb2NhdGUgYSBuZXcKKyAqIGJ1ZmZlciBvZiBzaXplIGBzaXplYCBhbmQgY29weSB0aGUgZXh0ZXJuYWwgZGF0YSBpbnRvIGl0LgorICoKKyAqIEN1cnJlbnRseSwgdGhpcyB3aWxsIG5ldmVyIHNocmluayBhIGJ1ZmZlciwgb25seSBleHBhbmQgaXQuCisgKgorICogSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoaXMgd2lsbCByZXR1cm4gYW4gZXJyb3IgYW5kIHRoZSBidWZmZXIgd2lsbCBiZQorICogbWFya2VkIGFzIGludmFsaWQgZm9yIGZ1dHVyZSBvcGVyYXRpb25zLCBpbnZhbGlkaW5nIHRoZSBjb250ZW50cy4KKyAqCisgKiBAcGFyYW0gYnVmZmVyIFRoZSBidWZmZXIgdG8gYmUgcmVzaXplZDsgbWF5IG9yIG1heSBub3QgYmUgYWxsb2NhdGVkIHlldAorICogQHBhcmFtIHRhcmdldF9zaXplIFRoZSBkZXNpcmVkIGF2YWlsYWJsZSBzaXplCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gYWxsb2NhdGlvbiBmYWlsdXJlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfYnVmX2dyb3coZ2l0X2J1ZiAqYnVmZmVyLCBzaXplX3QgdGFyZ2V0X3NpemUpOworCisvKioKKyAqIFNldCBidWZmZXIgdG8gYSBjb3B5IG9mIHNvbWUgcmF3IGRhdGEuCisgKgorICogQHBhcmFtIGJ1ZmZlciBUaGUgYnVmZmVyIHRvIHNldAorICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gY29weSBpbnRvIHRoZSBidWZmZXIKKyAqIEBwYXJhbSBkYXRhbGVuIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gY29weSBpbnRvIHRoZSBidWZmZXIKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9idWZfc2V0KAorCWdpdF9idWYgKmJ1ZmZlciwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFsZW4pOworCitHSVRfRU5EX0RFQ0wKKworLyoqIEB9ICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL2NoZWNrb3V0LmggYi9pbmNsdWRlL2dpdDIvY2hlY2tvdXQuaAppbmRleCBhMDg2NDA4Li5lZmFmZGMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvY2hlY2tvdXQuaAorKysgYi9pbmNsdWRlL2dpdDIvY2hlY2tvdXQuaApAQCAtMTMxLDYgKzEzMSwxMyBAQAogCS8qKiBEb24ndCByZWZyZXNoIGluZGV4L2NvbmZpZy9ldGMgYmVmb3JlIGRvaW5nIGNoZWNrb3V0ICovCiAJR0lUX0NIRUNLT1VUX05PX1JFRlJFU0ggPSAoMXUgPDwgOSksCiAKKwkvKiogQWxsb3cgY2hlY2tvdXQgdG8gc2tpcCB1bm1lcmdlZCBmaWxlcyAqLworCUdJVF9DSEVDS09VVF9TS0lQX1VOTUVSR0VEID0gKDF1IDw8IDEwKSwKKwkvKiogRm9yIHVubWVyZ2VkIGZpbGVzLCBjaGVja291dCBzdGFnZSAyIGZyb20gaW5kZXggKi8KKwlHSVRfQ0hFQ0tPVVRfVVNFX09VUlMgPSAoMXUgPDwgMTEpLAorCS8qKiBGb3IgdW5tZXJnZWQgZmlsZXMsIGNoZWNrb3V0IHN0YWdlIDMgZnJvbSBpbmRleCAqLworCUdJVF9DSEVDS09VVF9VU0VfVEhFSVJTID0gKDF1IDw8IDEyKSwKKwogCS8qKiBUcmVhdCBwYXRoc3BlYyBhcyBzaW1wbGUgbGlzdCBvZiBleGFjdCBtYXRjaCBmaWxlIHBhdGhzICovCiAJR0lUX0NIRUNLT1VUX0RJU0FCTEVfUEFUSFNQRUNfTUFUQ0ggPSAoMXUgPDwgMTMpLAogCkBAIC0xNDEsMTMgKzE0OCw2IEBACiAJICogVEhFIEZPTExPV0lORyBPUFRJT05TIEFSRSBOT1QgWUVUIElNUExFTUVOVEVECiAJICovCiAKLQkvKiogQWxsb3cgY2hlY2tvdXQgdG8gc2tpcCB1bm1lcmdlZCBmaWxlcyAoTk9UIElNUExFTUVOVEVEKSAqLwotCUdJVF9DSEVDS09VVF9TS0lQX1VOTUVSR0VEID0gKDF1IDw8IDEwKSwKLQkvKiogRm9yIHVubWVyZ2VkIGZpbGVzLCBjaGVja291dCBzdGFnZSAyIGZyb20gaW5kZXggKE5PVCBJTVBMRU1FTlRFRCkgKi8KLQlHSVRfQ0hFQ0tPVVRfVVNFX09VUlMgPSAoMXUgPDwgMTEpLAotCS8qKiBGb3IgdW5tZXJnZWQgZmlsZXMsIGNoZWNrb3V0IHN0YWdlIDMgZnJvbSBpbmRleCAoTk9UIElNUExFTUVOVEVEKSAqLwotCUdJVF9DSEVDS09VVF9VU0VfVEhFSVJTID0gKDF1IDw8IDEyKSwKLQogCS8qKiBSZWN1cnNpdmVseSBjaGVja291dCBzdWJtb2R1bGVzIHdpdGggc2FtZSBvcHRpb25zIChOT1QgSU1QTEVNRU5URUQpICovCiAJR0lUX0NIRUNLT1VUX1VQREFURV9TVUJNT0RVTEVTID0gKDF1IDw8IDE2KSwKIAkvKiogUmVjdXJzaXZlbHkgY2hlY2tvdXQgc3VibW9kdWxlcyBpZiBIRUFEIG1vdmVkIGluIHN1cGVyIHJlcG8gKE5PVCBJTVBMRU1FTlRFRCkgKi8KQEAgLTIzOCw2ICsyMzgsOSBAQAogCWdpdF90cmVlICpiYXNlbGluZTsgLyoqIGV4cGVjdGVkIGNvbnRlbnQgb2Ygd29ya2RpciwgZGVmYXVsdHMgdG8gSEVBRCAqLwogCiAJY29uc3QgY2hhciAqdGFyZ2V0X2RpcmVjdG9yeTsgLyoqIGFsdGVybmF0aXZlIGNoZWNrb3V0IHBhdGggdG8gd29ya2RpciAqLworCisJY29uc3QgY2hhciAqb3VyX2xhYmVsOyAvKiogdGhlIG5hbWUgb2YgdGhlICJvdXIiIHNpZGUgb2YgY29uZmxpY3RzICovCisJY29uc3QgY2hhciAqdGhlaXJfbGFiZWw7IC8qKiB0aGUgbmFtZSBvZiB0aGUgInRoZWlyIiBzaWRlIG9mIGNvbmZsaWN0cyAqLwogfSBnaXRfY2hlY2tvdXRfb3B0czsKIAogI2RlZmluZSBHSVRfQ0hFQ0tPVVRfT1BUU19WRVJTSU9OIDEKQEAgLTI0OSwxMyArMjUyLDEzIEBACiAgKgogICogQHBhcmFtIHJlcG8gcmVwb3NpdG9yeSB0byBjaGVjayBvdXQgKG11c3QgYmUgbm9uLWJhcmUpCiAgKiBAcGFyYW0gb3B0cyBzcGVjaWZpZXMgY2hlY2tvdXQgb3B0aW9ucyAobWF5IGJlIE5VTEwpCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VPUlBIQU5FREhFQUQgd2hlbiBIRUFEIHBvaW50cyB0byBhIG5vbiBleGlzdGluZworICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FVU5CT1JOQlJBTkNIIHdoZW4gSEVBRCBwb2ludHMgdG8gYSBub24gZXhpc3RpbmcKICAqIGJyYW5jaCwgR0lUX0VSUk9SIG90aGVyd2lzZSAodXNlIGdpdGVycl9sYXN0IGZvciBpbmZvcm1hdGlvbgogICogYWJvdXQgdGhlIGVycm9yKQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X2NoZWNrb3V0X2hlYWQoCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCi0JZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpOworCWNvbnN0IGdpdF9jaGVja291dF9vcHRzICpvcHRzKTsKIAogLyoqCiAgKiBVcGRhdGVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlIGluZGV4LgpAQCAtMjY5LDcgKzI3Miw3IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X2NoZWNrb3V0X2luZGV4KAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAogCWdpdF9pbmRleCAqaW5kZXgsCi0JZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpOworCWNvbnN0IGdpdF9jaGVja291dF9vcHRzICpvcHRzKTsKIAogLyoqCiAgKiBVcGRhdGVzIGZpbGVzIGluIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlIHRvIG1hdGNoIHRoZSBjb250ZW50IG9mIHRoZQpAQCAtMjc3LDcgKzI4MCw3IEBACiAgKgogICogQHBhcmFtIHJlcG8gcmVwb3NpdG9yeSB0byBjaGVjayBvdXQgKG11c3QgYmUgbm9uLWJhcmUpCiAgKiBAcGFyYW0gdHJlZWlzaCBhIGNvbW1pdCwgdGFnIG9yIHRyZWUgd2hpY2ggY29udGVudCB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlCi0gKiB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyAqIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAob3IgTlVMTCB0byB1c2UgSEVBRCkKICAqIEBwYXJhbSBvcHRzIHNwZWNpZmllcyBjaGVja291dCBvcHRpb25zIChtYXkgYmUgTlVMTCkKICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVJST1Igb3RoZXJ3aXNlICh1c2UgZ2l0ZXJyX2xhc3QgZm9yIGluZm9ybWF0aW9uCiAgKiBhYm91dCB0aGUgZXJyb3IpCkBAIC0yODUsNyArMjg4LDcgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfY2hlY2tvdXRfdHJlZSgKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAljb25zdCBnaXRfb2JqZWN0ICp0cmVlaXNoLAotCWdpdF9jaGVja291dF9vcHRzICpvcHRzKTsKKwljb25zdCBnaXRfY2hlY2tvdXRfb3B0cyAqb3B0cyk7CiAKIC8qKiBAfSAqLwogR0lUX0VORF9ERUNMCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvY2xvbmUuaCBiL2luY2x1ZGUvZ2l0Mi9jbG9uZS5oCmluZGV4IDU4NThiNGUuLjMzMWNmOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9jbG9uZS5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9jbG9uZS5oCkBAIC0zNSwzMCArMzUsMTIgQEAKICAqICAgc2V0IHRoZSBgY2hlY2tvdXRfc3RyYXRlZ3lgIHRvIEdJVF9DSEVDS09VVF9ERUZBVUxULgogICogLSBgYmFyZWAgc2hvdWxkIGJlIHNldCB0byB6ZXJvIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIHJlcG8sIG5vbi16ZXJvIGZvcgogICogICBhIGJhcmUgcmVwbwotICogLSBgZmV0Y2hfcHJvZ3Jlc3NfY2JgIGlzIG9wdGlvbmFsIGNhbGxiYWNrIGZvciBmZXRjaCBwcm9ncmVzcy4gQmUgYXdhcmUgdGhhdAotICogICB0aGlzIGlzIGNhbGxlZCBpbmxpbmUgd2l0aCBuZXR3b3JrIGFuZCBpbmRleGluZyBvcGVyYXRpb25zLCBzbyBwZXJmb3JtYW5jZQotICogICBtYXkgYmUgYWZmZWN0ZWQuCi0gKiAtIGBmZXRjaF9wcm9ncmVzc19wYXlsb2FkYCBpcyBwYXlsb2FkIGZvciBmZXRjaF9wcm9ncmVzc19jYgorICogLSBgaWdub3JlX2NlcnRfZXJyb3JzYCBzaG91bGQgYmUgc2V0IHRvIDEgaWYgZXJyb3JzIHZhbGlkYXRpbmcgdGhlIHJlbW90ZSBob3N0J3MKKyAqICAgY2VydGlmaWNhdGUgc2hvdWxkIGJlIGlnbm9yZWQuCiAgKgogICogICAqKiAib3JpZ2luIiByZW1vdGUgb3B0aW9uczogKioKICAqIC0gYHJlbW90ZV9uYW1lYCBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgIm9yaWdpbiIgcmVtb3RlLiAgVGhlIGRlZmF1bHQgaXMKICAqICAgIm9yaWdpbiIuCi0gKiAtIGBwdXNodXJsYCBpcyBhIFVSTCB0byBiZSB1c2VkIGZvciBwdXNoaW5nLiAgTlVMTCBtZWFucyB1c2UgdGhlIGZldGNoIHVybC4KLSAqIC0gYGZldGNoX3NwZWNgIGlzIHRoZSBmZXRjaCBzcGVjaWZpY2F0aW9uIHRvIGJlIHVzZWQgZm9yIGZldGNoaW5nLiAgTlVMTAotICogICByZXN1bHRzIGluIHRoZSBzYW1lIGJlaGF2aW9yIGFzIEdJVF9SRU1PVEVfREVGQVVMVF9GRVRDSC4KLSAqIC0gYHB1c2hfc3BlY2AgaXMgdGhlIGZldGNoIHNwZWNpZmljYXRpb24gdG8gYmUgdXNlZCBmb3IgcHVzaGluZy4gIE5VTEwgbWVhbnMKLSAqICAgdXNlIHRoZSBzYW1lIHNwZWMgYXMgZm9yIGZldGNoaW5nLgotICogLSBgY3JlZF9hY3F1aXJlX2NiYCBpcyBhIGNhbGxiYWNrIHRvIGJlIHVzZWQgaWYgY3JlZGVudGlhbHMgYXJlIHJlcXVpcmVkCi0gKiAgIGR1cmluZyB0aGUgaW5pdGlhbCBmZXRjaC4KLSAqIC0gYGNyZWRfYWNxdWlyZV9wYXlsb2FkYCBpcyB0aGUgcGF5bG9hZCBmb3IgdGhlIGFib3ZlIGNhbGxiYWNrLgotICogLSBgdHJhbnNwb3J0X2ZsYWdzYCBpcyBmbGFncyB1c2VkIHRvIGNyZWF0ZSB0cmFuc3BvcnQgaWYgbm8gdHJhbnNwb3J0IGlzCi0gKiAgIHByb3ZpZGVkLgotICogLSBgdHJhbnNwb3J0YCBpcyBhIGN1c3RvbSB0cmFuc3BvcnQgdG8gYmUgdXNlZCBmb3IgdGhlIGluaXRpYWwgZmV0Y2guICBOVUxMCi0gKiAgIG1lYW5zIHVzZSB0aGUgdHJhbnNwb3J0IGF1dG9kZXRlY3RlZCBmcm9tIHRoZSBVUkwuCi0gKiAtIGByZW1vdGVfY2FsbGJhY2tzYCBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IGN1c3RvbSBwcm9ncmVzcyBjYWxsYmFja3MgZm9yCi0gKiAgIHRoZSBvcmlnaW4gcmVtb3RlIGJlZm9yZSB0aGUgZmV0Y2ggaXMgaW5pdGlhdGVkLgotICogLSBgcmVtb3RlX2F1dG90YWdgIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGF1dG90YWcgc2V0dGluZyBiZWZvcmUgdGhlCi0gKiAgIGluaXRpYWwgZmV0Y2guICBUaGUgZGVmYXVsdCBpcyBHSVRfUkVNT1RFX0RPV05MT0FEX1RBR1NfQUxMLgogICogLSBgY2hlY2tvdXRfYnJhbmNoYCBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGNoZWNrb3V0LiBOVUxMIG1lYW5zCiAgKiAgIHVzZSB0aGUgcmVtb3RlJ3MgSEVBRC4KICAqLwpAQCAtNjcsMjkgKzQ5LDIzIEBACiAJdW5zaWduZWQgaW50IHZlcnNpb247CiAKIAlnaXRfY2hlY2tvdXRfb3B0cyBjaGVja291dF9vcHRzOwotCWludCBiYXJlOwotCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBmZXRjaF9wcm9ncmVzc19jYjsKLQl2b2lkICpmZXRjaF9wcm9ncmVzc19wYXlsb2FkOworCWdpdF9yZW1vdGVfY2FsbGJhY2tzIHJlbW90ZV9jYWxsYmFja3M7CiAKKwlpbnQgYmFyZTsKKwlpbnQgaWdub3JlX2NlcnRfZXJyb3JzOwogCWNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lOwotCWNvbnN0IGNoYXIgKnB1c2h1cmw7Ci0JY29uc3QgY2hhciAqZmV0Y2hfc3BlYzsKLQljb25zdCBjaGFyICpwdXNoX3NwZWM7Ci0JZ2l0X2NyZWRfYWNxdWlyZV9jYiBjcmVkX2FjcXVpcmVfY2I7Ci0Jdm9pZCAqY3JlZF9hY3F1aXJlX3BheWxvYWQ7Ci0gICAgZ2l0X3RyYW5zcG9ydF9mbGFnc190IHRyYW5zcG9ydF9mbGFnczsKLQlnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7Ci0JZ2l0X3JlbW90ZV9jYWxsYmFja3MgKnJlbW90ZV9jYWxsYmFja3M7Ci0JZ2l0X3JlbW90ZV9hdXRvdGFnX29wdGlvbl90IHJlbW90ZV9hdXRvdGFnOwogCWNvbnN0IGNoYXIqIGNoZWNrb3V0X2JyYW5jaDsKIH0gZ2l0X2Nsb25lX29wdGlvbnM7CiAKICNkZWZpbmUgR0lUX0NMT05FX09QVElPTlNfVkVSU0lPTiAxCi0jZGVmaW5lIEdJVF9DTE9ORV9PUFRJT05TX0lOSVQge0dJVF9DTE9ORV9PUFRJT05TX1ZFUlNJT04sIHtHSVRfQ0hFQ0tPVVRfT1BUU19WRVJTSU9OLCBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEV9fQorI2RlZmluZSBHSVRfQ0xPTkVfT1BUSU9OU19JTklUIHtHSVRfQ0xPTkVfT1BUSU9OU19WRVJTSU9OLCB7R0lUX0NIRUNLT1VUX09QVFNfVkVSU0lPTiwgR0lUX0NIRUNLT1VUX1NBRkVfQ1JFQVRFfSwgR0lUX1JFTU9URV9DQUxMQkFDS1NfSU5JVH0KIAogLyoqCi0gKiBDbG9uZSBhIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgY2hlY2tvdXQgdGhlIGJyYW5jaCBwb2ludGVkIHRvIGJ5IHRoZSByZW1vdGUKLSAqIEhFQUQuCisgKiBDbG9uZSBhIHJlbW90ZSByZXBvc2l0b3J5LgorICoKKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzaW1wbGUgY2FzZS4gSWYgeW91J2QgbGlrZSB0byBjcmVhdGUgdGhlCisgKiByZXBvc2l0b3J5IG9yIHJlbW90ZSB3aXRoIG5vbi1kZWZhdWx0IHNldHRpbmdzLCB5b3UgY2FuIGNyZWF0ZSBhbmQKKyAqIGNvbmZpZ3VyZSB0aGVtIGFuZCB0aGVuIHVzZSBgZ2l0X2Nsb25lX2ludG8oKWAuCiAgKgogICogQHBhcmFtIG91dCBwb2ludGVyIHRoYXQgd2lsbCByZWNlaXZlIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeSBvYmplY3QKICAqIEBwYXJhbSB1cmwgdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGNsb25lCkBAIC0xMDUsNiArODEsMjIgQEAKIAkJY29uc3QgY2hhciAqbG9jYWxfcGF0aCwKIAkJY29uc3QgZ2l0X2Nsb25lX29wdGlvbnMgKm9wdGlvbnMpOwogCisvKioKKyAqIENsb25lIGludG8gYSByZXBvc2l0b3J5CisgKgorICogQWZ0ZXIgY3JlYXRpbmcgdGhlIHJlcG9zaXRvcnkgYW5kIHJlbW90ZSBhbmQgY29uZmlndXJpbmcgdGhlbSBmb3IKKyAqIHBhdGhzIGFuZCBjYWxsYmFja3MgcmVzcGVjdGl2ZWx5LCB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0bworICogcGVyZm9ybSB0aGUgY2xvbmUgb3BlcmF0aW9uIGFuZCBvcHRpb25hbGx5IGNoZWNrb3V0IGZpbGVzLgorICoKKyAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIHVzZQorICogQHBhcmFtIHJlbW90ZSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbQorICogQHBhcmFtIGNvX29wdHMgb3B0aW9ucyB0byB1c2UgZHVyaW5nIGNoZWNrb3V0CisgKiBAcGFyYW0gYnJhbmNoIHRoZSBicmFuY2ggdG8gY2hlY2tvdXQgYWZ0ZXIgdGhlIGNsb25lLCBwYXNzIE5VTEwgZm9yIHRoZSByZW1vdGUncworICogZGVmYXVsdCBicmFuY2gKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9jbG9uZV9pbnRvKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfcmVtb3RlICpyZW1vdGUsIGNvbnN0IGdpdF9jaGVja291dF9vcHRzICpjb19vcHRzLCBjb25zdCBjaGFyICpicmFuY2gpOworCiAvKiogQH0gKi8KIEdJVF9FTkRfREVDTAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvY29tbWl0LmggYi9pbmNsdWRlL2dpdDIvY29tbWl0LmgKaW5kZXggNTQ0ZDIxZC4uYTA4Y2YxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL2NvbW1pdC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9jb21taXQuaApAQCAtMjQsMTcgKzI0LDI0IEBACiAvKioKICAqIExvb2t1cCBhIGNvbW1pdCBvYmplY3QgZnJvbSBhIHJlcG9zaXRvcnkuCiAgKgorICogVGhlIHJldHVybmVkIG9iamVjdCBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aCBgZ2l0X2NvbW1pdF9mcmVlYCB3aGVuIG5vCisgKiBsb25nZXIgbmVlZGVkLgorICoKICAqIEBwYXJhbSBjb21taXQgcG9pbnRlciB0byB0aGUgbG9va2VkIHVwIGNvbW1pdAogICogQHBhcmFtIHJlcG8gdGhlIHJlcG8gdG8gdXNlIHdoZW4gbG9jYXRpbmcgdGhlIGNvbW1pdC4KICAqIEBwYXJhbSBpZCBpZGVudGl0eSBvZiB0aGUgY29tbWl0IHRvIGxvY2F0ZS4gSWYgdGhlIG9iamVjdCBpcwogICoJCWFuIGFubm90YXRlZCB0YWcgaXQgd2lsbCBiZSBwZWVsZWQgYmFjayB0byB0aGUgY29tbWl0LgogICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKICAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9jb21taXRfbG9va3VwKGdpdF9jb21taXQgKipjb21taXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBnaXRfb2lkICppZCk7CitHSVRfRVhURVJOKGludCkgZ2l0X2NvbW1pdF9sb29rdXAoCisJZ2l0X2NvbW1pdCAqKmNvbW1pdCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGdpdF9vaWQgKmlkKTsKIAogLyoqCi0gKiBMb29rdXAgYSBjb21taXQgb2JqZWN0IGZyb20gYSByZXBvc2l0b3J5LAotICogZ2l2ZW4gYSBwcmVmaXggb2YgaXRzIGlkZW50aWZpZXIgKHNob3J0IGlkKS4KKyAqIExvb2t1cCBhIGNvbW1pdCBvYmplY3QgZnJvbSBhIHJlcG9zaXRvcnksIGdpdmVuIGEgcHJlZml4IG9mIGl0cworICogaWRlbnRpZmllciAoc2hvcnQgaWQpLgorICoKKyAqIFRoZSByZXR1cm5lZCBvYmplY3Qgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggYGdpdF9jb21taXRfZnJlZWAgd2hlbiBubworICogbG9uZ2VyIG5lZWRlZC4KICAqCiAgKiBAc2VlIGdpdF9vYmplY3RfbG9va3VwX3ByZWZpeAogICoKQEAgLTQ1LDcgKzUyLDggQEAKICAqIEBwYXJhbSBsZW4gdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnQgaWRlbnRpZmllcgogICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKICAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9jb21taXRfbG9va3VwX3ByZWZpeChnaXRfY29tbWl0ICoqY29tbWl0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgZ2l0X29pZCAqaWQsIHNpemVfdCBsZW4pOworR0lUX0VYVEVSTihpbnQpIGdpdF9jb21taXRfbG9va3VwX3ByZWZpeCgKKwlnaXRfY29tbWl0ICoqY29tbWl0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgZ2l0X29pZCAqaWQsIHNpemVfdCBsZW4pOwogCiAvKioKICAqIENsb3NlIGFuIG9wZW4gY29tbWl0CkBAIC05MiwxMiArMTAwLDIzIEBACiAvKioKICAqIEdldCB0aGUgZnVsbCBtZXNzYWdlIG9mIGEgY29tbWl0LgogICoKKyAqIFRoZSByZXR1cm5lZCBtZXNzYWdlIHdpbGwgYmUgc2xpZ2h0bHkgcHJldHRpZmllZCBieSByZW1vdmluZyBhbnkKKyAqIHBvdGVudGlhbCBsZWFkaW5nIG5ld2xpbmVzLgorICoKICAqIEBwYXJhbSBjb21taXQgYSBwcmV2aW91c2x5IGxvYWRlZCBjb21taXQuCiAgKiBAcmV0dXJuIHRoZSBtZXNzYWdlIG9mIGEgY29tbWl0CiAgKi8KIEdJVF9FWFRFUk4oY29uc3QgY2hhciAqKSBnaXRfY29tbWl0X21lc3NhZ2UoY29uc3QgZ2l0X2NvbW1pdCAqY29tbWl0KTsKIAogLyoqCisgKiBHZXQgdGhlIGZ1bGwgcmF3IG1lc3NhZ2Ugb2YgYSBjb21taXQuCisgKgorICogQHBhcmFtIGNvbW1pdCBhIHByZXZpb3VzbHkgbG9hZGVkIGNvbW1pdC4KKyAqIEByZXR1cm4gdGhlIHJhdyBtZXNzYWdlIG9mIGEgY29tbWl0CisgKi8KK0dJVF9FWFRFUk4oY29uc3QgY2hhciAqKSBnaXRfY29tbWl0X21lc3NhZ2VfcmF3KGNvbnN0IGdpdF9jb21taXQgKmNvbW1pdCk7CisKKy8qKgogICogR2V0IHRoZSBjb21taXQgdGltZSAoaS5lLiBjb21taXR0ZXIgdGltZSkgb2YgYSBjb21taXQuCiAgKgogICogQHBhcmFtIGNvbW1pdCBhIHByZXZpb3VzbHkgbG9hZGVkIGNvbW1pdC4KQEAgLTEzMCw2ICsxNDksMTQgQEAKIEdJVF9FWFRFUk4oY29uc3QgZ2l0X3NpZ25hdHVyZSAqKSBnaXRfY29tbWl0X2F1dGhvcihjb25zdCBnaXRfY29tbWl0ICpjb21taXQpOwogCiAvKioKKyAqIEdldCB0aGUgZnVsbCByYXcgdGV4dCBvZiB0aGUgY29tbWl0IGhlYWRlci4KKyAqCisgKiBAcGFyYW0gY29tbWl0IGEgcHJldmlvdXNseSBsb2FkZWQgY29tbWl0CisgKiBAcmV0dXJuIHRoZSBoZWFkZXIgdGV4dCBvZiB0aGUgY29tbWl0CisgKi8KK0dJVF9FWFRFUk4oY29uc3QgY2hhciAqKSBnaXRfY29tbWl0X3Jhd19oZWFkZXIoY29uc3QgZ2l0X2NvbW1pdCAqY29tbWl0KTsKKworLyoqCiAgKiBHZXQgdGhlIHRyZWUgcG9pbnRlZCB0byBieSBhIGNvbW1pdC4KICAqCiAgKiBAcGFyYW0gdHJlZV9vdXQgcG9pbnRlciB3aGVyZSB0byBzdG9yZSB0aGUgdHJlZSBvYmplY3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9jb21tb24uaCBiL2luY2x1ZGUvZ2l0Mi9jb21tb24uaAppbmRleCBiNTJlMTM5Li5kY2EwYzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9naXQyL2NvbW1vbi5oCkBAIC0xMDUsNyArMTA1LDggQEAKICAqLwogdHlwZWRlZiBlbnVtIHsKIAlHSVRfQ0FQX1RIUkVBRFMJCQk9ICggMSA8PCAwICksCi0JR0lUX0NBUF9IVFRQUwkJCT0gKCAxIDw8IDEgKQorCUdJVF9DQVBfSFRUUFMJCQk9ICggMSA8PCAxICksCisJR0lUX0NBUF9TU0gJCQkJPSAoIDEgPDwgMiApLAogfSBnaXRfY2FwX3Q7CiAKIC8qKgpAQCAtMTM1LDcgKzEzNiw5IEBACiAJR0lUX09QVF9TRVRfQ0FDSEVfT0JKRUNUX0xJTUlULAogCUdJVF9PUFRfU0VUX0NBQ0hFX01BWF9TSVpFLAogCUdJVF9PUFRfRU5BQkxFX0NBQ0hJTkcsCi0JR0lUX09QVF9HRVRfQ0FDSEVEX01FTU9SWQorCUdJVF9PUFRfR0VUX0NBQ0hFRF9NRU1PUlksCisJR0lUX09QVF9HRVRfVEVNUExBVEVfUEFUSCwKKwlHSVRfT1BUX1NFVF9URU1QTEFURV9QQVRICiB9IGdpdF9saWJnaXQyX29wdF90OwogCiAvKioKQEAgLTIwOSw2ICsyMTIsMTggQEAKICAqCQk+IEdldCB0aGUgY3VycmVudCBieXRlcyBpbiBjYWNoZSBhbmQgdGhlIG1heGltdW0gdGhhdCB3b3VsZCBiZQogICoJCT4gYWxsb3dlZCBpbiB0aGUgY2FjaGUuCiAgKgorICoJKiBvcHRzKEdJVF9PUFRfR0VUX1RFTVBMQVRFX1BBVEgsIGNoYXIgKm91dCwgc2l6ZV90IGxlbikKKyAqCisgKgkJPiBHZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUgcGF0aC4KKyAqCQk+IFRoZSBwYXRoIGlzIHdyaXR0ZW4gdG8gdGhlIGBvdXRgCisgKgkJPiBidWZmZXIgdXAgdG8gc2l6ZSBgbGVuYC4gIFJldHVybnMgR0lUX0VCVUZTIGlmIGJ1ZmZlciBpcyB0b28gc21hbGwuCisgKgorICoJKiBvcHRzKEdJVF9PUFRfU0VUX1RFTVBMQVRFX1BBVEgsIGNvbnN0IGNoYXIgKnBhdGgpCisgKgorICoJCT4gU2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlIHBhdGguCisgKgkJPgorICoJCT4gLSBgcGF0aGAgZGlyZWN0b3J5IG9mIHRlbXBsYXRlLgorICoKICAqIEBwYXJhbSBvcHRpb24gT3B0aW9uIGtleQogICogQHBhcmFtIC4uLiB2YWx1ZSB0byBzZXQgdGhlIG9wdGlvbgogICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9jb25maWcuaCBiL2luY2x1ZGUvZ2l0Mi9jb25maWcuaAppbmRleCA4MjdkNDM1Li45NWRhNGJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvY29uZmlnLmgKKysrIGIvaW5jbHVkZS9naXQyL2NvbmZpZy5oCkBAIC02MSw2ICs2MSw3IEBACiB9IGdpdF9jb25maWdfZW50cnk7CiAKIHR5cGVkZWYgaW50ICAoKmdpdF9jb25maWdfZm9yZWFjaF9jYikoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqLCB2b2lkICopOwordHlwZWRlZiBzdHJ1Y3QgZ2l0X2NvbmZpZ19pdGVyYXRvciBnaXRfY29uZmlnX2l0ZXJhdG9yOwogCiB0eXBlZGVmIGVudW0gewogCUdJVF9DVkFSX0ZBTFNFID0gMCwKQEAgLTMyNyw3ICszMjgsNyBAQAogR0lUX0VYVEVSTihpbnQpIGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICoqb3V0LCBjb25zdCBnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAvKioKLSAqIEdldCBlYWNoIHZhbHVlIG9mIGEgbXVsdGl2YXIuCisgKiBHZXQgZWFjaCB2YWx1ZSBvZiBhIG11bHRpdmFyIGluIGEgZm9yZWFjaCBjYWxsYmFjawogICoKICAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIHZhcmlhYmxlIGZvdW5kCiAgKgpAQCAtMzM4LDcgKzMzOSwzNCBAQAogICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZWFjaCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKICAqIEBwYXJhbSBwYXlsb2FkIG9wYXF1ZSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjb25zdCBnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCwgZ2l0X2NvbmZpZ19mb3JlYWNoX2NiIGNhbGxiYWNrLCB2b2lkICpwYXlsb2FkKTsKK0dJVF9FWFRFUk4oaW50KSBnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNvbnN0IGdpdF9jb25maWcgKmNmZywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVnZXhwLCBnaXRfY29uZmlnX2ZvcmVhY2hfY2IgY2FsbGJhY2ssIHZvaWQgKnBheWxvYWQpOworCisvKioKKyAqIEdldCBlYWNoIHZhbHVlIG9mIGEgbXVsdGl2YXIKKyAqCisgKiBAcGFyYW0gb3V0IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGl0ZXJhdG9yCisgKiBAcGFyYW0gY2ZnIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSB2YXJpYWJsZQorICogQHBhcmFtIG5hbWUgdGhlIHZhcmlhYmxlJ3MgbmFtZQorICogQHBhcmFtIHJlZ2V4cCByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHdoaWNoIHZhcmlhYmxlcyB3ZSdyZQorICogaW50ZXJlc3RlZCBpbi4gVXNlIE5VTEwgdG8gaW5kaWNhdGUgYWxsCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfY29uZmlnX211bHRpdmFyX2l0ZXJhdG9yX25ldyhnaXRfY29uZmlnX2l0ZXJhdG9yICoqb3V0LCBjb25zdCBnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCk7CisKKy8qKgorICogUmV0dXJuIHRoZSBjdXJyZW50IGVudHJ5IGFuZCBhZHZhbmNlIHRoZSBpdGVyYXRvcgorICoKKyAqIEBwYXJhbSBlbnRyeSBwb2ludGVyIHRvIHN0b3JlIHRoZSBlbnRyeQorICogQHBhcmFtIGl0ZXIgdGhlIGl0ZXJhdG9yCisgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZS4gR0lUX0lURVJPVkVSIGlmIHRoZSBpdGVyYXRpb24gaGFzIGNvbXBsZXRlZAorICovCitHSVRfRVhURVJOKGludCkgZ2l0X2NvbmZpZ19uZXh0KGdpdF9jb25maWdfZW50cnkgKiplbnRyeSwgZ2l0X2NvbmZpZ19pdGVyYXRvciAqaXRlcik7CisKKy8qKgorICogRnJlZSBhIGNvbmZpZyBpdGVyYXRvcgorICoKKyAqIEBwYXJhbSBpdGVyIHRoZSBpdGVyYXRvciB0byBmcmVlCisgKi8KK0dJVF9FWFRFUk4odm9pZCkgZ2l0X2NvbmZpZ19pdGVyYXRvcl9mcmVlKGdpdF9jb25maWdfaXRlcmF0b3IgKml0ZXIpOwogCiAvKioKICAqIFNldCB0aGUgdmFsdWUgb2YgYW4gaW50ZWdlciBjb25maWcgdmFyaWFibGUgaW4gdGhlIGNvbmZpZyBmaWxlCkBAIC00MDcsNiArNDM1LDE3IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X2NvbmZpZ19kZWxldGVfZW50cnkoZ2l0X2NvbmZpZyAqY2ZnLCBjb25zdCBjaGFyICpuYW1lKTsKIAogLyoqCisgKiBEZWxldGVzIG9uZSBvciBzZXZlcmFsIGVudHJpZXMgZnJvbSBhIG11bHRpdmFyIGluIHRoZSBsb2NhbCBjb25maWcgZmlsZS4KKyAqCisgKiBAcGFyYW0gY2ZnIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSB2YXJpYWJsZXMKKyAqIEBwYXJhbSBuYW1lIHRoZSB2YXJpYWJsZSdzIG5hbWUKKyAqIEBwYXJhbSByZWdleHAgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gaW5kaWNhdGUgd2hpY2ggdmFsdWVzIHRvIGRlbGV0ZQorICoKKyAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfY29uZmlnX2RlbGV0ZV9tdWx0aXZhcihnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCk7CisKKy8qKgogICogUGVyZm9ybSBhbiBvcGVyYXRpb24gb24gZWFjaCBjb25maWcgdmFyaWFibGUuCiAgKgogICogVGhlIGNhbGxiYWNrIHJlY2VpdmVzIHRoZSBub3JtYWxpemVkIG5hbWUgYW5kIHZhbHVlIG9mIGVhY2ggdmFyaWFibGUKQEAgLTQyNSw2ICs0NjQsMjkgQEAKIAl2b2lkICpwYXlsb2FkKTsKIAogLyoqCisgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBjb25maWcgdmFyaWFibGVzCisgKgorICogVXNlIGBnaXRfY29uZmlnX25leHRgIHRvIGFkdmFuY2UgdGhlIGl0ZXJhdGlvbiBhbmQKKyAqIGBnaXRfY29uZmlnX2l0ZXJhdG9yX2ZyZWVgIHdoZW4gZG9uZS4KKyAqCisgKiBAcGFyYW0gb3V0IHBvaW50ZXIgdG8gc3RvcmUgdGhlIGl0ZXJhdG9yCisgKiBAcGFyYW0gY2ZnIHdoZXJlIHRvIGdlIHRoZSB2YXJpYWJsZXMgZnJvbQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X2NvbmZpZ19pdGVyYXRvcl9uZXcoZ2l0X2NvbmZpZ19pdGVyYXRvciAqKm91dCwgY29uc3QgZ2l0X2NvbmZpZyAqY2ZnKTsKKworLyoqCisgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBjb25maWcgdmFyaWFibGVzIHdob3NlIG5hbWUgbWF0Y2hlcyBhIHBhdHRlcm4KKyAqCisgKiBVc2UgYGdpdF9jb25maWdfbmV4dGAgdG8gYWR2YW5jZSB0aGUgaXRlcmF0aW9uIGFuZAorICogYGdpdF9jb25maWdfaXRlcmF0b3JfZnJlZWAgd2hlbiBkb25lLgorICoKKyAqIEBwYXJhbSBvdXQgcG9pbnRlciB0byBzdG9yZSB0aGUgaXRlcmF0b3IKKyAqIEBwYXJhbSBjZmcgd2hlcmUgdG8gZ2UgdGhlIHZhcmlhYmxlcyBmcm9tCisgKiBAcGFyYW0gcmVnZXhwIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgbmFtZXMKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9jb25maWdfaXRlcmF0b3JfZ2xvYl9uZXcoZ2l0X2NvbmZpZ19pdGVyYXRvciAqKm91dCwgY29uc3QgZ2l0X2NvbmZpZyAqY2ZnLCBjb25zdCBjaGFyICpyZWdleHApOworCisvKioKICAqIFBlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIGVhY2ggY29uZmlnIHZhcmlhYmxlIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLgogICoKICAqIFRoaXMgYmVoYXZpb3JzIGxpa2UgYGdpdF9jb25maWdfZm9yZWFjaGAgd2l0aCBhbiBhZGRpdGlvbmFsIGZpbHRlciBvZiBhCkBAIC01MzUsNiArNTk3LDI1IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X2NvbmZpZ19wYXJzZV9pbnQ2NChpbnQ2NF90ICpvdXQsIGNvbnN0IGNoYXIgKnZhbHVlKTsKIAogCisvKioKKyAqIFBlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIGVhY2ggY29uZmlnIHZhcmlhYmxlIGluIGdpdmVuIGNvbmZpZyBiYWNrZW5kCisgKiBtYXRjaGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAqCisgKiBUaGlzIGJlaGF2aW9ycyBsaWtlIGBnaXRfY29uZmlnX2ZvcmVhY2hfbWF0Y2hgIGV4Y2VwdCBpbnN0ZWFkIG9mIGFsbCBjb25maWcKKyAqIGVudHJpZXMgaXQganVzdCBlbnVtZXJhdGVzIHRocm91Z2ggdGhlIGdpdmVuIGJhY2tlbmQgZW50cnkuCisgKgorICogQHBhcmFtIGJhY2tlbmQgd2hlcmUgdG8gZ2V0IHRoZSB2YXJpYWJsZXMgZnJvbQorICogQHBhcmFtIHJlZ2V4cCByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdCBjb25maWcgbmFtZXMgKGNhbiBiZSBOVUxMKQorICogQHBhcmFtIGNhbGxiYWNrIHRoZSBmdW5jdGlvbiB0byBjYWxsIG9uIGVhY2ggdmFyaWFibGUKKyAqIEBwYXJhbSBwYXlsb2FkIHRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfY29uZmlnX2JhY2tlbmRfZm9yZWFjaF9tYXRjaCgKKwlnaXRfY29uZmlnX2JhY2tlbmQgKmJhY2tlbmQsCisJY29uc3QgY2hhciAqcmVnZXhwLAorCWludCAoKmZuKShjb25zdCBnaXRfY29uZmlnX2VudHJ5ICosIHZvaWQgKiksCisJdm9pZCAqZGF0YSk7CisKKwogLyoqIEB9ICovCiBHSVRfRU5EX0RFQ0wKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL2NyZWRfaGVscGVycy5oIGIvaW5jbHVkZS9naXQyL2NyZWRfaGVscGVycy5oCmluZGV4IDVkOTNjZjQuLjFkODgwOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9jcmVkX2hlbHBlcnMuaAorKysgYi9pbmNsdWRlL2dpdDIvY3JlZF9oZWxwZXJzLmgKQEAgLTcsNyArNyw3IEBACiAjaWZuZGVmIElOQ0xVREVfZ2l0X2NyZWRfaGVscGVyc19oX18KICNkZWZpbmUgSU5DTFVERV9naXRfY3JlZF9oZWxwZXJzX2hfXwogCi0jaW5jbHVkZSAiZ2l0Mi90cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKIAogLyoqCiAgKiBAZmlsZSBnaXQyL2NyZWRfaGVscGVycy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvZGlmZi5oIGIvaW5jbHVkZS9naXQyL2RpZmYuaAppbmRleCA0MzAyOWM0Li42MWQyODgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvZGlmZi5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9kaWZmLmgKQEAgLTIwLDM0ICsyMCwzOCBAQAogICogT3ZlcnZpZXcKICAqIC0tLS0tLS0tCiAgKgotICogQ2FsY3VsYXRpbmcgZGlmZnMgaXMgZ2VuZXJhbGx5IGRvbmUgaW4gdHdvIHBoYXNlczogYnVpbGRpbmcgYSBkaWZmIGxpc3QKLSAqIHRoZW4gdHJhdmVyc2luZyB0aGUgZGlmZiBsaXN0LiAgVGhpcyBtYWtlcyBpcyBlYXNpZXIgdG8gc2hhcmUgbG9naWMKLSAqIGFjcm9zcyB0aGUgdmFyaW91cyB0eXBlcyBvZiBkaWZmcyAodHJlZSB2cyB0cmVlLCB3b3JrZGlyIHZzIGluZGV4LCBldGMuKSwKLSAqIGFuZCBhbHNvIGFsbG93cyB5b3UgdG8gaW5zZXJ0IG9wdGlvbmFsIGRpZmYgbGlzdCBwb3N0LXByb2Nlc3NpbmcgcGhhc2VzLAotICogc3VjaCBhcyByZW5hbWUgZGV0ZWN0ZWQsIGluIGJldHdlZW4gdGhlIHN0ZXBzLiAgV2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBhCi0gKiBkaWZmIGxpc3Qgb2JqZWN0LCBpdCBtdXN0IGJlIGZyZWVkLgorICogQ2FsY3VsYXRpbmcgZGlmZnMgaXMgZ2VuZXJhbGx5IGRvbmUgaW4gdHdvIHBoYXNlczogYnVpbGRpbmcgYSBsaXN0IG9mCisgKiBkaWZmcyB0aGVuIHRyYXZlcnNpbmcgaXQuICBUaGlzIG1ha2VzIGlzIGVhc2llciB0byBzaGFyZSBsb2dpYyBhY3Jvc3MKKyAqIHRoZSB2YXJpb3VzIHR5cGVzIG9mIGRpZmZzICh0cmVlIHZzIHRyZWUsIHdvcmtkaXIgdnMgaW5kZXgsIGV0Yy4pLCBhbmQKKyAqIGFsc28gYWxsb3dzIHlvdSB0byBpbnNlcnQgb3B0aW9uYWwgZGlmZiBwb3N0LXByb2Nlc3NpbmcgcGhhc2VzLAorICogc3VjaCBhcyByZW5hbWUgZGV0ZWN0aW9uLCBpbiBiZXR3ZWVuIHRoZSBzdGVwcy4gIFdoZW4geW91IGFyZSBkb25lIHdpdGgKKyAqIGEgZGlmZiBvYmplY3QsIGl0IG11c3QgYmUgZnJlZWQuCiAgKgogICogVGVybWlub2xvZ3kKICAqIC0tLS0tLS0tLS0tCiAgKgogICogVG8gdW5kZXJzdGFuZCB0aGUgZGlmZiBBUElzLCB5b3Ugc2hvdWxkIGtub3cgdGhlIGZvbGxvd2luZyB0ZXJtczoKICAqCi0gKiAtIEEgYGRpZmZgIG9yIGBkaWZmIGxpc3RgIHJlcHJlc2VudHMgdGhlIGN1bXVsYXRpdmUgbGlzdCBvZiBkaWZmZXJlbmNlcwotICogICBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgb2YgYSByZXBvc2l0b3J5IChwb3NzaWJseSBmaWx0ZXJlZCBieSBhIHNldCBvZgotICogICBmaWxlIG5hbWUgcGF0dGVybnMpLiAgVGhpcyBpcyB0aGUgYGdpdF9kaWZmX2xpc3RgIG9iamVjdC4KKyAqIC0gQSBgZGlmZmAgcmVwcmVzZW50cyB0aGUgY3VtdWxhdGl2ZSBsaXN0IG9mIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvCisgKiAgIHNuYXBzaG90cyBvZiBhIHJlcG9zaXRvcnkgKHBvc3NpYmx5IGZpbHRlcmVkIGJ5IGEgc2V0IG9mIGZpbGUgbmFtZQorICogICBwYXR0ZXJucykuICBUaGlzIGlzIHRoZSBgZ2l0X2RpZmZgIG9iamVjdC4KKyAqCiAgKiAtIEEgYGRlbHRhYCBpcyBhIGZpbGUgcGFpciB3aXRoIGFuIG9sZCBhbmQgbmV3IHJldmlzaW9uLiAgVGhlIG9sZCB2ZXJzaW9uCiAgKiAgIG1heSBiZSBhYnNlbnQgaWYgdGhlIGZpbGUgd2FzIGp1c3QgY3JlYXRlZCBhbmQgdGhlIG5ldyB2ZXJzaW9uIG1heSBiZQogICogICBhYnNlbnQgaWYgdGhlIGZpbGUgd2FzIGRlbGV0ZWQuICBBIGRpZmYgaXMgbW9zdGx5IGp1c3QgYSBsaXN0IG9mIGRlbHRhcy4KKyAqCiAgKiAtIEEgYGJpbmFyeWAgZmlsZSAvIGRlbHRhIGlzIGEgZmlsZSAob3IgcGFpcikgZm9yIHdoaWNoIG5vIHRleHQgZGlmZnMKLSAqICAgc2hvdWxkIGJlIGdlbmVyYXRlZC4gIEEgZGlmZiBsaXN0IGNhbiBjb250YWluIGRlbHRhIGVudHJpZXMgdGhhdCBhcmUKKyAqICAgc2hvdWxkIGJlIGdlbmVyYXRlZC4gIEEgZGlmZiBjYW4gY29udGFpbiBkZWx0YSBlbnRyaWVzIHRoYXQgYXJlCiAgKiAgIGJpbmFyeSwgYnV0IG5vIGRpZmYgY29udGVudCB3aWxsIGJlIG91dHB1dCBmb3IgdGhvc2UgZmlsZXMuICBUaGVyZSBpcwogICogICBhIGJhc2UgaGV1cmlzdGljIGZvciBiaW5hcnkgZGV0ZWN0aW9uIGFuZCB5b3UgY2FuIGZ1cnRoZXIgdHVuZSB0aGUKICAqICAgYmVoYXZpb3Igd2l0aCBnaXQgYXR0cmlidXRlcyBvciBkaWZmIGZsYWdzIGFuZCBvcHRpb24gc2V0dGluZ3MuCisgKgogICogLSBBIGBodW5rYCBpcyBhIHNwYW4gb2YgbW9kaWZpZWQgbGluZXMgaW4gYSBkZWx0YSBhbG9uZyB3aXRoIHNvbWUgc3RhYmxlCiAgKiAgIHN1cnJvdW5kaW5nIGNvbnRleHQuICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgYW1vdW50IG9mIGNvbnRleHQgYW5kIG90aGVyCiAgKiAgIHByb3BlcnRpZXMgb2YgaG93IGh1bmtzIGFyZSBnZW5lcmF0ZWQuICBFYWNoIGh1bmsgYWxzbyBjb21lcyB3aXRoIGEKICAqICAgaGVhZGVyIHRoYXQgZGVzY3JpYmVkIHdoZXJlIGl0IHN0YXJ0cyBhbmQgZW5kcyBpbiBib3RoIHRoZSBvbGQgYW5kIG5ldwogICogICB2ZXJzaW9ucyBpbiB0aGUgZGVsdGEuCisgKgogICogLSBBIGBsaW5lYCBpcyBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW5zaWRlIGEgaHVuay4gIEl0IGNvdWxkIGJlIGEgY29udGV4dAogICogICBsaW5lIChpLmUuIGluIGJvdGggb2xkIGFuZCBuZXcgdmVyc2lvbnMpLCBhbiBhZGRlZCBsaW5lIChpLmUuIG9ubHkgaW4KICAqICAgdGhlIG5ldyB2ZXJzaW9uKSwgb3IgYSByZW1vdmVkIGxpbmUgKGkuZS4gb25seSBpbiB0aGUgb2xkIHZlcnNpb24pLgpAQCAtNjgsMTAwICs3MiwxMjUgQEAKIHR5cGVkZWYgZW51bSB7CiAJLyoqIE5vcm1hbCBkaWZmLCB0aGUgZGVmYXVsdCAqLwogCUdJVF9ESUZGX05PUk1BTCA9IDAsCisKKwkvKgorCSAqIE9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggZmlsZXMgd2lsbCBiZSBpbiB0aGUgZGlmZgorCSAqLworCiAJLyoqIFJldmVyc2UgdGhlIHNpZGVzIG9mIHRoZSBkaWZmICovCi0JR0lUX0RJRkZfUkVWRVJTRSA9ICgxIDw8IDApLAotCS8qKiBUcmVhdCBhbGwgZmlsZXMgYXMgdGV4dCwgZGlzYWJsaW5nIGJpbmFyeSBhdHRyaWJ1dGVzICYgZGV0ZWN0aW9uICovCi0JR0lUX0RJRkZfRk9SQ0VfVEVYVCA9ICgxIDw8IDEpLAotCS8qKiBJZ25vcmUgYWxsIHdoaXRlc3BhY2UgKi8KLQlHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRSA9ICgxIDw8IDIpLAotCS8qKiBJZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZSAqLwotCUdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSA9ICgxIDw8IDMpLAotCS8qKiBJZ25vcmUgd2hpdGVzcGFjZSBhdCBlbmQgb2YgbGluZSAqLwotCUdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFX0VPTCA9ICgxIDw8IDQpLAotCS8qKiBFeGNsdWRlIHN1Ym1vZHVsZXMgZnJvbSB0aGUgZGlmZiBjb21wbGV0ZWx5ICovCi0JR0lUX0RJRkZfSUdOT1JFX1NVQk1PRFVMRVMgPSAoMSA8PCA1KSwKLQkvKiogVXNlIHRoZSAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtIChjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCkgKi8KLQlHSVRfRElGRl9QQVRJRU5DRSA9ICgxIDw8IDYpLAotCS8qKiBJbmNsdWRlIGlnbm9yZWQgZmlsZXMgaW4gdGhlIGRpZmYgbGlzdCAqLwotCUdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRCA9ICgxIDw8IDcpLAotCS8qKiBJbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGUgZGlmZiBsaXN0ICovCi0JR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQgPSAoMSA8PCA4KSwKLQkvKiogSW5jbHVkZSB1bm1vZGlmaWVkIGZpbGVzIGluIHRoZSBkaWZmIGxpc3QgKi8KLQlHSVRfRElGRl9JTkNMVURFX1VOTU9ESUZJRUQgPSAoMSA8PCA5KSwKKwlHSVRfRElGRl9SRVZFUlNFID0gKDF1IDw8IDApLAorCisJLyoqIEluY2x1ZGUgaWdub3JlZCBmaWxlcyBpbiB0aGUgZGlmZiAqLworCUdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRCA9ICgxdSA8PCAxKSwKKworCS8qKiBFdmVuIHdpdGggR0lUX0RJRkZfSU5DTFVERV9JR05PUkVELCBhbiBlbnRpcmUgaWdub3JlZCBkaXJlY3RvcnkKKwkgKiAgd2lsbCBiZSBtYXJrZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGVudHJ5IGluIHRoZSBkaWZmOyB0aGlzIGZsYWcKKwkgKiAgYWRkcyBhbGwgZmlsZXMgdW5kZXIgdGhlIGRpcmVjdG9yeSBhcyBJR05PUkVEIGVudHJpZXMsIHRvby4KKwkgKi8KKwlHSVRfRElGRl9SRUNVUlNFX0lHTk9SRURfRElSUyA9ICgxdSA8PCAyKSwKKworCS8qKiBJbmNsdWRlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGUgZGlmZiAqLworCUdJVF9ESUZGX0lOQ0xVREVfVU5UUkFDS0VEID0gKDF1IDw8IDMpLAogCiAJLyoqIEV2ZW4gd2l0aCBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRCwgYW4gZW50aXJlIHVudHJhY2tlZAotCSAqICBkaXJlY3Rvcnkgd2lsbCBiZSBtYXJrZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGVudHJ5IGluIHRoZSBkaWZmIGxpc3QKKwkgKiAgZGlyZWN0b3J5IHdpbGwgYmUgbWFya2VkIHdpdGggb25seSBhIHNpbmdsZSBlbnRyeSBpbiB0aGUgZGlmZgogCSAqICAoYSBsYSB3aGF0IGNvcmUgR2l0IGRvZXMgaW4gYGdpdCBzdGF0dXNgKTsgdGhpcyBmbGFnIGFkZHMgKmFsbCoKIAkgKiAgZmlsZXMgdW5kZXIgdW50cmFja2VkIGRpcmVjdG9yaWVzIGFzIFVOVFJBQ0tFRCBlbnRyaWVzLCB0b28uCiAJICovCi0JR0lUX0RJRkZfUkVDVVJTRV9VTlRSQUNLRURfRElSUyA9ICgxIDw8IDEwKSwKKwlHSVRfRElGRl9SRUNVUlNFX1VOVFJBQ0tFRF9ESVJTID0gKDF1IDw8IDQpLAogCi0JLyoqIElmIHRoZSBwYXRoc3BlYyBpcyBzZXQgaW4gdGhlIGRpZmYgb3B0aW9ucywgdGhpcyBmbGFncyBtZWFucyB0bwotCSAqICBhcHBseSBpdCBhcyBhbiBleGFjdCBtYXRjaCBpbnN0ZWFkIG9mIGFzIGFuIGZubWF0Y2ggcGF0dGVybi4KLQkgKi8KLQlHSVRfRElGRl9ESVNBQkxFX1BBVEhTUEVDX01BVENIID0gKDEgPDwgMTEpLAotCi0JLyoqIFVzZSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVuYW1lIGNvbXBhcmlzb25zICovCi0JR0lUX0RJRkZfREVMVEFTX0FSRV9JQ0FTRSA9ICgxIDw8IDEyKSwKLQotCS8qKiBXaGVuIGdlbmVyYXRpbmcgcGF0Y2ggdGV4dCwgaW5jbHVkZSB0aGUgY29udGVudCBvZiB1bnRyYWNrZWQKLQkgKiAgZmlsZXMuICBUaGlzIGF1dG9tYXRpY2FsbHkgdHVybnMgb24gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQgYnV0Ci0JICogIGl0IGRvZXMgbm90IHR1cm4gb24gR0lUX0RJRkZfUkVDVVJTRV9VTlRSQUNLRURfRElSUy4gIEFkZCB0aGF0Ci0JICogIGZsYWcgaWYgeW91IHdhbnQgdGhlIGNvbnRlbnQgb2YgZXZlcnkgc2luZ2xlIFVOVFJBQ0tFRCBmaWxlLgotCSAqLwotCUdJVF9ESUZGX0lOQ0xVREVfVU5UUkFDS0VEX0NPTlRFTlQgPSAoMSA8PCAxMyksCi0KLQkvKiogRGlzYWJsZSB1cGRhdGluZyBvZiB0aGUgYGJpbmFyeWAgZmxhZyBpbiBkZWx0YSByZWNvcmRzLiAgVGhpcyBpcwotCSAqICB1c2VmdWwgd2hlbiBpdGVyYXRpbmcgb3ZlciBhIGRpZmYgaWYgeW91IGRvbid0IG5lZWQgaHVuayBhbmQgZGF0YQotCSAqICBjYWxsYmFja3MgYW5kIHdhbnQgdG8gYXZvaWQgaGF2aW5nIHRvIGxvYWQgZmlsZSBjb21wbGV0ZWx5LgotCSAqLwotCUdJVF9ESUZGX1NLSVBfQklOQVJZX0NIRUNLID0gKDEgPDwgMTQpLAorCS8qKiBJbmNsdWRlIHVubW9kaWZpZWQgZmlsZXMgaW4gdGhlIGRpZmYgKi8KKwlHSVRfRElGRl9JTkNMVURFX1VOTU9ESUZJRUQgPSAoMXUgPDwgNSksCiAKIAkvKiogTm9ybWFsbHksIGEgdHlwZSBjaGFuZ2UgYmV0d2VlbiBmaWxlcyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEKIAkgKiAgREVMRVRFRCByZWNvcmQgZm9yIHRoZSBvbGQgYW5kIGFuIEFEREVEIHJlY29yZCBmb3IgdGhlIG5ldzsgdGhpcwogCSAqICBvcHRpb25zIGVuYWJsZWQgdGhlIGdlbmVyYXRpb24gb2YgVFlQRUNIQU5HRSBkZWx0YSByZWNvcmRzLgogCSAqLwotCUdJVF9ESUZGX0lOQ0xVREVfVFlQRUNIQU5HRSA9ICgxIDw8IDE1KSwKKwlHSVRfRElGRl9JTkNMVURFX1RZUEVDSEFOR0UgPSAoMXUgPDwgNiksCiAKIAkvKiogRXZlbiB3aXRoIEdJVF9ESUZGX0lOQ0xVREVfVFlQRUNIQU5HRSwgYmxvYi0+dHJlZSBjaGFuZ2VzIHN0aWxsCiAJICogIGdlbmVyYWxseSBzaG93IGFzIGEgREVMRVRFRCBibG9iLiAgVGhpcyBmbGFnIHRyaWVzIHRvIGNvcnJlY3RseQogCSAqICBsYWJlbCBibG9iLT50cmVlIHRyYW5zaXRpb25zIGFzIFRZUEVDSEFOR0UgcmVjb3JkcyB3aXRoIG5ld19maWxlJ3MKIAkgKiAgbW9kZSBzZXQgdG8gdHJlZS4gIE5vdGU6IHRoZSB0cmVlIFNIQSB3aWxsIG5vdCBiZSBhdmFpbGFibGUuCiAJICovCi0JR0lUX0RJRkZfSU5DTFVERV9UWVBFQ0hBTkdFX1RSRUVTICA9ICgxIDw8IDE2KSwKKwlHSVRfRElGRl9JTkNMVURFX1RZUEVDSEFOR0VfVFJFRVMgPSAoMXUgPDwgNyksCiAKIAkvKiogSWdub3JlIGZpbGUgbW9kZSBjaGFuZ2VzICovCi0JR0lUX0RJRkZfSUdOT1JFX0ZJTEVNT0RFID0gKDEgPDwgMTcpLAorCUdJVF9ESUZGX0lHTk9SRV9GSUxFTU9ERSA9ICgxdSA8PCA4KSwKIAotCS8qKiBFdmVuIHdpdGggR0lUX0RJRkZfSU5DTFVERV9JR05PUkVELCBhbiBlbnRpcmUgaWdub3JlZCBkaXJlY3RvcnkKLQkgKiAgd2lsbCBiZSBtYXJrZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGVudHJ5IGluIHRoZSBkaWZmIGxpc3Q7IHRoaXMgZmxhZwotCSAqICBhZGRzIGFsbCBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3J5IGFzIElHTk9SRUQgZW50cmllcywgdG9vLgorCS8qKiBUcmVhdCBhbGwgc3VibW9kdWxlcyBhcyB1bm1vZGlmaWVkICovCisJR0lUX0RJRkZfSUdOT1JFX1NVQk1PRFVMRVMgPSAoMXUgPDwgOSksCisKKwkvKiogVXNlIGNhc2UgaW5zZW5zaXRpdmUgZmlsZW5hbWUgY29tcGFyaXNvbnMgKi8KKwlHSVRfRElGRl9JR05PUkVfQ0FTRSA9ICgxdSA8PCAxMCksCisKKwkvKiogSWYgdGhlIHBhdGhzcGVjIGlzIHNldCBpbiB0aGUgZGlmZiBvcHRpb25zLCB0aGlzIGZsYWdzIG1lYW5zIHRvCisJICogIGFwcGx5IGl0IGFzIGFuIGV4YWN0IG1hdGNoIGluc3RlYWQgb2YgYXMgYW4gZm5tYXRjaCBwYXR0ZXJuLgogCSAqLwotCUdJVF9ESUZGX1JFQ1VSU0VfSUdOT1JFRF9ESVJTID0gKDEgPDwgMTgpLAorCUdJVF9ESUZGX0RJU0FCTEVfUEFUSFNQRUNfTUFUQ0ggPSAoMXUgPDwgMTIpLAogCi0JLyoqIENvcmUgR2l0IHNjYW5zIGluc2lkZSB1bnRyYWNrZWQgZGlyZWN0b3JpZXMsIGxhYmVsaW5nIHRoZW0gSUdOT1JFRAotCSAqICBpZiB0aGV5IGFyZSBlbXB0eSBvciBvbmx5IGNvbnRhaW4gaWdub3JlZCBmaWxlczsgYSBkaXJlY3RvcnkgaXMKLQkgKiAgY29uc2lkZXIgVU5UUkFDS0VEIG9ubHkgaWYgaXQgaGFzIGFuIGFjdHVhbCB1bnRyYWNrZWQgZmlsZSBpbiBpdC4KLQkgKiAgVGhpcyBzY2FuIGlzIGV4dHJhIHdvcmsgZm9yIGEgY2FzZSB5b3Ugb2Z0ZW4gZG9uJ3QgY2FyZSBhYm91dC4gIFRoaXMKLQkgKiAgZmxhZyBtYWtlcyBsaWJnaXQyIGltbWVkaWF0ZWx5IGxhYmVsIGFuIHVudHJhY2tlZCBkaXJlY3RvcnkgYXMKLQkgKiAgVU5UUkFDS0VEIHdpdGhvdXQgbG9va2luZyBpbnNpZGUgaXQgKHdoaWNoIGRpZmZlcnMgZnJvbSBjb3JlIEdpdCkuCi0JICogIE9mIGNvdXJzZSwgaWdub3JlIHJ1bGVzIGFyZSBzdGlsbCBjaGVja2VkIGZvciB0aGUgZGlyZWN0b3J5IGl0c2VsZi4KKwkvKiogRGlzYWJsZSB1cGRhdGluZyBvZiB0aGUgYGJpbmFyeWAgZmxhZyBpbiBkZWx0YSByZWNvcmRzLiAgVGhpcyBpcworCSAqICB1c2VmdWwgd2hlbiBpdGVyYXRpbmcgb3ZlciBhIGRpZmYgaWYgeW91IGRvbid0IG5lZWQgaHVuayBhbmQgZGF0YQorCSAqICBjYWxsYmFja3MgYW5kIHdhbnQgdG8gYXZvaWQgaGF2aW5nIHRvIGxvYWQgZmlsZSBjb21wbGV0ZWx5LgogCSAqLwotCUdJVF9ESUZGX0ZBU1RfVU5UUkFDS0VEX0RJUlMgPSAoMSA8PCAxOSksCisJR0lUX0RJRkZfU0tJUF9CSU5BUllfQ0hFQ0sgPSAoMXUgPDwgMTMpLAogCisJLyoqIFdoZW4gZGlmZiBmaW5kcyBhbiB1bnRyYWNrZWQgZGlyZWN0b3J5LCB0byBtYXRjaCB0aGUgYmVoYXZpb3Igb2YKKwkgKiAgY29yZSBHaXQsIGl0IHNjYW5zIHRoZSBjb250ZW50cyBmb3IgSUdOT1JFRCBhbmQgVU5UUkFDS0VEIGZpbGVzLgorCSAqICBJZiAqYWxsKiBjb250ZW50cyBhcmUgSUdOT1JFRCwgdGhlbiB0aGUgZGlyZWN0b3J5IGlzIElHTk9SRUQ7IGlmCisJICogIGFueSBjb250ZW50cyBhcmUgbm90IElHTk9SRUQsIHRoZW4gdGhlIGRpcmVjdG9yeSBpcyBVTlRSQUNLRUQuCisJICogIFRoaXMgaXMgZXh0cmEgd29yayB0aGF0IG1heSBub3QgbWF0dGVyIGluIG1hbnkgY2FzZXMuICBUaGlzIGZsYWcKKwkgKiAgdHVybnMgb2ZmIHRoYXQgc2NhbiBhbmQgaW1tZWRpYXRlbHkgbGFiZWxzIGFuIHVudHJhY2tlZCBkaXJlY3RvcnkKKwkgKiAgYXMgVU5UUkFDS0VEIChjaGFuZ2luZyB0aGUgYmVoYXZpb3IgdG8gbm90IG1hdGNoIGNvcmUgR2l0KS4KKwkgKi8KKwlHSVRfRElGRl9FTkFCTEVfRkFTVF9VTlRSQUNLRURfRElSUyA9ICgxdSA8PCAxNCksCisKKwkvKgorCSAqIE9wdGlvbnMgY29udHJvbGxpbmcgaG93IG91dHB1dCB3aWxsIGJlIGdlbmVyYXRlZAorCSAqLworCisJLyoqIFRyZWF0IGFsbCBmaWxlcyBhcyB0ZXh0LCBkaXNhYmxpbmcgYmluYXJ5IGF0dHJpYnV0ZXMgJiBkZXRlY3Rpb24gKi8KKwlHSVRfRElGRl9GT1JDRV9URVhUID0gKDF1IDw8IDIwKSwKIAkvKiogVHJlYXQgYWxsIGZpbGVzIGFzIGJpbmFyeSwgZGlzYWJsaW5nIHRleHQgZGlmZnMgKi8KLQlHSVRfRElGRl9GT1JDRV9CSU5BUlkgPSAoMSA8PCAyMCksCisJR0lUX0RJRkZfRk9SQ0VfQklOQVJZID0gKDF1IDw8IDIxKSwKKworCS8qKiBJZ25vcmUgYWxsIHdoaXRlc3BhY2UgKi8KKwlHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRSA9ICgxdSA8PCAyMiksCisJLyoqIElnbm9yZSBjaGFuZ2VzIGluIGFtb3VudCBvZiB3aGl0ZXNwYWNlICovCisJR0lUX0RJRkZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFID0gKDF1IDw8IDIzKSwKKwkvKiogSWdub3JlIHdoaXRlc3BhY2UgYXQgZW5kIG9mIGxpbmUgKi8KKwlHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRV9FT0wgPSAoMXUgPDwgMjQpLAorCisJLyoqIFdoZW4gZ2VuZXJhdGluZyBwYXRjaCB0ZXh0LCBpbmNsdWRlIHRoZSBjb250ZW50IG9mIHVudHJhY2tlZAorCSAqICBmaWxlcy4gIFRoaXMgYXV0b21hdGljYWxseSB0dXJucyBvbiBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRCBidXQKKwkgKiAgaXQgZG9lcyBub3QgdHVybiBvbiBHSVRfRElGRl9SRUNVUlNFX1VOVFJBQ0tFRF9ESVJTLiAgQWRkIHRoYXQKKwkgKiAgZmxhZyBpZiB5b3Ugd2FudCB0aGUgY29udGVudCBvZiBldmVyeSBzaW5nbGUgVU5UUkFDS0VEIGZpbGUuCisJICovCisJR0lUX0RJRkZfU0hPV19VTlRSQUNLRURfQ09OVEVOVCA9ICgxdSA8PCAyNSksCisKKwkvKiogV2hlbiBnZW5lcmF0aW5nIG91dHB1dCwgaW5jbHVkZSB0aGUgbmFtZXMgb2YgdW5tb2RpZmllZCBmaWxlcyBpZgorCSAqICB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGUgZ2l0X2RpZmYuICBOb3JtYWxseSB0aGVzZSBhcmUgc2tpcHBlZCBpbgorCSAqICB0aGUgZm9ybWF0cyB0aGF0IGxpc3QgZmlsZXMgKGUuZy4gbmFtZS1vbmx5LCBuYW1lLXN0YXR1cywgcmF3KS4KKwkgKiAgRXZlbiB3aXRoIHRoaXMsIHRoZXNlIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHBhdGNoIGZvcm1hdC4KKwkgKi8KKwlHSVRfRElGRl9TSE9XX1VOTU9ESUZJRUQgPSAoMXUgPDwgMjYpLAorCisJLyoqIFVzZSB0aGUgInBhdGllbmNlIGRpZmYiIGFsZ29yaXRobSAqLworCUdJVF9ESUZGX1BBVElFTkNFID0gKDF1IDw8IDI4KSwKKwkvKiogVGFrZSBleHRyYSB0aW1lIHRvIGZpbmQgbWluaW1hbCBkaWZmICovCisJR0lUX0RJRkZfTUlOSU1BTCA9ICgxIDw8IDI5KSwKKwogfSBnaXRfZGlmZl9vcHRpb25fdDsKIAogLyoqCi0gKiBUaGUgZGlmZiBsaXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBpbmRpdmlkdWFsIGZpbGUgZGVsdGFzLgorICogVGhlIGRpZmYgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIGluZGl2aWR1YWwgZmlsZSBkZWx0YXMuCiAgKgogICogVGhpcyBpcyBhbiBvcGFxdWUgc3RydWN0dXJlIHdoaWNoIHdpbGwgYmUgYWxsb2NhdGVkIGJ5IG9uZSBvZiB0aGUgZGlmZgogICogZ2VuZXJhdG9yIGZ1bmN0aW9ucyBiZWxvdyAoc3VjaCBhcyBgZ2l0X2RpZmZfdHJlZV90b190cmVlYCkuICBZb3UgYXJlCiAgKiByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBvYmplY3QgbWVtb3J5IHdoZW4gZG9uZSwgdXNpbmcgdGhlCi0gKiBgZ2l0X2RpZmZfbGlzdF9mcmVlKClgIGZ1bmN0aW9uLgorICogYGdpdF9kaWZmX2ZyZWUoKWAgZnVuY3Rpb24uCiAgKi8KLXR5cGVkZWYgc3RydWN0IGdpdF9kaWZmX2xpc3QgZ2l0X2RpZmZfbGlzdDsKK3R5cGVkZWYgc3RydWN0IGdpdF9kaWZmIGdpdF9kaWZmOwogCiAvKioKICAqIEZsYWdzIGZvciB0aGUgZGVsdGEgb2JqZWN0IGFuZCB0aGUgZmlsZSBvYmplY3RzIG9uIGVhY2ggc2lkZS4KQEAgLTE3MiwxNiArMjAxLDE2IEBACiAgKiBjb25zaWRlcmVkIHJlc2VydmVkIGZvciBpbnRlcm5hbCBvciBmdXR1cmUgdXNlLgogICovCiB0eXBlZGVmIGVudW0gewotCUdJVF9ESUZGX0ZMQUdfQklOQVJZICAgICA9ICgxIDw8IDApLCAvKiogZmlsZShzKSB0cmVhdGVkIGFzIGJpbmFyeSBkYXRhICovCi0JR0lUX0RJRkZfRkxBR19OT1RfQklOQVJZID0gKDEgPDwgMSksIC8qKiBmaWxlKHMpIHRyZWF0ZWQgYXMgdGV4dCBkYXRhICovCi0JR0lUX0RJRkZfRkxBR19WQUxJRF9PSUQgID0gKDEgPDwgMiksIC8qKiBgb2lkYCB2YWx1ZSBpcyBrbm93biBjb3JyZWN0ICovCisJR0lUX0RJRkZfRkxBR19CSU5BUlkgICAgID0gKDF1IDw8IDApLCAvKiogZmlsZShzKSB0cmVhdGVkIGFzIGJpbmFyeSBkYXRhICovCisJR0lUX0RJRkZfRkxBR19OT1RfQklOQVJZID0gKDF1IDw8IDEpLCAvKiogZmlsZShzKSB0cmVhdGVkIGFzIHRleHQgZGF0YSAqLworCUdJVF9ESUZGX0ZMQUdfVkFMSURfT0lEICA9ICgxdSA8PCAyKSwgLyoqIGBvaWRgIHZhbHVlIGlzIGtub3duIGNvcnJlY3QgKi8KIH0gZ2l0X2RpZmZfZmxhZ190OwogCiAvKioKICAqIFdoYXQgdHlwZSBvZiBjaGFuZ2UgaXMgZGVzY3JpYmVkIGJ5IGEgZ2l0X2RpZmZfZGVsdGE/CiAgKgogICogYEdJVF9ERUxUQV9SRU5BTUVEYCBhbmQgYEdJVF9ERUxUQV9DT1BJRURgIHdpbGwgb25seSBzaG93IHVwIGlmIHlvdSBydW4KLSAqIGBnaXRfZGlmZl9maW5kX3NpbWlsYXIoKWAgb24gdGhlIGRpZmYgbGlzdCBvYmplY3QuCisgKiBgZ2l0X2RpZmZfZmluZF9zaW1pbGFyKClgIG9uIHRoZSBkaWZmIG9iamVjdC4KICAqCiAgKiBgR0lUX0RFTFRBX1RZUEVDSEFOR0VgIG9ubHkgc2hvd3MgdXAgZ2l2ZW4gYEdJVF9ESUZGX0lOQ0xVREVfVFlQRUNIQU5HRWAKICAqIGluIHRoZSBvcHRpb24gZmxhZ3MgKG90aGVyd2lzZSB0eXBlIGNoYW5nZXMgd2lsbCBiZSBzcGxpdCBpbnRvIEFEREVEIC8KQEAgLTIwMCwxMSArMjI5LDExIEBACiB9IGdpdF9kZWx0YV90OwogCiAvKioKLSAqIERlc2NyaXB0aW9uIG9mIG9uZSBzaWRlIG9mIGEgZGlmZiBlbnRyeS4KKyAqIERlc2NyaXB0aW9uIG9mIG9uZSBzaWRlIG9mIGEgZGVsdGEuCiAgKgotICogQWx0aG91Z2ggdGhpcyBpcyBjYWxsZWQgYSAiZmlsZSIsIGl0IG1heSBhY3R1YWxseSByZXByZXNlbnQgYSBmaWxlLCBhCi0gKiBzeW1ib2xpYyBsaW5rLCBhIHN1Ym1vZHVsZSBjb21taXQgaWQsIG9yIGV2ZW4gYSB0cmVlIChhbHRob3VnaCB0aGF0IG9ubHkKLSAqIGlmIHlvdSBhcmUgdHJhY2tpbmcgdHlwZSBjaGFuZ2VzIG9yIGlnbm9yZWQvdW50cmFja2VkIGRpcmVjdG9yaWVzKS4KKyAqIEFsdGhvdWdoIHRoaXMgaXMgY2FsbGVkIGEgImZpbGUiLCBpdCBjb3VsZCByZXByZXNlbnQgYSBmaWxlLCBhIHN5bWJvbGljCisgKiBsaW5rLCBhIHN1Ym1vZHVsZSBjb21taXQgaWQsIG9yIGV2ZW4gYSB0cmVlIChhbHRob3VnaCB0aGF0IG9ubHkgaWYgeW91CisgKiBhcmUgdHJhY2tpbmcgdHlwZSBjaGFuZ2VzIG9yIGlnbm9yZWQvdW50cmFja2VkIGRpcmVjdG9yaWVzKS4KICAqCiAgKiBUaGUgYG9pZGAgaXMgdGhlIGBnaXRfb2lkYCBvZiB0aGUgaXRlbS4gIElmIHRoZSBlbnRyeSByZXByZXNlbnRzIGFuCiAgKiBhYnNlbnQgc2lkZSBvZiBhIGRpZmYgKGUuZy4gdGhlIGBvbGRfZmlsZWAgb2YgYSBgR0lUX0RFTFRBX0FEREVEYCBkZWx0YSksCkBAIC0yMzEsOSArMjYwLDggQEAKIC8qKgogICogRGVzY3JpcHRpb24gb2YgY2hhbmdlcyB0byBvbmUgZW50cnkuCiAgKgotICogV2hlbiBpdGVyYXRpbmcgb3ZlciBhIGRpZmYgbGlzdCBvYmplY3QsIHRoaXMgd2lsbCBiZSBwYXNzZWQgdG8gbW9zdAotICogY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB5b3UgY2FuIHVzZSB0aGUgY29udGVudHMgdG8gdW5kZXJzdGFuZCBleGFjdGx5Ci0gKiB3aGF0IGhhcyBjaGFuZ2VkLgorICogV2hlbiBpdGVyYXRpbmcgb3ZlciBhIGRpZmYsIHRoaXMgd2lsbCBiZSBwYXNzZWQgdG8gbW9zdCBjYWxsYmFja3MgYW5kCisgKiB5b3UgY2FuIHVzZSB0aGUgY29udGVudHMgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFzIGNoYW5nZWQuCiAgKgogICogVGhlIGBvbGRfZmlsZWAgcmVwcmVzZW50cyB0aGUgImZyb20iIHNpZGUgb2YgdGhlIGRpZmYgYW5kIHRoZSBgbmV3X2ZpbGVgCiAgKiByZXByZXNlbnRzIHRvICJ0byIgc2lkZSBvZiB0aGUgZGlmZi4gIFdoYXQgdGhvc2UgbWVhbnMgZGVwZW5kIG9uIHRoZQpAQCAtMjY2LDI4ICsyOTQsMjkgQEAKICAqIHRoZSBzY29yZSAoYSBsYSBgcHJpbnRmKCJNJTAzZCIsIDEwMCAtIGRlbHRhLT5zaW1pbGFyaXR5KWApLgogICovCiB0eXBlZGVmIHN0cnVjdCB7CisJZ2l0X2RlbHRhX3QgICBzdGF0dXM7CisJdWludDMyX3QgICAgICBmbGFnczsJICAgLyoqPCBnaXRfZGlmZl9mbGFnX3QgdmFsdWVzICovCisJdWludDE2X3QgICAgICBzaW1pbGFyaXR5OyAgLyoqPCBmb3IgUkVOQU1FRCBhbmQgQ09QSUVELCB2YWx1ZSAwLTEwMCAqLworCXVpbnQxNl90ICAgICAgbmZpbGVzOwkgICAvKio8IG51bWJlciBvZiBmaWxlcyBpbiB0aGlzIGRlbHRhICovCiAJZ2l0X2RpZmZfZmlsZSBvbGRfZmlsZTsKIAlnaXRfZGlmZl9maWxlIG5ld19maWxlOwotCWdpdF9kZWx0YV90ICAgc3RhdHVzOwotCXVpbnQzMl90ICAgICAgc2ltaWxhcml0eTsgLyoqPCBmb3IgUkVOQU1FRCBhbmQgQ09QSUVELCB2YWx1ZSAwLTEwMCAqLwotCXVpbnQzMl90ICAgICAgZmxhZ3M7CiB9IGdpdF9kaWZmX2RlbHRhOwogCiAvKioKICAqIERpZmYgbm90aWZpY2F0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLgogICoKICAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBmaWxlLCBqdXN0IGJlZm9yZSB0aGUgYGdpdF9kZWx0YV90YAotICogZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBkaWZmIGxpc3QuCisgKiBnZXRzIGluc2VydGVkIGludG8gdGhlIGRpZmYuCiAgKgogICogV2hlbiB0aGUgY2FsbGJhY2s6CiAgKiAtIHJldHVybnMgPCAwLCB0aGUgZGlmZiBwcm9jZXNzIHdpbGwgYmUgYWJvcnRlZC4KLSAqIC0gcmV0dXJucyA+IDAsIHRoZSBkZWx0YSB3aWxsIG5vdCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBkaWZmIGxpc3QsIGJ1dCB0aGUKKyAqIC0gcmV0dXJucyA+IDAsIHRoZSBkZWx0YSB3aWxsIG5vdCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBkaWZmLCBidXQgdGhlCiAgKgkJZGlmZiBwcm9jZXNzIGNvbnRpbnVlcy4KLSAqIC0gcmV0dXJucyAwLCB0aGUgZGVsdGEgaXMgaW5zZXJ0ZWQgaW50byB0aGUgZGlmZiBsaXN0LCBhbmQgdGhlIGRpZmYgcHJvY2VzcworICogLSByZXR1cm5zIDAsIHRoZSBkZWx0YSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBkaWZmLCBhbmQgdGhlIGRpZmYgcHJvY2VzcwogICoJCWNvbnRpbnVlcy4KICAqLwogdHlwZWRlZiBpbnQgKCpnaXRfZGlmZl9ub3RpZnlfY2IpKAotCWNvbnN0IGdpdF9kaWZmX2xpc3QgKmRpZmZfc29fZmFyLAorCWNvbnN0IGdpdF9kaWZmICpkaWZmX3NvX2ZhciwKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGFfdG9fYWRkLAogCWNvbnN0IGNoYXIgKm1hdGNoZWRfcGF0aHNwZWMsCiAJdm9pZCAqcGF5bG9hZCk7CkBAIC0zMTQsMjggKzM0Myw0NCBAQAogICogLSBgbm90aWZ5X2NiYCBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiwgbm90aWZ5aW5nIHRoZSBjb25zdW1lciBvZgogICogICB3aGljaCBmaWxlcyBhcmUgYmVpbmcgZXhhbWluZWQgYXMgdGhlIGRpZmYgaXMgZ2VuZXJhdGVkCiAgKiAtIGBub3RpZnlfcGF5bG9hZGAgaXMgdGhlIHBheWxvYWQgZGF0YSB0byBwYXNzIHRvIHRoZSBgbm90aWZ5X2NiYCBmdW5jdGlvbgorICogLSBgaWdub3JlX3N1Ym1vZHVsZXNgIG92ZXJyaWRlcyB0aGUgc3VibW9kdWxlIGlnbm9yZSBzZXR0aW5nIGZvciBhbGwKKyAqICAgc3VibW9kdWxlcyBpbiB0aGUgZGlmZi4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCB2ZXJzaW9uOyAgICAgIC8qKjwgdmVyc2lvbiBmb3IgdGhlIHN0cnVjdCAqLwogCXVpbnQzMl90IGZsYWdzOyAgICAgICAgICAgIC8qKjwgZGVmYXVsdHMgdG8gR0lUX0RJRkZfTk9STUFMICovCi0JdWludDE2X3QgY29udGV4dF9saW5lczsgICAgLyoqPCBkZWZhdWx0cyB0byAzICovCi0JdWludDE2X3QgaW50ZXJodW5rX2xpbmVzOyAgLyoqPCBkZWZhdWx0cyB0byAwICovCi0JY29uc3QgY2hhciAqb2xkX3ByZWZpeDsgICAgLyoqPCBkZWZhdWx0cyB0byAiYSIgKi8KLQljb25zdCBjaGFyICpuZXdfcHJlZml4OyAgICAvKio8IGRlZmF1bHRzIHRvICJiIiAqLwotCWdpdF9zdHJhcnJheSBwYXRoc3BlYzsgICAgIC8qKjwgZGVmYXVsdHMgdG8gaW5jbHVkZSBhbGwgcGF0aHMgKi8KLQlnaXRfb2ZmX3QgbWF4X3NpemU7ICAgICAgICAvKio8IGRlZmF1bHRzIHRvIDUxMk1CICovCisKKwkvKiBvcHRpb25zIGNvbnRyb2xsaW5nIHdoaWNoIGZpbGVzIGFyZSBpbiB0aGUgZGlmZiAqLworCisJZ2l0X3N1Ym1vZHVsZV9pZ25vcmVfdCBpZ25vcmVfc3VibW9kdWxlczsgLyoqPCBzdWJtb2R1bGUgaWdub3JlIHJ1bGUgKi8KKwlnaXRfc3RyYXJyYXkgICAgICAgcGF0aHNwZWM7ICAgICAvKio8IGRlZmF1bHRzIHRvIGluY2x1ZGUgYWxsIHBhdGhzICovCiAJZ2l0X2RpZmZfbm90aWZ5X2NiIG5vdGlmeV9jYjsKLQl2b2lkICpub3RpZnlfcGF5bG9hZDsKKwl2b2lkICAgICAgICAgICAgICAqbm90aWZ5X3BheWxvYWQ7CisKKwkvKiBvcHRpb25zIGNvbnRyb2xsaW5nIGhvdyB0byBkaWZmIHRleHQgaXMgZ2VuZXJhdGVkICovCisKKwl1aW50MTZfdCAgICBjb250ZXh0X2xpbmVzOyAgICAvKio8IGRlZmF1bHRzIHRvIDMgKi8KKwl1aW50MTZfdCAgICBpbnRlcmh1bmtfbGluZXM7ICAvKio8IGRlZmF1bHRzIHRvIDAgKi8KKwl1aW50MTZfdCAgICBvaWRfYWJicmV2OyAgICAgICAvKio8IGRlZmF1bHQgJ2NvcmUuYWJicmV2JyBvciA3IGlmIHVuc2V0ICovCisJZ2l0X29mZl90ICAgbWF4X3NpemU7ICAgICAgICAgLyoqPCBkZWZhdWx0cyB0byA1MTJNQiAqLworCWNvbnN0IGNoYXIgKm9sZF9wcmVmaXg7ICAgICAgIC8qKjwgZGVmYXVsdHMgdG8gImEiICovCisJY29uc3QgY2hhciAqbmV3X3ByZWZpeDsgICAgICAgLyoqPCBkZWZhdWx0cyB0byAiYiIgKi8KIH0gZ2l0X2RpZmZfb3B0aW9uczsKIAorLyogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgZGlmZiBvcHRpb25zIHN0cnVjdHVyZSAqLwogI2RlZmluZSBHSVRfRElGRl9PUFRJT05TX1ZFUlNJT04gMQotI2RlZmluZSBHSVRfRElGRl9PUFRJT05TX0lOSVQge0dJVF9ESUZGX09QVElPTlNfVkVSU0lPTiwgR0lUX0RJRkZfTk9STUFMLCAzfQorCisvKiBTdGFjayBpbml0aWFsaXplciBmb3IgZGlmZiBvcHRpb25zLiAgQWx0ZXJuYXRpdmVseSB1c2UKKyAqIGBnaXRfZGlmZl9vcHRpb25zX2luaXRgIHByb2dyYW1tYXRpYyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSBHSVRfRElGRl9PUFRJT05TX0lOSVQgXAorCXtHSVRfRElGRl9PUFRJT05TX1ZFUlNJT04sIDAsIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RFRkFVTFQsIHtOVUxMLDB9LCBOVUxMLCBOVUxMLCAzfQogCiAvKioKICAqIFdoZW4gaXRlcmF0aW5nIG92ZXIgYSBkaWZmLCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgbWFkZSBwZXIgZmlsZS4KICAqCiAgKiBAcGFyYW0gZGVsdGEgQSBwb2ludGVyIHRvIHRoZSBkZWx0YSBkYXRhIGZvciB0aGUgZmlsZQotICogQHBhcmFtIHByb2dyZXNzIEdvZXMgZnJvbSAwIHRvIDEgb3ZlciB0aGUgZGlmZiBsaXN0CisgKiBAcGFyYW0gcHJvZ3Jlc3MgR29lcyBmcm9tIDAgdG8gMSBvdmVyIHRoZSBkaWZmCiAgKiBAcGFyYW0gcGF5bG9hZCBVc2VyLXNwZWNpZmllZCBwb2ludGVyIGZyb20gZm9yZWFjaCBmdW5jdGlvbgogICovCiB0eXBlZGVmIGludCAoKmdpdF9kaWZmX2ZpbGVfY2IpKApAQCAtMzQ2LDM0ICszOTEsMzUgQEAKIC8qKgogICogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSBodW5rIG9mIGEgZGlmZi4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCWludCBvbGRfc3RhcnQ7IC8qKiBTdGFydGluZyBsaW5lIG51bWJlciBpbiBvbGRfZmlsZSAqLwotCWludCBvbGRfbGluZXM7IC8qKiBOdW1iZXIgb2YgbGluZXMgaW4gb2xkX2ZpbGUgKi8KLQlpbnQgbmV3X3N0YXJ0OyAvKiogU3RhcnRpbmcgbGluZSBudW1iZXIgaW4gbmV3X2ZpbGUgKi8KLQlpbnQgbmV3X2xpbmVzOyAvKiogTnVtYmVyIG9mIGxpbmVzIGluIG5ld19maWxlICovCi19IGdpdF9kaWZmX3JhbmdlOwordHlwZWRlZiBzdHJ1Y3QgZ2l0X2RpZmZfaHVuayBnaXRfZGlmZl9odW5rOworc3RydWN0IGdpdF9kaWZmX2h1bmsgeworCWludCAgICBvbGRfc3RhcnQ7ICAgICAvKiogU3RhcnRpbmcgbGluZSBudW1iZXIgaW4gb2xkX2ZpbGUgKi8KKwlpbnQgICAgb2xkX2xpbmVzOyAgICAgLyoqIE51bWJlciBvZiBsaW5lcyBpbiBvbGRfZmlsZSAqLworCWludCAgICBuZXdfc3RhcnQ7ICAgICAvKiogU3RhcnRpbmcgbGluZSBudW1iZXIgaW4gbmV3X2ZpbGUgKi8KKwlpbnQgICAgbmV3X2xpbmVzOyAgICAgLyoqIE51bWJlciBvZiBsaW5lcyBpbiBuZXdfZmlsZSAqLworCXNpemVfdCBoZWFkZXJfbGVuOyAgICAvKiogTnVtYmVyIG9mIGJ5dGVzIGluIGhlYWRlciB0ZXh0ICovCisJY2hhciAgIGhlYWRlclsxMjhdOyAgIC8qKiBIZWFkZXIgdGV4dCwgTlVMLWJ5dGUgdGVybWluYXRlZCAqLworfTsKIAogLyoqCiAgKiBXaGVuIGl0ZXJhdGluZyBvdmVyIGEgZGlmZiwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIG1hZGUgcGVyIGh1bmsuCiAgKi8KIHR5cGVkZWYgaW50ICgqZ2l0X2RpZmZfaHVua19jYikoCiAJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAotCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyYW5nZSwKLQljb25zdCBjaGFyICpoZWFkZXIsCi0Jc2l6ZV90IGhlYWRlcl9sZW4sCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuaywKIAl2b2lkICpwYXlsb2FkKTsKIAogLyoqCiAgKiBMaW5lIG9yaWdpbiBjb25zdGFudHMuCiAgKgogICogVGhlc2UgdmFsdWVzIGRlc2NyaWJlIHdoZXJlIGEgbGluZSBjYW1lIGZyb20gYW5kIHdpbGwgYmUgcGFzc2VkIHRvCi0gKiB0aGUgZ2l0X2RpZmZfZGF0YV9jYiB3aGVuIGl0ZXJhdGluZyBvdmVyIGEgZGlmZi4gIFRoZXJlIGFyZSBzb21lCisgKiB0aGUgZ2l0X2RpZmZfbGluZV9jYiB3aGVuIGl0ZXJhdGluZyBvdmVyIGEgZGlmZi4gIFRoZXJlIGFyZSBzb21lCiAgKiBzcGVjaWFsIG9yaWdpbiBjb25zdGFudHMgYXQgdGhlIGVuZCB0aGF0IGFyZSB1c2VkIGZvciB0aGUgdGV4dAogICogb3V0cHV0IGNhbGxiYWNrcyB0byBkZW1hcmNhdGUgbGluZXMgdGhhdCBhcmUgYWN0dWFsbHkgcGFydCBvZgogICogdGhlIGZpbGUgb3IgaHVuayBoZWFkZXJzLgogICovCiB0eXBlZGVmIGVudW0gewotCS8qIFRoZXNlIHZhbHVlcyB3aWxsIGJlIHNlbnQgdG8gYGdpdF9kaWZmX2RhdGFfY2JgIGFsb25nIHdpdGggdGhlIGxpbmUgKi8KKwkvKiBUaGVzZSB2YWx1ZXMgd2lsbCBiZSBzZW50IHRvIGBnaXRfZGlmZl9saW5lX2NiYCBhbG9uZyB3aXRoIHRoZSBsaW5lICovCiAJR0lUX0RJRkZfTElORV9DT05URVhUICAgPSAnICcsCiAJR0lUX0RJRkZfTElORV9BRERJVElPTiAgPSAnKycsCiAJR0lUX0RJRkZfTElORV9ERUxFVElPTiAgPSAnLScsCkBAIC0zODIsMTYgKzQyOCwyOSBAQAogCUdJVF9ESUZGX0xJTkVfQUREX0VPRk5MID0gJz4nLCAgICAgLyoqPCBPbGQgaGFzIG5vIExGIGF0IGVuZCwgbmV3IGRvZXMgKi8KIAlHSVRfRElGRl9MSU5FX0RFTF9FT0ZOTCA9ICc8JywgICAgIC8qKjwgT2xkIGhhcyBMRiBhdCBlbmQsIG5ldyBkb2VzIG5vdCAqLwogCi0JLyogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd2lsbCBvbmx5IGJlIHNlbnQgdG8gYSBgZ2l0X2RpZmZfZGF0YV9jYmAgd2hlbgotCSAqIHRoZSBjb250ZW50IG9mIGEgZGlmZiBpcyBiZWluZyBmb3JtYXR0ZWQgKGVnLiB0aHJvdWdoCi0JICogZ2l0X2RpZmZfcHJpbnRfcGF0Y2goKSBvciBnaXRfZGlmZl9wcmludF9jb21wYWN0KCksIGZvciBpbnN0YW5jZSkuCisJLyogVGhlIGZvbGxvd2luZyB2YWx1ZXMgd2lsbCBvbmx5IGJlIHNlbnQgdG8gYSBgZ2l0X2RpZmZfbGluZV9jYmAgd2hlbgorCSAqIHRoZSBjb250ZW50IG9mIGEgZGlmZiBpcyBiZWluZyBmb3JtYXR0ZWQgdGhyb3VnaCBgZ2l0X2RpZmZfcHJpbnRgLgogCSAqLwogCUdJVF9ESUZGX0xJTkVfRklMRV9IRFIgID0gJ0YnLAogCUdJVF9ESUZGX0xJTkVfSFVOS19IRFIgID0gJ0gnLAotCUdJVF9ESUZGX0xJTkVfQklOQVJZICAgID0gJ0InCisJR0lUX0RJRkZfTElORV9CSU5BUlkgICAgPSAnQicgLyoqPCBGb3IgIkJpbmFyeSBmaWxlcyB4IGFuZCB5IGRpZmZlciIgKi8KIH0gZ2l0X2RpZmZfbGluZV90OwogCiAvKioKKyAqIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgbGluZSAob3IgZGF0YSBzcGFuKSBvZiBhIGRpZmYuCisgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9kaWZmX2xpbmUgZ2l0X2RpZmZfbGluZTsKK3N0cnVjdCBnaXRfZGlmZl9saW5lIHsKKwljaGFyICAgb3JpZ2luOyAgICAgICAvKiogQSBnaXRfZGlmZl9saW5lX3QgdmFsdWUgKi8KKwlpbnQgICAgb2xkX2xpbmVubzsgICAvKiogTGluZSBudW1iZXIgaW4gb2xkIGZpbGUgb3IgLTEgZm9yIGFkZGVkIGxpbmUgKi8KKwlpbnQgICAgbmV3X2xpbmVubzsgICAvKiogTGluZSBudW1iZXIgaW4gbmV3IGZpbGUgb3IgLTEgZm9yIGRlbGV0ZWQgbGluZSAqLworCWludCAgICBudW1fbGluZXM7ICAgIC8qKiBOdW1iZXIgb2YgbmV3bGluZSBjaGFyYWN0ZXJzIGluIGNvbnRlbnQgKi8KKwlzaXplX3QgY29udGVudF9sZW47ICAvKiogTnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgKi8KKwlnaXRfb2ZmX3QgY29udGVudF9vZmZzZXQ7IC8qKiBPZmZzZXQgaW4gdGhlIG9yaWdpbmFsIGZpbGUgdG8gdGhlIGNvbnRlbnQgKi8KKwljb25zdCBjaGFyICpjb250ZW50OyAvKiogUG9pbnRlciB0byBkaWZmIHRleHQsIG5vdCBOVUwtYnl0ZSB0ZXJtaW5hdGVkICovCit9OworCisvKioKICAqIFdoZW4gaXRlcmF0aW5nIG92ZXIgYSBkaWZmLCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgbWFkZSBwZXIgdGV4dCBkaWZmCiAgKiBsaW5lLiBJbiB0aGlzIGNvbnRleHQsIHRoZSBwcm92aWRlZCByYW5nZSB3aWxsIGJlIE5VTEwuCiAgKgpAQCAtMzk5LDQ2ICs0NTgsMzYgQEAKICAqIG9mIHRleHQuICBUaGlzIHVzZXMgc29tZSBleHRyYSBHSVRfRElGRl9MSU5FXy4uLiBjb25zdGFudHMgZm9yIG91dHB1dAogICogb2YgbGluZXMgb2YgZmlsZSBhbmQgaHVuayBoZWFkZXJzLgogICovCi10eXBlZGVmIGludCAoKmdpdF9kaWZmX2RhdGFfY2IpKAordHlwZWRlZiBpbnQgKCpnaXRfZGlmZl9saW5lX2NiKSgKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsIC8qKiBkZWx0YSB0aGF0IGNvbnRhaW5zIHRoaXMgZGF0YSAqLwotCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyYW5nZSwgLyoqIHJhbmdlIG9mIGxpbmVzIGNvbnRhaW5pbmcgdGhpcyBkYXRhICovCi0JY2hhciBsaW5lX29yaWdpbiwgICAgICAgICAgICAvKiogZ2l0X2RpZmZfbGlzdF90IHZhbHVlIGZyb20gYWJvdmUgKi8KLQljb25zdCBjaGFyICpjb250ZW50LCAgICAgICAgIC8qKiBkaWZmIGRhdGEgLSBub3QgTlVMIHRlcm1pbmF0ZWQgKi8KLQlzaXplX3QgY29udGVudF9sZW4sICAgICAgICAgIC8qKiBudW1iZXIgb2YgYnl0ZXMgb2YgZGlmZiBkYXRhICovCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuaywgICAvKiogaHVuayBjb250YWluaW5nIHRoaXMgZGF0YSAqLworCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmUsICAgLyoqIGxpbmUgZGF0YSAqLwogCXZvaWQgKnBheWxvYWQpOyAgICAgICAgICAgICAgLyoqIHVzZXIgcmVmZXJlbmNlIGRhdGEgKi8KIAogLyoqCi0gKiBUaGUgZGlmZiBwYXRjaCBpcyB1c2VkIHRvIHN0b3JlIGFsbCB0aGUgdGV4dCBkaWZmcyBmb3IgYSBkZWx0YS4KLSAqCi0gKiBZb3UgY2FuIGVhc2lseSBsb29wIG92ZXIgdGhlIGNvbnRlbnQgb2YgcGF0Y2hlcyBhbmQgZ2V0IGluZm9ybWF0aW9uIGFib3V0Ci0gKiB0aGVtLgotICovCi10eXBlZGVmIHN0cnVjdCBnaXRfZGlmZl9wYXRjaCBnaXRfZGlmZl9wYXRjaDsKLQotLyoqCiAgKiBGbGFncyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBkaWZmIHJlbmFtZS9jb3B5IGRldGVjdGlvbi4KICAqLwogdHlwZWRlZiBlbnVtIHsKIAkvKiogbG9vayBmb3IgcmVuYW1lcz8gKGAtLWZpbmQtcmVuYW1lc2ApICovCi0JR0lUX0RJRkZfRklORF9SRU5BTUVTID0gKDEgPDwgMCksCisJR0lUX0RJRkZfRklORF9SRU5BTUVTID0gKDF1IDw8IDApLAogCS8qKiBjb25zaWRlciBvbGQgc2lkZSBvZiBtb2RpZmllZCBmb3IgcmVuYW1lcz8gKGAtLWJyZWFrLXJld3JpdGVzPU5gKSAqLwotCUdJVF9ESUZGX0ZJTkRfUkVOQU1FU19GUk9NX1JFV1JJVEVTID0gKDEgPDwgMSksCisJR0lUX0RJRkZfRklORF9SRU5BTUVTX0ZST01fUkVXUklURVMgPSAoMXUgPDwgMSksCiAKIAkvKiogbG9vayBmb3IgY29waWVzPyAoYSBsYSBgLS1maW5kLWNvcGllc2ApICovCi0JR0lUX0RJRkZfRklORF9DT1BJRVMgPSAoMSA8PCAyKSwKKwlHSVRfRElGRl9GSU5EX0NPUElFUyA9ICgxdSA8PCAyKSwKIAkvKiogY29uc2lkZXIgdW5tb2RpZmllZCBhcyBjb3B5IHNvdXJjZXM/IChgLS1maW5kLWNvcGllcy1oYXJkZXJgKSAqLwotCUdJVF9ESUZGX0ZJTkRfQ09QSUVTX0ZST01fVU5NT0RJRklFRCA9ICgxIDw8IDMpLAorCUdJVF9ESUZGX0ZJTkRfQ09QSUVTX0ZST01fVU5NT0RJRklFRCA9ICgxdSA8PCAzKSwKIAogCS8qKiBtYXJrIGxhcmdlIHJld3JpdGVzIGZvciBzcGxpdCAoYC0tYnJlYWstcmV3cml0ZXM9L01gKSAqLwotCUdJVF9ESUZGX0ZJTkRfUkVXUklURVMgPSAoMSA8PCA0KSwKKwlHSVRfRElGRl9GSU5EX1JFV1JJVEVTID0gKDF1IDw8IDQpLAogCS8qKiBhY3R1YWxseSBzcGxpdCBsYXJnZSByZXdyaXRlcyBpbnRvIGRlbGV0ZS9hZGQgcGFpcnMgKi8KLQlHSVRfRElGRl9CUkVBS19SRVdSSVRFUyA9ICgxIDw8IDUpLAorCUdJVF9ESUZGX0JSRUFLX1JFV1JJVEVTID0gKDF1IDw8IDUpLAogCS8qKiBtYXJrIHJld3JpdGVzIGZvciBzcGxpdCBhbmQgYnJlYWsgaW50byBkZWxldGUvYWRkIHBhaXJzICovCiAJR0lUX0RJRkZfRklORF9BTkRfQlJFQUtfUkVXUklURVMgPQogCQkoR0lUX0RJRkZfRklORF9SRVdSSVRFUyB8IEdJVF9ESUZGX0JSRUFLX1JFV1JJVEVTKSwKIAogCS8qKiBmaW5kIHJlbmFtZXMvY29waWVzIGZvciB1bnRyYWNrZWQgaXRlbXMgaW4gd29ya2luZyBkaXJlY3RvcnkgKi8KLQlHSVRfRElGRl9GSU5EX0ZPUl9VTlRSQUNLRUQgPSAoMSA8PCA2KSwKKwlHSVRfRElGRl9GSU5EX0ZPUl9VTlRSQUNLRUQgPSAoMXUgPDwgNiksCiAKIAkvKiogdHVybiBvbiBhbGwgZmluZGluZyBmZWF0dXJlcyAqLwogCUdJVF9ESUZGX0ZJTkRfQUxMID0gKDB4MGZmKSwKQEAgLTQ0NiwxMSArNDk1LDE0IEBACiAJLyoqIG1lYXN1cmUgc2ltaWxhcml0eSBpZ25vcmluZyBsZWFkaW5nIHdoaXRlc3BhY2UgKGRlZmF1bHQpICovCiAJR0lUX0RJRkZfRklORF9JR05PUkVfTEVBRElOR19XSElURVNQQUNFID0gMCwKIAkvKiogbWVhc3VyZSBzaW1pbGFyaXR5IGlnbm9yaW5nIGFsbCB3aGl0ZXNwYWNlICovCi0JR0lUX0RJRkZfRklORF9JR05PUkVfV0hJVEVTUEFDRSA9ICgxIDw8IDEyKSwKKwlHSVRfRElGRl9GSU5EX0lHTk9SRV9XSElURVNQQUNFID0gKDF1IDw8IDEyKSwKIAkvKiogbWVhc3VyZSBzaW1pbGFyaXR5IGluY2x1ZGluZyBhbGwgZGF0YSAqLwotCUdJVF9ESUZGX0ZJTkRfRE9OVF9JR05PUkVfV0hJVEVTUEFDRSA9ICgxIDw8IDEzKSwKKwlHSVRfRElGRl9GSU5EX0RPTlRfSUdOT1JFX1dISVRFU1BBQ0UgPSAoMXUgPDwgMTMpLAogCS8qKiBtZWFzdXJlIHNpbWlsYXJpdHkgb25seSBieSBjb21wYXJpbmcgU0hBcyAoZmFzdCBhbmQgY2hlYXApICovCi0JR0lUX0RJRkZfRklORF9FWEFDVF9NQVRDSF9PTkxZID0gKDEgPDwgMTQpLAorCUdJVF9ESUZGX0ZJTkRfRVhBQ1RfTUFUQ0hfT05MWSA9ICgxdSA8PCAxNCksCisKKwkvKiogZG8gbm90IGJyZWFrIHJld3JpdGVzIHVubGVzcyB0aGV5IGNvbnRyaWJ1dGUgdG8gYSByZW5hbWUgKi8KKwlHSVRfRElGRl9CUkVBS19SRVdSSVRFU19GT1JfUkVOQU1FU19PTkxZICA9ICgxdSA8PCAxNSksCiB9IGdpdF9kaWZmX2ZpbmRfdDsKIAogLyoqCkBAIC01MTUsMjIgKzU2NywyMiBAQAogI2RlZmluZSBHSVRfRElGRl9GSU5EX09QVElPTlNfVkVSU0lPTiAxCiAjZGVmaW5lIEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUIHtHSVRfRElGRl9GSU5EX09QVElPTlNfVkVSU0lPTn0KIAotLyoqIEBuYW1lIERpZmYgTGlzdCBHZW5lcmF0b3IgRnVuY3Rpb25zCisvKiogQG5hbWUgRGlmZiBHZW5lcmF0b3IgRnVuY3Rpb25zCiAgKgogICogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUgKG9yIGRlc3Ryb3kpIGEKLSAqIGdpdF9kaWZmX2xpc3QgZnJvbSB2YXJpb3VzIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5LgorICogZ2l0X2RpZmYgZnJvbSB2YXJpb3VzIG9iamVjdHMgaW4gYSByZXBvc2l0b3J5LgogICovCiAvKipAeyovCiAKIC8qKgotICogRGVhbGxvY2F0ZSBhIGRpZmYgbGlzdC4KKyAqIERlYWxsb2NhdGUgYSBkaWZmLgogICoKLSAqIEBwYXJhbSBkaWZmIFRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgZGlmZiBsaXN0OyBjYW5ub3QgYmUgdXNlZCBhZnRlciBmcmVlLgorICogQHBhcmFtIGRpZmYgVGhlIHByZXZpb3VzbHkgY3JlYXRlZCBkaWZmOyBjYW5ub3QgYmUgdXNlZCBhZnRlciBmcmVlLgogICovCi1HSVRfRVhURVJOKHZvaWQpIGdpdF9kaWZmX2xpc3RfZnJlZShnaXRfZGlmZl9saXN0ICpkaWZmKTsKK0dJVF9FWFRFUk4odm9pZCkgZ2l0X2RpZmZfZnJlZShnaXRfZGlmZiAqZGlmZik7CiAKIC8qKgotICogQ3JlYXRlIGEgZGlmZiBsaXN0IHdpdGggdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gdHJlZSBvYmplY3RzLgorICogQ3JlYXRlIGEgZGlmZiB3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHRyZWUgb2JqZWN0cy4KICAqCiAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGdpdCBkaWZmIDxvbGQtdHJlZT4gPG5ldy10cmVlPmAKICAqCkBAIC01MzksMjEgKzU5MSwyMSBAQAogICogcGFzcyBOVUxMIHRvIGluZGljYXRlIGFuIGVtcHR5IHRyZWUsIGFsdGhvdWdoIGl0IGlzIGFuIGVycm9yIHRvIHBhc3MKICAqIE5VTEwgZm9yIGJvdGggdGhlIGBvbGRfdHJlZWAgYW5kIGBuZXdfdHJlZWAuCiAgKgotICogQHBhcmFtIGRpZmYgT3V0cHV0IHBvaW50ZXIgdG8gYSBnaXRfZGlmZl9saXN0IHBvaW50ZXIgdG8gYmUgYWxsb2NhdGVkLgorICogQHBhcmFtIGRpZmYgT3V0cHV0IHBvaW50ZXIgdG8gYSBnaXRfZGlmZiBwb2ludGVyIHRvIGJlIGFsbG9jYXRlZC4KICAqIEBwYXJhbSByZXBvIFRoZSByZXBvc2l0b3J5IGNvbnRhaW5pbmcgdGhlIHRyZWVzLgogICogQHBhcmFtIG9sZF90cmVlIEEgZ2l0X3RyZWUgb2JqZWN0IHRvIGRpZmYgZnJvbSwgb3IgTlVMTCBmb3IgZW1wdHkgdHJlZS4KICAqIEBwYXJhbSBuZXdfdHJlZSBBIGdpdF90cmVlIG9iamVjdCB0byBkaWZmIHRvLCBvciBOVUxMIGZvciBlbXB0eSB0cmVlLgogICogQHBhcmFtIG9wdHMgU3RydWN0dXJlIHdpdGggb3B0aW9ucyB0byBpbmZsdWVuY2UgZGlmZiBvciBOVUxMIGZvciBkZWZhdWx0cy4KICAqLwogR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3RyZWVfdG9fdHJlZSgKLQlnaXRfZGlmZl9saXN0ICoqZGlmZiwKKwlnaXRfZGlmZiAqKmRpZmYsCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCiAJZ2l0X3RyZWUgKm9sZF90cmVlLAogCWdpdF90cmVlICpuZXdfdHJlZSwKIAljb25zdCBnaXRfZGlmZl9vcHRpb25zICpvcHRzKTsgLyoqPCBjYW4gYmUgTlVMTCBmb3IgZGVmYXVsdHMgKi8KIAogLyoqCi0gKiBDcmVhdGUgYSBkaWZmIGxpc3QgYmV0d2VlbiBhIHRyZWUgYW5kIHJlcG9zaXRvcnkgaW5kZXguCisgKiBDcmVhdGUgYSBkaWZmIGJldHdlZW4gYSB0cmVlIGFuZCByZXBvc2l0b3J5IGluZGV4LgogICoKICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgZ2l0IGRpZmYgLS1jYWNoZWQgPHRyZWVpc2g+YCBvciBpZiB5b3UgcGFzcwogICogdGhlIEhFQUQgdHJlZSwgdGhlbiBsaWtlIGBnaXQgZGlmZiAtLWNhY2hlZGAuCkBAIC01NjEsMjEgKzYxMywyNSBAQAogICogVGhlIHRyZWUgeW91IHBhc3Mgd2lsbCBiZSB1c2VkIGZvciB0aGUgIm9sZF9maWxlIiBzaWRlIG9mIHRoZSBkZWx0YSwgYW5kCiAgKiB0aGUgaW5kZXggd2lsbCBiZSB1c2VkIGZvciB0aGUgIm5ld19maWxlIiBzaWRlIG9mIHRoZSBkZWx0YS4KICAqCi0gKiBAcGFyYW0gZGlmZiBPdXRwdXQgcG9pbnRlciB0byBhIGdpdF9kaWZmX2xpc3QgcG9pbnRlciB0byBiZSBhbGxvY2F0ZWQuCisgKiBJZiB5b3UgcGFzcyBOVUxMIGZvciB0aGUgaW5kZXgsIHRoZW4gdGhlIGV4aXN0aW5nIGluZGV4IG9mIHRoZSBgcmVwb2AKKyAqIHdpbGwgYmUgdXNlZC4gIEluIHRoaXMgY2FzZSwgdGhlIGluZGV4IHdpbGwgYmUgcmVmcmVzaGVkIGZyb20gZGlzaworICogKGlmIGl0IGhhcyBjaGFuZ2VkKSBiZWZvcmUgdGhlIGRpZmYgaXMgZ2VuZXJhdGVkLgorICoKKyAqIEBwYXJhbSBkaWZmIE91dHB1dCBwb2ludGVyIHRvIGEgZ2l0X2RpZmYgcG9pbnRlciB0byBiZSBhbGxvY2F0ZWQuCiAgKiBAcGFyYW0gcmVwbyBUaGUgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSB0cmVlIGFuZCBpbmRleC4KICAqIEBwYXJhbSBvbGRfdHJlZSBBIGdpdF90cmVlIG9iamVjdCB0byBkaWZmIGZyb20sIG9yIE5VTEwgZm9yIGVtcHR5IHRyZWUuCiAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHRvIGRpZmYgd2l0aDsgcmVwbyBpbmRleCB1c2VkIGlmIE5VTEwuCiAgKiBAcGFyYW0gb3B0cyBTdHJ1Y3R1cmUgd2l0aCBvcHRpb25zIHRvIGluZmx1ZW5jZSBkaWZmIG9yIE5VTEwgZm9yIGRlZmF1bHRzLgogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X2RpZmZfdHJlZV90b19pbmRleCgKLQlnaXRfZGlmZl9saXN0ICoqZGlmZiwKKwlnaXRfZGlmZiAqKmRpZmYsCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCiAJZ2l0X3RyZWUgKm9sZF90cmVlLAogCWdpdF9pbmRleCAqaW5kZXgsCiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cyk7IC8qKjwgY2FuIGJlIE5VTEwgZm9yIGRlZmF1bHRzICovCiAKIC8qKgotICogQ3JlYXRlIGEgZGlmZiBsaXN0IGJldHdlZW4gdGhlIHJlcG9zaXRvcnkgaW5kZXggYW5kIHRoZSB3b3JrZGlyIGRpcmVjdG9yeS4KKyAqIENyZWF0ZSBhIGRpZmYgYmV0d2VlbiB0aGUgcmVwb3NpdG9yeSBpbmRleCBhbmQgdGhlIHdvcmtkaXIgZGlyZWN0b3J5LgogICoKICAqIFRoaXMgbWF0Y2hlcyB0aGUgYGdpdCBkaWZmYCBjb21tYW5kLiAgU2VlIHRoZSBub3RlIGJlbG93IG9uCiAgKiBgZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyYCBmb3IgYSBkaXNjdXNzaW9uIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KQEAgLTU4NSwxOSArNjQxLDIzIEBACiAgKiBUaGUgaW5kZXggd2lsbCBiZSB1c2VkIGZvciB0aGUgIm9sZF9maWxlIiBzaWRlIG9mIHRoZSBkZWx0YSwgYW5kIHRoZQogICogd29ya2luZyBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkIGZvciB0aGUgIm5ld19maWxlIiBzaWRlIG9mIHRoZSBkZWx0YS4KICAqCi0gKiBAcGFyYW0gZGlmZiBPdXRwdXQgcG9pbnRlciB0byBhIGdpdF9kaWZmX2xpc3QgcG9pbnRlciB0byBiZSBhbGxvY2F0ZWQuCisgKiBJZiB5b3UgcGFzcyBOVUxMIGZvciB0aGUgaW5kZXgsIHRoZW4gdGhlIGV4aXN0aW5nIGluZGV4IG9mIHRoZSBgcmVwb2AKKyAqIHdpbGwgYmUgdXNlZC4gIEluIHRoaXMgY2FzZSwgdGhlIGluZGV4IHdpbGwgYmUgcmVmcmVzaGVkIGZyb20gZGlzaworICogKGlmIGl0IGhhcyBjaGFuZ2VkKSBiZWZvcmUgdGhlIGRpZmYgaXMgZ2VuZXJhdGVkLgorICoKKyAqIEBwYXJhbSBkaWZmIE91dHB1dCBwb2ludGVyIHRvIGEgZ2l0X2RpZmYgcG9pbnRlciB0byBiZSBhbGxvY2F0ZWQuCiAgKiBAcGFyYW0gcmVwbyBUaGUgcmVwb3NpdG9yeS4KICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggdG8gZGlmZiBmcm9tOyByZXBvIGluZGV4IHVzZWQgaWYgTlVMTC4KICAqIEBwYXJhbSBvcHRzIFN0cnVjdHVyZSB3aXRoIG9wdGlvbnMgdG8gaW5mbHVlbmNlIGRpZmYgb3IgTlVMTCBmb3IgZGVmYXVsdHMuCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKAotCWdpdF9kaWZmX2xpc3QgKipkaWZmLAorCWdpdF9kaWZmICoqZGlmZiwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAlnaXRfaW5kZXggKmluZGV4LAogCWNvbnN0IGdpdF9kaWZmX29wdGlvbnMgKm9wdHMpOyAvKio8IGNhbiBiZSBOVUxMIGZvciBkZWZhdWx0cyAqLwogCiAvKioKLSAqIENyZWF0ZSBhIGRpZmYgbGlzdCBiZXR3ZWVuIGEgdHJlZSBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorICogQ3JlYXRlIGEgZGlmZiBiZXR3ZWVuIGEgdHJlZSBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgogICoKICAqIFRoZSB0cmVlIHlvdSBwcm92aWRlIHdpbGwgYmUgdXNlZCBmb3IgdGhlICJvbGRfZmlsZSIgc2lkZSBvZiB0aGUgZGVsdGEsCiAgKiBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCBmb3IgdGhlICJuZXdfZmlsZSIgc2lkZS4KQEAgLTYxMSwzMSArNjcxLDUxIEBACiAgKiBmaWxlcyBpbiB0aGUgaW5kZXguICBJdCBtYXkgY29tZSBhcyBhIHN1cnByaXNlLCBidXQgdGhlcmUgaXMgbm8gZGlyZWN0CiAgKiBlcXVpdmFsZW50IGluIGNvcmUgZ2l0LgogICoKLSAqIFRvIGVtdWxhdGUgYGdpdCBkaWZmIDx0cmVlaXNoPmAsIGNhbGwgYm90aCBgZ2l0X2RpZmZfdHJlZV90b19pbmRleGAgYW5kCi0gKiBgZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcmAsIHRoZW4gY2FsbCBgZ2l0X2RpZmZfbWVyZ2VgIG9uIHRoZSByZXN1bHRzLgotICogVGhhdCB3aWxsIHlpZWxkIGEgYGdpdF9kaWZmX2xpc3RgIHRoYXQgbWF0Y2hlcyB0aGUgZ2l0IG91dHB1dC4KKyAqIFRvIGVtdWxhdGUgYGdpdCBkaWZmIDx0cmVlPmAsIHVzZSBgZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyX3dpdGhfaW5kZXhgCisgKiAob3IgYGdpdF9kaWZmX3RyZWVfdG9faW5kZXhgIGFuZCBgZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcmAsIHRoZW4gY2FsbAorICogYGdpdF9kaWZmX21lcmdlYCBvbiB0aGUgcmVzdWx0cykuICBUaGF0IHdpbGwgeWllbGQgYSBgZ2l0X2RpZmZgIHRoYXQKKyAqIG1hdGNoZXMgdGhlIGdpdCBvdXRwdXQuCiAgKgogICogSWYgdGhpcyBzZWVtcyBjb25mdXNpbmcsIHRha2UgdGhlIGNhc2Ugb2YgYSBmaWxlIHdpdGggYSBzdGFnZWQgZGVsZXRpb24KICAqIHdoZXJlIHRoZSBmaWxlIGhhcyB0aGVuIGJlZW4gcHV0IGJhY2sgaW50byB0aGUgd29ya2luZyBkaXIgYW5kIG1vZGlmaWVkLgogICogVGhlIHRyZWUtdG8td29ya2RpciBkaWZmIGZvciB0aGF0IGZpbGUgaXMgJ21vZGlmaWVkJywgYnV0IGNvcmUgZ2l0IHdvdWxkCiAgKiBzaG93IHN0YXR1cyAnZGVsZXRlZCcgc2luY2UgdGhlcmUgaXMgYSBwZW5kaW5nIGRlbGV0aW9uIGluIHRoZSBpbmRleC4KICAqCi0gKiBAcGFyYW0gZGlmZiBBIHBvaW50ZXIgdG8gYSBnaXRfZGlmZl9saXN0IHBvaW50ZXIgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZC4KKyAqIEBwYXJhbSBkaWZmIEEgcG9pbnRlciB0byBhIGdpdF9kaWZmIHBvaW50ZXIgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZC4KICAqIEBwYXJhbSByZXBvIFRoZSByZXBvc2l0b3J5IGNvbnRhaW5pbmcgdGhlIHRyZWUuCiAgKiBAcGFyYW0gb2xkX3RyZWUgQSBnaXRfdHJlZSBvYmplY3QgdG8gZGlmZiBmcm9tLCBvciBOVUxMIGZvciBlbXB0eSB0cmVlLgogICogQHBhcmFtIG9wdHMgU3RydWN0dXJlIHdpdGggb3B0aW9ucyB0byBpbmZsdWVuY2UgZGlmZiBvciBOVUxMIGZvciBkZWZhdWx0cy4KICAqLwogR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigKLQlnaXRfZGlmZl9saXN0ICoqZGlmZiwKKwlnaXRfZGlmZiAqKmRpZmYsCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCiAJZ2l0X3RyZWUgKm9sZF90cmVlLAogCWNvbnN0IGdpdF9kaWZmX29wdGlvbnMgKm9wdHMpOyAvKio8IGNhbiBiZSBOVUxMIGZvciBkZWZhdWx0cyAqLwogCiAvKioKLSAqIE1lcmdlIG9uZSBkaWZmIGxpc3QgaW50byBhbm90aGVyLgorICogQ3JlYXRlIGEgZGlmZiBiZXR3ZWVuIGEgdHJlZSBhbmQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHVzaW5nIGluZGV4IGRhdGEKKyAqIHRvIGFjY291bnQgZm9yIHN0YWdlZCBkZWxldGVzLCB0cmFja2VkIGZpbGVzLCBldGMuCisgKgorICogVGhpcyBlbXVsYXRlcyBgZ2l0IGRpZmYgPHRyZWU+YCBieSBkaWZmaW5nIHRoZSB0cmVlIHRvIHRoZSBpbmRleCBhbmQKKyAqIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGJsZW5kaW5nIHRoZSByZXN1bHRzIGludG8gYQorICogc2luZ2xlIGRpZmYgdGhhdCBpbmNsdWRlcyBzdGFnZWQgZGVsZXRlZCwgZXRjLgorICoKKyAqIEBwYXJhbSBkaWZmIEEgcG9pbnRlciB0byBhIGdpdF9kaWZmIHBvaW50ZXIgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZC4KKyAqIEBwYXJhbSByZXBvIFRoZSByZXBvc2l0b3J5IGNvbnRhaW5pbmcgdGhlIHRyZWUuCisgKiBAcGFyYW0gb2xkX3RyZWUgQSBnaXRfdHJlZSBvYmplY3QgdG8gZGlmZiBmcm9tLCBvciBOVUxMIGZvciBlbXB0eSB0cmVlLgorICogQHBhcmFtIG9wdHMgU3RydWN0dXJlIHdpdGggb3B0aW9ucyB0byBpbmZsdWVuY2UgZGlmZiBvciBOVUxMIGZvciBkZWZhdWx0cy4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3RyZWVfdG9fd29ya2Rpcl93aXRoX2luZGV4KAorCWdpdF9kaWZmICoqZGlmZiwKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwlnaXRfdHJlZSAqb2xkX3RyZWUsCisJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cyk7IC8qKjwgY2FuIGJlIE5VTEwgZm9yIGRlZmF1bHRzICovCisKKy8qKgorICogTWVyZ2Ugb25lIGRpZmYgaW50byBhbm90aGVyLgogICoKICAqIFRoaXMgbWVyZ2VzIGl0ZW1zIGZyb20gdGhlICJmcm9tIiBsaXN0IGludG8gdGhlICJvbnRvIiBsaXN0LiAgVGhlCi0gKiByZXN1bHRpbmcgZGlmZiBsaXN0IHdpbGwgaGF2ZSBhbGwgaXRlbXMgdGhhdCBhcHBlYXIgaW4gZWl0aGVyIGxpc3QuCisgKiByZXN1bHRpbmcgZGlmZiB3aWxsIGhhdmUgYWxsIGl0ZW1zIHRoYXQgYXBwZWFyIGluIGVpdGhlciBsaXN0LgogICogSWYgYW4gaXRlbSBhcHBlYXJzIGluIGJvdGggbGlzdHMsIHRoZW4gaXQgd2lsbCBiZSAibWVyZ2VkIiB0byBhcHBlYXIKICAqIGFzIGlmIHRoZSBvbGQgdmVyc2lvbiB3YXMgZnJvbSB0aGUgIm9udG8iIGxpc3QgYW5kIHRoZSBuZXcgdmVyc2lvbgogICogaXMgZnJvbSB0aGUgImZyb20iIGxpc3QgKHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGlmIHRoZSBpdGVtIGhhcyBhCkBAIC02NDUsNTAgKzcyNSwxMTcgQEAKICAqIEBwYXJhbSBmcm9tIERpZmYgdG8gbWVyZ2UuCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfZGlmZl9tZXJnZSgKLQlnaXRfZGlmZl9saXN0ICpvbnRvLAotCWNvbnN0IGdpdF9kaWZmX2xpc3QgKmZyb20pOworCWdpdF9kaWZmICpvbnRvLAorCWNvbnN0IGdpdF9kaWZmICpmcm9tKTsKIAogLyoqCi0gKiBUcmFuc2Zvcm0gYSBkaWZmIGxpc3QgbWFya2luZyBmaWxlIHJlbmFtZXMsIGNvcGllcywgZXRjLgorICogVHJhbnNmb3JtIGEgZGlmZiBtYXJraW5nIGZpbGUgcmVuYW1lcywgY29waWVzLCBldGMuCiAgKgotICogVGhpcyBtb2RpZmllcyBhIGRpZmYgbGlzdCBpbiBwbGFjZSwgcmVwbGFjaW5nIG9sZCBlbnRyaWVzIHRoYXQgbG9vaworICogVGhpcyBtb2RpZmllcyBhIGRpZmYgaW4gcGxhY2UsIHJlcGxhY2luZyBvbGQgZW50cmllcyB0aGF0IGxvb2sKICAqIGxpa2UgcmVuYW1lcyBvciBjb3BpZXMgd2l0aCBuZXcgZW50cmllcyByZWZsZWN0aW5nIHRob3NlIGNoYW5nZXMuCiAgKiBUaGlzIGFsc28gd2lsbCwgaWYgcmVxdWVzdGVkLCBicmVhayBtb2RpZmllZCBmaWxlcyBpbnRvIGFkZC9yZW1vdmUKICAqIHBhaXJzIGlmIHRoZSBhbW91bnQgb2YgY2hhbmdlIGlzIGFib3ZlIGEgdGhyZXNob2xkLgogICoKLSAqIEBwYXJhbSBkaWZmIERpZmYgbGlzdCB0byBydW4gZGV0ZWN0aW9uIGFsZ29yaXRobXMgb24KKyAqIEBwYXJhbSBkaWZmIGRpZmYgdG8gcnVuIGRldGVjdGlvbiBhbGdvcml0aG1zIG9uCiAgKiBAcGFyYW0gb3B0aW9ucyBDb250cm9sIGhvdyBkZXRlY3Rpb24gc2hvdWxkIGJlIHJ1biwgTlVMTCBmb3IgZGVmYXVsdHMKICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfZGlmZl9maW5kX3NpbWlsYXIoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKLQlnaXRfZGlmZl9maW5kX29wdGlvbnMgKm9wdGlvbnMpOworCWdpdF9kaWZmICpkaWZmLAorCWNvbnN0IGdpdF9kaWZmX2ZpbmRfb3B0aW9ucyAqb3B0aW9ucyk7CisKKy8qKgorICogSW5pdGlhbGl6ZSBkaWZmIG9wdGlvbnMgc3RydWN0dXJlCisgKgorICogSW4gbW9zdCBjYXNlcywgeW91IGNhbiBwcm9iYWJseSBqdXN0IHVzZSBgR0lUX0RJRkZfT1BUSU9OU19JTklUYCB0bworICogaW5pdGlhbGl6ZSB0aGUgZGlmZiBvcHRpb25zIHN0cnVjdHVyZSwgYnV0IGluIHNvbWUgY2FzZXMgdGhhdCBpcyBub3QKKyAqIGdvaW5nIHRvIHdvcmsuICBZb3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkLiAgTm90ZSB0aGF0IHlvdQorICogbXVzdCBwYXNzIGJvdGggYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQgYW5kIHRoZQorICogYEdJVF9ESUZGX09QVElPTlNfVkVSU0lPTmAgdmFsdWUgZnJvbSB0aGUgaGVhZGVyIHlvdSBjb21waWxlZCB3aXRoLgorICoKKyAqIEBwYXJhbSBvcHRpb25zIFBvaW50ZXIgdG8gZ2l0X2RpZmZfb3B0aW9ucyBtZW1vcnkgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBwYXJhbSB2ZXJzaW9uIFNob3VsZCBiZSBgR0lUX0RJRkZfT1BUSU9OU19WRVJTSU9OYAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUgKHN1Y2ggYXMgdW5zdXBwb3J0ZWQgdmVyc2lvbikKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX29wdGlvbnNfaW5pdCgKKwlnaXRfZGlmZl9vcHRpb25zICpvcHRpb25zLAorCXVuc2lnbmVkIGludCB2ZXJzaW9uKTsKIAogLyoqQH0qLwogCiAKLS8qKiBAbmFtZSBEaWZmIExpc3QgUHJvY2Vzc29yIEZ1bmN0aW9ucworLyoqIEBuYW1lIERpZmYgUHJvY2Vzc29yIEZ1bmN0aW9ucwogICoKLSAqIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHlvdSBhcHBseSB0byBhIGRpZmYgbGlzdCB0byBwcm9jZXNzIGl0CisgKiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB5b3UgYXBwbHkgdG8gYSBkaWZmIHRvIHByb2Nlc3MgaXQKICAqIG9yIHJlYWQgaXQgaW4gc29tZSB3YXkuCiAgKi8KIC8qKkB7Ki8KIAogLyoqCi0gKiBMb29wIG92ZXIgYWxsIGRlbHRhcyBpbiBhIGRpZmYgbGlzdCBpc3N1aW5nIGNhbGxiYWNrcy4KKyAqIFF1ZXJ5IGhvdyBtYW55IGRpZmYgcmVjb3JkcyBhcmUgdGhlcmUgaW4gYSBkaWZmLgorICoKKyAqIEBwYXJhbSBkaWZmIEEgZ2l0X2RpZmYgZ2VuZXJhdGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zCisgKiBAcmV0dXJuIENvdW50IG9mIG51bWJlciBvZiBkZWx0YXMgaW4gdGhlIGxpc3QKKyAqLworR0lUX0VYVEVSTihzaXplX3QpIGdpdF9kaWZmX251bV9kZWx0YXMoY29uc3QgZ2l0X2RpZmYgKmRpZmYpOworCisvKioKKyAqIFF1ZXJ5IGhvdyBtYW55IGRpZmYgZGVsdGFzIGFyZSB0aGVyZSBpbiBhIGRpZmYgZmlsdGVyZWQgYnkgdHlwZS4KKyAqCisgKiBUaGlzIHdvcmtzIGp1c3QgbGlrZSBgZ2l0X2RpZmZfZW50cnljb3VudCgpYCB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlcgorICogdGhhdCBpcyBhIGBnaXRfZGVsdGFfdGAgYW5kIHJldHVybnMganVzdCB0aGUgY291bnQgb2YgaG93IG1hbnkgZGVsdGFzCisgKiBtYXRjaCB0aGF0IHBhcnRpY3VsYXIgdHlwZS4KKyAqCisgKiBAcGFyYW0gZGlmZiBBIGdpdF9kaWZmIGdlbmVyYXRlZCBieSBvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucworICogQHBhcmFtIHR5cGUgQSBnaXRfZGVsdGFfdCB2YWx1ZSB0byBmaWx0ZXIgdGhlIGNvdW50CisgKiBAcmV0dXJuIENvdW50IG9mIG51bWJlciBvZiBkZWx0YXMgbWF0Y2hpbmcgZGVsdGFfdCB0eXBlCisgKi8KK0dJVF9FWFRFUk4oc2l6ZV90KSBnaXRfZGlmZl9udW1fZGVsdGFzX29mX3R5cGUoCisJY29uc3QgZ2l0X2RpZmYgKmRpZmYsIGdpdF9kZWx0YV90IHR5cGUpOworCisvKioKKyAqIFJldHVybiB0aGUgZGlmZiBkZWx0YSBmb3IgYW4gZW50cnkgaW4gdGhlIGRpZmYgbGlzdC4KKyAqCisgKiBUaGUgYGdpdF9kZWx0YWAgcG9pbnRlciBwb2ludHMgdG8gaW50ZXJuYWwgZGF0YSBhbmQgeW91IGRvIG5vdCBoYXZlCisgKiB0byByZWxlYXNlIGl0IHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuICBJdCB3aWxsIGdvIGF3YXkgd2hlbiB0aGUKKyAqIGBnaXRfZGlmZmAgKG9yIGFueSBhc3NvY2lhdGVkIGBnaXRfcGF0Y2hgKSBnb2VzIGF3YXkuCisgKgorICogTm90ZSB0aGF0IHRoZSBmbGFncyBvbiB0aGUgZGVsdGEgcmVsYXRlZCB0byB3aGV0aGVyIGl0IGhhcyBiaW5hcnkKKyAqIGNvbnRlbnQgb3Igbm90IG1heSBub3QgYmUgc2V0IGlmIHRoZXJlIGFyZSBubyBhdHRyaWJ1dGVzIHNldCBmb3IgdGhlCisgKiBmaWxlIGFuZCB0aGVyZSBoYXMgYmVlbiBubyByZWFzb24gdG8gbG9hZCB0aGUgZmlsZSBkYXRhIGF0IHRoaXMgcG9pbnQuCisgKiBGb3Igbm93LCBpZiB5b3UgbmVlZCB0aG9zZSBmbGFncyB0byBiZSB1cCB0byBkYXRlLCB5b3VyIG9ubHkgb3B0aW9uIGlzCisgKiB0byBlaXRoZXIgdXNlIGBnaXRfZGlmZl9mb3JlYWNoYCBvciBjcmVhdGUgYSBgZ2l0X3BhdGNoYC4KKyAqCisgKiBAcGFyYW0gZGlmZiBEaWZmIGxpc3Qgb2JqZWN0CisgKiBAcGFyYW0gaWR4IEluZGV4IGludG8gZGlmZiBsaXN0CisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gZ2l0X2RpZmZfZGVsdGEgKG9yIE5VTEwgaWYgYGlkeGAgb3V0IG9mIHJhbmdlKQorICovCitHSVRfRVhURVJOKGNvbnN0IGdpdF9kaWZmX2RlbHRhICopIGdpdF9kaWZmX2dldF9kZWx0YSgKKwljb25zdCBnaXRfZGlmZiAqZGlmZiwgc2l6ZV90IGlkeCk7CisKKy8qKgorICogQ2hlY2sgaWYgZGVsdGFzIGFyZSBzb3J0ZWQgY2FzZSBzZW5zaXRpdmVseSBvciBpbnNlbnNpdGl2ZWx5LgorICoKKyAqIEBwYXJhbSBkaWZmIGRpZmYgdG8gY2hlY2sKKyAqIEByZXR1cm4gMCBpZiBjYXNlIHNlbnNpdGl2ZSwgMSBpZiBjYXNlIGlzIGlnbm9yZWQKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX2lzX3NvcnRlZF9pY2FzZShjb25zdCBnaXRfZGlmZiAqZGlmZik7CisKKy8qKgorICogTG9vcCBvdmVyIGFsbCBkZWx0YXMgaW4gYSBkaWZmIGlzc3VpbmcgY2FsbGJhY2tzLgogICoKICAqIFRoaXMgd2lsbCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBmaWxlcyBkZXNjcmliZWQgaW4gYSBkaWZmLiAgWW91CiAgKiBzaG91bGQgcHJvdmlkZSBhIGZpbGUgY2FsbGJhY2sgdG8gbGVhcm4gYWJvdXQgZWFjaCBmaWxlLgogICoKICAqIFRoZSAiaHVuayIgYW5kICJsaW5lIiBjYWxsYmFja3MgYXJlIG9wdGlvbmFsLCBhbmQgdGhlIHRleHQgZGlmZiBvZiB0aGUKICAqIGZpbGVzIHdpbGwgb25seSBiZSBjYWxjdWxhdGVkIGlmIHRoZXkgYXJlIG5vdCBOVUxMLiAgT2YgY291cnNlLCB0aGVzZQotICogY2FsbGJhY2tzIHdpbGwgbm90IGJlIGludm9rZWQgZm9yIGJpbmFyeSBmaWxlcyBvbiB0aGUgZGlmZiBsaXN0IG9yIGZvcgorICogY2FsbGJhY2tzIHdpbGwgbm90IGJlIGludm9rZWQgZm9yIGJpbmFyeSBmaWxlcyBvbiB0aGUgZGlmZiBvciBmb3IKICAqIGZpbGVzIHdob3NlIG9ubHkgY2hhbmdlZCBpcyBhIGZpbGUgbW9kZSBjaGFuZ2UuCiAgKgogICogUmV0dXJuaW5nIGEgbm9uLXplcm8gdmFsdWUgZnJvbSBhbnkgb2YgdGhlIGNhbGxiYWNrcyB3aWxsIHRlcm1pbmF0ZQogICogdGhlIGl0ZXJhdGlvbiBhbmQgY2F1c2UgdGhpcyByZXR1cm4gYEdJVF9FVVNFUmAuCiAgKgotICogQHBhcmFtIGRpZmYgQSBnaXRfZGlmZl9saXN0IGdlbmVyYXRlZCBieSBvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucy4KKyAqIEBwYXJhbSBkaWZmIEEgZ2l0X2RpZmYgZ2VuZXJhdGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zLgogICogQHBhcmFtIGZpbGVfY2IgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gbWFrZSBwZXIgZmlsZSBpbiB0aGUgZGlmZi4KICAqIEBwYXJhbSBodW5rX2NiIE9wdGlvbmFsIGNhbGxiYWNrIHRvIG1ha2UgcGVyIGh1bmsgb2YgdGV4dCBkaWZmLiAgVGhpcwogICogICAgICAgICAgICAgICAgY2FsbGJhY2sgaXMgY2FsbGVkIHRvIGRlc2NyaWJlIGEgcmFuZ2Ugb2YgbGluZXMgaW4gdGhlCkBAIC03MDAsNTIgKzg0NywxOSBAQAogICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FVVNFUiBvbiBub24temVybyBjYWxsYmFjaywgb3IgZXJyb3IgY29kZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X2RpZmZfZm9yZWFjaCgKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAorCWdpdF9kaWZmICpkaWZmLAogCWdpdF9kaWZmX2ZpbGVfY2IgZmlsZV9jYiwKIAlnaXRfZGlmZl9odW5rX2NiIGh1bmtfY2IsCi0JZ2l0X2RpZmZfZGF0YV9jYiBsaW5lX2NiLAotCXZvaWQgKnBheWxvYWQpOwotCi0vKioKLSAqIEl0ZXJhdGUgb3ZlciBhIGRpZmYgZ2VuZXJhdGluZyB0ZXh0IG91dHB1dCBsaWtlICJnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIi4KLSAqCi0gKiBSZXR1cm5pbmcgYSBub24temVybyB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFja3Mgd2lsbCB0ZXJtaW5hdGUgdGhlCi0gKiBpdGVyYXRpb24gYW5kIGNhdXNlIHRoaXMgcmV0dXJuIGBHSVRfRVVTRVJgLgotICoKLSAqIEBwYXJhbSBkaWZmIEEgZ2l0X2RpZmZfbGlzdCBnZW5lcmF0ZWQgYnkgb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMuCi0gKiBAcGFyYW0gcHJpbnRfY2IgQ2FsbGJhY2sgdG8gbWFrZSBwZXIgbGluZSBvZiBkaWZmIHRleHQuCi0gKiBAcGFyYW0gcGF5bG9hZCBSZWZlcmVuY2UgcG9pbnRlciB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHlvdXIgY2FsbGJhY2suCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VVU0VSIG9uIG5vbi16ZXJvIGNhbGxiYWNrLCBvciBlcnJvciBjb2RlCi0gKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfZGlmZl9wcmludF9jb21wYWN0KAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCi0JZ2l0X2RpZmZfZGF0YV9jYiBwcmludF9jYiwKLQl2b2lkICpwYXlsb2FkKTsKLQotLyoqCi0gKiBJdGVyYXRlIG92ZXIgYSBkaWZmIGdlbmVyYXRpbmcgdGV4dCBvdXRwdXQgbGlrZSAiZ2l0IGRpZmYgLS1yYXciLgotICoKLSAqIFJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrcyB3aWxsIHRlcm1pbmF0ZSB0aGUKLSAqIGl0ZXJhdGlvbiBhbmQgY2F1c2UgdGhpcyByZXR1cm4gYEdJVF9FVVNFUmAuCi0gKgotICogQHBhcmFtIGRpZmYgQSBnaXRfZGlmZl9saXN0IGdlbmVyYXRlZCBieSBvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucy4KLSAqIEBwYXJhbSBwcmludF9jYiBDYWxsYmFjayB0byBtYWtlIHBlciBsaW5lIG9mIGRpZmYgdGV4dC4KLSAqIEBwYXJhbSBwYXlsb2FkIFJlZmVyZW5jZSBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8geW91ciBjYWxsYmFjay4KLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVTRVIgb24gbm9uLXplcm8gY2FsbGJhY2ssIG9yIGVycm9yIGNvZGUKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3ByaW50X3JhdygKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAotCWdpdF9kaWZmX2RhdGFfY2IgcHJpbnRfY2IsCisJZ2l0X2RpZmZfbGluZV9jYiBsaW5lX2NiLAogCXZvaWQgKnBheWxvYWQpOwogCiAvKioKICAqIExvb2sgdXAgdGhlIHNpbmdsZSBjaGFyYWN0ZXIgYWJicmV2aWF0aW9uIGZvciBhIGRlbHRhIHN0YXR1cyBjb2RlLgogICoKLSAqIFdoZW4geW91IGNhbGwgYGdpdF9kaWZmX3ByaW50X2NvbXBhY3RgIGl0IHByaW50cyBzaW5nbGUgbGV0dGVyIGNvZGVzIGludG8KLSAqIHRoZSBvdXRwdXQgc3VjaCBhcyAnQScgZm9yIGFkZGVkLCAnRCcgZm9yIGRlbGV0ZWQsICdNJyBmb3IgbW9kaWZpZWQsIGV0Yy4KLSAqIEl0IGlzIHNvbWV0aW1lcyBjb252ZW5pZW50IHRvIGNvbnZlcnQgYSBnaXRfZGVsdGFfdCB2YWx1ZSBpbnRvIHRoZXNlCi0gKiBsZXR0ZXJzIGZvciB5b3VyIG93biBwdXJwb3Nlcy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBqdXN0IHRoYXQuICBCeSB0aGUKLSAqIHdheSwgdW5tb2RpZmllZCB3aWxsIHJldHVybiBhIHNwYWNlIChpLmUuICcgJykuCisgKiBXaGVuIHlvdSBydW4gYGdpdCBkaWZmIC0tbmFtZS1zdGF0dXNgIGl0IHVzZXMgc2luZ2xlIGxldHRlciBjb2RlcyBpbgorICogdGhlIG91dHB1dCBzdWNoIGFzICdBJyBmb3IgYWRkZWQsICdEJyBmb3IgZGVsZXRlZCwgJ00nIGZvciBtb2RpZmllZCwKKyAqIGV0Yy4gIFRoaXMgZnVuY3Rpb24gY29udmVydHMgYSBnaXRfZGVsdGFfdCB2YWx1ZSBpbnRvIHRoZXNlIGxldHRlcnMgZm9yCisgKiB5b3VyIG93biBwdXJwb3Nlcy4gIEdJVF9ERUxUQV9VTlRSQUNLRUQgd2lsbCByZXR1cm4gYSBzcGFjZSAoaS5lLiAnICcpLgogICoKICAqIEBwYXJhbSBzdGF0dXMgVGhlIGdpdF9kZWx0YV90IHZhbHVlIHRvIGxvb2sgdXAKICAqIEByZXR1cm4gVGhlIHNpbmdsZSBjaGFyYWN0ZXIgbGFiZWwgZm9yIHRoYXQgY29kZQpAQCAtNzUzLDIxMiArODY3LDM0IEBACiBHSVRfRVhURVJOKGNoYXIpIGdpdF9kaWZmX3N0YXR1c19jaGFyKGdpdF9kZWx0YV90IHN0YXR1cyk7CiAKIC8qKgotICogSXRlcmF0ZSBvdmVyIGEgZGlmZiBnZW5lcmF0aW5nIHRleHQgb3V0cHV0IGxpa2UgImdpdCBkaWZmIi4KLSAqCi0gKiBUaGlzIGlzIGEgc3VwZXIgZWFzeSB3YXkgdG8gZ2VuZXJhdGUgYSBwYXRjaCBmcm9tIGEgZGlmZi4KKyAqIFBvc3NpYmxlIG91dHB1dCBmb3JtYXRzIGZvciBkaWZmIGRhdGEKKyAqLwordHlwZWRlZiBlbnVtIHsKKwlHSVRfRElGRl9GT1JNQVRfUEFUQ0ggICAgICAgID0gMXUsIC8qKjwgZnVsbCBnaXQgZGlmZiAqLworCUdJVF9ESUZGX0ZPUk1BVF9QQVRDSF9IRUFERVIgPSAydSwgLyoqPCBqdXN0IHRoZSBmaWxlIGhlYWRlcnMgb2YgcGF0Y2ggKi8KKwlHSVRfRElGRl9GT1JNQVRfUkFXICAgICAgICAgID0gM3UsIC8qKjwgbGlrZSBnaXQgZGlmZiAtLXJhdyAqLworCUdJVF9ESUZGX0ZPUk1BVF9OQU1FX09OTFkgICAgPSA0dSwgLyoqPCBsaWtlIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICovCisJR0lUX0RJRkZfRk9STUFUX05BTUVfU1RBVFVTICA9IDV1LCAvKio8IGxpa2UgZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAqLworfSBnaXRfZGlmZl9mb3JtYXRfdDsKKworLyoqCisgKiBJdGVyYXRlIG92ZXIgYSBkaWZmIGdlbmVyYXRpbmcgZm9ybWF0dGVkIHRleHQgb3V0cHV0LgogICoKICAqIFJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrcyB3aWxsIHRlcm1pbmF0ZSB0aGUKICAqIGl0ZXJhdGlvbiBhbmQgY2F1c2UgdGhpcyByZXR1cm4gYEdJVF9FVVNFUmAuCiAgKgotICogQHBhcmFtIGRpZmYgQSBnaXRfZGlmZl9saXN0IGdlbmVyYXRlZCBieSBvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucy4KLSAqIEBwYXJhbSBwYXlsb2FkIFJlZmVyZW5jZSBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8geW91ciBjYWxsYmFja3MuCi0gKiBAcGFyYW0gcHJpbnRfY2IgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gb3V0cHV0IGxpbmVzIG9mIHRoZSBkaWZmLiAgVGhpcwotICogICAgICAgICAgICAgICAgIHNhbWUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZm9yIGZpbGUgaGVhZGVycywgaHVuawotICogICAgICAgICAgICAgICAgIGhlYWRlcnMsIGFuZCBkaWZmIGxpbmVzLiAgRm9ydHVuYXRlbHksIHlvdSBjYW4gcHJvYmFibHkKLSAqICAgICAgICAgICAgICAgICB1c2UgdmFyaW91cyBHSVRfRElGRl9MSU5FIGNvbnN0YW50cyB0byBkZXRlcm1pbmUgd2hhdAotICogICAgICAgICAgICAgICAgIHRleHQgeW91IGFyZSBnaXZlbi4KKyAqIEBwYXJhbSBkaWZmIEEgZ2l0X2RpZmYgZ2VuZXJhdGVkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zLgorICogQHBhcmFtIGZvcm1hdCBBIGdpdF9kaWZmX2Zvcm1hdF90IHZhbHVlIHRvIHBpY2sgdGhlIHRleHQgZm9ybWF0LgorICogQHBhcmFtIHByaW50X2NiIENhbGxiYWNrIHRvIG1ha2UgcGVyIGxpbmUgb2YgZGlmZiB0ZXh0LgorICogQHBhcmFtIHBheWxvYWQgUmVmZXJlbmNlIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB5b3VyIGNhbGxiYWNrLgogICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FVVNFUiBvbiBub24temVybyBjYWxsYmFjaywgb3IgZXJyb3IgY29kZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2RpZmZfcHJpbnRfcGF0Y2goCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKLQlnaXRfZGlmZl9kYXRhX2NiIHByaW50X2NiLAorR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3ByaW50KAorCWdpdF9kaWZmICpkaWZmLAorCWdpdF9kaWZmX2Zvcm1hdF90IGZvcm1hdCwKKwlnaXRfZGlmZl9saW5lX2NiIHByaW50X2NiLAogCXZvaWQgKnBheWxvYWQpOwogCi0vKioKLSAqIFF1ZXJ5IGhvdyBtYW55IGRpZmYgcmVjb3JkcyBhcmUgdGhlcmUgaW4gYSBkaWZmIGxpc3QuCi0gKgotICogQHBhcmFtIGRpZmYgQSBnaXRfZGlmZl9saXN0IGdlbmVyYXRlZCBieSBvbmUgb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucwotICogQHJldHVybiBDb3VudCBvZiBudW1iZXIgb2YgZGVsdGFzIGluIHRoZSBsaXN0Ci0gKi8KLUdJVF9FWFRFUk4oc2l6ZV90KSBnaXRfZGlmZl9udW1fZGVsdGFzKGdpdF9kaWZmX2xpc3QgKmRpZmYpOwotCi0vKioKLSAqIFF1ZXJ5IGhvdyBtYW55IGRpZmYgZGVsdGFzIGFyZSB0aGVyZSBpbiBhIGRpZmYgbGlzdCBmaWx0ZXJlZCBieSB0eXBlLgotICoKLSAqIFRoaXMgd29ya3MganVzdCBsaWtlIGBnaXRfZGlmZl9lbnRyeWNvdW50KClgIHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyCi0gKiB0aGF0IGlzIGEgYGdpdF9kZWx0YV90YCBhbmQgcmV0dXJucyBqdXN0IHRoZSBjb3VudCBvZiBob3cgbWFueSBkZWx0YXMKLSAqIG1hdGNoIHRoYXQgcGFydGljdWxhciB0eXBlLgotICoKLSAqIEBwYXJhbSBkaWZmIEEgZ2l0X2RpZmZfbGlzdCBnZW5lcmF0ZWQgYnkgb25lIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnMKLSAqIEBwYXJhbSB0eXBlIEEgZ2l0X2RlbHRhX3QgdmFsdWUgdG8gZmlsdGVyIHRoZSBjb3VudAotICogQHJldHVybiBDb3VudCBvZiBudW1iZXIgb2YgZGVsdGFzIG1hdGNoaW5nIGRlbHRhX3QgdHlwZQotICovCi1HSVRfRVhURVJOKHNpemVfdCkgZ2l0X2RpZmZfbnVtX2RlbHRhc19vZl90eXBlKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCi0JZ2l0X2RlbHRhX3QgdHlwZSk7Ci0KLS8qKgotICogUmV0dXJuIHRoZSBkaWZmIGRlbHRhIGFuZCBwYXRjaCBmb3IgYW4gZW50cnkgaW4gdGhlIGRpZmYgbGlzdC4KLSAqCi0gKiBUaGUgYGdpdF9kaWZmX3BhdGNoYCBpcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSB0ZXh0IGRpZmZzCi0gKiBmb3IgdGhlIGRlbHRhLiAgWW91IGhhdmUgdG8gY2FsbCBgZ2l0X2RpZmZfcGF0Y2hfZnJlZSgpYCB3aGVuIHlvdSBhcmUKLSAqIGRvbmUgd2l0aCBpdC4gIFlvdSBjYW4gdXNlIHRoZSBwYXRjaCBvYmplY3QgdG8gbG9vcCBvdmVyIGFsbCB0aGUgaHVua3MKLSAqIGFuZCBsaW5lcyBpbiB0aGUgZGlmZiBvZiB0aGUgb25lIGRlbHRhLgotICoKLSAqIEZvciBhbiB1bmNoYW5nZWQgZmlsZSBvciBhIGJpbmFyeSBmaWxlLCBubyBgZ2l0X2RpZmZfcGF0Y2hgIHdpbGwgYmUKLSAqIGNyZWF0ZWQsIHRoZSBvdXRwdXQgd2lsbCBiZSBzZXQgdG8gTlVMTCwgYW5kIHRoZSBgYmluYXJ5YCBmbGFnIHdpbGwgYmUKLSAqIHNldCB0cnVlIGluIHRoZSBgZ2l0X2RpZmZfZGVsdGFgIHN0cnVjdHVyZS4KLSAqCi0gKiBUaGUgYGdpdF9kaWZmX2RlbHRhYCBwb2ludGVyIHBvaW50cyB0byBpbnRlcm5hbCBkYXRhIGFuZCB5b3UgZG8gbm90IGhhdmUKLSAqIHRvIHJlbGVhc2UgaXQgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBpdC4gIEl0IHdpbGwgZ28gYXdheSB3aGVuIHRoZQotICogYGdpdF9kaWZmX2xpc3RgIGFuZCBgZ2l0X2RpZmZfcGF0Y2hgIGdvIGF3YXkuCi0gKgotICogSXQgaXMgb2theSB0byBwYXNzIE5VTEwgZm9yIGVpdGhlciBvZiB0aGUgb3V0cHV0IHBhcmFtZXRlcnM7IGlmIHlvdSBwYXNzCi0gKiBOVUxMIGZvciB0aGUgYGdpdF9kaWZmX3BhdGNoYCwgdGhlbiB0aGUgdGV4dCBkaWZmIHdpbGwgbm90IGJlIGNhbGN1bGF0ZWQuCi0gKgotICogQHBhcmFtIHBhdGNoX291dCBPdXRwdXQgcGFyYW1ldGVyIGZvciB0aGUgZGVsdGEgcGF0Y2ggb2JqZWN0Ci0gKiBAcGFyYW0gZGVsdGFfb3V0IE91dHB1dCBwYXJhbWV0ZXIgZm9yIHRoZSBkZWx0YSBvYmplY3QKLSAqIEBwYXJhbSBkaWZmIERpZmYgbGlzdCBvYmplY3QKLSAqIEBwYXJhbSBpZHggSW5kZXggaW50byBkaWZmIGxpc3QKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlciB2YWx1ZSA8IDAgb24gZXJyb3IKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX2dldF9wYXRjaCgKLQlnaXRfZGlmZl9wYXRjaCAqKnBhdGNoX291dCwKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqKmRlbHRhX291dCwKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAotCXNpemVfdCBpZHgpOwotCi0vKioKLSAqIEZyZWUgYSBnaXRfZGlmZl9wYXRjaCBvYmplY3QuCi0gKi8KLUdJVF9FWFRFUk4odm9pZCkgZ2l0X2RpZmZfcGF0Y2hfZnJlZSgKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpOwotCi0vKioKLSAqIEdldCB0aGUgZGVsdGEgYXNzb2NpYXRlZCB3aXRoIGEgcGF0Y2gKLSAqLwotR0lUX0VYVEVSTihjb25zdCBnaXRfZGlmZl9kZWx0YSAqKSBnaXRfZGlmZl9wYXRjaF9kZWx0YSgKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpOwotCi0vKioKLSAqIEdldCB0aGUgbnVtYmVyIG9mIGh1bmtzIGluIGEgcGF0Y2gKLSAqLwotR0lUX0VYVEVSTihzaXplX3QpIGdpdF9kaWZmX3BhdGNoX251bV9odW5rcygKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpOwotCi0vKioKLSAqIEdldCBsaW5lIGNvdW50cyBvZiBlYWNoIHR5cGUgaW4gYSBwYXRjaC4KLSAqCi0gKiBUaGlzIGhlbHBzIGltaXRhdGUgYSBkaWZmIC0tbnVtc3RhdCB0eXBlIG9mIG91dHB1dC4gIEZvciB0aGF0IHB1cnBvc2UsCi0gKiB5b3Ugb25seSBuZWVkIHRoZSBgdG90YWxfYWRkaXRpb25zYCBhbmQgYHRvdGFsX2RlbGV0aW9uc2AgdmFsdWVzLCBidXQgd2UKLSAqIGluY2x1ZGUgdGhlIGB0b3RhbF9jb250ZXh0YCBsaW5lIGNvdW50IGluIGNhc2UgeW91IHdhbnQgdGhlIHRvdGFsIG51bWJlcgotICogb2YgbGluZXMgb2YgZGlmZiBvdXRwdXQgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZC4KLSAqCi0gKiBBbGwgb3V0cHV0cyBhcmUgb3B0aW9uYWwuIFBhc3MgTlVMTCBpZiB5b3UgZG9uJ3QgbmVlZCBhIHBhcnRpY3VsYXIgY291bnQuCi0gKgotICogQHBhcmFtIHRvdGFsX2NvbnRleHQgQ291bnQgb2YgY29udGV4dCBsaW5lcyBpbiBvdXRwdXQsIGNhbiBiZSBOVUxMLgotICogQHBhcmFtIHRvdGFsX2FkZGl0aW9ucyBDb3VudCBvZiBhZGRpdGlvbiBsaW5lcyBpbiBvdXRwdXQsIGNhbiBiZSBOVUxMLgotICogQHBhcmFtIHRvdGFsX2RlbGV0aW9ucyBDb3VudCBvZiBkZWxldGlvbiBsaW5lcyBpbiBvdXRwdXQsIGNhbiBiZSBOVUxMLgotICogQHBhcmFtIHBhdGNoIFRoZSBnaXRfZGlmZl9wYXRjaCBvYmplY3QKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgotICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2RpZmZfcGF0Y2hfbGluZV9zdGF0cygKLQlzaXplX3QgKnRvdGFsX2NvbnRleHQsCi0Jc2l6ZV90ICp0b3RhbF9hZGRpdGlvbnMsCi0Jc2l6ZV90ICp0b3RhbF9kZWxldGlvbnMsCi0JY29uc3QgZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoKTsKLQotLyoqCi0gKiBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgaHVuayBpbiBhIHBhdGNoCi0gKgotICogR2l2ZW4gYSBwYXRjaCBhbmQgYSBodW5rIGluZGV4IGludG8gdGhlIHBhdGNoLCB0aGlzIHJldHVybnMgZGV0YWlsZWQKLSAqIGluZm9ybWF0aW9uIGFib3V0IHRoYXQgaHVuay4gIEFueSBvZiB0aGUgb3V0cHV0IHBvaW50ZXJzIGNhbiBiZSBwYXNzZWQKLSAqIGFzIE5VTEwgaWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhhdCBwYXJ0aWN1bGFyIHBpZWNlIG9mIGluZm9ybWF0aW9uLgotICoKLSAqIEBwYXJhbSByYW5nZSBPdXRwdXQgcG9pbnRlciB0byBnaXRfZGlmZl9yYW5nZSBvZiBodW5rCi0gKiBAcGFyYW0gaGVhZGVyIE91dHB1dCBwb2ludGVyIHRvIGhlYWRlciBzdHJpbmcgZm9yIGh1bmsuICBVbmxpa2UgdGhlCi0gKiAgICAgICAgICAgICAgIGNvbnRlbnQgcG9pbnRlciBmb3IgZWFjaCBsaW5lLCB0aGlzIHdpbGwgYmUgTlVMLXRlcm1pbmF0ZWQKLSAqIEBwYXJhbSBoZWFkZXJfbGVuIE91dHB1dCB2YWx1ZSBvZiBjaGFyYWN0ZXJzIGluIGhlYWRlciBzdHJpbmcKLSAqIEBwYXJhbSBsaW5lc19pbl9odW5rIE91dHB1dCBjb3VudCBvZiB0b3RhbCBsaW5lcyBpbiB0aGlzIGh1bmsKLSAqIEBwYXJhbSBwYXRjaCBJbnB1dCBwb2ludGVyIHRvIHBhdGNoIG9iamVjdAotICogQHBhcmFtIGh1bmtfaWR4IElucHV0IGluZGV4IG9mIGh1bmsgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0Ci0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCBpZiBodW5rX2lkeCBvdXQgb2YgcmFuZ2UsIDwwIG9uIGVycm9yCi0gKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfZGlmZl9wYXRjaF9nZXRfaHVuaygKLQljb25zdCBnaXRfZGlmZl9yYW5nZSAqKnJhbmdlLAotCWNvbnN0IGNoYXIgKipoZWFkZXIsCi0Jc2l6ZV90ICpoZWFkZXJfbGVuLAotCXNpemVfdCAqbGluZXNfaW5faHVuaywKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gsCi0Jc2l6ZV90IGh1bmtfaWR4KTsKLQotLyoqCi0gKiBHZXQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGh1bmsuCi0gKgotICogQHBhcmFtIHBhdGNoIFRoZSBnaXRfZGlmZl9wYXRjaCBvYmplY3QKLSAqIEBwYXJhbSBodW5rX2lkeCBJbmRleCBvZiB0aGUgaHVuawotICogQHJldHVybiBOdW1iZXIgb2YgbGluZXMgaW4gaHVuayBvciAtMSBpZiBpbnZhbGlkIGh1bmsgaW5kZXgKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3BhdGNoX251bV9saW5lc19pbl9odW5rKAotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCwKLQlzaXplX3QgaHVua19pZHgpOwotCi0vKioKLSAqIEdldCBkYXRhIGFib3V0IGEgbGluZSBpbiBhIGh1bmsgb2YgYSBwYXRjaC4KLSAqCi0gKiBHaXZlbiBhIHBhdGNoLCBhIGh1bmsgaW5kZXgsIGFuZCBhIGxpbmUgaW5kZXggaW4gdGhlIGh1bmssIHRoaXMKLSAqIHdpbGwgcmV0dXJuIGEgbG90IG9mIGRldGFpbHMgYWJvdXQgdGhhdCBsaW5lLiAgSWYgeW91IHBhc3MgYSBodW5rCi0gKiBpbmRleCBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGh1bmtzIG9yIGEgbGluZSBpbmRleCBsYXJnZXIgdGhhbgotICogdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgaHVuaywgdGhpcyB3aWxsIHJldHVybiAtMS4KLSAqCi0gKiBAcGFyYW0gbGluZV9vcmlnaW4gQSBHSVRfRElGRl9MSU5FIGNvbnN0YW50IGZyb20gYWJvdmUKLSAqIEBwYXJhbSBjb250ZW50IFBvaW50ZXIgdG8gY29udGVudCBvZiBkaWZmIGxpbmUsIG5vdCBOVUwtdGVybWluYXRlZAotICogQHBhcmFtIGNvbnRlbnRfbGVuIE51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGNvbnRlbnQKLSAqIEBwYXJhbSBvbGRfbGluZW5vIExpbmUgbnVtYmVyIGluIG9sZCBmaWxlIG9yIC0xIGlmIGxpbmUgaXMgYWRkZWQKLSAqIEBwYXJhbSBuZXdfbGluZW5vIExpbmUgbnVtYmVyIGluIG5ldyBmaWxlIG9yIC0xIGlmIGxpbmUgaXMgZGVsZXRlZAotICogQHBhcmFtIHBhdGNoIFRoZSBwYXRjaCB0byBsb29rIGluCi0gKiBAcGFyYW0gaHVua19pZHggVGhlIGluZGV4IG9mIHRoZSBodW5rCi0gKiBAcGFyYW0gbGluZV9vZl9odW5rIFRoZSBpbmRleCBvZiB0aGUgbGluZSBpbiB0aGUgaHVuawotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JY2hhciAqbGluZV9vcmlnaW4sCi0JY29uc3QgY2hhciAqKmNvbnRlbnQsCi0Jc2l6ZV90ICpjb250ZW50X2xlbiwKLQlpbnQgKm9sZF9saW5lbm8sCi0JaW50ICpuZXdfbGluZW5vLAotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCwKLQlzaXplX3QgaHVua19pZHgsCi0Jc2l6ZV90IGxpbmVfb2ZfaHVuayk7Ci0KLS8qKgotICogU2VyaWFsaXplIHRoZSBwYXRjaCB0byB0ZXh0IHZpYSBjYWxsYmFjay4KLSAqCi0gKiBSZXR1cm5pbmcgYSBub24temVybyB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFjayB3aWxsIHRlcm1pbmF0ZSB0aGUgaXRlcmF0aW9uCi0gKiBhbmQgY2F1c2UgdGhpcyByZXR1cm4gYEdJVF9FVVNFUmAuCi0gKgotICogQHBhcmFtIHBhdGNoIEEgZ2l0X2RpZmZfcGF0Y2ggcmVwcmVzZW50aW5nIGNoYW5nZXMgdG8gb25lIGZpbGUKLSAqIEBwYXJhbSBwcmludF9jYiBDYWxsYmFjayBmdW5jdGlvbiB0byBvdXRwdXQgbGluZXMgb2YgdGhlIHBhdGNoLiAgV2lsbCBiZQotICogICAgICAgICAgICAgICAgIGNhbGxlZCBmb3IgZmlsZSBoZWFkZXJzLCBodW5rIGhlYWRlcnMsIGFuZCBkaWZmIGxpbmVzLgotICogQHBhcmFtIHBheWxvYWQgUmVmZXJlbmNlIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB5b3VyIGNhbGxiYWNrcy4KLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVTRVIgb24gbm9uLXplcm8gY2FsbGJhY2ssIG9yIGVycm9yIGNvZGUKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3BhdGNoX3ByaW50KAotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCwKLQlnaXRfZGlmZl9kYXRhX2NiIHByaW50X2NiLAotCXZvaWQgKnBheWxvYWQpOwotCi0vKioKLSAqIEdldCB0aGUgY29udGVudCBvZiBhIHBhdGNoIGFzIGEgc2luZ2xlIGRpZmYgdGV4dC4KLSAqCi0gKiBAcGFyYW0gc3RyaW5nIEFsbG9jYXRlZCBzdHJpbmc7IGNhbGxlciBtdXN0IGZyZWUuCi0gKiBAcGFyYW0gcGF0Y2ggQSBnaXRfZGlmZl9wYXRjaCByZXByZXNlbnRpbmcgY2hhbmdlcyB0byBvbmUgZmlsZQotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCi0gKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfZGlmZl9wYXRjaF90b19zdHIoCi0JY2hhciAqKnN0cmluZywKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpOwotCiAvKipAfSovCiAKIApAQCAtMTAwMSwzNCArOTM3LDEwIEBACiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCiAJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgbGluZV9jYiwKKwlnaXRfZGlmZl9saW5lX2NiIGxpbmVfY2IsCiAJdm9pZCAqcGF5bG9hZCk7CiAKIC8qKgotICogRGlyZWN0bHkgZ2VuZXJhdGUgYSBwYXRjaCBmcm9tIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGJsb2JzLgotICoKLSAqIFRoaXMgaXMganVzdCBsaWtlIGBnaXRfZGlmZl9ibG9icygpYCBleGNlcHQgaXQgZ2VuZXJhdGVzIGEgcGF0Y2ggb2JqZWN0Ci0gKiBmb3IgdGhlIGRpZmZlcmVuY2UgaW5zdGVhZCBvZiBkaXJlY3RseSBtYWtpbmcgY2FsbGJhY2tzLiAgWW91IGNhbiB1c2UgdGhlCi0gKiBzdGFuZGFyZCBgZ2l0X2RpZmZfcGF0Y2hgIGFjY2Vzc29yIGZ1bmN0aW9ucyB0byByZWFkIHRoZSBwYXRjaCBkYXRhLCBhbmQKLSAqIHlvdSBtdXN0IGNhbGwgYGdpdF9kaWZmX3BhdGNoX2ZyZWUoKWAgb24gdGhlIHBhdGNoIHdoZW4gZG9uZS4KLSAqCi0gKiBAcGFyYW0gb3V0IFRoZSBnZW5lcmF0ZWQgcGF0Y2g7IE5VTEwgb24gZXJyb3IKLSAqIEBwYXJhbSBvbGRfYmxvYiBCbG9iIGZvciBvbGQgc2lkZSBvZiBkaWZmLCBvciBOVUxMIGZvciBlbXB0eSBibG9iCi0gKiBAcGFyYW0gb2xkX2FzX3BhdGggVHJlYXQgb2xkIGJsb2IgYXMgaWYgaXQgaGFkIHRoaXMgZmlsZW5hbWU7IGNhbiBiZSBOVUxMCi0gKiBAcGFyYW0gbmV3X2Jsb2IgQmxvYiBmb3IgbmV3IHNpZGUgb2YgZGlmZiwgb3IgTlVMTCBmb3IgZW1wdHkgYmxvYgotICogQHBhcmFtIG5ld19hc19wYXRoIFRyZWF0IG5ldyBibG9iIGFzIGlmIGl0IGhhZCB0aGlzIGZpbGVuYW1lOyBjYW4gYmUgTlVMTAotICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgZGlmZiwgb3IgTlVMTCBmb3IgZGVmYXVsdCBvcHRpb25zCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvciBjb2RlIDwgMAotICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2RpZmZfcGF0Y2hfZnJvbV9ibG9icygKLQlnaXRfZGlmZl9wYXRjaCAqKm91dCwKLQljb25zdCBnaXRfYmxvYiAqb2xkX2Jsb2IsCi0JY29uc3QgY2hhciAqb2xkX2FzX3BhdGgsCi0JY29uc3QgZ2l0X2Jsb2IgKm5ld19ibG9iLAotCWNvbnN0IGNoYXIgKm5ld19hc19wYXRoLAotCWNvbnN0IGdpdF9kaWZmX29wdGlvbnMgKm9wdHMpOwotCi0vKioKICAqIERpcmVjdGx5IHJ1biBhIGRpZmYgYmV0d2VlbiBhIGJsb2IgYW5kIGEgYnVmZmVyLgogICoKICAqIEFzIHdpdGggYGdpdF9kaWZmX2Jsb2JzYCwgY29tcGFyaW5nIGEgYmxvYiBhbmQgYnVmZmVyIGxhY2tzIHNvbWUgY29udGV4dCwKQEAgLTEwNDgsNyArOTYwLDcgQEAKICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGRpZmYsIG9yIE5VTEwgZm9yIGRlZmF1bHQgb3B0aW9ucwogICogQHBhcmFtIGZpbGVfY2IgQ2FsbGJhY2sgZm9yICJmaWxlIjsgbWFkZSBvbmNlIGlmIHRoZXJlIGlzIGEgZGlmZjsgY2FuIGJlIE5VTEwKICAqIEBwYXJhbSBodW5rX2NiIENhbGxiYWNrIGZvciBlYWNoIGh1bmsgaW4gZGlmZjsgY2FuIGJlIE5VTEwKLSAqIEBwYXJhbSBkYXRhX2NiIENhbGxiYWNrIGZvciBlYWNoIGxpbmUgaW4gZGlmZjsgY2FuIGJlIE5VTEwKKyAqIEBwYXJhbSBsaW5lX2NiIENhbGxiYWNrIGZvciBlYWNoIGxpbmUgaW4gZGlmZjsgY2FuIGJlIE5VTEwKICAqIEBwYXJhbSBwYXlsb2FkIFBheWxvYWQgcGFzc2VkIHRvIGVhY2ggY2FsbGJhY2sgZnVuY3Rpb24KICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVTRVIgb24gbm9uLXplcm8gY2FsbGJhY2sgcmV0dXJuLCBvciBlcnJvciBjb2RlCiAgKi8KQEAgLTEwNjEsMzUgKzk3Myw5IEBACiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCiAJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgZGF0YV9jYiwKKwlnaXRfZGlmZl9saW5lX2NiIGxpbmVfY2IsCiAJdm9pZCAqcGF5bG9hZCk7CiAKLS8qKgotICogRGlyZWN0bHkgZ2VuZXJhdGUgYSBwYXRjaCBmcm9tIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBibG9iIGFuZCBhIGJ1ZmZlci4KLSAqCi0gKiBUaGlzIGlzIGp1c3QgbGlrZSBgZ2l0X2RpZmZfYmxvYl90b19idWZmZXIoKWAgZXhjZXB0IGl0IGdlbmVyYXRlcyBhIHBhdGNoCi0gKiBvYmplY3QgZm9yIHRoZSBkaWZmZXJlbmNlIGluc3RlYWQgb2YgZGlyZWN0bHkgbWFraW5nIGNhbGxiYWNrcy4gIFlvdSBjYW4KLSAqIHVzZSB0aGUgc3RhbmRhcmQgYGdpdF9kaWZmX3BhdGNoYCBhY2Nlc3NvciBmdW5jdGlvbnMgdG8gcmVhZCB0aGUgcGF0Y2gKLSAqIGRhdGEsIGFuZCB5b3UgbXVzdCBjYWxsIGBnaXRfZGlmZl9wYXRjaF9mcmVlKClgIG9uIHRoZSBwYXRjaCB3aGVuIGRvbmUuCi0gKgotICogQHBhcmFtIG91dCBUaGUgZ2VuZXJhdGVkIHBhdGNoOyBOVUxMIG9uIGVycm9yCi0gKiBAcGFyYW0gb2xkX2Jsb2IgQmxvYiBmb3Igb2xkIHNpZGUgb2YgZGlmZiwgb3IgTlVMTCBmb3IgZW1wdHkgYmxvYgotICogQHBhcmFtIG9sZF9hc19wYXRoIFRyZWF0IG9sZCBibG9iIGFzIGlmIGl0IGhhZCB0aGlzIGZpbGVuYW1lOyBjYW4gYmUgTlVMTAotICogQHBhcmFtIGJ1ZmZlciBSYXcgZGF0YSBmb3IgbmV3IHNpZGUgb2YgZGlmZiwgb3IgTlVMTCBmb3IgZW1wdHkKLSAqIEBwYXJhbSBidWZmZXJfbGVuIExlbmd0aCBvZiByYXcgZGF0YSBmb3IgbmV3IHNpZGUgb2YgZGlmZgotICogQHBhcmFtIGJ1ZmZlcl9hc19wYXRoIFRyZWF0IGJ1ZmZlciBhcyBpZiBpdCBoYWQgdGhpcyBmaWxlbmFtZTsgY2FuIGJlIE5VTEwKLSAqIEBwYXJhbSBvcHRzIE9wdGlvbnMgZm9yIGRpZmYsIG9yIE5VTEwgZm9yIGRlZmF1bHQgb3B0aW9ucwotICogQHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZSA8IDAKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAotCWdpdF9kaWZmX3BhdGNoICoqb3V0LAotCWNvbnN0IGdpdF9ibG9iICpvbGRfYmxvYiwKLQljb25zdCBjaGFyICpvbGRfYXNfcGF0aCwKLQljb25zdCBjaGFyICpidWZmZXIsCi0Jc2l6ZV90IGJ1ZmZlcl9sZW4sCi0JY29uc3QgY2hhciAqYnVmZmVyX2FzX3BhdGgsCi0JY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cyk7Ci0KIAogR0lUX0VORF9ERUNMCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9lcnJvcnMuaCBiL2luY2x1ZGUvZ2l0Mi9lcnJvcnMuaAppbmRleCAyMDMyYTQzLi5iZTdhMzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvZXJyb3JzLmgKKysrIGIvaW5jbHVkZS9naXQyL2Vycm9ycy5oCkBAIC04LDYgKzgsNyBAQAogI2RlZmluZSBJTkNMVURFX2dpdF9lcnJvcnNfaF9fCiAKICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKIAogLyoqCiAgKiBAZmlsZSBnaXQyL2Vycm9ycy5oCkBAIC0yNywxMSArMjgsMTIgQEAKIAlHSVRfRUJVRlMgPSAtNiwKIAlHSVRfRVVTRVIgPSAtNywKIAlHSVRfRUJBUkVSRVBPID0gLTgsCi0JR0lUX0VPUlBIQU5FREhFQUQgPSAtOSwKKwlHSVRfRVVOQk9STkJSQU5DSCA9IC05LAogCUdJVF9FVU5NRVJHRUQgPSAtMTAsCiAJR0lUX0VOT05GQVNURk9SV0FSRCA9IC0xMSwKIAlHSVRfRUlOVkFMSURTUEVDID0gLTEyLAogCUdJVF9FTUVSR0VDT05GTElDVCA9IC0xMywKKwlHSVRfRUxPQ0tFRCA9IC0xNCwKIAogCUdJVF9QQVNTVEhST1VHSCA9IC0zMCwKIAlHSVRfSVRFUk9WRVIgPSAtMzEsCkBAIC00NCw2ICs0Niw3IEBACiAKIC8qKiBFcnJvciBjbGFzc2VzICovCiB0eXBlZGVmIGVudW0geworCUdJVEVSUl9OT05FID0gMCwKIAlHSVRFUlJfTk9NRU1PUlksCiAJR0lURVJSX09TLAogCUdJVEVSUl9JTlZBTElELApAQCAtNjYsNiArNjksOCBAQAogCUdJVEVSUl9DSEVDS09VVCwKIAlHSVRFUlJfRkVUQ0hIRUFELAogCUdJVEVSUl9NRVJHRSwKKwlHSVRFUlJfU1NILAorCUdJVEVSUl9GSUxURVIsCiB9IGdpdF9lcnJvcl90OwogCiAvKioKQEAgLTgyLDYgKzg3LDE4IEBACiBHSVRfRVhURVJOKHZvaWQpIGdpdGVycl9jbGVhcih2b2lkKTsKIAogLyoqCisgKiBHZXQgdGhlIGxhc3QgZXJyb3IgZGF0YSBhbmQgY2xlYXIgaXQuCisgKgorICogVGhpcyBjb3BpZXMgdGhlIGxhc3QgZXJyb3IgaW50byB0aGUgZ2l2ZW4gYGdpdF9lcnJvcmAgc3RydWN0CisgKiBhbmQgcmV0dXJucyAwIGlmIHRoZSBjb3B5IHdhcyBzdWNjZXNzZnVsLCBsZWF2aW5nIHRoZSBlcnJvciAKKyAqIGNsZWFyZWQgYXMgaWYgYGdpdGVycl9jbGVhcmAgaGFkIGJlZW4gY2FsbGVkLgorICoKKyAqIElmIHRoZXJlIHdhcyBubyBleGlzdGluZyBlcnJvciBpbiB0aGUgbGlicmFyeSwgLTEgd2lsbCBiZSByZXR1cm5lZAorICogYW5kIHRoZSBjb250ZW50cyBvZiBgY3B5YCB3aWxsIGJlIGxlZnQgdW5tb2RpZmllZC4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdGVycl9kZXRhY2goZ2l0X2Vycm9yICpjcHkpOworCisvKioKICAqIFNldCB0aGUgZXJyb3IgbWVzc2FnZSBzdHJpbmcgZm9yIHRoaXMgdGhyZWFkLgogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgcHVibGljIHNvIHRoYXQgY3VzdG9tIE9EQiBiYWNrZW5kcyBhbmQgdGhlIGxpa2UgY2FuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvZmlsdGVyLmggYi9pbmNsdWRlL2dpdDIvZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2YjY3NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZ2l0Mi9maWx0ZXIuaApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisjaWZuZGVmIElOQ0xVREVfZ2l0X2ZpbHRlcl9oX18KKyNkZWZpbmUgSU5DTFVERV9naXRfZmlsdGVyX2hfXworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidHlwZXMuaCIKKyNpbmNsdWRlICJvaWQuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKworLyoqCisgKiBAZmlsZSBnaXQyL2ZpbHRlci5oCisgKiBAYnJpZWYgR2l0IGZpbHRlciBBUElzCisgKgorICogQGluZ3JvdXAgR2l0CisgKiBAeworICovCitHSVRfQkVHSU5fREVDTAorCisvKioKKyAqIEZpbHRlcnMgYXJlIGFwcGxpZWQgaW4gb25lIG9mIHR3byBkaXJlY3Rpb25zOiBzbXVkZ2luZyAtIHdoaWNoIGlzCisgKiBleHBvcnRpbmcgYSBmaWxlIGZyb20gdGhlIEdpdCBvYmplY3QgZGF0YWJhc2UgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LAorICogYW5kIGNsZWFuaW5nIC0gd2hpY2ggaXMgaW1wb3J0aW5nIGEgZmlsZSBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0bworICogdGhlIEdpdCBvYmplY3QgZGF0YWJhc2UuICBUaGVzZSB2YWx1ZXMgY29udHJvbCB3aGljaCBkaXJlY3Rpb24gb2YKKyAqIGNoYW5nZSBpcyBiZWluZyBhcHBsaWVkLgorICovCit0eXBlZGVmIGVudW0geworCUdJVF9GSUxURVJfVE9fV09SS1RSRUUgPSAwLAorCUdJVF9GSUxURVJfU01VREdFID0gR0lUX0ZJTFRFUl9UT19XT1JLVFJFRSwKKwlHSVRfRklMVEVSX1RPX09EQiA9IDEsCisJR0lUX0ZJTFRFUl9DTEVBTiA9IEdJVF9GSUxURVJfVE9fT0RCLAorfSBnaXRfZmlsdGVyX21vZGVfdDsKKworLyoqCisgKiBBIGZpbHRlciB0aGF0IGNhbiB0cmFuc2Zvcm0gZmlsZSBkYXRhCisgKgorICogVGhpcyByZXByZXNlbnRzIGEgZmlsdGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gdHJhbnNmb3JtIG9yIGV2ZW4gcmVwbGFjZQorICogZmlsZSBkYXRhLiAgTGliZ2l0MiBpbmNsdWRlcyBvbmUgYnVpbHQgaW4gZmlsdGVyIGFuZCBpdCBpcyBwb3NzaWJsZSB0bworICogd3JpdGUgeW91ciBvd24gKHNlZSBnaXQyL3N5cy9maWx0ZXIuaCBmb3IgaW5mb3JtYXRpb24gb24gdGhhdCkuCisgKgorICogVGhlIHR3byBidWlsdGluIGZpbHRlcnMgYXJlOgorICoKKyAqICogImNybGYiIHdoaWNoIHVzZXMgdGhlIGNvbXBsZXggcnVsZXMgd2l0aCB0aGUgInRleHQiLCAiZW9sIiwgYW5kCisgKiAgICJjcmxmIiBmaWxlIGF0dHJpYnV0ZXMgdG8gZGVjaWRlIGhvdyB0byBjb252ZXJ0IGJldHdlZW4gTEYgYW5kIENSTEYKKyAqICAgbGluZSBlbmRpbmdzCisgKiAqICJpZGVudCIgd2hpY2ggcmVwbGFjZXMgIiRJZCQiIGluIGEgYmxvYiB3aXRoICIkSWQ6IDxibG9iIE9JRD4kIiB1cG9uCisgKiAgIGNoZWNrb3V0IGFuZCByZXBsYWNlZCAiJElkOiA8YW55dGhpbmc+JCIgd2l0aCAiJElkJCIgb24gY2hlY2tpbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZ2l0X2ZpbHRlciBnaXRfZmlsdGVyOworCisvKioKKyAqIExpc3Qgb2YgZmlsdGVycyB0byBiZSBhcHBsaWVkCisgKgorICogVGhpcyByZXByZXNlbnRzIGEgbGlzdCBvZiBmaWx0ZXJzIHRvIGJlIGFwcGxpZWQgdG8gYSBmaWxlIC8gYmxvYi4gIFlvdQorICogY2FuIGJ1aWxkIHRoZSBsaXN0IHdpdGggb25lIGNhbGwsIGFwcGx5IGl0IHdpdGggYW5vdGhlciwgYW5kIGRpc3Bvc2UgaXQKKyAqIHdpdGggYSB0aGlyZC4gIEluIHR5cGljYWwgdXNhZ2UsIHRoZXJlIGFyZSBub3QgbWFueSBvY2Nhc2lvbnMgd2hlcmUgYQorICogZ2l0X2ZpbHRlcl9saXN0IGlzIG5lZWRlZCBkaXJlY3RseSBzaW5jZSB0aGUgbGlicmFyeSB3aWxsIGdlbmVyYWxseQorICogaGFuZGxlIGNvbnZlcnNpb25zIGZvciB5b3UsIGJ1dCBpdCBjYW4gYmUgY29udmVuaWVudCB0byBiZSBhYmxlIHRvCisgKiBidWlsZCBhbmQgYXBwbHkgdGhlIGxpc3Qgc29tZXRpbWVzLgorICovCit0eXBlZGVmIHN0cnVjdCBnaXRfZmlsdGVyX2xpc3QgZ2l0X2ZpbHRlcl9saXN0OworCisvKioKKyAqIExvYWQgdGhlIGZpbHRlciBsaXN0IGZvciBhIGdpdmVuIHBhdGguCisgKgorICogVGhpcyB3aWxsIHJldHVybiAwIChzdWNjZXNzKSBidXQgc2V0IHRoZSBvdXRwdXQgZ2l0X2ZpbHRlcl9saXN0IHRvIE5VTEwKKyAqIGlmIG5vIGZpbHRlcnMgYXJlIHJlcXVlc3RlZCBmb3IgdGhlIGdpdmVuIGZpbGUuCisgKgorICogQHBhcmFtIGZpbHRlcnMgT3V0cHV0IG5ld2x5IGNyZWF0ZWQgZ2l0X2ZpbHRlcl9saXN0IChvciBOVUxMKQorICogQHBhcmFtIHJlcG8gUmVwb3NpdG9yeSBvYmplY3QgdGhhdCBjb250YWlucyBgcGF0aGAKKyAqIEBwYXJhbSBibG9iIFRoZSBibG9iIHRvIHdoaWNoIHRoZSBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkIChpZiBrbm93bikKKyAqIEBwYXJhbSBwYXRoIFJlbGF0aXZlIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZmlsdGVyZWQKKyAqIEBwYXJhbSBtb2RlIEZpbHRlcmluZyBkaXJlY3Rpb24gKFdULT5PREIgb3IgT0RCLT5XVCkKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzICh3aGljaCBjb3VsZCBzdGlsbCByZXR1cm4gTlVMTCBpZiBubyBmaWx0ZXJzIGFyZQorICogICAgICAgICBuZWVkZWQgZm9yIHRoZSByZXF1ZXN0ZWQgZmlsZSksIDwwIG9uIGVycm9yCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfZmlsdGVyX2xpc3RfbG9hZCgKKwlnaXRfZmlsdGVyX2xpc3QgKipmaWx0ZXJzLAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWdpdF9ibG9iICpibG9iLCAvKiBjYW4gYmUgTlVMTCAqLworCWNvbnN0IGNoYXIgKnBhdGgsCisJZ2l0X2ZpbHRlcl9tb2RlX3QgbW9kZSk7CisKKy8qKgorICogQXBwbHkgZmlsdGVyIGxpc3QgdG8gYSBkYXRhIGJ1ZmZlci4KKyAqCisgKiBTZWUgYGdpdDIvYnVmZmVyLmhgIGZvciBiYWNrZ3JvdW5kIG9uIGBnaXRfYnVmYCBvYmplY3RzLgorICoKKyAqIElmIHRoZSBgaW5gIGJ1ZmZlciBob2xkcyBkYXRhIGFsbG9jYXRlZCBieSBsaWJnaXQyIChpLmUuIGBpbi0+YXNpemVgIGlzCisgKiBub3QgemVybyksIHRoZW4gaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aGVuIGFwcGx5aW5nIHRoZSBmaWx0ZXJzLiAgSWYKKyAqIG5vdCwgdGhlbiBpdCB3aWxsIGJlIGxlZnQgdW50b3VjaGVkLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIHRvIGFwcGx5IChvciBgZmlsdGVyc2AgaXMgTlVMTCksIHRoZW4gdGhlIGBvdXRgCisgKiBidWZmZXIgd2lsbCByZWZlcmVuY2UgdGhlIGBpbmAgYnVmZmVyIGRhdGEgKHdpdGggYGFzaXplYCBzZXQgdG8gemVybykKKyAqIGluc3RlYWQgb2YgYWxsb2NhdGluZyBkYXRhLiAgVGhpcyBrZWVwcyBhbGxvY2F0aW9ucyB0byBhIG1pbmltdW0sIGJ1dAorICogaXQgbWVhbnMgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBhYm91dCBmcmVlaW5nIHRoZSBgaW5gIGRhdGEgc2luY2UgYG91dGAKKyAqIG1heSBiZSBwb2ludGluZyB0byBpdCEKKyAqCisgKiBAcGFyYW0gb3V0IEJ1ZmZlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZSBmaWx0ZXJpbmcKKyAqIEBwYXJhbSBmaWx0ZXJzIEEgbG9hZGVkIGdpdF9maWx0ZXJfbGlzdCAob3IgTlVMTCkKKyAqIEBwYXJhbSBpbiBCdWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBmaWx0ZXIKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2RhdGEoCisJZ2l0X2J1ZiAqb3V0LAorCWdpdF9maWx0ZXJfbGlzdCAqZmlsdGVycywKKwlnaXRfYnVmICppbik7CisKKy8qKgorICogQXBwbHkgZmlsdGVyIGxpc3QgdG8gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBvbiBkaXNrCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfZmlsdGVyX2xpc3RfYXBwbHlfdG9fZmlsZSgKKwlnaXRfYnVmICpvdXQsCisJZ2l0X2ZpbHRlcl9saXN0ICpmaWx0ZXJzLAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKnBhdGgpOworCisvKioKKyAqIEFwcGx5IGZpbHRlciBsaXN0IHRvIHRoZSBjb250ZW50cyBvZiBhIGJsb2IKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19ibG9iKAorCWdpdF9idWYgKm91dCwKKwlnaXRfZmlsdGVyX2xpc3QgKmZpbHRlcnMsCisJZ2l0X2Jsb2IgKmJsb2IpOworCisvKioKKyAqIEZyZWUgYSBnaXRfZmlsdGVyX2xpc3QKKyAqCisgKiBAcGFyYW0gZmlsdGVycyBBIGdpdF9maWx0ZXJfbGlzdCBjcmVhdGVkIGJ5IGBnaXRfZmlsdGVyX2xpc3RfbG9hZGAKKyAqLworR0lUX0VYVEVSTih2b2lkKSBnaXRfZmlsdGVyX2xpc3RfZnJlZShnaXRfZmlsdGVyX2xpc3QgKmZpbHRlcnMpOworCisKK0dJVF9FTkRfREVDTAorCisvKiogQH0gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvaW5kZXguaCBiL2luY2x1ZGUvZ2l0Mi9pbmRleC5oCmluZGV4IDUxNjk0YWQuLmE2MGRiMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9pbmRleC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9pbmRleC5oCkBAIC0xMjAsOSArMTIwLDkgQEAKIAogLyoqIENhcGFiaWxpdGllcyBvZiBzeXN0ZW0gdGhhdCBhZmZlY3QgaW5kZXggYWN0aW9ucy4gKi8KIHR5cGVkZWYgZW51bSB7Ci0JR0lUX0lOREVYQ0FQX0lHTk9SRV9DQVNFID0gMSwKLQlHSVRfSU5ERVhDQVBfTk9fRklMRU1PREUgPSAyLAotCUdJVF9JTkRFWENBUF9OT19TWU1MSU5LUyA9IDQsCisJR0lUX0lOREVYQ0FQX0lHTk9SRV9DQVNFID0gMXUsCisJR0lUX0lOREVYQ0FQX05PX0ZJTEVNT0RFID0gMnUsCisJR0lUX0lOREVYQ0FQX05PX1NZTUxJTktTID0gNHUsCiAJR0lUX0lOREVYQ0FQX0ZST01fT1dORVIgID0gfjB1CiB9IGdpdF9pbmRleGNhcF90OwogCkBAIC0xMzgsNiArMTM4LDE0IEBACiAJR0lUX0lOREVYX0FERF9DSEVDS19QQVRIU1BFQyA9ICgxdSA8PCAyKSwKIH0gZ2l0X2luZGV4X2FkZF9vcHRpb25fdDsKIAorLyoqCisgKiBNYXRjaCBhbnkgaW5kZXggc3RhZ2UuCisgKgorICogU29tZSBpbmRleCBBUElzIHRha2UgYSBzdGFnZSB0byBtYXRjaDsgcGFzcyB0aGlzIHZhbHVlIHRvIG1hdGNoCisgKiBhbnkgZW50cnkgbWF0Y2hpbmcgdGhlIHBhdGggcmVnYXJkbGVzcyBvZiBzdGFnZS4KKyAqLworI2RlZmluZSBHSVRfSU5ERVhfU1RBR0VfQU5ZIC0xCisKIC8qKiBAbmFtZSBJbmRleCBGaWxlIEZ1bmN0aW9ucwogICoKICAqIFRoZXNlIGZ1bmN0aW9ucyB3b3JrIG9uIHRoZSBpbmRleCBmaWxlIGl0c2VsZi4KQEAgLTIxNCwxMyArMjIyLDIzIEBACiBHSVRfRVhURVJOKGludCkgZ2l0X2luZGV4X3NldF9jYXBzKGdpdF9pbmRleCAqaW5kZXgsIHVuc2lnbmVkIGludCBjYXBzKTsKIAogLyoqCi0gKiBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIGFuIGV4aXN0aW5nIGluZGV4IG9iamVjdCBpbiBtZW1vcnkKLSAqIGJ5IHJlYWRpbmcgZnJvbSB0aGUgaGFyZCBkaXNrLgorICogVXBkYXRlIHRoZSBjb250ZW50cyBvZiBhbiBleGlzdGluZyBpbmRleCBvYmplY3QgaW4gbWVtb3J5IGJ5IHJlYWRpbmcKKyAqIGZyb20gdGhlIGhhcmQgZGlzay4KKyAqCisgKiBJZiBgZm9yY2VgIGlzIHRydWUsIHRoaXMgcGVyZm9ybXMgYSAiaGFyZCIgcmVhZCB0aGF0IGRpc2NhcmRzIGluLW1lbW9yeQorICogY2hhbmdlcyBhbmQgYWx3YXlzIHJlbG9hZHMgdGhlIG9uLWRpc2sgaW5kZXggZGF0YS4gIElmIHRoZXJlIGlzIG5vCisgKiBvbi1kaXNrIHZlcnNpb24sIHRoZSBpbmRleCB3aWxsIGJlIGNsZWFyZWQuCisgKgorICogSWYgYGZvcmNlYCBpcyBmYWxzZSwgdGhpcyBkb2VzIGEgInNvZnQiIHJlYWQgdGhhdCByZWxvYWRzIHRoZSBpbmRleAorICogZGF0YSBmcm9tIGRpc2sgb25seSBpZiBpdCBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGl0IHdhcworICogbG9hZGVkLiAgUHVyZWx5IGluLW1lbW9yeSBpbmRleCBkYXRhIHdpbGwgYmUgdW50b3VjaGVkLiAgQmUgYXdhcmU6IGlmCisgKiB0aGVyZSBhcmUgY2hhbmdlcyBvbiBkaXNrLCB1bndyaXR0ZW4gaW4tbWVtb3J5IGNoYW5nZXMgYXJlIGRpc2NhcmRlZC4KICAqCiAgKiBAcGFyYW0gaW5kZXggYW4gZXhpc3RpbmcgaW5kZXggb2JqZWN0CisgKiBAcGFyYW0gZm9yY2UgaWYgdHJ1ZSwgYWx3YXlzIHJlbG9hZCwgdnMuIG9ubHkgcmVhZCBpZiBmaWxlIGhhcyBjaGFuZ2VkCiAgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2luZGV4X3JlYWQoZ2l0X2luZGV4ICppbmRleCk7CitHSVRfRVhURVJOKGludCkgZ2l0X2luZGV4X3JlYWQoZ2l0X2luZGV4ICppbmRleCwgaW50IGZvcmNlKTsKIAogLyoqCiAgKiBXcml0ZSBhbiBleGlzdGluZyBpbmRleCBvYmplY3QgZnJvbSBtZW1vcnkgYmFjayB0byBkaXNrCkBAIC0yMzIsNiArMjUwLDE0IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X2luZGV4X3dyaXRlKGdpdF9pbmRleCAqaW5kZXgpOwogCiAvKioKKyAqIEdldCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbmRleCBmaWxlIG9uIGRpc2suCisgKgorICogQHBhcmFtIGluZGV4IGFuIGV4aXN0aW5nIGluZGV4IG9iamVjdAorICogQHJldHVybiBwYXRoIHRvIGluZGV4IGZpbGUgb3IgTlVMTCBmb3IgaW4tbWVtb3J5IGluZGV4CisgKi8KK0dJVF9FWFRFUk4oY29uc3QgY2hhciAqKSBnaXRfaW5kZXhfcGF0aChnaXRfaW5kZXggKmluZGV4KTsKKworLyoqCiAgKiBSZWFkIGEgdHJlZSBpbnRvIHRoZSBpbmRleCBmaWxlIHdpdGggc3RhdHMKICAqCiAgKiBUaGUgY3VycmVudCBpbmRleCBjb250ZW50cyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBzcGVjaWZpZWQgdHJlZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9pbmRleGVyLmggYi9pbmNsdWRlL2dpdDIvaW5kZXhlci5oCmluZGV4IDRkYjA3MmMuLmU0YzAzYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9pbmRleGVyLmgKKysrIGIvaW5jbHVkZS9naXQyL2luZGV4ZXIuaApAQCAtMTMsMTkgKzEzLDI1IEBACiAKIEdJVF9CRUdJTl9ERUNMCiAKLXR5cGVkZWYgc3RydWN0IGdpdF9pbmRleGVyX3N0cmVhbSBnaXRfaW5kZXhlcl9zdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBnaXRfaW5kZXhlciBnaXRfaW5kZXhlcjsKIAogLyoqCi0gKiBDcmVhdGUgYSBuZXcgc3RyZWFtaW5nIGluZGV4ZXIgaW5zdGFuY2UKKyAqIENyZWF0ZSBhIG5ldyBpbmRleGVyIGluc3RhbmNlCiAgKgogICogQHBhcmFtIG91dCB3aGVyZSB0byBzdG9yZSB0aGUgaW5kZXhlciBpbnN0YW5jZQogICogQHBhcmFtIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgcGFja2ZpbGUgc2hvdWxkIGJlIHN0b3JlZAorICogQHBhcmFtIG1vZGUgcGVybWlzc2lvbnMgdG8gdXNlIGNyZWF0aW5nIHBhY2tmaWxlIG9yIDAgZm9yIGRlZmF1bHRzCisgKiBAcGFyYW0gb2RiIG9iamVjdCBkYXRhYmFzZSBmcm9tIHdoaWNoIHRvIHJlYWQgYmFzZSBvYmplY3RzIHdoZW4KKyAqIGZpeGluZyB0aGluIHBhY2tzLiBQYXNzIE5VTEwgaWYgbm8gdGhpbiBwYWNrIGlzIGV4cGVjdGVkIChhbiBlcnJvcgorICogd2lsbCBiZSByZXR1cm5lZCBpZiB0aGVyZSBhcmUgYmFzZXMgbWlzc2luZykKICAqIEBwYXJhbSBwcm9ncmVzc19jYiBmdW5jdGlvbiB0byBjYWxsIHdpdGggcHJvZ3Jlc3MgaW5mb3JtYXRpb24KICAqIEBwYXJhbSBwcm9ncmVzc19jYl9wYXlsb2FkIHBheWxvYWQgZm9yIHRoZSBwcm9ncmVzcyBjYWxsYmFjawogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2luZGV4ZXJfc3RyZWFtX25ldygKLQkJZ2l0X2luZGV4ZXJfc3RyZWFtICoqb3V0LAorR0lUX0VYVEVSTihpbnQpIGdpdF9pbmRleGVyX25ldygKKwkJZ2l0X2luZGV4ZXIgKipvdXQsCiAJCWNvbnN0IGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGludCBtb2RlLAorCQlnaXRfb2RiICpvZGIsCiAJCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBwcm9ncmVzc19jYiwKIAkJdm9pZCAqcHJvZ3Jlc3NfY2JfcGF5bG9hZCk7CiAKQEAgLTM3LDcgKzQzLDcgQEAKICAqIEBwYXJhbSBzaXplIHRoZSBzaXplIG9mIHRoZSBkYXRhIGluIGJ5dGVzCiAgKiBAcGFyYW0gc3RhdHMgc3RhdCBzdG9yYWdlCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfaW5kZXhlcl9zdHJlYW1fYWRkKGdpdF9pbmRleGVyX3N0cmVhbSAqaWR4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cyk7CitHSVRfRVhURVJOKGludCkgZ2l0X2luZGV4ZXJfYXBwZW5kKGdpdF9pbmRleGVyICppZHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKTsKIAogLyoqCiAgKiBGaW5hbGl6ZSB0aGUgcGFjayBhbmQgaW5kZXgKQEAgLTQ2LDcgKzUyLDcgQEAKICAqCiAgKiBAcGFyYW0gaWR4IHRoZSBpbmRleGVyCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfaW5kZXhlcl9zdHJlYW1fZmluYWxpemUoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgsIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpOworR0lUX0VYVEVSTihpbnQpIGdpdF9pbmRleGVyX2NvbW1pdChnaXRfaW5kZXhlciAqaWR4LCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKTsKIAogLyoqCiAgKiBHZXQgdGhlIHBhY2tmaWxlJ3MgaGFzaApAQCAtNTYsMTQgKzYyLDE0IEBACiAgKgogICogQHBhcmFtIGlkeCB0aGUgaW5kZXhlciBpbnN0YW5jZQogICovCi1HSVRfRVhURVJOKGNvbnN0IGdpdF9vaWQgKikgZ2l0X2luZGV4ZXJfc3RyZWFtX2hhc2goY29uc3QgZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgpOworR0lUX0VYVEVSTihjb25zdCBnaXRfb2lkICopIGdpdF9pbmRleGVyX2hhc2goY29uc3QgZ2l0X2luZGV4ZXIgKmlkeCk7CiAKIC8qKgogICogRnJlZSB0aGUgaW5kZXhlciBhbmQgaXRzIHJlc291cmNlcwogICoKICAqIEBwYXJhbSBpZHggdGhlIGluZGV4ZXIgdG8gZnJlZQogICovCi1HSVRfRVhURVJOKHZvaWQpIGdpdF9pbmRleGVyX3N0cmVhbV9mcmVlKGdpdF9pbmRleGVyX3N0cmVhbSAqaWR4KTsKK0dJVF9FWFRFUk4odm9pZCkgZ2l0X2luZGV4ZXJfZnJlZShnaXRfaW5kZXhlciAqaWR4KTsKIAogR0lUX0VORF9ERUNMCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9tZXJnZS5oIGIvaW5jbHVkZS9naXQyL21lcmdlLmgKaW5kZXggY2VmNmY3Ny4uMzM1NGZiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL21lcmdlLmgKKysrIGIvaW5jbHVkZS9naXQyL21lcmdlLmgKQEAgLTcsMTEgKzcsMTEgQEAKICNpZm5kZWYgSU5DTFVERV9naXRfbWVyZ2VfaF9fCiAjZGVmaW5lIElOQ0xVREVfZ2l0X21lcmdlX2hfXwogCi0jaW5jbHVkZSAiZ2l0Mi9jb21tb24uaCIKLSNpbmNsdWRlICJnaXQyL3R5cGVzLmgiCi0jaW5jbHVkZSAiZ2l0Mi9vaWQuaCIKLSNpbmNsdWRlICJnaXQyL2NoZWNrb3V0LmgiCi0jaW5jbHVkZSAiZ2l0Mi9pbmRleC5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAib2lkLmgiCisjaW5jbHVkZSAiY2hlY2tvdXQuaCIKKyNpbmNsdWRlICJpbmRleC5oIgogCiAvKioKICAqIEBmaWxlIGdpdDIvbWVyZ2UuaApAQCAtNjYsNiArNjYsMjkgQEAKIAogCiAvKioKKyAqIE9wdGlvbiBmbGFncyBmb3IgYGdpdF9tZXJnZWAuCisgKgorICogR0lUX01FUkdFX05PX0ZBU1RGT1JXQVJEIC0gRG8gbm90IGZhc3QtZm9yd2FyZC4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlHSVRfTUVSR0VfTk9fRkFTVEZPUldBUkQgICAgICA9IDEsCisJR0lUX01FUkdFX0ZBU1RGT1JXQVJEX09OTFkgICAgPSAyLAorfSBnaXRfbWVyZ2VfZmxhZ3NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludCB2ZXJzaW9uOworCisJZ2l0X21lcmdlX2ZsYWdzX3QgbWVyZ2VfZmxhZ3M7CisJZ2l0X21lcmdlX3RyZWVfb3B0cyBtZXJnZV90cmVlX29wdHM7CisKKwlnaXRfY2hlY2tvdXRfb3B0cyBjaGVja291dF9vcHRzOworfSBnaXRfbWVyZ2Vfb3B0czsKKworI2RlZmluZSBHSVRfTUVSR0VfT1BUU19WRVJTSU9OIDEKKyNkZWZpbmUgR0lUX01FUkdFX09QVFNfSU5JVCB7R0lUX01FUkdFX09QVFNfVkVSU0lPTiwgMCwgR0lUX01FUkdFX1RSRUVfT1BUU19JTklULCBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUfQorCisKKy8qKgogICogRmluZCBhIG1lcmdlIGJhc2UgYmV0d2VlbiB0d28gY29tbWl0cwogICoKICAqIEBwYXJhbSBvdXQgdGhlIE9JRCBvZiBhIG1lcmdlIGJhc2UgYmV0d2VlbiAnb25lJyBhbmQgJ3R3bycKQEAgLTg1LDE1ICsxMDgsMTUgQEAKICAqCiAgKiBAcGFyYW0gb3V0IHRoZSBPSUQgb2YgYSBtZXJnZSBiYXNlIGNvbnNpZGVyaW5nIGFsbCB0aGUgY29tbWl0cwogICogQHBhcmFtIHJlcG8gdGhlIHJlcG9zaXRvcnkgd2hlcmUgdGhlIGNvbW1pdHMgZXhpc3QKLSAqIEBwYXJhbSBpbnB1dF9hcnJheSBvaWRzIG9mIHRoZSBjb21taXRzCiAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgcHJvdmlkZWQgYGlucHV0X2FycmF5YAorICogQHBhcmFtIGlucHV0X2FycmF5IG9pZHMgb2YgdGhlIGNvbW1pdHMKICAqIEByZXR1cm4gWmVybyBvbiBzdWNjZXNzOyBHSVRfRU5PVEZPVU5EIG9yIC0xIG9uIGZhaWx1cmUuCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfbWVyZ2VfYmFzZV9tYW55KAogCWdpdF9vaWQgKm91dCwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQljb25zdCBnaXRfb2lkIGlucHV0X2FycmF5W10sCi0Jc2l6ZV90IGxlbmd0aCk7CisJc2l6ZV90IGxlbmd0aCwKKwljb25zdCBnaXRfb2lkIGlucHV0X2FycmF5W10pOwogCiAvKioKICAqIENyZWF0ZXMgYSBgZ2l0X21lcmdlX2hlYWRgIGZyb20gdGhlIGdpdmVuIHJlZmVyZW5jZQpAQCAtMTY4LDYgKzE5MSw0MyBAQAogCWNvbnN0IGdpdF90cmVlICp0aGVpcl90cmVlLAogCWNvbnN0IGdpdF9tZXJnZV90cmVlX29wdHMgKm9wdHMpOwogCisvKioKKyAqIE1lcmdlcyB0aGUgZ2l2ZW4gY29tbWl0cyBpbnRvIEhFQUQsIHByb2R1Y2luZyBhIG5ldyBjb21taXQuCisgKgorICogQHBhcmFtIG91dCB0aGUgcmVzdWx0cyBvZiB0aGUgbWVyZ2UKKyAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIG1lcmdlCisgKiBAcGFyYW0gbWVyZ2VfaGVhZHMgdGhlIGhlYWRzIHRvIG1lcmdlIGludG8KKyAqIEBwYXJhbSBtZXJnZV9oZWFkc19sZW4gdGhlIG51bWJlciBvZiBoZWFkcyB0byBtZXJnZQorICogQHBhcmFtIGZsYWdzIG1lcmdlIGZsYWdzCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfbWVyZ2UoCisJZ2l0X21lcmdlX3Jlc3VsdCAqKm91dCwKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqKnRoZWlyX2hlYWRzLAorCXNpemVfdCB0aGVpcl9oZWFkc19sZW4sCisJY29uc3QgZ2l0X21lcmdlX29wdHMgKm9wdHMpOworCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIG1lcmdlIGlzIHVwLXRvLWRhdGUgKHdlIHdlcmUgYXNrZWQgdG8gbWVyZ2UgdGhlIHRhcmdldAorICogaW50byBpdHNlbGYuKQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X21lcmdlX3Jlc3VsdF9pc191cHRvZGF0ZShnaXRfbWVyZ2VfcmVzdWx0ICptZXJnZV9yZXN1bHQpOworCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIG1lcmdlIGlzIGVsaWdpYmxlIGZvciBmYXN0Zm9yd2FyZAorICovCitHSVRfRVhURVJOKGludCkgZ2l0X21lcmdlX3Jlc3VsdF9pc19mYXN0Zm9yd2FyZChnaXRfbWVyZ2VfcmVzdWx0ICptZXJnZV9yZXN1bHQpOworCisvKioKKyAqIEdldHMgdGhlIGZhc3QtZm9yd2FyZCBPSUQgaWYgdGhlIG1lcmdlIHdhcyBhIGZhc3Rmb3J3YXJkLgorICoKKyAqIEBwYXJhbSBvdXQgdGhlIE9JRCBvZiB0aGUgZmFzdC1mb3J3YXJkCisgKiBAcGFyYW0gbWVyZ2VfcmVzdWx0IHRoZSByZXN1bHRzIG9mIHRoZSBtZXJnZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X21lcmdlX3Jlc3VsdF9mYXN0Zm9yd2FyZF9vaWQoZ2l0X29pZCAqb3V0LCBnaXRfbWVyZ2VfcmVzdWx0ICptZXJnZV9yZXN1bHQpOworCitHSVRfRVhURVJOKHZvaWQpIGdpdF9tZXJnZV9yZXN1bHRfZnJlZShnaXRfbWVyZ2VfcmVzdWx0ICptZXJnZV9yZXN1bHQpOworCiAvKiogQH0gKi8KIEdJVF9FTkRfREVDTAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvbm90ZXMuaCBiL2luY2x1ZGUvZ2l0Mi9ub3Rlcy5oCmluZGV4IDczODI5MDQuLjc2MzYxNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9ub3Rlcy5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9ub3Rlcy5oCkBAIC05OSw3ICs5OSw3IEBACiAvKioKICAqIEdldCB0aGUgbm90ZSBtZXNzYWdlCiAgKgotICogQHBhcmFtIG5vdGUKKyAqIEBwYXJhbSBub3RlIHRoZSBub3RlCiAgKiBAcmV0dXJuIHRoZSBub3RlIG1lc3NhZ2UKICAqLwogR0lUX0VYVEVSTihjb25zdCBjaGFyICopIGdpdF9ub3RlX21lc3NhZ2UoY29uc3QgZ2l0X25vdGUgKm5vdGUpOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKioKICAqIEdldCB0aGUgbm90ZSBvYmplY3QgT0lECiAgKgotICogQHBhcmFtIG5vdGUKKyAqIEBwYXJhbSBub3RlIHRoZSBub3RlCiAgKiBAcmV0dXJuIHRoZSBub3RlIG9iamVjdCBPSUQKICAqLwogR0lUX0VYVEVSTihjb25zdCBnaXRfb2lkICopIGdpdF9ub3RlX29pZChjb25zdCBnaXRfbm90ZSAqbm90ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvb2JqZWN0LmggYi9pbmNsdWRlL2dpdDIvb2JqZWN0LmgKaW5kZXggYjkxYjA0ZC4uYzQwNjMxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL29iamVjdC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9vYmplY3QuaApAQCAtMzYsNyArMzYsNyBAQAogICogQHBhcmFtIHJlcG8gdGhlIHJlcG9zaXRvcnkgdG8gbG9vayB1cCB0aGUgb2JqZWN0CiAgKiBAcGFyYW0gaWQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgb2JqZWN0CiAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0Ci0gKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QKKyAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfb2JqZWN0X2xvb2t1cCgKIAkJZ2l0X29iamVjdCAqKm9iamVjdCwKQEAgLTc4LDYgKzc4LDIzIEBACiAJCXNpemVfdCBsZW4sCiAJCWdpdF9vdHlwZSB0eXBlKTsKIAorCisvKioKKyAqIExvb2t1cCBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgdHJlZSBlbnRyeS4KKyAqCisgKiBAcGFyYW0gb3V0IGJ1ZmZlciB0aGF0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0ICh3aGljaCBtdXN0IGJlIGZyZWVkCisgKiAgICAgICAgICAgIGJ5IHRoZSBjYWxsZXIpCisgKiBAcGFyYW0gdHJlZWlzaCByb290IG9iamVjdCB0aGF0IGNhbiBiZSBwZWVsZWQgdG8gYSB0cmVlCisgKiBAcGFyYW0gcGF0aCByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2JqZWN0IHRvIHRoZSBkZXNpcmVkIG9iamVjdAorICogQHBhcmFtIHR5cGUgdHlwZSBvZiBvYmplY3QgZGVzaXJlZAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9vYmplY3RfbG9va3VwX2J5cGF0aCgKKwkJZ2l0X29iamVjdCAqKm91dCwKKwkJY29uc3QgZ2l0X29iamVjdCAqdHJlZWlzaCwKKwkJY29uc3QgY2hhciAqcGF0aCwKKwkJZ2l0X290eXBlIHR5cGUpOworCiAvKioKICAqIEdldCB0aGUgaWQgKFNIQTEpIG9mIGEgcmVwb3NpdG9yeSBvYmplY3QKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvb2RiLmggYi9pbmNsdWRlL2dpdDIvb2RiLmgKaW5kZXggYjY0NDM2Yy4uYWQ1NjM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL29kYi5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9vZGIuaApAQCAtMTIwLDcgKzEyMCw3IEBACiAgKiBAcGFyYW0gZGIgZGF0YWJhc2UgdG8gc2VhcmNoIGZvciB0aGUgb2JqZWN0IGluLgogICogQHBhcmFtIHNob3J0X2lkIGEgcHJlZml4IG9mIHRoZSBpZCBvZiB0aGUgb2JqZWN0IHRvIHJlYWQuCiAgKiBAcGFyYW0gbGVuIHRoZSBsZW5ndGggb2YgdGhlIHByZWZpeAotICogQHJldHVybiAKKyAqIEByZXR1cm4KICAqIC0gMCBpZiB0aGUgb2JqZWN0IHdhcyByZWFkOwogICogLSBHSVRfRU5PVEZPVU5EIGlmIHRoZSBvYmplY3QgaXMgbm90IGluIHRoZSBkYXRhYmFzZS4KICAqIC0gR0lUX0VBTUJJR1VPVVMgaWYgdGhlIHByZWZpeCBpcyBhbWJpZ3VvdXMgKHNldmVyYWwgb2JqZWN0cyBtYXRjaCB0aGUgcHJlZml4KQpAQCAtMjE5LDE4ICsyMTksMTIgQEAKICAqIFRoZSB0eXBlIGFuZCBmaW5hbCBsZW5ndGggb2YgdGhlIG9iamVjdCBtdXN0IGJlIHNwZWNpZmllZAogICogd2hlbiBvcGVuaW5nIHRoZSBzdHJlYW0uCiAgKgotICogVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIGJlIG9mIHR5cGUgYEdJVF9TVFJFQU1fV1JPTkxZYCBhbmQKLSAqIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHdpbGwgYmUgb2YgdHlwZSBgR0lUX1NUUkVBTV9XUk9OTFlgLCBhbmQgaXQKKyAqIHdvbid0IGJlIGVmZmVjdGl2ZSB1bnRpbCBgZ2l0X29kYl9zdHJlYW1fZmluYWxpemVfd3JpdGVgIGlzIGNhbGxlZAorICogYW5kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvcgogICoKLSAqCQktIHN0cmVhbS0+d3JpdGU6IHdyaXRlIGBuYCBieXRlcyBpbnRvIHRoZSBzdHJlYW0KLSAqCQktIHN0cmVhbS0+ZmluYWxpemVfd3JpdGU6IGNsb3NlIHRoZSBzdHJlYW0gYW5kIHN0b3JlIHRoZSBvYmplY3QgaW4KLSAqCQkJdGhlIG9kYgotICoJCS0gc3RyZWFtLT5mcmVlOiBmcmVlIHRoZSBzdHJlYW0KLSAqCi0gKiBUaGUgc3RyZWFtaW5nIHdyaXRlIHdvbid0IGJlIGVmZmVjdGl2ZSB1bnRpbCBgc3RyZWFtLT5maW5hbGl6ZV93cml0ZWAKLSAqIGlzIGNhbGxlZCBhbmQgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yCi0gKgotICogVGhlIHN0cmVhbSBtdXN0IGFsd2F5cyBiZSBmcmVlJ2Qgb3Igd2lsbCBsZWFrIG1lbW9yeS4KKyAqIFRoZSBzdHJlYW0gbXVzdCBhbHdheXMgYmUgZnJlZWQgd2hlbiBkb25lIHdpdGggYGdpdF9vZGJfc3RyZWFtX2ZyZWVgIG9yCisgKiB3aWxsIGxlYWsgbWVtb3J5LgogICoKICAqIEBzZWUgZ2l0X29kYl9zdHJlYW0KICAqCkBAIC0yNDMsNiArMjM3LDQ4IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X29kYl9vcGVuX3dzdHJlYW0oZ2l0X29kYl9zdHJlYW0gKipvdXQsIGdpdF9vZGIgKmRiLCBzaXplX3Qgc2l6ZSwgZ2l0X290eXBlIHR5cGUpOwogCiAvKioKKyAqIFdyaXRlIHRvIGFuIG9kYiBzdHJlYW0KKyAqCisgKiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgaWYgdGhlIHRvdGFsIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBleGNlZWRzIHRoZQorICogc2l6ZSBkZWNsYXJlZCB3aXRoIGBnaXRfb2RiX29wZW5fd3N0cmVhbSgpYAorICoKKyAqIEBwYXJhbSBzdHJlYW0gdGhlIHN0cmVhbQorICogQHBhcmFtIGJ1ZmZlciB0aGUgZGF0YSB0byB3cml0ZQorICogQHBhcmFtIGxlbiB0aGUgYnVmZmVyJ3MgbGVuZ3RoCisgKiBAcmV0dXJuIDAgaWYgdGhlIHdyaXRlIHN1Y2NlZWRlZDsgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9vZGJfc3RyZWFtX3dyaXRlKGdpdF9vZGJfc3RyZWFtICpzdHJlYW0sIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisKKy8qKgorICogRmluaXNoIHdyaXRpbmcgdG8gYW4gb2RiIHN0cmVhbQorICoKKyAqIFRoZSBvYmplY3Qgd2lsbCB0YWtlIGl0cyBmaW5hbCBuYW1lIGFuZCB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUKKyAqIG9kYi4KKyAqCisgKiBUaGlzIG1ldGhvZCB3aWxsIGZhaWwgaWYgdGhlIHRvdGFsIG51bWJlciBvZiByZWNlaXZlZCBieXRlcworICogZGlmZmVycyBmcm9tIHRoZSBzaXplIGRlY2xhcmVkIHdpdGggYGdpdF9vZGJfb3Blbl93c3RyZWFtKClgCisgKgorICogQHBhcmFtIG91dCBwb2ludGVyIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgb2JqZWN0J3MgaWQKKyAqIEBwYXJhbSBzdHJlYW0gdGhlIHN0cmVhbQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3M7IGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfb2RiX3N0cmVhbV9maW5hbGl6ZV93cml0ZShnaXRfb2lkICpvdXQsIGdpdF9vZGJfc3RyZWFtICpzdHJlYW0pOworCisvKioKKyAqIFJlYWQgZnJvbSBhbiBvZGIgc3RyZWFtCisgKgorICogTW9zdCBiYWNrZW5kcyBkb24ndCBpbXBsZW1lbnQgc3RyZWFtaW5nIHJlYWRzCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfb2RiX3N0cmVhbV9yZWFkKGdpdF9vZGJfc3RyZWFtICpzdHJlYW0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisKKy8qKgorICogRnJlZSBhbiBvZGIgc3RyZWFtCisgKgorICogQHBhcmFtIHN0cmVhbSB0aGUgc3RyZWFtIHRvIGZyZWUKKyAqLworR0lUX0VYVEVSTih2b2lkKSBnaXRfb2RiX3N0cmVhbV9mcmVlKGdpdF9vZGJfc3RyZWFtICpzdHJlYW0pOworCisvKioKICAqIE9wZW4gYSBzdHJlYW0gdG8gcmVhZCBhbiBvYmplY3QgZnJvbSB0aGUgT0RCCiAgKgogICogTm90ZSB0aGF0IG1vc3QgYmFja2VuZHMgZG8gKm5vdCogc3VwcG9ydCBzdHJlYW1pbmcgcmVhZHMKQEAgLTMyMiw2ICszNTgsMjAgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfb2RiX2hhc2hmaWxlKGdpdF9vaWQgKm91dCwgY29uc3QgY2hhciAqcGF0aCwgZ2l0X290eXBlIHR5cGUpOwogCiAvKioKKyAqIENyZWF0ZSBhIGNvcHkgb2YgYW4gb2RiX29iamVjdAorICoKKyAqIFRoZSByZXR1cm5lZCBjb3B5IG11c3QgYmUgbWFudWFsbHkgZnJlZWQgd2l0aCBgZ2l0X29kYl9vYmplY3RfZnJlZWAuCisgKiBOb3RlIHRoYXQgYmVjYXVzZSBvZiBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHRoZSByZXR1cm5lZCBjb3B5IHdpbGwgYmUKKyAqIHRoZSBzYW1lIHBvaW50ZXIgYXMgYHNvdXJjZWA6IHRoZSBvYmplY3QgaXMgaW50ZXJuYWxseSByZWZjb3VudGVkLCBzbyB0aGUKKyAqIGNvcHkgc3RpbGwgbmVlZHMgdG8gYmUgZnJlZWQgdHdpY2UuCisgKgorICogQHBhcmFtIGRlc3QgcG9pbnRlciB3aGVyZSB0byBzdG9yZSB0aGUgY29weQorICogQHBhcmFtIHNvdXJjZSBvYmplY3QgdG8gY29weQorICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9vZGJfb2JqZWN0X2R1cChnaXRfb2RiX29iamVjdCAqKmRlc3QsIGdpdF9vZGJfb2JqZWN0ICpzb3VyY2UpOworCisvKioKICAqIENsb3NlIGFuIE9EQiBvYmplY3QKICAqCiAgKiBUaGlzIG1ldGhvZCBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgb25jZSBhIGBnaXRfb2RiX29iamVjdGAgaXMgbm8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9vZGJfYmFja2VuZC5oIGIvaW5jbHVkZS9naXQyL29kYl9iYWNrZW5kLmgKaW5kZXggYWYxZTNlNS4uNGQ3NzJjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL29kYl9iYWNrZW5kLmgKKysrIGIvaW5jbHVkZS9naXQyL29kYl9iYWNrZW5kLmgKQEAgLTcsOCArNyw4IEBACiAjaWZuZGVmIElOQ0xVREVfZ2l0X29kYl9iYWNrZW5kX2hfXwogI2RlZmluZSBJTkNMVURFX2dpdF9vZGJfYmFja2VuZF9oX18KIAotI2luY2x1ZGUgImdpdDIvY29tbW9uLmgiCi0jaW5jbHVkZSAiZ2l0Mi90eXBlcy5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInR5cGVzLmgiCiAKIC8qKgogICogQGZpbGUgZ2l0Mi9iYWNrZW5kLmgKQEAgLTQwLDEwICs0MCwxOCBAQAogICogQHBhcmFtIG9iamVjdHNfZGlyIHRoZSBHaXQgcmVwb3NpdG9yeSdzIG9iamVjdHMgZGlyZWN0b3J5CiAgKiBAcGFyYW0gY29tcHJlc3Npb25fbGV2ZWwgemxpYiBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UKICAqIEBwYXJhbSBkb19mc3luYyB3aGV0aGVyIHRvIGRvIGFuIGZzeW5jKCkgYWZ0ZXIgd3JpdGluZyAoY3VycmVudGx5IGlnbm9yZWQpCisgKiBAcGFyYW0gZGlyX21vZGUgcGVybWlzc2lvbnMgdG8gdXNlIGNyZWF0aW5nIGEgZGlyZWN0b3J5IG9yIDAgZm9yIGRlZmF1bHRzCisgKiBAcGFyYW0gZmlsZV9tb2RlIHBlcm1pc3Npb25zIHRvIHVzZSBjcmVhdGluZyBhIGZpbGUgb3IgMCBmb3IgZGVmYXVsdHMKICAqCiAgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X29kYl9iYWNrZW5kX2xvb3NlKGdpdF9vZGJfYmFja2VuZCAqKm91dCwgY29uc3QgY2hhciAqb2JqZWN0c19kaXIsIGludCBjb21wcmVzc2lvbl9sZXZlbCwgaW50IGRvX2ZzeW5jKTsKK0dJVF9FWFRFUk4oaW50KSBnaXRfb2RiX2JhY2tlbmRfbG9vc2UoCisJZ2l0X29kYl9iYWNrZW5kICoqb3V0LAorCWNvbnN0IGNoYXIgKm9iamVjdHNfZGlyLAorCWludCBjb21wcmVzc2lvbl9sZXZlbCwKKwlpbnQgZG9fZnN5bmMsCisJdW5zaWduZWQgaW50IGRpcl9tb2RlLAorCXVuc2lnbmVkIGludCBmaWxlX21vZGUpOwogCiAvKioKICAqIENyZWF0ZSBhIGJhY2tlbmQgb3V0IG9mIGEgc2luZ2xlIHBhY2tmaWxlCkBAIC02NSwxNCArNzMsNTAgQEAKIAlHSVRfU1RSRUFNX1JXID0gKEdJVF9TVFJFQU1fUkRPTkxZIHwgR0lUX1NUUkVBTV9XUk9OTFkpLAogfSBnaXRfb2RiX3N0cmVhbV90OwogCi0vKiogQSBzdHJlYW0gdG8gcmVhZC93cml0ZSBmcm9tIGEgYmFja2VuZCAqLworLyoqCisgKiBBIHN0cmVhbSB0byByZWFkL3dyaXRlIGZyb20gYSBiYWNrZW5kLgorICoKKyAqIFRoaXMgcmVwcmVzZW50cyBhIHN0cmVhbSBvZiBkYXRhIGJlaW5nIHdyaXR0ZW4gdG8gb3IgcmVhZCBmcm9tIGEKKyAqIGJhY2tlbmQuIFdoZW4gd3JpdGluZywgdGhlIGZyb250ZW5kIGZ1bmN0aW9ucyB0YWtlIGNhcmUgb2YKKyAqIGNhbGN1bGF0aW5nIHRoZSBvYmplY3QncyBpZCBhbmQgYWxsIGBmaW5hbGl6ZV93cml0ZWAgbmVlZHMgdG8gZG8gaXMKKyAqIHN0b3JlIHRoZSBvYmplY3Qgd2l0aCB0aGUgaWQgaXQgaXMgcGFzc2VkLgorICovCiBzdHJ1Y3QgZ2l0X29kYl9zdHJlYW0gewogCWdpdF9vZGJfYmFja2VuZCAqYmFja2VuZDsKIAl1bnNpZ25lZCBpbnQgbW9kZTsKKwl2b2lkICpoYXNoX2N0eDsKIAorCXNpemVfdCBkZWNsYXJlZF9zaXplOworCXNpemVfdCByZWNlaXZlZF9ieXRlczsKKworCS8qKgorCSAqIFdyaXRlIGF0IG1vc3QgYGxlbmAgYnl0ZXMgaW50byBgYnVmZmVyYCBhbmQgYWR2YW5jZSB0aGUgc3RyZWFtLgorCSAqLwogCWludCAoKnJlYWQpKGdpdF9vZGJfc3RyZWFtICpzdHJlYW0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbik7CisKKwkvKioKKwkgKiBXcml0ZSBgbGVuYCBieXRlcyBmcm9tIGBidWZmZXJgIGludG8gdGhlIHN0cmVhbS4KKwkgKi8KIAlpbnQgKCp3cml0ZSkoZ2l0X29kYl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKTsKLQlpbnQgKCpmaW5hbGl6ZV93cml0ZSkoZ2l0X29pZCAqb2lkX3AsIGdpdF9vZGJfc3RyZWFtICpzdHJlYW0pOworCisJLyoqCisJICogU3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJlYW0gYXMgYW4gb2JqZWN0IHdpdGggdGhlIGlkCisJICogc3BlY2lmaWVkIGluIGBvaWRgLgorCSAqCisJICogVGhpcyBtZXRob2QgbWlnaHQgbm90IGJlIGludm9rZWQgaWY6CisJICogLSBhbiBlcnJvciBvY2N1cnMgZWFybGllciB3aXRoIHRoZSBgd3JpdGVgIGNhbGxiYWNrLAorCSAqIC0gdGhlIG9iamVjdCByZWZlcnJlZCB0byBieSBgb2lkYCBhbHJlYWR5IGV4aXN0cyBpbiBhbnkgYmFja2VuZCwgb3IKKwkgKiAtIHRoZSBmaW5hbCBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMgZGlmZmVycyBmcm9tIHRoZSBzaXplIGRlY2xhcmVkCisJICogICB3aXRoIGBnaXRfb2RiX29wZW5fd3N0cmVhbSgpYAorCSAqLworCWludCAoKmZpbmFsaXplX3dyaXRlKShnaXRfb2RiX3N0cmVhbSAqc3RyZWFtLCBjb25zdCBnaXRfb2lkICpvaWQpOworCisJLyoqCisJICogRnJlZSB0aGUgc3RyZWFtJ3MgbWVtb3J5LgorCSAqCisJICogVGhpcyBtZXRob2QgbWlnaHQgYmUgY2FsbGVkIHdpdGhvdXQgYSBjYWxsIHRvIGBmaW5hbGl6ZV93cml0ZWAgaWYKKwkgKiBhbiBlcnJvciBvY2N1cnMgb3IgaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIE9EQi4KKwkgKi8KIAl2b2lkICgqZnJlZSkoZ2l0X29kYl9zdHJlYW0gKnN0cmVhbSk7CiB9OwogCkBAIC04MCw3ICsxMjQsNyBAQAogc3RydWN0IGdpdF9vZGJfd3JpdGVwYWNrIHsKIAlnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQ7CiAKLQlpbnQgKCphZGQpKGdpdF9vZGJfd3JpdGVwYWNrICp3cml0ZXBhY2ssIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKTsKKwlpbnQgKCphcHBlbmQpKGdpdF9vZGJfd3JpdGVwYWNrICp3cml0ZXBhY2ssIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKTsKIAlpbnQgKCpjb21taXQpKGdpdF9vZGJfd3JpdGVwYWNrICp3cml0ZXBhY2ssIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpOwogCXZvaWQgKCpmcmVlKShnaXRfb2RiX3dyaXRlcGFjayAqd3JpdGVwYWNrKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvb2lkLmggYi9pbmNsdWRlL2dpdDIvb2lkLmgKaW5kZXggNjYyMzM4ZC4uMzg0YjY1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL29pZC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9vaWQuaApAQCAtMTg4LDggKzE4OCw3IEBACiAgKgogICogQHBhcmFtIGlkIG9pZCBzdHJ1Y3R1cmUuCiAgKiBAcGFyYW0gc3RyIGlucHV0IGhleCBzdHJpbmcgb2YgYW4gb2JqZWN0IGlkLgotICogQHJldHVybiBHSVRfRU5PVE9JRCBpZiBzdHIgaXMgbm90IGEgdmFsaWQgaGV4IHN0cmluZywKLSAqIDAgaW4gY2FzZSBvZiBhIG1hdGNoLCBHSVRfRVJST1Igb3RoZXJ3aXNlLgorICogQHJldHVybiAwIGluIGNhc2Ugb2YgYSBtYXRjaCwgLTEgb3RoZXJ3aXNlLgogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X29pZF9zdHJlcShjb25zdCBnaXRfb2lkICppZCwgY29uc3QgY2hhciAqc3RyKTsKIApAQCAtMjQxLDEzICsyNDAsMTMgQEAKICAqIG9yIGZyZWVkLgogICoKICAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGVyZSBpcyBhIGhhcmQtbGltaXQgb2YgaG93IG1hbnkKLSAqIE9JRHMgY2FuIGJlIGFkZGVkIHRvIGEgc2luZ2xlIHNldCAoYXJvdW5kIH4yMjAwMCwgYXNzdW1pbmcKKyAqIE9JRHMgY2FuIGJlIGFkZGVkIHRvIGEgc2luZ2xlIHNldCAoYXJvdW5kIH4zMjAwMCwgYXNzdW1pbmcKICAqIGEgbW9zdGx5IHJhbmRvbWl6ZWQgZGlzdHJpYnV0aW9uKSwgd2hpY2ggc2hvdWxkIGJlIGVub3VnaAogICogZm9yIGFueSBraW5kIG9mIHByb2dyYW0sIGFuZCBrZWVwcyB0aGUgYWxnb3JpdGhtIGZhc3QgYW5kCiAgKiBtZW1vcnktZWZmaWNpZW50LgogICoKICAqIEF0dGVtcHRpbmcgdG8gYWRkIG1vcmUgdGhhbiB0aG9zZSBPSURzIHdpbGwgcmVzdWx0IGluIGEKLSAqIEdJVF9FTk9NRU0gZXJyb3IKKyAqIEdJVEVSUl9JTlZBTElEIGVycm9yCiAgKgogICogQHBhcmFtIG9zIGEgYGdpdF9vaWRfc2hvcnRlbmAgaW5zdGFuY2UKICAqIEBwYXJhbSB0ZXh0X2lkIGFuIE9JRCBpbiB0ZXh0IGZvcm0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9wYWNrLmggYi9pbmNsdWRlL2dpdDIvcGFjay5oCmluZGV4IGNjMWY0OGEuLjg4YTI3MTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9wYWNrLmgKKysrIGIvaW5jbHVkZS9naXQyL3BhY2suaApAQCAtMzgsNyArMzgsNyBAQAogICogICBgZ2l0X3BhY2tidWlsZGVyX3NldF90aHJlYWRzYCBjYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIG51bWJlciBvZgogICogICB0aHJlYWRzIHVzZWQgZm9yIHRoZSBwcm9jZXNzLgogICoKLSAqIFNlZSB0ZXN0cy1jbGFyL3BhY2svcGFja2J1aWxkZXIuYyBmb3IgYW4gZXhhbXBsZS4KKyAqIFNlZSB0ZXN0cy9wYWNrL3BhY2tidWlsZGVyLmMgZm9yIGFuIGV4YW1wbGUuCiAgKgogICogQGluZ3JvdXAgR2l0CiAgKiBAewpAQCAtNDYsNiArNDYsMTQgQEAKIEdJVF9CRUdJTl9ERUNMCiAKIC8qKgorICogU3RhZ2VzIHRoYXQgYXJlIHJlcG9ydGVkIGJ5IHRoZSBwYWNrYnVpbGRlciBwcm9ncmVzcyBjYWxsYmFjay4KKyAqLwordHlwZWRlZiBlbnVtIHsKKwlHSVRfUEFDS0JVSUxERVJfQURESU5HX09CSkVDVFMgPSAwLAorCUdJVF9QQUNLQlVJTERFUl9ERUxUQUZJQ0FUSU9OID0gMSwKK30gZ2l0X3BhY2tidWlsZGVyX3N0YWdlX3Q7CisJCisvKioKICAqIEluaXRpYWxpemUgYSBuZXcgcGFja2J1aWxkZXIKICAqCiAgKiBAcGFyYW0gb3V0IFRoZSBuZXcgcGFja2J1aWxkZXIgb2JqZWN0CkBAIC0xMTEsNiArMTE5LDcgQEAKICAqCiAgKiBAcGFyYW0gcGIgVGhlIHBhY2tidWlsZGVyCiAgKiBAcGFyYW0gcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwYWNrZmlsZSBhbmQgaW5kZXggc2hvdWxkIGJlIHN0b3JlZAorICogQHBhcmFtIG1vZGUgcGVybWlzc2lvbnMgdG8gdXNlIGNyZWF0aW5nIGEgcGFja2ZpbGUgb3IgMCBmb3IgZGVmYXVsdHMKICAqIEBwYXJhbSBwcm9ncmVzc19jYiBmdW5jdGlvbiB0byBjYWxsIHdpdGggcHJvZ3Jlc3MgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5kZXhlciAob3B0aW9uYWwpCiAgKiBAcGFyYW0gcHJvZ3Jlc3NfY2JfcGF5bG9hZCBwYXlsb2FkIGZvciB0aGUgcHJvZ3Jlc3MgY2FsbGJhY2sgKG9wdGlvbmFsKQogICoKQEAgLTExOSw5ICsxMjgsMjAgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfcGFja2J1aWxkZXJfd3JpdGUoCiAJZ2l0X3BhY2tidWlsZGVyICpwYiwKIAljb25zdCBjaGFyICpwYXRoLAorCXVuc2lnbmVkIGludCBtb2RlLAogCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBwcm9ncmVzc19jYiwKIAl2b2lkICpwcm9ncmVzc19jYl9wYXlsb2FkKTsKIAorLyoqCisqIEdldCB0aGUgcGFja2ZpbGUncyBoYXNoCisqCisqIEEgcGFja2ZpbGUncyBuYW1lIGlzIGRlcml2ZWQgZnJvbSB0aGUgc29ydGVkIGhhc2hpbmcgb2YgYWxsIG9iamVjdAorKiBuYW1lcy4gVGhpcyBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgdGhlIHBhY2tmaWxlIGhhcyBiZWVuIHdyaXR0ZW4uCisqCisqIEBwYXJhbSBwYiBUaGUgcGFja2J1aWxkZXIgb2JqZWN0CisqLworR0lUX0VYVEVSTihjb25zdCBnaXRfb2lkICopIGdpdF9wYWNrYnVpbGRlcl9oYXNoKGdpdF9wYWNrYnVpbGRlciAqcGIpOworCiB0eXBlZGVmIGludCAoKmdpdF9wYWNrYnVpbGRlcl9mb3JlYWNoX2NiKSh2b2lkICpidWYsIHNpemVfdCBzaXplLCB2b2lkICpwYXlsb2FkKTsKIC8qKgogICogQ3JlYXRlIHRoZSBuZXcgcGFjayBhbmQgcGFzcyBlYWNoIG9iamVjdCB0byB0aGUgY2FsbGJhY2sKQEAgLTEzNyw3ICsxNTcsNyBAQAogICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB0aGUgcGFja2J1aWxkZXIgd2lsbCB3cml0ZSBvdXQKICAqCiAgKiBAcGFyYW0gcGIgdGhlIHBhY2tidWlsZGVyCi0gKiBAcmV0dXJuCisgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcGFja2ZpbGUKICAqLwogR0lUX0VYVEVSTih1aW50MzJfdCkgZ2l0X3BhY2tidWlsZGVyX29iamVjdF9jb3VudChnaXRfcGFja2J1aWxkZXIgKnBiKTsKIApAQCAtMTQ1LDEwICsxNjUsMzIgQEAKICAqIEdldCB0aGUgbnVtYmVyIG9mIG9iamVjdHMgdGhlIHBhY2tidWlsZGVyIGhhcyBhbHJlYWR5IHdyaXR0ZW4gb3V0CiAgKgogICogQHBhcmFtIHBiIHRoZSBwYWNrYnVpbGRlcgotICogQHJldHVybgorICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gd3JpdHRlbgogICovCiBHSVRfRVhURVJOKHVpbnQzMl90KSBnaXRfcGFja2J1aWxkZXJfd3JpdHRlbihnaXRfcGFja2J1aWxkZXIgKnBiKTsKIAorLyoqIFBhY2tidWlsZGVyIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiAqLwordHlwZWRlZiBpbnQgKCpnaXRfcGFja2J1aWxkZXJfcHJvZ3Jlc3MpKAorCWludCBzdGFnZSwKKwl1bnNpZ25lZCBpbnQgY3VycmVudCwKKwl1bnNpZ25lZCBpbnQgdG90YWwsCisJdm9pZCAqcGF5bG9hZCk7CisKKy8qKgorICogU2V0IHRoZSBjYWxsYmFja3MgZm9yIGEgcGFja2J1aWxkZXIKKyAqCisgKiBAcGFyYW0gcGIgVGhlIHBhY2tidWlsZGVyIG9iamVjdAorICogQHBhcmFtIHByb2dyZXNzX2NiIEZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBwcm9ncmVzcyBpbmZvcm1hdGlvbiBkdXJpbmcKKyAqIHBhY2sgYnVpbGRpbmcuIEJlIGF3YXJlIHRoYXQgdGhpcyBpcyBjYWxsZWQgaW5saW5lIHdpdGggcGFjayBidWlsZGluZworICogb3BlcmF0aW9ucywgc28gcGVyZm9ybWFuY2UgbWF5IGJlIGFmZmVjdGVkLgorICogQHBhcmFtIHByb2dyZXNzX2NiX3BheWxvYWQgUGF5bG9hZCBmb3IgcHJvZ3Jlc3MgY2FsbGJhY2suCisgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhY2tidWlsZGVyX3NldF9jYWxsYmFja3MoCisJZ2l0X3BhY2tidWlsZGVyICpwYiwKKwlnaXRfcGFja2J1aWxkZXJfcHJvZ3Jlc3MgcHJvZ3Jlc3NfY2IsCisJdm9pZCAqcHJvZ3Jlc3NfY2JfcGF5bG9hZCk7CisKIC8qKgogICogRnJlZSB0aGUgcGFja2J1aWxkZXIgYW5kIGFsbCBhc3NvY2lhdGVkIGRhdGEKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcGF0Y2guaCBiL2luY2x1ZGUvZ2l0Mi9wYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNmFkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2dpdDIvcGF0Y2guaApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisjaWZuZGVmIElOQ0xVREVfZ2l0X3BhdGNoX2hfXworI2RlZmluZSBJTkNMVURFX2dpdF9wYXRjaF9oX18KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAib2lkLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorCisvKioKKyAqIEBmaWxlIGdpdDIvcGF0Y2guaAorICogQGJyaWVmIFBhdGNoIGhhbmRsaW5nIHJvdXRpbmVzLgorICogQGluZ3JvdXAgR2l0CisgKiBAeworICovCitHSVRfQkVHSU5fREVDTAorCisvKioKKyAqIFRoZSBkaWZmIHBhdGNoIGlzIHVzZWQgdG8gc3RvcmUgYWxsIHRoZSB0ZXh0IGRpZmZzIGZvciBhIGRlbHRhLgorICoKKyAqIFlvdSBjYW4gZWFzaWx5IGxvb3Agb3ZlciB0aGUgY29udGVudCBvZiBwYXRjaGVzIGFuZCBnZXQgaW5mb3JtYXRpb24gYWJvdXQKKyAqIHRoZW0uCisgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9wYXRjaCBnaXRfcGF0Y2g7CisKKy8qKgorICogUmV0dXJuIHRoZSBkaWZmIGRlbHRhIGFuZCBwYXRjaCBmb3IgYW4gZW50cnkgaW4gdGhlIGRpZmYgbGlzdC4KKyAqCisgKiBUaGUgYGdpdF9wYXRjaGAgaXMgYSBuZXdseSBjcmVhdGVkIG9iamVjdCBjb250YWlucyB0aGUgdGV4dCBkaWZmcworICogZm9yIHRoZSBkZWx0YS4gIFlvdSBoYXZlIHRvIGNhbGwgYGdpdF9wYXRjaF9mcmVlKClgIHdoZW4geW91IGFyZQorICogZG9uZSB3aXRoIGl0LiAgWW91IGNhbiB1c2UgdGhlIHBhdGNoIG9iamVjdCB0byBsb29wIG92ZXIgYWxsIHRoZSBodW5rcworICogYW5kIGxpbmVzIGluIHRoZSBkaWZmIG9mIHRoZSBvbmUgZGVsdGEuCisgKgorICogRm9yIGFuIHVuY2hhbmdlZCBmaWxlIG9yIGEgYmluYXJ5IGZpbGUsIG5vIGBnaXRfcGF0Y2hgIHdpbGwgYmUKKyAqIGNyZWF0ZWQsIHRoZSBvdXRwdXQgd2lsbCBiZSBzZXQgdG8gTlVMTCwgYW5kIHRoZSBgYmluYXJ5YCBmbGFnIHdpbGwgYmUKKyAqIHNldCB0cnVlIGluIHRoZSBgZ2l0X2RpZmZfZGVsdGFgIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgYGdpdF9kaWZmX2RlbHRhYCBwb2ludGVyIHBvaW50cyB0byBpbnRlcm5hbCBkYXRhIGFuZCB5b3UgZG8gbm90IGhhdmUKKyAqIHRvIHJlbGVhc2UgaXQgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBpdC4gIEl0IHdpbGwgZ28gYXdheSB3aGVuIHRoZQorICogYGdpdF9kaWZmYCBhbmQgYGdpdF9wYXRjaGAgZ28gYXdheS4KKyAqCisgKiBJdCBpcyBva2F5IHRvIHBhc3MgTlVMTCBmb3IgZWl0aGVyIG9mIHRoZSBvdXRwdXQgcGFyYW1ldGVyczsgaWYgeW91IHBhc3MKKyAqIE5VTEwgZm9yIHRoZSBgZ2l0X3BhdGNoYCwgdGhlbiB0aGUgdGV4dCBkaWZmIHdpbGwgbm90IGJlIGNhbGN1bGF0ZWQuCisgKgorICogQHBhcmFtIG91dCBPdXRwdXQgcGFyYW1ldGVyIGZvciB0aGUgZGVsdGEgcGF0Y2ggb2JqZWN0CisgKiBAcGFyYW0gZGlmZiBEaWZmIGxpc3Qgb2JqZWN0CisgKiBAcGFyYW0gaWR4IEluZGV4IGludG8gZGlmZiBsaXN0CisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXIgdmFsdWUgPCAwIG9uIGVycm9yCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfcGF0Y2hfZnJvbV9kaWZmKAorCWdpdF9wYXRjaCAqKm91dCwgZ2l0X2RpZmYgKmRpZmYsIHNpemVfdCBpZHgpOworCisvKioKKyAqIERpcmVjdGx5IGdlbmVyYXRlIGEgcGF0Y2ggZnJvbSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBibG9icy4KKyAqCisgKiBUaGlzIGlzIGp1c3QgbGlrZSBgZ2l0X2RpZmZfYmxvYnMoKWAgZXhjZXB0IGl0IGdlbmVyYXRlcyBhIHBhdGNoIG9iamVjdAorICogZm9yIHRoZSBkaWZmZXJlbmNlIGluc3RlYWQgb2YgZGlyZWN0bHkgbWFraW5nIGNhbGxiYWNrcy4gIFlvdSBjYW4gdXNlIHRoZQorICogc3RhbmRhcmQgYGdpdF9wYXRjaGAgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIHJlYWQgdGhlIHBhdGNoIGRhdGEsIGFuZAorICogeW91IG11c3QgY2FsbCBgZ2l0X3BhdGNoX2ZyZWUoKWAgb24gdGhlIHBhdGNoIHdoZW4gZG9uZS4KKyAqCisgKiBAcGFyYW0gb3V0IFRoZSBnZW5lcmF0ZWQgcGF0Y2g7IE5VTEwgb24gZXJyb3IKKyAqIEBwYXJhbSBvbGRfYmxvYiBCbG9iIGZvciBvbGQgc2lkZSBvZiBkaWZmLCBvciBOVUxMIGZvciBlbXB0eSBibG9iCisgKiBAcGFyYW0gb2xkX2FzX3BhdGggVHJlYXQgb2xkIGJsb2IgYXMgaWYgaXQgaGFkIHRoaXMgZmlsZW5hbWU7IGNhbiBiZSBOVUxMCisgKiBAcGFyYW0gbmV3X2Jsb2IgQmxvYiBmb3IgbmV3IHNpZGUgb2YgZGlmZiwgb3IgTlVMTCBmb3IgZW1wdHkgYmxvYgorICogQHBhcmFtIG5ld19hc19wYXRoIFRyZWF0IG5ldyBibG9iIGFzIGlmIGl0IGhhZCB0aGlzIGZpbGVuYW1lOyBjYW4gYmUgTlVMTAorICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgZGlmZiwgb3IgTlVMTCBmb3IgZGVmYXVsdCBvcHRpb25zCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvciBjb2RlIDwgMAorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhdGNoX2Zyb21fYmxvYnMoCisJZ2l0X3BhdGNoICoqb3V0LAorCWNvbnN0IGdpdF9ibG9iICpvbGRfYmxvYiwKKwljb25zdCBjaGFyICpvbGRfYXNfcGF0aCwKKwljb25zdCBnaXRfYmxvYiAqbmV3X2Jsb2IsCisJY29uc3QgY2hhciAqbmV3X2FzX3BhdGgsCisJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cyk7CisKKy8qKgorICogRGlyZWN0bHkgZ2VuZXJhdGUgYSBwYXRjaCBmcm9tIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBibG9iIGFuZCBhIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGlzIGp1c3QgbGlrZSBgZ2l0X2RpZmZfYmxvYl90b19idWZmZXIoKWAgZXhjZXB0IGl0IGdlbmVyYXRlcyBhIHBhdGNoCisgKiBvYmplY3QgZm9yIHRoZSBkaWZmZXJlbmNlIGluc3RlYWQgb2YgZGlyZWN0bHkgbWFraW5nIGNhbGxiYWNrcy4gIFlvdSBjYW4KKyAqIHVzZSB0aGUgc3RhbmRhcmQgYGdpdF9wYXRjaGAgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIHJlYWQgdGhlIHBhdGNoCisgKiBkYXRhLCBhbmQgeW91IG11c3QgY2FsbCBgZ2l0X3BhdGNoX2ZyZWUoKWAgb24gdGhlIHBhdGNoIHdoZW4gZG9uZS4KKyAqCisgKiBAcGFyYW0gb3V0IFRoZSBnZW5lcmF0ZWQgcGF0Y2g7IE5VTEwgb24gZXJyb3IKKyAqIEBwYXJhbSBvbGRfYmxvYiBCbG9iIGZvciBvbGQgc2lkZSBvZiBkaWZmLCBvciBOVUxMIGZvciBlbXB0eSBibG9iCisgKiBAcGFyYW0gb2xkX2FzX3BhdGggVHJlYXQgb2xkIGJsb2IgYXMgaWYgaXQgaGFkIHRoaXMgZmlsZW5hbWU7IGNhbiBiZSBOVUxMCisgKiBAcGFyYW0gYnVmZmVyIFJhdyBkYXRhIGZvciBuZXcgc2lkZSBvZiBkaWZmLCBvciBOVUxMIGZvciBlbXB0eQorICogQHBhcmFtIGJ1ZmZlcl9sZW4gTGVuZ3RoIG9mIHJhdyBkYXRhIGZvciBuZXcgc2lkZSBvZiBkaWZmCisgKiBAcGFyYW0gYnVmZmVyX2FzX3BhdGggVHJlYXQgYnVmZmVyIGFzIGlmIGl0IGhhZCB0aGlzIGZpbGVuYW1lOyBjYW4gYmUgTlVMTAorICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgZGlmZiwgb3IgTlVMTCBmb3IgZGVmYXVsdCBvcHRpb25zCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcyBvciBlcnJvciBjb2RlIDwgMAorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWdpdF9wYXRjaCAqKm91dCwKKwljb25zdCBnaXRfYmxvYiAqb2xkX2Jsb2IsCisJY29uc3QgY2hhciAqb2xkX2FzX3BhdGgsCisJY29uc3QgY2hhciAqYnVmZmVyLAorCXNpemVfdCBidWZmZXJfbGVuLAorCWNvbnN0IGNoYXIgKmJ1ZmZlcl9hc19wYXRoLAorCWNvbnN0IGdpdF9kaWZmX29wdGlvbnMgKm9wdHMpOworCisvKioKKyAqIEZyZWUgYSBnaXRfcGF0Y2ggb2JqZWN0LgorICovCitHSVRfRVhURVJOKHZvaWQpIGdpdF9wYXRjaF9mcmVlKGdpdF9wYXRjaCAqcGF0Y2gpOworCisvKioKKyAqIEdldCB0aGUgZGVsdGEgYXNzb2NpYXRlZCB3aXRoIGEgcGF0Y2gKKyAqLworR0lUX0VYVEVSTihjb25zdCBnaXRfZGlmZl9kZWx0YSAqKSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKGdpdF9wYXRjaCAqcGF0Y2gpOworCisvKioKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGh1bmtzIGluIGEgcGF0Y2gKKyAqLworR0lUX0VYVEVSTihzaXplX3QpIGdpdF9wYXRjaF9udW1faHVua3MoZ2l0X3BhdGNoICpwYXRjaCk7CisKKy8qKgorICogR2V0IGxpbmUgY291bnRzIG9mIGVhY2ggdHlwZSBpbiBhIHBhdGNoLgorICoKKyAqIFRoaXMgaGVscHMgaW1pdGF0ZSBhIGRpZmYgLS1udW1zdGF0IHR5cGUgb2Ygb3V0cHV0LiAgRm9yIHRoYXQgcHVycG9zZSwKKyAqIHlvdSBvbmx5IG5lZWQgdGhlIGB0b3RhbF9hZGRpdGlvbnNgIGFuZCBgdG90YWxfZGVsZXRpb25zYCB2YWx1ZXMsIGJ1dCB3ZQorICogaW5jbHVkZSB0aGUgYHRvdGFsX2NvbnRleHRgIGxpbmUgY291bnQgaW4gY2FzZSB5b3Ugd2FudCB0aGUgdG90YWwgbnVtYmVyCisgKiBvZiBsaW5lcyBvZiBkaWZmIG91dHB1dCB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkLgorICoKKyAqIEFsbCBvdXRwdXRzIGFyZSBvcHRpb25hbC4gUGFzcyBOVUxMIGlmIHlvdSBkb24ndCBuZWVkIGEgcGFydGljdWxhciBjb3VudC4KKyAqCisgKiBAcGFyYW0gdG90YWxfY29udGV4dCBDb3VudCBvZiBjb250ZXh0IGxpbmVzIGluIG91dHB1dCwgY2FuIGJlIE5VTEwuCisgKiBAcGFyYW0gdG90YWxfYWRkaXRpb25zIENvdW50IG9mIGFkZGl0aW9uIGxpbmVzIGluIG91dHB1dCwgY2FuIGJlIE5VTEwuCisgKiBAcGFyYW0gdG90YWxfZGVsZXRpb25zIENvdW50IG9mIGRlbGV0aW9uIGxpbmVzIGluIG91dHB1dCwgY2FuIGJlIE5VTEwuCisgKiBAcGFyYW0gcGF0Y2ggVGhlIGdpdF9wYXRjaCBvYmplY3QKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhdGNoX2xpbmVfc3RhdHMoCisJc2l6ZV90ICp0b3RhbF9jb250ZXh0LAorCXNpemVfdCAqdG90YWxfYWRkaXRpb25zLAorCXNpemVfdCAqdG90YWxfZGVsZXRpb25zLAorCWNvbnN0IGdpdF9wYXRjaCAqcGF0Y2gpOworCisvKioKKyAqIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBodW5rIGluIGEgcGF0Y2gKKyAqCisgKiBHaXZlbiBhIHBhdGNoIGFuZCBhIGh1bmsgaW5kZXggaW50byB0aGUgcGF0Y2gsIHRoaXMgcmV0dXJucyBkZXRhaWxlZAorICogaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBodW5rLiAgQW55IG9mIHRoZSBvdXRwdXQgcG9pbnRlcnMgY2FuIGJlIHBhc3NlZAorICogYXMgTlVMTCBpZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCB0aGF0IHBhcnRpY3VsYXIgcGllY2Ugb2YgaW5mb3JtYXRpb24uCisgKgorICogQHBhcmFtIG91dCBPdXRwdXQgcG9pbnRlciB0byBnaXRfZGlmZl9odW5rIG9mIGh1bmsKKyAqIEBwYXJhbSBsaW5lc19pbl9odW5rIE91dHB1dCBjb3VudCBvZiB0b3RhbCBsaW5lcyBpbiB0aGlzIGh1bmsKKyAqIEBwYXJhbSBwYXRjaCBJbnB1dCBwb2ludGVyIHRvIHBhdGNoIG9iamVjdAorICogQHBhcmFtIGh1bmtfaWR4IElucHV0IGluZGV4IG9mIGh1bmsgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0CisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCBpZiBodW5rX2lkeCBvdXQgb2YgcmFuZ2UsIDwwIG9uIGVycm9yCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfcGF0Y2hfZ2V0X2h1bmsoCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqKm91dCwKKwlzaXplX3QgKmxpbmVzX2luX2h1bmssCisJZ2l0X3BhdGNoICpwYXRjaCwKKwlzaXplX3QgaHVua19pZHgpOworCisvKioKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIGEgaHVuay4KKyAqCisgKiBAcGFyYW0gcGF0Y2ggVGhlIGdpdF9wYXRjaCBvYmplY3QKKyAqIEBwYXJhbSBodW5rX2lkeCBJbmRleCBvZiB0aGUgaHVuaworICogQHJldHVybiBOdW1iZXIgb2YgbGluZXMgaW4gaHVuayBvciAtMSBpZiBpbnZhbGlkIGh1bmsgaW5kZXgKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9wYXRjaF9udW1fbGluZXNfaW5faHVuaygKKwlnaXRfcGF0Y2ggKnBhdGNoLAorCXNpemVfdCBodW5rX2lkeCk7CisKKy8qKgorICogR2V0IGRhdGEgYWJvdXQgYSBsaW5lIGluIGEgaHVuayBvZiBhIHBhdGNoLgorICoKKyAqIEdpdmVuIGEgcGF0Y2gsIGEgaHVuayBpbmRleCwgYW5kIGEgbGluZSBpbmRleCBpbiB0aGUgaHVuaywgdGhpcworICogd2lsbCByZXR1cm4gYSBsb3Qgb2YgZGV0YWlscyBhYm91dCB0aGF0IGxpbmUuICBJZiB5b3UgcGFzcyBhIGh1bmsKKyAqIGluZGV4IGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgaHVua3Mgb3IgYSBsaW5lIGluZGV4IGxhcmdlciB0aGFuCisgKiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBodW5rLCB0aGlzIHdpbGwgcmV0dXJuIC0xLgorICoKKyAqIEBwYXJhbSBvdXQgVGhlIGdpdF9kaWZmX2xpbmUgZGF0YSBmb3IgdGhpcyBsaW5lCisgKiBAcGFyYW0gcGF0Y2ggVGhlIHBhdGNoIHRvIGxvb2sgaW4KKyAqIEBwYXJhbSBodW5rX2lkeCBUaGUgaW5kZXggb2YgdGhlIGh1bmsKKyAqIEBwYXJhbSBsaW5lX29mX2h1bmsgVGhlIGluZGV4IG9mIHRoZSBsaW5lIGluIHRoZSBodW5rCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhdGNoX2dldF9saW5lX2luX2h1bmsoCisJY29uc3QgZ2l0X2RpZmZfbGluZSAqKm91dCwKKwlnaXRfcGF0Y2ggKnBhdGNoLAorCXNpemVfdCBodW5rX2lkeCwKKwlzaXplX3QgbGluZV9vZl9odW5rKTsKKworLyoqCisgKiBMb29rIHVwIHNpemUgb2YgcGF0Y2ggZGlmZiBkYXRhIGluIGJ5dGVzCisgKgorICogVGhpcyByZXR1cm5zIHRoZSByYXcgc2l6ZSBvZiB0aGUgcGF0Y2ggZGF0YS4gIFRoaXMgb25seSBpbmNsdWRlcyB0aGUKKyAqIGFjdHVhbCBkYXRhIGZyb20gdGhlIGxpbmVzIG9mIHRoZSBkaWZmLCBub3QgdGhlIGZpbGUgb3IgaHVuayBoZWFkZXJzLgorICoKKyAqIElmIHlvdSBwYXNzIGBpbmNsdWRlX2NvbnRleHRgIGFzIHRydWUgKG5vbi16ZXJvKSwgdGhpcyB3aWxsIGJlIHRoZSBzaXplCisgKiBvZiBhbGwgb2YgdGhlIGRpZmYgb3V0cHV0OyBpZiB5b3UgcGFzcyBpdCBhcyBmYWxzZSAoemVybyksIHRoaXMgd2lsbAorICogb25seSBpbmNsdWRlIHRoZSBhY3R1YWwgY2hhbmdlZCBsaW5lcyAoYXMgaWYgYGNvbnRleHRfbGluZXNgIHdhcyAwKS4KKyAqCisgKiBAcGFyYW0gcGF0Y2ggQSBnaXRfcGF0Y2ggcmVwcmVzZW50aW5nIGNoYW5nZXMgdG8gb25lIGZpbGUKKyAqIEBwYXJhbSBpbmNsdWRlX2NvbnRleHQgSW5jbHVkZSBjb250ZXh0IGxpbmVzIGluIHNpemUgaWYgbm9uLXplcm8KKyAqIEBwYXJhbSBpbmNsdWRlX2h1bmtfaGVhZGVycyBJbmNsdWRlIGh1bmsgaGVhZGVyIGxpbmVzIGlmIG5vbi16ZXJvCisgKiBAcGFyYW0gaW5jbHVkZV9maWxlX2hlYWRlcnMgSW5jbHVkZSBmaWxlIGhlYWRlciBsaW5lcyBpZiBub24temVybworICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEKKyAqLworR0lUX0VYVEVSTihzaXplX3QpIGdpdF9wYXRjaF9zaXplKAorCWdpdF9wYXRjaCAqcGF0Y2gsCisJaW50IGluY2x1ZGVfY29udGV4dCwKKwlpbnQgaW5jbHVkZV9odW5rX2hlYWRlcnMsCisJaW50IGluY2x1ZGVfZmlsZV9oZWFkZXJzKTsKKworLyoqCisgKiBTZXJpYWxpemUgdGhlIHBhdGNoIHRvIHRleHQgdmlhIGNhbGxiYWNrLgorICoKKyAqIFJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlIGZyb20gdGhlIGNhbGxiYWNrIHdpbGwgdGVybWluYXRlIHRoZSBpdGVyYXRpb24KKyAqIGFuZCBjYXVzZSB0aGlzIHJldHVybiBgR0lUX0VVU0VSYC4KKyAqCisgKiBAcGFyYW0gcGF0Y2ggQSBnaXRfcGF0Y2ggcmVwcmVzZW50aW5nIGNoYW5nZXMgdG8gb25lIGZpbGUKKyAqIEBwYXJhbSBwcmludF9jYiBDYWxsYmFjayBmdW5jdGlvbiB0byBvdXRwdXQgbGluZXMgb2YgdGhlIHBhdGNoLiAgV2lsbCBiZQorICogICAgICAgICAgICAgICAgIGNhbGxlZCBmb3IgZmlsZSBoZWFkZXJzLCBodW5rIGhlYWRlcnMsIGFuZCBkaWZmIGxpbmVzLgorICogQHBhcmFtIHBheWxvYWQgUmVmZXJlbmNlIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB5b3VyIGNhbGxiYWNrcy4KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVTRVIgb24gbm9uLXplcm8gY2FsbGJhY2ssIG9yIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9wYXRjaF9wcmludCgKKwlnaXRfcGF0Y2ggKnBhdGNoLAorCWdpdF9kaWZmX2xpbmVfY2IgcHJpbnRfY2IsCisJdm9pZCAqcGF5bG9hZCk7CisKKy8qKgorICogR2V0IHRoZSBjb250ZW50IG9mIGEgcGF0Y2ggYXMgYSBzaW5nbGUgZGlmZiB0ZXh0LgorICoKKyAqIEBwYXJhbSBzdHJpbmcgQWxsb2NhdGVkIHN0cmluZzsgY2FsbGVyIG11c3QgZnJlZS4KKyAqIEBwYXJhbSBwYXRjaCBBIGdpdF9wYXRjaCByZXByZXNlbnRpbmcgY2hhbmdlcyB0byBvbmUgZmlsZQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfcGF0Y2hfdG9fc3RyKAorCWNoYXIgKipzdHJpbmcsCisJZ2l0X3BhdGNoICpwYXRjaCk7CisKKworR0lUX0VORF9ERUNMCisKKy8qKkB9Ki8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcGF0aHNwZWMuaCBiL2luY2x1ZGUvZ2l0Mi9wYXRoc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjBiYjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2dpdDIvcGF0aHNwZWMuaApAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisjaWZuZGVmIElOQ0xVREVfZ2l0X3BhdGhzcGVjX2hfXworI2RlZmluZSBJTkNMVURFX2dpdF9wYXRoc3BlY19oX18KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAic3RyYXJyYXkuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisKKy8qKgorICogQ29tcGlsZWQgcGF0aHNwZWMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZ2l0X3BhdGhzcGVjIGdpdF9wYXRoc3BlYzsKKworLyoqCisgKiBMaXN0IG9mIGZpbGVuYW1lcyBtYXRjaGluZyBhIHBhdGhzcGVjCisgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0OworCisvKioKKyAqIE9wdGlvbnMgY29udHJvbGxpbmcgaG93IHBhdGhzcGVjIG1hdGNoIHNob3VsZCBiZSBleGVjdXRlZAorICoKKyAqIC0gR0lUX1BBVEhTUEVDX0lHTk9SRV9DQVNFIGZvcmNlcyBtYXRjaCB0byBpZ25vcmUgY2FzZTsgb3RoZXJ3aXNlCisgKiAgIG1hdGNoIHdpbGwgdXNlIG5hdGl2ZSBjYXNlIHNlbnNpdGl2aXR5IG9mIHBsYXRmb3JtIGZpbGVzeXN0ZW0KKyAqIC0gR0lUX1BBVEhTUEVDX1VTRV9DQVNFIGZvcmNlcyBjYXNlIHNlbnNpdGl2ZSBtYXRjaDsgb3RoZXJ3aXNlCisgKiAgIG1hdGNoIHdpbGwgdXNlIG5hdGl2ZSBjYXNlIHNlbnNpdGl2aXR5IG9mIHBsYXRmb3JtIGZpbGVzeXN0ZW0KKyAqIC0gR0lUX1BBVEhTUEVDX05PX0dMT0IgZGlzYWJsZXMgZ2xvYiBwYXR0ZXJucyBhbmQganVzdCB1c2VzIHNpbXBsZQorICogICBzdHJpbmcgY29tcGFyaXNvbiBmb3IgbWF0Y2hpbmcKKyAqIC0gR0lUX1BBVEhTUEVDX05PX01BVENIX0VSUk9SIG1lYW5zIHRoZSBtYXRjaCBmdW5jdGlvbnMgcmV0dXJuIGVycm9yCisgKiAgIGNvZGUgR0lUX0VOT1RGT1VORCBpZiBubyBtYXRjaGVzIGFyZSBmb3VuZDsgb3RoZXJ3aXNlIG5vIG1hdGNoZXMgaXMKKyAqICAgc3RpbGwgc3VjY2VzcyAocmV0dXJuIDApIGJ1dCBgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudGAKKyAqICAgd2lsbCBpbmRpY2F0ZSAwIG1hdGNoZXMuCisgKiAtIEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTIG1lYW5zIHRoYXQgdGhlIGBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdGAKKyAqICAgc2hvdWxkIHRyYWNrIHdoaWNoIHBhdHRlcm5zIG1hdGNoZWQgd2hpY2ggZmlsZXMgc28gdGhhdCBhdCB0aGUgZW5kIG9mCisgKiAgIHRoZSBtYXRjaCB3ZSBjYW4gaWRlbnRpZnkgcGF0dGVybnMgdGhhdCBkaWQgbm90IG1hdGNoIGFueSBmaWxlcy4KKyAqIC0gR0lUX1BBVEhTUEVDX0ZBSUxVUkVTX09OTFkgbWVhbnMgdGhhdCB0aGUgYGdpdF9wYXRoc3BlY19tYXRjaF9saXN0YAorICogICBkb2VzIG5vdCBuZWVkIHRvIGtlZXAgdGhlIGFjdHVhbCBtYXRjaGluZyBmaWxlbmFtZXMuICBVc2UgdGhpcyB0bworICogICBqdXN0IHRlc3QgaWYgdGhlcmUgd2VyZSBhbnkgbWF0Y2hlcyBhdCBhbGwgb3IgaW4gY29tYmluYXRpb24gd2l0aAorICogICBHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUyB0byB2YWxpZGF0ZSBhIHBhdGhzcGVjLgorICovCit0eXBlZGVmIGVudW0geworCUdJVF9QQVRIU1BFQ19ERUZBVUxUICAgICAgICA9IDAsCisJR0lUX1BBVEhTUEVDX0lHTk9SRV9DQVNFICAgID0gKDF1IDw8IDApLAorCUdJVF9QQVRIU1BFQ19VU0VfQ0FTRSAgICAgICA9ICgxdSA8PCAxKSwKKwlHSVRfUEFUSFNQRUNfTk9fR0xPQiAgICAgICAgPSAoMXUgPDwgMiksCisJR0lUX1BBVEhTUEVDX05PX01BVENIX0VSUk9SID0gKDF1IDw8IDMpLAorCUdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTICA9ICgxdSA8PCA0KSwKKwlHSVRfUEFUSFNQRUNfRkFJTFVSRVNfT05MWSAgPSAoMXUgPDwgNSksCit9IGdpdF9wYXRoc3BlY19mbGFnX3Q7CisKKy8qKgorICogQ29tcGlsZSBhIHBhdGhzcGVjCisgKgorICogQHBhcmFtIG91dCBPdXRwdXQgb2YgdGhlIGNvbXBpbGVkIHBhdGhzcGVjCisgKiBAcGFyYW0gcGF0aHNwZWMgQSBnaXRfc3RyYXJyYXkgb2YgdGhlIHBhdGhzIHRvIG1hdGNoCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhdGhzcGVjX25ldygKKwlnaXRfcGF0aHNwZWMgKipvdXQsIGNvbnN0IGdpdF9zdHJhcnJheSAqcGF0aHNwZWMpOworCisvKioKKyAqIEZyZWUgYSBwYXRoc3BlYworICoKKyAqIEBwYXJhbSBwcyBUaGUgY29tcGlsZWQgcGF0aHNwZWMKKyAqLworR0lUX0VYVEVSTih2b2lkKSBnaXRfcGF0aHNwZWNfZnJlZShnaXRfcGF0aHNwZWMgKnBzKTsKKworLyoqCisgKiBUcnkgdG8gbWF0Y2ggYSBwYXRoIGFnYWluc3QgYSBwYXRoc3BlYworICoKKyAqIFVubGlrZSBtb3N0IG9mIHRoZSBvdGhlciBwYXRoc3BlYyBtYXRjaGluZyBmdW5jdGlvbnMsIHRoaXMgd2lsbCBub3QKKyAqIGZhbGwgYmFjayBvbiB0aGUgbmF0aXZlIGNhc2Utc2Vuc2l0aXZpdHkgZm9yIHlvdXIgcGxhdGZvcm0uICBZb3UgbXVzdAorICogZXhwbGljaXRseSBwYXNzIGZsYWdzIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdml0eSBvciBlbHNlIHRoaXMgd2lsbAorICogZmFsbCBiYWNrIG9uIGJlaW5nIGNhc2Ugc2Vuc2l0aXZlLgorICoKKyAqIEBwYXJhbSBwcyBUaGUgY29tcGlsZWQgcGF0aHNwZWMKKyAqIEBwYXJhbSBmbGFncyBDb21iaW5hdGlvbiBvZiBnaXRfcGF0aHNwZWNfZmxhZ190IG9wdGlvbnMgdG8gY29udHJvbCBtYXRjaAorICogQHBhcmFtIHBhdGggVGhlIHBhdGhuYW1lIHRvIGF0dGVtcHQgdG8gbWF0Y2gKKyAqIEByZXR1cm4gMSBpcyBwYXRoIG1hdGNoZXMgc3BlYywgMCBpZiBpdCBkb2VzIG5vdAorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3BhdGhzcGVjX21hdGNoZXNfcGF0aCgKKwljb25zdCBnaXRfcGF0aHNwZWMgKnBzLCB1aW50MzJfdCBmbGFncywgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qKgorICogTWF0Y2ggYSBwYXRoc3BlYyBhZ2FpbnN0IHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiBhIHJlcG9zaXRvcnkuCisgKgorICogVGhpcyBtYXRjaGVzIHRoZSBwYXRoc3BlYyBhZ2FpbnN0IHRoZSBjdXJyZW50IGZpbGVzIGluIHRoZSB3b3JraW5nCisgKiBkaXJlY3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkuICBJdCBpcyBhbiBlcnJvciB0byBpbnZva2UgdGhpcyBvbiBhIGJhcmUKKyAqIHJlcG8uICBUaGlzIGhhbmRsZXMgZ2l0IGlnbm9yZXMgKGkuZS4gaWdub3JlZCBmaWxlcyB3aWxsIG5vdCBiZQorICogY29uc2lkZXJlZCB0byBtYXRjaCB0aGUgYHBhdGhzcGVjYCB1bmxlc3MgdGhlIGZpbGUgaXMgdHJhY2tlZCBpbiB0aGUKKyAqIGluZGV4KS4KKyAqCisgKiBJZiBgb3V0YCBpcyBub3QgTlVMTCwgdGhpcyByZXR1cm5zIGEgYGdpdF9wYXRjaHNwZWNfbWF0Y2hfbGlzdGAuICBUaGF0CisgKiBjb250YWlucyB0aGUgbGlzdCBvZiBhbGwgbWF0Y2hlZCBmaWxlbmFtZXMgKHVubGVzcyB5b3UgcGFzcyB0aGUKKyAqIGBHSVRfUEFUSFNQRUNfRkFJTFVSRVNfT05MWWAgZmxhZykgYW5kIG1heSBhbHNvIGNvbnRhaW4gdGhlIGxpc3Qgb2YKKyAqIHBhdGhzcGVjcyB3aXRoIG5vIG1hdGNoIChpZiB5b3UgdXNlZCB0aGUgYEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTYAorICogZmxhZykuICBZb3UgbXVzdCBjYWxsIGBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKClgIG9uIHRoaXMgb2JqZWN0LgorICoKKyAqIEBwYXJhbSBvdXQgT3V0cHV0IGxpc3Qgb2YgbWF0Y2hlczsgcGFzcyBOVUxMIHRvIGp1c3QgZ2V0IHJldHVybiB2YWx1ZQorICogQHBhcmFtIHJlcG8gVGhlIHJlcG9zaXRvcnkgaW4gd2hpY2ggdG8gbWF0Y2g7IGJhcmUgcmVwbyBpcyBhbiBlcnJvcgorICogQHBhcmFtIGZsYWdzIENvbWJpbmF0aW9uIG9mIGdpdF9wYXRoc3BlY19mbGFnX3Qgb3B0aW9ucyB0byBjb250cm9sIG1hdGNoCisgKiBAcGFyYW0gcHMgUGF0aHNwZWMgdG8gYmUgbWF0Y2hlZAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLCBHSVRfRU5PVEZPVU5EIGlmIG5vIG1hdGNoZXMgYW5kCisgKiAgICAgICAgIHRoZSBHSVRfUEFUSFNQRUNfTk9fTUFUQ0hfRVJST1IgZmxhZyB3YXMgZ2l2ZW4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9wYXRoc3BlY19tYXRjaF93b3JrZGlyKAorCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICoqb3V0LAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCXVpbnQzMl90IGZsYWdzLAorCWdpdF9wYXRoc3BlYyAqcHMpOworCisvKioKKyAqIE1hdGNoIGEgcGF0aHNwZWMgYWdhaW5zdCBlbnRyaWVzIGluIGFuIGluZGV4LgorICoKKyAqIFRoaXMgbWF0Y2hlcyB0aGUgcGF0aHNwZWMgYWdhaW5zdCB0aGUgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgaW5kZXguCisgKgorICogTk9URTogQXQgdGhlIG1vbWVudCwgdGhlIGNhc2Ugc2Vuc2l0aXZpdHkgb2YgdGhpcyBtYXRjaCBpcyBjb250cm9sbGVkCisgKiBieSB0aGUgY3VycmVudCBjYXNlLXNlbnNpdGl2aXR5IG9mIHRoZSBpbmRleCBvYmplY3QgaXRzZWxmIGFuZCB0aGUKKyAqIFVTRV9DQVNFIGFuZCBJR05PUkVfQ0FTRSBmbGFncyB3aWxsIGhhdmUgbm8gZWZmZWN0LiAgVGhpcyBiZWhhdmlvciB3aWxsCisgKiBiZSBjb3JyZWN0ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAqCisgKiBJZiBgb3V0YCBpcyBub3QgTlVMTCwgdGhpcyByZXR1cm5zIGEgYGdpdF9wYXRjaHNwZWNfbWF0Y2hfbGlzdGAuICBUaGF0CisgKiBjb250YWlucyB0aGUgbGlzdCBvZiBhbGwgbWF0Y2hlZCBmaWxlbmFtZXMgKHVubGVzcyB5b3UgcGFzcyB0aGUKKyAqIGBHSVRfUEFUSFNQRUNfRkFJTFVSRVNfT05MWWAgZmxhZykgYW5kIG1heSBhbHNvIGNvbnRhaW4gdGhlIGxpc3Qgb2YKKyAqIHBhdGhzcGVjcyB3aXRoIG5vIG1hdGNoIChpZiB5b3UgdXNlZCB0aGUgYEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTYAorICogZmxhZykuICBZb3UgbXVzdCBjYWxsIGBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKClgIG9uIHRoaXMgb2JqZWN0LgorICoKKyAqIEBwYXJhbSBvdXQgT3V0cHV0IGxpc3Qgb2YgbWF0Y2hlczsgcGFzcyBOVUxMIHRvIGp1c3QgZ2V0IHJldHVybiB2YWx1ZQorICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBtYXRjaCBhZ2FpbnN0CisgKiBAcGFyYW0gZmxhZ3MgQ29tYmluYXRpb24gb2YgZ2l0X3BhdGhzcGVjX2ZsYWdfdCBvcHRpb25zIHRvIGNvbnRyb2wgbWF0Y2gKKyAqIEBwYXJhbSBwcyBQYXRoc3BlYyB0byBiZSBtYXRjaGVkCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IsIEdJVF9FTk9URk9VTkQgaWYgbm8gbWF0Y2hlcyBhbmQKKyAqICAgICAgICAgdGhlIEdJVF9QQVRIU1BFQ19OT19NQVRDSF9FUlJPUiBmbGFnIGlzIHVzZWQKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9wYXRoc3BlY19tYXRjaF9pbmRleCgKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqKm91dCwKKwlnaXRfaW5kZXggKmluZGV4LAorCXVpbnQzMl90IGZsYWdzLAorCWdpdF9wYXRoc3BlYyAqcHMpOworCisvKioKKyAqIE1hdGNoIGEgcGF0aHNwZWMgYWdhaW5zdCBmaWxlcyBpbiBhIHRyZWUuCisgKgorICogVGhpcyBtYXRjaGVzIHRoZSBwYXRoc3BlYyBhZ2FpbnN0IHRoZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gdHJlZS4KKyAqCisgKiBJZiBgb3V0YCBpcyBub3QgTlVMTCwgdGhpcyByZXR1cm5zIGEgYGdpdF9wYXRjaHNwZWNfbWF0Y2hfbGlzdGAuICBUaGF0CisgKiBjb250YWlucyB0aGUgbGlzdCBvZiBhbGwgbWF0Y2hlZCBmaWxlbmFtZXMgKHVubGVzcyB5b3UgcGFzcyB0aGUKKyAqIGBHSVRfUEFUSFNQRUNfRkFJTFVSRVNfT05MWWAgZmxhZykgYW5kIG1heSBhbHNvIGNvbnRhaW4gdGhlIGxpc3Qgb2YKKyAqIHBhdGhzcGVjcyB3aXRoIG5vIG1hdGNoIChpZiB5b3UgdXNlZCB0aGUgYEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTYAorICogZmxhZykuICBZb3UgbXVzdCBjYWxsIGBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKClgIG9uIHRoaXMgb2JqZWN0LgorICoKKyAqIEBwYXJhbSBvdXQgT3V0cHV0IGxpc3Qgb2YgbWF0Y2hlczsgcGFzcyBOVUxMIHRvIGp1c3QgZ2V0IHJldHVybiB2YWx1ZQorICogQHBhcmFtIHRyZWUgVGhlIHJvb3QtbGV2ZWwgdHJlZSB0byBtYXRjaCBhZ2FpbnN0CisgKiBAcGFyYW0gZmxhZ3MgQ29tYmluYXRpb24gb2YgZ2l0X3BhdGhzcGVjX2ZsYWdfdCBvcHRpb25zIHRvIGNvbnRyb2wgbWF0Y2gKKyAqIEBwYXJhbSBwcyBQYXRoc3BlYyB0byBiZSBtYXRjaGVkCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IsIEdJVF9FTk9URk9VTkQgaWYgbm8gbWF0Y2hlcyBhbmQKKyAqICAgICAgICAgdGhlIEdJVF9QQVRIU1BFQ19OT19NQVRDSF9FUlJPUiBmbGFnIGlzIHVzZWQKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9wYXRoc3BlY19tYXRjaF90cmVlKAorCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICoqb3V0LAorCWdpdF90cmVlICp0cmVlLAorCXVpbnQzMl90IGZsYWdzLAorCWdpdF9wYXRoc3BlYyAqcHMpOworCisvKioKKyAqIE1hdGNoIGEgcGF0aHNwZWMgYWdhaW5zdCBmaWxlcyBpbiBhIGRpZmYgbGlzdC4KKyAqCisgKiBUaGlzIG1hdGNoZXMgdGhlIHBhdGhzcGVjIGFnYWluc3QgdGhlIGZpbGVzIGluIHRoZSBnaXZlbiBkaWZmIGxpc3QuCisgKgorICogSWYgYG91dGAgaXMgbm90IE5VTEwsIHRoaXMgcmV0dXJucyBhIGBnaXRfcGF0Y2hzcGVjX21hdGNoX2xpc3RgLiAgVGhhdAorICogY29udGFpbnMgdGhlIGxpc3Qgb2YgYWxsIG1hdGNoZWQgZmlsZW5hbWVzICh1bmxlc3MgeW91IHBhc3MgdGhlCisgKiBgR0lUX1BBVEhTUEVDX0ZBSUxVUkVTX09OTFlgIGZsYWcpIGFuZCBtYXkgYWxzbyBjb250YWluIHRoZSBsaXN0IG9mCisgKiBwYXRoc3BlY3Mgd2l0aCBubyBtYXRjaCAoaWYgeW91IHVzZWQgdGhlIGBHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFU2AKKyAqIGZsYWcpLiAgWW91IG11c3QgY2FsbCBgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZSgpYCBvbiB0aGlzIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gb3V0IE91dHB1dCBsaXN0IG9mIG1hdGNoZXM7IHBhc3MgTlVMTCB0byBqdXN0IGdldCByZXR1cm4gdmFsdWUKKyAqIEBwYXJhbSBkaWZmIEEgZ2VuZXJhdGVkIGRpZmYgbGlzdAorICogQHBhcmFtIGZsYWdzIENvbWJpbmF0aW9uIG9mIGdpdF9wYXRoc3BlY19mbGFnX3Qgb3B0aW9ucyB0byBjb250cm9sIG1hdGNoCisgKiBAcGFyYW0gcHMgUGF0aHNwZWMgdG8gYmUgbWF0Y2hlZAorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLCBHSVRfRU5PVEZPVU5EIGlmIG5vIG1hdGNoZXMgYW5kCisgKiAgICAgICAgIHRoZSBHSVRfUEFUSFNQRUNfTk9fTUFUQ0hfRVJST1IgZmxhZyBpcyB1c2VkCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfcGF0aHNwZWNfbWF0Y2hfZGlmZigKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqKm91dCwKKwlnaXRfZGlmZiAqZGlmZiwKKwl1aW50MzJfdCBmbGFncywKKwlnaXRfcGF0aHNwZWMgKnBzKTsKKworLyoqCisgKiBGcmVlIG1lbW9yeSBhc3NvY2lhdGVzIHdpdGggYSBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdAorICoKKyAqIEBwYXJhbSBtIFRoZSBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCB0byBiZSBmcmVlZAorICovCitHSVRfRVhURVJOKHZvaWQpIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUoZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm0pOworCisvKioKKyAqIEdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWF0Y2ggbGlzdC4KKyAqCisgKiBAcGFyYW0gbSBUaGUgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3Qgb2JqZWN0CisgKiBAcmV0dXJuIE51bWJlciBvZiBpdGVtcyBpbiBtYXRjaCBsaXN0CisgKi8KK0dJVF9FWFRFUk4oc2l6ZV90KSBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KAorCWNvbnN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptKTsKKworLyoqCisgKiBHZXQgYSBtYXRjaGluZyBmaWxlbmFtZSBieSBwb3NpdGlvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2Fubm90IGJlIHVzZWQgaWYgdGhlIG1hdGNoIGxpc3Qgd2FzIGdlbmVyYXRlZCBieQorICogYGdpdF9wYXRoc3BlY19tYXRjaF9kaWZmYC4gIElmIHNvLCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTC4KKyAqCisgKiBAcGFyYW0gbSBUaGUgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3Qgb2JqZWN0CisgKiBAcGFyYW0gcG9zIFRoZSBpbmRleCBpbnRvIHRoZSBsaXN0CisgKiBAcmV0dXJuIFRoZSBmaWxlbmFtZSBvZiB0aGUgbWF0Y2gKKyAqLworR0lUX0VYVEVSTihjb25zdCBjaGFyICopIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KAorCWNvbnN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptLCBzaXplX3QgcG9zKTsKKworLyoqCisgKiBHZXQgYSBtYXRjaGluZyBkaWZmIGRlbHRhIGJ5IHBvc2l0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBtYXRjaCBsaXN0IHdhcyBnZW5lcmF0ZWQgYnkKKyAqIGBnaXRfcGF0aHNwZWNfbWF0Y2hfZGlmZmAuICBPdGhlcndpc2UgaXQgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuCisgKgorICogQHBhcmFtIG0gVGhlIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0IG9iamVjdAorICogQHBhcmFtIHBvcyBUaGUgaW5kZXggaW50byB0aGUgbGlzdAorICogQHJldHVybiBUaGUgZmlsZW5hbWUgb2YgdGhlIG1hdGNoCisgKi8KK0dJVF9FWFRFUk4oY29uc3QgZ2l0X2RpZmZfZGVsdGEgKikgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZGlmZl9lbnRyeSgKKwljb25zdCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqbSwgc2l6ZV90IHBvcyk7CisKKy8qKgorICogR2V0IHRoZSBudW1iZXIgb2YgcGF0aHNwZWMgaXRlbXMgdGhhdCBkaWQgbm90IG1hdGNoLgorICoKKyAqIFRoaXMgd2lsbCBiZSB6ZXJvIHVubGVzcyB5b3UgcGFzc2VkIEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTIHdoZW4KKyAqIGdlbmVyYXRpbmcgdGhlIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0LgorICoKKyAqIEBwYXJhbSBtIFRoZSBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCBvYmplY3QKKyAqIEByZXR1cm4gTnVtYmVyIG9mIGl0ZW1zIGluIG9yaWdpbmFsIHBhdGhzcGVjIHRoYXQgaGFkIG5vIG1hdGNoZXMKKyAqLworR0lUX0VYVEVSTihzaXplX3QpIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KAorCWNvbnN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptKTsKKworLyoqCisgKiBHZXQgYW4gb3JpZ2luYWwgcGF0aHNwZWMgc3RyaW5nIHRoYXQgaGFkIG5vIG1hdGNoZXMuCisgKgorICogVGhpcyB3aWxsIGJlIHJldHVybiBOVUxMIGZvciBwb3NpdGlvbnMgb3V0IG9mIHJhbmdlLgorICoKKyAqIEBwYXJhbSBtIFRoZSBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCBvYmplY3QKKyAqIEBwYXJhbSBwb3MgVGhlIGluZGV4IGludG8gdGhlIGZhaWxlZCBpdGVtcworICogQHJldHVybiBUaGUgcGF0aHNwZWMgcGF0dGVybiB0aGF0IGRpZG4ndCBtYXRjaCBhbnl0aGluZworICovCitHSVRfRVhURVJOKGNvbnN0IGNoYXIgKikgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5KAorCWNvbnN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptLCBzaXplX3QgcG9zKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcHVzaC5oIGIvaW5jbHVkZS9naXQyL3B1c2guaAppbmRleCBmOTIzMDgxLi43N2VmNzQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvcHVzaC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9wdXNoLmgKQEAgLTgsNiArOCw3IEBACiAjZGVmaW5lIElOQ0xVREVfZ2l0X3B1c2hfaF9fCiAKICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJwYWNrLmgiCiAKIC8qKgogICogQGZpbGUgZ2l0Mi9wdXNoLmgKQEAgLTM4LDYgKzM5LDEzIEBACiAjZGVmaW5lIEdJVF9QVVNIX09QVElPTlNfVkVSU0lPTiAxCiAjZGVmaW5lIEdJVF9QVVNIX09QVElPTlNfSU5JVCB7IEdJVF9QVVNIX09QVElPTlNfVkVSU0lPTiB9CiAKKy8qKiBQdXNoIG5ldHdvcmsgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZ1bmN0aW9uICovCit0eXBlZGVmIGludCAoKmdpdF9wdXNoX3RyYW5zZmVyX3Byb2dyZXNzKSgKKwl1bnNpZ25lZCBpbnQgY3VycmVudCwKKwl1bnNpZ25lZCBpbnQgdG90YWwsCisJc2l6ZV90IGJ5dGVzLAorCXZvaWQqIHBheWxvYWQpOworCiAvKioKICAqIENyZWF0ZSBhIG5ldyBwdXNoIG9iamVjdAogICoKQEAgLTYxLDYgKzY5LDI3IEBACiAJY29uc3QgZ2l0X3B1c2hfb3B0aW9ucyAqb3B0cyk7CiAKIC8qKgorICogU2V0IHRoZSBjYWxsYmFja3MgZm9yIGEgcHVzaAorICoKKyAqIEBwYXJhbSBwdXNoIFRoZSBwdXNoIG9iamVjdAorICogQHBhcmFtIHBhY2tfcHJvZ3Jlc3NfY2IgRnVuY3Rpb24gdG8gY2FsbCB3aXRoIHByb2dyZXNzIGluZm9ybWF0aW9uIGR1cmluZworICogcGFjayBidWlsZGluZy4gQmUgYXdhcmUgdGhhdCB0aGlzIGlzIGNhbGxlZCBpbmxpbmUgd2l0aCBwYWNrIGJ1aWxkaW5nCisgKiBvcGVyYXRpb25zLCBzbyBwZXJmb3JtYW5jZSBtYXkgYmUgYWZmZWN0ZWQuCisgKiBAcGFyYW0gcGFja19wcm9ncmVzc19jYl9wYXlsb2FkIFBheWxvYWQgZm9yIHRoZSBwYWNrIHByb2dyZXNzIGNhbGxiYWNrLgorICogQHBhcmFtIHRyYW5zZmVyX3Byb2dyZXNzX2NiIEZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBwcm9ncmVzcyBpbmZvcm1hdGlvbiBkdXJpbmcKKyAqIHRoZSB1cGxvYWQgcG9ydGlvbiBvZiBhIHB1c2guIEJlIGF3YXJlIHRoYXQgdGhpcyBpcyBjYWxsZWQgaW5saW5lIHdpdGgKKyAqIHBhY2sgYnVpbGRpbmcgb3BlcmF0aW9ucywgc28gcGVyZm9ybWFuY2UgbWF5IGJlIGFmZmVjdGVkLgorICogQHBhcmFtIHRyYW5zZmVyX3Byb2dyZXNzX2NiX3BheWxvYWQgUGF5bG9hZCBmb3IgdGhlIG5ldHdvcmsgcHJvZ3Jlc3MgY2FsbGJhY2suCisgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3B1c2hfc2V0X2NhbGxiYWNrcygKKwlnaXRfcHVzaCAqcHVzaCwKKwlnaXRfcGFja2J1aWxkZXJfcHJvZ3Jlc3MgcGFja19wcm9ncmVzc19jYiwKKwl2b2lkICpwYWNrX3Byb2dyZXNzX2NiX3BheWxvYWQsCisJZ2l0X3B1c2hfdHJhbnNmZXJfcHJvZ3Jlc3MgdHJhbnNmZXJfcHJvZ3Jlc3NfY2IsCisJdm9pZCAqdHJhbnNmZXJfcHJvZ3Jlc3NfY2JfcGF5bG9hZCk7CisKKy8qKgogICogQWRkIGEgcmVmc3BlYyB0byBiZSBwdXNoZWQKICAqCiAgKiBAcGFyYW0gcHVzaCBUaGUgcHVzaCBvYmplY3QKQEAgLTk4LDcgKzEyNyw3IEBACiAgKgogICogQHBhcmFtIHB1c2ggVGhlIHB1c2ggb2JqZWN0CiAgKgotICogQHJldHVybiB0cnVlIGlmIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UKKyAqIEByZXR1cm4gdHJ1ZSBpZiByZW1vdGUgc2lkZSBzdWNjZXNzZnVsbHkgdW5wYWNrZWQsIGZhbHNlIG90aGVyd2lzZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3B1c2hfdW5wYWNrX29rKGdpdF9wdXNoICpwdXNoKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3JlZmxvZy5oIGIvaW5jbHVkZS9naXQyL3JlZmxvZy5oCmluZGV4IDQ5NDQ1MzAuLjJkMWI2ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9yZWZsb2cuaAorKysgYi9pbmNsdWRlL2dpdDIvcmVmbG9nLmgKQEAgLTMxLDEwICszMSwxMSBAQAogICogZ2l0X3JlZmxvZ19mcmVlKCkuCiAgKgogICogQHBhcmFtIG91dCBwb2ludGVyIHRvIHJlZmxvZwotICogQHBhcmFtIHJlZiByZWZlcmVuY2UgdG8gcmVhZCB0aGUgcmVmbG9nIGZvcgorICogQHBhcmFtIHJlcG8gdGhlIHJlcG9zdGlvcnkKKyAqIEBwYXJhbSBuYW1lIHJlZmVyZW5jZSB0byBsb29rIHVwCiAgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X3JlZmxvZ19yZWFkKGdpdF9yZWZsb2cgKipvdXQsIGNvbnN0IGdpdF9yZWZlcmVuY2UgKnJlZik7CitHSVRfRVhURVJOKGludCkgZ2l0X3JlZmxvZ19yZWFkKGdpdF9yZWZsb2cgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCAgY29uc3QgY2hhciAqbmFtZSk7CiAKIC8qKgogICogV3JpdGUgYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJlZmxvZyBvYmplY3QgYmFjayB0byBkaXNrCkBAIC01OSwyNiArNjAsNDUgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVmbG9nX2FwcGVuZChnaXRfcmVmbG9nICpyZWZsb2csIGNvbnN0IGdpdF9vaWQgKmlkLCBjb25zdCBnaXRfc2lnbmF0dXJlICpjb21taXR0ZXIsIGNvbnN0IGNoYXIgKm1zZyk7CiAKIC8qKgotICogUmVuYW1lIHRoZSByZWZsb2cgZm9yIHRoZSBnaXZlbiByZWZlcmVuY2UKKyAqIEFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbmFtZWQgcmVmbG9nLgorICoKKyAqIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBsb2FkcyB0aGUgbmFtZWQgcmVmbG9nLCBhcHBlbmRzIHRvIGl0IGFuZAorICogd3JpdGVzIGl0IGJhY2sgb3V0IHRvIHRoZSBiYWNrZW5kLgorICoKKyAqIGBtc2dgIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgTlVMTC4KKyAqCisgKiBAcGFyYW0gcmVwbyB0aGUgcmVwb3NpdG9yeSB0byBhY3Qgb24KKyAqIEBwYXJhbSBuYW1lIHRoZSByZWZsb2cncyBuYW1lCisgKiBAcGFyYW0gaWQgdGhlIE9JRCB0aGUgcmVmZXJlbmNlIGlzIG5vdyBwb2ludGluZyB0bworICogQHBhcmFtIGNvbW1pdHRlciB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjb21taXR0ZXIKKyAqIEBwYXJhbSBtc2cgdGhlIHJlZmxvZyBtZXNzYWdlCisgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlZmxvZ19hcHBlbmRfdG8oZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGdpdF9vaWQgKmlkLCBjb25zdCBnaXRfc2lnbmF0dXJlICpjb21taXR0ZXIsIGNvbnN0IGNoYXIgKm1zZyk7CisKKy8qKgorICogUmVuYW1lIGEgcmVmbG9nCiAgKgogICogVGhlIHJlZmxvZyB0byBiZSByZW5hbWVkIGlzIGV4cGVjdGVkIHRvIGFscmVhZHkgZXhpc3QKICAqCiAgKiBUaGUgbmV3IG5hbWUgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eS4KICAqIFNlZSBgZ2l0X3JlZmVyZW5jZV9jcmVhdGVfc3ltYm9saWMoKWAgZm9yIHJ1bGVzIGFib3V0IHZhbGlkIG5hbWVzLgogICoKLSAqIEBwYXJhbSByZWYgdGhlIHJlZmVyZW5jZQotICogQHBhcmFtIG5hbWUgdGhlIG5ldyBuYW1lIG9mIHRoZSByZWZlcmVuY2UKKyAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5CisgKiBAcGFyYW0gb2xkX25hbWUgdGhlIG9sZCBuYW1lIG9mIHRoZSByZWZlcmVuY2UKKyAqIEBwYXJhbSBuZXdfbmFtZSB0aGUgbmV3IG5hbWUgb2YgdGhlIHJlZmVyZW5jZQogICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FSU5WQUxJRFNQRUMgb3IgYW4gZXJyb3IgY29kZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X3JlZmxvZ19yZW5hbWUoZ2l0X3JlZmVyZW5jZSAqcmVmLCBjb25zdCBjaGFyICpuYW1lKTsKK0dJVF9FWFRFUk4oaW50KSBnaXRfcmVmbG9nX3JlbmFtZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqb2xkX25hbWUsIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAvKioKICAqIERlbGV0ZSB0aGUgcmVmbG9nIGZvciB0aGUgZ2l2ZW4gcmVmZXJlbmNlCiAgKgotICogQHBhcmFtIHJlZiB0aGUgcmVmZXJlbmNlCisgKiBAcGFyYW0gcmVwbyB0aGUgcmVwb3NpdG9yeQorICogQHBhcmFtIG5hbWUgdGhlIHJlZmxvZyB0byBkZWxldGUKICAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfcmVmbG9nX2RlbGV0ZShnaXRfcmVmZXJlbmNlICpyZWYpOworR0lUX0VYVEVSTihpbnQpIGdpdF9yZWZsb2dfZGVsZXRlKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpuYW1lKTsKIAogLyoqCiAgKiBHZXQgdGhlIG51bWJlciBvZiBsb2cgZW50cmllcyBpbiBhIHJlZmxvZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3JlZnMuaCBiL2luY2x1ZGUvZ2l0Mi9yZWZzLmgKaW5kZXggNzk1ZjdhYi4uNDA0MTk0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3JlZnMuaAorKysgYi9pbmNsdWRlL2dpdDIvcmVmcy5oCkBAIC0zMiw3ICszMiw3IEBACiAgKiBAcGFyYW0gb3V0IHBvaW50ZXIgdG8gdGhlIGxvb2tlZC11cCByZWZlcmVuY2UKICAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIGxvb2sgdXAgdGhlIHJlZmVyZW5jZQogICogQHBhcmFtIG5hbWUgdGhlIGxvbmcgbmFtZSBmb3IgdGhlIHJlZmVyZW5jZSAoZS5nLiBIRUFELCByZWZzL2hlYWRzL21hc3RlciwgcmVmcy90YWdzL3YwLjEuMCwgLi4uKQotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEVOT1RGT1VORCwgRUlOVkFMSURTUEVDIG9yIGFuIGVycm9yIGNvZGUuCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCwgR0lUX0VJTlZBTElEU1BFQyBvciBhbiBlcnJvciBjb2RlLgogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlZmVyZW5jZV9sb29rdXAoZ2l0X3JlZmVyZW5jZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUpOwogCkBAIC00OSw3ICs0OSw3IEBACiAgKiBAcGFyYW0gb3V0IFBvaW50ZXIgdG8gb2lkIHRvIGJlIGZpbGxlZCBpbgogICogQHBhcmFtIHJlcG8gVGhlIHJlcG9zaXRvcnkgaW4gd2hpY2ggdG8gbG9vayB1cCB0aGUgcmVmZXJlbmNlCiAgKiBAcGFyYW0gbmFtZSBUaGUgbG9uZyBuYW1lIGZvciB0aGUgcmVmZXJlbmNlIChlLmcuIEhFQUQsIHJlZnMvaGVhZHMvbWFzdGVyLCByZWZzL3RhZ3MvdjAuMS4wLCAuLi4pCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgRU5PVEZPVU5ELCBFSU5WQUxJRFNQRUMgb3IgYW4gZXJyb3IgY29kZS4KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRU5PVEZPVU5ELCBHSVRfRUlOVkFMSURTUEVDIG9yIGFuIGVycm9yIGNvZGUuCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoCiAJZ2l0X29pZCAqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqbmFtZSk7CkBAIC05NCw3ICs5NCw3IEBACiAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlCiAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgb2YgdGhlIHJlZmVyZW5jZQogICogQHBhcmFtIGZvcmNlIE92ZXJ3cml0ZSBleGlzdGluZyByZWZlcmVuY2VzCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgRUVYSVNUUywgRUlOVkFMSURTUEVDIG9yIGFuIGVycm9yIGNvZGUKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRUVYSVNUUywgR0lUX0VJTlZBTElEU1BFQyBvciBhbiBlcnJvciBjb2RlCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVmZXJlbmNlX3N5bWJvbGljX2NyZWF0ZShnaXRfcmVmZXJlbmNlICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgZm9yY2UpOwogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2UKICAqIEBwYXJhbSBpZCBUaGUgb2JqZWN0IGlkIHBvaW50ZWQgdG8gYnkgdGhlIHJlZmVyZW5jZS4KICAqIEBwYXJhbSBmb3JjZSBPdmVyd3JpdGUgZXhpc3RpbmcgcmVmZXJlbmNlcwotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEVFWElTVFMsIEVJTlZBTElEU1BFQyBvciBhbiBlcnJvciBjb2RlCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VFWElTVFMsIEdJVF9FSU5WQUxJRFNQRUMgb3IgYW4gZXJyb3IgY29kZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlZmVyZW5jZV9jcmVhdGUoZ2l0X3JlZmVyZW5jZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGdpdF9vaWQgKmlkLCBpbnQgZm9yY2UpOwogCkBAIC0yMjUsNyArMjI1LDcgQEAKICAqIEBwYXJhbSBvdXQgUG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCByZWZlcmVuY2UKICAqIEBwYXJhbSByZWYgVGhlIHJlZmVyZW5jZQogICogQHBhcmFtIHRhcmdldCBUaGUgbmV3IHRhcmdldCBmb3IgdGhlIHJlZmVyZW5jZQotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEVJTlZBTElEU1BFQyBvciBhbiBlcnJvciBjb2RlCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VJTlZBTElEU1BFQyBvciBhbiBlcnJvciBjb2RlCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVmZXJlbmNlX3N5bWJvbGljX3NldF90YXJnZXQoCiAJZ2l0X3JlZmVyZW5jZSAqKm91dCwKQEAgLTI2OCw3ICsyNjgsNyBAQAogICogQHBhcmFtIHJlZiBUaGUgcmVmZXJlbmNlIHRvIHJlbmFtZQogICogQHBhcmFtIG5ld19uYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIHJlZmVyZW5jZQogICogQHBhcmFtIGZvcmNlIE92ZXJ3cml0ZSBhbiBleGlzdGluZyByZWZlcmVuY2UKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBFSU5WQUxJRFNQRUMsIEVFWElTVFMgb3IgYW4gZXJyb3IgY29kZQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FSU5WQUxJRFNQRUMsIEdJVF9FRVhJU1RTIG9yIGFuIGVycm9yIGNvZGUKICAqCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVmZXJlbmNlX3JlbmFtZSgKQEAgLTQ0Miw5ICs0NDIsMTggQEAKICAqLwogR0lUX0VYVEVSTihpbnQpIGdpdF9yZWZlcmVuY2VfaXNfcmVtb3RlKGdpdF9yZWZlcmVuY2UgKnJlZik7CiAKKy8qKgorICogQ2hlY2sgaWYgYSByZWZlcmVuY2UgaXMgYSB0YWcKKyAqCisgKiBAcGFyYW0gcmVmIEEgZ2l0IHJlZmVyZW5jZQorICoKKyAqIEByZXR1cm4gMSB3aGVuIHRoZSByZWZlcmVuY2UgbGl2ZXMgaW4gdGhlIHJlZnMvdGFncworICogbmFtZXNwYWNlOyAwIG90aGVyd2lzZS4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9yZWZlcmVuY2VfaXNfdGFnKGdpdF9yZWZlcmVuY2UgKnJlZik7CiAKIHR5cGVkZWYgZW51bSB7Ci0JR0lUX1JFRl9GT1JNQVRfTk9STUFMID0gMCwKKwlHSVRfUkVGX0ZPUk1BVF9OT1JNQUwgPSAwdSwKIAogCS8qKgogCSAqIENvbnRyb2wgd2hldGhlciBvbmUtbGV2ZWwgcmVmbmFtZXMgYXJlIGFjY2VwdGVkCkBAIC00NTIsNyArNDYxLDcgQEAKIAkgKiBjb21wb25lbnRzKS4gVGhvc2UgYXJlIGV4cGVjdGVkIHRvIGJlIHdyaXR0ZW4gb25seSB1c2luZwogCSAqIHVwcGVyY2FzZSBsZXR0ZXJzIGFuZCB1bmRlcnNjb3JlIChGRVRDSF9IRUFELCAuLi4pCiAJICovCi0JR0lUX1JFRl9GT1JNQVRfQUxMT1dfT05FTEVWRUwgPSAoMSA8PCAwKSwKKwlHSVRfUkVGX0ZPUk1BVF9BTExPV19PTkVMRVZFTCA9ICgxdSA8PCAwKSwKIAogCS8qKgogCSAqIEludGVycHJldCB0aGUgcHJvdmlkZWQgbmFtZSBhcyBhIHJlZmVyZW5jZSBwYXR0ZXJuIGZvciBhCkBAIC00NjEsMTQgKzQ3MCwxNCBAQAogCSAqIGluIHBsYWNlIG9mIGEgb25lIGZ1bGwgcGF0aG5hbWUgY29tcG9uZW50CiAJICogKGUuZy4sIGZvby88c3Rhcj4vYmFyIGJ1dCBub3QgZm9vL2JhcjxzdGFyPikuCiAJICovCi0JR0lUX1JFRl9GT1JNQVRfUkVGU1BFQ19QQVRURVJOID0gKDEgPDwgMSksCisJR0lUX1JFRl9GT1JNQVRfUkVGU1BFQ19QQVRURVJOID0gKDF1IDw8IDEpLAogCiAJLyoqCiAJICogSW50ZXJwcmV0IHRoZSBuYW1lIGFzIHBhcnQgb2YgYSByZWZzcGVjIGluIHNob3J0aGFuZCBmb3JtCiAJICogc28gdGhlIGBPTkVMRVZFTGAgbmFtaW5nIHJ1bGVzIGFyZW4ndCBlbmZvcmNlZCBhbmQgJ21hc3RlcicKIAkgKiBiZWNvbWVzIGEgdmFsaWQgbmFtZS4KIAkgKi8KLQlHSVRfUkVGX0ZPUk1BVF9SRUZTUEVDX1NIT1JUSEFORCA9ICgxIDw8IDIpLAorCUdJVF9SRUZfRk9STUFUX1JFRlNQRUNfU0hPUlRIQU5EID0gKDF1IDw8IDIpLAogfSBnaXRfcmVmZXJlbmNlX25vcm1hbGl6ZV90OwogCiAvKioKQEAgLTQ4OCw3ICs0OTcsNyBAQAogICogQHBhcmFtIG5hbWUgUmVmZXJlbmNlIG5hbWUgdG8gYmUgY2hlY2tlZC4KICAqIEBwYXJhbSBmbGFncyBGbGFncyB0byBjb25zdHJhaW4gbmFtZSB2YWxpZGF0aW9uIHJ1bGVzIC0gc2VlIHRoZQogICogICAgICAgICAgICAgIEdJVF9SRUZfRk9STUFUIGNvbnN0YW50cyBhYm92ZS4KLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRUJVRlMgaWYgYnVmZmVyIGlzIHRvbyBzbWFsbCwgRUlOVkFMSURTUEVDCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VCVUZTIGlmIGJ1ZmZlciBpcyB0b28gc21hbGwsIEdJVF9FSU5WQUxJRFNQRUMKICAqIG9yIGFuIGVycm9yIGNvZGUuCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVmZXJlbmNlX25vcm1hbGl6ZV9uYW1lKApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3JlbW90ZS5oIGIvaW5jbHVkZS9naXQyL3JlbW90ZS5oCmluZGV4IDQ1ZDE1ZDAuLjc0MTA5MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9yZW1vdGUuaAorKysgYi9pbmNsdWRlL2dpdDIvcmVtb3RlLmgKQEAgLTI1LDEzICsyNSw2IEBACiBHSVRfQkVHSU5fREVDTAogCiB0eXBlZGVmIGludCAoKmdpdF9yZW1vdGVfcmVuYW1lX3Byb2JsZW1fY2IpKGNvbnN0IGNoYXIgKnByb2JsZW1hdGljX3JlZnNwZWMsIHZvaWQgKnBheWxvYWQpOwotLyoKLSAqIFRPRE86IFRoaXMgZnVuY3Rpb25zIHN0aWxsIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQ6Ci0gKiAtIF9saXN0Y2IvX2ZvcmVhY2gKLSAqIC0gX2FkZAotICogLSBfcmVuYW1lCi0gKiAtIF9kZWwgKG5lZWRzIHN1cHBvcnQgZnJvbSBjb25maWcpCi0gKi8KIAogLyoqCiAgKiBBZGQgYSByZW1vdGUgd2l0aCB0aGUgZGVmYXVsdCBmZXRjaCByZWZzcGVjIHRvIHRoZSByZXBvc2l0b3J5J3MgY29uZmlndXJhdGlvbi4gIFRoaXMKQEAgLTUwLDYgKzQzLDI1IEBACiAJCWNvbnN0IGNoYXIgKnVybCk7CiAKIC8qKgorICogQWRkIGEgcmVtb3RlIHdpdGggdGhlIHByb3ZpZGVkIGZldGNoIHJlZnNwZWMgKG9yIGRlZmF1bHQgaWYgTlVMTCkgdG8gdGhlIHJlcG9zaXRvcnkncworICogY29uZmlndXJhdGlvbi4gIFRoaXMKKyAqIGNhbGxzIGdpdF9yZW1vdGVfc2F2ZSBiZWZvcmUgcmV0dXJuaW5nLgorICoKKyAqIEBwYXJhbSBvdXQgdGhlIHJlc3VsdGluZyByZW1vdGUKKyAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgcmVtb3RlCisgKiBAcGFyYW0gbmFtZSB0aGUgcmVtb3RlJ3MgbmFtZQorICogQHBhcmFtIHVybCB0aGUgcmVtb3RlJ3MgdXJsCisgKiBAcGFyYW0gZmV0Y2ggdGhlIHJlbW90ZSBmZXRjaCB2YWx1ZQorICogQHJldHVybiAwLCBHSVRfRUlOVkFMSURTUEVDLCBHSVRfRUVYSVNUUyBvciBhbiBlcnJvciBjb2RlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfcmVtb3RlX2NyZWF0ZV93aXRoX2ZldGNoc3BlYygKKwkJZ2l0X3JlbW90ZSAqKm91dCwKKwkJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJCWNvbnN0IGNoYXIgKm5hbWUsCisJCWNvbnN0IGNoYXIgKnVybCwKKwkJY29uc3QgY2hhciAqZmV0Y2gpOworCisvKioKICAqIENyZWF0ZSBhIHJlbW90ZSBpbiBtZW1vcnkKICAqCiAgKiBDcmVhdGUgYSByZW1vdGUgd2l0aCB0aGUgZ2l2ZW4gcmVmc3BlYyBpbiBtZW1vcnkuIFlvdSBjYW4gdXNlCkBAIC02MSw3ICs3Myw3IEBACiAgKgogICogQHBhcmFtIG91dCBwb2ludGVyIHRvIHRoZSBuZXcgcmVtb3RlIG9iamVjdAogICogQHBhcmFtIHJlcG8gdGhlIGFzc29jaWF0ZWQgcmVwb3NpdG9yeQotICogQHBhcmFtIGZldGNoIHRoZSBmZXRjaCByZWZzcGVjIHRvIHVzZSBmb3IgdGhpcyByZW1vdGUuIE1heSBiZSBOVUxMIGZvciBkZWZhdWx0cy4KKyAqIEBwYXJhbSBmZXRjaCB0aGUgZmV0Y2ggcmVmc3BlYyB0byB1c2UgZm9yIHRoaXMgcmVtb3RlLgogICogQHBhcmFtIHVybCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkncyBVUkwKICAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCiAgKi8KQEAgLTk2LDYgKzEwOCwxNCBAQAogR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfc2F2ZShjb25zdCBnaXRfcmVtb3RlICpyZW1vdGUpOwogCiAvKioKKyAqIEdldCB0aGUgcmVtb3RlJ3MgcmVwb3NpdG9yeQorICoKKyAqIEBwYXJhbSByZW1vdGUgdGhlIHJlbW90ZQorICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlcG9zaXRvcnkKKyAqLworR0lUX0VYVEVSTihnaXRfcmVwb3NpdG9yeSAqKSBnaXRfcmVtb3RlX293bmVyKGNvbnN0IGdpdF9yZW1vdGUgKnJlbW90ZSk7CisKKy8qKgogICogR2V0IHRoZSByZW1vdGUncyBuYW1lCiAgKgogICogQHBhcmFtIHJlbW90ZSB0aGUgcmVtb3RlCkBAIC0xNDQsOCArMTY0LDExIEBACiAvKioKICAqIEFkZCBhIGZldGNoIHJlZnNwZWMgdG8gdGhlIHJlbW90ZQogICoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBhZGRpbmcgYSBzaW5nbGUgZmV0Y2ggcmVmc3BlYyB0byB0aGUKKyAqIGN1cnJlbnQgbGlzdCBpbiB0aGUgcmVtb3RlLgorICoKICAqIEBwYXJhbSByZW1vdGUgdGhlIHJlbW90ZQotICogQGFwcmFtIHJlZnNwZWMgdGhlIG5ldyBmZXRjaCByZWZzcGVjCisgKiBAcGFyYW0gcmVmc3BlYyB0aGUgbmV3IGZldGNoIHJlZnNwZWMKICAqIEByZXR1cm4gMCBvciBhbiBlcnJvciB2YWx1ZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlbW90ZV9hZGRfZmV0Y2goZ2l0X3JlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICpyZWZzcGVjKTsKQEAgLTE2Miw4ICsxODUsMjEgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVtb3RlX2dldF9mZXRjaF9yZWZzcGVjcyhnaXRfc3RyYXJyYXkgKmFycmF5LCBnaXRfcmVtb3RlICpyZW1vdGUpOwogCiAvKioKKyAqIFNldCB0aGUgcmVtb3RlJ3MgbGlzdCBvZiBmZXRjaCByZWZzcGVjcworICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGFycmF5IGFyZSBjb3BpZWQuCisgKgorICogQHBhcmFtIHJlbW90ZSB0aGUgcmVtb3RlIHRvIG1vZGlmeQorICogQHBhcmFtIGFycmF5IHRoZSBuZXcgbGlzdCBvZiBmZXRjaCByZXNmcGVjcworICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlbW90ZV9zZXRfZmV0Y2hfcmVmc3BlY3MoZ2l0X3JlbW90ZSAqcmVtb3RlLCBnaXRfc3RyYXJyYXkgKmFycmF5KTsKKworLyoqCiAgKiBBZGQgYSBwdXNoIHJlZnNwZWMgdG8gdGhlIHJlbW90ZQogICoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBhZGRpbmcgYSBzaW5nbGUgcHVzaCByZWZzcGVjIHRvIHRoZQorICogY3VycmVudCBsaXN0IGluIHRoZSByZW1vdGUuCisgKgogICogQHBhcmFtIHJlbW90ZSB0aGUgcmVtb3RlCiAgKiBAcGFyYW0gcmVmc3BlYyB0aGUgbmV3IHB1c2ggcmVmc3BlYwogICogQHJldHVybiAwIG9yIGFuIGVycm9yIHZhbHVlCkBAIC0xODIsNiArMjE4LDE2IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X3JlbW90ZV9nZXRfcHVzaF9yZWZzcGVjcyhnaXRfc3RyYXJyYXkgKmFycmF5LCBnaXRfcmVtb3RlICpyZW1vdGUpOwogCiAvKioKKyAqIFNldCB0aGUgcmVtb3RlJ3MgbGlzdCBvZiBwdXNoIHJlZnNwZWNzCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgYXJyYXkgYXJlIGNvcGllZC4KKyAqCisgKiBAcGFyYW0gcmVtb3RlIHRoZSByZW1vdGUgdG8gbW9kaWZ5CisgKiBAcGFyYW0gYXJyYXkgdGhlIG5ldyBsaXN0IG9mIHB1c2ggcmVzZnBlY3MKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfc2V0X3B1c2hfcmVmc3BlY3MoZ2l0X3JlbW90ZSAqcmVtb3RlLCBnaXRfc3RyYXJyYXkgKmFycmF5KTsKKworLyoqCiAgKiBDbGVhciB0aGUgcmVmc3BlY3MKICAqCiAgKiBSZW1vdmUgYWxsIGNvbmZpZ3VyZWQgZmV0Y2ggYW5kIHB1c2ggcmVmc3BlY3MgZnJvbSB0aGUgcmVtb3RlLgpAQCAtMjA4LDE1ICsyNTQsNiBAQAogR0lUX0VYVEVSTihjb25zdCBnaXRfcmVmc3BlYyAqKWdpdF9yZW1vdGVfZ2V0X3JlZnNwZWMoZ2l0X3JlbW90ZSAqcmVtb3RlLCBzaXplX3Qgbik7CiAKIC8qKgotICogUmVtb3ZlIGEgcmVmc3BlYyBmcm9tIHRoZSByZW1vdGUKLSAqCi0gKiBAcGFyYW0gcmVtb3RlIHRoZSByZW1vdGUgdG8gcXVlcnkKLSAqIEBwYXJhbSBuIHRoZSByZWZzcGVjIHRvIHJlbW92ZQotICogQHJldHVybiAwIG9yIEdJVF9FTk9URk9VTkQKLSAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfcmVtb3ZlX3JlZnNwZWMoZ2l0X3JlbW90ZSAqcmVtb3RlLCBzaXplX3Qgbik7Ci0KLS8qKgogICogT3BlbiBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUKICAqCiAgKiBUaGUgdHJhbnNwb3J0IGlzIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSBVUkwuIFRoZSBkaXJlY3Rpb24gYXJndW1lbnQKQEAgLTIzNiwzNiArMjczLDMwIEBACiAgKiBUaGUgcmVtb3RlIChvciBtb3JlIGV4YWN0bHkgaXRzIHRyYW5zcG9ydCkgbXVzdCBiZSBjb25uZWN0ZWQuIFRoZQogICogbWVtb3J5IGJlbG9uZ3MgdG8gdGhlIHJlbW90ZS4KICAqCi0gKiBJZiB5b3UgYSByZXR1cm4gYSBub24temVybyB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFjaywgdGhpcyB3aWxsIHN0b3AKLSAqIGxvb3Bpbmcgb3ZlciB0aGUgcmVmcy4KKyAqIFRoZSBhcnJheSB3aWxsIHN0YXkgdmFsaWQgYXMgbG9uZyBhcyB0aGUgcmVtb3RlIG9iamVjdCBleGlzdHMgYW5kCisgKiBpdHMgdHJhbnNwb3J0IGlzbid0IGNoYW5nZWQsIGJ1dCBhIGNvcHkgaXMgcmVjb21tZW5kZWQgZm9yIHVzYWdlIG9mCisgKiB0aGUgZGF0YS4KICAqCisgKiBAcGFyYW0gb3V0IHBvaW50ZXIgdG8gdGhlIGFycmF5CisgKiBAcGFyYW0gc2l6ZSB0aGUgbnVtYmVyIG9mIHJlbW90ZSBoZWFkcwogICogQHBhcmFtIHJlbW90ZSB0aGUgcmVtb3RlCi0gKiBAcGFyYW0gbGlzdF9jYiBmdW5jdGlvbiB0byBjYWxsIHdpdGggZWFjaCByZWYgZGlzY292ZXJlZCBhdCB0aGUgcmVtb3RlCi0gKiBAcGFyYW0gcGF5bG9hZCBhZGRpdGlvbmFsIGRhdGEgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVTRVIgb24gbm9uLXplcm8gY2FsbGJhY2ssIG9yIGVycm9yIGNvZGUKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfcmVtb3RlX2xzKGdpdF9yZW1vdGUgKnJlbW90ZSwgZ2l0X2hlYWRsaXN0X2NiIGxpc3RfY2IsIHZvaWQgKnBheWxvYWQpOworR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfbHMoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqKm91dCwgIHNpemVfdCAqc2l6ZSwgZ2l0X3JlbW90ZSAqcmVtb3RlKTsKIAogLyoqCi0gKiBEb3dubG9hZCB0aGUgcGFja2ZpbGUKKyAqIERvd25sb2FkIGFuZCBpbmRleCB0aGUgcGFja2ZpbGUKICAqCi0gKiBOZWdvdGlhdGUgd2hhdCBvYmplY3RzIHNob3VsZCBiZSBkb3dubG9hZGVkIGFuZCBkb3dubG9hZCB0aGUKLSAqIHBhY2tmaWxlIHdpdGggdGhvc2Ugb2JqZWN0cy4gVGhlIHBhY2tmaWxlIGlzIGRvd25sb2FkZWQgd2l0aCBhCi0gKiB0ZW1wb3JhcnkgZmlsZW5hbWUsIGFzIGl0J3MgZmluYWwgbmFtZSBpcyBub3Qga25vd24geWV0LiBJZiB0aGVyZQotICogd2FzIG5vIHBhY2tmaWxlIG5lZWRlZCAoYWxsIHRoZSBvYmplY3RzIHdlcmUgYXZhaWxhYmxlIGxvY2FsbHkpLAotICogZmlsZW5hbWUgd2lsbCBiZSBOVUxMIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gc3VjY2Vzcy4KKyAqIENvbm5lY3QgdG8gdGhlIHJlbW90ZSBpZiBpdCBoYXNuJ3QgYmVlbiBkb25lIHlldCwgbmVnb3RpYXRlIHdpdGgKKyAqIHRoZSByZW1vdGUgZ2l0IHdoaWNoIG9iamVjdHMgYXJlIG1pc3NpbmcsIGRvd25sb2FkIGFuZCBpbmRleCB0aGUKKyAqIHBhY2tmaWxlLgogICoKLSAqIEBwYXJhbSByZW1vdGUgdGhlIHJlbW90ZSB0byBkb3dubG9hZCBmcm9tCi0gKiBAcGFyYW0gcHJvZ3Jlc3NfY2IgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHByb2dyZXNzIGluZm9ybWF0aW9uLiAgQmUgYXdhcmUgdGhhdAotICogdGhpcyBpcyBjYWxsZWQgaW5saW5lIHdpdGggbmV0d29yayBhbmQgaW5kZXhpbmcgb3BlcmF0aW9ucywgc28gcGVyZm9ybWFuY2UKLSAqIG1heSBiZSBhZmZlY3RlZC4KLSAqIEBwYXJhbSBwYXlsb2FkIHBheWxvYWQgZm9yIHRoZSBwcm9ncmVzcyBjYWxsYmFjaworICogVGhlIC5pZHggZmlsZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGJvdGggaXQgYW5kIHRoZSBwYWNrZmlsZSB3aXRoIGJlCisgKiByZW5hbWVkIHRvIHRoZWlyIGZpbmFsIG5hbWUuCisgKgogICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKICAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfZG93bmxvYWQoCi0JCWdpdF9yZW1vdGUgKnJlbW90ZSwKLQkJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzX2NhbGxiYWNrIHByb2dyZXNzX2NiLAotCQl2b2lkICpwYXlsb2FkKTsKK0dJVF9FWFRFUk4oaW50KSBnaXRfcmVtb3RlX2Rvd25sb2FkKGdpdF9yZW1vdGUgKnJlbW90ZSk7CiAKIC8qKgogICogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGlzIGNvbm5lY3RlZApAQCAtMzE3LDYgKzM0OCwxNyBAQAogR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMoZ2l0X3JlbW90ZSAqcmVtb3RlKTsKIAogLyoqCisgKiBEb3dubG9hZCBuZXcgZGF0YSBhbmQgdXBkYXRlIHRpcHMKKyAqCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjb25uZWN0IHRvIGEgcmVtb3RlLCBkb3dubG9hZCB0aGUgZGF0YSwKKyAqIGRpc2Nvbm5lY3QgYW5kIHVwZGF0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorICoKKyAqIEBwYXJhbSByZW1vdGUgdGhlIHJlbW90ZSB0byBmZXRjaCBmcm9tCisgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlbW90ZV9mZXRjaChnaXRfcmVtb3RlICpyZW1vdGUpOworCisvKioKICAqIFJldHVybiB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgcmVtb3RlIFVSTAogICoKICAqIEBwYXJhbSB1cmwgdGhlIHVybCB0byBjaGVjawpAQCAtMzUyLDIxICszOTQsNiBAQAogR0lUX0VYVEVSTih2b2lkKSBnaXRfcmVtb3RlX2NoZWNrX2NlcnQoZ2l0X3JlbW90ZSAqcmVtb3RlLCBpbnQgY2hlY2spOwogCiAvKioKLSAqIFNldCBhIGNyZWRlbnRpYWxzIGFjcXVpc2l0aW9uIGNhbGxiYWNrIGZvciB0aGlzIHJlbW90ZS4gSWYgdGhlIHJlbW90ZSBpcwotICogbm90IGF2YWlsYWJsZSBmb3IgYW5vbnltb3VzIGFjY2VzcywgdGhlbiB5b3UgbXVzdCBzZXQgdGhpcyBjYWxsYmFjayBpbiBvcmRlcgotICogdG8gcHJvdmlkZSBjcmVkZW50aWFscyB0byB0aGUgdHJhbnNwb3J0IGF0IHRoZSB0aW1lIG9mIGF1dGhlbnRpY2F0aW9uCi0gKiBmYWlsdXJlIHNvIHRoYXQgcmV0cnkgY2FuIGJlIHBlcmZvcm1lZC4KLSAqCi0gKiBAcGFyYW0gcmVtb3RlIHRoZSByZW1vdGUgdG8gY29uZmlndXJlCi0gKiBAcGFyYW0gY3JlZF9hY3F1aXJlX2NiIFRoZSBjcmVkZW50aWFscyBhY3F1aXNpdGlvbiBjYWxsYmFjayB0byB1c2UgKGRlZmF1bHRzCi0gKiB0byBOVUxMKQotICovCi1HSVRfRVhURVJOKHZvaWQpIGdpdF9yZW1vdGVfc2V0X2NyZWRfYWNxdWlyZV9jYigKLQlnaXRfcmVtb3RlICpyZW1vdGUsCi0JZ2l0X2NyZWRfYWNxdWlyZV9jYiBjcmVkX2FjcXVpcmVfY2IsCi0Jdm9pZCAqcGF5bG9hZCk7Ci0KLS8qKgogICogU2V0cyBhIGN1c3RvbSB0cmFuc3BvcnQgZm9yIHRoZSByZW1vdGUuIFRoZSBjYWxsZXIgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uCiAgKiB0byBieXBhc3MgdGhlIGF1dG9tYXRpYyBkaXNjb3Zlcnkgb2YgYSB0cmFuc3BvcnQgYnkgVVJMIHNjaGVtZSAoaS5lLgogICogaHR0cDovLywgaHR0cHM6Ly8sIGdpdDovLykgYW5kIHN1cHBseSB0aGVpciBvd24gdHJhbnNwb3J0IHRvIGJlIHVzZWQKQEAgLTM5NSwxMyArNDIyLDQ3IEBACiAvKioKICAqIFRoZSBjYWxsYmFjayBzZXR0aW5ncyBzdHJ1Y3R1cmUKICAqCi0gKiBTZXQgdGhlIGNhbGJhY2tzIHRvIGJlIGNhbGxlZCBieSB0aGUgcmVtb3RlLgorICogU2V0IHRoZSBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIGJ5IHRoZSByZW1vdGUgd2hlbiBpbmZvcm1pbmcgdGhlIHVzZXIKKyAqIGFib3V0IHRoZSBwcm9ncmVzcyBvZiB0aGUgbmV0d29yayBvcGVyYXRpb25zLgogICovCiBzdHJ1Y3QgZ2l0X3JlbW90ZV9jYWxsYmFja3MgewogCXVuc2lnbmVkIGludCB2ZXJzaW9uOwotCXZvaWQgKCpwcm9ncmVzcykoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB2b2lkICpkYXRhKTsKKwkvKioKKwkgKiBUZXh0dWFsIHByb2dyZXNzIGZyb20gdGhlIHJlbW90ZS4gVGV4dCBzZW5kIG92ZXIgdGhlCisJICogcHJvZ3Jlc3Mgc2lkZS1iYW5kIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gKHRoaXMgaXMKKwkgKiB0aGUgJ2NvdW50aW5nIG9iamVjdHMnIG91dHB1dC4KKwkgKi8KKwlpbnQgKCpwcm9ncmVzcykoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB2b2lkICpkYXRhKTsKKworCS8qKgorCSAqIENvbXBsZXRpb24gaXMgY2FsbGVkIHdoZW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBkb3dubG9hZAorCSAqIHByb2Nlc3MgYXJlIGRvbmUgKGN1cnJlbnRseSB1bnVzZWQpLgorCSAqLwogCWludCAoKmNvbXBsZXRpb24pKGdpdF9yZW1vdGVfY29tcGxldGlvbl90eXBlIHR5cGUsIHZvaWQgKmRhdGEpOworCisJLyoqCisJICogVGhpcyB3aWxsIGJlIGNhbGxlZCBpZiB0aGUgcmVtb3RlIGhvc3QgcmVxdWlyZXMKKwkgKiBhdXRoZW50aWNhdGlvbiBpbiBvcmRlciB0byBjb25uZWN0IHRvIGl0LgorCSAqLworCWludCAoKmNyZWRlbnRpYWxzKShnaXRfY3JlZCAqKmNyZWQsIGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqdXNlcm5hbWVfZnJvbV91cmwsIHVuc2lnbmVkIGludCBhbGxvd2VkX3R5cGVzLAl2b2lkICpkYXRhKTsKKworCS8qKgorCSAqIER1cmluZyB0aGUgZG93bmxvYWQgb2YgbmV3IGRhdGEsIHRoaXMgd2lsbCBiZSByZWd1bGFybHkKKwkgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBjb3VudCBvZiBwcm9ncmVzcyBkb25lIGJ5IHRoZQorCSAqIGluZGV4ZXIuCisJICovCisJaW50ICgqdHJhbnNmZXJfcHJvZ3Jlc3MpKGNvbnN0IGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMsIHZvaWQgKmRhdGEpOworCisJLyoqCisJICogRWFjaCB0aW1lIGEgcmVmZXJlbmNlIGlzIHVwZGF0ZWQgbG9jYWxseSwgdGhpcyBmdW5jdGlvbgorCSAqIHdpbGwgYmUgY2FsbGVkIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgaXQuCisJICovCiAJaW50ICgqdXBkYXRlX3RpcHMpKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IGdpdF9vaWQgKmEsIGNvbnN0IGdpdF9vaWQgKmIsIHZvaWQgKmRhdGEpOworCisJLyoqCisJICogVGhpcyB3aWxsIGJlIHBhc3NlZCB0byBlYWNoIG9mIHRoZSBjYWxsYmFja3MgaW4gdGhpcyBzdHJ1Y3QKKwkgKiBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuCisJICovCiAJdm9pZCAqcGF5bG9hZDsKIH07CiAKQEAgLTQxOCw3ICs0NzksNyBAQAogICogQHBhcmFtIGNhbGxiYWNrcyBhIHBvaW50ZXIgdG8gdGhlIHVzZXIncyBjYWxsYmFjayBzZXR0aW5ncwogICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKICAqLwotR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhnaXRfcmVtb3RlICpyZW1vdGUsIGdpdF9yZW1vdGVfY2FsbGJhY2tzICpjYWxsYmFja3MpOworR0lUX0VYVEVSTihpbnQpIGdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhnaXRfcmVtb3RlICpyZW1vdGUsIGNvbnN0IGdpdF9yZW1vdGVfY2FsbGJhY2tzICpjYWxsYmFja3MpOwogCiAvKioKICAqIEdldCB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgdGhhdCBpcyBmaWxsZWQgaW4gYnkgdGhlIGZldGNoIG9wZXJhdGlvbi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9yZXBvc2l0b3J5LmggYi9pbmNsdWRlL2dpdDIvcmVwb3NpdG9yeS5oCmluZGV4IDIxNjRjZmEuLmI0ZDU2MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9yZXBvc2l0b3J5LmgKKysrIGIvaW5jbHVkZS9naXQyL3JlcG9zaXRvcnkuaApAQCAtOTQsMTAgKzk0LDE0IEBACiAgKiAgIGNoYW5nZXMgZnJvbSB0aGUgYHN0YXRgIHN5c3RlbSBjYWxsKS4gIChFLmcuIFNlYXJjaGluZyBpbiBhIHVzZXIncyBob21lCiAgKiAgIGRpcmVjdG9yeSAiL2hvbWUvdXNlci9zb3VyY2UvIiB3aWxsIG5vdCByZXR1cm4gIi8uZ2l0LyIgYXMgdGhlIGZvdW5kCiAgKiAgIHJlcG8gaWYgIi8iIGlzIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0gdGhhbiAiL2hvbWUiLikKKyAqICogR0lUX1JFUE9TSVRPUllfT1BFTl9CQVJFIC0gT3BlbiByZXBvc2l0b3J5IGFzIGEgYmFyZSByZXBvIHJlZ2FyZGxlc3MKKyAqICAgb2YgY29yZS5iYXJlIGNvbmZpZywgYW5kIGRlZmVyIGxvYWRpbmcgY29uZmlnIGZpbGUgZm9yIGZhc3RlciBzZXR1cC4KKyAqICAgVW5saWtlIGBnaXRfcmVwb3NpdG9yeV9vcGVuX2JhcmVgLCB0aGlzIGNhbiBmb2xsb3cgZ2l0bGlua3MuCiAgKi8KIHR5cGVkZWYgZW51bSB7CiAJR0lUX1JFUE9TSVRPUllfT1BFTl9OT19TRUFSQ0ggPSAoMSA8PCAwKSwKIAlHSVRfUkVQT1NJVE9SWV9PUEVOX0NST1NTX0ZTICA9ICgxIDw8IDEpLAorCUdJVF9SRVBPU0lUT1JZX09QRU5fQkFSRSAgICAgID0gKDEgPDwgMiksCiB9IGdpdF9yZXBvc2l0b3J5X29wZW5fZmxhZ190OwogCiAvKioKQEAgLTE3OCw3ICsxODIsNyBAQAogICogd2hlbiBpbml0aWFsaXppbmcgYSBuZXcgcmVwby4gIERldGFpbHMgb2YgaW5kaXZpZHVhbCB2YWx1ZXMgYXJlOgogICoKICAqICogQkFSRSAgIC0gQ3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IHdpdGggbm8gd29ya2luZyBkaXJlY3RvcnkuCi0gKiAqIE5PX1JFSU5JVCAtIFJldHVybiBhbiBFRVhJU1RTIGVycm9yIGlmIHRoZSByZXBvX3BhdGggYXBwZWFycyB0bworICogKiBOT19SRUlOSVQgLSBSZXR1cm4gYW4gR0lUX0VFWElTVFMgZXJyb3IgaWYgdGhlIHJlcG9fcGF0aCBhcHBlYXJzIHRvCiAgKiAgICAgICAgYWxyZWFkeSBiZSBhbiBnaXQgcmVwb3NpdG9yeS4KICAqICogTk9fRE9UR0lUX0RJUiAtIE5vcm1hbGx5IGEgIi8uZ2l0LyIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcmVwbwogICogICAgICAgIHBhdGggZm9yIG5vbi1iYXJlIHJlcG9zIChpZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZSksIGJ1dApAQCAtMjkzLDcgKzI5Nyw3IEBACiAgKiBAcGFyYW0gb3V0IHBvaW50ZXIgdG8gdGhlIHJlZmVyZW5jZSB3aGljaCB3aWxsIGJlIHJldHJpZXZlZAogICogQHBhcmFtIHJlcG8gYSByZXBvc2l0b3J5IG9iamVjdAogICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRU9SUEhBTkVESEVBRCB3aGVuIEhFQUQgcG9pbnRzIHRvIGEgbm9uIGV4aXN0aW5nCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VVTkJPUk5CUkFOQ0ggd2hlbiBIRUFEIHBvaW50cyB0byBhIG5vbiBleGlzdGluZwogICogYnJhbmNoLCBHSVRfRU5PVEZPVU5EIHdoZW4gSEVBRCBpcyBtaXNzaW5nOyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfaGVhZChnaXRfcmVmZXJlbmNlICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CkBAIC0zMTEsMTYgKzMxNSwxNiBAQAogR0lUX0VYVEVSTihpbnQpIGdpdF9yZXBvc2l0b3J5X2hlYWRfZGV0YWNoZWQoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOwogCiAvKioKLSAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBhbiBvcnBoYW4KKyAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBpcyB1bmJvcm4KICAqCi0gKiBBbiBvcnBoYW4gYnJhbmNoIGlzIG9uZSBuYW1lZCBmcm9tIEhFQUQgYnV0IHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4KKyAqIEFuIHVuYm9ybiBicmFuY2ggaXMgb25lIG5hbWVkIGZyb20gSEVBRCBidXQgd2hpY2ggZG9lc24ndCBleGlzdCBpbgogICogdGhlIHJlZnMgbmFtZXNwYWNlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY29tbWl0IHRvIHBvaW50IHRvLgogICoKICAqIEBwYXJhbSByZXBvIFJlcG8gdG8gdGVzdAotICogQHJldHVybiAxIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBhbiBvcnBoYW4sIDAgaWYgaXQncyBub3Q7IGVycm9yCisgKiBAcmV0dXJuIDEgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHVuYm9ybiwgMCBpZiBpdCdzIG5vdDsgZXJyb3IKICAqIGNvZGUgaWYgdGhlcmUgd2FzIGFuIGVycm9yCiAgKi8KLUdJVF9FWFRFUk4oaW50KSBnaXRfcmVwb3NpdG9yeV9oZWFkX29ycGhhbihnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CitHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfaGVhZF91bmJvcm4oZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOwogCiAvKioKICAqIENoZWNrIGlmIGEgcmVwb3NpdG9yeSBpcyBlbXB0eQpAQCAtNDcxLDcgKzQ3NSw3IEBACiAgKiBAcGFyYW0gb3V0IEJ1ZmZlciB0byB3cml0ZSBkYXRhIGludG8gb3IgTlVMTCB0byBqdXN0IHJlYWQgcmVxdWlyZWQgc2l6ZQogICogQHBhcmFtIGxlbiBMZW5ndGggb2YgYG91dGAgYnVmZmVyIGluIGJ5dGVzCiAgKiBAcGFyYW0gcmVwbyBSZXBvc2l0b3J5IHRvIHJlYWQgcHJlcGFyZWQgbWVzc2FnZSBmcm9tCi0gKiBAcmV0dXJuIEdJVF9FTk9VVEZPVU5EIGlmIG5vIG1lc3NhZ2UgZXhpc3RzLCBvdGhlciB2YWx1ZSA8IDAgZm9yIG90aGVyCisgKiBAcmV0dXJuIEdJVF9FTk9URk9VTkQgaWYgbm8gbWVzc2FnZSBleGlzdHMsIG90aGVyIHZhbHVlIDwgMCBmb3Igb3RoZXIKICAqICAgICAgICAgZXJyb3JzLCBvciB0b3RhbCBieXRlcyBpbiBtZXNzYWdlIChtYXkgYmUgPiBgbGVuYCkgb24gc3VjY2VzcwogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfbWVzc2FnZShjaGFyICpvdXQsIHNpemVfdCBsZW4sIGdpdF9yZXBvc2l0b3J5ICpyZXBvKTsKQEAgLTYwMSwxMyArNjA1LDEzIEBACiAgKiBJZiB0aGUgSEVBRCBpcyBhbHJlYWR5IGRldGFjaGVkIGFuZCBwb2ludHMgdG8gYSBUYWcsIHRoZSBIRUFEIGlzCiAgKiB1cGRhdGVkIGludG8gbWFraW5nIGl0IHBvaW50IHRvIHRoZSBwZWVsZWQgQ29tbWl0LCBhbmQgMCBpcyByZXR1cm5lZC4KICAqCi0gKiBJZiB0aGUgSEVBRCBpcyBhbHJlYWR5IGRldGFjaGVkIGFuZCBwb2ludHMgdG8gYSBub24gY29tbWl0aXNoLCB0aGUgSEVBRCBpcyAKKyAqIElmIHRoZSBIRUFEIGlzIGFscmVhZHkgZGV0YWNoZWQgYW5kIHBvaW50cyB0byBhIG5vbiBjb21taXRpc2gsIHRoZSBIRUFEIGlzCiAgKiB1bmFsdGVyZWQsIGFuZCAtMSBpcyByZXR1cm5lZC4KICAqCiAgKiBPdGhlcndpc2UsIHRoZSBIRUFEIHdpbGwgYmUgZGV0YWNoZWQgYW5kIHBvaW50IHRvIHRoZSBwZWVsZWQgQ29tbWl0LgogICoKICAqIEBwYXJhbSByZXBvIFJlcG9zaXRvcnkgcG9pbnRlcgotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FT1JQSEFORURIRUFEIHdoZW4gSEVBRCBwb2ludHMgdG8gYSBub24gZXhpc3RpbmcKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRVVOQk9STkJSQU5DSCB3aGVuIEhFQUQgcG9pbnRzIHRvIGEgbm9uIGV4aXN0aW5nCiAgKiBicmFuY2ggb3IgYW4gZXJyb3IgY29kZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfZGV0YWNoX2hlYWQoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcmV2cGFyc2UuaCBiL2luY2x1ZGUvZ2l0Mi9yZXZwYXJzZS5oCmluZGV4IDc4NmE5ZGEuLmQxNzBlMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9yZXZwYXJzZS5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9yZXZwYXJzZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKIAotCiAvKioKICAqIEBmaWxlIGdpdDIvcmV2cGFyc2UuaAogICogQGJyaWVmIEdpdCByZXZpc2lvbiBwYXJzaW5nIHJvdXRpbmVzCkBAIC0yMSwyNyArMjAsMzcgQEAKIEdJVF9CRUdJTl9ERUNMCiAKIC8qKgotICogRmluZCBhIHNpbmdsZSBvYmplY3QsIGFzIHNwZWNpZmllZCBieSBhIHJldmlzaW9uIHN0cmluZy4gU2VlIGBtYW4gZ2l0cmV2aXNpb25zYCwKLSAqIG9yIGh0dHA6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZXYtcGFyc2UuaHRtbCNfc3BlY2lmeWluZ19yZXZpc2lvbnMgZm9yCisgKiBGaW5kIGEgc2luZ2xlIG9iamVjdCwgYXMgc3BlY2lmaWVkIGJ5IGEgcmV2aXNpb24gc3RyaW5nLgorICoKKyAqIFNlZSBgbWFuIGdpdHJldmlzaW9uc2AsIG9yCisgKiBodHRwOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtcmV2LXBhcnNlLmh0bWwjX3NwZWNpZnlpbmdfcmV2aXNpb25zIGZvcgogICogaW5mb3JtYXRpb24gb24gdGhlIHN5bnRheCBhY2NlcHRlZC4KICAqCisgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IHNob3VsZCBiZSByZWxlYXNlZCB3aXRoIGBnaXRfb2JqZWN0X2ZyZWVgIHdoZW4gbm8KKyAqIGxvbmdlciBuZWVkZWQuCisgKgogICogQHBhcmFtIG91dCBwb2ludGVyIHRvIG91dHB1dCBvYmplY3QKICAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIHNlYXJjaCBpbgogICogQHBhcmFtIHNwZWMgdGhlIHRleHR1YWwgc3BlY2lmaWNhdGlvbiBmb3IgYW4gb2JqZWN0CiAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCwgR0lUX0VBTUJJR1VPVVMsIEdJVF9FSU5WQUxJRFNQRUMgb3IgYW4gZXJyb3IgY29kZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X3JldnBhcnNlX3NpbmdsZShnaXRfb2JqZWN0ICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqc3BlYyk7CitHSVRfRVhURVJOKGludCkgZ2l0X3JldnBhcnNlX3NpbmdsZSgKKwlnaXRfb2JqZWN0ICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqc3BlYyk7CiAKIC8qKgotICogRmluZCBhIHNpbmdsZSBvYmplY3QsIGFzIHNwZWNpZmllZCBieSBhIHJldmlzaW9uIHN0cmluZy4KLSAqIFNlZSBgbWFuIGdpdHJldmlzaW9uc2AsCi0gKiBvciBodHRwOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtcmV2LXBhcnNlLmh0bWwjX3NwZWNpZnlpbmdfcmV2aXNpb25zIGZvcgorICogRmluZCBhIHNpbmdsZSBvYmplY3QgYW5kIGludGVybWVkaWF0ZSByZWZlcmVuY2UgYnkgYSByZXZpc2lvbiBzdHJpbmcuCisgKgorICogU2VlIGBtYW4gZ2l0cmV2aXNpb25zYCwgb3IKKyAqIGh0dHA6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZXYtcGFyc2UuaHRtbCNfc3BlY2lmeWluZ19yZXZpc2lvbnMgZm9yCiAgKiBpbmZvcm1hdGlvbiBvbiB0aGUgc3ludGF4IGFjY2VwdGVkLgogICoKICAqIEluIHNvbWUgY2FzZXMgKGBAezwtbj59YCBvciBgPGJyYW5jaG5hbWU+QHt1cHN0cmVhbX1gKSwgdGhlIGV4cHJlc3Npb24gbWF5CiAgKiBwb2ludCB0byBhbiBpbnRlcm1lZGlhdGUgcmVmZXJlbmNlLiBXaGVuIHN1Y2ggZXhwcmVzc2lvbnMgYXJlIGJlaW5nIHBhc3NlZAogICogaW4sIGByZWZlcmVuY2Vfb3V0YCB3aWxsIGJlIHZhbHVlZCBhcyB3ZWxsLgogICoKKyAqIFRoZSByZXR1cm5lZCBvYmplY3Qgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggYGdpdF9vYmplY3RfZnJlZWAgYW5kIHRoZQorICogcmV0dXJuZWQgcmVmZXJlbmNlIHdpdGggYGdpdF9yZWZlcmVuY2VfZnJlZWAgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICoKICAqIEBwYXJhbSBvYmplY3Rfb3V0IHBvaW50ZXIgdG8gb3V0cHV0IG9iamVjdAogICogQHBhcmFtIHJlZmVyZW5jZV9vdXQgcG9pbnRlciB0byBvdXRwdXQgcmVmZXJlbmNlIG9yIE5VTEwKICAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIHNlYXJjaCBpbgpAQCAtNzYsMjUgKzg1LDI3IEBACiAJZ2l0X29iamVjdCAqZnJvbTsKIAkvKiogVGhlIHJpZ2h0IGVsZW1lbnQgb2YgdGhlIHJldnNwZWM7IG11c3QgYmUgZnJlZWQgYnkgdGhlIHVzZXIgKi8KIAlnaXRfb2JqZWN0ICp0bzsKLQkvKiogVGhlIGludGVudCBvZiB0aGUgcmV2c3BlYyAqLworCS8qKiBUaGUgaW50ZW50IG9mIHRoZSByZXZzcGVjIChpLmUuIGBnaXRfcmV2cGFyc2VfbW9kZV90YCBmbGFncykgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9IGdpdF9yZXZzcGVjOwogCiAvKioKLSAqIFBhcnNlIGEgcmV2aXNpb24gc3RyaW5nIGZvciBgZnJvbWAsIGB0b2AsIGFuZCBpbnRlbnQuIFNlZSBgbWFuIGdpdHJldmlzaW9uc2Agb3IKLSAqIGh0dHA6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZXYtcGFyc2UuaHRtbCNfc3BlY2lmeWluZ19yZXZpc2lvbnMgZm9yIGluZm9ybWF0aW9uCi0gKiBvbiB0aGUgc3ludGF4IGFjY2VwdGVkLgorICogUGFyc2UgYSByZXZpc2lvbiBzdHJpbmcgZm9yIGBmcm9tYCwgYHRvYCwgYW5kIGludGVudC4KICAqCi0gKiBAcGFyYW0gcmV2c3BlYyBQb2ludGVyIHRvIGFuIHVzZXItYWxsb2NhdGVkIGdpdF9yZXZzcGVjIHN0cnVjdCB3aGVyZSB0aGUgcmVzdWx0Ci0gKglvZiB0aGUgcmV2LXBhcnNlIHdpbGwgYmUgc3RvcmVkCisgKiBTZWUgYG1hbiBnaXRyZXZpc2lvbnNgIG9yCisgKiBodHRwOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtcmV2LXBhcnNlLmh0bWwjX3NwZWNpZnlpbmdfcmV2aXNpb25zIGZvcgorICogaW5mb3JtYXRpb24gb24gdGhlIHN5bnRheCBhY2NlcHRlZC4KKyAqCisgKiBAcGFyYW0gcmV2c3BlYyBQb2ludGVyIHRvIGFuIHVzZXItYWxsb2NhdGVkIGdpdF9yZXZzcGVjIHN0cnVjdCB3aGVyZQorICoJICAgICAgICAgICAgICB0aGUgcmVzdWx0IG9mIHRoZSByZXYtcGFyc2Ugd2lsbCBiZSBzdG9yZWQKICAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIHNlYXJjaCBpbgogICogQHBhcmFtIHNwZWMgdGhlIHJldi1wYXJzZSBzcGVjIHRvIHBhcnNlCiAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0lOVkFMSURTUEVDLCBHSVRfRU5PVEZPVU5ELCBHSVRfRUFNQklHVU9VUyBvciBhbiBlcnJvciBjb2RlCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmV2cGFyc2UoCi0JCWdpdF9yZXZzcGVjICpyZXZzcGVjLAotCQlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQkJY29uc3QgY2hhciAqc3BlYyk7CisJZ2l0X3JldnNwZWMgKnJldnNwZWMsCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqc3BlYyk7CiAKIAogLyoqIEB9ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcmV2d2Fsay5oIGIvaW5jbHVkZS9naXQyL3JldndhbGsuaAppbmRleCA4YmZlMGI1Li5jNTliNzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvcmV2d2Fsay5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9yZXZ3YWxrLmgKQEAgLTIzMiw2ICsyMzIsMTQgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfcmV2d2Fsa19wdXNoX3JhbmdlKGdpdF9yZXZ3YWxrICp3YWxrLCBjb25zdCBjaGFyICpyYW5nZSk7CiAKIC8qKgorICogU2ltcGxpZnkgdGhlIGhpc3RvcnkgYnkgZmlyc3QtcGFyZW50CisgKgorICogTm8gcGFyZW50cyBvdGhlciB0aGFuIHRoZSBmaXJzdCBmb3IgZWFjaCBjb21taXQgd2lsbCBiZSBlbnF1ZXVlZC4KKyAqLworR0lUX0VYVEVSTih2b2lkKSBnaXRfcmV2d2Fsa19zaW1wbGlmeV9maXJzdF9wYXJlbnQoZ2l0X3JldndhbGsgKndhbGspOworCisKKy8qKgogICogRnJlZSBhIHJldmlzaW9uIHdhbGtlciBwcmV2aW91c2x5IGFsbG9jYXRlZC4KICAqCiAgKiBAcGFyYW0gd2FsayB0cmF2ZXJzYWwgaGFuZGxlIHRvIGNsb3NlLiBJZiBOVUxMIG5vdGhpbmcgb2NjdXJzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3NpZ25hdHVyZS5oIGIvaW5jbHVkZS9naXQyL3NpZ25hdHVyZS5oCmluZGV4IDAwZDE5ZGUuLjJmYTQ2ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9zaWduYXR1cmUuaAorKysgYi9pbmNsdWRlL2dpdDIvc2lnbmF0dXJlLmgKQEAgLTQ4LDYgKzQ4LDE5IEBACiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfc2lnbmF0dXJlX25vdyhnaXRfc2lnbmF0dXJlICoqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICplbWFpbCk7CiAKKy8qKgorICogQ3JlYXRlIGEgbmV3IGFjdGlvbiBzaWduYXR1cmUgd2l0aCBkZWZhdWx0IHVzZXIgYW5kIG5vdyB0aW1lc3RhbXAuCisgKgorICogVGhpcyBsb29rcyB1cCB0aGUgdXNlci5uYW1lIGFuZCB1c2VyLmVtYWlsIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gYW5kCisgKiB1c2VzIHRoZSBjdXJyZW50IHRpbWUgYXMgdGhlIHRpbWVzdGFtcCwgYW5kIGNyZWF0ZXMgYSBuZXcgc2lnbmF0dXJlCisgKiBiYXNlZCBvbiB0aGF0IGluZm9ybWF0aW9uLiAgSXQgd2lsbCByZXR1cm4gR0lUX0VOT1RGT1VORCBpZiBlaXRoZXIgdGhlCisgKiB1c2VyLm5hbWUgb3IgdXNlci5lbWFpbCBhcmUgbm90IHNldC4KKyAqCisgKiBAcGFyYW0gb3V0IG5ldyBzaWduYXR1cmUKKyAqIEBwYXJhbSByZXBvIHJlcG9zaXRvcnkgcG9pbnRlcgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FTk9URk9VTkQgaWYgY29uZmlnIGlzIG1pc3NpbmcsIG9yIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9zaWduYXR1cmVfZGVmYXVsdChnaXRfc2lnbmF0dXJlICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CiAKIC8qKgogICogQ3JlYXRlIGEgY29weSBvZiBhbiBleGlzdGluZyBzaWduYXR1cmUuICBBbGwgaW50ZXJuYWwgc3RyaW5ncyBhcmUgYWxzbwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3N0YXNoLmggYi9pbmNsdWRlL2dpdDIvc3Rhc2guaAppbmRleCA2OGQxYjU0Li5iNDhkMzNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvc3Rhc2guaAorKysgYi9pbmNsdWRlL2dpdDIvc3Rhc2guaApAQCAtNTcsNyArNTcsNyBAQAogR0lUX0VYVEVSTihpbnQpIGdpdF9zdGFzaF9zYXZlKAogCWdpdF9vaWQgKm91dCwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQlnaXRfc2lnbmF0dXJlICpzdGFzaGVyLAorCWNvbnN0IGdpdF9zaWduYXR1cmUgKnN0YXNoZXIsCiAJY29uc3QgY2hhciAqbWVzc2FnZSwKIAl1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvc3RhdHVzLmggYi9pbmNsdWRlL2dpdDIvc3RhdHVzLmgKaW5kZXggNjNhZWEyZi4uNGVjMzQzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3N0YXR1cy5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9zdGF0dXMuaApAQCAtNjAsMjUgKzYwLDI0IEBACiAJY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgaW50IHN0YXR1c19mbGFncywgdm9pZCAqcGF5bG9hZCk7CiAKIC8qKgotICogRm9yIGV4dGVuZGVkIHN0YXR1cywgc2VsZWN0IHRoZSBmaWxlcyBvbiB3aGljaCB0byByZXBvcnQgc3RhdHVzLgorICogU2VsZWN0IHRoZSBmaWxlcyBvbiB3aGljaCB0byByZXBvcnQgc3RhdHVzLgorICoKKyAqIFdpdGggYGdpdF9zdGF0dXNfZm9yZWFjaF9leHRgLCB0aGlzIHdpbGwgY29udHJvbCB3aGljaCBjaGFuZ2VzIGdldAorICogY2FsbGJhY2tzLiAgV2l0aCBgZ2l0X3N0YXR1c19saXN0X25ld2AsIHRoZXNlIHdpbGwgY29udHJvbCB3aGljaAorICogY2hhbmdlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGxpc3QuCiAgKgogICogLSBHSVRfU1RBVFVTX1NIT1dfSU5ERVhfQU5EX1dPUktESVIgaXMgdGhlIGRlZmF1bHQuICBUaGlzIHJvdWdobHkKLSAqICAgbWF0Y2hlcyBgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbmAgd2hlcmUgZWFjaCBmaWxlIGdldHMgYSBjYWxsYmFjawotICogICBpbmRpY2F0aW5nIGl0cyBzdGF0dXMgaW4gdGhlIGluZGV4IGFuZCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgKiAgIG1hdGNoZXMgYGdpdCBzdGF0dXMgLS1wb3JjZWxhaW5gIHJlZ2FyZGluZyB3aGljaCBmaWxlcyBhcmUKKyAqICAgaW5jbHVkZWQgYW5kIGluIHdoYXQgb3JkZXIuCiAgKiAtIEdJVF9TVEFUVVNfU0hPV19JTkRFWF9PTkxZIG9ubHkgZ2l2ZXMgc3RhdHVzIGJhc2VkIG9uIEhFQUQgdG8gaW5kZXgKICAqICAgY29tcGFyaXNvbiwgbm90IGxvb2tpbmcgYXQgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcy4KICAqIC0gR0lUX1NUQVRVU19TSE9XX1dPUktESVJfT05MWSBvbmx5IGdpdmVzIHN0YXR1cyBiYXNlZCBvbiBpbmRleCB0bwogICogICB3b3JraW5nIGRpcmVjdG9yeSBjb21wYXJpc29uLCBub3QgY29tcGFyaW5nIHRoZSBpbmRleCB0byB0aGUgSEVBRC4KLSAqIC0gR0lUX1NUQVRVU19TSE9XX0lOREVYX1RIRU5fV09SS0RJUiBydW5zIGluZGV4LW9ubHkgdGhlbiB3b3JrZGlyLW9ubHksCi0gKiAgIGlzc3VpbmcgKHVwIHRvKSB0d28gY2FsbGJhY2tzIHBlciBmaWxlIChmaXJzdCBpbmRleCwgdGhlbiB3b3JrZGlyKS4KLSAqICAgVGhpcyBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudCB0aGFuIHNlcGFyYXRlIGNhbGxzIGFuZCBjYW4gbWFrZSBpdAotICogICBlYXNpZXIgdG8gZW11bGF0ZSBwbGFpbiBgZ2l0IHN0YXR1c2AgdGV4dCBvdXRwdXQuCiAgKi8KIHR5cGVkZWYgZW51bSB7CiAJR0lUX1NUQVRVU19TSE9XX0lOREVYX0FORF9XT1JLRElSID0gMCwKIAlHSVRfU1RBVFVTX1NIT1dfSU5ERVhfT05MWSA9IDEsCiAJR0lUX1NUQVRVU19TSE9XX1dPUktESVJfT05MWSA9IDIsCi0JR0lUX1NUQVRVU19TSE9XX0lOREVYX1RIRU5fV09SS0RJUiA9IDMsCiB9IGdpdF9zdGF0dXNfc2hvd190OwogCiAvKioKQEAgLTEwOCw3ICsxMDcsNyBAQAogICogLSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0hFQURfVE9fSU5ERVggaW5kaWNhdGVzIHRoYXQgcmVuYW1lIGRldGVjdGlvbgogICogICBzaG91bGQgYmUgcHJvY2Vzc2VkIGJldHdlZW4gdGhlIGhlYWQgYW5kIHRoZSBpbmRleCBhbmQgZW5hYmxlcwogICogICB0aGUgR0lUX1NUQVRVU19JTkRFWF9SRU5BTUVEIGFzIGEgcG9zc2libGUgc3RhdHVzIGZsYWcuCi0gKiAtIEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfSU5ERVhfVE9fV09SS0RJUiBpbmRpY2F0ZXMgdGhhIHJlbmFtZQorICogLSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0lOREVYX1RPX1dPUktESVIgaW5kaWNhdGVzIHRoYXQgcmVuYW1lCiAgKiAgIGRldGVjdGlvbiBzaG91bGQgYmUgcnVuIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyBkaXJlY3RvcnkKICAqICAgYW5kIGVuYWJsZWQgR0lUX1NUQVRVU19XVF9SRU5BTUVEIGFzIGEgcG9zc2libGUgc3RhdHVzIGZsYWcuCiAgKiAtIEdJVF9TVEFUVVNfT1BUX1NPUlRfQ0FTRV9TRU5TSVRJVkVMWSBvdmVycmlkZXMgdGhlIG5hdGl2ZSBjYXNlCkBAIC0xMTcsNiArMTE2LDExIEBACiAgKiAtIEdJVF9TVEFUVVNfT1BUX1NPUlRfQ0FTRV9JTlNFTlNJVElWRUxZIG92ZXJyaWRlcyB0aGUgbmF0aXZlIGNhc2UKICAqICAgc2Vuc2l0aXZpdHkgZm9yIHRoZSBmaWxlIHN5c3RlbSBhbmQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gYmUgaW4KICAqICAgY2FzZS1pbnNlbnNpdGl2ZSBvcmRlcgorICogLSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0ZST01fUkVXUklURVMgaW5kaWNhdGVzIHRoYXQgcmVuYW1lIGRldGVjdGlvbgorICogICBzaG91bGQgaW5jbHVkZSByZXdyaXR0ZW4gZmlsZXMKKyAqIC0gR0lUX1NUQVRVU19PUFRfTk9fUkVGUkVTSCBieXBhc3NlcyB0aGUgZGVmYXVsdCBzdGF0dXMgYmVoYXZpb3Igb2YKKyAqICAgZG9pbmcgYSAic29mdCIgaW5kZXggcmVsb2FkIChpLmUuIHJlbG9hZGluZyB0aGUgaW5kZXggZGF0YSBpZiB0aGUKKyAqICAgZmlsZSBvbiBkaXNrIGhhcyBiZWVuIG1vZGlmaWVkIG91dHNpZGUgbGliZ2l0MikuCiAgKgogICogQ2FsbGluZyBgZ2l0X3N0YXR1c19mb3JlYWNoKClgIGlzIGxpa2UgY2FsbGluZyB0aGUgZXh0ZW5kZWQgdmVyc2lvbgogICogd2l0aDogR0lUX1NUQVRVU19PUFRfSU5DTFVERV9JR05PUkVELCBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRCwKQEAgLTEzNSw2ICsxMzksOCBAQAogCUdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfSU5ERVhfVE9fV09SS0RJUiA9ICgxdSA8PCA4KSwKIAlHSVRfU1RBVFVTX09QVF9TT1JUX0NBU0VfU0VOU0lUSVZFTFkgICAgPSAoMXUgPDwgOSksCiAJR0lUX1NUQVRVU19PUFRfU09SVF9DQVNFX0lOU0VOU0lUSVZFTFkgID0gKDF1IDw8IDEwKSwKKwlHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0ZST01fUkVXUklURVMgICAgPSAoMXUgPDwgMTEpLAorCUdJVF9TVEFUVVNfT1BUX05PX1JFRlJFU0ggICAgICAgICAgICAgICA9ICgxdSA8PCAxMiksCiB9IGdpdF9zdGF0dXNfb3B0X3Q7CiAKICNkZWZpbmUgR0lUX1NUQVRVU19PUFRfREVGQVVMVFMgXApAQCAtMjM1LDEyICsyNDEsMTIgQEAKICAqIFRoaXMgaXMgbm90IHF1aXRlIHRoZSBzYW1lIGFzIGNhbGxpbmcgYGdpdF9zdGF0dXNfZm9yZWFjaF9leHQoKWAgd2l0aAogICogdGhlIHBhdGhzcGVjIHNldCB0byB0aGUgc3BlY2lmaWVkIHBhdGguCiAgKgotICogQHBhcmFtIHN0YXR1c19mbGFncyBUaGUgc3RhdHVzIHZhbHVlIGZvciB0aGUgZmlsZQorICogQHBhcmFtIHN0YXR1c19mbGFncyBPdXRwdXQgY29tYmluYXRpb24gb2YgZ2l0X3N0YXR1c190IHZhbHVlcyBmb3IgZmlsZQogICogQHBhcmFtIHJlcG8gQSByZXBvc2l0b3J5IG9iamVjdAotICogQHBhcmFtIHBhdGggVGhlIGZpbGUgdG8gcmV0cmlldmUgc3RhdHVzIGZvciwgcm9vdGVkIGF0IHRoZSByZXBvJ3Mgd29ya2RpcgorICogQHBhcmFtIHBhdGggVGhlIGZpbGUgdG8gcmV0cmlldmUgc3RhdHVzIGZvciByZWxhdGl2ZSB0byB0aGUgcmVwbyB3b3JrZGlyCiAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQgaW4gdGhlIEhFQUQsCi0gKiAgICAgIGluZGV4LCBhbmQgd29yayB0cmVlLCBHSVRfRUlOVkFMSURQQVRIIGlmIGBwYXRoYCBwb2ludHMgYXQgYSBmb2xkZXIsCi0gKiAgICAgIEdJVF9FQU1CSUdVT1VTIGlmICJwYXRoIiBtYXRjaGVzIG11bHRpcGxlIGZpbGVzLCAtMSBvbiBvdGhlciBlcnJvci4KKyAqICAgICAgaW5kZXgsIGFuZCB3b3JrIHRyZWUsIEdJVF9FQU1CSUdVT1VTIGlmIGBwYXRoYCBtYXRjaGVzIG11bHRpcGxlIGZpbGVzCisgKiAgICAgIG9yIGlmIGl0IHJlZmVycyB0byBhIGZvbGRlciwgYW5kIC0xIG9uIG90aGVyIGVycm9ycy4KICAqLwogR0lUX0VYVEVSTihpbnQpIGdpdF9zdGF0dXNfZmlsZSgKIAl1bnNpZ25lZCBpbnQgKnN0YXR1c19mbGFncywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9zdWJtb2R1bGUuaCBiL2luY2x1ZGUvZ2l0Mi9zdWJtb2R1bGUuaAppbmRleCA5MWI1MzAwLi4xODZmMjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvc3VibW9kdWxlLmgKKysrIGIvaW5jbHVkZS9naXQyL3N1Ym1vZHVsZS5oCkBAIC0xNCw1MSArMTQsMTggQEAKIC8qKgogICogQGZpbGUgZ2l0Mi9zdWJtb2R1bGUuaAogICogQGJyaWVmIEdpdCBzdWJtb2R1bGUgbWFuYWdlbWVudCB1dGlsaXRpZXMKLSAqIEBkZWZncm91cCBnaXRfc3VibW9kdWxlIEdpdCBzdWJtb2R1bGUgbWFuYWdlbWVudCByb3V0aW5lcwotICogQGluZ3JvdXAgR2l0Ci0gKiBAewotICovCi1HSVRfQkVHSU5fREVDTAotCi0vKioKLSAqIE9wYXF1ZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3VibW9kdWxlLgogICoKICAqIFN1Ym1vZHVsZSBzdXBwb3J0IGluIGxpYmdpdDIgYnVpbGRzIGEgbGlzdCBvZiBrbm93biBzdWJtb2R1bGVzIGFuZCBrZWVwcwogICogaXQgaW4gdGhlIHJlcG9zaXRvcnkuICBUaGUgbGlzdCBpcyBidWlsdCBmcm9tIHRoZSAuZ2l0bW9kdWxlcyBmaWxlLCB0aGUKICAqIC5naXQvY29uZmlnIGZpbGUsIHRoZSBpbmRleCwgYW5kIHRoZSBIRUFEIHRyZWUuICBJdGVtcyBpbiB0aGUgd29ya2luZwogICogZGlyZWN0b3J5IHRoYXQgbG9vayBsaWtlIHN1Ym1vZHVsZXMgKGkuZS4gYSBnaXQgcmVwbykgYnV0IGFyZSBub3QKICAqIG1lbnRpb25lZCBpbiB0aG9zZSBwbGFjZXMgd29uJ3QgYmUgdHJhY2tlZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgZ2l0X3N1Ym1vZHVsZSBnaXRfc3VibW9kdWxlOwotCi0vKioKLSAqIFZhbHVlcyB0aGF0IGNvdWxkIGJlIHNwZWNpZmllZCBmb3IgdGhlIHVwZGF0ZSBydWxlIG9mIGEgc3VibW9kdWxlLgogICoKLSAqIFVzZSB0aGUgREVGQVVMVCB2YWx1ZSBpZiB5b3UgaGF2ZSBhbHRlcmVkIHRoZSB1cGRhdGUgdmFsdWUgdmlhCi0gKiBgZ2l0X3N1Ym1vZHVsZV9zZXRfdXBkYXRlKClgIGFuZCB3aXNoIHRvIHJlc2V0IHRvIHRoZSBvcmlnaW5hbCBkZWZhdWx0LgorICogQGRlZmdyb3VwIGdpdF9zdWJtb2R1bGUgR2l0IHN1Ym1vZHVsZSBtYW5hZ2VtZW50IHJvdXRpbmVzCisgKiBAaW5ncm91cCBHaXQKKyAqIEB7CiAgKi8KLXR5cGVkZWYgZW51bSB7Ci0JR0lUX1NVQk1PRFVMRV9VUERBVEVfREVGQVVMVCA9IC0xLAotCUdJVF9TVUJNT0RVTEVfVVBEQVRFX0NIRUNLT1VUID0gMCwKLQlHSVRfU1VCTU9EVUxFX1VQREFURV9SRUJBU0UgPSAxLAotCUdJVF9TVUJNT0RVTEVfVVBEQVRFX01FUkdFID0gMiwKLQlHSVRfU1VCTU9EVUxFX1VQREFURV9OT05FID0gMwotfSBnaXRfc3VibW9kdWxlX3VwZGF0ZV90OwotCi0vKioKLSAqIFZhbHVlcyB0aGF0IGNvdWxkIGJlIHNwZWNpZmllZCBmb3IgaG93IGNsb3NlbHkgdG8gZXhhbWluZSB0aGUKLSAqIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gZ2V0dGluZyBzdWJtb2R1bGUgc3RhdHVzLgotICoKLSAqIFVzZSB0aGUgREVGVUFMVCB2YWx1ZSBpZiB5b3UgaGF2ZSBhbHRlcmVkIHRoZSBpZ25vcmUgdmFsdWUgdmlhCi0gKiBgZ2l0X3N1Ym1vZHVsZV9zZXRfaWdub3JlKClgIGFuZCB3aXNoIHRvIHJlc2V0IHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLQlHSVRfU1VCTU9EVUxFX0lHTk9SRV9ERUZBVUxUID0gLTEsICAvKiByZXNldCB0byBkZWZhdWx0ICovCi0JR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSA9IDAsICAgICAgLyogYW55IGNoYW5nZSBvciB1bnRyYWNrZWQgPT0gZGlydHkgKi8KLQlHSVRfU1VCTU9EVUxFX0lHTk9SRV9VTlRSQUNLRUQgPSAxLCAvKiBkaXJ0eSBpZiB0cmFja2VkIGZpbGVzIGNoYW5nZSAqLwotCUdJVF9TVUJNT0RVTEVfSUdOT1JFX0RJUlRZID0gMiwgICAgIC8qIG9ubHkgZGlydHkgaWYgSEVBRCBtb3ZlZCAqLwotCUdJVF9TVUJNT0RVTEVfSUdOT1JFX0FMTCA9IDMgICAgICAgIC8qIG5ldmVyIGRpcnR5ICovCi19IGdpdF9zdWJtb2R1bGVfaWdub3JlX3Q7CitHSVRfQkVHSU5fREVDTAogCiAvKioKICAqIFJldHVybiBjb2RlcyBmb3Igc3VibW9kdWxlIHN0YXR1cy4KQEAgLTExOSwxOSArODYsOSBAQAogCUdJVF9TVUJNT0RVTEVfU1RBVFVTX1dEX1VOVFJBQ0tFRCAgICAgID0gKDF1IDw8IDEzKSwKIH0gZ2l0X3N1Ym1vZHVsZV9zdGF0dXNfdDsKIAotI2RlZmluZSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5fRkxBR1MgXAotCShHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9IRUFEIHwgXAotCUdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX0lOREVYIHwgXAotCUdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX0NPTkZJRyB8IFwKLQlHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9XRCkKLQotI2RlZmluZSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5ERVhfRkxBR1MgXAotCShHSVRfU1VCTU9EVUxFX1NUQVRVU19JTkRFWF9BRERFRCB8IFwKLQlHSVRfU1VCTU9EVUxFX1NUQVRVU19JTkRFWF9ERUxFVEVEIHwgXAotCUdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOREVYX01PRElGSUVEKQotCi0jZGVmaW5lIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9GTEFHUyBcCi0JfihHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5fRkxBR1MgfCBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5ERVhfRkxBR1MpCisjZGVmaW5lIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19JTl9GTEFHUwkJMHgwMDBGdQorI2RlZmluZSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5ERVhfRkxBR1MJMHgwMDcwdQorI2RlZmluZSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fV0RfRkxBR1MJCTB4M0Y4MHUKIAogI2RlZmluZSBHSVRfU1VCTU9EVUxFX1NUQVRVU19JU19VTk1PRElGSUVEKFMpIFwKIAkoKChTKSAmIH5HSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5fRkxBR1MpID09IDApCkBAIC0zNTksOSArMzE2LDEwIEBACiBHSVRfRVhURVJOKGNvbnN0IGdpdF9vaWQgKikgZ2l0X3N1Ym1vZHVsZV93ZF9pZChnaXRfc3VibW9kdWxlICpzdWJtb2R1bGUpOwogCiAvKioKLSAqIEdldCB0aGUgaWdub3JlIHJ1bGUgZm9yIHRoZSBzdWJtb2R1bGUuCisgKiBHZXQgdGhlIGlnbm9yZSBydWxlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3VibW9kdWxlLgogICoKLSAqIFRoZXJlIGFyZSBmb3VyIGlnbm9yZSB2YWx1ZXM6CisgKiBUaGVzZSB2YWx1ZXMgY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgYGdpdF9zdWJtb2R1bGVfc3RhdHVzKClgIGZvciB0aGlzCisgKiBzdWJtb2R1bGUuICBUaGVyZSBhcmUgZm91ciBpZ25vcmUgdmFsdWVzOgogICoKICAqICAtICoqR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSoqIHdpbGwgY29uc2lkZXIgYW55IGNoYW5nZSB0byB0aGUgY29udGVudHMKICAqICAgIG9mIHRoZSBzdWJtb2R1bGUgZnJvbSBhIGNsZWFuIGNoZWNrb3V0IHRvIGJlIGRpcnR5LCBpbmNsdWRpbmcgdGhlCkBAIC0zNzUsNiArMzMzLDEzIEBACiAgKiAgLSAqKkdJVF9TVUJNT0RVTEVfSUdOT1JFX0FMTCoqIG1lYW5zIG5vdCB0byBvcGVuIHRoZSBzdWJtb2R1bGUgcmVwby4KICAqICAgIFRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGJlIGNvbnNpZGVyIGNsZWFuIHNvIGxvbmcgYXMgdGhlcmUgaXMgYQogICogICAgY2hlY2tlZCBvdXQgdmVyc2lvbiBwcmVzZW50LgorICoKKyAqIHBsdXMgdGhlIHNwZWNpYWwgKipHSVRfU1VCTU9EVUxFX0lHTk9SRV9SRVNFVCoqIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGgKKyAqIGBnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoKWAgdG8gcmV2ZXJ0IHRvIHRoZSBvbi1kaXNrIHNldHRpbmcuCisgKgorICogQHBhcmFtIHN1Ym1vZHVsZSBUaGUgc3VibW9kdWxlIHRvIGNoZWNrCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGdpdF9zdWJtb2R1bGVfaWdub3JlX3QgdmFseXVlIHdoYXQgd2lsbCBiZSB1c2VkIGZvcgorICogICAgICAgICB0aGlzIHN1Ym1vZHVsZS4KICAqLwogR0lUX0VYVEVSTihnaXRfc3VibW9kdWxlX2lnbm9yZV90KSBnaXRfc3VibW9kdWxlX2lnbm9yZSgKIAlnaXRfc3VibW9kdWxlICpzdWJtb2R1bGUpOwpAQCAtMzgyLDE1ICszNDcsMTcgQEAKIC8qKgogICogU2V0IHRoZSBpZ25vcmUgcnVsZSBmb3IgdGhlIHN1Ym1vZHVsZS4KICAqCi0gKiBUaGlzIHNldHMgdGhlIGlnbm9yZSBydWxlIGluIG1lbW9yeSBmb3IgdGhlIHN1Ym1vZHVsZS4gIFRoaXMgd2lsbCBiZSB1c2VkCi0gKiBmb3IgYW55IGZvbGxvd2luZyBhY3Rpb25zIChzdWNoIGFzIGBnaXRfc3VibW9kdWxlX3N0YXR1cygpYCkgd2hpbGUgdGhlCi0gKiBzdWJtb2R1bGUgaXMgaW4gbWVtb3J5LiAgWW91IHNob3VsZCBjYWxsIGBnaXRfc3VibW9kdWxlX3NhdmUoKWAgaWYgeW91Ci0gKiB3YW50IHRvIHBlcnNpc3QgdGhlIG5ldyBpZ25vcmUgcm9sZS4KKyAqIFRoaXMgc2V0cyB0aGUgaW4tbWVtb3J5IGlnbm9yZSBydWxlIGZvciB0aGUgc3VibW9kdWxlIHdoaWNoIHdpbGwKKyAqIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIGBnaXRfc3VibW9kdWxlX3N0YXR1cygpYC4KICAqCi0gKiBDYWxsaW5nIHRoaXMgYWdhaW4gd2l0aCBHSVRfU1VCTU9EVUxFX0lHTk9SRV9ERUZBVUxUIG9yIGNhbGxpbmcKLSAqIGBnaXRfc3VibW9kdWxlX3JlbG9hZCgpYCB3aWxsIHJldmVydCB0aGUgcnVsZSB0byB0aGUgdmFsdWUgdGhhdCB3YXMgaW4gdGhlCi0gKiBvcmlnaW5hbCBjb25maWcuCisgKiBUbyBtYWtlIGNoYW5nZXMgcGVyc2lzdGVudCwgY2FsbCBgZ2l0X3N1Ym1vZHVsZV9zYXZlKClgIHRvIHdyaXRlIHRoZQorICogdmFsdWUgdG8gZGlzayAoaW4gdGhlICIuZ2l0bW9kdWxlcyIgYW5kICIuZ2l0L2NvbmZpZyIgZmlsZXMpLgogICoKKyAqIENhbGwgd2l0aCBgR0lUX1NVQk1PRFVMRV9JR05PUkVfUkVTRVRgIG9yIGNhbGwgYGdpdF9zdWJtb2R1bGVfcmVsb2FkKClgCisgKiB0byByZXZlcnQgdGhlIGluLW1lbW9yeSBydWxlIHRvIHRoZSB2YWx1ZSB0aGF0IGlzIG9uIGRpc2suCisgKgorICogQHBhcmFtIHN1Ym1vZHVsZSBUaGUgc3VibW9kdWxlIHRvIHVwZGF0ZQorICogQHBhcmFtIGlnbm9yZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgaWdub3JlIHJ1bGUKICAqIEByZXR1cm4gb2xkIHZhbHVlIGZvciBpZ25vcmUKICAqLwogR0lUX0VYVEVSTihnaXRfc3VibW9kdWxlX2lnbm9yZV90KSBnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoCkBAIC0zOTgsNyArMzY1LDE2IEBACiAJZ2l0X3N1Ym1vZHVsZV9pZ25vcmVfdCBpZ25vcmUpOwogCiAvKioKLSAqIEdldCB0aGUgdXBkYXRlIHJ1bGUgZm9yIHRoZSBzdWJtb2R1bGUuCisgKiBHZXQgdGhlIHVwZGF0ZSBydWxlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3VibW9kdWxlLgorICoKKyAqIFRoaXMgdmFsdWUgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIGNvbW1hbmQuCisgKiBUaGVyZSBhcmUgZm91ciB1c2VmdWwgdmFsdWVzIGRvY3VtZW50ZWQgd2l0aCBgZ2l0X3N1Ym1vZHVsZV91cGRhdGVfdGAKKyAqIHBsdXMgdGhlIGBHSVRfU1VCTU9EVUxFX1VQREFURV9SRVNFVGAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmV2ZXJ0IHRvCisgKiB0aGUgb24tZGlzayBzZXR0aW5nLgorICoKKyAqIEBwYXJhbSBzdWJtb2R1bGUgVGhlIHN1Ym1vZHVsZSB0byBjaGVjaworICogQHJldHVybiBUaGUgY3VycmVudCBnaXRfc3VibW9kdWxlX3VwZGF0ZV90IHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkCisgKiAgICAgICAgIGZvciB0aGlzIHN1Ym1vZHVsZS4KICAqLwogR0lUX0VYVEVSTihnaXRfc3VibW9kdWxlX3VwZGF0ZV90KSBnaXRfc3VibW9kdWxlX3VwZGF0ZSgKIAlnaXRfc3VibW9kdWxlICpzdWJtb2R1bGUpOwpAQCAtNDA2LDEzICszODIsMTcgQEAKIC8qKgogICogU2V0IHRoZSB1cGRhdGUgcnVsZSBmb3IgdGhlIHN1Ym1vZHVsZS4KICAqCi0gKiBUaGlzIHNldHMgdGhlIHVwZGF0ZSBydWxlIGluIG1lbW9yeSBmb3IgdGhlIHN1Ym1vZHVsZS4gIFlvdSBzaG91bGQgY2FsbAotICogYGdpdF9zdWJtb2R1bGVfc2F2ZSgpYCBpZiB5b3Ugd2FudCB0byBwZXJzaXN0IHRoZSBuZXcgdXBkYXRlIHJ1bGUuCisgKiBUaGUgaW5pdGlhbCB2YWx1ZSBjb21lcyBmcm9tIHRoZSAiLmdpdC9jb25maWciIHNldHRpbmcgb2YKKyAqIGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBmb3IgdGhpcyBzdWJtb2R1bGUgKHdoaWNoIGlzIGluaXRpYWxpemVkIGZyb20KKyAqIHRoZSAiLmdpdG1vZHVsZXMiIGZpbGUpLiAgVXNpbmcgdGhpcyBmdW5jdGlvbiBzZXRzIHRoZSB1cGRhdGUgcnVsZSBpbgorICogbWVtb3J5IGZvciB0aGUgc3VibW9kdWxlLiAgQ2FsbCBgZ2l0X3N1Ym1vZHVsZV9zYXZlKClgIHRvIHdyaXRlIG91dCB0aGUKKyAqIG5ldyB1cGRhdGUgcnVsZS4KICAqCi0gKiBDYWxsaW5nIHRoaXMgYWdhaW4gd2l0aCBHSVRfU1VCTU9EVUxFX1VQREFURV9ERUZBVUxUIG9yIGNhbGxpbmcKLSAqIGBnaXRfc3VibW9kdWxlX3JlbG9hZCgpYCB3aWxsIHJldmVydCB0aGUgcnVsZSB0byB0aGUgdmFsdWUgdGhhdCB3YXMgaW4gdGhlCi0gKiBvcmlnaW5hbCBjb25maWcuCisgKiBDYWxsaW5nIHRoaXMgYWdhaW4gd2l0aCBHSVRfU1VCTU9EVUxFX1VQREFURV9SRVNFVCBvciBjYWxsaW5nCisgKiBgZ2l0X3N1Ym1vZHVsZV9yZWxvYWQoKWAgd2lsbCByZXZlcnQgdGhlIHJ1bGUgdG8gdGhlIG9uIGRpc2sgdmFsdWUuCiAgKgorICogQHBhcmFtIHN1Ym1vZHVsZSBUaGUgc3VibW9kdWxlIHRvIHVwZGF0ZQorICogQHBhcmFtIHVwZGF0ZSBUaGUgbmV3IHZhbHVlIHRvIHVzZQogICogQHJldHVybiBvbGQgdmFsdWUgZm9yIHVwZGF0ZQogICovCiBHSVRfRVhURVJOKGdpdF9zdWJtb2R1bGVfdXBkYXRlX3QpIGdpdF9zdWJtb2R1bGVfc2V0X3VwZGF0ZSgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9zeXMvY29uZmlnLmggYi9pbmNsdWRlL2dpdDIvc3lzL2NvbmZpZy5oCmluZGV4IDExZTU5Y2YuLjQxOWFkN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9zeXMvY29uZmlnLmgKKysrIGIvaW5jbHVkZS9naXQyL3N5cy9jb25maWcuaApAQCAtMjEsNiArMjEsMzMgQEAKIEdJVF9CRUdJTl9ERUNMCiAKIC8qKgorICogRXZlcnkgaXRlcmF0b3IgbXVzdCBoYXZlIHRoaXMgc3RydWN0IGFzIGl0cyBmaXJzdCBlbGVtZW50LCBzbyB0aGUKKyAqIEFQSSBjYW4gdGFsayB0byBpdC4gWW91J2QgZGVmaW5lIHlvdXIgaXRlcmF0b3IgYXMKKyAqCisgKiAgICAgc3RydWN0IG15X2l0ZXJhdG9yIHsKKyAqICAgICAgICAgICAgIGdpdF9jb25maWdfaXRlcmF0b3IgcGFyZW50OworICogICAgICAgICAgICAgLi4uCisgKiAgICAgfQorICoKKyAqIGFuZCBhc3NpZ24gYGl0ZXItPnBhcmVudC5iYWNrZW5kYCB0byB5b3VyIGBnaXRfY29uZmlnX2JhY2tlbmRgLgorICovCitzdHJ1Y3QgZ2l0X2NvbmZpZ19pdGVyYXRvciB7CisJZ2l0X2NvbmZpZ19iYWNrZW5kICpiYWNrZW5kOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCS8qKgorCSAqIFJldHVybiB0aGUgY3VycmVudCBlbnRyeSBhbmQgYWR2YW5jZSB0aGUgaXRlcmF0b3IuIFRoZQorCSAqIG1lbW9yeSBiZWxvbmdzIHRvIHRoZSBsaWJyYXJ5LgorCSAqLworCWludCAoKm5leHQpKGdpdF9jb25maWdfZW50cnkgKiplbnRyeSwgZ2l0X2NvbmZpZ19pdGVyYXRvciAqaXRlcik7CisKKwkvKioKKwkgKiBGcmVlIHRoZSBpdGVyYXRvcgorCSAqLworCXZvaWQgKCpmcmVlKShnaXRfY29uZmlnX2l0ZXJhdG9yICppdGVyKTsKK307CisKKy8qKgogICogR2VuZXJpYyBiYWNrZW5kIHRoYXQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHRvCiAgKiBhY2Nlc3MgYSBjb25maWd1cmF0aW9uIGZpbGUKICAqLwpAQCAtMzEsMTEgKzU4LDExIEBACiAJLyogT3BlbiBtZWFucyBvcGVuIHRoZSBmaWxlL2RhdGFiYXNlIGFuZCBwYXJzZSBpZiBuZWNlc3NhcnkgKi8KIAlpbnQgKCpvcGVuKShzdHJ1Y3QgZ2l0X2NvbmZpZ19iYWNrZW5kICosIGdpdF9jb25maWdfbGV2ZWxfdCBsZXZlbCk7CiAJaW50ICgqZ2V0KShjb25zdCBzdHJ1Y3QgZ2l0X2NvbmZpZ19iYWNrZW5kICosIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqKmVudHJ5KTsKLQlpbnQgKCpnZXRfbXVsdGl2YXIpKHN0cnVjdCBnaXRfY29uZmlnX2JhY2tlbmQgKiwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpyZWdleHAsIGdpdF9jb25maWdfZm9yZWFjaF9jYiBjYWxsYmFjaywgdm9pZCAqcGF5bG9hZCk7CiAJaW50ICgqc2V0KShzdHJ1Y3QgZ2l0X2NvbmZpZ19iYWNrZW5kICosIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpOwogCWludCAoKnNldF9tdWx0aXZhcikoZ2l0X2NvbmZpZ19iYWNrZW5kICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCwgY29uc3QgY2hhciAqdmFsdWUpOwogCWludCAoKmRlbCkoc3RydWN0IGdpdF9jb25maWdfYmFja2VuZCAqLCBjb25zdCBjaGFyICprZXkpOwotCWludCAoKmZvcmVhY2gpKHN0cnVjdCBnaXRfY29uZmlnX2JhY2tlbmQgKiwgY29uc3QgY2hhciAqLCBnaXRfY29uZmlnX2ZvcmVhY2hfY2IgY2FsbGJhY2ssIHZvaWQgKnBheWxvYWQpOworCWludCAoKmRlbF9tdWx0aXZhcikoc3RydWN0IGdpdF9jb25maWdfYmFja2VuZCAqLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnJlZ2V4cCk7CisJaW50ICgqaXRlcmF0b3IpKGdpdF9jb25maWdfaXRlcmF0b3IgKiosIHN0cnVjdCBnaXRfY29uZmlnX2JhY2tlbmQgKik7CiAJaW50ICgqcmVmcmVzaCkoc3RydWN0IGdpdF9jb25maWdfYmFja2VuZCAqKTsKIAl2b2lkICgqZnJlZSkoc3RydWN0IGdpdF9jb25maWdfYmFja2VuZCAqKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvc3lzL2ZpbHRlci5oIGIvaW5jbHVkZS9naXQyL3N5cy9maWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGFkM2FlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9naXQyL3N5cy9maWx0ZXIuaApAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisjaWZuZGVmIElOQ0xVREVfc3lzX2dpdF9maWx0ZXJfaF9fCisjZGVmaW5lIElOQ0xVREVfc3lzX2dpdF9maWx0ZXJfaF9fCisKKyNpbmNsdWRlICJnaXQyL2ZpbHRlci5oIgorCisvKioKKyAqIEBmaWxlIGdpdDIvc3lzL2ZpbHRlci5oCisgKiBAYnJpZWYgR2l0IGZpbHRlciBiYWNrZW5kIGFuZCBwbHVnaW4gcm91dGluZXMKKyAqIEBkZWZncm91cCBnaXRfYmFja2VuZCBHaXQgY3VzdG9tIGJhY2tlbmQgQVBJcworICogQGluZ3JvdXAgR2l0CisgKiBAeworICovCitHSVRfQkVHSU5fREVDTAorCisvKioKKyAqIExvb2sgdXAgYSBmaWx0ZXIgYnkgbmFtZQorICoKKyAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWx0ZXIKKyAqIEByZXR1cm4gUG9pbnRlciB0byB0aGUgZmlsdGVyIG9iamVjdCBvciBOVUxMIGlmIG5vdCBmb3VuZAorICovCitHSVRfRVhURVJOKGdpdF9maWx0ZXIgKikgZ2l0X2ZpbHRlcl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CisKKyNkZWZpbmUgR0lUX0ZJTFRFUl9DUkxGICAiY3JsZiIKKyNkZWZpbmUgR0lUX0ZJTFRFUl9JREVOVCAiaWRlbnQiCisKKy8qKgorICogVGhpcyBpcyBwcmlvcml0eSB0aGF0IHRoZSBpbnRlcm5hbCBDUkxGIGZpbHRlciB3aWxsIGJlIHJlZ2lzdGVyZWQgd2l0aAorICovCisjZGVmaW5lIEdJVF9GSUxURVJfQ1JMRl9QUklPUklUWSAwCisKKy8qKgorICogVGhpcyBpcyBwcmlvcml0eSB0aGF0IHRoZSBpbnRlcm5hbCBpZGVudCBmaWx0ZXIgd2lsbCBiZSByZWdpc3RlcmVkIHdpdGgKKyAqLworI2RlZmluZSBHSVRfRklMVEVSX0lERU5UX1BSSU9SSVRZIDEwMAorCisvKioKKyAqIFRoaXMgaXMgcHJpb3JpdHkgdG8gdXNlIHdpdGggYSBjdXN0b20gZmlsdGVyIHRvIGltaXRhdGUgYSBjb3JlIEdpdAorICogZmlsdGVyIGRyaXZlciwgc28gdGhhdCBpdCB3aWxsIGJlIHJ1biBsYXN0IG9uIGNoZWNrb3V0IGFuZCBmaXJzdCBvbgorICogY2hlY2tpbi4gIFlvdSBkbyBub3QgaGF2ZSB0byB1c2UgdGhpcywgYnV0IGl0IGhlbHBzIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUgR0lUX0ZJTFRFUl9EUklWRVJfUFJJT1JJVFkgMjAwCisKKy8qKgorICogQ3JlYXRlIGEgbmV3IGVtcHR5IGZpbHRlciBsaXN0CisgKgorICogTm9ybWFsbHkgeW91IHdvbid0IHVzZSB0aGlzIGJlY2F1c2UgYGdpdF9maWx0ZXJfbGlzdF9sb2FkYCB3aWxsIGNyZWF0ZQorICogdGhlIGZpbHRlciBsaXN0IGZvciB5b3UsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlCisgKiBgZ2l0X2ZpbHRlcl9sb29rdXBgIGFuZCBgZ2l0X2ZpbHRlcl9saXN0X3B1c2hgIGZ1bmN0aW9ucyB0byBhc3NlbWJsZQorICogeW91ciBvd24gY2hhaW5zIG9mIGZpbHRlcnMuCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfZmlsdGVyX2xpc3RfbmV3KAorCWdpdF9maWx0ZXJfbGlzdCAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGdpdF9maWx0ZXJfbW9kZV90IG1vZGUpOworCisvKioKKyAqIEFkZCBhIGZpbHRlciB0byBhIGZpbHRlciBsaXN0IHdpdGggdGhlIGdpdmVuIHBheWxvYWQuCisgKgorICogTm9ybWFsbHkgeW91IHdvbid0IGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBmaWx0ZXIgbGlzdCBpcyBjcmVhdGVkCisgKiBieSBjYWxsaW5nIHRoZSAiY2hlY2siIGZ1bmN0aW9uIG9uIHJlZ2lzdGVyZWQgZmlsdGVycyB3aGVuIHRoZSBmaWx0ZXIKKyAqIGF0dHJpYnV0ZXMgYXJlIHNldCwgYnV0IHRoaXMgZG9lcyBhbGxvdyBtb3JlIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YKKyAqIGZpbHRlciBsaXN0cyB3aGVuIGRlc2lyZWQuCisgKgorICogTm90ZSB0aGF0IG5vcm1hbGx5IHRoZSAiY2hlY2siIGZ1bmN0aW9uIGNhbiBzZXQgdXAgYSBwYXlsb2FkIGZvciB0aGUKKyAqIGZpbHRlci4gIFVzaW5nIHRoaXMgZnVuY3Rpb24sIHlvdSBjYW4gZWl0aGVyIHBhc3MgaW4gYSBwYXlsb2FkIGlmIHlvdQorICoga25vdyB0aGUgZXhwZWN0ZWQgcGF5bG9hZCBmb3JtYXQsIG9yIHlvdSBjYW4gcGFzcyBOVUxMLiAgU29tZSBmaWx0ZXJzCisgKiBtYXkgZmFpbCB3aXRoIGEgTlVMTCBwYXlsb2FkLiAgR29vZCBsdWNrIQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X2ZpbHRlcl9saXN0X3B1c2goCisJZ2l0X2ZpbHRlcl9saXN0ICpmbCwgZ2l0X2ZpbHRlciAqZmlsdGVyLCB2b2lkICpwYXlsb2FkKTsKKworLyoqCisgKiBMb29rIHVwIGhvdyBtYW55IGZpbHRlcnMgYXJlIGluIHRoZSBsaXN0CisgKgorICogV2Ugd2lsbCBhdHRlbXB0IHRvIGFwcGx5IGFsbCBvZiB0aGVzZSBmaWx0ZXJzIHRvIGFueSBkYXRhIHBhc3NlZCBpbiwKKyAqIGJ1dCBub3RlIHRoYXQgdGhlIGZpbHRlciBhcHBseSBhY3Rpb24gc3RpbGwgaGFzIHRoZSBvcHRpb24gb2Ygc2tpcHBpbmcKKyAqIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gKGZvciBleGFtcGxlLCB0aGUgQ1JMRiBmaWx0ZXIgd2lsbCBza2lwIGRhdGEKKyAqIHRoYXQgYXBwZWFycyB0byBiZSBiaW5hcnkpLgorICoKKyAqIEBwYXJhbSBmbCBBIGZpbHRlciBsaXN0CisgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgZmlsdGVycyBpbiB0aGUgbGlzdAorICovCitHSVRfRVhURVJOKHNpemVfdCkgZ2l0X2ZpbHRlcl9saXN0X2xlbmd0aChjb25zdCBnaXRfZmlsdGVyX2xpc3QgKmZsKTsKKworLyoqCisgKiBBIGZpbHRlciBzb3VyY2UgcmVwcmVzZW50cyBhIGZpbGUvYmxvYiB0byBiZSBwcm9jZXNzZWQKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZ2l0X2ZpbHRlcl9zb3VyY2UgZ2l0X2ZpbHRlcl9zb3VyY2U7CisKKy8qKgorICogR2V0IHRoZSByZXBvc2l0b3J5IHRoYXQgdGhlIHNvdXJjZSBkYXRhIGlzIGNvbWluZyBmcm9tLgorICovCitHSVRfRVhURVJOKGdpdF9yZXBvc2l0b3J5ICopIGdpdF9maWx0ZXJfc291cmNlX3JlcG8oY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYyk7CisKKy8qKgorICogR2V0IHRoZSBwYXRoIHRoYXQgdGhlIHNvdXJjZSBkYXRhIGlzIGNvbWluZyBmcm9tLgorICovCitHSVRfRVhURVJOKGNvbnN0IGNoYXIgKikgZ2l0X2ZpbHRlcl9zb3VyY2VfcGF0aChjb25zdCBnaXRfZmlsdGVyX3NvdXJjZSAqc3JjKTsKKworLyoqCisgKiBHZXQgdGhlIGZpbGUgbW9kZSBvZiB0aGUgc291cmNlIGZpbGUKKyAqIElmIHRoZSBtb2RlIGlzIHVua25vd24sIHRoaXMgd2lsbCByZXR1cm4gMAorICovCitHSVRfRVhURVJOKHVpbnQxNl90KSBnaXRfZmlsdGVyX3NvdXJjZV9maWxlbW9kZShjb25zdCBnaXRfZmlsdGVyX3NvdXJjZSAqc3JjKTsKKworLyoqCisgKiBHZXQgdGhlIE9JRCBvZiB0aGUgc291cmNlCisgKiBJZiB0aGUgT0lEIGlzIHVua25vd24gKG9mdGVuIHRoZSBjYXNlIHdpdGggR0lUX0ZJTFRFUl9DTEVBTikgdGhlbgorICogdGhpcyB3aWxsIHJldHVybiBOVUxMLgorICovCitHSVRfRVhURVJOKGNvbnN0IGdpdF9vaWQgKikgZ2l0X2ZpbHRlcl9zb3VyY2VfaWQoY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYyk7CisKKy8qKgorICogR2V0IHRoZSBnaXRfZmlsdGVyX21vZGVfdCB0byBiZSBhcHBsaWVkCisgKi8KK0dJVF9FWFRFUk4oZ2l0X2ZpbHRlcl9tb2RlX3QpIGdpdF9maWx0ZXJfc291cmNlX21vZGUoY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYyk7CisKKy8qCisgKiBzdHJ1Y3QgZ2l0X2ZpbHRlcgorICoKKyAqIFRoZSBmaWx0ZXIgbGlmZWN5Y2xlOgorICogLSBpbml0aWFsaXplIC0gZmlyc3QgdXNlIG9mIGZpbHRlcgorICogLSBzaHV0ZG93biAgIC0gZmlsdGVyIHJlbW92ZWQvdW5yZWdpc3RlcmVkIGZyb20gc3lzdGVtCisgKiAtIGNoZWNrICAgICAgLSBjb25zaWRlcmluZyBmaWx0ZXIgZm9yIGZpbGUKKyAqIC0gYXBwbHkgICAgICAtIGFwcGx5IGZpbHRlciB0byBmaWxlIGNvbnRlbnRzCisgKiAtIGNsZWFudXAgICAgLSBkb25lIHdpdGggZmlsZQorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSBjYWxsYmFjayBvbiBmaWx0ZXIKKyAqCisgKiBTcGVjaWZpZWQgYXMgYGZpbHRlci5pbml0aWFsaXplYCwgdGhpcyBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBpbnZva2VkCisgKiBiZWZvcmUgYSBmaWx0ZXIgaXMgZmlyc3QgdXNlZC4gIEl0IHdpbGwgYmUgY2FsbGVkIG9uY2UgYXQgbW9zdC4KKyAqCisgKiBJZiBub24tTlVMTCwgdGhlIGZpbHRlcidzIGBpbml0aWFsaXplYCBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgcmlnaHQKKyAqIGJlZm9yZSB0aGUgZmlyc3QgdXNlIG9mIHRoZSBmaWx0ZXIsIHNvIHlvdSBjYW4gZGVmZXIgZXhwZW5zaXZlCisgKiBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zIChpbiBjYXNlIGxpYmdpdDIgaXMgYmVpbmcgdXNlZCBpbiBhIHdheSB0aGF0CisgKiBkb2Vzbid0IG5lZWQgdGhlIGZpbHRlcikuCisgKi8KK3R5cGVkZWYgaW50ICgqZ2l0X2ZpbHRlcl9pbml0X2ZuKShnaXRfZmlsdGVyICpzZWxmKTsKKworLyoqCisgKiBTaHV0ZG93biBjYWxsYmFjayBvbiBmaWx0ZXIKKyAqCisgKiBTcGVjaWZpZWQgYXMgYGZpbHRlci5zaHV0ZG93bmAsIHRoaXMgaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZAorICogd2hlbiB0aGUgZmlsdGVyIGlzIHVucmVnaXN0ZXJlZCBvciB3aGVuIGxpYmdpdDIgaXMgc2h1dHRpbmcgZG93bi4gIEl0CisgKiB3aWxsIGJlIGNhbGxlZCBvbmNlIGF0IG1vc3QgYW5kIHNob3VsZCByZWxlYXNlIHJlc291cmNlcyBhcyBuZWVkZWQuCisgKgorICogVHlwaWNhbGx5IHRoaXMgZnVuY3Rpb24gd2lsbCBmcmVlIHRoZSBgZ2l0X2ZpbHRlcmAgb2JqZWN0IGl0c2VsZi4KKyAqLwordHlwZWRlZiB2b2lkICgqZ2l0X2ZpbHRlcl9zaHV0ZG93bl9mbikoZ2l0X2ZpbHRlciAqc2VsZik7CisKKy8qKgorICogQ2FsbGJhY2sgdG8gZGVjaWRlIGlmIGEgZ2l2ZW4gc291cmNlIG5lZWRzIHRoaXMgZmlsdGVyCisgKgorICogU3BlY2lmaWVkIGFzIGBmaWx0ZXIuY2hlY2tgLCB0aGlzIGlzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgY2hlY2tzCisgKiBpZiBmaWx0ZXJpbmcgaXMgbmVlZGVkIGZvciBhIGdpdmVuIHNvdXJjZS4KKyAqCisgKiBJdCBzaG91bGQgcmV0dXJuIDAgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgYXBwbGllZCAoaS5lLiBzdWNjZXNzKSwKKyAqIEdJVF9QQVNTVEhST1VHSCBpZiB0aGUgZmlsdGVyIHNob3VsZCBub3QgYmUgYXBwbGllZCwgb3IgYW4gZXJyb3IgY29kZQorICogdG8gZmFpbCBvdXQgb2YgdGhlIGZpbHRlciBwcm9jZXNzaW5nIHBpcGVsaW5lIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgYGF0dHJfdmFsdWVzYCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWVzIG9mIGFueSBhdHRyaWJ1dGVzIGdpdmVuIGluCisgKiB0aGUgZmlsdGVyIGRlZmluaXRpb24uICBTZWUgYGdpdF9maWx0ZXJgIGJlbG93IGZvciBtb3JlIGRldGFpbC4KKyAqCisgKiBUaGUgYHBheWxvYWRgIHdpbGwgYmUgYSBwb2ludGVyIHRvIGEgcmVmZXJlbmNlIHBheWxvYWQgZm9yIHRoZSBmaWx0ZXIuCisgKiBUaGlzIHdpbGwgc3RhcnQgYXMgTlVMTCwgYnV0IGBjaGVja2AgY2FuIGFzc2lnbiB0byB0aGlzIHBvaW50ZXIgZm9yCisgKiBsYXRlciB1c2UgYnkgdGhlIGBhcHBseWAgY2FsbGJhY2suICBOb3RlIHRoYXQgdGhlIHZhbHVlIHNob3VsZCBiZSBoZWFwCisgKiBhbGxvY2F0ZWQgKG5vdCBzdGFjayksIHNvIHRoYXQgaXQgZG9lc24ndCBnbyBhd2F5IGJlZm9yZSB0aGUgYGFwcGx5YAorICogY2FsbGJhY2sgY2FuIHVzZSBpdC4gIElmIGEgZmlsdGVyIGFsbG9jYXRlcyBhbmQgYXNzaWducyBhIHZhbHVlIHRvIHRoZQorICogYHBheWxvYWRgLCBpdCB3aWxsIG5lZWQgYSBgY2xlYW51cGAgY2FsbGJhY2sgdG8gZnJlZSB0aGUgcGF5bG9hZC4KKyAqLwordHlwZWRlZiBpbnQgKCpnaXRfZmlsdGVyX2NoZWNrX2ZuKSgKKwlnaXRfZmlsdGVyICAqc2VsZiwKKwl2b2lkICAgICAgICoqcGF5bG9hZCwgLyogcG9pbnRzIHRvIE5VTEwgcHRyIG9uIGVudHJ5LCBtYXkgYmUgc2V0ICovCisJY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYywKKwljb25zdCBjaGFyICoqYXR0cl92YWx1ZXMpOworCisvKioKKyAqIENhbGxiYWNrIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIGRhdGEgZmlsdGVyaW5nCisgKgorICogU3BlY2lmaWVkIGFzIGBmaWx0ZXIuYXBwbHlgLCB0aGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGFjdHVhbGx5IGZpbHRlcnMKKyAqIGRhdGEuICBJZiBpdCBzdWNjZXNzZnVsbHkgd3JpdGVzIHRoZSBvdXRwdXQsIGl0IHNob3VsZCByZXR1cm4gMC4gIExpa2UKKyAqIGBjaGVja2AsIGl0IGNhbiByZXR1cm4gR0lUX1BBU1NUSFJPVUdIIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpbHRlcgorICogZG9lc24ndCB3YW50IHRvIHJ1bi4gIE90aGVyIGVycm9yIGNvZGVzIHdpbGwgc3RvcCBmaWx0ZXIgcHJvY2Vzc2luZyBhbmQKKyAqIHJldHVybiB0byB0aGUgY2FsbGVyLgorICoKKyAqIFRoZSBgcGF5bG9hZGAgdmFsdWUgd2lsbCByZWZlciB0byBhbnkgcGF5bG9hZCB0aGF0IHdhcyBzZXQgYnkgdGhlCisgKiBgY2hlY2tgIGNhbGxiYWNrLiAgSXQgbWF5IGJlIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGFzIG5lZWRlZC4KKyAqLwordHlwZWRlZiBpbnQgKCpnaXRfZmlsdGVyX2FwcGx5X2ZuKSgKKwlnaXRfZmlsdGVyICAgICpzZWxmLAorCXZvaWQgICAgICAgICAqKnBheWxvYWQsIC8qIG1heSBiZSByZWFkIGFuZC9vciBzZXQgKi8KKwlnaXRfYnVmICAgICAgICp0bywKKwljb25zdCBnaXRfYnVmICpmcm9tLAorCWNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMpOworCisvKioKKyAqIENhbGxiYWNrIHRvIGNsZWFuIHVwIGFmdGVyIGZpbHRlcmluZyBoYXMgYmVlbiBhcHBsaWVkCisgKgorICogU3BlY2lmaWVkIGFzIGBmaWx0ZXIuY2xlYW51cGAsIHRoaXMgaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZAorICogYWZ0ZXIgdGhlIGZpbHRlciBoYXMgYmVlbiBhcHBsaWVkLiAgSWYgdGhlIGBjaGVja2Agb3IgYGFwcGx5YCBjYWxsYmFja3MKKyAqIGFsbG9jYXRlZCBhIGBwYXlsb2FkYCB0byBrZWVwIHBlci1zb3VyY2UgZmlsdGVyIHN0YXRlLCB1c2UgdGhpcworICogY2FsbGJhY2sgdG8gZnJlZSB0aGF0IHBheWxvYWQgYW5kIHJlbGVhc2UgcmVzb3VyY2VzIGFzIHJlcXVpcmVkLgorICovCit0eXBlZGVmIHZvaWQgKCpnaXRfZmlsdGVyX2NsZWFudXBfZm4pKAorCWdpdF9maWx0ZXIgKnNlbGYsCisJdm9pZCAgICAgICAqcGF5bG9hZCk7CisKKy8qKgorICogRmlsdGVyIHN0cnVjdHVyZSB1c2VkIHRvIHJlZ2lzdGVyIGN1c3RvbSBmaWx0ZXJzLgorICoKKyAqIFRvIGFzc29jaWF0ZSBleHRyYSBkYXRhIHdpdGggYSBmaWx0ZXIsIGFsbG9jYXRlIGV4dHJhIGRhdGEgYW5kIHB1dCB0aGUKKyAqIGBnaXRfZmlsdGVyYCBzdHJ1Y3QgYXQgdGhlIHN0YXJ0IG9mIHlvdXIgZGF0YSBidWZmZXIsIHRoZW4gY2FzdCB0aGUKKyAqIGBzZWxmYCBwb2ludGVyIHRvIHlvdXIgbGFyZ2VyIHN0cnVjdHVyZSB3aGVuIHlvdXIgY2FsbGJhY2sgaXMgaW52b2tlZC4KKyAqCisgKiBgdmVyc2lvbmAgc2hvdWxkIGJlIHNldCB0byBHSVRfRklMVEVSX1ZFUlNJT04KKyAqCisgKiBgYXR0cmlidXRlc2AgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBjaGVjaworICogZm9yIHRoaXMgZmlsdGVyIChlLmcuICJlb2wgY3JsZiB0ZXh0IikuICBJZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYmFyZSwKKyAqIGl0IHdpbGwgYmUgc2ltcGx5IGxvYWRlZCBhbmQgcGFzc2VkIHRvIHRoZSBgY2hlY2tgIGNhbGxiYWNrLiAgSWYgaXQgaGFzCisgKiBhIHZhbHVlIChpLmUuICJuYW1lPXZhbHVlIiksIHRoZSBhdHRyaWJ1dGUgbXVzdCBtYXRjaCB0aGF0IHZhbHVlIGZvcgorICogdGhlIGZpbHRlciB0byBiZSBhcHBsaWVkLgorICoKKyAqIFRoZSBgaW5pdGlhbGl6ZWAsIGBzaHV0ZG93bmAsIGBjaGVja2AsIGBhcHBseWAsIGFuZCBgY2xlYW51cGAgY2FsbGJhY2tzCisgKiBhcmUgYWxsIGRvY3VtZW50ZWQgYWJvdmUgd2l0aCB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbiBwb2ludGVyIHR5cGVkZWZzLgorICovCitzdHJ1Y3QgZ2l0X2ZpbHRlciB7CisJdW5zaWduZWQgaW50ICAgICAgICAgICB2ZXJzaW9uOworCisJY29uc3QgY2hhciAgICAgICAgICAgICphdHRyaWJ1dGVzOworCisJZ2l0X2ZpbHRlcl9pbml0X2ZuICAgICBpbml0aWFsaXplOworCWdpdF9maWx0ZXJfc2h1dGRvd25fZm4gc2h1dGRvd247CisJZ2l0X2ZpbHRlcl9jaGVja19mbiAgICBjaGVjazsKKwlnaXRfZmlsdGVyX2FwcGx5X2ZuICAgIGFwcGx5OworCWdpdF9maWx0ZXJfY2xlYW51cF9mbiAgY2xlYW51cDsKK307CisKKyNkZWZpbmUgR0lUX0ZJTFRFUl9WRVJTSU9OIDEKKworLyoqCisgKiBSZWdpc3RlciBhIGZpbHRlciB1bmRlciBhIGdpdmVuIG5hbWUgd2l0aCBhIGdpdmVuIHByaW9yaXR5LgorICoKKyAqIEFzIG1lbnRpb25lZCBlbHNld2hlcmUsIHRoZSBpbml0aWFsaXplIGNhbGxiYWNrIHdpbGwgbm90IGJlIGludm9rZWQKKyAqIGltbWVkaWF0ZWx5LiAgSXQgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGZpbHRlciBpcyB1c2VkIGluIHNvbWUgd2F5LgorICoKKyAqIEEgZmlsdGVyJ3MgYXR0cmlidXRlIGNoZWNrcyBhbmQgYGNoZWNrYCBhbmQgYGFwcGx5YCBjYWxsYmFja3Mgd2lsbCBiZQorICogaXNzdWVkIGluIG9yZGVyIG9mIGBwcmlvcml0eWAgb24gc211ZGdlICh0byB3b3JrZGlyKSwgYW5kIGluIHJldmVyc2UKKyAqIG9yZGVyIG9mIGBwcmlvcml0eWAgb24gY2xlYW4gKHRvIG9kYikuCisgKgorICogVHdvIGZpbHRlcnMgYXJlIHByZXJlZ2lzdGVyZWQgd2l0aCBsaWJnaXQyOgorICogLSBHSVRfRklMVEVSX0NSTEYgd2l0aCBwcmlvcml0eSAwCisgKiAtIEdJVF9GSUxURVJfSURFTlQgd2l0aCBwcmlvcml0eSAxMDAKKyAqCisgKiBDdXJyZW50bHkgdGhlIGZpbHRlciByZWdpc3RyeSBpcyBub3QgdGhyZWFkIHNhZmUsIHNvIGFueSByZWdpc3RlcmluZyBvcgorICogZGVyZWdpc3RlcmluZyBvZiBmaWx0ZXJzIG11c3QgYmUgZG9uZSBvdXRzaWRlIG9mIGFueSBwb3NzaWJsZSB1c2FnZSBvZgorICogdGhlIGZpbHRlcnMgKGkuZS4gZHVyaW5nIGFwcGxpY2F0aW9uIHNldHVwIG9yIHNodXRkb3duKS4KKyAqCisgKiBAcGFyYW0gbmFtZSBBIG5hbWUgYnkgd2hpY2ggdGhlIGZpbHRlciBjYW4gYmUgcmVmZXJlbmNlZC4gIEF0dGVtcHRpbmcKKyAqIAkJCXRvIHJlZ2lzdGVyIHdpdGggYW4gaW4tdXNlIG5hbWUgd2lsbCByZXR1cm4gR0lUX0VFWElTVFMuCisgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgZGVmaW5pdGlvbi4gIFRoaXMgcG9pbnRlciB3aWxsIGJlIHN0b3JlZCBhcyBpcworICogCQkJYnkgbGliZ2l0MiBzbyBpdCBtdXN0IGJlIGEgZHVyYWJsZSBhbGxvY2F0aW9uIChlaXRoZXIgc3RhdGljCisgKiAJCQlvciBvbiB0aGUgaGVhcCkuCisgKiBAcGFyYW0gcHJpb3JpdHkgVGhlIHByaW9yaXR5IGZvciBmaWx0ZXIgYXBwbGljYXRpb24KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzZnVsIHJlZ2lzdHJ5LCBlcnJvciBjb2RlIDwwIG9uIGZhaWx1cmUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9maWx0ZXJfcmVnaXN0ZXIoCisJY29uc3QgY2hhciAqbmFtZSwgZ2l0X2ZpbHRlciAqZmlsdGVyLCBpbnQgcHJpb3JpdHkpOworCisvKioKKyAqIFJlbW92ZSB0aGUgZmlsdGVyIHdpdGggdGhlIGdpdmVuIG5hbWUKKyAqCisgKiBBdHRlbXB0aW5nIHRvIHJlbW92ZSB0aGUgYnVpbHRpbiBsaWJnaXQyIGZpbHRlcnMgaXMgbm90IHBlcm1pdHRlZCBhbmQKKyAqIHdpbGwgcmV0dXJuIGFuIGVycm9yLgorICoKKyAqIEN1cnJlbnRseSB0aGUgZmlsdGVyIHJlZ2lzdHJ5IGlzIG5vdCB0aHJlYWQgc2FmZSwgc28gYW55IHJlZ2lzdGVyaW5nIG9yCisgKiBkZXJlZ2lzdGVyaW5nIG9mIGZpbHRlcnMgbXVzdCBiZSBkb25lIG91dHNpZGUgb2YgYW55IHBvc3NpYmxlIHVzYWdlIG9mCisgKiB0aGUgZmlsdGVycyAoaS5lLiBkdXJpbmcgYXBwbGljYXRpb24gc2V0dXAgb3Igc2h1dGRvd24pLgorICoKKyAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHVuZGVyIHdoaWNoIHRoZSBmaWx0ZXIgd2FzIHJlZ2lzdGVyZWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIDwwIG9uIGZhaWx1cmUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9maWx0ZXJfdW5yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lKTsKKworLyoqIEB9ICovCitHSVRfRU5EX0RFQ0wKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3N5cy9pbmRleC5oIGIvaW5jbHVkZS9naXQyL3N5cy9pbmRleC5oCmluZGV4IGEzMmUwNzAuLjFhMDZhNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9zeXMvaW5kZXguaAorKysgYi9pbmNsdWRlL2dpdDIvc3lzL2luZGV4LmgKQEAgLTcyLDcgKzcyLDYgQEAKICAqIFJlbW92ZSBhbGwgZmlsZW5hbWUgY29uZmxpY3QgZW50cmllcy4KICAqCiAgKiBAcGFyYW0gaW5kZXggYW4gZXhpc3RpbmcgaW5kZXggb2JqZWN0Ci0gKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQogICovCiBHSVRfRVhURVJOKHZvaWQpIGdpdF9pbmRleF9uYW1lX2NsZWFyKGdpdF9pbmRleCAqaW5kZXgpOwogCkBAIC0xNjgsNyArMTY3LDYgQEAKICAqIFJlbW92ZSBhbGwgcmVzb2x2ZSB1bmRvIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgKICAqCiAgKiBAcGFyYW0gaW5kZXggYW4gZXhpc3RpbmcgaW5kZXggb2JqZWN0Ci0gKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQogICovCiBHSVRfRVhURVJOKHZvaWQpIGdpdF9pbmRleF9yZXVjX2NsZWFyKGdpdF9pbmRleCAqaW5kZXgpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvc3lzL29kYl9iYWNrZW5kLmggYi9pbmNsdWRlL2dpdDIvc3lzL29kYl9iYWNrZW5kLmgKaW5kZXggM2NkMjczNC4uODAzOWE1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3N5cy9vZGJfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9zeXMvb2RiX2JhY2tlbmQuaApAQCAtNDgsMTIgKzQ4LDEyIEBACiAJaW50ICgqIHJlYWRfaGVhZGVyKSgKIAkJc2l6ZV90ICosIGdpdF9vdHlwZSAqLCBnaXRfb2RiX2JhY2tlbmQgKiwgY29uc3QgZ2l0X29pZCAqKTsKIAotCS8qIFRoZSB3cml0ZXIgbWF5IGFzc3VtZSB0aGF0IHRoZSBvYmplY3QKLQkgKiBoYXMgYWxyZWFkeSBiZWVuIGhhc2hlZCBhbmQgaXMgcGFzc2VkCi0JICogaW4gdGhlIGZpcnN0IHBhcmFtZXRlci4KKwkvKioKKwkgKiBXcml0ZSBhbiBvYmplY3QgaW50byB0aGUgYmFja2VuZC4gVGhlIGlkIG9mIHRoZSBvYmplY3QgaGFzCisJICogYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgYW5kIGlzIHBhc3NlZCBpbi4KIAkgKi8KIAlpbnQgKCogd3JpdGUpKAotCQlnaXRfb2lkICosIGdpdF9vZGJfYmFja2VuZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgZ2l0X290eXBlKTsKKwkJZ2l0X29kYl9iYWNrZW5kICosIGNvbnN0IGdpdF9vaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGdpdF9vdHlwZSk7CiAKIAlpbnQgKCogd3JpdGVzdHJlYW0pKAogCQlnaXRfb2RiX3N0cmVhbSAqKiwgZ2l0X29kYl9iYWNrZW5kICosIHNpemVfdCwgZ2l0X290eXBlKTsKQEAgLTY0LDEzICs2NCwyMyBAQAogCWludCAoKiBleGlzdHMpKAogCQlnaXRfb2RiX2JhY2tlbmQgKiwgY29uc3QgZ2l0X29pZCAqKTsKIAorCS8qKgorCSAqIElmIHRoZSBiYWNrZW5kIGltcGxlbWVudHMgYSByZWZyZXNoaW5nIG1lY2hhbmlzbSwgaXQgc2hvdWxkIGJlIGV4cG9zZWQKKwkgKiB0aHJvdWdoIHRoaXMgZW5kcG9pbnQuIEVhY2ggY2FsbCB0byBgZ2l0X29kYl9yZWZyZXNoKClgIHdpbGwgaW52b2tlIGl0LgorCSAqCisJICogSG93ZXZlciwgdGhlIGJhY2tlbmQgaW1wbGVtZW50YXRpb24gc2hvdWxkIHRyeSB0byBzdGF5IHVwLXRvLWRhdGUgYXMgbXVjaAorCSAqIGFzIHBvc3NpYmxlIGJ5IGl0c2VsZiBhcyBsaWJnaXQyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgaW52b2tlCisJICogYGdpdF9vZGJfcmVmcmVzaCgpYC4gRm9yIGluc3RhbmNlLCBhIHBvdGVudGlhbCBzdHJhdGVneSBmb3IgdGhlIGJhY2tlbmQKKwkgKiBpbXBsZW1lbnRhdGlvbiB0byBhY2hpZXZlIHRoaXMgY291bGQgYmUgdG8gaW50ZXJuYWxseSBpbnZva2UgdGhpcworCSAqIGVuZHBvaW50IG9uIGZhaWxlZCBsb29rdXBzIChpZS4gYGV4aXN0cygpYCwgYHJlYWQoKWAsIGByZWFkX2hlYWRlcigpYCkuCisJICovCiAJaW50ICgqIHJlZnJlc2gpKGdpdF9vZGJfYmFja2VuZCAqKTsKIAogCWludCAoKiBmb3JlYWNoKSgKIAkJZ2l0X29kYl9iYWNrZW5kICosIGdpdF9vZGJfZm9yZWFjaF9jYiBjYiwgdm9pZCAqcGF5bG9hZCk7CiAKIAlpbnQgKCogd3JpdGVwYWNrKSgKLQkJZ2l0X29kYl93cml0ZXBhY2sgKiosIGdpdF9vZGJfYmFja2VuZCAqLAorCQlnaXRfb2RiX3dyaXRlcGFjayAqKiwgZ2l0X29kYl9iYWNrZW5kICosIGdpdF9vZGIgKm9kYiwKIAkJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzX2NhbGxiYWNrIHByb2dyZXNzX2NiLCB2b2lkICpwcm9ncmVzc19wYXlsb2FkKTsKIAogCXZvaWQgKCogZnJlZSkoZ2l0X29kYl9iYWNrZW5kICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3N5cy9yZWZkYl9iYWNrZW5kLmggYi9pbmNsdWRlL2dpdDIvc3lzL3JlZmRiX2JhY2tlbmQuaAppbmRleCA5YjQ1N2IwLi45Y2Y1MDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvc3lzL3JlZmRiX2JhY2tlbmQuaAorKysgYi9pbmNsdWRlL2dpdDIvc3lzL3JlZmRiX2JhY2tlbmQuaApAQCAtMTAzLDcgKzEwMyw3IEBACiAJICogRGVsZXRlcyB0aGUgZ2l2ZW4gcmVmZXJlbmNlIGZyb20gdGhlIHJlZmRiLiAgQSByZWZkYiBpbXBsZW1lbnRhdGlvbgogCSAqIG11c3QgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uLgogCSAqLwotCWludCAoKmRlbGV0ZSkoZ2l0X3JlZmRiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGNoYXIgKnJlZl9uYW1lKTsKKwlpbnQgKCpkZWwpKGdpdF9yZWZkYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBjaGFyICpyZWZfbmFtZSk7CiAKIAkvKioKIAkgKiBTdWdnZXN0cyB0aGF0IHRoZSBnaXZlbiByZWZkYiBjb21wcmVzcyBvciBvcHRpbWl6ZSBpdHMgcmVmZXJlbmNlcy4KQEAgLTExOSwxMCArMTE5LDMwIEBACiAJICogcHJvdmlkZSB0aGlzIGZ1bmN0aW9uOyBpZiBpdCBpcyBub3QgcHJvdmlkZWQsIG5vdGhpbmcgd2lsbCBiZSBkb25lLgogCSAqLwogCXZvaWQgKCpmcmVlKShnaXRfcmVmZGJfYmFja2VuZCAqYmFja2VuZCk7CisKKwkvKioKKwkgKiBSZWFkIHRoZSByZWZsb2cgZm9yIHRoZSBnaXZlbiByZWZlcmVuY2UgbmFtZS4KKwkgKi8KKwlpbnQgKCpyZWZsb2dfcmVhZCkoZ2l0X3JlZmxvZyAqKm91dCwgZ2l0X3JlZmRiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGNoYXIgKm5hbWUpOworCisJLyoqCisJICogV3JpdGUgYSByZWZsb2cgdG8gZGlzay4KKwkgKi8KKwlpbnQgKCpyZWZsb2dfd3JpdGUpKGdpdF9yZWZkYl9iYWNrZW5kICpiYWNrZW5kLCBnaXRfcmVmbG9nICpyZWZsb2cpOworCisJLyoqCisJICogUmVuYW1lIGEgcmVmbG9nCisJICovCisJaW50ICgqcmVmbG9nX3JlbmFtZSkoZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kLCBjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpOworCisJLyoqCisJICogUmVtb3ZlIGEgcmVmbG9nLgorCSAqLworCWludCAoKnJlZmxvZ19kZWxldGUpKGdpdF9yZWZkYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBjaGFyICpuYW1lKTsKIH07CiAKLSNkZWZpbmUgR0lUX09EQl9CQUNLRU5EX1ZFUlNJT04gMQotI2RlZmluZSBHSVRfT0RCX0JBQ0tFTkRfSU5JVCB7R0lUX09EQl9CQUNLRU5EX1ZFUlNJT059CisjZGVmaW5lIEdJVF9SRUZEQl9CQUNLRU5EX1ZFUlNJT04gMQorI2RlZmluZSBHSVRfUkVGREJfQkFDS0VORF9JTklUIHtHSVRfUkVGREJfQkFDS0VORF9WRVJTSU9OfQogCiAvKioKICAqIENvbnN0cnVjdG9ycyBmb3IgZGVmYXVsdCBmaWxlc3lzdGVtLWJhc2VkIHJlZmRiIGJhY2tlbmQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9zeXMvcmVmbG9nLmggYi9pbmNsdWRlL2dpdDIvc3lzL3JlZmxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZDAwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2dpdDIvc3lzL3JlZmxvZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJnaXQyLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdQTCB2MiB3aXRoCisgKiBhIExpbmtpbmcgRXhjZXB0aW9uLiBGb3IgZnVsbCB0ZXJtcyBzZWUgdGhlIGluY2x1ZGVkIENPUFlJTkcgZmlsZS4KKyAqLworI2lmbmRlZiBJTkNMVURFX3N5c19naXRfcmVmbG9nX2hfXworI2RlZmluZSBJTkNMVURFX3N5c19naXRfcmVmbG9nX2hfXworCisjaW5jbHVkZSAiZ2l0Mi9jb21tb24uaCIKKyNpbmNsdWRlICJnaXQyL3R5cGVzLmgiCisjaW5jbHVkZSAiZ2l0Mi9vaWQuaCIKKworR0lUX0JFR0lOX0RFQ0wKKworR0lUX0VYVEVSTihnaXRfcmVmbG9nX2VudHJ5ICopIGdpdF9yZWZsb2dfZW50cnlfX2FsbG9jKHZvaWQpOworR0lUX0VYVEVSTih2b2lkKSBnaXRfcmVmbG9nX2VudHJ5X19mcmVlKGdpdF9yZWZsb2dfZW50cnkgKmVudHJ5KTsKKworR0lUX0VORF9ERUNMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3N5cy9yZWZzLmggYi9pbmNsdWRlL2dpdDIvc3lzL3JlZnMuaAppbmRleCA4NTk2MzI1Li5kZDk1Y2ExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvc3lzL3JlZnMuaAorKysgYi9pbmNsdWRlL2dpdDIvc3lzL3JlZnMuaApAQCAtMTYsNyArMTYsNyBAQAogICoKICAqIEBwYXJhbSBuYW1lIHRoZSByZWZlcmVuY2UgbmFtZQogICogQHBhcmFtIG9pZCB0aGUgb2JqZWN0IGlkIGZvciBhIGRpcmVjdCByZWZlcmVuY2UKLSAqIEBwYXJhbSBzeW1ib2xpYyB0aGUgdGFyZ2V0IGZvciBhIHN5bWJvbGljIHJlZmVyZW5jZQorICogQHBhcmFtIHBlZWwgdGhlIGZpcnN0IG5vbi10YWcgb2JqZWN0J3MgT0lELCBvciBOVUxMCiAgKiBAcmV0dXJuIHRoZSBjcmVhdGVkIGdpdF9yZWZlcmVuY2Ugb3IgTlVMTCBvbiBlcnJvcgogICovCiBHSVRfRVhURVJOKGdpdF9yZWZlcmVuY2UgKikgZ2l0X3JlZmVyZW5jZV9fYWxsb2MoCkBAIC0yOCw3ICsyOCw3IEBACiAgKiBDcmVhdGUgYSBuZXcgc3ltYm9saWMgcmVmZXJlbmNlLgogICoKICAqIEBwYXJhbSBuYW1lIHRoZSByZWZlcmVuY2UgbmFtZQotICogQHBhcmFtIHN5bWJvbGljIHRoZSB0YXJnZXQgZm9yIGEgc3ltYm9saWMgcmVmZXJlbmNlCisgKiBAcGFyYW0gdGFyZ2V0IHRoZSB0YXJnZXQgZm9yIGEgc3ltYm9saWMgcmVmZXJlbmNlCiAgKiBAcmV0dXJuIHRoZSBjcmVhdGVkIGdpdF9yZWZlcmVuY2Ugb3IgTlVMTCBvbiBlcnJvcgogICovCiBHSVRfRVhURVJOKGdpdF9yZWZlcmVuY2UgKikgZ2l0X3JlZmVyZW5jZV9fYWxsb2Nfc3ltYm9saWMoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvc3lzL3JlcG9zaXRvcnkuaCBiL2luY2x1ZGUvZ2l0Mi9zeXMvcmVwb3NpdG9yeS5oCmluZGV4IGJhM2Q2NWEuLjM2ZjhiNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9zeXMvcmVwb3NpdG9yeS5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9zeXMvcmVwb3NpdG9yeS5oCkBAIC0yNyw3ICsyNyw2IEBACiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVwb3NpdG9yeV9uZXcoZ2l0X3JlcG9zaXRvcnkgKipvdXQpOwogCi0KIC8qKgogICogUmVzZXQgYWxsIHRoZSBpbnRlcm5hbCBzdGF0ZSBpbiBhIHJlcG9zaXRvcnkuCiAgKgpAQCAtNDIsNiArNDEsMjUgQEAKIEdJVF9FWFRFUk4odm9pZCkgZ2l0X3JlcG9zaXRvcnlfX2NsZWFudXAoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOwogCiAvKioKKyAqIFVwZGF0ZSB0aGUgZmlsZXN5c3RlbSBjb25maWcgc2V0dGluZ3MgZm9yIGFuIG9wZW4gcmVwb3NpdG9yeQorICoKKyAqIFdoZW4gYSByZXBvc2l0b3J5IGlzIGluaXRpYWxpemVkLCBjb25maWcgdmFsdWVzIGFyZSBzZXQgYmFzZWQgb24gdGhlCisgKiBwcm9wZXJ0aWVzIG9mIHRoZSBmaWxlc3lzdGVtIHRoYXQgdGhlIHJlcG9zaXRvcnkgaXMgb24sIHN1Y2ggYXMKKyAqICJjb3JlLmlnbm9yZWNhc2UiLCAiY29yZS5maWxlbW9kZSIsICJjb3JlLnN5bWxpbmtzIiwgZXRjLiAgSWYgdGhlCisgKiByZXBvc2l0b3J5IGlzIG1vdmVkIHRvIGEgbmV3IGZpbGVzeXN0ZW0sIHRoZXNlIHByb3BlcnRpZXMgbWF5IG5vCisgKiBsb25nZXIgYmUgY29ycmVjdCBhbmQgQVBJIGNhbGxzIG1heSBub3QgYmVoYXZlIGFzIGV4cGVjdGVkLiAgVGhpcworICogY2FsbCByZXJ1bnMgdGhlIHBoYXNlIG9mIHJlcG9zaXRvcnkgaW5pdGlhbGl6YXRpb24gdGhhdCBzZXRzIHRob3NlCisgKiBwcm9wZXJ0aWVzIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0gb2YgdGhlIHJlcG8uCisgKgorICogQHBhcmFtIHJlcG8gQSByZXBvc2l0b3J5IG9iamVjdAorICogQHBhcmFtIHJlY3Vyc2Vfc3VibW9kdWxlcyBTaG91bGQgc3VibW9kdWxlcyBiZSB1cGRhdGVkIHJlY3Vyc2l2ZWx5CisgKiBAcmV0dXJybiAwIG9uIHN1Y2Nlc3MsIDwgMCBvbiBlcnJvcgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfcmVpbml0X2ZpbGVzeXN0ZW0oCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJaW50IHJlY3Vyc2Vfc3VibW9kdWxlcyk7CisKKy8qKgogICogU2V0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoaXMgcmVwb3NpdG9yeQogICoKICAqIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgdXNlZCBmb3IgYWxsIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi90cmFuc3BvcnQuaCBiL2luY2x1ZGUvZ2l0Mi90cmFuc3BvcnQuaAppbmRleCA4MWJiM2FiLi5jYWFiZDA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS9naXQyL3RyYW5zcG9ydC5oCkBAIC0yOCwyMiArMjgsMzEgQEAKICAqKiogQmVnaW4gaW50ZXJmYWNlIGZvciBjcmVkZW50aWFscyBhY3F1aXNpdGlvbiAqKioKICAqLwogCisvKiogQXV0aGVudGljYXRpb24gdHlwZSByZXF1ZXN0ZWQgKi8KIHR5cGVkZWYgZW51bSB7CiAJLyogZ2l0X2NyZWRfdXNlcnBhc3NfcGxhaW50ZXh0ICovCi0JR0lUX0NSRURUWVBFX1VTRVJQQVNTX1BMQUlOVEVYVCA9IDEsCi0JR0lUX0NSRURUWVBFX1NTSF9LRVlGSUxFX1BBU1NQSFJBU0UgPSAyLAotCUdJVF9DUkVEVFlQRV9TU0hfUFVCTElDS0VZID0gMywKKwlHSVRfQ1JFRFRZUEVfVVNFUlBBU1NfUExBSU5URVhUID0gKDF1IDw8IDApLAorCisJLyogZ2l0X2NyZWRfc3NoX2tleSAqLworCUdJVF9DUkVEVFlQRV9TU0hfS0VZID0gKDF1IDw8IDEpLAorCisJLyogZ2l0X2NyZWRfc3NoX2N1c3RvbSAqLworCUdJVF9DUkVEVFlQRV9TU0hfQ1VTVE9NID0gKDF1IDw8IDIpLAorCisJLyogZ2l0X2NyZWRfZGVmYXVsdCAqLworCUdJVF9DUkVEVFlQRV9ERUZBVUxUID0gKDF1IDw8IDMpLAogfSBnaXRfY3JlZHR5cGVfdDsKIAogLyogVGhlIGJhc2Ugc3RydWN0dXJlIGZvciBhbGwgY3JlZGVudGlhbCB0eXBlcyAqLwotdHlwZWRlZiBzdHJ1Y3QgZ2l0X2NyZWQgewotCWdpdF9jcmVkdHlwZV90IGNyZWR0eXBlOwotCXZvaWQgKCpmcmVlKSgKLQkJc3RydWN0IGdpdF9jcmVkICpjcmVkKTsKLX0gZ2l0X2NyZWQ7Cit0eXBlZGVmIHN0cnVjdCBnaXRfY3JlZCBnaXRfY3JlZDsKIAotLyogQSBwbGFpbnRleHQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkICovCi10eXBlZGVmIHN0cnVjdCBnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHQgeworc3RydWN0IGdpdF9jcmVkIHsKKwlnaXRfY3JlZHR5cGVfdCBjcmVkdHlwZTsKKwl2b2lkICgqZnJlZSkoZ2l0X2NyZWQgKmNyZWQpOworfTsKKworLyoqIEEgcGxhaW50ZXh0IHVzZXJuYW1lIGFuZCBwYXNzd29yZCAqLwordHlwZWRlZiBzdHJ1Y3QgewogCWdpdF9jcmVkIHBhcmVudDsKIAljaGFyICp1c2VybmFtZTsKIAljaGFyICpwYXNzd29yZDsKQEAgLTUxLDI3ICs2MCw0NiBAQAogCiAjaWZkZWYgR0lUX1NTSAogdHlwZWRlZiBMSUJTU0gyX1VTRVJBVVRIX1BVQkxJQ0tFWV9TSUdOX0ZVTkMoKCpnaXRfY3JlZF9zaWduX2NhbGxiYWNrKSk7Ci0KLS8qIEEgc3NoIGtleSBmaWxlIGFuZCBwYXNzcGhyYXNlICovCi10eXBlZGVmIHN0cnVjdCBnaXRfY3JlZF9zc2hfa2V5ZmlsZV9wYXNzcGhyYXNlIHsKLQlnaXRfY3JlZCBwYXJlbnQ7Ci0JY2hhciAqcHVibGlja2V5OwotCWNoYXIgKnByaXZhdGVrZXk7Ci0JY2hhciAqcGFzc3BocmFzZTsKLX0gZ2l0X2NyZWRfc3NoX2tleWZpbGVfcGFzc3BocmFzZTsKLQotLyogQSBzc2ggcHVibGljIGtleSBhbmQgYXV0aGVudGljYXRpb24gY2FsbGJhY2sgKi8KLXR5cGVkZWYgc3RydWN0IGdpdF9jcmVkX3NzaF9wdWJsaWNrZXkgewotCWdpdF9jcmVkIHBhcmVudDsKLQljaGFyICpwdWJsaWNrZXk7Ci0gICAgc2l6ZV90IHB1YmxpY2tleV9sZW47Ci0Jdm9pZCAqc2lnbl9jYWxsYmFjazsKLQl2b2lkICpzaWduX2RhdGE7Ci19IGdpdF9jcmVkX3NzaF9wdWJsaWNrZXk7CisjZWxzZQordHlwZWRlZiBpbnQgKCpnaXRfY3JlZF9zaWduX2NhbGxiYWNrKSh2b2lkICosIC4uLik7CiAjZW5kaWYKIAogLyoqCi0gKiBDcmVhdGVzIGEgbmV3IHBsYWluLXRleHQgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGNyZWRlbnRpYWwgb2JqZWN0LgorICogQSBzc2gga2V5IGZyb20gZGlzaworICovCit0eXBlZGVmIHN0cnVjdCBnaXRfY3JlZF9zc2hfa2V5IHsKKwlnaXRfY3JlZCBwYXJlbnQ7CisJY2hhciAqdXNlcm5hbWU7CisJY2hhciAqcHVibGlja2V5OworCWNoYXIgKnByaXZhdGVrZXk7CisJY2hhciAqcGFzc3BocmFzZTsKK30gZ2l0X2NyZWRfc3NoX2tleTsKKworLyoqCisgKiBBIGtleSB3aXRoIGEgY3VzdG9tIHNpZ25hdHVyZSBmdW5jdGlvbgorICovCit0eXBlZGVmIHN0cnVjdCBnaXRfY3JlZF9zc2hfY3VzdG9tIHsKKwlnaXRfY3JlZCBwYXJlbnQ7CisJY2hhciAqdXNlcm5hbWU7CisJY2hhciAqcHVibGlja2V5OworCXNpemVfdCBwdWJsaWNrZXlfbGVuOworCXZvaWQgKnNpZ25fY2FsbGJhY2s7CisJdm9pZCAqc2lnbl9kYXRhOworfSBnaXRfY3JlZF9zc2hfY3VzdG9tOworCisvKiogQSBrZXkgZm9yIE5UTE0vS2VyYmVyb3MgImRlZmF1bHQiIGNyZWRlbnRpYWxzICovCit0eXBlZGVmIHN0cnVjdCBnaXRfY3JlZCBnaXRfY3JlZF9kZWZhdWx0OworCisvKioKKyAqIENoZWNrIHdoZXRoZXIgYSBjcmVkZW50aWFsIG9iamVjdCBjb250YWlucyB1c2VybmFtZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBAcGFyYW0gY3JlZCBvYmplY3QgdG8gY2hlY2sKKyAqIEByZXR1cm4gMSBpZiB0aGUgY3JlZGVudGlhbCBvYmplY3QgaGFzIG5vbi1OVUxMIHVzZXJuYW1lLCAwIG90aGVyd2lzZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X2NyZWRfaGFzX3VzZXJuYW1lKGdpdF9jcmVkICpjcmVkKTsKKworLyoqCisgKiBDcmVhdGUgYSBuZXcgcGxhaW4tdGV4dCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgY3JlZGVudGlhbCBvYmplY3QuCiAgKiBUaGUgc3VwcGxpZWQgY3JlZGVudGlhbCBwYXJhbWV0ZXIgd2lsbCBiZSBpbnRlcm5hbGx5IGR1cGxpY2F0ZWQuCiAgKgogICogQHBhcmFtIG91dCBUaGUgbmV3bHkgY3JlYXRlZCBjcmVkZW50aWFsIG9iamVjdC4KQEAgLTg0LDUyICsxMTIsNjggQEAKIAljb25zdCBjaGFyICp1c2VybmFtZSwKIAljb25zdCBjaGFyICpwYXNzd29yZCk7CiAKLSNpZmRlZiBHSVRfU1NICiAvKioKLSAqIENyZWF0ZXMgYSBuZXcgc3NoIGtleSBmaWxlIGFuZCBwYXNzcGhyYXNlIGNyZWRlbnRpYWwgb2JqZWN0LgorICogQ3JlYXRlIGEgbmV3IHBhc3NwaHJhc2UtcHJvdGVjdGVkIHNzaCBrZXkgY3JlZGVudGlhbCBvYmplY3QuCiAgKiBUaGUgc3VwcGxpZWQgY3JlZGVudGlhbCBwYXJhbWV0ZXIgd2lsbCBiZSBpbnRlcm5hbGx5IGR1cGxpY2F0ZWQuCiAgKgogICogQHBhcmFtIG91dCBUaGUgbmV3bHkgY3JlYXRlZCBjcmVkZW50aWFsIG9iamVjdC4KKyAqIEBwYXJhbSB1c2VybmFtZSB1c2VybmFtZSB0byB1c2UgdG8gYXV0aGVudGljYXRlCiAgKiBAcGFyYW0gcHVibGlja2V5IFRoZSBwYXRoIHRvIHRoZSBwdWJsaWMga2V5IG9mIHRoZSBjcmVkZW50aWFsLgogICogQHBhcmFtIHByaXZhdGVrZXkgVGhlIHBhdGggdG8gdGhlIHByaXZhdGUga2V5IG9mIHRoZSBjcmVkZW50aWFsLgogICogQHBhcmFtIHBhc3NwaHJhc2UgVGhlIHBhc3NwaHJhc2Ugb2YgdGhlIGNyZWRlbnRpYWwuCiAgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBmb3IgZmFpbHVyZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2NyZWRfc3NoX2tleWZpbGVfcGFzc3BocmFzZV9uZXcoCitHSVRfRVhURVJOKGludCkgZ2l0X2NyZWRfc3NoX2tleV9uZXcoCiAJZ2l0X2NyZWQgKipvdXQsCisJY29uc3QgY2hhciAqdXNlcm5hbWUsCiAJY29uc3QgY2hhciAqcHVibGlja2V5LAogCWNvbnN0IGNoYXIgKnByaXZhdGVrZXksCi0gICAgY29uc3QgY2hhciAqcGFzc3BocmFzZSk7CisJY29uc3QgY2hhciAqcGFzc3BocmFzZSk7CiAKIC8qKgotICogQ3JlYXRlcyBhIG5ldyBzc2ggcHVibGljIGtleSBjcmVkZW50aWFsIG9iamVjdC4KKyAqIENyZWF0ZSBhbiBzc2gga2V5IGNyZWRlbnRpYWwgd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgbGV0cyB5b3UgdXNlIHlvdXIgb3duIGZ1bmN0aW9uIHRvIHNpZ24gdGhlIGNoYWxsZW5nZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFuZCBpdHMgY3JlZGVudGlhbCB0eXBlIGlzIHByb3ZpZGVkIGZvciBjb21wbGV0ZW5lc3MKKyAqIGFuZCB3cmFwcyBgbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXkoKWAsIHdoaWNoIGlzIHVuZG9jdW1lbnRlZC4KKyAqCiAgKiBUaGUgc3VwcGxpZWQgY3JlZGVudGlhbCBwYXJhbWV0ZXIgd2lsbCBiZSBpbnRlcm5hbGx5IGR1cGxpY2F0ZWQuCiAgKgogICogQHBhcmFtIG91dCBUaGUgbmV3bHkgY3JlYXRlZCBjcmVkZW50aWFsIG9iamVjdC4KKyAqIEBwYXJhbSB1c2VybmFtZSB1c2VybmFtZSB0byB1c2UgdG8gYXV0aGVudGljYXRlCiAgKiBAcGFyYW0gcHVibGlja2V5IFRoZSBieXRlcyBvZiB0aGUgcHVibGljIGtleS4KICAqIEBwYXJhbSBwdWJsaWNrZXlfbGVuIFRoZSBsZW5ndGggb2YgdGhlIHB1YmxpYyBrZXkgaW4gYnl0ZXMuCi0gKiBAcGFyYW0gc2lnbl9jYWxsYmFjayBUaGUgY2FsbGJhY2sgbWV0aG9kIGZvciBhdXRoZW50aWNhdGluZy4KLSAqIEBwYXJhbSBzaWduX2RhdGEgVGhlIGFic3RyYWN0IGRhdGEgc2VudCB0byB0aGUgc2lnbl9jYWxsYmFjayBtZXRob2QuCisgKiBAcGFyYW0gc2lnbl9mbiBUaGUgY2FsbGJhY2sgbWV0aG9kIHRvIHNpZ24gdGhlIGRhdGEgZHVyaW5nIHRoZSBjaGFsbGVuZ2UuCisgKiBAcGFyYW0gc2lnbl9kYXRhIFRoZSBkYXRhIHRvIHBhc3MgdG8gdGhlIHNpZ24gZnVuY3Rpb24uCiAgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBmb3IgZmFpbHVyZQogICovCi1HSVRfRVhURVJOKGludCkgZ2l0X2NyZWRfc3NoX3B1YmxpY2tleV9uZXcoCitHSVRfRVhURVJOKGludCkgZ2l0X2NyZWRfc3NoX2N1c3RvbV9uZXcoCiAJZ2l0X2NyZWQgKipvdXQsCisJY29uc3QgY2hhciAqdXNlcm5hbWUsCiAJY29uc3QgY2hhciAqcHVibGlja2V5LAotICAgIHNpemVfdCBwdWJsaWNrZXlfbGVuLAotICAgIGdpdF9jcmVkX3NpZ25fY2FsbGJhY2ssCi0gICAgdm9pZCAqc2lnbl9kYXRhKTsKLSNlbmRpZgorCXNpemVfdCBwdWJsaWNrZXlfbGVuLAorCWdpdF9jcmVkX3NpZ25fY2FsbGJhY2sgc2lnbl9mbiwKKwl2b2lkICpzaWduX2RhdGEpOworCisvKioKKyAqIENyZWF0ZSBhICJkZWZhdWx0IiBjcmVkZW50aWFsIHVzYWJsZSBmb3IgTmVnb3RpYXRlIG1lY2hhbmlzbXMgbGlrZSBOVExNCisgKiBvciBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbi4KKyAqCisgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBmb3IgZmFpbHVyZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X2NyZWRfZGVmYXVsdF9uZXcoZ2l0X2NyZWQgKipvdXQpOwogCiAvKioKICAqIFNpZ25hdHVyZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGFjcXVpcmVzIGEgY3JlZGVudGlhbCBvYmplY3QuCiAgKgotICogQHBhcmFtIGNyZWQgVGhlIG5ld2x5IGNyZWF0ZWQgY3JlZGVudGlhbCBvYmplY3QuCi0gKiBAcGFyYW0gdXJsIFRoZSByZXNvdXJjZSBmb3Igd2hpY2ggd2UgYXJlIGRlbWFuZGluZyBhIGNyZWRlbnRpYWwuCi0gKiBAcGFyYW0gdXNlcm5hbWVfZnJvbV91cmwgVGhlIHVzZXJuYW1lIHRoYXQgd2FzIGVtYmVkZGVkIGluIGEgInVzZXJAaG9zdCIKKyAqIC0gY3JlZDogVGhlIG5ld2x5IGNyZWF0ZWQgY3JlZGVudGlhbCBvYmplY3QuCisgKiAtIHVybDogVGhlIHJlc291cmNlIGZvciB3aGljaCB3ZSBhcmUgZGVtYW5kaW5nIGEgY3JlZGVudGlhbC4KKyAqIC0gdXNlcm5hbWVfZnJvbV91cmw6IFRoZSB1c2VybmFtZSB0aGF0IHdhcyBlbWJlZGRlZCBpbiBhICJ1c2VyQGhvc3QiCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlIHVybCwgb3IgTlVMTCBpZiBub3QgaW5jbHVkZWQuCi0gKiBAcGFyYW0gYWxsb3dlZF90eXBlcyBBIGJpdG1hc2sgc3RhdGluZyB3aGljaCBjcmVkIHR5cGVzIGFyZSBPSyB0byByZXR1cm4uCi0gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCBwcm92aWRlZCB3aGVuIHNwZWNpZnlpbmcgdGhpcyBjYWxsYmFjay4KLSAqIEByZXR1cm4gMCBmb3Igc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlIGZvciBmYWlsdXJlCisgKiAtIGFsbG93ZWRfdHlwZXM6IEEgYml0bWFzayBzdGF0aW5nIHdoaWNoIGNyZWQgdHlwZXMgYXJlIE9LIHRvIHJldHVybi4KKyAqIC0gcGF5bG9hZDogVGhlIHBheWxvYWQgcHJvdmlkZWQgd2hlbiBzcGVjaWZ5aW5nIHRoaXMgY2FsbGJhY2suCisgKiAtIHJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBub24temVybyB0byBpbmRpY2F0ZSBhbiBlcnJvcgogICovCiB0eXBlZGVmIGludCAoKmdpdF9jcmVkX2FjcXVpcmVfY2IpKAogCWdpdF9jcmVkICoqY3JlZCwKQEAgLTE1MCwzOSArMTk0LDQ1IEBACiAJR0lUX1RSQU5TUE9SVEZMQUdTX05PX0NIRUNLX0NFUlQgPSAxCiB9IGdpdF90cmFuc3BvcnRfZmxhZ3NfdDsKIAotdHlwZWRlZiB2b2lkICgqZ2l0X3RyYW5zcG9ydF9tZXNzYWdlX2NiKShjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHZvaWQgKmRhdGEpOwordHlwZWRlZiBpbnQgKCpnaXRfdHJhbnNwb3J0X21lc3NhZ2VfY2IpKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgdm9pZCAqZGF0YSk7CiAKLXR5cGVkZWYgc3RydWN0IGdpdF90cmFuc3BvcnQgewordHlwZWRlZiBzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCBnaXRfdHJhbnNwb3J0OworCitzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCB7CiAJdW5zaWduZWQgaW50IHZlcnNpb247CiAJLyogU2V0IHByb2dyZXNzIGFuZCBlcnJvciBjYWxsYmFja3MgKi8KLQlpbnQgKCpzZXRfY2FsbGJhY2tzKShzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LAorCWludCAoKnNldF9jYWxsYmFja3MpKAorCQlnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJCWdpdF90cmFuc3BvcnRfbWVzc2FnZV9jYiBwcm9ncmVzc19jYiwKIAkJZ2l0X3RyYW5zcG9ydF9tZXNzYWdlX2NiIGVycm9yX2NiLAogCQl2b2lkICpwYXlsb2FkKTsKIAogCS8qIENvbm5lY3QgdGhlIHRyYW5zcG9ydCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIHVzaW5nIHRoZSBnaXZlbgogCSAqIGRpcmVjdGlvbi4gKi8KLQlpbnQgKCpjb25uZWN0KShzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LAorCWludCAoKmNvbm5lY3QpKAorCQlnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJCWNvbnN0IGNoYXIgKnVybCwKIAkJZ2l0X2NyZWRfYWNxdWlyZV9jYiBjcmVkX2FjcXVpcmVfY2IsCiAJCXZvaWQgKmNyZWRfYWNxdWlyZV9wYXlsb2FkLAogCQlpbnQgZGlyZWN0aW9uLAogCQlpbnQgZmxhZ3MpOwogCi0JLyogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGNvbm5lY3QoKS4gVGhlCi0JICogcHJvdmlkZWQgY2FsbGJhY2sgaXMgaW52b2tlZCBmb3IgZWFjaCByZWYgZGlzY292ZXJlZCBvbiB0aGUgcmVtb3RlCi0JICogZW5kLiAqLwotCWludCAoKmxzKShzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LAotCQlnaXRfaGVhZGxpc3RfY2IgbGlzdF9jYiwKLQkJdm9pZCAqcGF5bG9hZCk7CisJLyogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvCisJICogY29ubmVjdCgpLiBUaGUgYXJyYXkgcmV0dXJuZWQgaXMgb3duZWQgYnkgdGhlIHRyYW5zcG9ydCBhbmQKKwkgKiBpcyBndXJhbnRlZWQgdW50aWwgdGhlIG5leHQgY2FsbCBvZiBhIHRyYW5zcG9ydCBmdW5jdGlvbi4gKi8KKwlpbnQgKCpscykoCisJCWNvbnN0IGdpdF9yZW1vdGVfaGVhZCAqKipvdXQsCisJCXNpemVfdCAqc2l6ZSwKKwkJZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAogCS8qIEV4ZWN1dGVzIHRoZSBwdXNoIHdob3NlIGNvbnRleHQgaXMgaW4gdGhlIGdpdF9wdXNoIG9iamVjdC4gKi8KLQlpbnQgKCpwdXNoKShzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LCBnaXRfcHVzaCAqcHVzaCk7CisJaW50ICgqcHVzaCkoZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LCBnaXRfcHVzaCAqcHVzaCk7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8gY29ubmVjdCgpLCB3aGVuCiAJICogdGhlIGRpcmVjdGlvbiBpcyBGRVRDSC4gVGhlIGZ1bmN0aW9uIHBlcmZvcm1zIGEgbmVnb3RpYXRpb24gdG8gY2FsY3VsYXRlCiAJICogdGhlIHdhbnRzIGxpc3QgZm9yIHRoZSBmZXRjaC4gKi8KLQlpbnQgKCpuZWdvdGlhdGVfZmV0Y2gpKHN0cnVjdCBnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJaW50ICgqbmVnb3RpYXRlX2ZldGNoKSgKKwkJZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LAogCQlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAkJY29uc3QgZ2l0X3JlbW90ZV9oZWFkICogY29uc3QgKnJlZnMsCiAJCXNpemVfdCBjb3VudCk7CkBAIC0xOTAsMjggKzI0MCwyOSBAQAogCS8qIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBuZWdvdGlhdGVfZmV0Y2goKSwKIAkgKiB3aGVuIHRoZSBkaXJlY3Rpb24gaXMgRkVUQ0guIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBwYWNrIGZpbGUgZm9yCiAJICogdGhlIGZldGNoIGZyb20gdGhlIHJlbW90ZSBlbmQuICovCi0JaW50ICgqZG93bmxvYWRfcGFjaykoc3RydWN0IGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwlpbnQgKCpkb3dubG9hZF9wYWNrKSgKKwkJZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LAogCQlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAkJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cywKIAkJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzX2NhbGxiYWNrIHByb2dyZXNzX2NiLAogCQl2b2lkICpwcm9ncmVzc19wYXlsb2FkKTsKIAogCS8qIENoZWNrcyB0byBzZWUgaWYgdGhlIHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgKi8KLQlpbnQgKCppc19jb25uZWN0ZWQpKHN0cnVjdCBnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQpOworCWludCAoKmlzX2Nvbm5lY3RlZCkoZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAogCS8qIFJlYWRzIHRoZSBmbGFncyB2YWx1ZSBwcmV2aW91c2x5IHBhc3NlZCBpbnRvIGNvbm5lY3QoKSAqLwotCWludCAoKnJlYWRfZmxhZ3MpKHN0cnVjdCBnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCAqZmxhZ3MpOworCWludCAoKnJlYWRfZmxhZ3MpKGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50ICpmbGFncyk7CiAKIAkvKiBDYW5jZWxzIGFueSBvdXRzdGFuZGluZyB0cmFuc3BvcnQgb3BlcmF0aW9uICovCi0Jdm9pZCAoKmNhbmNlbCkoc3RydWN0IGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCk7CisJdm9pZCAoKmNhbmNlbCkoZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAogCS8qIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgY29ubmVjdCgpIC0tIGl0IHRlcm1pbmF0ZXMgdGhlCiAJICogY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIGVuZC4gKi8KLQlpbnQgKCpjbG9zZSkoc3RydWN0IGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCk7CisJaW50ICgqY2xvc2UpKGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCk7CiAKIAkvKiBGcmVlcy9kZXN0cnVjdHMgdGhlIGdpdF90cmFuc3BvcnQgb2JqZWN0LiAqLwotCXZvaWQgKCpmcmVlKShzdHJ1Y3QgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKLX0gZ2l0X3RyYW5zcG9ydDsKKwl2b2lkICgqZnJlZSkoZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKK307CiAKICNkZWZpbmUgR0lUX1RSQU5TUE9SVF9WRVJTSU9OIDEKICNkZWZpbmUgR0lUX1RSQU5TUE9SVF9JTklUIHtHSVRfVFJBTlNQT1JUX1ZFUlNJT059CkBAIC0yMzEsNiArMjgyLDQwIEBACiAvKiBTaWduYXR1cmUgb2YgYSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgdHJhbnNwb3J0ICovCiB0eXBlZGVmIGludCAoKmdpdF90cmFuc3BvcnRfY2IpKGdpdF90cmFuc3BvcnQgKipvdXQsIGdpdF9yZW1vdGUgKm93bmVyLCB2b2lkICpwYXJhbSk7CiAKKy8qKgorICogQWRkIGEgY3VzdG9tIHRyYW5zcG9ydCBkZWZpbml0aW9uLCB0byBiZSB1c2VkIGluIGFkZGl0aW9uIHRvIHRoZSBidWlsdC1pbgorICogc2V0IG9mIHRyYW5zcG9ydHMgdGhhdCBjb21lIHdpdGggbGliZ2l0Mi4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzeW5jaHJvbml6aW5nIGNhbGxzIHRvIGdpdF90cmFuc3BvcnRfcmVnaXN0ZXIKKyAqIGFuZCBnaXRfdHJhbnNwb3J0X3VucmVnaXN0ZXIgd2l0aCBvdGhlciBjYWxscyB0byB0aGUgbGlicmFyeSB0aGF0CisgKiBpbnN0YW50aWF0ZSB0cmFuc3BvcnRzLgorICoKKyAqIEBwYXJhbSBwcmVmaXggVGhlIHNjaGVtZSAoZW5kaW5nIGluICI6Ly8iKSB0byBtYXRjaCwgaS5lLiAiZ2l0Oi8vIgorICogQHBhcmFtIHByaW9yaXR5IFRoZSBwcmlvcml0eSBvZiB0aGlzIHRyYW5zcG9ydCByZWxhdGl2ZSB0byBvdGhlcnMgd2l0aAorICoJCXRoZSBzYW1lIHByZWZpeC4gQnVpbHQtaW4gdHJhbnNwb3J0cyBoYXZlIGEgcHJpb3JpdHkgb2YgMS4KKyAqIEBwYXJhbSBjYiBUaGUgY2FsbGJhY2sgdXNlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIHRyYW5zcG9ydAorICogQHBhcmFtIHBhcmFtIEEgZml4ZWQgcGFyYW1ldGVyIHRvIHBhc3MgdG8gY2IgYXQgY3JlYXRpb24gdGltZQorICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF90cmFuc3BvcnRfcmVnaXN0ZXIoCisJY29uc3QgY2hhciAqcHJlZml4LAorCXVuc2lnbmVkIHByaW9yaXR5LAorCWdpdF90cmFuc3BvcnRfY2IgY2IsCisJdm9pZCAqcGFyYW0pOworCisvKioKKyAqCisgKiBVbnJlZ2lzdGVyIGEgY3VzdG9tIHRyYW5zcG9ydCBkZWZpbml0aW9uIHdoaWNoIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQKKyAqIHdpdGggZ2l0X3RyYW5zcG9ydF9yZWdpc3Rlci4KKyAqCisgKiBAcGFyYW0gcHJlZml4IEZyb20gdGhlIHByZXZpb3VzIGNhbGwgdG8gZ2l0X3RyYW5zcG9ydF9yZWdpc3RlcgorICogQHBhcmFtIHByaW9yaXR5IEZyb20gdGhlIHByZXZpb3VzIGNhbGwgdG8gZ2l0X3RyYW5zcG9ydF9yZWdpc3RlcgorICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF90cmFuc3BvcnRfdW5yZWdpc3RlcigKKwljb25zdCBjaGFyICpwcmVmaXgsCisJdW5zaWduZWQgcHJpb3JpdHkpOworCiAvKiBUcmFuc3BvcnRzIHdoaWNoIGNvbWUgd2l0aCBsaWJnaXQyIChtYXRjaCBnaXRfdHJhbnNwb3J0X2NiKS4gVGhlIGV4cGVjdGVkCiAgKiB2YWx1ZSBmb3IgInBhcmFtIiBpcyBsaXN0ZWQgaW4tbGluZSBiZWxvdy4gKi8KIApAQCAtMjk5LDM1ICszODQsMzYgQEAKIAlHSVRfU0VSVklDRV9SRUNFSVZFUEFDSyA9IDQsCiB9IGdpdF9zbWFydF9zZXJ2aWNlX3Q7CiAKLXN0cnVjdCBnaXRfc21hcnRfc3VidHJhbnNwb3J0OwordHlwZWRlZiBzdHJ1Y3QgZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydCBnaXRfc21hcnRfc3VidHJhbnNwb3J0OwordHlwZWRlZiBzdHJ1Y3QgZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW07CiAKIC8qIEEgc3RyZWFtIHVzZWQgYnkgdGhlIHNtYXJ0IHRyYW5zcG9ydCB0byByZWFkIGFuZCB3cml0ZSBkYXRhCiAgKiBmcm9tIGEgc3VidHJhbnNwb3J0ICovCi10eXBlZGVmIHN0cnVjdCBnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSB7CitzdHJ1Y3QgZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gewogCS8qIFRoZSBvd25pbmcgc3VidHJhbnNwb3J0ICovCi0Jc3RydWN0IGdpdF9zbWFydF9zdWJ0cmFuc3BvcnQgKnN1YnRyYW5zcG9ydDsKKwlnaXRfc21hcnRfc3VidHJhbnNwb3J0ICpzdWJ0cmFuc3BvcnQ7CiAKIAlpbnQgKCpyZWFkKSgKLQkJCXN0cnVjdCBnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqc3RyZWFtLAotCQkJY2hhciAqYnVmZmVyLAotCQkJc2l6ZV90IGJ1Zl9zaXplLAotCQkJc2l6ZV90ICpieXRlc19yZWFkKTsKKwkJZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKnN0cmVhbSwKKwkJY2hhciAqYnVmZmVyLAorCQlzaXplX3QgYnVmX3NpemUsCisJCXNpemVfdCAqYnl0ZXNfcmVhZCk7CiAKIAlpbnQgKCp3cml0ZSkoCi0JCQlzdHJ1Y3QgZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKnN0cmVhbSwKLQkJCWNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCXNpemVfdCBsZW4pOworCQlnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqc3RyZWFtLAorCQljb25zdCBjaGFyICpidWZmZXIsCisJCXNpemVfdCBsZW4pOwogCiAJdm9pZCAoKmZyZWUpKAotCQkJc3RydWN0IGdpdF9zbWFydF9zdWJ0cmFuc3BvcnRfc3RyZWFtICpzdHJlYW0pOwotfSBnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbTsKKwkJZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKnN0cmVhbSk7Cit9OwogCiAvKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHN1YnRyYW5zcG9ydCB3aGljaCBjYXJyaWVzIGRhdGEgZm9yIHRoZQogICogc21hcnQgdHJhbnNwb3J0ICovCi10eXBlZGVmIHN0cnVjdCBnaXRfc21hcnRfc3VidHJhbnNwb3J0IHsKK3N0cnVjdCBnaXRfc21hcnRfc3VidHJhbnNwb3J0IHsKIAlpbnQgKCogYWN0aW9uKSgKIAkJCWdpdF9zbWFydF9zdWJ0cmFuc3BvcnRfc3RyZWFtICoqb3V0LAotCQkJc3RydWN0IGdpdF9zbWFydF9zdWJ0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCWdpdF9zbWFydF9zdWJ0cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJCWNvbnN0IGNoYXIgKnVybCwKIAkJCWdpdF9zbWFydF9zZXJ2aWNlX3QgYWN0aW9uKTsKIApAQCAtMzM3LDEwICs0MjMsMTAgQEAKIAkgKgogCSAqIDEuIFVQTE9BRFBBQ0tfTFMgLT4gVVBMT0FEUEFDSwogCSAqIDIuIFJFQ0VJVkVQQUNLX0xTIC0+IFJFQ0VJVkVQQUNLICovCi0JaW50ICgqIGNsb3NlKShzdHJ1Y3QgZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKKwlpbnQgKCpjbG9zZSkoZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAotCXZvaWQgKCogZnJlZSkoc3RydWN0IGdpdF9zbWFydF9zdWJ0cmFuc3BvcnQgKnRyYW5zcG9ydCk7Ci19IGdpdF9zbWFydF9zdWJ0cmFuc3BvcnQ7CisJdm9pZCAoKmZyZWUpKGdpdF9zbWFydF9zdWJ0cmFuc3BvcnQgKnRyYW5zcG9ydCk7Cit9OwogCiAvKiBBIGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgc3VidHJhbnNwb3J0IGZvciB0aGUgc21hcnQgdHJhbnNwb3J0ICovCiB0eXBlZGVmIGludCAoKmdpdF9zbWFydF9zdWJ0cmFuc3BvcnRfY2IpKApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3RyZWUuaCBiL2luY2x1ZGUvZ2l0Mi90cmVlLmgKaW5kZXggNjVkOGNjMS4uZDk0YjQ0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3RyZWUuaAorKysgYi9pbmNsdWRlL2dpdDIvdHJlZS5oCkBAIC0xOTksNiArMTk5LDE3IEBACiBHSVRfRVhURVJOKGdpdF9maWxlbW9kZV90KSBnaXRfdHJlZV9lbnRyeV9maWxlbW9kZShjb25zdCBnaXRfdHJlZV9lbnRyeSAqZW50cnkpOwogCiAvKioKKyAqIEdldCB0aGUgcmF3IFVOSVggZmlsZSBhdHRyaWJ1dGVzIG9mIGEgdHJlZSBlbnRyeQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkgbm9ybWFsaXphdGlvbiBhbmQgaXMgb25seSB1c2VmdWwKKyAqIGlmIHlvdSBuZWVkIHRvIGJlIGFibGUgdG8gcmVjcmVhdGUgdGhlIG9yaWdpbmFsIHRyZWUgb2JqZWN0LgorICoKKyAqIEBwYXJhbSBlbnRyeSBhIHRyZWUgZW50cnkKKyAqIEByZXR1cm4gZmlsZW1vZGUgYXMgYW4gaW50ZWdlcgorICovCisKK0dJVF9FWFRFUk4oZ2l0X2ZpbGVtb2RlX3QpIGdpdF90cmVlX2VudHJ5X2ZpbGVtb2RlX3Jhdyhjb25zdCBnaXRfdHJlZV9lbnRyeSAqZW50cnkpOworLyoqCiAgKiBDb21wYXJlIHR3byB0cmVlIGVudHJpZXMKICAqCiAgKiBAcGFyYW0gZTEgZmlyc3QgdHJlZSBlbnRyeQpAQCAtMjA4LDcgKzIxOSw3IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X3RyZWVfZW50cnlfY21wKGNvbnN0IGdpdF90cmVlX2VudHJ5ICplMSwgY29uc3QgZ2l0X3RyZWVfZW50cnkgKmUyKTsKIAogLyoqCi0gKiBDb252ZXJ0IGEgdHJlZSBlbnRyeSB0byB0aGUgZ2l0X29iamVjdCBpdCBwb2ludHMgdG9vLgorICogQ29udmVydCBhIHRyZWUgZW50cnkgdG8gdGhlIGdpdF9vYmplY3QgaXQgcG9pbnRzIHRvLgogICoKICAqIFlvdSBtdXN0IGNhbGwgYGdpdF9vYmplY3RfZnJlZSgpYCBvbiB0aGUgb2JqZWN0IHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3R5cGVzLmggYi9pbmNsdWRlL2dpdDIvdHlwZXMuaAppbmRleCBkYzM0NDA3Li41NTUwNWIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvdHlwZXMuaAorKysgYi9pbmNsdWRlL2dpdDIvdHlwZXMuaApAQCAtMTc0LDYgKzE3NCw5IEBACiAvKiogTWVyZ2UgaGVhZHMsIHRoZSBpbnB1dCB0byBtZXJnZSAqLwogdHlwZWRlZiBzdHJ1Y3QgZ2l0X21lcmdlX2hlYWQgZ2l0X21lcmdlX2hlYWQ7CiAKKy8qKiBNZXJnZSByZXN1bHQgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9tZXJnZV9yZXN1bHQgZ2l0X21lcmdlX3Jlc3VsdDsKKwogLyoqIFJlcHJlc2VudGF0aW9uIG9mIGEgc3RhdHVzIGNvbGxlY3Rpb24gKi8KIHR5cGVkZWYgc3RydWN0IGdpdF9zdGF0dXNfbGlzdCBnaXRfc3RhdHVzX2xpc3Q7CiAKQEAgLTIxMiwxMSArMjE1LDIxIEBACiAvKioKICAqIFRoaXMgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgdG8gYWxsb3cgdGhlCiAgKiB1c2VyIHRvIHNlZSB0aGUgcHJvZ3Jlc3MuCisgKgorICogLSB0b3RhbF9vYmplY3RzOiBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcGFja2ZpbGUgYmVpbmcgZG93bmxvYWRlZAorICogLSBpbmRleGVkX29iamVjdHM6IHJlY2VpdmVkIG9iamVjdHMgdGhhdCBoYXZlIGJlZW4gaGFzaGVkCisgKiAtIHJlY2VpdmVkX29iamVjdHM6IG9iamVjdHMgd2hpY2ggaGF2ZSBiZWVuIGRvd25sb2FkZWQKKyAqIC0gbG9jYWxfb2JqZWN0czogbG9jYWxseS1hdmFpbGFibGUgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBpbmplY3RlZAorICogICAgaW4gb3JkZXIgdG8gZml4IGEgdGhpbiBwYWNrLgorICogLSByZWNlaXZlZC1ieXRlczogc2l6ZSBvZiB0aGUgcGFja2ZpbGUgcmVjZWl2ZWQgdXAgdG8gbm93CiAgKi8KIHR5cGVkZWYgc3RydWN0IGdpdF90cmFuc2Zlcl9wcm9ncmVzcyB7CiAJdW5zaWduZWQgaW50IHRvdGFsX29iamVjdHM7CiAJdW5zaWduZWQgaW50IGluZGV4ZWRfb2JqZWN0czsKIAl1bnNpZ25lZCBpbnQgcmVjZWl2ZWRfb2JqZWN0czsKKwl1bnNpZ25lZCBpbnQgbG9jYWxfb2JqZWN0czsKKwl1bnNpZ25lZCBpbnQgdG90YWxfZGVsdGFzOworCXVuc2lnbmVkIGludCBpbmRleGVkX2RlbHRhczsKIAlzaXplX3QgcmVjZWl2ZWRfYnl0ZXM7CiB9IGdpdF90cmFuc2Zlcl9wcm9ncmVzczsKIApAQCAtMjI5LDYgKzI0Miw4NyBAQAogICovCiB0eXBlZGVmIGludCAoKmdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjaykoY29uc3QgZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cywgdm9pZCAqcGF5bG9hZCk7CiAKKy8qKgorICogT3BhcXVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBzdWJtb2R1bGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9zdWJtb2R1bGUgZ2l0X3N1Ym1vZHVsZTsKKworLyoqCisgKiBTdWJtb2R1bGUgdXBkYXRlIHZhbHVlcworICoKKyAqIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgc2V0dGluZ3MgZm9yIHRoZSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAKKyAqIGNvbmZpZ3VyYXRpb24gdmFsdWUgd2hpY2ggc2F5cyBob3cgdG8gaGFuZGxlIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWAgZm9yCisgKiB0aGlzIHN1Ym1vZHVsZS4gIFRoZSB2YWx1ZSBpcyB1c3VhbGx5IHNldCBpbiB0aGUgIi5naXRtb2R1bGVzIiBmaWxlIGFuZAorICogY29waWVkIHRvICIuZ2l0L2NvbmZpZyIgd2hlbiB0aGUgc3VibW9kdWxlIGlzIGluaXRpYWxpemVkLgorICoKKyAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIG9uIGEgcGVyLXN1Ym1vZHVsZSBiYXNpcyB3aXRoCisgKiBgZ2l0X3N1Ym1vZHVsZV9zZXRfdXBkYXRlKClgIGFuZCB3cml0ZSB0aGUgY2hhbmdlZCB2YWx1ZSB0byBkaXNrIHVzaW5nCisgKiBgZ2l0X3N1Ym1vZHVsZV9zYXZlKClgLiAgSWYgeW91IGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHZhbHVlLCB5b3UgY2FuCisgKiByZXZlcnQgaXQgYnkgcGFzc2luZyBgR0lUX1NVQk1PRFVMRV9VUERBVEVfUkVTRVRgIHRvIHRoZSBzZXQgZnVuY3Rpb24uCisgKgorICogVGhlIHZhbHVlcyBhcmU6CisgKgorICogLSBHSVRfU1VCTU9EVUxFX1VQREFURV9SRVNFVDogcmVzZXQgdG8gdGhlIG9uLWRpc2sgdmFsdWUuCisgKiAtIEdJVF9TVUJNT0RVTEVfVVBEQVRFX0NIRUNLT1VUOiB0aGUgZGVmYXVsdDsgd2hlbiBhIHN1Ym1vZHVsZSBpcworICogICB1cGRhdGVkLCBjaGVja291dCB0aGUgbmV3IGRldGFjaGVkIEhFQUQgdG8gdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkuCisgKiAtIEdJVF9TVUJNT0RVTEVfVVBEQVRFX1JFQkFTRTogdXBkYXRlIGJ5IHJlYmFzaW5nIHRoZSBjdXJyZW50IGNoZWNrZWQKKyAqICAgb3V0IGJyYW5jaCBvbnRvIHRoZSBjb21taXQgZnJvbSB0aGUgc3VwZXJwcm9qZWN0LgorICogLSBHSVRfU1VCTU9EVUxFX1VQREFURV9NRVJHRTogdXBkYXRlIGJ5IG1lcmdpbmcgdGhlIGNvbW1pdCBpbiB0aGUKKyAqICAgc3VwZXJwcm9qZWN0IGludG8gdGhlIGN1cnJlbnQgY2hlY2tvdXQgb3V0IGJyYW5jaCBvZiB0aGUgc3VibW9kdWxlLgorICogLSBHSVRfU1VCTU9EVUxFX1VQREFURV9OT05FOiBkbyBub3QgdXBkYXRlIHRoaXMgc3VibW9kdWxlIGV2ZW4gd2hlbgorICogICB0aGUgY29tbWl0IGluIHRoZSBzdXBlcnByb2plY3QgaXMgdXBkYXRlZC4KKyAqIC0gR0lUX1NVQk1PRFVMRV9VUERBVEVfREVGQVVMVDogbm90IHVzZWQgZXhjZXB0IGFzIHN0YXRpYyBpbml0aWFsaXplcgorICogICB3aGVuIHdlIGRvbid0IHdhbnQgYW55IHBhcnRpY3VsYXIgdXBkYXRlIHJ1bGUgdG8gYmUgc3BlY2lmaWVkLgorICovCit0eXBlZGVmIGVudW0geworCUdJVF9TVUJNT0RVTEVfVVBEQVRFX1JFU0VUICAgID0gLTEsCisKKwlHSVRfU1VCTU9EVUxFX1VQREFURV9DSEVDS09VVCA9IDEsCisJR0lUX1NVQk1PRFVMRV9VUERBVEVfUkVCQVNFICAgPSAyLAorCUdJVF9TVUJNT0RVTEVfVVBEQVRFX01FUkdFICAgID0gMywKKwlHSVRfU1VCTU9EVUxFX1VQREFURV9OT05FICAgICA9IDQsCisKKwlHSVRfU1VCTU9EVUxFX1VQREFURV9ERUZBVUxUICA9IDAKK30gZ2l0X3N1Ym1vZHVsZV91cGRhdGVfdDsKKworLyoqCisgKiBTdWJtb2R1bGUgaWdub3JlIHZhbHVlcworICoKKyAqIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgc2V0dGluZ3MgZm9yIHRoZSBgc3VibW9kdWxlLiRuYW1lLmlnbm9yZWAKKyAqIGNvbmZpZ3VyYXRpb24gdmFsdWUgd2hpY2ggc2F5cyBob3cgZGVlcGx5IHRvIGxvb2sgYXQgdGhlIHdvcmtpbmcKKyAqIGRpcmVjdG9yeSB3aGVuIGdldHRpbmcgc3VibW9kdWxlIHN0YXR1cy4KKyAqCisgKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdmFsdWUgaW4gbWVtb3J5IG9uIGEgcGVyLXN1Ym1vZHVsZSBiYXNpcyB3aXRoCisgKiBgZ2l0X3N1Ym1vZHVsZV9zZXRfaWdub3JlKClgIGFuZCBjYW4gd3JpdGUgdGhlIGNoYW5nZWQgdmFsdWUgdG8gZGlzaworICogd2l0aCBgZ2l0X3N1Ym1vZHVsZV9zYXZlKClgLiAgSWYgeW91IGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHZhbHVlLCB5b3UKKyAqIGNhbiByZXZlcnQgdG8gdGhlIG9uIGRpc2sgdmFsdWUgYnkgdXNpbmcgYEdJVF9TVUJNT0RVTEVfSUdOT1JFX1JFU0VUYC4KKyAqCisgKiBUaGUgdmFsdWVzIGFyZToKKyAqCisgKiAtIEdJVF9TVUJNT0RVTEVfSUdOT1JFX1JFU0VUOiByZXNldCB0byB0aGUgb24tZGlzayB2YWx1ZS4KKyAqIC0gR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORTogZG9uJ3QgaWdub3JlIGFueSBjaGFuZ2UgLSBpLmUuIGV2ZW4gYW4KKyAqICAgdW50cmFja2VkIGZpbGUsIHdpbGwgbWFyayB0aGUgc3VibW9kdWxlIGFzIGRpcnR5LiAgSWdub3JlZCBmaWxlcyBhcmUKKyAqICAgc3RpbGwgaWdub3JlZCwgb2YgY291cnNlLgorICogLSBHSVRfU1VCTU9EVUxFX0lHTk9SRV9VTlRSQUNLRUQ6IGlnbm9yZSB1bnRyYWNrZWQgZmlsZXM7IG9ubHkgY2hhbmdlcworICogICB0byB0cmFja2VkIGZpbGVzLCBvciB0aGUgaW5kZXggb3IgdGhlIEhFQUQgY29tbWl0IHdpbGwgbWF0dGVyLgorICogLSBHSVRfU1VCTU9EVUxFX0lHTk9SRV9ESVJUWTogaWdub3JlIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LAorICogICBvbmx5IGNvbnNpZGVyaW5nIGNoYW5nZXMgaWYgdGhlIEhFQUQgb2Ygc3VibW9kdWxlIGhhcyBtb3ZlZCBmcm9tIHRoZQorICogICB2YWx1ZSBpbiB0aGUgc3VwZXJwcm9qZWN0LgorICogLSBHSVRfU1VCTU9EVUxFX0lHTk9SRV9BTEw6IG5ldmVyIGNoZWNrIGlmIHRoZSBzdWJtb2R1bGUgaXMgZGlydHkKKyAqIC0gR0lUX1NVQk1PRFVMRV9JR05PUkVfREVGQVVMVDogbm90IHVzZWQgZXhjZXB0IGFzIHN0YXRpYyBpbml0aWFsaXplcgorICogICB3aGVuIHdlIGRvbid0IHdhbnQgYW55IHBhcnRpY3VsYXIgaWdub3JlIHJ1bGUgdG8gYmUgc3BlY2lmaWVkLgorICovCit0eXBlZGVmIGVudW0geworCUdJVF9TVUJNT0RVTEVfSUdOT1JFX1JFU0VUICAgICA9IC0xLCAvKiByZXNldCB0byBvbi1kaXNrIHZhbHVlICovCisKKwlHSVRfU1VCTU9EVUxFX0lHTk9SRV9OT05FICAgICAgPSAxLCAgLyogYW55IGNoYW5nZSBvciB1bnRyYWNrZWQgPT0gZGlydHkgKi8KKwlHSVRfU1VCTU9EVUxFX0lHTk9SRV9VTlRSQUNLRUQgPSAyLCAgLyogZGlydHkgaWYgdHJhY2tlZCBmaWxlcyBjaGFuZ2UgKi8KKwlHSVRfU1VCTU9EVUxFX0lHTk9SRV9ESVJUWSAgICAgPSAzLCAgLyogb25seSBkaXJ0eSBpZiBIRUFEIG1vdmVkICovCisJR0lUX1NVQk1PRFVMRV9JR05PUkVfQUxMICAgICAgID0gNCwgIC8qIG5ldmVyIGRpcnR5ICovCisKKwlHSVRfU1VCTU9EVUxFX0lHTk9SRV9ERUZBVUxUICAgPSAwCit9IGdpdF9zdWJtb2R1bGVfaWdub3JlX3Q7CisKIC8qKiBAfSAqLwogR0lUX0VORF9ERUNMCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi92ZXJzaW9uLmggYi9pbmNsdWRlL2dpdDIvdmVyc2lvbi5oCmluZGV4IGQ4YTkxNWYuLmM0YzVlOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9naXQyL3ZlcnNpb24uaApAQCAtNyw5ICs3LDkgQEAKICNpZm5kZWYgSU5DTFVERV9naXRfdmVyc2lvbl9oX18KICNkZWZpbmUgSU5DTFVERV9naXRfdmVyc2lvbl9oX18KIAotI2RlZmluZSBMSUJHSVQyX1ZFUlNJT04gIjAuMTkuMCIKKyNkZWZpbmUgTElCR0lUMl9WRVJTSU9OICIwLjIwLjAiCiAjZGVmaW5lIExJQkdJVDJfVkVSX01BSk9SIDAKLSNkZWZpbmUgTElCR0lUMl9WRVJfTUlOT1IgMTkKKyNkZWZpbmUgTElCR0lUMl9WRVJfTUlOT1IgMjAKICNkZWZpbmUgTElCR0lUMl9WRVJfUkVWSVNJT04gMAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmdpdDIucGMuaW4gYi9saWJnaXQyLnBjLmluCmluZGV4IDUyYWQ5MDEuLjhmNTI3OTIgMTAwNjQ0Ci0tLSBhL2xpYmdpdDIucGMuaW4KKysrIGIvbGliZ2l0Mi5wYy5pbgpAQCAtNCw2ICs0LDcgQEAKIE5hbWU6IGxpYmdpdDIKIERlc2NyaXB0aW9uOiBUaGUgZ2l0IGxpYnJhcnksIHRha2UgMgogVmVyc2lvbjogQExJQkdJVDJfVkVSU0lPTl9TVFJJTkdACi1SZXF1aXJlczogbGliY3J5cHRvCi1MaWJzOiAtTCR7bGliZGlyfSAtbGdpdDIgLWx6IC1sY3J5cHRvCitSZXF1aXJlcy5wcml2YXRlOiBATElCR0lUMl9QQ19SRVFVSVJFU0AKK0xpYnMucHJpdmF0ZTogQExJQkdJVDJfUENfTElCU0AKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ2l0MgogQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL3BhY2thZ2luZy9ycG0vUkVBRE1FIGIvcGFja2FnaW5nL3JwbS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNjQxMGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnaW5nL3JwbS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVRvIGJ1aWxkIFJQTSBwYWtjYWdlcyBmb3IgRmVkb3JhLCBmb2xsb3cgdGhlc2Ugc3RlcHM6Ci0gY3AgcGFja2FnaW5nL3JwbS9saWJnaXQyLnNwZWMgfi9ycG1idWlsZC9TUEVDUwotIGNkIH4vcnBtYnVpbGQvU09VUkNFUwotIHdnZXQgaHR0cHM6Ly9naXRodWIuY29tL2Rvd25sb2Fkcy9saWJnaXQyL2xpYmdpdDIvbGliZ2l0Mi0wLjE2LjAudGFyLmd6Ci0gY2Qgfi9ycG1idWlsZC9TUEVDUwotIHJwbWJ1aWxkIC1iYSBsaWJnaXQyLnNwZWMKZGlmZiAtLWdpdCBhL3BhY2thZ2luZy9ycG0vbGliZ2l0Mi5zcGVjIGIvcGFja2FnaW5nL3JwbS9saWJnaXQyLnNwZWMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZTcwYzEuLjAwMDAwMDAKLS0tIGEvcGFja2FnaW5nL3JwbS9saWJnaXQyLnNwZWMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotIwotIyBzcGVjIGZpbGUgZm9yIHBhY2thZ2UgbGliZ2l0MgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMTIgU2FsZWVtIEFuc2FyaSA8dHV4ZG5hQGdtYWlsLmNvbT4KLSMgQ29weXJpZ2h0IChjKSAyMDEyIFNVU0UgTElOVVggUHJvZHVjdHMgR21iSCwgTnVlcm5iZXJnLCBHZXJtYW55LgotIyBDb3B5cmlnaHQgKGMpIDIwMTEsIFNhc2NoYSBQZWlsaWNrZSA8c2FzY2hwZUBnbXguZGU+Ci0jCi0jIEFsbCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgY29udHJpYnV0ZWQgYnkgdGhpcmQgcGFydGllcwotIyByZW1haW4gdGhlIHByb3BlcnR5IG9mIHRoZWlyIGNvcHlyaWdodCBvd25lcnMsIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkCi0jIHVwb24uIFRoZSBsaWNlbnNlIGZvciB0aGlzIGZpbGUsIGFuZCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlCi0jIGZpbGUsIGlzIHRoZSBzYW1lIGxpY2Vuc2UgYXMgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGl0c2VsZiAodW5sZXNzIHRoZQotIyBsaWNlbnNlIGZvciB0aGUgcHJpc3RpbmUgcGFja2FnZSBpcyBub3QgYW4gT3BlbiBTb3VyY2UgTGljZW5zZSwgaW4gd2hpY2gKLSMgY2FzZSB0aGUgbGljZW5zZSBpcyB0aGUgTUlUIExpY2Vuc2UpLiBBbiAiT3BlbiBTb3VyY2UgTGljZW5zZSIgaXMgYQotIyBsaWNlbnNlIHRoYXQgY29uZm9ybXMgdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKFZlcnNpb24gMS45KQotIyBwdWJsaXNoZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuCi0KLSMgUGxlYXNlIHN1Ym1pdCBidWdmaXhlcyBvciBjb21tZW50cyB2aWEgaHR0cDovL2J1Z3Mub3BlbnN1c2Uub3JnLwotIwotTmFtZTogICAgICAgICAgIGxpYmdpdDIKLVZlcnNpb246ICAgICAgICAwLjE2LjAKLVJlbGVhc2U6ICAgICAgICAxCi1TdW1tYXJ5OiAgICAgICAgQyBnaXQgbGlicmFyeQotTGljZW5zZTogICAgICAgIEdQTC0yLjAgd2l0aCBsaW5raW5nCi1Hcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzL0MgYW5kIEMrKwotVXJsOiAgICAgICAgICAgIGh0dHA6Ly9saWJnaXQyLmdpdGh1Yi5jb20vCi1Tb3VyY2UwOiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2Rvd25sb2Fkcy9saWJnaXQyL2xpYmdpdDIvbGliZ2l0Mi0wLjE2LjAudGFyLmd6Ci1CdWlsZFJlcXVpcmVzOiAgY21ha2UKLUJ1aWxkUmVxdWlyZXM6ICBwa2djb25maWcKLUJ1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tYnVpbGQKLSVpZiAwJXs/ZmVkb3JhfSB8fCAwJXs/cmhlbF92ZXJzaW9ufSB8fCAwJXs/Y2VudG9zX3ZlcnNpb259Ci1CdWlsZFJlcXVpcmVzOiAgb3BlbnNzbC1kZXZlbAotJWVsc2UKLUJ1aWxkUmVxdWlyZXM6ICBsaWJvcGVuc3NsLWRldmVsCi0lZW5kaWYKLQotJWRlc2NyaXB0aW9uCi1saWJnaXQyIGlzIGEgcG9ydGFibGUsIHB1cmUgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR2l0IGNvcmUgbWV0aG9kcwotcHJvdmlkZWQgYXMgYSByZS1lbnRyYW50IGxpbmthYmxlIGxpYnJhcnkgd2l0aCBhIHNvbGlkIEFQSSwgYWxsb3dpbmcKLXlvdSB0byB3cml0ZSBuYXRpdmUgc3BlZWQgY3VzdG9tIEdpdCBhcHBsaWNhdGlvbnMgaW4gYW55IGxhbmd1YWdlCi13aXRoIGJpbmRpbmdzLgotCi0lcGFja2FnZSAtbiAle25hbWV9LTAKLVN1bW1hcnk6ICAgICAgICBDIGdpdCBsaWJyYXJ5Ci1Hcm91cDogICAgICAgICAgU3lzdGVtL0xpYnJhcmllcwotCi0lZGVzY3JpcHRpb24gLW4gJXtuYW1lfS0wCi1saWJnaXQyIGlzIGEgcG9ydGFibGUsIHB1cmUgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR2l0IGNvcmUgbWV0aG9kcwotcHJvdmlkZWQgYXMgYSByZS1lbnRyYW50IGxpbmthYmxlIGxpYnJhcnkgd2l0aCBhIHNvbGlkIEFQSSwgYWxsb3dpbmcKLXlvdSB0byB3cml0ZSBuYXRpdmUgc3BlZWQgY3VzdG9tIEdpdCBhcHBsaWNhdGlvbnMgaW4gYW55IGxhbmd1YWdlCi13aXRoIGJpbmRpbmdzLgotCi0lcGFja2FnZSBkZXZlbAotU3VtbWFyeTogICAgICAgIEMgZ2l0IGxpYnJhcnkKLUdyb3VwOiAgICAgICAgICBEZXZlbG9wbWVudC9MaWJyYXJpZXMvQyBhbmQgQysrCi1SZXF1aXJlczogICAgICAgJXtuYW1lfS0wID49ICV7dmVyc2lvbn0KLQotJWRlc2NyaXB0aW9uIGRldmVsCi1UaGlzIHBhY2thZ2UgY29udGFpbnMgYWxsIG5lY2Vzc2FyeSBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgbmVlZGVkCi10byBjb21waWxlIGFuZCBkZXZlbG9wIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBsaWJnaXQyLgotCi0lcHJlcAotJXNldHVwIC1xCi0KLSVidWlsZAotY21ha2UgLiBcCi0gICAgLURDTUFLRV9DX0ZMQUdTOlNUUklORz0iJXtvcHRmbGFnc30iIFwKLSAgICAtRENNQUtFX0lOU1RBTExfUFJFRklYOlBBVEg9JXtfcHJlZml4fSBcCi0gICAgLURMSUJfSU5TVEFMTF9ESVI6UEFUSD0le19saWJkaXJ9UwotbWFrZSAlez9fc21wX21mbGFnc30KLQotJWluc3RhbGwKLSVtYWtlX2luc3RhbGwKLQotJXBvc3QgLW4gJXtuYW1lfS0wIC1wIC9zYmluL2xkY29uZmlnCi0lcG9zdHVuIC1uICV7bmFtZX0tMCAtcCAvc2Jpbi9sZGNvbmZpZwotCi0lZmlsZXMgLW4gJXtuYW1lfS0wCi0lZGVmYXR0ciAoLSxyb290LHJvb3QpCi0lZG9jIEFVVEhPUlMgQ09QWUlORyBSRUFETUUubWQKLSV7X2xpYmRpcn0vJXtuYW1lfS5zby4qCi0KLSVmaWxlcyBkZXZlbAotJWRlZmF0dHIgKC0scm9vdCxyb290KQotJWRvYyBDT05WRU5USU9OUyBleGFtcGxlcwotJXtfbGliZGlyfS8le25hbWV9LnNvCi0le19pbmNsdWRlZGlyfS9naXQyKgotJXtfbGliZGlyfS9wa2djb25maWcvbGliZ2l0Mi5wYwotCi0lY2hhbmdlbG9nCi0qIFR1ZSBNYXIgMDQgMjAxMiB0dXhkbmFAZ21haWwuY29tCi0tIFVwZGF0ZSB0byB2ZXJzaW9uIDAuMTYuMCAKLSogVHVlIEphbiAzMSAyMDEyIGplbmdlbGhAbWVkb3phcy5kZQotLSBQcm92aWRlIHBrZ2NvbmZpZyBzeW1ib2xzCi0qIFRodSBPY3QgMjcgMjAxMSBzYXNjaHBlQHN1c2UuZGUKLS0gQ2hhbmdlIGxpY2Vuc2UgdG8gJ0dQTC0yLjAgd2l0aCBsaW5raW5nJywgZml4ZXMgYm5jIzcyNjc4OQotKiBXZWQgT2N0IDI2IDIwMTEgc2FzY2hwZUBzdXNlLmRlCi0tIFVwZGF0ZSB0byB2ZXJzaW9uIDAuMTUuMDoKLSAgKiBVcHN0cmVhbSBkb2Vzbid0IHByb3ZpZGUgY2hhbmdlcwotLSBSZW1vdmVkIG91dGRhdGVkICUlY2xlYW4gc2VjdGlvbgotKiBUdWUgSmFuIDE4IDIwMTEgc2FzY2hwZUBnbXguZGUKLS0gUHJvcGVyIFJlcXVpcmVzIGZvciBkZXZlbCBwYWNrYWdlCi0qIFR1ZSBKYW4gMTggMjAxMSBzYXNjaHBlQGdteC5kZQotLSBTZXQgQnVpbGRSZXF1aXJlcyB0byAib3BlbnNzbC1kZXZlbCIgYWxzbyBmb3IgUkhFTCBhbmQgQ2VudE9TCi0qIFR1ZSBKYW4gMTggMjAxMSBzYXNjaHBlQGdteC5kZQotLSBJbml0aWFsIGNvbW1pdCAoMC4wLjEpCi0tIEFkZGVkIHBhdGNoIHRvIGZpeCBzaGFyZWQgbGlicmFyeSBzb25hbWUKZGlmZiAtLWdpdCBhL3NjcmlwdC9jaWJ1aWxkLnNoIGIvc2NyaXB0L2NpYnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE0ZmE0NwotLS0gL2Rldi9udWxsCisrKyBiL3NjcmlwdC9jaWJ1aWxkLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCisjIENyZWF0ZSBhIHRlc3QgcmVwbyB3aGljaCB3ZSBjYW4gdXNlIGZvciB0aGUgb25saW5lOjpwdXNoIHRlc3RzCitta2RpciAkSE9NRS9fdGVtcAorZ2l0IGluaXQgLS1iYXJlICRIT01FL190ZW1wL3Rlc3QuZ2l0CitnaXQgZGFlbW9uIC0tbGlzdGVuPWxvY2FsaG9zdCAtLWV4cG9ydC1hbGwgLS1lbmFibGU9cmVjZWl2ZS1wYWNrIC0tYmFzZS1wYXRoPSRIT01FL190ZW1wICRIT01FL190ZW1wIDI+L2Rldi9udWxsICYKK2V4cG9ydCBHSVRURVNUX1JFTU9URV9VUkw9ImdpdDovL2xvY2FsaG9zdC90ZXN0LmdpdCIKKworbWtkaXIgX2J1aWxkCitjZCBfYnVpbGQKK2NtYWtlIC4uIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9Li4vX2luc3RhbGwgJE9QVElPTlMgfHwgZXhpdCAkPworY21ha2UgLS1idWlsZCAuIC0tdGFyZ2V0IGluc3RhbGwgfHwgZXhpdCAkPworY3Rlc3QgLVYgLiB8fCBleGl0ICQ/CisKKyMgTm93IHRoYXQgd2UndmUgdGVzdGVkIHRoZSByYXcgZ2l0IHByb3RvY29sLCBsZXQncyBzZXQgdXAgc3NoIHRvIHdlCisjIGNhbiBkbyB0aGUgcHVzaCB0ZXN0cyBvdmVyIGl0CisKK2tpbGxhbGwgZ2l0LWRhZW1vbgorc3VkbyBzdGFydCBzc2gKK3NzaC1rZXlnZW4gLXQgcnNhIC1mIH4vLnNzaC9pZF9yc2EgLU4gIiIgLXEKK2NhdCB+Ly5zc2gvaWRfcnNhLnB1YiA+Pn4vLnNzaC9hdXRob3JpemVkX2tleXMKK3NzaC1rZXlzY2FuIC10IHJzYSBsb2NhbGhvc3QgPj5+Ly5zc2gva25vd25faG9zdHMKKworZXhwb3J0IEdJVFRFU1RfUkVNT1RFX1VSTD0ic3NoOi8vbG9jYWxob3N0LyRIT01FL190ZW1wL3Rlc3QuZ2l0IgorZXhwb3J0IEdJVFRFU1RfUkVNT1RFX1VTRVI9JFVTRVIKK2V4cG9ydCBHSVRURVNUX1JFTU9URV9TU0hfS0VZPSIkSE9NRS8uc3NoL2lkX3JzYSIKK2V4cG9ydCBHSVRURVNUX1JFTU9URV9TU0hfUFVCS0VZPSIkSE9NRS8uc3NoL2lkX3JzYS5wdWIiCitleHBvcnQgR0lUVEVTVF9SRU1PVEVfU1NIX1BBU1NQSFJBU0U9IiIKKworaWYgWyAtZSAuL2xpYmdpdDJfY2xhciBdOyB0aGVuCisgICAgLi9saWJnaXQyX2NsYXIgLXNvbmxpbmU6OnB1c2gKK2ZpCmRpZmYgLS1naXQgYS9zcmMvYXJyYXkuaCBiL3NyYy9hcnJheS5oCmluZGV4IDJkNzdjNzEuLjFkNGUxYzIgMTAwNjQ0Ci0tLSBhL3NyYy9hcnJheS5oCisrKyBiL3NyYy9hcnJheS5oCkBAIC0zMCwzNyArMzAsNDUgQEAKICNkZWZpbmUgZ2l0X2FycmF5X2luaXQoYSkgXAogCWRvIHsgKGEpLnNpemUgPSAoYSkuYXNpemUgPSAwOyAoYSkucHRyID0gTlVMTDsgfSB3aGlsZSAoMCkKIAorI2RlZmluZSBnaXRfYXJyYXlfaW5pdF90b19zaXplKGEsIGRlc2lyZWQpIFwKKwlkbyB7IChhKS5zaXplID0gMDsgKGEpLmFzaXplID0gZGVzaXJlZDsgKGEpLnB0ciA9IGdpdF9fY2FsbG9jKGRlc2lyZWQsIHNpemVvZigqKGEpLnB0cikpOyB9IHdoaWxlICgwKQorCiAjZGVmaW5lIGdpdF9hcnJheV9jbGVhcihhKSBcCiAJZG8geyBnaXRfX2ZyZWUoKGEpLnB0cik7IGdpdF9hcnJheV9pbml0KGEpOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEdJVEVSUl9DSEVDS19BUlJBWShhKSBHSVRFUlJfQ0hFQ0tfQUxMT0MoKGEpLnB0cikKIAogCi10eXBlZGVmIGdpdF9hcnJheV90KHZvaWQpIGdpdF9hcnJheV9nZW5lcmljX3Q7Cit0eXBlZGVmIGdpdF9hcnJheV90KGNoYXIpIGdpdF9hcnJheV9nZW5lcmljX3Q7CiAKIC8qIHVzZSBhIGdlbmVyaWMgYXJyYXkgZm9yIGdyb3d0aCBzbyB0aGlzIGNhbiByZXR1cm4gdGhlIG5ldyBpdGVtICovCi1HSVRfSU5MSU5FKHZvaWQgKikgZ2l0X2FycmF5X2dyb3coZ2l0X2FycmF5X2dlbmVyaWNfdCAqYSwgc2l6ZV90IGl0ZW1fc2l6ZSkKK0dJVF9JTkxJTkUodm9pZCAqKSBnaXRfYXJyYXlfZ3Jvdyh2b2lkICpfYSwgc2l6ZV90IGl0ZW1fc2l6ZSkKIHsKKwlnaXRfYXJyYXlfZ2VuZXJpY190ICphID0gX2E7CiAJdWludDMyX3QgbmV3X3NpemUgPSAoYS0+c2l6ZSA8IDgpID8gOCA6IGEtPmFzaXplICogMyAvIDI7Ci0Jdm9pZCAqbmV3X2FycmF5ID0gZ2l0X19yZWFsbG9jKGEtPnB0ciwgbmV3X3NpemUgKiBpdGVtX3NpemUpOworCWNoYXIgKm5ld19hcnJheSA9IGdpdF9fcmVhbGxvYyhhLT5wdHIsIG5ld19zaXplICogaXRlbV9zaXplKTsKIAlpZiAoIW5ld19hcnJheSkgewogCQlnaXRfYXJyYXlfY2xlYXIoKmEpOwogCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgewogCQlhLT5wdHIgPSBuZXdfYXJyYXk7IGEtPmFzaXplID0gbmV3X3NpemU7IGEtPnNpemUrKzsKLQkJcmV0dXJuICgoKGNoYXIgKilhLT5wdHIpICsgKGEtPnNpemUgLSAxKSAqIGl0ZW1fc2l6ZSk7CisJCXJldHVybiBhLT5wdHIgKyAoYS0+c2l6ZSAtIDEpICogaXRlbV9zaXplOwogCX0KIH0KIAogI2RlZmluZSBnaXRfYXJyYXlfYWxsb2MoYSkgXAotCSgoYSkuc2l6ZSA+PSAoYSkuYXNpemUpID8gXAotCWdpdF9hcnJheV9ncm93KChnaXRfYXJyYXlfZ2VuZXJpY190ICopJihhKSwgc2l6ZW9mKCooYSkucHRyKSkgOglcCi0JKGEpLnB0ciA/ICYoYSkucHRyWyhhKS5zaXplKytdIDogTlVMTAorCSgoKGEpLnNpemUgPj0gKGEpLmFzaXplKSA/IFwKKwlnaXRfYXJyYXlfZ3JvdygmKGEpLCBzaXplb2YoKihhKS5wdHIpKSA6IFwKKwkoKGEpLnB0ciA/ICYoYSkucHRyWyhhKS5zaXplKytdIDogTlVMTCkpCiAKICNkZWZpbmUgZ2l0X2FycmF5X2xhc3QoYSkgKChhKS5zaXplID8gJihhKS5wdHJbKGEpLnNpemUgLSAxXSA6IE5VTEwpCiAKKyNkZWZpbmUgZ2l0X2FycmF5X3BvcChhKSAoKGEpLnNpemUgPyAmKGEpLnB0clstLShhKS5zaXplXSA6IE5VTEwpCisKICNkZWZpbmUgZ2l0X2FycmF5X2dldChhLCBpKSAoKChpKSA8IChhKS5zaXplKSA/ICYoYSkucHRyWyhpKV0gOiBOVUxMKQogCiAjZGVmaW5lIGdpdF9hcnJheV9zaXplKGEpIChhKS5zaXplCiAKKyNkZWZpbmUgZ2l0X2FycmF5X3ZhbGlkX2luZGV4KGEsIGkpICgoaSkgPCAoYSkuc2l6ZSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYXR0ci5jIGIvc3JjL2F0dHIuYwppbmRleCA2Y2RmZjI5Li45OGEzMjhhIDEwMDY0NAotLS0gYS9zcmMvYXR0ci5jCisrKyBiL3NyYy9hdHRyLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgImZpbGVvcHMuaCIKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTI2LDcgKzI3LDYgQEAKIAlyZXR1cm4gR0lUX0FUVFJfVkFMVUVfVDsKIH0KIAotCiBzdGF0aWMgaW50IGNvbGxlY3RfYXR0cl9maWxlcygKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAl1aW50MzJfdCBmbGFncywKQEAgLTEwMyw4ICsxMDMsNiBAQAogCWF0dHJfZ2V0X21hbnlfaW5mbyAqaW5mbyA9IE5VTEw7CiAJc2l6ZV90IG51bV9mb3VuZCA9IDA7CiAKLQltZW1zZXQoKHZvaWQgKil2YWx1ZXMsIDAsIHNpemVvZihjb25zdCBjaGFyICopICogbnVtX2F0dHIpOwotCiAJaWYgKGdpdF9hdHRyX3BhdGhfX2luaXQoJnBhdGgsIHBhdGhuYW1lLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pKSA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtMTQxLDYgKzEzOSwxMSBAQAogCQl9CiAJfQogCisJZm9yIChrID0gMDsgayA8IG51bV9hdHRyOyBrKyspIHsKKwkJaWYgKCFpbmZvW2tdLmZvdW5kKQorCQkJdmFsdWVzW2tdID0gTlVMTDsKKwl9CisKIGNsZWFudXA6CiAJZ2l0X3ZlY3Rvcl9mcmVlKCZmaWxlcyk7CiAJZ2l0X2F0dHJfcGF0aF9fZnJlZSgmcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvYXR0cl9maWxlLmMgYi9zcmMvYXR0cl9maWxlLmMKaW5kZXggZDg4MDM5OC4uNGViNzMyNCAxMDA2NDQKLS0tIGEvc3JjL2F0dHJfZmlsZS5jCisrKyBiL3NyYy9hdHRyX2ZpbGUuYwpAQCAtMzksNyArMzksNyBAQAogCQlhdHRycy0+a2V5ID0gZ2l0X3Bvb2xfbWFsbG9jKGF0dHJzLT5wb29sLCAodWludDMyX3QpbGVuICsgMyk7CiAJCUdJVEVSUl9DSEVDS19BTExPQyhhdHRycy0+a2V5KTsKIAotCQlhdHRycy0+a2V5WzBdID0gJzAnICsgZnJvbTsKKwkJYXR0cnMtPmtleVswXSA9ICcwJyArIChjaGFyKWZyb207CiAJCWF0dHJzLT5rZXlbMV0gPSAnIyc7CiAJCW1lbWNweSgmYXR0cnMtPmtleVsyXSwgcGF0aCwgbGVuKTsKIAkJYXR0cnMtPmtleVtsZW4gKyAyXSA9ICdcMCc7CkBAIC03OSw5ICs3OSwxMyBAQAogCiAJd2hpbGUgKCFlcnJvciAmJiAqc2NhbikgewogCQkvKiBhbGxvY2F0ZSBydWxlIGlmIG5lZWRlZCAqLwotCQlpZiAoIXJ1bGUgJiYgIShydWxlID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9hdHRyX3J1bGUpKSkpIHsKLQkJCWVycm9yID0gLTE7Ci0JCQlicmVhazsKKwkJaWYgKCFydWxlKSB7CisJCQlpZiAoIShydWxlID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9hdHRyX3J1bGUpKSkpIHsKKwkJCQllcnJvciA9IC0xOworCQkJCWJyZWFrOworCQkJfQorCQkJcnVsZS0+bWF0Y2guZmxhZ3MgPSBHSVRfQVRUUl9GTk1BVENIX0FMTE9XTkVHIHwKKwkJCQlHSVRfQVRUUl9GTk1BVENIX0FMTE9XTUFDUk87CiAJCX0KIAogCQkvKiBwYXJzZSB0aGUgbmV4dCAicGF0dGVybiBhdHRyIGF0dHIgYXR0ciIgbGluZSAqLwpAQCAtMzUxLDggKzM1NSw4IEBACiAJaWYgKHBhcnNlX29wdGltaXplZF9wYXR0ZXJucyhzcGVjLCBwb29sLCAqYmFzZSkpCiAJCXJldHVybiAwOwogCi0Jc3BlYy0+ZmxhZ3MgPSAoc3BlYy0+ZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX0FMTE9XU1BBQ0UpOwotCWFsbG93X3NwYWNlID0gKHNwZWMtPmZsYWdzICE9IDApOworCXNwZWMtPmZsYWdzID0gKHNwZWMtPmZsYWdzICYgR0lUX0FUVFJfRk5NQVRDSF9fSU5DT01JTkcpOworCWFsbG93X3NwYWNlID0gKChzcGVjLT5mbGFncyAmIEdJVF9BVFRSX0ZOTUFUQ0hfQUxMT1dTUEFDRSkgIT0gMCk7CiAKIAlwYXR0ZXJuID0gKmJhc2U7CiAKQEAgLTM2Miw3ICszNjYsNyBAQAogCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKIAl9CiAKLQlpZiAoKnBhdHRlcm4gPT0gJ1snKSB7CisJaWYgKCpwYXR0ZXJuID09ICdbJyAmJiAoc3BlYy0+ZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX0FMTE9XTUFDUk8pICE9IDApIHsKIAkJaWYgKHN0cm5jbXAocGF0dGVybiwgIlthdHRyXSIsIDYpID09IDApIHsKIAkJCXNwZWMtPmZsYWdzID0gc3BlYy0+ZmxhZ3MgfCBHSVRfQVRUUl9GTk1BVENIX01BQ1JPOwogCQkJcGF0dGVybiArPSA2OwpAQCAtMzcwLDcgKzM3NCw3IEBACiAJCS8qIGVsc2UgYSBjaGFyYWN0ZXIgcmFuZ2UgbGlrZSBbYS1lXSogd2hpY2ggaXMgYWNjZXB0ZWQgKi8KIAl9CiAKLQlpZiAoKnBhdHRlcm4gPT0gJyEnKSB7CisJaWYgKCpwYXR0ZXJuID09ICchJyAmJiAoc3BlYy0+ZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX0FMTE9XTkVHKSAhPSAwKSB7CiAJCXNwZWMtPmZsYWdzID0gc3BlYy0+ZmxhZ3MgfCBHSVRfQVRUUl9GTk1BVENIX05FR0FUSVZFOwogCQlwYXR0ZXJuKys7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2F0dHJfZmlsZS5oIGIvc3JjL2F0dHJfZmlsZS5oCmluZGV4IDE1YmJhMWMuLjNiYzdjNmMgMTAwNjQ0Ci0tLSBhL3NyYy9hdHRyX2ZpbGUuaAorKysgYi9zcmMvYXR0cl9maWxlLmgKQEAgLTI4LDYgKzI4LDEyIEBACiAjZGVmaW5lIEdJVF9BVFRSX0ZOTUFUQ0hfQUxMT1dTUEFDRQkoMVUgPDwgNikKICNkZWZpbmUgR0lUX0FUVFJfRk5NQVRDSF9JQ0FTRQkJKDFVIDw8IDcpCiAjZGVmaW5lIEdJVF9BVFRSX0ZOTUFUQ0hfTUFUQ0hfQUxMCSgxVSA8PCA4KQorI2RlZmluZSBHSVRfQVRUUl9GTk1BVENIX0FMTE9XTkVHICAgKDFVIDw8IDkpCisjZGVmaW5lIEdJVF9BVFRSX0ZOTUFUQ0hfQUxMT1dNQUNSTyAoMVUgPDwgMTApCisKKyNkZWZpbmUgR0lUX0FUVFJfRk5NQVRDSF9fSU5DT01JTkcgXAorCShHSVRfQVRUUl9GTk1BVENIX0FMTE9XU1BBQ0UgfCBcCisJIEdJVF9BVFRSX0ZOTUFUQ0hfQUxMT1dORUcgfCBHSVRfQVRUUl9GTk1BVENIX0FMTE9XTUFDUk8pCiAKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfYXR0cl9fdHJ1ZTsKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfYXR0cl9fZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYml0dmVjLmggYi9zcmMvYml0dmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2ZjBjYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaXR2ZWMuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKyNpZm5kZWYgSU5DTFVERV9iaXR2ZWNfaF9fCisjZGVmaW5lIElOQ0xVREVfYml0dmVjX2hfXworCisjaW5jbHVkZSAidXRpbC5oIgorCisvKgorICogVGhpcyBpcyBhIHNpbGx5IGxpdHRsZSBmaXhlZCBsZW5ndGggYml0IHZlY3RvciB0eXBlIHRoYXQgd2lsbCBzdG9yZQorICogdmVjdG9ycyBvZiA2NCBiaXRzIG9yIGxlc3MgZGlyZWN0bHkgaW4gdGhlIHN0cnVjdHVyZSBhbmQgYWxsb2NhdGUKKyAqIG1lbW9yeSBmb3IgdmVjdG9ycyBsb25nZXIgdGhhbiA2NCBiaXRzLiAgWW91IGNhbiB1c2UgdGhlIHR3byB2ZXJzaW9ucworICogdHJhbnNwYXJlbnRseSB0aHJvdWdoIHRoZSBBUEkgYW5kIGF2b2lkIGhlYXAgYWxsb2NhdGlvbiBjb21wbGV0ZWx5IHdoZW4KKyAqIHVzaW5nIGEgc2hvcnQgYml0IHZlY3RvciBhcyBhIHJlc3VsdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXNpemVfdCBsZW5ndGg7CisJdW5pb24geworCQl1aW50NjRfdCAqd29yZHM7CisJCXVpbnQ2NF90IGJpdHM7CisJfSB1OworfSBnaXRfYml0dmVjOworCitHSVRfSU5MSU5FKGludCkgZ2l0X2JpdHZlY19pbml0KGdpdF9iaXR2ZWMgKmJ2LCBzaXplX3QgY2FwYWNpdHkpCit7CisJbWVtc2V0KGJ2LCAweDAsIHNpemVvZigqYnYpKTsKKworCWlmIChjYXBhY2l0eSA+PSA2NCkgeworCQlidi0+bGVuZ3RoID0gKGNhcGFjaXR5IC8gNjQpICsgMTsKKwkJYnYtPnUud29yZHMgPSBnaXRfX2NhbGxvYyhidi0+bGVuZ3RoLCBzaXplb2YodWludDY0X3QpKTsKKwkJaWYgKCFidi0+dS53b3JkcykKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBHSVRfQklUVkVDX01BU0soQklUKSAoKHVpbnQ2NF90KTEgPDwgKEJJVCAlIDY0KSkKKyNkZWZpbmUgR0lUX0JJVFZFQ19XT1JEKEJWLCBCSVQpIChCVi0+bGVuZ3RoID8gJkJWLT51LndvcmRzW0JJVCAvIDY0XSA6ICZCVi0+dS5iaXRzKQorCitHSVRfSU5MSU5FKHZvaWQpIGdpdF9iaXR2ZWNfc2V0KGdpdF9iaXR2ZWMgKmJ2LCBzaXplX3QgYml0LCBib29sIG9uKQoreworCXVpbnQ2NF90ICp3b3JkID0gR0lUX0JJVFZFQ19XT1JEKGJ2LCBiaXQpOworCXVpbnQ2NF90IG1hc2sgPSBHSVRfQklUVkVDX01BU0soYml0KTsKKworCWlmIChvbikKKwkJKndvcmQgfD0gbWFzazsKKwllbHNlCisJCSp3b3JkICY9IH5tYXNrOworfQorCitHSVRfSU5MSU5FKGJvb2wpIGdpdF9iaXR2ZWNfZ2V0KGdpdF9iaXR2ZWMgKmJ2LCBzaXplX3QgYml0KQoreworCXVpbnQ2NF90ICp3b3JkID0gR0lUX0JJVFZFQ19XT1JEKGJ2LCBiaXQpOworCXJldHVybiAoKndvcmQgJiBHSVRfQklUVkVDX01BU0soYml0KSkgIT0gMDsKK30KKworR0lUX0lOTElORSh2b2lkKSBnaXRfYml0dmVjX2NsZWFyKGdpdF9iaXR2ZWMgKmJ2KQoreworCWlmICghYnYtPmxlbmd0aCkKKwkJYnYtPnUuYml0cyA9IDA7CisJZWxzZQorCQltZW1zZXQoYnYtPnUud29yZHMsIDB4MCwgYnYtPmxlbmd0aCAqIHNpemVvZih1aW50NjRfdCkpOworfQorCitHSVRfSU5MSU5FKHZvaWQpIGdpdF9iaXR2ZWNfZnJlZShnaXRfYml0dmVjICpidikKK3sKKwlpZiAoYnYtPmxlbmd0aCkKKwkJZ2l0X19mcmVlKGJ2LT51LndvcmRzKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmxhbWUuYyBiL3NyYy9ibGFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWE2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmxhbWUuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisKKyNpbmNsdWRlICJibGFtZS5oIgorI2luY2x1ZGUgImdpdDIvY29tbWl0LmgiCisjaW5jbHVkZSAiZ2l0Mi9yZXZwYXJzZS5oIgorI2luY2x1ZGUgImdpdDIvcmV2d2Fsay5oIgorI2luY2x1ZGUgImdpdDIvdHJlZS5oIgorI2luY2x1ZGUgImdpdDIvZGlmZi5oIgorI2luY2x1ZGUgImdpdDIvYmxvYi5oIgorI2luY2x1ZGUgImdpdDIvc2lnbmF0dXJlLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJibGFtZV9naXQuaCIKKworCitzdGF0aWMgaW50IGh1bmtfYnlmaW5hbGxpbmVfc2VhcmNoX2NtcChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmVudHJ5KQoreworCXVpbnQxNl90IGxpbmVubyA9ICh1aW50MTZfdCkqKHNpemVfdCopa2V5OworCWdpdF9ibGFtZV9odW5rICpodW5rID0gKGdpdF9ibGFtZV9odW5rKillbnRyeTsKKworCWlmIChsaW5lbm8gPCBodW5rLT5maW5hbF9zdGFydF9saW5lX251bWJlcikKKwkJcmV0dXJuIC0xOworCWlmIChsaW5lbm8gPj0gaHVuay0+ZmluYWxfc3RhcnRfbGluZV9udW1iZXIgKyBodW5rLT5saW5lc19pbl9odW5rKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRoc19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgeyByZXR1cm4gZ2l0X19zdHJjbXAoKGNoYXIqKWEsIChjaGFyKiliKTsgfQorc3RhdGljIGludCBodW5rX2NtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJZ2l0X2JsYW1lX2h1bmsgKmEgPSAoZ2l0X2JsYW1lX2h1bmsqKV9hLAorCQkJCQkJKmIgPSAoZ2l0X2JsYW1lX2h1bmsqKV9iOworCisJcmV0dXJuIGEtPmZpbmFsX3N0YXJ0X2xpbmVfbnVtYmVyIC0gYi0+ZmluYWxfc3RhcnRfbGluZV9udW1iZXI7Cit9CisKK3N0YXRpYyBib29sIGh1bmtfZW5kc19hdF9vcl9iZWZvcmVfbGluZShnaXRfYmxhbWVfaHVuayAqaHVuaywgc2l6ZV90IGxpbmUpCit7CisJcmV0dXJuIGxpbmUgPj0gKHNpemVfdCkoaHVuay0+ZmluYWxfc3RhcnRfbGluZV9udW1iZXIgKyBodW5rLT5saW5lc19pbl9odW5rIC0gMSk7Cit9CisKK3N0YXRpYyBib29sIGh1bmtfc3RhcnRzX2F0X29yX2FmdGVyX2xpbmUoZ2l0X2JsYW1lX2h1bmsgKmh1bmssIHNpemVfdCBsaW5lKQoreworCXJldHVybiBsaW5lIDw9IGh1bmstPmZpbmFsX3N0YXJ0X2xpbmVfbnVtYmVyOworfQorCitzdGF0aWMgZ2l0X2JsYW1lX2h1bmsqIG5ld19odW5rKAorCQl1aW50MTZfdCBzdGFydCwKKwkJdWludDE2X3QgbGluZXMsCisJCXVpbnQxNl90IG9yaWdfc3RhcnQsCisJCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJZ2l0X2JsYW1lX2h1bmsgKmh1bmsgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2JsYW1lX2h1bmspKTsKKwlpZiAoIWh1bmspIHJldHVybiBOVUxMOworCisJaHVuay0+bGluZXNfaW5faHVuayA9IGxpbmVzOworCWh1bmstPmZpbmFsX3N0YXJ0X2xpbmVfbnVtYmVyID0gc3RhcnQ7CisJaHVuay0+b3JpZ19zdGFydF9saW5lX251bWJlciA9IG9yaWdfc3RhcnQ7CisJaHVuay0+b3JpZ19wYXRoID0gcGF0aCA/IGdpdF9fc3RyZHVwKHBhdGgpIDogTlVMTDsKKworCXJldHVybiBodW5rOworfQorCitzdGF0aWMgZ2l0X2JsYW1lX2h1bmsqIGR1cF9odW5rKGdpdF9ibGFtZV9odW5rICpodW5rKQoreworCWdpdF9ibGFtZV9odW5rICpuZXdodW5rID0gbmV3X2h1bmsoCisJCQlodW5rLT5maW5hbF9zdGFydF9saW5lX251bWJlciwKKwkJCWh1bmstPmxpbmVzX2luX2h1bmssCisJCQlodW5rLT5vcmlnX3N0YXJ0X2xpbmVfbnVtYmVyLAorCQkJaHVuay0+b3JpZ19wYXRoKTsKKwlnaXRfb2lkX2NweSgmbmV3aHVuay0+b3JpZ19jb21taXRfaWQsICZodW5rLT5vcmlnX2NvbW1pdF9pZCk7CisJZ2l0X29pZF9jcHkoJm5ld2h1bmstPmZpbmFsX2NvbW1pdF9pZCwgJmh1bmstPmZpbmFsX2NvbW1pdF9pZCk7CisJbmV3aHVuay0+Ym91bmRhcnkgPSBodW5rLT5ib3VuZGFyeTsKKwluZXdodW5rLT5maW5hbF9zaWduYXR1cmUgPSBnaXRfc2lnbmF0dXJlX2R1cChodW5rLT5maW5hbF9zaWduYXR1cmUpOworCW5ld2h1bmstPm9yaWdfc2lnbmF0dXJlID0gZ2l0X3NpZ25hdHVyZV9kdXAoaHVuay0+b3JpZ19zaWduYXR1cmUpOworCXJldHVybiBuZXdodW5rOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2h1bmsoZ2l0X2JsYW1lX2h1bmsgKmh1bmspCit7CisJZ2l0X19mcmVlKCh2b2lkKilodW5rLT5vcmlnX3BhdGgpOworCWdpdF9zaWduYXR1cmVfZnJlZShodW5rLT5maW5hbF9zaWduYXR1cmUpOworCWdpdF9zaWduYXR1cmVfZnJlZShodW5rLT5vcmlnX3NpZ25hdHVyZSk7CisJZ2l0X19mcmVlKGh1bmspOworfQorCisvKiBTdGFydGluZyB3aXRoIHRoZSBodW5rIHRoYXQgaW5jbHVkZXMgc3RhcnRfbGluZSwgc2hpZnQgYWxsIGZvbGxvd2luZyBodW5rcycKKyAqIGZpbmFsX3N0YXJ0X2xpbmUgYnkgc2hpZnRfYnkgbGluZXMgKi8KK3N0YXRpYyB2b2lkIHNoaWZ0X2h1bmtzX2J5KGdpdF92ZWN0b3IgKnYsIHNpemVfdCBzdGFydF9saW5lLCBpbnQgc2hpZnRfYnkpCit7CisJc2l6ZV90IGk7CisKKwlpZiAoIWdpdF92ZWN0b3JfYnNlYXJjaDIoICZpLCB2LCBodW5rX2J5ZmluYWxsaW5lX3NlYXJjaF9jbXAsICZzdGFydF9saW5lKSkgeworCQlmb3IgKDsgaSA8IHYtPmxlbmd0aDsgaSsrKSB7CisJCQlnaXRfYmxhbWVfaHVuayAqaHVuayA9IChnaXRfYmxhbWVfaHVuayopdi0+Y29udGVudHNbaV07CisJCQlodW5rLT5maW5hbF9zdGFydF9saW5lX251bWJlciArPSBzaGlmdF9ieTsKKwkJfQorCX0KK30KKworZ2l0X2JsYW1lKiBnaXRfYmxhbWVfX2FsbG9jKAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWdpdF9ibGFtZV9vcHRpb25zIG9wdHMsCisJY29uc3QgY2hhciAqcGF0aCkKK3sKKwlnaXRfYmxhbWUgKmdiciA9IChnaXRfYmxhbWUqKWdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfYmxhbWUpKTsKKwlpZiAoIWdicikgeworCQlnaXRlcnJfc2V0X29vbSgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZ2l0X3ZlY3Rvcl9pbml0KCZnYnItPmh1bmtzLCA4LCBodW5rX2NtcCk7CisJZ2l0X3ZlY3Rvcl9pbml0KCZnYnItPnBhdGhzLCA4LCBwYXRoc19jbXApOworCWdici0+cmVwb3NpdG9yeSA9IHJlcG87CisJZ2JyLT5vcHRpb25zID0gb3B0czsKKwlnYnItPnBhdGggPSBnaXRfX3N0cmR1cChwYXRoKTsKKwlnaXRfdmVjdG9yX2luc2VydCgmZ2JyLT5wYXRocywgZ2l0X19zdHJkdXAocGF0aCkpOworCXJldHVybiBnYnI7Cit9CisKK3ZvaWQgZ2l0X2JsYW1lX2ZyZWUoZ2l0X2JsYW1lICpibGFtZSkKK3sKKwlzaXplX3QgaTsKKwlnaXRfYmxhbWVfaHVuayAqaHVuazsKKwljaGFyICpwYXRoOworCisJaWYgKCFibGFtZSkgcmV0dXJuOworCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZibGFtZS0+aHVua3MsIGksIGh1bmspCisJCWZyZWVfaHVuayhodW5rKTsKKwlnaXRfdmVjdG9yX2ZyZWUoJmJsYW1lLT5odW5rcyk7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJmJsYW1lLT5wYXRocywgaSwgcGF0aCkKKwkJZ2l0X19mcmVlKHBhdGgpOworCWdpdF92ZWN0b3JfZnJlZSgmYmxhbWUtPnBhdGhzKTsKKworCWdpdF9hcnJheV9jbGVhcihibGFtZS0+bGluZV9pbmRleCk7CisKKwlnaXRfX2ZyZWUoKHZvaWQqKWJsYW1lLT5wYXRoKTsKKwlnaXRfYmxvYl9mcmVlKGJsYW1lLT5maW5hbF9ibG9iKTsKKwlnaXRfX2ZyZWUoYmxhbWUpOworfQorCit1aW50MzJfdCBnaXRfYmxhbWVfZ2V0X2h1bmtfY291bnQoZ2l0X2JsYW1lICpibGFtZSkKK3sKKwlhc3NlcnQoYmxhbWUpOworCXJldHVybiAodWludDMyX3QpYmxhbWUtPmh1bmtzLmxlbmd0aDsKK30KKworY29uc3QgZ2l0X2JsYW1lX2h1bmsgKmdpdF9ibGFtZV9nZXRfaHVua19ieWluZGV4KGdpdF9ibGFtZSAqYmxhbWUsIHVpbnQzMl90IGluZGV4KQoreworCWFzc2VydChibGFtZSk7CisJcmV0dXJuIChnaXRfYmxhbWVfaHVuayopZ2l0X3ZlY3Rvcl9nZXQoJmJsYW1lLT5odW5rcywgaW5kZXgpOworfQorCitjb25zdCBnaXRfYmxhbWVfaHVuayAqZ2l0X2JsYW1lX2dldF9odW5rX2J5bGluZShnaXRfYmxhbWUgKmJsYW1lLCB1aW50MzJfdCBsaW5lbm8pCit7CisJc2l6ZV90IGk7CisJYXNzZXJ0KGJsYW1lKTsKKworCWlmICghZ2l0X3ZlY3Rvcl9ic2VhcmNoMiggJmksICZibGFtZS0+aHVua3MsIGh1bmtfYnlmaW5hbGxpbmVfc2VhcmNoX2NtcCwgJmxpbmVubykpIHsKKwkJcmV0dXJuIGdpdF9ibGFtZV9nZXRfaHVua19ieWluZGV4KGJsYW1lLCAodWludDMyX3QpaSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZV9vcHRpb25zKAorCQlnaXRfYmxhbWVfb3B0aW9ucyAqb3V0LAorCQljb25zdCBnaXRfYmxhbWVfb3B0aW9ucyAqaW4sCisJCWdpdF9yZXBvc2l0b3J5ICpyZXBvKQoreworCWdpdF9ibGFtZV9vcHRpb25zIGR1bW15ID0gR0lUX0JMQU1FX09QVElPTlNfSU5JVDsKKwlpZiAoIWluKSBpbiA9ICZkdW1teTsKKworCW1lbWNweShvdXQsIGluLCBzaXplb2YoZ2l0X2JsYW1lX29wdGlvbnMpKTsKKworCS8qIE5vIG5ld2VzdF9jb21taXQgPT4gSEVBRCAqLworCWlmIChnaXRfb2lkX2lzemVybygmb3V0LT5uZXdlc3RfY29tbWl0KSkgeworCQlnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJm91dC0+bmV3ZXN0X2NvbW1pdCwgcmVwbywgIkhFQUQiKTsKKwl9CisKKwkvKiBtaW5fbGluZSAwIHJlYWxseSBtZWFucyAxICovCisJaWYgKCFvdXQtPm1pbl9saW5lKSBvdXQtPm1pbl9saW5lID0gMTsKKwkvKiBtYXhfbGluZSAwIHJlYWxseSBtZWFucyBOLCBidXQgd2UgZG9uJ3Qga25vdyBOIHlldCAqLworCisJLyogRml4IHVwIG9wdGlvbiBpbXBsaWNhdGlvbnMgKi8KKwlpZiAob3V0LT5mbGFncyAmIEdJVF9CTEFNRV9UUkFDS19DT1BJRVNfQU5ZX0NPTU1JVF9DT1BJRVMpCisJCW91dC0+ZmxhZ3MgfD0gR0lUX0JMQU1FX1RSQUNLX0NPUElFU19TQU1FX0NPTU1JVF9DT1BJRVM7CisJaWYgKG91dC0+ZmxhZ3MgJiBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTX1NBTUVfQ09NTUlUX0NPUElFUykKKwkJb3V0LT5mbGFncyB8PSBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTX1NBTUVfQ09NTUlUX01PVkVTOworCWlmIChvdXQtPmZsYWdzICYgR0lUX0JMQU1FX1RSQUNLX0NPUElFU19TQU1FX0NPTU1JVF9NT1ZFUykKKwkJb3V0LT5mbGFncyB8PSBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTX1NBTUVfRklMRTsKK30KKworc3RhdGljIGdpdF9ibGFtZV9odW5rICpzcGxpdF9odW5rX2luX3ZlY3RvcigKKwkJZ2l0X3ZlY3RvciAqdmVjLAorCQlnaXRfYmxhbWVfaHVuayAqaHVuaywKKwkJc2l6ZV90IHJlbF9saW5lLAorCQlib29sIHJldHVybl9uZXcpCit7CisJc2l6ZV90IG5ld19saW5lX2NvdW50OworCWdpdF9ibGFtZV9odW5rICpuaDsKKworCS8qIERvbid0IHNwbGl0IGlmIGFscmVhZHkgYXQgYSBib3VuZGFyeSAqLworCWlmIChyZWxfbGluZSA8PSAwIHx8CisJICAgIHJlbF9saW5lID49IGh1bmstPmxpbmVzX2luX2h1bmspCisJeworCQlyZXR1cm4gaHVuazsKKwl9CisKKwluZXdfbGluZV9jb3VudCA9IGh1bmstPmxpbmVzX2luX2h1bmsgLSByZWxfbGluZTsKKwluaCA9IG5ld19odW5rKCh1aW50MTZfdCkoaHVuay0+ZmluYWxfc3RhcnRfbGluZV9udW1iZXIrcmVsX2xpbmUpLCAodWludDE2X3QpbmV3X2xpbmVfY291bnQsCisJCQkodWludDE2X3QpKGh1bmstPm9yaWdfc3RhcnRfbGluZV9udW1iZXIrcmVsX2xpbmUpLCBodW5rLT5vcmlnX3BhdGgpOworCWdpdF9vaWRfY3B5KCZuaC0+ZmluYWxfY29tbWl0X2lkLCAmaHVuay0+ZmluYWxfY29tbWl0X2lkKTsKKwlnaXRfb2lkX2NweSgmbmgtPm9yaWdfY29tbWl0X2lkLCAmaHVuay0+b3JpZ19jb21taXRfaWQpOworCisJLyogQWRqdXN0IGh1bmsgdGhhdCB3YXMgc3BsaXQgKi8KKwlodW5rLT5saW5lc19pbl9odW5rIC09ICh1aW50MTZfdCluZXdfbGluZV9jb3VudDsKKwlnaXRfdmVjdG9yX2luc2VydF9zb3J0ZWQodmVjLCBuaCwgTlVMTCk7CisJeworCQlnaXRfYmxhbWVfaHVuayAqcmV0ID0gcmV0dXJuX25ldyA/IG5oIDogaHVuazsKKwkJcmV0dXJuIHJldDsKKwl9Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgYSBsaXN0IG9mIGNoYXIgaW5kaWNlcyBmb3Igd2hlcmUgbGluZXMgYmVnaW4KKyAqIEFkYXB0ZWQgZnJvbSBjb3JlIGdpdDoKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRzdGVyL2dpdC9ibG9iL2JlNWM5ZmI5MDQ5ZWQ0NzBlNzAwNWYxNTliYjkyM2E1ZjRkZTEzMDkvYnVpbHRpbi9ibGFtZS5jI0wxNzYwLUwxNzg5CisgKi8KK3N0YXRpYyBpbnQgaW5kZXhfYmxvYl9saW5lcyhnaXRfYmxhbWUgKmJsYW1lKQoreworICAgIGNvbnN0IGNoYXIgKmJ1ZiA9IGJsYW1lLT5maW5hbF9idWY7CisgICAgZ2l0X29mZl90IGxlbiA9IGJsYW1lLT5maW5hbF9idWZfc2l6ZTsKKyAgICBpbnQgbnVtID0gMCwgaW5jb21wbGV0ZSA9IDAsIGJvbCA9IDE7CisgICAgc2l6ZV90ICppOworIAorICAgIGlmIChsZW4gJiYgYnVmW2xlbi0xXSAhPSAnXG4nKQorICAgICAgICBpbmNvbXBsZXRlKys7IC8qIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kICovCisgICAgd2hpbGUgKGxlbi0tKSB7CisgICAgICAgIGlmIChib2wpIHsKKyAgICAgICAgICAgIGkgPSBnaXRfYXJyYXlfYWxsb2MoYmxhbWUtPmxpbmVfaW5kZXgpOworICAgICAgICAgICAgR0lURVJSX0NIRUNLX0FMTE9DKGkpOworICAgICAgICAgICAgKmkgPSBidWYgLSBibGFtZS0+ZmluYWxfYnVmOworICAgICAgICAgICAgYm9sID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoKmJ1ZisrID09ICdcbicpIHsKKyAgICAgICAgICAgIG51bSsrOworICAgICAgICAgICAgYm9sID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpID0gZ2l0X2FycmF5X2FsbG9jKGJsYW1lLT5saW5lX2luZGV4KTsKKyAgICBHSVRFUlJfQ0hFQ0tfQUxMT0MoaSk7CisgICAgKmkgPSBidWYgLSBibGFtZS0+ZmluYWxfYnVmOworICAgIGJsYW1lLT5udW1fbGluZXMgPSBudW0gKyBpbmNvbXBsZXRlOworICAgIHJldHVybiBibGFtZS0+bnVtX2xpbmVzOworfQorIAorc3RhdGljIGdpdF9ibGFtZV9odW5rKiBodW5rX2Zyb21fZW50cnkoZ2l0X2JsYW1lX19lbnRyeSAqZSkKK3sKKwlnaXRfYmxhbWVfaHVuayAqaCA9IG5ld19odW5rKAorCQkJZS0+bG5vKzEsIGUtPm51bV9saW5lcywgZS0+c19sbm8rMSwgZS0+c3VzcGVjdC0+cGF0aCk7CisJZ2l0X29pZF9jcHkoJmgtPmZpbmFsX2NvbW1pdF9pZCwgZ2l0X2NvbW1pdF9pZChlLT5zdXNwZWN0LT5jb21taXQpKTsKKwloLT5maW5hbF9zaWduYXR1cmUgPSBnaXRfc2lnbmF0dXJlX2R1cChnaXRfY29tbWl0X2F1dGhvcihlLT5zdXNwZWN0LT5jb21taXQpKTsKKwloLT5ib3VuZGFyeSA9IGUtPmlzX2JvdW5kYXJ5ID8gMSA6IDA7CisJcmV0dXJuIGg7Cit9CisKK3N0YXRpYyBpbnQgbG9hZF9ibG9iKGdpdF9ibGFtZSAqYmxhbWUpCit7CisJaW50IGVycm9yOworCisJaWYgKGJsYW1lLT5maW5hbF9ibG9iKSByZXR1cm4gMDsKKworCWVycm9yID0gZ2l0X2NvbW1pdF9sb29rdXAoJmJsYW1lLT5maW5hbCwgYmxhbWUtPnJlcG9zaXRvcnksICZibGFtZS0+b3B0aW9ucy5uZXdlc3RfY29tbWl0KTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGNsZWFudXA7CisJZXJyb3IgPSBnaXRfb2JqZWN0X2xvb2t1cF9ieXBhdGgoKGdpdF9vYmplY3QqKikmYmxhbWUtPmZpbmFsX2Jsb2IsCisJCQkoZ2l0X29iamVjdCopYmxhbWUtPmZpbmFsLCBibGFtZS0+cGF0aCwgR0lUX09CSl9CTE9CKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKK2NsZWFudXA6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGJsYW1lX2ludGVybmFsKGdpdF9ibGFtZSAqYmxhbWUpCit7CisJaW50IGVycm9yOworCWdpdF9ibGFtZV9fZW50cnkgKmVudCA9IE5VTEw7CisJZ2l0X2JsYW1lX19vcmlnaW4gKm87CisKKwlpZiAoKGVycm9yID0gbG9hZF9ibG9iKGJsYW1lKSkgPCAwIHx8CisJICAgIChlcnJvciA9IGdpdF9ibGFtZV9fZ2V0X29yaWdpbigmbywgYmxhbWUsIGJsYW1lLT5maW5hbCwgYmxhbWUtPnBhdGgpKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKwlibGFtZS0+ZmluYWxfYnVmID0gZ2l0X2Jsb2JfcmF3Y29udGVudChibGFtZS0+ZmluYWxfYmxvYik7CisJYmxhbWUtPmZpbmFsX2J1Zl9zaXplID0gZ2l0X2Jsb2JfcmF3c2l6ZShibGFtZS0+ZmluYWxfYmxvYik7CisKKwllbnQgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2JsYW1lX19lbnRyeSkpOworCWVudC0+bnVtX2xpbmVzID0gaW5kZXhfYmxvYl9saW5lcyhibGFtZSk7CisJZW50LT5sbm8gPSBibGFtZS0+b3B0aW9ucy5taW5fbGluZSAtIDE7CisJZW50LT5udW1fbGluZXMgPSBlbnQtPm51bV9saW5lcyAtIGJsYW1lLT5vcHRpb25zLm1pbl9saW5lICsgMTsKKwlpZiAoYmxhbWUtPm9wdGlvbnMubWF4X2xpbmUgPiAwKQorCQllbnQtPm51bV9saW5lcyA9IGJsYW1lLT5vcHRpb25zLm1heF9saW5lIC0gYmxhbWUtPm9wdGlvbnMubWluX2xpbmUgKyAxOworCWVudC0+c19sbm8gPSBlbnQtPmxubzsKKwllbnQtPnN1c3BlY3QgPSBvOworCisJYmxhbWUtPmVudCA9IGVudDsKKwlibGFtZS0+cGF0aCA9IGJsYW1lLT5wYXRoOworCisJZ2l0X2JsYW1lX19saWtlX2dpdChibGFtZSwgYmxhbWUtPm9wdGlvbnMuZmxhZ3MpOworCitjbGVhbnVwOgorCWZvciAoZW50ID0gYmxhbWUtPmVudDsgZW50OyApIHsKKwkJZ2l0X2JsYW1lX19lbnRyeSAqZSA9IGVudC0+bmV4dDsKKworCQlnaXRfdmVjdG9yX2luc2VydCgmYmxhbWUtPmh1bmtzLCBodW5rX2Zyb21fZW50cnkoZW50KSk7CisKKwkJZ2l0X2JsYW1lX19mcmVlX2VudHJ5KGVudCk7CisJCWVudCA9IGU7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZSBibGFtaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZ2l0X2JsYW1lX2ZpbGUoCisJCWdpdF9ibGFtZSAqKm91dCwKKwkJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJCWNvbnN0IGNoYXIgKnBhdGgsCisJCWdpdF9ibGFtZV9vcHRpb25zICpvcHRpb25zKQoreworCWludCBlcnJvciA9IC0xOworCWdpdF9ibGFtZV9vcHRpb25zIG5vcm1PcHRpb25zID0gR0lUX0JMQU1FX09QVElPTlNfSU5JVDsKKwlnaXRfYmxhbWUgKmJsYW1lID0gTlVMTDsKKworCWFzc2VydChvdXQgJiYgcmVwbyAmJiBwYXRoKTsKKwlub3JtYWxpemVfb3B0aW9ucygmbm9ybU9wdGlvbnMsIG9wdGlvbnMsIHJlcG8pOworCisJYmxhbWUgPSBnaXRfYmxhbWVfX2FsbG9jKHJlcG8sIG5vcm1PcHRpb25zLCBwYXRoKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MoYmxhbWUpOworCisJaWYgKChlcnJvciA9IGxvYWRfYmxvYihibGFtZSkpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKworCWlmICgoZXJyb3IgPSBibGFtZV9pbnRlcm5hbChibGFtZSkpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKworCSpvdXQgPSBibGFtZTsKKwlyZXR1cm4gMDsKKworb25fZXJyb3I6CisJZ2l0X2JsYW1lX2ZyZWUoYmxhbWUpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZmZlciBibGFtaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGJvb2wgaHVua19pc19idWZmZXJibGFtZShnaXRfYmxhbWVfaHVuayAqaHVuaykKK3sKKwlyZXR1cm4gZ2l0X29pZF9pc3plcm8oJmh1bmstPmZpbmFsX2NvbW1pdF9pZCk7Cit9CisKK3N0YXRpYyBpbnQgYnVmZmVyX2h1bmtfY2IoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAorCWNvbnN0IGdpdF9kaWZmX2h1bmsgKmh1bmssCisJdm9pZCAqcGF5bG9hZCkKK3sKKwlnaXRfYmxhbWUgKmJsYW1lID0gKGdpdF9ibGFtZSopcGF5bG9hZDsKKwl1aW50MzJfdCB3ZWRnZV9saW5lOworCisJR0lUX1VOVVNFRChkZWx0YSk7CisKKwl3ZWRnZV9saW5lID0gKGh1bmstPm9sZF9saW5lcyA9PSAwKSA/IGh1bmstPm5ld19zdGFydCA6IGh1bmstPm9sZF9zdGFydDsKKwlibGFtZS0+Y3VycmVudF9kaWZmX2xpbmUgPSB3ZWRnZV9saW5lOworCisJYmxhbWUtPmN1cnJlbnRfaHVuayA9IChnaXRfYmxhbWVfaHVuayopZ2l0X2JsYW1lX2dldF9odW5rX2J5bGluZShibGFtZSwgd2VkZ2VfbGluZSk7CisJaWYgKCFibGFtZS0+Y3VycmVudF9odW5rKSB7CisJCS8qIExpbmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSAqLworCQlibGFtZS0+Y3VycmVudF9odW5rID0gbmV3X2h1bmsod2VkZ2VfbGluZSwgMCwgd2VkZ2VfbGluZSwgYmxhbWUtPnBhdGgpOworCQlnaXRfdmVjdG9yX2luc2VydCgmYmxhbWUtPmh1bmtzLCBibGFtZS0+Y3VycmVudF9odW5rKTsKKwl9IGVsc2UgaWYgKCFodW5rX3N0YXJ0c19hdF9vcl9hZnRlcl9saW5lKGJsYW1lLT5jdXJyZW50X2h1bmssIHdlZGdlX2xpbmUpKXsKKwkJLyogSWYgdGhpcyBodW5rIGRvZXNuJ3Qgc3RhcnQgYmV0d2VlbiBleGlzdGluZyBodW5rcywgc3BsaXQgYSBodW5rIHVwIHNvIGl0IGRvZXMgKi8KKwkJYmxhbWUtPmN1cnJlbnRfaHVuayA9IHNwbGl0X2h1bmtfaW5fdmVjdG9yKCZibGFtZS0+aHVua3MsIGJsYW1lLT5jdXJyZW50X2h1bmssCisJCQkJd2VkZ2VfbGluZSAtIGJsYW1lLT5jdXJyZW50X2h1bmstPm9yaWdfc3RhcnRfbGluZV9udW1iZXIsIHRydWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB0cnNfZXF1YWxfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpIHsgcmV0dXJuIGE8YiA/IC0xIDogYT5iID8gMSA6IDA7IH0KK3N0YXRpYyBpbnQgYnVmZmVyX2xpbmVfY2IoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAorCWNvbnN0IGdpdF9kaWZmX2h1bmsgKmh1bmssCisJY29uc3QgZ2l0X2RpZmZfbGluZSAqbGluZSwKKwl2b2lkICpwYXlsb2FkKQoreworCWdpdF9ibGFtZSAqYmxhbWUgPSAoZ2l0X2JsYW1lKilwYXlsb2FkOworCisJR0lUX1VOVVNFRChkZWx0YSk7CisJR0lUX1VOVVNFRChodW5rKTsKKwlHSVRfVU5VU0VEKGxpbmUpOworCisJaWYgKGxpbmUtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0FERElUSU9OKSB7CisJCWlmIChodW5rX2lzX2J1ZmZlcmJsYW1lKGJsYW1lLT5jdXJyZW50X2h1bmspICYmCisJCSAgICBodW5rX2VuZHNfYXRfb3JfYmVmb3JlX2xpbmUoYmxhbWUtPmN1cnJlbnRfaHVuaywgYmxhbWUtPmN1cnJlbnRfZGlmZl9saW5lKSkgeworCQkJLyogQXBwZW5kIHRvIHRoZSBjdXJyZW50IGJ1ZmZlci1ibGFtZSBodW5rICovCisJCQlibGFtZS0+Y3VycmVudF9odW5rLT5saW5lc19pbl9odW5rKys7CisJCQlzaGlmdF9odW5rc19ieSgmYmxhbWUtPmh1bmtzLCBibGFtZS0+Y3VycmVudF9kaWZmX2xpbmUrMSwgMSk7CisJCX0gZWxzZSB7CisJCQkvKiBDcmVhdGUgYSBuZXcgYnVmZmVyLWJsYW1lIGh1bmsgd2l0aCB0aGlzIGxpbmUgKi8KKwkJCXNoaWZ0X2h1bmtzX2J5KCZibGFtZS0+aHVua3MsIGJsYW1lLT5jdXJyZW50X2RpZmZfbGluZSwgMSk7CisJCQlibGFtZS0+Y3VycmVudF9odW5rID0gbmV3X2h1bmsoKHVpbnQxNl90KWJsYW1lLT5jdXJyZW50X2RpZmZfbGluZSwgMSwgMCwgYmxhbWUtPnBhdGgpOworCQkJZ2l0X3ZlY3Rvcl9pbnNlcnRfc29ydGVkKCZibGFtZS0+aHVua3MsIGJsYW1lLT5jdXJyZW50X2h1bmssIE5VTEwpOworCQl9CisJCWJsYW1lLT5jdXJyZW50X2RpZmZfbGluZSsrOworCX0KKworCWlmIChsaW5lLT5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9ERUxFVElPTikgeworCQkvKiBUcmltIHRoZSBsaW5lIGZyb20gdGhlIGN1cnJlbnQgaHVuazsgcmVtb3ZlIGl0IGlmIGl0J3Mgbm93IGVtcHR5ICovCisJCXNpemVfdCBzaGlmdF9iYXNlID0gYmxhbWUtPmN1cnJlbnRfZGlmZl9saW5lICsgYmxhbWUtPmN1cnJlbnRfaHVuay0+bGluZXNfaW5faHVuaysxOworCisJCWlmICgtLShibGFtZS0+Y3VycmVudF9odW5rLT5saW5lc19pbl9odW5rKSA9PSAwKSB7CisJCQlzaXplX3QgaTsKKwkJCXNoaWZ0X2Jhc2UtLTsKKwkJCWlmICghZ2l0X3ZlY3Rvcl9zZWFyY2gyKCZpLCAmYmxhbWUtPmh1bmtzLCBwdHJzX2VxdWFsX2NtcCwgYmxhbWUtPmN1cnJlbnRfaHVuaykpIHsKKwkJCQlnaXRfdmVjdG9yX3JlbW92ZSgmYmxhbWUtPmh1bmtzLCBpKTsKKwkJCQlmcmVlX2h1bmsoYmxhbWUtPmN1cnJlbnRfaHVuayk7CisJCQkJYmxhbWUtPmN1cnJlbnRfaHVuayA9IChnaXRfYmxhbWVfaHVuayopZ2l0X2JsYW1lX2dldF9odW5rX2J5aW5kZXgoYmxhbWUsICh1aW50MzJfdClpKTsKKwkJCX0KKwkJfQorCQlzaGlmdF9odW5rc19ieSgmYmxhbWUtPmh1bmtzLCBzaGlmdF9iYXNlLCAtMSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZ2l0X2JsYW1lX2J1ZmZlcigKKwkJZ2l0X2JsYW1lICoqb3V0LAorCQlnaXRfYmxhbWUgKnJlZmVyZW5jZSwKKwkJY29uc3QgY2hhciAqYnVmZmVyLAorCQl1aW50MzJfdCBidWZmZXJfbGVuKQoreworCWdpdF9ibGFtZSAqYmxhbWU7CisJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlzaXplX3QgaTsKKwlnaXRfYmxhbWVfaHVuayAqaHVuazsKKworCWRpZmZvcHRzLmNvbnRleHRfbGluZXMgPSAwOworCisJYXNzZXJ0KG91dCAmJiByZWZlcmVuY2UgJiYgYnVmZmVyICYmIGJ1ZmZlcl9sZW4pOworCisJYmxhbWUgPSBnaXRfYmxhbWVfX2FsbG9jKHJlZmVyZW5jZS0+cmVwb3NpdG9yeSwgcmVmZXJlbmNlLT5vcHRpb25zLCByZWZlcmVuY2UtPnBhdGgpOworCisJLyogRHVwbGljYXRlIGFsbCBvZiB0aGUgaHVuayBzdHJ1Y3R1cmVzIGluIHRoZSByZWZlcmVuY2UgYmxhbWUgKi8KKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnJlZmVyZW5jZS0+aHVua3MsIGksIGh1bmspIHsKKwkJZ2l0X3ZlY3Rvcl9pbnNlcnQoJmJsYW1lLT5odW5rcywgZHVwX2h1bmsoaHVuaykpOworCX0KKworCS8qIERpZmYgdG8gdGhlIHJlZmVyZW5jZSBibG9iICovCisJZ2l0X2RpZmZfYmxvYl90b19idWZmZXIocmVmZXJlbmNlLT5maW5hbF9ibG9iLCBibGFtZS0+cGF0aCwKKwkJCWJ1ZmZlciwgYnVmZmVyX2xlbiwgYmxhbWUtPnBhdGgsCisJCQkmZGlmZm9wdHMsIE5VTEwsIGJ1ZmZlcl9odW5rX2NiLCBidWZmZXJfbGluZV9jYiwgYmxhbWUpOworCisJKm91dCA9IGJsYW1lOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JsYW1lLmggYi9zcmMvYmxhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdlNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JsYW1lLmgKQEAgLTAsMCArMSw5MyBAQAorI2lmbmRlZiBJTkNMVURFX2JsYW1lX2hfXworI2RlZmluZSBJTkNMVURFX2JsYW1lX2hfXworCisjaW5jbHVkZSAiZ2l0Mi9ibGFtZS5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInZlY3Rvci5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJhcnJheS5oIgorI2luY2x1ZGUgImdpdDIvb2lkLmgiCisKKy8qCisgKiBPbmUgYmxvYiBpbiBhIGNvbW1pdCB0aGF0IGlzIGJlaW5nIHN1c3BlY3RlZAorICovCit0eXBlZGVmIHN0cnVjdCBnaXRfYmxhbWVfX29yaWdpbiB7CisJaW50IHJlZmNudDsKKwlzdHJ1Y3QgZ2l0X2JsYW1lX19vcmlnaW4gKnByZXZpb3VzOworCWdpdF9jb21taXQgKmNvbW1pdDsKKwlnaXRfYmxvYiAqYmxvYjsKKwljaGFyIHBhdGhbR0lUX0ZMRVhfQVJSQVldOworfSBnaXRfYmxhbWVfX29yaWdpbjsKKworLyoKKyAqIEVhY2ggZ3JvdXAgb2YgbGluZXMgaXMgZGVzY3JpYmVkIGJ5IGEgZ2l0X2JsYW1lX19lbnRyeTsgaXQgY2FuIGJlIHNwbGl0CisgKiBhcyB3ZSBwYXNzIGJsYW1lIHRvIHRoZSBwYXJlbnRzLiAgVGhleSBmb3JtIGEgbGlua2VkIGxpc3QgaW4gdGhlCisgKiBzY29yZWJvYXJkIHN0cnVjdHVyZSwgc29ydGVkIGJ5IHRoZSB0YXJnZXQgbGluZSBudW1iZXIuCisgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF9ibGFtZV9fZW50cnkgeworCXN0cnVjdCBnaXRfYmxhbWVfX2VudHJ5ICpwcmV2OworCXN0cnVjdCBnaXRfYmxhbWVfX2VudHJ5ICpuZXh0OworCisJLyogdGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBncm91cCBpbiB0aGUgZmluYWwgaW1hZ2U7CisJICogaW50ZXJuYWxseSBhbGwgbGluZSBudW1iZXJzIGFyZSAwIGJhc2VkLgorCSAqLworCWludCBsbm87CisKKwkvKiBob3cgbWFueSBsaW5lcyB0aGlzIGdyb3VwIGhhcyAqLworCWludCBudW1fbGluZXM7CisKKwkvKiB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCB0aGlzIGdyb3VwIGludG8gdGhlIGZpbmFsIGltYWdlICovCisJZ2l0X2JsYW1lX19vcmlnaW4gKnN1c3BlY3Q7CisKKwkvKiB0cnVlIGlmIHRoZSBzdXNwZWN0IGlzIHRydWx5IGd1aWx0eTsgZmFsc2Ugd2hpbGUgd2UgaGF2ZSBub3QKKwkgKiBjaGVja2VkIGlmIHRoZSBncm91cCBjYW1lIGZyb20gb25lIG9mIGl0cyBwYXJlbnRzLgorCSAqLworCWJvb2wgZ3VpbHR5OworCisJLyogdHJ1ZSBpZiB0aGUgZW50cnkgaGFzIGJlZW4gc2Nhbm5lZCBmb3IgY29waWVzIGluIHRoZSBjdXJyZW50IHBhcmVudAorCSAqLworCWJvb2wgc2Nhbm5lZDsKKworCS8qIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIGdyb3VwIGluIHRoZQorCSAqIHN1c3BlY3QncyBmaWxlOyBpbnRlcm5hbGx5IGFsbCBsaW5lIG51bWJlcnMgYXJlIDAgYmFzZWQuCisJICovCisJaW50IHNfbG5vOworCisJLyogaG93IHNpZ25pZmljYW50IHRoaXMgZW50cnkgaXMgLS0gY2FjaGVkIHRvIGF2b2lkCisJICogc2Nhbm5pbmcgdGhlIGxpbmVzIG92ZXIgYW5kIG92ZXIuCisJICovCisJdW5zaWduZWQgc2NvcmU7CisKKwkvKiBXaGV0aGVyIHRoaXMgZW50cnkgaGFzIGJlZW4gdHJhY2tlZCB0byBhIGJvdW5kYXJ5IGNvbW1pdC4KKwkgKi8KKwlib29sIGlzX2JvdW5kYXJ5OworfSBnaXRfYmxhbWVfX2VudHJ5OworCitzdHJ1Y3QgZ2l0X2JsYW1lIHsKKwljb25zdCBjaGFyICpwYXRoOworCWdpdF9yZXBvc2l0b3J5ICpyZXBvc2l0b3J5OworCWdpdF9ibGFtZV9vcHRpb25zIG9wdGlvbnM7CisKKwlnaXRfdmVjdG9yIGh1bmtzOworCWdpdF92ZWN0b3IgcGF0aHM7CisKKwlnaXRfYmxvYiAqZmluYWxfYmxvYjsKKwlnaXRfYXJyYXlfdChzaXplX3QpIGxpbmVfaW5kZXg7CisKKwlzaXplX3QgY3VycmVudF9kaWZmX2xpbmU7CisJZ2l0X2JsYW1lX2h1bmsgKmN1cnJlbnRfaHVuazsKKworCS8qIFNjb3JlYm9hcmQgZmllbGRzICovCisJZ2l0X2NvbW1pdCAqZmluYWw7CisJZ2l0X2JsYW1lX19lbnRyeSAqZW50OworCWludCBudW1fbGluZXM7CisJY29uc3QgY2hhciAqZmluYWxfYnVmOworCWdpdF9vZmZfdCBmaW5hbF9idWZfc2l6ZTsKK307CisKK2dpdF9ibGFtZSAqZ2l0X2JsYW1lX19hbGxvYygKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwlnaXRfYmxhbWVfb3B0aW9ucyBvcHRzLAorCWNvbnN0IGNoYXIgKnBhdGgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9ibGFtZV9naXQuYyBiL3NyYy9ibGFtZV9naXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDBmMWYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JsYW1lX2dpdC5jCkBAIC0wLDAgKzEsNjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKworI2luY2x1ZGUgImJsYW1lX2dpdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ4ZGlmZi94aW5jbHVkZS5oIgorCisvKgorICogT3JpZ2luIGlzIHJlZmNvdW50ZWQgYW5kIHVzdWFsbHkgd2Uga2VlcCB0aGUgYmxvYiBjb250ZW50cyB0byBiZQorICogcmV1c2VkLgorICovCitzdGF0aWMgZ2l0X2JsYW1lX19vcmlnaW4gKm9yaWdpbl9pbmNyZWYoZ2l0X2JsYW1lX19vcmlnaW4gKm8pCit7CisJaWYgKG8pCisJCW8tPnJlZmNudCsrOworCXJldHVybiBvOworfQorCitzdGF0aWMgdm9pZCBvcmlnaW5fZGVjcmVmKGdpdF9ibGFtZV9fb3JpZ2luICpvKQoreworCWlmIChvICYmIC0tby0+cmVmY250IDw9IDApIHsKKwkJaWYgKG8tPnByZXZpb3VzKQorCQkJb3JpZ2luX2RlY3JlZihvLT5wcmV2aW91cyk7CisJCWdpdF9ibG9iX2ZyZWUoby0+YmxvYik7CisJCWdpdF9jb21taXRfZnJlZShvLT5jb21taXQpOworCQlnaXRfX2ZyZWUobyk7CisJfQorfQorCisvKiBHaXZlbiBhIGNvbW1pdCBhbmQgYSBwYXRoIGluIGl0LCBjcmVhdGUgYSBuZXcgb3JpZ2luIHN0cnVjdHVyZS4gKi8KK3N0YXRpYyBpbnQgbWFrZV9vcmlnaW4oZ2l0X2JsYW1lX19vcmlnaW4gKipvdXQsIGdpdF9jb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCWdpdF9ibGFtZV9fb3JpZ2luICpvOworCisJbyA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZigqbykgKyBzdHJsZW4ocGF0aCkgKyAxKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0Mobyk7CisJby0+Y29tbWl0ID0gY29tbWl0OworCW8tPnJlZmNudCA9IDE7CisJc3RyY3B5KG8tPnBhdGgsIHBhdGgpOworCisJaWYgKCEoZXJyb3IgPSBnaXRfb2JqZWN0X2xvb2t1cF9ieXBhdGgoKGdpdF9vYmplY3QqKikmby0+YmxvYiwgKGdpdF9vYmplY3QqKWNvbW1pdCwKKwkJCXBhdGgsIEdJVF9PQkpfQkxPQikpKSB7CisJCSpvdXQgPSBvOworCX0gZWxzZSB7CisJCW9yaWdpbl9kZWNyZWYobyk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworLyogTG9jYXRlIGFuIGV4aXN0aW5nIG9yaWdpbiBvciBjcmVhdGUgYSBuZXcgb25lLiAqLworaW50IGdpdF9ibGFtZV9fZ2V0X29yaWdpbigKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKipvdXQsCisJCWdpdF9ibGFtZSAqYmxhbWUsCisJCWdpdF9jb21taXQgKmNvbW1pdCwKKwkJY29uc3QgY2hhciAqcGF0aCkKK3sKKwlnaXRfYmxhbWVfX2VudHJ5ICplOworCisJZm9yIChlID0gYmxhbWUtPmVudDsgZTsgZSA9IGUtPm5leHQpIHsKKwkJaWYgKGUtPnN1c3BlY3QtPmNvbW1pdCA9PSBjb21taXQgJiYgIXN0cmNtcChlLT5zdXNwZWN0LT5wYXRoLCBwYXRoKSkgeworCQkJKm91dCA9IG9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCX0KKwl9CisJcmV0dXJuIG1ha2Vfb3JpZ2luKG91dCwgY29tbWl0LCBwYXRoKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgYmxhbWVfY2h1bmtfY2JfZGF0YSB7CisJZ2l0X2JsYW1lICpibGFtZTsKKwlnaXRfYmxhbWVfX29yaWdpbiAqdGFyZ2V0OworCWdpdF9ibGFtZV9fb3JpZ2luICpwYXJlbnQ7CisJbG9uZyB0bG5vOworCWxvbmcgcGxubzsKK31ibGFtZV9jaHVua19jYl9kYXRhOworCitzdGF0aWMgYm9vbCBzYW1lX3N1c3BlY3QoZ2l0X2JsYW1lX19vcmlnaW4gKmEsIGdpdF9ibGFtZV9fb3JpZ2luICpiKQoreworCWlmIChhID09IGIpCisJCXJldHVybiB0cnVlOworCWlmIChnaXRfb2lkX2NtcChnaXRfY29tbWl0X2lkKGEtPmNvbW1pdCksIGdpdF9jb21taXRfaWQoYi0+Y29tbWl0KSkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gMCA9PSBzdHJjbXAoYS0+cGF0aCwgYi0+cGF0aCk7Cit9CisKKy8qIGZpbmQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBsYXN0IGxpbmUgdGhlIHRhcmdldCBpcyBzdXNwZWN0ZWQgZm9yICovCitzdGF0aWMgaW50IGZpbmRfbGFzdF9pbl90YXJnZXQoZ2l0X2JsYW1lICpibGFtZSwgZ2l0X2JsYW1lX19vcmlnaW4gKnRhcmdldCkKK3sKKwlnaXRfYmxhbWVfX2VudHJ5ICplOworCWludCBsYXN0X2luX3RhcmdldCA9IC0xOworCisJZm9yIChlPWJsYW1lLT5lbnQ7IGU7IGU9ZS0+bmV4dCkgeworCQlpZiAoZS0+Z3VpbHR5IHx8ICFzYW1lX3N1c3BlY3QoZS0+c3VzcGVjdCwgdGFyZ2V0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAobGFzdF9pbl90YXJnZXQgPCBlLT5zX2xubyArIGUtPm51bV9saW5lcykKKwkJCWxhc3RfaW5fdGFyZ2V0ID0gZS0+c19sbm8gKyBlLT5udW1fbGluZXM7CisJfQorCXJldHVybiBsYXN0X2luX3RhcmdldDsKK30KKworLyoKKyAqIEl0IGlzIGtub3duIHRoYXQgbGluZXMgYmV0d2VlbiB0bG5vIHRvIHNhbWUgY2FtZSBmcm9tIHBhcmVudCwgYW5kIGUKKyAqIGhhcyBhbiBvdmVybGFwIHdpdGggdGhhdCByYW5nZS4gIGl0IGFsc28gaXMga25vd24gdGhhdCBwYXJlbnQncworICogbGluZSBwbG5vIGNvcnJlc3BvbmRzIHRvIGUncyBsaW5lIHRsbm8uCisgKgorICogICAgICAgICAgICAgICAgPC0tLS0gZSAtLS0tLT4KKyAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0+ICAgICAgICAgKGVudGlyZWx5IHdpdGhpbikKKyAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0+ICAgKGV4dGVuZHMgcGFzdCkKKyAqICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0+ICAgICAgICAgKHN0YXJ0cyBiZWZvcmUpCisgKiAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tPiAgIChlbnRpcmVseSBlbmNsb3NlcykKKyAqCisgKiBTcGxpdCBlIGludG8gcG90ZW50aWFsbHkgdGhyZWUgcGFydHM7IGJlZm9yZSB0aGlzIGNodW5rLCB0aGUgY2h1bmsKKyAqIHRvIGJlIGJsYW1lZCBmb3IgdGhlIHBhcmVudCwgYW5kIGFmdGVyIHRoYXQgcG9ydGlvbi4KKyAqLworc3RhdGljIHZvaWQgc3BsaXRfb3ZlcmxhcChnaXRfYmxhbWVfX2VudHJ5ICpzcGxpdCwgZ2l0X2JsYW1lX19lbnRyeSAqZSwKKwkJaW50IHRsbm8sIGludCBwbG5vLCBpbnQgc2FtZSwgZ2l0X2JsYW1lX19vcmlnaW4gKnBhcmVudCkKK3sKKwlpbnQgY2h1bmtfZW5kX2xubzsKKworCWlmIChlLT5zX2xubyA8IHRsbm8pIHsKKwkJLyogdGhlcmUgaXMgYSBwcmUtY2h1bmsgcGFydCBub3QgYmxhbWVkIG9uIHRoZSBwYXJlbnQgKi8KKwkJc3BsaXRbMF0uc3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCXNwbGl0WzBdLmxubyA9IGUtPmxubzsKKwkJc3BsaXRbMF0uc19sbm8gPSBlLT5zX2xubzsKKwkJc3BsaXRbMF0ubnVtX2xpbmVzID0gdGxubyAtIGUtPnNfbG5vOworCQlzcGxpdFsxXS5sbm8gPSBlLT5sbm8gKyB0bG5vIC0gZS0+c19sbm87CisJCXNwbGl0WzFdLnNfbG5vID0gcGxubzsKKwl9IGVsc2UgeworCQlzcGxpdFsxXS5sbm8gPSBlLT5sbm87CisJCXNwbGl0WzFdLnNfbG5vID0gcGxubyArIChlLT5zX2xubyAtIHRsbm8pOworCX0KKworCWlmIChzYW1lIDwgZS0+c19sbm8gKyBlLT5udW1fbGluZXMpIHsKKwkJLyogdGhlcmUgaXMgYSBwb3N0LWNodW5rIHBhcnQgbm90IGJsYW1lZCBvbiBwYXJlbnQgKi8KKwkJc3BsaXRbMl0uc3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCXNwbGl0WzJdLmxubyA9IGUtPmxubyArIChzYW1lIC0gZS0+c19sbm8pOworCQlzcGxpdFsyXS5zX2xubyA9IGUtPnNfbG5vICsgKHNhbWUgLSBlLT5zX2xubyk7CisJCXNwbGl0WzJdLm51bV9saW5lcyA9IGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzIC0gc2FtZTsKKwkJY2h1bmtfZW5kX2xubyA9IHNwbGl0WzJdLmxubzsKKwl9IGVsc2UgeworCQljaHVua19lbmRfbG5vID0gZS0+bG5vICsgZS0+bnVtX2xpbmVzOworCX0KKwlzcGxpdFsxXS5udW1fbGluZXMgPSBjaHVua19lbmRfbG5vIC0gc3BsaXRbMV0ubG5vOworCisJLyoKKwkgKiBpZiBpdCB0dXJucyBvdXQgdGhlcmUgaXMgbm90aGluZyB0byBibGFtZSB0aGUgcGFyZW50IGZvciwgZm9yZ2V0IGFib3V0CisJICogdGhlIHNwbGl0dGluZy4gIXNwbGl0WzFdLnN1c3BlY3Qgc2lnbmFscyB0aGlzLgorCSAqLworCWlmIChzcGxpdFsxXS5udW1fbGluZXMgPCAxKQorCQlyZXR1cm47CisJc3BsaXRbMV0uc3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYocGFyZW50KTsKK30KKworLyoKKyAqIExpbmsgaW4gYSBuZXcgYmxhbWUgZW50cnkgdG8gdGhlIHNjb3JlYm9hcmQuIEVudHJpZXMgdGhhdCBjb3ZlciB0aGUgc2FtZQorICogbGluZSByYW5nZSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzY29yZWJvYXJkIHByZXZpb3VzbHkuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9ibGFtZV9lbnRyeShnaXRfYmxhbWUgKmJsYW1lLCBnaXRfYmxhbWVfX2VudHJ5ICplKQoreworCWdpdF9ibGFtZV9fZW50cnkgKmVudCwgKnByZXYgPSBOVUxMOworCisJb3JpZ2luX2luY3JlZihlLT5zdXNwZWN0KTsKKworCWZvciAoZW50ID0gYmxhbWUtPmVudDsgZW50ICYmIGVudC0+bG5vIDwgZS0+bG5vOyBlbnQgPSBlbnQtPm5leHQpCisJCXByZXYgPSBlbnQ7CisKKwkvKiBwcmV2LCBpZiBub3QgTlVMTCwgaXMgdGhlIGxhc3Qgb25lIHRoYXQgaXMgYmVsb3cgZSAqLworCWUtPnByZXYgPSBwcmV2OworCWlmIChwcmV2KSB7CisJCWUtPm5leHQgPSBwcmV2LT5uZXh0OworCQlwcmV2LT5uZXh0ID0gZTsKKwl9IGVsc2UgeworCQllLT5uZXh0ID0gYmxhbWUtPmVudDsKKwkJYmxhbWUtPmVudCA9IGU7CisJfQorCWlmIChlLT5uZXh0KQorCQllLT5uZXh0LT5wcmV2ID0gZTsKK30KKworLyoKKyAqIHNyYyB0eXBpY2FsbHkgaXMgb24tc3RhY2s7IHdlIHdhbnQgdG8gY29weSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8KKyAqIGEgbWFsbG9jZWQgYmxhbWVfZW50cnkgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBsaW5rZWQgbGlzdCBvZiB0aGUgc2NvcmVib2FyZC4KKyAqIFRoZSBvcmlnaW4gb2YgZHN0IGxvc2VzIGEgcmVmY250IHdoaWxlIHRoZSBvcmlnaW4gb2Ygc3JjIGdhaW5zIG9uZS4KKyAqLworc3RhdGljIHZvaWQgZHVwX2VudHJ5KGdpdF9ibGFtZV9fZW50cnkgKmRzdCwgZ2l0X2JsYW1lX19lbnRyeSAqc3JjKQoreworCWdpdF9ibGFtZV9fZW50cnkgKnAsICpuOworCisJcCA9IGRzdC0+cHJldjsKKwluID0gZHN0LT5uZXh0OworCW9yaWdpbl9pbmNyZWYoc3JjLT5zdXNwZWN0KTsKKwlvcmlnaW5fZGVjcmVmKGRzdC0+c3VzcGVjdCk7CisJbWVtY3B5KGRzdCwgc3JjLCBzaXplb2YoKnNyYykpOworCWRzdC0+cHJldiA9IHA7CisJZHN0LT5uZXh0ID0gbjsKKwlkc3QtPnNjb3JlID0gMDsKK30KKworLyoKKyAqIHNwbGl0X292ZXJsYXAoKSBkaXZpZGVkIGFuIGV4aXN0aW5nIGJsYW1lIGUgaW50byB1cCB0byB0aHJlZSBwYXJ0cyBpbiBzcGxpdC4KKyAqIEFkanVzdCB0aGUgbGlua2VkIGxpc3Qgb2YgYmxhbWVzIGluIHRoZSBzY29yZWJvYXJkIHRvIHJlZmxlY3QgdGhlIHNwbGl0LgorICovCitzdGF0aWMgdm9pZCBzcGxpdF9ibGFtZShnaXRfYmxhbWUgKmJsYW1lLCBnaXRfYmxhbWVfX2VudHJ5ICpzcGxpdCwgZ2l0X2JsYW1lX19lbnRyeSAqZSkKK3sKKwlnaXRfYmxhbWVfX2VudHJ5ICpuZXdfZW50cnk7CisKKwlpZiAoc3BsaXRbMF0uc3VzcGVjdCAmJiBzcGxpdFsyXS5zdXNwZWN0KSB7CisJCS8qIFRoZSBmaXJzdCBwYXJ0IChyZXVzZSBzdG9yYWdlIGZvciB0aGUgZXhpc3RpbmcgZW50cnkgZSAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzBdKTsKKworCQkvKiBUaGUgbGFzdCBwYXJ0IC0tIG1lICovCisJCW5ld19lbnRyeSA9IGdpdF9fbWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CisJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMl0pLCBzaXplb2YoZ2l0X2JsYW1lX19lbnRyeSkpOworCQlhZGRfYmxhbWVfZW50cnkoYmxhbWUsIG5ld19lbnRyeSk7CisKKwkJLyogLi4uIGFuZCB0aGUgbWlkZGxlIHBhcnQgLS0gcGFyZW50ICovCisJCW5ld19lbnRyeSA9IGdpdF9fbWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CisJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMV0pLCBzaXplb2YoZ2l0X2JsYW1lX19lbnRyeSkpOworCQlhZGRfYmxhbWVfZW50cnkoYmxhbWUsIG5ld19lbnRyeSk7CisJfSBlbHNlIGlmICghc3BsaXRbMF0uc3VzcGVjdCAmJiAhc3BsaXRbMl0uc3VzcGVjdCkgeworCQkvKgorCQkgKiBUaGUgcGFyZW50IGNvdmVycyB0aGUgZW50aXJlIGFyZWE7IHJldXNlIHN0b3JhZ2UgZm9yIGUgYW5kIHJlcGxhY2UgaXQKKwkJICogd2l0aCB0aGUgcGFyZW50CisJCSAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzFdKTsKKwl9IGVsc2UgaWYgKHNwbGl0WzBdLnN1c3BlY3QpIHsKKwkJLyogbWUgYW5kIHRoZW4gcGFyZW50ICovCisJCWR1cF9lbnRyeShlLCAmc3BsaXRbMF0pOworCQluZXdfZW50cnkgPSBnaXRfX21hbGxvYyhzaXplb2YoKm5ld19lbnRyeSkpOworCQltZW1jcHkobmV3X2VudHJ5LCAmKHNwbGl0WzFdKSwgc2l6ZW9mKGdpdF9ibGFtZV9fZW50cnkpKTsKKwkJYWRkX2JsYW1lX2VudHJ5KGJsYW1lLCBuZXdfZW50cnkpOworCX0gZWxzZSB7CisJCS8qIHBhcmVudCBhbmQgdGhlbiBtZSAqLworCQlkdXBfZW50cnkoZSwgJnNwbGl0WzFdKTsKKwkJbmV3X2VudHJ5ID0gZ2l0X19tYWxsb2Moc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwkJbWVtY3B5KG5ld19lbnRyeSwgJihzcGxpdFsyXSksIHNpemVvZihnaXRfYmxhbWVfX2VudHJ5KSk7CisJCWFkZF9ibGFtZV9lbnRyeShibGFtZSwgbmV3X2VudHJ5KTsKKwl9Cit9CisKKy8qIAorICogQWZ0ZXIgc3BsaXR0aW5nIHRoZSBibGFtZSwgdGhlIG9yaWdpbnMgdXNlZCBieSB0aGUgb24tc3RhY2sgYmxhbWVfZW50cnkKKyAqIHNob3VsZCBsb3NlIG9uZSByZWZjbnQgZWFjaC4KKyAqLworc3RhdGljIHZvaWQgZGVjcmVmX3NwbGl0KGdpdF9ibGFtZV9fZW50cnkgKnNwbGl0KQoreworCWludCBpOworCWZvciAoaT0wOyBpPDM7IGkrKykKKwkJb3JpZ2luX2RlY3JlZihzcGxpdFtpXS5zdXNwZWN0KTsKK30KKworLyoKKyAqIEhlbHBlciBmb3IgYmxhbWVfY2h1bmsoKS4gYmxhbWVfZW50cnkgZSBpcyBrbm93biB0byBvdmVybGFwIHdpdGggdGhlIHBhdGNoCisgKiBodW5rOyBzcGxpdCBpdCBhbmQgcGFzcyBibGFtZSB0byB0aGUgcGFyZW50LgorICovCitzdGF0aWMgdm9pZCBibGFtZV9vdmVybGFwKAorCQlnaXRfYmxhbWUgKmJsYW1lLAorCQlnaXRfYmxhbWVfX2VudHJ5ICplLAorCQlpbnQgdGxubywKKwkJaW50IHBsbm8sCisJCWludCBzYW1lLAorCQlnaXRfYmxhbWVfX29yaWdpbiAqcGFyZW50KQoreworCWdpdF9ibGFtZV9fZW50cnkgc3BsaXRbM10gPSB7ezB9fTsKKworCXNwbGl0X292ZXJsYXAoc3BsaXQsIGUsIHRsbm8sIHBsbm8sIHNhbWUsIHBhcmVudCk7CisJaWYgKHNwbGl0WzFdLnN1c3BlY3QpCisJCXNwbGl0X2JsYW1lKGJsYW1lLCBzcGxpdCwgZSk7CisJZGVjcmVmX3NwbGl0KHNwbGl0KTsKK30KKworLyoKKyAqIFByb2Nlc3Mgb25lIGh1bmsgZnJvbSB0aGUgcGF0Y2ggYmV0d2VlbiB0aGUgY3VycmVudCBzdXNwZWN0IGZvciBibGFtZV9lbnRyeQorICogZSBhbmQgaXRzIHBhcmVudC4gRmluZCBhbmQgc3BsaXQgdGhlIG92ZXJsYXAsIGFuZCBwYXNzIGJsYW1lIHRvIHRoZQorICogb3ZlcmxhcHBpbmcgcGFydCB0byB0aGUgcGFyZW50LgorICovCitzdGF0aWMgdm9pZCBibGFtZV9jaHVuaygKKwkJZ2l0X2JsYW1lICpibGFtZSwKKwkJaW50IHRsbm8sCisJCWludCBwbG5vLAorCQlpbnQgc2FtZSwKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKnRhcmdldCwKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKnBhcmVudCkKK3sKKwlnaXRfYmxhbWVfX2VudHJ5ICplOworCisJZm9yIChlID0gYmxhbWUtPmVudDsgZTsgZSA9IGUtPm5leHQpIHsKKwkJaWYgKGUtPmd1aWx0eSB8fCAhc2FtZV9zdXNwZWN0KGUtPnN1c3BlY3QsIHRhcmdldCkpCisJCQljb250aW51ZTsKKwkJaWYgKHNhbWUgPD0gZS0+c19sbm8pCisJCQljb250aW51ZTsKKwkJaWYgKHRsbm8gPCBlLT5zX2xubyArIGUtPm51bV9saW5lcykgeworCQkJYmxhbWVfb3ZlcmxhcChibGFtZSwgZSwgdGxubywgcGxubywgc2FtZSwgcGFyZW50KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBteV9lbWl0KAorCQl4ZGZlbnZfdCAqeGUsCisJCXhkY2hhbmdlX3QgKnhzY3IsCisJCXhkZW1pdGNiX3QgKmVjYiwKKwkJeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykKK3sKKwl4ZGNoYW5nZV90ICp4Y2ggPSB4c2NyOworCUdJVF9VTlVTRUQoeGUpOworCUdJVF9VTlVTRUQoeGVjZmcpOworCXdoaWxlICh4Y2gpIHsKKwkJYmxhbWVfY2h1bmtfY2JfZGF0YSAqZCA9IGVjYi0+cHJpdjsKKwkJYmxhbWVfY2h1bmsoZC0+YmxhbWUsIGQtPnRsbm8sIGQtPnBsbm8sIHhjaC0+aTIsIGQtPnRhcmdldCwgZC0+cGFyZW50KTsKKwkJZC0+cGxubyA9IHhjaC0+aTEgKyB4Y2gtPmNoZzE7CisJCWQtPnRsbm8gPSB4Y2gtPmkyICsgeGNoLT5jaGcyOworCQl4Y2ggPSB4Y2gtPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cmltX2NvbW1vbl90YWlsKG1tZmlsZV90ICphLCBtbWZpbGVfdCAqYiwgbG9uZyBjdHgpCit7CisJY29uc3QgaW50IGJsayA9IDEwMjQ7CisJbG9uZyB0cmltbWVkID0gMCwgcmVjb3ZlcmVkID0gMDsKKwljaGFyICphcCA9IGEtPnB0ciArIGEtPnNpemU7CisJY2hhciAqYnAgPSBiLT5wdHIgKyBiLT5zaXplOworCWxvbmcgc21hbGxlciA9IChsb25nKSgoYS0+c2l6ZSA8IGItPnNpemUpID8gYS0+c2l6ZSA6IGItPnNpemUpOworCisJaWYgKGN0eCkKKwkJcmV0dXJuOworCisJd2hpbGUgKGJsayArIHRyaW1tZWQgPD0gc21hbGxlciAmJiAhbWVtY21wKGFwIC0gYmxrLCBicCAtIGJsaywgYmxrKSkgeworCQl0cmltbWVkICs9IGJsazsKKwkJYXAgLT0gYmxrOworCQlicCAtPSBibGs7CisJfQorCisJd2hpbGUgKHJlY292ZXJlZCA8IHRyaW1tZWQpCisJCWlmIChhcFtyZWNvdmVyZWQrK10gPT0gJ1xuJykKKwkJCWJyZWFrOworCWEtPnNpemUgLT0gdHJpbW1lZCAtIHJlY292ZXJlZDsKKwliLT5zaXplIC09IHRyaW1tZWQgLSByZWNvdmVyZWQ7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9odW5rcyhtbWZpbGVfdCBmaWxlX2EsIG1tZmlsZV90IGZpbGVfYiwgdm9pZCAqY2JfZGF0YSkKK3sKKwl4cHBhcmFtX3QgeHBwID0gezB9OworCXhkZW1pdGNvbmZfdCB4ZWNmZyA9IHswfTsKKwl4ZGVtaXRjYl90IGVjYiA9IHswfTsKKworCXhlY2ZnLmVtaXRfZnVuYyA9ICh2b2lkKCopKHZvaWQpKW15X2VtaXQ7CisJZWNiLnByaXYgPSBjYl9kYXRhOworCisJdHJpbV9jb21tb25fdGFpbCgmZmlsZV9hLCAmZmlsZV9iLCAwKTsKKwlyZXR1cm4geGRsX2RpZmYoJmZpbGVfYSwgJmZpbGVfYiwgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKK30KKworc3RhdGljIHZvaWQgZmlsbF9vcmlnaW5fYmxvYihnaXRfYmxhbWVfX29yaWdpbiAqbywgbW1maWxlX3QgKmZpbGUpCit7CisJbWVtc2V0KGZpbGUsIDAsIHNpemVvZigqZmlsZSkpOworCWlmIChvLT5ibG9iKSB7CisJCWZpbGUtPnB0ciA9IChjaGFyKilnaXRfYmxvYl9yYXdjb250ZW50KG8tPmJsb2IpOworCQlmaWxlLT5zaXplID0gKHNpemVfdClnaXRfYmxvYl9yYXdzaXplKG8tPmJsb2IpOworCX0KK30KKworc3RhdGljIGludCBwYXNzX2JsYW1lX3RvX3BhcmVudCgKKwkJZ2l0X2JsYW1lICpibGFtZSwKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKnRhcmdldCwKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKnBhcmVudCkKK3sKKwlpbnQgbGFzdF9pbl90YXJnZXQ7CisJbW1maWxlX3QgZmlsZV9wLCBmaWxlX287CisJYmxhbWVfY2h1bmtfY2JfZGF0YSBkID0geyBibGFtZSwgdGFyZ2V0LCBwYXJlbnQsIDAsIDAgfTsKKworCWxhc3RfaW5fdGFyZ2V0ID0gZmluZF9sYXN0X2luX3RhcmdldChibGFtZSwgdGFyZ2V0KTsKKwlpZiAobGFzdF9pbl90YXJnZXQgPCAwKQorCQlyZXR1cm4gMTsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJZmlsbF9vcmlnaW5fYmxvYihwYXJlbnQsICZmaWxlX3ApOworCWZpbGxfb3JpZ2luX2Jsb2IodGFyZ2V0LCAmZmlsZV9vKTsKKworCWRpZmZfaHVua3MoZmlsZV9wLCBmaWxlX28sICZkKTsKKwkvKiBUaGUgcmVzZXQgKGkuZS4gYW55dGhpbmcgYWZ0ZXIgdGxubykgYXJlIHRoZSBzYW1lIGFzIHRoZSBwYXJlbnQgKi8KKwlibGFtZV9jaHVuayhibGFtZSwgZC50bG5vLCBkLnBsbm8sIGxhc3RfaW5fdGFyZ2V0LCB0YXJnZXQsIHBhcmVudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRoc19vbl9kdXAodm9pZCAqKm9sZCwgdm9pZCAqbmV3KQoreworCUdJVF9VTlVTRUQob2xkKTsKKwlnaXRfX2ZyZWUobmV3KTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBnaXRfYmxhbWVfX29yaWdpbiogZmluZF9vcmlnaW4oCisJCWdpdF9ibGFtZSAqYmxhbWUsCisJCWdpdF9jb21taXQgKnBhcmVudCwKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKm9yaWdpbikKK3sKKwlnaXRfYmxhbWVfX29yaWdpbiAqcG9yaWdpbiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmZsaXN0ID0gTlVMTDsKKwlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCWdpdF90cmVlICpvdHJlZT1OVUxMLCAqcHRyZWU9TlVMTDsKKworCS8qIEdldCB0aGUgdHJlZXMgZnJvbSB0aGlzIGNvbW1pdCBhbmQgaXRzIHBhcmVudCAqLworCWlmICgwICE9IGdpdF9jb21taXRfdHJlZSgmb3RyZWUsIG9yaWdpbi0+Y29tbWl0KSB8fAorCSAgICAwICE9IGdpdF9jb21taXRfdHJlZSgmcHRyZWUsIHBhcmVudCkpCisJCWdvdG8gY2xlYW51cDsKKworCS8qIENvbmZpZ3VyZSB0aGUgZGlmZiAqLworCWRpZmZvcHRzLmNvbnRleHRfbGluZXMgPSAwOworCWRpZmZvcHRzLmZsYWdzID0gR0lUX0RJRkZfU0tJUF9CSU5BUllfQ0hFQ0s7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgZmlsZXMgd2UncmUgaW50ZXJlc3RlZCBoYXZlIGNoYW5nZWQgKi8KKwlkaWZmb3B0cy5wYXRoc3BlYy5jb3VudCA9IGJsYW1lLT5wYXRocy5sZW5ndGg7CisJZGlmZm9wdHMucGF0aHNwZWMuc3RyaW5ncyA9IChjaGFyKiopYmxhbWUtPnBhdGhzLmNvbnRlbnRzOworCWlmICgwICE9IGdpdF9kaWZmX3RyZWVfdG9fdHJlZSgmZGlmZmxpc3QsIGJsYW1lLT5yZXBvc2l0b3J5LCBwdHJlZSwgb3RyZWUsICZkaWZmb3B0cykpCisJCQlnb3RvIGNsZWFudXA7CisKKwlpZiAoIWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZmxpc3QpKSB7CisJCS8qIE5vIGNoYW5nZXM7IGNvcHkgZGF0YSAqLworCQlnaXRfYmxhbWVfX2dldF9vcmlnaW4oJnBvcmlnaW4sIGJsYW1lLCBwYXJlbnQsIG9yaWdpbi0+cGF0aCk7CisJfSBlbHNlIHsKKwkJZ2l0X2RpZmZfZmluZF9vcHRpb25zIGZpbmRvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CisJCWludCBpOworCisJCS8qIEdlbmVyYXRlIGEgZnVsbCBkaWZmIGJldHdlZW4gdGhlIHR3byB0cmVlcyAqLworCQlnaXRfZGlmZl9mcmVlKGRpZmZsaXN0KTsKKwkJZGlmZm9wdHMucGF0aHNwZWMuY291bnQgPSAwOworCQlpZiAoMCAhPSBnaXRfZGlmZl90cmVlX3RvX3RyZWUoJmRpZmZsaXN0LCBibGFtZS0+cmVwb3NpdG9yeSwgcHRyZWUsIG90cmVlLCAmZGlmZm9wdHMpKQorCQkJZ290byBjbGVhbnVwOworCisJCS8qIExldCBkaWZmIGZpbmQgcmVuYW1lcyAqLworCQlmaW5kb3B0cy5mbGFncyA9IEdJVF9ESUZGX0ZJTkRfUkVOQU1FUzsKKwkJaWYgKDAgIT0gZ2l0X2RpZmZfZmluZF9zaW1pbGFyKGRpZmZsaXN0LCAmZmluZG9wdHMpKQorCQkJZ290byBjbGVhbnVwOworCisJCS8qIEZpbmQgb25lIHRoYXQgbWF0Y2hlcyAqLworCQlmb3IgKGk9MDsgaTwoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZmxpc3QpOyBpKyspIHsKKwkJCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSA9IGdpdF9kaWZmX2dldF9kZWx0YShkaWZmbGlzdCwgaSk7CisKKwkJCWlmICghZ2l0X3ZlY3Rvcl9ic2VhcmNoKE5VTEwsICZibGFtZS0+cGF0aHMsIGRlbHRhLT5uZXdfZmlsZS5wYXRoKSkKKwkJCXsKKwkJCQlnaXRfdmVjdG9yX2luc2VydF9zb3J0ZWQoJmJsYW1lLT5wYXRocywgKHZvaWQqKWdpdF9fc3RyZHVwKGRlbHRhLT5vbGRfZmlsZS5wYXRoKSwKKwkJCQkJCXBhdGhzX29uX2R1cCk7CisJCQkJbWFrZV9vcmlnaW4oJnBvcmlnaW4sIHBhcmVudCwgZGVsdGEtPm9sZF9maWxlLnBhdGgpOworCQkJfQorCQl9CisJfQorCitjbGVhbnVwOgorCWdpdF9kaWZmX2ZyZWUoZGlmZmxpc3QpOworCWdpdF90cmVlX2ZyZWUob3RyZWUpOworCWdpdF90cmVlX2ZyZWUocHRyZWUpOworCXJldHVybiBwb3JpZ2luOworfQorCisvKgorICogVGhlIGJsb2JzIG9mIG9yaWdpbiBhbmQgcG9yaWdpbiBleGFjdGx5IG1hdGNoLCBzbyBldmVyeXRoaW5nIG9yaWdpbiBpcworICogc3VzcGVjdGVkIGZvciBjYW4gYmUgYmxhbWVkIG9uIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIHBhc3Nfd2hvbGVfYmxhbWUoZ2l0X2JsYW1lICpibGFtZSwKKwkJZ2l0X2JsYW1lX19vcmlnaW4gKm9yaWdpbiwgZ2l0X2JsYW1lX19vcmlnaW4gKnBvcmlnaW4pCit7CisJZ2l0X2JsYW1lX19lbnRyeSAqZTsKKworCWlmICghcG9yaWdpbi0+YmxvYikKKwkJZ2l0X29iamVjdF9sb29rdXAoKGdpdF9vYmplY3QqKikmcG9yaWdpbi0+YmxvYiwgYmxhbWUtPnJlcG9zaXRvcnksCisJCQkJZ2l0X2Jsb2JfaWQob3JpZ2luLT5ibG9iKSwgR0lUX09CSl9CTE9CKTsKKwlmb3IgKGU9YmxhbWUtPmVudDsgZTsgZT1lLT5uZXh0KSB7CisJCWlmICghc2FtZV9zdXNwZWN0KGUtPnN1c3BlY3QsIG9yaWdpbikpCisJCQljb250aW51ZTsKKwkJb3JpZ2luX2luY3JlZihwb3JpZ2luKTsKKwkJb3JpZ2luX2RlY3JlZihlLT5zdXNwZWN0KTsKKwkJZS0+c3VzcGVjdCA9IHBvcmlnaW47CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXNzX2JsYW1lKGdpdF9ibGFtZSAqYmxhbWUsIGdpdF9ibGFtZV9fb3JpZ2luICpvcmlnaW4sIHVpbnQzMl90IG9wdCkKK3sKKwlnaXRfY29tbWl0ICpjb21taXQgPSBvcmlnaW4tPmNvbW1pdDsKKwlpbnQgaSwgbnVtX3BhcmVudHM7CisJZ2l0X2JsYW1lX19vcmlnaW4gKnNnX2J1ZlsxNl07CisJZ2l0X2JsYW1lX19vcmlnaW4gKnBvcmlnaW4sICoqc2dfb3JpZ2luID0gc2dfYnVmOworCisJR0lUX1VOVVNFRChvcHQpOworCisJbnVtX3BhcmVudHMgPSBnaXRfY29tbWl0X3BhcmVudGNvdW50KGNvbW1pdCk7CisJaWYgKCFnaXRfb2lkX2NtcChnaXRfY29tbWl0X2lkKGNvbW1pdCksICZibGFtZS0+b3B0aW9ucy5vbGRlc3RfY29tbWl0KSkKKwkJLyogU3RvcCBhdCBvbGRlc3Qgc3BlY2lmaWVkIGNvbW1pdCAqLworCQludW1fcGFyZW50cyA9IDA7CisJaWYgKCFudW1fcGFyZW50cykgeworCQlnaXRfb2lkX2NweSgmYmxhbWUtPm9wdGlvbnMub2xkZXN0X2NvbW1pdCwgZ2l0X2NvbW1pdF9pZChjb21taXQpKTsKKwkJZ290byBmaW5pc2g7CisJfQorCWVsc2UgaWYgKG51bV9wYXJlbnRzIDwgKGludClBUlJBWV9TSVpFKHNnX2J1ZikpCisJCW1lbXNldChzZ19idWYsIDAsIHNpemVvZihzZ19idWYpKTsKKwllbHNlCisJCXNnX29yaWdpbiA9IGdpdF9fY2FsbG9jKG51bV9wYXJlbnRzLCBzaXplb2YoKnNnX29yaWdpbikpOworCisJZm9yIChpPTA7IGk8bnVtX3BhcmVudHM7IGkrKykgeworCQlnaXRfY29tbWl0ICpwOworCQlpbnQgaiwgc2FtZTsKKworCQlpZiAoc2dfb3JpZ2luW2ldKQorCQkJY29udGludWU7CisKKwkJZ2l0X2NvbW1pdF9wYXJlbnQoJnAsIG9yaWdpbi0+Y29tbWl0LCBpKTsKKwkJcG9yaWdpbiA9IGZpbmRfb3JpZ2luKGJsYW1lLCBwLCBvcmlnaW4pOworCisJCWlmICghcG9yaWdpbikKKwkJCWNvbnRpbnVlOworCQlpZiAocG9yaWdpbi0+YmxvYiAmJiBvcmlnaW4tPmJsb2IgJiYKKwkJICAgICFnaXRfb2lkX2NtcChnaXRfYmxvYl9pZChwb3JpZ2luLT5ibG9iKSwgZ2l0X2Jsb2JfaWQob3JpZ2luLT5ibG9iKSkpIHsKKwkJCXBhc3Nfd2hvbGVfYmxhbWUoYmxhbWUsIG9yaWdpbiwgcG9yaWdpbik7CisJCQlvcmlnaW5fZGVjcmVmKHBvcmlnaW4pOworCQkJZ290byBmaW5pc2g7CisJCX0KKwkJZm9yIChqID0gc2FtZSA9IDA7IGo8aTsgaisrKQorCQkJaWYgKHNnX29yaWdpbltqXSAmJgorCQkJCSAhZ2l0X29pZF9jbXAoZ2l0X2Jsb2JfaWQoc2dfb3JpZ2luW2pdLT5ibG9iKSwgZ2l0X2Jsb2JfaWQocG9yaWdpbi0+YmxvYikpKSB7CisJCQkJc2FtZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCWlmICghc2FtZSkKKwkJCXNnX29yaWdpbltpXSA9IHBvcmlnaW47CisJCWVsc2UKKwkJCW9yaWdpbl9kZWNyZWYocG9yaWdpbik7CisJfQorCisJLyogU3RhbmRhcmQgYmxhbWUgKi8KKwlmb3IgKGk9MDsgaTxudW1fcGFyZW50czsgaSsrKSB7CisJCWdpdF9ibGFtZV9fb3JpZ2luICpwb3JpZ2luID0gc2dfb3JpZ2luW2ldOworCQlpZiAoIXBvcmlnaW4pCisJCQljb250aW51ZTsKKwkJaWYgKCFvcmlnaW4tPnByZXZpb3VzKSB7CisJCQlvcmlnaW5faW5jcmVmKHBvcmlnaW4pOworCQkJb3JpZ2luLT5wcmV2aW91cyA9IHBvcmlnaW47CisJCX0KKwkJaWYgKHBhc3NfYmxhbWVfdG9fcGFyZW50KGJsYW1lLCBvcmlnaW4sIHBvcmlnaW4pKQorCQkJZ290byBmaW5pc2g7CisJfQorCisJLyogVE9ETzogb3B0aW9uYWxseSBmaW5kIG1vdmVzIGluIHBhcmVudHMnIGZpbGVzICovCisKKwkvKiBUT0RPOiBvcHRpb25hbGx5IGZpbmQgY29waWVzIGluIHBhcmVudHMnIGZpbGVzICovCisKK2ZpbmlzaDoKKwlmb3IgKGk9MDsgaTxudW1fcGFyZW50czsgaSsrKQorCQlpZiAoc2dfb3JpZ2luW2ldKQorCQkJb3JpZ2luX2RlY3JlZihzZ19vcmlnaW5baV0pOworCWlmIChzZ19vcmlnaW4gIT0gc2dfYnVmKQorCQlnaXRfX2ZyZWUoc2dfb3JpZ2luKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBJZiB0d28gYmxhbWUgZW50cmllcyB0aGF0IGFyZSBuZXh0IHRvIGVhY2ggb3RoZXIgY2FtZSBmcm9tCisgKiBjb250aWd1b3VzIGxpbmVzIGluIHRoZSBzYW1lIG9yaWdpbiAoaS5lLiA8Y29tbWl0LCBwYXRoPiBwYWlyKSwKKyAqIG1lcmdlIHRoZW0gdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkIGNvYWxlc2NlKGdpdF9ibGFtZSAqYmxhbWUpCit7CisJZ2l0X2JsYW1lX19lbnRyeSAqZW50LCAqbmV4dDsKKworCWZvciAoZW50PWJsYW1lLT5lbnQ7IGVudCAmJiAobmV4dCA9IGVudC0+bmV4dCk7IGVudCA9IG5leHQpIHsKKwkJaWYgKHNhbWVfc3VzcGVjdChlbnQtPnN1c3BlY3QsIG5leHQtPnN1c3BlY3QpICYmCisJCSAgICBlbnQtPmd1aWx0eSA9PSBuZXh0LT5ndWlsdHkgJiYKKwkJICAgIGVudC0+c19sbm8gKyBlbnQtPm51bV9saW5lcyA9PSBuZXh0LT5zX2xubykKKwkJeworCQkJZW50LT5udW1fbGluZXMgKz0gbmV4dC0+bnVtX2xpbmVzOworCQkJZW50LT5uZXh0ID0gbmV4dC0+bmV4dDsKKwkJCWlmIChlbnQtPm5leHQpCisJCQkJZW50LT5uZXh0LT5wcmV2ID0gZW50OworCQkJb3JpZ2luX2RlY3JlZihuZXh0LT5zdXNwZWN0KTsKKwkJCWdpdF9fZnJlZShuZXh0KTsKKwkJCWVudC0+c2NvcmUgPSAwOworCQkJbmV4dCA9IGVudDsgLyogYWdhaW4gKi8KKwkJfQorCX0KK30KKwordm9pZCBnaXRfYmxhbWVfX2xpa2VfZ2l0KGdpdF9ibGFtZSAqYmxhbWUsIHVpbnQzMl90IG9wdCkKK3sKKwl3aGlsZSAodHJ1ZSkgeworCQlnaXRfYmxhbWVfX2VudHJ5ICplbnQ7CisJCWdpdF9ibGFtZV9fb3JpZ2luICpzdXNwZWN0ID0gTlVMTDsKKworCQkvKiBGaW5kIGEgc3VzcGVjdCB0byBicmVhayBkb3duICovCisJCWZvciAoZW50ID0gYmxhbWUtPmVudDsgIXN1c3BlY3QgJiYgZW50OyBlbnQgPSBlbnQtPm5leHQpCisJCQlpZiAoIWVudC0+Z3VpbHR5KQorCQkJCXN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisJCWlmICghc3VzcGVjdCkKKwkJCXJldHVybjsgLyogYWxsIGRvbmUgKi8KKworCQkvKiBXZSdsbCB1c2UgdGhpcyBzdXNwZWN0IGxhdGVyIGluIHRoZSBsb29wLCBzbyBob2xkIG9uIHRvIGl0IGZvciBub3cuICovCisJCW9yaWdpbl9pbmNyZWYoc3VzcGVjdCk7CisJCXBhc3NfYmxhbWUoYmxhbWUsIHN1c3BlY3QsIG9wdCk7CisKKwkJLyogVGFrZSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHJlbWFpbmluZyBlbnRyaWVzICovCisJCWZvciAoZW50ID0gYmxhbWUtPmVudDsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJCWlmIChzYW1lX3N1c3BlY3QoZW50LT5zdXNwZWN0LCBzdXNwZWN0KSkgeworCQkJCWVudC0+Z3VpbHR5ID0gdHJ1ZTsKKwkJCQllbnQtPmlzX2JvdW5kYXJ5ID0gIWdpdF9vaWRfY21wKAorCQkJCQkJZ2l0X2NvbW1pdF9pZChzdXNwZWN0LT5jb21taXQpLAorCQkJCQkJJmJsYW1lLT5vcHRpb25zLm9sZGVzdF9jb21taXQpOworCQkJfQorCQl9CisJCW9yaWdpbl9kZWNyZWYoc3VzcGVjdCk7CisJfQorCisJY29hbGVzY2UoYmxhbWUpOworfQorCit2b2lkIGdpdF9ibGFtZV9fZnJlZV9lbnRyeShnaXRfYmxhbWVfX2VudHJ5ICplbnQpCit7CisJaWYgKCFlbnQpIHJldHVybjsKKwlvcmlnaW5fZGVjcmVmKGVudC0+c3VzcGVjdCk7CisJZ2l0X19mcmVlKGVudCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmxhbWVfZ2l0LmggYi9zcmMvYmxhbWVfZ2l0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjMjcxMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ibGFtZV9naXQuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKyNpZm5kZWYgSU5DTFVERV9ibGFtZV9naXRfXworI2RlZmluZSBJTkNMVURFX2JsYW1lX2dpdF9fCisKKyNpbmNsdWRlICJibGFtZS5oIgorCitpbnQgZ2l0X2JsYW1lX19nZXRfb3JpZ2luKAorCQlnaXRfYmxhbWVfX29yaWdpbiAqKm91dCwKKwkJZ2l0X2JsYW1lICpzYiwKKwkJZ2l0X2NvbW1pdCAqY29tbWl0LAorCQljb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgZ2l0X2JsYW1lX19mcmVlX2VudHJ5KGdpdF9ibGFtZV9fZW50cnkgKmVudCk7Cit2b2lkIGdpdF9ibGFtZV9fbGlrZV9naXQoZ2l0X2JsYW1lICpzYiwgdWludDMyX3QgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9ibG9iLmMgYi9zcmMvYmxvYi5jCmluZGV4IDJlNGQ1ZjQuLjJjNmQ1MjggMTAwNjQ0Ci0tLSBhL3NyYy9ibG9iLmMKKysrIGIvc3JjL2Jsb2IuYwpAQCAtNjAsMTAgKzYwLDEwIEBACiAJCShlcnJvciA9IGdpdF9vZGJfb3Blbl93c3RyZWFtKCZzdHJlYW0sIG9kYiwgbGVuLCBHSVRfT0JKX0JMT0IpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCWlmICgoZXJyb3IgPSBzdHJlYW0tPndyaXRlKHN0cmVhbSwgYnVmZmVyLCBsZW4pKSA9PSAwKQotCQllcnJvciA9IHN0cmVhbS0+ZmluYWxpemVfd3JpdGUob2lkLCBzdHJlYW0pOworCWlmICgoZXJyb3IgPSBnaXRfb2RiX3N0cmVhbV93cml0ZShzdHJlYW0sIGJ1ZmZlciwgbGVuKSkgPT0gMCkKKwkJZXJyb3IgPSBnaXRfb2RiX3N0cmVhbV9maW5hbGl6ZV93cml0ZShvaWQsIHN0cmVhbSk7CiAKLQlzdHJlYW0tPmZyZWUoc3RyZWFtKTsKKwlnaXRfb2RiX3N0cmVhbV9mcmVlKHN0cmVhbSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC04MCwxMiArODAsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKChmZCA9IGdpdF9mdXRpbHNfb3Blbl9ybyhwYXRoKSkgPCAwKSB7Ci0JCXN0cmVhbS0+ZnJlZShzdHJlYW0pOworCQlnaXRfb2RiX3N0cmVhbV9mcmVlKHN0cmVhbSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAl3aGlsZSAoIWVycm9yICYmIChyZWFkX2xlbiA9IHBfcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkpID4gMCkgewotCQllcnJvciA9IHN0cmVhbS0+d3JpdGUoc3RyZWFtLCBidWZmZXIsIHJlYWRfbGVuKTsKKwkJZXJyb3IgPSBnaXRfb2RiX3N0cmVhbV93cml0ZShzdHJlYW0sIGJ1ZmZlciwgcmVhZF9sZW4pOwogCQl3cml0dGVuICs9IHJlYWRfbGVuOwogCX0KIApAQCAtOTcsMzYgKzk3LDMyIEBACiAJfQogCiAJaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzdHJlYW0tPmZpbmFsaXplX3dyaXRlKG9pZCwgc3RyZWFtKTsKKwkJZXJyb3IgPSBnaXRfb2RiX3N0cmVhbV9maW5hbGl6ZV93cml0ZShvaWQsIHN0cmVhbSk7CiAKLQlzdHJlYW0tPmZyZWUoc3RyZWFtKTsKKwlnaXRfb2RiX3N0cmVhbV9mcmVlKHN0cmVhbSk7CiAJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IHdyaXRlX2ZpbGVfZmlsdGVyZWQoCiAJZ2l0X29pZCAqb2lkLAorCWdpdF9vZmZfdCAqc2l6ZSwKIAlnaXRfb2RiICpvZGIsCiAJY29uc3QgY2hhciAqZnVsbF9wYXRoLAotCWdpdF92ZWN0b3IgKmZpbHRlcnMpCisJZ2l0X2ZpbHRlcl9saXN0ICpmbCkKIHsKIAlpbnQgZXJyb3I7Ci0JZ2l0X2J1ZiBzb3VyY2UgPSBHSVRfQlVGX0lOSVQ7Ci0JZ2l0X2J1ZiBkZXN0ID0gR0lUX0JVRl9JTklUOworCWdpdF9idWYgdGd0ID0gR0lUX0JVRl9JTklUOwogCi0JaWYgKChlcnJvciA9IGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcigmc291cmNlLCBmdWxsX3BhdGgpKSA8IDApCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2l0X2ZpbHRlcnNfYXBwbHkoJmRlc3QsICZzb3VyY2UsIGZpbHRlcnMpOwotCi0JLyogRnJlZSB0aGUgc291cmNlIGFzIHNvb24gYXMgcG9zc2libGUuIFRoaXMgY2FuIGJlIGJpZyBpbiBtZW1vcnksCi0JICogYW5kIHdlIGRvbid0IHdhbnQgdG8gT0RCIHdyaXRlIHRvIGNob2tlICovCi0JZ2l0X2J1Zl9mcmVlKCZzb3VyY2UpOworCWVycm9yID0gZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2ZpbGUoJnRndCwgZmwsIE5VTEwsIGZ1bGxfcGF0aCk7CiAKIAkvKiBXcml0ZSB0aGUgZmlsZSB0byBkaXNrIGlmIGl0IHdhcyBwcm9wZXJseSBmaWx0ZXJlZCAqLwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZ2l0X29kYl93cml0ZShvaWQsIG9kYiwgZGVzdC5wdHIsIGRlc3Quc2l6ZSwgR0lUX09CSl9CTE9CKTsKKwlpZiAoIWVycm9yKSB7CisJCSpzaXplID0gdGd0LnNpemU7CiAKLQlnaXRfYnVmX2ZyZWUoJmRlc3QpOworCQllcnJvciA9IGdpdF9vZGJfd3JpdGUob2lkLCBvZGIsIHRndC5wdHIsIHRndC5zaXplLCBHSVRfT0JKX0JMT0IpOworCX0KKworCWdpdF9idWZfZnJlZSgmdGd0KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTE1Miw0NSArMTQ4LDY3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGJsb2JfY3JlYXRlX2ludGVybmFsKGdpdF9vaWQgKm9pZCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmNvbnRlbnRfcGF0aCwgY29uc3QgY2hhciAqaGludF9wYXRoLCBib29sIHRyeV9sb2FkX2ZpbHRlcnMpCitpbnQgZ2l0X2Jsb2JfX2NyZWF0ZV9mcm9tX3BhdGhzKAorCWdpdF9vaWQgKm9pZCwKKwlzdHJ1Y3Qgc3RhdCAqb3V0X3N0LAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKmNvbnRlbnRfcGF0aCwKKwljb25zdCBjaGFyICpoaW50X3BhdGgsCisJbW9kZV90IGhpbnRfbW9kZSwKKwlib29sIHRyeV9sb2FkX2ZpbHRlcnMpCiB7CiAJaW50IGVycm9yOwogCXN0cnVjdCBzdGF0IHN0OwogCWdpdF9vZGIgKm9kYiA9IE5VTEw7CiAJZ2l0X29mZl90IHNpemU7CisJbW9kZV90IG1vZGU7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOwogCiAJYXNzZXJ0KGhpbnRfcGF0aCB8fCAhdHJ5X2xvYWRfZmlsdGVycyk7CiAKLQlpZiAoKGVycm9yID0gZ2l0X3BhdGhfbHN0YXQoY29udGVudF9wYXRoLCAmc3QpKSA8IDAgfHwgKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfb2RiX193ZWFrcHRyKCZvZGIsIHJlcG8pKSA8IDApCi0JCXJldHVybiBlcnJvcjsKKwlpZiAoIWNvbnRlbnRfcGF0aCkgeworCQlpZiAoZ2l0X3JlcG9zaXRvcnlfX2Vuc3VyZV9ub3RfYmFyZShyZXBvLCAiY3JlYXRlIGJsb2IgZnJvbSBmaWxlIikgPCAwKQorCQkJcmV0dXJuIEdJVF9FQkFSRVJFUE87CisKKwkJaWYgKGdpdF9idWZfam9pbnBhdGgoCisJCQkJJnBhdGgsIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyksIGhpbnRfcGF0aCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWNvbnRlbnRfcGF0aCA9IHBhdGgucHRyOworCX0KKworCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9sc3RhdChjb250ZW50X3BhdGgsICZzdCkpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9vZGIoJm9kYiwgcmVwbykpIDwgMCkKKwkJZ290byBkb25lOworCisJaWYgKG91dF9zdCkKKwkJbWVtY3B5KG91dF9zdCwgJnN0LCBzaXplb2Yoc3QpKTsKIAogCXNpemUgPSBzdC5zdF9zaXplOworCW1vZGUgPSBoaW50X21vZGUgPyBoaW50X21vZGUgOiBzdC5zdF9tb2RlOwogCi0JaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKwlpZiAoU19JU0xOSyhtb2RlKSkgewogCQllcnJvciA9IHdyaXRlX3N5bWxpbmsob2lkLCBvZGIsIGNvbnRlbnRfcGF0aCwgKHNpemVfdClzaXplKTsKIAl9IGVsc2UgewotCQlnaXRfdmVjdG9yIHdyaXRlX2ZpbHRlcnMgPSBHSVRfVkVDVE9SX0lOSVQ7Ci0JCWludCBmaWx0ZXJfY291bnQgPSAwOworCQlnaXRfZmlsdGVyX2xpc3QgKmZsID0gTlVMTDsKIAotCQlpZiAodHJ5X2xvYWRfZmlsdGVycykgeworCQlpZiAodHJ5X2xvYWRfZmlsdGVycykKIAkJCS8qIExvYWQgdGhlIGZpbHRlcnMgZm9yIHdyaXRpbmcgdGhpcyBmaWxlIHRvIHRoZSBPREIgKi8KLQkJCWZpbHRlcl9jb3VudCA9IGdpdF9maWx0ZXJzX2xvYWQoCi0JCQkJJndyaXRlX2ZpbHRlcnMsIHJlcG8sIGhpbnRfcGF0aCwgR0lUX0ZJTFRFUl9UT19PREIpOwotCQl9CisJCQllcnJvciA9IGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkJCSZmbCwgcmVwbywgTlVMTCwgaGludF9wYXRoLCBHSVRfRklMVEVSX1RPX09EQik7CiAKLQkJaWYgKGZpbHRlcl9jb3VudCA8IDApIHsKLQkJCS8qIE5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRoZXJlIHdhcyBhIGNyaXRpY2FsIGVycm9yICovCi0JCQllcnJvciA9IGZpbHRlcl9jb3VudDsKLQkJfSBlbHNlIGlmIChmaWx0ZXJfY291bnQgPT0gMCkgeworCQlpZiAoZXJyb3IgPCAwKQorCQkJLyogd2VsbCwgdGhhdCBkaWRuJ3Qgd29yayAqLzsKKwkJZWxzZSBpZiAoZmwgPT0gTlVMTCkKIAkJCS8qIE5vIGZpbHRlcnMgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudDogd2UgY2FuIHN0cmVhbQogCQkJICogZGlyZWN0bHkgZnJvbSBkaXNrICovCiAJCQllcnJvciA9IHdyaXRlX2ZpbGVfc3RyZWFtKG9pZCwgb2RiLCBjb250ZW50X3BhdGgsIHNpemUpOwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCS8qIFdlIG5lZWQgdG8gYXBwbHkgb25lIG9yIG1vcmUgZmlsdGVycyAqLwotCQkJZXJyb3IgPSB3cml0ZV9maWxlX2ZpbHRlcmVkKG9pZCwgb2RiLCBjb250ZW50X3BhdGgsICZ3cml0ZV9maWx0ZXJzKTsKLQkJfQorCQkJZXJyb3IgPSB3cml0ZV9maWxlX2ZpbHRlcmVkKG9pZCwgJnNpemUsIG9kYiwgY29udGVudF9wYXRoLCBmbCk7CiAKLQkJZ2l0X2ZpbHRlcnNfZnJlZSgmd3JpdGVfZmlsdGVycyk7CisJCQlnaXRfZmlsdGVyX2xpc3RfZnJlZShmbCk7CisJCX0KIAogCQkvKgogCQkgKiBUT0RPOiBldmVudHVhbGx5IHN1cHBvcnQgc3RyZWFtaW5nIGZpbHRlcmVkIGZpbGVzLCBmb3IgZmlsZXMKQEAgLTIwNywzNCArMjI1LDIxIEBACiAJCSAqLwogCX0KIAorZG9uZToKKwlnaXRfb2RiX2ZyZWUob2RiKTsKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2l0X2Jsb2JfY3JlYXRlX2Zyb213b3JrZGlyKGdpdF9vaWQgKm9pZCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgpCitpbnQgZ2l0X2Jsb2JfY3JlYXRlX2Zyb213b3JrZGlyKAorCWdpdF9vaWQgKm9pZCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JZ2l0X2J1ZiBmdWxsX3BhdGggPSBHSVRfQlVGX0lOSVQ7Ci0JY29uc3QgY2hhciAqd29ya2RpcjsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfX2Vuc3VyZV9ub3RfYmFyZShyZXBvLCAiY3JlYXRlIGJsb2IgZnJvbSBmaWxlIikpIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCi0Jd29ya2RpciA9IGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyk7Ci0KLQlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbF9wYXRoLCB3b3JrZGlyLCBwYXRoKSA8IDApIHsKLQkJZ2l0X2J1Zl9mcmVlKCZmdWxsX3BhdGgpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZXJyb3IgPSBibG9iX2NyZWF0ZV9pbnRlcm5hbCgKLQkJb2lkLCByZXBvLCBnaXRfYnVmX2NzdHIoJmZ1bGxfcGF0aCksCi0JCWdpdF9idWZfY3N0cigmZnVsbF9wYXRoKSArIHN0cmxlbih3b3JrZGlyKSwgdHJ1ZSk7Ci0KLQlnaXRfYnVmX2ZyZWUoJmZ1bGxfcGF0aCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBnaXRfYmxvYl9fY3JlYXRlX2Zyb21fcGF0aHMob2lkLCBOVUxMLCByZXBvLCBOVUxMLCBwYXRoLCAwLCB0cnVlKTsKIH0KIAotaW50IGdpdF9ibG9iX2NyZWF0ZV9mcm9tZGlzayhnaXRfb2lkICpvaWQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKQoraW50IGdpdF9ibG9iX2NyZWF0ZV9mcm9tZGlzaygKKwlnaXRfb2lkICpvaWQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKQogewogCWludCBlcnJvcjsKIAlnaXRfYnVmIGZ1bGxfcGF0aCA9IEdJVF9CVUZfSU5JVDsKQEAgLTI1MSw4ICsyNTYsOCBAQAogCWlmICh3b3JrZGlyICYmICFnaXRfX3ByZWZpeGNtcChoaW50cGF0aCwgd29ya2RpcikpCiAJCWhpbnRwYXRoICs9IHN0cmxlbih3b3JrZGlyKTsKIAotCWVycm9yID0gYmxvYl9jcmVhdGVfaW50ZXJuYWwoCi0JCW9pZCwgcmVwbywgZ2l0X2J1Zl9jc3RyKCZmdWxsX3BhdGgpLCBoaW50cGF0aCwgdHJ1ZSk7CisJZXJyb3IgPSBnaXRfYmxvYl9fY3JlYXRlX2Zyb21fcGF0aHMoCisJCW9pZCwgTlVMTCwgcmVwbywgZ2l0X2J1Zl9jc3RyKCZmdWxsX3BhdGgpLCBoaW50cGF0aCwgMCwgdHJ1ZSk7CiAKIAlnaXRfYnVmX2ZyZWUoJmZ1bGxfcGF0aCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMjcyLDE3ICsyNzcsMTQgQEAKIAlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKIAlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAKLQlpZiAoZ2l0X2J1Zl9qb2luX24oCi0JCSZwYXRoLCAnLycsIDMsIAotCQlnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pLAotCQlHSVRfT0JKRUNUU19ESVIsIAotCQkic3RyZWFtZWQiKSA8IDApCi0JCQlnb3RvIGNsZWFudXA7CisJaWYgKGdpdF9idWZfam9pbnBhdGgoCisJCQkmcGF0aCwgZ2l0X3JlcG9zaXRvcnlfcGF0aChyZXBvKSwgR0lUX09CSkVDVFNfRElSICJzdHJlYW1lZCIpIDwgMCkKKwkJZ290byBjbGVhbnVwOwogCiAJY29udGVudCA9IGdpdF9fbWFsbG9jKEJVRkZFUl9TSVpFKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MoY29udGVudCk7CiAKLQlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZ2l0X2J1Zl9jc3RyKCZwYXRoKSwgR0lUX0ZJTEVCVUZfVEVNUE9SQVJZKSA8IDApCisJaWYgKGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGdpdF9idWZfY3N0cigmcGF0aCksIEdJVF9GSUxFQlVGX1RFTVBPUkFSWSwgMDY2NikgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAl3aGlsZSAoMSkgewpAQCAtMzAzLDcgKzMwNSw4IEBACiAJaWYgKGdpdF9maWxlYnVmX2ZsdXNoKCZmaWxlKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCWVycm9yID0gYmxvYl9jcmVhdGVfaW50ZXJuYWwob2lkLCByZXBvLCBmaWxlLnBhdGhfbG9jaywgaGludHBhdGgsIGhpbnRwYXRoICE9IE5VTEwpOworCWVycm9yID0gZ2l0X2Jsb2JfX2NyZWF0ZV9mcm9tX3BhdGhzKAorCQlvaWQsIE5VTEwsIHJlcG8sIGZpbGUucGF0aF9sb2NrLCBoaW50cGF0aCwgMCwgaGludHBhdGggIT0gTlVMTCk7CiAKIGNsZWFudXA6CiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKQEAgLTMxOCw4ICszMjEsMzQgQEAKIAogCWFzc2VydChibG9iKTsKIAotCWNvbnRlbnQucHRyID0gYmxvYi0+b2RiX29iamVjdC0+YnVmZmVyOwotCWNvbnRlbnQuc2l6ZSA9IG1pbihibG9iLT5vZGJfb2JqZWN0LT5jYWNoZWQuc2l6ZSwgNDAwMCk7CisJY29udGVudC5wdHIgICA9IGJsb2ItPm9kYl9vYmplY3QtPmJ1ZmZlcjsKKwljb250ZW50LnNpemUgID0gbWluKGJsb2ItPm9kYl9vYmplY3QtPmNhY2hlZC5zaXplLCA0MDAwKTsKKwljb250ZW50LmFzaXplID0gMDsKIAogCXJldHVybiBnaXRfYnVmX3RleHRfaXNfYmluYXJ5KCZjb250ZW50KTsKIH0KKworaW50IGdpdF9ibG9iX2ZpbHRlcmVkX2NvbnRlbnQoCisJZ2l0X2J1ZiAqb3V0LAorCWdpdF9ibG9iICpibG9iLAorCWNvbnN0IGNoYXIgKnBhdGgsCisJaW50IGNoZWNrX2Zvcl9iaW5hcnlfZGF0YSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCWdpdF9maWx0ZXJfbGlzdCAqZmwgPSBOVUxMOworCisJYXNzZXJ0KGJsb2IgJiYgcGF0aCAmJiBvdXQpOworCisJaWYgKGNoZWNrX2Zvcl9iaW5hcnlfZGF0YSAmJiBnaXRfYmxvYl9pc19iaW5hcnkoYmxvYikpCisJCXJldHVybiAwOworCisJaWYgKCEoZXJyb3IgPSBnaXRfZmlsdGVyX2xpc3RfbG9hZCgKKwkJCSZmbCwgZ2l0X2Jsb2Jfb3duZXIoYmxvYiksIGJsb2IsIHBhdGgsIEdJVF9GSUxURVJfVE9fV09SS1RSRUUpKSkgeworCisJCWVycm9yID0gZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2Jsb2Iob3V0LCBmbCwgYmxvYik7CisKKwkJZ2l0X2ZpbHRlcl9saXN0X2ZyZWUoZmwpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9ibG9iLmggYi9zcmMvYmxvYi5oCmluZGV4IDIyZTM3Y2MuLjRjZDlmMWUgMTAwNjQ0Ci0tLSBhL3NyYy9ibG9iLmgKKysrIGIvc3JjL2Jsb2IuaApAQCAtMjEsNCArMjEsMTMgQEAKIGludCBnaXRfYmxvYl9fcGFyc2Uodm9pZCAqYmxvYiwgZ2l0X29kYl9vYmplY3QgKm9iaik7CiBpbnQgZ2l0X2Jsb2JfX2dldGJ1ZihnaXRfYnVmICpidWZmZXIsIGdpdF9ibG9iICpibG9iKTsKIAorZXh0ZXJuIGludCBnaXRfYmxvYl9fY3JlYXRlX2Zyb21fcGF0aHMoCisJZ2l0X29pZCAqb3V0X29pZCwKKwlzdHJ1Y3Qgc3RhdCAqb3V0X3N0LAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKmZ1bGxfcGF0aCwKKwljb25zdCBjaGFyICpoaW50X3BhdGgsCisJbW9kZV90IGhpbnRfbW9kZSwKKwlib29sIGFwcGx5X2ZpbHRlcnMpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9icmFuY2guYyBiL3NyYy9icmFuY2guYwppbmRleCA3MDY0ZmE3Li45NWIzZmQ5IDEwMDY0NAotLS0gYS9zcmMvYnJhbmNoLmMKKysrIGIvc3JjL2JyYW5jaC5jCkBAIC0xMjQsNTAgKzEyNCw2OCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotaW50IGdpdF9icmFuY2hfZm9yZWFjaCgKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQl1bnNpZ25lZCBpbnQgbGlzdF9mbGFncywKLQlnaXRfYnJhbmNoX2ZvcmVhY2hfY2IgY2FsbGJhY2ssCi0Jdm9pZCAqcGF5bG9hZCkKLXsKK3R5cGVkZWYgc3RydWN0IHsKIAlnaXRfcmVmZXJlbmNlX2l0ZXJhdG9yICppdGVyOworCXVuc2lnbmVkIGludCBmbGFnczsKK30gYnJhbmNoX2l0ZXI7CisKK2ludCBnaXRfYnJhbmNoX25leHQoZ2l0X3JlZmVyZW5jZSAqKm91dCwgZ2l0X2JyYW5jaF90ICpvdXRfdHlwZSwgZ2l0X2JyYW5jaF9pdGVyYXRvciAqX2l0ZXIpCit7CisJYnJhbmNoX2l0ZXIgKml0ZXIgPSAoYnJhbmNoX2l0ZXIgKikgX2l0ZXI7CiAJZ2l0X3JlZmVyZW5jZSAqcmVmOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCi0JaWYgKGdpdF9yZWZlcmVuY2VfaXRlcmF0b3JfbmV3KCZpdGVyLCByZXBvKSA8IDApCi0JCXJldHVybiAtMTsKKwl3aGlsZSAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9uZXh0KCZyZWYsIGl0ZXItPml0ZXIpKSA9PSAwKSB7CisJCWlmICgoaXRlci0+ZmxhZ3MgJiBHSVRfQlJBTkNIX0xPQ0FMKSAmJgorCQkgICAgIWdpdF9fcHJlZml4Y21wKHJlZi0+bmFtZSwgR0lUX1JFRlNfSEVBRFNfRElSKSkgeworCQkJKm91dCA9IHJlZjsKKwkJCSpvdXRfdHlwZSA9IEdJVF9CUkFOQ0hfTE9DQUw7CiAKLQl3aGlsZSAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9uZXh0KCZyZWYsIGl0ZXIpKSA9PSAwKSB7Ci0JCWlmIChsaXN0X2ZsYWdzICYgR0lUX0JSQU5DSF9MT0NBTCAmJgotCQkgICAgZ2l0X19wcmVmaXhjbXAocmVmLT5uYW1lLCBHSVRfUkVGU19IRUFEU19ESVIpID09IDApIHsKLQkJCWlmIChjYWxsYmFjayhyZWYtPm5hbWUgKyBzdHJsZW4oR0lUX1JFRlNfSEVBRFNfRElSKSwKLQkJCQkJR0lUX0JSQU5DSF9MT0NBTCwgcGF5bG9hZCkpIHsKLQkJCQllcnJvciA9IEdJVF9FVVNFUjsKLQkJCX0KKwkJCXJldHVybiAwOworCQl9IGVsc2UgIGlmICgoaXRlci0+ZmxhZ3MgJiBHSVRfQlJBTkNIX1JFTU9URSkgJiYKKwkJCSAgICAhZ2l0X19wcmVmaXhjbXAocmVmLT5uYW1lLCBHSVRfUkVGU19SRU1PVEVTX0RJUikpIHsKKwkJCSpvdXQgPSByZWY7CisJCQkqb3V0X3R5cGUgPSBHSVRfQlJBTkNIX1JFTU9URTsKKworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKIAkJfQotCi0JCWlmIChsaXN0X2ZsYWdzICYgR0lUX0JSQU5DSF9SRU1PVEUgJiYKLQkJICAgIGdpdF9fcHJlZml4Y21wKHJlZi0+bmFtZSwgR0lUX1JFRlNfUkVNT1RFU19ESVIpID09IDApIHsKLQkJCWlmIChjYWxsYmFjayhyZWYtPm5hbWUgKyBzdHJsZW4oR0lUX1JFRlNfUkVNT1RFU19ESVIpLAotCQkJCQlHSVRfQlJBTkNIX1JFTU9URSwgcGF5bG9hZCkpIHsKLQkJCQllcnJvciA9IEdJVF9FVVNFUjsKLQkJCX0KLQkJfQotCi0JCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOwotCi0JCS8qIGNoZWNrIGlmIHRoZSBjYWxsYmFjayBoYXMgY2FuY2VsbGVkIGl0ZXJhdGlvbiAqLwotCQlpZiAoZXJyb3IgPT0gR0lUX0VVU0VSKQotCQkJYnJlYWs7CiAJfQogCi0JaWYgKGVycm9yID09IEdJVF9JVEVST1ZFUikKLQkJZXJyb3IgPSAwOwotCi0JZ2l0X3JlZmVyZW5jZV9pdGVyYXRvcl9mcmVlKGl0ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIAoraW50IGdpdF9icmFuY2hfaXRlcmF0b3JfbmV3KAorCWdpdF9icmFuY2hfaXRlcmF0b3IgKipvdXQsCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJZ2l0X2JyYW5jaF90IGxpc3RfZmxhZ3MpCit7CisJYnJhbmNoX2l0ZXIgKml0ZXI7CisKKwlpdGVyID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGJyYW5jaF9pdGVyKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKGl0ZXIpOworCisJaXRlci0+ZmxhZ3MgPSBsaXN0X2ZsYWdzOworCisJaWYgKGdpdF9yZWZlcmVuY2VfaXRlcmF0b3JfbmV3KCZpdGVyLT5pdGVyLCByZXBvKSA8IDApIHsKKwkJZ2l0X19mcmVlKGl0ZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJKm91dCA9IChnaXRfYnJhbmNoX2l0ZXJhdG9yICopIGl0ZXI7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBnaXRfYnJhbmNoX2l0ZXJhdG9yX2ZyZWUoZ2l0X2JyYW5jaF9pdGVyYXRvciAqX2l0ZXIpCit7CisJYnJhbmNoX2l0ZXIgKml0ZXIgPSAoYnJhbmNoX2l0ZXIgKikgX2l0ZXI7CisKKwlnaXRfcmVmZXJlbmNlX2l0ZXJhdG9yX2ZyZWUoaXRlci0+aXRlcik7CisJZ2l0X19mcmVlKGl0ZXIpOworfQorCiBpbnQgZ2l0X2JyYW5jaF9tb3ZlKAogCWdpdF9yZWZlcmVuY2UgKipvdXQsCiAJZ2l0X3JlZmVyZW5jZSAqYnJhbmNoLApAQCAtNTg1LDcgKzYwMyw3IEBACiAKIAllcnJvciA9IGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIGdpdF9yZWZlcmVuY2Vfb3duZXIoYnJhbmNoKSk7CiAKLQlpZiAoZXJyb3IgPT0gR0lUX0VPUlBIQU5FREhFQUQgfHwgZXJyb3IgPT0gR0lUX0VOT1RGT1VORCkKKwlpZiAoZXJyb3IgPT0gR0lUX0VVTkJPUk5CUkFOQ0ggfHwgZXJyb3IgPT0gR0lUX0VOT1RGT1VORCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGVycm9yIDwgMCkKZGlmZiAtLWdpdCBhL3NyYy9idWZfdGV4dC5jIGIvc3JjL2J1Zl90ZXh0LmMKaW5kZXggNDQzNDU0Yi4uNjMxZmViMyAxMDA2NDQKLS0tIGEvc3JjL2J1Zl90ZXh0LmMKKysrIGIvc3JjL2J1Zl90ZXh0LmMKQEAgLTcwLDEwICs3MCwxMCBAQAogCWFzc2VydCh0Z3QgIT0gc3JjKTsKIAogCWlmICghbmV4dCkKLQkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CisJCXJldHVybiBnaXRfYnVmX3NldCh0Z3QsIHNyYy0+cHRyLCBzcmMtPnNpemUpOwogCiAJLyogcmVkdWNlIHJlYWxsb2NzIHdoaWxlIGluIHRoZSBsb29wICovCi0JaWYgKGdpdF9idWZfZ3Jvdyh0Z3QsIHNyYy0+c2l6ZSkgPCAwKQorCWlmIChnaXRfYnVmX2dyb3codGd0LCBzcmMtPnNpemUgKyAxKSA8IDApCiAJCXJldHVybiAtMTsKIAlvdXQgPSB0Z3QtPnB0cjsKIAl0Z3QtPnNpemUgPSAwOwpAQCAtODEsMjAgKzgxLDI1IEBACiAJLyogRmluZCB0aGUgbmV4dCBcciBhbmQgY29weSB3aG9sZSBjaHVuayB1cCB0byB0aGVyZSB0byB0Z3QgKi8KIAlmb3IgKDsgbmV4dDsgc2NhbiA9IG5leHQgKyAxLCBuZXh0ID0gbWVtY2hyKHNjYW4sICdccicsIHNjYW5fZW5kIC0gc2NhbikpIHsKIAkJaWYgKG5leHQgPiBzY2FuKSB7Ci0JCQlzaXplX3QgY29weWxlbiA9IG5leHQgLSBzY2FuOworCQkJc2l6ZV90IGNvcHlsZW4gPSAoc2l6ZV90KShuZXh0IC0gc2Nhbik7CiAJCQltZW1jcHkob3V0LCBzY2FuLCBjb3B5bGVuKTsKIAkJCW91dCArPSBjb3B5bGVuOwogCQl9CiAKIAkJLyogRG8gbm90IGRyb3AgXHIgdW5sZXNzIGl0IGlzIGZvbGxvd2VkIGJ5IFxuICovCi0JCWlmIChuZXh0WzFdICE9ICdcbicpCisJCWlmIChuZXh0ICsgMSA9PSBzY2FuX2VuZCB8fCBuZXh0WzFdICE9ICdcbicpCiAJCQkqb3V0KysgPSAnXHInOwogCX0KIAogCS8qIENvcHkgcmVtYWluaW5nIGlucHV0IGludG8gZGVzdCAqLwotCW1lbWNweShvdXQsIHNjYW4sIHNjYW5fZW5kIC0gc2NhbiArIDEpOyAvKiArMSBmb3IgTlVMIGJ5dGUgKi8KLQlvdXQgKz0gKHNjYW5fZW5kIC0gc2Nhbik7Ci0JdGd0LT5zaXplID0gb3V0IC0gdGd0LT5wdHI7CisJaWYgKHNjYW4gPCBzY2FuX2VuZCkgeworCQlzaXplX3QgcmVtYWluaW5nID0gKHNpemVfdCkoc2Nhbl9lbmQgLSBzY2FuKTsKKwkJbWVtY3B5KG91dCwgc2NhbiwgcmVtYWluaW5nKTsKKwkJb3V0ICs9IHJlbWFpbmluZzsKKwl9CisKKwl0Z3QtPnNpemUgPSAoc2l6ZV90KShvdXQgLSB0Z3QtPnB0cik7CisJdGd0LT5wdHJbdGd0LT5zaXplXSA9ICdcMCc7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOSw3ICsxMTQsNyBAQAogCWFzc2VydCh0Z3QgIT0gc3JjKTsKIAogCWlmICghbmV4dCkKLQkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CisJCXJldHVybiBnaXRfYnVmX3NldCh0Z3QsIHNyYy0+cHRyLCBzcmMtPnNpemUpOwogCiAJLyogYXR0ZW1wdCB0byByZWR1Y2UgcmVhbGxvY3Mgd2hpbGUgaW4gdGhlIGxvb3AgKi8KIAlpZiAoZ2l0X2J1Zl9ncm93KHRndCwgc3JjLT5zaXplICsgKHNyYy0+c2l6ZSA+PiA0KSArIDEpIDwgMCkKQEAgLTE3MCw4ICsxNzUsMTQgQEAKIGJvb2wgZ2l0X2J1Zl90ZXh0X2lzX2JpbmFyeShjb25zdCBnaXRfYnVmICpidWYpCiB7CiAJY29uc3QgY2hhciAqc2NhbiA9IGJ1Zi0+cHRyLCAqZW5kID0gYnVmLT5wdHIgKyBidWYtPnNpemU7CisJZ2l0X2JvbV90IGJvbTsKIAlpbnQgcHJpbnRhYmxlID0gMCwgbm9ucHJpbnRhYmxlID0gMDsKIAorCXNjYW4gKz0gZ2l0X2J1Zl90ZXh0X2RldGVjdF9ib20oJmJvbSwgYnVmLCAwKTsKKworCWlmIChib20gPiBHSVRfQk9NX1VURjgpCisJCXJldHVybiAxOworCiAJd2hpbGUgKHNjYW4gPCBlbmQpIHsKIAkJdW5zaWduZWQgY2hhciBjID0gKnNjYW4rKzsKIApAQCAtMjYyLDcgKzI3Myw3IEBACiAJd2hpbGUgKHNjYW4gPCBlbmQpIHsKIAkJdW5zaWduZWQgY2hhciBjID0gKnNjYW4rKzsKIAotCQlpZiAoKGMgPiAweDFGICYmIGMgPCAweDdGKSB8fCBjID4gMHg5ZikKKwkJaWYgKGMgPiAweDFGICYmIGMgIT0gMHg3RikKIAkJCXN0YXRzLT5wcmludGFibGUrKzsKIAkJZWxzZSBzd2l0Y2ggKGMpIHsKIAkJCWNhc2UgJ1wwJzoKZGlmZiAtLWdpdCBhL3NyYy9idWZfdGV4dC5oIGIvc3JjL2J1Zl90ZXh0LmgKaW5kZXggNThlNGUyNi4uM2FjOWQxNCAxMDA2NDQKLS0tIGEvc3JjL2J1Zl90ZXh0LmgKKysrIGIvc3JjL2J1Zl90ZXh0LmgKQEAgLTU2LDE2ICs1NiwxNiBAQAogZXh0ZXJuIHZvaWQgZ2l0X2J1Zl90ZXh0X3VuZXNjYXBlKGdpdF9idWYgKmJ1Zik7CiAKIC8qKgotICogUmVwbGFjZSBhbGwgXHJcbiB3aXRoIFxuIChvciBkbyBub3RoaW5nIGlmIG5vIFxyXG4gYXJlIGZvdW5kKQorICogUmVwbGFjZSBhbGwgXHJcbiB3aXRoIFxuLiBEb2VzIG5vdCBtb2RpZnkgXHIgd2l0aG91dCB0cmFpbGluZyBcbi4KICAqCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCBpZiBubyBcclxuLCAtMSBvbiBtZW1vcnkgZXJyb3IKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBtZW1vcnkgZXJyb3IKICAqLwogZXh0ZXJuIGludCBnaXRfYnVmX3RleHRfY3JsZl90b19sZihnaXRfYnVmICp0Z3QsIGNvbnN0IGdpdF9idWYgKnNyYyk7CiAKIC8qKgotICogUmVwbGFjZSBhbGwgXG4gd2l0aCBcclxuIChvciBkbyBub3RoaW5nIGlmIG5vIFxuIGFyZSBmb3VuZCkKKyAqIFJlcGxhY2UgYWxsIFxuIHdpdGggXHJcbi4gRG9lcyBub3QgbW9kaWZ5IGV4aXN0aW5nIFxyXG4uCiAgKgotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FTk9URk9VTkQgaWYgbm8gXG4sIC0xIG9uIG1lbW9yeSBlcnJvcgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIG1lbW9yeSBlcnJvcgogICovCiBleHRlcm4gaW50IGdpdF9idWZfdGV4dF9sZl90b19jcmxmKGdpdF9idWYgKnRndCwgY29uc3QgZ2l0X2J1ZiAqc3JjKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2J1ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IDZlM2ZmZTUuLjIwNjgyMzIgMTAwNjQ0Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTYsNiArNiw3IEBACiAgKi8KICNpbmNsdWRlICJidWZmZXIuaCIKICNpbmNsdWRlICJwb3NpeC5oIgorI2luY2x1ZGUgImdpdDIvYnVmZmVyLmgiCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KIApAQCAtMzEsNyArMzIsOCBAQAogCQlnaXRfYnVmX2dyb3coYnVmLCBpbml0aWFsX3NpemUpOwogfQogCi1pbnQgZ2l0X2J1Zl90cnlfZ3JvdyhnaXRfYnVmICpidWYsIHNpemVfdCB0YXJnZXRfc2l6ZSwgYm9vbCBtYXJrX29vbSkKK2ludCBnaXRfYnVmX3RyeV9ncm93KAorCWdpdF9idWYgKmJ1Ziwgc2l6ZV90IHRhcmdldF9zaXplLCBib29sIG1hcmtfb29tLCBib29sIHByZXNlcnZlX2V4dGVybmFsKQogewogCWNoYXIgKm5ld19wdHI7CiAJc2l6ZV90IG5ld19zaXplOwpAQCAtMzksNiArNDEsOSBAQAogCWlmIChidWYtPnB0ciA9PSBnaXRfYnVmX19vb20pCiAJCXJldHVybiAtMTsKIAorCWlmICghdGFyZ2V0X3NpemUpCisJCXRhcmdldF9zaXplID0gYnVmLT5zaXplOworCiAJaWYgKHRhcmdldF9zaXplIDw9IGJ1Zi0+YXNpemUpCiAJCXJldHVybiAwOwogCkBAIC02Niw2ICs3MSw5IEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAocHJlc2VydmVfZXh0ZXJuYWwgJiYgIWJ1Zi0+YXNpemUgJiYgYnVmLT5wdHIgIT0gTlVMTCAmJiBidWYtPnNpemUgPiAwKQorCQltZW1jcHkobmV3X3B0ciwgYnVmLT5wdHIsIG1pbihidWYtPnNpemUsIG5ld19zaXplKSk7CisKIAlidWYtPmFzaXplID0gbmV3X3NpemU7CiAJYnVmLT5wdHIgICA9IG5ld19wdHI7CiAKQEAgLTc3LDExICs4NSwxNiBAQAogCXJldHVybiAwOwogfQogCitpbnQgZ2l0X2J1Zl9ncm93KGdpdF9idWYgKmJ1ZmZlciwgc2l6ZV90IHRhcmdldF9zaXplKQoreworCXJldHVybiBnaXRfYnVmX3RyeV9ncm93KGJ1ZmZlciwgdGFyZ2V0X3NpemUsIHRydWUsIHRydWUpOworfQorCiB2b2lkIGdpdF9idWZfZnJlZShnaXRfYnVmICpidWYpCiB7CiAJaWYgKCFidWYpIHJldHVybjsKIAotCWlmIChidWYtPnB0ciAhPSBnaXRfYnVmX19pbml0YnVmICYmIGJ1Zi0+cHRyICE9IGdpdF9idWZfX29vbSkKKwlpZiAoYnVmLT5hc2l6ZSA+IDAgJiYgYnVmLT5wdHIgIT0gTlVMTCAmJiBidWYtPnB0ciAhPSBnaXRfYnVmX19vb20pCiAJCWdpdF9fZnJlZShidWYtPnB0cik7CiAKIAlnaXRfYnVmX2luaXQoYnVmLCAwKTsKQEAgLTkwLDExICsxMDMsMTUgQEAKIHZvaWQgZ2l0X2J1Zl9jbGVhcihnaXRfYnVmICpidWYpCiB7CiAJYnVmLT5zaXplID0gMDsKKworCWlmICghYnVmLT5wdHIpCisJCWJ1Zi0+cHRyID0gZ2l0X2J1Zl9faW5pdGJ1ZjsKKwogCWlmIChidWYtPmFzaXplID4gMCkKIAkJYnVmLT5wdHJbMF0gPSAnXDAnOwogfQogCi1pbnQgZ2l0X2J1Zl9zZXQoZ2l0X2J1ZiAqYnVmLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQoraW50IGdpdF9idWZfc2V0KGdpdF9idWYgKmJ1ZiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIHsKIAlpZiAobGVuID09IDAgfHwgZGF0YSA9PSBOVUxMKSB7CiAJCWdpdF9idWZfY2xlYXIoYnVmKTsKQEAgLTEzNyw3ICsxNTQsNyBAQAogCXJldHVybiBnaXRfYnVmX3B1dChidWYsIHN0cmluZywgc3RybGVuKHN0cmluZykpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBiNjRzdHJbNjRdID0KK3N0YXRpYyBjb25zdCBjaGFyIGI2NHN0cltdID0KIAkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAKIGludCBnaXRfYnVmX3B1dF9iYXNlNjQoZ2l0X2J1ZiAqYnVmLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQpAQCAtMTk0LDYgKzIxMSw4IEBACiAJCQlmb3JtYXQsIGFyZ3MKIAkJKTsKIAorCQl2YV9lbmQoYXJncyk7CisKIAkJaWYgKGxlbiA8IDApIHsKIAkJCWdpdF9fZnJlZShidWYtPnB0cik7CiAJCQlidWYtPnB0ciA9IGdpdF9idWZfX29vbTsKQEAgLTI1OSw2ICsyNzgsMTUgQEAKIAl9CiB9CiAKK3ZvaWQgZ2l0X2J1Zl9zaG9ydGVuKGdpdF9idWYgKmJ1Ziwgc2l6ZV90IGFtb3VudCkKK3sKKwlpZiAoYW1vdW50ID4gYnVmLT5zaXplKQorCQlhbW91bnQgPSBidWYtPnNpemU7CisKKwlidWYtPnNpemUgPSBidWYtPnNpemUgLSBhbW91bnQ7CisJYnVmLT5wdHJbYnVmLT5zaXplXSA9ICdcMCc7Cit9CisKIHZvaWQgZ2l0X2J1Zl9ydHJ1bmNhdGVfYXRfY2hhcihnaXRfYnVmICpidWYsIGNoYXIgc2VwYXJhdG9yKQogewogCXNzaXplX3QgaWR4ID0gZ2l0X2J1Zl9yZmluZF9uZXh0KGJ1Ziwgc2VwYXJhdG9yKTsKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9idWZmZXIuaAppbmRleCA1NDAyZjM4Li40Y2E5ZDRkIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmgKKysrIGIvc3JjL2J1ZmZlci5oCkBAIC05LDE4ICs5LDI2IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJnaXQyL3N0cmFycmF5LmgiCisjaW5jbHVkZSAiZ2l0Mi9idWZmZXIuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgewotCWNoYXIgKnB0cjsKLQlzaXplX3QgYXNpemUsIHNpemU7Ci19IGdpdF9idWY7CisvKiB0eXBlZGVmIHN0cnVjdCB7CisgKiAgCWNoYXIgICAqcHRyOworICogIAlzaXplX3QgYXNpemUsIHNpemU7CisgKiB9IGdpdF9idWY7CisgKi8KIAogZXh0ZXJuIGNoYXIgZ2l0X2J1Zl9faW5pdGJ1ZltdOwogZXh0ZXJuIGNoYXIgZ2l0X2J1Zl9fb29tW107CiAKKy8qIFVzZSB0byBpbml0aWFsaXplIGJ1ZmZlciBzdHJ1Y3R1cmUgd2hlbiBnaXRfYnVmIGlzIG9uIHN0YWNrICovCiAjZGVmaW5lIEdJVF9CVUZfSU5JVCB7IGdpdF9idWZfX2luaXRidWYsIDAsIDAgfQogCitHSVRfSU5MSU5FKGJvb2wpIGdpdF9idWZfaXNfYWxsb2NhdGVkKGNvbnN0IGdpdF9idWYgKmJ1ZikKK3sKKwlyZXR1cm4gKGJ1Zi0+cHRyICE9IE5VTEwgJiYgYnVmLT5hc2l6ZSA+IDApOworfQorCiAvKioKICAqIEluaXRpYWxpemUgYSBnaXRfYnVmIHN0cnVjdHVyZS4KICAqCkBAIC0zMiwyNyArNDAsMTYgQEAKIC8qKgogICogQXR0ZW1wdCB0byBncm93IHRoZSBidWZmZXIgdG8gaG9sZCBhdCBsZWFzdCBgdGFyZ2V0X3NpemVgIGJ5dGVzLgogICoKLSAqIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGlzIHdpbGwgcmV0dXJuIGFuIGVycm9yLiAgSWYgbWFya19vb20gaXMgdHJ1ZSwKKyAqIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGlzIHdpbGwgcmV0dXJuIGFuIGVycm9yLiAgSWYgYG1hcmtfb29tYCBpcyB0cnVlLAogICogdGhpcyB3aWxsIG1hcmsgdGhlIGJ1ZmZlciBhcyBpbnZhbGlkIGZvciBmdXR1cmUgb3BlcmF0aW9uczsgaWYgZmFsc2UsCiAgKiBleGlzdGluZyBidWZmZXIgY29udGVudCB3aWxsIGJlIHByZXNlcnZlZCwgYnV0IGNhbGxpbmcgY29kZSBtdXN0IGhhbmRsZQotICogdGhhdCBidWZmZXIgd2FzIG5vdCBleHBhbmRlZC4KKyAqIHRoYXQgYnVmZmVyIHdhcyBub3QgZXhwYW5kZWQuICBJZiBgcHJlc2VydmVfZXh0ZXJuYWxgIGlzIHRydWUsIHRoZW4gYW55CisgKiBleGlzdGluZyBkYXRhIHBvaW50ZWQgdG8gYmUgYHB0cmAgZXZlbiBpZiBgYXNpemVgIGlzIHplcm8gd2lsbCBiZSBjb3BpZWQKKyAqIGludG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIuCiAgKi8KLWV4dGVybiBpbnQgZ2l0X2J1Zl90cnlfZ3JvdyhnaXRfYnVmICpidWYsIHNpemVfdCB0YXJnZXRfc2l6ZSwgYm9vbCBtYXJrX29vbSk7CitleHRlcm4gaW50IGdpdF9idWZfdHJ5X2dyb3coCisJZ2l0X2J1ZiAqYnVmLCBzaXplX3QgdGFyZ2V0X3NpemUsIGJvb2wgbWFya19vb20sIGJvb2wgcHJlc2VydmVfZXh0ZXJuYWwpOwogCi0vKioKLSAqIEdyb3cgdGhlIGJ1ZmZlciB0byBob2xkIGF0IGxlYXN0IGB0YXJnZXRfc2l6ZWAgYnl0ZXMuCi0gKgotICogSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoaXMgd2lsbCByZXR1cm4gYW4gZXJyb3IgYW5kIHRoZSBidWZmZXIgd2lsbCBiZQotICogbWFya2VkIGFzIGludmFsaWQgZm9yIGZ1dHVyZSBvcGVyYXRpb25zLCBpbnZhbGlkaW5nIGNvbnRlbnRzLgotICoKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUKLSAqLwotR0lUX0lOTElORShpbnQpIGdpdF9idWZfZ3JvdyhnaXRfYnVmICpidWYsIHNpemVfdCB0YXJnZXRfc2l6ZSkKLXsKLQlyZXR1cm4gZ2l0X2J1Zl90cnlfZ3JvdyhidWYsIHRhcmdldF9zaXplLCB0cnVlKTsKLX0KLQotZXh0ZXJuIHZvaWQgZ2l0X2J1Zl9mcmVlKGdpdF9idWYgKmJ1Zik7CiBleHRlcm4gdm9pZCBnaXRfYnVmX3N3YXAoZ2l0X2J1ZiAqYnVmX2EsIGdpdF9idWYgKmJ1Zl9iKTsKIGV4dGVybiBjaGFyICpnaXRfYnVmX2RldGFjaChnaXRfYnVmICpidWYpOwogZXh0ZXJuIHZvaWQgZ2l0X2J1Zl9hdHRhY2goZ2l0X2J1ZiAqYnVmLCBjaGFyICpwdHIsIHNpemVfdCBhc2l6ZSk7CkBAIC04MSw3ICs3OCw2IEBACiAgKiByZXR1cm4gY29kZSBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIGNhbGwgdGhlbSBpbiBhIHNlcmllcyB0aGVuIGp1c3QgY2FsbAogICogZ2l0X2J1Zl9vb20gYXQgdGhlIGVuZC4KICAqLwotaW50IGdpdF9idWZfc2V0KGdpdF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CiBpbnQgZ2l0X2J1Zl9zZXRzKGdpdF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqc3RyaW5nKTsKIGludCBnaXRfYnVmX3B1dGMoZ2l0X2J1ZiAqYnVmLCBjaGFyIGMpOwogaW50IGdpdF9idWZfcHV0KGdpdF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CkBAIC05MSw2ICs4Nyw3IEBACiB2b2lkIGdpdF9idWZfY2xlYXIoZ2l0X2J1ZiAqYnVmKTsKIHZvaWQgZ2l0X2J1Zl9jb25zdW1lKGdpdF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqZW5kKTsKIHZvaWQgZ2l0X2J1Zl90cnVuY2F0ZShnaXRfYnVmICpidWYsIHNpemVfdCBsZW4pOwordm9pZCBnaXRfYnVmX3Nob3J0ZW4oZ2l0X2J1ZiAqYnVmLCBzaXplX3QgYW1vdW50KTsKIHZvaWQgZ2l0X2J1Zl9ydHJ1bmNhdGVfYXRfY2hhcihnaXRfYnVmICpwYXRoLCBjaGFyIHNlcGFyYXRvcik7CiAKIGludCBnaXRfYnVmX2pvaW5fbihnaXRfYnVmICpidWYsIGNoYXIgc2VwYXJhdG9yLCBpbnQgbmJ1ZiwgLi4uKTsKZGlmZiAtLWdpdCBhL3NyYy9jYy1jb21wYXQuaCBiL3NyYy9jYy1jb21wYXQuaAppbmRleCBhNWU0Y2UxLi4zN2YxZWE4IDEwMDY0NAotLS0gYS9zcmMvY2MtY29tcGF0LmgKKysrIGIvc3JjL2NjLWNvbXBhdC5oCkBAIC01NCw4ICs1NCwxMiBAQAogCiAjaWYgZGVmaW5lZCAoX01TQ19WRVIpCiAJdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGJvb2w7Ci0jCWRlZmluZSB0cnVlIDEKLSMJZGVmaW5lIGZhbHNlIDAKKyMJaWZuZGVmIHRydWUKKyMJCWRlZmluZSB0cnVlIDEKKyMJZW5kaWYKKyMJaWZuZGVmIGZhbHNlCisjCQlkZWZpbmUgZmFsc2UgMAorIwllbmRpZgogI2Vsc2UKICMJaW5jbHVkZSA8c3RkYm9vbC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY2hlY2tvdXQuYyBiL3NyYy9jaGVja291dC5jCmluZGV4IDhmOWVjNjQuLjZkN2UzY2YgMTAwNjQ0Ci0tLSBhL3NyYy9jaGVja291dC5jCisrKyBiL3NyYy9jaGVja291dC5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgInBhdGhzcGVjLmgiCiAjaW5jbHVkZSAiYnVmX3RleHQuaCIKKyNpbmNsdWRlICJtZXJnZV9maWxlLmgiCisjaW5jbHVkZSAicGF0aC5oIgogCiAvKiBTZWUgZG9jcy9jaGVja291dC1pbnRlcm5hbHMubWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gKi8KIApAQCAtMzUsMjEgKzM3LDIzIEBACiAJQ0hFQ0tPVVRfQUNUSU9OX19VUERBVEVfQkxPQiA9IDIsCiAJQ0hFQ0tPVVRfQUNUSU9OX19VUERBVEVfU1VCTU9EVUxFID0gNCwKIAlDSEVDS09VVF9BQ1RJT05fX0NPTkZMSUNUID0gOCwKLQlDSEVDS09VVF9BQ1RJT05fX01BWCA9IDgsCi0JQ0hFQ0tPVVRfQUNUSU9OX19ERUZFUl9SRU1PVkUgPSAxNiwKKwlDSEVDS09VVF9BQ1RJT05fX1VQREFURV9DT05GTElDVCA9IDE2LAorCUNIRUNLT1VUX0FDVElPTl9fTUFYID0gMTYsCisJQ0hFQ0tPVVRfQUNUSU9OX19ERUZFUl9SRU1PVkUgPSAzMiwKIAlDSEVDS09VVF9BQ1RJT05fX1JFTU9WRV9BTkRfVVBEQVRFID0KIAkJKENIRUNLT1VUX0FDVElPTl9fVVBEQVRFX0JMT0IgfCBDSEVDS09VVF9BQ1RJT05fX1JFTU9WRSksCiB9OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG87Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzOwogCWJvb2wgb3B0c19mcmVlX2Jhc2VsaW5lOwogCWNoYXIgKnBmeDsKIAlnaXRfaW5kZXggKmluZGV4OwogCWdpdF9wb29sIHBvb2w7CiAJZ2l0X3ZlY3RvciByZW1vdmVzOworCWdpdF92ZWN0b3IgY29uZmxpY3RzOwogCWdpdF9idWYgcGF0aDsKIAlzaXplX3Qgd29ya2Rpcl9sZW47CiAJdW5zaWduZWQgaW50IHN0cmF0ZWd5OwpAQCAtNTksNiArNjMsMTYgQEAKIAlzaXplX3QgY29tcGxldGVkX3N0ZXBzOwogfSBjaGVja291dF9kYXRhOwogCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICphbmNlc3RvcjsKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKm91cnM7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICp0aGVpcnM7CisKKwlpbnQgbmFtZV9jb2xsaXNpb246MSwKKwkJZGlyZWN0b3J5ZmlsZToxLAorCQlvbmVfdG9fdHdvOjE7Cit9IGNoZWNrb3V0X2NvbmZsaWN0ZGF0YTsKKwogc3RhdGljIGludCBjaGVja291dF9ub3RpZnkoCiAJY2hlY2tvdXRfZGF0YSAqZGF0YSwKIAlnaXRfY2hlY2tvdXRfbm90aWZ5X3Qgd2h5LApAQCAtMjQ2LDEwICsyNjAsMTAgQEAKIAlib29sIHJlbW92ZSA9IGZhbHNlOwogCWdpdF9jaGVja291dF9ub3RpZnlfdCBub3RpZnkgPSBHSVRfQ0hFQ0tPVVRfTk9USUZZX05PTkU7CiAKLQlpZiAoIWdpdF9wYXRoc3BlY19tYXRjaF9wYXRoKAorCWlmICghZ2l0X3BhdGhzcGVjX19tYXRjaCgKIAkJCXBhdGhzcGVjLCB3ZC0+cGF0aCwKIAkJCShkYXRhLT5zdHJhdGVneSAmIEdJVF9DSEVDS09VVF9ESVNBQkxFX1BBVEhTUEVDX01BVENIKSAhPSAwLAotCQkJZ2l0X2l0ZXJhdG9yX2lnbm9yZV9jYXNlKHdvcmtkaXIpLCBOVUxMKSkKKwkJCWdpdF9pdGVyYXRvcl9pZ25vcmVfY2FzZSh3b3JrZGlyKSwgTlVMTCwgTlVMTCkpCiAJCXJldHVybiAwOwogCiAJLyogY2hlY2sgaWYgaXRlbSBpcyB0cmFja2VkIGluIHRoZSBpbmRleCBidXQgbm90IGluIHRoZSBjaGVja291dCBkaWZmICovCkBAIC01OTIsNiArNjA2LDM1OSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorR0lUX0lOTElORShpbnQpIGNoZWNrb3V0X2lkeGVudHJ5X2NtcCgKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmEsCisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICpiKQoreworCWlmICghYSAmJiAhYikKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoIWEgJiYgYikKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYoYSAmJiAhYikKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEtPnBhdGgsIGItPnBhdGgpOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X2NvbmZsaWN0ZGF0YV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBjaGVja291dF9jb25mbGljdGRhdGEgKmNhID0gYTsKKwljb25zdCBjaGVja291dF9jb25mbGljdGRhdGEgKmNiID0gYjsKKwlpbnQgZGlmZjsKKworCWlmICgoZGlmZiA9IGNoZWNrb3V0X2lkeGVudHJ5X2NtcChjYS0+YW5jZXN0b3IsIGNiLT5hbmNlc3RvcikpID09IDAgJiYKKwkJKGRpZmYgPSBjaGVja291dF9pZHhlbnRyeV9jbXAoY2EtPm91cnMsIGNiLT50aGVpcnMpKSA9PSAwKQorCQlkaWZmID0gY2hlY2tvdXRfaWR4ZW50cnlfY21wKGNhLT50aGVpcnMsIGNiLT50aGVpcnMpOworCisJcmV0dXJuIGRpZmY7Cit9CisKK2ludCBjaGVja291dF9jb25mbGljdGRhdGFfZW1wdHkoY29uc3QgZ2l0X3ZlY3RvciAqY29uZmxpY3RzLCBzaXplX3QgaWR4KQoreworCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqY29uZmxpY3Q7CisKKwlpZiAoKGNvbmZsaWN0ID0gZ2l0X3ZlY3Rvcl9nZXQoY29uZmxpY3RzLCBpZHgpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY29uZmxpY3QtPmFuY2VzdG9yIHx8IGNvbmZsaWN0LT5vdXJzIHx8IGNvbmZsaWN0LT50aGVpcnMpCisJCXJldHVybiAwOworCisJZ2l0X19mcmVlKGNvbmZsaWN0KTsKKwlyZXR1cm4gMTsKK30KKworR0lUX0lOTElORShib29sKSBjb25mbGljdF9wYXRoc3BlY19tYXRjaCgKKwljaGVja291dF9kYXRhICpkYXRhLAorCWdpdF9pdGVyYXRvciAqd29ya2RpciwKKwlnaXRfdmVjdG9yICpwYXRoc3BlYywKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmFuY2VzdG9yLAorCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqb3VycywKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKnRoZWlycykKK3sKKwkvKiBpZiB0aGUgcGF0aHNwZWMgbWF0Y2hlcyBvdXJzICpvciogdGhlaXJzLCBwcm9jZWVkICovCisJaWYgKG91cnMgJiYgZ2l0X3BhdGhzcGVjX19tYXRjaChwYXRoc3BlYywgb3Vycy0+cGF0aCwKKwkJKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX0RJU0FCTEVfUEFUSFNQRUNfTUFUQ0gpICE9IDAsCisJCWdpdF9pdGVyYXRvcl9pZ25vcmVfY2FzZSh3b3JrZGlyKSwgTlVMTCwgTlVMTCkpCisJCXJldHVybiB0cnVlOworCisJaWYgKHRoZWlycyAmJiBnaXRfcGF0aHNwZWNfX21hdGNoKHBhdGhzcGVjLCB0aGVpcnMtPnBhdGgsCisJCShkYXRhLT5zdHJhdGVneSAmIEdJVF9DSEVDS09VVF9ESVNBQkxFX1BBVEhTUEVDX01BVENIKSAhPSAwLAorCQlnaXRfaXRlcmF0b3JfaWdub3JlX2Nhc2Uod29ya2RpciksIE5VTEwsIE5VTEwpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChhbmNlc3RvciAmJiBnaXRfcGF0aHNwZWNfX21hdGNoKHBhdGhzcGVjLCBhbmNlc3Rvci0+cGF0aCwKKwkJKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX0RJU0FCTEVfUEFUSFNQRUNfTUFUQ0gpICE9IDAsCisJCWdpdF9pdGVyYXRvcl9pZ25vcmVfY2FzZSh3b3JrZGlyKSwgTlVMTCwgTlVMTCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X2NvbmZsaWN0c19sb2FkKGNoZWNrb3V0X2RhdGEgKmRhdGEsIGdpdF9pdGVyYXRvciAqd29ya2RpciwgZ2l0X3ZlY3RvciAqcGF0aHNwZWMpCit7CisJZ2l0X2luZGV4X2NvbmZsaWN0X2l0ZXJhdG9yICppdGVyYXRvciA9IE5VTEw7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICphbmNlc3RvciwgKm91cnMsICp0aGVpcnM7CisJY2hlY2tvdXRfY29uZmxpY3RkYXRhICpjb25mbGljdDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKChlcnJvciA9IGdpdF9pbmRleF9jb25mbGljdF9pdGVyYXRvcl9uZXcoJml0ZXJhdG9yLCBkYXRhLT5pbmRleCkpIDwgMCkKKwkJZ290byBkb25lOworCisJZGF0YS0+Y29uZmxpY3RzLl9jbXAgPSBjaGVja291dF9jb25mbGljdGRhdGFfY21wOworCisJLyogQ29sbGVjdCB0aGUgY29uZmxpY3RzICovCisJd2hpbGUgKChlcnJvciA9IGdpdF9pbmRleF9jb25mbGljdF9uZXh0KCZhbmNlc3RvciwgJm91cnMsICZ0aGVpcnMsIGl0ZXJhdG9yKSkgPT0gMCkgeworCQlpZiAoIWNvbmZsaWN0X3BhdGhzcGVjX21hdGNoKGRhdGEsIHdvcmtkaXIsIHBhdGhzcGVjLCBhbmNlc3Rvciwgb3VycywgdGhlaXJzKSkKKwkJCWNvbnRpbnVlOworCisJCWNvbmZsaWN0ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGNoZWNrb3V0X2NvbmZsaWN0ZGF0YSkpOworCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoY29uZmxpY3QpOworCisJCWNvbmZsaWN0LT5hbmNlc3RvciA9IGFuY2VzdG9yOworCQljb25mbGljdC0+b3VycyA9IG91cnM7CisJCWNvbmZsaWN0LT50aGVpcnMgPSB0aGVpcnM7CisKKwkJZ2l0X3ZlY3Rvcl9pbnNlcnQoJmRhdGEtPmNvbmZsaWN0cywgY29uZmxpY3QpOworCX0KKworCWlmIChlcnJvciA9PSBHSVRfSVRFUk9WRVIpCisJCWVycm9yID0gMDsKKworZG9uZToKKwlnaXRfaW5kZXhfY29uZmxpY3RfaXRlcmF0b3JfZnJlZShpdGVyYXRvcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK0dJVF9JTkxJTkUoaW50KSBjaGVja291dF9jb25mbGljdHNfY21wX2VudHJ5KAorCWNvbnN0IGNoYXIgKnBhdGgsCisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeSkKK3sKKwlyZXR1cm4gc3RyY21wKChjb25zdCBjaGFyICopcGF0aCwgZW50cnktPnBhdGgpOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X2NvbmZsaWN0c19jbXBfYW5jZXN0b3IoY29uc3Qgdm9pZCAqcCwgY29uc3Qgdm9pZCAqYykKK3sKKwljb25zdCBjaGFyICpwYXRoID0gcDsKKwljb25zdCBjaGVja291dF9jb25mbGljdGRhdGEgKmNvbmZsaWN0ID0gYzsKKworCWlmICghY29uZmxpY3QtPmFuY2VzdG9yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBjaGVja291dF9jb25mbGljdHNfY21wX2VudHJ5KHBhdGgsIGNvbmZsaWN0LT5hbmNlc3Rvcik7Cit9CisKK3N0YXRpYyBjaGVja291dF9jb25mbGljdGRhdGEgKmNoZWNrb3V0X2NvbmZsaWN0c19zZWFyY2hfYW5jZXN0b3IoCisJY2hlY2tvdXRfZGF0YSAqZGF0YSwKKwljb25zdCBjaGFyICpwYXRoKQoreworCXNpemVfdCBwb3M7CisKKwlpZiAoZ2l0X3ZlY3Rvcl9ic2VhcmNoMigmcG9zLCAmZGF0YS0+Y29uZmxpY3RzLCBjaGVja291dF9jb25mbGljdHNfY21wX2FuY2VzdG9yLCBwYXRoKSA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGdpdF92ZWN0b3JfZ2V0KCZkYXRhLT5jb25mbGljdHMsIHBvcyk7Cit9CisKK3N0YXRpYyBjaGVja291dF9jb25mbGljdGRhdGEgKmNoZWNrb3V0X2NvbmZsaWN0c19zZWFyY2hfYnJhbmNoKAorCWNoZWNrb3V0X2RhdGEgKmRhdGEsCisJY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGVja291dF9jb25mbGljdGRhdGEgKmNvbmZsaWN0OworCXNpemVfdCBpOworCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkYXRhLT5jb25mbGljdHMsIGksIGNvbmZsaWN0KSB7CisJCWludCBjbXAgPSAtMTsKKworCQlpZiAoY29uZmxpY3QtPmFuY2VzdG9yKQorCQkJYnJlYWs7CisKKwkJaWYgKGNvbmZsaWN0LT5vdXJzKQorCQkJY21wID0gY2hlY2tvdXRfY29uZmxpY3RzX2NtcF9lbnRyeShwYXRoLCBjb25mbGljdC0+b3Vycyk7CisJCWVsc2UgaWYgKGNvbmZsaWN0LT50aGVpcnMpCisJCQljbXAgPSBjaGVja291dF9jb25mbGljdHNfY21wX2VudHJ5KHBhdGgsIGNvbmZsaWN0LT50aGVpcnMpOworCisJCWlmIChjbXAgPT0gMCkKKwkJCXJldHVybiBjb25mbGljdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjaGVja291dF9jb25mbGljdHNfbG9hZF9ieW5hbWVfZW50cnkoCisJY2hlY2tvdXRfY29uZmxpY3RkYXRhICoqYW5jZXN0b3Jfb3V0LAorCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqKm91cnNfb3V0LAorCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqKnRoZWlyc19vdXQsCisJY2hlY2tvdXRfZGF0YSAqZGF0YSwKKwljb25zdCBnaXRfaW5kZXhfbmFtZV9lbnRyeSAqbmFtZV9lbnRyeSkKK3sKKwljaGVja291dF9jb25mbGljdGRhdGEgKmFuY2VzdG9yLCAqb3VycyA9IE5VTEwsICp0aGVpcnMgPSBOVUxMOworCWludCBlcnJvciA9IDA7CisKKwkqYW5jZXN0b3Jfb3V0ID0gTlVMTDsKKwkqb3Vyc19vdXQgPSBOVUxMOworCSp0aGVpcnNfb3V0ID0gTlVMTDsKKworCWlmICghbmFtZV9lbnRyeS0+YW5jZXN0b3IpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVgsICJBIE5BTUUgZW50cnkgZXhpc3RzIHdpdGhvdXQgYW4gYW5jZXN0b3IiKTsKKwkJZXJyb3IgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghbmFtZV9lbnRyeS0+b3VycyAmJiAhbmFtZV9lbnRyeS0+dGhlaXJzKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLCAiQSBOQU1FIGVudHJ5IGV4aXN0cyB3aXRob3V0IGFuIG91cnMgb3IgdGhlaXJzIik7CisJCWVycm9yID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoKGFuY2VzdG9yID0gY2hlY2tvdXRfY29uZmxpY3RzX3NlYXJjaF9hbmNlc3RvcihkYXRhLAorCQluYW1lX2VudHJ5LT5hbmNlc3RvcikpID09IE5VTEwpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVgsCisJCQkiQSBOQU1FIGVudHJ5IHJlZmVyZW5jZWQgYW5jZXN0b3IgZW50cnkgJyVzJyB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFpbiBpbmRleCIsCisJCQluYW1lX2VudHJ5LT5hbmNlc3Rvcik7CisJCWVycm9yID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAobmFtZV9lbnRyeS0+b3VycykgeworCQlpZiAoc3RyY21wKG5hbWVfZW50cnktPmFuY2VzdG9yLCBuYW1lX2VudHJ5LT5vdXJzKSA9PSAwKQorCQkJb3VycyA9IGFuY2VzdG9yOworCQllbHNlIGlmICgob3VycyA9IGNoZWNrb3V0X2NvbmZsaWN0c19zZWFyY2hfYnJhbmNoKGRhdGEsIG5hbWVfZW50cnktPm91cnMpKSA9PSBOVUxMIHx8CisJCQlvdXJzLT5vdXJzID09IE5VTEwpIHsKKwkJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLAorCQkJCSJBIE5BTUUgZW50cnkgcmVmZXJlbmNlZCBvdXIgZW50cnkgJyVzJyB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFpbiBpbmRleCIsCisJCQkJbmFtZV9lbnRyeS0+b3Vycyk7CisJCQllcnJvciA9IC0xOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKG5hbWVfZW50cnktPnRoZWlycykgeworCQlpZiAoc3RyY21wKG5hbWVfZW50cnktPmFuY2VzdG9yLCBuYW1lX2VudHJ5LT50aGVpcnMpID09IDApCisJCQl0aGVpcnMgPSBhbmNlc3RvcjsKKwkJZWxzZSBpZiAobmFtZV9lbnRyeS0+b3VycyAmJiBzdHJjbXAobmFtZV9lbnRyeS0+b3VycywgbmFtZV9lbnRyeS0+dGhlaXJzKSA9PSAwKQorCQkJdGhlaXJzID0gb3VyczsKKwkJZWxzZSBpZiAoKHRoZWlycyA9IGNoZWNrb3V0X2NvbmZsaWN0c19zZWFyY2hfYnJhbmNoKGRhdGEsIG5hbWVfZW50cnktPnRoZWlycykpID09IE5VTEwgfHwKKwkJCXRoZWlycy0+dGhlaXJzID09IE5VTEwpIHsKKwkJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLAorCQkJCSJBIE5BTUUgZW50cnkgcmVmZXJlbmNlZCB0aGVpciBlbnRyeSAnJXMnIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYWluIGluZGV4IiwKKwkJCQluYW1lX2VudHJ5LT50aGVpcnMpOworCQkJZXJyb3IgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCSphbmNlc3Rvcl9vdXQgPSBhbmNlc3RvcjsKKwkqb3Vyc19vdXQgPSBvdXJzOworCSp0aGVpcnNfb3V0ID0gdGhlaXJzOworCitkb25lOgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjaGVja291dF9jb25mbGljdHNfY29hbGVzY2VfcmVuYW1lcygKKwljaGVja291dF9kYXRhICpkYXRhKQoreworCWNvbnN0IGdpdF9pbmRleF9uYW1lX2VudHJ5ICpuYW1lX2VudHJ5OworCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqYW5jZXN0b3JfY29uZmxpY3QsICpvdXJfY29uZmxpY3QsICp0aGVpcl9jb25mbGljdDsKKwlzaXplX3QgaSwgbmFtZXM7CisJaW50IGVycm9yID0gMDsKKworCS8qIEp1Z2dsZSBlbnRyaWVzIGJhc2VkIG9uIHJlbmFtZXMgKi8KKwluYW1lcyA9IGdpdF9pbmRleF9uYW1lX2VudHJ5Y291bnQoZGF0YS0+aW5kZXgpOworCQorCWZvciAoaSA9IDA7IGkgPCBuYW1lczsgaSsrKSB7CisJCW5hbWVfZW50cnkgPSBnaXRfaW5kZXhfbmFtZV9nZXRfYnlpbmRleChkYXRhLT5pbmRleCwgaSk7CisKKwkJaWYgKChlcnJvciA9IGNoZWNrb3V0X2NvbmZsaWN0c19sb2FkX2J5bmFtZV9lbnRyeSgKKwkJCSZhbmNlc3Rvcl9jb25mbGljdCwgJm91cl9jb25mbGljdCwgJnRoZWlyX2NvbmZsaWN0LAorCQkJZGF0YSwgbmFtZV9lbnRyeSkpIDwgMCkKKwkJCWdvdG8gZG9uZTsKKworCQlpZiAob3VyX2NvbmZsaWN0ICYmIG91cl9jb25mbGljdCAhPSBhbmNlc3Rvcl9jb25mbGljdCkgeworCQkJYW5jZXN0b3JfY29uZmxpY3QtPm91cnMgPSBvdXJfY29uZmxpY3QtPm91cnM7CisJCQlvdXJfY29uZmxpY3QtPm91cnMgPSBOVUxMOworCisJCQlpZiAob3VyX2NvbmZsaWN0LT50aGVpcnMpCisJCQkJb3VyX2NvbmZsaWN0LT5uYW1lX2NvbGxpc2lvbiA9IDE7CisKKwkJCWlmIChvdXJfY29uZmxpY3QtPm5hbWVfY29sbGlzaW9uKQorCQkJCWFuY2VzdG9yX2NvbmZsaWN0LT5uYW1lX2NvbGxpc2lvbiA9IDE7CisJCX0KKworCQlpZiAodGhlaXJfY29uZmxpY3QgJiYgdGhlaXJfY29uZmxpY3QgIT0gYW5jZXN0b3JfY29uZmxpY3QpIHsKKwkJCWFuY2VzdG9yX2NvbmZsaWN0LT50aGVpcnMgPSB0aGVpcl9jb25mbGljdC0+dGhlaXJzOworCQkJdGhlaXJfY29uZmxpY3QtPnRoZWlycyA9IE5VTEw7CisKKwkJCWlmICh0aGVpcl9jb25mbGljdC0+b3VycykKKwkJCQl0aGVpcl9jb25mbGljdC0+bmFtZV9jb2xsaXNpb24gPSAxOworCisJCQlpZiAodGhlaXJfY29uZmxpY3QtPm5hbWVfY29sbGlzaW9uKQorCQkJCWFuY2VzdG9yX2NvbmZsaWN0LT5uYW1lX2NvbGxpc2lvbiA9IDE7CisJCX0KKworCQlpZiAob3VyX2NvbmZsaWN0ICYmIG91cl9jb25mbGljdCAhPSBhbmNlc3Rvcl9jb25mbGljdCAmJgorCQkJdGhlaXJfY29uZmxpY3QgJiYgdGhlaXJfY29uZmxpY3QgIT0gYW5jZXN0b3JfY29uZmxpY3QpCisJCQlhbmNlc3Rvcl9jb25mbGljdC0+b25lX3RvX3R3byA9IDE7CisJfQorCisJZ2l0X3ZlY3Rvcl9yZW1vdmVfbWF0Y2hpbmcoJmRhdGEtPmNvbmZsaWN0cywgY2hlY2tvdXRfY29uZmxpY3RkYXRhX2VtcHR5KTsKKworZG9uZToKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfY29uZmxpY3RzX21hcmtfZGlyZWN0b3J5ZmlsZSgKKwljaGVja291dF9kYXRhICpkYXRhKQoreworCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqY29uZmxpY3Q7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKKwlzaXplX3QgaSwgaiwgbGVuOworCWNvbnN0IGNoYXIgKnBhdGg7CisJaW50IHByZWZpeGVkLCBlcnJvciA9IDA7CisKKwlsZW4gPSBnaXRfaW5kZXhfZW50cnljb3VudChkYXRhLT5pbmRleCk7CisKKwkvKiBGaW5kIGQvZiBjb25mbGljdHMgKi8KKwlnaXRfdmVjdG9yX2ZvcmVhY2goJmRhdGEtPmNvbmZsaWN0cywgaSwgY29uZmxpY3QpIHsKKwkJaWYgKChjb25mbGljdC0+b3VycyAmJiBjb25mbGljdC0+dGhlaXJzKSB8fAorCQkJKCFjb25mbGljdC0+b3VycyAmJiAhY29uZmxpY3QtPnRoZWlycykpCisJCQljb250aW51ZTsKKworCQlwYXRoID0gY29uZmxpY3QtPm91cnMgPworCQkJY29uZmxpY3QtPm91cnMtPnBhdGggOiBjb25mbGljdC0+dGhlaXJzLT5wYXRoOworCisJCWlmICgoZXJyb3IgPSBnaXRfaW5kZXhfZmluZCgmaiwgZGF0YS0+aW5kZXgsIHBhdGgpKSA8IDApIHsKKwkJCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKQorCQkJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLAorCQkJCQkiSW5kZXggaW5jb25zaXN0ZW5jeSwgY291bGQgbm90IGZpbmQgZW50cnkgZm9yIGV4cGVjdGVkIGNvbmZsaWN0ICclcyciLCBwYXRoKTsKKworCQkJZ290byBkb25lOworCQl9CisKKwkJZm9yICg7IGogPCBsZW47IGorKykgeworCQkJaWYgKChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlpbmRleChkYXRhLT5pbmRleCwgaikpID09IE5VTEwpIHsKKwkJCQlnaXRlcnJfc2V0KEdJVEVSUl9JTkRFWCwKKwkJCQkJIkluZGV4IGluY29uc2lzdGVuY3ksIHRydW5jYXRlZCBpbmRleCB3aGlsZSBsb2FkaW5nIGV4cGVjdGVkIGNvbmZsaWN0ICclcyciLCBwYXRoKTsKKwkJCQllcnJvciA9IC0xOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJcHJlZml4ZWQgPSBnaXRfcGF0aF9lcXVhbF9vcl9wcmVmaXhlZChwYXRoLCBlbnRyeS0+cGF0aCk7CisKKwkJCWlmIChwcmVmaXhlZCA9PSBHSVRfUEFUSF9FUVVBTCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHByZWZpeGVkID09IEdJVF9QQVRIX1BSRUZJWCkKKwkJCQljb25mbGljdC0+ZGlyZWN0b3J5ZmlsZSA9IDE7CisKKwkJCWJyZWFrOworCQl9CisJfQorCitkb25lOgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjaGVja291dF9nZXRfY29uZmxpY3RzKAorCWNoZWNrb3V0X2RhdGEgKmRhdGEsCisJZ2l0X2l0ZXJhdG9yICp3b3JrZGlyLAorCWdpdF92ZWN0b3IgKnBhdGhzcGVjKQoreworCWludCBlcnJvciA9IDA7CisKKwlpZiAoZGF0YS0+c3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfU0tJUF9VTk1FUkdFRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGVycm9yID0gY2hlY2tvdXRfY29uZmxpY3RzX2xvYWQoZGF0YSwgd29ya2RpciwgcGF0aHNwZWMpKSA8IDAgfHwKKwkJKGVycm9yID0gY2hlY2tvdXRfY29uZmxpY3RzX2NvYWxlc2NlX3JlbmFtZXMoZGF0YSkpIDwgMCB8fAorCQkoZXJyb3IgPSBjaGVja291dF9jb25mbGljdHNfbWFya19kaXJlY3RvcnlmaWxlKGRhdGEpKSA8IDApCisJCWdvdG8gZG9uZTsKKworZG9uZToKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQgY2hlY2tvdXRfZ2V0X2FjdGlvbnMoCiAJdWludDMyX3QgKiphY3Rpb25zX3B0ciwKIAlzaXplX3QgKipjb3VudHNfcHRyLApAQCAtNjA3LDcgKzk3NCw3IEBACiAJdWludDMyX3QgKmFjdGlvbnMgPSBOVUxMOwogCiAJaWYgKGRhdGEtPm9wdHMucGF0aHMuY291bnQgPiAwICYmCi0JCWdpdF9wYXRoc3BlY19pbml0KCZwYXRoc3BlYywgJmRhdGEtPm9wdHMucGF0aHMsICZwYXRocG9vbCkgPCAwKQorCQlnaXRfcGF0aHNwZWNfX3Zpbml0KCZwYXRoc3BlYywgJmRhdGEtPm9wdHMucGF0aHMsICZwYXRocG9vbCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKGVycm9yID0gZ2l0X2l0ZXJhdG9yX2N1cnJlbnQoJndkaXRlbSwgd29ya2RpcikpIDwgMCAmJgpAQCAtNjU5LDcgKzEwMjYsMTMgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWdpdF9wYXRoc3BlY19mcmVlKCZwYXRoc3BlYyk7CisKKwlpZiAoKGVycm9yID0gY2hlY2tvdXRfZ2V0X2NvbmZsaWN0cyhkYXRhLCB3b3JrZGlyLCAmcGF0aHNwZWMpKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWNvdW50c1tDSEVDS09VVF9BQ1RJT05fX1VQREFURV9DT05GTElDVF0gPSBnaXRfdmVjdG9yX2xlbmd0aCgmZGF0YS0+Y29uZmxpY3RzKTsKKworCWdpdF9wYXRoc3BlY19fdmZyZWUoJnBhdGhzcGVjKTsKIAlnaXRfcG9vbF9jbGVhcigmcGF0aHBvb2wpOwogCiAJcmV0dXJuIDA7CkBAIC02NzAsNyArMTA0Myw3IEBACiAJKmFjdGlvbnNfcHRyID0gTlVMTDsKIAlnaXRfX2ZyZWUoYWN0aW9ucyk7CiAKLQlnaXRfcGF0aHNwZWNfZnJlZSgmcGF0aHNwZWMpOworCWdpdF9wYXRoc3BlY19fdmZyZWUoJnBhdGhzcGVjKTsKIAlnaXRfcG9vbF9jbGVhcigmcGF0aHBvb2wpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtNjc4LDcgKzEwNTEsNyBAQAogCiBzdGF0aWMgaW50IGJ1ZmZlcl90b19maWxlKAogCXN0cnVjdCBzdGF0ICpzdCwKLQlnaXRfYnVmICpidWZmZXIsCisJZ2l0X2J1ZiAqYnVmLAogCWNvbnN0IGNoYXIgKnBhdGgsCiAJbW9kZV90IGRpcl9tb2RlLAogCWludCBmaWxlX29wZW5fZmxhZ3MsCkBAIC02OTAsODAgKzEwNjMsNTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKChlcnJvciA9IGdpdF9mdXRpbHNfd3JpdGVidWZmZXIoCi0JCQlidWZmZXIsIHBhdGgsIGZpbGVfb3Blbl9mbGFncywgZmlsZV9tb2RlKSkgPCAwKQorCQkJYnVmLCBwYXRoLCBmaWxlX29wZW5fZmxhZ3MsIGZpbGVfbW9kZSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKHN0ICE9IE5VTEwgJiYgKGVycm9yID0gcF9zdGF0KHBhdGgsIHN0KSkgPCAwKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRXJyb3Igd2hpbGUgc3RhdHRpbmcgJyVzJyIsIHBhdGgpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQorCWlmIChzdCAhPSBOVUxMICYmIChlcnJvciA9IHBfc3RhdChwYXRoLCBzdCkpIDwgMCkKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJFcnJvciBzdGF0dGluZyAnJXMnIiwgcGF0aCk7CiAKLQlpZiAoKGZpbGVfbW9kZSAmIDAxMDApICE9IDAgJiYgKGVycm9yID0gcF9jaG1vZChwYXRoLCBmaWxlX21vZGUpKSA8IDApIHsKKwllbHNlIGlmIChHSVRfUEVSTVNfSVNfRVhFQyhmaWxlX21vZGUpICYmCisJCQkoZXJyb3IgPSBwX2NobW9kKHBhdGgsIGZpbGVfbW9kZSkpIDwgMCkKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gc2V0IHBlcm1pc3Npb25zIG9uICclcyciLCBwYXRoKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBibG9iX2NvbnRlbnRfdG9fZmlsZSgKIAlzdHJ1Y3Qgc3RhdCAqc3QsCiAJZ2l0X2Jsb2IgKmJsb2IsCiAJY29uc3QgY2hhciAqcGF0aCwKKwljb25zdCBjaGFyICogaGludF9wYXRoLAogCW1vZGVfdCBlbnRyeV9maWxlbW9kZSwKIAlnaXRfY2hlY2tvdXRfb3B0cyAqb3B0cykKIHsKLQlpbnQgZXJyb3IgPSAtMSwgbmJfZmlsdGVycyA9IDA7Ci0JbW9kZV90IGZpbGVfbW9kZSA9IG9wdHMtPmZpbGVfbW9kZTsKLQlib29sIGRvbnRfZnJlZV9maWx0ZXJlZDsKLQlnaXRfYnVmIHVuZmlsdGVyZWQgPSBHSVRfQlVGX0lOSVQsIGZpbHRlcmVkID0gR0lUX0JVRl9JTklUOwotCWdpdF92ZWN0b3IgZmlsdGVycyA9IEdJVF9WRUNUT1JfSU5JVDsKKwlpbnQgZXJyb3IgPSAwOworCW1vZGVfdCBmaWxlX21vZGUgPSBvcHRzLT5maWxlX21vZGUgPyBvcHRzLT5maWxlX21vZGUgOiBlbnRyeV9maWxlbW9kZTsKKwlnaXRfYnVmIG91dCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfZmlsdGVyX2xpc3QgKmZsID0gTlVMTDsKIAotCS8qIENyZWF0ZSBhIGZha2UgZ2l0X2J1ZiBmcm9tIHRoZSBibG9iIHJhdyBkYXRhLi4uICovCi0JZmlsdGVyZWQucHRyICA9ICh2b2lkICopZ2l0X2Jsb2JfcmF3Y29udGVudChibG9iKTsKLQlmaWx0ZXJlZC5zaXplID0gKHNpemVfdClnaXRfYmxvYl9yYXdzaXplKGJsb2IpOwotCS8qIC4uLiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZ2V0IHVuZXhwZWN0ZWRseSBmcmVlZCAqLwotCWRvbnRfZnJlZV9maWx0ZXJlZCA9IHRydWU7CisJaWYgKGhpbnRfcGF0aCA9PSBOVUxMKQorCQloaW50X3BhdGggPSBwYXRoOwogCi0JaWYgKCFvcHRzLT5kaXNhYmxlX2ZpbHRlcnMgJiYKLQkJIWdpdF9idWZfdGV4dF9pc19iaW5hcnkoJmZpbHRlcmVkKSAmJgotCQkobmJfZmlsdGVycyA9IGdpdF9maWx0ZXJzX2xvYWQoCi0JCQkmZmlsdGVycywKLQkJCWdpdF9vYmplY3Rfb3duZXIoKGdpdF9vYmplY3QgKilibG9iKSwKLQkJCXBhdGgsCi0JCQlHSVRfRklMVEVSX1RPX1dPUktUUkVFKSkgPiAwKQotCXsKLQkJLyogcmVzZXQgJ2ZpbHRlcmVkJyBzbyBpdCBjYW4gYmUgYSBmaWx0ZXIgdGFyZ2V0ICovCi0JCWdpdF9idWZfaW5pdCgmZmlsdGVyZWQsIDApOwotCQlkb250X2ZyZWVfZmlsdGVyZWQgPSBmYWxzZTsKLQl9Ci0KLQlpZiAobmJfZmlsdGVycyA8IDApCi0JCXJldHVybiBuYl9maWx0ZXJzOwotCi0JaWYgKG5iX2ZpbHRlcnMgPiAwKQkgewotCQlpZiAoKGVycm9yID0gZ2l0X2Jsb2JfX2dldGJ1ZigmdW5maWx0ZXJlZCwgYmxvYikpIDwgMCkKLQkJCWdvdG8gY2xlYW51cDsKLQotCQlpZiAoKGVycm9yID0gZ2l0X2ZpbHRlcnNfYXBwbHkoJmZpbHRlcmVkLCAmdW5maWx0ZXJlZCwgJmZpbHRlcnMpKSA8IDApCi0JCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JLyogQWxsb3cgb3ZlcnJpZGluZyBvZiBmaWxlIG1vZGUgKi8KLQlpZiAoIWZpbGVfbW9kZSkKLQkJZmlsZV9tb2RlID0gZW50cnlfZmlsZW1vZGU7Ci0KLQllcnJvciA9IGJ1ZmZlcl90b19maWxlKAotCQlzdCwgJmZpbHRlcmVkLCBwYXRoLCBvcHRzLT5kaXJfbW9kZSwgb3B0cy0+ZmlsZV9vcGVuX2ZsYWdzLCBmaWxlX21vZGUpOworCWlmICghb3B0cy0+ZGlzYWJsZV9maWx0ZXJzKQorCQllcnJvciA9IGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkJJmZsLCBnaXRfYmxvYl9vd25lcihibG9iKSwgYmxvYiwgaGludF9wYXRoLCBHSVRfRklMVEVSX1RPX1dPUktUUkVFKTsKIAogCWlmICghZXJyb3IpCisJCWVycm9yID0gZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2Jsb2IoJm91dCwgZmwsIGJsb2IpOworCisJZ2l0X2ZpbHRlcl9saXN0X2ZyZWUoZmwpOworCisJaWYgKCFlcnJvcikgeworCQllcnJvciA9IGJ1ZmZlcl90b19maWxlKAorCQkJc3QsICZvdXQsIHBhdGgsIG9wdHMtPmRpcl9tb2RlLCBvcHRzLT5maWxlX29wZW5fZmxhZ3MsIGZpbGVfbW9kZSk7CisKIAkJc3QtPnN0X21vZGUgPSBlbnRyeV9maWxlbW9kZTsKIAotY2xlYW51cDoKLQlnaXRfZmlsdGVyc19mcmVlKCZmaWx0ZXJzKTsKLQlnaXRfYnVmX2ZyZWUoJnVuZmlsdGVyZWQpOwotCWlmICghZG9udF9mcmVlX2ZpbHRlcmVkKQotCQlnaXRfYnVmX2ZyZWUoJmZpbHRlcmVkKTsKKwkJZ2l0X2J1Zl9mcmVlKCZvdXQpOworCX0KIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTgxNSw3ICsxMTYwLDggQEAKIAogCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwogCWVudHJ5LnBhdGggPSAoY2hhciAqKWZpbGUtPnBhdGg7IC8qIGNhc3QgdG8gcHJldmVudCB3YXJuaW5nICovCi0JZ2l0X2luZGV4X2VudHJ5X19pbml0X2Zyb21fc3RhdCgmZW50cnksIHN0KTsKKwlnaXRfaW5kZXhfZW50cnlfX2luaXRfZnJvbV9zdGF0KAorCQkmZW50cnksIHN0LCAhKGdpdF9pbmRleF9jYXBzKGRhdGEtPmluZGV4KSAmIEdJVF9JTkRFWENBUF9OT19GSUxFTU9ERSkpOwogCWdpdF9vaWRfY3B5KCZlbnRyeS5vaWQsICZmaWxlLT5vaWQpOwogCiAJcmV0dXJuIGdpdF9pbmRleF9hZGQoZGF0YS0+aW5kZXgsICZlbnRyeSk7CkBAIC05MTcsMzQgKzEyNjMsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaGVja291dF9ibG9iKAorc3RhdGljIGludCBjaGVja291dF93cml0ZV9jb250ZW50KAogCWNoZWNrb3V0X2RhdGEgKmRhdGEsCi0JY29uc3QgZ2l0X2RpZmZfZmlsZSAqZmlsZSkKKwljb25zdCBnaXRfb2lkICpvaWQsCisJY29uc3QgY2hhciAqZnVsbF9wYXRoLAorCWNvbnN0IGNoYXIgKmhpbnRfcGF0aCwKKwl1bnNpZ25lZCBpbnQgbW9kZSwKKwlzdHJ1Y3Qgc3RhdCAqc3QpCiB7CiAJaW50IGVycm9yID0gMDsKIAlnaXRfYmxvYiAqYmxvYjsKLQlzdHJ1Y3Qgc3RhdCBzdDsKIAotCWdpdF9idWZfdHJ1bmNhdGUoJmRhdGEtPnBhdGgsIGRhdGEtPndvcmtkaXJfbGVuKTsKLQlpZiAoZ2l0X2J1Zl9wdXRzKCZkYXRhLT5wYXRoLCBmaWxlLT5wYXRoKSA8IDApCi0JCXJldHVybiAtMTsKLQotCWlmICgoZGF0YS0+c3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfVVBEQVRFX09OTFkpICE9IDApIHsKLQkJaW50IHJ2YWwgPSBjaGVja291dF9zYWZlX2Zvcl91cGRhdGVfb25seSgKLQkJCWdpdF9idWZfY3N0cigmZGF0YS0+cGF0aCksIGZpbGUtPm1vZGUpOwotCQlpZiAocnZhbCA8PSAwKQotCQkJcmV0dXJuIHJ2YWw7Ci0JfQotCi0JaWYgKChlcnJvciA9IGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZGF0YS0+cmVwbywgJmZpbGUtPm9pZCkpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2Jsb2JfbG9va3VwKCZibG9iLCBkYXRhLT5yZXBvLCBvaWQpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCWlmIChTX0lTTE5LKGZpbGUtPm1vZGUpKQorCWlmIChTX0lTTE5LKG1vZGUpKQogCQllcnJvciA9IGJsb2JfY29udGVudF90b19saW5rKAotCQkJJnN0LCBibG9iLCBnaXRfYnVmX2NzdHIoJmRhdGEtPnBhdGgpLCBkYXRhLT5vcHRzLmRpcl9tb2RlLCBkYXRhLT5jYW5fc3ltbGluayk7CisJCQlzdCwgYmxvYiwgZnVsbF9wYXRoLCBkYXRhLT5vcHRzLmRpcl9tb2RlLCBkYXRhLT5jYW5fc3ltbGluayk7CiAJZWxzZQogCQllcnJvciA9IGJsb2JfY29udGVudF90b19maWxlKAotCQkJJnN0LCBibG9iLCBnaXRfYnVmX2NzdHIoJmRhdGEtPnBhdGgpLCBmaWxlLT5tb2RlLCAmZGF0YS0+b3B0cyk7CisJCQlzdCwgYmxvYiwgZnVsbF9wYXRoLCBoaW50X3BhdGgsIG1vZGUsICZkYXRhLT5vcHRzKTsKIAogCWdpdF9ibG9iX2ZyZWUoYmxvYik7CiAKQEAgLTk1OSw2ICsxMjk3LDMwIEBACiAJCWVycm9yID0gMDsKIAl9CiAKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfYmxvYigKKwljaGVja291dF9kYXRhICpkYXRhLAorCWNvbnN0IGdpdF9kaWZmX2ZpbGUgKmZpbGUpCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWdpdF9idWZfdHJ1bmNhdGUoJmRhdGEtPnBhdGgsIGRhdGEtPndvcmtkaXJfbGVuKTsKKwlpZiAoZ2l0X2J1Zl9wdXRzKCZkYXRhLT5wYXRoLCBmaWxlLT5wYXRoKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICgoZGF0YS0+c3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfVVBEQVRFX09OTFkpICE9IDApIHsKKwkJaW50IHJ2YWwgPSBjaGVja291dF9zYWZlX2Zvcl91cGRhdGVfb25seSgKKwkJCWdpdF9idWZfY3N0cigmZGF0YS0+cGF0aCksIGZpbGUtPm1vZGUpOworCQlpZiAocnZhbCA8PSAwKQorCQkJcmV0dXJuIHJ2YWw7CisJfQorCisJZXJyb3IgPSBjaGVja291dF93cml0ZV9jb250ZW50KAorCQlkYXRhLCAmZmlsZS0+b2lkLCBnaXRfYnVmX2NzdHIoJmRhdGEtPnBhdGgpLCBOVUxMLCBmaWxlLT5tb2RlLCAmc3QpOworCiAJLyogdXBkYXRlIHRoZSBpbmRleCB1bmxlc3MgcHJldmVudGVkICovCiAJaWYgKCFlcnJvciAmJiAoZGF0YS0+c3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfRE9OVF9VUERBVEVfSU5ERVgpID09IDApCiAJCWVycm9yID0gY2hlY2tvdXRfdXBkYXRlX2luZGV4KGRhdGEsIGZpbGUsICZzdCk7CkBAIC0xMTI5LDggKzE0OTEsMjc4IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisKK3N0YXRpYyBpbnQgY29uZmxpY3RfZW50cnlfbmFtZSgKKwlnaXRfYnVmICpvdXQsCisJY29uc3QgY2hhciAqc2lkZV9uYW1lLAorCWNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWlmIChnaXRfYnVmX3B1dHMob3V0LCBzaWRlX25hbWUpIDwgMCB8fAorCQlnaXRfYnVmX3B1dGMob3V0LCAnOicpIDwgMCB8fAorCQlnaXRfYnVmX3B1dHMob3V0LCBmaWxlbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja291dF9wYXRoX3N1ZmZpeGVkKGdpdF9idWYgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlzaXplX3QgcGF0aF9sZW47CisJaW50IGkgPSAwLCBlcnJvciA9IDA7CisKKwlpZiAoKGVycm9yID0gZ2l0X2J1Zl9wdXRjKHBhdGgsICd+JykpIDwgMCB8fCAoZXJyb3IgPSBnaXRfYnVmX3B1dHMocGF0aCwgc3VmZml4KSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwYXRoX2xlbiA9IGdpdF9idWZfbGVuKHBhdGgpOworCisJd2hpbGUgKGdpdF9wYXRoX2V4aXN0cyhnaXRfYnVmX2NzdHIocGF0aCkpICYmIGkgPCBJTlRfTUFYKSB7CisJCWdpdF9idWZfdHJ1bmNhdGUocGF0aCwgcGF0aF9sZW4pOworCisJCWlmICgoZXJyb3IgPSBnaXRfYnVmX3B1dGMocGF0aCwgJ18nKSkgPCAwIHx8CisJCQkoZXJyb3IgPSBnaXRfYnVmX3ByaW50ZihwYXRoLCAiJWQiLCBpKSkgPCAwKQorCQkJcmV0dXJuIGVycm9yOworCisJCWkrKzsKKwl9CisKKwlpZiAoaSA9PSBJTlRfTUFYKSB7CisJCWdpdF9idWZfdHJ1bmNhdGUocGF0aCwgcGF0aF9sZW4pOworCisJCWdpdGVycl9zZXQoR0lURVJSX0NIRUNLT1VULCAiQ291bGQgbm90IHdyaXRlICclcyc6IHdvcmtpbmcgZGlyZWN0b3J5IGZpbGUgZXhpc3RzIiwgcGF0aCk7CisJCXJldHVybiBHSVRfRUVYSVNUUzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja291dF93cml0ZV9lbnRyeSgKKwljaGVja291dF9kYXRhICpkYXRhLAorCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqY29uZmxpY3QsCisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICpzaWRlKQoreworCWNvbnN0IGNoYXIgKmhpbnRfcGF0aCA9IE5VTEwsICpzdWZmaXg7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGVycm9yOworCisJYXNzZXJ0IChzaWRlID09IGNvbmZsaWN0LT5vdXJzIHx8IHNpZGUgPT0gY29uZmxpY3QtPnRoZWlycyk7CisKKwlnaXRfYnVmX3RydW5jYXRlKCZkYXRhLT5wYXRoLCBkYXRhLT53b3JrZGlyX2xlbik7CisJaWYgKGdpdF9idWZfcHV0cygmZGF0YS0+cGF0aCwgc2lkZS0+cGF0aCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKGNvbmZsaWN0LT5uYW1lX2NvbGxpc2lvbiB8fCBjb25mbGljdC0+ZGlyZWN0b3J5ZmlsZSkgJiYKKwkJKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX1VTRV9PVVJTKSA9PSAwICYmCisJCShkYXRhLT5zdHJhdGVneSAmIEdJVF9DSEVDS09VVF9VU0VfVEhFSVJTKSA9PSAwKSB7CisKKwkJaWYgKHNpZGUgPT0gY29uZmxpY3QtPm91cnMpCisJCQlzdWZmaXggPSBkYXRhLT5vcHRzLm91cl9sYWJlbCA/IGRhdGEtPm9wdHMub3VyX2xhYmVsIDoKKwkJCQkib3VycyI7CisJCWVsc2UKKwkJCXN1ZmZpeCA9IGRhdGEtPm9wdHMudGhlaXJfbGFiZWwgPyBkYXRhLT5vcHRzLnRoZWlyX2xhYmVsIDoKKwkJCQkidGhlaXJzIjsKKworCQlpZiAoY2hlY2tvdXRfcGF0aF9zdWZmaXhlZCgmZGF0YS0+cGF0aCwgc3VmZml4KSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJaGludF9wYXRoID0gc2lkZS0+cGF0aDsKKwl9CisKKwlpZiAoKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX1VQREFURV9PTkxZKSAhPSAwICYmCisJCShlcnJvciA9IGNoZWNrb3V0X3NhZmVfZm9yX3VwZGF0ZV9vbmx5KGdpdF9idWZfY3N0cigmZGF0YS0+cGF0aCksIHNpZGUtPm1vZGUpKSA8PSAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gY2hlY2tvdXRfd3JpdGVfY29udGVudChkYXRhLAorCQkmc2lkZS0+b2lkLCBnaXRfYnVmX2NzdHIoJmRhdGEtPnBhdGgpLCBoaW50X3BhdGgsIHNpZGUtPm1vZGUsICZzdCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfd3JpdGVfZW50cmllcygKKwljaGVja291dF9kYXRhICpkYXRhLAorCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqY29uZmxpY3QpCit7CisJaW50IGVycm9yID0gMDsKKworCWlmICgoZXJyb3IgPSBjaGVja291dF93cml0ZV9lbnRyeShkYXRhLCBjb25mbGljdCwgY29uZmxpY3QtPm91cnMpKSA+PSAwKQorCQllcnJvciA9IGNoZWNrb3V0X3dyaXRlX2VudHJ5KGRhdGEsIGNvbmZsaWN0LCBjb25mbGljdC0+dGhlaXJzKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjaGVja291dF9tZXJnZV9wYXRoKAorCWdpdF9idWYgKm91dCwKKwljaGVja291dF9kYXRhICpkYXRhLAorCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqY29uZmxpY3QsCisJZ2l0X21lcmdlX2ZpbGVfcmVzdWx0ICpyZXN1bHQpCit7CisJY29uc3QgY2hhciAqb3VyX2xhYmVsX3JhdywgKnRoZWlyX2xhYmVsX3JhdywgKnN1ZmZpeDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgob3V0LCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGRhdGEtPnJlcG8pLCByZXN1bHQtPnBhdGgpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCS8qIE1vc3QgY29uZmxpY3RzIHNpbXBseSB1c2UgdGhlIGZpbGVuYW1lIGluIHRoZSBpbmRleCAqLworCWlmICghY29uZmxpY3QtPm5hbWVfY29sbGlzaW9uKQorCQlyZXR1cm4gMDsKKworCS8qIFJlbmFtZSAyLT4xIGNvbmZsaWN0cyBuZWVkIHRoZSBicmFuY2ggbmFtZSBhcHBlbmRlZCAqLworCW91cl9sYWJlbF9yYXcgPSBkYXRhLT5vcHRzLm91cl9sYWJlbCA/IGRhdGEtPm9wdHMub3VyX2xhYmVsIDogIm91cnMiOworCXRoZWlyX2xhYmVsX3JhdyA9IGRhdGEtPm9wdHMudGhlaXJfbGFiZWwgPyBkYXRhLT5vcHRzLnRoZWlyX2xhYmVsIDogInRoZWlycyI7CisJc3VmZml4ID0gc3RyY21wKHJlc3VsdC0+cGF0aCwgY29uZmxpY3QtPm91cnMtPnBhdGgpID09IDAgPyBvdXJfbGFiZWxfcmF3IDogdGhlaXJfbGFiZWxfcmF3OworCisJaWYgKChlcnJvciA9IGNoZWNrb3V0X3BhdGhfc3VmZml4ZWQob3V0LCBzdWZmaXgpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3dyaXRlX21lcmdlKAorCWNoZWNrb3V0X2RhdGEgKmRhdGEsCisJY2hlY2tvdXRfY29uZmxpY3RkYXRhICpjb25mbGljdCkKK3sKKwlnaXRfYnVmIG91cl9sYWJlbCA9IEdJVF9CVUZfSU5JVCwgdGhlaXJfbGFiZWwgPSBHSVRfQlVGX0lOSVQsCisJCXBhdGhfc3VmZml4ZWQgPSBHSVRfQlVGX0lOSVQsIHBhdGhfd29ya2RpciA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfbWVyZ2VfZmlsZV9pbnB1dCBhbmNlc3RvciA9IEdJVF9NRVJHRV9GSUxFX0lOUFVUX0lOSVQsCisJCW91cnMgPSBHSVRfTUVSR0VfRklMRV9JTlBVVF9JTklULAorCQl0aGVpcnMgPSBHSVRfTUVSR0VfRklMRV9JTlBVVF9JTklUOworCWdpdF9tZXJnZV9maWxlX3Jlc3VsdCByZXN1bHQgPSBHSVRfTUVSR0VfRklMRV9SRVNVTFRfSU5JVDsKKwlnaXRfZmlsZWJ1ZiBvdXRwdXQgPSBHSVRfRklMRUJVRl9JTklUOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoKGNvbmZsaWN0LT5hbmNlc3RvciAmJgorCQkoZXJyb3IgPSBnaXRfbWVyZ2VfZmlsZV9pbnB1dF9mcm9tX2luZGV4X2VudHJ5KAorCQkmYW5jZXN0b3IsIGRhdGEtPnJlcG8sIGNvbmZsaWN0LT5hbmNlc3RvcikpIDwgMCkgfHwKKwkJKGVycm9yID0gZ2l0X21lcmdlX2ZpbGVfaW5wdXRfZnJvbV9pbmRleF9lbnRyeSgKKwkJJm91cnMsIGRhdGEtPnJlcG8sIGNvbmZsaWN0LT5vdXJzKSkgPCAwIHx8CisJCShlcnJvciA9IGdpdF9tZXJnZV9maWxlX2lucHV0X2Zyb21faW5kZXhfZW50cnkoCisJCSZ0aGVpcnMsIGRhdGEtPnJlcG8sIGNvbmZsaWN0LT50aGVpcnMpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCWFuY2VzdG9yLmxhYmVsID0gTlVMTDsKKwlvdXJzLmxhYmVsID0gZGF0YS0+b3B0cy5vdXJfbGFiZWwgPyBkYXRhLT5vcHRzLm91cl9sYWJlbCA6ICJvdXJzIjsKKwl0aGVpcnMubGFiZWwgPSBkYXRhLT5vcHRzLnRoZWlyX2xhYmVsID8gZGF0YS0+b3B0cy50aGVpcl9sYWJlbCA6ICJ0aGVpcnMiOworCisJLyogSWYgYWxsIHRoZSBwYXRocyBhcmUgaWRlbnRpY2FsLCBkZWNvcmF0ZSB0aGUgZGlmZjMgZmlsZSB3aXRoIHRoZSBicmFuY2gKKwkgKiBuYW1lcy4gIE90aGVyd2lzZSwgYXBwZW5kIGJyYW5jaF9uYW1lOnBhdGguCisJICovCisJaWYgKGNvbmZsaWN0LT5vdXJzICYmIGNvbmZsaWN0LT50aGVpcnMgJiYKKwkJc3RyY21wKGNvbmZsaWN0LT5vdXJzLT5wYXRoLCBjb25mbGljdC0+dGhlaXJzLT5wYXRoKSAhPSAwKSB7CisKKwkJaWYgKChlcnJvciA9IGNvbmZsaWN0X2VudHJ5X25hbWUoCisJCQkmb3VyX2xhYmVsLCBvdXJzLmxhYmVsLCBjb25mbGljdC0+b3Vycy0+cGF0aCkpIDwgMCB8fAorCQkJKGVycm9yID0gY29uZmxpY3RfZW50cnlfbmFtZSgKKwkJCSZ0aGVpcl9sYWJlbCwgdGhlaXJzLmxhYmVsLCBjb25mbGljdC0+dGhlaXJzLT5wYXRoKSkgPCAwKQorCQkJZ290byBkb25lOworCisJCW91cnMubGFiZWwgPSBnaXRfYnVmX2NzdHIoJm91cl9sYWJlbCk7CisJCXRoZWlycy5sYWJlbCA9IGdpdF9idWZfY3N0cigmdGhlaXJfbGFiZWwpOworCX0KKworCWlmICgoZXJyb3IgPSBnaXRfbWVyZ2VfZmlsZXMoJnJlc3VsdCwgJmFuY2VzdG9yLCAmb3VycywgJnRoZWlycywgMCkpIDwgMCkKKwkJZ290byBkb25lOworCisJaWYgKHJlc3VsdC5wYXRoID09IE5VTEwgfHwgcmVzdWx0Lm1vZGUgPT0gMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9DSEVDS09VVCwgIkNvdWxkIG5vdCBtZXJnZSBjb250ZW50cyBvZiBmaWxlIik7CisJCWVycm9yID0gR0lUX0VNRVJHRUNPTkZMSUNUOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKChlcnJvciA9IGNoZWNrb3V0X21lcmdlX3BhdGgoJnBhdGhfd29ya2RpciwgZGF0YSwgY29uZmxpY3QsICZyZXN1bHQpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCWlmICgoZGF0YS0+c3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfVVBEQVRFX09OTFkpICE9IDAgJiYKKwkJKGVycm9yID0gY2hlY2tvdXRfc2FmZV9mb3JfdXBkYXRlX29ubHkoZ2l0X2J1Zl9jc3RyKCZwYXRoX3dvcmtkaXIpLCByZXN1bHQubW9kZSkpIDw9IDApCisJCWdvdG8gZG9uZTsKKworCWlmICgoZXJyb3IgPSBnaXRfZnV0aWxzX21rcGF0aDJmaWxlKHBhdGhfd29ya2Rpci5wdHIsIDA3NTUpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3Blbigmb3V0cHV0LCBwYXRoX3dvcmtkaXIucHRyLCBHSVRfRklMRUJVRl9ET19OT1RfQlVGRkVSLCByZXN1bHQubW9kZSkpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl93cml0ZSgmb3V0cHV0LCByZXN1bHQuZGF0YSwgcmVzdWx0LmxlbikpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJm91dHB1dCkpIDwgMCkKKwkJZ290byBkb25lOworCitkb25lOgorCWdpdF9idWZfZnJlZSgmb3VyX2xhYmVsKTsKKwlnaXRfYnVmX2ZyZWUoJnRoZWlyX2xhYmVsKTsKKworCWdpdF9tZXJnZV9maWxlX2lucHV0X2ZyZWUoJmFuY2VzdG9yKTsKKwlnaXRfbWVyZ2VfZmlsZV9pbnB1dF9mcmVlKCZvdXJzKTsKKwlnaXRfbWVyZ2VfZmlsZV9pbnB1dF9mcmVlKCZ0aGVpcnMpOworCWdpdF9tZXJnZV9maWxlX3Jlc3VsdF9mcmVlKCZyZXN1bHQpOworCWdpdF9idWZfZnJlZSgmcGF0aF93b3JrZGlyKTsKKwlnaXRfYnVmX2ZyZWUoJnBhdGhfc3VmZml4ZWQpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X2NyZWF0ZV9jb25mbGljdHMoY2hlY2tvdXRfZGF0YSAqZGF0YSkKK3sKKwljaGVja291dF9jb25mbGljdGRhdGEgKmNvbmZsaWN0OworCXNpemVfdCBpOworCWludCBlcnJvciA9IDA7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJmRhdGEtPmNvbmZsaWN0cywgaSwgY29uZmxpY3QpIHsKKwkJLyogQm90aCBkZWxldGVkOiBub3RoaW5nIHRvIGRvICovCisJCWlmIChjb25mbGljdC0+b3VycyA9PSBOVUxMICYmIGNvbmZsaWN0LT50aGVpcnMgPT0gTlVMTCkKKwkJCWVycm9yID0gMDsKKworCQllbHNlIGlmICgoZGF0YS0+c3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfVVNFX09VUlMpICYmCisJCQljb25mbGljdC0+b3VycykKKwkJCWVycm9yID0gY2hlY2tvdXRfd3JpdGVfZW50cnkoZGF0YSwgY29uZmxpY3QsIGNvbmZsaWN0LT5vdXJzKTsKKwkJZWxzZSBpZiAoKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX1VTRV9USEVJUlMpICYmCisJCQljb25mbGljdC0+dGhlaXJzKQorCQkJZXJyb3IgPSBjaGVja291dF93cml0ZV9lbnRyeShkYXRhLCBjb25mbGljdCwgY29uZmxpY3QtPnRoZWlycyk7CisKKwkJLyogSWdub3JlIHRoZSBvdGhlciBzaWRlIG9mIG5hbWUgY29sbGlzaW9ucy4gKi8KKwkJZWxzZSBpZiAoKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX1VTRV9PVVJTKSAmJgorCQkJIWNvbmZsaWN0LT5vdXJzICYmIGNvbmZsaWN0LT5uYW1lX2NvbGxpc2lvbikKKwkJCWVycm9yID0gMDsKKwkJZWxzZSBpZiAoKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX1VTRV9USEVJUlMpICYmCisJCQkhY29uZmxpY3QtPnRoZWlycyAmJiBjb25mbGljdC0+bmFtZV9jb2xsaXNpb24pCisJCQllcnJvciA9IDA7CisKKwkJLyogRm9yIG1vZGlmeS9kZWxldGUsIG5hbWUgY29sbGlzaW9ucyBhbmQgZC9mIGNvbmZsaWN0cywgd3JpdGUKKwkJICogdGhlIGZpbGUgKHBvdGVudGlhbGx5IHdpdGggdGhlIG5hbWUgbWFuZ2xlZC4KKwkJICovCisJCWVsc2UgaWYgKGNvbmZsaWN0LT5vdXJzICE9IE5VTEwgJiYgY29uZmxpY3QtPnRoZWlycyA9PSBOVUxMKQorCQkJZXJyb3IgPSBjaGVja291dF93cml0ZV9lbnRyeShkYXRhLCBjb25mbGljdCwgY29uZmxpY3QtPm91cnMpOworCQllbHNlIGlmIChjb25mbGljdC0+b3VycyA9PSBOVUxMICYmIGNvbmZsaWN0LT50aGVpcnMgIT0gTlVMTCkKKwkJCWVycm9yID0gY2hlY2tvdXRfd3JpdGVfZW50cnkoZGF0YSwgY29uZmxpY3QsIGNvbmZsaWN0LT50aGVpcnMpOworCisJCS8qIEFkZC9hZGQgY29uZmxpY3RzIGFuZCByZW5hbWUgMS0+MiBjb25mbGljdHMsIHdyaXRlIHRoZQorCQkgKiBvdXJzL3RoZWlycyBzaWRlcyAocG90ZW50aWFsbHkgbmFtZSBtYW5nbGVkKS4KKwkJICovCisJCWVsc2UgaWYgKGNvbmZsaWN0LT5vbmVfdG9fdHdvKQorCQkJZXJyb3IgPSBjaGVja291dF93cml0ZV9lbnRyaWVzKGRhdGEsIGNvbmZsaWN0KTsKKworCQkvKiBJZiBhbGwgc2lkZXMgYXJlIGxpbmtzLCB3cml0ZSB0aGUgb3VycyBzaWRlICovCisJCWVsc2UgaWYgKFNfSVNMTksoY29uZmxpY3QtPm91cnMtPm1vZGUpICYmCisJCQlTX0lTTE5LKGNvbmZsaWN0LT50aGVpcnMtPm1vZGUpKQorCQkJZXJyb3IgPSBjaGVja291dF93cml0ZV9lbnRyeShkYXRhLCBjb25mbGljdCwgY29uZmxpY3QtPm91cnMpOworCQkvKiBMaW5rL2ZpbGUgY29uZmxpY3RzLCB3cml0ZSB0aGUgZmlsZSBzaWRlICovCisJCWVsc2UgaWYgKFNfSVNMTksoY29uZmxpY3QtPm91cnMtPm1vZGUpKQorCQkJZXJyb3IgPSBjaGVja291dF93cml0ZV9lbnRyeShkYXRhLCBjb25mbGljdCwgY29uZmxpY3QtPnRoZWlycyk7CisJCWVsc2UgaWYgKFNfSVNMTksoY29uZmxpY3QtPnRoZWlycy0+bW9kZSkpCisJCQllcnJvciA9IGNoZWNrb3V0X3dyaXRlX2VudHJ5KGRhdGEsIGNvbmZsaWN0LCBjb25mbGljdC0+b3Vycyk7CisKKwkJZWxzZQorCQkJZXJyb3IgPSBjaGVja291dF93cml0ZV9tZXJnZShkYXRhLCBjb25mbGljdCk7CisKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJZGF0YS0+Y29tcGxldGVkX3N0ZXBzKys7CisJCXJlcG9ydF9wcm9ncmVzcyhkYXRhLAorCQkJY29uZmxpY3QtPm91cnMgPyBjb25mbGljdC0+b3Vycy0+cGF0aCA6CisJCQkoY29uZmxpY3QtPnRoZWlycyA/IGNvbmZsaWN0LT50aGVpcnMtPnBhdGggOiBjb25mbGljdC0+YW5jZXN0b3ItPnBhdGgpKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKwogc3RhdGljIHZvaWQgY2hlY2tvdXRfZGF0YV9jbGVhcihjaGVja291dF9kYXRhICpkYXRhKQogeworCWNoZWNrb3V0X2NvbmZsaWN0ZGF0YSAqY29uZmxpY3Q7CisJc2l6ZV90IGk7CisKIAlpZiAoZGF0YS0+b3B0c19mcmVlX2Jhc2VsaW5lKSB7CiAJCWdpdF90cmVlX2ZyZWUoZGF0YS0+b3B0cy5iYXNlbGluZSk7CiAJCWRhdGEtPm9wdHMuYmFzZWxpbmUgPSBOVUxMOwpAQCAtMTEzOSw2ICsxNzcxLDExIEBACiAJZ2l0X3ZlY3Rvcl9mcmVlKCZkYXRhLT5yZW1vdmVzKTsKIAlnaXRfcG9vbF9jbGVhcigmZGF0YS0+cG9vbCk7CiAKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJmRhdGEtPmNvbmZsaWN0cywgaSwgY29uZmxpY3QpCisJCWdpdF9fZnJlZShjb25mbGljdCk7CisKKwlnaXRfdmVjdG9yX2ZyZWUoJmRhdGEtPmNvbmZsaWN0cyk7CisKIAlnaXRfX2ZyZWUoZGF0YS0+cGZ4KTsKIAlkYXRhLT5wZnggPSBOVUxMOwogCkBAIC0xMTUxLDcgKzE3ODgsNyBAQAogc3RhdGljIGludCBjaGVja291dF9kYXRhX2luaXQoCiAJY2hlY2tvdXRfZGF0YSAqZGF0YSwKIAlnaXRfaXRlcmF0b3IgKnRhcmdldCwKLQlnaXRfY2hlY2tvdXRfb3B0cyAqcHJvcG9zZWQpCisJY29uc3QgZ2l0X2NoZWNrb3V0X29wdHMgKnByb3Bvc2VkKQogewogCWludCBlcnJvciA9IDA7CiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBnaXRfaXRlcmF0b3Jfb3duZXIodGFyZ2V0KTsKQEAgLTEyMDAsMTAgKzE4MzcsMjAgQEAKIAkJfSBlbHNlIHsKIAkJCS8qIG90aGVyd2lzZSwgZ3JhYiBhbmQgcmVsb2FkIHRoZSBpbmRleCAqLwogCQkJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luZGV4KCZkYXRhLT5pbmRleCwgZGF0YS0+cmVwbykpIDwgMCB8fAotCQkJCShlcnJvciA9IGdpdF9pbmRleF9yZWFkKGRhdGEtPmluZGV4KSkgPCAwKQorCQkJCShlcnJvciA9IGdpdF9pbmRleF9yZWFkKGRhdGEtPmluZGV4LCB0cnVlKSkgPCAwKQogCQkJCWdvdG8gY2xlYW51cDsKIAotCQkJLyogY2xlYXIgdGhlIFJFVUMgd2hlbiBkb2luZyBhIHRyZWUgb3IgY29tbWl0IGNoZWNrb3V0ICovCisJCQkvKiBjYW5ub3QgY2hlY2tvdXQgaWYgdW5yZXNvbHZlZCBjb25mbGljdHMgZXhpc3QgKi8KKwkJCWlmICgoZGF0YS0+b3B0cy5jaGVja291dF9zdHJhdGVneSAmIEdJVF9DSEVDS09VVF9GT1JDRSkgPT0gMCAmJgorCQkJCWdpdF9pbmRleF9oYXNfY29uZmxpY3RzKGRhdGEtPmluZGV4KSkgeworCQkJCWVycm9yID0gR0lUX0VNRVJHRUNPTkZMSUNUOworCQkJCWdpdGVycl9zZXQoR0lURVJSX0NIRUNLT1VULAorCQkJCQkidW5yZXNvbHZlZCBjb25mbGljdHMgZXhpc3QgaW4gdGhlIGluZGV4Iik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCisJCQkvKiBjbGVhbiBjb25mbGljdCBkYXRhIHdoZW4gZG9pbmcgYSB0cmVlIG9yIGNvbW1pdCBjaGVja291dCAqLworCQkJZ2l0X2luZGV4X25hbWVfY2xlYXIoZGF0YS0+aW5kZXgpOwogCQkJZ2l0X2luZGV4X3JldWNfY2xlYXIoZGF0YS0+aW5kZXgpOwogCQl9CiAJfQpAQCAtMTIzNSw3ICsxODgyLDcgQEAKIAogCQllcnJvciA9IGNoZWNrb3V0X2xvb2t1cF9oZWFkX3RyZWUoJmRhdGEtPm9wdHMuYmFzZWxpbmUsIHJlcG8pOwogCi0JCWlmIChlcnJvciA9PSBHSVRfRU9SUEhBTkVESEVBRCkgeworCQlpZiAoZXJyb3IgPT0gR0lUX0VVTkJPUk5CUkFOQ0gpIHsKIAkJCWVycm9yID0gMDsKIAkJCWdpdGVycl9jbGVhcigpOwogCQl9CkBAIC0xMjQ1LDYgKzE4OTIsNyBAQAogCX0KIAogCWlmICgoZXJyb3IgPSBnaXRfdmVjdG9yX2luaXQoJmRhdGEtPnJlbW92ZXMsIDAsIGdpdF9fc3RyY21wX2NiKSkgPCAwIHx8CisJCShlcnJvciA9IGdpdF92ZWN0b3JfaW5pdCgmZGF0YS0+Y29uZmxpY3RzLCAwLCBOVUxMKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9wb29sX2luaXQoJmRhdGEtPnBvb2wsIDEsIDApKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X2J1Zl9wdXRzKCZkYXRhLT5wYXRoLCBkYXRhLT5vcHRzLnRhcmdldF9kaXJlY3RvcnkpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X3BhdGhfdG9fZGlyKCZkYXRhLT5wYXRoKSkgPCAwKQpAQCAtMTI2MSw3ICsxOTA5LDcgQEAKIAogaW50IGdpdF9jaGVja291dF9pdGVyYXRvcigKIAlnaXRfaXRlcmF0b3IgKnRhcmdldCwKLQlnaXRfY2hlY2tvdXRfb3B0cyAqb3B0cykKKwljb25zdCBnaXRfY2hlY2tvdXRfb3B0cyAqb3B0cykKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWdpdF9pdGVyYXRvciAqYmFzZWxpbmUgPSBOVUxMLCAqd29ya2RpciA9IE5VTEw7CkBAIC0xMzE1LDE0ICsxOTYzLDE2IEBACiAJCWdvdG8gY2xlYW51cDsKIAogCS8qIExvb3AgdGhyb3VnaCBkaWZmIChhbmQgd29ya2luZyBkaXJlY3RvcnkgaXRlcmF0b3IpIGJ1aWxkaW5nIGEgbGlzdCBvZgotCSAqIGFjdGlvbnMgdG8gYmUgdGFrZW4sIHBsdXMgbG9vayBmb3IgY29uZmxpY3RzIGFuZCBzZW5kIG5vdGlmaWNhdGlvbnMuCisJICogYWN0aW9ucyB0byBiZSB0YWtlbiwgcGx1cyBsb29rIGZvciBjb25mbGljdHMgYW5kIHNlbmQgbm90aWZpY2F0aW9ucywKKwkgKiB0aGVuIGxvb3AgdGhyb3VnaCBjb25mbGljdHMuCiAJICovCiAJaWYgKChlcnJvciA9IGNoZWNrb3V0X2dldF9hY3Rpb25zKCZhY3Rpb25zLCAmY291bnRzLCAmZGF0YSwgd29ya2RpcikpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCiAJZGF0YS50b3RhbF9zdGVwcyA9IGNvdW50c1tDSEVDS09VVF9BQ1RJT05fX1JFTU9WRV0gKwogCQljb3VudHNbQ0hFQ0tPVVRfQUNUSU9OX19VUERBVEVfQkxPQl0gKwotCQljb3VudHNbQ0hFQ0tPVVRfQUNUSU9OX19VUERBVEVfU1VCTU9EVUxFXTsKKwkJY291bnRzW0NIRUNLT1VUX0FDVElPTl9fVVBEQVRFX1NVQk1PRFVMRV0gKworCQljb3VudHNbQ0hFQ0tPVVRfQUNUSU9OX19VUERBVEVfQ09ORkxJQ1RdOwogCiAJcmVwb3J0X3Byb2dyZXNzKCZkYXRhLCBOVUxMKTsgLyogZXN0YWJsaXNoIDAgYmFzZWxpbmUgKi8KIApAQCAtMTM0MSw2ICsxOTkxLDEwIEBACiAJCShlcnJvciA9IGNoZWNrb3V0X2NyZWF0ZV9zdWJtb2R1bGVzKGFjdGlvbnMsICZkYXRhKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKKwlpZiAoY291bnRzW0NIRUNLT1VUX0FDVElPTl9fVVBEQVRFX0NPTkZMSUNUXSA+IDAgJiYKKwkJKGVycm9yID0gY2hlY2tvdXRfY3JlYXRlX2NvbmZsaWN0cygmZGF0YSkpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCiAJYXNzZXJ0KGRhdGEuY29tcGxldGVkX3N0ZXBzID09IGRhdGEudG90YWxfc3RlcHMpOwogCiBjbGVhbnVwOgpAQCAtMTM1MSw3ICsyMDA1LDcgQEAKIAkJKGRhdGEuc3RyYXRlZ3kgJiBHSVRfQ0hFQ0tPVVRfRE9OVF9VUERBVEVfSU5ERVgpID09IDApCiAJCWVycm9yID0gZ2l0X2luZGV4X3dyaXRlKGRhdGEuaW5kZXgpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRhdGEuZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkYXRhLmRpZmYpOwogCWdpdF9pdGVyYXRvcl9mcmVlKHdvcmtkaXIpOwogCWdpdF9pdGVyYXRvcl9mcmVlKGJhc2VsaW5lKTsKIAlnaXRfX2ZyZWUoYWN0aW9ucyk7CkBAIC0xMzY0LDcgKzIwMTgsNyBAQAogaW50IGdpdF9jaGVja291dF9pbmRleCgKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAlnaXRfaW5kZXggKmluZGV4LAotCWdpdF9jaGVja291dF9vcHRzICpvcHRzKQorCWNvbnN0IGdpdF9jaGVja291dF9vcHRzICpvcHRzKQogewogCWludCBlcnJvcjsKIAlnaXRfaXRlcmF0b3IgKmluZGV4X2k7CkBAIC0xMzk5LDcgKzIwNTMsNyBAQAogaW50IGdpdF9jaGVja291dF90cmVlKAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAogCWNvbnN0IGdpdF9vYmplY3QgKnRyZWVpc2gsCi0JZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpCisJY29uc3QgZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpCiB7CiAJaW50IGVycm9yOwogCWdpdF90cmVlICp0cmVlID0gTlVMTDsKQEAgLTE0MTksMTAgKzIwNzMsMjEgQEAKIAlpZiAoIXJlcG8pCiAJCXJlcG8gPSBnaXRfb2JqZWN0X293bmVyKHRyZWVpc2gpOwogCi0JaWYgKGdpdF9vYmplY3RfcGVlbCgoZ2l0X29iamVjdCAqKikmdHJlZSwgdHJlZWlzaCwgR0lUX09CSl9UUkVFKSA8IDApIHsKLQkJZ2l0ZXJyX3NldCgKLQkJCUdJVEVSUl9DSEVDS09VVCwgIlByb3ZpZGVkIG9iamVjdCBjYW5ub3QgYmUgcGVlbGVkIHRvIGEgdHJlZSIpOwotCQlyZXR1cm4gLTE7CisJaWYgKHRyZWVpc2gpIHsKKwkJaWYgKGdpdF9vYmplY3RfcGVlbCgoZ2l0X29iamVjdCAqKikmdHJlZSwgdHJlZWlzaCwgR0lUX09CSl9UUkVFKSA8IDApIHsKKwkJCWdpdGVycl9zZXQoCisJCQkJR0lURVJSX0NIRUNLT1VULCAiUHJvdmlkZWQgb2JqZWN0IGNhbm5vdCBiZSBwZWVsZWQgdG8gYSB0cmVlIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJZWxzZSB7CisJCWlmICgoZXJyb3IgPSBjaGVja291dF9sb29rdXBfaGVhZF90cmVlKCZ0cmVlLCByZXBvKSkgPCAwKSB7CisJCQlpZiAoZXJyb3IgIT0gR0lUX0VVTkJPUk5CUkFOQ0gpCisJCQkJZ2l0ZXJyX3NldCgKKwkJCQkJR0lURVJSX0NIRUNLT1VULAorCQkJCQkiSEVBRCBjb3VsZCBub3QgYmUgcGVlbGVkIHRvIGEgdHJlZSBhbmQgbm8gdHJlZWlzaCBnaXZlbiIpOworCQkJcmV0dXJuIGVycm9yOworCQl9CiAJfQogCiAJaWYgKCEoZXJyb3IgPSBnaXRfaXRlcmF0b3JfZm9yX3RyZWUoJnRyZWVfaSwgdHJlZSwgMCwgTlVMTCwgTlVMTCkpKQpAQCAtMTQzNiwyMCArMjEwMSw4IEBACiAKIGludCBnaXRfY2hlY2tvdXRfaGVhZCgKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQlnaXRfY2hlY2tvdXRfb3B0cyAqb3B0cykKKwljb25zdCBnaXRfY2hlY2tvdXRfb3B0cyAqb3B0cykKIHsKLQlpbnQgZXJyb3I7Ci0JZ2l0X3RyZWUgKmhlYWQgPSBOVUxMOwotCWdpdF9pdGVyYXRvciAqaGVhZF9pID0gTlVMTDsKLQogCWFzc2VydChyZXBvKTsKLQotCWlmICghKGVycm9yID0gY2hlY2tvdXRfbG9va3VwX2hlYWRfdHJlZSgmaGVhZCwgcmVwbykpICYmCi0JCSEoZXJyb3IgPSBnaXRfaXRlcmF0b3JfZm9yX3RyZWUoJmhlYWRfaSwgaGVhZCwgMCwgTlVMTCwgTlVMTCkpKQotCQllcnJvciA9IGdpdF9jaGVja291dF9pdGVyYXRvcihoZWFkX2ksIG9wdHMpOwotCi0JZ2l0X2l0ZXJhdG9yX2ZyZWUoaGVhZF9pKTsKLQlnaXRfdHJlZV9mcmVlKGhlYWQpOwotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiBnaXRfY2hlY2tvdXRfdHJlZShyZXBvLCBOVUxMLCBvcHRzKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jaGVja291dC5oIGIvc3JjL2NoZWNrb3V0LmgKaW5kZXggYjFkYzgwYy4uNmQ3MTg2OCAxMDA2NDQKLS0tIGEvc3JjL2NoZWNrb3V0LmgKKysrIGIvc3JjL2NoZWNrb3V0LmgKQEAgLTE5LDYgKzE5LDYgQEAKICAqLwogZXh0ZXJuIGludCBnaXRfY2hlY2tvdXRfaXRlcmF0b3IoCiAJZ2l0X2l0ZXJhdG9yICp0YXJnZXQsCi0JZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpOworCWNvbnN0IGdpdF9jaGVja291dF9vcHRzICpvcHRzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvY2xvbmUuYyBiL3NyYy9jbG9uZS5jCmluZGV4IDViNmM2ZjcuLjIzYWFjZDQgMTAwNjQ0Ci0tLSBhL3NyYy9jbG9uZS5jCisrKyBiL3NyYy9jbG9uZS5jCkBAIC0xNzYsMjUgKzE3NiwyMCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBnZXRfaGVhZF9jYWxsYmFjayhnaXRfcmVtb3RlX2hlYWQgKmhlYWQsIHZvaWQgKnBheWxvYWQpCi17Ci0JZ2l0X3JlbW90ZV9oZWFkICoqZGVzdGluYXRpb24gPSAoZ2l0X3JlbW90ZV9oZWFkICoqKXBheWxvYWQ7Ci0KLQkvKiBTYXZlIHRoZSBmaXJzdCBlbnRyeSwgYW5kIHRlcm1pbmF0ZSB0aGUgZW51bWVyYXRpb24gKi8KLQkqZGVzdGluYXRpb24gPSBoZWFkOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgaW50IHVwZGF0ZV9oZWFkX3RvX3JlbW90ZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X3JlbW90ZSAqcmVtb3RlKQogewogCWludCByZXRjb2RlID0gLTE7CisJc2l6ZV90IHJlZnNfbGVuOwogCWdpdF9yZWZzcGVjIGR1bW15X3NwZWM7Ci0JZ2l0X3JlbW90ZV9oZWFkICpyZW1vdGVfaGVhZDsKKwljb25zdCBnaXRfcmVtb3RlX2hlYWQgKnJlbW90ZV9oZWFkLCAqKnJlZnM7CiAJc3RydWN0IGhlYWRfaW5mbyBoZWFkX2luZm87CiAJZ2l0X2J1ZiByZW1vdGVfbWFzdGVyX25hbWUgPSBHSVRfQlVGX0lOSVQ7CiAKKwlpZiAoZ2l0X3JlbW90ZV9scygmcmVmcywgJnJlZnNfbGVuLCByZW1vdGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCiAJLyogRGlkIHdlIGp1c3QgY2xvbmUgYW4gZW1wdHkgcmVwb3NpdG9yeT8gKi8KLQlpZiAocmVtb3RlLT5yZWZzLmxlbmd0aCA9PSAwKSB7CisJaWYgKHJlZnNfbGVuID09IDApIHsKIAkJcmV0dXJuIHNldHVwX3RyYWNraW5nX2NvbmZpZygKIAkJCXJlcG8sCiAJCQkibWFzdGVyIiwKQEAgLTIwMiwxMiArMTk3LDggQEAKIAkJCUdJVF9SRUZTX0hFQURTX01BU1RFUl9GSUxFKTsKIAl9CiAKLQkvKiBHZXQgdGhlIHJlbW90ZSdzIEhFQUQuIFRoaXMgaXMgYWx3YXlzIHRoZSBmaXJzdCByZWYgaW4gcmVtb3RlLT5yZWZzLiAqLwotCXJlbW90ZV9oZWFkID0gTlVMTDsKLQkKLQlpZiAoIXJlbW90ZS0+dHJhbnNwb3J0LT5scyhyZW1vdGUtPnRyYW5zcG9ydCwgZ2V0X2hlYWRfY2FsbGJhY2ssICZyZW1vdGVfaGVhZCkpCi0JCXJldHVybiAtMTsKLQorCS8qIEdldCB0aGUgcmVtb3RlJ3MgSEVBRC4gVGhpcyBpcyBhbHdheXMgdGhlIGZpcnN0IHJlZiBpbiB0aGUgbGlzdC4gKi8KKwlyZW1vdGVfaGVhZCA9IHJlZnNbMF07CiAJYXNzZXJ0KHJlbW90ZV9oZWFkKTsKIAogCWdpdF9vaWRfY3B5KCZoZWFkX2luZm8ucmVtb3RlX2hlYWRfb2lkLCAmcmVtb3RlX2hlYWQtPm9pZCk7CkBAIC0yMjAsNyArMjExLDcgQEAKIAkJbWVtc2V0KCZkdW1teV9zcGVjLCAwLCBzaXplb2YoZ2l0X3JlZnNwZWMpKTsKIAkJaGVhZF9pbmZvLnJlZnNwZWMgPSAmZHVtbXlfc3BlYzsKIAl9Ci0JCisKIAkvKiBEZXRlcm1pbmUgdGhlIHJlbW90ZSB0cmFja2luZyByZWZlcmVuY2UgbmFtZSBmcm9tIHRoZSBsb2NhbCBtYXN0ZXIgKi8KIAlpZiAoZ2l0X3JlZnNwZWNfdHJhbnNmb3JtX3IoCiAJCSZyZW1vdGVfbWFzdGVyX25hbWUsCkBAIC0yNzAsMjMgKzI2MSwyMyBAQAogCiBzdGF0aWMgaW50IHVwZGF0ZV9oZWFkX3RvX2JyYW5jaCgKIAkJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCi0JCWNvbnN0IGdpdF9jbG9uZV9vcHRpb25zICpvcHRpb25zKQorCQljb25zdCBjaGFyICpyZW1vdGVfbmFtZSwKKwkJY29uc3QgY2hhciAqYnJhbmNoKQogewogCWludCByZXRjb2RlOwogCWdpdF9idWYgcmVtb3RlX2JyYW5jaF9uYW1lID0gR0lUX0JVRl9JTklUOwogCWdpdF9yZWZlcmVuY2UqIHJlbW90ZV9yZWYgPSBOVUxMOwogCi0JYXNzZXJ0KG9wdGlvbnMtPmNoZWNrb3V0X2JyYW5jaCk7CisJYXNzZXJ0KHJlbW90ZV9uYW1lICYmIGJyYW5jaCk7CiAKIAlpZiAoKHJldGNvZGUgPSBnaXRfYnVmX3ByaW50ZigmcmVtb3RlX2JyYW5jaF9uYW1lLCBHSVRfUkVGU19SRU1PVEVTX0RJUiAiJXMvJXMiLAotCQlvcHRpb25zLT5yZW1vdGVfbmFtZSwgb3B0aW9ucy0+Y2hlY2tvdXRfYnJhbmNoKSkgPCAwICkKKwkJcmVtb3RlX25hbWUsIGJyYW5jaCkpIDwgMCApCiAJCWdvdG8gY2xlYW51cDsKIAogCWlmICgocmV0Y29kZSA9IGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZW1vdGVfcmVmLCByZXBvLCBnaXRfYnVmX2NzdHIoJnJlbW90ZV9icmFuY2hfbmFtZSkpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCXJldGNvZGUgPSB1cGRhdGVfaGVhZF90b19uZXdfYnJhbmNoKHJlcG8sIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlbW90ZV9yZWYpLAotCQlvcHRpb25zLT5jaGVja291dF9icmFuY2gpOworCXJldGNvZGUgPSB1cGRhdGVfaGVhZF90b19uZXdfYnJhbmNoKHJlcG8sIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlbW90ZV9yZWYpLCBicmFuY2gpOwogCiBjbGVhbnVwOgogCWdpdF9yZWZlcmVuY2VfZnJlZShyZW1vdGVfcmVmKTsKQEAgLTMwNiw0MSArMjk3LDE4IEBACiB7CiAJaW50IGVycm9yOwogCWdpdF9yZW1vdGUgKm9yaWdpbiA9IE5VTEw7CisJY29uc3QgY2hhciAqbmFtZTsKIAotCWlmICgoZXJyb3IgPSBnaXRfcmVtb3RlX2NyZWF0ZSgmb3JpZ2luLCByZXBvLCBvcHRpb25zLT5yZW1vdGVfbmFtZSwgdXJsKSkgPCAwKQorCW5hbWUgPSBvcHRpb25zLT5yZW1vdGVfbmFtZSA/IG9wdGlvbnMtPnJlbW90ZV9uYW1lIDogIm9yaWdpbiI7CisJaWYgKChlcnJvciA9IGdpdF9yZW1vdGVfY3JlYXRlKCZvcmlnaW4sIHJlcG8sIG5hbWUsIHVybCkpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAotCWdpdF9yZW1vdGVfc2V0X2NyZWRfYWNxdWlyZV9jYihvcmlnaW4sIG9wdGlvbnMtPmNyZWRfYWNxdWlyZV9jYiwKLQkJCW9wdGlvbnMtPmNyZWRfYWNxdWlyZV9wYXlsb2FkKTsKLQlnaXRfcmVtb3RlX3NldF9hdXRvdGFnKG9yaWdpbiwgb3B0aW9ucy0+cmVtb3RlX2F1dG90YWcpOwotCS8qCi0JICogRG9uJ3Qgd3JpdGUgRkVUQ0hfSEVBRCwgd2UnbGwgY2hlY2sgb3V0IHRoZSByZW1vdGUgdHJhY2tpbmcKLQkgKiBicmFuY2ggb3Vyc2VsdmVzIGJhc2VkIG9uIHRoZSBzZXJ2ZXIncyBkZWZhdWx0LgotCSAqLwotCWdpdF9yZW1vdGVfc2V0X3VwZGF0ZV9mZXRjaGhlYWQob3JpZ2luLCAwKTsKKwlpZiAob3B0aW9ucy0+aWdub3JlX2NlcnRfZXJyb3JzKQorCQlnaXRfcmVtb3RlX2NoZWNrX2NlcnQob3JpZ2luLCAwKTsKIAotCWlmIChvcHRpb25zLT5yZW1vdGVfY2FsbGJhY2tzICYmCi0JICAgIChlcnJvciA9IGdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhvcmlnaW4sIG9wdGlvbnMtPnJlbW90ZV9jYWxsYmFja3MpKSA8IDApCisJaWYgKChlcnJvciA9IGdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhvcmlnaW4sICZvcHRpb25zLT5yZW1vdGVfY2FsbGJhY2tzKSkgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwogCi0JaWYgKG9wdGlvbnMtPmZldGNoX3NwZWMpIHsKLQkJZ2l0X3JlbW90ZV9jbGVhcl9yZWZzcGVjcyhvcmlnaW4pOwotCQlpZiAoKGVycm9yID0gZ2l0X3JlbW90ZV9hZGRfZmV0Y2gob3JpZ2luLCBvcHRpb25zLT5mZXRjaF9zcGVjKSkgPCAwKQotCQkJZ290byBvbl9lcnJvcjsKLQl9Ci0KLQlpZiAob3B0aW9ucy0+cHVzaF9zcGVjICYmCi0JICAgIChlcnJvciA9IGdpdF9yZW1vdGVfYWRkX3B1c2gob3JpZ2luLCBvcHRpb25zLT5wdXNoX3NwZWMpKSA8IDApCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQlpZiAob3B0aW9ucy0+cHVzaHVybCAmJgotCSAgICAoZXJyb3IgPSBnaXRfcmVtb3RlX3NldF9wdXNodXJsKG9yaWdpbiwgb3B0aW9ucy0+cHVzaHVybCkpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKLQotCWlmIChvcHRpb25zLT50cmFuc3BvcnRfZmxhZ3MgPT0gR0lUX1RSQU5TUE9SVEZMQUdTX05PX0NIRUNLX0NFUlQpIHsKLSAgICAgICAgZ2l0X3JlbW90ZV9jaGVja19jZXJ0KG9yaWdpbiwgMCk7Ci0gICAgfQotCiAJaWYgKChlcnJvciA9IGdpdF9yZW1vdGVfc2F2ZShvcmlnaW4pKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKQEAgLTM1Miw1OSArMzIwLDEwIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KLXN0YXRpYyBpbnQgc2V0dXBfcmVtb3Rlc19hbmRfZmV0Y2goCi0JCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAotCQljb25zdCBjaGFyICp1cmwsCi0JCWNvbnN0IGdpdF9jbG9uZV9vcHRpb25zICpvcHRpb25zKQotewotCWludCByZXRjb2RlID0gR0lUX0VSUk9SOwotCWdpdF9yZW1vdGUgKm9yaWdpbiA9IE5VTEw7Ci0KLQkvKiBDb25zdHJ1Y3QgYW4gb3JpZ2luIHJlbW90ZSAqLwotCWlmICgocmV0Y29kZSA9IGNyZWF0ZV9hbmRfY29uZmlndXJlX29yaWdpbigmb3JpZ2luLCByZXBvLCB1cmwsIG9wdGlvbnMpKSA8IDApCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQlnaXRfcmVtb3RlX3NldF91cGRhdGVfZmV0Y2hoZWFkKG9yaWdpbiwgMCk7Ci0KLQkvKiBJZiB0aGUgZG93bmxvYWRfdGFncyB2YWx1ZSBoYXMgbm90IGJlZW4gc3BlY2lmaWVkLCB0aGVuIG1ha2Ugc3VyZSB0bwotCQkqIGRvd25sb2FkIHRhZ3MgYXMgd2VsbC4gSXQgaXMgc2V0IGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRvIGRvd25sb2FkIHRhZ3MKLQkJKiBvbiB0aGUgaW5pdGlhbCBjbG9uZSwgYnV0IGRvIG5vdCB3YW50IHRvIHBlcnNpc3QgdGhlIHZhbHVlIGluIHRoZQotCQkqIGNvbmZpZ3VyYXRpb24gZmlsZS4KLQkJKi8KLQlpZiAob3JpZ2luLT5kb3dubG9hZF90YWdzID09IEdJVF9SRU1PVEVfRE9XTkxPQURfVEFHU19BVVRPICYmCi0JCSgocmV0Y29kZSA9IGdpdF9yZW1vdGVfYWRkX2ZldGNoKG9yaWdpbiwgInJlZnMvdGFncy8qOnJlZnMvdGFncy8qIikpIDwgMCkpCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQkvKiBDb25uZWN0IGFuZCBkb3dubG9hZCBldmVyeXRoaW5nICovCi0JaWYgKChyZXRjb2RlID0gZ2l0X3JlbW90ZV9jb25uZWN0KG9yaWdpbiwgR0lUX0RJUkVDVElPTl9GRVRDSCkpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKLQotCWlmICgocmV0Y29kZSA9IGdpdF9yZW1vdGVfZG93bmxvYWQob3JpZ2luLCBvcHRpb25zLT5mZXRjaF9wcm9ncmVzc19jYiwKLQkJb3B0aW9ucy0+ZmV0Y2hfcHJvZ3Jlc3NfcGF5bG9hZCkpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKLQotCS8qIENyZWF0ZSAib3JpZ2luL2ZvbyIgYnJhbmNoZXMgZm9yIGFsbCByZW1vdGUgYnJhbmNoZXMgKi8KLQlpZiAoKHJldGNvZGUgPSBnaXRfcmVtb3RlX3VwZGF0ZV90aXBzKG9yaWdpbikpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKLQotCS8qIFBvaW50IEhFQUQgdG8gdGhlIHJlcXVlc3RlZCBicmFuY2ggKi8KLQlpZiAob3B0aW9ucy0+Y2hlY2tvdXRfYnJhbmNoKQotCQlyZXRjb2RlID0gdXBkYXRlX2hlYWRfdG9fYnJhbmNoKHJlcG8sIG9wdGlvbnMpOwotCS8qIFBvaW50IEhFQUQgdG8gdGhlIHNhbWUgcmVmIGFzIHRoZSByZW1vdGUncyBoZWFkICovCi0JZWxzZQotCQlyZXRjb2RlID0gdXBkYXRlX2hlYWRfdG9fcmVtb3RlKHJlcG8sIG9yaWdpbik7Ci0KLW9uX2Vycm9yOgotCWdpdF9yZW1vdGVfZnJlZShvcmlnaW4pOwotCXJldHVybiByZXRjb2RlOwotfQotCi0KIHN0YXRpYyBib29sIHNob3VsZF9jaGVja291dCgKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAlib29sIGlzX2JhcmUsCi0JZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpCisJY29uc3QgZ2l0X2NoZWNrb3V0X29wdHMgKm9wdHMpCiB7CiAJaWYgKGlzX2JhcmUpCiAJCXJldHVybiBmYWxzZTsKQEAgLTQxNSw2NCArMzM0LDEwMiBAQAogCWlmIChvcHRzLT5jaGVja291dF9zdHJhdGVneSA9PSBHSVRfQ0hFQ0tPVVRfTk9ORSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuICFnaXRfcmVwb3NpdG9yeV9oZWFkX29ycGhhbihyZXBvKTsKKwlyZXR1cm4gIWdpdF9yZXBvc2l0b3J5X2hlYWRfdW5ib3JuKHJlcG8pOwogfQogCi1zdGF0aWMgdm9pZCBub3JtYWxpemVfb3B0aW9ucyhnaXRfY2xvbmVfb3B0aW9ucyAqZHN0LCBjb25zdCBnaXRfY2xvbmVfb3B0aW9ucyAqc3JjKQoraW50IGdpdF9jbG9uZV9pbnRvKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfcmVtb3RlICpyZW1vdGUsIGNvbnN0IGdpdF9jaGVja291dF9vcHRzICpjb19vcHRzLCBjb25zdCBjaGFyICpicmFuY2gpCiB7Ci0JZ2l0X2Nsb25lX29wdGlvbnMgZGVmYXVsdF9vcHRpb25zID0gR0lUX0NMT05FX09QVElPTlNfSU5JVDsKLQlpZiAoIXNyYykgc3JjID0gJmRlZmF1bHRfb3B0aW9uczsKKwlpbnQgZXJyb3IgPSAwLCBvbGRfZmV0Y2hoZWFkOworCWdpdF9zdHJhcnJheSByZWZzcGVjczsKIAotCSpkc3QgPSAqc3JjOworCWFzc2VydChyZXBvICYmIHJlbW90ZSk7CiAKLQkvKiBQcm92aWRlIGRlZmF1bHRzIGZvciBudWxsIHBvaW50ZXJzICovCi0JaWYgKCFkc3QtPnJlbW90ZV9uYW1lKSBkc3QtPnJlbW90ZV9uYW1lID0gIm9yaWdpbiI7CisJaWYgKCFnaXRfcmVwb3NpdG9yeV9pc19lbXB0eShyZXBvKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAidGhlIHJlcG9zaXRvcnkgaXMgbm90IGVtcHR5Iik7CisJCXJldHVybiAtMTsKKwl9CisKKworCWlmICgoZXJyb3IgPSBnaXRfcmVtb3RlX2dldF9mZXRjaF9yZWZzcGVjcygmcmVmc3BlY3MsIHJlbW90ZSkpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChlcnJvciA9IGdpdF9yZW1vdGVfYWRkX2ZldGNoKHJlbW90ZSwgInJlZnMvdGFncy8qOnJlZnMvdGFncy8qIikpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJb2xkX2ZldGNoaGVhZCA9IGdpdF9yZW1vdGVfdXBkYXRlX2ZldGNoaGVhZChyZW1vdGUpOworCWdpdF9yZW1vdGVfc2V0X3VwZGF0ZV9mZXRjaGhlYWQocmVtb3RlLCAwKTsKKworCWlmICgoZXJyb3IgPSBnaXRfcmVtb3RlX2ZldGNoKHJlbW90ZSkpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKGJyYW5jaCkKKwkJZXJyb3IgPSB1cGRhdGVfaGVhZF90b19icmFuY2gocmVwbywgZ2l0X3JlbW90ZV9uYW1lKHJlbW90ZSksIGJyYW5jaCk7CisJLyogUG9pbnQgSEVBRCB0byB0aGUgc2FtZSByZWYgYXMgdGhlIHJlbW90ZSdzIGhlYWQgKi8KKwllbHNlCisJCWVycm9yID0gdXBkYXRlX2hlYWRfdG9fcmVtb3RlKHJlcG8sIHJlbW90ZSk7CisKKwlpZiAoIWVycm9yICYmIHNob3VsZF9jaGVja291dChyZXBvLCBnaXRfcmVwb3NpdG9yeV9pc19iYXJlKHJlcG8pLCBjb19vcHRzKSkKKwkJZXJyb3IgPSBnaXRfY2hlY2tvdXRfaGVhZChyZXBvLCBjb19vcHRzKTsKKworY2xlYW51cDoKKwlnaXRfcmVtb3RlX3NldF91cGRhdGVfZmV0Y2hoZWFkKHJlbW90ZSwgb2xkX2ZldGNoaGVhZCk7CisJLyogR28gYmFjayB0byB0aGUgb3JpZ2luYWwgcmVmc3BlY3MgKi8KKwlpZiAoZ2l0X3JlbW90ZV9zZXRfZmV0Y2hfcmVmc3BlY3MocmVtb3RlLCAmcmVmc3BlY3MpIDwgMCkgeworCQlnaXRfc3RyYXJyYXlfZnJlZSgmcmVmc3BlY3MpOworCQlyZXR1cm4gLTE7CisJfQorCisJZ2l0X3N0cmFycmF5X2ZyZWUoJnJlZnNwZWNzKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogaW50IGdpdF9jbG9uZSgKIAlnaXRfcmVwb3NpdG9yeSAqKm91dCwKIAljb25zdCBjaGFyICp1cmwsCiAJY29uc3QgY2hhciAqbG9jYWxfcGF0aCwKLQljb25zdCBnaXRfY2xvbmVfb3B0aW9ucyAqb3B0aW9ucykKKwljb25zdCBnaXRfY2xvbmVfb3B0aW9ucyAqX29wdGlvbnMpCiB7Ci0JaW50IHJldGNvZGUgPSBHSVRfRVJST1I7CisJaW50IGVycm9yID0gMDsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IE5VTEw7Ci0JZ2l0X2Nsb25lX29wdGlvbnMgbm9ybU9wdGlvbnM7Ci0JaW50IHJlbW92ZV9kaXJlY3Rvcnlfb25fZmFpbHVyZSA9IDA7CisJZ2l0X3JlbW90ZSAqb3JpZ2luOworCWdpdF9jbG9uZV9vcHRpb25zIG9wdGlvbnMgPSBHSVRfQ0xPTkVfT1BUSU9OU19JTklUOworCXVpbnQzMl90IHJtZGlyX2ZsYWdzID0gR0lUX1JNRElSX1JFTU9WRV9GSUxFUzsKIAogCWFzc2VydChvdXQgJiYgdXJsICYmIGxvY2FsX3BhdGgpOwogCi0Jbm9ybWFsaXplX29wdGlvbnMoJm5vcm1PcHRpb25zLCBvcHRpb25zKTsKLQlHSVRFUlJfQ0hFQ0tfVkVSU0lPTigmbm9ybU9wdGlvbnMsIEdJVF9DTE9ORV9PUFRJT05TX1ZFUlNJT04sICJnaXRfY2xvbmVfb3B0aW9ucyIpOworCWlmIChfb3B0aW9ucykKKwkJbWVtY3B5KCZvcHRpb25zLCBfb3B0aW9ucywgc2l6ZW9mKGdpdF9jbG9uZV9vcHRpb25zKSk7CisKKwlHSVRFUlJfQ0hFQ0tfVkVSU0lPTigmb3B0aW9ucywgR0lUX0NMT05FX09QVElPTlNfVkVSU0lPTiwgImdpdF9jbG9uZV9vcHRpb25zIik7CiAKIAkvKiBPbmx5IGNsb25lIHRvIGEgbmV3IGRpcmVjdG9yeSBvciBhbiBlbXB0eSBkaXJlY3RvcnkgKi8KIAlpZiAoZ2l0X3BhdGhfZXhpc3RzKGxvY2FsX3BhdGgpICYmICFnaXRfcGF0aF9pc19lbXB0eV9kaXIobG9jYWxfcGF0aCkpIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfSU5WQUxJRCwKIAkJCSInJXMnIGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeSIsIGxvY2FsX3BhdGgpOwotCQlyZXR1cm4gR0lUX0VSUk9SOworCQlyZXR1cm4gR0lUX0VFWElTVFM7CiAJfQogCi0JLyogT25seSByZW1vdmUgdGhlIGRpcmVjdG9yeSBvbiBmYWlsdXJlIGlmIHdlIGNyZWF0ZSBpdCAqLwotCXJlbW92ZV9kaXJlY3Rvcnlfb25fZmFpbHVyZSA9ICFnaXRfcGF0aF9leGlzdHMobG9jYWxfcGF0aCk7CisJLyogT25seSByZW1vdmUgdGhlIHJvb3QgZGlyZWN0b3J5IG9uIGZhaWx1cmUgaWYgd2UgY3JlYXRlIGl0ICovCisJaWYgKGdpdF9wYXRoX2V4aXN0cyhsb2NhbF9wYXRoKSkKKwkJcm1kaXJfZmxhZ3MgfD0gR0lUX1JNRElSX1NLSVBfUk9PVDsKIAotCWlmICghKHJldGNvZGUgPSBnaXRfcmVwb3NpdG9yeV9pbml0KCZyZXBvLCBsb2NhbF9wYXRoLCBub3JtT3B0aW9ucy5iYXJlKSkpIHsKLQkJaWYgKChyZXRjb2RlID0gc2V0dXBfcmVtb3Rlc19hbmRfZmV0Y2gocmVwbywgdXJsLCAmbm9ybU9wdGlvbnMpKSA8IDApIHsKLQkJCS8qIEZhaWxlZCB0byBmZXRjaDsgY2xlYW4gdXAgKi8KLQkJCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luaXQoJnJlcG8sIGxvY2FsX3BhdGgsIG9wdGlvbnMuYmFyZSkpIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCi0JCQlpZiAocmVtb3ZlX2RpcmVjdG9yeV9vbl9mYWlsdXJlKQotCQkJCWdpdF9mdXRpbHNfcm1kaXJfcihsb2NhbF9wYXRoLCBOVUxMLCBHSVRfUk1ESVJfUkVNT1ZFX0ZJTEVTKTsKLQkJCWVsc2UKLQkJCQlnaXRfZnV0aWxzX2NsZWFudXBkaXJfcihsb2NhbF9wYXRoKTsKKwlpZiAoIShlcnJvciA9IGNyZWF0ZV9hbmRfY29uZmlndXJlX29yaWdpbigmb3JpZ2luLCByZXBvLCB1cmwsICZvcHRpb25zKSkpIHsKKwkJZXJyb3IgPSBnaXRfY2xvbmVfaW50bygKKwkJCXJlcG8sIG9yaWdpbiwgJm9wdGlvbnMuY2hlY2tvdXRfb3B0cywgb3B0aW9ucy5jaGVja291dF9icmFuY2gpOwogCi0JCX0gZWxzZSB7Ci0JCQkqb3V0ID0gcmVwbzsKLQkJCXJldGNvZGUgPSAwOwotCQl9CisJCWdpdF9yZW1vdGVfZnJlZShvcmlnaW4pOwogCX0KIAotCWlmICghcmV0Y29kZSAmJiBzaG91bGRfY2hlY2tvdXQocmVwbywgbm9ybU9wdGlvbnMuYmFyZSwgJm5vcm1PcHRpb25zLmNoZWNrb3V0X29wdHMpKQotCQlyZXRjb2RlID0gZ2l0X2NoZWNrb3V0X2hlYWQoKm91dCwgJm5vcm1PcHRpb25zLmNoZWNrb3V0X29wdHMpOworCWlmIChlcnJvciA8IDApIHsKKwkJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKKwkJcmVwbyA9IE5VTEw7CisJCSh2b2lkKWdpdF9mdXRpbHNfcm1kaXJfcihsb2NhbF9wYXRoLCBOVUxMLCBybWRpcl9mbGFncyk7CisJfQogCi0JcmV0dXJuIHJldGNvZGU7CisJKm91dCA9IHJlcG87CisJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1pdC5jIGIvc3JjL2NvbW1pdC5jCmluZGV4IDFhYjliMzQuLjkxYjYwYmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb21taXQuYworKysgYi9zcmMvY29tbWl0LmMKQEAgLTE5LDMwICsxOSwxOSBAQAogCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLXN0YXRpYyB2b2lkIGNsZWFyX3BhcmVudHMoZ2l0X2NvbW1pdCAqY29tbWl0KQotewotCXNpemVfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNvbW1pdC0+cGFyZW50X2lkcy5sZW5ndGg7ICsraSkgewotCQlnaXRfb2lkICpwYXJlbnQgPSBnaXRfdmVjdG9yX2dldCgmY29tbWl0LT5wYXJlbnRfaWRzLCBpKTsKLQkJZ2l0X19mcmVlKHBhcmVudCk7Ci0JfQotCi0JZ2l0X3ZlY3Rvcl9jbGVhcigmY29tbWl0LT5wYXJlbnRfaWRzKTsKLX0KLQogdm9pZCBnaXRfY29tbWl0X19mcmVlKHZvaWQgKl9jb21taXQpCiB7CiAJZ2l0X2NvbW1pdCAqY29tbWl0ID0gX2NvbW1pdDsKIAotCWNsZWFyX3BhcmVudHMoY29tbWl0KTsKLQlnaXRfdmVjdG9yX2ZyZWUoJmNvbW1pdC0+cGFyZW50X2lkcyk7CisJZ2l0X2FycmF5X2NsZWFyKGNvbW1pdC0+cGFyZW50X2lkcyk7CiAKIAlnaXRfc2lnbmF0dXJlX2ZyZWUoY29tbWl0LT5hdXRob3IpOwogCWdpdF9zaWduYXR1cmVfZnJlZShjb21taXQtPmNvbW1pdHRlcik7CiAKLQlnaXRfX2ZyZWUoY29tbWl0LT5tZXNzYWdlKTsKKwlnaXRfX2ZyZWUoY29tbWl0LT5yYXdfaGVhZGVyKTsKKwlnaXRfX2ZyZWUoY29tbWl0LT5yYXdfbWVzc2FnZSk7CiAJZ2l0X19mcmVlKGNvbW1pdC0+bWVzc2FnZV9lbmNvZGluZyk7CisKIAlnaXRfX2ZyZWUoY29tbWl0KTsKIH0KIApAQCAtMTcxLDEyICsxNjAsMzUgQEAKIGludCBnaXRfY29tbWl0X19wYXJzZSh2b2lkICpfY29tbWl0LCBnaXRfb2RiX29iamVjdCAqb2RiX29iaikKIHsKIAlnaXRfY29tbWl0ICpjb21taXQgPSBfY29tbWl0OwotCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IGdpdF9vZGJfb2JqZWN0X2RhdGEob2RiX29iaik7Ci0JY29uc3QgY2hhciAqYnVmZmVyX2VuZCA9IGJ1ZmZlciArIGdpdF9vZGJfb2JqZWN0X3NpemUob2RiX29iaik7CisJY29uc3QgY2hhciAqYnVmZmVyX3N0YXJ0ID0gZ2l0X29kYl9vYmplY3RfZGF0YShvZGJfb2JqKSwgKmJ1ZmZlcjsKKwljb25zdCBjaGFyICpidWZmZXJfZW5kID0gYnVmZmVyX3N0YXJ0ICsgZ2l0X29kYl9vYmplY3Rfc2l6ZShvZGJfb2JqKTsKIAlnaXRfb2lkIHBhcmVudF9pZDsKKwl1aW50MzJfdCBwYXJlbnRfY291bnQgPSAwOworCXNpemVfdCBoZWFkZXJfbGVuOwogCi0JaWYgKGdpdF92ZWN0b3JfaW5pdCgmY29tbWl0LT5wYXJlbnRfaWRzLCA0LCBOVUxMKSA8IDApCi0JCXJldHVybiAtMTsKKwkvKiBmaW5kIGVuZC1vZi1oZWFkZXIgKGNvdW50aW5nIHBhcmVudHMgYXMgd2UgZ28pICovCisJZm9yIChidWZmZXIgPSBidWZmZXJfc3RhcnQ7IGJ1ZmZlciA8IGJ1ZmZlcl9lbmQ7ICsrYnVmZmVyKSB7CisJCWlmICghc3RybmNtcCgiXG5cbiIsIGJ1ZmZlciwgMikpIHsKKwkJCSsrYnVmZmVyOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFzdHJuY21wKCJcbnBhcmVudCAiLCBidWZmZXIsIHN0cmxlbigiXG5wYXJlbnQgIikpKQorCQkJKytwYXJlbnRfY291bnQ7CisJfQorCisJaGVhZGVyX2xlbiA9IGJ1ZmZlciAtIGJ1ZmZlcl9zdGFydDsKKwljb21taXQtPnJhd19oZWFkZXIgPSBnaXRfX3N0cm5kdXAoYnVmZmVyX3N0YXJ0LCBoZWFkZXJfbGVuKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MoY29tbWl0LT5yYXdfaGVhZGVyKTsKKworCS8qIHBvaW50ICJidWZmZXIiIHRvIGhlYWRlciBkYXRhICovCisJYnVmZmVyID0gY29tbWl0LT5yYXdfaGVhZGVyOworCWJ1ZmZlcl9lbmQgPSBjb21taXQtPnJhd19oZWFkZXIgKyBoZWFkZXJfbGVuOworCisJaWYgKHBhcmVudF9jb3VudCA8IDEpCisJCXBhcmVudF9jb3VudCA9IDE7CisKKwlnaXRfYXJyYXlfaW5pdF90b19zaXplKGNvbW1pdC0+cGFyZW50X2lkcywgcGFyZW50X2NvdW50KTsKKwlHSVRFUlJfQ0hFQ0tfQVJSQVkoY29tbWl0LT5wYXJlbnRfaWRzKTsKIAogCWlmIChnaXRfb2lkX19wYXJzZSgmY29tbWl0LT50cmVlX2lkLCAmYnVmZmVyLCBidWZmZXJfZW5kLCAidHJlZSAiKSA8IDApCiAJCWdvdG8gYmFkX2J1ZmZlcjsKQEAgLTE4NiwxMyArMTk4LDEwIEBACiAJICovCiAKIAl3aGlsZSAoZ2l0X29pZF9fcGFyc2UoJnBhcmVudF9pZCwgJmJ1ZmZlciwgYnVmZmVyX2VuZCwgInBhcmVudCAiKSA9PSAwKSB7Ci0JCWdpdF9vaWQgKm5ld19pZCA9IGdpdF9fbWFsbG9jKHNpemVvZihnaXRfb2lkKSk7CisJCWdpdF9vaWQgKm5ld19pZCA9IGdpdF9hcnJheV9hbGxvYyhjb21taXQtPnBhcmVudF9pZHMpOwogCQlHSVRFUlJfQ0hFQ0tfQUxMT0MobmV3X2lkKTsKIAogCQlnaXRfb2lkX2NweShuZXdfaWQsICZwYXJlbnRfaWQpOwotCi0JCWlmIChnaXRfdmVjdG9yX2luc2VydCgmY29tbWl0LT5wYXJlbnRfaWRzLCBuZXdfaWQpIDwgMCkKLQkJCXJldHVybiAtMTsKIAl9CiAKIAljb21taXQtPmF1dGhvciA9IGdpdF9fbWFsbG9jKHNpemVvZihnaXRfc2lnbmF0dXJlKSk7CkBAIC0yMDgsOCArMjE3LDggQEAKIAlpZiAoZ2l0X3NpZ25hdHVyZV9fcGFyc2UoY29tbWl0LT5jb21taXR0ZXIsICZidWZmZXIsIGJ1ZmZlcl9lbmQsICJjb21taXR0ZXIgIiwgJ1xuJykgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQkvKiBQYXJzZSBhZGQnbCBoZWFkZXIgZW50cmllcyB1bnRpbCBibGFuayBsaW5lIGZvdW5kICovCi0Jd2hpbGUgKGJ1ZmZlciA8IGJ1ZmZlcl9lbmQgJiYgKmJ1ZmZlciAhPSAnXG4nKSB7CisJLyogUGFyc2UgYWRkJ2wgaGVhZGVyIGVudHJpZXMgKi8KKwl3aGlsZSAoYnVmZmVyIDwgYnVmZmVyX2VuZCkgewogCQljb25zdCBjaGFyICplb2xuID0gYnVmZmVyOwogCQl3aGlsZSAoZW9sbiA8IGJ1ZmZlcl9lbmQgJiYgKmVvbG4gIT0gJ1xuJykKIAkJCSsrZW9sbjsKQEAgLTIyMywxOCArMjMyLDIxIEBACiAKIAkJaWYgKGVvbG4gPCBidWZmZXJfZW5kICYmICplb2xuID09ICdcbicpCiAJCQkrK2VvbG47Ci0KIAkJYnVmZmVyID0gZW9sbjsKIAl9CiAKLQkvKiBidWZmZXIgaXMgbm93IGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlciwgZG91YmxlLWNoZWNrIGFuZCBtb3ZlIGZvcndhcmQgaW50byB0aGUgbWVzc2FnZSAqLwotCWlmIChidWZmZXIgPCBidWZmZXJfZW5kICYmICpidWZmZXIgPT0gJ1xuJykKLQkJYnVmZmVyKys7CisJLyogcG9pbnQgImJ1ZmZlciIgdG8gZGF0YSBhZnRlciBoZWFkZXIgKi8KKwlidWZmZXIgPSBnaXRfb2RiX29iamVjdF9kYXRhKG9kYl9vYmopOworCWJ1ZmZlcl9lbmQgPSBidWZmZXIgKyBnaXRfb2RiX29iamVjdF9zaXplKG9kYl9vYmopOwogCi0JLyogcGFyc2UgY29tbWl0IG1lc3NhZ2UgKi8KKwlidWZmZXIgKz0gaGVhZGVyX2xlbjsKKwlpZiAoKmJ1ZmZlciA9PSAnXG4nKQorCQkrK2J1ZmZlcjsKKworCS8qIGV4dHJhY3QgY29tbWl0IG1lc3NhZ2UgKi8KIAlpZiAoYnVmZmVyIDw9IGJ1ZmZlcl9lbmQpIHsKLQkJY29tbWl0LT5tZXNzYWdlID0gZ2l0X19zdHJuZHVwKGJ1ZmZlciwgYnVmZmVyX2VuZCAtIGJ1ZmZlcik7Ci0JCUdJVEVSUl9DSEVDS19BTExPQyhjb21taXQtPm1lc3NhZ2UpOworCQljb21taXQtPnJhd19tZXNzYWdlID0gZ2l0X19zdHJuZHVwKGJ1ZmZlciwgYnVmZmVyX2VuZCAtIGJ1ZmZlcik7CisJCUdJVEVSUl9DSEVDS19BTExPQyhjb21taXQtPnJhd19tZXNzYWdlKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI1MywxMyArMjY1LDI3IEBACiAKIEdJVF9DT01NSVRfR0VUVEVSKGNvbnN0IGdpdF9zaWduYXR1cmUgKiwgYXV0aG9yLCBjb21taXQtPmF1dGhvcikKIEdJVF9DT01NSVRfR0VUVEVSKGNvbnN0IGdpdF9zaWduYXR1cmUgKiwgY29tbWl0dGVyLCBjb21taXQtPmNvbW1pdHRlcikKLUdJVF9DT01NSVRfR0VUVEVSKGNvbnN0IGNoYXIgKiwgbWVzc2FnZSwgY29tbWl0LT5tZXNzYWdlKQorR0lUX0NPTU1JVF9HRVRURVIoY29uc3QgY2hhciAqLCBtZXNzYWdlX3JhdywgY29tbWl0LT5yYXdfbWVzc2FnZSkKIEdJVF9DT01NSVRfR0VUVEVSKGNvbnN0IGNoYXIgKiwgbWVzc2FnZV9lbmNvZGluZywgY29tbWl0LT5tZXNzYWdlX2VuY29kaW5nKQorR0lUX0NPTU1JVF9HRVRURVIoY29uc3QgY2hhciAqLCByYXdfaGVhZGVyLCBjb21taXQtPnJhd19oZWFkZXIpCiBHSVRfQ09NTUlUX0dFVFRFUihnaXRfdGltZV90LCB0aW1lLCBjb21taXQtPmNvbW1pdHRlci0+d2hlbi50aW1lKQogR0lUX0NPTU1JVF9HRVRURVIoaW50LCB0aW1lX29mZnNldCwgY29tbWl0LT5jb21taXR0ZXItPndoZW4ub2Zmc2V0KQotR0lUX0NPTU1JVF9HRVRURVIodW5zaWduZWQgaW50LCBwYXJlbnRjb3VudCwgKHVuc2lnbmVkIGludCljb21taXQtPnBhcmVudF9pZHMubGVuZ3RoKQorR0lUX0NPTU1JVF9HRVRURVIodW5zaWduZWQgaW50LCBwYXJlbnRjb3VudCwgKHVuc2lnbmVkIGludClnaXRfYXJyYXlfc2l6ZShjb21taXQtPnBhcmVudF9pZHMpKQogR0lUX0NPTU1JVF9HRVRURVIoY29uc3QgZ2l0X29pZCAqLCB0cmVlX2lkLCAmY29tbWl0LT50cmVlX2lkKTsKIAorY29uc3QgY2hhciAqZ2l0X2NvbW1pdF9tZXNzYWdlKGNvbnN0IGdpdF9jb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICptZXNzYWdlID0gY29tbWl0LT5yYXdfbWVzc2FnZTsKKworCWFzc2VydChjb21taXQpOworCisJLyogdHJpbSBsZWFkaW5nIG5ld2xpbmVzIGZyb20gcmF3IG1lc3NhZ2UgKi8KKwl3aGlsZSAoKm1lc3NhZ2UgJiYgKm1lc3NhZ2UgPT0gJ1xuJykKKwkJKyttZXNzYWdlOworCisJcmV0dXJuIG1lc3NhZ2U7Cit9CisKIGludCBnaXRfY29tbWl0X3RyZWUoZ2l0X3RyZWUgKip0cmVlX291dCwgY29uc3QgZ2l0X2NvbW1pdCAqY29tbWl0KQogewogCWFzc2VydChjb21taXQpOwpAQCAtMjcxLDcgKzI5Nyw3IEBACiB7CiAJYXNzZXJ0KGNvbW1pdCk7CiAKLQlyZXR1cm4gZ2l0X3ZlY3Rvcl9nZXQoJmNvbW1pdC0+cGFyZW50X2lkcywgbik7CisJcmV0dXJuIGdpdF9hcnJheV9nZXQoY29tbWl0LT5wYXJlbnRfaWRzLCBuKTsKIH0KIAogaW50IGdpdF9jb21taXRfcGFyZW50KApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1pdC5oIGIvc3JjL2NvbW1pdC5oCmluZGV4IGQwOTgxYjEuLmQ0NTJlMjkgMTAwNjQ0Ci0tLSBhL3NyYy9jb21taXQuaAorKysgYi9zcmMvY29tbWl0LmgKQEAgLTEwLDIxICsxMCwyMiBAQAogI2luY2x1ZGUgImdpdDIvY29tbWl0LmgiCiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJ2ZWN0b3IuaCIKKyNpbmNsdWRlICJhcnJheS5oIgogCiAjaW5jbHVkZSA8dGltZS5oPgogCiBzdHJ1Y3QgZ2l0X2NvbW1pdCB7CiAJZ2l0X29iamVjdCBvYmplY3Q7CiAKLQlnaXRfdmVjdG9yIHBhcmVudF9pZHM7CisJZ2l0X2FycmF5X3QoZ2l0X29pZCkgcGFyZW50X2lkczsKIAlnaXRfb2lkIHRyZWVfaWQ7CiAKIAlnaXRfc2lnbmF0dXJlICphdXRob3I7CiAJZ2l0X3NpZ25hdHVyZSAqY29tbWl0dGVyOwogCiAJY2hhciAqbWVzc2FnZV9lbmNvZGluZzsKLQljaGFyICptZXNzYWdlOworCWNoYXIgKnJhd19tZXNzYWdlOworCWNoYXIgKnJhd19oZWFkZXI7CiB9OwogCiB2b2lkIGdpdF9jb21taXRfX2ZyZWUodm9pZCAqY29tbWl0KTsKZGlmZiAtLWdpdCBhL3NyYy9jb21taXRfbGlzdC5jIGIvc3JjL2NvbW1pdF9saXN0LmMKaW5kZXggYmQ1YjUyMC4uNjQ0MTZlNSAxMDA2NDQKLS0tIGEvc3JjL2NvbW1pdF9saXN0LmMKKysrIGIvc3JjL2NvbW1pdF9saXN0LmMKQEAgLTM2LDcgKzM2LDcgQEAKIAlnaXRfY29tbWl0X2xpc3QgKnA7CiAKIAl3aGlsZSAoKHAgPSAqcHApICE9IE5VTEwpIHsKLQkJaWYgKGdpdF9jb21taXRfbGlzdF90aW1lX2NtcChwLT5pdGVtLCBpdGVtKSA8IDApCisJCWlmIChnaXRfY29tbWl0X2xpc3RfdGltZV9jbXAocC0+aXRlbSwgaXRlbSkgPiAwKQogCQkJYnJlYWs7CiAKIAkJcHAgPSAmcC0+bmV4dDsKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24uaCBiL3NyYy9jb21tb24uaAppbmRleCAwMmQ5Y2U5Li4xNTlkMzFiIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uLmgKKysrIGIvc3JjL2NvbW1vbi5oCkBAIC03NCw2ICs3NCwzMCBAQAogaW50IGdpdGVycl9zZXRfcmVnZXgoY29uc3QgcmVnZXhfdCAqcmVnZXgsIGludCBlcnJvcl9jb2RlKTsKIAogLyoqCisgKiBHZXRzIHRoZSBzeXN0ZW0gZXJyb3IgY29kZSBmb3IgdGhpcyB0aHJlYWQuCisgKi8KK0dJVF9JTkxJTkUoaW50KSBnaXRlcnJfc3lzdGVtX2xhc3Qodm9pZCkKK3sKKyNpZmRlZiBHSVRfV0lOMzIKKwlyZXR1cm4gR2V0TGFzdEVycm9yKCk7CisjZWxzZQorCXJldHVybiBlcnJubzsKKyNlbmRpZgorfQorCisvKioKKyAqIFNldHMgdGhlIHN5c3RlbSBlcnJvciBjb2RlIGZvciB0aGlzIHRocmVhZC4KKyAqLworR0lUX0lOTElORSh2b2lkKSBnaXRlcnJfc3lzdGVtX3NldChpbnQgY29kZSkKK3sKKyNpZmRlZiBHSVRfV0lOMzIKKwlTZXRMYXN0RXJyb3IoY29kZSk7CisjZWxzZQorCWVycm5vID0gY29kZTsKKyNlbmRpZgorfQorCisvKioKICAqIENoZWNrIGEgdmVyc2lvbmVkIHN0cnVjdHVyZSBmb3IgdmFsaWRpdHkKICAqLwogR0lUX0lOTElORShpbnQpIGdpdGVycl9fY2hlY2tfdmVyc2lvbihjb25zdCB2b2lkICpzdHJ1Y3R1cmUsIHVuc2lnbmVkIGludCBleHBlY3RlZF9tYXgsIGNvbnN0IGNoYXIgKm5hbWUpCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLmMgYi9zcmMvY29uZmlnLmMKaW5kZXggMDY4YzQwMi4uMGQ5NDcxMyAxMDA2NDQKLS0tIGEvc3JjL2NvbmZpZy5jCisrKyBiL3NyYy9jb25maWcuYwpAQCAtMzE1LDMwICszMTUsMjQxIEBACiAgKiBMb29wIG92ZXIgYWxsIHRoZSB2YXJpYWJsZXMKICAqLwogCit0eXBlZGVmIHN0cnVjdCB7CisJZ2l0X2NvbmZpZ19pdGVyYXRvciBwYXJlbnQ7CisJZ2l0X2NvbmZpZ19pdGVyYXRvciAqY3VycmVudDsKKwljb25zdCBnaXRfY29uZmlnICpjZmc7CisJcmVnZXhfdCByZWdleDsKKwlpbnQgaGFzX3JlZ2V4OworCXNpemVfdCBpOworfSBhbGxfaXRlcjsKKworc3RhdGljIGludCBmaW5kX25leHRfYmFja2VuZChzaXplX3QgKm91dCwgY29uc3QgZ2l0X2NvbmZpZyAqY2ZnLCBzaXplX3QgaSkKK3sKKwlmaWxlX2ludGVybmFsICppbnRlcm5hbDsKKworCWZvciAoOyBpID4gMDsgLS1pKSB7CisJCWludGVybmFsID0gZ2l0X3ZlY3Rvcl9nZXQoJmNmZy0+ZmlsZXMsIGkgLSAxKTsKKwkJaWYgKCFpbnRlcm5hbCB8fCAhaW50ZXJuYWwtPmZpbGUpCisJCQljb250aW51ZTsKKworCQkqb3V0ID0gaTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGFsbF9pdGVyX25leHQoZ2l0X2NvbmZpZ19lbnRyeSAqKmVudHJ5LCBnaXRfY29uZmlnX2l0ZXJhdG9yICpfaXRlcikKK3sKKwlhbGxfaXRlciAqaXRlciA9IChhbGxfaXRlciAqKSBfaXRlcjsKKwlmaWxlX2ludGVybmFsICppbnRlcm5hbDsKKwlnaXRfY29uZmlnX2JhY2tlbmQgKmJhY2tlbmQ7CisJc2l6ZV90IGk7CisJaW50IGVycm9yID0gMDsKKworCWlmIChpdGVyLT5jdXJyZW50ICE9IE5VTEwgJiYKKwkgICAgKGVycm9yID0gaXRlci0+Y3VycmVudC0+bmV4dChlbnRyeSwgaXRlci0+Y3VycmVudCkpID09IDApIHsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGVycm9yIDwgMCAmJiBlcnJvciAhPSBHSVRfSVRFUk9WRVIpCisJCXJldHVybiBlcnJvcjsKKworCWRvIHsKKwkJaWYgKGZpbmRfbmV4dF9iYWNrZW5kKCZpLCBpdGVyLT5jZmcsIGl0ZXItPmkpIDwgMCkKKwkJCXJldHVybiBHSVRfSVRFUk9WRVI7CisKKwkJaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmaXRlci0+Y2ZnLT5maWxlcywgaSAtIDEpOworCQliYWNrZW5kID0gaW50ZXJuYWwtPmZpbGU7CisJCWl0ZXItPmkgPSBpIC0gMTsKKworCQlpZiAoaXRlci0+Y3VycmVudCkKKwkJCWl0ZXItPmN1cnJlbnQtPmZyZWUoaXRlci0+Y3VycmVudCk7CisKKwkJaXRlci0+Y3VycmVudCA9IE5VTEw7CisJCWVycm9yID0gYmFja2VuZC0+aXRlcmF0b3IoJml0ZXItPmN1cnJlbnQsIGJhY2tlbmQpOworCQlpZiAoZXJyb3IgPT0gR0lUX0VOT1RGT1VORCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlcnJvciA8IDApCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJZXJyb3IgPSBpdGVyLT5jdXJyZW50LT5uZXh0KGVudHJ5LCBpdGVyLT5jdXJyZW50KTsKKwkJLyogSWYgdGhpcyBiYWNrZW5kIGlzIGVtcHR5LCB0aGVuIGtlZXAgZ29pbmcgKi8KKwkJaWYgKGVycm9yID09IEdJVF9JVEVST1ZFUikKKwkJCWNvbnRpbnVlOworCisJCXJldHVybiBlcnJvcjsKKworCX0gd2hpbGUoMSk7CisKKwlyZXR1cm4gR0lUX0lURVJPVkVSOworfQorCitzdGF0aWMgaW50IGFsbF9pdGVyX2dsb2JfbmV4dChnaXRfY29uZmlnX2VudHJ5ICoqZW50cnksIGdpdF9jb25maWdfaXRlcmF0b3IgKl9pdGVyKQoreworCWludCBlcnJvcjsKKwlhbGxfaXRlciAqaXRlciA9IChhbGxfaXRlciAqKSBfaXRlcjsKKworCS8qCisJICogV2UgdXNlIHRoZSAibm9ybWFsIiBmdW5jdGlvbiB0byBncmFiIHRoZSBuZXh0IG9uZSBhY3Jvc3MKKwkgKiBiYWNrZW5kcyBhbmQgdGhlbiBhcHBseSB0aGUgcmVnZXgKKwkgKi8KKwl3aGlsZSAoKGVycm9yID0gYWxsX2l0ZXJfbmV4dChlbnRyeSwgX2l0ZXIpKSA9PSAwKSB7CisJCS8qIHNraXAgbm9uLW1hdGNoaW5nIGtleXMgaWYgcmVnZXhwIHdhcyBwcm92aWRlZCAqLworCQlpZiAocmVnZXhlYygmaXRlci0+cmVnZXgsICgqZW50cnkpLT5uYW1lLCAwLCBOVUxMLCAwKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJLyogYW5kIHNpbXBseSByZXR1cm4gaWYgd2UgbGlrZSB0aGUgZW50cnkncyBuYW1lICovCisJCXJldHVybiAwOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgYWxsX2l0ZXJfZnJlZShnaXRfY29uZmlnX2l0ZXJhdG9yICpfaXRlcikKK3sKKwlhbGxfaXRlciAqaXRlciA9IChhbGxfaXRlciAqKSBfaXRlcjsKKworCWlmIChpdGVyLT5jdXJyZW50KQorCQlpdGVyLT5jdXJyZW50LT5mcmVlKGl0ZXItPmN1cnJlbnQpOworCisJZ2l0X19mcmVlKGl0ZXIpOworfQorCitzdGF0aWMgdm9pZCBhbGxfaXRlcl9nbG9iX2ZyZWUoZ2l0X2NvbmZpZ19pdGVyYXRvciAqX2l0ZXIpCit7CisJYWxsX2l0ZXIgKml0ZXIgPSAoYWxsX2l0ZXIgKikgX2l0ZXI7CisKKwlyZWdmcmVlKCZpdGVyLT5yZWdleCk7CisJYWxsX2l0ZXJfZnJlZShfaXRlcik7Cit9CisKK2ludCBnaXRfY29uZmlnX2l0ZXJhdG9yX25ldyhnaXRfY29uZmlnX2l0ZXJhdG9yICoqb3V0LCBjb25zdCBnaXRfY29uZmlnICpjZmcpCit7CisJYWxsX2l0ZXIgKml0ZXI7CisKKwlpdGVyID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGFsbF9pdGVyKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKGl0ZXIpOworCisJaXRlci0+cGFyZW50LmZyZWUgPSBhbGxfaXRlcl9mcmVlOworCWl0ZXItPnBhcmVudC5uZXh0ID0gYWxsX2l0ZXJfbmV4dDsKKworCWl0ZXItPmkgPSBjZmctPmZpbGVzLmxlbmd0aDsKKwlpdGVyLT5jZmcgPSBjZmc7CisKKwkqb3V0ID0gKGdpdF9jb25maWdfaXRlcmF0b3IgKikgaXRlcjsKKworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19pdGVyYXRvcl9nbG9iX25ldyhnaXRfY29uZmlnX2l0ZXJhdG9yICoqb3V0LCBjb25zdCBnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKnJlZ2V4cCkKK3sKKwlhbGxfaXRlciAqaXRlcjsKKwlpbnQgcmVzdWx0OworCisJaWYgKHJlZ2V4cCA9PSBOVUxMKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19pdGVyYXRvcl9uZXcob3V0LCBjZmcpOworCisJaXRlciA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihhbGxfaXRlcikpOworCUdJVEVSUl9DSEVDS19BTExPQyhpdGVyKTsKKworCWlmICgocmVzdWx0ID0gcmVnY29tcCgmaXRlci0+cmVnZXgsIHJlZ2V4cCwgUkVHX0VYVEVOREVEKSkgPCAwKSB7CisJCWdpdGVycl9zZXRfcmVnZXgoJml0ZXItPnJlZ2V4LCByZXN1bHQpOworCQlyZWdmcmVlKCZpdGVyLT5yZWdleCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpdGVyLT5wYXJlbnQubmV4dCA9IGFsbF9pdGVyX2dsb2JfbmV4dDsKKwlpdGVyLT5wYXJlbnQuZnJlZSA9IGFsbF9pdGVyX2dsb2JfZnJlZTsKKwlpdGVyLT5pID0gY2ZnLT5maWxlcy5sZW5ndGg7CisJaXRlci0+Y2ZnID0gY2ZnOworCisJKm91dCA9IChnaXRfY29uZmlnX2l0ZXJhdG9yICopIGl0ZXI7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGdpdF9jb25maWdfZm9yZWFjaCgKIAljb25zdCBnaXRfY29uZmlnICpjZmcsIGdpdF9jb25maWdfZm9yZWFjaF9jYiBjYiwgdm9pZCAqcGF5bG9hZCkKIHsKIAlyZXR1cm4gZ2l0X2NvbmZpZ19mb3JlYWNoX21hdGNoKGNmZywgTlVMTCwgY2IsIHBheWxvYWQpOwogfQogCitpbnQgZ2l0X2NvbmZpZ19iYWNrZW5kX2ZvcmVhY2hfbWF0Y2goCisJZ2l0X2NvbmZpZ19iYWNrZW5kICpiYWNrZW5kLAorCWNvbnN0IGNoYXIgKnJlZ2V4cCwKKwlpbnQgKCpmbikoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqLCB2b2lkICopLAorCXZvaWQgKmRhdGEpCit7CisJZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnk7CisJZ2l0X2NvbmZpZ19pdGVyYXRvciogaXRlcjsKKwlyZWdleF90IHJlZ2V4OworCWludCByZXN1bHQgPSAwOworCisJaWYgKHJlZ2V4cCAhPSBOVUxMKSB7CisJCWlmICgocmVzdWx0ID0gcmVnY29tcCgmcmVnZXgsIHJlZ2V4cCwgUkVHX0VYVEVOREVEKSkgPCAwKSB7CisJCQlnaXRlcnJfc2V0X3JlZ2V4KCZyZWdleCwgcmVzdWx0KTsKKwkJCXJlZ2ZyZWUoJnJlZ2V4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmICgocmVzdWx0ID0gYmFja2VuZC0+aXRlcmF0b3IoJml0ZXIsIGJhY2tlbmQpKSA8IDApIHsKKwkJaXRlciA9IE5VTEw7CisJCXJldHVybiAtMTsKKwl9CisKKwl3aGlsZSghKGl0ZXItPm5leHQoJmVudHJ5LCBpdGVyKSA8IDApKSB7CisJCS8qIHNraXAgbm9uLW1hdGNoaW5nIGtleXMgaWYgcmVnZXhwIHdhcyBwcm92aWRlZCAqLworCQlpZiAocmVnZXhwICYmIHJlZ2V4ZWMoJnJlZ2V4LCBlbnRyeS0+bmFtZSwgMCwgTlVMTCwgMCkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGFib3J0IGl0ZXJhdG9yIG9uIG5vbi16ZXJvIHJldHVybiB2YWx1ZSAqLworCQlpZiAoZm4oZW50cnksIGRhdGEpKSB7CisJCQlnaXRlcnJfY2xlYXIoKTsKKwkJCXJlc3VsdCA9IEdJVF9FVVNFUjsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKworY2xlYW51cDoKKwlpZiAocmVnZXhwICE9IE5VTEwpCisJCXJlZ2ZyZWUoJnJlZ2V4KTsKKworCWl0ZXItPmZyZWUoaXRlcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBpbnQgZ2l0X2NvbmZpZ19mb3JlYWNoX21hdGNoKAogCWNvbnN0IGdpdF9jb25maWcgKmNmZywKIAljb25zdCBjaGFyICpyZWdleHAsCiAJZ2l0X2NvbmZpZ19mb3JlYWNoX2NiIGNiLAogCXZvaWQgKnBheWxvYWQpCiB7Ci0JaW50IHJldCA9IDA7Ci0Jc2l6ZV90IGk7Ci0JZmlsZV9pbnRlcm5hbCAqaW50ZXJuYWw7Ci0JZ2l0X2NvbmZpZ19iYWNrZW5kICpmaWxlOworCWludCBlcnJvcjsKKwlnaXRfY29uZmlnX2l0ZXJhdG9yICppdGVyOworCWdpdF9jb25maWdfZW50cnkgKmVudHJ5OwogCi0JZm9yIChpID0gMDsgaSA8IGNmZy0+ZmlsZXMubGVuZ3RoICYmIHJldCA9PSAwOyArK2kpIHsKLQkJaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmY2ZnLT5maWxlcywgaSk7Ci0JCWZpbGUgPSBpbnRlcm5hbC0+ZmlsZTsKLQkJcmV0ID0gZmlsZS0+Zm9yZWFjaChmaWxlLCByZWdleHAsIGNiLCBwYXlsb2FkKTsKKwlpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19pdGVyYXRvcl9nbG9iX25ldygmaXRlciwgY2ZnLCByZWdleHApKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXdoaWxlICgoZXJyb3IgPSBnaXRfY29uZmlnX25leHQoJmVudHJ5LCBpdGVyKSkgPT0gMCkgeworCQlpZihjYihlbnRyeSwgcGF5bG9hZCkpIHsKKwkJCWdpdGVycl9jbGVhcigpOworCQkJZXJyb3IgPSBHSVRfRVVTRVI7CisJCQlicmVhazsKKwkJfQogCX0KIAotCXJldHVybiByZXQ7CisJZ2l0X2NvbmZpZ19pdGVyYXRvcl9mcmVlKGl0ZXIpOworCisJaWYgKGVycm9yID09IEdJVF9JVEVST1ZFUikKKwkJZXJyb3IgPSAwOworCisJcmV0dXJuIGVycm9yOwogfQogCiAvKioqKioqKioqKioqKioKQEAgLTUyOCwzMSArNzM5LDExNCBAQAogCXJldHVybiBjb25maWdfZXJyb3Jfbm90Zm91bmQobmFtZSk7CiB9CiAKLWludCBnaXRfY29uZmlnX2dldF9tdWx0aXZhcigKK2ludCBnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKAogCWNvbnN0IGdpdF9jb25maWcgKmNmZywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVnZXhwLAogCWdpdF9jb25maWdfZm9yZWFjaF9jYiBjYiwgdm9pZCAqcGF5bG9hZCkKIHsKLQlmaWxlX2ludGVybmFsICppbnRlcm5hbDsKLQlnaXRfY29uZmlnX2JhY2tlbmQgKmZpbGU7Ci0JaW50IHJldCA9IEdJVF9FTk9URk9VTkQ7Ci0Jc2l6ZV90IGk7CisJaW50IGVyciwgZm91bmQ7CisJZ2l0X2NvbmZpZ19pdGVyYXRvciAqaXRlcjsKKwlnaXRfY29uZmlnX2VudHJ5ICplbnRyeTsKIAotCS8qCi0JICogVGhpcyBsb29wIHJ1bnMgdGhlICJ3cm9uZyIgd2F5ICdyb3VuZCBiZWNhdXNlIHdlIG5lZWQgdG8KLQkgKiBsb29rIGF0IGV2ZXJ5IHZhbHVlIGZyb20gdGhlIG1vc3QgZ2VuZXJhbCB0byBtb3N0IHNwZWNpZmljCi0JICovCi0JZm9yIChpID0gY2ZnLT5maWxlcy5sZW5ndGg7IGkgPiAwOyAtLWkpIHsKLQkJaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmY2ZnLT5maWxlcywgaSAtIDEpOwotCQlpZiAoIWludGVybmFsIHx8ICFpbnRlcm5hbC0+ZmlsZSkKLQkJCWNvbnRpbnVlOwotCQlmaWxlID0gaW50ZXJuYWwtPmZpbGU7CisJaWYgKChlcnIgPSBnaXRfY29uZmlnX211bHRpdmFyX2l0ZXJhdG9yX25ldygmaXRlciwgY2ZnLCBuYW1lLCByZWdleHApKSA8IDApCisJCXJldHVybiBlcnI7CiAKLQkJcmV0ID0gZmlsZS0+Z2V0X211bHRpdmFyKGZpbGUsIG5hbWUsIHJlZ2V4cCwgY2IsIHBheWxvYWQpOwotCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gR0lUX0VOT1RGT1VORCkKLQkJCXJldHVybiByZXQ7CisJZm91bmQgPSAwOworCXdoaWxlICgoZXJyID0gaXRlci0+bmV4dCgmZW50cnksIGl0ZXIpKSA9PSAwKSB7CisJCWZvdW5kID0gMTsKKwkJaWYoY2IoZW50cnksIHBheWxvYWQpKSB7CisJCQlpdGVyLT5mcmVlKGl0ZXIpOworCQkJcmV0dXJuIEdJVF9FVVNFUjsKKwkJfQogCX0KIAotCXJldHVybiAocmV0ID09IEdJVF9FTk9URk9VTkQpID8gY29uZmlnX2Vycm9yX25vdGZvdW5kKG5hbWUpIDogMDsKKwlpdGVyLT5mcmVlKGl0ZXIpOworCWlmIChlcnIgPT0gR0lUX0lURVJPVkVSKQorCQllcnIgPSAwOworCisJaWYgKGZvdW5kID09IDAgJiYgZXJyID09IDApCisJCWVyciA9IGNvbmZpZ19lcnJvcl9ub3Rmb3VuZChuYW1lKTsKKworCXJldHVybiBlcnI7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlnaXRfY29uZmlnX2l0ZXJhdG9yIHBhcmVudDsKKwlnaXRfY29uZmlnX2l0ZXJhdG9yICppdGVyOworCWNoYXIgKm5hbWU7CisJcmVnZXhfdCByZWdleDsKKwlpbnQgaGF2ZV9yZWdleDsKK30gbXVsdGl2YXJfaXRlcjsKKworc3RhdGljIGludCBtdWx0aXZhcl9pdGVyX25leHQoZ2l0X2NvbmZpZ19lbnRyeSAqKmVudHJ5LCBnaXRfY29uZmlnX2l0ZXJhdG9yICpfaXRlcikKK3sKKwltdWx0aXZhcl9pdGVyICppdGVyID0gKG11bHRpdmFyX2l0ZXIgKikgX2l0ZXI7CisJaW50IGVycm9yID0gMDsKKworCXdoaWxlICgoZXJyb3IgPSBpdGVyLT5pdGVyLT5uZXh0KGVudHJ5LCBpdGVyLT5pdGVyKSkgPT0gMCkgeworCQlpZiAoZ2l0X19zdHJjbXAoaXRlci0+bmFtZSwgKCplbnRyeSktPm5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFpdGVyLT5oYXZlX3JlZ2V4KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHJlZ2V4ZWMoJml0ZXItPnJlZ2V4LCAoKmVudHJ5KS0+dmFsdWUsIDAsIE5VTEwsIDApID09IDApCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgbXVsdGl2YXJfaXRlcl9mcmVlKGdpdF9jb25maWdfaXRlcmF0b3IgKl9pdGVyKQoreworCW11bHRpdmFyX2l0ZXIgKml0ZXIgPSAobXVsdGl2YXJfaXRlciAqKSBfaXRlcjsKKworCWl0ZXItPml0ZXItPmZyZWUoaXRlci0+aXRlcik7CisKKwlnaXRfX2ZyZWUoaXRlci0+bmFtZSk7CisJcmVnZnJlZSgmaXRlci0+cmVnZXgpOworCWdpdF9fZnJlZShpdGVyKTsKK30KKworaW50IGdpdF9jb25maWdfbXVsdGl2YXJfaXRlcmF0b3JfbmV3KGdpdF9jb25maWdfaXRlcmF0b3IgKipvdXQsIGNvbnN0IGdpdF9jb25maWcgKmNmZywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVnZXhwKQoreworCW11bHRpdmFyX2l0ZXIgKml0ZXIgPSBOVUxMOworCWdpdF9jb25maWdfaXRlcmF0b3IgKmlubmVyID0gTlVMTDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19pdGVyYXRvcl9uZXcoJmlubmVyLCBjZmcpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWl0ZXIgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YobXVsdGl2YXJfaXRlcikpOworCUdJVEVSUl9DSEVDS19BTExPQyhpdGVyKTsKKworCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX19ub3JtYWxpemVfbmFtZShuYW1lLCAmaXRlci0+bmFtZSkpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKworCWlmIChyZWdleHAgIT0gTlVMTCkgeworCQllcnJvciA9IHJlZ2NvbXAoJml0ZXItPnJlZ2V4LCByZWdleHAsIFJFR19FWFRFTkRFRCk7CisJCWlmIChlcnJvciA8IDApIHsKKwkJCWdpdGVycl9zZXRfcmVnZXgoJml0ZXItPnJlZ2V4LCBlcnJvcik7CisJCQllcnJvciA9IC0xOworCQkJcmVnZnJlZSgmaXRlci0+cmVnZXgpOworCQkJZ290byBvbl9lcnJvcjsKKwkJfQorCisJCWl0ZXItPmhhdmVfcmVnZXggPSAxOworCX0KKworCWl0ZXItPml0ZXIgPSBpbm5lcjsKKwlpdGVyLT5wYXJlbnQuZnJlZSA9IG11bHRpdmFyX2l0ZXJfZnJlZTsKKwlpdGVyLT5wYXJlbnQubmV4dCA9IG11bHRpdmFyX2l0ZXJfbmV4dDsKKworCSpvdXQgPSAoZ2l0X2NvbmZpZ19pdGVyYXRvciAqKSBpdGVyOworCisJcmV0dXJuIDA7CisKK29uX2Vycm9yOgorCisJaW5uZXItPmZyZWUoaW5uZXIpOworCWdpdF9fZnJlZShpdGVyKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCwgY29uc3QgY2hhciAqdmFsdWUpCkBAIC01NjgsNiArODYyLDI5IEBACiAJcmV0dXJuIGZpbGUtPnNldF9tdWx0aXZhcihmaWxlLCBuYW1lLCByZWdleHAsIHZhbHVlKTsKIH0KIAoraW50IGdpdF9jb25maWdfZGVsZXRlX211bHRpdmFyKGdpdF9jb25maWcgKmNmZywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVnZXhwKQoreworCWdpdF9jb25maWdfYmFja2VuZCAqZmlsZTsKKwlmaWxlX2ludGVybmFsICppbnRlcm5hbDsKKworCWludGVybmFsID0gZ2l0X3ZlY3Rvcl9nZXQoJmNmZy0+ZmlsZXMsIDApOworCWlmICghaW50ZXJuYWwgfHwgIWludGVybmFsLT5maWxlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vZmlsZXMobmFtZSk7CisJZmlsZSA9IGludGVybmFsLT5maWxlOworCisJcmV0dXJuIGZpbGUtPmRlbF9tdWx0aXZhcihmaWxlLCBuYW1lLCByZWdleHApOworfQorCitpbnQgZ2l0X2NvbmZpZ19uZXh0KGdpdF9jb25maWdfZW50cnkgKiplbnRyeSwgZ2l0X2NvbmZpZ19pdGVyYXRvciAqaXRlcikKK3sKKwlyZXR1cm4gaXRlci0+bmV4dChlbnRyeSwgaXRlcik7Cit9CisKK3ZvaWQgZ2l0X2NvbmZpZ19pdGVyYXRvcl9mcmVlKGdpdF9jb25maWdfaXRlcmF0b3IgKml0ZXIpCit7CisJaXRlci0+ZnJlZShpdGVyKTsKK30KKwogc3RhdGljIGludCBnaXRfY29uZmlnX19maW5kX2ZpbGVfdG9fcGF0aCgKIAljaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sIGludCAoKmZpbmQpKGdpdF9idWYgKmJ1ZikpCiB7CkBAIC04MTEsNiArMTEyOCw0MSBAQAogCXJldHVybiAtMTsKIH0KIAorLyogVGFrZSBzb21ldGhpbmcgdGhlIHVzZXIgZ2F2ZSB1cyBhbmQgbWFrZSBpdCBuaWNlIGZvciBvdXIgaGFzaCBmdW5jdGlvbiAqLworaW50IGdpdF9jb25maWdfX25vcm1hbGl6ZV9uYW1lKGNvbnN0IGNoYXIgKmluLCBjaGFyICoqb3V0KQoreworCWNoYXIgKm5hbWUsICpmZG90LCAqbGRvdDsKKworCWFzc2VydChpbiAmJiBvdXQpOworCisJbmFtZSA9IGdpdF9fc3RyZHVwKGluKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MobmFtZSk7CisKKwlmZG90ID0gc3RyY2hyKG5hbWUsICcuJyk7CisJbGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKworCWlmIChmZG90ID09IE5VTEwgfHwgZmRvdCA9PSBuYW1lIHx8IGxkb3QgPT0gTlVMTCB8fCAhbGRvdFsxXSkKKwkJZ290byBpbnZhbGlkOworCisJLyogVmFsaWRhdGUgYW5kIGRvd25jYXNlIHVwIHRvIGZpcnN0IGRvdCBhbmQgYWZ0ZXIgbGFzdCBkb3QgKi8KKwlpZiAoZ2l0X2NvbmZpZ19maWxlX25vcm1hbGl6ZV9zZWN0aW9uKG5hbWUsIGZkb3QpIDwgMCB8fAorCQlnaXRfY29uZmlnX2ZpbGVfbm9ybWFsaXplX3NlY3Rpb24obGRvdCArIDEsIE5VTEwpIDwgMCkKKwkJZ290byBpbnZhbGlkOworCisJLyogSWYgdGhlcmUgaXMgYSBtaWRkbGUgcmFuZ2UsIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGhhdmUgbmV3bGluZXMgKi8KKwl3aGlsZSAoZmRvdCA8IGxkb3QpCisJCWlmICgqZmRvdCsrID09ICdcbicpCisJCQlnb3RvIGludmFsaWQ7CisKKwkqb3V0ID0gbmFtZTsKKwlyZXR1cm4gMDsKKworaW52YWxpZDoKKwlnaXRfX2ZyZWUobmFtZSk7CisJZ2l0ZXJyX3NldChHSVRFUlJfQ09ORklHLCAiSW52YWxpZCBjb25maWcgaXRlbSBuYW1lICclcyciLCBpbik7CisJcmV0dXJuIEdJVF9FSU5WQUxJRFNQRUM7Cit9CisKIHN0cnVjdCByZW5hbWVfZGF0YSB7CiAJZ2l0X2NvbmZpZyAqY29uZmlnOwogCWdpdF9idWYgKm5hbWU7CmRpZmYgLS1naXQgYS9zcmMvY29uZmlnLmggYi9zcmMvY29uZmlnLmgKaW5kZXggYzVjMTFhZS4uMDFlODQ2NSAxMDA2NDQKLS0tIGEvc3JjL2NvbmZpZy5oCisrKyBiL3NyYy9jb25maWcuaApAQCAtNDcsNiArNDcsOSBAQAogICogQHBhcmFtIG91dCB0aGUgbmV3IGJhY2tlbmQKICAqIEBwYXJhbSBwYXRoIHdoZXJlIHRoZSBjb25maWcgZmlsZSBpcyBsb2NhdGVkCiAgKi8KLWV4dGVybiBpbnQgZ2l0X2NvbmZpZ19maWxlX19vbmRpc2soc3RydWN0IGdpdF9jb25maWdfYmFja2VuZCAqKm91dCwgY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfZmlsZV9fb25kaXNrKGdpdF9jb25maWdfYmFja2VuZCAqKm91dCwgY29uc3QgY2hhciAqcGF0aCk7CisKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19fbm9ybWFsaXplX25hbWUoY29uc3QgY2hhciAqaW4sIGNoYXIgKipvdXQpOworCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2NvbmZpZ19jYWNoZS5jIGIvc3JjL2NvbmZpZ19jYWNoZS5jCmluZGV4IDg0ZGUzYTUuLjY4MDg1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWdfY2FjaGUuYworKysgYi9zcmMvY29uZmlnX2NhY2hlLmMKQEAgLTY3LDYgKzY3LDcgQEAKIAl7ImNvcmUuaWdub3Jlc3RhdCIsIE5VTEwsIDAsIEdJVF9JR05PUkVTVEFUX0RFRkFVTFQgfSwKIAl7ImNvcmUudHJ1c3RjdGltZSIsIE5VTEwsIDAsIEdJVF9UUlVTVENUSU1FX0RFRkFVTFQgfSwKIAl7ImNvcmUuYWJicmV2IiwgX2N2YXJfbWFwX2ludCwgMSwgR0lUX0FCQlJFVl9ERUZBVUxUIH0sCisJeyJjb3JlLnByZWNvbXBvc2V1bmljb2RlIiwgTlVMTCwgMCwgR0lUX1BSRUNPTVBPU0VfREVGQVVMVCB9LAogfTsKIAogaW50IGdpdF9yZXBvc2l0b3J5X19jdmFyKGludCAqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X2N2YXJfY2FjaGVkIGN2YXIpCmRpZmYgLS1naXQgYS9zcmMvY29uZmlnX2ZpbGUuYyBiL3NyYy9jb25maWdfZmlsZS5jCmluZGV4IGRlYzk1MjEuLjE1YzhkZTQgMTAwNjQ0Ci0tLSBhL3NyYy9jb25maWdfZmlsZS5jCisrKyBiL3NyYy9jb25maWdfZmlsZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiZ2l0Mi9zeXMvY29uZmlnLmgiCiAjaW5jbHVkZSAiZ2l0Mi90eXBlcy5oIgogI2luY2x1ZGUgInN0cm1hcC5oIgorI2luY2x1ZGUgImFycmF5LmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMjUsOCArMjYsMTggQEAKIHR5cGVkZWYgc3RydWN0IGN2YXJfdCB7CiAJc3RydWN0IGN2YXJfdCAqbmV4dDsKIAlnaXRfY29uZmlnX2VudHJ5ICplbnRyeTsKKwlpbnQgaW5jbHVkZWQ7IC8qIHdoZXRoZXIgdGhpcyBpcyBwYXJ0IG9mIFtpbmNsdWRlXSAqLwogfSBjdmFyX3Q7CiAKK3R5cGVkZWYgc3RydWN0IGdpdF9jb25maWdfZmlsZV9pdGVyIHsKKwlnaXRfY29uZmlnX2l0ZXJhdG9yIHBhcmVudDsKKwlnaXRfc3RybWFwX2l0ZXIgaXRlcjsKKwljdmFyX3QqIG5leHRfdmFyOworfSBnaXRfY29uZmlnX2ZpbGVfaXRlcjsKKworLyogTWF4IGRlcHRoIGZvciBbaW5jbHVkZV0gZGlyZWN0aXZlcyAqLworI2RlZmluZSBNQVhfSU5DTFVERV9ERVBUSCAxMAorCiAjZGVmaW5lIENWQVJfTElTVF9IRUFEKGxpc3QpICgobGlzdCktPmhlYWQpCiAKICNkZWZpbmUgQ1ZBUl9MSVNUX1RBSUwobGlzdCkgKChsaXN0KS0+dGFpbCkKQEAgLTY1LDM0ICs3NiwzNyBAQAogCQkgKGl0ZXIpICYmICgoKHRtcCkgPSBDVkFSX0xJU1RfTkVYVChpdGVyKSB8fCAxKSk7XAogCQkgKGl0ZXIpID0gKHRtcCkpCiAKK3N0cnVjdCByZWFkZXIgeworCXRpbWVfdCBmaWxlX210aW1lOworCXNpemVfdCBmaWxlX3NpemU7CisJY2hhciAqZmlsZV9wYXRoOworCWdpdF9idWYgYnVmZmVyOworCWNoYXIgKnJlYWRfcHRyOworCWludCBsaW5lX251bWJlcjsKKwlpbnQgZW9mOworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCWdpdF9jb25maWdfYmFja2VuZCBwYXJlbnQ7CiAKIAlnaXRfc3RybWFwICp2YWx1ZXM7CiAKLQlzdHJ1Y3QgewotCQlnaXRfYnVmIGJ1ZmZlcjsKLQkJY2hhciAqcmVhZF9wdHI7Ci0JCWludCBsaW5lX251bWJlcjsKLQkJaW50IGVvZjsKLQl9IHJlYWRlcjsKKwlnaXRfYXJyYXlfdChzdHJ1Y3QgcmVhZGVyKSByZWFkZXJzOwogCiAJY2hhciAgKmZpbGVfcGF0aDsKLQl0aW1lX3QgZmlsZV9tdGltZTsKLQlzaXplX3QgZmlsZV9zaXplOwogCiAJZ2l0X2NvbmZpZ19sZXZlbF90IGxldmVsOwogfSBkaXNrZmlsZV9iYWNrZW5kOwogCi1zdGF0aWMgaW50IGNvbmZpZ19wYXJzZShkaXNrZmlsZV9iYWNrZW5kICpjZmdfZmlsZSwgZ2l0X2NvbmZpZ19sZXZlbF90IGxldmVsKTsKLXN0YXRpYyBpbnQgcGFyc2VfdmFyaWFibGUoZGlza2ZpbGVfYmFja2VuZCAqY2ZnLCBjaGFyICoqdmFyX25hbWUsIGNoYXIgKip2YXJfdmFsdWUpOworc3RhdGljIGludCBjb25maWdfcGFyc2UoZGlza2ZpbGVfYmFja2VuZCAqY2ZnX2ZpbGUsIHN0cnVjdCByZWFkZXIgKnJlYWRlciwgZ2l0X2NvbmZpZ19sZXZlbF90IGxldmVsLCBpbnQgZGVwdGgpOworc3RhdGljIGludCBwYXJzZV92YXJpYWJsZShzdHJ1Y3QgcmVhZGVyICpyZWFkZXIsIGNoYXIgKip2YXJfbmFtZSwgY2hhciAqKnZhcl92YWx1ZSk7CiBzdGF0aWMgaW50IGNvbmZpZ193cml0ZShkaXNrZmlsZV9iYWNrZW5kICpjZmcsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgcmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqdmFsdWUpOwogc3RhdGljIGNoYXIgKmVzY2FwZV92YWx1ZShjb25zdCBjaGFyICpwdHIpOwogCi1zdGF0aWMgdm9pZCBzZXRfcGFyc2VfZXJyb3IoZGlza2ZpbGVfYmFja2VuZCAqYmFja2VuZCwgaW50IGNvbCwgY29uc3QgY2hhciAqZXJyb3Jfc3RyKQorc3RhdGljIHZvaWQgc2V0X3BhcnNlX2Vycm9yKHN0cnVjdCByZWFkZXIgKnJlYWRlciwgaW50IGNvbCwgY29uc3QgY2hhciAqZXJyb3Jfc3RyKQogewogCWdpdGVycl9zZXQoR0lURVJSX0NPTkZJRywgIkZhaWxlZCB0byBwYXJzZSBjb25maWcgZmlsZTogJXMgKGluICVzOiVkLCBjb2x1bW4gJWQpIiwKLQkJZXJyb3Jfc3RyLCBiYWNrZW5kLT5maWxlX3BhdGgsIGJhY2tlbmQtPnJlYWRlci5saW5lX251bWJlciwgY29sKTsKKwkJZXJyb3Jfc3RyLCByZWFkZXItPmZpbGVfcGF0aCwgcmVhZGVyLT5saW5lX251bWJlciwgY29sKTsKIH0KIAogc3RhdGljIHZvaWQgY3Zhcl9mcmVlKGN2YXJfdCAqdmFyKQpAQCAtMTA2LDYgKzEyMCwxOCBAQAogCWdpdF9fZnJlZSh2YXIpOwogfQogCitzdGF0aWMgaW50IGN2YXJfbGVuZ3RoKGN2YXJfdCAqdmFyKQoreworCWludCBsZW5ndGggPSAwOworCisJd2hpbGUgKHZhcikgeworCQlsZW5ndGgrKzsKKwkJdmFyID0gdmFyLT5uZXh0OworCX0KKworCXJldHVybiBsZW5ndGg7Cit9CisKIGludCBnaXRfY29uZmlnX2ZpbGVfbm9ybWFsaXplX3NlY3Rpb24oY2hhciAqc3RhcnQsIGNoYXIgKmVuZCkKIHsKIAljaGFyICpzY2FuOwpAQCAtMTE4LDcgKzE0NCw3IEBACiAJCWlmIChlbmQgJiYgc2NhbiA+PSBlbmQpCiAJCQlicmVhazsKIAkJaWYgKGlzYWxudW0oKnNjYW4pKQotCQkJKnNjYW4gPSB0b2xvd2VyKCpzY2FuKTsKKwkJCSpzY2FuID0gKGNoYXIpdG9sb3dlcigqc2Nhbik7CiAJCWVsc2UgaWYgKCpzY2FuICE9ICctJyB8fCBzY2FuID09IHN0YXJ0KQogCQkJcmV0dXJuIEdJVF9FSU5WQUxJRFNQRUM7CiAJfQpAQCAtMTI5LDQxICsxNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBUYWtlIHNvbWV0aGluZyB0aGUgdXNlciBnYXZlIHVzIGFuZCBtYWtlIGl0IG5pY2UgZm9yIG91ciBoYXNoIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50IG5vcm1hbGl6ZV9uYW1lKGNvbnN0IGNoYXIgKmluLCBjaGFyICoqb3V0KQotewotCWNoYXIgKm5hbWUsICpmZG90LCAqbGRvdDsKLQotCWFzc2VydChpbiAmJiBvdXQpOwotCi0JbmFtZSA9IGdpdF9fc3RyZHVwKGluKTsKLQlHSVRFUlJfQ0hFQ0tfQUxMT0MobmFtZSk7Ci0KLQlmZG90ID0gc3RyY2hyKG5hbWUsICcuJyk7Ci0JbGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKLQotCWlmIChmZG90ID09IE5VTEwgfHwgZmRvdCA9PSBuYW1lIHx8IGxkb3QgPT0gTlVMTCB8fCAhbGRvdFsxXSkKLQkJZ290byBpbnZhbGlkOwotCi0JLyogVmFsaWRhdGUgYW5kIGRvd25jYXNlIHVwIHRvIGZpcnN0IGRvdCBhbmQgYWZ0ZXIgbGFzdCBkb3QgKi8KLQlpZiAoZ2l0X2NvbmZpZ19maWxlX25vcm1hbGl6ZV9zZWN0aW9uKG5hbWUsIGZkb3QpIDwgMCB8fAotCQlnaXRfY29uZmlnX2ZpbGVfbm9ybWFsaXplX3NlY3Rpb24obGRvdCArIDEsIE5VTEwpIDwgMCkKLQkJZ290byBpbnZhbGlkOwotCi0JLyogSWYgdGhlcmUgaXMgYSBtaWRkbGUgcmFuZ2UsIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGhhdmUgbmV3bGluZXMgKi8KLQl3aGlsZSAoZmRvdCA8IGxkb3QpCi0JCWlmICgqZmRvdCsrID09ICdcbicpCi0JCQlnb3RvIGludmFsaWQ7Ci0KLQkqb3V0ID0gbmFtZTsKLQlyZXR1cm4gMDsKLQotaW52YWxpZDoKLQlnaXRfX2ZyZWUobmFtZSk7Ci0JZ2l0ZXJyX3NldChHSVRFUlJfQ09ORklHLCAiSW52YWxpZCBjb25maWcgaXRlbSBuYW1lICclcyciLCBpbik7Ci0JcmV0dXJuIEdJVF9FSU5WQUxJRFNQRUM7Ci19Ci0KIHN0YXRpYyB2b2lkIGZyZWVfdmFycyhnaXRfc3RybWFwICp2YWx1ZXMpCiB7CiAJY3Zhcl90ICp2YXIgPSBOVUxMOwpAQCAtMTg0LDYgKzE3NSw3IEBACiBzdGF0aWMgaW50IGNvbmZpZ19vcGVuKGdpdF9jb25maWdfYmFja2VuZCAqY2ZnLCBnaXRfY29uZmlnX2xldmVsX3QgbGV2ZWwpCiB7CiAJaW50IHJlczsKKwlzdHJ1Y3QgcmVhZGVyICpyZWFkZXI7CiAJZGlza2ZpbGVfYmFja2VuZCAqYiA9IChkaXNrZmlsZV9iYWNrZW5kICopY2ZnOwogCiAJYi0+bGV2ZWwgPSBsZXZlbDsKQEAgLTE5MSwzMiArMTgzLDUyIEBACiAJYi0+dmFsdWVzID0gZ2l0X3N0cm1hcF9hbGxvYygpOwogCUdJVEVSUl9DSEVDS19BTExPQyhiLT52YWx1ZXMpOwogCi0JZ2l0X2J1Zl9pbml0KCZiLT5yZWFkZXIuYnVmZmVyLCAwKTsKKwlnaXRfYXJyYXlfaW5pdChiLT5yZWFkZXJzKTsKKwlyZWFkZXIgPSBnaXRfYXJyYXlfYWxsb2MoYi0+cmVhZGVycyk7CisJbWVtc2V0KHJlYWRlciwgMCwgc2l6ZW9mKHN0cnVjdCByZWFkZXIpKTsKKworCXJlYWRlci0+ZmlsZV9wYXRoID0gZ2l0X19zdHJkdXAoYi0+ZmlsZV9wYXRoKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVhZGVyLT5maWxlX3BhdGgpOworCisJZ2l0X2J1Zl9pbml0KCZyZWFkZXItPmJ1ZmZlciwgMCk7CiAJcmVzID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyX3VwZGF0ZWQoCi0JCSZiLT5yZWFkZXIuYnVmZmVyLCBiLT5maWxlX3BhdGgsICZiLT5maWxlX210aW1lLCAmYi0+ZmlsZV9zaXplLCBOVUxMKTsKKwkJJnJlYWRlci0+YnVmZmVyLCBiLT5maWxlX3BhdGgsICZyZWFkZXItPmZpbGVfbXRpbWUsICZyZWFkZXItPmZpbGVfc2l6ZSwgTlVMTCk7CiAKIAkvKiBJdCdzIGZpbmUgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCAqLwogCWlmIChyZXMgPT0gR0lUX0VOT1RGT1VORCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocmVzIDwgMCB8fCAocmVzID0gY29uZmlnX3BhcnNlKGIsIGxldmVsKSkgPCAwKSB7CisJaWYgKHJlcyA8IDAgfHwgKHJlcyA9IGNvbmZpZ19wYXJzZShiLCByZWFkZXIsIGxldmVsLCAwKSkgPCAwKSB7CiAJCWZyZWVfdmFycyhiLT52YWx1ZXMpOwogCQliLT52YWx1ZXMgPSBOVUxMOwogCX0KIAotCWdpdF9idWZfZnJlZSgmYi0+cmVhZGVyLmJ1ZmZlcik7CisJcmVhZGVyID0gZ2l0X2FycmF5X2dldChiLT5yZWFkZXJzLCAwKTsKKwlnaXRfYnVmX2ZyZWUoJnJlYWRlci0+YnVmZmVyKTsKIAlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgaW50IGNvbmZpZ19yZWZyZXNoKGdpdF9jb25maWdfYmFja2VuZCAqY2ZnKQogewotCWludCByZXMsIHVwZGF0ZWQgPSAwOworCWludCByZXMgPSAwLCB1cGRhdGVkID0gMCwgYW55X3VwZGF0ZWQgPSAwOwogCWRpc2tmaWxlX2JhY2tlbmQgKmIgPSAoZGlza2ZpbGVfYmFja2VuZCAqKWNmZzsKIAlnaXRfc3RybWFwICpvbGRfdmFsdWVzOworCXN0cnVjdCByZWFkZXIgKnJlYWRlcjsKKwl1aW50MzJfdCBpOwogCi0JcmVzID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyX3VwZGF0ZWQoCi0JCSZiLT5yZWFkZXIuYnVmZmVyLCBiLT5maWxlX3BhdGgsICZiLT5maWxlX210aW1lLCAmYi0+ZmlsZV9zaXplLCAmdXBkYXRlZCk7Ci0JaWYgKHJlcyA8IDAgfHwgIXVwZGF0ZWQpCisJZm9yIChpID0gMDsgaSA8IGdpdF9hcnJheV9zaXplKGItPnJlYWRlcnMpOyBpKyspIHsKKwkJcmVhZGVyID0gZ2l0X2FycmF5X2dldChiLT5yZWFkZXJzLCBpKTsKKwkJcmVzID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyX3VwZGF0ZWQoCisJCQkmcmVhZGVyLT5idWZmZXIsIHJlYWRlci0+ZmlsZV9wYXRoLCAmcmVhZGVyLT5maWxlX210aW1lLCAmcmVhZGVyLT5maWxlX3NpemUsICZ1cGRhdGVkKTsKKworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiAocmVzID09IEdJVF9FTk9URk9VTkQpID8gMCA6IHJlczsKKworCQlpZiAodXBkYXRlZCkKKwkJCWFueV91cGRhdGVkID0gMTsKKwl9CisKKwlpZiAoIWFueV91cGRhdGVkKQogCQlyZXR1cm4gKHJlcyA9PSBHSVRfRU5PVEZPVU5EKSA/IDAgOiByZXM7CiAKIAkvKiBuZWVkIHRvIHJlbG9hZCAtIHN0b3JlIG9sZCB2YWx1ZXMgYW5kIHByZXAgZm9yIHJlbG9hZCAqLwpAQCAtMjI0LDc0ICsyMzYsODggQEAKIAliLT52YWx1ZXMgPSBnaXRfc3RybWFwX2FsbG9jKCk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKGItPnZhbHVlcyk7CiAKLQlpZiAoKHJlcyA9IGNvbmZpZ19wYXJzZShiLCBiLT5sZXZlbCkpIDwgMCkgeworCWlmICgocmVzID0gY29uZmlnX3BhcnNlKGIsIHJlYWRlciwgYi0+bGV2ZWwsIDApKSA8IDApIHsKIAkJZnJlZV92YXJzKGItPnZhbHVlcyk7CiAJCWItPnZhbHVlcyA9IG9sZF92YWx1ZXM7CiAJfSBlbHNlIHsKIAkJZnJlZV92YXJzKG9sZF92YWx1ZXMpOwogCX0KIAotCWdpdF9idWZfZnJlZSgmYi0+cmVhZGVyLmJ1ZmZlcik7CisJZ2l0X2J1Zl9mcmVlKCZyZWFkZXItPmJ1ZmZlcik7CiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHZvaWQgYmFja2VuZF9mcmVlKGdpdF9jb25maWdfYmFja2VuZCAqX2JhY2tlbmQpCiB7CiAJZGlza2ZpbGVfYmFja2VuZCAqYmFja2VuZCA9IChkaXNrZmlsZV9iYWNrZW5kICopX2JhY2tlbmQ7CisJdWludDMyX3QgaTsKIAogCWlmIChiYWNrZW5kID09IE5VTEwpCiAJCXJldHVybjsKIAorCWZvciAoaSA9IDA7IGkgPCBnaXRfYXJyYXlfc2l6ZShiYWNrZW5kLT5yZWFkZXJzKTsgaSsrKSB7CisJCXN0cnVjdCByZWFkZXIgKnIgPSBnaXRfYXJyYXlfZ2V0KGJhY2tlbmQtPnJlYWRlcnMsIGkpOworCQlnaXRfX2ZyZWUoci0+ZmlsZV9wYXRoKTsKKwl9CisJZ2l0X2FycmF5X2NsZWFyKGJhY2tlbmQtPnJlYWRlcnMpOworCiAJZ2l0X19mcmVlKGJhY2tlbmQtPmZpbGVfcGF0aCk7CiAJZnJlZV92YXJzKGJhY2tlbmQtPnZhbHVlcyk7CiAJZ2l0X19mcmVlKGJhY2tlbmQpOwogfQogCi1zdGF0aWMgaW50IGZpbGVfZm9yZWFjaCgKLQlnaXRfY29uZmlnX2JhY2tlbmQgKmJhY2tlbmQsCi0JY29uc3QgY2hhciAqcmVnZXhwLAotCWludCAoKmZuKShjb25zdCBnaXRfY29uZmlnX2VudHJ5ICosIHZvaWQgKiksCi0Jdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGNvbmZpZ19pdGVyYXRvcl9mcmVlKAorCWdpdF9jb25maWdfaXRlcmF0b3IqIGl0ZXIpCiB7Ci0JZGlza2ZpbGVfYmFja2VuZCAqYiA9IChkaXNrZmlsZV9iYWNrZW5kICopYmFja2VuZDsKLQljdmFyX3QgKnZhciwgKm5leHRfdmFyOwotCWNvbnN0IGNoYXIgKmtleTsKLQlyZWdleF90IHJlZ2V4OwotCWludCByZXN1bHQgPSAwOworCWdpdF9fZnJlZShpdGVyKTsKK30KIAotCWlmICghYi0+dmFsdWVzKQotCQlyZXR1cm4gMDsKK3N0YXRpYyBpbnQgY29uZmlnX2l0ZXJhdG9yX25leHQoCisJZ2l0X2NvbmZpZ19lbnRyeSAqKmVudHJ5LAorCWdpdF9jb25maWdfaXRlcmF0b3IgKml0ZXIpCit7CisJZ2l0X2NvbmZpZ19maWxlX2l0ZXIgKml0ID0gKGdpdF9jb25maWdfZmlsZV9pdGVyICopIGl0ZXI7CisJZGlza2ZpbGVfYmFja2VuZCAqYiA9IChkaXNrZmlsZV9iYWNrZW5kICopIGl0LT5wYXJlbnQuYmFja2VuZDsKKwlpbnQgZXJyID0gMDsKKwljdmFyX3QgKiB2YXI7CiAKLQlpZiAocmVnZXhwICE9IE5VTEwpIHsKLQkJaWYgKChyZXN1bHQgPSByZWdjb21wKCZyZWdleCwgcmVnZXhwLCBSRUdfRVhURU5ERUQpKSA8IDApIHsKLQkJCWdpdGVycl9zZXRfcmVnZXgoJnJlZ2V4LCByZXN1bHQpOwotCQkJcmVnZnJlZSgmcmVnZXgpOwotCQkJcmV0dXJuIC0xOwotCQl9CisJaWYgKGl0LT5uZXh0X3ZhciA9PSBOVUxMKSB7CisJCWVyciA9IGdpdF9zdHJtYXBfbmV4dCgodm9pZCoqKSAmdmFyLCAmKGl0LT5pdGVyKSwgYi0+dmFsdWVzKTsKKwl9IGVsc2UgeworCQl2YXIgPSBpdC0+bmV4dF92YXI7CiAJfQogCi0JZ2l0X3N0cm1hcF9mb3JlYWNoKGItPnZhbHVlcywga2V5LCB2YXIsCi0JCWZvciAoOyB2YXIgIT0gTlVMTDsgdmFyID0gbmV4dF92YXIpIHsKLQkJCW5leHRfdmFyID0gQ1ZBUl9MSVNUX05FWFQodmFyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlpdC0+bmV4dF92YXIgPSBOVUxMOworCQlyZXR1cm4gZXJyOworCX0KIAotCQkJLyogc2tpcCBub24tbWF0Y2hpbmcga2V5cyBpZiByZWdleHAgd2FzIHByb3ZpZGVkICovCi0JCQlpZiAocmVnZXhwICYmIHJlZ2V4ZWMoJnJlZ2V4LCBrZXksIDAsIE5VTEwsIDApICE9IDApCi0JCQkJY29udGludWU7CisJKmVudHJ5ID0gdmFyLT5lbnRyeTsKKwlpdC0+bmV4dF92YXIgPSBDVkFSX0xJU1RfTkVYVCh2YXIpOwogCi0JCQkvKiBhYm9ydCBpdGVyYXRvciBvbiBub24temVybyByZXR1cm4gdmFsdWUgKi8KLQkJCWlmIChmbih2YXItPmVudHJ5LCBkYXRhKSkgewotCQkJCWdpdGVycl9jbGVhcigpOwotCQkJCXJlc3VsdCA9IEdJVF9FVVNFUjsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9Ci0JCX0KLQkpOworCXJldHVybiAwOworfQogCi1jbGVhbnVwOgotCWlmIChyZWdleHAgIT0gTlVMTCkKLQkJcmVnZnJlZSgmcmVnZXgpOworc3RhdGljIGludCBjb25maWdfaXRlcmF0b3JfbmV3KAorCWdpdF9jb25maWdfaXRlcmF0b3IgKippdGVyLAorCXN0cnVjdCBnaXRfY29uZmlnX2JhY2tlbmQqIGJhY2tlbmQpCit7CisJZGlza2ZpbGVfYmFja2VuZCAqYiA9IChkaXNrZmlsZV9iYWNrZW5kICopYmFja2VuZDsKKwlnaXRfY29uZmlnX2ZpbGVfaXRlciAqaXQgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2NvbmZpZ19maWxlX2l0ZXIpKTsKIAotCXJldHVybiByZXN1bHQ7CisJR0lUX1VOVVNFRChiKTsKKworCUdJVEVSUl9DSEVDS19BTExPQyhpdCk7CisKKwlpdC0+cGFyZW50LmJhY2tlbmQgPSBiYWNrZW5kOworCWl0LT5pdGVyID0gZ2l0X3N0cm1hcF9iZWdpbihiLT52YWx1ZXMpOworCWl0LT5uZXh0X3ZhciA9IE5VTEw7CisKKwlpdC0+cGFyZW50Lm5leHQgPSBjb25maWdfaXRlcmF0b3JfbmV4dDsKKwlpdC0+cGFyZW50LmZyZWUgPSBjb25maWdfaXRlcmF0b3JfZnJlZTsKKwkqaXRlciA9IChnaXRfY29uZmlnX2l0ZXJhdG9yICopIGl0OworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY29uZmlnX3NldChnaXRfY29uZmlnX2JhY2tlbmQgKmNmZywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCkBAIC0zMDIsNyArMzI4LDcgQEAKIAlraGl0ZXJfdCBwb3M7CiAJaW50IHJ2YWwsIHJldDsKIAotCWlmICgocnZhbCA9IG5vcm1hbGl6ZV9uYW1lKG5hbWUsICZrZXkpKSA8IDApCisJaWYgKChydmFsID0gZ2l0X2NvbmZpZ19fbm9ybWFsaXplX25hbWUobmFtZSwgJmtleSkpIDwgMCkKIAkJcmV0dXJuIHJ2YWw7CiAKIAkvKgpAQCAtMzU5LDEwICszODUsMTAgQEAKIAkJR0lURVJSX0NIRUNLX0FMTE9DKGVzY192YWx1ZSk7CiAJfQogCi0JaWYgKGNvbmZpZ193cml0ZShiLCBrZXksIE5VTEwsIGVzY192YWx1ZSkgPCAwKSB7CisJaWYgKChyZXQgPSBjb25maWdfd3JpdGUoYiwga2V5LCBOVUxMLCBlc2NfdmFsdWUpKSA8IDApIHsKIAkJZ2l0X19mcmVlKGVzY192YWx1ZSk7CiAJCWN2YXJfZnJlZSh2YXIpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiByZXQ7CiAJfQogCiAJZ2l0X19mcmVlKGVzY192YWx1ZSk7CkBAIC0zODQsOCArNDEwLDkgQEAKIAljaGFyICprZXk7CiAJa2hpdGVyX3QgcG9zOwogCWludCBlcnJvcjsKKwljdmFyX3QgKnZhcjsKIAotCWlmICgoZXJyb3IgPSBub3JtYWxpemVfbmFtZShuYW1lLCAma2V5KSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX19ub3JtYWxpemVfbmFtZShuYW1lLCAma2V5KSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKIAlwb3MgPSBnaXRfc3RybWFwX2xvb2t1cF9pbmRleChiLT52YWx1ZXMsIGtleSk7CkBAIC0zOTUsNzEgKzQyMiwxMSBAQAogCWlmICghZ2l0X3N0cm1hcF92YWxpZF9pbmRleChiLT52YWx1ZXMsIHBvcykpCiAJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCi0JKm91dCA9ICgoY3Zhcl90ICopZ2l0X3N0cm1hcF92YWx1ZV9hdChiLT52YWx1ZXMsIHBvcykpLT5lbnRyeTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNvbmZpZ19nZXRfbXVsdGl2YXIoCi0JZ2l0X2NvbmZpZ19iYWNrZW5kICpjZmcsCi0JY29uc3QgY2hhciAqbmFtZSwKLQljb25zdCBjaGFyICpyZWdleF9zdHIsCi0JaW50ICgqZm4pKGNvbnN0IGdpdF9jb25maWdfZW50cnkgKiwgdm9pZCAqKSwKLQl2b2lkICpkYXRhKQotewotCWN2YXJfdCAqdmFyOwotCWRpc2tmaWxlX2JhY2tlbmQgKmIgPSAoZGlza2ZpbGVfYmFja2VuZCAqKWNmZzsKLQljaGFyICprZXk7Ci0Ja2hpdGVyX3QgcG9zOwotCWludCBlcnJvcjsKLQotCWlmICgoZXJyb3IgPSBub3JtYWxpemVfbmFtZShuYW1lLCAma2V5KSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlwb3MgPSBnaXRfc3RybWFwX2xvb2t1cF9pbmRleChiLT52YWx1ZXMsIGtleSk7Ci0JZ2l0X19mcmVlKGtleSk7Ci0KLQlpZiAoIWdpdF9zdHJtYXBfdmFsaWRfaW5kZXgoYi0+dmFsdWVzLCBwb3MpKQotCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKLQogCXZhciA9IGdpdF9zdHJtYXBfdmFsdWVfYXQoYi0+dmFsdWVzLCBwb3MpOworCXdoaWxlICh2YXItPm5leHQpCisJCXZhciA9IHZhci0+bmV4dDsKIAotCWlmIChyZWdleF9zdHIgIT0gTlVMTCkgewotCQlyZWdleF90IHJlZ2V4OwotCQlpbnQgcmVzdWx0OwotCi0JCS8qIHJlZ2V4IG1hdGNoaW5nOyBidWlsZCB0aGUgcmVnZXggKi8KLQkJcmVzdWx0ID0gcmVnY29tcCgmcmVnZXgsIHJlZ2V4X3N0ciwgUkVHX0VYVEVOREVEKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCWdpdGVycl9zZXRfcmVnZXgoJnJlZ2V4LCByZXN1bHQpOwotCQkJcmVnZnJlZSgmcmVnZXgpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJLyogYW5kIHRocm93IHRoZSBjYWxsYmFjayBvbmx5IG9uIHRoZSB2YXJpYWJsZXMgdGhhdAotCQkgKiBtYXRjaCB0aGUgcmVnZXggKi8KLQkJZG8gewotCQkJaWYgKHJlZ2V4ZWMoJnJlZ2V4LCB2YXItPmVudHJ5LT52YWx1ZSwgMCwgTlVMTCwgMCkgPT0gMCkgewotCQkJCS8qIGVhcmx5IHRlcm1pbmF0aW9uIGJ5IHRoZSB1c2VyIGlzIG5vdCBhbiBlcnJvcjsKLQkJCQkgKiBqdXN0IGJyZWFrIGFuZCByZXR1cm4gc3VjY2Vzc2Z1bGx5ICovCi0JCQkJaWYgKGZuKHZhci0+ZW50cnksIGRhdGEpIDwgMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCXZhciA9IHZhci0+bmV4dDsKLQkJfSB3aGlsZSAodmFyICE9IE5VTEwpOwotCQlyZWdmcmVlKCZyZWdleCk7Ci0JfSBlbHNlIHsKLQkJLyogbm8gcmVnZXg7IGdvIHRocm91Z2ggYWxsIHRoZSB2YXJpYWJsZXMgKi8KLQkJZG8gewotCQkJLyogZWFybHkgdGVybWluYXRpb24gYnkgdGhlIHVzZXIgaXMgbm90IGFuIGVycm9yOwotCQkJICoganVzdCBicmVhayBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWxseSAqLwotCQkJaWYgKGZuKHZhci0+ZW50cnksIGRhdGEpIDwgMCkKLQkJCQlicmVhazsKLQotCQkJdmFyID0gdmFyLT5uZXh0OwotCQl9IHdoaWxlICh2YXIgIT0gTlVMTCk7Ci0JfQorCSpvdXQgPSB2YXItPmVudHJ5OwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzcsNyArNDQ0LDcgQEAKIAogCWFzc2VydChyZWdleHApOwogCi0JaWYgKChyZXN1bHQgPSBub3JtYWxpemVfbmFtZShuYW1lLCAma2V5KSkgPCAwKQorCWlmICgocmVzdWx0ID0gZ2l0X2NvbmZpZ19fbm9ybWFsaXplX25hbWUobmFtZSwgJmtleSkpIDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCXBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KGItPnZhbHVlcywga2V5KTsKQEAgLTU1MCw3ICs1MTcsNyBAQAogCWludCByZXN1bHQ7CiAJa2hpdGVyX3QgcG9zOwogCi0JaWYgKChyZXN1bHQgPSBub3JtYWxpemVfbmFtZShuYW1lLCAma2V5KSkgPCAwKQorCWlmICgocmVzdWx0ID0gZ2l0X2NvbmZpZ19fbm9ybWFsaXplX25hbWUobmFtZSwgJmtleSkpIDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCXBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KGItPnZhbHVlcywga2V5KTsKQEAgLTU3Niw2ICs1NDMsODAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGNvbmZpZ19kZWxldGVfbXVsdGl2YXIoZ2l0X2NvbmZpZ19iYWNrZW5kICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCkKK3sKKwljdmFyX3QgKnZhciwgKnByZXYgPSBOVUxMLCAqbmV3X2hlYWQgPSBOVUxMOworCWN2YXJfdCAqKnRvX2RlbGV0ZTsKKwlpbnQgdG9fZGVsZXRlX2lkeDsKKwlkaXNrZmlsZV9iYWNrZW5kICpiID0gKGRpc2tmaWxlX2JhY2tlbmQgKiljZmc7CisJY2hhciAqa2V5OworCXJlZ2V4X3QgcHJlZzsKKwlpbnQgcmVzdWx0OworCWtoaXRlcl90IHBvczsKKworCWlmICgocmVzdWx0ID0gZ2l0X2NvbmZpZ19fbm9ybWFsaXplX25hbWUobmFtZSwgJmtleSkpIDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KGItPnZhbHVlcywga2V5KTsKKworCWlmICghZ2l0X3N0cm1hcF92YWxpZF9pbmRleChiLT52YWx1ZXMsIHBvcykpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfQ09ORklHLCAiQ291bGQgbm90IGZpbmQga2V5ICclcycgdG8gZGVsZXRlIiwgbmFtZSk7CisJCWdpdF9fZnJlZShrZXkpOworCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKKwl9CisKKwl2YXIgPSBnaXRfc3RybWFwX3ZhbHVlX2F0KGItPnZhbHVlcywgcG9zKTsKKworCXJlc3VsdCA9IHJlZ2NvbXAoJnByZWcsIHJlZ2V4cCwgUkVHX0VYVEVOREVEKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlnaXRfX2ZyZWUoa2V5KTsKKwkJZ2l0ZXJyX3NldF9yZWdleCgmcHJlZywgcmVzdWx0KTsKKwkJcmVnZnJlZSgmcHJlZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0b19kZWxldGUgPSBnaXRfX2NhbGxvYyhjdmFyX2xlbmd0aCh2YXIpLCBzaXplb2YoY3Zhcl90ICopKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0ModG9fZGVsZXRlKTsKKwl0b19kZWxldGVfaWR4ID0gMDsKKworCXdoaWxlICh2YXIgIT0gTlVMTCkgeworCQljdmFyX3QgKm5leHQgPSB2YXItPm5leHQ7CisKKwkJaWYgKHJlZ2V4ZWMoJnByZWcsIHZhci0+ZW50cnktPnZhbHVlLCAwLCBOVUxMLCAwKSA9PSAwKSB7CisJCQkvLyBJZiB3ZSBhcmUgcGFzdCB0aGUgaGVhZCwgcmVhdHRhY2ggcHJldmlvdXMgbm9kZSB0byBuZXh0IG9uZSwKKwkJCS8vIG90aGVyd2lzZSBzZXQgdGhlIG5ldyBoZWFkIGZvciB0aGUgc3RybWFwLgorCQkJaWYgKHByZXYgIT0gTlVMTCkgeworCQkJCXByZXYtPm5leHQgPSBuZXh0OworCQkJfSBlbHNlIHsKKwkJCQluZXdfaGVhZCA9IG5leHQ7CisJCQl9CisKKwkJCXRvX2RlbGV0ZVt0b19kZWxldGVfaWR4KytdID0gdmFyOworCQl9IGVsc2UgeworCQkJcHJldiA9IHZhcjsKKwkJfQorCisJCXZhciA9IG5leHQ7CisJfQorCisJaWYgKG5ld19oZWFkICE9IE5VTEwpIHsKKwkJZ2l0X3N0cm1hcF9zZXRfdmFsdWVfYXQoYi0+dmFsdWVzLCBwb3MsIG5ld19oZWFkKTsKKwl9IGVsc2UgeworCQlnaXRfc3RybWFwX2RlbGV0ZV9hdChiLT52YWx1ZXMsIHBvcyk7CisJfQorCisJaWYgKHRvX2RlbGV0ZV9pZHggPiAwKQorCQlyZXN1bHQgPSBjb25maWdfd3JpdGUoYiwga2V5LCAmcHJlZywgTlVMTCk7CisKKwl3aGlsZSAodG9fZGVsZXRlX2lkeC0tID4gMCkKKwkJY3Zhcl9mcmVlKHRvX2RlbGV0ZVt0b19kZWxldGVfaWR4XSk7CisKKwlnaXRfX2ZyZWUoa2V5KTsKKwlnaXRfX2ZyZWUodG9fZGVsZXRlKTsKKwlyZWdmcmVlKCZwcmVnKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBpbnQgZ2l0X2NvbmZpZ19maWxlX19vbmRpc2soZ2l0X2NvbmZpZ19iYWNrZW5kICoqb3V0LCBjb25zdCBjaGFyICpwYXRoKQogewogCWRpc2tmaWxlX2JhY2tlbmQgKmJhY2tlbmQ7CkBAIC01OTAsMTEgKzYzMSwxMSBAQAogCiAJYmFja2VuZC0+cGFyZW50Lm9wZW4gPSBjb25maWdfb3BlbjsKIAliYWNrZW5kLT5wYXJlbnQuZ2V0ID0gY29uZmlnX2dldDsKLQliYWNrZW5kLT5wYXJlbnQuZ2V0X211bHRpdmFyID0gY29uZmlnX2dldF9tdWx0aXZhcjsKIAliYWNrZW5kLT5wYXJlbnQuc2V0ID0gY29uZmlnX3NldDsKIAliYWNrZW5kLT5wYXJlbnQuc2V0X211bHRpdmFyID0gY29uZmlnX3NldF9tdWx0aXZhcjsKIAliYWNrZW5kLT5wYXJlbnQuZGVsID0gY29uZmlnX2RlbGV0ZTsKLQliYWNrZW5kLT5wYXJlbnQuZm9yZWFjaCA9IGZpbGVfZm9yZWFjaDsKKwliYWNrZW5kLT5wYXJlbnQuZGVsX211bHRpdmFyID0gY29uZmlnX2RlbGV0ZV9tdWx0aXZhcjsKKwliYWNrZW5kLT5wYXJlbnQuaXRlcmF0b3IgPSBjb25maWdfaXRlcmF0b3JfbmV3OwogCWJhY2tlbmQtPnBhcmVudC5yZWZyZXNoID0gY29uZmlnX3JlZnJlc2g7CiAJYmFja2VuZC0+cGFyZW50LmZyZWUgPSBiYWNrZW5kX2ZyZWU7CiAKQEAgLTYwMywyNiArNjQ0LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2ZnX2dldGNoYXJfcmF3KGRpc2tmaWxlX2JhY2tlbmQgKmNmZykKK3N0YXRpYyBpbnQgcmVhZGVyX2dldGNoYXJfcmF3KHN0cnVjdCByZWFkZXIgKnJlYWRlcikKIHsKIAlpbnQgYzsKIAotCWMgPSAqY2ZnLT5yZWFkZXIucmVhZF9wdHIrKzsKKwljID0gKnJlYWRlci0+cmVhZF9wdHIrKzsKIAogCS8qCiAJV2luIDMyIGxpbmUgYnJlYWtzOiBpZiB3ZSBmaW5kIGEgXHJcbiBzZXF1ZW5jZSwKIAlyZXR1cm4gb25seSB0aGUgXG4gYXMgYSBuZXdsaW5lCiAJKi8KLQlpZiAoYyA9PSAnXHInICYmICpjZmctPnJlYWRlci5yZWFkX3B0ciA9PSAnXG4nKSB7Ci0JCWNmZy0+cmVhZGVyLnJlYWRfcHRyKys7CisJaWYgKGMgPT0gJ1xyJyAmJiAqcmVhZGVyLT5yZWFkX3B0ciA9PSAnXG4nKSB7CisJCXJlYWRlci0+cmVhZF9wdHIrKzsKIAkJYyA9ICdcbic7CiAJfQogCiAJaWYgKGMgPT0gJ1xuJykKLQkJY2ZnLT5yZWFkZXIubGluZV9udW1iZXIrKzsKKwkJcmVhZGVyLT5saW5lX251bWJlcisrOwogCiAJaWYgKGMgPT0gMCkgewotCQljZmctPnJlYWRlci5lb2YgPSAxOworCQlyZWFkZXItPmVvZiA9IDE7CiAJCWMgPSAnXG4nOwogCX0KIApAQCAtNjMyLDIxICs2NzMsMjMgQEAKICNkZWZpbmUgU0tJUF9XSElURVNQQUNFICgxIDw8IDEpCiAjZGVmaW5lIFNLSVBfQ09NTUVOVFMgKDEgPDwgMikKIAotc3RhdGljIGludCBjZmdfZ2V0Y2hhcihkaXNrZmlsZV9iYWNrZW5kICpjZmdfZmlsZSwgaW50IGZsYWdzKQorc3RhdGljIGludCByZWFkZXJfZ2V0Y2hhcihzdHJ1Y3QgcmVhZGVyICpyZWFkZXIsIGludCBmbGFncykKIHsKIAljb25zdCBpbnQgc2tpcF93aGl0ZXNwYWNlID0gKGZsYWdzICYgU0tJUF9XSElURVNQQUNFKTsKIAljb25zdCBpbnQgc2tpcF9jb21tZW50cyA9IChmbGFncyAmIFNLSVBfQ09NTUVOVFMpOwogCWludCBjOwogCi0JYXNzZXJ0KGNmZ19maWxlLT5yZWFkZXIucmVhZF9wdHIpOworCWFzc2VydChyZWFkZXItPnJlYWRfcHRyKTsKIAotCWRvIGMgPSBjZmdfZ2V0Y2hhcl9yYXcoY2ZnX2ZpbGUpOwotCXdoaWxlIChza2lwX3doaXRlc3BhY2UgJiYgZ2l0X19pc3NwYWNlKGMpICYmCi0JICAgICAgICFjZmdfZmlsZS0+cmVhZGVyLmVvZik7CisJZG8geworCQljID0gcmVhZGVyX2dldGNoYXJfcmF3KHJlYWRlcik7CisJfSB3aGlsZSAoc2tpcF93aGl0ZXNwYWNlICYmIGdpdF9faXNzcGFjZShjKSAmJgorCSAgICAgICAhcmVhZGVyLT5lb2YpOwogCiAJaWYgKHNraXBfY29tbWVudHMgJiYgKGMgPT0gJyMnIHx8IGMgPT0gJzsnKSkgewotCQlkbyBjID0gY2ZnX2dldGNoYXJfcmF3KGNmZ19maWxlKTsKLQkJd2hpbGUgKGMgIT0gJ1xuJyk7CisJCWRvIHsKKwkJCWMgPSByZWFkZXJfZ2V0Y2hhcl9yYXcocmVhZGVyKTsKKwkJfSB3aGlsZSAoYyAhPSAnXG4nKTsKIAl9CiAKIAlyZXR1cm4gYzsKQEAgLTY1NSwyMyArNjk4LDIzIEBACiAvKgogICogUmVhZCB0aGUgbmV4dCBjaGFyLCBidXQgZG9uJ3QgbW92ZSB0aGUgcmVhZGluZyBwb2ludGVyLgogICovCi1zdGF0aWMgaW50IGNmZ19wZWVrKGRpc2tmaWxlX2JhY2tlbmQgKmNmZywgaW50IGZsYWdzKQorc3RhdGljIGludCByZWFkZXJfcGVlayhzdHJ1Y3QgcmVhZGVyICpyZWFkZXIsIGludCBmbGFncykKIHsKIAl2b2lkICpvbGRfcmVhZF9wdHI7CiAJaW50IG9sZF9saW5lbm8sIG9sZF9lb2Y7CiAJaW50IHJldDsKIAotCWFzc2VydChjZmctPnJlYWRlci5yZWFkX3B0cik7CisJYXNzZXJ0KHJlYWRlci0+cmVhZF9wdHIpOwogCi0Jb2xkX3JlYWRfcHRyID0gY2ZnLT5yZWFkZXIucmVhZF9wdHI7Ci0Jb2xkX2xpbmVubyA9IGNmZy0+cmVhZGVyLmxpbmVfbnVtYmVyOwotCW9sZF9lb2YgPSBjZmctPnJlYWRlci5lb2Y7CisJb2xkX3JlYWRfcHRyID0gcmVhZGVyLT5yZWFkX3B0cjsKKwlvbGRfbGluZW5vID0gcmVhZGVyLT5saW5lX251bWJlcjsKKwlvbGRfZW9mID0gcmVhZGVyLT5lb2Y7CiAKLQlyZXQgPSBjZmdfZ2V0Y2hhcihjZmcsIGZsYWdzKTsKKwlyZXQgPSByZWFkZXJfZ2V0Y2hhcihyZWFkZXIsIGZsYWdzKTsKIAotCWNmZy0+cmVhZGVyLnJlYWRfcHRyID0gb2xkX3JlYWRfcHRyOwotCWNmZy0+cmVhZGVyLmxpbmVfbnVtYmVyID0gb2xkX2xpbmVubzsKLQljZmctPnJlYWRlci5lb2YgPSBvbGRfZW9mOworCXJlYWRlci0+cmVhZF9wdHIgPSBvbGRfcmVhZF9wdHI7CisJcmVhZGVyLT5saW5lX251bWJlciA9IG9sZF9saW5lbm87CisJcmVhZGVyLT5lb2YgPSBvbGRfZW9mOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY3OSwxMyArNzIyLDEzIEBACiAvKgogICogUmVhZCBhbmQgY29uc3VtZSBhIGxpbmUsIHJldHVybmluZyBpdCBpbiBuZXdseS1hbGxvY2F0ZWQgbWVtb3J5LgogICovCi1zdGF0aWMgY2hhciAqY2ZnX3JlYWRsaW5lKGRpc2tmaWxlX2JhY2tlbmQgKmNmZywgYm9vbCBza2lwX3doaXRlc3BhY2UpCitzdGF0aWMgY2hhciAqcmVhZGVyX3JlYWRsaW5lKHN0cnVjdCByZWFkZXIgKnJlYWRlciwgYm9vbCBza2lwX3doaXRlc3BhY2UpCiB7CiAJY2hhciAqbGluZSA9IE5VTEw7CiAJY2hhciAqbGluZV9zcmMsICpsaW5lX2VuZDsKIAlzaXplX3QgbGluZV9sZW47CiAKLQlsaW5lX3NyYyA9IGNmZy0+cmVhZGVyLnJlYWRfcHRyOworCWxpbmVfc3JjID0gcmVhZGVyLT5yZWFkX3B0cjsKIAogCWlmIChza2lwX3doaXRlc3BhY2UpIHsKIAkJLyogU2tpcCBlbXB0eSBlbXB0eSBsaW5lcyAqLwpAQCAtNzE0LDEwICs3NTcsMTAgQEAKIAkJbGluZV9lbmQrKzsKIAogCWlmICgqbGluZV9lbmQgPT0gJ1wwJykKLQkJY2ZnLT5yZWFkZXIuZW9mID0gMTsKKwkJcmVhZGVyLT5lb2YgPSAxOwogCi0JY2ZnLT5yZWFkZXIubGluZV9udW1iZXIrKzsKLQljZmctPnJlYWRlci5yZWFkX3B0ciA9IGxpbmVfZW5kOworCXJlYWRlci0+bGluZV9udW1iZXIrKzsKKwlyZWFkZXItPnJlYWRfcHRyID0gbGluZV9lbmQ7CiAKIAlyZXR1cm4gbGluZTsKIH0KQEAgLTcyNSwxMSArNzY4LDExIEBACiAvKgogICogQ29uc3VtZSBhIGxpbmUsIHdpdGhvdXQgc3RvcmluZyBpdCBhbnl3aGVyZQogICovCi1zdGF0aWMgdm9pZCBjZmdfY29uc3VtZV9saW5lKGRpc2tmaWxlX2JhY2tlbmQgKmNmZykKK3N0YXRpYyB2b2lkIHJlYWRlcl9jb25zdW1lX2xpbmUoc3RydWN0IHJlYWRlciAqcmVhZGVyKQogewogCWNoYXIgKmxpbmVfc3RhcnQsICpsaW5lX2VuZDsKIAotCWxpbmVfc3RhcnQgPSBjZmctPnJlYWRlci5yZWFkX3B0cjsKKwlsaW5lX3N0YXJ0ID0gcmVhZGVyLT5yZWFkX3B0cjsKIAlsaW5lX2VuZCA9IHN0cmNocihsaW5lX3N0YXJ0LCAnXG4nKTsKIAkvKiBObyBuZXdsaW5lIGF0IEVPRiAqLwogCWlmKGxpbmVfZW5kID09IE5VTEwpewpAQCAtNzQwLDEwICs3ODMsMTAgQEAKIAkJbGluZV9lbmQrKzsKIAogCWlmICgqbGluZV9lbmQgPT0gJ1wwJykKLQkJY2ZnLT5yZWFkZXIuZW9mID0gMTsKKwkJcmVhZGVyLT5lb2YgPSAxOwogCi0JY2ZnLT5yZWFkZXIubGluZV9udW1iZXIrKzsKLQljZmctPnJlYWRlci5yZWFkX3B0ciA9IGxpbmVfZW5kOworCXJlYWRlci0+bGluZV9udW1iZXIrKzsKKwlyZWFkZXItPnJlYWRfcHRyID0gbGluZV9lbmQ7CiB9CiAKIEdJVF9JTkxJTkUoaW50KSBjb25maWdfa2V5Y2hhcihpbnQgYykKQEAgLTc1MSwxMiArNzk0LDExIEBACiAJcmV0dXJuIGlzYWxudW0oYykgfHwgYyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2Vfc2VjdGlvbl9oZWFkZXJfZXh0KGRpc2tmaWxlX2JhY2tlbmQgKmNmZywgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqYmFzZV9uYW1lLCBjaGFyICoqc2VjdGlvbl9uYW1lKQorc3RhdGljIGludCBwYXJzZV9zZWN0aW9uX2hlYWRlcl9leHQoc3RydWN0IHJlYWRlciAqcmVhZGVyLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpiYXNlX25hbWUsIGNoYXIgKipzZWN0aW9uX25hbWUpCiB7CiAJaW50IGMsIHJwb3M7CiAJY2hhciAqZmlyc3RfcXVvdGUsICpsYXN0X3F1b3RlOwogCWdpdF9idWYgYnVmID0gR0lUX0JVRl9JTklUOwotCWludCBxdW90ZV9tYXJrczsKIAkvKgogCSAqIGJhc2VfbmFtZSBpcyB3aGF0IGNhbWUgYmVmb3JlIHRoZSBzcGFjZS4gV2Ugc2hvdWxkIGJlIGF0IHRoZQogCSAqIGZpcnN0IHF1b3RhdGlvbiBtYXJrLCBleGNlcHQgZm9yIG5vdywgbGluZSBpc24ndCBiZWluZyBrZXB0IGluCkBAIC03NjcsNyArODA5LDcgQEAKIAlsYXN0X3F1b3RlID0gc3RycmNocihsaW5lLCAnIicpOwogCiAJaWYgKGxhc3RfcXVvdGUgLSBmaXJzdF9xdW90ZSA9PSAwKSB7Ci0JCXNldF9wYXJzZV9lcnJvcihjZmcsIDAsICJNaXNzaW5nIGNsb3NpbmcgcXVvdGF0aW9uIG1hcmsgaW4gc2VjdGlvbiBoZWFkZXIiKTsKKwkJc2V0X3BhcnNlX2Vycm9yKHJlYWRlciwgMCwgIk1pc3NpbmcgY2xvc2luZyBxdW90YXRpb24gbWFyayBpbiBzZWN0aW9uIGhlYWRlciIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03NzUsMzcgKzgxNywzMCBAQAogCWdpdF9idWZfcHJpbnRmKCZidWYsICIlcy4iLCBiYXNlX25hbWUpOwogCiAJcnBvcyA9IDA7Ci0JcXVvdGVfbWFya3MgPSAwOwogCiAJbGluZSA9IGZpcnN0X3F1b3RlOwotCWMgPSBsaW5lW3Jwb3MrK107CisJYyA9IGxpbmVbKytycG9zXTsKIAogCS8qCiAJICogQXQgdGhlIGVuZCBvZiBlYWNoIGl0ZXJhdGlvbiwgd2hhdGV2ZXIgaXMgc3RvcmVkIGluIGMgd2lsbCBiZQogCSAqIGFkZGVkIHRvIHRoZSBzdHJpbmcuIEluIGNhc2Ugb2YgZXJyb3IsIGp1bXAgdG8gb3V0CiAJICovCiAJZG8gewotCQlpZiAocXVvdGVfbWFya3MgPT0gMikgewotCQkJc2V0X3BhcnNlX2Vycm9yKGNmZywgcnBvcywgIlVuZXhwZWN0ZWQgdGV4dCBhZnRlciBjbG9zaW5nIHF1b3RlcyIpOwotCQkJZ2l0X2J1Zl9mcmVlKCZidWYpOwotCQkJcmV0dXJuIC0xOwotCQl9CiAKIAkJc3dpdGNoIChjKSB7CisJCWNhc2UgMDoKKwkJCXNldF9wYXJzZV9lcnJvcihyZWFkZXIsIDAsICJVbmV4cGVjdGVkIGVuZC1vZi1saW5lIGluIHNlY3Rpb24gaGVhZGVyIik7CisJCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJCQlyZXR1cm4gLTE7CisKIAkJY2FzZSAnIic6Ci0JCQkrK3F1b3RlX21hcmtzOwotCQkJY29udGludWU7CisJCQlnb3RvIGVuZF9wYXJzZTsKIAogCQljYXNlICdcXCc6Ci0JCQljID0gbGluZVtycG9zKytdOworCQkJYyA9IGxpbmVbKytycG9zXTsKIAotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICciJzoKLQkJCWNhc2UgJ1xcJzoKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlzZXRfcGFyc2VfZXJyb3IoY2ZnLCBycG9zLCAiVW5zdXBwb3J0ZWQgZXNjYXBlIHNlcXVlbmNlIik7CisJCQlpZiAoYyA9PSAwKSB7CisJCQkJc2V0X3BhcnNlX2Vycm9yKHJlYWRlciwgcnBvcywgIlVuZXhwZWN0ZWQgZW5kLW9mLWxpbmUgaW4gc2VjdGlvbiBoZWFkZXIiKTsKIAkJCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQpAQCAtODE0LDI5ICs4NDksMzcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJZ2l0X2J1Zl9wdXRjKCZidWYsIGMpOwotCX0gd2hpbGUgKChjID0gbGluZVtycG9zKytdKSAhPSAnXScpOworCQlnaXRfYnVmX3B1dGMoJmJ1ZiwgKGNoYXIpYyk7CisJCWMgPSBsaW5lWysrcnBvc107CisJfSB3aGlsZSAobGluZSArIHJwb3MgPCBsYXN0X3F1b3RlKTsKKworZW5kX3BhcnNlOgorCWlmIChsaW5lW3Jwb3NdICE9ICciJyB8fCBsaW5lW3Jwb3MgKyAxXSAhPSAnXScpIHsKKwkJc2V0X3BhcnNlX2Vycm9yKHJlYWRlciwgcnBvcywgIlVuZXhwZWN0ZWQgdGV4dCBhZnRlciBjbG9zaW5nIHF1b3RlcyIpOworCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJCXJldHVybiAtMTsKKwl9CiAKIAkqc2VjdGlvbl9uYW1lID0gZ2l0X2J1Zl9kZXRhY2goJmJ1Zik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2Vfc2VjdGlvbl9oZWFkZXIoZGlza2ZpbGVfYmFja2VuZCAqY2ZnLCBjaGFyICoqc2VjdGlvbl9vdXQpCitzdGF0aWMgaW50IHBhcnNlX3NlY3Rpb25faGVhZGVyKHN0cnVjdCByZWFkZXIgKnJlYWRlciwgY2hhciAqKnNlY3Rpb25fb3V0KQogewogCWNoYXIgKm5hbWUsICpuYW1lX2VuZDsKIAlpbnQgbmFtZV9sZW5ndGgsIGMsIHBvczsKIAlpbnQgcmVzdWx0OwogCWNoYXIgKmxpbmU7CiAKLQlsaW5lID0gY2ZnX3JlYWRsaW5lKGNmZywgdHJ1ZSk7CisJbGluZSA9IHJlYWRlcl9yZWFkbGluZShyZWFkZXIsIHRydWUpOwogCWlmIChsaW5lID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAogCS8qIGZpbmQgdGhlIGVuZCBvZiB0aGUgdmFyaWFibGUncyBuYW1lICovCi0JbmFtZV9lbmQgPSBzdHJjaHIobGluZSwgJ10nKTsKKwluYW1lX2VuZCA9IHN0cnJjaHIobGluZSwgJ10nKTsKIAlpZiAobmFtZV9lbmQgPT0gTlVMTCkgewogCQlnaXRfX2ZyZWUobGluZSk7Ci0JCXNldF9wYXJzZV9lcnJvcihjZmcsIDAsICJNaXNzaW5nICddJyBpbiBzZWN0aW9uIGhlYWRlciIpOworCQlzZXRfcGFyc2VfZXJyb3IocmVhZGVyLCAwLCAiTWlzc2luZyAnXScgaW4gc2VjdGlvbiBoZWFkZXIiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODU1LDE0ICs4OTgsMTQgQEAKIAlkbyB7CiAJCWlmIChnaXRfX2lzc3BhY2UoYykpewogCQkJbmFtZVtuYW1lX2xlbmd0aF0gPSAnXDAnOwotCQkJcmVzdWx0ID0gcGFyc2Vfc2VjdGlvbl9oZWFkZXJfZXh0KGNmZywgbGluZSwgbmFtZSwgc2VjdGlvbl9vdXQpOworCQkJcmVzdWx0ID0gcGFyc2Vfc2VjdGlvbl9oZWFkZXJfZXh0KHJlYWRlciwgbGluZSwgbmFtZSwgc2VjdGlvbl9vdXQpOwogCQkJZ2l0X19mcmVlKGxpbmUpOwogCQkJZ2l0X19mcmVlKG5hbWUpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfQogCiAJCWlmICghY29uZmlnX2tleWNoYXIoYykgJiYgYyAhPSAnLicpIHsKLQkJCXNldF9wYXJzZV9lcnJvcihjZmcsIHBvcywgIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGhlYWRlciIpOworCQkJc2V0X3BhcnNlX2Vycm9yKHJlYWRlciwgcG9zLCAiVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIik7CiAJCQlnb3RvIGZhaWxfcGFyc2U7CiAJCX0KIApAQCAtODcxLDcgKzkxNCw3IEBACiAJfSB3aGlsZSAoKGMgPSBsaW5lW3BvcysrXSkgIT0gJ10nKTsKIAogCWlmIChsaW5lW3BvcyAtIDFdICE9ICddJykgewotCQlzZXRfcGFyc2VfZXJyb3IoY2ZnLCBwb3MsICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CisJCXNldF9wYXJzZV9lcnJvcihyZWFkZXIsIHBvcywgIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKIAkJZ290byBmYWlsX3BhcnNlOwogCX0KIApAQCAtODg4LDE0ICs5MzEsMTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgc2tpcF9ib20oZGlza2ZpbGVfYmFja2VuZCAqY2ZnKQorc3RhdGljIGludCBza2lwX2JvbShzdHJ1Y3QgcmVhZGVyICpyZWFkZXIpCiB7CiAJZ2l0X2JvbV90IGJvbTsKIAlpbnQgYm9tX29mZnNldCA9IGdpdF9idWZfdGV4dF9kZXRlY3RfYm9tKCZib20sCi0JCSZjZmctPnJlYWRlci5idWZmZXIsIGNmZy0+cmVhZGVyLnJlYWRfcHRyIC0gY2ZnLT5yZWFkZXIuYnVmZmVyLnB0cik7CisJCSZyZWFkZXItPmJ1ZmZlciwgcmVhZGVyLT5yZWFkX3B0ciAtIHJlYWRlci0+YnVmZmVyLnB0cik7CiAKIAlpZiAoYm9tID09IEdJVF9CT01fVVRGOCkKLQkJY2ZnLT5yZWFkZXIucmVhZF9wdHIgKz0gYm9tX29mZnNldDsKKwkJcmVhZGVyLT5yZWFkX3B0ciArPSBib21fb2Zmc2V0OwogCiAJLyogVE9ETzogcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGlzIHByZXR0eSBzdHVwaWQgd2l0aCBCb00gKi8KIApAQCAtOTY1LDcgKzEwMDgsMTYgQEAKIAlyZXR1cm4gcXVvdGVfY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgY29uZmlnX3BhcnNlKGRpc2tmaWxlX2JhY2tlbmQgKmNmZ19maWxlLCBnaXRfY29uZmlnX2xldmVsX3QgbGV2ZWwpCitzdGF0aWMgaW50IGluY2x1ZGVkX3BhdGgoZ2l0X2J1ZiAqb3V0LCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJLyogRnJvbSB0aGUgdXNlcidzIGhvbWUgKi8KKwlpZiAocGF0aFswXSA9PSAnficgJiYgcGF0aFsxXSA9PSAnLycpCisJCXJldHVybiBnaXRfZnV0aWxzX2ZpbmRfZ2xvYmFsX2ZpbGUob3V0LCAmcGF0aFsxXSk7CisKKwlyZXR1cm4gZ2l0X3BhdGhfam9pbl91bnJvb3RlZChvdXQsIHBhdGgsIGRpciwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX3BhcnNlKGRpc2tmaWxlX2JhY2tlbmQgKmNmZ19maWxlLCBzdHJ1Y3QgcmVhZGVyICpyZWFkZXIsIGdpdF9jb25maWdfbGV2ZWxfdCBsZXZlbCwgaW50IGRlcHRoKQogewogCWludCBjOwogCWNoYXIgKmN1cnJlbnRfc2VjdGlvbiA9IE5VTEw7CkBAIC05NzUsMzkgKzEwMjcsNDYgQEAKIAlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKIAlpbnQgcmVzdWx0ID0gMDsKIAlraGl0ZXJfdCBwb3M7CisJdWludDMyX3QgcmVhZGVyX2lkeDsKIAorCWlmIChkZXB0aCA+PSBNQVhfSU5DTFVERV9ERVBUSCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9DT05GSUcsICJNYXhpbXVtIGNvbmZpZyBpbmNsdWRlIGRlcHRoIHJlYWNoZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlYWRlcl9pZHggPSBnaXRfYXJyYXlfc2l6ZShjZmdfZmlsZS0+cmVhZGVycykgLSAxOwogCS8qIEluaXRpYWxpemUgdGhlIHJlYWRpbmcgcG9zaXRpb24gKi8KLQljZmdfZmlsZS0+cmVhZGVyLnJlYWRfcHRyID0gY2ZnX2ZpbGUtPnJlYWRlci5idWZmZXIucHRyOwotCWNmZ19maWxlLT5yZWFkZXIuZW9mID0gMDsKKwlyZWFkZXItPnJlYWRfcHRyID0gcmVhZGVyLT5idWZmZXIucHRyOworCXJlYWRlci0+ZW9mID0gMDsKIAogCS8qIElmIHRoZSBmaWxlIGlzIGVtcHR5LCB0aGVyZSdzIG5vdGhpbmcgZm9yIHVzIHRvIGRvICovCi0JaWYgKCpjZmdfZmlsZS0+cmVhZGVyLnJlYWRfcHRyID09ICdcMCcpCisJaWYgKCpyZWFkZXItPnJlYWRfcHRyID09ICdcMCcpCiAJCXJldHVybiAwOwogCi0Jc2tpcF9ib20oY2ZnX2ZpbGUpOworCXNraXBfYm9tKHJlYWRlcik7CiAKLQl3aGlsZSAocmVzdWx0ID09IDAgJiYgIWNmZ19maWxlLT5yZWFkZXIuZW9mKSB7CisJd2hpbGUgKHJlc3VsdCA9PSAwICYmICFyZWFkZXItPmVvZikgewogCi0JCWMgPSBjZmdfcGVlayhjZmdfZmlsZSwgU0tJUF9XSElURVNQQUNFKTsKKwkJYyA9IHJlYWRlcl9wZWVrKHJlYWRlciwgU0tJUF9XSElURVNQQUNFKTsKIAogCQlzd2l0Y2ggKGMpIHsKIAkJY2FzZSAnXG4nOiAvKiBFT0Ygd2hlbiBwZWVraW5nLCBzZXQgRU9GIGluIHRoZSByZWFkZXIgdG8gZXhpdCB0aGUgbG9vcCAqLwotCQkJY2ZnX2ZpbGUtPnJlYWRlci5lb2YgPSAxOworCQkJcmVhZGVyLT5lb2YgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnWyc6IC8qIHNlY3Rpb24gaGVhZGVyLCBuZXcgc2VjdGlvbiBiZWdpbnMgKi8KIAkJCWdpdF9fZnJlZShjdXJyZW50X3NlY3Rpb24pOwogCQkJY3VycmVudF9zZWN0aW9uID0gTlVMTDsKLQkJCXJlc3VsdCA9IHBhcnNlX3NlY3Rpb25faGVhZGVyKGNmZ19maWxlLCAmY3VycmVudF9zZWN0aW9uKTsKKwkJCXJlc3VsdCA9IHBhcnNlX3NlY3Rpb25faGVhZGVyKHJlYWRlciwgJmN1cnJlbnRfc2VjdGlvbik7CiAJCQlicmVhazsKIAogCQljYXNlICc7JzoKIAkJY2FzZSAnIyc6Ci0JCQljZmdfY29uc3VtZV9saW5lKGNmZ19maWxlKTsKKwkJCXJlYWRlcl9jb25zdW1lX2xpbmUocmVhZGVyKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6IC8qIGFzc3VtZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiAqLwotCQkJcmVzdWx0ID0gcGFyc2VfdmFyaWFibGUoY2ZnX2ZpbGUsICZ2YXJfbmFtZSwgJnZhcl92YWx1ZSk7CisJCQlyZXN1bHQgPSBwYXJzZV92YXJpYWJsZShyZWFkZXIsICZ2YXJfbmFtZSwgJnZhcl92YWx1ZSk7CiAJCQlpZiAocmVzdWx0IDwgMCkKIAkJCQlicmVhazsKIApAQCAtMTAyOCw2ICsxMDg3LDcgQEAKIAkJCXZhci0+ZW50cnktPm5hbWUgPSBnaXRfYnVmX2RldGFjaCgmYnVmKTsKIAkJCXZhci0+ZW50cnktPnZhbHVlID0gdmFyX3ZhbHVlOwogCQkJdmFyLT5lbnRyeS0+bGV2ZWwgPSBsZXZlbDsKKwkJCXZhci0+aW5jbHVkZWQgPSAhIWRlcHRoOwogCiAJCQkvKiBBZGQgb3IgYXBwZW5kIHRoZSBuZXcgY29uZmlnIG9wdGlvbiAqLwogCQkJcG9zID0gZ2l0X3N0cm1hcF9sb29rdXBfaW5kZXgoY2ZnX2ZpbGUtPnZhbHVlcywgdmFyLT5lbnRyeS0+bmFtZSk7CkBAIC0xMDQ0LDYgKzExMDQsNDIgQEAKIAkJCQlleGlzdGluZy0+bmV4dCA9IHZhcjsKIAkJCX0KIAorCQkJaWYgKCFnaXRfX3N0cmNtcCh2YXItPmVudHJ5LT5uYW1lLCAiaW5jbHVkZS5wYXRoIikpIHsKKwkJCQlzdHJ1Y3QgcmVhZGVyICpyOworCQkJCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwkJCQljaGFyICpkaXI7CisJCQkJdWludDMyX3QgaW5kZXg7CisKKwkJCQlyID0gZ2l0X2FycmF5X2FsbG9jKGNmZ19maWxlLT5yZWFkZXJzKTsKKwkJCQkvKiBUaGUgcmVhZGVyIG1heSBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgKi8KKwkJCQlyZWFkZXIgPSBnaXRfYXJyYXlfZ2V0KGNmZ19maWxlLT5yZWFkZXJzLCByZWFkZXJfaWR4KTsKKwkJCQltZW1zZXQociwgMCwgc2l6ZW9mKHN0cnVjdCByZWFkZXIpKTsKKwkJCQlpZiAoKHJlc3VsdCA9IGdpdF9wYXRoX2Rpcm5hbWVfcigmcGF0aCwgcmVhZGVyLT5maWxlX3BhdGgpKSA8IDApCisJCQkJCWJyZWFrOworCisJCQkJLyogV2UgbmVlZCB0byBrbm93IG91dCBpbmRleCBpbiB0aGUgYXJyYXksIGFzIHRoZSBuZXh0IGNvbmZpZ19wYXJzZSBjYWxsIG1heSByZWFsbG9jICovCisJCQkJaW5kZXggPSBnaXRfYXJyYXlfc2l6ZShjZmdfZmlsZS0+cmVhZGVycykgLSAxOworCQkJCWRpciA9IGdpdF9idWZfZGV0YWNoKCZwYXRoKTsKKwkJCQlyZXN1bHQgPSBpbmNsdWRlZF9wYXRoKCZwYXRoLCBkaXIsIHZhci0+ZW50cnktPnZhbHVlKTsKKwkJCQlnaXRfX2ZyZWUoZGlyKTsKKworCQkJCWlmIChyZXN1bHQgPCAwKQorCQkJCQlicmVhazsKKworCQkJCXItPmZpbGVfcGF0aCA9IGdpdF9idWZfZGV0YWNoKCZwYXRoKTsKKwkJCQlnaXRfYnVmX2luaXQoJnItPmJ1ZmZlciwgMCk7CisJCQkJaWYgKChyZXN1bHQgPSBnaXRfZnV0aWxzX3JlYWRidWZmZXJfdXBkYXRlZCgmci0+YnVmZmVyLCByLT5maWxlX3BhdGgsICZyLT5maWxlX210aW1lLAorCQkJCQkJCQkJICAgICZyLT5maWxlX3NpemUsIE5VTEwpKSA8IDApCisJCQkJCWJyZWFrOworCisJCQkJcmVzdWx0ID0gY29uZmlnX3BhcnNlKGNmZ19maWxlLCByLCBsZXZlbCwgZGVwdGgrMSk7CisJCQkJciA9IGdpdF9hcnJheV9nZXQoY2ZnX2ZpbGUtPnJlYWRlcnMsIGluZGV4KTsKKwkJCQlnaXRfYnVmX2ZyZWUoJnItPmJ1ZmZlcik7CisKKwkJCQlpZiAocmVzdWx0IDwgMCkKKwkJCQkJYnJlYWs7CisJCQl9CisKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTA4Miw2ICsxMTc4LDI0IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKnF1b3Rlc19mb3JfdmFsdWUoY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqcHRyOworCisJaWYgKHZhbHVlWzBdID09ICcgJyB8fCB2YWx1ZVswXSA9PSAnXDAnKQorCQlyZXR1cm4gIlwiIjsKKworCWZvciAocHRyID0gdmFsdWU7ICpwdHI7ICsrcHRyKSB7CisJCWlmICgqcHRyID09ICc7JyB8fCAqcHRyID09ICcjJykKKwkJCXJldHVybiAiXCIiOworCX0KKworCWlmIChwdHJbLTFdID09ICcgJykKKwkJcmV0dXJuICJcIiI7CisKKwlyZXR1cm4gIiI7Cit9CisKIC8qCiAgKiBUaGlzIGlzIHByZXR0eSBtdWNoIHRoZSBwYXJzaW5nLCBleGNlcHQgd2Ugd3JpdGUgb3V0IGFueXRoaW5nIHdlIGRvbid0IGhhdmUKICAqLwpAQCAtMTA4OSwzOCArMTIwMyw0NCBAQAogewogCWludCByZXN1bHQsIGM7CiAJaW50IHNlY3Rpb25fbWF0Y2hlcyA9IDAsIGxhc3Rfc2VjdGlvbl9tYXRjaGVkID0gMCwgcHJlZ19yZXBsYWNlZCA9IDAsIHdyaXRlX3RyYWlsZXIgPSAwOwotCWNvbnN0IGNoYXIgKnByZV9lbmQgPSBOVUxMLCAqcG9zdF9zdGFydCA9IE5VTEwsICpkYXRhX3N0YXJ0OworCWNvbnN0IGNoYXIgKnByZV9lbmQgPSBOVUxMLCAqcG9zdF9zdGFydCA9IE5VTEwsICpkYXRhX3N0YXJ0LCAqd3JpdGVfc3RhcnQ7CiAJY2hhciAqY3VycmVudF9zZWN0aW9uID0gTlVMTCwgKnNlY3Rpb24sICpuYW1lLCAqbGRvdDsKIAlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVhZGVyICpyZWFkZXIgPSBnaXRfYXJyYXlfZ2V0KGNmZy0+cmVhZGVycywgMCk7CiAKIAkvKiBXZSBuZWVkIHRvIHJlYWQgaW4gb3VyIG93biBjb25maWcgZmlsZSAqLwotCXJlc3VsdCA9IGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcigmY2ZnLT5yZWFkZXIuYnVmZmVyLCBjZmctPmZpbGVfcGF0aCk7CisJcmVzdWx0ID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZyZWFkZXItPmJ1ZmZlciwgY2ZnLT5maWxlX3BhdGgpOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgcmVhZGluZyBwb3NpdGlvbiAqLwogCWlmIChyZXN1bHQgPT0gR0lUX0VOT1RGT1VORCkgewotCQljZmctPnJlYWRlci5yZWFkX3B0ciA9IE5VTEw7Ci0JCWNmZy0+cmVhZGVyLmVvZiA9IDE7CisJCXJlYWRlci0+cmVhZF9wdHIgPSBOVUxMOworCQlyZWFkZXItPmVvZiA9IDE7CiAJCWRhdGFfc3RhcnQgPSBOVUxMOwotCQlnaXRfYnVmX2NsZWFyKCZjZmctPnJlYWRlci5idWZmZXIpOworCQlnaXRfYnVmX2NsZWFyKCZyZWFkZXItPmJ1ZmZlcik7CiAJfSBlbHNlIGlmIChyZXN1bHQgPT0gMCkgewotCQljZmctPnJlYWRlci5yZWFkX3B0ciA9IGNmZy0+cmVhZGVyLmJ1ZmZlci5wdHI7Ci0JCWNmZy0+cmVhZGVyLmVvZiA9IDA7Ci0JCWRhdGFfc3RhcnQgPSBjZmctPnJlYWRlci5yZWFkX3B0cjsKKwkJcmVhZGVyLT5yZWFkX3B0ciA9IHJlYWRlci0+YnVmZmVyLnB0cjsKKwkJcmVhZGVyLT5lb2YgPSAwOworCQlkYXRhX3N0YXJ0ID0gcmVhZGVyLT5yZWFkX3B0cjsKIAl9IGVsc2UgewogCQlyZXR1cm4gLTE7IC8qIE9TIGVycm9yIHdoZW4gcmVhZGluZyB0aGUgZmlsZSAqLwogCX0KIAotCS8qIExvY2sgdGhlIGZpbGUgKi8KLQlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgY2ZnLT5maWxlX3BhdGgsIDApIDwgMCkKLQkJcmV0dXJuIC0xOworCXdyaXRlX3N0YXJ0ID0gZGF0YV9zdGFydDsKIAotCXNraXBfYm9tKGNmZyk7CisJLyogTG9jayB0aGUgZmlsZSAqLworCWlmICgocmVzdWx0ID0gZ2l0X2ZpbGVidWZfb3BlbigKKwkJJmZpbGUsIGNmZy0+ZmlsZV9wYXRoLCAwLCBHSVRfQ09ORklHX0ZJTEVfTU9ERSkpIDwgMCkgeworCQkJZ2l0X2J1Zl9mcmVlKCZyZWFkZXItPmJ1ZmZlcik7CisJCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXNraXBfYm9tKHJlYWRlcik7CiAJbGRvdCA9IHN0cnJjaHIoa2V5LCAnLicpOwogCW5hbWUgPSBsZG90ICsgMTsKIAlzZWN0aW9uID0gZ2l0X19zdHJuZHVwKGtleSwgbGRvdCAtIGtleSk7CiAKLQl3aGlsZSAoIWNmZy0+cmVhZGVyLmVvZikgewotCQljID0gY2ZnX3BlZWsoY2ZnLCBTS0lQX1dISVRFU1BBQ0UpOworCXdoaWxlICghcmVhZGVyLT5lb2YpIHsKKwkJYyA9IHJlYWRlcl9wZWVrKHJlYWRlciwgU0tJUF9XSElURVNQQUNFKTsKIAogCQlpZiAoYyA9PSAnXDAnKSB7IC8qIFdlJ3ZlIGFycml2ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSAqLwogCQkJYnJlYWs7CkBAIC0xMTMzLDExICsxMjUzLDExIEBACiAJCQkgKiBuZXcgc2VjdGlvbi4gSWYgd2UgYWN0dWFsbHkgd2FudCB0byByZXBsYWNlIGl0LCB0aGUKIAkJCSAqIGRlZmF1bHQgY2FzZSB3aWxsIHRha2UgY2FyZSBvZiB1cGRhdGluZyB0aGVtLgogCQkJICovCi0JCQlwcmVfZW5kID0gcG9zdF9zdGFydCA9IGNmZy0+cmVhZGVyLnJlYWRfcHRyOworCQkJcHJlX2VuZCA9IHBvc3Rfc3RhcnQgPSByZWFkZXItPnJlYWRfcHRyOwogCiAJCQlnaXRfX2ZyZWUoY3VycmVudF9zZWN0aW9uKTsKIAkJCWN1cnJlbnRfc2VjdGlvbiA9IE5VTEw7Ci0JCQlpZiAocGFyc2Vfc2VjdGlvbl9oZWFkZXIoY2ZnLCAmY3VycmVudF9zZWN0aW9uKSA8IDApCisJCQlpZiAocGFyc2Vfc2VjdGlvbl9oZWFkZXIocmVhZGVyLCAmY3VycmVudF9zZWN0aW9uKSA8IDApCiAJCQkJZ290byByZXdyaXRlX2ZhaWw7CiAKIAkJCS8qIEtlZXAgdHJhY2sgb2Ygd2hlbiBpdCBzdG9wcyBtYXRjaGluZyAqLwpAQCAtMTE0Niw3ICsxMjY2LDcgQEAKIAkJfQogCiAJCWVsc2UgaWYgKGMgPT0gJzsnIHx8IGMgPT0gJyMnKSB7Ci0JCQljZmdfY29uc3VtZV9saW5lKGNmZyk7CisJCQlyZWFkZXJfY29uc3VtZV9saW5lKHJlYWRlcik7CiAJCX0KIAogCQllbHNlIHsKQEAgLTExNjIsMTUgKzEyODIsMTUgQEAKIAkJCSAqLwogCQkJaWYgKCFzZWN0aW9uX21hdGNoZXMpIHsKIAkJCQlpZiAoIWxhc3Rfc2VjdGlvbl9tYXRjaGVkKSB7Ci0JCQkJCWNmZ19jb25zdW1lX2xpbmUoY2ZnKTsKKwkJCQkJcmVhZGVyX2NvbnN1bWVfbGluZShyZWFkZXIpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWludCBoYXNfbWF0Y2hlZCA9IDA7CiAJCQkJY2hhciAqdmFyX25hbWUsICp2YXJfdmFsdWU7CiAKLQkJCQlwcmVfZW5kID0gY2ZnLT5yZWFkZXIucmVhZF9wdHI7Ci0JCQkJaWYgKHBhcnNlX3ZhcmlhYmxlKGNmZywgJnZhcl9uYW1lLCAmdmFyX3ZhbHVlKSA8IDApCisJCQkJcHJlX2VuZCA9IHJlYWRlci0+cmVhZF9wdHI7CisJCQkJaWYgKHBhcnNlX3ZhcmlhYmxlKHJlYWRlciwgJnZhcl9uYW1lLCAmdmFyX3ZhbHVlKSA8IDApCiAJCQkJCWdvdG8gcmV3cml0ZV9mYWlsOwogCiAJCQkJLyogRmlyc3QgdHJ5IHRvIG1hdGNoIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSAqLwpAQCAtMTE4OSwyMyArMTMwOSwyOCBAQAogCQkJCWlmICghaGFzX21hdGNoZWQpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJcG9zdF9zdGFydCA9IGNmZy0+cmVhZGVyLnJlYWRfcHRyOworCQkJCXBvc3Rfc3RhcnQgPSByZWFkZXItPnJlYWRfcHRyOwogCQkJfQogCiAJCQkvKiBXZSd2ZSBmb3VuZCB0aGUgdmFyaWFibGUgd2Ugd2FudGVkIHRvIGNoYW5nZSwgc28KIAkJCSAqIHdyaXRlIGFueXRoaW5nIHVwIHRvIGl0ICovCi0JCQlnaXRfZmlsZWJ1Zl93cml0ZSgmZmlsZSwgZGF0YV9zdGFydCwgcHJlX2VuZCAtIGRhdGFfc3RhcnQpOworCQkJZ2l0X2ZpbGVidWZfd3JpdGUoJmZpbGUsIHdyaXRlX3N0YXJ0LCBwcmVfZW5kIC0gd3JpdGVfc3RhcnQpOwogCQkJcHJlZ19yZXBsYWNlZCA9IDE7CiAKIAkJCS8qIFRoZW4gcmVwbGFjZSB0aGUgdmFyaWFibGUuIElmIHRoZSB2YWx1ZSBpcyBOVUxMLCBpdAogCQkJICogbWVhbnMgd2Ugd2FudCB0byBkZWxldGUgaXQsIHNvIGRvbid0IHdyaXRlIGFueXRoaW5nLiAqLwogCQkJaWYgKHZhbHVlICE9IE5VTEwpIHsKLQkJCQlnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICJcdCVzID0gJXNcbiIsIG5hbWUsIHZhbHVlKTsKKwkJCQljb25zdCBjaGFyICpxID0gcXVvdGVzX2Zvcl92YWx1ZSh2YWx1ZSk7CisJCQkJZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiXHQlcyA9ICVzJXMlc1xuIiwgbmFtZSwgcSwgdmFsdWUsIHEpOwogCQkJfQogCi0JCQkvKiBtdWx0aWxpbmUgdmFyaWFibGU/IHdlIG5lZWQgdG8ga2VlcCByZWFkaW5nIGxpbmVzIHRvIG1hdGNoICovCi0JCQlpZiAocHJlZyAhPSBOVUxMKSB7Ci0JCQkJZGF0YV9zdGFydCA9IHBvc3Rfc3RhcnQ7CisJCQkvKgorCQkJICogSWYgd2UgaGF2ZSBhIG11bHRpdmFyLCB3ZSBzaG91bGQga2VlcCBsb29raW5nIGZvciBlbnRyaWVzLAorCQkJICogYnV0IG9ubHkgaWYgd2UncmUgaW4gdGhlIHJpZ2h0IHNlY3Rpb24uIE90aGVyd2lzZSB3ZSdsbCBlbmQgdXAKKwkJCSAqIGxvb3Bpbmcgb24gdGhlIGVkZ2Ugb2YgYSBtYXRjaGluZyBhbmQgYSBub24tbWF0Y2hpbmcgc2VjdGlvbi4KKwkJCSAqLworCQkJaWYgKHNlY3Rpb25fbWF0Y2hlcyAmJiBwcmVnICE9IE5VTEwpIHsKKwkJCQl3cml0ZV9zdGFydCA9IHBvc3Rfc3RhcnQ7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTEyMzIsMTIgKzEzNTcsMTQgQEAKIAkgKi8KIAlpZiAod3JpdGVfdHJhaWxlcikgewogCQkvKiBXcml0ZSBvdXQgcmVzdCBvZiB0aGUgZmlsZSAqLwotCQlnaXRfZmlsZWJ1Zl93cml0ZSgmZmlsZSwgcG9zdF9zdGFydCwgY2ZnLT5yZWFkZXIuYnVmZmVyLnNpemUgLSAocG9zdF9zdGFydCAtIGRhdGFfc3RhcnQpKTsKKwkJZ2l0X2ZpbGVidWZfd3JpdGUoJmZpbGUsIHBvc3Rfc3RhcnQsIHJlYWRlci0+YnVmZmVyLnNpemUgLSAocG9zdF9zdGFydCAtIGRhdGFfc3RhcnQpKTsKIAl9IGVsc2UgewogCQlpZiAocHJlZ19yZXBsYWNlZCkgewotCQkJZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiXG4lcyIsIGRhdGFfc3RhcnQpOworCQkJZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiXG4lcyIsIHdyaXRlX3N0YXJ0KTsKIAkJfSBlbHNlIHsKLQkJCWdpdF9maWxlYnVmX3dyaXRlKCZmaWxlLCBjZmctPnJlYWRlci5idWZmZXIucHRyLCBjZmctPnJlYWRlci5idWZmZXIuc2l6ZSk7CisJCQljb25zdCBjaGFyICpxOworCisJCQlnaXRfZmlsZWJ1Zl93cml0ZSgmZmlsZSwgcmVhZGVyLT5idWZmZXIucHRyLCByZWFkZXItPmJ1ZmZlci5zaXplKTsKIAogCQkJLyogQW5kIG5vdyBpZiB3ZSBqdXN0IG5lZWQgdG8gYWRkIGEgdmFyaWFibGUgKi8KIAkJCWlmICghc2VjdGlvbl9tYXRjaGVzICYmIHdyaXRlX3NlY3Rpb24oJmZpbGUsIHNlY3Rpb24pIDwgMCkKQEAgLTEyNTMsMTAgKzEzODAsMTEgQEAKIAkJCX0KIAogCQkJLyogSWYgd2UgYXJlIGhlcmUsIHRoZXJlIGlzIGF0IGxlYXN0IGEgc2VjdGlvbiBsaW5lICovCi0JCQlpZiAoY2ZnLT5yZWFkZXIuYnVmZmVyLnNpemUgPiAwICYmICooY2ZnLT5yZWFkZXIuYnVmZmVyLnB0ciArIGNmZy0+cmVhZGVyLmJ1ZmZlci5zaXplIC0gMSkgIT0gJ1xuJykKKwkJCWlmIChyZWFkZXItPmJ1ZmZlci5zaXplID4gMCAmJiAqKHJlYWRlci0+YnVmZmVyLnB0ciArIHJlYWRlci0+YnVmZmVyLnNpemUgLSAxKSAhPSAnXG4nKQogCQkJCWdpdF9maWxlYnVmX3dyaXRlKCZmaWxlLCAiXG4iLCAxKTsKIAotCQkJZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiXHQlcyA9ICVzXG4iLCBuYW1lLCB2YWx1ZSk7CisJCQlxID0gcXVvdGVzX2Zvcl92YWx1ZSh2YWx1ZSk7CisJCQlnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICJcdCVzID0gJXMlcyVzXG4iLCBuYW1lLCBxLCB2YWx1ZSwgcSk7CiAJCX0KIAl9CiAKQEAgLTEyNjQsMTAgKzEzOTIsMTAgQEAKIAlnaXRfX2ZyZWUoY3VycmVudF9zZWN0aW9uKTsKIAogCS8qIHJlZnJlc2ggc3RhdHMgLSBpZiB0aGlzIGVycm9ycywgdGhlbiBjb21taXQgd2lsbCBlcnJvciB0b28gKi8KLQkodm9pZClnaXRfZmlsZWJ1Zl9zdGF0cygmY2ZnLT5maWxlX210aW1lLCAmY2ZnLT5maWxlX3NpemUsICZmaWxlKTsKKwkodm9pZClnaXRfZmlsZWJ1Zl9zdGF0cygmcmVhZGVyLT5maWxlX210aW1lLCAmcmVhZGVyLT5maWxlX3NpemUsICZmaWxlKTsKIAotCXJlc3VsdCA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSwgR0lUX0NPTkZJR19GSUxFX01PREUpOwotCWdpdF9idWZfZnJlZSgmY2ZnLT5yZWFkZXIuYnVmZmVyKTsKKwlyZXN1bHQgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUpOworCWdpdF9idWZfZnJlZSgmcmVhZGVyLT5idWZmZXIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIApAQCAtMTI3Niw3ICsxNDA0LDcgQEAKIAlnaXRfX2ZyZWUoY3VycmVudF9zZWN0aW9uKTsKIAogCWdpdF9maWxlYnVmX2NsZWFudXAoJmZpbGUpOwotCWdpdF9idWZfZnJlZSgmY2ZnLT5yZWFkZXIuYnVmZmVyKTsKKwlnaXRfYnVmX2ZyZWUoJnJlYWRlci0+YnVmZmVyKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTEyOTMsNiArMTQyMSw5IEBACiAJYXNzZXJ0KHB0cik7CiAKIAlsZW4gPSBzdHJsZW4ocHRyKTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIGdpdF9fY2FsbG9jKDEsIHNpemVvZihjaGFyKSk7CisKIAlnaXRfYnVmX2dyb3coJmJ1ZiwgbGVuKTsKIAogCXdoaWxlICgqcHRyICE9ICdcMCcpIHsKQEAgLTEzNjUsMTkgKzE0OTYsMTkgQEAKIAlyZXR1cm4gKGVuZCA+IHN0cikgJiYgKGNvdW50ICYgMSk7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfbXVsdGlsaW5lX3ZhcmlhYmxlKGRpc2tmaWxlX2JhY2tlbmQgKmNmZywgZ2l0X2J1ZiAqdmFsdWUsIGludCBpbl9xdW90ZXMpCitzdGF0aWMgaW50IHBhcnNlX211bHRpbGluZV92YXJpYWJsZShzdHJ1Y3QgcmVhZGVyICpyZWFkZXIsIGdpdF9idWYgKnZhbHVlLCBpbnQgaW5fcXVvdGVzKQogewogCWNoYXIgKmxpbmUgPSBOVUxMLCAqcHJvY19saW5lID0gTlVMTDsKIAlpbnQgcXVvdGVfY291bnQ7CiAKIAkvKiBDaGVjayB0aGF0IHRoZSBuZXh0IGxpbmUgZXhpc3RzICovCi0JbGluZSA9IGNmZ19yZWFkbGluZShjZmcsIGZhbHNlKTsKKwlsaW5lID0gcmVhZGVyX3JlYWRsaW5lKHJlYWRlciwgZmFsc2UpOwogCWlmIChsaW5lID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAogCS8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgdGhlcmUgaXMgaW5wdXQgbWlzc2luZyAqLwogCWlmIChsaW5lWzBdID09ICdcMCcpIHsKLQkJc2V0X3BhcnNlX2Vycm9yKGNmZywgMCwgIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgd2hpbGUgcGFyc2luZyBtdWx0aW5lIHZhciIpOworCQlzZXRfcGFyc2VfZXJyb3IocmVhZGVyLCAwLCAiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSB3aGlsZSBwYXJzaW5nIG11bHRpbmUgdmFyIik7CiAJCWdpdF9fZnJlZShsaW5lKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTEzODcsNyArMTUxOCw3IEBACiAJLyogSWYgaXQgd2FzIGp1c3QgYSBjb21tZW50LCBwcmV0ZW5kIGl0IGRpZG4ndCBleGlzdCAqLwogCWlmIChsaW5lWzBdID09ICdcMCcpIHsKIAkJZ2l0X19mcmVlKGxpbmUpOwotCQlyZXR1cm4gcGFyc2VfbXVsdGlsaW5lX3ZhcmlhYmxlKGNmZywgdmFsdWUsIHF1b3RlX2NvdW50KTsKKwkJcmV0dXJuIHBhcnNlX211bHRpbGluZV92YXJpYWJsZShyZWFkZXIsIHZhbHVlLCBxdW90ZV9jb3VudCk7CiAJCS8qIFRPRE86IHVuYm91bmRlZCByZWN1cnNpb24uIFRoaXMgKipjb3VsZCoqIGJlIGV4cGxvaXRhYmxlICovCiAJfQogCkBAIC0xMzk1LDcgKzE1MjYsNyBAQAogCSAqIHN0YW5kYXJkLCB0aGlzIGNoYXJhY3RlciAqKmhhcyoqIHRvIGJlIGxhc3Qgb25lIGluIHRoZSBidWYsIHdpdGgKIAkgKiBubyB3aGl0ZXNwYWNlIGFmdGVyIGl0ICovCiAJYXNzZXJ0KGlzX211bHRpbGluZV92YXIodmFsdWUtPnB0cikpOwotCWdpdF9idWZfdHJ1bmNhdGUodmFsdWUsIGdpdF9idWZfbGVuKHZhbHVlKSAtIDEpOworCWdpdF9idWZfc2hvcnRlbih2YWx1ZSwgMSk7CiAKIAlwcm9jX2xpbmUgPSBmaXh1cF9saW5lKGxpbmUsIGluX3F1b3Rlcyk7CiAJaWYgKHByb2NfbGluZSA9PSBOVUxMKSB7CkBAIC0xNDEyLDE5ICsxNTQzLDE5IEBACiAJICoga2VlcCBwdXR0aW5nIHN0dWZmIGluIHRoZSBidWZmZXIKIAkgKi8KIAlpZiAoaXNfbXVsdGlsaW5lX3Zhcih2YWx1ZS0+cHRyKSkKLQkJcmV0dXJuIHBhcnNlX211bHRpbGluZV92YXJpYWJsZShjZmcsIHZhbHVlLCBxdW90ZV9jb3VudCk7CisJCXJldHVybiBwYXJzZV9tdWx0aWxpbmVfdmFyaWFibGUocmVhZGVyLCB2YWx1ZSwgcXVvdGVfY291bnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfdmFyaWFibGUoZGlza2ZpbGVfYmFja2VuZCAqY2ZnLCBjaGFyICoqdmFyX25hbWUsIGNoYXIgKip2YXJfdmFsdWUpCitzdGF0aWMgaW50IHBhcnNlX3ZhcmlhYmxlKHN0cnVjdCByZWFkZXIgKnJlYWRlciwgY2hhciAqKnZhcl9uYW1lLCBjaGFyICoqdmFyX3ZhbHVlKQogewogCWNvbnN0IGNoYXIgKnZhcl9lbmQgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnZhbHVlX3N0YXJ0ID0gTlVMTDsKIAljaGFyICpsaW5lOwogCWludCBxdW90ZV9jb3VudDsKIAotCWxpbmUgPSBjZmdfcmVhZGxpbmUoY2ZnLCB0cnVlKTsKKwlsaW5lID0gcmVhZGVyX3JlYWRsaW5lKHJlYWRlciwgdHJ1ZSk7CiAJaWYgKGxpbmUgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCkBAIC0xNDU5LDcgKzE1OTAsNyBAQAogCQkJR0lURVJSX0NIRUNLX0FMTE9DKHByb2NfbGluZSk7CiAJCQlnaXRfYnVmX3B1dHMoJm11bHRpX3ZhbHVlLCBwcm9jX2xpbmUpOwogCQkJZ2l0X19mcmVlKHByb2NfbGluZSk7Ci0JCQlpZiAocGFyc2VfbXVsdGlsaW5lX3ZhcmlhYmxlKGNmZywgJm11bHRpX3ZhbHVlLCBxdW90ZV9jb3VudCkgPCAwIHx8IGdpdF9idWZfb29tKCZtdWx0aV92YWx1ZSkpIHsKKwkJCWlmIChwYXJzZV9tdWx0aWxpbmVfdmFyaWFibGUocmVhZGVyLCAmbXVsdGlfdmFsdWUsIHF1b3RlX2NvdW50KSA8IDAgfHwgZ2l0X2J1Zl9vb20oJm11bHRpX3ZhbHVlKSkgewogCQkJCWdpdF9fZnJlZSgqdmFyX25hbWUpOwogCQkJCWdpdF9fZnJlZShsaW5lKTsKIAkJCQlnaXRfYnVmX2ZyZWUoJm11bHRpX3ZhbHVlKTsKZGlmZiAtLWdpdCBhL3NyYy9jb25maWdfZmlsZS5oIGIvc3JjL2NvbmZpZ19maWxlLmgKaW5kZXggNzQ0NTg1OS4uZDRhMWE0MCAxMDA2NDQKLS0tIGEvc3JjL2NvbmZpZ19maWxlLmgKKysrIGIvc3JjL2NvbmZpZ19maWxlLmgKQEAgLTQyLDcgKzQyLDcgQEAKIAlpbnQgKCpmbikoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnksIHZvaWQgKmRhdGEpLAogCXZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIGNmZy0+Zm9yZWFjaChjZmcsIE5VTEwsIGZuLCBkYXRhKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19iYWNrZW5kX2ZvcmVhY2hfbWF0Y2goY2ZnLCBOVUxMLCBmbiwgZGF0YSk7CiB9CiAKIEdJVF9JTkxJTkUoaW50KSBnaXRfY29uZmlnX2ZpbGVfZm9yZWFjaF9tYXRjaCgKQEAgLTUxLDcgKzUxLDcgQEAKIAlpbnQgKCpmbikoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnksIHZvaWQgKmRhdGEpLAogCXZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIGNmZy0+Zm9yZWFjaChjZmcsIHJlZ2V4cCwgZm4sIGRhdGEpOworCXJldHVybiBnaXRfY29uZmlnX2JhY2tlbmRfZm9yZWFjaF9tYXRjaChjZmcsIHJlZ2V4cCwgZm4sIGRhdGEpOwogfQogCiBleHRlcm4gaW50IGdpdF9jb25maWdfZmlsZV9ub3JtYWxpemVfc2VjdGlvbihjaGFyICpzdGFydCwgY2hhciAqZW5kKTsKZGlmZiAtLWdpdCBhL3NyYy9jcmxmLmMgYi9zcmMvY3JsZi5jCmluZGV4IDY1MDM5ZjkuLmIyNWMwMmNjIDEwMDY0NAotLS0gYS9zcmMvY3JsZi5jCisrKyBiL3NyYy9jcmxmLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAiZ2l0Mi9hdHRyLmgiCiAjaW5jbHVkZSAiZ2l0Mi9ibG9iLmgiCiAjaW5jbHVkZSAiZ2l0Mi9pbmRleC5oIgorI2luY2x1ZGUgImdpdDIvc3lzL2ZpbHRlci5oIgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZmlsZW9wcy5oIgpAQCAtMTksMTMgKzIwLDExIEBACiBzdHJ1Y3QgY3JsZl9hdHRycyB7CiAJaW50IGNybGZfYWN0aW9uOwogCWludCBlb2w7CisJaW50IGF1dG9fY3JsZjsKIH07CiAKIHN0cnVjdCBjcmxmX2ZpbHRlciB7CiAJZ2l0X2ZpbHRlciBmOwotCXN0cnVjdCBjcmxmX2F0dHJzIGF0dHJzOwotCWdpdF9yZXBvc2l0b3J5ICpyZXBvOwotCWNoYXIgcGF0aFtHSVRfRkxFWF9BUlJBWV07CiB9OwogCiBzdGF0aWMgaW50IGNoZWNrX2NybGYoY29uc3QgY2hhciAqdmFsdWUpCkBAIC03Niw0MSArNzUsMTAgQEAKIAlyZXR1cm4gY2EtPmNybGZfYWN0aW9uOwogfQogCi1zdGF0aWMgaW50IGNybGZfbG9hZF9hdHRyaWJ1dGVzKHN0cnVjdCBjcmxmX2F0dHJzICpjYSwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IGhhc19jcl9pbl9pbmRleChjb25zdCBnaXRfZmlsdGVyX3NvdXJjZSAqc3JjKQogewotI2RlZmluZSBOVU1fQ09OVl9BVFRSUyAzCi0KLQlzdGF0aWMgY29uc3QgY2hhciAqYXR0cl9uYW1lc1tOVU1fQ09OVl9BVFRSU10gPSB7Ci0JCSJjcmxmIiwgImVvbCIsICJ0ZXh0IiwKLQl9OwotCi0JY29uc3QgY2hhciAqYXR0cl92YWxzW05VTV9DT05WX0FUVFJTXTsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdpdF9hdHRyX2dldF9tYW55KGF0dHJfdmFscywKLQkJcmVwbywgMCwgcGF0aCwgTlVNX0NPTlZfQVRUUlMsIGF0dHJfbmFtZXMpOwotCi0JaWYgKGVycm9yID09IEdJVF9FTk9URk9VTkQpIHsKLQkJY2EtPmNybGZfYWN0aW9uID0gR0lUX0NSTEZfR1VFU1M7Ci0JCWNhLT5lb2wgPSBHSVRfRU9MX1VOU0VUOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZXJyb3IgPT0gMCkgewotCQljYS0+Y3JsZl9hY3Rpb24gPSBjaGVja19jcmxmKGF0dHJfdmFsc1syXSk7IC8qIHRleHQgKi8KLQkJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBHSVRfQ1JMRl9HVUVTUykKLQkJCWNhLT5jcmxmX2FjdGlvbiA9IGNoZWNrX2NybGYoYXR0cl92YWxzWzBdKTsgLyogY2xyZiAqLwotCi0JCWNhLT5lb2wgPSBjaGVja19lb2woYXR0cl92YWxzWzFdKTsgLyogZW9sICovCi0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBoYXNfY3JfaW5faW5kZXgoZ2l0X2ZpbHRlciAqc2VsZikKLXsKLQlzdHJ1Y3QgY3JsZl9maWx0ZXIgKmZpbHRlciA9IChzdHJ1Y3QgY3JsZl9maWx0ZXIgKilzZWxmOworCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gZ2l0X2ZpbHRlcl9zb3VyY2VfcmVwbyhzcmMpOworCWNvbnN0IGNoYXIgKnBhdGggPSBnaXRfZmlsdGVyX3NvdXJjZV9wYXRoKHNyYyk7CiAJZ2l0X2luZGV4ICppbmRleDsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OwogCWdpdF9ibG9iICpibG9iOwpAQCAtMTE4LDE5ICs4NiwyMiBAQAogCWdpdF9vZmZfdCBibG9ic2l6ZTsKIAlib29sIGZvdW5kX2NyOwogCi0JaWYgKGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKCZpbmRleCwgZmlsdGVyLT5yZXBvKSA8IDApIHsKKwlpZiAoIXBhdGgpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChnaXRfcmVwb3NpdG9yeV9pbmRleF9fd2Vha3B0cigmaW5kZXgsIHJlcG8pIDwgMCkgewogCQlnaXRlcnJfY2xlYXIoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmICghKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsIGZpbHRlci0+cGF0aCwgMCkpICYmCi0JCSEoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgZmlsdGVyLT5wYXRoLCAxKSkpCisJaWYgKCEoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgcGF0aCwgMCkpICYmCisJCSEoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgcGF0aCwgMSkpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoIVNfSVNSRUcoZW50cnktPm1vZGUpKSAvKiBkb24ndCBjcmxmIGZpbHRlciBub24tYmxvYnMgKi8KIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoZ2l0X2Jsb2JfbG9va3VwKCZibG9iLCBmaWx0ZXItPnJlcG8sICZlbnRyeS0+b2lkKSA8IDApCisJaWYgKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgcmVwbywgJmVudHJ5LT5vaWQpIDwgMCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJYmxvYmNvbnRlbnQgPSBnaXRfYmxvYl9yYXdjb250ZW50KGJsb2IpOwpAQCAtMTQ3LDI3ICsxMTgsMjQgQEAKIH0KIAogc3RhdGljIGludCBjcmxmX2FwcGx5X3RvX29kYigKLQlnaXRfZmlsdGVyICpzZWxmLCBnaXRfYnVmICpkZXN0LCBjb25zdCBnaXRfYnVmICpzb3VyY2UpCisJc3RydWN0IGNybGZfYXR0cnMgKmNhLAorCWdpdF9idWYgKnRvLAorCWNvbnN0IGdpdF9idWYgKmZyb20sCisJY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYykKIHsKLQlzdHJ1Y3QgY3JsZl9maWx0ZXIgKmZpbHRlciA9IChzdHJ1Y3QgY3JsZl9maWx0ZXIgKilzZWxmOwotCi0JYXNzZXJ0KHNlbGYgJiYgZGVzdCAmJiBzb3VyY2UpOwotCiAJLyogRW1wdHkgZmlsZT8gTm90aGluZyB0byBkbyAqLwotCWlmIChnaXRfYnVmX2xlbihzb3VyY2UpID09IDApCisJaWYgKCFnaXRfYnVmX2xlbihmcm9tKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBIZXVyaXN0aWNzIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB0aGUgY29udmVyc2lvbi4KIAkgKiBTdHJhaWdodCBmcm9tIENvcmUgR2l0LgogCSAqLwotCWlmIChmaWx0ZXItPmF0dHJzLmNybGZfYWN0aW9uID09IEdJVF9DUkxGX0FVVE8gfHwKLQkJZmlsdGVyLT5hdHRycy5jcmxmX2FjdGlvbiA9PSBHSVRfQ1JMRl9HVUVTUykgewotCisJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBHSVRfQ1JMRl9BVVRPIHx8IGNhLT5jcmxmX2FjdGlvbiA9PSBHSVRfQ1JMRl9HVUVTUykgewogCQlnaXRfYnVmX3RleHRfc3RhdHMgc3RhdHM7CiAKLQkJLyogQ2hlY2sgaGV1cmlzdGljcyBmb3IgYmluYXJ5IHZzIHRleHQuLi4gKi8KLQkJaWYgKGdpdF9idWZfdGV4dF9nYXRoZXJfc3RhdHMoJnN0YXRzLCBzb3VyY2UsIGZhbHNlKSkKLQkJCXJldHVybiAtMTsKKwkJLyogQ2hlY2sgaGV1cmlzdGljcyBmb3IgYmluYXJ5IHZzIHRleHQgLSByZXR1cm5zIHRydWUgaWYgYmluYXJ5ICovCisJCWlmIChnaXRfYnVmX3RleHRfZ2F0aGVyX3N0YXRzKCZzdGF0cywgZnJvbSwgZmFsc2UpKQorCQkJcmV0dXJuIEdJVF9QQVNTVEhST1VHSDsKIAogCQkvKgogCQkgKiBXZSdyZSBjdXJyZW50bHkgbm90IGdvaW5nIHRvIGV2ZW4gdHJ5IHRvIGNvbnZlcnQgc3R1ZmYKQEAgLTE3NSwyOCArMTQzLDI4IEBACiAJCSAqIHN0dWZmPwogCQkgKi8KIAkJaWYgKHN0YXRzLmNyICE9IHN0YXRzLmNybGYpCi0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gR0lUX1BBU1NUSFJPVUdIOwogCi0JCWlmIChmaWx0ZXItPmF0dHJzLmNybGZfYWN0aW9uID09IEdJVF9DUkxGX0dVRVNTKSB7CisJCWlmIChjYS0+Y3JsZl9hY3Rpb24gPT0gR0lUX0NSTEZfR1VFU1MpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgZmlsZSBpbiB0aGUgaW5kZXggaGFzIGFueSBDUiBpbiBpdCwgZG8gbm90IGNvbnZlcnQuCiAJCQkgKiBUaGlzIGlzIHRoZSBuZXcgc2FmZXIgYXV0b2NybGYgaGFuZGxpbmcuCiAJCQkgKi8KLQkJCWlmIChoYXNfY3JfaW5faW5kZXgoc2VsZikpCi0JCQkJcmV0dXJuIC0xOworCQkJaWYgKGhhc19jcl9pbl9pbmRleChzcmMpKQorCQkJCXJldHVybiBHSVRfUEFTU1RIUk9VR0g7CiAJCX0KIAogCQlpZiAoIXN0YXRzLmNyKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIEdJVF9QQVNTVEhST1VHSDsKIAl9CiAKIAkvKiBBY3R1YWxseSBkcm9wIHRoZSBjYXJyaWFnZSByZXR1cm5zICovCi0JcmV0dXJuIGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKGRlc3QsIHNvdXJjZSk7CisJcmV0dXJuIGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKHRvLCBmcm9tKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmxpbmVfZW5kaW5nKHN0cnVjdCBjcmxmX2ZpbHRlciAqZmlsdGVyKQorc3RhdGljIGNvbnN0IGNoYXIgKmxpbmVfZW5kaW5nKHN0cnVjdCBjcmxmX2F0dHJzICpjYSkKIHsKLQlzd2l0Y2ggKGZpbHRlci0+YXR0cnMuY3JsZl9hY3Rpb24pIHsKKwlzd2l0Y2ggKGNhLT5jcmxmX2FjdGlvbikgewogCWNhc2UgR0lUX0NSTEZfQklOQVJZOgogCWNhc2UgR0lUX0NSTEZfSU5QVVQ6CiAJCXJldHVybiAiXG4iOwpAQCAtMjEzLDExICsxODEsOSBAQAogCQlnb3RvIGxpbmVfZW5kaW5nX2Vycm9yOwogCX0KIAotCXN3aXRjaCAoZmlsdGVyLT5hdHRycy5lb2wpIHsKKwlzd2l0Y2ggKGNhLT5lb2wpIHsKIAljYXNlIEdJVF9FT0xfVU5TRVQ6Ci0JCXJldHVybiBHSVRfRU9MX05BVElWRSA9PSBHSVRfRU9MX0NSTEYKLQkJCT8gIlxyXG4iCi0JCQk6ICJcbiI7CisJCXJldHVybiBHSVRfRU9MX05BVElWRSA9PSBHSVRfRU9MX0NSTEYgPyAiXHJcbiIgOiAiXG4iOwogCiAJY2FzZSBHSVRfRU9MX0NSTEY6CiAJCXJldHVybiAiXHJcbiI7CkBAIC0yMzUsNDEgKzIwMSw2NCBAQAogfQogCiBzdGF0aWMgaW50IGNybGZfYXBwbHlfdG9fd29ya2RpcigKLQlnaXRfZmlsdGVyICpzZWxmLCBnaXRfYnVmICpkZXN0LCBjb25zdCBnaXRfYnVmICpzb3VyY2UpCisJc3RydWN0IGNybGZfYXR0cnMgKmNhLCBnaXRfYnVmICp0bywgY29uc3QgZ2l0X2J1ZiAqZnJvbSkKIHsKLQlzdHJ1Y3QgY3JsZl9maWx0ZXIgKmZpbHRlciA9IChzdHJ1Y3QgY3JsZl9maWx0ZXIgKilzZWxmOwogCWNvbnN0IGNoYXIgKndvcmtkaXJfZW5kaW5nID0gTlVMTDsKIAotCWFzc2VydChzZWxmICYmIGRlc3QgJiYgc291cmNlKTsKLQogCS8qIEVtcHR5IGZpbGU/IE5vdGhpbmcgdG8gZG8uICovCi0JaWYgKGdpdF9idWZfbGVuKHNvdXJjZSkgPT0gMCkKLQkJcmV0dXJuIC0xOworCWlmIChnaXRfYnVmX2xlbihmcm9tKSA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIERvbid0IGZpbHRlciBiaW5hcnkgZmlsZXMgKi8KKwlpZiAoZ2l0X2J1Zl90ZXh0X2lzX2JpbmFyeShmcm9tKSkKKwkJcmV0dXJuIEdJVF9QQVNTVEhST1VHSDsKIAogCS8qIERldGVybWluZSBwcm9wZXIgbGluZSBlbmRpbmcgKi8KLQl3b3JrZGlyX2VuZGluZyA9IGxpbmVfZW5kaW5nKGZpbHRlcik7CisJd29ya2Rpcl9lbmRpbmcgPSBsaW5lX2VuZGluZyhjYSk7CiAJaWYgKCF3b3JrZGlyX2VuZGluZykKIAkJcmV0dXJuIC0xOwotCWlmICghc3RyY21wKCJcbiIsIHdvcmtkaXJfZW5kaW5nKSkgLyogZG8gbm90aGluZyBmb3IgXG4gZW5kaW5nICovCi0JCXJldHVybiAtMTsKIAotCS8qIGZvciBub3csIG9ubHkgbGYtPmNybGYgY29udmVyc2lvbiBpcyBzdXBwb3J0ZWQgaGVyZSAqLwotCWFzc2VydCghc3RyY21wKCJcclxuIiwgd29ya2Rpcl9lbmRpbmcpKTsKLQlyZXR1cm4gZ2l0X2J1Zl90ZXh0X2xmX3RvX2NybGYoZGVzdCwgc291cmNlKTsKKwlpZiAoIXN0cmNtcCgiXG4iLCB3b3JrZGlyX2VuZGluZykpIHsKKwkJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBHSVRfQ1JMRl9HVUVTUyAmJiBjYS0+YXV0b19jcmxmKQorCQkJcmV0dXJuIEdJVF9QQVNTVEhST1VHSDsKKworCQlpZiAoZ2l0X2J1Zl9maW5kKGZyb20sICdccicpIDwgMCkKKwkJCXJldHVybiBHSVRfUEFTU1RIUk9VR0g7CisKKwkJaWYgKGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKHRvLCBmcm9tKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJLyogb25seSBvdGhlciBzdXBwb3J0ZWQgb3B0aW9uIGlzIGxmLT5jcmxmIGNvbnZlcnNpb24gKi8KKwkJYXNzZXJ0KCFzdHJjbXAoIlxyXG4iLCB3b3JrZGlyX2VuZGluZykpOworCisJCWlmIChnaXRfYnVmX3RleHRfbGZfdG9fY3JsZih0bywgZnJvbSkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZpbmRfYW5kX2FkZF9maWx0ZXIoCi0JZ2l0X3ZlY3RvciAqZmlsdGVycywgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgsCi0JaW50ICgqYXBwbHkpKHN0cnVjdCBnaXRfZmlsdGVyICpzZWxmLCBnaXRfYnVmICpkZXN0LCBjb25zdCBnaXRfYnVmICpzb3VyY2UpKQorc3RhdGljIGludCBjcmxmX2NoZWNrKAorCWdpdF9maWx0ZXIgICAgICAgICpzZWxmLAorCXZvaWQgICAgICAgICAgICAgICoqcGF5bG9hZCwgLyogcG9pbnRzIHRvIE5VTEwgcHRyIG9uIGVudHJ5LCBtYXkgYmUgc2V0ICovCisJY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYywKKwljb25zdCBjaGFyICoqYXR0cl92YWx1ZXMpCiB7Ci0Jc3RydWN0IGNybGZfYXR0cnMgY2E7Ci0Jc3RydWN0IGNybGZfZmlsdGVyICpmaWx0ZXI7Ci0Jc2l6ZV90IHBhdGhsZW47CiAJaW50IGVycm9yOworCXN0cnVjdCBjcmxmX2F0dHJzIGNhOwogCi0JLyogTG9hZCBnaXRhdHRyaWJ1dGVzIGZvciB0aGUgcGF0aCAqLwotCWlmICgoZXJyb3IgPSBjcmxmX2xvYWRfYXR0cmlidXRlcygmY2EsIHJlcG8sIHBhdGgpKSA8IDApCi0JCXJldHVybiBlcnJvcjsKKwlHSVRfVU5VU0VEKHNlbGYpOworCisJaWYgKCFhdHRyX3ZhbHVlcykgeworCQljYS5jcmxmX2FjdGlvbiA9IEdJVF9DUkxGX0dVRVNTOworCQljYS5lb2wgPSBHSVRfRU9MX1VOU0VUOworCX0gZWxzZSB7CisJCWNhLmNybGZfYWN0aW9uID0gY2hlY2tfY3JsZihhdHRyX3ZhbHVlc1syXSk7IC8qIHRleHQgKi8KKwkJaWYgKGNhLmNybGZfYWN0aW9uID09IEdJVF9DUkxGX0dVRVNTKQorCQkJY2EuY3JsZl9hY3Rpb24gPSBjaGVja19jcmxmKGF0dHJfdmFsdWVzWzBdKTsgLyogY2xyZiAqLworCQljYS5lb2wgPSBjaGVja19lb2woYXR0cl92YWx1ZXNbMV0pOyAvKiBlb2wgKi8KKwl9CisJY2EuYXV0b19jcmxmID0gR0lUX0FVVE9fQ1JMRl9ERUZBVUxUOwogCiAJLyoKIAkgKiBVc2UgdGhlIGNvcmUgR2l0IGxvZ2ljIHRvIHNlZSBpZiB3ZSBzaG91bGQgcGVyZm9ybSBDUkxGIGZvciB0aGlzIGZpbGUKQEAgLTI3OCw0MSArMjY3LDY0IEBACiAJY2EuY3JsZl9hY3Rpb24gPSBjcmxmX2lucHV0X2FjdGlvbigmY2EpOwogCiAJaWYgKGNhLmNybGZfYWN0aW9uID09IEdJVF9DUkxGX0JJTkFSWSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBHSVRfUEFTU1RIUk9VR0g7CiAKIAlpZiAoY2EuY3JsZl9hY3Rpb24gPT0gR0lUX0NSTEZfR1VFU1MpIHsKLQkJaW50IGF1dG9fY3JsZjsKLQotCQlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfX2N2YXIoJmF1dG9fY3JsZiwgcmVwbywgR0lUX0NWQVJfQVVUT19DUkxGKSkgPCAwKQorCQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X19jdmFyKAorCQkJJmNhLmF1dG9fY3JsZiwgZ2l0X2ZpbHRlcl9zb3VyY2VfcmVwbyhzcmMpLCBHSVRfQ1ZBUl9BVVRPX0NSTEYpOworCQlpZiAoZXJyb3IgPCAwKQogCQkJcmV0dXJuIGVycm9yOwogCi0JCWlmIChhdXRvX2NybGYgPT0gR0lUX0FVVE9fQ1JMRl9GQUxTRSkKLQkJCXJldHVybiAwOworCQlpZiAoY2EuYXV0b19jcmxmID09IEdJVF9BVVRPX0NSTEZfRkFMU0UpCisJCQlyZXR1cm4gR0lUX1BBU1NUSFJPVUdIOwogCX0KIAotCS8qIElmIHdlJ3JlIGdvb2QsIHdlIGNyZWF0ZSBhIG5ldyBmaWx0ZXIgb2JqZWN0IGFuZCBwdXNoIGl0Ci0JICogaW50byB0aGUgZmlsdGVycyBhcnJheSAqLwotCXBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7Ci0JZmlsdGVyID0gZ2l0X19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmxmX2ZpbHRlcikgKyBwYXRobGVuICsgMSk7Ci0JR0lURVJSX0NIRUNLX0FMTE9DKGZpbHRlcik7CisJKnBheWxvYWQgPSBnaXRfX21hbGxvYyhzaXplb2YoY2EpKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MoKnBheWxvYWQpOworCW1lbWNweSgqcGF5bG9hZCwgJmNhLCBzaXplb2YoY2EpKTsKIAotCWZpbHRlci0+Zi5hcHBseSA9IGFwcGx5OwotCWZpbHRlci0+Zi5kb19mcmVlID0gTlVMTDsKLQltZW1jcHkoJmZpbHRlci0+YXR0cnMsICZjYSwgc2l6ZW9mKHN0cnVjdCBjcmxmX2F0dHJzKSk7Ci0JZmlsdGVyLT5yZXBvID0gcmVwbzsKLQltZW1jcHkoZmlsdGVyLT5wYXRoLCBwYXRoLCBwYXRobGVuICsgMSk7Ci0KLQlyZXR1cm4gZ2l0X3ZlY3Rvcl9pbnNlcnQoZmlsdGVycywgZmlsdGVyKTsKKwlyZXR1cm4gMDsKIH0KIAotaW50IGdpdF9maWx0ZXJfYWRkX19jcmxmX3RvX29kYigKLQlnaXRfdmVjdG9yICpmaWx0ZXJzLCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCkKK3N0YXRpYyBpbnQgY3JsZl9hcHBseSgKKwlnaXRfZmlsdGVyICAgICpzZWxmLAorCXZvaWQgICAgICAgICAqKnBheWxvYWQsIC8qIG1heSBiZSByZWFkIGFuZC9vciBzZXQgKi8KKwlnaXRfYnVmICAgICAgICp0bywKKwljb25zdCBnaXRfYnVmICpmcm9tLAorCWNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMpCiB7Ci0JcmV0dXJuIGZpbmRfYW5kX2FkZF9maWx0ZXIoZmlsdGVycywgcmVwbywgcGF0aCwgJmNybGZfYXBwbHlfdG9fb2RiKTsKKwkvKiBpbml0aWFsaXplIHBheWxvYWQgaW4gY2FzZSBgY2hlY2tgIHdhcyBieXBhc3NlZCAqLworCWlmICghKnBheWxvYWQpIHsKKwkJaW50IGVycm9yID0gY3JsZl9jaGVjayhzZWxmLCBwYXlsb2FkLCBzcmMsIE5VTEwpOworCQlpZiAoZXJyb3IgPCAwICYmIGVycm9yICE9IEdJVF9QQVNTVEhST1VHSCkKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAoZ2l0X2ZpbHRlcl9zb3VyY2VfbW9kZShzcmMpID09IEdJVF9GSUxURVJfU01VREdFKQorCQlyZXR1cm4gY3JsZl9hcHBseV90b193b3JrZGlyKCpwYXlsb2FkLCB0bywgZnJvbSk7CisJZWxzZQorCQlyZXR1cm4gY3JsZl9hcHBseV90b19vZGIoKnBheWxvYWQsIHRvLCBmcm9tLCBzcmMpOwogfQogCi1pbnQgZ2l0X2ZpbHRlcl9hZGRfX2NybGZfdG9fd29ya2RpcigKLQlnaXRfdmVjdG9yICpmaWx0ZXJzLCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCkKK3N0YXRpYyB2b2lkIGNybGZfY2xlYW51cCgKKwlnaXRfZmlsdGVyICpzZWxmLAorCXZvaWQgICAgICAgKnBheWxvYWQpCiB7Ci0JcmV0dXJuIGZpbmRfYW5kX2FkZF9maWx0ZXIoZmlsdGVycywgcmVwbywgcGF0aCwgJmNybGZfYXBwbHlfdG9fd29ya2Rpcik7CisJR0lUX1VOVVNFRChzZWxmKTsKKwlnaXRfX2ZyZWUocGF5bG9hZCk7Cit9CisKK2dpdF9maWx0ZXIgKmdpdF9jcmxmX2ZpbHRlcl9uZXcodm9pZCkKK3sKKwlzdHJ1Y3QgY3JsZl9maWx0ZXIgKmYgPSBnaXRfX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNybGZfZmlsdGVyKSk7CisKKwlmLT5mLnZlcnNpb24gPSBHSVRfRklMVEVSX1ZFUlNJT047CisJZi0+Zi5hdHRyaWJ1dGVzID0gImNybGYgZW9sIHRleHQiOworCWYtPmYuaW5pdGlhbGl6ZSA9IE5VTEw7CisJZi0+Zi5zaHV0ZG93biA9IGdpdF9maWx0ZXJfZnJlZTsKKwlmLT5mLmNoZWNrICAgID0gY3JsZl9jaGVjazsKKwlmLT5mLmFwcGx5ICAgID0gY3JsZl9hcHBseTsKKwlmLT5mLmNsZWFudXAgID0gY3JsZl9jbGVhbnVwOworCisJcmV0dXJuIChnaXRfZmlsdGVyICopZjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9kYXRlLmMgYi9zcmMvZGF0ZS5jCmluZGV4IDQ4ODQxZTQuLjc4NDljMmYgMTAwNjQ0Ci0tLSBhL3NyYy9kYXRlLmMKKysrIGIvc3JjL2RhdGUuYwpAQCAtODIzLDE1ICs4MjMsMTMgQEAKIH0KIAogc3RhdGljIGdpdF90aW1lX3QgYXBwcm94aWRhdGVfc3RyKGNvbnN0IGNoYXIgKmRhdGUsCi0JCQkJCQkJCQljb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYsCi0JCQkJCQkJCQlpbnQgKmVycm9yX3JldCkKKwl0aW1lX3QgdGltZV9zZWMsCisJaW50ICplcnJvcl9yZXQpCiB7CiAJaW50IG51bWJlciA9IDA7CiAJaW50IHRvdWNoZWQgPSAwOwogCXN0cnVjdCB0bSB0bSA9IHswfSwgbm93OwotCXRpbWVfdCB0aW1lX3NlYzsKIAotCXRpbWVfc2VjID0gdHYtPnR2X3NlYzsKIAlwX2xvY2FsdGltZV9yKCZ0aW1lX3NlYywgJnRtKTsKIAlub3cgPSB0bTsKIApAQCAtODYxLDcgKzg1OSw3IEBACiAKIGludCBnaXRfX2RhdGVfcGFyc2UoZ2l0X3RpbWVfdCAqb3V0LCBjb25zdCBjaGFyICpkYXRlKQogewotCXN0cnVjdCB0aW1ldmFsIHR2OworCXRpbWVfdCB0aW1lX3NlYzsKIAlnaXRfdGltZV90IHRpbWVzdGFtcDsKIAlpbnQgb2Zmc2V0LCBlcnJvcl9yZXQ9MDsKIApAQCAtODcwLDcgKzg2OCw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCXBfZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JKm91dCA9IGFwcHJveGlkYXRlX3N0cihkYXRlLCAmdHYsICZlcnJvcl9yZXQpOworCWlmICh0aW1lKCZ0aW1lX3NlYykgPT0gLTEpCisJCXJldHVybiAtMTsKKworCSpvdXQgPSBhcHByb3hpZGF0ZV9zdHIoZGF0ZSwgdGltZV9zZWMsICZlcnJvcl9yZXQpOwogICAgcmV0dXJuIGVycm9yX3JldDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9kaWZmLmMgYi9zcmMvZGlmZi5jCmluZGV4IDI2ZTExNzQuLjRjMzNhMDIgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmLmMKKysrIGIvc3JjL2RpZmYuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgInBhdGhzcGVjLmgiCiAjaW5jbHVkZSAiaW5kZXguaCIKICNpbmNsdWRlICJvZGIuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKIAogI2RlZmluZSBESUZGX0ZMQUdfSVNfU0VUKERJRkYsRkxBRykgKCgoRElGRiktPm9wdHMuZmxhZ3MgJiAoRkxBRykpICE9IDApCiAjZGVmaW5lIERJRkZfRkxBR19JU05UX1NFVChESUZGLEZMQUcpICgoKERJRkYpLT5vcHRzLmZsYWdzICYgKEZMQUcpKSA9PSAwKQpAQCAtMjAsNyArMjEsNyBAQAogCShWQUwpID8gKChESUZGKS0+b3B0cy5mbGFncyB8IChGTEFHKSkgOiAoKERJRkYpLT5vcHRzLmZsYWdzICYgfihWQUwpKQogCiBzdGF0aWMgZ2l0X2RpZmZfZGVsdGEgKmRpZmZfZGVsdGFfX2FsbG9jKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJZ2l0X2RlbHRhX3Qgc3RhdHVzLAogCWNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC00OSw3ICs1MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZGlmZl9ub3RpZnkoCi0JY29uc3QgZ2l0X2RpZmZfbGlzdCAqZGlmZiwKKwljb25zdCBnaXRfZGlmZiAqZGlmZiwKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCiAJY29uc3QgY2hhciAqbWF0Y2hlZF9wYXRoc3BlYykKIHsKQEAgLTYxLDE0ICs2MiwxNyBAQAogfQogCiBzdGF0aWMgaW50IGRpZmZfZGVsdGFfX2Zyb21fb25lKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCi0JZ2l0X2RlbHRhX3QgICBzdGF0dXMsCisJZ2l0X2RpZmYgKmRpZmYsCisJZ2l0X2RlbHRhX3Qgc3RhdHVzLAogCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnkpCiB7CiAJZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOwogCWNvbnN0IGNoYXIgKm1hdGNoZWRfcGF0aHNwZWM7CiAJaW50IG5vdGlmeV9yZXM7CiAKKwlpZiAoKGVudHJ5LT5mbGFncyAmIEdJVF9JRFhFTlRSWV9WQUxJRCkgIT0gMCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoc3RhdHVzID09IEdJVF9ERUxUQV9JR05PUkVEICYmCiAJCURJRkZfRkxBR19JU05UX1NFVChkaWZmLCBHSVRfRElGRl9JTkNMVURFX0lHTk9SRUQpKQogCQlyZXR1cm4gMDsKQEAgLTc3LDE1ICs4MSwxMSBAQAogCQlESUZGX0ZMQUdfSVNOVF9TRVQoZGlmZiwgR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChlbnRyeS0+bW9kZSA9PSBHSVRfRklMRU1PREVfQ09NTUlUICYmCi0JCURJRkZfRkxBR19JU19TRVQoZGlmZiwgR0lUX0RJRkZfSUdOT1JFX1NVQk1PRFVMRVMpKQotCQlyZXR1cm4gMDsKLQotCWlmICghZ2l0X3BhdGhzcGVjX21hdGNoX3BhdGgoCisJaWYgKCFnaXRfcGF0aHNwZWNfX21hdGNoKAogCQkJJmRpZmYtPnBhdGhzcGVjLCBlbnRyeS0+cGF0aCwKIAkJCURJRkZfRkxBR19JU19TRVQoZGlmZiwgR0lUX0RJRkZfRElTQUJMRV9QQVRIU1BFQ19NQVRDSCksCi0JCQlESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpLAotCQkJJm1hdGNoZWRfcGF0aHNwZWMpKQorCQkJRElGRl9GTEFHX0lTX1NFVChkaWZmLCBHSVRfRElGRl9JR05PUkVfQ0FTRSksCisJCQkmbWF0Y2hlZF9wYXRoc3BlYywgTlVMTCkpCiAJCXJldHVybiAwOwogCiAJZGVsdGEgPSBkaWZmX2RlbHRhX19hbGxvYyhkaWZmLCBzdGF0dXMsIGVudHJ5LT5wYXRoKTsKQEAgLTkzLDYgKzkzLDcgQEAKIAogCS8qIFRoaXMgZm4gaXMganVzdCBmb3Igc2luZ2xlLXNpZGVkIGRpZmZzICovCiAJYXNzZXJ0KHN0YXR1cyAhPSBHSVRfREVMVEFfTU9ESUZJRUQpOworCWRlbHRhLT5uZmlsZXMgPSAxOwogCiAJaWYgKGRlbHRhLT5zdGF0dXMgPT0gR0lUX0RFTFRBX0RFTEVURUQpIHsKIAkJZGVsdGEtPm9sZF9maWxlLm1vZGUgPSBlbnRyeS0+bW9kZTsKQEAgLTEyMyw3ICsxMjQsNyBAQAogfQogCiBzdGF0aWMgaW50IGRpZmZfZGVsdGFfX2Zyb21fdHdvKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJZ2l0X2RlbHRhX3QgICBzdGF0dXMsCiAJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICpvbGRfZW50cnksCiAJdWludDMyX3Qgb2xkX21vZGUsCkBAIC0xNDAsMTEgKzE0MSw2IEBACiAJCURJRkZfRkxBR19JU05UX1NFVChkaWZmLCBHSVRfRElGRl9JTkNMVURFX1VOTU9ESUZJRUQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChvbGRfZW50cnktPm1vZGUgPT0gR0lUX0ZJTEVNT0RFX0NPTU1JVCAmJgotCQluZXdfZW50cnktPm1vZGUgPT0gR0lUX0ZJTEVNT0RFX0NPTU1JVCAmJgotCQlESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX0lHTk9SRV9TVUJNT0RVTEVTKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoRElGRl9GTEFHX0lTX1NFVChkaWZmLCBHSVRfRElGRl9SRVZFUlNFKSkgewogCQl1aW50MzJfdCB0ZW1wX21vZGUgPSBvbGRfbW9kZTsKIAkJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICp0ZW1wX2VudHJ5ID0gb2xkX2VudHJ5OwpAQCAtMTU2LDYgKzE1Miw3IEBACiAKIAlkZWx0YSA9IGRpZmZfZGVsdGFfX2FsbG9jKGRpZmYsIHN0YXR1cywgY2Fub25pY2FsX3BhdGgpOwogCUdJVEVSUl9DSEVDS19BTExPQyhkZWx0YSk7CisJZGVsdGEtPm5maWxlcyA9IDI7CiAKIAlnaXRfb2lkX2NweSgmZGVsdGEtPm9sZF9maWxlLm9pZCwgJm9sZF9lbnRyeS0+b2lkKTsKIAlkZWx0YS0+b2xkX2ZpbGUuc2l6ZSA9IG9sZF9lbnRyeS0+ZmlsZV9zaXplOwpAQCAtMTg5LDcgKzE4Niw3IEBACiB9CiAKIHN0YXRpYyBnaXRfZGlmZl9kZWx0YSAqZGlmZl9kZWx0YV9fbGFzdF9mb3JfaXRlbSgKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAorCWdpdF9kaWZmICpkaWZmLAogCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqaXRlbSkKIHsKIAlnaXRfZGlmZl9kZWx0YSAqZGVsdGEgPSBnaXRfdmVjdG9yX2xhc3QoJmRpZmYtPmRlbHRhcyk7CkBAIC0yNDcsNiArMjQ0LDExIEBACiAJcmV0dXJuIHN0cjsKIH0KIAorY29uc3QgY2hhciAqZ2l0X2RpZmZfZGVsdGFfX3BhdGgoY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhKQoreworCXJldHVybiBkaWZmX2RlbHRhX19wYXRoKGRlbHRhKTsKK30KKwogaW50IGdpdF9kaWZmX2RlbHRhX19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGEgPSBhLCAqZGIgPSBiOwpAQCAtMjYxLDYgKzI2MywyNiBAQAogCXJldHVybiB2YWwgPyB2YWwgOiAoKGludClkYS0+c3RhdHVzIC0gKGludClkYi0+c3RhdHVzKTsKIH0KIAorR0lUX0lOTElORShjb25zdCBjaGFyICopIGRpZmZfZGVsdGFfX2kyd19wYXRoKGNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSkKK3sKKwlyZXR1cm4gZGVsdGEtPm9sZF9maWxlLnBhdGggPworCQlkZWx0YS0+b2xkX2ZpbGUucGF0aCA6IGRlbHRhLT5uZXdfZmlsZS5wYXRoOworfQorCitpbnQgZ2l0X2RpZmZfZGVsdGFfX2kyd19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGEgPSBhLCAqZGIgPSBiOworCWludCB2YWwgPSBzdHJjbXAoZGlmZl9kZWx0YV9faTJ3X3BhdGgoZGEpLCBkaWZmX2RlbHRhX19pMndfcGF0aChkYikpOworCXJldHVybiB2YWwgPyB2YWwgOiAoKGludClkYS0+c3RhdHVzIC0gKGludClkYi0+c3RhdHVzKTsKK30KKworaW50IGdpdF9kaWZmX2RlbHRhX19pMndfY2FzZWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkYSA9IGEsICpkYiA9IGI7CisJaW50IHZhbCA9IHN0cmNhc2VjbXAoZGlmZl9kZWx0YV9faTJ3X3BhdGgoZGEpLCBkaWZmX2RlbHRhX19pMndfcGF0aChkYikpOworCXJldHVybiB2YWwgPyB2YWwgOiAoKGludClkYS0+c3RhdHVzIC0gKGludClkYi0+c3RhdHVzKTsKK30KKwogYm9vbCBnaXRfZGlmZl9kZWx0YV9fc2hvdWxkX3NraXAoCiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cywgY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhKQogewpAQCAtMzIzLDEzICszNDUsMTMgQEAKIAlyZXR1cm4gcGZ4OwogfQogCi1zdGF0aWMgZ2l0X2RpZmZfbGlzdCAqZGlmZl9saXN0X2FsbG9jKAorc3RhdGljIGdpdF9kaWZmICpkaWZmX2xpc3RfYWxsb2MoCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCiAJZ2l0X2l0ZXJhdG9yICpvbGRfaXRlciwKIAlnaXRfaXRlcmF0b3IgKm5ld19pdGVyKQogewogCWdpdF9kaWZmX29wdGlvbnMgZGZsdCA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9kaWZmX2xpc3QpKTsKKwlnaXRfZGlmZiAqZGlmZiA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfZGlmZikpOwogCWlmICghZGlmZikKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTM0Myw3ICszNjUsNyBAQAogCiAJaWYgKGdpdF92ZWN0b3JfaW5pdCgmZGlmZi0+ZGVsdGFzLCAwLCBnaXRfZGlmZl9kZWx0YV9fY21wKSA8IDAgfHwKIAkJZ2l0X3Bvb2xfaW5pdCgmZGlmZi0+cG9vbCwgMSwgMCkgPCAwKSB7Ci0JCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwkJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0zNTEsMTQgKzM3MywxNCBAQAogCSAqIHRoZSBpZ25vcmVfY2FzZSBiaXQgc2V0ICovCiAJaWYgKCFnaXRfaXRlcmF0b3JfaWdub3JlX2Nhc2Uob2xkX2l0ZXIpICYmCiAJCSFnaXRfaXRlcmF0b3JfaWdub3JlX2Nhc2UobmV3X2l0ZXIpKSB7Ci0JCWRpZmYtPm9wdHMuZmxhZ3MgJj0gfkdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0U7CisJCWRpZmYtPm9wdHMuZmxhZ3MgJj0gfkdJVF9ESUZGX0lHTk9SRV9DQVNFOwogCiAJCWRpZmYtPnN0cmNvbXAgICAgPSBnaXRfX3N0cmNtcDsKIAkJZGlmZi0+c3RybmNvbXAgICA9IGdpdF9fc3RybmNtcDsKIAkJZGlmZi0+cGZ4Y29tcCAgICA9IGdpdF9fcHJlZml4Y21wOwogCQlkaWZmLT5lbnRyeWNvbXAgID0gZ2l0X2luZGV4X2VudHJ5X19jbXA7CiAJfSBlbHNlIHsKLQkJZGlmZi0+b3B0cy5mbGFncyB8PSBHSVRfRElGRl9ERUxUQVNfQVJFX0lDQVNFOworCQlkaWZmLT5vcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0lHTk9SRV9DQVNFOwogCiAJCWRpZmYtPnN0cmNvbXAgICAgPSBnaXRfX3N0cmNhc2VjbXA7CiAJCWRpZmYtPnN0cm5jb21wICAgPSBnaXRfX3N0cm5jYXNlY21wOwpAQCAtMzcyLDcgKzM5NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZGlmZl9saXN0X2FwcGx5X29wdGlvbnMoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKKwlnaXRfZGlmZiAqZGlmZiwKIAljb25zdCBnaXRfZGlmZl9vcHRpb25zICpvcHRzKQogewogCWdpdF9jb25maWcgKmNmZzsKQEAgLTM4MiwxMiArNDA0LDEyIEBACiAKIAlpZiAob3B0cykgewogCQkvKiBjb3B5IHVzZXIgb3B0aW9ucyAoZXhjZXB0IGNhc2Ugc2Vuc2l0aXZpdHkgaW5mbyBmcm9tIGl0ZXJhdG9ycykgKi8KLQkJYm9vbCBpY2FzZSA9IERJRkZfRkxBR19JU19TRVQoZGlmZiwgR0lUX0RJRkZfREVMVEFTX0FSRV9JQ0FTRSk7CisJCWJvb2wgaWNhc2UgPSBESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX0lHTk9SRV9DQVNFKTsKIAkJbWVtY3B5KCZkaWZmLT5vcHRzLCBvcHRzLCBzaXplb2YoZGlmZi0+b3B0cykpOwotCQlESUZGX0ZMQUdfU0VUKGRpZmYsIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UsIGljYXNlKTsKKwkJRElGRl9GTEFHX1NFVChkaWZmLCBHSVRfRElGRl9JR05PUkVfQ0FTRSwgaWNhc2UpOwogCiAJCS8qIGluaXRpYWxpemUgcGF0aHNwZWMgZnJvbSBvcHRpb25zICovCi0JCWlmIChnaXRfcGF0aHNwZWNfaW5pdCgmZGlmZi0+cGF0aHNwZWMsICZvcHRzLT5wYXRoc3BlYywgcG9vbCkgPCAwKQorCQlpZiAoZ2l0X3BhdGhzcGVjX192aW5pdCgmZGlmZi0+cGF0aHNwZWMsICZvcHRzLT5wYXRoc3BlYywgcG9vbCkgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzk2LDcgKzQxOCw3IEBACiAJCWRpZmYtPm9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9UWVBFQ0hBTkdFOwogCiAJLyogZmxhZyBJTkNMVURFX1VOVFJBQ0tFRF9DT05URU5UIGltcGxpZXMgSU5DTFVERV9VTlRSQUNLRUQgKi8KLQlpZiAoRElGRl9GTEFHX0lTX1NFVChkaWZmLCBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRF9DT05URU5UKSkKKwlpZiAoRElGRl9GTEFHX0lTX1NFVChkaWZmLCBHSVRfRElGRl9TSE9XX1VOVFJBQ0tFRF9DT05URU5UKSkKIAkJZGlmZi0+b3B0cy5mbGFncyB8PSBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRDsKIAogCS8qIGxvYWQgY29uZmlnIHZhbHVlcyB0aGF0IGFmZmVjdCBkaWZmIGJlaGF2aW9yICovCkBAIC00MDcsNyArNDI5LDcgQEAKIAkJZGlmZi0+ZGlmZmNhcHMgPSBkaWZmLT5kaWZmY2FwcyB8IEdJVF9ESUZGQ0FQU19IQVNfU1lNTElOS1M7CiAKIAlpZiAoIWdpdF9yZXBvc2l0b3J5X19jdmFyKCZ2YWwsIHJlcG8sIEdJVF9DVkFSX0lHTk9SRVNUQVQpICYmIHZhbCkKLQkJZGlmZi0+ZGlmZmNhcHMgPSBkaWZmLT5kaWZmY2FwcyB8IEdJVF9ESUZGQ0FQU19BU1NVTUVfVU5DSEFOR0VEOworCQlkaWZmLT5kaWZmY2FwcyA9IGRpZmYtPmRpZmZjYXBzIHwgR0lUX0RJRkZDQVBTX0lHTk9SRV9TVEFUOwogCiAJaWYgKChkaWZmLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfSUdOT1JFX0ZJTEVNT0RFKSA9PSAwICYmCiAJCSFnaXRfcmVwb3NpdG9yeV9fY3ZhcigmdmFsLCByZXBvLCBHSVRfQ1ZBUl9GSUxFTU9ERSkgJiYgdmFsKQpAQCAtNDIzLDEwICs0NDUsMjggQEAKIAogCS8qIElmIG5vdCBnaXZlbiBleHBsaWNpdCBgb3B0c2AsIGNoZWNrIGBkaWZmLnh5emAgY29uZmlncyAqLwogCWlmICghb3B0cykgewotCQlkaWZmLT5vcHRzLmNvbnRleHRfbGluZXMgPSBjb25maWdfaW50KGNmZywgImRpZmYuY29udGV4dCIsIDMpOworCQlpbnQgY29udGV4dCA9IGNvbmZpZ19pbnQoY2ZnLCAiZGlmZi5jb250ZXh0IiwgMyk7CisJCWRpZmYtPm9wdHMuY29udGV4dF9saW5lcyA9IGNvbnRleHQgPj0gMCA/ICh1aW50MTZfdCljb250ZXh0IDogMzsKIAotCQlpZiAoY29uZmlnX2Jvb2woY2ZnLCAiZGlmZi5pZ25vcmVTdWJtb2R1bGVzIiwgMCkpCi0JCQlkaWZmLT5vcHRzLmZsYWdzIHw9IEdJVF9ESUZGX0lHTk9SRV9TVUJNT0RVTEVTOworCQkvKiBhZGQgb3RoZXIgZGVmYXVsdHMgaGVyZSAqLworCX0KKworCS8qIFJldmVyc2Ugc3JjIGluZm8gaWYgZGlmZiBpcyByZXZlcnNlZCAqLworCWlmIChESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX1JFVkVSU0UpKSB7CisJCWdpdF9pdGVyYXRvcl90eXBlX3QgdG1wX3NyYyA9IGRpZmYtPm9sZF9zcmM7CisJCWRpZmYtPm9sZF9zcmMgPSBkaWZmLT5uZXdfc3JjOworCQlkaWZmLT5uZXdfc3JjID0gdG1wX3NyYzsKKwl9CisKKwkvKiBpZiBpZ25vcmVfc3VibW9kdWxlcyBub3QgZXhwbGljaXRseSBzZXQsIGNoZWNrIGRpZmYgY29uZmlnICovCisJaWYgKGRpZmYtPm9wdHMuaWdub3JlX3N1Ym1vZHVsZXMgPD0gMCkgeworCQljb25zdCBjaGFyICpzdHI7CisKKwkJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZygmc3RyICwgY2ZnLCAiZGlmZi5pZ25vcmVTdWJtb2R1bGVzIikgPCAwKQorCQkJZ2l0ZXJyX2NsZWFyKCk7CisJCWVsc2UgaWYgKHN0ciAhPSBOVUxMICYmCisJCQlnaXRfc3VibW9kdWxlX3BhcnNlX2lnbm9yZSgmZGlmZi0+b3B0cy5pZ25vcmVfc3VibW9kdWxlcywgc3RyKSA8IDApCisJCQlnaXRlcnJfY2xlYXIoKTsKIAl9CiAKIAkvKiBpZiBlaXRoZXIgcHJlZml4IGlzIG5vdCBzZXQsIGZpZ3VyZSBvdXQgYXBwcm9wcmlhdGUgdmFsdWUgKi8KQEAgLTQ1NCwxNSArNDk0LDE1IEBACiAJCXJldHVybiAtMTsKIAogCWlmIChESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX1JFVkVSU0UpKSB7Ci0JCWNvbnN0IGNoYXIgKnN3YXAgPSBkaWZmLT5vcHRzLm9sZF9wcmVmaXg7Ci0JCWRpZmYtPm9wdHMub2xkX3ByZWZpeCA9IGRpZmYtPm9wdHMubmV3X3ByZWZpeDsKLQkJZGlmZi0+b3B0cy5uZXdfcHJlZml4ID0gc3dhcDsKKwkJY29uc3QgY2hhciAqdG1wX3ByZWZpeCA9IGRpZmYtPm9wdHMub2xkX3ByZWZpeDsKKwkJZGlmZi0+b3B0cy5vbGRfcHJlZml4ICA9IGRpZmYtPm9wdHMubmV3X3ByZWZpeDsKKwkJZGlmZi0+b3B0cy5uZXdfcHJlZml4ICA9IHRtcF9wcmVmaXg7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZmZfbGlzdF9mcmVlKGdpdF9kaWZmX2xpc3QgKmRpZmYpCitzdGF0aWMgdm9pZCBkaWZmX2xpc3RfZnJlZShnaXRfZGlmZiAqZGlmZikKIHsKIAlnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00NzMsMTQgKzUxMywxNCBAQAogCX0KIAlnaXRfdmVjdG9yX2ZyZWUoJmRpZmYtPmRlbHRhcyk7CiAKLQlnaXRfcGF0aHNwZWNfZnJlZSgmZGlmZi0+cGF0aHNwZWMpOworCWdpdF9wYXRoc3BlY19fdmZyZWUoJmRpZmYtPnBhdGhzcGVjKTsKIAlnaXRfcG9vbF9jbGVhcigmZGlmZi0+cG9vbCk7CiAKIAlnaXRfX21lbXplcm8oZGlmZiwgc2l6ZW9mKCpkaWZmKSk7CiAJZ2l0X19mcmVlKGRpZmYpOwogfQogCi12b2lkIGdpdF9kaWZmX2xpc3RfZnJlZShnaXRfZGlmZl9saXN0ICpkaWZmKQordm9pZCBnaXRfZGlmZl9mcmVlKGdpdF9kaWZmICpkaWZmKQogewogCWlmICghZGlmZikKIAkJcmV0dXJuOwpAQCAtNDg4LDcgKzUyOCw3IEBACiAJR0lUX1JFRkNPVU5UX0RFQyhkaWZmLCBkaWZmX2xpc3RfZnJlZSk7CiB9CiAKLXZvaWQgZ2l0X2RpZmZfbGlzdF9hZGRyZWYoZ2l0X2RpZmZfbGlzdCAqZGlmZikKK3ZvaWQgZ2l0X2RpZmZfYWRkcmVmKGdpdF9kaWZmICpkaWZmKQogewogCUdJVF9SRUZDT1VOVF9JTkMoZGlmZik7CiB9CkBAIC01NDEsMjEgKzU4MSwyMSBAQAogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZpbGUgc2l6ZSBvdmVyZmxvdyAoZm9yIDMyLWJpdHMpIG9uICclcyciLCBwYXRoKTsKIAkJcmVzdWx0ID0gLTE7CiAJfSBlbHNlIHsKLQkJZ2l0X3ZlY3RvciBmaWx0ZXJzID0gR0lUX1ZFQ1RPUl9JTklUOworCQlnaXRfZmlsdGVyX2xpc3QgKmZsID0gTlVMTDsKIAotCQlyZXN1bHQgPSBnaXRfZmlsdGVyc19sb2FkKCZmaWx0ZXJzLCByZXBvLCBwYXRoLCBHSVRfRklMVEVSX1RPX09EQik7Ci0JCWlmIChyZXN1bHQgPj0gMCkgeworCQlyZXN1bHQgPSBnaXRfZmlsdGVyX2xpc3RfbG9hZCgmZmwsIHJlcG8sIE5VTEwsIHBhdGgsIEdJVF9GSUxURVJfVE9fT0RCKTsKKwkJaWYgKCFyZXN1bHQpIHsKIAkJCWludCBmZCA9IGdpdF9mdXRpbHNfb3Blbl9ybyhmdWxsX3BhdGgucHRyKTsKIAkJCWlmIChmZCA8IDApCiAJCQkJcmVzdWx0ID0gZmQ7CiAJCQllbHNlIHsKIAkJCQlyZXN1bHQgPSBnaXRfb2RiX19oYXNoZmRfZmlsdGVyZWQoCi0JCQkJCW9pZCwgZmQsIChzaXplX3Qpc2l6ZSwgR0lUX09CSl9CTE9CLCAmZmlsdGVycyk7CisJCQkJCW9pZCwgZmQsIChzaXplX3Qpc2l6ZSwgR0lUX09CSl9CTE9CLCBmbCk7CiAJCQkJcF9jbG9zZShmZCk7CiAJCQl9Ci0JCX0KIAotCQlnaXRfZmlsdGVyc19mcmVlKCZmaWx0ZXJzKTsKKwkJCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKKwkJfQogCX0KIAogY2xlYW51cDoKQEAgLTU4NCw0NSArNjI0LDU0IEBACiBzdGF0aWMgaW50IG1heWJlX21vZGlmaWVkX3N1Ym1vZHVsZSgKIAlnaXRfZGVsdGFfdCAqc3RhdHVzLAogCWdpdF9vaWQgKmZvdW5kX29pZCwKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAorCWdpdF9kaWZmICpkaWZmLAogCWRpZmZfaW5fcHJvZ3Jlc3MgKmluZm8pCiB7CiAJaW50IGVycm9yID0gMDsKIAlnaXRfc3VibW9kdWxlICpzdWI7CiAJdW5zaWduZWQgaW50IHNtX3N0YXR1cyA9IDA7Ci0JY29uc3QgZ2l0X29pZCAqc21fb2lkOworCWdpdF9zdWJtb2R1bGVfaWdub3JlX3QgaWduID0gZGlmZi0+b3B0cy5pZ25vcmVfc3VibW9kdWxlczsKIAogCSpzdGF0dXMgPSBHSVRfREVMVEFfVU5NT0RJRklFRDsKIAotCWlmICghRElGRl9GTEFHX0lTX1NFVChkaWZmLCBHSVRfRElGRl9JR05PUkVfU1VCTU9EVUxFUykgJiYKLQkJIShlcnJvciA9IGdpdF9zdWJtb2R1bGVfbG9va3VwKAotCQkJICAmc3ViLCBkaWZmLT5yZXBvLCBpbmZvLT5uaXRlbS0+cGF0aCkpICYmCi0JCWdpdF9zdWJtb2R1bGVfaWdub3JlKHN1YikgIT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfQUxMICYmCi0JCSEoZXJyb3IgPSBnaXRfc3VibW9kdWxlX3N0YXR1cygmc21fc3RhdHVzLCBzdWIpKSkKLQl7Ci0JCS8qIGNoZWNrIElTX1dEX1VOTU9ESUZJRUQgYmVjYXVzZSB0aGlzIGNhc2UgaXMgb25seSB1c2VkCi0JCSAqIHdoZW4gdGhlIG5ldyBzaWRlIG9mIHRoZSBkaWZmIGlzIHRoZSB3b3JraW5nIGRpcmVjdG9yeQotCQkgKi8KLQkJaWYgKCFHSVRfU1VCTU9EVUxFX1NUQVRVU19JU19XRF9VTk1PRElGSUVEKHNtX3N0YXR1cykpCi0JCQkqc3RhdHVzID0gR0lUX0RFTFRBX01PRElGSUVEOworCWlmIChESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX0lHTk9SRV9TVUJNT0RVTEVTKSB8fAorCQlpZ24gPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfQUxMKQorCQlyZXR1cm4gMDsKIAotCQkvKiBncmFiIE9JRCB3aGlsZSB3ZSBhcmUgaGVyZSAqLwotCQlpZiAoZ2l0X29pZF9pc3plcm8oJmluZm8tPm5pdGVtLT5vaWQpICYmCi0JCQkoc21fb2lkID0gZ2l0X3N1Ym1vZHVsZV93ZF9pZChzdWIpKSAhPSBOVUxMKQotCQkJZ2l0X29pZF9jcHkoZm91bmRfb2lkLCBzbV9vaWQpOworCWlmICgoZXJyb3IgPSBnaXRfc3VibW9kdWxlX2xvb2t1cCgKKwkJCSZzdWIsIGRpZmYtPnJlcG8sIGluZm8tPm5pdGVtLT5wYXRoKSkgPCAwKSB7CisKKwkJLyogR0lUX0VFWElTVFMgbWVhbnMgZGlyIHdpdGggLmdpdCBpbiBpdCB3YXMgZm91bmQgLSBpZ25vcmUgaXQgKi8KKwkJaWYgKGVycm9yID09IEdJVF9FRVhJU1RTKSB7CisJCQlnaXRlcnJfY2xlYXIoKTsKKwkJCWVycm9yID0gMDsKKwkJfQorCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JLyogR0lUX0VFWElTVFMgbWVhbnMgYSBkaXIgd2l0aCAuZ2l0IGluIGl0IHdhcyBmb3VuZCAtIGlnbm9yZSBpdCAqLwotCWlmIChlcnJvciA9PSBHSVRfRUVYSVNUUykgewotCQlnaXRlcnJfY2xlYXIoKTsKLQkJZXJyb3IgPSAwOwotCX0KKwlpZiAoaWduIDw9IDAgJiYgZ2l0X3N1Ym1vZHVsZV9pZ25vcmUoc3ViKSA9PSBHSVRfU1VCTU9EVUxFX0lHTk9SRV9BTEwpCisJCXJldHVybiAwOwogCi0JcmV0dXJuIGVycm9yOworCWlmICgoZXJyb3IgPSBnaXRfc3VibW9kdWxlX19zdGF0dXMoCisJCQkmc21fc3RhdHVzLCBOVUxMLCBOVUxMLCBmb3VuZF9vaWQsIHN1YiwgaWduKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKiBjaGVjayBJU19XRF9VTk1PRElGSUVEIGJlY2F1c2UgdGhpcyBjYXNlIGlzIG9ubHkgdXNlZAorCSAqIHdoZW4gdGhlIG5ldyBzaWRlIG9mIHRoZSBkaWZmIGlzIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorCSAqLworCWlmICghR0lUX1NVQk1PRFVMRV9TVEFUVVNfSVNfV0RfVU5NT0RJRklFRChzbV9zdGF0dXMpKQorCQkqc3RhdHVzID0gR0lUX0RFTFRBX01PRElGSUVEOworCisJLyogbm93IHRoYXQgd2UgaGF2ZSBhIEhFQUQgT0lELCBjaGVjayBpZiBIRUFEIG1vdmVkICovCisJaWYgKChzbV9zdGF0dXMgJiBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9XRCkgIT0gMCAmJgorCQkhZ2l0X29pZF9lcXVhbCgmaW5mby0+b2l0ZW0tPm9pZCwgZm91bmRfb2lkKSkKKwkJKnN0YXR1cyA9IEdJVF9ERUxUQV9NT0RJRklFRDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1heWJlX21vZGlmaWVkKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJZGlmZl9pbl9wcm9ncmVzcyAqaW5mbykKIHsKIAlnaXRfb2lkIG5vaWQ7CkBAIC02MzQsMTEgKzY4MywxMSBAQAogCWJvb2wgbmV3X2lzX3dvcmtkaXIgPSAoaW5mby0+bmV3X2l0ZXItPnR5cGUgPT0gR0lUX0lURVJBVE9SX1RZUEVfV09SS0RJUik7CiAJY29uc3QgY2hhciAqbWF0Y2hlZF9wYXRoc3BlYzsKIAotCWlmICghZ2l0X3BhdGhzcGVjX21hdGNoX3BhdGgoCisJaWYgKCFnaXRfcGF0aHNwZWNfX21hdGNoKAogCQkJJmRpZmYtPnBhdGhzcGVjLCBvaXRlbS0+cGF0aCwKIAkJCURJRkZfRkxBR19JU19TRVQoZGlmZiwgR0lUX0RJRkZfRElTQUJMRV9QQVRIU1BFQ19NQVRDSCksCi0JCQlESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpLAotCQkJJm1hdGNoZWRfcGF0aHNwZWMpKQorCQkJRElGRl9GTEFHX0lTX1NFVChkaWZmLCBHSVRfRElGRl9JR05PUkVfQ0FTRSksCisJCQkmbWF0Y2hlZF9wYXRoc3BlYywgTlVMTCkpCiAJCXJldHVybiAwOwogCiAJbWVtc2V0KCZub2lkLCAwLCBzaXplb2Yobm9pZCkpOwpAQCAtNjU1LDkgKzcwNCw4IEBACiAJCW5tb2RlID0gKG5tb2RlICYgfk1PREVfQklUU19NQVNLKSB8IChvbW9kZSAmIE1PREVfQklUU19NQVNLKTsKIAogCS8qIHN1cHBvcnQgImFzc3VtZSB1bmNoYW5nZWQiIChwb29ybHksIGIvYyB3ZSBzdGlsbCBzdGF0IGV2ZXJ5dGhpbmcpICovCi0JaWYgKChkaWZmLT5kaWZmY2FwcyAmIEdJVF9ESUZGQ0FQU19BU1NVTUVfVU5DSEFOR0VEKSAhPSAwKQotCQlzdGF0dXMgPSAob2l0ZW0tPmZsYWdzX2V4dGVuZGVkICYgR0lUX0lEWEVOVFJZX0lOVEVOVF9UT19BREQpID8KLQkJCUdJVF9ERUxUQV9NT0RJRklFRCA6IEdJVF9ERUxUQV9VTk1PRElGSUVEOworCWlmICgob2l0ZW0tPmZsYWdzICYgR0lUX0lEWEVOVFJZX1ZBTElEKSAhPSAwKQorCQlzdGF0dXMgPSBHSVRfREVMVEFfVU5NT0RJRklFRDsKIAogCS8qIHN1cHBvcnQgInNraXAgd29ya3RyZWUiIGluZGV4IGJpdCAqLwogCWVsc2UgaWYgKChvaXRlbS0+ZmxhZ3NfZXh0ZW5kZWQgJiBHSVRfSURYRU5UUllfU0tJUF9XT1JLVFJFRSkgIT0gMCkKQEAgLTcxOSw3ICs3NjcsNyBAQAogCS8qIGlmIHdlIGdvdCBoZXJlIGFuZCBkZWNpZGVkIHRoYXQgdGhlIGZpbGVzIGFyZSBtb2RpZmllZCwgYnV0IHdlCiAJICogaGF2ZW4ndCBjYWxjdWxhdGVkIHRoZSBPSUQgb2YgdGhlIG5ldyBpdGVtLCB0aGVuIGNhbGN1bGF0ZSBpdCBub3cKIAkgKi8KLQlpZiAoc3RhdHVzICE9IEdJVF9ERUxUQV9VTk1PRElGSUVEICYmIGdpdF9vaWRfaXN6ZXJvKCZuaXRlbS0+b2lkKSkgeworCWlmIChzdGF0dXMgPT0gR0lUX0RFTFRBX01PRElGSUVEICYmIGdpdF9vaWRfaXN6ZXJvKCZuaXRlbS0+b2lkKSkgewogCQlpZiAoZ2l0X29pZF9pc3plcm8oJm5vaWQpKSB7CiAJCQlpZiAoZ2l0X2RpZmZfX29pZF9mb3JfZmlsZShkaWZmLT5yZXBvLAogCQkJCQluaXRlbS0+cGF0aCwgbml0ZW0tPm1vZGUsIG5pdGVtLT5maWxlX3NpemUsICZub2lkKSA8IDApCkBAIC03NDEsNyArNzg5LDcgQEAKIH0KIAogc3RhdGljIGJvb2wgZW50cnlfaXNfcHJlZml4ZWQoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKKwlnaXRfZGlmZiAqZGlmZiwKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKml0ZW0sCiAJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICpwcmVmaXhfaXRlbSkKIHsKQEAgLTc1OCw3ICs4MDYsNyBAQAogfQogCiBzdGF0aWMgaW50IGRpZmZfc2Nhbl9pbnNpZGVfdW50cmFja2VkX2RpcigKLQlnaXRfZGlmZl9saXN0ICpkaWZmLCBkaWZmX2luX3Byb2dyZXNzICppbmZvLCBnaXRfZGVsdGFfdCAqZGVsdGFfdHlwZSkKKwlnaXRfZGlmZiAqZGlmZiwgZGlmZl9pbl9wcm9ncmVzcyAqaW5mbywgZ2l0X2RlbHRhX3QgKmRlbHRhX3R5cGUpCiB7CiAJaW50IGVycm9yID0gMDsKIAlnaXRfYnVmIGJhc2UgPSBHSVRfQlVGX0lOSVQ7CkBAIC04MjQsNyArODcyLDcgQEAKIH0KIAogc3RhdGljIGludCBoYW5kbGVfdW5tYXRjaGVkX25ld19pdGVtKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsIGRpZmZfaW5fcHJvZ3Jlc3MgKmluZm8pCisJZ2l0X2RpZmYgKmRpZmYsIGRpZmZfaW5fcHJvZ3Jlc3MgKmluZm8pCiB7CiAJaW50IGVycm9yID0gMDsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKm5pdGVtID0gaW5mby0+bml0ZW07CkBAIC04NDIsNyArODkwLDcgQEAKIAkJCWdpdF9idWZfY2xlYXIoJmluZm8tPmlnbm9yZV9wcmVmaXgpOwogCX0KIAotCWlmIChTX0lTRElSKG5pdGVtLT5tb2RlKSkgeworCWlmIChuaXRlbS0+bW9kZSA9PSBHSVRfRklMRU1PREVfVFJFRSkgewogCQlib29sIHJlY3Vyc2VfaW50b19kaXIgPSBjb250YWluc19vaXRlbTsKIAogCQkvKiBpZiBub3QgYWxyZWFkeSBpbnNpZGUgYW4gaWdub3JlZCBkaXIsIGNoZWNrIGlmIHRoaXMgaXMgaWdub3JlZCAqLwpAQCAtODczLDcgKzkyMSw3IEBACiAJCSAqLwogCQlpZiAoIXJlY3Vyc2VfaW50b19kaXIgJiYKIAkJCWRlbHRhX3R5cGUgPT0gR0lUX0RFTFRBX1VOVFJBQ0tFRCAmJgotCQkJRElGRl9GTEFHX0lTTlRfU0VUKGRpZmYsIEdJVF9ESUZGX0ZBU1RfVU5UUkFDS0VEX0RJUlMpKQorCQkJRElGRl9GTEFHX0lTTlRfU0VUKGRpZmYsIEdJVF9ESUZGX0VOQUJMRV9GQVNUX1VOVFJBQ0tFRF9ESVJTKSkKIAkJewogCQkJZ2l0X2RpZmZfZGVsdGEgKmxhc3Q7CiAKQEAgLTk0Niw2ICs5OTQsMTYgQEAKIAllbHNlIGlmIChpbmZvLT5uZXdfaXRlci0+dHlwZSAhPSBHSVRfSVRFUkFUT1JfVFlQRV9XT1JLRElSKQogCQlkZWx0YV90eXBlID0gR0lUX0RFTFRBX0FEREVEOwogCisJZWxzZSBpZiAobml0ZW0tPm1vZGUgPT0gR0lUX0ZJTEVNT0RFX0NPTU1JVCkgeworCQlnaXRfc3VibW9kdWxlICpzbTsKKworCQkvKiBpZ25vcmUgdGhpbmdzIHRoYXQgYXJlIG5vdCBhY3R1YWwgc3VibW9kdWxlcyAqLworCQlpZiAoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBpbmZvLT5yZXBvLCBuaXRlbS0+cGF0aCkgIT0gMCkgeworCQkJZ2l0ZXJyX2NsZWFyKCk7CisJCQlkZWx0YV90eXBlID0gR0lUX0RFTFRBX0lHTk9SRUQ7CisJCX0KKwl9CisKIAkvKiBBY3R1YWxseSBjcmVhdGUgdGhlIHJlY29yZCBmb3IgdGhpcyBpdGVtIGlmIG5lY2Vzc2FyeSAqLwogCWlmICgoZXJyb3IgPSBkaWZmX2RlbHRhX19mcm9tX29uZShkaWZmLCBkZWx0YV90eXBlLCBuaXRlbSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwpAQCAtOTY5LDcgKzEwMjcsNyBAQAogfQogCiBzdGF0aWMgaW50IGhhbmRsZV91bm1hdGNoZWRfb2xkX2l0ZW0oCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwgZGlmZl9pbl9wcm9ncmVzcyAqaW5mbykKKwlnaXRfZGlmZiAqZGlmZiwgZGlmZl9pbl9wcm9ncmVzcyAqaW5mbykKIHsKIAlpbnQgZXJyb3IgPSBkaWZmX2RlbHRhX19mcm9tX29uZShkaWZmLCBHSVRfREVMVEFfREVMRVRFRCwgaW5mby0+b2l0ZW0pOwogCWlmIChlcnJvciA8IDApCkBAIC0xMDAxLDcgKzEwNTksNyBAQAogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9tYXRjaGVkX2l0ZW0oCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwgZGlmZl9pbl9wcm9ncmVzcyAqaW5mbykKKwlnaXRfZGlmZiAqZGlmZiwgZGlmZl9pbl9wcm9ncmVzcyAqaW5mbykKIHsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC0xMDE2LDcgKzEwNzQsNyBAQAogfQogCiBpbnQgZ2l0X2RpZmZfX2Zyb21faXRlcmF0b3JzKAotCWdpdF9kaWZmX2xpc3QgKipkaWZmX3B0ciwKKwlnaXRfZGlmZiAqKmRpZmZfcHRyLAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAogCWdpdF9pdGVyYXRvciAqb2xkX2l0ZXIsCiAJZ2l0X2l0ZXJhdG9yICpuZXdfaXRlciwKQEAgLTEwMjQsNyArMTA4Miw3IEBACiB7CiAJaW50IGVycm9yID0gMDsKIAlkaWZmX2luX3Byb2dyZXNzIGluZm87Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAogCSpkaWZmX3B0ciA9IE5VTEw7CiAKQEAgLTEwMzcsNyArMTA5NSw3IEBACiAJZ2l0X2J1Zl9pbml0KCZpbmZvLmlnbm9yZV9wcmVmaXgsIDApOwogCiAJLyogbWFrZSBpdGVyYXRvcnMgaGF2ZSBtYXRjaGluZyBpY2FzZSBiZWhhdmlvciAqLwotCWlmIChESUZGX0ZMQUdfSVNfU0VUKGRpZmYsIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpKSB7CisJaWYgKERJRkZfRkxBR19JU19TRVQoZGlmZiwgR0lUX0RJRkZfSUdOT1JFX0NBU0UpKSB7CiAJCWlmICgoZXJyb3IgPSBnaXRfaXRlcmF0b3Jfc2V0X2lnbm9yZV9jYXNlKG9sZF9pdGVyLCB0cnVlKSkgPCAwIHx8CiAJCQkoZXJyb3IgPSBnaXRfaXRlcmF0b3Jfc2V0X2lnbm9yZV9jYXNlKG5ld19pdGVyLCB0cnVlKSkgPCAwKQogCQkJZ290byBjbGVhbnVwOwpAQCAtMTA4NSw3ICsxMTQzLDcgQEAKIAlpZiAoIWVycm9yKQogCQkqZGlmZl9wdHIgPSBkaWZmOwogCWVsc2UKLQkJZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCQlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJZ2l0X2J1Zl9mcmVlKCZpbmZvLmlnbm9yZV9wcmVmaXgpOwogCkBAIC0xMTAyLDcgKzExNjAsNyBAQAogfSB3aGlsZSAoMCkKIAogaW50IGdpdF9kaWZmX3RyZWVfdG9fdHJlZSgKLQlnaXRfZGlmZl9saXN0ICoqZGlmZiwKKwlnaXRfZGlmZiAqKmRpZmYsCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCiAJZ2l0X3RyZWUgKm9sZF90cmVlLAogCWdpdF90cmVlICpuZXdfdHJlZSwKQEAgLTExMTcsNyArMTE3NSw3IEBACiAJICogY3VycmVudGx5IGNhc2UgaW5zZW5zaXRpdmUsIHVubGVzcyB0aGUgdXNlciBleHBsaWNpdGx5IGFza2VkCiAJICogZm9yIGNhc2UgaW5zZW5zaXRpdml0eQogCSAqLwotCWlmIChvcHRzICYmIChvcHRzLT5mbGFncyAmIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpICE9IDApCisJaWYgKG9wdHMgJiYgKG9wdHMtPmZsYWdzICYgR0lUX0RJRkZfSUdOT1JFX0NBU0UpICE9IDApCiAJCWlmbGFnID0gR0lUX0lURVJBVE9SX0lHTk9SRV9DQVNFOwogCiAJRElGRl9GUk9NX0lURVJBVE9SUygKQEAgLTExMjgsOCArMTE4NiwxOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBkaWZmX2xvYWRfaW5kZXgoZ2l0X2luZGV4ICoqaW5kZXgsIGdpdF9yZXBvc2l0b3J5ICpyZXBvKQoreworCWludCBlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKGluZGV4LCByZXBvKTsKKworCS8qIHJlbG9hZCB0aGUgcmVwb3NpdG9yeSBpbmRleCB3aGVuIHVzZXIgZGlkIG5vdCBwYXNzIG9uZSBpbiAqLworCWlmICghZXJyb3IgJiYgZ2l0X2luZGV4X3JlYWQoKmluZGV4LCBmYWxzZSkgPCAwKQorCQlnaXRlcnJfY2xlYXIoKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogaW50IGdpdF9kaWZmX3RyZWVfdG9faW5kZXgoCi0JZ2l0X2RpZmZfbGlzdCAqKmRpZmYsCisJZ2l0X2RpZmYgKipkaWZmLAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAogCWdpdF90cmVlICpvbGRfdHJlZSwKIAlnaXRfaW5kZXggKmluZGV4LApAQCAtMTE0MCw3ICsxMjA5LDcgQEAKIAogCWFzc2VydChkaWZmICYmIHJlcG8pOwogCi0JaWYgKCFpbmRleCAmJiAoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pbmRleF9fd2Vha3B0cigmaW5kZXgsIHJlcG8pKSA8IDApCisJaWYgKCFpbmRleCAmJiAoZXJyb3IgPSBkaWZmX2xvYWRfaW5kZXgoJmluZGV4LCByZXBvKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoaW5kZXgtPmlnbm9yZV9jYXNlKSB7CkBAIC0xMTU3LDkgKzEyMjYsOSBAQAogCQlnaXRfaW5kZXhfX3NldF9pZ25vcmVfY2FzZShpbmRleCwgdHJ1ZSk7CiAKIAkJaWYgKCFlcnJvcikgewotCQkJZ2l0X2RpZmZfbGlzdCAqZCA9ICpkaWZmOworCQkJZ2l0X2RpZmYgKmQgPSAqZGlmZjsKIAotCQkJZC0+b3B0cy5mbGFncyB8PSBHSVRfRElGRl9ERUxUQVNfQVJFX0lDQVNFOworCQkJZC0+b3B0cy5mbGFncyB8PSBHSVRfRElGRl9JR05PUkVfQ0FTRTsKIAkJCWQtPnN0cmNvbXAgICAgPSBnaXRfX3N0cmNhc2VjbXA7CiAJCQlkLT5zdHJuY29tcCAgID0gZ2l0X19zdHJuY2FzZWNtcDsKIAkJCWQtPnBmeGNvbXAgICAgPSBnaXRfX3ByZWZpeGNtcF9pY2FzZTsKQEAgLTExNzQsNyArMTI0Myw3IEBACiB9CiAKIGludCBnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKAotCWdpdF9kaWZmX2xpc3QgKipkaWZmLAorCWdpdF9kaWZmICoqZGlmZiwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAlnaXRfaW5kZXggKmluZGV4LAogCWNvbnN0IGdpdF9kaWZmX29wdGlvbnMgKm9wdHMpCkBAIC0xMTgzLDcgKzEyNTIsNyBAQAogCiAJYXNzZXJ0KGRpZmYgJiYgcmVwbyk7CiAKLQlpZiAoIWluZGV4ICYmIChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKCZpbmRleCwgcmVwbykpIDwgMCkKKwlpZiAoIWluZGV4ICYmIChlcnJvciA9IGRpZmZfbG9hZF9pbmRleCgmaW5kZXgsIHJlcG8pKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCURJRkZfRlJPTV9JVEVSQVRPUlMoCkBAIC0xMTk1LDkgKzEyNjQsOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCiBpbnQgZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKAotCWdpdF9kaWZmX2xpc3QgKipkaWZmLAorCWdpdF9kaWZmICoqZGlmZiwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAlnaXRfdHJlZSAqb2xkX3RyZWUsCiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cykKQEAgLTEyMTUsMTYgKzEyODMsNjAgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXNpemVfdCBnaXRfZGlmZl9udW1fZGVsdGFzKGdpdF9kaWZmX2xpc3QgKmRpZmYpCitpbnQgZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyX3dpdGhfaW5kZXgoCisJZ2l0X2RpZmYgKipkaWZmLAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWdpdF90cmVlICpvbGRfdHJlZSwKKwljb25zdCBnaXRfZGlmZl9vcHRpb25zICpvcHRzKQogewotCWFzc2VydChkaWZmKTsKLQlyZXR1cm4gKHNpemVfdClkaWZmLT5kZWx0YXMubGVuZ3RoOworCWludCBlcnJvciA9IDA7CisJZ2l0X2RpZmYgKmQxID0gTlVMTCwgKmQyID0gTlVMTDsKKwlnaXRfaW5kZXggKmluZGV4ID0gTlVMTDsKKworCWFzc2VydChkaWZmICYmIHJlcG8pOworCisJaWYgKChlcnJvciA9IGRpZmZfbG9hZF9pbmRleCgmaW5kZXgsIHJlcG8pKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmICghKGVycm9yID0gZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZDEsIHJlcG8sIG9sZF90cmVlLCBpbmRleCwgb3B0cykpICYmCisJCSEoZXJyb3IgPSBnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkMiwgcmVwbywgaW5kZXgsIG9wdHMpKSkKKwkJZXJyb3IgPSBnaXRfZGlmZl9tZXJnZShkMSwgZDIpOworCisJZ2l0X2RpZmZfZnJlZShkMik7CisKKwlpZiAoZXJyb3IpIHsKKwkJZ2l0X2RpZmZfZnJlZShkMSk7CisJCWQxID0gTlVMTDsKKwl9CisKKwkqZGlmZiA9IGQxOworCXJldHVybiBlcnJvcjsKIH0KIAotc2l6ZV90IGdpdF9kaWZmX251bV9kZWx0YXNfb2ZfdHlwZShnaXRfZGlmZl9saXN0ICpkaWZmLCBnaXRfZGVsdGFfdCB0eXBlKQoraW50IGdpdF9kaWZmX29wdGlvbnNfaW5pdChnaXRfZGlmZl9vcHRpb25zICpvcHRpb25zLCB1bnNpZ25lZCBpbnQgdmVyc2lvbikKK3sKKwlnaXRfZGlmZl9vcHRpb25zIHRlbXBsYXRlID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCisJaWYgKHZlcnNpb24gIT0gdGVtcGxhdGUudmVyc2lvbikgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELAorCQkJIkludmFsaWQgdmVyc2lvbiAlZCBmb3IgZ2l0X2RpZmZfb3B0aW9ucyIsIChpbnQpdmVyc2lvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1jcHkob3B0aW9ucywgJnRlbXBsYXRlLCBzaXplb2YoKm9wdGlvbnMpKTsKKwlyZXR1cm4gMDsKK30KKworc2l6ZV90IGdpdF9kaWZmX251bV9kZWx0YXMoY29uc3QgZ2l0X2RpZmYgKmRpZmYpCit7CisJYXNzZXJ0KGRpZmYpOworCXJldHVybiBkaWZmLT5kZWx0YXMubGVuZ3RoOworfQorCitzaXplX3QgZ2l0X2RpZmZfbnVtX2RlbHRhc19vZl90eXBlKGNvbnN0IGdpdF9kaWZmICpkaWZmLCBnaXRfZGVsdGFfdCB0eXBlKQogewogCXNpemVfdCBpLCBjb3VudCA9IDA7Ci0JZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOworCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKIAogCWFzc2VydChkaWZmKTsKIApAQCAtMTIzNSw5ICsxMzQ3LDIwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitjb25zdCBnaXRfZGlmZl9kZWx0YSAqZ2l0X2RpZmZfZ2V0X2RlbHRhKGNvbnN0IGdpdF9kaWZmICpkaWZmLCBzaXplX3QgaWR4KQoreworCWFzc2VydChkaWZmKTsKKwlyZXR1cm4gZ2l0X3ZlY3Rvcl9nZXQoJmRpZmYtPmRlbHRhcywgaWR4KTsKK30KKworaW50IGdpdF9kaWZmX2lzX3NvcnRlZF9pY2FzZShjb25zdCBnaXRfZGlmZiAqZGlmZikKK3sKKwlyZXR1cm4gKGRpZmYtPm9wdHMuZmxhZ3MgJiBHSVRfRElGRl9JR05PUkVfQ0FTRSkgIT0gMDsKK30KKwogaW50IGdpdF9kaWZmX19wYWlyZWRfZm9yZWFjaCgKLQlnaXRfZGlmZl9saXN0ICpoZWFkMmlkeCwKLQlnaXRfZGlmZl9saXN0ICppZHgyd2QsCisJZ2l0X2RpZmYgKmhlYWQyaWR4LAorCWdpdF9kaWZmICppZHgyd2QsCiAJaW50ICgqY2IpKGdpdF9kaWZmX2RlbHRhICpoMmksIGdpdF9kaWZmX2RlbHRhICppMncsIHZvaWQgKnBheWxvYWQpLAogCXZvaWQgKnBheWxvYWQpCiB7CkBAIC0xMjQ1LDEwICsxMzY4LDEyIEBACiAJZ2l0X2RpZmZfZGVsdGEgKmgyaSwgKmkydzsKIAlzaXplX3QgaSwgaiwgaV9tYXgsIGpfbWF4OwogCWludCAoKnN0cmNvbXApKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSA9IGdpdF9fc3RyY21wOwotCWJvb2wgaWNhc2VfbWlzbWF0Y2g7CisJYm9vbCBoMmlfaWNhc2UsIGkyd19pY2FzZSwgaWNhc2VfbWlzbWF0Y2g7CiAKIAlpX21heCA9IGhlYWQyaWR4ID8gaGVhZDJpZHgtPmRlbHRhcy5sZW5ndGggOiAwOwogCWpfbWF4ID0gaWR4MndkID8gaWR4MndkLT5kZWx0YXMubGVuZ3RoIDogMDsKKwlpZiAoIWlfbWF4ICYmICFqX21heCkKKwkJcmV0dXJuIDA7CiAKIAkvKiBBdCBzb21lIHBvaW50LCB0cmVlLXRvLWluZGV4IGRpZmZzIHdpbGwgcHJvYmFibHkgbmV2ZXIgaWdub3JlIGNhc2UsCiAJICogZXZlbiBpZiB0aGF0IGlzbid0IHRydWUgbm93LiAgSW5kZXgtdG8td29ya2RpciBkaWZmcyBtYXkgb3IgbWF5IG5vdApAQCAtMTI1OCwyNCArMTM4MywzNSBAQAogCSAqIFRoZXJlZm9yZSB0aGUgbWFpbiB0aGluZyB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgbWFrZSBzdXJlIHRoZSBkaWZmcwogCSAqIGFyZSB0cmF2ZXJzZWQgaW4gYSBjb21wYXRpYmxlIG9yZGVyLiAgVG8gZG8gdGhpcywgd2UgdGVtcG9yYXJpbHkKIAkgKiByZXNvcnQgYSBtaXNtYXRjaGVkIGRpZmYgdG8gZ2V0IHRoZSBvcmRlciBjb3JyZWN0LgorCSAqCisJICogSW4gb3JkZXIgdG8gdHJhdmVyc2UgcmVuYW1lcyBpbiB0aGUgaW5kZXgtPndvcmtkaXIsIHdlIG5lZWQgdG8KKwkgKiBlbnN1cmUgdGhhdCB3ZSBjb21wYXJlIHRoZSBpbmRleCBuYW1lIG9uIGJvdGggc2lkZXMsIHNvIHdlCisJICogYWx3YXlzIHNvcnQgYnkgdGhlIG9sZCBuYW1lIGluIHRoZSBpMncgbGlzdC4KIAkgKi8KLQlpY2FzZV9taXNtYXRjaCA9Ci0JCShoZWFkMmlkeCAhPSBOVUxMICYmIGlkeDJ3ZCAhPSBOVUxMICYmCi0JCSAoKGhlYWQyaWR4LT5vcHRzLmZsYWdzIF4gaWR4MndkLT5vcHRzLmZsYWdzKSAmIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpKTsKKwloMmlfaWNhc2UgPSBoZWFkMmlkeCAhPSBOVUxMICYmCisJCShoZWFkMmlkeC0+b3B0cy5mbGFncyAmIEdJVF9ESUZGX0lHTk9SRV9DQVNFKSAhPSAwOwogCi0JLyogZm9yY2UgY2FzZS1zZW5zaXRpdmUgZGVsdGEgc29ydCAqLwotCWlmIChpY2FzZV9taXNtYXRjaCkgewotCQlpZiAoaGVhZDJpZHgtPm9wdHMuZmxhZ3MgJiBHSVRfRElGRl9ERUxUQVNfQVJFX0lDQVNFKSB7Ci0JCQlnaXRfdmVjdG9yX3NldF9jbXAoJmhlYWQyaWR4LT5kZWx0YXMsIGdpdF9kaWZmX2RlbHRhX19jbXApOwotCQkJZ2l0X3ZlY3Rvcl9zb3J0KCZoZWFkMmlkeC0+ZGVsdGFzKTsKLQkJfSBlbHNlIHsKLQkJCWdpdF92ZWN0b3Jfc2V0X2NtcCgmaWR4MndkLT5kZWx0YXMsIGdpdF9kaWZmX2RlbHRhX19jbXApOwotCQkJZ2l0X3ZlY3Rvcl9zb3J0KCZpZHgyd2QtPmRlbHRhcyk7Ci0JCX0KKwlpMndfaWNhc2UgPSBpZHgyd2QgIT0gTlVMTCAmJgorCQkoaWR4MndkLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfSUdOT1JFX0NBU0UpICE9IDA7CisKKwlpY2FzZV9taXNtYXRjaCA9CisJCShoZWFkMmlkeCAhPSBOVUxMICYmIGlkeDJ3ZCAhPSBOVUxMICYmIGgyaV9pY2FzZSAhPSBpMndfaWNhc2UpOworCisJaWYgKGljYXNlX21pc21hdGNoICYmIGgyaV9pY2FzZSkgeworCQlnaXRfdmVjdG9yX3NldF9jbXAoJmhlYWQyaWR4LT5kZWx0YXMsIGdpdF9kaWZmX2RlbHRhX19jbXApOworCQlnaXRfdmVjdG9yX3NvcnQoJmhlYWQyaWR4LT5kZWx0YXMpOwogCX0KLQllbHNlIGlmIChoZWFkMmlkeC0+b3B0cy5mbGFncyAmIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpCisKKwlpZiAoaTJ3X2ljYXNlICYmICFpY2FzZV9taXNtYXRjaCkgewogCQlzdHJjb21wID0gZ2l0X19zdHJjYXNlY21wOwogCisJCWdpdF92ZWN0b3Jfc2V0X2NtcCgmaWR4MndkLT5kZWx0YXMsIGdpdF9kaWZmX2RlbHRhX19pMndfY2FzZWNtcCk7CisJCWdpdF92ZWN0b3Jfc29ydCgmaWR4MndkLT5kZWx0YXMpOworCX0gZWxzZSBpZiAoaWR4MndkICE9IE5VTEwpIHsKKwkJZ2l0X3ZlY3Rvcl9zZXRfY21wKCZpZHgyd2QtPmRlbHRhcywgZ2l0X2RpZmZfZGVsdGFfX2kyd19jbXApOworCQlnaXRfdmVjdG9yX3NvcnQoJmlkeDJ3ZC0+ZGVsdGFzKTsKKwl9CisKIAlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGlfbWF4IHx8IGogPCBqX21heDsgKSB7CiAJCWgyaSA9IGhlYWQyaWR4ID8gR0lUX1ZFQ1RPUl9HRVQoJmhlYWQyaWR4LT5kZWx0YXMsIGkpIDogTlVMTDsKIAkJaTJ3ID0gaWR4MndkID8gR0lUX1ZFQ1RPUl9HRVQoJmlkeDJ3ZC0+ZGVsdGFzLCBqKSA6IE5VTEw7CkBAIC0xMjk5LDE0ICsxNDM1LDE2IEBACiAJfQogCiAJLyogcmVzdG9yZSBjYXNlLWluc2Vuc2l0aXZlIGRlbHRhIHNvcnQgKi8KLQlpZiAoaWNhc2VfbWlzbWF0Y2gpIHsKLQkJaWYgKGhlYWQyaWR4LT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfREVMVEFTX0FSRV9JQ0FTRSkgewotCQkJZ2l0X3ZlY3Rvcl9zZXRfY21wKCZoZWFkMmlkeC0+ZGVsdGFzLCBnaXRfZGlmZl9kZWx0YV9fY2FzZWNtcCk7Ci0JCQlnaXRfdmVjdG9yX3NvcnQoJmhlYWQyaWR4LT5kZWx0YXMpOwotCQl9IGVsc2UgewotCQkJZ2l0X3ZlY3Rvcl9zZXRfY21wKCZpZHgyd2QtPmRlbHRhcywgZ2l0X2RpZmZfZGVsdGFfX2Nhc2VjbXApOwotCQkJZ2l0X3ZlY3Rvcl9zb3J0KCZpZHgyd2QtPmRlbHRhcyk7Ci0JCX0KKwlpZiAoaWNhc2VfbWlzbWF0Y2ggJiYgaDJpX2ljYXNlKSB7CisJCWdpdF92ZWN0b3Jfc2V0X2NtcCgmaGVhZDJpZHgtPmRlbHRhcywgZ2l0X2RpZmZfZGVsdGFfX2Nhc2VjbXApOworCQlnaXRfdmVjdG9yX3NvcnQoJmhlYWQyaWR4LT5kZWx0YXMpOworCX0KKworCS8qIHJlc3RvcmUgaWR4MndkIHNvcnQgYnkgbmV3IHBhdGggKi8KKwlpZiAoaWR4MndkICE9IE5VTEwpIHsKKwkJZ2l0X3ZlY3Rvcl9zZXRfY21wKCZpZHgyd2QtPmRlbHRhcywKKwkJCWkyd19pY2FzZSA/IGdpdF9kaWZmX2RlbHRhX19jYXNlY21wIDogZ2l0X2RpZmZfZGVsdGFfX2NtcCk7CisJCWdpdF92ZWN0b3Jfc29ydCgmaWR4MndkLT5kZWx0YXMpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc3JjL2RpZmYuaCBiL3NyYy9kaWZmLmgKaW5kZXggNmVmMDNlZS4uMmM5Mjk4YSAxMDA2NDQKLS0tIGEvc3JjL2RpZmYuaAorKysgYi9zcmMvZGlmZi5oCkBAIC0xNiwxMyArMTYsMTQgQEAKICNpbmNsdWRlICJpdGVyYXRvci5oIgogI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJwb29sLmgiCisjaW5jbHVkZSAib2RiLmgiCiAKICNkZWZpbmUgRElGRl9PTERfUFJFRklYX0RFRkFVTFQgImEvIgogI2RlZmluZSBESUZGX05FV19QUkVGSVhfREVGQVVMVCAiYi8iCiAKIGVudW0gewogCUdJVF9ESUZGQ0FQU19IQVNfU1lNTElOS1MgICAgID0gKDEgPDwgMCksIC8qIHN5bWxpbmtzIG9uIHBsYXRmb3JtPyAqLwotCUdJVF9ESUZGQ0FQU19BU1NVTUVfVU5DSEFOR0VEID0gKDEgPDwgMSksIC8qIHVzZSBzdGF0PyAqLworCUdJVF9ESUZGQ0FQU19JR05PUkVfU1RBVCAgICAgID0gKDEgPDwgMSksIC8qIHVzZSBzdGF0PyAqLwogCUdJVF9ESUZGQ0FQU19UUlVTVF9NT0RFX0JJVFMgID0gKDEgPDwgMiksIC8qIHVzZSBzdF9tb2RlPyAqLwogCUdJVF9ESUZGQ0FQU19UUlVTVF9DVElNRSAgICAgID0gKDEgPDwgMyksIC8qIHVzZSBzdF9jdGltZT8gKi8KIAlHSVRfRElGRkNBUFNfVVNFX0RFViAgICAgICAgICA9ICgxIDw8IDQpLCAvKiB1c2Ugc3RfZGV2PyAqLwpAQCAtNTEsNyArNTIsNyBAQAogCiAjZGVmaW5lIEdJVF9ESUZGX19WRVJCT1NFICAoMSA8PCAzMCkKIAotc3RydWN0IGdpdF9kaWZmX2xpc3Qgeworc3RydWN0IGdpdF9kaWZmIHsKIAlnaXRfcmVmY291bnQgICAgIHJjOwogCWdpdF9yZXBvc2l0b3J5ICAgKnJlcG87CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzOwpAQCAtNzEsMjcgKzcyLDM2IEBACiBleHRlcm4gdm9pZCBnaXRfZGlmZl9fY2xlYW51cF9tb2RlcygKIAl1aW50MzJfdCBkaWZmY2FwcywgdWludDMyX3QgKm9tb2RlLCB1aW50MzJfdCAqbm1vZGUpOwogCi1leHRlcm4gdm9pZCBnaXRfZGlmZl9saXN0X2FkZHJlZihnaXRfZGlmZl9saXN0ICpkaWZmKTsKK2V4dGVybiB2b2lkIGdpdF9kaWZmX2FkZHJlZihnaXRfZGlmZiAqZGlmZik7CiAKIGV4dGVybiBpbnQgZ2l0X2RpZmZfZGVsdGFfX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIGV4dGVybiBpbnQgZ2l0X2RpZmZfZGVsdGFfX2Nhc2VjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CiAKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfZGlmZl9kZWx0YV9fcGF0aChjb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEpOworCiBleHRlcm4gYm9vbCBnaXRfZGlmZl9kZWx0YV9fc2hvdWxkX3NraXAoCiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cywgY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhKTsKIAorZXh0ZXJuIGludCBnaXRfZGlmZl9kZWx0YV9fZm9ybWF0X2ZpbGVfaGVhZGVyKAorCWdpdF9idWYgKm91dCwKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCisJY29uc3QgY2hhciAqb2xkcGZ4LAorCWNvbnN0IGNoYXIgKm5ld3BmeCwKKwlpbnQgb2lkX3N0cmxlbik7CisKIGV4dGVybiBpbnQgZ2l0X2RpZmZfX29pZF9mb3JfZmlsZSgKIAlnaXRfcmVwb3NpdG9yeSAqLCBjb25zdCBjaGFyICosIHVpbnQxNl90LCBnaXRfb2ZmX3QsIGdpdF9vaWQgKik7CiAKIGV4dGVybiBpbnQgZ2l0X2RpZmZfX2Zyb21faXRlcmF0b3JzKAotCWdpdF9kaWZmX2xpc3QgKipkaWZmX3B0ciwKKwlnaXRfZGlmZiAqKmRpZmZfcHRyLAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAogCWdpdF9pdGVyYXRvciAqb2xkX2l0ZXIsCiAJZ2l0X2l0ZXJhdG9yICpuZXdfaXRlciwKIAljb25zdCBnaXRfZGlmZl9vcHRpb25zICpvcHRzKTsKIAogZXh0ZXJuIGludCBnaXRfZGlmZl9fcGFpcmVkX2ZvcmVhY2goCi0JZ2l0X2RpZmZfbGlzdCAqaWR4MmhlYWQsCi0JZ2l0X2RpZmZfbGlzdCAqd2QyaWR4LAorCWdpdF9kaWZmICppZHgyaGVhZCwKKwlnaXRfZGlmZiAqd2QyaWR4LAogCWludCAoKmNiKShnaXRfZGlmZl9kZWx0YSAqaTJoLCBnaXRfZGlmZl9kZWx0YSAqdzJpLCB2b2lkICpwYXlsb2FkKSwKIAl2b2lkICpwYXlsb2FkKTsKIApAQCAtMTA2LDUgKzExNiwzMyBAQAogZXh0ZXJuIGludCBnaXRfZGlmZl9maW5kX3NpbWlsYXJfX2NhbGNfc2ltaWxhcml0eSgKIAlpbnQgKnNjb3JlLCB2b2lkICpzaWdhLCB2b2lkICpzaWdiLCB2b2lkICpwYXlsb2FkKTsKIAorLyoKKyAqIFNvbWV0aW1lcyBhIGdpdF9kaWZmX2ZpbGUgd2lsbCBoYXZlIGEgemVybyBzaXplOyB0aGlzIGF0dGVtcHRzIHRvCisgKiBmaWxsIGluIHRoZSBzaXplIHdpdGhvdXQgbG9hZGluZyB0aGUgYmxvYiBpZiBwb3NzaWJsZS4gIElmIHRoYXQgaXMKKyAqIG5vdCBwb3NzaWJsZSwgdGhlbiBpdCB3aWxsIHJldHVybiB0aGUgZ2l0X29kYl9vYmplY3QgdGhhdCBoYWQgdG8gYmUKKyAqIGxvYWRlZCBhbmQgdGhlIGNhbGxlciBjYW4gdXNlIGl0IG9yIGRpc3Bvc2Ugb2YgaXQgYXMgbmVlZGVkLgorICovCitHSVRfSU5MSU5FKGludCkgZ2l0X2RpZmZfZmlsZV9fcmVzb2x2ZV96ZXJvX3NpemUoCisJZ2l0X2RpZmZfZmlsZSAqZmlsZSwgZ2l0X29kYl9vYmplY3QgKipvZGJfb2JqLCBnaXRfcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlpbnQgZXJyb3I7CisJZ2l0X29kYiAqb2RiOworCXNpemVfdCBsZW47CisJZ2l0X290eXBlIHR5cGU7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfb2RiKCZvZGIsIHJlcG8pKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gZ2l0X29kYl9fcmVhZF9oZWFkZXJfb3Jfb2JqZWN0KAorCQlvZGJfb2JqLCAmbGVuLCAmdHlwZSwgb2RiLCAmZmlsZS0+b2lkKTsKKworCWdpdF9vZGJfZnJlZShvZGIpOworCisJaWYgKCFlcnJvcikKKwkJZmlsZS0+c2l6ZSA9IChnaXRfb2ZmX3QpbGVuOworCisJcmV0dXJuIGVycm9yOworfQorCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3JjL2RpZmZfZHJpdmVyLmMgYi9zcmMvZGlmZl9kcml2ZXIuYwppbmRleCA0NjliZTBkLi5iZDVhOGZiIDEwMDY0NAotLS0gYS9zcmMvZGlmZl9kcml2ZXIuYworKysgYi9zcmMvZGlmZl9kcml2ZXIuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIAlnaXRfYnVmX3RydW5jYXRlKCZuYW1lLCBuYW1lbGVuICsgc3RybGVuKCJkaWZmLi4iKSk7CiAJZ2l0X2J1Zl9wdXQoJm5hbWUsICJ4ZnVuY25hbWUiLCBzdHJsZW4oInhmdW5jbmFtZSIpKTsKLQlpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXIoCisJaWYgKChlcnJvciA9IGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goCiAJCQljZmcsIG5hbWUucHRyLCBOVUxMLCBkaWZmX2RyaXZlcl94ZnVuY25hbWUsIGRydikpIDwgMCkgewogCQlpZiAoZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKIAkJCWdvdG8gZG9uZTsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCiAJZ2l0X2J1Zl90cnVuY2F0ZSgmbmFtZSwgbmFtZWxlbiArIHN0cmxlbigiZGlmZi4uIikpOwogCWdpdF9idWZfcHV0KCZuYW1lLCAiZnVuY25hbWUiLCBzdHJsZW4oImZ1bmNuYW1lIikpOwotCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX2dldF9tdWx0aXZhcigKKwlpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXJfZm9yZWFjaCgKIAkJCWNmZywgbmFtZS5wdHIsIE5VTEwsIGRpZmZfZHJpdmVyX2Z1bmNuYW1lLCBkcnYpKSA8IDApIHsKIAkJaWYgKGVycm9yICE9IEdJVF9FTk9URk9VTkQpCiAJCQlnb3RvIGRvbmU7CkBAIC0zNzMsMTAgKzM3MywxMSBAQAogCQkhY3R4dC0+bWF0Y2hfbGluZShjdHh0LT5kcml2ZXIsIGN0eHQtPmxpbmUucHRyLCBjdHh0LT5saW5lLnNpemUpKQogCQlyZXR1cm4gLTE7CiAKLQlnaXRfYnVmX3RydW5jYXRlKCZjdHh0LT5saW5lLCAoc2l6ZV90KW91dF9zaXplKTsKLQlnaXRfYnVmX2NvcHlfY3N0cihvdXQsIChzaXplX3Qpb3V0X3NpemUsICZjdHh0LT5saW5lKTsKKwlpZiAob3V0X3NpemUgPiAobG9uZyljdHh0LT5saW5lLnNpemUpCisJCW91dF9zaXplID0gKGxvbmcpY3R4dC0+bGluZS5zaXplOworCW1lbWNweShvdXQsIGN0eHQtPmxpbmUucHRyLCAoc2l6ZV90KW91dF9zaXplKTsKIAotCXJldHVybiAobG9uZyljdHh0LT5saW5lLnNpemU7CisJcmV0dXJuIG91dF9zaXplOwogfQogCiB2b2lkIGdpdF9kaWZmX2ZpbmRfY29udGV4dF9pbml0KApkaWZmIC0tZ2l0IGEvc3JjL2RpZmZfZmlsZS5jIGIvc3JjL2RpZmZfZmlsZS5jCmluZGV4IDlkMDZkYWEuLmE0Yzg2NDEgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmX2ZpbGUuYworKysgYi9zcmMvZGlmZl9maWxlLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAogaW50IGdpdF9kaWZmX2ZpbGVfY29udGVudF9faW5pdF9mcm9tX2RpZmYoCiAJZ2l0X2RpZmZfZmlsZV9jb250ZW50ICpmYywKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAorCWdpdF9kaWZmICpkaWZmLAogCXNpemVfdCBkZWx0YV9pbmRleCwKIAlib29sIHVzZV9vbGQpCiB7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJaGFzX2RhdGEgPSB1c2Vfb2xkOyBicmVhazsKIAljYXNlIEdJVF9ERUxUQV9VTlRSQUNLRUQ6CiAJCWhhc19kYXRhID0gIXVzZV9vbGQgJiYKLQkJCShkaWZmLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRURfQ09OVEVOVCkgIT0gMDsKKwkJCShkaWZmLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfU0hPV19VTlRSQUNLRURfQ09OVEVOVCkgIT0gMDsKIAkJYnJlYWs7CiAJY2FzZSBHSVRfREVMVEFfTU9ESUZJRUQ6CiAJY2FzZSBHSVRfREVMVEFfQ09QSUVEOgpAQCAtMjQxLDE5ICsyNDEsOSBAQAogCiAJLyogaWYgd2UgZG9uJ3Qga25vdyBzaXplLCB0cnkgdG8gcGVlayBhdCBvYmplY3QgaGVhZGVyIGZpcnN0ICovCiAJaWYgKCFmYy0+ZmlsZS0+c2l6ZSkgewotCQlnaXRfb2RiICpvZGI7Ci0JCXNpemVfdCBsZW47Ci0JCWdpdF9vdHlwZSB0eXBlOwotCi0JCWlmICghKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfb2RiX193ZWFrcHRyKCZvZGIsIGZjLT5yZXBvKSkpIHsKLQkJCWVycm9yID0gZ2l0X29kYl9fcmVhZF9oZWFkZXJfb3Jfb2JqZWN0KAotCQkJCSZvZGJfb2JqLCAmbGVuLCAmdHlwZSwgb2RiLCAmZmMtPmZpbGUtPm9pZCk7Ci0JCQlnaXRfb2RiX2ZyZWUob2RiKTsKLQkJfQotCQlpZiAoZXJyb3IpCisJCWlmICgoZXJyb3IgPSBnaXRfZGlmZl9maWxlX19yZXNvbHZlX3plcm9fc2l6ZSgKKwkJCQlmYy0+ZmlsZSwgJm9kYl9vYmosIGZjLT5yZXBvKSkgPCAwKQogCQkJcmV0dXJuIGVycm9yOwotCi0JCWZjLT5maWxlLT5zaXplID0gbGVuOwogCX0KIAogCWlmIChkaWZmX2ZpbGVfY29udGVudF9iaW5hcnlfYnlfc2l6ZShmYykpCkBAIC0zMDYsOSArMjk2LDkgQEAKIAlnaXRfZGlmZl9maWxlX2NvbnRlbnQgKmZjLCBnaXRfYnVmICpwYXRoKQogewogCWludCBlcnJvciA9IDA7Ci0JZ2l0X3ZlY3RvciBmaWx0ZXJzID0gR0lUX1ZFQ1RPUl9JTklUOwotCWdpdF9idWYgcmF3ID0gR0lUX0JVRl9JTklULCBmaWx0ZXJlZCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfZmlsdGVyX2xpc3QgKmZsID0gTlVMTDsKIAlnaXRfZmlsZSBmZCA9IGdpdF9mdXRpbHNfb3Blbl9ybyhnaXRfYnVmX2NzdHIocGF0aCkpOworCWdpdF9idWYgcmF3ID0gR0lUX0JVRl9JTklUOwogCiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIGZkOwpAQCAtMzIwLDQxICszMTAsMzggQEAKIAlpZiAoZGlmZl9maWxlX2NvbnRlbnRfYmluYXJ5X2J5X3NpemUoZmMpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2ZpbHRlcnNfbG9hZCgKLQkJCSZmaWx0ZXJzLCBmYy0+cmVwbywgZmMtPmZpbGUtPnBhdGgsIEdJVF9GSUxURVJfVE9fT0RCKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfZmlsdGVyX2xpc3RfbG9hZCgKKwkJCSZmbCwgZmMtPnJlcG8sIE5VTEwsIGZjLT5maWxlLT5wYXRoLCBHSVRfRklMVEVSX1RPX09EQikpIDwgMCkKIAkJZ290byBjbGVhbnVwOwotCS8qIGVycm9yID49IGlzIGEgZmlsdGVyIGNvdW50ICovCiAKLQlpZiAoZXJyb3IgPT0gMCkgeworCS8qIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzLCB0cnkgdG8gbW1hcCB0aGUgZmlsZSAqLworCWlmIChmbCA9PSBOVUxMKSB7CiAJCWlmICghKGVycm9yID0gZ2l0X2Z1dGlsc19tbWFwX3JvKAotCQkJCSZmYy0+bWFwLCBmZCwgMCwgKHNpemVfdClmYy0+ZmlsZS0+c2l6ZSkpKQorCQkJCSZmYy0+bWFwLCBmZCwgMCwgKHNpemVfdClmYy0+ZmlsZS0+c2l6ZSkpKSB7CiAJCQlmYy0+ZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19fVU5NQVBfREFUQTsKLQkJZWxzZSAvKiBmYWxsIHRocm91Z2ggdG8gdHJ5IHJlYWRidWZmZXIgYmVsb3cgKi8KLQkJCWdpdGVycl9jbGVhcigpOwotCX0KLQotCWlmIChlcnJvciAhPSAwKSB7Ci0JCWVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyX2ZkKCZyYXcsIGZkLCAoc2l6ZV90KWZjLT5maWxlLT5zaXplKTsKLQkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gY2xlYW51cDsKLQotCQlpZiAoIWZpbHRlcnMubGVuZ3RoKQotCQkJZ2l0X2J1Zl9zd2FwKCZmaWx0ZXJlZCwgJnJhdyk7Ci0JCWVsc2UKLQkJCWVycm9yID0gZ2l0X2ZpbHRlcnNfYXBwbHkoJmZpbHRlcmVkLCAmcmF3LCAmZmlsdGVycyk7Ci0KLQkJaWYgKCFlcnJvcikgewotCQkJZmMtPm1hcC5sZW4gID0gZ2l0X2J1Zl9sZW4oJmZpbHRlcmVkKTsKLQkJCWZjLT5tYXAuZGF0YSA9IGdpdF9idWZfZGV0YWNoKCZmaWx0ZXJlZCk7Ci0JCQlmYy0+ZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19fRlJFRV9EQVRBOwogCQl9CiAKKwkJLyogaWYgbW1hcCBmYWlsZWQsIGZhbGwgdGhyb3VnaCB0byB0cnkgcmVhZGJ1ZmZlciBiZWxvdyAqLworCQlnaXRlcnJfY2xlYXIoKTsKKwl9CisKKwlpZiAoIShlcnJvciA9IGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcl9mZCgmcmF3LCBmZCwgKHNpemVfdClmYy0+ZmlsZS0+c2l6ZSkpKSB7CisJCWdpdF9idWYgb3V0ID0gR0lUX0JVRl9JTklUOworCisJCWVycm9yID0gZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2RhdGEoJm91dCwgZmwsICZyYXcpOworCiAJCWdpdF9idWZfZnJlZSgmcmF3KTsKLQkJZ2l0X2J1Zl9mcmVlKCZmaWx0ZXJlZCk7CisKKwkJaWYgKCFlcnJvcikgeworCQkJZmMtPm1hcC5sZW4gID0gb3V0LnNpemU7CisJCQlmYy0+bWFwLmRhdGEgPSBvdXQucHRyOworCQkJZmMtPmZsYWdzIHw9IEdJVF9ESUZGX0ZMQUdfX0ZSRUVfREFUQTsKKwkJfQogCX0KIAogY2xlYW51cDoKLQlnaXRfZmlsdGVyc19mcmVlKCZmaWx0ZXJzKTsKKwlnaXRfZmlsdGVyX2xpc3RfZnJlZShmbCk7CiAJcF9jbG9zZShmZCk7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC00MTcsNiArNDA0LDkgQEAKIAogdm9pZCBnaXRfZGlmZl9maWxlX2NvbnRlbnRfX3VubG9hZChnaXRfZGlmZl9maWxlX2NvbnRlbnQgKmZjKQogeworCWlmICgoZmMtPmZsYWdzICYgR0lUX0RJRkZfRkxBR19fTE9BREVEKSA9PSAwKQorCQlyZXR1cm47CisKIAlpZiAoZmMtPmZsYWdzICYgR0lUX0RJRkZfRkxBR19fRlJFRV9EQVRBKSB7CiAJCWdpdF9fZnJlZShmYy0+bWFwLmRhdGEpOwogCQlmYy0+bWFwLmRhdGEgPSAiIjsKZGlmZiAtLWdpdCBhL3NyYy9kaWZmX2ZpbGUuaCBiL3NyYy9kaWZmX2ZpbGUuaAppbmRleCBmYjA4Y2NhLi44NGJmMjU1IDEwMDY0NAotLS0gYS9zcmMvZGlmZl9maWxlLmgKKysrIGIvc3JjL2RpZmZfZmlsZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIGV4dGVybiBpbnQgZ2l0X2RpZmZfZmlsZV9jb250ZW50X19pbml0X2Zyb21fZGlmZigKIAlnaXRfZGlmZl9maWxlX2NvbnRlbnQgKmZjLAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJc2l6ZV90IGRlbHRhX2luZGV4LAogCWJvb2wgdXNlX29sZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9kaWZmX3BhdGNoLmMgYi9zcmMvZGlmZl9wYXRjaC5jCmluZGV4IDkwNjBkMGEuLmNjNDlkNjggMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmX3BhdGNoLmMKKysrIGIvc3JjL2RpZmZfcGF0Y2guYwpAQCAtMTAsMzggKzEwLDI3IEBACiAjaW5jbHVkZSAiZGlmZl9kcml2ZXIuaCIKICNpbmNsdWRlICJkaWZmX3BhdGNoLmgiCiAjaW5jbHVkZSAiZGlmZl94ZGlmZi5oIgotCi0vKiBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgc3BhbiBpbiBhIGRpZmYgKi8KLXR5cGVkZWYgc3RydWN0IGRpZmZfcGF0Y2hfbGluZSBkaWZmX3BhdGNoX2xpbmU7Ci1zdHJ1Y3QgZGlmZl9wYXRjaF9saW5lIHsKLQljb25zdCBjaGFyICpwdHI7Ci0Jc2l6ZV90IGxlbjsKLQlzaXplX3QgbGluZXMsIG9sZG5vLCBuZXdubzsKLQljaGFyIG9yaWdpbjsKLX07CisjaW5jbHVkZSAiZmlsZW9wcy5oIgogCiAvKiBjYWNoZWQgaW5mb3JtYXRpb24gYWJvdXQgYSBodW5rIGluIGEgZGlmZiAqLwogdHlwZWRlZiBzdHJ1Y3QgZGlmZl9wYXRjaF9odW5rIGRpZmZfcGF0Y2hfaHVuazsKIHN0cnVjdCBkaWZmX3BhdGNoX2h1bmsgewotCWdpdF9kaWZmX3JhbmdlIHJhbmdlOwotCWNoYXIgICBoZWFkZXJbMTI4XTsKLQlzaXplX3QgaGVhZGVyX2xlbjsKKwlnaXRfZGlmZl9odW5rIGh1bms7CiAJc2l6ZV90IGxpbmVfc3RhcnQ7CiAJc2l6ZV90IGxpbmVfY291bnQ7CiB9OwogCi1zdHJ1Y3QgZ2l0X2RpZmZfcGF0Y2ggeworc3RydWN0IGdpdF9wYXRjaCB7CiAJZ2l0X3JlZmNvdW50IHJjOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7IC8qIGZvciByZWZjb3VudCBwdXJwb3NlcywgbWF5YmUgTlVMTCBmb3IgYmxvYiBkaWZmcyAqLworCWdpdF9kaWZmICpkaWZmOyAvKiBmb3IgcmVmY291bnQgcHVycG9zZXMsIG1heWJlIE5VTEwgZm9yIGJsb2IgZGlmZnMgKi8KIAlnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CiAJc2l6ZV90IGRlbHRhX2luZGV4OwogCWdpdF9kaWZmX2ZpbGVfY29udGVudCBvZmlsZTsKIAlnaXRfZGlmZl9maWxlX2NvbnRlbnQgbmZpbGU7CiAJdWludDMyX3QgZmxhZ3M7CiAJZ2l0X2FycmF5X3QoZGlmZl9wYXRjaF9odW5rKSBodW5rczsKLQlnaXRfYXJyYXlfdChkaWZmX3BhdGNoX2xpbmUpIGxpbmVzOwotCXNpemVfdCBvbGRubywgbmV3bm87Ci0Jc2l6ZV90IGNvbnRlbnRfc2l6ZTsKKwlnaXRfYXJyYXlfdChnaXRfZGlmZl9saW5lKSAgIGxpbmVzOworCXNpemVfdCBjb250ZW50X3NpemUsIGNvbnRleHRfc2l6ZSwgaGVhZGVyX3NpemU7CiAJZ2l0X3Bvb2wgZmxhdHRlbmVkOwogfTsKIApAQCAtNTQsMTIgKzQzLDEzIEBACiAJR0lUX0RJRkZfUEFUQ0hfRkxBVFRFTkVEICAgPSAoMSA8PCA1KSwKIH07CiAKLXN0YXRpYyB2b2lkIGRpZmZfb3V0cHV0X2luaXQoZ2l0X2RpZmZfb3V0cHV0KiwgY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyosCi0JZ2l0X2RpZmZfZmlsZV9jYiwgZ2l0X2RpZmZfaHVua19jYiwgZ2l0X2RpZmZfZGF0YV9jYiwgdm9pZCopOworc3RhdGljIHZvaWQgZGlmZl9vdXRwdXRfaW5pdCgKKwlnaXRfZGlmZl9vdXRwdXQqLCBjb25zdCBnaXRfZGlmZl9vcHRpb25zKiwKKwlnaXRfZGlmZl9maWxlX2NiLCBnaXRfZGlmZl9odW5rX2NiLCBnaXRfZGlmZl9saW5lX2NiLCB2b2lkKik7CiAKLXN0YXRpYyB2b2lkIGRpZmZfb3V0cHV0X3RvX3BhdGNoKGdpdF9kaWZmX291dHB1dCAqLCBnaXRfZGlmZl9wYXRjaCAqKTsKK3N0YXRpYyB2b2lkIGRpZmZfb3V0cHV0X3RvX3BhdGNoKGdpdF9kaWZmX291dHB1dCAqLCBnaXRfcGF0Y2ggKik7CiAKLXN0YXRpYyB2b2lkIGRpZmZfcGF0Y2hfdXBkYXRlX2JpbmFyeShnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpCitzdGF0aWMgdm9pZCBkaWZmX3BhdGNoX3VwZGF0ZV9iaW5hcnkoZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAlpZiAoKHBhdGNoLT5kZWx0YS0+ZmxhZ3MgJiBESUZGX0ZMQUdTX0tOT1dOX0JJTkFSWSkgIT0gMCkKIAkJcmV0dXJuOwpAQCAtNzMsMjEgKzYzLDIxIEBACiAJCXBhdGNoLT5kZWx0YS0+ZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19OT1RfQklOQVJZOwogfQogCi1zdGF0aWMgdm9pZCBkaWZmX3BhdGNoX2luaXRfY29tbW9uKGdpdF9kaWZmX3BhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIGRpZmZfcGF0Y2hfaW5pdF9jb21tb24oZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAlkaWZmX3BhdGNoX3VwZGF0ZV9iaW5hcnkocGF0Y2gpOwogCiAJaWYgKChwYXRjaC0+ZGVsdGEtPmZsYWdzICYgR0lUX0RJRkZfRkxBR19CSU5BUlkpICE9IDApCi0JCXBhdGNoLT5mbGFncyB8PSBHSVRfRElGRl9QQVRDSF9MT0FERUQ7IC8qIHNldCBMT0FERUQgYnV0IG5vdCBESUZGQUJMRSAqLworCQlwYXRjaC0+ZmxhZ3MgfD0gR0lUX0RJRkZfUEFUQ0hfTE9BREVEOyAvKiBMT0FERUQgYnV0IG5vdCBESUZGQUJMRSAqLwogCiAJcGF0Y2gtPmZsYWdzIHw9IEdJVF9ESUZGX1BBVENIX0lOSVRJQUxJWkVEOwogCiAJaWYgKHBhdGNoLT5kaWZmKQotCQlnaXRfZGlmZl9saXN0X2FkZHJlZihwYXRjaC0+ZGlmZik7CisJCWdpdF9kaWZmX2FkZHJlZihwYXRjaC0+ZGlmZik7CiB9CiAKIHN0YXRpYyBpbnQgZGlmZl9wYXRjaF9pbml0X2Zyb21fZGlmZigKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gsIGdpdF9kaWZmX2xpc3QgKmRpZmYsIHNpemVfdCBkZWx0YV9pbmRleCkKKwlnaXRfcGF0Y2ggKnBhdGNoLCBnaXRfZGlmZiAqZGlmZiwgc2l6ZV90IGRlbHRhX2luZGV4KQogewogCWludCBlcnJvciA9IDA7CiAKQEAgLTEwOCwxMiArOTgsMTAgQEAKIH0KIAogc3RhdGljIGludCBkaWZmX3BhdGNoX2FsbG9jX2Zyb21fZGlmZigKLQlnaXRfZGlmZl9wYXRjaCAqKm91dCwKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAotCXNpemVfdCBkZWx0YV9pbmRleCkKKwlnaXRfcGF0Y2ggKipvdXQsIGdpdF9kaWZmICpkaWZmLCBzaXplX3QgZGVsdGFfaW5kZXgpCiB7CiAJaW50IGVycm9yOwotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfZGlmZl9wYXRjaCkpOworCWdpdF9wYXRjaCAqcGF0Y2ggPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X3BhdGNoKSk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHBhdGNoKTsKIAogCWlmICghKGVycm9yID0gZGlmZl9wYXRjaF9pbml0X2Zyb21fZGlmZihwYXRjaCwgZGlmZiwgZGVsdGFfaW5kZXgpKSkgewpAQCAtMTI4LDcgKzExNiw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGRpZmZfcGF0Y2hfbG9hZChnaXRfZGlmZl9wYXRjaCAqcGF0Y2gsIGdpdF9kaWZmX291dHB1dCAqb3V0cHV0KQorc3RhdGljIGludCBkaWZmX3BhdGNoX2xvYWQoZ2l0X3BhdGNoICpwYXRjaCwgZ2l0X2RpZmZfb3V0cHV0ICpvdXRwdXQpCiB7CiAJaW50IGVycm9yID0gMDsKIAlib29sIGluY29tcGxldGVfZGF0YTsKQEAgLTE3NSw5ICsxNjMsMTIgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQkvKiBpZiB3ZSB3ZXJlIHByZXZpb3VzbHkgbWlzc2luZyBhbiBvaWQsIHVwZGF0ZSBNT0RJRklFRC0+VU5NT0RJRklFRCAqLworCS8qIGlmIHByZXZpb3VzbHkgbWlzc2luZyBhbiBvaWQsIGFuZCBub3cgdGhhdCB3ZSBoYXZlIGl0IHRoZSB0d28gc2lkZXMKKwkgKiBhcmUgdGhlIHNhbWUgKGFuZCBub3Qgc3VibW9kdWxlcyksIHVwZGF0ZSBNT0RJRklFRCAtPiBVTk1PRElGSUVECisJICovCiAJaWYgKGluY29tcGxldGVfZGF0YSAmJgogCQlwYXRjaC0+b2ZpbGUuZmlsZS0+bW9kZSA9PSBwYXRjaC0+bmZpbGUuZmlsZS0+bW9kZSAmJgorCQlwYXRjaC0+b2ZpbGUuZmlsZS0+bW9kZSAhPSBHSVRfRklMRU1PREVfQ09NTUlUICYmCiAJCWdpdF9vaWRfZXF1YWwoJnBhdGNoLT5vZmlsZS5maWxlLT5vaWQsICZwYXRjaC0+bmZpbGUuZmlsZS0+b2lkKSAmJgogCQlwYXRjaC0+ZGVsdGEtPnN0YXR1cyA9PSBHSVRfREVMVEFfTU9ESUZJRUQpIC8qIG5vdCBSRU5BTUVEL0NPUElFRCEgKi8KIAkJcGF0Y2gtPmRlbHRhLT5zdGF0dXMgPSBHSVRfREVMVEFfVU5NT0RJRklFRDsKQEAgLTIwMyw3ICsxOTQsNyBAQAogfQogCiBzdGF0aWMgaW50IGRpZmZfcGF0Y2hfZmlsZV9jYWxsYmFjaygKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gsIGdpdF9kaWZmX291dHB1dCAqb3V0cHV0KQorCWdpdF9wYXRjaCAqcGF0Y2gsIGdpdF9kaWZmX291dHB1dCAqb3V0cHV0KQogewogCWZsb2F0IHByb2dyZXNzOwogCkBAIC0yMTksMTMgKzIxMCwxNyBAQAogCXJldHVybiBvdXRwdXQtPmVycm9yOwogfQogCi1zdGF0aWMgaW50IGRpZmZfcGF0Y2hfZ2VuZXJhdGUoZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoLCBnaXRfZGlmZl9vdXRwdXQgKm91dHB1dCkKK3N0YXRpYyBpbnQgZGlmZl9wYXRjaF9nZW5lcmF0ZShnaXRfcGF0Y2ggKnBhdGNoLCBnaXRfZGlmZl9vdXRwdXQgKm91dHB1dCkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKChwYXRjaC0+ZmxhZ3MgJiBHSVRfRElGRl9QQVRDSF9ESUZGRUQpICE9IDApCiAJCXJldHVybiAwOwogCisJLyogaWYgd2UgYXJlIG5vdCBsb29raW5nIGF0IHRoZSBodW5rcyBhbmQgbGluZXMsIGRvbid0IGRvIHRoZSBkaWZmICovCisJaWYgKCFvdXRwdXQtPmh1bmtfY2IgJiYgIW91dHB1dC0+ZGF0YV9jYikKKwkJcmV0dXJuIDA7CisKIAlpZiAoKHBhdGNoLT5mbGFncyAmIEdJVF9ESUZGX1BBVENIX0xPQURFRCkgPT0gMCAmJgogCQkoZXJyb3IgPSBkaWZmX3BhdGNoX2xvYWQocGF0Y2gsIG91dHB1dCkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwpAQCAtMjQwLDcgKzIzNSw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBkaWZmX3BhdGNoX2ZyZWUoZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoKQorc3RhdGljIHZvaWQgZGlmZl9wYXRjaF9mcmVlKGdpdF9wYXRjaCAqcGF0Y2gpCiB7CiAJZ2l0X2RpZmZfZmlsZV9jb250ZW50X19jbGVhcigmcGF0Y2gtPm9maWxlKTsKIAlnaXRfZGlmZl9maWxlX2NvbnRlbnRfX2NsZWFyKCZwYXRjaC0+bmZpbGUpOwpAQCAtMjQ4LDcgKzI0Myw3IEBACiAJZ2l0X2FycmF5X2NsZWFyKHBhdGNoLT5saW5lcyk7CiAJZ2l0X2FycmF5X2NsZWFyKHBhdGNoLT5odW5rcyk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUocGF0Y2gtPmRpZmYpOyAvKiBkZWNyZW1lbnRzIHJlZmNvdW50ICovCisJZ2l0X2RpZmZfZnJlZShwYXRjaC0+ZGlmZik7IC8qIGRlY3JlbWVudHMgcmVmY291bnQgKi8KIAlwYXRjaC0+ZGlmZiA9IE5VTEw7CiAKIAlnaXRfcG9vbF9jbGVhcigmcGF0Y2gtPmZsYXR0ZW5lZCk7CkBAIC0yNTcsNyArMjUyLDcgQEAKIAkJZ2l0X19mcmVlKHBhdGNoKTsKIH0KIAotc3RhdGljIGludCBkaWZmX3JlcXVpcmVkKGdpdF9kaWZmX2xpc3QgKmRpZmYsIGNvbnN0IGNoYXIgKmFjdGlvbikKK3N0YXRpYyBpbnQgZGlmZl9yZXF1aXJlZChnaXRfZGlmZiAqZGlmZiwgY29uc3QgY2hhciAqYWN0aW9uKQogewogCWlmIChkaWZmKQogCQlyZXR1cm4gMDsKQEAgLTI2NiwyMiArMjYxLDIyIEBACiB9CiAKIGludCBnaXRfZGlmZl9mb3JlYWNoKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJZ2l0X2RpZmZfZmlsZV9jYiBmaWxlX2NiLAogCWdpdF9kaWZmX2h1bmtfY2IgaHVua19jYiwKLQlnaXRfZGlmZl9kYXRhX2NiIGRhdGFfY2IsCisJZ2l0X2RpZmZfbGluZV9jYiBkYXRhX2NiLAogCXZvaWQgKnBheWxvYWQpCiB7CiAJaW50IGVycm9yID0gMDsKIAlnaXRfeGRpZmZfb3V0cHV0IHhvOwogCXNpemVfdCBpZHg7Ci0JZ2l0X2RpZmZfcGF0Y2ggcGF0Y2g7CisJZ2l0X3BhdGNoIHBhdGNoOwogCiAJaWYgKGRpZmZfcmVxdWlyZWQoZGlmZiwgImdpdF9kaWZmX2ZvcmVhY2giKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWRpZmZfb3V0cHV0X2luaXQoKGdpdF9kaWZmX291dHB1dCAqKSZ4bywKLQkJJmRpZmYtPm9wdHMsIGZpbGVfY2IsIGh1bmtfY2IsIGRhdGFfY2IsIHBheWxvYWQpOworCWRpZmZfb3V0cHV0X2luaXQoCisJCSZ4by5vdXRwdXQsICZkaWZmLT5vcHRzLCBmaWxlX2NiLCBodW5rX2NiLCBkYXRhX2NiLCBwYXlsb2FkKTsKIAlnaXRfeGRpZmZfaW5pdCgmeG8sICZkaWZmLT5vcHRzKTsKIAogCWdpdF92ZWN0b3JfZm9yZWFjaCgmZGlmZi0+ZGVsdGFzLCBpZHgsIHBhdGNoLmRlbHRhKSB7CkBAIC0yOTIsMTIgKzI4NywxMiBAQAogCiAJCWlmICghKGVycm9yID0gZGlmZl9wYXRjaF9pbml0X2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIGlkeCkpKSB7CiAKLQkJCWVycm9yID0gZGlmZl9wYXRjaF9maWxlX2NhbGxiYWNrKCZwYXRjaCwgKGdpdF9kaWZmX291dHB1dCAqKSZ4byk7CisJCQllcnJvciA9IGRpZmZfcGF0Y2hfZmlsZV9jYWxsYmFjaygmcGF0Y2gsICZ4by5vdXRwdXQpOwogCiAJCQlpZiAoIWVycm9yKQotCQkJCWVycm9yID0gZGlmZl9wYXRjaF9nZW5lcmF0ZSgmcGF0Y2gsIChnaXRfZGlmZl9vdXRwdXQgKikmeG8pOworCQkJCWVycm9yID0gZGlmZl9wYXRjaF9nZW5lcmF0ZSgmcGF0Y2gsICZ4by5vdXRwdXQpOwogCi0JCQlnaXRfZGlmZl9wYXRjaF9mcmVlKCZwYXRjaCk7CisJCQlnaXRfcGF0Y2hfZnJlZSgmcGF0Y2gpOwogCQl9CiAKIAkJaWYgKGVycm9yIDwgMCkKQEAgLTMxMCw3ICszMDUsNyBAQAogfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JZ2l0X2RpZmZfcGF0Y2ggcGF0Y2g7CisJZ2l0X3BhdGNoIHBhdGNoOwogCWdpdF9kaWZmX2RlbHRhIGRlbHRhOwogCWNoYXIgcGF0aHNbR0lUX0ZMRVhfQVJSQVldOwogfSBkaWZmX3BhdGNoX3dpdGhfZGVsdGE7CkBAIC0zMTgsNyArMzEzLDcgQEAKIHN0YXRpYyBpbnQgZGlmZl9zaW5nbGVfZ2VuZXJhdGUoZGlmZl9wYXRjaF93aXRoX2RlbHRhICpwZCwgZ2l0X3hkaWZmX291dHB1dCAqeG8pCiB7CiAJaW50IGVycm9yID0gMDsKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2ggPSAmcGQtPnBhdGNoOworCWdpdF9wYXRjaCAqcGF0Y2ggPSAmcGQtPnBhdGNoOwogCWJvb2wgaGFzX29sZCA9ICgocGF0Y2gtPm9maWxlLmZsYWdzICYgR0lUX0RJRkZfRkxBR19fTk9fREFUQSkgPT0gMCk7CiAJYm9vbCBoYXNfbmV3ID0gKChwYXRjaC0+bmZpbGUuZmxhZ3MgJiBHSVRfRElGRl9GTEFHX19OT19EQVRBKSA9PSAwKTsKIApAQCAtNDIyLDcgKzQxNyw3IEBACiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cywKIAlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCiAJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgZGF0YV9jYiwKKwlnaXRfZGlmZl9saW5lX2NiIGRhdGFfY2IsCiAJdm9pZCAqcGF5bG9hZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtNDMzLDcgKzQyOCw3IEBACiAJbWVtc2V0KCZ4bywgMCwgc2l6ZW9mKHhvKSk7CiAKIAlkaWZmX291dHB1dF9pbml0KAotCQkoZ2l0X2RpZmZfb3V0cHV0ICopJnhvLCBvcHRzLCBmaWxlX2NiLCBodW5rX2NiLCBkYXRhX2NiLCBwYXlsb2FkKTsKKwkJJnhvLm91dHB1dCwgb3B0cywgZmlsZV9jYiwgaHVua19jYiwgZGF0YV9jYiwgcGF5bG9hZCk7CiAJZ2l0X3hkaWZmX2luaXQoJnhvLCBvcHRzKTsKIAogCWlmICghb2xkX3BhdGggJiYgbmV3X3BhdGgpCkBAIC00NDQsMTMgKzQzOSwxMyBAQAogCWVycm9yID0gZGlmZl9wYXRjaF9mcm9tX2Jsb2JzKAogCQkmcGQsICZ4bywgb2xkX2Jsb2IsIG9sZF9wYXRoLCBuZXdfYmxvYiwgbmV3X3BhdGgsIG9wdHMpOwogCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZSgoZ2l0X2RpZmZfcGF0Y2ggKikmcGQpOworCWdpdF9wYXRjaF9mcmVlKCZwZC5wYXRjaCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JzKAotCWdpdF9kaWZmX3BhdGNoICoqb3V0LAoraW50IGdpdF9wYXRjaF9mcm9tX2Jsb2JzKAorCWdpdF9wYXRjaCAqKm91dCwKIAljb25zdCBnaXRfYmxvYiAqb2xkX2Jsb2IsCiAJY29uc3QgY2hhciAqb2xkX3BhdGgsCiAJY29uc3QgZ2l0X2Jsb2IgKm5ld19ibG9iLApAQCAtNDY5LDE2ICs0NjQsMTYgQEAKIAogCW1lbXNldCgmeG8sIDAsIHNpemVvZih4bykpOwogCi0JZGlmZl9vdXRwdXRfdG9fcGF0Y2goKGdpdF9kaWZmX291dHB1dCAqKSZ4bywgJnBkLT5wYXRjaCk7CisJZGlmZl9vdXRwdXRfdG9fcGF0Y2goJnhvLm91dHB1dCwgJnBkLT5wYXRjaCk7CiAJZ2l0X3hkaWZmX2luaXQoJnhvLCBvcHRzKTsKIAogCWVycm9yID0gZGlmZl9wYXRjaF9mcm9tX2Jsb2JzKAogCQlwZCwgJnhvLCBvbGRfYmxvYiwgb2xkX3BhdGgsIG5ld19ibG9iLCBuZXdfcGF0aCwgb3B0cyk7CiAKIAlpZiAoIWVycm9yKQotCQkqb3V0ID0gKGdpdF9kaWZmX3BhdGNoICopcGQ7CisJCSpvdXQgPSAoZ2l0X3BhdGNoICopcGQ7CiAJZWxzZQotCQlnaXRfZGlmZl9wYXRjaF9mcmVlKChnaXRfZGlmZl9wYXRjaCAqKXBkKTsKKwkJZ2l0X3BhdGNoX2ZyZWUoKGdpdF9wYXRjaCAqKXBkKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTUzNCw3ICs1MjksNyBAQAogCWNvbnN0IGdpdF9kaWZmX29wdGlvbnMgKm9wdHMsCiAJZ2l0X2RpZmZfZmlsZV9jYiBmaWxlX2NiLAogCWdpdF9kaWZmX2h1bmtfY2IgaHVua19jYiwKLQlnaXRfZGlmZl9kYXRhX2NiIGRhdGFfY2IsCisJZ2l0X2RpZmZfbGluZV9jYiBkYXRhX2NiLAogCXZvaWQgKnBheWxvYWQpCiB7CiAJaW50IGVycm9yID0gMDsKQEAgLTU0NSw3ICs1NDAsNyBAQAogCW1lbXNldCgmeG8sIDAsIHNpemVvZih4bykpOwogCiAJZGlmZl9vdXRwdXRfaW5pdCgKLQkJKGdpdF9kaWZmX291dHB1dCAqKSZ4bywgb3B0cywgZmlsZV9jYiwgaHVua19jYiwgZGF0YV9jYiwgcGF5bG9hZCk7CisJCSZ4by5vdXRwdXQsIG9wdHMsIGZpbGVfY2IsIGh1bmtfY2IsIGRhdGFfY2IsIHBheWxvYWQpOwogCWdpdF94ZGlmZl9pbml0KCZ4bywgb3B0cyk7CiAKIAlpZiAoIW9sZF9wYXRoICYmIGJ1Zl9wYXRoKQpAQCAtNTU2LDEzICs1NTEsMTMgQEAKIAllcnJvciA9IGRpZmZfcGF0Y2hfZnJvbV9ibG9iX2FuZF9idWZmZXIoCiAJCSZwZCwgJnhvLCBvbGRfYmxvYiwgb2xkX3BhdGgsIGJ1ZiwgYnVmbGVuLCBidWZfcGF0aCwgb3B0cyk7CiAKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKChnaXRfZGlmZl9wYXRjaCAqKSZwZCk7CisJZ2l0X3BhdGNoX2ZyZWUoJnBkLnBhdGNoKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAotaW50IGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAotCWdpdF9kaWZmX3BhdGNoICoqb3V0LAoraW50IGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKKwlnaXRfcGF0Y2ggKipvdXQsCiAJY29uc3QgZ2l0X2Jsb2IgKm9sZF9ibG9iLAogCWNvbnN0IGNoYXIgKm9sZF9wYXRoLAogCWNvbnN0IGNoYXIgKmJ1ZiwKQEAgLTU4MiwzNSArNTc3LDMxIEBACiAKIAltZW1zZXQoJnhvLCAwLCBzaXplb2YoeG8pKTsKIAotCWRpZmZfb3V0cHV0X3RvX3BhdGNoKChnaXRfZGlmZl9vdXRwdXQgKikmeG8sICZwZC0+cGF0Y2gpOworCWRpZmZfb3V0cHV0X3RvX3BhdGNoKCZ4by5vdXRwdXQsICZwZC0+cGF0Y2gpOwogCWdpdF94ZGlmZl9pbml0KCZ4bywgb3B0cyk7CiAKIAllcnJvciA9IGRpZmZfcGF0Y2hfZnJvbV9ibG9iX2FuZF9idWZmZXIoCiAJCXBkLCAmeG8sIG9sZF9ibG9iLCBvbGRfcGF0aCwgYnVmLCBidWZsZW4sIGJ1Zl9wYXRoLCBvcHRzKTsKIAogCWlmICghZXJyb3IpCi0JCSpvdXQgPSAoZ2l0X2RpZmZfcGF0Y2ggKilwZDsKKwkJKm91dCA9IChnaXRfcGF0Y2ggKilwZDsKIAllbHNlCi0JCWdpdF9kaWZmX3BhdGNoX2ZyZWUoKGdpdF9kaWZmX3BhdGNoICopcGQpOworCQlnaXRfcGF0Y2hfZnJlZSgoZ2l0X3BhdGNoICopcGQpOwogCiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2l0X2RpZmZfZ2V0X3BhdGNoKAotCWdpdF9kaWZmX3BhdGNoICoqcGF0Y2hfcHRyLAotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICoqZGVsdGFfcHRyLAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCi0Jc2l6ZV90IGlkeCkKK2ludCBnaXRfcGF0Y2hfZnJvbV9kaWZmKAorCWdpdF9wYXRjaCAqKnBhdGNoX3B0ciwgZ2l0X2RpZmYgKmRpZmYsIHNpemVfdCBpZHgpCiB7CiAJaW50IGVycm9yID0gMDsKIAlnaXRfeGRpZmZfb3V0cHV0IHhvOwogCWdpdF9kaWZmX2RlbHRhICpkZWx0YSA9IE5VTEw7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoID0gTlVMTDsKKwlnaXRfcGF0Y2ggKnBhdGNoID0gTlVMTDsKIAogCWlmIChwYXRjaF9wdHIpICpwYXRjaF9wdHIgPSBOVUxMOwotCWlmIChkZWx0YV9wdHIpICpkZWx0YV9wdHIgPSBOVUxMOwogCi0JaWYgKGRpZmZfcmVxdWlyZWQoZGlmZiwgImdpdF9kaWZmX2dldF9wYXRjaCIpIDwgMCkKKwlpZiAoZGlmZl9yZXF1aXJlZChkaWZmLCAiZ2l0X3BhdGNoX2Zyb21fZGlmZiIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJZGVsdGEgPSBnaXRfdmVjdG9yX2dldCgmZGlmZi0+ZGVsdGFzLCBpZHgpOwpAQCAtNjE5LDkgKzYxMCw2IEBACiAJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCX0KIAotCWlmIChkZWx0YV9wdHIpCi0JCSpkZWx0YV9wdHIgPSBkZWx0YTsKLQogCWlmIChnaXRfZGlmZl9kZWx0YV9fc2hvdWxkX3NraXAoJmRpZmYtPm9wdHMsIGRlbHRhKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTYzNCwxMyArNjIyLDEzIEBACiAJaWYgKChlcnJvciA9IGRpZmZfcGF0Y2hfYWxsb2NfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgaWR4KSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlkaWZmX291dHB1dF90b19wYXRjaCgoZ2l0X2RpZmZfb3V0cHV0ICopJnhvLCBwYXRjaCk7CisJZGlmZl9vdXRwdXRfdG9fcGF0Y2goJnhvLm91dHB1dCwgcGF0Y2gpOwogCWdpdF94ZGlmZl9pbml0KCZ4bywgJmRpZmYtPm9wdHMpOwogCi0JZXJyb3IgPSBkaWZmX3BhdGNoX2ZpbGVfY2FsbGJhY2socGF0Y2gsIChnaXRfZGlmZl9vdXRwdXQgKikmeG8pOworCWVycm9yID0gZGlmZl9wYXRjaF9maWxlX2NhbGxiYWNrKHBhdGNoLCAmeG8ub3V0cHV0KTsKIAogCWlmICghZXJyb3IpCi0JCWVycm9yID0gZGlmZl9wYXRjaF9nZW5lcmF0ZShwYXRjaCwgKGdpdF9kaWZmX291dHB1dCAqKSZ4byk7CisJCWVycm9yID0gZGlmZl9wYXRjaF9nZW5lcmF0ZShwYXRjaCwgJnhvLm91dHB1dCk7CiAKIAlpZiAoIWVycm9yKSB7CiAJCS8qIGlmIGN1bXVsYXRpdmUgZGlmZiBzaXplIGlzIDwgMC41IHRvdGFsIHNpemUsIGZsYXR0ZW4gdGhlIHBhdGNoICovCkBAIC02NDgsNyArNjM2LDcgQEAKIAl9CiAKIAlpZiAoZXJyb3IgfHwgIXBhdGNoX3B0cikKLQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7CisJCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKIAllbHNlCiAJCSpwYXRjaF9wdHIgPSBwYXRjaDsKIApAQCAtNjU3LDM2ICs2NDUsMzYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXZvaWQgZ2l0X2RpZmZfcGF0Y2hfZnJlZShnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpCit2b2lkIGdpdF9wYXRjaF9mcmVlKGdpdF9wYXRjaCAqcGF0Y2gpCiB7CiAJaWYgKHBhdGNoKQogCQlHSVRfUkVGQ09VTlRfREVDKHBhdGNoLCBkaWZmX3BhdGNoX2ZyZWUpOwogfQogCi1jb25zdCBnaXRfZGlmZl9kZWx0YSAqZ2l0X2RpZmZfcGF0Y2hfZGVsdGEoZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoKQorY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmdpdF9wYXRjaF9nZXRfZGVsdGEoZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAlhc3NlcnQocGF0Y2gpOwogCXJldHVybiBwYXRjaC0+ZGVsdGE7CiB9CiAKLXNpemVfdCBnaXRfZGlmZl9wYXRjaF9udW1faHVua3MoZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoKQorc2l6ZV90IGdpdF9wYXRjaF9udW1faHVua3MoZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAlhc3NlcnQocGF0Y2gpOwogCXJldHVybiBnaXRfYXJyYXlfc2l6ZShwYXRjaC0+aHVua3MpOwogfQogCi1pbnQgZ2l0X2RpZmZfcGF0Y2hfbGluZV9zdGF0cygKK2ludCBnaXRfcGF0Y2hfbGluZV9zdGF0cygKIAlzaXplX3QgKnRvdGFsX2N0eHQsCiAJc2l6ZV90ICp0b3RhbF9hZGRzLAogCXNpemVfdCAqdG90YWxfZGVscywKLQljb25zdCBnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpCisJY29uc3QgZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAlzaXplX3QgdG90YWxzWzNdLCBpZHg7CiAKIAltZW1zZXQodG90YWxzLCAwLCBzaXplb2YodG90YWxzKSk7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGdpdF9hcnJheV9zaXplKHBhdGNoLT5saW5lcyk7ICsraWR4KSB7Ci0JCWRpZmZfcGF0Y2hfbGluZSAqbGluZSA9IGdpdF9hcnJheV9nZXQocGF0Y2gtPmxpbmVzLCBpZHgpOworCQlnaXRfZGlmZl9saW5lICpsaW5lID0gZ2l0X2FycmF5X2dldChwYXRjaC0+bGluZXMsIGlkeCk7CiAJCWlmICghbGluZSkKIAkJCWNvbnRpbnVlOwogCkBAIC03MTgsMTIgKzcwNiwxMCBAQAogCXJldHVybiBHSVRfRU5PVEZPVU5EOwogfQogCi1pbnQgZ2l0X2RpZmZfcGF0Y2hfZ2V0X2h1bmsoCi0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKipyYW5nZSwKLQljb25zdCBjaGFyICoqaGVhZGVyLAotCXNpemVfdCAqaGVhZGVyX2xlbiwKK2ludCBnaXRfcGF0Y2hfZ2V0X2h1bmsoCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqKm91dCwKIAlzaXplX3QgKmxpbmVzX2luX2h1bmssCi0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoLAorCWdpdF9wYXRjaCAqcGF0Y2gsCiAJc2l6ZV90IGh1bmtfaWR4KQogewogCWRpZmZfcGF0Y2hfaHVuayAqaHVuazsKQEAgLTczMiwyMSArNzE4LDE3IEBACiAJaHVuayA9IGdpdF9hcnJheV9nZXQocGF0Y2gtPmh1bmtzLCBodW5rX2lkeCk7CiAKIAlpZiAoIWh1bmspIHsKLQkJaWYgKHJhbmdlKSAqcmFuZ2UgPSBOVUxMOwotCQlpZiAoaGVhZGVyKSAqaGVhZGVyID0gTlVMTDsKLQkJaWYgKGhlYWRlcl9sZW4pICpoZWFkZXJfbGVuID0gMDsKKwkJaWYgKG91dCkgKm91dCA9IE5VTEw7CiAJCWlmIChsaW5lc19pbl9odW5rKSAqbGluZXNfaW5faHVuayA9IDA7CiAJCXJldHVybiBkaWZmX2Vycm9yX291dG9mcmFuZ2UoImh1bmsiKTsKIAl9CiAKLQlpZiAocmFuZ2UpICpyYW5nZSA9ICZodW5rLT5yYW5nZTsKLQlpZiAoaGVhZGVyKSAqaGVhZGVyID0gaHVuay0+aGVhZGVyOwotCWlmIChoZWFkZXJfbGVuKSAqaGVhZGVyX2xlbiA9IGh1bmstPmhlYWRlcl9sZW47CisJaWYgKG91dCkgKm91dCA9ICZodW5rLT5odW5rOwogCWlmIChsaW5lc19pbl9odW5rKSAqbGluZXNfaW5faHVuayA9IGh1bmstPmxpbmVfY291bnQ7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhnaXRfZGlmZl9wYXRjaCAqcGF0Y2gsIHNpemVfdCBodW5rX2lkeCkKK2ludCBnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsoZ2l0X3BhdGNoICpwYXRjaCwgc2l6ZV90IGh1bmtfaWR4KQogewogCWRpZmZfcGF0Y2hfaHVuayAqaHVuazsKIAlhc3NlcnQocGF0Y2gpOwpAQCAtNzU2LDgyICs3MzgsOTYgQEAKIAlyZXR1cm4gKGludClodW5rLT5saW5lX2NvdW50OwogfQogCi1pbnQgZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQljaGFyICpsaW5lX29yaWdpbiwKLQljb25zdCBjaGFyICoqY29udGVudCwKLQlzaXplX3QgKmNvbnRlbnRfbGVuLAotCWludCAqb2xkX2xpbmVubywKLQlpbnQgKm5ld19saW5lbm8sCi0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoLAoraW50IGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKAorCWNvbnN0IGdpdF9kaWZmX2xpbmUgKipvdXQsCisJZ2l0X3BhdGNoICpwYXRjaCwKIAlzaXplX3QgaHVua19pZHgsCiAJc2l6ZV90IGxpbmVfb2ZfaHVuaykKIHsKIAlkaWZmX3BhdGNoX2h1bmsgKmh1bms7Ci0JZGlmZl9wYXRjaF9saW5lICpsaW5lOwotCWNvbnN0IGNoYXIgKnRoaW5nOworCWdpdF9kaWZmX2xpbmUgKmxpbmU7CiAKIAlhc3NlcnQocGF0Y2gpOwogCiAJaWYgKCEoaHVuayA9IGdpdF9hcnJheV9nZXQocGF0Y2gtPmh1bmtzLCBodW5rX2lkeCkpKSB7Ci0JCXRoaW5nID0gImh1bmsiOwotCQlnb3RvIG5vdGZvdW5kOworCQlpZiAob3V0KSAqb3V0ID0gTlVMTDsKKwkJcmV0dXJuIGRpZmZfZXJyb3Jfb3V0b2ZyYW5nZSgiaHVuayIpOwogCX0KIAogCWlmIChsaW5lX29mX2h1bmsgPj0gaHVuay0+bGluZV9jb3VudCB8fAogCQkhKGxpbmUgPSBnaXRfYXJyYXlfZ2V0KAogCQkJcGF0Y2gtPmxpbmVzLCBodW5rLT5saW5lX3N0YXJ0ICsgbGluZV9vZl9odW5rKSkpIHsKLQkJdGhpbmcgPSAibGluZSI7Ci0JCWdvdG8gbm90Zm91bmQ7CisJCWlmIChvdXQpICpvdXQgPSBOVUxMOworCQlyZXR1cm4gZGlmZl9lcnJvcl9vdXRvZnJhbmdlKCJsaW5lIik7CiAJfQogCi0JaWYgKGxpbmVfb3JpZ2luKSAqbGluZV9vcmlnaW4gPSBsaW5lLT5vcmlnaW47Ci0JaWYgKGNvbnRlbnQpICpjb250ZW50ID0gbGluZS0+cHRyOwotCWlmIChjb250ZW50X2xlbikgKmNvbnRlbnRfbGVuID0gbGluZS0+bGVuOwotCWlmIChvbGRfbGluZW5vKSAqb2xkX2xpbmVubyA9IChpbnQpbGluZS0+b2xkbm87Ci0JaWYgKG5ld19saW5lbm8pICpuZXdfbGluZW5vID0gKGludClsaW5lLT5uZXdubzsKLQorCWlmIChvdXQpICpvdXQgPSBsaW5lOwogCXJldHVybiAwOwotCi1ub3Rmb3VuZDoKLQlpZiAobGluZV9vcmlnaW4pICpsaW5lX29yaWdpbiA9IEdJVF9ESUZGX0xJTkVfQ09OVEVYVDsKLQlpZiAoY29udGVudCkgKmNvbnRlbnQgPSBOVUxMOwotCWlmIChjb250ZW50X2xlbikgKmNvbnRlbnRfbGVuID0gMDsKLQlpZiAob2xkX2xpbmVubykgKm9sZF9saW5lbm8gPSAtMTsKLQlpZiAobmV3X2xpbmVubykgKm5ld19saW5lbm8gPSAtMTsKLQotCXJldHVybiBkaWZmX2Vycm9yX291dG9mcmFuZ2UodGhpbmcpOwogfQogCi1naXRfZGlmZl9saXN0ICpnaXRfZGlmZl9wYXRjaF9fZGlmZihnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpCitzaXplX3QgZ2l0X3BhdGNoX3NpemUoCisJZ2l0X3BhdGNoICpwYXRjaCwKKwlpbnQgaW5jbHVkZV9jb250ZXh0LAorCWludCBpbmNsdWRlX2h1bmtfaGVhZGVycywKKwlpbnQgaW5jbHVkZV9maWxlX2hlYWRlcnMpCit7CisJc2l6ZV90IG91dDsKKworCWFzc2VydChwYXRjaCk7CisKKwlvdXQgPSBwYXRjaC0+Y29udGVudF9zaXplOworCisJaWYgKCFpbmNsdWRlX2NvbnRleHQpCisJCW91dCAtPSBwYXRjaC0+Y29udGV4dF9zaXplOworCisJaWYgKGluY2x1ZGVfaHVua19oZWFkZXJzKQorCQlvdXQgKz0gcGF0Y2gtPmhlYWRlcl9zaXplOworCisJaWYgKGluY2x1ZGVfZmlsZV9oZWFkZXJzKSB7CisJCWdpdF9idWYgZmlsZV9oZWFkZXIgPSBHSVRfQlVGX0lOSVQ7CisKKwkJaWYgKGdpdF9kaWZmX2RlbHRhX19mb3JtYXRfZmlsZV9oZWFkZXIoCisJCQkJJmZpbGVfaGVhZGVyLCBwYXRjaC0+ZGVsdGEsIE5VTEwsIE5VTEwsIDApIDwgMCkKKwkJCWdpdGVycl9jbGVhcigpOworCQllbHNlCisJCQlvdXQgKz0gZ2l0X2J1Zl9sZW4oJmZpbGVfaGVhZGVyKTsKKworCQlnaXRfYnVmX2ZyZWUoJmZpbGVfaGVhZGVyKTsKKwl9CisKKwlyZXR1cm4gb3V0OworfQorCitnaXRfZGlmZiAqZ2l0X3BhdGNoX19kaWZmKGdpdF9wYXRjaCAqcGF0Y2gpCiB7CiAJcmV0dXJuIHBhdGNoLT5kaWZmOwogfQogCi1naXRfZGlmZl9kcml2ZXIgKmdpdF9kaWZmX3BhdGNoX19kcml2ZXIoZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoKQorZ2l0X2RpZmZfZHJpdmVyICpnaXRfcGF0Y2hfX2RyaXZlcihnaXRfcGF0Y2ggKnBhdGNoKQogewogCS8qIG9maWxlIGRyaXZlciBpcyByZXByZXNlbnRhdGl2ZSBmb3Igd2hvbGUgcGF0Y2ggKi8KIAlyZXR1cm4gcGF0Y2gtPm9maWxlLmRyaXZlcjsKIH0KIAotdm9pZCBnaXRfZGlmZl9wYXRjaF9fb2xkX2RhdGEoCi0JY2hhciAqKnB0ciwgc2l6ZV90ICpsZW4sIGdpdF9kaWZmX3BhdGNoICpwYXRjaCkKK3ZvaWQgZ2l0X3BhdGNoX19vbGRfZGF0YSgKKwljaGFyICoqcHRyLCBzaXplX3QgKmxlbiwgZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAkqcHRyID0gcGF0Y2gtPm9maWxlLm1hcC5kYXRhOwogCSpsZW4gPSBwYXRjaC0+b2ZpbGUubWFwLmxlbjsKIH0KIAotdm9pZCBnaXRfZGlmZl9wYXRjaF9fbmV3X2RhdGEoCi0JY2hhciAqKnB0ciwgc2l6ZV90ICpsZW4sIGdpdF9kaWZmX3BhdGNoICpwYXRjaCkKK3ZvaWQgZ2l0X3BhdGNoX19uZXdfZGF0YSgKKwljaGFyICoqcHRyLCBzaXplX3QgKmxlbiwgZ2l0X3BhdGNoICpwYXRjaCkKIHsKIAkqcHRyID0gcGF0Y2gtPm5maWxlLm1hcC5kYXRhOwogCSpsZW4gPSBwYXRjaC0+bmZpbGUubWFwLmxlbjsKIH0KIAotaW50IGdpdF9kaWZmX3BhdGNoX19pbnZva2VfY2FsbGJhY2tzKAotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCwKK2ludCBnaXRfcGF0Y2hfX2ludm9rZV9jYWxsYmFja3MoCisJZ2l0X3BhdGNoICpwYXRjaCwKIAlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCiAJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgbGluZV9jYiwKKwlnaXRfZGlmZl9saW5lX2NiIGxpbmVfY2IsCiAJdm9pZCAqcGF5bG9hZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtODQ2LDE4ICs4NDIsMTYgQEAKIAlmb3IgKGkgPSAwOyAhZXJyb3IgJiYgaSA8IGdpdF9hcnJheV9zaXplKHBhdGNoLT5odW5rcyk7ICsraSkgewogCQlkaWZmX3BhdGNoX2h1bmsgKmggPSBnaXRfYXJyYXlfZ2V0KHBhdGNoLT5odW5rcywgaSk7CiAKLQkJZXJyb3IgPSBodW5rX2NiKAotCQkJcGF0Y2gtPmRlbHRhLCAmaC0+cmFuZ2UsIGgtPmhlYWRlciwgaC0+aGVhZGVyX2xlbiwgcGF5bG9hZCk7CisJCWVycm9yID0gaHVua19jYihwYXRjaC0+ZGVsdGEsICZoLT5odW5rLCBwYXlsb2FkKTsKIAogCQlpZiAoIWxpbmVfY2IpCiAJCQljb250aW51ZTsKIAogCQlmb3IgKGogPSAwOyAhZXJyb3IgJiYgaiA8IGgtPmxpbmVfY291bnQ7ICsraikgewotCQkJZGlmZl9wYXRjaF9saW5lICpsID0KKwkJCWdpdF9kaWZmX2xpbmUgKmwgPQogCQkJCWdpdF9hcnJheV9nZXQocGF0Y2gtPmxpbmVzLCBoLT5saW5lX3N0YXJ0ICsgaik7CiAKLQkJCWVycm9yID0gbGluZV9jYigKLQkJCQlwYXRjaC0+ZGVsdGEsICZoLT5yYW5nZSwgbC0+b3JpZ2luLCBsLT5wdHIsIGwtPmxlbiwgcGF5bG9hZCk7CisJCQllcnJvciA9IGxpbmVfY2IocGF0Y2gtPmRlbHRhLCAmaC0+aHVuaywgbCwgcGF5bG9hZCk7CiAJCX0KIAl9CiAKQEAgLTg3NiwxMiArODcwLDEwIEBACiAKIHN0YXRpYyBpbnQgZGlmZl9wYXRjaF9odW5rX2NiKAogCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKLQljb25zdCBnaXRfZGlmZl9yYW5nZSAqcmFuZ2UsCi0JY29uc3QgY2hhciAqaGVhZGVyLAotCXNpemVfdCBoZWFkZXJfbGVuLAorCWNvbnN0IGdpdF9kaWZmX2h1bmsgKmh1bmtfLAogCXZvaWQgKnBheWxvYWQpCiB7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoID0gcGF5bG9hZDsKKwlnaXRfcGF0Y2ggKnBhdGNoID0gcGF5bG9hZDsKIAlkaWZmX3BhdGNoX2h1bmsgKmh1bms7CiAKIAlHSVRfVU5VU0VEKGRlbHRhKTsKQEAgLTg4OSwzNiArODgxLDI4IEBACiAJaHVuayA9IGdpdF9hcnJheV9hbGxvYyhwYXRjaC0+aHVua3MpOwogCUdJVEVSUl9DSEVDS19BTExPQyhodW5rKTsKIAotCW1lbWNweSgmaHVuay0+cmFuZ2UsIHJhbmdlLCBzaXplb2YoaHVuay0+cmFuZ2UpKTsKKwltZW1jcHkoJmh1bmstPmh1bmssIGh1bmtfLCBzaXplb2YoaHVuay0+aHVuaykpOwogCi0JYXNzZXJ0KGhlYWRlcl9sZW4gKyAxIDwgc2l6ZW9mKGh1bmstPmhlYWRlcikpOwotCW1lbWNweSgmaHVuay0+aGVhZGVyLCBoZWFkZXIsIGhlYWRlcl9sZW4pOwotCWh1bmstPmhlYWRlcltoZWFkZXJfbGVuXSA9ICdcMCc7Ci0JaHVuay0+aGVhZGVyX2xlbiA9IGhlYWRlcl9sZW47CisJcGF0Y2gtPmhlYWRlcl9zaXplICs9IGh1bmtfLT5oZWFkZXJfbGVuOwogCiAJaHVuay0+bGluZV9zdGFydCA9IGdpdF9hcnJheV9zaXplKHBhdGNoLT5saW5lcyk7CiAJaHVuay0+bGluZV9jb3VudCA9IDA7CiAKLQlwYXRjaC0+b2xkbm8gPSByYW5nZS0+b2xkX3N0YXJ0OwotCXBhdGNoLT5uZXdubyA9IHJhbmdlLT5uZXdfc3RhcnQ7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkaWZmX3BhdGNoX2xpbmVfY2IoCiAJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAotCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyYW5nZSwKLQljaGFyIGxpbmVfb3JpZ2luLAotCWNvbnN0IGNoYXIgKmNvbnRlbnQsCi0Jc2l6ZV90IGNvbnRlbnRfbGVuLAorCWNvbnN0IGdpdF9kaWZmX2h1bmsgKmh1bmtfLAorCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmVfLAogCXZvaWQgKnBheWxvYWQpCiB7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoID0gcGF5bG9hZDsKKwlnaXRfcGF0Y2ggKnBhdGNoID0gcGF5bG9hZDsKIAlkaWZmX3BhdGNoX2h1bmsgKmh1bms7Ci0JZGlmZl9wYXRjaF9saW5lICpsaW5lOworCWdpdF9kaWZmX2xpbmUgICAqbGluZTsKIAogCUdJVF9VTlVTRUQoZGVsdGEpOwotCUdJVF9VTlVTRUQocmFuZ2UpOworCUdJVF9VTlVTRUQoaHVua18pOwogCiAJaHVuayA9IGdpdF9hcnJheV9sYXN0KHBhdGNoLT5odW5rcyk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKGh1bmspOwpAQCAtOTI2LDM5ICs5MTAsMjAgQEAKIAlsaW5lID0gZ2l0X2FycmF5X2FsbG9jKHBhdGNoLT5saW5lcyk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKGxpbmUpOwogCi0JbGluZS0+cHRyID0gY29udGVudDsKLQlsaW5lLT5sZW4gPSBjb250ZW50X2xlbjsKLQlsaW5lLT5vcmlnaW4gPSBsaW5lX29yaWdpbjsKLQotCXBhdGNoLT5jb250ZW50X3NpemUgKz0gY29udGVudF9sZW47CisJbWVtY3B5KGxpbmUsIGxpbmVfLCBzaXplb2YoKmxpbmUpKTsKIAogCS8qIGRvIHNvbWUgYm9va2tlZXBpbmcgc28gd2UgY2FuIHByb3ZpZGUgb2xkL25ldyBsaW5lIG51bWJlcnMgKi8KIAotCWZvciAobGluZS0+bGluZXMgPSAwOyBjb250ZW50X2xlbiA+IDA7IC0tY29udGVudF9sZW4pIHsKLQkJaWYgKCpjb250ZW50KysgPT0gJ1xuJykKLQkJCSsrbGluZS0+bGluZXM7Ci0JfQorCXBhdGNoLT5jb250ZW50X3NpemUgKz0gbGluZS0+Y29udGVudF9sZW47CiAKLQlzd2l0Y2ggKGxpbmVfb3JpZ2luKSB7Ci0JY2FzZSBHSVRfRElGRl9MSU5FX0FERElUSU9OOgotCWNhc2UgR0lUX0RJRkZfTElORV9ERUxfRU9GTkw6Ci0JCWxpbmUtPm9sZG5vID0gLTE7Ci0JCWxpbmUtPm5ld25vID0gcGF0Y2gtPm5ld25vOwotCQlwYXRjaC0+bmV3bm8gKz0gbGluZS0+bGluZXM7Ci0JCWJyZWFrOwotCWNhc2UgR0lUX0RJRkZfTElORV9ERUxFVElPTjoKLQljYXNlIEdJVF9ESUZGX0xJTkVfQUREX0VPRk5MOgotCQlsaW5lLT5vbGRubyA9IHBhdGNoLT5vbGRubzsKLQkJbGluZS0+bmV3bm8gPSAtMTsKLQkJcGF0Y2gtPm9sZG5vICs9IGxpbmUtPmxpbmVzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlsaW5lLT5vbGRubyA9IHBhdGNoLT5vbGRubzsKLQkJbGluZS0+bmV3bm8gPSBwYXRjaC0+bmV3bm87Ci0JCXBhdGNoLT5vbGRubyArPSBsaW5lLT5saW5lczsKLQkJcGF0Y2gtPm5ld25vICs9IGxpbmUtPmxpbmVzOwotCQlicmVhazsKLQl9CisJaWYgKGxpbmUtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0FERElUSU9OIHx8CisJCWxpbmUtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0RFTEVUSU9OKQorCQlwYXRjaC0+Y29udGVudF9zaXplICs9IDE7CisJZWxzZSBpZiAobGluZS0+b3JpZ2luID09IEdJVF9ESUZGX0xJTkVfQ09OVEVYVCkgeworCQlwYXRjaC0+Y29udGVudF9zaXplICs9IDE7CisJCXBhdGNoLT5jb250ZXh0X3NpemUgKz0gbGluZS0+Y29udGVudF9sZW4gKyAxOworCX0gZWxzZSBpZiAobGluZS0+b3JpZ2luID09IEdJVF9ESUZGX0xJTkVfQ09OVEVYVF9FT0ZOTCkKKwkJcGF0Y2gtPmNvbnRleHRfc2l6ZSArPSBsaW5lLT5jb250ZW50X2xlbjsKIAogCWh1bmstPmxpbmVfY291bnQrKzsKIApAQCAtOTcwLDcgKzkzNSw3IEBACiAJY29uc3QgZ2l0X2RpZmZfb3B0aW9ucyAqb3B0cywKIAlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCiAJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgZGF0YV9jYiwKKwlnaXRfZGlmZl9saW5lX2NiIGRhdGFfY2IsCiAJdm9pZCAqcGF5bG9hZCkKIHsKIAlHSVRfVU5VU0VEKG9wdHMpOwpAQCAtOTgzLDcgKzk0OCw3IEBACiAJb3V0LT5wYXlsb2FkID0gcGF5bG9hZDsKIH0KIAotc3RhdGljIHZvaWQgZGlmZl9vdXRwdXRfdG9fcGF0Y2goZ2l0X2RpZmZfb3V0cHV0ICpvdXQsIGdpdF9kaWZmX3BhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIGRpZmZfb3V0cHV0X3RvX3BhdGNoKGdpdF9kaWZmX291dHB1dCAqb3V0LCBnaXRfcGF0Y2ggKnBhdGNoKQogewogCWRpZmZfb3V0cHV0X2luaXQoCiAJCW91dCwgTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9kaWZmX3BhdGNoLmggYi9zcmMvZGlmZl9wYXRjaC5oCmluZGV4IDU2YWYxNDYuLmRmMmJhNGMgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmX3BhdGNoLmgKKysrIGIvc3JjL2RpZmZfcGF0Y2guaApAQCAtMTEsMTkgKzExLDIwIEBACiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgImRpZmZfZmlsZS5oIgogI2luY2x1ZGUgImFycmF5LmgiCisjaW5jbHVkZSAiZ2l0Mi9wYXRjaC5oIgogCi1leHRlcm4gZ2l0X2RpZmZfbGlzdCAqZ2l0X2RpZmZfcGF0Y2hfX2RpZmYoZ2l0X2RpZmZfcGF0Y2ggKik7CitleHRlcm4gZ2l0X2RpZmYgKmdpdF9wYXRjaF9fZGlmZihnaXRfcGF0Y2ggKik7CiAKLWV4dGVybiBnaXRfZGlmZl9kcml2ZXIgKmdpdF9kaWZmX3BhdGNoX19kcml2ZXIoZ2l0X2RpZmZfcGF0Y2ggKik7CitleHRlcm4gZ2l0X2RpZmZfZHJpdmVyICpnaXRfcGF0Y2hfX2RyaXZlcihnaXRfcGF0Y2ggKik7CiAKLWV4dGVybiB2b2lkIGdpdF9kaWZmX3BhdGNoX19vbGRfZGF0YShjaGFyICoqLCBzaXplX3QgKiwgZ2l0X2RpZmZfcGF0Y2ggKik7Ci1leHRlcm4gdm9pZCBnaXRfZGlmZl9wYXRjaF9fbmV3X2RhdGEoY2hhciAqKiwgc2l6ZV90ICosIGdpdF9kaWZmX3BhdGNoICopOworZXh0ZXJuIHZvaWQgZ2l0X3BhdGNoX19vbGRfZGF0YShjaGFyICoqLCBzaXplX3QgKiwgZ2l0X3BhdGNoICopOworZXh0ZXJuIHZvaWQgZ2l0X3BhdGNoX19uZXdfZGF0YShjaGFyICoqLCBzaXplX3QgKiwgZ2l0X3BhdGNoICopOwogCi1leHRlcm4gaW50IGdpdF9kaWZmX3BhdGNoX19pbnZva2VfY2FsbGJhY2tzKAotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCwKK2V4dGVybiBpbnQgZ2l0X3BhdGNoX19pbnZva2VfY2FsbGJhY2tzKAorCWdpdF9wYXRjaCAqcGF0Y2gsCiAJZ2l0X2RpZmZfZmlsZV9jYiBmaWxlX2NiLAogCWdpdF9kaWZmX2h1bmtfY2IgaHVua19jYiwKLQlnaXRfZGlmZl9kYXRhX2NiIGxpbmVfY2IsCisJZ2l0X2RpZmZfbGluZV9jYiBsaW5lX2NiLAogCXZvaWQgKnBheWxvYWQpOwogCiB0eXBlZGVmIHN0cnVjdCBnaXRfZGlmZl9vdXRwdXQgZ2l0X2RpZmZfb3V0cHV0OwpAQCAtMzEsNyArMzIsNyBAQAogCS8qIHRoZXNlIGNhbGxiYWNrcyBhcmUgaXNzdWVkIHdpdGggdGhlIGRpZmYgZGF0YSAqLwogCWdpdF9kaWZmX2ZpbGVfY2IgZmlsZV9jYjsKIAlnaXRfZGlmZl9odW5rX2NiIGh1bmtfY2I7Ci0JZ2l0X2RpZmZfZGF0YV9jYiBkYXRhX2NiOworCWdpdF9kaWZmX2xpbmVfY2IgZGF0YV9jYjsKIAl2b2lkICpwYXlsb2FkOwogCiAJLyogdGhpcyByZWNvcmRzIHRoZSBhY3R1YWwgZXJyb3IgaW4gY2FzZXMgd2hlcmUgaXQgbWF5IGJlIG9ic2N1cmVkICovCkBAIC00MCw3ICs0MSw3IEBACiAJLyogdGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIGRvIHRoZSBkaWZmIGFuZCBkcml2ZSB0aGUgb3RoZXIgY2FsbGJhY2tzLgogCSAqIHNlZSBkaWZmX3hkaWZmLmggZm9yIGhvdyB0byB1c2UgdGhpcyBpbiBwcmFjdGljZSBmb3Igbm93LgogCSAqLwotCWludCAoKmRpZmZfY2IpKGdpdF9kaWZmX291dHB1dCAqb3V0cHV0LCBnaXRfZGlmZl9wYXRjaCAqcGF0Y2gpOworCWludCAoKmRpZmZfY2IpKGdpdF9kaWZmX291dHB1dCAqb3V0cHV0LCBnaXRfcGF0Y2ggKnBhdGNoKTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2RpZmZfcHJpbnQuYyBiL3NyYy9kaWZmX3ByaW50LmMKaW5kZXggMGRlNTQ4OC4uYjA0YjExNSAxMDA2NDQKLS0tIGEvc3JjL2RpZmZfcHJpbnQuYworKysgYi9zcmMvZGlmZl9wcmludC5jCkBAIC03LDI2ICs3LDM5IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgImRpZmZfcGF0Y2guaCIKLSNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJmaWxlb3BzLmgiCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOwotCWdpdF9kaWZmX2RhdGFfY2IgcHJpbnRfY2I7CisJZ2l0X2RpZmYgKmRpZmY7CisJZ2l0X2RpZmZfZm9ybWF0X3QgZm9ybWF0OworCWdpdF9kaWZmX2xpbmVfY2IgcHJpbnRfY2I7CiAJdm9pZCAqcGF5bG9hZDsKIAlnaXRfYnVmICpidWY7CisJdWludDMyX3QgZmxhZ3M7CiAJaW50IG9pZF9zdHJsZW47CisJZ2l0X2RpZmZfbGluZSBsaW5lOwogfSBkaWZmX3ByaW50X2luZm87CiAKIHN0YXRpYyBpbnQgZGlmZl9wcmludF9pbmZvX2luaXQoCiAJZGlmZl9wcmludF9pbmZvICpwaSwKLQlnaXRfYnVmICpvdXQsIGdpdF9kaWZmX2xpc3QgKmRpZmYsIGdpdF9kaWZmX2RhdGFfY2IgY2IsIHZvaWQgKnBheWxvYWQpCisJZ2l0X2J1ZiAqb3V0LAorCWdpdF9kaWZmICpkaWZmLAorCWdpdF9kaWZmX2Zvcm1hdF90IGZvcm1hdCwKKwlnaXRfZGlmZl9saW5lX2NiIGNiLAorCXZvaWQgKnBheWxvYWQpCiB7CiAJcGktPmRpZmYgICAgID0gZGlmZjsKKwlwaS0+Zm9ybWF0ICAgPSBmb3JtYXQ7CiAJcGktPnByaW50X2NiID0gY2I7CiAJcGktPnBheWxvYWQgID0gcGF5bG9hZDsKIAlwaS0+YnVmICAgICAgPSBvdXQ7CiAKLQlpZiAoIWRpZmYgfHwgIWRpZmYtPnJlcG8pCisJaWYgKGRpZmYpCisJCXBpLT5mbGFncyA9IGRpZmYtPm9wdHMuZmxhZ3M7CisKKwlpZiAoZGlmZiAmJiBkaWZmLT5vcHRzLm9pZF9hYmJyZXYgIT0gMCkKKwkJcGktPm9pZF9zdHJsZW4gPSBkaWZmLT5vcHRzLm9pZF9hYmJyZXY7CisJZWxzZSBpZiAoIWRpZmYgfHwgIWRpZmYtPnJlcG8pCiAJCXBpLT5vaWRfc3RybGVuID0gR0lUX0FCQlJFVl9ERUZBVUxUOwogCWVsc2UgaWYgKGdpdF9yZXBvc2l0b3J5X19jdmFyKAogCQkmcGktPm9pZF9zdHJsZW4sIGRpZmYtPnJlcG8sIEdJVF9DVkFSX0FCQlJFVikgPCAwKQpAQCAtMzksNiArNTIsMTEgQEAKIAllbHNlIGlmIChwaS0+b2lkX3N0cmxlbiA+IEdJVF9PSURfSEVYU1ogKyAxKQogCQlwaS0+b2lkX3N0cmxlbiA9IEdJVF9PSURfSEVYU1ogKyAxOwogCisJbWVtc2V0KCZwaS0+bGluZSwgMCwgc2l6ZW9mKHBpLT5saW5lKSk7CisJcGktPmxpbmUub2xkX2xpbmVubyA9IC0xOworCXBpLT5saW5lLm5ld19saW5lbm8gPSAtMTsKKwlwaS0+bGluZS5udW1fbGluZXMgID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC00Niw3ICs2NCw3IEBACiB7CiAJaWYgKFNfSVNESVIobW9kZSkpCiAJCXJldHVybiAnLyc7Ci0JZWxzZSBpZiAobW9kZSAmIDAxMDApIC8qIC1WNTM2ICovCisJZWxzZSBpZiAoR0lUX1BFUk1TX0lTX0VYRUMobW9kZSkpIC8qIC1WNTM2ICovCiAJCS8qIGluIGdpdCwgbW9kZXMgYXJlIHZlcnkgcmVndWxhciwgc28gd2UgbXVzdCBoYXZlIDAxMDA3NTUgbW9kZSAqLwogCQlyZXR1cm4gJyonOwogCWVsc2UKQEAgLTc3LDcgKzk1LDM1IEBACiAJcmV0dXJuIEdJVF9FVVNFUjsKIH0KIAotc3RhdGljIGludCBkaWZmX3ByaW50X29uZV9jb21wYWN0KAorc3RhdGljIGludCBkaWZmX3ByaW50X29uZV9uYW1lX29ubHkoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLCBmbG9hdCBwcm9ncmVzcywgdm9pZCAqZGF0YSkKK3sKKwlkaWZmX3ByaW50X2luZm8gKnBpID0gZGF0YTsKKwlnaXRfYnVmICpvdXQgPSBwaS0+YnVmOworCisJR0lUX1VOVVNFRChwcm9ncmVzcyk7CisKKwlpZiAoKHBpLT5mbGFncyAmIEdJVF9ESUZGX1NIT1dfVU5NT0RJRklFRCkgPT0gMCAmJgorCQlkZWx0YS0+c3RhdHVzID09IEdJVF9ERUxUQV9VTk1PRElGSUVEKQorCQlyZXR1cm4gMDsKKworCWdpdF9idWZfY2xlYXIob3V0KTsKKworCWlmIChnaXRfYnVmX3B1dHMob3V0LCBkZWx0YS0+bmV3X2ZpbGUucGF0aCkgPCAwIHx8CisJCWdpdF9idWZfcHV0YyhvdXQsICdcbicpKQorCQlyZXR1cm4gLTE7CisKKwlwaS0+bGluZS5vcmlnaW4gICAgICA9IEdJVF9ESUZGX0xJTkVfRklMRV9IRFI7CisJcGktPmxpbmUuY29udGVudCAgICAgPSBnaXRfYnVmX2NzdHIob3V0KTsKKwlwaS0+bGluZS5jb250ZW50X2xlbiA9IGdpdF9idWZfbGVuKG91dCk7CisKKwlpZiAocGktPnByaW50X2NiKGRlbHRhLCBOVUxMLCAmcGktPmxpbmUsIHBpLT5wYXlsb2FkKSkKKwkJcmV0dXJuIGNhbGxiYWNrX2Vycm9yKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX3ByaW50X29uZV9uYW1lX3N0YXR1cygKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsIGZsb2F0IHByb2dyZXNzLCB2b2lkICpkYXRhKQogewogCWRpZmZfcHJpbnRfaW5mbyAqcGkgPSBkYXRhOwpAQCAtODgsNyArMTM0LDcgQEAKIAogCUdJVF9VTlVTRUQocHJvZ3Jlc3MpOwogCi0JaWYgKGNvZGUgPT0gJyAnKQorCWlmICgocGktPmZsYWdzICYgR0lUX0RJRkZfU0hPV19VTk1PRElGSUVEKSA9PSAwICYmIGNvZGUgPT0gJyAnKQogCQlyZXR1cm4gMDsKIAogCW9sZF9zdWZmaXggPSBkaWZmX3BpY2tfc3VmZml4KGRlbHRhLT5vbGRfZmlsZS5tb2RlKTsKQEAgLTk4LDEyICsxNDQsMTIgQEAKIAogCWlmIChkZWx0YS0+b2xkX2ZpbGUucGF0aCAhPSBkZWx0YS0+bmV3X2ZpbGUucGF0aCAmJgogCQlzdHJjb21wKGRlbHRhLT5vbGRfZmlsZS5wYXRoLGRlbHRhLT5uZXdfZmlsZS5wYXRoKSAhPSAwKQotCQlnaXRfYnVmX3ByaW50ZihvdXQsICIlY1x0JXMlYyAtPiAlcyVjXG4iLCBjb2RlLAorCQlnaXRfYnVmX3ByaW50ZihvdXQsICIlY1x0JXMlYyAlcyVjXG4iLCBjb2RlLAogCQkJZGVsdGEtPm9sZF9maWxlLnBhdGgsIG9sZF9zdWZmaXgsIGRlbHRhLT5uZXdfZmlsZS5wYXRoLCBuZXdfc3VmZml4KTsKIAllbHNlIGlmIChkZWx0YS0+b2xkX2ZpbGUubW9kZSAhPSBkZWx0YS0+bmV3X2ZpbGUubW9kZSAmJgogCQlkZWx0YS0+b2xkX2ZpbGUubW9kZSAhPSAwICYmIGRlbHRhLT5uZXdfZmlsZS5tb2RlICE9IDApCi0JCWdpdF9idWZfcHJpbnRmKG91dCwgIiVjXHQlcyVjICglbyAtPiAlbylcbiIsIGNvZGUsCi0JCQlkZWx0YS0+b2xkX2ZpbGUucGF0aCwgbmV3X3N1ZmZpeCwgZGVsdGEtPm9sZF9maWxlLm1vZGUsIGRlbHRhLT5uZXdfZmlsZS5tb2RlKTsKKwkJZ2l0X2J1Zl9wcmludGYob3V0LCAiJWNcdCVzJWMgJXMlY1xuIiwgY29kZSwKKwkJCWRlbHRhLT5vbGRfZmlsZS5wYXRoLCBvbGRfc3VmZml4LCBkZWx0YS0+bmV3X2ZpbGUucGF0aCwgbmV3X3N1ZmZpeCk7CiAJZWxzZSBpZiAob2xkX3N1ZmZpeCAhPSAnICcpCiAJCWdpdF9idWZfcHJpbnRmKG91dCwgIiVjXHQlcyVjXG4iLCBjb2RlLCBkZWx0YS0+b2xkX2ZpbGUucGF0aCwgb2xkX3N1ZmZpeCk7CiAJZWxzZQpAQCAtMTEyLDMxICsxNTgsMTYgQEAKIAlpZiAoZ2l0X2J1Zl9vb20ob3V0KSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHBpLT5wcmludF9jYihkZWx0YSwgTlVMTCwgR0lUX0RJRkZfTElORV9GSUxFX0hEUiwKLQkJCWdpdF9idWZfY3N0cihvdXQpLCBnaXRfYnVmX2xlbihvdXQpLCBwaS0+cGF5bG9hZCkpCisJcGktPmxpbmUub3JpZ2luICAgICAgPSBHSVRfRElGRl9MSU5FX0ZJTEVfSERSOworCXBpLT5saW5lLmNvbnRlbnQgICAgID0gZ2l0X2J1Zl9jc3RyKG91dCk7CisJcGktPmxpbmUuY29udGVudF9sZW4gPSBnaXRfYnVmX2xlbihvdXQpOworCisJaWYgKHBpLT5wcmludF9jYihkZWx0YSwgTlVMTCwgJnBpLT5saW5lLCBwaS0+cGF5bG9hZCkpCiAJCXJldHVybiBjYWxsYmFja19lcnJvcigpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIHByaW50IGEgZ2l0X2RpZmZfbGlzdCB0byBhIHByaW50IGNhbGxiYWNrIGluIGNvbXBhY3QgZm9ybWF0ICovCi1pbnQgZ2l0X2RpZmZfcHJpbnRfY29tcGFjdCgKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAotCWdpdF9kaWZmX2RhdGFfY2IgcHJpbnRfY2IsCi0Jdm9pZCAqcGF5bG9hZCkKLXsKLQlpbnQgZXJyb3I7Ci0JZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7Ci0JZGlmZl9wcmludF9pbmZvIHBpOwotCi0JaWYgKCEoZXJyb3IgPSBkaWZmX3ByaW50X2luZm9faW5pdCgmcGksICZidWYsIGRpZmYsIHByaW50X2NiLCBwYXlsb2FkKSkpCi0JCWVycm9yID0gZ2l0X2RpZmZfZm9yZWFjaChkaWZmLCBkaWZmX3ByaW50X29uZV9jb21wYWN0LCBOVUxMLCBOVUxMLCAmcGkpOwotCi0JZ2l0X2J1Zl9mcmVlKCZidWYpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCiBzdGF0aWMgaW50IGRpZmZfcHJpbnRfb25lX3JhdygKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsIGZsb2F0IHByb2dyZXNzLCB2b2lkICpkYXRhKQogewpAQCAtMTQ3LDcgKzE3OCw3IEBACiAKIAlHSVRfVU5VU0VEKHByb2dyZXNzKTsKIAotCWlmIChjb2RlID09ICcgJykKKwlpZiAoKHBpLT5mbGFncyAmIEdJVF9ESUZGX1NIT1dfVU5NT0RJRklFRCkgPT0gMCAmJiBjb2RlID09ICcgJykKIAkJcmV0dXJuIDA7CiAKIAlnaXRfYnVmX2NsZWFyKG91dCk7CkBAIC0xNzMsMzggKzIwNCwyMyBAQAogCWlmIChnaXRfYnVmX29vbShvdXQpKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAocGktPnByaW50X2NiKGRlbHRhLCBOVUxMLCBHSVRfRElGRl9MSU5FX0ZJTEVfSERSLAotCQkJZ2l0X2J1Zl9jc3RyKG91dCksIGdpdF9idWZfbGVuKG91dCksIHBpLT5wYXlsb2FkKSkKKwlwaS0+bGluZS5vcmlnaW4gICAgICA9IEdJVF9ESUZGX0xJTkVfRklMRV9IRFI7CisJcGktPmxpbmUuY29udGVudCAgICAgPSBnaXRfYnVmX2NzdHIob3V0KTsKKwlwaS0+bGluZS5jb250ZW50X2xlbiA9IGdpdF9idWZfbGVuKG91dCk7CisKKwlpZiAocGktPnByaW50X2NiKGRlbHRhLCBOVUxMLCAmcGktPmxpbmUsIHBpLT5wYXlsb2FkKSkKIAkJcmV0dXJuIGNhbGxiYWNrX2Vycm9yKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogcHJpbnQgYSBnaXRfZGlmZl9saXN0IHRvIGEgcHJpbnQgY2FsbGJhY2sgaW4gcmF3IG91dHB1dCBmb3JtYXQgKi8KLWludCBnaXRfZGlmZl9wcmludF9yYXcoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKLQlnaXRfZGlmZl9kYXRhX2NiIHByaW50X2NiLAotCXZvaWQgKnBheWxvYWQpCitzdGF0aWMgaW50IGRpZmZfcHJpbnRfb2lkX3JhbmdlKAorCWdpdF9idWYgKm91dCwgY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLCBpbnQgb2lkX3N0cmxlbikKIHsKLQlpbnQgZXJyb3I7Ci0JZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7Ci0JZGlmZl9wcmludF9pbmZvIHBpOwotCi0JaWYgKCEoZXJyb3IgPSBkaWZmX3ByaW50X2luZm9faW5pdCgmcGksICZidWYsIGRpZmYsIHByaW50X2NiLCBwYXlsb2FkKSkpCi0JCWVycm9yID0gZ2l0X2RpZmZfZm9yZWFjaChkaWZmLCBkaWZmX3ByaW50X29uZV9yYXcsIE5VTEwsIE5VTEwsICZwaSk7Ci0KLQlnaXRfYnVmX2ZyZWUoJmJ1Zik7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgZGlmZl9wcmludF9vaWRfcmFuZ2UoZGlmZl9wcmludF9pbmZvICpwaSwgY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhKQotewotCWdpdF9idWYgKm91dCA9IHBpLT5idWY7CiAJY2hhciBzdGFydF9vaWRbR0lUX09JRF9IRVhTWisxXSwgZW5kX29pZFtHSVRfT0lEX0hFWFNaKzFdOwogCi0JZ2l0X29pZF90b3N0cihzdGFydF9vaWQsIHBpLT5vaWRfc3RybGVuLCAmZGVsdGEtPm9sZF9maWxlLm9pZCk7Ci0JZ2l0X29pZF90b3N0cihlbmRfb2lkLCBwaS0+b2lkX3N0cmxlbiwgJmRlbHRhLT5uZXdfZmlsZS5vaWQpOworCWdpdF9vaWRfdG9zdHIoc3RhcnRfb2lkLCBvaWRfc3RybGVuLCAmZGVsdGEtPm9sZF9maWxlLm9pZCk7CisJZ2l0X29pZF90b3N0cihlbmRfb2lkLCBvaWRfc3RybGVuLCAmZGVsdGEtPm5ld19maWxlLm9pZCk7CiAKIAkvKiBUT0RPOiBNYXRjaCBnaXQgZGlmZiBtb3JlIGNsb3NlbHkgKi8KIAlpZiAoZGVsdGEtPm9sZF9maWxlLm1vZGUgPT0gZGVsdGEtPm5ld19maWxlLm1vZGUpIHsKQEAgLTIyOCwzNiArMjQ0LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGlmZl9wcmludF9wYXRjaF9maWxlKAotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwgZmxvYXQgcHJvZ3Jlc3MsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRpZmZfZGVsdGFfZm9ybWF0X3dpdGhfcGF0aHMoCisJZ2l0X2J1ZiAqb3V0LAorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKKwljb25zdCBjaGFyICpvbGRwZngsCisJY29uc3QgY2hhciAqbmV3cGZ4LAorCWNvbnN0IGNoYXIgKnRlbXBsYXRlKQogewotCWRpZmZfcHJpbnRfaW5mbyAqcGkgPSBkYXRhOwotCWNvbnN0IGNoYXIgKm9sZHBmeCA9IHBpLT5kaWZmID8gcGktPmRpZmYtPm9wdHMub2xkX3ByZWZpeCA6IE5VTEw7CiAJY29uc3QgY2hhciAqb2xkcGF0aCA9IGRlbHRhLT5vbGRfZmlsZS5wYXRoOwotCWNvbnN0IGNoYXIgKm5ld3BmeCA9IHBpLT5kaWZmID8gcGktPmRpZmYtPm9wdHMubmV3X3ByZWZpeCA6IE5VTEw7CiAJY29uc3QgY2hhciAqbmV3cGF0aCA9IGRlbHRhLT5uZXdfZmlsZS5wYXRoOwotCXVpbnQzMl90IG9wdHNfZmxhZ3MgPSBwaS0+ZGlmZiA/IHBpLT5kaWZmLT5vcHRzLmZsYWdzIDogR0lUX0RJRkZfTk9STUFMOwotCi0JR0lUX1VOVVNFRChwcm9ncmVzcyk7Ci0KLQlpZiAoU19JU0RJUihkZWx0YS0+bmV3X2ZpbGUubW9kZSkgfHwKLQkJZGVsdGEtPnN0YXR1cyA9PSBHSVRfREVMVEFfVU5NT0RJRklFRCB8fAotCQlkZWx0YS0+c3RhdHVzID09IEdJVF9ERUxUQV9JR05PUkVEIHx8Ci0JCShkZWx0YS0+c3RhdHVzID09IEdJVF9ERUxUQV9VTlRSQUNLRUQgJiYKLQkJIChvcHRzX2ZsYWdzICYgR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRURfQ09OVEVOVCkgPT0gMCkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFvbGRwZngpCi0JCW9sZHBmeCA9IERJRkZfT0xEX1BSRUZJWF9ERUZBVUxUOwotCWlmICghbmV3cGZ4KQotCQluZXdwZnggPSBESUZGX05FV19QUkVGSVhfREVGQVVMVDsKLQotCWdpdF9idWZfY2xlYXIocGktPmJ1Zik7Ci0JZ2l0X2J1Zl9wcmludGYocGktPmJ1ZiwgImRpZmYgLS1naXQgJXMlcyAlcyVzXG4iLAotCQlvbGRwZngsIGRlbHRhLT5vbGRfZmlsZS5wYXRoLCBuZXdwZngsIGRlbHRhLT5uZXdfZmlsZS5wYXRoKTsKLQotCWlmIChkaWZmX3ByaW50X29pZF9yYW5nZShwaSwgZGVsdGEpIDwgMCkKLQkJcmV0dXJuIC0xOwogCiAJaWYgKGdpdF9vaWRfaXN6ZXJvKCZkZWx0YS0+b2xkX2ZpbGUub2lkKSkgewogCQlvbGRwZnggPSAiIjsKQEAgLTI2OCwzMCArMjYzLDgzIEBACiAJCW5ld3BhdGggPSAiL2Rldi9udWxsIjsKIAl9CiAKLQlpZiAoKGRlbHRhLT5mbGFncyAmIEdJVF9ESUZGX0ZMQUdfQklOQVJZKSA9PSAwKSB7Ci0JCWdpdF9idWZfcHJpbnRmKHBpLT5idWYsICItLS0gJXMlc1xuIiwgb2xkcGZ4LCBvbGRwYXRoKTsKLQkJZ2l0X2J1Zl9wcmludGYocGktPmJ1ZiwgIisrKyAlcyVzXG4iLCBuZXdwZngsIG5ld3BhdGgpOwotCX0KKwlyZXR1cm4gZ2l0X2J1Zl9wcmludGYob3V0LCB0ZW1wbGF0ZSwgb2xkcGZ4LCBvbGRwYXRoLCBuZXdwZngsIG5ld3BhdGgpOworfQogCi0JaWYgKGdpdF9idWZfb29tKHBpLT5idWYpKQoraW50IGdpdF9kaWZmX2RlbHRhX19mb3JtYXRfZmlsZV9oZWFkZXIoCisJZ2l0X2J1ZiAqb3V0LAorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKKwljb25zdCBjaGFyICpvbGRwZngsCisJY29uc3QgY2hhciAqbmV3cGZ4LAorCWludCBvaWRfc3RybGVuKQoreworCWlmICghb2xkcGZ4KQorCQlvbGRwZnggPSBESUZGX09MRF9QUkVGSVhfREVGQVVMVDsKKwlpZiAoIW5ld3BmeCkKKwkJbmV3cGZ4ID0gRElGRl9ORVdfUFJFRklYX0RFRkFVTFQ7CisJaWYgKCFvaWRfc3RybGVuKQorCQlvaWRfc3RybGVuID0gR0lUX0FCQlJFVl9ERUZBVUxUICsgMTsKKworCWdpdF9idWZfY2xlYXIob3V0KTsKKworCWdpdF9idWZfcHJpbnRmKG91dCwgImRpZmYgLS1naXQgJXMlcyAlcyVzXG4iLAorCQlvbGRwZngsIGRlbHRhLT5vbGRfZmlsZS5wYXRoLCBuZXdwZngsIGRlbHRhLT5uZXdfZmlsZS5wYXRoKTsKKworCWlmIChkaWZmX3ByaW50X29pZF9yYW5nZShvdXQsIGRlbHRhLCBvaWRfc3RybGVuKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChwaS0+cHJpbnRfY2IoZGVsdGEsIE5VTEwsIEdJVF9ESUZGX0xJTkVfRklMRV9IRFIsCi0JCQlnaXRfYnVmX2NzdHIocGktPmJ1ZiksIGdpdF9idWZfbGVuKHBpLT5idWYpLCBwaS0+cGF5bG9hZCkpCisJaWYgKChkZWx0YS0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX0JJTkFSWSkgPT0gMCkKKwkJZGlmZl9kZWx0YV9mb3JtYXRfd2l0aF9wYXRocygKKwkJCW91dCwgZGVsdGEsIG9sZHBmeCwgbmV3cGZ4LCAiLS0tICVzJXNcbisrKyAlcyVzXG4iKTsKKworCXJldHVybiBnaXRfYnVmX29vbShvdXQpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGRpZmZfcHJpbnRfcGF0Y2hfZmlsZSgKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsIGZsb2F0IHByb2dyZXNzLCB2b2lkICpkYXRhKQoreworCWRpZmZfcHJpbnRfaW5mbyAqcGkgPSBkYXRhOworCWNvbnN0IGNoYXIgKm9sZHBmeCA9CisJCXBpLT5kaWZmID8gcGktPmRpZmYtPm9wdHMub2xkX3ByZWZpeCA6IERJRkZfT0xEX1BSRUZJWF9ERUZBVUxUOworCWNvbnN0IGNoYXIgKm5ld3BmeCA9CisJCXBpLT5kaWZmID8gcGktPmRpZmYtPm9wdHMubmV3X3ByZWZpeCA6IERJRkZfTkVXX1BSRUZJWF9ERUZBVUxUOworCisJR0lUX1VOVVNFRChwcm9ncmVzcyk7CisKKwlpZiAoU19JU0RJUihkZWx0YS0+bmV3X2ZpbGUubW9kZSkgfHwKKwkJZGVsdGEtPnN0YXR1cyA9PSBHSVRfREVMVEFfVU5NT0RJRklFRCB8fAorCQlkZWx0YS0+c3RhdHVzID09IEdJVF9ERUxUQV9JR05PUkVEIHx8CisJCShkZWx0YS0+c3RhdHVzID09IEdJVF9ERUxUQV9VTlRSQUNLRUQgJiYKKwkJIChwaS0+ZmxhZ3MgJiBHSVRfRElGRl9TSE9XX1VOVFJBQ0tFRF9DT05URU5UKSA9PSAwKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2l0X2RpZmZfZGVsdGFfX2Zvcm1hdF9maWxlX2hlYWRlcigKKwkJCXBpLT5idWYsIGRlbHRhLCBvbGRwZngsIG5ld3BmeCwgcGktPm9pZF9zdHJsZW4pIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcGktPmxpbmUub3JpZ2luICAgICAgPSBHSVRfRElGRl9MSU5FX0ZJTEVfSERSOworCXBpLT5saW5lLmNvbnRlbnQgICAgID0gZ2l0X2J1Zl9jc3RyKHBpLT5idWYpOworCXBpLT5saW5lLmNvbnRlbnRfbGVuID0gZ2l0X2J1Zl9sZW4ocGktPmJ1Zik7CisKKwlpZiAocGktPnByaW50X2NiKGRlbHRhLCBOVUxMLCAmcGktPmxpbmUsIHBpLT5wYXlsb2FkKSkKIAkJcmV0dXJuIGNhbGxiYWNrX2Vycm9yKCk7CiAKIAlpZiAoKGRlbHRhLT5mbGFncyAmIEdJVF9ESUZGX0ZMQUdfQklOQVJZKSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCWdpdF9idWZfY2xlYXIocGktPmJ1Zik7Ci0JZ2l0X2J1Zl9wcmludGYoCi0JCXBpLT5idWYsICJCaW5hcnkgZmlsZXMgJXMlcyBhbmQgJXMlcyBkaWZmZXJcbiIsCi0JCW9sZHBmeCwgb2xkcGF0aCwgbmV3cGZ4LCBuZXdwYXRoKTsKLQlpZiAoZ2l0X2J1Zl9vb20ocGktPmJ1ZikpCisKKwlpZiAoZGlmZl9kZWx0YV9mb3JtYXRfd2l0aF9wYXRocygKKwkJCXBpLT5idWYsIGRlbHRhLCBvbGRwZngsIG5ld3BmeCwKKwkJCSJCaW5hcnkgZmlsZXMgJXMlcyBhbmQgJXMlcyBkaWZmZXJcbiIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHBpLT5wcmludF9jYihkZWx0YSwgTlVMTCwgR0lUX0RJRkZfTElORV9CSU5BUlksCi0JCQlnaXRfYnVmX2NzdHIocGktPmJ1ZiksIGdpdF9idWZfbGVuKHBpLT5idWYpLCBwaS0+cGF5bG9hZCkpCisJcGktPmxpbmUub3JpZ2luICAgICAgPSBHSVRfRElGRl9MSU5FX0JJTkFSWTsKKwlwaS0+bGluZS5jb250ZW50ICAgICA9IGdpdF9idWZfY3N0cihwaS0+YnVmKTsKKwlwaS0+bGluZS5jb250ZW50X2xlbiA9IGdpdF9idWZfbGVuKHBpLT5idWYpOworCXBpLT5saW5lLm51bV9saW5lcyAgID0gMTsKKworCWlmIChwaS0+cHJpbnRfY2IoZGVsdGEsIE5VTEwsICZwaS0+bGluZSwgcGktPnBheWxvYWQpKQogCQlyZXR1cm4gY2FsbGJhY2tfZXJyb3IoKTsKIAogCXJldHVybiAwOwpAQCAtMjk5LDkgKzM0Nyw3IEBACiAKIHN0YXRpYyBpbnQgZGlmZl9wcmludF9wYXRjaF9odW5rKAogCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkLAotCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyLAotCWNvbnN0IGNoYXIgKmhlYWRlciwKLQlzaXplX3QgaGVhZGVyX2xlbiwKKwljb25zdCBnaXRfZGlmZl9odW5rICpoLAogCXZvaWQgKmRhdGEpCiB7CiAJZGlmZl9wcmludF9pbmZvICpwaSA9IGRhdGE7CkBAIC0zMDksMTIgKzM1NSwxMSBAQAogCWlmIChTX0lTRElSKGQtPm5ld19maWxlLm1vZGUpKQogCQlyZXR1cm4gMDsKIAotCWdpdF9idWZfY2xlYXIocGktPmJ1Zik7Ci0JaWYgKGdpdF9idWZfcHJpbnRmKHBpLT5idWYsICIlLipzIiwgKGludCloZWFkZXJfbGVuLCBoZWFkZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCXBpLT5saW5lLm9yaWdpbiAgICAgID0gR0lUX0RJRkZfTElORV9IVU5LX0hEUjsKKwlwaS0+bGluZS5jb250ZW50ICAgICA9IGgtPmhlYWRlcjsKKwlwaS0+bGluZS5jb250ZW50X2xlbiA9IGgtPmhlYWRlcl9sZW47CiAKLQlpZiAocGktPnByaW50X2NiKGQsIHIsIEdJVF9ESUZGX0xJTkVfSFVOS19IRFIsCi0JCQlnaXRfYnVmX2NzdHIocGktPmJ1ZiksIGdpdF9idWZfbGVuKHBpLT5idWYpLCBwaS0+cGF5bG9hZCkpCisJaWYgKHBpLT5wcmludF9jYihkLCBoLCAmcGktPmxpbmUsIHBpLT5wYXlsb2FkKSkKIAkJcmV0dXJuIGNhbGxiYWNrX2Vycm9yKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTMyMiwxMCArMzY3LDggQEAKIAogc3RhdGljIGludCBkaWZmX3ByaW50X3BhdGNoX2xpbmUoCiAJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAotCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyYW5nZSwKLQljaGFyIGxpbmVfb3JpZ2luLCAvKiBHSVRfRElGRl9MSU5FIHZhbHVlIGZyb20gYWJvdmUgKi8KLQljb25zdCBjaGFyICpjb250ZW50LAotCXNpemVfdCBjb250ZW50X2xlbiwKKwljb25zdCBnaXRfZGlmZl9odW5rICpodW5rLAorCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmUsCiAJdm9pZCAqZGF0YSkKIHsKIAlkaWZmX3ByaW50X2luZm8gKnBpID0gZGF0YTsKQEAgLTMzMyw0OSArMzc2LDYzIEBACiAJaWYgKFNfSVNESVIoZGVsdGEtPm5ld19maWxlLm1vZGUpKQogCQlyZXR1cm4gMDsKIAotCWdpdF9idWZfY2xlYXIocGktPmJ1Zik7Ci0KLQlpZiAobGluZV9vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9BRERJVElPTiB8fAotCQlsaW5lX29yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0RFTEVUSU9OIHx8Ci0JCWxpbmVfb3JpZ2luID09IEdJVF9ESUZGX0xJTkVfQ09OVEVYVCkKLQkJZ2l0X2J1Zl9wcmludGYocGktPmJ1ZiwgIiVjJS4qcyIsIGxpbmVfb3JpZ2luLCAoaW50KWNvbnRlbnRfbGVuLCBjb250ZW50KTsKLQllbHNlIGlmIChjb250ZW50X2xlbiA+IDApCi0JCWdpdF9idWZfcHJpbnRmKHBpLT5idWYsICIlLipzIiwgKGludCljb250ZW50X2xlbiwgY29udGVudCk7Ci0KLQlpZiAoZ2l0X2J1Zl9vb20ocGktPmJ1ZikpCi0JCXJldHVybiAtMTsKLQotCWlmIChwaS0+cHJpbnRfY2IoZGVsdGEsIHJhbmdlLCBsaW5lX29yaWdpbiwKLQkJCWdpdF9idWZfY3N0cihwaS0+YnVmKSwgZ2l0X2J1Zl9sZW4ocGktPmJ1ZiksIHBpLT5wYXlsb2FkKSkKKwlpZiAocGktPnByaW50X2NiKGRlbHRhLCBodW5rLCBsaW5lLCBwaS0+cGF5bG9hZCkpCiAJCXJldHVybiBjYWxsYmFja19lcnJvcigpOwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIHByaW50IGEgZ2l0X2RpZmZfbGlzdCB0byBhbiBvdXRwdXQgY2FsbGJhY2sgaW4gcGF0Y2ggZm9ybWF0ICovCi1pbnQgZ2l0X2RpZmZfcHJpbnRfcGF0Y2goCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKLQlnaXRfZGlmZl9kYXRhX2NiIHByaW50X2NiLAorLyogcHJpbnQgYSBnaXRfZGlmZiB0byBhbiBvdXRwdXQgY2FsbGJhY2sgKi8KK2ludCBnaXRfZGlmZl9wcmludCgKKwlnaXRfZGlmZiAqZGlmZiwKKwlnaXRfZGlmZl9mb3JtYXRfdCBmb3JtYXQsCisJZ2l0X2RpZmZfbGluZV9jYiBwcmludF9jYiwKIAl2b2lkICpwYXlsb2FkKQogewogCWludCBlcnJvcjsKIAlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKIAlkaWZmX3ByaW50X2luZm8gcGk7CisJZ2l0X2RpZmZfZmlsZV9jYiBwcmludF9maWxlID0gTlVMTDsKKwlnaXRfZGlmZl9odW5rX2NiIHByaW50X2h1bmsgPSBOVUxMOworCWdpdF9kaWZmX2xpbmVfY2IgcHJpbnRfbGluZSA9IE5VTEw7CiAKLQlpZiAoIShlcnJvciA9IGRpZmZfcHJpbnRfaW5mb19pbml0KCZwaSwgJmJ1ZiwgZGlmZiwgcHJpbnRfY2IsIHBheWxvYWQpKSkKKwlzd2l0Y2ggKGZvcm1hdCkgeworCWNhc2UgR0lUX0RJRkZfRk9STUFUX1BBVENIOgorCQlwcmludF9maWxlID0gZGlmZl9wcmludF9wYXRjaF9maWxlOworCQlwcmludF9odW5rID0gZGlmZl9wcmludF9wYXRjaF9odW5rOworCQlwcmludF9saW5lID0gZGlmZl9wcmludF9wYXRjaF9saW5lOworCQlicmVhazsKKwljYXNlIEdJVF9ESUZGX0ZPUk1BVF9QQVRDSF9IRUFERVI6CisJCXByaW50X2ZpbGUgPSBkaWZmX3ByaW50X3BhdGNoX2ZpbGU7CisJCWJyZWFrOworCWNhc2UgR0lUX0RJRkZfRk9STUFUX1JBVzoKKwkJcHJpbnRfZmlsZSA9IGRpZmZfcHJpbnRfb25lX3JhdzsKKwkJYnJlYWs7CisJY2FzZSBHSVRfRElGRl9GT1JNQVRfTkFNRV9PTkxZOgorCQlwcmludF9maWxlID0gZGlmZl9wcmludF9vbmVfbmFtZV9vbmx5OworCQlicmVhazsKKwljYXNlIEdJVF9ESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUzoKKwkJcHJpbnRfZmlsZSA9IGRpZmZfcHJpbnRfb25lX25hbWVfc3RhdHVzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiVW5rbm93biBkaWZmIG91dHB1dCBmb3JtYXQgKCVkKSIsIGZvcm1hdCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIShlcnJvciA9IGRpZmZfcHJpbnRfaW5mb19pbml0KAorCQkJJnBpLCAmYnVmLCBkaWZmLCBmb3JtYXQsIHByaW50X2NiLCBwYXlsb2FkKSkpCiAJCWVycm9yID0gZ2l0X2RpZmZfZm9yZWFjaCgKLQkJCWRpZmYsIGRpZmZfcHJpbnRfcGF0Y2hfZmlsZSwgZGlmZl9wcmludF9wYXRjaF9odW5rLAotCQkJZGlmZl9wcmludF9wYXRjaF9saW5lLCAmcGkpOworCQkJZGlmZiwgcHJpbnRfZmlsZSwgcHJpbnRfaHVuaywgcHJpbnRfbGluZSwgJnBpKTsKIAogCWdpdF9idWZfZnJlZSgmYnVmKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAotLyogcHJpbnQgYSBnaXRfZGlmZl9wYXRjaCB0byBhbiBvdXRwdXQgY2FsbGJhY2sgKi8KLWludCBnaXRfZGlmZl9wYXRjaF9wcmludCgKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2gsCi0JZ2l0X2RpZmZfZGF0YV9jYiBwcmludF9jYiwKKy8qIHByaW50IGEgZ2l0X3BhdGNoIHRvIGFuIG91dHB1dCBjYWxsYmFjayAqLworaW50IGdpdF9wYXRjaF9wcmludCgKKwlnaXRfcGF0Y2ggKnBhdGNoLAorCWdpdF9kaWZmX2xpbmVfY2IgcHJpbnRfY2IsCiAJdm9pZCAqcGF5bG9hZCkKIHsKIAlpbnQgZXJyb3I7CkBAIC0zODUsOCArNDQyLDkgQEAKIAlhc3NlcnQocGF0Y2ggJiYgcHJpbnRfY2IpOwogCiAJaWYgKCEoZXJyb3IgPSBkaWZmX3ByaW50X2luZm9faW5pdCgKLQkJCSZwaSwgJnRlbXAsIGdpdF9kaWZmX3BhdGNoX19kaWZmKHBhdGNoKSwgcHJpbnRfY2IsIHBheWxvYWQpKSkKLQkJZXJyb3IgPSBnaXRfZGlmZl9wYXRjaF9faW52b2tlX2NhbGxiYWNrcygKKwkJCSZwaSwgJnRlbXAsIGdpdF9wYXRjaF9fZGlmZihwYXRjaCksCisJCQlHSVRfRElGRl9GT1JNQVRfUEFUQ0gsIHByaW50X2NiLCBwYXlsb2FkKSkpCisJCWVycm9yID0gZ2l0X3BhdGNoX19pbnZva2VfY2FsbGJhY2tzKAogCQkJcGF0Y2gsIGRpZmZfcHJpbnRfcGF0Y2hfZmlsZSwgZGlmZl9wcmludF9wYXRjaF9odW5rLAogCQkJZGlmZl9wcmludF9wYXRjaF9saW5lLCAmcGkpOwogCkBAIC0zOTcsMjYgKzQ1NSwzMCBAQAogCiBzdGF0aWMgaW50IGRpZmZfcHJpbnRfdG9fYnVmZmVyX2NiKAogCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKLQljb25zdCBnaXRfZGlmZl9yYW5nZSAqcmFuZ2UsCi0JY2hhciBsaW5lX29yaWdpbiwKLQljb25zdCBjaGFyICpjb250ZW50LAotCXNpemVfdCBjb250ZW50X2xlbiwKKwljb25zdCBnaXRfZGlmZl9odW5rICpodW5rLAorCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmUsCiAJdm9pZCAqcGF5bG9hZCkKIHsKIAlnaXRfYnVmICpvdXRwdXQgPSBwYXlsb2FkOwotCUdJVF9VTlVTRUQoZGVsdGEpOyBHSVRfVU5VU0VEKHJhbmdlKTsgR0lUX1VOVVNFRChsaW5lX29yaWdpbik7Ci0JcmV0dXJuIGdpdF9idWZfcHV0KG91dHB1dCwgY29udGVudCwgY29udGVudF9sZW4pOworCUdJVF9VTlVTRUQoZGVsdGEpOyBHSVRfVU5VU0VEKGh1bmspOworCisJaWYgKGxpbmUtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0FERElUSU9OIHx8CisJCWxpbmUtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0RFTEVUSU9OIHx8CisJCWxpbmUtPm9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0NPTlRFWFQpCisJCWdpdF9idWZfcHV0YyhvdXRwdXQsIGxpbmUtPm9yaWdpbik7CisKKwlyZXR1cm4gZ2l0X2J1Zl9wdXQob3V0cHV0LCBsaW5lLT5jb250ZW50LCBsaW5lLT5jb250ZW50X2xlbik7CiB9CiAKLS8qIHByaW50IGEgZ2l0X2RpZmZfcGF0Y2ggdG8gYSBzdHJpbmcgYnVmZmVyICovCi1pbnQgZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKAorLyogcHJpbnQgYSBnaXRfcGF0Y2ggdG8gYSBzdHJpbmcgYnVmZmVyICovCitpbnQgZ2l0X3BhdGNoX3RvX3N0cigKIAljaGFyICoqc3RyaW5nLAotCWdpdF9kaWZmX3BhdGNoICpwYXRjaCkKKwlnaXRfcGF0Y2ggKnBhdGNoKQogewogCWludCBlcnJvcjsKIAlnaXRfYnVmIG91dHB1dCA9IEdJVF9CVUZfSU5JVDsKIAotCWVycm9yID0gZ2l0X2RpZmZfcGF0Y2hfcHJpbnQocGF0Y2gsIGRpZmZfcHJpbnRfdG9fYnVmZmVyX2NiLCAmb3V0cHV0KTsKKwllcnJvciA9IGdpdF9wYXRjaF9wcmludChwYXRjaCwgZGlmZl9wcmludF90b19idWZmZXJfY2IsICZvdXRwdXQpOwogCiAJLyogR0lUX0VVU0VSIG1lYW5zIGdpdF9idWZfcHV0IGluIHByaW50X3RvX2J1ZmZlcl9jYiByZXR1cm5lZCAtMSwKIAkgKiBtZWFuaW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwgc28ganVzdCBtYXAgdG8gLTEuLi4KZGlmZiAtLWdpdCBhL3NyYy9kaWZmX3Rmb3JtLmMgYi9zcmMvZGlmZl90Zm9ybS5jCmluZGV4IDhjNGU5NmUuLjI4YTljYzcgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmX3Rmb3JtLmMKKysrIGIvc3JjL2RpZmZfdGZvcm0uYwpAQCAtNDYsNyArNDYsOSBAQAogfQogCiBzdGF0aWMgZ2l0X2RpZmZfZGVsdGEgKmRpZmZfZGVsdGFfX21lcmdlX2xpa2VfY2dpdCgKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqYSwgY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmIsIGdpdF9wb29sICpwb29sKQorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICphLAorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpiLAorCWdpdF9wb29sICpwb29sKQogewogCWdpdF9kaWZmX2RlbHRhICpkdXA7CiAKQEAgLTk2LDE1ICs5OCw0NiBAQAogCXJldHVybiBkdXA7CiB9CiAKLWludCBnaXRfZGlmZl9tZXJnZSgKLQlnaXRfZGlmZl9saXN0ICpvbnRvLAotCWNvbnN0IGdpdF9kaWZmX2xpc3QgKmZyb20pCitzdGF0aWMgZ2l0X2RpZmZfZGVsdGEgKmRpZmZfZGVsdGFfX21lcmdlX2xpa2VfY2dpdF9yZXZlcnNlZCgKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqYSwKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqYiwKKwlnaXRfcG9vbCAqcG9vbCkKK3sKKwlnaXRfZGlmZl9kZWx0YSAqZHVwOworCisJLyogcmV2ZXJzZWQgdmVyc2lvbiBvZiBhYm92ZSBsb2dpYyAqLworCisJaWYgKGEtPnN0YXR1cyA9PSBHSVRfREVMVEFfVU5NT0RJRklFRCkKKwkJcmV0dXJuIGRpZmZfZGVsdGFfX2R1cChiLCBwb29sKTsKKworCWlmICgoZHVwID0gZGlmZl9kZWx0YV9fZHVwKGEsIHBvb2wpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChiLT5zdGF0dXMgPT0gR0lUX0RFTFRBX1VOTU9ESUZJRUQgfHwgYi0+c3RhdHVzID09IEdJVF9ERUxUQV9VTlRSQUNLRUQpCisJCXJldHVybiBkdXA7CisKKwlpZiAoZHVwLT5zdGF0dXMgPT0gR0lUX0RFTFRBX0RFTEVURUQpIHsKKwkJaWYgKGItPnN0YXR1cyA9PSBHSVRfREVMVEFfQURERUQpCisJCQlkdXAtPnN0YXR1cyA9IEdJVF9ERUxUQV9VTk1PRElGSUVEOworCX0gZWxzZSB7CisJCWR1cC0+c3RhdHVzID0gYi0+c3RhdHVzOworCX0KKworCWdpdF9vaWRfY3B5KCZkdXAtPm9sZF9maWxlLm9pZCwgJmItPm9sZF9maWxlLm9pZCk7CisJZHVwLT5vbGRfZmlsZS5tb2RlICA9IGItPm9sZF9maWxlLm1vZGU7CisJZHVwLT5vbGRfZmlsZS5zaXplICA9IGItPm9sZF9maWxlLnNpemU7CisJZHVwLT5vbGRfZmlsZS5mbGFncyA9IGItPm9sZF9maWxlLmZsYWdzOworCisJcmV0dXJuIGR1cDsKK30KKworaW50IGdpdF9kaWZmX21lcmdlKGdpdF9kaWZmICpvbnRvLCBjb25zdCBnaXRfZGlmZiAqZnJvbSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWdpdF9wb29sIG9udG9fcG9vbDsKIAlnaXRfdmVjdG9yIG9udG9fbmV3OwogCWdpdF9kaWZmX2RlbHRhICpkZWx0YTsKLQlib29sIGlnbm9yZV9jYXNlID0gZmFsc2U7CisJYm9vbCBpZ25vcmVfY2FzZSwgcmV2ZXJzZWQ7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKIAlhc3NlcnQob250byAmJiBmcm9tKTsKQEAgLTExMiwyNiArMTQ1LDI2IEBACiAJaWYgKCFmcm9tLT5kZWx0YXMubGVuZ3RoKQogCQlyZXR1cm4gMDsKIAorCWlnbm9yZV9jYXNlID0gKChvbnRvLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfSUdOT1JFX0NBU0UpICE9IDApOworCXJldmVyc2VkICAgID0gKChvbnRvLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfUkVWRVJTRSkgIT0gMCk7CisKKwlpZiAoaWdub3JlX2Nhc2UgIT0gKChmcm9tLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfSUdOT1JFX0NBU0UpICE9IDApIHx8CisJCXJldmVyc2VkICAgICE9ICgoZnJvbS0+b3B0cy5mbGFncyAmIEdJVF9ESUZGX1JFVkVSU0UpICE9IDApKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsCisJCQkiQXR0ZW1wdCB0byBtZXJnZSBkaWZmcyBjcmVhdGVkIHdpdGggY29uZmxpY3Rpbmcgb3B0aW9ucyIpOworCQlyZXR1cm4gLTE7CisJfQorCiAJaWYgKGdpdF92ZWN0b3JfaW5pdCgKIAkJCSZvbnRvX25ldywgb250by0+ZGVsdGFzLmxlbmd0aCwgZ2l0X2RpZmZfZGVsdGFfX2NtcCkgPCAwIHx8CiAJCWdpdF9wb29sX2luaXQoJm9udG9fcG9vbCwgMSwgMCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoKG9udG8tPm9wdHMuZmxhZ3MgJiBHSVRfRElGRl9ERUxUQVNfQVJFX0lDQVNFKSAhPSAwIHx8Ci0JCShmcm9tLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfREVMVEFTX0FSRV9JQ0FTRSkgIT0gMCkKLQl7Ci0JCWlnbm9yZV9jYXNlID0gdHJ1ZTsKLQotCQkvKiBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIG1lcmdpbmcgZGlmZiBsaXN0cyB0aGF0Ci0JCSAqIGFyZSBzb3J0ZWQgaWRlbnRpY2FsbHkuICovCi0JCWFzc2VydCgob250by0+b3B0cy5mbGFncyAmIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpICE9IDAgJiYKLQkJCQkoZnJvbS0+b3B0cy5mbGFncyAmIEdJVF9ESUZGX0RFTFRBU19BUkVfSUNBU0UpICE9IDApOwotCX0KLQogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgb250by0+ZGVsdGFzLmxlbmd0aCB8fCBqIDwgZnJvbS0+ZGVsdGFzLmxlbmd0aDsgKSB7CiAJCWdpdF9kaWZmX2RlbHRhICpvID0gR0lUX1ZFQ1RPUl9HRVQoJm9udG8tPmRlbHRhcywgaSk7CiAJCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpmID0gR0lUX1ZFQ1RPUl9HRVQoJmZyb20tPmRlbHRhcywgaik7Ci0JCWludCBjbXAgPSAhZiA/IC0xIDogIW8gPyAxIDogU1RSQ01QX0NBU0VTRUxFQ1QoaWdub3JlX2Nhc2UsIG8tPm9sZF9maWxlLnBhdGgsIGYtPm9sZF9maWxlLnBhdGgpOworCQlpbnQgY21wID0gIWYgPyAtMSA6ICFvID8gMSA6CisJCQlTVFJDTVBfQ0FTRVNFTEVDVChpZ25vcmVfY2FzZSwgby0+b2xkX2ZpbGUucGF0aCwgZi0+b2xkX2ZpbGUucGF0aCk7CiAKIAkJaWYgKGNtcCA8IDApIHsKIAkJCWRlbHRhID0gZGlmZl9kZWx0YV9fZHVwKG8sICZvbnRvX3Bvb2wpOwpAQCAtMTQwLDcgKzE3Myw5IEBACiAJCQlkZWx0YSA9IGRpZmZfZGVsdGFfX2R1cChmLCAmb250b19wb29sKTsKIAkJCWorKzsKIAkJfSBlbHNlIHsKLQkJCWRlbHRhID0gZGlmZl9kZWx0YV9fbWVyZ2VfbGlrZV9jZ2l0KG8sIGYsICZvbnRvX3Bvb2wpOworCQkJZGVsdGEgPSByZXZlcnNlZCA/CisJCQkJZGlmZl9kZWx0YV9fbWVyZ2VfbGlrZV9jZ2l0X3JldmVyc2VkKG8sIGYsICZvbnRvX3Bvb2wpIDoKKwkJCQlkaWZmX2RlbHRhX19tZXJnZV9saWtlX2NnaXQobywgZiwgJm9udG9fcG9vbCk7CiAJCQlpKys7CiAJCQlqKys7CiAJCX0KQEAgLTE2MCw3ICsxOTUsMTEgQEAKIAlpZiAoIWVycm9yKSB7CiAJCWdpdF92ZWN0b3Jfc3dhcCgmb250by0+ZGVsdGFzLCAmb250b19uZXcpOwogCQlnaXRfcG9vbF9zd2FwKCZvbnRvLT5wb29sLCAmb250b19wb29sKTsKLQkJb250by0+bmV3X3NyYyA9IGZyb20tPm5ld19zcmM7CisKKwkJaWYgKChvbnRvLT5vcHRzLmZsYWdzICYgR0lUX0RJRkZfUkVWRVJTRSkgIT0gMCkKKwkJCW9udG8tPm9sZF9zcmMgPSBmcm9tLT5vbGRfc3JjOworCQllbHNlCisJCQlvbnRvLT5uZXdfc3JjID0gZnJvbS0+bmV3X3NyYzsKIAogCQkvKiBwcmVmaXggc3RyaW5ncyBhbHNvIGNvbWUgZnJvbSBvbGQgcG9vbCwgc28gcmVjcmVhdGUgdGhvc2UuKi8KIAkJb250by0+b3B0cy5vbGRfcHJlZml4ID0KQEAgLTIzMCw5ICsyNjksOSBAQAogI2RlZmluZSBERUZBVUxUX1JFTkFNRV9MSU1JVCAyMDAKIAogc3RhdGljIGludCBub3JtYWxpemVfZmluZF9vcHRzKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJZ2l0X2RpZmZfZmluZF9vcHRpb25zICpvcHRzLAotCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyAqZ2l2ZW4pCisJY29uc3QgZ2l0X2RpZmZfZmluZF9vcHRpb25zICpnaXZlbikKIHsKIAlnaXRfY29uZmlnICpjZmcgPSBOVUxMOwogCkBAIC0zMjgsNyArMzY3LDcgQEAKIH0KIAogc3RhdGljIGludCBhcHBseV9zcGxpdHNfYW5kX2RlbGV0ZXMoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwgc2l6ZV90IGV4cGVjdGVkX3NpemUsIGJvb2wgYWN0dWFsbHlfc3BsaXQpCisJZ2l0X2RpZmYgKmRpZmYsIHNpemVfdCBleHBlY3RlZF9zaXplLCBib29sIGFjdHVhbGx5X3NwbGl0KQogewogCWdpdF92ZWN0b3Igb250byA9IEdJVF9WRUNUT1JfSU5JVDsKIAlzaXplX3QgaTsKQEAgLTM1MCw2ICszODksNyBAQAogCQkJCWdvdG8gb25fZXJyb3I7CiAKIAkJCWRlbGV0ZWQtPnN0YXR1cyA9IEdJVF9ERUxUQV9ERUxFVEVEOworCQkJZGVsZXRlZC0+bmZpbGVzID0gMTsKIAkJCW1lbXNldCgmZGVsZXRlZC0+bmV3X2ZpbGUsIDAsIHNpemVvZihkZWxldGVkLT5uZXdfZmlsZSkpOwogCQkJZGVsZXRlZC0+bmV3X2ZpbGUucGF0aCA9IGRlbGV0ZWQtPm9sZF9maWxlLnBhdGg7CiAJCQlkZWxldGVkLT5uZXdfZmlsZS5mbGFncyB8PSBHSVRfRElGRl9GTEFHX1ZBTElEX09JRDsKQEAgLTM2MSw2ICs0MDEsNyBAQAogCQkJCWRlbHRhLT5zdGF0dXMgPSBHSVRfREVMVEFfVU5UUkFDS0VEOwogCQkJZWxzZQogCQkJCWRlbHRhLT5zdGF0dXMgPSBHSVRfREVMVEFfQURERUQ7CisJCQlkZWx0YS0+bmZpbGVzID0gMTsKIAkJCW1lbXNldCgmZGVsdGEtPm9sZF9maWxlLCAwLCBzaXplb2YoZGVsdGEtPm9sZF9maWxlKSk7CiAJCQlkZWx0YS0+b2xkX2ZpbGUucGF0aCA9IGRlbHRhLT5uZXdfZmlsZS5wYXRoOwogCQkJZGVsdGEtPm9sZF9maWxlLmZsYWdzIHw9IEdJVF9ESUZGX0ZMQUdfVkFMSURfT0lEOwpAQCAtNDAyLDYzICs0NDMsMTA1IEBACiAJcmV0dXJuIC0xOwogfQogCi1HSVRfSU5MSU5FKGdpdF9kaWZmX2ZpbGUgKikgc2ltaWxhcml0eV9nZXRfZmlsZShnaXRfZGlmZl9saXN0ICpkaWZmLCBzaXplX3QgaWR4KQorR0lUX0lOTElORShnaXRfZGlmZl9maWxlICopIHNpbWlsYXJpdHlfZ2V0X2ZpbGUoZ2l0X2RpZmYgKmRpZmYsIHNpemVfdCBpZHgpCiB7CiAJZ2l0X2RpZmZfZGVsdGEgKmRlbHRhID0gZ2l0X3ZlY3Rvcl9nZXQoJmRpZmYtPmRlbHRhcywgaWR4IC8gMik7CiAJcmV0dXJuIChpZHggJiAxKSA/ICZkZWx0YS0+bmV3X2ZpbGUgOiAmZGVsdGEtPm9sZF9maWxlOwogfQogCi1zdGF0aWMgaW50IHNpbWlsYXJpdHlfY2FsYygKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAordHlwZWRlZiBzdHJ1Y3QgeworCXNpemVfdCBpZHg7CisJZ2l0X2l0ZXJhdG9yX3R5cGVfdCBzcmM7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJZ2l0X2RpZmZfZmlsZSAqZmlsZTsKKwlnaXRfYnVmIGRhdGE7CisJZ2l0X29kYl9vYmplY3QgKm9kYl9vYmo7CisJZ2l0X2Jsb2IgKmJsb2I7Cit9IHNpbWlsYXJpdHlfaW5mbzsKKworc3RhdGljIGludCBzaW1pbGFyaXR5X2luaXQoCisJc2ltaWxhcml0eV9pbmZvICppbmZvLCBnaXRfZGlmZiAqZGlmZiwgc2l6ZV90IGZpbGVfaWR4KQoreworCWluZm8tPmlkeCAgPSBmaWxlX2lkeDsKKwlpbmZvLT5zcmMgID0gKGZpbGVfaWR4ICYgMSkgPyBkaWZmLT5uZXdfc3JjIDogZGlmZi0+b2xkX3NyYzsKKwlpbmZvLT5yZXBvID0gZGlmZi0+cmVwbzsKKwlpbmZvLT5maWxlID0gc2ltaWxhcml0eV9nZXRfZmlsZShkaWZmLCBmaWxlX2lkeCk7CisJaW5mby0+b2RiX29iaiA9IE5VTEw7CisJaW5mby0+YmxvYiA9IE5VTEw7CisJZ2l0X2J1Zl9pbml0KCZpbmZvLT5kYXRhLCAwKTsKKworCWlmIChpbmZvLT5maWxlLT5zaXplID4gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ2l0X2RpZmZfZmlsZV9fcmVzb2x2ZV96ZXJvX3NpemUoCisJCWluZm8tPmZpbGUsICZpbmZvLT5vZGJfb2JqLCBpbmZvLT5yZXBvKTsKK30KKworc3RhdGljIGludCBzaW1pbGFyaXR5X3NpZygKKwlzaW1pbGFyaXR5X2luZm8gKmluZm8sCiAJY29uc3QgZ2l0X2RpZmZfZmluZF9vcHRpb25zICpvcHRzLAotCXNpemVfdCBmaWxlX2lkeCwKIAl2b2lkICoqY2FjaGUpCiB7CiAJaW50IGVycm9yID0gMDsKLQlnaXRfZGlmZl9maWxlICpmaWxlID0gc2ltaWxhcml0eV9nZXRfZmlsZShkaWZmLCBmaWxlX2lkeCk7Ci0JZ2l0X2l0ZXJhdG9yX3R5cGVfdCBzcmMgPSAoZmlsZV9pZHggJiAxKSA/IGRpZmYtPm5ld19zcmMgOiBkaWZmLT5vbGRfc3JjOworCWdpdF9kaWZmX2ZpbGUgKmZpbGUgPSBpbmZvLT5maWxlOwogCi0JaWYgKHNyYyA9PSBHSVRfSVRFUkFUT1JfVFlQRV9XT1JLRElSKSB7IC8qIGNvbXB1dGUgaGFzaHNpZyBmcm9tIGZpbGUgKi8KLQkJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOwotCi0JCS8qIFRPRE86IGFwcGx5IHdkLXRvLW9kYiBmaWx0ZXJzIHRvIGZpbGUgZGF0YSBpZiBuZWNlc3NhcnkgKi8KLQorCWlmIChpbmZvLT5zcmMgPT0gR0lUX0lURVJBVE9SX1RZUEVfV09SS0RJUikgewogCQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgKLQkJCQkgJnBhdGgsIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoZGlmZi0+cmVwbyksIGZpbGUtPnBhdGgpKSA8IDApCisJCQkmaW5mby0+ZGF0YSwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihpbmZvLT5yZXBvKSwgZmlsZS0+cGF0aCkpIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKIAogCQkvKiBpZiBwYXRoIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSwganVzdCBza2lwIHRoaXMgaXRlbSAqLwotCQlpZiAoZ2l0X3BhdGhfaXNmaWxlKHBhdGgucHRyKSkKLQkJCWVycm9yID0gb3B0cy0+bWV0cmljLT5maWxlX3NpZ25hdHVyZSgKLQkJCQkmY2FjaGVbZmlsZV9pZHhdLCBmaWxlLCBwYXRoLnB0ciwgb3B0cy0+bWV0cmljLT5wYXlsb2FkKTsKKwkJaWYgKCFnaXRfcGF0aF9pc2ZpbGUoaW5mby0+ZGF0YS5wdHIpKQorCQkJcmV0dXJuIDA7CiAKLQkJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKLQl9IGVsc2UgeyAvKiBjb21wdXRlIGhhc2hzaWcgZnJvbSBibG9iIGJ1ZmZlciAqLwotCQlnaXRfYmxvYiAqYmxvYiA9IE5VTEw7Ci0JCWdpdF9vZmZfdCBibG9ic2l6ZTsKKwkJLyogVE9ETzogYXBwbHkgd2QtdG8tb2RiIGZpbHRlcnMgdG8gZmlsZSBkYXRhIGlmIG5lY2Vzc2FyeSAqLwogCi0JCS8qIFRPRE86IGFkZCBtYXggc2l6ZSB0aHJlc2hvbGQgYSBsYSBkaWZmPyAqLworCQllcnJvciA9IG9wdHMtPm1ldHJpYy0+ZmlsZV9zaWduYXR1cmUoCisJCQkmY2FjaGVbaW5mby0+aWR4XSwgaW5mby0+ZmlsZSwKKwkJCWluZm8tPmRhdGEucHRyLCBvcHRzLT5tZXRyaWMtPnBheWxvYWQpOworCX0gZWxzZSB7CisJCS8qIGlmIHdlIGRpZG4ndCBpbml0aWFsbHkga25vdyB0aGUgc2l6ZSwgd2UgbWlnaHQgaGF2ZSBhbiBvZGJfb2JqCisJCSAqIGFyb3VuZCBmcm9tIGVhcmxpZXIsIHNvIGNvbnZlcnQgdGhhdCwgb3RoZXJ3aXNlIGxvYWQgdGhlIGJsb2Igbm93CisJCSAqLworCQlpZiAoaW5mby0+b2RiX29iaiAhPSBOVUxMKQorCQkJZXJyb3IgPSBnaXRfb2JqZWN0X19mcm9tX29kYl9vYmplY3QoCisJCQkJKGdpdF9vYmplY3QgKiopJmluZm8tPmJsb2IsIGluZm8tPnJlcG8sCisJCQkJaW5mby0+b2RiX29iaiwgR0lUX09CSl9CTE9CKTsKKwkJZWxzZQorCQkJZXJyb3IgPSBnaXRfYmxvYl9sb29rdXAoJmluZm8tPmJsb2IsIGluZm8tPnJlcG8sICZmaWxlLT5vaWQpOwogCi0JCWlmIChnaXRfYmxvYl9sb29rdXAoJmJsb2IsIGRpZmYtPnJlcG8sICZmaWxlLT5vaWQpIDwgMCkgeworCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQkvKiBpZiBsb29rdXAgZmFpbHMsIGp1c3Qgc2tpcCB0aGlzIGl0ZW0gaW4gc2ltaWxhcml0eSBjYWxjICovCiAJCQlnaXRlcnJfY2xlYXIoKTsKLQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJc2l6ZV90IHN6OworCisJCQkvKiBpbmRleCBzaXplIG1heSBub3QgYmUgYWN0dWFsIGJsb2Igc2l6ZSBpZiBmaWx0ZXJlZCAqLworCQkJaWYgKGZpbGUtPnNpemUgIT0gZ2l0X2Jsb2JfcmF3c2l6ZShpbmZvLT5ibG9iKSkKKwkJCQlmaWxlLT5zaXplID0gZ2l0X2Jsb2JfcmF3c2l6ZShpbmZvLT5ibG9iKTsKKworCQkJc3ogPSAoc2l6ZV90KShnaXRfX2lzX3NpemV0KGZpbGUtPnNpemUpID8gZmlsZS0+c2l6ZSA6IC0xKTsKKworCQkJZXJyb3IgPSBvcHRzLT5tZXRyaWMtPmJ1ZmZlcl9zaWduYXR1cmUoCisJCQkJJmNhY2hlW2luZm8tPmlkeF0sIGluZm8tPmZpbGUsCisJCQkJZ2l0X2Jsb2JfcmF3Y29udGVudChpbmZvLT5ibG9iKSwgc3osIG9wdHMtPm1ldHJpYy0+cGF5bG9hZCk7CiAJCX0KLQotCQlibG9ic2l6ZSA9IGdpdF9ibG9iX3Jhd3NpemUoYmxvYik7Ci0JCWlmICghZ2l0X19pc19zaXpldChibG9ic2l6ZSkpIC8qID8gd2hhdCB0byBkbyA/ICovCi0JCQlibG9ic2l6ZSA9IChzaXplX3QpLTE7Ci0KLQkJZXJyb3IgPSBvcHRzLT5tZXRyaWMtPmJ1ZmZlcl9zaWduYXR1cmUoCi0JCQkmY2FjaGVbZmlsZV9pZHhdLCBmaWxlLCBnaXRfYmxvYl9yYXdjb250ZW50KGJsb2IpLAotCQkJKHNpemVfdClibG9ic2l6ZSwgb3B0cy0+bWV0cmljLT5wYXlsb2FkKTsKLQotCQlnaXRfYmxvYl9mcmVlKGJsb2IpOwogCX0KIAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgc2ltaWxhcml0eV91bmxvYWQoc2ltaWxhcml0eV9pbmZvICppbmZvKQoreworCWlmIChpbmZvLT5vZGJfb2JqKQorCQlnaXRfb2RiX29iamVjdF9mcmVlKGluZm8tPm9kYl9vYmopOworCisJaWYgKGluZm8tPmJsb2IpCisJCWdpdF9ibG9iX2ZyZWUoaW5mby0+YmxvYik7CisJZWxzZQorCQlnaXRfYnVmX2ZyZWUoJmluZm8tPmRhdGEpOworfQorCiAjZGVmaW5lIEZMQUdfU0VUKG9wdHMsZmxhZ19uYW1lKSAoKChvcHRzKS0+ZmxhZ3MgJiBmbGFnX25hbWUpICE9IDApCiAKIC8qIC0gc2NvcmUgPCAwIG1lYW5zIGZpbGVzIGNhbm5vdCBiZSBjb21wYXJlZApAQCAtNDY3LDcgKzU1MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc2ltaWxhcml0eV9tZWFzdXJlKAogCWludCAqc2NvcmUsCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKKwlnaXRfZGlmZiAqZGlmZiwKIAljb25zdCBnaXRfZGlmZl9maW5kX29wdGlvbnMgKm9wdHMsCiAJdm9pZCAqKmNhY2hlLAogCXNpemVfdCBhX2lkeCwKQEAgLTQ3Niw2ICs1NTksOCBAQAogCWdpdF9kaWZmX2ZpbGUgKmFfZmlsZSA9IHNpbWlsYXJpdHlfZ2V0X2ZpbGUoZGlmZiwgYV9pZHgpOwogCWdpdF9kaWZmX2ZpbGUgKmJfZmlsZSA9IHNpbWlsYXJpdHlfZ2V0X2ZpbGUoZGlmZiwgYl9pZHgpOwogCWJvb2wgZXhhY3RfbWF0Y2ggPSBGTEFHX1NFVChvcHRzLCBHSVRfRElGRl9GSU5EX0VYQUNUX01BVENIX09OTFkpOworCWludCBlcnJvciA9IDA7CisJc2ltaWxhcml0eV9pbmZvIGFfaW5mbywgYl9pbmZvOwogCiAJKnNjb3JlID0gLTE7CiAKQEAgLTUxMCwyMyArNTk1LDQ4IEBACiAJCXJldHVybiAwOwogCX0KIAorCW1lbXNldCgmYV9pbmZvLCAwLCBzaXplb2YoYV9pbmZvKSk7CisJbWVtc2V0KCZiX2luZm8sIDAsIHNpemVvZihiX2luZm8pKTsKKworCS8qIHNldCB1cCBzaW1pbGFyaXR5IGRhdGEgKHdpbGwgdHJ5IHRvIHVwZGF0ZSBtaXNzaW5nIGZpbGUgc2l6ZXMpICovCisJaWYgKCFjYWNoZVthX2lkeF0gJiYgKGVycm9yID0gc2ltaWxhcml0eV9pbml0KCZhX2luZm8sIGRpZmYsIGFfaWR4KSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKCFjYWNoZVtiX2lkeF0gJiYgKGVycm9yID0gc2ltaWxhcml0eV9pbml0KCZiX2luZm8sIGRpZmYsIGJfaWR4KSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwkvKiBjaGVjayBpZiBmaWxlIHNpemVzIGFyZSBub3doZXJlIG5lYXIgZWFjaCBvdGhlciAqLworCWlmIChhX2ZpbGUtPnNpemUgPiAxMjcgJiYKKwkJYl9maWxlLT5zaXplID4gMTI3ICYmCisJCShhX2ZpbGUtPnNpemUgPiAoYl9maWxlLT5zaXplIDw8IDMpIHx8CisJCSBiX2ZpbGUtPnNpemUgPiAoYV9maWxlLT5zaXplIDw8IDMpKSkKKwkJZ290byBjbGVhbnVwOworCiAJLyogdXBkYXRlIHNpZ25hdHVyZSBjYWNoZSBpZiBuZWVkZWQgKi8KLQlpZiAoIWNhY2hlW2FfaWR4XSAmJiBzaW1pbGFyaXR5X2NhbGMoZGlmZiwgb3B0cywgYV9pZHgsIGNhY2hlKSA8IDApCi0JCXJldHVybiAtMTsKLQlpZiAoIWNhY2hlW2JfaWR4XSAmJiBzaW1pbGFyaXR5X2NhbGMoZGlmZiwgb3B0cywgYl9pZHgsIGNhY2hlKSA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoIWNhY2hlW2FfaWR4XSkgeworCQlpZiAoKGVycm9yID0gc2ltaWxhcml0eV9zaWcoJmFfaW5mbywgb3B0cywgY2FjaGUpKSA8IDApCisJCQlnb3RvIGNsZWFudXA7CisJfQorCWlmICghY2FjaGVbYl9pZHhdKSB7CisJCWlmICgoZXJyb3IgPSBzaW1pbGFyaXR5X3NpZygmYl9pbmZvLCBvcHRzLCBjYWNoZSkpIDwgMCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CiAKLQkvKiBzb21lIG1ldHJpY3MgbWF5IG5vdCB3aXNoIHRvIHByb2Nlc3MgdGhpcyBmaWxlICh0b28gYmlnIC8gdG9vIHNtYWxsKSAqLwotCWlmICghY2FjaGVbYV9pZHhdIHx8ICFjYWNoZVtiX2lkeF0pCi0JCXJldHVybiAwOworCS8qIGNhbGN1bGF0ZSBzaW1pbGFyaXR5IHByb3ZpZGVkIHRoYXQgdGhlIG1ldHJpYyBjaG9vc2UgdG8gcHJvY2VzcworCSAqIGJvdGggdGhlIGEgYW5kIGIgZmlsZXMgKHNvbWUgbWF5IG5vdCBpZiBmaWxlIGlzIHRvbyBiaWcsIGV0YykuCisJICovCisJaWYgKGNhY2hlW2FfaWR4XSAmJiBjYWNoZVtiX2lkeF0pCisJCWVycm9yID0gb3B0cy0+bWV0cmljLT5zaW1pbGFyaXR5KAorCQkJc2NvcmUsIGNhY2hlW2FfaWR4XSwgY2FjaGVbYl9pZHhdLCBvcHRzLT5tZXRyaWMtPnBheWxvYWQpOwogCi0JLyogY29tcGFyZSBzaWduYXR1cmVzICovCi0JcmV0dXJuIG9wdHMtPm1ldHJpYy0+c2ltaWxhcml0eSgKLQkJc2NvcmUsIGNhY2hlW2FfaWR4XSwgY2FjaGVbYl9pZHhdLCBvcHRzLT5tZXRyaWMtPnBheWxvYWQpOworY2xlYW51cDoKKwlzaW1pbGFyaXR5X3VubG9hZCgmYV9pbmZvKTsKKwlzaW1pbGFyaXR5X3VubG9hZCgmYl9pbmZvKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBjYWxjX3NlbGZfc2ltaWxhcml0eSgKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAorCWdpdF9kaWZmICpkaWZmLAogCWNvbnN0IGdpdF9kaWZmX2ZpbmRfb3B0aW9ucyAqb3B0cywKIAlzaXplX3QgZGVsdGFfaWR4LAogCXZvaWQgKipjYWNoZSkKQEAgLTU0Myw3ICs2NTMsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoc2ltaWxhcml0eSA+PSAwKSB7Ci0JCWRlbHRhLT5zaW1pbGFyaXR5ID0gKHVpbnQzMl90KXNpbWlsYXJpdHk7CisJCWRlbHRhLT5zaW1pbGFyaXR5ID0gKHVpbnQxNl90KXNpbWlsYXJpdHk7CiAJCWRlbHRhLT5mbGFncyB8PSBHSVRfRElGRl9GTEFHX19IQVNfU0VMRl9TSU1JTEFSSVRZOwogCX0KIApAQCAtNTUxLDcgKzY2MSw3IEBACiB9CiAKIHN0YXRpYyBib29sIGlzX3JlbmFtZV90YXJnZXQoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKKwlnaXRfZGlmZiAqZGlmZiwKIAljb25zdCBnaXRfZGlmZl9maW5kX29wdGlvbnMgKm9wdHMsCiAJc2l6ZV90IGRlbHRhX2lkeCwKIAl2b2lkICoqY2FjaGUpCkBAIC01OTAsMTEgKzcwMCwxMyBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAljYXNlIEdJVF9ERUxUQV9VTlRSQUNLRUQ6Ci0JY2FzZSBHSVRfREVMVEFfSUdOT1JFRDoKIAkJaWYgKCFGTEFHX1NFVChvcHRzLCBHSVRfRElGRl9GSU5EX0ZPUl9VTlRSQUNLRUQpKQogCQkJcmV0dXJuIGZhbHNlOwogCQlicmVhazsKIAorCWNhc2UgR0lUX0RFTFRBX0lHTk9SRUQ6CisJCXJldHVybiBmYWxzZTsKKwogCWRlZmF1bHQ6IC8qIGFsbCBvdGhlciBzdGF0dXMgdmFsdWVzIHNob3VsZCBiZSBjaGVja2VkICovCiAJCWJyZWFrOwogCX0KQEAgLTYwNCw3ICs3MTYsNyBAQAogfQogCiBzdGF0aWMgYm9vbCBpc19yZW5hbWVfc291cmNlKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsCisJZ2l0X2RpZmYgKmRpZmYsCiAJY29uc3QgZ2l0X2RpZmZfZmluZF9vcHRpb25zICpvcHRzLAogCXNpemVfdCBkZWx0YV9pZHgsCiAJdm9pZCAqKmNhY2hlKQpAQCAtNjc0LDQyICs3ODYsNDkgQEAKIH0KIAogR0lUX0lOTElORSh2b2lkKSBkZWx0YV9tYWtlX3JlbmFtZSgKLQlnaXRfZGlmZl9kZWx0YSAqdG8sIGNvbnN0IGdpdF9kaWZmX2RlbHRhICpmcm9tLCB1aW50MzJfdCBzaW1pbGFyaXR5KQorCWdpdF9kaWZmX2RlbHRhICp0bywgY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmZyb20sIHVpbnQxNl90IHNpbWlsYXJpdHkpCiB7CiAJdG8tPnN0YXR1cyAgICAgPSBHSVRfREVMVEFfUkVOQU1FRDsKIAl0by0+c2ltaWxhcml0eSA9IHNpbWlsYXJpdHk7CisJdG8tPm5maWxlcyAgICAgPSAyOwogCW1lbWNweSgmdG8tPm9sZF9maWxlLCAmZnJvbS0+b2xkX2ZpbGUsIHNpemVvZih0by0+b2xkX2ZpbGUpKTsKIAl0by0+ZmxhZ3MgJj0gfkdJVF9ESUZGX0ZMQUdfX1RPX1NQTElUOwogfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgaWR4OwotCXVpbnQzMl90IHNpbWlsYXJpdHk7CisJc2l6ZV90ICAgaWR4OworCXVpbnQxNl90IHNpbWlsYXJpdHk7CiB9IGRpZmZfZmluZF9tYXRjaDsKIAogaW50IGdpdF9kaWZmX2ZpbmRfc2ltaWxhcigKLQlnaXRfZGlmZl9saXN0ICpkaWZmLAotCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyAqZ2l2ZW5fb3B0cykKKwlnaXRfZGlmZiAqZGlmZiwKKwljb25zdCBnaXRfZGlmZl9maW5kX29wdGlvbnMgKmdpdmVuX29wdHMpCiB7Ci0Jc2l6ZV90IGksIGosIHNpZ2NhY2hlX3NpemU7Ci0JaW50IGVycm9yID0gMCwgc2ltaWxhcml0eTsKLQlnaXRfZGlmZl9kZWx0YSAqZnJvbSwgKnRvOworCXNpemVfdCBzLCB0OworCWludCBlcnJvciA9IDAsIHJlc3VsdDsKKwl1aW50MTZfdCBzaW1pbGFyaXR5OworCWdpdF9kaWZmX2RlbHRhICpzcmMsICp0Z3Q7CiAJZ2l0X2RpZmZfZmluZF9vcHRpb25zIG9wdHM7Ci0Jc2l6ZV90IG51bV9zcmNzID0gMCwgbnVtX3RndHMgPSAwLCB0cmllZF9zcmNzID0gMCwgdHJpZWRfdGd0cyA9IDA7CisJc2l6ZV90IG51bV9kZWx0YXMsIG51bV9zcmNzID0gMCwgbnVtX3RndHMgPSAwOworCXNpemVfdCB0cmllZF9zcmNzID0gMCwgdHJpZWRfdGd0cyA9IDA7CiAJc2l6ZV90IG51bV9yZXdyaXRlcyA9IDAsIG51bV91cGRhdGVzID0gMCwgbnVtX2J1bXBlZCA9IDA7CiAJdm9pZCAqKnNpZ2NhY2hlOyAvKiBjYWNoZSBvZiBzaW1pbGFyaXR5IG1ldHJpYyBmaWxlIHNpZ25hdHVyZXMgKi8KLQlkaWZmX2ZpbmRfbWF0Y2ggKm1hdGNoX3NyY3MgPSBOVUxMLCAqbWF0Y2hfdGd0cyA9IE5VTEwsICpiZXN0X21hdGNoOworCWRpZmZfZmluZF9tYXRjaCAqdGd0MnNyYyA9IE5VTEw7CisJZGlmZl9maW5kX21hdGNoICpzcmMydGd0ID0gTlVMTDsKKwlkaWZmX2ZpbmRfbWF0Y2ggKnRndDJzcmNfY29weSA9IE5VTEw7CisJZGlmZl9maW5kX21hdGNoICpiZXN0X21hdGNoOwogCWdpdF9kaWZmX2ZpbGUgc3dhcDsKIAogCWlmICgoZXJyb3IgPSBub3JtYWxpemVfZmluZF9vcHRzKGRpZmYsICZvcHRzLCBnaXZlbl9vcHRzKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKKwludW1fZGVsdGFzID0gZGlmZi0+ZGVsdGFzLmxlbmd0aDsKKwogCS8qIFRPRE86IG1heWJlIGFib3J0IGlmIGRlbHRhcy5sZW5ndGggPiByZW5hbWVfbGltaXQgPz8/ICovCi0JaWYgKCFnaXRfX2lzX3VpbnQzMihkaWZmLT5kZWx0YXMubGVuZ3RoKSkKKwlpZiAoIWdpdF9faXNfdWludDMyKG51bV9kZWx0YXMpKQogCQlyZXR1cm4gMDsKIAotCXNpZ2NhY2hlX3NpemUgPSBkaWZmLT5kZWx0YXMubGVuZ3RoICogMjsgLyoga2VlcCBzaXplIGIvYyBkaWZmIG1heSBjaGFuZ2UgKi8KLQlzaWdjYWNoZSA9IGdpdF9fY2FsbG9jKHNpZ2NhY2hlX3NpemUsIHNpemVvZih2b2lkICopKTsKKwlzaWdjYWNoZSA9IGdpdF9fY2FsbG9jKG51bV9kZWx0YXMgKiAyLCBzaXplb2Yodm9pZCAqKSk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHNpZ2NhY2hlKTsKIAogCS8qIExhYmVsIHJlbmFtZSBzb3VyY2VzIGFuZCB0YXJnZXRzCkBAIC03MTcsMjIgKzgzNiwzMCBAQAogCSAqIFRoaXMgd2lsbCBhbHNvIHNldCBzZWxmLXNpbWlsYXJpdHkgc2NvcmVzIGZvciBNT0RJRklFRCBmaWxlcyBhbmQKIAkgKiBtYXJrIHRoZW0gZm9yIHNwbGl0dGluZyBpZiBicmVhay1yZXdyaXRlcyBpcyBlbmFibGVkCiAJICovCi0JZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIGksIHRvKSB7Ci0JCWlmIChpc19yZW5hbWVfc291cmNlKGRpZmYsICZvcHRzLCBpLCBzaWdjYWNoZSkpCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIHQsIHRndCkgeworCQlpZiAoaXNfcmVuYW1lX3NvdXJjZShkaWZmLCAmb3B0cywgdCwgc2lnY2FjaGUpKQogCQkJKytudW1fc3JjczsKIAotCQlpZiAoaXNfcmVuYW1lX3RhcmdldChkaWZmLCAmb3B0cywgaSwgc2lnY2FjaGUpKQorCQlpZiAoaXNfcmVuYW1lX3RhcmdldChkaWZmLCAmb3B0cywgdCwgc2lnY2FjaGUpKQogCQkJKytudW1fdGd0czsKKworCQlpZiAoKHRndC0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX19UT19TUExJVCkgIT0gMCkKKwkJCW51bV9yZXdyaXRlcysrOwogCX0KIAogCS8qIGlmIHRoZXJlIGFyZSBubyBjYW5kaWRhdGUgc3JjcyBvciB0Z3RzLCB3ZSdyZSBkb25lICovCiAJaWYgKCFudW1fc3JjcyB8fCAhbnVtX3RndHMpCiAJCWdvdG8gY2xlYW51cDsKIAotCW1hdGNoX3RndHMgPSBnaXRfX2NhbGxvYyhkaWZmLT5kZWx0YXMubGVuZ3RoLCBzaXplb2YoZGlmZl9maW5kX21hdGNoKSk7Ci0JR0lURVJSX0NIRUNLX0FMTE9DKG1hdGNoX3RndHMpOwotCW1hdGNoX3NyY3MgPSBnaXRfX2NhbGxvYyhkaWZmLT5kZWx0YXMubGVuZ3RoLCBzaXplb2YoZGlmZl9maW5kX21hdGNoKSk7Ci0JR0lURVJSX0NIRUNLX0FMTE9DKG1hdGNoX3NyY3MpOworCXNyYzJ0Z3QgPSBnaXRfX2NhbGxvYyhudW1fZGVsdGFzLCBzaXplb2YoZGlmZl9maW5kX21hdGNoKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHNyYzJ0Z3QpOworCXRndDJzcmMgPSBnaXRfX2NhbGxvYyhudW1fZGVsdGFzLCBzaXplb2YoZGlmZl9maW5kX21hdGNoKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHRndDJzcmMpOworCisJaWYgKEZMQUdfU0VUKCZvcHRzLCBHSVRfRElGRl9GSU5EX0NPUElFUykpIHsKKwkJdGd0MnNyY19jb3B5ID0gZ2l0X19jYWxsb2MobnVtX2RlbHRhcywgc2l6ZW9mKGRpZmZfZmluZF9tYXRjaCkpOworCQlHSVRFUlJfQ0hFQ0tfQUxMT0ModGd0MnNyY19jb3B5KTsKKwl9CiAKIAkvKgogCSAqIEZpbmQgYmVzdC1maXQgbWF0Y2hlcyBmb3IgcmVuYW1lIC8gY29weSBjYW5kaWRhdGVzCkBAIC03NDEsNDcgKzg2OCw2MiBAQAogZmluZF9iZXN0X21hdGNoZXM6CiAJdHJpZWRfdGd0cyA9IG51bV9idW1wZWQgPSAwOwogCi0JZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIGksIHRvKSB7CisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIHQsIHRndCkgewogCQkvKiBza2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgcmVuYW1lIHRhcmdldHMgKi8KLQkJaWYgKCh0by0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX19JU19SRU5BTUVfVEFSR0VUKSA9PSAwKQorCQlpZiAoKHRndC0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX19JU19SRU5BTUVfVEFSR0VUKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJdHJpZWRfc3JjcyA9IDA7CiAKLQkJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIGosIGZyb20pIHsKKwkJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIHMsIHNyYykgewogCQkJLyogc2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IHJlbmFtZSBzb3VyY2VzICovCi0JCQlpZiAoKGZyb20tPmZsYWdzICYgR0lUX0RJRkZfRkxBR19fSVNfUkVOQU1FX1NPVVJDRSkgPT0gMCkKKwkJCWlmICgoc3JjLT5mbGFncyAmIEdJVF9ESUZGX0ZMQUdfX0lTX1JFTkFNRV9TT1VSQ0UpID09IDApCiAJCQkJY29udGludWU7CiAKIAkJCS8qIGNhbGN1bGF0ZSBzaW1pbGFyaXR5IGZvciB0aGlzIHBhaXIgYW5kIGZpbmQgYmVzdCBtYXRjaCAqLwotCQkJaWYgKGkgPT0gaikKLQkJCQlzaW1pbGFyaXR5ID0gLTE7IC8qIGRvbid0IG1lYXN1cmUgc2VsZi1zaW1pbGFyaXR5IGhlcmUgKi8KKwkJCWlmIChzID09IHQpCisJCQkJcmVzdWx0ID0gLTE7IC8qIGRvbid0IG1lYXN1cmUgc2VsZi1zaW1pbGFyaXR5IGhlcmUgKi8KIAkJCWVsc2UgaWYgKChlcnJvciA9IHNpbWlsYXJpdHlfbWVhc3VyZSgKLQkJCQkmc2ltaWxhcml0eSwgZGlmZiwgJm9wdHMsIHNpZ2NhY2hlLCAyICogaiwgMiAqIGkgKyAxKSkgPCAwKQorCQkJCSZyZXN1bHQsIGRpZmYsICZvcHRzLCBzaWdjYWNoZSwgMiAqIHMsIDIgKiB0ICsgMSkpIDwgMCkKIAkJCQlnb3RvIGNsZWFudXA7CiAKLQkJCS8qIGlmIHRoaXMgcGFpcmluZyBpcyBiZXR0ZXIgZm9yIHRoZSBzcmMgYW5kIHRoZSB0Z3QsIGtlZXAgaXQgKi8KLQkJCWlmIChzaW1pbGFyaXR5ID4gMCAmJgotCQkJCW1hdGNoX3RndHNbaV0uc2ltaWxhcml0eSA8ICh1aW50MzJfdClzaW1pbGFyaXR5ICYmCi0JCQkJbWF0Y2hfc3Jjc1tqXS5zaW1pbGFyaXR5IDwgKHVpbnQzMl90KXNpbWlsYXJpdHkpCisJCQlpZiAocmVzdWx0IDwgMCkKKwkJCQljb250aW51ZTsKKwkJCXNpbWlsYXJpdHkgPSAodWludDE2X3QpcmVzdWx0OworCisJCQkvKiBpcyB0aGlzIGEgYmV0dGVyIHJlbmFtZT8gKi8KKwkJCWlmICh0Z3Qyc3JjW3RdLnNpbWlsYXJpdHkgPCBzaW1pbGFyaXR5ICYmCisJCQkJc3JjMnRndFtzXS5zaW1pbGFyaXR5IDwgc2ltaWxhcml0eSkKIAkJCXsKLQkJCQlpZiAobWF0Y2hfdGd0c1tpXS5zaW1pbGFyaXR5ID4gMCkgewotCQkJCQltYXRjaF90Z3RzW21hdGNoX3NyY3Nbal0uaWR4XS5zaW1pbGFyaXR5ID0gMDsKLQkJCQkJbWF0Y2hfc3Jjc1ttYXRjaF90Z3RzW2ldLmlkeF0uc2ltaWxhcml0eSA9IDA7Ci0JCQkJCSsrbnVtX2J1bXBlZDsKKwkJCQkvKiBlamVjdCBvbGQgbWFwcGluZyAqLworCQkJCWlmIChzcmMydGd0W3NdLnNpbWlsYXJpdHkgPiAwKSB7CisJCQkJCXRndDJzcmNbc3JjMnRndFtzXS5pZHhdLnNpbWlsYXJpdHkgPSAwOworCQkJCQludW1fYnVtcGVkKys7CisJCQkJfQorCQkJCWlmICh0Z3Qyc3JjW3RdLnNpbWlsYXJpdHkgPiAwKSB7CisJCQkJCXNyYzJ0Z3RbdGd0MnNyY1t0XS5pZHhdLnNpbWlsYXJpdHkgPSAwOworCQkJCQludW1fYnVtcGVkKys7CiAJCQkJfQogCi0JCQkJbWF0Y2hfdGd0c1tpXS5zaW1pbGFyaXR5ID0gKHVpbnQzMl90KXNpbWlsYXJpdHk7Ci0JCQkJbWF0Y2hfdGd0c1tpXS5pZHggPSAodWludDMyX3QpajsKKwkJCQkvKiB3cml0ZSBuZXcgbWFwcGluZyAqLworCQkJCXRndDJzcmNbdF0uaWR4ID0gczsKKwkJCQl0Z3Qyc3JjW3RdLnNpbWlsYXJpdHkgPSBzaW1pbGFyaXR5OworCQkJCXNyYzJ0Z3Rbc10uaWR4ID0gdDsKKwkJCQlzcmMydGd0W3NdLnNpbWlsYXJpdHkgPSBzaW1pbGFyaXR5OworCQkJfQogCi0JCQkJbWF0Y2hfc3Jjc1tqXS5zaW1pbGFyaXR5ID0gKHVpbnQzMl90KXNpbWlsYXJpdHk7Ci0JCQkJbWF0Y2hfc3Jjc1tqXS5pZHggPSAodWludDMyX3QpaTsKKwkJCS8qIGtlZXAgYmVzdCBhYnNvbHV0ZSBtYXRjaCBmb3IgY29waWVzICovCisJCQlpZiAodGd0MnNyY19jb3B5ICE9IE5VTEwgJiYKKwkJCQl0Z3Qyc3JjX2NvcHlbdF0uc2ltaWxhcml0eSA8IHNpbWlsYXJpdHkpCisJCQl7CisJCQkJdGd0MnNyY19jb3B5W3RdLmlkeCA9IHM7CisJCQkJdGd0MnNyY19jb3B5W3RdLnNpbWlsYXJpdHkgPSBzaW1pbGFyaXR5OwogCQkJfQogCiAJCQlpZiAoKyt0cmllZF9zcmNzID49IG51bV9zcmNzKQogCQkJCWJyZWFrOwogCi0JCQkvKiBjYXAgb24gbWF4aW11bSB0YXJnZXRzIHdlJ2xsIGV4YW1pbmUgKHBlciAidG8iIGZpbGUpICovCisJCQkvKiBjYXAgb24gbWF4aW11bSB0YXJnZXRzIHdlJ2xsIGV4YW1pbmUgKHBlciAidGd0IiBmaWxlKSAqLwogCQkJaWYgKHRyaWVkX3NyY3MgPiBvcHRzLnJlbmFtZV9saW1pdCkKIAkJCQlicmVhazsKIAkJfQpAQCAtNzk5LDE4ICs5NDEsMjEgQEAKIAogCXRyaWVkX3RndHMgPSAwOwogCi0JZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIGksIHRvKSB7CisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZkaWZmLT5kZWx0YXMsIHQsIHRndCkgewogCQkvKiBza2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgcmVuYW1lIHRhcmdldHMgKi8KLQkJaWYgKCh0by0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX19JU19SRU5BTUVfVEFSR0VUKSA9PSAwKQorCQlpZiAoKHRndC0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX19JU19SRU5BTUVfVEFSR0VUKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJLyogY2hlY2sgaWYgdGhpcyBkZWx0YSB3YXMgdGhlIHRhcmdldCBvZiBhIHNpbWlsYXJpdHkgKi8KLQkJYmVzdF9tYXRjaCA9ICZtYXRjaF90Z3RzW2ldOwotCQlpZiAoIWJlc3RfbWF0Y2gtPnNpbWlsYXJpdHkpCisJCWlmICh0Z3Qyc3JjW3RdLnNpbWlsYXJpdHkpCisJCQliZXN0X21hdGNoID0gJnRndDJzcmNbdF07CisJCWVsc2UgaWYgKHRndDJzcmNfY29weSAmJiB0Z3Qyc3JjX2NvcHlbdF0uc2ltaWxhcml0eSkKKwkJCWJlc3RfbWF0Y2ggPSAmdGd0MnNyY19jb3B5W3RdOworCQllbHNlCiAJCQljb250aW51ZTsKIAotCQlqID0gYmVzdF9tYXRjaC0+aWR4OwotCQlmcm9tID0gR0lUX1ZFQ1RPUl9HRVQoJmRpZmYtPmRlbHRhcywgaik7CisJCXMgPSBiZXN0X21hdGNoLT5pZHg7CisJCXNyYyA9IEdJVF9WRUNUT1JfR0VUKCZkaWZmLT5kZWx0YXMsIHMpOwogCiAJCS8qIHBvc3NpYmxlIHNjZW5hcmlvczoKIAkJICogMS4gZnJvbSBERUxFVEUgdG8gQUREL1VOVFJBQ0svSUdOT1JFID0gUkVOQU1FCkBAIC04MjAsMTAxICs5NjUsMTE0IEBACiAJCSAqIDUuIGZyb20gT1RIRVIgdG8gQUREL1VOVFJBQ0svSUdOT1JFID0gT1RIRVIgKyBDT1BZCiAJCSAqLwogCi0JCWlmIChmcm9tLT5zdGF0dXMgPT0gR0lUX0RFTFRBX0RFTEVURUQpIHsKKwkJaWYgKHNyYy0+c3RhdHVzID09IEdJVF9ERUxUQV9ERUxFVEVEKSB7CiAKLQkJCWlmIChkZWx0YV9pc19uZXdfb25seSh0bykpIHsKKwkJCWlmIChkZWx0YV9pc19uZXdfb25seSh0Z3QpKSB7CiAKIAkJCQlpZiAoYmVzdF9tYXRjaC0+c2ltaWxhcml0eSA8IG9wdHMucmVuYW1lX3RocmVzaG9sZCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlkZWx0YV9tYWtlX3JlbmFtZSh0bywgZnJvbSwgYmVzdF9tYXRjaC0+c2ltaWxhcml0eSk7CisJCQkJZGVsdGFfbWFrZV9yZW5hbWUodGd0LCBzcmMsIGJlc3RfbWF0Y2gtPnNpbWlsYXJpdHkpOwogCi0JCQkJZnJvbS0+ZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19fVE9fREVMRVRFOworCQkJCXNyYy0+ZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19fVE9fREVMRVRFOwogCQkJCW51bV9yZXdyaXRlcysrOwogCQkJfSBlbHNlIHsKLQkJCQlhc3NlcnQoZGVsdGFfaXNfc3BsaXQodG8pKTsKKwkJCQlhc3NlcnQoZGVsdGFfaXNfc3BsaXQodGd0KSk7CiAKIAkJCQlpZiAoYmVzdF9tYXRjaC0+c2ltaWxhcml0eSA8IG9wdHMucmVuYW1lX2Zyb21fcmV3cml0ZV90aHJlc2hvbGQpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJbWVtY3B5KCZzd2FwLCAmdG8tPm9sZF9maWxlLCBzaXplb2Yoc3dhcCkpOworCQkJCW1lbWNweSgmc3dhcCwgJnRndC0+b2xkX2ZpbGUsIHNpemVvZihzd2FwKSk7CiAKLQkJCQlkZWx0YV9tYWtlX3JlbmFtZSh0bywgZnJvbSwgYmVzdF9tYXRjaC0+c2ltaWxhcml0eSk7CisJCQkJZGVsdGFfbWFrZV9yZW5hbWUodGd0LCBzcmMsIGJlc3RfbWF0Y2gtPnNpbWlsYXJpdHkpOwogCQkJCW51bV9yZXdyaXRlcy0tOwogCi0JCQkJZnJvbS0+c3RhdHVzID0gR0lUX0RFTFRBX0RFTEVURUQ7Ci0JCQkJbWVtY3B5KCZmcm9tLT5vbGRfZmlsZSwgJnN3YXAsIHNpemVvZihmcm9tLT5vbGRfZmlsZSkpOwotCQkJCW1lbXNldCgmZnJvbS0+bmV3X2ZpbGUsIDAsIHNpemVvZihmcm9tLT5uZXdfZmlsZSkpOwotCQkJCWZyb20tPm5ld19maWxlLnBhdGggPSBmcm9tLT5vbGRfZmlsZS5wYXRoOwotCQkJCWZyb20tPm5ld19maWxlLmZsYWdzIHw9IEdJVF9ESUZGX0ZMQUdfVkFMSURfT0lEOworCQkJCWFzc2VydChzcmMtPnN0YXR1cyA9PSBHSVRfREVMVEFfREVMRVRFRCk7CisJCQkJbWVtY3B5KCZzcmMtPm9sZF9maWxlLCAmc3dhcCwgc2l6ZW9mKHNyYy0+b2xkX2ZpbGUpKTsKKwkJCQltZW1zZXQoJnNyYy0+bmV3X2ZpbGUsIDAsIHNpemVvZihzcmMtPm5ld19maWxlKSk7CisJCQkJc3JjLT5uZXdfZmlsZS5wYXRoID0gc3JjLT5vbGRfZmlsZS5wYXRoOworCQkJCXNyYy0+bmV3X2ZpbGUuZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19WQUxJRF9PSUQ7CiAKIAkJCQludW1fdXBkYXRlcysrOworCisJCQkJaWYgKHNyYzJ0Z3RbdF0uc2ltaWxhcml0eSA+IDAgJiYgc3JjMnRndFt0XS5pZHggPiB0KSB7CisJCQkJCS8qIHdoYXQgdXNlZCB0byBiZSBhdCBzcmMgdCBpcyBub3cgYXQgc3JjIHMgKi8KKwkJCQkJdGd0MnNyY1tzcmMydGd0W3RdLmlkeF0uaWR4ID0gczsKKwkJCQl9CiAJCQl9CiAJCX0KIAotCQllbHNlIGlmIChkZWx0YV9pc19zcGxpdChmcm9tKSkgeworCQllbHNlIGlmIChkZWx0YV9pc19zcGxpdChzcmMpKSB7CiAKLQkJCWlmIChkZWx0YV9pc19uZXdfb25seSh0bykpIHsKKwkJCWlmIChkZWx0YV9pc19uZXdfb25seSh0Z3QpKSB7CiAKIAkJCQlpZiAoYmVzdF9tYXRjaC0+c2ltaWxhcml0eSA8IG9wdHMucmVuYW1lX3RocmVzaG9sZCkKIAkJCQkJY29udGludWU7CiAKLQkJCQlkZWx0YV9tYWtlX3JlbmFtZSh0bywgZnJvbSwgYmVzdF9tYXRjaC0+c2ltaWxhcml0eSk7CisJCQkJZGVsdGFfbWFrZV9yZW5hbWUodGd0LCBzcmMsIGJlc3RfbWF0Y2gtPnNpbWlsYXJpdHkpOwogCi0JCQkJZnJvbS0+c3RhdHVzID0gKGRpZmYtPm5ld19zcmMgPT0gR0lUX0lURVJBVE9SX1RZUEVfV09SS0RJUikgPworCQkJCXNyYy0+c3RhdHVzID0gKGRpZmYtPm5ld19zcmMgPT0gR0lUX0lURVJBVE9SX1RZUEVfV09SS0RJUikgPwogCQkJCQlHSVRfREVMVEFfVU5UUkFDS0VEIDogR0lUX0RFTFRBX0FEREVEOwotCQkJCW1lbXNldCgmZnJvbS0+b2xkX2ZpbGUsIDAsIHNpemVvZihmcm9tLT5vbGRfZmlsZSkpOwotCQkJCWZyb20tPm9sZF9maWxlLnBhdGggPSBmcm9tLT5uZXdfZmlsZS5wYXRoOwotCQkJCWZyb20tPm9sZF9maWxlLmZsYWdzIHw9IEdJVF9ESUZGX0ZMQUdfVkFMSURfT0lEOworCQkJCXNyYy0+bmZpbGVzID0gMTsKKwkJCQltZW1zZXQoJnNyYy0+b2xkX2ZpbGUsIDAsIHNpemVvZihzcmMtPm9sZF9maWxlKSk7CisJCQkJc3JjLT5vbGRfZmlsZS5wYXRoID0gc3JjLT5uZXdfZmlsZS5wYXRoOworCQkJCXNyYy0+b2xkX2ZpbGUuZmxhZ3MgfD0gR0lUX0RJRkZfRkxBR19WQUxJRF9PSUQ7CiAKLQkJCQlmcm9tLT5mbGFncyAmPSB+R0lUX0RJRkZfRkxBR19fVE9fU1BMSVQ7CisJCQkJc3JjLT5mbGFncyAmPSB+R0lUX0RJRkZfRkxBR19fVE9fU1BMSVQ7CiAJCQkJbnVtX3Jld3JpdGVzLS07CiAKIAkJCQludW1fdXBkYXRlcysrOwogCQkJfSBlbHNlIHsKLQkJCQlhc3NlcnQoZGVsdGFfaXNfc3BsaXQoZnJvbSkpOworCQkJCWFzc2VydChkZWx0YV9pc19zcGxpdChzcmMpKTsKIAogCQkJCWlmIChiZXN0X21hdGNoLT5zaW1pbGFyaXR5IDwgb3B0cy5yZW5hbWVfZnJvbV9yZXdyaXRlX3RocmVzaG9sZCkKIAkJCQkJY29udGludWU7CiAKLQkJCQltZW1jcHkoJnN3YXAsICZ0by0+b2xkX2ZpbGUsIHNpemVvZihzd2FwKSk7CisJCQkJbWVtY3B5KCZzd2FwLCAmdGd0LT5vbGRfZmlsZSwgc2l6ZW9mKHN3YXApKTsKIAotCQkJCWRlbHRhX21ha2VfcmVuYW1lKHRvLCBmcm9tLCBiZXN0X21hdGNoLT5zaW1pbGFyaXR5KTsKKwkJCQlkZWx0YV9tYWtlX3JlbmFtZSh0Z3QsIHNyYywgYmVzdF9tYXRjaC0+c2ltaWxhcml0eSk7CiAJCQkJbnVtX3Jld3JpdGVzLS07CiAJCQkJbnVtX3VwZGF0ZXMrKzsKIAotCQkJCW1lbWNweSgmZnJvbS0+b2xkX2ZpbGUsICZzd2FwLCBzaXplb2YoZnJvbS0+b2xkX2ZpbGUpKTsKKwkJCQltZW1jcHkoJnNyYy0+b2xkX2ZpbGUsICZzd2FwLCBzaXplb2Yoc3JjLT5vbGRfZmlsZSkpOwogCiAJCQkJLyogaWYgd2UndmUganVzdCBzd2FwcGVkIHRoZSBuZXcgZWxlbWVudCBpbnRvIHRoZSBjb3JyZWN0CiAJCQkJICogcGxhY2UsIGNsZWFyIHRoZSBTUExJVCBmbGFnCiAJCQkJICovCi0JCQkJaWYgKG1hdGNoX3RndHNbal0uaWR4ID09IGkgJiYKLQkJCQkJbWF0Y2hfdGd0c1tqXS5zaW1pbGFyaXR5ID4KKwkJCQlpZiAodGd0MnNyY1tzXS5pZHggPT0gdCAmJgorCQkJCQl0Z3Qyc3JjW3NdLnNpbWlsYXJpdHkgPgogCQkJCQlvcHRzLnJlbmFtZV9mcm9tX3Jld3JpdGVfdGhyZXNob2xkKSB7Ci0KLQkJCQkJZnJvbS0+c3RhdHVzICAgICA9IEdJVF9ERUxUQV9SRU5BTUVEOwotCQkJCQlmcm9tLT5zaW1pbGFyaXR5ID0gbWF0Y2hfdGd0c1tqXS5zaW1pbGFyaXR5OwotCQkJCQltYXRjaF90Z3RzW2pdLnNpbWlsYXJpdHkgPSAwOwotCQkJCQlmcm9tLT5mbGFncyAmPSB+R0lUX0RJRkZfRkxBR19fVE9fU1BMSVQ7CisJCQkJCXNyYy0+c3RhdHVzICAgICA9IEdJVF9ERUxUQV9SRU5BTUVEOworCQkJCQlzcmMtPnNpbWlsYXJpdHkgPSB0Z3Qyc3JjW3NdLnNpbWlsYXJpdHk7CisJCQkJCXRndDJzcmNbc10uc2ltaWxhcml0eSA9IDA7CisJCQkJCXNyYy0+ZmxhZ3MgJj0gfkdJVF9ESUZGX0ZMQUdfX1RPX1NQTElUOwogCQkJCQludW1fcmV3cml0ZXMtLTsKIAkJCQl9CiAJCQkJLyogb3RoZXJ3aXNlLCBpZiB3ZSBqdXN0IG92ZXJ3cm90ZSBhIHNvdXJjZSwgdXBkYXRlIG1hcHBpbmcgKi8KLQkJCQllbHNlIGlmIChqID4gaSAmJiBtYXRjaF9zcmNzW2ldLnNpbWlsYXJpdHkgPiAwKSB7Ci0JCQkJCW1hdGNoX3RndHNbbWF0Y2hfc3Jjc1tpXS5pZHhdLmlkeCA9IGo7CisJCQkJZWxzZSBpZiAoc3JjMnRndFt0XS5zaW1pbGFyaXR5ID4gMCAmJiBzcmMydGd0W3RdLmlkeCA+IHQpIHsKKwkJCQkJLyogd2hhdCB1c2VkIHRvIGJlIGF0IHNyYyB0IGlzIG5vdyBhdCBzcmMgcyAqLworCQkJCQl0Z3Qyc3JjW3NyYzJ0Z3RbdF0uaWR4XS5pZHggPSBzOwogCQkJCX0KIAogCQkJCW51bV91cGRhdGVzKys7CiAJCQl9CiAJCX0KIAotCQllbHNlIGlmIChkZWx0YV9pc19uZXdfb25seSh0bykpIHsKLQkJCWlmICghRkxBR19TRVQoJm9wdHMsIEdJVF9ESUZGX0ZJTkRfQ09QSUVTKSB8fAotCQkJCWJlc3RfbWF0Y2gtPnNpbWlsYXJpdHkgPCBvcHRzLmNvcHlfdGhyZXNob2xkKQorCQllbHNlIGlmIChkZWx0YV9pc19uZXdfb25seSh0Z3QpKSB7CisJCQlpZiAoIUZMQUdfU0VUKCZvcHRzLCBHSVRfRElGRl9GSU5EX0NPUElFUykpCiAJCQkJY29udGludWU7CiAKLQkJCXRvLT5zdGF0dXMgICAgID0gR0lUX0RFTFRBX0NPUElFRDsKLQkJCXRvLT5zaW1pbGFyaXR5ID0gYmVzdF9tYXRjaC0+c2ltaWxhcml0eTsKLQkJCW1lbWNweSgmdG8tPm9sZF9maWxlLCAmZnJvbS0+b2xkX2ZpbGUsIHNpemVvZih0by0+b2xkX2ZpbGUpKTsKKwkJCWlmICh0Z3Qyc3JjX2NvcHlbdF0uc2ltaWxhcml0eSA8IG9wdHMuY29weV90aHJlc2hvbGQpCisJCQkJY29udGludWU7CisKKwkJCS8qIGFsd2F5cyB1c2UgYmVzdCBwb3NzaWJsZSBzb3VyY2UgZm9yIGNvcHkgKi8KKwkJCWJlc3RfbWF0Y2ggPSAmdGd0MnNyY19jb3B5W3RdOworCQkJc3JjID0gR0lUX1ZFQ1RPUl9HRVQoJmRpZmYtPmRlbHRhcywgYmVzdF9tYXRjaC0+aWR4KTsKKworCQkJdGd0LT5zdGF0dXMgICAgID0gR0lUX0RFTFRBX0NPUElFRDsKKwkJCXRndC0+c2ltaWxhcml0eSA9IGJlc3RfbWF0Y2gtPnNpbWlsYXJpdHk7CisJCQl0Z3QtPm5maWxlcyAgICAgPSAyOworCQkJbWVtY3B5KCZ0Z3QtPm9sZF9maWxlLCAmc3JjLT5vbGRfZmlsZSwgc2l6ZW9mKHRndC0+b2xkX2ZpbGUpKTsKIAogCQkJbnVtX3VwZGF0ZXMrKzsKIAkJfQpAQCAtOTI3LDE1ICsxMDg1LDE3IEBACiAJaWYgKG51bV9yZXdyaXRlcyA+IDAgfHwgbnVtX3VwZGF0ZXMgPiAwKQogCQllcnJvciA9IGFwcGx5X3NwbGl0c19hbmRfZGVsZXRlcygKIAkJCWRpZmYsIGRpZmYtPmRlbHRhcy5sZW5ndGggLSBudW1fcmV3cml0ZXMsCi0JCQlGTEFHX1NFVCgmb3B0cywgR0lUX0RJRkZfQlJFQUtfUkVXUklURVMpKTsKKwkJCUZMQUdfU0VUKCZvcHRzLCBHSVRfRElGRl9CUkVBS19SRVdSSVRFUykgJiYKKwkJCSFGTEFHX1NFVCgmb3B0cywgR0lUX0RJRkZfQlJFQUtfUkVXUklURVNfRk9SX1JFTkFNRVNfT05MWSkpOwogCiBjbGVhbnVwOgotCWdpdF9fZnJlZShtYXRjaF9zcmNzKTsKLQlnaXRfX2ZyZWUobWF0Y2hfdGd0cyk7CisJZ2l0X19mcmVlKHRndDJzcmMpOworCWdpdF9fZnJlZShzcmMydGd0KTsKKwlnaXRfX2ZyZWUodGd0MnNyY19jb3B5KTsKIAotCWZvciAoaSA9IDA7IGkgPCBzaWdjYWNoZV9zaXplOyArK2kpIHsKLQkJaWYgKHNpZ2NhY2hlW2ldICE9IE5VTEwpCi0JCQlvcHRzLm1ldHJpYy0+ZnJlZV9zaWduYXR1cmUoc2lnY2FjaGVbaV0sIG9wdHMubWV0cmljLT5wYXlsb2FkKTsKKwlmb3IgKHQgPSAwOyB0IDwgbnVtX2RlbHRhcyAqIDI7ICsrdCkgeworCQlpZiAoc2lnY2FjaGVbdF0gIT0gTlVMTCkKKwkJCW9wdHMubWV0cmljLT5mcmVlX3NpZ25hdHVyZShzaWdjYWNoZVt0XSwgb3B0cy5tZXRyaWMtPnBheWxvYWQpOwogCX0KIAlnaXRfX2ZyZWUoc2lnY2FjaGUpOwogCmRpZmYgLS1naXQgYS9zcmMvZGlmZl94ZGlmZi5jIGIvc3JjL2RpZmZfeGRpZmYuYwppbmRleCA3Njk0ZmI5Li5lMGJjMTFmIDEwMDY0NAotLS0gYS9zcmMvZGlmZl94ZGlmZi5jCisrKyBiL3NyYy9kaWZmX3hkaWZmLmMKQEAgLTI0LDI2ICsyNCwyNiBAQAogCXJldHVybiAoZGlnaXRzID4gMCkgPyAwIDogLTE7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X3hkaWZmX3BhcnNlX2h1bmsoZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlLCBjb25zdCBjaGFyICpoZWFkZXIpCitzdGF0aWMgaW50IGdpdF94ZGlmZl9wYXJzZV9odW5rKGdpdF9kaWZmX2h1bmsgKmh1bmssIGNvbnN0IGNoYXIgKmhlYWRlcikKIHsKIAkvKiBleHBlY3Qgc29tZXRoaW5nIG9mIHRoZSBmb3JtICJAQCAtJWRbLCVkXSArJWRbLCVkXSBAQCIgKi8KIAlpZiAoKmhlYWRlciAhPSAnQCcpCiAJCXJldHVybiAtMTsKLQlpZiAoZ2l0X3hkaWZmX3NjYW5faW50KCZoZWFkZXIsICZyYW5nZS0+b2xkX3N0YXJ0KSA8IDApCisJaWYgKGdpdF94ZGlmZl9zY2FuX2ludCgmaGVhZGVyLCAmaHVuay0+b2xkX3N0YXJ0KSA8IDApCiAJCXJldHVybiAtMTsKIAlpZiAoKmhlYWRlciA9PSAnLCcpIHsKLQkJaWYgKGdpdF94ZGlmZl9zY2FuX2ludCgmaGVhZGVyLCAmcmFuZ2UtPm9sZF9saW5lcykgPCAwKQorCQlpZiAoZ2l0X3hkaWZmX3NjYW5faW50KCZoZWFkZXIsICZodW5rLT5vbGRfbGluZXMpIDwgMCkKIAkJCXJldHVybiAtMTsKIAl9IGVsc2UKLQkJcmFuZ2UtPm9sZF9saW5lcyA9IDE7Ci0JaWYgKGdpdF94ZGlmZl9zY2FuX2ludCgmaGVhZGVyLCAmcmFuZ2UtPm5ld19zdGFydCkgPCAwKQorCQlodW5rLT5vbGRfbGluZXMgPSAxOworCWlmIChnaXRfeGRpZmZfc2Nhbl9pbnQoJmhlYWRlciwgJmh1bmstPm5ld19zdGFydCkgPCAwKQogCQlyZXR1cm4gLTE7CiAJaWYgKCpoZWFkZXIgPT0gJywnKSB7Ci0JCWlmIChnaXRfeGRpZmZfc2Nhbl9pbnQoJmhlYWRlciwgJnJhbmdlLT5uZXdfbGluZXMpIDwgMCkKKwkJaWYgKGdpdF94ZGlmZl9zY2FuX2ludCgmaGVhZGVyLCAmaHVuay0+bmV3X2xpbmVzKSA8IDApCiAJCQlyZXR1cm4gLTE7CiAJfSBlbHNlCi0JCXJhbmdlLT5uZXdfbGluZXMgPSAxOwotCWlmIChyYW5nZS0+b2xkX3N0YXJ0IDwgMCB8fCByYW5nZS0+bmV3X3N0YXJ0IDwgMCkKKwkJaHVuay0+bmV3X2xpbmVzID0gMTsKKwlpZiAoaHVuay0+b2xkX3N0YXJ0IDwgMCB8fCBodW5rLT5uZXdfc3RhcnQgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKQEAgLTUxLDM4ICs1MSwxMDQgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCWdpdF94ZGlmZl9vdXRwdXQgKnhvOwotCWdpdF9kaWZmX3BhdGNoICpwYXRjaDsKLQlnaXRfZGlmZl9yYW5nZSByYW5nZTsKKwlnaXRfcGF0Y2ggKnBhdGNoOworCWdpdF9kaWZmX2h1bmsgaHVuazsKKwlpbnQgb2xkX2xpbmVubywgbmV3X2xpbmVubzsKKwltbWZpbGVfdCB4ZF9vbGRfZGF0YSwgeGRfbmV3X2RhdGE7CiB9IGdpdF94ZGlmZl9pbmZvOwogCitzdGF0aWMgaW50IGRpZmZfdXBkYXRlX2xpbmVzKAorCWdpdF94ZGlmZl9pbmZvICppbmZvLAorCWdpdF9kaWZmX2xpbmUgKmxpbmUsCisJY29uc3QgY2hhciAqY29udGVudCwKKwlzaXplX3QgY29udGVudF9sZW4pCit7CisJY29uc3QgY2hhciAqc2NhbiA9IGNvbnRlbnQsICpzY2FuX2VuZCA9IGNvbnRlbnQgKyBjb250ZW50X2xlbjsKKworCWZvciAobGluZS0+bnVtX2xpbmVzID0gMDsgc2NhbiA8IHNjYW5fZW5kOyArK3NjYW4pCisJCWlmICgqc2NhbiA9PSAnXG4nKQorCQkJKytsaW5lLT5udW1fbGluZXM7CisKKwlsaW5lLT5jb250ZW50ICAgICA9IGNvbnRlbnQ7CisJbGluZS0+Y29udGVudF9sZW4gPSBjb250ZW50X2xlbjsKKworCS8qIGV4cGVjdCAiICIvIi0iLyIrIiwgdGhlbiBkYXRhICovCisJc3dpdGNoIChsaW5lLT5vcmlnaW4pIHsKKwljYXNlIEdJVF9ESUZGX0xJTkVfQURESVRJT046CisJY2FzZSBHSVRfRElGRl9MSU5FX0RFTF9FT0ZOTDoKKwkJbGluZS0+b2xkX2xpbmVubyA9IC0xOworCQlsaW5lLT5uZXdfbGluZW5vID0gaW5mby0+bmV3X2xpbmVubzsKKwkJaW5mby0+bmV3X2xpbmVubyArPSAoaW50KWxpbmUtPm51bV9saW5lczsKKwkJYnJlYWs7CisJY2FzZSBHSVRfRElGRl9MSU5FX0RFTEVUSU9OOgorCWNhc2UgR0lUX0RJRkZfTElORV9BRERfRU9GTkw6CisJCWxpbmUtPm9sZF9saW5lbm8gPSBpbmZvLT5vbGRfbGluZW5vOworCQlsaW5lLT5uZXdfbGluZW5vID0gLTE7CisJCWluZm8tPm9sZF9saW5lbm8gKz0gKGludClsaW5lLT5udW1fbGluZXM7CisJCWJyZWFrOworCWNhc2UgR0lUX0RJRkZfTElORV9DT05URVhUOgorCWNhc2UgR0lUX0RJRkZfTElORV9DT05URVhUX0VPRk5MOgorCQlsaW5lLT5vbGRfbGluZW5vID0gaW5mby0+b2xkX2xpbmVubzsKKwkJbGluZS0+bmV3X2xpbmVubyA9IGluZm8tPm5ld19saW5lbm87CisJCWluZm8tPm9sZF9saW5lbm8gKz0gKGludClsaW5lLT5udW1fbGluZXM7CisJCWluZm8tPm5ld19saW5lbm8gKz0gKGludClsaW5lLT5udW1fbGluZXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJVbmtub3duIGRpZmYgbGluZSBvcmlnaW4gJTAyeCIsCisJCQkodW5zaWduZWQgaW50KWxpbmUtPm9yaWdpbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnaXRfeGRpZmZfY2Iodm9pZCAqcHJpdiwgbW1idWZmZXJfdCAqYnVmcywgaW50IGxlbikKIHsKIAlnaXRfeGRpZmZfaW5mbyAqaW5mbyA9IHByaXY7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoID0gaW5mby0+cGF0Y2g7Ci0JY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhID0gZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocGF0Y2gpOworCWdpdF9wYXRjaCAqcGF0Y2ggPSBpbmZvLT5wYXRjaDsKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHBhdGNoKTsKIAlnaXRfZGlmZl9vdXRwdXQgKm91dHB1dCA9ICZpbmZvLT54by0+b3V0cHV0OworCWdpdF9kaWZmX2xpbmUgbGluZTsKIAogCWlmIChsZW4gPT0gMSkgewotCQlvdXRwdXQtPmVycm9yID0gZ2l0X3hkaWZmX3BhcnNlX2h1bmsoJmluZm8tPnJhbmdlLCBidWZzWzBdLnB0cik7CisJCW91dHB1dC0+ZXJyb3IgPSBnaXRfeGRpZmZfcGFyc2VfaHVuaygmaW5mby0+aHVuaywgYnVmc1swXS5wdHIpOwogCQlpZiAob3V0cHV0LT5lcnJvciA8IDApCiAJCQlyZXR1cm4gb3V0cHV0LT5lcnJvcjsKIAorCQlpbmZvLT5odW5rLmhlYWRlcl9sZW4gPSBidWZzWzBdLnNpemU7CisJCWlmIChpbmZvLT5odW5rLmhlYWRlcl9sZW4gPj0gc2l6ZW9mKGluZm8tPmh1bmsuaGVhZGVyKSkKKwkJCWluZm8tPmh1bmsuaGVhZGVyX2xlbiA9IHNpemVvZihpbmZvLT5odW5rLmhlYWRlcikgLSAxOworCQltZW1jcHkoaW5mby0+aHVuay5oZWFkZXIsIGJ1ZnNbMF0ucHRyLCBpbmZvLT5odW5rLmhlYWRlcl9sZW4pOworCQlpbmZvLT5odW5rLmhlYWRlcltpbmZvLT5odW5rLmhlYWRlcl9sZW5dID0gJ1wwJzsKKwogCQlpZiAob3V0cHV0LT5odW5rX2NiICE9IE5VTEwgJiYKLQkJCW91dHB1dC0+aHVua19jYihkZWx0YSwgJmluZm8tPnJhbmdlLAotCQkJCWJ1ZnNbMF0ucHRyLCBidWZzWzBdLnNpemUsIG91dHB1dC0+cGF5bG9hZCkpCisJCQlvdXRwdXQtPmh1bmtfY2IoZGVsdGEsICZpbmZvLT5odW5rLCBvdXRwdXQtPnBheWxvYWQpKQogCQkJb3V0cHV0LT5lcnJvciA9IEdJVF9FVVNFUjsKKworCQlpbmZvLT5vbGRfbGluZW5vID0gaW5mby0+aHVuay5vbGRfc3RhcnQ7CisJCWluZm8tPm5ld19saW5lbm8gPSBpbmZvLT5odW5rLm5ld19zdGFydDsKIAl9CiAKIAlpZiAobGVuID09IDIgfHwgbGVuID09IDMpIHsKIAkJLyogZXhwZWN0ICIgIi8iLSIvIisiLCB0aGVuIGRhdGEgKi8KLQkJY2hhciBvcmlnaW4gPQorCQlsaW5lLm9yaWdpbiA9CiAJCQkoKmJ1ZnNbMF0ucHRyID09ICcrJykgPyBHSVRfRElGRl9MSU5FX0FERElUSU9OIDoKIAkJCSgqYnVmc1swXS5wdHIgPT0gJy0nKSA/IEdJVF9ESUZGX0xJTkVfREVMRVRJT04gOgogCQkJR0lUX0RJRkZfTElORV9DT05URVhUOwogCi0JCWlmIChvdXRwdXQtPmRhdGFfY2IgIT0gTlVMTCAmJgotCQkJb3V0cHV0LT5kYXRhX2NiKGRlbHRhLCAmaW5mby0+cmFuZ2UsCi0JCQkJb3JpZ2luLCBidWZzWzFdLnB0ciwgYnVmc1sxXS5zaXplLCBvdXRwdXQtPnBheWxvYWQpKQorCQlpZiAobGluZS5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9BRERJVElPTikKKwkJCWxpbmUuY29udGVudF9vZmZzZXQgPSBidWZzWzFdLnB0ciAtIGluZm8tPnhkX25ld19kYXRhLnB0cjsKKwkJZWxzZSBpZiAobGluZS5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9ERUxFVElPTikKKwkJCWxpbmUuY29udGVudF9vZmZzZXQgPSBidWZzWzFdLnB0ciAtIGluZm8tPnhkX29sZF9kYXRhLnB0cjsKKwkJZWxzZQorCQkJbGluZS5jb250ZW50X29mZnNldCA9IC0xOworCisJCW91dHB1dC0+ZXJyb3IgPSBkaWZmX3VwZGF0ZV9saW5lcygKKwkJCWluZm8sICZsaW5lLCBidWZzWzFdLnB0ciwgYnVmc1sxXS5zaXplKTsKKworCQlpZiAoIW91dHB1dC0+ZXJyb3IgJiYKKwkJCW91dHB1dC0+ZGF0YV9jYiAhPSBOVUxMICYmCisJCQlvdXRwdXQtPmRhdGFfY2IoZGVsdGEsICZpbmZvLT5odW5rLCAmbGluZSwgb3V0cHV0LT5wYXlsb2FkKSkKIAkJCW91dHB1dC0+ZXJyb3IgPSBHSVRfRVVTRVI7CiAJfQogCkBAIC05MiwyNiArMTU4LDMwIEBACiAJCSAqIElmIHdlIGhhdmUgYSAnLScgYW5kIGEgdGhpcmQgYnVmLCB0aGVuIHdlIGhhdmUgcmVtb3ZlZCBhIGxpbmUKIAkJICogd2l0aCBvdXQgYSBuZXdsaW5lIGJ1dCBhZGRlZCBhIGJsYW5rIGxpbmUsIHNvIEFERF9FT0ZOTC4KIAkJICovCi0JCWNoYXIgb3JpZ2luID0KKwkJbGluZS5vcmlnaW4gPQogCQkJKCpidWZzWzBdLnB0ciA9PSAnKycpID8gR0lUX0RJRkZfTElORV9ERUxfRU9GTkwgOgogCQkJKCpidWZzWzBdLnB0ciA9PSAnLScpID8gR0lUX0RJRkZfTElORV9BRERfRU9GTkwgOgogCQkJR0lUX0RJRkZfTElORV9DT05URVhUX0VPRk5MOwogCi0JCWlmIChvdXRwdXQtPmRhdGFfY2IgIT0gTlVMTCAmJgotCQkJb3V0cHV0LT5kYXRhX2NiKGRlbHRhLCAmaW5mby0+cmFuZ2UsCi0JCQkJb3JpZ2luLCBidWZzWzJdLnB0ciwgYnVmc1syXS5zaXplLCBvdXRwdXQtPnBheWxvYWQpKQorCQlsaW5lLmNvbnRlbnRfb2Zmc2V0ID0gLTE7CisKKwkJb3V0cHV0LT5lcnJvciA9IGRpZmZfdXBkYXRlX2xpbmVzKAorCQkJaW5mbywgJmxpbmUsIGJ1ZnNbMl0ucHRyLCBidWZzWzJdLnNpemUpOworCisJCWlmICghb3V0cHV0LT5lcnJvciAmJgorCQkJb3V0cHV0LT5kYXRhX2NiICE9IE5VTEwgJiYKKwkJCW91dHB1dC0+ZGF0YV9jYihkZWx0YSwgJmluZm8tPmh1bmssICZsaW5lLCBvdXRwdXQtPnBheWxvYWQpKQogCQkJb3V0cHV0LT5lcnJvciA9IEdJVF9FVVNFUjsKIAl9CiAKIAlyZXR1cm4gb3V0cHV0LT5lcnJvcjsKIH0KIAotc3RhdGljIGludCBnaXRfeGRpZmYoZ2l0X2RpZmZfb3V0cHV0ICpvdXRwdXQsIGdpdF9kaWZmX3BhdGNoICpwYXRjaCkKK3N0YXRpYyBpbnQgZ2l0X3hkaWZmKGdpdF9kaWZmX291dHB1dCAqb3V0cHV0LCBnaXRfcGF0Y2ggKnBhdGNoKQogewogCWdpdF94ZGlmZl9vdXRwdXQgKnhvID0gKGdpdF94ZGlmZl9vdXRwdXQgKilvdXRwdXQ7CiAJZ2l0X3hkaWZmX2luZm8gaW5mbzsKIAlnaXRfZGlmZl9maW5kX2NvbnRleHRfcGF5bG9hZCBmaW5kY3R4dDsKLQltbWZpbGVfdCB4ZF9vbGRfZGF0YSwgeGRfbmV3X2RhdGE7CiAKIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CiAJaW5mby5wYXRjaCA9IHBhdGNoOwpAQCAtMTIwLDcgKzE5MCw3IEBACiAJeG8tPmNhbGxiYWNrLnByaXYgPSAmaW5mbzsKIAogCWdpdF9kaWZmX2ZpbmRfY29udGV4dF9pbml0KAotCQkmeG8tPmNvbmZpZy5maW5kX2Z1bmMsICZmaW5kY3R4dCwgZ2l0X2RpZmZfcGF0Y2hfX2RyaXZlcihwYXRjaCkpOworCQkmeG8tPmNvbmZpZy5maW5kX2Z1bmMsICZmaW5kY3R4dCwgZ2l0X3BhdGNoX19kcml2ZXIocGF0Y2gpKTsKIAl4by0+Y29uZmlnLmZpbmRfZnVuY19wcml2ID0gJmZpbmRjdHh0OwogCiAJaWYgKHhvLT5jb25maWcuZmluZF9mdW5jICE9IE5VTEwpCkBAIC0xMzIsMTAgKzIwMiwxMCBAQAogCSAqIHVwZGF0ZXMgYXJlIG5lZWRlZCB0byB4by0+cGFyYW1zLmZsYWdzCiAJICovCiAKLQlnaXRfZGlmZl9wYXRjaF9fb2xkX2RhdGEoJnhkX29sZF9kYXRhLnB0ciwgJnhkX29sZF9kYXRhLnNpemUsIHBhdGNoKTsKLQlnaXRfZGlmZl9wYXRjaF9fbmV3X2RhdGEoJnhkX25ld19kYXRhLnB0ciwgJnhkX25ld19kYXRhLnNpemUsIHBhdGNoKTsKKwlnaXRfcGF0Y2hfX29sZF9kYXRhKCZpbmZvLnhkX29sZF9kYXRhLnB0ciwgJmluZm8ueGRfb2xkX2RhdGEuc2l6ZSwgcGF0Y2gpOworCWdpdF9wYXRjaF9fbmV3X2RhdGEoJmluZm8ueGRfbmV3X2RhdGEucHRyLCAmaW5mby54ZF9uZXdfZGF0YS5zaXplLCBwYXRjaCk7CiAKLQl4ZGxfZGlmZigmeGRfb2xkX2RhdGEsICZ4ZF9uZXdfZGF0YSwKKwl4ZGxfZGlmZigmaW5mby54ZF9vbGRfZGF0YSwgJmluZm8ueGRfbmV3X2RhdGEsCiAJCSZ4by0+cGFyYW1zLCAmeG8tPmNvbmZpZywgJnhvLT5jYWxsYmFjayk7CiAKIAlnaXRfZGlmZl9maW5kX2NvbnRleHRfY2xlYXIoJmZpbmRjdHh0KTsKQEAgLTE0NSw3ICsyMTUsNyBAQAogCiB2b2lkIGdpdF94ZGlmZl9pbml0KGdpdF94ZGlmZl9vdXRwdXQgKnhvLCBjb25zdCBnaXRfZGlmZl9vcHRpb25zICpvcHRzKQogewotCXVpbnQzMl90IGZsYWdzID0gb3B0cyA/IG9wdHMtPmZsYWdzIDogR0lUX0RJRkZfTk9STUFMOworCXVpbnQzMl90IGZsYWdzID0gb3B0cyA/IG9wdHMtPmZsYWdzIDogMDsKIAogCXhvLT5vdXRwdXQuZGlmZl9jYiA9IGdpdF94ZGlmZjsKIApAQCAtMTYxLDYgKzIzMSwxMSBAQAogCWlmIChmbGFncyAmIEdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFX0VPTCkKIAkJeG8tPnBhcmFtcy5mbGFncyB8PSBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MOwogCisJaWYgKGZsYWdzICYgR0lUX0RJRkZfUEFUSUVOQ0UpCisJCXhvLT5wYXJhbXMuZmxhZ3MgfD0gWERGX1BBVElFTkNFX0RJRkY7CisJaWYgKGZsYWdzICYgR0lUX0RJRkZfTUlOSU1BTCkKKwkJeG8tPnBhcmFtcy5mbGFncyB8PSBYREZfTkVFRF9NSU5JTUFMOworCiAJbWVtc2V0KCZ4by0+Y2FsbGJhY2ssIDAsIHNpemVvZih4by0+Y2FsbGJhY2spKTsKIAl4by0+Y2FsbGJhY2sub3V0ZiA9IGdpdF94ZGlmZl9jYjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9lcnJvcnMuYyBiL3NyYy9lcnJvcnMuYwppbmRleCBlMjYyOWY2Li5kMDRkYTRjIDEwMDY0NAotLS0gYS9zcmMvZXJyb3JzLmMKKysrIGIvc3JjL2Vycm9ycy5jCkBAIC0xMTIsOCArMTEyLDI1IEBACiAjZW5kaWYKIH0KIAoraW50IGdpdGVycl9kZXRhY2goZ2l0X2Vycm9yICpjcHkpCit7CisJZ2l0X2Vycm9yICplcnJvciA9IEdJVF9HTE9CQUwtPmxhc3RfZXJyb3I7CisKKwlhc3NlcnQoY3B5KTsKKworCWlmICghZXJyb3IpCisJCXJldHVybiAtMTsKKworCWNweS0+bWVzc2FnZSA9IGVycm9yLT5tZXNzYWdlOworCWNweS0+a2xhc3MgPSBlcnJvci0+a2xhc3M7CisKKwllcnJvci0+bWVzc2FnZSA9IE5VTEw7CisJZ2l0ZXJyX2NsZWFyKCk7CisKKwlyZXR1cm4gMDsKK30KKwogY29uc3QgZ2l0X2Vycm9yICpnaXRlcnJfbGFzdCh2b2lkKQogewogCXJldHVybiBHSVRfR0xPQkFMLT5sYXN0X2Vycm9yOwogfQotCmRpZmYgLS1naXQgYS9zcmMvZmV0Y2guYyBiL3NyYy9mZXRjaC5jCmluZGV4IDAzZmFkNWYuLjI3NjU5MTggMTAwNjQ0Ci0tLSBhL3NyYy9mZXRjaC5jCisrKyBiL3NyYy9mZXRjaC5jCkBAIC0xOSw1NSArMTksNDcgQEAKICNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAicmVmcy5oIgogCi1zdHJ1Y3QgZmlsdGVyX3BheWxvYWQgewotCWdpdF9yZW1vdGUgKnJlbW90ZTsKLQljb25zdCBnaXRfcmVmc3BlYyAqc3BlYywgKnRhZ3NwZWM7Ci0JZ2l0X29kYiAqb2RiOwotCWludCBmb3VuZF9oZWFkOwotfTsKLQotc3RhdGljIGludCBmaWx0ZXJfcmVmX19jYihnaXRfcmVtb3RlX2hlYWQgKmhlYWQsIHZvaWQgKnBheWxvYWQpCitzdGF0aWMgaW50IG1heWJlX3dhbnQoZ2l0X3JlbW90ZSAqcmVtb3RlLCBnaXRfcmVtb3RlX2hlYWQgKmhlYWQsIGdpdF9vZGIgKm9kYiwgZ2l0X3JlZnNwZWMgKnRhZ3NwZWMpCiB7Ci0Jc3RydWN0IGZpbHRlcl9wYXlsb2FkICpwID0gcGF5bG9hZDsKIAlpbnQgbWF0Y2ggPSAwOwogCiAJaWYgKCFnaXRfcmVmZXJlbmNlX2lzX3ZhbGlkX25hbWUoaGVhZC0+bmFtZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKCFwLT5mb3VuZF9oZWFkICYmIHN0cmNtcChoZWFkLT5uYW1lLCBHSVRfSEVBRF9GSUxFKSA9PSAwKQotCQlwLT5mb3VuZF9oZWFkID0gMTsKLQllbHNlIGlmIChwLT5yZW1vdGUtPmRvd25sb2FkX3RhZ3MgPT0gR0lUX1JFTU9URV9ET1dOTE9BRF9UQUdTX0FMTCkgeworCWlmIChyZW1vdGUtPmRvd25sb2FkX3RhZ3MgPT0gR0lUX1JFTU9URV9ET1dOTE9BRF9UQUdTX0FMTCkgewogCQkvKgogCQkgKiBJZiB0YWdvcHQgaXMgLS10YWdzLCB0aGVuIHdlIG9ubHkgdXNlIHRoZSBkZWZhdWx0CiAJCSAqIHRhZ3MgcmVmc3BlYyBhbmQgaWdub3JlIHRoZSByZW1vdGUncwogCQkgKi8KLQkJaWYgKGdpdF9yZWZzcGVjX3NyY19tYXRjaGVzKHAtPnRhZ3NwZWMsIGhlYWQtPm5hbWUpKQorCQlpZiAoZ2l0X3JlZnNwZWNfc3JjX21hdGNoZXModGFnc3BlYywgaGVhZC0+bmFtZSkpCiAJCQltYXRjaCA9IDE7CiAJCWVsc2UKIAkJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoZ2l0X3JlbW90ZV9fbWF0Y2hpbmdfcmVmc3BlYyhwLT5yZW1vdGUsIGhlYWQtPm5hbWUpKQorCX0gZWxzZSBpZiAoZ2l0X3JlbW90ZV9fbWF0Y2hpbmdfcmVmc3BlYyhyZW1vdGUsIGhlYWQtPm5hbWUpKQogCQkJbWF0Y2ggPSAxOwogCiAJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBJZiB3ZSBoYXZlIHRoZSBvYmplY3QsIG1hcmsgaXQgc28gd2UgZG9uJ3QgYXNrIGZvciBpdCAqLwotCWlmIChnaXRfb2RiX2V4aXN0cyhwLT5vZGIsICZoZWFkLT5vaWQpKQorCWlmIChnaXRfb2RiX2V4aXN0cyhvZGIsICZoZWFkLT5vaWQpKQogCQloZWFkLT5sb2NhbCA9IDE7CiAJZWxzZQotCQlwLT5yZW1vdGUtPm5lZWRfcGFjayA9IDE7CisJCXJlbW90ZS0+bmVlZF9wYWNrID0gMTsKIAotCXJldHVybiBnaXRfdmVjdG9yX2luc2VydCgmcC0+cmVtb3RlLT5yZWZzLCBoZWFkKTsKKwlyZXR1cm4gZ2l0X3ZlY3Rvcl9pbnNlcnQoJnJlbW90ZS0+cmVmcywgaGVhZCk7CiB9CiAKIHN0YXRpYyBpbnQgZmlsdGVyX3dhbnRzKGdpdF9yZW1vdGUgKnJlbW90ZSkKIHsKLQlzdHJ1Y3QgZmlsdGVyX3BheWxvYWQgcDsKLQlnaXRfcmVmc3BlYyB0YWdzcGVjOwotCWludCBlcnJvciA9IC0xOworCWdpdF9yZW1vdGVfaGVhZCAqKmhlYWRzOworCWdpdF9yZWZzcGVjIHRhZ3NwZWMsIGhlYWQ7CisJaW50IGVycm9yID0gMDsKKwlnaXRfb2RiICpvZGI7CisJc2l6ZV90IGksIGhlYWRzX2xlbjsKIAogCWdpdF92ZWN0b3JfY2xlYXIoJnJlbW90ZS0+cmVmcyk7Ci0JaWYgKGdpdF9yZWZzcGVjX19wYXJzZSgmdGFnc3BlYywgR0lUX1JFRlNQRUNfVEFHUywgdHJ1ZSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcmVmc3BlY19fcGFyc2UoJnRhZ3NwZWMsIEdJVF9SRUZTUEVDX1RBR1MsIHRydWUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCS8qCkBAIC03NiwxNCArNjgsMjcgQEAKIAkgKiBub3QgaW50ZXJlc3RlZCBpbiBhbnkgcGFydGljdWxhciBicmFuY2ggYnV0IGp1c3QgdGhlIHJlbW90ZSdzCiAJICogSEVBRCwgd2hpY2ggd2lsbCBiZSBzdG9yZWQgaW4gRkVUQ0hfSEVBRCBhZnRlciB0aGUgZmV0Y2guCiAJICovCi0JcC50YWdzcGVjID0gJnRhZ3NwZWM7Ci0JcC5mb3VuZF9oZWFkID0gMDsKLQlwLnJlbW90ZSA9IHJlbW90ZTsKKwlpZiAocmVtb3RlLT5hY3RpdmVfcmVmc3BlY3MubGVuZ3RoID09IDApIHsKKwkJaWYgKChlcnJvciA9IGdpdF9yZWZzcGVjX19wYXJzZSgmaGVhZCwgIkhFQUQiLCB0cnVlKSkgPCAwKQorCQkJZ290byBjbGVhbnVwOwogCi0JaWYgKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmcC5vZGIsIHJlbW90ZS0+cmVwbykgPCAwKQorCQllcnJvciA9IGdpdF9yZWZzcGVjX19kd2ltX29uZSgmcmVtb3RlLT5hY3RpdmVfcmVmc3BlY3MsICZoZWFkLCAmcmVtb3RlLT5yZWZzKTsKKwkJZ2l0X3JlZnNwZWNfX2ZyZWUoJmhlYWQpOworCisJCWlmIChlcnJvciA8IDApCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCByZW1vdGUtPnJlcG8pIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCi0JZXJyb3IgPSBnaXRfcmVtb3RlX2xzKHJlbW90ZSwgZmlsdGVyX3JlZl9fY2IsICZwKTsKKwlpZiAoZ2l0X3JlbW90ZV9scygoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqKikmaGVhZHMsICZoZWFkc19sZW4sIHJlbW90ZSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGVhZHNfbGVuOyBpKyspIHsKKwkJaWYgKChlcnJvciA9IG1heWJlX3dhbnQocmVtb3RlLCBoZWFkc1tpXSwgb2RiLCAmdGFnc3BlYykpIDwgMCkKKwkJCWJyZWFrOworCX0KIAogY2xlYW51cDoKIAlnaXRfcmVmc3BlY19fZnJlZSgmdGFnc3BlYyk7CkBAIC0xMDYsNyArMTExLDcgQEAKIAl9CiAKIAkvKiBEb24ndCB0cnkgdG8gbmVnb3RpYXRlIHdoZW4gd2UgZG9uJ3Qgd2FudCBhbnl0aGluZyAqLwotCWlmIChyZW1vdGUtPnJlZnMubGVuZ3RoID09IDAgfHwgIXJlbW90ZS0+bmVlZF9wYWNrKQorCWlmICghcmVtb3RlLT5uZWVkX3BhY2spCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTExOSwxNSArMTI0LDEzIEBACiAJCXJlbW90ZS0+cmVmcy5sZW5ndGgpOwogfQogCi1pbnQgZ2l0X2ZldGNoX2Rvd25sb2FkX3BhY2soCi0JZ2l0X3JlbW90ZSAqcmVtb3RlLAotCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBwcm9ncmVzc19jYiwKLQl2b2lkICpwcm9ncmVzc19wYXlsb2FkKQoraW50IGdpdF9mZXRjaF9kb3dubG9hZF9wYWNrKGdpdF9yZW1vdGUgKnJlbW90ZSkKIHsKIAlnaXRfdHJhbnNwb3J0ICp0ID0gcmVtb3RlLT50cmFuc3BvcnQ7CiAKIAlpZighcmVtb3RlLT5uZWVkX3BhY2spCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHQtPmRvd25sb2FkX3BhY2sodCwgcmVtb3RlLT5yZXBvLCAmcmVtb3RlLT5zdGF0cywgcHJvZ3Jlc3NfY2IsIHByb2dyZXNzX3BheWxvYWQpOworCXJldHVybiB0LT5kb3dubG9hZF9wYWNrKHQsIHJlbW90ZS0+cmVwbywgJnJlbW90ZS0+c3RhdHMsCisJCQkJcmVtb3RlLT5jYWxsYmFja3MudHJhbnNmZXJfcHJvZ3Jlc3MsIHJlbW90ZS0+Y2FsbGJhY2tzLnBheWxvYWQpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2ZldGNoLmggYi9zcmMvZmV0Y2guaAppbmRleCAwNTkyNTFkLi45NjA1ZGExIDEwMDY0NAotLS0gYS9zcmMvZmV0Y2guaAorKysgYi9zcmMvZmV0Y2guaApAQCAtMTEsMTAgKzExLDcgQEAKIAogaW50IGdpdF9mZXRjaF9uZWdvdGlhdGUoZ2l0X3JlbW90ZSAqcmVtb3RlKTsKIAotaW50IGdpdF9mZXRjaF9kb3dubG9hZF9wYWNrKAotCQlnaXRfcmVtb3RlICpyZW1vdGUsCi0JCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBwcm9ncmVzc19jYiwKLQkJdm9pZCAqcHJvZ3Jlc3NfcGF5bG9hZCk7CitpbnQgZ2l0X2ZldGNoX2Rvd25sb2FkX3BhY2soZ2l0X3JlbW90ZSAqcmVtb3RlKTsKIAogaW50IGdpdF9mZXRjaF9fZG93bmxvYWRfcGFjaygKIAkJZ2l0X3RyYW5zcG9ydCAqdCwKZGlmZiAtLWdpdCBhL3NyYy9mZXRjaGhlYWQuYyBiL3NyYy9mZXRjaGhlYWQuYwppbmRleCA0ZGNlYmI4Li42NzA4OWQxIDEwMDY0NAotLS0gYS9zcmMvZmV0Y2hoZWFkLmMKKysrIGIvc3JjL2ZldGNoaGVhZC5jCkBAIC03NCw2ICs3NCw3IEBACiB7CiAJY2hhciBvaWRbR0lUX09JRF9IRVhTWiArIDFdOwogCWNvbnN0IGNoYXIgKnR5cGUsICpuYW1lOworCWludCBoZWFkID0gMDsKIAogCWFzc2VydChmaWxlICYmIGZldGNoaGVhZF9yZWYpOwogCkBAIC04NywxMSArODgsMTYgQEAKIAkJR0lUX1JFRlNfVEFHU19ESVIpID09IDApIHsKIAkJdHlwZSA9ICJ0YWcgIjsKIAkJbmFtZSA9IGZldGNoaGVhZF9yZWYtPnJlZl9uYW1lICsgc3RybGVuKEdJVF9SRUZTX1RBR1NfRElSKTsKKwl9IGVsc2UgaWYgKCFnaXRfX3N0cmNtcChmZXRjaGhlYWRfcmVmLT5yZWZfbmFtZSwgR0lUX0hFQURfRklMRSkpIHsKKwkJaGVhZCA9IDE7CiAJfSBlbHNlIHsKIAkJdHlwZSA9ICIiOwogCQluYW1lID0gZmV0Y2hoZWFkX3JlZi0+cmVmX25hbWU7CiAJfQogCisJaWYgKGhlYWQpCisJCXJldHVybiBnaXRfZmlsZWJ1Zl9wcmludGYoZmlsZSwgIiVzXHRcdCVzXG4iLCBvaWQsIGZldGNoaGVhZF9yZWYtPnJlbW90ZV91cmwpOworCiAJcmV0dXJuIGdpdF9maWxlYnVmX3ByaW50ZihmaWxlLCAiJXNcdCVzXHQlcyclcycgb2YgJXNcbiIsCiAJCW9pZCwKIAkJKGZldGNoaGVhZF9yZWYtPmlzX21lcmdlKSA/ICIiIDogIm5vdC1mb3ItbWVyZ2UiLApAQCAtMTEyLDcgKzExOCw3IEBACiAJaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX0ZFVENIX0hFQURfRklMRSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFKSA8IDApIHsKKwlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfUkVGU19GSUxFX01PREUpIDwgMCkgewogCQlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTI0LDcgKzEzMCw3IEBACiAJZ2l0X3ZlY3Rvcl9mb3JlYWNoKGZldGNoaGVhZF9yZWZzLCBpLCBmZXRjaGhlYWRfcmVmKQogCQlmZXRjaGhlYWRfcmVmX3dyaXRlKCZmaWxlLCBmZXRjaGhlYWRfcmVmKTsKIAotCXJldHVybiBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUsIEdJVF9SRUZTX0ZJTEVfTU9ERSk7CisJcmV0dXJuIGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSk7CiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hoZWFkX3JlZl9wYXJzZSgKZGlmZiAtLWdpdCBhL3NyYy9maWxlYnVmLmMgYi9zcmMvZmlsZWJ1Zi5jCmluZGV4IDI0NmFlMzQuLjljM2RhZTggMTAwNjQ0Ci0tLSBhL3NyYy9maWxlYnVmLmMKKysrIGIvc3JjL2ZpbGVidWYuYwpAQCAtMTAsOCArMTAsNiBAQAogI2luY2x1ZGUgImZpbGVidWYuaCIKICNpbmNsdWRlICJmaWxlb3BzLmgiCiAKLSNkZWZpbmUgR0lUX0xPQ0tfRklMRV9NT0RFIDA2NDQKLQogc3RhdGljIGNvbnN0IHNpemVfdCBXUklURV9CVUZGRVJfU0laRSA9ICg0MDk2ICogMik7CiAKIGVudW0gYnVmZXJyX3QgewpAQCAtNDQsNyArNDIsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBsb2NrX2ZpbGUoZ2l0X2ZpbGVidWYgKmZpbGUsIGludCBmbGFncykKK3N0YXRpYyBpbnQgbG9ja19maWxlKGdpdF9maWxlYnVmICpmaWxlLCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQogewogCWlmIChnaXRfcGF0aF9leGlzdHMoZmlsZS0+cGF0aF9sb2NrKSA9PSB0cnVlKSB7CiAJCWlmIChmbGFncyAmIEdJVF9GSUxFQlVGX0ZPUkNFKQpAQCAtNTMsMjAgKzUxLDIwIEBACiAJCQlnaXRlcnJfY2xlYXIoKTsgLyogYWN0dWFsIE9TIGVycm9yIGNvZGUganVzdCBjb25mdXNlcyAqLwogCQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsCiAJCQkJIkZhaWxlZCB0byBsb2NrIGZpbGUgJyVzJyBmb3Igd3JpdGluZyIsIGZpbGUtPnBhdGhfbG9jayk7Ci0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gR0lUX0VMT0NLRUQ7CiAJCX0KIAl9CiAKIAkvKiBjcmVhdGUgcGF0aCB0byB0aGUgZmlsZSBidWZmZXIgaXMgcmVxdWlyZWQgKi8KIAlpZiAoZmxhZ3MgJiBHSVRfRklMRUJVRl9GT1JDRSkgewogCQkvKiBYWFg6IFNob3VsZCBkaXJtb2RlIGhlcmUgYmUgY29uZmlndXJhYmxlPyBPciBpcyAwNzc3IGFsd2F5cyBmaW5lPyAqLwotCQlmaWxlLT5mZCA9IGdpdF9mdXRpbHNfY3JlYXRfbG9ja2VkX3dpdGhwYXRoKGZpbGUtPnBhdGhfbG9jaywgMDc3NywgR0lUX0xPQ0tfRklMRV9NT0RFKTsKKwkJZmlsZS0+ZmQgPSBnaXRfZnV0aWxzX2NyZWF0X2xvY2tlZF93aXRocGF0aChmaWxlLT5wYXRoX2xvY2ssIDA3NzcsIG1vZGUpOwogCX0gZWxzZSB7Ci0JCWZpbGUtPmZkID0gZ2l0X2Z1dGlsc19jcmVhdF9sb2NrZWQoZmlsZS0+cGF0aF9sb2NrLCBHSVRfTE9DS19GSUxFX01PREUpOworCQlmaWxlLT5mZCA9IGdpdF9mdXRpbHNfY3JlYXRfbG9ja2VkKGZpbGUtPnBhdGhfbG9jaywgbW9kZSk7CiAJfQogCiAJaWYgKGZpbGUtPmZkIDwgMCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZmlsZS0+ZmQ7CiAKIAlmaWxlLT5mZF9pc19vcGVuID0gdHJ1ZTsKIApAQCAtMTk1LDkgKzE5Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBnaXRfZmlsZWJ1Zl9vcGVuKGdpdF9maWxlYnVmICpmaWxlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCitpbnQgZ2l0X2ZpbGVidWZfb3BlbihnaXRfZmlsZWJ1ZiAqZmlsZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKIHsKLQlpbnQgY29tcHJlc3Npb247CisJaW50IGNvbXByZXNzaW9uLCBlcnJvciA9IC0xOwogCXNpemVfdCBwYXRoX2xlbjsKIAogCS8qIG9wZW5pbmcgYW4gYWxyZWFkeSBvcGVuIGJ1ZmZlciBpcyBhIHByb2dyYW1taW5nIGVycm9yOwpAQCAtMjU1LDcgKzI1Myw3IEBACiAJCWdpdF9idWYgdG1wX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAKIAkJLyogT3BlbiB0aGUgZmlsZSBhcyB0ZW1wb3JhcnkgZm9yIGxvY2tpbmcgKi8KLQkJZmlsZS0+ZmQgPSBnaXRfZnV0aWxzX21rdG1wKCZ0bXBfcGF0aCwgcGF0aCk7CisJCWZpbGUtPmZkID0gZ2l0X2Z1dGlsc19ta3RtcCgmdG1wX3BhdGgsIHBhdGgsIG1vZGUpOwogCiAJCWlmIChmaWxlLT5mZCA8IDApIHsKIAkJCWdpdF9idWZfZnJlZSgmdG1wX3BhdGgpOwpAQCAtMjgyLDcgKzI4MCw3IEBACiAJCW1lbWNweShmaWxlLT5wYXRoX2xvY2sgKyBwYXRoX2xlbiwgR0lUX0ZJTEVMT0NLX0VYVEVOU0lPTiwgR0lUX0ZJTEVMT0NLX0VYVExFTkdUSCk7CiAKIAkJLyogb3BlbiB0aGUgZmlsZSBmb3IgbG9ja2luZyAqLwotCQlpZiAobG9ja19maWxlKGZpbGUsIGZsYWdzKSA8IDApCisJCWlmICgoZXJyb3IgPSBsb2NrX2ZpbGUoZmlsZSwgZmxhZ3MsIG1vZGUpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCkBAIC0yOTAsNyArMjg4LDcgQEAKIAogY2xlYW51cDoKIAlnaXRfZmlsZWJ1Zl9jbGVhbnVwKGZpbGUpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBnaXRfZmlsZWJ1Zl9oYXNoKGdpdF9vaWQgKm9pZCwgZ2l0X2ZpbGVidWYgKmZpbGUpCkBAIC0zMDksMTYgKzMwNywxNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZ2l0X2ZpbGVidWZfY29tbWl0X2F0KGdpdF9maWxlYnVmICpmaWxlLCBjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSkKK2ludCBnaXRfZmlsZWJ1Zl9jb21taXRfYXQoZ2l0X2ZpbGVidWYgKmZpbGUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJZ2l0X19mcmVlKGZpbGUtPnBhdGhfb3JpZ2luYWwpOwogCWZpbGUtPnBhdGhfb3JpZ2luYWwgPSBnaXRfX3N0cmR1cChwYXRoKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MoZmlsZS0+cGF0aF9vcmlnaW5hbCk7CiAKLQlyZXR1cm4gZ2l0X2ZpbGVidWZfY29tbWl0KGZpbGUsIG1vZGUpOworCXJldHVybiBnaXRfZmlsZWJ1Zl9jb21taXQoZmlsZSk7CiB9CiAKLWludCBnaXRfZmlsZWJ1Zl9jb21taXQoZ2l0X2ZpbGVidWYgKmZpbGUsIG1vZGVfdCBtb2RlKQoraW50IGdpdF9maWxlYnVmX2NvbW1pdChnaXRfZmlsZWJ1ZiAqZmlsZSkKIHsKIAkvKiB0ZW1wb3JhcnkgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZCAqLwogCWFzc2VydChmaWxlICYmIGZpbGUtPnBhdGhfb3JpZ2luYWwpOwpAQCAtMzM4LDExICszMzYsNiBAQAogCiAJZmlsZS0+ZmQgPSAtMTsKIAotCWlmIChwX2NobW9kKGZpbGUtPnBhdGhfbG9jaywgbW9kZSkpIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gc2V0IGF0dHJpYnV0ZXMgZm9yIGZpbGUgYXQgJyVzJyIsIGZpbGUtPnBhdGhfbG9jayk7Ci0JCWdvdG8gb25fZXJyb3I7Ci0JfQotCiAJcF91bmxpbmsoZmlsZS0+cGF0aF9vcmlnaW5hbCk7CiAKIAlpZiAocF9yZW5hbWUoZmlsZS0+cGF0aF9sb2NrLCBmaWxlLT5wYXRoX29yaWdpbmFsKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NyYy9maWxlYnVmLmggYi9zcmMvZmlsZWJ1Zi5oCmluZGV4IDgyM2FmODEuLjA0NGFmNTQgMTAwNjQ0Ci0tLSBhL3NyYy9maWxlYnVmLmgKKysrIGIvc3JjL2ZpbGVidWYuaApAQCAtNzcsOSArNzcsOSBAQAogaW50IGdpdF9maWxlYnVmX3Jlc2VydmUoZ2l0X2ZpbGVidWYgKmZpbGUsIHZvaWQgKipidWZmLCBzaXplX3QgbGVuKTsKIGludCBnaXRfZmlsZWJ1Zl9wcmludGYoZ2l0X2ZpbGVidWYgKmZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBHSVRfRk9STUFUX1BSSU5URigyLCAzKTsKIAotaW50IGdpdF9maWxlYnVmX29wZW4oZ2l0X2ZpbGVidWYgKmxvY2ssIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncyk7Ci1pbnQgZ2l0X2ZpbGVidWZfY29tbWl0KGdpdF9maWxlYnVmICpsb2NrLCBtb2RlX3QgbW9kZSk7Ci1pbnQgZ2l0X2ZpbGVidWZfY29tbWl0X2F0KGdpdF9maWxlYnVmICpsb2NrLCBjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSk7CitpbnQgZ2l0X2ZpbGVidWZfb3BlbihnaXRfZmlsZWJ1ZiAqbG9jaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSk7CitpbnQgZ2l0X2ZpbGVidWZfY29tbWl0KGdpdF9maWxlYnVmICpsb2NrKTsKK2ludCBnaXRfZmlsZWJ1Zl9jb21taXRfYXQoZ2l0X2ZpbGVidWYgKmxvY2ssIGNvbnN0IGNoYXIgKnBhdGgpOwogdm9pZCBnaXRfZmlsZWJ1Zl9jbGVhbnVwKGdpdF9maWxlYnVmICpsb2NrKTsKIGludCBnaXRfZmlsZWJ1Zl9oYXNoKGdpdF9vaWQgKm9pZCwgZ2l0X2ZpbGVidWYgKmZpbGUpOwogaW50IGdpdF9maWxlYnVmX2ZsdXNoKGdpdF9maWxlYnVmICpmaWxlKTsKZGlmZiAtLWdpdCBhL3NyYy9maWxlb3BzLmMgYi9zcmMvZmlsZW9wcy5jCmluZGV4IGQ1ZjZhY2YuLjU3NjNiMzcgMTAwNjQ0Ci0tLSBhL3NyYy9maWxlb3BzLmMKKysrIGIvc3JjL2ZpbGVvcHMuYwpAQCAtNiw2ICs2LDcgQEAKICAqLwogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImZpbGVvcHMuaCIKKyNpbmNsdWRlICJnbG9iYWwuaCIKICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIEdJVF9XSU4zMgogI2luY2x1ZGUgIndpbjMyL2ZpbmRmaWxlLmgiCkBAIC0xOCw5ICsxOSwxMiBAQAogCQlHSVRfTUtESVJfUEFUSCB8IEdJVF9NS0RJUl9TS0lQX0xBU1QgfCBHSVRfTUtESVJfVkVSSUZZX0RJUik7CiB9CiAKLWludCBnaXRfZnV0aWxzX21rdG1wKGdpdF9idWYgKnBhdGhfb3V0LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2ludCBnaXRfZnV0aWxzX21rdG1wKGdpdF9idWYgKnBhdGhfb3V0LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgbW9kZV90IG1vZGUpCiB7CiAJaW50IGZkOworCW1vZGVfdCBtYXNrOworCisJcF91bWFzayhtYXNrID0gcF91bWFzaygwKSk7CiAKIAlnaXRfYnVmX3NldHMocGF0aF9vdXQsIGZpbGVuYW1lKTsKIAlnaXRfYnVmX3B1dHMocGF0aF9vdXQsICJfZ2l0Ml9YWFhYWFgiKTsKQEAgLTM0LDYgKzM4LDEyIEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAocF9jaG1vZChwYXRoX291dC0+cHRyLCAobW9kZSAmIH5tYXNrKSkpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsCisJCQkiRmFpbGVkIHRvIHNldCBwZXJtaXNzaW9ucyBvbiBmaWxlICclcyciLCBwYXRoX291dC0+cHRyKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiBmZDsKIH0KIApAQCAtNTUsMjIgKzY1LDEyIEBACiAKIGludCBnaXRfZnV0aWxzX2NyZWF0X2xvY2tlZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBtb2RlX3QgbW9kZSkKIHsKLQlpbnQgZmQ7Ci0KLSNpZmRlZiBHSVRfV0lOMzIKLQl3Y2hhcl90IGJ1ZltHSVRfV0lOX1BBVEhdOwotCi0JZ2l0X191dGY4X3RvXzE2KGJ1ZiwgR0lUX1dJTl9QQVRILCBwYXRoKTsKLQlmZCA9IF93b3BlbihidWYsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMgfAorCWludCBmZCA9IHBfb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwKIAkJT19FWENMIHwgT19CSU5BUlkgfCBPX0NMT0VYRUMsIG1vZGUpOwotI2Vsc2UKLQlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyB8Ci0JCU9fRVhDTCB8IE9fQklOQVJZIHwgT19DTE9FWEVDLCBtb2RlKTsKLSNlbmRpZgogCiAJaWYgKGZkIDwgMCkgewogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byBjcmVhdGUgbG9ja2VkIGZpbGUgJyVzJyIsIHBhdGgpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBlcnJubyA9PSBFRVhJU1QgPyBHSVRfRUxPQ0tFRCA6IC0xOwogCX0KIAogCXJldHVybiBmZDsKQEAgLTg3LDExICs4Nyw4IEBACiBpbnQgZ2l0X2Z1dGlsc19vcGVuX3JvKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJaW50IGZkID0gcF9vcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKSB7Ci0JCWlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5PVERJUikKLQkJCWZkID0gR0lUX0VOT1RGT1VORDsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gb3BlbiAnJXMnIiwgcGF0aCk7Ci0JfQorCWlmIChmZCA8IDApCisJCXJldHVybiBnaXRfcGF0aF9zZXRfZXJyb3IoZXJybm8sIHBhdGgsICJvcGVuIik7CiAJcmV0dXJuIGZkOwogfQogCkBAIC0xMTAsNyArMTA3LDcgQEAKIG1vZGVfdCBnaXRfZnV0aWxzX2Nhbm9uaWNhbF9tb2RlKG1vZGVfdCByYXdfbW9kZSkKIHsKIAlpZiAoU19JU1JFRyhyYXdfbW9kZSkpCi0JCXJldHVybiBTX0lGUkVHIHwgR0lUX0NBTk9OSUNBTF9QRVJNUyhyYXdfbW9kZSk7CisJCXJldHVybiBTX0lGUkVHIHwgR0lUX1BFUk1TX0NBTk9OSUNBTChyYXdfbW9kZSk7CiAJZWxzZSBpZiAoU19JU0xOSyhyYXdfbW9kZSkpCiAJCXJldHVybiBTX0lGTE5LOwogCWVsc2UgaWYgKFNfSVNHSVRMSU5LKHJhd19tb2RlKSkKQEAgLTE1NiwxMSArMTUzLDE2IEBACiAJaWYgKHVwZGF0ZWQgIT0gTlVMTCkKIAkJKnVwZGF0ZWQgPSAwOwogCi0JaWYgKChmZCA9IGdpdF9mdXRpbHNfb3Blbl9ybyhwYXRoKSkgPCAwKQotCQlyZXR1cm4gZmQ7CisJaWYgKHBfc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIGdpdF9wYXRoX3NldF9lcnJvcihlcnJubywgcGF0aCwgInN0YXQiKTsKIAotCWlmIChwX2ZzdGF0KGZkLCAmc3QpIDwgMCB8fCBTX0lTRElSKHN0LnN0X21vZGUpIHx8ICFnaXRfX2lzX3NpemV0KHN0LnN0X3NpemUrMSkpIHsKLQkJcF9jbG9zZShmZCk7CisKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAicmVxdWVzdGVkIGZpbGUgaXMgYSBkaXJlY3RvcnkiKTsKKwkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CisJfQorCisJaWYgKCFnaXRfX2lzX3NpemV0KHN0LnN0X3NpemUrMSkpIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJJbnZhbGlkIHJlZ3VsYXIgZmlsZSBzdGF0IGZvciAnJXMnIiwgcGF0aCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xNzcsNyArMTc5LDYgQEAKIAkJY2hhbmdlZCA9IHRydWU7CiAKIAlpZiAoIWNoYW5nZWQpIHsKLQkJcF9jbG9zZShmZCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTg2LDYgKzE4Nyw5IEBACiAJaWYgKHNpemUgIT0gTlVMTCkKIAkJKnNpemUgPSAoc2l6ZV90KXN0LnN0X3NpemU7CiAKKwlpZiAoKGZkID0gZ2l0X2Z1dGlsc19vcGVuX3JvKHBhdGgpKSA8IDApCisJCXJldHVybiBmZDsKKwogCWlmIChnaXRfZnV0aWxzX3JlYWRidWZmZXJfZmQoYnVmLCBmZCwgKHNpemVfdClzdC5zdF9zaXplKSA8IDApIHsKIAkJcF9jbG9zZShmZCk7CiAJCXJldHVybiAtMTsKQEAgLTIyMiw2ICsyMjYsNyBAQAogCWlmICgoZXJyb3IgPSBwX3dyaXRlKGZkLCBnaXRfYnVmX2NzdHIoYnVmKSwgZ2l0X2J1Zl9sZW4oYnVmKSkpIDwgMCkgewogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIiwgcGF0aCk7CiAJCSh2b2lkKXBfY2xvc2UoZmQpOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJaWYgKChlcnJvciA9IHBfY2xvc2UoZmQpKSA8IDApCkBAIC0zNDcsMTIgKzM1MiwxMSBAQAogCiAJCS8qIG1ha2UgZGlyZWN0b3J5ICovCiAJCWlmIChwX21rZGlyKG1ha2VfcGF0aC5wdHIsIG1vZGUpIDwgMCkgewotCQkJaW50IHRtcF9lcnJubyA9IGVycm5vOworCQkJaW50IHRtcF9lcnJubyA9IGdpdGVycl9zeXN0ZW1fbGFzdCgpOwogCiAJCQkvKiBpZ25vcmUgZXJyb3IgaWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzICovCi0JCQlpZiAocF9zdGF0KG1ha2VfcGF0aC5wdHIsICZzdCkgPCAwIHx8Ci0JCQkJIShTX0lTRElSKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKSB7Ci0JCQkJZXJybm8gPSB0bXBfZXJybm87CisJCQlpZiAocF9zdGF0KG1ha2VfcGF0aC5wdHIsICZzdCkgPCAwIHx8ICFTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQkJZ2l0ZXJyX3N5c3RlbV9zZXQodG1wX2Vycm5vKTsKIAkJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byBtYWtlIGRpcmVjdG9yeSAnJXMnIiwgbWFrZV9wYXRoLnB0cik7CiAJCQkJZ290byBkb25lOwogCQkJfQpAQCAtNDAwLDggKzQwNCwxMSBAQAogCXNpemVfdCBiYXNlbGVuOwogCXVpbnQzMl90IGZsYWdzOwogCWludCBlcnJvcjsKKwlpbnQgZGVwdGg7CiB9IGZ1dGlsc19fcm1kaXJfZGF0YTsKIAorI2RlZmluZSBGVVRJTFNfTUFYX0RFUFRIIDEwMAorCiBzdGF0aWMgaW50IGZ1dGlsc19fZXJyb3JfY2Fubm90X3JtZGlyKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZpbGVtc2cpCiB7CiAJaWYgKGZpbGVtc2cpCkBAIC00NDAsNTEgKzQ0Nyw2MCBAQAogCiBzdGF0aWMgaW50IGZ1dGlsc19fcm1kaXJfcmVjdXJzX2ZvcmVhY2godm9pZCAqb3BhcXVlLCBnaXRfYnVmICpwYXRoKQogewotCXN0cnVjdCBzdGF0IHN0OwogCWZ1dGlsc19fcm1kaXJfZGF0YSAqZGF0YSA9IG9wYXF1ZTsKKwlpbnQgZXJyb3IgPSBkYXRhLT5lcnJvcjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKIAotCWlmICgoZGF0YS0+ZXJyb3IgPSBwX2xzdGF0X3Bvc2l4bHkocGF0aC0+cHRyLCAmc3QpKSA8IDApIHsKKwlpZiAoZGF0YS0+ZGVwdGggPiBGVVRJTFNfTUFYX0RFUFRIKQorCQllcnJvciA9IGZ1dGlsc19fZXJyb3JfY2Fubm90X3JtZGlyKAorCQkJcGF0aC0+cHRyLCAiZGlyZWN0b3J5IG5lc3RpbmcgdG9vIGRlZXAiKTsKKworCWVsc2UgaWYgKChlcnJvciA9IHBfbHN0YXRfcG9zaXhseShwYXRoLT5wdHIsICZzdCkpIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRU5PRU5UKQotCQkJZGF0YS0+ZXJyb3IgPSAwOworCQkJZXJyb3IgPSAwOwogCQllbHNlIGlmIChlcnJubyA9PSBFTk9URElSKSB7CiAJCQkvKiBhc2tlZCB0byByZW1vdmUgYS9iL2MvZC9lIGFuZCBhL2IgaXMgYSBub3JtYWwgZmlsZSAqLwogCQkJaWYgKChkYXRhLT5mbGFncyAmIEdJVF9STURJUl9SRU1PVkVfQkxPQ0tFUlMpICE9IDApCi0JCQkJZGF0YS0+ZXJyb3IgPSBmdXRpbHNfX3JtX2ZpcnN0X3BhcmVudChwYXRoLCBkYXRhLT5iYXNlKTsKKwkJCQllcnJvciA9IGZ1dGlsc19fcm1fZmlyc3RfcGFyZW50KHBhdGgsIGRhdGEtPmJhc2UpOwogCQkJZWxzZQogCQkJCWZ1dGlsc19fZXJyb3JfY2Fubm90X3JtZGlyKAogCQkJCQlwYXRoLT5wdHIsICJwYXJlbnQgaXMgbm90IGRpcmVjdG9yeSIpOwogCQl9CiAJCWVsc2UKLQkJCWZ1dGlsc19fZXJyb3JfY2Fubm90X3JtZGlyKHBhdGgtPnB0ciwgImNhbm5vdCBhY2Nlc3MiKTsKKwkJCWVycm9yID0gZ2l0X3BhdGhfc2V0X2Vycm9yKGVycm5vLCBwYXRoLT5wdHIsICJybWRpciIpOwogCX0KIAogCWVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKLQkJaW50IGVycm9yID0gZ2l0X3BhdGhfZGlyZWFjaChwYXRoLCBmdXRpbHNfX3JtZGlyX3JlY3Vyc19mb3JlYWNoLCBkYXRhKTsKKwkJZGF0YS0+ZGVwdGgrKzsKKworCQllcnJvciA9IGdpdF9wYXRoX2RpcmVhY2gocGF0aCwgMCwgZnV0aWxzX19ybWRpcl9yZWN1cnNfZm9yZWFjaCwgZGF0YSk7CiAJCWlmIChlcnJvciA8IDApCiAJCQlyZXR1cm4gKGVycm9yID09IEdJVF9FVVNFUikgPyBkYXRhLT5lcnJvciA6IGVycm9yOwogCi0JCWRhdGEtPmVycm9yID0gcF9ybWRpcihwYXRoLT5wdHIpOworCQlkYXRhLT5kZXB0aC0tOwogCi0JCWlmIChkYXRhLT5lcnJvciA8IDApIHsKKwkJaWYgKGRhdGEtPmRlcHRoID09IDAgJiYgKGRhdGEtPmZsYWdzICYgR0lUX1JNRElSX1NLSVBfUk9PVCkgIT0gMCkKKwkJCXJldHVybiBkYXRhLT5lcnJvcjsKKworCQlpZiAoKGVycm9yID0gcF9ybWRpcihwYXRoLT5wdHIpKSA8IDApIHsKIAkJCWlmICgoZGF0YS0+ZmxhZ3MgJiBHSVRfUk1ESVJfU0tJUF9OT05FTVBUWSkgIT0gMCAmJgogCQkJCShlcnJubyA9PSBFTk9URU1QVFkgfHwgZXJybm8gPT0gRUVYSVNUIHx8IGVycm5vID09IEVCVVNZKSkKLQkJCQlkYXRhLT5lcnJvciA9IDA7CisJCQkJZXJyb3IgPSAwOwogCQkJZWxzZQotCQkJCWZ1dGlsc19fZXJyb3JfY2Fubm90X3JtZGlyKHBhdGgtPnB0ciwgTlVMTCk7CisJCQkJZXJyb3IgPSBnaXRfcGF0aF9zZXRfZXJyb3IoZXJybm8sIHBhdGgtPnB0ciwgInJtZGlyIik7CiAJCX0KIAl9CiAKIAllbHNlIGlmICgoZGF0YS0+ZmxhZ3MgJiBHSVRfUk1ESVJfUkVNT1ZFX0ZJTEVTKSAhPSAwKSB7Ci0JCWRhdGEtPmVycm9yID0gcF91bmxpbmsocGF0aC0+cHRyKTsKLQotCQlpZiAoZGF0YS0+ZXJyb3IgPCAwKQotCQkJZnV0aWxzX19lcnJvcl9jYW5ub3Rfcm1kaXIocGF0aC0+cHRyLCAiY2Fubm90IGJlIHJlbW92ZWQiKTsKKwkJaWYgKHBfdW5saW5rKHBhdGgtPnB0cikgPCAwKQorCQkJZXJyb3IgPSBnaXRfcGF0aF9zZXRfZXJyb3IoZXJybm8sIHBhdGgtPnB0ciwgInJlbW92ZSIpOwogCX0KIAogCWVsc2UgaWYgKChkYXRhLT5mbGFncyAmIEdJVF9STURJUl9TS0lQX05PTkVNUFRZKSA9PSAwKQotCQlkYXRhLT5lcnJvciA9IGZ1dGlsc19fZXJyb3JfY2Fubm90X3JtZGlyKHBhdGgtPnB0ciwgInN0aWxsIHByZXNlbnQiKTsKKwkJZXJyb3IgPSBmdXRpbHNfX2Vycm9yX2Nhbm5vdF9ybWRpcihwYXRoLT5wdHIsICJzdGlsbCBwcmVzZW50Iik7CiAKLQlyZXR1cm4gZGF0YS0+ZXJyb3I7CisJZGF0YS0+ZXJyb3IgPSBlcnJvcjsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgZnV0aWxzX19ybWRpcl9lbXB0eV9wYXJlbnQodm9pZCAqb3BhcXVlLCBnaXRfYnVmICpwYXRoKQpAQCAtNTA3LDcgKzUyMyw3IEBACiAJCQlnaXRlcnJfY2xlYXIoKTsKIAkJCWVycm9yID0gR0lUX0lURVJPVkVSOwogCQl9IGVsc2UgewotCQkJZnV0aWxzX19lcnJvcl9jYW5ub3Rfcm1kaXIoZ2l0X2J1Zl9jc3RyKHBhdGgpLCBOVUxMKTsKKwkJCWVycm9yID0gZ2l0X3BhdGhfc2V0X2Vycm9yKGVycm5vLCBnaXRfYnVmX2NzdHIocGF0aCksICJybWRpciIpOwogCQl9CiAJfQogCkBAIC01MTksNyArNTM1LDcgQEAKIHsKIAlpbnQgZXJyb3I7CiAJZ2l0X2J1ZiBmdWxscGF0aCA9IEdJVF9CVUZfSU5JVDsKLQlmdXRpbHNfX3JtZGlyX2RhdGEgZGF0YTsKKwlmdXRpbHNfX3JtZGlyX2RhdGEgZGF0YSA9IHsgMCB9OwogCiAJLyogYnVpbGQgcGF0aCBhbmQgZmluZCAicm9vdCIgd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0IGNhbGxpbmcgbWtkaXIgKi8KIAlpZiAoZ2l0X3BhdGhfam9pbl91bnJvb3RlZCgmZnVsbHBhdGgsIHBhdGgsIGJhc2UsIE5VTEwpIDwgMCkKQEAgLTUyOCw3ICs1NDQsNiBAQAogCWRhdGEuYmFzZSAgICA9IGJhc2UgPyBiYXNlIDogIiI7CiAJZGF0YS5iYXNlbGVuID0gYmFzZSA/IHN0cmxlbihiYXNlKSA6IDA7CiAJZGF0YS5mbGFncyAgID0gZmxhZ3M7Ci0JZGF0YS5lcnJvciAgID0gMDsKIAogCWVycm9yID0gZnV0aWxzX19ybWRpcl9yZWN1cnNfZm9yZWFjaCgmZGF0YSwgJmZ1bGxwYXRoKTsKIApAQCAtNTQ2LDQ2ICs1NjEsMTEgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBnaXRfZnV0aWxzX2NsZWFudXBkaXJfcihjb25zdCBjaGFyICpwYXRoKQotewotCWludCBlcnJvcjsKLQlnaXRfYnVmIGZ1bGxwYXRoID0gR0lUX0JVRl9JTklUOwotCWZ1dGlsc19fcm1kaXJfZGF0YSBkYXRhOwotCi0JaWYgKChlcnJvciA9IGdpdF9idWZfcHV0KCZmdWxscGF0aCwgcGF0aCwgc3RybGVuKHBhdGgpKSkgPCAwKQotCQlnb3RvIGNsZWFuX3VwOwotCi0JZGF0YS5iYXNlICAgID0gIiI7Ci0JZGF0YS5iYXNlbGVuID0gMDsKLQlkYXRhLmZsYWdzICAgPSBHSVRfUk1ESVJfUkVNT1ZFX0ZJTEVTOwotCWRhdGEuZXJyb3IgICA9IDA7Ci0KLQlpZiAoIWdpdF9wYXRoX2V4aXN0cyhwYXRoKSkgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIlBhdGggZG9lcyBub3QgZXhpc3Q6ICVzIiAsIHBhdGgpOwotCQllcnJvciA9IEdJVF9FUlJPUjsKLQkJZ290byBjbGVhbl91cDsKLQl9Ci0KLQlpZiAoIWdpdF9wYXRoX2lzZGlyKHBhdGgpKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiUGF0aCBpcyBub3QgYSBkaXJlY3Rvcnk6ICVzIiAsIHBhdGgpOwotCQllcnJvciA9IEdJVF9FUlJPUjsKLQkJZ290byBjbGVhbl91cDsKLQl9Ci0KLQllcnJvciA9IGdpdF9wYXRoX2RpcmVhY2goJmZ1bGxwYXRoLCBmdXRpbHNfX3JtZGlyX3JlY3Vyc19mb3JlYWNoLCAmZGF0YSk7Ci0JaWYgKGVycm9yID09IEdJVF9FVVNFUikKLQkJZXJyb3IgPSBkYXRhLmVycm9yOwotCi1jbGVhbl91cDoKLQlnaXRfYnVmX2ZyZWUoJmZ1bGxwYXRoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIAogc3RhdGljIGludCBnaXRfZnV0aWxzX2d1ZXNzX3N5c3RlbV9kaXJzKGdpdF9idWYgKm91dCkKIHsKICNpZmRlZiBHSVRfV0lOMzIKLQlyZXR1cm4gZ2l0X3dpbjMyX19maW5kX3N5c3RlbV9kaXJzKG91dCk7CisJcmV0dXJuIGdpdF93aW4zMl9fZmluZF9zeXN0ZW1fZGlycyhvdXQsIEwiZXRjXFwiKTsKICNlbHNlCiAJcmV0dXJuIGdpdF9idWZfc2V0cyhvdXQsICIvZXRjIik7CiAjZW5kaWYKQEAgLTYxNywxNyArNTk3LDQ4IEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGludCBnaXRfZnV0aWxzX2d1ZXNzX3RlbXBsYXRlX2RpcnMoZ2l0X2J1ZiAqb3V0KQoreworI2lmZGVmIEdJVF9XSU4zMgorCXJldHVybiBnaXRfd2luMzJfX2ZpbmRfc3lzdGVtX2RpcnMob3V0LCBMInNoYXJlXFxnaXQtY29yZVxcdGVtcGxhdGVzIik7CisjZWxzZQorCXJldHVybiBnaXRfYnVmX3NldHMob3V0LCAiL3Vzci9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMiKTsKKyNlbmRpZgorfQorCiB0eXBlZGVmIGludCAoKmdpdF9mdXRpbHNfZGlyc19ndWVzc19jYikoZ2l0X2J1ZiAqb3V0KTsKIAogc3RhdGljIGdpdF9idWYgZ2l0X2Z1dGlsc19fZGlyc1tHSVRfRlVUSUxTX0RJUl9fTUFYXSA9Ci0JeyBHSVRfQlVGX0lOSVQsIEdJVF9CVUZfSU5JVCwgR0lUX0JVRl9JTklUIH07CisJeyBHSVRfQlVGX0lOSVQsIEdJVF9CVUZfSU5JVCwgR0lUX0JVRl9JTklULCBHSVRfQlVGX0lOSVQgfTsKIAogc3RhdGljIGdpdF9mdXRpbHNfZGlyc19ndWVzc19jYiBnaXRfZnV0aWxzX19kaXJfZ3Vlc3NbR0lUX0ZVVElMU19ESVJfX01BWF0gPSB7CiAJZ2l0X2Z1dGlsc19ndWVzc19zeXN0ZW1fZGlycywKIAlnaXRfZnV0aWxzX2d1ZXNzX2dsb2JhbF9kaXJzLAogCWdpdF9mdXRpbHNfZ3Vlc3NfeGRnX2RpcnMsCisJZ2l0X2Z1dGlsc19ndWVzc190ZW1wbGF0ZV9kaXJzLAogfTsKIAordm9pZCBnaXRfZnV0aWxzX2RpcnNfZ2xvYmFsX3NodXRkb3duKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEdJVF9GVVRJTFNfRElSX19NQVg7ICsraSkKKwkJZ2l0X2J1Zl9mcmVlKCZnaXRfZnV0aWxzX19kaXJzW2ldKTsKK30KKworaW50IGdpdF9mdXRpbHNfZGlyc19nbG9iYWxfaW5pdCh2b2lkKQoreworCWdpdF9mdXRpbHNfZGlyX3QgaTsKKwljb25zdCBnaXRfYnVmICpwYXRoOworCWludCBlcnJvciA9IDA7CisKKwlmb3IgKGkgPSAwOyAhZXJyb3IgJiYgaSA8IEdJVF9GVVRJTFNfRElSX19NQVg7IGkrKykKKwkJZXJyb3IgPSBnaXRfZnV0aWxzX2RpcnNfZ2V0KCZwYXRoLCBpKTsKKworCWdpdF9fb25fc2h1dGRvd24oZ2l0X2Z1dGlsc19kaXJzX2dsb2JhbF9zaHV0ZG93bik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQgZ2l0X2Z1dGlsc19jaGVja19zZWxlY3RvcihnaXRfZnV0aWxzX2Rpcl90IHdoaWNoKQogewogCWlmICh3aGljaCA8IEdJVF9GVVRJTFNfRElSX19NQVgpCkBAIC03MDcsMTMgKzcxOCw2IEBACiAJcmV0dXJuIGdpdF9idWZfb29tKCZnaXRfZnV0aWxzX19kaXJzW3doaWNoXSkgPyAtMSA6IDA7CiB9CiAKLXZvaWQgZ2l0X2Z1dGlsc19kaXJzX2ZyZWUodm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgR0lUX0ZVVElMU19ESVJfX01BWDsgKytpKQotCQlnaXRfYnVmX2ZyZWUoJmdpdF9mdXRpbHNfX2RpcnNbaV0pOwotfQotCiBzdGF0aWMgaW50IGdpdF9mdXRpbHNfZmluZF9pbl9kaXJsaXN0KAogCWdpdF9idWYgKnBhdGgsIGNvbnN0IGNoYXIgKm5hbWUsIGdpdF9mdXRpbHNfZGlyX3Qgd2hpY2gsIGNvbnN0IGNoYXIgKmxhYmVsKQogewpAQCAtNzM0LDcgKzczOCw4IEBACiAJCQljb250aW51ZTsKIAogCQlHSVRFUlJfQ0hFQ0tfRVJST1IoZ2l0X2J1Zl9zZXQocGF0aCwgc2NhbiwgbGVuKSk7Ci0JCUdJVEVSUl9DSEVDS19FUlJPUihnaXRfYnVmX2pvaW5wYXRoKHBhdGgsIHBhdGgtPnB0ciwgbmFtZSkpOworCQlpZiAobmFtZSkKKwkJCUdJVEVSUl9DSEVDS19FUlJPUihnaXRfYnVmX2pvaW5wYXRoKHBhdGgsIHBhdGgtPnB0ciwgbmFtZSkpOwogCiAJCWlmIChnaXRfcGF0aF9leGlzdHMocGF0aC0+cHRyKSkKIAkJCXJldHVybiAwOwpAQCAtNzYzLDYgKzc2OCwxMiBAQAogCQlwYXRoLCBmaWxlbmFtZSwgR0lUX0ZVVElMU19ESVJfWERHLCAiZ2xvYmFsL3hkZyIpOwogfQogCitpbnQgZ2l0X2Z1dGlsc19maW5kX3RlbXBsYXRlX2RpcihnaXRfYnVmICpwYXRoKQoreworCXJldHVybiBnaXRfZnV0aWxzX2ZpbmRfaW5fZGlybGlzdCgKKwkJcGF0aCwgTlVMTCwgR0lUX0ZVVElMU19ESVJfVEVNUExBVEUsICJ0ZW1wbGF0ZSIpOworfQorCiBpbnQgZ2l0X2Z1dGlsc19mYWtlX3N5bWxpbmsoY29uc3QgY2hhciAqb2xkLCBjb25zdCBjaGFyICpuZXcpCiB7CiAJaW50IHJldGNvZGUgPSBHSVRfRVJST1I7CkBAIC04MDcsMTEgKzgxOCw4IEBACiAJCXJldHVybiBpZmQ7CiAKIAlpZiAoKG9mZCA9IHBfb3Blbih0bywgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCBmaWxlbW9kZSkpIDwgMCkgewotCQlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCi0JCQlvZmQgPSBHSVRfRU5PVEZPVU5EOwotCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byBvcGVuICclcycgZm9yIHdyaXRpbmciLCB0byk7CiAJCXBfY2xvc2UoaWZkKTsKLQkJcmV0dXJuIG9mZDsKKwkJcmV0dXJuIGdpdF9wYXRoX3NldF9lcnJvcihlcnJubywgdG8sICJvcGVuIGZvciB3cml0aW5nIik7CiAJfQogCiAJcmV0dXJuIGNwX2J5X2ZkKGlmZCwgb2ZkLCB0cnVlKTsKQEAgLTg1MCw2ICs4NTgsNyBAQAogCXVpbnQzMl90IGZsYWdzOwogCXVpbnQzMl90IG1rZGlyX2ZsYWdzOwogCW1vZGVfdCBkaXJtb2RlOworCWludCBlcnJvcjsKIH0gY3Bfcl9pbmZvOwogCiAjZGVmaW5lIEdJVF9DUERJUl9fTUtESVJfRE9ORV9GT1JfVE9fUk9PVCAoMXUgPDwgMTApCkBAIC04ODgsMjAgKzg5NywyMiBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChnaXRfYnVmX2pvaW5wYXRoKAotCQkJJmluZm8tPnRvLCBpbmZvLT50b19yb290LCBmcm9tLT5wdHIgKyBpbmZvLT5mcm9tX3ByZWZpeCkgPCAwKQotCQlyZXR1cm4gLTE7CisJCQkmaW5mby0+dG8sIGluZm8tPnRvX3Jvb3QsIGZyb20tPnB0ciArIGluZm8tPmZyb21fcHJlZml4KSA8IDApIHsKKwkJZXJyb3IgPSAtMTsKKwkJZ290byBleGl0OworCX0KIAotCWlmIChwX2xzdGF0KGluZm8tPnRvLnB0ciwgJnRvX3N0KSA8IDApIHsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFTk9URElSKSB7Ci0JCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywKLQkJCQkiQ291bGQgbm90IGFjY2VzcyAlcyB3aGlsZSBjb3B5aW5nIGZpbGVzIiwgaW5mby0+dG8ucHRyKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0gZWxzZQorCWlmICghKGVycm9yID0gZ2l0X3BhdGhfbHN0YXQoaW5mby0+dG8ucHRyLCAmdG9fc3QpKSkKIAkJZXhpc3RzID0gdHJ1ZTsKKwllbHNlIGlmIChlcnJvciAhPSBHSVRfRU5PVEZPVU5EKQorCQlnb3RvIGV4aXQ7CisJZWxzZSB7CisJCWdpdGVycl9jbGVhcigpOworCQllcnJvciA9IDA7CisJfQogCiAJaWYgKChlcnJvciA9IGdpdF9wYXRoX2xzdGF0KGZyb20tPnB0ciwgJmZyb21fc3QpKSA8IDApCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBleGl0OwogCiAJaWYgKFNfSVNESVIoZnJvbV9zdC5zdF9tb2RlKSkgewogCQltb2RlX3Qgb2xkbW9kZSA9IGluZm8tPmRpcm1vZGU7CkBAIC05MTUsMTMgKzkyNiwxNyBAQAogCQkJZXJyb3IgPSBfY3Bfcl9ta2RpcihpbmZvLCBmcm9tKTsKIAogCQkvKiByZWN1cnNlIG9udG8gdGFyZ2V0IGRpcmVjdG9yeSAqLwotCQlpZiAoIWVycm9yICYmICghZXhpc3RzIHx8IFNfSVNESVIodG9fc3Quc3RfbW9kZSkpKQotCQkJZXJyb3IgPSBnaXRfcGF0aF9kaXJlYWNoKGZyb20sIF9jcF9yX2NhbGxiYWNrLCBpbmZvKTsKKwkJaWYgKCFlcnJvciAmJiAoIWV4aXN0cyB8fCBTX0lTRElSKHRvX3N0LnN0X21vZGUpKSkgeworCQkJZXJyb3IgPSBnaXRfcGF0aF9kaXJlYWNoKGZyb20sIDAsIF9jcF9yX2NhbGxiYWNrLCBpbmZvKTsKKworCQkJaWYgKGVycm9yID09IEdJVF9FVVNFUikKKwkJCQllcnJvciA9IGluZm8tPmVycm9yOworCQl9CiAKIAkJaWYgKG9sZG1vZGUgIT0gMCkKIAkJCWluZm8tPmRpcm1vZGUgPSBvbGRtb2RlOwogCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBleGl0OwogCX0KIAogCWlmIChleGlzdHMpIHsKQEAgLTkzMSw3ICs5NDYsOCBAQAogCQlpZiAocF91bmxpbmsoaW5mby0+dG8ucHRyKSA8IDApIHsKIAkJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiQ2Fubm90IG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlICclcyciLAogCQkJCWluZm8tPnRvLnB0cik7Ci0JCQlyZXR1cm4gLTE7CisJCQllcnJvciA9IC0xOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC05NDQsNyArOTYwLDcgQEAKIAkvKiBNYWtlIGNvbnRhaW5lciBkaXJlY3Rvcnkgb24gZGVtYW5kIGlmIG5lZWRlZCAqLwogCWlmICgoaW5mby0+ZmxhZ3MgJiBHSVRfQ1BESVJfQ1JFQVRFX0VNUFRZX0RJUlMpID09IDAgJiYKIAkJKGVycm9yID0gX2NwX3JfbWtkaXIoaW5mbywgZnJvbSkpIDwgMCkKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGV4aXQ7CiAKIAkvKiBtYWtlIHN5bWxpbmsgb3IgcmVndWxhciBmaWxlICovCiAJaWYgKFNfSVNMTksoZnJvbV9zdC5zdF9tb2RlKSkKQEAgLTk1MywxMSArOTY5LDEzIEBACiAJCW1vZGVfdCB1c2Vtb2RlID0gZnJvbV9zdC5zdF9tb2RlOwogCiAJCWlmICgoaW5mby0+ZmxhZ3MgJiBHSVRfQ1BESVJfU0lNUExFX1RPX01PREUpICE9IDApCi0JCQl1c2Vtb2RlID0gKHVzZW1vZGUgJiAwMTExKSA/IDA3NzcgOiAwNjY2OworCQkJdXNlbW9kZSA9IEdJVF9QRVJNU19GT1JfV1JJVEUodXNlbW9kZSk7CiAKIAkJZXJyb3IgPSBnaXRfZnV0aWxzX2NwKGZyb20tPnB0ciwgaW5mby0+dG8ucHRyLCB1c2Vtb2RlKTsKIAl9CiAKK2V4aXQ6CisJaW5mby0+ZXJyb3IgPSBlcnJvcjsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTk3OCw2ICs5OTYsNyBAQAogCWluZm8uZmxhZ3MgICA9IGZsYWdzOwogCWluZm8uZGlybW9kZSA9IGRpcm1vZGU7CiAJaW5mby5mcm9tX3ByZWZpeCA9IHBhdGguc2l6ZTsKKwlpbmZvLmVycm9yID0gMDsKIAlnaXRfYnVmX2luaXQoJmluZm8udG8sIDApOwogCiAJLyogcHJlY2FsY3VsYXRlIG1rZGlyIGZsYWdzICovCkBAIC05OTksNiArMTAxOCw5IEBACiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKIAlnaXRfYnVmX2ZyZWUoJmluZm8udG8pOwogCisJaWYgKGVycm9yID09IEdJVF9FVVNFUikKKwkJZXJyb3IgPSBpbmZvLmVycm9yOworCiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9zcmMvZmlsZW9wcy5oIGIvc3JjL2ZpbGVvcHMuaAppbmRleCBmNGUwNTljLi42MzZjOWI2IDEwMDY0NAotLS0gYS9zcmMvZmlsZW9wcy5oCisrKyBiL3NyYy9maWxlb3BzLmgKQEAgLTExNSwxMiArMTE1LDcgQEAKICAqICogR0lUX1JNRElSX0VNUFRZX1BBUkVOVFMgICAtIHJlbW92ZSBjb250YWluaW5nIGRpcmVjdG9yaWVzIHVwIHRvIGJhc2UKICAqICAgICAgIGlmIHJlbW92aW5nIHRoaXMgaXRlbSBsZWF2ZXMgdGhlbSBlbXB0eQogICogKiBHSVRfUk1ESVJfUkVNT1ZFX0JMT0NLRVJTIC0gcmVtb3ZlIGJsb2NraW5nIGZpbGUgdGhhdCBjYXVzZXMgRU5PVERJUgotICoKLSAqIFRoZSBvbGQgdmFsdWVzIHRyYW5zbGF0ZSBpbnRvIHRoZSBuZXcgYXMgZm9sbG93czoKLSAqCi0gKiAqIEdJVF9ESVJSRU1PVkFMX0VNUFRZX0hJRVJBUkNIWSA9PSBHSVRfUk1ESVJfRU1QVFlfSElFUkFSQ0hZCi0gKiAqIEdJVF9ESVJSRU1PVkFMX0ZJTEVTX0FORF9ESVJTICB+PSBHSVRfUk1ESVJfUkVNT1ZFX0ZJTEVTCi0gKiAqIEdJVF9ESVJSRU1PVkFMX09OTFlfRU1QVFlfRElSUyA9PSBHSVRfUk1ESVJfU0tJUF9OT05FTVBUWQorICogKiBHSVRfUk1ESVJfU0tJUF9ST09UICAgICAgIC0gZG9uJ3QgcmVtb3ZlIHJvb3QgZGlyZWN0b3J5IGl0c2VsZgogICovCiB0eXBlZGVmIGVudW0gewogCUdJVF9STURJUl9FTVBUWV9ISUVSQVJDSFkgPSAwLApAQCAtMTI4LDYgKzEyMyw3IEBACiAJR0lUX1JNRElSX1NLSVBfTk9ORU1QVFkgICA9ICgxIDw8IDEpLAogCUdJVF9STURJUl9FTVBUWV9QQVJFTlRTICAgPSAoMSA8PCAyKSwKIAlHSVRfUk1ESVJfUkVNT1ZFX0JMT0NLRVJTID0gKDEgPDwgMyksCisJR0lUX1JNRElSX1NLSVBfUk9PVCAgICAgICA9ICgxIDw8IDQpLAogfSBnaXRfZnV0aWxzX3JtZGlyX2ZsYWdzOwogCiAvKioKQEAgLTE0MSwxOSArMTM3LDExIEBACiBleHRlcm4gaW50IGdpdF9mdXRpbHNfcm1kaXJfcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpiYXNlLCB1aW50MzJfdCBmbGFncyk7CiAKIC8qKgotICogUmVtb3ZlIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYmVuZWF0aCB0aGUgc3BlY2lmaWVkIHBhdGguCi0gKgotICogQHBhcmFtIHBhdGggUGF0aCB0byB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSB0byBwcm9jZXNzLgotICogQHJldHVybiAwIG9uIHN1Y2Nlc3M7IC0xIG9uIGVycm9yLgotICovCi1leHRlcm4gaW50IGdpdF9mdXRpbHNfY2xlYW51cGRpcl9yKGNvbnN0IGNoYXIgKnBhdGgpOwotCi0vKioKICAqIENyZWF0ZSBhbmQgb3BlbiBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYSBgX2dpdDJfYCBzdWZmaXguCiAgKiBXcml0ZXMgdGhlIGZpbGVuYW1lIGludG8gcGF0aF9vdXQuCiAgKiBAcmV0dXJuIE9uIHN1Y2Nlc3MsIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLCBlbHNlIGFuIGVycm9yIGNvZGUgPCAwLgogICovCi1leHRlcm4gaW50IGdpdF9mdXRpbHNfbWt0bXAoZ2l0X2J1ZiAqcGF0aF9vdXQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2V4dGVybiBpbnQgZ2l0X2Z1dGlsc19ta3RtcChnaXRfYnVmICpwYXRoX291dCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIG1vZGVfdCBtb2RlKTsKIAogLyoqCiAgKiBNb3ZlIGEgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbSwgY3JlYXRlIHRoZQpAQCAtMjIzLDkgKzIxMSwxMyBAQAogICovCiBleHRlcm4gZ2l0X29mZl90IGdpdF9mdXRpbHNfZmlsZXNpemUoZ2l0X2ZpbGUgZmQpOwogCisjZGVmaW5lIEdJVF9QRVJNU19JU19FWEVDKE1PREUpCQkoKChNT0RFKSAmIDAxMTEpICE9IDApCisjZGVmaW5lIEdJVF9QRVJNU19DQU5PTklDQUwoTU9ERSkJKEdJVF9QRVJNU19JU19FWEVDKE1PREUpID8gMDc1NSA6IDA2NDQpCisjZGVmaW5lIEdJVF9QRVJNU19GT1JfV1JJVEUoTU9ERSkgICAoR0lUX1BFUk1TX0lTX0VYRUMoTU9ERSkgPyAwNzc3IDogMDY2NikKKwogI2RlZmluZSBHSVRfTU9ERV9QRVJNU19NQVNLCQkJMDc3NwotI2RlZmluZSBHSVRfQ0FOT05JQ0FMX1BFUk1TKE1PREUpCSgoKE1PREUpICYgMDEwMCkgPyAwNzU1IDogMDY0NCkKLSNkZWZpbmUgR0lUX01PREVfVFlQRShNT0RFKQkJCSgoTU9ERSkgJiB+R0lUX01PREVfUEVSTVNfTUFTSykKKyNkZWZpbmUgR0lUX01PREVfVFlQRV9NQVNLCQkJMDE3MDAwMAorI2RlZmluZSBHSVRfTU9ERV9UWVBFKE1PREUpCQkJKChNT0RFKSAmIEdJVF9NT0RFX1RZUEVfTUFTSykKICNkZWZpbmUgR0lUX01PREVfSVNCTE9CKE1PREUpCQkoR0lUX01PREVfVFlQRShNT0RFKSA9PSBHSVRfTU9ERV9UWVBFKEdJVF9GSUxFTU9ERV9CTE9CKSkKIAogLyoqCkBAIC0yNDQsNyArMjM2LDcgQEAKICAqIEBwYXJhbSBvdXQgYnVmZmVyIHRvIHBvcHVsYXRlIHdpdGggdGhlIG1hcHBpbmcgaW5mb3JtYXRpb24uCiAgKiBAcGFyYW0gZmQgb3BlbiBkZXNjcmlwdG9yIHRvIGNvbmZpZ3VyZSB0aGUgbWFwcGluZyBmcm9tLgogICogQHBhcmFtIGJlZ2luIGZpcnN0IGJ5dGUgdG8gbWFwLCB0aGlzIHNob3VsZCBiZSBwYWdlIGFsaWduZWQuCi0gKiBAcGFyYW0gZW5kIG51bWJlciBvZiBieXRlcyB0byBtYXAuCisgKiBAcGFyYW0gbGVuIG51bWJlciBvZiBieXRlcyB0byBtYXAuCiAgKiBAcmV0dXJuCiAgKiAtIDAgb24gc3VjY2VzczsKICAqIC0gLTEgb24gZXJyb3IuCkBAIC0yNzgsNyArMjcwLDcgQEAKIC8qKgogICogRmluZCBhICJnbG9iYWwiIGZpbGUgKGkuZS4gb25lIGluIGEgdXNlcidzIGhvbWUgZGlyZWN0b3J5KS4KICAqCi0gKiBAcGFyYW0gcGF0aGJ1ZiBidWZmZXIgdG8gd3JpdGUgdGhlIGZ1bGwgcGF0aCBpbnRvCisgKiBAcGFyYW0gcGF0aCBidWZmZXIgdG8gd3JpdGUgdGhlIGZ1bGwgcGF0aCBpbnRvCiAgKiBAcGFyYW0gZmlsZW5hbWUgbmFtZSBvZiBmaWxlIHRvIGZpbmQgaW4gdGhlIGhvbWUgZGlyZWN0b3J5CiAgKiBAcmV0dXJuIDAgaWYgZm91bmQsIEdJVF9FTk9URk9VTkQgaWYgbm90IGZvdW5kLCBvciAtMSBvbiBvdGhlciBPUyBlcnJvcgogICovCkBAIC0yODcsNyArMjc5LDcgQEAKIC8qKgogICogRmluZCBhbiAiWERHIiBmaWxlIChpLmUuIG9uZSBpbiB1c2VyJ3MgWERHIGNvbmZpZyBwYXRoKS4KICAqCi0gKiBAcGFyYW0gcGF0aGJ1ZiBidWZmZXIgdG8gd3JpdGUgdGhlIGZ1bGwgcGF0aCBpbnRvCisgKiBAcGFyYW0gcGF0aCBidWZmZXIgdG8gd3JpdGUgdGhlIGZ1bGwgcGF0aCBpbnRvCiAgKiBAcGFyYW0gZmlsZW5hbWUgbmFtZSBvZiBmaWxlIHRvIGZpbmQgaW4gdGhlIGhvbWUgZGlyZWN0b3J5CiAgKiBAcmV0dXJuIDAgaWYgZm91bmQsIEdJVF9FTk9URk9VTkQgaWYgbm90IGZvdW5kLCBvciAtMSBvbiBvdGhlciBPUyBlcnJvcgogICovCkBAIC0yOTYsMjAgKzI4OCwzNiBAQAogLyoqCiAgKiBGaW5kIGEgInN5c3RlbSIgZmlsZSAoaS5lLiBvbmUgc2hhcmVkIGZvciBhbGwgdXNlcnMgb2YgdGhlIHN5c3RlbSkuCiAgKgotICogQHBhcmFtIHBhdGhidWYgYnVmZmVyIHRvIHdyaXRlIHRoZSBmdWxsIHBhdGggaW50bworICogQHBhcmFtIHBhdGggYnVmZmVyIHRvIHdyaXRlIHRoZSBmdWxsIHBhdGggaW50bwogICogQHBhcmFtIGZpbGVuYW1lIG5hbWUgb2YgZmlsZSB0byBmaW5kIGluIHRoZSBob21lIGRpcmVjdG9yeQogICogQHJldHVybiAwIGlmIGZvdW5kLCBHSVRfRU5PVEZPVU5EIGlmIG5vdCBmb3VuZCwgb3IgLTEgb24gb3RoZXIgT1MgZXJyb3IKICAqLwogZXh0ZXJuIGludCBnaXRfZnV0aWxzX2ZpbmRfc3lzdGVtX2ZpbGUoZ2l0X2J1ZiAqcGF0aCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogCisvKioKKyAqIEZpbmQgdGVtcGxhdGUgZGlyZWN0b3J5LgorICoKKyAqIEBwYXJhbSBwYXRoIGJ1ZmZlciB0byB3cml0ZSB0aGUgZnVsbCBwYXRoIGludG8KKyAqIEByZXR1cm4gMCBpZiBmb3VuZCwgR0lUX0VOT1RGT1VORCBpZiBub3QgZm91bmQsIG9yIC0xIG9uIG90aGVyIE9TIGVycm9yCisgKi8KK2V4dGVybiBpbnQgZ2l0X2Z1dGlsc19maW5kX3RlbXBsYXRlX2RpcihnaXRfYnVmICpwYXRoKTsKKwogdHlwZWRlZiBlbnVtIHsKIAlHSVRfRlVUSUxTX0RJUl9TWVNURU0gPSAwLAogCUdJVF9GVVRJTFNfRElSX0dMT0JBTCA9IDEsCiAJR0lUX0ZVVElMU19ESVJfWERHICAgID0gMiwKLQlHSVRfRlVUSUxTX0RJUl9fTUFYICAgPSAzLAorCUdJVF9GVVRJTFNfRElSX1RFTVBMQVRFID0gMywKKwlHSVRfRlVUSUxTX0RJUl9fTUFYICAgPSA0LAogfSBnaXRfZnV0aWxzX2Rpcl90OwogCiAvKioKKyAqIENvbmZpZ3VyZXMgZ2xvYmFsIGRhdGEgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWFyY2ggcGF0aHMuCisgKgorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUKKyAqLworZXh0ZXJuIGludCBnaXRfZnV0aWxzX2RpcnNfZ2xvYmFsX2luaXQodm9pZCk7CisKKy8qKgogICogR2V0IHRoZSBzZWFyY2ggcGF0aCBmb3IgZ2xvYmFsL3N5c3RlbS94ZGcgZmlsZXMKICAqCiAgKiBAcGFyYW0gb3V0IHBvaW50ZXIgdG8gZ2l0X2J1ZiBjb250YWluaW5nIHNlYXJjaCBwYXRoCkBAIC0zNDMsMTEgKzM1MSw2IEBACiBleHRlcm4gaW50IGdpdF9mdXRpbHNfZGlyc19zZXQoZ2l0X2Z1dGlsc19kaXJfdCB3aGljaCwgY29uc3QgY2hhciAqcGF0aHMpOwogCiAvKioKLSAqIFJlbGVhc2UgLyByZXNldCBhbGwgc2VhcmNoIHBhdGhzCi0gKi8KLWV4dGVybiB2b2lkIGdpdF9mdXRpbHNfZGlyc19mcmVlKHZvaWQpOwotCi0vKioKICAqIENyZWF0ZSBhICJmYWtlIiBzeW1saW5rICh0ZXh0IGZpbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHBhdGgpLgogICoKICAqIEBwYXJhbSBuZXcgc3ltbGluayBmaWxlIHRvIGJlIGNyZWF0ZWQKQEAgLTM5Niw0ICszOTksOSBAQAogZXh0ZXJuIHZvaWQgZ2l0X2Z1dGlsc19maWxlc3RhbXBfc2V0KAogCWdpdF9mdXRpbHNfZmlsZXN0YW1wICp0Z3QsIGNvbnN0IGdpdF9mdXRpbHNfZmlsZXN0YW1wICpzcmMpOwogCisvKioKKyAqIEZyZWUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWFyY2ggcGF0aHMuCisgKi8KK2V4dGVybiB2b2lkIGdpdF9mdXRpbHNfZGlyc19nbG9iYWxfc2h1dGRvd24odm9pZCk7CisKICNlbmRpZiAvKiBJTkNMVURFX2ZpbGVvcHNfaF9fICovCmRpZmYgLS1naXQgYS9zcmMvZmlsdGVyLmMgYi9zcmMvZmlsdGVyLmMKaW5kZXggOWY3NDlkYy4uOWY4NjZmZSAxMDA2NDQKLS0tIGEvc3JjL2ZpbHRlci5jCisrKyBiL3NyYy9maWx0ZXIuYwpAQCAtMTAsNjggKzEwLDU5NCBAQAogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisjaW5jbHVkZSAiZ2l0Mi9zeXMvZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2l0Mi9jb25maWcuaCIKICNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYXR0cl9maWxlLmgiCisjaW5jbHVkZSAiYXJyYXkuaCIKIAotaW50IGdpdF9maWx0ZXJzX2xvYWQoZ2l0X3ZlY3RvciAqZmlsdGVycywgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlKQorc3RydWN0IGdpdF9maWx0ZXJfc291cmNlIHsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwljb25zdCBjaGFyICAgICAqcGF0aDsKKwlnaXRfb2lkICAgICAgICAgb2lkOyAgLyogemVybyBpZiB1bmtub3duICh3aGljaCBpcyBsaWtlbHkpICovCisJdWludDE2X3QgICAgICAgIGZpbGVtb2RlOyAvKiB6ZXJvIGlmIHVua25vd24gKi8KKwlnaXRfZmlsdGVyX21vZGVfdCBtb2RlOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWdpdF9maWx0ZXIgKmZpbHRlcjsKKwl2b2lkICpwYXlsb2FkOworfSBnaXRfZmlsdGVyX2VudHJ5OworCitzdHJ1Y3QgZ2l0X2ZpbHRlcl9saXN0IHsKKwlnaXRfYXJyYXlfdChnaXRfZmlsdGVyX2VudHJ5KSBmaWx0ZXJzOworCWdpdF9maWx0ZXJfc291cmNlIHNvdXJjZTsKKwljaGFyIHBhdGhbR0lUX0ZMRVhfQVJSQVldOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmZpbHRlcl9uYW1lOworCWdpdF9maWx0ZXIgKmZpbHRlcjsKKwlpbnQgcHJpb3JpdHk7CisJaW50IGluaXRpYWxpemVkOworCXNpemVfdCBuYXR0cnMsIG5tYXRjaGVzOworCWNoYXIgKmF0dHJkYXRhOworCWNvbnN0IGNoYXIgKmF0dHJzW0dJVF9GTEVYX0FSUkFZXTsKK30gZ2l0X2ZpbHRlcl9kZWY7CisKK3N0YXRpYyBpbnQgZmlsdGVyX2RlZl9wcmlvcml0eV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlpbnQgcGEgPSAoKGNvbnN0IGdpdF9maWx0ZXJfZGVmICopYSktPnByaW9yaXR5OworCWludCBwYiA9ICgoY29uc3QgZ2l0X2ZpbHRlcl9kZWYgKiliKS0+cHJpb3JpdHk7CisJcmV0dXJuIChwYSA8IHBiKSA/IC0xIDogKHBhID4gcGIpID8gMSA6IDA7Cit9CisKK3N0cnVjdCBmaWx0ZXJfcmVnaXN0cnkgeworCWdpdF92ZWN0b3IgZmlsdGVyczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX3JlZ2lzdHJ5ICpnaXRfX2ZpbHRlcl9yZWdpc3RyeSA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9yZWdpc3RyeV9zaHV0ZG93bih2b2lkKQoreworCXN0cnVjdCBmaWx0ZXJfcmVnaXN0cnkgKnJlZyA9IE5VTEw7CisJc2l6ZV90IHBvczsKKwlnaXRfZmlsdGVyX2RlZiAqZmRlZjsKKworCWlmICgocmVnID0gZ2l0X19zd2FwKGdpdF9fZmlsdGVyX3JlZ2lzdHJ5LCBOVUxMKSkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZyZWctPmZpbHRlcnMsIHBvcywgZmRlZikgeworCQlpZiAoZmRlZi0+aW5pdGlhbGl6ZWQgJiYgZmRlZi0+ZmlsdGVyICYmIGZkZWYtPmZpbHRlci0+c2h1dGRvd24pIHsKKwkJCWZkZWYtPmZpbHRlci0+c2h1dGRvd24oZmRlZi0+ZmlsdGVyKTsKKwkJCWZkZWYtPmluaXRpYWxpemVkID0gZmFsc2U7CisJCX0KKworCQlnaXRfX2ZyZWUoZmRlZi0+YXR0cmRhdGEpOworCQlnaXRfX2ZyZWUoZmRlZik7CisJfQorCisJZ2l0X3ZlY3Rvcl9mcmVlKCZyZWctPmZpbHRlcnMpOworCWdpdF9fZnJlZShyZWcpOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9yZWdpc3RyeV9pbml0aWFsaXplKHZvaWQpCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgZmlsdGVyX3JlZ2lzdHJ5ICpyZWc7CisKKwlpZiAoZ2l0X19maWx0ZXJfcmVnaXN0cnkpCisJCXJldHVybiAwOworCisJcmVnID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBmaWx0ZXJfcmVnaXN0cnkpKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVnKTsKKworCWlmICgoZXJyb3IgPSBnaXRfdmVjdG9yX2luaXQoCisJCQkmcmVnLT5maWx0ZXJzLCAyLCBmaWx0ZXJfZGVmX3ByaW9yaXR5X2NtcCkpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJcmVnID0gZ2l0X19jb21wYXJlX2FuZF9zd2FwKCZnaXRfX2ZpbHRlcl9yZWdpc3RyeSwgTlVMTCwgcmVnKTsKKwlpZiAocmVnICE9IE5VTEwpCisJCWdvdG8gY2xlYW51cDsKKworCWdpdF9fb25fc2h1dGRvd24oZmlsdGVyX3JlZ2lzdHJ5X3NodXRkb3duKTsKKworCS8qIHRyeSB0byByZWdpc3RlciBib3RoIGRlZmF1bHQgZmlsdGVycyAqLworCXsKKwkJZ2l0X2ZpbHRlciAqY3JsZiA9IGdpdF9jcmxmX2ZpbHRlcl9uZXcoKTsKKwkJZ2l0X2ZpbHRlciAqaWRlbnQgPSBnaXRfaWRlbnRfZmlsdGVyX25ldygpOworCisJCWlmIChjcmxmICYmIGdpdF9maWx0ZXJfcmVnaXN0ZXIoCisJCQkJR0lUX0ZJTFRFUl9DUkxGLCBjcmxmLCBHSVRfRklMVEVSX0NSTEZfUFJJT1JJVFkpIDwgMCkKKwkJCWNybGYgPSBOVUxMOworCQlpZiAoaWRlbnQgJiYgZ2l0X2ZpbHRlcl9yZWdpc3RlcigKKwkJCQlHSVRfRklMVEVSX0lERU5ULCBpZGVudCwgR0lUX0ZJTFRFUl9JREVOVF9QUklPUklUWSkgPCAwKQorCQkJaWRlbnQgPSBOVUxMOworCisJCWlmICghY3JsZiB8fCAhaWRlbnQpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJZ2l0X3ZlY3Rvcl9mcmVlKCZyZWctPmZpbHRlcnMpOworCWdpdF9fZnJlZShyZWcpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBmaWx0ZXJfZGVmX3NjYW5fYXR0cnMoCisJZ2l0X2J1ZiAqYXR0cnMsIHNpemVfdCAqbmF0dHIsIHNpemVfdCAqbm1hdGNoLCBjb25zdCBjaGFyICphdHRyX3N0cikKK3sKKwljb25zdCBjaGFyICpzdGFydCwgKnNjYW4gPSBhdHRyX3N0cjsKKwlpbnQgaGFzX2VxOworCisJKm5hdHRyID0gKm5tYXRjaCA9IDA7CisKKwlpZiAoIXNjYW4pCisJCXJldHVybiAwOworCisJd2hpbGUgKCpzY2FuKSB7CisJCXdoaWxlIChnaXRfX2lzc3BhY2UoKnNjYW4pKSBzY2FuKys7CisKKwkJZm9yIChzdGFydCA9IHNjYW4sIGhhc19lcSA9IDA7ICpzY2FuICYmICFnaXRfX2lzc3BhY2UoKnNjYW4pOyArK3NjYW4pIHsKKwkJCWlmICgqc2NhbiA9PSAnPScpCisJCQkJaGFzX2VxID0gMTsKKwkJfQorCisJCWlmIChzY2FuID4gc3RhcnQpIHsKKwkJCSgqbmF0dHIpKys7CisJCQlpZiAoaGFzX2VxIHx8ICpzdGFydCA9PSAnLScgfHwgKnN0YXJ0ID09ICcrJyB8fCAqc3RhcnQgPT0gJyEnKQorCQkJCSgqbm1hdGNoKSsrOworCisJCQlpZiAoaGFzX2VxKQorCQkJCWdpdF9idWZfcHV0YyhhdHRycywgJz0nKTsKKwkJCWdpdF9idWZfcHV0KGF0dHJzLCBzdGFydCwgc2NhbiAtIHN0YXJ0KTsKKwkJCWdpdF9idWZfcHV0YyhhdHRycywgJ1wwJyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX2RlZl9zZXRfYXR0cnMoZ2l0X2ZpbHRlcl9kZWYgKmZkZWYpCit7CisJY2hhciAqc2NhbiA9IGZkZWYtPmF0dHJkYXRhOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGZkZWYtPm5hdHRyczsgKytpKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUsICp2YWx1ZTsKKworCQlzd2l0Y2ggKCpzY2FuKSB7CisJCWNhc2UgJz0nOgorCQkJbmFtZSA9IHNjYW4gKyAxOworCQkJZm9yIChzY2FuKys7ICpzY2FuICE9ICc9Jzsgc2NhbisrKSAvKiBmaW5kICc9JyAqLzsKKwkJCSpzY2FuKysgPSAnXDAnOworCQkJdmFsdWUgPSBzY2FuOworCQkJYnJlYWs7CisJCWNhc2UgJy0nOgorCQkJbmFtZSA9IHNjYW4gKyAxOyB2YWx1ZSA9IGdpdF9hdHRyX19mYWxzZTsgYnJlYWs7CisJCWNhc2UgJysnOgorCQkJbmFtZSA9IHNjYW4gKyAxOyB2YWx1ZSA9IGdpdF9hdHRyX190cnVlOyAgYnJlYWs7CisJCWNhc2UgJyEnOgorCQkJbmFtZSA9IHNjYW4gKyAxOyB2YWx1ZSA9IGdpdF9hdHRyX191bnNldDsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluYW1lID0gc2NhbjsgICAgIHZhbHVlID0gTlVMTDsgYnJlYWs7CisJCX0KKworCQlmZGVmLT5hdHRyc1tpXSA9IG5hbWU7CisJCWZkZWYtPmF0dHJzW2kgKyBmZGVmLT5uYXR0cnNdID0gdmFsdWU7CisKKwkJc2NhbiArPSBzdHJsZW4oc2NhbikgKyAxOworCX0KK30KKworc3RhdGljIGludCBmaWx0ZXJfZGVmX25hbWVfa2V5X2NoZWNrKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqZmRlZikKK3sKKwljb25zdCBjaGFyICpuYW1lID0KKwkJZmRlZiA/ICgoY29uc3QgZ2l0X2ZpbHRlcl9kZWYgKilmZGVmKS0+ZmlsdGVyX25hbWUgOiBOVUxMOworCXJldHVybiBuYW1lID8gZ2l0X19zdHJjbXAoa2V5LCBuYW1lKSA6IC0xOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9kZWZfZmlsdGVyX2tleV9jaGVjayhjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmZkZWYpCit7CisJY29uc3Qgdm9pZCAqZmlsdGVyID0gZmRlZiA/ICgoY29uc3QgZ2l0X2ZpbHRlcl9kZWYgKilmZGVmKS0+ZmlsdGVyIDogTlVMTDsKKwlyZXR1cm4gKGtleSA9PSBmaWx0ZXIpID8gMCA6IC0xOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9yZWdpc3RyeV9maW5kKHNpemVfdCAqcG9zLCBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBnaXRfdmVjdG9yX3NlYXJjaDIoCisJCXBvcywgJmdpdF9fZmlsdGVyX3JlZ2lzdHJ5LT5maWx0ZXJzLCBmaWx0ZXJfZGVmX25hbWVfa2V5X2NoZWNrLCBuYW1lKTsKK30KKworc3RhdGljIGdpdF9maWx0ZXJfZGVmICpmaWx0ZXJfcmVnaXN0cnlfbG9va3VwKHNpemVfdCAqcG9zLCBjb25zdCBjaGFyICpuYW1lKQoreworCWdpdF9maWx0ZXJfZGVmICpmZGVmID0gTlVMTDsKKworCWlmICghZmlsdGVyX3JlZ2lzdHJ5X2ZpbmQocG9zLCBuYW1lKSkKKwkJZmRlZiA9IGdpdF92ZWN0b3JfZ2V0KCZnaXRfX2ZpbHRlcl9yZWdpc3RyeS0+ZmlsdGVycywgKnBvcyk7CisKKwlyZXR1cm4gZmRlZjsKK30KKworaW50IGdpdF9maWx0ZXJfcmVnaXN0ZXIoCisJY29uc3QgY2hhciAqbmFtZSwgZ2l0X2ZpbHRlciAqZmlsdGVyLCBpbnQgcHJpb3JpdHkpCit7CisJZ2l0X2ZpbHRlcl9kZWYgKmZkZWY7CisJc2l6ZV90IG5hdHRyID0gMCwgbm1hdGNoID0gMDsKKwlnaXRfYnVmIGF0dHJzID0gR0lUX0JVRl9JTklUOworCisJaWYgKGZpbHRlcl9yZWdpc3RyeV9pbml0aWFsaXplKCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbHRlcl9yZWdpc3RyeV9maW5kKE5VTEwsIG5hbWUpKSB7CisJCWdpdGVycl9zZXQoCisJCQlHSVRFUlJfRklMVEVSLCAiQXR0ZW1wdCB0byByZXJlZ2lzdGVyIGV4aXN0aW5nIGZpbHRlciAnJXMnIiwgbmFtZSk7CisJCXJldHVybiBHSVRfRUVYSVNUUzsKKwl9CisKKwlpZiAoZmlsdGVyX2RlZl9zY2FuX2F0dHJzKCZhdHRycywgJm5hdHRyLCAmbm1hdGNoLCBmaWx0ZXItPmF0dHJpYnV0ZXMpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZmRlZiA9IGdpdF9fY2FsbG9jKAorCQlzaXplb2YoZ2l0X2ZpbHRlcl9kZWYpICsgMiAqIG5hdHRyICogc2l6ZW9mKGNoYXIgKiksIDEpOworCUdJVEVSUl9DSEVDS19BTExPQyhmZGVmKTsKKworCWZkZWYtPmZpbHRlcl9uYW1lID0gbmFtZTsKKwlmZGVmLT5maWx0ZXIgICAgICA9IGZpbHRlcjsKKwlmZGVmLT5wcmlvcml0eSAgICA9IHByaW9yaXR5OworCWZkZWYtPm5hdHRycyAgICAgID0gbmF0dHI7CisJZmRlZi0+bm1hdGNoZXMgICAgPSBubWF0Y2g7CisJZmRlZi0+YXR0cmRhdGEgICAgPSBnaXRfYnVmX2RldGFjaCgmYXR0cnMpOworCisJZmlsdGVyX2RlZl9zZXRfYXR0cnMoZmRlZik7CisKKwlpZiAoZ2l0X3ZlY3Rvcl9pbnNlcnQoJmdpdF9fZmlsdGVyX3JlZ2lzdHJ5LT5maWx0ZXJzLCBmZGVmKSA8IDApIHsKKwkJZ2l0X19mcmVlKGZkZWYtPmF0dHJkYXRhKTsKKwkJZ2l0X19mcmVlKGZkZWYpOworCQlyZXR1cm4gLTE7CisJfQorCisJZ2l0X3ZlY3Rvcl9zb3J0KCZnaXRfX2ZpbHRlcl9yZWdpc3RyeS0+ZmlsdGVycyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfZmlsdGVyX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzaXplX3QgcG9zOworCWdpdF9maWx0ZXJfZGVmICpmZGVmOworCisJLyogY2Fubm90IHVucmVnaXN0ZXIgZGVmYXVsdCBmaWx0ZXJzICovCisJaWYgKCFzdHJjbXAoR0lUX0ZJTFRFUl9DUkxGLCBuYW1lKSB8fCAhc3RyY21wKEdJVF9GSUxURVJfSURFTlQsIG5hbWUpKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0ZJTFRFUiwgIkNhbm5vdCB1bnJlZ2lzdGVyIGZpbHRlciAnJXMnIiwgbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGZkZWYgPSBmaWx0ZXJfcmVnaXN0cnlfbG9va3VwKCZwb3MsIG5hbWUpKSA9PSBOVUxMKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0ZJTFRFUiwgIkNhbm5vdCBmaW5kIGZpbHRlciAnJXMnIHRvIHVucmVnaXN0ZXIiLCBuYW1lKTsKKwkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CisJfQorCisJKHZvaWQpZ2l0X3ZlY3Rvcl9yZW1vdmUoJmdpdF9fZmlsdGVyX3JlZ2lzdHJ5LT5maWx0ZXJzLCBwb3MpOworCisJaWYgKGZkZWYtPmluaXRpYWxpemVkICYmIGZkZWYtPmZpbHRlciAmJiBmZGVmLT5maWx0ZXItPnNodXRkb3duKSB7CisJCWZkZWYtPmZpbHRlci0+c2h1dGRvd24oZmRlZi0+ZmlsdGVyKTsKKwkJZmRlZi0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwl9CisKKwlnaXRfX2ZyZWUoZmRlZi0+YXR0cmRhdGEpOworCWdpdF9fZnJlZShmZGVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9pbml0aWFsaXplKGdpdF9maWx0ZXJfZGVmICpmZGVmKQoreworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIWZkZWYtPmluaXRpYWxpemVkICYmCisJCWZkZWYtPmZpbHRlciAmJgorCQlmZGVmLT5maWx0ZXItPmluaXRpYWxpemUgJiYKKwkJKGVycm9yID0gZmRlZi0+ZmlsdGVyLT5pbml0aWFsaXplKGZkZWYtPmZpbHRlcikpIDwgMCkKKwl7CisJCS8qIGF1dG8tdW5yZWdpc3RlciBpZiBpbml0aWFsaXplIGZhaWxzICovCisJCWdpdF9maWx0ZXJfdW5yZWdpc3RlcihmZGVmLT5maWx0ZXJfbmFtZSk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlmZGVmLT5pbml0aWFsaXplZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK2dpdF9maWx0ZXIgKmdpdF9maWx0ZXJfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc2l6ZV90IHBvczsKKwlnaXRfZmlsdGVyX2RlZiAqZmRlZjsKKworCWlmIChmaWx0ZXJfcmVnaXN0cnlfaW5pdGlhbGl6ZSgpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoKGZkZWYgPSBmaWx0ZXJfcmVnaXN0cnlfbG9va3VwKCZwb3MsIG5hbWUpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghZmRlZi0+aW5pdGlhbGl6ZWQgJiYgZmlsdGVyX2luaXRpYWxpemUoZmRlZikgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBmZGVmLT5maWx0ZXI7Cit9CisKK3ZvaWQgZ2l0X2ZpbHRlcl9mcmVlKGdpdF9maWx0ZXIgKmZpbHRlcikKK3sKKwlnaXRfX2ZyZWUoZmlsdGVyKTsKK30KKworZ2l0X3JlcG9zaXRvcnkgKmdpdF9maWx0ZXJfc291cmNlX3JlcG8oY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYykKK3sKKwlyZXR1cm4gc3JjLT5yZXBvOworfQorCitjb25zdCBjaGFyICpnaXRfZmlsdGVyX3NvdXJjZV9wYXRoKGNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMpCit7CisJcmV0dXJuIHNyYy0+cGF0aDsKK30KKwordWludDE2X3QgZ2l0X2ZpbHRlcl9zb3VyY2VfZmlsZW1vZGUoY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYykKK3sKKwlyZXR1cm4gc3JjLT5maWxlbW9kZTsKK30KKworY29uc3QgZ2l0X29pZCAqZ2l0X2ZpbHRlcl9zb3VyY2VfaWQoY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYykKK3sKKwlyZXR1cm4gZ2l0X29pZF9pc3plcm8oJnNyYy0+b2lkKSA/IE5VTEwgOiAmc3JjLT5vaWQ7Cit9CisKK2dpdF9maWx0ZXJfbW9kZV90IGdpdF9maWx0ZXJfc291cmNlX21vZGUoY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYykKK3sKKwlyZXR1cm4gc3JjLT5tb2RlOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9saXN0X25ldygKKwlnaXRfZmlsdGVyX2xpc3QgKipvdXQsIGNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMpCit7CisJZ2l0X2ZpbHRlcl9saXN0ICpmbCA9IE5VTEw7CisJc2l6ZV90IHBhdGhsZW4gPSBzcmMtPnBhdGggPyBzdHJsZW4oc3JjLT5wYXRoKSA6IDA7CisKKwlmbCA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfZmlsdGVyX2xpc3QpICsgcGF0aGxlbiArIDEpOworCUdJVEVSUl9DSEVDS19BTExPQyhmbCk7CisKKwlpZiAoc3JjLT5wYXRoKQorCQltZW1jcHkoZmwtPnBhdGgsIHNyYy0+cGF0aCwgcGF0aGxlbik7CisJZmwtPnNvdXJjZS5yZXBvID0gc3JjLT5yZXBvOworCWZsLT5zb3VyY2UucGF0aCA9IGZsLT5wYXRoOworCWZsLT5zb3VyY2UubW9kZSA9IHNyYy0+bW9kZTsKKworCSpvdXQgPSBmbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfbGlzdF9jaGVja19hdHRyaWJ1dGVzKAorCWNvbnN0IGNoYXIgKioqb3V0LCBnaXRfZmlsdGVyX2RlZiAqZmRlZiwgY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNyYykKIHsKIAlpbnQgZXJyb3I7Ci0KLQlpZiAobW9kZSA9PSBHSVRfRklMVEVSX1RPX09EQikgewotCQkvKiBMb2FkIHRoZSBDUkxGIGNsZWFudXAgZmlsdGVyIHdoZW4gd3JpdGluZyB0byB0aGUgT0RCICovCi0JCWVycm9yID0gZ2l0X2ZpbHRlcl9hZGRfX2NybGZfdG9fb2RiKGZpbHRlcnMsIHJlcG8sIHBhdGgpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJcmV0dXJuIGVycm9yOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gZ2l0X2ZpbHRlcl9hZGRfX2NybGZfdG9fd29ya2RpcihmaWx0ZXJzLCByZXBvLCBwYXRoKTsKLQkJaWYgKGVycm9yIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlyZXR1cm4gKGludClmaWx0ZXJzLT5sZW5ndGg7Ci19Ci0KLXZvaWQgZ2l0X2ZpbHRlcnNfZnJlZShnaXRfdmVjdG9yICpmaWx0ZXJzKQotewogCXNpemVfdCBpOwotCWdpdF9maWx0ZXIgKmZpbHRlcjsKKwljb25zdCBjaGFyICoqc3RycyA9IGdpdF9fY2FsbG9jKGZkZWYtPm5hdHRycywgc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCUdJVEVSUl9DSEVDS19BTExPQyhzdHJzKTsKIAotCWdpdF92ZWN0b3JfZm9yZWFjaChmaWx0ZXJzLCBpLCBmaWx0ZXIpIHsKLQkJaWYgKGZpbHRlci0+ZG9fZnJlZSAhPSBOVUxMKQotCQkJZmlsdGVyLT5kb19mcmVlKGZpbHRlcik7Ci0JCWVsc2UKLQkJCWdpdF9fZnJlZShmaWx0ZXIpOwotCX0KKwllcnJvciA9IGdpdF9hdHRyX2dldF9tYW55KAorCQlzdHJzLCBzcmMtPnJlcG8sIDAsIHNyYy0+cGF0aCwgZmRlZi0+bmF0dHJzLCBmZGVmLT5hdHRycyk7CiAKLQlnaXRfdmVjdG9yX2ZyZWUoZmlsdGVycyk7Ci19Ci0KLWludCBnaXRfZmlsdGVyc19hcHBseShnaXRfYnVmICpkZXN0LCBnaXRfYnVmICpzb3VyY2UsIGdpdF92ZWN0b3IgKmZpbHRlcnMpCi17Ci0Jc2l6ZV90IGk7Ci0JdW5zaWduZWQgaW50IHNyYzsKLQlnaXRfYnVmICpkYnVmZmVyWzJdOwotCi0JZGJ1ZmZlclswXSA9IHNvdXJjZTsKLQlkYnVmZmVyWzFdID0gZGVzdDsKLQotCXNyYyA9IDA7Ci0KLQlpZiAoZ2l0X2J1Zl9sZW4oc291cmNlKSA9PSAwKSB7Ci0JCWdpdF9idWZfY2xlYXIoZGVzdCk7CisJLyogaWYgbm8gdmFsdWVzIHdlcmUgZm91bmQgYnV0IG5vIG1hdGNoZXMgYXJlIG5lZWRlZCwgaXQncyBva2F5ISAqLworCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EICYmICFmZGVmLT5ubWF0Y2hlcykgeworCQlnaXRlcnJfY2xlYXIoKTsKKwkJZ2l0X19mcmVlKCh2b2lkICopc3Rycyk7CiAJCXJldHVybiAwOwogCX0KIAotCS8qIFByZS1ncm93IHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgdG8gbW9yZSBvciBsZXNzIHRoZSBzaXplCi0JICogd2UgZXhwZWN0IGl0IHRvIGhhdmUgKi8KLQlpZiAoZ2l0X2J1Zl9ncm93KGRlc3QsIGdpdF9idWZfbGVuKHNvdXJjZSkpIDwgMCkKKwlmb3IgKGkgPSAwOyAhZXJyb3IgJiYgaSA8IGZkZWYtPm5hdHRyczsgKytpKSB7CisJCWNvbnN0IGNoYXIgKndhbnQgPSBmZGVmLT5hdHRyc1tmZGVmLT5uYXR0cnMgKyBpXTsKKwkJZ2l0X2F0dHJfdCB3YW50X3R5cGUsIGZvdW5kX3R5cGU7CisKKwkJaWYgKCF3YW50KQorCQkJY29udGludWU7CisKKwkJd2FudF90eXBlICA9IGdpdF9hdHRyX3ZhbHVlKHdhbnQpOworCQlmb3VuZF90eXBlID0gZ2l0X2F0dHJfdmFsdWUoc3Ryc1tpXSk7CisKKwkJaWYgKHdhbnRfdHlwZSAhPSBmb3VuZF90eXBlIHx8CisJCQkod2FudF90eXBlID09IEdJVF9BVFRSX1ZBTFVFX1QgJiYgc3RyY21wKHdhbnQsIHN0cnNbaV0pKSkKKwkJCWVycm9yID0gR0lUX0VOT1RGT1VORDsKKwl9CisKKwlpZiAoZXJyb3IpCisJCWdpdF9fZnJlZSgodm9pZCAqKXN0cnMpOworCWVsc2UKKwkJKm91dCA9IHN0cnM7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBnaXRfZmlsdGVyX2xpc3RfbmV3KAorCWdpdF9maWx0ZXJfbGlzdCAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGdpdF9maWx0ZXJfbW9kZV90IG1vZGUpCit7CisJZ2l0X2ZpbHRlcl9zb3VyY2Ugc3JjID0geyAwIH07CisJc3JjLnJlcG8gPSByZXBvOworCXNyYy5wYXRoID0gTlVMTDsKKwlzcmMubW9kZSA9IG1vZGU7CisJcmV0dXJuIGZpbHRlcl9saXN0X25ldyhvdXQsICZzcmMpOworfQorCitpbnQgZ2l0X2ZpbHRlcl9saXN0X2xvYWQoCisJZ2l0X2ZpbHRlcl9saXN0ICoqZmlsdGVycywKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwlnaXRfYmxvYiAqYmxvYiwgLyogY2FuIGJlIE5VTEwgKi8KKwljb25zdCBjaGFyICpwYXRoLAorCWdpdF9maWx0ZXJfbW9kZV90IG1vZGUpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfZmlsdGVyX2xpc3QgKmZsID0gTlVMTDsKKwlnaXRfZmlsdGVyX3NvdXJjZSBzcmMgPSB7IDAgfTsKKwlnaXRfZmlsdGVyX2VudHJ5ICpmZTsKKwlzaXplX3QgaWR4OworCWdpdF9maWx0ZXJfZGVmICpmZGVmOworCisJaWYgKGZpbHRlcl9yZWdpc3RyeV9pbml0aWFsaXplKCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmlsdGVycy0+bGVuZ3RoOyArK2kpIHsKLQkJZ2l0X2ZpbHRlciAqZmlsdGVyID0gZ2l0X3ZlY3Rvcl9nZXQoZmlsdGVycywgaSk7Ci0JCXVuc2lnbmVkIGludCBkc3QgPSAxIC0gc3JjOworCXNyYy5yZXBvID0gcmVwbzsKKwlzcmMucGF0aCA9IHBhdGg7CisJc3JjLm1vZGUgPSBtb2RlOworCWlmIChibG9iKQorCQlnaXRfb2lkX2NweSgmc3JjLm9pZCwgZ2l0X2Jsb2JfaWQoYmxvYikpOwogCi0JCWdpdF9idWZfY2xlYXIoZGJ1ZmZlcltkc3RdKTsKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJmdpdF9fZmlsdGVyX3JlZ2lzdHJ5LT5maWx0ZXJzLCBpZHgsIGZkZWYpIHsKKwkJY29uc3QgY2hhciAqKnZhbHVlcyA9IE5VTEw7CisJCXZvaWQgKnBheWxvYWQgPSBOVUxMOworCisJCWlmICghZmRlZiB8fCAhZmRlZi0+ZmlsdGVyKQorCQkJY29udGludWU7CisKKwkJaWYgKGZkZWYtPm5hdHRycyA+IDApIHsKKwkJCWVycm9yID0gZmlsdGVyX2xpc3RfY2hlY2tfYXR0cmlidXRlcygmdmFsdWVzLCBmZGVmLCAmc3JjKTsKKwkJCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSB7CisJCQkJZXJyb3IgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChlcnJvciA8IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIWZkZWYtPmluaXRpYWxpemVkICYmIChlcnJvciA9IGZpbHRlcl9pbml0aWFsaXplKGZkZWYpKSA8IDApCisJCQlicmVhazsKKworCQlpZiAoZmRlZi0+ZmlsdGVyLT5jaGVjaykKKwkJCWVycm9yID0gZmRlZi0+ZmlsdGVyLT5jaGVjaygKKwkJCQlmZGVmLT5maWx0ZXIsICZwYXlsb2FkLCAmc3JjLCB2YWx1ZXMpOworCisJCWdpdF9fZnJlZSgodm9pZCAqKXZhbHVlcyk7CisKKwkJaWYgKGVycm9yID09IEdJVF9QQVNTVEhST1VHSCkKKwkJCWVycm9yID0gMDsKKwkJZWxzZSBpZiAoZXJyb3IgPCAwKQorCQkJYnJlYWs7CisJCWVsc2UgeworCQkJaWYgKCFmbCAmJiAoZXJyb3IgPSBmaWx0ZXJfbGlzdF9uZXcoJmZsLCAmc3JjKSkgPCAwKQorCQkJCXJldHVybiBlcnJvcjsKKworCQkJZmUgPSBnaXRfYXJyYXlfYWxsb2MoZmwtPmZpbHRlcnMpOworCQkJR0lURVJSX0NIRUNLX0FMTE9DKGZlKTsKKwkJCWZlLT5maWx0ZXIgID0gZmRlZi0+ZmlsdGVyOworCQkJZmUtPnBheWxvYWQgPSBwYXlsb2FkOworCQl9CisJfQorCisJaWYgKGVycm9yICYmIGZsICE9IE5VTEwpIHsKKwkJZ2l0X2FycmF5X2NsZWFyKGZsLT5maWx0ZXJzKTsKKwkJZ2l0X19mcmVlKGZsKTsKKwkJZmwgPSBOVUxMOworCX0KKworCSpmaWx0ZXJzID0gZmw7CisJcmV0dXJuIGVycm9yOworfQorCit2b2lkIGdpdF9maWx0ZXJfbGlzdF9mcmVlKGdpdF9maWx0ZXJfbGlzdCAqZmwpCit7CisJdWludDMyX3QgaTsKKworCWlmICghZmwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBnaXRfYXJyYXlfc2l6ZShmbC0+ZmlsdGVycyk7ICsraSkgeworCQlnaXRfZmlsdGVyX2VudHJ5ICpmZSA9IGdpdF9hcnJheV9nZXQoZmwtPmZpbHRlcnMsIGkpOworCQlpZiAoZmUtPmZpbHRlci0+Y2xlYW51cCkKKwkJCWZlLT5maWx0ZXItPmNsZWFudXAoZmUtPmZpbHRlciwgZmUtPnBheWxvYWQpOworCX0KKworCWdpdF9hcnJheV9jbGVhcihmbC0+ZmlsdGVycyk7CisJZ2l0X19mcmVlKGZsKTsKK30KKworaW50IGdpdF9maWx0ZXJfbGlzdF9wdXNoKAorCWdpdF9maWx0ZXJfbGlzdCAqZmwsIGdpdF9maWx0ZXIgKmZpbHRlciwgdm9pZCAqcGF5bG9hZCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCXNpemVfdCBwb3M7CisJZ2l0X2ZpbHRlcl9kZWYgKmZkZWY7CisJZ2l0X2ZpbHRlcl9lbnRyeSAqZmU7CisKKwlhc3NlcnQoZmwgJiYgZmlsdGVyKTsKKworCWlmIChnaXRfdmVjdG9yX3NlYXJjaDIoCisJCQkmcG9zLCAmZ2l0X19maWx0ZXJfcmVnaXN0cnktPmZpbHRlcnMsCisJCQlmaWx0ZXJfZGVmX2ZpbHRlcl9rZXlfY2hlY2ssIGZpbHRlcikgPCAwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0ZJTFRFUiwgIkNhbm5vdCB1c2UgYW4gdW5yZWdpc3RlcmVkIGZpbHRlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZmRlZiA9IGdpdF92ZWN0b3JfZ2V0KCZnaXRfX2ZpbHRlcl9yZWdpc3RyeS0+ZmlsdGVycywgcG9zKTsKKworCWlmICghZmRlZi0+aW5pdGlhbGl6ZWQgJiYgKGVycm9yID0gZmlsdGVyX2luaXRpYWxpemUoZmRlZikpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJZmUgPSBnaXRfYXJyYXlfYWxsb2MoZmwtPmZpbHRlcnMpOworCUdJVEVSUl9DSEVDS19BTExPQyhmZSk7CisJZmUtPmZpbHRlciAgPSBmaWx0ZXI7CisJZmUtPnBheWxvYWQgPSBwYXlsb2FkOworCisJcmV0dXJuIDA7Cit9CisKK3NpemVfdCBnaXRfZmlsdGVyX2xpc3RfbGVuZ3RoKGNvbnN0IGdpdF9maWx0ZXJfbGlzdCAqZmwpCit7CisJcmV0dXJuIGZsID8gZ2l0X2FycmF5X3NpemUoZmwtPmZpbHRlcnMpIDogMDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfbGlzdF9vdXRfYnVmZmVyX2Zyb21fcmF3KAorCWdpdF9idWYgKm91dCwgY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoZ2l0X2J1Zl9pc19hbGxvY2F0ZWQob3V0KSkKKwkJZ2l0X2J1Zl9mcmVlKG91dCk7CisKKwlpZiAoIXNpemUpIHsKKwkJZ2l0X2J1Zl9pbml0KG91dCwgMCk7CisJfSBlbHNlIHsKKwkJb3V0LT5wdHIgICA9IChjaGFyICopcHRyOworCQlvdXQtPmFzaXplID0gMDsKKwkJb3V0LT5zaXplICA9IHNpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfZmlsdGVyX2xpc3RfYXBwbHlfdG9fZGF0YSgKKwlnaXRfYnVmICp0Z3QsIGdpdF9maWx0ZXJfbGlzdCAqZmwsIGdpdF9idWYgKnNyYykKK3sKKwlpbnQgZXJyb3IgPSAwOworCXVpbnQzMl90IGk7CisJZ2l0X2J1ZiAqZGJ1ZmZlclsyXSwgbG9jYWwgPSBHSVRfQlVGX0lOSVQ7CisJdW5zaWduZWQgaW50IHNpID0gMDsKKworCWlmICghZmwpCisJCXJldHVybiBmaWx0ZXJfbGlzdF9vdXRfYnVmZmVyX2Zyb21fcmF3KHRndCwgc3JjLT5wdHIsIHNyYy0+c2l6ZSk7CisKKwlkYnVmZmVyWzBdID0gc3JjOworCWRidWZmZXJbMV0gPSB0Z3Q7CisKKwkvKiBpZiBgc3JjYCBidWZmZXIgaXMgcmVhbGxvY2FibGUsIHRoZW4gdXNlIGl0LCBvdGhlcndpc2UgY29weSBpdCAqLworCWlmICghZ2l0X2J1Zl9pc19hbGxvY2F0ZWQoc3JjKSkgeworCQlpZiAoZ2l0X2J1Zl9zZXQoJmxvY2FsLCBzcmMtPnB0ciwgc3JjLT5zaXplKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWRidWZmZXJbMF0gPSAmbG9jYWw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGdpdF9hcnJheV9zaXplKGZsLT5maWx0ZXJzKTsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkaSA9IDEgLSBzaTsKKwkJdWludDMyX3QgZmlkeCA9IChmbC0+c291cmNlLm1vZGUgPT0gR0lUX0ZJTFRFUl9UT19XT1JLVFJFRSkgPworCQkJaSA6IGdpdF9hcnJheV9zaXplKGZsLT5maWx0ZXJzKSAtIDEgLSBpOworCQlnaXRfZmlsdGVyX2VudHJ5ICpmZSA9IGdpdF9hcnJheV9nZXQoZmwtPmZpbHRlcnMsIGZpZHgpOworCisJCWRidWZmZXJbZGldLT5zaXplID0gMDsKIAogCQkvKiBBcHBseSB0aGUgZmlsdGVyIGZyb20gZGJ1ZmZlcltzcmNdIHRvIHRoZSBvdGhlciBidWZmZXI7CiAJCSAqIGlmIHRoZSBmaWx0ZXJpbmcgaXMgY2FuY2VsZWQgYnkgdGhlIHVzZXIgbWlkLWZpbHRlciwKQEAgLTc5LDE2ICs2MDUsNzIgQEAKIAkJICogb2YgdGhlIGRvdWJsZSBidWZmZXJpbmcgKHNvIHRoYXQgdGhlIHRleHQgZ29lcyB0aHJvdWdoCiAJCSAqIGNsZWFubHkpLgogCQkgKi8KLQkJaWYgKGZpbHRlci0+YXBwbHkoZmlsdGVyLCBkYnVmZmVyW2RzdF0sIGRidWZmZXJbc3JjXSkgPT0gMCkKLQkJCXNyYyA9IGRzdDsKIAotCQlpZiAoZ2l0X2J1Zl9vb20oZGJ1ZmZlcltkc3RdKSkKLQkJCXJldHVybiAtMTsKKwkJZXJyb3IgPSBmZS0+ZmlsdGVyLT5hcHBseSgKKwkJCWZlLT5maWx0ZXIsICZmZS0+cGF5bG9hZCwgZGJ1ZmZlcltkaV0sIGRidWZmZXJbc2ldLCAmZmwtPnNvdXJjZSk7CisKKwkJaWYgKGVycm9yID09IEdJVF9QQVNTVEhST1VHSCkgeworCQkJLyogUEFTU1RIUk9VR0ggbWVhbnMgZmlsdGVyIGRlY2lkZWQgbm90IHRvIHByb2Nlc3MgdGhlIGJ1ZmZlciAqLworCQkJZXJyb3IgPSAwOworCQl9IGVsc2UgaWYgKCFlcnJvcikgeworCQkJZ2l0X2J1Zl9zaG9ydGVuKGRidWZmZXJbZGldLCAwKTsgLyogZm9yY2UgTlVMIHRlcm1pbmF0aW9uICovCisJCQlzaSA9IGRpOyAvKiBzd2FwIGJ1ZmZlcnMgKi8KKwkJfSBlbHNlIHsKKwkJCXRndC0+c2l6ZSA9IDA7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KIAl9CiAKIAkvKiBFbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGVuZHMgdXAgaW4gZGJ1ZmZlclsxXSAoaS5lLiB0aGUgZGVzdCkgKi8KLQlpZiAoc3JjICE9IDEpCi0JCWdpdF9idWZfc3dhcChkZXN0LCBzb3VyY2UpOworCWlmIChzaSAhPSAxKQorCQlnaXRfYnVmX3N3YXAoZGJ1ZmZlclswXSwgZGJ1ZmZlclsxXSk7CisKKwlnaXRfYnVmX2ZyZWUoJmxvY2FsKTsgLyogZG9uJ3QgbGVhayBpZiB3ZSBhbGxvY2F0ZWQgbG9jYWxseSAqLwogCiAJcmV0dXJuIDA7CiB9CisKK2ludCBnaXRfZmlsdGVyX2xpc3RfYXBwbHlfdG9fZmlsZSgKKwlnaXRfYnVmICpvdXQsCisJZ2l0X2ZpbHRlcl9saXN0ICpmaWx0ZXJzLAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGVycm9yOworCWNvbnN0IGNoYXIgKmJhc2UgPSByZXBvID8gZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSA6IE5VTEw7CisJZ2l0X2J1ZiBhYnNwYXRoID0gR0lUX0JVRl9JTklULCByYXcgPSBHSVRfQlVGX0lOSVQ7CisKKwlpZiAoIShlcnJvciA9IGdpdF9wYXRoX2pvaW5fdW5yb290ZWQoJmFic3BhdGgsIHBhdGgsIGJhc2UsIE5VTEwpKSAmJgorCQkhKGVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZyYXcsIGFic3BhdGgucHRyKSkpCisJeworCQllcnJvciA9IGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19kYXRhKG91dCwgZmlsdGVycywgJnJhdyk7CisKKwkJZ2l0X2J1Zl9mcmVlKCZyYXcpOworCX0KKworCWdpdF9idWZfZnJlZSgmYWJzcGF0aCk7CisJcmV0dXJuIGVycm9yOworfQorCitpbnQgZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2Jsb2IoCisJZ2l0X2J1ZiAqb3V0LAorCWdpdF9maWx0ZXJfbGlzdCAqZmlsdGVycywKKwlnaXRfYmxvYiAqYmxvYikKK3sKKwlnaXRfYnVmIGluID0gR0lUX0JVRl9JTklUOworCWdpdF9vZmZfdCByYXdzaXplID0gZ2l0X2Jsb2JfcmF3c2l6ZShibG9iKTsKKworCWlmICghZ2l0X19pc19zaXpldChyYXdzaXplKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkJsb2IgaXMgdG9vIGxhcmdlIHRvIGZpbHRlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaW4ucHRyICAgPSAoY2hhciAqKWdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYik7CisJaW4uYXNpemUgPSAwOworCWluLnNpemUgID0gKHNpemVfdClyYXdzaXplOworCisJaWYgKGZpbHRlcnMpCisJCWdpdF9vaWRfY3B5KCZmaWx0ZXJzLT5zb3VyY2Uub2lkLCBnaXRfYmxvYl9pZChibG9iKSk7CisKKwlyZXR1cm4gZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2RhdGEob3V0LCBmaWx0ZXJzLCAmaW4pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2ZpbHRlci5oIGIvc3JjL2ZpbHRlci5oCmluZGV4IDQyYTQ0ZWIuLmQwYWNlMGYgMTAwNjQ0Ci0tLSBhL3NyYy9maWx0ZXIuaAorKysgYi9zcmMvZmlsdGVyLmgKQEAgLTgsMTkgKzgsNyBAQAogI2RlZmluZSBJTkNMVURFX2ZpbHRlcl9oX18KIAogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImJ1ZmZlci5oIgotI2luY2x1ZGUgImdpdDIvb2RiLmgiCi0jaW5jbHVkZSAiZ2l0Mi9yZXBvc2l0b3J5LmgiCi0KLXR5cGVkZWYgc3RydWN0IGdpdF9maWx0ZXIgewotCWludCAoKmFwcGx5KShzdHJ1Y3QgZ2l0X2ZpbHRlciAqc2VsZiwgZ2l0X2J1ZiAqZGVzdCwgY29uc3QgZ2l0X2J1ZiAqc291cmNlKTsKLQl2b2lkICgqZG9fZnJlZSkoc3RydWN0IGdpdF9maWx0ZXIgKnNlbGYpOwotfSBnaXRfZmlsdGVyOwotCi10eXBlZGVmIGVudW0gewotCUdJVF9GSUxURVJfVE9fV09SS1RSRUUsCi0JR0lUX0ZJTFRFUl9UT19PREIKLX0gZ2l0X2ZpbHRlcl9tb2RlOworI2luY2x1ZGUgImdpdDIvZmlsdGVyLmgiCiAKIHR5cGVkZWYgZW51bSB7CiAJR0lUX0NSTEZfR1VFU1MgPSAtMSwKQEAgLTMxLDY0ICsxOSwxMyBAQAogCUdJVF9DUkxGX0FVVE8sCiB9IGdpdF9jcmxmX3Q7CiAKLS8qCi0gKiBGSUxURVIgQVBJCi0gKi8KLQotLyoKLSAqIEZvciBhbnkgZ2l2ZW4gcGF0aCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGZpbGwgdGhlIGBmaWx0ZXJzYAotICogYXJyYXkgd2l0aCB0aGUgcmVsZXZhbnQgZmlsdGVycyB0aGF0IG5lZWQgdG8gYmUgYXBwbGllZC4KLSAqCi0gKiBNb2RlIGlzIGVpdGhlciBgR0lUX0ZJTFRFUl9UT19XT1JLVFJFRWAgaWYgeW91IG5lZWQgdG8gbG9hZCB0aGUKLSAqIGZpbHRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBjaGVja2luZyBvdXQgYSBmaWxlIHRvIHRoZSB3b3JraW5nCi0gKiBkaXJlY3RvcnksIG9yIGBHSVRfRklMVEVSX1RPX09EQmAgZm9yIHRoZSBmaWx0ZXJzIHVzZWQgd2hlbiB3cml0aW5nCi0gKiBhIGZpbGUgdG8gdGhlIE9EQi4KLSAqCi0gKiBAcGFyYW0gZmlsdGVycyBWZWN0b3Igd2hlcmUgdG8gc3RvcmUgYWxsIHRoZSBsb2FkZWQgZmlsdGVycwotICogQHBhcmFtIHJlcG8gUmVwb3NpdG9yeSBvYmplY3QgdGhhdCBjb250YWlucyBgcGF0aGAKLSAqIEBwYXJhbSBwYXRoIFJlbGF0aXZlIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZmlsdGVyZWQKLSAqIEBwYXJhbSBtb2RlIEZpbHRlcmluZyBkaXJlY3Rpb24gKFdULT5PREIgb3IgT0RCLT5XVCkKLSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBmaWx0ZXJzIGxvYWRlZCBmb3IgdGhlIGZpbGUgKDAgaWYgdGhlIGZpbGUKLSAqCWRvZXNuJ3QgbmVlZCBmaWx0ZXJpbmcpLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKLSAqLwotZXh0ZXJuIGludCBnaXRfZmlsdGVyc19sb2FkKGdpdF92ZWN0b3IgKmZpbHRlcnMsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSk7Ci0KLS8qCi0gKiBBcHBseSBvbmUgb3IgbW9yZSBmaWx0ZXJzIHRvIGEgZmlsZS4KLSAqCi0gKiBUaGUgZmlsZSBtdXN0IGhhdmUgYmVlbiBsb2FkZWQgYXMgYSBgZ2l0X2J1ZmAgb2JqZWN0LiBCb3RoIHRoZSBgc291cmNlYAotICogYW5kIGBkZXN0YCBidWZmZXJzIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBtdXN0IGJlIGZyZWVkIG9uY2UKLSAqIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQuCi0gKgotICogTk9URTogQmVjYXVzZSBvZiB0aGUgZG91YmxlLWJ1ZmZlcmluZyBzY2hlbWEsIHRoZSBgc291cmNlYCBidWZmZXIgdGhhdCBjb250YWlucwotICogdGhlIG9yaWdpbmFsIGZpbGUgbWF5IGJlIHRhbXBlcmVkIG9uY2UgdGhlIGZpbHRlcmluZyBpcyBjb21wbGV0ZS4gUmVnYXJkbGVzcywgCi0gKiB0aGUgYGRlc3RgIGJ1ZmZlciB3aWxsIGFsd2F5cyBjb250YWluIHRoZSBmaW5hbCByZXN1bHQgb2YgdGhlIGZpbHRlcmluZwotICoKLSAqIEBwYXJhbSBkZXN0IEJ1ZmZlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZSBmaWx0ZXJpbmcKLSAqIEBwYXJhbSBzb3VyY2UgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IHRvIGZpbHRlcgotICogQHBhcmFtIGZpbHRlcnMgQSBub24tZW1wdHkgdmVjdG9yIG9mIGZpbHRlcnMgYXMgc3VwcGxpZWQgYnkgYGdpdF9maWx0ZXJzX2xvYWRgCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotZXh0ZXJuIGludCBnaXRfZmlsdGVyc19hcHBseShnaXRfYnVmICpkZXN0LCBnaXRfYnVmICpzb3VyY2UsIGdpdF92ZWN0b3IgKmZpbHRlcnMpOwotCi0vKgotICogRnJlZSB0aGUgYGZpbHRlcnNgIGFycmF5IGdlbmVyYXRlZCBieSBgZ2l0X2ZpbHRlcnNfbG9hZGAuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgZnJlZXMgYm90aCB0aGUgYXJyYXkgYW5kIGl0cyBjb250ZW50cy4gVGhlIGFycmF5IHdpbGwKLSAqIGJlIGNsZWFuL3JldXNhYmxlIGFmdGVyIHRoaXMgY2FsbC4KLSAqCi0gKiBAcGFyYW0gZmlsdGVycyBBIGZpbHRlcnMgYXJyYXkgYXMgc3VwcGxpZWQgYnkgYGdpdF9maWx0ZXJzX2xvYWRgCi0gKi8KLWV4dGVybiB2b2lkIGdpdF9maWx0ZXJzX2ZyZWUoZ2l0X3ZlY3RvciAqZmlsdGVycyk7CitleHRlcm4gdm9pZCBnaXRfZmlsdGVyX2ZyZWUoZ2l0X2ZpbHRlciAqZmlsdGVyKTsKIAogLyoKICAqIEF2YWlsYWJsZSBmaWx0ZXJzCiAgKi8KIAotLyogU3RyaXAgQ1JMRiwgZnJvbSBXb3JrdHJlZSB0byBPREIgKi8KLWV4dGVybiBpbnQgZ2l0X2ZpbHRlcl9hZGRfX2NybGZfdG9fb2RiKGdpdF92ZWN0b3IgKmZpbHRlcnMsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoKTsKLQotLyogQWRkIENSTEYsIGZyb20gT0RCIHRvIHdvcmt0cmVlICovCi1leHRlcm4gaW50IGdpdF9maWx0ZXJfYWRkX19jcmxmX3RvX3dvcmtkaXIoZ2l0X3ZlY3RvciAqZmlsdGVycywgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGdpdF9maWx0ZXIgKmdpdF9jcmxmX2ZpbHRlcl9uZXcodm9pZCk7CitleHRlcm4gZ2l0X2ZpbHRlciAqZ2l0X2lkZW50X2ZpbHRlcl9uZXcodm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2dsb2JhbC5jIGIvc3JjL2dsb2JhbC5jCmluZGV4IDJkNDBjYTIuLjdkMzljNmYgMTAwNjQ0Ci0tLSBhL3NyYy9nbG9iYWwuYworKysgYi9zcmMvZ2xvYmFsLmMKQEAgLTE0LDYgKzE0LDI4IEBACiAKIGdpdF9tdXRleCBnaXRfX213aW5kb3dfbXV0ZXg7CiAKKyNkZWZpbmUgTUFYX1NIVVRET1dOX0NCIDgKKworZ2l0X2dsb2JhbF9zaHV0ZG93bl9mbiBnaXRfX3NodXRkb3duX2NhbGxiYWNrc1tNQVhfU0hVVERPV05fQ0JdOworZ2l0X2F0b21pYyBnaXRfX25fc2h1dGRvd25fY2FsbGJhY2tzOworCit2b2lkIGdpdF9fb25fc2h1dGRvd24oZ2l0X2dsb2JhbF9zaHV0ZG93bl9mbiBjYWxsYmFjaykKK3sKKwlpbnQgY291bnQgPSBnaXRfYXRvbWljX2luYygmZ2l0X19uX3NodXRkb3duX2NhbGxiYWNrcyk7CisJYXNzZXJ0KGNvdW50IDw9IE1BWF9TSFVURE9XTl9DQik7CisJZ2l0X19zaHV0ZG93bl9jYWxsYmFja3NbY291bnQgLSAxXSA9IGNhbGxiYWNrOworfQorCitzdGF0aWMgdm9pZCBnaXRfX3NodXRkb3duKHZvaWQpCit7CisJaW50IHBvczsKKworCXdoaWxlICgocG9zID0gZ2l0X2F0b21pY19kZWMoJmdpdF9fbl9zaHV0ZG93bl9jYWxsYmFja3MpKSA+PSAwKSB7CisJCWlmIChnaXRfX3NodXRkb3duX2NhbGxiYWNrc1twb3NdKQorCQkJZ2l0X19zaHV0ZG93bl9jYWxsYmFja3NbcG9zXSgpOworCX0KK30KKwogLyoqCiAgKiBIYW5kbGUgdGhlIGdsb2JhbCBzdGF0ZSB3aXRoIFRMUwogICoKQEAgLTUxLDQ3ICs3Myw2OSBAQAogI2lmIGRlZmluZWQoR0lUX1RIUkVBRFMpICYmIGRlZmluZWQoR0lUX1dJTjMyKQogCiBzdGF0aWMgRFdPUkQgX3Rsc19pbmRleDsKLXN0YXRpYyBpbnQgX3Rsc19pbml0ID0gMDsKK3N0YXRpYyBEV09SRCBfbXV0ZXggPSAwOworc3RhdGljIERXT1JEIF9uX2luaXRzID0gMDsKIAotaW50IGdpdF90aHJlYWRzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgc3luY2hyb25pemVkX3RocmVhZHNfaW5pdCgpCiB7CiAJaW50IGVycm9yOwogCi0JaWYgKF90bHNfaW5pdCkKLQkJcmV0dXJuIDA7Ci0KIAlfdGxzX2luZGV4ID0gVGxzQWxsb2MoKTsKIAlpZiAoZ2l0X211dGV4X2luaXQoJmdpdF9fbXdpbmRvd19tdXRleCkpCiAJCXJldHVybiAtMTsKIAogCS8qIEluaXRpYWxpemUgYW55IG90aGVyIHN1YnN5c3RlbXMgdGhhdCBoYXZlIGdsb2JhbCBzdGF0ZSAqLwogCWlmICgoZXJyb3IgPSBnaXRfaGFzaF9nbG9iYWxfaW5pdCgpKSA+PSAwKQotCQlfdGxzX2luaXQgPSAxOworCQllcnJvciA9IGdpdF9mdXRpbHNfZGlyc19nbG9iYWxfaW5pdCgpOwogCi0JaWYgKGVycm9yID09IDApCi0JCV90bHNfaW5pdCA9IDE7Ci0KLQlHSVRfTUVNT1JZX0JBUlJJRVI7CisJd2luMzJfcHRocmVhZF9pbml0aWFsaXplKCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK2ludCBnaXRfdGhyZWFkc19pbml0KHZvaWQpCit7CisJaW50IGVycm9yID0gMDsKKworCS8qIEVudGVyIHRoZSBsb2NrICovCisJd2hpbGUgKEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZfbXV0ZXgsIDEsIDApKSB7IFNsZWVwKDApOyB9CisKKwkvKiBPbmx5IGRvIHdvcmsgb24gYSAwIC0+IDEgdHJhbnNpdGlvbiBvZiB0aGUgcmVmY291bnQgKi8KKwlpZiAoMSA9PSArK19uX2luaXRzKQorCQllcnJvciA9IHN5bmNocm9uaXplZF90aHJlYWRzX2luaXQoKTsKKworCS8qIEV4aXQgdGhlIGxvY2sgKi8KKwlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZfbXV0ZXgsIDApOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZWRfdGhyZWFkc19zaHV0ZG93bigpCit7CisJLyogU2h1dCBkb3duIGFueSBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSBnbG9iYWwgc3RhdGUgKi8KKwlnaXRfX3NodXRkb3duKCk7CisJVGxzRnJlZShfdGxzX2luZGV4KTsKKwlnaXRfbXV0ZXhfZnJlZSgmZ2l0X19td2luZG93X211dGV4KTsKK30KKwogdm9pZCBnaXRfdGhyZWFkc19zaHV0ZG93bih2b2lkKQogewotCVRsc0ZyZWUoX3Rsc19pbmRleCk7Ci0JX3Rsc19pbml0ID0gMDsKLQlnaXRfbXV0ZXhfZnJlZSgmZ2l0X19td2luZG93X211dGV4KTsKKwkvKiBFbnRlciB0aGUgbG9jayAqLworCXdoaWxlIChJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmX211dGV4LCAxLCAwKSkgeyBTbGVlcCgwKTsgfQogCi0JLyogU2h1dCBkb3duIGFueSBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSBnbG9iYWwgc3RhdGUgKi8KLQlnaXRfaGFzaF9nbG9iYWxfc2h1dGRvd24oKTsKLQlnaXRfZnV0aWxzX2RpcnNfZnJlZSgpOworCS8qIE9ubHkgZG8gd29yayBvbiBhIDEgLT4gMCB0cmFuc2l0aW9uIG9mIHRoZSByZWZjb3VudCAqLworCWlmICgwID09IC0tX25faW5pdHMpCisJCXN5bmNocm9uaXplZF90aHJlYWRzX3NodXRkb3duKCk7CisKKwkvKiBFeGl0IHRoZSBsb2NrICovCisJSW50ZXJsb2NrZWRFeGNoYW5nZSgmX211dGV4LCAwKTsKIH0KIAogZ2l0X2dsb2JhbF9zdCAqZ2l0X19nbG9iYWxfc3RhdGUodm9pZCkKIHsKIAl2b2lkICpwdHI7CiAKLQlhc3NlcnQoX3Rsc19pbml0KTsKKwlhc3NlcnQoX25faW5pdHMpOwogCiAJaWYgKChwdHIgPSBUbHNHZXRWYWx1ZShfdGxzX2luZGV4KSkgIT0gTlVMTCkKIAkJcmV0dXJuIHB0cjsKQEAgLTEwOCw1NSArMTUyLDU4IEBACiAjZWxpZiBkZWZpbmVkKEdJVF9USFJFQURTKSAmJiBkZWZpbmVkKF9QT1NJWF9USFJFQURTKQogCiBzdGF0aWMgcHRocmVhZF9rZXlfdCBfdGxzX2tleTsKLXN0YXRpYyBpbnQgX3Rsc19pbml0ID0gMDsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBfb25jZV9pbml0ID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgZ2l0X2F0b21pYyBnaXRfX25faW5pdHM7CitpbnQgaW5pdF9lcnJvciA9IDA7CiAKIHN0YXRpYyB2b2lkIGNiX19mcmVlX3N0YXR1cyh2b2lkICpzdCkKIHsKIAlnaXRfX2ZyZWUoc3QpOwogfQogCi1pbnQgZ2l0X3RocmVhZHNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQpCiB7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmIChfdGxzX2luaXQpCi0JCXJldHVybiAwOwotCi0JaWYgKGdpdF9tdXRleF9pbml0KCZnaXRfX213aW5kb3dfbXV0ZXgpKQotCQlyZXR1cm4gLTE7CisJaWYgKChpbml0X2Vycm9yID0gZ2l0X211dGV4X2luaXQoJmdpdF9fbXdpbmRvd19tdXRleCkpICE9IDApCisJCXJldHVybjsKIAlwdGhyZWFkX2tleV9jcmVhdGUoJl90bHNfa2V5LCAmY2JfX2ZyZWVfc3RhdHVzKTsKIAogCS8qIEluaXRpYWxpemUgYW55IG90aGVyIHN1YnN5c3RlbXMgdGhhdCBoYXZlIGdsb2JhbCBzdGF0ZSAqLwotCWlmICgoZXJyb3IgPSBnaXRfaGFzaF9nbG9iYWxfaW5pdCgpKSA+PSAwKQotCQlfdGxzX2luaXQgPSAxOworCWlmICgoaW5pdF9lcnJvciA9IGdpdF9oYXNoX2dsb2JhbF9pbml0KCkpID49IDApCisJCWluaXRfZXJyb3IgPSBnaXRfZnV0aWxzX2RpcnNfZ2xvYmFsX2luaXQoKTsKIAogCUdJVF9NRU1PUllfQkFSUklFUjsKK30KIAotCXJldHVybiBlcnJvcjsKK2ludCBnaXRfdGhyZWFkc19pbml0KHZvaWQpCit7CisJcHRocmVhZF9vbmNlKCZfb25jZV9pbml0LCBpbml0X29uY2UpOworCWdpdF9hdG9taWNfaW5jKCZnaXRfX25faW5pdHMpOworCXJldHVybiBpbml0X2Vycm9yOwogfQogCiB2b2lkIGdpdF90aHJlYWRzX3NodXRkb3duKHZvaWQpCiB7Ci0JaWYgKF90bHNfaW5pdCkgewotCQl2b2lkICpwdHIgPSBwdGhyZWFkX2dldHNwZWNpZmljKF90bHNfa2V5KTsKLQkJcHRocmVhZF9zZXRzcGVjaWZpYyhfdGxzX2tleSwgTlVMTCk7Ci0JCWdpdF9fZnJlZShwdHIpOwotCX0KKwlwdGhyZWFkX29uY2VfdCBuZXdfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwogCi0JcHRocmVhZF9rZXlfZGVsZXRlKF90bHNfa2V5KTsKLQlfdGxzX2luaXQgPSAwOwotCWdpdF9tdXRleF9mcmVlKCZnaXRfX213aW5kb3dfbXV0ZXgpOworCWlmIChnaXRfYXRvbWljX2RlYygmZ2l0X19uX2luaXRzKSA+IDApIHJldHVybjsKIAogCS8qIFNodXQgZG93biBhbnkgc3Vic3lzdGVtcyB0aGF0IGhhdmUgZ2xvYmFsIHN0YXRlICovCi0JZ2l0X2hhc2hfZ2xvYmFsX3NodXRkb3duKCk7Ci0JZ2l0X2Z1dGlsc19kaXJzX2ZyZWUoKTsKKwlnaXRfX3NodXRkb3duKCk7CisKKwl2b2lkICpwdHIgPSBwdGhyZWFkX2dldHNwZWNpZmljKF90bHNfa2V5KTsKKwlwdGhyZWFkX3NldHNwZWNpZmljKF90bHNfa2V5LCBOVUxMKTsKKwlnaXRfX2ZyZWUocHRyKTsKKworCXB0aHJlYWRfa2V5X2RlbGV0ZShfdGxzX2tleSk7CisJZ2l0X211dGV4X2ZyZWUoJmdpdF9fbXdpbmRvd19tdXRleCk7CisJX29uY2VfaW5pdCA9IG5ld19vbmNlOwogfQogCiBnaXRfZ2xvYmFsX3N0ICpnaXRfX2dsb2JhbF9zdGF0ZSh2b2lkKQogewogCXZvaWQgKnB0cjsKIAotCWFzc2VydChfdGxzX2luaXQpOworCWFzc2VydChnaXRfX25faW5pdHMudmFsKTsKIAogCWlmICgocHRyID0gcHRocmVhZF9nZXRzcGVjaWZpYyhfdGxzX2tleSkpICE9IE5VTEwpCiAJCXJldHVybiBwdHI7CkBAIC0xNzYsMTUgKzIyMywxNCBAQAogCiBpbnQgZ2l0X3RocmVhZHNfaW5pdCh2b2lkKQogewotCS8qIG5vb3AgKi8gCisJLyogbm9vcCAqLwogCXJldHVybiAwOwogfQogCiB2b2lkIGdpdF90aHJlYWRzX3NodXRkb3duKHZvaWQpCiB7CiAJLyogU2h1dCBkb3duIGFueSBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSBnbG9iYWwgc3RhdGUgKi8KLQlnaXRfaGFzaF9nbG9iYWxfc2h1dGRvd24oKTsKLQlnaXRfZnV0aWxzX2RpcnNfZnJlZSgpOworCWdpdF9fc2h1dGRvd24oKTsKIH0KIAogZ2l0X2dsb2JhbF9zdCAqZ2l0X19nbG9iYWxfc3RhdGUodm9pZCkKZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWwuaCBiL3NyYy9nbG9iYWwuaAppbmRleCBiYWRiYzA4Li43NzgyNTAzIDEwMDY0NAotLS0gYS9zcmMvZ2xvYmFsLmgKKysrIGIvc3JjL2dsb2JhbC5oCkBAIC0yMSw0ICsyMSw4IEBACiAKICNkZWZpbmUgR0lUX0dMT0JBTCAoZ2l0X19nbG9iYWxfc3RhdGUoKSkKIAordHlwZWRlZiB2b2lkICgqZ2l0X2dsb2JhbF9zaHV0ZG93bl9mbikodm9pZCk7CisKK2V4dGVybiB2b2lkIGdpdF9fb25fc2h1dGRvd24oZ2l0X2dsb2JhbF9zaHV0ZG93bl9mbiBjYWxsYmFjayk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2hhc2guaCBiL3NyYy9oYXNoLmgKaW5kZXggNWI4NDg5OC4uYzQ3ZjMzNSAxMDA2NDQKLS0tIGEvc3JjL2hhc2guaAorKysgYi9zcmMvaGFzaC5oCkBAIC0xMyw4ICsxMyw2IEBACiB0eXBlZGVmIHN0cnVjdCBnaXRfaGFzaF9jdHggZ2l0X2hhc2hfY3R4OwogCiBpbnQgZ2l0X2hhc2hfZ2xvYmFsX2luaXQodm9pZCk7Ci12b2lkIGdpdF9oYXNoX2dsb2JhbF9zaHV0ZG93bih2b2lkKTsKLQogaW50IGdpdF9oYXNoX2N0eF9pbml0KGdpdF9oYXNoX2N0eCAqY3R4KTsKIHZvaWQgZ2l0X2hhc2hfY3R4X2NsZWFudXAoZ2l0X2hhc2hfY3R4ICpjdHgpOwogCmRpZmYgLS1naXQgYS9zcmMvaGFzaC9oYXNoX2dlbmVyaWMuaCBiL3NyYy9oYXNoL2hhc2hfZ2VuZXJpYy5oCmluZGV4IDZiNjBjOTguLmRhZWIxY2QgMTAwNjQ0Ci0tLSBhL3NyYy9oYXNoL2hhc2hfZ2VuZXJpYy5oCisrKyBiL3NyYy9oYXNoL2hhc2hfZ2VuZXJpYy5oCkBAIC0xNyw3ICsxNyw2IEBACiB9OwogCiAjZGVmaW5lIGdpdF9oYXNoX2dsb2JhbF9pbml0KCkgMAotI2RlZmluZSBnaXRfaGFzaF9nbG9iYWxfc2h1dGRvd24oKSAvKiBub29wICovCiAjZGVmaW5lIGdpdF9oYXNoX2N0eF9pbml0KGN0eCkgZ2l0X2hhc2hfaW5pdChjdHgpCiAjZGVmaW5lIGdpdF9oYXNoX2N0eF9jbGVhbnVwKGN0eCkKIApkaWZmIC0tZ2l0IGEvc3JjL2hhc2gvaGFzaF9vcGVuc3NsLmggYi9zcmMvaGFzaC9oYXNoX29wZW5zc2wuaAppbmRleCBmODMyNzlhLi45YTU1ZDQ3IDEwMDY0NAotLS0gYS9zcmMvaGFzaC9oYXNoX29wZW5zc2wuaAorKysgYi9zcmMvaGFzaC9oYXNoX29wZW5zc2wuaApAQCAtMTcsNyArMTcsNiBAQAogfTsKIAogI2RlZmluZSBnaXRfaGFzaF9nbG9iYWxfaW5pdCgpIDAKLSNkZWZpbmUgZ2l0X2hhc2hfZ2xvYmFsX3NodXRkb3duKCkgLyogbm9vcCAqLwogI2RlZmluZSBnaXRfaGFzaF9jdHhfaW5pdChjdHgpIGdpdF9oYXNoX2luaXQoY3R4KQogI2RlZmluZSBnaXRfaGFzaF9jdHhfY2xlYW51cChjdHgpCiAKZGlmZiAtLWdpdCBhL3NyYy9oYXNoL2hhc2hfd2luMzIuYyBiL3NyYy9oYXNoL2hhc2hfd2luMzIuYwppbmRleCA0M2Q1NGNhLi5iYjIyMzEzIDEwMDY0NAotLS0gYS9zcmMvaGFzaC9oYXNoX3dpbjMyLmMKKysrIGIvc3JjL2hhc2gvaGFzaF93aW4zMi5jCkBAIC0yMCwzMyArMjAsMTYgQEAKIC8qIEluaXRpYWxpemUgQ05HLCBpZiBhdmFpbGFibGUgKi8KIEdJVF9JTkxJTkUoaW50KSBoYXNoX2NuZ19wcm92X2luaXQodm9pZCkKIHsKLQlPU1ZFUlNJT05JTkZPRVggdmVyc2lvbl90ZXN0ID0gezB9OwotCURXT1JEIHZlcnNpb25fdGVzdF9tYXNrOwotCURXT1JETE9ORyB2ZXJzaW9uX2NvbmRpdGlvbl9tYXNrID0gMDsKIAljaGFyIGRsbF9wYXRoW01BWF9QQVRIXTsKIAlEV09SRCBkbGxfcGF0aF9sZW4sIHNpemVfbGVuOwogCi0JcmV0dXJuIC0xOwotCiAJLyogT25seSB1c2UgQ05HIG9uIFdpbmRvd3MgMjAwOCAvIFZpc3RhIFNQMSAgb3IgYmV0dGVyIChXaW5kb3dzIDYuMCBTUDEpICovCi0JdmVyc2lvbl90ZXN0LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GT0VYKTsKLQl2ZXJzaW9uX3Rlc3QuZHdNYWpvclZlcnNpb24gPSA2OwotCXZlcnNpb25fdGVzdC5kd01pbm9yVmVyc2lvbiA9IDA7Ci0JdmVyc2lvbl90ZXN0LndTZXJ2aWNlUGFja01ham9yID0gMTsKLQl2ZXJzaW9uX3Rlc3Qud1NlcnZpY2VQYWNrTWlub3IgPSAwOwotCi0JdmVyc2lvbl90ZXN0X21hc2sgPSAoVkVSX01BSk9SVkVSU0lPTiB8IFZFUl9NSU5PUlZFUlNJT04gfCBWRVJfU0VSVklDRVBBQ0tNQUpPUiB8IFZFUl9TRVJWSUNFUEFDS01JTk9SKTsKLQotCVZFUl9TRVRfQ09ORElUSU9OKHZlcnNpb25fY29uZGl0aW9uX21hc2ssIFZFUl9NQUpPUlZFUlNJT04sIFZFUl9HUkVBVEVSX0VRVUFMKTsKLQlWRVJfU0VUX0NPTkRJVElPTih2ZXJzaW9uX2NvbmRpdGlvbl9tYXNrLCBWRVJfTUlOT1JWRVJTSU9OLCBWRVJfR1JFQVRFUl9FUVVBTCk7Ci0JVkVSX1NFVF9DT05ESVRJT04odmVyc2lvbl9jb25kaXRpb25fbWFzaywgVkVSX1NFUlZJQ0VQQUNLTUFKT1IsIFZFUl9HUkVBVEVSX0VRVUFMKTsKLQlWRVJfU0VUX0NPTkRJVElPTih2ZXJzaW9uX2NvbmRpdGlvbl9tYXNrLCBWRVJfU0VSVklDRVBBQ0tNSU5PUiwgVkVSX0dSRUFURVJfRVFVQUwpOwotCi0JaWYgKCFWZXJpZnlWZXJzaW9uSW5mbygmdmVyc2lvbl90ZXN0LCB2ZXJzaW9uX3Rlc3RfbWFzaywgdmVyc2lvbl9jb25kaXRpb25fbWFzaykpCisJaWYgKCFnaXRfaGFzX3dpbjMyX3ZlcnNpb24oNiwgMCwgMSkpCiAJCXJldHVybiAtMTsKIAogCS8qIExvYWQgYmNyeXB0LmRsbCBleHBsaWNpdGx5IGZyb20gdGhlIHN5c3RlbSBkaXJlY3RvcnkgKi8KLQlpZiAoKGRsbF9wYXRoX2xlbiA9IEdldFN5c3RlbURpcmVjdG9yeShkbGxfcGF0aCwgTUFYX1BBVEgpKSA9PSAwIHx8IGRsbF9wYXRoX2xlbiA+IE1BWF9QQVRIIHx8CisJaWYgKChkbGxfcGF0aF9sZW4gPSBHZXRTeXN0ZW1EaXJlY3RvcnkoZGxsX3BhdGgsIE1BWF9QQVRIKSkgPT0gMCB8fAorCQlkbGxfcGF0aF9sZW4gPiBNQVhfUEFUSCB8fAogCQlTdHJpbmdDY2hDYXQoZGxsX3BhdGgsIE1BWF9QQVRILCAiXFwiKSA8IDAgfHwKIAkJU3RyaW5nQ2NoQ2F0KGRsbF9wYXRoLCBNQVhfUEFUSCwgR0lUX0hBU0hfQ05HX0RMTF9OQU1FKSA8IDAgfHwKIAkJKGhhc2hfcHJvdi5wcm92LmNuZy5kbGwgPSBMb2FkTGlicmFyeShkbGxfcGF0aCkpID09IE5VTEwpCkBAIC0xMDYsNyArODksMTUgQEAKIAloYXNoX3Byb3YudHlwZSA9IElOVkFMSUQ7CiB9CiAKLWludCBnaXRfaGFzaF9nbG9iYWxfaW5pdCgpCitzdGF0aWMgdm9pZCBnaXRfaGFzaF9nbG9iYWxfc2h1dGRvd24odm9pZCkKK3sKKwlpZiAoaGFzaF9wcm92LnR5cGUgPT0gQ05HKQorCQloYXNoX2NuZ19wcm92X3NodXRkb3duKCk7CisJZWxzZSBpZihoYXNoX3Byb3YudHlwZSA9PSBDUllQVE9BUEkpCisJCWhhc2hfY3J5cHRvYXBpX3Byb3Zfc2h1dGRvd24oKTsKK30KKworaW50IGdpdF9oYXNoX2dsb2JhbF9pbml0KHZvaWQpCiB7CiAJaW50IGVycm9yID0gMDsKIApAQCAtMTE2LDE1ICsxMDcsOSBAQAogCWlmICgoZXJyb3IgPSBoYXNoX2NuZ19wcm92X2luaXQoKSkgPCAwKQogCQllcnJvciA9IGhhc2hfY3J5cHRvYXBpX3Byb3ZfaW5pdCgpOwogCi0JcmV0dXJuIGVycm9yOwkKLX0KKwlnaXRfX29uX3NodXRkb3duKGdpdF9oYXNoX2dsb2JhbF9zaHV0ZG93bik7CiAKLXZvaWQgZ2l0X2hhc2hfZ2xvYmFsX3NodXRkb3duKCkKLXsKLQlpZiAoaGFzaF9wcm92LnR5cGUgPT0gQ05HKQotCQloYXNoX2NuZ19wcm92X3NodXRkb3duKCk7Ci0JZWxzZSBpZihoYXNoX3Byb3YudHlwZSA9PSBDUllQVE9BUEkpCi0JCWhhc2hfY3J5cHRvYXBpX3Byb3Zfc2h1dGRvd24oKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qIENyeXB0b0FQSTogYXZhaWxhYmxlIGluIFdpbmRvd3MgWFAgYW5kIG5ld2VyICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaHNpZy5jIGIvc3JjL2hhc2hzaWcuYwppbmRleCBhYjhkOGIzLi4xMDlmOTY2IDEwMDY0NAotLS0gYS9zcmMvaGFzaHNpZy5jCisrKyBiL3NyYy9oYXNoc2lnLmMKQEAgLTEzLDEyICsxMywxNSBAQAogCiAjZGVmaW5lIEhBU0hTSUdfU0NBTEUgMTAwCiAKLSNkZWZpbmUgSEFTSFNJR19IQVNIX1dJTkRPVyAzMgotI2RlZmluZSBIQVNIU0lHX0hBU0hfU1RBUlQJMAorI2RlZmluZSBIQVNIU0lHX01BWF9SVU4gODAKKyNkZWZpbmUgSEFTSFNJR19IQVNIX1NUQVJUCTB4MDEyMzQ1Njc4QUJDREVGMExMCiAjZGVmaW5lIEhBU0hTSUdfSEFTSF9TSElGVCAgNQotI2RlZmluZSBIQVNIU0lHX0hBU0hfTUFTSyAgIDB4N0ZGRkZGRkYKKworI2RlZmluZSBIQVNIU0lHX0hBU0hfTUlYKFMsQ0gpIFwKKwkoUykgPSAoKFMpIDw8IEhBU0hTSUdfSEFTSF9TSElGVCkgLSAoUykgKyAoaGFzaHNpZ19zdGF0ZSkoQ0gpCiAKICNkZWZpbmUgSEFTSFNJR19IRUFQX1NJWkUgKCgxIDw8IDcpIC0gMSkKKyNkZWZpbmUgSEFTSFNJR19IRUFQX01JTl9TSVpFIDQKIAogdHlwZWRlZiBpbnQgKCpoYXNoc2lnX2NtcCkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqKTsKIApAQCAtMjgsMTQgKzMxLDYgQEAKIAloYXNoc2lnX3QgdmFsdWVzW0hBU0hTSUdfSEVBUF9TSVpFXTsKIH0gaGFzaHNpZ19oZWFwOwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JaGFzaHNpZ19zdGF0ZSBzdGF0ZSwgc2hpZnRfbjsKLQljaGFyIHdpbmRvd1tIQVNIU0lHX0hBU0hfV0lORE9XXTsKLQlpbnQgd2luX2xlbiwgd2luX3Bvcywgc2F3X2xmOwotfSBoYXNoc2lnX2luX3Byb2dyZXNzOwotCi0jZGVmaW5lIEhBU0hTSUdfSU5fUFJPR1JFU1NfSU5JVCB7IEhBU0hTSUdfSEFTSF9TVEFSVCwgMSwgezB9LCAwLCAwLCAxIH0KLQogc3RydWN0IGdpdF9oYXNoc2lnIHsKIAloYXNoc2lnX2hlYXAgbWluczsKIAloYXNoc2lnX2hlYXAgbWF4czsKQEAgLTQzLDggKzM4LDggQEAKIAlpbnQgY29uc2lkZXJlZDsKIH07CiAKLSNkZWZpbmUgSEVBUF9MQ0hJTERfT0YoSSkgKCgoSSkqMikrMSkKLSNkZWZpbmUgSEVBUF9SQ0hJTERfT0YoSSkgKCgoSSkqMikrMikKKyNkZWZpbmUgSEVBUF9MQ0hJTERfT0YoSSkgKCgoSSk8PDEpKzEpCisjZGVmaW5lIEhFQVBfUkNISUxEX09GKEkpICgoKEkpPDwxKSsyKQogI2RlZmluZSBIRUFQX1BBUkVOVF9PRihJKSAoKChJKS0xKT4+MSkKIAogc3RhdGljIHZvaWQgaGFzaHNpZ19oZWFwX2luaXQoaGFzaHNpZ19oZWFwICpoLCBoYXNoc2lnX2NtcCBjbXApCkBAIC0xMTUsMTM0ICsxMTAsMTA5IEBACiAKIHN0YXRpYyB2b2lkIGhhc2hzaWdfaGVhcF9pbnNlcnQoaGFzaHNpZ19oZWFwICpoLCBoYXNoc2lnX3QgdmFsKQogewotCS8qIGlmIGhlYXAgaXMgZnVsbCwgcG9wIHRvcCBpZiBuZXcgZWxlbWVudCBzaG91bGQgcmVwbGFjZSBpdCAqLwotCWlmIChoLT5zaXplID09IGgtPmFzaXplICYmIGgtPmNtcCgmdmFsLCAmaC0+dmFsdWVzWzBdLCBOVUxMKSA+IDApIHsKLQkJaC0+c2l6ZS0tOwotCQloLT52YWx1ZXNbMF0gPSBoLT52YWx1ZXNbaC0+c2l6ZV07Ci0JCWhhc2hzaWdfaGVhcF9kb3duKGgsIDApOwotCX0KLQogCS8qIGlmIGhlYXAgaXMgbm90IGZ1bGwsIGluc2VydCBuZXcgZWxlbWVudCAqLwogCWlmIChoLT5zaXplIDwgaC0+YXNpemUpIHsKIAkJaC0+dmFsdWVzW2gtPnNpemUrK10gPSB2YWw7CiAJCWhhc2hzaWdfaGVhcF91cChoLCBoLT5zaXplIC0gMSk7CiAJfQorCisJLyogaWYgaGVhcCBpcyBmdWxsLCBwb3AgdG9wIGlmIG5ldyBlbGVtZW50IHNob3VsZCByZXBsYWNlIGl0ICovCisJZWxzZSBpZiAoaC0+Y21wKCZ2YWwsICZoLT52YWx1ZXNbMF0sIE5VTEwpID4gMCkgeworCQloLT5zaXplLS07CisJCWgtPnZhbHVlc1swXSA9IGgtPnZhbHVlc1toLT5zaXplXTsKKwkJaGFzaHNpZ19oZWFwX2Rvd24oaCwgMCk7CisJfQorCiB9CiAKLUdJVF9JTkxJTkUoYm9vbCkgaGFzaHNpZ19pbmNsdWRlX2NoYXIoCi0JY2hhciBjaCwgZ2l0X2hhc2hzaWdfb3B0aW9uX3Qgb3B0LCBpbnQgKnNhd19sZikKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgdXNlX2lnbm9yZXM7CisJdWludDhfdCBpZ25vcmVfY2hbMjU2XTsKK30gaGFzaHNpZ19pbl9wcm9ncmVzczsKKworc3RhdGljIHZvaWQgaGFzaHNpZ19pbl9wcm9ncmVzc19pbml0KAorCWhhc2hzaWdfaW5fcHJvZ3Jlc3MgKnByb2csIGdpdF9oYXNoc2lnICpzaWcpCiB7Ci0JaWYgKChvcHQgJiBHSVRfSEFTSFNJR19JR05PUkVfV0hJVEVTUEFDRSkgJiYgZ2l0X19pc3NwYWNlKGNoKSkKLQkJcmV0dXJuIGZhbHNlOworCWludCBpOwogCi0JaWYgKG9wdCAmIEdJVF9IQVNIU0lHX1NNQVJUX1dISVRFU1BBQ0UpIHsKLQkJaWYgKGNoID09ICdccicgfHwgKCpzYXdfbGYgJiYgZ2l0X19pc3NwYWNlKGNoKSkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJKnNhd19sZiA9IChjaCA9PSAnXG4nKTsKKwlzd2l0Y2ggKHNpZy0+b3B0KSB7CisJY2FzZSBHSVRfSEFTSFNJR19JR05PUkVfV0hJVEVTUEFDRToKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKQorCQkJcHJvZy0+aWdub3JlX2NoW2ldID0gZ2l0X19pc3NwYWNlX25vbmxmKGkpOworCQlwcm9nLT51c2VfaWdub3JlcyA9IDE7CisJCWJyZWFrOworCWNhc2UgR0lUX0hBU0hTSUdfU01BUlRfV0hJVEVTUEFDRToKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKQorCQkJcHJvZy0+aWdub3JlX2NoW2ldID0gZ2l0X19pc3NwYWNlKGkpOworCQlwcm9nLT51c2VfaWdub3JlcyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1lbXNldChwcm9nLCAwLCBzaXplb2YoKnByb2cpKTsKKwkJYnJlYWs7CiAJfQotCi0JcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGhhc2hzaWdfaW5pdGlhbF93aW5kb3coCi0JZ2l0X2hhc2hzaWcgKnNpZywKLQljb25zdCBjaGFyICoqZGF0YSwKLQlzaXplX3Qgc2l6ZSwKLQloYXNoc2lnX2luX3Byb2dyZXNzICpwcm9nKQotewotCWhhc2hzaWdfc3RhdGUgc3RhdGUsIHNoaWZ0X247Ci0JaW50IHdpbl9sZW47Ci0JY29uc3QgY2hhciAqc2NhbiwgKmVuZDsKLQotCS8qIGluaXQgdW50aWwgd2UgaGF2ZSBwcm9jZXNzZWQgYXQgbGVhc3QgSEFTSFNJR19IQVNIX1dJTkRPVyBkYXRhICovCi0KLQlpZiAocHJvZy0+d2luX2xlbiA+PSBIQVNIU0lHX0hBU0hfV0lORE9XKQotCQlyZXR1cm47Ci0KLQlzdGF0ZSAgID0gcHJvZy0+c3RhdGU7Ci0Jd2luX2xlbiA9IHByb2ctPndpbl9sZW47Ci0Jc2hpZnRfbiA9IHByb2ctPnNoaWZ0X247Ci0KLQlzY2FuID0gKmRhdGE7Ci0JZW5kICA9IHNjYW4gKyBzaXplOwotCi0Jd2hpbGUgKHNjYW4gPCBlbmQgJiYgd2luX2xlbiA8IEhBU0hTSUdfSEFTSF9XSU5ET1cpIHsKLQkJY2hhciBjaCA9ICpzY2FuKys7Ci0KLQkJaWYgKCFoYXNoc2lnX2luY2x1ZGVfY2hhcihjaCwgc2lnLT5vcHQsICZwcm9nLT5zYXdfbGYpKQotCQkJY29udGludWU7Ci0KLQkJc3RhdGUgPSAoc3RhdGUgKiBIQVNIU0lHX0hBU0hfU0hJRlQgKyBjaCkgJiBIQVNIU0lHX0hBU0hfTUFTSzsKLQotCQlpZiAoIXdpbl9sZW4pCi0JCQlzaGlmdF9uID0gMTsKLQkJZWxzZQotCQkJc2hpZnRfbiA9IChzaGlmdF9uICogSEFTSFNJR19IQVNIX1NISUZUKSAmIEhBU0hTSUdfSEFTSF9NQVNLOwotCi0JCXByb2ctPndpbmRvd1t3aW5fbGVuKytdID0gY2g7Ci0JfQotCi0JLyogaW5zZXJ0IGluaXRpYWwgaGFzaCBpZiB3ZSBqdXN0IGZpbmlzaGVkICovCi0KLQlpZiAod2luX2xlbiA9PSBIQVNIU0lHX0hBU0hfV0lORE9XKSB7Ci0JCWhhc2hzaWdfaGVhcF9pbnNlcnQoJnNpZy0+bWlucywgKGhhc2hzaWdfdClzdGF0ZSk7Ci0JCWhhc2hzaWdfaGVhcF9pbnNlcnQoJnNpZy0+bWF4cywgKGhhc2hzaWdfdClzdGF0ZSk7Ci0JCXNpZy0+Y29uc2lkZXJlZCA9IDE7Ci0JfQotCi0JcHJvZy0+c3RhdGUgICA9IHN0YXRlOwotCXByb2ctPndpbl9sZW4gPSB3aW5fbGVuOwotCXByb2ctPnNoaWZ0X24gPSBzaGlmdF9uOwotCi0JKmRhdGEgPSBzY2FuOwotfQorI2RlZmluZSBIQVNIU0lHX0lOX1BST0dSRVNTX0lOSVQgeyAxIH0KIAogc3RhdGljIGludCBoYXNoc2lnX2FkZF9oYXNoZXMoCiAJZ2l0X2hhc2hzaWcgKnNpZywKLQljb25zdCBjaGFyICpkYXRhLAorCWNvbnN0IHVpbnQ4X3QgKmRhdGEsCiAJc2l6ZV90IHNpemUsCiAJaGFzaHNpZ19pbl9wcm9ncmVzcyAqcHJvZykKIHsKLQljb25zdCBjaGFyICpzY2FuID0gZGF0YSwgKmVuZCA9IGRhdGEgKyBzaXplOwotCWhhc2hzaWdfc3RhdGUgc3RhdGUsIHNoaWZ0X24sIHJtdjsKKwljb25zdCB1aW50OF90ICpzY2FuID0gZGF0YSwgKmVuZCA9IGRhdGEgKyBzaXplOworCWhhc2hzaWdfc3RhdGUgc3RhdGUgPSBIQVNIU0lHX0hBU0hfU1RBUlQ7CisJaW50IHVzZV9pZ25vcmVzID0gcHJvZy0+dXNlX2lnbm9yZXMsIGxlbjsKKwl1aW50OF90IGNoOwogCi0JaWYgKHByb2ctPndpbl9sZW4gPCBIQVNIU0lHX0hBU0hfV0lORE9XKQotCQloYXNoc2lnX2luaXRpYWxfd2luZG93KHNpZywgJnNjYW4sIHNpemUsIHByb2cpOworCXdoaWxlIChzY2FuIDwgZW5kKSB7CisJCXN0YXRlID0gSEFTSFNJR19IQVNIX1NUQVJUOwogCi0Jc3RhdGUgICA9IHByb2ctPnN0YXRlOwotCXNoaWZ0X24gPSBwcm9nLT5zaGlmdF9uOworCQlmb3IgKGxlbiA9IDA7IHNjYW4gPCBlbmQgJiYgbGVuIDwgSEFTSFNJR19NQVhfUlVOOyApIHsKKwkJCWNoID0gKnNjYW47CiAKLQkvKiBhZHZhbmNlIHdpbmRvdywgYWRkaW5nIG5ldyBjaGFycyBhbmQgcmVtb3Zpbmcgb2xkICovCisJCQlpZiAodXNlX2lnbm9yZXMpCisJCQkJZm9yICg7IHNjYW4gPCBlbmQgJiYgZ2l0X19pc3NwYWNlX25vbmxmKGNoKTsgY2ggPSAqc2NhbikKKwkJCQkJKytzY2FuOworCQkJZWxzZSBpZiAoc2lnLT5vcHQgIT0gR0lUX0hBU0hTSUdfTk9STUFMKQorCQkJCWZvciAoOyBzY2FuIDwgZW5kICYmIGNoID09ICdccic7IGNoID0gKnNjYW4pCisJCQkJCSsrc2NhbjsKIAotCWZvciAoOyBzY2FuIDwgZW5kOyArK3NjYW4pIHsKLQkJY2hhciBjaCA9ICpzY2FuOworCQkJLyogcGVlayBhdCBuZXh0IGNoYXJhY3RlciB0byBkZWNpZGUgd2hhdCB0byBkbyBuZXh0ICovCisJCQlpZiAoc2lnLT5vcHQgPT0gR0lUX0hBU0hTSUdfU01BUlRfV0hJVEVTUEFDRSkKKwkJCQl1c2VfaWdub3JlcyA9IChjaCA9PSAnXG4nKTsKIAotCQlpZiAoIWhhc2hzaWdfaW5jbHVkZV9jaGFyKGNoLCBzaWctPm9wdCwgJnByb2ctPnNhd19sZikpCi0JCQljb250aW51ZTsKKwkJCWlmIChzY2FuID49IGVuZCkKKwkJCQlicmVhazsKKwkJCSsrc2NhbjsKIAotCQlybXYgPSBzaGlmdF9uICogcHJvZy0+d2luZG93W3Byb2ctPndpbl9wb3NdOworCQkJLyogY2hlY2sgcnVuIHRlcm1pbmF0b3IgKi8KKwkJCWlmIChjaCA9PSAnXG4nIHx8IGNoID09ICdcMCcpCisJCQkJYnJlYWs7CiAKLQkJc3RhdGUgPSAoc3RhdGUgLSBybXYpICYgSEFTSFNJR19IQVNIX01BU0s7Ci0JCXN0YXRlID0gKHN0YXRlICogSEFTSFNJR19IQVNIX1NISUZUKSAmIEhBU0hTSUdfSEFTSF9NQVNLOwotCQlzdGF0ZSA9IChzdGF0ZSArIGNoKSAmIEhBU0hTSUdfSEFTSF9NQVNLOworCQkJKytsZW47CisJCQlIQVNIU0lHX0hBU0hfTUlYKHN0YXRlLCBjaCk7CisJCX0KIAotCQloYXNoc2lnX2hlYXBfaW5zZXJ0KCZzaWctPm1pbnMsIChoYXNoc2lnX3Qpc3RhdGUpOwotCQloYXNoc2lnX2hlYXBfaW5zZXJ0KCZzaWctPm1heHMsIChoYXNoc2lnX3Qpc3RhdGUpOwotCQlzaWctPmNvbnNpZGVyZWQrKzsKKwkJaWYgKGxlbiA+IDApIHsKKwkJCWhhc2hzaWdfaGVhcF9pbnNlcnQoJnNpZy0+bWlucywgKGhhc2hzaWdfdClzdGF0ZSk7CisJCQloYXNoc2lnX2hlYXBfaW5zZXJ0KCZzaWctPm1heHMsIChoYXNoc2lnX3Qpc3RhdGUpOwogCi0JCXByb2ctPndpbmRvd1twcm9nLT53aW5fcG9zXSA9IGNoOwotCQlwcm9nLT53aW5fcG9zID0gKHByb2ctPndpbl9wb3MgKyAxKSAlIEhBU0hTSUdfSEFTSF9XSU5ET1c7CisJCQlzaWctPmNvbnNpZGVyZWQrKzsKKworCQkJd2hpbGUgKHNjYW4gPCBlbmQgJiYgKCpzY2FuID09ICdcbicgfHwgISpzY2FuKSkKKwkJCQkrK3NjYW47CisJCX0KIAl9CiAKLQlwcm9nLT5zdGF0ZSA9IHN0YXRlOworCXByb2ctPnVzZV9pZ25vcmVzID0gdXNlX2lnbm9yZXM7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBoYXNoc2lnX2ZpbmFsaXplX2hhc2hlcyhnaXRfaGFzaHNpZyAqc2lnKQogewotCWlmIChzaWctPm1pbnMuc2l6ZSA8IEhBU0hTSUdfSEVBUF9TSVpFKSB7CisJaWYgKHNpZy0+bWlucy5zaXplIDwgSEFTSFNJR19IRUFQX01JTl9TSVpFKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsCiAJCQkiRmlsZSB0b28gc21hbGwgZm9yIHNpbWlsYXJpdHkgc2lnbmF0dXJlIGNhbGN1bGF0aW9uIik7CiAJCXJldHVybiBHSVRfRUJVRlM7CkBAIC0yNzQsMTEgKzI0NCwxMyBAQAogCWdpdF9oYXNoc2lnX29wdGlvbl90IG9wdHMpCiB7CiAJaW50IGVycm9yOwotCWhhc2hzaWdfaW5fcHJvZ3Jlc3MgcHJvZyA9IEhBU0hTSUdfSU5fUFJPR1JFU1NfSU5JVDsKKwloYXNoc2lnX2luX3Byb2dyZXNzIHByb2c7CiAJZ2l0X2hhc2hzaWcgKnNpZyA9IGhhc2hzaWdfYWxsb2Mob3B0cyk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHNpZyk7CiAKLQllcnJvciA9IGhhc2hzaWdfYWRkX2hhc2hlcyhzaWcsIGJ1ZiwgYnVmbGVuLCAmcHJvZyk7CisJaGFzaHNpZ19pbl9wcm9ncmVzc19pbml0KCZwcm9nLCBzaWcpOworCisJZXJyb3IgPSBoYXNoc2lnX2FkZF9oYXNoZXMoc2lnLCAoY29uc3QgdWludDhfdCAqKWJ1ZiwgYnVmbGVuLCAmcHJvZyk7CiAKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IGhhc2hzaWdfZmluYWxpemVfaGFzaGVzKHNpZyk7CkBAIC0yOTYsMTAgKzI2OCwxMCBAQAogCWNvbnN0IGNoYXIgKnBhdGgsCiAJZ2l0X2hhc2hzaWdfb3B0aW9uX3Qgb3B0cykKIHsKLQljaGFyIGJ1Zls0MDk2XTsKKwl1aW50OF90IGJ1ZlsweDEwMDBdOwogCXNzaXplX3QgYnVmbGVuID0gMDsKIAlpbnQgZXJyb3IgPSAwLCBmZDsKLQloYXNoc2lnX2luX3Byb2dyZXNzIHByb2cgPSBIQVNIU0lHX0lOX1BST0dSRVNTX0lOSVQ7CisJaGFzaHNpZ19pbl9wcm9ncmVzcyBwcm9nOwogCWdpdF9oYXNoc2lnICpzaWcgPSBoYXNoc2lnX2FsbG9jKG9wdHMpOwogCUdJVEVSUl9DSEVDS19BTExPQyhzaWcpOwogCkBAIC0zMDgsNiArMjgwLDggQEAKIAkJcmV0dXJuIGZkOwogCX0KIAorCWhhc2hzaWdfaW5fcHJvZ3Jlc3NfaW5pdCgmcHJvZywgc2lnKTsKKwogCXdoaWxlICghZXJyb3IpIHsKIAkJaWYgKChidWZsZW4gPSBwX3JlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSA8PSAwKSB7CiAJCQlpZiAoKGVycm9yID0gKGludClidWZsZW4pIDwgMCkKQEAgLTM2Miw2ICszMzYsMTIgQEAKIAogaW50IGdpdF9oYXNoc2lnX2NvbXBhcmUoY29uc3QgZ2l0X2hhc2hzaWcgKmEsIGNvbnN0IGdpdF9oYXNoc2lnICpiKQogewotCXJldHVybiAoaGFzaHNpZ19oZWFwX2NvbXBhcmUoJmEtPm1pbnMsICZiLT5taW5zKSArCi0JCQloYXNoc2lnX2hlYXBfY29tcGFyZSgmYS0+bWF4cywgJmItPm1heHMpKSAvIDI7CisJLyogaWYgd2UgaGF2ZSBmZXdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cywgdGhlbiBqdXN0IHVzZQorCSAqIG9uZSBhcnJheSBzaW5jZSB0aGUgdHdvIGFycmF5cyB3aWxsIGJlIHRoZSBzYW1lCisJICovCisJaWYgKGEtPm1pbnMuc2l6ZSA8IEhBU0hTSUdfSEVBUF9TSVpFKQorCQlyZXR1cm4gaGFzaHNpZ19oZWFwX2NvbXBhcmUoJmEtPm1pbnMsICZiLT5taW5zKTsKKwllbHNlCisJCXJldHVybiAoaGFzaHNpZ19oZWFwX2NvbXBhcmUoJmEtPm1pbnMsICZiLT5taW5zKSArCisJCQkJaGFzaHNpZ19oZWFwX2NvbXBhcmUoJmEtPm1heHMsICZiLT5tYXhzKSkgLyAyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2lkZW50LmMgYi9zcmMvaWRlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYzMDg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2lkZW50LmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJnaXQyLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdQTCB2MiB3aXRoCisgKiBhIExpbmtpbmcgRXhjZXB0aW9uLiBGb3IgZnVsbCB0ZXJtcyBzZWUgdGhlIGluY2x1ZGVkIENPUFlJTkcgZmlsZS4KKyAqLworCisjaW5jbHVkZSAiZ2l0Mi9zeXMvZmlsdGVyLmgiCisjaW5jbHVkZSAiZmlsdGVyLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiYnVmX3RleHQuaCIKKworc3RhdGljIGludCBpZGVudF9maW5kX2lkKAorCWNvbnN0IGNoYXIgKippZF9zdGFydCwgY29uc3QgY2hhciAqKmlkX2VuZCwgY29uc3QgY2hhciAqc3RhcnQsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqZW5kID0gc3RhcnQgKyBsZW4sICpmb3VuZCA9IE5VTEw7CisKKwl3aGlsZSAobGVuID4gMyAmJiAoZm91bmQgPSBtZW1jaHIoc3RhcnQsICckJywgbGVuKSkgIT0gTlVMTCkgeworCQlzaXplX3QgcmVtYWluaW5nID0gKHNpemVfdCkoZW5kIC0gZm91bmQpIC0gMTsKKwkJaWYgKHJlbWFpbmluZyA8IDMpCisJCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKKworCQlzdGFydCA9IGZvdW5kICsgMTsKKwkJbGVuICAgPSByZW1haW5pbmc7CisKKwkJaWYgKHN0YXJ0WzBdID09ICdJJyAmJiBzdGFydFsxXSA9PSAnZCcpCisJCQlicmVhazsKKwl9CisKKwlpZiAobGVuIDwgMyB8fCAhZm91bmQpCisJCXJldHVybiBHSVRfRU5PVEZPVU5EOworCSppZF9zdGFydCA9IGZvdW5kOworCisJaWYgKChmb3VuZCA9IG1lbWNocihzdGFydCArIDIsICckJywgbGVuIC0gMikpID09IE5VTEwpCisJCXJldHVybiBHSVRfRU5PVEZPVU5EOworCisJKmlkX2VuZCA9IGZvdW5kICsgMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZGVudF9pbnNlcnRfaWQoCisJZ2l0X2J1ZiAqdG8sIGNvbnN0IGdpdF9idWYgKmZyb20sIGNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMpCit7CisJY2hhciBvaWRbR0lUX09JRF9IRVhTWisxXTsKKwljb25zdCBjaGFyICppZF9zdGFydCwgKmlkX2VuZCwgKmZyb21fZW5kID0gZnJvbS0+cHRyICsgZnJvbS0+c2l6ZTsKKwlzaXplX3QgbmVlZF9zaXplOworCisJLyogcmVwbGFjZSAkSWQkIHdpdGggYmxvYiBpZCAqLworCisJaWYgKCFnaXRfZmlsdGVyX3NvdXJjZV9pZChzcmMpKQorCQlyZXR1cm4gR0lUX1BBU1NUSFJPVUdIOworCisJZ2l0X29pZF90b3N0cihvaWQsIHNpemVvZihvaWQpLCBnaXRfZmlsdGVyX3NvdXJjZV9pZChzcmMpKTsKKworCWlmIChpZGVudF9maW5kX2lkKCZpZF9zdGFydCwgJmlkX2VuZCwgZnJvbS0+cHRyLCBmcm9tLT5zaXplKSA8IDApCisJCXJldHVybiBHSVRfUEFTU1RIUk9VR0g7CisKKwluZWVkX3NpemUgPSAoc2l6ZV90KShpZF9zdGFydCAtIGZyb20tPnB0cikgKworCQk1IC8qICIkSWQ6ICIgKi8gKyBHSVRfT0lEX0hFWFNaICsgMSAvKiAiJCIgKi8gKworCQkoc2l6ZV90KShmcm9tX2VuZCAtIGlkX2VuZCk7CisKKwlpZiAoZ2l0X2J1Zl9ncm93KHRvLCBuZWVkX3NpemUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZ2l0X2J1Zl9zZXQodG8sIGZyb20tPnB0ciwgKHNpemVfdCkoaWRfc3RhcnQgLSBmcm9tLT5wdHIpKTsKKwlnaXRfYnVmX3B1dCh0bywgIiRJZDogIiwgNSk7CisJZ2l0X2J1Zl9wdXQodG8sIG9pZCwgR0lUX09JRF9IRVhTWik7CisJZ2l0X2J1Zl9wdXRjKHRvLCAnJCcpOworCWdpdF9idWZfcHV0KHRvLCBpZF9lbmQsIChzaXplX3QpKGZyb21fZW5kIC0gaWRfZW5kKSk7CisKKwlyZXR1cm4gZ2l0X2J1Zl9vb20odG8pID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IGlkZW50X3JlbW92ZV9pZCgKKwlnaXRfYnVmICp0bywgY29uc3QgZ2l0X2J1ZiAqZnJvbSkKK3sKKwljb25zdCBjaGFyICppZF9zdGFydCwgKmlkX2VuZCwgKmZyb21fZW5kID0gZnJvbS0+cHRyICsgZnJvbS0+c2l6ZTsKKwlzaXplX3QgbmVlZF9zaXplOworCisJaWYgKGlkZW50X2ZpbmRfaWQoJmlkX3N0YXJ0LCAmaWRfZW5kLCBmcm9tLT5wdHIsIGZyb20tPnNpemUpIDwgMCkKKwkJcmV0dXJuIEdJVF9QQVNTVEhST1VHSDsKKworCW5lZWRfc2l6ZSA9IChzaXplX3QpKGlkX3N0YXJ0IC0gZnJvbS0+cHRyKSArCisJCTQgLyogIiRJZCQiICovICsgKHNpemVfdCkoZnJvbV9lbmQgLSBpZF9lbmQpOworCisJaWYgKGdpdF9idWZfZ3Jvdyh0bywgbmVlZF9zaXplKSA8IDApCisJCXJldHVybiAtMTsKKworCWdpdF9idWZfc2V0KHRvLCBmcm9tLT5wdHIsIChzaXplX3QpKGlkX3N0YXJ0IC0gZnJvbS0+cHRyKSk7CisJZ2l0X2J1Zl9wdXQodG8sICIkSWQkIiwgNCk7CisJZ2l0X2J1Zl9wdXQodG8sIGlkX2VuZCwgKHNpemVfdCkoZnJvbV9lbmQgLSBpZF9lbmQpKTsKKworCXJldHVybiBnaXRfYnVmX29vbSh0bykgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRfYXBwbHkoCisJZ2l0X2ZpbHRlciAgICAgKnNlbGYsCisJdm9pZCAgICAgICAgICAqKnBheWxvYWQsCisJZ2l0X2J1ZiAgICAgICAgKnRvLAorCWNvbnN0IGdpdF9idWYgICpmcm9tLAorCWNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMpCit7CisJR0lUX1VOVVNFRChzZWxmKTsgR0lUX1VOVVNFRChwYXlsb2FkKTsKKworCS8qIERvbid0IGZpbHRlciBiaW5hcnkgZmlsZXMgKi8KKwlpZiAoZ2l0X2J1Zl90ZXh0X2lzX2JpbmFyeShmcm9tKSkKKwkJcmV0dXJuIEdJVF9QQVNTVEhST1VHSDsKKworCWlmIChnaXRfZmlsdGVyX3NvdXJjZV9tb2RlKHNyYykgPT0gR0lUX0ZJTFRFUl9TTVVER0UpCisJCXJldHVybiBpZGVudF9pbnNlcnRfaWQodG8sIGZyb20sIHNyYyk7CisJZWxzZQorCQlyZXR1cm4gaWRlbnRfcmVtb3ZlX2lkKHRvLCBmcm9tKTsKK30KKworZ2l0X2ZpbHRlciAqZ2l0X2lkZW50X2ZpbHRlcl9uZXcodm9pZCkKK3sKKwlnaXRfZmlsdGVyICpmID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9maWx0ZXIpKTsKKworCWYtPnZlcnNpb24gPSBHSVRfRklMVEVSX1ZFUlNJT047CisJZi0+YXR0cmlidXRlcyA9ICIraWRlbnQiOyAvKiBhcHBseSB0byBmaWxlcyB3aXRoIGlkZW50IGF0dHJpYnV0ZSBzZXQgKi8KKwlmLT5zaHV0ZG93biA9IGdpdF9maWx0ZXJfZnJlZTsKKwlmLT5hcHBseSAgICA9IGlkZW50X2FwcGx5OworCisJcmV0dXJuIGY7Cit9CmRpZmYgLS1naXQgYS9zcmMvaWdub3JlLmMgYi9zcmMvaWdub3JlLmMKaW5kZXggY2M5MGIwYy4uMjdkN2M3ZSAxMDA2NDQKLS0tIGEvc3JjL2lnbm9yZS5jCisrKyBiL3NyYy9pZ25vcmUuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlICJnaXQyL2lnbm9yZS5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgImlnbm9yZS5oIgogI2luY2x1ZGUgImF0dHIuaCIKICNpbmNsdWRlICJwYXRoLmgiCkBAIC0zNyw3ICszOCw3IEBACiAJCQlHSVRFUlJfQ0hFQ0tfQUxMT0MobWF0Y2gpOwogCQl9CiAKLQkJbWF0Y2gtPmZsYWdzID0gR0lUX0FUVFJfRk5NQVRDSF9BTExPV1NQQUNFOworCQltYXRjaC0+ZmxhZ3MgPSBHSVRfQVRUUl9GTk1BVENIX0FMTE9XU1BBQ0UgfCBHSVRfQVRUUl9GTk1BVENIX0FMTE9XTkVHOwogCiAJCWlmICghKGVycm9yID0gZ2l0X2F0dHJfZm5tYXRjaF9fcGFyc2UoCiAJCQltYXRjaCwgaWdub3Jlcy0+cG9vbCwgY29udGV4dCwgJnNjYW4pKSkKQEAgLTE1OSwxNyArMTYwLDM2IEBACiB7CiAJaWYgKGdpdF9idWZfam9pbnBhdGgoJmlnbi0+ZGlyLCBpZ24tPmRpci5wdHIsIGRpcikgPCAwKQogCQlyZXR1cm4gLTE7Ci0JZWxzZQotCQlyZXR1cm4gcHVzaF9pZ25vcmVfZmlsZSgKLQkJCWlnbi0+cmVwbywgaWduLCAmaWduLT5pZ25fcGF0aCwgaWduLT5kaXIucHRyLCBHSVRfSUdOT1JFX0ZJTEUpOworCisJcmV0dXJuIHB1c2hfaWdub3JlX2ZpbGUoCisJCWlnbi0+cmVwbywgaWduLCAmaWduLT5pZ25fcGF0aCwgaWduLT5kaXIucHRyLCBHSVRfSUdOT1JFX0ZJTEUpOwogfQogCiBpbnQgZ2l0X2lnbm9yZV9fcG9wX2RpcihnaXRfaWdub3JlcyAqaWduKQogewogCWlmIChpZ24tPmlnbl9wYXRoLmxlbmd0aCA+IDApIHsKIAkJZ2l0X2F0dHJfZmlsZSAqZmlsZSA9IGdpdF92ZWN0b3JfbGFzdCgmaWduLT5pZ25fcGF0aCk7Ci0JCWlmIChnaXRfX3N1ZmZpeGNtcChpZ24tPmRpci5wdHIsIGZpbGUtPmtleSArIDIpID09IDApCisJCWNvbnN0IGNoYXIgKnN0YXJ0LCAqZW5kLCAqc2NhbjsKKwkJc2l6ZV90IGtleWxlbjsKKworCQkvKiAtIGlnbi0+ZGlyIGxvb2tzIHNvbWV0aGluZyBsaWtlICJhL2IiIChvciAiYS9iL2MvZCIpCisJCSAqIC0gZmlsZS0+a2V5IGxvb2tzIHNvbWV0aGluZyBsaWtlICIwI2EvYi8uZ2l0aWdub3JlCisJCSAqCisJCSAqIFdlIGFyZSBwb3BwaW5nIHRoZSBsYXN0IGRpcmVjdG9yeSBvZmYgaWduLT5kaXIuICBXZSBhbHNvIHdhbnQgdG8KKwkJICogcmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIHZlY3RvciBpZiB0aGUgZGlyZWN0b3J5IHBhcnQgb2YgdGhlIGtleQorCQkgKiBtYXRjaGVzIHRoZSBpZ24tPmRpciBwYXRoLiAgV2UgbmVlZCB0byB0ZXN0IGlmIHRoZSAiYS9iIiBwYXJ0IG9mCisJCSAqIHRoZSBmaWxlIGtleSBtYXRjaGVzIHRoZSBwYXRoIHdlIGFyZSBhYm91dCB0byBwb3AuCisJCSAqLworCisJCWZvciAoc3RhcnQgPSBlbmQgPSBzY2FuID0gJmZpbGUtPmtleVsyXTsgKnNjYW47ICsrc2NhbikKKwkJCWlmICgqc2NhbiA9PSAnLycpCisJCQkJZW5kID0gc2NhbjsgLyogcG9pbnQgJ2VuZCcgdG8gbGFzdCAnLycgaW4ga2V5ICovCisJCWtleWxlbiA9IChlbmQgLSBzdGFydCkgKyAxOworCisJCWlmIChpZ24tPmRpci5zaXplID49IGtleWxlbiAmJgorCQkJIW1lbWNtcChpZ24tPmRpci5wdHIgKyBpZ24tPmRpci5zaXplIC0ga2V5bGVuLCBzdGFydCwga2V5bGVuKSkKIAkJCWdpdF92ZWN0b3JfcG9wKCZpZ24tPmlnbl9wYXRoKTsKKwogCQlnaXRfYnVmX3J0cnVuY2F0ZV9hdF9jaGFyKCZpZ24tPmRpciwgJy8nKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yOTgsMTIgKzMxOCw5IEBACiAJCXBhdGguZnVsbC5zaXplID0gKHRhaWwgLSBwYXRoLmZ1bGwucHRyKTsKIAkJcGF0aC5pc19kaXIgPSAodGFpbCA9PSBlbmQpID8gZnVsbF9pc19kaXIgOiB0cnVlOwogCi0JCS8qIHVwZGF0ZSBpZ25vcmVzIGZvciBuZXcgcGF0aCBmcmFnbWVudCAqLwotCQlpZiAocGF0aC5iYXNlbmFtZSA9PSBwYXRoLnBhdGgpCi0JCQllcnJvciA9IGdpdF9pZ25vcmVfX2Zvcl9wYXRoKHJlcG8sIHBhdGgucGF0aCwgJmlnbm9yZXMpOwotCQllbHNlCi0JCQllcnJvciA9IGdpdF9pZ25vcmVfX3B1c2hfZGlyKCZpZ25vcmVzLCBwYXRoLmJhc2VuYW1lKTsKLQkJaWYgKGVycm9yIDwgMCkKKwkJLyogaW5pdGlhbGl6ZSBpZ25vcmVzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKwkJaWYgKHBhdGguYmFzZW5hbWUgPT0gcGF0aC5wYXRoICYmCisJCQkoZXJyb3IgPSBnaXRfaWdub3JlX19mb3JfcGF0aChyZXBvLCBwYXRoLnBhdGgsICZpZ25vcmVzKSkgPCAwKQogCQkJYnJlYWs7CiAKIAkJLyogZmlyc3QgcHJvY2VzcyBidWlsdGlucyAtIHN1Y2Nlc3MgbWVhbnMgcGF0aCB3YXMgZm91bmQgKi8KQEAgLTMyNyw2ICszNDQsMTAgQEAKIAkJaWYgKHRhaWwgPT0gZW5kKQogCQkJYnJlYWs7CiAKKwkJLyogbm93IGFkZCB0aGlzIGRpcmVjdG9yeSB0byBsaXN0IG9mIGlnbm9yZXMgKi8KKwkJaWYgKChlcnJvciA9IGdpdF9pZ25vcmVfX3B1c2hfZGlyKCZpZ25vcmVzLCBwYXRoLnBhdGgpKSA8IDApCisJCQlicmVhazsKKwogCQkvKiByZWluc3RhdGUgZGl2aWRlciBpbiBwYXRoICovCiAJCSp0YWlsID0gJy8nOwogCQl3aGlsZSAoKnRhaWwgPT0gJy8nKSB0YWlsKys7CmRpZmYgLS1naXQgYS9zcmMvaWdub3JlLmggYi9zcmMvaWdub3JlLmgKaW5kZXggY2MxMTRiMC4uODUxYzgyNCAxMDA2NDQKLS0tIGEvc3JjL2lnbm9yZS5oCisrKyBiL3NyYy9pZ25vcmUuaApAQCAtMjQsMTQgKzI0LDE1IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKLQlnaXRfYnVmIGRpcjsKKwlnaXRfYnVmIGRpcjsgLyogY3VycmVudCBkaXJlY3RvcnkgcmVmbGVjdGVkIGluIGlnbl9wYXRoICovCiAJZ2l0X2F0dHJfZmlsZSAqaWduX2ludGVybmFsOwogCWdpdF92ZWN0b3IgaWduX3BhdGg7CiAJZ2l0X3ZlY3RvciBpZ25fZ2xvYmFsOwogCWludCBpZ25vcmVfY2FzZTsKIH0gZ2l0X2lnbm9yZXM7CiAKLWV4dGVybiBpbnQgZ2l0X2lnbm9yZV9fZm9yX3BhdGgoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgsIGdpdF9pZ25vcmVzICppZ24pOworZXh0ZXJuIGludCBnaXRfaWdub3JlX19mb3JfcGF0aCgKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCwgZ2l0X2lnbm9yZXMgKmlnbik7CiAKIGV4dGVybiBpbnQgZ2l0X2lnbm9yZV9fcHVzaF9kaXIoZ2l0X2lnbm9yZXMgKmlnbiwgY29uc3QgY2hhciAqZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luZGV4LmMgYi9zcmMvaW5kZXguYwppbmRleCAxZDQ2Nzc5Li4wOWU3YjIzIDEwMDY0NAotLS0gYS9zcmMvaW5kZXguYworKysgYi9zcmMvaW5kZXguYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgIml0ZXJhdG9yLmgiCiAjaW5jbHVkZSAicGF0aHNwZWMuaCIKICNpbmNsdWRlICJpZ25vcmUuaCIKKyNpbmNsdWRlICJibG9iLmgiCiAKICNpbmNsdWRlICJnaXQyL29kYi5oIgogI2luY2x1ZGUgImdpdDIvb2lkLmgiCkBAIC0xMDEsOCArMTAyLDYgQEAKIHN0YXRpYyBib29sIGlzX2luZGV4X2V4dGVuZGVkKGdpdF9pbmRleCAqaW5kZXgpOwogc3RhdGljIGludCB3cml0ZV9pbmRleChnaXRfaW5kZXggKmluZGV4LCBnaXRfZmlsZWJ1ZiAqZmlsZSk7CiAKLXN0YXRpYyBpbnQgaW5kZXhfZmluZChzaXplX3QgKmF0X3BvcywgZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlKTsKLQogc3RhdGljIHZvaWQgaW5kZXhfZW50cnlfZnJlZShnaXRfaW5kZXhfZW50cnkgKmVudHJ5KTsKIHN0YXRpYyB2b2lkIGluZGV4X2VudHJ5X3JldWNfZnJlZShnaXRfaW5kZXhfcmV1Y19lbnRyeSAqcmV1Yyk7CiAKQEAgLTExNCw3ICsxMTMsNyBAQAogCiAJcmV0ID0gc3RyY21wKHNyY2hfa2V5LT5wYXRoLCBlbnRyeS0+cGF0aCk7CiAKLQlpZiAocmV0ID09IDApCisJaWYgKHJldCA9PSAwICYmIHNyY2hfa2V5LT5zdGFnZSAhPSBHSVRfSU5ERVhfU1RBR0VfQU5ZKQogCQlyZXQgPSBzcmNoX2tleS0+c3RhZ2UgLSBHSVRfSURYRU5UUllfU1RBR0UoZW50cnkpOwogCiAJcmV0dXJuIHJldDsKQEAgLTEyOCw3ICsxMjcsNyBAQAogCiAJcmV0ID0gc3RyY2FzZWNtcChzcmNoX2tleS0+cGF0aCwgZW50cnktPnBhdGgpOwogCi0JaWYgKHJldCA9PSAwKQorCWlmIChyZXQgPT0gMCAmJiBzcmNoX2tleS0+c3RhZ2UgIT0gR0lUX0lOREVYX1NUQUdFX0FOWSkKIAkJcmV0ID0gc3JjaF9rZXktPnN0YWdlIC0gR0lUX0lEWEVOVFJZX1NUQUdFKGVudHJ5KTsKIAogCXJldHVybiByZXQ7CkBAIC0yNjEsNiArMjYwLDIyIEBACiAJcmV0dXJuIHN0cmNhc2VjbXAoaW5mb19hLT5wYXRoLCBpbmZvX2ItPnBhdGgpOwogfQogCitzdGF0aWMgdm9pZCBpbmRleF9lbnRyeV9yZXVjX2ZyZWUoZ2l0X2luZGV4X3JldWNfZW50cnkgKnJldWMpCit7CisJaWYgKCFyZXVjKQorCQlyZXR1cm47CisJZ2l0X19mcmVlKHJldWMtPnBhdGgpOworCWdpdF9fZnJlZShyZXVjKTsKK30KKworc3RhdGljIHZvaWQgaW5kZXhfZW50cnlfZnJlZShnaXRfaW5kZXhfZW50cnkgKmVudHJ5KQoreworCWlmICghZW50cnkpCisJCXJldHVybjsKKwlnaXRfX2ZyZWUoZW50cnktPnBhdGgpOworCWdpdF9fZnJlZShlbnRyeSk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5kZXhfY3JlYXRlX21vZGUodW5zaWduZWQgaW50IG1vZGUpCiB7CiAJaWYgKFNfSVNMTksobW9kZSkpCkBAIC0yNjksNyArMjg0LDcgQEAKIAlpZiAoU19JU0RJUihtb2RlKSB8fCAobW9kZSAmIFNfSUZNVCkgPT0gKFNfSUZMTksgfCBTX0lGRElSKSkKIAkJcmV0dXJuIChTX0lGTE5LIHwgU19JRkRJUik7CiAKLQlyZXR1cm4gU19JRlJFRyB8ICgobW9kZSAmIDAxMDApID8gMDc1NSA6IDA2NDQpOworCXJldHVybiBTX0lGUkVHIHwgR0lUX1BFUk1TX0NBTk9OSUNBTChtb2RlKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBpbmRleF9tZXJnZV9tb2RlKApAQCAtMzA2LDYgKzMyMSw3IEBACiBpbnQgZ2l0X2luZGV4X29wZW4oZ2l0X2luZGV4ICoqaW5kZXhfb3V0LCBjb25zdCBjaGFyICppbmRleF9wYXRoKQogewogCWdpdF9pbmRleCAqaW5kZXg7CisJaW50IGVycm9yOwogCiAJYXNzZXJ0KGluZGV4X291dCk7CiAKQEAgLTMzMSwxMCArMzQ3LDE1IEBACiAJaW5kZXgtPmVudHJpZXNfc2VhcmNoX3BhdGggPSBpbmRleF9zcmNoX3BhdGg7CiAJaW5kZXgtPnJldWNfc2VhcmNoID0gcmV1Y19zcmNoOwogCisJaWYgKChpbmRleF9wYXRoICE9IE5VTEwpICYmICgoZXJyb3IgPSBnaXRfaW5kZXhfcmVhZChpbmRleCwgdHJ1ZSkpIDwgMCkpIHsKKwkJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJKmluZGV4X291dCA9IGluZGV4OwogCUdJVF9SRUZDT1VOVF9JTkMoaW5kZXgpOwogCi0JcmV0dXJuIChpbmRleF9wYXRoICE9IE5VTEwpID8gZ2l0X2luZGV4X3JlYWQoaW5kZXgpIDogMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGdpdF9pbmRleF9uZXcoZ2l0X2luZGV4ICoqb3V0KQpAQCAtMzY3LDExICszODgsOCBAQAogewogCXNpemVfdCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPmxlbmd0aDsgKytpKSB7Ci0JCWdpdF9pbmRleF9lbnRyeSAqZSA9IGdpdF92ZWN0b3JfZ2V0KGVudHJpZXMsIGkpOwotCQlnaXRfX2ZyZWUoZS0+cGF0aCk7Ci0JCWdpdF9fZnJlZShlKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXMtPmxlbmd0aDsgKytpKQorCQlpbmRleF9lbnRyeV9mcmVlKGdpdF9fc3dhcChlbnRyaWVzLT5jb250ZW50c1tpXSwgTlVMTCkpOwogCiAJZ2l0X3ZlY3Rvcl9jbGVhcihlbnRyaWVzKTsKIH0KQEAgLTM5OCw3ICs0MTYsNyBAQAogCiBpbnQgZ2l0X2luZGV4X3NldF9jYXBzKGdpdF9pbmRleCAqaW5kZXgsIHVuc2lnbmVkIGludCBjYXBzKQogewotCWludCBvbGRfaWdub3JlX2Nhc2U7CisJdW5zaWduZWQgaW50IG9sZF9pZ25vcmVfY2FzZTsKIAogCWFzc2VydChpbmRleCk7CiAKQEAgLTQyNiw3ICs0NDQsNyBAQAogCX0KIAogCWlmIChvbGRfaWdub3JlX2Nhc2UgIT0gaW5kZXgtPmlnbm9yZV9jYXNlKSB7Ci0JCWdpdF9pbmRleF9fc2V0X2lnbm9yZV9jYXNlKGluZGV4LCBpbmRleC0+aWdub3JlX2Nhc2UpOworCQlnaXRfaW5kZXhfX3NldF9pZ25vcmVfY2FzZShpbmRleCwgKGJvb2wpaW5kZXgtPmlnbm9yZV9jYXNlKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQzOSwyNCArNDU3LDI2IEBACiAJCQkoaW5kZXgtPm5vX3N5bWxpbmtzID8gR0lUX0lOREVYQ0FQX05PX1NZTUxJTktTIDogMCkpOwogfQogCi1pbnQgZ2l0X2luZGV4X3JlYWQoZ2l0X2luZGV4ICppbmRleCkKK2ludCBnaXRfaW5kZXhfcmVhZChnaXRfaW5kZXggKmluZGV4LCBpbnQgZm9yY2UpCiB7CiAJaW50IGVycm9yID0gMCwgdXBkYXRlZDsKIAlnaXRfYnVmIGJ1ZmZlciA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfZnV0aWxzX2ZpbGVzdGFtcCBzdGFtcCA9IHswfTsKKwlnaXRfZnV0aWxzX2ZpbGVzdGFtcCBzdGFtcCA9IGluZGV4LT5zdGFtcDsKIAogCWlmICghaW5kZXgtPmluZGV4X2ZpbGVfcGF0aCkKIAkJcmV0dXJuIGNyZWF0ZV9pbmRleF9lcnJvcigtMSwKIAkJCSJGYWlsZWQgdG8gcmVhZCBpbmRleDogVGhlIGluZGV4IGlzIGluLW1lbW9yeSBvbmx5Iik7CiAKLQlpZiAoIWluZGV4LT5vbl9kaXNrIHx8IGdpdF9wYXRoX2V4aXN0cyhpbmRleC0+aW5kZXhfZmlsZV9wYXRoKSA9PSBmYWxzZSkgewotCQlnaXRfaW5kZXhfY2xlYXIoaW5kZXgpOwotCQlpbmRleC0+b25fZGlzayA9IDA7CisJaW5kZXgtPm9uX2Rpc2sgPSBnaXRfcGF0aF9leGlzdHMoaW5kZXgtPmluZGV4X2ZpbGVfcGF0aCk7CisKKwlpZiAoIWluZGV4LT5vbl9kaXNrKSB7CisJCWlmIChmb3JjZSkKKwkJCWdpdF9pbmRleF9jbGVhcihpbmRleCk7CiAJCXJldHVybiAwOwogCX0KIAogCXVwZGF0ZWQgPSBnaXRfZnV0aWxzX2ZpbGVzdGFtcF9jaGVjaygmc3RhbXAsIGluZGV4LT5pbmRleF9maWxlX3BhdGgpOwotCWlmICh1cGRhdGVkIDw9IDApCisJaWYgKHVwZGF0ZWQgPCAwIHx8ICghdXBkYXRlZCAmJiAhZm9yY2UpKQogCQlyZXR1cm4gdXBkYXRlZDsKIAogCWVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZidWZmZXIsIGluZGV4LT5pbmRleF9maWxlX3BhdGgpOwpAQCAtNDg2LDE1ICs1MDYsMTkgQEAKIAlnaXRfdmVjdG9yX3NvcnQoJmluZGV4LT5yZXVjKTsKIAogCWlmICgoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9vcGVuKAotCQkJICZmaWxlLCBpbmRleC0+aW5kZXhfZmlsZV9wYXRoLCBHSVRfRklMRUJVRl9IQVNIX0NPTlRFTlRTKSkgPCAwKQorCQkmZmlsZSwgaW5kZXgtPmluZGV4X2ZpbGVfcGF0aCwgR0lUX0ZJTEVCVUZfSEFTSF9DT05URU5UUywgR0lUX0lOREVYX0ZJTEVfTU9ERSkpIDwgMCkgeworCQlpZiAoZXJyb3IgPT0gR0lUX0VMT0NLRUQpCisJCQlnaXRlcnJfc2V0KEdJVEVSUl9JTkRFWCwgIlRoZSBpbmRleCBpcyBsb2NrZWQuIFRoaXMgbWlnaHQgYmUgZHVlIHRvIGEgY29uY3VycnJlbnQgb3IgY3Jhc2hlZCBwcm9jZXNzIik7CisKIAkJcmV0dXJuIGVycm9yOworCX0KIAogCWlmICgoZXJyb3IgPSB3cml0ZV9pbmRleChpbmRleCwgJmZpbGUpKSA8IDApIHsKIAkJZ2l0X2ZpbGVidWZfY2xlYW51cCgmZmlsZSk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlLCBHSVRfSU5ERVhfRklMRV9NT0RFKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gZ2l0X2Z1dGlsc19maWxlc3RhbXBfY2hlY2soJmluZGV4LT5zdGFtcCwgaW5kZXgtPmluZGV4X2ZpbGVfcGF0aCk7CkBAIC01MDUsNiArNTI5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK2NvbnN0IGNoYXIgKiBnaXRfaW5kZXhfcGF0aChnaXRfaW5kZXggKmluZGV4KQoreworCWFzc2VydChpbmRleCk7CisJcmV0dXJuIGluZGV4LT5pbmRleF9maWxlX3BhdGg7Cit9CisKIGludCBnaXRfaW5kZXhfd3JpdGVfdHJlZShnaXRfb2lkICpvaWQsIGdpdF9pbmRleCAqaW5kZXgpCiB7CiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CkBAIC01NDksNyArNTc5LDcgQEAKIAogCWdpdF92ZWN0b3Jfc29ydCgmaW5kZXgtPmVudHJpZXMpOwogCi0JaWYgKGluZGV4X2ZpbmQoJnBvcywgaW5kZXgsIHBhdGgsIHN0YWdlKSA8IDApIHsKKwlpZiAoZ2l0X2luZGV4X19maW5kKCZwb3MsIGluZGV4LCBwYXRoLCBzdGFnZSkgPCAwKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLCAiSW5kZXggZG9lcyBub3QgY29udGFpbiAlcyIsIHBhdGgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01NTcsNyArNTg3LDggQEAKIAlyZXR1cm4gZ2l0X2luZGV4X2dldF9ieWluZGV4KGluZGV4LCBwb3MpOwogfQogCi12b2lkIGdpdF9pbmRleF9lbnRyeV9faW5pdF9mcm9tX3N0YXQoZ2l0X2luZGV4X2VudHJ5ICplbnRyeSwgc3RydWN0IHN0YXQgKnN0KQordm9pZCBnaXRfaW5kZXhfZW50cnlfX2luaXRfZnJvbV9zdGF0KAorCWdpdF9pbmRleF9lbnRyeSAqZW50cnksIHN0cnVjdCBzdGF0ICpzdCwgYm9vbCB0cnVzdF9tb2RlKQogewogCWVudHJ5LT5jdGltZS5zZWNvbmRzID0gKGdpdF90aW1lX3Qpc3QtPnN0X2N0aW1lOwogCWVudHJ5LT5tdGltZS5zZWNvbmRzID0gKGdpdF90aW1lX3Qpc3QtPnN0X210aW1lOwpAQCAtNTY1LDcgKzU5Niw4IEBACiAJLyogZW50cnktPmN0aW1lLm5hbm9zZWNvbmRzID0gc3QtPnN0X2N0aW1lbnNlYzsgKi8KIAllbnRyeS0+ZGV2ICA9IHN0LT5zdF9yZGV2OwogCWVudHJ5LT5pbm8gID0gc3QtPnN0X2lubzsKLQllbnRyeS0+bW9kZSA9IGluZGV4X2NyZWF0ZV9tb2RlKHN0LT5zdF9tb2RlKTsKKwllbnRyeS0+bW9kZSA9ICghdHJ1c3RfbW9kZSAmJiBTX0lTUkVHKHN0LT5zdF9tb2RlKSkgPworCQlpbmRleF9jcmVhdGVfbW9kZSgwNjY2KSA6IGluZGV4X2NyZWF0ZV9tb2RlKHN0LT5zdF9tb2RlKTsKIAllbnRyeS0+dWlkICA9IHN0LT5zdF91aWQ7CiAJZW50cnktPmdpZCAgPSBzdC0+c3RfZ2lkOwogCWVudHJ5LT5maWxlX3NpemUgPSBzdC0+c3Rfc2l6ZTsKQEAgLTU4Nyw0OCArNjE5LDI5IEBACiAJcmV0dXJuIHN0cmNhc2VjbXAoZW50cnlfYS0+cGF0aCwgZW50cnlfYi0+cGF0aCk7CiB9CiAKLXN0YXRpYyBpbnQgaW5kZXhfZW50cnlfaW5pdChnaXRfaW5kZXhfZW50cnkgKiplbnRyeV9vdXQsIGdpdF9pbmRleCAqaW5kZXgsIGNvbnN0IGNoYXIgKnJlbF9wYXRoKQorc3RhdGljIGludCBpbmRleF9lbnRyeV9pbml0KAorCWdpdF9pbmRleF9lbnRyeSAqKmVudHJ5X291dCwgZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqcmVsX3BhdGgpCiB7CisJaW50IGVycm9yID0gMDsKIAlnaXRfaW5kZXhfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlnaXRfb2lkIG9pZDsKLQljb25zdCBjaGFyICp3b3JrZGlyOwotCWdpdF9idWYgZnVsbF9wYXRoID0gR0lUX0JVRl9JTklUOwotCWludCBlcnJvcjsKIAogCWlmIChJTkRFWF9PV05FUihpbmRleCkgPT0gTlVMTCkKIAkJcmV0dXJuIGNyZWF0ZV9pbmRleF9lcnJvcigtMSwKIAkJCSJDb3VsZCBub3QgaW5pdGlhbGl6ZSBpbmRleCBlbnRyeS4gIgogCQkJIkluZGV4IGlzIG5vdCBiYWNrZWQgdXAgYnkgYW4gZXhpc3RpbmcgcmVwb3NpdG9yeS4iKTsKIAotCXdvcmtkaXIgPSBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKElOREVYX09XTkVSKGluZGV4KSk7Ci0KLQlpZiAoIXdvcmtkaXIpCi0JCXJldHVybiBjcmVhdGVfaW5kZXhfZXJyb3IoR0lUX0VCQVJFUkVQTywKLQkJCSJDb3VsZCBub3QgaW5pdGlhbGl6ZSBpbmRleCBlbnRyeS4gUmVwb3NpdG9yeSBpcyBiYXJlIik7Ci0KLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbF9wYXRoLCB3b3JrZGlyLCByZWxfcGF0aCkpIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKChlcnJvciA9IGdpdF9wYXRoX2xzdGF0KGZ1bGxfcGF0aC5wdHIsICZzdCkpIDwgMCkgewotCQlnaXRfYnVmX2ZyZWUoJmZ1bGxfcGF0aCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlnaXRfYnVmX2ZyZWUoJmZ1bGxfcGF0aCk7IC8qIGRvbmUgd2l0aCBmdWxsIHBhdGggKi8KLQotCS8qIFRoZXJlIGlzIG5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlIHJlbF9wYXRoIGhlcmUsIHNpbmNlIGl0IHdpbGwgYmUKLQkgKiBpbW1lZGlhdGVseSB2YWxpZGF0ZWQgYnkgdGhlIGNhbGwgdG8gZ2l0X2Jsb2JfY3JlYXRlX2Zyb21maWxlLgotCSAqLwotCi0JLyogd3JpdGUgdGhlIGJsb2IgdG8gZGlzayBhbmQgZ2V0IHRoZSBvaWQgKi8KLQlpZiAoKGVycm9yID0gZ2l0X2Jsb2JfY3JlYXRlX2Zyb213b3JrZGlyKCZvaWQsIElOREVYX09XTkVSKGluZGV4KSwgcmVsX3BhdGgpKSA8IDApCisJLyogd3JpdGUgdGhlIGJsb2IgdG8gZGlzayBhbmQgZ2V0IHRoZSBvaWQgYW5kIHN0YXQgaW5mbyAqLworCWVycm9yID0gZ2l0X2Jsb2JfX2NyZWF0ZV9mcm9tX3BhdGhzKAorCQkmb2lkLCAmc3QsIElOREVYX09XTkVSKGluZGV4KSwgTlVMTCwgcmVsX3BhdGgsIDAsIHRydWUpOworCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCWVudHJ5ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9pbmRleF9lbnRyeSkpOwogCUdJVEVSUl9DSEVDS19BTExPQyhlbnRyeSk7CiAKLQlnaXRfaW5kZXhfZW50cnlfX2luaXRfZnJvbV9zdGF0KGVudHJ5LCAmc3QpOworCWdpdF9pbmRleF9lbnRyeV9faW5pdF9mcm9tX3N0YXQoZW50cnksICZzdCwgIWluZGV4LT5kaXN0cnVzdF9maWxlbW9kZSk7CiAKIAllbnRyeS0+b2lkID0gb2lkOwogCWVudHJ5LT5wYXRoID0gZ2l0X19zdHJkdXAocmVsX3BhdGgpOwpAQCAtNjcwLDE1ICs2ODMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpbmRleF9lbnRyeV9yZXVjX2ZyZWUoZ2l0X2luZGV4X3JldWNfZW50cnkgKnJldWMpCi17Ci0JaWYgKCFyZXVjKQotCQlyZXR1cm47Ci0KLQlnaXRfX2ZyZWUocmV1Yy0+cGF0aCk7Ci0JZ2l0X19mcmVlKHJldWMpOwotfQotCiBzdGF0aWMgZ2l0X2luZGV4X2VudHJ5ICppbmRleF9lbnRyeV9kdXAoY29uc3QgZ2l0X2luZGV4X2VudHJ5ICpzb3VyY2VfZW50cnkpCiB7CiAJZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKQEAgLTY5NywxNCArNzAxLDYgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLXN0YXRpYyB2b2lkIGluZGV4X2VudHJ5X2ZyZWUoZ2l0X2luZGV4X2VudHJ5ICplbnRyeSkKLXsKLQlpZiAoIWVudHJ5KQotCQlyZXR1cm47Ci0JZ2l0X19mcmVlKGVudHJ5LT5wYXRoKTsKLQlnaXRfX2ZyZWUoZW50cnkpOwotfQotCiBzdGF0aWMgaW50IGluZGV4X2luc2VydChnaXRfaW5kZXggKmluZGV4LCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5LCBpbnQgcmVwbGFjZSkKIHsKIAlzaXplX3QgcGF0aF9sZW5ndGgsIHBvc2l0aW9uOwpAQCAtNzIzLDcgKzcxOSw4IEBACiAJCWVudHJ5LT5mbGFncyB8PSBHSVRfSURYRU5UUllfTkFNRU1BU0s7CiAKIAkvKiBsb29rIGlmIGFuIGVudHJ5IHdpdGggdGhpcyBwYXRoIGFscmVhZHkgZXhpc3RzICovCi0JaWYgKCFpbmRleF9maW5kKCZwb3NpdGlvbiwgaW5kZXgsIGVudHJ5LT5wYXRoLCBHSVRfSURYRU5UUllfU1RBR0UoZW50cnkpKSkgeworCWlmICghZ2l0X2luZGV4X19maW5kKAorCQkJJnBvc2l0aW9uLCBpbmRleCwgZW50cnktPnBhdGgsIEdJVF9JRFhFTlRSWV9TVEFHRShlbnRyeSkpKSB7CiAJCWV4aXN0aW5nID0gKGdpdF9pbmRleF9lbnRyeSAqKikmaW5kZXgtPmVudHJpZXMuY29udGVudHNbcG9zaXRpb25dOwogCiAJCS8qIHVwZGF0ZSBmaWxlbW9kZSB0byBleGlzdGluZyB2YWx1ZXMgaWYgc3RhdCBpcyBub3QgdHJ1c3RlZCAqLwpAQCAtODM1LDcgKzgzMiw3IEBACiAKIAlnaXRfdmVjdG9yX3NvcnQoJmluZGV4LT5lbnRyaWVzKTsKIAotCWlmIChpbmRleF9maW5kKCZwb3NpdGlvbiwgaW5kZXgsIHBhdGgsIHN0YWdlKSA8IDApIHsKKwlpZiAoZ2l0X2luZGV4X19maW5kKCZwb3NpdGlvbiwgaW5kZXgsIHBhdGgsIHN0YWdlKSA8IDApIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVgsICJJbmRleCBkb2VzIG5vdCBjb250YWluICVzIGF0IHN0YWdlICVkIiwKIAkJCXBhdGgsIHN0YWdlKTsKIAkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CkBAIC04OTEsNyArODg4LDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgaW5kZXhfZmluZChzaXplX3QgKmF0X3BvcywgZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlKQoraW50IGdpdF9pbmRleF9fZmluZCgKKwlzaXplX3QgKmF0X3BvcywgZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlKQogewogCXN0cnVjdCBlbnRyeV9zcmNoX2tleSBzcmNoX2tleTsKIApAQCAtOTAwLDcgKzg5OCw4IEBACiAJc3JjaF9rZXkucGF0aCA9IHBhdGg7CiAJc3JjaF9rZXkuc3RhZ2UgPSBzdGFnZTsKIAotCXJldHVybiBnaXRfdmVjdG9yX2JzZWFyY2gyKGF0X3BvcywgJmluZGV4LT5lbnRyaWVzLCBpbmRleC0+ZW50cmllc19zZWFyY2gsICZzcmNoX2tleSk7CisJcmV0dXJuIGdpdF92ZWN0b3JfYnNlYXJjaDIoCisJCWF0X3BvcywgJmluZGV4LT5lbnRyaWVzLCBpbmRleC0+ZW50cmllc19zZWFyY2gsICZzcmNoX2tleSk7CiB9CiAKIGludCBnaXRfaW5kZXhfZmluZChzaXplX3QgKmF0X3BvcywgZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqcGF0aCkKQEAgLTEzNTcsMTQgKzEzNTYsMTEgQEAKIHZvaWQgZ2l0X2luZGV4X3JldWNfY2xlYXIoZ2l0X2luZGV4ICppbmRleCkKIHsKIAlzaXplX3QgaTsKLQlnaXRfaW5kZXhfcmV1Y19lbnRyeSAqcmV1YzsKIAogCWFzc2VydChpbmRleCk7CiAKLQlnaXRfdmVjdG9yX2ZvcmVhY2goJmluZGV4LT5yZXVjLCBpLCByZXVjKSB7Ci0JCWdpdF9fZnJlZShyZXVjLT5wYXRoKTsKLQkJZ2l0X19mcmVlKHJldWMpOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPnJldWMubGVuZ3RoOyArK2kpCisJCWluZGV4X2VudHJ5X3JldWNfZnJlZShnaXRfX3N3YXAoaW5kZXgtPnJldWMuY29udGVudHNbaV0sIE5VTEwpKTsKIAogCWdpdF92ZWN0b3JfY2xlYXIoJmluZGV4LT5yZXVjKTsKIH0KQEAgLTEzODksNyArMTM4NSw3IEBACiAJd2hpbGUgKHNpemUpIHsKIAkJZ2l0X2luZGV4X3JldWNfZW50cnkgKmxvc3Q7CiAKLQkJbGVuID0gc3RybGVuKGJ1ZmZlcikgKyAxOworCQlsZW4gPSBwX3N0cm5sZW4oYnVmZmVyLCBzaXplKSArIDE7CiAJCWlmIChzaXplIDw9IGxlbikKIAkJCXJldHVybiBpbmRleF9lcnJvcl9pbnZhbGlkKCJyZWFkaW5nIHJldWMgZW50cmllcyIpOwogCkBAIC0xNDA5LDE0ICsxNDA1LDE4IEBACiAKIAkJCWlmIChnaXRfX3N0cnRvbDMyKCZ0bXAsIGJ1ZmZlciwgJmVuZHB0ciwgOCkgPCAwIHx8CiAJCQkJIWVuZHB0ciB8fCBlbmRwdHIgPT0gYnVmZmVyIHx8ICplbmRwdHIgfHwKLQkJCQkodW5zaWduZWQpdG1wID4gVUlOVF9NQVgpCisJCQkJKHVuc2lnbmVkKXRtcCA+IFVJTlRfTUFYKSB7CisJCQkJaW5kZXhfZW50cnlfcmV1Y19mcmVlKGxvc3QpOwogCQkJCXJldHVybiBpbmRleF9lcnJvcl9pbnZhbGlkKCJyZWFkaW5nIHJldWMgZW50cnkgc3RhZ2UiKTsKKwkJCX0KIAogCQkJbG9zdC0+bW9kZVtpXSA9IHRtcDsKIAogCQkJbGVuID0gKGVuZHB0ciArIDEpIC0gYnVmZmVyOwotCQkJaWYgKHNpemUgPD0gbGVuKQorCQkJaWYgKHNpemUgPD0gbGVuKSB7CisJCQkJaW5kZXhfZW50cnlfcmV1Y19mcmVlKGxvc3QpOwogCQkJCXJldHVybiBpbmRleF9lcnJvcl9pbnZhbGlkKCJyZWFkaW5nIHJldWMgZW50cnkgc3RhZ2UiKTsKKwkJCX0KIAogCQkJc2l6ZSAtPSBsZW47CiAJCQlidWZmZXIgKz0gbGVuOwpAQCAtMTQyNiw4ICsxNDI2LDEwIEBACiAJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJCWlmICghbG9zdC0+bW9kZVtpXSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChzaXplIDwgMjApCisJCQlpZiAoc2l6ZSA8IDIwKSB7CisJCQkJaW5kZXhfZW50cnlfcmV1Y19mcmVlKGxvc3QpOwogCQkJCXJldHVybiBpbmRleF9lcnJvcl9pbnZhbGlkKCJyZWFkaW5nIHJldWMgZW50cnkgb2lkIik7CisJCQl9CiAKIAkJCWdpdF9vaWRfZnJvbXJhdygmbG9zdC0+b2lkW2ldLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBidWZmZXIpOwogCQkJc2l6ZSAtPSAyMDsKQEAgLTE0NTYsNyArMTQ1OCw3IEBACiAJCXJldHVybiAtMTsKIAogI2RlZmluZSByZWFkX2NvbmZsaWN0X25hbWUocHRyKSBcCi0JbGVuID0gc3RybGVuKGJ1ZmZlcikgKyAxOyBcCisJbGVuID0gcF9zdHJubGVuKGJ1ZmZlciwgc2l6ZSkgKyAxOyBcCiAJaWYgKHNpemUgPCBsZW4pIFwKIAkJcmV0dXJuIGluZGV4X2Vycm9yX2ludmFsaWQoInJlYWRpbmcgY29uZmxpY3QgbmFtZSBlbnRyaWVzIik7IFwKIAlcCkBAIC0xNTgzLDcgKzE1ODUsOCBAQAogCiAJdG90YWxfc2l6ZSA9IGRlc3QuZXh0ZW5zaW9uX3NpemUgKyBzaXplb2Yoc3RydWN0IGluZGV4X2V4dGVuc2lvbik7CiAKLQlpZiAoYnVmZmVyX3NpemUgPCB0b3RhbF9zaXplIHx8CisJaWYgKGRlc3QuZXh0ZW5zaW9uX3NpemUgPiB0b3RhbF9zaXplIHx8CisJCWJ1ZmZlcl9zaXplIDwgdG90YWxfc2l6ZSB8fAogCQlidWZmZXJfc2l6ZSAtIHRvdGFsX3NpemUgPCBJTkRFWF9GT09URVJfU0laRSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE5NTgsOCArMTk2MSw5IEBACiB9CiAKIHR5cGVkZWYgc3RydWN0IHJlYWRfdHJlZV9kYXRhIHsKLQlnaXRfaW5kZXggKmluZGV4OwogCWdpdF92ZWN0b3IgKm9sZF9lbnRyaWVzOworCWdpdF92ZWN0b3IgKm5ld19lbnRyaWVzOworCWdpdF92ZWN0b3JfY21wIGVudHJpZXNfc2VhcmNoOwogfSByZWFkX3RyZWVfZGF0YTsKIAogc3RhdGljIGludCByZWFkX3RyZWVfY2IoCkBAIC0xOTkwLDcgKzE5OTQsNyBAQAogCQlza2V5LnN0YWdlID0gMDsKIAogCQlpZiAoIWdpdF92ZWN0b3JfYnNlYXJjaDIoCi0JCQkJJnBvcywgZGF0YS0+b2xkX2VudHJpZXMsIGRhdGEtPmluZGV4LT5lbnRyaWVzX3NlYXJjaCwgJnNrZXkpICYmCisJCQkJJnBvcywgZGF0YS0+b2xkX2VudHJpZXMsIGRhdGEtPmVudHJpZXNfc2VhcmNoLCAmc2tleSkgJiYKIAkJCShvbGRfZW50cnkgPSBnaXRfdmVjdG9yX2dldChkYXRhLT5vbGRfZW50cmllcywgcG9zKSkgIT0gTlVMTCAmJgogCQkJZW50cnktPm1vZGUgPT0gb2xkX2VudHJ5LT5tb2RlICYmCiAJCQlnaXRfb2lkX2VxdWFsKCZlbnRyeS0+b2lkLCAmb2xkX2VudHJ5LT5vaWQpKQpAQCAtMjAwOCw3ICsyMDEyLDcgQEAKIAllbnRyeS0+cGF0aCA9IGdpdF9idWZfZGV0YWNoKCZwYXRoKTsKIAlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCi0JaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KCZkYXRhLT5pbmRleC0+ZW50cmllcywgZW50cnkpIDwgMCkgeworCWlmIChnaXRfdmVjdG9yX2luc2VydChkYXRhLT5uZXdfZW50cmllcywgZW50cnkpIDwgMCkgewogCQlpbmRleF9lbnRyeV9mcmVlKGVudHJ5KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTIwMjIsMjIgKzIwMjYsMjIgQEAKIAlnaXRfdmVjdG9yIGVudHJpZXMgPSBHSVRfVkVDVE9SX0lOSVQ7CiAJcmVhZF90cmVlX2RhdGEgZGF0YTsKIAorCWdpdF92ZWN0b3Jfc2V0X2NtcCgmZW50cmllcywgaW5kZXgtPmVudHJpZXMuX2NtcCk7IC8qIG1hdGNoIHNvcnQgKi8KKworCWRhdGEub2xkX2VudHJpZXMgPSAmaW5kZXgtPmVudHJpZXM7CisJZGF0YS5uZXdfZW50cmllcyA9ICZlbnRyaWVzOworCWRhdGEuZW50cmllc19zZWFyY2ggPSBpbmRleC0+ZW50cmllc19zZWFyY2g7CisKIAlnaXRfdmVjdG9yX3NvcnQoJmluZGV4LT5lbnRyaWVzKTsKIAotCWdpdF92ZWN0b3Jfc2V0X2NtcCgmZW50cmllcywgaW5kZXgtPmVudHJpZXMuX2NtcCk7Ci0JZ2l0X3ZlY3Rvcl9zd2FwKCZlbnRyaWVzLCAmaW5kZXgtPmVudHJpZXMpOwotCi0JZ2l0X2luZGV4X2NsZWFyKGluZGV4KTsKLQotCWRhdGEuaW5kZXggPSBpbmRleDsKLQlkYXRhLm9sZF9lbnRyaWVzID0gJmVudHJpZXM7Ci0KIAllcnJvciA9IGdpdF90cmVlX3dhbGsodHJlZSwgR0lUX1RSRUVXQUxLX1BPU1QsIHJlYWRfdHJlZV9jYiwgJmRhdGEpOwogCi0JaW5kZXhfZW50cmllc19mcmVlKCZlbnRyaWVzKTsKLQlnaXRfdmVjdG9yX2ZyZWUoJmVudHJpZXMpOworCWdpdF92ZWN0b3Jfc29ydCgmZW50cmllcyk7CiAKLQlnaXRfdmVjdG9yX3NvcnQoJmluZGV4LT5lbnRyaWVzKTsKKwlnaXRfaW5kZXhfY2xlYXIoaW5kZXgpOworCisJZ2l0X3ZlY3Rvcl9zd2FwKCZlbnRyaWVzLCAmaW5kZXgtPmVudHJpZXMpOworCWdpdF92ZWN0b3JfZnJlZSgmZW50cmllcyk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yMDU5LDcgKzIwNjMsNyBAQAogCWdpdF9pdGVyYXRvciAqd2RpdGVyID0gTlVMTDsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKndkID0gTlVMTDsKIAlnaXRfaW5kZXhfZW50cnkgKmVudHJ5OwotCWdpdF9wYXRoc3BlY19jb250ZXh0IHBzOworCWdpdF9wYXRoc3BlYyBwczsKIAljb25zdCBjaGFyICptYXRjaDsKIAlzaXplX3QgZXhpc3Rpbmc7CiAJYm9vbCBub19mbm1hdGNoID0gKGZsYWdzICYgR0lUX0lOREVYX0FERF9ESVNBQkxFX1BBVEhTUEVDX01BVENIKSAhPSAwOwpAQCAtMjA4MCw3ICsyMDg0LDcgQEAKIAlpZiAoZ2l0X3JlcG9zaXRvcnlfX2N2YXIoJmlnbm9yZWNhc2UsIHJlcG8sIEdJVF9DVkFSX0lHTk9SRUNBU0UpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKChlcnJvciA9IGdpdF9wYXRoc3BlY19jb250ZXh0X2luaXQoJnBzLCBwYXRocykpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X3BhdGhzcGVjX19pbml0KCZwcywgcGF0aHMpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCS8qIG9wdGlvbmFsbHkgY2hlY2sgdGhhdCBwYXRoc3BlYyBkb2Vzbid0IG1lbnRpb24gYW55IGlnbm9yZWQgZmlsZXMgKi8KQEAgLTIwOTcsMTQgKzIxMDEsMTQgQEAKIAl3aGlsZSAoIShlcnJvciA9IGdpdF9pdGVyYXRvcl9hZHZhbmNlKCZ3ZCwgd2RpdGVyKSkpIHsKIAogCQkvKiBjaGVjayBpZiBwYXRoIGFjdHVhbGx5IG1hdGNoZXMgKi8KLQkJaWYgKCFnaXRfcGF0aHNwZWNfbWF0Y2hfcGF0aCgKLQkJCQkmcHMucGF0aHNwZWMsIHdkLT5wYXRoLCBub19mbm1hdGNoLCBpZ25vcmVjYXNlLCAmbWF0Y2gpKQorCQlpZiAoIWdpdF9wYXRoc3BlY19fbWF0Y2goCisJCQkJJnBzLnBhdGhzcGVjLCB3ZC0+cGF0aCwgbm9fZm5tYXRjaCwgKGJvb2wpaWdub3JlY2FzZSwgJm1hdGNoLCBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIHNraXAgaWdub3JlZCBpdGVtcyB0aGF0IGFyZSBub3QgYWxyZWFkeSBpbiB0aGUgaW5kZXggKi8KIAkJaWYgKChmbGFncyAmIEdJVF9JTkRFWF9BRERfRk9SQ0UpID09IDAgJiYKIAkJCWdpdF9pdGVyYXRvcl9jdXJyZW50X2lzX2lnbm9yZWQod2RpdGVyKSAmJgotCQkJaW5kZXhfZmluZCgmZXhpc3RpbmcsIGluZGV4LCB3ZC0+cGF0aCwgMCkgPCAwKQorCQkJZ2l0X2luZGV4X19maW5kKCZleGlzdGluZywgaW5kZXgsIHdkLT5wYXRoLCAwKSA8IDApCiAJCQljb250aW51ZTsKIAogCQkvKiBpc3N1ZSBub3RpZmljYXRpb24gY2FsbGJhY2sgaWYgcmVxdWVzdGVkICovCkBAIC0yMTU0LDcgKzIxNTgsNyBAQAogCiBjbGVhbnVwOgogCWdpdF9pdGVyYXRvcl9mcmVlKHdkaXRlcik7Ci0JZ2l0X3BhdGhzcGVjX2NvbnRleHRfZnJlZSgmcHMpOworCWdpdF9wYXRoc3BlY19fY2xlYXIoJnBzKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTIxNzQsMTMgKzIxNzgsMTMgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCXNpemVfdCBpOwotCWdpdF9wYXRoc3BlY19jb250ZXh0IHBzOworCWdpdF9wYXRoc3BlYyBwczsKIAljb25zdCBjaGFyICptYXRjaDsKIAlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAKIAlhc3NlcnQoaW5kZXgpOwogCi0JaWYgKChlcnJvciA9IGdpdF9wYXRoc3BlY19jb250ZXh0X2luaXQoJnBzLCBwYXRocykpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X3BhdGhzcGVjX19pbml0KCZwcywgcGF0aHMpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCWdpdF92ZWN0b3Jfc29ydCgmaW5kZXgtPmVudHJpZXMpOwpAQCAtMjE4OSw4ICsyMTkzLDkgQEAKIAkJZ2l0X2luZGV4X2VudHJ5ICplbnRyeSA9IGdpdF92ZWN0b3JfZ2V0KCZpbmRleC0+ZW50cmllcywgaSk7CiAKIAkJLyogY2hlY2sgaWYgcGF0aCBhY3R1YWxseSBtYXRjaGVzICovCi0JCWlmICghZ2l0X3BhdGhzcGVjX21hdGNoX3BhdGgoCi0JCQkJJnBzLnBhdGhzcGVjLCBlbnRyeS0+cGF0aCwgZmFsc2UsIGluZGV4LT5pZ25vcmVfY2FzZSwgJm1hdGNoKSkKKwkJaWYgKCFnaXRfcGF0aHNwZWNfX21hdGNoKAorCQkJCSZwcy5wYXRoc3BlYywgZW50cnktPnBhdGgsIGZhbHNlLCAoYm9vbClpbmRleC0+aWdub3JlX2Nhc2UsCisJCQkJJm1hdGNoLCBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIGlzc3VlIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBpZiByZXF1ZXN0ZWQgKi8KQEAgLTIyMzcsNyArMjI0Miw3IEBACiAJfQogCiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKLQlnaXRfcGF0aHNwZWNfY29udGV4dF9mcmVlKCZwcyk7CisJZ2l0X3BhdGhzcGVjX19jbGVhcigmcHMpOwogCiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luZGV4LmggYi9zcmMvaW5kZXguaAppbmRleCBhNTkxMDdhLi40YzQ0OGZhIDEwMDY0NAotLS0gYS9zcmMvaW5kZXguaAorKysgYi9zcmMvaW5kZXguaApAQCAtNDcsMTMgKzQ3LDE3IEBACiAJc2l6ZV90IGN1cjsKIH07CiAKLWV4dGVybiB2b2lkIGdpdF9pbmRleF9lbnRyeV9faW5pdF9mcm9tX3N0YXQoZ2l0X2luZGV4X2VudHJ5ICplbnRyeSwgc3RydWN0IHN0YXQgKnN0KTsKK2V4dGVybiB2b2lkIGdpdF9pbmRleF9lbnRyeV9faW5pdF9mcm9tX3N0YXQoCisJZ2l0X2luZGV4X2VudHJ5ICplbnRyeSwgc3RydWN0IHN0YXQgKnN0LCBib29sIHRydXN0X21vZGUpOwogCiBleHRlcm4gc2l6ZV90IGdpdF9pbmRleF9fcHJlZml4X3Bvc2l0aW9uKGdpdF9pbmRleCAqaW5kZXgsIGNvbnN0IGNoYXIgKnBhdGgpOwogCiBleHRlcm4gaW50IGdpdF9pbmRleF9lbnRyeV9fY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwogZXh0ZXJuIGludCBnaXRfaW5kZXhfZW50cnlfX2NtcF9pY2FzZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIAorZXh0ZXJuIGludCBnaXRfaW5kZXhfX2ZpbmQoCisJc2l6ZV90ICphdF9wb3MsIGdpdF9pbmRleCAqaW5kZXgsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdGFnZSk7CisKIGV4dGVybiB2b2lkIGdpdF9pbmRleF9fc2V0X2lnbm9yZV9jYXNlKGdpdF9pbmRleCAqaW5kZXgsIGJvb2wgaWdub3JlX2Nhc2UpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbmRleGVyLmMgYi9zcmMvaW5kZXhlci5jCmluZGV4IDFiNTMzOWYuLmRmMWNlN2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmRleGVyLmMKKysrIGIvc3JjL2luZGV4ZXIuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImZpbGVidWYuaCIKICNpbmNsdWRlICJvaWQuaCIKICNpbmNsdWRlICJvaWRtYXAuaCIKKyNpbmNsdWRlICJjb21wcmVzcy5oIgogCiAjZGVmaW5lIFVJTlQzMV9NQVggKDB4N0ZGRkZGRkYpCiAKQEAgLTI4LDEzICsyOSwxNSBAQAogCXVpbnQ2NF90IG9mZnNldF9sb25nOwogfTsKIAotc3RydWN0IGdpdF9pbmRleGVyX3N0cmVhbSB7CitzdHJ1Y3QgZ2l0X2luZGV4ZXIgewogCXVuc2lnbmVkIGludCBwYXJzZWRfaGVhZGVyIDoxLAogCQlvcGVuZWRfcGFjayA6MSwKIAkJaGF2ZV9zdHJlYW0gOjEsCiAJCWhhdmVfZGVsdGEgOjE7CisJc3RydWN0IGdpdF9wYWNrX2hlYWRlciBoZHI7CiAJc3RydWN0IGdpdF9wYWNrX2ZpbGUgKnBhY2s7CiAJZ2l0X2ZpbGVidWYgcGFja19maWxlOworCXVuc2lnbmVkIGludCBtb2RlOwogCWdpdF9vZmZfdCBvZmY7CiAJZ2l0X29mZl90IGVudHJ5X3N0YXJ0OwogCWdpdF9wYWNrZmlsZV9zdHJlYW0gc3RyZWFtOwpAQCAtNDcsMTMgKzUwLDIxIEBACiAJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzX2NhbGxiYWNrIHByb2dyZXNzX2NiOwogCXZvaWQgKnByb2dyZXNzX3BheWxvYWQ7CiAJY2hhciBvYmpidWZbOCoxMDI0XTsKKworCS8qIE5lZWRlZCB0byBsb29rIHVwIG9iamVjdHMgd2hpY2ggd2Ugd2FudCB0byBpbmplY3QgdG8gZml4IGEgdGhpbiBwYWNrICovCisJZ2l0X29kYiAqb2RiOworCisJLyogRmllbGRzIGZvciBjYWxjdWxhdGluZyB0aGUgcGFja2ZpbGUgdHJhaWxlciAoaGFzaCBvZiBldmVyeXRoaW5nIGJlZm9yZSBpdCkgKi8KKwljaGFyIGluYnVmW0dJVF9PSURfUkFXU1pdOworCXNpemVfdCBpbmJ1Zl9sZW47CisJZ2l0X2hhc2hfY3R4IHRyYWlsZXI7CiB9OwogCiBzdHJ1Y3QgZGVsdGFfaW5mbyB7CiAJZ2l0X29mZl90IGRlbHRhX29mZjsKIH07CiAKLWNvbnN0IGdpdF9vaWQgKmdpdF9pbmRleGVyX3N0cmVhbV9oYXNoKGNvbnN0IGdpdF9pbmRleGVyX3N0cmVhbSAqaWR4KQorY29uc3QgZ2l0X29pZCAqZ2l0X2luZGV4ZXJfaGFzaChjb25zdCBnaXRfaW5kZXhlciAqaWR4KQogewogCXJldHVybiAmaWR4LT5oYXNoOwogfQpAQCAtMTA2LDI4ICsxMTcsMzQgQEAKIAlyZXR1cm4gZ2l0X29pZF9fY21wKCZlbnRyeWEtPm9pZCwgJmVudHJ5Yi0+b2lkKTsKIH0KIAotaW50IGdpdF9pbmRleGVyX3N0cmVhbV9uZXcoCi0JCWdpdF9pbmRleGVyX3N0cmVhbSAqKm91dCwKK2ludCBnaXRfaW5kZXhlcl9uZXcoCisJCWdpdF9pbmRleGVyICoqb3V0LAogCQljb25zdCBjaGFyICpwcmVmaXgsCisJCXVuc2lnbmVkIGludCBtb2RlLAorCQlnaXRfb2RiICpvZGIsCiAJCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBwcm9ncmVzc19jYiwKIAkJdm9pZCAqcHJvZ3Jlc3NfcGF5bG9hZCkKIHsKLQlnaXRfaW5kZXhlcl9zdHJlYW0gKmlkeDsKKwlnaXRfaW5kZXhlciAqaWR4OwogCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAlzdGF0aWMgY29uc3QgY2hhciBzdWZmW10gPSAiL3BhY2siOwogCWludCBlcnJvcjsKIAotCWlkeCA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfaW5kZXhlcl9zdHJlYW0pKTsKKwlpZHggPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2luZGV4ZXIpKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MoaWR4KTsKKwlpZHgtPm9kYiA9IG9kYjsKIAlpZHgtPnByb2dyZXNzX2NiID0gcHJvZ3Jlc3NfY2I7CiAJaWR4LT5wcm9ncmVzc19wYXlsb2FkID0gcHJvZ3Jlc3NfcGF5bG9hZDsKKwlpZHgtPm1vZGUgPSBtb2RlID8gbW9kZSA6IEdJVF9QQUNLX0ZJTEVfTU9ERTsKKwlnaXRfaGFzaF9jdHhfaW5pdCgmaWR4LT50cmFpbGVyKTsKIAogCWVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcHJlZml4LCBzdWZmKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAllcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmlkeC0+cGFja19maWxlLCBwYXRoLnB0ciwKLQkJCQkgR0lUX0ZJTEVCVUZfVEVNUE9SQVJZIHwgR0lUX0ZJTEVCVUZfRE9fTk9UX0JVRkZFUik7CisJCUdJVF9GSUxFQlVGX1RFTVBPUkFSWSB8IEdJVF9GSUxFQlVGX0RPX05PVF9CVUZGRVIsCisJCWlkeC0+bW9kZSk7CiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGNsZWFudXA7CkBAIC0xNDMsNyArMTYwLDcgQEAKIH0KIAogLyogVHJ5IHRvIHN0b3JlIHRoZSBkZWx0YSBzbyB3ZSBjYW4gdHJ5IHRvIHJlc29sdmUgaXQgbGF0ZXIgKi8KLXN0YXRpYyBpbnQgc3RvcmVfZGVsdGEoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgpCitzdGF0aWMgaW50IHN0b3JlX2RlbHRhKGdpdF9pbmRleGVyICppZHgpCiB7CiAJc3RydWN0IGRlbHRhX2luZm8gKmRlbHRhOwogCkBAIC0xNjYsNyArMTgzLDcgQEAKIAlnaXRfaGFzaF91cGRhdGUoY3R4LCBidWZmZXIsIGhkcmxlbik7CiB9CiAKLXN0YXRpYyBpbnQgaGFzaF9vYmplY3Rfc3RyZWFtKGdpdF9pbmRleGVyX3N0cmVhbSAqaWR4LCBnaXRfcGFja2ZpbGVfc3RyZWFtICpzdHJlYW0pCitzdGF0aWMgaW50IGhhc2hfb2JqZWN0X3N0cmVhbShnaXRfaW5kZXhlcippZHgsIGdpdF9wYWNrZmlsZV9zdHJlYW0gKnN0cmVhbSkKIHsKIAlzc2l6ZV90IHJlYWQ7CiAKQEAgLTE4Niw3ICsyMDMsNyBAQAogfQogCiAvKiBJbiBvcmRlciB0byBjcmVhdGUgdGhlIHBhY2tmaWxlIHN0cmVhbSwgd2UgbmVlZCB0byBza2lwIG92ZXIgdGhlIGRlbHRhIGJhc2UgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBpbnQgYWR2YW5jZV9kZWx0YV9vZmZzZXQoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgsIGdpdF9vdHlwZSB0eXBlKQorc3RhdGljIGludCBhZHZhbmNlX2RlbHRhX29mZnNldChnaXRfaW5kZXhlciAqaWR4LCBnaXRfb3R5cGUgdHlwZSkKIHsKIAlnaXRfbXdpbmRvdyAqdyA9IE5VTEw7CiAKQEAgLTIwNSw3ICsyMjIsNyBAQAogfQogCiAvKiBSZWFkIGZyb20gdGhlIHN0cmVhbSBhbmQgZGlzY2FyZCBhbnkgb3V0cHV0ICovCi1zdGF0aWMgaW50IHJlYWRfb2JqZWN0X3N0cmVhbShnaXRfaW5kZXhlcl9zdHJlYW0gKmlkeCwgZ2l0X3BhY2tmaWxlX3N0cmVhbSAqc3RyZWFtKQorc3RhdGljIGludCByZWFkX29iamVjdF9zdHJlYW0oZ2l0X2luZGV4ZXIgKmlkeCwgZ2l0X3BhY2tmaWxlX3N0cmVhbSAqc3RyZWFtKQogewogCXNzaXplX3QgcmVhZDsKIApAQCAtMjQ1LDcgKzI2Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3RvcmVfb2JqZWN0KGdpdF9pbmRleGVyX3N0cmVhbSAqaWR4KQorc3RhdGljIGludCBzdG9yZV9vYmplY3QoZ2l0X2luZGV4ZXIgKmlkeCkKIHsKIAlpbnQgaSwgZXJyb3I7CiAJa2hpdGVyX3QgazsKQEAgLTMwMywxNyArMzIwLDEwIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGhhc2hfYW5kX3NhdmUoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgsIGdpdF9yYXdvYmogKm9iaiwgZ2l0X29mZl90IGVudHJ5X3N0YXJ0KQorc3RhdGljIGludCBzYXZlX2VudHJ5KGdpdF9pbmRleGVyICppZHgsIHN0cnVjdCBlbnRyeSAqZW50cnksIHN0cnVjdCBnaXRfcGFja19lbnRyeSAqcGVudHJ5LCBnaXRfb2ZmX3QgZW50cnlfc3RhcnQpCiB7CiAJaW50IGksIGVycm9yOwogCWtoaXRlcl90IGs7Ci0JZ2l0X29pZCBvaWQ7Ci0Jc2l6ZV90IGVudHJ5X3NpemU7Ci0Jc3RydWN0IGVudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgZ2l0X3BhY2tfZW50cnkgKnBlbnRyeTsKLQotCWVudHJ5ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKCplbnRyeSkpOwotCUdJVEVSUl9DSEVDS19BTExPQyhlbnRyeSk7CiAKIAlpZiAoZW50cnlfc3RhcnQgPiBVSU5UMzFfTUFYKSB7CiAJCWVudHJ5LT5vZmZzZXQgPSBVSU5UMzJfTUFYOwpAQCAtMzIyLDI1ICszMzIsNDMgQEAKIAkJZW50cnktPm9mZnNldCA9ICh1aW50MzJfdCllbnRyeV9zdGFydDsKIAl9CiAKLQkvKiBGSVhNRTogUGFyc2UgdGhlIG9iamVjdCBpbnN0ZWFkIG9mIGhhc2hpbmcgaXQgKi8KKwlwZW50cnktPm9mZnNldCA9IGVudHJ5X3N0YXJ0OworCWsgPSBraF9wdXQob2lkLCBpZHgtPnBhY2stPmlkeF9jYWNoZSwgJnBlbnRyeS0+c2hhMSwgJmVycm9yKTsKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gLTE7CisKKwlraF92YWx1ZShpZHgtPnBhY2stPmlkeF9jYWNoZSwgaykgPSBwZW50cnk7CisKKwkvKiBBZGQgdGhlIG9iamVjdCB0byB0aGUgbGlzdCAqLworCWlmIChnaXRfdmVjdG9yX2luc2VydCgmaWR4LT5vYmplY3RzLCBlbnRyeSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSBlbnRyeS0+b2lkLmlkWzBdOyBpIDwgMjU2OyArK2kpIHsKKwkJaWR4LT5mYW5vdXRbaV0rKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXNoX2FuZF9zYXZlKGdpdF9pbmRleGVyICppZHgsIGdpdF9yYXdvYmogKm9iaiwgZ2l0X29mZl90IGVudHJ5X3N0YXJ0KQoreworCWdpdF9vaWQgb2lkOworCXNpemVfdCBlbnRyeV9zaXplOworCXN0cnVjdCBlbnRyeSAqZW50cnk7CisJc3RydWN0IGdpdF9wYWNrX2VudHJ5ICpwZW50cnk7CisKKwllbnRyeSA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZigqZW50cnkpKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MoZW50cnkpOworCiAJaWYgKGdpdF9vZGJfX2hhc2hvYmooJm9pZCwgb2JqKSA8IDApIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgIkZhaWxlZCB0byBoYXNoIG9iamVjdCIpOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gb25fZXJyb3I7CiAJfQogCiAJcGVudHJ5ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBnaXRfcGFja19lbnRyeSkpOwogCUdJVEVSUl9DSEVDS19BTExPQyhwZW50cnkpOwogCiAJZ2l0X29pZF9jcHkoJnBlbnRyeS0+c2hhMSwgJm9pZCk7Ci0JcGVudHJ5LT5vZmZzZXQgPSBlbnRyeV9zdGFydDsKLQlrID0ga2hfcHV0KG9pZCwgaWR4LT5wYWNrLT5pZHhfY2FjaGUsICZwZW50cnktPnNoYTEsICZlcnJvcik7Ci0JaWYgKCFlcnJvcikgewotCQlnaXRfX2ZyZWUocGVudHJ5KTsKLQkJZ290byBvbl9lcnJvcjsKLQl9Ci0KLQlraF92YWx1ZShpZHgtPnBhY2stPmlkeF9jYWNoZSwgaykgPSBwZW50cnk7Ci0KIAlnaXRfb2lkX2NweSgmZW50cnktPm9pZCwgJm9pZCk7CiAJZW50cnktPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwogCkBAIC0zNDgsMTUgKzM3Niw3IEBACiAJaWYgKGNyY19vYmplY3QoJmVudHJ5LT5jcmMsICZpZHgtPnBhY2stPm13ZiwgZW50cnlfc3RhcnQsIGVudHJ5X3NpemUpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAotCS8qIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBsaXN0ICovCi0JaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KCZpZHgtPm9iamVjdHMsIGVudHJ5KSA8IDApCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQlmb3IgKGkgPSBvaWQuaWRbMF07IGkgPCAyNTY7ICsraSkgewotCQlpZHgtPmZhbm91dFtpXSsrOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBzYXZlX2VudHJ5KGlkeCwgZW50cnksIHBlbnRyeSwgZW50cnlfc3RhcnQpOwogCiBvbl9lcnJvcjoKIAlnaXRfX2ZyZWUoZW50cnkpOwpAQCAtMzY0LDE3ICszODQsNTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcHJvZ3Jlc3NfY2FsbGJhY2soZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgsIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpCitzdGF0aWMgaW50IGRvX3Byb2dyZXNzX2NhbGxiYWNrKGdpdF9pbmRleGVyICppZHgsIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpCiB7CiAJaWYgKCFpZHgtPnByb2dyZXNzX2NiKSByZXR1cm4gMDsKIAlyZXR1cm4gaWR4LT5wcm9ncmVzc19jYihzdGF0cywgaWR4LT5wcm9ncmVzc19wYXlsb2FkKTsKIH0KIAotaW50IGdpdF9pbmRleGVyX3N0cmVhbV9hZGQoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKQorLyogSGFzaCBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCAyMEIgb2YgaW5wdXQgKi8KK3N0YXRpYyB2b2lkIGhhc2hfcGFydGlhbGx5KGdpdF9pbmRleGVyICppZHgsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXNpemVfdCB0b19leHBlbGwsIHRvX2tlZXA7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBFYXN5IGNhc2UsIGR1bXAgdGhlIGJ1ZmZlciBhbmQgdGhlIGRhdGEgbWludXMgdGhlIGxhc3QgMjAgYnl0ZXMgKi8KKwlpZiAoc2l6ZSA+PSBHSVRfT0lEX1JBV1NaKSB7CisJCWdpdF9oYXNoX3VwZGF0ZSgmaWR4LT50cmFpbGVyLCBpZHgtPmluYnVmLCBpZHgtPmluYnVmX2xlbik7CisJCWdpdF9oYXNoX3VwZGF0ZSgmaWR4LT50cmFpbGVyLCBkYXRhLCBzaXplIC0gR0lUX09JRF9SQVdTWik7CisKKwkJZGF0YSArPSBzaXplIC0gR0lUX09JRF9SQVdTWjsKKwkJbWVtY3B5KGlkeC0+aW5idWYsIGRhdGEsIEdJVF9PSURfUkFXU1opOworCQlpZHgtPmluYnVmX2xlbiA9IEdJVF9PSURfUkFXU1o7CisJCXJldHVybjsKKwl9CisKKwkvKiBXZSBjYW4ganVzdCBhcHBlbmQgKi8KKwlpZiAoaWR4LT5pbmJ1Zl9sZW4gKyBzaXplIDw9IEdJVF9PSURfUkFXU1opIHsKKwkJbWVtY3B5KGlkeC0+aW5idWYgKyBpZHgtPmluYnVmX2xlbiwgZGF0YSwgc2l6ZSk7CisJCWlkeC0+aW5idWZfbGVuICs9IHNpemU7CisJCXJldHVybjsKKwl9CisKKwkvKiBXZSBuZWVkIHRvIHBhcnRpYWxseSBkcmFpbiB0aGUgYnVmZmVyIGFuZCB0aGVuIGFwcGVuZCAqLworCXRvX2tlZXAgICA9IEdJVF9PSURfUkFXU1ogLSBzaXplOworCXRvX2V4cGVsbCA9IGlkeC0+aW5idWZfbGVuIC0gdG9fa2VlcDsKKworCWdpdF9oYXNoX3VwZGF0ZSgmaWR4LT50cmFpbGVyLCBpZHgtPmluYnVmLCB0b19leHBlbGwpOworCisJbWVtbW92ZShpZHgtPmluYnVmLCBpZHgtPmluYnVmICsgdG9fZXhwZWxsLCB0b19rZWVwKTsKKwltZW1jcHkoaWR4LT5pbmJ1ZiArIHRvX2tlZXAsIGRhdGEsIHNpemUpOworCWlkeC0+aW5idWZfbGVuICs9IHNpemUgLSB0b19leHBlbGw7Cit9CisKK2ludCBnaXRfaW5kZXhlcl9hcHBlbmQoZ2l0X2luZGV4ZXIgKmlkeCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpCiB7CiAJaW50IGVycm9yID0gLTE7Ci0Jc3RydWN0IGdpdF9wYWNrX2hlYWRlciBoZHI7CiAJc2l6ZV90IHByb2Nlc3NlZDsKKwlzdHJ1Y3QgZ2l0X3BhY2tfaGVhZGVyICpoZHIgPSAmaWR4LT5oZHI7CiAJZ2l0X213aW5kb3dfZmlsZSAqbXdmID0gJmlkeC0+cGFjay0+bXdmOwogCiAJYXNzZXJ0KGlkeCAmJiBkYXRhICYmIHN0YXRzKTsKQEAgLTM4NCw2ICs0NDEsOCBAQAogCWlmIChnaXRfZmlsZWJ1Zl93cml0ZSgmaWR4LT5wYWNrX2ZpbGUsIGRhdGEsIHNpemUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCisJaGFzaF9wYXJ0aWFsbHkoaWR4LCBkYXRhLCAoaW50KXNpemUpOworCiAJLyogTWFrZSBzdXJlIHdlIHNldCB0aGUgbmV3IHNpemUgb2YgdGhlIHBhY2sgKi8KIAlpZiAoaWR4LT5vcGVuZWRfcGFjaykgewogCQlpZHgtPnBhY2stPm13Zi5zaXplICs9IHNpemU7CkBAIC0zOTksMTQgKzQ1OCwxNCBAQAogCWlmICghaWR4LT5wYXJzZWRfaGVhZGVyKSB7CiAJCXVuc2lnbmVkIGludCB0b3RhbF9vYmplY3RzOwogCi0JCWlmICgodW5zaWduZWQpaWR4LT5wYWNrLT5td2Yuc2l6ZSA8IHNpemVvZihoZHIpKQorCQlpZiAoKHVuc2lnbmVkKWlkeC0+cGFjay0+bXdmLnNpemUgPCBzaXplb2Yoc3RydWN0IGdpdF9wYWNrX2hlYWRlcikpCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAocGFyc2VfaGVhZGVyKCZoZHIsIGlkeC0+cGFjaykgPCAwKQorCQlpZiAocGFyc2VfaGVhZGVyKCZpZHgtPmhkciwgaWR4LT5wYWNrKSA8IDApCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWR4LT5wYXJzZWRfaGVhZGVyID0gMTsKLQkJaWR4LT5ucl9vYmplY3RzID0gbnRvaGwoaGRyLmhkcl9lbnRyaWVzKTsKKwkJaWR4LT5ucl9vYmplY3RzID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CiAJCWlkeC0+b2ZmID0gc2l6ZW9mKHN0cnVjdCBnaXRfcGFja19oZWFkZXIpOwogCiAJCS8qIGZvciBub3csIGxpbWl0IHRvIDJeMzIgb2JqZWN0cyAqLwpAQCAtNDI3LDYgKzQ4Niw5IEBACiAJCQlyZXR1cm4gLTE7CiAKIAkJc3RhdHMtPnJlY2VpdmVkX29iamVjdHMgPSAwOworCQlzdGF0cy0+bG9jYWxfb2JqZWN0cyA9IDA7CisJCXN0YXRzLT50b3RhbF9kZWx0YXMgPSAwOworCQlzdGF0cy0+aW5kZXhlZF9kZWx0YXMgPSAwOwogCQlwcm9jZXNzZWQgPSBzdGF0cy0+aW5kZXhlZF9vYmplY3RzID0gMDsKIAkJc3RhdHMtPnRvdGFsX29iamVjdHMgPSB0b3RhbF9vYmplY3RzOwogCQlkb19wcm9ncmVzc19jYWxsYmFjayhpZHgsIHN0YXRzKTsKQEAgLTUxMiw2ICs1NzQsNyBAQAogCQlzdGF0cy0+cmVjZWl2ZWRfb2JqZWN0cysrOwogCiAJCWlmIChkb19wcm9ncmVzc19jYWxsYmFjayhpZHgsIHN0YXRzKSAhPSAwKSB7CisJCQlnaXRlcnJfY2xlYXIoKTsKIAkJCWVycm9yID0gR0lUX0VVU0VSOwogCQkJZ290byBvbl9lcnJvcjsKIAkJfQpAQCAtNTI0LDcgKzU4Nyw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW50IGluZGV4X3BhdGhfc3RyZWFtKGdpdF9idWYgKnBhdGgsIGdpdF9pbmRleGVyX3N0cmVhbSAqaWR4LCBjb25zdCBjaGFyICpzdWZmaXgpCitzdGF0aWMgaW50IGluZGV4X3BhdGgoZ2l0X2J1ZiAqcGF0aCwgZ2l0X2luZGV4ZXIgKmlkeCwgY29uc3QgY2hhciAqc3VmZml4KQogewogCWNvbnN0IGNoYXIgcHJlZml4W10gPSAicGFjay0iOwogCXNpemVfdCBzbGFzaCA9IChzaXplX3QpcGF0aC0+c2l6ZTsKQEAgLTU0Niw2OCArNjA5LDMwNiBAQAogCXJldHVybiBnaXRfYnVmX29vbShwYXRoKSA/IC0xIDogMDsKIH0KIAotc3RhdGljIGludCByZXNvbHZlX2RlbHRhcyhnaXRfaW5kZXhlcl9zdHJlYW0gKmlkeCwgZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cykKKy8qKgorICogUmV3aW5kIHRoZSBwYWNrZmlsZSBieSB0aGUgdHJhaWxlciwgYXMgd2UgbWlnaHQgbmVlZCB0byBmaXggdGhlCisgKiBwYWNrZmlsZSBieSBpbmplY3Rpbmcgb2JqZWN0cyBhdCB0aGUgdGFpbCBhbmQgbXVzdCBvdmVyd3JpdGUgaXQuCisgKi8KK3N0YXRpYyBnaXRfb2ZmX3Qgc2Vla19iYWNrX3RyYWlsZXIoZ2l0X2luZGV4ZXIgKmlkeCkKK3sKKwlnaXRfb2ZmX3Qgb2ZmOworCisJaWYgKChvZmYgPSBwX2xzZWVrKGlkeC0+cGFja19maWxlLmZkLCAtR0lUX09JRF9SQVdTWiwgU0VFS19DVVIpKSA8IDApCisJCXJldHVybiAtMTsKKworCWlkeC0+cGFjay0+bXdmLnNpemUgLT0gR0lUX09JRF9SQVdTWjsKKwlnaXRfbXdpbmRvd19mcmVlX2FsbCgmaWR4LT5wYWNrLT5td2YpOworCisJcmV0dXJuIG9mZjsKK30KKworc3RhdGljIGludCBpbmplY3Rfb2JqZWN0KGdpdF9pbmRleGVyICppZHgsIGdpdF9vaWQgKmlkKQoreworCWdpdF9vZGJfb2JqZWN0ICpvYmo7CisJc3RydWN0IGVudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgZ2l0X3BhY2tfZW50cnkgKnBlbnRyeTsKKwlnaXRfb2lkIGZvbyA9IHt7MH19OworCXVuc2lnbmVkIGNoYXIgaGRyWzY0XTsKKwlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfb2ZmX3QgZW50cnlfc3RhcnQ7CisJY29uc3Qgdm9pZCAqZGF0YTsKKwlzaXplX3QgbGVuLCBoZHJfbGVuOworCWludCBlcnJvcjsKKworCWVudHJ5ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKCplbnRyeSkpOworCUdJVEVSUl9DSEVDS19BTExPQyhlbnRyeSk7CisKKwllbnRyeV9zdGFydCA9IHNlZWtfYmFja190cmFpbGVyKGlkeCk7CisKKwlpZiAoZ2l0X29kYl9yZWFkKCZvYmosIGlkeC0+b2RiLCBpZCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlkYXRhID0gZ2l0X29kYl9vYmplY3RfZGF0YShvYmopOworCWxlbiA9IGdpdF9vZGJfb2JqZWN0X3NpemUob2JqKTsKKworCWVudHJ5LT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKKworCS8qIFdyaXRlIG91dCB0aGUgb2JqZWN0IGhlYWRlciAqLworCWhkcl9sZW4gPSBnaXRfcGFja2ZpbGVfX29iamVjdF9oZWFkZXIoaGRyLCBsZW4sIGdpdF9vZGJfb2JqZWN0X3R5cGUob2JqKSk7CisJZ2l0X2ZpbGVidWZfd3JpdGUoJmlkeC0+cGFja19maWxlLCBoZHIsIGhkcl9sZW4pOworCWlkeC0+cGFjay0+bXdmLnNpemUgKz0gaGRyX2xlbjsKKwllbnRyeS0+Y3JjID0gY3JjMzIoZW50cnktPmNyYywgaGRyLCBoZHJfbGVuKTsKKworCWlmICgoZXJyb3IgPSBnaXRfX2NvbXByZXNzKCZidWYsIGRhdGEsIGxlbikpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJLyogQW5kIHRoZW4gdGhlIGNvbXByZXNzZWQgb2JqZWN0ICovCisJZ2l0X2ZpbGVidWZfd3JpdGUoJmlkeC0+cGFja19maWxlLCBidWYucHRyLCBidWYuc2l6ZSk7CisJaWR4LT5wYWNrLT5td2Yuc2l6ZSArPSBidWYuc2l6ZTsKKwllbnRyeS0+Y3JjID0gaHRvbmwoY3JjMzIoZW50cnktPmNyYywgKHVuc2lnbmVkIGNoYXIgKilidWYucHRyLCAodUludClidWYuc2l6ZSkpOworCWdpdF9idWZfZnJlZSgmYnVmKTsKKworCS8qIFdyaXRlIGEgZmFrZSB0cmFpbGVyIHNvIHRoZSBwYWNrIGZ1bmN0aW9ucyBwbGF5IGJhbGwgKi8KKwlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfd3JpdGUoJmlkeC0+cGFja19maWxlLCAmZm9vLCBHSVRfT0lEX1JBV1NaKSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlpZHgtPnBhY2stPm13Zi5zaXplICs9IEdJVF9PSURfUkFXU1o7CisKKwlwZW50cnkgPSBnaXRfX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGdpdF9wYWNrX2VudHJ5KSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHBlbnRyeSk7CisKKwlnaXRfb2lkX2NweSgmcGVudHJ5LT5zaGExLCBpZCk7CisJZ2l0X29pZF9jcHkoJmVudHJ5LT5vaWQsIGlkKTsKKwlpZHgtPm9mZiA9IGVudHJ5X3N0YXJ0ICsgaGRyX2xlbiArIGxlbjsKKworCWlmICgoZXJyb3IgPSBzYXZlX2VudHJ5KGlkeCwgZW50cnksIHBlbnRyeSwgZW50cnlfc3RhcnQpKSA8IDApCisJCWdpdF9fZnJlZShwZW50cnkpOworCitjbGVhbnVwOgorCWdpdF9vZGJfb2JqZWN0X2ZyZWUob2JqKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZml4X3RoaW5fcGFjayhnaXRfaW5kZXhlciAqaWR4LCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKQoreworCWludCBlcnJvciwgZm91bmRfcmVmX2RlbHRhID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgZGVsdGFfaW5mbyAqZGVsdGE7CisJc2l6ZV90IHNpemU7CisJZ2l0X290eXBlIHR5cGU7CisJZ2l0X213aW5kb3cgKncgPSBOVUxMOworCWdpdF9vZmZfdCBjdXJwb3M7CisJdW5zaWduZWQgY2hhciAqYmFzZV9pbmZvOworCXVuc2lnbmVkIGludCBsZWZ0ID0gMDsKKwlnaXRfb2lkIGJhc2U7CisKKwlhc3NlcnQoZ2l0X3ZlY3Rvcl9sZW5ndGgoJmlkeC0+ZGVsdGFzKSA+IDApOworCisJaWYgKGlkeC0+b2RiID09IE5VTEwpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgImNhbm5vdCBmaXggYSB0aGluIHBhY2sgd2l0aG91dCBhbiBPREIiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIExvb3AgdW50aWwgd2UgZmluZCB0aGUgZmlyc3QgUkVGIGRlbHRhICovCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZpZHgtPmRlbHRhcywgaSwgZGVsdGEpIHsKKwkJY3VycG9zID0gZGVsdGEtPmRlbHRhX29mZjsKKwkJZXJyb3IgPSBnaXRfcGFja2ZpbGVfdW5wYWNrX2hlYWRlcigmc2l6ZSwgJnR5cGUsICZpZHgtPnBhY2stPm13ZiwgJncsICZjdXJwb3MpOworCQlnaXRfbXdpbmRvd19jbG9zZSgmdyk7CisJCWlmIChlcnJvciA8IDApCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJaWYgKHR5cGUgPT0gR0lUX09CSl9SRUZfREVMVEEpIHsKKwkJCWZvdW5kX3JlZl9kZWx0YSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmRfcmVmX2RlbHRhKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYRVIsICJubyBSRUZfREVMVEEgZm91bmQsIGNhbm5vdCBpbmplY3Qgb2JqZWN0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBjdXJwb3Mgbm93IHBvaW50cyB0byB0aGUgYmFzZSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgYW4gT0lEICovCisJYmFzZV9pbmZvID0gZ2l0X213aW5kb3dfb3BlbigmaWR4LT5wYWNrLT5td2YsICZ3LCBjdXJwb3MsIEdJVF9PSURfUkFXU1osICZsZWZ0KTsKKwlpZiAoYmFzZV9pbmZvID09IE5VTEwpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgImZhaWxlZCB0byBtYXAgZGVsdGEgaW5mb3JtYXRpb24iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWdpdF9vaWRfZnJvbXJhdygmYmFzZSwgYmFzZV9pbmZvKTsKKwlnaXRfbXdpbmRvd19jbG9zZSgmdyk7CisKKwlpZiAoaW5qZWN0X29iamVjdChpZHgsICZiYXNlKSA8IDApCisJCXJldHVybiAtMTsKKworCXN0YXRzLT5sb2NhbF9vYmplY3RzKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNvbHZlX2RlbHRhcyhnaXRfaW5kZXhlciAqaWR4LCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKQogewogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBkZWx0YV9pbmZvICpkZWx0YTsKKwlpbnQgcHJvZ3Jlc3NlZCA9IDA7CiAKLQlnaXRfdmVjdG9yX2ZvcmVhY2goJmlkeC0+ZGVsdGFzLCBpLCBkZWx0YSkgewotCQlnaXRfcmF3b2JqIG9iajsKKwl3aGlsZSAoaWR4LT5kZWx0YXMubGVuZ3RoID4gMCkgeworCQlwcm9ncmVzc2VkID0gMDsKKwkJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZpZHgtPmRlbHRhcywgaSwgZGVsdGEpIHsKKwkJCWdpdF9yYXdvYmogb2JqOwogCi0JCWlkeC0+b2ZmID0gZGVsdGEtPmRlbHRhX29mZjsKLQkJaWYgKGdpdF9wYWNrZmlsZV91bnBhY2soJm9iaiwgaWR4LT5wYWNrLCAmaWR4LT5vZmYpIDwgMCkKKwkJCWlkeC0+b2ZmID0gZGVsdGEtPmRlbHRhX29mZjsKKwkJCWlmIChnaXRfcGFja2ZpbGVfdW5wYWNrKCZvYmosIGlkeC0+cGFjaywgJmlkeC0+b2ZmKSA8IDApCisJCQkJY29udGludWU7CisKKwkJCWlmIChoYXNoX2FuZF9zYXZlKGlkeCwgJm9iaiwgZGVsdGEtPmRlbHRhX29mZikgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlnaXRfX2ZyZWUob2JqLmRhdGEpOworCQkJc3RhdHMtPmluZGV4ZWRfb2JqZWN0cysrOworCQkJc3RhdHMtPmluZGV4ZWRfZGVsdGFzKys7CisJCQlwcm9ncmVzc2VkID0gMTsKKwkJCWRvX3Byb2dyZXNzX2NhbGxiYWNrKGlkeCwgc3RhdHMpOworCisJCQkvKgorCQkJICogUmVtb3ZlIHRoaXMgZGVsdGEgZnJvbSB0aGUgbGlzdCBhbmQKKwkJCSAqIGRlY3JlYXNlIGkgc28gd2UgZG9uJ3Qgc2tpcCBvdmVyIHRoZSBuZXh0CisJCQkgKiBkZWx0YS4KKwkJCSAqLworCQkJZ2l0X3ZlY3Rvcl9yZW1vdmUoJmlkeC0+ZGVsdGFzLCBpKTsKKwkJCWdpdF9fZnJlZShkZWx0YSk7CisJCQlpLS07CisJCX0KKworCQlpZiAoIXByb2dyZXNzZWQgJiYgKGZpeF90aGluX3BhY2soaWR4LCBzdGF0cykgPCAwKSkgeworCQkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgIm1pc3NpbmcgZGVsdGEgYmFzZXMiKTsKIAkJCXJldHVybiAtMTsKLQotCQlpZiAoaGFzaF9hbmRfc2F2ZShpZHgsICZvYmosIGRlbHRhLT5kZWx0YV9vZmYpIDwgMCkKLQkJCXJldHVybiAtMTsKLQotCQlnaXRfX2ZyZWUob2JqLmRhdGEpOwotCQlzdGF0cy0+aW5kZXhlZF9vYmplY3RzKys7Ci0JCWRvX3Byb2dyZXNzX2NhbGxiYWNrKGlkeCwgc3RhdHMpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBnaXRfaW5kZXhlcl9zdHJlYW1fZmluYWxpemUoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgsIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpCitzdGF0aWMgaW50IHVwZGF0ZV9oZWFkZXJfYW5kX3JlaGFzaChnaXRfaW5kZXhlciAqaWR4LCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKQoreworCXZvaWQgKnB0cjsKKwlzaXplX3QgY2h1bmsgPSAxMDI0KjEwMjQ7CisJZ2l0X29mZl90IGhhc2hlZCA9IDA7CisJZ2l0X213aW5kb3cgKncgPSBOVUxMOworCWdpdF9td2luZG93X2ZpbGUgKm13ZjsKKwl1bnNpZ25lZCBpbnQgbGVmdDsKKwlnaXRfaGFzaF9jdHggKmN0eDsKKworCW13ZiA9ICZpZHgtPnBhY2stPm13ZjsKKwljdHggPSAmaWR4LT50cmFpbGVyOworCisJZ2l0X2hhc2hfY3R4X2luaXQoY3R4KTsKKwlnaXRfbXdpbmRvd19mcmVlX2FsbChtd2YpOworCisJLyogVXBkYXRlIHRoZSBoZWFkZXIgdG8gaW5jbHVkZSB0aGUgbnVtZXIgb2YgbG9jYWwgb2JqZWN0cyB3ZSBpbmplY3RlZCAqLworCWlkeC0+aGRyLmhkcl9lbnRyaWVzID0gaHRvbmwoc3RhdHMtPnRvdGFsX29iamVjdHMgKyBzdGF0cy0+bG9jYWxfb2JqZWN0cyk7CisJaWYgKHBfbHNlZWsoaWR4LT5wYWNrX2ZpbGUuZmQsIDAsIFNFRUtfU0VUKSA8IDApIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gc2VlayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWNrIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocF93cml0ZShpZHgtPnBhY2tfZmlsZS5mZCwgJmlkeC0+aGRyLCBzaXplb2Yoc3RydWN0IGdpdF9wYWNrX2hlYWRlcikpIDwgMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgImZhaWxlZCB0byB1cGRhdGUgdGhlIHBhY2sgaGVhZGVyIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFdlIG5vdyB1c2UgdGhlIHNhbWUgdGVjaG5pcXVlIGFzIGJlZm9yZSB0byBkZXRlcm1pbmUgdGhlCisJICogaGFzaC4gV2Uga2VlcCByZWFkaW5nIHVwIHRvIHRoZSBlbmQgYW5kIGxldAorCSAqIGhhc2hfcGFydGlhbGx5KCkga2VlcCB0aGUgZXhpc3RpbmcgdHJhaWxlciBvdXQgb2YgdGhlCisJICogY2FsY3VsYXRpb24uCisJICovCisJaWR4LT5pbmJ1Zl9sZW4gPSAwOworCXdoaWxlIChoYXNoZWQgPCBtd2YtPnNpemUpIHsKKwkJcHRyID0gZ2l0X213aW5kb3dfb3Blbihtd2YsICZ3LCBoYXNoZWQsIGNodW5rLCAmbGVmdCk7CisJCWlmIChwdHIgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQloYXNoX3BhcnRpYWxseShpZHgsIHB0ciwgbGVmdCk7CisJCWhhc2hlZCArPSBsZWZ0OworCisJCWdpdF9td2luZG93X2Nsb3NlKCZ3KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9pbmRleGVyX2NvbW1pdChnaXRfaW5kZXhlciAqaWR4LCBnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzKQogewogCWdpdF9td2luZG93ICp3ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaSwgbG9uZ19vZmZzZXRzID0gMCwgbGVmdDsKIAlzdHJ1Y3QgZ2l0X3BhY2tfaWR4X2hlYWRlciBoZHI7CiAJZ2l0X2J1ZiBmaWxlbmFtZSA9IEdJVF9CVUZfSU5JVDsKIAlzdHJ1Y3QgZW50cnkgKmVudHJ5OwotCXZvaWQgKnBhY2tmaWxlX2hhc2g7Ci0JZ2l0X29pZCBmaWxlX2hhc2g7CisJZ2l0X29pZCB0cmFpbGVyX2hhc2gsIGZpbGVfaGFzaDsKIAlnaXRfaGFzaF9jdHggY3R4OwogCWdpdF9maWxlYnVmIGluZGV4X2ZpbGUgPSB7MH07CisJdm9pZCAqcGFja2ZpbGVfdHJhaWxlcjsKIAogCWlmIChnaXRfaGFzaF9jdHhfaW5pdCgmY3R4KSA8IDApCiAJCXJldHVybiAtMTsKIAogCS8qIFRlc3QgZm9yIHRoaXMgYmVmb3JlIHJlc29sdmVfZGVsdGFzKCksIGFzIGl0IHBsYXlzIHdpdGggaWR4LT5vZmYgKi8KLQlpZiAoaWR4LT5vZmYgPCBpZHgtPnBhY2stPm13Zi5zaXplIC0gR0lUX09JRF9SQVdTWikgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9JTkRFWEVSLCAiSW5kZXhpbmcgZXJyb3I6IHVuZXhwZWN0ZWQgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrIik7CisJaWYgKGlkeC0+b2ZmIDwgaWR4LT5wYWNrLT5td2Yuc2l6ZSAtIDIwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYRVIsICJ1bmV4cGVjdGVkIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgcGFjayIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKGlkeC0+ZGVsdGFzLmxlbmd0aCA+IDApCi0JCWlmIChyZXNvbHZlX2RlbHRhcyhpZHgsIHN0YXRzKSA8IDApCi0JCQlyZXR1cm4gLTE7CisJcGFja2ZpbGVfdHJhaWxlciA9IGdpdF9td2luZG93X29wZW4oJmlkeC0+cGFjay0+bXdmLCAmdywgaWR4LT5wYWNrLT5td2Yuc2l6ZSAtIEdJVF9PSURfUkFXU1osIEdJVF9PSURfUkFXU1osICZsZWZ0KTsKKwlpZiAocGFja2ZpbGVfdHJhaWxlciA9PSBOVUxMKSB7CisJCWdpdF9td2luZG93X2Nsb3NlKCZ3KTsKKwkJZ290byBvbl9lcnJvcjsKKwl9CisKKwkvKiBDb21wYXJlIHRoZSBwYWNrZmlsZSB0cmFpbGVyIGFzIGl0IHdhcyBzZW50IHRvIHVzIGFuZCB3aGF0IHdlIGNhbGN1bGF0ZWQgKi8KKwlnaXRfb2lkX2Zyb21yYXcoJmZpbGVfaGFzaCwgcGFja2ZpbGVfdHJhaWxlcik7CisJZ2l0X213aW5kb3dfY2xvc2UoJncpOworCisJZ2l0X2hhc2hfZmluYWwoJnRyYWlsZXJfaGFzaCwgJmlkeC0+dHJhaWxlcik7CisJaWYgKGdpdF9vaWRfY21wKCZmaWxlX2hhc2gsICZ0cmFpbGVyX2hhc2gpKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYRVIsICJwYWNrZmlsZSB0cmFpbGVyIG1pc21hdGNoIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBGcmVlemUgdGhlIG51bWJlciBvZiBkZWx0YXMgKi8KKwlzdGF0cy0+dG90YWxfZGVsdGFzID0gc3RhdHMtPnRvdGFsX29iamVjdHMgLSBzdGF0cy0+aW5kZXhlZF9vYmplY3RzOworCisJaWYgKHJlc29sdmVfZGVsdGFzKGlkeCwgc3RhdHMpIDwgMCkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKHN0YXRzLT5pbmRleGVkX29iamVjdHMgIT0gc3RhdHMtPnRvdGFsX29iamVjdHMpIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgIkluZGV4aW5nIGVycm9yOiBlYXJseSBFT0YiKTsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgImVhcmx5IEVPRiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKHN0YXRzLT5sb2NhbF9vYmplY3RzID4gMCkgeworCQlpZiAodXBkYXRlX2hlYWRlcl9hbmRfcmVoYXNoKGlkeCwgc3RhdHMpIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQlnaXRfaGFzaF9maW5hbCgmdHJhaWxlcl9oYXNoLCAmaWR4LT50cmFpbGVyKTsKKwkJaWYgKHBfbHNlZWsoaWR4LT5wYWNrX2ZpbGUuZmQsIC1HSVRfT0lEX1JBV1NaLCBTRUVLX0VORCkgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChwX3dyaXRlKGlkeC0+cGFja19maWxlLmZkLCAmdHJhaWxlcl9oYXNoLCBHSVRfT0lEX1JBV1NaKSA8IDApIHsKKwkJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIHVwZGF0ZSBwYWNrIHRyYWlsZXIiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwogCWdpdF92ZWN0b3Jfc29ydCgmaWR4LT5vYmplY3RzKTsKIAogCWdpdF9idWZfc2V0cygmZmlsZW5hbWUsIGlkeC0+cGFjay0+cGFja19uYW1lKTsKLQlnaXRfYnVmX3RydW5jYXRlKCZmaWxlbmFtZSwgZmlsZW5hbWUuc2l6ZSAtIHN0cmxlbigicGFjayIpKTsKKwlnaXRfYnVmX3Nob3J0ZW4oJmZpbGVuYW1lLCBzdHJsZW4oInBhY2siKSk7CiAJZ2l0X2J1Zl9wdXRzKCZmaWxlbmFtZSwgImlkeCIpOwogCWlmIChnaXRfYnVmX29vbSgmZmlsZW5hbWUpKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmaW5kZXhfZmlsZSwgZmlsZW5hbWUucHRyLCBHSVRfRklMRUJVRl9IQVNIX0NPTlRFTlRTKSA8IDApCisJaWYgKGdpdF9maWxlYnVmX29wZW4oJmluZGV4X2ZpbGUsIGZpbGVuYW1lLnB0ciwKKwkJR0lUX0ZJTEVCVUZfSEFTSF9DT05URU5UUywgaWR4LT5tb2RlKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKIAkvKiBXcml0ZSBvdXQgdGhlIGhlYWRlciAqLwpAQCAtNjU4LDMwICs5NTksMjIgQEAKIAkJZ2l0X2ZpbGVidWZfd3JpdGUoJmluZGV4X2ZpbGUsICZzcGxpdCwgc2l6ZW9mKHVpbnQzMl90KSAqIDIpOwogCX0KIAotCS8qIFdyaXRlIG91dCB0aGUgcGFja2ZpbGUgdHJhaWxlciAqLwotCXBhY2tmaWxlX2hhc2ggPSBnaXRfbXdpbmRvd19vcGVuKCZpZHgtPnBhY2stPm13ZiwgJncsIGlkeC0+cGFjay0+bXdmLnNpemUgLSBHSVRfT0lEX1JBV1NaLCBHSVRfT0lEX1JBV1NaLCAmbGVmdCk7Ci0JaWYgKHBhY2tmaWxlX2hhc2ggPT0gTlVMTCkgewotCQlnaXRfbXdpbmRvd19jbG9zZSgmdyk7Ci0JCWdvdG8gb25fZXJyb3I7Ci0JfQotCi0JbWVtY3B5KCZmaWxlX2hhc2gsIHBhY2tmaWxlX2hhc2gsIEdJVF9PSURfUkFXU1opOwotCWdpdF9td2luZG93X2Nsb3NlKCZ3KTsKLQotCWdpdF9maWxlYnVmX3dyaXRlKCZpbmRleF9maWxlLCAmZmlsZV9oYXNoLCBzaXplb2YoZ2l0X29pZCkpOwotCi0JLyogV3JpdGUgb3V0IHRoZSBwYWNrZmlsZSB0cmFpbGVyIHRvIHRoZSBpZHggZmlsZSBhcyB3ZWxsICovCi0JaWYgKGdpdF9maWxlYnVmX2hhc2goJmZpbGVfaGFzaCwgJmluZGV4X2ZpbGUpIDwgMCkKKwkvKiBXcml0ZSBvdXQgdGhlIHBhY2tmaWxlIHRyYWlsZXIgdG8gdGhlIGluZGV4ICovCisJaWYgKGdpdF9maWxlYnVmX3dyaXRlKCZpbmRleF9maWxlLCAmdHJhaWxlcl9oYXNoLCBHSVRfT0lEX1JBV1NaKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKLQlnaXRfZmlsZWJ1Zl93cml0ZSgmaW5kZXhfZmlsZSwgJmZpbGVfaGFzaCwgc2l6ZW9mKGdpdF9vaWQpKTsKKwkvKiBXcml0ZSBvdXQgdGhlIGhhc2ggb2YgdGhlIGlkeCAqLworCWlmIChnaXRfZmlsZWJ1Zl9oYXNoKCZ0cmFpbGVyX2hhc2gsICZpbmRleF9maWxlKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKKwlnaXRfZmlsZWJ1Zl93cml0ZSgmaW5kZXhfZmlsZSwgJnRyYWlsZXJfaGFzaCwgc2l6ZW9mKGdpdF9vaWQpKTsKIAogCS8qIEZpZ3VyZSBvdXQgd2hhdCB0aGUgZmluYWwgbmFtZSBzaG91bGQgYmUgKi8KLQlpZiAoaW5kZXhfcGF0aF9zdHJlYW0oJmZpbGVuYW1lLCBpZHgsICIuaWR4IikgPCAwKQorCWlmIChpbmRleF9wYXRoKCZmaWxlbmFtZSwgaWR4LCAiLmlkeCIpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAogCS8qIENvbW1pdCBmaWxlICovCi0JaWYgKGdpdF9maWxlYnVmX2NvbW1pdF9hdCgmaW5kZXhfZmlsZSwgZmlsZW5hbWUucHRyLCBHSVRfUEFDS19GSUxFX01PREUpIDwgMCkKKwlpZiAoZ2l0X2ZpbGVidWZfY29tbWl0X2F0KCZpbmRleF9maWxlLCBmaWxlbmFtZS5wdHIpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAogCWdpdF9td2luZG93X2ZyZWVfYWxsKCZpZHgtPnBhY2stPm13Zik7CkBAIC02ODksMTAgKzk4MiwxMCBAQAogCXBfY2xvc2UoaWR4LT5wYWNrLT5td2YuZmQpOwogCWlkeC0+cGFjay0+bXdmLmZkID0gLTE7CiAKLQlpZiAoaW5kZXhfcGF0aF9zdHJlYW0oJmZpbGVuYW1lLCBpZHgsICIucGFjayIpIDwgMCkKKwlpZiAoaW5kZXhfcGF0aCgmZmlsZW5hbWUsIGlkeCwgIi5wYWNrIikgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwogCS8qIEFuZCBkb24ndCBmb3JnZXQgdG8gcmVuYW1lIHRoZSBwYWNrZmlsZSB0byBpdHMgbmV3IHBsYWNlLiAqLwotCWlmIChnaXRfZmlsZWJ1Zl9jb21taXRfYXQoJmlkeC0+cGFja19maWxlLCBmaWxlbmFtZS5wdHIsIEdJVF9QQUNLX0ZJTEVfTU9ERSkgPCAwKQorCWlmIChnaXRfZmlsZWJ1Zl9jb21taXRfYXQoJmlkeC0+cGFja19maWxlLCBmaWxlbmFtZS5wdHIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJZ2l0X2J1Zl9mcmVlKCZmaWxlbmFtZSk7CkBAIC03MDYsNyArOTk5LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgZ2l0X2luZGV4ZXJfc3RyZWFtX2ZyZWUoZ2l0X2luZGV4ZXJfc3RyZWFtICppZHgpCit2b2lkIGdpdF9pbmRleGVyX2ZyZWUoZ2l0X2luZGV4ZXIgKmlkeCkKIHsKIAlraGl0ZXJfdCBrOwogCXVuc2lnbmVkIGludCBpOwpkaWZmIC0tZ2l0IGEvc3JjL2l0ZXJhdG9yLmMgYi9zcmMvaXRlcmF0b3IuYwppbmRleCA1OTE3ZjYzLi44NjQ2Mzk5IDEwMDY0NAotLS0gYS9zcmMvaXRlcmF0b3IuYworKysgYi9zcmMvaXRlcmF0b3IuYwpAQCAtODkzLDYgKzg5Myw3IEBACiAJZ2l0X2luZGV4X2VudHJ5IGVudHJ5OwogCWdpdF9idWYgcGF0aDsKIAlzaXplX3Qgcm9vdF9sZW47CisJdWludDMyX3QgZGlybG9hZF9mbGFnczsKIAlpbnQgZGVwdGg7CiAKIAlpbnQgKCplbnRlcl9kaXJfY2IpKGZzX2l0ZXJhdG9yICpzZWxmKTsKQEAgLTk4NiwxMiArOTg3LDI1IEBACiAJR0lURVJSX0NIRUNLX0FMTE9DKGZmKTsKIAogCWVycm9yID0gZ2l0X3BhdGhfZGlybG9hZF93aXRoX3N0YXQoCi0JCWZpLT5wYXRoLnB0ciwgZmktPnJvb3RfbGVuLCBpdGVyYXRvcl9faWdub3JlX2Nhc2UoZmkpLAorCQlmaS0+cGF0aC5wdHIsIGZpLT5yb290X2xlbiwgZmktPmRpcmxvYWRfZmxhZ3MsCiAJCWZpLT5iYXNlLnN0YXJ0LCBmaS0+YmFzZS5lbmQsICZmZi0+ZW50cmllcyk7CiAKIAlpZiAoZXJyb3IgPCAwKSB7CisJCWdpdF9lcnJvciBsYXN0X2Vycm9yID0gezB9OworCisJCWdpdGVycl9kZXRhY2goJmxhc3RfZXJyb3IpOworCisJCS8qIHRoZXNlIGNhbGxiYWNrcyBtYXkgY2xlYXIgdGhlIGVycm9yIG1lc3NhZ2UgKi8KIAkJZnNfaXRlcmF0b3JfX2ZyZWVfZnJhbWUoZmYpOwogCQlmc19pdGVyYXRvcl9fYWR2YW5jZV9vdmVyKE5VTEwsIChnaXRfaXRlcmF0b3IgKilmaSk7CisJCS8qIG5leHQgdGltZSByZXR1cm4gdmFsdWUgd2Ugc2tpcHBlZCB0byAqLworCQlmaS0+YmFzZS5mbGFncyAmPSB+R0lUX0lURVJBVE9SX0ZJUlNUX0FDQ0VTUzsKKworCQlpZiAobGFzdF9lcnJvci5tZXNzYWdlKSB7CisJCQlnaXRlcnJfc2V0X3N0cihsYXN0X2Vycm9yLmtsYXNzLCBsYXN0X2Vycm9yLm1lc3NhZ2UpOworCQkJZnJlZShsYXN0X2Vycm9yLm1lc3NhZ2UpOworCQl9CisKIAkJcmV0dXJuIGVycm9yOwogCX0KIApAQCAtMTE3NCw3ICsxMTg4LDcgQEAKIAkJcmV0dXJuIEdJVF9JVEVST1ZFUjsKIAogCWZpLT5lbnRyeS5wYXRoID0gcHMtPnBhdGg7Ci0JZ2l0X2luZGV4X2VudHJ5X19pbml0X2Zyb21fc3RhdCgmZmktPmVudHJ5LCAmcHMtPnN0KTsKKwlnaXRfaW5kZXhfZW50cnlfX2luaXRfZnJvbV9zdGF0KCZmaS0+ZW50cnksICZwcy0+c3QsIHRydWUpOwogCiAJLyogbmVlZCBkaWZmZXJlbnQgbW9kZSBoZXJlIHRvIGtlZXAgZGlyZWN0b3JpZXMgZHVyaW5nIGl0ZXJhdGlvbiAqLwogCWZpLT5lbnRyeS5tb2RlID0gZ2l0X2Z1dGlsc19jYW5vbmljYWxfbW9kZShwcy0+c3Quc3RfbW9kZSk7CkBAIC0xMjA3LDYgKzEyMjEsMTEgQEAKIAl9CiAJZmktPnJvb3RfbGVuID0gZmktPnBhdGguc2l6ZTsKIAorCWZpLT5kaXJsb2FkX2ZsYWdzID0KKwkJKGl0ZXJhdG9yX19pZ25vcmVfY2FzZShmaSkgPyBHSVRfUEFUSF9ESVJfSUdOT1JFX0NBU0UgOiAwKSB8CisJCShpdGVyYXRvcl9fZmxhZyhmaSwgUFJFQ09NUE9TRV9VTklDT0RFKSA/CisJCQlHSVRfUEFUSF9ESVJfUFJFQ09NUE9TRV9VTklDT0RFIDogMCk7CisKIAlpZiAoKGVycm9yID0gZnNfaXRlcmF0b3JfX2V4cGFuZF9kaXIoZmkpKSA8IDApIHsKIAkJaWYgKGVycm9yID09IEdJVF9FTk9URk9VTkQgfHwgZXJyb3IgPT0gR0lUX0lURVJPVkVSKSB7CiAJCQlnaXRlcnJfY2xlYXIoKTsKQEAgLTEzMjksNyArMTM0OCw3IEBACiAJY29uc3QgY2hhciAqc3RhcnQsCiAJY29uc3QgY2hhciAqZW5kKQogewotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIHByZWNvbXBvc2UgPSAwOwogCXdvcmtkaXJfaXRlcmF0b3IgKndpOwogCiAJaWYgKCFyZXBvX3dvcmtkaXIpIHsKQEAgLTEzNTAsMTIgKzEzNjksMTggQEAKIAl3aS0+ZmkudXBkYXRlX2VudHJ5X2NiID0gd29ya2Rpcl9pdGVyYXRvcl9fdXBkYXRlX2VudHJ5OwogCiAJaWYgKChlcnJvciA9IGl0ZXJhdG9yX191cGRhdGVfaWdub3JlX2Nhc2UoKGdpdF9pdGVyYXRvciAqKXdpLCBmbGFncykpIDwgMCB8fAotCQkoZXJyb3IgPSBnaXRfaWdub3JlX19mb3JfcGF0aChyZXBvLCAiIiwgJndpLT5pZ25vcmVzKSkgPCAwKQorCQkoZXJyb3IgPSBnaXRfaWdub3JlX19mb3JfcGF0aChyZXBvLCAiLmdpdGlnbm9yZSIsICZ3aS0+aWdub3JlcykpIDwgMCkKIAl7CiAJCWdpdF9pdGVyYXRvcl9mcmVlKChnaXRfaXRlcmF0b3IgKil3aSk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwkvKiB0cnkgdG8gbG9vayB1cCBwcmVjb21wb3NlIGFuZCBzZXQgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChnaXRfcmVwb3NpdG9yeV9fY3ZhcigmcHJlY29tcG9zZSwgcmVwbywgR0lUX0NWQVJfUFJFQ09NUE9TRSkgPCAwKQorCQlnaXRlcnJfY2xlYXIoKTsKKwllbHNlIGlmIChwcmVjb21wb3NlKQorCQl3aS0+ZmkuYmFzZS5mbGFncyB8PSBHSVRfSVRFUkFUT1JfUFJFQ09NUE9TRV9VTklDT0RFOworCiAJcmV0dXJuIGZzX2l0ZXJhdG9yX19pbml0aWFsaXplKG91dCwgJndpLT5maSwgcmVwb193b3JrZGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2l0ZXJhdG9yLmggYi9zcmMvaXRlcmF0b3IuaAppbmRleCBlYTg4ZmE2Li43NTFlMTM5IDEwMDY0NAotLS0gYS9zcmMvaXRlcmF0b3IuaAorKysgYi9zcmMvaXRlcmF0b3IuaApAQCAtMjQsMTMgKzI0LDE1IEBACiAKIHR5cGVkZWYgZW51bSB7CiAJLyoqIGlnbm9yZSBjYXNlIGZvciBlbnRyeSBzb3J0IG9yZGVyICovCi0JR0lUX0lURVJBVE9SX0lHTk9SRV9DQVNFID0gKDEgPDwgMCksCisJR0lUX0lURVJBVE9SX0lHTk9SRV9DQVNFID0gKDF1IDw8IDApLAogCS8qKiBmb3JjZSBjYXNlIHNlbnNpdGl2aXR5IGZvciBlbnRyeSBzb3J0IG9yZGVyICovCi0JR0lUX0lURVJBVE9SX0RPTlRfSUdOT1JFX0NBU0UgPSAoMSA8PCAxKSwKKwlHSVRfSVRFUkFUT1JfRE9OVF9JR05PUkVfQ0FTRSA9ICgxdSA8PCAxKSwKIAkvKiogcmV0dXJuIHRyZWUgaXRlbXMgaW4gYWRkaXRpb24gdG8gYmxvYiBpdGVtcyAqLwotCUdJVF9JVEVSQVRPUl9JTkNMVURFX1RSRUVTICAgID0gKDEgPDwgMiksCisJR0lUX0lURVJBVE9SX0lOQ0xVREVfVFJFRVMgICAgPSAoMXUgPDwgMiksCiAJLyoqIGRvbid0IGZsYXR0ZW4gdHJlZXMsIHJlcXVpcmluZyBhZHZhbmNlX2ludG8gKGltcGxpZXMgSU5DTFVERV9UUkVFUykgKi8KLQlHSVRfSVRFUkFUT1JfRE9OVF9BVVRPRVhQQU5EICA9ICgxIDw8IDMpLAorCUdJVF9JVEVSQVRPUl9ET05UX0FVVE9FWFBBTkQgID0gKDF1IDw8IDMpLAorCS8qKiBjb252ZXJ0IHByZWNvbXBvc2VkIHVuaWNvZGUgdG8gZGVjb21wb3NlZCB1bmljb2RlICovCisJR0lUX0lURVJBVE9SX1BSRUNPTVBPU0VfVU5JQ09ERSA9ICgxdSA8PCA0KSwKIH0gZ2l0X2l0ZXJhdG9yX2ZsYWdfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvc3JjL21lcmdlLmMgYi9zcmMvbWVyZ2UuYwppbmRleCA4MmQyZTZmLi4xMTU4Njc5IDEwMDY0NAotLS0gYS9zcmMvbWVyZ2UuYworKysgYi9zcmMvbWVyZ2UuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAvKiBNZXJnZSBiYXNlIGNvbXB1dGF0aW9uICovCiAKLWludCBnaXRfbWVyZ2VfYmFzZV9tYW55KGdpdF9vaWQgKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGdpdF9vaWQgaW5wdXRfYXJyYXlbXSwgc2l6ZV90IGxlbmd0aCkKK2ludCBnaXRfbWVyZ2VfYmFzZV9tYW55KGdpdF9vaWQgKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIHNpemVfdCBsZW5ndGgsIGNvbnN0IGdpdF9vaWQgaW5wdXRfYXJyYXlbXSkKIHsKIAlnaXRfcmV2d2FsayAqd2FsazsKIAlnaXRfdmVjdG9yIGxpc3Q7CkBAIC0yODUsNyArMjg1LDcgQEAKIAkJaWYgKChlcnJvciA9IGdpdF9vaWRfZnJvbXN0cigmb2lkLCBsaW5lKSkgPCAwKQogCQkJZ290byBjbGVhbnVwOwogCi0JCWlmIChjYigmb2lkLCBwYXlsb2FkKSA8IDApIHsKKwkJaWYgKGNiKCZvaWQsIHBheWxvYWQpICE9IDApIHsKIAkJCWVycm9yID0gR0lUX0VVU0VSOwogCQkJZ290byBjbGVhbnVwOwogCQl9CkBAIC0xNjE1LDE3ICsxNjE1LDE0IEBACiB7CiAJZ2l0X2ZpbGVidWYgZmlsZSA9IEdJVF9GSUxFQlVGX0lOSVQ7CiAJZ2l0X2J1ZiBmaWxlX3BhdGggPSBHSVRfQlVGX0lOSVQ7Ci0JY2hhciBvcmlnX29pZF9zdHJbR0lUX09JRF9IRVhTWiArIDFdOwogCWludCBlcnJvciA9IDA7CiAKIAlhc3NlcnQocmVwbyAmJiBvdXJfaGVhZCk7CiAKLQlnaXRfb2lkX3Rvc3RyKG9yaWdfb2lkX3N0ciwgR0lUX09JRF9IRVhTWisxLCAmb3VyX2hlYWQtPm9pZCk7Ci0KIAlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9PUklHX0hFQURfRklMRSkpID09IDAgJiYKLQkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UpKSA9PSAwICYmCi0JCShlcnJvciA9IGdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIiVzXG4iLCBvcmlnX29pZF9zdHIpKSA9PSAwKQotCQllcnJvciA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSwgMDY2Nik7CisJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfTUVSR0VfRklMRV9NT0RFKSkgPT0gMCAmJgorCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICIlc1xuIiwgb3VyX2hlYWQtPm9pZF9zdHIpKSA9PSAwKQorCQllcnJvciA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSk7CiAKIAlpZiAoZXJyb3IgPCAwKQogCQlnaXRfZmlsZWJ1Zl9jbGVhbnVwKCZmaWxlKTsKQEAgLTE2NDIsMjQgKzE2MzksMjEgQEAKIHsKIAlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKIAlnaXRfYnVmIGZpbGVfcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQljaGFyIG1lcmdlX29pZF9zdHJbR0lUX09JRF9IRVhTWiArIDFdOwogCXNpemVfdCBpOwogCWludCBlcnJvciA9IDA7CiAKIAlhc3NlcnQocmVwbyAmJiBoZWFkcyk7CiAKIAlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9NRVJHRV9IRUFEX0ZJTEUpKSA8IDAgfHwKLQkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UpKSA8IDApCisJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfTUVSR0VfRklMRV9NT0RFKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaGVhZHNfbGVuOyBpKyspIHsKLQkJZ2l0X29pZF90b3N0cihtZXJnZV9vaWRfc3RyLCBHSVRfT0lEX0hFWFNaKzEsICZoZWFkc1tpXS0+b2lkKTsKLQotCQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsIG1lcmdlX29pZF9zdHIpKSA8IDApCisJCWlmICgoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICIlc1xuIiwgaGVhZHNbaV0tPm9pZF9zdHIpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUsIDA2NjYpOworCWVycm9yID0gZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlKTsKIAogY2xlYW51cDoKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTY4MiwxMCArMTY3NiwyMSBAQAogCWFzc2VydChyZXBvKTsKIAogCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX01FUkdFX01PREVfRklMRSkpIDwgMCB8fAotCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCBmaWxlX3BhdGgucHRyLCBHSVRfRklMRUJVRl9GT1JDRSkpIDwgMCkKKwkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UsIEdJVF9NRVJHRV9GSUxFX01PREUpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCWVycm9yID0gZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlLCAwNjY2KTsKKwkvKgorCSAqIG5vLWZmIGlzIHRoZSBvbmx5IHRoaW5nIGFsbG93ZWQgaGVyZSBhdCBwcmVzZW50LiAgT25lIHdvdWxkCisJICogcHJlc3VtZSB0aGV5IHdvdWxkIGJlIHNwYWNlLWRlbGltaXRlZCB3aGVuIHRoZXJlIGFyZSBtb3JlLCBidXQKKwkgKiB0aGlzIG5lZWRzIHRvIGJlIHJldmlzaXRlZC4KKwkgKi8KKworCWlmIChmbGFncyAmIEdJVF9NRVJHRV9OT19GQVNURk9SV0FSRCkgeworCQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfd3JpdGUoJmZpbGUsICJuby1mZiIsIDUpKSA8IDApCisJCQlnb3RvIGNsZWFudXA7CisJfQorCisJZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUpOwogCiBjbGVhbnVwOgogCWlmIChlcnJvciA8IDApCkBAIC0xODkwLDcgKzE4OTUsNiBAQAogewogCWdpdF9maWxlYnVmIGZpbGUgPSBHSVRfRklMRUJVRl9JTklUOwogCWdpdF9idWYgZmlsZV9wYXRoID0gR0lUX0JVRl9JTklUOwotCWNoYXIgb2lkX3N0cltHSVRfT0lEX0hFWFNaICsgMV07CiAJc3RydWN0IG1lcmdlX21zZ19lbnRyeSAqZW50cmllczsKIAlnaXRfdmVjdG9yIG1hdGNoaW5nID0gR0lUX1ZFQ1RPUl9JTklUOwogCXNpemVfdCBpOwpAQCAtMTkwMiwxNCArMTkwNiwxNiBAQAogCWVudHJpZXMgPSBnaXRfX2NhbGxvYyhoZWFkc19sZW4sIHNpemVvZihzdHJ1Y3QgbWVyZ2VfbXNnX2VudHJ5KSk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKGVudHJpZXMpOyAKIAotCWlmIChnaXRfdmVjdG9yX2luaXQoJm1hdGNoaW5nLCBoZWFkc19sZW4sIE5VTEwpIDwgMCkKKwlpZiAoZ2l0X3ZlY3Rvcl9pbml0KCZtYXRjaGluZywgaGVhZHNfbGVuLCBOVUxMKSA8IDApIHsKKwkJZ2l0X19mcmVlKGVudHJpZXMpOwogCQlyZXR1cm4gLTE7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IGhlYWRzX2xlbjsgaSsrKQogCQllbnRyaWVzW2ldLm1lcmdlX2hlYWQgPSBoZWFkc1tpXTsKIAogCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX01FUkdFX01TR19GSUxFKSkgPCAwIHx8Ci0JCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFKSkgPCAwIHx8CisJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfTUVSR0VfRklMRV9NT0RFKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9maWxlYnVmX3dyaXRlKCZmaWxlLCAiTWVyZ2UgIiwgNikpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0xOTI4LDEwICsxOTM0LDkgQEAKIAkJaWYgKCFtc2dfZW50cnlfaXNfb2lkKCZlbnRyaWVzW2ldKSkKIAkJCWJyZWFrOwogCi0JCWdpdF9vaWRfZm10KG9pZF9zdHIsICZlbnRyaWVzW2ldLm1lcmdlX2hlYWQtPm9pZCk7Ci0JCW9pZF9zdHJbR0lUX09JRF9IRVhTWl0gPSAnXDAnOwotCi0JCWlmICgoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICIlc2NvbW1pdCAnJXMnIiwgKGkgPiAwKSA/ICI7ICIgOiAiIiwgb2lkX3N0cikpIDwgMCkKKwkJaWYgKChlcnJvciA9IGdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwKKwkJCSIlc2NvbW1pdCAnJXMnIiwgKGkgPiAwKSA/ICI7ICIgOiAiIiwKKwkJCWVudHJpZXNbaV0ubWVyZ2VfaGVhZC0+b2lkX3N0cikpIDwgMCkKIAkJCWdvdG8gY2xlYW51cDsKIAogCQllbnRyaWVzW2ldLndyaXR0ZW4gPSAxOwpAQCAtMTk3OCwxNSArMTk4MywxMyBAQAogCQlpZiAobWVyZ2VfbXNnX2VudHJ5X3dyaXR0ZW4oJmVudHJpZXNbaV0pKQogCQkJY29udGludWU7CiAKLQkJZ2l0X29pZF9mbXQob2lkX3N0ciwgJmVudHJpZXNbaV0ubWVyZ2VfaGVhZC0+b2lkKTsKLQkJb2lkX3N0cltHSVRfT0lEX0hFWFNaXSA9ICdcMCc7Ci0KLQkJaWYgKChlcnJvciA9IGdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIjsgY29tbWl0ICclcyciLCBvaWRfc3RyKSkgPCAwKQorCQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiOyBjb21taXQgJyVzJyIsCisJCQllbnRyaWVzW2ldLm1lcmdlX2hlYWQtPm9pZF9zdHIpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCiAJaWYgKChlcnJvciA9IGdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIlxuIikpIDwgMCB8fAotCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUsIDA2NjYpKSA8IDApCisJCShlcnJvciA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCiBjbGVhbnVwOgpAQCAtMjAwMSw2ICsyMDA0LDQ3NyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyogTWVyZ2UgYnJhbmNoZXMgKi8KKworc3RhdGljIGludCBtZXJnZV9hbmNlc3Rvcl9oZWFkKAorCWdpdF9tZXJnZV9oZWFkICoqYW5jZXN0b3JfaGVhZCwKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqb3VyX2hlYWQsCisJY29uc3QgZ2l0X21lcmdlX2hlYWQgKip0aGVpcl9oZWFkcywKKwlzaXplX3QgdGhlaXJfaGVhZHNfbGVuKQoreworCWdpdF9vaWQgKm9pZHMsIGFuY2VzdG9yX29pZDsKKwlzaXplX3QgaTsKKwlpbnQgZXJyb3IgPSAwOworCisJYXNzZXJ0KHJlcG8gJiYgb3VyX2hlYWQgJiYgdGhlaXJfaGVhZHMpOworCisJb2lkcyA9IGdpdF9fY2FsbG9jKHRoZWlyX2hlYWRzX2xlbiArIDEsIHNpemVvZihnaXRfb2lkKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKG9pZHMpOworCisJZ2l0X29pZF9jcHkoJm9pZHNbMF0sIGdpdF9jb21taXRfaWQob3VyX2hlYWQtPmNvbW1pdCkpOworCisJZm9yIChpID0gMDsgaSA8IHRoZWlyX2hlYWRzX2xlbjsgaSsrKQorCQlnaXRfb2lkX2NweSgmb2lkc1tpICsgMV0sICZ0aGVpcl9oZWFkc1tpXS0+b2lkKTsKKworCWlmICgoZXJyb3IgPSBnaXRfbWVyZ2VfYmFzZV9tYW55KCZhbmNlc3Rvcl9vaWQsIHJlcG8sIHRoZWlyX2hlYWRzX2xlbiArIDEsIG9pZHMpKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKKwllcnJvciA9IGdpdF9tZXJnZV9oZWFkX2Zyb21fb2lkKGFuY2VzdG9yX2hlYWQsIHJlcG8sICZhbmNlc3Rvcl9vaWQpOworCitvbl9lcnJvcjoKKwlnaXRfX2ZyZWUob2lkcyk7CisJcmV0dXJuIGVycm9yOworfQorCitHSVRfSU5MSU5FKGJvb2wpIG1lcmdlX2NoZWNrX3VwdG9kYXRlKAorCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdCwKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqYW5jZXN0b3JfaGVhZCwKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqdGhlaXJfaGVhZCkKK3sKKwlpZiAoZ2l0X29pZF9jbXAoJmFuY2VzdG9yX2hlYWQtPm9pZCwgJnRoZWlyX2hlYWQtPm9pZCkgPT0gMCkgeworCQlyZXN1bHQtPmlzX3VwdG9kYXRlID0gMTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitHSVRfSU5MSU5FKGJvb2wpIG1lcmdlX2NoZWNrX2Zhc3Rmb3J3YXJkKAorCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdCwKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqYW5jZXN0b3JfaGVhZCwKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqb3VyX2hlYWQsCisJY29uc3QgZ2l0X21lcmdlX2hlYWQgKnRoZWlyX2hlYWQsCisJdW5zaWduZWQgaW50IGZsYWdzKQoreworCWlmICgoZmxhZ3MgJiBHSVRfTUVSR0VfTk9fRkFTVEZPUldBUkQpID09IDAgJiYKKwkJZ2l0X29pZF9jbXAoJmFuY2VzdG9yX2hlYWQtPm9pZCwgJm91cl9oZWFkLT5vaWQpID09IDApIHsKKwkJcmVzdWx0LT5pc19mYXN0Zm9yd2FyZCA9IDE7CisJCWdpdF9vaWRfY3B5KCZyZXN1bHQtPmZhc3Rmb3J3YXJkX29pZCwgJnRoZWlyX2hlYWQtPm9pZCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBjaGFyICptZXJnZV90aGVpcl9sYWJlbChjb25zdCBjaGFyICpicmFuY2huYW1lKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCisJaWYgKChzbGFzaCA9IHN0cnJjaHIoYnJhbmNobmFtZSwgJy8nKSkgPT0gTlVMTCkKKwkJcmV0dXJuIGJyYW5jaG5hbWU7CisKKwlpZiAoKihzbGFzaCsxKSA9PSAnXDAnKQorCQlyZXR1cm4gInRoZWlycyI7CisKKwlyZXR1cm4gc2xhc2grMTsKK30KKworc3RhdGljIGludCBtZXJnZV9ub3JtYWxpemVfb3B0cygKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwlnaXRfbWVyZ2Vfb3B0cyAqb3B0cywKKwljb25zdCBnaXRfbWVyZ2Vfb3B0cyAqZ2l2ZW4sCisJc2l6ZV90IHRoZWlyX2hlYWRzX2xlbiwKKwljb25zdCBnaXRfbWVyZ2VfaGVhZCAqKnRoZWlyX2hlYWRzKQoreworCWludCBlcnJvciA9IDA7CisJdW5zaWduZWQgaW50IGRlZmF1bHRfY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEUgfAorCQlHSVRfQ0hFQ0tPVVRfQUxMT1dfQ09ORkxJQ1RTOworCisJR0lUX1VOVVNFRChyZXBvKTsKKworCWlmIChnaXZlbiAhPSBOVUxMKQorCQltZW1jcHkob3B0cywgZ2l2ZW4sIHNpemVvZihnaXRfbWVyZ2Vfb3B0cykpOworCWVsc2UgeworCQlnaXRfbWVyZ2Vfb3B0cyBkZWZhdWx0X29wdHMgPSBHSVRfTUVSR0VfT1BUU19JTklUOworCQltZW1jcHkob3B0cywgJmRlZmF1bHRfb3B0cywgc2l6ZW9mKGdpdF9tZXJnZV9vcHRzKSk7CisJfQorCisJaWYgKCFvcHRzLT5jaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5KQorCQlvcHRzLT5jaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gZGVmYXVsdF9jaGVja291dF9zdHJhdGVneTsKKworCWlmICghb3B0cy0+Y2hlY2tvdXRfb3B0cy5vdXJfbGFiZWwpCisJCW9wdHMtPmNoZWNrb3V0X29wdHMub3VyX2xhYmVsID0gIkhFQUQiOworCisJaWYgKCFvcHRzLT5jaGVja291dF9vcHRzLnRoZWlyX2xhYmVsKSB7CisJCWlmICh0aGVpcl9oZWFkc19sZW4gPT0gMSAmJiB0aGVpcl9oZWFkc1swXS0+cmVmX25hbWUpCisJCQlvcHRzLT5jaGVja291dF9vcHRzLnRoZWlyX2xhYmVsID0gbWVyZ2VfdGhlaXJfbGFiZWwodGhlaXJfaGVhZHNbMF0tPnJlZl9uYW1lKTsKKwkJZWxzZSBpZiAodGhlaXJfaGVhZHNfbGVuID09IDEpCisJCQlvcHRzLT5jaGVja291dF9vcHRzLnRoZWlyX2xhYmVsID0gdGhlaXJfaGVhZHNbMF0tPm9pZF9zdHI7CisJCWVsc2UKKwkJCW9wdHMtPmNoZWNrb3V0X29wdHMudGhlaXJfbGFiZWwgPSAidGhlaXJzIjsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfYWZmZWN0ZWRfcGF0aHMoZ2l0X3ZlY3RvciAqcGF0aHMsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfaW5kZXggKmluZGV4X25ldykKK3sKKwlnaXRfdHJlZSAqaGVhZF90cmVlID0gTlVMTDsKKwlnaXRfaXRlcmF0b3IgKml0ZXJfaGVhZCA9IE5VTEwsICppdGVyX25ldyA9IE5VTEw7CisJZ2l0X2RpZmYgKm1lcmdlZF9saXN0ID0gTlVMTDsKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOworCXNpemVfdCBpOworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZTsKKwljaGFyICpwYXRoOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaGVhZF90cmVlKCZoZWFkX3RyZWUsIHJlcG8pKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2l0ZXJhdG9yX2Zvcl90cmVlKCZpdGVyX2hlYWQsIGhlYWRfdHJlZSwgR0lUX0lURVJBVE9SX0RPTlRfSUdOT1JFX0NBU0UsIE5VTEwsIE5VTEwpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2l0ZXJhdG9yX2Zvcl9pbmRleCgmaXRlcl9uZXcsIGluZGV4X25ldywgR0lUX0lURVJBVE9SX0RPTlRfSUdOT1JFX0NBU0UsIE5VTEwsIE5VTEwpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2RpZmZfX2Zyb21faXRlcmF0b3JzKCZtZXJnZWRfbGlzdCwgcmVwbywgaXRlcl9oZWFkLCBpdGVyX25ldywgJm9wdHMpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCWdpdF92ZWN0b3JfZm9yZWFjaCgmbWVyZ2VkX2xpc3QtPmRlbHRhcywgaSwgZGVsdGEpIHsKKwkJcGF0aCA9IGdpdF9fc3RyZHVwKGRlbHRhLT5uZXdfZmlsZS5wYXRoKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKHBhdGgpOworCisJCWlmICgoZXJyb3IgPSBnaXRfdmVjdG9yX2luc2VydChwYXRocywgcGF0aCkpIDwgMCkKKwkJCWdvdG8gb25fZXJyb3I7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGdpdF9pbmRleF9lbnRyeWNvdW50KGluZGV4X25ldyk7IGkrKykgeworCQllID0gZ2l0X2luZGV4X2dldF9ieWluZGV4KGluZGV4X25ldywgaSk7CisKKwkJaWYgKGdpdF9pbmRleF9lbnRyeV9zdGFnZShlKSAhPSAwICYmCisJCQkoZ2l0X3ZlY3Rvcl9sYXN0KHBhdGhzKSA9PSBOVUxMIHx8CisJCQlzdHJjbXAoZ2l0X3ZlY3Rvcl9sYXN0KHBhdGhzKSwgZS0+cGF0aCkgIT0gMCkpIHsKKworCQkJcGF0aCA9IGdpdF9fc3RyZHVwKGUtPnBhdGgpOworCQkJR0lURVJSX0NIRUNLX0FMTE9DKHBhdGgpOworCisJCQlpZiAoKGVycm9yID0gZ2l0X3ZlY3Rvcl9pbnNlcnQocGF0aHMsIHBhdGgpKSA8IDApCisJCQkJZ290byBvbl9lcnJvcjsKKwkJfQorCX0KKworCWdvdG8gZG9uZTsKKworb25fZXJyb3I6CisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKHBhdGhzLCBpLCBwYXRoKQorCQlnaXRfX2ZyZWUocGF0aCk7CisKKwlnaXRfdmVjdG9yX2NsZWFyKHBhdGhzKTsKKworZG9uZToKKwlnaXRfdHJlZV9mcmVlKGhlYWRfdHJlZSk7CisJZ2l0X2l0ZXJhdG9yX2ZyZWUoaXRlcl9oZWFkKTsKKwlnaXRfaXRlcmF0b3JfZnJlZShpdGVyX25ldyk7CisJZ2l0X2RpZmZfZnJlZShtZXJnZWRfbGlzdCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfY2hlY2tfaW5kZXgoc2l6ZV90ICpjb25mbGljdHMsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfaW5kZXggKmluZGV4X25ldywgZ2l0X3ZlY3RvciAqbWVyZ2VkX3BhdGhzKQoreworCWdpdF90cmVlICpoZWFkX3RyZWUgPSBOVUxMOworCWdpdF9pbmRleCAqaW5kZXhfcmVwbyA9IE5VTEw7CisJZ2l0X2l0ZXJhdG9yICppdGVyX3JlcG8gPSBOVUxMLCAqaXRlcl9uZXcgPSBOVUxMOworCWdpdF9kaWZmICpzdGFnZWRfZGlmZl9saXN0ID0gTlVMTCwgKmluZGV4X2RpZmZfbGlzdCA9IE5VTEw7CisJZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOworCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfdmVjdG9yIHN0YWdlZF9wYXRocyA9IEdJVF9WRUNUT1JfSU5JVDsKKwlzaXplX3QgaTsKKwlpbnQgZXJyb3IgPSAwOworCisJR0lUX1VOVVNFRChtZXJnZWRfcGF0aHMpOworCisJKmNvbmZsaWN0cyA9IDA7CisKKwkvKiBObyBzdGFnZWQgY2hhbmdlcyBtYXkgZXhpc3QgdW5sZXNzIHRoZSBjaGFuZ2Ugc3RhZ2VkIGlzIGlkZW50aWNhbCB0bworCSAqIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLiAgVGhpcyBhbGxvd3Mgb25lIHRvIGFwcGx5IHRvIG1lcmdlIG1hbnVhbGx5LAorCSAqIHRoZW4gcnVuIG1lcmdlLiAgQW55IG90aGVyIHN0YWdlZCBjaGFuZ2Ugd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkKKwkgKiBhIHJlc2V0IG1lcmdlLgorCSAqLworCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJmhlYWRfdHJlZSwgcmVwbykpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXhfcmVwbywgcmVwbykpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZzdGFnZWRfZGlmZl9saXN0LCByZXBvLCBoZWFkX3RyZWUsIGluZGV4X3JlcG8sICZvcHRzKSkgPCAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoc3RhZ2VkX2RpZmZfbGlzdC0+ZGVsdGFzLmxlbmd0aCA9PSAwKQorCQlnb3RvIGRvbmU7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnN0YWdlZF9kaWZmX2xpc3QtPmRlbHRhcywgaSwgZGVsdGEpIHsKKwkJaWYgKChlcnJvciA9IGdpdF92ZWN0b3JfaW5zZXJ0KCZzdGFnZWRfcGF0aHMsIChjaGFyICopZGVsdGEtPm5ld19maWxlLnBhdGgpKSA8IDApCisJCQlnb3RvIGRvbmU7CisJfQorCisJb3B0cy5wYXRoc3BlYy5jb3VudCA9IHN0YWdlZF9wYXRocy5sZW5ndGg7CisJb3B0cy5wYXRoc3BlYy5zdHJpbmdzID0gKGNoYXIgKiopc3RhZ2VkX3BhdGhzLmNvbnRlbnRzOworCisJaWYgKChlcnJvciA9IGdpdF9pdGVyYXRvcl9mb3JfaW5kZXgoJml0ZXJfcmVwbywgaW5kZXhfcmVwbywgR0lUX0lURVJBVE9SX0RPTlRfSUdOT1JFX0NBU0UsIE5VTEwsIE5VTEwpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2l0ZXJhdG9yX2Zvcl9pbmRleCgmaXRlcl9uZXcsIGluZGV4X25ldywgR0lUX0lURVJBVE9SX0RPTlRfSUdOT1JFX0NBU0UsIE5VTEwsIE5VTEwpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2RpZmZfX2Zyb21faXRlcmF0b3JzKCZpbmRleF9kaWZmX2xpc3QsIHJlcG8sIGl0ZXJfcmVwbywgaXRlcl9uZXcsICZvcHRzKSkgPCAwKQorCQlnb3RvIGRvbmU7CisKKwkqY29uZmxpY3RzID0gaW5kZXhfZGlmZl9saXN0LT5kZWx0YXMubGVuZ3RoOworCitkb25lOgorCWdpdF90cmVlX2ZyZWUoaGVhZF90cmVlKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleF9yZXBvKTsKKwlnaXRfaXRlcmF0b3JfZnJlZShpdGVyX3JlcG8pOworCWdpdF9pdGVyYXRvcl9mcmVlKGl0ZXJfbmV3KTsKKwlnaXRfZGlmZl9mcmVlKHN0YWdlZF9kaWZmX2xpc3QpOworCWdpdF9kaWZmX2ZyZWUoaW5kZXhfZGlmZl9saXN0KTsKKwlnaXRfdmVjdG9yX2ZyZWUoJnN0YWdlZF9wYXRocyk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfY2hlY2tfd29ya2RpcihzaXplX3QgKmNvbmZsaWN0cywgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGdpdF9pbmRleCAqaW5kZXhfbmV3LCBnaXRfdmVjdG9yICptZXJnZWRfcGF0aHMpCit7CisJZ2l0X3RyZWUgKmhlYWRfdHJlZSA9IE5VTEw7CisJZ2l0X2RpZmYgKndkX2RpZmZfbGlzdCA9IE5VTEw7CisJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCWludCBlcnJvciA9IDA7CisKKwlHSVRfVU5VU0VEKGluZGV4X25ldyk7CisKKwkqY29uZmxpY3RzID0gMDsKKworCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaGVhZF90cmVlKCZoZWFkX3RyZWUsIHJlcG8pKSA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIFdvcmtkaXIgY2hhbmdlcyBtYXkgZXhpc3QgaWZmIHRoZXkgZG8gbm90IGNvbmZsaWN0IHdpdGggY2hhbmdlcyB0aGF0CisJICogd2lsbCBiZSBhcHBsaWVkIGJ5IHRoZSBtZXJnZSAoaW5jbHVkaW5nIGNvbmZsaWN0cykuICBFbnN1cmUgdGhhdCB0aGVyZQorCSAqIGFyZSBubyBjaGFuZ2VzIGluIHRoZSB3b3JrZGlyIHRvIHRoZXNlIHBhdGhzLgorCSAqLworCW9wdHMucGF0aHNwZWMuY291bnQgPSBtZXJnZWRfcGF0aHMtPmxlbmd0aDsKKwlvcHRzLnBhdGhzcGVjLnN0cmluZ3MgPSAoY2hhciAqKiltZXJnZWRfcGF0aHMtPmNvbnRlbnRzOworCisJaWYgKChlcnJvciA9IGdpdF9kaWZmX3RyZWVfdG9fd29ya2Rpcigmd2RfZGlmZl9saXN0LCByZXBvLCBoZWFkX3RyZWUsICZvcHRzKSkgPCAwKQorCQlnb3RvIGRvbmU7CisKKwkqY29uZmxpY3RzID0gd2RfZGlmZl9saXN0LT5kZWx0YXMubGVuZ3RoOworCitkb25lOgorCWdpdF90cmVlX2ZyZWUoaGVhZF90cmVlKTsKKwlnaXRfZGlmZl9mcmVlKHdkX2RpZmZfbGlzdCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfaW5kZXhlcyhnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X2luZGV4ICppbmRleF9uZXcpCit7CisJZ2l0X2luZGV4ICppbmRleF9yZXBvOworCXVuc2lnbmVkIGludCBpbmRleF9yZXBvX2NhcHM7CisJZ2l0X3ZlY3RvciBwYXRocyA9IEdJVF9WRUNUT1JfSU5JVDsKKwlzaXplX3QgaW5kZXhfY29uZmxpY3RzID0gMCwgd2RfY29uZmxpY3RzID0gMCwgY29uZmxpY3RzLCBpOworCWNoYXIgKnBhdGg7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplOworCWNvbnN0IGdpdF9pbmRleF9uYW1lX2VudHJ5ICpuYW1lOworCWNvbnN0IGdpdF9pbmRleF9yZXVjX2VudHJ5ICpyZXVjOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4X3JlcG8sIHJlcG8pKSA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIFNldCB0aGUgaW5kZXggdG8gY2FzZSBzZW5zaXRpdmUgdG8gaGFuZGxlIHRoZSBtZXJnZSAqLworCWluZGV4X3JlcG9fY2FwcyA9IGdpdF9pbmRleF9jYXBzKGluZGV4X3JlcG8pOworCisJaWYgKChlcnJvciA9IGdpdF9pbmRleF9zZXRfY2FwcyhpbmRleF9yZXBvLCAoaW5kZXhfcmVwb19jYXBzICYgfkdJVF9JTkRFWENBUF9JR05PUkVfQ0FTRSkpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgaW5kZXggYW5kIHdvcmtkaXIgc3RhdGUgZG8gbm90IHByZXZlbnQgbWVyZ2luZyAqLworCWlmICgoZXJyb3IgPSBtZXJnZV9hZmZlY3RlZF9wYXRocygmcGF0aHMsIHJlcG8sIGluZGV4X25ldykpIDwgMCB8fAorCQkoZXJyb3IgPSBtZXJnZV9jaGVja19pbmRleCgmaW5kZXhfY29uZmxpY3RzLCByZXBvLCBpbmRleF9uZXcsICZwYXRocykpIDwgMCB8fAorCQkoZXJyb3IgPSBtZXJnZV9jaGVja193b3JrZGlyKCZ3ZF9jb25mbGljdHMsIHJlcG8sIGluZGV4X25ldywgJnBhdGhzKSkgPCAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoKGNvbmZsaWN0cyA9IGluZGV4X2NvbmZsaWN0cyArIHdkX2NvbmZsaWN0cykgPiAwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX01FUkdFLCAiJWQgdW5jb21taXR0ZWQgY2hhbmdlJXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UiLAorCQkJY29uZmxpY3RzLCAoY29uZmxpY3RzICE9IDEpID8gInMiIDogIiIpOworCQllcnJvciA9IEdJVF9FTUVSR0VDT05GTElDVDsKKworCQlnb3RvIGRvbmU7CisJfQorCisJLyogVXBkYXRlIHRoZSBuZXcgaW5kZXggKi8KKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnBhdGhzLCBpLCBwYXRoKSB7CisJCWlmICgoZSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4X25ldywgcGF0aCwgMCkpICE9IE5VTEwpCisJCQllcnJvciA9IGdpdF9pbmRleF9hZGQoaW5kZXhfcmVwbywgZSk7CisJCWVsc2UKKwkJCWVycm9yID0gZ2l0X2luZGV4X3JlbW92ZShpbmRleF9yZXBvLCBwYXRoLCAwKTsKKwl9CisKKwkvKiBBZGQgY29uZmxpY3RzICovCisJZ2l0X2luZGV4X2NvbmZsaWN0X2NsZWFudXAoaW5kZXhfcmVwbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ2l0X2luZGV4X2VudHJ5Y291bnQoaW5kZXhfbmV3KTsgaSsrKSB7CisJCWUgPSBnaXRfaW5kZXhfZ2V0X2J5aW5kZXgoaW5kZXhfbmV3LCBpKTsKKworCQlpZiAoZ2l0X2luZGV4X2VudHJ5X3N0YWdlKGUpICE9IDAgJiYKKwkJCShlcnJvciA9IGdpdF9pbmRleF9hZGQoaW5kZXhfcmVwbywgZSkpIDwgMCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBBZGQgbmFtZSBlbnRyaWVzICovCisJZ2l0X2luZGV4X25hbWVfY2xlYXIoaW5kZXhfcmVwbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ2l0X2luZGV4X25hbWVfZW50cnljb3VudChpbmRleF9uZXcpOyBpKyspIHsKKwkJbmFtZSA9IGdpdF9pbmRleF9uYW1lX2dldF9ieWluZGV4KGluZGV4X25ldywgaSk7CisKKwkJaWYgKChlcnJvciA9IGdpdF9pbmRleF9uYW1lX2FkZChpbmRleF9yZXBvLAorCQkJbmFtZS0+YW5jZXN0b3IsIG5hbWUtPm91cnMsIG5hbWUtPnRoZWlycykpIDwgMCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBBZGQgdGhlIHJldWMgKi8KKwlnaXRfaW5kZXhfcmV1Y19jbGVhcihpbmRleF9yZXBvKTsKKworCWZvciAoaSA9IDA7IGkgPCBnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KGluZGV4X25ldyk7IGkrKykgeworCQlyZXVjID0gKGdpdF9pbmRleF9yZXVjX2VudHJ5ICopZ2l0X2luZGV4X3JldWNfZ2V0X2J5aW5kZXgoaW5kZXhfbmV3LCBpKTsKKworCQlpZiAoKGVycm9yID0gZ2l0X2luZGV4X3JldWNfYWRkKGluZGV4X3JlcG8sIHJldWMtPnBhdGgsCisJCQlyZXVjLT5tb2RlWzBdLCAmcmV1Yy0+b2lkWzBdLAorCQkJcmV1Yy0+bW9kZVsxXSwgJnJldWMtPm9pZFsxXSwKKwkJCXJldWMtPm1vZGVbMl0sICZyZXVjLT5vaWRbMl0pKSA8IDApCisJCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCWlmIChpbmRleF9yZXBvICE9IE5VTEwpCisgICAgICAgIGdpdF9pbmRleF9zZXRfY2FwcyhpbmRleF9yZXBvLCBpbmRleF9yZXBvX2NhcHMpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXhfcmVwbyk7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnBhdGhzLCBpLCBwYXRoKQorCQlnaXRfX2ZyZWUocGF0aCk7CisKKwlnaXRfdmVjdG9yX2ZyZWUoJnBhdGhzKTsKKworCXJldHVybiBlcnJvcjsKK30KKworaW50IGdpdF9tZXJnZSgKKwlnaXRfbWVyZ2VfcmVzdWx0ICoqb3V0LAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGdpdF9tZXJnZV9oZWFkICoqdGhlaXJfaGVhZHMsCisJc2l6ZV90IHRoZWlyX2hlYWRzX2xlbiwKKwljb25zdCBnaXRfbWVyZ2Vfb3B0cyAqZ2l2ZW5fb3B0cykKK3sKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisJZ2l0X21lcmdlX29wdHMgb3B0czsKKwlnaXRfcmVmZXJlbmNlICpvdXJfcmVmID0gTlVMTDsKKwlnaXRfbWVyZ2VfaGVhZCAqYW5jZXN0b3JfaGVhZCA9IE5VTEwsICpvdXJfaGVhZCA9IE5VTEw7CisJZ2l0X3RyZWUgKmFuY2VzdG9yX3RyZWUgPSBOVUxMLCAqb3VyX3RyZWUgPSBOVUxMLCAqKnRoZWlyX3RyZWVzID0gTlVMTDsKKwlnaXRfaW5kZXggKmluZGV4X25ldyA9IE5VTEwsICppbmRleF9yZXBvID0gTlVMTDsKKwlzaXplX3QgaTsKKwlpbnQgZXJyb3IgPSAwOworCisJYXNzZXJ0KG91dCAmJiByZXBvICYmIHRoZWlyX2hlYWRzKTsKKworCSpvdXQgPSBOVUxMOworCisJaWYgKHRoZWlyX2hlYWRzX2xlbiAhPSAxKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX01FUkdFLCAiQ2FuIG9ubHkgbWVyZ2UgYSBzaW5nbGUgYnJhbmNoIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXN1bHQgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X21lcmdlX3Jlc3VsdCkpOworCUdJVEVSUl9DSEVDS19BTExPQyhyZXN1bHQpOworCisJdGhlaXJfdHJlZXMgPSBnaXRfX2NhbGxvYyh0aGVpcl9oZWFkc19sZW4sIHNpemVvZihnaXRfdHJlZSAqKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHRoZWlyX3RyZWVzKTsKKworCWlmICgoZXJyb3IgPSBtZXJnZV9ub3JtYWxpemVfb3B0cyhyZXBvLCAmb3B0cywgZ2l2ZW5fb3B0cywgdGhlaXJfaGVhZHNfbGVuLCB0aGVpcl9oZWFkcykpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKworCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9fZW5zdXJlX25vdF9iYXJlKHJlcG8sICJtZXJnZSIpKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9sb29rdXAoJm91cl9yZWYsIHJlcG8sIEdJVF9IRUFEX0ZJTEUpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X21lcmdlX2hlYWRfZnJvbV9yZWYoJm91cl9oZWFkLCByZXBvLCBvdXJfcmVmKSkgPCAwKQorCQlnb3RvIG9uX2Vycm9yOworCisJaWYgKChlcnJvciA9IG1lcmdlX2FuY2VzdG9yX2hlYWQoJmFuY2VzdG9yX2hlYWQsIHJlcG8sIG91cl9oZWFkLCB0aGVpcl9oZWFkcywgdGhlaXJfaGVhZHNfbGVuKSkgPCAwICYmCisJCWVycm9yICE9IEdJVF9FTk9URk9VTkQpCisJCWdvdG8gb25fZXJyb3I7CisKKwlpZiAodGhlaXJfaGVhZHNfbGVuID09IDEgJiYKKwkJYW5jZXN0b3JfaGVhZCAhPSBOVUxMICYmCisJCShtZXJnZV9jaGVja191cHRvZGF0ZShyZXN1bHQsIGFuY2VzdG9yX2hlYWQsIHRoZWlyX2hlYWRzWzBdKSB8fAorCQltZXJnZV9jaGVja19mYXN0Zm9yd2FyZChyZXN1bHQsIGFuY2VzdG9yX2hlYWQsIG91cl9oZWFkLCB0aGVpcl9oZWFkc1swXSwgb3B0cy5tZXJnZV9mbGFncykpKSB7CisJCSpvdXQgPSByZXN1bHQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBJZiBGQVNURk9SV0FSRF9PTkxZIGlzIHNwZWNpZmllZCwgZmFpbC4gKi8KKwlpZiAoKG9wdHMubWVyZ2VfZmxhZ3MgJiBHSVRfTUVSR0VfRkFTVEZPUldBUkRfT05MWSkgPT0KKwkJR0lUX01FUkdFX0ZBU1RGT1JXQVJEX09OTFkpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTUVSR0UsICJOb3QgYSBmYXN0LWZvcndhcmQuIik7CisJCWVycm9yID0gR0lUX0VOT05GQVNURk9SV0FSRDsKKwkJZ290byBvbl9lcnJvcjsKKwl9CisKKwkvKiBXcml0ZSB0aGUgbWVyZ2UgZmlsZXMgdG8gdGhlIHJlcG9zaXRvcnkuICovCisJaWYgKChlcnJvciA9IGdpdF9tZXJnZV9fc2V0dXAocmVwbywgb3VyX2hlYWQsIHRoZWlyX2hlYWRzLCB0aGVpcl9oZWFkc19sZW4sIG9wdHMubWVyZ2VfZmxhZ3MpKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKKwlpZiAoYW5jZXN0b3JfaGVhZCAhPSBOVUxMICYmCisJCShlcnJvciA9IGdpdF9jb21taXRfdHJlZSgmYW5jZXN0b3JfdHJlZSwgYW5jZXN0b3JfaGVhZC0+Y29tbWl0KSkgPCAwKQorCQkJZ290byBvbl9lcnJvcjsKKworCWlmICgoZXJyb3IgPSBnaXRfY29tbWl0X3RyZWUoJm91cl90cmVlLCBvdXJfaGVhZC0+Y29tbWl0KSkgPCAwKQorCQlnb3RvIG9uX2Vycm9yOworCisJZm9yIChpID0gMDsgaSA8IHRoZWlyX2hlYWRzX2xlbjsgaSsrKSB7CisJCWlmICgoZXJyb3IgPSBnaXRfY29tbWl0X3RyZWUoJnRoZWlyX3RyZWVzW2ldLCB0aGVpcl9oZWFkc1tpXS0+Y29tbWl0KSkgPCAwKQorCQkJZ290byBvbl9lcnJvcjsKKwl9CisKKwkvKiBUT0RPOiByZWN1cnNpdmUsIG9jdG9wdXMsIGV0Yy4uLiAqLworCisJaWYgKChlcnJvciA9IGdpdF9tZXJnZV90cmVlcygmaW5kZXhfbmV3LCByZXBvLCBhbmNlc3Rvcl90cmVlLCBvdXJfdHJlZSwgdGhlaXJfdHJlZXNbMF0sICZvcHRzLm1lcmdlX3RyZWVfb3B0cykpIDwgMCB8fAorCQkoZXJyb3IgPSBtZXJnZV9pbmRleGVzKHJlcG8sIGluZGV4X25ldykpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXhfcmVwbywgcmVwbykpIDwgMCB8fAorCQkoZXJyb3IgPSBnaXRfY2hlY2tvdXRfaW5kZXgocmVwbywgaW5kZXhfcmVwbywgJm9wdHMuY2hlY2tvdXRfb3B0cykpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKworCXJlc3VsdC0+aW5kZXggPSBpbmRleF9uZXc7CisKKwkqb3V0ID0gcmVzdWx0OworCWdvdG8gZG9uZTsKKworb25fZXJyb3I6CisJZ2l0X3JlcG9zaXRvcnlfbWVyZ2VfY2xlYW51cChyZXBvKTsKKworCWdpdF9pbmRleF9mcmVlKGluZGV4X25ldyk7CisJZ2l0X19mcmVlKHJlc3VsdCk7CisKK2RvbmU6CisJZ2l0X2luZGV4X2ZyZWUoaW5kZXhfcmVwbyk7CisKKwlnaXRfdHJlZV9mcmVlKGFuY2VzdG9yX3RyZWUpOworCWdpdF90cmVlX2ZyZWUob3VyX3RyZWUpOworCisJZm9yIChpID0gMDsgaSA8IHRoZWlyX2hlYWRzX2xlbjsgaSsrKQorCQlnaXRfdHJlZV9mcmVlKHRoZWlyX3RyZWVzW2ldKTsKKworCWdpdF9fZnJlZSh0aGVpcl90cmVlcyk7CisKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKG91cl9oZWFkKTsKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKGFuY2VzdG9yX2hlYWQpOworCisJZ2l0X3JlZmVyZW5jZV9mcmVlKG91cl9yZWYpOworCisJcmV0dXJuIGVycm9yOworfQorCiBpbnQgZ2l0X21lcmdlX19zZXR1cCgKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAljb25zdCBnaXRfbWVyZ2VfaGVhZCAqb3VyX2hlYWQsCkBAIC0yMDExLDcgKzI0ODUsNyBAQAogCWludCBlcnJvciA9IDA7CiAKIAlhc3NlcnQgKHJlcG8gJiYgb3VyX2hlYWQgJiYgaGVhZHMpOwotCQorCiAJaWYgKChlcnJvciA9IHdyaXRlX29yaWdfaGVhZChyZXBvLCBvdXJfaGVhZCkpID09IDAgJiYKIAkJKGVycm9yID0gd3JpdGVfbWVyZ2VfaGVhZChyZXBvLCBoZWFkcywgaGVhZHNfbGVuKSkgPT0gMCAmJgogCQkoZXJyb3IgPSB3cml0ZV9tZXJnZV9tb2RlKHJlcG8sIGZsYWdzKSkgPT0gMCkgewpAQCAtMjA1NCw2ICsyNTI4LDQxIEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKiBNZXJnZSByZXN1bHQgZGF0YSAqLworCitpbnQgZ2l0X21lcmdlX3Jlc3VsdF9pc191cHRvZGF0ZShnaXRfbWVyZ2VfcmVzdWx0ICptZXJnZV9yZXN1bHQpCit7CisJYXNzZXJ0KG1lcmdlX3Jlc3VsdCk7CisKKwlyZXR1cm4gbWVyZ2VfcmVzdWx0LT5pc191cHRvZGF0ZTsKK30KKworaW50IGdpdF9tZXJnZV9yZXN1bHRfaXNfZmFzdGZvcndhcmQoZ2l0X21lcmdlX3Jlc3VsdCAqbWVyZ2VfcmVzdWx0KQoreworCWFzc2VydChtZXJnZV9yZXN1bHQpOworCisJcmV0dXJuIG1lcmdlX3Jlc3VsdC0+aXNfZmFzdGZvcndhcmQ7Cit9CisKK2ludCBnaXRfbWVyZ2VfcmVzdWx0X2Zhc3Rmb3J3YXJkX29pZChnaXRfb2lkICpvdXQsIGdpdF9tZXJnZV9yZXN1bHQgKm1lcmdlX3Jlc3VsdCkKK3sKKwlhc3NlcnQob3V0ICYmIG1lcmdlX3Jlc3VsdCk7CisKKwlnaXRfb2lkX2NweShvdXQsICZtZXJnZV9yZXN1bHQtPmZhc3Rmb3J3YXJkX29pZCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKGdpdF9tZXJnZV9yZXN1bHQgKm1lcmdlX3Jlc3VsdCkKK3sKKwlpZiAobWVyZ2VfcmVzdWx0ID09IE5VTEwpCisJCXJldHVybjsKKworCWdpdF9pbmRleF9mcmVlKG1lcmdlX3Jlc3VsdC0+aW5kZXgpOworCW1lcmdlX3Jlc3VsdC0+aW5kZXggPSBOVUxMOworCisJZ2l0X19mcmVlKG1lcmdlX3Jlc3VsdCk7Cit9CisKIC8qIE1lcmdlIGhlYWRzIGFyZSB0aGUgaW5wdXQgdG8gbWVyZ2UgKi8KIAogc3RhdGljIGludCBtZXJnZV9oZWFkX2luaXQoCkBAIC0yMDg1LDYgKzI1OTQsOSBAQAogCiAJZ2l0X29pZF9jcHkoJmhlYWQtPm9pZCwgb2lkKTsKIAorCWdpdF9vaWRfZm10KGhlYWQtPm9pZF9zdHIsIG9pZCk7CisJaGVhZC0+b2lkX3N0cltHSVRfT0lEX0hFWFNaXSA9ICdcMCc7CisKIAlpZiAoKGVycm9yID0gZ2l0X2NvbW1pdF9sb29rdXAoJmhlYWQtPmNvbW1pdCwgcmVwbywgJmhlYWQtPm9pZCkpIDwgMCkgewogCQlnaXRfbWVyZ2VfaGVhZF9mcmVlKGhlYWQpOwogCQlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvbWVyZ2UuaCBiL3NyYy9tZXJnZS5oCmluZGV4IGJhNjcyNWQuLmQ3ZDFjNjcgMTAwNjQ0Ci0tLSBhL3NyYy9tZXJnZS5oCisrKyBiL3NyYy9tZXJnZS5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNkZWZpbmUgR0lUX01FUkdFX01TR19GSUxFCQkiTUVSR0VfTVNHIgogI2RlZmluZSBHSVRfTUVSR0VfTU9ERV9GSUxFCQkiTUVSR0VfTU9ERSIKKyNkZWZpbmUgR0lUX01FUkdFX0ZJTEVfTU9ERQkJMDY2NgogCiAjZGVmaW5lIEdJVF9NRVJHRV9UUkVFX1JFTkFNRV9USFJFU0hPTEQJNTAKICNkZWZpbmUgR0lUX01FUkdFX1RSRUVfVEFSR0VUX0xJTUlUCQkxMDAwCkBAIC0xMTMsOSArMTE0LDIwIEBACiAJY2hhciAqcmVtb3RlX3VybDsKIAogCWdpdF9vaWQgb2lkOworCWNoYXIgb2lkX3N0cltHSVRfT0lEX0hFWFNaKzFdOwogCWdpdF9jb21taXQgKmNvbW1pdDsKIH07CiAKKy8qKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIG1lcmdlIHJlc3VsdHMgKi8KK3N0cnVjdCBnaXRfbWVyZ2VfcmVzdWx0IHsKKwlib29sIGlzX3VwdG9kYXRlOworCisJYm9vbCBpc19mYXN0Zm9yd2FyZDsKKwlnaXRfb2lkIGZhc3Rmb3J3YXJkX29pZDsKKworCWdpdF9pbmRleCAqaW5kZXg7Cit9OworCiBpbnQgZ2l0X21lcmdlX19iYXNlc19tYW55KAogCWdpdF9jb21taXRfbGlzdCAqKm91dCwKIAlnaXRfcmV2d2FsayAqd2FsaywKZGlmZiAtLWdpdCBhL3NyYy9tZXJnZV9maWxlLmMgYi9zcmMvbWVyZ2VfZmlsZS5jCmluZGV4IGMzNDc3Y2MuLjQ4ZmM0NmUgMTAwNjQ0Ci0tLSBhL3NyYy9tZXJnZV9maWxlLmMKKysrIGIvc3JjL21lcmdlX2ZpbGUuYwpAQCAtNDcsNyArNDcsNyBAQAogCSAqIGFzc3VtZSBleGVjdXRhYmxlLiAgT3RoZXJ3aXNlLCBpZiBhbnkgbW9kZSBjaGFuZ2VkIGZyb20gdGhlIGFuY2VzdG9yLAogCSAqIHVzZSB0aGF0IG9uZS4KIAkgKi8KLQlpZiAoR0lUX01FUkdFX0ZJTEVfU0lERV9FWElTVFMoYW5jZXN0b3IpKSB7CisJaWYgKCFHSVRfTUVSR0VfRklMRV9TSURFX0VYSVNUUyhhbmNlc3RvcikpIHsKIAkJaWYgKG91cnMtPm1vZGUgPT0gR0lUX0ZJTEVNT0RFX0JMT0JfRVhFQ1VUQUJMRSB8fAogCQkJdGhlaXJzLT5tb2RlID09IEdJVF9GSUxFTU9ERV9CTE9CX0VYRUNVVEFCTEUpCiAJCQlyZXR1cm4gR0lUX0ZJTEVNT0RFX0JMT0JfRVhFQ1VUQUJMRTsKZGlmZiAtLWdpdCBhL3NyYy9uZXRvcHMuYyBiL3NyYy9uZXRvcHMuYwppbmRleCA2OTE3OWRkLi5hZDI3ZDg0IDEwMDY0NAotLS0gYS9zcmMvbmV0b3BzLmMKKysrIGIvc3JjL25ldG9wcy5jCkBAIC0xOSwxMCArMTksNiBAQAogIwllbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBfX0ZyZWVCU0RfXwotIwlpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQogI2lmZGVmIEdJVF9TU0wKICMgaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KICMgaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KQEAgLTM2LDYgKzMyLDcgQEAKICNpbmNsdWRlICJuZXRvcHMuaCIKICNpbmNsdWRlICJwb3NpeC5oIgogI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgImh0dHBfcGFyc2VyLmgiCiAKICNpZmRlZiBHSVRfV0lOMzIKIHN0YXRpYyB2b2lkIG5ldF9zZXRfZXJyb3IoY29uc3QgY2hhciAqc3RyKQpAQCAtNTc3LDU1ICs1NzQsMTYxIEBACiAJcmV0dXJuIHNlbGVjdCgoaW50KWJ1Zi0+c29ja2V0LT5zb2NrZXQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4X2h0dHAgPSAiaHR0cDovLyI7CitzdGF0aWMgY29uc3QgY2hhciAqcHJlZml4X2h0dHBzID0gImh0dHBzOi8vIjsKKworaW50IGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcm9tX3VybCgKKwkJZ2l0bm9fY29ubmVjdGlvbl9kYXRhICpkYXRhLAorCQljb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKnNlcnZpY2Vfc3VmZml4KQoreworCWludCBlcnJvciA9IC0xOworCWNvbnN0IGNoYXIgKmRlZmF1bHRfcG9ydCA9IE5VTEwsICpwYXRoX3NlYXJjaF9zdGFydCA9IE5VTEw7CisJY2hhciAqb3JpZ2luYWxfaG9zdCA9IE5VTEw7CisKKwkvKiBzZXJ2aWNlX3N1ZmZpeCBpcyBvcHRpb25hbCAqLworCWFzc2VydChkYXRhICYmIHVybCk7CisKKwkvKiBTYXZlIHRoZXNlIGZvciBjb21wYXJpc29uIGxhdGVyICovCisJb3JpZ2luYWxfaG9zdCA9IGRhdGEtPmhvc3Q7CisJZGF0YS0+aG9zdCA9IE5VTEw7CisJZ2l0bm9fY29ubmVjdGlvbl9kYXRhX2ZyZWVfcHRycyhkYXRhKTsKKworCWlmICghZ2l0X19wcmVmaXhjbXAodXJsLCBwcmVmaXhfaHR0cCkpIHsKKwkJcGF0aF9zZWFyY2hfc3RhcnQgPSB1cmwgKyBzdHJsZW4ocHJlZml4X2h0dHApOworCQlkZWZhdWx0X3BvcnQgPSAiODAiOworCisJCWlmIChkYXRhLT51c2Vfc3NsKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJSZWRpcmVjdCBmcm9tIEhUVFBTIHRvIEhUVFAgaXMgbm90IGFsbG93ZWQiKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0gZWxzZSBpZiAoIWdpdF9fcHJlZml4Y21wKHVybCwgcHJlZml4X2h0dHBzKSkgeworCQlwYXRoX3NlYXJjaF9zdGFydCA9IHVybCArIHN0cmxlbihwcmVmaXhfaHR0cHMpOworCQlkZWZhdWx0X3BvcnQgPSAiNDQzIjsKKwkJZGF0YS0+dXNlX3NzbCA9IHRydWU7CisJfSBlbHNlIGlmICh1cmxbMF0gPT0gJy8nKQorCQlkZWZhdWx0X3BvcnQgPSBkYXRhLT51c2Vfc3NsID8gIjQ0MyIgOiAiODAiOworCisJaWYgKCFkZWZhdWx0X3BvcnQpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiVW5yZWNvZ25pemVkIFVSTCBwcmVmaXgiKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWVycm9yID0gZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoCisJCSZkYXRhLT5ob3N0LCAmZGF0YS0+cG9ydCwgJmRhdGEtPnBhdGgsICZkYXRhLT51c2VyLCAmZGF0YS0+cGFzcywKKwkJdXJsLCBkZWZhdWx0X3BvcnQpOworCisJaWYgKHVybFswXSA9PSAnLycpIHsKKwkJLyogUmVsYXRpdmUgcmVkaXJlY3Q7IHJldXNlIG9yaWdpbmFsIGhvc3QgbmFtZSBhbmQgcG9ydCAqLworCQlwYXRoX3NlYXJjaF9zdGFydCA9IHVybDsKKwkJZ2l0X19mcmVlKGRhdGEtPmhvc3QpOworCQlkYXRhLT5ob3N0ID0gb3JpZ2luYWxfaG9zdDsKKwkJb3JpZ2luYWxfaG9zdCA9IE5VTEw7CisJfQorCisJaWYgKCFlcnJvcikgeworCQljb25zdCBjaGFyICpwYXRoID0gc3RyY2hyKHBhdGhfc2VhcmNoX3N0YXJ0LCAnLycpOworCQlzaXplX3QgcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKwkJc2l6ZV90IHN1ZmZpeGxlbiA9IHNlcnZpY2Vfc3VmZml4ID8gc3RybGVuKHNlcnZpY2Vfc3VmZml4KSA6IDA7CisKKwkJaWYgKHN1ZmZpeGxlbiAmJgorCQkgICAgIW1lbWNtcChwYXRoICsgcGF0aGxlbiAtIHN1ZmZpeGxlbiwgc2VydmljZV9zdWZmaXgsIHN1ZmZpeGxlbikpIHsKKwkJCWdpdF9fZnJlZShkYXRhLT5wYXRoKTsKKwkJCWRhdGEtPnBhdGggPSBnaXRfX3N0cm5kdXAocGF0aCwgcGF0aGxlbiAtIHN1ZmZpeGxlbik7CisJCX0gZWxzZSB7CisJCQlnaXRfX2ZyZWUoZGF0YS0+cGF0aCk7CisJCQlkYXRhLT5wYXRoID0gZ2l0X19zdHJkdXAocGF0aCk7CisJCX0KKworCQkvKiBDaGVjayBmb3IgZXJyb3JzIGluIHRoZSByZXN1bHRpbmcgZGF0YSAqLworCQlpZiAob3JpZ2luYWxfaG9zdCAmJiB1cmxbMF0gIT0gJy8nICYmIHN0cmNtcChvcmlnaW5hbF9ob3N0LCBkYXRhLT5ob3N0KSkgeworCQkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiQ3Jvc3MgaG9zdCByZWRpcmVjdCBub3QgYWxsb3dlZCIpOworCQkJZXJyb3IgPSAtMTsKKwkJfQorCX0KKworY2xlYW51cDoKKwlpZiAob3JpZ2luYWxfaG9zdCkgZ2l0X19mcmVlKG9yaWdpbmFsX2hvc3QpOworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCBnaXRub19jb25uZWN0aW9uX2RhdGFfZnJlZV9wdHJzKGdpdG5vX2Nvbm5lY3Rpb25fZGF0YSAqZCkKK3sKKwlnaXRfX2ZyZWUoZC0+aG9zdCk7IGQtPmhvc3QgPSBOVUxMOworCWdpdF9fZnJlZShkLT5wb3J0KTsgZC0+cG9ydCA9IE5VTEw7CisJZ2l0X19mcmVlKGQtPnBhdGgpOyBkLT5wYXRoID0gTlVMTDsKKwlnaXRfX2ZyZWUoZC0+dXNlcik7IGQtPnVzZXIgPSBOVUxMOworCWdpdF9fZnJlZShkLT5wYXNzKTsgZC0+cGFzcyA9IE5VTEw7Cit9CisKKyNkZWZpbmUgaGV4MmMoYykgKChjIHwgMzIpICUgMzkgLSA5KQorc3RhdGljIGNoYXIqIHVuZXNjYXBlKGNoYXIgKnN0cikKK3sKKwlpbnQgeCwgeTsKKwlpbnQgbGVuID0gKGludClzdHJsZW4oc3RyKTsKKworCWZvciAoeD15PTA7IHN0clt5XTsgKyt4LCArK3kpIHsKKwkJaWYgKChzdHJbeF0gPSBzdHJbeV0pID09ICclJykgeworCQkJaWYgKHkgPCBsZW4tMiAmJiBpc3hkaWdpdChzdHJbeSsxXSkgJiYgaXN4ZGlnaXQoc3RyW3krMl0pKSB7CisJCQkJc3RyW3hdID0gKGhleDJjKHN0clt5KzFdKSA8PCA0KSArIGhleDJjKHN0clt5KzJdKTsKKwkJCQl5ICs9IDI7CisJCQl9CisJCX0KKwl9CisJc3RyW3hdID0gJ1wwJzsKKwlyZXR1cm4gc3RyOworfQorCiBpbnQgZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoCiAJCWNoYXIgKipob3N0LAogCQljaGFyICoqcG9ydCwKKwkJY2hhciAqKnBhdGgsCiAJCWNoYXIgKip1c2VybmFtZSwKIAkJY2hhciAqKnBhc3N3b3JkLAogCQljb25zdCBjaGFyICp1cmwsCiAJCWNvbnN0IGNoYXIgKmRlZmF1bHRfcG9ydCkKIHsKLQljaGFyICpjb2xvbiwgKnNsYXNoLCAqYXQsICplbmQ7Ci0JY29uc3QgY2hhciAqc3RhcnQ7CisJc3RydWN0IGh0dHBfcGFyc2VyX3VybCB1ID0gezB9OworCWNvbnN0IGNoYXIgKl9ob3N0LCAqX3BvcnQsICpfcGF0aCwgKl91c2VyaW5mbzsKIAotCS8qCi0JICoKLQkgKiA9PT4gW3VzZXJbOnBhc3NdQF1ob3N0bmFtZS50bGRbOnBvcnRdL3Jlc291cmNlCi0JICovCi0KLQljb2xvbiA9IHN0cmNocih1cmwsICc6Jyk7Ci0Jc2xhc2ggPSBzdHJjaHIodXJsLCAnLycpOwotCWF0ID0gc3RyY2hyKHVybCwgJ0AnKTsKLQotCWlmIChzbGFzaCA9PSBOVUxMKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIk1hbGZvcm1lZCBVUkw6IG1pc3NpbmcgLyIpOwotCQlyZXR1cm4gLTE7CisJaWYgKGh0dHBfcGFyc2VyX3BhcnNlX3VybCh1cmwsIHN0cmxlbih1cmwpLCBmYWxzZSwgJnUpKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIk1hbGZvcm1lZCBVUkwgJyVzJyIsIHVybCk7CisJCXJldHVybiBHSVRfRUlOVkFMSURTUEVDOwogCX0KIAotCXN0YXJ0ID0gdXJsOwotCWlmIChhdCAmJiBhdCA8IHNsYXNoKSB7Ci0JCXN0YXJ0ID0gYXQrMTsKLQkJKnVzZXJuYW1lID0gZ2l0X19zdWJzdHJkdXAodXJsLCBhdCAtIHVybCk7CisJX2hvc3QgPSB1cmwrdS5maWVsZF9kYXRhW1VGX0hPU1RdLm9mZjsKKwlfcG9ydCA9IHVybCt1LmZpZWxkX2RhdGFbVUZfUE9SVF0ub2ZmOworCV9wYXRoID0gdXJsK3UuZmllbGRfZGF0YVtVRl9QQVRIXS5vZmY7CisJX3VzZXJpbmZvID0gdXJsK3UuZmllbGRfZGF0YVtVRl9VU0VSSU5GT10ub2ZmOworCisJaWYgKHUuZmllbGRfc2V0ICYgKDEgPDwgVUZfSE9TVCkpIHsKKwkJKmhvc3QgPSBnaXRfX3N1YnN0cmR1cChfaG9zdCwgdS5maWVsZF9kYXRhW1VGX0hPU1RdLmxlbik7CisJCUdJVEVSUl9DSEVDS19BTExPQygqaG9zdCk7CiAJfQogCi0JaWYgKGNvbG9uICYmIGNvbG9uIDwgYXQpIHsKLQkJZ2l0X19mcmVlKCp1c2VybmFtZSk7Ci0JCSp1c2VybmFtZSA9IGdpdF9fc3Vic3RyZHVwKHVybCwgY29sb24tdXJsKTsKLQkJKnBhc3N3b3JkID0gZ2l0X19zdWJzdHJkdXAoY29sb24rMSwgYXQtY29sb24tMSk7Ci0JCWNvbG9uID0gc3RyY2hyKGF0LCAnOicpOwotCX0KLQotCWlmIChjb2xvbiA9PSBOVUxMKSB7CisJaWYgKHUuZmllbGRfc2V0ICYgKDEgPDwgVUZfUE9SVCkpCisJCSpwb3J0ID0gZ2l0X19zdWJzdHJkdXAoX3BvcnQsIHUuZmllbGRfZGF0YVtVRl9QT1JUXS5sZW4pOworCWVsc2UKIAkJKnBvcnQgPSBnaXRfX3N0cmR1cChkZWZhdWx0X3BvcnQpOwotCX0gZWxzZSB7Ci0JCSpwb3J0ID0gZ2l0X19zdWJzdHJkdXAoY29sb24gKyAxLCBzbGFzaCAtIGNvbG9uIC0gMSk7Ci0JfQogCUdJVEVSUl9DSEVDS19BTExPQygqcG9ydCk7CiAKLQllbmQgPSBjb2xvbiA9PSBOVUxMID8gc2xhc2ggOiBjb2xvbjsKKwlpZiAodS5maWVsZF9zZXQgJiAoMSA8PCBVRl9QQVRIKSkgeworCQkqcGF0aCA9IGdpdF9fc3Vic3RyZHVwKF9wYXRoLCB1LmZpZWxkX2RhdGFbVUZfUEFUSF0ubGVuKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKCpwYXRoKTsKKwl9CiAKLQkqaG9zdCA9IGdpdF9fc3Vic3RyZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JR0lURVJSX0NIRUNLX0FMTE9DKCpob3N0KTsKKwlpZiAodS5maWVsZF9zZXQgJiAoMSA8PCBVRl9VU0VSSU5GTykpIHsKKwkJY29uc3QgY2hhciAqY29sb24gPSBtZW1jaHIoX3VzZXJpbmZvLCAnOicsIHUuZmllbGRfZGF0YVtVRl9VU0VSSU5GT10ubGVuKTsKKwkJaWYgKGNvbG9uKSB7CisJCQkqdXNlcm5hbWUgPSB1bmVzY2FwZShnaXRfX3N1YnN0cmR1cChfdXNlcmluZm8sIGNvbG9uIC0gX3VzZXJpbmZvKSk7CisJCQkqcGFzc3dvcmQgPSB1bmVzY2FwZShnaXRfX3N1YnN0cmR1cChjb2xvbisxLCB1LmZpZWxkX2RhdGFbVUZfVVNFUklORk9dLmxlbiAtIChjb2xvbisxLV91c2VyaW5mbykpKTsKKwkJCUdJVEVSUl9DSEVDS19BTExPQygqcGFzc3dvcmQpOworCQl9IGVsc2UgeworCQkJKnVzZXJuYW1lID0gZ2l0X19zdWJzdHJkdXAoX3VzZXJpbmZvLCB1LmZpZWxkX2RhdGFbVUZfVVNFUklORk9dLmxlbik7CisJCX0KKwkJR0lURVJSX0NIRUNLX0FMTE9DKCp1c2VybmFtZSk7CisKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9uZXRvcHMuaCBiL3NyYy9uZXRvcHMuaAppbmRleCBkMzUyYmYzLi42NjZkNjZiIDEwMDY0NAotLS0gYS9zcmMvbmV0b3BzLmgKKysrIGIvc3JjL25ldG9wcy5oCkBAIC02Niw5ICs2NiwzMyBAQAogaW50IGdpdG5vX2Nsb3NlKGdpdG5vX3NvY2tldCAqcyk7CiBpbnQgZ2l0bm9fc2VsZWN0X2luKGdpdG5vX2J1ZmZlciAqYnVmLCBsb25nIGludCBzZWMsIGxvbmcgaW50IHVzZWMpOwogCit0eXBlZGVmIHN0cnVjdCBnaXRub19jb25uZWN0aW9uX2RhdGEgeworCWNoYXIgKmhvc3Q7CisJY2hhciAqcG9ydDsKKwljaGFyICpwYXRoOworCWNoYXIgKnVzZXI7CisJY2hhciAqcGFzczsKKwlib29sIHVzZV9zc2w7Cit9IGdpdG5vX2Nvbm5lY3Rpb25fZGF0YTsKKworLyoKKyAqIFRoaXMgcmVwbGFjZXMgYWxsIHRoZSBwb2ludGVycyBpbiBgZGF0YWAgd2l0aCBmcmVzaGx5LWFsbG9jYXRlZCBzdHJpbmdzLAorICogdGhhdCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nLgorICogYGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcmVlX3B0cnNgIGlzIGdvb2QgZm9yIHRoaXMuCisgKi8KKworaW50IGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcm9tX3VybCgKKwkJZ2l0bm9fY29ubmVjdGlvbl9kYXRhICpkYXRhLAorCQljb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKnNlcnZpY2Vfc3VmZml4KTsKKworLyogVGhpcyBmcmVlcyBhbGwgdGhlIHBvaW50ZXJzIElOIHRoZSBzdHJ1Y3QsIGJ1dCBub3QgdGhlIHN0cnVjdCBpdHNlbGYuICovCit2b2lkIGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcmVlX3B0cnMoZ2l0bm9fY29ubmVjdGlvbl9kYXRhICpkYXRhKTsKKwogaW50IGdpdG5vX2V4dHJhY3RfdXJsX3BhcnRzKAogCQljaGFyICoqaG9zdCwKIAkJY2hhciAqKnBvcnQsCisJCWNoYXIgKipwYXRoLAogCQljaGFyICoqdXNlcm5hbWUsCiAJCWNoYXIgKipwYXNzd29yZCwKIAkJY29uc3QgY2hhciAqdXJsLApkaWZmIC0tZ2l0IGEvc3JjL29iamVjdC5jIGIvc3JjL29iamVjdC5jCmluZGV4IDliOGNjZGQuLjNmYzk4NGIgMTAwNjQ0Ci0tLSBhL3NyYy9vYmplY3QuYworKysgYi9zcmMvb2JqZWN0LmMKQEAgLTM2NCwzICszNjQsMzggQEAKIAkqZGVzdCA9IHNvdXJjZTsKIAlyZXR1cm4gMDsKIH0KKworaW50IGdpdF9vYmplY3RfbG9va3VwX2J5cGF0aCgKKwkJZ2l0X29iamVjdCAqKm91dCwKKwkJY29uc3QgZ2l0X29iamVjdCAqdHJlZWlzaCwKKwkJY29uc3QgY2hhciAqcGF0aCwKKwkJZ2l0X290eXBlIHR5cGUpCit7CisJaW50IGVycm9yID0gLTE7CisJZ2l0X3RyZWUgKnRyZWUgPSBOVUxMOworCWdpdF90cmVlX2VudHJ5ICplbnRyeSA9IE5VTEw7CisKKwlhc3NlcnQob3V0ICYmIHRyZWVpc2ggJiYgcGF0aCk7CisKKwlpZiAoKGVycm9yID0gZ2l0X29iamVjdF9wZWVsKChnaXRfb2JqZWN0KiopJnRyZWUsIHRyZWVpc2gsIEdJVF9PQkpfVFJFRSkgPCAwKSB8fAorCQkgKGVycm9yID0gZ2l0X3RyZWVfZW50cnlfYnlwYXRoKCZlbnRyeSwgdHJlZSwgcGF0aCkpIDwgMCkKKwl7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAodHlwZSAhPSBHSVRfT0JKX0FOWSAmJiBnaXRfdHJlZV9lbnRyeV90eXBlKGVudHJ5KSAhPSB0eXBlKQorCXsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT0JKRUNULAorCQkJCSJvYmplY3QgYXQgcGF0aCAnJXMnIGlzIG5vdCBvZiB0aGUgYXNrZWQtZm9yIHR5cGUgJWQiLAorCQkJCXBhdGgsIHR5cGUpOworCQllcnJvciA9IEdJVF9FSU5WQUxJRFNQRUM7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllcnJvciA9IGdpdF90cmVlX2VudHJ5X3RvX29iamVjdChvdXQsIGdpdF9vYmplY3Rfb3duZXIodHJlZWlzaCksIGVudHJ5KTsKKworY2xlYW51cDoKKwlnaXRfdHJlZV9lbnRyeV9mcmVlKGVudHJ5KTsKKwlnaXRfdHJlZV9mcmVlKHRyZWUpOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9vZGIuYyBiL3NyYy9vZGIuYwppbmRleCA4ZTYyZWZkLi5iMjA4YjI3IDEwMDY0NAotLS0gYS9zcmMvb2RiLmMKKysrIGIvc3JjL29kYi5jCkBAIC0xMjQsNiArMTI0LDEzIEBACiAJcmV0dXJuIG9iamVjdC0+Y2FjaGVkLnR5cGU7CiB9CiAKK2ludCBnaXRfb2RiX29iamVjdF9kdXAoZ2l0X29kYl9vYmplY3QgKipkZXN0LCBnaXRfb2RiX29iamVjdCAqc291cmNlKQoreworCWdpdF9jYWNoZWRfb2JqX2luY3JlZihzb3VyY2UpOworCSpkZXN0ID0gc291cmNlOworCXJldHVybiAwOworfQorCiB2b2lkIGdpdF9vZGJfb2JqZWN0X2ZyZWUoZ2l0X29kYl9vYmplY3QgKm9iamVjdCkKIHsKIAlpZiAob2JqZWN0ID09IE5VTEwpCkBAIC0xNjgsNyArMTc1LDYgQEAKIAkJZXJyb3IgPSAtMTsKIAogCQlnb3RvIGRvbmU7Ci0JCXJldHVybiAtMTsKIAl9CiAKIAllcnJvciA9IGdpdF9oYXNoX2ZpbmFsKG91dCwgJmN0eCk7CkBAIC0xNzksMjggKzE4NSwzMCBAQAogfQogCiBpbnQgZ2l0X29kYl9faGFzaGZkX2ZpbHRlcmVkKAotCWdpdF9vaWQgKm91dCwgZ2l0X2ZpbGUgZmQsIHNpemVfdCBzaXplLCBnaXRfb3R5cGUgdHlwZSwgZ2l0X3ZlY3RvciAqZmlsdGVycykKKwlnaXRfb2lkICpvdXQsIGdpdF9maWxlIGZkLCBzaXplX3Qgc2l6ZSwgZ2l0X290eXBlIHR5cGUsIGdpdF9maWx0ZXJfbGlzdCAqZmwpCiB7CiAJaW50IGVycm9yOwogCWdpdF9idWYgcmF3ID0gR0lUX0JVRl9JTklUOwotCWdpdF9idWYgZmlsdGVyZWQgPSBHSVRfQlVGX0lOSVQ7CiAKLQlpZiAoIWZpbHRlcnMgfHwgIWZpbHRlcnMtPmxlbmd0aCkKKwlpZiAoIWZsKQogCQlyZXR1cm4gZ2l0X29kYl9faGFzaGZkKG91dCwgZmQsIHNpemUsIHR5cGUpOwogCiAJLyogc2l6ZSBvZiBkYXRhIGlzIHVzZWQgaW4gaGVhZGVyLCBzbyB3ZSBoYXZlIHRvIHJlYWQgdGhlIHdob2xlIGZpbGUKIAkgKiBpbnRvIG1lbW9yeSB0byBhcHBseSBmaWx0ZXJzIGJlZm9yZSBiZWdpbm5pbmcgdG8gY2FsY3VsYXRlIHRoZSBoYXNoCiAJICovCiAKLQlpZiAoIShlcnJvciA9IGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcl9mZCgmcmF3LCBmZCwgc2l6ZSkpKQotCQllcnJvciA9IGdpdF9maWx0ZXJzX2FwcGx5KCZmaWx0ZXJlZCwgJnJhdywgZmlsdGVycyk7CisJaWYgKCEoZXJyb3IgPSBnaXRfZnV0aWxzX3JlYWRidWZmZXJfZmQoJnJhdywgZmQsIHNpemUpKSkgeworCQlnaXRfYnVmIHBvc3QgPSBHSVRfQlVGX0lOSVQ7CiAKLQlnaXRfYnVmX2ZyZWUoJnJhdyk7CisJCWVycm9yID0gZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2RhdGEoJnBvc3QsIGZsLCAmcmF3KTsKIAotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZ2l0X29kYl9oYXNoKG91dCwgZmlsdGVyZWQucHRyLCBmaWx0ZXJlZC5zaXplLCB0eXBlKTsKKwkJZ2l0X2J1Zl9mcmVlKCZyYXcpOwogCi0JZ2l0X2J1Zl9mcmVlKCZmaWx0ZXJlZCk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGdpdF9vZGJfaGFzaChvdXQsIHBvc3QucHRyLCBwb3N0LnNpemUsIHR5cGUpOworCisJCWdpdF9idWZfZnJlZSgmcG9zdCk7CisJfQogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjMyLDYgKzI0MCw3IEBACiAJCWxpbmtfZGF0YVtzaXplXSA9ICdcMCc7CiAJCWlmIChyZWFkX2xlbiAhPSAoc3NpemVfdClzaXplKSB7CiAJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byByZWFkIHN5bWxpbmsgZGF0YSBmb3IgJyVzJyIsIHBhdGgpOworCQkJZ2l0X19mcmVlKGxpbmtfZGF0YSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMjkwLDEwICsyOTksMTAgQEAKIAlnaXRfb3R5cGUgdHlwZTsKIH0gZmFrZV93c3RyZWFtOwogCi1zdGF0aWMgaW50IGZha2Vfd3N0cmVhbV9fZndyaXRlKGdpdF9vaWQgKm9pZCwgZ2l0X29kYl9zdHJlYW0gKl9zdHJlYW0pCitzdGF0aWMgaW50IGZha2Vfd3N0cmVhbV9fZndyaXRlKGdpdF9vZGJfc3RyZWFtICpfc3RyZWFtLCBjb25zdCBnaXRfb2lkICpvaWQpCiB7CiAJZmFrZV93c3RyZWFtICpzdHJlYW0gPSAoZmFrZV93c3RyZWFtICopX3N0cmVhbTsKLQlyZXR1cm4gX3N0cmVhbS0+YmFja2VuZC0+d3JpdGUob2lkLCBfc3RyZWFtLT5iYWNrZW5kLCBzdHJlYW0tPmJ1ZmZlciwgc3RyZWFtLT5zaXplLCBzdHJlYW0tPnR5cGUpOworCXJldHVybiBfc3RyZWFtLT5iYWNrZW5kLT53cml0ZShfc3RyZWFtLT5iYWNrZW5kLCBvaWQsIHN0cmVhbS0+YnVmZmVyLCBzdHJlYW0tPnNpemUsIHN0cmVhbS0+dHlwZSk7CiB9CiAKIHN0YXRpYyBpbnQgZmFrZV93c3RyZWFtX193cml0ZShnaXRfb2RiX3N0cmVhbSAqX3N0cmVhbSwgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKQEAgLTQ0NCw3ICs0NTMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlnaXRlcnJfc2V0KEdJVEVSUl9PREIsICJObyBPREIgYmFja2VuZCBsb2FkZWQgYXQgaW5kZXggIiBQUkl1WiwgcG9zKTsKKwlnaXRlcnJfc2V0KEdJVEVSUl9PREIsICJObyBPREIgYmFja2VuZCBsb2FkZWQgYXQgaW5kZXggJSIgUFJJdVosIHBvcyk7CiAJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiB9CiAKQEAgLTQ4Myw3ICs0OTIsNyBAQAogI2VuZGlmCiAKIAkvKiBhZGQgdGhlIGxvb3NlIG9iamVjdCBiYWNrZW5kICovCi0JaWYgKGdpdF9vZGJfYmFja2VuZF9sb29zZSgmbG9vc2UsIG9iamVjdHNfZGlyLCAtMSwgMCkgPCAwIHx8CisJaWYgKGdpdF9vZGJfYmFja2VuZF9sb29zZSgmbG9vc2UsIG9iamVjdHNfZGlyLCAtMSwgMCwgMCwgMCkgPCAwIHx8CiAJCWFkZF9iYWNrZW5kX2ludGVybmFsKGRiLCBsb29zZSwgR0lUX0xPT1NFX1BSSU9SSVRZLCBhc19hbHRlcm5hdGVzLCBpbm9kZSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKQEAgLTYwNyw3ICs2MTYsNiBAQAogCWdpdF9vZGJfb2JqZWN0ICpvYmplY3Q7CiAJc2l6ZV90IGk7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwotCWJvb2wgcmVmcmVzaGVkID0gZmFsc2U7CiAKIAlhc3NlcnQoZGIgJiYgaWQpOwogCkBAIC02MTYsMjMgKzYyNCwxMiBAQAogCQlyZXR1cm4gKGludCl0cnVlOwogCX0KIAotYXR0ZW1wdF9sb29rdXA6CiAJZm9yIChpID0gMDsgaSA8IGRiLT5iYWNrZW5kcy5sZW5ndGggJiYgIWZvdW5kOyArK2kpIHsKIAkJYmFja2VuZF9pbnRlcm5hbCAqaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmZGItPmJhY2tlbmRzLCBpKTsKIAkJZ2l0X29kYl9iYWNrZW5kICpiID0gaW50ZXJuYWwtPmJhY2tlbmQ7CiAKIAkJaWYgKGItPmV4aXN0cyAhPSBOVUxMKQotCQkJZm91bmQgPSBiLT5leGlzdHMoYiwgaWQpOwotCX0KLQotCWlmICghZm91bmQgJiYgIXJlZnJlc2hlZCkgewotCQlpZiAoZ2l0X29kYl9yZWZyZXNoKGRiKSA8IDApIHsKLQkJCWdpdGVycl9jbGVhcigpOwotCQkJcmV0dXJuIChpbnQpZmFsc2U7Ci0JCX0KLQotCQlyZWZyZXNoZWQgPSB0cnVlOwotCQlnb3RvIGF0dGVtcHRfbG9va3VwOworCQkJZm91bmQgPSAoYm9vbCliLT5leGlzdHMoYiwgaWQpOwogCX0KIAogCXJldHVybiAoaW50KWZvdW5kOwpAQCAtNjk5LDcgKzY5Niw2IEBACiB7CiAJc2l6ZV90IGksIHJlYWRzID0gMDsKIAlpbnQgZXJyb3I7Ci0JYm9vbCByZWZyZXNoZWQgPSBmYWxzZTsKIAlnaXRfcmF3b2JqIHJhdzsKIAlnaXRfb2RiX29iamVjdCAqb2JqZWN0OwogCkBAIC03MDksNyArNzA1LDYgQEAKIAlpZiAoKm91dCAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAotYXR0ZW1wdF9sb29rdXA6CiAJZXJyb3IgPSBHSVRfRU5PVEZPVU5EOwogCiAJZm9yIChpID0gMDsgaSA8IGRiLT5iYWNrZW5kcy5sZW5ndGggJiYgZXJyb3IgPCAwOyArK2kpIHsKQEAgLTcyMiwxNCArNzE3LDYgQEAKIAkJfQogCX0KIAotCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EICYmICFyZWZyZXNoZWQpIHsKLQkJaWYgKChlcnJvciA9IGdpdF9vZGJfcmVmcmVzaChkYikpIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKLQotCQlyZWZyZXNoZWQgPSB0cnVlOwotCQlnb3RvIGF0dGVtcHRfbG9va3VwOwotCX0KLQogCWlmIChlcnJvciAmJiBlcnJvciAhPSBHSVRfUEFTU1RIUk9VR0gpIHsKIAkJaWYgKCFyZWFkcykKIAkJCXJldHVybiBnaXRfb2RiX19lcnJvcl9ub3Rmb3VuZCgibm8gbWF0Y2ggZm9yIGlkIiwgaWQpOwpAQCAtNzUxLDcgKzczOCw3IEBACiAJZ2l0X29pZCBmb3VuZF9mdWxsX29pZCA9IHt7MH19OwogCWdpdF9yYXdvYmogcmF3OwogCXZvaWQgKmRhdGEgPSBOVUxMOwotCWJvb2wgZm91bmQgPSBmYWxzZSwgcmVmcmVzaGVkID0gZmFsc2U7CisJYm9vbCBmb3VuZCA9IGZhbHNlOwogCWdpdF9vZGJfb2JqZWN0ICpvYmplY3Q7CiAKIAlhc3NlcnQob3V0ICYmIGRiKTsKQEAgLTc2OCw3ICs3NTUsNiBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi1hdHRlbXB0X2xvb2t1cDoKIAlmb3IgKGkgPSAwOyBpIDwgZGItPmJhY2tlbmRzLmxlbmd0aDsgKytpKSB7CiAJCWJhY2tlbmRfaW50ZXJuYWwgKmludGVybmFsID0gZ2l0X3ZlY3Rvcl9nZXQoJmRiLT5iYWNrZW5kcywgaSk7CiAJCWdpdF9vZGJfYmFja2VuZCAqYiA9IGludGVybmFsLT5iYWNrZW5kOwpAQCAtNzg1LDIyICs3NzEsMTYgQEAKIAkJCWdpdF9fZnJlZShkYXRhKTsKIAkJCWRhdGEgPSByYXcuZGF0YTsKIAotCQkJaWYgKGZvdW5kICYmIGdpdF9vaWRfX2NtcCgmZnVsbF9vaWQsICZmb3VuZF9mdWxsX29pZCkpCisJCQlpZiAoZm91bmQgJiYgZ2l0X29pZF9fY21wKCZmdWxsX29pZCwgJmZvdW5kX2Z1bGxfb2lkKSkgeworCQkJCWdpdF9fZnJlZShyYXcuZGF0YSk7CiAJCQkJcmV0dXJuIGdpdF9vZGJfX2Vycm9yX2FtYmlndW91cygibXVsdGlwbGUgbWF0Y2hlcyBmb3IgcHJlZml4Iik7CisJCQl9CiAKIAkJCWZvdW5kX2Z1bGxfb2lkID0gZnVsbF9vaWQ7CiAJCQlmb3VuZCA9IHRydWU7CiAJCX0KIAl9CiAKLQlpZiAoIWZvdW5kICYmICFyZWZyZXNoZWQpIHsKLQkJaWYgKChlcnJvciA9IGdpdF9vZGJfcmVmcmVzaChkYikpIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKLQotCQlyZWZyZXNoZWQgPSB0cnVlOwotCQlnb3RvIGF0dGVtcHRfbG9va3VwOwotCX0KLQogCWlmICghZm91bmQpCiAJCXJldHVybiBnaXRfb2RiX19lcnJvcl9ub3Rmb3VuZCgibm8gbWF0Y2ggZm9yIHByZWZpeCIsIHNob3J0X2lkKTsKIApAQCAtODQ4LDcgKzgyOCw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoYi0+d3JpdGUgIT0gTlVMTCkKLQkJCWVycm9yID0gYi0+d3JpdGUob2lkLCBiLCBkYXRhLCBsZW4sIHR5cGUpOworCQkJZXJyb3IgPSBiLT53cml0ZShiLCBvaWQsIGRhdGEsIGxlbiwgdHlwZSk7CiAJfQogCiAJaWYgKCFlcnJvciB8fCBlcnJvciA9PSBHSVRfUEFTU1RIUk9VR0gpCkBAIC04NjIsMTcgKzg0MiwyNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlzdHJlYW0tPndyaXRlKHN0cmVhbSwgZGF0YSwgbGVuKTsKLQllcnJvciA9IHN0cmVhbS0+ZmluYWxpemVfd3JpdGUob2lkLCBzdHJlYW0pOwotCXN0cmVhbS0+ZnJlZShzdHJlYW0pOworCWVycm9yID0gc3RyZWFtLT5maW5hbGl6ZV93cml0ZShzdHJlYW0sIG9pZCk7CisJZ2l0X29kYl9zdHJlYW1fZnJlZShzdHJlYW0pOwogCiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBoYXNoX2hlYWRlcihnaXRfaGFzaF9jdHggKmN0eCwgc2l6ZV90IHNpemUsIGdpdF9vdHlwZSB0eXBlKQoreworCWNoYXIgaGVhZGVyWzY0XTsKKwlpbnQgaGRybGVuOworCisJaGRybGVuID0gZ2l0X29kYl9fZm9ybWF0X29iamVjdF9oZWFkZXIoaGVhZGVyLCBzaXplb2YoaGVhZGVyKSwgc2l6ZSwgdHlwZSk7CisJZ2l0X2hhc2hfdXBkYXRlKGN0eCwgaGVhZGVyLCBoZHJsZW4pOworfQorCiBpbnQgZ2l0X29kYl9vcGVuX3dzdHJlYW0oCiAJZ2l0X29kYl9zdHJlYW0gKipzdHJlYW0sIGdpdF9vZGIgKmRiLCBzaXplX3Qgc2l6ZSwgZ2l0X290eXBlIHR5cGUpCiB7CiAJc2l6ZV90IGksIHdyaXRlcyA9IDA7CiAJaW50IGVycm9yID0gR0lUX0VSUk9SOworCWdpdF9oYXNoX2N0eCAqY3R4OwogCiAJYXNzZXJ0KHN0cmVhbSAmJiBkYik7CiAKQEAgLTg5OCw5ICs4ODgsNzEgQEAKIAlpZiAoZXJyb3IgPCAwICYmICF3cml0ZXMpCiAJCWVycm9yID0gZ2l0X29kYl9fZXJyb3JfdW5zdXBwb3J0ZWRfaW5fYmFja2VuZCgid3JpdGUgb2JqZWN0Iik7CiAKKwljdHggPSBnaXRfX21hbGxvYyhzaXplb2YoZ2l0X2hhc2hfY3R4KSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKGN0eCk7CisKKworCWdpdF9oYXNoX2N0eF9pbml0KGN0eCk7CisJaGFzaF9oZWFkZXIoY3R4LCBzaXplLCB0eXBlKTsKKwkoKnN0cmVhbSktPmhhc2hfY3R4ID0gY3R4OworCisJKCpzdHJlYW0pLT5kZWNsYXJlZF9zaXplID0gc2l6ZTsKKwkoKnN0cmVhbSktPnJlY2VpdmVkX2J5dGVzID0gMDsKKwogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBnaXRfb2RiX3N0cmVhbV9faW52YWxpZF9sZW5ndGgoCisJY29uc3QgZ2l0X29kYl9zdHJlYW0gKnN0cmVhbSwKKwljb25zdCBjaGFyICphY3Rpb24pCit7CisJZ2l0ZXJyX3NldChHSVRFUlJfT0RCLAorCQkiQ2Fubm90ICVzIC0gIgorCQkiSW52YWxpZCBsZW5ndGguICUiUFJJdVoiIHdhcyBleHBlY3RlZC4gVGhlICIKKwkJInRvdGFsIHNpemUgb2YgdGhlIHJlY2VpdmVkIGNodW5rcyBhbW91bnRzIHRvICUiUFJJdVoiLiIsCisJCWFjdGlvbiwgc3RyZWFtLT5kZWNsYXJlZF9zaXplLCBzdHJlYW0tPnJlY2VpdmVkX2J5dGVzKTsJCQorCisJcmV0dXJuIC0xOworfQorCitpbnQgZ2l0X29kYl9zdHJlYW1fd3JpdGUoZ2l0X29kYl9zdHJlYW0gKnN0cmVhbSwgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKQoreworCWdpdF9oYXNoX3VwZGF0ZShzdHJlYW0tPmhhc2hfY3R4LCBidWZmZXIsIGxlbik7CisKKwlzdHJlYW0tPnJlY2VpdmVkX2J5dGVzICs9IGxlbjsKKworCWlmIChzdHJlYW0tPnJlY2VpdmVkX2J5dGVzID4gc3RyZWFtLT5kZWNsYXJlZF9zaXplKQorCQlyZXR1cm4gZ2l0X29kYl9zdHJlYW1fX2ludmFsaWRfbGVuZ3RoKHN0cmVhbSwKKwkJCSJzdHJlYW1fd3JpdGUoKSIpOworCisJcmV0dXJuIHN0cmVhbS0+d3JpdGUoc3RyZWFtLCBidWZmZXIsIGxlbik7Cit9CisKK2ludCBnaXRfb2RiX3N0cmVhbV9maW5hbGl6ZV93cml0ZShnaXRfb2lkICpvdXQsIGdpdF9vZGJfc3RyZWFtICpzdHJlYW0pCit7CisJaWYgKHN0cmVhbS0+cmVjZWl2ZWRfYnl0ZXMgIT0gc3RyZWFtLT5kZWNsYXJlZF9zaXplKQorCQlyZXR1cm4gZ2l0X29kYl9zdHJlYW1fX2ludmFsaWRfbGVuZ3RoKHN0cmVhbSwKKwkJCSJzdHJlYW1fZmluYWxpemVfd3JpdGUoKSIpOworCisJZ2l0X2hhc2hfZmluYWwob3V0LCBzdHJlYW0tPmhhc2hfY3R4KTsKKworCWlmIChnaXRfb2RiX2V4aXN0cyhzdHJlYW0tPmJhY2tlbmQtPm9kYiwgb3V0KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc3RyZWFtLT5maW5hbGl6ZV93cml0ZShzdHJlYW0sIG91dCk7Cit9CisKK2ludCBnaXRfb2RiX3N0cmVhbV9yZWFkKGdpdF9vZGJfc3RyZWFtICpzdHJlYW0sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RyZWFtLT5yZWFkKHN0cmVhbSwgYnVmZmVyLCBsZW4pOworfQorCit2b2lkIGdpdF9vZGJfc3RyZWFtX2ZyZWUoZ2l0X29kYl9zdHJlYW0gKnN0cmVhbSkKK3sKKwlnaXRfX2ZyZWUoc3RyZWFtLT5oYXNoX2N0eCk7CisJc3RyZWFtLT5mcmVlKHN0cmVhbSk7Cit9CisKIGludCBnaXRfb2RiX29wZW5fcnN0cmVhbShnaXRfb2RiX3N0cmVhbSAqKnN0cmVhbSwgZ2l0X29kYiAqZGIsIGNvbnN0IGdpdF9vaWQgKm9pZCkKIHsKIAlzaXplX3QgaSwgcmVhZHMgPSAwOwpAQCAtOTQzLDcgKzk5NSw3IEBACiAKIAkJaWYgKGItPndyaXRlcGFjayAhPSBOVUxMKSB7CiAJCQkrK3dyaXRlczsKLQkJCWVycm9yID0gYi0+d3JpdGVwYWNrKG91dCwgYiwgcHJvZ3Jlc3NfY2IsIHByb2dyZXNzX3BheWxvYWQpOworCQkJZXJyb3IgPSBiLT53cml0ZXBhY2sob3V0LCBiLCBkYiwgcHJvZ3Jlc3NfY2IsIHByb2dyZXNzX3BheWxvYWQpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvb2RiLmggYi9zcmMvb2RiLmgKaW5kZXggMGQ5ZjllMi4uNjFkZDlhNyAxMDA2NDQKLS0tIGEvc3JjL29kYi5oCisrKyBiL3NyYy9vZGIuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgInZlY3Rvci5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicG9zaXguaCIKKyNpbmNsdWRlICJmaWx0ZXIuaCIKIAogI2RlZmluZSBHSVRfT0JKRUNUU19ESVIgIm9iamVjdHMvIgogI2RlZmluZSBHSVRfT0JKRUNUX0RJUl9NT0RFIDA3NzcKQEAgLTY2LDcgKzY3LDcgQEAKICAqIEFjdHMganVzdCBsaWtlIGdpdF9vZGJfX2hhc2hmZCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBmaWx0ZXJzLi4uCiAgKi8KIGludCBnaXRfb2RiX19oYXNoZmRfZmlsdGVyZWQoCi0JZ2l0X29pZCAqb3V0LCBnaXRfZmlsZSBmZCwgc2l6ZV90IGxlbiwgZ2l0X290eXBlIHR5cGUsIGdpdF92ZWN0b3IgKmZpbHRlcnMpOworCWdpdF9vaWQgKm91dCwgZ2l0X2ZpbGUgZmQsIHNpemVfdCBsZW4sIGdpdF9vdHlwZSB0eXBlLCBnaXRfZmlsdGVyX2xpc3QgKmZsKTsKIAogLyoKICAqIEhhc2ggYSBgcGF0aGAsIGFzc3VtaW5nIGl0IGNvdWxkIGJlIGEgUE9TSVggc3ltbGluazogaWYgdGhlIHBhdGggaXMgYQpkaWZmIC0tZ2l0IGEvc3JjL29kYl9sb29zZS5jIGIvc3JjL29kYl9sb29zZS5jCmluZGV4IDc2ZWQ4ZTIuLmNlZDI3MmIgMTAwNjQ0Ci0tLSBhL3NyYy9vZGJfbG9vc2UuYworKysgYi9zcmMvb2RiX2xvb3NlLmMKQEAgLTMzLDYgKzMzLDggQEAKIAogCWludCBvYmplY3RfemxpYl9sZXZlbDsgLyoqIGxvb3NlIG9iamVjdCB6bGliIGNvbXByZXNzaW9uIGxldmVsLiAqLwogCWludCBmc3luY19vYmplY3RfZmlsZXM7IC8qKiBsb29zZSBvYmplY3QgZmlsZSBmc3luYyBmbGFnLiAqLworCW1vZGVfdCBvYmplY3RfZmlsZV9tb2RlOworCW1vZGVfdCBvYmplY3RfZGlyX21vZGU7CiAKIAlzaXplX3Qgb2JqZWN0c19kaXJsZW47CiAJY2hhciBvYmplY3RzX2RpcltHSVRfRkxFWF9BUlJBWV07CkBAIC03OSw3ICs4MSw3IEBACiBzdGF0aWMgaW50IG9iamVjdF9ta2Rpcihjb25zdCBnaXRfYnVmICpuYW1lLCBjb25zdCBsb29zZV9iYWNrZW5kICpiZSkKIHsKIAlyZXR1cm4gZ2l0X2Z1dGlsc19ta2RpcigKLQkJbmFtZS0+cHRyICsgYmUtPm9iamVjdHNfZGlybGVuLCBiZS0+b2JqZWN0c19kaXIsIEdJVF9PQkpFQ1RfRElSX01PREUsCisJCW5hbWUtPnB0ciArIGJlLT5vYmplY3RzX2RpcmxlbiwgYmUtPm9iamVjdHNfZGlyLCBiZS0+b2JqZWN0X2Rpcl9tb2RlLAogCQlHSVRfTUtESVJfUEFUSCB8IEdJVF9NS0RJUl9TS0lQX0xBU1QgfCBHSVRfTUtESVJfVkVSSUZZX0RJUik7CiB9CiAKQEAgLTQ5OSw3ICs1MDEsNyBAQAogCX0KIAogCWlmIChzc3RhdGUtPmZvdW5kID4gMSkKLQkJcmV0dXJuIGdpdF9vZGJfX2Vycm9yX2FtYmlndW91cygibXVsdGlwbGUgbWF0Y2hlcyBpbiBsb29zZSBvYmplY3RzIik7CisJCXJldHVybiBHSVRfRUFNQklHVU9VUzsKIAogCXJldHVybiAwOwogfQpAQCAtNTQ0LDEzICs1NDYsMTcgQEAKIAogCS8qIEV4cGxvcmUgZGlyZWN0b3J5IHRvIGZpbmQgYSB1bmlxdWUgb2JqZWN0IG1hdGNoaW5nIHNob3J0X29pZCAqLwogCWVycm9yID0gZ2l0X3BhdGhfZGlyZWFjaCgKLQkJb2JqZWN0X2xvY2F0aW9uLCBmbl9sb2NhdGVfb2JqZWN0X3Nob3J0X29pZCwgJnN0YXRlKTsKLQlpZiAoZXJyb3IpCisJCW9iamVjdF9sb2NhdGlvbiwgMCwgZm5fbG9jYXRlX29iamVjdF9zaG9ydF9vaWQsICZzdGF0ZSk7CisKKwlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gR0lUX0VVU0VSKQogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoIXN0YXRlLmZvdW5kKQogCQlyZXR1cm4gZ2l0X29kYl9fZXJyb3Jfbm90Zm91bmQoIm5vIG1hdGNoaW5nIGxvb3NlIG9iamVjdCBmb3IgcHJlZml4Iiwgc2hvcnRfb2lkKTsKIAorCWlmIChzdGF0ZS5mb3VuZCA+IDEpCisJCXJldHVybiBnaXRfb2RiX19lcnJvcl9hbWJpZ3VvdXMoIm11bHRpcGxlIG1hdGNoZXMgaW4gbG9vc2Ugb2JqZWN0cyIpOworCiAJLyogQ29udmVydCBvYnRhaW5lZCBoZXggZm9ybWF0dGVkIG9pZCB0byByYXcgKi8KIAllcnJvciA9IGdpdF9vaWRfZnJvbXN0cihyZXNfb2lkLCAoY2hhciAqKXN0YXRlLnJlc19vaWQpOwogCWlmIChlcnJvcikKQEAgLTY0MSwxMCArNjQ3LDEyIEBACiB7CiAJaW50IGVycm9yID0gMDsKIAorCWFzc2VydChsZW4gPD0gR0lUX09JRF9IRVhTWik7CisKIAlpZiAobGVuIDwgR0lUX09JRF9NSU5QUkVGSVhMRU4pCiAJCWVycm9yID0gZ2l0X29kYl9fZXJyb3JfYW1iaWd1b3VzKCJwcmVmaXggbGVuZ3RoIHRvbyBzaG9ydCIpOwogCi0JZWxzZSBpZiAobGVuID49IEdJVF9PSURfSEVYU1opIHsKKwllbHNlIGlmIChsZW4gPT0gR0lUX09JRF9IRVhTWikgewogCQkvKiBXZSBjYW4gZmFsbCBiYWNrIHRvIHJlZ3VsYXIgcmVhZCBtZXRob2QgKi8KIAkJZXJyb3IgPSBsb29zZV9iYWNrZW5kX19yZWFkKGJ1ZmZlcl9wLCBsZW5fcCwgdHlwZV9wLCBiYWNrZW5kLCBzaG9ydF9vaWQpOwogCQlpZiAoIWVycm9yKQpAQCAtNzM5LDcgKzc0Nyw3IEBACiB7CiAJc3RydWN0IGZvcmVhY2hfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBmb3JlYWNoX3N0YXRlICopIF9zdGF0ZTsKIAotCXJldHVybiBnaXRfcGF0aF9kaXJlYWNoKHBhdGgsIGZvcmVhY2hfb2JqZWN0X2Rpcl9jYiwgc3RhdGUpOworCXJldHVybiBnaXRfcGF0aF9kaXJlYWNoKHBhdGgsIDAsIGZvcmVhY2hfb2JqZWN0X2Rpcl9jYiwgc3RhdGUpOwogfQogCiBzdGF0aWMgaW50IGxvb3NlX2JhY2tlbmRfX2ZvcmVhY2goZ2l0X29kYl9iYWNrZW5kICpfYmFja2VuZCwgZ2l0X29kYl9mb3JlYWNoX2NiIGNiLCB2b2lkICpkYXRhKQpAQCAtNzYyLDM0ICs3NzAsMjYgQEAKIAlzdGF0ZS5kYXRhID0gZGF0YTsKIAlzdGF0ZS5kaXJfbGVuID0gZ2l0X2J1Zl9sZW4oJmJ1Zik7CiAKLQllcnJvciA9IGdpdF9wYXRoX2RpcmVhY2goJmJ1ZiwgZm9yZWFjaF9jYiwgJnN0YXRlKTsKKwllcnJvciA9IGdpdF9wYXRoX2RpcmVhY2goJmJ1ZiwgMCwgZm9yZWFjaF9jYiwgJnN0YXRlKTsKIAogCWdpdF9idWZfZnJlZSgmYnVmKTsKIAogCXJldHVybiBzdGF0ZS5jYl9lcnJvciA/IHN0YXRlLmNiX2Vycm9yIDogZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgbG9vc2VfYmFja2VuZF9fc3RyZWFtX2Z3cml0ZShnaXRfb2lkICpvaWQsIGdpdF9vZGJfc3RyZWFtICpfc3RyZWFtKQorc3RhdGljIGludCBsb29zZV9iYWNrZW5kX19zdHJlYW1fZndyaXRlKGdpdF9vZGJfc3RyZWFtICpfc3RyZWFtLCBjb25zdCBnaXRfb2lkICpvaWQpCiB7CiAJbG9vc2Vfd3JpdGVzdHJlYW0gKnN0cmVhbSA9IChsb29zZV93cml0ZXN0cmVhbSAqKV9zdHJlYW07CiAJbG9vc2VfYmFja2VuZCAqYmFja2VuZCA9IChsb29zZV9iYWNrZW5kICopX3N0cmVhbS0+YmFja2VuZDsKIAlnaXRfYnVmIGZpbmFsX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGVycm9yID0gMDsKIAotCWlmIChnaXRfZmlsZWJ1Zl9oYXNoKG9pZCwgJnN0cmVhbS0+ZmJ1ZikgPCAwIHx8Ci0JCW9iamVjdF9maWxlX25hbWUoJmZpbmFsX3BhdGgsIGJhY2tlbmQsIG9pZCkgPCAwIHx8CisJaWYgKG9iamVjdF9maWxlX25hbWUoJmZpbmFsX3BhdGgsIGJhY2tlbmQsIG9pZCkgPCAwIHx8CiAJCW9iamVjdF9ta2RpcigmZmluYWxfcGF0aCwgYmFja2VuZCkgPCAwKQogCQllcnJvciA9IC0xOwotCS8qCi0JICogRG9uJ3QgdHJ5IHRvIGFkZCBhbiBleGlzdGluZyBvYmplY3QgdG8gdGhlIHJlcG9zaXRvcnkuIFRoaXMKLQkgKiBpcyB3aGF0IGdpdCBkb2VzIGFuZCBhbGxvd3MgdXMgdG8gc2lkZXN0ZXAgdGhlIGZhY3QgdGhhdAotCSAqIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSBhIHJlYWQtb25seSBmaWxlIG9uIFdpbmRvd3MuCi0JICovCi0JZWxzZSBpZiAoZ2l0X3BhdGhfZXhpc3RzKGZpbmFsX3BhdGgucHRyKSA9PSB0cnVlKQotCQlnaXRfZmlsZWJ1Zl9jbGVhbnVwKCZzdHJlYW0tPmZidWYpOwogCWVsc2UKIAkJZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXRfYXQoCi0JCQkmc3RyZWFtLT5mYnVmLCBmaW5hbF9wYXRoLnB0ciwgR0lUX09CSkVDVF9GSUxFX01PREUpOworCQkJJnN0cmVhbS0+ZmJ1ZiwgZmluYWxfcGF0aC5wdHIpOwogCiAJZ2l0X2J1Zl9mcmVlKCZmaW5hbF9wYXRoKTsKIApAQCAtODEwLDE3ICs4MTAsNiBAQAogCWdpdF9fZnJlZShzdHJlYW0pOwogfQogCi1zdGF0aWMgaW50IGZvcm1hdF9vYmplY3RfaGVhZGVyKGNoYXIgKmhkciwgc2l6ZV90IG4sIHNpemVfdCBvYmpfbGVuLCBnaXRfb3R5cGUgb2JqX3R5cGUpCi17Ci0JY29uc3QgY2hhciAqdHlwZV9zdHIgPSBnaXRfb2JqZWN0X3R5cGUyc3RyaW5nKG9ial90eXBlKTsKLQlpbnQgbGVuID0gc25wcmludGYoaGRyLCBuLCAiJXMgJSJQUkl1WiwgdHlwZV9zdHIsIG9ial9sZW4pOwotCi0JYXNzZXJ0KGxlbiA+IDApOwkJCQkvKiBvdGhlcndpc2Ugc25wcmludGYoKSBpcyBicm9rZW4gKi8KLQlhc3NlcnQoKChzaXplX3QpbGVuKSA8IG4pOwkJLyogb3RoZXJ3aXNlIHRoZSBjYWxsZXIgaXMgYnJva2VuISAqLwotCi0JcmV0dXJuIGxlbisxOwotfQotCiBzdGF0aWMgaW50IGxvb3NlX2JhY2tlbmRfX3N0cmVhbShnaXRfb2RiX3N0cmVhbSAqKnN0cmVhbV9vdXQsIGdpdF9vZGJfYmFja2VuZCAqX2JhY2tlbmQsIHNpemVfdCBsZW5ndGgsIGdpdF9vdHlwZSB0eXBlKQogewogCWxvb3NlX2JhY2tlbmQgKmJhY2tlbmQ7CkBAIC04MzQsNyArODIzLDcgQEAKIAliYWNrZW5kID0gKGxvb3NlX2JhY2tlbmQgKilfYmFja2VuZDsKIAkqc3RyZWFtX291dCA9IE5VTEw7CiAKLQloZHJsZW4gPSBmb3JtYXRfb2JqZWN0X2hlYWRlcihoZHIsIHNpemVvZihoZHIpLCBsZW5ndGgsIHR5cGUpOworCWhkcmxlbiA9IGdpdF9vZGJfX2Zvcm1hdF9vYmplY3RfaGVhZGVyKGhkciwgc2l6ZW9mKGhkciksIGxlbmd0aCwgdHlwZSk7CiAKIAlzdHJlYW0gPSBnaXRfX2NhbGxvYygxLCBzaXplb2YobG9vc2Vfd3JpdGVzdHJlYW0pKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0Moc3RyZWFtKTsKQEAgLTg0OCw5ICs4MzcsOSBAQAogCiAJaWYgKGdpdF9idWZfam9pbnBhdGgoJnRtcF9wYXRoLCBiYWNrZW5kLT5vYmplY3RzX2RpciwgInRtcF9vYmplY3QiKSA8IDAgfHwKIAkJZ2l0X2ZpbGVidWZfb3Blbigmc3RyZWFtLT5mYnVmLCB0bXBfcGF0aC5wdHIsCi0JCQlHSVRfRklMRUJVRl9IQVNIX0NPTlRFTlRTIHwKIAkJCUdJVF9GSUxFQlVGX1RFTVBPUkFSWSB8Ci0JCQkoYmFja2VuZC0+b2JqZWN0X3psaWJfbGV2ZWwgPDwgR0lUX0ZJTEVCVUZfREVGTEFURV9TSElGVCkpIDwgMCB8fAorCQkJKGJhY2tlbmQtPm9iamVjdF96bGliX2xldmVsIDw8IEdJVF9GSUxFQlVGX0RFRkxBVEVfU0hJRlQpLAorCQkJYmFja2VuZC0+b2JqZWN0X2ZpbGVfbW9kZSkgPCAwIHx8CiAJCXN0cmVhbS0+c3RyZWFtLndyaXRlKChnaXRfb2RiX3N0cmVhbSAqKXN0cmVhbSwgaGRyLCBoZHJsZW4pIDwgMCkKIAl7CiAJCWdpdF9maWxlYnVmX2NsZWFudXAoJnN0cmVhbS0+ZmJ1Zik7CkBAIC04NjMsNyArODUyLDcgQEAKIAlyZXR1cm4gIXN0cmVhbSA/IC0xIDogMDsKIH0KIAotc3RhdGljIGludCBsb29zZV9iYWNrZW5kX193cml0ZShnaXRfb2lkICpvaWQsIGdpdF9vZGJfYmFja2VuZCAqX2JhY2tlbmQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sIGdpdF9vdHlwZSB0eXBlKQorc3RhdGljIGludCBsb29zZV9iYWNrZW5kX193cml0ZShnaXRfb2RiX2JhY2tlbmQgKl9iYWNrZW5kLCBjb25zdCBnaXRfb2lkICpvaWQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4sIGdpdF9vdHlwZSB0eXBlKQogewogCWludCBlcnJvciA9IDAsIGhlYWRlcl9sZW47CiAJZ2l0X2J1ZiBmaW5hbF9wYXRoID0gR0lUX0JVRl9JTklUOwpAQCAtODc0LDEyICs4NjMsMTMgQEAKIAliYWNrZW5kID0gKGxvb3NlX2JhY2tlbmQgKilfYmFja2VuZDsKIAogCS8qIHByZXBhcmUgdGhlIGhlYWRlciBmb3IgdGhlIGZpbGUgKi8KLQloZWFkZXJfbGVuID0gZm9ybWF0X29iamVjdF9oZWFkZXIoaGVhZGVyLCBzaXplb2YoaGVhZGVyKSwgbGVuLCB0eXBlKTsKKwloZWFkZXJfbGVuID0gZ2l0X29kYl9fZm9ybWF0X29iamVjdF9oZWFkZXIoaGVhZGVyLCBzaXplb2YoaGVhZGVyKSwgbGVuLCB0eXBlKTsKIAogCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZmaW5hbF9wYXRoLCBiYWNrZW5kLT5vYmplY3RzX2RpciwgInRtcF9vYmplY3QiKSA8IDAgfHwKIAkJZ2l0X2ZpbGVidWZfb3BlbigmZmJ1ZiwgZmluYWxfcGF0aC5wdHIsCiAJCQlHSVRfRklMRUJVRl9URU1QT1JBUlkgfAotCQkJKGJhY2tlbmQtPm9iamVjdF96bGliX2xldmVsIDw8IEdJVF9GSUxFQlVGX0RFRkxBVEVfU0hJRlQpKSA8IDApCisJCQkoYmFja2VuZC0+b2JqZWN0X3psaWJfbGV2ZWwgPDwgR0lUX0ZJTEVCVUZfREVGTEFURV9TSElGVCksCisJCQliYWNrZW5kLT5vYmplY3RfZmlsZV9tb2RlKSA8IDApCiAJewogCQllcnJvciA9IC0xOwogCQlnb3RvIGNsZWFudXA7CkBAIC04OTAsNyArODgwLDcgQEAKIAogCWlmIChvYmplY3RfZmlsZV9uYW1lKCZmaW5hbF9wYXRoLCBiYWNrZW5kLCBvaWQpIDwgMCB8fAogCQlvYmplY3RfbWtkaXIoJmZpbmFsX3BhdGgsIGJhY2tlbmQpIDwgMCB8fAotCQlnaXRfZmlsZWJ1Zl9jb21taXRfYXQoJmZidWYsIGZpbmFsX3BhdGgucHRyLCBHSVRfT0JKRUNUX0ZJTEVfTU9ERSkgPCAwKQorCQlnaXRfZmlsZWJ1Zl9jb21taXRfYXQoJmZidWYsIGZpbmFsX3BhdGgucHRyKSA8IDApCiAJCWVycm9yID0gLTE7CiAKIGNsZWFudXA6CkBAIC05MTMsNyArOTAzLDkgQEAKIAlnaXRfb2RiX2JhY2tlbmQgKipiYWNrZW5kX291dCwKIAljb25zdCBjaGFyICpvYmplY3RzX2RpciwKIAlpbnQgY29tcHJlc3Npb25fbGV2ZWwsCi0JaW50IGRvX2ZzeW5jKQorCWludCBkb19mc3luYywKKwl1bnNpZ25lZCBpbnQgZGlyX21vZGUsCisJdW5zaWduZWQgaW50IGZpbGVfbW9kZSkKIHsKIAlsb29zZV9iYWNrZW5kICpiYWNrZW5kOwogCXNpemVfdCBvYmplY3RzX2RpcmxlbjsKQEAgLTkzNCw4ICs5MjYsMTYgQEAKIAlpZiAoY29tcHJlc3Npb25fbGV2ZWwgPCAwKQogCQljb21wcmVzc2lvbl9sZXZlbCA9IFpfQkVTVF9TUEVFRDsKIAorCWlmIChkaXJfbW9kZSA9PSAwKQorCQlkaXJfbW9kZSA9IEdJVF9PQkpFQ1RfRElSX01PREU7CisKKwlpZiAoZmlsZV9tb2RlID09IDApCisJCWZpbGVfbW9kZSA9IEdJVF9PQkpFQ1RfRklMRV9NT0RFOworCiAJYmFja2VuZC0+b2JqZWN0X3psaWJfbGV2ZWwgPSBjb21wcmVzc2lvbl9sZXZlbDsKIAliYWNrZW5kLT5mc3luY19vYmplY3RfZmlsZXMgPSBkb19mc3luYzsKKwliYWNrZW5kLT5vYmplY3RfZGlyX21vZGUgPSBkaXJfbW9kZTsKKwliYWNrZW5kLT5vYmplY3RfZmlsZV9tb2RlID0gZmlsZV9tb2RlOwogCiAJYmFja2VuZC0+cGFyZW50LnJlYWQgPSAmbG9vc2VfYmFja2VuZF9fcmVhZDsKIAliYWNrZW5kLT5wYXJlbnQud3JpdGUgPSAmbG9vc2VfYmFja2VuZF9fd3JpdGU7CmRpZmYgLS1naXQgYS9zcmMvb2RiX3BhY2suYyBiL3NyYy9vZGJfcGFjay5jCmluZGV4IGVlYzc5MjUuLmZkMmNhMGYgMTAwNjQ0Ci0tLSBhL3NyYy9vZGJfcGFjay5jCisrKyBiL3NyYy9vZGJfcGFjay5jCkBAIC0yOSw3ICsyOSw3IEBACiAKIHN0cnVjdCBwYWNrX3dyaXRlcGFjayB7CiAJc3RydWN0IGdpdF9vZGJfd3JpdGVwYWNrIHBhcmVudDsKLQlnaXRfaW5kZXhlcl9zdHJlYW0gKmluZGV4ZXJfc3RyZWFtOworCWdpdF9pbmRleGVyICppbmRleGVyOwogfTsKIAogLyoqCkBAIC0yNTksMjMgKzI1OSwyNiBAQAogCXJldHVybiBnaXRfb2RiX19lcnJvcl9ub3Rmb3VuZCgiZmFpbGVkIHRvIGZpbmQgcGFjayBlbnRyeSIsIG9pZCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBwYWNrX2VudHJ5X2ZpbmRfcHJlZml4X2lubmVyKAotCQlzdHJ1Y3QgZ2l0X3BhY2tfZW50cnkgKmUsCi0JCXN0cnVjdCBwYWNrX2JhY2tlbmQgKmJhY2tlbmQsCi0JCWNvbnN0IGdpdF9vaWQgKnNob3J0X29pZCwKLQkJc2l6ZV90IGxlbiwKLQkJc3RydWN0IGdpdF9wYWNrX2ZpbGUgKmxhc3RfZm91bmQpCitzdGF0aWMgaW50IHBhY2tfZW50cnlfZmluZF9wcmVmaXgoCisJc3RydWN0IGdpdF9wYWNrX2VudHJ5ICplLAorCXN0cnVjdCBwYWNrX2JhY2tlbmQgKmJhY2tlbmQsCisJY29uc3QgZ2l0X29pZCAqc2hvcnRfb2lkLAorCXNpemVfdCBsZW4pCiB7CiAJaW50IGVycm9yOwogCXNpemVfdCBpOwotCXVuc2lnbmVkIGZvdW5kID0gMDsKKwlnaXRfb2lkIGZvdW5kX2Z1bGxfb2lkID0ge3swfX07CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCXN0cnVjdCBnaXRfcGFja19maWxlICpsYXN0X2ZvdW5kID0gYmFja2VuZC0+bGFzdF9mb3VuZDsKIAogCWlmIChsYXN0X2ZvdW5kKSB7CiAJCWVycm9yID0gZ2l0X3BhY2tfZW50cnlfZmluZChlLCBsYXN0X2ZvdW5kLCBzaG9ydF9vaWQsIGxlbik7CiAJCWlmIChlcnJvciA9PSBHSVRfRUFNQklHVU9VUykKIAkJCXJldHVybiBlcnJvcjsKLQkJaWYgKCFlcnJvcikKLQkJCWZvdW5kID0gMTsKKwkJaWYgKCFlcnJvcikgeworCQkJZ2l0X29pZF9jcHkoJmZvdW5kX2Z1bGxfb2lkLCAmZS0+c2hhMSk7CisJCQlmb3VuZCA9IHRydWU7CisJCX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmFja2VuZC0+cGFja3MubGVuZ3RoOyArK2kpIHsKQEAgLTI4OSwyOCArMjkyLDE2IEBACiAJCWlmIChlcnJvciA9PSBHSVRfRUFNQklHVU9VUykKIAkJCXJldHVybiBlcnJvcjsKIAkJaWYgKCFlcnJvcikgewotCQkJaWYgKCsrZm91bmQgPiAxKQotCQkJCWJyZWFrOworCQkJaWYgKGZvdW5kICYmIGdpdF9vaWRfY21wKCZlLT5zaGExLCAmZm91bmRfZnVsbF9vaWQpKQorCQkJCXJldHVybiBnaXRfb2RiX19lcnJvcl9hbWJpZ3VvdXMoImZvdW5kIG11bHRpcGxlIHBhY2sgZW50cmllcyIpOworCQkJZ2l0X29pZF9jcHkoJmZvdW5kX2Z1bGxfb2lkLCAmZS0+c2hhMSk7CisJCQlmb3VuZCA9IHRydWU7CiAJCQliYWNrZW5kLT5sYXN0X2ZvdW5kID0gcDsKIAkJfQogCX0KIAotCXJldHVybiBmb3VuZDsKLX0KLQotc3RhdGljIGludCBwYWNrX2VudHJ5X2ZpbmRfcHJlZml4KAotCXN0cnVjdCBnaXRfcGFja19lbnRyeSAqZSwKLQlzdHJ1Y3QgcGFja19iYWNrZW5kICpiYWNrZW5kLAotCWNvbnN0IGdpdF9vaWQgKnNob3J0X29pZCwKLQlzaXplX3QgbGVuKQotewotCXN0cnVjdCBnaXRfcGFja19maWxlICpsYXN0X2ZvdW5kID0gYmFja2VuZC0+bGFzdF9mb3VuZDsKLQl1bnNpZ25lZCBpbnQgZm91bmQgPSBwYWNrX2VudHJ5X2ZpbmRfcHJlZml4X2lubmVyKGUsIGJhY2tlbmQsIHNob3J0X29pZCwgbGVuLCBsYXN0X2ZvdW5kKTsKLQogCWlmICghZm91bmQpCiAJCXJldHVybiBnaXRfb2RiX19lcnJvcl9ub3Rmb3VuZCgibm8gbWF0Y2hpbmcgcGFjayBlbnRyeSBmb3IgcHJlZml4Iiwgc2hvcnRfb2lkKTsKLQllbHNlIGlmIChmb3VuZCA+IDEpCi0JCXJldHVybiBnaXRfb2RiX19lcnJvcl9hbWJpZ3VvdXMoImZvdW5kIG11bHRpcGxlIHBhY2sgZW50cmllcyIpOwogCWVsc2UKIAkJcmV0dXJuIDA7CiB9CkBAIC0zNDAsMTkgKzMzMSwyMCBAQAogCWdpdF9idWZfc2V0cygmcGF0aCwgYmFja2VuZC0+cGFja19mb2xkZXIpOwogCiAJLyogcmVsb2FkIGFsbCBwYWNrcyAqLwotCWVycm9yID0gZ2l0X3BhdGhfZGlyZWFjaCgmcGF0aCwgcGFja2ZpbGVfbG9hZF9fY2IsICh2b2lkICopYmFja2VuZCk7CisJZXJyb3IgPSBnaXRfcGF0aF9kaXJlYWNoKCZwYXRoLCAwLCBwYWNrZmlsZV9sb2FkX19jYiwgYmFja2VuZCk7CiAKIAlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCiAJaWYgKGVycm9yIDwgMCkKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLTE7CiAKIAlnaXRfdmVjdG9yX3NvcnQoJmJhY2tlbmQtPnBhY2tzKTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IHBhY2tfYmFja2VuZF9fcmVhZF9oZWFkZXIoc2l6ZV90ICpsZW5fcCwgZ2l0X290eXBlICp0eXBlX3AsIHN0cnVjdCBnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKm9pZCkKK3N0YXRpYyBpbnQgcGFja19iYWNrZW5kX19yZWFkX2hlYWRlcl9pbnRlcm5hbCgKKwlzaXplX3QgKmxlbl9wLCBnaXRfb3R5cGUgKnR5cGVfcCwKKwlzdHJ1Y3QgZ2l0X29kYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBnaXRfb2lkICpvaWQpCiB7CiAJc3RydWN0IGdpdF9wYWNrX2VudHJ5IGU7CiAJaW50IGVycm9yOwpAQCAtMzY1LDcgKzM1NywyNiBAQAogCXJldHVybiBnaXRfcGFja2ZpbGVfcmVzb2x2ZV9oZWFkZXIobGVuX3AsIHR5cGVfcCwgZS5wLCBlLm9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbnQgcGFja19iYWNrZW5kX19yZWFkKHZvaWQgKipidWZmZXJfcCwgc2l6ZV90ICpsZW5fcCwgZ2l0X290eXBlICp0eXBlX3AsIGdpdF9vZGJfYmFja2VuZCAqYmFja2VuZCwgY29uc3QgZ2l0X29pZCAqb2lkKQorc3RhdGljIGludCBwYWNrX2JhY2tlbmRfX3JlYWRfaGVhZGVyKAorCXNpemVfdCAqbGVuX3AsIGdpdF9vdHlwZSAqdHlwZV9wLAorCXN0cnVjdCBnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHBhY2tfYmFja2VuZF9fcmVhZF9oZWFkZXJfaW50ZXJuYWwobGVuX3AsIHR5cGVfcCwgYmFja2VuZCwgb2lkKTsKKworCWlmIChlcnJvciAhPSBHSVRfRU5PVEZPVU5EKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoKGVycm9yID0gcGFja19iYWNrZW5kX19yZWZyZXNoKGJhY2tlbmQpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiBwYWNrX2JhY2tlbmRfX3JlYWRfaGVhZGVyX2ludGVybmFsKGxlbl9wLCB0eXBlX3AsIGJhY2tlbmQsIG9pZCk7Cit9CisKK3N0YXRpYyBpbnQgcGFja19iYWNrZW5kX19yZWFkX2ludGVybmFsKAorCXZvaWQgKipidWZmZXJfcCwgc2l6ZV90ICpsZW5fcCwgZ2l0X290eXBlICp0eXBlX3AsCisJZ2l0X29kYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBnaXRfb2lkICpvaWQpCiB7CiAJc3RydWN0IGdpdF9wYWNrX2VudHJ5IGU7CiAJZ2l0X3Jhd29iaiByYXc7CkBAIC0zODIsNyArMzkzLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFja19iYWNrZW5kX19yZWFkX3ByZWZpeCgKK3N0YXRpYyBpbnQgcGFja19iYWNrZW5kX19yZWFkKAorCXZvaWQgKipidWZmZXJfcCwgc2l6ZV90ICpsZW5fcCwgZ2l0X290eXBlICp0eXBlX3AsCisJZ2l0X29kYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBnaXRfb2lkICpvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBwYWNrX2JhY2tlbmRfX3JlYWRfaW50ZXJuYWwoYnVmZmVyX3AsIGxlbl9wLCB0eXBlX3AsIGJhY2tlbmQsIG9pZCk7CisKKwlpZiAoZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChlcnJvciA9IHBhY2tfYmFja2VuZF9fcmVmcmVzaChiYWNrZW5kKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gcGFja19iYWNrZW5kX19yZWFkX2ludGVybmFsKGJ1ZmZlcl9wLCBsZW5fcCwgdHlwZV9wLCBiYWNrZW5kLCBvaWQpOworfQorCitzdGF0aWMgaW50IHBhY2tfYmFja2VuZF9fcmVhZF9wcmVmaXhfaW50ZXJuYWwoCiAJZ2l0X29pZCAqb3V0X29pZCwKIAl2b2lkICoqYnVmZmVyX3AsCiAJc2l6ZV90ICpsZW5fcCwKQEAgLTQxOSw5ICs0NDcsNDUgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgcGFja19iYWNrZW5kX19yZWFkX3ByZWZpeCgKKwlnaXRfb2lkICpvdXRfb2lkLAorCXZvaWQgKipidWZmZXJfcCwKKwlzaXplX3QgKmxlbl9wLAorCWdpdF9vdHlwZSAqdHlwZV9wLAorCWdpdF9vZGJfYmFja2VuZCAqYmFja2VuZCwKKwljb25zdCBnaXRfb2lkICpzaG9ydF9vaWQsCisJc2l6ZV90IGxlbikKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHBhY2tfYmFja2VuZF9fcmVhZF9wcmVmaXhfaW50ZXJuYWwoCisJCW91dF9vaWQsIGJ1ZmZlcl9wLCBsZW5fcCwgdHlwZV9wLCBiYWNrZW5kLCBzaG9ydF9vaWQsIGxlbik7CisKKwlpZiAoZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChlcnJvciA9IHBhY2tfYmFja2VuZF9fcmVmcmVzaChiYWNrZW5kKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gcGFja19iYWNrZW5kX19yZWFkX3ByZWZpeF9pbnRlcm5hbCgKKwkJb3V0X29pZCwgYnVmZmVyX3AsIGxlbl9wLCB0eXBlX3AsIGJhY2tlbmQsIHNob3J0X29pZCwgbGVuKTsKK30KKwogc3RhdGljIGludCBwYWNrX2JhY2tlbmRfX2V4aXN0cyhnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKm9pZCkKIHsKIAlzdHJ1Y3QgZ2l0X3BhY2tfZW50cnkgZTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHBhY2tfZW50cnlfZmluZCgmZSwgKHN0cnVjdCBwYWNrX2JhY2tlbmQgKiliYWNrZW5kLCBvaWQpOworCisJaWYgKGVycm9yICE9IEdJVF9FTk9URk9VTkQpCisJCXJldHVybiBlcnJvciA9PSAwOworCisJaWYgKChlcnJvciA9IHBhY2tfYmFja2VuZF9fcmVmcmVzaChiYWNrZW5kKSkgPCAwKSB7CisJCWdpdGVycl9jbGVhcigpOworCQlyZXR1cm4gKGludClmYWxzZTsKKwl9CisKIAlyZXR1cm4gcGFja19lbnRyeV9maW5kKCZlLCAoc3RydWN0IHBhY2tfYmFja2VuZCAqKWJhY2tlbmQsIG9pZCkgPT0gMDsKIH0KIApAQCAtNDQ3LDEzICs1MTEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWNrX2JhY2tlbmRfX3dyaXRlcGFja19hZGQoc3RydWN0IGdpdF9vZGJfd3JpdGVwYWNrICpfd3JpdGVwYWNrLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cykKK3N0YXRpYyBpbnQgcGFja19iYWNrZW5kX193cml0ZXBhY2tfYXBwZW5kKHN0cnVjdCBnaXRfb2RiX3dyaXRlcGFjayAqX3dyaXRlcGFjaywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyAqc3RhdHMpCiB7CiAJc3RydWN0IHBhY2tfd3JpdGVwYWNrICp3cml0ZXBhY2sgPSAoc3RydWN0IHBhY2tfd3JpdGVwYWNrICopX3dyaXRlcGFjazsKIAogCWFzc2VydCh3cml0ZXBhY2spOwogCi0JcmV0dXJuIGdpdF9pbmRleGVyX3N0cmVhbV9hZGQod3JpdGVwYWNrLT5pbmRleGVyX3N0cmVhbSwgZGF0YSwgc2l6ZSwgc3RhdHMpOworCXJldHVybiBnaXRfaW5kZXhlcl9hcHBlbmQod3JpdGVwYWNrLT5pbmRleGVyLCBkYXRhLCBzaXplLCBzdGF0cyk7CiB9CiAKIHN0YXRpYyBpbnQgcGFja19iYWNrZW5kX193cml0ZXBhY2tfY29tbWl0KHN0cnVjdCBnaXRfb2RiX3dyaXRlcGFjayAqX3dyaXRlcGFjaywgZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cykKQEAgLTQ2Miw3ICs1MjYsNyBAQAogCiAJYXNzZXJ0KHdyaXRlcGFjayk7CiAKLQlyZXR1cm4gZ2l0X2luZGV4ZXJfc3RyZWFtX2ZpbmFsaXplKHdyaXRlcGFjay0+aW5kZXhlcl9zdHJlYW0sIHN0YXRzKTsKKwlyZXR1cm4gZ2l0X2luZGV4ZXJfY29tbWl0KHdyaXRlcGFjay0+aW5kZXhlciwgc3RhdHMpOwogfQogCiBzdGF0aWMgdm9pZCBwYWNrX2JhY2tlbmRfX3dyaXRlcGFja19mcmVlKHN0cnVjdCBnaXRfb2RiX3dyaXRlcGFjayAqX3dyaXRlcGFjaykKQEAgLTQ3MSwxMiArNTM1LDEzIEBACiAKIAlhc3NlcnQod3JpdGVwYWNrKTsKIAotCWdpdF9pbmRleGVyX3N0cmVhbV9mcmVlKHdyaXRlcGFjay0+aW5kZXhlcl9zdHJlYW0pOworCWdpdF9pbmRleGVyX2ZyZWUod3JpdGVwYWNrLT5pbmRleGVyKTsKIAlnaXRfX2ZyZWUod3JpdGVwYWNrKTsKIH0KIAogc3RhdGljIGludCBwYWNrX2JhY2tlbmRfX3dyaXRlcGFjayhzdHJ1Y3QgZ2l0X29kYl93cml0ZXBhY2sgKipvdXQsCiAJZ2l0X29kYl9iYWNrZW5kICpfYmFja2VuZCwKKyAgICAgICAgZ2l0X29kYiAqb2RiLAogCWdpdF90cmFuc2Zlcl9wcm9ncmVzc19jYWxsYmFjayBwcm9ncmVzc19jYiwKIAl2b2lkICpwcm9ncmVzc19wYXlsb2FkKQogewpAQCAtNDkyLDE0ICs1NTcsMTQgQEAKIAl3cml0ZXBhY2sgPSBnaXRfX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBhY2tfd3JpdGVwYWNrKSk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHdyaXRlcGFjayk7CiAKLQlpZiAoZ2l0X2luZGV4ZXJfc3RyZWFtX25ldygmd3JpdGVwYWNrLT5pbmRleGVyX3N0cmVhbSwKLQkJYmFja2VuZC0+cGFja19mb2xkZXIsIHByb2dyZXNzX2NiLCBwcm9ncmVzc19wYXlsb2FkKSA8IDApIHsKKwlpZiAoZ2l0X2luZGV4ZXJfbmV3KCZ3cml0ZXBhY2stPmluZGV4ZXIsCisJCWJhY2tlbmQtPnBhY2tfZm9sZGVyLCAwLCBvZGIsIHByb2dyZXNzX2NiLCBwcm9ncmVzc19wYXlsb2FkKSA8IDApIHsKIAkJZ2l0X19mcmVlKHdyaXRlcGFjayk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAl3cml0ZXBhY2stPnBhcmVudC5iYWNrZW5kID0gX2JhY2tlbmQ7Ci0Jd3JpdGVwYWNrLT5wYXJlbnQuYWRkID0gcGFja19iYWNrZW5kX193cml0ZXBhY2tfYWRkOworCXdyaXRlcGFjay0+cGFyZW50LmFwcGVuZCA9IHBhY2tfYmFja2VuZF9fd3JpdGVwYWNrX2FwcGVuZDsKIAl3cml0ZXBhY2stPnBhcmVudC5jb21taXQgPSBwYWNrX2JhY2tlbmRfX3dyaXRlcGFja19jb21taXQ7CiAJd3JpdGVwYWNrLT5wYXJlbnQuZnJlZSA9IHBhY2tfYmFja2VuZF9fd3JpdGVwYWNrX2ZyZWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9vaWQuYyBiL3NyYy9vaWQuYwppbmRleCA4MzAwZTQ2Li5kNTZiNmFmIDEwMDY0NAotLS0gYS9zcmMvb2lkLmMKKysrIGIvc3JjL29pZC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAlmb3IgKGEgPSBvaWRfYS0+aWQ7ICpzdHIgJiYgKGEgLSBvaWRfYS0+aWQpIDwgR0lUX09JRF9SQVdTWjsgKythKSB7CiAJCWlmICgoaGV4dmFsID0gZ2l0X19mcm9taGV4KCpzdHIrKykpIDwgMCkKIAkJCXJldHVybiAtMTsKLQkJc3RydmFsID0gaGV4dmFsIDw8IDQ7CisJCXN0cnZhbCA9ICh1bnNpZ25lZCBjaGFyKShoZXh2YWwgPDwgNCk7CiAJCWlmICgqc3RyKSB7CiAJCQlpZiAoKGhleHZhbCA9IGdpdF9fZnJvbWhleCgqc3RyKyspKSA8IDApCiAJCQkJcmV0dXJuIC0xOwpAQCAtMzY5LDggKzM2OSwxMCBAQAogCWJvb2wgaXNfbGVhZjsKIAlub2RlX2luZGV4IGlkeDsKIAotCWlmIChvcy0+ZnVsbCkKKwlpZiAob3MtPmZ1bGwpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5WQUxJRCwgIlVuYWJsZSB0byBzaG9ydGVuIE9JRCAtIE9JRCBzZXQgZnVsbCIpOwogCQlyZXR1cm4gLTE7CisJfQogCiAJaWYgKHRleHRfb2lkID09IE5VTEwpCiAJCXJldHVybiBvcy0+bWluX2xlbmd0aDsKQEAgLTM5NiwxMiArMzk4LDE5IEBACiAJCQlub2RlLT50YWlsID0gTlVMTDsKIAogCQkJbm9kZSA9IHB1c2hfbGVhZihvcywgaWR4LCBnaXRfX2Zyb21oZXgodGFpbFswXSksICZ0YWlsWzFdKTsKLQkJCUdJVEVSUl9DSEVDS19BTExPQyhub2RlKTsKKwkJCWlmIChub2RlID09IE5VTEwpIHsKKwkJCQlpZiAob3MtPmZ1bGwpCisJCQkJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJVbmFibGUgdG8gc2hvcnRlbiBPSUQgLSBPSUQgc2V0IGZ1bGwiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCX0KIAogCQlpZiAobm9kZS0+Y2hpbGRyZW5bY10gPT0gMCkgewotCQkJaWYgKHB1c2hfbGVhZihvcywgaWR4LCBjLCAmdGV4dF9vaWRbaSArIDFdKSA9PSBOVUxMKQorCQkJaWYgKHB1c2hfbGVhZihvcywgaWR4LCBjLCAmdGV4dF9vaWRbaSArIDFdKSA9PSBOVUxMKSB7CisJCQkJaWYgKG9zLT5mdWxsKQorCQkJCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiVW5hYmxlIHRvIHNob3J0ZW4gT0lEIC0gT0lEIHNldCBmdWxsIik7CiAJCQkJcmV0dXJuIC0xOworCQkJfQogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL29pZC5oIGIvc3JjL29pZC5oCmluZGV4IDA3N2QwYTQuLmNmZTdjYTEgMTAwNjQ0Ci0tLSBhL3NyYy9vaWQuaAorKysgYi9zcmMvb2lkLmgKQEAgLTksNiArOSwxOCBAQAogCiAjaW5jbHVkZSAiZ2l0Mi9vaWQuaCIKIAorR0lUX0lOTElORShpbnQpIGdpdF9vaWRfX2hhc2hjbXAoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHSVRfT0lEX1JBV1NaOyBpKyssIHNoYTErKywgc2hhMisrKSB7CisJCWlmICgqc2hhMSAhPSAqc2hhMikKKwkJCXJldHVybiAqc2hhMSAtICpzaGEyOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogQ29tcGFyZSB0d28gb2lkIHN0cnVjdHVyZXMuCiAgKgpAQCAtMTgsMTYgKzMwLDcgQEAKICAqLwogR0lUX0lOTElORShpbnQpIGdpdF9vaWRfX2NtcChjb25zdCBnaXRfb2lkICphLCBjb25zdCBnaXRfb2lkICpiKQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSBhLT5pZDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyID0gYi0+aWQ7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgR0lUX09JRF9SQVdTWjsgaSsrLCBzaGExKyssIHNoYTIrKykgewotCQlpZiAoKnNoYTEgIT0gKnNoYTIpCi0JCQlyZXR1cm4gKnNoYTEgLSAqc2hhMjsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2l0X29pZF9faGFzaGNtcChhLT5pZCwgYi0+aWQpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9wYWNrLW9iamVjdHMuYyBiL3NyYy9wYWNrLW9iamVjdHMuYwppbmRleCA1MDAxMDRjLi4yZDYyNTA3IDEwMDY0NAotLS0gYS9zcmMvcGFjay1vYmplY3RzLmMKKysrIGIvc3JjL3BhY2stb2JqZWN0cy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSAicGFjay5oIgogI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgogI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCiAKICNpbmNsdWRlICJnaXQyL3BhY2suaCIKICNpbmNsdWRlICJnaXQyL2NvbW1pdC5oIgpAQCAtMjUsNyArMjYsNyBAQAogCWdpdF9wb2JqZWN0ICpvYmplY3Q7CiAJdm9pZCAqZGF0YTsKIAlzdHJ1Y3QgZ2l0X2RlbHRhX2luZGV4ICppbmRleDsKLQl1bnNpZ25lZCBpbnQgZGVwdGg7CisJaW50IGRlcHRoOwogfTsKIAogc3RydWN0IHRyZWVfd2Fsa19jb250ZXh0IHsKQEAgLTM0LDcgKzM1LDcgQEAKIH07CiAKIHN0cnVjdCBwYWNrX3dyaXRlX2NvbnRleHQgewotCWdpdF9pbmRleGVyX3N0cmVhbSAqaW5kZXhlcjsKKwlnaXRfaW5kZXhlciAqaW5kZXhlcjsKIAlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzOwogfTsKIApAQCAtNTcsNiArNTgsOSBAQAogI2RlZmluZSBnaXRfcGFja2J1aWxkZXJfX3Byb2dyZXNzX2xvY2socGIpIEdJVF9QQUNLQlVJTERFUl9fTVVURVhfT1AocGIsIHByb2dyZXNzX211dGV4LCBsb2NrKQogI2RlZmluZSBnaXRfcGFja2J1aWxkZXJfX3Byb2dyZXNzX3VubG9jayhwYikgR0lUX1BBQ0tCVUlMREVSX19NVVRFWF9PUChwYiwgcHJvZ3Jlc3NfbXV0ZXgsIHVubG9jaykKIAorLyogVGhlIG1pbmltYWwgaW50ZXJ2YWwgYmV0d2VlbiBwcm9ncmVzcyB1cGRhdGVzIChpbiBzZWNvbmRzKS4gKi8KKyNkZWZpbmUgTUlOX1BST0dSRVNTX1VQREFURV9JTlRFUlZBTCAwLjUKKwogc3RhdGljIHVuc2lnbmVkIG5hbWVfaGFzaChjb25zdCBjaGFyICpuYW1lKQogewogCXVuc2lnbmVkIGMsIGhhc2ggPSAwOwpAQCAtMjEzLDQxICsyMTcsMTkgQEAKIAlraF92YWx1ZShwYi0+b2JqZWN0X2l4LCBwb3MpID0gcG87CiAKIAlwYi0+ZG9uZSA9IGZhbHNlOwotCXJldHVybiAwOwotfQogCi0vKgotICogVGhlIHBlci1vYmplY3QgaGVhZGVyIGlzIGEgcHJldHR5IGRlbnNlIHRoaW5nLCB3aGljaCBpcwotICogIC0gZmlyc3QgYnl0ZTogbG93IGZvdXIgYml0cyBhcmUgInNpemUiLAotICogICAgdGhlbiB0aHJlZSBiaXRzIG9mICJ0eXBlIiwKLSAqICAgIHdpdGggdGhlIGhpZ2ggYml0IGJlaW5nICJzaXplIGNvbnRpbnVlcyIuCi0gKiAgLSBlYWNoIGJ5dGUgYWZ0ZXJ3YXJkczogbG93IHNldmVuIGJpdHMgYXJlIHNpemUgY29udGludWF0aW9uLAotICogICAgd2l0aCB0aGUgaGlnaCBiaXQgYmVpbmcgInNpemUgY29udGludWVzIgotICovCi1zdGF0aWMgaW50IGdlbl9wYWNrX29iamVjdF9oZWFkZXIoCi0JCXVuc2lnbmVkIGNoYXIgKmhkciwKLQkJdW5zaWduZWQgbG9uZyBzaXplLAotCQlnaXRfb3R5cGUgdHlwZSkKLXsKLQl1bnNpZ25lZCBjaGFyICpoZHJfYmFzZTsKLQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQlhc3NlcnQodHlwZSA+PSBHSVRfT0JKX0NPTU1JVCAmJiB0eXBlIDw9IEdJVF9PQkpfUkVGX0RFTFRBKTsKLQotCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBjaHVua2VkIG9iamVjdHM7IHNlZSBnaXQuZ2l0IDZjMGQxOWIxICovCi0KLQljID0gKHVuc2lnbmVkIGNoYXIpKCh0eXBlIDw8IDQpIHwgKHNpemUgJiAxNSkpOwotCXNpemUgPj49IDQ7Ci0JaGRyX2Jhc2UgPSBoZHI7Ci0KLQl3aGlsZSAoc2l6ZSkgewotCQkqaGRyKysgPSBjIHwgMHg4MDsKLQkJYyA9IHNpemUgJiAweDdmOwotCQlzaXplID4+PSA3OworCWlmIChwYi0+cHJvZ3Jlc3NfY2IpIHsKKwkJZG91YmxlIGN1cnJlbnRfdGltZSA9IGdpdF9fdGltZXIoKTsKKwkJaWYgKChjdXJyZW50X3RpbWUgLSBwYi0+bGFzdF9wcm9ncmVzc19yZXBvcnRfdGltZSkgPj0gTUlOX1BST0dSRVNTX1VQREFURV9JTlRFUlZBTCkgeworCQkJcGItPmxhc3RfcHJvZ3Jlc3NfcmVwb3J0X3RpbWUgPSBjdXJyZW50X3RpbWU7CisJCQlpZiAocGItPnByb2dyZXNzX2NiKEdJVF9QQUNLQlVJTERFUl9BRERJTkdfT0JKRUNUUywgcGItPm5yX29iamVjdHMsIDAsIHBiLT5wcm9ncmVzc19jYl9wYXlsb2FkKSkgeworCQkJCWdpdGVycl9jbGVhcigpOworCQkJCXJldHVybiBHSVRfRVVTRVI7CisJCQl9CisJCX0KIAl9Ci0JKmhkcisrID0gYzsKIAotCXJldHVybiAoaW50KShoZHIgLSBoZHJfYmFzZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2RlbHRhKHZvaWQgKipvdXQsIGdpdF9vZGIgKm9kYiwgZ2l0X3BvYmplY3QgKnBvKQpAQCAtMjkwLDcgKzI3Miw3IEBACiAJZ2l0X2J1ZiB6YnVmID0gR0lUX0JVRl9JTklUOwogCWdpdF9vdHlwZSB0eXBlOwogCXVuc2lnbmVkIGNoYXIgaGRyWzEwXTsKLQl1bnNpZ25lZCBpbnQgaGRyX2xlbjsKKwlzaXplX3QgaGRyX2xlbjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdm9pZCAqZGF0YTsKIApAQCAtMzExLDcgKzI5Myw3IEBACiAJfQogCiAJLyogV3JpdGUgaGVhZGVyICovCi0JaGRyX2xlbiA9IGdlbl9wYWNrX29iamVjdF9oZWFkZXIoaGRyLCBzaXplLCB0eXBlKTsKKwloZHJfbGVuID0gZ2l0X3BhY2tmaWxlX19vYmplY3RfaGVhZGVyKGhkciwgc2l6ZSwgdHlwZSk7CiAKIAlpZiAoZ2l0X2J1Zl9wdXQoYnVmLCAoY2hhciAqKWhkciwgaGRyX2xlbikgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwpAQCAtNTA1LDggKzQ4NywxMCBAQAogCS8qCiAJICogTWFyayBvYmplY3RzIHRoYXQgYXJlIGF0IHRoZSB0aXAgb2YgdGFncy4KIAkgKi8KLQlpZiAoZ2l0X3RhZ19mb3JlYWNoKHBiLT5yZXBvLCAmY2JfdGFnX2ZvcmVhY2gsIHBiKSA8IDApCisJaWYgKGdpdF90YWdfZm9yZWFjaChwYi0+cmVwbywgJmNiX3RhZ19mb3JlYWNoLCBwYikgPCAwKSB7CisJCWdpdF9fZnJlZSh3byk7CiAJCXJldHVybiBOVUxMOworCX0KIAogCS8qCiAJICogR2l2ZSB0aGUgb2JqZWN0cyBpbiB0aGUgb3JpZ2luYWwgcmVjZW5jeSBvcmRlciB1bnRpbApAQCAtNTc2LDUwICs1NjAsNTIgQEAKIAlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKIAllbnVtIHdyaXRlX29uZV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBnaXRfcGFja19oZWFkZXIgcGg7CisJZ2l0X29pZCBlbnRyeV9vaWQ7CiAJdW5zaWduZWQgaW50IGkgPSAwOworCWludCBlcnJvciA9IDA7CiAKIAl3cml0ZV9vcmRlciA9IGNvbXB1dGVfd3JpdGVfb3JkZXIocGIpOwotCWlmICh3cml0ZV9vcmRlciA9PSBOVUxMKQotCQlnb3RvIG9uX2Vycm9yOworCWlmICh3cml0ZV9vcmRlciA9PSBOVUxMKSB7CisJCWVycm9yID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CiAKIAkvKiBXcml0ZSBwYWNrIGhlYWRlciAqLwogCXBoLmhkcl9zaWduYXR1cmUgPSBodG9ubChQQUNLX1NJR05BVFVSRSk7CiAJcGguaGRyX3ZlcnNpb24gPSBodG9ubChQQUNLX1ZFUlNJT04pOwogCXBoLmhkcl9lbnRyaWVzID0gaHRvbmwocGItPm5yX29iamVjdHMpOwogCi0JaWYgKGNiKCZwaCwgc2l6ZW9mKHBoKSwgZGF0YSkgPCAwKQotCQlnb3RvIG9uX2Vycm9yOworCWlmICgoZXJyb3IgPSBjYigmcGgsIHNpemVvZihwaCksIGRhdGEpKSA8IDApCisJCWdvdG8gZG9uZTsKIAotCWlmIChnaXRfaGFzaF91cGRhdGUoJnBiLT5jdHgsICZwaCwgc2l6ZW9mKHBoKSkgPCAwKQotCQlnb3RvIG9uX2Vycm9yOworCWlmICgoZXJyb3IgPSBnaXRfaGFzaF91cGRhdGUoJnBiLT5jdHgsICZwaCwgc2l6ZW9mKHBoKSkpIDwgMCkKKwkJZ290byBkb25lOwogCiAJcGItPm5yX3JlbWFpbmluZyA9IHBiLT5ucl9vYmplY3RzOwogCWRvIHsKIAkJcGItPm5yX3dyaXR0ZW4gPSAwOwogCQlmb3IgKCA7IGkgPCBwYi0+bnJfb2JqZWN0czsgKytpKSB7CiAJCQlwbyA9IHdyaXRlX29yZGVyW2ldOwotCQkJaWYgKHdyaXRlX29uZSgmYnVmLCBwYiwgcG8sICZzdGF0dXMpIDwgMCkKLQkJCQlnb3RvIG9uX2Vycm9yOwotCQkJaWYgKGNiKGJ1Zi5wdHIsIGJ1Zi5zaXplLCBkYXRhKSA8IDApCi0JCQkJZ290byBvbl9lcnJvcjsKKwkJCWlmICgoZXJyb3IgPSB3cml0ZV9vbmUoJmJ1ZiwgcGIsIHBvLCAmc3RhdHVzKSkgPCAwKQorCQkJCWdvdG8gZG9uZTsKKwkJCWlmICgoZXJyb3IgPSBjYihidWYucHRyLCBidWYuc2l6ZSwgZGF0YSkpIDwgMCkKKwkJCQlnb3RvIGRvbmU7CiAJCQlnaXRfYnVmX2NsZWFyKCZidWYpOwogCQl9CiAKIAkJcGItPm5yX3JlbWFpbmluZyAtPSBwYi0+bnJfd3JpdHRlbjsKIAl9IHdoaWxlIChwYi0+bnJfcmVtYWluaW5nICYmIGkgPCBwYi0+bnJfb2JqZWN0cyk7CiAKKworCWlmICgoZXJyb3IgPSBnaXRfaGFzaF9maW5hbCgmZW50cnlfb2lkLCAmcGItPmN0eCkpIDwgMCkKKwkJZ290byBkb25lOworCisJZXJyb3IgPSBjYihlbnRyeV9vaWQuaWQsIEdJVF9PSURfUkFXU1osIGRhdGEpOworCitkb25lOgogCWdpdF9fZnJlZSh3cml0ZV9vcmRlcik7CiAJZ2l0X2J1Zl9mcmVlKCZidWYpOwotCi0JaWYgKGdpdF9oYXNoX2ZpbmFsKCZwYi0+cGFja19vaWQsICZwYi0+Y3R4KSA8IDApCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQlyZXR1cm4gY2IocGItPnBhY2tfb2lkLmlkLCBHSVRfT0lEX1JBV1NaLCBkYXRhKTsKLQotb25fZXJyb3I6Ci0JZ2l0X19mcmVlKHdyaXRlX29yZGVyKTsKLQlnaXRfYnVmX2ZyZWUoJmJ1Zik7Ci0JcmV0dXJuIC0xOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCB3cml0ZV9wYWNrX2J1Zih2b2lkICpidWYsIHNpemVfdCBzaXplLCB2b2lkICpkYXRhKQpAQCAtNjc0LDcgKzY2MCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdHJ5X2RlbHRhKGdpdF9wYWNrYnVpbGRlciAqcGIsIHN0cnVjdCB1bnBhY2tlZCAqdHJnLAotCQkgICAgIHN0cnVjdCB1bnBhY2tlZCAqc3JjLCB1bnNpZ25lZCBpbnQgbWF4X2RlcHRoLAorCQkgICAgIHN0cnVjdCB1bnBhY2tlZCAqc3JjLCBpbnQgbWF4X2RlcHRoLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgKm1lbV91c2FnZSwgaW50ICpyZXQpCiB7CiAJZ2l0X3BvYmplY3QgKnRyZ19vYmplY3QgPSB0cmctPm9iamVjdDsKQEAgLTgzOSw3ICs4MjUsNyBAQAogCiBzdGF0aWMgaW50IGZpbmRfZGVsdGFzKGdpdF9wYWNrYnVpbGRlciAqcGIsIGdpdF9wb2JqZWN0ICoqbGlzdCwKIAkJICAgICAgIHVuc2lnbmVkIGludCAqbGlzdF9zaXplLCB1bnNpZ25lZCBpbnQgd2luZG93LAotCQkgICAgICAgdW5zaWduZWQgaW50IGRlcHRoKQorCQkgICAgICAgaW50IGRlcHRoKQogewogCWdpdF9wb2JqZWN0ICpwbzsKIAlnaXRfYnVmIHpidWYgPSBHSVRfQlVGX0lOSVQ7CkBAIC04NTQsOCArODQwLDcgQEAKIAogCWZvciAoOzspIHsKIAkJc3RydWN0IHVucGFja2VkICpuID0gYXJyYXkgKyBpZHg7Ci0JCXVuc2lnbmVkIGludCBtYXhfZGVwdGg7Ci0JCWludCBqLCBiZXN0X2Jhc2UgPSAtMTsKKwkJaW50IG1heF9kZXB0aCwgaiwgYmVzdF9iYXNlID0gLTE7CiAKIAkJZ2l0X3BhY2tidWlsZGVyX19wcm9ncmVzc19sb2NrKHBiKTsKIAkJaWYgKCEqbGlzdF9zaXplKSB7CkBAIC0xMDQ4LDcgKzEwMzMsNyBAQAogCiBzdGF0aWMgaW50IGxsX2ZpbmRfZGVsdGFzKGdpdF9wYWNrYnVpbGRlciAqcGIsIGdpdF9wb2JqZWN0ICoqbGlzdCwKIAkJCSAgdW5zaWduZWQgaW50IGxpc3Rfc2l6ZSwgdW5zaWduZWQgaW50IHdpbmRvdywKLQkJCSAgdW5zaWduZWQgaW50IGRlcHRoKQorCQkJICBpbnQgZGVwdGgpCiB7CiAJc3RydWN0IHRocmVhZF9wYXJhbXMgKnA7CiAJaW50IGksIHJldCwgYWN0aXZlX3RocmVhZHMgPSAwOwpAQCAtMTIwNSw2ICsxMTkwLDEzIEBACiAJaWYgKHBiLT5ucl9vYmplY3RzID09IDAgfHwgcGItPmRvbmUpCiAJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGRvICovCiAKKwkvKgorCSAqIEFsdGhvdWdoIHdlIGRvIG5vdCByZXBvcnQgcHJvZ3Jlc3MgZHVyaW5nIGRlbHRhZmljYXRpb24sIHdlCisJICogYXQgbGVhc3QgcmVwb3J0IHRoYXQgd2UgYXJlIGluIHRoZSBkZWx0YWZpY2F0aW9uIHN0YWdlCisJICovCisJaWYgKHBiLT5wcm9ncmVzc19jYikKKwkJCXBiLT5wcm9ncmVzc19jYihHSVRfUEFDS0JVSUxERVJfREVMVEFGSUNBVElPTiwgMCwgcGItPm5yX29iamVjdHMsIHBiLT5wcm9ncmVzc19jYl9wYXlsb2FkKTsKKwogCWRlbHRhX2xpc3QgPSBnaXRfX21hbGxvYyhwYi0+bnJfb2JqZWN0cyAqIHNpemVvZigqZGVsdGFfbGlzdCkpOwogCUdJVEVSUl9DSEVDS19BTExPQyhkZWx0YV9saXN0KTsKIApAQCAtMTI1MCw0MCArMTI0Miw0OCBAQAogc3RhdGljIGludCB3cml0ZV9jYih2b2lkICpidWYsIHNpemVfdCBsZW4sIHZvaWQgKnBheWxvYWQpCiB7CiAJc3RydWN0IHBhY2tfd3JpdGVfY29udGV4dCAqY3R4ID0gcGF5bG9hZDsKLQlyZXR1cm4gZ2l0X2luZGV4ZXJfc3RyZWFtX2FkZChjdHgtPmluZGV4ZXIsIGJ1ZiwgbGVuLCBjdHgtPnN0YXRzKTsKKwlyZXR1cm4gZ2l0X2luZGV4ZXJfYXBwZW5kKGN0eC0+aW5kZXhlciwgYnVmLCBsZW4sIGN0eC0+c3RhdHMpOwogfQogCiBpbnQgZ2l0X3BhY2tidWlsZGVyX3dyaXRlKAogCWdpdF9wYWNrYnVpbGRlciAqcGIsCiAJY29uc3QgY2hhciAqcGF0aCwKKwl1bnNpZ25lZCBpbnQgbW9kZSwKIAlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3NfY2FsbGJhY2sgcHJvZ3Jlc3NfY2IsCiAJdm9pZCAqcHJvZ3Jlc3NfY2JfcGF5bG9hZCkKIHsKLQlnaXRfaW5kZXhlcl9zdHJlYW0gKmluZGV4ZXI7CisJZ2l0X2luZGV4ZXIgKmluZGV4ZXI7CiAJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzIHN0YXRzOwogCXN0cnVjdCBwYWNrX3dyaXRlX2NvbnRleHQgY3R4OwogCiAJUFJFUEFSRV9QQUNLOwogCi0JaWYgKGdpdF9pbmRleGVyX3N0cmVhbV9uZXcoCi0JCSZpbmRleGVyLCBwYXRoLCBwcm9ncmVzc19jYiwgcHJvZ3Jlc3NfY2JfcGF5bG9hZCkgPCAwKQorCWlmIChnaXRfaW5kZXhlcl9uZXcoCisJCSZpbmRleGVyLCBwYXRoLCBtb2RlLCBwYi0+b2RiLCBwcm9ncmVzc19jYiwgcHJvZ3Jlc3NfY2JfcGF5bG9hZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAljdHguaW5kZXhlciA9IGluZGV4ZXI7CiAJY3R4LnN0YXRzID0gJnN0YXRzOwogCiAJaWYgKGdpdF9wYWNrYnVpbGRlcl9mb3JlYWNoKHBiLCB3cml0ZV9jYiwgJmN0eCkgPCAwIHx8Ci0JCWdpdF9pbmRleGVyX3N0cmVhbV9maW5hbGl6ZShpbmRleGVyLCAmc3RhdHMpIDwgMCkgewotCQlnaXRfaW5kZXhlcl9zdHJlYW1fZnJlZShpbmRleGVyKTsKKwkJZ2l0X2luZGV4ZXJfY29tbWl0KGluZGV4ZXIsICZzdGF0cykgPCAwKSB7CisJCWdpdF9pbmRleGVyX2ZyZWUoaW5kZXhlcik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlnaXRfaW5kZXhlcl9zdHJlYW1fZnJlZShpbmRleGVyKTsKKwlnaXRfb2lkX2NweSgmcGItPnBhY2tfb2lkLCBnaXRfaW5kZXhlcl9oYXNoKGluZGV4ZXIpKTsKKworCWdpdF9pbmRleGVyX2ZyZWUoaW5kZXhlcik7CiAJcmV0dXJuIDA7CiB9CiAKICN1bmRlZiBQUkVQQVJFX1BBQ0sKIAorY29uc3QgZ2l0X29pZCAqZ2l0X3BhY2tidWlsZGVyX2hhc2goZ2l0X3BhY2tidWlsZGVyICpwYikKK3sKKwlyZXR1cm4gJnBiLT5wYWNrX29pZDsKK30KKwogc3RhdGljIGludCBjYl90cmVlX3dhbGsoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgZ2l0X3RyZWVfZW50cnkgKmVudHJ5LCB2b2lkICpwYXlsb2FkKQogewogCXN0cnVjdCB0cmVlX3dhbGtfY29udGV4dCAqY3R4ID0gcGF5bG9hZDsKQEAgLTEzNDYsNiArMTM0NiwxNyBAQAogCXJldHVybiBwYi0+bnJfd3JpdHRlbjsKIH0KIAoraW50IGdpdF9wYWNrYnVpbGRlcl9zZXRfY2FsbGJhY2tzKGdpdF9wYWNrYnVpbGRlciAqcGIsIGdpdF9wYWNrYnVpbGRlcl9wcm9ncmVzcyBwcm9ncmVzc19jYiwgdm9pZCAqcHJvZ3Jlc3NfY2JfcGF5bG9hZCkKK3sKKwlpZiAoIXBiKQorCQlyZXR1cm4gLTE7CisKKwlwYi0+cHJvZ3Jlc3NfY2IgPSBwcm9ncmVzc19jYjsKKwlwYi0+cHJvZ3Jlc3NfY2JfcGF5bG9hZCA9IHByb2dyZXNzX2NiX3BheWxvYWQ7CisKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBnaXRfcGFja2J1aWxkZXJfZnJlZShnaXRfcGFja2J1aWxkZXIgKnBiKQogewogCWlmIChwYiA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc3JjL3BhY2stb2JqZWN0cy5oIGIvc3JjL3BhY2stb2JqZWN0cy5oCmluZGV4IDhlN2JhN2YuLjBjOTRhNWEgMTAwNjQ0Ci0tLSBhL3NyYy9wYWNrLW9iamVjdHMuaAorKysgYi9zcmMvcGFjay1vYmplY3RzLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJuZXRvcHMuaCIKIAogI2luY2x1ZGUgImdpdDIvb2lkLmgiCisjaW5jbHVkZSAiZ2l0Mi9wYWNrLmgiCiAKICNkZWZpbmUgR0lUX1BBQ0tfV0lORE9XIDEwIC8qIG51bWJlciBvZiBvYmplY3RzIHRvIHBvc3NpYmx5IGRlbHRhIGFnYWluc3QgKi8KICNkZWZpbmUgR0lUX1BBQ0tfREVQVEggNTAgLyogbWF4IGRlbHRhIGRlcHRoICovCkBAIC03OSw2ICs4MCwxMCBAQAogCiAJaW50IG5yX3RocmVhZHM7IC8qIG5yIG9mIHRocmVhZHMgdG8gdXNlICovCiAKKwlnaXRfcGFja2J1aWxkZXJfcHJvZ3Jlc3MgcHJvZ3Jlc3NfY2I7CisJdm9pZCAqcHJvZ3Jlc3NfY2JfcGF5bG9hZDsKKwlkb3VibGUgbGFzdF9wcm9ncmVzc19yZXBvcnRfdGltZTsgLyogdGhlIHRpbWUgcHJvZ3Jlc3Mgd2FzIGxhc3QgcmVwb3J0ZWQgKi8KKwogCWJvb2wgZG9uZTsKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9wYWNrLmMgYi9zcmMvcGFjay5jCmluZGV4IDdjZTcwOTkuLjY0NGIyZDQgMTAwNjQ0Ci0tLSBhL3NyYy9wYWNrLmMKKysrIGIvc3JjL3BhY2suYwpAQCAtMzI5LDggKzMyOSwxMCBAQAogCW1lbWNweShpZHhfbmFtZSwgcC0+cGFja19uYW1lLCBiYXNlX2xlbik7CiAJbWVtY3B5KGlkeF9uYW1lICsgYmFzZV9sZW4sICIuaWR4Iiwgc2l6ZW9mKCIuaWR4IikpOwogCi0JaWYgKChlcnJvciA9IGdpdF9tdXRleF9sb2NrKCZwLT5sb2NrKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfbXV0ZXhfbG9jaygmcC0+bG9jaykpIDwgMCkgeworCQlnaXRfX2ZyZWUoaWR4X25hbWUpOwogCQlyZXR1cm4gZXJyb3I7CisJfQogCiAJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gLTEpCiAJCWVycm9yID0gcGFja19pbmRleF9jaGVjayhpZHhfbmFtZSwgcCk7CkBAIC0zNjIsNiArMzY0LDM4IEBACiAJcmV0dXJuIGdpdF9td2luZG93X29wZW4oJnAtPm13Ziwgd19jdXJzb3IsIG9mZnNldCwgMjAsIGxlZnQpOwogIH0KIAorLyoKKyAqIFRoZSBwZXItb2JqZWN0IGhlYWRlciBpcyBhIHByZXR0eSBkZW5zZSB0aGluZywgd2hpY2ggaXMKKyAqICAtIGZpcnN0IGJ5dGU6IGxvdyBmb3VyIGJpdHMgYXJlICJzaXplIiwKKyAqICAgIHRoZW4gdGhyZWUgYml0cyBvZiAidHlwZSIsCisgKiAgICB3aXRoIHRoZSBoaWdoIGJpdCBiZWluZyAic2l6ZSBjb250aW51ZXMiLgorICogIC0gZWFjaCBieXRlIGFmdGVyd2FyZHM6IGxvdyBzZXZlbiBiaXRzIGFyZSBzaXplIGNvbnRpbnVhdGlvbiwKKyAqICAgIHdpdGggdGhlIGhpZ2ggYml0IGJlaW5nICJzaXplIGNvbnRpbnVlcyIKKyAqLworc2l6ZV90IGdpdF9wYWNrZmlsZV9fb2JqZWN0X2hlYWRlcih1bnNpZ25lZCBjaGFyICpoZHIsIHNpemVfdCBzaXplLCBnaXRfb3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpoZHJfYmFzZTsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlhc3NlcnQodHlwZSA+PSBHSVRfT0JKX0NPTU1JVCAmJiB0eXBlIDw9IEdJVF9PQkpfUkVGX0RFTFRBKTsKKworCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBjaHVua2VkIG9iamVjdHM7IHNlZSBnaXQuZ2l0IDZjMGQxOWIxICovCisKKwljID0gKHVuc2lnbmVkIGNoYXIpKCh0eXBlIDw8IDQpIHwgKHNpemUgJiAxNSkpOworCXNpemUgPj49IDQ7CisJaGRyX2Jhc2UgPSBoZHI7CisKKwl3aGlsZSAoc2l6ZSkgeworCQkqaGRyKysgPSBjIHwgMHg4MDsKKwkJYyA9IHNpemUgJiAweDdmOworCQlzaXplID4+PSA3OworCX0KKwkqaGRyKysgPSBjOworCisJcmV0dXJuIChoZHIgLSBoZHJfYmFzZSk7Cit9CisKKwogc3RhdGljIGludCBwYWNrZmlsZV91bnBhY2tfaGVhZGVyMSgKIAkJdW5zaWduZWQgbG9uZyAqdXNlZHAsCiAJCXNpemVfdCAqc2l6ZXAsCkBAIC04MjAsNyArODU0LDcgQEAKIAogCWdpdF9td2luZG93X2ZyZWVfYWxsKCZwLT5td2YpOwogCi0JaWYgKHAtPm13Zi5mZCAhPSAtMSkKKwlpZiAocC0+bXdmLmZkID49IDApCiAJCXBfY2xvc2UocC0+bXdmLmZkKTsKIAogCXBhY2tfaW5kZXhfZnJlZShwKTsKQEAgLTkwMyw3ICs5MzcsOCBAQAogY2xlYW51cDoKIAlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkludmFsaWQgcGFja2ZpbGUgJyVzJyIsIHAtPnBhY2tfbmFtZSk7CiAKLQlwX2Nsb3NlKHAtPm13Zi5mZCk7CisJaWYgKHAtPm13Zi5mZCA+PSAwKQorCQlwX2Nsb3NlKHAtPm13Zi5mZCk7CiAJcC0+bXdmLmZkID0gLTE7CiAKIAlnaXRfbXV0ZXhfdW5sb2NrKCZwLT5sb2NrKTsKQEAgLTExMDcsOCArMTE0MiwxMSBAQAogCQlzaG9ydF9vaWQtPmlkWzBdLCBzaG9ydF9vaWQtPmlkWzFdLCBzaG9ydF9vaWQtPmlkWzJdLCBsbywgaGksIHAtPm51bV9vYmplY3RzKTsKICNlbmRpZgogCi0JLyogVXNlIGdpdC5naXQgbG9va3VwIGNvZGUgKi8KKyNpZmRlZiBHSVRfVVNFX0xPT0tVUAogCXBvcyA9IHNoYTFfZW50cnlfcG9zKGluZGV4LCBzdHJpZGUsIDAsIGxvLCBoaSwgcC0+bnVtX29iamVjdHMsIHNob3J0X29pZC0+aWQpOworI2Vsc2UKKwlwb3MgPSBzaGExX3Bvc2l0aW9uKGluZGV4LCBzdHJpZGUsIGxvLCBoaSwgc2hvcnRfb2lkLT5pZCk7CisjZW5kaWYKIAogCWlmIChwb3MgPj0gMCkgewogCQkvKiBBbiBvYmplY3QgbWF0Y2hpbmcgZXhhY3RseSB0aGUgb2lkIHdhcyBmb3VuZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BhY2suaCBiL3NyYy9wYWNrLmgKaW5kZXggYWVlYWM5Yy4uMjgxNDZhYiAxMDA2NDQKLS0tIGEvc3JjL3BhY2suaAorKysgYi9zcmMvcGFjay5oCkBAIC0xMTIsNiArMTEyLDggQEAKIAlnaXRfbXdpbmRvdyAqbXc7CiB9IGdpdF9wYWNrZmlsZV9zdHJlYW07CiAKK3NpemVfdCBnaXRfcGFja2ZpbGVfX29iamVjdF9oZWFkZXIodW5zaWduZWQgY2hhciAqaGRyLCBzaXplX3Qgc2l6ZSwgZ2l0X290eXBlIHR5cGUpOworCiBpbnQgZ2l0X3BhY2tmaWxlX3VucGFja19oZWFkZXIoCiAJCXNpemVfdCAqc2l6ZV9wLAogCQlnaXRfb3R5cGUgKnR5cGVfcCwKZGlmZiAtLWdpdCBhL3NyYy9wYXRoLmMgYi9zcmMvcGF0aC5jCmluZGV4IDY0Mzc5NzkuLjc1MGRkM2UgMTAwNjQ0Ci0tLSBhL3NyYy9wYXRoLmMKKysrIGIvc3JjL3BhdGguYwpAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlICJwYXRoLmgiCiAjaW5jbHVkZSAicG9zaXguaCIKICNpZmRlZiBHSVRfV0lOMzIKLSNpbmNsdWRlICJ3aW4zMi9kaXIuaCIKICNpbmNsdWRlICJ3aW4zMi9wb3NpeC5oIgogI2Vsc2UKICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAgLTI0Myw4ICsyNDIsOCBAQAogCiAjaWZkZWYgR0lUX1dJTjMyCiAJLyogQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHdpbmRvd3MgbmV0d29yayBwYXRoPyAqLwotCWVsc2UgaWYgKChwYXRoWzBdID09ICcvJyAmJiBwYXRoWzFdID09ICcvJykgfHwKLQkJKHBhdGhbMF0gPT0gJ1xcJyAmJiBwYXRoWzFdID09ICdcXCcpKQorCWVsc2UgaWYgKChwYXRoWzBdID09ICcvJyAmJiBwYXRoWzFdID09ICcvJyAmJiBwYXRoWzJdICE9ICcvJykgfHwKKwkJKHBhdGhbMF0gPT0gJ1xcJyAmJiBwYXRoWzFdID09ICdcXCcgJiYgcGF0aFsyXSAhPSAnXFwnKSkKIAl7CiAJCW9mZnNldCArPSAyOwogCkBAIC00ODQsNzQgKzQ4Myw5MCBAQAogCiBib29sIGdpdF9wYXRoX2lzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpwYXRoKQogewotCWdpdF9idWYgcGF0aGJ1ZiA9IEdJVF9CVUZfSU5JVDsKIAlIQU5ETEUgaEZpbmQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQl3Y2hhcl90IHdidWZbR0lUX1dJTl9QQVRIXTsKKwlnaXRfd2luMzJfcGF0aCB3YnVmOworCWludCB3YnVmc3o7CiAJV0lOMzJfRklORF9EQVRBVyBmZmQ7CiAJYm9vbCByZXR2YWwgPSB0cnVlOwogCi0JaWYgKCFnaXRfcGF0aF9pc2RpcihwYXRoKSkgcmV0dXJuIGZhbHNlOworCWlmICghZ2l0X3BhdGhfaXNkaXIocGF0aCkpCisJCXJldHVybiBmYWxzZTsKIAotCWdpdF9idWZfcHJpbnRmKCZwYXRoYnVmLCAiJXNcXCoiLCBwYXRoKTsKLQlnaXRfX3V0ZjhfdG9fMTYod2J1ZiwgR0lUX1dJTl9QQVRILCBnaXRfYnVmX2NzdHIoJnBhdGhidWYpKTsKKwl3YnVmc3ogPSBnaXRfd2luMzJfcGF0aF9mcm9tX2Mod2J1ZiwgcGF0aCk7CisJaWYgKCF3YnVmc3ogfHwgd2J1ZnN6ICsgMiA+IEdJVF9XSU5fUEFUSF9VVEYxNikKKwkJcmV0dXJuIGZhbHNlOworCW1lbWNweSgmd2J1Zlt3YnVmc3ogLSAxXSwgTCJcXCoiLCAzICogc2l6ZW9mKHdjaGFyX3QpKTsKIAogCWhGaW5kID0gRmluZEZpcnN0RmlsZVcod2J1ZiwgJmZmZCk7Ci0JaWYgKElOVkFMSURfSEFORExFX1ZBTFVFID09IGhGaW5kKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiQ291bGRuJ3Qgb3BlbiAnJXMnIiwgcGF0aCk7CisJaWYgKElOVkFMSURfSEFORExFX1ZBTFVFID09IGhGaW5kKQogCQlyZXR1cm4gZmFsc2U7Ci0JfQogCiAJZG8gewogCQlpZiAoIWdpdF9wYXRoX2lzX2RvdF9vcl9kb3Rkb3RXKGZmZC5jRmlsZU5hbWUpKSB7CiAJCQlyZXR2YWwgPSBmYWxzZTsKKwkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZSAoRmluZE5leHRGaWxlVyhoRmluZCwgJmZmZCkgIT0gMCk7CiAKIAlGaW5kQ2xvc2UoaEZpbmQpOwotCWdpdF9idWZfZnJlZSgmcGF0aGJ1Zik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogI2Vsc2UKIAorc3RhdGljIGludCBwYXRoX2ZvdW5kX2VudHJ5KHZvaWQgKnBheWxvYWQsIGdpdF9idWYgKnBhdGgpCit7CisJR0lUX1VOVVNFRChwYXlsb2FkKTsKKwlyZXR1cm4gIWdpdF9wYXRoX2lzX2RvdF9vcl9kb3Rkb3QocGF0aC0+cHRyKTsKK30KKwogYm9vbCBnaXRfcGF0aF9pc19lbXB0eV9kaXIoY29uc3QgY2hhciAqcGF0aCkKIHsKLQlESVIgKmRpciA9IE5VTEw7Ci0Jc3RydWN0IGRpcmVudCAqZTsKLQlib29sIHJldHZhbCA9IHRydWU7CisJaW50IGVycm9yOworCWdpdF9idWYgZGlyID0gR0lUX0JVRl9JTklUOwogCi0JaWYgKCFnaXRfcGF0aF9pc2RpcihwYXRoKSkgcmV0dXJuIGZhbHNlOwotCi0JZGlyID0gb3BlbmRpcihwYXRoKTsKLQlpZiAoIWRpcikgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkNvdWxkbid0IG9wZW4gJyVzJyIsIHBhdGgpOworCWlmICghZ2l0X3BhdGhfaXNkaXIocGF0aCkpCiAJCXJldHVybiBmYWxzZTsKLQl9CiAKLQl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKLQkJaWYgKCFnaXRfcGF0aF9pc19kb3Rfb3JfZG90ZG90KGUtPmRfbmFtZSkpIHsKLQkJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsCi0JCQkJCQkgICInJXMnIGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeSIsIHBhdGgpOwotCQkJcmV0dmFsID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQotCX0KLQljbG9zZWRpcihkaXIpOworCWlmICghKGVycm9yID0gZ2l0X2J1Zl9zZXRzKCZkaXIsIHBhdGgpKSkKKwkJZXJyb3IgPSBnaXRfcGF0aF9kaXJlYWNoKCZkaXIsIDAsIHBhdGhfZm91bmRfZW50cnksIE5VTEwpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlnaXRfYnVmX2ZyZWUoJmRpcik7CisKKwlyZXR1cm4gIWVycm9yOwogfQorCiAjZW5kaWYKIAoraW50IGdpdF9wYXRoX3NldF9lcnJvcihpbnQgZXJybm9fdmFsdWUsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmFjdGlvbikKK3sKKwlzd2l0Y2ggKGVycm5vX3ZhbHVlKSB7CisJY2FzZSBFTk9FTlQ6CisJY2FzZSBFTk9URElSOgorCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkNvdWxkIG5vdCBmaW5kICclcycgdG8gJXMiLCBwYXRoLCBhY3Rpb24pOworCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKKworCWNhc2UgRUlOVkFMOgorCWNhc2UgRU5BTUVUT09MT05HOgorCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkludmFsaWQgcGF0aCBmb3IgZmlsZXN5c3RlbSAnJXMnIiwgcGF0aCk7CisJCXJldHVybiBHSVRfRUlOVkFMSURTUEVDOworCisJY2FzZSBFRVhJU1Q6CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkICVzIC0gJyVzJyBhbHJlYWR5IGV4aXN0cyIsIGFjdGlvbiwgcGF0aCk7CisJCXJldHVybiBHSVRfRUVYSVNUUzsKKworCWRlZmF1bHQ6CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiQ291bGQgbm90ICVzICclcyciLCBhY3Rpb24sIHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorfQorCiBpbnQgZ2l0X3BhdGhfbHN0YXQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0KQogewotCWludCBlcnIgPSAwOworCWlmIChwX2xzdGF0KHBhdGgsIHN0KSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCWlmIChwX2xzdGF0KHBhdGgsIHN0KSA8IDApIHsKLQkJZXJyID0gKGVycm5vID09IEVOT0VOVCkgPyBHSVRfRU5PVEZPVU5EIDogLTE7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIHN0YXQgZmlsZSAnJXMnIiwgcGF0aCk7Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gZ2l0X3BhdGhfc2V0X2Vycm9yKGVycm5vLCBwYXRoLCAic3RhdCIpOwogfQogCiBzdGF0aWMgYm9vbCBfY2hlY2tfZGlyX2NvbnRlbnRzKApAQCAtNTY0LDcgKzU3OSw3IEBACiAJc2l6ZV90IHN1Yl9zaXplID0gc3RybGVuKHN1Yik7CiAKIAkvKiBsZWF2ZSBiYXNlIHZhbGlkIGV2ZW4gaWYgd2UgY291bGQgbm90IG1ha2Ugc3BhY2UgZm9yIHN1YmRpciAqLwotCWlmIChnaXRfYnVmX3RyeV9ncm93KGRpciwgZGlyX3NpemUgKyBzdWJfc2l6ZSArIDIsIGZhbHNlKSA8IDApCisJaWYgKGdpdF9idWZfdHJ5X2dyb3coZGlyLCBkaXJfc2l6ZSArIHN1Yl9zaXplICsgMiwgZmFsc2UsIGZhbHNlKSA8IDApCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIHNhdmUgZXhjdXJzaW9uICovCkBAIC02MDMsNyArNjE4LDcgQEAKIAl9CiAKIAkvKiBjYWxsIGRpcm5hbWUgaWYgdGhpcyBpcyBub3QgYSBkaXJlY3RvcnkgKi8KLQlpZiAoIWVycm9yICYmIGdpdF9wYXRoX2lzZGlyKGRpci0+cHRyKSA9PSBmYWxzZSkKKwlpZiAoIWVycm9yKSAvKiAmJiBnaXRfcGF0aF9pc2RpcihkaXItPnB0cikgPT0gZmFsc2UpICovCiAJCWVycm9yID0gZ2l0X3BhdGhfZGlybmFtZV9yKGRpciwgZGlyLT5wdHIpOwogCiAJaWYgKCFlcnJvcikKQEAgLTY0NSwxMiArNjYwLDMzIEBACiAJCQkvKiBkbyBub3RoaW5nIHdpdGggc2luZ2xldG9uIGRvdCAqLzsKIAogCQllbHNlIGlmIChsZW4gPT0gMiAmJiBmcm9tWzBdID09ICcuJyAmJiBmcm9tWzFdID09ICcuJykgewotCQkJd2hpbGUgKHRvID4gYmFzZSAmJiB0b1stMV0gPT0gJy8nKSB0by0tOwotCQkJd2hpbGUgKHRvID4gYmFzZSAmJiB0b1stMV0gIT0gJy8nKSB0by0tOwotCQl9CisJCQkvKiBlcnJvciBvdXQgaWYgdHJ5aW5nIHRvIHVwIG9uZSBmcm9tIGEgaGFyZCBiYXNlICovCisJCQlpZiAodG8gPT0gYmFzZSAmJiBjZWlsaW5nICE9IDApIHsKKwkJCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELAorCQkJCQkiQ2Fubm90IHN0cmlwIHJvb3QgY29tcG9uZW50IG9mZiB1cmwiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAKLQkJZWxzZSB7Ci0JCQlpZiAoKm5leHQgPT0gJy8nKQorCQkJLyogbm8gbW9yZSBwYXRoIHNlZ21lbnRzIHRvIHN0cmlwLAorCQkJICogdXNlICcuLi8nIGFzIGEgbmV3IGJhc2UgcGF0aCAqLworCQkJaWYgKHRvID09IGJhc2UpIHsKKwkJCQlpZiAoKm5leHQgPT0gJy8nKQorCQkJCQlsZW4rKzsKKworCQkJCWlmICh0byAhPSBmcm9tKQorCQkJCQltZW1tb3ZlKHRvLCBmcm9tLCBsZW4pOworCisJCQkJdG8gKz0gbGVuOworCQkJCS8qIHRoaXMgaXMgbm93IHRoZSBiYXNlLCBjYW4ndCBiYWNrIHVwIGZyb20gYQorCQkJCSAqIHJlbGF0aXZlIHByZWZpeCAqLworCQkJCWJhc2UgPSB0bzsKKwkJCX0gZWxzZSB7CisJCQkJLyogYmFjayB1cCBhIHBhdGggc2VnbWVudCAqLworCQkJCXdoaWxlICh0byA+IGJhc2UgJiYgdG9bLTFdID09ICcvJykgdG8tLTsKKwkJCQl3aGlsZSAodG8gPiBiYXNlICYmIHRvWy0xXSAhPSAnLycpIHRvLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKm5leHQgPT0gJy8nICYmICpmcm9tICE9ICcvJykKIAkJCQlsZW4rKzsKIAogCQkJaWYgKHRvICE9IGZyb20pCkBAIC03MDIsMTQgKzczOCwxMDggQEAKIAlyZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAoYzEgPiBjMikgPyAxIDogMDsKIH0KIAorYm9vbCBnaXRfcGF0aF9oYXNfbm9uX2FzY2lpKGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKQoreworCWNvbnN0IHVpbnQ4X3QgKnNjYW4gPSAoY29uc3QgdWludDhfdCAqKXBhdGgsICplbmQ7CisKKwlmb3IgKGVuZCA9IHNjYW4gKyBwYXRobGVuOyBzY2FuIDwgZW5kOyArK3NjYW4pCisJCWlmICgqc2NhbiAmIDB4ODApCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworI2lmZGVmIEdJVF9VU0VfSUNPTlYKKworaW50IGdpdF9wYXRoX2ljb252X2luaXRfcHJlY29tcG9zZShnaXRfcGF0aF9pY29udl90ICppYykKK3sKKwlnaXRfYnVmX2luaXQoJmljLT5idWYsIDApOworCWljLT5tYXAgPSBpY29udl9vcGVuKEdJVF9QQVRIX1JFUE9fRU5DT0RJTkcsIEdJVF9QQVRIX05BVElWRV9FTkNPRElORyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ2l0X3BhdGhfaWNvbnZfY2xlYXIoZ2l0X3BhdGhfaWNvbnZfdCAqaWMpCit7CisJaWYgKGljKSB7CisJCWlmIChpYy0+bWFwICE9IChpY29udl90KS0xKQorCQkJaWNvbnZfY2xvc2UoaWMtPm1hcCk7CisJCWdpdF9idWZfZnJlZSgmaWMtPmJ1Zik7CisJfQorfQorCitpbnQgZ2l0X3BhdGhfaWNvbnYoZ2l0X3BhdGhfaWNvbnZfdCAqaWMsIGNoYXIgKippbiwgc2l6ZV90ICppbmxlbikKK3sKKwljaGFyICpuZmQgPSAqaW4sICpuZmM7CisJc2l6ZV90IG5mZGxlbiA9ICppbmxlbiwgbmZjbGVuLCB3YW50bGVuID0gbmZkbGVuLCBydjsKKwlpbnQgcmV0cnkgPSAxOworCisJaWYgKCFpYyB8fCBpYy0+bWFwID09IChpY29udl90KS0xIHx8CisJCSFnaXRfcGF0aF9oYXNfbm9uX2FzY2lpKCppbiwgKmlubGVuKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoZ2l0X2J1Zl9ncm93KCZpYy0+YnVmLCB3YW50bGVuKSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJbmZjICAgID0gaWMtPmJ1Zi5wdHIgICArIGljLT5idWYuc2l6ZTsKKwkJbmZjbGVuID0gaWMtPmJ1Zi5hc2l6ZSAtIGljLT5idWYuc2l6ZTsKKworCQlydiA9IGljb252KGljLT5tYXAsICZuZmQsICZuZmRsZW4sICZuZmMsICZuZmNsZW4pOworCisJCWljLT5idWYuc2l6ZSA9IChuZmMgLSBpYy0+YnVmLnB0cik7CisKKwkJaWYgKHJ2ICE9IChzaXplX3QpLTEpCisJCQlicmVhazsKKworCQlpZiAoZXJybm8gIT0gRTJCSUcpCisJCQlnb3RvIGZhaWw7CisKKwkJLyogbWFrZSBzcGFjZSBmb3IgMnggdGhlIHJlbWFpbmluZyBkYXRhIHRvIGJlIGNvbnZlcnRlZAorCQkgKiAod2l0aCBwZXIgcmV0cnkgb3ZlcmhlYWQgdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMpCisJCSAqLworCQl3YW50bGVuID0gaWMtPmJ1Zi5zaXplICsgbWF4KG5mY2xlbiwgbmZkbGVuKSAqIDIgKyAoc2l6ZV90KShyZXRyeSAqIDQpOworCisJCWlmIChyZXRyeSsrID4gNCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlpYy0+YnVmLnB0cltpYy0+YnVmLnNpemVdID0gJ1wwJzsKKworCSppbiAgICA9IGljLT5idWYucHRyOworCSppbmxlbiA9IGljLT5idWYuc2l6ZTsKKworCXJldHVybiAwOworCitmYWlsOgorCWdpdGVycl9zZXQoR0lURVJSX09TLCAiVW5hYmxlIHRvIGNvbnZlcnQgdW5pY29kZSBwYXRoIGRhdGEiKTsKKwlyZXR1cm4gLTE7Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX3N1bikgfHwgZGVmaW5lZChfX0dOVV9fKQordHlwZWRlZiBjaGFyIHBhdGhfZGlyZW50X2RhdGFbc2l6ZW9mKHN0cnVjdCBkaXJlbnQpICsgRklMRU5BTUVfTUFYICsgMV07CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgZGlyZW50IHBhdGhfZGlyZW50X2RhdGE7CisjZW5kaWYKKwogaW50IGdpdF9wYXRoX2RpcmVhY2goCiAJZ2l0X2J1ZiAqcGF0aCwKKwl1aW50MzJfdCBmbGFncywKIAlpbnQgKCpmbikodm9pZCAqLCBnaXRfYnVmICopLAogCXZvaWQgKmFyZykKIHsKKwlpbnQgZXJyb3IgPSAwOwogCXNzaXplX3Qgd2RfbGVuOwogCURJUiAqZGlyOwotCXN0cnVjdCBkaXJlbnQgKmRlLCAqZGVfYnVmOworCXBhdGhfZGlyZW50X2RhdGEgZGVfZGF0YTsKKwlzdHJ1Y3QgZGlyZW50ICpkZSwgKmRlX2J1ZiA9IChzdHJ1Y3QgZGlyZW50ICopJmRlX2RhdGE7CisKKwkodm9pZClmbGFnczsKKworI2lmZGVmIEdJVF9VU0VfSUNPTlYKKwlnaXRfcGF0aF9pY29udl90IGljID0gR0lUX1BBVEhfSUNPTlZfSU5JVDsKKyNlbmRpZgogCiAJaWYgKGdpdF9wYXRoX3RvX2RpcihwYXRoKSA8IDApCiAJCXJldHVybiAtMTsKQEAgLTcyMSw2NCArODUxLDgwIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLSNpZiBkZWZpbmVkKF9fc3VuKSB8fCBkZWZpbmVkKF9fR05VX18pCi0JZGVfYnVmID0gZ2l0X19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJlbnQpICsgRklMRU5BTUVfTUFYICsgMSk7Ci0jZWxzZQotCWRlX2J1ZiA9IGdpdF9fbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGlyZW50KSk7CisjaWZkZWYgR0lUX1VTRV9JQ09OVgorCWlmICgoZmxhZ3MgJiBHSVRfUEFUSF9ESVJfUFJFQ09NUE9TRV9VTklDT0RFKSAhPSAwKQorCQkodm9pZClnaXRfcGF0aF9pY29udl9pbml0X3ByZWNvbXBvc2UoJmljKTsKICNlbmRpZgogCiAJd2hpbGUgKHBfcmVhZGRpcl9yKGRpciwgZGVfYnVmLCAmZGUpID09IDAgJiYgZGUgIT0gTlVMTCkgewotCQlpbnQgcmVzdWx0OworCQljaGFyICpkZV9wYXRoID0gZGUtPmRfbmFtZTsKKwkJc2l6ZV90IGRlX2xlbiA9IHN0cmxlbihkZV9wYXRoKTsKIAotCQlpZiAoZ2l0X3BhdGhfaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJaWYgKGdpdF9wYXRoX2lzX2RvdF9vcl9kb3Rkb3QoZGVfcGF0aCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZ2l0X2J1Zl9wdXRzKHBhdGgsIGRlLT5kX25hbWUpIDwgMCkgewotCQkJY2xvc2VkaXIoZGlyKTsKLQkJCWdpdF9fZnJlZShkZV9idWYpOwotCQkJcmV0dXJuIC0xOwotCQl9CisjaWZkZWYgR0lUX1VTRV9JQ09OVgorCQlpZiAoKGVycm9yID0gZ2l0X3BhdGhfaWNvbnYoJmljLCAmZGVfcGF0aCwgJmRlX2xlbikpIDwgMCkKKwkJCWJyZWFrOworI2VuZGlmCisJCQkJCisJCWlmICgoZXJyb3IgPSBnaXRfYnVmX3B1dChwYXRoLCBkZV9wYXRoLCBkZV9sZW4pKSA8IDApCisJCQlicmVhazsKIAotCQlyZXN1bHQgPSBmbihhcmcsIHBhdGgpOworCQllcnJvciA9IGZuKGFyZywgcGF0aCk7CiAKIAkJZ2l0X2J1Zl90cnVuY2F0ZShwYXRoLCB3ZF9sZW4pOyAvKiByZXN0b3JlIHBhdGggKi8KIAotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJY2xvc2VkaXIoZGlyKTsKLQkJCWdpdF9fZnJlZShkZV9idWYpOwotCQkJcmV0dXJuIC0xOworCQlpZiAoZXJyb3IpIHsKKwkJCWVycm9yID0gR0lUX0VVU0VSOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAljbG9zZWRpcihkaXIpOwotCWdpdF9fZnJlZShkZV9idWYpOwotCXJldHVybiAwOworCisjaWZkZWYgR0lUX1VTRV9JQ09OVgorCWdpdF9wYXRoX2ljb252X2NsZWFyKCZpYyk7CisjZW5kaWYKKworCXJldHVybiBlcnJvcjsKIH0KIAogaW50IGdpdF9wYXRoX2RpcmxvYWQoCiAJY29uc3QgY2hhciAqcGF0aCwKIAlzaXplX3QgcHJlZml4X2xlbiwKIAlzaXplX3QgYWxsb2NfZXh0cmEsCisJdW5zaWduZWQgaW50IGZsYWdzLAogCWdpdF92ZWN0b3IgKmNvbnRlbnRzKQogewogCWludCBlcnJvciwgbmVlZF9zbGFzaDsKIAlESVIgKmRpcjsKLQlzdHJ1Y3QgZGlyZW50ICpkZSwgKmRlX2J1ZjsKIAlzaXplX3QgcGF0aF9sZW47CisJcGF0aF9kaXJlbnRfZGF0YSBkZV9kYXRhOworCXN0cnVjdCBkaXJlbnQgKmRlLCAqZGVfYnVmID0gKHN0cnVjdCBkaXJlbnQgKikmZGVfZGF0YTsKIAotCWFzc2VydChwYXRoICE9IE5VTEwgJiYgY29udGVudHMgIT0gTlVMTCk7CisJKHZvaWQpZmxhZ3M7CisKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJZ2l0X3BhdGhfaWNvbnZfdCBpYyA9IEdJVF9QQVRIX0lDT05WX0lOSVQ7CisjZW5kaWYKKworCWFzc2VydChwYXRoICYmIGNvbnRlbnRzKTsKKwogCXBhdGhfbGVuID0gc3RybGVuKHBhdGgpOwotCWFzc2VydChwYXRoX2xlbiA+IDAgJiYgcGF0aF9sZW4gPj0gcHJlZml4X2xlbik7CiAKKwlpZiAoIXBhdGhfbGVuIHx8IHBhdGhfbGVuIDwgcHJlZml4X2xlbikgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiSW52YWxpZCBkaXJlY3RvcnkgcGF0aCAnJXMnIiwgcGF0aCk7CisJCXJldHVybiAtMTsKKwl9CiAJaWYgKChkaXIgPSBvcGVuZGlyKHBhdGgpKSA9PSBOVUxMKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIG9wZW4gZGlyZWN0b3J5ICclcyciLCBwYXRoKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotI2lmIGRlZmluZWQoX19zdW4pIHx8IGRlZmluZWQoX19HTlVfXykKLQlkZV9idWYgPSBnaXRfX21hbGxvYyhzaXplb2Yoc3RydWN0IGRpcmVudCkgKyBGSUxFTkFNRV9NQVggKyAxKTsKLSNlbHNlCi0JZGVfYnVmID0gZ2l0X19tYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJlbnQpKTsKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJaWYgKChmbGFncyAmIEdJVF9QQVRIX0RJUl9QUkVDT01QT1NFX1VOSUNPREUpICE9IDApCisJCSh2b2lkKWdpdF9wYXRoX2ljb252X2luaXRfcHJlY29tcG9zZSgmaWMpOwogI2VuZGlmCiAKIAlwYXRoICs9IHByZWZpeF9sZW47CkBAIC03ODYsMzQgKzkzMiwzOCBAQAogCW5lZWRfc2xhc2ggPSAocGF0aF9sZW4gPiAwICYmIHBhdGhbcGF0aF9sZW4tMV0gIT0gJy8nKSA/IDEgOiAwOwogCiAJd2hpbGUgKChlcnJvciA9IHBfcmVhZGRpcl9yKGRpciwgZGVfYnVmLCAmZGUpKSA9PSAwICYmIGRlICE9IE5VTEwpIHsKLQkJY2hhciAqZW50cnlfcGF0aDsKLQkJc2l6ZV90IGVudHJ5X2xlbjsKKwkJY2hhciAqZW50cnlfcGF0aCwgKmRlX3BhdGggPSBkZS0+ZF9uYW1lOworCQlzaXplX3QgYWxsb2Nfc2l6ZSwgZGVfbGVuID0gc3RybGVuKGRlX3BhdGgpOwogCi0JCWlmIChnaXRfcGF0aF9pc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQlpZiAoZ2l0X3BhdGhfaXNfZG90X29yX2RvdGRvdChkZV9wYXRoKSkKIAkJCWNvbnRpbnVlOwogCi0JCWVudHJ5X2xlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9pY29udigmaWMsICZkZV9wYXRoLCAmZGVfbGVuKSkgPCAwKQorCQkJYnJlYWs7CisjZW5kaWYKIAotCQllbnRyeV9wYXRoID0gZ2l0X19tYWxsb2MoCi0JCQlwYXRoX2xlbiArIG5lZWRfc2xhc2ggKyBlbnRyeV9sZW4gKyAxICsgYWxsb2NfZXh0cmEpOwotCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoZW50cnlfcGF0aCk7CisJCWFsbG9jX3NpemUgPSBwYXRoX2xlbiArIG5lZWRfc2xhc2ggKyBkZV9sZW4gKyAxICsgYWxsb2NfZXh0cmE7CisJCWlmICgoZW50cnlfcGF0aCA9IGdpdF9fY2FsbG9jKGFsbG9jX3NpemUsIDEpKSA9PSBOVUxMKSB7CisJCQllcnJvciA9IC0xOworCQkJYnJlYWs7CisJCX0KIAogCQlpZiAocGF0aF9sZW4pCiAJCQltZW1jcHkoZW50cnlfcGF0aCwgcGF0aCwgcGF0aF9sZW4pOwogCQlpZiAobmVlZF9zbGFzaCkKIAkJCWVudHJ5X3BhdGhbcGF0aF9sZW5dID0gJy8nOwotCQltZW1jcHkoJmVudHJ5X3BhdGhbcGF0aF9sZW4gKyBuZWVkX3NsYXNoXSwgZGUtPmRfbmFtZSwgZW50cnlfbGVuKTsKLQkJZW50cnlfcGF0aFtwYXRoX2xlbiArIG5lZWRfc2xhc2ggKyBlbnRyeV9sZW5dID0gJ1wwJzsKKwkJbWVtY3B5KCZlbnRyeV9wYXRoW3BhdGhfbGVuICsgbmVlZF9zbGFzaF0sIGRlX3BhdGgsIGRlX2xlbik7CiAKLQkJaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KGNvbnRlbnRzLCBlbnRyeV9wYXRoKSA8IDApIHsKLQkJCWNsb3NlZGlyKGRpcik7Ci0JCQlnaXRfX2ZyZWUoZGVfYnVmKTsKLQkJCXJldHVybiAtMTsKLQkJfQorCQlpZiAoKGVycm9yID0gZ2l0X3ZlY3Rvcl9pbnNlcnQoY29udGVudHMsIGVudHJ5X3BhdGgpKSA8IDApCisJCQlicmVhazsKIAl9CiAKIAljbG9zZWRpcihkaXIpOwotCWdpdF9fZnJlZShkZV9idWYpOworCisjaWZkZWYgR0lUX1VTRV9JQ09OVgorCWdpdF9wYXRoX2ljb252X2NsZWFyKCZpYyk7CisjZW5kaWYKIAogCWlmIChlcnJvciAhPSAwKQogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byBwcm9jZXNzIGRpcmVjdG9yeSBlbnRyeSBpbiAnJXMnIiwgcGF0aCk7CkBAIC04MzYsNyArOTg2LDcgQEAKIGludCBnaXRfcGF0aF9kaXJsb2FkX3dpdGhfc3RhdCgKIAljb25zdCBjaGFyICpwYXRoLAogCXNpemVfdCBwcmVmaXhfbGVuLAotCWJvb2wgaWdub3JlX2Nhc2UsCisJdW5zaWduZWQgaW50IGZsYWdzLAogCWNvbnN0IGNoYXIgKnN0YXJ0X3N0YXQsCiAJY29uc3QgY2hhciAqZW5kX3N0YXQsCiAJZ2l0X3ZlY3RvciAqY29udGVudHMpCkBAIC04NTMsMTMgKzEwMDMsMTQgQEAKIAkJcmV0dXJuIC0xOwogCiAJZXJyb3IgPSBnaXRfcGF0aF9kaXJsb2FkKAotCQlwYXRoLCBwcmVmaXhfbGVuLCBzaXplb2YoZ2l0X3BhdGhfd2l0aF9zdGF0KSArIDEsIGNvbnRlbnRzKTsKKwkJcGF0aCwgcHJlZml4X2xlbiwgc2l6ZW9mKGdpdF9wYXRoX3dpdGhfc3RhdCkgKyAxLCBmbGFncywgY29udGVudHMpOwogCWlmIChlcnJvciA8IDApIHsKIAkJZ2l0X2J1Zl9mcmVlKCZmdWxsKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCXN0cm5jb21wID0gaWdub3JlX2Nhc2UgPyBnaXRfX3N0cm5jYXNlY21wIDogZ2l0X19zdHJuY21wOworCXN0cm5jb21wID0gKGZsYWdzICYgR0lUX1BBVEhfRElSX0lHTk9SRV9DQVNFKSAhPSAwID8KKwkJZ2l0X19zdHJuY2FzZWNtcCA6IGdpdF9fc3RybmNtcDsKIAogCS8qIHN0YXQgc3RydWN0IGF0IHN0YXJ0IG9mIGdpdF9wYXRoX3dpdGhfc3RhdCwgc28gc2hpZnQgcGF0aCB0ZXh0ICovCiAJZ2l0X3ZlY3Rvcl9mb3JlYWNoKGNvbnRlbnRzLCBpLCBwcykgewpAQCAtODgwLDggKzEwMzEsMTYgQEAKIAkJZ2l0X2J1Zl90cnVuY2F0ZSgmZnVsbCwgcHJlZml4X2xlbik7CiAKIAkJaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJmZ1bGwsIGZ1bGwucHRyLCBwcy0+cGF0aCkpIDwgMCB8fAotCQkJKGVycm9yID0gZ2l0X3BhdGhfbHN0YXQoZnVsbC5wdHIsICZwcy0+c3QpKSA8IDApCisJCQkoZXJyb3IgPSBnaXRfcGF0aF9sc3RhdChmdWxsLnB0ciwgJnBzLT5zdCkpIDwgMCkgeworCQkJaWYgKGVycm9yID09IEdJVF9FTk9URk9VTkQpIHsKKwkJCQlnaXRlcnJfY2xlYXIoKTsKKwkJCQllcnJvciA9IDA7CisJCQkJZ2l0X3ZlY3Rvcl9yZW1vdmUoY29udGVudHMsIGktLSk7CisJCQkJY29udGludWU7CisJCQl9CisKIAkJCWJyZWFrOworCQl9CiAKIAkJaWYgKFNfSVNESVIocHMtPnN0LnN0X21vZGUpKSB7CiAJCQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbCwgZnVsbC5wdHIsICIuZ2l0IikpIDwgMCkKZGlmZiAtLWdpdCBhL3NyYy9wYXRoLmggYi9zcmMvcGF0aC5oCmluZGV4IGVhZDRmYTMuLjNkYWFmZDIgMTAwNjQ0Ci0tLSBhL3NyYy9wYXRoLmgKKysrIGIvc3JjL3BhdGguaApAQCAtMTc1LDcgKzE3NSw2IEBACiAgKgogICogQHBhcmFtIHBhcmVudCBEaXJlY3RvcnkgcGF0aCB0aGF0IG1pZ2h0IGNvbnRhaW4gc3ViZGlyCiAgKiBAcGFyYW0gc3ViZGlyIFN1YmRpcmVjdG9yeSBuYW1lIHRvIGxvb2sgZm9yIGluIHBhcmVudAotICogQHBhcmFtIGFwcGVuZF9pZl9leGlzdHMgSWYgdHJ1ZSwgdGhlbiBzdWJkaXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcGFyZW50IHBhdGggaWYgaXQgZG9lcyBleGlzdAogICogQHJldHVybiB0cnVlIGlmIHN1YmRpcmVjdG9yeSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS4KICAqLwogZXh0ZXJuIGJvb2wgZ2l0X3BhdGhfY29udGFpbnNfZGlyKGdpdF9idWYgKnBhcmVudCwgY29uc3QgY2hhciAqc3ViZGlyKTsKQEAgLTE4NSw3ICsxODQsNiBAQAogICoKICAqIEBwYXJhbSBkaXIgRGlyZWN0b3J5IHBhdGggdGhhdCBtaWdodCBjb250YWluIGZpbGUKICAqIEBwYXJhbSBmaWxlIEZpbGUgbmFtZSB0byBsb29rIGZvciBpbiBwYXJlbnQKLSAqIEBwYXJhbSBhcHBlbmRfaWZfZXhpc3RzIElmIHRydWUsIHRoZW4gZmlsZSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBwYXRoIGlmIGl0IGRvZXMgZXhpc3QKICAqIEByZXR1cm4gdHJ1ZSBpZiBmaWxlIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBleHRlcm4gYm9vbCBnaXRfcGF0aF9jb250YWluc19maWxlKGdpdF9idWYgKmRpciwgY29uc3QgY2hhciAqZmlsZSk7CkBAIC0yNDQsMjEgKzI0MiwyOCBAQAogICovCiBleHRlcm4gaW50IGdpdF9wYXRoX2FwcGx5X3JlbGF0aXZlKGdpdF9idWYgKnRhcmdldCwgY29uc3QgY2hhciAqcmVscGF0aCk7CiAKK2VudW0geworCUdJVF9QQVRIX0RJUl9JR05PUkVfQ0FTRSA9ICgxdSA8PCAwKSwKKwlHSVRfUEFUSF9ESVJfUFJFQ09NUE9TRV9VTklDT0RFID0gKDF1IDw8IDEpLAorfTsKKwogLyoqCiAgKiBXYWxrIGVhY2ggZGlyZWN0b3J5IGVudHJ5LCBleGNlcHQgJy4nIGFuZCAnLi4nLCBjYWxsaW5nIGZuKHN0YXRlKS4KICAqCi0gKiBAcGFyYW0gcGF0aGJ1ZiBidWZmZXIgdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBpbml0aWFsIGRpcmVjdG9yeQorICogQHBhcmFtIHBhdGhidWYgQnVmZmVyIHRoZSBmdW5jdGlvbiByZWFkcyB0aGUgaW5pdGlhbCBkaXJlY3RvcnkKICAqIAkJcGF0aCBmcm9tLCBhbmQgdXBkYXRlcyB3aXRoIGVhY2ggc3VjY2Vzc2l2ZSBlbnRyeSdzIG5hbWUuCi0gKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gaW52b2tlIHdpdGggZWFjaCBlbnRyeS4gVGhlIGZpcnN0IGFyZyBpcwotICoJCXRoZSBpbnB1dCBzdGF0ZSBhbmQgdGhlIHNlY29uZCBhcmcgaXMgcGF0aGJ1Zi4gVGhlIGZ1bmN0aW9uCi0gKgkJbWF5IG1vZGlmeSB0aGUgcGF0aGJ1ZiwgYnV0IG9ubHkgYnkgYXBwZW5kaW5nIG5ldyB0ZXh0LgotICogQHBhcmFtIHN0YXRlIHRvIHBhc3MgdG8gZm4gYXMgdGhlIGZpcnN0IGFyZy4KKyAqIEBwYXJhbSBmbGFncyBDb21iaW5hdGlvbiBvZiBHSVRfUEFUSF9ESVIgZmxhZ3MuCisgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZm9yIGVhY2ggZW50cnkuIFBhc3NlZCB0aGUgYHBheWxvYWRgIGFuZCBlYWNoCisgKgkJc3VjY2Vzc2l2ZSBwYXRoIGluc2lkZSB0aGUgZGlyZWN0b3J5IGFzIGEgZnVsbCBwYXRoLiAgVGhpcyBtYXkKKyAqCQlzYWZlbHkgYXBwZW5kIHRleHQgdG8gdGhlIHBhdGhidWYgaWYgbmVlZGVkLgorICogQHBhcmFtIHBheWxvYWQgUGFzc2VkIHRvIGNhbGxiYWNrIGFzIGZpcnN0IGFyZ3VtZW50LgogICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEdJVF9FVVNFUiBvbiBub24temVybyBjYWxsYmFjaywgb3IgZXJyb3IgY29kZQogICovCiBleHRlcm4gaW50IGdpdF9wYXRoX2RpcmVhY2goCiAJZ2l0X2J1ZiAqcGF0aGJ1ZiwKLQlpbnQgKCpmbikodm9pZCAqLCBnaXRfYnVmICopLAotCXZvaWQgKnN0YXRlKTsKKwl1aW50MzJfdCBmbGFncywKKwlpbnQgKCpjYWxsYmFjaykodm9pZCAqcGF5bG9hZCwgZ2l0X2J1ZiAqcGF0aCksCisJdm9pZCAqcGF5bG9hZCk7CiAKIC8qKgogICogU29ydCBmdW5jdGlvbiB0byBvcmRlciB0d28gcGF0aHMKQEAgLTI3OCwxOSArMjgzLDE5IEBACiAgKiBAcGFyYW0gcGF0aGJ1ZiBCdWZmZXIgdGhlIGZ1bmN0aW9uIHJlYWRzIHRoZSBkaXJlY3RvcnkgZnJvbSBhbmQKICAqCQlhbmQgdXBkYXRlcyB3aXRoIGVhY2ggc3VjY2Vzc2l2ZSBuYW1lLgogICogQHBhcmFtIGNlaWxpbmcgUHJlZml4IG9mIHBhdGggYXQgd2hpY2ggdG8gc3RvcCB3YWxraW5nIHVwLiAgSWYgTlVMTCwKLSAqICAgICAgdGhpcyB3aWxsIHdhbGsgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIHJvb3QuICBJZiBub3QgYSBwcmVmaXggb2YKLSAqICAgICAgcGF0aGJ1ZiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhIHNpbmdsZSB0aW1lIG9uIHRoZQotICogICAgICBvcmlnaW5hbCBpbnB1dCBwYXRoLgotICogQHBhcmFtIGZuIEZ1bmN0aW9uIHRvIGludm9rZSBvbiBlYWNoIHBhdGguICBUaGUgZmlyc3QgYXJnIGlzIHRoZQotICoJCWlucHV0IHNhdHRlIGFuZCB0aGUgc2Vjb25kIGFyZyBpcyB0aGUgcGF0aGJ1Zi4gIFRoZSBmdW5jdGlvbgotICoJCXNob3VsZCBub3QgbW9kaWZ5IHRoZSBwYXRoYnVmLgorICoJCXRoaXMgd2lsbCB3YWxrIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSByb290LiAgSWYgbm90IGEgcHJlZml4IG9mCisgKgkJcGF0aGJ1ZiwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCBhIHNpbmdsZSB0aW1lIG9uIHRoZQorICoJCW9yaWdpbmFsIGlucHV0IHBhdGguCisgKiBAcGFyYW0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gaW52b2tlIG9uIGVhY2ggcGF0aC4gIFBhc3NlZCB0aGUgYHBheWxvYWRgCisgKgkJYW5kIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgY3VycmVudCBwYXRoLiAgVGhlIHBhdGggc2hvdWxkIG5vdAorICoJCWJlIG1vZGlmaWVkIGluIGFueSB3YXkuCiAgKiBAcGFyYW0gc3RhdGUgUGFzc2VkIHRvIGZuIGFzIHRoZSBmaXJzdCBhdGguCiAgKi8KIGV4dGVybiBpbnQgZ2l0X3BhdGhfd2Fsa191cCgKIAlnaXRfYnVmICpwYXRoYnVmLAogCWNvbnN0IGNoYXIgKmNlaWxpbmcsCi0JaW50ICgqZm4pKHZvaWQgKnN0YXRlLCBnaXRfYnVmICopLAotCXZvaWQgKnN0YXRlKTsKKwlpbnQgKCpjYWxsYmFjaykodm9pZCAqcGF5bG9hZCwgZ2l0X2J1ZiAqcGF0aCksCisJdm9pZCAqcGF5bG9hZCk7CiAKIC8qKgogICogTG9hZCBhbGwgZGlyZWN0b3J5IGVudHJpZXMgKGV4Y2VwdCAnLicgYW5kICcuLicpIGludG8gYSB2ZWN0b3IuCkBAIC0zMDYsMTIgKzMxMSwxNCBAQAogICogCQlwcmVmaXhfbGVuIDMsIHRoZSBlbnRyaWVzIHdpbGwgbG9vayBsaWtlICJiL2UxIiwgImIvZTIiLCBldGMuCiAgKiBAcGFyYW0gYWxsb2NfZXh0cmEgRXh0cmEgYnl0ZXMgdG8gYWRkIHRvIGVhY2ggc3RyaW5nIGFsbG9jYXRpb24gaW4KICAqIAkJY2FzZSB5b3Ugd2FudCB0byBhcHBlbmQgYW55dGhpbmcgZnVubnkuCisgKiBAcGFyYW0gZmxhZ3MgQ29tYmluYXRpb24gb2YgR0lUX1BBVEhfRElSIGZsYWdzLgogICogQHBhcmFtIGNvbnRlbnRzIFZlY3RvciB0byBmaWxsIHdpdGggZGlyZWN0b3J5IGVudHJ5IG5hbWVzLgogICovCiBleHRlcm4gaW50IGdpdF9wYXRoX2RpcmxvYWQoCiAJY29uc3QgY2hhciAqcGF0aCwKIAlzaXplX3QgcHJlZml4X2xlbiwKIAlzaXplX3QgYWxsb2NfZXh0cmEsCisJdWludDMyX3QgZmxhZ3MsCiAJZ2l0X3ZlY3RvciAqY29udGVudHMpOwogCiAKQEAgLTMzOCw3ICszNDUsNyBAQAogICoKICAqIEBwYXJhbSBwYXRoIFRoZSBkaXJlY3RvcnkgdG8gcmVhZCBmcm9tCiAgKiBAcGFyYW0gcHJlZml4X2xlbiBUaGUgdHJhaWxpbmcgcGFydCBvZiBwYXRoIHRvIHByZWZpeCB0byBlbnRyeSBwYXRocwotICogQHBhcmFtIGlnbm9yZV9jYXNlIEhvdyB0byBzb3J0IGFuZCBjb21wYXJlIHBhdGhzIHdpdGggc3RhcnQvZW5kIGxpbWl0cworICogQHBhcmFtIGZsYWdzIEdJVF9QQVRIX0RJUiBmbGFncyBmcm9tIGFib3ZlCiAgKiBAcGFyYW0gc3RhcnRfc3RhdCBBcyBvcHRpbWl6YXRpb24sIG9ubHkgc3RhdCB2YWx1ZXMgYWZ0ZXIgdGhpcyBwcmVmaXgKICAqIEBwYXJhbSBlbmRfc3RhdCBBcyBvcHRpbWl6YXRpb24sIG9ubHkgc3RhdCB2YWx1ZXMgYmVmb3JlIHRoaXMgcHJlZml4CiAgKiBAcGFyYW0gY29udGVudHMgVmVjdG9yIHRvIGZpbGwgd2l0aCBnaXRfcGF0aF93aXRoX3N0YXQgc3RydWN0dXJlcwpAQCAtMzQ2LDkgKzM1Myw3OCBAQAogZXh0ZXJuIGludCBnaXRfcGF0aF9kaXJsb2FkX3dpdGhfc3RhdCgKIAljb25zdCBjaGFyICpwYXRoLAogCXNpemVfdCBwcmVmaXhfbGVuLAotCWJvb2wgaWdub3JlX2Nhc2UsCisJdWludDMyX3QgZmxhZ3MsCiAJY29uc3QgY2hhciAqc3RhcnRfc3RhdCwKIAljb25zdCBjaGFyICplbmRfc3RhdCwKIAlnaXRfdmVjdG9yICpjb250ZW50cyk7CiAKK2VudW0geyBHSVRfUEFUSF9OT1RFUVVBTCA9IDAsIEdJVF9QQVRIX0VRVUFMID0gMSwgR0lUX1BBVEhfUFJFRklYID0gMiB9OworCisvKgorICogRGV0ZXJtaW5lcyBpZiBhIHBhdGggaXMgZXF1YWwgdG8gb3IgcG90ZW50aWFsbHkgYSBjaGlsZCBvZiBhbm90aGVyLgorICogQHBhcmFtIHBhcmVudCBUaGUgcG9zc2libGUgcGFyZW50CisgKiBAcGFyYW0gY2hpbGQgVGhlIHBvc3NpYmxlIGNoaWxkCisgKi8KK0dJVF9JTkxJTkUoaW50KSBnaXRfcGF0aF9lcXVhbF9vcl9wcmVmaXhlZCgKKwljb25zdCBjaGFyICpwYXJlbnQsCisJY29uc3QgY2hhciAqY2hpbGQpCit7CisJY29uc3QgY2hhciAqcCA9IHBhcmVudCwgKmMgPSBjaGlsZDsKKworCXdoaWxlICgqcCAmJiAqYykgeworCQlpZiAoKnArKyAhPSAqYysrKQorCQkJcmV0dXJuIEdJVF9QQVRIX05PVEVRVUFMOworCX0KKworCWlmICgqcCAhPSAnXDAnKQorCQlyZXR1cm4gR0lUX1BBVEhfTk9URVFVQUw7CisJaWYgKCpjID09ICdcMCcpCisJCXJldHVybiBHSVRfUEFUSF9FUVVBTDsKKwlpZiAoKmMgPT0gJy8nKQorCQlyZXR1cm4gR0lUX1BBVEhfUFJFRklYOworCisJcmV0dXJuIEdJVF9QQVRIX05PVEVRVUFMOworfQorCisvKiB0cmFuc2xhdGUgZXJybm8gdG8gbGliZ2l0MiBlcnJvciBjb2RlIGFuZCBzZXQgZXJyb3IgbWVzc2FnZSAqLworZXh0ZXJuIGludCBnaXRfcGF0aF9zZXRfZXJyb3IoCisJaW50IGVycm5vX3ZhbHVlLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICphY3Rpb24pOworCisvKiBjaGVjayBpZiBub24tYXNjaWkgY2hhcmFjdGVycyBhcmUgcHJlc2VudCBpbiBmaWxlbmFtZSAqLworZXh0ZXJuIGJvb2wgZ2l0X3BhdGhfaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbik7CisKKyNkZWZpbmUgR0lUX1BBVEhfUkVQT19FTkNPRElORyAiVVRGLTgiCisKKyNpZmRlZiBfX0FQUExFX18KKyNkZWZpbmUgR0lUX1BBVEhfTkFUSVZFX0VOQ09ESU5HICJVVEYtOC1NQUMiCisjZWxzZQorI2RlZmluZSBHSVRfUEFUSF9OQVRJVkVfRU5DT0RJTkcgIlVURi04IgorI2VuZGlmCisKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisKKyNpbmNsdWRlIDxpY29udi5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJaWNvbnZfdCBtYXA7CisJZ2l0X2J1ZiBidWY7Cit9IGdpdF9wYXRoX2ljb252X3Q7CisKKyNkZWZpbmUgR0lUX1BBVEhfSUNPTlZfSU5JVCB7IChpY29udl90KS0xLCBHSVRfQlVGX0lOSVQgfQorCisvKiBJbml0IGljb252IGRhdGEgZm9yIGNvbnZlcnRpbmcgZGVjb21wb3NlZCBVVEYtOCB0byBwcmVjb21wb3NlZCAqLworZXh0ZXJuIGludCBnaXRfcGF0aF9pY29udl9pbml0X3ByZWNvbXBvc2UoZ2l0X3BhdGhfaWNvbnZfdCAqaWMpOworCisvKiBDbGVhciBhbGxvY2F0ZWQgaWNvbnYgZGF0YSAqLworZXh0ZXJuIHZvaWQgZ2l0X3BhdGhfaWNvbnZfY2xlYXIoZ2l0X3BhdGhfaWNvbnZfdCAqaWMpOworCisvKgorICogUmV3cml0ZSBgaW5gIGJ1ZmZlciB1c2luZyBpY29udiBtYXAgaWYgbmVjZXNzYXJ5LCByZXBsYWNpbmcgYGluYAorICogcG9pbnRlciBpbnRlcm5hbCBpY29udiBidWZmZXIgaWYgcmV3cml0ZSBoYXBwZW5lZC4gIFRoZSBgaW5gIHBvaW50ZXIKKyAqIHdpbGwgYmUgbGVmdCB1bmNoYW5nZWQgaWYgbm8gcmV3cml0ZSB3YXMgbmVlZGVkLgorICovCitleHRlcm4gaW50IGdpdF9wYXRoX2ljb252KGdpdF9wYXRoX2ljb252X3QgKmljLCBjaGFyICoqaW4sIHNpemVfdCAqaW5sZW4pOworCisjZW5kaWYgLyogR0lUX1VTRV9JQ09OViAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9wYXRoc3BlYy5jIGIvc3JjL3BhdGhzcGVjLmMKaW5kZXggZjAyOTgzNi4uMWU3ZTY1ZSAxMDA2NDQKLS0tIGEvc3JjL3BhdGhzcGVjLmMKKysrIGIvc3JjL3BhdGhzcGVjLmMKQEAgLTUsOSArNSwxNiBAQAogICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCiAgKi8KIAorI2luY2x1ZGUgImdpdDIvcGF0aHNwZWMuaCIKKyNpbmNsdWRlICJnaXQyL2RpZmYuaCIKICNpbmNsdWRlICJwYXRoc3BlYy5oIgogI2luY2x1ZGUgImJ1Zl90ZXh0LmgiCiAjaW5jbHVkZSAiYXR0cl9maWxlLmgiCisjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiaW5kZXguaCIKKyNpbmNsdWRlICJiaXR2ZWMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCiAKIC8qIHdoYXQgaXMgdGhlIGNvbW1vbiBub24td2lsZGNhcmQgcHJlZml4IGZvciBhbGwgaXRlbXMgaW4gdGhlIHBhdGhzcGVjICovCiBjaGFyICpnaXRfcGF0aHNwZWNfcHJlZml4KGNvbnN0IGdpdF9zdHJhcnJheSAqcGF0aHNwZWMpCkBAIC01Niw3ICs2Myw3IEBACiB9CiAKIC8qIGJ1aWxkIGEgdmVjdG9yIG9mIGZubWF0Y2ggcGF0dGVybnMgdG8gZXZhbHVhdGUgZWZmaWNpZW50bHkgKi8KLWludCBnaXRfcGF0aHNwZWNfaW5pdCgKK2ludCBnaXRfcGF0aHNwZWNfX3Zpbml0KAogCWdpdF92ZWN0b3IgKnZzcGVjLCBjb25zdCBnaXRfc3RyYXJyYXkgKnN0cnNwZWMsIGdpdF9wb29sICpzdHJwb29sKQogewogCXNpemVfdCBpOwpAQCAtNzYsNyArODMsNyBAQAogCQlpZiAoIW1hdGNoKQogCQkJcmV0dXJuIC0xOwogCi0JCW1hdGNoLT5mbGFncyA9IEdJVF9BVFRSX0ZOTUFUQ0hfQUxMT1dTUEFDRTsKKwkJbWF0Y2gtPmZsYWdzID0gR0lUX0FUVFJfRk5NQVRDSF9BTExPV1NQQUNFIHwgR0lUX0FUVFJfRk5NQVRDSF9BTExPV05FRzsKIAogCQlyZXQgPSBnaXRfYXR0cl9mbm1hdGNoX19wYXJzZShtYXRjaCwgc3RycG9vbCwgTlVMTCwgJnBhdHRlcm4pOwogCQlpZiAocmV0ID09IEdJVF9FTk9URk9VTkQpIHsKQEAgLTkzLDcgKzEwMCw3IEBACiB9CiAKIC8qIGZyZWUgZGF0YSBmcm9tIHRoZSBwYXRoc3BlYyB2ZWN0b3IgKi8KLXZvaWQgZ2l0X3BhdGhzcGVjX2ZyZWUoZ2l0X3ZlY3RvciAqdnNwZWMpCit2b2lkIGdpdF9wYXRoc3BlY19fdmZyZWUoZ2l0X3ZlY3RvciAqdnNwZWMpCiB7CiAJZ2l0X2F0dHJfZm5tYXRjaCAqbWF0Y2g7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xMDYsODggKzExMyw2MTIgQEAKIAlnaXRfdmVjdG9yX2ZyZWUodnNwZWMpOwogfQogCitzdHJ1Y3QgcGF0aHNwZWNfbWF0Y2hfY29udGV4dCB7CisJaW50IGZubWF0Y2hfZmxhZ3M7CisJaW50ICgqc3RyY29tcCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCWludCAoKnN0cm5jb21wKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKK3N0YXRpYyB2b2lkIHBhdGhzcGVjX21hdGNoX2NvbnRleHRfaW5pdCgKKwlzdHJ1Y3QgcGF0aHNwZWNfbWF0Y2hfY29udGV4dCAqY3R4dCwKKwlib29sIGRpc2FibGVfZm5tYXRjaCwKKwlib29sIGNhc2Vmb2xkKQoreworCWlmIChkaXNhYmxlX2ZubWF0Y2gpCisJCWN0eHQtPmZubWF0Y2hfZmxhZ3MgPSAtMTsKKwllbHNlIGlmIChjYXNlZm9sZCkKKwkJY3R4dC0+Zm5tYXRjaF9mbGFncyA9IEZOTV9DQVNFRk9MRDsKKwllbHNlCisJCWN0eHQtPmZubWF0Y2hfZmxhZ3MgPSAwOworCisJaWYgKGNhc2Vmb2xkKSB7CisJCWN0eHQtPnN0cmNvbXAgID0gZ2l0X19zdHJjYXNlY21wOworCQljdHh0LT5zdHJuY29tcCA9IGdpdF9fc3RybmNhc2VjbXA7CisJfSBlbHNlIHsKKwkJY3R4dC0+c3RyY29tcCAgPSBnaXRfX3N0cmNtcDsKKwkJY3R4dC0+c3RybmNvbXAgPSBnaXRfX3N0cm5jbXA7CisJfQorfQorCitzdGF0aWMgaW50IHBhdGhzcGVjX21hdGNoX29uZSgKKwljb25zdCBnaXRfYXR0cl9mbm1hdGNoICptYXRjaCwKKwlzdHJ1Y3QgcGF0aHNwZWNfbWF0Y2hfY29udGV4dCAqY3R4dCwKKwljb25zdCBjaGFyICpwYXRoKQoreworCWludCByZXN1bHQgPSAobWF0Y2gtPmZsYWdzICYgR0lUX0FUVFJfRk5NQVRDSF9NQVRDSF9BTEwpID8gMCA6IEZOTV9OT01BVENIOworCisJaWYgKHJlc3VsdCA9PSBGTk1fTk9NQVRDSCkKKwkJcmVzdWx0ID0gY3R4dC0+c3RyY29tcChtYXRjaC0+cGF0dGVybiwgcGF0aCkgPyBGTk1fTk9NQVRDSCA6IDA7CisKKwlpZiAoY3R4dC0+Zm5tYXRjaF9mbGFncyA+PSAwICYmIHJlc3VsdCA9PSBGTk1fTk9NQVRDSCkKKwkJcmVzdWx0ID0gcF9mbm1hdGNoKG1hdGNoLT5wYXR0ZXJuLCBwYXRoLCBjdHh0LT5mbm1hdGNoX2ZsYWdzKTsKKworCS8qIGlmIHdlIGRpZG4ndCBtYXRjaCwgbG9vayBmb3IgZXhhY3QgZGlybmFtZSBwcmVmaXggbWF0Y2ggKi8KKwlpZiAocmVzdWx0ID09IEZOTV9OT01BVENIICYmCisJCShtYXRjaC0+ZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX0hBU1dJTEQpID09IDAgJiYKKwkJY3R4dC0+c3RybmNvbXAocGF0aCwgbWF0Y2gtPnBhdHRlcm4sIG1hdGNoLT5sZW5ndGgpID09IDAgJiYKKwkJcGF0aFttYXRjaC0+bGVuZ3RoXSA9PSAnLycpCisJCXJlc3VsdCA9IDA7CisKKwkvKiBpZiB3ZSBkaWRuJ3QgbWF0Y2ggYW5kIHRoaXMgaXMgYSBuZWdhdGl2ZSBtYXRjaCwgY2hlY2sgZm9yIGV4YWN0CisJICogbWF0Y2ggb2YgZmlsZW5hbWUgd2l0aCBsZWFkaW5nICchJworCSAqLworCWlmIChyZXN1bHQgPT0gRk5NX05PTUFUQ0ggJiYKKwkJKG1hdGNoLT5mbGFncyAmIEdJVF9BVFRSX0ZOTUFUQ0hfTkVHQVRJVkUpICE9IDAgJiYKKwkJKnBhdGggPT0gJyEnICYmCisJCWN0eHQtPnN0cm5jb21wKHBhdGggKyAxLCBtYXRjaC0+cGF0dGVybiwgbWF0Y2gtPmxlbmd0aCkgPT0gMCAmJgorCQkoIXBhdGhbbWF0Y2gtPmxlbmd0aCArIDFdIHx8IHBhdGhbbWF0Y2gtPmxlbmd0aCArIDFdID09ICcvJykpCisJCXJldHVybiAxOworCisJaWYgKHJlc3VsdCA9PSAwKQorCQlyZXR1cm4gKG1hdGNoLT5mbGFncyAmIEdJVF9BVFRSX0ZOTUFUQ0hfTkVHQVRJVkUpID8gMCA6IDE7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdpdF9wYXRoc3BlY19fbWF0Y2hfYXQoCisJc2l6ZV90ICptYXRjaGVkX2F0LAorCWNvbnN0IGdpdF92ZWN0b3IgKnZzcGVjLAorCXN0cnVjdCBwYXRoc3BlY19tYXRjaF9jb250ZXh0ICpjdHh0LAorCWNvbnN0IGNoYXIgKnBhdGgwLAorCWNvbnN0IGNoYXIgKnBhdGgxKQoreworCWludCByZXN1bHQgPSBHSVRfRU5PVEZPVU5EOworCXNpemVfdCBpID0gMDsKKwljb25zdCBnaXRfYXR0cl9mbm1hdGNoICptYXRjaDsKKworCWdpdF92ZWN0b3JfZm9yZWFjaCh2c3BlYywgaSwgbWF0Y2gpIHsKKwkJaWYgKHBhdGgwICYmIChyZXN1bHQgPSBwYXRoc3BlY19tYXRjaF9vbmUobWF0Y2gsIGN0eHQsIHBhdGgwKSkgPj0gMCkKKwkJCWJyZWFrOworCQlpZiAocGF0aDEgJiYgKHJlc3VsdCA9IHBhdGhzcGVjX21hdGNoX29uZShtYXRjaCwgY3R4dCwgcGF0aDEpKSA+PSAwKQorCQkJYnJlYWs7CisJfQorCisJKm1hdGNoZWRfYXQgPSBpOworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qIG1hdGNoIGEgcGF0aCBhZ2FpbnN0IHRoZSB2ZWN0b3JpemVkIHBhdGhzcGVjICovCi1ib29sIGdpdF9wYXRoc3BlY19tYXRjaF9wYXRoKAotCWdpdF92ZWN0b3IgKnZzcGVjLAorYm9vbCBnaXRfcGF0aHNwZWNfX21hdGNoKAorCWNvbnN0IGdpdF92ZWN0b3IgKnZzcGVjLAogCWNvbnN0IGNoYXIgKnBhdGgsCiAJYm9vbCBkaXNhYmxlX2ZubWF0Y2gsCiAJYm9vbCBjYXNlZm9sZCwKLQljb25zdCBjaGFyICoqbWF0Y2hlZF9wYXRoc3BlYykKKwljb25zdCBjaGFyICoqbWF0Y2hlZF9wYXRoc3BlYywKKwlzaXplX3QgKm1hdGNoZWRfYXQpCiB7Ci0Jc2l6ZV90IGk7Ci0JZ2l0X2F0dHJfZm5tYXRjaCAqbWF0Y2g7Ci0JaW50IGZubWF0Y2hfZmxhZ3MgPSAwOwotCWludCAoKnVzZV9zdHJjbXApKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLQlpbnQgKCp1c2Vfc3RybmNtcCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisJaW50IHJlc3VsdDsKKwlzaXplX3QgcG9zOworCXN0cnVjdCBwYXRoc3BlY19tYXRjaF9jb250ZXh0IGN0eHQ7CiAKIAlpZiAobWF0Y2hlZF9wYXRoc3BlYykKIAkJKm1hdGNoZWRfcGF0aHNwZWMgPSBOVUxMOworCWlmIChtYXRjaGVkX2F0KQorCQkqbWF0Y2hlZF9hdCA9IEdJVF9QQVRIU1BFQ19OT01BVENIOwogCiAJaWYgKCF2c3BlYyB8fCAhdnNwZWMtPmxlbmd0aCkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoZGlzYWJsZV9mbm1hdGNoKQotCQlmbm1hdGNoX2ZsYWdzID0gLTE7Ci0JZWxzZSBpZiAoY2FzZWZvbGQpCi0JCWZubWF0Y2hfZmxhZ3MgPSBGTk1fQ0FTRUZPTEQ7CisJcGF0aHNwZWNfbWF0Y2hfY29udGV4dF9pbml0KCZjdHh0LCBkaXNhYmxlX2ZubWF0Y2gsIGNhc2Vmb2xkKTsKIAotCWlmIChjYXNlZm9sZCkgewotCQl1c2Vfc3RyY21wICA9IGdpdF9fc3RyY2FzZWNtcDsKLQkJdXNlX3N0cm5jbXAgPSBnaXRfX3N0cm5jYXNlY21wOwotCX0gZWxzZSB7Ci0JCXVzZV9zdHJjbXAgID0gZ2l0X19zdHJjbXA7Ci0JCXVzZV9zdHJuY21wID0gZ2l0X19zdHJuY21wOwotCX0KLQotCWdpdF92ZWN0b3JfZm9yZWFjaCh2c3BlYywgaSwgbWF0Y2gpIHsKLQkJaW50IHJlc3VsdCA9IChtYXRjaC0+ZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX01BVENIX0FMTCkgPyAwIDogRk5NX05PTUFUQ0g7Ci0KLQkJaWYgKHJlc3VsdCA9PSBGTk1fTk9NQVRDSCkKLQkJCXJlc3VsdCA9IHVzZV9zdHJjbXAobWF0Y2gtPnBhdHRlcm4sIHBhdGgpID8gRk5NX05PTUFUQ0ggOiAwOwotCi0JCWlmIChmbm1hdGNoX2ZsYWdzID49IDAgJiYgcmVzdWx0ID09IEZOTV9OT01BVENIKQotCQkJcmVzdWx0ID0gcF9mbm1hdGNoKG1hdGNoLT5wYXR0ZXJuLCBwYXRoLCBmbm1hdGNoX2ZsYWdzKTsKLQotCQkvKiBpZiB3ZSBkaWRuJ3QgbWF0Y2gsIGxvb2sgZm9yIGV4YWN0IGRpcm5hbWUgcHJlZml4IG1hdGNoICovCi0JCWlmIChyZXN1bHQgPT0gRk5NX05PTUFUQ0ggJiYKLQkJCShtYXRjaC0+ZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX0hBU1dJTEQpID09IDAgJiYKLQkJCXVzZV9zdHJuY21wKHBhdGgsIG1hdGNoLT5wYXR0ZXJuLCBtYXRjaC0+bGVuZ3RoKSA9PSAwICYmCi0JCQlwYXRoW21hdGNoLT5sZW5ndGhdID09ICcvJykKLQkJCXJlc3VsdCA9IDA7Ci0KLQkJaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCQlpZiAobWF0Y2hlZF9wYXRoc3BlYykKLQkJCQkqbWF0Y2hlZF9wYXRoc3BlYyA9IG1hdGNoLT5wYXR0ZXJuOwotCi0JCQlyZXR1cm4gKG1hdGNoLT5mbGFncyAmIEdJVF9BVFRSX0ZOTUFUQ0hfTkVHQVRJVkUpID8gZmFsc2UgOiB0cnVlOworCXJlc3VsdCA9IGdpdF9wYXRoc3BlY19fbWF0Y2hfYXQoJnBvcywgdnNwZWMsICZjdHh0LCBwYXRoLCBOVUxMKTsKKwlpZiAocmVzdWx0ID49IDApIHsKKwkJaWYgKG1hdGNoZWRfcGF0aHNwZWMpIHsKKwkJCWNvbnN0IGdpdF9hdHRyX2ZubWF0Y2ggKm1hdGNoID0gZ2l0X3ZlY3Rvcl9nZXQodnNwZWMsIHBvcyk7CisJCQkqbWF0Y2hlZF9wYXRoc3BlYyA9IG1hdGNoLT5wYXR0ZXJuOwogCQl9CisKKwkJaWYgKG1hdGNoZWRfYXQpCisJCQkqbWF0Y2hlZF9hdCA9IHBvczsKIAl9CiAKLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIChyZXN1bHQgPiAwKTsKIH0KIAogCi1pbnQgZ2l0X3BhdGhzcGVjX2NvbnRleHRfaW5pdCgKLQlnaXRfcGF0aHNwZWNfY29udGV4dCAqY3R4dCwgY29uc3QgZ2l0X3N0cmFycmF5ICpwYXRocykKK2ludCBnaXRfcGF0aHNwZWNfX2luaXQoZ2l0X3BhdGhzcGVjICpwcywgY29uc3QgZ2l0X3N0cmFycmF5ICpwYXRocykKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JbWVtc2V0KGN0eHQsIDAsIHNpemVvZigqY3R4dCkpOworCW1lbXNldChwcywgMCwgc2l6ZW9mKCpwcykpOwogCi0JY3R4dC0+cHJlZml4ID0gZ2l0X3BhdGhzcGVjX3ByZWZpeChwYXRocyk7CisJcHMtPnByZWZpeCA9IGdpdF9wYXRoc3BlY19wcmVmaXgocGF0aHMpOwogCi0JaWYgKChlcnJvciA9IGdpdF9wb29sX2luaXQoJmN0eHQtPnBvb2wsIDEsIDApKSA8IDAgfHwKLQkJKGVycm9yID0gZ2l0X3BhdGhzcGVjX2luaXQoJmN0eHQtPnBhdGhzcGVjLCBwYXRocywgJmN0eHQtPnBvb2wpKSA8IDApCi0JCWdpdF9wYXRoc3BlY19jb250ZXh0X2ZyZWUoY3R4dCk7CisJaWYgKChlcnJvciA9IGdpdF9wb29sX2luaXQoJnBzLT5wb29sLCAxLCAwKSkgPCAwIHx8CisJCShlcnJvciA9IGdpdF9wYXRoc3BlY19fdmluaXQoJnBzLT5wYXRoc3BlYywgcGF0aHMsICZwcy0+cG9vbCkpIDwgMCkKKwkJZ2l0X3BhdGhzcGVjX19jbGVhcihwcyk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXZvaWQgZ2l0X3BhdGhzcGVjX2NvbnRleHRfZnJlZSgKLQlnaXRfcGF0aHNwZWNfY29udGV4dCAqY3R4dCkKK3ZvaWQgZ2l0X3BhdGhzcGVjX19jbGVhcihnaXRfcGF0aHNwZWMgKnBzKQogewotCWdpdF9fZnJlZShjdHh0LT5wcmVmaXgpOwotCWdpdF9wYXRoc3BlY19mcmVlKCZjdHh0LT5wYXRoc3BlYyk7Ci0JZ2l0X3Bvb2xfY2xlYXIoJmN0eHQtPnBvb2wpOwotCW1lbXNldChjdHh0LCAwLCBzaXplb2YoKmN0eHQpKTsKKwlnaXRfX2ZyZWUocHMtPnByZWZpeCk7CisJZ2l0X3BhdGhzcGVjX192ZnJlZSgmcHMtPnBhdGhzcGVjKTsKKwlnaXRfcG9vbF9jbGVhcigmcHMtPnBvb2wpOworCW1lbXNldChwcywgMCwgc2l6ZW9mKCpwcykpOwogfQorCitpbnQgZ2l0X3BhdGhzcGVjX25ldyhnaXRfcGF0aHNwZWMgKipvdXQsIGNvbnN0IGdpdF9zdHJhcnJheSAqcGF0aHNwZWMpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfcGF0aHNwZWMgKnBzID0gZ2l0X19tYWxsb2Moc2l6ZW9mKGdpdF9wYXRoc3BlYykpOworCUdJVEVSUl9DSEVDS19BTExPQyhwcyk7CisKKwlpZiAoKGVycm9yID0gZ2l0X3BhdGhzcGVjX19pbml0KHBzLCBwYXRoc3BlYykpIDwgMCkgeworCQlnaXRfX2ZyZWUocHMpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJR0lUX1JFRkNPVU5UX0lOQyhwcyk7CisJKm91dCA9IHBzOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYXRoc3BlY19mcmVlKGdpdF9wYXRoc3BlYyAqcHMpCit7CisJZ2l0X3BhdGhzcGVjX19jbGVhcihwcyk7CisJZ2l0X19mcmVlKHBzKTsKK30KKwordm9pZCBnaXRfcGF0aHNwZWNfZnJlZShnaXRfcGF0aHNwZWMgKnBzKQoreworCWlmICghcHMpCisJCXJldHVybjsKKwlHSVRfUkVGQ09VTlRfREVDKHBzLCBwYXRoc3BlY19mcmVlKTsKK30KKworaW50IGdpdF9wYXRoc3BlY19tYXRjaGVzX3BhdGgoCisJY29uc3QgZ2l0X3BhdGhzcGVjICpwcywgdWludDMyX3QgZmxhZ3MsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJYm9vbCBub19mbm1hdGNoID0gKGZsYWdzICYgR0lUX1BBVEhTUEVDX05PX0dMT0IpICE9IDA7CisJYm9vbCBjYXNlZm9sZCA9ICAoZmxhZ3MgJiBHSVRfUEFUSFNQRUNfSUdOT1JFX0NBU0UpICE9IDA7CisKKwlhc3NlcnQocHMgJiYgcGF0aCk7CisKKwlyZXR1cm4gKDAgIT0gZ2l0X3BhdGhzcGVjX19tYXRjaCgKKwkJJnBzLT5wYXRoc3BlYywgcGF0aCwgbm9fZm5tYXRjaCwgY2FzZWZvbGQsIE5VTEwsIE5VTEwpKTsKK30KKworc3RhdGljIHZvaWQgcGF0aHNwZWNfbWF0Y2hfZnJlZShnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqbSkKK3sKKwlnaXRfcGF0aHNwZWNfZnJlZShtLT5wYXRoc3BlYyk7CisJbS0+cGF0aHNwZWMgPSBOVUxMOworCisJZ2l0X2FycmF5X2NsZWFyKG0tPm1hdGNoZXMpOworCWdpdF9hcnJheV9jbGVhcihtLT5mYWlsdXJlcyk7CisJZ2l0X3Bvb2xfY2xlYXIoJm0tPnBvb2wpOworCWdpdF9fZnJlZShtKTsKK30KKworc3RhdGljIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICpwYXRoc3BlY19tYXRjaF9hbGxvYygKKwlnaXRfcGF0aHNwZWMgKnBzLCBpbnQgZGF0YXR5cGUpCit7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm0gPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QpKTsKKworCWlmIChtICE9IE5VTEwgJiYgZ2l0X3Bvb2xfaW5pdCgmbS0+cG9vbCwgMSwgMCkgPCAwKSB7CisJCXBhdGhzcGVjX21hdGNoX2ZyZWUobSk7CisJCW0gPSBOVUxMOworCX0KKworCS8qIG5lZWQgdG8ga2VlcCByZWZlcmVuY2UgdG8gcGF0aHNwZWMgYW5kIGluY3JlbWVudCByZWZjb3VudCBiZWNhdXNlCisJICogZmFpbHVyZXMgYXJyYXkgc3RvcmVzIHBvaW50ZXJzIHRvIHRoZSBwYXR0ZXJuIHN0cmluZ3Mgb2YgdGhlCisJICogcGF0aHNwZWMgdGhhdCBoYWQgbm8gbWF0Y2hlcworCSAqLworCUdJVF9SRUZDT1VOVF9JTkMocHMpOworCW0tPnBhdGhzcGVjID0gcHM7CisJbS0+ZGF0YXR5cGUgPSBkYXRhdHlwZTsKKworCXJldHVybiBtOworfQorCitHSVRfSU5MSU5FKHNpemVfdCkgcGF0aHNwZWNfbWFya19wYXR0ZXJuKGdpdF9iaXR2ZWMgKnVzZWQsIHNpemVfdCBwb3MpCit7CisJaWYgKCFnaXRfYml0dmVjX2dldCh1c2VkLCBwb3MpKSB7CisJCWdpdF9iaXR2ZWNfc2V0KHVzZWQsIHBvcywgdHJ1ZSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IHBhdGhzcGVjX21hcmtfcmVtYWluaW5nKAorCWdpdF9iaXR2ZWMgKnVzZWQsCisJZ2l0X3ZlY3RvciAqcGF0dGVybnMsCisJc3RydWN0IHBhdGhzcGVjX21hdGNoX2NvbnRleHQgKmN0eHQsCisJc2l6ZV90IHN0YXJ0LAorCWNvbnN0IGNoYXIgKnBhdGgwLAorCWNvbnN0IGNoYXIgKnBhdGgxKQoreworCXNpemVfdCBjb3VudCA9IDA7CisKKwlpZiAocGF0aDEgPT0gcGF0aDApCisJCXBhdGgxID0gTlVMTDsKKworCWZvciAoOyBzdGFydCA8IHBhdHRlcm5zLT5sZW5ndGg7ICsrc3RhcnQpIHsKKwkJY29uc3QgZ2l0X2F0dHJfZm5tYXRjaCAqcGF0ID0gZ2l0X3ZlY3Rvcl9nZXQocGF0dGVybnMsIHN0YXJ0KTsKKworCQlpZiAoZ2l0X2JpdHZlY19nZXQodXNlZCwgc3RhcnQpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBhdGgwICYmIHBhdGhzcGVjX21hdGNoX29uZShwYXQsIGN0eHQsIHBhdGgwKSA+IDApCisJCQljb3VudCArPSBwYXRoc3BlY19tYXJrX3BhdHRlcm4odXNlZCwgc3RhcnQpOworCQllbHNlIGlmIChwYXRoMSAmJiBwYXRoc3BlY19tYXRjaF9vbmUocGF0LCBjdHh0LCBwYXRoMSkgPiAwKQorCQkJY291bnQgKz0gcGF0aHNwZWNfbWFya19wYXR0ZXJuKHVzZWQsIHN0YXJ0KTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgcGF0aHNwZWNfYnVpbGRfZmFpbHVyZV9hcnJheSgKKwlnaXRfcGF0aHNwZWNfc3RyaW5nX2FycmF5X3QgKmZhaWx1cmVzLAorCWdpdF92ZWN0b3IgKnBhdHRlcm5zLAorCWdpdF9iaXR2ZWMgKnVzZWQsCisJZ2l0X3Bvb2wgKnBvb2wpCit7CisJc2l6ZV90IHBvczsKKwljaGFyICoqZmFpbGVkOworCWNvbnN0IGdpdF9hdHRyX2ZubWF0Y2ggKnBhdDsKKworCWZvciAocG9zID0gMDsgcG9zIDwgcGF0dGVybnMtPmxlbmd0aDsgKytwb3MpIHsKKwkJaWYgKGdpdF9iaXR2ZWNfZ2V0KHVzZWQsIHBvcykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGZhaWxlZCA9IGdpdF9hcnJheV9hbGxvYygqZmFpbHVyZXMpKSA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCisJCXBhdCA9IGdpdF92ZWN0b3JfZ2V0KHBhdHRlcm5zLCBwb3MpOworCisJCWlmICgoKmZhaWxlZCA9IGdpdF9wb29sX3N0cmR1cChwb29sLCBwYXQtPnBhdHRlcm4pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdGhzcGVjX21hdGNoX2Zyb21faXRlcmF0b3IoCisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKipvdXQsCisJZ2l0X2l0ZXJhdG9yICppdGVyLAorCXVpbnQzMl90IGZsYWdzLAorCWdpdF9wYXRoc3BlYyAqcHMpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqbSA9IE5VTEw7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHBhdGhzcGVjX21hdGNoX2NvbnRleHQgY3R4dDsKKwlnaXRfdmVjdG9yICpwYXR0ZXJucyA9ICZwcy0+cGF0aHNwZWM7CisJYm9vbCBmaW5kX2ZhaWx1cmVzID0gb3V0ICYmIChmbGFncyAmIEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTKSAhPSAwOworCWJvb2wgZmFpbHVyZXNfb25seSA9ICFvdXQgfHwgKGZsYWdzICYgR0lUX1BBVEhTUEVDX0ZBSUxVUkVTX09OTFkpICE9IDA7CisJc2l6ZV90IHBvcywgdXNlZF9jdCA9IDAsIGZvdW5kX2ZpbGVzID0gMDsKKwlnaXRfaW5kZXggKmluZGV4ID0gTlVMTDsKKwlnaXRfYml0dmVjIHVzZWRfcGF0dGVybnM7CisJY2hhciAqKmZpbGU7CisKKwlpZiAoZ2l0X2JpdHZlY19pbml0KCZ1c2VkX3BhdHRlcm5zLCBwYXR0ZXJucy0+bGVuZ3RoKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChvdXQpIHsKKwkJKm91dCA9IG0gPSBwYXRoc3BlY19tYXRjaF9hbGxvYyhwcywgUEFUSFNQRUNfREFUQVRZUEVfU1RSSU5HUyk7CisJCUdJVEVSUl9DSEVDS19BTExPQyhtKTsKKwl9CisKKwlpZiAoKGVycm9yID0gZ2l0X2l0ZXJhdG9yX3Jlc2V0KGl0ZXIsIHBzLT5wcmVmaXgsIHBzLT5wcmVmaXgpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCWlmIChnaXRfaXRlcmF0b3JfdHlwZShpdGVyKSA9PSBHSVRfSVRFUkFUT1JfVFlQRV9XT1JLRElSICYmCisJCShlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKAorCQkJJmluZGV4LCBnaXRfaXRlcmF0b3Jfb3duZXIoaXRlcikpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCXBhdGhzcGVjX21hdGNoX2NvbnRleHRfaW5pdCgKKwkJJmN0eHQsIChmbGFncyAmIEdJVF9QQVRIU1BFQ19OT19HTE9CKSAhPSAwLAorCQlnaXRfaXRlcmF0b3JfaWdub3JlX2Nhc2UoaXRlcikpOworCisJd2hpbGUgKCEoZXJyb3IgPSBnaXRfaXRlcmF0b3JfYWR2YW5jZSgmZW50cnksIGl0ZXIpKSkgeworCQkvKiBzZWFyY2ggZm9yIG1hdGNoIHdpdGggZW50cnktPnBhdGggKi8KKwkJaW50IHJlc3VsdCA9IGdpdF9wYXRoc3BlY19fbWF0Y2hfYXQoCisJCQkmcG9zLCBwYXR0ZXJucywgJmN0eHQsIGVudHJ5LT5wYXRoLCBOVUxMKTsKKworCQkvKiBubyBtYXRjaGVzIGZvciB0aGlzIHBhdGggKi8KKwkJaWYgKHJlc3VsdCA8IDApCisJCQljb250aW51ZTsKKworCQkvKiBpZiByZXN1bHQgd2FzIGEgbmVnYXRpdmUgcGF0dGVybiBtYXRjaCwgdGhlbiBkb24ndCBsaXN0IGZpbGUgKi8KKwkJaWYgKCFyZXN1bHQpIHsKKwkJCXVzZWRfY3QgKz0gcGF0aHNwZWNfbWFya19wYXR0ZXJuKCZ1c2VkX3BhdHRlcm5zLCBwb3MpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjaGVjayBpZiBwYXRoIGlzIGlnbm9yZWQgYW5kIHVudHJhY2tlZCAqLworCQlpZiAoaW5kZXggIT0gTlVMTCAmJgorCQkJZ2l0X2l0ZXJhdG9yX2N1cnJlbnRfaXNfaWdub3JlZChpdGVyKSAmJgorCQkJZ2l0X2luZGV4X19maW5kKE5VTEwsIGluZGV4LCBlbnRyeS0+cGF0aCwgR0lUX0lOREVYX1NUQUdFX0FOWSkgPCAwKQorCQkJY29udGludWU7CisKKwkJLyogbWFyayB0aGUgbWF0Y2hlZCBwYXR0ZXJuIGFzIHVzZWQgKi8KKwkJdXNlZF9jdCArPSBwYXRoc3BlY19tYXJrX3BhdHRlcm4oJnVzZWRfcGF0dGVybnMsIHBvcyk7CisJCSsrZm91bmRfZmlsZXM7CisKKwkJLyogaWYgZmluZF9mYWlsdXJlcyBpcyBvbiwgY2hlY2sgaWYgYW55IGxhdGVyIHBhdHRlcm5zIGFsc28gbWF0Y2ggKi8KKwkJaWYgKGZpbmRfZmFpbHVyZXMgJiYgdXNlZF9jdCA8IHBhdHRlcm5zLT5sZW5ndGgpCisJCQl1c2VkX2N0ICs9IHBhdGhzcGVjX21hcmtfcmVtYWluaW5nKAorCQkJCSZ1c2VkX3BhdHRlcm5zLCBwYXR0ZXJucywgJmN0eHQsIHBvcyArIDEsIGVudHJ5LT5wYXRoLCBOVUxMKTsKKworCQkvKiBpZiBvbmx5IGxvb2tpbmcgYXQgZmFpbHVyZXMsIGV4aXQgZWFybHkgb3IganVzdCBjb250aW51ZSAqLworCQlpZiAoZmFpbHVyZXNfb25seSB8fCAhb3V0KSB7CisJCQlpZiAodXNlZF9jdCA9PSBwYXR0ZXJucy0+bGVuZ3RoKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBpbnNlcnQgbWF0Y2hlZCBwYXRoIGludG8gbWF0Y2hlcyBhcnJheSAqLworCQlpZiAoKGZpbGUgPSAoY2hhciAqKilnaXRfYXJyYXlfYWxsb2MobS0+bWF0Y2hlcykpID09IE5VTEwgfHwKKwkJCSgqZmlsZSA9IGdpdF9wb29sX3N0cmR1cCgmbS0+cG9vbCwgZW50cnktPnBhdGgpKSA9PSBOVUxMKSB7CisJCQllcnJvciA9IC0xOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKGVycm9yIDwgMCAmJiBlcnJvciAhPSBHSVRfSVRFUk9WRVIpCisJCWdvdG8gZG9uZTsKKwllcnJvciA9IDA7CisKKwkvKiBpbnNlcnQgcGF0dGVybnMgdGhhdCBoYWQgbm8gbWF0Y2hlcyBpbnRvIGZhaWx1cmVzIGFycmF5ICovCisJaWYgKGZpbmRfZmFpbHVyZXMgJiYgdXNlZF9jdCA8IHBhdHRlcm5zLT5sZW5ndGggJiYKKwkJKGVycm9yID0gcGF0aHNwZWNfYnVpbGRfZmFpbHVyZV9hcnJheSgKKwkJCSZtLT5mYWlsdXJlcywgcGF0dGVybnMsICZ1c2VkX3BhdHRlcm5zLCAmbS0+cG9vbCkpIDwgMCkKKwkJZ290byBkb25lOworCisJLyogaWYgZXZlcnkgcGF0dGVybiBmYWlsZWQgdG8gbWF0Y2gsIHRoZW4gd2UgaGF2ZSBmYWlsZWQgKi8KKwlpZiAoKGZsYWdzICYgR0lUX1BBVEhTUEVDX05PX01BVENIX0VSUk9SKSAhPSAwICYmICFmb3VuZF9maWxlcykgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiTm8gbWF0Y2hpbmcgZmlsZXMgd2VyZSBmb3VuZCIpOworCQllcnJvciA9IEdJVF9FTk9URk9VTkQ7CisJfQorCitkb25lOgorCWdpdF9iaXR2ZWNfZnJlZSgmdXNlZF9wYXR0ZXJucyk7CisKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXBhdGhzcGVjX21hdGNoX2ZyZWUobSk7CisJCWlmIChvdXQpICpvdXQgPSBOVUxMOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGdpdF9pdGVyYXRvcl9mbGFnX3QgcGF0aHNwZWNfbWF0Y2hfaXRlcl9mbGFncyh1aW50MzJfdCBmbGFncykKK3sKKwlnaXRfaXRlcmF0b3JfZmxhZ190IGYgPSAwOworCisJaWYgKChmbGFncyAmIEdJVF9QQVRIU1BFQ19JR05PUkVfQ0FTRSkgIT0gMCkKKwkJZiB8PSBHSVRfSVRFUkFUT1JfSUdOT1JFX0NBU0U7CisJZWxzZSBpZiAoKGZsYWdzICYgR0lUX1BBVEhTUEVDX1VTRV9DQVNFKSAhPSAwKQorCQlmIHw9IEdJVF9JVEVSQVRPUl9ET05UX0lHTk9SRV9DQVNFOworCisJcmV0dXJuIGY7Cit9CisKK2ludCBnaXRfcGF0aHNwZWNfbWF0Y2hfd29ya2RpcigKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqKm91dCwKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwl1aW50MzJfdCBmbGFncywKKwlnaXRfcGF0aHNwZWMgKnBzKQoreworCWludCBlcnJvciA9IDA7CisJZ2l0X2l0ZXJhdG9yICppdGVyOworCisJYXNzZXJ0KHJlcG8pOworCisJaWYgKCEoZXJyb3IgPSBnaXRfaXRlcmF0b3JfZm9yX3dvcmtkaXIoCisJCQkmaXRlciwgcmVwbywgcGF0aHNwZWNfbWF0Y2hfaXRlcl9mbGFncyhmbGFncyksIE5VTEwsIE5VTEwpKSkgeworCisJCWVycm9yID0gcGF0aHNwZWNfbWF0Y2hfZnJvbV9pdGVyYXRvcihvdXQsIGl0ZXIsIGZsYWdzLCBwcyk7CisKKwkJZ2l0X2l0ZXJhdG9yX2ZyZWUoaXRlcik7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgZ2l0X3BhdGhzcGVjX21hdGNoX2luZGV4KAorCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICoqb3V0LAorCWdpdF9pbmRleCAqaW5kZXgsCisJdWludDMyX3QgZmxhZ3MsCisJZ2l0X3BhdGhzcGVjICpwcykKK3sKKwlpbnQgZXJyb3IgPSAwOworCWdpdF9pdGVyYXRvciAqaXRlcjsKKworCWFzc2VydChpbmRleCk7CisKKwlpZiAoIShlcnJvciA9IGdpdF9pdGVyYXRvcl9mb3JfaW5kZXgoCisJCQkmaXRlciwgaW5kZXgsIHBhdGhzcGVjX21hdGNoX2l0ZXJfZmxhZ3MoZmxhZ3MpLCBOVUxMLCBOVUxMKSkpIHsKKworCQllcnJvciA9IHBhdGhzcGVjX21hdGNoX2Zyb21faXRlcmF0b3Iob3V0LCBpdGVyLCBmbGFncywgcHMpOworCisJCWdpdF9pdGVyYXRvcl9mcmVlKGl0ZXIpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworaW50IGdpdF9wYXRoc3BlY19tYXRjaF90cmVlKAorCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICoqb3V0LAorCWdpdF90cmVlICp0cmVlLAorCXVpbnQzMl90IGZsYWdzLAorCWdpdF9wYXRoc3BlYyAqcHMpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfaXRlcmF0b3IgKml0ZXI7CisKKwlhc3NlcnQodHJlZSk7CisKKwlpZiAoIShlcnJvciA9IGdpdF9pdGVyYXRvcl9mb3JfdHJlZSgKKwkJCSZpdGVyLCB0cmVlLCBwYXRoc3BlY19tYXRjaF9pdGVyX2ZsYWdzKGZsYWdzKSwgTlVMTCwgTlVMTCkpKSB7CisKKwkJZXJyb3IgPSBwYXRoc3BlY19tYXRjaF9mcm9tX2l0ZXJhdG9yKG91dCwgaXRlciwgZmxhZ3MsIHBzKTsKKworCQlnaXRfaXRlcmF0b3JfZnJlZShpdGVyKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBnaXRfcGF0aHNwZWNfbWF0Y2hfZGlmZigKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqKm91dCwKKwlnaXRfZGlmZiAqZGlmZiwKKwl1aW50MzJfdCBmbGFncywKKwlnaXRfcGF0aHNwZWMgKnBzKQoreworCWludCBlcnJvciA9IDA7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm0gPSBOVUxMOworCXN0cnVjdCBwYXRoc3BlY19tYXRjaF9jb250ZXh0IGN0eHQ7CisJZ2l0X3ZlY3RvciAqcGF0dGVybnMgPSAmcHMtPnBhdGhzcGVjOworCWJvb2wgZmluZF9mYWlsdXJlcyA9IG91dCAmJiAoZmxhZ3MgJiBHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUykgIT0gMDsKKwlib29sIGZhaWx1cmVzX29ubHkgPSAhb3V0IHx8IChmbGFncyAmIEdJVF9QQVRIU1BFQ19GQUlMVVJFU19PTkxZKSAhPSAwOworCXNpemVfdCBpLCBwb3MsIHVzZWRfY3QgPSAwLCBmb3VuZF9kZWx0YXMgPSAwOworCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwgKiptYXRjaDsKKwlnaXRfYml0dmVjIHVzZWRfcGF0dGVybnM7CisKKwlhc3NlcnQoZGlmZik7CisKKwlpZiAoZ2l0X2JpdHZlY19pbml0KCZ1c2VkX3BhdHRlcm5zLCBwYXR0ZXJucy0+bGVuZ3RoKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChvdXQpIHsKKwkJKm91dCA9IG0gPSBwYXRoc3BlY19tYXRjaF9hbGxvYyhwcywgUEFUSFNQRUNfREFUQVRZUEVfRElGRik7CisJCUdJVEVSUl9DSEVDS19BTExPQyhtKTsKKwl9CisKKwlwYXRoc3BlY19tYXRjaF9jb250ZXh0X2luaXQoCisJCSZjdHh0LCAoZmxhZ3MgJiBHSVRfUEFUSFNQRUNfTk9fR0xPQikgIT0gMCwKKwkJZ2l0X2RpZmZfaXNfc29ydGVkX2ljYXNlKGRpZmYpKTsKKworCWdpdF92ZWN0b3JfZm9yZWFjaCgmZGlmZi0+ZGVsdGFzLCBpLCBkZWx0YSkgeworCQkvKiBzZWFyY2ggZm9yIG1hdGNoIHdpdGggZGVsdGEgKi8KKwkJaW50IHJlc3VsdCA9IGdpdF9wYXRoc3BlY19fbWF0Y2hfYXQoCisJCQkmcG9zLCBwYXR0ZXJucywgJmN0eHQsIGRlbHRhLT5vbGRfZmlsZS5wYXRoLCBkZWx0YS0+bmV3X2ZpbGUucGF0aCk7CisKKwkJLyogbm8gbWF0Y2hlcyBmb3IgdGhpcyBwYXRoICovCisJCWlmIChyZXN1bHQgPCAwKQorCQkJY29udGludWU7CisKKwkJLyogbWFyayB0aGUgbWF0Y2hlZCBwYXR0ZXJuIGFzIHVzZWQgKi8KKwkJdXNlZF9jdCArPSBwYXRoc3BlY19tYXJrX3BhdHRlcm4oJnVzZWRfcGF0dGVybnMsIHBvcyk7CisKKwkJLyogaWYgcmVzdWx0IHdhcyBhIG5lZ2F0aXZlIHBhdHRlcm4gbWF0Y2gsIHRoZW4gZG9uJ3QgbGlzdCBmaWxlICovCisJCWlmICghcmVzdWx0KQorCQkJY29udGludWU7CisKKwkJKytmb3VuZF9kZWx0YXM7CisKKwkJLyogaWYgZmluZF9mYWlsdXJlcyBpcyBvbiwgY2hlY2sgaWYgYW55IGxhdGVyIHBhdHRlcm5zIGFsc28gbWF0Y2ggKi8KKwkJaWYgKGZpbmRfZmFpbHVyZXMgJiYgdXNlZF9jdCA8IHBhdHRlcm5zLT5sZW5ndGgpCisJCQl1c2VkX2N0ICs9IHBhdGhzcGVjX21hcmtfcmVtYWluaW5nKAorCQkJCSZ1c2VkX3BhdHRlcm5zLCBwYXR0ZXJucywgJmN0eHQsIHBvcyArIDEsCisJCQkJZGVsdGEtPm9sZF9maWxlLnBhdGgsIGRlbHRhLT5uZXdfZmlsZS5wYXRoKTsKKworCQkvKiBpZiBvbmx5IGxvb2tpbmcgYXQgZmFpbHVyZXMsIGV4aXQgZWFybHkgb3IganVzdCBjb250aW51ZSAqLworCQlpZiAoZmFpbHVyZXNfb25seSB8fCAhb3V0KSB7CisJCQlpZiAodXNlZF9jdCA9PSBwYXR0ZXJucy0+bGVuZ3RoKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBpbnNlcnQgbWF0Y2hlZCBkZWx0YSBpbnRvIG1hdGNoZXMgYXJyYXkgKi8KKwkJaWYgKCEobWF0Y2ggPSAoY29uc3QgZ2l0X2RpZmZfZGVsdGEgKiopZ2l0X2FycmF5X2FsbG9jKG0tPm1hdGNoZXMpKSkgeworCQkJZXJyb3IgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfSBlbHNlIHsKKwkJCSptYXRjaCA9IGRlbHRhOworCQl9CisJfQorCisJLyogaW5zZXJ0IHBhdHRlcm5zIHRoYXQgaGFkIG5vIG1hdGNoZXMgaW50byBmYWlsdXJlcyBhcnJheSAqLworCWlmIChmaW5kX2ZhaWx1cmVzICYmIHVzZWRfY3QgPCBwYXR0ZXJucy0+bGVuZ3RoICYmCisJCShlcnJvciA9IHBhdGhzcGVjX2J1aWxkX2ZhaWx1cmVfYXJyYXkoCisJCQkmbS0+ZmFpbHVyZXMsIHBhdHRlcm5zLCAmdXNlZF9wYXR0ZXJucywgJm0tPnBvb2wpKSA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIGlmIGV2ZXJ5IHBhdHRlcm4gZmFpbGVkIHRvIG1hdGNoLCB0aGVuIHdlIGhhdmUgZmFpbGVkICovCisJaWYgKChmbGFncyAmIEdJVF9QQVRIU1BFQ19OT19NQVRDSF9FUlJPUikgIT0gMCAmJiAhZm91bmRfZGVsdGFzKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJObyBtYXRjaGluZyBkZWx0YXMgd2VyZSBmb3VuZCIpOworCQllcnJvciA9IEdJVF9FTk9URk9VTkQ7CisJfQorCitkb25lOgorCWdpdF9iaXR2ZWNfZnJlZSgmdXNlZF9wYXR0ZXJucyk7CisKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXBhdGhzcGVjX21hdGNoX2ZyZWUobSk7CisJCWlmIChvdXQpICpvdXQgPSBOVUxMOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptKQoreworCWlmIChtKQorCQlwYXRoc3BlY19tYXRjaF9mcmVlKG0pOworfQorCitzaXplX3QgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudCgKKwljb25zdCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqbSkKK3sKKwlyZXR1cm4gbSA/IGdpdF9hcnJheV9zaXplKG0tPm1hdGNoZXMpIDogMDsKK30KKworY29uc3QgY2hhciAqZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkoCisJY29uc3QgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm0sIHNpemVfdCBwb3MpCit7CisJaWYgKCFtIHx8IG0tPmRhdGF0eXBlICE9IFBBVEhTUEVDX0RBVEFUWVBFX1NUUklOR1MgfHwKKwkJIWdpdF9hcnJheV92YWxpZF9pbmRleChtLT5tYXRjaGVzLCBwb3MpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAqKChjb25zdCBjaGFyICoqKWdpdF9hcnJheV9nZXQobS0+bWF0Y2hlcywgcG9zKSk7Cit9CisKK2NvbnN0IGdpdF9kaWZmX2RlbHRhICpnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9kaWZmX2VudHJ5KAorCWNvbnN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptLCBzaXplX3QgcG9zKQoreworCWlmICghbSB8fCBtLT5kYXRhdHlwZSAhPSBQQVRIU1BFQ19EQVRBVFlQRV9ESUZGIHx8CisJCSFnaXRfYXJyYXlfdmFsaWRfaW5kZXgobS0+bWF0Y2hlcywgcG9zKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gKigoY29uc3QgZ2l0X2RpZmZfZGVsdGEgKiopZ2l0X2FycmF5X2dldChtLT5tYXRjaGVzLCBwb3MpKTsKK30KKworc2l6ZV90IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KAorCWNvbnN0IGdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptKQoreworCXJldHVybiBtID8gZ2l0X2FycmF5X3NpemUobS0+ZmFpbHVyZXMpIDogMDsKK30KKworY29uc3QgY2hhciAqIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeSgKKwljb25zdCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqbSwgc2l6ZV90IHBvcykKK3sKKwljaGFyICoqZW50cnkgPSBtID8gZ2l0X2FycmF5X2dldChtLT5mYWlsdXJlcywgcG9zKSA6IE5VTEw7CisKKwlyZXR1cm4gZW50cnkgPyAqZW50cnkgOiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9zcmMvcGF0aHNwZWMuaCBiL3NyYy9wYXRoc3BlYy5oCmluZGV4IGY2NTA5ZGY0Li40MGNkMjFjIDEwMDY0NAotLS0gYS9zcmMvcGF0aHNwZWMuaAorKysgYi9zcmMvcGF0aHNwZWMuaApAQCAtOCw5ICs4LDM1IEBACiAjZGVmaW5lIElOQ0xVREVfcGF0aHNwZWNfaF9fCiAKICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxnaXQyL3BhdGhzcGVjLmg+CiAjaW5jbHVkZSAiYnVmZmVyLmgiCiAjaW5jbHVkZSAidmVjdG9yLmgiCiAjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgImFycmF5LmgiCisKKy8qIHB1YmxpYyBjb21waWxlZCBwYXRoc3BlYyAqLworc3RydWN0IGdpdF9wYXRoc3BlYyB7CisJZ2l0X3JlZmNvdW50IHJjOworCWNoYXIgKnByZWZpeDsKKwlnaXRfdmVjdG9yIHBhdGhzcGVjOworCWdpdF9wb29sIHBvb2w7Cit9OworCitlbnVtIHsKKwlQQVRIU1BFQ19EQVRBVFlQRV9TVFJJTkdTID0gMCwKKwlQQVRIU1BFQ19EQVRBVFlQRV9ESUZGID0gMSwKK307CisKK3R5cGVkZWYgZ2l0X2FycmF5X3QoY2hhciAqKSBnaXRfcGF0aHNwZWNfc3RyaW5nX2FycmF5X3Q7CisKKy8qIHB1YmxpYyBpbnRlcmZhY2UgdG8gcGF0aHNwZWMgbWF0Y2hpbmcgKi8KK3N0cnVjdCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCB7CisJZ2l0X3BhdGhzcGVjICpwYXRoc3BlYzsKKwlnaXRfYXJyYXlfdCh2b2lkICopIG1hdGNoZXM7CisJZ2l0X3BhdGhzcGVjX3N0cmluZ19hcnJheV90IGZhaWx1cmVzOworCWdpdF9wb29sIHBvb2w7CisJaW50IGRhdGF0eXBlOworfTsKIAogLyogd2hhdCBpcyB0aGUgY29tbW9uIG5vbi13aWxkY2FyZCBwcmVmaXggZm9yIGFsbCBpdGVtcyBpbiB0aGUgcGF0aHNwZWMgKi8KIGV4dGVybiBjaGFyICpnaXRfcGF0aHNwZWNfcHJlZml4KGNvbnN0IGdpdF9zdHJhcnJheSAqcGF0aHNwZWMpOwpAQCAtMTksMzYgKzQ1LDMxIEBACiBleHRlcm4gYm9vbCBnaXRfcGF0aHNwZWNfaXNfZW1wdHkoY29uc3QgZ2l0X3N0cmFycmF5ICpwYXRoc3BlYyk7CiAKIC8qIGJ1aWxkIGEgdmVjdG9yIG9mIGZubWF0Y2ggcGF0dGVybnMgdG8gZXZhbHVhdGUgZWZmaWNpZW50bHkgKi8KLWV4dGVybiBpbnQgZ2l0X3BhdGhzcGVjX2luaXQoCitleHRlcm4gaW50IGdpdF9wYXRoc3BlY19fdmluaXQoCiAJZ2l0X3ZlY3RvciAqdnNwZWMsIGNvbnN0IGdpdF9zdHJhcnJheSAqc3Ryc3BlYywgZ2l0X3Bvb2wgKnN0cnBvb2wpOwogCiAvKiBmcmVlIGRhdGEgZnJvbSB0aGUgcGF0aHNwZWMgdmVjdG9yICovCi1leHRlcm4gdm9pZCBnaXRfcGF0aHNwZWNfZnJlZShnaXRfdmVjdG9yICp2c3BlYyk7CitleHRlcm4gdm9pZCBnaXRfcGF0aHNwZWNfX3ZmcmVlKGdpdF92ZWN0b3IgKnZzcGVjKTsKKworI2RlZmluZSBHSVRfUEFUSFNQRUNfTk9NQVRDSCAoKHNpemVfdCktMSkKIAogLyoKICAqIE1hdGNoIGEgcGF0aCBhZ2FpbnN0IHRoZSB2ZWN0b3JpemVkIHBhdGhzcGVjLgogICogVGhlIG1hdGNoZWQgcGF0aHNwZWMgaXMgcGFzc2VkIGJhY2sgaW50byB0aGUgYG1hdGNoZWRfcGF0aHNwZWNgIHBhcmFtZXRlciwKICAqIHVubGVzcyBpdCBpcyBwYXNzZWQgYXMgTlVMTCBieSB0aGUgY2FsbGVyLgogICovCi1leHRlcm4gYm9vbCBnaXRfcGF0aHNwZWNfbWF0Y2hfcGF0aCgKLQlnaXRfdmVjdG9yICp2c3BlYywKK2V4dGVybiBib29sIGdpdF9wYXRoc3BlY19fbWF0Y2goCisJY29uc3QgZ2l0X3ZlY3RvciAqdnNwZWMsCiAJY29uc3QgY2hhciAqcGF0aCwKIAlib29sIGRpc2FibGVfZm5tYXRjaCwKIAlib29sIGNhc2Vmb2xkLAotCWNvbnN0IGNoYXIgKiptYXRjaGVkX3BhdGhzcGVjKTsKKwljb25zdCBjaGFyICoqbWF0Y2hlZF9wYXRoc3BlYywKKwlzaXplX3QgKm1hdGNoZWRfYXQpOwogCiAvKiBlYXN5IHBhdGhzcGVjIHNldHVwICovCiAKLXR5cGVkZWYgc3RydWN0IHsKLQljaGFyICpwcmVmaXg7Ci0JZ2l0X3ZlY3RvciBwYXRoc3BlYzsKLQlnaXRfcG9vbCBwb29sOwotfSBnaXRfcGF0aHNwZWNfY29udGV4dDsKK2V4dGVybiBpbnQgZ2l0X3BhdGhzcGVjX19pbml0KGdpdF9wYXRoc3BlYyAqcHMsIGNvbnN0IGdpdF9zdHJhcnJheSAqcGF0aHMpOwogCi1leHRlcm4gaW50IGdpdF9wYXRoc3BlY19jb250ZXh0X2luaXQoCi0JZ2l0X3BhdGhzcGVjX2NvbnRleHQgKmN0eHQsIGNvbnN0IGdpdF9zdHJhcnJheSAqcGF0aHMpOwotCi1leHRlcm4gdm9pZCBnaXRfcGF0aHNwZWNfY29udGV4dF9mcmVlKAotCWdpdF9wYXRoc3BlY19jb250ZXh0ICpjdHh0KTsKK2V4dGVybiB2b2lkIGdpdF9wYXRoc3BlY19fY2xlYXIoZ2l0X3BhdGhzcGVjICpwcyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3Bvc2l4LmggYi9zcmMvcG9zaXguaAppbmRleCA0MGJjYzFhLi4xNGM5MmI5IDEwMDY0NAotLS0gYS9zcmMvcG9zaXguaAorKysgYi9zcmMvcG9zaXguaApAQCAtMzksNyArMzksNyBAQAogICoKICAqIFNvbWUgb2YgdGhlIG1ldGhvZHMgYXJlIHNsaWdodGx5IHdyYXBwZWQgdG8gcHJvdmlkZQogICogc2FuZXIgZGVmYXVsdHMuIFNvbWUgb2YgdGhlc2UgbWV0aG9kcyBhcmUgZW11bGF0ZWQKLSAqIGluIFdpbmRvd3MgcGxhdGZvcm5zLgorICogaW4gV2luZG93cyBwbGF0Zm9ybXMuCiAgKgogICogVXNlIHlvdXIgbWFucGFnZXMgdG8gY2hlY2sgdGhlIGRvY3Mgb24gdGhlc2UuCiAgKi8KQEAgLTcxLDE2ICs3MSwxMiBAQAogCiAjZGVmaW5lIHBfbG9jYWx0aW1lX3IgbG9jYWx0aW1lX3IKICNkZWZpbmUgcF9nbXRpbWVfciBnbXRpbWVfcgotI2RlZmluZSBwX2dldHRpbWVvZmRheSBnZXR0aW1lb2ZkYXkKIAogI2Vsc2UKIAogdHlwZWRlZiBTT0NLRVQgR0lUX1NPQ0tFVDsKLXN0cnVjdCB0aW1lem9uZTsKIGV4dGVybiBzdHJ1Y3QgdG0gKiBwX2xvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKnRpbWVyLCBzdHJ1Y3QgdG0gKnJlc3VsdCk7CiBleHRlcm4gc3RydWN0IHRtICogcF9nbXRpbWVfciAoY29uc3QgdGltZV90ICp0aW1lciwgc3RydWN0IHRtICpyZXN1bHQpOwotZXh0ZXJuIGludCBwX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOwotCiAKICNlbmRpZgogCkBAIC05Myw2ICs4OSwxMCBAQAogIwlpbmNsdWRlICJ1bml4L3Bvc2l4LmgiCiAjZW5kaWYKIAorI2lmbmRlZiBfX01JTkdXMzJfXworIyBkZWZpbmUgcF9zdHJubGVuIHN0cm5sZW4KKyNlbmRpZgorCiAjaWZkZWYgTk9fUkVBRERJUl9SCiAjCWluY2x1ZGUgPGRpcmVudC5oPgogR0lUX0lOTElORShpbnQpIHBfcmVhZGRpcl9yKERJUiAqZGlycCwgc3RydWN0IGRpcmVudCAqZW50cnksIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpCmRpZmYgLS1naXQgYS9zcmMvcHF1ZXVlLmggYi9zcmMvcHF1ZXVlLmgKaW5kZXggZWQ3MTM5Mi4uOTA2MWY4MiAxMDA2NDQKLS0tIGEvc3JjL3BxdWV1ZS5oCisrKyBiL3NyYy9wcXVldWUuaApAQCAtNDgsNyArNDgsNyBAQAogICoJCQlzaG91bGQgYmUgcHJlYWxsb2NhdGVkCiAgKiBAcGFyYW0gY21wcHJpIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjb21wYXJlIHR3byBub2RlcyBvZiB0aGUgcXVldWUKICAqCi0gKiBAUmV0dXJuIHRoZSBoYW5kbGUgb3IgTlVMTCBmb3IgaW5zdWZmaWNlbnQgbWVtb3J5CisgKiBAcmV0dXJuIHRoZSBoYW5kbGUgb3IgTlVMTCBmb3IgaW5zdWZmaWNlbnQgbWVtb3J5CiAgKi8KIGludCBnaXRfcHF1ZXVlX2luaXQoZ2l0X3BxdWV1ZSAqcSwgc2l6ZV90IG4sIGdpdF9wcXVldWVfY21wIGNtcHByaSk7CiAKQEAgLTgzLDggKzgzLDcgQEAKIAogLyoqCiAgKiBwb3AgdGhlIGhpZ2hlc3QtcmFua2luZyBpdGVtIGZyb20gdGhlIHF1ZXVlLgotICogQHBhcmFtIHAgdGhlIHF1ZXVlCi0gKiBAcGFyYW0gZCB3aGVyZSB0byBjb3B5IHRoZSBlbnRyeSB0bworICogQHBhcmFtIHEgdGhlIHF1ZXVlCiAgKiBAcmV0dXJuIE5VTEwgb24gZXJyb3IsIG90aGVyd2lzZSB0aGUgZW50cnkKICAqLwogdm9pZCAqZ2l0X3BxdWV1ZV9wb3AoZ2l0X3BxdWV1ZSAqcSk7CkBAIC05Myw3ICs5Miw2IEBACiAvKioKICAqIGFjY2VzcyBoaWdoZXN0LXJhbmtpbmcgaXRlbSB3aXRob3V0IHJlbW92aW5nIGl0LgogICogQHBhcmFtIHEgdGhlIHF1ZXVlCi0gKiBAcGFyYW0gZCB0aGUgZW50cnkKICAqIEByZXR1cm4gTlVMTCBvbiBlcnJvciwgb3RoZXJ3aXNlIHRoZSBlbnRyeQogICovCiB2b2lkICpnaXRfcHF1ZXVlX3BlZWsoZ2l0X3BxdWV1ZSAqcSk7CmRpZmYgLS1naXQgYS9zcmMvcHVzaC5jIGIvc3JjL3B1c2guYwppbmRleCA0NTJkNzE3Li4zYzlkNWJiIDEwMDY0NAotLS0gYS9zcmMvcHVzaC5jCisrKyBiL3NyYy9wdXNoLmMKQEAgLTcwLDYgKzcwLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBnaXRfcHVzaF9zZXRfY2FsbGJhY2tzKAorCWdpdF9wdXNoICpwdXNoLAorCWdpdF9wYWNrYnVpbGRlcl9wcm9ncmVzcyBwYWNrX3Byb2dyZXNzX2NiLAorCXZvaWQgKnBhY2tfcHJvZ3Jlc3NfY2JfcGF5bG9hZCwKKwlnaXRfcHVzaF90cmFuc2Zlcl9wcm9ncmVzcyB0cmFuc2Zlcl9wcm9ncmVzc19jYiwKKwl2b2lkICp0cmFuc2Zlcl9wcm9ncmVzc19jYl9wYXlsb2FkKQoreworCWlmICghcHVzaCkKKwkJcmV0dXJuIC0xOworCisJcHVzaC0+cGFja19wcm9ncmVzc19jYiA9IHBhY2tfcHJvZ3Jlc3NfY2I7CisJcHVzaC0+cGFja19wcm9ncmVzc19jYl9wYXlsb2FkID0gcGFja19wcm9ncmVzc19jYl9wYXlsb2FkOworCisJcHVzaC0+dHJhbnNmZXJfcHJvZ3Jlc3NfY2IgPSB0cmFuc2Zlcl9wcm9ncmVzc19jYjsKKwlwdXNoLT50cmFuc2Zlcl9wcm9ncmVzc19jYl9wYXlsb2FkID0gdHJhbnNmZXJfcHJvZ3Jlc3NfY2JfcGF5bG9hZDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBmcmVlX3JlZnNwZWMocHVzaF9zcGVjICpzcGVjKQogewogCWlmIChzcGVjID09IE5VTEwpCkBAIC0yMzMsNiArMjUyLDM3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKioKKyAqIEluc2VydCBhbGwgdGFncyB1bnRpbCB3ZSBmaW5kIGEgbm9uLXRhZyBvYmplY3QsIHdoaWNoIGlzIHJldHVybmVkCisgKiBpbiBgb3V0YC4KKyAqLworc3RhdGljIGludCBlbnF1ZXVlX3RhZyhnaXRfb2JqZWN0ICoqb3V0LCBnaXRfcHVzaCAqcHVzaCwgZ2l0X29pZCAqaWQpCit7CisJZ2l0X29iamVjdCAqb2JqID0gTlVMTCwgKnRhcmdldCA9IE5VTEw7CisJaW50IGVycm9yOworCisJaWYgKChlcnJvciA9IGdpdF9vYmplY3RfbG9va3VwKCZvYmosIHB1c2gtPnJlcG8sIGlkLCBHSVRfT0JKX1RBRykpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJd2hpbGUgKGdpdF9vYmplY3RfdHlwZShvYmopID09IEdJVF9PQkpfVEFHKSB7CisJCWlmICgoZXJyb3IgPSBnaXRfcGFja2J1aWxkZXJfaW5zZXJ0KHB1c2gtPnBiLCBnaXRfb2JqZWN0X2lkKG9iaiksIE5VTEwpKSA8IDApCisJCQlicmVhazsKKworCQlpZiAoKGVycm9yID0gZ2l0X3RhZ190YXJnZXQoJnRhcmdldCwgKGdpdF90YWcgKikgb2JqKSkgPCAwKQorCQkJYnJlYWs7CisKKwkJZ2l0X29iamVjdF9mcmVlKG9iaik7CisJCW9iaiA9IHRhcmdldDsKKwl9CisKKwlpZiAoZXJyb3IgPCAwKQorCQlnaXRfb2JqZWN0X2ZyZWUob2JqKTsKKwllbHNlCisJCSpvdXQgPSBvYmo7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQgcmV2d2FsayhnaXRfdmVjdG9yICpjb21taXRzLCBnaXRfcHVzaCAqcHVzaCkKIHsKIAlnaXRfcmVtb3RlX2hlYWQgKmhlYWQ7CkBAIC0yNjUsMjEgKzMxNSwxMSBAQAogCQkJZ290byBvbl9lcnJvcjsKIAogCQlpZiAodHlwZSA9PSBHSVRfT0JKX1RBRykgewotCQkJZ2l0X3RhZyAqdGFnOwogCQkJZ2l0X29iamVjdCAqdGFyZ2V0OwogCi0JCQlpZiAoZ2l0X3BhY2tidWlsZGVyX2luc2VydChwdXNoLT5wYiwgJnNwZWMtPmxvaWQsIE5VTEwpIDwgMCkKKwkJCWlmICgoZXJyb3IgPSBlbnF1ZXVlX3RhZygmdGFyZ2V0LCBwdXNoLCAmc3BlYy0+bG9pZCkpIDwgMCkKIAkJCQlnb3RvIG9uX2Vycm9yOwogCi0JCQlpZiAoZ2l0X3RhZ19sb29rdXAoJnRhZywgcHVzaC0+cmVwbywgJnNwZWMtPmxvaWQpIDwgMCkKLQkJCQlnb3RvIG9uX2Vycm9yOwotCi0JCQlpZiAoZ2l0X3RhZ19wZWVsKCZ0YXJnZXQsIHRhZykgPCAwKSB7Ci0JCQkJZ2l0X3RhZ19mcmVlKHRhZyk7Ci0JCQkJZ290byBvbl9lcnJvcjsKLQkJCX0KLQkJCWdpdF90YWdfZnJlZSh0YWcpOwotCiAJCQlpZiAoZ2l0X29iamVjdF90eXBlKHRhcmdldCkgPT0gR0lUX09CSl9DT01NSVQpIHsKIAkJCQlpZiAoZ2l0X3JldndhbGtfcHVzaChydywgZ2l0X29iamVjdF9pZCh0YXJnZXQpKSA8IDApIHsKIAkJCQkJZ2l0X29iamVjdF9mcmVlKHRhcmdldCk7CkBAIC01NDIsNyArNTgyLDcgQEAKIAogc3RhdGljIGludCBkb19wdXNoKGdpdF9wdXNoICpwdXNoKQogewotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IgPSAwOwogCWdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IHB1c2gtPnJlbW90ZS0+dHJhbnNwb3J0OwogCiAJaWYgKCF0cmFuc3BvcnQtPnB1c2gpIHsKQEAgLTU2MiwyOCArNjAyLDM2IEBACiAKIAlnaXRfcGFja2J1aWxkZXJfc2V0X3RocmVhZHMocHVzaC0+cGIsIHB1c2gtPnBiX3BhcmFsbGVsaXNtKTsKIAorCWlmIChwdXNoLT5wYWNrX3Byb2dyZXNzX2NiKQorCQlpZiAoKGVycm9yID0gZ2l0X3BhY2tidWlsZGVyX3NldF9jYWxsYmFja3MocHVzaC0+cGIsIHB1c2gtPnBhY2tfcHJvZ3Jlc3NfY2IsIHB1c2gtPnBhY2tfcHJvZ3Jlc3NfY2JfcGF5bG9hZCkpIDwgMCkKKwkJCWdvdG8gb25fZXJyb3I7CisKIAlpZiAoKGVycm9yID0gY2FsY3VsYXRlX3dvcmsocHVzaCkpIDwgMCB8fAogCQkoZXJyb3IgPSBxdWV1ZV9vYmplY3RzKHB1c2gpKSA8IDAgfHwKIAkJKGVycm9yID0gdHJhbnNwb3J0LT5wdXNoKHRyYW5zcG9ydCwgcHVzaCkpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAotCWVycm9yID0gMDsKLQogb25fZXJyb3I6CiAJZ2l0X3BhY2tidWlsZGVyX2ZyZWUocHVzaC0+cGIpOwogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBjYl9maWx0ZXJfcmVmcyhnaXRfcmVtb3RlX2hlYWQgKnJlZiwgdm9pZCAqZGF0YSkKLXsKLQlnaXRfcmVtb3RlICpyZW1vdGUgPSAoZ2l0X3JlbW90ZSAqKSBkYXRhOwotCXJldHVybiBnaXRfdmVjdG9yX2luc2VydCgmcmVtb3RlLT5yZWZzLCByZWYpOwotfQotCiBzdGF0aWMgaW50IGZpbHRlcl9yZWZzKGdpdF9yZW1vdGUgKnJlbW90ZSkKIHsKKwljb25zdCBnaXRfcmVtb3RlX2hlYWQgKipoZWFkczsKKwlzaXplX3QgaGVhZHNfbGVuLCBpOworCiAJZ2l0X3ZlY3Rvcl9jbGVhcigmcmVtb3RlLT5yZWZzKTsKLQlyZXR1cm4gZ2l0X3JlbW90ZV9scyhyZW1vdGUsIGNiX2ZpbHRlcl9yZWZzLCByZW1vdGUpOworCisJaWYgKGdpdF9yZW1vdGVfbHMoJmhlYWRzLCAmaGVhZHNfbGVuLCByZW1vdGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IGhlYWRzX2xlbjsgaSsrKSB7CisJCWlmIChnaXRfdmVjdG9yX2luc2VydCgmcmVtb3RlLT5yZWZzLCAodm9pZCAqKWhlYWRzW2ldKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGludCBnaXRfcHVzaF9maW5pc2goZ2l0X3B1c2ggKnB1c2gpCmRpZmYgLS1naXQgYS9zcmMvcHVzaC5oIGIvc3JjL3B1c2guaAppbmRleCBlOTgyYjgzLi42YzhiZjcyIDEwMDY0NAotLS0gYS9zcmMvcHVzaC5oCisrKyBiL3NyYy9wdXNoLmgKQEAgLTM5LDYgKzM5LDExIEBACiAKIAkvKiBvcHRpb25zICovCiAJdW5zaWduZWQgcGJfcGFyYWxsZWxpc207CisKKwlnaXRfcGFja2J1aWxkZXJfcHJvZ3Jlc3MgcGFja19wcm9ncmVzc19jYjsKKwl2b2lkICpwYWNrX3Byb2dyZXNzX2NiX3BheWxvYWQ7CisJZ2l0X3B1c2hfdHJhbnNmZXJfcHJvZ3Jlc3MgdHJhbnNmZXJfcHJvZ3Jlc3NfY2I7CisJdm9pZCAqdHJhbnNmZXJfcHJvZ3Jlc3NfY2JfcGF5bG9hZDsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvc3JjL3JlZmRiLmMgYi9zcmMvcmVmZGIuYwppbmRleCA0ZGU3MTg4Li5hZGI1ODgwIDEwMDY0NAotLS0gYS9zcmMvcmVmZGIuYworKysgYi9zcmMvcmVmZGIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJyZWZkYi5oIgogI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZWZsb2cuaCIKIAogaW50IGdpdF9yZWZkYl9uZXcoZ2l0X3JlZmRiICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbykKIHsKQEAgLTIwMSw1ICsyMDIsMjAgQEAKIGludCBnaXRfcmVmZGJfZGVsZXRlKHN0cnVjdCBnaXRfcmVmZGIgKmRiLCBjb25zdCBjaGFyICpyZWZfbmFtZSkKIHsKIAlhc3NlcnQoZGIgJiYgZGItPmJhY2tlbmQpOwotCXJldHVybiBkYi0+YmFja2VuZC0+ZGVsZXRlKGRiLT5iYWNrZW5kLCByZWZfbmFtZSk7CisJcmV0dXJuIGRiLT5iYWNrZW5kLT5kZWwoZGItPmJhY2tlbmQsIHJlZl9uYW1lKTsKK30KKworaW50IGdpdF9yZWZkYl9yZWZsb2dfcmVhZChnaXRfcmVmbG9nICoqb3V0LCBnaXRfcmVmZGIgKmRiLCAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgZXJyb3I7CisKKwlhc3NlcnQoZGIgJiYgZGItPmJhY2tlbmQpOworCisJaWYgKChlcnJvciA9IGRiLT5iYWNrZW5kLT5yZWZsb2dfcmVhZChvdXQsIGRiLT5iYWNrZW5kLCBuYW1lKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlHSVRfUkVGQ09VTlRfSU5DKGRiKTsKKwkoKm91dCktPmRiID0gZGI7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9yZWZkYi5oIGIvc3JjL3JlZmRiLmgKaW5kZXggM2FlYTM3Yi4uMGVlNjBkOSAxMDA2NDQKLS0tIGEvc3JjL3JlZmRiLmgKKysrIGIvc3JjL3JlZmRiLmgKQEAgLTQzLDQgKzQzLDggQEAKIGludCBnaXRfcmVmZGJfd3JpdGUoZ2l0X3JlZmRiICpyZWZkYiwgZ2l0X3JlZmVyZW5jZSAqcmVmLCBpbnQgZm9yY2UpOwogaW50IGdpdF9yZWZkYl9kZWxldGUoZ2l0X3JlZmRiICpyZWZkYiwgY29uc3QgY2hhciAqcmVmX25hbWUpOwogCitpbnQgZ2l0X3JlZmRiX3JlZmxvZ19yZWFkKGdpdF9yZWZsb2cgKipvdXQsIGdpdF9yZWZkYiAqZGIsICBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBnaXRfcmVmZGJfcmVmbG9nX3dyaXRlKGdpdF9yZWZsb2cgKnJlZmxvZyk7CisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvcmVmZGJfZnMuYyBiL3NyYy9yZWZkYl9mcy5jCmluZGV4IGI5ZTI4M2EuLjYyZDVjMTAgMTAwNjQ0Ci0tLSBhL3NyYy9yZWZkYl9mcy5jCisrKyBiL3NyYy9yZWZkYl9mcy5jCkBAIC0xNSwxMiArMTUsMTUgQEAKICNpbmNsdWRlICJyZWZkYi5oIgogI2luY2x1ZGUgInJlZmRiX2ZzLmgiCiAjaW5jbHVkZSAiaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJzb3J0ZWRjYWNoZS5oIgorI2luY2x1ZGUgInNpZ25hdHVyZS5oIgogCiAjaW5jbHVkZSA8Z2l0Mi90YWcuaD4KICNpbmNsdWRlIDxnaXQyL29iamVjdC5oPgogI2luY2x1ZGUgPGdpdDIvcmVmZGIuaD4KICNpbmNsdWRlIDxnaXQyL3N5cy9yZWZkYl9iYWNrZW5kLmg+CiAjaW5jbHVkZSA8Z2l0Mi9zeXMvcmVmcy5oPgorI2luY2x1ZGUgPGdpdDIvc3lzL3JlZmxvZy5oPgogCiBHSVRfX1VTRV9TVFJNQVA7CiAKQEAgLTUzLDI0MyArNTYsMTUxIEBACiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CiAJY2hhciAqcGF0aDsKIAotCWdpdF9yZWZjYWNoZSByZWZjYWNoZTsKKwlnaXRfc29ydGVkY2FjaGUgKnJlZmNhY2hlOwogCWludCBwZWVsaW5nX21vZGU7CisJZ2l0X2l0ZXJhdG9yX2ZsYWdfdCBpdGVyYXRvcl9mbGFnczsKKwl1aW50MzJfdCBkaXJlYWNoX2ZsYWdzOwogfSByZWZkYl9mc19iYWNrZW5kOwogCi1zdGF0aWMgaW50IHJlZmVyZW5jZV9yZWFkKAotCWdpdF9idWYgKmZpbGVfY29udGVudCwKLQl0aW1lX3QgKm10aW1lLAotCWNvbnN0IGNoYXIgKnJlcG9fcGF0aCwKLQljb25zdCBjaGFyICpyZWZfbmFtZSwKLQlpbnQgKnVwZGF0ZWQpCitzdGF0aWMgaW50IHBhY2tyZWZfY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKIHsKLQlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7Ci0JaW50IHJlc3VsdDsKLQotCWFzc2VydChmaWxlX2NvbnRlbnQgJiYgcmVwb19wYXRoICYmIHJlZl9uYW1lKTsKLQotCS8qIERldGVybWluZSB0aGUgZnVsbCBwYXRoIG9mIHRoZSBmaWxlICovCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG9fcGF0aCwgcmVmX25hbWUpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JcmVzdWx0ID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyX3VwZGF0ZWQoZmlsZV9jb250ZW50LCBwYXRoLnB0ciwgbXRpbWUsIE5VTEwsIHVwZGF0ZWQpOwotCWdpdF9idWZfZnJlZSgmcGF0aCk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCWNvbnN0IHN0cnVjdCBwYWNrcmVmICphID0gYV8sICpiID0gYl87CisJcmV0dXJuIHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKIH0KIAotc3RhdGljIGludCBwYWNrZWRfcGFyc2Vfb2lkKAotCXN0cnVjdCBwYWNrcmVmICoqcmVmX291dCwKLQljb25zdCBjaGFyICoqYnVmZmVyX291dCwKLQljb25zdCBjaGFyICpidWZmZXJfZW5kKQorc3RhdGljIGludCBwYWNrZWRfcmVsb2FkKHJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQpCiB7Ci0Jc3RydWN0IHBhY2tyZWYgKnJlZiA9IE5VTEw7CisJaW50IGVycm9yOworCWdpdF9idWYgcGFja2VkcmVmcyA9IEdJVF9CVUZfSU5JVDsKKwljaGFyICpzY2FuLCAqZW9mLCAqZW9sOwogCi0JY29uc3QgY2hhciAqYnVmZmVyID0gKmJ1ZmZlcl9vdXQ7Ci0JY29uc3QgY2hhciAqcmVmbmFtZV9iZWdpbiwgKnJlZm5hbWVfZW5kOwotCi0Jc2l6ZV90IHJlZm5hbWVfbGVuOwotCWdpdF9vaWQgaWQ7Ci0KLQlyZWZuYW1lX2JlZ2luID0gKGJ1ZmZlciArIEdJVF9PSURfSEVYU1ogKyAxKTsKLQlpZiAocmVmbmFtZV9iZWdpbiA+PSBidWZmZXJfZW5kIHx8IHJlZm5hbWVfYmVnaW5bLTFdICE9ICcgJykKLQkJZ290byBjb3JydXB0OwotCi0JLyogSXMgdGhpcyBhIHZhbGlkIG9iamVjdCBpZD8gKi8KLQlpZiAoZ2l0X29pZF9mcm9tc3RyKCZpZCwgYnVmZmVyKSA8IDApCi0JCWdvdG8gY29ycnVwdDsKLQotCXJlZm5hbWVfZW5kID0gbWVtY2hyKHJlZm5hbWVfYmVnaW4sICdcbicsIGJ1ZmZlcl9lbmQgLSByZWZuYW1lX2JlZ2luKTsKLQlpZiAocmVmbmFtZV9lbmQgPT0gTlVMTCkKLQkJcmVmbmFtZV9lbmQgPSBidWZmZXJfZW5kOwotCi0JaWYgKHJlZm5hbWVfZW5kWy0xXSA9PSAnXHInKQotCQlyZWZuYW1lX2VuZC0tOwotCi0JcmVmbmFtZV9sZW4gPSByZWZuYW1lX2VuZCAtIHJlZm5hbWVfYmVnaW47Ci0KLQlyZWYgPSBnaXRfX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBhY2tyZWYpICsgcmVmbmFtZV9sZW4gKyAxKTsKLQlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVmKTsKLQotCW1lbWNweShyZWYtPm5hbWUsIHJlZm5hbWVfYmVnaW4sIHJlZm5hbWVfbGVuKTsKLQlyZWYtPm5hbWVbcmVmbmFtZV9sZW5dID0gMDsKLQotCWdpdF9vaWRfY3B5KCZyZWYtPm9pZCwgJmlkKTsKLQotCSpyZWZfb3V0ID0gcmVmOwotCSpidWZmZXJfb3V0ID0gcmVmbmFtZV9lbmQgKyAxOwotCXJldHVybiAwOwotCi1jb3JydXB0OgotCWdpdF9fZnJlZShyZWYpOwotCWdpdGVycl9zZXQoR0lURVJSX1JFRkVSRU5DRSwgIlRoZSBwYWNrZWQgcmVmZXJlbmNlcyBmaWxlIGlzIGNvcnJ1cHRlZCIpOwotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBwYWNrZWRfcGFyc2VfcGVlbCgKLQlzdHJ1Y3QgcGFja3JlZiAqdGFnX3JlZiwKLQljb25zdCBjaGFyICoqYnVmZmVyX291dCwKLQljb25zdCBjaGFyICpidWZmZXJfZW5kKQotewotCWNvbnN0IGNoYXIgKmJ1ZmZlciA9ICpidWZmZXJfb3V0ICsgMTsKLQotCWFzc2VydChidWZmZXJbLTFdID09ICdeJyk7Ci0KLQkvKiBFbnN1cmUgaXQncyBub3QgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBmaWxlICovCi0JaWYgKHRhZ19yZWYgPT0gTlVMTCkKLQkJZ290byBjb3JydXB0OwotCi0JaWYgKGJ1ZmZlciArIEdJVF9PSURfSEVYU1ogPiBidWZmZXJfZW5kKQotCQlnb3RvIGNvcnJ1cHQ7Ci0KLQkvKiBJcyB0aGlzIGEgdmFsaWQgb2JqZWN0IGlkPyAqLwotCWlmIChnaXRfb2lkX2Zyb21zdHIoJnRhZ19yZWYtPnBlZWwsIGJ1ZmZlcikgPCAwKQotCQlnb3RvIGNvcnJ1cHQ7Ci0KLQlidWZmZXIgPSBidWZmZXIgKyBHSVRfT0lEX0hFWFNaOwotCWlmICgqYnVmZmVyID09ICdccicpCi0JCWJ1ZmZlcisrOwotCi0JaWYgKGJ1ZmZlciAhPSBidWZmZXJfZW5kKSB7Ci0JCWlmICgqYnVmZmVyID09ICdcbicpCi0JCQlidWZmZXIrKzsKLQkJZWxzZQotCQkJZ290byBjb3JydXB0OwotCX0KLQotCXRhZ19yZWYtPmZsYWdzIHw9IFBBQ0tSRUZfSEFTX1BFRUw7Ci0JKmJ1ZmZlcl9vdXQgPSBidWZmZXI7Ci0JcmV0dXJuIDA7Ci0KLWNvcnJ1cHQ6Ci0JZ2l0ZXJyX3NldChHSVRFUlJfUkVGRVJFTkNFLCAiVGhlIHBhY2tlZCByZWZlcmVuY2VzIGZpbGUgaXMgY29ycnVwdGVkIik7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IHBhY2tlZF9sb2FkKHJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQpCi17Ci0JaW50IHJlc3VsdCwgdXBkYXRlZDsKLQlnaXRfYnVmIHBhY2tmaWxlID0gR0lUX0JVRl9JTklUOwotCWNvbnN0IGNoYXIgKmJ1ZmZlcl9zdGFydCwgKmJ1ZmZlcl9lbmQ7Ci0JZ2l0X3JlZmNhY2hlICpyZWZfY2FjaGUgPSAmYmFja2VuZC0+cmVmY2FjaGU7Ci0KLQkvKiBGaXJzdCB3ZSBtYWtlIHN1cmUgd2UgaGF2ZSBhbGxvY2F0ZWQgdGhlIGhhc2ggdGFibGUgKi8KLQlpZiAocmVmX2NhY2hlLT5wYWNrZmlsZSA9PSBOVUxMKSB7Ci0JCXJlZl9jYWNoZS0+cGFja2ZpbGUgPSBnaXRfc3RybWFwX2FsbG9jKCk7Ci0JCUdJVEVSUl9DSEVDS19BTExPQyhyZWZfY2FjaGUtPnBhY2tmaWxlKTsKLQl9Ci0KLQlpZiAoYmFja2VuZC0+cGF0aCA9PSBOVUxMKQorCWlmICghYmFja2VuZC0+cGF0aCkKIAkJcmV0dXJuIDA7CiAKLQlyZXN1bHQgPSByZWZlcmVuY2VfcmVhZCgmcGFja2ZpbGUsICZyZWZfY2FjaGUtPnBhY2tmaWxlX3RpbWUsCi0JCWJhY2tlbmQtPnBhdGgsIEdJVF9QQUNLRURSRUZTX0ZJTEUsICZ1cGRhdGVkKTsKKwllcnJvciA9IGdpdF9zb3J0ZWRjYWNoZV9sb2NrYW5kbG9hZChiYWNrZW5kLT5yZWZjYWNoZSwgJnBhY2tlZHJlZnMpOwogCiAJLyoKLQkgKiBJZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBmaWxlLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSB0YWJsZSBhbmQKLQkgKiByZXR1cm4uIE9uIGFueSBvdGhlciBlcnJvciwgd2UgcmV0dXJuIHRoYXQgZXJyb3IuIElmIGV2ZXJ5dGhpbmcKLQkgKiB3ZW50IGZpbmUgYW5kIHRoZSBmaWxlIHdhc24ndCB1cGRhdGVkLCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBuZXcKLQkgKiBmb3IgdXMgaGVyZSwgc28ganVzdCByZXR1cm4uIEFueXRoaW5nIGVsc2UgbWVhbnMgd2UgbmVlZCB0bwotCSAqIHJlZnJlc2ggdGhlIHBhY2tlZCByZWZzLgorCSAqIElmIHdlIGNhbid0IGZpbmQgdGhlIHBhY2tlZC1yZWZzLCBjbGVhciB0YWJsZSBhbmQgcmV0dXJuLgorCSAqIEFueSBvdGhlciBlcnJvciBqdXN0IGdldHMgcGFzc2VkIHRocm91Z2guCisJICogSWYgbm8gZXJyb3IsIGFuZCBmaWxlIHdhc24ndCBjaGFuZ2VkLCBqdXN0IHJldHVybi4KKwkgKiBBbnl0aGluZyBlbHNlIG1lYW5zIHdlIG5lZWQgdG8gcmVmcmVzaCB0aGUgcGFja2VkIHJlZnMuCiAJICovCi0JaWYgKHJlc3VsdCA9PSBHSVRfRU5PVEZPVU5EKSB7Ci0JCWdpdF9zdHJtYXBfY2xlYXIocmVmX2NhY2hlLT5wYWNrZmlsZSk7Ci0JCXJldHVybiAwOworCWlmIChlcnJvciA8PSAwKSB7CisJCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSB7CisJCQlnaXRfc29ydGVkY2FjaGVfY2xlYXIoYmFja2VuZC0+cmVmY2FjaGUsIHRydWUpOworCQkJZ2l0ZXJyX2NsZWFyKCk7CisJCQllcnJvciA9IDA7CisJCX0KKwkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gLTE7CisJLyogQXQgdGhpcyBwb2ludCwgcmVmcmVzaCB0aGUgcGFja2VkIHJlZnMgZnJvbSB0aGUgbG9hZGVkIGJ1ZmZlci4gKi8KIAotCWlmICghdXBkYXRlZCkKLQkJcmV0dXJuIDA7CisJZ2l0X3NvcnRlZGNhY2hlX2NsZWFyKGJhY2tlbmQtPnJlZmNhY2hlLCBmYWxzZSk7CiAKLQkvKgotCSAqIEF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdG8gcmVmcmVzaCB0aGUgcGFja2VkIHJlZnMuIFdlIGFscmVhZHkKLQkgKiBoYXZlIHRoZSBjb250ZW50cyBpbiBvdXIgYnVmZmVyLgotCSAqLwotCWdpdF9zdHJtYXBfY2xlYXIocmVmX2NhY2hlLT5wYWNrZmlsZSk7Ci0KLQlidWZmZXJfc3RhcnQgPSAoY29uc3QgY2hhciAqKXBhY2tmaWxlLnB0cjsKLQlidWZmZXJfZW5kID0gKGNvbnN0IGNoYXIgKikoYnVmZmVyX3N0YXJ0KSArIHBhY2tmaWxlLnNpemU7CisJc2NhbiA9IChjaGFyICopcGFja2VkcmVmcy5wdHI7CisJZW9mICA9IHNjYW4gKyBwYWNrZWRyZWZzLnNpemU7CiAKIAliYWNrZW5kLT5wZWVsaW5nX21vZGUgPSBQRUVMSU5HX05PTkU7CiAKLQlpZiAoYnVmZmVyX3N0YXJ0WzBdID09ICcjJykgeworCWlmICgqc2NhbiA9PSAnIycpIHsKIAkJc3RhdGljIGNvbnN0IGNoYXIgKnRyYWl0c19oZWFkZXIgPSAiIyBwYWNrLXJlZnMgd2l0aDogIjsKIAotCQlpZiAoZ2l0X19wcmVmaXhjbXAoYnVmZmVyX3N0YXJ0LCB0cmFpdHNfaGVhZGVyKSA9PSAwKSB7Ci0JCQljaGFyICp0cmFpdHMgPSAoY2hhciAqKWJ1ZmZlcl9zdGFydCArIHN0cmxlbih0cmFpdHNfaGVhZGVyKTsKLQkJCWNoYXIgKnRyYWl0c19lbmQgPSBzdHJjaHIodHJhaXRzLCAnXG4nKTsKKwkJaWYgKGdpdF9fcHJlZml4Y21wKHNjYW4sIHRyYWl0c19oZWFkZXIpID09IDApIHsKKwkJCXNjYW4gKz0gc3RybGVuKHRyYWl0c19oZWFkZXIpOworCQkJZW9sID0gc3RyY2hyKHNjYW4sICdcbicpOwogCi0JCQlpZiAodHJhaXRzX2VuZCA9PSBOVUxMKQorCQkJaWYgKCFlb2wpCiAJCQkJZ290byBwYXJzZV9mYWlsZWQ7CisJCQkqZW9sID0gJ1wwJzsKIAotCQkJKnRyYWl0c19lbmQgPSAnXDAnOwotCi0JCQlpZiAoc3Ryc3RyKHRyYWl0cywgIiBmdWxseS1wZWVsZWQgIikgIT0gTlVMTCkgeworCQkJaWYgKHN0cnN0cihzY2FuLCAiIGZ1bGx5LXBlZWxlZCAiKSAhPSBOVUxMKSB7CiAJCQkJYmFja2VuZC0+cGVlbGluZ19tb2RlID0gUEVFTElOR19GVUxMOwotCQkJfSBlbHNlIGlmIChzdHJzdHIodHJhaXRzLCAiIHBlZWxlZCAiKSAhPSBOVUxMKSB7CisJCQl9IGVsc2UgaWYgKHN0cnN0cihzY2FuLCAiIHBlZWxlZCAiKSAhPSBOVUxMKSB7CiAJCQkJYmFja2VuZC0+cGVlbGluZ19tb2RlID0gUEVFTElOR19TVEFOREFSRDsKIAkJCX0KIAotCQkJYnVmZmVyX3N0YXJ0ID0gdHJhaXRzX2VuZCArIDE7CisJCQlzY2FuID0gZW9sICsgMTsKIAkJfQogCX0KIAotCXdoaWxlIChidWZmZXJfc3RhcnQgPCBidWZmZXJfZW5kICYmIGJ1ZmZlcl9zdGFydFswXSA9PSAnIycpIHsKLQkJYnVmZmVyX3N0YXJ0ID0gc3RyY2hyKGJ1ZmZlcl9zdGFydCwgJ1xuJyk7Ci0JCWlmIChidWZmZXJfc3RhcnQgPT0gTlVMTCkKKwl3aGlsZSAoc2NhbiA8IGVvZiAmJiAqc2NhbiA9PSAnIycpIHsKKwkJaWYgKCEoZW9sID0gc3RyY2hyKHNjYW4sICdcbicpKSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCi0JCWJ1ZmZlcl9zdGFydCsrOworCQlzY2FuID0gZW9sICsgMTsKIAl9CiAKLQl3aGlsZSAoYnVmZmVyX3N0YXJ0IDwgYnVmZmVyX2VuZCkgewotCQlpbnQgZXJyOwotCQlzdHJ1Y3QgcGFja3JlZiAqcmVmID0gTlVMTDsKKwl3aGlsZSAoc2NhbiA8IGVvZikgeworCQlzdHJ1Y3QgcGFja3JlZiAqcmVmOworCQlnaXRfb2lkIG9pZDsKIAotCQlpZiAocGFja2VkX3BhcnNlX29pZCgmcmVmLCAmYnVmZmVyX3N0YXJ0LCBidWZmZXJfZW5kKSA8IDApCisJCS8qIHBhcnNlICI8T0lEPiA8cmVmbmFtZT5cbiIgKi8KKworCQlpZiAoZ2l0X29pZF9mcm9tc3RyKCZvaWQsIHNjYW4pIDwgMCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOworCQlzY2FuICs9IEdJVF9PSURfSEVYU1o7CiAKLQkJaWYgKGJ1ZmZlcl9zdGFydFswXSA9PSAnXicpIHsKLQkJCWlmIChwYWNrZWRfcGFyc2VfcGVlbChyZWYsICZidWZmZXJfc3RhcnQsIGJ1ZmZlcl9lbmQpIDwgMCkKKwkJaWYgKCpzY2FuKysgIT0gJyAnKQorCQkJZ290byBwYXJzZV9mYWlsZWQ7CisJCWlmICghKGVvbCA9IHN0cmNocihzY2FuLCAnXG4nKSkpCisJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKKwkJKmVvbCA9ICdcMCc7CisJCWlmIChlb2xbLTFdID09ICdccicpCisJCQllb2xbLTFdID0gJ1wwJzsKKworCQlpZiAoZ2l0X3NvcnRlZGNhY2hlX3Vwc2VydCgodm9pZCAqKikmcmVmLCBiYWNrZW5kLT5yZWZjYWNoZSwgc2NhbikgPCAwKQorCQkJZ290byBwYXJzZV9mYWlsZWQ7CisJCXNjYW4gPSBlb2wgKyAxOworCisJCWdpdF9vaWRfY3B5KCZyZWYtPm9pZCwgJm9pZCk7CisKKwkJLyogbG9vayBmb3Igb3B0aW9uYWwgIl48T0lEPlxuIiAqLworCisJCWlmICgqc2NhbiA9PSAnXicpIHsKKwkJCWlmIChnaXRfb2lkX2Zyb21zdHIoJm9pZCwgc2NhbiArIDEpIDwgMCkKIAkJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJfSBlbHNlIGlmIChiYWNrZW5kLT5wZWVsaW5nX21vZGUgPT0gUEVFTElOR19GVUxMIHx8Ci0JCQkJCQkJKGJhY2tlbmQtPnBlZWxpbmdfbW9kZSA9PSBQRUVMSU5HX1NUQU5EQVJEICYmCi0JCQkJCQkJZ2l0X19wcmVmaXhjbXAocmVmLT5uYW1lLCBHSVRfUkVGU19UQUdTX0RJUikgPT0gMCkpIHsKLQkJCXJlZi0+ZmxhZ3MgfD0gUEFDS1JFRl9DQU5OT1RfUEVFTDsKLQkJfQorCQkJc2NhbiArPSBHSVRfT0lEX0hFWFNaICsgMTsKIAotCQlnaXRfc3RybWFwX2luc2VydChyZWZfY2FjaGUtPnBhY2tmaWxlLCByZWYtPm5hbWUsIHJlZiwgZXJyKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIHBhcnNlX2ZhaWxlZDsKKwkJCWlmIChzY2FuIDwgZW9mKSB7CisJCQkJaWYgKCEoZW9sID0gc3RyY2hyKHNjYW4sICdcbicpKSkKKwkJCQkJZ290byBwYXJzZV9mYWlsZWQ7CisJCQkJc2NhbiA9IGVvbCArIDE7CisJCQl9CisKKwkJCWdpdF9vaWRfY3B5KCZyZWYtPnBlZWwsICZvaWQpOworCQkJcmVmLT5mbGFncyB8PSBQQUNLUkVGX0hBU19QRUVMOworCQl9CisJCWVsc2UgaWYgKGJhY2tlbmQtPnBlZWxpbmdfbW9kZSA9PSBQRUVMSU5HX0ZVTEwgfHwKKwkJCQkoYmFja2VuZC0+cGVlbGluZ19tb2RlID09IFBFRUxJTkdfU1RBTkRBUkQgJiYKKwkJCQkgZ2l0X19wcmVmaXhjbXAocmVmLT5uYW1lLCBHSVRfUkVGU19UQUdTX0RJUikgPT0gMCkpCisJCQlyZWYtPmZsYWdzIHw9IFBBQ0tSRUZfQ0FOTk9UX1BFRUw7CiAJfQogCi0JZ2l0X2J1Zl9mcmVlKCZwYWNrZmlsZSk7CisJZ2l0X3NvcnRlZGNhY2hlX3d1bmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOworCWdpdF9idWZfZnJlZSgmcGFja2VkcmVmcyk7CisKIAlyZXR1cm4gMDsKIAogcGFyc2VfZmFpbGVkOgotCWdpdF9zdHJtYXBfZnJlZShyZWZfY2FjaGUtPnBhY2tmaWxlKTsKLQlyZWZfY2FjaGUtPnBhY2tmaWxlID0gTlVMTDsKLQlnaXRfYnVmX2ZyZWUoJnBhY2tmaWxlKTsKKwlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJDb3JydXB0ZWQgcGFja2VkIHJlZmVyZW5jZXMgZmlsZSIpOworCisJZ2l0X3NvcnRlZGNhY2hlX2NsZWFyKGJhY2tlbmQtPnJlZmNhY2hlLCBmYWxzZSk7CisJZ2l0X3NvcnRlZGNhY2hlX3d1bmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOworCWdpdF9idWZfZnJlZSgmcGFja2VkcmVmcyk7CisKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgbG9vc2VfcGFyc2Vfb2lkKGdpdF9vaWQgKm9pZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdpdF9idWYgKmZpbGVfY29udGVudCkKK3N0YXRpYyBpbnQgbG9vc2VfcGFyc2Vfb2lkKAorCWdpdF9vaWQgKm9pZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdpdF9idWYgKmZpbGVfY29udGVudCkKIHsKLQlzaXplX3QgbGVuOwotCWNvbnN0IGNoYXIgKnN0cjsKKwljb25zdCBjaGFyICpzdHIgPSBnaXRfYnVmX2NzdHIoZmlsZV9jb250ZW50KTsKIAotCWxlbiA9IGdpdF9idWZfbGVuKGZpbGVfY29udGVudCk7Ci0JaWYgKGxlbiA8IEdJVF9PSURfSEVYU1opCisJaWYgKGdpdF9idWZfbGVuKGZpbGVfY29udGVudCkgPCBHSVRfT0lEX0hFWFNaKQogCQlnb3RvIGNvcnJ1cHRlZDsKIAotCS8qIHN0ciBpcyBndXJhbnRlZWQgdG8gYmUgemVyby10ZXJtaW5hdGVkICovCi0Jc3RyID0gZ2l0X2J1Zl9jc3RyKGZpbGVfY29udGVudCk7Ci0KIAkvKiB3ZSBuZWVkIHRvIGdldCA0MCBPSUQgY2hhcmFjdGVycyBmcm9tIHRoZSBmaWxlICovCi0JaWYgKGdpdF9vaWRfZnJvbXN0cihvaWQsIGdpdF9idWZfY3N0cihmaWxlX2NvbnRlbnQpKSA8IDApCisJaWYgKGdpdF9vaWRfZnJvbXN0cihvaWQsIHN0cikgPCAwKQogCQlnb3RvIGNvcnJ1cHRlZDsKIAogCS8qIElmIHRoZSBmaWxlIGlzIGxvbmdlciB0aGFuIDQwIGNoYXJzLCB0aGUgNDFzdCBtdXN0IGJlIGEgc3BhY2UgKi8KQEAgLTMwMiw2OCArMjEzLDcyIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IGxvb3NlX2xvb2t1cF90b19wYWNrZmlsZSgKLQlzdHJ1Y3QgcGFja3JlZiAqKnJlZl9vdXQsCi0JcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCwKLQljb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGludCBsb29zZV9yZWFkYnVmZmVyKGdpdF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCkKIHsKLQlnaXRfYnVmIHJlZl9maWxlID0gR0lUX0JVRl9JTklUOwotCXN0cnVjdCBwYWNrcmVmICpyZWYgPSBOVUxMOwotCXNpemVfdCBuYW1lX2xlbjsKKwlpbnQgZXJyb3I7CiAKLQkqcmVmX291dCA9IE5VTEw7CisJLyogYnVpbGQgZnVsbCBwYXRoIHRvIGZpbGUgKi8KKwlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aChidWYsIGJhc2UsIHBhdGgpKSA8IDAgfHwKKwkJKGVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKGJ1ZiwgYnVmLT5wdHIpKSA8IDApCisJCWdpdF9idWZfZnJlZShidWYpOwogCi0JaWYgKHJlZmVyZW5jZV9yZWFkKCZyZWZfZmlsZSwgTlVMTCwgYmFja2VuZC0+cGF0aCwgbmFtZSwgTlVMTCkgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlnaXRfYnVmX3J0cmltKCZyZWZfZmlsZSk7Ci0KLQluYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKLQlyZWYgPSBnaXRfX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBhY2tyZWYpICsgbmFtZV9sZW4gKyAxKTsKLQlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVmKTsKLQotCW1lbWNweShyZWYtPm5hbWUsIG5hbWUsIG5hbWVfbGVuKTsKLQlyZWYtPm5hbWVbbmFtZV9sZW5dID0gMDsKLQotCWlmIChsb29zZV9wYXJzZV9vaWQoJnJlZi0+b2lkLCBuYW1lLCAmcmVmX2ZpbGUpIDwgMCkgewotCQlnaXRfYnVmX2ZyZWUoJnJlZl9maWxlKTsKLQkJZ2l0X19mcmVlKHJlZik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZWYtPmZsYWdzID0gUEFDS1JFRl9XQVNfTE9PU0U7Ci0KLQkqcmVmX291dCA9IHJlZjsKLQlnaXRfYnVmX2ZyZWUoJnJlZl9maWxlKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgbG9vc2VfbG9va3VwX3RvX3BhY2tmaWxlKHJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfYnVmIHJlZl9maWxlID0gR0lUX0JVRl9JTklUOworCXN0cnVjdCBwYWNrcmVmICpyZWYgPSBOVUxMOworCWdpdF9vaWQgb2lkOworCisJLyogaWYgd2UgZmFpbCB0byBsb2FkIHRoZSBsb29zZSByZWZlcmVuY2UsIGFzc3VtZSBzb21lb25lIGNoYW5nZWQKKwkgKiB0aGUgZmlsZXN5c3RlbSB1bmRlciB1cyBhbmQgc2tpcCBpdC4uLgorCSAqLworCWlmIChsb29zZV9yZWFkYnVmZmVyKCZyZWZfZmlsZSwgYmFja2VuZC0+cGF0aCwgbmFtZSkgPCAwKSB7CisJCWdpdGVycl9jbGVhcigpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc2tpcCBzeW1ib2xpYyByZWZzICovCisJaWYgKCFnaXRfX3ByZWZpeGNtcChnaXRfYnVmX2NzdHIoJnJlZl9maWxlKSwgR0lUX1NZTVJFRikpCisJCWdvdG8gZG9uZTsKKworCS8qIHBhcnNlIE9JRCBmcm9tIGZpbGUgKi8KKwlpZiAoKGVycm9yID0gbG9vc2VfcGFyc2Vfb2lkKCZvaWQsIG5hbWUsICZyZWZfZmlsZSkpIDwgMCkKKwkJZ290byBkb25lOworCisJZ2l0X3NvcnRlZGNhY2hlX3dsb2NrKGJhY2tlbmQtPnJlZmNhY2hlKTsKKworCWlmICghKGVycm9yID0gZ2l0X3NvcnRlZGNhY2hlX3Vwc2VydCgKKwkJCSh2b2lkICoqKSZyZWYsIGJhY2tlbmQtPnJlZmNhY2hlLCBuYW1lKSkpIHsKKworCQlnaXRfb2lkX2NweSgmcmVmLT5vaWQsICZvaWQpOworCQlyZWYtPmZsYWdzID0gUEFDS1JFRl9XQVNfTE9PU0U7CisJfQorCisJZ2l0X3NvcnRlZGNhY2hlX3d1bmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOworCitkb25lOgorCWdpdF9idWZfZnJlZSgmcmVmX2ZpbGUpOworCXJldHVybiBlcnJvcjsKK30KIAogc3RhdGljIGludCBfZGlyZW50X2xvb3NlX2xvYWQodm9pZCAqZGF0YSwgZ2l0X2J1ZiAqZnVsbF9wYXRoKQogewogCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKWRhdGE7Ci0Jdm9pZCAqb2xkX3JlZiA9IE5VTEw7Ci0Jc3RydWN0IHBhY2tyZWYgKnJlZjsKIAljb25zdCBjaGFyICpmaWxlX3BhdGg7Ci0JaW50IGVycjsKIAotCWlmIChnaXRfcGF0aF9pc2RpcihmdWxsX3BhdGgtPnB0cikgPT0gdHJ1ZSkKLQkJcmV0dXJuIGdpdF9wYXRoX2RpcmVhY2goZnVsbF9wYXRoLCBfZGlyZW50X2xvb3NlX2xvYWQsIGJhY2tlbmQpOworCWlmIChnaXRfX3N1ZmZpeGNtcChmdWxsX3BhdGgtPnB0ciwgIi5sb2NrIikgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2l0X3BhdGhfaXNkaXIoZnVsbF9wYXRoLT5wdHIpKQorCQlyZXR1cm4gZ2l0X3BhdGhfZGlyZWFjaCgKKwkJCWZ1bGxfcGF0aCwgYmFja2VuZC0+ZGlyZWFjaF9mbGFncywgX2RpcmVudF9sb29zZV9sb2FkLCBiYWNrZW5kKTsKIAogCWZpbGVfcGF0aCA9IGZ1bGxfcGF0aC0+cHRyICsgc3RybGVuKGJhY2tlbmQtPnBhdGgpOwogCi0JaWYgKGxvb3NlX2xvb2t1cF90b19wYWNrZmlsZSgmcmVmLCBiYWNrZW5kLCBmaWxlX3BhdGgpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JZ2l0X3N0cm1hcF9pbnNlcnQyKAotCQliYWNrZW5kLT5yZWZjYWNoZS5wYWNrZmlsZSwgcmVmLT5uYW1lLCByZWYsIG9sZF9yZWYsIGVycik7Ci0JaWYgKGVyciA8IDApIHsKLQkJZ2l0X19mcmVlKHJlZik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlnaXRfX2ZyZWUob2xkX3JlZik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxvb3NlX2xvb2t1cF90b19wYWNrZmlsZShiYWNrZW5kLCBmaWxlX3BhdGgpOwogfQogCiAvKgpAQCAtMzc0LDExICsyODksOCBAQAogICovCiBzdGF0aWMgaW50IHBhY2tlZF9sb2FkbG9vc2UocmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCkKIHsKKwlpbnQgZXJyb3I7CiAJZ2l0X2J1ZiByZWZzX3BhdGggPSBHSVRfQlVGX0lOSVQ7Ci0JaW50IHJlc3VsdDsKLQotCS8qIHRoZSBwYWNrZmlsZSBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGxvYWRlZCEgKi8KLQlhc3NlcnQoYmFja2VuZC0+cmVmY2FjaGUucGFja2ZpbGUpOwogCiAJaWYgKGdpdF9idWZfam9pbnBhdGgoJnJlZnNfcGF0aCwgYmFja2VuZC0+cGF0aCwgR0lUX1JFRlNfRElSKSA8IDApCiAJCXJldHVybiAtMTsKQEAgLTM4OCwxMCArMzAwLDEyIEBACiAJICogVGhpcyB3aWxsIG92ZXJ3cml0ZSBhbnkgb2xkIHBhY2tlZCBlbnRyaWVzIHdpdGggdGhlaXIKIAkgKiB1cGRhdGVkIGxvb3NlIHZlcnNpb25zCiAJICovCi0JcmVzdWx0ID0gZ2l0X3BhdGhfZGlyZWFjaCgmcmVmc19wYXRoLCBfZGlyZW50X2xvb3NlX2xvYWQsIGJhY2tlbmQpOworCWVycm9yID0gZ2l0X3BhdGhfZGlyZWFjaCgKKwkJJnJlZnNfcGF0aCwgYmFja2VuZC0+ZGlyZWFjaF9mbGFncywgX2RpcmVudF9sb29zZV9sb2FkLCBiYWNrZW5kKTsKKwogCWdpdF9idWZfZnJlZSgmcmVmc19wYXRoKTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIChlcnJvciA9PSBHSVRfRVVTRVIpID8gLTEgOiBlcnJvcjsKIH0KIAogc3RhdGljIGludCByZWZkYl9mc19iYWNrZW5kX19leGlzdHMoCkBAIC0zOTksMjMgKzMxMywxNyBAQAogCWdpdF9yZWZkYl9iYWNrZW5kICpfYmFja2VuZCwKIAljb25zdCBjaGFyICpyZWZfbmFtZSkKIHsKLQlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kOworCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKV9iYWNrZW5kOwogCWdpdF9idWYgcmVmX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAKLQlhc3NlcnQoX2JhY2tlbmQpOwotCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKV9iYWNrZW5kOworCWFzc2VydChiYWNrZW5kKTsKIAotCWlmIChwYWNrZWRfbG9hZChiYWNrZW5kKSA8IDApCisJaWYgKHBhY2tlZF9yZWxvYWQoYmFja2VuZCkgPCAwIHx8CisJCWdpdF9idWZfam9pbnBhdGgoJnJlZl9wYXRoLCBiYWNrZW5kLT5wYXRoLCByZWZfbmFtZSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcmVmX3BhdGgsIGJhY2tlbmQtPnBhdGgsIHJlZl9uYW1lKSA8IDApCi0JCXJldHVybiAtMTsKLQotCWlmIChnaXRfcGF0aF9pc2ZpbGUocmVmX3BhdGgucHRyKSA9PSB0cnVlIHx8Ci0JCWdpdF9zdHJtYXBfZXhpc3RzKGJhY2tlbmQtPnJlZmNhY2hlLnBhY2tmaWxlLCByZWZfcGF0aC5wdHIpKQotCQkqZXhpc3RzID0gMTsKLQllbHNlCi0JCSpleGlzdHMgPSAwOworCSpleGlzdHMgPSBnaXRfcGF0aF9pc2ZpbGUocmVmX3BhdGgucHRyKSB8fAorCQkoZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChiYWNrZW5kLT5yZWZjYWNoZSwgcmVmX25hbWUpICE9IE5VTEwpOwogCiAJZ2l0X2J1Zl9mcmVlKCZyZWZfcGF0aCk7CiAJcmV0dXJuIDA7CkBAIC00NDcsNjQgKzM1NSwzOSBAQAogCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQsCiAJY29uc3QgY2hhciAqcmVmX25hbWUpCiB7Ci0JY29uc3QgY2hhciAqdGFyZ2V0OwotCWdpdF9vaWQgb2lkOwogCWdpdF9idWYgcmVmX2ZpbGUgPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGVycm9yID0gMDsKIAotCWVycm9yID0gcmVmZXJlbmNlX3JlYWQoJnJlZl9maWxlLCBOVUxMLCBiYWNrZW5kLT5wYXRoLCByZWZfbmFtZSwgTlVMTCk7CisJaWYgKG91dCkKKwkJKm91dCA9IE5VTEw7CiAKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIGRvbmU7CisJaWYgKChlcnJvciA9IGxvb3NlX3JlYWRidWZmZXIoJnJlZl9maWxlLCBiYWNrZW5kLT5wYXRoLCByZWZfbmFtZSkpIDwgMCkKKwkJLyogY2Fubm90IHJlYWQgbG9vc2UgcmVmIGZpbGUgLSBnYWggKi87CisJZWxzZSBpZiAoZ2l0X19wcmVmaXhjbXAoZ2l0X2J1Zl9jc3RyKCZyZWZfZmlsZSksIEdJVF9TWU1SRUYpID09IDApIHsKKwkJY29uc3QgY2hhciAqdGFyZ2V0OwogCi0JaWYgKGdpdF9fcHJlZml4Y21wKChjb25zdCBjaGFyICopKHJlZl9maWxlLnB0ciksIEdJVF9TWU1SRUYpID09IDApIHsKIAkJZ2l0X2J1Zl9ydHJpbSgmcmVmX2ZpbGUpOwogCi0JCWlmICgodGFyZ2V0ID0gbG9vc2VfcGFyc2Vfc3ltYm9saWMoJnJlZl9maWxlKSkgPT0gTlVMTCkgeworCQlpZiAoISh0YXJnZXQgPSBsb29zZV9wYXJzZV9zeW1ib2xpYygmcmVmX2ZpbGUpKSkKIAkJCWVycm9yID0gLTE7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQkqb3V0ID0gZ2l0X3JlZmVyZW5jZV9fYWxsb2Nfc3ltYm9saWMocmVmX25hbWUsIHRhcmdldCk7CisJCWVsc2UgaWYgKG91dCAhPSBOVUxMKQorCQkJKm91dCA9IGdpdF9yZWZlcmVuY2VfX2FsbG9jX3N5bWJvbGljKHJlZl9uYW1lLCB0YXJnZXQpOwogCX0gZWxzZSB7Ci0JCWlmICgoZXJyb3IgPSBsb29zZV9wYXJzZV9vaWQoJm9pZCwgcmVmX25hbWUsICZyZWZfZmlsZSkpIDwgMCkKLQkJCWdvdG8gZG9uZTsKKwkJZ2l0X29pZCBvaWQ7CiAKLQkJKm91dCA9IGdpdF9yZWZlcmVuY2VfX2FsbG9jKHJlZl9uYW1lLCAmb2lkLCBOVUxMKTsKKwkJaWYgKCEoZXJyb3IgPSBsb29zZV9wYXJzZV9vaWQoJm9pZCwgcmVmX25hbWUsICZyZWZfZmlsZSkpICYmCisJCQlvdXQgIT0gTlVMTCkKKwkJCSpvdXQgPSBnaXRfcmVmZXJlbmNlX19hbGxvYyhyZWZfbmFtZSwgJm9pZCwgTlVMTCk7CiAJfQogCi0JaWYgKCpvdXQgPT0gTlVMTCkKLQkJZXJyb3IgPSAtMTsKLQotZG9uZToKIAlnaXRfYnVmX2ZyZWUoJnJlZl9maWxlKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgcGFja2VkX21hcF9lbnRyeSgKLQlzdHJ1Y3QgcGFja3JlZiAqKmVudHJ5LAotCWtoaXRlcl90ICpwb3MsCi0JcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCwKLQljb25zdCBjaGFyICpyZWZfbmFtZSkKK3N0YXRpYyBpbnQgcmVmX2Vycm9yX25vdGZvdW5kKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JZ2l0X3N0cm1hcCAqcGFja2ZpbGVfcmVmczsKLQotCWlmIChwYWNrZWRfbG9hZChiYWNrZW5kKSA8IDApCi0JCXJldHVybiAtMTsKLQotCS8qIExvb2sgdXAgb24gdGhlIHBhY2tmaWxlICovCi0JcGFja2ZpbGVfcmVmcyA9IGJhY2tlbmQtPnJlZmNhY2hlLnBhY2tmaWxlOwotCi0JKnBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KHBhY2tmaWxlX3JlZnMsIHJlZl9uYW1lKTsKLQotCWlmICghZ2l0X3N0cm1hcF92YWxpZF9pbmRleChwYWNrZmlsZV9yZWZzLCAqcG9zKSkgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJSZWZlcmVuY2UgJyVzJyBub3QgZm91bmQiLCByZWZfbmFtZSk7Ci0JCXJldHVybiBHSVRfRU5PVEZPVU5EOwotCX0KLQotCSplbnRyeSA9IGdpdF9zdHJtYXBfdmFsdWVfYXQocGFja2ZpbGVfcmVmcywgKnBvcyk7Ci0KLQlyZXR1cm4gMDsKKwlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJSZWZlcmVuY2UgJyVzJyBub3QgZm91bmQiLCBuYW1lKTsKKwlyZXR1cm4gR0lUX0VOT1RGT1VORDsKIH0KIAogc3RhdGljIGludCBwYWNrZWRfbG9va3VwKApAQCAtNTEyLDE4ICszOTUsMjcgQEAKIAlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kLAogCWNvbnN0IGNoYXIgKnJlZl9uYW1lKQogewotCXN0cnVjdCBwYWNrcmVmICplbnRyeTsKLQlraGl0ZXJfdCBwb3M7CiAJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgcGFja3JlZiAqZW50cnk7CiAKLQlpZiAoKGVycm9yID0gcGFja2VkX21hcF9lbnRyeSgmZW50cnksICZwb3MsIGJhY2tlbmQsIHJlZl9uYW1lKSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoKCpvdXQgPSBnaXRfcmVmZXJlbmNlX19hbGxvYyhyZWZfbmFtZSwKLQkJJmVudHJ5LT5vaWQsICZlbnRyeS0+cGVlbCkpID09IE5VTEwpCisJaWYgKHBhY2tlZF9yZWxvYWQoYmFja2VuZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlyZXR1cm4gMDsKKwlpZiAoZ2l0X3NvcnRlZGNhY2hlX3Jsb2NrKGJhY2tlbmQtPnJlZmNhY2hlKSA8IDApCisJCXJldHVybiAtMTsKKworCWVudHJ5ID0gZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChiYWNrZW5kLT5yZWZjYWNoZSwgcmVmX25hbWUpOworCWlmICghZW50cnkpIHsKKwkJZXJyb3IgPSByZWZfZXJyb3Jfbm90Zm91bmQocmVmX25hbWUpOworCX0gZWxzZSB7CisJCSpvdXQgPSBnaXRfcmVmZXJlbmNlX19hbGxvYyhyZWZfbmFtZSwgJmVudHJ5LT5vaWQsICZlbnRyeS0+cGVlbCk7CisJCWlmICghKm91dCkKKwkJCWVycm9yID0gLTE7CisJfQorCisJZ2l0X3NvcnRlZGNhY2hlX3J1bmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOworCisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IHJlZmRiX2ZzX2JhY2tlbmRfX2xvb2t1cCgKQEAgLTUzMSw3MyArNDIzLDY4IEBACiAJZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kLAogCWNvbnN0IGNoYXIgKnJlZl9uYW1lKQogewotCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7Ci0JaW50IHJlc3VsdDsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kID0gKHJlZmRiX2ZzX2JhY2tlbmQgKilfYmFja2VuZDsKKwlpbnQgZXJyb3I7CiAKLQlhc3NlcnQoX2JhY2tlbmQpOworCWFzc2VydChiYWNrZW5kKTsKIAotCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKV9iYWNrZW5kOwotCi0JaWYgKChyZXN1bHQgPSBsb29zZV9sb29rdXAob3V0LCBiYWNrZW5kLCByZWZfbmFtZSkpID09IDApCisJaWYgKCEoZXJyb3IgPSBsb29zZV9sb29rdXAob3V0LCBiYWNrZW5kLCByZWZfbmFtZSkpKQogCQlyZXR1cm4gMDsKIAogCS8qIG9ubHkgdHJ5IHRvIGxvb2t1cCB0aGlzIHJlZmVyZW5jZSBvbiB0aGUgcGFja2ZpbGUgaWYgaXQKIAkgKiB3YXNuJ3QgZm91bmQgb24gdGhlIGxvb3NlIHJlZnM7IG5vdCBpZiB0aGVyZSB3YXMgYSBjcml0aWNhbCBlcnJvciAqLwotCWlmIChyZXN1bHQgPT0gR0lUX0VOT1RGT1VORCkgeworCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSB7CiAJCWdpdGVycl9jbGVhcigpOwotCQlyZXN1bHQgPSBwYWNrZWRfbG9va3VwKG91dCwgYmFja2VuZCwgcmVmX25hbWUpOworCQllcnJvciA9IHBhY2tlZF9sb29rdXAob3V0LCBiYWNrZW5kLCByZWZfbmFtZSk7CiAJfQogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKIAlnaXRfcmVmZXJlbmNlX2l0ZXJhdG9yIHBhcmVudDsKIAogCWNoYXIgKmdsb2I7CisKKwlnaXRfcG9vbCBwb29sOwogCWdpdF92ZWN0b3IgbG9vc2U7Ci0JdW5zaWduZWQgaW50IGxvb3NlX3BvczsKLQlraGl0ZXJfdCBwYWNrZWRfcG9zOworCisJc2l6ZV90IGxvb3NlX3BvczsKKwlzaXplX3QgcGFja2VkX3BvczsKIH0gcmVmZGJfZnNfaXRlcjsKIAogc3RhdGljIHZvaWQgcmVmZGJfZnNfYmFja2VuZF9faXRlcmF0b3JfZnJlZShnaXRfcmVmZXJlbmNlX2l0ZXJhdG9yICpfaXRlcikKIHsKIAlyZWZkYl9mc19pdGVyICppdGVyID0gKHJlZmRiX2ZzX2l0ZXIgKikgX2l0ZXI7Ci0JY2hhciAqbG9vc2VfcGF0aDsKLQlzaXplX3QgaTsKLQotCWdpdF92ZWN0b3JfZm9yZWFjaCgmaXRlci0+bG9vc2UsIGksIGxvb3NlX3BhdGgpIHsKLQkJZ2l0X19mcmVlKGxvb3NlX3BhdGgpOwotCX0KIAogCWdpdF92ZWN0b3JfZnJlZSgmaXRlci0+bG9vc2UpOwotCi0JZ2l0X19mcmVlKGl0ZXItPmdsb2IpOworCWdpdF9wb29sX2NsZWFyKCZpdGVyLT5wb29sKTsKIAlnaXRfX2ZyZWUoaXRlcik7CiB9CiAKIHN0YXRpYyBpbnQgaXRlcl9sb2FkX2xvb3NlX3BhdGhzKHJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQsIHJlZmRiX2ZzX2l0ZXIgKml0ZXIpCiB7Ci0JZ2l0X3N0cm1hcCAqcGFja2ZpbGUgPSBiYWNrZW5kLT5yZWZjYWNoZS5wYWNrZmlsZTsKKwlpbnQgZXJyb3IgPSAwOwogCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfaXRlcmF0b3IgKmZzaXQ7CisJZ2l0X2l0ZXJhdG9yICpmc2l0ID0gTlVMTDsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAogCWlmICghYmFja2VuZC0+cGF0aCkgLyogZG8gbm90aGluZyBpZiBubyBwYXRoIGZvciBsb29zZSByZWZzICovCiAJCXJldHVybiAwOwogCi0JaWYgKGdpdF9idWZfcHJpbnRmKCZwYXRoLCAiJXMvcmVmcyIsIGJhY2tlbmQtPnBhdGgpIDwgMCkKLQkJcmV0dXJuIC0xOworCWlmICgoZXJyb3IgPSBnaXRfYnVmX3ByaW50ZigmcGF0aCwgIiVzL3JlZnMiLCBiYWNrZW5kLT5wYXRoKSkgPCAwIHx8CisJCShlcnJvciA9IGdpdF9pdGVyYXRvcl9mb3JfZmlsZXN5c3RlbSgKKwkJCSZmc2l0LCBwYXRoLnB0ciwgYmFja2VuZC0+aXRlcmF0b3JfZmxhZ3MsIE5VTEwsIE5VTEwpKSA8IDApIHsKKwkJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwkJcmV0dXJuIGVycm9yOworCX0KIAotCWlmIChnaXRfaXRlcmF0b3JfZm9yX2ZpbGVzeXN0ZW0oJmZzaXQsIGdpdF9idWZfY3N0cigmcGF0aCksIDAsIE5VTEwsIE5VTEwpIDwgMCkKLQkJcmV0dXJuIC0xOworCWVycm9yID0gZ2l0X2J1Zl9zZXRzKCZwYXRoLCBHSVRfUkVGU19ESVIpOwogCi0JZ2l0X3ZlY3Rvcl9pbml0KCZpdGVyLT5sb29zZSwgOCwgTlVMTCk7Ci0JZ2l0X2J1Zl9zZXRzKCZwYXRoLCBHSVRfUkVGU19ESVIpOwotCi0Jd2hpbGUgKCFnaXRfaXRlcmF0b3JfYWR2YW5jZSgmZW50cnksIGZzaXQpKSB7CisJd2hpbGUgKCFlcnJvciAmJiAhZ2l0X2l0ZXJhdG9yX2FkdmFuY2UoJmVudHJ5LCBmc2l0KSkgewogCQljb25zdCBjaGFyICpyZWZfbmFtZTsKLQkJa2hpdGVyX3QgcG9zOworCQlzdHJ1Y3QgcGFja3JlZiAqcmVmOworCQljaGFyICpyZWZfZHVwOwogCiAJCWdpdF9idWZfdHJ1bmNhdGUoJnBhdGgsIHN0cmxlbihHSVRfUkVGU19ESVIpKTsKIAkJZ2l0X2J1Zl9wdXRzKCZwYXRoLCBlbnRyeS0+cGF0aCk7CkBAIC02MDcsMjcgKzQ5NCwzMiBAQAogCQkJKGl0ZXItPmdsb2IgJiYgcF9mbm1hdGNoKGl0ZXItPmdsb2IsIHJlZl9uYW1lLCAwKSAhPSAwKSkKIAkJCWNvbnRpbnVlOwogCi0JCXBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KHBhY2tmaWxlLCByZWZfbmFtZSk7Ci0JCWlmIChnaXRfc3RybWFwX3ZhbGlkX2luZGV4KHBhY2tmaWxlLCBwb3MpKSB7Ci0JCQlzdHJ1Y3QgcGFja3JlZiAqcmVmID0gZ2l0X3N0cm1hcF92YWx1ZV9hdChwYWNrZmlsZSwgcG9zKTsKKwkJZ2l0X3NvcnRlZGNhY2hlX3Jsb2NrKGJhY2tlbmQtPnJlZmNhY2hlKTsKKwkJcmVmID0gZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChiYWNrZW5kLT5yZWZjYWNoZSwgcmVmX25hbWUpOworCQlpZiAocmVmKQogCQkJcmVmLT5mbGFncyB8PSBQQUNLUkVGX1NIQURPV0VEOwotCQl9CisJCWdpdF9zb3J0ZWRjYWNoZV9ydW5sb2NrKGJhY2tlbmQtPnJlZmNhY2hlKTsKIAotCQlnaXRfdmVjdG9yX2luc2VydCgmaXRlci0+bG9vc2UsIGdpdF9fc3RyZHVwKHJlZl9uYW1lKSk7CisJCXJlZl9kdXAgPSBnaXRfcG9vbF9zdHJkdXAoJml0ZXItPnBvb2wsIHJlZl9uYW1lKTsKKwkJaWYgKCFyZWZfZHVwKQorCQkJZXJyb3IgPSAtMTsKKwkJZWxzZQorCQkJZXJyb3IgPSBnaXRfdmVjdG9yX2luc2VydCgmaXRlci0+bG9vc2UsIHJlZl9kdXApOwogCX0KIAogCWdpdF9pdGVyYXRvcl9mcmVlKGZzaXQpOwogCWdpdF9idWZfZnJlZSgmcGF0aCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgcmVmZGJfZnNfYmFja2VuZF9faXRlcmF0b3JfbmV4dCgKIAlnaXRfcmVmZXJlbmNlICoqb3V0LCBnaXRfcmVmZXJlbmNlX2l0ZXJhdG9yICpfaXRlcikKIHsKKwlpbnQgZXJyb3IgPSBHSVRfSVRFUk9WRVI7CiAJcmVmZGJfZnNfaXRlciAqaXRlciA9IChyZWZkYl9mc19pdGVyICopX2l0ZXI7CiAJcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopaXRlci0+cGFyZW50LmRiLT5iYWNrZW5kOwotCWdpdF9zdHJtYXAgKnBhY2tmaWxlID0gYmFja2VuZC0+cmVmY2FjaGUucGFja2ZpbGU7CisJc3RydWN0IHBhY2tyZWYgKnJlZjsKIAogCXdoaWxlIChpdGVyLT5sb29zZV9wb3MgPCBpdGVyLT5sb29zZS5sZW5ndGgpIHsKIAkJY29uc3QgY2hhciAqcGF0aCA9IGdpdF92ZWN0b3JfZ2V0KCZpdGVyLT5sb29zZSwgaXRlci0+bG9vc2VfcG9zKyspOwpAQCAtNjM4LDk5ICs1MzAsMTAyIEBACiAJCWdpdGVycl9jbGVhcigpOwogCX0KIAotCXdoaWxlIChpdGVyLT5wYWNrZWRfcG9zIDwga2hfZW5kKHBhY2tmaWxlKSkgewotCQlzdHJ1Y3QgcGFja3JlZiAqcmVmID0gTlVMTDsKKwlnaXRfc29ydGVkY2FjaGVfcmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOwogCi0JCXdoaWxlICgha2hfZXhpc3QocGFja2ZpbGUsIGl0ZXItPnBhY2tlZF9wb3MpKSB7Ci0JCQlpdGVyLT5wYWNrZWRfcG9zKys7Ci0JCQlpZiAoaXRlci0+cGFja2VkX3BvcyA9PSBraF9lbmQocGFja2ZpbGUpKQotCQkJCXJldHVybiBHSVRfSVRFUk9WRVI7Ci0JCX0KLQotCQlyZWYgPSBraF92YWwocGFja2ZpbGUsIGl0ZXItPnBhY2tlZF9wb3MpOwotCQlpdGVyLT5wYWNrZWRfcG9zKys7CisJd2hpbGUgKGl0ZXItPnBhY2tlZF9wb3MgPCBnaXRfc29ydGVkY2FjaGVfZW50cnljb3VudChiYWNrZW5kLT5yZWZjYWNoZSkpIHsKKwkJcmVmID0gZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KGJhY2tlbmQtPnJlZmNhY2hlLCBpdGVyLT5wYWNrZWRfcG9zKyspOworCQlpZiAoIXJlZikgLyogc3RvcCBub3cgaWYgYW5vdGhlciB0aHJlYWQgZGVsZXRlZCByZWZzIGFuZCB3ZSBwYXN0IGVuZCAqLworCQkJYnJlYWs7CiAKIAkJaWYgKHJlZi0+ZmxhZ3MgJiBQQUNLUkVGX1NIQURPV0VEKQogCQkJY29udGludWU7Ci0KIAkJaWYgKGl0ZXItPmdsb2IgJiYgcF9mbm1hdGNoKGl0ZXItPmdsb2IsIHJlZi0+bmFtZSwgMCkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCSpvdXQgPSBnaXRfcmVmZXJlbmNlX19hbGxvYyhyZWYtPm5hbWUsICZyZWYtPm9pZCwgJnJlZi0+cGVlbCk7Ci0JCWlmICgqb3V0ID09IE5VTEwpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcmV0dXJuIDA7CisJCWVycm9yID0gKCpvdXQgIT0gTlVMTCkgPyAwIDogLTE7CisJCWJyZWFrOwogCX0KIAotCXJldHVybiBHSVRfSVRFUk9WRVI7CisJZ2l0X3NvcnRlZGNhY2hlX3J1bmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCByZWZkYl9mc19iYWNrZW5kX19pdGVyYXRvcl9uZXh0X25hbWUoCiAJY29uc3QgY2hhciAqKm91dCwgZ2l0X3JlZmVyZW5jZV9pdGVyYXRvciAqX2l0ZXIpCiB7CisJaW50IGVycm9yID0gR0lUX0lURVJPVkVSOwogCXJlZmRiX2ZzX2l0ZXIgKml0ZXIgPSAocmVmZGJfZnNfaXRlciAqKV9pdGVyOwogCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKWl0ZXItPnBhcmVudC5kYi0+YmFja2VuZDsKLQlnaXRfc3RybWFwICpwYWNrZmlsZSA9IGJhY2tlbmQtPnJlZmNhY2hlLnBhY2tmaWxlOworCXN0cnVjdCBwYWNrcmVmICpyZWY7CiAKIAl3aGlsZSAoaXRlci0+bG9vc2VfcG9zIDwgaXRlci0+bG9vc2UubGVuZ3RoKSB7CiAJCWNvbnN0IGNoYXIgKnBhdGggPSBnaXRfdmVjdG9yX2dldCgmaXRlci0+bG9vc2UsIGl0ZXItPmxvb3NlX3BvcysrKTsKIAotCQlpZiAoZ2l0X3N0cm1hcF9leGlzdHMocGFja2ZpbGUsIHBhdGgpKQotCQkJY29udGludWU7Ci0KLQkJKm91dCA9IHBhdGg7Ci0JCXJldHVybiAwOwotCX0KLQotCXdoaWxlIChpdGVyLT5wYWNrZWRfcG9zIDwga2hfZW5kKHBhY2tmaWxlKSkgewotCQl3aGlsZSAoIWtoX2V4aXN0KHBhY2tmaWxlLCBpdGVyLT5wYWNrZWRfcG9zKSkgewotCQkJaXRlci0+cGFja2VkX3BvcysrOwotCQkJaWYgKGl0ZXItPnBhY2tlZF9wb3MgPT0ga2hfZW5kKHBhY2tmaWxlKSkKLQkJCQlyZXR1cm4gR0lUX0lURVJPVkVSOworCQlpZiAobG9vc2VfbG9va3VwKE5VTEwsIGJhY2tlbmQsIHBhdGgpID09IDApIHsKKwkJCSpvdXQgPSBwYXRoOworCQkJcmV0dXJuIDA7CiAJCX0KIAotCQkqb3V0ID0ga2hfa2V5KHBhY2tmaWxlLCBpdGVyLT5wYWNrZWRfcG9zKTsKLQkJaXRlci0+cGFja2VkX3BvcysrOwotCi0JCWlmIChpdGVyLT5nbG9iICYmIHBfZm5tYXRjaChpdGVyLT5nbG9iLCAqb3V0LCAwKSAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJcmV0dXJuIDA7CisJCWdpdGVycl9jbGVhcigpOwogCX0KIAotCXJldHVybiBHSVRfSVRFUk9WRVI7CisJZ2l0X3NvcnRlZGNhY2hlX3Jsb2NrKGJhY2tlbmQtPnJlZmNhY2hlKTsKKworCXdoaWxlIChpdGVyLT5wYWNrZWRfcG9zIDwgZ2l0X3NvcnRlZGNhY2hlX2VudHJ5Y291bnQoYmFja2VuZC0+cmVmY2FjaGUpKSB7CisJCXJlZiA9IGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShiYWNrZW5kLT5yZWZjYWNoZSwgaXRlci0+cGFja2VkX3BvcysrKTsKKwkJaWYgKCFyZWYpIC8qIHN0b3Agbm93IGlmIGFub3RoZXIgdGhyZWFkIGRlbGV0ZWQgcmVmcyBhbmQgd2UgcGFzdCBlbmQgKi8KKwkJCWJyZWFrOworCisJCWlmIChyZWYtPmZsYWdzICYgUEFDS1JFRl9TSEFET1dFRCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXRlci0+Z2xvYiAmJiBwX2ZubWF0Y2goaXRlci0+Z2xvYiwgcmVmLT5uYW1lLCAwKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJKm91dCA9IHJlZi0+bmFtZTsKKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisKKwlnaXRfc29ydGVkY2FjaGVfcnVubG9jayhiYWNrZW5kLT5yZWZjYWNoZSk7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IHJlZmRiX2ZzX2JhY2tlbmRfX2l0ZXJhdG9yKAogCWdpdF9yZWZlcmVuY2VfaXRlcmF0b3IgKipvdXQsIGdpdF9yZWZkYl9iYWNrZW5kICpfYmFja2VuZCwgY29uc3QgY2hhciAqZ2xvYikKIHsKIAlyZWZkYl9mc19pdGVyICppdGVyOwotCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7CisJcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopX2JhY2tlbmQ7CiAKLQlhc3NlcnQoX2JhY2tlbmQpOwotCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKV9iYWNrZW5kOworCWFzc2VydChiYWNrZW5kKTsKIAotCWlmIChwYWNrZWRfbG9hZChiYWNrZW5kKSA8IDApCisJaWYgKHBhY2tlZF9yZWxvYWQoYmFja2VuZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpdGVyID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKHJlZmRiX2ZzX2l0ZXIpKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MoaXRlcik7CiAKLQlpZiAoZ2xvYiAhPSBOVUxMKQotCQlpdGVyLT5nbG9iID0gZ2l0X19zdHJkdXAoZ2xvYik7CisJaWYgKGdpdF9wb29sX2luaXQoJml0ZXItPnBvb2wsIDEsIDApIDwgMCB8fAorCQlnaXRfdmVjdG9yX2luaXQoJml0ZXItPmxvb3NlLCA4LCBOVUxMKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWlmIChnbG9iICE9IE5VTEwgJiYKKwkJKGl0ZXItPmdsb2IgPSBnaXRfcG9vbF9zdHJkdXAoJml0ZXItPnBvb2wsIGdsb2IpKSA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CiAKIAlpdGVyLT5wYXJlbnQubmV4dCA9IHJlZmRiX2ZzX2JhY2tlbmRfX2l0ZXJhdG9yX25leHQ7CiAJaXRlci0+cGFyZW50Lm5leHRfbmFtZSA9IHJlZmRiX2ZzX2JhY2tlbmRfX2l0ZXJhdG9yX25leHRfbmFtZTsKIAlpdGVyLT5wYXJlbnQuZnJlZSA9IHJlZmRiX2ZzX2JhY2tlbmRfX2l0ZXJhdG9yX2ZyZWU7CiAKLQlpZiAoaXRlcl9sb2FkX2xvb3NlX3BhdGhzKGJhY2tlbmQsIGl0ZXIpIDwgMCkgewotCQlyZWZkYl9mc19iYWNrZW5kX19pdGVyYXRvcl9mcmVlKChnaXRfcmVmZXJlbmNlX2l0ZXJhdG9yICopaXRlcik7Ci0JCXJldHVybiAtMTsKLQl9CisJaWYgKGl0ZXJfbG9hZF9sb29zZV9wYXRocyhiYWNrZW5kLCBpdGVyKSA8IDApCisJCWdvdG8gZmFpbDsKIAogCSpvdXQgPSAoZ2l0X3JlZmVyZW5jZV9pdGVyYXRvciAqKWl0ZXI7CiAJcmV0dXJuIDA7CisKK2ZhaWw6CisJcmVmZGJfZnNfYmFja2VuZF9faXRlcmF0b3JfZnJlZSgoZ2l0X3JlZmVyZW5jZV9pdGVyYXRvciAqKWl0ZXIpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGJvb2wgcmVmX2lzX2F2YWlsYWJsZSgKQEAgLTc1NiwzMyArNjUxLDQwIEBACiAJY29uc3QgY2hhciogb2xkX3JlZiwKIAlpbnQgZm9yY2UpCiB7Ci0Jc3RydWN0IHBhY2tyZWYgKnRoaXNfcmVmOworCXNpemVfdCBpOwogCi0JaWYgKHBhY2tlZF9sb2FkKGJhY2tlbmQpIDwgMCkKKwlpZiAocGFja2VkX3JlbG9hZChiYWNrZW5kKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmICghZm9yY2UpIHsKIAkJaW50IGV4aXN0czsKIAotCQlpZiAocmVmZGJfZnNfYmFja2VuZF9fZXhpc3RzKCZleGlzdHMsIChnaXRfcmVmZGJfYmFja2VuZCAqKWJhY2tlbmQsIG5ld19yZWYpIDwgMCkKKwkJaWYgKHJlZmRiX2ZzX2JhY2tlbmRfX2V4aXN0cygKKwkJCQkmZXhpc3RzLCAoZ2l0X3JlZmRiX2JhY2tlbmQgKiliYWNrZW5kLCBuZXdfcmVmKSA8IDApCiAJCQlyZXR1cm4gLTE7CiAKIAkJaWYgKGV4aXN0cykgewogCQkJZ2l0ZXJyX3NldChHSVRFUlJfUkVGRVJFTkNFLAogCQkJCSJGYWlsZWQgdG8gd3JpdGUgcmVmZXJlbmNlICclcyc6IGEgcmVmZXJlbmNlIHdpdGggIgotCQkJCSIgdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzLiIsIG5ld19yZWYpOworCQkJCSJ0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMuIiwgbmV3X3JlZik7CiAJCQlyZXR1cm4gR0lUX0VFWElTVFM7CiAJCX0KIAl9CiAKLQlnaXRfc3RybWFwX2ZvcmVhY2hfdmFsdWUoYmFja2VuZC0+cmVmY2FjaGUucGFja2ZpbGUsIHRoaXNfcmVmLCB7Ci0JCWlmICghcmVmX2lzX2F2YWlsYWJsZShvbGRfcmVmLCBuZXdfcmVmLCB0aGlzX3JlZi0+bmFtZSkpIHsKKwlnaXRfc29ydGVkY2FjaGVfcmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOworCisJZm9yIChpID0gMDsgaSA8IGdpdF9zb3J0ZWRjYWNoZV9lbnRyeWNvdW50KGJhY2tlbmQtPnJlZmNhY2hlKTsgKytpKSB7CisJCXN0cnVjdCBwYWNrcmVmICpyZWYgPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoYmFja2VuZC0+cmVmY2FjaGUsIGkpOworCisJCWlmIChyZWYgJiYgIXJlZl9pc19hdmFpbGFibGUob2xkX3JlZiwgbmV3X3JlZiwgcmVmLT5uYW1lKSkgeworCQkJZ2l0X3NvcnRlZGNhY2hlX3J1bmxvY2soYmFja2VuZC0+cmVmY2FjaGUpOwogCQkJZ2l0ZXJyX3NldChHSVRFUlJfUkVGRVJFTkNFLAotCQkJCSJUaGUgcGF0aCB0byByZWZlcmVuY2UgJyVzJyBjb2xsaWRlcyB3aXRoIGFuIGV4aXN0aW5nIG9uZSIsIG5ld19yZWYpOworCQkJCSJQYXRoIHRvIHJlZmVyZW5jZSAnJXMnIGNvbGxpZGVzIHdpdGggZXhpc3Rpbmcgb25lIiwgbmV3X3JlZik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQl9KTsKLQkKKwl9CisKKwlnaXRfc29ydGVkY2FjaGVfcnVubG9jayhiYWNrZW5kLT5yZWZjYWNoZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgwMCw3ICs3MDIsNyBAQAogCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZyZWZfcGF0aCwgYmFja2VuZC0+cGF0aCwgcmVmLT5uYW1lKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCByZWZfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFKSA8IDApIHsKKwlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgcmVmX3BhdGgucHRyLCBHSVRfRklMRUJVRl9GT1JDRSwgR0lUX1JFRlNfRklMRV9NT0RFKSA8IDApIHsKIAkJZ2l0X2J1Zl9mcmVlKCZyZWZfcGF0aCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC04MDksMjcgKzcxMSwxNiBAQAogCiAJaWYgKHJlZi0+dHlwZSA9PSBHSVRfUkVGX09JRCkgewogCQljaGFyIG9pZFtHSVRfT0lEX0hFWFNaICsgMV07Ci0KLQkJZ2l0X29pZF9mbXQob2lkLCAmcmVmLT50YXJnZXQub2lkKTsKLQkJb2lkW0dJVF9PSURfSEVYU1pdID0gJ1wwJzsKKwkJZ2l0X29pZF9uZm10KG9pZCwgc2l6ZW9mKG9pZCksICZyZWYtPnRhcmdldC5vaWQpOwogCiAJCWdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIiVzXG4iLCBvaWQpOwotCiAJfSBlbHNlIGlmIChyZWYtPnR5cGUgPT0gR0lUX1JFRl9TWU1CT0xJQykgewogCQlnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsIEdJVF9TWU1SRUYgIiVzXG4iLCByZWYtPnRhcmdldC5zeW1ib2xpYyk7CiAJfSBlbHNlIHsKIAkJYXNzZXJ0KDApOyAvKiBkb24ndCBsZXQgdGhpcyBoYXBwZW4gKi8KIAl9CiAKLQlyZXR1cm4gZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlLCBHSVRfUkVGU19GSUxFX01PREUpOwotfQotCi1zdGF0aWMgaW50IHBhY2tlZF9zb3J0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0JY29uc3Qgc3RydWN0IHBhY2tyZWYgKnJlZl9hID0gKGNvbnN0IHN0cnVjdCBwYWNrcmVmICopYTsKLQljb25zdCBzdHJ1Y3QgcGFja3JlZiAqcmVmX2IgPSAoY29uc3Qgc3RydWN0IHBhY2tyZWYgKiliOwotCi0JcmV0dXJuIHN0cmNtcChyZWZfYS0+bmFtZSwgcmVmX2ItPm5hbWUpOworCXJldHVybiBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUpOwogfQogCiAvKgpAQCAtODg0LDkgKzc3NSw3IEBACiBzdGF0aWMgaW50IHBhY2tlZF93cml0ZV9yZWYoc3RydWN0IHBhY2tyZWYgKnJlZiwgZ2l0X2ZpbGVidWYgKmZpbGUpCiB7CiAJY2hhciBvaWRbR0lUX09JRF9IRVhTWiArIDFdOwotCi0JZ2l0X29pZF9mbXQob2lkLCAmcmVmLT5vaWQpOwotCW9pZFtHSVRfT0lEX0hFWFNaXSA9IDA7CisJZ2l0X29pZF9uZm10KG9pZCwgc2l6ZW9mKG9pZCksICZyZWYtPm9pZCk7CiAKIAkvKgogCSAqIEZvciByZWZlcmVuY2VzIHRoYXQgcGVlbCB0byBhbiBvYmplY3QgaW4gdGhlIHJlcG8sIHdlIG11c3QKQEAgLTkwMCw4ICs3ODksNyBAQAogCSAqLwogCWlmIChyZWYtPmZsYWdzICYgUEFDS1JFRl9IQVNfUEVFTCkgewogCQljaGFyIHBlZWxbR0lUX09JRF9IRVhTWiArIDFdOwotCQlnaXRfb2lkX2ZtdChwZWVsLCAmcmVmLT5wZWVsKTsKLQkJcGVlbFtHSVRfT0lEX0hFWFNaXSA9IDA7CisJCWdpdF9vaWRfbmZtdChwZWVsLCBzaXplb2YocGVlbCksICZyZWYtPnBlZWwpOwogCiAJCWlmIChnaXRfZmlsZWJ1Zl9wcmludGYoZmlsZSwgIiVzICVzXG5eJXNcbiIsIG9pZCwgcmVmLT5uYW1lLCBwZWVsKSA8IDApCiAJCQlyZXR1cm4gLTE7CkBAIC05MjQsMzEgKzgxMiwzMCBAQAogICogaXMgd2VsbC13cml0dGVuLCBiZWNhdXNlIHdlIGFyZSBkZXN0cnVjdGluZyByZWZlcmVuY2VzCiAgKiBoZXJlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBwYWNrZWRfcmVtb3ZlX2xvb3NlKAotCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQsCi0JZ2l0X3ZlY3RvciAqcGFja2luZ19saXN0KQorc3RhdGljIGludCBwYWNrZWRfcmVtb3ZlX2xvb3NlKHJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQpCiB7CiAJc2l6ZV90IGk7CiAJZ2l0X2J1ZiBmdWxsX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGZhaWxlZCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGFja2luZ19saXN0LT5sZW5ndGg7ICsraSkgewotCQlzdHJ1Y3QgcGFja3JlZiAqcmVmID0gZ2l0X3ZlY3Rvcl9nZXQocGFja2luZ19saXN0LCBpKTsKKwkvKiBiYWNrZW5kLT5yZWZjYWNoZSBpcyBhbHJlYWR5IGxvY2tlZCB3aGVuIHRoaXMgaXMgY2FsbGVkICovCiAKLQkJaWYgKChyZWYtPmZsYWdzICYgUEFDS1JFRl9XQVNfTE9PU0UpID09IDApCisJZm9yIChpID0gMDsgaSA8IGdpdF9zb3J0ZWRjYWNoZV9lbnRyeWNvdW50KGJhY2tlbmQtPnJlZmNhY2hlKTsgKytpKSB7CisJCXN0cnVjdCBwYWNrcmVmICpyZWYgPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoYmFja2VuZC0+cmVmY2FjaGUsIGkpOworCisJCWlmICghcmVmIHx8ICEocmVmLT5mbGFncyAmIFBBQ0tSRUZfV0FTX0xPT1NFKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZmdWxsX3BhdGgsIGJhY2tlbmQtPnBhdGgsIHJlZi0+bmFtZSkgPCAwKQogCQkJcmV0dXJuIC0xOyAvKiBjcml0aWNhbDsgZG8gbm90IHRyeSB0byByZWNvdmVyIG9uIG9vbSAqLwogCi0JCWlmIChnaXRfcGF0aF9leGlzdHMoZnVsbF9wYXRoLnB0cikgPT0gdHJ1ZSAmJiBwX3VubGluayhmdWxsX3BhdGgucHRyKSA8IDApIHsKKwkJaWYgKGdpdF9wYXRoX2V4aXN0cyhmdWxsX3BhdGgucHRyKSAmJiBwX3VubGluayhmdWxsX3BhdGgucHRyKSA8IDApIHsKIAkJCWlmIChmYWlsZWQpCiAJCQkJY29udGludWU7CiAKIAkJCWdpdGVycl9zZXQoR0lURVJSX1JFRkVSRU5DRSwKIAkJCQkiRmFpbGVkIHRvIHJlbW92ZSBsb29zZSByZWZlcmVuY2UgJyVzJyBhZnRlciBwYWNraW5nOiAlcyIsCiAJCQkJZnVsbF9wYXRoLnB0ciwgc3RyZXJyb3IoZXJybm8pKTsKLQogCQkJZmFpbGVkID0gMTsKIAkJfQogCkBAIC05NjksODUgKzg1Niw1MyBAQAogICovCiBzdGF0aWMgaW50IHBhY2tlZF93cml0ZShyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kKQogeworCWdpdF9zb3J0ZWRjYWNoZSAqcmVmY2FjaGUgPSBiYWNrZW5kLT5yZWZjYWNoZTsKIAlnaXRfZmlsZWJ1ZiBwYWNrX2ZpbGUgPSBHSVRfRklMRUJVRl9JTklUOwogCXNpemVfdCBpOwotCWdpdF9idWYgcGFja19maWxlX3BhdGggPSBHSVRfQlVGX0lOSVQ7Ci0JZ2l0X3ZlY3RvciBwYWNraW5nX2xpc3Q7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3JlZnM7CiAKLQlhc3NlcnQoYmFja2VuZCAmJiBiYWNrZW5kLT5yZWZjYWNoZS5wYWNrZmlsZSk7Ci0KLQl0b3RhbF9yZWZzID0KLQkJKHVuc2lnbmVkIGludClnaXRfc3RybWFwX251bV9lbnRyaWVzKGJhY2tlbmQtPnJlZmNhY2hlLnBhY2tmaWxlKTsKLQotCWlmIChnaXRfdmVjdG9yX2luaXQoJnBhY2tpbmdfbGlzdCwgdG90YWxfcmVmcywgcGFja2VkX3NvcnQpIDwgMCkKKwkvKiBsb2NrIHRoZSBjYWNoZSB0byB1cGRhdGVzIHdoaWxlIHdlIGRvIHRoaXMgKi8KKwlpZiAoZ2l0X3NvcnRlZGNhY2hlX3dsb2NrKHJlZmNhY2hlKSA8IDApCiAJCXJldHVybiAtMTsKIAotCS8qIExvYWQgYWxsIHRoZSBwYWNrZmlsZSBpbnRvIGEgdmVjdG9yICovCi0JewotCQlzdHJ1Y3QgcGFja3JlZiAqcmVmZXJlbmNlOwotCi0JCS8qIGNhbm5vdCBmYWlsOiB2ZWN0b3IgYWxyZWFkeSBoYXMgdGhlIHJpZ2h0IHNpemUgKi8KLQkJZ2l0X3N0cm1hcF9mb3JlYWNoX3ZhbHVlKGJhY2tlbmQtPnJlZmNhY2hlLnBhY2tmaWxlLCByZWZlcmVuY2UsIHsKLQkJCWdpdF92ZWN0b3JfaW5zZXJ0KCZwYWNraW5nX2xpc3QsIHJlZmVyZW5jZSk7Ci0JCX0pOwotCX0KLQotCS8qIHNvcnQgdGhlIHZlY3RvciBzbyB0aGUgZW50cmllcyBhcHBlYXIgc29ydGVkIG9uIHRoZSBwYWNrZmlsZSAqLwotCWdpdF92ZWN0b3Jfc29ydCgmcGFja2luZ19saXN0KTsKLQotCS8qIE5vdyB3ZSBjYW4gb3BlbiB0aGUgZmlsZSEgKi8KLQlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcGFja19maWxlX3BhdGgsCi0JCWJhY2tlbmQtPnBhdGgsIEdJVF9QQUNLRURSRUZTX0ZJTEUpIDwgMCkKLQkJZ290byBjbGVhbnVwX21lbW9yeTsKLQotCWlmIChnaXRfZmlsZWJ1Zl9vcGVuKCZwYWNrX2ZpbGUsIHBhY2tfZmlsZV9wYXRoLnB0ciwgMCkgPCAwKQotCQlnb3RvIGNsZWFudXBfcGFja2ZpbGU7CisJLyogT3BlbiB0aGUgZmlsZSEgKi8KKwlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmcGFja19maWxlLCBnaXRfc29ydGVkY2FjaGVfcGF0aChyZWZjYWNoZSksIDAsIEdJVF9QQUNLRURSRUZTX0ZJTEVfTU9ERSkgPCAwKQorCQlnb3RvIGZhaWw7CiAKIAkvKiBQYWNrZmlsZXMgaGF2ZSBhIGhlYWRlci4uLiBhcHBhcmVudGx5CiAJICogVGhpcyBpcyBpbiBmYWN0IG5vdCByZXF1aXJlZCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgcHJpbnQgaXQKIAkgKiBqdXN0IGZvciBraWNrcyAqLwogCWlmIChnaXRfZmlsZWJ1Zl9wcmludGYoJnBhY2tfZmlsZSwgIiVzXG4iLCBHSVRfUEFDS0VEUkVGU19IRUFERVIpIDwgMCkKLQkJZ290byBjbGVhbnVwX3BhY2tmaWxlOworCQlnb3RvIGZhaWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGFja2luZ19saXN0Lmxlbmd0aDsgKytpKSB7Ci0JCXN0cnVjdCBwYWNrcmVmICpyZWYgPSAoc3RydWN0IHBhY2tyZWYgKilnaXRfdmVjdG9yX2dldCgmcGFja2luZ19saXN0LCBpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ2l0X3NvcnRlZGNhY2hlX2VudHJ5Y291bnQocmVmY2FjaGUpOyArK2kpIHsKKwkJc3RydWN0IHBhY2tyZWYgKnJlZiA9IGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShyZWZjYWNoZSwgaSk7CiAKIAkJaWYgKHBhY2tlZF9maW5kX3BlZWwoYmFja2VuZCwgcmVmKSA8IDApCi0JCQlnb3RvIGNsZWFudXBfcGFja2ZpbGU7CisJCQlnb3RvIGZhaWw7CiAKIAkJaWYgKHBhY2tlZF93cml0ZV9yZWYocmVmLCAmcGFja19maWxlKSA8IDApCi0JCQlnb3RvIGNsZWFudXBfcGFja2ZpbGU7CisJCQlnb3RvIGZhaWw7CiAJfQogCiAJLyogaWYgd2UndmUgd3JpdHRlbiBhbGwgdGhlIHJlZmVyZW5jZXMgcHJvcGVybHksIHdlIGNhbiBjb21taXQKIAkgKiB0aGUgcGFja2ZpbGUgdG8gbWFrZSB0aGUgY2hhbmdlcyBlZmZlY3RpdmUgKi8KLQlpZiAoZ2l0X2ZpbGVidWZfY29tbWl0KCZwYWNrX2ZpbGUsIEdJVF9QQUNLRURSRUZTX0ZJTEVfTU9ERSkgPCAwKQotCQlnb3RvIGNsZWFudXBfbWVtb3J5OworCWlmIChnaXRfZmlsZWJ1Zl9jb21taXQoJnBhY2tfZmlsZSkgPCAwKQorCQlnb3RvIGZhaWw7CiAKIAkvKiB3aGVuIGFuZCBvbmx5IHdoZW4gdGhlIHBhY2tmaWxlIGhhcyBiZWVuIHByb3Blcmx5IHdyaXR0ZW4sCiAJICogd2UgY2FuIGdvIGFoZWFkIGFuZCByZW1vdmUgdGhlIGxvb3NlIHJlZnMgKi8KLQkgaWYgKHBhY2tlZF9yZW1vdmVfbG9vc2UoYmFja2VuZCwgJnBhY2tpbmdfbGlzdCkgPCAwKQotCQkgZ290byBjbGVhbnVwX21lbW9yeTsKKwlpZiAocGFja2VkX3JlbW92ZV9sb29zZShiYWNrZW5kKSA8IDApCisJCWdvdG8gZmFpbDsKIAotCSB7Ci0JCXN0cnVjdCBzdGF0IHN0OwotCQlpZiAocF9zdGF0KHBhY2tfZmlsZV9wYXRoLnB0ciwgJnN0KSA9PSAwKQotCQkJYmFja2VuZC0+cmVmY2FjaGUucGFja2ZpbGVfdGltZSA9IHN0LnN0X210aW1lOwotCSB9Ci0KLQlnaXRfdmVjdG9yX2ZyZWUoJnBhY2tpbmdfbGlzdCk7Ci0JZ2l0X2J1Zl9mcmVlKCZwYWNrX2ZpbGVfcGF0aCk7CisJZ2l0X3NvcnRlZGNhY2hlX3VwZGF0ZWQocmVmY2FjaGUpOworCWdpdF9zb3J0ZWRjYWNoZV93dW5sb2NrKHJlZmNhY2hlKTsKIAogCS8qIHdlJ3JlIGdvb2Qgbm93ICovCiAJcmV0dXJuIDA7CiAKLWNsZWFudXBfcGFja2ZpbGU6CitmYWlsOgogCWdpdF9maWxlYnVmX2NsZWFudXAoJnBhY2tfZmlsZSk7Ci0KLWNsZWFudXBfbWVtb3J5OgotCWdpdF92ZWN0b3JfZnJlZSgmcGFja2luZ19saXN0KTsKLQlnaXRfYnVmX2ZyZWUoJnBhY2tfZmlsZV9wYXRoKTsKKwlnaXRfc29ydGVkY2FjaGVfd3VubG9jayhyZWZjYWNoZSk7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC0xMDU3LDExICs5MTIsMTAgQEAKIAljb25zdCBnaXRfcmVmZXJlbmNlICpyZWYsCiAJaW50IGZvcmNlKQogewotCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7CisJcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopX2JhY2tlbmQ7CiAJaW50IGVycm9yOwogCi0JYXNzZXJ0KF9iYWNrZW5kKTsKLQliYWNrZW5kID0gKHJlZmRiX2ZzX2JhY2tlbmQgKilfYmFja2VuZDsKKwlhc3NlcnQoYmFja2VuZCk7CiAKIAllcnJvciA9IHJlZmVyZW5jZV9wYXRoX2F2YWlsYWJsZShiYWNrZW5kLCByZWYtPm5hbWUsIE5VTEwsIGZvcmNlKTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTA3NCwxNyArOTI4LDEzIEBACiAJZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kLAogCWNvbnN0IGNoYXIgKnJlZl9uYW1lKQogewotCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7CisJcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopX2JhY2tlbmQ7CiAJZ2l0X2J1ZiBsb29zZV9wYXRoID0gR0lUX0JVRl9JTklUOwotCXN0cnVjdCBwYWNrcmVmICpwYWNrX3JlZjsKLQlraGl0ZXJfdCBwYWNrX3JlZl9wb3M7CisJc2l6ZV90IHBhY2tfcG9zOwogCWludCBlcnJvciA9IDA7CiAJYm9vbCBsb29zZV9kZWxldGVkID0gMDsKIAotCWFzc2VydChfYmFja2VuZCk7Ci0JYXNzZXJ0KHJlZl9uYW1lKTsKLQotCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKV9iYWNrZW5kOworCWFzc2VydChiYWNrZW5kICYmIHJlZl9uYW1lKTsKIAogCS8qIElmIGEgbG9vc2UgcmVmZXJlbmNlIGV4aXN0cywgcmVtb3ZlIGl0IGZyb20gdGhlIGZpbGVzeXN0ZW0gKi8KIAlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmbG9vc2VfcGF0aCwgYmFja2VuZC0+cGF0aCwgcmVmX25hbWUpIDwgMCkKQEAgLTExMDAsMTkgKzk1MCwyMyBAQAogCWlmIChlcnJvciAhPSAwKQogCQlyZXR1cm4gZXJyb3I7CiAKKwlpZiAocGFja2VkX3JlbG9hZChiYWNrZW5kKSA8IDApCisJCXJldHVybiAtMTsKKwogCS8qIElmIGEgcGFja2VkIHJlZmVyZW5jZSBleGlzdHMsIHJlbW92ZSBpdCBmcm9tIHRoZSBwYWNrZmlsZSBhbmQgcmVwYWNrICovCi0JZXJyb3IgPSBwYWNrZWRfbWFwX2VudHJ5KCZwYWNrX3JlZiwgJnBhY2tfcmVmX3BvcywgYmFja2VuZCwgcmVmX25hbWUpOworCWlmIChnaXRfc29ydGVkY2FjaGVfd2xvY2soYmFja2VuZC0+cmVmY2FjaGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCEoZXJyb3IgPSBnaXRfc29ydGVkY2FjaGVfbG9va3VwX2luZGV4KAorCQkJJnBhY2tfcG9zLCBiYWNrZW5kLT5yZWZjYWNoZSwgcmVmX25hbWUpKSkKKwkJZXJyb3IgPSBnaXRfc29ydGVkY2FjaGVfcmVtb3ZlKGJhY2tlbmQtPnJlZmNhY2hlLCBwYWNrX3Bvcyk7CisKKwlnaXRfc29ydGVkY2FjaGVfd3VubG9jayhiYWNrZW5kLT5yZWZjYWNoZSk7CiAKIAlpZiAoZXJyb3IgPT0gR0lUX0VOT1RGT1VORCkKLQkJcmV0dXJuIGxvb3NlX2RlbGV0ZWQgPyAwIDogR0lUX0VOT1RGT1VORDsKKwkJcmV0dXJuIGxvb3NlX2RlbGV0ZWQgPyAwIDogcmVmX2Vycm9yX25vdGZvdW5kKHJlZl9uYW1lKTsKIAotCWlmIChlcnJvciA9PSAwKSB7Ci0JCWdpdF9zdHJtYXBfZGVsZXRlX2F0KGJhY2tlbmQtPnJlZmNhY2hlLnBhY2tmaWxlLCBwYWNrX3JlZl9wb3MpOwotCQlnaXRfX2ZyZWUocGFja19yZWYpOwotCQllcnJvciA9IHBhY2tlZF93cml0ZShiYWNrZW5kKTsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHBhY2tlZF93cml0ZShiYWNrZW5kKTsKIH0KIAogc3RhdGljIGludCByZWZkYl9mc19iYWNrZW5kX19yZW5hbWUoCkBAIC0xMTIyLDUzICs5NzYsNDQgQEAKIAljb25zdCBjaGFyICpuZXdfbmFtZSwKIAlpbnQgZm9yY2UpCiB7Ci0JcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZDsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kID0gKHJlZmRiX2ZzX2JhY2tlbmQgKilfYmFja2VuZDsKIAlnaXRfcmVmZXJlbmNlICpvbGQsICpuZXc7CiAJaW50IGVycm9yOwogCi0JYXNzZXJ0KF9iYWNrZW5kKTsKLQliYWNrZW5kID0gKHJlZmRiX2ZzX2JhY2tlbmQgKilfYmFja2VuZDsKKwlhc3NlcnQoYmFja2VuZCk7CiAKLQllcnJvciA9IHJlZmVyZW5jZV9wYXRoX2F2YWlsYWJsZShiYWNrZW5kLCBuZXdfbmFtZSwgb2xkX25hbWUsIGZvcmNlKTsKLQlpZiAoZXJyb3IgPCAwKQorCWlmICgoZXJyb3IgPSByZWZlcmVuY2VfcGF0aF9hdmFpbGFibGUoCisJCQliYWNrZW5kLCBuZXdfbmFtZSwgb2xkX25hbWUsIGZvcmNlKSkgPCAwIHx8CisJCShlcnJvciA9IHJlZmRiX2ZzX2JhY2tlbmRfX2xvb2t1cCgmb2xkLCBfYmFja2VuZCwgb2xkX25hbWUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gcmVmZGJfZnNfYmFja2VuZF9fbG9va3VwKCZvbGQsIF9iYWNrZW5kLCBvbGRfbmFtZSk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSByZWZkYl9mc19iYWNrZW5kX19kZWxldGUoX2JhY2tlbmQsIG9sZF9uYW1lKTsKLQlpZiAoZXJyb3IgPCAwKSB7CisJaWYgKChlcnJvciA9IHJlZmRiX2ZzX2JhY2tlbmRfX2RlbGV0ZShfYmFja2VuZCwgb2xkX25hbWUpKSA8IDApIHsKIAkJZ2l0X3JlZmVyZW5jZV9mcmVlKG9sZCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQluZXcgPSByZWFsbG9jKG9sZCwgc2l6ZW9mKGdpdF9yZWZlcmVuY2UpICsgc3RybGVuKG5ld19uYW1lKSArIDEpOwotCW1lbWNweShuZXctPm5hbWUsIG5ld19uYW1lLCBzdHJsZW4obmV3X25hbWUpICsgMSk7CisJbmV3ID0gZ2l0X3JlZmVyZW5jZV9fc2V0X25hbWUob2xkLCBuZXdfbmFtZSk7CisJaWYgKCFuZXcpIHsKKwkJZ2l0X3JlZmVyZW5jZV9mcmVlKG9sZCk7CisJCXJldHVybiAtMTsKKwl9CiAKLQllcnJvciA9IGxvb3NlX3dyaXRlKGJhY2tlbmQsIG5ldyk7Ci0JaWYgKGVycm9yIDwgMCkgeworCWlmICgoZXJyb3IgPSBsb29zZV93cml0ZShiYWNrZW5kLCBuZXcpKSA8IDAgfHwgb3V0ID09IE5VTEwpIHsKIAkJZ2l0X3JlZmVyZW5jZV9mcmVlKG5ldyk7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAob3V0KSB7Ci0JCSpvdXQgPSBuZXc7Ci0JfSBlbHNlIHsKLQkJZ2l0X3JlZmVyZW5jZV9mcmVlKG5ldyk7Ci0JfQotCisJKm91dCA9IG5ldzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByZWZkYl9mc19iYWNrZW5kX19jb21wcmVzcyhnaXRfcmVmZGJfYmFja2VuZCAqX2JhY2tlbmQpCiB7Ci0JcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZDsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kID0gKHJlZmRiX2ZzX2JhY2tlbmQgKilfYmFja2VuZDsKIAotCWFzc2VydChfYmFja2VuZCk7Ci0JYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopX2JhY2tlbmQ7CisJYXNzZXJ0KGJhY2tlbmQpOwogCi0JaWYgKHBhY2tlZF9sb2FkKGJhY2tlbmQpIDwgMCB8fCAvKiBsb2FkIHRoZSBleGlzdGluZyBwYWNrZmlsZSAqLworCWlmIChwYWNrZWRfcmVsb2FkKGJhY2tlbmQpIDwgMCB8fCAvKiBsb2FkIHRoZSBleGlzdGluZyBwYWNrZmlsZSAqLwogCQlwYWNrZWRfbG9hZGxvb3NlKGJhY2tlbmQpIDwgMCB8fCAvKiBhZGQgYWxsIHRoZSBsb29zZSByZWZzICovCiAJCXBhY2tlZF93cml0ZShiYWNrZW5kKSA8IDApIC8qIHdyaXRlIGJhY2sgdG8gZGlzayAqLwogCQlyZXR1cm4gLTE7CkBAIC0xMTc2LDI5ICsxMDIxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJlZmNhY2hlX2ZyZWUoZ2l0X3JlZmNhY2hlICpyZWZzKQotewotCWFzc2VydChyZWZzKTsKLQotCWlmIChyZWZzLT5wYWNrZmlsZSkgewotCQlzdHJ1Y3QgcGFja3JlZiAqcmVmZXJlbmNlOwotCi0JCWdpdF9zdHJtYXBfZm9yZWFjaF92YWx1ZShyZWZzLT5wYWNrZmlsZSwgcmVmZXJlbmNlLCB7Ci0JCQlnaXRfX2ZyZWUocmVmZXJlbmNlKTsKLQkJfSk7Ci0KLQkJZ2l0X3N0cm1hcF9mcmVlKHJlZnMtPnBhY2tmaWxlKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHJlZmRiX2ZzX2JhY2tlbmRfX2ZyZWUoZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kKQogewotCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7CisJcmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopX2JhY2tlbmQ7CiAKLQlhc3NlcnQoX2JhY2tlbmQpOwotCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKV9iYWNrZW5kOworCWFzc2VydChiYWNrZW5kKTsKIAotCXJlZmNhY2hlX2ZyZWUoJmJhY2tlbmQtPnJlZmNhY2hlKTsKKwlnaXRfc29ydGVkY2FjaGVfZnJlZShiYWNrZW5kLT5yZWZjYWNoZSk7CiAJZ2l0X19mcmVlKGJhY2tlbmQtPnBhdGgpOwogCWdpdF9fZnJlZShiYWNrZW5kKTsKIH0KQEAgLTEyMjIsNyArMTA1MSw3IEBACiAJaWYgKHBhcnRzID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCS8qKgorCS8qCiAJICogRnJvbSBgbWFuIGdpdG5hbWVzcGFjZXNgOgogCSAqICBuYW1lc3BhY2VzIHdoaWNoIGluY2x1ZGUgYSAvIHdpbGwgZXhwYW5kIHRvIGEgaGllcmFyY2h5CiAJICogIG9mIG5hbWVzcGFjZXM7IGZvciBleGFtcGxlLCBHSVRfTkFNRVNQQUNFPWZvby9iYXIgd2lsbCBzdG9yZQpAQCAtMTIzOSwxNSArMTA2OCwzNTUgQEAKIAlpZiAoZ2l0X2Z1dGlsc19ta2Rpcl9yKGdpdF9idWZfY3N0cihwYXRoKSwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCAwNzc3KSA8IDApCiAJCXJldHVybiAtMTsKIAotCS8qIFJldHVybiB0aGUgcm9vdCBvZiB0aGUgbmFtZXNwYWNlZCBwYXRoLCBpLmUuIHdpdGhvdXQgdGhlIHRyYWlsaW5nICcvcmVmcycgKi8KKwkvKiBSZXR1cm4gcm9vdCBvZiB0aGUgbmFtZXNwYWNlZCBwYXRoLCBpLmUuIHdpdGhvdXQgdGhlIHRyYWlsaW5nICcvcmVmcycgKi8KIAlnaXRfYnVmX3J0cnVuY2F0ZV9hdF9jaGFyKHBhdGgsICcvJyk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmVmbG9nX2FsbG9jKGdpdF9yZWZsb2cgKipyZWZsb2csIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJZ2l0X3JlZmxvZyAqbG9nOworCisJKnJlZmxvZyA9IE5VTEw7CisKKwlsb2cgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X3JlZmxvZykpOworCUdJVEVSUl9DSEVDS19BTExPQyhsb2cpOworCisJbG9nLT5yZWZfbmFtZSA9IGdpdF9fc3RyZHVwKG5hbWUpOworCUdJVEVSUl9DSEVDS19BTExPQyhsb2ctPnJlZl9uYW1lKTsKKworCWlmIChnaXRfdmVjdG9yX2luaXQoJmxvZy0+ZW50cmllcywgMCwgTlVMTCkgPCAwKSB7CisJCWdpdF9fZnJlZShsb2ctPnJlZl9uYW1lKTsKKwkJZ2l0X19mcmVlKGxvZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkqcmVmbG9nID0gbG9nOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmbG9nX3BhcnNlKGdpdF9yZWZsb2cgKmxvZywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUpCit7CisJY29uc3QgY2hhciAqcHRyOworCWdpdF9yZWZsb2dfZW50cnkgKmVudHJ5OworCisjZGVmaW5lIHNlZWtfZm9yd2FyZChfaW5jcmVhc2UpIGRvIHsgXAorCWlmIChfaW5jcmVhc2UgPj0gYnVmX3NpemUpIHsgXAorCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiUmFuIG91dCBvZiBkYXRhIHdoaWxlIHBhcnNpbmcgcmVmbG9nIik7IFwKKwkJZ290byBmYWlsOyBcCisJfSBcCisJYnVmICs9IF9pbmNyZWFzZTsgXAorCWJ1Zl9zaXplIC09IF9pbmNyZWFzZTsgXAorCX0gd2hpbGUgKDApCisKKwl3aGlsZSAoYnVmX3NpemUgPiBHSVRfUkVGTE9HX1NJWkVfTUlOKSB7CisJCWVudHJ5ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9yZWZsb2dfZW50cnkpKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKGVudHJ5KTsKKworCQllbnRyeS0+Y29tbWl0dGVyID0gZ2l0X19tYWxsb2Moc2l6ZW9mKGdpdF9zaWduYXR1cmUpKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKGVudHJ5LT5jb21taXR0ZXIpOworCisJCWlmIChnaXRfb2lkX2Zyb21zdHJuKCZlbnRyeS0+b2lkX29sZCwgYnVmLCBHSVRfT0lEX0hFWFNaKSA8IDApCisJCQlnb3RvIGZhaWw7CisJCXNlZWtfZm9yd2FyZChHSVRfT0lEX0hFWFNaICsgMSk7CisKKwkJaWYgKGdpdF9vaWRfZnJvbXN0cm4oJmVudHJ5LT5vaWRfY3VyLCBidWYsIEdJVF9PSURfSEVYU1opIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwkJc2Vla19mb3J3YXJkKEdJVF9PSURfSEVYU1ogKyAxKTsKKworCQlwdHIgPSBidWY7CisKKwkJLyogU2VlayBmb3J3YXJkIHRvIHRoZSBlbmQgb2YgdGhlIHNpZ25hdHVyZS4gKi8KKwkJd2hpbGUgKCpidWYgJiYgKmJ1ZiAhPSAnXHQnICYmICpidWYgIT0gJ1xuJykKKwkJCXNlZWtfZm9yd2FyZCgxKTsKKworCQlpZiAoZ2l0X3NpZ25hdHVyZV9fcGFyc2UoZW50cnktPmNvbW1pdHRlciwgJnB0ciwgYnVmICsgMSwgTlVMTCwgKmJ1ZikgPCAwKQorCQkJZ290byBmYWlsOworCisJCWlmICgqYnVmID09ICdcdCcpIHsKKwkJCS8qIFdlIGdvdCBhIG1lc3NhZ2UuIFJlYWQgZXZlcnl0aGluZyB0aWxsIHdlIHJlYWNoIExGLiAqLworCQkJc2Vla19mb3J3YXJkKDEpOworCQkJcHRyID0gYnVmOworCisJCQl3aGlsZSAoKmJ1ZiAmJiAqYnVmICE9ICdcbicpCisJCQkJc2Vla19mb3J3YXJkKDEpOworCisJCQllbnRyeS0+bXNnID0gZ2l0X19zdHJuZHVwKHB0ciwgYnVmIC0gcHRyKTsKKwkJCUdJVEVSUl9DSEVDS19BTExPQyhlbnRyeS0+bXNnKTsKKwkJfSBlbHNlCisJCQllbnRyeS0+bXNnID0gTlVMTDsKKworCQl3aGlsZSAoKmJ1ZiAmJiAqYnVmID09ICdcbicgJiYgYnVmX3NpemUgPiAxKQorCQkJc2Vla19mb3J3YXJkKDEpOworCisJCWlmIChnaXRfdmVjdG9yX2luc2VydCgmbG9nLT5lbnRyaWVzLCBlbnRyeSkgPCAwKQorCQkJZ290byBmYWlsOworCX0KKworCXJldHVybiAwOworCisjdW5kZWYgc2Vla19mb3J3YXJkCisKK2ZhaWw6CisJaWYgKGVudHJ5KQorCQlnaXRfcmVmbG9nX2VudHJ5X19mcmVlKGVudHJ5KTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBjcmVhdGVfbmV3X3JlZmxvZ19maWxlKGNvbnN0IGNoYXIgKmZpbGVwYXRoKQoreworCWludCBmZCwgZXJyb3I7CisKKwlpZiAoKGVycm9yID0gZ2l0X2Z1dGlsc19ta3BhdGgyZmlsZShmaWxlcGF0aCwgR0lUX1JFRkxPR19ESVJfTU9ERSkpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChmZCA9IHBfb3BlbihmaWxlcGF0aCwKKwkJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsCisJCQlHSVRfUkVGTE9HX0ZJTEVfTU9ERSkpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHBfY2xvc2UoZmQpOworfQorCitHSVRfSU5MSU5FKGludCkgcmV0cmlldmVfcmVmbG9nX3BhdGgoZ2l0X2J1ZiAqcGF0aCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGdpdF9idWZfam9pbl9uKHBhdGgsICcvJywgMywgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfUkVGTE9HX0RJUiwgbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVmZGJfcmVmbG9nX2ZzX19yZWFkKGdpdF9yZWZsb2cgKipvdXQsIGdpdF9yZWZkYl9iYWNrZW5kICpfYmFja2VuZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgZXJyb3IgPSAtMTsKKwlnaXRfYnVmIGxvZ19wYXRoID0gR0lUX0JVRl9JTklUOworCWdpdF9idWYgbG9nX2ZpbGUgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X3JlZmxvZyAqbG9nID0gTlVMTDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kOworCisJYXNzZXJ0KG91dCAmJiBfYmFja2VuZCAmJiBuYW1lKTsKKworCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKSBfYmFja2VuZDsKKwlyZXBvID0gYmFja2VuZC0+cmVwbzsKKworCWlmIChyZWZsb2dfYWxsb2MoJmxvZywgbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmV0cmlldmVfcmVmbG9nX3BhdGgoJmxvZ19wYXRoLCByZXBvLCBuYW1lKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKworCWVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZsb2dfZmlsZSwgZ2l0X2J1Zl9jc3RyKCZsb2dfcGF0aCkpOworCWlmIChlcnJvciA8IDAgJiYgZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSAmJgorCQkoKGVycm9yID0gY3JlYXRlX25ld19yZWZsb2dfZmlsZShnaXRfYnVmX2NzdHIoJmxvZ19wYXRoKSkpIDwgMCkpCisJCWdvdG8gY2xlYW51cDsKKyAKKwlpZiAoKGVycm9yID0gcmVmbG9nX3BhcnNlKGxvZywKKwkJZ2l0X2J1Zl9jc3RyKCZsb2dfZmlsZSksIGdpdF9idWZfbGVuKCZsb2dfZmlsZSkpKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKworCSpvdXQgPSBsb2c7CisJZ290byBzdWNjZXNzOworCitjbGVhbnVwOgorCWdpdF9yZWZsb2dfZnJlZShsb2cpOworCitzdWNjZXNzOgorCWdpdF9idWZfZnJlZSgmbG9nX2ZpbGUpOworCWdpdF9idWZfZnJlZSgmbG9nX3BhdGgpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IHNlcmlhbGl6ZV9yZWZsb2dfZW50cnkoCisJZ2l0X2J1ZiAqYnVmLAorCWNvbnN0IGdpdF9vaWQgKm9pZF9vbGQsCisJY29uc3QgZ2l0X29pZCAqb2lkX25ldywKKwljb25zdCBnaXRfc2lnbmF0dXJlICpjb21taXR0ZXIsCisJY29uc3QgY2hhciAqbXNnKQoreworCWNoYXIgcmF3X29sZFtHSVRfT0lEX0hFWFNaKzFdOworCWNoYXIgcmF3X25ld1tHSVRfT0lEX0hFWFNaKzFdOworCisJZ2l0X29pZF90b3N0cihyYXdfb2xkLCBHSVRfT0lEX0hFWFNaKzEsIG9pZF9vbGQpOworCWdpdF9vaWRfdG9zdHIocmF3X25ldywgR0lUX09JRF9IRVhTWisxLCBvaWRfbmV3KTsKKworCWdpdF9idWZfY2xlYXIoYnVmKTsKKworCWdpdF9idWZfcHV0cyhidWYsIHJhd19vbGQpOworCWdpdF9idWZfcHV0YyhidWYsICcgJyk7CisJZ2l0X2J1Zl9wdXRzKGJ1ZiwgcmF3X25ldyk7CisKKwlnaXRfc2lnbmF0dXJlX193cml0ZWJ1ZihidWYsICIgIiwgY29tbWl0dGVyKTsKKworCS8qIGRyb3AgdHJhaWxpbmcgTEYgKi8KKwlnaXRfYnVmX3J0cmltKGJ1Zik7CisKKwlpZiAobXNnKSB7CisJCWdpdF9idWZfcHV0YyhidWYsICdcdCcpOworCQlnaXRfYnVmX3B1dHMoYnVmLCBtc2cpOworCX0KKworCWdpdF9idWZfcHV0YyhidWYsICdcbicpOworCisJcmV0dXJuIGdpdF9idWZfb29tKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgcmVmZGJfcmVmbG9nX2ZzX193cml0ZShnaXRfcmVmZGJfYmFja2VuZCAqX2JhY2tlbmQsIGdpdF9yZWZsb2cgKnJlZmxvZykKK3sKKwlpbnQgZXJyb3IgPSAtMTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlnaXRfcmVmbG9nX2VudHJ5ICplbnRyeTsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kOworCWdpdF9idWYgbG9nX3BhdGggPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiBsb2cgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2ZpbGVidWYgZmJ1ZiA9IEdJVF9GSUxFQlVGX0lOSVQ7CisKKwlhc3NlcnQoX2JhY2tlbmQgJiYgcmVmbG9nKTsKKworCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKSBfYmFja2VuZDsKKwlyZXBvID0gYmFja2VuZC0+cmVwbzsKKworCWlmIChyZXRyaWV2ZV9yZWZsb2dfcGF0aCgmbG9nX3BhdGgsIHJlcG8sIHJlZmxvZy0+cmVmX25hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFnaXRfcGF0aF9pc2ZpbGUoZ2l0X2J1Zl9jc3RyKCZsb2dfcGF0aCkpKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsCisJCQkiTG9nIGZpbGUgZm9yIHJlZmVyZW5jZSAnJXMnIGRvZXNuJ3QgZXhpc3QuIiwgcmVmbG9nLT5yZWZfbmFtZSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmJ1ZiwgZ2l0X2J1Zl9jc3RyKCZsb2dfcGF0aCksIDAsIEdJVF9SRUZMT0dfRklMRV9NT0RFKSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnJlZmxvZy0+ZW50cmllcywgaSwgZW50cnkpIHsKKwkJaWYgKHNlcmlhbGl6ZV9yZWZsb2dfZW50cnkoJmxvZywgJihlbnRyeS0+b2lkX29sZCksICYoZW50cnktPm9pZF9jdXIpLCBlbnRyeS0+Y29tbWl0dGVyLCBlbnRyeS0+bXNnKSA8IDApCisJCQlnb3RvIGNsZWFudXA7CisKKwkJaWYgKChlcnJvciA9IGdpdF9maWxlYnVmX3dyaXRlKCZmYnVmLCBsb2cucHRyLCBsb2cuc2l6ZSkpIDwgMCkKKwkJCWdvdG8gY2xlYW51cDsKKwl9CisKKwllcnJvciA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmJ1Zik7CisJZ290byBzdWNjZXNzOworCitjbGVhbnVwOgorCWdpdF9maWxlYnVmX2NsZWFudXAoJmZidWYpOworCitzdWNjZXNzOgorCWdpdF9idWZfZnJlZSgmbG9nKTsKKwlnaXRfYnVmX2ZyZWUoJmxvZ19wYXRoKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcmVmZGJfcmVmbG9nX2ZzX19yZW5hbWUoZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kLCBjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJaW50IGVycm9yID0gMCwgZmQ7CisJZ2l0X2J1ZiBvbGRfcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIG5ld19wYXRoID0gR0lUX0JVRl9JTklUOworCWdpdF9idWYgdGVtcF9wYXRoID0gR0lUX0JVRl9JTklUOworCWdpdF9idWYgbm9ybWFsaXplZCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kOworCisJYXNzZXJ0KF9iYWNrZW5kICYmIG9sZF9uYW1lICYmIG5ld19uYW1lKTsKKworCWJhY2tlbmQgPSAocmVmZGJfZnNfYmFja2VuZCAqKSBfYmFja2VuZDsKKwlyZXBvID0gYmFja2VuZC0+cmVwbzsKKworCWlmICgoZXJyb3IgPSBnaXRfcmVmZXJlbmNlX19ub3JtYWxpemVfbmFtZSgKKwkJJm5vcm1hbGl6ZWQsIG5ld19uYW1lLCBHSVRfUkVGX0ZPUk1BVF9BTExPV19PTkVMRVZFTCkpIDwgMCkKKwkJCXJldHVybiBlcnJvcjsKKworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZ0ZW1wX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX1JFRkxPR19ESVIpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGdpdF9idWZfam9pbnBhdGgoJm9sZF9wYXRoLCBnaXRfYnVmX2NzdHIoJnRlbXBfcGF0aCksIG9sZF9uYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZuZXdfcGF0aCwgZ2l0X2J1Zl9jc3RyKCZ0ZW1wX3BhdGgpLCBnaXRfYnVmX2NzdHIoJm5vcm1hbGl6ZWQpKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qCisJICogTW92ZSB0aGUgcmVmbG9nIHRvIGEgdGVtcG9yYXJ5IHBsYWNlLiBUaGlzIHR3by1waGFzZSByZW5hbWluZyBpcyByZXF1aXJlZAorCSAqIGluIG9yZGVyIHRvIGNvcGUgd2l0aCBmdW5ueSByZW5hbWluZyB1c2UgY2FzZXMgd2hlbiBvbmUgdHJpZXMgdG8gbW92ZSBhIHJlZmVyZW5jZQorCSAqIHRvIGEgcGFydGlhbGx5IGNvbGxpZGluZyBuYW1lc3BhY2U6CisJICogIC0gYS9iIC0+IGEvYi9jCisJICogIC0gYS9iL2MvZCAtPiBhL2IvYworCSAqLworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZ0ZW1wX3BhdGgsIGdpdF9idWZfY3N0cigmdGVtcF9wYXRoKSwgInRlbXBfcmVmbG9nIikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKGZkID0gZ2l0X2Z1dGlsc19ta3RtcCgmdGVtcF9wYXRoLCBnaXRfYnVmX2NzdHIoJnRlbXBfcGF0aCksIEdJVF9SRUZMT0dfRklMRV9NT0RFKSkgPCAwKSB7CisJCWVycm9yID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlwX2Nsb3NlKGZkKTsKKworCWlmIChwX3JlbmFtZShnaXRfYnVmX2NzdHIoJm9sZF9wYXRoKSwgZ2l0X2J1Zl9jc3RyKCZ0ZW1wX3BhdGgpKSA8IDApIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gcmVuYW1lIHJlZmxvZyBmb3IgJXMiLCBuZXdfbmFtZSk7CisJCWVycm9yID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoZ2l0X3BhdGhfaXNkaXIoZ2l0X2J1Zl9jc3RyKCZuZXdfcGF0aCkpICYmIAorCQkoZ2l0X2Z1dGlsc19ybWRpcl9yKGdpdF9idWZfY3N0cigmbmV3X3BhdGgpLCBOVUxMLCBHSVRfUk1ESVJfU0tJUF9OT05FTVBUWSkgPCAwKSkgeworCQllcnJvciA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKGdpdF9mdXRpbHNfbWtwYXRoMmZpbGUoZ2l0X2J1Zl9jc3RyKCZuZXdfcGF0aCksIEdJVF9SRUZMT0dfRElSX01PREUpIDwgMCkgeworCQllcnJvciA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKHBfcmVuYW1lKGdpdF9idWZfY3N0cigmdGVtcF9wYXRoKSwgZ2l0X2J1Zl9jc3RyKCZuZXdfcGF0aCkpIDwgMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byByZW5hbWUgcmVmbG9nIGZvciAlcyIsIG5ld19uYW1lKTsKKwkJZXJyb3IgPSAtMTsKKwl9CisKK2NsZWFudXA6CisJZ2l0X2J1Zl9mcmVlKCZ0ZW1wX3BhdGgpOworCWdpdF9idWZfZnJlZSgmb2xkX3BhdGgpOworCWdpdF9idWZfZnJlZSgmbmV3X3BhdGgpOworCWdpdF9idWZfZnJlZSgmbm9ybWFsaXplZCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcmVmZGJfcmVmbG9nX2ZzX19kZWxldGUoZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBlcnJvcjsKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlyZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kOworCisJYXNzZXJ0KF9iYWNrZW5kICYmIG5hbWUpOworCisJYmFja2VuZCA9IChyZWZkYl9mc19iYWNrZW5kICopIF9iYWNrZW5kOworCXJlcG8gPSBiYWNrZW5kLT5yZXBvOworCisJZXJyb3IgPSByZXRyaWV2ZV9yZWZsb2dfcGF0aCgmcGF0aCwgcmVwbywgbmFtZSk7CisKKwlpZiAoIWVycm9yICYmIGdpdF9wYXRoX2V4aXN0cyhwYXRoLnB0cikpCisJCWVycm9yID0gcF91bmxpbmsocGF0aC5wdHIpOworCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKworCXJldHVybiBlcnJvcjsKKworfQorCiBpbnQgZ2l0X3JlZmRiX2JhY2tlbmRfZnMoCiAJZ2l0X3JlZmRiX2JhY2tlbmQgKipiYWNrZW5kX291dCwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwb3NpdG9yeSkKIHsKKwlpbnQgdCA9IDA7CiAJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOwogCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7CiAKQEAgLTEyNTYsMjIgKzE0MjUsNDcgQEAKIAogCWJhY2tlbmQtPnJlcG8gPSByZXBvc2l0b3J5OwogCi0JaWYgKHNldHVwX25hbWVzcGFjZSgmcGF0aCwgcmVwb3NpdG9yeSkgPCAwKSB7Ci0JCWdpdF9fZnJlZShiYWNrZW5kKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoc2V0dXBfbmFtZXNwYWNlKCZwYXRoLCByZXBvc2l0b3J5KSA8IDApCisJCWdvdG8gZmFpbDsKIAogCWJhY2tlbmQtPnBhdGggPSBnaXRfYnVmX2RldGFjaCgmcGF0aCk7CiAKKwlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgYmFja2VuZC0+cGF0aCwgR0lUX1BBQ0tFRFJFRlNfRklMRSkgPCAwIHx8CisJCWdpdF9zb3J0ZWRjYWNoZV9uZXcoCisJCQkmYmFja2VuZC0+cmVmY2FjaGUsIG9mZnNldG9mKHN0cnVjdCBwYWNrcmVmLCBuYW1lKSwKKwkJCU5VTEwsIE5VTEwsIHBhY2tyZWZfY21wLCBnaXRfYnVmX2NzdHIoJnBhdGgpKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisKKwlpZiAoIWdpdF9yZXBvc2l0b3J5X19jdmFyKCZ0LCBiYWNrZW5kLT5yZXBvLCBHSVRfQ1ZBUl9JR05PUkVDQVNFKSAmJiB0KSB7CisJCWJhY2tlbmQtPml0ZXJhdG9yX2ZsYWdzIHw9IEdJVF9JVEVSQVRPUl9JR05PUkVfQ0FTRTsKKwkJYmFja2VuZC0+ZGlyZWFjaF9mbGFncyAgfD0gR0lUX1BBVEhfRElSX0lHTk9SRV9DQVNFOworCX0KKwlpZiAoIWdpdF9yZXBvc2l0b3J5X19jdmFyKCZ0LCBiYWNrZW5kLT5yZXBvLCBHSVRfQ1ZBUl9QUkVDT01QT1NFKSAmJiB0KSB7CisJCWJhY2tlbmQtPml0ZXJhdG9yX2ZsYWdzIHw9IEdJVF9JVEVSQVRPUl9QUkVDT01QT1NFX1VOSUNPREU7CisJCWJhY2tlbmQtPmRpcmVhY2hfZmxhZ3MgIHw9IEdJVF9QQVRIX0RJUl9QUkVDT01QT1NFX1VOSUNPREU7CisJfQorCiAJYmFja2VuZC0+cGFyZW50LmV4aXN0cyA9ICZyZWZkYl9mc19iYWNrZW5kX19leGlzdHM7CiAJYmFja2VuZC0+cGFyZW50Lmxvb2t1cCA9ICZyZWZkYl9mc19iYWNrZW5kX19sb29rdXA7CiAJYmFja2VuZC0+cGFyZW50Lml0ZXJhdG9yID0gJnJlZmRiX2ZzX2JhY2tlbmRfX2l0ZXJhdG9yOwogCWJhY2tlbmQtPnBhcmVudC53cml0ZSA9ICZyZWZkYl9mc19iYWNrZW5kX193cml0ZTsKLQliYWNrZW5kLT5wYXJlbnQuZGVsZXRlID0gJnJlZmRiX2ZzX2JhY2tlbmRfX2RlbGV0ZTsKKwliYWNrZW5kLT5wYXJlbnQuZGVsID0gJnJlZmRiX2ZzX2JhY2tlbmRfX2RlbGV0ZTsKIAliYWNrZW5kLT5wYXJlbnQucmVuYW1lID0gJnJlZmRiX2ZzX2JhY2tlbmRfX3JlbmFtZTsKIAliYWNrZW5kLT5wYXJlbnQuY29tcHJlc3MgPSAmcmVmZGJfZnNfYmFja2VuZF9fY29tcHJlc3M7CiAJYmFja2VuZC0+cGFyZW50LmZyZWUgPSAmcmVmZGJfZnNfYmFja2VuZF9fZnJlZTsKKwliYWNrZW5kLT5wYXJlbnQucmVmbG9nX3JlYWQgPSAmcmVmZGJfcmVmbG9nX2ZzX19yZWFkOworCWJhY2tlbmQtPnBhcmVudC5yZWZsb2dfd3JpdGUgPSAmcmVmZGJfcmVmbG9nX2ZzX193cml0ZTsKKwliYWNrZW5kLT5wYXJlbnQucmVmbG9nX3JlbmFtZSA9ICZyZWZkYl9yZWZsb2dfZnNfX3JlbmFtZTsKKwliYWNrZW5kLT5wYXJlbnQucmVmbG9nX2RlbGV0ZSA9ICZyZWZkYl9yZWZsb2dfZnNfX2RlbGV0ZTsKIAogCSpiYWNrZW5kX291dCA9IChnaXRfcmVmZGJfYmFja2VuZCAqKWJhY2tlbmQ7CiAJcmV0dXJuIDA7CisKK2ZhaWw6CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlnaXRfX2ZyZWUoYmFja2VuZC0+cGF0aCk7CisJZ2l0X19mcmVlKGJhY2tlbmQpOworCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9yZWZsb2cuYyBiL3NyYy9yZWZsb2cuYwppbmRleCA0Y2MyMGQyLi5jZWJiODdkIDEwMDY0NAotLS0gYS9zcmMvcmVmbG9nLmMKKysrIGIvc3JjL3JlZmxvZy5jCkBAIC05LDgyICs5LDE2IEBACiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgImZpbGVidWYuaCIKICNpbmNsdWRlICJzaWduYXR1cmUuaCIKKyNpbmNsdWRlICJyZWZkYi5oIgogCi1zdGF0aWMgaW50IHJlZmxvZ19pbml0KGdpdF9yZWZsb2cgKipyZWZsb2csIGNvbnN0IGdpdF9yZWZlcmVuY2UgKnJlZikKKyNpbmNsdWRlIDxnaXQyL3N5cy9yZWZkYl9iYWNrZW5kLmg+CisKK2dpdF9yZWZsb2dfZW50cnkgKmdpdF9yZWZsb2dfZW50cnlfX2FsbG9jKHZvaWQpCiB7Ci0JZ2l0X3JlZmxvZyAqbG9nOwotCi0JKnJlZmxvZyA9IE5VTEw7Ci0KLQlsb2cgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X3JlZmxvZykpOwotCUdJVEVSUl9DSEVDS19BTExPQyhsb2cpOwotCi0JbG9nLT5yZWZfbmFtZSA9IGdpdF9fc3RyZHVwKHJlZi0+bmFtZSk7Ci0JR0lURVJSX0NIRUNLX0FMTE9DKGxvZy0+cmVmX25hbWUpOwotCi0JaWYgKGdpdF92ZWN0b3JfaW5pdCgmbG9nLT5lbnRyaWVzLCAwLCBOVUxMKSA8IDApIHsKLQkJZ2l0X19mcmVlKGxvZy0+cmVmX25hbWUpOwotCQlnaXRfX2ZyZWUobG9nKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWxvZy0+b3duZXIgPSBnaXRfcmVmZXJlbmNlX293bmVyKHJlZik7Ci0JKnJlZmxvZyA9IGxvZzsKLQotCXJldHVybiAwOworCXJldHVybiBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X3JlZmxvZ19lbnRyeSkpOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbGl6ZV9yZWZsb2dfZW50cnkoCi0JZ2l0X2J1ZiAqYnVmLAotCWNvbnN0IGdpdF9vaWQgKm9pZF9vbGQsCi0JY29uc3QgZ2l0X29pZCAqb2lkX25ldywKLQljb25zdCBnaXRfc2lnbmF0dXJlICpjb21taXR0ZXIsCi0JY29uc3QgY2hhciAqbXNnKQotewotCWNoYXIgcmF3X29sZFtHSVRfT0lEX0hFWFNaKzFdOwotCWNoYXIgcmF3X25ld1tHSVRfT0lEX0hFWFNaKzFdOwotCi0JZ2l0X29pZF90b3N0cihyYXdfb2xkLCBHSVRfT0lEX0hFWFNaKzEsIG9pZF9vbGQpOwotCWdpdF9vaWRfdG9zdHIocmF3X25ldywgR0lUX09JRF9IRVhTWisxLCBvaWRfbmV3KTsKLQotCWdpdF9idWZfY2xlYXIoYnVmKTsKLQotCWdpdF9idWZfcHV0cyhidWYsIHJhd19vbGQpOwotCWdpdF9idWZfcHV0YyhidWYsICcgJyk7Ci0JZ2l0X2J1Zl9wdXRzKGJ1ZiwgcmF3X25ldyk7Ci0KLQlnaXRfc2lnbmF0dXJlX193cml0ZWJ1ZihidWYsICIgIiwgY29tbWl0dGVyKTsKLQotCS8qIGRyb3AgdHJhaWxpbmcgTEYgKi8KLQlnaXRfYnVmX3J0cmltKGJ1Zik7Ci0KLQlpZiAobXNnKSB7Ci0JCWdpdF9idWZfcHV0YyhidWYsICdcdCcpOwotCQlnaXRfYnVmX3B1dHMoYnVmLCBtc2cpOwotCX0KLQotCWdpdF9idWZfcHV0YyhidWYsICdcbicpOwotCi0JcmV0dXJuIGdpdF9idWZfb29tKGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbnQgcmVmbG9nX2VudHJ5X25ldyhnaXRfcmVmbG9nX2VudHJ5ICoqZW50cnkpCi17Ci0JZ2l0X3JlZmxvZ19lbnRyeSAqZTsKLQotCWFzc2VydChlbnRyeSk7Ci0KLQllID0gZ2l0X19tYWxsb2Moc2l6ZW9mKGdpdF9yZWZsb2dfZW50cnkpKTsKLQlHSVRFUlJfQ0hFQ0tfQUxMT0MoZSk7Ci0KLQltZW1zZXQoZSwgMCwgc2l6ZW9mKGdpdF9yZWZsb2dfZW50cnkpKTsKLQotCSplbnRyeSA9IGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcmVmbG9nX2VudHJ5X2ZyZWUoZ2l0X3JlZmxvZ19lbnRyeSAqZW50cnkpCit2b2lkIGdpdF9yZWZsb2dfZW50cnlfX2ZyZWUoZ2l0X3JlZmxvZ19lbnRyeSAqZW50cnkpCiB7CiAJZ2l0X3NpZ25hdHVyZV9mcmVlKGVudHJ5LT5jb21taXR0ZXIpOwogCkBAIC05Miw3NSArMjYsNiBAQAogCWdpdF9fZnJlZShlbnRyeSk7CiB9CiAKLXN0YXRpYyBpbnQgcmVmbG9nX3BhcnNlKGdpdF9yZWZsb2cgKmxvZywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgYnVmX3NpemUpCi17Ci0JY29uc3QgY2hhciAqcHRyOwotCWdpdF9yZWZsb2dfZW50cnkgKmVudHJ5OwotCi0jZGVmaW5lIHNlZWtfZm9yd2FyZChfaW5jcmVhc2UpIGRvIHsgXAotCWlmIChfaW5jcmVhc2UgPj0gYnVmX3NpemUpIHsgXAotCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiUmFuIG91dCBvZiBkYXRhIHdoaWxlIHBhcnNpbmcgcmVmbG9nIik7IFwKLQkJZ290byBmYWlsOyBcCi0JfSBcCi0JYnVmICs9IF9pbmNyZWFzZTsgXAotCWJ1Zl9zaXplIC09IF9pbmNyZWFzZTsgXAotCX0gd2hpbGUgKDApCi0KLQl3aGlsZSAoYnVmX3NpemUgPiBHSVRfUkVGTE9HX1NJWkVfTUlOKSB7Ci0JCWlmIChyZWZsb2dfZW50cnlfbmV3KCZlbnRyeSkgPCAwKQotCQkJcmV0dXJuIC0xOwotCi0JCWVudHJ5LT5jb21taXR0ZXIgPSBnaXRfX21hbGxvYyhzaXplb2YoZ2l0X3NpZ25hdHVyZSkpOwotCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoZW50cnktPmNvbW1pdHRlcik7Ci0KLQkJaWYgKGdpdF9vaWRfZnJvbXN0cm4oJmVudHJ5LT5vaWRfb2xkLCBidWYsIEdJVF9PSURfSEVYU1opIDwgMCkKLQkJCWdvdG8gZmFpbDsKLQkJc2Vla19mb3J3YXJkKEdJVF9PSURfSEVYU1ogKyAxKTsKLQotCQlpZiAoZ2l0X29pZF9mcm9tc3RybigmZW50cnktPm9pZF9jdXIsIGJ1ZiwgR0lUX09JRF9IRVhTWikgPCAwKQotCQkJZ290byBmYWlsOwotCQlzZWVrX2ZvcndhcmQoR0lUX09JRF9IRVhTWiArIDEpOwotCi0JCXB0ciA9IGJ1ZjsKLQotCQkvKiBTZWVrIGZvcndhcmQgdG8gdGhlIGVuZCBvZiB0aGUgc2lnbmF0dXJlLiAqLwotCQl3aGlsZSAoKmJ1ZiAmJiAqYnVmICE9ICdcdCcgJiYgKmJ1ZiAhPSAnXG4nKQotCQkJc2Vla19mb3J3YXJkKDEpOwotCi0JCWlmIChnaXRfc2lnbmF0dXJlX19wYXJzZShlbnRyeS0+Y29tbWl0dGVyLCAmcHRyLCBidWYgKyAxLCBOVUxMLCAqYnVmKSA8IDApCi0JCQlnb3RvIGZhaWw7Ci0KLQkJaWYgKCpidWYgPT0gJ1x0JykgewotCQkJLyogV2UgZ290IGEgbWVzc2FnZS4gUmVhZCBldmVyeXRoaW5nIHRpbGwgd2UgcmVhY2ggTEYuICovCi0JCQlzZWVrX2ZvcndhcmQoMSk7Ci0JCQlwdHIgPSBidWY7Ci0KLQkJCXdoaWxlICgqYnVmICYmICpidWYgIT0gJ1xuJykKLQkJCQlzZWVrX2ZvcndhcmQoMSk7Ci0KLQkJCWVudHJ5LT5tc2cgPSBnaXRfX3N0cm5kdXAocHRyLCBidWYgLSBwdHIpOwotCQkJR0lURVJSX0NIRUNLX0FMTE9DKGVudHJ5LT5tc2cpOwotCQl9IGVsc2UKLQkJCWVudHJ5LT5tc2cgPSBOVUxMOwotCi0JCXdoaWxlICgqYnVmICYmICpidWYgPT0gJ1xuJyAmJiBidWZfc2l6ZSA+IDEpCi0JCQlzZWVrX2ZvcndhcmQoMSk7Ci0KLQkJaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KCZsb2ctPmVudHJpZXMsIGVudHJ5KSA8IDApCi0JCQlnb3RvIGZhaWw7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLSN1bmRlZiBzZWVrX2ZvcndhcmQKLQotZmFpbDoKLQlpZiAoZW50cnkpCi0JCXJlZmxvZ19lbnRyeV9mcmVlKGVudHJ5KTsKLQotCXJldHVybiAtMTsKLX0KLQogdm9pZCBnaXRfcmVmbG9nX2ZyZWUoZ2l0X3JlZmxvZyAqcmVmbG9nKQogewogCXNpemVfdCBpOwpAQCAtMTY5LDEwICszNCwxMyBAQAogCWlmIChyZWZsb2cgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJaWYgKHJlZmxvZy0+ZGIpCisJCUdJVF9SRUZDT1VOVF9ERUMocmVmbG9nLT5kYiwgZ2l0X3JlZmRiX19mcmVlKTsKKwogCWZvciAoaT0wOyBpIDwgcmVmbG9nLT5lbnRyaWVzLmxlbmd0aDsgaSsrKSB7CiAJCWVudHJ5ID0gZ2l0X3ZlY3Rvcl9nZXQoJnJlZmxvZy0+ZW50cmllcywgaSk7CiAKLQkJcmVmbG9nX2VudHJ5X2ZyZWUoZW50cnkpOworCQlnaXRfcmVmbG9nX2VudHJ5X19mcmVlKGVudHJ5KTsKIAl9CiAKIAlnaXRfdmVjdG9yX2ZyZWUoJnJlZmxvZy0+ZW50cmllcyk7CkBAIC0xODAsMTE1ICs0OCwzMCBAQAogCWdpdF9fZnJlZShyZWZsb2cpOwogfQogCi1zdGF0aWMgaW50IHJldHJpZXZlX3JlZmxvZ19wYXRoKGdpdF9idWYgKnBhdGgsIGNvbnN0IGdpdF9yZWZlcmVuY2UgKnJlZikKK2ludCBnaXRfcmVmbG9nX3JlYWQoZ2l0X3JlZmxvZyAqKnJlZmxvZywgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sICBjb25zdCBjaGFyICpuYW1lKQogewotCXJldHVybiBnaXRfYnVmX2pvaW5fbihwYXRoLCAnLycsIDMsCi0JCWdpdF9yZWZlcmVuY2Vfb3duZXIocmVmKS0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfUkVGTE9HX0RJUiwgcmVmLT5uYW1lKTsKLX0KKwlnaXRfcmVmZGIgKnJlZmRiOworCWludCBlcnJvcjsKIAotc3RhdGljIGludCBjcmVhdGVfbmV3X3JlZmxvZ19maWxlKGNvbnN0IGNoYXIgKmZpbGVwYXRoKQotewotCWludCBmZCwgZXJyb3I7CisJYXNzZXJ0KHJlZmxvZyAmJiByZXBvICYmIG5hbWUpOwogCi0JaWYgKChlcnJvciA9IGdpdF9mdXRpbHNfbWtwYXRoMmZpbGUoZmlsZXBhdGgsIEdJVF9SRUZMT0dfRElSX01PREUpKSA8IDApCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X3JlZmRiX193ZWFrcHRyKCZyZWZkYiwgcmVwbykpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKChmZCA9IHBfb3BlbihmaWxlcGF0aCwKLQkJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsCi0JCQlHSVRfUkVGTE9HX0ZJTEVfTU9ERSkpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHBfY2xvc2UoZmQpOwotfQotCi1pbnQgZ2l0X3JlZmxvZ19yZWFkKGdpdF9yZWZsb2cgKipyZWZsb2csIGNvbnN0IGdpdF9yZWZlcmVuY2UgKnJlZikKLXsKLQlpbnQgZXJyb3IgPSAtMTsKLQlnaXRfYnVmIGxvZ19wYXRoID0gR0lUX0JVRl9JTklUOwotCWdpdF9idWYgbG9nX2ZpbGUgPSBHSVRfQlVGX0lOSVQ7Ci0JZ2l0X3JlZmxvZyAqbG9nID0gTlVMTDsKLQotCWFzc2VydChyZWZsb2cgJiYgcmVmKTsKLQotCSpyZWZsb2cgPSBOVUxMOwotCi0JaWYgKHJlZmxvZ19pbml0KCZsb2csIHJlZikgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAocmV0cmlldmVfcmVmbG9nX3BhdGgoJmxvZ19wYXRoLCByZWYpIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCi0JZXJyb3IgPSBnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmxvZ19maWxlLCBnaXRfYnVmX2NzdHIoJmxvZ19wYXRoKSk7Ci0JaWYgKGVycm9yIDwgMCAmJiBlcnJvciAhPSBHSVRfRU5PVEZPVU5EKQotCQlnb3RvIGNsZWFudXA7Ci0KLQlpZiAoKGVycm9yID09IEdJVF9FTk9URk9VTkQpICYmCi0JCSgoZXJyb3IgPSBjcmVhdGVfbmV3X3JlZmxvZ19maWxlKGdpdF9idWZfY3N0cigmbG9nX3BhdGgpKSkgPCAwKSkKLQkJZ290byBjbGVhbnVwOwotCi0JaWYgKChlcnJvciA9IHJlZmxvZ19wYXJzZShsb2csCi0JCWdpdF9idWZfY3N0cigmbG9nX2ZpbGUpLCBnaXRfYnVmX2xlbigmbG9nX2ZpbGUpKSkgPCAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQkqcmVmbG9nID0gbG9nOwotCWdvdG8gc3VjY2VzczsKLQotY2xlYW51cDoKLQlnaXRfcmVmbG9nX2ZyZWUobG9nKTsKLQotc3VjY2VzczoKLQlnaXRfYnVmX2ZyZWUoJmxvZ19maWxlKTsKLQlnaXRfYnVmX2ZyZWUoJmxvZ19wYXRoKTsKLQotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZ2l0X3JlZmRiX3JlZmxvZ19yZWFkKHJlZmxvZywgcmVmZGIsIG5hbWUpOwogfQogCiBpbnQgZ2l0X3JlZmxvZ193cml0ZShnaXRfcmVmbG9nICpyZWZsb2cpCiB7Ci0JaW50IGVycm9yID0gLTE7Ci0JdW5zaWduZWQgaW50IGk7Ci0JZ2l0X3JlZmxvZ19lbnRyeSAqZW50cnk7Ci0JZ2l0X2J1ZiBsb2dfcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfYnVmIGxvZyA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfZmlsZWJ1ZiBmYnVmID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwlnaXRfcmVmZGIgKmRiOwogCi0JYXNzZXJ0KHJlZmxvZyk7CisJYXNzZXJ0KHJlZmxvZyAmJiByZWZsb2ctPmRiKTsKIAotCWlmIChnaXRfYnVmX2pvaW5fbigmbG9nX3BhdGgsICcvJywgMywKLQkJZ2l0X3JlcG9zaXRvcnlfcGF0aChyZWZsb2ctPm93bmVyKSwgR0lUX1JFRkxPR19ESVIsIHJlZmxvZy0+cmVmX25hbWUpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKCFnaXRfcGF0aF9pc2ZpbGUoZ2l0X2J1Zl9jc3RyKCZsb2dfcGF0aCkpKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsCi0JCQkiTG9nIGZpbGUgZm9yIHJlZmVyZW5jZSAnJXMnIGRvZXNuJ3QgZXhpc3QuIiwgcmVmbG9nLT5yZWZfbmFtZSk7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmJ1ZiwgZ2l0X2J1Zl9jc3RyKCZsb2dfcGF0aCksIDApKSA8IDApCi0JCWdvdG8gY2xlYW51cDsKLQotCWdpdF92ZWN0b3JfZm9yZWFjaCgmcmVmbG9nLT5lbnRyaWVzLCBpLCBlbnRyeSkgewotCQlpZiAoc2VyaWFsaXplX3JlZmxvZ19lbnRyeSgmbG9nLCAmKGVudHJ5LT5vaWRfb2xkKSwgJihlbnRyeS0+b2lkX2N1ciksIGVudHJ5LT5jb21taXR0ZXIsIGVudHJ5LT5tc2cpIDwgMCkKLQkJCWdvdG8gY2xlYW51cDsKLQotCQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfd3JpdGUoJmZidWYsIGxvZy5wdHIsIGxvZy5zaXplKSkgPCAwKQotCQkJZ290byBjbGVhbnVwOwotCX0KLQotCWVycm9yID0gZ2l0X2ZpbGVidWZfY29tbWl0KCZmYnVmLCBHSVRfUkVGTE9HX0ZJTEVfTU9ERSk7Ci0JZ290byBzdWNjZXNzOwotCi1jbGVhbnVwOgotCWdpdF9maWxlYnVmX2NsZWFudXAoJmZidWYpOwotCi1zdWNjZXNzOgotCWdpdF9idWZfZnJlZSgmbG9nKTsKLQlnaXRfYnVmX2ZyZWUoJmxvZ19wYXRoKTsKLQlyZXR1cm4gZXJyb3I7CisJZGIgPSByZWZsb2ctPmRiOworCXJldHVybiBkYi0+YmFja2VuZC0+cmVmbG9nX3dyaXRlKGRiLT5iYWNrZW5kLCByZWZsb2cpOwogfQogCi1pbnQgZ2l0X3JlZmxvZ19hcHBlbmQoZ2l0X3JlZmxvZyAqcmVmbG9nLCBjb25zdCBnaXRfb2lkICpuZXdfb2lkLAotCQkJCWNvbnN0IGdpdF9zaWduYXR1cmUgKmNvbW1pdHRlciwgY29uc3QgY2hhciAqbXNnKQoraW50IGdpdF9yZWZsb2dfYXBwZW5kKGdpdF9yZWZsb2cgKnJlZmxvZywgY29uc3QgZ2l0X29pZCAqbmV3X29pZCwgY29uc3QgZ2l0X3NpZ25hdHVyZSAqY29tbWl0dGVyLCBjb25zdCBjaGFyICptc2cpCiB7CiAJZ2l0X3JlZmxvZ19lbnRyeSAqZW50cnk7CiAJY29uc3QgZ2l0X3JlZmxvZ19lbnRyeSAqcHJldmlvdXM7CkBAIC0yOTYsOCArNzksOCBAQAogCiAJYXNzZXJ0KHJlZmxvZyAmJiBuZXdfb2lkICYmIGNvbW1pdHRlcik7CiAKLQlpZiAocmVmbG9nX2VudHJ5X25ldygmZW50cnkpIDwgMCkKLQkJcmV0dXJuIC0xOworCWVudHJ5ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9yZWZsb2dfZW50cnkpKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MoZW50cnkpOwogCiAJaWYgKChlbnRyeS0+Y29tbWl0dGVyID0gZ2l0X3NpZ25hdHVyZV9kdXAoY29tbWl0dGVyKSkgPT0gTlVMTCkKIAkJZ290byBjbGVhbnVwOwpAQCAtMzMzLDk0ICsxMTYsMzAgQEAKIAlyZXR1cm4gMDsKIAogY2xlYW51cDoKLQlyZWZsb2dfZW50cnlfZnJlZShlbnRyeSk7CisJZ2l0X3JlZmxvZ19lbnRyeV9fZnJlZShlbnRyeSk7CiAJcmV0dXJuIC0xOwogfQogCi1pbnQgZ2l0X3JlZmxvZ19yZW5hbWUoZ2l0X3JlZmVyZW5jZSAqcmVmLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK2ludCBnaXRfcmVmbG9nX3JlbmFtZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqb2xkX25hbWUsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQogewotCWludCBlcnJvciA9IDAsIGZkOwotCWdpdF9idWYgb2xkX3BhdGggPSBHSVRfQlVGX0lOSVQ7Ci0JZ2l0X2J1ZiBuZXdfcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfYnVmIHRlbXBfcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfYnVmIG5vcm1hbGl6ZWQgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X3JlZmRiICpyZWZkYjsKKwlpbnQgZXJyb3I7CiAKLQlhc3NlcnQocmVmICYmIG5ld19uYW1lKTsKLQotCWlmICgoZXJyb3IgPSBnaXRfcmVmZXJlbmNlX19ub3JtYWxpemVfbmFtZSgKLQkJJm5vcm1hbGl6ZWQsIG5ld19uYW1lLCBHSVRfUkVGX0ZPUk1BVF9BTExPV19PTkVMRVZFTCkpIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKLQotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZ0ZW1wX3BhdGgsIGdpdF9yZWZlcmVuY2Vfb3duZXIocmVmKS0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfUkVGTE9HX0RJUikgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9yZWZkYl9fd2Vha3B0cigmcmVmZGIsIHJlcG8pKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZvbGRfcGF0aCwgZ2l0X2J1Zl9jc3RyKCZ0ZW1wX3BhdGgpLCByZWYtPm5hbWUpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJm5ld19wYXRoLCBnaXRfYnVmX2NzdHIoJnRlbXBfcGF0aCksIGdpdF9idWZfY3N0cigmbm9ybWFsaXplZCkpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBNb3ZlIHRoZSByZWZsb2cgdG8gYSB0ZW1wb3JhcnkgcGxhY2UuIFRoaXMgdHdvLXBoYXNlIHJlbmFtaW5nIGlzIHJlcXVpcmVkCi0JICogaW4gb3JkZXIgdG8gY29wZSB3aXRoIGZ1bm55IHJlbmFtaW5nIHVzZSBjYXNlcyB3aGVuIG9uZSB0cmllcyB0byBtb3ZlIGEgcmVmZXJlbmNlCi0JICogdG8gYSBwYXJ0aWFsbHkgY29sbGlkaW5nIG5hbWVzcGFjZToKLQkgKiAgLSBhL2IgLT4gYS9iL2MKLQkgKiAgLSBhL2IvYy9kIC0+IGEvYi9jCi0JICovCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnRlbXBfcGF0aCwgZ2l0X2J1Zl9jc3RyKCZ0ZW1wX3BhdGgpLCAidGVtcF9yZWZsb2ciKSA8IDApCi0JCXJldHVybiAtMTsKLQotCWlmICgoZmQgPSBnaXRfZnV0aWxzX21rdG1wKCZ0ZW1wX3BhdGgsIGdpdF9idWZfY3N0cigmdGVtcF9wYXRoKSkpIDwgMCkgewotCQllcnJvciA9IC0xOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JcF9jbG9zZShmZCk7Ci0KLQlpZiAocF9yZW5hbWUoZ2l0X2J1Zl9jc3RyKCZvbGRfcGF0aCksIGdpdF9idWZfY3N0cigmdGVtcF9wYXRoKSkgPCAwKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIHJlbmFtZSByZWZsb2cgZm9yICVzIiwgbmV3X25hbWUpOwotCQllcnJvciA9IC0xOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JaWYgKGdpdF9wYXRoX2lzZGlyKGdpdF9idWZfY3N0cigmbmV3X3BhdGgpKSAmJiAKLQkJKGdpdF9mdXRpbHNfcm1kaXJfcihnaXRfYnVmX2NzdHIoJm5ld19wYXRoKSwgTlVMTCwgR0lUX1JNRElSX1NLSVBfTk9ORU1QVFkpIDwgMCkpIHsKLQkJZXJyb3IgPSAtMTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCWlmIChnaXRfZnV0aWxzX21rcGF0aDJmaWxlKGdpdF9idWZfY3N0cigmbmV3X3BhdGgpLCBHSVRfUkVGTE9HX0RJUl9NT0RFKSA8IDApIHsKLQkJZXJyb3IgPSAtMTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQotCWlmIChwX3JlbmFtZShnaXRfYnVmX2NzdHIoJnRlbXBfcGF0aCksIGdpdF9idWZfY3N0cigmbmV3X3BhdGgpKSA8IDApIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gcmVuYW1lIHJlZmxvZyBmb3IgJXMiLCBuZXdfbmFtZSk7Ci0JCWVycm9yID0gLTE7Ci0JfQotCi1jbGVhbnVwOgotCWdpdF9idWZfZnJlZSgmdGVtcF9wYXRoKTsKLQlnaXRfYnVmX2ZyZWUoJm9sZF9wYXRoKTsKLQlnaXRfYnVmX2ZyZWUoJm5ld19wYXRoKTsKLQlnaXRfYnVmX2ZyZWUoJm5vcm1hbGl6ZWQpOwotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiByZWZkYi0+YmFja2VuZC0+cmVmbG9nX3JlbmFtZShyZWZkYi0+YmFja2VuZCwgb2xkX25hbWUsIG5ld19uYW1lKTsKIH0KIAotaW50IGdpdF9yZWZsb2dfZGVsZXRlKGdpdF9yZWZlcmVuY2UgKnJlZikKK2ludCBnaXRfcmVmbG9nX2RlbGV0ZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlnaXRfcmVmZGIgKnJlZmRiOwogCWludCBlcnJvcjsKLQlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAKLQllcnJvciA9IHJldHJpZXZlX3JlZmxvZ19wYXRoKCZwYXRoLCByZWYpOworCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9yZWZkYl9fd2Vha3B0cigmcmVmZGIsIHJlcG8pKSA8IDApCisJCXJldHVybiAtMTsKIAotCWlmICghZXJyb3IgJiYgZ2l0X3BhdGhfZXhpc3RzKHBhdGgucHRyKSkKLQkJZXJyb3IgPSBwX3VubGluayhwYXRoLnB0cik7Ci0KLQlnaXRfYnVmX2ZyZWUoJnBhdGgpOwotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiByZWZkYi0+YmFja2VuZC0+cmVmbG9nX2RlbGV0ZShyZWZkYi0+YmFja2VuZCwgbmFtZSk7CiB9CiAKIHNpemVfdCBnaXRfcmVmbG9nX2VudHJ5Y291bnQoZ2l0X3JlZmxvZyAqcmVmbG9nKQpAQCAtNDI5LDExICsxNDgsNiBAQAogCXJldHVybiByZWZsb2ctPmVudHJpZXMubGVuZ3RoOwogfQogCi1HSVRfSU5MSU5FKHNpemVfdCkgcmVmbG9nX2ludmVyc2VfaW5kZXgoc2l6ZV90IGlkeCwgc2l6ZV90IHRvdGFsKQotewotCXJldHVybiAodG90YWwgLSAxKSAtIGlkeDsKLX0KLQogY29uc3QgZ2l0X3JlZmxvZ19lbnRyeSAqIGdpdF9yZWZsb2dfZW50cnlfYnlpbmRleChnaXRfcmVmbG9nICpyZWZsb2csIHNpemVfdCBpZHgpCiB7CiAJYXNzZXJ0KHJlZmxvZyk7CkBAIC00NjksMTYgKzE4MywxMSBAQAogCXJldHVybiBlbnRyeS0+bXNnOwogfQogCi1pbnQgZ2l0X3JlZmxvZ19kcm9wKAotCWdpdF9yZWZsb2cgKnJlZmxvZywKLQlzaXplX3QgaWR4LAotCWludCByZXdyaXRlX3ByZXZpb3VzX2VudHJ5KQoraW50IGdpdF9yZWZsb2dfZHJvcChnaXRfcmVmbG9nICpyZWZsb2csIHNpemVfdCBpZHgsIGludCByZXdyaXRlX3ByZXZpb3VzX2VudHJ5KQogewogCXNpemVfdCBlbnRyeWNvdW50OwogCWdpdF9yZWZsb2dfZW50cnkgKmVudHJ5LCAqcHJldmlvdXM7CiAKLQlhc3NlcnQocmVmbG9nKTsKLQogCWVudHJ5Y291bnQgPSBnaXRfcmVmbG9nX2VudHJ5Y291bnQocmVmbG9nKTsKIAogCWVudHJ5ID0gKGdpdF9yZWZsb2dfZW50cnkgKilnaXRfcmVmbG9nX2VudHJ5X2J5aW5kZXgocmVmbG9nLCBpZHgpOwpAQCAtNDg4LDcgKzE5Nyw3IEBACiAJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCX0KIAotCXJlZmxvZ19lbnRyeV9mcmVlKGVudHJ5KTsKKwlnaXRfcmVmbG9nX2VudHJ5X19mcmVlKGVudHJ5KTsKIAogCWlmIChnaXRfdmVjdG9yX3JlbW92ZSgKIAkJCSZyZWZsb2ctPmVudHJpZXMsIHJlZmxvZ19pbnZlcnNlX2luZGV4KGlkeCwgZW50cnljb3VudCkpIDwgMCkKQEAgLTUyMSwzICsyMzAsMjIgQEAKIAogCXJldHVybiAwOwogfQorCitpbnQgZ2l0X3JlZmxvZ19hcHBlbmRfdG8oZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGdpdF9vaWQgKmlkLAorCQkJIGNvbnN0IGdpdF9zaWduYXR1cmUgKmNvbW1pdHRlciwgY29uc3QgY2hhciAqbXNnKQoreworCWludCBlcnJvcjsKKwlnaXRfcmVmbG9nICpyZWZsb2c7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHJlcG8sIG5hbWUpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBnaXRfcmVmbG9nX2FwcGVuZChyZWZsb2csIGlkLCBjb21taXR0ZXIsIG1zZykpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJZXJyb3IgPSBnaXRfcmVmbG9nX3dyaXRlKHJlZmxvZyk7CisKK2NsZWFudXA6CisJZ2l0X3JlZmxvZ19mcmVlKHJlZmxvZyk7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvc3JjL3JlZmxvZy5oIGIvc3JjL3JlZmxvZy5oCmluZGV4IDk0NDRlYmQuLjJkMzFhZTQgMTAwNjQ0Ci0tLSBhL3NyYy9yZWZsb2cuaAorKysgYi9zcmMvcmVmbG9nLmgKQEAgLTI3LDkgKzI3LDE0IEBACiB9OwogCiBzdHJ1Y3QgZ2l0X3JlZmxvZyB7CisJZ2l0X3JlZmRiICpkYjsKIAljaGFyICpyZWZfbmFtZTsKLQlnaXRfcmVwb3NpdG9yeSAqb3duZXI7CiAJZ2l0X3ZlY3RvciBlbnRyaWVzOwogfTsKIAorR0lUX0lOTElORShzaXplX3QpIHJlZmxvZ19pbnZlcnNlX2luZGV4KHNpemVfdCBpZHgsIHNpemVfdCB0b3RhbCkKK3sKKwlyZXR1cm4gKHRvdGFsIC0gMSkgLSBpZHg7Cit9CisKICNlbmRpZiAvKiBJTkNMVURFX3JlZmxvZ19oX18gKi8KZGlmZiAtLWdpdCBhL3NyYy9yZWZzLmMgYi9zcmMvcmVmcy5jCmluZGV4IGMwZTQ2MGMuLjQ3MmE3OTggMTAwNjQ0Ci0tLSBhL3NyYy9yZWZzLmMKKysrIGIvc3JjL3JlZnMuYwpAQCAtODgsNiArODgsMTcgQEAKIAlyZXR1cm4gcmVmOwogfQogCitnaXRfcmVmZXJlbmNlICpnaXRfcmVmZXJlbmNlX19zZXRfbmFtZSgKKwlnaXRfcmVmZXJlbmNlICpyZWYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJZ2l0X3JlZmVyZW5jZSAqcmV3cml0ZSA9CisJCWdpdF9fcmVhbGxvYyhyZWYsIHNpemVvZihnaXRfcmVmZXJlbmNlKSArIG5hbWVsZW4gKyAxKTsKKwlpZiAocmV3cml0ZSAhPSBOVUxMKQorCQltZW1jcHkocmV3cml0ZS0+bmFtZSwgbmFtZSwgbmFtZWxlbiArIDEpOworCXJldHVybiByZXdyaXRlOworfQorCiB2b2lkIGdpdF9yZWZlcmVuY2VfZnJlZShnaXRfcmVmZXJlbmNlICpyZWZlcmVuY2UpCiB7CiAJaWYgKHJlZmVyZW5jZSA9PSBOVUxMKQpAQCAtMTI3LDYgKzEzOCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJlZmVyZW5jZV9ub3JtYWxpemVfZm9yX3JlcG8oCisJY2hhciAqb3V0LAorCXNpemVfdCBvdXRfc2l6ZSwKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwljb25zdCBjaGFyICpuYW1lKQoreworCWludCBwcmVjb21wb3NlOworCXVuc2lnbmVkIGludCBmbGFncyA9IEdJVF9SRUZfRk9STUFUX0FMTE9XX09ORUxFVkVMOworCisJaWYgKCFnaXRfcmVwb3NpdG9yeV9fY3ZhcigmcHJlY29tcG9zZSwgcmVwbywgR0lUX0NWQVJfUFJFQ09NUE9TRSkgJiYKKwkJcHJlY29tcG9zZSkKKwkJZmxhZ3MgfD0gR0lUX1JFRl9GT1JNQVRfX1BSRUNPTVBPU0VfVU5JQ09ERTsKKworCXJldHVybiBnaXRfcmVmZXJlbmNlX25vcm1hbGl6ZV9uYW1lKG91dCwgb3V0X3NpemUsIG5hbWUsIGZsYWdzKTsKK30KKwogaW50IGdpdF9yZWZlcmVuY2VfbG9va3VwX3Jlc29sdmVkKAogCWdpdF9yZWZlcmVuY2UgKipyZWZfb3V0LAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLApAQCAtMTQ4LDEzICsxNzUsMTMgQEAKIAllbHNlIGlmIChtYXhfbmVzdGluZyA8IDApCiAJCW1heF9uZXN0aW5nID0gREVGQVVMVF9ORVNUSU5HX0xFVkVMOwogCi0Jc3RybmNweShzY2FuX25hbWUsIG5hbWUsIEdJVF9SRUZOQU1FX01BWCk7CiAJc2Nhbl90eXBlID0gR0lUX1JFRl9TWU1CT0xJQzsKIAotCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9yZWZkYl9fd2Vha3B0cigmcmVmZGIsIHJlcG8pKSA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoKGVycm9yID0gcmVmZXJlbmNlX25vcm1hbGl6ZV9mb3JfcmVwbygKKwkJCXNjYW5fbmFtZSwgc2l6ZW9mKHNjYW5fbmFtZSksIHJlcG8sIG5hbWUpKSA8IDApCisJCXJldHVybiBlcnJvcjsKIAotCWlmICgoZXJyb3IgPSBnaXRfcmVmZXJlbmNlX19ub3JtYWxpemVfbmFtZV9sYXgoc2Nhbl9uYW1lLCBHSVRfUkVGTkFNRV9NQVgsIG5hbWUpKSA8IDApCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X3JlZmRiX193ZWFrcHRyKCZyZWZkYiwgcmVwbykpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCiAJZm9yIChuZXN0aW5nID0gbWF4X25lc3Rpbmc7CkBAIC0xNjIsNyArMTg5LDcgQEAKIAkJIG5lc3RpbmctLSkKIAl7CiAJCWlmIChuZXN0aW5nICE9IG1heF9uZXN0aW5nKSB7Ci0JCQlzdHJuY3B5KHNjYW5fbmFtZSwgcmVmLT50YXJnZXQuc3ltYm9saWMsIEdJVF9SRUZOQU1FX01BWCk7CisJCQlzdHJuY3B5KHNjYW5fbmFtZSwgcmVmLT50YXJnZXQuc3ltYm9saWMsIHNpemVvZihzY2FuX25hbWUpKTsKIAkJCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOwogCQl9CiAKQEAgLTQ1Niw3ICs0ODMsNyBAQAogCWlmIChyZWZlcmVuY2VfaGFzX2xvZyA8IDApCiAJCXJldHVybiByZWZlcmVuY2VfaGFzX2xvZzsKIAotCWlmIChyZWZlcmVuY2VfaGFzX2xvZyAmJiAoZXJyb3IgPSBnaXRfcmVmbG9nX3JlbmFtZShyZWYsIG5ld19uYW1lKSkgPCAwKQorCWlmIChyZWZlcmVuY2VfaGFzX2xvZyAmJiAoZXJyb3IgPSBnaXRfcmVmbG9nX3JlbmFtZShnaXRfcmVmZXJlbmNlX293bmVyKHJlZiksIGdpdF9yZWZlcmVuY2VfbmFtZShyZWYpLCBuZXdfbmFtZSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCiAJcmV0dXJuIDA7CkBAIC03MDAsMTcgKzcyNywyMSBAQAogCXJldHVybiB0cnVlOwogfQogCisvKiBJbnNwaXJlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0L2Jsb2IvZjA2ZDQ3ZTdlMGQ5ZGI3MDllZTIwNGVkMTNhOGE3NDg2MTQ5ZjQ5NC9yZWZzLmMjTDM2LTEwMCAqLwogaW50IGdpdF9yZWZlcmVuY2VfX25vcm1hbGl6ZV9uYW1lKAogCWdpdF9idWYgKmJ1ZiwKIAljb25zdCBjaGFyICpuYW1lLAogCXVuc2lnbmVkIGludCBmbGFncykKIHsKLQkvLyBJbnNwaXJlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQvZ2l0L2Jsb2IvZjA2ZDQ3ZTdlMGQ5ZGI3MDllZTIwNGVkMTNhOGE3NDg2MTQ5ZjQ5NC9yZWZzLmMjTDM2LTEwMAotCiAJY2hhciAqY3VycmVudDsKIAlpbnQgc2VnbWVudF9sZW4sIHNlZ21lbnRzX2NvdW50ID0gMCwgZXJyb3IgPSBHSVRfRUlOVkFMSURTUEVDOwogCXVuc2lnbmVkIGludCBwcm9jZXNzX2ZsYWdzOwogCWJvb2wgbm9ybWFsaXplID0gKGJ1ZiAhPSBOVUxMKTsKKworI2lmZGVmIEdJVF9VU0VfSUNPTlYKKwlnaXRfcGF0aF9pY29udl90IGljID0gR0lUX1BBVEhfSUNPTlZfSU5JVDsKKyNlbmRpZgorCiAJYXNzZXJ0KG5hbWUpOwogCiAJcHJvY2Vzc19mbGFncyA9IGZsYWdzOwpAQCAtNzIyLDYgKzc1MywxNiBAQAogCWlmIChub3JtYWxpemUpCiAJCWdpdF9idWZfY2xlYXIoYnVmKTsKIAorI2lmZGVmIEdJVF9VU0VfSUNPTlYKKwlpZiAoKGZsYWdzICYgR0lUX1JFRl9GT1JNQVRfX1BSRUNPTVBPU0VfVU5JQ09ERSkgIT0gMCkgeworCQlzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihjdXJyZW50KTsKKwkJaWYgKChlcnJvciA9IGdpdF9wYXRoX2ljb252X2luaXRfcHJlY29tcG9zZSgmaWMpKSA8IDAgfHwKKwkJCShlcnJvciA9IGdpdF9wYXRoX2ljb252KCZpYywgJmN1cnJlbnQsICZuYW1lbGVuKSkgPCAwKQorCQkJZ290byBjbGVhbnVwOworCQllcnJvciA9IEdJVF9FSU5WQUxJRFNQRUM7CisJfQorI2VuZGlmCisKIAl3aGlsZSAodHJ1ZSkgewogCQlzZWdtZW50X2xlbiA9IGVuc3VyZV9zZWdtZW50X3ZhbGlkaXR5KGN1cnJlbnQpOwogCQlpZiAoc2VnbWVudF9sZW4gPCAwKSB7CkBAIC03OTgsNiArODM5LDEwIEBACiAJaWYgKGVycm9yICYmIG5vcm1hbGl6ZSkKIAkJZ2l0X2J1Zl9mcmVlKGJ1Zik7CiAKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJZ2l0X3BhdGhfaWNvbnZfY2xlYXIoJmljKTsKKyNlbmRpZgorCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC05NTIsNiArOTk3LDE3IEBACiAJcmV0dXJuIGdpdF9yZWZlcmVuY2VfX2lzX3JlbW90ZShyZWYtPm5hbWUpOwogfQogCitpbnQgZ2l0X3JlZmVyZW5jZV9faXNfdGFnKGNvbnN0IGNoYXIgKnJlZl9uYW1lKQoreworCXJldHVybiBnaXRfX3ByZWZpeGNtcChyZWZfbmFtZSwgR0lUX1JFRlNfVEFHU19ESVIpID09IDA7Cit9CisKK2ludCBnaXRfcmVmZXJlbmNlX2lzX3RhZyhnaXRfcmVmZXJlbmNlICpyZWYpCit7CisJYXNzZXJ0KHJlZik7CisJcmV0dXJuIGdpdF9yZWZlcmVuY2VfX2lzX3RhZyhyZWYtPm5hbWUpOworfQorCiBzdGF0aWMgaW50IHBlZWxfZXJyb3IoaW50IGVycm9yLCBnaXRfcmVmZXJlbmNlICpyZWYsIGNvbnN0IGNoYXIqIG1zZykKIHsKIAlnaXRlcnJfc2V0KApAQCAtOTYxLDkgKzEwMTcsOSBAQAogfQogCiBpbnQgZ2l0X3JlZmVyZW5jZV9wZWVsKAotCQlnaXRfb2JqZWN0ICoqcGVlbGVkLAotCQlnaXRfcmVmZXJlbmNlICpyZWYsCi0JCWdpdF9vdHlwZSB0YXJnZXRfdHlwZSkKKwlnaXRfb2JqZWN0ICoqcGVlbGVkLAorCWdpdF9yZWZlcmVuY2UgKnJlZiwKKwlnaXRfb3R5cGUgdGFyZ2V0X3R5cGUpCiB7CiAJZ2l0X3JlZmVyZW5jZSAqcmVzb2x2ZWQgPSBOVUxMOwogCWdpdF9vYmplY3QgKnRhcmdldCA9IE5VTEw7CkBAIC0xMDA1LDI0ICsxMDYxLDE5IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2l0X3JlZmVyZW5jZV9faXNfdmFsaWRfbmFtZSgKLQljb25zdCBjaGFyICpyZWZuYW1lLAotCXVuc2lnbmVkIGludCBmbGFncykKK2ludCBnaXRfcmVmZXJlbmNlX19pc192YWxpZF9uYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlpbnQgZXJyb3I7CisJaWYgKGdpdF9yZWZlcmVuY2VfX25vcm1hbGl6ZV9uYW1lKE5VTEwsIHJlZm5hbWUsIGZsYWdzKSA8IDApIHsKKwkJZ2l0ZXJyX2NsZWFyKCk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKLQllcnJvciA9IGdpdF9yZWZlcmVuY2VfX25vcm1hbGl6ZV9uYW1lKE5VTEwsIHJlZm5hbWUsIGZsYWdzKSA9PSAwOwotCWdpdGVycl9jbGVhcigpOwotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiB0cnVlOwogfQogCi1pbnQgZ2l0X3JlZmVyZW5jZV9pc192YWxpZF9uYW1lKAotCWNvbnN0IGNoYXIgKnJlZm5hbWUpCitpbnQgZ2l0X3JlZmVyZW5jZV9pc192YWxpZF9uYW1lKGNvbnN0IGNoYXIgKnJlZm5hbWUpCiB7Ci0JcmV0dXJuIGdpdF9yZWZlcmVuY2VfX2lzX3ZhbGlkX25hbWUoCi0JCXJlZm5hbWUsCi0JCUdJVF9SRUZfRk9STUFUX0FMTE9XX09ORUxFVkVMKTsKKwlyZXR1cm4gZ2l0X3JlZmVyZW5jZV9faXNfdmFsaWRfbmFtZShyZWZuYW1lLCBHSVRfUkVGX0ZPUk1BVF9BTExPV19PTkVMRVZFTCk7CiB9CiAKIGNvbnN0IGNoYXIgKmdpdF9yZWZlcmVuY2Vfc2hvcnRoYW5kKGdpdF9yZWZlcmVuY2UgKnJlZikKZGlmZiAtLWdpdCBhL3NyYy9yZWZzLmggYi9zcmMvcmVmcy5oCmluZGV4IGY0ODdlZTMuLjgwYzc3MDMgMTAwNjQ0Ci0tLSBhL3NyYy9yZWZzLmgKKysrIGIvc3JjL3JlZnMuaApAQCAtNDYsNiArNDYsOCBAQAogI2RlZmluZSBHSVRfU1RBU0hfRklMRSAic3Rhc2giCiAjZGVmaW5lIEdJVF9SRUZTX1NUQVNIX0ZJTEUgR0lUX1JFRlNfRElSIEdJVF9TVEFTSF9GSUxFCiAKKyNkZWZpbmUgR0lUX1JFRl9GT1JNQVRfX1BSRUNPTVBPU0VfVU5JQ09ERQkoMXUgPDwgMTYpCisKICNkZWZpbmUgR0lUX1JFRk5BTUVfTUFYIDEwMjQKIAogc3RydWN0IGdpdF9yZWZlcmVuY2UgewpAQCAtNjEsMTIgKzYzLDE1IEBACiAJY2hhciBuYW1lWzBdOwogfTsKIAorZ2l0X3JlZmVyZW5jZSAqZ2l0X3JlZmVyZW5jZV9fc2V0X25hbWUoZ2l0X3JlZmVyZW5jZSAqcmVmLCBjb25zdCBjaGFyICpuYW1lKTsKKwogaW50IGdpdF9yZWZlcmVuY2VfX25vcm1hbGl6ZV9uYW1lX2xheChjaGFyICpidWZmZXJfb3V0LCBzaXplX3Qgb3V0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGdpdF9yZWZlcmVuY2VfX25vcm1hbGl6ZV9uYW1lKGdpdF9idWYgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBnaXRfcmVmZXJlbmNlX191cGRhdGVfdGVybWluYWwoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnJlZl9uYW1lLCBjb25zdCBnaXRfb2lkICpvaWQpOwogaW50IGdpdF9yZWZlcmVuY2VfX2lzX3ZhbGlkX25hbWUoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBnaXRfcmVmZXJlbmNlX19pc19icmFuY2goY29uc3QgY2hhciAqcmVmX25hbWUpOwogaW50IGdpdF9yZWZlcmVuY2VfX2lzX3JlbW90ZShjb25zdCBjaGFyICpyZWZfbmFtZSk7CitpbnQgZ2l0X3JlZmVyZW5jZV9faXNfdGFnKGNvbnN0IGNoYXIgKnJlZl9uYW1lKTsKIAogLyoqCiAgKiBMb29rdXAgYSByZWZlcmVuY2UgYnkgbmFtZSBhbmQgdHJ5IHRvIHJlc29sdmUgdG8gYW4gT0lELgpkaWZmIC0tZ2l0IGEvc3JjL3JlZnNwZWMuYyBiL3NyYy9yZWZzcGVjLmMKaW5kZXggYTkwN2RmOC4uYTk3MzQwMCAxMDA2NDQKLS0tIGEvc3JjL3JlZnNwZWMuYworKysgYi9zcmMvcmVmc3BlYy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgInBvc2l4LmgiCiAjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInZlY3Rvci5oIgogCiBpbnQgZ2l0X3JlZnNwZWNfX3BhcnNlKGdpdF9yZWZzcGVjICpyZWZzcGVjLCBjb25zdCBjaGFyICppbnB1dCwgYm9vbCBpc19mZXRjaCkKIHsKQEAgLTIyNSwyNSArMjI2LDMxIEBACiAJcmV0dXJuIHJlZnNwZWNfdHJhbnNmb3JtX2ludGVybmFsKG91dCwgb3V0bGVuLCBzcGVjLT5kc3QsIHNwZWMtPnNyYywgbmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgcmVmc3BlY190cmFuc2Zvcm0oZ2l0X2J1ZiAqb3V0LCBjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bywgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgcmVmc3BlY190cmFuc2Zvcm0oCisJZ2l0X2J1ZiAqb3V0LCBjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0bywgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAoZ2l0X2J1Zl9zZXRzKG91dCwgdG8pIDwgMCkKKwlzaXplX3QgdG9fbGVuICAgPSB0byAgID8gc3RybGVuKHRvKSAgIDogMDsKKwlzaXplX3QgZnJvbV9sZW4gPSBmcm9tID8gc3RybGVuKGZyb20pIDogMDsKKwlzaXplX3QgbmFtZV9sZW4gPSBuYW1lID8gc3RybGVuKG5hbWUpIDogMDsKKworCWlmIChnaXRfYnVmX3NldChvdXQsIHRvLCB0b19sZW4pIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JLyoKLQkgKiBObyAnKicgYXQgdGhlIGVuZCBtZWFucyB0aGF0IGl0J3MgbWFwcGVkIHRvIG9uZSBzcGVjaWZpYwotCSAqIGJyYW5jaCwgc28gbm8gYWN0dWFsIHRyYW5zZm9ybWF0aW9uIGlzIG5lZWRlZC4KLQkgKi8KLQlpZiAoZ2l0X2J1Zl9sZW4ob3V0KSA+IDAgJiYgb3V0LT5wdHJbZ2l0X2J1Zl9sZW4ob3V0KSAtIDFdICE9ICcqJykKLQkJcmV0dXJuIDA7CisJaWYgKHRvX2xlbiA+IDApIHsKKwkJLyogTm8gJyonIGF0IHRoZSBlbmQgb2YgJ3RvJyBtZWFucyB0aGF0IHJlZnNwZWMgaXMgbWFwcGVkIHRvIG9uZQorCQkgKiBzcGVjaWZpYyBicmFuY2gsIHNvIG5vIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbiBpcyBuZWVkZWQuCisJCSAqLworCQlpZiAob3V0LT5wdHJbdG9fbGVuIC0gMV0gIT0gJyonKQorCQkJcmV0dXJuIDA7CisJCWdpdF9idWZfc2hvcnRlbihvdXQsIDEpOyAvKiByZW1vdmUgdHJhaWxpbmcgJyonIGNvcGllZCBmcm9tICd0bycgKi8KKwl9CiAKLQlnaXRfYnVmX3RydW5jYXRlKG91dCwgZ2l0X2J1Zl9sZW4ob3V0KSAtIDEpOyAvKiByZW1vdmUgdHJhaWxpbmcgJyonICovCi0JZ2l0X2J1Zl9wdXRzKG91dCwgbmFtZSArIHN0cmxlbihmcm9tKSAtIDEpOworCWlmIChmcm9tX2xlbiA+IDApIC8qIGlnbm9yZSB0cmFpbGluZyAnKicgZnJvbSAnZnJvbScgKi8KKwkJZnJvbV9sZW4tLTsKKwlpZiAoZnJvbV9sZW4gPiBuYW1lX2xlbikKKwkJZnJvbV9sZW4gPSBuYW1lX2xlbjsKIAotCWlmIChnaXRfYnVmX29vbShvdXQpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2l0X2J1Zl9wdXQob3V0LCBuYW1lICsgZnJvbV9sZW4sIG5hbWVfbGVuIC0gZnJvbV9sZW4pOwogfQogCiBpbnQgZ2l0X3JlZnNwZWNfdHJhbnNmb3JtX3IoZ2l0X2J1ZiAqb3V0LCBjb25zdCBnaXRfcmVmc3BlYyAqc3BlYywgY29uc3QgY2hhciAqbmFtZSkKQEAgLTI4MSwzICsyODgsNzAgQEAKIAogCXJldHVybiBzcGVjLT5wdXNoOwogfQorCitpbnQgZ2l0X3JlZnNwZWNfX2R3aW1fb25lKGdpdF92ZWN0b3IgKm91dCwgZ2l0X3JlZnNwZWMgKnNwZWMsIGdpdF92ZWN0b3IgKnJlZnMpCit7CisJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CisJc2l6ZV90IGosIHBvczsKKwlnaXRfcmVtb3RlX2hlYWQga2V5OworCisJY29uc3QgY2hhciogZm9ybWF0dGVyc1tdID0geworCQlHSVRfUkVGU19ESVIgIiVzIiwKKwkJR0lUX1JFRlNfVEFHU19ESVIgIiVzIiwKKwkJR0lUX1JFRlNfSEVBRFNfRElSICIlcyIsCisJCU5VTEwKKwl9OworCisJZ2l0X3JlZnNwZWMgKmN1ciA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfcmVmc3BlYykpOworCUdJVEVSUl9DSEVDS19BTExPQyhjdXIpOworCisJY3VyLT5mb3JjZSA9IHNwZWMtPmZvcmNlOworCWN1ci0+cHVzaCA9IHNwZWMtPnB1c2g7CisJY3VyLT5wYXR0ZXJuID0gc3BlYy0+cGF0dGVybjsKKwljdXItPm1hdGNoaW5nID0gc3BlYy0+bWF0Y2hpbmc7CisJY3VyLT5zdHJpbmcgPSBnaXRfX3N0cmR1cChzcGVjLT5zdHJpbmcpOworCisJLyogc2hvcnRoYW5kIG9uIHRoZSBsaHMgKi8KKwlpZiAoZ2l0X19wcmVmaXhjbXAoc3BlYy0+c3JjLCBHSVRfUkVGU19ESVIpKSB7CisJCWZvciAoaiA9IDA7IGZvcm1hdHRlcnNbal07IGorKykgeworCQkJZ2l0X2J1Zl9jbGVhcigmYnVmKTsKKwkJCWlmIChnaXRfYnVmX3ByaW50ZigmYnVmLCBmb3JtYXR0ZXJzW2pdLCBzcGVjLT5zcmMpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWtleS5uYW1lID0gKGNoYXIgKikgZ2l0X2J1Zl9jc3RyKCZidWYpOworCQkJaWYgKCFnaXRfdmVjdG9yX3NlYXJjaCgmcG9zLCByZWZzLCAma2V5KSkgeworCQkJCS8qIHdlIGZvdW5kIHNvbWV0aGluZyB0byBtYXRjaCB0aGUgc2hvcnRoYW5kLCBzZXQgc3JjIHRvIHRoYXQgKi8KKwkJCQljdXItPnNyYyA9IGdpdF9idWZfZGV0YWNoKCZidWYpOworCQkJfQorCQl9CisJfQorCisJLyogTm8gc2hvcnRoYW5kcyBmb3VuZCwgY29weSBvdmVyIHRoZSBuYW1lICovCisJaWYgKGN1ci0+c3JjID09IE5VTEwgJiYgc3BlYy0+c3JjICE9IE5VTEwpIHsKKwkJY3VyLT5zcmMgPSBnaXRfX3N0cmR1cChzcGVjLT5zcmMpOworCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoY3VyLT5zcmMpOworCX0KKworCWlmIChzcGVjLT5kc3QgJiYgZ2l0X19wcmVmaXhjbXAoc3BlYy0+ZHN0LCBHSVRfUkVGU19ESVIpKSB7CisJCS8qIGlmIGl0IHN0YXJ0cyB3aXRoICJyZW1vdGVzIiB0aGVuIHdlIGp1c3QgcHJlcGVuZCAicmVmcy8iICovCisJCWlmICghZ2l0X19wcmVmaXhjbXAoc3BlYy0+ZHN0LCAicmVtb3Rlcy8iKSkgeworCQkJZ2l0X2J1Zl9wdXRzKCZidWYsIEdJVF9SRUZTX0RJUik7CisJCX0gZWxzZSB7CisJCQlnaXRfYnVmX3B1dHMoJmJ1ZiwgR0lUX1JFRlNfSEVBRFNfRElSKTsKKwkJfQorCisJCWlmIChnaXRfYnVmX3B1dHMoJmJ1Ziwgc3BlYy0+ZHN0KSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJY3VyLT5kc3QgPSBnaXRfYnVmX2RldGFjaCgmYnVmKTsKKwl9CisKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisKKwlpZiAoY3VyLT5kc3QgPT0gTlVMTCAmJiBzcGVjLT5kc3QgIT0gTlVMTCkgeworCQljdXItPmRzdCA9IGdpdF9fc3RyZHVwKHNwZWMtPmRzdCk7CisJCUdJVEVSUl9DSEVDS19BTExPQyhjdXItPmRzdCk7CisJfQorCisJcmV0dXJuIGdpdF92ZWN0b3JfaW5zZXJ0KG91dCwgY3VyKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9yZWZzcGVjLmggYi9zcmMvcmVmc3BlYy5oCmluZGV4IDQ0ZDQ4NGMuLjUxYjdiZmUgMTAwNjQ0Ci0tLSBhL3NyYy9yZWZzcGVjLmgKKysrIGIvc3JjL3JlZnNwZWMuaApAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgImdpdDIvcmVmc3BlYy5oIgogI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInZlY3Rvci5oIgogCiBzdHJ1Y3QgZ2l0X3JlZnNwZWMgewogCWNoYXIgKnN0cmluZzsKQEAgLTE3LDcgKzE4LDYgQEAKIAl1bnNpZ25lZCBpbnQgZm9yY2UgOjEsCiAJCXB1c2ggOiAxLAogCQlwYXR0ZXJuIDoxLAotCQlkd2ltIDoxLAogCQltYXRjaGluZyA6MTsKIH07CiAKQEAgLTYzLDQgKzYzLDEwIEBACiAgKi8KIGludCBnaXRfcmVmc3BlY19pc193aWxkY2FyZChjb25zdCBnaXRfcmVmc3BlYyAqc3BlYyk7CiAKKy8qKgorICogRFdJTSBgc3BlY2Agd2l0aCBgcmVmc2AgZXhpc3Rpbmcgb24gdGhlIHJlbW90ZSwgYXBwZW5kIHRoZSBkd2ltJ2VkCisgKiByZXN1bHQgaW4gYG91dGAuCisgKi8KK2ludCBnaXRfcmVmc3BlY19fZHdpbV9vbmUoZ2l0X3ZlY3RvciAqb3V0LCBnaXRfcmVmc3BlYyAqc3BlYywgZ2l0X3ZlY3RvciAqcmVmcyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3JlbW90ZS5jIGIvc3JjL3JlbW90ZS5jCmluZGV4IDBlODM1NGEuLjNkODkwYTUgMTAwNjQ0Ci0tLSBhL3NyYy9yZW1vdGUuYworKysgYi9zcmMvcmVtb3RlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJnaXQyL29pZC5oIgogI2luY2x1ZGUgImdpdDIvbmV0LmgiCiAKKyNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCkBAIC0xOCw3ICsxOSw3IEBACiAjaW5jbHVkZSAicmVmc3BlYy5oIgogI2luY2x1ZGUgImZldGNoaGVhZC5oIgogCi0jaW5jbHVkZSA8cmVnZXguaD4KK3N0YXRpYyBpbnQgZHdpbV9yZWZzcGVjcyhnaXRfdmVjdG9yICpvdXQsIGdpdF92ZWN0b3IgKnJlZnNwZWNzLCBnaXRfdmVjdG9yICpyZWZzKTsKIAogc3RhdGljIGludCBhZGRfcmVmc3BlYyhnaXRfcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnN0cmluZywgYm9vbCBpc19mZXRjaCkKIHsKQEAgLTgxLDYgKzgyLDM3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50IGdldF9jaGVja19jZXJ0KGludCAqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbykKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJY29uc3QgY2hhciAqdmFsOworCWludCBlcnJvciA9IDA7CisKKwlhc3NlcnQob3V0ICYmIHJlcG8pOworCisJLyogQnkgZGVmYXVsdCwgd2UgKkRPKiB3YW50IHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUuICovCisJKm91dCA9IDE7CisKKwkvKiBHbyB0aHJvdWdoIHRoZSBwb3NzaWJsZSBzb3VyY2VzIGZvciBTU0wgdmVyaWZpY2F0aW9uIHNldHRpbmdzLCBmcm9tCisJICogbW9zdCBzcGVjaWZpYyB0byBsZWFzdCBzcGVjaWZpYy4gKi8KKworCS8qIEdJVF9TU0xfTk9fVkVSSUZZIGVudmlyb25tZW50IHZhcmlhYmxlICovCisJaWYgKCh2YWwgPSBnZXRlbnYoIkdJVF9TU0xfTk9fVkVSSUZZIikpICE9IE5VTEwpCisJCXJldHVybiBnaXRfY29uZmlnX3BhcnNlX2Jvb2wob3V0LCB2YWwpOworCisJLyogaHR0cC5zc2xWZXJpZnkgY29uZmlnIHNldHRpbmcgKi8KKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfY29uZmlnX193ZWFrcHRyKCZjZmcsIHJlcG8pKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX2dldF9ib29sKG91dCwgY2ZnLCAiaHR0cC5zc2xWZXJpZnkiKSkgPT0gMCkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKKwkJcmV0dXJuIGVycm9yOworCisJZ2l0ZXJyX2NsZWFyKCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3JlYXRlX2ludGVybmFsKGdpdF9yZW1vdGUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmZldGNoKQogewogCWdpdF9yZW1vdGUgKnJlbW90ZTsKQEAgLTk0LDkgKzEyNiwxMSBAQAogCUdJVEVSUl9DSEVDS19BTExPQyhyZW1vdGUpOwogCiAJcmVtb3RlLT5yZXBvID0gcmVwbzsKLQlyZW1vdGUtPmNoZWNrX2NlcnQgPSAxOwogCXJlbW90ZS0+dXBkYXRlX2ZldGNoaGVhZCA9IDE7CiAKKwlpZiAoZ2V0X2NoZWNrX2NlcnQoJnJlbW90ZS0+Y2hlY2tfY2VydCwgcmVwbykgPCAwKQorCQlnb3RvIG9uX2Vycm9yOworCiAJaWYgKGdpdF92ZWN0b3JfaW5pdCgmcmVtb3RlLT5yZWZzLCAzMiwgTlVMTCkgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwogCkBAIC0xODMsNiArMjE3LDMyIEBACiAJcmV0dXJuIC0xOwogfQogCitpbnQgZ2l0X3JlbW90ZV9jcmVhdGVfd2l0aF9mZXRjaHNwZWMoZ2l0X3JlbW90ZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqZmV0Y2gpCit7CisJZ2l0X3JlbW90ZSAqcmVtb3RlID0gTlVMTDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoKGVycm9yID0gZW5zdXJlX3JlbW90ZV9uYW1lX2lzX3ZhbGlkKG5hbWUpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBlbnN1cmVfcmVtb3RlX2RvZXNub3RfZXhpc3QocmVwbywgbmFtZSkpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGNyZWF0ZV9pbnRlcm5hbCgmcmVtb3RlLCByZXBvLCBuYW1lLCB1cmwsIGZldGNoKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKKwlpZiAoZ2l0X3JlbW90ZV9zYXZlKHJlbW90ZSkgPCAwKQorCQlnb3RvIG9uX2Vycm9yOworCisJKm91dCA9IHJlbW90ZTsKKworCXJldHVybiAwOworCitvbl9lcnJvcjoKKwlnaXRfcmVtb3RlX2ZyZWUocmVtb3RlKTsKKwlyZXR1cm4gLTE7Cit9CisKIGludCBnaXRfcmVtb3RlX2NyZWF0ZV9pbm1lbW9yeShnaXRfcmVtb3RlICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZmV0Y2gsIGNvbnN0IGNoYXIgKnVybCkKIHsKIAlpbnQgZXJyb3I7CkBAIC0yMDgsNyArMjY4LDggQEAKIH0KIAogc3RhdGljIGludCBnZXRfb3B0aW9uYWxfY29uZmlnKAotCWdpdF9jb25maWcgKmNvbmZpZywgZ2l0X2J1ZiAqYnVmLCBnaXRfY29uZmlnX2ZvcmVhY2hfY2IgY2IsIHZvaWQgKnBheWxvYWQpCisJYm9vbCAqZm91bmQsIGdpdF9jb25maWcgKmNvbmZpZywgZ2l0X2J1ZiAqYnVmLAorCWdpdF9jb25maWdfZm9yZWFjaF9jYiBjYiwgdm9pZCAqcGF5bG9hZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWNvbnN0IGNoYXIgKmtleSA9IGdpdF9idWZfY3N0cihidWYpOwpAQCAtMjE3LDEwICsyNzgsMTMgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGNiICE9IE5VTEwpCi0JCWVycm9yID0gZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXIoY29uZmlnLCBrZXksIE5VTEwsIGNiLCBwYXlsb2FkKTsKKwkJZXJyb3IgPSBnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNvbmZpZywga2V5LCBOVUxMLCBjYiwgcGF5bG9hZCk7CiAJZWxzZQogCQllcnJvciA9IGdpdF9jb25maWdfZ2V0X3N0cmluZyhwYXlsb2FkLCBjb25maWcsIGtleSk7CiAKKwlpZiAoZm91bmQpCisJCSpmb3VuZCA9ICFlcnJvcjsKKwogCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSB7CiAJCWdpdGVycl9jbGVhcigpOwogCQllcnJvciA9IDA7CkBAIC0yNDAsNiArMzA0LDcgQEAKIAlpbnQgZXJyb3IgPSAwOwogCWdpdF9jb25maWcgKmNvbmZpZzsKIAlzdHJ1Y3QgcmVmc3BlY19jYl9kYXRhIGRhdGE7CisJYm9vbCBvcHRpb25hbF9zZXR0aW5nX2ZvdW5kID0gZmFsc2UsIGZvdW5kOwogCiAJYXNzZXJ0KG91dCAmJiByZXBvICYmIG5hbWUpOwogCkBAIC0yNTMsMTMgKzMxOCwxNiBAQAogCUdJVEVSUl9DSEVDS19BTExPQyhyZW1vdGUpOwogCiAJbWVtc2V0KHJlbW90ZSwgMHgwLCBzaXplb2YoZ2l0X3JlbW90ZSkpOwotCXJlbW90ZS0+Y2hlY2tfY2VydCA9IDE7CiAJcmVtb3RlLT51cGRhdGVfZmV0Y2hoZWFkID0gMTsKIAlyZW1vdGUtPm5hbWUgPSBnaXRfX3N0cmR1cChuYW1lKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVtb3RlLT5uYW1lKTsKIAorCWlmICgoZXJyb3IgPSBnZXRfY2hlY2tfY2VydCgmcmVtb3RlLT5jaGVja19jZXJ0LCByZXBvKSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKIAlpZiAoKGdpdF92ZWN0b3JfaW5pdCgmcmVtb3RlLT5yZWZzLCAzMiwgTlVMTCkgPCAwKSB8fAotCSAgICAoZ2l0X3ZlY3Rvcl9pbml0KCZyZW1vdGUtPnJlZnNwZWNzLCAyLCBOVUxMKSkpIHsKKwkgICAgKGdpdF92ZWN0b3JfaW5pdCgmcmVtb3RlLT5yZWZzcGVjcywgMiwgTlVMTCkgPCAwKSB8fAorCSAgICAoZ2l0X3ZlY3Rvcl9pbml0KCZyZW1vdGUtPmFjdGl2ZV9yZWZzcGVjcywgMiwgTlVMTCkgPCAwKSkgewogCQllcnJvciA9IC0xOwogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtMjY5LDI3ICszMzcsMzMgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX2dldF9zdHJpbmcoJnZhbCwgY29uZmlnLCBnaXRfYnVmX2NzdHIoJmJ1ZikpKSA8IDApCisJaWYgKChlcnJvciA9IGdldF9vcHRpb25hbF9jb25maWcoJmZvdW5kLCBjb25maWcsICZidWYsIE5VTEwsICh2b2lkICopJnZhbCkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKHN0cmxlbih2YWwpID09IDApIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfSU5WQUxJRCwgIk1hbGZvcm1lZCByZW1vdGUgJyVzJyAtIG1pc3NpbmcgVVJMIiwgbmFtZSk7Ci0JCWVycm9yID0gLTE7Ci0JCWdvdG8gY2xlYW51cDsKLQl9CisJb3B0aW9uYWxfc2V0dGluZ19mb3VuZCB8PSBmb3VuZDsKIAogCXJlbW90ZS0+cmVwbyA9IHJlcG87Ci0JcmVtb3RlLT51cmwgPSBnaXRfX3N0cmR1cCh2YWwpOwotCUdJVEVSUl9DSEVDS19BTExPQyhyZW1vdGUtPnVybCk7CisKKwlpZiAoZm91bmQgJiYgc3RybGVuKHZhbCkgPiAwKSB7CisJCXJlbW90ZS0+dXJsID0gZ2l0X19zdHJkdXAodmFsKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKHJlbW90ZS0+dXJsKTsKKwl9CiAKIAl2YWwgPSBOVUxMOwogCWdpdF9idWZfY2xlYXIoJmJ1Zik7CiAJZ2l0X2J1Zl9wcmludGYoJmJ1ZiwgInJlbW90ZS4lcy5wdXNodXJsIiwgbmFtZSk7CiAKLQlpZiAoKGVycm9yID0gZ2V0X29wdGlvbmFsX2NvbmZpZyhjb25maWcsICZidWYsIE5VTEwsICh2b2lkICopJnZhbCkpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2V0X29wdGlvbmFsX2NvbmZpZygmZm91bmQsIGNvbmZpZywgJmJ1ZiwgTlVMTCwgKHZvaWQgKikmdmFsKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAodmFsKSB7CisJb3B0aW9uYWxfc2V0dGluZ19mb3VuZCB8PSBmb3VuZDsKKworCWlmICghb3B0aW9uYWxfc2V0dGluZ19mb3VuZCkgeworCQllcnJvciA9IEdJVF9FTk9URk9VTkQ7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoZm91bmQgJiYgc3RybGVuKHZhbCkgPiAwKSB7CiAJCXJlbW90ZS0+cHVzaHVybCA9IGdpdF9fc3RyZHVwKHZhbCk7CiAJCUdJVEVSUl9DSEVDS19BTExPQyhyZW1vdGUtPnB1c2h1cmwpOwogCX0KQEAgLTI5OSwxOSArMzczLDIzIEBACiAJZ2l0X2J1Zl9jbGVhcigmYnVmKTsKIAlnaXRfYnVmX3ByaW50ZigmYnVmLCAicmVtb3RlLiVzLmZldGNoIiwgbmFtZSk7CiAKLQlpZiAoKGVycm9yID0gZ2V0X29wdGlvbmFsX2NvbmZpZyhjb25maWcsICZidWYsIHJlZnNwZWNfY2IsICZkYXRhKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnZXRfb3B0aW9uYWxfY29uZmlnKE5VTEwsIGNvbmZpZywgJmJ1ZiwgcmVmc3BlY19jYiwgJmRhdGEpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAogCWRhdGEuZmV0Y2ggPSBmYWxzZTsKIAlnaXRfYnVmX2NsZWFyKCZidWYpOwogCWdpdF9idWZfcHJpbnRmKCZidWYsICJyZW1vdGUuJXMucHVzaCIsIG5hbWUpOwogCi0JaWYgKChlcnJvciA9IGdldF9vcHRpb25hbF9jb25maWcoY29uZmlnLCAmYnVmLCByZWZzcGVjX2NiLCAmZGF0YSkpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2V0X29wdGlvbmFsX2NvbmZpZyhOVUxMLCBjb25maWcsICZidWYsIHJlZnNwZWNfY2IsICZkYXRhKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKIAlpZiAoZG93bmxvYWRfdGFnc192YWx1ZShyZW1vdGUsIGNvbmZpZykgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKKwkvKiBNb3ZlIHRoZSBkYXRhIG92ZXIgdG8gd2hlcmUgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBjYW4gZmluZCB0aGVtICovCisJaWYgKGR3aW1fcmVmc3BlY3MoJnJlbW90ZS0+YWN0aXZlX3JlZnNwZWNzLCAmcmVtb3RlLT5yZWZzcGVjcywgJnJlbW90ZS0+cmVmcykgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKIAkqb3V0ID0gcmVtb3RlOwogCiBjbGVhbnVwOgpAQCAtMzI2LDIwICs0MDQsMjIgQEAKIHN0YXRpYyBpbnQgdXBkYXRlX2NvbmZpZ19yZWZzcGVjKGNvbnN0IGdpdF9yZW1vdGUgKnJlbW90ZSwgZ2l0X2NvbmZpZyAqY29uZmlnLCBpbnQgZGlyZWN0aW9uKQogewogCWdpdF9idWYgbmFtZSA9IEdJVF9CVUZfSU5JVDsKLQlpbnQgcHVzaDsKKwl1bnNpZ25lZCBpbnQgcHVzaDsKIAljb25zdCBjaGFyICpkaXI7CiAJc2l6ZV90IGk7CiAJaW50IGVycm9yID0gMDsKKwljb25zdCBjaGFyICpjbmFtZTsKIAogCXB1c2ggPSBkaXJlY3Rpb24gPT0gR0lUX0RJUkVDVElPTl9QVVNIOwogCWRpciA9IHB1c2ggPyAicHVzaCIgOiAiZmV0Y2giOwogCiAJaWYgKGdpdF9idWZfcHJpbnRmKCZuYW1lLCAicmVtb3RlLiVzLiVzIiwgcmVtb3RlLT5uYW1lLCBkaXIpIDwgMCkKIAkJcmV0dXJuIC0xOworCWNuYW1lID0gZ2l0X2J1Zl9jc3RyKCZuYW1lKTsKIAogCS8qIENsZWFyIG91dCB0aGUgZXhpc3RpbmcgY29uZmlnICovCiAJd2hpbGUgKCFlcnJvcikKLQkJZXJyb3IgPSBnaXRfY29uZmlnX2RlbGV0ZV9lbnRyeShjb25maWcsIGdpdF9idWZfY3N0cigmbmFtZSkpOworCQllcnJvciA9IGdpdF9jb25maWdfZGVsZXRlX211bHRpdmFyKGNvbmZpZywgY25hbWUsICIuKiIpOwogCiAJaWYgKGVycm9yICE9IEdJVF9FTk9URk9VTkQpCiAJCXJldHVybiBlcnJvcjsKQEAgLTM1MCw4ICs0MzAsMTEgQEAKIAkJaWYgKHNwZWMtPnB1c2ggIT0gcHVzaCkKIAkJCWNvbnRpbnVlOwogCisJCS8vICIkXiIgaXMgYSB1bm1hdGNoZWFibGUgcmVnZXhwOiBpdCB3aWxsIG5vdCBtYXRjaCBhbnl0aGluZyBhdCBhbGwsIHNvCisJCS8vIGFsbCB2YWx1ZXMgd2lsbCBiZSBjb25zaWRlcmVkIG5ldyBhbmQgd2Ugd2lsbCBub3QgcmVwbGFjZSBhbnkKKwkJLy8gcHJlc2VudCB2YWx1ZS4KIAkJaWYgKChlcnJvciA9IGdpdF9jb25maWdfc2V0X211bHRpdmFyKAotCQkJCWNvbmZpZywgZ2l0X2J1Zl9jc3RyKCZuYW1lKSwgIiIsIHNwZWMtPnN0cmluZykpIDwgMCkgeworCQkJCWNvbmZpZywgY25hbWUsICIkXiIsIHNwZWMtPnN0cmluZykpIDwgMCkgewogCQkJZ290byBjbGVhbnVwOwogCQl9CiAJfQpAQCAtNDY3LDYgKzU1MCwxMiBAQAogCXJldHVybiByZW1vdGUtPm5hbWU7CiB9CiAKK2dpdF9yZXBvc2l0b3J5ICpnaXRfcmVtb3RlX293bmVyKGNvbnN0IGdpdF9yZW1vdGUgKnJlbW90ZSkKK3sKKwlhc3NlcnQocmVtb3RlKTsKKwlyZXR1cm4gcmVtb3RlLT5yZXBvOworfQorCiBjb25zdCBjaGFyICpnaXRfcmVtb3RlX3VybChjb25zdCBnaXRfcmVtb3RlICpyZW1vdGUpCiB7CiAJYXNzZXJ0KHJlbW90ZSk7CkBAIC01MDksNiArNTk4LDggQEAKIHsKIAlhc3NlcnQocmVtb3RlKTsKIAorCWFzc2VydChkaXJlY3Rpb24gPT0gR0lUX0RJUkVDVElPTl9GRVRDSCB8fCBkaXJlY3Rpb24gPT0gR0lUX0RJUkVDVElPTl9QVVNIKTsKKwogCWlmIChkaXJlY3Rpb24gPT0gR0lUX0RJUkVDVElPTl9GRVRDSCkgewogCQlyZXR1cm4gcmVtb3RlLT51cmw7CiAJfQpAQCAtNTI1LDI4ICs2MTYsMzIgQEAKIAlnaXRfdHJhbnNwb3J0ICp0OwogCWNvbnN0IGNoYXIgKnVybDsKIAlpbnQgZmxhZ3MgPSBHSVRfVFJBTlNQT1JURkxBR1NfTk9ORTsKKwlpbnQgZXJyb3I7CiAKIAlhc3NlcnQocmVtb3RlKTsKIAogCXQgPSByZW1vdGUtPnRyYW5zcG9ydDsKIAogCXVybCA9IGdpdF9yZW1vdGVfX3VybGZvcmRpcmVjdGlvbihyZW1vdGUsIGRpcmVjdGlvbik7Ci0JaWYgKHVybCA9PSBOVUxMICkKKwlpZiAodXJsID09IE5VTEwpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfSU5WQUxJRCwKKwkJCSJNYWxmb3JtZWQgcmVtb3RlICclcycgLSBtaXNzaW5nIFVSTCIsIHJlbW90ZS0+bmFtZSk7CiAJCXJldHVybiAtMTsKKwl9CiAKIAkvKiBBIHRyYW5zcG9ydCBjb3VsZCBoYXZlIGJlZW4gc3VwcGxpZWQgaW4gYWR2YW5jZSB3aXRoCiAJICogZ2l0X3JlbW90ZV9zZXRfdHJhbnNwb3J0ICovCi0JaWYgKCF0ICYmIGdpdF90cmFuc3BvcnRfbmV3KCZ0LCByZW1vdGUsIHVybCkgPCAwKQotCQlyZXR1cm4gLTE7CisJaWYgKCF0ICYmIChlcnJvciA9IGdpdF90cmFuc3BvcnRfbmV3KCZ0LCByZW1vdGUsIHVybCkpIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJaWYgKHQtPnNldF9jYWxsYmFja3MgJiYKLQkJdC0+c2V0X2NhbGxiYWNrcyh0LCByZW1vdGUtPmNhbGxiYWNrcy5wcm9ncmVzcywgTlVMTCwgcmVtb3RlLT5jYWxsYmFja3MucGF5bG9hZCkgPCAwKQorCQkoZXJyb3IgPSB0LT5zZXRfY2FsbGJhY2tzKHQsIHJlbW90ZS0+Y2FsbGJhY2tzLnByb2dyZXNzLCBOVUxMLCByZW1vdGUtPmNhbGxiYWNrcy5wYXlsb2FkKSkgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwogCiAJaWYgKCFyZW1vdGUtPmNoZWNrX2NlcnQpCiAJCWZsYWdzIHw9IEdJVF9UUkFOU1BPUlRGTEFHU19OT19DSEVDS19DRVJUOwogCi0JaWYgKHQtPmNvbm5lY3QodCwgdXJsLCByZW1vdGUtPmNyZWRfYWNxdWlyZV9jYiwgcmVtb3RlLT5jcmVkX2FjcXVpcmVfcGF5bG9hZCwgZGlyZWN0aW9uLCBmbGFncykgPCAwKQorCWlmICgoZXJyb3IgPSB0LT5jb25uZWN0KHQsIHVybCwgcmVtb3RlLT5jYWxsYmFja3MuY3JlZGVudGlhbHMsIHJlbW90ZS0+Y2FsbGJhY2tzLnBheWxvYWQsIGRpcmVjdGlvbiwgZmxhZ3MpKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKIAlyZW1vdGUtPnRyYW5zcG9ydCA9IHQ7CkBAIC01NTksMjAgKzY1NCwyMSBAQAogCWlmICh0ID09IHJlbW90ZS0+dHJhbnNwb3J0KQogCQlyZW1vdGUtPnRyYW5zcG9ydCA9IE5VTEw7CiAKLQlyZXR1cm4gLTE7CisJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2l0X3JlbW90ZV9scyhnaXRfcmVtb3RlICpyZW1vdGUsIGdpdF9oZWFkbGlzdF9jYiBsaXN0X2NiLCB2b2lkICpwYXlsb2FkKQoraW50IGdpdF9yZW1vdGVfbHMoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqKm91dCwgc2l6ZV90ICpzaXplLCBnaXRfcmVtb3RlICpyZW1vdGUpCiB7CiAJYXNzZXJ0KHJlbW90ZSk7CiAKLQlyZXR1cm4gcmVtb3RlLT50cmFuc3BvcnQtPmxzKHJlbW90ZS0+dHJhbnNwb3J0LCBsaXN0X2NiLCBwYXlsb2FkKTsKKwlyZXR1cm4gcmVtb3RlLT50cmFuc3BvcnQtPmxzKG91dCwgc2l6ZSwgcmVtb3RlLT50cmFuc3BvcnQpOwogfQogCiBpbnQgZ2l0X3JlbW90ZV9fZ2V0X2h0dHBfcHJveHkoZ2l0X3JlbW90ZSAqcmVtb3RlLCBib29sIHVzZV9zc2wsIGNoYXIgKipwcm94eV91cmwpCiB7CiAJZ2l0X2NvbmZpZyAqY2ZnOwogCWNvbnN0IGNoYXIgKnZhbDsKKwlpbnQgZXJyb3I7CiAKIAlhc3NlcnQocmVtb3RlKTsKIApAQCAtNTgxLDggKzY3Nyw4IEBACiAKIAkqcHJveHlfdXJsID0gTlVMTDsKIAotCWlmIChnaXRfcmVwb3NpdG9yeV9jb25maWdfX3dlYWtwdHIoJmNmZywgcmVtb3RlLT5yZXBvKSA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfY29uZmlnX193ZWFrcHRyKCZjZmcsIHJlbW90ZS0+cmVwbykpIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJLyogR28gdGhyb3VnaCB0aGUgcG9zc2libGUgc291cmNlcyBmb3IgcHJveHkgY29uZmlndXJhdGlvbiwgZnJvbSBtb3N0IHNwZWNpZmljCiAJICogdG8gbGVhc3Qgc3BlY2lmaWMuICovCkBAIC01OTEsMjggKzY4NywzMyBAQAogCWlmIChyZW1vdGUtPm5hbWUgJiYgMCAhPSAqKHJlbW90ZS0+bmFtZSkpIHsKIAkJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CiAKLQkJaWYgKGdpdF9idWZfcHJpbnRmKCZidWYsICJyZW1vdGUuJXMucHJveHkiLCByZW1vdGUtPm5hbWUpIDwgMCkKLQkJCXJldHVybiAtMTsKKwkJaWYgKChlcnJvciA9IGdpdF9idWZfcHJpbnRmKCZidWYsICJyZW1vdGUuJXMucHJveHkiLCByZW1vdGUtPm5hbWUpKSA8IDApCisJCQlyZXR1cm4gZXJyb3I7CiAKLQkJaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoJnZhbCwgY2ZnLCBnaXRfYnVmX2NzdHIoJmJ1ZikpICYmCisJCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX2dldF9zdHJpbmcoJnZhbCwgY2ZnLCBnaXRfYnVmX2NzdHIoJmJ1ZikpKSA9PSAwICYmCiAJCQl2YWwgJiYgKCdcMCcgIT0gKnZhbCkpIHsKIAkJCWdpdF9idWZfZnJlZSgmYnVmKTsKIAogCQkJKnByb3h5X3VybCA9IGdpdF9fc3RyZHVwKHZhbCk7CiAJCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoKnByb3h5X3VybCk7CiAJCQlyZXR1cm4gMDsKLQkJfQorCQl9IGVsc2UgaWYgKGVycm9yICE9IEdJVF9FTk9URk9VTkQpCisJCQlyZXR1cm4gZXJyb3I7CiAKKwkJZ2l0ZXJyX2NsZWFyKCk7CiAJCWdpdF9idWZfZnJlZSgmYnVmKTsKIAl9CiAKIAkvKiBodHRwLnByb3h5IGNvbmZpZyBzZXR0aW5nICovCi0JaWYgKCFnaXRfY29uZmlnX2dldF9zdHJpbmcoJnZhbCwgY2ZnLCAiaHR0cC5wcm94eSIpICYmCisJaWYgKChlcnJvciA9IGdpdF9jb25maWdfZ2V0X3N0cmluZygmdmFsLCBjZmcsICJodHRwLnByb3h5IikpID09IDAgJiYKIAkJdmFsICYmICgnXDAnICE9ICp2YWwpKSB7CiAJCSpwcm94eV91cmwgPSBnaXRfX3N0cmR1cCh2YWwpOwogCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoKnByb3h5X3VybCk7CiAJCXJldHVybiAwOwotCX0KKwl9IGVsc2UgaWYgKGVycm9yICE9IEdJVF9FTk9URk9VTkQpCisJCXJldHVybiBlcnJvcjsKKworCWdpdGVycl9jbGVhcigpOwogCiAJLyogSFRUUF9QUk9YWSAvIEhUVFBTX1BST1hZIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLwogCXZhbCA9IHVzZV9zc2wgPyBnZXRlbnYoIkhUVFBTX1BST1hZIikgOiBnZXRlbnYoIkhUVFBfUFJPWFkiKTsKQEAgLTYyNiw2OSArNzI3LDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3RvcmVfcmVmcyhnaXRfcmVtb3RlX2hlYWQgKmhlYWQsIHZvaWQgKnBheWxvYWQpCisvKiBEV0lNIGByZWZzcGVjc2AgYmFzZWQgb24gYHJlZnNgIGFuZCBhcHBlbmQgdGhlIG91dHB1dCB0byBgb3V0YCAqLworc3RhdGljIGludCBkd2ltX3JlZnNwZWNzKGdpdF92ZWN0b3IgKm91dCwgZ2l0X3ZlY3RvciAqcmVmc3BlY3MsIGdpdF92ZWN0b3IgKnJlZnMpCiB7Ci0JZ2l0X3ZlY3RvciAqcmVmcyA9IChnaXRfdmVjdG9yICopcGF5bG9hZDsKLQotCXJldHVybiBnaXRfdmVjdG9yX2luc2VydChyZWZzLCBoZWFkKTsKLX0KLQotc3RhdGljIGludCBkd2ltX3JlZnNwZWNzKGdpdF92ZWN0b3IgKnJlZnNwZWNzLCBnaXRfdmVjdG9yICpyZWZzKQotewotCWdpdF9idWYgYnVmID0gR0lUX0JVRl9JTklUOworCXNpemVfdCBpOwogCWdpdF9yZWZzcGVjICpzcGVjOwotCXNpemVfdCBpLCBqLCBwb3M7Ci0JZ2l0X3JlbW90ZV9oZWFkIGtleTsKLQotCWNvbnN0IGNoYXIqIGZvcm1hdHRlcnNbXSA9IHsKLQkJR0lUX1JFRlNfRElSICIlcyIsCi0JCUdJVF9SRUZTX1RBR1NfRElSICIlcyIsCi0JCUdJVF9SRUZTX0hFQURTX0RJUiAiJXMiLAotCQlOVUxMCi0JfTsKIAogCWdpdF92ZWN0b3JfZm9yZWFjaChyZWZzcGVjcywgaSwgc3BlYykgewotCQlpZiAoc3BlYy0+ZHdpbSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHNob3J0aGFuZCBvbiB0aGUgbGhzICovCi0JCWlmIChnaXRfX3ByZWZpeGNtcChzcGVjLT5zcmMsIEdJVF9SRUZTX0RJUikpIHsKLQkJCWZvciAoaiA9IDA7IGZvcm1hdHRlcnNbal07IGorKykgewotCQkJCWdpdF9idWZfY2xlYXIoJmJ1Zik7Ci0JCQkJaWYgKGdpdF9idWZfcHJpbnRmKCZidWYsIGZvcm1hdHRlcnNbal0sIHNwZWMtPnNyYykgPCAwKQotCQkJCQlyZXR1cm4gLTE7Ci0KLQkJCQlrZXkubmFtZSA9IChjaGFyICopIGdpdF9idWZfY3N0cigmYnVmKTsKLQkJCQlpZiAoIWdpdF92ZWN0b3Jfc2VhcmNoKCZwb3MsIHJlZnMsICZrZXkpKSB7Ci0JCQkJCS8qIHdlIGZvdW5kIHNvbWV0aGluZyB0byBtYXRjaCB0aGUgc2hvcnRoYW5kLCBzZXQgc3JjIHRvIHRoYXQgKi8KLQkJCQkJZ2l0X19mcmVlKHNwZWMtPnNyYyk7Ci0JCQkJCXNwZWMtPnNyYyA9IGdpdF9idWZfZGV0YWNoKCZidWYpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChzcGVjLT5kc3QgJiYgZ2l0X19wcmVmaXhjbXAoc3BlYy0+ZHN0LCBHSVRfUkVGU19ESVIpKSB7Ci0JCQkvKiBpZiBpdCBzdGFydHMgd2l0aCAicmVtb3RlcyIgdGhlbiB3ZSBqdXN0IHByZXBlbmQgInJlZnMvIiAqLwotCQkJaWYgKCFnaXRfX3ByZWZpeGNtcChzcGVjLT5kc3QsICJyZW1vdGVzLyIpKSB7Ci0JCQkJZ2l0X2J1Zl9wdXRzKCZidWYsIEdJVF9SRUZTX0RJUik7Ci0JCQl9IGVsc2UgewotCQkJCWdpdF9idWZfcHV0cygmYnVmLCBHSVRfUkVGU19IRUFEU19ESVIpOwotCQkJfQotCi0JCQlpZiAoZ2l0X2J1Zl9wdXRzKCZidWYsIHNwZWMtPmRzdCkgPCAwKQotCQkJCXJldHVybiAtMTsKLQotCQkJZ2l0X19mcmVlKHNwZWMtPmRzdCk7Ci0JCQlzcGVjLT5kc3QgPSBnaXRfYnVmX2RldGFjaCgmYnVmKTsKLQkJfQotCi0JCXNwZWMtPmR3aW0gPSAxOworCQlpZiAoZ2l0X3JlZnNwZWNfX2R3aW1fb25lKG91dCwgc3BlYywgcmVmcykgPCAwKQorCQkJcmV0dXJuIC0xOwogCX0KIAotCWdpdF9idWZfZnJlZSgmYnVmKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9yZWZzcGVjcyhnaXRfdmVjdG9yICp2ZWMpCit7CisJc2l6ZV90IGk7CisJZ2l0X3JlZnNwZWMgKnNwZWM7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2godmVjLCBpLCBzcGVjKSB7CisJCWdpdF9yZWZzcGVjX19mcmVlKHNwZWMpOworCQlnaXRfX2ZyZWUoc3BlYyk7CisJfQorCisJZ2l0X3ZlY3Rvcl9jbGVhcih2ZWMpOworfQorCiBzdGF0aWMgaW50IHJlbW90ZV9oZWFkX2NtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCiB7CiAJY29uc3QgZ2l0X3JlbW90ZV9oZWFkICphID0gKGdpdF9yZW1vdGVfaGVhZCAqKSBfYTsKQEAgLTY5NywzMiArNzYyLDY1IEBACiAJcmV0dXJuIGdpdF9fc3RyY21wX2NiKGEtPm5hbWUsIGItPm5hbWUpOwogfQogCi1pbnQgZ2l0X3JlbW90ZV9kb3dubG9hZCgKLQkJZ2l0X3JlbW90ZSAqcmVtb3RlLAotCQlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3NfY2FsbGJhY2sgcHJvZ3Jlc3NfY2IsCi0JCXZvaWQgKnByb2dyZXNzX3BheWxvYWQpCitzdGF0aWMgaW50IGxzX3RvX3ZlY3RvcihnaXRfdmVjdG9yICpvdXQsIGdpdF9yZW1vdGUgKnJlbW90ZSkKK3sKKwlnaXRfcmVtb3RlX2hlYWQgKipoZWFkczsKKwlzaXplX3QgaGVhZHNfbGVuLCBpOworCisJaWYgKGdpdF9yZW1vdGVfbHMoKGNvbnN0IGdpdF9yZW1vdGVfaGVhZCAqKiopJmhlYWRzLCAmaGVhZHNfbGVuLCByZW1vdGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGdpdF92ZWN0b3JfaW5pdChvdXQsIGhlYWRzX2xlbiwgcmVtb3RlX2hlYWRfY21wKSA8IDApCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBoZWFkc19sZW47IGkrKykgeworCQlpZiAoZ2l0X3ZlY3Rvcl9pbnNlcnQob3V0LCBoZWFkc1tpXSkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZ2l0X3JlbW90ZV9kb3dubG9hZChnaXRfcmVtb3RlICpyZW1vdGUpCiB7CiAJaW50IGVycm9yOwogCWdpdF92ZWN0b3IgcmVmczsKIAogCWFzc2VydChyZW1vdGUpOwogCi0JaWYgKGdpdF92ZWN0b3JfaW5pdCgmcmVmcywgMTYsIHJlbW90ZV9oZWFkX2NtcCkgPCAwKQorCWlmIChsc190b192ZWN0b3IoJnJlZnMsIHJlbW90ZSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoZ2l0X3JlbW90ZV9scyhyZW1vdGUsIHN0b3JlX3JlZnMsICZyZWZzKSA8IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KKwlmcmVlX3JlZnNwZWNzKCZyZW1vdGUtPmFjdGl2ZV9yZWZzcGVjcyk7CiAKLQllcnJvciA9IGR3aW1fcmVmc3BlY3MoJnJlbW90ZS0+cmVmc3BlY3MsICZyZWZzKTsKKwllcnJvciA9IGR3aW1fcmVmc3BlY3MoJnJlbW90ZS0+YWN0aXZlX3JlZnNwZWNzLCAmcmVtb3RlLT5yZWZzcGVjcywgJnJlZnMpOwogCWdpdF92ZWN0b3JfZnJlZSgmcmVmcyk7CisKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKGVycm9yID0gZ2l0X2ZldGNoX25lZ290aWF0ZShyZW1vdGUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBnaXRfZmV0Y2hfZG93bmxvYWRfcGFjayhyZW1vdGUsIHByb2dyZXNzX2NiLCBwcm9ncmVzc19wYXlsb2FkKTsKKwlyZXR1cm4gZ2l0X2ZldGNoX2Rvd25sb2FkX3BhY2socmVtb3RlKTsKK30KKworaW50IGdpdF9yZW1vdGVfZmV0Y2goZ2l0X3JlbW90ZSAqcmVtb3RlKQoreworCWludCBlcnJvcjsKKworCS8qIENvbm5lY3QgYW5kIGRvd25sb2FkIGV2ZXJ5dGhpbmcgKi8KKwlpZiAoKGVycm9yID0gZ2l0X3JlbW90ZV9jb25uZWN0KHJlbW90ZSwgR0lUX0RJUkVDVElPTl9GRVRDSCkpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChlcnJvciA9IGdpdF9yZW1vdGVfZG93bmxvYWQocmVtb3RlKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKiBXZSBkb24ndCBuZWVkIHRvIGJlIGNvbm5lY3RlZCBhbnltb3JlICovCisJZ2l0X3JlbW90ZV9kaXNjb25uZWN0KHJlbW90ZSk7CisKKwkvKiBDcmVhdGUgInJlbW90ZS9mb28iIGJyYW5jaGVzIGZvciBhbGwgcmVtb3RlIGJyYW5jaGVzICovCisJcmV0dXJuIGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMocmVtb3RlKTsKIH0KIAogc3RhdGljIGludCByZW1vdGVfaGVhZF9mb3JfZmV0Y2hzcGVjX3NyYyhnaXRfcmVtb3RlX2hlYWQgKipvdXQsIGdpdF92ZWN0b3IgKnVwZGF0ZV9oZWFkcywgY29uc3QgY2hhciAqZmV0Y2hzcGVjX3NyYykKQEAgLTc1OSw3ICs4NTcsNyBAQAogCQkoIWdpdF9yZWZlcmVuY2VfaXNfYnJhbmNoKHJlc29sdmVkX3JlZikpIHx8CiAJCShlcnJvciA9IGdpdF9icmFuY2hfdXBzdHJlYW0oJnRyYWNraW5nX3JlZiwgcmVzb2x2ZWRfcmVmKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9yZWZzcGVjX3RyYW5zZm9ybV9sKCZyZW1vdGVfbmFtZSwgc3BlYywgZ2l0X3JlZmVyZW5jZV9uYW1lKHRyYWNraW5nX3JlZikpKSA8IDApIHsKLQkJLyogTm90IGFuIGVycm9yIGlmIEhFQUQgaXMgb3JwaGFuZWQgb3Igbm8gdHJhY2tpbmcgYnJhbmNoICovCisJCS8qIE5vdCBhbiBlcnJvciBpZiBIRUFEIGlzIHVuYm9ybiBvciBubyB0cmFja2luZyBicmFuY2ggKi8KIAkJaWYgKGVycm9yID09IEdJVF9FTk9URk9VTkQpCiAJCQllcnJvciA9IDA7CiAKQEAgLTk0NywxMCArMTA0NSw4IEBACiAJaWYgKGdpdF9yZWZzcGVjX19wYXJzZSgmdGFnc3BlYywgR0lUX1JFRlNQRUNfVEFHUywgdHJ1ZSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoZ2l0X3ZlY3Rvcl9pbml0KCZyZWZzLCAxNiwgTlVMTCkgPCAwKQotCQlyZXR1cm4gLTE7CiAKLQlpZiAoKGVycm9yID0gZ2l0X3JlbW90ZV9scyhyZW1vdGUsIHN0b3JlX3JlZnMsICZyZWZzKSkgPCAwKQorCWlmICgoZXJyb3IgPSBsc190b192ZWN0b3IoJnJlZnMsIHJlbW90ZSkpIDwgMCkKIAkJZ290byBvdXQ7CiAKIAlpZiAocmVtb3RlLT5kb3dubG9hZF90YWdzID09IEdJVF9SRU1PVEVfRE9XTkxPQURfVEFHU19BTEwpIHsKQEAgLTk1OCw3ICsxMDU0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZyZW1vdGUtPnJlZnNwZWNzLCBpLCBzcGVjKSB7CisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZyZW1vdGUtPmFjdGl2ZV9yZWZzcGVjcywgaSwgc3BlYykgewogCQlpZiAoc3BlYy0+cHVzaCkKIAkJCWNvbnRpbnVlOwogCkBAIC05NjcsOCArMTA2Myw4IEBACiAJfQogCiBvdXQ6Ci0JZ2l0X3JlZnNwZWNfX2ZyZWUoJnRhZ3NwZWMpOwogCWdpdF92ZWN0b3JfZnJlZSgmcmVmcyk7CisJZ2l0X3JlZnNwZWNfX2ZyZWUoJnRhZ3NwZWMpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTAwMSw5ICsxMDk3LDYgQEAKIAogdm9pZCBnaXRfcmVtb3RlX2ZyZWUoZ2l0X3JlbW90ZSAqcmVtb3RlKQogewotCWdpdF9yZWZzcGVjICpzcGVjOwotCXNpemVfdCBpOwotCiAJaWYgKHJlbW90ZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKQEAgLTEwMTYsNjcgKzExMDksNTUgQEAKIAogCWdpdF92ZWN0b3JfZnJlZSgmcmVtb3RlLT5yZWZzKTsKIAotCWdpdF92ZWN0b3JfZm9yZWFjaCgmcmVtb3RlLT5yZWZzcGVjcywgaSwgc3BlYykgewotCQlnaXRfcmVmc3BlY19fZnJlZShzcGVjKTsKLQkJZ2l0X19mcmVlKHNwZWMpOwotCX0KKwlmcmVlX3JlZnNwZWNzKCZyZW1vdGUtPnJlZnNwZWNzKTsKIAlnaXRfdmVjdG9yX2ZyZWUoJnJlbW90ZS0+cmVmc3BlY3MpOwogCisJZnJlZV9yZWZzcGVjcygmcmVtb3RlLT5hY3RpdmVfcmVmc3BlY3MpOworCWdpdF92ZWN0b3JfZnJlZSgmcmVtb3RlLT5hY3RpdmVfcmVmc3BlY3MpOworCiAJZ2l0X19mcmVlKHJlbW90ZS0+dXJsKTsKIAlnaXRfX2ZyZWUocmVtb3RlLT5wdXNodXJsKTsKIAlnaXRfX2ZyZWUocmVtb3RlLT5uYW1lKTsKIAlnaXRfX2ZyZWUocmVtb3RlKTsKIH0KIAotc3RydWN0IGNiX2RhdGEgewotCWdpdF92ZWN0b3IgKmxpc3Q7Ci0JcmVnZXhfdCAqcHJlZzsKLX07Ci0KLXN0YXRpYyBpbnQgcmVtb3RlX2xpc3RfY2IoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnksIHZvaWQgKmRhdGFfKQorc3RhdGljIGludCByZW1vdGVfbGlzdF9jYihjb25zdCBnaXRfY29uZmlnX2VudHJ5ICplbnRyeSwgdm9pZCAqcGF5bG9hZCkKIHsKLQlzdHJ1Y3QgY2JfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgY2JfZGF0YSAqKWRhdGFfOwotCXNpemVfdCBubWF0Y2ggPSAyOwotCXJlZ21hdGNoX3QgcG1hdGNoWzJdOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBlbnRyeS0+bmFtZTsKKwlnaXRfdmVjdG9yICpsaXN0ID0gcGF5bG9hZDsKKwljb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWUgKyBzdHJsZW4oInJlbW90ZS4iKTsKKwlzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwljaGFyICpyZW1vdGVfbmFtZTsKIAotCWlmICghcmVnZXhlYyhkYXRhLT5wcmVnLCBuYW1lLCBubWF0Y2gsIHBtYXRjaCwgMCkpIHsKLQkJY2hhciAqcmVtb3RlX25hbWUgPSBnaXRfX3N0cm5kdXAoJm5hbWVbcG1hdGNoWzFdLnJtX3NvXSwgcG1hdGNoWzFdLnJtX2VvIC0gcG1hdGNoWzFdLnJtX3NvKTsKLQkJR0lURVJSX0NIRUNLX0FMTE9DKHJlbW90ZV9uYW1lKTsKKwkvKiB3ZSBrbm93IG5hbWUgbWF0Y2hlcyAicmVtb3RlLjxzdHVmZj4uKHB1c2gpP3VybCIgKi8KIAotCQlpZiAoZ2l0X3ZlY3Rvcl9pbnNlcnQoZGF0YS0+bGlzdCwgcmVtb3RlX25hbWUpIDwgMCkKLQkJCXJldHVybiAtMTsKLQl9CisJaWYgKCFzdHJjbXAoJm5hbWVbbmFtZWxlbiAtIDRdLCAiLnVybCIpKQorCQlyZW1vdGVfbmFtZSA9IGdpdF9fc3RybmR1cChuYW1lLCBuYW1lbGVuIC0gNCk7IC8qIHN0cmlwICIudXJsIiAqLworCWVsc2UKKwkJcmVtb3RlX25hbWUgPSBnaXRfX3N0cm5kdXAobmFtZSwgbmFtZWxlbiAtIDgpOyAvKiBzdHJpcCAiLnB1c2h1cmwiICovCisJR0lURVJSX0NIRUNLX0FMTE9DKHJlbW90ZV9uYW1lKTsKIAotCXJldHVybiAwOworCXJldHVybiBnaXRfdmVjdG9yX2luc2VydChsaXN0LCByZW1vdGVfbmFtZSk7CiB9CiAKIGludCBnaXRfcmVtb3RlX2xpc3QoZ2l0X3N0cmFycmF5ICpyZW1vdGVzX2xpc3QsIGdpdF9yZXBvc2l0b3J5ICpyZXBvKQogewogCWdpdF9jb25maWcgKmNmZzsKIAlnaXRfdmVjdG9yIGxpc3Q7Ci0JcmVnZXhfdCBwcmVnOwotCXN0cnVjdCBjYl9kYXRhIGRhdGE7CiAJaW50IGVycm9yOwogCiAJaWYgKGdpdF9yZXBvc2l0b3J5X2NvbmZpZ19fd2Vha3B0cigmY2ZnLCByZXBvKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChnaXRfdmVjdG9yX2luaXQoJmxpc3QsIDQsIE5VTEwpIDwgMCkKKwlpZiAoZ2l0X3ZlY3Rvcl9pbml0KCZsaXN0LCA0LCBnaXRfX3N0cmNtcF9jYikgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAocmVnY29tcCgmcHJlZywgIl5yZW1vdGVcXC4oLiopXFwudXJsJCIsIFJFR19FWFRFTkRFRCkgPCAwKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiUmVtb3RlIGNhdGNoIHJlZ2V4IGZhaWxlZCB0byBjb21waWxlIik7Ci0JCXJldHVybiAtMTsKLQl9CisJZXJyb3IgPSBnaXRfY29uZmlnX2ZvcmVhY2hfbWF0Y2goCisJCWNmZywgIl5yZW1vdGVcXC4uKlxcLihwdXNoKT91cmwkIiwgcmVtb3RlX2xpc3RfY2IsICZsaXN0KTsKIAotCWRhdGEubGlzdCA9ICZsaXN0OwotCWRhdGEucHJlZyA9ICZwcmVnOwotCWVycm9yID0gZ2l0X2NvbmZpZ19mb3JlYWNoKGNmZywgcmVtb3RlX2xpc3RfY2IsICZkYXRhKTsKLQlyZWdmcmVlKCZwcmVnKTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCXNpemVfdCBpOwogCQljaGFyICplbGVtOworCiAJCWdpdF92ZWN0b3JfZm9yZWFjaCgmbGlzdCwgaSwgZWxlbSkgewogCQkJZ2l0X19mcmVlKGVsZW0pOwogCQl9CkBAIC0xMDkwLDYgKzExNzEsOCBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJZ2l0X3ZlY3Rvcl91bmlxKCZsaXN0LCBnaXRfX2ZyZWUpOworCiAJcmVtb3Rlc19saXN0LT5zdHJpbmdzID0gKGNoYXIgKiopbGlzdC5jb250ZW50czsKIAlyZW1vdGVzX2xpc3QtPmNvdW50ID0gbGlzdC5sZW5ndGg7CiAKQEAgLTExMDMsNyArMTE4Niw3IEBACiAJcmVtb3RlLT5jaGVja19jZXJ0ID0gY2hlY2s7CiB9CiAKLWludCBnaXRfcmVtb3RlX3NldF9jYWxsYmFja3MoZ2l0X3JlbW90ZSAqcmVtb3RlLCBnaXRfcmVtb3RlX2NhbGxiYWNrcyAqY2FsbGJhY2tzKQoraW50IGdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhnaXRfcmVtb3RlICpyZW1vdGUsIGNvbnN0IGdpdF9yZW1vdGVfY2FsbGJhY2tzICpjYWxsYmFja3MpCiB7CiAJYXNzZXJ0KHJlbW90ZSAmJiBjYWxsYmFja3MpOwogCkBAIC0xMTEyLDcgKzExOTUsNyBAQAogCW1lbWNweSgmcmVtb3RlLT5jYWxsYmFja3MsIGNhbGxiYWNrcywgc2l6ZW9mKGdpdF9yZW1vdGVfY2FsbGJhY2tzKSk7CiAKIAlpZiAocmVtb3RlLT50cmFuc3BvcnQgJiYgcmVtb3RlLT50cmFuc3BvcnQtPnNldF9jYWxsYmFja3MpCi0JCXJlbW90ZS0+dHJhbnNwb3J0LT5zZXRfY2FsbGJhY2tzKHJlbW90ZS0+dHJhbnNwb3J0LAorCQlyZXR1cm4gcmVtb3RlLT50cmFuc3BvcnQtPnNldF9jYWxsYmFja3MocmVtb3RlLT50cmFuc3BvcnQsCiAJCQlyZW1vdGUtPmNhbGxiYWNrcy5wcm9ncmVzcywKIAkJCU5VTEwsCiAJCQlyZW1vdGUtPmNhbGxiYWNrcy5wYXlsb2FkKTsKQEAgLTExMjAsMTcgKzEyMDMsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGdpdF9yZW1vdGVfc2V0X2NyZWRfYWNxdWlyZV9jYigKLQlnaXRfcmVtb3RlICpyZW1vdGUsCi0JZ2l0X2NyZWRfYWNxdWlyZV9jYiBjcmVkX2FjcXVpcmVfY2IsCi0Jdm9pZCAqcGF5bG9hZCkKLXsKLQlhc3NlcnQocmVtb3RlKTsKLQotCXJlbW90ZS0+Y3JlZF9hY3F1aXJlX2NiID0gY3JlZF9hY3F1aXJlX2NiOwotCXJlbW90ZS0+Y3JlZF9hY3F1aXJlX3BheWxvYWQgPSBwYXlsb2FkOwotfQotCiBpbnQgZ2l0X3JlbW90ZV9zZXRfdHJhbnNwb3J0KGdpdF9yZW1vdGUgKnJlbW90ZSwgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KQogewogCWFzc2VydChyZW1vdGUgJiYgdHJhbnNwb3J0KTsKQEAgLTE0MTgsMTIgKzE0OTAsMTIgQEAKIAogaW50IGdpdF9yZW1vdGVfdXBkYXRlX2ZldGNoaGVhZChnaXRfcmVtb3RlICpyZW1vdGUpCiB7Ci0JcmV0dXJuIHJlbW90ZS0+dXBkYXRlX2ZldGNoaGVhZDsKKwlyZXR1cm4gKHJlbW90ZS0+dXBkYXRlX2ZldGNoaGVhZCAhPSAwKTsKIH0KIAogdm9pZCBnaXRfcmVtb3RlX3NldF91cGRhdGVfZmV0Y2hoZWFkKGdpdF9yZW1vdGUgKnJlbW90ZSwgaW50IHZhbHVlKQogewotCXJlbW90ZS0+dXBkYXRlX2ZldGNoaGVhZCA9IHZhbHVlOworCXJlbW90ZS0+dXBkYXRlX2ZldGNoaGVhZCA9ICh2YWx1ZSAhPSAwKTsKIH0KIAogaW50IGdpdF9yZW1vdGVfaXNfdmFsaWRfbmFtZSgKQEAgLTE0NTEsNyArMTUyMyw3IEBACiAJZ2l0X3JlZnNwZWMgKnNwZWM7CiAJc2l6ZV90IGk7CiAKLQlnaXRfdmVjdG9yX2ZvcmVhY2goJnJlbW90ZS0+cmVmc3BlY3MsIGksIHNwZWMpIHsKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnJlbW90ZS0+YWN0aXZlX3JlZnNwZWNzLCBpLCBzcGVjKSB7CiAJCWlmIChzcGVjLT5wdXNoKQogCQkJY29udGludWU7CiAKQEAgLTE0NjcsNyArMTUzOSw3IEBACiAJZ2l0X3JlZnNwZWMgKnNwZWM7CiAJc2l6ZV90IGk7CiAKLQlnaXRfdmVjdG9yX2ZvcmVhY2goJnJlbW90ZS0+cmVmc3BlY3MsIGksIHNwZWMpIHsKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnJlbW90ZS0+YWN0aXZlX3JlZnNwZWNzLCBpLCBzcGVjKSB7CiAJCWlmIChzcGVjLT5wdXNoKQogCQkJY29udGludWU7CiAKQEAgLTE0OTAsMTcgKzE1NjIsNzEgQEAKIAlnaXRfdmVjdG9yX2NsZWFyKCZyZW1vdGUtPnJlZnNwZWNzKTsKIH0KIAorc3RhdGljIGludCBhZGRfYW5kX2R3aW0oZ2l0X3JlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICpzdHIsIGludCBwdXNoKQoreworCWdpdF9yZWZzcGVjICpzcGVjOworCWdpdF92ZWN0b3IgKnZlYzsKKworCWlmIChhZGRfcmVmc3BlYyhyZW1vdGUsIHN0ciwgIXB1c2gpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJdmVjID0gJnJlbW90ZS0+cmVmc3BlY3M7CisJc3BlYyA9IGdpdF92ZWN0b3JfZ2V0KHZlYywgdmVjLT5sZW5ndGggLSAxKTsKKwlyZXR1cm4gZ2l0X3JlZnNwZWNfX2R3aW1fb25lKCZyZW1vdGUtPmFjdGl2ZV9yZWZzcGVjcywgc3BlYywgJnJlbW90ZS0+cmVmcyk7Cit9CisKIGludCBnaXRfcmVtb3RlX2FkZF9mZXRjaChnaXRfcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZnNwZWMpCiB7Ci0JcmV0dXJuIGFkZF9yZWZzcGVjKHJlbW90ZSwgcmVmc3BlYywgdHJ1ZSk7CisJcmV0dXJuIGFkZF9hbmRfZHdpbShyZW1vdGUsIHJlZnNwZWMsIGZhbHNlKTsKIH0KIAogaW50IGdpdF9yZW1vdGVfYWRkX3B1c2goZ2l0X3JlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICpyZWZzcGVjKQogewotCXJldHVybiBhZGRfcmVmc3BlYyhyZW1vdGUsIHJlZnNwZWMsIGZhbHNlKTsKKwlyZXR1cm4gYWRkX2FuZF9kd2ltKHJlbW90ZSwgcmVmc3BlYywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgY29weV9yZWZzcGVjcyhnaXRfc3RyYXJyYXkgKmFycmF5LCBnaXRfcmVtb3RlICpyZW1vdGUsIGludCBwdXNoKQorc3RhdGljIGludCBzZXRfcmVmc3BlY3MoZ2l0X3JlbW90ZSAqcmVtb3RlLCBnaXRfc3RyYXJyYXkgKmFycmF5LCBpbnQgcHVzaCkKK3sKKwlnaXRfdmVjdG9yICp2ZWMgPSAmcmVtb3RlLT5yZWZzcGVjczsKKwlnaXRfcmVmc3BlYyAqc3BlYzsKKwlzaXplX3QgaTsKKworCS8qIFN0YXJ0IGJ5IHJlbW92aW5nIGFueSByZWZzcGVjcyBvZiB0aGUgc2FtZSB0eXBlICovCisJZm9yIChpID0gMDsgaSA8IHZlYy0+bGVuZ3RoOyBpKyspIHsKKwkJc3BlYyA9IGdpdF92ZWN0b3JfZ2V0KHZlYywgaSk7CisJCWlmIChzcGVjLT5wdXNoICE9IHB1c2gpCisJCQljb250aW51ZTsKKworCQlnaXRfcmVmc3BlY19fZnJlZShzcGVjKTsKKwkJZ2l0X19mcmVlKHNwZWMpOworCQlnaXRfdmVjdG9yX3JlbW92ZSh2ZWMsIGkpOworCQlpLS07CisJfQorCisJLyogQW5kIG5vdyB3ZSBhZGQgdGhlIG5ldyBvbmVzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPmNvdW50OyBpKyspIHsKKwkJaWYgKGFkZF9yZWZzcGVjKHJlbW90ZSwgYXJyYXktPnN0cmluZ3NbaV0sICFwdXNoKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJZnJlZV9yZWZzcGVjcygmcmVtb3RlLT5hY3RpdmVfcmVmc3BlY3MpOworCWdpdF92ZWN0b3JfY2xlYXIoJnJlbW90ZS0+YWN0aXZlX3JlZnNwZWNzKTsKKworCXJldHVybiBkd2ltX3JlZnNwZWNzKCZyZW1vdGUtPmFjdGl2ZV9yZWZzcGVjcywgJnJlbW90ZS0+cmVmc3BlY3MsICZyZW1vdGUtPnJlZnMpOworfQorCitpbnQgZ2l0X3JlbW90ZV9zZXRfZmV0Y2hfcmVmc3BlY3MoZ2l0X3JlbW90ZSAqcmVtb3RlLCBnaXRfc3RyYXJyYXkgKmFycmF5KQoreworCXJldHVybiBzZXRfcmVmc3BlY3MocmVtb3RlLCBhcnJheSwgZmFsc2UpOworfQorCitpbnQgZ2l0X3JlbW90ZV9zZXRfcHVzaF9yZWZzcGVjcyhnaXRfcmVtb3RlICpyZW1vdGUsIGdpdF9zdHJhcnJheSAqYXJyYXkpCit7CisJcmV0dXJuIHNldF9yZWZzcGVjcyhyZW1vdGUsIGFycmF5LCB0cnVlKTsKK30KKworc3RhdGljIGludCBjb3B5X3JlZnNwZWNzKGdpdF9zdHJhcnJheSAqYXJyYXksIGdpdF9yZW1vdGUgKnJlbW90ZSwgdW5zaWduZWQgaW50IHB1c2gpCiB7CiAJc2l6ZV90IGk7CiAJZ2l0X3ZlY3RvciByZWZzcGVjczsKQEAgLTE1NTUsMTggKzE2ODEsMyBAQAogewogCXJldHVybiBnaXRfdmVjdG9yX2dldCgmcmVtb3RlLT5yZWZzcGVjcywgbik7CiB9Ci0KLWludCBnaXRfcmVtb3RlX3JlbW92ZV9yZWZzcGVjKGdpdF9yZW1vdGUgKnJlbW90ZSwgc2l6ZV90IG4pCi17Ci0JZ2l0X3JlZnNwZWMgKnNwZWM7Ci0KLQlhc3NlcnQocmVtb3RlKTsKLQotCXNwZWMgPSBnaXRfdmVjdG9yX2dldCgmcmVtb3RlLT5yZWZzcGVjcywgbik7Ci0JaWYgKHNwZWMpIHsKLQkJZ2l0X3JlZnNwZWNfX2ZyZWUoc3BlYyk7Ci0JCWdpdF9fZnJlZShzcGVjKTsKLQl9Ci0KLQlyZXR1cm4gZ2l0X3ZlY3Rvcl9yZW1vdmUoJnJlbW90ZS0+cmVmc3BlY3MsIG4pOwotfQpkaWZmIC0tZ2l0IGEvc3JjL3JlbW90ZS5oIGIvc3JjL3JlbW90ZS5oCmluZGV4IGRjZTQ4MDMuLjQxNjRhMTQgMTAwNjQ0Ci0tLSBhL3NyYy9yZW1vdGUuaAorKysgYi9zcmMvcmVtb3RlLmgKQEAgLTIxLDE2ICsyMSwxNSBAQAogCWNoYXIgKnB1c2h1cmw7CiAJZ2l0X3ZlY3RvciByZWZzOwogCWdpdF92ZWN0b3IgcmVmc3BlY3M7Ci0JZ2l0X2NyZWRfYWNxdWlyZV9jYiBjcmVkX2FjcXVpcmVfY2I7Ci0Jdm9pZCAqY3JlZF9hY3F1aXJlX3BheWxvYWQ7CisJZ2l0X3ZlY3RvciBhY3RpdmVfcmVmc3BlY3M7CiAJZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0OwogCWdpdF9yZXBvc2l0b3J5ICpyZXBvOwogCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGNhbGxiYWNrczsKIAlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3Mgc3RhdHM7CiAJdW5zaWduZWQgaW50IG5lZWRfcGFjazsKIAlnaXRfcmVtb3RlX2F1dG90YWdfb3B0aW9uX3QgZG93bmxvYWRfdGFnczsKLQl1bnNpZ25lZCBpbnQgY2hlY2tfY2VydDsKLQl1bnNpZ25lZCBpbnQgdXBkYXRlX2ZldGNoaGVhZDsKKwlpbnQgY2hlY2tfY2VydDsKKwlpbnQgdXBkYXRlX2ZldGNoaGVhZDsKIH07CiAKIGNvbnN0IGNoYXIqIGdpdF9yZW1vdGVfX3VybGZvcmRpcmVjdGlvbihzdHJ1Y3QgZ2l0X3JlbW90ZSAqcmVtb3RlLCBpbnQgZGlyZWN0aW9uKTsKZGlmZiAtLWdpdCBhL3NyYy9yZXBvc2l0b3J5LmMgYi9zcmMvcmVwb3NpdG9yeS5jCmluZGV4IGVkOTQ2OWMuLmRjYzAyZTQgMTAwNjQ0Ci0tLSBhL3NyYy9yZXBvc2l0b3J5LmMKKysrIGIvc3JjL3JlcG9zaXRvcnkuYwpAQCAtMzMsOCArMzMsNiBAQAogCiAjZGVmaW5lIEdJVF9SRVBPX1ZFUlNJT04gMAogCi0jZGVmaW5lIEdJVF9URU1QTEFURV9ESVIgIi91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzIgotCiBzdGF0aWMgdm9pZCBzZXRfb2RiKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfb2RiICpvZGIpCiB7CiAJaWYgKG9kYikgewpAQCAtMjY2LDcgKzI2NCw3IEBACiAJCQlidWZbLS1sZW5dID0gJ1wwJzsKIAogCQlpZiAoIXN0cm5jbXAocGF0aCwgYnVmMiwgbGVuKSAmJgotCQkJcGF0aFtsZW5dID09ICcvJyAmJgorCQkJKHBhdGhbbGVuXSA9PSAnLycgfHwgIXBhdGhbbGVuXSkgJiYKIAkJCWxlbiA+IG1heF9sZW4pCiAJCXsKIAkJCW1heF9sZW4gPSBsZW47CkBAIC0zMjIsMTcgKzMyMCwxOCBAQAogCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlkZXZfdCBpbml0aWFsX2RldmljZSA9IDA7Ci0JYm9vbCB0cnlfd2l0aF9kb3RfZ2l0ID0gZmFsc2U7CisJYm9vbCB0cnlfd2l0aF9kb3RfZ2l0ID0gKChmbGFncyAmIEdJVF9SRVBPU0lUT1JZX09QRU5fQkFSRSkgIT0gMCk7CiAJaW50IGNlaWxpbmdfb2Zmc2V0OwogCiAJZ2l0X2J1Zl9mcmVlKHJlcG9fcGF0aCk7CiAKLQlpZiAoKGVycm9yID0gZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZwYXRoLCBzdGFydF9wYXRoLCBOVUxMKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9wcmV0dGlmeSgmcGF0aCwgc3RhcnRfcGF0aCwgTlVMTCkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCiAJY2VpbGluZ19vZmZzZXQgPSBmaW5kX2NlaWxpbmdfZGlyX29mZnNldChwYXRoLnB0ciwgY2VpbGluZ19kaXJzKTsKIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwYXRoLnB0ciwgRE9UX0dJVCkpIDwgMCkKKwlpZiAoIXRyeV93aXRoX2RvdF9naXQgJiYKKwkJKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcGF0aC5wdHIsIERPVF9HSVQpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCXdoaWxlICghZXJyb3IgJiYgIWdpdF9idWZfbGVuKHJlcG9fcGF0aCkpIHsKQEAgLTM4NCw3ICszODMsNyBAQAogCQl0cnlfd2l0aF9kb3RfZ2l0ID0gIXRyeV93aXRoX2RvdF9naXQ7CiAJfQogCi0JaWYgKCFlcnJvciAmJiBwYXJlbnRfcGF0aCAhPSBOVUxMKSB7CisJaWYgKCFlcnJvciAmJiBwYXJlbnRfcGF0aCAmJiAhKGZsYWdzICYgR0lUX1JFUE9TSVRPUllfT1BFTl9CQVJFKSkgewogCQlpZiAoIWdpdF9idWZfbGVuKHJlcG9fcGF0aCkpCiAJCQlnaXRfYnVmX2NsZWFyKHBhcmVudF9wYXRoKTsKIAkJZWxzZSB7CkBAIC00NjAsNyArNDU5LDkgQEAKIAlyZXBvLT5wYXRoX3JlcG9zaXRvcnkgPSBnaXRfYnVmX2RldGFjaCgmcGF0aCk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHJlcG8tPnBhdGhfcmVwb3NpdG9yeSk7CiAKLQlpZiAoKGVycm9yID0gbG9hZF9jb25maWdfZGF0YShyZXBvKSkgPCAwIHx8CisJaWYgKChmbGFncyAmIEdJVF9SRVBPU0lUT1JZX09QRU5fQkFSRSkgIT0gMCkKKwkJcmVwby0+aXNfYmFyZSA9IDE7CisJZWxzZSBpZiAoKGVycm9yID0gbG9hZF9jb25maWdfZGF0YShyZXBvKSkgPCAwIHx8CiAJCShlcnJvciA9IGxvYWRfd29ya2RpcihyZXBvLCAmcGFyZW50KSkgPCAwKQogCXsKIAkJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKQEAgLTgxNSw3ICs4MTYsNyBAQAogCWNvbnN0IGNoYXIgKmZtdDsKIAogCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZyZWZfcGF0aCwgZ2l0X2RpciwgR0lUX0hFQURfRklMRSkgPCAwIHx8Ci0JCWdpdF9maWxlYnVmX29wZW4oJnJlZiwgcmVmX3BhdGgucHRyLCAwKSA8IDApCisJCWdpdF9maWxlYnVmX29wZW4oJnJlZiwgcmVmX3BhdGgucHRyLCAwLCBHSVRfUkVGU19GSUxFX01PREUpIDwgMCkKIAkJZ290byBmYWlsOwogCiAJaWYgKCFyZWZfbmFtZSkKQEAgLTgyNyw3ICs4MjgsNyBAQAogCQlmbXQgPSAicmVmOiAiIEdJVF9SRUZTX0hFQURTX0RJUiAiJXNcbiI7CiAKIAlpZiAoZ2l0X2ZpbGVidWZfcHJpbnRmKCZyZWYsIGZtdCwgcmVmX25hbWUpIDwgMCB8fAotCQlnaXRfZmlsZWJ1Zl9jb21taXQoJnJlZiwgR0lUX1JFRlNfRklMRV9NT0RFKSA8IDApCisJCWdpdF9maWxlYnVmX2NvbW1pdCgmcmVmKSA8IDApCiAJCWdvdG8gZmFpbDsKIAogCWdpdF9idWZfZnJlZSgmcmVmX3BhdGgpOwpAQCAtODQyLDEwICs4NDMsNiBAQAogc3RhdGljIGJvb2wgaXNfY2htb2Rfc3VwcG9ydGVkKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCkKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDEsIHN0MjsKLQlzdGF0aWMgaW50IF9pc19zdXBwb3J0ZWQgPSAtMTsKLQotCWlmIChfaXNfc3VwcG9ydGVkID4gLTEpCi0JCXJldHVybiBfaXNfc3VwcG9ydGVkOwogCiAJaWYgKHBfc3RhdChmaWxlX3BhdGgsICZzdDEpIDwgMCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtODU2LDI3ICs4NTMsMTkgQEAKIAlpZiAocF9zdGF0KGZpbGVfcGF0aCwgJnN0MikgPCAwKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlfaXNfc3VwcG9ydGVkID0gKHN0MS5zdF9tb2RlICE9IHN0Mi5zdF9tb2RlKTsKLQotCXJldHVybiBfaXNfc3VwcG9ydGVkOworCXJldHVybiAoc3QxLnN0X21vZGUgIT0gc3QyLnN0X21vZGUpOwogfQogCiBzdGF0aWMgYm9vbCBpc19maWxlc3lzdGVtX2Nhc2VfaW5zZW5zaXRpdmUoY29uc3QgY2hhciAqZ2l0ZGlyX3BhdGgpCiB7CiAJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOwotCXN0YXRpYyBpbnQgX2lzX2luc2Vuc2l0aXZlID0gLTE7CisJaW50IGlzX2luc2Vuc2l0aXZlID0gLTE7CiAKLQlpZiAoX2lzX2luc2Vuc2l0aXZlID4gLTEpCi0JCXJldHVybiBfaXNfaW5zZW5zaXRpdmU7CisJaWYgKCFnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRkaXJfcGF0aCwgIkNvTmZJZyIpKQorCQlpc19pbnNlbnNpdGl2ZSA9IGdpdF9wYXRoX2V4aXN0cyhnaXRfYnVmX2NzdHIoJnBhdGgpKTsKIAotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRkaXJfcGF0aCwgIkNvTmZJZyIpIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCi0JX2lzX2luc2Vuc2l0aXZlID0gZ2l0X3BhdGhfZXhpc3RzKGdpdF9idWZfY3N0cigmcGF0aCkpOwotCi1jbGVhbnVwOgogCWdpdF9idWZfZnJlZSgmcGF0aCk7Ci0JcmV0dXJuIF9pc19pbnNlbnNpdGl2ZTsKKwlyZXR1cm4gaXNfaW5zZW5zaXRpdmU7CiB9CiAKIHN0YXRpYyBib29sIGFyZV9zeW1saW5rc19zdXBwb3J0ZWQoY29uc3QgY2hhciAqd2RfcGF0aCkKQEAgLTg4NCwyNiArODczLDc3IEBACiAJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOwogCWludCBmZDsKIAlzdHJ1Y3Qgc3RhdCBzdDsKLQlzdGF0aWMgaW50IF9zeW1saW5rc19zdXBwb3J0ZWQgPSAtMTsKKwlpbnQgc3ltbGlua3Nfc3VwcG9ydGVkID0gLTE7CiAKLQlpZiAoX3N5bWxpbmtzX3N1cHBvcnRlZCA+IC0xKQotCQlyZXR1cm4gX3N5bWxpbmtzX3N1cHBvcnRlZDsKLQotCWlmICgoZmQgPSBnaXRfZnV0aWxzX21rdG1wKCZwYXRoLCB3ZF9wYXRoKSkgPCAwIHx8CisJaWYgKChmZCA9IGdpdF9mdXRpbHNfbWt0bXAoJnBhdGgsIHdkX3BhdGgsIDA2NjYpKSA8IDAgfHwKIAkJcF9jbG9zZShmZCkgPCAwIHx8CiAJCXBfdW5saW5rKHBhdGgucHRyKSA8IDAgfHwKIAkJcF9zeW1saW5rKCJ0ZXN0aW5nIiwgcGF0aC5wdHIpIDwgMCB8fAogCQlwX2xzdGF0KHBhdGgucHRyLCAmc3QpIDwgMCkKLQkJX3N5bWxpbmtzX3N1cHBvcnRlZCA9IGZhbHNlOworCQlzeW1saW5rc19zdXBwb3J0ZWQgPSBmYWxzZTsKIAllbHNlCi0JCV9zeW1saW5rc19zdXBwb3J0ZWQgPSAoU19JU0xOSyhzdC5zdF9tb2RlKSAhPSAwKTsKKwkJc3ltbGlua3Nfc3VwcG9ydGVkID0gKFNfSVNMTksoc3Quc3RfbW9kZSkgIT0gMCk7CiAKIAkodm9pZClwX3VubGluayhwYXRoLnB0cik7CiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKIAotCXJldHVybiBfc3ltbGlua3Nfc3VwcG9ydGVkOworCXJldHVybiBzeW1saW5rc19zdXBwb3J0ZWQ7CiB9CiAKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisKK3N0YXRpYyBjb25zdCBjaGFyICpuZmNfZmlsZSA9ICJceEMzXHg4NVx4NzNceDc0XHg3Mlx4QzNceEI2XHg2RC5YWFhYWFgiOworc3RhdGljIGNvbnN0IGNoYXIgKm5mZF9maWxlID0gIlx4NDFceENDXHg4QVx4NzNceDc0XHg3Mlx4NkZceENDXHg4OFx4NkQuWFhYWFhYIjsKKworLyogQ2hlY2sgaWYgdGhlIHBsYXRmb3JtIGlzIGRlY29tcG9zaW5nIHVuaWNvZGUgZGF0YSBmb3IgdXMuICBXZSB3aWxsCisgKiBlbXVsYXRlIGNvcmUgR2l0IGFuZCBwcmVmZXIgdG8gdXNlIHByZWNvbXBvc2VkIHVuaWNvZGUgZGF0YSBpbnRlcm5hbGx5CisgKiBvbiB0aGVzZSBwbGF0Zm9ybXMsIGNvbXBvc2luZyB0aGUgZGVjb21wb3NlZCB1bmljb2RlIG9uIHRoZSBmbHkuCisgKgorICogVGhpcyBtYWlubHkgaGFwcGVucyBvbiB0aGUgTWFjIHdoZXJlIEhERlMgc3RvcmVzIGZpbGVuYW1lcyBhcworICogZGVjb21wb3NlZCB1bmljb2RlLiAgRXZlbiBvbiBWRkFUIGFuZCBTQU1CQSBmaWxlIHN5c3RlbXMsIHRoZSBNYWMgd2lsbAorICogcmV0dXJuIGRlY29tcG9zZWQgdW5pY29kZSBmcm9tIHJlYWRkaXIoKSBldmVuIHdoZW4gdGhlIGFjdHVhbAorICogZmlsZXN5c3RlbSBpcyBzdG9yaW5nIHByZWNvbXBvc2VkIHVuaWNvZGUuCisgKi8KK3N0YXRpYyBib29sIGRvZXNfZnNfZGVjb21wb3NlX3VuaWNvZGVfcGF0aHMoY29uc3QgY2hhciAqd2RfcGF0aCkKK3sKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJaW50IGZkOworCWJvb2wgZm91bmRfZGVjb21wb3NlZCA9IGZhbHNlOworCWNoYXIgdG1wWzZdOworCisJLyogQ3JlYXRlIGEgZmlsZSB1c2luZyBhIHByZWNvbXBvc2VkIHBhdGggYW5kIHRoZW4gdHJ5IHRvIGZpbmQgaXQKKwkgKiB1c2luZyB0aGUgZGVjb21wb3NlZCBuYW1lLiAgSWYgdGhlIGxvb2t1cCBmYWlscywgdGhlbiB3ZSB3aWxsIG1hcmsKKwkgKiB0aGF0IHdlIHNob3VsZCBwcmVjb21wb3NlIHVuaWNvZGUgZm9yIHRoaXMgcmVwb3NpdG9yeS4KKwkgKi8KKwlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgd2RfcGF0aCwgbmZjX2ZpbGUpIDwgMCB8fAorCQkoZmQgPSBwX21rc3RlbXAocGF0aC5wdHIpKSA8IDApCisJCWdvdG8gZG9uZTsKKwlwX2Nsb3NlKGZkKTsKKworCS8qIHJlY29yZCB0cmFpbGluZyBkaWdpdHMgZ2VuZXJhdGVkIGJ5IG1rc3RlbXAgKi8KKwltZW1jcHkodG1wLCBwYXRoLnB0ciArIHBhdGguc2l6ZSAtIHNpemVvZih0bXApLCBzaXplb2YodG1wKSk7CisKKwkvKiB0cnkgdG8gbG9vayB1cCBhcyBORkQgcGF0aCAqLworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCB3ZF9wYXRoLCBuZmRfZmlsZSkgPCAwKQorCQlnb3RvIGRvbmU7CisJbWVtY3B5KHBhdGgucHRyICsgcGF0aC5zaXplIC0gc2l6ZW9mKHRtcCksIHRtcCwgc2l6ZW9mKHRtcCkpOworCisJZm91bmRfZGVjb21wb3NlZCA9IGdpdF9wYXRoX2V4aXN0cyhwYXRoLnB0cik7CisKKwkvKiByZW1vdmUgdGVtcG9yYXJ5IGZpbGUgKHVzaW5nIG9yaWdpbmFsIHByZWNvbXBvc2VkIHBhdGgpICovCisJaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHdkX3BhdGgsIG5mY19maWxlKSA8IDApCisJCWdvdG8gZG9uZTsKKwltZW1jcHkocGF0aC5wdHIgKyBwYXRoLnNpemUgLSBzaXplb2YodG1wKSwgdG1wLCBzaXplb2YodG1wKSk7CisKKwkodm9pZClwX3VubGluayhwYXRoLnB0cik7CisKK2RvbmU6CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlyZXR1cm4gZm91bmRfZGVjb21wb3NlZDsKK30KKworI2VuZGlmCisKIHN0YXRpYyBpbnQgY3JlYXRlX2VtcHR5X2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCiB7CiAJaW50IGZkOwpAQCAtOTIxLDcxICs5NjEsMTMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmVwb19sb2NhbF9jb25maWcoCisJZ2l0X2NvbmZpZyAqKm91dCwKKwlnaXRfYnVmICpjb25maWdfZGlyLAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKnJlcG9fZGlyKQoreworCWludCBlcnJvciA9IDA7CisJZ2l0X2NvbmZpZyAqcGFyZW50OworCWNvbnN0IGNoYXIgKmNmZ19wYXRoOworCisJaWYgKGdpdF9idWZfam9pbnBhdGgoY29uZmlnX2RpciwgcmVwb19kaXIsIEdJVF9DT05GSUdfRklMRU5BTUVfSU5SRVBPKSA8IDApCisJCXJldHVybiAtMTsKKwljZmdfcGF0aCA9IGdpdF9idWZfY3N0cihjb25maWdfZGlyKTsKKworCS8qIG1ha2UgTE9DQUwgY29uZmlnIGlmIG1pc3NpbmcgKi8KKwlpZiAoIWdpdF9wYXRoX2lzZmlsZShjZmdfcGF0aCkgJiYKKwkJKGVycm9yID0gY3JlYXRlX2VtcHR5X2ZpbGUoY2ZnX3BhdGgsIEdJVF9DT05GSUdfRklMRV9NT0RFKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKiBpZiBubyByZXBvLCBqdXN0IG9wZW4gdGhhdCBmaWxlIGRpcmVjdGx5ICovCisJaWYgKCFyZXBvKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19vcGVuX29uZGlzayhvdXQsIGNmZ19wYXRoKTsKKworCS8qIG90aGVyd2lzZSwgb3BlbiBwYXJlbnQgY29uZmlnIGFuZCBnZXQgdGhhdCBsZXZlbCAqLworCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9jb25maWdfX3dlYWtwdHIoJnBhcmVudCwgcmVwbykpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKGdpdF9jb25maWdfb3Blbl9sZXZlbChvdXQsIHBhcmVudCwgR0lUX0NPTkZJR19MRVZFTF9MT0NBTCkgPCAwKSB7CisJCWdpdGVycl9jbGVhcigpOworCisJCWlmICghKGVycm9yID0gZ2l0X2NvbmZpZ19hZGRfZmlsZV9vbmRpc2soCisJCQkJcGFyZW50LCBjZmdfcGF0aCwgR0lUX0NPTkZJR19MRVZFTF9MT0NBTCwgZmFsc2UpKSkKKwkJCWVycm9yID0gZ2l0X2NvbmZpZ19vcGVuX2xldmVsKG91dCwgcGFyZW50LCBHSVRfQ09ORklHX0xFVkVMX0xPQ0FMKTsKKwl9CisKKwlnaXRfY29uZmlnX2ZyZWUocGFyZW50KTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCByZXBvX2luaXRfZnNfY29uZmlncygKKwlnaXRfY29uZmlnICpjZmcsCisJY29uc3QgY2hhciAqY2ZnX3BhdGgsCisJY29uc3QgY2hhciAqcmVwb19kaXIsCisJY29uc3QgY2hhciAqd29ya19kaXIsCisJYm9vbCB1cGRhdGVfaWdub3JlY2FzZSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCF3b3JrX2RpcikKKwkJd29ya19kaXIgPSByZXBvX2RpcjsKKworCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX3NldF9ib29sKAorCQkJY2ZnLCAiY29yZS5maWxlbW9kZSIsIGlzX2NobW9kX3N1cHBvcnRlZChjZmdfcGF0aCkpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmICghYXJlX3N5bWxpbmtzX3N1cHBvcnRlZCh3b3JrX2RpcikpIHsKKwkJaWYgKChlcnJvciA9IGdpdF9jb25maWdfc2V0X2Jvb2woY2ZnLCAiY29yZS5zeW1saW5rcyIsIGZhbHNlKSkgPCAwKQorCQkJcmV0dXJuIGVycm9yOworCX0gZWxzZSBpZiAoZ2l0X2NvbmZpZ19kZWxldGVfZW50cnkoY2ZnLCAiY29yZS5zeW1saW5rcyIpIDwgMCkKKwkJZ2l0ZXJyX2NsZWFyKCk7CisKKwlpZiAodXBkYXRlX2lnbm9yZWNhc2UpIHsKKwkJaWYgKGlzX2ZpbGVzeXN0ZW1fY2FzZV9pbnNlbnNpdGl2ZShyZXBvX2RpcikpIHsKKwkJCWlmICgoZXJyb3IgPSBnaXRfY29uZmlnX3NldF9ib29sKGNmZywgImNvcmUuaWdub3JlY2FzZSIsIHRydWUpKSA8IDApCisJCQkJcmV0dXJuIGVycm9yOworCQl9IGVsc2UgaWYgKGdpdF9jb25maWdfZGVsZXRlX2VudHJ5KGNmZywgImNvcmUuaWdub3JlY2FzZSIpIDwgMCkKKwkJCWdpdGVycl9jbGVhcigpOworCX0KKworI2lmZGVmIEdJVF9VU0VfSUNPTlYKKwlpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19zZXRfYm9vbCgKKwkJCWNmZywgImNvcmUucHJlY29tcG9zZXVuaWNvZGUiLAorCQkJZG9lc19mc19kZWNvbXBvc2VfdW5pY29kZV9wYXRocyh3b3JrX2RpcikpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcmVwb19pbml0X2NvbmZpZygKIAljb25zdCBjaGFyICpyZXBvX2RpciwKIAljb25zdCBjaGFyICp3b3JrX2RpciwKLQlnaXRfcmVwb3NpdG9yeV9pbml0X29wdGlvbnMgKm9wdHMpCisJdWludDMyX3QgZmxhZ3MsCisJdWludDMyX3QgbW9kZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWdpdF9idWYgY2ZnX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X2NvbmZpZyAqY29uZmlnID0gTlVMTDsKKwlib29sIGlzX2JhcmUgPSAoKGZsYWdzICYgR0lUX1JFUE9TSVRPUllfSU5JVF9CQVJFKSAhPSAwKTsKKwlib29sIGlzX3JlaW5pdCA9ICgoZmxhZ3MgJiBHSVRfUkVQT1NJVE9SWV9JTklUX19JU19SRUlOSVQpICE9IDApOwogCi0jZGVmaW5lIFNFVF9SRVBPX0NPTkZJRyhUWVBFLCBOQU1FLCBWQUwpIGRvIHtcCisJaWYgKChlcnJvciA9IHJlcG9fbG9jYWxfY29uZmlnKCZjb25maWcsICZjZmdfcGF0aCwgTlVMTCwgcmVwb19kaXIpKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKworCWlmIChpc19yZWluaXQgJiYgKGVycm9yID0gY2hlY2tfcmVwb3NpdG9yeWZvcm1hdHZlcnNpb24oY29uZmlnKSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKyNkZWZpbmUgU0VUX1JFUE9fQ09ORklHKFRZUEUsIE5BTUUsIFZBTCkgZG8geyBcCiAJaWYgKChlcnJvciA9IGdpdF9jb25maWdfc2V0XyMjVFlQRShjb25maWcsIE5BTUUsIFZBTCkpIDwgMCkgXAogCQlnb3RvIGNsZWFudXA7IH0gd2hpbGUgKDApCiAKLQlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmY2ZnX3BhdGgsIHJlcG9fZGlyLCBHSVRfQ09ORklHX0ZJTEVOQU1FX0lOUkVQTykgPCAwKQotCQlyZXR1cm4gLTE7CisJU0VUX1JFUE9fQ09ORklHKGJvb2wsICJjb3JlLmJhcmUiLCBpc19iYXJlKTsKKwlTRVRfUkVQT19DT05GSUcoaW50MzIsICJjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIiwgR0lUX1JFUE9fVkVSU0lPTik7CiAKLQlpZiAoIWdpdF9wYXRoX2lzZmlsZShnaXRfYnVmX2NzdHIoJmNmZ19wYXRoKSkgJiYKLQkJY3JlYXRlX2VtcHR5X2ZpbGUoZ2l0X2J1Zl9jc3RyKCZjZmdfcGF0aCksIEdJVF9DT05GSUdfRklMRV9NT0RFKSA8IDApIHsKLQkJCWdpdF9idWZfZnJlZSgmY2ZnX3BhdGgpOwotCQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjb25maWcsIGdpdF9idWZfY3N0cigmY2ZnX3BhdGgpKSA8IDApIHsKLQkJZ2l0X2J1Zl9mcmVlKCZjZmdfcGF0aCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoKG9wdHMtPmZsYWdzICYgR0lUX1JFUE9TSVRPUllfSU5JVF9fSVNfUkVJTklUKSAhPSAwICYmCi0JCShlcnJvciA9IGNoZWNrX3JlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uKGNvbmZpZykpIDwgMCkKKwlpZiAoKGVycm9yID0gcmVwb19pbml0X2ZzX2NvbmZpZ3MoCisJCQljb25maWcsIGNmZ19wYXRoLnB0ciwgcmVwb19kaXIsIHdvcmtfZGlyLCAhaXNfcmVpbml0KSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlTRVRfUkVQT19DT05GSUcoCi0JCWJvb2wsICJjb3JlLmJhcmUiLCAob3B0cy0+ZmxhZ3MgJiBHSVRfUkVQT1NJVE9SWV9JTklUX0JBUkUpICE9IDApOwotCVNFVF9SRVBPX0NPTkZJRygKLQkJaW50MzIsICJjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIiwgR0lUX1JFUE9fVkVSU0lPTik7Ci0JU0VUX1JFUE9fQ09ORklHKAotCQlib29sLCAiY29yZS5maWxlbW9kZSIsIGlzX2NobW9kX3N1cHBvcnRlZChnaXRfYnVmX2NzdHIoJmNmZ19wYXRoKSkpOwotCi0JaWYgKCEob3B0cy0+ZmxhZ3MgJiBHSVRfUkVQT1NJVE9SWV9JTklUX0JBUkUpKSB7CisJaWYgKCFpc19iYXJlKSB7CiAJCVNFVF9SRVBPX0NPTkZJRyhib29sLCAiY29yZS5sb2dhbGxyZWZ1cGRhdGVzIiwgdHJ1ZSk7CiAKLQkJaWYgKCFhcmVfc3ltbGlua3Nfc3VwcG9ydGVkKHdvcmtfZGlyKSkKLQkJCVNFVF9SRVBPX0NPTkZJRyhib29sLCAiY29yZS5zeW1saW5rcyIsIGZhbHNlKTsKLQotCQlpZiAoIShvcHRzLT5mbGFncyAmIEdJVF9SRVBPU0lUT1JZX0lOSVRfX05BVFVSQUxfV0QpKSB7CisJCWlmICghKGZsYWdzICYgR0lUX1JFUE9TSVRPUllfSU5JVF9fTkFUVVJBTF9XRCkpCiAJCQlTRVRfUkVQT19DT05GSUcoc3RyaW5nLCAiY29yZS53b3JrdHJlZSIsIHdvcmtfZGlyKTsKLQkJfQotCQllbHNlIGlmICgob3B0cy0+ZmxhZ3MgJiBHSVRfUkVQT1NJVE9SWV9JTklUX19JU19SRUlOSVQpICE9IDApIHsKKwkJZWxzZSBpZiAoaXNfcmVpbml0KSB7CiAJCQlpZiAoZ2l0X2NvbmZpZ19kZWxldGVfZW50cnkoY29uZmlnLCAiY29yZS53b3JrdHJlZSIpIDwgMCkKIAkJCQlnaXRlcnJfY2xlYXIoKTsKIAkJfQotCX0gZWxzZSB7Ci0JCWlmICghYXJlX3N5bWxpbmtzX3N1cHBvcnRlZChyZXBvX2RpcikpCi0JCQlTRVRfUkVQT19DT05GSUcoYm9vbCwgImNvcmUuc3ltbGlua3MiLCBmYWxzZSk7CiAJfQogCi0JaWYgKCEob3B0cy0+ZmxhZ3MgJiBHSVRfUkVQT1NJVE9SWV9JTklUX19JU19SRUlOSVQpICYmCi0JCWlzX2ZpbGVzeXN0ZW1fY2FzZV9pbnNlbnNpdGl2ZShyZXBvX2RpcikpCi0JCVNFVF9SRVBPX0NPTkZJRyhib29sLCAiY29yZS5pZ25vcmVjYXNlIiwgdHJ1ZSk7Ci0KLQlpZiAob3B0cy0+bW9kZSA9PSBHSVRfUkVQT1NJVE9SWV9JTklUX1NIQVJFRF9HUk9VUCkgeworCWlmIChtb2RlID09IEdJVF9SRVBPU0lUT1JZX0lOSVRfU0hBUkVEX0dST1VQKSB7CiAJCVNFVF9SRVBPX0NPTkZJRyhpbnQzMiwgImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIsIDEpOwogCQlTRVRfUkVQT19DT05GSUcoYm9vbCwgInJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyIsIHRydWUpOwogCX0KLQllbHNlIGlmIChvcHRzLT5tb2RlID09IEdJVF9SRVBPU0lUT1JZX0lOSVRfU0hBUkVEX0FMTCkgeworCWVsc2UgaWYgKG1vZGUgPT0gR0lUX1JFUE9TSVRPUllfSU5JVF9TSEFSRURfQUxMKSB7CiAJCVNFVF9SRVBPX0NPTkZJRyhpbnQzMiwgImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIsIDIpOwogCQlTRVRfUkVQT19DT05GSUcoYm9vbCwgInJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyIsIHRydWUpOwogCX0KQEAgLTk5Nyw2ICsxMDk3LDQxIEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50IHJlcG9fcmVpbml0X3N1Ym1vZHVsZV9mcyhnaXRfc3VibW9kdWxlICpzbSwgY29uc3QgY2hhciAqbiwgdm9pZCAqcCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqc21yZXBvID0gTlVMTDsKKwlHSVRfVU5VU0VEKG4pOyBHSVRfVU5VU0VEKHApOworCisJaWYgKGdpdF9zdWJtb2R1bGVfb3Blbigmc21yZXBvLCBzbSkgPCAwIHx8CisJCWdpdF9yZXBvc2l0b3J5X3JlaW5pdF9maWxlc3lzdGVtKHNtcmVwbywgdHJ1ZSkgPCAwKQorCQlnaXRlcnJfY2xlYXIoKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHNtcmVwbyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9yZXBvc2l0b3J5X3JlaW5pdF9maWxlc3lzdGVtKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBpbnQgcmVjdXJzZSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfY29uZmlnICpjb25maWcgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlcG9fZGlyID0gZ2l0X3JlcG9zaXRvcnlfcGF0aChyZXBvKTsKKworCWlmICghKGVycm9yID0gcmVwb19sb2NhbF9jb25maWcoJmNvbmZpZywgJnBhdGgsIHJlcG8sIHJlcG9fZGlyKSkpCisJCWVycm9yID0gcmVwb19pbml0X2ZzX2NvbmZpZ3MoCisJCQljb25maWcsIHBhdGgucHRyLCByZXBvX2RpciwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSwgdHJ1ZSk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCisJZ2l0X3JlcG9zaXRvcnlfX2N2YXJfY2FjaGVfY2xlYXIocmVwbyk7CisKKwlpZiAoIXJlcG8tPmlzX2JhcmUgJiYgcmVjdXJzZSkKKwkJKHZvaWQpZ2l0X3N1Ym1vZHVsZV9mb3JlYWNoKHJlcG8sIHJlcG9fcmVpbml0X3N1Ym1vZHVsZV9mcywgTlVMTCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQgcmVwb193cml0ZV90ZW1wbGF0ZSgKIAljb25zdCBjaGFyICpnaXRfZGlyLAogCWJvb2wgYWxsb3dfb3ZlcndyaXRlLApAQCAtMTEzMSwzMSArMTI2NiwzNCBAQAogCiAJLyogQ29weSBleHRlcm5hbCB0ZW1wbGF0ZSBpZiByZXF1ZXN0ZWQgKi8KIAlpZiAoZXh0ZXJuYWxfdHBsKSB7Ci0JCWdpdF9jb25maWcgKmNmZzsKLQkJY29uc3QgY2hhciAqdGRpcjsKKwkJZ2l0X2NvbmZpZyAqY2ZnID0gTlVMTDsKKwkJY29uc3QgY2hhciAqdGRpciA9IE5VTEw7CisJCWJvb2wgZGVmYXVsdF90ZW1wbGF0ZSA9IGZhbHNlOworCQlnaXRfYnVmIHRlbXBsYXRlX2J1ZiA9IEdJVF9CVUZfSU5JVDsKIAogCQlpZiAob3B0cy0+dGVtcGxhdGVfcGF0aCkKIAkJCXRkaXIgPSBvcHRzLT50ZW1wbGF0ZV9wYXRoOwotCQllbHNlIGlmICgoZXJyb3IgPSBnaXRfY29uZmlnX29wZW5fZGVmYXVsdCgmY2ZnKSkgPCAwKQotCQkJcmV0dXJuIGVycm9yOwotCQllbHNlIHsKKwkJZWxzZSBpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19vcGVuX2RlZmF1bHQoJmNmZykpID49IDApIHsKIAkJCWVycm9yID0gZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCZ0ZGlyLCBjZmcsICJpbml0LnRlbXBsYXRlZGlyIik7Ci0KLQkJCWdpdF9jb25maWdfZnJlZShjZmcpOwotCi0JCQlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKLQkJCQlyZXR1cm4gZXJyb3I7Ci0KIAkJCWdpdGVycl9jbGVhcigpOwotCQkJdGRpciA9IEdJVF9URU1QTEFURV9ESVI7CiAJCX0KIAotCQllcnJvciA9IGdpdF9mdXRpbHNfY3Bfcih0ZGlyLCByZXBvX2RpciwKLQkJCUdJVF9DUERJUl9DT1BZX1NZTUxJTktTIHwgR0lUX0NQRElSX0NITU9EX0RJUlMgfAotCQkJR0lUX0NQRElSX1NJTVBMRV9UT19NT0RFLCBkbW9kZSk7CisJCWlmICghdGRpcikgeworCQkJaWYgKCEoZXJyb3IgPSBnaXRfZnV0aWxzX2ZpbmRfdGVtcGxhdGVfZGlyKCZ0ZW1wbGF0ZV9idWYpKSkKKwkJCQl0ZGlyID0gdGVtcGxhdGVfYnVmLnB0cjsKKwkJCWRlZmF1bHRfdGVtcGxhdGUgPSB0cnVlOworCQl9CisKKwkJaWYgKHRkaXIpCisJCQllcnJvciA9IGdpdF9mdXRpbHNfY3Bfcih0ZGlyLCByZXBvX2RpciwKKwkJCQlHSVRfQ1BESVJfQ09QWV9TWU1MSU5LUyB8IEdJVF9DUERJUl9DSE1PRF9ESVJTIHwKKwkJCQlHSVRfQ1BESVJfU0lNUExFX1RPX01PREUsIGRtb2RlKTsKKworCQlnaXRfYnVmX2ZyZWUoJnRlbXBsYXRlX2J1Zik7CisJCWdpdF9jb25maWdfZnJlZShjZmcpOwogCiAJCWlmIChlcnJvciA8IDApIHsKLQkJCWlmIChzdHJjbXAodGRpciwgR0lUX1RFTVBMQVRFX0RJUikgIT0gMCkKKwkJCWlmICghZGVmYXVsdF90ZW1wbGF0ZSkKIAkJCQlyZXR1cm4gZXJyb3I7CiAKIAkJCS8qIGlmIHRlbXBsYXRlIHdhcyBkZWZhdWx0LCBpZ25vcmUgZXJyb3IgYW5kIHVzZSBpbnRlcm5hbCAqLwpAQCAtMTM4MiwyMiArMTUyMCwyMiBAQAogCQlvcHRzLT5mbGFncyB8PSBHSVRfUkVQT1NJVE9SWV9JTklUX19JU19SRUlOSVQ7CiAKIAkJZXJyb3IgPSByZXBvX2luaXRfY29uZmlnKAotCQkJZ2l0X2J1Zl9jc3RyKCZyZXBvX3BhdGgpLCBnaXRfYnVmX2NzdHIoJndkX3BhdGgpLCBvcHRzKTsKKwkJCXJlcG9fcGF0aC5wdHIsIHdkX3BhdGgucHRyLCBvcHRzLT5mbGFncywgb3B0cy0+bW9kZSk7CiAKIAkJLyogVE9ETzogcmVpbml0aWFsaXplIHRoZSB0ZW1wbGF0ZXMgKi8KIAl9CiAJZWxzZSB7CiAJCWlmICghKGVycm9yID0gcmVwb19pbml0X3N0cnVjdHVyZSgKLQkJCQlnaXRfYnVmX2NzdHIoJnJlcG9fcGF0aCksIGdpdF9idWZfY3N0cigmd2RfcGF0aCksIG9wdHMpKSAmJgorCQkJCXJlcG9fcGF0aC5wdHIsIHdkX3BhdGgucHRyLCBvcHRzKSkgJiYKIAkJCSEoZXJyb3IgPSByZXBvX2luaXRfY29uZmlnKAotCQkJCWdpdF9idWZfY3N0cigmcmVwb19wYXRoKSwgZ2l0X2J1Zl9jc3RyKCZ3ZF9wYXRoKSwgb3B0cykpKQorCQkJCXJlcG9fcGF0aC5wdHIsIHdkX3BhdGgucHRyLCBvcHRzLT5mbGFncywgb3B0cy0+bW9kZSkpKQogCQkJZXJyb3IgPSByZXBvX2luaXRfY3JlYXRlX2hlYWQoCi0JCQkJZ2l0X2J1Zl9jc3RyKCZyZXBvX3BhdGgpLCBvcHRzLT5pbml0aWFsX2hlYWQpOworCQkJCXJlcG9fcGF0aC5wdHIsIG9wdHMtPmluaXRpYWxfaGVhZCk7CiAJfQogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCWVycm9yID0gZ2l0X3JlcG9zaXRvcnlfb3BlbihvdXQsIGdpdF9idWZfY3N0cigmcmVwb19wYXRoKSk7CisJZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9vcGVuKG91dCwgcmVwb19wYXRoLnB0cik7CiAKIAlpZiAoIWVycm9yICYmIG9wdHMtPm9yaWdpbl91cmwpCiAJCWVycm9yID0gcmVwb19pbml0X2NyZWF0ZV9vcmlnaW4oKm91dCwgb3B0cy0+b3JpZ2luX3VybCk7CkBAIC0xNDQ4LDEwICsxNTg2LDEwIEBACiAJZXJyb3IgPSBnaXRfcmVmZXJlbmNlX2xvb2t1cF9yZXNvbHZlZChoZWFkX291dCwgcmVwbywgZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY190YXJnZXQoaGVhZCksIC0xKTsKIAlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CiAKLQlyZXR1cm4gZXJyb3IgPT0gR0lUX0VOT1RGT1VORCA/IEdJVF9FT1JQSEFORURIRUFEIDogZXJyb3I7CisJcmV0dXJuIGVycm9yID09IEdJVF9FTk9URk9VTkQgPyBHSVRfRVVOQk9STkJSQU5DSCA6IGVycm9yOwogfQogCi1pbnQgZ2l0X3JlcG9zaXRvcnlfaGVhZF9vcnBoYW4oZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCitpbnQgZ2l0X3JlcG9zaXRvcnlfaGVhZF91bmJvcm4oZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCiB7CiAJZ2l0X3JlZmVyZW5jZSAqcmVmID0gTlVMTDsKIAlpbnQgZXJyb3I7CkBAIC0xNDU5LDcgKzE1OTcsNyBAQAogCWVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaGVhZCgmcmVmLCByZXBvKTsKIAlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKIAotCWlmIChlcnJvciA9PSBHSVRfRU9SUEhBTkVESEVBRCkKKwlpZiAoZXJyb3IgPT0gR0lUX0VVTkJPUk5CUkFOQ0gpCiAJCXJldHVybiAxOwogCiAJaWYgKGVycm9yIDwgMCkKQEAgLTE0OTIsMjQgKzE2MzAsMjAgQEAKIGludCBnaXRfcmVwb3NpdG9yeV9pc19lbXB0eShnaXRfcmVwb3NpdG9yeSAqcmVwbykKIHsKIAlnaXRfcmVmZXJlbmNlICpoZWFkID0gTlVMTDsKLQlpbnQgZXJyb3I7CisJaW50IGlzX2VtcHR5ID0gMDsKIAogCWlmIChnaXRfcmVmZXJlbmNlX2xvb2t1cCgmaGVhZCwgcmVwbywgR0lUX0hFQURfRklMRSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoIShlcnJvciA9IGdpdF9yZWZlcmVuY2VfdHlwZShoZWFkKSA9PSBHSVRfUkVGX1NZTUJPTElDKSkKLQkJZ290byBjbGVhbnVwOworCWlmIChnaXRfcmVmZXJlbmNlX3R5cGUoaGVhZCkgPT0gR0lUX1JFRl9TWU1CT0xJQykKKwkJaXNfZW1wdHkgPQorCQkJKHN0cmNtcChnaXRfcmVmZXJlbmNlX3N5bWJvbGljX3RhcmdldChoZWFkKSwKKwkJCQkJR0lUX1JFRlNfSEVBRFNfRElSICJtYXN0ZXIiKSA9PSAwKSAmJgorCQkJcmVwb19jb250YWluc19ub19yZWZlcmVuY2UocmVwbyk7CiAKLQlpZiAoIShlcnJvciA9IHN0cmNtcCgKLQkJZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY190YXJnZXQoaGVhZCksCi0JCUdJVF9SRUZTX0hFQURTX0RJUiAibWFzdGVyIikgPT0gMCkpCi0JCQlnb3RvIGNsZWFudXA7Ci0KLQllcnJvciA9IHJlcG9fY29udGFpbnNfbm9fcmVmZXJlbmNlKHJlcG8pOwotCi1jbGVhbnVwOgogCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKLQlyZXR1cm4gZXJyb3IgPCAwID8gLTEgOiBlcnJvcjsKKworCXJldHVybiBpc19lbXB0eTsKIH0KIAogY29uc3QgY2hhciAqZ2l0X3JlcG9zaXRvcnlfcGF0aChnaXRfcmVwb3NpdG9yeSAqcmVwbykKQEAgLTE2NTAsNyArMTc4NCw3IEBACiAJY29uc3QgY2hhciAqYXNfcGF0aCkKIHsKIAlpbnQgZXJyb3I7Ci0JZ2l0X3ZlY3RvciBmaWx0ZXJzID0gR0lUX1ZFQ1RPUl9JTklUOworCWdpdF9maWx0ZXJfbGlzdCAqZmwgPSBOVUxMOwogCWdpdF9maWxlIGZkID0gLTE7CiAJZ2l0X29mZl90IGxlbjsKIAlnaXRfYnVmIGZ1bGxfcGF0aCA9IEdJVF9CVUZfSU5JVDsKQEAgLTE2NzIsNyArMTgwNiw4IEBACiAKIAkvKiBwYXNzaW5nIGVtcHR5IHN0cmluZyBmb3IgImFzX3BhdGgiIGluZGljYXRlZCAtLW5vLWZpbHRlcnMgKi8KIAlpZiAoc3RybGVuKGFzX3BhdGgpID4gMCkgewotCQllcnJvciA9IGdpdF9maWx0ZXJzX2xvYWQoJmZpbHRlcnMsIHJlcG8sIGFzX3BhdGgsIEdJVF9GSUxURVJfVE9fT0RCKTsKKwkJZXJyb3IgPSBnaXRfZmlsdGVyX2xpc3RfbG9hZCgKKwkJCSZmbCwgcmVwbywgTlVMTCwgYXNfcGF0aCwgR0lUX0ZJTFRFUl9UT19PREIpOwogCQlpZiAoZXJyb3IgPCAwKQogCQkJcmV0dXJuIGVycm9yOwogCX0gZWxzZSB7CkBAIC0xNjk5LDEyICsxODM0LDEyIEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQllcnJvciA9IGdpdF9vZGJfX2hhc2hmZF9maWx0ZXJlZChvdXQsIGZkLCAoc2l6ZV90KWxlbiwgdHlwZSwgJmZpbHRlcnMpOworCWVycm9yID0gZ2l0X29kYl9faGFzaGZkX2ZpbHRlcmVkKG91dCwgZmQsIChzaXplX3QpbGVuLCB0eXBlLCBmbCk7CiAKIGNsZWFudXA6CiAJaWYgKGZkID49IDApCiAJCXBfY2xvc2UoZmQpOwotCWdpdF9maWx0ZXJzX2ZyZWUoJmZpbHRlcnMpOworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKIAlnaXRfYnVmX2ZyZWUoJmZ1bGxfcGF0aCk7CiAKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvcmVwb3NpdG9yeS5oIGIvc3JjL3JlcG9zaXRvcnkuaAppbmRleCAxMmRjNTBkLi44MzJkZjNiIDEwMDY0NAotLS0gYS9zcmMvcmVwb3NpdG9yeS5oCisrKyBiL3NyYy9yZXBvc2l0b3J5LmgKQEAgLTM3LDYgKzM3LDcgQEAKIAlHSVRfQ1ZBUl9JR05PUkVTVEFULCAgICAvKiBjb3JlLmlnbm9yZXN0YXQgKi8KIAlHSVRfQ1ZBUl9UUlVTVENUSU1FLCAgICAvKiBjb3JlLnRydXN0Y3RpbWUgKi8KIAlHSVRfQ1ZBUl9BQkJSRVYsICAgICAgICAvKiBjb3JlLmFiYnJldiAqLworCUdJVF9DVkFSX1BSRUNPTVBPU0UsICAgIC8qIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgKi8KIAlHSVRfQ1ZBUl9DQUNIRV9NQVgKIH0gZ2l0X2N2YXJfY2FjaGVkOwogCkBAIC04Niw2ICs4Nyw4IEBACiAJR0lUX1RSVVNUQ1RJTUVfREVGQVVMVCA9IEdJVF9DVkFSX1RSVUUsCiAJLyogY29yZS5hYmJyZXYgKi8KIAlHSVRfQUJCUkVWX0RFRkFVTFQgPSA3LAorCS8qIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgKi8KKwlHSVRfUFJFQ09NUE9TRV9ERUZBVUxUID0gR0lUX0NWQVJfRkFMU0UsCiAKIH0gZ2l0X2N2YXJfdmFsdWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9yZXNldC5jIGIvc3JjL3Jlc2V0LmMKaW5kZXggY2VhMjEyYS4uYTk3ODBiZiAxMDA2NDQKLS0tIGEvc3JjL3Jlc2V0LmMKKysrIGIvc3JjL3Jlc2V0LmMKQEAgLTI0LDEwICsyNCw5IEBACiB7CiAJZ2l0X29iamVjdCAqY29tbWl0ID0gTlVMTDsKIAlnaXRfdHJlZSAqdHJlZSA9IE5VTEw7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlzaXplX3QgaTsKLQlnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CisJc2l6ZV90IGksIG1heF9pOwogCWdpdF9pbmRleF9lbnRyeSBlbnRyeTsKIAlpbnQgZXJyb3I7CiAJZ2l0X2luZGV4ICppbmRleCA9IE5VTEw7CkBAIC01OCw3ICs1Nyw5IEBACiAJCSZkaWZmLCByZXBvLCB0cmVlLCBpbmRleCwgJm9wdHMpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAKLQlnaXRfdmVjdG9yX2ZvcmVhY2goJmRpZmYtPmRlbHRhcywgaSwgZGVsdGEpIHsKKwlmb3IgKGkgPSAwLCBtYXhfaSA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7IGkgPCBtYXhfaTsgKytpKSB7CisJCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSA9IGdpdF9kaWZmX2dldF9kZWx0YShkaWZmLCBpKTsKKwogCQlpZiAoKGVycm9yID0gZ2l0X2luZGV4X2NvbmZsaWN0X3JlbW92ZShpbmRleCwgZGVsdGEtPm9sZF9maWxlLnBhdGgpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAKQEAgLTg1LDcgKzg2LDcgQEAKIAlnaXRfb2JqZWN0X2ZyZWUoY29tbWl0KTsKIAlnaXRfdHJlZV9mcmVlKHRyZWUpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEzNSw3ICsxMzYsNyBAQAogCiAJaWYgKHJlc2V0X3R5cGUgPT0gR0lUX1JFU0VUX0hBUkQpIHsKIAkJLyogb3ZlcndyaXRlIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggSEVBRCAqLwotCQlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCQlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFIHwgR0lUX0NIRUNLT1VUX1NLSVBfVU5NRVJHRUQ7CiAKIAkJaWYgKChlcnJvciA9IGdpdF9jaGVja291dF90cmVlKHJlcG8sIChnaXRfb2JqZWN0ICopdHJlZSwgJm9wdHMpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CmRpZmYgLS1naXQgYS9zcmMvcmV2cGFyc2UuYyBiL3NyYy9yZXZwYXJzZS5jCmluZGV4IGJjZmIwODQuLmMxMjBiNDYgMTAwNjQ0Ci0tLSBhL3NyYy9yZXZwYXJzZS5jCisrKyBiL3NyYy9yZXZwYXJzZS5jCkBAIC05MywxMSArOTMsNyBAQAogCWludCBlcnJvcjsKIAlnaXRfcmVmZXJlbmNlICpyZWY7CiAKLQllcnJvciA9IG1heWJlX3NoYShvYmplY3Rfb3V0LCByZXBvLCBzcGVjKTsKLQlpZiAoIWVycm9yKQotCQlyZXR1cm4gMDsKLQotCWlmIChlcnJvciA8IDAgJiYgZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKKwlpZiAoKGVycm9yID0gbWF5YmVfc2hhKG9iamVjdF9vdXQsIHJlcG8sIHNwZWMpKSAhPSBHSVRfRU5PVEZPVU5EKQogCQlyZXR1cm4gZXJyb3I7CiAKIAllcnJvciA9IGdpdF9yZWZlcmVuY2VfZHdpbSgmcmVmLCByZXBvLCBzcGVjKTsKQEAgLTExMiwyNCArMTA4LDE3IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoZXJyb3IgPCAwICYmIGVycm9yICE9IEdJVF9FTk9URk9VTkQpCisJaWYgKGVycm9yICE9IEdJVF9FTk9URk9VTkQpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gbWF5YmVfYWJicmV2KG9iamVjdF9vdXQsIHJlcG8sIHNwZWMpOwotCWlmICghZXJyb3IpCi0JCXJldHVybiAwOworCWlmICgoc3RybGVuKHNwZWMpIDwgR0lUX09JRF9IRVhTWikgJiYKKwkJKChlcnJvciA9IG1heWJlX2FiYnJldihvYmplY3Rfb3V0LCByZXBvLCBzcGVjKSkgIT0gR0lUX0VOT1RGT1VORCkpCisJCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAoZXJyb3IgPCAwICYmIGVycm9yICE9IEdJVF9FTk9URk9VTkQpCisJaWYgKChlcnJvciA9IG1heWJlX2Rlc2NyaWJlKG9iamVjdF9vdXQsIHJlcG8sIHNwZWMpKSAhPSBHSVRfRU5PVEZPVU5EKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IG1heWJlX2Rlc2NyaWJlKG9iamVjdF9vdXQsIHJlcG8sIHNwZWMpOwotCWlmICghZXJyb3IpCi0JCXJldHVybiAwOwotCi0JaWYgKGVycm9yIDwgMCAmJiBlcnJvciAhPSBHSVRfRU5PVEZPVU5EKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJSZWZzcGVjICclcycgbm90IGZvdW5kLiIsIHNwZWMpOworCWdpdGVycl9zZXQoR0lURVJSX1JFRkVSRU5DRSwgIlJldnNwZWMgJyVzJyBub3QgZm91bmQuIiwgc3BlYyk7CiAJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiB9CiAKQEAgLTE3MSw3ICsxNjAsNyBAQAogCWlmIChnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCByZXBvLCBHSVRfSEVBRF9GSUxFKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmIChnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgcmVmKSA8IDApCisJaWYgKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCByZXBvLCBHSVRfSEVBRF9GSUxFKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAogCW51bWVudHJpZXMgID0gZ2l0X3JlZmxvZ19lbnRyeWNvdW50KHJlZmxvZyk7CkBAIC0yMTksNyArMjA4LDcgQEAKIAljb25zdCBnaXRfcmVmbG9nX2VudHJ5ICplbnRyeTsKIAlib29sIHNlYXJjaF9ieV9wb3MgPSAoaWRlbnRpZmllciA8PSAxMDAwMDAwMDApOwogCi0JaWYgKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCByZWYpIDwgMCkKKwlpZiAoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIGdpdF9yZWZlcmVuY2Vfb3duZXIocmVmKSwgZ2l0X3JlZmVyZW5jZV9uYW1lKHJlZikpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJbnVtZW50cmllcyA9IGdpdF9yZWZsb2dfZW50cnljb3VudChyZWZsb2cpOwpAQCAtMjI4LDcgKzIxNyw3IEBACiAJCWlmIChudW1lbnRyaWVzIDwgaWRlbnRpZmllciArIDEpIHsKIAkJCWdpdGVycl9zZXQoCiAJCQkJR0lURVJSX1JFRkVSRU5DRSwKLQkJCQkiUmVmbG9nIGZvciAnJXMnIGhhcyBvbmx5ICJQUkl1WiIgZW50cmllcywgYXNrZWQgZm9yICJQUkl1WiwKKwkJCQkiUmVmbG9nIGZvciAnJXMnIGhhcyBvbmx5ICUiUFJJdVoiIGVudHJpZXMsIGFza2VkIGZvciAlIlBSSXVaLAogCQkJCWdpdF9yZWZlcmVuY2VfbmFtZShyZWYpLCBudW1lbnRyaWVzLCBpZGVudGlmaWVyKTsKIAogCQkJZXJyb3IgPSBHSVRfRU5PVEZPVU5EOwpAQCAtNjg1LDYgKzY3NCw4IEBACiAJZ2l0X3JlZmVyZW5jZSAqcmVmZXJlbmNlID0gTlVMTDsKIAlnaXRfb2JqZWN0ICpiYXNlX3JldiA9IE5VTEw7CiAKKwlib29sIHNob3VsZF9yZXR1cm5fcmVmZXJlbmNlID0gdHJ1ZTsKKwogCWFzc2VydChvYmplY3Rfb3V0ICYmIHJlZmVyZW5jZV9vdXQgJiYgcmVwbyAmJiBzcGVjKTsKIAogCSpvYmplY3Rfb3V0ID0gTlVMTDsKQEAgLTY5Myw2ICs2ODQsOCBAQAogCXdoaWxlIChzcGVjW3Bvc10pIHsKIAkJc3dpdGNoIChzcGVjW3Bvc10pIHsKIAkJY2FzZSAnXic6CisJCQlzaG91bGRfcmV0dXJuX3JlZmVyZW5jZSA9IGZhbHNlOworCiAJCQlpZiAoKGVycm9yID0gZW5zdXJlX2Jhc2VfcmV2X2xvYWRlZCgmYmFzZV9yZXYsICZyZWZlcmVuY2UsIHNwZWMsIGlkZW50aWZpZXJfbGVuLCByZXBvLCBmYWxzZSkpIDwgMCkKIAkJCQlnb3RvIGNsZWFudXA7CiAKQEAgLTcyNSw2ICs3MTgsOCBAQAogCQl7CiAJCQlnaXRfb2JqZWN0ICp0ZW1wX29iamVjdCA9IE5VTEw7CiAKKwkJCXNob3VsZF9yZXR1cm5fcmVmZXJlbmNlID0gZmFsc2U7CisKIAkJCWlmICgoZXJyb3IgPSBleHRyYWN0X2hvd19tYW55KCZuLCBzcGVjLCAmcG9zKSkgPCAwKQogCQkJCWdvdG8gY2xlYW51cDsKIApAQCAtNzQzLDYgKzczOCw4IEBACiAJCXsKIAkJCWdpdF9vYmplY3QgKnRlbXBfb2JqZWN0ID0gTlVMTDsKIAorCQkJc2hvdWxkX3JldHVybl9yZWZlcmVuY2UgPSBmYWxzZTsKKwogCQkJaWYgKChlcnJvciA9IGV4dHJhY3RfcGF0aCgmYnVmLCBzcGVjLCAmcG9zKSkgPCAwKQogCQkJCWdvdG8gY2xlYW51cDsKIApAQCAtODA3LDYgKzgwNCwxMSBAQAogCWlmICgoZXJyb3IgPSBlbnN1cmVfYmFzZV9yZXZfbG9hZGVkKCZiYXNlX3JldiwgJnJlZmVyZW5jZSwgc3BlYywgaWRlbnRpZmllcl9sZW4sIHJlcG8sIGZhbHNlKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKKwlpZiAoIXNob3VsZF9yZXR1cm5fcmVmZXJlbmNlKSB7CisJCWdpdF9yZWZlcmVuY2VfZnJlZShyZWZlcmVuY2UpOworCQlyZWZlcmVuY2UgPSBOVUxMOworCX0KKwogCSpvYmplY3Rfb3V0ID0gYmFzZV9yZXY7CiAJKnJlZmVyZW5jZV9vdXQgPSByZWZlcmVuY2U7CiAJKmlkZW50aWZpZXJfbGVuX291dCA9IGlkZW50aWZpZXJfbGVuOwpAQCAtODk5LDEzICs5MDEsOSBAQAogCQkJcnN0cisrOwogCQl9CiAKLQkJaWYgKChlcnJvciA9IGdpdF9yZXZwYXJzZV9zaW5nbGUoJnJldnNwZWMtPmZyb20sIHJlcG8sIGxzdHIpKSA8IDApIHsKLQkJCXJldHVybiBlcnJvcjsKLQkJfQotCi0JCWlmICgoZXJyb3IgPSBnaXRfcmV2cGFyc2Vfc2luZ2xlKCZyZXZzcGVjLT50bywgcmVwbywgcnN0cikpIDwgMCkgewotCQkJcmV0dXJuIGVycm9yOwotCQl9CisJCWVycm9yID0gZ2l0X3JldnBhcnNlX3NpbmdsZSgmcmV2c3BlYy0+ZnJvbSwgcmVwbywgbHN0cik7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGdpdF9yZXZwYXJzZV9zaW5nbGUoJnJldnNwZWMtPnRvLCByZXBvLCByc3RyKTsKIAogCQlnaXRfX2ZyZWUoKHZvaWQqKWxzdHIpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvcmV2d2Fsay5jIGIvc3JjL3JldndhbGsuYwppbmRleCA1MjhkMDJiLi4zZGQxNGI0IDEwMDY0NAotLS0gYS9zcmMvcmV2d2Fsay5jCisrKyBiL3NyYy9yZXZ3YWxrLmMKQEAgLTE0LDggKzE0LDYgQEAKICNpbmNsdWRlICJnaXQyL3JldnBhcnNlLmgiCiAjaW5jbHVkZSAibWVyZ2UuaCIKIAotI2luY2x1ZGUgPHJlZ2V4Lmg+Ci0KIGdpdF9jb21taXRfbGlzdF9ub2RlICpnaXRfcmV2d2Fsa19fY29tbWl0X2xvb2t1cCgKIAlnaXRfcmV2d2FsayAqd2FsaywgY29uc3QgZ2l0X29pZCAqb2lkKQogewpAQCAtNDEsMjggKzM5LDUwIEBACiAJcmV0dXJuIGNvbW1pdDsKIH0KIAotc3RhdGljIHZvaWQgbWFya191bmludGVyZXN0aW5nKGdpdF9jb21taXRfbGlzdF9ub2RlICpjb21taXQpCitzdGF0aWMgaW50IG1hcmtfdW5pbnRlcmVzdGluZyhnaXRfY29tbWl0X2xpc3Rfbm9kZSAqY29tbWl0KQogewogCXVuc2lnbmVkIHNob3J0IGk7CisJZ2l0X2FycmF5X3QoZ2l0X2NvbW1pdF9saXN0X25vZGUgKikgcGVuZGluZyA9IEdJVF9BUlJBWV9JTklUOworCWdpdF9jb21taXRfbGlzdF9ub2RlICoqdG1wOworCiAJYXNzZXJ0KGNvbW1pdCk7CiAKLQljb21taXQtPnVuaW50ZXJlc3RpbmcgPSAxOworCWdpdF9hcnJheV9hbGxvYyhwZW5kaW5nKTsKKwlHSVRFUlJfQ0hFQ0tfQVJSQVkocGVuZGluZyk7CiAKLQkvKiBUaGlzIG1lYW5zIHdlJ3ZlIHJlYWNoZWQgYSBtZXJnZSBiYXNlLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gd2FsayBhbnkgbW9yZSAqLwotCWlmICgoY29tbWl0LT5mbGFncyAmIChSRVNVTFQgfCBTVEFMRSkpID09IFJFU1VMVCkKLQkJcmV0dXJuOworCWRvIHsKKwkJY29tbWl0LT51bmludGVyZXN0aW5nID0gMTsKIAotCWZvciAoaSA9IDA7IGkgPCBjb21taXQtPm91dF9kZWdyZWU7ICsraSkKLQkJaWYgKCFjb21taXQtPnBhcmVudHNbaV0tPnVuaW50ZXJlc3RpbmcpCi0JCQltYXJrX3VuaW50ZXJlc3RpbmcoY29tbWl0LT5wYXJlbnRzW2ldKTsKKwkJLyogVGhpcyBtZWFucyB3ZSd2ZSByZWFjaGVkIGEgbWVyZ2UgYmFzZSwgc28gdGhlcmUncyBubyBuZWVkIHRvIHdhbGsgYW55IG1vcmUgKi8KKwkJaWYgKChjb21taXQtPmZsYWdzICYgKFJFU1VMVCB8IFNUQUxFKSkgPT0gUkVTVUxUKSB7CisJCQl0bXAgPSBnaXRfYXJyYXlfcG9wKHBlbmRpbmcpOworCQkJY29tbWl0ID0gdG1wID8gKnRtcCA6IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjb21taXQtPm91dF9kZWdyZWU7ICsraSkKKwkJCWlmICghY29tbWl0LT5wYXJlbnRzW2ldLT51bmludGVyZXN0aW5nKSB7CisJCQkJZ2l0X2NvbW1pdF9saXN0X25vZGUgKipub2RlID0gZ2l0X2FycmF5X2FsbG9jKHBlbmRpbmcpOworCQkJCUdJVEVSUl9DSEVDS19BTExPQyhub2RlKTsKKwkJCQkqbm9kZSA9IGNvbW1pdC0+cGFyZW50c1tpXTsKKwkJCX0KKworCQl0bXAgPSBnaXRfYXJyYXlfcG9wKHBlbmRpbmcpOworCQljb21taXQgPSB0bXAgPyAqdG1wIDogTlVMTDsKKworCX0gd2hpbGUgKGdpdF9hcnJheV9zaXplKHBlbmRpbmcpID4gMCk7CisKKwlnaXRfYXJyYXlfY2xlYXIocGVuZGluZyk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwcm9jZXNzX2NvbW1pdChnaXRfcmV2d2FsayAqd2FsaywgZ2l0X2NvbW1pdF9saXN0X25vZGUgKmNvbW1pdCwgaW50IGhpZGUpCiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGhpZGUpCi0JCW1hcmtfdW5pbnRlcmVzdGluZyhjb21taXQpOworCWlmIChoaWRlICYmIG1hcmtfdW5pbnRlcmVzdGluZyhjb21taXQpIDwgMCkKKwkJcmV0dXJuIC0xOwogCiAJaWYgKGNvbW1pdC0+c2VlbikKIAkJcmV0dXJuIDA7CkBAIC03NywxMCArOTcsMTQgQEAKIAogc3RhdGljIGludCBwcm9jZXNzX2NvbW1pdF9wYXJlbnRzKGdpdF9yZXZ3YWxrICp3YWxrLCBnaXRfY29tbWl0X2xpc3Rfbm9kZSAqY29tbWl0KQogewotCXVuc2lnbmVkIHNob3J0IGk7CisJdW5zaWduZWQgc2hvcnQgaSwgbWF4OwogCWludCBlcnJvciA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY29tbWl0LT5vdXRfZGVncmVlICYmICFlcnJvcjsgKytpKQorCW1heCA9IGNvbW1pdC0+b3V0X2RlZ3JlZTsKKwlpZiAod2Fsay0+Zmlyc3RfcGFyZW50ICYmIGNvbW1pdC0+b3V0X2RlZ3JlZSkKKwkJbWF4ID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBtYXggJiYgIWVycm9yOyArK2kpCiAJCWVycm9yID0gcHJvY2Vzc19jb21taXQod2FsaywgY29tbWl0LT5wYXJlbnRzW2ldLCBjb21taXQtPnVuaW50ZXJlc3RpbmcpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtMTU1LDQ4ICsxNzksMzUgQEAKIAogc3RhdGljIGludCBwdXNoX2dsb2IoZ2l0X3JldndhbGsgKndhbGssIGNvbnN0IGNoYXIgKmdsb2IsIGludCBoaWRlKQogeworCWludCBlcnJvciA9IDA7CiAJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CiAJc3RydWN0IHB1c2hfY2JfZGF0YSBkYXRhOwotCXJlZ2V4X3QgcHJlZzsKKwlzaXplX3Qgd2lsZGNhcmQ7CiAKIAlhc3NlcnQod2FsayAmJiBnbG9iKTsKIAogCS8qIHJlZnMvIGlzIGltcGxpZWQgaWYgbm90IGdpdmVuIGluIHRoZSBnbG9iICovCi0JaWYgKHN0cm5jbXAoZ2xvYiwgR0lUX1JFRlNfRElSLCBzdHJsZW4oR0lUX1JFRlNfRElSKSkpIHsKLQkJZ2l0X2J1Zl9wcmludGYoJmJ1ZiwgR0lUX1JFRlNfRElSICIlcyIsIGdsb2IpOwotCX0gZWxzZSB7CisJaWYgKGdpdF9fcHJlZml4Y21wKGdsb2IsIEdJVF9SRUZTX0RJUikgIT0gMCkKKwkJZ2l0X2J1Zl9qb2lucGF0aCgmYnVmLCBHSVRfUkVGU19ESVIsIGdsb2IpOworCWVsc2UKIAkJZ2l0X2J1Zl9wdXRzKCZidWYsIGdsb2IpOwotCX0KIAogCS8qIElmIG5vICc/JywgJyonIG9yICdbJyBleGlzdCwgd2UgYXBwZW5kICcvIConIHRvIHRoZSBnbG9iICovCi0JbWVtc2V0KCZwcmVnLCAweDAsIHNpemVvZihyZWdleF90KSk7Ci0JaWYgKHJlZ2NvbXAoJnByZWcsICJbPypbXSIsIFJFR19FWFRFTkRFRCkpIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJSZWdleCBmYWlsZWQgdG8gY29tcGlsZSIpOwotCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAocmVnZXhlYygmcHJlZywgZ2xvYiwgMCwgTlVMTCwgMCkpCi0JCWdpdF9idWZfcHV0cygmYnVmLCAiLyoiKTsKLQotCWlmIChnaXRfYnVmX29vbSgmYnVmKSkKLQkJZ290byBvbl9lcnJvcjsKKwl3aWxkY2FyZCA9IHN0cmNzcG4oZ2xvYiwgIj8qWyIpOworCWlmICghZ2xvYlt3aWxkY2FyZF0pCisJCWdpdF9idWZfcHV0KCZidWYsICIvKiIsIDIpOwogCiAJZGF0YS53YWxrID0gd2FsazsKIAlkYXRhLmhpZGUgPSBoaWRlOwogCi0JaWYgKGdpdF9yZWZlcmVuY2VfZm9yZWFjaF9nbG9iKAotCQl3YWxrLT5yZXBvLCBnaXRfYnVmX2NzdHIoJmJ1ZiksIHB1c2hfZ2xvYl9jYiwgJmRhdGEpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKKwlpZiAoZ2l0X2J1Zl9vb20oJmJ1ZikpCisJCWVycm9yID0gLTE7CisJZWxzZQorCQllcnJvciA9IGdpdF9yZWZlcmVuY2VfZm9yZWFjaF9nbG9iKAorCQkJd2Fsay0+cmVwbywgZ2l0X2J1Zl9jc3RyKCZidWYpLCBwdXNoX2dsb2JfY2IsICZkYXRhKTsKIAotCXJlZ2ZyZWUoJnByZWcpOwogCWdpdF9idWZfZnJlZSgmYnVmKTsKLQlyZXR1cm4gMDsKLQotb25fZXJyb3I6Ci0JcmVnZnJlZSgmcHJlZyk7Ci0JZ2l0X2J1Zl9mcmVlKCZidWYpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBnaXRfcmV2d2Fsa19wdXNoX2dsb2IoZ2l0X3JldndhbGsgKndhbGssIGNvbnN0IGNoYXIgKmdsb2IpCkBAIC0zMTEsNyArMzIyLDcgQEAKIHN0YXRpYyBpbnQgcmV2d2Fsa19uZXh0X3RvcG9zb3J0KGdpdF9jb21taXRfbGlzdF9ub2RlICoqb2JqZWN0X291dCwgZ2l0X3JldndhbGsgKndhbGspCiB7CiAJZ2l0X2NvbW1pdF9saXN0X25vZGUgKm5leHQ7Ci0JdW5zaWduZWQgc2hvcnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBpLCBtYXg7CiAKIAlmb3IgKDs7KSB7CiAJCW5leHQgPSBnaXRfY29tbWl0X2xpc3RfcG9wKCZ3YWxrLT5pdGVyYXRvcl90b3BvKTsKQEAgLTMyNSw3ICszMzYsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IG5leHQtPm91dF9kZWdyZWU7ICsraSkgeworCisJCW1heCA9IG5leHQtPm91dF9kZWdyZWU7CisJCWlmICh3YWxrLT5maXJzdF9wYXJlbnQgJiYgbmV4dC0+b3V0X2RlZ3JlZSkKKwkJCW1heCA9IDE7CisKKwkJZm9yIChpID0gMDsgaSA8IG1heDsgKytpKSB7CiAJCQlnaXRfY29tbWl0X2xpc3Rfbm9kZSAqcGFyZW50ID0gbmV4dC0+cGFyZW50c1tpXTsKIAogCQkJaWYgKC0tcGFyZW50LT5pbl9kZWdyZWUgPT0gMCAmJiBwYXJlbnQtPnRvcG9fZGVsYXkpIHsKQEAgLTQ4Myw2ICs0OTksMTEgQEAKIAl9CiB9CiAKK3ZvaWQgZ2l0X3JldndhbGtfc2ltcGxpZnlfZmlyc3RfcGFyZW50KGdpdF9yZXZ3YWxrICp3YWxrKQoreworCXdhbGstPmZpcnN0X3BhcmVudCA9IDE7Cit9CisKIGludCBnaXRfcmV2d2Fsa19uZXh0KGdpdF9vaWQgKm9pZCwgZ2l0X3JldndhbGsgKndhbGspCiB7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEvc3JjL3JldndhbGsuaCBiL3NyYy9yZXZ3YWxrLmgKaW5kZXggMjI2OTZkZi4uOGM4MjFkMCAxMDA2NDQKLS0tIGEvc3JjL3JldndhbGsuaAorKysgYi9zcmMvcmV2d2Fsay5oCkBAIC0zMSw3ICszMSw4IEBACiAJaW50ICgqZ2V0X25leHQpKGdpdF9jb21taXRfbGlzdF9ub2RlICoqLCBnaXRfcmV2d2FsayAqKTsKIAlpbnQgKCplbnF1ZXVlKShnaXRfcmV2d2FsayAqLCBnaXRfY29tbWl0X2xpc3Rfbm9kZSAqKTsKIAotCXVuc2lnbmVkIHdhbGtpbmc6MTsKKwl1bnNpZ25lZCB3YWxraW5nOjEsCisJCWZpcnN0X3BhcmVudDogMTsKIAl1bnNpZ25lZCBpbnQgc29ydGluZzsKIAogCS8qIG1lcmdlIGJhc2UgY2FsY3VsYXRpb24gKi8KZGlmZiAtLWdpdCBhL3NyYy9zaGExX2xvb2t1cC5jIGIvc3JjL3NoYTFfbG9va3VwLmMKaW5kZXggYjdlNjZjYy4uYzZiNTYxMyAxMDA2NDQKLS0tIGEvc3JjL3NoYTFfbG9va3VwLmMKKysrIGIvc3JjL3NoYTFfbG9va3VwLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlICJzaGExX2xvb2t1cC5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm9pZC5oIgogCiAvKgogICogQ29udmVudGlvbmFsIGJpbmFyeSBzZWFyY2ggbG9vcCBsb29rcyBsaWtlIHRoaXM6CkBAIC0xMDgsNyArMTA5LDU0IEBACiAJCQkgKiBieXRlIDAgdGhydSAob2ZzLTEpIGFyZSB0aGUgc2FtZSBiZXR3ZWVuCiAJCQkgKiBsbyBhbmQgaGk7IG9mcyBpcyB0aGUgZmlyc3QgYnl0ZSB0aGF0IGlzCiAJCQkgKiBkaWZmZXJlbnQuCisJCQkgKgorCQkJICogSWYgb2ZzPT0yMCwgdGhlbiBubyBieXRlcyBhcmUgZGlmZmVyZW50LAorCQkJICogbWVhbmluZyB3ZSBoYXZlIGVudHJpZXMgd2l0aCBkdXBsaWNhdGUKKwkJCSAqIGtleXMuIFdlIGtub3cgdGhhdCB3ZSBhcmUgaW4gYSBzb2xpZCBydW4KKwkJCSAqIG9mIHRoaXMgZW50cnkgKGJlY2F1c2UgdGhlIGVudHJpZXMgYXJlCisJCQkgKiBzb3J0ZWQsIGFuZCBvdXIgbG8gYW5kIGhpIGFyZSB0aGUgc2FtZSwKKwkJCSAqIHRoZXJlIGNhbiBiZSBub3RoaW5nIGJ1dCB0aGlzIHNpbmdsZSBrZXkKKwkJCSAqIGluIGJldHdlZW4pLiBTbyB3ZSBjYW4gc3RvcCB0aGUgc2VhcmNoLgorCQkJICogRWl0aGVyIG9uZSBvZiB0aGVzZSBlbnRyaWVzIGlzIGl0IChhbmQKKwkJCSAqIHdlIGRvIG5vdCBjYXJlIHdoaWNoKSwgb3Igd2UgZG8gbm90IGhhdmUKKwkJCSAqIGl0LgorCQkJICoKKwkJCSAqIEZ1cnRoZXJtb3JlLCB3ZSBrbm93IHRoYXQgb25lIG9mIG91cgorCQkJICogZW5kcG9pbnRzIG11c3QgYmUgdGhlIGVkZ2Ugb2YgdGhlIHJ1biBvZgorCQkJICogZHVwbGljYXRlcy4gRm9yIGV4YW1wbGUsIGdpdmVuIHRoaXMKKwkJCSAqIHNlcXVlbmNlOgorCQkJICoKKwkJCSAqICAgICBpZHggMCAxIDIgMyA0IDUKKwkJCSAqICAgICBrZXkgQSBDIEMgQyBDIEQKKwkJCSAqCisJCQkgKiBJZiB3ZSBhcmUgc2VhcmNoaW5nIGZvciAiQiIsIHdlIG1pZ2h0CisJCQkgKiBoaXQgdGhlIGR1cGxpY2F0ZSBydW4gYXQgbG89MSwgaGk9MworCQkJICogKGUuZy4sIGJ5IGZpcnN0IG1pPTMsIHRoZW4gbWk9MCkuIEJ1dCB3ZQorCQkJICogY2FuIG5ldmVyIGhhdmUgbG8gPiAxLCBiZWNhdXNlIEIgPCBDLgorCQkJICogVGhhdCBpcywgaWYgb3VyIGtleSBpcyBsZXNzIHRoYW4gdGhlCisJCQkgKiBydW4sIHdlIGtub3cgdGhhdCAibG8iIGlzIHRoZSBlZGdlLCBidXQKKwkJCSAqIHdlIGNhbiBzYXkgbm90aGluZyBvZiAiaGkiLiBTaW1pbGFybHksCisJCQkgKiBpZiBvdXIga2V5IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcnVuLCB3ZQorCQkJICoga25vdyB0aGF0ICJoaSIgaXMgdGhlIGVkZ2UsIGJ1dCB3ZSBjYW4KKwkJCSAqIHNheSBub3RoaW5nIG9mICJsbyIuCisJCQkgKgorCQkJICogVGhlcmVmb3JlIGlmIHdlIGRvIG5vdCBmaW5kIGl0LCB3ZSBhbHNvCisJCQkgKiBrbm93IHdoZXJlIGl0IHdvdWxkIGdvIGlmIGl0IGRpZCBleGlzdDoKKwkJCSAqIGp1c3Qgb24gdGhlIGZhciBzaWRlIG9mIHRoZSBlZGdlIHRoYXQgd2UKKwkJCSAqIGtub3cgYWJvdXQuCiAJCQkgKi8KKwkJCWlmIChvZnMgPT0gMjApIHsKKwkJCQltaSA9IGxvOworCQkJCW1pX2tleSA9IGJhc2UgKyBlbGVtX3NpemUgKiBtaSArIGtleV9vZmZzZXQ7CisJCQkJY21wID0gbWVtY21wKG1pX2tleSwga2V5LCAyMCk7CisJCQkJaWYgKCFjbXApCisJCQkJCXJldHVybiBtaTsKKwkJCQlpZiAoY21wIDwgMCkKKwkJCQkJcmV0dXJuIC0xIC0gaGk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gLTEgLSBsbzsKKwkJCX0KKwogCQkJaGl2ID0gaGlfa2V5W29mc18wXTsKIAkJCWlmIChvZnNfMCA8IDE5KQogCQkJCWhpdiA9IChoaXYgPDwgOCkgfCBoaV9rZXlbb2ZzXzArMV07CkBAIC0xNzYsMyArMjI0LDI2IEBACiAJfSB3aGlsZSAobG8gPCBoaSk7CiAJcmV0dXJuIC0oKGludClsbyktMTsKIH0KKworaW50IHNoYTFfcG9zaXRpb24oY29uc3Qgdm9pZCAqdGFibGUsCisJCQlzaXplX3Qgc3RyaWRlLAorCQkJdW5zaWduZWQgbG8sIHVuc2lnbmVkIGhpLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UgPSB0YWJsZTsKKworCWRvIHsKKwkJdW5zaWduZWQgbWkgPSAobG8gKyBoaSkgLyAyOworCQlpbnQgY21wID0gZ2l0X29pZF9faGFzaGNtcChiYXNlICsgbWkgKiBzdHJpZGUsIGtleSk7CisKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisKKwkJaWYgKGNtcCA+IDApCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pKzE7CisJfSB3aGlsZSAobG8gPCBoaSk7CisKKwlyZXR1cm4gLSgoaW50KWxvKS0xOworfQpkaWZmIC0tZ2l0IGEvc3JjL3NoYTFfbG9va3VwLmggYi9zcmMvc2hhMV9sb29rdXAuaAppbmRleCA5YTM1MzcyLi4zNzk5NjIwIDEwMDY0NAotLS0gYS9zcmMvc2hhMV9sb29rdXAuaAorKysgYi9zcmMvc2hhMV9sb29rdXAuaApAQCAtMTUsNCArMTUsOSBAQAogCQkJdW5zaWduZWQgbG8sIHVuc2lnbmVkIGhpLCB1bnNpZ25lZCBuciwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSk7CiAKK2ludCBzaGExX3Bvc2l0aW9uKGNvbnN0IHZvaWQgKnRhYmxlLAorCQkJc2l6ZV90IHN0cmlkZSwKKwkJCXVuc2lnbmVkIGxvLCB1bnNpZ25lZCBoaSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL3NpZ25hdHVyZS5jIGIvc3JjL3NpZ25hdHVyZS5jCmluZGV4IDBhMzRjY2YuLmVjNTFhNDIgMTAwNjQ0Ci0tLSBhL3NyYy9zaWduYXR1cmUuYworKysgYi9zcmMvc2lnbmF0dXJlLmMKQEAgLTc0LDcgKzc0LDcgQEAKIAkJZ2l0X3NpZ25hdHVyZV9mcmVlKHApOwogCQlyZXR1cm4gc2lnbmF0dXJlX2Vycm9yKCJTaWduYXR1cmUgY2Fubm90IGhhdmUgYW4gZW1wdHkgbmFtZSIpOwogCX0KLQkJCisKIAlwLT53aGVuLnRpbWUgPSB0aW1lOwogCXAtPndoZW4ub2Zmc2V0ID0gb2Zmc2V0OwogCkBAIC04NCw4ICs4NCwxMiBAQAogCiBnaXRfc2lnbmF0dXJlICpnaXRfc2lnbmF0dXJlX2R1cChjb25zdCBnaXRfc2lnbmF0dXJlICpzaWcpCiB7Ci0JZ2l0X3NpZ25hdHVyZSAqbmV3ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9zaWduYXR1cmUpKTsKKwlnaXRfc2lnbmF0dXJlICpuZXc7CiAKKwlpZiAoc2lnID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbmV3ID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9zaWduYXR1cmUpKTsKIAlpZiAobmV3ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMjksNiArMTMzLDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBnaXRfc2lnbmF0dXJlX2RlZmF1bHQoZ2l0X3NpZ25hdHVyZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCit7CisJaW50IGVycm9yOworCWdpdF9jb25maWcgKmNmZzsKKwljb25zdCBjaGFyICp1c2VyX25hbWUsICp1c2VyX2VtYWlsOworCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY2ZnLCByZXBvKSkgPCAwKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoIShlcnJvciA9IGdpdF9jb25maWdfZ2V0X3N0cmluZygmdXNlcl9uYW1lLCBjZmcsICJ1c2VyLm5hbWUiKSkgJiYKKwkJIShlcnJvciA9IGdpdF9jb25maWdfZ2V0X3N0cmluZygmdXNlcl9lbWFpbCwgY2ZnLCAidXNlci5lbWFpbCIpKSkKKwkJZXJyb3IgPSBnaXRfc2lnbmF0dXJlX25vdyhvdXQsIHVzZXJfbmFtZSwgdXNlcl9lbWFpbCk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGludCBnaXRfc2lnbmF0dXJlX19wYXJzZShnaXRfc2lnbmF0dXJlICpzaWcsIGNvbnN0IGNoYXIgKipidWZmZXJfb3V0LAogCQljb25zdCBjaGFyICpidWZmZXJfZW5kLCBjb25zdCBjaGFyICpoZWFkZXIsIGNoYXIgZW5kZXIpCiB7CmRpZmYgLS1naXQgYS9zcmMvc29ydGVkY2FjaGUuYyBiL3NyYy9zb3J0ZWRjYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NmU1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc29ydGVkY2FjaGUuYwpAQCAtMCwwICsxLDM4MCBAQAorI2luY2x1ZGUgInNvcnRlZGNhY2hlLmgiCisKK0dJVF9fVVNFX1NUUk1BUDsKKworaW50IGdpdF9zb3J0ZWRjYWNoZV9uZXcoCisJZ2l0X3NvcnRlZGNhY2hlICoqb3V0LAorCXNpemVfdCBpdGVtX3BhdGhfb2Zmc2V0LAorCWdpdF9zb3J0ZWRjYWNoZV9mcmVlX2l0ZW1fZm4gZnJlZV9pdGVtLAorCXZvaWQgKmZyZWVfaXRlbV9wYXlsb2FkLAorCWdpdF92ZWN0b3JfY21wIGl0ZW1fY21wLAorCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJZ2l0X3NvcnRlZGNhY2hlICpzYzsKKwlzaXplX3QgcGF0aGxlbjsKKworCXBhdGhsZW4gPSBwYXRoID8gc3RybGVuKHBhdGgpIDogMDsKKworCXNjID0gZ2l0X19jYWxsb2Moc2l6ZW9mKGdpdF9zb3J0ZWRjYWNoZSkgKyBwYXRobGVuICsgMSwgMSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHNjKTsKKworCWlmIChnaXRfcG9vbF9pbml0KCZzYy0+cG9vbCwgMSwgMCkgPCAwIHx8CisJCWdpdF92ZWN0b3JfaW5pdCgmc2MtPml0ZW1zLCA0LCBpdGVtX2NtcCkgPCAwIHx8CisJCShzYy0+bWFwID0gZ2l0X3N0cm1hcF9hbGxvYygpKSA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoZ2l0X3J3bG9ja19pbml0KCZzYy0+bG9jaykpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBsb2NrIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzYy0+aXRlbV9wYXRoX29mZnNldCAgPSBpdGVtX3BhdGhfb2Zmc2V0OworCXNjLT5mcmVlX2l0ZW0gICAgICAgICA9IGZyZWVfaXRlbTsKKwlzYy0+ZnJlZV9pdGVtX3BheWxvYWQgPSBmcmVlX2l0ZW1fcGF5bG9hZDsKKwlHSVRfUkVGQ09VTlRfSU5DKHNjKTsKKwlpZiAocGF0aGxlbikKKwkJbWVtY3B5KHNjLT5wYXRoLCBwYXRoLCBwYXRobGVuKTsKKworCSpvdXQgPSBzYzsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpZiAoc2MtPm1hcCkKKwkJZ2l0X3N0cm1hcF9mcmVlKHNjLT5tYXApOworCWdpdF92ZWN0b3JfZnJlZSgmc2MtPml0ZW1zKTsKKwlnaXRfcG9vbF9jbGVhcigmc2MtPnBvb2wpOworCWdpdF9fZnJlZShzYyk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIGdpdF9zb3J0ZWRjYWNoZV9pbmNyZWYoZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwlHSVRfUkVGQ09VTlRfSU5DKHNjKTsKK30KKworY29uc3QgY2hhciAqZ2l0X3NvcnRlZGNhY2hlX3BhdGgoZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwlyZXR1cm4gc2MtPnBhdGg7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRlZGNhY2hlX2NsZWFyKGdpdF9zb3J0ZWRjYWNoZSAqc2MpCit7CisJZ2l0X3N0cm1hcF9jbGVhcihzYy0+bWFwKTsKKworCWlmIChzYy0+ZnJlZV9pdGVtKSB7CisJCXNpemVfdCBpOworCQl2b2lkICppdGVtOworCisJCWdpdF92ZWN0b3JfZm9yZWFjaCgmc2MtPml0ZW1zLCBpLCBpdGVtKSB7CisJCQlzYy0+ZnJlZV9pdGVtKHNjLT5mcmVlX2l0ZW1fcGF5bG9hZCwgaXRlbSk7CisJCX0KKwl9CisKKwlnaXRfdmVjdG9yX2NsZWFyKCZzYy0+aXRlbXMpOworCisJZ2l0X3Bvb2xfY2xlYXIoJnNjLT5wb29sKTsKK30KKworc3RhdGljIHZvaWQgc29ydGVkY2FjaGVfZnJlZShnaXRfc29ydGVkY2FjaGUgKnNjKQoreworCS8qIGFjcXVpcmUgd3JpdGUgbG9jayB0byBtYWtlIHN1cmUgZXZlcnlvbmUgZWxzZSBpcyBkb25lICovCisJaWYgKGdpdF9zb3J0ZWRjYWNoZV93bG9jayhzYykgPCAwKQorCQlyZXR1cm47CisKKwlzb3J0ZWRjYWNoZV9jbGVhcihzYyk7CisJZ2l0X3ZlY3Rvcl9mcmVlKCZzYy0+aXRlbXMpOworCWdpdF9zdHJtYXBfZnJlZShzYy0+bWFwKTsKKworCWdpdF9zb3J0ZWRjYWNoZV93dW5sb2NrKHNjKTsKKworCWdpdF9yd2xvY2tfZnJlZSgmc2MtPmxvY2spOworCWdpdF9fZnJlZShzYyk7Cit9CisKK3ZvaWQgZ2l0X3NvcnRlZGNhY2hlX2ZyZWUoZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwlpZiAoIXNjKQorCQlyZXR1cm47CisJR0lUX1JFRkNPVU5UX0RFQyhzYywgc29ydGVkY2FjaGVfZnJlZSk7Cit9CisKK3N0YXRpYyBpbnQgc29ydGVkY2FjaGVfY29weV9pdGVtKHZvaWQgKnBheWxvYWQsIHZvaWQgKnRndF9pdGVtLCB2b2lkICpzcmNfaXRlbSkKK3sKKwlnaXRfc29ydGVkY2FjaGUgKnNjID0gcGF5bG9hZDsKKwkvKiBwYXRoIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gY29waWVkIGJ5IHVwc2VydCAqLworCW1lbWNweSh0Z3RfaXRlbSwgc3JjX2l0ZW0sIHNjLT5pdGVtX3BhdGhfb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KKworLyogY29weSBhIHNvcnRlZCBjYWNoZSAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV9jb3B5KAorCWdpdF9zb3J0ZWRjYWNoZSAqKm91dCwKKwlnaXRfc29ydGVkY2FjaGUgKnNyYywKKwlib29sIGxvY2ssCisJaW50ICgqY29weV9pdGVtKSh2b2lkICpwYXlsb2FkLCB2b2lkICp0Z3RfaXRlbSwgdm9pZCAqc3JjX2l0ZW0pLAorCXZvaWQgKnBheWxvYWQpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfc29ydGVkY2FjaGUgKnRndDsKKwlzaXplX3QgaTsKKwl2b2lkICpzcmNfaXRlbSwgKnRndF9pdGVtOworCisJLyoganVzdCB1c2UgbWVtY3B5IGlmIG5vIHNwZWNpYWwgY29weSBmbiBpcyBwYXNzZWQgaW4gKi8KKwlpZiAoIWNvcHlfaXRlbSkgeworCQljb3B5X2l0ZW0gPSBzb3J0ZWRjYWNoZV9jb3B5X2l0ZW07CisJCXBheWxvYWQgICA9IHNyYzsKKwl9CisKKwlpZiAoKGVycm9yID0gZ2l0X3NvcnRlZGNhY2hlX25ldygKKwkJCSZ0Z3QsIHNyYy0+aXRlbV9wYXRoX29mZnNldCwKKwkJCXNyYy0+ZnJlZV9pdGVtLCBzcmMtPmZyZWVfaXRlbV9wYXlsb2FkLAorCQkJc3JjLT5pdGVtcy5fY21wLCBzcmMtPnBhdGgpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmIChsb2NrICYmIGdpdF9zb3J0ZWRjYWNoZV9ybG9jayhzcmMpIDwgMCkgeworCQlnaXRfc29ydGVkY2FjaGVfZnJlZSh0Z3QpOworCQlyZXR1cm4gLTE7CisJfQorCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZzcmMtPml0ZW1zLCBpLCBzcmNfaXRlbSkgeworCQljaGFyICpwYXRoID0gKChjaGFyICopc3JjX2l0ZW0pICsgc3JjLT5pdGVtX3BhdGhfb2Zmc2V0OworCisJCWlmICgoZXJyb3IgPSBnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCZ0Z3RfaXRlbSwgdGd0LCBwYXRoKSkgPCAwIHx8CisJCQkoZXJyb3IgPSBjb3B5X2l0ZW0ocGF5bG9hZCwgdGd0X2l0ZW0sIHNyY19pdGVtKSkgPCAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGxvY2spCisJCWdpdF9zb3J0ZWRjYWNoZV9ydW5sb2NrKHNyYyk7CisJaWYgKGVycm9yKQorCQlnaXRfc29ydGVkY2FjaGVfZnJlZSh0Z3QpOworCisJKm91dCA9ICFlcnJvciA/IHRndCA6IE5VTEw7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGxvY2sgc29ydGVkY2FjaGUgd2hpbGUgbWFraW5nIG1vZGlmaWNhdGlvbnMgKi8KK2ludCBnaXRfc29ydGVkY2FjaGVfd2xvY2soZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwlHSVRfVU5VU0VEKHNjKTsgLyogcHJldmVudCB3YXJuaW5nIHdoZW4gY29tcGlsZWQgdy9vIHRocmVhZHMgKi8KKworCWlmIChnaXRfcndsb2NrX3dybG9jaygmc2MtPmxvY2spIDwgMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIlVuYWJsZSB0byBhY3F1aXJlIHdyaXRlIGxvY2sgb24gY2FjaGUiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdW5sb2NrIHNvcnRlZCBjYWNoZSB3aGVuIGRvbmUgd2l0aCBtb2RpZmljYXRpb25zICovCit2b2lkIGdpdF9zb3J0ZWRjYWNoZV93dW5sb2NrKGdpdF9zb3J0ZWRjYWNoZSAqc2MpCit7CisJZ2l0X3ZlY3Rvcl9zb3J0KCZzYy0+aXRlbXMpOworCWdpdF9yd2xvY2tfd3J1bmxvY2soJnNjLT5sb2NrKTsKK30KKworLyogbG9jayBzb3J0ZWRjYWNoZSBmb3IgcmVhZCAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV9ybG9jayhnaXRfc29ydGVkY2FjaGUgKnNjKQoreworCUdJVF9VTlVTRUQoc2MpOyAvKiBwcmV2ZW50IHdhcm5pbmcgd2hlbiBjb21waWxlZCB3L28gdGhyZWFkcyAqLworCisJaWYgKGdpdF9yd2xvY2tfcmRsb2NrKCZzYy0+bG9jaykgPCAwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiVW5hYmxlIHRvIGFjcXVpcmUgcmVhZCBsb2NrIG9uIGNhY2hlIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHVubG9jayBzb3J0ZWQgY2FjaGUgd2hlbiBkb25lIHJlYWRpbmcgKi8KK3ZvaWQgZ2l0X3NvcnRlZGNhY2hlX3J1bmxvY2soZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwlHSVRfVU5VU0VEKHNjKTsgLyogcHJldmVudCB3YXJuaW5nIHdoZW4gY29tcGlsZWQgdy9vIHRocmVhZHMgKi8KKwlnaXRfcndsb2NrX3JkdW5sb2NrKCZzYy0+bG9jayk7Cit9CisKKy8qIGlmIHRoZSBmaWxlIGhhcyBjaGFuZ2VkLCBsb2NrIGNhY2hlIGFuZCBsb2FkIGZpbGUgY29udGVudHMgaW50byBidWY7CisgKiByZXR1cm5zIDwwIG9uIGVycm9yLCA+MCBpZiBmaWxlIGhhcyBub3QgY2hhbmdlZAorICovCitpbnQgZ2l0X3NvcnRlZGNhY2hlX2xvY2thbmRsb2FkKGdpdF9zb3J0ZWRjYWNoZSAqc2MsIGdpdF9idWYgKmJ1ZikKK3sKKwlpbnQgZXJyb3IsIGZkOworCisJaWYgKChlcnJvciA9IGdpdF9zb3J0ZWRjYWNoZV93bG9jayhzYykpIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChlcnJvciA9IGdpdF9mdXRpbHNfZmlsZXN0YW1wX2NoZWNrKCZzYy0+c3RhbXAsIHNjLT5wYXRoKSkgPD0gMCkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoIWdpdF9faXNfc2l6ZXQoc2MtPnN0YW1wLnNpemUpKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJVbmFibGUgdG8gbG9hZCBmaWxlIGxhcmdlciB0aGFuIHNpemVfdCIpOworCQllcnJvciA9IC0xOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoKGZkID0gZ2l0X2Z1dGlsc19vcGVuX3JvKHNjLT5wYXRoKSkgPCAwKSB7CisJCWVycm9yID0gZmQ7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmIChidWYpCisJCWVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyX2ZkKGJ1ZiwgZmQsIChzaXplX3Qpc2MtPnN0YW1wLnNpemUpOworCisJKHZvaWQpcF9jbG9zZShmZCk7CisKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIHVubG9jazsKKworCXJldHVybiAxOyAvKiByZXR1cm4gMSAtPiBmaWxlIG5lZWRzIHJlbG9hZCBhbmQgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgKi8KKwordW5sb2NrOgorCWdpdF9zb3J0ZWRjYWNoZV93dW5sb2NrKHNjKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgZ2l0X3NvcnRlZGNhY2hlX3VwZGF0ZWQoZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwkgLyogdXBkYXRlIGZpbGVzdGFtcCB0byBsYXRlc3QgdmFsdWUgKi8KKwlpZiAoZ2l0X2Z1dGlsc19maWxlc3RhbXBfY2hlY2soJnNjLT5zdGFtcCwgc2MtPnBhdGgpIDwgMCkKKwkJZ2l0ZXJyX2NsZWFyKCk7Cit9CisKKy8qIHJlbGVhc2UgYWxsIGl0ZW1zIGluIHNvcnRlZCBjYWNoZSAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV9jbGVhcihnaXRfc29ydGVkY2FjaGUgKnNjLCBib29sIHdsb2NrKQoreworCWlmICh3bG9jayAmJiBnaXRfc29ydGVkY2FjaGVfd2xvY2soc2MpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc29ydGVkY2FjaGVfY2xlYXIoc2MpOworCisJaWYgKHdsb2NrKQorCQlnaXRfc29ydGVkY2FjaGVfd3VubG9jayhzYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZmluZCBhbmQvb3IgaW5zZXJ0IGl0ZW0sIHJldHVybmluZyBwb2ludGVyIHRvIGl0ZW0gZGF0YSAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQodm9pZCAqKm91dCwgZ2l0X3NvcnRlZGNhY2hlICpzYywgY29uc3QgY2hhciAqa2V5KQoreworCWludCBlcnJvciA9IDA7CisJa2hpdGVyX3QgcG9zOworCXZvaWQgKml0ZW07CisJc2l6ZV90IGtleWxlbiwgaXRlbWxlbjsKKwljaGFyICppdGVtX2tleTsKKworCXBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KHNjLT5tYXAsIGtleSk7CisJaWYgKGdpdF9zdHJtYXBfdmFsaWRfaW5kZXgoc2MtPm1hcCwgcG9zKSkgeworCQlpdGVtID0gZ2l0X3N0cm1hcF92YWx1ZV9hdChzYy0+bWFwLCBwb3MpOworCQlnb3RvIGRvbmU7CisJfQorCisJa2V5bGVuICA9IHN0cmxlbihrZXkpOworCWl0ZW1sZW4gPSBzYy0+aXRlbV9wYXRoX29mZnNldCArIGtleWxlbiArIDE7CisJaXRlbWxlbiA9IChpdGVtbGVuICsgNykgJiB+NzsKKworCWlmICgoaXRlbSA9IGdpdF9wb29sX21hbGxvY3ooJnNjLT5wb29sLCAodWludDMyX3QpaXRlbWxlbikpID09IE5VTEwpIHsKKwkJLyogZG9uJ3QgdXNlIEdJVEVSUl9DSEVDS19BTExPQyBiL2Mgb2YgbG9jayAqLworCQllcnJvciA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogb25lIHN0cmFuZ2UgdGhpbmcgaXMgdGhhdCBldmVuIGlmIHRoZSB2ZWN0b3Igb3IgaGFzaCB0YWJsZSBpbnNlcnQKKwkgKiBmYWlsLCB0aGVyZSBpcyBubyB3YXkgdG8gZnJlZSB0aGUgcG9vbCBpdGVtIHNvIHdlIGp1c3QgYWJhbmRvbiBpdAorCSAqLworCisJaXRlbV9rZXkgPSAoKGNoYXIgKilpdGVtKSArIHNjLT5pdGVtX3BhdGhfb2Zmc2V0OworCW1lbWNweShpdGVtX2tleSwga2V5LCBrZXlsZW4pOworCisJcG9zID0ga2hfcHV0KHN0ciwgc2MtPm1hcCwgaXRlbV9rZXksICZlcnJvcik7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBkb25lOworCisJaWYgKCFlcnJvcikKKwkJa2hfa2V5KHNjLT5tYXAsIHBvcykgPSBpdGVtX2tleTsKKwlraF92YWwoc2MtPm1hcCwgcG9zKSA9IGl0ZW07CisKKwllcnJvciA9IGdpdF92ZWN0b3JfaW5zZXJ0KCZzYy0+aXRlbXMsIGl0ZW0pOworCWlmIChlcnJvciA8IDApCisJCWdpdF9zdHJtYXBfZGVsZXRlX2F0KHNjLT5tYXAsIHBvcyk7CisKK2RvbmU6CisJaWYgKG91dCkKKwkJKm91dCA9ICFlcnJvciA/IGl0ZW0gOiBOVUxMOworCXJldHVybiBlcnJvcjsKK30KKworLyogbG9va3VwIGl0ZW0gYnkga2V5ICovCit2b2lkICpnaXRfc29ydGVkY2FjaGVfbG9va3VwKGNvbnN0IGdpdF9zb3J0ZWRjYWNoZSAqc2MsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlraGl0ZXJfdCBwb3MgPSBnaXRfc3RybWFwX2xvb2t1cF9pbmRleChzYy0+bWFwLCBrZXkpOworCWlmIChnaXRfc3RybWFwX3ZhbGlkX2luZGV4KHNjLT5tYXAsIHBvcykpCisJCXJldHVybiBnaXRfc3RybWFwX3ZhbHVlX2F0KHNjLT5tYXAsIHBvcyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIGZpbmQgb3V0IGhvdyBtYW55IGl0ZW1zIGFyZSBpbiB0aGUgY2FjaGUgKi8KK3NpemVfdCBnaXRfc29ydGVkY2FjaGVfZW50cnljb3VudChjb25zdCBnaXRfc29ydGVkY2FjaGUgKnNjKQoreworCXJldHVybiBnaXRfdmVjdG9yX2xlbmd0aCgmc2MtPml0ZW1zKTsKK30KKworLyogbG9va3VwIGl0ZW0gYnkgaW5kZXggKi8KK3ZvaWQgKmdpdF9zb3J0ZWRjYWNoZV9lbnRyeShnaXRfc29ydGVkY2FjaGUgKnNjLCBzaXplX3QgcG9zKQoreworCS8qIG1ha2Ugc3VyZSB0aGUgaXRlbXMgYXJlIHNvcnRlZCBzbyB0aGlzIGdldHMgdGhlIGNvcnJlY3QgaXRlbSAqLworCWlmICghc2MtPml0ZW1zLnNvcnRlZCkKKwkJZ2l0X3ZlY3Rvcl9zb3J0KCZzYy0+aXRlbXMpOworCisJcmV0dXJuIGdpdF92ZWN0b3JfZ2V0KCZzYy0+aXRlbXMsIHBvcyk7Cit9CisKKy8qIGhlbHBlciBzdHJ1Y3Qgc28gYnNlYXJjaCBjYWxsYmFjayBjYW4ga25vdyBvZmZzZXQgKyBrZXkgdmFsdWUgZm9yIGNtcCAqLworc3RydWN0IHNvcnRlZGNhY2hlX21hZ2ljX2tleSB7CisJc2l6ZV90IG9mZnNldDsKKwljb25zdCBjaGFyICprZXk7Cit9OworCitzdGF0aWMgaW50IHNvcnRlZGNhY2hlX21hZ2ljX2NtcChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKnZhbHVlKQoreworCWNvbnN0IHN0cnVjdCBzb3J0ZWRjYWNoZV9tYWdpY19rZXkgKm1hZ2ljID0ga2V5OworCWNvbnN0IGNoYXIgKnZhbHVlX2tleSA9ICgoY29uc3QgY2hhciAqKXZhbHVlKSArIG1hZ2ljLT5vZmZzZXQ7CisJcmV0dXJuIHN0cmNtcChtYWdpYy0+a2V5LCB2YWx1ZV9rZXkpOworfQorCisvKiBsb29rdXAgaW5kZXggb2YgaXRlbSBieSBrZXkgKi8KK2ludCBnaXRfc29ydGVkY2FjaGVfbG9va3VwX2luZGV4KAorCXNpemVfdCAqb3V0LCBnaXRfc29ydGVkY2FjaGUgKnNjLCBjb25zdCBjaGFyICprZXkpCit7CisJc3RydWN0IHNvcnRlZGNhY2hlX21hZ2ljX2tleSBtYWdpYzsKKworCW1hZ2ljLm9mZnNldCA9IHNjLT5pdGVtX3BhdGhfb2Zmc2V0OworCW1hZ2ljLmtleSAgICA9IGtleTsKKworCXJldHVybiBnaXRfdmVjdG9yX2JzZWFyY2gyKG91dCwgJnNjLT5pdGVtcywgc29ydGVkY2FjaGVfbWFnaWNfY21wLCAmbWFnaWMpOworfQorCisvKiByZW1vdmUgZW50cnkgZnJvbSBjYWNoZSAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV9yZW1vdmUoZ2l0X3NvcnRlZGNhY2hlICpzYywgc2l6ZV90IHBvcykKK3sKKwljaGFyICppdGVtOworCWtoaXRlcl90IG1hcHBvczsKKworCS8qIGJlY2F1c2Ugb2YgcG9vbCBhbGxvY2F0aW9uLCB0aGlzIGNhbid0IGFjdHVhbGx5IHJlbW92ZSB0aGUgaXRlbSwKKwkgKiBidXQgd2UgY2FuIHJlbW92ZSBpdCBmcm9tIHRoZSBpdGVtcyB2ZWN0b3IgYW5kIHRoZSBoYXNoIHRhYmxlLgorCSAqLworCisJaWYgKChpdGVtID0gZ2l0X3ZlY3Rvcl9nZXQoJnNjLT5pdGVtcywgcG9zKSkgPT0gTlVMTCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiUmVtb3ZpbmcgaXRlbSBvdXQgb2YgcmFuZ2UiKTsKKwkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CisJfQorCisJKHZvaWQpZ2l0X3ZlY3Rvcl9yZW1vdmUoJnNjLT5pdGVtcywgcG9zKTsKKworCW1hcHBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KHNjLT5tYXAsIGl0ZW0gKyBzYy0+aXRlbV9wYXRoX29mZnNldCk7CisJZ2l0X3N0cm1hcF9kZWxldGVfYXQoc2MtPm1hcCwgbWFwcG9zKTsKKworCWlmIChzYy0+ZnJlZV9pdGVtKQorCQlzYy0+ZnJlZV9pdGVtKHNjLT5mcmVlX2l0ZW1fcGF5bG9hZCwgaXRlbSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvc3JjL3NvcnRlZGNhY2hlLmggYi9zcmMvc29ydGVkY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FjYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3NvcnRlZGNhY2hlLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJnaXQyLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdQTCB2MiB3aXRoCisgKiBhIExpbmtpbmcgRXhjZXB0aW9uLiBGb3IgZnVsbCB0ZXJtcyBzZWUgdGhlIGluY2x1ZGVkIENPUFlJTkcgZmlsZS4KKyAqLworI2lmbmRlZiBJTkNMVURFX3NvcnRlZF9jYWNoZV9oX18KKyNkZWZpbmUgSU5DTFVERV9zb3J0ZWRfY2FjaGVfaF9fCisKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZmlsZW9wcy5oIgorI2luY2x1ZGUgInZlY3Rvci5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInBvb2wuaCIKKyNpbmNsdWRlICJzdHJtYXAuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBpcyB0byBjYWNoZSB0aGUgcGFyc2VkIGNvbnRlbnRzIG9mIGEKKyAqIGZpbGUgKGEuay5hLiB0aGUgYmFja2luZyBmaWxlKSB3aGVyZSBlYWNoIGl0ZW0gaW4gdGhlIGZpbGUgY2FuIGJlCisgKiBpZGVudGlmaWVkIGJ5IGEga2V5IHN0cmluZyBhbmQgeW91IHdhbnQgdG8gYm90aCBsb29rIHRoZW0gdXAgYnkgbmFtZQorICogYW5kIHRyYXZlcnNlIHRoZW0gaW4gc29ydGVkIG9yZGVyLiAgRWFjaCBpdGVtIGlzIGFzc3VtZWQgdG8gaXRzZWxmIGVuZAorICogaW4gYSBHSVRfRkxFWF9BUlJBWS4KKyAqLworCit0eXBlZGVmIHZvaWQgKCpnaXRfc29ydGVkY2FjaGVfZnJlZV9pdGVtX2ZuKSh2b2lkICpwYXlsb2FkLCB2b2lkICppdGVtKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWdpdF9yZWZjb3VudCByYzsKKwlnaXRfcndsb2NrICAgbG9jazsKKwlzaXplX3QgICAgICAgaXRlbV9wYXRoX29mZnNldDsKKwlnaXRfc29ydGVkY2FjaGVfZnJlZV9pdGVtX2ZuIGZyZWVfaXRlbTsKKwl2b2lkICAgICAgICAgKmZyZWVfaXRlbV9wYXlsb2FkOworCWdpdF9wb29sICAgICBwb29sOworCWdpdF92ZWN0b3IgICBpdGVtczsKKwlnaXRfc3RybWFwICAgKm1hcDsKKwlnaXRfZnV0aWxzX2ZpbGVzdGFtcCBzdGFtcDsKKwljaGFyICAgICAgICAgcGF0aFtHSVRfRkxFWF9BUlJBWV07Cit9IGdpdF9zb3J0ZWRjYWNoZTsKKworLyogQ3JlYXRlIGEgbmV3IHNvcnRlZGNhY2hlCisgKgorICogRXZlbiB0aG91Z2ggZXZlcnkgc29ydGVkY2FjaGUgc3RvcmVzIGl0ZW1zIHdpdGggYSBHSVRfRkxFWF9BUlJBWSBhdAorICogdGhlIGVuZCBjb250YWluaW5nIHRoZWlyIGtleSBzdHJpbmcsIHlvdSBoYXZlIHRvIHByb3ZpZGUgdGhlIGl0ZW1fY21wCisgKiBzb3J0aW5nIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIHNvcnRpbmcgZnVuY3Rpb24gZG9lc24ndCBnZXQgYSBwYXlsb2FkCisgKiBhbmQgdGhlcmVmb3JlIGNhbid0IGtub3cgdGhlIG9mZnNldCB0byB0aGUgaXRlbSBrZXkgc3RyaW5nLiA6LSgKKyAqCisgKiBAcGFyYW0gb3V0IFRoZSBhbGxvY2F0ZWQgZ2l0X3NvcnRlZGNhY2hlCisgKiBAcGFyYW0gaXRlbV9wYXRoX29mZnNldCBPZmZzZXQgdG8gdGhlIEdJVF9GTEVYX0FSUkFZIGl0ZW0ga2V5IGluIHRoZQorICogICAgICAgIHN0cnVjdCAtIHVzZSBvZmZzZXRvZihzdHJ1Y3QgbWluZSwga2V5LWZpZWxkKSB0byBnZXQgdGhpcworICogQHBhcmFtIGZyZWVfaXRlbSBPcHRpb25hbCBjYWxsYmFjayB0byBmcmVlIGVhY2ggaXRlbQorICogQHBhcmFtIGZyZWVfaXRlbV9wYXlsb2FkIE9wdGlvbmFsIHBheWxvYWQgcGFzc2VkIHRvIGZyZWVfaXRlbSBjYWxsYmFjaworICogQHBhcmFtIGl0ZW1fY21wIENvbXBhcmUgdGhlIGtleXMgb2YgdHdvIGl0ZW1zCisgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgYmFja2luZyBzdG9yZSBmaWxlIGZvciB0aGlzIGNhY2hlOyB0aGlzCisgKiAgICAgICAgbWF5IGJlIE5VTEwuICBUaGUgY2FjaGUgbWFrZXMgaXQgZWFzeSB0byBsb2FkIHRoaXMgYW5kIGNoZWNrCisgKiAgICAgICAgaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgbG9hZCBhbmQvb3Igd3JpdGUuCisgKi8KK2ludCBnaXRfc29ydGVkY2FjaGVfbmV3KAorCWdpdF9zb3J0ZWRjYWNoZSAqKm91dCwKKwlzaXplX3QgaXRlbV9wYXRoX29mZnNldCwgLyogdXNlIG9mZnNldG9mKHN0cnVjdCwgcGF0aC1maWVsZCkgbWFjcm8gKi8KKwlnaXRfc29ydGVkY2FjaGVfZnJlZV9pdGVtX2ZuIGZyZWVfaXRlbSwKKwl2b2lkICpmcmVlX2l0ZW1fcGF5bG9hZCwKKwlnaXRfdmVjdG9yX2NtcCBpdGVtX2NtcCwKKwljb25zdCBjaGFyICpwYXRoKTsKKworLyogQ29weSBhIHNvcnRlZCBjYWNoZQorICoKKyAqIC0gYGNvcHlfaXRlbWAgY2FuIGJlIE5VTEwgdG8ganVzdCB1c2UgbWVtY3B5CisgKiAtIGlmIGBsb2NrYCwgZ3JhYnMgcmVhZCBsb2NrIG9uIGBzcmNgIGR1cmluZyBjb3B5IGFuZCByZWxlYXNlcyBhZnRlcgorICovCitpbnQgZ2l0X3NvcnRlZGNhY2hlX2NvcHkoCisJZ2l0X3NvcnRlZGNhY2hlICoqb3V0LAorCWdpdF9zb3J0ZWRjYWNoZSAqc3JjLAorCWJvb2wgbG9jaywKKwlpbnQgKCpjb3B5X2l0ZW0pKHZvaWQgKnBheWxvYWQsIHZvaWQgKnRndF9pdGVtLCB2b2lkICpzcmNfaXRlbSksCisJdm9pZCAqcGF5bG9hZCk7CisKKy8qIEZyZWUgc29ydGVkIGNhY2hlIChmaXJzdCBjYWxsaW5nIGBmcmVlX2l0ZW1gIGNhbGxiYWNrcykKKyAqCisgKiBEb24ndCBjYWxsIG9uIGEgbG9ja2VkIGNvbGxlY3Rpb24gLSBpdCBtYXkgYWNxdWlyZSBhIHdyaXRlIGxvY2sKKyAqLwordm9pZCBnaXRfc29ydGVkY2FjaGVfZnJlZShnaXRfc29ydGVkY2FjaGUgKnNjKTsKKworLyogSW5jcmVtZW50IHJlZmVyZW5jZSBjb3VudCAtIGJhbGFuY2Ugd2l0aCBjYWxsIHRvIGZyZWUgKi8KK3ZvaWQgZ2l0X3NvcnRlZGNhY2hlX2luY3JlZihnaXRfc29ydGVkY2FjaGUgKnNjKTsKKworLyogR2V0IHRoZSBwYXRobmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBhdCBjcmVhdGlvbiB0aW1lICovCitjb25zdCBjaGFyICpnaXRfc29ydGVkY2FjaGVfcGF0aChnaXRfc29ydGVkY2FjaGUgKnNjKTsKKworLyoKKyAqIENBQ0hFIFdSSVRFIEZVTkNUSU9OUworICoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHJlcXVpcmUgeW91IHRvIGhhdmUgYSB3cml0ZXIgbG9jayB0byBtYWtlIHRoZQorICogbW9kaWZpY2F0aW9uLiAgU29tZSBvZiB0aGUgZnVuY3Rpb25zIHRha2UgYSBgd2xvY2tgIHBhcmFtZXRlciBhbmQKKyAqIHdpbGwgb3B0aW9uYWxseSBsb2NrIGFuZCB1bmxvY2sgZm9yIHlvdSBpZiB0aGF0IGlzIHBhc3NlZCBhcyB0cnVlLgorICoKKyAqLworCisvKiBMb2NrIHNvcnRlZGNhY2hlIGZvciB3cml0ZSAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV93bG9jayhnaXRfc29ydGVkY2FjaGUgKnNjKTsKKworLyogVW5sb2NrIHNvcnRlZCBjYWNoZSB3aGVuIGRvbmUgd2l0aCB3cml0ZSAqLwordm9pZCBnaXRfc29ydGVkY2FjaGVfd3VubG9jayhnaXRfc29ydGVkY2FjaGUgKnNjKTsKKworLyogTG9jayBjYWNoZSBhbmQgbG9hZCBiYWNraW5nIGZpbGUgaW50byBhIGJ1ZmZlci4KKyAqCisgKiBUaGlzIGdyYWJzIGEgd3JpdGUgbG9jayBvbiB0aGUgY2FjaGUgdGhlbiBsb29rcyBhdCB0aGUgbW9kaWZpY2F0aW9uCisgKiB0aW1lIGFuZCBzaXplIG9mIHRoZSBmaWxlIG9uIGRpc2suCisgKgorICogSWYgdGhlIGZpbGUgYXBwZWFycyB0byBoYXZlIGNoYW5nZWQsIHRoaXMgbG9hZHMgdGhlIGZpbGUgY29udGVudHMgaW50bworICogdGhlIGJ1ZmZlciBhbmQgcmV0dXJucyBhIHBvc2l0aXZlIHZhbHVlIGxlYXZpbmcgdGhlIGNhY2hlIGxvY2tlZCAtIHRoZQorICogY2FsbGVyIHNob3VsZCBwYXJzZSB0aGUgZmlsZSBjb250ZW50LCB1cGRhdGUgdGhlIGNhY2hlIGFzIG5lZWRlZCwgdGhlbgorICogcmVsZWFzZSB0aGUgbG9jay4gIE5PVEU6IEluIHRoaXMgY2FzZSwgdGhlIGNhbGxlciBNVVNUIHVubG9jayB0aGUgY2FjaGUuCisgKgorICogSWYgdGhlIGZpbGUgYXBwZWFycyB0byBiZSB1bmNoYW5nZWQsIHRoZW4gdGhpcyBhdXRvbWF0aWNhbGx5IHJlbGVhc2VzCisgKiB0aGUgbG9jayBvbiB0aGUgY2FjaGUsIGNsZWFycyB0aGUgYnVmZmVyLCBhbmQgcmV0dXJucyAwLgorICoKKyAqIEByZXR1cm4gMCBpZiB1cC10by1kYXRlLCAxIGlmIG91dC1vZi1kYXRlLCA8MCBvbiBlcnJvcgorICovCitpbnQgZ2l0X3NvcnRlZGNhY2hlX2xvY2thbmRsb2FkKGdpdF9zb3J0ZWRjYWNoZSAqc2MsIGdpdF9idWYgKmJ1Zik7CisKKy8qIFJlZnJlc2ggZmlsZSB0aW1lc3RhbXAgYWZ0ZXIgd3JpdGUgY29tcGxldGVzCisgKiBZb3Ugc2hvdWxkIGFscmVhZHkgYmUgaG9sZGluZyB0aGUgd3JpdGUgbG9jayB3aGVuIHlvdSBjYWxsIHRoaXMuCisgKi8KK3ZvaWQgZ2l0X3NvcnRlZGNhY2hlX3VwZGF0ZWQoZ2l0X3NvcnRlZGNhY2hlICpzYyk7CisKKy8qIFJlbGVhc2UgYWxsIGl0ZW1zIGluIHNvcnRlZCBjYWNoZQorICoKKyAqIElmIGB3bG9ja2AgaXMgdHJ1ZSwgZ3JhYnMgd3JpdGUgbG9jayBhbmQgcmVsZWFzZXMgd2hlbiBkb25lLCBvdGhlcndpc2UKKyAqIHlvdSBzaG91bGQgYWxyZWFkeSBiZSBob2xkaW5nIGEgd3JpdGUgbG9jayB3aGVuIHlvdSBjYWxsIHRoaXMuCisgKi8KK2ludCBnaXRfc29ydGVkY2FjaGVfY2xlYXIoZ2l0X3NvcnRlZGNhY2hlICpzYywgYm9vbCB3bG9jayk7CisKKy8qIEZpbmQgYW5kL29yIGluc2VydCBpdGVtLCByZXR1cm5pbmcgcG9pbnRlciB0byBpdGVtIGRhdGEuCisgKiBZb3Ugc2hvdWxkIGFscmVhZHkgYmUgaG9sZGluZyB0aGUgd3JpdGUgbG9jayB3aGVuIHlvdSBjYWxsIHRoaXMuCisgKi8KK2ludCBnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KAorCXZvaWQgKipvdXQsIGdpdF9zb3J0ZWRjYWNoZSAqc2MsIGNvbnN0IGNoYXIgKmtleSk7CisKKy8qIFJlbW92ZXMgZW50cnkgYXQgcG9zIGZyb20gY2FjaGUKKyAqIFlvdSBzaG91bGQgYWxyZWFkeSBiZSBob2xkaW5nIHRoZSB3cml0ZSBsb2NrIHdoZW4geW91IGNhbGwgdGhpcy4KKyAqLworaW50IGdpdF9zb3J0ZWRjYWNoZV9yZW1vdmUoZ2l0X3NvcnRlZGNhY2hlICpzYywgc2l6ZV90IHBvcyk7CisKKy8qCisgKiBDQUNIRSBSRUFEIEZVTkNUSU9OUworICoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFjY2VzcyBpdGVtcyBpbiB0aGUgY2FjaGUuICBUbyBwcmV2ZW50IHRoZQorICogcmVzdWx0cyBmcm9tIGJlaW5nIGludmFsaWRhdGVkIGJlZm9yZSB0aGV5IGNhbiBiZSB1c2VkLCB5b3Ugc2hvdWxkIGJlCisgKiBob2xkaW5nIGVpdGhlciBhIHJlYWQgbG9jayBvciBhIHdyaXRlIGxvY2sgd2hlbiB1c2luZyB0aGVzZSBmdW5jdGlvbnMuCisgKgorICovCisKKy8qIExvY2sgc29ydGVkY2FjaGUgZm9yIHJlYWQgKi8KK2ludCBnaXRfc29ydGVkY2FjaGVfcmxvY2soZ2l0X3NvcnRlZGNhY2hlICpzYyk7CisKKy8qIFVubG9jayBzb3J0ZWQgY2FjaGUgd2hlbiBkb25lIHdpdGggcmVhZCAqLwordm9pZCBnaXRfc29ydGVkY2FjaGVfcnVubG9jayhnaXRfc29ydGVkY2FjaGUgKnNjKTsKKworLyogTG9va3VwIGl0ZW0gYnkga2V5IC0gcmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZCAqLwordm9pZCAqZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChjb25zdCBnaXRfc29ydGVkY2FjaGUgKnNjLCBjb25zdCBjaGFyICprZXkpOworCisvKiBHZXQgaG93IG1hbnkgaXRlbXMgYXJlIGluIHRoZSBjYWNoZQorICoKKyAqIFlvdSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgaG9sZGluZyBhIGxvY2ssIGJ1dCBiZSBhd2FyZQorICogdGhhdCBpdCBtYXkgY2hhbmdlIGJlZm9yZSB5b3UgdXNlIGl0LgorICovCitzaXplX3QgZ2l0X3NvcnRlZGNhY2hlX2VudHJ5Y291bnQoY29uc3QgZ2l0X3NvcnRlZGNhY2hlICpzYyk7CisKKy8qIExvb2t1cCBpdGVtIGJ5IGluZGV4IC0gcmV0dXJucyBOVUxMIGlmIG91dCBvZiByYW5nZSAqLwordm9pZCAqZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KGdpdF9zb3J0ZWRjYWNoZSAqc2MsIHNpemVfdCBwb3MpOworCisvKiBMb29rdXAgaW5kZXggb2YgaXRlbSBieSBrZXkgLSByZXR1cm5zIEdJVF9FTk9URk9VTkQgaWYgbm90IGZvdW5kICovCitpbnQgZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgKKwlzaXplX3QgKm91dCwgZ2l0X3NvcnRlZGNhY2hlICpzYywgY29uc3QgY2hhciAqa2V5KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvc3Rhc2guYyBiL3NyYy9zdGFzaC5jCmluZGV4IDEyMjI2MzQuLjA4M2MyYTQgMTAwNjQ0Ci0tLSBhL3NyYy9zdGFzaC5jCisrKyBiL3NyYy9zdGFzaC5jCkBAIC0yNyw3ICsyNyw3IEBACiB7CiAJaW50IGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaGVhZChvdXQsIHJlcG8pOwogCi0JaWYgKGVycm9yID09IEdJVF9FT1JQSEFORURIRUFEKQorCWlmIChlcnJvciA9PSBHSVRfRVVOQk9STkJSQU5DSCkKIAkJcmV0dXJuIGNyZWF0ZV9lcnJvcihlcnJvciwgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0LiIpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtMTE3LDcgKzExNyw3IEBACiBzdGF0aWMgaW50IGNvbW1pdF9pbmRleCgKIAlnaXRfY29tbWl0ICoqaV9jb21taXQsCiAJZ2l0X2luZGV4ICppbmRleCwKLQlnaXRfc2lnbmF0dXJlICpzdGFzaGVyLAorCWNvbnN0IGdpdF9zaWduYXR1cmUgKnN0YXNoZXIsCiAJY29uc3QgY2hhciAqbWVzc2FnZSwKIAljb25zdCBnaXRfY29tbWl0ICpwYXJlbnQpCiB7CkBAIC0xNTMsNjUgKzE1Myw2MSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RydWN0IGNiX2RhdGEgewotCWdpdF9pbmRleCAqaW5kZXg7Ci0KLQlpbnQgZXJyb3I7Ci0KK3N0cnVjdCBzdGFzaF91cGRhdGVfcnVsZXMgewogCWJvb2wgaW5jbHVkZV9jaGFuZ2VkOwogCWJvb2wgaW5jbHVkZV91bnRyYWNrZWQ7CiAJYm9vbCBpbmNsdWRlX2lnbm9yZWQ7CiB9OwogCi1zdGF0aWMgaW50IHVwZGF0ZV9pbmRleF9jYigKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JZmxvYXQgcHJvZ3Jlc3MsCi0Jdm9pZCAqcGF5bG9hZCkKK3N0YXRpYyBpbnQgc3Rhc2hfdXBkYXRlX2luZGV4X2Zyb21fZGlmZigKKwlnaXRfaW5kZXggKmluZGV4LAorCWNvbnN0IGdpdF9kaWZmICpkaWZmLAorCXN0cnVjdCBzdGFzaF91cGRhdGVfcnVsZXMgKmRhdGEpCiB7Ci0Jc3RydWN0IGNiX2RhdGEgKmRhdGEgPSAoc3RydWN0IGNiX2RhdGEgKilwYXlsb2FkOwotCWNvbnN0IGNoYXIgKmFkZF9wYXRoID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCXNpemVfdCBkLCBtYXhfZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7CiAKLQlHSVRfVU5VU0VEKHByb2dyZXNzKTsKKwlmb3IgKGQgPSAwOyAhZXJyb3IgJiYgZCA8IG1heF9kOyArK2QpIHsKKwkJY29uc3QgY2hhciAqYWRkX3BhdGggPSBOVUxMOworCQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEgPSBnaXRfZGlmZl9nZXRfZGVsdGEoZGlmZiwgZCk7CiAKLQlzd2l0Y2ggKGRlbHRhLT5zdGF0dXMpIHsKLQljYXNlIEdJVF9ERUxUQV9JR05PUkVEOgotCQlpZiAoZGF0YS0+aW5jbHVkZV9pZ25vcmVkKQotCQkJYWRkX3BhdGggPSBkZWx0YS0+bmV3X2ZpbGUucGF0aDsKLQkJYnJlYWs7Ci0KLQljYXNlIEdJVF9ERUxUQV9VTlRSQUNLRUQ6Ci0JCWlmIChkYXRhLT5pbmNsdWRlX3VudHJhY2tlZCkKLQkJCWFkZF9wYXRoID0gZGVsdGEtPm5ld19maWxlLnBhdGg7Ci0JCWJyZWFrOwotCi0JY2FzZSBHSVRfREVMVEFfQURERUQ6Ci0JY2FzZSBHSVRfREVMVEFfTU9ESUZJRUQ6Ci0JCWlmIChkYXRhLT5pbmNsdWRlX2NoYW5nZWQpCi0JCQlhZGRfcGF0aCA9IGRlbHRhLT5uZXdfZmlsZS5wYXRoOwotCQlicmVhazsKLQotCWNhc2UgR0lUX0RFTFRBX0RFTEVURUQ6Ci0JCWlmICghZGF0YS0+aW5jbHVkZV9jaGFuZ2VkKQorCQlzd2l0Y2ggKGRlbHRhLT5zdGF0dXMpIHsKKwkJY2FzZSBHSVRfREVMVEFfSUdOT1JFRDoKKwkJCWlmIChkYXRhLT5pbmNsdWRlX2lnbm9yZWQpCisJCQkJYWRkX3BhdGggPSBkZWx0YS0+bmV3X2ZpbGUucGF0aDsKIAkJCWJyZWFrOwotCQlpZiAoZ2l0X2luZGV4X2ZpbmQoTlVMTCwgZGF0YS0+aW5kZXgsIGRlbHRhLT5vbGRfZmlsZS5wYXRoKSA9PSAwKQotCQkJZGF0YS0+ZXJyb3IgPSBnaXRfaW5kZXhfcmVtb3ZlKAotCQkJCWRhdGEtPmluZGV4LCBkZWx0YS0+b2xkX2ZpbGUucGF0aCwgMCk7Ci0JCWJyZWFrOwogCi0JZGVmYXVsdDoKLQkJLyogVW5pbXBsZW1lbnRlZCAqLwotCQlnaXRlcnJfc2V0KAotCQkJR0lURVJSX0lOVkFMSUQsCi0JCQkiQ2Fubm90IHVwZGF0ZSBpbmRleC4gVW5pbXBsZW1lbnRlZCBzdGF0dXMgKCVkKSIsCi0JCQlkZWx0YS0+c3RhdHVzKTsKLQkJZGF0YS0+ZXJyb3IgPSAtMTsKLQkJYnJlYWs7CisJCWNhc2UgR0lUX0RFTFRBX1VOVFJBQ0tFRDoKKwkJCWlmIChkYXRhLT5pbmNsdWRlX3VudHJhY2tlZCkKKwkJCQlhZGRfcGF0aCA9IGRlbHRhLT5uZXdfZmlsZS5wYXRoOworCQkJYnJlYWs7CisKKwkJY2FzZSBHSVRfREVMVEFfQURERUQ6CisJCWNhc2UgR0lUX0RFTFRBX01PRElGSUVEOgorCQkJaWYgKGRhdGEtPmluY2x1ZGVfY2hhbmdlZCkKKwkJCQlhZGRfcGF0aCA9IGRlbHRhLT5uZXdfZmlsZS5wYXRoOworCQkJYnJlYWs7CisKKwkJY2FzZSBHSVRfREVMVEFfREVMRVRFRDoKKwkJCWlmIChkYXRhLT5pbmNsdWRlX2NoYW5nZWQgJiYKKwkJCQkhZ2l0X2luZGV4X2ZpbmQoTlVMTCwgaW5kZXgsIGRlbHRhLT5vbGRfZmlsZS5wYXRoKSkKKwkJCQllcnJvciA9IGdpdF9pbmRleF9yZW1vdmUoaW5kZXgsIGRlbHRhLT5vbGRfZmlsZS5wYXRoLCAwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKiBVbmltcGxlbWVudGVkICovCisJCQlnaXRlcnJfc2V0KAorCQkJCUdJVEVSUl9JTlZBTElELAorCQkJCSJDYW5ub3QgdXBkYXRlIGluZGV4LiBVbmltcGxlbWVudGVkIHN0YXR1cyAoJWQpIiwKKwkJCQlkZWx0YS0+c3RhdHVzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChhZGRfcGF0aCAhPSBOVUxMKQorCQkJZXJyb3IgPSBnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgYWRkX3BhdGgpOwogCX0KIAotCWlmIChhZGRfcGF0aCAhPSBOVUxMKQotCQlkYXRhLT5lcnJvciA9IGdpdF9pbmRleF9hZGRfYnlwYXRoKGRhdGEtPmluZGV4LCBhZGRfcGF0aCk7Ci0KLQlyZXR1cm4gZGF0YS0+ZXJyb3I7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IGJ1aWxkX3VudHJhY2tlZF90cmVlKApAQCAtMjIxLDE1ICsyMTcsMTMgQEAKIAl1aW50MzJfdCBmbGFncykKIHsKIAlnaXRfdHJlZSAqaV90cmVlID0gTlVMTDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCXN0cnVjdCBjYl9kYXRhIGRhdGEgPSB7MH07CisJc3RydWN0IHN0YXNoX3VwZGF0ZV9ydWxlcyBkYXRhID0gezB9OwogCWludCBlcnJvcjsKIAogCWdpdF9pbmRleF9jbGVhcihpbmRleCk7CiAKLQlkYXRhLmluZGV4ID0gaW5kZXg7Ci0KIAlpZiAoZmxhZ3MgJiBHSVRfU1RBU0hfSU5DTFVERV9VTlRSQUNLRUQpIHsKIAkJb3B0cy5mbGFncyB8PSBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRCB8CiAJCQlHSVRfRElGRl9SRUNVUlNFX1VOVFJBQ0tFRF9ESVJTOwpAQCAtMjQ4LDE4ICsyNDIsMTMgQEAKIAkJCSZkaWZmLCBnaXRfaW5kZXhfb3duZXIoaW5kZXgpLCBpX3RyZWUsICZvcHRzKSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2RpZmZfZm9yZWFjaCgKLQkJCWRpZmYsIHVwZGF0ZV9pbmRleF9jYiwgTlVMTCwgTlVMTCwgJmRhdGEpKSA8IDApCi0JewotCQlpZiAoZXJyb3IgPT0gR0lUX0VVU0VSKQotCQkJZXJyb3IgPSBkYXRhLmVycm9yOworCWlmICgoZXJyb3IgPSBzdGFzaF91cGRhdGVfaW5kZXhfZnJvbV9kaWZmKGluZGV4LCBkaWZmLCAmZGF0YSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwotCX0KIAogCWVycm9yID0gYnVpbGRfdHJlZV9mcm9tX2luZGV4KHRyZWVfb3V0LCBpbmRleCk7CiAKIGNsZWFudXA6Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X3RyZWVfZnJlZShpX3RyZWUpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI2Nyw3ICsyNTYsNyBAQAogc3RhdGljIGludCBjb21taXRfdW50cmFja2VkKAogCWdpdF9jb21taXQgKip1X2NvbW1pdCwKIAlnaXRfaW5kZXggKmluZGV4LAotCWdpdF9zaWduYXR1cmUgKnN0YXNoZXIsCisJY29uc3QgZ2l0X3NpZ25hdHVyZSAqc3Rhc2hlciwKIAljb25zdCBjaGFyICptZXNzYWdlLAogCWdpdF9jb21taXQgKmlfY29tbWl0LAogCXVpbnQzMl90IGZsYWdzKQpAQCAtMzExLDQxICszMDAsMjkgQEAKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGdpdF9pbmRleF9vd25lcihpbmRleCk7CiAJZ2l0X3RyZWUgKmJfdHJlZSA9IE5VTEw7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEwsICpkaWZmMiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlzdHJ1Y3QgY2JfZGF0YSBkYXRhID0gezB9OworCXN0cnVjdCBzdGFzaF91cGRhdGVfcnVsZXMgZGF0YSA9IHswfTsKIAlpbnQgZXJyb3I7CiAKKwlvcHRzLmZsYWdzID0gR0lUX0RJRkZfSUdOT1JFX1NVQk1PRFVMRVM7CisKIAlpZiAoKGVycm9yID0gZ2l0X2NvbW1pdF90cmVlKCZiX3RyZWUsIGJfY29tbWl0KSkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgcmVwbywgYl90cmVlLCBOVUxMLCAmb3B0cykpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyX3dpdGhfaW5kZXgoCisJCQkmZGlmZiwgcmVwbywgYl90cmVlLCAmb3B0cykpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCi0JaWYgKChlcnJvciA9IGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYyLCByZXBvLCBOVUxMLCAmb3B0cykpIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCi0JaWYgKChlcnJvciA9IGdpdF9kaWZmX21lcmdlKGRpZmYsIGRpZmYyKSkgPCAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQlkYXRhLmluZGV4ID0gaW5kZXg7CiAJZGF0YS5pbmNsdWRlX2NoYW5nZWQgPSB0cnVlOwogCi0JaWYgKChlcnJvciA9IGdpdF9kaWZmX2ZvcmVhY2goCi0JCQlkaWZmLCB1cGRhdGVfaW5kZXhfY2IsIE5VTEwsIE5VTEwsICZkYXRhKSkgPCAwKQotCXsKLQkJaWYgKGVycm9yID09IEdJVF9FVVNFUikKLQkJCWVycm9yID0gZGF0YS5lcnJvcjsKKwlpZiAoKGVycm9yID0gc3Rhc2hfdXBkYXRlX2luZGV4X2Zyb21fZGlmZihpbmRleCwgZGlmZiwgJmRhdGEpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKLQl9CiAKLQotCWlmICgoZXJyb3IgPSBidWlsZF90cmVlX2Zyb21faW5kZXgodHJlZV9vdXQsIGluZGV4KSkgPCAwKQotCQlnb3RvIGNsZWFudXA7CisJZXJyb3IgPSBidWlsZF90cmVlX2Zyb21faW5kZXgodHJlZV9vdXQsIGluZGV4KTsKIAogY2xlYW51cDoKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYyKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCWdpdF90cmVlX2ZyZWUoYl90cmVlKTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTM1NCw3ICszMzEsNyBAQAogc3RhdGljIGludCBjb21taXRfd29ya3RyZWUoCiAJZ2l0X29pZCAqd19jb21taXRfb2lkLAogCWdpdF9pbmRleCAqaW5kZXgsCi0JZ2l0X3NpZ25hdHVyZSAqc3Rhc2hlciwKKwljb25zdCBnaXRfc2lnbmF0dXJlICpzdGFzaGVyLAogCWNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAJZ2l0X2NvbW1pdCAqaV9jb21taXQsCiAJZ2l0X2NvbW1pdCAqYl9jb21taXQsCkBAIC00MzEsMTcgKzQwOCwxOSBAQAogc3RhdGljIGludCB1cGRhdGVfcmVmbG9nKAogCWdpdF9vaWQgKndfY29tbWl0X29pZCwKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQlnaXRfc2lnbmF0dXJlICpzdGFzaGVyLAorCWNvbnN0IGdpdF9zaWduYXR1cmUgKnN0YXNoZXIsCiAJY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLQlnaXRfcmVmZXJlbmNlICpzdGFzaCA9IE5VTEw7CisJZ2l0X3JlZmVyZW5jZSAqc3Rhc2g7CiAJZ2l0X3JlZmxvZyAqcmVmbG9nID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAKIAlpZiAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9jcmVhdGUoJnN0YXNoLCByZXBvLCBHSVRfUkVGU19TVEFTSF9GSUxFLCB3X2NvbW1pdF9vaWQsIDEpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmICgoZXJyb3IgPSBnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgc3Rhc2gpKSA8IDApCisJZ2l0X3JlZmVyZW5jZV9mcmVlKHN0YXNoKTsKKworCWlmICgoZXJyb3IgPSBnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgcmVwbywgR0lUX1JFRlNfU1RBU0hfRklMRSkgPCAwKSkKIAkJZ290byBjbGVhbnVwOwogCiAJaWYgKChlcnJvciA9IGdpdF9yZWZsb2dfYXBwZW5kKHJlZmxvZywgd19jb21taXRfb2lkLCBzdGFzaGVyLCBtZXNzYWdlKSkgPCAwKQpAQCAtNDUxLDcgKzQzMCw2IEBACiAJCWdvdG8gY2xlYW51cDsKIAogY2xlYW51cDoKLQlnaXRfcmVmZXJlbmNlX2ZyZWUoc3Rhc2gpOwogCWdpdF9yZWZsb2dfZnJlZShyZWZsb2cpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTQ3NCwxMiArNDUyLDE0IEBACiAJZ2l0X3N0YXR1c19vcHRpb25zIG9wdHMgPSBHSVRfU1RBVFVTX09QVElPTlNfSU5JVDsKIAogCW9wdHMuc2hvdyAgPSBHSVRfU1RBVFVTX1NIT1dfSU5ERVhfQU5EX1dPUktESVI7CisJb3B0cy5mbGFncyA9IEdJVF9TVEFUVVNfT1BUX0VYQ0xVREVfU1VCTU9EVUxFUzsKKwogCWlmIChpbmNsdWRlX3VudHJhY2tlZF9maWxlcykKLQkJb3B0cy5mbGFncyA9IEdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfVU5UUkFDS0VEIHwKKwkJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRCB8CiAJCUdJVF9TVEFUVVNfT1BUX1JFQ1VSU0VfVU5UUkFDS0VEX0RJUlM7CiAKIAlpZiAoaW5jbHVkZV9pZ25vcmVkX2ZpbGVzKQotCQlvcHRzLmZsYWdzID0gR0lUX1NUQVRVU19PUFRfSU5DTFVERV9JR05PUkVEOworCQlvcHRzLmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX0lOQ0xVREVfSUdOT1JFRDsKIAogCWVycm9yID0gZ2l0X3N0YXR1c19mb3JlYWNoX2V4dChyZXBvLCAmb3B0cywgaXNfZGlydHlfY2IsIE5VTEwpOwogCkBAIC01MTAsNyArNDkwLDcgQEAKIGludCBnaXRfc3Rhc2hfc2F2ZSgKIAlnaXRfb2lkICpvdXQsCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCi0JZ2l0X3NpZ25hdHVyZSAqc3Rhc2hlciwKKwljb25zdCBnaXRfc2lnbmF0dXJlICpzdGFzaGVyLAogCWNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAJdWludDMyX3QgZmxhZ3MpCiB7CkBAIC01OTUsNyArNTc1LDcgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHN0YXNoKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgcmVwbywgR0lUX1JFRlNfU1RBU0hfRklMRSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCiAJbWF4ID0gZ2l0X3JlZmxvZ19lbnRyeWNvdW50KHJlZmxvZyk7CkBAIC02MjksNyArNjA5LDcgQEAKIAlpZiAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnN0YXNoLCByZXBvLCBHSVRfUkVGU19TVEFTSF9GSUxFKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAoKGVycm9yID0gZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHN0YXNoKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgcmVwbywgR0lUX1JFRlNfU1RBU0hfRklMRSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCiAJbWF4ID0gZ2l0X3JlZmxvZ19lbnRyeWNvdW50KHJlZmxvZyk7CmRpZmYgLS1naXQgYS9zcmMvc3RhdHVzLmMgYi9zcmMvc3RhdHVzLmMKaW5kZXggZTUyMGMxMC4uMDdmZGNiNSAxMDA2NDQKLS0tIGEvc3JjL3N0YXR1cy5jCisrKyBiL3NyYy9zdGF0dXMuYwpAQCAtNTIsNyArNTIsNyBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHdvcmtkaXJfZGVsdGEyc3RhdHVzKAotCWdpdF9kaWZmX2xpc3QgKmRpZmYsIGdpdF9kaWZmX2RlbHRhICppZHgyd2QpCisJZ2l0X2RpZmYgKmRpZmYsIGdpdF9kaWZmX2RlbHRhICppZHgyd2QpCiB7CiAJZ2l0X3N0YXR1c190IHN0ID0gR0lUX1NUQVRVU19DVVJSRU5UOwogCkBAIC0yMjUsMjQgKzIyNSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyoKLXN0YXRpYyBpbnQgbmV3ZmlsZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKLXsKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGFfYSA9IGE7Ci0JY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhX2IgPSBiOwotCi0JcmV0dXJuIGdpdF9fc3RyY21wKGRlbHRhX2EtPm5ld19maWxlLnBhdGgsIGRlbHRhX2ItPm5ld19maWxlLnBhdGgpOwotfQotCi1zdGF0aWMgaW50IG5ld2ZpbGVfY2FzZWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YV9hID0gYTsKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGFfYiA9IGI7Ci0KLQlyZXR1cm4gZ2l0X19zdHJjYXNlY21wKGRlbHRhX2EtPm5ld19maWxlLnBhdGgsIGRlbHRhX2ItPm5ld19maWxlLnBhdGgpOwotfQotKi8KLQogaW50IGdpdF9zdGF0dXNfbGlzdF9uZXcoCiAJZ2l0X3N0YXR1c19saXN0ICoqb3V0LAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvLApAQCAtMjUxLDE0ICsyMzMsMTQgQEAKIAlnaXRfaW5kZXggKmluZGV4ID0gTlVMTDsKIAlnaXRfc3RhdHVzX2xpc3QgKnN0YXR1cyA9IE5VTEw7CiAJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0ID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBmaW5kb3B0c19pMncgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZl9maW5kX29wdGlvbnMgZmluZG9wdCA9IEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUOwogCWdpdF90cmVlICpoZWFkID0gTlVMTDsKIAlnaXRfc3RhdHVzX3Nob3dfdCBzaG93ID0KIAkJb3B0cyA/IG9wdHMtPnNob3cgOiBHSVRfU1RBVFVTX1NIT1dfSU5ERVhfQU5EX1dPUktESVI7CiAJaW50IGVycm9yID0gMDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBvcHRzID8gb3B0cy0+ZmxhZ3MgOiBHSVRfU1RBVFVTX09QVF9ERUZBVUxUUzsKIAotCWFzc2VydChzaG93IDw9IEdJVF9TVEFUVVNfU0hPV19JTkRFWF9USEVOX1dPUktESVIpOworCWFzc2VydChzaG93IDw9IEdJVF9TVEFUVVNfU0hPV19XT1JLRElSX09OTFkpOwogCiAJKm91dCA9IE5VTEw7CiAKQEAgLTI2OSwxMiArMjUxLDE3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCS8qIGlmIHRoZXJlIGlzIG5vIEhFQUQsIHRoYXQncyBva2F5IC0gd2UnbGwgbWFrZSBhbiBlbXB0eSBpdGVyYXRvciAqLwotCWlmICgoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaGVhZF90cmVlKCZoZWFkLCByZXBvKSkgPCAwKSAmJgotCQllcnJvciAhPSBHSVRfRU5PVEZPVU5EICYmIGVycm9yICE9IEdJVF9FT1JQSEFORURIRUFEKSB7Ci0JCWdpdF9pbmRleF9mcmVlKGluZGV4KTsgLyogcmVsZWFzZSBpbmRleCAqLwotCQlyZXR1cm4gZXJyb3I7CisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmaGVhZCwgcmVwbykpIDwgMCkgeworCQlpZiAoZXJyb3IgIT0gR0lUX0VOT1RGT1VORCAmJiBlcnJvciAhPSBHSVRfRVVOQk9STkJSQU5DSCkKKwkJCWdvdG8gZG9uZTsKKwkJZ2l0ZXJyX2NsZWFyKCk7CiAJfQogCisJLyogcmVmcmVzaCBpbmRleCBmcm9tIGRpc2sgdW5sZXNzIHByZXZlbnRlZCAqLworCWlmICgoZmxhZ3MgJiBHSVRfU1RBVFVTX09QVF9OT19SRUZSRVNIKSA9PSAwICYmCisJCWdpdF9pbmRleF9yZWFkKGluZGV4LCBmYWxzZSkgPCAwKQorCQlnaXRlcnJfY2xlYXIoKTsKKwogCXN0YXR1cyA9IGdpdF9zdGF0dXNfbGlzdF9hbGxvYyhpbmRleCk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHN0YXR1cyk7CiAKQEAgLTI4NCw2ICsyNzEsNyBAQAogCX0KIAogCWRpZmZvcHQuZmxhZ3MgPSBHSVRfRElGRl9JTkNMVURFX1RZUEVDSEFOR0U7CisJZmluZG9wdC5mbGFncyA9IEdJVF9ESUZGX0ZJTkRfRk9SX1VOVFJBQ0tFRDsKIAogCWlmICgoZmxhZ3MgJiBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRCkgIT0gMCkKIAkJZGlmZm9wdC5mbGFncyA9IGRpZmZvcHQuZmxhZ3MgfCBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRDsKQEAgLTMwMCwzNyArMjg4LDMyIEBACiAJaWYgKChmbGFncyAmIEdJVF9TVEFUVVNfT1BUX0VYQ0xVREVfU1VCTU9EVUxFUykgIT0gMCkKIAkJZGlmZm9wdC5mbGFncyA9IGRpZmZvcHQuZmxhZ3MgfCBHSVRfRElGRl9JR05PUkVfU1VCTU9EVUxFUzsKIAotCWZpbmRvcHRzX2kydy5mbGFncyB8PSBHSVRfRElGRl9GSU5EX0ZPUl9VTlRSQUNLRUQ7CisJaWYgKChmbGFncyAmIEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfRlJPTV9SRVdSSVRFUykgIT0gMCkKKwkJZmluZG9wdC5mbGFncyA9IGZpbmRvcHQuZmxhZ3MgfAorCQkJR0lUX0RJRkZfRklORF9BTkRfQlJFQUtfUkVXUklURVMgfAorCQkJR0lUX0RJRkZfRklORF9SRU5BTUVTX0ZST01fUkVXUklURVMgfAorCQkJR0lUX0RJRkZfQlJFQUtfUkVXUklURVNfRk9SX1JFTkFNRVNfT05MWTsKIAogCWlmIChzaG93ICE9IEdJVF9TVEFUVVNfU0hPV19XT1JLRElSX09OTFkpIHsKIAkJaWYgKChlcnJvciA9IGdpdF9kaWZmX3RyZWVfdG9faW5kZXgoCi0JCQkJJnN0YXR1cy0+aGVhZDJpZHgsIHJlcG8sIGhlYWQsIE5VTEwsICZkaWZmb3B0KSkgPCAwKQorCQkJCSZzdGF0dXMtPmhlYWQyaWR4LCByZXBvLCBoZWFkLCBpbmRleCwgJmRpZmZvcHQpKSA8IDApCiAJCQlnb3RvIGRvbmU7CiAKIAkJaWYgKChmbGFncyAmIEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfSEVBRF9UT19JTkRFWCkgIT0gMCAmJgotCQkJKGVycm9yID0gZ2l0X2RpZmZfZmluZF9zaW1pbGFyKHN0YXR1cy0+aGVhZDJpZHgsIE5VTEwpKSA8IDApCisJCQkoZXJyb3IgPSBnaXRfZGlmZl9maW5kX3NpbWlsYXIoc3RhdHVzLT5oZWFkMmlkeCwgJmZpbmRvcHQpKSA8IDApCiAJCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHNob3cgIT0gR0lUX1NUQVRVU19TSE9XX0lOREVYX09OTFkpIHsKIAkJaWYgKChlcnJvciA9IGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoCi0JCQkJJnN0YXR1cy0+aWR4MndkLCByZXBvLCBOVUxMLCAmZGlmZm9wdCkpIDwgMCkKKwkJCQkmc3RhdHVzLT5pZHgyd2QsIHJlcG8sIGluZGV4LCAmZGlmZm9wdCkpIDwgMCkKIAkJCWdvdG8gZG9uZTsKIAogCQlpZiAoKGZsYWdzICYgR0lUX1NUQVRVU19PUFRfUkVOQU1FU19JTkRFWF9UT19XT1JLRElSKSAhPSAwICYmCi0JCQkoZXJyb3IgPSBnaXRfZGlmZl9maW5kX3NpbWlsYXIoc3RhdHVzLT5pZHgyd2QsICZmaW5kb3B0c19pMncpKSA8IDApCisJCQkoZXJyb3IgPSBnaXRfZGlmZl9maW5kX3NpbWlsYXIoc3RhdHVzLT5pZHgyd2QsICZmaW5kb3B0KSkgPCAwKQogCQkJZ290byBkb25lOwogCX0KIAotCWlmIChzaG93ID09IEdJVF9TVEFUVVNfU0hPV19JTkRFWF9USEVOX1dPUktESVIpIHsKLQkJaWYgKChlcnJvciA9IGdpdF9kaWZmX19wYWlyZWRfZm9yZWFjaCgKLQkJCQlzdGF0dXMtPmhlYWQyaWR4LCBOVUxMLCBzdGF0dXNfY29sbGVjdCwgc3RhdHVzKSkgPCAwKQotCQkJZ290byBkb25lOwotCi0JCWdpdF9kaWZmX2xpc3RfZnJlZShzdGF0dXMtPmhlYWQyaWR4KTsKLQkJc3RhdHVzLT5oZWFkMmlkeCA9IE5VTEw7Ci0JfQotCiAJaWYgKChlcnJvciA9IGdpdF9kaWZmX19wYWlyZWRfZm9yZWFjaCgKIAkJCXN0YXR1cy0+aGVhZDJpZHgsIHN0YXR1cy0+aWR4MndkLCBzdGF0dXNfY29sbGVjdCwgc3RhdHVzKSkgPCAwKQogCQlnb3RvIGRvbmU7CkBAIC0zODMsOCArMzY2LDggQEAKIAlpZiAoc3RhdHVzID09IE5VTEwpCiAJCXJldHVybjsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShzdGF0dXMtPmhlYWQyaWR4KTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoc3RhdHVzLT5pZHgyd2QpOworCWdpdF9kaWZmX2ZyZWUoc3RhdHVzLT5oZWFkMmlkeCk7CisJZ2l0X2RpZmZfZnJlZShzdGF0dXMtPmlkeDJ3ZCk7CiAKIAlnaXRfdmVjdG9yX2ZvcmVhY2goJnN0YXR1cy0+cGFpcmVkLCBpLCBzdGF0dXNfZW50cnkpCiAJCWdpdF9fZnJlZShzdGF0dXNfZW50cnkpOwpkaWZmIC0tZ2l0IGEvc3JjL3N0YXR1cy5oIGIvc3JjL3N0YXR1cy5oCmluZGV4IGI1OGUwZWIuLjMzMDA4YjggMTAwNjQ0Ci0tLSBhL3NyYy9zdGF0dXMuaAorKysgYi9zcmMvc3RhdHVzLmgKQEAgLTE0LDggKzE0LDggQEAKIHN0cnVjdCBnaXRfc3RhdHVzX2xpc3QgewogCWdpdF9zdGF0dXNfb3B0aW9ucyBvcHRzOwogCi0JZ2l0X2RpZmZfbGlzdCAqaGVhZDJpZHg7Ci0JZ2l0X2RpZmZfbGlzdCAqaWR4MndkOworCWdpdF9kaWZmICpoZWFkMmlkeDsKKwlnaXRfZGlmZiAqaWR4MndkOwogCiAJZ2l0X3ZlY3RvciBwYWlyZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL3N0cm1hcC5jIGIvc3JjL3N0cm1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmExM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RybWFwLmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisKKyNpbmNsdWRlICJzdHJtYXAuaCIKKworaW50IGdpdF9zdHJtYXBfbmV4dCgKKwl2b2lkICoqZGF0YSwKKwlnaXRfc3RybWFwX2l0ZXIqIGl0ZXIsCisJZ2l0X3N0cm1hcCAqbWFwKQoreworCWlmICghbWFwKQorCQlyZXR1cm4gR0lUX0VSUk9SOworCisJd2hpbGUgKCppdGVyICE9IGdpdF9zdHJtYXBfZW5kKG1hcCkpIHsKKwkJaWYgKCEoZ2l0X3N0cm1hcF9oYXNfZGF0YShtYXAsICppdGVyKSkpIHsKKwkJCSsrKCppdGVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJKmRhdGEgPSBnaXRfc3RybWFwX3ZhbHVlX2F0KG1hcCwgKml0ZXIpOworCisJCSsrKCppdGVyKTsKKworCQlyZXR1cm4gR0lUX09LOworCX0KKworCXJldHVybiBHSVRfSVRFUk9WRVI7Cit9CmRpZmYgLS1naXQgYS9zcmMvc3RybWFwLmggYi9zcmMvc3RybWFwLmgKaW5kZXggNDQxNzZhMC4uODI3NmFiNCAxMDA2NDQKLS0tIGEvc3JjL3N0cm1hcC5oCisrKyBiL3NyYy9zdHJtYXAuaApAQCAtMTcsNiArMTcsNyBAQAogCiBfX0tIQVNIX1RZUEUoc3RyLCBjb25zdCBjaGFyICosIHZvaWQgKik7CiB0eXBlZGVmIGtoYXNoX3Qoc3RyKSBnaXRfc3RybWFwOwordHlwZWRlZiBraGl0ZXJfdCBnaXRfc3RybWFwX2l0ZXI7CiAKICNkZWZpbmUgR0lUX19VU0VfU1RSTUFQIFwKIAlfX0tIQVNIX0lNUEwoc3RyLCBzdGF0aWMga2hfaW5saW5lLCBjb25zdCBjaGFyICosIHZvaWQgKiwgMSwga2hfc3RyX2hhc2hfZnVuYywga2hfc3RyX2hhc2hfZXF1YWwpCkBAIC0zMSw3ICszMiw5IEBACiAjZGVmaW5lIGdpdF9zdHJtYXBfdmFsaWRfaW5kZXgoaCwgaWR4KSAoaWR4ICE9IGtoX2VuZChoKSkKIAogI2RlZmluZSBnaXRfc3RybWFwX2V4aXN0cyhoLCBrKSAoa2hfZ2V0KHN0ciwgaCwgaykgIT0ga2hfZW5kKGgpKQorI2RlZmluZSBnaXRfc3RybWFwX2hhc19kYXRhKGgsIGlkeCkga2hfZXhpc3QoaCwgaWR4KQogCisjZGVmaW5lIGdpdF9zdHJtYXBfa2V5KGgsIGlkeCkgICAgICAgICAgICAga2hfa2V5KGgsIGlkeCkKICNkZWZpbmUgZ2l0X3N0cm1hcF92YWx1ZV9hdChoLCBpZHgpICAgICAgICBraF92YWwoaCwgaWR4KQogI2RlZmluZSBnaXRfc3RybWFwX3NldF92YWx1ZV9hdChoLCBpZHgsIHYpIGtoX3ZhbChoLCBpZHgpID0gdgogI2RlZmluZSBnaXRfc3RybWFwX2RlbGV0ZV9hdChoLCBpZHgpICAgICAgIGtoX2RlbChzdHIsIGgsIGlkeCkKQEAgLTYxLDQgKzY0LDEyIEBACiAjZGVmaW5lIGdpdF9zdHJtYXBfZm9yZWFjaAkJa2hfZm9yZWFjaAogI2RlZmluZSBnaXRfc3RybWFwX2ZvcmVhY2hfdmFsdWUJa2hfZm9yZWFjaF92YWx1ZQogCisjZGVmaW5lIGdpdF9zdHJtYXBfYmVnaW4JCWtoX2JlZ2luCisjZGVmaW5lIGdpdF9zdHJtYXBfZW5kCQlraF9lbmQKKworaW50IGdpdF9zdHJtYXBfbmV4dCgKKwl2b2lkICoqZGF0YSwKKwlnaXRfc3RybWFwX2l0ZXIqIGl0ZXIsCisJZ2l0X3N0cm1hcCAqbWFwKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvc3VibW9kdWxlLmMgYi9zcmMvc3VibW9kdWxlLmMKaW5kZXggODllYmEyYS4uNTg2NDk0ZiAxMDA2NDQKLS0tIGEvc3JjL3N1Ym1vZHVsZS5jCisrKyBiL3NyYy9zdWJtb2R1bGUuYwpAQCAtOSw5ICs5LDcgQEAKICNpbmNsdWRlICJnaXQyL2NvbmZpZy5oIgogI2luY2x1ZGUgImdpdDIvc3lzL2NvbmZpZy5oIgogI2luY2x1ZGUgImdpdDIvdHlwZXMuaCIKLSNpbmNsdWRlICJnaXQyL3JlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJnaXQyL2luZGV4LmgiCi0jaW5jbHVkZSAiZ2l0Mi9zdWJtb2R1bGUuaCIKICNpbmNsdWRlICJidWZmZXIuaCIKICNpbmNsdWRlICJidWZfdGV4dC5oIgogI2luY2x1ZGUgInZlY3Rvci5oIgpAQCAtMzIsNiArMzAsOCBAQAogCXtHSVRfQ1ZBUl9TVFJJTkcsICJyZWJhc2UiLCBHSVRfU1VCTU9EVUxFX1VQREFURV9SRUJBU0V9LAogCXtHSVRfQ1ZBUl9TVFJJTkcsICJtZXJnZSIsIEdJVF9TVUJNT0RVTEVfVVBEQVRFX01FUkdFfSwKIAl7R0lUX0NWQVJfU1RSSU5HLCAibm9uZSIsIEdJVF9TVUJNT0RVTEVfVVBEQVRFX05PTkV9LAorCXtHSVRfQ1ZBUl9GQUxTRSwgTlVMTCwgR0lUX1NVQk1PRFVMRV9VUERBVEVfTk9ORX0sCisJe0dJVF9DVkFSX1RSVUUsIE5VTEwsIEdJVF9TVUJNT0RVTEVfVVBEQVRFX0NIRUNLT1VUfSwKIH07CiAKIHN0YXRpYyBnaXRfY3Zhcl9tYXAgX3NtX2lnbm9yZV9tYXBbXSA9IHsKQEAgLTM5LDYgKzM5LDggQEAKIAl7R0lUX0NWQVJfU1RSSU5HLCAidW50cmFja2VkIiwgR0lUX1NVQk1PRFVMRV9JR05PUkVfVU5UUkFDS0VEfSwKIAl7R0lUX0NWQVJfU1RSSU5HLCAiZGlydHkiLCBHSVRfU1VCTU9EVUxFX0lHTk9SRV9ESVJUWX0sCiAJe0dJVF9DVkFSX1NUUklORywgImFsbCIsIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0FMTH0sCisJe0dJVF9DVkFSX0ZBTFNFLCBOVUxMLCBHSVRfU1VCTU9EVUxFX0lHTk9SRV9OT05FfSwKKwl7R0lUX0NWQVJfVFJVRSwgTlVMTCwgR0lUX1NVQk1PRFVMRV9JR05PUkVfQUxMfSwKIH07CiAKIHN0YXRpYyBraF9pbmxpbmUga2hpbnRfdCBzdHJfaGFzaF9ub190cmFpbGluZ19zbGFzaChjb25zdCBjaGFyICpzKQpAQCAtNzMsMTUgKzc1LDExIEBACiBzdGF0aWMgZ2l0X2NvbmZpZ19iYWNrZW5kICpvcGVuX2dpdG1vZHVsZXMoZ2l0X3JlcG9zaXRvcnkgKiwgYm9vbCwgY29uc3QgZ2l0X29pZCAqKTsKIHN0YXRpYyBpbnQgbG9va3VwX2hlYWRfcmVtb3RlKGdpdF9idWYgKnVybCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOwogc3RhdGljIGludCBzdWJtb2R1bGVfZ2V0KGdpdF9zdWJtb2R1bGUgKiosIGdpdF9yZXBvc2l0b3J5ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLXN0YXRpYyB2b2lkIHN1Ym1vZHVsZV9yZWxlYXNlKGdpdF9zdWJtb2R1bGUgKnNtLCBpbnQgZGVjcik7Ci1zdGF0aWMgaW50IHN1Ym1vZHVsZV9sb2FkX2Zyb21faW5kZXgoZ2l0X3JlcG9zaXRvcnkgKiwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICopOwotc3RhdGljIGludCBzdWJtb2R1bGVfbG9hZF9mcm9tX2hlYWQoZ2l0X3JlcG9zaXRvcnkqLCBjb25zdCBjaGFyKiwgY29uc3QgZ2l0X29pZCopOwogc3RhdGljIGludCBzdWJtb2R1bGVfbG9hZF9mcm9tX2NvbmZpZyhjb25zdCBnaXRfY29uZmlnX2VudHJ5ICosIHZvaWQgKik7CiBzdGF0aWMgaW50IHN1Ym1vZHVsZV9sb2FkX2Zyb21fd2RfbGl0ZShnaXRfc3VibW9kdWxlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKIHN0YXRpYyBpbnQgc3VibW9kdWxlX3VwZGF0ZV9jb25maWcoZ2l0X3N1Ym1vZHVsZSAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgYm9vbCwgYm9vbCk7Ci1zdGF0aWMgdm9pZCBzdWJtb2R1bGVfbW9kZV9taXNtYXRjaChnaXRfcmVwb3NpdG9yeSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgaW50IHN1Ym1vZHVsZV9pbmRleF9zdGF0dXModW5zaWduZWQgaW50ICpzdGF0dXMsIGdpdF9zdWJtb2R1bGUgKnNtKTsKLXN0YXRpYyBpbnQgc3VibW9kdWxlX3dkX3N0YXR1cyh1bnNpZ25lZCBpbnQgKnN0YXR1cywgZ2l0X3N1Ym1vZHVsZSAqc20pOworc3RhdGljIHZvaWQgc3VibW9kdWxlX2dldF9pbmRleF9zdGF0dXModW5zaWduZWQgaW50ICosIGdpdF9zdWJtb2R1bGUgKik7CitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfZ2V0X3dkX3N0YXR1cyh1bnNpZ25lZCBpbnQgKiwgZ2l0X3N1Ym1vZHVsZSAqLCBnaXRfcmVwb3NpdG9yeSAqLCBnaXRfc3VibW9kdWxlX2lnbm9yZV90KTsKIAogc3RhdGljIGludCBzdWJtb2R1bGVfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7CkBAIC0xNjMsNyArMTYxLDcgQEAKIAkJICogdXMgZnJvbSBpc3N1aW5nIGEgY2FsbGJhY2sgdHdpY2UgZm9yIGEgc3VibW9kdWxlIHdoZXJlIHRoZSBuYW1lCiAJCSAqIGFuZCBwYXRoIGFyZSBub3QgdGhlIHNhbWUuCiAJCSAqLwotCQlpZiAoc20tPnJlZmNvdW50ID4gMSkgeworCQlpZiAoR0lUX1JFRkNPVU5UX1ZBTChzbSkgPiAxKSB7CiAJCQlpZiAoZ2l0X3ZlY3Rvcl9ic2VhcmNoKE5VTEwsICZzZWVuLCBzbSkgIT0gR0lUX0VOT1RGT1VORCkKIAkJCQljb250aW51ZTsKIAkJCWlmICgoZXJyb3IgPSBnaXRfdmVjdG9yX2luc2VydCgmc2Vlbiwgc20pKSA8IDApCkBAIC0xOTUsOSArMTkzLDcgQEAKIAlpZiAoc21jZmcgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZ2l0X3N0cm1hcF9mb3JlYWNoX3ZhbHVlKHNtY2ZnLCBzbSwgewotCQlzdWJtb2R1bGVfcmVsZWFzZShzbSwxKTsKLQl9KTsKKwlnaXRfc3RybWFwX2ZvcmVhY2hfdmFsdWUoc21jZmcsIHNtLCB7IGdpdF9zdWJtb2R1bGVfZnJlZShzbSk7IH0pOwogCWdpdF9zdHJtYXBfZnJlZShzbWNmZyk7CiB9CiAKQEAgLTMzOCw3ICszMzQsNyBAQAogCiAJYXNzZXJ0KHNtKTsKIAotCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pbmRleF9fd2Vha3B0cigmaW5kZXgsIHNtLT5vd25lcikpIDwgMCB8fAorCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pbmRleF9fd2Vha3B0cigmaW5kZXgsIHNtLT5yZXBvKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCBHSVRfTU9EVUxFU19GSUxFKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTM0OCw3ICszNDQsNyBAQAogaW50IGdpdF9zdWJtb2R1bGVfYWRkX3RvX2luZGV4KGdpdF9zdWJtb2R1bGUgKnNtLCBpbnQgd3JpdGVfaW5kZXgpCiB7CiAJaW50IGVycm9yOwotCWdpdF9yZXBvc2l0b3J5ICpyZXBvLCAqc21fcmVwbyA9IE5VTEw7CisJZ2l0X3JlcG9zaXRvcnkgKnNtX3JlcG8gPSBOVUxMOwogCWdpdF9pbmRleCAqaW5kZXg7CiAJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOwogCWdpdF9jb21taXQgKmhlYWQ7CkBAIC0zNTcsMTQgKzM1MywxMiBAQAogCiAJYXNzZXJ0KHNtKTsKIAotCXJlcG8gPSBzbS0+b3duZXI7Ci0KIAkvKiBmb3JjZSByZWxvYWQgb2Ygd2QgT0lEIGJ5IGdpdF9zdWJtb2R1bGVfb3BlbiAqLwogCXNtLT5mbGFncyA9IHNtLT5mbGFncyAmIH5HSVRfU1VCTU9EVUxFX1NUQVRVU19fV0RfT0lEX1ZBTElEOwogCi0JaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKCZpbmRleCwgcmVwbykpIDwgMCB8fAorCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pbmRleF9fd2Vha3B0cigmaW5kZXgsIHNtLT5yZXBvKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoCi0JCQkmcGF0aCwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSwgc20tPnBhdGgpKSA8IDAgfHwKKwkJCSZwYXRoLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHNtLT5yZXBvKSwgc20tPnBhdGgpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X3N1Ym1vZHVsZV9vcGVuKCZzbV9yZXBvLCBzbSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0zNzgsNyArMzcyLDggQEAKIAogCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwogCWVudHJ5LnBhdGggPSBzbS0+cGF0aDsKLQlnaXRfaW5kZXhfZW50cnlfX2luaXRfZnJvbV9zdGF0KCZlbnRyeSwgJnN0KTsKKwlnaXRfaW5kZXhfZW50cnlfX2luaXRfZnJvbV9zdGF0KAorCQkmZW50cnksICZzdCwgIShnaXRfaW5kZXhfY2FwcyhpbmRleCkgJiBHSVRfSU5ERVhDQVBfTk9fRklMRU1PREUpKTsKIAogCS8qIGNhbGxpbmcgZ2l0X3N1Ym1vZHVsZV9vcGVuIHdpbGwgaGF2ZSBzZXQgc20tPndkX29pZCBpZiBwb3NzaWJsZSAqLwogCWlmICgoc20tPmZsYWdzICYgR0lUX1NVQk1PRFVMRV9TVEFUVVNfX1dEX09JRF9WQUxJRCkgPT0gMCkgewpAQCAtNDE2LDE1ICs0MTEsMzQgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK2NvbnN0IGNoYXIgKmdpdF9zdWJtb2R1bGVfaWdub3JlX3RvX3N0cihnaXRfc3VibW9kdWxlX2lnbm9yZV90IGlnbm9yZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgKGludClBUlJBWV9TSVpFKF9zbV9pZ25vcmVfbWFwKTsgKytpKQorCQlpZiAoX3NtX2lnbm9yZV9tYXBbaV0ubWFwX3ZhbHVlID09IGlnbm9yZSkKKwkJCXJldHVybiBfc21faWdub3JlX21hcFtpXS5zdHJfbWF0Y2g7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9zdWJtb2R1bGVfdXBkYXRlX3RvX3N0cihnaXRfc3VibW9kdWxlX3VwZGF0ZV90IHVwZGF0ZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgKGludClBUlJBWV9TSVpFKF9zbV91cGRhdGVfbWFwKTsgKytpKQorCQlpZiAoX3NtX3VwZGF0ZV9tYXBbaV0ubWFwX3ZhbHVlID09IHVwZGF0ZSkKKwkJCXJldHVybiBfc21fdXBkYXRlX21hcFtpXS5zdHJfbWF0Y2g7CisJcmV0dXJuIE5VTEw7Cit9CisKIGludCBnaXRfc3VibW9kdWxlX3NhdmUoZ2l0X3N1Ym1vZHVsZSAqc3VibW9kdWxlKQogewogCWludCBlcnJvciA9IDA7CiAJZ2l0X2NvbmZpZ19iYWNrZW5kICptb2RzOwogCWdpdF9idWYga2V5ID0gR0lUX0JVRl9JTklUOworCWNvbnN0IGNoYXIgKnZhbDsKIAogCWFzc2VydChzdWJtb2R1bGUpOwogCi0JbW9kcyA9IG9wZW5fZ2l0bW9kdWxlcyhzdWJtb2R1bGUtPm93bmVyLCB0cnVlLCBOVUxMKTsKKwltb2RzID0gb3Blbl9naXRtb2R1bGVzKHN1Ym1vZHVsZS0+cmVwbywgdHJ1ZSwgTlVMTCk7CiAJaWYgKCFtb2RzKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX1NVQk1PRFVMRSwKIAkJCSJBZGRpbmcgc3VibW9kdWxlcyB0byBhIGJhcmUgcmVwb3NpdG9yeSBpcyBub3Qgc3VwcG9ydGVkIChmb3Igbm93KSIpOwpAQCAtNDQ1LDIyICs0NTksMTQgQEAKIAkJZ290byBjbGVhbnVwOwogCiAJaWYgKCEoZXJyb3IgPSBzdWJtb2R1bGVfY29uZmlnX2tleV90cnVuY19wdXRzKCZrZXksICJ1cGRhdGUiKSkgJiYKLQkJc3VibW9kdWxlLT51cGRhdGUgIT0gR0lUX1NVQk1PRFVMRV9VUERBVEVfREVGQVVMVCkKLQl7Ci0JCWNvbnN0IGNoYXIgKnZhbCA9IChzdWJtb2R1bGUtPnVwZGF0ZSA9PSBHSVRfU1VCTU9EVUxFX1VQREFURV9DSEVDS09VVCkgPwotCQkJTlVMTCA6IF9zbV91cGRhdGVfbWFwW3N1Ym1vZHVsZS0+dXBkYXRlXS5zdHJfbWF0Y2g7CisJCSh2YWwgPSBnaXRfc3VibW9kdWxlX3VwZGF0ZV90b19zdHIoc3VibW9kdWxlLT51cGRhdGUpKSAhPSBOVUxMKQogCQllcnJvciA9IGdpdF9jb25maWdfZmlsZV9zZXRfc3RyaW5nKG1vZHMsIGtleS5wdHIsIHZhbCk7Ci0JfQogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAogCWlmICghKGVycm9yID0gc3VibW9kdWxlX2NvbmZpZ19rZXlfdHJ1bmNfcHV0cygma2V5LCAiaWdub3JlIikpICYmCi0JCXN1Ym1vZHVsZS0+aWdub3JlICE9IEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RFRkFVTFQpCi0JewotCQljb25zdCBjaGFyICp2YWwgPSAoc3VibW9kdWxlLT5pZ25vcmUgPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSkgPwotCQkJTlVMTCA6IF9zbV9pZ25vcmVfbWFwW3N1Ym1vZHVsZS0+aWdub3JlXS5zdHJfbWF0Y2g7CisJCSh2YWwgPSBnaXRfc3VibW9kdWxlX2lnbm9yZV90b19zdHIoc3VibW9kdWxlLT5pZ25vcmUpKSAhPSBOVUxMKQogCQllcnJvciA9IGdpdF9jb25maWdfZmlsZV9zZXRfc3RyaW5nKG1vZHMsIGtleS5wdHIsIHZhbCk7Ci0JfQogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gY2xlYW51cDsKIApAQCAtNDg3LDcgKzQ5Myw3IEBACiBnaXRfcmVwb3NpdG9yeSAqZ2l0X3N1Ym1vZHVsZV9vd25lcihnaXRfc3VibW9kdWxlICpzdWJtb2R1bGUpCiB7CiAJYXNzZXJ0KHN1Ym1vZHVsZSk7Ci0JcmV0dXJuIHN1Ym1vZHVsZS0+b3duZXI7CisJcmV0dXJuIHN1Ym1vZHVsZS0+cmVwbzsKIH0KIAogY29uc3QgY2hhciAqZ2l0X3N1Ym1vZHVsZV9uYW1lKGdpdF9zdWJtb2R1bGUgKnN1Ym1vZHVsZSkKQEAgLTU0NCwxMSArNTUwLDEyIEBACiB7CiAJYXNzZXJ0KHN1Ym1vZHVsZSk7CiAKKwkvKiBsb2FkIHVubGVzcyB3ZSB0aGluayB3ZSBoYXZlIGEgdmFsaWQgb2lkICovCiAJaWYgKCEoc3VibW9kdWxlLT5mbGFncyAmIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9PSURfVkFMSUQpKSB7CiAJCWdpdF9yZXBvc2l0b3J5ICpzdWJyZXBvOwogCiAJCS8qIGNhbGxpbmcgc3VibW9kdWxlIG9wZW4gZ3JhYnMgdGhlIEhFQUQgT0lEIGlmIHBvc3NpYmxlICovCi0JCWlmICghZ2l0X3N1Ym1vZHVsZV9vcGVuKCZzdWJyZXBvLCBzdWJtb2R1bGUpKQorCQlpZiAoIWdpdF9zdWJtb2R1bGVfb3Blbl9iYXJlKCZzdWJyZXBvLCBzdWJtb2R1bGUpKQogCQkJZ2l0X3JlcG9zaXRvcnlfZnJlZShzdWJyZXBvKTsKIAkJZWxzZQogCQkJZ2l0ZXJyX2NsZWFyKCk7CkBAIC01NjMsNyArNTcwLDggQEAKIGdpdF9zdWJtb2R1bGVfaWdub3JlX3QgZ2l0X3N1Ym1vZHVsZV9pZ25vcmUoZ2l0X3N1Ym1vZHVsZSAqc3VibW9kdWxlKQogewogCWFzc2VydChzdWJtb2R1bGUpOwotCXJldHVybiBzdWJtb2R1bGUtPmlnbm9yZTsKKwlyZXR1cm4gKHN1Ym1vZHVsZS0+aWdub3JlIDwgR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSkgPworCQlHSVRfU1VCTU9EVUxFX0lHTk9SRV9OT05FIDogc3VibW9kdWxlLT5pZ25vcmU7CiB9CiAKIGdpdF9zdWJtb2R1bGVfaWdub3JlX3QgZ2l0X3N1Ym1vZHVsZV9zZXRfaWdub3JlKApAQCAtNTczLDcgKzU4MSw3IEBACiAKIAlhc3NlcnQoc3VibW9kdWxlKTsKIAotCWlmIChpZ25vcmUgPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfREVGQVVMVCkKKwlpZiAoaWdub3JlID09IEdJVF9TVUJNT0RVTEVfSUdOT1JFX1JFU0VUKQogCQlpZ25vcmUgPSBzdWJtb2R1bGUtPmlnbm9yZV9kZWZhdWx0OwogCiAJb2xkID0gc3VibW9kdWxlLT5pZ25vcmU7CkBAIC01ODQsNyArNTkyLDggQEAKIGdpdF9zdWJtb2R1bGVfdXBkYXRlX3QgZ2l0X3N1Ym1vZHVsZV91cGRhdGUoZ2l0X3N1Ym1vZHVsZSAqc3VibW9kdWxlKQogewogCWFzc2VydChzdWJtb2R1bGUpOwotCXJldHVybiBzdWJtb2R1bGUtPnVwZGF0ZTsKKwlyZXR1cm4gKHN1Ym1vZHVsZS0+dXBkYXRlIDwgR0lUX1NVQk1PRFVMRV9VUERBVEVfQ0hFQ0tPVVQpID8KKwkJR0lUX1NVQk1PRFVMRV9VUERBVEVfQ0hFQ0tPVVQgOiBzdWJtb2R1bGUtPnVwZGF0ZTsKIH0KIAogZ2l0X3N1Ym1vZHVsZV91cGRhdGVfdCBnaXRfc3VibW9kdWxlX3NldF91cGRhdGUoCkBAIC01OTQsNyArNjAzLDcgQEAKIAogCWFzc2VydChzdWJtb2R1bGUpOwogCi0JaWYgKHVwZGF0ZSA9PSBHSVRfU1VCTU9EVUxFX1VQREFURV9ERUZBVUxUKQorCWlmICh1cGRhdGUgPT0gR0lUX1NVQk1PRFVMRV9VUERBVEVfUkVTRVQpCiAJCXVwZGF0ZSA9IHN1Ym1vZHVsZS0+dXBkYXRlX2RlZmF1bHQ7CiAKIAlvbGQgPSBzdWJtb2R1bGUtPnVwZGF0ZTsKQEAgLTYyNSw2ICs2MzQsNyBAQAogaW50IGdpdF9zdWJtb2R1bGVfaW5pdChnaXRfc3VibW9kdWxlICpzdWJtb2R1bGUsIGludCBvdmVyd3JpdGUpCiB7CiAJaW50IGVycm9yOworCWNvbnN0IGNoYXIgKnZhbDsKIAogCS8qIHdyaXRlICJzdWJtb2R1bGUuTkFNRS51cmwiICovCiAKQEAgLTY0MSwxNCArNjUxLDEwIEBACiAKIAkvKiB3cml0ZSAic3VibW9kdWxlLk5BTUUudXBkYXRlIiBpZiBub3QgZGVmYXVsdCAqLwogCi0JaWYgKHN1Ym1vZHVsZS0+dXBkYXRlID09IEdJVF9TVUJNT0RVTEVfVVBEQVRFX0NIRUNLT1VUKQotCQllcnJvciA9IHN1Ym1vZHVsZV91cGRhdGVfY29uZmlnKAotCQkJc3VibW9kdWxlLCAidXBkYXRlIiwgTlVMTCwgKG92ZXJ3cml0ZSAhPSAwKSwgZmFsc2UpOwotCWVsc2UgaWYgKHN1Ym1vZHVsZS0+dXBkYXRlICE9IEdJVF9TVUJNT0RVTEVfVVBEQVRFX0RFRkFVTFQpCi0JCWVycm9yID0gc3VibW9kdWxlX3VwZGF0ZV9jb25maWcoCi0JCQlzdWJtb2R1bGUsICJ1cGRhdGUiLAotCQkJX3NtX3VwZGF0ZV9tYXBbc3VibW9kdWxlLT51cGRhdGVdLnN0cl9tYXRjaCwKLQkJCShvdmVyd3JpdGUgIT0gMCksIGZhbHNlKTsKKwl2YWwgPSAoc3VibW9kdWxlLT51cGRhdGUgPT0gR0lUX1NVQk1PRFVMRV9VUERBVEVfQ0hFQ0tPVVQpID8KKwkJTlVMTCA6IGdpdF9zdWJtb2R1bGVfdXBkYXRlX3RvX3N0cihzdWJtb2R1bGUtPnVwZGF0ZSk7CisJZXJyb3IgPSBzdWJtb2R1bGVfdXBkYXRlX2NvbmZpZygKKwkJc3VibW9kdWxlLCAidXBkYXRlIiwgdmFsLCAob3ZlcndyaXRlICE9IDApLCBmYWxzZSk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC02NjcsNTEgKzY3Myw3MCBAQAogCQlzdWJtb2R1bGUsICJ1cmwiLCBzdWJtb2R1bGUtPnVybCwgdHJ1ZSwgdHJ1ZSk7CiB9CiAKLWludCBnaXRfc3VibW9kdWxlX29wZW4oCi0JZ2l0X3JlcG9zaXRvcnkgKipzdWJyZXBvLAotCWdpdF9zdWJtb2R1bGUgKnN1Ym1vZHVsZSkKK3N0YXRpYyBpbnQgZ2l0X3N1Ym1vZHVsZV9fb3BlbigKKwlnaXRfcmVwb3NpdG9yeSAqKnN1YnJlcG8sIGdpdF9zdWJtb2R1bGUgKnNtLCBib29sIGJhcmUpCiB7CiAJaW50IGVycm9yOwogCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKLQljb25zdCBjaGFyICp3b3JrZGlyOworCXVuc2lnbmVkIGludCBmbGFncyA9IEdJVF9SRVBPU0lUT1JZX09QRU5fTk9fU0VBUkNIOworCWNvbnN0IGNoYXIgKndkOwogCi0JYXNzZXJ0KHN1Ym1vZHVsZSAmJiBzdWJyZXBvKTsKKwlhc3NlcnQoc20gJiYgc3VicmVwbyk7CiAKLQlyZXBvID0gc3VibW9kdWxlLT5vd25lcjsKLQl3b3JrZGlyID0gZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKTsKKwlpZiAoZ2l0X3JlcG9zaXRvcnlfX2Vuc3VyZV9ub3RfYmFyZSgKKwkJCXNtLT5yZXBvLCAib3BlbiBzdWJtb2R1bGUgcmVwb3NpdG9yeSIpIDwgMCkKKwkJcmV0dXJuIEdJVF9FQkFSRVJFUE87CiAKLQlpZiAoIXdvcmtkaXIpIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfUkVQT1NJVE9SWSwKLQkJCSJDYW5ub3Qgb3BlbiBzdWJtb2R1bGUgcmVwb3NpdG9yeSBpbiBhIGJhcmUgcmVwbyIpOwotCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKLQl9CisJd2QgPSBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHNtLT5yZXBvKTsKIAotCWlmICgoc3VibW9kdWxlLT5mbGFncyAmIEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX1dEKSA9PSAwKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX1JFUE9TSVRPUlksCi0JCQkiQ2Fubm90IG9wZW4gc3VibW9kdWxlIHJlcG9zaXRvcnkgdGhhdCBpcyBub3QgY2hlY2tlZCBvdXQiKTsKLQkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7Ci0JfQotCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHdvcmtkaXIsIHN1Ym1vZHVsZS0+cGF0aCkgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCB3ZCwgc20tPnBhdGgpIDwgMCB8fAorCQlnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwYXRoLnB0ciwgRE9UX0dJVCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X29wZW4oc3VicmVwbywgcGF0aC5wdHIpOworCXNtLT5mbGFncyA9IHNtLT5mbGFncyAmCisJCX4oR0lUX1NVQk1PRFVMRV9TVEFUVVNfSU5fV0QgfAorCQkgIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9PSURfVkFMSUQgfAorCQkgIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9TQ0FOTkVEKTsKKworCWlmIChiYXJlKQorCQlmbGFncyB8PSBHSVRfUkVQT1NJVE9SWV9PUEVOX0JBUkU7CisKKwllcnJvciA9IGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KHN1YnJlcG8sIHBhdGgucHRyLCBmbGFncywgd2QpOworCisJLyogaWYgd2Ugb3BlbmVkIHRoZSBzdWJtb2R1bGUgc3VjY2Vzc2Z1bGx5LCBncmFiIEhFQUQgT0lELCBldGMuICovCisJaWYgKCFlcnJvcikgeworCQlzbS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfSU5fV0QgfAorCQkJR0lUX1NVQk1PRFVMRV9TVEFUVVNfX1dEX1NDQU5ORUQ7CisKKwkJaWYgKCFnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJnNtLT53ZF9vaWQsICpzdWJyZXBvLCBHSVRfSEVBRF9GSUxFKSkKKwkJCXNtLT5mbGFncyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fV0RfT0lEX1ZBTElEOworCQllbHNlCisJCQlnaXRlcnJfY2xlYXIoKTsKKwl9IGVsc2UgaWYgKGdpdF9wYXRoX2V4aXN0cyhwYXRoLnB0cikpIHsKKwkJc20tPmZsYWdzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9TQ0FOTkVEIHwKKwkJCUdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX1dEOworCX0gZWxzZSB7CisJCWdpdF9idWZfcnRydW5jYXRlX2F0X2NoYXIoJnBhdGgsICcvJyk7IC8qIHJlbW92ZSAiLy5naXQiICovCisKKwkJaWYgKGdpdF9wYXRoX2lzZGlyKHBhdGgucHRyKSkKKwkJCXNtLT5mbGFncyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fV0RfU0NBTk5FRDsKKwl9CiAKIAlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCi0JLyogaWYgd2UgaGF2ZSBvcGVuZWQgdGhlIHN1Ym1vZHVsZSBzdWNjZXNzZnVsbHksIGxldCdzIGdyYWIgdGhlIEhFQUQgT0lEICovCi0JaWYgKCFlcnJvcikgewotCQlpZiAoIWdpdF9yZWZlcmVuY2VfbmFtZV90b19pZCgKLQkJCQkmc3VibW9kdWxlLT53ZF9vaWQsICpzdWJyZXBvLCBHSVRfSEVBRF9GSUxFKSkKLQkJCXN1Ym1vZHVsZS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfX1dEX09JRF9WQUxJRDsKLQkJZWxzZQotCQkJZ2l0ZXJyX2NsZWFyKCk7Ci0JfQotCiAJcmV0dXJuIGVycm9yOwogfQogCitpbnQgZ2l0X3N1Ym1vZHVsZV9vcGVuX2JhcmUoZ2l0X3JlcG9zaXRvcnkgKipzdWJyZXBvLCBnaXRfc3VibW9kdWxlICpzbSkKK3sKKwlyZXR1cm4gZ2l0X3N1Ym1vZHVsZV9fb3BlbihzdWJyZXBvLCBzbSwgdHJ1ZSk7Cit9CisKK2ludCBnaXRfc3VibW9kdWxlX29wZW4oZ2l0X3JlcG9zaXRvcnkgKipzdWJyZXBvLCBnaXRfc3VibW9kdWxlICpzbSkKK3sKKwlyZXR1cm4gZ2l0X3N1Ym1vZHVsZV9fb3BlbihzdWJyZXBvLCBzbSwgZmFsc2UpOworfQorCiBpbnQgZ2l0X3N1Ym1vZHVsZV9yZWxvYWRfYWxsKGdpdF9yZXBvc2l0b3J5ICpyZXBvKQogewogCWFzc2VydChyZXBvKTsKQEAgLTcxOSw3NCArNzQ0LDEwMCBAQAogCXJldHVybiBsb2FkX3N1Ym1vZHVsZV9jb25maWcocmVwbyk7CiB9CiAKK3N0YXRpYyB2b2lkIHN1Ym1vZHVsZV91cGRhdGVfZnJvbV9pbmRleF9lbnRyeSgKKwlnaXRfc3VibW9kdWxlICpzbSwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICppZSkKK3sKKwlib29sIGFscmVhZHlfZm91bmQgPSAoc20tPmZsYWdzICYgR0lUX1NVQk1PRFVMRV9TVEFUVVNfSU5fSU5ERVgpICE9IDA7CisKKwlpZiAoIVNfSVNHSVRMSU5LKGllLT5tb2RlKSkgeworCQlpZiAoIWFscmVhZHlfZm91bmQpCisJCQlzbS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0lOREVYX05PVF9TVUJNT0RVTEU7CisJfSBlbHNlIHsKKwkJaWYgKGFscmVhZHlfZm91bmQpCisJCQlzbS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0lOREVYX01VTFRJUExFX0VOVFJJRVM7CisJCWVsc2UKKwkJCWdpdF9vaWRfY3B5KCZzbS0+aW5kZXhfb2lkLCAmaWUtPm9pZCk7CisKKwkJc20tPmZsYWdzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX0lOREVYIHwKKwkJCUdJVF9TVUJNT0RVTEVfU1RBVFVTX19JTkRFWF9PSURfVkFMSUQ7CisJfQorfQorCitzdGF0aWMgaW50IHN1Ym1vZHVsZV91cGRhdGVfaW5kZXgoZ2l0X3N1Ym1vZHVsZSAqc20pCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmllOworCisJaWYgKGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKCZpbmRleCwgc20tPnJlcG8pIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc20tPmZsYWdzID0gc20tPmZsYWdzICYKKwkJfihHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9JTkRFWCB8CisJCSAgR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0lOREVYX09JRF9WQUxJRCk7CisKKwlpZiAoIShpZSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCBzbS0+cGF0aCwgMCkpKQorCQlyZXR1cm4gMDsKKworCXN1Ym1vZHVsZV91cGRhdGVfZnJvbV9pbmRleF9lbnRyeShzbSwgaWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN1Ym1vZHVsZV91cGRhdGVfZnJvbV9oZWFkX2RhdGEoCisJZ2l0X3N1Ym1vZHVsZSAqc20sIG1vZGVfdCBtb2RlLCBjb25zdCBnaXRfb2lkICppZCkKK3sKKwlpZiAoIVNfSVNHSVRMSU5LKG1vZGUpKQorCQlzbS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0hFQURfTk9UX1NVQk1PRFVMRTsKKwllbHNlIHsKKwkJZ2l0X29pZF9jcHkoJnNtLT5oZWFkX29pZCwgaWQpOworCisJCXNtLT5mbGFncyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9IRUFEIHwKKwkJCUdJVF9TVUJNT0RVTEVfU1RBVFVTX19IRUFEX09JRF9WQUxJRDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3VibW9kdWxlX3VwZGF0ZV9oZWFkKGdpdF9zdWJtb2R1bGUgKnN1Ym1vZHVsZSkKK3sKKwlnaXRfdHJlZSAqaGVhZCA9IE5VTEw7CisJZ2l0X3RyZWVfZW50cnkgKnRlID0gTlVMTDsKKworCXN1Ym1vZHVsZS0+ZmxhZ3MgPSBzdWJtb2R1bGUtPmZsYWdzICYKKwkJfihHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9IRUFEIHwKKwkJICBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSEVBRF9PSURfVkFMSUQpOworCisJLyogaWYgd2UgY2FuJ3QgbG9vayB1cCBmaWxlIGluIGN1cnJlbnQgaGVhZCwgdGhlbiBkb25lICovCisJaWYgKGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmaGVhZCwgc3VibW9kdWxlLT5yZXBvKSA8IDAgfHwKKwkJZ2l0X3RyZWVfZW50cnlfYnlwYXRoKCZ0ZSwgaGVhZCwgc3VibW9kdWxlLT5wYXRoKSA8IDApCisJCWdpdGVycl9jbGVhcigpOworCWVsc2UKKwkJc3VibW9kdWxlX3VwZGF0ZV9mcm9tX2hlYWRfZGF0YShzdWJtb2R1bGUsIHRlLT5hdHRyLCAmdGUtPm9pZCk7CisKKwlnaXRfdHJlZV9lbnRyeV9mcmVlKHRlKTsKKwlnaXRfdHJlZV9mcmVlKGhlYWQpOworCXJldHVybiAwOworfQorCiBpbnQgZ2l0X3N1Ym1vZHVsZV9yZWxvYWQoZ2l0X3N1Ym1vZHVsZSAqc3VibW9kdWxlKQogewotCWdpdF9yZXBvc2l0b3J5ICpyZXBvOwotCWdpdF9pbmRleCAqaW5kZXg7Ci0JaW50IGVycm9yOwotCXNpemVfdCBwb3M7Ci0JZ2l0X3RyZWUgKmhlYWQ7CisJaW50IGVycm9yID0gMDsKIAlnaXRfY29uZmlnX2JhY2tlbmQgKm1vZHM7CiAKIAlhc3NlcnQoc3VibW9kdWxlKTsKIAogCS8qIHJlZnJlc2ggaW5kZXggZGF0YSAqLwogCi0JcmVwbyA9IHN1Ym1vZHVsZS0+b3duZXI7Ci0JaWYgKGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKCZpbmRleCwgcmVwbykgPCAwKQorCWlmIChzdWJtb2R1bGVfdXBkYXRlX2luZGV4KHN1Ym1vZHVsZSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlzdWJtb2R1bGUtPmZsYWdzID0gc3VibW9kdWxlLT5mbGFncyAmCi0JCX4oR0lUX1NVQk1PRFVMRV9TVEFUVVNfSU5fSU5ERVggfAotCQkgIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19JTkRFWF9PSURfVkFMSUQpOwotCi0JaWYgKCFnaXRfaW5kZXhfZmluZCgmcG9zLCBpbmRleCwgc3VibW9kdWxlLT5wYXRoKSkgewotCQljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieWluZGV4KGluZGV4LCBwb3MpOwotCi0JCWlmIChTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkpIHsKLQkJCWlmICgoZXJyb3IgPSBzdWJtb2R1bGVfbG9hZF9mcm9tX2luZGV4KHJlcG8sIGVudHJ5KSkgPCAwKQotCQkJCXJldHVybiBlcnJvcjsKLQkJfSBlbHNlIHsKLQkJCXN1Ym1vZHVsZV9tb2RlX21pc21hdGNoKAotCQkJCXJlcG8sIGVudHJ5LT5wYXRoLCBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5ERVhfTk9UX1NVQk1PRFVMRSk7Ci0JCX0KLQl9Ci0KIAkvKiByZWZyZXNoIEhFQUQgdHJlZSBkYXRhICovCiAKLQlpZiAoIShlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmaGVhZCwgcmVwbykpKSB7Ci0JCWdpdF90cmVlX2VudHJ5ICp0ZTsKLQotCQlzdWJtb2R1bGUtPmZsYWdzID0gc3VibW9kdWxlLT5mbGFncyAmCi0JCQl+KEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX0hFQUQgfAotCQkJICBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSEVBRF9PSURfVkFMSUQpOwotCi0JCWlmICghKGVycm9yID0gZ2l0X3RyZWVfZW50cnlfYnlwYXRoKCZ0ZSwgaGVhZCwgc3VibW9kdWxlLT5wYXRoKSkpIHsKLQotCQkJaWYgKFNfSVNHSVRMSU5LKHRlLT5hdHRyKSkgewotCQkJCWVycm9yID0gc3VibW9kdWxlX2xvYWRfZnJvbV9oZWFkKHJlcG8sIHN1Ym1vZHVsZS0+cGF0aCwgJnRlLT5vaWQpOwotCQkJfSBlbHNlIHsKLQkJCQlzdWJtb2R1bGVfbW9kZV9taXNtYXRjaCgKLQkJCQkJcmVwbywgc3VibW9kdWxlLT5wYXRoLAotCQkJCQlHSVRfU1VCTU9EVUxFX1NUQVRVU19fSEVBRF9OT1RfU1VCTU9EVUxFKTsKLQkJCX0KLQotCQkJZ2l0X3RyZWVfZW50cnlfZnJlZSh0ZSk7Ci0JCX0KLQkJZWxzZSBpZiAoZXJyb3IgPT0gR0lUX0VOT1RGT1VORCkgewotCQkJZ2l0ZXJyX2NsZWFyKCk7Ci0JCQllcnJvciA9IDA7Ci0JCX0KLQotCQlnaXRfdHJlZV9mcmVlKGhlYWQpOwotCX0KLQotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKKwlpZiAoc3VibW9kdWxlX3VwZGF0ZV9oZWFkKHN1Ym1vZHVsZSkgPCAwKQorCQlyZXR1cm4gLTE7CiAKIAkvKiByZWZyZXNoIGNvbmZpZyBkYXRhICovCiAKLQlpZiAoKG1vZHMgPSBvcGVuX2dpdG1vZHVsZXMocmVwbywgZmFsc2UsIE5VTEwpKSAhPSBOVUxMKSB7CisJbW9kcyA9IG9wZW5fZ2l0bW9kdWxlcyhzdWJtb2R1bGUtPnJlcG8sIGZhbHNlLCBOVUxMKTsKKwlpZiAobW9kcyAhPSBOVUxMKSB7CiAJCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAogCQlnaXRfYnVmX3NldHMoJnBhdGgsICJzdWJtb2R1bGVcXC4iKTsKQEAgLTc5Nyw3ICs4NDgsNyBAQAogCQkJZXJyb3IgPSAtMTsKIAkJZWxzZQogCQkJZXJyb3IgPSBnaXRfY29uZmlnX2ZpbGVfZm9yZWFjaF9tYXRjaCgKLQkJCQltb2RzLCBwYXRoLnB0ciwgc3VibW9kdWxlX2xvYWRfZnJvbV9jb25maWcsIHJlcG8pOworCQkJCW1vZHMsIHBhdGgucHRyLCBzdWJtb2R1bGVfbG9hZF9mcm9tX2NvbmZpZywgc3VibW9kdWxlLT5yZXBvKTsKIAogCQlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCQlnaXRfY29uZmlnX2ZpbGVfZnJlZShtb2RzKTsKQEAgLTgxNiw0MCArODY3LDkyIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2l0X3N1Ym1vZHVsZV9zdGF0dXMoCi0JdW5zaWduZWQgaW50ICpzdGF0dXMsCi0JZ2l0X3N1Ym1vZHVsZSAqc3VibW9kdWxlKQorc3RhdGljIHZvaWQgc3VibW9kdWxlX2NvcHlfb2lkX21heWJlKAorCWdpdF9vaWQgKnRndCwgY29uc3QgZ2l0X29pZCAqc3JjLCBib29sIHZhbGlkKQogewotCWludCBlcnJvciA9IDA7Ci0JdW5zaWduZWQgaW50IHN0YXR1c192YWw7Ci0KLQlhc3NlcnQoc3RhdHVzICYmIHN1Ym1vZHVsZSk7Ci0KLQlzdGF0dXNfdmFsID0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0NMRUFSX0lOVEVSTkFMKHN1Ym1vZHVsZS0+ZmxhZ3MpOwotCi0JaWYgKHN1Ym1vZHVsZS0+aWdub3JlICE9IEdJVF9TVUJNT0RVTEVfSUdOT1JFX0FMTCkgewotCQlpZiAoIShlcnJvciA9IHN1Ym1vZHVsZV9pbmRleF9zdGF0dXMoJnN0YXR1c192YWwsIHN1Ym1vZHVsZSkpKQotCQkJZXJyb3IgPSBzdWJtb2R1bGVfd2Rfc3RhdHVzKCZzdGF0dXNfdmFsLCBzdWJtb2R1bGUpOworCWlmICh0Z3QpIHsKKwkJaWYgKHZhbGlkKQorCQkJbWVtY3B5KHRndCwgc3JjLCBzaXplb2YoKnRndCkpOworCQllbHNlCisJCQltZW1zZXQodGd0LCAwLCBzaXplb2YoKnRndCkpOwogCX0KLQotCSpzdGF0dXMgPSBzdGF0dXNfdmFsOwotCi0JcmV0dXJuIGVycm9yOwogfQogCi1pbnQgZ2l0X3N1Ym1vZHVsZV9sb2NhdGlvbigKLQl1bnNpZ25lZCBpbnQgKmxvY2F0aW9uX3N0YXR1cywKLQlnaXRfc3VibW9kdWxlICpzdWJtb2R1bGUpCitpbnQgZ2l0X3N1Ym1vZHVsZV9fc3RhdHVzKAorCXVuc2lnbmVkIGludCAqb3V0X3N0YXR1cywKKwlnaXRfb2lkICpvdXRfaGVhZF9pZCwKKwlnaXRfb2lkICpvdXRfaW5kZXhfaWQsCisJZ2l0X29pZCAqb3V0X3dkX2lkLAorCWdpdF9zdWJtb2R1bGUgKnNtLAorCWdpdF9zdWJtb2R1bGVfaWdub3JlX3QgaWduKQogewotCWFzc2VydChsb2NhdGlvbl9zdGF0dXMgJiYgc3VibW9kdWxlKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWdpdF9yZXBvc2l0b3J5ICpzbXJlcG8gPSBOVUxMOwogCi0JKmxvY2F0aW9uX3N0YXR1cyA9IHN1Ym1vZHVsZS0+ZmxhZ3MgJgotCQkoR0lUX1NVQk1PRFVMRV9TVEFUVVNfSU5fSEVBRCB8IEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX0lOREVYIHwKLQkJIEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX0NPTkZJRyB8IEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOX1dEKTsKKwlpZiAoaWduIDwgR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSkKKwkJaWduID0gc20tPmlnbm9yZTsKKworCS8qIG9ubHkgcmV0dXJuIGxvY2F0aW9uIGluZm8gaWYgaWdub3JlID09IGFsbCAqLworCWlmIChpZ24gPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfQUxMKSB7CisJCSpvdXRfc3RhdHVzID0gKHNtLT5mbGFncyAmIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19JTl9GTEFHUyk7CisJCXJldHVybiAwOworCX0KKworCS8qIHJlZnJlc2ggdGhlIGluZGV4IE9JRCAqLworCWlmIChzdWJtb2R1bGVfdXBkYXRlX2luZGV4KHNtKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHJlZnJlc2ggdGhlIEhFQUQgT0lEICovCisJaWYgKHN1Ym1vZHVsZV91cGRhdGVfaGVhZChzbSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBmb3IgaWdub3JlID09IGRpcnR5LCBkb24ndCBzY2FuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAqLworCWlmIChpZ24gPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfRElSVFkpIHsKKwkJLyogZ2l0X3N1Ym1vZHVsZV9vcGVuX2JhcmUgd2lsbCBsb2FkIFdEIE9JRCBkYXRhICovCisJCWlmIChnaXRfc3VibW9kdWxlX29wZW5fYmFyZSgmc21yZXBvLCBzbSkgPCAwKQorCQkJZ2l0ZXJyX2NsZWFyKCk7CisJCWVsc2UKKwkJCWdpdF9yZXBvc2l0b3J5X2ZyZWUoc21yZXBvKTsKKwkJc21yZXBvID0gTlVMTDsKKwl9IGVsc2UgaWYgKGdpdF9zdWJtb2R1bGVfb3Blbigmc21yZXBvLCBzbSkgPCAwKSB7CisJCWdpdGVycl9jbGVhcigpOworCQlzbXJlcG8gPSBOVUxMOworCX0KKworCXN0YXR1cyA9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX19DTEVBUl9JTlRFUk5BTChzbS0+ZmxhZ3MpOworCisJc3VibW9kdWxlX2dldF9pbmRleF9zdGF0dXMoJnN0YXR1cywgc20pOworCXN1Ym1vZHVsZV9nZXRfd2Rfc3RhdHVzKCZzdGF0dXMsIHNtLCBzbXJlcG8sIGlnbik7CisKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHNtcmVwbyk7CisKKwkqb3V0X3N0YXR1cyA9IHN0YXR1czsKKworCXN1Ym1vZHVsZV9jb3B5X29pZF9tYXliZShvdXRfaGVhZF9pZCwgJnNtLT5oZWFkX29pZCwKKwkJKHNtLT5mbGFncyAmIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19IRUFEX09JRF9WQUxJRCkgIT0gMCk7CisJc3VibW9kdWxlX2NvcHlfb2lkX21heWJlKG91dF9pbmRleF9pZCwgJnNtLT5pbmRleF9vaWQsCisJCShzbS0+ZmxhZ3MgJiBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5ERVhfT0lEX1ZBTElEKSAhPSAwKTsKKwlzdWJtb2R1bGVfY29weV9vaWRfbWF5YmUob3V0X3dkX2lkLCAmc20tPndkX29pZCwKKwkJKHNtLT5mbGFncyAmIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9PSURfVkFMSUQpICE9IDApOwogCiAJcmV0dXJuIDA7CiB9CiAKK2ludCBnaXRfc3VibW9kdWxlX3N0YXR1cyh1bnNpZ25lZCBpbnQgKnN0YXR1cywgZ2l0X3N1Ym1vZHVsZSAqc20pCit7CisJYXNzZXJ0KHN0YXR1cyAmJiBzbSk7CisKKwlyZXR1cm4gZ2l0X3N1Ym1vZHVsZV9fc3RhdHVzKHN0YXR1cywgTlVMTCwgTlVMTCwgTlVMTCwgc20sIDApOworfQorCitpbnQgZ2l0X3N1Ym1vZHVsZV9sb2NhdGlvbih1bnNpZ25lZCBpbnQgKmxvY2F0aW9uLCBnaXRfc3VibW9kdWxlICpzbSkKK3sKKwlhc3NlcnQobG9jYXRpb24gJiYgc20pOworCisJcmV0dXJuIGdpdF9zdWJtb2R1bGVfX3N0YXR1cygKKwkJbG9jYXRpb24sIE5VTEwsIE5VTEwsIE5VTEwsIHNtLCBHSVRfU1VCTU9EVUxFX0lHTk9SRV9BTEwpOworfQorCiAKIC8qCiAgKiBJTlRFUk5BTCBGVU5DVElPTlMKQEAgLTg1Nyw1NCArOTYwLDUwIEBACiAKIHN0YXRpYyBnaXRfc3VibW9kdWxlICpzdWJtb2R1bGVfYWxsb2MoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUpCiB7CisJc2l6ZV90IG5hbWVsZW47CiAJZ2l0X3N1Ym1vZHVsZSAqc207CiAKLQlpZiAoIW5hbWUgfHwgIXN0cmxlbihuYW1lKSkgeworCWlmICghbmFtZSB8fCAhKG5hbWVsZW4gPSBzdHJsZW4obmFtZSkpKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX1NVQk1PRFVMRSwgIkludmFsaWQgc3VibW9kdWxlIG5hbWUiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJc20gPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X3N1Ym1vZHVsZSkpOwogCWlmIChzbSA9PSBOVUxMKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBOVUxMOwogCi0Jc20tPnBhdGggPSBzbS0+bmFtZSA9IGdpdF9fc3RyZHVwKG5hbWUpOwotCWlmICghc20tPm5hbWUpCi0JCWdvdG8gZmFpbDsKKwlzbS0+bmFtZSA9IHNtLT5wYXRoID0gZ2l0X19zdHJkdXAobmFtZSk7CisJaWYgKCFzbS0+bmFtZSkgeworCQlnaXRfX2ZyZWUoc20pOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQlzbS0+b3duZXIgPSByZXBvOwotCXNtLT5yZWZjb3VudCA9IDE7CisJR0lUX1JFRkNPVU5UX0lOQyhzbSk7CisJc20tPmlnbm9yZSA9IHNtLT5pZ25vcmVfZGVmYXVsdCA9IEdJVF9TVUJNT0RVTEVfSUdOT1JFX05PTkU7CisJc20tPnVwZGF0ZSA9IHNtLT51cGRhdGVfZGVmYXVsdCA9IEdJVF9TVUJNT0RVTEVfVVBEQVRFX0NIRUNLT1VUOworCXNtLT5yZXBvICAgPSByZXBvOwogCiAJcmV0dXJuIHNtOwotCi1mYWlsOgotCXN1Ym1vZHVsZV9yZWxlYXNlKHNtLCAwKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgc3VibW9kdWxlX3JlbGVhc2UoZ2l0X3N1Ym1vZHVsZSAqc20sIGludCBkZWNyKQorc3RhdGljIHZvaWQgc3VibW9kdWxlX3JlbGVhc2UoZ2l0X3N1Ym1vZHVsZSAqc20pCiB7CiAJaWYgKCFzbSkKIAkJcmV0dXJuOwogCi0Jc20tPnJlZmNvdW50IC09IGRlY3I7CisJaWYgKHNtLT5wYXRoICE9IHNtLT5uYW1lKQorCQlnaXRfX2ZyZWUoc20tPnBhdGgpOworCWdpdF9fZnJlZShzbS0+bmFtZSk7CisJZ2l0X19mcmVlKHNtLT51cmwpOworCWdpdF9fbWVtemVybyhzbSwgc2l6ZW9mKCpzbSkpOworCWdpdF9fZnJlZShzbSk7Cit9CiAKLQlpZiAoc20tPnJlZmNvdW50ID09IDApIHsKLQkJaWYgKHNtLT5uYW1lICE9IHNtLT5wYXRoKSB7Ci0JCQlnaXRfX2ZyZWUoc20tPnBhdGgpOwotCQkJc20tPnBhdGggPSBOVUxMOwotCQl9Ci0KLQkJZ2l0X19mcmVlKHNtLT5uYW1lKTsKLQkJc20tPm5hbWUgPSBOVUxMOwotCi0JCWdpdF9fZnJlZShzbS0+dXJsKTsKLQkJc20tPnVybCA9IE5VTEw7Ci0KLQkJc20tPm93bmVyID0gTlVMTDsKLQotCQlnaXRfX2ZyZWUoc20pOwotCX0KK3ZvaWQgZ2l0X3N1Ym1vZHVsZV9mcmVlKGdpdF9zdWJtb2R1bGUgKnNtKQoreworCWlmICghc20pCisJCXJldHVybjsKKwlHSVRfUkVGQ09VTlRfREVDKHNtLCBzdWJtb2R1bGVfcmVsZWFzZSk7CiB9CiAKIHN0YXRpYyBpbnQgc3VibW9kdWxlX2dldCgKQEAgLTkyNyw2ICsxMDI2LDcgQEAKIAogCWlmICghZ2l0X3N0cm1hcF92YWxpZF9pbmRleChzbWNmZywgcG9zKSkgewogCQlzbSA9IHN1Ym1vZHVsZV9hbGxvYyhyZXBvLCBuYW1lKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKHNtKTsKIAogCQkvKiBpbnNlcnQgdmFsdWUgYXQgbmFtZSAtIGlmIGFub3RoZXIgdGhyZWFkIGJlYXRzIHVzIHRvIGl0LCB0aGVuIHVzZQogCQkgKiB0aGVpciByZWNvcmQgYW5kIHJlbGVhc2Ugb3VyIG93bi4KQEAgLTkzNCwxMCArMTAzNCwxMCBAQAogCQlwb3MgPSBraF9wdXQoc3RyLCBzbWNmZywgc20tPm5hbWUsICZlcnJvcik7CiAKIAkJaWYgKGVycm9yIDwgMCkgewotCQkJc3VibW9kdWxlX3JlbGVhc2Uoc20sIDEpOworCQkJZ2l0X3N1Ym1vZHVsZV9mcmVlKHNtKTsKIAkJCXNtID0gTlVMTDsKIAkJfSBlbHNlIGlmIChlcnJvciA9PSAwKSB7Ci0JCQlzdWJtb2R1bGVfcmVsZWFzZShzbSwgMSk7CisJCQlnaXRfc3VibW9kdWxlX2ZyZWUoc20pOwogCQkJc20gPSBnaXRfc3RybWFwX3ZhbHVlX2F0KHNtY2ZnLCBwb3MpOwogCQl9IGVsc2UgewogCQkJZ2l0X3N0cm1hcF9zZXRfdmFsdWVfYXQoc21jZmcsIHBvcywgc20pOwpAQCAtOTUxLDQzICsxMDUxLDYgQEAKIAlyZXR1cm4gKHNtICE9IE5VTEwpID8gMCA6IC0xOwogfQogCi1zdGF0aWMgaW50IHN1Ym1vZHVsZV9sb2FkX2Zyb21faW5kZXgoCi0JZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnkpCi17Ci0JZ2l0X3N1Ym1vZHVsZSAqc207Ci0KLQlpZiAoc3VibW9kdWxlX2dldCgmc20sIHJlcG8sIGVudHJ5LT5wYXRoLCBOVUxMKSA8IDApCi0JCXJldHVybiAtMTsKLQotCWlmIChzbS0+ZmxhZ3MgJiBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9JTkRFWCkgewotCQlzbS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0lOREVYX01VTFRJUExFX0VOVFJJRVM7Ci0JCXJldHVybiAwOwotCX0KLQotCXNtLT5mbGFncyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9JTkRFWDsKLQotCWdpdF9vaWRfY3B5KCZzbS0+aW5kZXhfb2lkLCAmZW50cnktPm9pZCk7Ci0Jc20tPmZsYWdzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX19JTkRFWF9PSURfVkFMSUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdWJtb2R1bGVfbG9hZF9mcm9tX2hlYWQoCi0JZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGdpdF9vaWQgKm9pZCkKLXsKLQlnaXRfc3VibW9kdWxlICpzbTsKLQotCWlmIChzdWJtb2R1bGVfZ2V0KCZzbSwgcmVwbywgcGF0aCwgTlVMTCkgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlzbS0+ZmxhZ3MgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfSU5fSEVBRDsKLQotCWdpdF9vaWRfY3B5KCZzbS0+aGVhZF9vaWQsIG9pZCk7Ci0Jc20tPmZsYWdzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX19IRUFEX09JRF9WQUxJRDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHN1Ym1vZHVsZV9jb25maWdfZXJyb3IoY29uc3QgY2hhciAqcHJvcGVydHksIGNvbnN0IGNoYXIgKnZhbHVlKQogewogCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsCkBAIC05OTUsNiArMTA1OCwzNCBAQAogCXJldHVybiAtMTsKIH0KIAoraW50IGdpdF9zdWJtb2R1bGVfcGFyc2VfaWdub3JlKGdpdF9zdWJtb2R1bGVfaWdub3JlX3QgKm91dCwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHZhbDsKKworCWlmIChnaXRfY29uZmlnX2xvb2t1cF9tYXBfdmFsdWUoCisJCQkmdmFsLCBfc21faWdub3JlX21hcCwgQVJSQVlfU0laRShfc21faWdub3JlX21hcCksIHZhbHVlKSA8IDApIHsKKwkJKm91dCA9IEdJVF9TVUJNT0RVTEVfSUdOT1JFX05PTkU7CisJCXJldHVybiBzdWJtb2R1bGVfY29uZmlnX2Vycm9yKCJpZ25vcmUiLCB2YWx1ZSk7CisJfQorCisJKm91dCA9IChnaXRfc3VibW9kdWxlX2lnbm9yZV90KXZhbDsKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9zdWJtb2R1bGVfcGFyc2VfdXBkYXRlKGdpdF9zdWJtb2R1bGVfdXBkYXRlX3QgKm91dCwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHZhbDsKKworCWlmIChnaXRfY29uZmlnX2xvb2t1cF9tYXBfdmFsdWUoCisJCQkmdmFsLCBfc21fdXBkYXRlX21hcCwgQVJSQVlfU0laRShfc21fdXBkYXRlX21hcCksIHZhbHVlKSA8IDApIHsKKwkJKm91dCA9IEdJVF9TVUJNT0RVTEVfVVBEQVRFX0NIRUNLT1VUOworCQlyZXR1cm4gc3VibW9kdWxlX2NvbmZpZ19lcnJvcigidXBkYXRlIiwgdmFsdWUpOworCX0KKworCSpvdXQgPSAoZ2l0X3N1Ym1vZHVsZV91cGRhdGVfdCl2YWw7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc3VibW9kdWxlX2xvYWRfZnJvbV9jb25maWcoCiAJY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnksIHZvaWQgKmRhdGEpCiB7CkBAIC0xMDEyLDggKzExMDMsMTAgQEAKIAogCW5hbWVzdGFydCA9IGtleSArIHN0cmxlbigic3VibW9kdWxlLiIpOwogCXByb3BlcnR5ICA9IHN0cnJjaHIobmFtZXN0YXJ0LCAnLicpOwotCWlmIChwcm9wZXJ0eSA9PSBOVUxMKQorCisJaWYgKCFwcm9wZXJ0eSB8fCAocHJvcGVydHkgPT0gbmFtZXN0YXJ0KSkKIAkJcmV0dXJuIDA7CisKIAlwcm9wZXJ0eSsrOwogCWlzX3BhdGggPSAoc3RyY2FzZWNtcChwcm9wZXJ0eSwgInBhdGgiKSA9PSAwKTsKIApAQCAtMTA0NywxMSArMTE0MCwxMSBAQAogCQlnaXRfc3RybWFwX2luc2VydDIoc21jZmcsIGFsdGVybmF0ZSwgc20sIG9sZF9zbSwgZXJyb3IpOwogCiAJCWlmIChlcnJvciA+PSAwKQotCQkJc20tPnJlZmNvdW50Kys7IC8qIGluc2VydGVkIHVuZGVyIGEgbmV3IGtleSAqLworCQkJR0lUX1JFRkNPVU5UX0lOQyhzbSk7IC8qIGluc2VydGVkIHVuZGVyIGEgbmV3IGtleSAqLwogCiAJCS8qIGlmIHdlIHJlcGxhY2VkIGFuIG9sZCBtb2R1bGUgdW5kZXIgdGhpcyBrZXksIHJlbGVhc2UgdGhlIG9sZCBvbmUgKi8KIAkJaWYgKG9sZF9zbSAmJiAoKGdpdF9zdWJtb2R1bGUgKilvbGRfc20pICE9IHNtKSB7Ci0JCQlzdWJtb2R1bGVfcmVsZWFzZShvbGRfc20sIDEpOworCQkJZ2l0X3N1Ym1vZHVsZV9mcmVlKG9sZF9zbSk7CiAJCQkvKiBUT0RPOiBsb2cgd2FybmluZyBhYm91dCBtdWx0aXBsZSBzdWJtb2R1bGVzIHdpdGggc2FtZSBwYXRoICovCiAJCX0KIAl9CkBAIC0xMDc2LDIyICsxMTY5LDE4IEBACiAJCQlyZXR1cm4gLTE7CiAJfQogCWVsc2UgaWYgKHN0cmNhc2VjbXAocHJvcGVydHksICJ1cGRhdGUiKSA9PSAwKSB7Ci0JCWludCB2YWw7Ci0JCWlmIChnaXRfY29uZmlnX2xvb2t1cF9tYXBfdmFsdWUoCi0JCQkmdmFsLCBfc21fdXBkYXRlX21hcCwgQVJSQVlfU0laRShfc21fdXBkYXRlX21hcCksIHZhbHVlKSA8IDApCi0JCQlyZXR1cm4gc3VibW9kdWxlX2NvbmZpZ19lcnJvcigidXBkYXRlIiwgdmFsdWUpOwotCQlzbS0+dXBkYXRlX2RlZmF1bHQgPSBzbS0+dXBkYXRlID0gKGdpdF9zdWJtb2R1bGVfdXBkYXRlX3QpdmFsOworCQlpZiAoZ2l0X3N1Ym1vZHVsZV9wYXJzZV91cGRhdGUoJnNtLT51cGRhdGUsIHZhbHVlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCXNtLT51cGRhdGVfZGVmYXVsdCA9IHNtLT51cGRhdGU7CiAJfQogCWVsc2UgaWYgKHN0cmNhc2VjbXAocHJvcGVydHksICJmZXRjaFJlY3Vyc2VTdWJtb2R1bGVzIikgPT0gMCkgewogCQlpZiAoZ2l0X19wYXJzZV9ib29sKCZzbS0+ZmV0Y2hfcmVjdXJzZSwgdmFsdWUpIDwgMCkKIAkJCXJldHVybiBzdWJtb2R1bGVfY29uZmlnX2Vycm9yKCJmZXRjaFJlY3Vyc2VTdWJtb2R1bGVzIiwgdmFsdWUpOwogCX0KIAllbHNlIGlmIChzdHJjYXNlY21wKHByb3BlcnR5LCAiaWdub3JlIikgPT0gMCkgewotCQlpbnQgdmFsOwotCQlpZiAoZ2l0X2NvbmZpZ19sb29rdXBfbWFwX3ZhbHVlKAotCQkJJnZhbCwgX3NtX2lnbm9yZV9tYXAsIEFSUkFZX1NJWkUoX3NtX2lnbm9yZV9tYXApLCB2YWx1ZSkgPCAwKQotCQkJcmV0dXJuIHN1Ym1vZHVsZV9jb25maWdfZXJyb3IoImlnbm9yZSIsIHZhbHVlKTsKLQkJc20tPmlnbm9yZV9kZWZhdWx0ID0gc20tPmlnbm9yZSA9IChnaXRfc3VibW9kdWxlX2lnbm9yZV90KXZhbDsKKwkJaWYgKGdpdF9zdWJtb2R1bGVfcGFyc2VfaWdub3JlKCZzbS0+aWdub3JlLCB2YWx1ZSkgPCAwKQorCQkJcmV0dXJuIC0xOworCQlzbS0+aWdub3JlX2RlZmF1bHQgPSBzbS0+aWdub3JlOwogCX0KIAkvKiBpZ25vcmUgb3RoZXIgdW5rbm93biBzdWJtb2R1bGUgcHJvcGVydGllcyAqLwogCkBAIC0xMTAxLDEzICsxMTkwLDE1IEBACiBzdGF0aWMgaW50IHN1Ym1vZHVsZV9sb2FkX2Zyb21fd2RfbGl0ZSgKIAlnaXRfc3VibW9kdWxlICpzbSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcGF5bG9hZCkKIHsKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGdpdF9zdWJtb2R1bGVfb3duZXIoc20pOwogCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAogCUdJVF9VTlVTRUQobmFtZSk7CiAJR0lUX1VOVVNFRChwYXlsb2FkKTsKIAotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pLCBzbS0+cGF0aCkgPCAwKQorCWlmIChnaXRfcmVwb3NpdG9yeV9pc19iYXJlKHNtLT5yZXBvKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihzbS0+cmVwbyksIHNtLT5wYXRoKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChnaXRfcGF0aF9pc2RpcihwYXRoLnB0cikpCkBAIC0xMTIxLDE4ICsxMjEyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3VibW9kdWxlX21vZGVfbWlzbWF0Y2goCi0JZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFnKQotewotCWtoaXRlcl90IHBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KHJlcG8tPnN1Ym1vZHVsZXMsIHBhdGgpOwotCi0JaWYgKGdpdF9zdHJtYXBfdmFsaWRfaW5kZXgocmVwby0+c3VibW9kdWxlcywgcG9zKSkgewotCQlnaXRfc3VibW9kdWxlICpzbSA9IGdpdF9zdHJtYXBfdmFsdWVfYXQocmVwby0+c3VibW9kdWxlcywgcG9zKTsKLQotCQlzbS0+ZmxhZ3MgfD0gZmxhZzsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgbG9hZF9zdWJtb2R1bGVfY29uZmlnX2Zyb21faW5kZXgoCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGdpdF9vaWQgKmdpdG1vZHVsZXNfb2lkKQogewpAQCAtMTE0NiwxOCArMTIyNSwyMSBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAl3aGlsZSAoIShlcnJvciA9IGdpdF9pdGVyYXRvcl9hZHZhbmNlKCZlbnRyeSwgaSkpKSB7CisJCWtoaXRlcl90IHBvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KHJlcG8tPnN1Ym1vZHVsZXMsIGVudHJ5LT5wYXRoKTsKKwkJZ2l0X3N1Ym1vZHVsZSAqc207CiAKLQkJaWYgKFNfSVNHSVRMSU5LKGVudHJ5LT5tb2RlKSkgewotCQkJZXJyb3IgPSBzdWJtb2R1bGVfbG9hZF9mcm9tX2luZGV4KHJlcG8sIGVudHJ5KTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQlzdWJtb2R1bGVfbW9kZV9taXNtYXRjaCgKLQkJCQlyZXBvLCBlbnRyeS0+cGF0aCwgR0lUX1NVQk1PRFVMRV9TVEFUVVNfX0lOREVYX05PVF9TVUJNT0RVTEUpOworCQlpZiAoZ2l0X3N0cm1hcF92YWxpZF9pbmRleChyZXBvLT5zdWJtb2R1bGVzLCBwb3MpKSB7CisJCQlzbSA9IGdpdF9zdHJtYXBfdmFsdWVfYXQocmVwby0+c3VibW9kdWxlcywgcG9zKTsKIAotCQkJaWYgKHN0cmNtcChlbnRyeS0+cGF0aCwgR0lUX01PRFVMRVNfRklMRSkgPT0gMCkKLQkJCQlnaXRfb2lkX2NweShnaXRtb2R1bGVzX29pZCwgJmVudHJ5LT5vaWQpOwotCQl9CisJCQlpZiAoU19JU0dJVExJTksoZW50cnktPm1vZGUpKQorCQkJCXN1Ym1vZHVsZV91cGRhdGVfZnJvbV9pbmRleF9lbnRyeShzbSwgZW50cnkpOworCQkJZWxzZQorCQkJCXNtLT5mbGFncyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSU5ERVhfTk9UX1NVQk1PRFVMRTsKKwkJfSBlbHNlIGlmIChTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkpIHsKKwkJCWlmICghc3VibW9kdWxlX2dldCgmc20sIHJlcG8sIGVudHJ5LT5wYXRoLCBOVUxMKSkKKwkJCQlzdWJtb2R1bGVfdXBkYXRlX2Zyb21faW5kZXhfZW50cnkoc20sIGVudHJ5KTsKKwkJfSBlbHNlIGlmIChzdHJjbXAoZW50cnktPnBhdGgsIEdJVF9NT0RVTEVTX0ZJTEUpID09IDApCisJCQlnaXRfb2lkX2NweShnaXRtb2R1bGVzX29pZCwgJmVudHJ5LT5vaWQpOwogCX0KIAogCWlmIChlcnJvciA9PSBHSVRfSVRFUk9WRVIpCkBAIC0xMTc2LDggKzEyNTgsMTEgQEAKIAlnaXRfaXRlcmF0b3IgKmk7CiAJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKIAotCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJmhlYWQsIHJlcG8pKSA8IDApCi0JCXJldHVybiBlcnJvcjsKKwkvKiBpZiB3ZSBjYW4ndCBsb29rIHVwIGN1cnJlbnQgaGVhZCwgdGhlbiB0aGVyZSdzIG5vIHN1Ym1vZHVsZSBpbiBpdCAqLworCWlmIChnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJmhlYWQsIHJlcG8pIDwgMCkgeworCQlnaXRlcnJfY2xlYXIoKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJaWYgKChlcnJvciA9IGdpdF9pdGVyYXRvcl9mb3JfdHJlZSgmaSwgaGVhZCwgMCwgTlVMTCwgTlVMTCkpIDwgMCkgewogCQlnaXRfdHJlZV9mcmVlKGhlYWQpOwpAQCAtMTE4NSwxOCArMTI3MCwyNCBAQAogCX0KIAogCXdoaWxlICghKGVycm9yID0gZ2l0X2l0ZXJhdG9yX2FkdmFuY2UoJmVudHJ5LCBpKSkpIHsKKwkJa2hpdGVyX3QgcG9zID0gZ2l0X3N0cm1hcF9sb29rdXBfaW5kZXgocmVwby0+c3VibW9kdWxlcywgZW50cnktPnBhdGgpOworCQlnaXRfc3VibW9kdWxlICpzbTsKIAotCQlpZiAoU19JU0dJVExJTksoZW50cnktPm1vZGUpKSB7Ci0JCQllcnJvciA9IHN1Ym1vZHVsZV9sb2FkX2Zyb21faGVhZChyZXBvLCBlbnRyeS0+cGF0aCwgJmVudHJ5LT5vaWQpOwotCQkJaWYgKGVycm9yIDwgMCkKLQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCXN1Ym1vZHVsZV9tb2RlX21pc21hdGNoKAotCQkJCXJlcG8sIGVudHJ5LT5wYXRoLCBHSVRfU1VCTU9EVUxFX1NUQVRVU19fSEVBRF9OT1RfU1VCTU9EVUxFKTsKKwkJaWYgKGdpdF9zdHJtYXBfdmFsaWRfaW5kZXgocmVwby0+c3VibW9kdWxlcywgcG9zKSkgeworCQkJc20gPSBnaXRfc3RybWFwX3ZhbHVlX2F0KHJlcG8tPnN1Ym1vZHVsZXMsIHBvcyk7CiAKLQkJCWlmIChzdHJjbXAoZW50cnktPnBhdGgsIEdJVF9NT0RVTEVTX0ZJTEUpID09IDAgJiYKLQkJCQlnaXRfb2lkX2lzemVybyhnaXRtb2R1bGVzX29pZCkpCi0JCQkJZ2l0X29pZF9jcHkoZ2l0bW9kdWxlc19vaWQsICZlbnRyeS0+b2lkKTsKKwkJCWlmIChTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkpCisJCQkJc3VibW9kdWxlX3VwZGF0ZV9mcm9tX2hlYWRfZGF0YSgKKwkJCQkJc20sIGVudHJ5LT5tb2RlLCAmZW50cnktPm9pZCk7CisJCQllbHNlCisJCQkJc20tPmZsYWdzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX19IRUFEX05PVF9TVUJNT0RVTEU7CisJCX0gZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnktPm1vZGUpKSB7CisJCQlpZiAoIXN1Ym1vZHVsZV9nZXQoJnNtLCByZXBvLCBlbnRyeS0+cGF0aCwgTlVMTCkpCisJCQkJc3VibW9kdWxlX3VwZGF0ZV9mcm9tX2hlYWRfZGF0YSgKKwkJCQkJc20sIGVudHJ5LT5tb2RlLCAmZW50cnktPm9pZCk7CisJCX0gZWxzZSBpZiAoc3RyY21wKGVudHJ5LT5wYXRoLCBHSVRfTU9EVUxFU19GSUxFKSA9PSAwICYmCisJCQkJICAgZ2l0X29pZF9pc3plcm8oZ2l0bW9kdWxlc19vaWQpKSB7CisJCQlnaXRfb2lkX2NweShnaXRtb2R1bGVzX29pZCwgJmVudHJ5LT5vaWQpOwogCQl9CiAJfQogCkBAIC0xMzgxLDcgKzE0NzIsNyBAQAogCiAJYXNzZXJ0KHN1Ym1vZHVsZSk7CiAKLQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X2NvbmZpZ19fd2Vha3B0cigmY29uZmlnLCBzdWJtb2R1bGUtPm93bmVyKTsKKwllcnJvciA9IGdpdF9yZXBvc2l0b3J5X2NvbmZpZ19fd2Vha3B0cigmY29uZmlnLCBzdWJtb2R1bGUtPnJlcG8pOwogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMTQwOSwxMSArMTUwMCwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBzdWJtb2R1bGVfaW5kZXhfc3RhdHVzKHVuc2lnbmVkIGludCAqc3RhdHVzLCBnaXRfc3VibW9kdWxlICpzbSkKK3N0YXRpYyB2b2lkIHN1Ym1vZHVsZV9nZXRfaW5kZXhfc3RhdHVzKHVuc2lnbmVkIGludCAqc3RhdHVzLCBnaXRfc3VibW9kdWxlICpzbSkKIHsKIAljb25zdCBnaXRfb2lkICpoZWFkX29pZCAgPSBnaXRfc3VibW9kdWxlX2hlYWRfaWQoc20pOwogCWNvbnN0IGdpdF9vaWQgKmluZGV4X29pZCA9IGdpdF9zdWJtb2R1bGVfaW5kZXhfaWQoc20pOwogCisJKnN0YXR1cyA9ICpzdGF0dXMgJiB+R0lUX1NVQk1PRFVMRV9TVEFUVVNfX0lOREVYX0ZMQUdTOworCiAJaWYgKCFoZWFkX29pZCkgewogCQlpZiAoaW5kZXhfb2lkKQogCQkJKnN0YXR1cyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTkRFWF9BRERFRDsKQEAgLTE0MjIsMjcgKzE1MTUsMjMgQEAKIAkJKnN0YXR1cyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTkRFWF9ERUxFVEVEOwogCWVsc2UgaWYgKCFnaXRfb2lkX2VxdWFsKGhlYWRfb2lkLCBpbmRleF9vaWQpKQogCQkqc3RhdHVzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX0lOREVYX01PRElGSUVEOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3VibW9kdWxlX3dkX3N0YXR1cyh1bnNpZ25lZCBpbnQgKnN0YXR1cywgZ2l0X3N1Ym1vZHVsZSAqc20pCitzdGF0aWMgdm9pZCBzdWJtb2R1bGVfZ2V0X3dkX3N0YXR1cygKKwl1bnNpZ25lZCBpbnQgKnN0YXR1cywKKwlnaXRfc3VibW9kdWxlICpzbSwKKwlnaXRfcmVwb3NpdG9yeSAqc21fcmVwbywKKwlnaXRfc3VibW9kdWxlX2lnbm9yZV90IGlnbikKIHsKLQlpbnQgZXJyb3IgPSAwOwotCWNvbnN0IGdpdF9vaWQgKndkX29pZCwgKmluZGV4X29pZDsKLQlnaXRfcmVwb3NpdG9yeSAqc21fcmVwbyA9IE5VTEw7CisJY29uc3QgZ2l0X29pZCAqaW5kZXhfb2lkID0gZ2l0X3N1Ym1vZHVsZV9pbmRleF9pZChzbSk7CisJY29uc3QgZ2l0X29pZCAqd2Rfb2lkID0KKwkJKHNtLT5mbGFncyAmIEdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9PSURfVkFMSUQpID8gJnNtLT53ZF9vaWQgOiBOVUxMOworCWdpdF90cmVlICpzbV9oZWFkID0gTlVMTDsKKwlnaXRfaW5kZXggKmluZGV4ID0gTlVMTDsKKwlnaXRfZGlmZl9vcHRpb25zIG9wdCA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZiAqZGlmZjsKIAotCS8qIG9wZW4gcmVwbyBub3cgaWYgd2UgbmVlZCBpdCAoc28gd2RfaWQoKSBjYWxsIHdvbid0IHJlb3BlbikgKi8KLQlpZiAoKHNtLT5pZ25vcmUgPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSB8fAotCQkgc20tPmlnbm9yZSA9PSBHSVRfU1VCTU9EVUxFX0lHTk9SRV9VTlRSQUNLRUQpICYmCi0JCShzbS0+ZmxhZ3MgJiBHSVRfU1VCTU9EVUxFX1NUQVRVU19JTl9XRCkgIT0gMCkKLQl7Ci0JCWlmICgoZXJyb3IgPSBnaXRfc3VibW9kdWxlX29wZW4oJnNtX3JlcG8sIHNtKSkgPCAwKQotCQkJcmV0dXJuIGVycm9yOwotCX0KLQotCWluZGV4X29pZCA9IGdpdF9zdWJtb2R1bGVfaW5kZXhfaWQoc20pOwotCXdkX29pZCAgICA9IGdpdF9zdWJtb2R1bGVfd2RfaWQoc20pOworCSpzdGF0dXMgPSAqc3RhdHVzICYgfkdJVF9TVUJNT0RVTEVfU1RBVFVTX19XRF9GTEFHUzsKIAogCWlmICghaW5kZXhfb2lkKSB7CiAJCWlmICh3ZF9vaWQpCkBAIC0xNDU4LDU5ICsxNTQ3LDUxIEBACiAJZWxzZSBpZiAoIWdpdF9vaWRfZXF1YWwoaW5kZXhfb2lkLCB3ZF9vaWQpKQogCQkqc3RhdHVzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX1dEX01PRElGSUVEOwogCi0JaWYgKHNtX3JlcG8gIT0gTlVMTCkgewotCQlnaXRfdHJlZSAqc21faGVhZDsKLQkJZ2l0X2RpZmZfb3B0aW9ucyBvcHQgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJLyogaWYgd2UgaGF2ZSBubyByZXBvLCB0aGVuIHdlJ3JlIGRvbmUgKi8KKwlpZiAoIXNtX3JlcG8pCisJCXJldHVybjsKIAotCQkvKiB0aGUgZGlmZnMgYmVsb3cgY291bGQgYmUgb3B0aW1pemVkIHdpdGggYW4gZWFybHkgdGVybWluYXRpb24KLQkJICogb3B0aW9uIHRvIHRoZSBnaXRfZGlmZiBmdW5jdGlvbnMsIGJ1dCBmb3Igbm93IHRoaXMgaXMgc3VmZmljaWVudAotCQkgKiAoYW5kIGNlcnRhaW5seSBubyB3b3JzZSB0aGF0IHdoYXQgY29yZSBnaXQgZG9lcykuCi0JCSAqLworCS8qIHRoZSBkaWZmcyBiZWxvdyBjb3VsZCBiZSBvcHRpbWl6ZWQgd2l0aCBhbiBlYXJseSB0ZXJtaW5hdGlvbgorCSAqIG9wdGlvbiB0byB0aGUgZ2l0X2RpZmYgZnVuY3Rpb25zLCBidXQgZm9yIG5vdyB0aGlzIGlzIHN1ZmZpY2llbnQKKwkgKiAoYW5kIGNlcnRhaW5seSBubyB3b3JzZSB0aGF0IHdoYXQgY29yZSBnaXQgZG9lcykuCisJICovCiAKLQkJLyogcGVyZm9ybSBoZWFkLXRvLWluZGV4IGRpZmYgb24gc3VibW9kdWxlICovCisJaWYgKGlnbiA9PSBHSVRfU1VCTU9EVUxFX0lHTk9SRV9OT05FKQorCQlvcHQuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7CiAKLQkJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmc21faGVhZCwgc21fcmVwbykpIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKKwkodm9pZClnaXRfcmVwb3NpdG9yeV9pbmRleF9fd2Vha3B0cigmaW5kZXgsIHNtX3JlcG8pOwogCi0JCWlmIChzbS0+aWdub3JlID09IEdJVF9TVUJNT0RVTEVfSUdOT1JFX05PTkUpCi0JCQlvcHQuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7Ci0KLQkJZXJyb3IgPSBnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZkaWZmLCBzbV9yZXBvLCBzbV9oZWFkLCBOVUxMLCAmb3B0KTsKLQotCQlpZiAoIWVycm9yKSB7CisJLyogaWYgd2UgZG9uJ3QgaGF2ZSBhbiB1bmJvcm4gaGVhZCwgY2hlY2sgZGlmZiB3aXRoIGluZGV4ICovCisJaWYgKGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmc21faGVhZCwgc21fcmVwbykgPCAwKQorCQlnaXRlcnJfY2xlYXIoKTsKKwllbHNlIHsKKwkJLyogcGVyZm9ybSBoZWFkIHRvIGluZGV4IGRpZmYgb24gc3VibW9kdWxlICovCisJCWlmIChnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZkaWZmLCBzbV9yZXBvLCBzbV9oZWFkLCBpbmRleCwgJm9wdCkgPCAwKQorCQkJZ2l0ZXJyX2NsZWFyKCk7CisJCWVsc2UgewogCQkJaWYgKGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikgPiAwKQogCQkJCSpzdGF0dXMgfD0gR0lUX1NVQk1PRFVMRV9TVEFUVVNfV0RfSU5ERVhfTU9ESUZJRUQ7Ci0KLQkJCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwkJCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJCQlkaWZmID0gTlVMTDsKIAkJfQogCiAJCWdpdF90cmVlX2ZyZWUoc21faGVhZCk7Ci0KLQkJaWYgKGVycm9yIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKLQotCQkvKiBwZXJmb3JtIGluZGV4LXRvLXdvcmtkaXIgZGlmZiBvbiBzdWJtb2R1bGUgKi8KLQotCQllcnJvciA9IGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIHNtX3JlcG8sIE5VTEwsICZvcHQpOwotCi0JCWlmICghZXJyb3IpIHsKLQkJCXNpemVfdCB1bnRyYWNrZWQgPQotCQkJCWdpdF9kaWZmX251bV9kZWx0YXNfb2ZfdHlwZShkaWZmLCBHSVRfREVMVEFfVU5UUkFDS0VEKTsKLQotCQkJaWYgKHVudHJhY2tlZCA+IDApCi0JCQkJKnN0YXR1cyB8PSBHSVRfU1VCTU9EVUxFX1NUQVRVU19XRF9VTlRSQUNLRUQ7Ci0KLQkJCWlmIChnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpICE9IHVudHJhY2tlZCkKLQkJCQkqc3RhdHVzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX1dEX1dEX01PRElGSUVEOwotCi0JCQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0JCQlkaWZmID0gTlVMTDsKLQkJfQotCi0JCWdpdF9yZXBvc2l0b3J5X2ZyZWUoc21fcmVwbyk7CiAJfQogCi0JcmV0dXJuIGVycm9yOworCS8qIHBlcmZvcm0gaW5kZXgtdG8td29ya2RpciBkaWZmIG9uIHN1Ym1vZHVsZSAqLworCWlmIChnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBzbV9yZXBvLCBpbmRleCwgJm9wdCkgPCAwKQorCQlnaXRlcnJfY2xlYXIoKTsKKwllbHNlIHsKKwkJc2l6ZV90IHVudHJhY2tlZCA9CisJCQlnaXRfZGlmZl9udW1fZGVsdGFzX29mX3R5cGUoZGlmZiwgR0lUX0RFTFRBX1VOVFJBQ0tFRCk7CisKKwkJaWYgKHVudHJhY2tlZCA+IDApCisJCQkqc3RhdHVzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX1dEX1VOVFJBQ0tFRDsKKworCQlpZiAoZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSAhPSB1bnRyYWNrZWQpCisJCQkqc3RhdHVzIHw9IEdJVF9TVUJNT0RVTEVfU1RBVFVTX1dEX1dEX01PRElGSUVEOworCisJCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisJCWRpZmYgPSBOVUxMOworCX0KIH0KZGlmZiAtLWdpdCBhL3NyYy9zdWJtb2R1bGUuaCBiL3NyYy9zdWJtb2R1bGUuaAppbmRleCBiYThlMjUxLi5iMDU5Mzc1IDEwMDY0NAotLS0gYS9zcmMvc3VibW9kdWxlLmgKKysrIGIvc3JjL3N1Ym1vZHVsZS5oCkBAIC03LDYgKzcsMTAgQEAKICNpZm5kZWYgSU5DTFVERV9zdWJtb2R1bGVfaF9fCiAjZGVmaW5lIElOQ0xVREVfc3VibW9kdWxlX2hfXwogCisjaW5jbHVkZSAiZ2l0Mi9zdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJnaXQyL3JlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJmaWxlb3BzLmgiCisKIC8qIE5vdGVzOgogICoKICAqIFN1Ym1vZHVsZSBpbmZvcm1hdGlvbiBjYW4gYmUgaW4gZm91ciBwbGFjZXM6IHRoZSBpbmRleCwgdGhlIGNvbmZpZyBmaWxlcwpAQCAtNDQsNDQgKzQ4LDUxIEBACiAgKiBhbiBlbnRyeSBmb3IgZXZlcnkgc3VibW9kdWxlIGZvdW5kIGluIHRoZSBIRUFEIGFuZCBpbmRleCwgYW5kIGZvciBldmVyeQogICogc3VibW9kdWxlIGRlc2NyaWJlZCBpbiAuZ2l0bW9kdWxlcy4gIFRoZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6CiAgKgotICogLSBgb3duZXJgIGlzIHRoZSBnaXRfcmVwb3NpdG9yeSBjb250YWluaW5nIHRoaXMgc3VibW9kdWxlCisgKiAtIGByY2AgdHJhY2tzIHRoZSByZWZjb3VudCBvZiBob3cgbWFueSBoYXNoIHRhYmxlIGVudHJpZXMgaW4gdGhlCisgKiAgIGdpdF9zdWJtb2R1bGVfY2FjaGUgdGhlcmUgYXJlIGZvciB0aGlzIHN1Ym1vZHVsZS4gIEl0IG9ubHkgY29tZXMgaW50bworICogICBwbGF5IGlmIHRoZSBuYW1lIGFuZCBwYXRoIG9mIHRoZSBzdWJtb2R1bGUgZGlmZmVyLgorICoKICAqIC0gYG5hbWVgIGlzIHRoZSBuYW1lIG9mIHRoZSBzdWJtb2R1bGUgZnJvbSAuZ2l0bW9kdWxlcy4KICAqIC0gYHBhdGhgIGlzIHRoZSBwYXRoIHRvIHRoZSBzdWJtb2R1bGUgZnJvbSB0aGUgcmVwbyByb290LiAgSXQgaXMgYWxtb3N0CiAgKiAgICBhbHdheXMgdGhlIHNhbWUgYXMgYG5hbWVgLgogICogLSBgdXJsYCBpcyB0aGUgdXJsIGZvciB0aGUgc3VibW9kdWxlLgotICogLSBgdHJlZV9vaWRgIGlzIHRoZSBTSEExIGZvciB0aGUgc3VibW9kdWxlIHBhdGggaW4gdGhlIHJlcG8gSEVBRC4KLSAqIC0gYGluZGV4X29pZGAgaXMgdGhlIFNIQTEgZm9yIHRoZSBzdWJtb2R1bGUgcmVjb3JkZWQgaW4gdGhlIGluZGV4LgotICogLSBgd29ya2Rpcl9vaWRgIGlzIHRoZSBTSEExIGZvciB0aGUgSEVBRCBvZiB0aGUgY2hlY2tlZCBvdXQgc3VibW9kdWxlLgogICogLSBgdXBkYXRlYCBpcyBhIGdpdF9zdWJtb2R1bGVfdXBkYXRlX3QgdmFsdWUgLSBzZWUgZ2l0bW9kdWxlcyg1KSB1cGRhdGUuCisgKiAtIGB1cGRhdGVfZGVmYXVsdGAgaXMgdGhlIHVwZGF0ZSB2YWx1ZSBmcm9tIHRoZSBjb25maWcKICAqIC0gYGlnbm9yZWAgaXMgYSBnaXRfc3VibW9kdWxlX2lnbm9yZV90IHZhbHVlIC0gc2VlIGdpdG1vZHVsZXMoNSkgaWdub3JlLgorICogLSBgaWdub3JlX2RlZmF1bHRgIGlzIHRoZSBpZ25vcmUgdmFsdWUgZnJvbSB0aGUgY29uZmlnCiAgKiAtIGBmZXRjaF9yZWN1cnNlYCBpcyAwIG9yIDEgLSBzZWUgZ2l0bW9kdWxlcyg1KSBmZXRjaFJlY3Vyc2VTdWJtb2R1bGVzLgotICogLSBgcmVmY291bnRgIHRyYWNrcyBob3cgbWFueSBoYXNobWFwIGVudHJpZXMgdGhlcmUgYXJlIGZvciB0aGlzIHN1Ym1vZHVsZS4KLSAqICAgSXQgb25seSBjb21lcyBpbnRvIHBsYXkgaWYgdGhlIG5hbWUgYW5kIHBhdGggb2YgdGhlIHN1Ym1vZHVsZSBkaWZmZXIuCi0gKiAtIGBmbGFnc2AgaXMgZm9yIGludGVybmFsIHVzZSwgdHJhY2tpbmcgd2hlcmUgdGhpcyBzdWJtb2R1bGUgaGFzIGJlZW4KLSAqICAgZm91bmQgKGhlYWQsIGluZGV4LCBjb25maWcsIHdvcmtkaXIpIGFuZCBvdGhlciBtaXNjIGluZm8gYWJvdXQgaXQuCisgKgorICogLSBgcmVwb2AgaXMgdGhlIHBhcmVudCByZXBvc2l0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBzdWJtb2R1bGUuCisgKiAtIGBmbGFnc2AgYWZ0ZXIgZm9yIGludGVybmFsIHVzZSwgdHJhY2tpbmcgd2hlcmUgdGhpcyBzdWJtb2R1bGUgaGFzIGJlZW4KKyAqICAgZm91bmQgKGhlYWQsIGluZGV4LCBjb25maWcsIHdvcmtkaXIpIGFuZCBrbm93biBzdGF0dXMgaW5mbywgZXRjLgorICogLSBgaGVhZF9vaWRgIGlzIHRoZSBTSEExIGZvciB0aGUgc3VibW9kdWxlIHBhdGggaW4gdGhlIHJlcG8gSEVBRC4KKyAqIC0gYGluZGV4X29pZGAgaXMgdGhlIFNIQTEgZm9yIHRoZSBzdWJtb2R1bGUgcmVjb3JkZWQgaW4gdGhlIGluZGV4LgorICogLSBgd2Rfb2lkYCBpcyB0aGUgU0hBMSBmb3IgdGhlIEhFQUQgb2YgdGhlIGNoZWNrZWQgb3V0IHN1Ym1vZHVsZS4KICAqCiAgKiBJZiB0aGUgc3VibW9kdWxlIGhhcyBiZWVuIGFkZGVkIHRvIC5naXRtb2R1bGVzIGJ1dCBub3QgeWV0IGdpdCBhZGRlZCwKLSAqIHRoZW4gdGhlIGBpbmRleF9vaWRgIHdpbGwgYmUgdmFsaWQgYW5kIHplcm8uICBJZiB0aGUgc3VibW9kdWxlIGhhcyBiZWVuCi0gKiBkZWxldGVkLCBidXQgdGhlIGRlbGV0ZSBoYXMgbm90IGJlZW4gY29tbWl0dGVkIHlldCwgdGhlbiB0aGUgYGluZGV4X29pZGAKLSAqIHdpbGwgYmUgc2V0LCBidXQgdGhlIGB1cmxgIHdpbGwgYmUgTlVMTC4KKyAqIHRoZW4gdGhlIGBpbmRleF9vaWRgIHdpbGwgYmUgemVybyBidXQgc3RpbGwgbWFya2VkIHZhbGlkLiAgSWYgdGhlCisgKiBzdWJtb2R1bGUgaGFzIGJlZW4gZGVsZXRlZCwgYnV0IHRoZSBkZWxldGUgaGFzIG5vdCBiZWVuIGNvbW1pdHRlZCB5ZXQsCisgKiB0aGVuIHRoZSBgaW5kZXhfb2lkYCB3aWxsIGJlIHNldCwgYnV0IHRoZSBgdXJsYCB3aWxsIGJlIE5VTEwuCiAgKi8KIHN0cnVjdCBnaXRfc3VibW9kdWxlIHsKLQlnaXRfcmVwb3NpdG9yeSAqb3duZXI7Ci0JY2hhciAqbmFtZTsKLQljaGFyICpwYXRoOyAvKiBpbXBvcnRhbnQ6IG1heSBwb2ludCB0byBzYW1lIHN0cmluZyBkYXRhIGFzICJuYW1lIiAqLwotCWNoYXIgKnVybDsKLQl1aW50MzJfdCBmbGFnczsKLQlnaXRfb2lkIGhlYWRfb2lkOwotCWdpdF9vaWQgaW5kZXhfb2lkOwotCWdpdF9vaWQgd2Rfb2lkOworCWdpdF9yZWZjb3VudCByYzsKKwogCS8qIGluZm9ybWF0aW9uIGZyb20gY29uZmlnICovCisJY2hhciAqbmFtZTsKKwljaGFyICpwYXRoOyAvKiBpbXBvcnRhbnQ6IG1heSBqdXN0IHBvaW50IHRvICJuYW1lIiBzdHJpbmcgKi8KKwljaGFyICp1cmw7CiAJZ2l0X3N1Ym1vZHVsZV91cGRhdGVfdCB1cGRhdGU7CiAJZ2l0X3N1Ym1vZHVsZV91cGRhdGVfdCB1cGRhdGVfZGVmYXVsdDsKIAlnaXRfc3VibW9kdWxlX2lnbm9yZV90IGlnbm9yZTsKIAlnaXRfc3VibW9kdWxlX2lnbm9yZV90IGlnbm9yZV9kZWZhdWx0OwogCWludCBmZXRjaF9yZWN1cnNlOworCiAJLyogaW50ZXJuYWwgaW5mb3JtYXRpb24gKi8KLQlpbnQgcmVmY291bnQ7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJdWludDMyX3QgZmxhZ3M7CisJZ2l0X29pZCBoZWFkX29pZDsKKwlnaXRfb2lkIGluZGV4X29pZDsKKwlnaXRfb2lkIHdkX29pZDsKIH07CiAKIC8qIEFkZGl0aW9uYWwgZmxhZ3Mgb24gdG9wIG9mIHB1YmxpYyBHSVRfU1VCTU9EVUxFX1NUQVRVUyB2YWx1ZXMgKi8KQEAgLTk5LDQgKzExMCwyOSBAQAogI2RlZmluZSBHSVRfU1VCTU9EVUxFX1NUQVRVU19fQ0xFQVJfSU5URVJOQUwoUykgXAogCSgoUykgJiB+KDB4RkZGRkZGRkZ1IDw8IDIwKSkKIAorLyogSW50ZXJuYWwgc3RhdHVzIGZuIHJldHVybnMgc3RhdHVzIGFuZCBvcHRpb25hbGx5IHRoZSB2YXJpb3VzIE9JRHMgKi8KK2V4dGVybiBpbnQgZ2l0X3N1Ym1vZHVsZV9fc3RhdHVzKAorCXVuc2lnbmVkIGludCAqb3V0X3N0YXR1cywKKwlnaXRfb2lkICpvdXRfaGVhZF9pZCwKKwlnaXRfb2lkICpvdXRfaW5kZXhfaWQsCisJZ2l0X29pZCAqb3V0X3dkX2lkLAorCWdpdF9zdWJtb2R1bGUgKnNtLAorCWdpdF9zdWJtb2R1bGVfaWdub3JlX3QgaWduKTsKKworLyogT3BlbiBzdWJtb2R1bGUgcmVwb3NpdG9yeSBhcyBiYXJlIHJlcG8gZm9yIHF1aWNrIEhFQUQgY2hlY2ssIGV0Yy4gKi8KK2V4dGVybiBpbnQgZ2l0X3N1Ym1vZHVsZV9vcGVuX2JhcmUoCisJZ2l0X3JlcG9zaXRvcnkgKipyZXBvLAorCWdpdF9zdWJtb2R1bGUgKnN1Ym1vZHVsZSk7CisKKy8qIFJlbGVhc2UgcmVmZXJlbmNlIHRvIHN1Ym1vZHVsZSBvYmplY3QgLSBub3QgY3VycmVudGx5IGZvciBleHRlcm5hbCB1c2UgKi8KK2V4dGVybiB2b2lkIGdpdF9zdWJtb2R1bGVfZnJlZShnaXRfc3VibW9kdWxlICpzbSk7CisKK2V4dGVybiBpbnQgZ2l0X3N1Ym1vZHVsZV9wYXJzZV9pZ25vcmUoCisJZ2l0X3N1Ym1vZHVsZV9pZ25vcmVfdCAqb3V0LCBjb25zdCBjaGFyICp2YWx1ZSk7CitleHRlcm4gaW50IGdpdF9zdWJtb2R1bGVfcGFyc2VfdXBkYXRlKAorCWdpdF9zdWJtb2R1bGVfdXBkYXRlX3QgKm91dCwgY29uc3QgY2hhciAqdmFsdWUpOworCitleHRlcm4gY29uc3QgY2hhciAqZ2l0X3N1Ym1vZHVsZV9pZ25vcmVfdG9fc3RyKGdpdF9zdWJtb2R1bGVfaWdub3JlX3QpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9zdWJtb2R1bGVfdXBkYXRlX3RvX3N0cihnaXRfc3VibW9kdWxlX3VwZGF0ZV90KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGFnLmMgYi9zcmMvdGFnLmMKaW5kZXggNzFmNGMxZS4uMzFhM2M4YiAxMDA2NDQKLS0tIGEvc3JjL3RhZy5jCisrKyBiL3NyYy90YWcuYwpAQCAtMzY2LDEwICszNjYsMTAgQEAKIAlpZiAoZ2l0X29kYl9vcGVuX3dzdHJlYW0oJnN0cmVhbSwgb2RiLCBzdHJsZW4oYnVmZmVyKSwgR0lUX09CSl9UQUcpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0Jc3RyZWFtLT53cml0ZShzdHJlYW0sIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworCWdpdF9vZGJfc3RyZWFtX3dyaXRlKHN0cmVhbSwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CiAKLQllcnJvciA9IHN0cmVhbS0+ZmluYWxpemVfd3JpdGUob2lkLCBzdHJlYW0pOwotCXN0cmVhbS0+ZnJlZShzdHJlYW0pOworCWVycm9yID0gZ2l0X29kYl9zdHJlYW1fZmluYWxpemVfd3JpdGUob2lkLCBzdHJlYW0pOworCWdpdF9vZGJfc3RyZWFtX2ZyZWUoc3RyZWFtKTsKIAogCWlmIChlcnJvciA8IDApIHsKIAkJZ2l0X2J1Zl9mcmVlKCZyZWZfbmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvdGhyZWFkLXV0aWxzLmggYi9zcmMvdGhyZWFkLXV0aWxzLmgKaW5kZXggODMxNDgxOC4uOTE0YzEzNSAxMDA2NDQKLS0tIGEvc3JjL3RocmVhZC11dGlscy5oCisrKyBiL3NyYy90aHJlYWQtdXRpbHMuaApAQCAtMzgsMTUgKzM4LDExIEBACiAKICNlbmRpZgogCi1HSVRfSU5MSU5FKHZvaWQpIGdpdF9hdG9taWNfc2V0KGdpdF9hdG9taWMgKmEsIGludCB2YWwpCi17Ci0JYS0+dmFsID0gdmFsOwotfQotCiAjaWZkZWYgR0lUX1RIUkVBRFMKIAogI2RlZmluZSBnaXRfdGhyZWFkIHB0aHJlYWRfdAotI2RlZmluZSBnaXRfdGhyZWFkX2NyZWF0ZSh0aHJlYWQsIGF0dHIsIHN0YXJ0X3JvdXRpbmUsIGFyZykgcHRocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBzdGFydF9yb3V0aW5lLCBhcmcpCisjZGVmaW5lIGdpdF90aHJlYWRfY3JlYXRlKHRocmVhZCwgYXR0ciwgc3RhcnRfcm91dGluZSwgYXJnKSBcCisJcHRocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBzdGFydF9yb3V0aW5lLCBhcmcpCiAjZGVmaW5lIGdpdF90aHJlYWRfa2lsbCh0aHJlYWQpIHB0aHJlYWRfY2FuY2VsKHRocmVhZCkKICNkZWZpbmUgZ2l0X3RocmVhZF9leGl0KHN0YXR1cykJcHRocmVhZF9leGl0KHN0YXR1cykKICNkZWZpbmUgZ2l0X3RocmVhZF9qb2luKGlkLCBzdGF0dXMpIHB0aHJlYWRfam9pbihpZCwgc3RhdHVzKQpAQCAtNjYsNiArNjIsNDEgQEAKICNkZWZpbmUgZ2l0X2NvbmRfc2lnbmFsKGMpCXB0aHJlYWRfY29uZF9zaWduYWwoYykKICNkZWZpbmUgZ2l0X2NvbmRfYnJvYWRjYXN0KGMpCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoYykKIAorLyogUHRocmVhZCAoLWlzaCkgcndsb2NrCisgKgorICogVGhpcyBkaWZmZXJzIGZyb20gbm9ybWFsIHB0aHJlYWRzIHJ3bG9ja3MgaW4gdHdvIHdheXM6CisgKiAxLiBTZXBhcmF0ZSBBUElzIGZvciByZWxlYXNpbmcgcmVhZCBsb2NrcyBhbmQgd3JpdGUgbG9ja3MgKGFzCisgKiAgICBvcHBvc2VkIHRvIHRoZSBwdXJlIFBPU0lYIEFQSSB3aGljaCBvbmx5IGhhcyBvbmUgdW5sb2NrIGZuKQorICogMi4gWW91IHNob3VsZCBub3QgdXNlIHJlY3Vyc2l2ZSByZWFkIGxvY2tzIChpLmUuIGdyYWJiaW5nIGEgcmVhZAorICogICAgbG9jayBpbiBhIHRocmVhZCB0aGF0IGFscmVhZHkgaG9sZHMgYSByZWFkIGxvY2spIGJlY2F1c2UgdGhlCisgKiAgICBXaW5kb3dzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBpdAorICovCisjZGVmaW5lIGdpdF9yd2xvY2sgcHRocmVhZF9yd2xvY2tfdAorI2RlZmluZSBnaXRfcndsb2NrX2luaXQoYSkJCXB0aHJlYWRfcndsb2NrX2luaXQoYSwgTlVMTCkKKyNkZWZpbmUgZ2l0X3J3bG9ja19yZGxvY2soYSkJcHRocmVhZF9yd2xvY2tfcmRsb2NrKGEpCisjZGVmaW5lIGdpdF9yd2xvY2tfcmR1bmxvY2soYSkJcHRocmVhZF9yd2xvY2tfcmR1bmxvY2soYSkKKyNkZWZpbmUgZ2l0X3J3bG9ja193cmxvY2soYSkJcHRocmVhZF9yd2xvY2tfd3Jsb2NrKGEpCisjZGVmaW5lIGdpdF9yd2xvY2tfd3J1bmxvY2soYSkJcHRocmVhZF9yd2xvY2tfd3J1bmxvY2soYSkKKyNkZWZpbmUgZ2l0X3J3bG9ja19mcmVlKGEpCQlwdGhyZWFkX3J3bG9ja19kZXN0cm95KGEpCisjZGVmaW5lIEdJVF9SV0xPQ0tfU1RBVElDX0lOSVQJUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIKKworI2lmbmRlZiBHSVRfV0lOMzIKKyNkZWZpbmUgcHRocmVhZF9yd2xvY2tfcmR1bmxvY2sgcHRocmVhZF9yd2xvY2tfdW5sb2NrCisjZGVmaW5lIHB0aHJlYWRfcndsb2NrX3dydW5sb2NrIHB0aHJlYWRfcndsb2NrX3VubG9jaworI2VuZGlmCisKKworR0lUX0lOTElORSh2b2lkKSBnaXRfYXRvbWljX3NldChnaXRfYXRvbWljICphLCBpbnQgdmFsKQoreworI2lmIGRlZmluZWQoR0lUX1dJTjMyKQorCUludGVybG9ja2VkRXhjaGFuZ2UoJmEtPnZhbCwgKExPTkcpdmFsKTsKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pCisJX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCZhLT52YWwsIHZhbCk7CisjZWxzZQorIwllcnJvciAiVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIGZvciBhdG9taWMgb3BlcmF0aW9ucyIKKyNlbmRpZgorfQorCiBHSVRfSU5MSU5FKGludCkgZ2l0X2F0b21pY19pbmMoZ2l0X2F0b21pYyAqYSkKIHsKICNpZiBkZWZpbmVkKEdJVF9XSU4zMikKQEAgLTEwMCwxMSArMTMxLDExIEBACiB9CiAKIEdJVF9JTkxJTkUodm9pZCAqKSBnaXRfX19jb21wYXJlX2FuZF9zd2FwKAotCXZvbGF0aWxlIHZvaWQgKipwdHIsIHZvaWQgKm9sZHZhbCwgdm9pZCAqbmV3dmFsKQorCXZvaWQgKiB2b2xhdGlsZSAqcHRyLCB2b2lkICpvbGR2YWwsIHZvaWQgKm5ld3ZhbCkKIHsKIAl2b2xhdGlsZSB2b2lkICpmb3VuZHZhbDsKICNpZiBkZWZpbmVkKEdJVF9XSU4zMikKLQlmb3VuZHZhbCA9IEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcihwdHIsIG5ld3ZhbCwgb2xkdmFsKTsKKwlmb3VuZHZhbCA9IEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcigodm9sYXRpbGUgUFZPSUQgKilwdHIsIG5ld3ZhbCwgb2xkdmFsKTsKICNlbGlmIGRlZmluZWQoX19HTlVDX18pCiAJZm91bmR2YWwgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGR2YWwsIG5ld3ZhbCk7CiAjZWxzZQpAQCAtMTEzLDYgKzE0NCwxNiBAQAogCXJldHVybiAoZm91bmR2YWwgPT0gb2xkdmFsKSA/IG9sZHZhbCA6IG5ld3ZhbDsKIH0KIAorR0lUX0lOTElORSh2b2xhdGlsZSB2b2lkICopIGdpdF9fX3N3YXAoCisJdm9pZCAqIHZvbGF0aWxlICpwdHIsIHZvaWQgKm5ld3ZhbCkKK3sKKyNpZiBkZWZpbmVkKEdJVF9XSU4zMikKKwlyZXR1cm4gSW50ZXJsb2NrZWRFeGNoYW5nZVBvaW50ZXIocHRyLCBuZXd2YWwpOworI2Vsc2UKKwlyZXR1cm4gX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KHB0ciwgbmV3dmFsKTsKKyNlbmRpZgorfQorCiAjaWZkZWYgR0lUX0FSQ0hfNjQKIAogR0lUX0lOTElORShpbnQ2NF90KSBnaXRfYXRvbWljNjRfYWRkKGdpdF9hdG9taWM2NCAqYSwgaW50NjRfdCBhZGRlbmQpCkBAIC0xMzEsNyArMTcyLDcgQEAKICNlbHNlCiAKICNkZWZpbmUgZ2l0X3RocmVhZCB1bnNpZ25lZCBpbnQKLSNkZWZpbmUgZ2l0X3RocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBzdGFydF9yb3V0aW5lLCBhcmcpICh2b2lkKTAKKyNkZWZpbmUgZ2l0X3RocmVhZF9jcmVhdGUodGhyZWFkLCBhdHRyLCBzdGFydF9yb3V0aW5lLCBhcmcpIDAKICNkZWZpbmUgZ2l0X3RocmVhZF9raWxsKHRocmVhZCkgKHZvaWQpMAogI2RlZmluZSBnaXRfdGhyZWFkX2V4aXQoc3RhdHVzKSAodm9pZCkwCiAjZGVmaW5lIGdpdF90aHJlYWRfam9pbihpZCwgc3RhdHVzKSAodm9pZCkwCkBAIC0xNTEsNiArMTkyLDIyIEBACiAjZGVmaW5lIGdpdF9jb25kX3NpZ25hbChjKSAodm9pZCkwCiAjZGVmaW5lIGdpdF9jb25kX2Jyb2FkY2FzdChjKSAodm9pZCkwCiAKKy8qIFB0aHJlYWRzIHJ3bG9jayAqLworI2RlZmluZSBnaXRfcndsb2NrIHVuc2lnbmVkIGludAorI2RlZmluZSBnaXRfcndsb2NrX2luaXQoYSkJCTAKKyNkZWZpbmUgZ2l0X3J3bG9ja19yZGxvY2soYSkJMAorI2RlZmluZSBnaXRfcndsb2NrX3JkdW5sb2NrKGEpCSh2b2lkKTAKKyNkZWZpbmUgZ2l0X3J3bG9ja193cmxvY2soYSkJMAorI2RlZmluZSBnaXRfcndsb2NrX3dydW5sb2NrKGEpCSh2b2lkKTAKKyNkZWZpbmUgZ2l0X3J3bG9ja19mcmVlKGEpCQkodm9pZCkwCisjZGVmaW5lIEdJVF9SV0xPQ0tfU1RBVElDX0lOSVQJMAorCisKK0dJVF9JTkxJTkUodm9pZCkgZ2l0X2F0b21pY19zZXQoZ2l0X2F0b21pYyAqYSwgaW50IHZhbCkKK3sKKwlhLT52YWwgPSB2YWw7Cit9CisKIEdJVF9JTkxJTkUoaW50KSBnaXRfYXRvbWljX2luYyhnaXRfYXRvbWljICphKQogewogCXJldHVybiArK2EtPnZhbDsKQEAgLTE2OCw3ICsyMjUsNyBAQAogfQogCiBHSVRfSU5MSU5FKHZvaWQgKikgZ2l0X19fY29tcGFyZV9hbmRfc3dhcCgKLQl2b2xhdGlsZSB2b2lkICoqcHRyLCB2b2lkICpvbGR2YWwsIHZvaWQgKm5ld3ZhbCkKKwl2b2lkICogdm9sYXRpbGUgKnB0ciwgdm9pZCAqb2xkdmFsLCB2b2lkICpuZXd2YWwpCiB7CiAJaWYgKCpwdHIgPT0gb2xkdmFsKQogCQkqcHRyID0gbmV3dmFsOwpAQCAtMTc3LDYgKzIzNCwxNCBAQAogCXJldHVybiBvbGR2YWw7CiB9CiAKK0dJVF9JTkxJTkUodm9sYXRpbGUgdm9pZCAqKSBnaXRfX19zd2FwKAorCXZvaWQgKiB2b2xhdGlsZSAqcHRyLCB2b2lkICpuZXd2YWwpCit7CisJdm9sYXRpbGUgdm9pZCAqb2xkID0gKnB0cjsKKwkqcHRyID0gbmV3dmFsOworCXJldHVybiBvbGQ7Cit9CisKICNpZmRlZiBHSVRfQVJDSF82NAogCiBHSVRfSU5MSU5FKGludDY0X3QpIGdpdF9hdG9taWM2NF9hZGQoZ2l0X2F0b21pYzY0ICphLCBpbnQ2NF90IGFkZGVuZCkKQEAgLTE4OSwxMyArMjU0LDE4IEBACiAKICNlbmRpZgogCitHSVRfSU5MSU5FKGludCkgZ2l0X2F0b21pY19nZXQoZ2l0X2F0b21pYyAqYSkKK3sKKwlyZXR1cm4gKGludClhLT52YWw7Cit9CisKIC8qIEF0b21pY2FsbHkgcmVwbGFjZSBvbGR2YWwgd2l0aCBuZXd2YWwKICAqIEByZXR1cm4gb2xkdmFsIGlmIGl0IHdhcyByZXBsYWNlZCBvciBuZXd2YWwgaWYgaXQgd2FzIG5vdAogICovCiAjZGVmaW5lIGdpdF9fY29tcGFyZV9hbmRfc3dhcChQLE8sTikgXAotCWdpdF9fX2NvbXBhcmVfYW5kX3N3YXAoKHZvbGF0aWxlIHZvaWQgKiopUCwgTywgTikKKwlnaXRfX19jb21wYXJlX2FuZF9zd2FwKCh2b2lkICogdm9sYXRpbGUgKilQLCBPLCBOKQogCi0jZGVmaW5lIGdpdF9fc3dhcChwdHIsIHZhbCkgZ2l0X19jb21wYXJlX2FuZF9zd2FwKCZwdHIsIHB0ciwgdmFsKQorI2RlZmluZSBnaXRfX3N3YXAocHRyLCB2YWwpICh2b2lkICopZ2l0X19fc3dhcCgodm9pZCAqIHZvbGF0aWxlICopJnB0ciwgdmFsKQogCiBleHRlcm4gaW50IGdpdF9vbmxpbmVfY3B1cyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydC5jIGIvc3JjL3RyYW5zcG9ydC5jCmluZGV4IDM3YzI0NGMuLmZmOTI2YjEgMTAwNjQ0Ci0tLSBhL3NyYy90cmFuc3BvcnQuYworKysgYi9zcmMvdHJhbnNwb3J0LmMKQEAgLTQyLDYgKzQyLDggQEAKIAl7TlVMTCwgMCwgMH0KIH07CiAKK3N0YXRpYyBnaXRfdmVjdG9yIGFkZGl0aW9uYWxfdHJhbnNwb3J0cyA9IEdJVF9WRUNUT1JfSU5JVDsKKwogI2RlZmluZSBHSVRfVFJBTlNQT1JUX0NPVU5UIChzaXplb2YodHJhbnNwb3J0cykvc2l6ZW9mKHRyYW5zcG9ydHNbMF0pKSAtIDEKIAogc3RhdGljIGludCB0cmFuc3BvcnRfZmluZF9mbihjb25zdCBjaGFyICp1cmwsIGdpdF90cmFuc3BvcnRfY2IgKmNhbGxiYWNrLCB2b2lkICoqcGFyYW0pCkBAIC02MSw2ICs2MywxNCBAQAogCQkJZGVmaW5pdGlvbiA9IGRlZmluaXRpb25faXRlcjsKIAl9CiAKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJmFkZGl0aW9uYWxfdHJhbnNwb3J0cywgaSwgZGVmaW5pdGlvbl9pdGVyKSB7CisJCWlmIChzdHJuY2FzZWNtcCh1cmwsIGRlZmluaXRpb25faXRlci0+cHJlZml4LCBzdHJsZW4oZGVmaW5pdGlvbl9pdGVyLT5wcmVmaXgpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkZWZpbml0aW9uX2l0ZXItPnByaW9yaXR5ID4gcHJpb3JpdHkpCisJCQlkZWZpbml0aW9uID0gZGVmaW5pdGlvbl9pdGVyOworCX0KKwogI2lmZGVmIEdJVF9XSU4zMgogCS8qIE9uIFdpbmRvd3MsIGl0IG1pZ2h0IG5vdCBiZSBwb3NzaWJsZSB0byBkaXNjZXJuIGJldHdlZW4gYWJzb2x1dGUgbG9jYWwKIAkgKiBhbmQgc3NoIHBhdGhzIC0gZmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIGxvY2FsIHBhdGggdGhhdCBwb2ludHMKQEAgLTczLDcgKzgzLDcgQEAKIAkvKiBJdCBjb3VsZCBiZSBhIFNTSCByZW1vdGUgcGF0aC4gQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYSA6CiAJICogU1NIIGlzIGFuIHVuc3VwcG9ydGVkIHRyYW5zcG9ydCBtZWNoYW5pc20gaW4gdGhpcyB2ZXJzaW9uIG9mIGxpYmdpdDIgKi8KIAlpZiAoIWRlZmluaXRpb24gJiYgc3RycmNocih1cmwsICc6JykpCi0JCWRlZmluaXRpb24gPSAmZHVtbXlfdHJhbnNwb3J0X2RlZmluaXRpb247IAorCQlkZWZpbml0aW9uID0gJmR1bW15X3RyYW5zcG9ydF9kZWZpbml0aW9uOwogI2Vsc2UKIAkvKiBGb3Igb3RoZXIgc3lzdGVtcywgcGVyZm9ybSB0aGUgU1NIIGNoZWNrIGZpcnN0LCB0byBhdm9pZCBnb2luZyB0byB0aGUKIAkgKiBmaWxlc3lzdGVtIGlmIGl0IGlzIG5vdCBuZWNlc3NhcnkgKi8KQEAgLTk3LDcgKzEwNyw3IEBACiAKIAkqY2FsbGJhY2sgPSBkZWZpbml0aW9uLT5mbjsKIAkqcGFyYW0gPSBkZWZpbml0aW9uLT5wYXJhbTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzUsNiArMTQ1LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBnaXRfdHJhbnNwb3J0X3JlZ2lzdGVyKAorCWNvbnN0IGNoYXIgKnByZWZpeCwKKwl1bnNpZ25lZCBwcmlvcml0eSwKKwlnaXRfdHJhbnNwb3J0X2NiIGNiLAorCXZvaWQgKnBhcmFtKQoreworCXRyYW5zcG9ydF9kZWZpbml0aW9uICpkOworCisJZCA9IGdpdF9fY2FsbG9jKHNpemVvZih0cmFuc3BvcnRfZGVmaW5pdGlvbiksIDEpOworCUdJVEVSUl9DSEVDS19BTExPQyhkKTsKKworCWQtPnByZWZpeCA9IGdpdF9fc3RyZHVwKHByZWZpeCk7CisKKwlpZiAoIWQtPnByZWZpeCkKKwkJZ290byBvbl9lcnJvcjsKKworCWQtPnByaW9yaXR5ID0gcHJpb3JpdHk7CisJZC0+Zm4gPSBjYjsKKwlkLT5wYXJhbSA9IHBhcmFtOworCisJaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KCZhZGRpdGlvbmFsX3RyYW5zcG9ydHMsIGQpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKworCXJldHVybiAwOworCitvbl9lcnJvcjoKKwlnaXRfX2ZyZWUoZC0+cHJlZml4KTsKKwlnaXRfX2ZyZWUoZCk7CisJcmV0dXJuIC0xOworfQorCitpbnQgZ2l0X3RyYW5zcG9ydF91bnJlZ2lzdGVyKAorCWNvbnN0IGNoYXIgKnByZWZpeCwKKwl1bnNpZ25lZCBwcmlvcml0eSkKK3sKKwl0cmFuc3BvcnRfZGVmaW5pdGlvbiAqZDsKKwl1bnNpZ25lZCBpOworCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZhZGRpdGlvbmFsX3RyYW5zcG9ydHMsIGksIGQpIHsKKwkJaWYgKGQtPnByaW9yaXR5ID09IHByaW9yaXR5ICYmICFzdHJjYXNlY21wKGQtPnByZWZpeCwgcHJlZml4KSkgeworCQkJaWYgKGdpdF92ZWN0b3JfcmVtb3ZlKCZhZGRpdGlvbmFsX3RyYW5zcG9ydHMsIGkpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWdpdF9fZnJlZShkLT5wcmVmaXgpOworCQkJZ2l0X19mcmVlKGQpOworCisJCQlpZiAoIWFkZGl0aW9uYWxfdHJhbnNwb3J0cy5sZW5ndGgpCisJCQkJZ2l0X3ZlY3Rvcl9mcmVlKCZhZGRpdGlvbmFsX3RyYW5zcG9ydHMpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiBHSVRfRU5PVEZPVU5EOworfQorCiAvKiBmcm9tIHJlbW90ZS5oICovCiBpbnQgZ2l0X3JlbW90ZV92YWxpZF91cmwoY29uc3QgY2hhciAqdXJsKQogewpkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvY3JlZC5jIGIvc3JjL3RyYW5zcG9ydHMvY3JlZC5jCmluZGV4IGJhNWRlNmUuLjA1ZDJjOGQgMTAwNjQ0Ci0tLSBhL3NyYy90cmFuc3BvcnRzL2NyZWQuYworKysgYi9zcmMvdHJhbnNwb3J0cy9jcmVkLmMKQEAgLTksMTkgKzksNDkgQEAKICNpbmNsdWRlICJzbWFydC5oIgogI2luY2x1ZGUgImdpdDIvY3JlZF9oZWxwZXJzLmgiCiAKK2ludCBnaXRfY3JlZF9oYXNfdXNlcm5hbWUoZ2l0X2NyZWQgKmNyZWQpCit7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGNyZWQtPmNyZWR0eXBlKSB7CisJY2FzZSBHSVRfQ1JFRFRZUEVfVVNFUlBBU1NfUExBSU5URVhUOiB7CisJCWdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dCAqYyA9IChnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHQgKiljcmVkOworCQlyZXQgPSAhIWMtPnVzZXJuYW1lOworCQlicmVhazsKKwl9CisJY2FzZSBHSVRfQ1JFRFRZUEVfU1NIX0tFWTogeworCQlnaXRfY3JlZF9zc2hfa2V5ICpjID0gKGdpdF9jcmVkX3NzaF9rZXkgKiljcmVkOworCQlyZXQgPSAhIWMtPnVzZXJuYW1lOworCQlicmVhazsKKwl9CisJY2FzZSBHSVRfQ1JFRFRZUEVfU1NIX0NVU1RPTTogeworCQlnaXRfY3JlZF9zc2hfY3VzdG9tICpjID0gKGdpdF9jcmVkX3NzaF9jdXN0b20gKiljcmVkOworCQlyZXQgPSAhIWMtPnVzZXJuYW1lOworCQlicmVhazsKKwl9CisJY2FzZSBHSVRfQ1JFRFRZUEVfREVGQVVMVDogeworCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgcGxhaW50ZXh0X2ZyZWUoc3RydWN0IGdpdF9jcmVkICpjcmVkKQogewogCWdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dCAqYyA9IChnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHQgKiljcmVkOwotCXNpemVfdCBwYXNzX2xlbiA9IHN0cmxlbihjLT5wYXNzd29yZCk7CiAKIAlnaXRfX2ZyZWUoYy0+dXNlcm5hbWUpOwogCiAJLyogWmVybyB0aGUgbWVtb3J5IHdoaWNoIHByZXZpb3VzbHkgaGVsZCB0aGUgcGFzc3dvcmQgKi8KLQlnaXRfX21lbXplcm8oYy0+cGFzc3dvcmQsIHBhc3NfbGVuKTsKLQlnaXRfX2ZyZWUoYy0+cGFzc3dvcmQpOworCWlmIChjLT5wYXNzd29yZCkgeworCQlzaXplX3QgcGFzc19sZW4gPSBzdHJsZW4oYy0+cGFzc3dvcmQpOworCQlnaXRfX21lbXplcm8oYy0+cGFzc3dvcmQsIHBhc3NfbGVuKTsKKwkJZ2l0X19mcmVlKGMtPnBhc3N3b3JkKTsKKwl9CiAKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0KKwlnaXRfX21lbXplcm8oYywgc2l6ZW9mKCpjKSk7CiAJZ2l0X19mcmVlKGMpOwogfQogCkBAIC0zMiw4ICs2Miw3IEBACiB7CiAJZ2l0X2NyZWRfdXNlcnBhc3NfcGxhaW50ZXh0ICpjOwogCi0JaWYgKCFjcmVkKQotCQlyZXR1cm4gLTE7CisJYXNzZXJ0KGNyZWQgJiYgdXNlcm5hbWUgJiYgcGFzc3dvcmQpOwogCiAJYyA9IGdpdF9fbWFsbG9jKHNpemVvZihnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHQpKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MoYyk7CkBAIC01OSw1MyArODgsNzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIEdJVF9TU0gKLXN0YXRpYyB2b2lkIHNzaF9rZXlmaWxlX3Bhc3NwaHJhc2VfZnJlZShzdHJ1Y3QgZ2l0X2NyZWQgKmNyZWQpCitzdGF0aWMgdm9pZCBzc2hfa2V5X2ZyZWUoc3RydWN0IGdpdF9jcmVkICpjcmVkKQogewotCWdpdF9jcmVkX3NzaF9rZXlmaWxlX3Bhc3NwaHJhc2UgKmMgPSAoZ2l0X2NyZWRfc3NoX2tleWZpbGVfcGFzc3BocmFzZSAqKWNyZWQ7Ci0Jc2l6ZV90IHBhc3NfbGVuID0gc3RybGVuKGMtPnBhc3NwaHJhc2UpOworCWdpdF9jcmVkX3NzaF9rZXkgKmMgPQorCQkoZ2l0X2NyZWRfc3NoX2tleSAqKWNyZWQ7CiAKLSAgICBpZiAoYy0+cHVibGlja2V5KSB7Ci0gICAgICAgIGdpdF9fZnJlZShjLT5wdWJsaWNrZXkpOwotICAgIH0KLSAgICAKKwlnaXRfX2ZyZWUoYy0+dXNlcm5hbWUpOworCWdpdF9fZnJlZShjLT5wdWJsaWNrZXkpOwogCWdpdF9fZnJlZShjLT5wcml2YXRla2V5KTsKIAotICAgIGlmIChjLT5wYXNzcGhyYXNlKSB7Ci0gICAgICAgIC8qIFplcm8gdGhlIG1lbW9yeSB3aGljaCBwcmV2aW91c2x5IGhlbGQgdGhlIHBhc3NwaHJhc2UgKi8KLSAgICAgICAgZ2l0X19tZW16ZXJvKGMtPnBhc3NwaHJhc2UsIHBhc3NfbGVuKTsKLSAgICAgICAgZ2l0X19mcmVlKGMtPnBhc3NwaHJhc2UpOwotICAgIH0KKwlpZiAoYy0+cGFzc3BocmFzZSkgeworCQkvKiBaZXJvIHRoZSBtZW1vcnkgd2hpY2ggcHJldmlvdXNseSBoZWxkIHRoZSBwYXNzcGhyYXNlICovCisJCXNpemVfdCBwYXNzX2xlbiA9IHN0cmxlbihjLT5wYXNzcGhyYXNlKTsKKwkJZ2l0X19tZW16ZXJvKGMtPnBhc3NwaHJhc2UsIHBhc3NfbGVuKTsKKwkJZ2l0X19mcmVlKGMtPnBhc3NwaHJhc2UpOworCX0KIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKwlnaXRfX21lbXplcm8oYywgc2l6ZW9mKCpjKSk7CisJZ2l0X19mcmVlKGMpOworfQorCitzdGF0aWMgdm9pZCBzc2hfY3VzdG9tX2ZyZWUoc3RydWN0IGdpdF9jcmVkICpjcmVkKQoreworCWdpdF9jcmVkX3NzaF9jdXN0b20gKmMgPSAoZ2l0X2NyZWRfc3NoX2N1c3RvbSAqKWNyZWQ7CisKKwlnaXRfX2ZyZWUoYy0+dXNlcm5hbWUpOworCWdpdF9fZnJlZShjLT5wdWJsaWNrZXkpOworCisJZ2l0X19tZW16ZXJvKGMsIHNpemVvZigqYykpOworCWdpdF9fZnJlZShjKTsKK30KKworc3RhdGljIHZvaWQgZGVmYXVsdF9mcmVlKHN0cnVjdCBnaXRfY3JlZCAqY3JlZCkKK3sKKwlnaXRfY3JlZF9kZWZhdWx0ICpjID0gKGdpdF9jcmVkX2RlZmF1bHQgKiljcmVkOwogCiAJZ2l0X19mcmVlKGMpOwogfQogCi1pbnQgZ2l0X2NyZWRfc3NoX2tleWZpbGVfcGFzc3BocmFzZV9uZXcoCitpbnQgZ2l0X2NyZWRfc3NoX2tleV9uZXcoCiAJZ2l0X2NyZWQgKipjcmVkLAorCWNvbnN0IGNoYXIgKnVzZXJuYW1lLAogCWNvbnN0IGNoYXIgKnB1YmxpY2tleSwKIAljb25zdCBjaGFyICpwcml2YXRla2V5LAogCWNvbnN0IGNoYXIgKnBhc3NwaHJhc2UpCiB7Ci0JZ2l0X2NyZWRfc3NoX2tleWZpbGVfcGFzc3BocmFzZSAqYzsKKwlnaXRfY3JlZF9zc2hfa2V5ICpjOwogCiAJYXNzZXJ0KGNyZWQgJiYgcHJpdmF0ZWtleSk7CiAKLQljID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9jcmVkX3NzaF9rZXlmaWxlX3Bhc3NwaHJhc2UpKTsKKwljID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9jcmVkX3NzaF9rZXkpKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MoYyk7CiAKLQljLT5wYXJlbnQuY3JlZHR5cGUgPSBHSVRfQ1JFRFRZUEVfU1NIX0tFWUZJTEVfUEFTU1BIUkFTRTsKLQljLT5wYXJlbnQuZnJlZSA9IHNzaF9rZXlmaWxlX3Bhc3NwaHJhc2VfZnJlZTsKLSAgICAKLSAgICBjLT5wcml2YXRla2V5ID0gZ2l0X19zdHJkdXAocHJpdmF0ZWtleSk7CisJYy0+cGFyZW50LmNyZWR0eXBlID0gR0lUX0NSRURUWVBFX1NTSF9LRVk7CisJYy0+cGFyZW50LmZyZWUgPSBzc2hfa2V5X2ZyZWU7CisKKwlpZiAodXNlcm5hbWUpIHsKKwkJYy0+dXNlcm5hbWUgPSBnaXRfX3N0cmR1cCh1c2VybmFtZSk7CisJCUdJVEVSUl9DSEVDS19BTExPQyhjLT51c2VybmFtZSk7CisJfQorCisJYy0+cHJpdmF0ZWtleSA9IGdpdF9fc3RyZHVwKHByaXZhdGVrZXkpOwogCUdJVEVSUl9DSEVDS19BTExPQyhjLT5wcml2YXRla2V5KTsKLSAgICAKLSAgICBpZiAocHVibGlja2V5KSB7CisKKwlpZiAocHVibGlja2V5KSB7CiAJCWMtPnB1YmxpY2tleSA9IGdpdF9fc3RyZHVwKHB1YmxpY2tleSk7CiAJCUdJVEVSUl9DSEVDS19BTExPQyhjLT5wdWJsaWNrZXkpOwogCX0KLQkKKwogCWlmIChwYXNzcGhyYXNlKSB7CiAJCWMtPnBhc3NwaHJhc2UgPSBnaXRfX3N0cmR1cChwYXNzcGhyYXNlKTsKIAkJR0lURVJSX0NIRUNLX0FMTE9DKGMtPnBhc3NwaHJhc2UpOwpAQCAtMTE1LDQ4ICsxNjUsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3NoX3B1YmxpY2tleV9mcmVlKHN0cnVjdCBnaXRfY3JlZCAqY3JlZCkKLXsKLQlnaXRfY3JlZF9zc2hfcHVibGlja2V5ICpjID0gKGdpdF9jcmVkX3NzaF9wdWJsaWNrZXkgKiljcmVkOwotCi0gICAgZ2l0X19mcmVlKGMtPnB1YmxpY2tleSk7Ci0KLSAgICBjLT5zaWduX2NhbGxiYWNrID0gTlVMTDsKLSAgICBjLT5zaWduX2RhdGEgPSBOVUxMOwotICAgIAotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLQotCWdpdF9fZnJlZShjKTsKLX0KLQotaW50IGdpdF9jcmVkX3NzaF9wdWJsaWNrZXlfbmV3KAoraW50IGdpdF9jcmVkX3NzaF9jdXN0b21fbmV3KAogCWdpdF9jcmVkICoqY3JlZCwKKwljb25zdCBjaGFyICp1c2VybmFtZSwKIAljb25zdCBjaGFyICpwdWJsaWNrZXksCi0gICAgc2l6ZV90IHB1YmxpY2tleV9sZW4sCi0JTElCU1NIMl9VU0VSQVVUSF9QVUJMSUNLRVlfU0lHTl9GVU5DKCgqc2lnbl9jYWxsYmFjaykpLAotICAgIHZvaWQgKnNpZ25fZGF0YSkKKwlzaXplX3QgcHVibGlja2V5X2xlbiwKKwlnaXRfY3JlZF9zaWduX2NhbGxiYWNrIHNpZ25fY2FsbGJhY2ssCisJdm9pZCAqc2lnbl9kYXRhKQogewotCWdpdF9jcmVkX3NzaF9wdWJsaWNrZXkgKmM7CisJZ2l0X2NyZWRfc3NoX2N1c3RvbSAqYzsKIAotCWlmICghY3JlZCkKLQkJcmV0dXJuIC0xOworCWFzc2VydChjcmVkKTsKIAotCWMgPSBnaXRfX21hbGxvYyhzaXplb2YoZ2l0X2NyZWRfc3NoX3B1YmxpY2tleSkpOworCWMgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2NyZWRfc3NoX2N1c3RvbSkpOwogCUdJVEVSUl9DSEVDS19BTExPQyhjKTsKIAotCWMtPnBhcmVudC5jcmVkdHlwZSA9IEdJVF9DUkVEVFlQRV9TU0hfUFVCTElDS0VZOwotCWMtPnBhcmVudC5mcmVlID0gc3NoX3B1YmxpY2tleV9mcmVlOwotICAgIAotICAgIGMtPnB1YmxpY2tleSA9IGdpdF9fbWFsbG9jKHB1YmxpY2tleV9sZW4pOwotCUdJVEVSUl9DSEVDS19BTExPQyhjLT5wdWJsaWNrZXkpOwotCQotICAgIG1lbWNweShjLT5wdWJsaWNrZXksIHB1YmxpY2tleSwgcHVibGlja2V5X2xlbik7Ci0gICAgCi0gICAgYy0+cHVibGlja2V5X2xlbiA9IHB1YmxpY2tleV9sZW47Ci0gICAgYy0+c2lnbl9jYWxsYmFjayA9IHNpZ25fY2FsbGJhY2s7Ci0gICAgYy0+c2lnbl9kYXRhID0gc2lnbl9kYXRhOworCWMtPnBhcmVudC5jcmVkdHlwZSA9IEdJVF9DUkVEVFlQRV9TU0hfQ1VTVE9NOworCWMtPnBhcmVudC5mcmVlID0gc3NoX2N1c3RvbV9mcmVlOworCisJaWYgKHVzZXJuYW1lKSB7CisJCWMtPnVzZXJuYW1lID0gZ2l0X19zdHJkdXAodXNlcm5hbWUpOworCQlHSVRFUlJfQ0hFQ0tfQUxMT0MoYy0+dXNlcm5hbWUpOworCX0KKworCWlmIChwdWJsaWNrZXlfbGVuID4gMCkgeworCQljLT5wdWJsaWNrZXkgPSBnaXRfX21hbGxvYyhwdWJsaWNrZXlfbGVuKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKGMtPnB1YmxpY2tleSk7CisKKwkJbWVtY3B5KGMtPnB1YmxpY2tleSwgcHVibGlja2V5LCBwdWJsaWNrZXlfbGVuKTsKKwl9CisKKwljLT5wdWJsaWNrZXlfbGVuID0gcHVibGlja2V5X2xlbjsKKwljLT5zaWduX2NhbGxiYWNrID0gc2lnbl9jYWxsYmFjazsKKwljLT5zaWduX2RhdGEgPSBzaWduX2RhdGE7CiAKIAkqY3JlZCA9ICZjLT5wYXJlbnQ7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKKworaW50IGdpdF9jcmVkX2RlZmF1bHRfbmV3KGdpdF9jcmVkICoqY3JlZCkKK3sKKwlnaXRfY3JlZF9kZWZhdWx0ICpjOworCisJYXNzZXJ0KGNyZWQpOworCisJYyA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfY3JlZF9kZWZhdWx0KSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKGMpOworCisJYy0+Y3JlZHR5cGUgPSBHSVRfQ1JFRFRZUEVfREVGQVVMVDsKKwljLT5mcmVlID0gZGVmYXVsdF9mcmVlOworCisJKmNyZWQgPSBjOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvZ2l0LmMgYi9zcmMvdHJhbnNwb3J0cy9naXQuYwppbmRleCAzYTBiODYzLi41ZGNkNGVmIDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy9naXQuYworKysgYi9zcmMvdHJhbnNwb3J0cy9naXQuYwpAQCAtMTc5LDM5ICsxNzksMzMgQEAKIAljb25zdCBjaGFyICp1cmwsCiAJZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKipzdHJlYW0pCiB7Ci0JY2hhciAqaG9zdCwgKnBvcnQsICp1c2VyPU5VTEwsICpwYXNzPU5VTEw7CisJY2hhciAqaG9zdD1OVUxMLCAqcG9ydD1OVUxMLCAqcGF0aD1OVUxMLCAqdXNlcj1OVUxMLCAqcGFzcz1OVUxMOworCWNvbnN0IGNoYXIgKnN0cmVhbV91cmwgPSB1cmw7CiAJZ2l0X3N0cmVhbSAqczsKKwlpbnQgZXJyb3IgPSAtMTsKIAogCSpzdHJlYW0gPSBOVUxMOwotCiAJaWYgKCFnaXRfX3ByZWZpeGNtcCh1cmwsIHByZWZpeF9naXQpKQotCQl1cmwgKz0gc3RybGVuKHByZWZpeF9naXQpOworCQlzdHJlYW1fdXJsICs9IHN0cmxlbihwcmVmaXhfZ2l0KTsKIAotCWlmIChnaXRfc3RyZWFtX2FsbG9jKHQsIHVybCwgY21kX3VwbG9hZHBhY2ssIHN0cmVhbSkgPCAwKQorCWlmIChnaXRfc3RyZWFtX2FsbG9jKHQsIHN0cmVhbV91cmwsIGNtZF91cGxvYWRwYWNrLCBzdHJlYW0pIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJcyA9IChnaXRfc3RyZWFtICopKnN0cmVhbTsKIAotCWlmIChnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZ1c2VyLCAmcGFzcywgdXJsLCBHSVRfREVGQVVMVF9QT1JUKSA8IDApCi0JCWdvdG8gb25fZXJyb3I7CisJaWYgKCEoZXJyb3IgPSBnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZwYXRoLCAmdXNlciwgJnBhc3MsIHVybCwgR0lUX0RFRkFVTFRfUE9SVCkpKSB7CisJCWlmICghKGVycm9yID0gZ2l0bm9fY29ubmVjdCgmcy0+c29ja2V0LCBob3N0LCBwb3J0LCAwKSkpCisJCQl0LT5jdXJyZW50X3N0cmVhbSA9IHM7CiAKLQlpZiAoZ2l0bm9fY29ubmVjdCgmcy0+c29ja2V0LCBob3N0LCBwb3J0LCAwKSA8IDApCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQl0LT5jdXJyZW50X3N0cmVhbSA9IHM7Ci0JZ2l0X19mcmVlKGhvc3QpOwotCWdpdF9fZnJlZShwb3J0KTsKLQlnaXRfX2ZyZWUodXNlcik7Ci0JZ2l0X19mcmVlKHBhc3MpOwotCXJldHVybiAwOwotCi1vbl9lcnJvcjoKLQlpZiAoKnN0cmVhbSkKKwkJZ2l0X19mcmVlKGhvc3QpOworCQlnaXRfX2ZyZWUocG9ydCk7CisJCWdpdF9fZnJlZShwYXRoKTsKKwkJZ2l0X19mcmVlKHVzZXIpOworCQlnaXRfX2ZyZWUocGFzcyk7CisJfSBlbHNlIGlmICgqc3RyZWFtKQogCQlnaXRfc3RyZWFtX2ZyZWUoKnN0cmVhbSk7CiAKLQlnaXRfX2ZyZWUoaG9zdCk7Ci0JZ2l0X19mcmVlKHBvcnQpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX2dpdF91cGxvYWRwYWNrKApAQCAtMjM1LDM5ICsyMjksMzMgQEAKIAljb25zdCBjaGFyICp1cmwsCiAJZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKipzdHJlYW0pCiB7Ci0JY2hhciAqaG9zdCwgKnBvcnQsICp1c2VyPU5VTEwsICpwYXNzPU5VTEw7CisJY2hhciAqaG9zdD1OVUxMLCAqcG9ydD1OVUxMLCAqcGF0aD1OVUxMLCAqdXNlcj1OVUxMLCAqcGFzcz1OVUxMOworCWNvbnN0IGNoYXIgKnN0cmVhbV91cmwgPSB1cmw7CiAJZ2l0X3N0cmVhbSAqczsKKwlpbnQgZXJyb3I7CiAKIAkqc3RyZWFtID0gTlVMTDsKLQogCWlmICghZ2l0X19wcmVmaXhjbXAodXJsLCBwcmVmaXhfZ2l0KSkKLQkJdXJsICs9IHN0cmxlbihwcmVmaXhfZ2l0KTsKKwkJc3RyZWFtX3VybCArPSBzdHJsZW4ocHJlZml4X2dpdCk7CiAKLQlpZiAoZ2l0X3N0cmVhbV9hbGxvYyh0LCB1cmwsIGNtZF9yZWNlaXZlcGFjaywgc3RyZWFtKSA8IDApCisJaWYgKGdpdF9zdHJlYW1fYWxsb2ModCwgc3RyZWFtX3VybCwgY21kX3JlY2VpdmVwYWNrLCBzdHJlYW0pIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJcyA9IChnaXRfc3RyZWFtICopKnN0cmVhbTsKIAotCWlmIChnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZ1c2VyLCAmcGFzcywgdXJsLCBHSVRfREVGQVVMVF9QT1JUKSA8IDApCi0JCWdvdG8gb25fZXJyb3I7CisJaWYgKCEoZXJyb3IgPSBnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZwYXRoLCAmdXNlciwgJnBhc3MsIHVybCwgR0lUX0RFRkFVTFRfUE9SVCkpKSB7CisJCWlmICghKGVycm9yID0gZ2l0bm9fY29ubmVjdCgmcy0+c29ja2V0LCBob3N0LCBwb3J0LCAwKSkpCisJCQl0LT5jdXJyZW50X3N0cmVhbSA9IHM7CiAKLQlpZiAoZ2l0bm9fY29ubmVjdCgmcy0+c29ja2V0LCBob3N0LCBwb3J0LCAwKSA8IDApCi0JCWdvdG8gb25fZXJyb3I7Ci0KLQl0LT5jdXJyZW50X3N0cmVhbSA9IHM7Ci0JZ2l0X19mcmVlKGhvc3QpOwotCWdpdF9fZnJlZShwb3J0KTsKLQlnaXRfX2ZyZWUodXNlcik7Ci0JZ2l0X19mcmVlKHBhc3MpOwotCXJldHVybiAwOwotCi1vbl9lcnJvcjoKLQlpZiAoKnN0cmVhbSkKKwkJZ2l0X19mcmVlKGhvc3QpOworCQlnaXRfX2ZyZWUocG9ydCk7CisJCWdpdF9fZnJlZShwYXRoKTsKKwkJZ2l0X19mcmVlKHVzZXIpOworCQlnaXRfX2ZyZWUocGFzcyk7CisJfSBlbHNlIGlmICgqc3RyZWFtKQogCQlnaXRfc3RyZWFtX2ZyZWUoKnN0cmVhbSk7CiAKLQlnaXRfX2ZyZWUoaG9zdCk7Ci0JZ2l0X19mcmVlKHBvcnQpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX2dpdF9yZWNlaXZlcGFjaygKZGlmZiAtLWdpdCBhL3NyYy90cmFuc3BvcnRzL2h0dHAuYyBiL3NyYy90cmFuc3BvcnRzL2h0dHAuYwppbmRleCBlY2EwNmVhLi5hY2UwZDk3IDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy9odHRwLmMKKysrIGIvc3JjL3RyYW5zcG9ydHMvaHR0cC5jCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSAibmV0b3BzLmgiCiAjaW5jbHVkZSAic21hcnQuaCIKIAotc3RhdGljIGNvbnN0IGNoYXIgKnByZWZpeF9odHRwID0gImh0dHA6Ly8iOwotc3RhdGljIGNvbnN0IGNoYXIgKnByZWZpeF9odHRwcyA9ICJodHRwczovLyI7CiBzdGF0aWMgY29uc3QgY2hhciAqdXBsb2FkX3BhY2tfc2VydmljZSA9ICJ1cGxvYWQtcGFjayI7CiBzdGF0aWMgY29uc3QgY2hhciAqdXBsb2FkX3BhY2tfbHNfc2VydmljZV91cmwgPSAiL2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayI7CiBzdGF0aWMgY29uc3QgY2hhciAqdXBsb2FkX3BhY2tfc2VydmljZV91cmwgPSAiL2dpdC11cGxvYWQtcGFjayI7CkBAIC01OSwxNiArNTcsMTEgQEAKIAlnaXRfc21hcnRfc3VidHJhbnNwb3J0IHBhcmVudDsKIAl0cmFuc3BvcnRfc21hcnQgKm93bmVyOwogCWdpdG5vX3NvY2tldCBzb2NrZXQ7Ci0JY29uc3QgY2hhciAqcGF0aDsKLQljaGFyICpob3N0OwotCWNoYXIgKnBvcnQ7Ci0JY2hhciAqdXNlcl9mcm9tX3VybDsKLQljaGFyICpwYXNzX2Zyb21fdXJsOworCWdpdG5vX2Nvbm5lY3Rpb25fZGF0YSBjb25uZWN0aW9uX2RhdGE7CiAJZ2l0X2NyZWQgKmNyZWQ7CiAJZ2l0X2NyZWQgKnVybF9jcmVkOwogCWh0dHBfYXV0aG1lY2hhbmlzbV90IGF1dGhfbWVjaGFuaXNtOwotCXVuc2lnbmVkIGNvbm5lY3RlZCA6IDEsCi0JCXVzZV9zc2wgOiAxOworCWJvb2wgY29ubmVjdGVkOwogCiAJLyogUGFyc2VyIHN0cnVjdHVyZXMgKi8KIAlodHRwX3BhcnNlciBwYXJzZXI7CkBAIC0xMjUsMTggKzExOCwxMiBAQAogCXNpemVfdCBjb250ZW50X2xlbmd0aCkKIHsKIAlodHRwX3N1YnRyYW5zcG9ydCAqdCA9IE9XTklOR19TVUJUUkFOU1BPUlQocyk7CisJY29uc3QgY2hhciAqcGF0aCA9IHQtPmNvbm5lY3Rpb25fZGF0YS5wYXRoID8gdC0+Y29ubmVjdGlvbl9kYXRhLnBhdGggOiAiLyI7CiAKLQlpZiAoIXQtPnBhdGgpCi0JCXQtPnBhdGggPSAiLyI7Ci0KLQkvKiBJZiB3ZSB3ZXJlIHJlZGlyZWN0ZWQsIG1ha2Ugc3VyZSB0byByZXNwZWN0IHRoYXQgaGVyZSAqLwotCWlmIChzLT5yZWRpcmVjdF91cmwpCi0JCWdpdF9idWZfcHJpbnRmKGJ1ZiwgIiVzICVzIEhUVFAvMS4xXHJcbiIsIHMtPnZlcmIsIHMtPnJlZGlyZWN0X3VybCk7Ci0JZWxzZQotCQlnaXRfYnVmX3ByaW50ZihidWYsICIlcyAlcyVzIEhUVFAvMS4xXHJcbiIsIHMtPnZlcmIsIHQtPnBhdGgsIHMtPnNlcnZpY2VfdXJsKTsKKwlnaXRfYnVmX3ByaW50ZihidWYsICIlcyAlcyVzIEhUVFAvMS4xXHJcbiIsIHMtPnZlcmIsIHBhdGgsIHMtPnNlcnZpY2VfdXJsKTsKIAogCWdpdF9idWZfcHV0cyhidWYsICJVc2VyLUFnZW50OiBnaXQvMS4wIChsaWJnaXQyICIgTElCR0lUMl9WRVJTSU9OICIpXHJcbiIpOwotCWdpdF9idWZfcHJpbnRmKGJ1ZiwgIkhvc3Q6ICVzXHJcbiIsIHQtPmhvc3QpOworCWdpdF9idWZfcHJpbnRmKGJ1ZiwgIkhvc3Q6ICVzXHJcbiIsIHQtPmNvbm5lY3Rpb25fZGF0YS5ob3N0KTsKIAogCWlmIChzLT5jaHVua2VkIHx8IGNvbnRlbnRfbGVuZ3RoID4gMCkgewogCQlnaXRfYnVmX3ByaW50ZihidWYsICJBY2NlcHQ6IGFwcGxpY2F0aW9uL3gtZ2l0LSVzLXJlc3VsdFxyXG4iLCBzLT5zZXJ2aWNlKTsKQEAgLTE1Niw5ICsxNDMsOSBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKiBVc2UgdXJsLXBhcnNlZCBiYXNpYyBhdXRoIGlmIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgYm90aCBwcm92aWRlZCAqLwotCWlmICghdC0+Y3JlZCAmJiB0LT51c2VyX2Zyb21fdXJsICYmIHQtPnBhc3NfZnJvbV91cmwpIHsKLQkJaWYgKCF0LT51cmxfY3JlZCAmJgotCQkJIGdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dF9uZXcoJnQtPnVybF9jcmVkLCB0LT51c2VyX2Zyb21fdXJsLCB0LT5wYXNzX2Zyb21fdXJsKSA8IDApCisJaWYgKCF0LT5jcmVkICYmIHQtPmNvbm5lY3Rpb25fZGF0YS51c2VyICYmIHQtPmNvbm5lY3Rpb25fZGF0YS5wYXNzKSB7CisJCWlmICghdC0+dXJsX2NyZWQgJiYgZ2l0X2NyZWRfdXNlcnBhc3NfcGxhaW50ZXh0X25ldygmdC0+dXJsX2NyZWQsCisJCQkJCXQtPmNvbm5lY3Rpb25fZGF0YS51c2VyLCB0LT5jb25uZWN0aW9uX2RhdGEucGFzcykgPCAwKQogCQkJcmV0dXJuIC0xOwogCQlpZiAoYXBwbHlfYmFzaWNfY3JlZGVudGlhbChidWYsIHQtPnVybF9jcmVkKSA8IDApIHJldHVybiAtMTsKIAl9CkBAIC0yMDksNyArMTk2LDcgQEAKIAl9CiAJZWxzZSBpZiAoIXN0cmNhc2VjbXAoIkxvY2F0aW9uIiwgZ2l0X2J1Zl9jc3RyKG5hbWUpKSkgewogCQlpZiAoIXQtPmxvY2F0aW9uKSB7Ci0JCQl0LT5sb2NhdGlvbj0gZ2l0X19zdHJkdXAoZ2l0X2J1Zl9jc3RyKHZhbHVlKSk7CisJCQl0LT5sb2NhdGlvbiA9IGdpdF9fc3RyZHVwKGdpdF9idWZfY3N0cih2YWx1ZSkpOwogCQkJR0lURVJSX0NIRUNLX0FMTE9DKHQtPmxvY2F0aW9uKTsKIAkJfQogCX0KQEAgLTI4Myw3ICsyNzAsNyBAQAogCiAJCQlpZiAodC0+b3duZXItPmNyZWRfYWNxdWlyZV9jYigmdC0+Y3JlZCwKIAkJCQkJdC0+b3duZXItPnVybCwKLQkJCQkJdC0+dXNlcl9mcm9tX3VybCwKKwkJCQkJdC0+Y29ubmVjdGlvbl9kYXRhLnVzZXIsCiAJCQkJCWFsbG93ZWRfdHlwZXMsCiAJCQkJCXQtPm93bmVyLT5jcmVkX2FjcXVpcmVfcGF5bG9hZCkgPCAwKQogCQkJCXJldHVybiBQQVJTRV9FUlJPUl9HRU5FUklDOwpAQCAtMjk4LDIwICsyODUsMTggQEAKIAkvKiBDaGVjayBmb3IgYSByZWRpcmVjdC4KIAkgKiBSaWdodCBub3cgd2Ugb25seSBwZXJtaXQgYSByZWRpcmVjdCB0byB0aGUgc2FtZSBob3N0bmFtZS4gKi8KIAlpZiAoKHBhcnNlci0+c3RhdHVzX2NvZGUgPT0gMzAxIHx8Ci0JCSBwYXJzZXItPnN0YXR1c19jb2RlID09IDMwMiB8fAotCQkgKHBhcnNlci0+c3RhdHVzX2NvZGUgPT0gMzAzICYmIGdldF92ZXJiID09IHMtPnZlcmIpIHx8Ci0JCSBwYXJzZXItPnN0YXR1c19jb2RlID09IDMwNykgJiYKLQkJdC0+bG9jYXRpb24pIHsKKwkgICAgIHBhcnNlci0+c3RhdHVzX2NvZGUgPT0gMzAyIHx8CisJICAgICAocGFyc2VyLT5zdGF0dXNfY29kZSA9PSAzMDMgJiYgZ2V0X3ZlcmIgPT0gcy0+dmVyYikgfHwKKwkgICAgIHBhcnNlci0+c3RhdHVzX2NvZGUgPT0gMzA3KSAmJgorCSAgICB0LT5sb2NhdGlvbikgewogCiAJCWlmIChzLT5yZWRpcmVjdF9jb3VudCA+PSA3KSB7CiAJCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJUb28gbWFueSByZWRpcmVjdHMiKTsKIAkJCXJldHVybiB0LT5wYXJzZV9lcnJvciA9IFBBUlNFX0VSUk9SX0dFTkVSSUM7CiAJCX0KIAotCQlpZiAodC0+bG9jYXRpb25bMF0gIT0gJy8nKSB7Ci0JCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJPbmx5IHJlbGF0aXZlIHJlZGlyZWN0cyBhcmUgc3VwcG9ydGVkIik7CisJCWlmIChnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJnQtPmNvbm5lY3Rpb25fZGF0YSwgdC0+bG9jYXRpb24sIHMtPnNlcnZpY2VfdXJsKSA8IDApCiAJCQlyZXR1cm4gdC0+cGFyc2VfZXJyb3IgPSBQQVJTRV9FUlJPUl9HRU5FUklDOwotCQl9CiAKIAkJLyogU2V0IHRoZSByZWRpcmVjdCBVUkwgb24gdGhlIHN0cmVhbS4gVGhpcyBpcyBhIHRyYW5zZmVyIG9mCiAJCSAqIG93bmVyc2hpcCBvZiB0aGUgbWVtb3J5LiAqLwpAQCAtNDY4LDcgKzQ1Myw3IEBACiAJaWYgKHQtPnNvY2tldC5zb2NrZXQpCiAJCWdpdG5vX2Nsb3NlKCZ0LT5zb2NrZXQpOwogCi0JaWYgKHQtPnVzZV9zc2wpIHsKKwlpZiAodC0+Y29ubmVjdGlvbl9kYXRhLnVzZV9zc2wpIHsKIAkJaW50IHRmbGFnczsKIAogCQlpZiAodC0+b3duZXItPnBhcmVudC5yZWFkX2ZsYWdzKCZ0LT5vd25lci0+cGFyZW50LCAmdGZsYWdzKSA8IDApCkBAIC00ODAsNyArNDY1LDcgQEAKIAkJCWZsYWdzIHw9IEdJVE5PX0NPTk5FQ1RfU1NMX05PX0NIRUNLX0NFUlQ7CiAJfQogCi0JaWYgKGdpdG5vX2Nvbm5lY3QoJnQtPnNvY2tldCwgdC0+aG9zdCwgdC0+cG9ydCwgZmxhZ3MpIDwgMCkKKwlpZiAoZ2l0bm9fY29ubmVjdCgmdC0+c29ja2V0LCB0LT5jb25uZWN0aW9uX2RhdGEuaG9zdCwgdC0+Y29ubmVjdGlvbl9kYXRhLnBvcnQsIGZsYWdzKSA8IDApCiAJCXJldHVybiAtMTsKIAogCXQtPmNvbm5lY3RlZCA9IDE7CkBAIC04MjIsNTAgKzgwNywzMCBAQAogCWdpdF9zbWFydF9zZXJ2aWNlX3QgYWN0aW9uKQogewogCWh0dHBfc3VidHJhbnNwb3J0ICp0ID0gKGh0dHBfc3VidHJhbnNwb3J0ICopc3VidHJhbnNwb3J0OwotCWNvbnN0IGNoYXIgKmRlZmF1bHRfcG9ydCA9IE5VTEw7CiAJaW50IHJldDsKIAogCWlmICghc3RyZWFtKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoIXQtPmhvc3QgfHwgIXQtPnBvcnQgfHwgIXQtPnBhdGgpIHsKLQkJaWYgKCFnaXRfX3ByZWZpeGNtcCh1cmwsIHByZWZpeF9odHRwKSkgewotCQkJdXJsID0gdXJsICsgc3RybGVuKHByZWZpeF9odHRwKTsKLQkJCWRlZmF1bHRfcG9ydCA9ICI4MCI7Ci0JCX0KLQotCQlpZiAoIWdpdF9fcHJlZml4Y21wKHVybCwgcHJlZml4X2h0dHBzKSkgewotCQkJdXJsICs9IHN0cmxlbihwcmVmaXhfaHR0cHMpOwotCQkJZGVmYXVsdF9wb3J0ID0gIjQ0MyI7Ci0JCQl0LT51c2Vfc3NsID0gMTsKLQkJfQotCi0JCWlmICghZGVmYXVsdF9wb3J0KQotCQkJcmV0dXJuIC0xOwotCi0JCWlmICgocmV0ID0gZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJnQtPmhvc3QsICZ0LT5wb3J0LAotCQkJCQkJJnQtPnVzZXJfZnJvbV91cmwsICZ0LT5wYXNzX2Zyb21fdXJsLCB1cmwsIGRlZmF1bHRfcG9ydCkpIDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJdC0+cGF0aCA9IHN0cmNocih1cmwsICcvJyk7Ci0JfQorCWlmICgoIXQtPmNvbm5lY3Rpb25fZGF0YS5ob3N0IHx8ICF0LT5jb25uZWN0aW9uX2RhdGEucG9ydCB8fCAhdC0+Y29ubmVjdGlvbl9kYXRhLnBhdGgpICYmCisJCSAocmV0ID0gZ2l0bm9fY29ubmVjdGlvbl9kYXRhX2Zyb21fdXJsKCZ0LT5jb25uZWN0aW9uX2RhdGEsIHVybCwgTlVMTCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCWlmIChodHRwX2Nvbm5lY3QodCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlzd2l0Y2ggKGFjdGlvbikKLQl7Ci0JCWNhc2UgR0lUX1NFUlZJQ0VfVVBMT0FEUEFDS19MUzoKLQkJCXJldHVybiBodHRwX3VwbG9hZHBhY2tfbHModCwgc3RyZWFtKTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgR0lUX1NFUlZJQ0VfVVBMT0FEUEFDS19MUzoKKwkJcmV0dXJuIGh0dHBfdXBsb2FkcGFja19scyh0LCBzdHJlYW0pOwogCi0JCWNhc2UgR0lUX1NFUlZJQ0VfVVBMT0FEUEFDSzoKLQkJCXJldHVybiBodHRwX3VwbG9hZHBhY2sodCwgc3RyZWFtKTsKKwljYXNlIEdJVF9TRVJWSUNFX1VQTE9BRFBBQ0s6CisJCXJldHVybiBodHRwX3VwbG9hZHBhY2sodCwgc3RyZWFtKTsKIAotCQljYXNlIEdJVF9TRVJWSUNFX1JFQ0VJVkVQQUNLX0xTOgotCQkJcmV0dXJuIGh0dHBfcmVjZWl2ZXBhY2tfbHModCwgc3RyZWFtKTsKKwljYXNlIEdJVF9TRVJWSUNFX1JFQ0VJVkVQQUNLX0xTOgorCQlyZXR1cm4gaHR0cF9yZWNlaXZlcGFja19scyh0LCBzdHJlYW0pOwogCi0JCWNhc2UgR0lUX1NFUlZJQ0VfUkVDRUlWRVBBQ0s6Ci0JCQlyZXR1cm4gaHR0cF9yZWNlaXZlcGFjayh0LCBzdHJlYW0pOworCWNhc2UgR0lUX1NFUlZJQ0VfUkVDRUlWRVBBQ0s6CisJCXJldHVybiBodHRwX3JlY2VpdmVwYWNrKHQsIHN0cmVhbSk7CiAJfQogCiAJKnN0cmVhbSA9IE5VTEw7CkBAIC04OTMsMjUgKzg1OCw3IEBACiAJCXQtPnVybF9jcmVkID0gTlVMTDsKIAl9CiAKLQlpZiAodC0+aG9zdCkgewotCQlnaXRfX2ZyZWUodC0+aG9zdCk7Ci0JCXQtPmhvc3QgPSBOVUxMOwotCX0KLQotCWlmICh0LT5wb3J0KSB7Ci0JCWdpdF9fZnJlZSh0LT5wb3J0KTsKLQkJdC0+cG9ydCA9IE5VTEw7Ci0JfQotCi0JaWYgKHQtPnVzZXJfZnJvbV91cmwpIHsKLQkJZ2l0X19mcmVlKHQtPnVzZXJfZnJvbV91cmwpOwotCQl0LT51c2VyX2Zyb21fdXJsID0gTlVMTDsKLQl9Ci0KLQlpZiAodC0+cGFzc19mcm9tX3VybCkgewotCQlnaXRfX2ZyZWUodC0+cGFzc19mcm9tX3VybCk7Ci0JCXQtPnBhc3NfZnJvbV91cmwgPSBOVUxMOwotCX0KKwlnaXRub19jb25uZWN0aW9uX2RhdGFfZnJlZV9wdHJzKCZ0LT5jb25uZWN0aW9uX2RhdGEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zcmMvdHJhbnNwb3J0cy9sb2NhbC5jIGIvc3JjL3RyYW5zcG9ydHMvbG9jYWwuYwppbmRleCA1NTAwNjA5Li40NTAyZjAyIDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy9sb2NhbC5jCisrKyBiL3NyYy90cmFuc3BvcnRzL2xvY2FsLmMKQEAgLTExOSwxNSArMTE5LDI0IEBACiAKIHN0YXRpYyBpbnQgc3RvcmVfcmVmcyh0cmFuc3BvcnRfbG9jYWwgKnQpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJc2l6ZV90IGk7CisJZ2l0X3JlbW90ZV9oZWFkICpoZWFkOwogCWdpdF9zdHJhcnJheSByZWZfbmFtZXMgPSB7MH07CiAKIAlhc3NlcnQodCk7CiAKLQlpZiAoZ2l0X3JlZmVyZW5jZV9saXN0KCZyZWZfbmFtZXMsIHQtPnJlcG8pIDwgMCB8fAotCQlnaXRfdmVjdG9yX2luaXQoJnQtPnJlZnMsIHJlZl9uYW1lcy5jb3VudCwgTlVMTCkgPCAwKQorCWlmIChnaXRfcmVmZXJlbmNlX2xpc3QoJnJlZl9uYW1lcywgdC0+cmVwbykgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwogCisJLyogQ2xlYXIgYWxsIGhlYWRzIHdlIG1pZ2h0IGhhdmUgZmV0Y2hlZCBpbiBhIHByZXZpb3VzIGNvbm5lY3QgKi8KKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnQtPnJlZnMsIGksIGhlYWQpIHsKKwkJZ2l0X19mcmVlKGhlYWQtPm5hbWUpOworCQlnaXRfX2ZyZWUoaGVhZCk7CisJfQorCisJLyogQ2xlYXIgdGhlIHZlY3RvciBzbyB3ZSBjYW4gcmV1c2UgaXQgKi8KKwlnaXRfdmVjdG9yX2NsZWFyKCZ0LT5yZWZzKTsKKwogCS8qIFNvcnQgdGhlIHJlZmVyZW5jZXMgZmlyc3QgKi8KIAlnaXRfX3Rzb3J0KCh2b2lkICoqKXJlZl9uYW1lcy5zdHJpbmdzLCByZWZfbmFtZXMuY291bnQsICZnaXRfX3N0cmNtcF9jYik7CiAKQEAgLTIwNCwyMSArMjEzLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbG9jYWxfbHMoZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LCBnaXRfaGVhZGxpc3RfY2IgbGlzdF9jYiwgdm9pZCAqcGF5bG9hZCkKK3N0YXRpYyBpbnQgbG9jYWxfbHMoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqKm91dCwgc2l6ZV90ICpzaXplLCBnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCiB7CiAJdHJhbnNwb3J0X2xvY2FsICp0ID0gKHRyYW5zcG9ydF9sb2NhbCAqKXRyYW5zcG9ydDsKLQl1bnNpZ25lZCBpbnQgaTsKLQlnaXRfcmVtb3RlX2hlYWQgKmhlYWQgPSBOVUxMOwogCiAJaWYgKCF0LT5oYXZlX3JlZnMpIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiVGhlIHRyYW5zcG9ydCBoYXMgbm90IHlldCBsb2FkZWQgdGhlIHJlZnMiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWdpdF92ZWN0b3JfZm9yZWFjaCgmdC0+cmVmcywgaSwgaGVhZCkgewotCQlpZiAobGlzdF9jYihoZWFkLCBwYXlsb2FkKSkKLQkJCXJldHVybiBHSVRfRVVTRVI7Ci0JfQorCSpvdXQgPSAoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqKSB0LT5yZWZzLmNvbnRlbnRzOworCSpzaXplID0gdC0+cmVmcy5sZW5ndGg7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3OCw5ICsyODMsOSBAQAogCQlvZGJfb2JqX3NpemUsIG9kYl9vYmpfdHlwZSkpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAotCWlmIChvZGJfc3RyZWFtLT53cml0ZShvZGJfc3RyZWFtLCAoY2hhciAqKWdpdF9vZGJfb2JqZWN0X2RhdGEob2RiX29iaiksCisJaWYgKGdpdF9vZGJfc3RyZWFtX3dyaXRlKG9kYl9zdHJlYW0sIChjaGFyICopZ2l0X29kYl9vYmplY3RfZGF0YShvZGJfb2JqKSwKIAkJb2RiX29ial9zaXplKSA8IDAgfHwKLQkJb2RiX3N0cmVhbS0+ZmluYWxpemVfd3JpdGUoJnJlbW90ZV9vZGJfb2JqX29pZCwgb2RiX3N0cmVhbSkgPCAwKSB7CisJCWdpdF9vZGJfc3RyZWFtX2ZpbmFsaXplX3dyaXRlKCZyZW1vdGVfb2RiX29ial9vaWQsIG9kYl9zdHJlYW0pIDwgMCkgewogCQllcnJvciA9IC0xOwogCX0gZWxzZSBpZiAoZ2l0X29pZF9fY21wKCZvYmotPmlkLCAmcmVtb3RlX29kYl9vYmpfb2lkKSAhPSAwKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX09EQiwgIkVycm9yIHdoZW4gd3JpdGluZyBvYmplY3QgdG8gcmVtb3RlIG9kYiAiCkBAIC0yODksNyArMjk0LDcgQEAKIAkJZXJyb3IgPSAtMTsKIAl9CiAKLQlvZGJfc3RyZWFtLT5mcmVlKG9kYl9zdHJlYW0pOworCWdpdF9vZGJfc3RyZWFtX2ZyZWUob2RiX3N0cmVhbSk7CiAKIG9uX2Vycm9yOgogCWdpdF9vZGJfb2JqZWN0X2ZyZWUob2RiX29iaik7CkBAIC0zNTIsNyArMzU3LDggQEAKIAkgICBub24tYmFyZSByZXBvIHB1c2ggc3VwcG9ydCB3b3VsZCByZXF1aXJlIGNoZWNraW5nIGNvbmZpZ3MgdG8gc2VlIGlmCiAJICAgd2Ugc2hvdWxkIG92ZXJyaWRlIHRoZSBkZWZhdWx0ICdkb24ndCBsZXQgdGhpcyBoYXBwZW4nIGJlaGF2aW9yICovCiAJaWYgKCFyZW1vdGVfcmVwby0+aXNfYmFyZSkgewotCQllcnJvciA9IC0xOworCQllcnJvciA9IEdJVF9FQkFSRVJFUE87CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJMb2NhbCBwdXNoIGRvZXNuJ3QgKHlldCkgc3VwcG9ydCBwdXNoaW5nIHRvIG5vbi1iYXJlIHJlcG9zLiIpOwogCQlnb3RvIG9uX2Vycm9yOwogCX0KIApAQCAtNDI0LDcgKzQzMCw3IEBACiAKIAkJaWYgKCF1cmwgfHwgdC0+cGFyZW50LmNsb3NlKCZ0LT5wYXJlbnQpIDwgMCB8fAogCQkJdC0+cGFyZW50LmNvbm5lY3QoJnQtPnBhcmVudCwgdXJsLAotCQkJcHVzaC0+cmVtb3RlLT5jcmVkX2FjcXVpcmVfY2IsIE5VTEwsIEdJVF9ESVJFQ1RJT05fUFVTSCwgZmxhZ3MpKQorCQkJcHVzaC0+cmVtb3RlLT5jYWxsYmFja3MuY3JlZGVudGlhbHMsIE5VTEwsIEdJVF9ESVJFQ1RJT05fUFVTSCwgZmxhZ3MpKQogCQkJZ290byBvbl9lcnJvcjsKIAl9CiAKQEAgLTQ0OSw3ICs0NTUsNyBAQAogCWZvcmVhY2hfZGF0YSAqZGF0YSA9IChmb3JlYWNoX2RhdGEqKXBheWxvYWQ7CiAKIAlkYXRhLT5zdGF0cy0+cmVjZWl2ZWRfYnl0ZXMgKz0gbGVuOwotCXJldHVybiBkYXRhLT53cml0ZXBhY2stPmFkZChkYXRhLT53cml0ZXBhY2ssIGJ1ZiwgbGVuLCBkYXRhLT5zdGF0cyk7CisJcmV0dXJuIGRhdGEtPndyaXRlcGFjay0+YXBwZW5kKGRhdGEtPndyaXRlcGFjaywgYnVmLCBsZW4sIGRhdGEtPnN0YXRzKTsKIH0KIAogc3RhdGljIGludCBsb2NhbF9kb3dubG9hZF9wYWNrKApAQCAtNTcxLDggKzU3Nyw2IEBACiBzdGF0aWMgaW50IGxvY2FsX2Nsb3NlKGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKIHsKIAl0cmFuc3BvcnRfbG9jYWwgKnQgPSAodHJhbnNwb3J0X2xvY2FsICopdHJhbnNwb3J0OwotCXNpemVfdCBpOwotCWdpdF9yZW1vdGVfaGVhZCAqaGVhZDsKIAogCXQtPmNvbm5lY3RlZCA9IDA7CiAKQEAgLTU4NiwxOSArNTkwLDIxIEBACiAJCXQtPnVybCA9IE5VTEw7CiAJfQogCi0JZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZ0LT5yZWZzLCBpLCBoZWFkKSB7Ci0JCWdpdF9fZnJlZShoZWFkLT5uYW1lKTsKLQkJZ2l0X19mcmVlKGhlYWQpOwotCX0KLQotCWdpdF92ZWN0b3JfZnJlZSgmdC0+cmVmcyk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbG9jYWxfZnJlZShnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCiB7CiAJdHJhbnNwb3J0X2xvY2FsICp0ID0gKHRyYW5zcG9ydF9sb2NhbCAqKXRyYW5zcG9ydDsKKwlzaXplX3QgaTsKKwlnaXRfcmVtb3RlX2hlYWQgKmhlYWQ7CisKKwlnaXRfdmVjdG9yX2ZvcmVhY2goJnQtPnJlZnMsIGksIGhlYWQpIHsKKwkJZ2l0X19mcmVlKGhlYWQtPm5hbWUpOworCQlnaXRfX2ZyZWUoaGVhZCk7CisJfQorCisJZ2l0X3ZlY3Rvcl9mcmVlKCZ0LT5yZWZzKTsKIAogCS8qIENsb3NlIHRoZSB0cmFuc3BvcnQsIGlmIGl0J3Mgc3RpbGwgb3Blbi4gKi8KIAlsb2NhbF9jbG9zZSh0cmFuc3BvcnQpOwpAQCAtNjMyLDYgKzYzOCw3IEBACiAJdC0+cGFyZW50LnJlYWRfZmxhZ3MgPSBsb2NhbF9yZWFkX2ZsYWdzOwogCXQtPnBhcmVudC5jYW5jZWwgPSBsb2NhbF9jYW5jZWw7CiAKKwlnaXRfdmVjdG9yX2luaXQoJnQtPnJlZnMsIDAsIE5VTEwpOwogCXQtPm93bmVyID0gb3duZXI7CiAKIAkqb3V0ID0gKGdpdF90cmFuc3BvcnQgKikgdDsKZGlmZiAtLWdpdCBhL3NyYy90cmFuc3BvcnRzL3NtYXJ0LmMgYi9zcmMvdHJhbnNwb3J0cy9zbWFydC5jCmluZGV4IDQxNmViMjIuLjUyNDJiZWIgMTAwNjQ0Ci0tLSBhL3NyYy90cmFuc3BvcnRzL3NtYXJ0LmMKKysrIGIvc3JjL3RyYW5zcG9ydHMvc21hcnQuYwpAQCAtMjMsOCArMjMsMTMgQEAKIAogCWJ1Zi0+b2Zmc2V0ICs9IGJ5dGVzX3JlYWQ7CiAKLQlpZiAodC0+cGFja2V0c2l6ZV9jYikKLQkJdC0+cGFja2V0c2l6ZV9jYihieXRlc19yZWFkLCB0LT5wYWNrZXRzaXplX3BheWxvYWQpOworCWlmICh0LT5wYWNrZXRzaXplX2NiICYmICF0LT5jYW5jZWxsZWQudmFsKQorCQlpZiAodC0+cGFja2V0c2l6ZV9jYihieXRlc19yZWFkLCB0LT5wYWNrZXRzaXplX3BheWxvYWQpKSB7CisJCQlnaXRfYXRvbWljX3NldCgmdC0+Y2FuY2VsbGVkLCAxKTsKKworCQkJZ2l0ZXJyX2NsZWFyKCk7CisJCQlyZXR1cm4gR0lUX0VVU0VSOworCQl9CiAKIAlyZXR1cm4gKGludCkoYnVmLT5vZmZzZXQgLSBvbGRfbGVuKTsKIH0KQEAgLTU4LDYgKzYzLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBnaXRfc21hcnRfX3VwZGF0ZV9oZWFkcyh0cmFuc3BvcnRfc21hcnQgKnQpCit7CisJc2l6ZV90IGk7CisJZ2l0X3BrdCAqcGt0OworCisJZ2l0X3ZlY3Rvcl9jbGVhcigmdC0+aGVhZHMpOworCWdpdF92ZWN0b3JfZm9yZWFjaCgmdC0+cmVmcywgaSwgcGt0KSB7CisJCWdpdF9wa3RfcmVmICpyZWYgPSAoZ2l0X3BrdF9yZWYgKikgcGt0OworCQlpZiAocGt0LT50eXBlICE9IEdJVF9QS1RfUkVGKQorCQkJY29udGludWU7CisKKwkJaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KCZ0LT5oZWFkcywgJnJlZi0+aGVhZCkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGdpdF9zbWFydF9fY29ubmVjdCgKIAlnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJY29uc3QgY2hhciAqdXJsLApAQCAtMTM1LDYgKzE1OCw5IEBACiAJCWdpdF9wa3RfZnJlZSgoZ2l0X3BrdCAqKWZpcnN0KTsKIAl9CiAKKwkvKiBLZWVwIGEgbGlzdCBvZiBoZWFkcyBmb3IgX2xzICovCisJZ2l0X3NtYXJ0X191cGRhdGVfaGVhZHModCk7CisKIAlpZiAodC0+cnBjICYmIGdpdF9zbWFydF9fcmVzZXRfc3RyZWFtKHQsIGZhbHNlKSA8IDApCiAJCXJldHVybiAtMTsKIApAQCAtMTQ0LDI4ICsxNzAsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRfc21hcnRfX2xzKGdpdF90cmFuc3BvcnQgKnRyYW5zcG9ydCwgZ2l0X2hlYWRsaXN0X2NiIGxpc3RfY2IsIHZvaWQgKnBheWxvYWQpCitzdGF0aWMgaW50IGdpdF9zbWFydF9fbHMoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqKm91dCwgc2l6ZV90ICpzaXplLCBnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCiB7CiAJdHJhbnNwb3J0X3NtYXJ0ICp0ID0gKHRyYW5zcG9ydF9zbWFydCAqKXRyYW5zcG9ydDsKLQl1bnNpZ25lZCBpbnQgaTsKLQlnaXRfcGt0ICpwID0gTlVMTDsKIAogCWlmICghdC0+aGF2ZV9yZWZzKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIlRoZSB0cmFuc3BvcnQgaGFzIG5vdCB5ZXQgbG9hZGVkIHRoZSByZWZzIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlnaXRfdmVjdG9yX2ZvcmVhY2goJnQtPnJlZnMsIGksIHApIHsKLQkJZ2l0X3BrdF9yZWYgKnBrdCA9IE5VTEw7Ci0KLQkJaWYgKHAtPnR5cGUgIT0gR0lUX1BLVF9SRUYpCi0JCQljb250aW51ZTsKLQotCQlwa3QgPSAoZ2l0X3BrdF9yZWYgKilwOwotCi0JCWlmIChsaXN0X2NiKCZwa3QtPmhlYWQsIHBheWxvYWQpKQotCQkJcmV0dXJuIEdJVF9FVVNFUjsKLQl9CisJKm91dCA9IChjb25zdCBnaXRfcmVtb3RlX2hlYWQgKiopIHQtPmhlYWRzLmNvbnRlbnRzOworCSpzaXplID0gdC0+aGVhZHMubGVuZ3RoOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODgsNiArMzAzLDcgQEAKIAkvKiBGcmVlIHRoZSBzdWJ0cmFuc3BvcnQgKi8KIAl0LT53cmFwcGVkLT5mcmVlKHQtPndyYXBwZWQpOwogCisJZ2l0X3ZlY3Rvcl9mcmVlKCZ0LT5oZWFkcyk7CiAJZ2l0X3ZlY3Rvcl9mb3JlYWNoKHJlZnMsIGksIHApCiAJCWdpdF9wa3RfZnJlZShwKTsKIApAQCAtMzM1LDYgKzM1MSwxMSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKGdpdF92ZWN0b3JfaW5pdCgmdC0+aGVhZHMsIDE2LCByZWZfbmFtZV9jbXApIDwgMCkgeworCQlnaXRfX2ZyZWUodCk7CisJCXJldHVybiAtMTsKKwl9CisKIAlpZiAoZGVmaW5pdGlvbi0+Y2FsbGJhY2soJnQtPndyYXBwZWQsICZ0LT5wYXJlbnQpIDwgMCkgewogCQlnaXRfX2ZyZWUodCk7CiAJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3NyYy90cmFuc3BvcnRzL3NtYXJ0LmggYi9zcmMvdHJhbnNwb3J0cy9zbWFydC5oCmluZGV4IGM1MjQwMWEuLjMyZjBiZTcgMTAwNjQ0Ci0tLSBhL3NyYy90cmFuc3BvcnRzL3NtYXJ0LmgKKysrIGIvc3JjL3RyYW5zcG9ydHMvc21hcnQuaApAQCAtMTYsMTEgKzE2LDEzIEBACiAKICNkZWZpbmUgR0lUX0NBUF9PRlNfREVMVEEgIm9mcy1kZWx0YSIKICNkZWZpbmUgR0lUX0NBUF9NVUxUSV9BQ0sgIm11bHRpX2FjayIKKyNkZWZpbmUgR0lUX0NBUF9NVUxUSV9BQ0tfREVUQUlMRUQgIm11bHRpX2Fja19kZXRhaWxlZCIKICNkZWZpbmUgR0lUX0NBUF9TSURFX0JBTkQgInNpZGUtYmFuZCIKICNkZWZpbmUgR0lUX0NBUF9TSURFX0JBTkRfNjRLICJzaWRlLWJhbmQtNjRrIgogI2RlZmluZSBHSVRfQ0FQX0lOQ0xVREVfVEFHICJpbmNsdWRlLXRhZyIKICNkZWZpbmUgR0lUX0NBUF9ERUxFVEVfUkVGUyAiZGVsZXRlLXJlZnMiCiAjZGVmaW5lIEdJVF9DQVBfUkVQT1JUX1NUQVRVUyAicmVwb3J0LXN0YXR1cyIKKyNkZWZpbmUgR0lUX0NBUF9USElOX1BBQ0sgInRoaW4tcGFjayIKIAogZW51bSBnaXRfcGt0X3R5cGUgewogCUdJVF9QS1RfQ01ELApAQCAtMzksNyArNDEsNyBAQAogCUdJVF9QS1RfVU5QQUNLLAogfTsKIAotLyogVXNlZCBmb3IgbXVsdGktYWNrICovCisvKiBVc2VkIGZvciBtdWx0aV9hY2sgYW5kIG11dGxpX2Fja19kZXRhaWxlZCAqLwogZW51bSBnaXRfYWNrX3N0YXR1cyB7CiAJR0lUX0FDS19OT05FLAogCUdJVF9BQ0tfQ09OVElOVUUsCkBAIC0xMTIsMTQgKzExNCwxNiBAQAogCWludCBjb21tb246MSwKIAkJb2ZzX2RlbHRhOjEsCiAJCW11bHRpX2FjazogMSwKKwkJbXVsdGlfYWNrX2RldGFpbGVkOiAxLAogCQlzaWRlX2JhbmQ6MSwKIAkJc2lkZV9iYW5kXzY0azoxLAogCQlpbmNsdWRlX3RhZzoxLAogCQlkZWxldGVfcmVmczoxLAotCQlyZXBvcnRfc3RhdHVzOjE7CisJCXJlcG9ydF9zdGF0dXM6MSwKKwkJdGhpbl9wYWNrOjE7CiB9IHRyYW5zcG9ydF9zbWFydF9jYXBzOwogCi10eXBlZGVmIHZvaWQgKCpwYWNrZXRzaXplX2NiKShzaXplX3QgcmVjZWl2ZWQsIHZvaWQgKnBheWxvYWQpOwordHlwZWRlZiBpbnQgKCpwYWNrZXRzaXplX2NiKShzaXplX3QgcmVjZWl2ZWQsIHZvaWQgKnBheWxvYWQpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJZ2l0X3RyYW5zcG9ydCBwYXJlbnQ7CkBAIC0xMzYsNiArMTQwLDcgQEAKIAlnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqY3VycmVudF9zdHJlYW07CiAJdHJhbnNwb3J0X3NtYXJ0X2NhcHMgY2FwczsKIAlnaXRfdmVjdG9yIHJlZnM7CisJZ2l0X3ZlY3RvciBoZWFkczsKIAlnaXRfdmVjdG9yIGNvbW1vbjsKIAlnaXRfYXRvbWljIGNhbmNlbGxlZDsKIAlwYWNrZXRzaXplX2NiIHBhY2tldHNpemVfY2I7CkBAIC0xNjksNiArMTc0LDggQEAKIGludCBnaXRfc21hcnRfX25lZ290aWF0aW9uX3N0ZXAoZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIGludCBnaXRfc21hcnRfX2dldF9wdXNoX3N0cmVhbSh0cmFuc3BvcnRfc21hcnQgKnQsIGdpdF9zbWFydF9zdWJ0cmFuc3BvcnRfc3RyZWFtICoqb3V0KTsKIAoraW50IGdpdF9zbWFydF9fdXBkYXRlX2hlYWRzKHRyYW5zcG9ydF9zbWFydCAqdCk7CisKIC8qIHNtYXJ0X3BrdC5jICovCiBpbnQgZ2l0X3BrdF9wYXJzZV9saW5lKGdpdF9wa3QgKipoZWFkLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICoqb3V0LCBzaXplX3QgbGVuKTsKIGludCBnaXRfcGt0X2J1ZmZlcl9mbHVzaChnaXRfYnVmICpidWYpOwpkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvc21hcnRfcGt0LmMgYi9zcmMvdHJhbnNwb3J0cy9zbWFydF9wa3QuYwppbmRleCA5OWRhMzc1Li4yYmIwOWM3IDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy9zbWFydF9wa3QuYworKysgYi9zcmMvdHJhbnNwb3J0cy9zbWFydF9wa3QuYwpAQCAtMzksNyArMzksNyBAQAogCXJldHVybiAwOwogfQogCi0vKiB0aGUgcmVzdCBvZiB0aGUgbGluZSB3aWxsIGJlIHVzZWZ1bCBmb3IgbXVsdGlfYWNrICovCisvKiB0aGUgcmVzdCBvZiB0aGUgbGluZSB3aWxsIGJlIHVzZWZ1bCBmb3IgbXVsdGlfYWNrIGFuZCBtdWx0aV9hY2tfZGV0YWlsZWQgKi8KIHN0YXRpYyBpbnQgYWNrX3BrdChnaXRfcGt0ICoqb3V0LCBjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQogewogCWdpdF9wa3RfYWNrICpwa3Q7CkBAIC02Miw2ICs2MiwxMCBAQAogCWlmIChsZW4gPj0gNykgewogCQlpZiAoIWdpdF9fcHJlZml4Y21wKGxpbmUgKyAxLCAiY29udGludWUiKSkKIAkJCXBrdC0+c3RhdHVzID0gR0lUX0FDS19DT05USU5VRTsKKwkJaWYgKCFnaXRfX3ByZWZpeGNtcChsaW5lICsgMSwgImNvbW1vbiIpKQorCQkJcGt0LT5zdGF0dXMgPSBHSVRfQUNLX0NPTU1PTjsKKwkJaWYgKCFnaXRfX3ByZWZpeGNtcChsaW5lICsgMSwgInJlYWR5IikpCisJCQlwa3QtPnN0YXR1cyA9IEdJVF9BQ0tfUkVBRFk7CiAJfQogCiAJKm91dCA9IChnaXRfcGt0ICopIHBrdDsKQEAgLTQ1NiwyMiArNDYwLDI3IEBACiAJY2hhciBvaWRbR0lUX09JRF9IRVhTWiArMV0gPSB7MH07CiAJdW5zaWduZWQgaW50IGxlbjsKIAotCS8qIFByZWZlciBzaWRlLWJhbmQtNjRrIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgYm90aCAqLwotCWlmIChjYXBzLT5zaWRlX2JhbmQpIHsKLQkJaWYgKGNhcHMtPnNpZGVfYmFuZF82NGspCi0JCQlnaXRfYnVmX3ByaW50Zigmc3RyLCAiJXMgIiwgR0lUX0NBUF9TSURFX0JBTkRfNjRLKTsKLQkJZWxzZQotCQkJZ2l0X2J1Zl9wcmludGYoJnN0ciwgIiVzICIsIEdJVF9DQVBfU0lERV9CQU5EKTsKLQl9Ci0JaWYgKGNhcHMtPm9mc19kZWx0YSkKLQkJZ2l0X2J1Zl9wdXRzKCZzdHIsIEdJVF9DQVBfT0ZTX0RFTFRBICIgIik7Ci0KLQlpZiAoY2Fwcy0+bXVsdGlfYWNrKQorCS8qIFByZWZlciBtdWx0aV9hY2tfZGV0YWlsZWQgKi8KKwlpZiAoY2Fwcy0+bXVsdGlfYWNrX2RldGFpbGVkKQorCQlnaXRfYnVmX3B1dHMoJnN0ciwgR0lUX0NBUF9NVUxUSV9BQ0tfREVUQUlMRUQgIiAiKTsKKwllbHNlIGlmIChjYXBzLT5tdWx0aV9hY2spCiAJCWdpdF9idWZfcHV0cygmc3RyLCBHSVRfQ0FQX01VTFRJX0FDSyAiICIpOwogCisJLyogUHJlZmVyIHNpZGUtYmFuZC02NGsgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBib3RoICovCisJaWYgKGNhcHMtPnNpZGVfYmFuZF82NGspCisJCWdpdF9idWZfcHJpbnRmKCZzdHIsICIlcyAiLCBHSVRfQ0FQX1NJREVfQkFORF82NEspOworCWVsc2UgaWYgKGNhcHMtPnNpZGVfYmFuZCkKKwkJZ2l0X2J1Zl9wcmludGYoJnN0ciwgIiVzICIsIEdJVF9DQVBfU0lERV9CQU5EKTsKKwogCWlmIChjYXBzLT5pbmNsdWRlX3RhZykKIAkJZ2l0X2J1Zl9wdXRzKCZzdHIsIEdJVF9DQVBfSU5DTFVERV9UQUcgIiAiKTsKIAorCWlmIChjYXBzLT50aGluX3BhY2spCisJCWdpdF9idWZfcHV0cygmc3RyLCBHSVRfQ0FQX1RISU5fUEFDSyAiICIpOworCisJaWYgKGNhcHMtPm9mc19kZWx0YSkKKwkJZ2l0X2J1Zl9wdXRzKCZzdHIsIEdJVF9DQVBfT0ZTX0RFTFRBICIgIik7CisKIAlpZiAoZ2l0X2J1Zl9vb20oJnN0cikpCiAJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvc21hcnRfcHJvdG9jb2wuYyBiL3NyYy90cmFuc3BvcnRzL3NtYXJ0X3Byb3RvY29sLmMKaW5kZXggNjM2NjE2Ny4uM2JmMWY5MyAxMDA2NDQKLS0tIGEvc3JjL3RyYW5zcG9ydHMvc21hcnRfcHJvdG9jb2wuYworKysgYi9zcmMvdHJhbnNwb3J0cy9zbWFydF9wcm90b2NvbC5jCkBAIC0xMyw4ICsxMywxMSBAQAogI2luY2x1ZGUgInB1c2guaCIKICNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCiAKICNkZWZpbmUgTkVUV09SS19YRkVSX1RIUkVTSE9MRCAoMTAwKjEwMjQpCisvKiBUaGUgbWluaW1hbCBpbnRlcnZhbCBiZXR3ZWVuIHByb2dyZXNzIHVwZGF0ZXMgKGluIHNlY29uZHMpLiAqLworI2RlZmluZSBNSU5fUFJPR1JFU1NfVVBEQVRFX0lOVEVSVkFMIDAuNQogCiBpbnQgZ2l0X3NtYXJ0X19zdG9yZV9yZWZzKHRyYW5zcG9ydF9zbWFydCAqdCwgaW50IGZsdXNoZXMpCiB7CkBAIC00Niw3ICs0OSw3IEBACiAKIAkJaWYgKGVycm9yID09IEdJVF9FQlVGUykgewogCQkJaWYgKChyZWN2ZCA9IGdpdG5vX3JlY3YoYnVmKSkgPCAwKQotCQkJCXJldHVybiAtMTsKKwkJCQlyZXR1cm4gcmVjdmQ7CiAKIAkJCWlmIChyZWN2ZCA9PSAwICYmICFmbHVzaCkgewogCQkJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIkVhcmx5IEVPRiIpOwpAQCAtOTQsNiArOTcsMTMgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyogS2VlcCBtdWx0aV9hY2tfZGV0YWlsZWQgYmVmb3JlIG11bHRpX2FjayAqLworCQlpZiAoIWdpdF9fcHJlZml4Y21wKHB0ciwgR0lUX0NBUF9NVUxUSV9BQ0tfREVUQUlMRUQpKSB7CisJCQljYXBzLT5jb21tb24gPSBjYXBzLT5tdWx0aV9hY2tfZGV0YWlsZWQgPSAxOworCQkJcHRyICs9IHN0cmxlbihHSVRfQ0FQX01VTFRJX0FDS19ERVRBSUxFRCk7CisJCQljb250aW51ZTsKKwkJfQorCiAJCWlmICghZ2l0X19wcmVmaXhjbXAocHRyLCBHSVRfQ0FQX01VTFRJX0FDSykpIHsKIAkJCWNhcHMtPmNvbW1vbiA9IGNhcHMtPm11bHRpX2FjayA9IDE7CiAJCQlwdHIgKz0gc3RybGVuKEdJVF9DQVBfTVVMVElfQUNLKTsKQEAgLTEyNSw2ICsxMzUsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKCFnaXRfX3ByZWZpeGNtcChwdHIsIEdJVF9DQVBfVEhJTl9QQUNLKSkgeworCQkJY2Fwcy0+Y29tbW9uID0gY2Fwcy0+dGhpbl9wYWNrID0gMTsKKwkJCXB0ciArPSBzdHJsZW4oR0lUX0NBUF9USElOX1BBQ0spOworCQkJY29udGludWU7CisJCX0KKwogCQkvKiBXZSBkb24ndCBrbm93IHRoaXMgY2FwYWJpbGl0eSwgc28gc2tpcCBpdCAqLwogCQlwdHIgPSBzdHJjaHIocHRyLCAnICcpOwogCX0KQEAgLTE0OCwxMCArMTY0LDEwIEBACiAJCQlicmVhazsgLyogcmV0dXJuIHRoZSBwa3QgKi8KIAogCQlpZiAoZXJyb3IgPCAwICYmIGVycm9yICE9IEdJVF9FQlVGUykKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiBlcnJvcjsKIAogCQlpZiAoKHJldCA9IGdpdG5vX3JlY3YoYnVmKSkgPCAwKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIHJldDsKIAl9IHdoaWxlIChlcnJvcik7CiAKIAlnaXRub19jb25zdW1lKGJ1ZiwgbGluZV9lbmQpOwpAQCAtMTY4LDEwICsxODQsMTEgQEAKIHsKIAlnaXRfcGt0ICpwa3QgPSBOVUxMOwogCWdpdG5vX2J1ZmZlciAqYnVmID0gJnQtPmJ1ZmZlcjsKKwlpbnQgZXJyb3I7CiAKIAlkbyB7Ci0JCWlmIChyZWN2X3BrdCgmcGt0LCBidWYpIDwgMCkKLQkJCXJldHVybiAtMTsKKwkJaWYgKChlcnJvciA9IHJlY3ZfcGt0KCZwa3QsIGJ1ZikpIDwgMCkKKwkJCXJldHVybiBlcnJvcjsKIAogCQlpZiAocGt0LT50eXBlID09IEdJVF9QS1RfQUNLKSB7CiAJCQlpZiAoZ2l0X3ZlY3Rvcl9pbnNlcnQoJnQtPmNvbW1vbiwgcGt0KSA8IDApCkBAIC0yMTEsNiArMjI4LDcgQEAKIAogCQlpZiAoZ2l0X3JlZmVyZW5jZV90eXBlKHJlZikgPT0gR0lUX1JFRl9TWU1CT0xJQykKIAkJCWNvbnRpbnVlOworCiAJCWlmIChnaXRfcmV2d2Fsa19wdXNoKHdhbGssIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZikpIDwgMCkKIAkJCWdvdG8gb25fZXJyb3I7CiAKQEAgLTIyNyw3ICsyNDUsMzMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBnaXRfc21hcnRfX25lZ290aWF0ZV9mZXRjaChnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBnaXRfcmVtb3RlX2hlYWQgKiBjb25zdCAqcmVmcywgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCB3YWl0X3doaWxlX2FjayhnaXRub19idWZmZXIgKmJ1ZikKK3sKKwlpbnQgZXJyb3I7CisJZ2l0X3BrdF9hY2sgKnBrdCA9IE5VTEw7CisKKwl3aGlsZSAoMSkgeworCQlnaXRfX2ZyZWUocGt0KTsKKworCQlpZiAoKGVycm9yID0gcmVjdl9wa3QoKGdpdF9wa3QgKiopJnBrdCwgYnVmKSkgPCAwKQorCQkJcmV0dXJuIGVycm9yOworCisJCWlmIChwa3QtPnR5cGUgPT0gR0lUX1BLVF9OQUspCisJCQlicmVhazsKKworCQlpZiAocGt0LT50eXBlID09IEdJVF9QS1RfQUNLICYmCisJCSAgICAocGt0LT5zdGF0dXMgIT0gR0lUX0FDS19DT05USU5VRSB8fAorCQkgICAgIHBrdC0+c3RhdHVzICE9IEdJVF9BQ0tfQ09NTU9OKSkgeworCQkJZ2l0X19mcmVlKHBrdCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWdpdF9fZnJlZShwa3QpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X3NtYXJ0X19uZWdvdGlhdGVfZmV0Y2goZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgZ2l0X3JlbW90ZV9oZWFkICogY29uc3QgKndhbnRzLCBzaXplX3QgY291bnQpCiB7CiAJdHJhbnNwb3J0X3NtYXJ0ICp0ID0gKHRyYW5zcG9ydF9zbWFydCAqKXRyYW5zcG9ydDsKIAlnaXRub19idWZmZXIgKmJ1ZiA9ICZ0LT5idWZmZXI7CkBAIC0yMzcsMTkgKzI4MSwyMCBAQAogCXVuc2lnbmVkIGludCBpOwogCWdpdF9vaWQgb2lkOwogCi0JLyogTm8gb3duIGxvZ2ljLCBkbyBvdXIgdGhpbmcgKi8KLQlpZiAoKGVycm9yID0gZ2l0X3BrdF9idWZmZXJfd2FudHMocmVmcywgY291bnQsICZ0LT5jYXBzLCAmZGF0YSkpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X3BrdF9idWZmZXJfd2FudHMod2FudHMsIGNvdW50LCAmdC0+Y2FwcywgJmRhdGEpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICgoZXJyb3IgPSBmZXRjaF9zZXR1cF93YWxrKCZ3YWxrLCByZXBvKSkgPCAwKQogCQlnb3RvIG9uX2Vycm9yOworCiAJLyoKLQkgKiBXZSBkb24ndCBzdXBwb3J0IGFueSBraW5kIG9mIEFDSyBleHRlbnNpb25zLCBzbyB0aGUgbmVnb3RpYXRpb24KLQkgKiBib2lscyBkb3duIHRvIHNlbmRpbmcgd2hhdCB3ZSBoYXZlIGFuZCBsaXN0ZW5pbmcgZm9yIGFuIEFDSwotCSAqIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZS4KKwkgKiBPdXIgc3VwcG9ydCBmb3IgQUNLIGV4dGVuc2lvbnMgaXMgc2ltcGx5IHRvIHBhcnNlIHRoZW0uIE9uCisJICogdGhlIGZpcnN0IEFDSyB3ZSB3aWxsIGFjY2VwdCB0aGF0IGFzIGVub3VnaCBjb21tb24KKwkgKiBvYmplY3RzLiBXZSBnaXZlIHVwIGlmIHdlIGhhdmVuJ3QgZm91bmQgYW4gYW5zd2VyIGluIHRoZQorCSAqIGZpcnN0IDI1NiB3ZSBzZW5kLgogCSAqLwogCWkgPSAwOwotCXdoaWxlICh0cnVlKSB7CisJd2hpbGUgKGkgPCAyNTYpIHsKIAkJZXJyb3IgPSBnaXRfcmV2d2Fsa19uZXh0KCZvaWQsIHdhbGspOwogCiAJCWlmIChlcnJvciA8IDApIHsKQEAgLTI3OCw3ICszMjMsNyBAQAogCQkJCWdvdG8gb25fZXJyb3I7CiAKIAkJCWdpdF9idWZfY2xlYXIoJmRhdGEpOwotCQkJaWYgKHQtPmNhcHMubXVsdGlfYWNrKSB7CisJCQlpZiAodC0+Y2Fwcy5tdWx0aV9hY2sgfHwgdC0+Y2Fwcy5tdWx0aV9hY2tfZGV0YWlsZWQpIHsKIAkJCQlpZiAoKGVycm9yID0gc3RvcmVfY29tbW9uKHQpKSA8IDApCiAJCQkJCWdvdG8gb25fZXJyb3I7CiAJCQl9IGVsc2UgewpAQCAtMzA3LDcgKzM1Miw3IEBACiAJCQlnaXRfcGt0X2FjayAqcGt0OwogCQkJdW5zaWduZWQgaW50IGk7CiAKLQkJCWlmICgoZXJyb3IgPSBnaXRfcGt0X2J1ZmZlcl93YW50cyhyZWZzLCBjb3VudCwgJnQtPmNhcHMsICZkYXRhKSkgPCAwKQorCQkJaWYgKChlcnJvciA9IGdpdF9wa3RfYnVmZmVyX3dhbnRzKHdhbnRzLCBjb3VudCwgJnQtPmNhcHMsICZkYXRhKSkgPCAwKQogCQkJCWdvdG8gb25fZXJyb3I7CiAKIAkJCWdpdF92ZWN0b3JfZm9yZWFjaCgmdC0+Y29tbW9uLCBpLCBwa3QpIHsKQEAgLTMyNyw3ICszNzIsNyBAQAogCQlnaXRfcGt0X2FjayAqcGt0OwogCQl1bnNpZ25lZCBpbnQgaTsKIAotCQlpZiAoKGVycm9yID0gZ2l0X3BrdF9idWZmZXJfd2FudHMocmVmcywgY291bnQsICZ0LT5jYXBzLCAmZGF0YSkpIDwgMCkKKwkJaWYgKChlcnJvciA9IGdpdF9wa3RfYnVmZmVyX3dhbnRzKHdhbnRzLCBjb3VudCwgJnQtPmNhcHMsICZkYXRhKSkgPCAwKQogCQkJZ290byBvbl9lcnJvcjsKIAogCQlnaXRfdmVjdG9yX2ZvcmVhY2goJnQtPmNvbW1vbiwgaSwgcGt0KSB7CkBAIC0zNTYsNyArNDAxLDcgQEAKIAlnaXRfcmV2d2Fsa19mcmVlKHdhbGspOwogCiAJLyogTm93IGxldCdzIGVhdCB1cCB3aGF0ZXZlciB0aGUgc2VydmVyIGdpdmVzIHVzICovCi0JaWYgKCF0LT5jYXBzLm11bHRpX2FjaykgeworCWlmICghdC0+Y2Fwcy5tdWx0aV9hY2sgJiYgIXQtPmNhcHMubXVsdGlfYWNrX2RldGFpbGVkKSB7CiAJCXBrdF90eXBlID0gcmVjdl9wa3QoTlVMTCwgYnVmKTsKIAogCQlpZiAocGt0X3R5cGUgPCAwKSB7CkBAIC0zNjYsMjIgKzQxMSwxMCBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAJfSBlbHNlIHsKLQkJZ2l0X3BrdF9hY2sgKnBrdDsKLQkJZG8gewotCQkJaWYgKChlcnJvciA9IHJlY3ZfcGt0KChnaXRfcGt0ICoqKSZwa3QsIGJ1ZikpIDwgMCkKLQkJCQlyZXR1cm4gZXJyb3I7Ci0KLQkJCWlmIChwa3QtPnR5cGUgPT0gR0lUX1BLVF9OQUsgfHwKLQkJCSAgICAocGt0LT50eXBlID09IEdJVF9QS1RfQUNLICYmIHBrdC0+c3RhdHVzICE9IEdJVF9BQ0tfQ09OVElOVUUpKSB7Ci0JCQkJZ2l0X19mcmVlKHBrdCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWdpdF9fZnJlZShwa3QpOwotCQl9IHdoaWxlICgxKTsKKwkJZXJyb3IgPSB3YWl0X3doaWxlX2FjayhidWYpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIAogb25fZXJyb3I6CiAJZ2l0X3JldndhbGtfZnJlZSh3YWxrKTsKQEAgLTM5OSwxNiArNDMyLDE2IEBACiAJCQlyZXR1cm4gR0lUX0VVU0VSOwogCQl9CiAKLQkJaWYgKHdyaXRlcGFjay0+YWRkKHdyaXRlcGFjaywgYnVmLT5kYXRhLCBidWYtPm9mZnNldCwgc3RhdHMpIDwgMCkKKwkJaWYgKHdyaXRlcGFjay0+YXBwZW5kKHdyaXRlcGFjaywgYnVmLT5kYXRhLCBidWYtPm9mZnNldCwgc3RhdHMpIDwgMCkKIAkJCXJldHVybiAtMTsKIAogCQlnaXRub19jb25zdW1lX24oYnVmLCBidWYtPm9mZnNldCk7CiAKIAkJaWYgKChyZWN2ZCA9IGdpdG5vX3JlY3YoYnVmKSkgPCAwKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIHJlY3ZkOwogCX0gd2hpbGUocmVjdmQgPiAwKTsKIAotCWlmICh3cml0ZXBhY2stPmNvbW1pdCh3cml0ZXBhY2ssIHN0YXRzKSkKKwlpZiAod3JpdGVwYWNrLT5jb21taXQod3JpdGVwYWNrLCBzdGF0cykgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKQEAgLTQyMiw3ICs0NTUsNyBAQAogCXNpemVfdCBsYXN0X2ZpcmVkX2J5dGVzOwogfTsKIAotc3RhdGljIHZvaWQgbmV0d29ya19wYWNrZXRzaXplKHNpemVfdCByZWNlaXZlZCwgdm9pZCAqcGF5bG9hZCkKK3N0YXRpYyBpbnQgbmV0d29ya19wYWNrZXRzaXplKHNpemVfdCByZWNlaXZlZCwgdm9pZCAqcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgbmV0d29ya19wYWNrZXRzaXplX3BheWxvYWQgKm5wcCA9IChzdHJ1Y3QgbmV0d29ya19wYWNrZXRzaXplX3BheWxvYWQqKXBheWxvYWQ7CiAKQEAgLTQzMiw4ICs0NjUsMTIgQEAKIAkvKiBGaXJlIG5vdGlmaWNhdGlvbiBpZiB0aGUgdGhyZXNob2xkIGlzIHJlYWNoZWQgKi8KIAlpZiAoKG5wcC0+c3RhdHMtPnJlY2VpdmVkX2J5dGVzIC0gbnBwLT5sYXN0X2ZpcmVkX2J5dGVzKSA+IE5FVFdPUktfWEZFUl9USFJFU0hPTEQpIHsKIAkJbnBwLT5sYXN0X2ZpcmVkX2J5dGVzID0gbnBwLT5zdGF0cy0+cmVjZWl2ZWRfYnl0ZXM7Ci0JCW5wcC0+Y2FsbGJhY2sobnBwLT5zdGF0cywgbnBwLT5wYXlsb2FkKTsKKworCQlpZiAobnBwLT5jYWxsYmFjayhucHAtPnN0YXRzLCBucHAtPnBheWxvYWQpKQorCQkJcmV0dXJuIEdJVF9FVVNFUjsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IGdpdF9zbWFydF9fZG93bmxvYWRfcGFjaygKQEAgLTQ0Nyw3ICs0ODQsNyBAQAogCWdpdG5vX2J1ZmZlciAqYnVmID0gJnQtPmJ1ZmZlcjsKIAlnaXRfb2RiICpvZGI7CiAJc3RydWN0IGdpdF9vZGJfd3JpdGVwYWNrICp3cml0ZXBhY2sgPSBOVUxMOwotCWludCBlcnJvciA9IC0xOworCWludCBlcnJvciA9IDA7CiAJc3RydWN0IG5ldHdvcmtfcGFja2V0c2l6ZV9wYXlsb2FkIG5wcCA9IHswfTsKIAogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKGdpdF90cmFuc2Zlcl9wcm9ncmVzcykpOwpAQCAtNDYwLDEzICs0OTcsMTQgQEAKIAkJdC0+cGFja2V0c2l6ZV9wYXlsb2FkID0gJm5wcDsKIAogCQkvKiBXZSBtaWdodCBoYXZlIHNvbWV0aGluZyBpbiB0aGUgYnVmZmVyIGFscmVhZHkgZnJvbSBuZWdvdGlhdGVfZmV0Y2ggKi8KLQkJaWYgKHQtPmJ1ZmZlci5vZmZzZXQgPiAwKQotCQkJdC0+cGFja2V0c2l6ZV9jYih0LT5idWZmZXIub2Zmc2V0LCB0LT5wYWNrZXRzaXplX3BheWxvYWQpOworCQlpZiAodC0+YnVmZmVyLm9mZnNldCA+IDAgJiYgIXQtPmNhbmNlbGxlZC52YWwpCisJCQlpZiAodC0+cGFja2V0c2l6ZV9jYih0LT5idWZmZXIub2Zmc2V0LCB0LT5wYWNrZXRzaXplX3BheWxvYWQpKQorCQkJCWdpdF9hdG9taWNfc2V0KCZ0LT5jYW5jZWxsZWQsIDEpOwogCX0KIAogCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9vZGJfX3dlYWtwdHIoJm9kYiwgcmVwbykpIDwgMCB8fAogCQkoKGVycm9yID0gZ2l0X29kYl93cml0ZV9wYWNrKCZ3cml0ZXBhY2ssIG9kYiwgcHJvZ3Jlc3NfY2IsIHByb2dyZXNzX3BheWxvYWQpKSA8IDApKQotCQlnb3RvIG9uX2Vycm9yOworCQlnb3RvIGRvbmU7CiAKIAkvKgogCSAqIElmIHRoZSByZW1vdGUgZG9lc24ndCBzdXBwb3J0IHRoZSBzaWRlLWJhbmQsIHdlIGNhbiBmZWVkCkBAIC00NzQsMzcgKzUxMiw0NiBAQAogCSAqIGNoZWNrIHdoaWNoIG9uZSBiZWxvbmdzIHRoZXJlLgogCSAqLwogCWlmICghdC0+Y2Fwcy5zaWRlX2JhbmQgJiYgIXQtPmNhcHMuc2lkZV9iYW5kXzY0aykgewotCQlpZiAobm9fc2lkZWJhbmQodCwgd3JpdGVwYWNrLCBidWYsIHN0YXRzKSA8IDApCi0JCQlnb3RvIG9uX2Vycm9yOwotCi0JCWdvdG8gb25fc3VjY2VzczsKKwkJZXJyb3IgPSBub19zaWRlYmFuZCh0LCB3cml0ZXBhY2ssIGJ1Ziwgc3RhdHMpOworCQlnb3RvIGRvbmU7CiAJfQogCiAJZG8gewogCQlnaXRfcGt0ICpwa3Q7CiAKKwkJLyogQ2hlY2sgY2FuY2VsbGF0aW9uIGJlZm9yZSBuZXR3b3JrIGNhbGwgKi8KIAkJaWYgKHQtPmNhbmNlbGxlZC52YWwpIHsKIAkJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIlRoZSBmZXRjaCB3YXMgY2FuY2VsbGVkIGJ5IHRoZSB1c2VyIik7CiAJCQllcnJvciA9IEdJVF9FVVNFUjsKLQkJCWdvdG8gb25fZXJyb3I7CisJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlpZiAocmVjdl9wa3QoJnBrdCwgYnVmKSA8IDApCi0JCQlnb3RvIG9uX2Vycm9yOworCQlpZiAoKGVycm9yID0gcmVjdl9wa3QoJnBrdCwgYnVmKSkgPCAwKQorCQkJZ290byBkb25lOworCisJCS8qIENoZWNrIGNhbmNlbGxhdGlvbiBhZnRlciBuZXR3b3JrIGNhbGwgKi8KKwkJaWYgKHQtPmNhbmNlbGxlZC52YWwpIHsKKwkJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIlRoZSBmZXRjaCB3YXMgY2FuY2VsbGVkIGJ5IHRoZSB1c2VyIik7CisJCQllcnJvciA9IEdJVF9FVVNFUjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCiAJCWlmIChwa3QtPnR5cGUgPT0gR0lUX1BLVF9QUk9HUkVTUykgewogCQkJaWYgKHQtPnByb2dyZXNzX2NiKSB7CiAJCQkJZ2l0X3BrdF9wcm9ncmVzcyAqcCA9IChnaXRfcGt0X3Byb2dyZXNzICopIHBrdDsKLQkJCQl0LT5wcm9ncmVzc19jYihwLT5kYXRhLCBwLT5sZW4sIHQtPm1lc3NhZ2VfY2JfcGF5bG9hZCk7CisJCQkJaWYgKHQtPnByb2dyZXNzX2NiKHAtPmRhdGEsIHAtPmxlbiwgdC0+bWVzc2FnZV9jYl9wYXlsb2FkKSkgeworCQkJCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJUaGUgZmV0Y2ggd2FzIGNhbmNlbGxlZCBieSB0aGUgdXNlciIpOworCQkJCQlyZXR1cm4gR0lUX0VVU0VSOworCQkJCX0KIAkJCX0KIAkJCWdpdF9fZnJlZShwa3QpOwogCQl9IGVsc2UgaWYgKHBrdC0+dHlwZSA9PSBHSVRfUEtUX0RBVEEpIHsKIAkJCWdpdF9wa3RfZGF0YSAqcCA9IChnaXRfcGt0X2RhdGEgKikgcGt0OwotCQkJZXJyb3IgPSB3cml0ZXBhY2stPmFkZCh3cml0ZXBhY2ssIHAtPmRhdGEsIHAtPmxlbiwgc3RhdHMpOworCQkJZXJyb3IgPSB3cml0ZXBhY2stPmFwcGVuZCh3cml0ZXBhY2ssIHAtPmRhdGEsIHAtPmxlbiwgc3RhdHMpOwogCiAJCQlnaXRfX2ZyZWUocGt0KTsKIAkJCWlmIChlcnJvciA8IDApCi0JCQkJZ290byBvbl9lcnJvcjsKKwkJCQlnb3RvIGRvbmU7CiAJCX0gZWxzZSBpZiAocGt0LT50eXBlID09IEdJVF9QS1RfRkxVU0gpIHsKIAkJCS8qIEEgZmx1c2ggaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIHBhY2tmaWxlICovCiAJCQlnaXRfX2ZyZWUocGt0KTsKQEAgLTUxMiwxMyArNTU5LDkgQEAKIAkJfQogCX0gd2hpbGUgKDEpOwogCi0JaWYgKHdyaXRlcGFjay0+Y29tbWl0KHdyaXRlcGFjaywgc3RhdHMpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKKwllcnJvciA9IHdyaXRlcGFjay0+Y29tbWl0KHdyaXRlcGFjaywgc3RhdHMpOwogCi1vbl9zdWNjZXNzOgotCWVycm9yID0gMDsKLQotb25fZXJyb3I6Citkb25lOgogCWlmICh3cml0ZXBhY2spCiAJCXdyaXRlcGFjay0+ZnJlZSh3cml0ZXBhY2spOwogCkBAIC02NTYsNyArNjk5LDcgQEAKIAogCQlpZiAoZXJyb3IgPT0gR0lUX0VCVUZTKSB7CiAJCQlpZiAoKHJlY3ZkID0gZ2l0bm9fcmVjdihidWYpKSA8IDApCi0JCQkJcmV0dXJuIC0xOworCQkJCXJldHVybiByZWN2ZDsKIAogCQkJaWYgKHJlY3ZkID09IDApIHsKIAkJCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJFYXJseSBFT0YiKTsKQEAgLTgwMSwyMiArODQ0LDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBwdXNoX3BhY2tidWlsZGVyX3BheWxvYWQKK3sKKwlnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqc3RyZWFtOworCWdpdF9wYWNrYnVpbGRlciAqcGI7CisJZ2l0X3B1c2hfdHJhbnNmZXJfcHJvZ3Jlc3MgY2I7CisJdm9pZCAqY2JfcGF5bG9hZDsKKwlzaXplX3QgbGFzdF9ieXRlczsKKwlkb3VibGUgbGFzdF9wcm9ncmVzc19yZXBvcnRfdGltZTsKK307CisKIHN0YXRpYyBpbnQgc3RyZWFtX3RodW5rKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpCiB7Ci0JZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKnMgPSAoZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKilkYXRhOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IHB1c2hfcGFja2J1aWxkZXJfcGF5bG9hZCAqcGF5bG9hZCA9IGRhdGE7CiAKLQlyZXR1cm4gcy0+d3JpdGUocywgKGNvbnN0IGNoYXIgKilidWYsIHNpemUpOworCWlmICgoZXJyb3IgPSBwYXlsb2FkLT5zdHJlYW0tPndyaXRlKHBheWxvYWQtPnN0cmVhbSwgKGNvbnN0IGNoYXIgKilidWYsIHNpemUpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmIChwYXlsb2FkLT5jYikgeworCQlkb3VibGUgY3VycmVudF90aW1lID0gZ2l0X190aW1lcigpOworCQlwYXlsb2FkLT5sYXN0X2J5dGVzICs9IHNpemU7CisKKwkJaWYgKChjdXJyZW50X3RpbWUgLSBwYXlsb2FkLT5sYXN0X3Byb2dyZXNzX3JlcG9ydF90aW1lKSA+PSBNSU5fUFJPR1JFU1NfVVBEQVRFX0lOVEVSVkFMKSB7CisJCQlwYXlsb2FkLT5sYXN0X3Byb2dyZXNzX3JlcG9ydF90aW1lID0gY3VycmVudF90aW1lOworCQkJaWYgKHBheWxvYWQtPmNiKHBheWxvYWQtPnBiLT5ucl93cml0dGVuLCBwYXlsb2FkLT5wYi0+bnJfb2JqZWN0cywgcGF5bG9hZC0+bGFzdF9ieXRlcywgcGF5bG9hZC0+Y2JfcGF5bG9hZCkpIHsKKwkJCQlnaXRlcnJfY2xlYXIoKTsKKwkJCQllcnJvciA9IEdJVF9FVVNFUjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBlcnJvcjsKIH0KIAogaW50IGdpdF9zbWFydF9fcHVzaChnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGdpdF9wdXNoICpwdXNoKQogewogCXRyYW5zcG9ydF9zbWFydCAqdCA9ICh0cmFuc3BvcnRfc21hcnQgKil0cmFuc3BvcnQ7Ci0JZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKnM7CisJc3RydWN0IHB1c2hfcGFja2J1aWxkZXJfcGF5bG9hZCBwYWNrYnVpbGRlcl9wYXlsb2FkID0gezB9OwogCWdpdF9idWYgcGt0bGluZSA9IEdJVF9CVUZfSU5JVDsKLQlpbnQgZXJyb3IgPSAtMSwgbmVlZF9wYWNrID0gMDsKKwlpbnQgZXJyb3IgPSAwLCBuZWVkX3BhY2sgPSAwOwogCXB1c2hfc3BlYyAqc3BlYzsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCXBhY2tidWlsZGVyX3BheWxvYWQucGIgPSBwdXNoLT5wYjsKKworCWlmIChwdXNoLT50cmFuc2Zlcl9wcm9ncmVzc19jYikgeworCQlwYWNrYnVpbGRlcl9wYXlsb2FkLmNiID0gcHVzaC0+dHJhbnNmZXJfcHJvZ3Jlc3NfY2I7CisJCXBhY2tidWlsZGVyX3BheWxvYWQuY2JfcGF5bG9hZCA9IHB1c2gtPnRyYW5zZmVyX3Byb2dyZXNzX2NiX3BheWxvYWQ7CisJfQorCiAjaWZkZWYgUFVTSF9ERUJVRwogewogCWdpdF9yZW1vdGVfaGVhZCAqaGVhZDsKQEAgLTg0OCwyOSArOTI1LDM2IEBACiAJCX0KIAl9CiAKLQlpZiAoZ2l0X3NtYXJ0X19nZXRfcHVzaF9zdHJlYW0odCwgJnMpIDwgMCB8fAotCQlnZW5fcGt0bGluZSgmcGt0bGluZSwgcHVzaCkgPCAwIHx8Ci0JCXMtPndyaXRlKHMsIGdpdF9idWZfY3N0cigmcGt0bGluZSksIGdpdF9idWZfbGVuKCZwa3RsaW5lKSkgPCAwKQotCQlnb3RvIG9uX2Vycm9yOworCWlmICgoZXJyb3IgPSBnaXRfc21hcnRfX2dldF9wdXNoX3N0cmVhbSh0LCAmcGFja2J1aWxkZXJfcGF5bG9hZC5zdHJlYW0pKSA8IDAgfHwKKwkJKGVycm9yID0gZ2VuX3BrdGxpbmUoJnBrdGxpbmUsIHB1c2gpKSA8IDAgfHwKKwkJKGVycm9yID0gcGFja2J1aWxkZXJfcGF5bG9hZC5zdHJlYW0tPndyaXRlKHBhY2tidWlsZGVyX3BheWxvYWQuc3RyZWFtLCBnaXRfYnVmX2NzdHIoJnBrdGxpbmUpLCBnaXRfYnVmX2xlbigmcGt0bGluZSkpKSA8IDApCisJCWdvdG8gZG9uZTsKIAotCWlmIChuZWVkX3BhY2sgJiYgZ2l0X3BhY2tidWlsZGVyX2ZvcmVhY2gocHVzaC0+cGIsICZzdHJlYW1fdGh1bmssIHMpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKKwlpZiAobmVlZF9wYWNrICYmCisJCShlcnJvciA9IGdpdF9wYWNrYnVpbGRlcl9mb3JlYWNoKHB1c2gtPnBiLCAmc3RyZWFtX3RodW5rLCAmcGFja2J1aWxkZXJfcGF5bG9hZCkpIDwgMCkKKwkJZ290byBkb25lOwogCiAJLyogSWYgd2Ugc2VudCBub3RoaW5nIG9yIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHJlcG9ydC1zdGF0dXMsIHRoZW4KIAkgKiB3ZSBjb25zaWRlciB0aGUgcGFjayB0byBoYXZlIGJlZW4gdW5wYWNrZWQgc3VjY2Vzc2Z1bGx5ICovCiAJaWYgKCFwdXNoLT5zcGVjcy5sZW5ndGggfHwgIXB1c2gtPnJlcG9ydF9zdGF0dXMpCiAJCXB1c2gtPnVucGFja19vayA9IDE7Ci0JZWxzZSBpZiAocGFyc2VfcmVwb3J0KCZ0LT5idWZmZXIsIHB1c2gpIDwgMCkKLQkJZ290byBvbl9lcnJvcjsKKwllbHNlIGlmICgoZXJyb3IgPSBwYXJzZV9yZXBvcnQoJnQtPmJ1ZmZlciwgcHVzaCkpIDwgMCkKKwkJZ290byBkb25lOwogCi0JaWYgKHB1c2gtPnN0YXR1cy5sZW5ndGggJiYKLQkJdXBkYXRlX3JlZnNfZnJvbV9yZXBvcnQoJnQtPnJlZnMsICZwdXNoLT5zcGVjcywgJnB1c2gtPnN0YXR1cykgPCAwKQotCQlnb3RvIG9uX2Vycm9yOworCS8qIElmIHByb2dyZXNzIGlzIGJlaW5nIHJlcG9ydGVkIHdyaXRlIHRoZSBmaW5hbCByZXBvcnQgKi8KKwlpZiAocHVzaC0+dHJhbnNmZXJfcHJvZ3Jlc3NfY2IpIHsKKwkJcHVzaC0+dHJhbnNmZXJfcHJvZ3Jlc3NfY2IocHVzaC0+cGItPm5yX3dyaXR0ZW4sIHB1c2gtPnBiLT5ucl9vYmplY3RzLCBwYWNrYnVpbGRlcl9wYXlsb2FkLmxhc3RfYnl0ZXMsIHB1c2gtPnRyYW5zZmVyX3Byb2dyZXNzX2NiX3BheWxvYWQpOworCX0KIAotCWVycm9yID0gMDsKKwlpZiAocHVzaC0+c3RhdHVzLmxlbmd0aCkgeworCQllcnJvciA9IHVwZGF0ZV9yZWZzX2Zyb21fcmVwb3J0KCZ0LT5yZWZzLCAmcHVzaC0+c3BlY3MsICZwdXNoLT5zdGF0dXMpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJZ290byBkb25lOwogCi1vbl9lcnJvcjoKKwkJZXJyb3IgPSBnaXRfc21hcnRfX3VwZGF0ZV9oZWFkcyh0KTsKKwl9CisKK2RvbmU6CiAJZ2l0X2J1Zl9mcmVlKCZwa3RsaW5lKTsKLQogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL3NyYy90cmFuc3BvcnRzL3NzaC5jIGIvc3JjL3RyYW5zcG9ydHMvc3NoLmMKaW5kZXggYTMxMmM4ZC4uNGE5MDVlMyAxMDA2NDQKLS0tIGEvc3JjL3RyYW5zcG9ydHMvc3NoLmMKKysrIGIvc3JjL3RyYW5zcG9ydHMvc3NoLmMKQEAgLTUsMTkgKzUsMTggQEAKICAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgogICovCiAKLSNpZmRlZiBHSVRfU1NICi0KICNpbmNsdWRlICJnaXQyLmgiCiAjaW5jbHVkZSAiYnVmZmVyLmgiCiAjaW5jbHVkZSAibmV0b3BzLmgiCiAjaW5jbHVkZSAic21hcnQuaCIKIAorI2lmZGVmIEdJVF9TU0gKKwogI2luY2x1ZGUgPGxpYnNzaDIuaD4KIAogI2RlZmluZSBPV05JTkdfU1VCVFJBTlNQT1JUKHMpICgoc3NoX3N1YnRyYW5zcG9ydCAqKShzKS0+cGFyZW50LnN1YnRyYW5zcG9ydCkKIAogc3RhdGljIGNvbnN0IGNoYXIgcHJlZml4X3NzaFtdID0gInNzaDovLyI7Ci1zdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0X3VzZXJbXSA9ICJnaXQiOwogc3RhdGljIGNvbnN0IGNoYXIgY21kX3VwbG9hZHBhY2tbXSA9ICJnaXQtdXBsb2FkLXBhY2siOwogc3RhdGljIGNvbnN0IGNoYXIgY21kX3JlY2VpdmVwYWNrW10gPSAiZ2l0LXJlY2VpdmUtcGFjayI7CiAKQEAgLTM4LDYgKzM3LDE0IEBACiAJZ2l0X2NyZWQgKmNyZWQ7CiB9IHNzaF9zdWJ0cmFuc3BvcnQ7CiAKK3N0YXRpYyB2b2lkIHNzaF9lcnJvcihMSUJTU0gyX1NFU1NJT04gKnNlc3Npb24sIGNvbnN0IGNoYXIgKmVycm1zZykKK3sKKwljaGFyICpzc2hlcnI7CisJbGlic3NoMl9zZXNzaW9uX2xhc3RfZXJyb3Ioc2Vzc2lvbiwgJnNzaGVyciwgTlVMTCwgMCk7CisKKwlnaXRlcnJfc2V0KEdJVEVSUl9TU0gsICIlczogJXMiLCBlcnJtc2csIHNzaGVycik7Cit9CisKIC8qCiAgKiBDcmVhdGUgYSBnaXQgcHJvdG9jb2wgcmVxdWVzdC4KICAqCkBAIC00NiwyNyArNTMsMjkgQEAKIHN0YXRpYyBpbnQgZ2VuX3Byb3RvKGdpdF9idWYgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqdXJsKQogewogCWNoYXIgKnJlcG87Ci0JCisKIAlpZiAoIWdpdF9fcHJlZml4Y21wKHVybCwgcHJlZml4X3NzaCkpIHsKIAkJdXJsID0gdXJsICsgc3RybGVuKHByZWZpeF9zc2gpOwogCQlyZXBvID0gc3RyY2hyKHVybCwgJy8nKTsKIAl9IGVsc2UgewogCQlyZXBvID0gc3RyY2hyKHVybCwgJzonKTsKKwkJaWYgKHJlcG8pIHJlcG8rKzsKIAl9Ci0JCisKIAlpZiAoIXJlcG8pIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiTWFsZm9ybWVkIGdpdCBwcm90b2NvbCBVUkwiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKKwogCWludCBsZW4gPSBzdHJsZW4oY21kKSArIDEgLyogU3BhY2UgKi8gKyAxIC8qIFF1b3RlICovICsgc3RybGVuKHJlcG8pICsgMSAvKiBRdW90ZSAqLyArIDE7Ci0JCisKIAlnaXRfYnVmX2dyb3cocmVxdWVzdCwgbGVuKTsKIAlnaXRfYnVmX3ByaW50ZihyZXF1ZXN0LCAiJXMgJyVzJyIsIGNtZCwgcmVwbyk7CiAJZ2l0X2J1Zl9wdXRjKHJlcXVlc3QsICdcMCcpOwotCQorCiAJaWYgKGdpdF9idWZfb29tKHJlcXVlc3QpKQogCQlyZXR1cm4gLTE7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQsMjEgKzgzLDE5IEBACiB7CiAJaW50IGVycm9yOwogCWdpdF9idWYgcmVxdWVzdCA9IEdJVF9CVUZfSU5JVDsKLQkKKwogCWVycm9yID0gZ2VuX3Byb3RvKCZyZXF1ZXN0LCBzLT5jbWQsIHMtPnVybCk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBjbGVhbnVwOwotCQotCWVycm9yID0gbGlic3NoMl9jaGFubmVsX2V4ZWMoCi0JCXMtPmNoYW5uZWwsCi0JCXJlcXVlc3QucHRyCi0JKTsKIAotCWlmICgwICE9IGVycm9yKQorCWVycm9yID0gbGlic3NoMl9jaGFubmVsX2V4ZWMocy0+Y2hhbm5lbCwgcmVxdWVzdC5wdHIpOworCWlmIChlcnJvciA8IExJQlNTSDJfRVJST1JfTk9ORSkgeworCQlzc2hfZXJyb3Iocy0+c2Vzc2lvbiwgIlNTSCBjb3VsZCBub3QgZXhlY3V0ZSByZXF1ZXN0Iik7CiAJCWdvdG8gY2xlYW51cDsKLQkKKwl9CisKIAlzLT5zZW50X2NvbW1hbmQgPSAxOwotCQorCiBjbGVhbnVwOgogCWdpdF9idWZfZnJlZSgmcmVxdWVzdCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTAwLDE5ICsxMDcsMjEgQEAKIAlzaXplX3QgYnVmX3NpemUsCiAJc2l6ZV90ICpieXRlc19yZWFkKQogeworCWludCByYzsKIAlzc2hfc3RyZWFtICpzID0gKHNzaF9zdHJlYW0gKilzdHJlYW07Ci0JCisKIAkqYnl0ZXNfcmVhZCA9IDA7Ci0JCisKIAlpZiAoIXMtPnNlbnRfY29tbWFuZCAmJiBzZW5kX2NvbW1hbmQocykgPCAwKQogCQlyZXR1cm4gLTE7Ci0JCi0JaW50IHJjID0gbGlic3NoMl9jaGFubmVsX3JlYWQocy0+Y2hhbm5lbCwgYnVmZmVyLCBidWZfc2l6ZSk7Ci0JaWYgKHJjIDwgMCkKKworCWlmICgocmMgPSBsaWJzc2gyX2NoYW5uZWxfcmVhZChzLT5jaGFubmVsLCBidWZmZXIsIGJ1Zl9zaXplKSkgPCBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKwkJc3NoX2Vycm9yKHMtPnNlc3Npb24sICJTU0ggY291bGQgbm90IHJlYWQgZGF0YSIpOzsKIAkJcmV0dXJuIC0xOwotCQorCX0KKwogCSpieXRlc19yZWFkID0gcmM7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIyLDE2ICsxMzEsMTYgQEAKIAlzaXplX3QgbGVuKQogewogCXNzaF9zdHJlYW0gKnMgPSAoc3NoX3N0cmVhbSAqKXN0cmVhbTsKLQkKKwogCWlmICghcy0+c2VudF9jb21tYW5kICYmIHNlbmRfY29tbWFuZChzKSA8IDApCiAJCXJldHVybiAtMTsKLQkKLQlpbnQgcmMgPSBsaWJzc2gyX2NoYW5uZWxfd3JpdGUocy0+Y2hhbm5lbCwgYnVmZmVyLCBsZW4pOwotCWlmIChyYyA8IDApIHsKKworCWlmIChsaWJzc2gyX2NoYW5uZWxfd3JpdGUocy0+Y2hhbm5lbCwgYnVmZmVyLCBsZW4pIDwgTElCU1NIMl9FUlJPUl9OT05FKSB7CisJCXNzaF9lcnJvcihzLT5zZXNzaW9uLCAiU1NIIGNvdWxkIG5vdCB3cml0ZSBkYXRhIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JCi0JcmV0dXJuIHJjOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNzaF9zdHJlYW1fZnJlZShnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqc3RyZWFtKQpAQCAtMTM5LDI2ICsxNDgsMjcgQEAKIAlzc2hfc3RyZWFtICpzID0gKHNzaF9zdHJlYW0gKilzdHJlYW07CiAJc3NoX3N1YnRyYW5zcG9ydCAqdCA9IE9XTklOR19TVUJUUkFOU1BPUlQocyk7CiAJaW50IHJldDsKLQkKKwogCUdJVF9VTlVTRUQocmV0KTsKLQkKKwogCXQtPmN1cnJlbnRfc3RyZWFtID0gTlVMTDsKLQkKKwogCWlmIChzLT5jaGFubmVsKSB7CiAJCWxpYnNzaDJfY2hhbm5lbF9jbG9zZShzLT5jaGFubmVsKTsKLSAgICAgICAgbGlic3NoMl9jaGFubmVsX2ZyZWUocy0+Y2hhbm5lbCk7Ci0gICAgICAgIHMtPmNoYW5uZWwgPSBOVUxMOworCQlsaWJzc2gyX2NoYW5uZWxfZnJlZShzLT5jaGFubmVsKTsKKwkJcy0+Y2hhbm5lbCA9IE5VTEw7CiAJfQotCQorCiAJaWYgKHMtPnNlc3Npb24pIHsKLQkJbGlic3NoMl9zZXNzaW9uX2ZyZWUocy0+c2Vzc2lvbiksIHMtPnNlc3Npb24gPSBOVUxMOworCQlsaWJzc2gyX3Nlc3Npb25fZnJlZShzLT5zZXNzaW9uKTsKKwkJcy0+c2Vzc2lvbiA9IE5VTEw7CiAJfQotCQorCiAJaWYgKHMtPnNvY2tldC5zb2NrZXQpIHsKLQkJcmV0ID0gZ2l0bm9fY2xvc2UoJnMtPnNvY2tldCk7Ci0JCWFzc2VydCghcmV0KTsKKwkJKHZvaWQpZ2l0bm9fY2xvc2UoJnMtPnNvY2tldCk7CisJCS8qIGNhbid0IGRvIGFueXRoaW5nIGhlcmUgd2l0aCBlcnJvciByZXR1cm4gdmFsdWUgKi8KIAl9Ci0JCisKIAlnaXRfX2ZyZWUocy0+dXJsKTsKIAlnaXRfX2ZyZWUocyk7CiB9CkBAIC0xNzAsMjYgKzE4MCwyNSBAQAogCWdpdF9zbWFydF9zdWJ0cmFuc3BvcnRfc3RyZWFtICoqc3RyZWFtKQogewogCXNzaF9zdHJlYW0gKnM7Ci0JCi0JaWYgKCFzdHJlYW0pCi0JCXJldHVybiAtMTsKLQkKKworCWFzc2VydChzdHJlYW0pOworCiAJcyA9IGdpdF9fY2FsbG9jKHNpemVvZihzc2hfc3RyZWFtKSwgMSk7CiAJR0lURVJSX0NIRUNLX0FMTE9DKHMpOwotCQorCiAJcy0+cGFyZW50LnN1YnRyYW5zcG9ydCA9ICZ0LT5wYXJlbnQ7CiAJcy0+cGFyZW50LnJlYWQgPSBzc2hfc3RyZWFtX3JlYWQ7CiAJcy0+cGFyZW50LndyaXRlID0gc3NoX3N0cmVhbV93cml0ZTsKIAlzLT5wYXJlbnQuZnJlZSA9IHNzaF9zdHJlYW1fZnJlZTsKLQkKKwogCXMtPmNtZCA9IGNtZDsKKwogCXMtPnVybCA9IGdpdF9fc3RyZHVwKHVybCk7Ci0JCiAJaWYgKCFzLT51cmwpIHsKIAkJZ2l0X19mcmVlKHMpOwogCQlyZXR1cm4gLTE7CiAJfQotCQorCiAJKnN0cmVhbSA9ICZzLT5wYXJlbnQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDEsMTM2ICsyMTAsMTI3IEBACiB7CiAJY2hhciAqY29sb24sICphdDsKIAljb25zdCBjaGFyICpzdGFydDsKLSAgICAKLSAgICBjb2xvbiA9IHN0cmNocih1cmwsICc6Jyk7Ci0JCi0JaWYgKGNvbG9uID09IE5VTEwpIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiTWFsZm9ybWVkIFVSTDogbWlzc2luZyA6Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JCisKKwljb2xvbiA9IHN0cmNocih1cmwsICc6Jyk7CisKKwogCWF0ID0gc3RyY2hyKHVybCwgJ0AnKTsKIAlpZiAoYXQpIHsKLQkJc3RhcnQgPSBhdCsxOworCQlzdGFydCA9IGF0ICsgMTsKIAkJKnVzZXJuYW1lID0gZ2l0X19zdWJzdHJkdXAodXJsLCBhdCAtIHVybCk7CisJCUdJVEVSUl9DSEVDS19BTExPQygqdXNlcm5hbWUpOwogCX0gZWxzZSB7CiAJCXN0YXJ0ID0gdXJsOwotCQkqdXNlcm5hbWUgPSBnaXRfX3N0cmR1cChkZWZhdWx0X3VzZXIpOworCQkqdXNlcm5hbWUgPSBOVUxMOwogCX0KLQkKKworCWlmIChjb2xvbiA9PSBOVUxMIHx8IChjb2xvbiA8IHN0YXJ0KSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJNYWxmb3JtZWQgVVJMIik7CisJCXJldHVybiAtMTsKKwl9CisKIAkqaG9zdCA9IGdpdF9fc3Vic3RyZHVwKHN0YXJ0LCBjb2xvbiAtIHN0YXJ0KTsKLQkKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MoKmhvc3QpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX2dpdF9zc2hfYXV0aGVudGljYXRlX3Nlc3Npb24oCiAJTElCU1NIMl9TRVNTSU9OKiBzZXNzaW9uLAogCWNvbnN0IGNoYXIgKnVzZXIsCi0JZ2l0X2NyZWQqIGNyZWQKLSkKKwlnaXRfY3JlZCogY3JlZCkKIHsKIAlpbnQgcmM7CisKIAlkbyB7CiAJCXN3aXRjaCAoY3JlZC0+Y3JlZHR5cGUpIHsKLQkJCWNhc2UgR0lUX0NSRURUWVBFX1VTRVJQQVNTX1BMQUlOVEVYVDogewotCQkJCWdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dCAqYyA9IChnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHQgKiljcmVkOwotCQkJCXJjID0gbGlic3NoMl91c2VyYXV0aF9wYXNzd29yZCgKLQkJCQkJc2Vzc2lvbiwgCi0JCQkJCWMtPnVzZXJuYW1lLAotCQkJCQljLT5wYXNzd29yZAotCQkJCSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIEdJVF9DUkVEVFlQRV9TU0hfS0VZRklMRV9QQVNTUEhSQVNFOiB7Ci0JCQkJZ2l0X2NyZWRfc3NoX2tleWZpbGVfcGFzc3BocmFzZSAqYyA9IChnaXRfY3JlZF9zc2hfa2V5ZmlsZV9wYXNzcGhyYXNlICopY3JlZDsKLQkJCQlyYyA9IGxpYnNzaDJfdXNlcmF1dGhfcHVibGlja2V5X2Zyb21maWxlKAotCQkJCQlzZXNzaW9uLCAKLQkJCQkJdXNlciwKLQkJCQkJYy0+cHVibGlja2V5LAotCQkJCQljLT5wcml2YXRla2V5LAotCQkJCQljLT5wYXNzcGhyYXNlCi0JCQkJKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWNhc2UgR0lUX0NSRURUWVBFX1NTSF9QVUJMSUNLRVk6IHsKLQkJCQlnaXRfY3JlZF9zc2hfcHVibGlja2V5ICpjID0gKGdpdF9jcmVkX3NzaF9wdWJsaWNrZXkgKiljcmVkOwotCQkJCXJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXkoCi0JCQkJCXNlc3Npb24sCi0JCQkJCXVzZXIsCi0JCQkJCShjb25zdCB1bnNpZ25lZCBjaGFyICopYy0+cHVibGlja2V5LAotCQkJCQljLT5wdWJsaWNrZXlfbGVuLAotCQkJCQljLT5zaWduX2NhbGxiYWNrLAotCQkJCQkmYy0+c2lnbl9kYXRhCi0JCQkJKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmMgPSBMSUJTU0gyX0VSUk9SX0FVVEhFTlRJQ0FUSU9OX0ZBSUxFRDsKKwkJY2FzZSBHSVRfQ1JFRFRZUEVfVVNFUlBBU1NfUExBSU5URVhUOiB7CisJCQlnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHQgKmMgPSAoZ2l0X2NyZWRfdXNlcnBhc3NfcGxhaW50ZXh0ICopY3JlZDsKKwkJCXVzZXIgPSBjLT51c2VybmFtZSA/IGMtPnVzZXJuYW1lIDogdXNlcjsKKwkJCXJjID0gbGlic3NoMl91c2VyYXV0aF9wYXNzd29yZChzZXNzaW9uLCB1c2VyLCBjLT5wYXNzd29yZCk7CisJCQlicmVhazsKIAkJfQotICAgIH0gd2hpbGUgKExJQlNTSDJfRVJST1JfRUFHQUlOID09IHJjIHx8IExJQlNTSDJfRVJST1JfVElNRU9VVCA9PSByYyk7Ci0JCi0gICAgcmV0dXJuIHJjOwotfQorCQljYXNlIEdJVF9DUkVEVFlQRV9TU0hfS0VZOiB7CisJCQlnaXRfY3JlZF9zc2hfa2V5ICpjID0gKGdpdF9jcmVkX3NzaF9rZXkgKiljcmVkOworCQkJdXNlciA9IGMtPnVzZXJuYW1lID8gYy0+dXNlcm5hbWUgOiB1c2VyOworCQkJcmMgPSBsaWJzc2gyX3VzZXJhdXRoX3B1YmxpY2tleV9mcm9tZmlsZSgKKwkJCQlzZXNzaW9uLCBjLT51c2VybmFtZSwgYy0+cHVibGlja2V5LCBjLT5wcml2YXRla2V5LCBjLT5wYXNzcGhyYXNlKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgR0lUX0NSRURUWVBFX1NTSF9DVVNUT006IHsKKwkJCWdpdF9jcmVkX3NzaF9jdXN0b20gKmMgPSAoZ2l0X2NyZWRfc3NoX2N1c3RvbSAqKWNyZWQ7CiAKLXN0YXRpYyBpbnQgX2dpdF9zc2hfc2Vzc2lvbl9jcmVhdGUKLSgKLQlMSUJTU0gyX1NFU1NJT04qKiBzZXNzaW9uLAotCWdpdG5vX3NvY2tldCBzb2NrZXQKLSkKLXsKLQlpZiAoIXNlc3Npb24pIHsKKwkJCXVzZXIgPSBjLT51c2VybmFtZSA/IGMtPnVzZXJuYW1lIDogdXNlcjsKKwkJCXJjID0gbGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXkoCisJCQkJc2Vzc2lvbiwgYy0+dXNlcm5hbWUsIChjb25zdCB1bnNpZ25lZCBjaGFyICopYy0+cHVibGlja2V5LAorCQkJCWMtPnB1YmxpY2tleV9sZW4sIGMtPnNpZ25fY2FsbGJhY2ssICZjLT5zaWduX2RhdGEpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJjID0gTElCU1NIMl9FUlJPUl9BVVRIRU5USUNBVElPTl9GQUlMRUQ7CisJCX0KKwl9IHdoaWxlIChMSUJTU0gyX0VSUk9SX0VBR0FJTiA9PSByYyB8fCBMSUJTU0gyX0VSUk9SX1RJTUVPVVQgPT0gcmMpOworCisJaWYgKHJjICE9IExJQlNTSDJfRVJST1JfTk9ORSkgeworCQlzc2hfZXJyb3Ioc2Vzc2lvbiwgIkZhaWxlZCB0byBhdXRoZW50aWNhdGUgU1NIIHNlc3Npb24iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKLQlMSUJTU0gyX1NFU1NJT04qIHMgPSBsaWJzc2gyX3Nlc3Npb25faW5pdCgpOwotICAgIGlmICghcykKLSAgICAgICAgcmV0dXJuIC0xOwotCQotICAgIGludCByYyA9IDA7Ci0gICAgZG8gewotICAgICAgICByYyA9IGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwKHMsIHNvY2tldC5zb2NrZXQpOwotICAgIH0gd2hpbGUgKExJQlNTSDJfRVJST1JfRUFHQUlOID09IHJjIHx8IExJQlNTSDJfRVJST1JfVElNRU9VVCA9PSByYyk7Ci0JCi0JaWYgKDAgIT0gcmMpIHsKLSAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICB9Ci0JCi0JbGlic3NoMl9zZXNzaW9uX3NldF9ibG9ja2luZyhzLCAxKTsKLQkKLQkqc2Vzc2lvbiA9IHM7Ci0JCisKIAlyZXR1cm4gMDsKLQkKLW9uX2Vycm9yOgotCWlmIChzKSB7Ci0JCWxpYnNzaDJfc2Vzc2lvbl9mcmVlKHMpLCBzID0gTlVMTDsKK30KKworc3RhdGljIGludCBfZ2l0X3NzaF9zZXNzaW9uX2NyZWF0ZSgKKwlMSUJTU0gyX1NFU1NJT04qKiBzZXNzaW9uLAorCWdpdG5vX3NvY2tldCBzb2NrZXQpCit7CisJaW50IHJjID0gMDsKKwlMSUJTU0gyX1NFU1NJT04qIHM7CisKKwlhc3NlcnQoc2Vzc2lvbik7CisKKwlzID0gbGlic3NoMl9zZXNzaW9uX2luaXQoKTsKKwlpZiAoIXMpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1NIIHNlc3Npb24iKTsKKwkJcmV0dXJuIC0xOwogCX0KLQkKLQlyZXR1cm4gLTE7CisKKwlkbyB7CisJCXJjID0gbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAocywgc29ja2V0LnNvY2tldCk7CisJfSB3aGlsZSAoTElCU1NIMl9FUlJPUl9FQUdBSU4gPT0gcmMgfHwgTElCU1NIMl9FUlJPUl9USU1FT1VUID09IHJjKTsKKworCWlmIChyYyAhPSBMSUJTU0gyX0VSUk9SX05PTkUpIHsKKwkJc3NoX2Vycm9yKHMsICJGYWlsZWQgdG8gc3RhcnQgU1NIIHNlc3Npb24iKTsKKwkJbGlic3NoMl9zZXNzaW9uX2ZyZWUocyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlsaWJzc2gyX3Nlc3Npb25fc2V0X2Jsb2NraW5nKHMsIDEpOworCisJKnNlc3Npb24gPSBzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX2dpdF9zc2hfc2V0dXBfY29ubigKIAlzc2hfc3VidHJhbnNwb3J0ICp0LAogCWNvbnN0IGNoYXIgKnVybCwKIAljb25zdCBjaGFyICpjbWQsCi0JZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKipzdHJlYW0KLSkKKwlnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqKnN0cmVhbSkKIHsKLQljaGFyICpob3N0LCAqcG9ydD1OVUxMLCAqdXNlcj1OVUxMLCAqcGFzcz1OVUxMOworCWNoYXIgKmhvc3Q9TlVMTCwgKnBvcnQ9TlVMTCwgKnBhdGg9TlVMTCwgKnVzZXI9TlVMTCwgKnBhc3M9TlVMTDsKIAljb25zdCBjaGFyICpkZWZhdWx0X3BvcnQ9IjIyIjsKIAlzc2hfc3RyZWFtICpzOwogCUxJQlNTSDJfU0VTU0lPTiogc2Vzc2lvbj1OVUxMOwogCUxJQlNTSDJfQ0hBTk5FTCogY2hhbm5lbD1OVUxMOwotCQorCiAJKnN0cmVhbSA9IE5VTEw7CiAJaWYgKHNzaF9zdHJlYW1fYWxsb2ModCwgdXJsLCBjbWQsIHN0cmVhbSkgPCAwKQogCQlyZXR1cm4gLTE7Ci0JCisKIAlzID0gKHNzaF9zdHJlYW0gKikqc3RyZWFtOwotCQorCiAJaWYgKCFnaXRfX3ByZWZpeGNtcCh1cmwsIHByZWZpeF9zc2gpKSB7Ci0JCXVybCA9IHVybCArIHN0cmxlbihwcmVmaXhfc3NoKTsKLQkJaWYgKGdpdG5vX2V4dHJhY3RfdXJsX3BhcnRzKCZob3N0LCAmcG9ydCwgJnVzZXIsICZwYXNzLCB1cmwsIGRlZmF1bHRfcG9ydCkgPCAwKQorCQlpZiAoZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJmhvc3QsICZwb3J0LCAmcGF0aCwgJnVzZXIsICZwYXNzLCB1cmwsIGRlZmF1bHRfcG9ydCkgPCAwKQogCQkJZ290byBvbl9lcnJvcjsKIAl9IGVsc2UgewogCQlpZiAoZ2l0X3NzaF9leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnVzZXIsIHVybCkgPCAwKQpAQCAtMzM4LDYxICszMzgsNzggQEAKIAkJcG9ydCA9IGdpdF9fc3RyZHVwKGRlZmF1bHRfcG9ydCk7CiAJCUdJVEVSUl9DSEVDS19BTExPQyhwb3J0KTsKIAl9Ci0JCisKIAlpZiAoZ2l0bm9fY29ubmVjdCgmcy0+c29ja2V0LCBob3N0LCBwb3J0LCAwKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7Ci0JCisKIAlpZiAodXNlciAmJiBwYXNzKSB7CiAJCWlmIChnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHRfbmV3KCZ0LT5jcmVkLCB1c2VyLCBwYXNzKSA8IDApCiAJCQlnb3RvIG9uX2Vycm9yOwotCX0gZWxzZSB7Ci0JCWlmICh0LT5vd25lci0+Y3JlZF9hY3F1aXJlX2NiKCZ0LT5jcmVkLAotCQkJCXQtPm93bmVyLT51cmwsCi0JCQkJdXNlciwKLQkJCQlHSVRfQ1JFRFRZUEVfVVNFUlBBU1NfUExBSU5URVhUIHwgR0lUX0NSRURUWVBFX1NTSF9LRVlGSUxFX1BBU1NQSFJBU0UsCisJfSBlbHNlIGlmICh0LT5vd25lci0+Y3JlZF9hY3F1aXJlX2NiKSB7CisJCWlmICh0LT5vd25lci0+Y3JlZF9hY3F1aXJlX2NiKAorCQkJCSZ0LT5jcmVkLCB0LT5vd25lci0+dXJsLCB1c2VyLAorCQkJCUdJVF9DUkVEVFlQRV9VU0VSUEFTU19QTEFJTlRFWFQgfAorCQkJCUdJVF9DUkVEVFlQRV9TU0hfS0VZIHwKKwkJCQlHSVRfQ1JFRFRZUEVfU1NIX0NVU1RPTSwKIAkJCQl0LT5vd25lci0+Y3JlZF9hY3F1aXJlX3BheWxvYWQpIDwgMCkKLQkJCXJldHVybiAtMTsKKwkJCWdvdG8gb25fZXJyb3I7CisKKwkJaWYgKCF0LT5jcmVkKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9TU0gsICJDYWxsYmFjayBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBTU0ggY3JlZGVudGlhbHMiKTsKKwkJCWdvdG8gb25fZXJyb3I7CisJCX0KKwl9IGVsc2UgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9TU0gsICJDYW5ub3Qgc2V0IHVwIFNTSCBjb25uZWN0aW9uIHdpdGhvdXQgY3JlZGVudGlhbHMiKTsKKwkJZ290byBvbl9lcnJvcjsKIAl9CiAJYXNzZXJ0KHQtPmNyZWQpOwotCQotCWlmICghdXNlcikgewotCQl1c2VyID0gZ2l0X19zdHJkdXAoZGVmYXVsdF91c2VyKTsKKworCWlmICghdXNlciAmJiAhZ2l0X2NyZWRfaGFzX3VzZXJuYW1lKHQtPmNyZWQpKSB7CisJCWdpdGVycl9zZXRfc3RyKEdJVEVSUl9ORVQsICJDYW5ub3QgYXV0aGVudGljYXRlIHdpdGhvdXQgYSB1c2VybmFtZSIpOworCQlnb3RvIG9uX2Vycm9yOwogCX0KLQkKKwogCWlmIChfZ2l0X3NzaF9zZXNzaW9uX2NyZWF0ZSgmc2Vzc2lvbiwgcy0+c29ja2V0KSA8IDApCiAJCWdvdG8gb25fZXJyb3I7Ci0JCi0gICAgaWYgKF9naXRfc3NoX2F1dGhlbnRpY2F0ZV9zZXNzaW9uKHNlc3Npb24sIHVzZXIsIHQtPmNyZWQpIDwgMCkKKworCWlmIChfZ2l0X3NzaF9hdXRoZW50aWNhdGVfc2Vzc2lvbihzZXNzaW9uLCB1c2VyLCB0LT5jcmVkKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7Ci0JCisKIAljaGFubmVsID0gbGlic3NoMl9jaGFubmVsX29wZW5fc2Vzc2lvbihzZXNzaW9uKTsKLQlpZiAoIWNoYW5uZWwpCi0gICAgICAgIGdvdG8gb25fZXJyb3I7Ci0JCisJaWYgKCFjaGFubmVsKSB7CisJCXNzaF9lcnJvcihzZXNzaW9uLCAiRmFpbGVkIHRvIG9wZW4gU1NIIGNoYW5uZWwiKTsKKwkJZ290byBvbl9lcnJvcjsKKwl9CisKIAlsaWJzc2gyX2NoYW5uZWxfc2V0X2Jsb2NraW5nKGNoYW5uZWwsIDEpOwotCQorCiAJcy0+c2Vzc2lvbiA9IHNlc3Npb247CiAJcy0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JCisKIAl0LT5jdXJyZW50X3N0cmVhbSA9IHM7CiAJZ2l0X19mcmVlKGhvc3QpOwogCWdpdF9fZnJlZShwb3J0KTsKKwlnaXRfX2ZyZWUocGF0aCk7CiAJZ2l0X19mcmVlKHVzZXIpOwogCWdpdF9fZnJlZShwYXNzKTsKIAogCXJldHVybiAwOwotCQorCiBvbl9lcnJvcjoKKwlzLT5zZXNzaW9uID0gTlVMTDsKKwlzLT5jaGFubmVsID0gTlVMTDsKKwl0LT5jdXJyZW50X3N0cmVhbSA9IE5VTEw7CisKIAlpZiAoKnN0cmVhbSkKIAkJc3NoX3N0cmVhbV9mcmVlKCpzdHJlYW0pOwotCQorCiAJZ2l0X19mcmVlKGhvc3QpOwogCWdpdF9fZnJlZShwb3J0KTsKIAlnaXRfX2ZyZWUodXNlcik7CiAJZ2l0X19mcmVlKHBhc3MpOwogCiAJaWYgKHNlc3Npb24pCi0JCWxpYnNzaDJfc2Vzc2lvbl9mcmVlKHNlc3Npb24pLCBzZXNzaW9uID0gTlVMTDsKKwkJbGlic3NoMl9zZXNzaW9uX2ZyZWUoc2Vzc2lvbik7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC00MDQsNyArNDIxLDcgQEAKIHsKIAlpZiAoX2dpdF9zc2hfc2V0dXBfY29ubih0LCB1cmwsIGNtZF91cGxvYWRwYWNrLCBzdHJlYW0pIDwgMCkKIAkJcmV0dXJuIC0xOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNCwxMiArNDMxLDEyIEBACiAJZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydF9zdHJlYW0gKipzdHJlYW0pCiB7CiAJR0lUX1VOVVNFRCh1cmwpOwotCQorCiAJaWYgKHQtPmN1cnJlbnRfc3RyZWFtKSB7CiAJCSpzdHJlYW0gPSAmdC0+Y3VycmVudF9zdHJlYW0tPnBhcmVudDsKIAkJcmV0dXJuIDA7CiAJfQotCQorCiAJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiTXVzdCBjYWxsIFVQTE9BRFBBQ0tfTFMgYmVmb3JlIFVQTE9BRFBBQ0siKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC00MzEsNyArNDQ4LDcgQEAKIHsKIAlpZiAoX2dpdF9zc2hfc2V0dXBfY29ubih0LCB1cmwsIGNtZF9yZWNlaXZlcGFjaywgc3RyZWFtKSA8IDApCiAJCXJldHVybiAtMTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC00NDEsMTIgKzQ1OCwxMiBAQAogCWdpdF9zbWFydF9zdWJ0cmFuc3BvcnRfc3RyZWFtICoqc3RyZWFtKQogewogCUdJVF9VTlVTRUQodXJsKTsKLQkKKwogCWlmICh0LT5jdXJyZW50X3N0cmVhbSkgewogCQkqc3RyZWFtID0gJnQtPmN1cnJlbnRfc3RyZWFtLT5wYXJlbnQ7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIk11c3QgY2FsbCBSRUNFSVZFUEFDS19MUyBiZWZvcmUgUkVDRUlWRVBBQ0siKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC00NTgsMjEgKzQ3NSwyMSBAQAogCWdpdF9zbWFydF9zZXJ2aWNlX3QgYWN0aW9uKQogewogCXNzaF9zdWJ0cmFuc3BvcnQgKnQgPSAoc3NoX3N1YnRyYW5zcG9ydCAqKSBzdWJ0cmFuc3BvcnQ7Ci0JCisKIAlzd2l0Y2ggKGFjdGlvbikgewogCQljYXNlIEdJVF9TRVJWSUNFX1VQTE9BRFBBQ0tfTFM6CiAJCQlyZXR1cm4gc3NoX3VwbG9hZHBhY2tfbHModCwgdXJsLCBzdHJlYW0pOwotCQkJCisKIAkJY2FzZSBHSVRfU0VSVklDRV9VUExPQURQQUNLOgogCQkJcmV0dXJuIHNzaF91cGxvYWRwYWNrKHQsIHVybCwgc3RyZWFtKTsKLQkJCQorCiAJCWNhc2UgR0lUX1NFUlZJQ0VfUkVDRUlWRVBBQ0tfTFM6CiAJCQlyZXR1cm4gc3NoX3JlY2VpdmVwYWNrX2xzKHQsIHVybCwgc3RyZWFtKTsKLQkJCQorCiAJCWNhc2UgR0lUX1NFUlZJQ0VfUkVDRUlWRVBBQ0s6CiAJCQlyZXR1cm4gc3NoX3JlY2VpdmVwYWNrKHQsIHVybCwgc3RyZWFtKTsKIAl9Ci0JCisKIAkqc3RyZWFtID0gTlVMTDsKIAlyZXR1cm4gLTE7CiB9CkBAIC00ODAsNDAgKzQ5Nyw0OSBAQAogc3RhdGljIGludCBfc3NoX2Nsb3NlKGdpdF9zbWFydF9zdWJ0cmFuc3BvcnQgKnN1YnRyYW5zcG9ydCkKIHsKIAlzc2hfc3VidHJhbnNwb3J0ICp0ID0gKHNzaF9zdWJ0cmFuc3BvcnQgKikgc3VidHJhbnNwb3J0OwotCQorCiAJYXNzZXJ0KCF0LT5jdXJyZW50X3N0cmVhbSk7Ci0JCisKIAlHSVRfVU5VU0VEKHQpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9zc2hfZnJlZShnaXRfc21hcnRfc3VidHJhbnNwb3J0ICpzdWJ0cmFuc3BvcnQpCiB7CiAJc3NoX3N1YnRyYW5zcG9ydCAqdCA9IChzc2hfc3VidHJhbnNwb3J0ICopIHN1YnRyYW5zcG9ydDsKLQkKKwogCWFzc2VydCghdC0+Y3VycmVudF9zdHJlYW0pOwotCQorCiAJZ2l0X19mcmVlKHQpOwogfQorI2VuZGlmCiAKLWludCBnaXRfc21hcnRfc3VidHJhbnNwb3J0X3NzaChnaXRfc21hcnRfc3VidHJhbnNwb3J0ICoqb3V0LCBnaXRfdHJhbnNwb3J0ICpvd25lcikKK2ludCBnaXRfc21hcnRfc3VidHJhbnNwb3J0X3NzaCgKKwlnaXRfc21hcnRfc3VidHJhbnNwb3J0ICoqb3V0LCBnaXRfdHJhbnNwb3J0ICpvd25lcikKIHsKKyNpZmRlZiBHSVRfU1NICiAJc3NoX3N1YnRyYW5zcG9ydCAqdDsKLQkKLQlpZiAoIW91dCkKLQkJcmV0dXJuIC0xOwotCQorCisJYXNzZXJ0KG91dCk7CisKIAl0ID0gZ2l0X19jYWxsb2Moc2l6ZW9mKHNzaF9zdWJ0cmFuc3BvcnQpLCAxKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0ModCk7Ci0JCisKIAl0LT5vd25lciA9ICh0cmFuc3BvcnRfc21hcnQgKilvd25lcjsKIAl0LT5wYXJlbnQuYWN0aW9uID0gX3NzaF9hY3Rpb247CiAJdC0+cGFyZW50LmNsb3NlID0gX3NzaF9jbG9zZTsKIAl0LT5wYXJlbnQuZnJlZSA9IF9zc2hfZnJlZTsKLQkKKwogCSpvdXQgPSAoZ2l0X3NtYXJ0X3N1YnRyYW5zcG9ydCAqKSB0OwogCXJldHVybiAwOwotfQorI2Vsc2UKKwlHSVRfVU5VU0VEKG93bmVyKTsKIAorCWFzc2VydChvdXQpOworCSpvdXQgPSBOVUxMOworCisJZ2l0ZXJyX3NldChHSVRFUlJfSU5WQUxJRCwgIkNhbm5vdCBjcmVhdGUgU1NIIHRyYW5zcG9ydC4gTGlicmFyeSB3YXMgYnVpbHQgd2l0aG91dCBTU0ggc3VwcG9ydCIpOworCXJldHVybiAtMTsKICNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvd2luaHR0cC5jIGIvc3JjL3RyYW5zcG9ydHMvd2luaHR0cC5jCmluZGV4IDk1ZTQyMmQuLjY3M2NkMGYgMTAwNjQ0Ci0tLSBhL3NyYy90cmFuc3BvcnRzL3dpbmh0dHAuYworKysgYi9zcmMvdHJhbnNwb3J0cy93aW5odHRwLmMKQEAgLTUyLDYgKzUyLDcgQEAKIAogdHlwZWRlZiBlbnVtIHsKIAlHSVRfV0lOSFRUUF9BVVRIX0JBU0lDID0gMSwKKwlHSVRfV0lOSFRUUF9BVVRIX05FR09USUFURSA9IDIsCiB9IHdpbmh0dHBfYXV0aG1lY2hhbmlzbV90OwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC03MywxNyArNzQsMTIgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAlnaXRfc21hcnRfc3VidHJhbnNwb3J0IHBhcmVudDsKIAl0cmFuc3BvcnRfc21hcnQgKm93bmVyOwotCWNvbnN0IGNoYXIgKnBhdGg7Ci0JY2hhciAqaG9zdDsKLQljaGFyICpwb3J0OwotCWNoYXIgKnVzZXJfZnJvbV91cmw7Ci0JY2hhciAqcGFzc19mcm9tX3VybDsKKwlnaXRub19jb25uZWN0aW9uX2RhdGEgY29ubmVjdGlvbl9kYXRhOwogCWdpdF9jcmVkICpjcmVkOwogCWdpdF9jcmVkICp1cmxfY3JlZDsKIAlpbnQgYXV0aF9tZWNoYW5pc207CiAJSElOVEVSTkVUIHNlc3Npb247CiAJSElOVEVSTkVUIGNvbm5lY3Rpb247Ci0JdW5zaWduZWQgdXNlX3NzbCA6IDE7CiB9IHdpbmh0dHBfc3VidHJhbnNwb3J0OwogCiBzdGF0aWMgaW50IGFwcGx5X2Jhc2ljX2NyZWRlbnRpYWwoSElOVEVSTkVUIHJlcXVlc3QsIGdpdF9jcmVkICpjcmVkKQpAQCAtMTQzLDYgKzEzOSwyMiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBhcHBseV9kZWZhdWx0X2NyZWRlbnRpYWxzKEhJTlRFUk5FVCByZXF1ZXN0KQoreworCS8qIElmIHdlIGFyZSBleHBsaWNpdGx5IGFza2VkIHRvIGRlbGl2ZXIgZGVmYXVsdCBjcmVkZW50aWFscywgdHVybiBzZXQKKwkgKiB0aGUgc2VjdXJpdHkgbGV2ZWwgdG8gbG93IHdoaWNoIHdpbGwgZ3VhcmFudGVlIHRoZXkgYXJlIGRlbGl2ZXJlZC4KKwkgKiBUaGUgZGVmYXVsdCBpcyAibWVkaXVtIiB3aGljaCBhcHBsaWVzIHRvIHRoZSBpbnRyYW5ldCBhbmQgc291bmRzCisJICogbGlrZSBpdCB3b3VsZCBjb3JyZXNwb25kIHRvIEludGVybmV0IEV4cGxvcmVyIHNlY3VyaXR5IHpvbmVzLCBidXQKKwkgKiBpbiBmYWN0IGRvZXMgbm90LgorCSAqLworCURXT1JEIGRhdGEgPSBXSU5IVFRQX0FVVE9MT0dPTl9TRUNVUklUWV9MRVZFTF9MT1c7CisKKwlpZiAoIVdpbkh0dHBTZXRPcHRpb24ocmVxdWVzdCwgV0lOSFRUUF9PUFRJT05fQVVUT0xPR09OX1BPTElDWSwgJmRhdGEsIHNpemVvZihEV09SRCkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB3aW5odHRwX3N0cmVhbV9jb25uZWN0KHdpbmh0dHBfc3RyZWFtICpzKQogewogCXdpbmh0dHBfc3VidHJhbnNwb3J0ICp0ID0gT1dOSU5HX1NVQlRSQU5TUE9SVChzKTsKQEAgLTE1Miw5ICsxNjQsMTAgQEAKIAl3Y2hhcl90ICp0eXBlc1tdID0geyBMIiovKiIsIE5VTEwgfTsKIAlCT09MIHBlZXJkaXN0ID0gRkFMU0U7CiAJaW50IGVycm9yID0gLTEsIHdpZGVfbGVuOworCXVuc2lnbmVkIGxvbmcgZGlzYWJsZV9yZWRpcmVjdHMgPSBXSU5IVFRQX0RJU0FCTEVfUkVESVJFQ1RTOwogCiAJLyogUHJlcGFyZSBVUkwgKi8KLQlnaXRfYnVmX3ByaW50ZigmYnVmLCAiJXMlcyIsIHQtPnBhdGgsIHMtPnNlcnZpY2VfdXJsKTsKKwlnaXRfYnVmX3ByaW50ZigmYnVmLCAiJXMlcyIsIHQtPmNvbm5lY3Rpb25fZGF0YS5wYXRoLCBzLT5zZXJ2aWNlX3VybCk7CiAKIAlpZiAoZ2l0X2J1Zl9vb20oJmJ1ZikpCiAJCXJldHVybiAtMTsKQEAgLTE4Nyw3ICsyMDAsNyBAQAogCQkJTlVMTCwKIAkJCVdJTkhUVFBfTk9fUkVGRVJFUiwKIAkJCXR5cGVzLAotCQkJdC0+dXNlX3NzbCA/IFdJTkhUVFBfRkxBR19TRUNVUkUgOiAwKTsKKwkJCXQtPmNvbm5lY3Rpb25fZGF0YS51c2Vfc3NsID8gV0lOSFRUUF9GTEFHX1NFQ1VSRSA6IDApOwogCiAJaWYgKCFzLT5yZXF1ZXN0KSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIG9wZW4gcmVxdWVzdCIpOwpAQCAtMTk1LDcgKzIwOCw3IEBACiAJfQogCiAJLyogU2V0IHByb3h5IGlmIG5lY2Vzc2FyeSAqLwotCWlmIChnaXRfcmVtb3RlX19nZXRfaHR0cF9wcm94eSh0LT5vd25lci0+b3duZXIsIHQtPnVzZV9zc2wsICZwcm94eV91cmwpIDwgMCkKKwlpZiAoZ2l0X3JlbW90ZV9fZ2V0X2h0dHBfcHJveHkodC0+b3duZXItPm93bmVyLCAhIXQtPmNvbm5lY3Rpb25fZGF0YS51c2Vfc3NsLCAmcHJveHlfdXJsKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKIAlpZiAocHJveHlfdXJsKSB7CkBAIC0yNDQsNiArMjU3LDE3IEBACiAJCWdpdF9fZnJlZShwcm94eV93aWRlKTsKIAl9CiAKKwkvKiBEaXNhYmxlIFdpbkhUVFAgcmVkaXJlY3RzIHNvIHdlIGNhbiBoYW5kbGUgdGhlbSBtYW51YWxseS4gV2h5LCB5b3UgYXNrPworCSAqIGh0dHA6Ly9zb2NpYWwubXNkbi5taWNyb3NvZnQuY29tL0ZvcnVtcy93aW5kb3dzZGVza3RvcC9lbi1VUy9iMmZmODg3OS1hYjlmLTQyMTgtOGYwOS0xNmQyNWRmZjg3YWUKKwkgKi8KKwlpZiAoIVdpbkh0dHBTZXRPcHRpb24ocy0+cmVxdWVzdCwKKwkJV0lOSFRUUF9PUFRJT05fRElTQUJMRV9GRUFUVVJFLAorCQkmZGlzYWJsZV9yZWRpcmVjdHMsCisJCXNpemVvZihkaXNhYmxlX3JlZGlyZWN0cykpKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byBkaXNhYmxlIHJlZGlyZWN0cyIpOworCQkJZ290byBvbl9lcnJvcjsKKwl9CisKIAkvKiBTdHJpcCB1bndhbnRlZCBoZWFkZXJzIChYLVAyUC1QZWVyRGlzdCwgWC1QMlAtUGVlckRpc3RFeCkgdGhhdCBXaW5IVFRQCiAJICogYWRkcyBpdHNlbGYuIFRoaXMgb3B0aW9uIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nCiAJICogcGxhdGZvcm0sIHNvIHdlIGRvIG5vdCBlcnJvci1jaGVjayBpdCAqLwpAQCAtMjU4LDIyICsyODIsMzkgQEAKIAkJZ290byBvbl9lcnJvcjsKIAl9CiAKLQkvKiBTZW5kIENvbnRlbnQtVHlwZSBoZWFkZXIgLS0gb25seSBuZWNlc3Nhcnkgb24gYSBQT1NUICovCiAJaWYgKHBvc3RfdmVyYiA9PSBzLT52ZXJiKSB7CisJCS8qIFNlbmQgQ29udGVudC1UeXBlIGFuZCBBY2NlcHQgaGVhZGVycyAtLSBvbmx5IG5lY2Vzc2FyeSBvbiBhIFBPU1QgKi8KIAkJZ2l0X2J1Zl9jbGVhcigmYnVmKTsKLQkJaWYgKGdpdF9idWZfcHJpbnRmKCZidWYsICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LSVzLXJlcXVlc3QiLCBzLT5zZXJ2aWNlKSA8IDApCisJCWlmIChnaXRfYnVmX3ByaW50ZigmYnVmLAorCQkJIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtJXMtcmVxdWVzdCIsCisJCQlzLT5zZXJ2aWNlKSA8IDApCiAJCQlnb3RvIG9uX2Vycm9yOwogCiAJCWdpdF9fdXRmOF90b18xNihjdCwgTUFYX0NPTlRFTlRfVFlQRV9MRU4sIGdpdF9idWZfY3N0cigmYnVmKSk7CiAKLQkJaWYgKCFXaW5IdHRwQWRkUmVxdWVzdEhlYWRlcnMocy0+cmVxdWVzdCwgY3QsIChVTE9ORykgLTFMLCBXSU5IVFRQX0FERFJFUV9GTEFHX0FERCkpIHsKKwkJaWYgKCFXaW5IdHRwQWRkUmVxdWVzdEhlYWRlcnMocy0+cmVxdWVzdCwgY3QsIChVTE9ORyktMUwsCisJCQlXSU5IVFRQX0FERFJFUV9GTEFHX0FERCB8IFdJTkhUVFBfQUREUkVRX0ZMQUdfUkVQTEFDRSkpIHsKKwkJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIGFkZCBhIGhlYWRlciB0byB0aGUgcmVxdWVzdCIpOworCQkJZ290byBvbl9lcnJvcjsKKwkJfQorCisJCWdpdF9idWZfY2xlYXIoJmJ1Zik7CisJCWlmIChnaXRfYnVmX3ByaW50ZigmYnVmLAorCQkJIkFjY2VwdDogYXBwbGljYXRpb24veC1naXQtJXMtcmVzdWx0IiwKKwkJCXMtPnNlcnZpY2UpIDwgMCkKKwkJCWdvdG8gb25fZXJyb3I7CisKKwkJZ2l0X191dGY4X3RvXzE2KGN0LCBNQVhfQ09OVEVOVF9UWVBFX0xFTiwgZ2l0X2J1Zl9jc3RyKCZidWYpKTsKKworCQlpZiAoIVdpbkh0dHBBZGRSZXF1ZXN0SGVhZGVycyhzLT5yZXF1ZXN0LCBjdCwgKFVMT05HKS0xTCwKKwkJCVdJTkhUVFBfQUREUkVRX0ZMQUdfQUREIHwgV0lOSFRUUF9BRERSRVFfRkxBR19SRVBMQUNFKSkgewogCQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gYWRkIGEgaGVhZGVyIHRvIHRoZSByZXF1ZXN0Iik7CiAJCQlnb3RvIG9uX2Vycm9yOwogCQl9CiAJfQogCiAJLyogSWYgcmVxdWVzdGVkLCBkaXNhYmxlIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gKi8KLQlpZiAodC0+dXNlX3NzbCkgeworCWlmICh0LT5jb25uZWN0aW9uX2RhdGEudXNlX3NzbCkgewogCQlpbnQgZmxhZ3M7CiAKIAkJaWYgKHQtPm93bmVyLT5wYXJlbnQucmVhZF9mbGFncygmdC0+b3duZXItPnBhcmVudCwgJmZsYWdzKSA8IDApCkBAIC0yOTMsMTIgKzMzNCwxNyBAQAogCQl0LT5hdXRoX21lY2hhbmlzbSA9PSBHSVRfV0lOSFRUUF9BVVRIX0JBU0lDICYmCiAJCWFwcGx5X2Jhc2ljX2NyZWRlbnRpYWwocy0+cmVxdWVzdCwgdC0+Y3JlZCkgPCAwKQogCQlnb3RvIG9uX2Vycm9yOworCWVsc2UgaWYgKHQtPmNyZWQgJiYKKwkJdC0+Y3JlZC0+Y3JlZHR5cGUgPT0gR0lUX0NSRURUWVBFX0RFRkFVTFQgJiYKKwkJdC0+YXV0aF9tZWNoYW5pc20gPT0gR0lUX1dJTkhUVFBfQVVUSF9ORUdPVElBVEUgJiYKKwkJYXBwbHlfZGVmYXVsdF9jcmVkZW50aWFscyhzLT5yZXF1ZXN0KSA8IDApCisJCWdvdG8gb25fZXJyb3I7CiAKIAkvKiBJZiBubyBvdGhlciBjcmVkZW50aWFscyBoYXZlIGJlZW4gYXBwbGllZCBhbmQgdGhlIFVSTCBoYXMgdXNlcm5hbWUgYW5kCiAJICogcGFzc3dvcmQsIHVzZSB0aG9zZSAqLwotCWlmICghdC0+Y3JlZCAmJiB0LT51c2VyX2Zyb21fdXJsICYmIHQtPnBhc3NfZnJvbV91cmwpIHsKKwlpZiAoIXQtPmNyZWQgJiYgdC0+Y29ubmVjdGlvbl9kYXRhLnVzZXIgJiYgdC0+Y29ubmVjdGlvbl9kYXRhLnBhc3MpIHsKIAkJaWYgKCF0LT51cmxfY3JlZCAmJgotCQkJIGdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dF9uZXcoJnQtPnVybF9jcmVkLCB0LT51c2VyX2Zyb21fdXJsLCB0LT5wYXNzX2Zyb21fdXJsKSA8IDApCisJCQlnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHRfbmV3KCZ0LT51cmxfY3JlZCwgdC0+Y29ubmVjdGlvbl9kYXRhLnVzZXIsIHQtPmNvbm5lY3Rpb25fZGF0YS5wYXNzKSA8IDApCiAJCQlnb3RvIG9uX2Vycm9yOwogCQlpZiAoYXBwbHlfYmFzaWNfY3JlZGVudGlhbChzLT5yZXF1ZXN0LCB0LT51cmxfY3JlZCkgPCAwKQogCQkJZ290byBvbl9lcnJvcjsKQEAgLTMzNyw2ICszODMsMTIgQEAKIAkJKmF1dGhfbWVjaGFuaXNtID0gR0lUX1dJTkhUVFBfQVVUSF9CQVNJQzsKIAl9CiAKKwlpZiAoKFdJTkhUVFBfQVVUSF9TQ0hFTUVfTlRMTSAmIHN1cHBvcnRlZCkgfHwKKwkJKFdJTkhUVFBfQVVUSF9TQ0hFTUVfTkVHT1RJQVRFICYgc3VwcG9ydGVkKSkgeworCQkqYWxsb3dlZF90eXBlcyB8PSBHSVRfQ1JFRFRZUEVfREVGQVVMVDsKKwkJKmF1dGhfbWVjaGFuaXNtID0gR0lUX1dJTkhUVFBfQVVUSF9ORUdPVElBVEU7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MCw2ICs0MzIsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB3aW5odHRwX2Nvbm5lY3QoCisJd2luaHR0cF9zdWJ0cmFuc3BvcnQgKnQsCisJY29uc3QgY2hhciAqdXJsKQoreworCXdjaGFyX3QgKnVhID0gTCJnaXQvMS4wIChsaWJnaXQyICIgV0lERU4oTElCR0lUMl9WRVJTSU9OKSBMIikiOworCWdpdF93aW4zMl9wYXRoIGhvc3Q7CisJaW50MzJfdCBwb3J0OworCWNvbnN0IGNoYXIgKmRlZmF1bHRfcG9ydCA9ICI4MCI7CisKKwkvKiBQcmVwYXJlIHBvcnQgKi8KKwlpZiAoZ2l0X19zdHJ0b2wzMigmcG9ydCwgdC0+Y29ubmVjdGlvbl9kYXRhLnBvcnQsIE5VTEwsIDEwKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIFByZXBhcmUgaG9zdCAqLworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhob3N0LCB0LT5jb25uZWN0aW9uX2RhdGEuaG9zdCk7CisKKwkvKiBFc3RhYmxpc2ggc2Vzc2lvbiAqLworCXQtPnNlc3Npb24gPSBXaW5IdHRwT3BlbigKKwkJdWEsCisJCVdJTkhUVFBfQUNDRVNTX1RZUEVfREVGQVVMVF9QUk9YWSwKKwkJV0lOSFRUUF9OT19QUk9YWV9OQU1FLAorCQlXSU5IVFRQX05PX1BST1hZX0JZUEFTUywKKwkJMCk7CisKKwlpZiAoIXQtPnNlc3Npb24pIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gaW5pdCBXaW5IVFRQIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBFc3RhYmxpc2ggY29ubmVjdGlvbiAqLworCXQtPmNvbm5lY3Rpb24gPSBXaW5IdHRwQ29ubmVjdCgKKwkJdC0+c2Vzc2lvbiwKKwkJaG9zdCwKKwkJKElOVEVSTkVUX1BPUlQpIHBvcnQsCisJCTApOworCisJaWYgKCF0LT5jb25uZWN0aW9uKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgd2luaHR0cF9zdHJlYW1fcmVhZCgKIAlnaXRfc21hcnRfc3VidHJhbnNwb3J0X3N0cmVhbSAqc3RyZWFtLAogCWNoYXIgKmJ1ZmZlciwKQEAgLTUxMSw1MCArNjA3LDUzIEBACiAKIAkJCS8qIENoZWNrIGZvciBXaW5kb3dzIDcuIFRoaXMgd29ya2Fyb3VuZCBpcyBvbmx5IG5lY2Vzc2FyeSBvbgogCQkJICogV2luZG93cyBWaXN0YSBhbmQgZWFybGllci4gV2luZG93cyA3IGlzIHZlcnNpb24gNi4xLiAqLwotCQkJaWYgKCFnaXRfaGFzX3dpbjMyX3ZlcnNpb24oNiwgMSkpIHsKLQkJCQl3Y2hhcl90ICpsb2NhdGlvbjsKLQkJCQlEV09SRCBsb2NhdGlvbl9sZW5ndGg7Ci0JCQkJaW50IHJlZGlyZWN0X2NtcDsKKwkJCXdjaGFyX3QgKmxvY2F0aW9uOworCQkJRFdPUkQgbG9jYXRpb25fbGVuZ3RoOworCQkJY2hhciAqbG9jYXRpb244OwogCi0JCQkJLyogT0ssIGZldGNoIHRoZSBMb2NhdGlvbiBoZWFkZXIgZnJvbSB0aGUgcmVkaXJlY3QuICovCi0JCQkJaWYgKFdpbkh0dHBRdWVyeUhlYWRlcnMocy0+cmVxdWVzdCwKLQkJCQkJV0lOSFRUUF9RVUVSWV9MT0NBVElPTiwKLQkJCQkJV0lOSFRUUF9IRUFERVJfTkFNRV9CWV9JTkRFWCwKLQkJCQkJV0lOSFRUUF9OT19PVVRQVVRfQlVGRkVSLAotCQkJCQkmbG9jYXRpb25fbGVuZ3RoLAotCQkJCQlXSU5IVFRQX05PX0hFQURFUl9JTkRFWCkgfHwKLQkJCQkJR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgewotCQkJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byByZWFkIExvY2F0aW9uIGhlYWRlciIpOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCi0JCQkJbG9jYXRpb24gPSBnaXRfX21hbGxvYyhsb2NhdGlvbl9sZW5ndGgpOwotCQkJCUdJVEVSUl9DSEVDS19BTExPQyhsb2NhdGlvbik7Ci0KLQkJCQlpZiAoIVdpbkh0dHBRdWVyeUhlYWRlcnMocy0+cmVxdWVzdCwKLQkJCQkJV0lOSFRUUF9RVUVSWV9MT0NBVElPTiwKLQkJCQkJV0lOSFRUUF9IRUFERVJfTkFNRV9CWV9JTkRFWCwKLQkJCQkJbG9jYXRpb24sCi0JCQkJCSZsb2NhdGlvbl9sZW5ndGgsCi0JCQkJCVdJTkhUVFBfTk9fSEVBREVSX0lOREVYKSkgewotCQkJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byByZWFkIExvY2F0aW9uIGhlYWRlciIpOwotCQkJCQlnaXRfX2ZyZWUobG9jYXRpb24pOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCi0JCQkJLyogQ29tcGFyZSB0aGUgTG9jYXRpb24gaGVhZGVyIHdpdGggdGhlIHJlcXVlc3QgVVJJICovCi0JCQkJcmVkaXJlY3RfY21wID0gd2NzY21wKGxvY2F0aW9uLCBzLT5yZXF1ZXN0X3VyaSk7Ci0JCQkJZ2l0X19mcmVlKGxvY2F0aW9uKTsKLQotCQkJCWlmICghcmVkaXJlY3RfY21wKSB7Ci0JCQkJCS8qIFJlcGxheSB0aGUgcmVxdWVzdCAqLwotCQkJCQlXaW5IdHRwQ2xvc2VIYW5kbGUocy0+cmVxdWVzdCk7Ci0JCQkJCXMtPnJlcXVlc3QgPSBOVUxMOwotCQkJCQlzLT5zZW50X3JlcXVlc3QgPSAwOwotCi0JCQkJCWdvdG8gcmVwbGF5OwotCQkJCX0KKwkJCS8qIE9LLCBmZXRjaCB0aGUgTG9jYXRpb24gaGVhZGVyIGZyb20gdGhlIHJlZGlyZWN0LiAqLworCQkJaWYgKFdpbkh0dHBRdWVyeUhlYWRlcnMocy0+cmVxdWVzdCwKKwkJCQlXSU5IVFRQX1FVRVJZX0xPQ0FUSU9OLAorCQkJCVdJTkhUVFBfSEVBREVSX05BTUVfQllfSU5ERVgsCisJCQkJV0lOSFRUUF9OT19PVVRQVVRfQlVGRkVSLAorCQkJCSZsb2NhdGlvbl9sZW5ndGgsCisJCQkJV0lOSFRUUF9OT19IRUFERVJfSU5ERVgpIHx8CisJCQkJR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgeworCQkJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIHJlYWQgTG9jYXRpb24gaGVhZGVyIik7CisJCQkJcmV0dXJuIC0xOwogCQkJfQorCisJCQlsb2NhdGlvbiA9IGdpdF9fbWFsbG9jKGxvY2F0aW9uX2xlbmd0aCk7CisJCQlsb2NhdGlvbjggPSBnaXRfX21hbGxvYyhsb2NhdGlvbl9sZW5ndGgpOworCQkJR0lURVJSX0NIRUNLX0FMTE9DKGxvY2F0aW9uKTsKKworCQkJaWYgKCFXaW5IdHRwUXVlcnlIZWFkZXJzKHMtPnJlcXVlc3QsCisJCQkJV0lOSFRUUF9RVUVSWV9MT0NBVElPTiwKKwkJCQlXSU5IVFRQX0hFQURFUl9OQU1FX0JZX0lOREVYLAorCQkJCWxvY2F0aW9uLAorCQkJCSZsb2NhdGlvbl9sZW5ndGgsCisJCQkJV0lOSFRUUF9OT19IRUFERVJfSU5ERVgpKSB7CisJCQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJGYWlsZWQgdG8gcmVhZCBMb2NhdGlvbiBoZWFkZXIiKTsKKwkJCQlnaXRfX2ZyZWUobG9jYXRpb24pOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWdpdF9fdXRmMTZfdG9fOChsb2NhdGlvbjgsIGxvY2F0aW9uX2xlbmd0aCwgbG9jYXRpb24pOworCQkJZ2l0X19mcmVlKGxvY2F0aW9uKTsKKworCQkJLyogUmVwbGF5IHRoZSByZXF1ZXN0ICovCisJCQlXaW5IdHRwQ2xvc2VIYW5kbGUocy0+cmVxdWVzdCk7CisJCQlzLT5yZXF1ZXN0ID0gTlVMTDsKKwkJCXMtPnNlbnRfcmVxdWVzdCA9IDA7CisKKwkJCWlmICghZ2l0X19wcmVmaXhjbXBfaWNhc2UobG9jYXRpb244LCBwcmVmaXhfaHR0cHMpKSB7CisJCQkJLyogVXBncmFkZSB0byBzZWN1cmUgY29ubmVjdGlvbjsgZGlzY29ubmVjdCBhbmQgc3RhcnQgb3ZlciAqLworCQkJCWlmIChnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJnQtPmNvbm5lY3Rpb25fZGF0YSwgbG9jYXRpb244LCBzLT5zZXJ2aWNlX3VybCkgPCAwKQorCQkJCQlyZXR1cm4gLTE7CisJCQkJd2luaHR0cF9jb25uZWN0KHQsIGxvY2F0aW9uOCk7CisJCQl9CisKKwkJCWdpdF9fZnJlZShsb2NhdGlvbjgpOworCQkJZ290byByZXBsYXk7CiAJCX0KIAogCQkvKiBIYW5kbGUgYXV0aGVudGljYXRpb24gZmFpbHVyZXMgKi8KQEAgLTU2OCw4ICs2NjcsOSBAQAogCQkJaWYgKGFsbG93ZWRfdHlwZXMgJiYKIAkJCQkoIXQtPmNyZWQgfHwgMCA9PSAodC0+Y3JlZC0+Y3JlZHR5cGUgJiBhbGxvd2VkX3R5cGVzKSkpIHsKIAotCQkJCWlmICh0LT5vd25lci0+Y3JlZF9hY3F1aXJlX2NiKCZ0LT5jcmVkLCB0LT5vd25lci0+dXJsLCB0LT51c2VyX2Zyb21fdXJsLCBhbGxvd2VkX3R5cGVzLCB0LT5vd25lci0+Y3JlZF9hY3F1aXJlX3BheWxvYWQpIDwgMCkKLQkJCQkJcmV0dXJuIC0xOworCQkJCWlmICh0LT5vd25lci0+Y3JlZF9hY3F1aXJlX2NiKCZ0LT5jcmVkLCB0LT5vd25lci0+dXJsLCB0LT5jb25uZWN0aW9uX2RhdGEudXNlciwgYWxsb3dlZF90eXBlcywgCisJCQkJCXQtPm93bmVyLT5jcmVkX2FjcXVpcmVfcGF5bG9hZCkgPCAwKQorCQkJCQlyZXR1cm4gR0lUX0VVU0VSOwogCiAJCQkJYXNzZXJ0KHQtPmNyZWQpOwogCkBAIC04ODgsNjggKzk4OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2luaHR0cF9jb25uZWN0KAotCXdpbmh0dHBfc3VidHJhbnNwb3J0ICp0LAotCWNvbnN0IGNoYXIgKnVybCkKLXsKLQl3Y2hhcl90ICp1YSA9IEwiZ2l0LzEuMCAobGliZ2l0MiAiIFdJREVOKExJQkdJVDJfVkVSU0lPTikgTCIpIjsKLQl3Y2hhcl90IGhvc3RbR0lUX1dJTl9QQVRIXTsKLQlpbnQzMl90IHBvcnQ7Ci0JY29uc3QgY2hhciAqZGVmYXVsdF9wb3J0ID0gIjgwIjsKLQlpbnQgcmV0OwotCi0JaWYgKCFnaXRfX3ByZWZpeGNtcCh1cmwsIHByZWZpeF9odHRwKSkgewotCQl1cmwgPSB1cmwgKyBzdHJsZW4ocHJlZml4X2h0dHApOwotCQlkZWZhdWx0X3BvcnQgPSAiODAiOwotCX0KLQotCWlmICghZ2l0X19wcmVmaXhjbXAodXJsLCBwcmVmaXhfaHR0cHMpKSB7Ci0JCXVybCArPSBzdHJsZW4ocHJlZml4X2h0dHBzKTsKLQkJZGVmYXVsdF9wb3J0ID0gIjQ0MyI7Ci0JCXQtPnVzZV9zc2wgPSAxOwotCX0KLQotCWlmICgocmV0ID0gZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJnQtPmhvc3QsICZ0LT5wb3J0LCAmdC0+dXNlcl9mcm9tX3VybCwKLQkJCQkJJnQtPnBhc3NfZnJvbV91cmwsIHVybCwgZGVmYXVsdF9wb3J0KSkgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JdC0+cGF0aCA9IHN0cmNocih1cmwsICcvJyk7Ci0KLQkvKiBQcmVwYXJlIHBvcnQgKi8KLQlpZiAoZ2l0X19zdHJ0b2wzMigmcG9ydCwgdC0+cG9ydCwgTlVMTCwgMTApIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JLyogUHJlcGFyZSBob3N0ICovCi0JZ2l0X191dGY4X3RvXzE2KGhvc3QsIEdJVF9XSU5fUEFUSCwgdC0+aG9zdCk7Ci0KLQkvKiBFc3RhYmxpc2ggc2Vzc2lvbiAqLwotCXQtPnNlc3Npb24gPSBXaW5IdHRwT3BlbigKLQkJCXVhLAotCQkJV0lOSFRUUF9BQ0NFU1NfVFlQRV9ERUZBVUxUX1BST1hZLAotCQkJV0lOSFRUUF9OT19QUk9YWV9OQU1FLAotCQkJV0lOSFRUUF9OT19QUk9YWV9CWVBBU1MsCi0JCQkwKTsKLQotCWlmICghdC0+c2Vzc2lvbikgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIkZhaWxlZCB0byBpbml0IFdpbkhUVFAiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkKLQkvKiBFc3RhYmxpc2ggY29ubmVjdGlvbiAqLwotCXQtPmNvbm5lY3Rpb24gPSBXaW5IdHRwQ29ubmVjdCgKLQkJCXQtPnNlc3Npb24sCi0JCQlob3N0LAotCQkJcG9ydCwKLQkJCTApOwotCi0JaWYgKCF0LT5jb25uZWN0aW9uKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgd2luaHR0cF91cGxvYWRwYWNrX2xzKAogCXdpbmh0dHBfc3VidHJhbnNwb3J0ICp0LAogCXdpbmh0dHBfc3RyZWFtICpzKQpAQCAtOTg5LDcgKzEwMjcsNyBAQAogewogCS8qIFdpbkhUVFAgb25seSBzdXBwb3J0cyBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZAogCSAqIG9uIFdpbmRvd3MgVmlzdGEgKE5UIDYuMCkgYW5kIGhpZ2hlci4gKi8KLQlzLT5jaHVua2VkID0gZ2l0X2hhc193aW4zMl92ZXJzaW9uKDYsIDApOworCXMtPmNodW5rZWQgPSBnaXRfaGFzX3dpbjMyX3ZlcnNpb24oNiwgMCwgMCk7CiAKIAlpZiAocy0+Y2h1bmtlZCkKIAkJcy0+cGFyZW50LndyaXRlID0gd2luaHR0cF9zdHJlYW1fd3JpdGVfY2h1bmtlZDsKQEAgLTEwMTMsOSArMTA1MSwxMCBAQAogCXdpbmh0dHBfc3RyZWFtICpzOwogCWludCByZXQgPSAtMTsKIAotCWlmICghdC0+Y29ubmVjdGlvbiAmJgotCQl3aW5odHRwX2Nvbm5lY3QodCwgdXJsKSA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoIXQtPmNvbm5lY3Rpb24pCisJCWlmIChnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJnQtPmNvbm5lY3Rpb25fZGF0YSwgdXJsLCBOVUxMKSA8IDAgfHwKKwkJCSB3aW5odHRwX2Nvbm5lY3QodCwgdXJsKSA8IDApCisJCQlyZXR1cm4gLTE7CiAKIAlpZiAod2luaHR0cF9zdHJlYW1fYWxsb2ModCwgJnMpIDwgMCkKIAkJcmV0dXJuIC0xOwpAQCAtMTA1NiwyNSArMTA5NSw3IEBACiAJd2luaHR0cF9zdWJ0cmFuc3BvcnQgKnQgPSAod2luaHR0cF9zdWJ0cmFuc3BvcnQgKilzdWJ0cmFuc3BvcnQ7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAodC0+aG9zdCkgewotCQlnaXRfX2ZyZWUodC0+aG9zdCk7Ci0JCXQtPmhvc3QgPSBOVUxMOwotCX0KLQotCWlmICh0LT5wb3J0KSB7Ci0JCWdpdF9fZnJlZSh0LT5wb3J0KTsKLQkJdC0+cG9ydCA9IE5VTEw7Ci0JfQotCi0JaWYgKHQtPnVzZXJfZnJvbV91cmwpIHsKLQkJZ2l0X19mcmVlKHQtPnVzZXJfZnJvbV91cmwpOwotCQl0LT51c2VyX2Zyb21fdXJsID0gTlVMTDsKLQl9Ci0KLQlpZiAodC0+cGFzc19mcm9tX3VybCkgewotCQlnaXRfX2ZyZWUodC0+cGFzc19mcm9tX3VybCk7Ci0JCXQtPnBhc3NfZnJvbV91cmwgPSBOVUxMOwotCX0KKwlnaXRub19jb25uZWN0aW9uX2RhdGFfZnJlZV9wdHJzKCZ0LT5jb25uZWN0aW9uX2RhdGEpOwogCiAJaWYgKHQtPmNyZWQpIHsKIAkJdC0+Y3JlZC0+ZnJlZSh0LT5jcmVkKTsKZGlmZiAtLWdpdCBhL3NyYy90cmVlLWNhY2hlLmMgYi9zcmMvdHJlZS1jYWNoZS5jCmluZGV4IDk3ZmZjMmEuLjFkMzk5NzEgMTAwNjQ0Ci0tLSBhL3NyYy90cmVlLWNhY2hlLmMKKysrIGIvc3JjL3RyZWUtY2FjaGUuYwpAQCAtMTM4LDkgKzEzOCwxMSBAQAogCQl0cmVlLT5jaGlsZHJlbiA9IGdpdF9fbWFsbG9jKHRyZWUtPmNoaWxkcmVuX2NvdW50ICogc2l6ZW9mKGdpdF90cmVlX2NhY2hlICopKTsKIAkJR0lURVJSX0NIRUNLX0FMTE9DKHRyZWUtPmNoaWxkcmVuKTsKIAorCQltZW1zZXQodHJlZS0+Y2hpbGRyZW4sIDB4MCwgdHJlZS0+Y2hpbGRyZW5fY291bnQgKiBzaXplb2YoZ2l0X3RyZWVfY2FjaGUgKikpOworCiAJCWZvciAoaSA9IDA7IGkgPCB0cmVlLT5jaGlsZHJlbl9jb3VudDsgKytpKSB7CiAJCQlpZiAocmVhZF90cmVlX2ludGVybmFsKCZ0cmVlLT5jaGlsZHJlbltpXSwgJmJ1ZmZlciwgYnVmZmVyX2VuZCwgdHJlZSkgPCAwKQotCQkJCXJldHVybiAtMTsKKwkJCQlnb3RvIGNvcnJ1cHRlZDsKIAkJfQogCX0KIApAQCAtMTUwLDcgKzE1Miw3IEBACiAKICBjb3JydXB0ZWQ6CiAJZ2l0X3RyZWVfY2FjaGVfZnJlZSh0cmVlKTsKLQlnaXRlcnJfc2V0KEdJVEVSUl9JTkRFWCwgIkNvcnJ1cGVkIFRSRUUgZXh0ZW5zaW9uIGluIGluZGV4Iik7CisJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVgsICJDb3JydXB0ZWQgVFJFRSBleHRlbnNpb24gaW4gaW5kZXgiKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE2Miw3ICsxNjQsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAlpZiAoYnVmZmVyIDwgYnVmZmVyX2VuZCkgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9JTkRFWCwgIkNvcnJ1cGVkIFRSRUUgZXh0ZW5zaW9uIGluIGluZGV4ICh1bmV4cGVjdGVkIHRyYWlsaW5nIGRhdGEpIik7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLCAiQ29ycnVwdGVkIFRSRUUgZXh0ZW5zaW9uIGluIGluZGV4ICh1bmV4cGVjdGVkIHRyYWlsaW5nIGRhdGEpIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE3Niw5ICsxNzgsMTIgQEAKIAlpZiAodHJlZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgdHJlZS0+Y2hpbGRyZW5fY291bnQ7ICsraSkKLQkJZ2l0X3RyZWVfY2FjaGVfZnJlZSh0cmVlLT5jaGlsZHJlbltpXSk7CisJaWYgKHRyZWUtPmNoaWxkcmVuICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRyZWUtPmNoaWxkcmVuX2NvdW50OyArK2kpCisJCQlnaXRfdHJlZV9jYWNoZV9mcmVlKHRyZWUtPmNoaWxkcmVuW2ldKTsKIAotCWdpdF9fZnJlZSh0cmVlLT5jaGlsZHJlbik7CisJCWdpdF9fZnJlZSh0cmVlLT5jaGlsZHJlbik7CisJfQorCiAJZ2l0X19mcmVlKHRyZWUpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3RyZWUuYyBiL3NyYy90cmVlLmMKaW5kZXggNjVkMDFiNC4uYmI1OWZmOCAxMDA2NDQKLS0tIGEvc3JjL3RyZWUuYworKysgYi9zcmMvdHJlZS5jCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgImdpdDIvcmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgImdpdDIvb2JqZWN0LmgiCi0jaW5jbHVkZSAicGF0aC5oIgorI2luY2x1ZGUgImZpbGVvcHMuaCIKICNpbmNsdWRlICJ0cmVlLWNhY2hlLmgiCiAjaW5jbHVkZSAiaW5kZXguaCIKIApAQCAtMjksMTkgKzI5LDE5IEBACiBHSVRfSU5MSU5FKGdpdF9maWxlbW9kZV90KSBub3JtYWxpemVfZmlsZW1vZGUoZ2l0X2ZpbGVtb2RlX3QgZmlsZW1vZGUpCiB7CiAJLyogVHJlZSBiaXRzIHNldCwgYnV0IGl0J3Mgbm90IGEgY29tbWl0ICovCi0JaWYgKGZpbGVtb2RlICYgR0lUX0ZJTEVNT0RFX1RSRUUgJiYgIShmaWxlbW9kZSAmIDAxMDAwMDApKQorCWlmIChHSVRfTU9ERV9UWVBFKGZpbGVtb2RlKSA9PSBHSVRfRklMRU1PREVfVFJFRSkKIAkJcmV0dXJuIEdJVF9GSUxFTU9ERV9UUkVFOwogCi0JLyogSWYgYW55IG9mIHRoZSB4IGJpdHMgaXMgc2V0ICovCi0JaWYgKGZpbGVtb2RlICYgMDExMSkKKwkvKiBJZiBhbnkgb2YgdGhlIHggYml0cyBhcmUgc2V0ICovCisJaWYgKEdJVF9QRVJNU19JU19FWEVDKGZpbGVtb2RlKSkKIAkJcmV0dXJuIEdJVF9GSUxFTU9ERV9CTE9CX0VYRUNVVEFCTEU7CiAKIAkvKiAxNlhYWFggbWVhbnMgY29tbWl0ICovCi0JaWYgKChmaWxlbW9kZSAmIEdJVF9GSUxFTU9ERV9DT01NSVQpID09IEdJVF9GSUxFTU9ERV9DT01NSVQpCisJaWYgKEdJVF9NT0RFX1RZUEUoZmlsZW1vZGUpID09IEdJVF9GSUxFTU9ERV9DT01NSVQpCiAJCXJldHVybiBHSVRfRklMRU1PREVfQ09NTUlUOwogCiAJLyogMTJYWFhYIG1lYW5zIGNvbW1pdCAqLwotCWlmICgoZmlsZW1vZGUgJiBHSVRfRklMRU1PREVfTElOSykgPT0gR0lUX0ZJTEVNT0RFX0xJTkspCisJaWYgKEdJVF9NT0RFX1RZUEUoZmlsZW1vZGUpID09IEdJVF9GSUxFTU9ERV9MSU5LKQogCQlyZXR1cm4gR0lUX0ZJTEVNT0RFX0xJTks7CiAKIAkvKiBPdGhlcndpc2UsIHJldHVybiBhIGJsb2IgKi8KQEAgLTIzNyw3ICsyMzcsMTIgQEAKIAogZ2l0X2ZpbGVtb2RlX3QgZ2l0X3RyZWVfZW50cnlfZmlsZW1vZGUoY29uc3QgZ2l0X3RyZWVfZW50cnkgKmVudHJ5KQogewotCXJldHVybiAoZ2l0X2ZpbGVtb2RlX3QpZW50cnktPmF0dHI7CisJcmV0dXJuIG5vcm1hbGl6ZV9maWxlbW9kZShlbnRyeS0+YXR0cik7Cit9CisKK2dpdF9maWxlbW9kZV90IGdpdF90cmVlX2VudHJ5X2ZpbGVtb2RlX3Jhdyhjb25zdCBnaXRfdHJlZV9lbnRyeSAqZW50cnkpCit7CisJcmV0dXJuIGVudHJ5LT5hdHRyOwogfQogCiBjb25zdCBjaGFyICpnaXRfdHJlZV9lbnRyeV9uYW1lKGNvbnN0IGdpdF90cmVlX2VudHJ5ICplbnRyeSkKQEAgLTM4Niw4ICszOTEsNiBAQAogCQlpZiAoZ2l0X19zdHJ0b2wzMigmYXR0ciwgYnVmZmVyLCAmYnVmZmVyLCA4KSA8IDAgfHwgIWJ1ZmZlcikKIAkJCXJldHVybiB0cmVlX2Vycm9yKCJGYWlsZWQgdG8gcGFyc2UgdHJlZS4gQ2FuJ3QgcGFyc2UgZmlsZW1vZGUiLCBOVUxMKTsKIAotCQlhdHRyID0gbm9ybWFsaXplX2ZpbGVtb2RlKGF0dHIpOyAvKiBtYWtlIHN1cmUgdG8gbm9ybWFsaXplIHRoZSBmaWxlbW9kZSAqLwotCiAJCWlmICgqYnVmZmVyKysgIT0gJyAnKQogCQkJcmV0dXJuIHRyZWVfZXJyb3IoIkZhaWxlZCB0byBwYXJzZSB0cmVlLiBPYmplY3QgaXMgY29ycnVwdGVkIiwgTlVMTCk7CiAKQEAgLTg4MSw4ICs4ODQsMTAgQEAKIAlnaXRfdmVjdG9yX2ZvcmVhY2goJnRyZWUtPmVudHJpZXMsIGksIGVudHJ5KSB7CiAJCWlmIChwcmVvcmRlcikgewogCQkJZXJyb3IgPSBjYWxsYmFjayhwYXRoLT5wdHIsIGVudHJ5LCBwYXlsb2FkKTsKLQkJCWlmIChlcnJvciA+IDApCisJCQlpZiAoZXJyb3IgPiAwKSB7CisJCQkJZXJyb3IgPSAwOwogCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKGVycm9yIDwgMCkgewogCQkJCWdpdGVycl9jbGVhcigpOwogCQkJCXJldHVybiBHSVRfRVVTRVI7CkBAIC05MDUsMTEgKzkxMCwxMiBAQAogCQkJCXJldHVybiAtMTsKIAogCQkJZXJyb3IgPSB0cmVlX3dhbGsoc3VidHJlZSwgY2FsbGJhY2ssIHBhdGgsIHBheWxvYWQsIHByZW9yZGVyKTsKKwkJCWdpdF90cmVlX2ZyZWUoc3VidHJlZSk7CisKIAkJCWlmIChlcnJvciAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQlnaXRfYnVmX3RydW5jYXRlKHBhdGgsIHBhdGhfbGVuKTsKLQkJCWdpdF90cmVlX2ZyZWUoc3VidHJlZSk7CiAJCX0KIAogCQlpZiAoIXByZW9yZGVyICYmIGNhbGxiYWNrKHBhdGgtPnB0ciwgZW50cnksIHBheWxvYWQpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwuYyBiL3NyYy91dGlsLmMKaW5kZXggYzU0M2EzZC4uNDc1MTZhOCAxMDA2NDQKLS0tIGEvc3JjL3V0aWwuYworKysgYi9zcmMvdXRpbC5jCkBAIC0zMyw2ICszMyw5IEBACiAjaWYgZGVmaW5lZChHSVRfU1NMKSB8fCBkZWZpbmVkKEdJVF9XSU5IVFRQKQogCQl8IEdJVF9DQVBfSFRUUFMKICNlbmRpZgorI2lmIGRlZmluZWQoR0lUX1NTSCkKKwkJfCBHSVRfQ0FQX1NTSAorI2VuZGlmCiAJOwogfQogCkBAIC0xMTQsNiArMTE3LDE5IEBACiAJCSoodmFfYXJnKGFwLCBzc2l6ZV90ICopKSA9IGdpdF9jYWNoZV9fY3VycmVudF9zdG9yYWdlLnZhbDsKIAkJKih2YV9hcmcoYXAsIHNzaXplX3QgKikpID0gZ2l0X2NhY2hlX19tYXhfc3RvcmFnZTsKIAkJYnJlYWs7CisKKwljYXNlIEdJVF9PUFRfR0VUX1RFTVBMQVRFX1BBVEg6CisJCXsKKwkJCWNoYXIgKm91dCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCXNpemVfdCBvdXRsZW4gPSB2YV9hcmcoYXAsIHNpemVfdCk7CisKKwkJCWVycm9yID0gZ2l0X2Z1dGlsc19kaXJzX2dldF9zdHIob3V0LCBvdXRsZW4sIEdJVF9GVVRJTFNfRElSX1RFTVBMQVRFKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgR0lUX09QVF9TRVRfVEVNUExBVEVfUEFUSDoKKwkJZXJyb3IgPSBnaXRfZnV0aWxzX2RpcnNfc2V0KEdJVF9GVVRJTFNfRElSX1RFTVBMQVRFLCB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKikpOworCQlicmVhazsKIAl9CiAKIAl2YV9lbmQoYXApOwpAQCAtNjc2LDYgKzY5Miw5IEBACiB7CiAJY2hhciAqc2NhbiwgKnBvcyA9IHN0cjsKIAorCWlmICghc3RyKQorCQlyZXR1cm4gMDsKKwogCWZvciAoc2NhbiA9IHN0cjsgKnNjYW47IHBvcysrLCBzY2FuKyspIHsKIAkJaWYgKCpzY2FuID09ICdcXCcgJiYgKihzY2FuICsgMSkgIT0gJ1wwJykKIAkJCXNjYW4rKzsgLyogc2tpcCAnXCcgYnV0IGluY2x1ZGUgbmV4dCBjaGFyICovCkBAIC03MDcsOCArNzI2LDkgQEAKIHZvaWQgZ2l0X19xc29ydF9yKAogCXZvaWQgKmVscywgc2l6ZV90IG5lbCwgc2l6ZV90IGVsc2l6ZSwgZ2l0X19zb3J0X3JfY21wIGNtcCwgdm9pZCAqcGF5bG9hZCkKIHsKLSNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKEFNSUdBKSB8fCBcCi0JZGVmaW5lZChfX2dudV9odXJkX18pIHx8IFwKKyNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSB8fCBkZWZpbmVkKEFNSUdBKSB8fCBcCisJZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBcCisJZGVmaW5lZChfX2dudV9odXJkX18pIHx8IGRlZmluZWQoX19BTkRST0lEX0FQSV9fKSB8fCBcCiAJKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDgpCiAJZ2l0X19pbnNlcnRzb3J0X3IoZWxzLCBuZWwsIGVsc2l6ZSwgTlVMTCwgY21wLCBwYXlsb2FkKTsKICNlbGlmIGRlZmluZWQoR0lUX1dJTjMyKQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWwuaCBiL3NyYy91dGlsLmgKaW5kZXggZTAwODgzOS4uZjlkZTkwOSAxMDA2NDQKLS0tIGEvc3JjL3V0aWwuaAorKysgYi9zcmMvdXRpbC5oCkBAIC01NSw2ICs1NSw5IEBACiAKIAlwdHIgPSAoY2hhciopZ2l0X19tYWxsb2MobGVuZ3RoICsgMSk7CiAKKwlpZiAoIXB0cikKKwkJcmV0dXJuIE5VTEw7CisKIAlpZiAobGVuZ3RoKQogCQltZW1jcHkocHRyLCBzdHIsIGxlbmd0aCk7CiAKQEAgLTc5LDcgKzgyLDEwIEBACiAJcmV0dXJuIG5ld19wdHI7CiB9CiAKLSNkZWZpbmUgZ2l0X19mcmVlKHB0cikgZnJlZShwdHIpCitHSVRfSU5MSU5FKHZvaWQpIGdpdF9fZnJlZSh2b2lkICpwdHIpCit7CisJZnJlZShwdHIpOworfQogCiAjZGVmaW5lIFNUUkNNUF9DQVNFU0VMRUNUKElHTk9SRV9DQVNFLCBTVFIxLCBTVFIyKSBcCiAJKChJR05PUkVfQ0FTRSkgPyBzdHJjYXNlY21wKChTVFIxKSwgKFNUUjIpKSA6IHN0cmNtcCgoU1RSMSksIChTVFIyKSkpCkBAIC0yMjEsNiArMjI3LDkgQEAKIAogI2RlZmluZSBHSVRfUkVGQ09VTlRfT1dORVIocikgKCgoZ2l0X3JlZmNvdW50ICopKHIpKS0+b3duZXIpCiAKKyNkZWZpbmUgR0lUX1JFRkNPVU5UX1ZBTChyKSBnaXRfYXRvbWljX2dldCgmKChnaXRfcmVmY291bnQgKikocikpLT5yZWZjb3VudCkKKworCiBzdGF0aWMgc2lnbmVkIGNoYXIgZnJvbV9oZXhbXSA9IHsKIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKiAwMCAqLwogLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qIDEwICovCkBAIC0yOTEsNiArMzAwLDExIEBACiAJcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xmJyB8fCBjID09ICdccicgfHwgYyA9PSAnXHYnIHx8IGMgPT0gMHg4NSAvKiBVbmljb2RlIENSK0xGICovKTsKIH0KIAorR0lUX0lOTElORShib29sKSBnaXRfX2lzc3BhY2Vfbm9ubGYoaW50IGMpCit7CisJcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXGYnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdicgfHwgYyA9PSAweDg1IC8qIFVuaWNvZGUgQ1IrTEYgKi8pOworfQorCiBHSVRfSU5MSU5FKGJvb2wpIGdpdF9faXN3aWxkY2FyZChpbnQgYykKIHsKIAlyZXR1cm4gKGMgPT0gJyonIHx8IGMgPT0gJz8nIHx8IGMgPT0gJ1snKTsKQEAgLTMzOSw0ICszNTMsNjUgQEAKICNlbmRpZgogfQogCisjaWZkZWYgR0lUX1dJTjMyCisKK0dJVF9JTkxJTkUoZG91YmxlKSBnaXRfX3RpbWVyKHZvaWQpCit7CisJLyogV2UgbmVlZCB0aGUgaW5pdGlhbCB0aWNrIGNvdW50IHRvIGRldGVjdCBpZiB0aGUgdGljaworCSAqIGNvdW50IGhhcyByb2xsZWQgb3Zlci4gKi8KKwlzdGF0aWMgRFdPUkQgaW5pdGlhbF90aWNrX2NvdW50ID0gMDsKKworCS8qIEdldFRpY2tDb3VudCByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZQorCSAqIGVsYXBzZWQgc2luY2UgdGhlIHN5c3RlbSB3YXMgc3RhcnRlZC4gKi8KKwlEV09SRCBjb3VudCA9IEdldFRpY2tDb3VudCgpOworCisJaWYoaW5pdGlhbF90aWNrX2NvdW50ID09IDApIHsKKwkJaW5pdGlhbF90aWNrX2NvdW50ID0gY291bnQ7CisJfSBlbHNlIGlmIChjb3VudCA8IGluaXRpYWxfdGlja19jb3VudCkgeworCQkvKiBUaGUgdGljayBjb3VudCBoYXMgcm9sbGVkIG92ZXIgLSBhZGp1c3QgZm9yIGl0LiAqLworCQljb3VudCA9ICgweEZGRkZGRkZGIC0gaW5pdGlhbF90aWNrX2NvdW50KSArIGNvdW50OworCX0KKworCXJldHVybiAoZG91YmxlKSBjb3VudCAvIChkb3VibGUpIDEwMDA7Cit9CisKKyNlbGlmIF9fQVBQTEVfXworCisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKworR0lUX0lOTElORShkb3VibGUpIGdpdF9fdGltZXIodm9pZCkKK3sKKyAgIHVpbnQ2NF90IHRpbWUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKKyAgIHN0YXRpYyBkb3VibGUgc2NhbGluZ19mYWN0b3IgPSAwOworCisgICBpZiAoc2NhbGluZ19mYWN0b3IgPT0gMCkgeworICAgICAgIG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgaW5mbzsKKyAgICAgICAodm9pZCltYWNoX3RpbWViYXNlX2luZm8oJmluZm8pOworICAgICAgIHNjYWxpbmdfZmFjdG9yID0gKGRvdWJsZSlpbmZvLm51bWVyIC8gKGRvdWJsZSlpbmZvLmRlbm9tOworICAgfQorCisgICByZXR1cm4gKGRvdWJsZSl0aW1lICogc2NhbGluZ19mYWN0b3IgLyAxLjBFLTk7Cit9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCitHSVRfSU5MSU5FKGRvdWJsZSkgZ2l0X190aW1lcih2b2lkKQoreworCXN0cnVjdCB0aW1lc3BlYyB0cDsKKworCWlmIChjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRwKSA9PSAwKSB7CisJCXJldHVybiAoZG91YmxlKSB0cC50dl9zZWMgKyAoZG91YmxlKSB0cC50dl9uc2VjIC8gMUUtOTsKKwl9IGVsc2UgeworCQkvKiBGYWxsIGJhY2sgdG8gdXNpbmcgZ2V0dGltZW9mZGF5ICovCisJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlzdHJ1Y3QgdGltZXpvbmUgdHo7CisJCWdldHRpbWVvZmRheSgmdHYsICZ0eik7CisJCXJldHVybiAoZG91YmxlKXR2LnR2X3NlYyArIChkb3VibGUpdHYudHZfdXNlYyAvIDFFLTY7CisJfQorfQorCisjZW5kaWYKKwogI2VuZGlmIC8qIElOQ0xVREVfdXRpbF9oX18gKi8KZGlmZiAtLWdpdCBhL3NyYy92ZWN0b3IuYyBiL3NyYy92ZWN0b3IuYwppbmRleCA1YmEyZmFiLi4zNjJlN2IwIDEwMDY0NAotLS0gYS9zcmMvdmVjdG9yLmMKKysrIGIvc3JjL3ZlY3Rvci5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJdi0+bGVuZ3RoLS07CiB9CiAKLXZvaWQgZ2l0X3ZlY3Rvcl91bmlxKGdpdF92ZWN0b3IgKnYpCit2b2lkIGdpdF92ZWN0b3JfdW5pcShnaXRfdmVjdG9yICp2LCB2b2lkICAoKmdpdF9mcmVlX2NiKSh2b2lkICopKQogewogCWdpdF92ZWN0b3JfY21wIGNtcDsKIAlzaXplX3QgaSwgajsKQEAgLTIzMiw5ICsyMzIsMTIgQEAKIAljbXAgPSB2LT5fY21wID8gdi0+X2NtcCA6IHN0cmljdF9jb21wYXJpc29uOwogCiAJZm9yIChpID0gMCwgaiA9IDEgOyBqIDwgdi0+bGVuZ3RoOyArK2opCi0JCWlmICghY21wKHYtPmNvbnRlbnRzW2ldLCB2LT5jb250ZW50c1tqXSkpCisJCWlmICghY21wKHYtPmNvbnRlbnRzW2ldLCB2LT5jb250ZW50c1tqXSkpIHsKKwkJCWlmIChnaXRfZnJlZV9jYikKKwkJCQlnaXRfZnJlZV9jYih2LT5jb250ZW50c1tpXSk7CisKIAkJCXYtPmNvbnRlbnRzW2ldID0gdi0+Y29udGVudHNbal07Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQl2LT5jb250ZW50c1srK2ldID0gdi0+Y29udGVudHNbal07CiAKIAl2LT5sZW5ndGggLT0gaiAtIGkgLSAxOwpkaWZmIC0tZ2l0IGEvc3JjL3ZlY3Rvci5oIGIvc3JjL3ZlY3Rvci5oCmluZGV4IDFiZGE5YzkuLjI3OWY1YzYgMTAwNjQ0Ci0tLSBhL3NyYy92ZWN0b3IuaAorKysgYi9zcmMvdmVjdG9yLmgKQEAgLTU1LDYgKzU1LDExIEBACiAKICNkZWZpbmUgR0lUX1ZFQ1RPUl9HRVQoVixJKSAoKEkpIDwgKFYpLT5sZW5ndGggPyAoViktPmNvbnRlbnRzWyhJKV0gOiBOVUxMKQogCitHSVRfSU5MSU5FKHNpemVfdCkgZ2l0X3ZlY3Rvcl9sZW5ndGgoY29uc3QgZ2l0X3ZlY3RvciAqdikKK3sKKwlyZXR1cm4gdi0+bGVuZ3RoOworfQorCiBHSVRfSU5MSU5FKHZvaWQgKikgZ2l0X3ZlY3Rvcl9sYXN0KGNvbnN0IGdpdF92ZWN0b3IgKnYpCiB7CiAJcmV0dXJuICh2LT5sZW5ndGggPiAwKSA/IGdpdF92ZWN0b3JfZ2V0KHYsIHYtPmxlbmd0aCAtIDEpIDogTlVMTDsKQEAgLTcxLDcgKzc2LDcgQEAKIAlpbnQgKCpvbl9kdXApKHZvaWQgKipvbGQsIHZvaWQgKm5ldykpOwogaW50IGdpdF92ZWN0b3JfcmVtb3ZlKGdpdF92ZWN0b3IgKnYsIHNpemVfdCBpZHgpOwogdm9pZCBnaXRfdmVjdG9yX3BvcChnaXRfdmVjdG9yICp2KTsKLXZvaWQgZ2l0X3ZlY3Rvcl91bmlxKGdpdF92ZWN0b3IgKnYpOwordm9pZCBnaXRfdmVjdG9yX3VuaXEoZ2l0X3ZlY3RvciAqdiwgdm9pZCAgKCpnaXRfZnJlZV9jYikodm9pZCAqKSk7CiB2b2lkIGdpdF92ZWN0b3JfcmVtb3ZlX21hdGNoaW5nKAogCWdpdF92ZWN0b3IgKnYsIGludCAoKm1hdGNoKShjb25zdCBnaXRfdmVjdG9yICp2LCBzaXplX3QgaWR4KSk7CiAKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9kaXIuYyBiL3NyYy93aW4zMi9kaXIuYwppbmRleCA4YzUxZDgzLi5mNzg1OWI3IDEwMDY0NAotLS0gYS9zcmMvd2luMzIvZGlyLmMKKysrIGIvc3JjL3dpbjMyL2Rpci5jCkBAIC01LDggKzUsNyBAQAogICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCiAgKi8KICNkZWZpbmUgR0lUX19XSU4zMl9OT19XUkFQX0RJUgotI2luY2x1ZGUgImRpci5oIgotI2luY2x1ZGUgInV0Zi1jb252LmgiCisjaW5jbHVkZSAicG9zaXguaCIKIAogc3RhdGljIGludCBpbml0X2ZpbHRlcihjaGFyICpmaWx0ZXIsIHNpemVfdCBuLCBjb25zdCBjaGFyICpkaXIpCiB7CkBAIC0yNSwzNiArMjQsMzIgQEAKIAogZ2l0X19ESVIgKmdpdF9fb3BlbmRpcihjb25zdCBjaGFyICpkaXIpCiB7Ci0JY2hhciBmaWx0ZXJbR0lUX1dJTl9QQVRIXTsKLQl3Y2hhcl90IGZpbHRlcl93W0dJVF9XSU5fUEFUSF07CisJZ2l0X3dpbjMyX3BhdGhfYXNfdXRmOCBmaWx0ZXI7CisJZ2l0X3dpbjMyX3BhdGggZmlsdGVyX3c7CiAJZ2l0X19ESVIgKm5ldyA9IE5VTEw7CisJc2l6ZV90IGRpcmxlbjsKIAogCWlmICghZGlyIHx8ICFpbml0X2ZpbHRlcihmaWx0ZXIsIHNpemVvZihmaWx0ZXIpLCBkaXIpKQogCQlyZXR1cm4gTlVMTDsKIAotCW5ldyA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZigqbmV3KSk7CisJZGlybGVuID0gc3RybGVuKGRpcik7CisKKwluZXcgPSBnaXRfX2NhbGxvYyhzaXplb2YoKm5ldykgKyBkaXJsZW4gKyAxLCAxKTsKIAlpZiAoIW5ldykKIAkJcmV0dXJuIE5VTEw7CisJbWVtY3B5KG5ldy0+ZGlyLCBkaXIsIGRpcmxlbik7CiAKLQluZXctPmRpciA9IGdpdF9fc3RyZHVwKGRpcik7Ci0JaWYgKCFuZXctPmRpcikKLQkJZ290byBmYWlsOwotCi0JZ2l0X191dGY4X3RvXzE2KGZpbHRlcl93LCBHSVRfV0lOX1BBVEgsIGZpbHRlcik7CisJZ2l0X3dpbjMyX3BhdGhfZnJvbV9jKGZpbHRlcl93LCBmaWx0ZXIpOwogCW5ldy0+aCA9IEZpbmRGaXJzdEZpbGVXKGZpbHRlcl93LCAmbmV3LT5mKTsKIAogCWlmIChuZXctPmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJyVzJyIsIGRpcik7Ci0JCWdvdG8gZmFpbDsKKwkJZ2l0X19mcmVlKG5ldyk7CisJCXJldHVybiBOVUxMOwogCX0KIAogCW5ldy0+Zmlyc3QgPSAxOwogCXJldHVybiBuZXc7Ci0KLWZhaWw6Ci0JZ2l0X19mcmVlKG5ldy0+ZGlyKTsKLQlnaXRfX2ZyZWUobmV3KTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogaW50IGdpdF9fcmVhZGRpcl9leHQoCkBAIC04MCw3ICs3NSw3IEBACiAJaWYgKHdjc2xlbihkLT5mLmNGaWxlTmFtZSkgPj0gc2l6ZW9mKGVudHJ5LT5kX25hbWUpKQogCQlyZXR1cm4gLTE7CiAKLQlnaXRfX3V0ZjE2X3RvXzgoZW50cnktPmRfbmFtZSwgZC0+Zi5jRmlsZU5hbWUpOworCWdpdF93aW4zMl9wYXRoX3RvX2MoZW50cnktPmRfbmFtZSwgZC0+Zi5jRmlsZU5hbWUpOwogCWVudHJ5LT5kX2lubyA9IDA7CiAKIAkqcmVzdWx0ID0gZW50cnk7CkBAIC0xMDEsOCArOTYsOCBAQAogCiB2b2lkIGdpdF9fcmV3aW5kZGlyKGdpdF9fRElSICpkKQogewotCWNoYXIgZmlsdGVyW0dJVF9XSU5fUEFUSF07Ci0Jd2NoYXJfdCBmaWx0ZXJfd1tHSVRfV0lOX1BBVEhdOworCWdpdF93aW4zMl9wYXRoX2FzX3V0ZjggZmlsdGVyOworCWdpdF93aW4zMl9wYXRoIGZpbHRlcl93OwogCiAJaWYgKCFkKQogCQlyZXR1cm47CkBAIC0xMTYsNyArMTExLDcgQEAKIAlpZiAoIWluaXRfZmlsdGVyKGZpbHRlciwgc2l6ZW9mKGZpbHRlciksIGQtPmRpcikpCiAJCXJldHVybjsKIAotCWdpdF9fdXRmOF90b18xNihmaWx0ZXJfdywgR0lUX1dJTl9QQVRILCBmaWx0ZXIpOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhmaWx0ZXJfdywgZmlsdGVyKTsKIAlkLT5oID0gRmluZEZpcnN0RmlsZVcoZmlsdGVyX3csICZkLT5mKTsKIAogCWlmIChkLT5oID09IElOVkFMSURfSEFORExFX1ZBTFVFKQpAQCAtMTM0LDggKzEyOSw3IEBACiAJCUZpbmRDbG9zZShkLT5oKTsKIAkJZC0+aCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogCX0KLQlnaXRfX2ZyZWUoZC0+ZGlyKTsKLQlkLT5kaXIgPSBOVUxMOworCiAJZ2l0X19mcmVlKGQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL2Rpci5oIGIvc3JjL3dpbjMyL2Rpci5oCmluZGV4IDc2OTZkNDYuLjI0ZDQ4ZjYgMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi9kaXIuaAorKysgYi9zcmMvd2luMzIvZGlyLmgKQEAgLTExLDE1ICsxMSwxNSBAQAogCiBzdHJ1Y3QgZ2l0X19kaXJlbnQgewogCWludCBkX2lubzsKLQljaGFyIGRfbmFtZVsyNjFdOworCWdpdF93aW4zMl9wYXRoX2FzX3V0ZjggZF9uYW1lOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCUhBTkRMRSBoOwogCVdJTjMyX0ZJTkRfREFUQVcgZjsKIAlzdHJ1Y3QgZ2l0X19kaXJlbnQgZW50cnk7Ci0JY2hhciAqZGlyOwogCWludCBmaXJzdDsKKwljaGFyIGRpcltHSVRfRkxFWF9BUlJBWV07CiB9IGdpdF9fRElSOwogCiBleHRlcm4gZ2l0X19ESVIgKmdpdF9fb3BlbmRpcihjb25zdCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL2Vycm9yLmMgYi9zcmMvd2luMzIvZXJyb3IuYwppbmRleCBhNjJhMDdlLi5iYzU5OGFlIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvZXJyb3IuYworKysgYi9zcmMvd2luMzIvZXJyb3IuYwpAQCAtNDcsNyArNDcsNyBAQAogCQkoTFBXU1RSKSZscE1zZ0J1ZiwgMCwgTlVMTCkpIHsKIAogCQkvKiBJbnZhbGlkIGNvZGUgcG9pbnQgY2hlY2sgc3VwcG9ydGVkIG9uIFZpc3RhKyBvbmx5ICovCi0JCWlmIChnaXRfaGFzX3dpbjMyX3ZlcnNpb24oNiwgMCkpCisJCWlmIChnaXRfaGFzX3dpbjMyX3ZlcnNpb24oNiwgMCwgMCkpCiAJCQlkd0ZsYWdzID0gV0NfRVJSX0lOVkFMSURfQ0hBUlM7CiAJCWVsc2UKIAkJCWR3RmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL2ZpbmRmaWxlLmMgYi9zcmMvd2luMzIvZmluZGZpbGUuYwppbmRleCA1ZGQzZGUxLi5hOWU4MTJlIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvZmluZGZpbGUuYworKysgYi9zcmMvd2luMzIvZmluZGZpbGUuYwpAQCAtMjMsMTEgKzIzLDExIEBACiAJcmV0dXJuIHNfcm9vdC0+bGVuID8gMCA6IC0xOwogfQogCi1zdGF0aWMgaW50IHdpbjMyX3BhdGhfdXRmMTZfdG9fOChnaXRfYnVmICpwYXRoX3V0ZjgsIGNvbnN0IHdjaGFyX3QgKnBhdGhfdXRmMTYpCitzdGF0aWMgaW50IHdpbjMyX3BhdGhfdG9fOChnaXRfYnVmICpwYXRoX3V0ZjgsIGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAJY2hhciB0ZW1wX3V0ZjhbR0lUX1BBVEhfTUFYXTsKIAotCWdpdF9fdXRmMTZfdG9fOCh0ZW1wX3V0ZjgsIHBhdGhfdXRmMTYpOworCWdpdF9fdXRmMTZfdG9fOCh0ZW1wX3V0ZjgsIEdJVF9QQVRIX01BWCwgcGF0aCk7CiAJZ2l0X3BhdGhfbWtwb3NpeCh0ZW1wX3V0ZjgpOwogCiAJcmV0dXJuIGdpdF9idWZfc2V0cyhwYXRoX3V0ZjgsIHRlbXBfdXRmOCk7CkBAIC01Myw3ICs1Myw3IEBACiAJaWYgKCpmaWxlbmFtZSA9PSAnLycgfHwgKmZpbGVuYW1lID09ICdcXCcpCiAJCWZpbGVuYW1lKys7CiAKLQlnaXRfX3V0ZjhfdG9fMTYoZmlsZV91dGYxNiArIHJvb3QtPmxlbiAtIDEsIGFsbG9jX2xlbiwgZmlsZW5hbWUpOworCWdpdF9fdXRmOF90b18xNihmaWxlX3V0ZjE2ICsgcm9vdC0+bGVuIC0gMSwgYWxsb2NfbGVuIC0gcm9vdC0+bGVuLCBmaWxlbmFtZSk7CiAKIAkvKiBjaGVjayBhY2Nlc3MgKi8KIAlpZiAoX3dhY2Nlc3MoZmlsZV91dGYxNiwgRl9PSykgPCAwKSB7CkBAIC02MSw3ICs2MSw3IEBACiAJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCX0KIAotCXdpbjMyX3BhdGhfdXRmMTZfdG9fOChwYXRoLCBmaWxlX3V0ZjE2KTsKKwl3aW4zMl9wYXRoX3RvXzgocGF0aCwgZmlsZV91dGYxNik7CiAJZ2l0X19mcmVlKGZpbGVfdXRmMTYpOwogCiAJcmV0dXJuIDA7CkBAIC04Niw3ICs4Niw3IEBACiAJcmV0dXJuIChwYXRoICE9IGJhc2UpID8gcGF0aCA6IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgd2luMzJfZmluZF9naXRfaW5fcGF0aChnaXRfYnVmICpidWYsIGNvbnN0IHdjaGFyX3QgKmdpdGV4ZSkKK3N0YXRpYyBpbnQgd2luMzJfZmluZF9naXRfaW5fcGF0aChnaXRfYnVmICpidWYsIGNvbnN0IHdjaGFyX3QgKmdpdGV4ZSwgY29uc3Qgd2NoYXJfdCAqc3ViZGlyKQogewogCXdjaGFyX3QgKmVudiA9IF93Z2V0ZW52KEwiUEFUSCIpLCBsYXN0Y2g7CiAJc3RydWN0IGdpdF93aW4zMl9fcGF0aCByb290OwpAQCAtMTEwLDEwICsxMTAsMTAgQEAKIAkJd2NzY3B5KCZyb290LnBhdGhbcm9vdC5sZW5dLCBnaXRleGUpOwogCiAJCWlmIChfd2FjY2Vzcyhyb290LnBhdGgsIEZfT0spID09IDAgJiYgcm9vdC5sZW4gPiA1KSB7Ci0JCQkvKiByZXBsYWNlICJiaW5cXCIgb3IgImNtZFxcIiB3aXRoICJldGNcXCIgKi8KLQkJCXdjc2NweSgmcm9vdC5wYXRoW3Jvb3QubGVuIC0gNF0sIEwiZXRjXFwiKTsKKwkJCS8qIHJlcGxhY2UgImJpblxcIiBvciAiY21kXFwiIHdpdGggc3ViZGlyICovCisJCQl3Y3NjcHkoJnJvb3QucGF0aFtyb290LmxlbiAtIDRdLCBzdWJkaXIpOwogCi0JCQl3aW4zMl9wYXRoX3V0ZjE2X3RvXzgoYnVmLCByb290LnBhdGgpOworCQkJd2luMzJfcGF0aF90b184KGJ1Ziwgcm9vdC5wYXRoKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTIyLDcgKzEyMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgd2luMzJfZmluZF9naXRfaW5fcmVnaXN0cnkoCi0JZ2l0X2J1ZiAqYnVmLCBjb25zdCBIS0VZIGhpZXZlLCBjb25zdCB3Y2hhcl90ICprZXkpCisJZ2l0X2J1ZiAqYnVmLCBjb25zdCBIS0VZIGhpZXZlLCBjb25zdCB3Y2hhcl90ICprZXksIGNvbnN0IHdjaGFyX3QgKnN1YmRpcikKIHsKIAlIS0VZIGhLZXk7CiAJRFdPUkQgZHdUeXBlID0gUkVHX1NaOwpAQCAtMTMwLDkgKzEzMCw5IEBACiAKIAlhc3NlcnQoYnVmKTsKIAotCXBhdGgxNi5sZW4gPSAwOworCXBhdGgxNi5sZW4gPSBNQVhfUEFUSDsKIAotCWlmIChSZWdPcGVuS2V5RXhXKGhpZXZlLCBrZXksIDAsIEtFWV9BTExfQUNDRVNTLCAmaEtleSkgPT0gRVJST1JfU1VDQ0VTUykgeworCWlmIChSZWdPcGVuS2V5RXhXKGhpZXZlLCBrZXksIDAsIEtFWV9SRUFELCAmaEtleSkgPT0gRVJST1JfU1VDQ0VTUykgewogCQlpZiAoUmVnUXVlcnlWYWx1ZUV4VyhoS2V5LCBMIkluc3RhbGxMb2NhdGlvbiIsIE5VTEwsICZkd1R5cGUsCiAJCQkoTFBCWVRFKSZwYXRoMTYucGF0aCwgJnBhdGgxNi5sZW4pID09IEVSUk9SX1NVQ0NFU1MpCiAJCXsKQEAgLTE0MywxMCArMTQzLDEwIEBACiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQl3Y3NjYXQocGF0aDE2LnBhdGgsIEwiZXRjXFwiKTsKKwkJCXdjc2NhdChwYXRoMTYucGF0aCwgc3ViZGlyKTsKIAkJCXBhdGgxNi5sZW4gKz0gNDsKIAotCQkJd2luMzJfcGF0aF91dGYxNl90b184KGJ1ZiwgcGF0aDE2LnBhdGgpOworCQkJd2luMzJfcGF0aF90b184KGJ1ZiwgcGF0aDE2LnBhdGgpOwogCQl9CiAKIAkJUmVnQ2xvc2VLZXkoaEtleSk7CkBAIC0xNTYsNyArMTU2LDcgQEAKIH0KIAogc3RhdGljIGludCB3aW4zMl9maW5kX2V4aXN0aW5nX2RpcnMoCi0JZ2l0X2J1ZiAqb3V0LCBjb25zdCB3Y2hhcl90ICp0bXBsW10sIGNoYXIgKnRlbXBbXSkKKwlnaXRfYnVmICpvdXQsIGNvbnN0IHdjaGFyX3QgKnRtcGxbXSkKIHsKIAlzdHJ1Y3QgZ2l0X3dpbjMyX19wYXRoIHBhdGgxNjsKIAlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQkJcGF0aDE2LnBhdGhbMF0gIT0gTCclJyAmJgogCQkJIV93YWNjZXNzKHBhdGgxNi5wYXRoLCBGX09LKSkKIAkJewotCQkJd2luMzJfcGF0aF91dGYxNl90b184KCZidWYsIHBhdGgxNi5wYXRoKTsKKwkJCXdpbjMyX3BhdGhfdG9fOCgmYnVmLCBwYXRoMTYucGF0aCk7CiAKIAkJCWlmIChidWYuc2l6ZSkKIAkJCQlnaXRfYnVmX2pvaW4ob3V0LCBHSVRfUEFUSF9MSVNUX1NFUEFSQVRPUiwgb3V0LT5wdHIsIGJ1Zi5wdHIpOwpAQCAtMTgwLDI2ICsxODAsMjYgQEAKIAlyZXR1cm4gKGdpdF9idWZfb29tKG91dCkgPyAtMSA6IDApOwogfQogCi1pbnQgZ2l0X3dpbjMyX19maW5kX3N5c3RlbV9kaXJzKGdpdF9idWYgKm91dCkKK2ludCBnaXRfd2luMzJfX2ZpbmRfc3lzdGVtX2RpcnMoZ2l0X2J1ZiAqb3V0LCBjb25zdCB3Y2hhcl90ICpzdWJkaXIpCiB7CiAJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CiAKIAkvKiBkaXJlY3RvcmllcyB3aGVyZSBnaXQuZXhlICYgZ2l0LmNtZCBhcmUgZm91bmQgKi8KLQlpZiAoIXdpbjMyX2ZpbmRfZ2l0X2luX3BhdGgoJmJ1ZiwgTCJnaXQuZXhlIikgJiYgYnVmLnNpemUpCisJaWYgKCF3aW4zMl9maW5kX2dpdF9pbl9wYXRoKCZidWYsIEwiZ2l0LmV4ZSIsIHN1YmRpcikgJiYgYnVmLnNpemUpCiAJCWdpdF9idWZfc2V0KG91dCwgYnVmLnB0ciwgYnVmLnNpemUpOwogCWVsc2UKIAkJZ2l0X2J1Zl9jbGVhcihvdXQpOwogCi0JaWYgKCF3aW4zMl9maW5kX2dpdF9pbl9wYXRoKCZidWYsIEwiZ2l0LmNtZCIpICYmIGJ1Zi5zaXplKQorCWlmICghd2luMzJfZmluZF9naXRfaW5fcGF0aCgmYnVmLCBMImdpdC5jbWQiLCBzdWJkaXIpICYmIGJ1Zi5zaXplKQogCQlnaXRfYnVmX2pvaW4ob3V0LCBHSVRfUEFUSF9MSVNUX1NFUEFSQVRPUiwgb3V0LT5wdHIsIGJ1Zi5wdHIpOwogCiAJLyogZGlyZWN0b3JpZXMgd2hlcmUgZ2l0IGlzIGluc3RhbGxlZCBhY2NvcmRpbmcgdG8gcmVnaXN0cnkgKi8KIAlpZiAoIXdpbjMyX2ZpbmRfZ2l0X2luX3JlZ2lzdHJ5KAotCQkJJmJ1ZiwgSEtFWV9DVVJSRU5UX1VTRVIsIFJFR19NU1lTR0lUX0lOU1RBTExfTE9DQUwpICYmIGJ1Zi5zaXplKQorCQkJJmJ1ZiwgSEtFWV9DVVJSRU5UX1VTRVIsIFJFR19NU1lTR0lUX0lOU1RBTExfTE9DQUwsIHN1YmRpcikgJiYgYnVmLnNpemUpCiAJCWdpdF9idWZfam9pbihvdXQsIEdJVF9QQVRIX0xJU1RfU0VQQVJBVE9SLCBvdXQtPnB0ciwgYnVmLnB0cik7CiAKIAlpZiAoIXdpbjMyX2ZpbmRfZ2l0X2luX3JlZ2lzdHJ5KAotCQkJJmJ1ZiwgSEtFWV9MT0NBTF9NQUNISU5FLCBSRUdfTVNZU0dJVF9JTlNUQUxMKSAmJiBidWYuc2l6ZSkKKwkJCSZidWYsIEhLRVlfTE9DQUxfTUFDSElORSwgUkVHX01TWVNHSVRfSU5TVEFMTCwgc3ViZGlyKSAmJiBidWYuc2l6ZSkKIAkJZ2l0X2J1Zl9qb2luKG91dCwgR0lUX1BBVEhfTElTVF9TRVBBUkFUT1IsIG91dC0+cHRyLCBidWYucHRyKTsKIAogCWdpdF9idWZfZnJlZSgmYnVmKTsKQEAgLTIwOSw3ICsyMDksNiBAQAogCiBpbnQgZ2l0X3dpbjMyX19maW5kX2dsb2JhbF9kaXJzKGdpdF9idWYgKm91dCkKIHsKLQljaGFyICp0ZW1wWzNdOwogCXN0YXRpYyBjb25zdCB3Y2hhcl90ICpnbG9iYWxfdG1wbHNbNF0gPSB7CiAJCUwiJUhPTUUlXFwiLAogCQlMIiVIT01FRFJJVkUlJUhPTUVQQVRIJVxcIiwKQEAgLTIxNywxMiArMjE2LDExIEBACiAJCU5VTEwsCiAJfTsKIAotCXJldHVybiB3aW4zMl9maW5kX2V4aXN0aW5nX2RpcnMob3V0LCBnbG9iYWxfdG1wbHMsIHRlbXApOworCXJldHVybiB3aW4zMl9maW5kX2V4aXN0aW5nX2RpcnMob3V0LCBnbG9iYWxfdG1wbHMpOwogfQogCiBpbnQgZ2l0X3dpbjMyX19maW5kX3hkZ19kaXJzKGdpdF9idWYgKm91dCkKIHsKLQljaGFyICp0ZW1wWzZdOwogCXN0YXRpYyBjb25zdCB3Y2hhcl90ICpnbG9iYWxfdG1wbHNbN10gPSB7CiAJCUwiJVhER19DT05GSUdfSE9NRSVcXGdpdCIsCiAJCUwiJUFQUERBVEElXFxnaXQiLApAQCAtMjMzLDUgKzIzMSw1IEBACiAJCU5VTEwsCiAJfTsKIAotCXJldHVybiB3aW4zMl9maW5kX2V4aXN0aW5nX2RpcnMob3V0LCBnbG9iYWxfdG1wbHMsIHRlbXApOworCXJldHVybiB3aW4zMl9maW5kX2V4aXN0aW5nX2RpcnMob3V0LCBnbG9iYWxfdG1wbHMpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL2ZpbmRmaWxlLmggYi9zcmMvd2luMzIvZmluZGZpbGUuaAppbmRleCBmYzc5ZTFiLi4xMWJmN2U2IDEwMDY0NAotLS0gYS9zcmMvd2luMzIvZmluZGZpbGUuaAorKysgYi9zcmMvd2luMzIvZmluZGZpbGUuaApAQCAtMTksNyArMTksNyBAQAogZXh0ZXJuIGludCBnaXRfd2luMzJfX2ZpbmRfZmlsZSgKIAlnaXRfYnVmICpwYXRoLCBjb25zdCBzdHJ1Y3QgZ2l0X3dpbjMyX19wYXRoICpyb290LCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CiAKLWV4dGVybiBpbnQgZ2l0X3dpbjMyX19maW5kX3N5c3RlbV9kaXJzKGdpdF9idWYgKm91dCk7CitleHRlcm4gaW50IGdpdF93aW4zMl9fZmluZF9zeXN0ZW1fZGlycyhnaXRfYnVmICpvdXQsIGNvbnN0IHdjaGFyX3QgKnN1YnBhdGgpOwogZXh0ZXJuIGludCBnaXRfd2luMzJfX2ZpbmRfZ2xvYmFsX2RpcnMoZ2l0X2J1ZiAqb3V0KTsKIGV4dGVybiBpbnQgZ2l0X3dpbjMyX19maW5kX3hkZ19kaXJzKGdpdF9idWYgKm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9taW5ndy1jb21wYXQuaCBiL3NyYy93aW4zMi9taW5ndy1jb21wYXQuaAppbmRleCA3Yjk3YjQ4Li5mZTBhYmZiIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvbWluZ3ctY29tcGF0LmgKKysrIGIvc3JjL3dpbjMyL21pbmd3LWNvbXBhdC5oCkBAIC0xOSw2ICsxOSwxMSBAQAogIyBkZWZpbmUgU19JRkxOSyBfU19JRkxOSwogIyBkZWZpbmUgU19JU0xOSyhtKSAoKChtKSAmIF9TX0lGTVQpID09IF9TX0lGTE5LKQogCitHSVRfSU5MSU5FKHNpemVfdCkgcF9zdHJubGVuKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pIHsKKwljb25zdCBjaGFyICplbmQgPSBtZW1jaHIocywgMCwgbWF4bGVuKTsKKwlyZXR1cm4gZW5kID8gKHNpemVfdCkoZW5kIC0gcykgOiBtYXhsZW47Cit9CisKICNlbmRpZgogCiAjZW5kaWYgLyogSU5DTFVERV9taW5nd19jb21wYXRfXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL3Bvc2l4LmggYi9zcmMvd2luMzIvcG9zaXguaAppbmRleCBjNDljMjE3Li4yNGNiYTIzIDEwMDY0NAotLS0gYS9zcmMvd2luMzIvcG9zaXguaAorKysgYi9zcmMvd2luMzIvcG9zaXguaApAQCAtOCw3ICs4LDE2IEBACiAjZGVmaW5lIElOQ0xVREVfcG9zaXhfX3czMl9oX18KIAogI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIi4uL3Bvc2l4LmgiCiAjaW5jbHVkZSAidXRmLWNvbnYuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworLyogZGVmaW5lIHNvbWUgc3RhbmRhcmQgZXJybm9zIHRoYXQgdGhlIHJ1bnRpbWUgbWF5IGJlIG1pc3NpbmcuICBmb3IgZXhhbXBsZSwKKyAqIG1pbmd3IGxhY2tzIEVBRk5PU1VQUE9SVC4gKi8KKworI2lmbmRlZiBFQUZOT1NVUFBPUlQKKyMgZGVmaW5lIEVBRk5PU1VQUE9SVCAoSU5UX01BWC0xKQorI2VuZGlmCiAKIEdJVF9JTkxJTkUoaW50KSBwX2xpbmsoY29uc3QgY2hhciAqb2xkLCBjb25zdCBjaGFyICpuZXcpCiB7CkBAIC0yMCw5ICsyOSw5IEBACiAKIEdJVF9JTkxJTkUoaW50KSBwX21rZGlyKGNvbnN0IGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKQogewotCXdjaGFyX3QgYnVmW0dJVF9XSU5fUEFUSF07CisJZ2l0X3dpbjMyX3BhdGggYnVmOwogCUdJVF9VTlVTRUQobW9kZSk7Ci0JZ2l0X191dGY4X3RvXzE2KGJ1ZiwgR0lUX1dJTl9QQVRILCBwYXRoKTsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2MoYnVmLCBwYXRoKTsKIAlyZXR1cm4gX3dta2RpcihidWYpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvcG9zaXhfdzMyLmMgYi9zcmMvd2luMzIvcG9zaXhfdzMyLmMKaW5kZXggZjA0OTc0NC4uMThmNzE3YiAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL3Bvc2l4X3czMi5jCisrKyBiL3NyYy93aW4zMi9wb3NpeF93MzIuYwpAQCAtMTYsOCArMTYsOCBAQAogCiBpbnQgcF91bmxpbmsoY29uc3QgY2hhciAqcGF0aCkKIHsKLQl3Y2hhcl90IGJ1ZltHSVRfV0lOX1BBVEhdOwotCWdpdF9fdXRmOF90b18xNihidWYsIEdJVF9XSU5fUEFUSCwgcGF0aCk7CisJZ2l0X3dpbjMyX3BhdGggYnVmOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhidWYsIHBhdGgpOwogCV93Y2htb2QoYnVmLCAwNjY2KTsKIAlyZXR1cm4gX3d1bmxpbmsoYnVmKTsKIH0KQEAgLTU5LDEwICs1OSwxMSBAQAogCWNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IHBvc2l4X2Vub3RkaXIpCiB7CiAJV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBmZGF0YTsKLQl3Y2hhcl90IGZidWZbR0lUX1dJTl9QQVRIXSwgbGFzdGNoOworCWdpdF93aW4zMl9wYXRoIGZidWY7CisJd2NoYXJfdCBsYXN0Y2g7CiAJaW50IGZsZW47CiAKLQlmbGVuID0gZ2l0X191dGY4X3RvXzE2KGZidWYsIEdJVF9XSU5fUEFUSCwgZmlsZV9uYW1lKTsKKwlmbGVuID0gZ2l0X3dpbjMyX3BhdGhfZnJvbV9jKGZidWYsIGZpbGVfbmFtZSk7CiAKIAkvKiB0cnVuY2F0ZSB0cmFpbGluZyBzbGFzaGVzICovCiAJZm9yICg7IGZsZW4gPiAwOyAtLWZsZW4pIHsKQEAgLTkwLDYgKzkxLDkgQEAKIAkJaWYgKGZkYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKQogCQkJZk1vZGUgfD0gU19JRkxOSzsKIAorCQlpZiAoKGZNb2RlICYgKFNfSUZESVIgfCBTX0lGTE5LKSkgPT0gKFNfSUZESVIgfCBTX0lGTE5LKSkgLy8ganVuY3Rpb24KKwkJCWZNb2RlIF49IFNfSUZMTks7CisKIAkJYnVmLT5zdF9pbm8gPSAwOwogCQlidWYtPnN0X2dpZCA9IDA7CiAJCWJ1Zi0+c3RfdWlkID0gMDsKQEAgLTEwNSwxMCArMTA5LDEwIEBACiAJCSAqIHRoZSBsZW5ndGggb2YgdGhlIHBhdGggcG9pbnRlZCB0bywgd2hpY2ggd2UgZXhwZWN0IGV2ZXJ5d2hlcmUgZWxzZQogCQkgKi8KIAkJaWYgKFNfSVNMTksoZk1vZGUpKSB7Ci0JCQljaGFyIHRhcmdldFtHSVRfV0lOX1BBVEhdOworCQkJZ2l0X3dpbjMyX3BhdGhfYXNfdXRmOCB0YXJnZXQ7CiAJCQlpbnQgcmVhZGxpbmtfcmVzdWx0OwogCi0JCQlyZWFkbGlua19yZXN1bHQgPSBwX3JlYWRsaW5rKGZpbGVfbmFtZSwgdGFyZ2V0LCBHSVRfV0lOX1BBVEgpOworCQkJcmVhZGxpbmtfcmVzdWx0ID0gcF9yZWFkbGluayhmaWxlX25hbWUsIHRhcmdldCwgc2l6ZW9mKHRhcmdldCkpOwogCiAJCQlpZiAocmVhZGxpbmtfcmVzdWx0ID09IC0xKQogCQkJCXJldHVybiAtMTsKQEAgLTEyMSw4ICsxMjUsOCBAQAogCiAJZXJybm8gPSBFTk9FTlQ7CiAKLQkvKiBXZSBuZWVkIFBPU0lYIGJlaGF2aW9yLCB0aGVuIEVOT1RESVIgbXVzdCBzZXQgd2hlbiBhbnkgb2YgdGhlIGZvbGRlcnMgaW4gdGhlCi0JICogZmlsZSBwYXRoIGlzIGEgcmVndWxhciBmaWxlLG90aGVyd2lzZSBFTk9FTlQgbXVzdCBiZSBzZXQuCisJLyogVG8gbWF0Y2ggUE9TSVggYmVoYXZpb3IsIHNldCBFTk9URElSIHdoZW4gYW55IG9mIHRoZSBmb2xkZXJzIGluIHRoZQorCSAqIGZpbGUgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSwgb3RoZXJ3aXNlIHNldCBFTk9FTlQuCiAJICovCiAJaWYgKHBvc2l4X2Vub3RkaXIpIHsKIAkJLyogc2NhbiB1cCBwYXRoIHVudGlsIHdlIGZpbmQgYW4gZXhpc3RpbmcgaXRlbSAqLwpAQCAtMTU2LDEzICsxNjAsMjIgQEAKIAlyZXR1cm4gZG9fbHN0YXQoZmlsZW5hbWUsIGJ1ZiwgMSk7CiB9CiAKKworLyoKKyAqIFBhcnRzIG9mIHRoZSBUaGUgcF9yZWFkbGluayBmdW5jdGlvbiBhcmUgaGVhdmlseSBpbnNwaXJlZCBieSB0aGUgcGhwIAorICogcmVhZGxpbmsgZnVuY3Rpb24gaW4gbGlua193aW4zMi5jCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAxMiBUaGUgUEhQIEdyb3VwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEZvciBkZXRhaWxzIG9mIHRoZSBQSFAgbGljZW5zZSBzZWUgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wMS50eHQKKyAqLwogaW50IHBfcmVhZGxpbmsoY29uc3QgY2hhciAqbGluaywgY2hhciAqdGFyZ2V0LCBzaXplX3QgdGFyZ2V0X2xlbikKIHsKIAl0eXBlZGVmIERXT1JEIChXSU5BUEkgKmZwYXRoX2Z1bmMpKEhBTkRMRSwgTFBXU1RSLCBEV09SRCwgRFdPUkQpOwogCXN0YXRpYyBmcGF0aF9mdW5jIHBHZXRGaW5hbFBhdGggPSBOVUxMOwogCUhBTkRMRSBoRmlsZTsKIAlEV09SRCBkd1JldDsKLQl3Y2hhcl90IGxpbmtfd1tHSVRfV0lOX1BBVEhdOworCWdpdF93aW4zMl9wYXRoIGxpbmtfdzsKIAl3Y2hhcl90KiB0YXJnZXRfdzsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC0xODUsNyArMTk4LDcgQEAKIAkJfQogCX0KIAotCWdpdF9fdXRmOF90b18xNihsaW5rX3csIEdJVF9XSU5fUEFUSCwgbGluayk7CisJZ2l0X3dpbjMyX3BhdGhfZnJvbV9jKGxpbmtfdywgbGluayk7CiAKIAloRmlsZSA9IENyZWF0ZUZpbGVXKGxpbmtfdywJCQkvLyBmaWxlIHRvIG9wZW4KIAkJCUdFTkVSSUNfUkVBRCwJCQkvLyBvcGVuIGZvciByZWFkaW5nCkBAIC0yNTEsMTAgKzI2NCwxMCBAQAogCiBpbnQgcF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgLi4uKQogewotCXdjaGFyX3QgYnVmW0dJVF9XSU5fUEFUSF07CisJZ2l0X3dpbjMyX3BhdGggYnVmOwogCW1vZGVfdCBtb2RlID0gMDsKIAotCWdpdF9fdXRmOF90b18xNihidWYsIEdJVF9XSU5fUEFUSCwgcGF0aCk7CisJZ2l0X3dpbjMyX3BhdGhfZnJvbV9jKGJ1ZiwgcGF0aCk7CiAKIAlpZiAoZmxhZ3MgJiBPX0NSRUFUKSB7CiAJCXZhX2xpc3QgYXJnX2xpc3Q7CkBAIC0yNjksOCArMjgyLDggQEAKIAogaW50IHBfY3JlYXQoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCiB7Ci0Jd2NoYXJfdCBidWZbR0lUX1dJTl9QQVRIXTsKLQlnaXRfX3V0ZjhfdG9fMTYoYnVmLCBHSVRfV0lOX1BBVEgsIHBhdGgpOworCWdpdF93aW4zMl9wYXRoIGJ1ZjsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2MoYnVmLCBwYXRoKTsKIAlyZXR1cm4gX3dvcGVuKGJ1ZiwgX09fV1JPTkxZIHwgX09fQ1JFQVQgfCBfT19UUlVOQyB8IF9PX0JJTkFSWSwgbW9kZSk7CiB9CiAKQEAgLTI5Niw3ICszMDksNyBAQAogCiBpbnQgcF9zdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCBzdGF0KiBidWYpCiB7Ci0JY2hhciB0YXJnZXRbR0lUX1dJTl9QQVRIXTsKKwlnaXRfd2luMzJfcGF0aF9hc191dGY4IHRhcmdldDsKIAlpbnQgZXJyb3IgPSAwOwogCiAJZXJyb3IgPSBkb19sc3RhdChwYXRoLCBidWYsIDApOwpAQCAtMzA0LDcgKzMxNyw3IEBACiAJLyogV2UgbmVlZCBub3QgZG8gdGhpcyBpbiBhIGxvb3AgdG8gdW53aW5kIGNoYWlucyBvZiBzeW1saW5rcyBzaW5jZQogCSAqIHBfcmVhZGxpbmsgY2FsbHMgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIHdoaWNoIGRvZXMgaXQgZm9yIHVzLiAqLwogCWlmIChlcnJvciA+PSAwICYmIFNfSVNMTksoYnVmLT5zdF9tb2RlKSAmJgotCQkoZXJyb3IgPSBwX3JlYWRsaW5rKHBhdGgsIHRhcmdldCwgR0lUX1dJTl9QQVRIKSkgPj0gMCkKKwkJKGVycm9yID0gcF9yZWFkbGluayhwYXRoLCB0YXJnZXQsIHNpemVvZih0YXJnZXQpKSkgPj0gMCkKIAkJZXJyb3IgPSBkb19sc3RhdCh0YXJnZXQsIGJ1ZiwgMCk7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0zMTIsMjMgKzMyNSwyMyBAQAogCiBpbnQgcF9jaGRpcihjb25zdCBjaGFyKiBwYXRoKQogewotCXdjaGFyX3QgYnVmW0dJVF9XSU5fUEFUSF07Ci0JZ2l0X191dGY4X3RvXzE2KGJ1ZiwgR0lUX1dJTl9QQVRILCBwYXRoKTsKKwlnaXRfd2luMzJfcGF0aCBidWY7CisJZ2l0X3dpbjMyX3BhdGhfZnJvbV9jKGJ1ZiwgcGF0aCk7CiAJcmV0dXJuIF93Y2hkaXIoYnVmKTsKIH0KIAogaW50IHBfY2htb2QoY29uc3QgY2hhciogcGF0aCwgbW9kZV90IG1vZGUpCiB7Ci0Jd2NoYXJfdCBidWZbR0lUX1dJTl9QQVRIXTsKLQlnaXRfX3V0ZjhfdG9fMTYoYnVmLCBHSVRfV0lOX1BBVEgsIHBhdGgpOworCWdpdF93aW4zMl9wYXRoIGJ1ZjsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2MoYnVmLCBwYXRoKTsKIAlyZXR1cm4gX3djaG1vZChidWYsIG1vZGUpOwogfQogCiBpbnQgcF9ybWRpcihjb25zdCBjaGFyKiBwYXRoKQogewogCWludCBlcnJvcjsKLQl3Y2hhcl90IGJ1ZltHSVRfV0lOX1BBVEhdOwotCWdpdF9fdXRmOF90b18xNihidWYsIEdJVF9XSU5fUEFUSCwgcGF0aCk7CisJZ2l0X3dpbjMyX3BhdGggYnVmOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhidWYsIHBhdGgpOwogCiAJZXJyb3IgPSBfd3JtZGlyKGJ1Zik7CiAKQEAgLTM0NCwyNCArMzU3LDI0IEBACiAKIGludCBwX2hpZGVfZGlyZWN0b3J5X193MzIoY29uc3QgY2hhciAqcGF0aCkKIHsKLQl3Y2hhcl90IGJ1ZltHSVRfV0lOX1BBVEhdOwotCWdpdF9fdXRmOF90b18xNihidWYsIEdJVF9XSU5fUEFUSCwgcGF0aCk7CisJZ2l0X3dpbjMyX3BhdGggYnVmOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhidWYsIHBhdGgpOwogCXJldHVybiAoU2V0RmlsZUF0dHJpYnV0ZXNXKGJ1ZiwgRklMRV9BVFRSSUJVVEVfSElEREVOKSAhPSAwKSA/IDAgOiAtMTsKIH0KIAogY2hhciAqcF9yZWFscGF0aChjb25zdCBjaGFyICpvcmlnX3BhdGgsIGNoYXIgKmJ1ZmZlcikKIHsKIAlpbnQgcmV0OwotCXdjaGFyX3Qgb3JpZ19wYXRoX3dbR0lUX1dJTl9QQVRIXTsKLQl3Y2hhcl90IGJ1ZmZlcl93W0dJVF9XSU5fUEFUSF07CisJZ2l0X3dpbjMyX3BhdGggb3JpZ19wYXRoX3c7CisJZ2l0X3dpbjMyX3BhdGggYnVmZmVyX3c7CiAKLQlnaXRfX3V0ZjhfdG9fMTYob3JpZ19wYXRoX3csIEdJVF9XSU5fUEFUSCwgb3JpZ19wYXRoKTsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2Mob3JpZ19wYXRoX3csIG9yaWdfcGF0aCk7CiAKIAkvKiBJbXBsaWNpdGx5IHVzZSBHZXRDdXJyZW50RGlyZWN0b3J5IHdoaWNoIGNhbiBiZSBhIHRocmVhZGluZyBpc3N1ZSAqLwotCXJldCA9IEdldEZ1bGxQYXRoTmFtZVcob3JpZ19wYXRoX3csIEdJVF9XSU5fUEFUSCwgYnVmZmVyX3csIE5VTEwpOworCXJldCA9IEdldEZ1bGxQYXRoTmFtZVcob3JpZ19wYXRoX3csIEdJVF9XSU5fUEFUSF9VVEYxNiwgYnVmZmVyX3csIE5VTEwpOwogCiAJLyogQWNjb3JkaW5nIHRvIE1TRE4sIGEgcmV0dXJuIHZhbHVlIGVxdWFscyB0byB6ZXJvIG1lYW5zIGEgZmFpbHVyZS4gKi8KLQlpZiAocmV0ID09IDAgfHwgcmV0ID4gR0lUX1dJTl9QQVRIKQorCWlmIChyZXQgPT0gMCB8fCByZXQgPiBHSVRfV0lOX1BBVEhfVVRGMTYpCiAJCWJ1ZmZlciA9IE5VTEw7CiAKIAllbHNlIGlmIChHZXRGaWxlQXR0cmlidXRlc1coYnVmZmVyX3cpID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CkBAIC00NDUsMTggKzQ1OCwxOCBAQAogCiBpbnQgcF9hY2Nlc3MoY29uc3QgY2hhciogcGF0aCwgbW9kZV90IG1vZGUpCiB7Ci0Jd2NoYXJfdCBidWZbR0lUX1dJTl9QQVRIXTsKLQlnaXRfX3V0ZjhfdG9fMTYoYnVmLCBHSVRfV0lOX1BBVEgsIHBhdGgpOworCWdpdF93aW4zMl9wYXRoIGJ1ZjsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2MoYnVmLCBwYXRoKTsKIAlyZXR1cm4gX3dhY2Nlc3MoYnVmLCBtb2RlKTsKIH0KIAogaW50IHBfcmVuYW1lKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQogewotCXdjaGFyX3Qgd2Zyb21bR0lUX1dJTl9QQVRIXTsKLQl3Y2hhcl90IHd0b1tHSVRfV0lOX1BBVEhdOworCWdpdF93aW4zMl9wYXRoIHdmcm9tOworCWdpdF93aW4zMl9wYXRoIHd0bzsKIAotCWdpdF9fdXRmOF90b18xNih3ZnJvbSwgR0lUX1dJTl9QQVRILCBmcm9tKTsKLQlnaXRfX3V0ZjhfdG9fMTYod3RvLCBHSVRfV0lOX1BBVEgsIHRvKTsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2Mod2Zyb20sIGZyb20pOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyh3dG8sIHRvKTsKIAlyZXR1cm4gTW92ZUZpbGVFeFcod2Zyb20sIHd0bywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORyB8IE1PVkVGSUxFX0NPUFlfQUxMT1dFRCkgPyAwIDogLTE7CiB9CiAKQEAgLTUwNSw5NCArNTE4LDQwIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX01TQ19FWFRFTlNJT05TKQotI2RlZmluZSBERUxUQV9FUE9DSF9JTl9NSUNST1NFQ1MgIDExNjQ0NDczNjAwMDAwMDAwVWk2NAotI2Vsc2UKLSNkZWZpbmUgREVMVEFfRVBPQ0hfSU5fTUlDUk9TRUNTICAxMTY0NDQ3MzYwMDAwMDAwMFVMTAotI2VuZGlmCi0gCi0jaWZuZGVmIF9USU1FWk9ORV9ERUZJTkVECi0jZGVmaW5lIF9USU1FWk9ORV9ERUZJTkVECi1zdHJ1Y3QgdGltZXpvbmUgCitpbnQgcF9pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKIHsKLQlpbnQgIHR6X21pbnV0ZXN3ZXN0OyAvKiBtaW51dGVzIFcgb2YgR3JlZW53aWNoICovCi0JaW50ICB0el9kc3R0aW1lOyAgICAgLyogdHlwZSBvZiBkc3QgY29ycmVjdGlvbiAqLwotfTsKLSNlbmRpZgorCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNpbjsKKwl2b2lkICphZGRyOworCWludCBzaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSwgYWRkcl9sZW47CisJaW50IGVycm9yID0gMDsKIAotaW50IHBfZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eikKLXsKLQlGSUxFVElNRSBmdDsKLQl1bnNpZ25lZCBfX2ludDY0IHRtcHJlcyA9IDA7Ci0Jc3RhdGljIGludCB0emZsYWc7Ci0KLQlpZiAoTlVMTCAhPSB0dikKLQl7Ci0JCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7Ci0KLQkJdG1wcmVzIHw9IGZ0LmR3SGlnaERhdGVUaW1lOwotCQl0bXByZXMgPDw9IDMyOwotCQl0bXByZXMgfD0gZnQuZHdMb3dEYXRlVGltZTsKLQotCQkvKmNvbnZlcnRpbmcgZmlsZSB0aW1lIHRvIHVuaXggZXBvY2gqLwotCQl0bXByZXMgLz0gMTA7ICAvKmNvbnZlcnQgaW50byBtaWNyb3NlY29uZHMqLwotCQl0bXByZXMgLT0gREVMVEFfRVBPQ0hfSU5fTUlDUk9TRUNTOwotCQl0di0+dHZfc2VjID0gKGxvbmcpKHRtcHJlcyAvIDEwMDAwMDBVTCk7Ci0JCXR2LT50dl91c2VjID0gKGxvbmcpKHRtcHJlcyAlIDEwMDAwMDBVTCk7Ci0JfQotCi0JaWYgKE5VTEwgIT0gdHopCi0JewotCQkgaWYgKCF0emZsYWcpCi0JCXsKLQkJCV90enNldCgpOwotCQkJdHpmbGFnKys7Ci0JCX0KLQkJdHotPnR6X21pbnV0ZXN3ZXN0ID0gX3RpbWV6b25lIC8gNjA7Ci0JCXR6LT50el9kc3R0aW1lID0gX2RheWxpZ2h0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgcF9pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyKiBzcmMsIHZvaWQqIGRzdCkKLXsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKLQkJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKLQl9IHNhOwotCWludCBzcmNzaXplOwotCi0Jc3dpdGNoKGFmKQotCXsKLQkJY2FzZSBBRl9JTkVUOgotCQkJc2Euc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQkJc3Jjc2l6ZSA9IChpbnQpc2l6ZW9mKHNhLnNpbik7Ci0JCWJyZWFrOwotCQljYXNlIEFGX0lORVQ2OgotCQkJc2Euc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQkJc3Jjc2l6ZSA9IChpbnQpc2l6ZW9mKHNhLnNpbjYpOwotCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycm5vID0gV1NBRVBGTk9TVVBQT1JUOwotCQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChXU0FTdHJpbmdUb0FkZHJlc3MoKExQU1RSKXNyYywgYWYsIE5VTEwsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhLCAmc3Jjc2l6ZSkgIT0gMCkKLQl7Ci0JCWVycm5vID0gV1NBR2V0TGFzdEVycm9yKCk7CisJaWYgKGFmID09IEFGX0lORVQpIHsKKwkJYWRkciA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzaW4pLT5zaW5fYWRkcjsKKwkJYWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworCX0gZWxzZSBpZiAoYWYgPT0gQUZfSU5FVDYpIHsKKwkJYWRkciA9ICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc2luKS0+c2luNl9hZGRyOworCQlhZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworCX0gZWxzZSB7CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOwogCQlyZXR1cm4gLTE7CiAJfQogCi0Jc3dpdGNoKGFmKQotCXsKLQkJY2FzZSBBRl9JTkVUOgotCQkJbWVtY3B5KGRzdCwgJnNhLnNpbi5zaW5fYWRkciwgc2l6ZW9mKHNhLnNpbi5zaW5fYWRkcikpOwotCQlicmVhazsKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCW1lbWNweShkc3QsICZzYS5zaW42LnNpbjZfYWRkciwgc2l6ZW9mKHNhLnNpbjYuc2luNl9hZGRyKSk7Ci0JCWJyZWFrOworCWlmICgoZXJyb3IgPSBXU0FTdHJpbmdUb0FkZHJlc3NBKChMUFNUUilzcmMsIGFmLCBOVUxMLCAoTFBTT0NLQUREUikmc2luLCAmc2luX2xlbikpID09IDApIHsKKwkJbWVtY3B5KGRzdCwgYWRkciwgYWRkcl9sZW4pOworCQlyZXR1cm4gMTsKIAl9CiAKLQlyZXR1cm4gMTsKKwlzd2l0Y2goV1NBR2V0TGFzdEVycm9yKCkpIHsKKwljYXNlIFdTQUVJTlZBTDoKKwkJcmV0dXJuIDA7CisJY2FzZSBXU0FFRkFVTFQ6CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gLTE7CisJY2FzZSBXU0FfTk9UX0VOT1VHSF9NRU1PUlk6CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gLTE7CisJfQorCisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL3ByZWNvbXBpbGVkLmggYi9zcmMvd2luMzIvcHJlY29tcGlsZWQuaAppbmRleCA1ZGU3ZTZmLi5jYmZlOTg4IDEwMDY0NAotLS0gYS9zcmMvd2luMzIvcHJlY29tcGlsZWQuaAorKysgYi9zcmMvd2luMzIvcHJlY29tcGlsZWQuaApAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlICJnaXQyLmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtNiw2ICs3LDggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9wdGhyZWFkLmMgYi9zcmMvd2luMzIvcHRocmVhZC5jCmluZGV4IDJmMjYzYjMuLmRiODkyNzQgMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi9wdGhyZWFkLmMKKysrIGIvc3JjL3dpbjMyL3B0aHJlYWQuYwpAQCAtNiw2ICs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicHRocmVhZC5oIgorI2luY2x1ZGUgIi4uL2dsb2JhbC5oIgogCiBpbnQgcHRocmVhZF9jcmVhdGUoCiAJcHRocmVhZF90ICpHSVRfUkVTVFJJQ1QgdGhyZWFkLApAQCAtMTI3LDkgKzEyOCwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IGlzIG5vdCBpbXBsZW1lbnRlZCBiZWNhdXNlIGRvaW5nIHNvIHdpdGgganVzdCBXaW4zMiBldmVudHMKLSAqIGlzIHF1aXRlIGNvbXBsaWNhdGVkLCBhbmQgbm8gY2FsbGVyIGluIGxpYmdpdDIgdXNlcyBpdCB5ZXQuICovCi0KKy8qIHB0aHJlYWRfY29uZF9icm9hZGNhc3QgaXMgbm90IGltcGxlbWVudGVkIGJlY2F1c2UgZG9pbmcgc28gd2l0aCBqdXN0CisgKiBXaW4zMiBldmVudHMgaXMgcXVpdGUgY29tcGxpY2F0ZWQsIGFuZCBubyBjYWxsZXIgaW4gbGliZ2l0MiB1c2VzIGl0CisgKiB5ZXQuCisgKi8KIGludCBwdGhyZWFkX251bV9wcm9jZXNzb3JzX25wKHZvaWQpCiB7CiAJRFdPUkRfUFRSIHAsIHM7CkBAIC0xNDIsMyArMTQ0LDExMSBAQAogCXJldHVybiBuID8gbiA6IDE7CiB9CiAKKworc3RhdGljIEhJTlNUQU5DRSB3aW4zMl9rZXJuZWwzMl9kbGw7CisKK3R5cGVkZWYgdm9pZCAoV0lOQVBJICp3aW4zMl9zcndsb2NrX2ZuKShHSVRfU1JXTE9DSyAqKTsKKworc3RhdGljIHdpbjMyX3Nyd2xvY2tfZm4gd2luMzJfc3J3bG9ja19pbml0aWFsaXplOworc3RhdGljIHdpbjMyX3Nyd2xvY2tfZm4gd2luMzJfc3J3bG9ja19hY3F1aXJlX3NoYXJlZDsKK3N0YXRpYyB3aW4zMl9zcndsb2NrX2ZuIHdpbjMyX3Nyd2xvY2tfcmVsZWFzZV9zaGFyZWQ7CitzdGF0aWMgd2luMzJfc3J3bG9ja19mbiB3aW4zMl9zcndsb2NrX2FjcXVpcmVfZXhjbHVzaXZlOworc3RhdGljIHdpbjMyX3Nyd2xvY2tfZm4gd2luMzJfc3J3bG9ja19yZWxlYXNlX2V4Y2x1c2l2ZTsKKworaW50IHB0aHJlYWRfcndsb2NrX2luaXQoCisJcHRocmVhZF9yd2xvY2tfdCAqR0lUX1JFU1RSSUNUIGxvY2ssCisJY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKkdJVF9SRVNUUklDVCBhdHRyKQoreworCSh2b2lkKWF0dHI7CisKKwlpZiAod2luMzJfc3J3bG9ja19pbml0aWFsaXplKQorCQl3aW4zMl9zcndsb2NrX2luaXRpYWxpemUoJmxvY2stPm5hdGl2ZS5zcndsKTsKKwllbHNlCisJCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJmxvY2stPm5hdGl2ZS5jc2VjKTsKKworCXJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKmxvY2spCit7CisJaWYgKHdpbjMyX3Nyd2xvY2tfYWNxdWlyZV9zaGFyZWQpCisJCXdpbjMyX3Nyd2xvY2tfYWNxdWlyZV9zaGFyZWQoJmxvY2stPm5hdGl2ZS5zcndsKTsKKwllbHNlCisJCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZsb2NrLT5uYXRpdmUuY3NlYyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfcndsb2NrX3JkdW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKmxvY2spCit7CisJaWYgKHdpbjMyX3Nyd2xvY2tfcmVsZWFzZV9zaGFyZWQpCisJCXdpbjMyX3Nyd2xvY2tfcmVsZWFzZV9zaGFyZWQoJmxvY2stPm5hdGl2ZS5zcndsKTsKKwllbHNlCisJCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZsb2NrLT5uYXRpdmUuY3NlYyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190ICpsb2NrKQoreworCWlmICh3aW4zMl9zcndsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKQorCQl3aW4zMl9zcndsb2NrX2FjcXVpcmVfZXhjbHVzaXZlKCZsb2NrLT5uYXRpdmUuc3J3bCk7CisJZWxzZQorCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmbG9jay0+bmF0aXZlLmNzZWMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX3J3bG9ja193cnVubG9jayhwdGhyZWFkX3J3bG9ja190ICpsb2NrKQoreworCWlmICh3aW4zMl9zcndsb2NrX3JlbGVhc2VfZXhjbHVzaXZlKQorCQl3aW4zMl9zcndsb2NrX3JlbGVhc2VfZXhjbHVzaXZlKCZsb2NrLT5uYXRpdmUuc3J3bCk7CisJZWxzZQorCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmbG9jay0+bmF0aXZlLmNzZWMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95KHB0aHJlYWRfcndsb2NrX3QgKmxvY2spCit7CisJaWYgKCF3aW4zMl9zcndsb2NrX2luaXRpYWxpemUpCisJCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmbG9jay0+bmF0aXZlLmNzZWMpOworCWdpdF9fbWVtemVybyhsb2NrLCBzaXplb2YoKmxvY2spKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB3aW4zMl9wdGhyZWFkX3NodXRkb3duKHZvaWQpCit7CisJaWYgKHdpbjMyX2tlcm5lbDMyX2RsbCkgeworCQlGcmVlTGlicmFyeSh3aW4zMl9rZXJuZWwzMl9kbGwpOworCQl3aW4zMl9rZXJuZWwzMl9kbGwgPSBOVUxMOworCX0KK30KKworaW50IHdpbjMyX3B0aHJlYWRfaW5pdGlhbGl6ZSh2b2lkKQoreworCWlmICh3aW4zMl9rZXJuZWwzMl9kbGwpCisJCXJldHVybiAwOworCisJd2luMzJfa2VybmVsMzJfZGxsID0gTG9hZExpYnJhcnkoIktlcm5lbDMyLmRsbCIpOworCWlmICghd2luMzJfa2VybmVsMzJfZGxsKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiQ291bGQgbm90IGxvYWQgS2VybmVsMzIuZGxsISIpOworCQlyZXR1cm4gLTE7CisJfQorCisJd2luMzJfc3J3bG9ja19pbml0aWFsaXplID0gKHdpbjMyX3Nyd2xvY2tfZm4pCisJCUdldFByb2NBZGRyZXNzKHdpbjMyX2tlcm5lbDMyX2RsbCwgIkluaXRpYWxpemVTUldMb2NrIik7CisJd2luMzJfc3J3bG9ja19hY3F1aXJlX3NoYXJlZCA9ICh3aW4zMl9zcndsb2NrX2ZuKQorCQlHZXRQcm9jQWRkcmVzcyh3aW4zMl9rZXJuZWwzMl9kbGwsICJBY3F1aXJlU1JXTG9ja1NoYXJlZCIpOworCXdpbjMyX3Nyd2xvY2tfcmVsZWFzZV9zaGFyZWQgPSAod2luMzJfc3J3bG9ja19mbikKKwkJR2V0UHJvY0FkZHJlc3Mod2luMzJfa2VybmVsMzJfZGxsLCAiUmVsZWFzZVNSV0xvY2tTaGFyZWQiKTsKKwl3aW4zMl9zcndsb2NrX2FjcXVpcmVfZXhjbHVzaXZlID0gKHdpbjMyX3Nyd2xvY2tfZm4pCisJCUdldFByb2NBZGRyZXNzKHdpbjMyX2tlcm5lbDMyX2RsbCwgIkFjcXVpcmVTUldMb2NrRXhjbHVzaXZlIik7CisJd2luMzJfc3J3bG9ja19yZWxlYXNlX2V4Y2x1c2l2ZSA9ICh3aW4zMl9zcndsb2NrX2ZuKQorCQlHZXRQcm9jQWRkcmVzcyh3aW4zMl9rZXJuZWwzMl9kbGwsICJSZWxlYXNlU1JXTG9ja0V4Y2x1c2l2ZSIpOworCisJZ2l0X19vbl9zaHV0ZG93bih3aW4zMl9wdGhyZWFkX3NodXRkb3duKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL3dpbjMyL3B0aHJlYWQuaCBiL3NyYy93aW4zMi9wdGhyZWFkLmgKaW5kZXggODI3N2VjZi4uYWY1YjEyMSAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL3B0aHJlYWQuaAorKysgYi9zcmMvd2luMzIvcHRocmVhZC5oCkBAIC0xOSwyMiArMTksMzQgQEAKIHR5cGVkZWYgaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CiB0eXBlZGVmIGludCBwdGhyZWFkX2NvbmRhdHRyX3Q7CiB0eXBlZGVmIGludCBwdGhyZWFkX2F0dHJfdDsKK3R5cGVkZWYgaW50IHB0aHJlYWRfcndsb2NrYXR0cl90OworCiB0eXBlZGVmIENSSVRJQ0FMX1NFQ1RJT04gcHRocmVhZF9tdXRleF90OwogdHlwZWRlZiBIQU5ETEUgcHRocmVhZF90OwogdHlwZWRlZiBIQU5ETEUgcHRocmVhZF9jb25kX3Q7CiAKLSNkZWZpbmUgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiB7KHZvaWQqKS0xfTsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqUHRyOyB9IEdJVF9TUldMT0NLOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5pb24geworCQlHSVRfU1JXTE9DSyBzcndsOworCQlDUklUSUNBTF9TRUNUSU9OIGNzZWM7CisJfSBuYXRpdmU7Cit9IHB0aHJlYWRfcndsb2NrX3Q7CisKKyNkZWZpbmUgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiAgeyh2b2lkKiktMX0KIAogaW50IHB0aHJlYWRfY3JlYXRlKAotCXB0aHJlYWRfdCAqR0lUX1JFU1RSSUNULAotCWNvbnN0IHB0aHJlYWRfYXR0cl90ICpHSVRfUkVTVFJJQ1QsCisJcHRocmVhZF90ICpHSVRfUkVTVFJJQ1QgdGhyZWFkLAorCWNvbnN0IHB0aHJlYWRfYXR0cl90ICpHSVRfUkVTVFJJQ1QgYXR0ciwKIAl2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKSwKLQl2b2lkICpfX3Jlc3RyaWN0KTsKKwl2b2lkICpHSVRfUkVTVFJJQ1QgYXJnKTsKIAogaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QsIHZvaWQgKiopOwogCiBpbnQgcHRocmVhZF9tdXRleF9pbml0KAotCXB0aHJlYWRfbXV0ZXhfdCAqR0lUX1JFU1RSSUNULCBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpHSVRfUkVTVFJJQ1QpOworCXB0aHJlYWRfbXV0ZXhfdCAqR0lUX1JFU1RSSUNUIG11dGV4LAorCWNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKkdJVF9SRVNUUklDVCBtdXRleGF0dHIpOwogaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKik7CiBpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKIGludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKik7CkBAIC00Nyw0ICs1OSwxNSBAQAogCiBpbnQgcHRocmVhZF9udW1fcHJvY2Vzc29yc19ucCh2b2lkKTsKIAoraW50IHB0aHJlYWRfcndsb2NrX2luaXQoCisJcHRocmVhZF9yd2xvY2tfdCAqR0lUX1JFU1RSSUNUIGxvY2ssCisJY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKkdJVF9SRVNUUklDVCBhdHRyKTsKK2ludCBwdGhyZWFkX3J3bG9ja19yZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsKK2ludCBwdGhyZWFkX3J3bG9ja19yZHVubG9jayhwdGhyZWFkX3J3bG9ja190ICopOworaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190ICopOworaW50IHB0aHJlYWRfcndsb2NrX3dydW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CitpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhyZWFkX3J3bG9ja190ICopOworCitleHRlcm4gaW50IHdpbjMyX3B0aHJlYWRfaW5pdGlhbGl6ZSh2b2lkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvdXRmLWNvbnYuYyBiL3NyYy93aW4zMi91dGYtY29udi5jCmluZGV4IGMwNmYzYTguLmQ0ZGJmYmEgMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi91dGYtY29udi5jCisrKyBiL3NyYy93aW4zMi91dGYtY29udi5jCkBAIC03MCwxMiArNzAsMTIgQEAKIH0KICNlbmRpZgogCi1pbnQgZ2l0X191dGY4X3RvXzE2KHdjaGFyX3QgKmRlc3QsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKnNyYykKK2ludCBnaXRfX3V0ZjhfdG9fMTYod2NoYXJfdCAqIGRlc3QsIHNpemVfdCBkZXN0X3NpemUsIGNvbnN0IGNoYXIgKnNyYykKIHsKLQlyZXR1cm4gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBzcmMsIC0xLCBkZXN0LCAoaW50KWxlbmd0aCk7CisJcmV0dXJuIE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfVVRGOCwgMCwgc3JjLCAtMSwgZGVzdCwgKGludClkZXN0X3NpemUpOwogfQogCi1pbnQgZ2l0X191dGYxNl90b184KGNoYXIgKm91dCwgY29uc3Qgd2NoYXJfdCAqaW5wdXQpCitpbnQgZ2l0X191dGYxNl90b184KGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0X3NpemUsIGNvbnN0IHdjaGFyX3QgKnNyYykKIHsKLQlyZXR1cm4gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCBpbnB1dCwgLTEsIG91dCwgR0lUX1dJTl9QQVRILCBOVUxMLCBOVUxMKTsKKwlyZXR1cm4gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCBzcmMsIC0xLCBkZXN0LCAoaW50KWRlc3Rfc2l6ZSwgTlVMTCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvd2luMzIvdXRmLWNvbnYuaCBiL3NyYy93aW4zMi91dGYtY29udi5oCmluZGV4IDZjYzkyMDUuLjNhZjc3NTggMTAwNjQ0Ci0tLSBhL3NyYy93aW4zMi91dGYtY29udi5oCisrKyBiL3NyYy93aW4zMi91dGYtY29udi5oCkBAIC00LDE2ICs0LDM1IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJnaXQyLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdQTCB2MiB3aXRoCiAgKiBhIExpbmtpbmcgRXhjZXB0aW9uLiBGb3IgZnVsbCB0ZXJtcyBzZWUgdGhlIGluY2x1ZGVkIENPUFlJTkcgZmlsZS4KICAqLwotCi0jaW5jbHVkZSA8d2NoYXIuaD4KLQogI2lmbmRlZiBJTkNMVURFX2dpdF91dGZjb252X2hfXwogI2RlZmluZSBJTkNMVURFX2dpdF91dGZjb252X2hfXwogCi0jZGVmaW5lIEdJVF9XSU5fUEFUSCAoMjYwICsgMSkKKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgogCi1pbnQgZ2l0X191dGY4X3RvXzE2KHdjaGFyX3QgKmRlc3QsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKnNyYyk7Ci1pbnQgZ2l0X191dGYxNl90b184KGNoYXIgKmRlc3QsIGNvbnN0IHdjaGFyX3QgKnNyYyk7CisvKiBNYXhpbXVtIGNoYXJhY3RlcnMgaW4gYSBXaW5kb3dzIHBhdGggcGx1cyBvbmUgZm9yIE5VTCBieXRlICovCisjZGVmaW5lIEdJVF9XSU5fUEFUSF9VVEYxNiAoMjYwICsgMSkKKworLyogTWF4aW11bSBieXRlcyBuZWNlc3NhcnkgdG8gY29udmVydCBhIGZ1bGwtbGVuZ3RoIFVURjE2IHBhdGggdG8gVVRGOCAqLworI2RlZmluZSBHSVRfV0lOX1BBVEhfVVRGOCAgKDI2MCAqIDQgKyAxKQorCit0eXBlZGVmIHdjaGFyX3QgZ2l0X3dpbjMyX3BhdGhbR0lUX1dJTl9QQVRIX1VURjE2XTsKKwordHlwZWRlZiBjaGFyIGdpdF93aW4zMl9wYXRoX2FzX3V0ZjhbR0lUX1dJTl9QQVRIX1VURjhdOworCisvKiBkZXN0X3NpemUgaXMgdGhlIHNpemUgb2YgZGVzdCBpbiB3Y2hhcl90J3MgKi8KK2ludCBnaXRfX3V0ZjhfdG9fMTYod2NoYXJfdCAqIGRlc3QsIHNpemVfdCBkZXN0X3NpemUsIGNvbnN0IGNoYXIgKnNyYyk7CisvKiBkZXN0X3NpemUgaXMgdGhlIHNpemUgb2YgZGVzdCBpbiBjaGFyJ3MgKi8KK2ludCBnaXRfX3V0ZjE2X3RvXzgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3Rfc2l6ZSwgY29uc3Qgd2NoYXJfdCAqc3JjKTsKKworR0lUX0lOTElORShpbnQpIGdpdF93aW4zMl9wYXRoX2Zyb21fYyhnaXRfd2luMzJfcGF0aCBkZXN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJcmV0dXJuIGdpdF9fdXRmOF90b18xNihkZXN0LCBHSVRfV0lOX1BBVEhfVVRGMTYsIHNyYyk7Cit9CisKK0dJVF9JTkxJTkUoaW50KSBnaXRfd2luMzJfcGF0aF90b19jKGdpdF93aW4zMl9wYXRoX2FzX3V0ZjggZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjKQoreworCXJldHVybiBnaXRfX3V0ZjE2X3RvXzgoZGVzdCwgR0lUX1dJTl9QQVRIX1VURjgsIHNyYyk7Cit9CiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvdmVyc2lvbi5oIGIvc3JjL3dpbjMyL3ZlcnNpb24uaAppbmRleCA0ODM5NjJiLi43OTY2NzY5IDEwMDY0NAotLS0gYS9zcmMvd2luMzIvdmVyc2lvbi5oCisrKyBiL3NyYy93aW4zMi92ZXJzaW9uLmgKQEAgLTksMTIgKzksMjkgQEAKIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAotR0lUX0lOTElORShpbnQpIGdpdF9oYXNfd2luMzJfdmVyc2lvbihpbnQgbWFqb3IsIGludCBtaW5vcikKK0dJVF9JTkxJTkUoaW50KSBnaXRfaGFzX3dpbjMyX3ZlcnNpb24oaW50IG1ham9yLCBpbnQgbWlub3IsIGludCBzZXJ2aWNlX3BhY2spCiB7Ci0JV09SRCB3VmVyc2lvbiA9IExPV09SRChHZXRWZXJzaW9uKCkpOworCU9TVkVSU0lPTklORk9FWCB2ZXJzaW9uX3Rlc3QgPSB7MH07CisJRFdPUkQgdmVyc2lvbl90ZXN0X21hc2s7CisJRFdPUkRMT05HIHZlcnNpb25fY29uZGl0aW9uX21hc2sgPSAwOworCQorCXZlcnNpb25fdGVzdC5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKE9TVkVSU0lPTklORk9FWCk7CisJdmVyc2lvbl90ZXN0LmR3TWFqb3JWZXJzaW9uID0gbWFqb3I7CisJdmVyc2lvbl90ZXN0LmR3TWlub3JWZXJzaW9uID0gbWlub3I7CisJdmVyc2lvbl90ZXN0LndTZXJ2aWNlUGFja01ham9yID0gKFdPUkQpc2VydmljZV9wYWNrOworCXZlcnNpb25fdGVzdC53U2VydmljZVBhY2tNaW5vciA9IDA7CiAKLQlyZXR1cm4gTE9CWVRFKHdWZXJzaW9uKSA+IG1ham9yIHx8Ci0JCShMT0JZVEUod1ZlcnNpb24pID09IG1ham9yICYmIEhJQllURSh3VmVyc2lvbikgPj0gbWlub3IpOworCXZlcnNpb25fdGVzdF9tYXNrID0gKFZFUl9NQUpPUlZFUlNJT04gfCBWRVJfTUlOT1JWRVJTSU9OIHwgVkVSX1NFUlZJQ0VQQUNLTUFKT1IgfCBWRVJfU0VSVklDRVBBQ0tNSU5PUik7CisKKwlWRVJfU0VUX0NPTkRJVElPTih2ZXJzaW9uX2NvbmRpdGlvbl9tYXNrLCBWRVJfTUFKT1JWRVJTSU9OLCBWRVJfR1JFQVRFUl9FUVVBTCk7CisJVkVSX1NFVF9DT05ESVRJT04odmVyc2lvbl9jb25kaXRpb25fbWFzaywgVkVSX01JTk9SVkVSU0lPTiwgVkVSX0dSRUFURVJfRVFVQUwpOworCVZFUl9TRVRfQ09ORElUSU9OKHZlcnNpb25fY29uZGl0aW9uX21hc2ssIFZFUl9TRVJWSUNFUEFDS01BSk9SLCBWRVJfR1JFQVRFUl9FUVVBTCk7CisJVkVSX1NFVF9DT05ESVRJT04odmVyc2lvbl9jb25kaXRpb25fbWFzaywgVkVSX1NFUlZJQ0VQQUNLTUlOT1IsIFZFUl9HUkVBVEVSX0VRVUFMKTsKKworCWlmICghVmVyaWZ5VmVyc2lvbkluZm8oJnZlcnNpb25fdGVzdCwgdmVyc2lvbl90ZXN0X21hc2ssIHZlcnNpb25fY29uZGl0aW9uX21hc2spKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY2hlY2tvdXQvY2hlY2tvdXRfaGVscGVycy5oIGIvdGVzdHMtY2xhci9jaGVja291dC9jaGVja291dF9oZWxwZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOGRhMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci9jaGVja291dC9jaGVja291dF9oZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaW5jbHVkZSAiYnVmZmVyLmgiCi0jaW5jbHVkZSAiZ2l0Mi9vYmplY3QuaCIKLSNpbmNsdWRlICJnaXQyL3JlcG9zaXRvcnkuaCIKLQotZXh0ZXJuIHZvaWQgc3RyaXBfY3JfZnJvbV9idWYoZ2l0X2J1ZiAqYnVmKTsKLWV4dGVybiB2b2lkIGFzc2VydF9vbl9icmFuY2goZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmJyYW5jaCk7Ci1leHRlcm4gdm9pZCByZXNldF9pbmRleF90b190cmVlaXNoKGdpdF9vYmplY3QgKnRyZWVpc2gpOwotCi1leHRlcm4gdm9pZCBjaGVja19maWxlX2NvbnRlbnRzX2F0X2xpbmUoCi0JY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZXhwZWN0ZWQsCi0JY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1zZyk7Ci0KLWV4dGVybiB2b2lkIGNoZWNrX2ZpbGVfY29udGVudHNfbm9jcl9hdF9saW5lKAotCWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmV4cGVjdGVkLAotCWNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptc2cpOwotCi0jZGVmaW5lIGNoZWNrX2ZpbGVfY29udGVudHMoUEFUSCxFWFApIFwKLQljaGVja19maWxlX2NvbnRlbnRzX2F0X2xpbmUoUEFUSCxFWFAsX19GSUxFX18sX19MSU5FX18sIlN0cmluZyBtaXNtYXRjaDogIiAjRVhQICIgIT0gIiAjUEFUSCkKLQotI2RlZmluZSBjaGVja19maWxlX2NvbnRlbnRzX25vY3IoUEFUSCxFWFApIFwKLQljaGVja19maWxlX2NvbnRlbnRzX25vY3JfYXRfbGluZShQQVRILEVYUCxfX0ZJTEVfXyxfX0xJTkVfXywiU3RyaW5nIG1pc21hdGNoOiAiICNFWFAgIiAhPSAiICNQQVRIKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50IG5fY29uZmxpY3RzOwotCWludCBuX2RpcnR5OwotCWludCBuX3VwZGF0ZXM7Ci0JaW50IG5fdW50cmFja2VkOwotCWludCBuX2lnbm9yZWQ7Ci0JaW50IGRlYnVnOwotfSBjaGVja291dF9jb3VudHM7Ci0KLWV4dGVybiBpbnQgY2hlY2tvdXRfY291bnRfY2FsbGJhY2soCi0JZ2l0X2NoZWNrb3V0X25vdGlmeV90IHdoeSwKLQljb25zdCBjaGFyICpwYXRoLAotCWNvbnN0IGdpdF9kaWZmX2ZpbGUgKmJhc2VsaW5lLAotCWNvbnN0IGdpdF9kaWZmX2ZpbGUgKnRhcmdldCwKLQljb25zdCBnaXRfZGlmZl9maWxlICp3b3JrZGlyLAotCXZvaWQgKnBheWxvYWQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jaGVja291dC9jcmxmLmMgYi90ZXN0cy1jbGFyL2NoZWNrb3V0L2NybGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1YjFmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL2NoZWNrb3V0L2NybGYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0jaW5jbHVkZSAiY2hlY2tvdXRfaGVscGVycy5oIgotCi0jaW5jbHVkZSAiZ2l0Mi9jaGVja291dC5oIgotI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKLQotI2RlZmluZSBVVEY4X0JPTSAiXHhFRlx4QkJceEJGIgotI2RlZmluZSBBTExfQ1JMRl9URVhUX1JBVwkiY3JsZlxyXG5jcmxmXHJcbmNybGZcclxuY3JsZlxyXG4iCi0jZGVmaW5lIEFMTF9MRl9URVhUX1JBVwkJImxmXG5sZlxubGZcbmxmXG5sZlxuIgotI2RlZmluZSBNT1JFX0NSTEZfVEVYVF9SQVcJImNybGZcclxuY3JsZlxyXG5sZlxuY3JsZlxyXG5jcmxmXHJcbiIKLSNkZWZpbmUgTU9SRV9MRl9URVhUX1JBVwkibGZcbmxmXG5jcmxmXHJcbmxmXG5sZlxuIgotCi0jZGVmaW5lIEFMTF9MRl9URVhUX0FTX0NSTEYJCSJsZlxyXG5sZlxyXG5sZlxyXG5sZlxyXG5sZlxyXG4iCi0jZGVmaW5lIE1PUkVfQ1JMRl9URVhUX0FTX0NSTEYJImNybGZcclxuY3JsZlxyXG5sZlxyXG5jcmxmXHJcbmNybGZcclxuIgotI2RlZmluZSBNT1JFX0xGX1RFWFRfQVNfQ1JMRgkibGZcclxubGZcclxuY3JsZlxyXG5sZlxyXG5sZlxyXG4iCi0KLXN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvOwotCi12b2lkIHRlc3RfY2hlY2tvdXRfY3JsZl9faW5pdGlhbGl6ZSh2b2lkKQotewotCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImNybGYiKTsKLX0KLQotdm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX2NsZWFudXAodm9pZCkKLXsKLQljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Ci19Ci0KLXZvaWQgdGVzdF9jaGVja291dF9jcmxmX19kZXRlY3RfY3JsZl9hdXRvY3JsZl9mYWxzZSh2b2lkKQotewotCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOwotCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEU7Ci0KLQljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCBmYWxzZSk7Ci0KLQlnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKTsKLQotCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9hbGwtbGYiLCBBTExfTEZfVEVYVF9SQVcpOwotCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9hbGwtY3JsZiIsIEFMTF9DUkxGX1RFWFRfUkFXKTsKLX0KLQotdm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX2F1dG9jcmxmX2ZhbHNlX2luZGV4X3NpemVfaXNfdW5maWx0ZXJlZF9zaXplKHZvaWQpCi17Ci0JZ2l0X2luZGV4ICppbmRleDsKLQljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OwotCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOwotCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEU7Ci0KLQljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCBmYWxzZSk7Ci0KLQlnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKTsKLQotCWdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKTsKLQotCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgImFsbC1sZiIsIDApKSAhPSBOVUxMKTsKLQljbF9hc3NlcnQoZW50cnktPmZpbGVfc2l6ZSA9PSBzdHJsZW4oQUxMX0xGX1RFWFRfUkFXKSk7Ci0KLQljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhbGwtY3JsZiIsIDApKSAhPSBOVUxMKTsKLQljbF9hc3NlcnQoZW50cnktPmZpbGVfc2l6ZSA9PSBzdHJsZW4oQUxMX0NSTEZfVEVYVF9SQVcpKTsKLQotCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKLX0KLQotdm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX2RldGVjdF9jcmxmX2F1dG9jcmxmX3RydWUodm9pZCkKLXsKLQlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKLQlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkVfQ1JFQVRFOwotCi0JY2xfcmVwb19zZXRfYm9vbChnX3JlcG8sICJjb3JlLmF1dG9jcmxmIiwgdHJ1ZSk7Ci0KLQlnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKTsKLQotCWlmIChHSVRfRU9MX05BVElWRSA9PSBHSVRfRU9MX0xGKQotCQljaGVja19maWxlX2NvbnRlbnRzKCIuL2NybGYvYWxsLWxmIiwgQUxMX0xGX1RFWFRfUkFXKTsKLQllbHNlCi0JCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9hbGwtbGYiLCBBTExfTEZfVEVYVF9BU19DUkxGKTsKLQotCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9hbGwtY3JsZiIsIEFMTF9DUkxGX1RFWFRfUkFXKTsKLX0KLQotdm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX21vcmVfbGZfYXV0b2NybGZfdHJ1ZSh2b2lkKQotewotCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOwotCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEU7Ci0KLQljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCB0cnVlKTsKLQotCWdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpOwotCi0JaWYgKEdJVF9FT0xfTkFUSVZFID09IEdJVF9FT0xfTEYpCi0JCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9tb3JlLWxmIiwgTU9SRV9MRl9URVhUX1JBVyk7Ci0JZWxzZQotCQljaGVja19maWxlX2NvbnRlbnRzKCIuL2NybGYvbW9yZS1sZiIsIE1PUkVfTEZfVEVYVF9BU19DUkxGKTsKLX0KLQotdm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX21vcmVfY3JsZl9hdXRvY3JsZl90cnVlKHZvaWQpCi17Ci0JZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7Ci0Jb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKLQotCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIHRydWUpOwotCi0JZ2l0X2NoZWNrb3V0X2hlYWQoZ19yZXBvLCAmb3B0cyk7Ci0KLQlpZiAoR0lUX0VPTF9OQVRJVkUgPT0gR0lUX0VPTF9MRikKLQkJY2hlY2tfZmlsZV9jb250ZW50cygiLi9jcmxmL21vcmUtY3JsZiIsIE1PUkVfQ1JMRl9URVhUX1JBVyk7Ci0JZWxzZQotCQljaGVja19maWxlX2NvbnRlbnRzKCIuL2NybGYvbW9yZS1jcmxmIiwgTU9SRV9DUkxGX1RFWFRfQVNfQ1JMRik7Ci19Ci0KLXZvaWQgdGVzdF9jaGVja291dF9jcmxmX19hbGxfY3JsZl9hdXRvY3JsZl90cnVlKHZvaWQpCi17Ci0JZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7Ci0Jb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKLQotCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIHRydWUpOwotCi0JZ2l0X2NoZWNrb3V0X2hlYWQoZ19yZXBvLCAmb3B0cyk7Ci0KLQljaGVja19maWxlX2NvbnRlbnRzKCIuL2NybGYvYWxsLWNybGYiLCBBTExfQ1JMRl9URVhUX1JBVyk7Ci19Ci0KLXZvaWQgdGVzdF9jaGVja291dF9jcmxmX19hdXRvY3JsZl90cnVlX2luZGV4X3NpemVfaXNfZmlsdGVyZWRfc2l6ZSh2b2lkKQotewotCWdpdF9pbmRleCAqaW5kZXg7Ci0JY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKLQlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKLQlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkVfQ1JFQVRFOwotCi0JY2xfcmVwb19zZXRfYm9vbChnX3JlcG8sICJjb3JlLmF1dG9jcmxmIiwgdHJ1ZSk7Ci0KLQlnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKTsKLQotCWdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKTsKLQotCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgImFsbC1sZiIsIDApKSAhPSBOVUxMKTsKLQotCWlmIChHSVRfRU9MX05BVElWRSA9PSBHSVRfRU9MX0xGKQotCQljbF9hc3NlcnRfZXF1YWxfc3ooc3RybGVuKEFMTF9MRl9URVhUX1JBVyksIGVudHJ5LT5maWxlX3NpemUpOwotCWVsc2UKLQkJY2xfYXNzZXJ0X2VxdWFsX3N6KHN0cmxlbihBTExfTEZfVEVYVF9BU19DUkxGKSwgZW50cnktPmZpbGVfc2l6ZSk7Ci0KLQljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhbGwtY3JsZiIsIDApKSAhPSBOVUxMKTsKLQljbF9hc3NlcnRfZXF1YWxfc3ooc3RybGVuKEFMTF9DUkxGX1RFWFRfUkFXKSwgZW50cnktPmZpbGVfc2l6ZSk7Ci0KLQlnaXRfaW5kZXhfZnJlZShpbmRleCk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NsYXJfbGliZ2l0Mi5oIGIvdGVzdHMtY2xhci9jbGFyX2xpYmdpdDIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZjZjQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL2NsYXJfbGliZ2l0Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotI2lmbmRlZiBfX0NMQVJfTElCR0lUMl9fCi0jZGVmaW5lIF9fQ0xBUl9MSUJHSVQyX18KLQotI2luY2x1ZGUgImNsYXIuaCIKLSNpbmNsdWRlIDxnaXQyLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLS8qKgotICogUmVwbGFjZSBmb3IgYGNsYXJfbXVzdF9wYXNzYCB0aGF0IHBhc3NlcyB0aGUgbGFzdCBsaWJyYXJ5IGVycm9yIGFzIHRoZQotICogdGVzdCBmYWlsdXJlIG1lc3NhZ2UuCi0gKgotICogVXNlIHRoaXMgd3JhcHBlciBhcm91bmQgYWxsIGBnaXRfYCBsaWJyYXJ5IGNhbGxzIHRoYXQgcmV0dXJuIGVycm9yIGNvZGVzIQotICovCi0jZGVmaW5lIGNsX2dpdF9wYXNzKGV4cHIpIGRvIHsgXAotCWludCBfbGcyX2Vycm9yOyBcCi0JZ2l0ZXJyX2NsZWFyKCk7IFwKLQlpZiAoKF9sZzJfZXJyb3IgPSAoZXhwcikpICE9IDApIFwKLQkJY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKF9sZzJfZXJyb3IsIF9fRklMRV9fLCBfX0xJTkVfXywgIkZ1bmN0aW9uIGNhbGwgZmFpbGVkOiAiICNleHByKTsgXAotCX0gd2hpbGUgKDApCi0KLS8qKgotICogV3JhcHBlciBmb3IgYGNsYXJfbXVzdF9mYWlsYCAtLSB0aGlzIG9uZSBpcwotICoganVzdCBmb3IgY29uc2lzdGVuY3kuIFVzZSB3aXRoIGBnaXRfYCBsaWJyYXJ5Ci0gKiBjYWxscyB0aGF0IGFyZSBzdXBwb3NlZCB0byBmYWlsIQotICovCi0jZGVmaW5lIGNsX2dpdF9mYWlsKGV4cHIpIGNsX211c3RfZmFpbChleHByKQotCi0jZGVmaW5lIGNsX2dpdF9mYWlsX3dpdGgoZXhwciwgZXJyb3IpIGNsX2Fzc2VydF9lcXVhbF9pKGVycm9yLGV4cHIpCi0KLXZvaWQgY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7Ci0KLSNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX3N6KHN6MSxzejIpIGNsX2Fzc2VydF9lcXVhbF9pKChpbnQpc3oxLCAoaW50KShzejIpKQotCi0vKgotICogU29tZSB1dGlsaXR5IG1hY3JvcyBmb3IgYnVpbGRpbmcgbG9uZyBzdHJpbmdzCi0gKi8KLSNkZWZpbmUgUkVQNChTVFIpCSBTVFIgU1RSIFNUUiBTVFIKLSNkZWZpbmUgUkVQMTUoU1RSKQkgUkVQNChTVFIpIFJFUDQoU1RSKSBSRVA0KFNUUikgU1RSIFNUUiBTVFIKLSNkZWZpbmUgUkVQMTYoU1RSKQkgUkVQNChSRVA0KFNUUikpCi0jZGVmaW5lIFJFUDI1NihTVFIpICBSRVAxNihSRVAxNihTVFIpKQotI2RlZmluZSBSRVAxMDI0KFNUUikgUkVQNChSRVAyNTYoU1RSKSkKLQotLyogV3JpdGUgdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyIHRvIGRpc2sgKi8KLXZvaWQgY2xfZ2l0X21rZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqY29udGVudCk7Ci12b2lkIGNsX2dpdF9hcHBlbmQyZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbmV3X2NvbnRlbnQpOwotdm9pZCBjbF9naXRfcmV3cml0ZWZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19jb250ZW50KTsKLXZvaWQgY2xfZ2l0X3dyaXRlMmZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19jb250ZW50LCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBtb2RlKTsKLQotYm9vbCBjbF90b2dnbGVfZmlsZW1vZGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOwotYm9vbCBjbF9pc19jaG1vZF9zdXBwb3J0ZWQodm9pZCk7Ci0KLS8qIEVudmlyb25tZW50IHdyYXBwZXJzICovCi1jaGFyICpjbF9nZXRlbnYoY29uc3QgY2hhciAqbmFtZSk7Ci1pbnQgY2xfc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKLQotLyogUmVsaWFibGUgcmVuYW1lICovCi1pbnQgY2xfcmVuYW1lKGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqZGVzdCk7Ci0KLS8qIEdpdCBzYW5kYm94IHNldHVwIGhlbHBlcnMgKi8KLQotZ2l0X3JlcG9zaXRvcnkgKmNsX2dpdF9zYW5kYm94X2luaXQoY29uc3QgY2hhciAqc2FuZGJveCk7Ci12b2lkIGNsX2dpdF9zYW5kYm94X2NsZWFudXAodm9pZCk7Ci1naXRfcmVwb3NpdG9yeSAqY2xfZ2l0X3NhbmRib3hfcmVvcGVuKHZvaWQpOwotCi0vKiBMb2NhbC1yZXBvIHVybCBoZWxwZXJzICovCi1jb25zdCBjaGFyKiBjbF9naXRfZml4dHVyZV91cmwoY29uc3QgY2hhciAqZml4dHVyZW5hbWUpOwotY29uc3QgY2hhciogY2xfZ2l0X3BhdGhfdXJsKGNvbnN0IGNoYXIgKnBhdGgpOwotCi0vKiBUZXN0IHJlcG9zaXRvcnkgY2xlYW5lciAqLwotaW50IGNsX2dpdF9yZW1vdmVfcGxhY2Vob2xkZXJzKGNvbnN0IGNoYXIgKmRpcmVjdG9yeV9wYXRoLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci0KLS8qIGNvbmZpZyBzZXR0aW5nIGhlbHBlcnMgKi8KLXZvaWQgY2xfcmVwb19zZXRfYm9vbChnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqY2ZnLCBpbnQgdmFsdWUpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY2xvbmUvbm9uZXR3b3JrLmMgYi90ZXN0cy1jbGFyL2Nsb25lL25vbmV0d29yay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzliMWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvY2xvbmUvbm9uZXR3b3JrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgotCi0jaW5jbHVkZSAiZ2l0Mi9jbG9uZS5oIgotI2luY2x1ZGUgInJlbW90ZS5oIgotI2luY2x1ZGUgImZpbGVvcHMuaCIKLSNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCi0KLSNkZWZpbmUgTElWRV9SRVBPX1VSTCAiZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL1Rlc3RHaXRSZXBvc2l0b3J5IgotCi1zdGF0aWMgZ2l0X2Nsb25lX29wdGlvbnMgZ19vcHRpb25zOwotc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87Ci1zdGF0aWMgZ2l0X3JlZmVyZW5jZSogZ19yZWY7Ci1zdGF0aWMgZ2l0X3JlbW90ZSogZ19yZW1vdGU7Ci0KLXZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2luaXRpYWxpemUodm9pZCkKLXsKLQlnaXRfY2hlY2tvdXRfb3B0cyBkdW1teV9vcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKLQotCWdfcmVwbyA9IE5VTEw7Ci0KLQltZW1zZXQoJmdfb3B0aW9ucywgMCwgc2l6ZW9mKGdpdF9jbG9uZV9vcHRpb25zKSk7Ci0JZ19vcHRpb25zLnZlcnNpb24gPSBHSVRfQ0xPTkVfT1BUSU9OU19WRVJTSU9OOwotCWdfb3B0aW9ucy5jaGVja291dF9vcHRzID0gZHVtbXlfb3B0czsKLQlnX29wdGlvbnMuY2hlY2tvdXRfb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jbGVhbnVwKHZvaWQpCi17Ci0JaWYgKGdfcmVwbykgewotCQlnaXRfcmVwb3NpdG9yeV9mcmVlKGdfcmVwbyk7Ci0JCWdfcmVwbyA9IE5VTEw7Ci0JfQotCi0JaWYgKGdfcmVmKSB7Ci0JCWdpdF9yZWZlcmVuY2VfZnJlZShnX3JlZik7Ci0JCWdfcmVmID0gTlVMTDsKLQl9Ci0KLQlpZiAoZ19yZW1vdGUpIHsKLQkJZ2l0X3JlbW90ZV9mcmVlKGdfcmVtb3RlKTsKLQkJZ19yZW1vdGUgPSBOVUxMOwotCX0KLQotCWNsX2ZpeHR1cmVfY2xlYW51cCgiLi9mb28iKTsKLX0KLQotdm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fYmFkX3VybCh2b2lkKQotewotCS8qIENsb25lIHNob3VsZCBjbGVhbiB1cCB0aGUgbWVzcyBpZiB0aGUgVVJMIGlzbid0IGEgZ2l0IHJlcG9zaXRvcnkgKi8KLQljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgIm5vdF9hX3JlcG8iLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Ci0JY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIi4vZm9vIikpOwotCWdfb3B0aW9ucy5iYXJlID0gdHJ1ZTsKLQljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgIm5vdF9hX3JlcG8iLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Ci0JY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIi4vZm9vIikpOwotfQotCi1zdGF0aWMgaW50IGRvbnRfY2FsbF9tZSh2b2lkICpzdGF0ZSwgZ2l0X2J1ZiAqcGF0aCkKLXsKLQlHSVRfVU5VU0VEKHN0YXRlKTsKLQlHSVRfVU5VU0VEKHBhdGgpOwotCXJldHVybiBHSVRfRVJST1I7Ci19Ci0KLXZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2RvX25vdF9jbGVhbl9leGlzdGluZ19kaXJlY3Rvcnkodm9pZCkKLXsKLQlnaXRfYnVmIHBhdGhfYnVmID0gR0lUX0JVRl9JTklUOwotCi0JZ2l0X2J1Zl9wdXQoJnBhdGhfYnVmLCAiLi9mb28iLCA1KTsKLQotCS8qIENsb25lIHNob3VsZCBub3QgcmVtb3ZlIHRoZSBkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSBleGlzdHMsIGJ1dAotCSAqIFNob3VsZCBjbGVhbiB1cCBlbnRyaWVzIGl0IGNyZWF0ZXMuICovCi0JcF9ta2RpcigiLi9mb28iLCBHSVRfRElSX01PREUpOwotCWNsX2dpdF9mYWlsKGdpdF9jbG9uZSgmZ19yZXBvLCAibm90X2FfcmVwbyIsICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKLQljbF9hc3NlcnQoZ2l0X3BhdGhfZXhpc3RzKCIuL2ZvbyIpKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LiAqLwotCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2RpcmVhY2goJnBhdGhfYnVmLAotCQlkb250X2NhbGxfbWUsCi0JCU5VTEwpKTsKLQotCS8qIFRyeSBhZ2FpbiB3aXRoIGEgYmFyZSByZXBvc2l0b3J5LiAqLwotCWdfb3B0aW9ucy5iYXJlID0gdHJ1ZTsKLQljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgIm5vdF9hX3JlcG8iLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Ci0JY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cygiLi9mb28iKSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eS4gKi8KLQljbF9naXRfcGFzcyhnaXRfcGF0aF9kaXJlYWNoKCZwYXRoX2J1ZiwKLQkJZG9udF9jYWxsX21lLAotCQlOVUxMKSk7Ci0KLQlnaXRfYnVmX2ZyZWUoJnBhdGhfYnVmKTsKLX0KLQotdm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fbG9jYWwodm9pZCkKLXsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19sb2NhbF9hYnNvbHV0ZV9wYXRoKHZvaWQpCi17Ci0JY29uc3QgY2hhciAqbG9jYWxfc3JjOwotCWxvY2FsX3NyYyA9IGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpOwotCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBsb2NhbF9zcmMsICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKLX0KLQotdm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fbG9jYWxfYmFyZSh2b2lkKQotewotCWdfb3B0aW9ucy5iYXJlID0gdHJ1ZTsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19mYWlsX3doZW5fdGhlX3RhcmdldF9pc19hX2ZpbGUodm9pZCkKLXsKLQljbF9naXRfbWtmaWxlKCIuL2ZvbyIsICJCYXIhIik7Ci0JY2xfZ2l0X2ZhaWwoZ2l0X2Nsb25lKCZnX3JlcG8sIGNsX2dpdF9maXh0dXJlX3VybCgidGVzdHJlcG8uZ2l0IiksICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKLX0KLQotdm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fZmFpbF93aXRoX2FscmVhZHlfZXhpc3RpbmdfYnV0X25vbl9lbXB0eV9kaXJlY3Rvcnkodm9pZCkKLXsKLQlwX21rZGlyKCIuL2ZvbyIsIEdJVF9ESVJfTU9ERSk7Ci0JY2xfZ2l0X21rZmlsZSgiLi9mb28vYmFyIiwgIkJheiEiKTsKLQljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jdXN0b21fb3JpZ2luX25hbWUodm9pZCkKLXsKLQlnX29wdGlvbnMucmVtb3RlX25hbWUgPSAibXlfb3JpZ2luIjsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9sb2FkKCZnX3JlbW90ZSwgZ19yZXBvLCAibXlfb3JpZ2luIikpOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jdXN0b21fcHVzaF91cmwodm9pZCkKLXsKLQljb25zdCBjaGFyICp1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tIjsKLQotCWdfb3B0aW9ucy5wdXNodXJsID0gdXJsOwotCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xvYWQoJmdfcmVtb3RlLCBnX3JlcG8sICJvcmlnaW4iKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3ModXJsLCBnaXRfcmVtb3RlX3B1c2h1cmwoZ19yZW1vdGUpKTsKLX0KLQotdm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fY3VzdG9tX2ZldGNoX3NwZWModm9pZCkKLXsKLQljb25zdCBnaXRfcmVmc3BlYyAqYWN0dWFsX2ZzOwotCWNvbnN0IGNoYXIgKnNwZWMgPSAiK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvZm9vIjsKLQotCWdfb3B0aW9ucy5mZXRjaF9zcGVjID0gc3BlYzsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9sb2FkKCZnX3JlbW90ZSwgZ19yZXBvLCAib3JpZ2luIikpOwotCWFjdHVhbF9mcyA9IGdpdF9yZW1vdGVfZ2V0X3JlZnNwZWMoZ19yZW1vdGUsIDApOwotCWNsX2Fzc2VydF9lcXVhbF9zKCJyZWZzL2hlYWRzL21hc3RlciIsIGdpdF9yZWZzcGVjX3NyYyhhY3R1YWxfZnMpKTsKLQljbF9hc3NlcnRfZXF1YWxfcygicmVmcy9oZWFkcy9mb28iLCBnaXRfcmVmc3BlY19kc3QoYWN0dWFsX2ZzKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmZ19yZWYsIGdfcmVwbywgInJlZnMvaGVhZHMvZm9vIikpOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jdXN0b21fcHVzaF9zcGVjKHZvaWQpCi17Ci0JY29uc3QgZ2l0X3JlZnNwZWMgKmFjdHVhbF9mczsKLQljb25zdCBjaGFyICpzcGVjID0gIityZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2ZvbyI7Ci0KLQlnX29wdGlvbnMucHVzaF9zcGVjID0gc3BlYzsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9sb2FkKCZnX3JlbW90ZSwgZ19yZXBvLCAib3JpZ2luIikpOwotCWFjdHVhbF9mcyA9IGdpdF9yZW1vdGVfZ2V0X3JlZnNwZWMoZ19yZW1vdGUsIGdpdF9yZW1vdGVfcmVmc3BlY19jb3VudChnX3JlbW90ZSkgLSAxKTsKLQljbF9hc3NlcnRfZXF1YWxfcygicmVmcy9oZWFkcy9tYXN0ZXIiLCBnaXRfcmVmc3BlY19zcmMoYWN0dWFsX2ZzKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoInJlZnMvaGVhZHMvZm9vIiwgZ2l0X3JlZnNwZWNfZHN0KGFjdHVhbF9mcykpOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jdXN0b21fYXV0b3RhZyh2b2lkKQotewotCWdpdF9yZW1vdGUgKm9yaWdpbjsKLQlnaXRfc3RyYXJyYXkgdGFncyA9IHswfTsKLQotCWdfb3B0aW9ucy5yZW1vdGVfYXV0b3RhZyA9IEdJVF9SRU1PVEVfRE9XTkxPQURfVEFHU19OT05FOwotCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfdGFnX2xpc3QoJnRhZ3MsIGdfcmVwbykpOwotCWNsX2Fzc2VydF9lcXVhbF9zeigwLCB0YWdzLmNvdW50KTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbG9hZCgmb3JpZ2luLCBnX3JlcG8sICJvcmlnaW4iKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX1JFTU9URV9ET1dOTE9BRF9UQUdTX05PTkUsIG9yaWdpbi0+ZG93bmxvYWRfdGFncyk7Ci0KLQlnaXRfc3RyYXJyYXlfZnJlZSgmdGFncyk7Ci0JZ2l0X3JlbW90ZV9mcmVlKG9yaWdpbik7Ci19Ci0KLXZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2N1c3RvbV9hdXRvdGFnX3RhZ3NfYWxsKHZvaWQpCi17Ci0JZ2l0X3N0cmFycmF5IHRhZ3MgPSB7MH07Ci0JZ2l0X3JlbW90ZSAqb3JpZ2luOwotCi0JZ19vcHRpb25zLnJlbW90ZV9hdXRvdGFnID0gR0lUX1JFTU9URV9ET1dOTE9BRF9UQUdTX0FMTDsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9sb2FkKCZvcmlnaW4sIGdfcmVwbywgIm9yaWdpbiIpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfUkVNT1RFX0RPV05MT0FEX1RBR1NfQUxMLCBvcmlnaW4tPmRvd25sb2FkX3RhZ3MpOwotCi0JZ2l0X3N0cmFycmF5X2ZyZWUoJnRhZ3MpOwotCWdpdF9yZW1vdGVfZnJlZShvcmlnaW4pOwotfQotCi12b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jb3BlX3dpdGhfYWxyZWFkeV9leGlzdGluZ19kaXJlY3Rvcnkodm9pZCkKLXsKLQlwX21rZGlyKCIuL2ZvbyIsIEdJVF9ESVJfTU9ERSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIGNsX2dpdF9maXh0dXJlX3VybCgidGVzdHJlcG8uZ2l0IiksICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKLX0KLQotdm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fY2FuX3ByZXZlbnRfdGhlX2NoZWNrb3V0X29mX2Ffc3RhbmRhcmRfcmVwbyh2b2lkKQotewotCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKLQotCWdfb3B0aW9ucy5jaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihnX3JlcG8pLCAibWFzdGVyLnR4dCIpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShmYWxzZSwgZ2l0X3BhdGhfaXNmaWxlKGdpdF9idWZfY3N0cigmcGF0aCkpKTsKLQotCWdpdF9idWZfZnJlZSgmcGF0aCk7Ci19Ci0KLXZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2Nhbl9jaGVja291dF9naXZlbl9icmFuY2godm9pZCkKLXsKLQlnX29wdGlvbnMuY2hlY2tvdXRfYnJhbmNoID0gInRlc3QiOwotCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgwLCBnaXRfcmVwb3NpdG9yeV9oZWFkX29ycGhhbihnX3JlcG8pKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWQoJmdfcmVmLCBnX3JlcG8pKTsKLQljbF9hc3NlcnRfZXF1YWxfcyhnaXRfcmVmZXJlbmNlX25hbWUoZ19yZWYpLCAicmVmcy9oZWFkcy90ZXN0Iik7Ci19Ci0KLXZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2Nhbl9kZXRhY2hlZF9oZWFkKHZvaWQpCi17Ci0JZ2l0X29iamVjdCAqb2JqOwotCWdpdF9yZXBvc2l0b3J5ICpjbG9uZWQ7Ci0JZ2l0X3JlZmVyZW5jZSAqY2xvbmVkX2hlYWQ7Ci0KLQljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JldnBhcnNlX3NpbmdsZSgmb2JqLCBnX3JlcG8sICJtYXN0ZXJ+MSIpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9zZXRfaGVhZF9kZXRhY2hlZChnX3JlcG8sIGdpdF9vYmplY3RfaWQob2JqKSkpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZjbG9uZWQsICIuL2ZvbyIsICIuL2ZvbzEiLCAmZ19vcHRpb25zKSk7Ci0KLQljbF9hc3NlcnQoZ2l0X3JlcG9zaXRvcnlfaGVhZF9kZXRhY2hlZChjbG9uZWQpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWQoJmNsb25lZF9oZWFkLCBjbG9uZWQpKTsKLQljbF9hc3NlcnQoIWdpdF9vaWRfY21wKGdpdF9vYmplY3RfaWQob2JqKSwgZ2l0X3JlZmVyZW5jZV90YXJnZXQoY2xvbmVkX2hlYWQpKSk7Ci0KLQlnaXRfb2JqZWN0X2ZyZWUob2JqKTsKLQlnaXRfcmVmZXJlbmNlX2ZyZWUoY2xvbmVkX2hlYWQpOwotCWdpdF9yZXBvc2l0b3J5X2ZyZWUoY2xvbmVkKTsKLQotCWNsX2ZpeHR1cmVfY2xlYW51cCgiLi9mb28xIik7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9tdWx0aXZhci5jIGIvdGVzdHMtY2xhci9jb25maWcvbXVsdGl2YXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkYTZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL2NvbmZpZy9tdWx0aXZhci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLQotc3RhdGljIGNvbnN0IGNoYXIgKl9uYW1lID0gInJlbW90ZS5mYW5jeS51cmwiOwotCi12b2lkIHRlc3RfY29uZmlnX211bHRpdmFyX19pbml0aWFsaXplKHZvaWQpCi17Ci0JY2xfZml4dHVyZV9zYW5kYm94KCJjb25maWciKTsKLX0KLQotdm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fY2xlYW51cCh2b2lkKQotewotCWNsX2ZpeHR1cmVfY2xlYW51cCgiY29uZmlnIik7Ci19Ci0KLXN0YXRpYyBpbnQgbXZfcmVhZF9jYihjb25zdCBnaXRfY29uZmlnX2VudHJ5ICplbnRyeSwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgKm4gPSAoaW50ICopIGRhdGE7Ci0KLQlpZiAoIXN0cmNtcChlbnRyeS0+bmFtZSwgX25hbWUpKQotCQkoKm4pKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fZm9yZWFjaCh2b2lkKQotewotCWdpdF9jb25maWcgKmNmZzsKLQlpbnQgbiA9IDA7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsIGNsX2ZpeHR1cmUoImNvbmZpZy9jb25maWcxMSIpKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2ZvcmVhY2goY2ZnLCBtdl9yZWFkX2NiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDIpOwotCi0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci19Ci0KLXN0YXRpYyBpbnQgY2IoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnksIHZvaWQgKmRhdGEpCi17Ci0JaW50ICpuID0gKGludCAqKSBkYXRhOwotCi0JR0lUX1VOVVNFRChlbnRyeSk7Ci0KLQkoKm4pKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fZ2V0KHZvaWQpCi17Ci0JZ2l0X2NvbmZpZyAqY2ZnOwotCWludCBuOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiY29uZmlnL2NvbmZpZzExIikpOwotCi0JbiA9IDA7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXIoY2ZnLCBfbmFtZSwgTlVMTCwgY2IsICZuKSk7Ci0JY2xfYXNzZXJ0KG4gPT0gMik7Ci0KLQluID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjZmcsIF9uYW1lLCAiZXhhbXBsZSIsIGNiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDEpOwotCi0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci19Ci0KLXZvaWQgdGVzdF9jb25maWdfbXVsdGl2YXJfX2FkZCh2b2lkKQotewotCWdpdF9jb25maWcgKmNmZzsKLQlpbnQgbjsKLQotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjZmcsIF9uYW1lLCAibm9uZXhpc3RhbnQiLCAiZ2l0Oi8vZ2l0Lm90aGVycGxhY2Uub3JnL2xpYmdpdDIiKSk7Ci0KLQluID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjZmcsIF9uYW1lLCBOVUxMLCBjYiwgJm4pKTsKLQljbF9hc3NlcnQobiA9PSAzKTsKLQotCW4gPSAwOwotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyKGNmZywgX25hbWUsICJvdGhlcnBsYWNlIiwgY2IsICZuKSk7Ci0JY2xfYXNzZXJ0KG4gPT0gMSk7Ci0KLQlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKLQotCS8qIFdlIGtub3cgaXQgd29ya3MgaW4gbWVtb3J5LCBsZXQncyBzZWUgaWYgdGhlIGZpbGUgaXMgd3JpdHRlbiBjb3JyZWN0bHkgKi8KLQotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKLQotCW4gPSAwOwotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDMpOwotCi0JbiA9IDA7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXIoY2ZnLCBfbmFtZSwgIm90aGVycGxhY2UiLCBjYiwgJm4pKTsKLQljbF9hc3NlcnQobiA9PSAxKTsKLQotCWdpdF9jb25maWdfZnJlZShjZmcpOwotfQotCi12b2lkIHRlc3RfY29uZmlnX211bHRpdmFyX19hZGRfbmV3KHZvaWQpCi17Ci0JY29uc3QgY2hhciAqdmFyID0gImEuYnJhbmQubmV3IjsKLQlnaXRfY29uZmlnICpjZmc7Ci0JaW50IG47Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjZmcsIHZhciwgIiIsICJ2YXJpYWJsZSIpKTsKLQluID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjZmcsIHZhciwgTlVMTCwgY2IsICZuKSk7Ci0JY2xfYXNzZXJ0KG4gPT0gMSk7Ci0KLQlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKLX0KLQotdm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fcmVwbGFjZSh2b2lkKQotewotCWdpdF9jb25maWcgKmNmZzsKLQlpbnQgbjsKLQotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKLQotCW4gPSAwOwotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDIpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY2ZnLCBfbmFtZSwgImdpdGh1YiIsICJnaXQ6Ly9naXQub3RoZXJwbGFjZS5vcmcvbGliZ2l0MiIpKTsKLQotCW4gPSAwOwotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDIpOwotCi0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7Ci0KLQluID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjZmcsIF9uYW1lLCBOVUxMLCBjYiwgJm4pKTsKLQljbF9hc3NlcnQobiA9PSAyKTsKLQotCWdpdF9jb25maWdfZnJlZShjZmcpOwotfQotCi12b2lkIHRlc3RfY29uZmlnX211bHRpdmFyX19yZXBsYWNlX211bHRpcGxlKHZvaWQpCi17Ci0JZ2l0X2NvbmZpZyAqY2ZnOwotCWludCBuOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiY29uZmlnL2NvbmZpZzExIikpOwotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNmZywgX25hbWUsICJnaXQ6Ly8iLCAiZ2l0Oi8vZ2l0Lm90aGVycGxhY2Uub3JnL2xpYmdpdDIiKSk7Ci0KLQluID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjZmcsIF9uYW1lLCAib3RoZXJwbGFjZSIsIGNiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDIpOwotCi0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7Ci0KLQluID0gMDsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcihjZmcsIF9uYW1lLCAib3RoZXJwbGFjZSIsIGNiLCAmbikpOwotCWNsX2Fzc2VydChuID09IDIpOwotCi0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvcmUvZmlsZWJ1Zi5jIGIvdGVzdHMtY2xhci9jb3JlL2ZpbGVidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1MWMwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL2NvcmUvZmlsZWJ1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgotI2luY2x1ZGUgImZpbGVidWYuaCIKLQotLyogbWFrZSBzdXJlIGdpdF9maWxlYnVmX29wZW4gZG9lc24ndCBkZWxldGUgYW4gZXhpc3RpbmcgbG9jayAqLwotdm9pZCB0ZXN0X2NvcmVfZmlsZWJ1Zl9fMCh2b2lkKQotewotCWdpdF9maWxlYnVmIGZpbGUgPSBHSVRfRklMRUJVRl9JTklUOwotCWludCBmZDsKLQljaGFyIHRlc3RbXSA9ICJ0ZXN0IiwgdGVzdGxvY2tbXSA9ICJ0ZXN0LmxvY2siOwotCi0JZmQgPSBwX2NyZWF0KHRlc3Rsb2NrLCAwNzQ0KTsgLy8tVjUzNgotCi0JY2xfbXVzdF9wYXNzKGZkKTsKLQljbF9tdXN0X3Bhc3MocF9jbG9zZShmZCkpOwotCi0JY2xfZ2l0X2ZhaWwoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgMCkpOwotCWNsX2Fzc2VydChnaXRfcGF0aF9leGlzdHModGVzdGxvY2spKTsKLQotCWNsX211c3RfcGFzcyhwX3VubGluayh0ZXN0bG9jaykpOwotfQotCi0KLS8qIG1ha2Ugc3VyZSBHSVRfRklMRUJVRl9BUFBFTkQgd29ya3MgYXMgZXhwZWN0ZWQgKi8KLXZvaWQgdGVzdF9jb3JlX2ZpbGVidWZfXzEodm9pZCkKLXsKLQlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKLQlpbnQgZmQ7Ci0JY2hhciB0ZXN0W10gPSAidGVzdCI7Ci0KLQlmZCA9IHBfY3JlYXQodGVzdCwgMDY2Nik7IC8vLVY1MzYKLQljbF9tdXN0X3Bhc3MoZmQpOwotCWNsX211c3RfcGFzcyhwX3dyaXRlKGZkLCAibGliZ2l0MiByb2Nrc1xuIiwgMTQpKTsKLQljbF9tdXN0X3Bhc3MocF9jbG9zZShmZCkpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgR0lUX0ZJTEVCVUZfQVBQRU5EKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsICJsaWJnaXQyIHJvY2tzIikpOwotCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSwgMDY2NikpOwotCi0JY2xfbXVzdF9wYXNzKHBfdW5saW5rKHRlc3QpKTsKLX0KLQotCi0vKiBtYWtlIHN1cmUgZ2l0X2ZpbGVidWZfd3JpdGUgd3JpdGVzIGxhcmdlIGJ1ZmZlciBjb3JyZWN0bHkgKi8KLXZvaWQgdGVzdF9jb3JlX2ZpbGVidWZfXzIodm9pZCkKLXsKLQlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKLQljaGFyIHRlc3RbXSA9ICJ0ZXN0IjsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2ICogNF07IC8qIDIgKiBXUklURV9CVUZGRVJfU0laRSAqLwotCi0JbWVtc2V0KGJ1ZiwgMHhmZSwgc2l6ZW9mKGJ1ZikpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgMCkpOwotCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX3dyaXRlKCZmaWxlLCBidWYsIHNpemVvZihidWYpKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlLCAwNjY2KSk7Ci0KLQljbF9tdXN0X3Bhc3MocF91bmxpbmsodGVzdCkpOwotfQotCi0vKiBtYWtlIHN1cmUgZ2l0X2ZpbGVidWZfY2xlYW51cCBjbGVhcnMgdGhlIGJ1ZmZlciAqLwotdm9pZCB0ZXN0X2NvcmVfZmlsZWJ1Zl9fNCh2b2lkKQotewotCWdpdF9maWxlYnVmIGZpbGUgPSBHSVRfRklMRUJVRl9JTklUOwotCWNoYXIgdGVzdFtdID0gInRlc3QiOwotCi0JY2xfYXNzZXJ0KGZpbGUuYnVmZmVyID09IE5VTEwpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgMCkpOwotCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciAhPSBOVUxMKTsKLQotCWdpdF9maWxlYnVmX2NsZWFudXAoJmZpbGUpOwotCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciA9PSBOVUxMKTsKLX0KLQotCi0vKiBtYWtlIHN1cmUgZ2l0X2ZpbGVidWZfY29tbWl0IGNsZWFycyB0aGUgYnVmZmVyICovCi12b2lkIHRlc3RfY29yZV9maWxlYnVmX181KHZvaWQpCi17Ci0JZ2l0X2ZpbGVidWYgZmlsZSA9IEdJVF9GSUxFQlVGX0lOSVQ7Ci0JY2hhciB0ZXN0W10gPSAidGVzdCI7Ci0KLQljbF9hc3NlcnQoZmlsZS5idWZmZXIgPT0gTlVMTCk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCB0ZXN0LCAwKSk7Ci0JY2xfYXNzZXJ0KGZpbGUuYnVmZmVyICE9IE5VTEwpOwotCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIiVzXG4iLCAibGliZ2l0MiByb2NrcyIpKTsKLQljbF9hc3NlcnQoZmlsZS5idWZmZXIgIT0gTlVMTCk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUsIDA2NjYpKTsKLQljbF9hc3NlcnQoZmlsZS5idWZmZXIgPT0gTlVMTCk7Ci0KLQljbF9tdXN0X3Bhc3MocF91bmxpbmsodGVzdCkpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9kaWZmL2RpZmZfaGVscGVycy5jIGIvdGVzdHMtY2xhci9kaWZmL2RpZmZfaGVscGVycy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTIzNzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvZGlmZi9kaWZmX2hlbHBlcnMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0jaW5jbHVkZSAiZGlmZl9oZWxwZXJzLmgiCi0KLWdpdF90cmVlICpyZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZSgKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQljb25zdCBjaGFyICpwYXJ0aWFsX29pZCkKLXsKLQlzaXplX3QgbGVuID0gc3RybGVuKHBhcnRpYWxfb2lkKTsKLQlnaXRfb2lkIG9pZDsKLQlnaXRfb2JqZWN0ICpvYmogPSBOVUxMOwotCWdpdF90cmVlICp0cmVlID0gTlVMTDsKLQotCWlmIChnaXRfb2lkX2Zyb21zdHJuKCZvaWQsIHBhcnRpYWxfb2lkLCBsZW4pID09IDApCi0JCWdpdF9vYmplY3RfbG9va3VwX3ByZWZpeCgmb2JqLCByZXBvLCAmb2lkLCBsZW4sIEdJVF9PQkpfQU5ZKTsKLQljbF9hc3NlcnQob2JqKTsKLQlpZiAoZ2l0X29iamVjdF90eXBlKG9iaikgPT0gR0lUX09CSl9UUkVFKQotCQlyZXR1cm4gKGdpdF90cmVlICopb2JqOwotCWNsX2Fzc2VydChnaXRfb2JqZWN0X3R5cGUob2JqKSA9PSBHSVRfT0JKX0NPTU1JVCk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF90cmVlKCZ0cmVlLCAoZ2l0X2NvbW1pdCAqKW9iaikpOwotCWdpdF9vYmplY3RfZnJlZShvYmopOwotCXJldHVybiB0cmVlOwotfQotCi1pbnQgZGlmZl9maWxlX2NiKAotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKLQlmbG9hdCBwcm9ncmVzcywKLQl2b2lkICpwYXlsb2FkKQotewotCWRpZmZfZXhwZWN0cyAqZSA9IHBheWxvYWQ7Ci0KLQlpZiAoZS0+ZGVidWcpCi0JCWZwcmludGYoc3RkZXJyLCAiJWMgJXMgKCUuM2YpXG4iLAotCQkJZ2l0X2RpZmZfc3RhdHVzX2NoYXIoZGVsdGEtPnN0YXR1cyksCi0JCQlkZWx0YS0+b2xkX2ZpbGUucGF0aCwgcHJvZ3Jlc3MpOwotCi0JaWYgKGUtPm5hbWVzKQotCQljbF9hc3NlcnRfZXF1YWxfcyhlLT5uYW1lc1tlLT5maWxlc10sIGRlbHRhLT5vbGRfZmlsZS5wYXRoKTsKLQlpZiAoZS0+c3RhdHVzZXMpCi0JCWNsX2Fzc2VydF9lcXVhbF9pKGUtPnN0YXR1c2VzW2UtPmZpbGVzXSwgKGludClkZWx0YS0+c3RhdHVzKTsKLQotCWUtPmZpbGVzKys7Ci0KLQlpZiAoKGRlbHRhLT5mbGFncyAmIEdJVF9ESUZGX0ZMQUdfQklOQVJZKSAhPSAwKQotCQllLT5maWxlc19iaW5hcnkrKzsKLQotCWNsX2Fzc2VydChkZWx0YS0+c3RhdHVzIDw9IEdJVF9ERUxUQV9UWVBFQ0hBTkdFKTsKLQotCWUtPmZpbGVfc3RhdHVzW2RlbHRhLT5zdGF0dXNdICs9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRpZmZfcHJpbnRfZmlsZV9jYigKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JZmxvYXQgcHJvZ3Jlc3MsCi0Jdm9pZCAqcGF5bG9hZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIiVjICVzXG4iLAotCQlnaXRfZGlmZl9zdGF0dXNfY2hhcihkZWx0YS0+c3RhdHVzKSwgZGVsdGEtPm9sZF9maWxlLnBhdGgpOwotCXJldHVybiBkaWZmX2ZpbGVfY2IoZGVsdGEsIHByb2dyZXNzLCBwYXlsb2FkKTsKLX0KLQotaW50IGRpZmZfaHVua19jYigKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlLAotCWNvbnN0IGNoYXIgKmhlYWRlciwKLQlzaXplX3QgaGVhZGVyX2xlbiwKLQl2b2lkICpwYXlsb2FkKQotewotCWRpZmZfZXhwZWN0cyAqZSA9IHBheWxvYWQ7Ci0KLQlHSVRfVU5VU0VEKGRlbHRhKTsKLQlHSVRfVU5VU0VEKGhlYWRlcik7Ci0JR0lUX1VOVVNFRChoZWFkZXJfbGVuKTsKLQotCWUtPmh1bmtzKys7Ci0JZS0+aHVua19vbGRfbGluZXMgKz0gcmFuZ2UtPm9sZF9saW5lczsKLQllLT5odW5rX25ld19saW5lcyArPSByYW5nZS0+bmV3X2xpbmVzOwotCXJldHVybiAwOwotfQotCi1pbnQgZGlmZl9saW5lX2NiKAotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKLQljb25zdCBnaXRfZGlmZl9yYW5nZSAqcmFuZ2UsCi0JY2hhciBsaW5lX29yaWdpbiwKLQljb25zdCBjaGFyICpjb250ZW50LAotCXNpemVfdCBjb250ZW50X2xlbiwKLQl2b2lkICpwYXlsb2FkKQotewotCWRpZmZfZXhwZWN0cyAqZSA9IHBheWxvYWQ7Ci0KLQlHSVRfVU5VU0VEKGRlbHRhKTsKLQlHSVRfVU5VU0VEKHJhbmdlKTsKLQlHSVRfVU5VU0VEKGNvbnRlbnQpOwotCUdJVF9VTlVTRUQoY29udGVudF9sZW4pOwotCi0JZS0+bGluZXMrKzsKLQlzd2l0Y2ggKGxpbmVfb3JpZ2luKSB7Ci0JY2FzZSBHSVRfRElGRl9MSU5FX0NPTlRFWFQ6Ci0JY2FzZSBHSVRfRElGRl9MSU5FX0NPTlRFWFRfRU9GTkw6IC8qIHRlY2hpY2FsbHkgbm90IGEgbGluZSAqLwotCQllLT5saW5lX2N0eHQrKzsKLQkJYnJlYWs7Ci0JY2FzZSBHSVRfRElGRl9MSU5FX0FERElUSU9OOgotCWNhc2UgR0lUX0RJRkZfTElORV9BRERfRU9GTkw6IC8qIHRlY2huaWNhbGx5IG5vdCBhIGxpbmUgYWRkICovCi0JCWUtPmxpbmVfYWRkcysrOwotCQlicmVhazsKLQljYXNlIEdJVF9ESUZGX0xJTkVfREVMRVRJT046Ci0JY2FzZSBHSVRfRElGRl9MSU5FX0RFTF9FT0ZOTDogLyogdGVjaG5pY2FsbHkgbm90IGEgbGluZSBkZWxldGUgKi8KLQkJZS0+bGluZV9kZWxzKys7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRpZmZfZm9yZWFjaF92aWFfaXRlcmF0b3IoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKLQlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCi0JZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgbGluZV9jYiwKLQl2b2lkICpkYXRhKQotewotCXNpemVfdCBkLCBudW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7Ci0KLQlmb3IgKGQgPSAwOyBkIDwgbnVtX2Q7ICsrZCkgewotCQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7Ci0JCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKLQkJc2l6ZV90IGgsIG51bV9oOwotCi0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsICZkZWx0YSwgZGlmZiwgZCkpOwotCQljbF9hc3NlcnQoZGVsdGEpOwotCi0JCS8qIGNhbGwgZmlsZV9jYiBmb3IgdGhpcyBmaWxlICovCi0JCWlmIChmaWxlX2NiICE9IE5VTEwgJiYgZmlsZV9jYihkZWx0YSwgKGZsb2F0KWQgLyBudW1fZCwgZGF0YSkgIT0gMCkgewotCQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JCQlnb3RvIGFib3J0OwotCQl9Ci0KLQkJLyogaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMsIHRoZW4gdGhlIHBhdGNoIHdpbGwgYmUgTlVMTCAqLwotCQlpZiAoIXBhdGNoKSB7Ci0JCQljbF9hc3NlcnQoZGVsdGEtPnN0YXR1cyA9PSBHSVRfREVMVEFfVU5NT0RJRklFRCB8fAotCQkJCQkgIChkZWx0YS0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX0JJTkFSWSkgIT0gMCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghaHVua19jYiAmJiAhbGluZV9jYikgewotCQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCW51bV9oID0gZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKTsKLQotCQlmb3IgKGggPSAwOyBoIDwgbnVtX2g7IGgrKykgewotCQkJY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlOwotCQkJY29uc3QgY2hhciAqaGRyOwotCQkJc2l6ZV90IGhkcl9sZW4sIGwsIG51bV9sOwotCi0JCQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9nZXRfaHVuaygKLQkJCQkmcmFuZ2UsICZoZHIsICZoZHJfbGVuLCAmbnVtX2wsIHBhdGNoLCBoKSk7Ci0KLQkJCWlmIChodW5rX2NiICYmIGh1bmtfY2IoZGVsdGEsIHJhbmdlLCBoZHIsIGhkcl9sZW4sIGRhdGEpICE9IDApIHsKLQkJCQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQkJCQlnb3RvIGFib3J0OwotCQkJfQotCi0JCQlmb3IgKGwgPSAwOyBsIDwgbnVtX2w7ICsrbCkgewotCQkJCWNoYXIgb3JpZ2luOwotCQkJCWNvbnN0IGNoYXIgKmxpbmU7Ci0JCQkJc2l6ZV90IGxpbmVfbGVuOwotCQkJCWludCBvbGRfbGluZW5vLCBuZXdfbGluZW5vOwotCi0JCQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJCQkJJm9yaWdpbiwgJmxpbmUsICZsaW5lX2xlbiwgJm9sZF9saW5lbm8sICZuZXdfbGluZW5vLAotCQkJCQlwYXRjaCwgaCwgbCkpOwotCi0JCQkJaWYgKGxpbmVfY2IgJiYKLQkJCQkJbGluZV9jYihkZWx0YSwgcmFuZ2UsIG9yaWdpbiwgbGluZSwgbGluZV9sZW4sIGRhdGEpICE9IDApIHsKLQkJCQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JCQkJCWdvdG8gYWJvcnQ7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWFib3J0OgotCWdpdGVycl9jbGVhcigpOwotCXJldHVybiBHSVRfRVVTRVI7Ci19Ci0KLXN0YXRpYyBpbnQgZGlmZl9wcmludF9jYigKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlLAotCWNoYXIgbGluZV9vcmlnaW4sIC8qKjwgR0lUX0RJRkZfTElORV8uLi4gdmFsdWUgZnJvbSBhYm92ZSAqLwotCWNvbnN0IGNoYXIgKmNvbnRlbnQsCi0Jc2l6ZV90IGNvbnRlbnRfbGVuLAotCXZvaWQgKnBheWxvYWQpCi17Ci0JR0lUX1VOVVNFRChwYXlsb2FkKTsKLQlHSVRfVU5VU0VEKGRlbHRhKTsKLQlHSVRfVU5VU0VEKHJhbmdlKTsKLQlHSVRfVU5VU0VEKGxpbmVfb3JpZ2luKTsKLQlHSVRfVU5VU0VEKGNvbnRlbnRfbGVuKTsKLQlmcHV0cyhjb250ZW50LCAoRklMRSAqKXBheWxvYWQpOwotCXJldHVybiAwOwotfQotCi12b2lkIGRpZmZfcHJpbnQoRklMRSAqZnAsIGdpdF9kaWZmX2xpc3QgKmRpZmYpCi17Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcHJpbnRfcGF0Y2goZGlmZiwgZGlmZl9wcmludF9jYiwgZnAgPyBmcCA6IHN0ZGVycikpOwotfQotCi12b2lkIGRpZmZfcHJpbnRfcmF3KEZJTEUgKmZwLCBnaXRfZGlmZl9saXN0ICpkaWZmKQotewotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3ByaW50X3JhdyhkaWZmLCBkaWZmX3ByaW50X2NiLCBmcCA/IGZwIDogc3RkZXJyKSk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2RpZmYvZHJpdmVycy5jIGIvdGVzdHMtY2xhci9kaWZmL2RyaXZlcnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZhYjJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL2RpZmYvZHJpdmVycy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLSNpbmNsdWRlICJkaWZmX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCi0jaW5jbHVkZSAiZGlmZl9kcml2ZXIuaCIKLQotc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG8gPSBOVUxMOwotCi12b2lkIHRlc3RfZGlmZl9kcml2ZXJzX19pbml0aWFsaXplKHZvaWQpCi17Ci19Ci0KLXZvaWQgdGVzdF9kaWZmX2RyaXZlcnNfX2NsZWFudXAodm9pZCkKLXsKLQljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Ci0JZ19yZXBvID0gTlVMTDsKLX0KLQotdm9pZCB0ZXN0X2RpZmZfZHJpdmVyc19fcGF0dGVybnModm9pZCkKLXsKLQlnaXRfY29uZmlnICpjZmc7Ci0JY29uc3QgY2hhciAqb25lX3NoYSA9ICIxOWRkMzJkZmIxNTIwYTY0ZTViYmFhZThkY2U2ZWY0MjNkZmEyZjEzIjsKLQlnaXRfdHJlZSAqb25lOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoOwotCWNoYXIgKnRleHQ7Ci0JY29uc3QgY2hhciAqZXhwZWN0ZWQwID0gImRpZmYgLS1naXQgYS91bnRpbWVseS50eHQgYi91bnRpbWVseS50eHRcbmluZGV4IDlhNjlkOTYuLjU3ZmQwY2YgMTAwNjQ0XG4tLS0gYS91bnRpbWVseS50eHRcbisrKyBiL3VudGltZWx5LnR4dFxuQEAgLTIyLDMgKzIyLDUgQEAgQ29tZXMgdGhyb3VnaCB0aGUgYmxvb2Qgb2YgdGhlIHZhbmd1YXJkcyB3aG9cbiAgIGRyZWFtZWQtLXRvbyBzb29uLS1pdCBoYWQgc291bmRlZC5cclxuIFxyXG4gICAgICAgICAgICAgICAgIC0tIFJ1ZHlhcmQgS2lwbGluZ1xyXG4rXHJcbitTb21lIG5ldyBzdHVmZlxyXG4iOwotCWNvbnN0IGNoYXIgKmV4cGVjdGVkMSA9ICJkaWZmIC0tZ2l0IGEvdW50aW1lbHkudHh0IGIvdW50aW1lbHkudHh0XG5pbmRleCA5YTY5ZDk2Li41N2ZkMGNmIDEwMDY0NFxuQmluYXJ5IGZpbGVzIGEvdW50aW1lbHkudHh0IGFuZCBiL3VudGltZWx5LnR4dCBkaWZmZXJcbiI7Ci0JY29uc3QgY2hhciAqZXhwZWN0ZWQyID0gImRpZmYgLS1naXQgYS91bnRpbWVseS50eHQgYi91bnRpbWVseS50eHRcbmluZGV4IDlhNjlkOTYuLjU3ZmQwY2YgMTAwNjQ0XG4tLS0gYS91bnRpbWVseS50eHRcbisrKyBiL3VudGltZWx5LnR4dFxuQEAgLTIyLDMgKzIyLDUgQEAgSGVhdmVuIGRlbGl2ZXJzIG9uIGVhcnRoIHRoZSBIb3VyIHRoYXQgY2Fubm90IGJlXG4gICBkcmVhbWVkLS10b28gc29vbi0taXQgaGFkIHNvdW5kZWQuXHJcbiBcclxuICAgICAgICAgICAgICAgICAtLSBSdWR5YXJkIEtpcGxpbmdcclxuK1xyXG4rU29tZSBuZXcgc3R1ZmZcclxuIjsKLQotCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInJlbmFtZXMiKTsKLQotCW9uZSA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgb25lX3NoYSk7Ci0KLQkvKiBubyBkaWZmICovCi0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMCwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQkvKiBkZWZhdWx0IGRpZmYgKi8KLQotCWNsX2dpdF9hcHBlbmQyZmlsZSgicmVuYW1lcy91bnRpbWVseS50eHQiLCAiXHJcblNvbWUgbmV3IHN0dWZmXHJcbiIpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIG9uZSwgTlVMTCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCBOVUxMLCBkaWZmLCAwKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkMCwgdGV4dCk7Ci0KLQlnaXRfX2ZyZWUodGV4dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotCi0JLyogYXR0cmlidXRlIGRpZmYgc2V0IHRvIGZhbHNlICovCi0KLQljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvLmdpdGF0dHJpYnV0ZXMiLCAidW50aW1lbHkudHh0IC1kaWZmXG4iKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBvbmUsIE5VTEwpKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKCZwYXRjaCwgTlVMTCwgZGlmZiwgMCkpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKLQljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZDEsIHRleHQpOwotCi0JZ2l0X19mcmVlKHRleHQpOwotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocGF0Y2gpOwotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKLQotCS8qIGF0dHJpYnV0ZSBkaWZmIHNldCB0byB1bmNvbmZpZ3VyZWQgdmFsdWUgKHNob3VsZCB1c2UgZGVmYXVsdCkgKi8KLQotCWNsX2dpdF9yZXdyaXRlZmlsZSgicmVuYW1lcy8uZ2l0YXR0cmlidXRlcyIsICJ1bnRpbWVseS50eHQgZGlmZj1raXBsaW5nMFxuIik7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQwLCB0ZXh0KTsKLQotCWdpdF9fZnJlZSh0ZXh0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQkvKiBsZXQncyBkZWZpbmUgdGhhdCBkcml2ZXIgKi8KLQotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY2ZnLCBnX3JlcG8pKTsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9ib29sKGNmZywgImRpZmYua2lwbGluZzAuYmluYXJ5IiwgMSkpOwotCWdpdF9jb25maWdfZnJlZShjZmcpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIG9uZSwgTlVMTCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCBOVUxMLCBkaWZmLCAwKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkMSwgdGV4dCk7Ci0KLQlnaXRfX2ZyZWUodGV4dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotCi0JLyogbGV0J3MgdXNlIGEgcmVhbCBkcml2ZXIgd2l0aCBzb21lIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKi8KLQotCWdpdF9kaWZmX2RyaXZlcl9yZWdpc3RyeV9mcmVlKGdfcmVwby0+ZGlmZl9kcml2ZXJzKTsKLQlnX3JlcG8tPmRpZmZfZHJpdmVycyA9IE5VTEw7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNmZywgZ19yZXBvKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfYm9vbChjZmcsICJkaWZmLmtpcGxpbmcwLmJpbmFyeSIsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY2ZnLCAiZGlmZi5raXBsaW5nMC54ZnVuY25hbWUiLCAiXkgiKSk7Ci0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQyLCB0ZXh0KTsKLQotCWdpdF9fZnJlZSh0ZXh0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQlnaXRfdHJlZV9mcmVlKG9uZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvZGlmZi9wYXRjaC5jIGIvdGVzdHMtY2xhci9kaWZmL3BhdGNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMTRhMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci9kaWZmL3BhdGNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTkgKzAsMCBAQAotI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgotI2luY2x1ZGUgImdpdDIvc3lzL3JlcG9zaXRvcnkuaCIKLQotI2luY2x1ZGUgImRpZmZfaGVscGVycy5oIgotI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJidWZfdGV4dC5oIgotCi1zdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7Ci0KLXZvaWQgdGVzdF9kaWZmX3BhdGNoX19pbml0aWFsaXplKHZvaWQpCi17Ci19Ci0KLXZvaWQgdGVzdF9kaWZmX3BhdGNoX19jbGVhbnVwKHZvaWQpCi17Ci0JY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwotfQotCi0jZGVmaW5lIEVYUEVDVEVEX0hFQURFUiAiZGlmZiAtLWdpdCBhL3N1YmRpci50eHQgYi9zdWJkaXIudHh0XG4iIFwKLQkiZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG4iIFwKLQkiaW5kZXggZThlZTg5ZS4uMDAwMDAwMFxuIiBcCi0JIi0tLSBhL3N1YmRpci50eHRcbiIgXAotCSIrKysgL2Rldi9udWxsXG4iCi0KLSNkZWZpbmUgRVhQRUNURURfSFVOSyAiQEAgLTEsMiArMCwwIEBAXG4iCi0KLXN0YXRpYyBpbnQgY2hlY2tfcmVtb3ZhbF9jYigKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlLAotCWNoYXIgbGluZV9vcmlnaW4sCi0JY29uc3QgY2hhciAqZm9ybWF0dGVkX291dHB1dCwKLQlzaXplX3Qgb3V0cHV0X2xlbiwKLQl2b2lkICpwYXlsb2FkKQotewotCUdJVF9VTlVTRUQocGF5bG9hZCk7Ci0JR0lUX1VOVVNFRChvdXRwdXRfbGVuKTsKLQotCXN3aXRjaCAobGluZV9vcmlnaW4pIHsKLQljYXNlIEdJVF9ESUZGX0xJTkVfRklMRV9IRFI6Ci0JCWNsX2Fzc2VydF9lcXVhbF9zKEVYUEVDVEVEX0hFQURFUiwgZm9ybWF0dGVkX291dHB1dCk7Ci0JCWNsX2Fzc2VydChyYW5nZSA9PSBOVUxMKTsKLQkJZ290byBjaGVja19kZWx0YTsKLQotCWNhc2UgR0lUX0RJRkZfTElORV9IVU5LX0hEUjoKLQkJY2xfYXNzZXJ0X2VxdWFsX3MoRVhQRUNURURfSFVOSywgZm9ybWF0dGVkX291dHB1dCk7Ci0JCS8qIEZhbGwgdGhyb3VnaCAqLwotCi0JY2FzZSBHSVRfRElGRl9MSU5FX0NPTlRFWFQ6Ci0JY2FzZSBHSVRfRElGRl9MSU5FX0RFTEVUSU9OOgotCQlnb3RvIGNoZWNrX3JhbmdlOwotCi0JZGVmYXVsdDoKLQkJLyogdW5leHBlY3RlZCBjb2RlIHBhdGggKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotY2hlY2tfcmFuZ2U6Ci0JY2xfYXNzZXJ0KHJhbmdlICE9IE5VTEwpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIHJhbmdlLT5vbGRfc3RhcnQpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDIsIHJhbmdlLT5vbGRfbGluZXMpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDAsIHJhbmdlLT5uZXdfc3RhcnQpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDAsIHJhbmdlLT5uZXdfbGluZXMpOwotCi1jaGVja19kZWx0YToKLQljbF9hc3NlcnRfZXF1YWxfcygic3ViZGlyLnR4dCIsIGRlbHRhLT5vbGRfZmlsZS5wYXRoKTsKLQljbF9hc3NlcnRfZXF1YWxfcygic3ViZGlyLnR4dCIsIGRlbHRhLT5uZXdfZmlsZS5wYXRoKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfREVMRVRFRCwgZGVsdGEtPnN0YXR1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB0ZXN0X2RpZmZfcGF0Y2hfX2Nhbl9wcm9wZXJseV9kaXNwbGF5X3RoZV9yZW1vdmFsX29mX2FfZmlsZSh2b2lkKQotewotCS8qCi0JKiAkIGdpdCBkaWZmIDI2YTEyNWUuLjczNWI2YTIKLQkqIGRpZmYgLS1naXQgYS9zdWJkaXIudHh0IGIvc3ViZGlyLnR4dAotCSogZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci0JKiBpbmRleCBlOGVlODllLi4wMDAwMDAwCi0JKiAtLS0gYS9zdWJkaXIudHh0Ci0JKiArKysgL2Rldi9udWxsCi0JKiBAQCAtMSwyICswLDAgQEAKLQkqIC1JcyBpdCBhIGJpcmQ/Ci0JKiAtSXMgaXQgYSBwbGFuZT8KLQkqLwotCi0JY29uc3QgY2hhciAqb25lX3NoYSA9ICIyNmExMjVlIjsKLQljb25zdCBjaGFyICphbm90aGVyX3NoYSA9ICI3MzViNmEyIjsKLQlnaXRfdHJlZSAqb25lLCAqYW5vdGhlcjsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOwotCi0JZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3RhdHVzIik7Ci0KLQlvbmUgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIG9uZV9zaGEpOwotCWFub3RoZXIgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIGFub3RoZXJfc2hhKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fdHJlZSgmZGlmZiwgZ19yZXBvLCBvbmUsIGFub3RoZXIsIE5VTEwpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3ByaW50X3BhdGNoKGRpZmYsIGNoZWNrX3JlbW92YWxfY2IsIE5VTEwpKTsKLQotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKLQotCWdpdF90cmVlX2ZyZWUoYW5vdGhlcik7Ci0JZ2l0X3RyZWVfZnJlZShvbmUpOwotfQotCi12b2lkIHRlc3RfZGlmZl9wYXRjaF9fdG9fc3RyaW5nKHZvaWQpCi17Ci0JY29uc3QgY2hhciAqb25lX3NoYSA9ICIyNmExMjVlIjsKLQljb25zdCBjaGFyICphbm90aGVyX3NoYSA9ICI3MzViNmEyIjsKLQlnaXRfdHJlZSAqb25lLCAqYW5vdGhlcjsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOwotCWdpdF9kaWZmX3BhdGNoICpwYXRjaDsKLQljaGFyICp0ZXh0OwotCWNvbnN0IGNoYXIgKmV4cGVjdGVkID0gImRpZmYgLS1naXQgYS9zdWJkaXIudHh0IGIvc3ViZGlyLnR4dFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBlOGVlODllLi4wMDAwMDAwXG4tLS0gYS9zdWJkaXIudHh0XG4rKysgL2Rldi9udWxsXG5AQCAtMSwyICswLDAgQEBcbi1JcyBpdCBhIGJpcmQ/XG4tSXMgaXQgYSBwbGFuZT9cbiI7Ci0KLQlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKLQotCW9uZSA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgb25lX3NoYSk7Ci0JYW5vdGhlciA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgYW5vdGhlcl9zaGEpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b190cmVlKCZkaWZmLCBnX3JlcG8sIG9uZSwgYW5vdGhlciwgTlVMTCkpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDApKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkLCB0ZXh0KTsKLQotCWdpdF9fZnJlZSh0ZXh0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0JZ2l0X3RyZWVfZnJlZShhbm90aGVyKTsKLQlnaXRfdHJlZV9mcmVlKG9uZSk7Ci19Ci0KLXZvaWQgdGVzdF9kaWZmX3BhdGNoX19jb25maWdfb3B0aW9ucyh2b2lkKQotewotCWNvbnN0IGNoYXIgKm9uZV9zaGEgPSAiMjZhMTI1ZSI7IC8qIGN1cnJlbnQgSEVBRCAqLwotCWdpdF90cmVlICpvbmU7Ci0JZ2l0X2NvbmZpZyAqY2ZnOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoOwotCWNoYXIgKnRleHQ7Ci0JZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWNoYXIgKm9uZWZpbGUgPSAic3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZSI7Ci0JY29uc3QgY2hhciAqZXhwZWN0ZWQxID0gImRpZmYgLS1naXQgYy9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIGkvc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuaW5kZXggNzBiZDk0NC4uOTA2ZWU3NyAxMDA2NDRcbi0tLSBjL3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbisrKyBpL3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbkBAIC0xICsxLDIgQEBcbiBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4rc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuIjsKLQljb25zdCBjaGFyICpleHBlY3RlZDIgPSAiZGlmZiAtLWdpdCBpL3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGUgdy9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG5pbmRleCA5MDZlZTc3Li4wMTFjMzQ0IDEwMDY0NFxuLS0tIGkvc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuKysrIHcvc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuQEAgLTEsMiArMSwzIEBAXG4gc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbitzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4iOwotCWNvbnN0IGNoYXIgKmV4cGVjdGVkMyA9ICJkaWZmIC0tZ2l0IHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGUgc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuaW5kZXggOTA2ZWU3Ny4uMDExYzM0NCAxMDA2NDRcbi0tLSBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4rKysgc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuQEAgLTEsMiArMSwzIEBAXG4gc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbitzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4iOwotCWNvbnN0IGNoYXIgKmV4cGVjdGVkNCA9ICJkaWZmIC0tZ2l0IHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGUgc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuaW5kZXggNzBiZDk0NDNhZGEwLi45MDZlZTc3MTFmNGYgMTAwNjQ0XG4tLS0gc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuKysrIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbkBAIC0xICsxLDIgQEBcbiBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4rc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuIjsKLQotCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN0YXR1cyIpOwotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY2ZnLCBnX3JlcG8pKTsKLQlvbmUgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIG9uZV9zaGEpOwotCW9wdHMucGF0aHNwZWMuY291bnQgPSAxOwotCW9wdHMucGF0aHNwZWMuc3RyaW5ncyA9ICZvbmVmaWxlOwotCi0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY2ZnLCAiZGlmZi5tbmVtb25pY3ByZWZpeCIsICJ0cnVlIikpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgZ19yZXBvLCBvbmUsIE5VTEwsICZvcHRzKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQxLCB0ZXh0KTsKLQotCWdpdF9fZnJlZSh0ZXh0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQyLCB0ZXh0KTsKLQotCWdpdF9fZnJlZSh0ZXh0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJkaWZmLm5vcHJlZml4IiwgInRydWUiKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQzLCB0ZXh0KTsKLQotCWdpdF9fZnJlZSh0ZXh0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X2ludDMyKGNmZywgImNvcmUuYWJicmV2IiwgMTIpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9faW5kZXgoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMLCAmb3B0cykpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCBOVUxMLCBkaWZmLCAwKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkNCwgdGV4dCk7Ci0KLQlnaXRfX2ZyZWUodGV4dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotCi0JZ2l0X3RyZWVfZnJlZShvbmUpOwotCWdpdF9jb25maWdfZnJlZShjZmcpOwotfQotCi12b2lkIHRlc3RfZGlmZl9wYXRjaF9faHVua3NfaGF2ZV9jb3JyZWN0X2xpbmVfbnVtYmVycyh2b2lkKQotewotCWdpdF9jb25maWcgKmNmZzsKLQlnaXRfdHJlZSAqaGVhZDsKLQlnaXRfZGlmZl9vcHRpb25zIG9wdCA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOwotCWdpdF9kaWZmX3BhdGNoICpwYXRjaDsKLQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7Ci0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlOwotCWNvbnN0IGNoYXIgKmhkciwgKnRleHQ7Ci0Jc2l6ZV90IGhkcmxlbiwgaHVua2xlbiwgdGV4dGxlbjsKLQljaGFyIG9yaWdpbjsKLQlpbnQgb2xkbm8sIG5ld25vOwotCWdpdF9idWYgb2xkX2NvbnRlbnQgPSBHSVRfQlVGX0lOSVQsIGFjdHVhbCA9IEdJVF9CVUZfSU5JVDsKLQljb25zdCBjaGFyICpuZXdfY29udGVudCA9ICJUaGUgU29uZyBvZiBTZXZlbiBDaXRpZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JIFdBUyBMb3JkIG9mIENpdGllcyB2ZXJ5IHN1bXB0dW91c2x5IGJ1aWxkZWQuXG5TZXZlbiByb2FyaW5nIENpdGllcyBwYWlkIG1lIHRyaWJ1dGUgZnJvbSBhZmFyLlxuSXZvcnkgdGhlaXIgb3V0cG9zdHMgd2VyZS0tdGhlIGd1YXJkcm9vbXMgb2YgdGhlbSBnaWxkZWQsXG5BbmQgZ2Fycmlzb25lZCB3aXRoIEFtYXpvbnMgaW52aW5jaWJsZSBpbiB3YXIuXG5cblRoaXMgaXMgc29tZSBuZXcgdGV4dDtcbk5vdCBhcyBnb29kIGFzIHRoZSBvbGQgdGV4dDtcbkJ1dCBoZXJlIGl0IGlzLlxuXG5TbyB0aGV5IHdhcnJlZCBhbmQgdHJhZmZpY2tlZCBvbmx5IHllc3RlcmRheSwgbXkgQ2l0aWVzLlxuVG8tZGF5IHRoZXJlIGlzIG5vIG1hcmsgb3IgbW91bmQgb2Ygd2hlcmUgbXkgQ2l0aWVzIHN0b29kLlxuRm9yIHRoZSBSaXZlciByb3NlIGF0IG1pZG5pZ2h0IGFuZCBpdCB3YXNoZWQgYXdheSBteSBDaXRpZXMuXG5UaGV5IGFyZSBldmVuZWQgd2l0aCBBdGxhbnRpcyBhbmQgdGhlIHRvd25zIGJlZm9yZSB0aGUgRmxvb2QuXG5cblJhaW4gb24gcmFpbi1nb3JnZWQgY2hhbm5lbHMgcmFpc2VkIHRoZSB3YXRlci1sZXZlbHMgcm91bmQgdGhlbSxcbkZyZXNoZXQgYmFja2VkIG9uIGZyZXNoZXQgc3dlbGxlZCBhbmQgc3dlcHQgdGhlaXIgd29ybGQgZnJvbSBzaWdodCxcblRpbGwgdGhlIGVtYm9sZGVuZWQgZmxvb2RzIGxpbmtlZCBhcm1zIGFuZCwgZmxhc2hpbmcgZm9yd2FyZCwgZHJvd25lZCB0aGVtLS1cbkRyb3duZWQgbXkgU2V2ZW4gQ2l0aWVzIGFuZCB0aGVpciBwZW9wbGVzIGluIG9uZSBuaWdodCFcblxuTG93IGFtb25nIHRoZSBhbGRlcnMgbGllIHRoZWlyIGRlcmVsaWN0IGZvdW5kYXRpb25zLFxuVGhlIGJlYW1zIHdoZXJlaW4gdGhleSB0cnVzdGVkIGFuZCB0aGUgcGxpbnRocyB3aGVyZW9uIHRoZXkgYnVpbHQtLVxuTXkgcnVsZXJzIGFuZCB0aGVpciB0cmVhc3VyZSBhbmQgdGhlaXIgdW5ib3JuIHBvcHVsYXRpb25zLFxuRGVhZCwgZGVzdHJveWVkLCBhYm9ydGVkLCBhbmQgZGVmaWxlZCB3aXRoIG11ZCBhbmQgc2lsdCFcblxuQW5vdGhlciByZXBsYWNlbWVudDtcbkJyZWFraW5nIHVwIHRoZSBwb2VtO1xuR2VuZXJhdGluZyBzb21lIGh1bmtzLlxuXG5UbyB0aGUgc291bmQgb2YgdHJ1bXBldHMgc2hhbGwgdGhlaXIgc2VlZCByZXN0b3JlIG15IENpdGllc1xuV2VhbHRoeSBhbmQgd2VsbC13ZWFwb25lZCwgdGhhdCBvbmNlIG1vcmUgbWF5IEkgYmVob2xkXG5BbGwgdGhlIHdvcmxkIGdvIHNvZnRseSB3aGVuIGl0IHdhbGtzIGJlZm9yZSBteSBDaXRpZXMsXG5BbmQgdGhlIGhvcnNlcyBhbmQgdGhlIGNoYXJpb3RzIGZsZWVpbmcgZnJvbSB0aGVtIGFzIG9mIG9sZCFcblxuICAtLSBSdWR5YXJkIEtpcGxpbmdcbiI7Ci0KLQlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJyZW5hbWVzIik7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX25ldygmY2ZnKSk7Ci0JZ2l0X3JlcG9zaXRvcnlfc2V0X2NvbmZpZyhnX3JlcG8sIGNmZyk7Ci0KLQljbF9naXRfcGFzcygKLQkJZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZvbGRfY29udGVudCwgInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiKSk7Ci0KLQljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiLCBuZXdfY29udGVudCk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJmhlYWQsIGdfcmVwbykpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIGhlYWQsICZvcHQpKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCAmZGVsdGEsIGRpZmYsIDApKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9NT0RJRklFRCwgKGludClkZWx0YS0+c3RhdHVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgyLCAoaW50KWdpdF9kaWZmX3BhdGNoX251bV9odW5rcyhwYXRjaCkpOwotCi0JLyogY2hlY2sgaHVuayAwICovCi0KLQljbF9naXRfcGFzcygKLQkJZ2l0X2RpZmZfcGF0Y2hfZ2V0X2h1bmsoJnJhbmdlLCAmaGRyLCAmaGRybGVuLCAmaHVua2xlbiwgcGF0Y2gsIDApKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKDE4LCAoaW50KWh1bmtsZW4pOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koNiwgKGludClyYW5nZS0+b2xkX3N0YXJ0KTsKLQljbF9hc3NlcnRfZXF1YWxfaSgxNSwgKGludClyYW5nZS0+b2xkX2xpbmVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg2LCAoaW50KXJhbmdlLT5uZXdfc3RhcnQpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDksIChpbnQpcmFuZ2UtPm5ld19saW5lcyk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgxOCwgKGludClnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwYXRjaCwgMCkpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJJm9yaWdpbiwgJnRleHQsICZ0ZXh0bGVuLCAmb2xkbm8sICZuZXdubywgcGF0Y2gsIDAsIDApKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0NPTlRFWFQsIChpbnQpb3JpZ2luKTsKLQljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCB0ZXh0LCB0ZXh0bGVuKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoIkl2b3J5IHRoZWlyIG91dHBvc3RzIHdlcmUtLXRoZSBndWFyZHJvb21zIG9mIHRoZW0gZ2lsZGVkLFxuIiwgYWN0dWFsLnB0cik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koNiwgb2xkbm8pOwotCWNsX2Fzc2VydF9lcXVhbF9pKDYsIG5ld25vKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCSZvcmlnaW4sICZ0ZXh0LCAmdGV4dGxlbiwgJm9sZG5vLCAmbmV3bm8sIHBhdGNoLCAwLCAzKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RJRkZfTElORV9ERUxFVElPTiwgKGludClvcmlnaW4pOwotCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0KCZhY3R1YWwsIHRleHQsIHRleHRsZW4pKTsKLQljbF9hc3NlcnRfZXF1YWxfcygiQWxsIHRoZSB3b3JsZCB3ZW50IHNvZnRseSB3aGVuIGl0IHdhbGtlZCBiZWZvcmUgbXkgQ2l0aWVzLS1cbiIsIGFjdHVhbC5wdHIpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDksIG9sZG5vKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgtMSwgbmV3bm8pOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJJm9yaWdpbiwgJnRleHQsICZ0ZXh0bGVuLCAmb2xkbm8sICZuZXdubywgcGF0Y2gsIDAsIDEyKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RJRkZfTElORV9BRERJVElPTiwgKGludClvcmlnaW4pOwotCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0KCZhY3R1YWwsIHRleHQsIHRleHRsZW4pKTsKLQljbF9hc3NlcnRfZXF1YWxfcygiVGhpcyBpcyBzb21lIG5ldyB0ZXh0O1xuIiwgYWN0dWFsLnB0cik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koLTEsIG9sZG5vKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg5LCBuZXdubyk7Ci0KLQkvKiBjaGVjayBodW5rIDEgKi8KLQotCWNsX2dpdF9wYXNzKAotCQlnaXRfZGlmZl9wYXRjaF9nZXRfaHVuaygmcmFuZ2UsICZoZHIsICZoZHJsZW4sICZodW5rbGVuLCBwYXRjaCwgMSkpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koMTgsIChpbnQpaHVua2xlbik7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgzMSwgKGludClyYW5nZS0+b2xkX3N0YXJ0KTsKLQljbF9hc3NlcnRfZXF1YWxfaSgxNSwgKGludClyYW5nZS0+b2xkX2xpbmVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgyNSwgKGludClyYW5nZS0+bmV3X3N0YXJ0KTsKLQljbF9hc3NlcnRfZXF1YWxfaSg5LCAoaW50KXJhbmdlLT5uZXdfbGluZXMpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koMTgsIChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocGF0Y2gsIDEpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCSZvcmlnaW4sICZ0ZXh0LCAmdGV4dGxlbiwgJm9sZG5vLCAmbmV3bm8sIHBhdGNoLCAxLCAwKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RJRkZfTElORV9DT05URVhULCAoaW50KW9yaWdpbik7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXQoJmFjdHVhbCwgdGV4dCwgdGV4dGxlbikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKCJNeSBydWxlcnMgYW5kIHRoZWlyIHRyZWFzdXJlIGFuZCB0aGVpciB1bmJvcm4gcG9wdWxhdGlvbnMsXG4iLCBhY3R1YWwucHRyKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgzMSwgb2xkbm8pOwotCWNsX2Fzc2VydF9lcXVhbF9pKDI1LCBuZXdubyk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9nZXRfbGluZV9pbl9odW5rKAotCQkmb3JpZ2luLCAmdGV4dCwgJnRleHRsZW4sICZvbGRubywgJm5ld25vLCBwYXRjaCwgMSwgMykpOwotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfREVMRVRJT04sIChpbnQpb3JpZ2luKTsKLQljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCB0ZXh0LCB0ZXh0bGVuKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoIlRoZSBEYXVnaHRlcnMgb2YgdGhlIFBhbGFjZSB3aG9tIHRoZXkgY2hlcmlzaGVkIGluIG15IENpdGllcyxcbiIsIGFjdHVhbC5wdHIpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDM0LCBvbGRubyk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koLTEsIG5ld25vKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCSZvcmlnaW4sICZ0ZXh0LCAmdGV4dGxlbiwgJm9sZG5vLCAmbmV3bm8sIHBhdGNoLCAxLCAxMikpOwotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfQURESVRJT04sIChpbnQpb3JpZ2luKTsKLQljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCB0ZXh0LCB0ZXh0bGVuKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoIkFub3RoZXIgcmVwbGFjZW1lbnQ7XG4iLCBhY3R1YWwucHRyKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgtMSwgb2xkbm8pOwotCWNsX2Fzc2VydF9lcXVhbF9pKDI4LCBuZXdubyk7Ci0KLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQkvKiBMZXQncyBjaGVjayBsaW5lIG51bWJlcnMgd2hlbiB0aGVyZSBpcyBubyBuZXdsaW5lICovCi0KLQlnaXRfYnVmX3J0cmltKCZvbGRfY29udGVudCk7Ci0JY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0Iiwgb2xkX2NvbnRlbnQucHRyKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBoZWFkLCAmb3B0KSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKCZwYXRjaCwgJmRlbHRhLCBkaWZmLCAwKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIChpbnQpZGVsdGEtPnN0YXR1cyk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocGF0Y2gpKTsKLQotCS8qIGNoZWNrIGh1bmsgMCAqLwotCi0JY2xfZ2l0X3Bhc3MoCi0JCWdpdF9kaWZmX3BhdGNoX2dldF9odW5rKCZyYW5nZSwgJmhkciwgJmhkcmxlbiwgJmh1bmtsZW4sIHBhdGNoLCAwKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSg2LCAoaW50KWh1bmtsZW4pOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koNDYsIChpbnQpcmFuZ2UtPm9sZF9zdGFydCk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koNCwgKGludClyYW5nZS0+b2xkX2xpbmVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg0NiwgKGludClyYW5nZS0+bmV3X3N0YXJ0KTsKLQljbF9hc3NlcnRfZXF1YWxfaSg0LCAoaW50KXJhbmdlLT5uZXdfbGluZXMpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koNiwgKGludClnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwYXRjaCwgMCkpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJJm9yaWdpbiwgJnRleHQsICZ0ZXh0bGVuLCAmb2xkbm8sICZuZXdubywgcGF0Y2gsIDAsIDEpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0NPTlRFWFQsIChpbnQpb3JpZ2luKTsKLQljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCB0ZXh0LCB0ZXh0bGVuKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoIkFuZCB0aGUgaG9yc2VzIGFuZCB0aGUgY2hhcmlvdHMgZmxlZWluZyBmcm9tIHRoZW0gYXMgb2Ygb2xkIVxuIiwgYWN0dWFsLnB0cik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koNDcsIG9sZG5vKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg0NywgbmV3bm8pOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJJm9yaWdpbiwgJnRleHQsICZ0ZXh0bGVuLCAmb2xkbm8sICZuZXdubywgcGF0Y2gsIDAsIDIpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0NPTlRFWFQsIChpbnQpb3JpZ2luKTsKLQljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCB0ZXh0LCB0ZXh0bGVuKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoIlxuIiwgYWN0dWFsLnB0cik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koNDgsIG9sZG5vKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg0OCwgbmV3bm8pOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJJm9yaWdpbiwgJnRleHQsICZ0ZXh0bGVuLCAmb2xkbm8sICZuZXdubywgcGF0Y2gsIDAsIDMpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0RFTEVUSU9OLCAoaW50KW9yaWdpbik7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXQoJmFjdHVhbCwgdGV4dCwgdGV4dGxlbikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKCIgIC0tIFJ1ZHlhcmQgS2lwbGluZ1xuIiwgYWN0dWFsLnB0cik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koNDksIG9sZG5vKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgtMSwgbmV3bm8pOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJJm9yaWdpbiwgJnRleHQsICZ0ZXh0bGVuLCAmb2xkbm8sICZuZXdubywgcGF0Y2gsIDAsIDQpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0FERElUSU9OLCAoaW50KW9yaWdpbik7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXQoJmFjdHVhbCwgdGV4dCwgdGV4dGxlbikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKCIgIC0tIFJ1ZHlhcmQgS2lwbGluZyIsIGFjdHVhbC5wdHIpOwotCWNsX2Fzc2VydF9lcXVhbF9pKC0xLCBvbGRubyk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koNDksIG5ld25vKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCSZvcmlnaW4sICZ0ZXh0LCAmdGV4dGxlbiwgJm9sZG5vLCAmbmV3bm8sIHBhdGNoLCAwLCA1KSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RJRkZfTElORV9ERUxfRU9GTkwsIChpbnQpb3JpZ2luKTsKLQljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCB0ZXh0LCB0ZXh0bGVuKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoIlxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiwgYWN0dWFsLnB0cik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koLTEsIG9sZG5vKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg0OSwgbmV3bm8pOwotCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotCi0JZ2l0X2J1Zl9mcmVlKCZhY3R1YWwpOwotCWdpdF9idWZfZnJlZSgmb2xkX2NvbnRlbnQpOwotCWdpdF90cmVlX2ZyZWUoaGVhZCk7Ci0JZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX3NpbmdsZV9wYXRjaF9zdGF0cygKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbywgc2l6ZV90IGh1bmtzLAotCXNpemVfdCBhZGRzLCBzaXplX3QgZGVscywgc2l6ZV90IGN0eHQsCi0JY29uc3QgY2hhciAqZXhwZWN0ZWQpCi17Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7Ci0JY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOwotCXNpemVfdCBhY3R1YWxfY3R4dCwgYWN0dWFsX2FkZHMsIGFjdHVhbF9kZWxzOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgcmVwbywgTlVMTCwgTlVMTCkpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsICZkZWx0YSwgZGlmZiwgMCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9NT0RJRklFRCwgKGludClkZWx0YS0+c3RhdHVzKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKChpbnQpaHVua3MsIChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKSk7Ci0KLQljbF9naXRfcGFzcyggZ2l0X2RpZmZfcGF0Y2hfbGluZV9zdGF0cygKLQkJJmFjdHVhbF9jdHh0LCAmYWN0dWFsX2FkZHMsICZhY3R1YWxfZGVscywgcGF0Y2gpICk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfc3ooY3R4dCwgYWN0dWFsX2N0eHQpOwotCWNsX2Fzc2VydF9lcXVhbF9zeihhZGRzLCBhY3R1YWxfYWRkcyk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3N6KGRlbHMsIGFjdHVhbF9kZWxzKTsKLQotCWlmIChleHBlY3RlZCAhPSBOVUxMKSB7Ci0JCWNoYXIgKnRleHQ7Ci0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKLQkJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQsIHRleHQpOwotCQlnaXRfX2ZyZWUodGV4dCk7Ci0JfQotCi0JLyogd2FsayBsaW5lcyBpbiBodW5rIHdpdGggYmFzaWMgc2FuaXR5IGNoZWNrcyAqLwotCWZvciAoOyBodW5rcyA+IDA7IC0taHVua3MpIHsKLQkJc2l6ZV90IGksIG1heF9pOwotCQlpbnQgbGFzdG9sZG5vID0gLTEsIG9sZG5vLCBsYXN0bmV3bm8gPSAtMSwgbmV3bm87Ci0JCWNoYXIgb3JpZ2luOwotCi0JCW1heF9pID0gZ2l0X2RpZmZfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocGF0Y2gsIGh1bmtzIC0gMSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG1heF9pOyArK2kpIHsKLQkJCWludCBleHBlY3RlZCA9IDE7Ci0KLQkJCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCQkJJm9yaWdpbiwgTlVMTCwgTlVMTCwgJm9sZG5vLCAmbmV3bm8sIHBhdGNoLCBodW5rcyAtIDEsIGkpKTsKLQotCQkJaWYgKG9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0FERF9FT0ZOTCB8fAotCQkJCW9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0RFTF9FT0ZOTCB8fAotCQkJCW9yaWdpbiA9PSBHSVRfRElGRl9MSU5FX0NPTlRFWFRfRU9GTkwpCi0JCQkJZXhwZWN0ZWQgPSAwOwotCi0JCQlpZiAob2xkbm8gPj0gMCkgewotCQkJCWlmIChsYXN0b2xkbm8gPj0gMCkKLQkJCQkJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWQsIG9sZG5vIC0gbGFzdG9sZG5vKTsKLQkJCQlsYXN0b2xkbm8gPSBvbGRubzsKLQkJCX0KLQkJCWlmIChuZXdubyA+PSAwKSB7Ci0JCQkJaWYgKGxhc3RuZXdubyA+PSAwKQotCQkJCQljbF9hc3NlcnRfZXF1YWxfaShleHBlY3RlZCwgbmV3bm8gLSBsYXN0bmV3bm8pOwotCQkJCWxhc3RuZXdubyA9IG5ld25vOwotCQkJfQotCQl9Ci0JfQotCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotfQotCi12b2lkIHRlc3RfZGlmZl9wYXRjaF9fbGluZV9jb3VudHNfd2l0aF9lb2ZubCh2b2lkKQotewotCWdpdF9jb25maWcgKmNmZzsKLQlnaXRfYnVmIGNvbnRlbnQgPSBHSVRfQlVGX0lOSVQ7Ci0JY29uc3QgY2hhciAqZW5kOwotCWdpdF9pbmRleCAqaW5kZXg7Ci0KLQlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJyZW5hbWVzIik7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX25ldygmY2ZnKSk7Ci0JZ2l0X3JlcG9zaXRvcnlfc2V0X2NvbmZpZyhnX3JlcG8sIGNmZyk7Ci0KLQljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmNvbnRlbnQsICJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IikpOwotCi0JLyogcmVtb3ZlIGZpcnN0IGxpbmUgKi8KLQotCWVuZCA9IGdpdF9idWZfY3N0cigmY29udGVudCkgKyBnaXRfYnVmX2ZpbmQoJmNvbnRlbnQsICdcbicpICsgMTsKLQlnaXRfYnVmX2NvbnN1bWUoJmNvbnRlbnQsIGVuZCk7Ci0JY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IiwgY29udGVudC5wdHIpOwotCi0JY2hlY2tfc2luZ2xlX3BhdGNoX3N0YXRzKGdfcmVwbywgMSwgMCwgMSwgMywgTlVMTCk7Ci0KLQkvKiByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLwotCi0JZ2l0X2J1Zl9ydHJpbSgmY29udGVudCk7Ci0JY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IiwgY29udGVudC5wdHIpOwotCi0JY2hlY2tfc2luZ2xlX3BhdGNoX3N0YXRzKGdfcmVwbywgMiwgMSwgMiwgNiwgTlVMTCk7Ci0KLQkvKiBhZGQgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKLQljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInNvbmdvZjdjaXRpZXMudHh0IikpOwotCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOwotCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKLQotCWNsX2dpdF9wYXNzKGdpdF9idWZfcHV0YygmY29udGVudCwgJ1xuJykpOwotCWNsX2dpdF9yZXdyaXRlZmlsZSgicmVuYW1lcy9zb25nb2Y3Y2l0aWVzLnR4dCIsIGNvbnRlbnQucHRyKTsKLQotCWNoZWNrX3NpbmdsZV9wYXRjaF9zdGF0cyhnX3JlcG8sIDEsIDEsIDEsIDMsIE5VTEwpOwotCi0JLyogbm8gdHJhaWxpbmcgd2hpdGVzcGFjZSBhcyBjb250ZXh0IGxpbmUgKi8KLQotCXsKLQkJLyogd2FsayBiYWNrIGEgY291cGxlIGxpbmVzLCBtYWtlIHNwYWNlIGFuZCBpbnNlcnQgY2hhciAqLwotCQljaGFyICpzY2FuID0gY29udGVudC5wdHIgKyBjb250ZW50LnNpemU7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHsKLQkJCWZvciAoLS1zY2FuOyBzY2FuID4gY29udGVudC5wdHIgJiYgKnNjYW4gIT0gJ1xuJzsgLS1zY2FuKQotCQkJCS8qIHNlZWsgdG8gcHJldiBcbiAqLzsKLQkJfQotCQljbF9hc3NlcnQoc2NhbiA+IGNvbnRlbnQucHRyKTsKLQotCQkvKiBvdmVyd3JpdGUgdHJhaWxpbmcgXG4gd2l0aCByaWdodC1zaGlmdGVkIGNvbnRlbnQgKi8KLQkJbWVtbW92ZShzY2FuICsgMSwgc2NhbiwgY29udGVudC5zaXplIC0gKHNjYW4gLSBjb250ZW50LnB0cikgLSAxKTsKLQkJLyogaW5zZXJ0ICcjJyBjaGFyIGludG8gc3BhY2Ugd2UgY3JlYXRlZCAqLwotCQlzY2FuWzFdID0gJyMnOwotCX0KLQljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiLCBjb250ZW50LnB0cik7Ci0KLQljaGVja19zaW5nbGVfcGF0Y2hfc3RhdHMoCi0JCWdfcmVwbywgMSwgMSwgMSwgNiwKLQkJLyogYmVsb3cgaXMgcGFzdGVkIG91dHB1dCBvZiAnZ2l0IGRpZmYnIHdpdGggZm4gY29udGV4dCByZW1vdmVkICovCi0JCSJkaWZmIC0tZ2l0IGEvc29uZ29mN2NpdGllcy50eHQgYi9zb25nb2Y3Y2l0aWVzLnR4dFxuIgotCQkiaW5kZXggMzc4YTdkOS4uM2QwMTU0ZSAxMDA2NDRcbiIKLQkJIi0tLSBhL3NvbmdvZjdjaXRpZXMudHh0XG4iCi0JCSIrKysgYi9zb25nb2Y3Y2l0aWVzLnR4dFxuIgotCQkiQEAgLTQyLDcgKzQyLDcgQEAgV2l0aCBwZW9wbGVzIHVuZGVmZWF0ZWQgb2YgdGhlIGRhcmssIGVuZHVyaW5nIGJsb29kLlxuIgotCQkiIFxuIgotCQkiIFRvIHRoZSBzb3VuZCBvZiB0cnVtcGV0cyBzaGFsbCB0aGVpciBzZWVkIHJlc3RvcmUgbXkgQ2l0aWVzXG4iCi0JCSIgV2VhbHRoeSBhbmQgd2VsbC13ZWFwb25lZCwgdGhhdCBvbmNlIG1vcmUgbWF5IEkgYmVob2xkXG4iCi0JCSItQWxsIHRoZSB3b3JsZCBnbyBzb2Z0bHkgd2hlbiBpdCB3YWxrcyBiZWZvcmUgbXkgQ2l0aWVzLFxuIgotCQkiKyNBbGwgdGhlIHdvcmxkIGdvIHNvZnRseSB3aGVuIGl0IHdhbGtzIGJlZm9yZSBteSBDaXRpZXMsXG4iCi0JCSIgQW5kIHRoZSBob3JzZXMgYW5kIHRoZSBjaGFyaW90cyBmbGVlaW5nIGZyb20gdGhlbSBhcyBvZiBvbGQhXG4iCi0JCSIgXG4iCi0JCSIgICAtLSBSdWR5YXJkIEtpcGxpbmdcbiIKLQkJIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIpOwotCi0JZ2l0X2J1Zl9mcmVlKCZjb250ZW50KTsKLQlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvZGlmZi9zdWJtb2R1bGVzLmMgYi90ZXN0cy1jbGFyL2RpZmYvc3VibW9kdWxlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTUyYTYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvZGlmZi9zdWJtb2R1bGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgotI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJwb3NpeC5oIgotI2luY2x1ZGUgIi4uL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5oIgotCi1zdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkIHNldHVwX3N1Ym1vZHVsZXModm9pZCkKLXsKLQlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdWJtb2R1bGVzIik7Ci0JY2xfZml4dHVyZV9zYW5kYm94KCJ0ZXN0cmVwby5naXQiKTsKLQlyZXdyaXRlX2dpdG1vZHVsZXMoZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihnX3JlcG8pKTsKLQlwX3JlbmFtZSgic3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkIiwgInN1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdCIpOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cF9zdWJtb2R1bGVzMih2b2lkKQotewotCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN1Ym1vZDIiKTsKLQotCWNsX2ZpeHR1cmVfc2FuZGJveCgic3VibW9kMl90YXJnZXQiKTsKLQlwX3JlbmFtZSgic3VibW9kMl90YXJnZXQvLmdpdHRlZCIsICJzdWJtb2QyX3RhcmdldC8uZ2l0Iik7Ci0KLQlyZXdyaXRlX2dpdG1vZHVsZXMoZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihnX3JlcG8pKTsKLQlwX3JlbmFtZSgic3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQiLCAic3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXQiKTsKLQlwX3JlbmFtZSgic3VibW9kMi9ub3QvLmdpdHRlZCIsICJzdWJtb2QyL25vdC8uZ2l0Iik7Ci19Ci0KLXZvaWQgdGVzdF9kaWZmX3N1Ym1vZHVsZXNfX2luaXRpYWxpemUodm9pZCkKLXsKLX0KLQotdm9pZCB0ZXN0X2RpZmZfc3VibW9kdWxlc19fY2xlYW51cCh2b2lkKQotewotCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKLQotCWNsX2ZpeHR1cmVfY2xlYW51cCgidGVzdHJlcG8uZ2l0Iik7Ci0JY2xfZml4dHVyZV9jbGVhbnVwKCJzdWJtb2QyX3RhcmdldCIpOwotfQotCi1zdGF0aWMgdm9pZCBjaGVja19kaWZmX3BhdGNoZXMoZ2l0X2RpZmZfbGlzdCAqZGlmZiwgY29uc3QgY2hhciAqKmV4cGVjdGVkKQotewotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2ggPSBOVUxMOwotCXNpemVfdCBkLCBudW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7Ci0JY2hhciAqcGF0Y2hfdGV4dDsKLQotCWZvciAoZCA9IDA7IGQgPCBudW1fZDsgKytkLCBnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKSkgewotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCAmZGVsdGEsIGRpZmYsIGQpKTsKLQotCQlpZiAoZGVsdGEtPnN0YXR1cyA9PSBHSVRfREVMVEFfVU5NT0RJRklFRCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChleHBlY3RlZFtkXSAmJiAhc3RyY21wKGV4cGVjdGVkW2RdLCAiPFNLSVA+IikpCi0JCQljb250aW51ZTsKLQkJaWYgKGV4cGVjdGVkW2RdICYmICFzdHJjbXAoZXhwZWN0ZWRbZF0sICI8RU5EPiIpKQotCQkJY2xfYXNzZXJ0KDApOwotCi0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX3RvX3N0cigmcGF0Y2hfdGV4dCwgcGF0Y2gpKTsKLQotCQljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZFtkXSwgcGF0Y2hfdGV4dCk7Ci0JCWdpdF9fZnJlZShwYXRjaF90ZXh0KTsKLQl9Ci0KLQljbF9hc3NlcnQoZXhwZWN0ZWRbZF0gJiYgIXN0cmNtcChleHBlY3RlZFtkXSwgIjxFTkQ+IikpOwotfQotCi12b2lkIHRlc3RfZGlmZl9zdWJtb2R1bGVzX191bm1vZGlmaWVkX3N1Ym1vZHVsZSh2b2lkKQotewotCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKLQlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRbXSA9IHsKLQkJIjxTS0lQPiIsIC8qIC5naXRtb2R1bGVzICovCi0JCU5VTEwsIC8qIGFkZGVkICovCi0JCU5VTEwsIC8qIGlnbm9yZWQgKi8KLQkJImRpZmYgLS1naXQgYS9tb2RpZmllZCBiL21vZGlmaWVkXG5pbmRleCAwOTJiZmI5Li40NTIyMTZlIDEwMDY0NFxuLS0tIGEvbW9kaWZpZWRcbisrKyBiL21vZGlmaWVkXG5AQCAtMSArMSwyIEBAXG4teW9cbitjaGFuZ2VkXG4rXG4iLCAvKiBtb2RpZmllZCAqLwotCQlOVUxMLCAvKiB0ZXN0cmVwby5naXQgKi8KLQkJTlVMTCwgLyogdW5tb2RpZmllZCAqLwotCQlOVUxMLCAvKiB1bnRyYWNrZWQgKi8KLQkJIjxFTkQ+IgotCX07Ci0KLQlzZXR1cF9zdWJtb2R1bGVzKCk7Ci0KLQlvcHRzLmZsYWdzID0gR0lUX0RJRkZfSU5DTFVERV9JR05PUkVEIHwKLQkJR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQgfAotCQlHSVRfRElGRl9JTkNMVURFX1VOTU9ESUZJRUQ7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7Ci0JY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci19Ci0KLXZvaWQgdGVzdF9kaWZmX3N1Ym1vZHVsZXNfX2RpcnR5X3N1Ym1vZHVsZSh2b2lkKQotewotCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKLQlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRbXSA9IHsKLQkJIjxTS0lQPiIsIC8qIC5naXRtb2R1bGVzICovCi0JCU5VTEwsIC8qIGFkZGVkICovCi0JCU5VTEwsIC8qIGlnbm9yZWQgKi8KLQkJImRpZmYgLS1naXQgYS9tb2RpZmllZCBiL21vZGlmaWVkXG5pbmRleCAwOTJiZmI5Li40NTIyMTZlIDEwMDY0NFxuLS0tIGEvbW9kaWZpZWRcbisrKyBiL21vZGlmaWVkXG5AQCAtMSArMSwyIEBAXG4teW9cbitjaGFuZ2VkXG4rXG4iLCAvKiBtb2RpZmllZCAqLwotCQkiZGlmZiAtLWdpdCBhL3Rlc3RyZXBvIGIvdGVzdHJlcG9cbmluZGV4IGE2NWZlZGYuLmE2NWZlZGYgMTYwMDAwXG4tLS0gYS90ZXN0cmVwb1xuKysrIGIvdGVzdHJlcG9cbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MFxuK1N1YnByb2plY3QgY29tbWl0IGE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAtZGlydHlcbiIsIC8qIHRlc3RyZXBvLmdpdCAqLwotCQlOVUxMLCAvKiB1bm1vZGlmaWVkICovCi0JCU5VTEwsIC8qIHVudHJhY2tlZCAqLwotCQkiPEVORD4iCi0JfTsKLQotCXNldHVwX3N1Ym1vZHVsZXMoKTsKLQotCWNsX2dpdF9yZXdyaXRlZmlsZSgic3VibW9kdWxlcy90ZXN0cmVwby9SRUFETUUiLCAiaGV5aGV5aGV5Iik7Ci0JY2xfZ2l0X21rZmlsZSgic3VibW9kdWxlcy90ZXN0cmVwby9hbGxfbmV3LnR4dCIsICJuZXZlciBzZWVuIGJlZm9yZSIpOwotCi0Jb3B0cy5mbGFncyA9IEdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRCB8Ci0JCUdJVF9ESUZGX0lOQ0xVREVfVU5UUkFDS0VEIHwKLQkJR0lUX0RJRkZfSU5DTFVERV9VTk1PRElGSUVEOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOwotCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotfQotCi12b2lkIHRlc3RfZGlmZl9zdWJtb2R1bGVzX19zdWJtb2QyX2luZGV4X3RvX3dkKHZvaWQpCi17Ci0JZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOwotCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZFtdID0gewotCQkiPFNLSVA+IiwgLyogLmdpdG1vZHVsZXMgKi8KLQkJTlVMTCwgLyogbm90LXN1Ym1vZHVsZSAqLwotCQlOVUxMLCAvKiBub3QgKi8KLQkJImRpZmYgLS1naXQgYS9zbV9jaGFuZ2VkX2ZpbGUgYi9zbV9jaGFuZ2VkX2ZpbGVcbmluZGV4IDQ4MDA5NTguLjQ4MDA5NTggMTYwMDAwXG4tLS0gYS9zbV9jaGFuZ2VkX2ZpbGVcbisrKyBiL3NtX2NoYW5nZWRfZmlsZVxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMC1kaXJ0eVxuIiwgLyogc21fY2hhbmdlZF9maWxlICovCi0JCSJkaWZmIC0tZ2l0IGEvc21fY2hhbmdlZF9oZWFkIGIvc21fY2hhbmdlZF9oZWFkXG5pbmRleCA0ODAwOTU4Li4zZDkzODZjIDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF9oZWFkXG4rKysgYi9zbV9jaGFuZ2VkX2hlYWRcbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMFxuK1N1YnByb2plY3QgY29tbWl0IDNkOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDdcbiIsIC8qIHNtX2NoYW5nZWRfaGVhZCAqLwotCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfaW5kZXggYi9zbV9jaGFuZ2VkX2luZGV4XG5pbmRleCA0ODAwOTU4Li40ODAwOTU4IDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF9pbmRleFxuKysrIGIvc21fY2hhbmdlZF9pbmRleFxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMC1kaXJ0eVxuIiwgLyogc21fY2hhbmdlZF9pbmRleCAqLwotCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUgYi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlXG5pbmRleCA0ODAwOTU4Li40ODAwOTU4IDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZVxuKysrIGIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZVxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMC1kaXJ0eVxuIiwgLyogc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZSAqLwotCQkiZGlmZiAtLWdpdCBhL3NtX21pc3NpbmdfY29tbWl0cyBiL3NtX21pc3NpbmdfY29tbWl0c1xuaW5kZXggNDgwMDk1OC4uNWU0OTYzNSAxNjAwMDBcbi0tLSBhL3NtX21pc3NpbmdfY29tbWl0c1xuKysrIGIvc21fbWlzc2luZ19jb21taXRzXG5AQCAtMSArMSBAQFxuLVN1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbitTdWJwcm9qZWN0IGNvbW1pdCA1ZTQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkXG4iLCAvKiBzbV9taXNzaW5nX2NvbW1pdHMgKi8KLQkJIjxFTkQ+IgotCX07Ci0KLQlzZXR1cF9zdWJtb2R1bGVzMigpOwotCi0Jb3B0cy5mbGFncyA9IEdJVF9ESUZGX0lOQ0xVREVfVU5UUkFDS0VEOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOwotCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOwotfQotCi12b2lkIHRlc3RfZGlmZl9zdWJtb2R1bGVzX19zdWJtb2QyX2hlYWRfdG9faW5kZXgodm9pZCkKLXsKLQlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X3RyZWUgKmhlYWQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkW10gPSB7Ci0JCSI8U0tJUD4iLCAvKiAuZ2l0bW9kdWxlcyAqLwotCQkiZGlmZiAtLWdpdCBhL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkIGIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWRcbm5ldyBmaWxlIG1vZGUgMTYwMDAwXG5pbmRleCAwMDAwMDAwLi40ODAwOTU4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9zbV9hZGRlZF9hbmRfdW5jb21taXRlZFxuQEAgLTAsMCArMSBAQFxuK1N1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbiIsIC8qIHNtX2FkZGVkX2FuZF91bmNvbW1pdGVkICovCi0JCSI8RU5EPiIKLQl9OwotCi0Jc2V0dXBfc3VibW9kdWxlczIoKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmaGVhZCwgZ19yZXBvKSk7Ci0KLQlvcHRzLmZsYWdzID0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7Ci0KLQljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZkaWZmLCBnX3JlcG8sIGhlYWQsIE5VTEwsICZvcHRzKSk7Ci0JY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7Ci0KLQlnaXRfdHJlZV9mcmVlKGhlYWQpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9uZXR3b3JrL3JlbW90ZS9sb2NhbC5jIGIvdGVzdHMtY2xhci9uZXR3b3JrL3JlbW90ZS9sb2NhbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2I4YTI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvbmV0d29yay9yZW1vdGUvbG9jYWwuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0jaW5jbHVkZSAiYnVmZmVyLmgiCi0jaW5jbHVkZSAicGF0aC5oIgotI2luY2x1ZGUgInBvc2l4LmgiCi0KLXN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqcmVwbzsKLXN0YXRpYyBnaXRfYnVmIGZpbGVfcGF0aF9idWYgPSBHSVRfQlVGX0lOSVQ7Ci1zdGF0aWMgZ2l0X3JlbW90ZSAqcmVtb3RlOwotCi12b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfbG9jYWxfX2luaXRpYWxpemUodm9pZCkKLXsKLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbml0KCZyZXBvLCAicmVtb3RlbG9jYWwvIiwgMCkpOwotCWNsX2Fzc2VydChyZXBvICE9IE5VTEwpOwotfQotCi12b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfbG9jYWxfX2NsZWFudXAodm9pZCkKLXsKLQlnaXRfYnVmX2ZyZWUoJmZpbGVfcGF0aF9idWYpOwotCi0JZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7Ci0JcmVtb3RlID0gTlVMTDsKLQotCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Ci0JcmVwbyA9IE5VTEw7Ci0KLQljbF9maXh0dXJlX2NsZWFudXAoInJlbW90ZWxvY2FsIik7Ci19Ci0KLXN0YXRpYyBpbnQgY291bnRfcmVmX19jYihnaXRfcmVtb3RlX2hlYWQgKmhlYWQsIHZvaWQgKnBheWxvYWQpCi17Ci0JaW50ICpjb3VudCA9IChpbnQgKilwYXlsb2FkOwotCi0JKHZvaWQpaGVhZDsKLQkoKmNvdW50KSsrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZW5zdXJlX3BlZWxlZF9fY2IoZ2l0X3JlbW90ZV9oZWFkICpoZWFkLCB2b2lkICpwYXlsb2FkKQotewotCUdJVF9VTlVTRUQocGF5bG9hZCk7Ci0KLQlpZihzdHJjbXAoaGVhZC0+bmFtZSwgInJlZnMvdGFncy90ZXN0Xnt9IikgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gZ2l0X29pZF9zdHJlcSgmaGVhZC0+b2lkLCAiZTkwODEwYjhkZjNlODBjNDEzZDkwM2Y2MzE2NDNjNzE2ODg3MTM4ZCIpOwotfQotCi1zdGF0aWMgdm9pZCBjb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY29uc3QgY2hhciAqbG9jYWxfcmVwb3NpdG9yeSkKLXsKLQlnaXRfYnVmX3NldHMoJmZpbGVfcGF0aF9idWYsIGNsX2dpdF9wYXRoX3VybChsb2NhbF9yZXBvc2l0b3J5KSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2NyZWF0ZV9pbm1lbW9yeSgmcmVtb3RlLCByZXBvLCBOVUxMLCBnaXRfYnVmX2NzdHIoJmZpbGVfcGF0aF9idWYpKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jb25uZWN0KHJlbW90ZSwgR0lUX0RJUkVDVElPTl9GRVRDSCkpOwotCi19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fY29ubmVjdGVkKHZvaWQpCi17Ci0JY29ubmVjdF90b19sb2NhbF9yZXBvc2l0b3J5KGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKTsKLQljbF9hc3NlcnQoZ2l0X3JlbW90ZV9jb25uZWN0ZWQocmVtb3RlKSk7Ci0KLQlnaXRfcmVtb3RlX2Rpc2Nvbm5lY3QocmVtb3RlKTsKLQljbF9hc3NlcnQoIWdpdF9yZW1vdGVfY29ubmVjdGVkKHJlbW90ZSkpOwotfQotCi12b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfbG9jYWxfX3JldHJpZXZlX2FkdmVydGlzZWRfcmVmZXJlbmNlcyh2b2lkKQotewotCWludCBob3dfbWFueV9yZWZzID0gMDsKLQotCWNvbm5lY3RfdG9fbG9jYWxfcmVwb3NpdG9yeShjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQiKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xzKHJlbW90ZSwgJmNvdW50X3JlZl9fY2IsICZob3dfbWFueV9yZWZzKSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaShob3dfbWFueV9yZWZzLCAyOCk7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fcmV0cmlldmVfYWR2ZXJ0aXNlZF9yZWZlcmVuY2VzX2Zyb21fc3BhY2VkX3JlcG9zaXRvcnkodm9pZCkKLXsKLQlpbnQgaG93X21hbnlfcmVmcyA9IDA7Ci0KLQljbF9maXh0dXJlX3NhbmRib3goInRlc3RyZXBvLmdpdCIpOwotCWNsX2dpdF9wYXNzKHBfcmVuYW1lKCJ0ZXN0cmVwby5naXQiLCAic3BhY2VkIHRlc3RyZXBvLmdpdCIpKTsKLQotCWNvbm5lY3RfdG9fbG9jYWxfcmVwb3NpdG9yeSgic3BhY2VkIHRlc3RyZXBvLmdpdCIpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9scyhyZW1vdGUsICZjb3VudF9yZWZfX2NiLCAmaG93X21hbnlfcmVmcykpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koaG93X21hbnlfcmVmcywgMjgpOwotCi0JZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CS8qIERpc2Nvbm5lY3QgZnJvbSB0aGUgInNwYWNlZCByZXBvIiBiZWZvcmUgdGhlIGNsZWFudXAgKi8KLQlyZW1vdGUgPSBOVUxMOwotCi0JY2xfZml4dHVyZV9jbGVhbnVwKCJzcGFjZWQgdGVzdHJlcG8uZ2l0Iik7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fbmVzdGVkX3RhZ3NfYXJlX2NvbXBsZXRlbHlfcGVlbGVkKHZvaWQpCi17Ci0JY29ubmVjdF90b19sb2NhbF9yZXBvc2l0b3J5KGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbHMocmVtb3RlLCAmZW5zdXJlX3BlZWxlZF9fY2IsIE5VTEwpKTsKLX0KLQotdm9pZCB0ZXN0X25ldHdvcmtfcmVtb3RlX2xvY2FsX19zaG9ydGhhbmRfZmV0Y2hfcmVmc3BlYzAodm9pZCkKLXsKLQljb25zdCBjaGFyICpyZWZzcGVjID0gIm1hc3RlcjpyZW1vdGVzL3Nsb3BweS9tYXN0ZXIiOwotCWNvbnN0IGNoYXIgKnJlZnNwZWMyID0gIm1hc3Rlcjpib2gvc2xvcHB5L21hc3RlciI7Ci0KLQlnaXRfcmVmZXJlbmNlICpyZWY7Ci0KLQljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfYWRkX2ZldGNoKHJlbW90ZSwgcmVmc3BlYykpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfYWRkX2ZldGNoKHJlbW90ZSwgcmVmc3BlYzIpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfZG93bmxvYWQocmVtb3RlLCBOVUxMLCBOVUxMKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV91cGRhdGVfdGlwcyhyZW1vdGUpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIHJlcG8sICJyZWZzL3JlbW90ZXMvc2xvcHB5L21hc3RlciIpKTsKLQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIHJlcG8sICJyZWZzL2hlYWRzL2JvaC9zbG9wcHkvbWFzdGVyIikpOwotCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOwotfQotCi12b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfbG9jYWxfX3Nob3J0aGFuZF9mZXRjaF9yZWZzcGVjMSh2b2lkKQotewotCWNvbnN0IGNoYXIgKnJlZnNwZWMgPSAibWFzdGVyIjsKLQljb25zdCBjaGFyICpyZWZzcGVjMiA9ICJoYXJkX3RhZyI7Ci0KLQlnaXRfcmVmZXJlbmNlICpyZWY7Ci0KLQljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpOwotCWdpdF9yZW1vdGVfY2xlYXJfcmVmc3BlY3MocmVtb3RlKTsKLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2FkZF9mZXRjaChyZW1vdGUsIHJlZnNwZWMpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2FkZF9mZXRjaChyZW1vdGUsIHJlZnNwZWMyKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSwgTlVMTCwgTlVMTCkpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMocmVtb3RlKSk7Ci0KLQljbF9naXRfZmFpbChnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCByZXBvLCAicmVmcy9yZW1vdGVzL21hc3RlciIpKTsKLQotCWNsX2dpdF9mYWlsKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIHJlcG8sICJyZWZzL3RhZ3MvaGFyZF90YWciKSk7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fdGFnb3B0KHZvaWQpCi17Ci0JZ2l0X3JlZmVyZW5jZSAqcmVmOwotCi0JY29ubmVjdF90b19sb2NhbF9yZXBvc2l0b3J5KGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKTsKLQlnaXRfcmVtb3RlX3NldF9hdXRvdGFnKHJlbW90ZSwgR0lUX1JFTU9URV9ET1dOTE9BRF9UQUdTX0FMTCk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSwgTlVMTCwgTlVMTCkpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMocmVtb3RlKSk7Ci0KLQotCWNsX2dpdF9mYWlsKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIHJlcG8sICJyZWZzL3JlbW90ZXMvbWFzdGVyIikpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZiwgcmVwbywgInJlZnMvdGFncy9oYXJkX3RhZyIpKTsKLQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbmV0d29yay91cmxwYXJzZS5jIGIvdGVzdHMtY2xhci9uZXR3b3JrL3VybHBhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3M2U1N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci9uZXR3b3JrL3VybHBhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0jaW5jbHVkZSAibmV0b3BzLmgiCi0KLWNoYXIgKmhvc3QsICpwb3J0LCAqdXNlciwgKnBhc3M7Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19pbml0aWFsaXplKHZvaWQpCi17Ci0JaG9zdCA9IHBvcnQgPSB1c2VyID0gcGFzcyA9IE5VTEw7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19jbGVhbnVwKHZvaWQpCi17Ci0jZGVmaW5lIEZSRUVfQU5EX05VTEwoeCkgaWYgKHgpIHsgZ2l0X19mcmVlKHgpOyB4ID0gTlVMTDsgfQotCUZSRUVfQU5EX05VTEwoaG9zdCk7Ci0JRlJFRV9BTkRfTlVMTChwb3J0KTsKLQlGUkVFX0FORF9OVUxMKHVzZXIpOwotCUZSRUVfQU5EX05VTEwocGFzcyk7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX190cml2aWFsKHZvaWQpCi17Ci0JY2xfZ2l0X3Bhc3MoZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJmhvc3QsICZwb3J0LCAmdXNlciwgJnBhc3MsCi0JCQkJImV4YW1wbGUuY29tL3Jlc291cmNlIiwgIjgwODAiKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoaG9zdCwgImV4YW1wbGUuY29tIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MocG9ydCwgIjgwODAiKTsKLQljbF9hc3NlcnRfZXF1YWxfcCh1c2VyLCBOVUxMKTsKLQljbF9hc3NlcnRfZXF1YWxfcChwYXNzLCBOVUxMKTsKLX0KLQotdm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX3VzZXIodm9pZCkKLXsKLQljbF9naXRfcGFzcyhnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZ1c2VyLCAmcGFzcywKLQkJCQkidXNlckBleGFtcGxlLmNvbS9yZXNvdXJjZSIsICI4MDgwIikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGhvc3QsICJleGFtcGxlLmNvbSIpOwotCWNsX2Fzc2VydF9lcXVhbF9zKHBvcnQsICI4MDgwIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX3ModXNlciwgInVzZXIiKTsKLQljbF9hc3NlcnRfZXF1YWxfcChwYXNzLCBOVUxMKTsKLX0KLQotdm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX3VzZXJfcGFzcyh2b2lkKQotewotCS8qIHVzZXI6cGFzc0Bob3N0bmFtZS50bGQvcmVzb3VyY2UgKi8KLQljbF9naXRfcGFzcyhnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZ1c2VyLCAmcGFzcywKLQkJCQkidXNlcjpwYXNzQGV4YW1wbGUuY29tL3Jlc291cmNlIiwgIjgwODAiKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoaG9zdCwgImV4YW1wbGUuY29tIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MocG9ydCwgIjgwODAiKTsKLQljbF9hc3NlcnRfZXF1YWxfcyh1c2VyLCAidXNlciIpOwotCWNsX2Fzc2VydF9lcXVhbF9zKHBhc3MsICJwYXNzIik7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19wb3J0KHZvaWQpCi17Ci0JLyogaG9zdG5hbWUudGxkOnBvcnQvcmVzb3VyY2UgKi8KLQljbF9naXRfcGFzcyhnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZ1c2VyLCAmcGFzcywKLQkJCQkiZXhhbXBsZS5jb206OTE5MS9yZXNvdXJjZSIsICI4MDgwIikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGhvc3QsICJleGFtcGxlLmNvbSIpOwotCWNsX2Fzc2VydF9lcXVhbF9zKHBvcnQsICI5MTkxIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX3AodXNlciwgTlVMTCk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3AocGFzcywgTlVMTCk7Ci19Ci0KLXZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX191c2VyX3BvcnQodm9pZCkKLXsKLQkvKiB1c2VyQGhvc3RuYW1lLnRsZDpwb3J0L3Jlc291cmNlICovCi0JY2xfZ2l0X3Bhc3MoZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJmhvc3QsICZwb3J0LCAmdXNlciwgJnBhc3MsCi0JCQkJInVzZXJAZXhhbXBsZS5jb206OTE5MS9yZXNvdXJjZSIsICI4MDgwIikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGhvc3QsICJleGFtcGxlLmNvbSIpOwotCWNsX2Fzc2VydF9lcXVhbF9zKHBvcnQsICI5MTkxIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX3ModXNlciwgInVzZXIiKTsKLQljbF9hc3NlcnRfZXF1YWxfcChwYXNzLCBOVUxMKTsKLX0KLQotdm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX3VzZXJfcGFzc19wb3J0KHZvaWQpCi17Ci0JLyogdXNlcjpwYXNzQGhvc3RuYW1lLnRsZDpwb3J0L3Jlc291cmNlICovCi0JY2xfZ2l0X3Bhc3MoZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJmhvc3QsICZwb3J0LCAmdXNlciwgJnBhc3MsCi0JCQkJInVzZXI6cGFzc0BleGFtcGxlLmNvbTo5MTkxL3Jlc291cmNlIiwgIjgwODAiKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoaG9zdCwgImV4YW1wbGUuY29tIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MocG9ydCwgIjkxOTEiKTsKLQljbF9hc3NlcnRfZXF1YWxfcyh1c2VyLCAidXNlciIpOwotCWNsX2Fzc2VydF9lcXVhbF9zKHBhc3MsICJwYXNzIik7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29iamVjdC9ibG9iL2ZpbHRlci5jIGIvdGVzdHMtY2xhci9vYmplY3QvYmxvYi9maWx0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyYmRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL29iamVjdC9ibG9iL2ZpbHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLSNpbmNsdWRlICJwb3NpeC5oIgotI2luY2x1ZGUgImJsb2IuaCIKLSNpbmNsdWRlICJmaWx0ZXIuaCIKLSNpbmNsdWRlICJidWZfdGV4dC5oIgotCi1zdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7Ci0jZGVmaW5lIE5VTV9URVNUX09CSkVDVFMgOAotc3RhdGljIGdpdF9vaWQgZ19vaWRzW05VTV9URVNUX09CSkVDVFNdOwotc3RhdGljIGNvbnN0IGNoYXIgKmdfcmF3W05VTV9URVNUX09CSkVDVFNdID0gewotCSIiLAotCSJmb29cbmJhclxuIiwKLQkiZm9vXHJiYXJcciIsCi0JImZvb1xyXG5iYXJcclxuIiwKLQkiZm9vXG5iYXJccmJvdGhcclxucmV2ZXJzZWRcblxyYWdhaW5cbnByb2JsZW1zXHIiLAotCSIxMjNcblwwMDBcMDAxXDAwMlwwMDNcMDA0YWJjXDI1NVwyNTRcMjUzXHJcbiIsCi0JIlx4RUZceEJCXHhCRlRoaXMgaXMgVVRGLThcbiIsCi0JIlx4RkVceEZGXHgwMFRceDAwaFx4MDBpXHgwMHNceDAwISIKLX07Ci1zdGF0aWMgZ2l0X29mZl90IGdfbGVuW05VTV9URVNUX09CSkVDVFNdID0geyAtMSwgLTEsIC0xLCAtMSwgLTEsIDE3LCAtMSwgMTIgfTsKLXN0YXRpYyBnaXRfYnVmX3RleHRfc3RhdHMgZ19zdGF0c1tOVU1fVEVTVF9PQkpFQ1RTXSA9IHsKLQl7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKLQl7IDAsIDAsIDAsIDIsIDAsIDYsIDAgfSwKLQl7IDAsIDAsIDIsIDAsIDAsIDYsIDAgfSwKLQl7IDAsIDAsIDIsIDIsIDIsIDYsIDAgfSwKLQl7IDAsIDAsIDQsIDQsIDEsIDMxLCAwIH0sCi0JeyAwLCAxLCAxLCAyLCAxLCA5LCA1IH0sCi0JeyBHSVRfQk9NX1VURjgsIDAsIDAsIDEsIDAsIDE2LCAwIH0sCi0JeyBHSVRfQk9NX1VURjE2X0JFLCA1LCAwLCAwLCAwLCA3LCA1IH0sCi19Owotc3RhdGljIGdpdF9idWYgZ19jcmxmX2ZpbHRlcmVkW05VTV9URVNUX09CSkVDVFNdID0gewotCXsgIiIsIDAsIDAgfSwKLQl7ICJmb29cbmJhclxuIiwgMCwgOCB9LAotCXsgImZvb1xyYmFyXHIiLCAwLCA4IH0sCi0JeyAiZm9vXG5iYXJcbiIsIDAsIDggfSwKLQl7ICJmb29cbmJhclxyYm90aFxucmV2ZXJzZWRcblxyYWdhaW5cbnByb2JsZW1zXHIiLCAwLCAzOCB9LAotCXsgIjEyM1xuXDAwMFwwMDFcMDAyXDAwM1wwMDRhYmNcMjU1XDI1NFwyNTNcbiIsIDAsIDE2IH0sCi0JeyAiXHhFRlx4QkJceEJGVGhpcyBpcyBVVEYtOFxuIiwgMCwgMTcgfSwKLQl7ICJceEZFXHhGRlx4MDBUXHgwMGhceDAwaVx4MDBzXHgwMCEiLCAwLCAxMiB9Ci19OwotCi12b2lkIHRlc3Rfb2JqZWN0X2Jsb2JfZmlsdGVyX19pbml0aWFsaXplKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQljbF9maXh0dXJlX3NhbmRib3goImVtcHR5X3N0YW5kYXJkX3JlcG8iKTsKLQljbF9naXRfcGFzcyhwX3JlbmFtZSgKLQkJImVtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZCIsICJlbXB0eV9zdGFuZGFyZF9yZXBvLy5naXQiKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19yZXBvLCAiZW1wdHlfc3RhbmRhcmRfcmVwbyIpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fVEVTVF9PQkpFQ1RTOyBpKyspIHsKLQkJc2l6ZV90IGxlbiA9IChnX2xlbltpXSA8IDApID8gc3RybGVuKGdfcmF3W2ldKSA6IChzaXplX3QpZ19sZW5baV07Ci0JCWdfbGVuW2ldID0gKGdpdF9vZmZfdClsZW47Ci0KLQkJY2xfZ2l0X3Bhc3MoCi0JCQlnaXRfYmxvYl9jcmVhdGVfZnJvbWJ1ZmZlcigmZ19vaWRzW2ldLCBnX3JlcG8sIGdfcmF3W2ldLCBsZW4pCi0JCSk7Ci0JfQotfQotCi12b2lkIHRlc3Rfb2JqZWN0X2Jsb2JfZmlsdGVyX19jbGVhbnVwKHZvaWQpCi17Ci0JZ2l0X3JlcG9zaXRvcnlfZnJlZShnX3JlcG8pOwotCWdfcmVwbyA9IE5VTEw7Ci0JY2xfZml4dHVyZV9jbGVhbnVwKCJlbXB0eV9zdGFuZGFyZF9yZXBvIik7Ci19Ci0KLXZvaWQgdGVzdF9vYmplY3RfYmxvYl9maWx0ZXJfX3VuZmlsdGVyZWQodm9pZCkKLXsKLQlpbnQgaTsKLQlnaXRfYmxvYiAqYmxvYjsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fVEVTVF9PQkpFQ1RTOyBpKyspIHsKLQkJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfbG9va3VwKCZibG9iLCBnX3JlcG8sICZnX29pZHNbaV0pKTsKLQkJY2xfYXNzZXJ0KGdfbGVuW2ldID09IGdpdF9ibG9iX3Jhd3NpemUoYmxvYikpOwotCQljbF9hc3NlcnQobWVtY21wKGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYiksIGdfcmF3W2ldLCAoc2l6ZV90KWdfbGVuW2ldKSA9PSAwKTsKLQkJZ2l0X2Jsb2JfZnJlZShibG9iKTsKLQl9Ci19Ci0KLXZvaWQgdGVzdF9vYmplY3RfYmxvYl9maWx0ZXJfX3N0YXRzKHZvaWQpCi17Ci0JaW50IGk7Ci0JZ2l0X2Jsb2IgKmJsb2I7Ci0JZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7Ci0JZ2l0X2J1Zl90ZXh0X3N0YXRzIHN0YXRzOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9URVNUX09CSkVDVFM7IGkrKykgewotCQljbF9naXRfcGFzcyhnaXRfYmxvYl9sb29rdXAoJmJsb2IsIGdfcmVwbywgJmdfb2lkc1tpXSkpOwotCQljbF9naXRfcGFzcyhnaXRfYmxvYl9fZ2V0YnVmKCZidWYsIGJsb2IpKTsKLQkJZ2l0X2J1Zl90ZXh0X2dhdGhlcl9zdGF0cygmc3RhdHMsICZidWYsIGZhbHNlKTsKLQkJY2xfYXNzZXJ0KG1lbWNtcCgmZ19zdGF0c1tpXSwgJnN0YXRzLCBzaXplb2Yoc3RhdHMpKSA9PSAwKTsKLQkJZ2l0X2Jsb2JfZnJlZShibG9iKTsKLQl9Ci0KLQlnaXRfYnVmX2ZyZWUoJmJ1Zik7Ci19Ci0KLXZvaWQgdGVzdF9vYmplY3RfYmxvYl9maWx0ZXJfX3RvX29kYih2b2lkKQotewotCWdpdF92ZWN0b3IgZmlsdGVycyA9IEdJVF9WRUNUT1JfSU5JVDsKLQlnaXRfY29uZmlnICpjZmc7Ci0JaW50IGk7Ci0JZ2l0X2Jsb2IgKmJsb2I7Ci0JZ2l0X2J1ZiBvcmlnID0gR0lUX0JVRl9JTklULCBvdXQgPSBHSVRfQlVGX0lOSVQ7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNmZywgZ19yZXBvKSk7Ci0JY2xfYXNzZXJ0KGNmZyk7Ci0KLQlnaXRfYXR0cl9jYWNoZV9mbHVzaChnX3JlcG8pOwotCWNsX2dpdF9hcHBlbmQyZmlsZSgiZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0YXR0cmlidXRlcyIsICIqLnR4dCB0ZXh0XG4iKTsKLQotCWNsX2Fzc2VydChnaXRfZmlsdGVyc19sb2FkKAotCQkmZmlsdGVycywgZ19yZXBvLCAiZmlsZW5hbWUudHh0IiwgR0lUX0ZJTFRFUl9UT19PREIpID4gMCk7Ci0JY2xfYXNzZXJ0KGZpbHRlcnMubGVuZ3RoID09IDEpOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9URVNUX09CSkVDVFM7IGkrKykgewotCQljbF9naXRfcGFzcyhnaXRfYmxvYl9sb29rdXAoJmJsb2IsIGdfcmVwbywgJmdfb2lkc1tpXSkpOwotCQljbF9naXRfcGFzcyhnaXRfYmxvYl9fZ2V0YnVmKCZvcmlnLCBibG9iKSk7Ci0KLQkJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcnNfYXBwbHkoJm91dCwgJm9yaWcsICZmaWx0ZXJzKSk7Ci0JCWNsX2Fzc2VydChnaXRfYnVmX2NtcCgmb3V0LCAmZ19jcmxmX2ZpbHRlcmVkW2ldKSA9PSAwKTsKLQotCQlnaXRfYmxvYl9mcmVlKGJsb2IpOwotCX0KLQotCWdpdF9maWx0ZXJzX2ZyZWUoJmZpbHRlcnMpOwotCWdpdF9idWZfZnJlZSgmb3JpZyk7Ci0JZ2l0X2J1Zl9mcmVlKCZvdXQpOwotCWdpdF9jb25maWdfZnJlZShjZmcpOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29iamVjdC90cmVlL3dhbGsuYyBiL3Rlc3RzLWNsYXIvb2JqZWN0L3RyZWUvd2Fsay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2FmNDkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvb2JqZWN0L3RyZWUvd2Fsay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLSNpbmNsdWRlICJ0cmVlLmgiCi0KLXN0YXRpYyBjb25zdCBjaGFyICp0cmVlX29pZCA9ICIxODEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkIjsKLXN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvOwotCi12b2lkIHRlc3Rfb2JqZWN0X3RyZWVfd2Fsa19faW5pdGlhbGl6ZSh2b2lkKQotewotICAgZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8iKTsKLX0KLQotdm9pZCB0ZXN0X29iamVjdF90cmVlX3dhbGtfX2NsZWFudXAodm9pZCkKLXsKLSAgIGNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKLX0KLQotc3RhdGljIGludCB0cmVld2Fsa19jb3VudF9jYigKLQljb25zdCBjaGFyICpyb290LCBjb25zdCBnaXRfdHJlZV9lbnRyeSAqZW50cnksIHZvaWQgKnBheWxvYWQpCi17Ci0JaW50ICpjb3VudCA9IHBheWxvYWQ7Ci0KLQlHSVRfVU5VU0VEKHJvb3QpOwotCUdJVF9VTlVTRUQoZW50cnkpOwotCi0JKCpjb3VudCkgKz0gMTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHRlc3Rfb2JqZWN0X3RyZWVfd2Fsa19fMCh2b2lkKQotewotCWdpdF9vaWQgaWQ7Ci0JZ2l0X3RyZWUgKnRyZWU7Ci0JaW50IGN0OwotCi0JZ2l0X29pZF9mcm9tc3RyKCZpZCwgdHJlZV9vaWQpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3RyZWVfbG9va3VwKCZ0cmVlLCBnX3JlcG8sICZpZCkpOwotCi0JY3QgPSAwOwotCWNsX2dpdF9wYXNzKGdpdF90cmVlX3dhbGsodHJlZSwgR0lUX1RSRUVXQUxLX1BSRSwgdHJlZXdhbGtfY291bnRfY2IsICZjdCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGN0KTsKLQotCWN0ID0gMDsKLQljbF9naXRfcGFzcyhnaXRfdHJlZV93YWxrKHRyZWUsIEdJVF9UUkVFV0FMS19QT1NULCB0cmVld2Fsa19jb3VudF9jYiwgJmN0KSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMywgY3QpOwotCi0JZ2l0X3RyZWVfZnJlZSh0cmVlKTsKLX0KLQotCi1zdGF0aWMgaW50IHRyZWV3YWxrX3N0b3BfY2IoCi0JY29uc3QgY2hhciAqcm9vdCwgY29uc3QgZ2l0X3RyZWVfZW50cnkgKmVudHJ5LCB2b2lkICpwYXlsb2FkKQotewotCWludCAqY291bnQgPSBwYXlsb2FkOwotCi0JR0lUX1VOVVNFRChyb290KTsKLQlHSVRfVU5VU0VEKGVudHJ5KTsKLQotCSgqY291bnQpICs9IDE7Ci0KLQlyZXR1cm4gKCpjb3VudCA9PSAyKSA/IC0xIDogMDsKLX0KLQotc3RhdGljIGludCB0cmVld2Fsa19zdG9wX2ltbWVkaWF0ZWx5X2NiKAotCWNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGdpdF90cmVlX2VudHJ5ICplbnRyeSwgdm9pZCAqcGF5bG9hZCkKLXsKLQlHSVRfVU5VU0VEKHJvb3QpOwotCUdJVF9VTlVTRUQoZW50cnkpOwotCUdJVF9VTlVTRUQocGF5bG9hZCk7Ci0JcmV0dXJuIC0xMDA7Ci19Ci0KLXZvaWQgdGVzdF9vYmplY3RfdHJlZV93YWxrX18xKHZvaWQpCi17Ci0JZ2l0X29pZCBpZDsKLQlnaXRfdHJlZSAqdHJlZTsKLQlpbnQgY3Q7Ci0KLQlnaXRfb2lkX2Zyb21zdHIoJmlkLCB0cmVlX29pZCk7Ci0KLQljbF9naXRfcGFzcyhnaXRfdHJlZV9sb29rdXAoJnRyZWUsIGdfcmVwbywgJmlkKSk7Ci0KLQljdCA9IDA7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koCi0JCUdJVF9FVVNFUiwgZ2l0X3RyZWVfd2Fsayh0cmVlLCBHSVRfVFJFRVdBTEtfUFJFLCB0cmVld2Fsa19zdG9wX2NiLCAmY3QpKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgyLCBjdCk7Ci0KLQljdCA9IDA7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koCi0JCUdJVF9FVVNFUiwgZ2l0X3RyZWVfd2Fsayh0cmVlLCBHSVRfVFJFRVdBTEtfUE9TVCwgdHJlZXdhbGtfc3RvcF9jYiwgJmN0KSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMiwgY3QpOwotCi0JY2xfYXNzZXJ0X2VxdWFsX2koCi0JCUdJVF9FVVNFUiwgZ2l0X3RyZWVfd2FsaygKLQkJCXRyZWUsIEdJVF9UUkVFV0FMS19QUkUsIHRyZWV3YWxrX3N0b3BfaW1tZWRpYXRlbHlfY2IsIE5VTEwpKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKAotCQlHSVRfRVVTRVIsIGdpdF90cmVlX3dhbGsoCi0JCQl0cmVlLCBHSVRfVFJFRVdBTEtfUE9TVCwgdHJlZXdhbGtfc3RvcF9pbW1lZGlhdGVseV9jYiwgTlVMTCkpOwotCi0JZ2l0X3RyZWVfZnJlZSh0cmVlKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2RiL2xvb3NlLmMgYi90ZXN0cy1jbGFyL29kYi9sb29zZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTM5YmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvb2RiL2xvb3NlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0jaW5jbHVkZSAib2RiLmgiCi0jaW5jbHVkZSAicG9zaXguaCIKLSNpbmNsdWRlICJsb29zZV9kYXRhLmgiCi0KLXN0YXRpYyB2b2lkIHdyaXRlX29iamVjdF9maWxlcyhvYmplY3RfZGF0YSAqZCkKLXsKLQlpbnQgZmQ7Ci0KLQlpZiAocF9ta2RpcihkLT5kaXIsIEdJVF9PQkpFQ1RfRElSX01PREUpIDwgMCkKLQkJY2xfYXNzZXJ0KGVycm5vID09IEVFWElTVCk7Ci0KLQljbF9hc3NlcnQoKGZkID0gcF9jcmVhdChkLT5maWxlLCBTX0lSRUFEIHwgU19JV1JJVEUpKSA+PSAwKTsKLQljbF9tdXN0X3Bhc3MocF93cml0ZShmZCwgZC0+Ynl0ZXMsIGQtPmJsZW4pKTsKLQotCXBfY2xvc2UoZmQpOwotfQotCi1zdGF0aWMgdm9pZCBjbXBfb2JqZWN0cyhnaXRfcmF3b2JqICpvLCBvYmplY3RfZGF0YSAqZCkKLXsKLQljbF9hc3NlcnQoby0+dHlwZSA9PSBnaXRfb2JqZWN0X3N0cmluZzJ0eXBlKGQtPnR5cGUpKTsKLQljbF9hc3NlcnQoby0+bGVuID09IGQtPmRsZW4pOwotCi0JaWYgKG8tPmxlbiA+IDApCi0JCWNsX2Fzc2VydChtZW1jbXAoby0+ZGF0YSwgZC0+ZGF0YSwgby0+bGVuKSA9PSAwKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9yZWFkX29iamVjdChvYmplY3RfZGF0YSAqZGF0YSkKLXsKLSAgICBnaXRfb2lkIGlkOwotICAgIGdpdF9vZGJfb2JqZWN0ICpvYmo7Ci0JZ2l0X29kYiAqb2RiOwotCWdpdF9yYXdvYmogdG1wOwotCi0gICAgd3JpdGVfb2JqZWN0X2ZpbGVzKGRhdGEpOwotCi0gICAgY2xfZ2l0X3Bhc3MoZ2l0X29kYl9vcGVuKCZvZGIsICJ0ZXN0LW9iamVjdHMiKSk7Ci0gICAgY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZpZCwgZGF0YS0+aWQpKTsKLSAgICBjbF9naXRfcGFzcyhnaXRfb2RiX3JlYWQoJm9iaiwgb2RiLCAmaWQpKTsKLQotCXRtcC5kYXRhID0gb2JqLT5idWZmZXI7Ci0JdG1wLmxlbiA9IG9iai0+Y2FjaGVkLnNpemU7Ci0JdG1wLnR5cGUgPSBvYmotPmNhY2hlZC50eXBlOwotCi0gICAgY21wX29iamVjdHMoJnRtcCwgZGF0YSk7Ci0KLSAgICBnaXRfb2RiX29iamVjdF9mcmVlKG9iaik7Ci0JZ2l0X29kYl9mcmVlKG9kYik7Ci19Ci0KLXZvaWQgdGVzdF9vZGJfbG9vc2VfX2luaXRpYWxpemUodm9pZCkKLXsKLQljbF9tdXN0X3Bhc3MocF9ta2RpcigidGVzdC1vYmplY3RzIiwgR0lUX09CSkVDVF9ESVJfTU9ERSkpOwotfQotCi12b2lkIHRlc3Rfb2RiX2xvb3NlX19jbGVhbnVwKHZvaWQpCi17Ci0JY2xfZml4dHVyZV9jbGVhbnVwKCJ0ZXN0LW9iamVjdHMiKTsKLX0KLQotdm9pZCB0ZXN0X29kYl9sb29zZV9fZXhpc3RzKHZvaWQpCi17Ci0gICAgZ2l0X29pZCBpZCwgaWQyOwotCWdpdF9vZGIgKm9kYjsKLQotICAgIHdyaXRlX29iamVjdF9maWxlcygmb25lKTsKLQljbF9naXRfcGFzcyhnaXRfb2RiX29wZW4oJm9kYiwgInRlc3Qtb2JqZWN0cyIpKTsKLQotICAgIGNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmaWQsIG9uZS5pZCkpOwotCi0gICAgY2xfYXNzZXJ0KGdpdF9vZGJfZXhpc3RzKG9kYiwgJmlkKSk7Ci0KLQkvKiBUZXN0IGZvciBhIG5vbi1leGlzdGFudCBvYmplY3QgKi8KLSAgICBjbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmlkMiwgIjhiMTM3ODkxNzkxZmU5NjkyN2FkNzhlNjRiMGFhZDdiZGVkMDhiYWEiKSk7Ci0gICAgY2xfYXNzZXJ0KCFnaXRfb2RiX2V4aXN0cyhvZGIsICZpZDIpKTsKLQotCWdpdF9vZGJfZnJlZShvZGIpOwotfQotCi12b2lkIHRlc3Rfb2RiX2xvb3NlX19zaW1wbGVfcmVhZHModm9pZCkKLXsKLQl0ZXN0X3JlYWRfb2JqZWN0KCZjb21taXQpOwotCXRlc3RfcmVhZF9vYmplY3QoJnRyZWUpOwotCXRlc3RfcmVhZF9vYmplY3QoJnRhZyk7Ci0JdGVzdF9yZWFkX29iamVjdCgmemVybyk7Ci0JdGVzdF9yZWFkX29iamVjdCgmb25lKTsKLQl0ZXN0X3JlYWRfb2JqZWN0KCZ0d28pOwotCXRlc3RfcmVhZF9vYmplY3QoJnNvbWUpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vZGIvbWl4ZWQuYyBiL3Rlc3RzLWNsYXIvb2RiL21peGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMGVkOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci9vZGIvbWl4ZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLSNpbmNsdWRlICJvZGIuaCIKLQotc3RhdGljIGdpdF9vZGIgKl9vZGI7Ci0KLXZvaWQgdGVzdF9vZGJfbWl4ZWRfX2luaXRpYWxpemUodm9pZCkKLXsKLQljbF9naXRfcGFzcyhnaXRfb2RiX29wZW4oJl9vZGIsIGNsX2ZpeHR1cmUoImR1cGxpY2F0ZS5naXQvb2JqZWN0cyIpKSk7Ci19Ci0KLXZvaWQgdGVzdF9vZGJfbWl4ZWRfX2NsZWFudXAodm9pZCkKLXsKLQlnaXRfb2RiX2ZyZWUoX29kYik7Ci0JX29kYiA9IE5VTEw7Ci19Ci0KLXZvaWQgdGVzdF9vZGJfbWl4ZWRfX2R1cF9vaWQodm9pZCkgewotCWNvbnN0IGNoYXIgaGV4W10gPSAiY2UwMTM2MjUwMzBiYThkYmE5MDZmNzU2OTY3ZjllOWNhMzk0NDY0YSI7Ci0JZ2l0X29pZCBvaWQ7Ci0JZ2l0X29kYl9vYmplY3QgKm9iajsKLQljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJm9pZCwgaGV4KSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X29kYl9yZWFkX3ByZWZpeCgmb2JqLCBfb2RiLCAmb2lkLCBHSVRfT0lEX0hFWFNaKSk7Ci0JZ2l0X29kYl9vYmplY3RfZnJlZShvYmopOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvZm9yZWFjaC5jIGIvdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2ZvcmVhY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzODEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvZm9yZWFjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLSNpbmNsdWRlICJyZWZzLmgiCi0KLXN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqcmVwbzsKLXN0YXRpYyBnaXRfcmVmZXJlbmNlICpmYWtlX3JlbW90ZTsKLQotdm9pZCB0ZXN0X3JlZnNfYnJhbmNoZXNfZm9yZWFjaF9faW5pdGlhbGl6ZSh2b2lkKQotewotCWdpdF9vaWQgaWQ7Ci0KLQljbF9maXh0dXJlX3NhbmRib3goInRlc3RyZXBvLmdpdCIpOwotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8sICJ0ZXN0cmVwby5naXQiKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmlkLCAiYmUzNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NCIpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2NyZWF0ZSgmZmFrZV9yZW1vdGUsIHJlcG8sICJyZWZzL3JlbW90ZXMvbnVsbHRva2VuL21hc3RlciIsICZpZCwgMCkpOwotfQotCi12b2lkIHRlc3RfcmVmc19icmFuY2hlc19mb3JlYWNoX19jbGVhbnVwKHZvaWQpCi17Ci0JZ2l0X3JlZmVyZW5jZV9mcmVlKGZha2VfcmVtb3RlKTsKLQlmYWtlX3JlbW90ZSA9IE5VTEw7Ci0KLQlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOwotCXJlcG8gPSBOVUxMOwotCi0JY2xfZml4dHVyZV9jbGVhbnVwKCJ0ZXN0cmVwby5naXQiKTsKLQotCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKLX0KLQotc3RhdGljIGludCBjb3VudF9icmFuY2hfbGlzdF9jYihjb25zdCBjaGFyICpicmFuY2hfbmFtZSwgZ2l0X2JyYW5jaF90IGJyYW5jaF90eXBlLCB2b2lkICpwYXlsb2FkKQotewotCWludCAqY291bnQ7Ci0KLQlHSVRfVU5VU0VEKGJyYW5jaF90eXBlKTsKLQlHSVRfVU5VU0VEKGJyYW5jaF9uYW1lKTsKLQotCWNvdW50ID0gKGludCAqKXBheWxvYWQ7Ci0JKCpjb3VudCkrKzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhc3NlcnRfcmV0cmlldmFsKHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGV4cGVjdGVkX2NvdW50KQotewotCWludCBjb3VudCA9IDA7Ci0KLQljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2ZvcmVhY2gocmVwbywgZmxhZ3MsIGNvdW50X2JyYW5jaF9saXN0X2NiLCAmY291bnQpKTsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX2NvdW50LCBjb3VudCk7Ci19Ci0KLXZvaWQgdGVzdF9yZWZzX2JyYW5jaGVzX2ZvcmVhY2hfX3JldHJpZXZlX2FsbF9icmFuY2hlcyh2b2lkKQotewotCWFzc2VydF9yZXRyaWV2YWwoR0lUX0JSQU5DSF9MT0NBTCB8IEdJVF9CUkFOQ0hfUkVNT1RFLCAxNCk7Ci19Ci0KLXZvaWQgdGVzdF9yZWZzX2JyYW5jaGVzX2ZvcmVhY2hfX3JldHJpZXZlX3JlbW90ZV9icmFuY2hlcyh2b2lkKQotewotCWFzc2VydF9yZXRyaWV2YWwoR0lUX0JSQU5DSF9SRU1PVEUsIDIpOwotfQotCi12b2lkIHRlc3RfcmVmc19icmFuY2hlc19mb3JlYWNoX19yZXRyaWV2ZV9sb2NhbF9icmFuY2hlcyh2b2lkKQotewotCWFzc2VydF9yZXRyaWV2YWwoR0lUX0JSQU5DSF9MT0NBTCwgMTIpOwotfQotCi1zdHJ1Y3QgZXhwZWN0YXRpb25zIHsKLQljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKLQlpbnQgZW5jb3VudGVyczsKLX07Ci0KLXN0YXRpYyB2b2lkIGFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoc3RydWN0IGV4cGVjdGF0aW9ucyAqZmluZGluZ3MsIGNvbnN0IGNoYXIqIGV4cGVjdGVkX2JyYW5jaF9uYW1lKQotewotCWludCBwb3MgPSAwOwotCi0JZm9yIChwb3MgPSAwOyBmaW5kaW5nc1twb3NdLmJyYW5jaF9uYW1lOyArK3BvcykgewotCQlpZiAoc3RyY21wKGV4cGVjdGVkX2JyYW5jaF9uYW1lLCBmaW5kaW5nc1twb3NdLmJyYW5jaF9uYW1lKSA9PSAwKSB7Ci0JCQljbF9hc3NlcnRfZXF1YWxfaSgxLCBmaW5kaW5nc1twb3NdLmVuY291bnRlcnMpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JY2xfZmFpbCgiZXhwZWN0ZWQgYnJhbmNoIG5vdCBmb3VuZCBpbiBsaXN0LiIpOwotfQotCi1zdGF0aWMgaW50IGNvbnRhaW5zX2JyYW5jaF9saXN0X2NiKGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLCBnaXRfYnJhbmNoX3QgYnJhbmNoX3R5cGUsIHZvaWQgKnBheWxvYWQpCi17Ci0JaW50IHBvcyA9IDA7Ci0Jc3RydWN0IGV4cGVjdGF0aW9ucyAqZXhwOwotCi0JR0lUX1VOVVNFRChicmFuY2hfdHlwZSk7Ci0KLQlleHAgPSAoc3RydWN0IGV4cGVjdGF0aW9ucyAqKXBheWxvYWQ7Ci0KLQlmb3IgKHBvcyA9IDA7IGV4cFtwb3NdLmJyYW5jaF9uYW1lOyArK3BvcykgewotCQlpZiAoc3RyY21wKGJyYW5jaF9uYW1lLCBleHBbcG9zXS5icmFuY2hfbmFtZSkgPT0gMCkKLQkJCWV4cFtwb3NdLmVuY291bnRlcnMrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICQgZ2l0IGJyYW5jaCAtcgotICogIG51bGx0b2tlbi9IRUFEIC0+IG51bGx0b2tlbi9tYXN0ZXIKLSAqICBudWxsdG9rZW4vbWFzdGVyCi0gKi8KLXZvaWQgdGVzdF9yZWZzX2JyYW5jaGVzX2ZvcmVhY2hfX3JldHJpZXZlX3JlbW90ZV9zeW1ib2xpY19IRUFEX3doZW5fcHJlc2VudCh2b2lkKQotewotCXN0cnVjdCBleHBlY3RhdGlvbnMgZXhwW10gPSB7Ci0JCXsgIm51bGx0b2tlbi9IRUFEIiwgMCB9LAotCQl7ICJudWxsdG9rZW4vbWFzdGVyIiwgMCB9LAotCQl7IE5VTEwsIDAgfQotCX07Ci0KLQlnaXRfcmVmZXJlbmNlX2ZyZWUoZmFrZV9yZW1vdGUpOwotCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfY3JlYXRlKCZmYWtlX3JlbW90ZSwgcmVwbywgInJlZnMvcmVtb3Rlcy9udWxsdG9rZW4vSEVBRCIsICJyZWZzL3JlbW90ZXMvbnVsbHRva2VuL21hc3RlciIsIDApKTsKLQotCWFzc2VydF9yZXRyaWV2YWwoR0lUX0JSQU5DSF9SRU1PVEUsIDMpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2JyYW5jaF9mb3JlYWNoKHJlcG8sIEdJVF9CUkFOQ0hfUkVNT1RFLCBjb250YWluc19icmFuY2hfbGlzdF9jYiwgJmV4cCkpOwotCi0JYXNzZXJ0X2JyYW5jaF9oYXNfYmVlbl9mb3VuZChleHAsICJudWxsdG9rZW4vSEVBRCIpOwotCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAibnVsbHRva2VuL21hc3RlciIpOwotfQotCi1zdGF0aWMgaW50IGJyYW5jaF9saXN0X2ludGVycnVwdF9jYigKLQljb25zdCBjaGFyICpicmFuY2hfbmFtZSwgZ2l0X2JyYW5jaF90IGJyYW5jaF90eXBlLCB2b2lkICpwYXlsb2FkKQotewotCWludCAqY291bnQ7Ci0KLQlHSVRfVU5VU0VEKGJyYW5jaF90eXBlKTsKLQlHSVRfVU5VU0VEKGJyYW5jaF9uYW1lKTsKLQotCWNvdW50ID0gKGludCAqKXBheWxvYWQ7Ci0JKCpjb3VudCkrKzsKLQotCXJldHVybiAoKmNvdW50ID09IDUpOwotfQotCi12b2lkIHRlc3RfcmVmc19icmFuY2hlc19mb3JlYWNoX19jYW5fY2FuY2VsKHZvaWQpCi17Ci0JaW50IGNvdW50ID0gMDsKLQotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FVVNFUiwKLQkJZ2l0X2JyYW5jaF9mb3JlYWNoKHJlcG8sIEdJVF9CUkFOQ0hfTE9DQUwgfCBHSVRfQlJBTkNIX1JFTU9URSwKLQkJCWJyYW5jaF9saXN0X2ludGVycnVwdF9jYiwgJmNvdW50KSk7Ci0KLQljbF9hc3NlcnRfZXF1YWxfaSg1LCBjb3VudCk7Ci19Ci0KLXZvaWQgdGVzdF9yZWZzX2JyYW5jaGVzX2ZvcmVhY2hfX21peF9vZl9wYWNrZWRfYW5kX2xvb3NlKHZvaWQpCi17Ci0Jc3RydWN0IGV4cGVjdGF0aW9ucyBleHBbXSA9IHsKLQkJeyAibWFzdGVyIiwgMCB9LAotCQl7ICJvcmlnaW4vSEVBRCIsIDAgfSwKLQkJeyAib3JpZ2luL21hc3RlciIsIDAgfSwKLQkJeyAib3JpZ2luL3BhY2tlZCIsIDAgfSwKLQkJeyBOVUxMLCAwIH0KLQl9OwotCWdpdF9yZXBvc2l0b3J5ICpyMjsKLQotCXIyID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8yIik7Ci0KLQljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2ZvcmVhY2gocjIsIEdJVF9CUkFOQ0hfTE9DQUwgfCBHSVRfQlJBTkNIX1JFTU9URSwKLQkJY29udGFpbnNfYnJhbmNoX2xpc3RfY2IsICZleHApKTsKLQotCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAibWFzdGVyIik7Ci0JYXNzZXJ0X2JyYW5jaF9oYXNfYmVlbl9mb3VuZChleHAsICJvcmlnaW4vSEVBRCIpOwotCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAib3JpZ2luL21hc3RlciIpOwotCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAib3JpZ2luL3BhY2tlZCIpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL3VuaWNvZGUuYyBiL3Rlc3RzLWNsYXIvcmVmcy91bmljb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYzEwMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci9yZWZzL3VuaWNvZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKLQotc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpyZXBvOwotCi12b2lkIHRlc3RfcmVmc191bmljb2RlX19pbml0aWFsaXplKHZvaWQpCi17Ci0JY2xfZml4dHVyZV9zYW5kYm94KCJ0ZXN0cmVwby5naXQiKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8sICJ0ZXN0cmVwby5naXQiKSk7Ci19Ci0KLXZvaWQgdGVzdF9yZWZzX3VuaWNvZGVfX2NsZWFudXAodm9pZCkKLXsKLQlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOwotCXJlcG8gPSBOVUxMOwotCi0JY2xfZml4dHVyZV9jbGVhbnVwKCJ0ZXN0cmVwby5naXQiKTsKLX0KLQotdm9pZCB0ZXN0X3JlZnNfdW5pY29kZV9fY3JlYXRlX2FuZF9sb29rdXAodm9pZCkKLXsKLQlnaXRfcmVmZXJlbmNlICpyZWYwLCAqcmVmMSwgKnJlZjI7Ci0JZ2l0X3JlcG9zaXRvcnkgKnJlcG8yOwotCi0JY29uc3QgY2hhciAqUkVGTkFNRSA9ICJyZWZzL2hlYWRzLyIgIlwzMDUiICJuZ3N0ciIgIlwzNjYiICJtIjsKLQljb25zdCBjaGFyICptYXN0ZXIgPSAicmVmcy9oZWFkcy9tYXN0ZXIiOwotCi0JLyogQ3JlYXRlIHRoZSByZWZlcmVuY2UgKi8KLQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmMCwgcmVwbywgbWFzdGVyKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9jcmVhdGUoJnJlZjEsIHJlcG8sIFJFRk5BTUUsIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZjApLCAwKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoUkVGTkFNRSwgZ2l0X3JlZmVyZW5jZV9uYW1lKHJlZjEpKTsKLQotCS8qIExvb2t1cCB0aGUgcmVmZXJlbmNlIGluIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoZSByZXBvc2l0b3J5ICovCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbzIsICJ0ZXN0cmVwby5naXQiKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZjIsIHJlcG8yLCBSRUZOQU1FKSk7Ci0KLQljbF9hc3NlcnQoZ2l0X29pZF9jbXAoZ2l0X3JlZmVyZW5jZV90YXJnZXQocmVmMSksIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZjIpKSA9PSAwKTsKLQljbF9hc3NlcnRfZXF1YWxfcyhSRUZOQU1FLCBnaXRfcmVmZXJlbmNlX25hbWUocmVmMikpOwotCi0JZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZjApOwotCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYxKTsKLQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmMik7Ci0JZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvMik7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2NvbmZpZyBiL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVmNDgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1bY29yZV0KLQlyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9IDAKLQlmaWxlbW9kZSA9IHRydWUKLQliYXJlID0gZmFsc2UKLQlsb2dhbGxyZWZ1cGRhdGVzID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL2luZm8vcGFja3MgYi90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvaW5mby9wYWNrcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY5NmE3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvaW5mby9wYWNrcworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotUCBwYWNrLWU4Nzk5NGFkNTgxYzlhZjk0NmRlMGViODkwMTc1YzA4Y2QwMDVmMzgucGFjawotCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL2dpdG1vZHVsZXMgYi90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL2dpdG1vZHVsZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjJmOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy9naXRtb2R1bGVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1bc3VibW9kdWxlICJ0ZXN0cmVwbyJdCi0JcGF0aCA9IHRlc3RyZXBvCi0JdXJsID0gClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9zdGFzaC9zdGFzaF9oZWxwZXJzLmggYi90ZXN0cy1jbGFyL3N0YXNoL3N0YXNoX2hlbHBlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3ZmVjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL3N0YXNoL3N0YXNoX2hlbHBlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotdm9pZCBzZXR1cF9zdGFzaCgKLQlnaXRfcmVwb3NpdG9yeSAqcmVwbywKLQlnaXRfc2lnbmF0dXJlICpzaWduYXR1cmUpOwotCi12b2lkIGNvbW1pdF9zdGFnZWRfZmlsZXMoCi0JZ2l0X29pZCAqY29tbWl0X29pZCwKLQlnaXRfaW5kZXggKmluZGV4LAotCWdpdF9zaWduYXR1cmUgKnNpZ25hdHVyZSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9zdWJtb2R1bGUvbG9va3VwLmMgYi90ZXN0cy1jbGFyL3N1Ym1vZHVsZS9sb29rdXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNmOGY2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL3N1Ym1vZHVsZS9sb29rdXAuYworKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0jaW5jbHVkZSAic3VibW9kdWxlX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJwb3NpeC5oIgotCi1zdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7Ci0KLXZvaWQgdGVzdF9zdWJtb2R1bGVfbG9va3VwX19pbml0aWFsaXplKHZvaWQpCi17Ci0JZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3VibW9kMiIpOwotCi0JY2xfZml4dHVyZV9zYW5kYm94KCJzdWJtb2QyX3RhcmdldCIpOwotCXBfcmVuYW1lKCJzdWJtb2QyX3RhcmdldC8uZ2l0dGVkIiwgInN1Ym1vZDJfdGFyZ2V0Ly5naXQiKTsKLQotCS8qIG11c3QgY3JlYXRlIHN1Ym1vZDJfdGFyZ2V0IGJlZm9yZSByZXdyaXRlIHNvIHByZXR0aWZ5IHdpbGwgd29yayAqLwotCXJld3JpdGVfZ2l0bW9kdWxlcyhnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGdfcmVwbykpOwotCXBfcmVuYW1lKCJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZCIsICJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdCIpOwotfQotCi12b2lkIHRlc3Rfc3VibW9kdWxlX2xvb2t1cF9fY2xlYW51cCh2b2lkKQotewotCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKLQljbF9maXh0dXJlX2NsZWFudXAoInN1Ym1vZDJfdGFyZ2V0Iik7Ci19Ci0KLXZvaWQgdGVzdF9zdWJtb2R1bGVfbG9va3VwX19zaW1wbGVfbG9va3VwKHZvaWQpCi17Ci0JZ2l0X3N1Ym1vZHVsZSAqc207Ci0KLQkvKiBsb29rdXAgZXhpc3RpbmcgKi8KLQljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgInNtX3VuY2hhbmdlZCIpKTsKLQljbF9hc3NlcnQoc20pOwotCi0JLyogbG9va3VwIHBlbmRpbmcgY2hhbmdlIGluIC5naXRtb2R1bGVzIHRoYXQgaXMgbm90IGluIEhFQUQgKi8KLQljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgInNtX2FkZGVkX2FuZF91bmNvbW1pdGVkIikpOwotCWNsX2Fzc2VydChzbSk7Ci0KLQkvKiBsb29rdXAgcGVuZGluZyBjaGFuZ2UgaW4gLmdpdG1vZHVsZXMgdGhhdCBpcyBuZWl0aGVyIGluIEhFQUQgbm9yIGluZGV4ICovCi0JY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV9naXRtb2R1bGVzX29ubHkiKSk7Ci0JY2xfYXNzZXJ0KHNtKTsKLQotCS8qIGxvb2t1cCBnaXQgcmVwbyBzdWJkaXIgdGhhdCBpcyBub3QgYWRkZWQgYXMgc3VibW9kdWxlICovCi0JY2xfYXNzZXJ0KGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAibm90LXN1Ym1vZHVsZSIpID09IEdJVF9FRVhJU1RTKTsKLQotCS8qIGxvb2t1cCBleGlzdGluZyBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUgKi8KLQljbF9hc3NlcnQoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJqdXN0X2FfZGlyIikgPT0gR0lUX0VOT1RGT1VORCk7Ci0KLQkvKiBsb29rdXAgZXhpc3RpbmcgZmlsZSB0aGF0IGlzIG5vdCBhIHN1Ym1vZHVsZSAqLwotCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgImp1c3RfYV9maWxlIikgPT0gR0lUX0VOT1RGT1VORCk7Ci0KLQkvKiBsb29rdXAgbm9uLWV4aXN0ZW50IGl0ZW0gKi8KLQljbF9hc3NlcnQoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJub19zdWNoX2ZpbGUiKSA9PSBHSVRfRU5PVEZPVU5EKTsKLX0KLQotdm9pZCB0ZXN0X3N1Ym1vZHVsZV9sb29rdXBfX2FjY2Vzc29ycyh2b2lkKQotewotCWdpdF9zdWJtb2R1bGUgKnNtOwotCWNvbnN0IGNoYXIgKm9pZCA9ICI0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwIjsKLQotCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fdW5jaGFuZ2VkIikpOwotCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX293bmVyKHNtKSA9PSBnX3JlcG8pOwotCWNsX2Fzc2VydF9lcXVhbF9zKCJzbV91bmNoYW5nZWQiLCBnaXRfc3VibW9kdWxlX25hbWUoc20pKTsKLQljbF9hc3NlcnQoZ2l0X19zdWZmaXhjbXAoZ2l0X3N1Ym1vZHVsZV9wYXRoKHNtKSwgInNtX3VuY2hhbmdlZCIpID09IDApOwotCWNsX2Fzc2VydChnaXRfX3N1ZmZpeGNtcChnaXRfc3VibW9kdWxlX3VybChzbSksICIvc3VibW9kMl90YXJnZXQiKSA9PSAwKTsKLQotCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfaW5kZXhfaWQoc20pLCBvaWQpID09IDApOwotCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfaGVhZF9pZChzbSksIG9pZCkgPT0gMCk7Ci0JY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV93ZF9pZChzbSksIG9pZCkgPT0gMCk7Ci0KLQljbF9hc3NlcnQoZ2l0X3N1Ym1vZHVsZV9pZ25vcmUoc20pID09IEdJVF9TVUJNT0RVTEVfSUdOT1JFX05PTkUpOwotCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX3VwZGF0ZShzbSkgPT0gR0lUX1NVQk1PRFVMRV9VUERBVEVfQ0hFQ0tPVVQpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV9jaGFuZ2VkX2hlYWQiKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoInNtX2NoYW5nZWRfaGVhZCIsIGdpdF9zdWJtb2R1bGVfbmFtZShzbSkpOwotCi0JY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV9pbmRleF9pZChzbSksIG9pZCkgPT0gMCk7Ci0JY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV9oZWFkX2lkKHNtKSwgb2lkKSA9PSAwKTsKLQljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX3dkX2lkKHNtKSwKLQkJIjNkOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDciKSA9PSAwKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fYWRkZWRfYW5kX3VuY29tbWl0ZWQiKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MoInNtX2FkZGVkX2FuZF91bmNvbW1pdGVkIiwgZ2l0X3N1Ym1vZHVsZV9uYW1lKHNtKSk7Ci0KLQljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX2luZGV4X2lkKHNtKSwgb2lkKSA9PSAwKTsKLQljbF9hc3NlcnQoZ2l0X3N1Ym1vZHVsZV9oZWFkX2lkKHNtKSA9PSBOVUxMKTsKLQljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX3dkX2lkKHNtKSwgb2lkKSA9PSAwKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fbWlzc2luZ19jb21taXRzIikpOwotCWNsX2Fzc2VydF9lcXVhbF9zKCJzbV9taXNzaW5nX2NvbW1pdHMiLCBnaXRfc3VibW9kdWxlX25hbWUoc20pKTsKLQotCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfaW5kZXhfaWQoc20pLCBvaWQpID09IDApOwotCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfaGVhZF9pZChzbSksIG9pZCkgPT0gMCk7Ci0JY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV93ZF9pZChzbSksCi0JCSI1ZTQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkIikgPT0gMCk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgY291bnQ7Ci19IHNtX2xvb2t1cF9kYXRhOwotCi1zdGF0aWMgaW50IHNtX2xvb2t1cF9jYihnaXRfc3VibW9kdWxlICpzbSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcGF5bG9hZCkKLXsKLQlzbV9sb29rdXBfZGF0YSAqZGF0YSA9IHBheWxvYWQ7Ci0JZGF0YS0+Y291bnQgKz0gMTsKLQljbF9hc3NlcnRfZXF1YWxfcyhnaXRfc3VibW9kdWxlX25hbWUoc20pLCBuYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB0ZXN0X3N1Ym1vZHVsZV9sb29rdXBfX2ZvcmVhY2godm9pZCkKLXsKLQlzbV9sb29rdXBfZGF0YSBkYXRhOwotCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKLQljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2ZvcmVhY2goZ19yZXBvLCBzbV9sb29rdXBfY2IsICZkYXRhKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koOCwgZGF0YS5jb3VudCk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5oIGIvdGVzdHMtY2xhci9zdWJtb2R1bGUvc3VibW9kdWxlX2hlbHBlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI3NmE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy1jbGFyL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1leHRlcm4gdm9pZCByZXdyaXRlX2dpdG1vZHVsZXMoY29uc3QgY2hhciAqd29ya2Rpcik7Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvdGhyZWFkcy9iYXNpYy5jIGIvdGVzdHMtY2xhci90aHJlYWRzL2Jhc2ljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNWM1MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMtY2xhci90aHJlYWRzL2Jhc2ljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCi0KLSNpbmNsdWRlICJjYWNoZS5oIgotCi0KLXN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvOwotCi12b2lkIHRlc3RfdGhyZWFkc19iYXNpY19faW5pdGlhbGl6ZSh2b2lkKQotewotCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvIik7Ci19Ci0KLXZvaWQgdGVzdF90aHJlYWRzX2Jhc2ljX19jbGVhbnVwKHZvaWQpCi17Ci0JY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwotfQotCi0KLXZvaWQgdGVzdF90aHJlYWRzX2Jhc2ljX19jYWNoZSh2b2lkKQotewotCS8vIHJ1biBzZXZlcmFsIHRocmVhZHMgcG9sbGluZyB0aGUgY2FjaGUgYXQgdGhlIHNhbWUgdGltZQotCWNsX2Fzc2VydCgxID09IDEpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9SRUFETUUubWQgYi90ZXN0cy9SRUFETUUubWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvUkVBRE1FLm1kCnJlbmFtZSB0byB0ZXN0cy9SRUFETUUubWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvYXR0ci9hdHRyX2V4cGVjdC5oIGIvdGVzdHMvYXR0ci9hdHRyX2V4cGVjdC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2F0dHIvYXR0cl9leHBlY3QuaApyZW5hbWUgdG8gdGVzdHMvYXR0ci9hdHRyX2V4cGVjdC5oCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2F0dHIvZmlsZS5jIGIvdGVzdHMvYXR0ci9maWxlLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9hdHRyL2ZpbGUuYwpyZW5hbWUgdG8gdGVzdHMvYXR0ci9maWxlLmMKaW5kZXggODg2NmZkOS4uNGViMWQyMiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9hdHRyL2ZpbGUuYworKysgYi90ZXN0cy9hdHRyL2ZpbGUuYwpAQCAtNDksNyArNDksNiBAQAogCWNsX2Fzc2VydChydWxlKTsKIAljbF9hc3NlcnRfZXF1YWxfcygicGF0MCIsIHJ1bGUtPm1hdGNoLnBhdHRlcm4pOwogCWNsX2Fzc2VydChydWxlLT5tYXRjaC5sZW5ndGggPT0gc3RybGVuKCJwYXQwIikpOwotCWNsX2Fzc2VydChydWxlLT5tYXRjaC5mbGFncyA9PSAwKTsKIAljbF9hc3NlcnQocnVsZS0+YXNzaWducy5sZW5ndGggPT0gMSk7CiAJYXNzaWduID0gZ2V0X2Fzc2lnbihydWxlLDApOwogCWNsX2Fzc2VydF9lcXVhbF9zKCJhdHRyMCIsIGFzc2lnbi0+bmFtZSk7CkBAIC01OSwxNiArNTgsMTYgQEAKIAlydWxlID0gZ2V0X3J1bGUoMSk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MoInBhdDEiLCBydWxlLT5tYXRjaC5wYXR0ZXJuKTsKIAljbF9hc3NlcnQocnVsZS0+bWF0Y2gubGVuZ3RoID09IHN0cmxlbigicGF0MSIpKTsKLQljbF9hc3NlcnQocnVsZS0+bWF0Y2guZmxhZ3MgPT0gR0lUX0FUVFJfRk5NQVRDSF9ORUdBVElWRSk7CisJY2xfYXNzZXJ0KChydWxlLT5tYXRjaC5mbGFncyAmIEdJVF9BVFRSX0ZOTUFUQ0hfTkVHQVRJVkUpICE9IDApOwogCiAJcnVsZSA9IGdldF9ydWxlKDIpOwogCWNsX2Fzc2VydF9lcXVhbF9zKCJwYXQyIiwgcnVsZS0+bWF0Y2gucGF0dGVybik7CiAJY2xfYXNzZXJ0KHJ1bGUtPm1hdGNoLmxlbmd0aCA9PSBzdHJsZW4oInBhdDIiKSk7Ci0JY2xfYXNzZXJ0KHJ1bGUtPm1hdGNoLmZsYWdzID09IEdJVF9BVFRSX0ZOTUFUQ0hfRElSRUNUT1JZKTsKKwljbF9hc3NlcnQoKHJ1bGUtPm1hdGNoLmZsYWdzICYgR0lUX0FUVFJfRk5NQVRDSF9ESVJFQ1RPUlkpICE9IDApOwogCiAJcnVsZSA9IGdldF9ydWxlKDMpOwogCWNsX2Fzc2VydF9lcXVhbF9zKCJwYXQzZGlyL3BhdDNmaWxlIiwgcnVsZS0+bWF0Y2gucGF0dGVybik7Ci0JY2xfYXNzZXJ0KHJ1bGUtPm1hdGNoLmZsYWdzID09IEdJVF9BVFRSX0ZOTUFUQ0hfRlVMTFBBVEgpOworCWNsX2Fzc2VydCgocnVsZS0+bWF0Y2guZmxhZ3MgJiBHSVRfQVRUUl9GTk1BVENIX0ZVTExQQVRIKSAhPSAwKTsKIAogCXJ1bGUgPSBnZXRfcnVsZSg0KTsKIAljbF9hc3NlcnRfZXF1YWxfcygicGF0NC4qIiwgcnVsZS0+bWF0Y2gucGF0dGVybik7CkBAIC04OSw3ICs4OCw2IEBACiAJcnVsZSA9IGdldF9ydWxlKDgpOwogCWNsX2Fzc2VydF9lcXVhbF9zKCJwYXQ4IHdpdGggc3BhY2VzIiwgcnVsZS0+bWF0Y2gucGF0dGVybik7CiAJY2xfYXNzZXJ0KHJ1bGUtPm1hdGNoLmxlbmd0aCA9PSBzdHJsZW4oInBhdDggd2l0aCBzcGFjZXMiKSk7Ci0JY2xfYXNzZXJ0KHJ1bGUtPm1hdGNoLmZsYWdzID09IDApOwogCiAJcnVsZSA9IGdldF9ydWxlKDkpOwogCWNsX2Fzc2VydF9lcXVhbF9zKCJwYXQ5IiwgcnVsZS0+bWF0Y2gucGF0dGVybik7CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2F0dHIvZmxhZ3MuYyBiL3Rlc3RzL2F0dHIvZmxhZ3MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9hdHRyL2ZsYWdzLmMKcmVuYW1lIHRvIHRlc3RzL2F0dHIvZmxhZ3MuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9hdHRyL2lnbm9yZS5jIGIvdGVzdHMvYXR0ci9pZ25vcmUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9hdHRyL2lnbm9yZS5jCnJlbmFtZSB0byB0ZXN0cy9hdHRyL2lnbm9yZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2F0dHIvbG9va3VwLmMgYi90ZXN0cy9hdHRyL2xvb2t1cC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2F0dHIvbG9va3VwLmMKcmVuYW1lIHRvIHRlc3RzL2F0dHIvbG9va3VwLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvYXR0ci9yZXBvLmMgYi90ZXN0cy9hdHRyL3JlcG8uYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2F0dHIvcmVwby5jCnJlbmFtZSB0byB0ZXN0cy9hdHRyL3JlcG8uYwppbmRleCBjYTNlNzFlLi5lZjJhZDVjIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2F0dHIvcmVwby5jCisrKyBiL3Rlc3RzL2F0dHIvcmVwby5jCkBAIC0xMDAsNiArMTAwLDIyIEBACiAJY2xfYXNzZXJ0X2VxdWFsX3MoInllcyIsIHZhbHVlc1szXSk7CiB9CiAKK3ZvaWQgdGVzdF9hdHRyX3JlcG9fX2dldF9tYW55X2luX3BsYWNlKHZvaWQpCit7CisJY29uc3QgY2hhciAqdmFsc1s0XSA9IHsgInJlcG9hdHRyIiwgInJvb3RhdHRyIiwgIm1pc3NpbmdhdHRyIiwgInN1YmF0dHIiIH07CisKKwkvKiBpdCBzaG91bGQgYmUgbGVnYWwgdG8gbG9vayB1cCB2YWx1ZXMgaW50byB0aGUgc2FtZSBhcnJheSB0aGF0IGhhcworCSAqIHRoZSBhdHRyaWJ1dGUgbmFtZXMsIG92ZXJ3cml0aW5nIGVhY2ggbmFtZSBhcyB0aGUgdmFsdWUgaXMgZm91bmQuCisJICovCisKKwljbF9naXRfcGFzcyhnaXRfYXR0cl9nZXRfbWFueSh2YWxzLCBnX3JlcG8sIDAsICJzdWIvc3ViZGlyX3Rlc3QxIiwgNCwgdmFscykpOworCisJY2xfYXNzZXJ0KEdJVF9BVFRSX1RSVUUodmFsc1swXSkpOworCWNsX2Fzc2VydChHSVRfQVRUUl9UUlVFKHZhbHNbMV0pKTsKKwljbF9hc3NlcnQoR0lUX0FUVFJfVU5TUEVDSUZJRUQodmFsc1syXSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJ5ZXMiLCB2YWxzWzNdKTsKK30KKwogc3RhdGljIGludCBjb3VudF9hdHRycygKIAljb25zdCBjaGFyICpuYW1lLAogCWNvbnN0IGNoYXIgKnZhbHVlLApkaWZmIC0tZ2l0IGEvdGVzdHMvYmxhbWUvYmxhbWVfaGVscGVycy5jIGIvdGVzdHMvYmxhbWUvYmxhbWVfaGVscGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NGJiNWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ibGFtZS9ibGFtZV9oZWxwZXJzLmMKQEAgLTAsMCArMSw2NCBAQAorI2luY2x1ZGUgImJsYW1lX2hlbHBlcnMuaCIKKwordm9pZCBodW5rX21lc3NhZ2Uoc2l6ZV90IGlkeCwgY29uc3QgZ2l0X2JsYW1lX2h1bmsgKmh1bmssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnbGlzdDsKKworCXByaW50ZigiSHVuayAlemQgKGxpbmUgJWQgKyVkKTogIiwgaWR4LAorCQkJaHVuay0+ZmluYWxfc3RhcnRfbGluZV9udW1iZXIsIGh1bmstPmxpbmVzX2luX2h1bmstMSk7CisKKwl2YV9zdGFydChhcmdsaXN0LCBmbXQpOworCXZwcmludGYoZm10LCBhcmdsaXN0KTsKKwl2YV9lbmQoYXJnbGlzdCk7CisKKwlwcmludGYoIlxuIik7Cit9CisKK3ZvaWQgY2hlY2tfYmxhbWVfaHVua19pbmRleChnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X2JsYW1lICpibGFtZSwgaW50IGlkeCwKKwkJaW50IHN0YXJ0X2xpbmUsIGludCBsZW4sIGNoYXIgYm91bmRhcnksIGNvbnN0IGNoYXIgKmNvbW1pdF9pZCwgY29uc3QgY2hhciAqb3JpZ19wYXRoKQoreworCWNoYXIgZXhwZWN0ZWRbNDFdID0gezB9LCBhY3R1YWxbNDFdID0gezB9OworCWNvbnN0IGdpdF9ibGFtZV9odW5rICpodW5rID0gZ2l0X2JsYW1lX2dldF9odW5rX2J5aW5kZXgoYmxhbWUsIGlkeCk7CisJY2xfYXNzZXJ0KGh1bmspOworCisJaWYgKCFzdHJuY21wKGNvbW1pdF9pZCwgIjAwMDAiLCA0KSkgeworCQlzdHJjcHkoZXhwZWN0ZWQsICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7CisJfSBlbHNlIHsKKwkJZ2l0X29iamVjdCAqb2JqOworCQljbF9naXRfcGFzcyhnaXRfcmV2cGFyc2Vfc2luZ2xlKCZvYmosIHJlcG8sIGNvbW1pdF9pZCkpOworCQlnaXRfb2lkX2ZtdChleHBlY3RlZCwgZ2l0X29iamVjdF9pZChvYmopKTsKKwkJZ2l0X29iamVjdF9mcmVlKG9iaik7CisJfQorCisJaWYgKGh1bmstPmZpbmFsX3N0YXJ0X2xpbmVfbnVtYmVyICE9IHN0YXJ0X2xpbmUpIHsKKwkJaHVua19tZXNzYWdlKGlkeCwgaHVuaywgIm1pc21hdGNoZWQgc3RhcnQgbGluZSBudW1iZXI6IGV4cGVjdGVkICVkLCBnb3QgJWQiLAorCQkJCXN0YXJ0X2xpbmUsIGh1bmstPmZpbmFsX3N0YXJ0X2xpbmVfbnVtYmVyKTsKKwl9CisJY2xfYXNzZXJ0X2VxdWFsX2koaHVuay0+ZmluYWxfc3RhcnRfbGluZV9udW1iZXIsIHN0YXJ0X2xpbmUpOworCisJaWYgKGh1bmstPmxpbmVzX2luX2h1bmsgIT0gbGVuKSB7CisJCWh1bmtfbWVzc2FnZShpZHgsIGh1bmssICJtaXNtYXRjaGVkIGxpbmUgY291bnQ6IGV4cGVjdGVkICVkLCBnb3QgJWQiLAorCQkJCWxlbiwgaHVuay0+bGluZXNfaW5faHVuayk7CisJfQorCWNsX2Fzc2VydF9lcXVhbF9pKGh1bmstPmxpbmVzX2luX2h1bmssIGxlbik7CisKKwlnaXRfb2lkX2ZtdChhY3R1YWwsICZodW5rLT5maW5hbF9jb21taXRfaWQpOworCWlmIChzdHJjbXAoZXhwZWN0ZWQsIGFjdHVhbCkpIHsKKwkJaHVua19tZXNzYWdlKGlkeCwgaHVuaywgImhhcyBtaXNtYXRjaGVkIG9yaWdpbmFsIGlkIChnb3QgJXMsIGV4cGVjdGVkICVzKVxuIiwKKwkJCQlhY3R1YWwsIGV4cGVjdGVkKTsKKwl9CisJY2xfYXNzZXJ0X2VxdWFsX3MoYWN0dWFsLCBleHBlY3RlZCk7CisJaWYgKHN0cmNtcChodW5rLT5vcmlnX3BhdGgsIG9yaWdfcGF0aCkpIHsKKwkJaHVua19tZXNzYWdlKGlkeCwgaHVuaywgImhhcyBtaXNtYXRjaGVkIG9yaWdpbmFsIHBhdGggKGdvdCAnJXMnLCBleHBlY3RlZCAnJXMnKVxuIiwKKwkJCQlodW5rLT5vcmlnX3BhdGgsIG9yaWdfcGF0aCk7CisJfQorCWNsX2Fzc2VydF9lcXVhbF9zKGh1bmstPm9yaWdfcGF0aCwgb3JpZ19wYXRoKTsKKworCWlmIChodW5rLT5ib3VuZGFyeSAhPSBib3VuZGFyeSkgeworCQlodW5rX21lc3NhZ2UoaWR4LCBodW5rLCAiZG9lc24ndCBtYXRjaCBib3VuZGFyeSBmbGFnIChnb3QgJWQsIGV4cGVjdGVkICVkKVxuIiwKKwkJCQlodW5rLT5ib3VuZGFyeSwgYm91bmRhcnkpOworCX0KKwljbF9hc3NlcnRfZXF1YWxfaShib3VuZGFyeSwgaHVuay0+Ym91bmRhcnkpOworfQorCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2JsYW1lL2JsYW1lX2hlbHBlcnMuaCBiL3Rlc3RzL2JsYW1lL2JsYW1lX2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDMyMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmxhbWUvYmxhbWVfaGVscGVycy5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJibGFtZS5oIgorCit2b2lkIGh1bmtfbWVzc2FnZShzaXplX3QgaWR4LCBjb25zdCBnaXRfYmxhbWVfaHVuayAqaHVuaywgY29uc3QgY2hhciAqZm10LCAuLi4pOworCit2b2lkIGNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoCisJCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCQlnaXRfYmxhbWUgKmJsYW1lLAorCQlpbnQgaWR4LAorCQlpbnQgc3RhcnRfbGluZSwKKwkJaW50IGxlbiwKKwkJY2hhciBib3VuZGFyeSwKKwkJY29uc3QgY2hhciAqY29tbWl0X2lkLAorCQljb25zdCBjaGFyICpvcmlnX3BhdGgpOworCisKZGlmZiAtLWdpdCBhL3Rlc3RzL2JsYW1lL2J1ZmZlci5jIGIvdGVzdHMvYmxhbWUvYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyZWU5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JsYW1lL2J1ZmZlci5jCkBAIC0wLDAgKzEsMTY2IEBACisjaW5jbHVkZSAiYmxhbWVfaGVscGVycy5oIgorCitnaXRfcmVwb3NpdG9yeSAqZ19yZXBvOworZ2l0X2JsYW1lICpnX2ZpbGVibGFtZSwgKmdfYnVmZmVyYmxhbWU7CisKK3ZvaWQgdGVzdF9ibGFtZV9idWZmZXJfX2luaXRpYWxpemUodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoImJsYW1ldGVzdC5naXQiKSkpOworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9maWxlKCZnX2ZpbGVibGFtZSwgZ19yZXBvLCAiYi50eHQiLCBOVUxMKSk7CisJZ19idWZmZXJibGFtZSA9IE5VTEw7Cit9CisKK3ZvaWQgdGVzdF9ibGFtZV9idWZmZXJfX2NsZWFudXAodm9pZCkKK3sKKwlnaXRfYmxhbWVfZnJlZShnX2ZpbGVibGFtZSk7CisJZ2l0X2JsYW1lX2ZyZWUoZ19idWZmZXJibGFtZSk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShnX3JlcG8pOworfQorCit2b2lkIHRlc3RfYmxhbWVfYnVmZmVyX19hZGRlZF9saW5lKHZvaWQpCit7CisJY29uc3QgZ2l0X2JsYW1lX2h1bmsgKmh1bms7CisKKwljb25zdCBjaGFyICpidWZmZXIgPSAiXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK1xuXAorYWJjZGVmZ1xuXAorQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcblwKK1xuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblwKK0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblxuIjsKKworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9idWZmZXIoJmdfYnVmZmVyYmxhbWUsIGdfZmlsZWJsYW1lLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNSwgZ2l0X2JsYW1lX2dldF9odW5rX2NvdW50KGdfYnVmZmVyYmxhbWUpKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19idWZmZXJibGFtZSwgMiwgNiwgMSwgMCwgIjAwMDAwMCIsICJiLnR4dCIpOworCisJaHVuayA9IGdpdF9ibGFtZV9nZXRfaHVua19ieWxpbmUoZ19idWZmZXJibGFtZSwgMTYpOworCWNsX2Fzc2VydChodW5rKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiQmVuIFN0cmF1YiIsIGh1bmstPmZpbmFsX3NpZ25hdHVyZS0+bmFtZSk7Cit9CisKK3ZvaWQgdGVzdF9ibGFtZV9idWZmZXJfX2RlbGV0ZWRfbGluZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9ICJcCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCitcblwKK0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblwKK0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDXG5cbiI7CisKKwljbF9naXRfcGFzcyhnaXRfYmxhbWVfYnVmZmVyKCZnX2J1ZmZlcmJsYW1lLCBnX2ZpbGVibGFtZSwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSkpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2J1ZmZlcmJsYW1lLCAyLCAgNiwgMywgMCwgIjYzZDY3MWViIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYnVmZmVyYmxhbWUsIDMsICA5LCAxLCAwLCAiNjNkNjcxZWIiLCAiYi50eHQiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19idWZmZXJibGFtZSwgNCwgMTAsIDUsIDAsICJhYTA2ZWNjYSIsICJiLnR4dCIpOworfQorCit2b2lkIHRlc3RfYmxhbWVfYnVmZmVyX19hZGRfc3BsaXRzX2h1bmsodm9pZCkKK3sKKwljb25zdCBjaGFyICpidWZmZXIgPSAiXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK1xuXAorQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCithYmNcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblwKK0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXG4iOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2JsYW1lX2J1ZmZlcigmZ19idWZmZXJibGFtZSwgZ19maWxlYmxhbWUsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19idWZmZXJibGFtZSwgMiwgNiwgMiwgMCwgIjYzZDY3MWViIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYnVmZmVyYmxhbWUsIDMsIDgsIDEsIDAsICIwMDAwMDAwMCIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2J1ZmZlcmJsYW1lLCA0LCA5LCAzLCAwLCAiNjNkNjcxZWIiLCAiYi50eHQiKTsKK30KKwordm9pZCB0ZXN0X2JsYW1lX2J1ZmZlcl9fZGVsZXRlX2Nyb3NzZXNfaHVua19ib3VuZGFyeSh2b2lkKQoreworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9ICJcCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblxuIjsKKworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9idWZmZXIoJmdfYnVmZmVyYmxhbWUsIGdfZmlsZWJsYW1lLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKSk7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYnVmZmVyYmxhbWUsIDIsIDYsIDEsIDAsICI2M2Q2NzFlYiIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2J1ZmZlcmJsYW1lLCAzLCA3LCAyLCAwLCAiYWEwNmVjY2EiLCAiYi50eHQiKTsKK30KKwordm9pZCB0ZXN0X2JsYW1lX2J1ZmZlcl9fcmVwbGFjZV9saW5lKHZvaWQpCit7CisJY29uc3QgY2hhciAqYnVmZmVyID0gIlwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCithYmNcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblwKK0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXG4iOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2JsYW1lX2J1ZmZlcigmZ19idWZmZXJibGFtZSwgZ19maWxlYmxhbWUsIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19idWZmZXJibGFtZSwgMiwgNiwgMSwgMCwgIjYzZDY3MWViIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYnVmZmVyYmxhbWUsIDMsIDcsIDEsIDAsICIwMDAwMDAwMCIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2J1ZmZlcmJsYW1lLCA0LCA4LCAzLCAwLCAiNjNkNjcxZWIiLCAiYi50eHQiKTsKK30KKwordm9pZCB0ZXN0X2JsYW1lX2J1ZmZlcl9fYWRkX2xpbmVzX2F0X2VuZCh2b2lkKQoreworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9ICJcCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVcblwKK0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFXG5cCitFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRVxuXAorXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcblwKK0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXG5cCitCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlxuXAorXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXAorQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NcblwKK0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDXG5cCitDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1xuXAorXG5cCithYmNcblwKK2RlZlxuIjsKKwljbF9naXRfcGFzcyhnaXRfYmxhbWVfYnVmZmVyKCZnX2J1ZmZlcmJsYW1lLCBnX2ZpbGVibGFtZSwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koNSwgZ2l0X2JsYW1lX2dldF9odW5rX2NvdW50KGdfYnVmZmVyYmxhbWUpKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19idWZmZXJibGFtZSwgMCwgIDEsIDQsIDAsICJkYTIzNzM5NCIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2J1ZmZlcmJsYW1lLCAxLCAgNSwgMSwgMSwgImI5OWY3YWMwIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYnVmZmVyYmxhbWUsIDIsICA2LCA1LCAwLCAiNjNkNjcxZWIiLCAiYi50eHQiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19idWZmZXJibGFtZSwgMywgMTEsIDUsIDAsICJhYTA2ZWNjYSIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2J1ZmZlcmJsYW1lLCA0LCAxNiwgMiwgMCwgIjAwMDAwMDAwIiwgImIudHh0Iik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9ibGFtZS9nZXR0ZXJzLmMgYi90ZXN0cy9ibGFtZS9nZXR0ZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlYWVlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JsYW1lL2dldHRlcnMuYwpAQCAtMCwwICsxLDU2IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisKKyNpbmNsdWRlICJibGFtZS5oIgorCitnaXRfYmxhbWUgKmdfYmxhbWU7CisKK3ZvaWQgdGVzdF9ibGFtZV9nZXR0ZXJzX19pbml0aWFsaXplKHZvaWQpCit7CisJc2l6ZV90IGk7CisJZ2l0X2JsYW1lX29wdGlvbnMgb3B0cyA9IEdJVF9CTEFNRV9PUFRJT05TX0lOSVQ7CisKKwlnaXRfYmxhbWVfaHVuayBodW5rc1tdID0geworCQl7IDMsIHt7MH19LCAgMSwgTlVMTCwge3swfX0sICJhIiwgMH0sCisJCXsgMywge3swfX0sICA0LCBOVUxMLCB7ezB9fSwgImIiLCAwfSwKKwkJeyAzLCB7ezB9fSwgIDcsIE5VTEwsIHt7MH19LCAiYyIsIDB9LAorCQl7IDMsIHt7MH19LCAxMCwgTlVMTCwge3swfX0sICJkIiwgMH0sCisJCXsgMywge3swfX0sIDEzLCBOVUxMLCB7ezB9fSwgImUiLCAwfSwKKwl9OworCisJZ19ibGFtZSA9IGdpdF9ibGFtZV9fYWxsb2MoTlVMTCwgb3B0cywgIiIpOworCisJZm9yIChpPTA7IGk8NTsgaSsrKSB7CisJCWdpdF9ibGFtZV9odW5rICpoID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9ibGFtZV9odW5rKSk7CisJCWgtPmZpbmFsX3N0YXJ0X2xpbmVfbnVtYmVyID0gaHVua3NbaV0uZmluYWxfc3RhcnRfbGluZV9udW1iZXI7CisJCWgtPm9yaWdfcGF0aCA9IGdpdF9fc3RyZHVwKGh1bmtzW2ldLm9yaWdfcGF0aCk7CisJCWgtPmxpbmVzX2luX2h1bmsgPSBodW5rc1tpXS5saW5lc19pbl9odW5rOworCisJCWdpdF92ZWN0b3JfaW5zZXJ0KCZnX2JsYW1lLT5odW5rcywgaCk7CisJfQorfQorCit2b2lkIHRlc3RfYmxhbWVfZ2V0dGVyc19fY2xlYW51cCh2b2lkKQoreworCWdpdF9ibGFtZV9mcmVlKGdfYmxhbWUpOworfQorCisKK3ZvaWQgdGVzdF9ibGFtZV9nZXR0ZXJzX19ieWluZGV4KHZvaWQpCit7CisJY29uc3QgZ2l0X2JsYW1lX2h1bmsgKmggPSBnaXRfYmxhbWVfZ2V0X2h1bmtfYnlpbmRleChnX2JsYW1lLCAyKTsKKwljbF9hc3NlcnQoaCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoaC0+b3JpZ19wYXRoLCAiYyIpOworCisJaCA9IGdpdF9ibGFtZV9nZXRfaHVua19ieWluZGV4KGdfYmxhbWUsIDk1KTsKKwljbF9hc3NlcnRfZXF1YWxfcChoLCBOVUxMKTsKK30KKwordm9pZCB0ZXN0X2JsYW1lX2dldHRlcnNfX2J5bGluZSh2b2lkKQoreworCWNvbnN0IGdpdF9ibGFtZV9odW5rICpoID0gZ2l0X2JsYW1lX2dldF9odW5rX2J5bGluZShnX2JsYW1lLCA1KTsKKwljbF9hc3NlcnQoaCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoaC0+b3JpZ19wYXRoLCAiYiIpOworCisJaCA9IGdpdF9ibGFtZV9nZXRfaHVua19ieWxpbmUoZ19ibGFtZSwgOTUpOworCWNsX2Fzc2VydF9lcXVhbF9wKGgsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmxhbWUvaGFyZGVyLmMgYi90ZXN0cy9ibGFtZS9oYXJkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzRkZDRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmxhbWUvaGFyZGVyLmMKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorCisjaW5jbHVkZSAiYmxhbWUuaCIKKworCisvKioKKyAqIFRoZSB0ZXN0IHJlcG8gaGFzIGEgaGlzdG9yeSB0aGF0IGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAqIChBKSBiYzdjNWFjCisgKiB8XAorICogfCAqIChCKSBhYTA2ZWNjCisgKiAqIHwgKEMpIDYzZDY3MWUKKyAqIHwvICAKKyAqICogKEQpIGRhMjM3MzkKKyAqICogKEUpIGI5OWY3YWMKKyAqCisgKi8KKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG8gPSBOVUxMOworCit2b2lkIHRlc3RfYmxhbWVfaGFyZGVyX19pbml0aWFsaXplKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19yZXBvLCBjbF9maXh0dXJlKCJibGFtZXRlc3QuZ2l0IikpKTsKK30KKwordm9pZCB0ZXN0X2JsYW1lX2hhcmRlcl9fY2xlYW51cCh2b2lkKQoreworCWdpdF9yZXBvc2l0b3J5X2ZyZWUoZ19yZXBvKTsKKwlnX3JlcG8gPSBOVUxMOworfQorCisKKwordm9pZCB0ZXN0X2JsYW1lX2hhcmRlcl9fbSh2b2lkKQoreworCS8qIFRPRE8gKi8KKwlnaXRfYmxhbWVfb3B0aW9ucyBvcHRzID0gR0lUX0JMQU1FX09QVElPTlNfSU5JVDsKKworCW9wdHMuZmxhZ3MgPSBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTX1NBTUVfRklMRTsKK30KKworCit2b2lkIHRlc3RfYmxhbWVfaGFyZGVyX19jKHZvaWQpCit7CisJZ2l0X2JsYW1lX29wdGlvbnMgb3B0cyA9IEdJVF9CTEFNRV9PUFRJT05TX0lOSVQ7CisKKwkvKiBBdHRyaWJ1dGUgdGhlIGZpcnN0IGh1bmsgaW4gYi50eHQgdG8gKEUpLCBzaW5jZSBpdCB3YXMgY3V0L3Bhc3RlZCBmcm9tCisJICogYS50eHQgaW4gKEQpLgorCSAqLworCW9wdHMuZmxhZ3MgPSBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTX1NBTUVfQ09NTUlUX01PVkVTOworfQorCit2b2lkIHRlc3RfYmxhbWVfaGFyZGVyX19jYyh2b2lkKQoreworCWdpdF9ibGFtZV9vcHRpb25zIG9wdHMgPSBHSVRfQkxBTUVfT1BUSU9OU19JTklUOworCisJLyogQXR0cmlidXRlIHRoZSBzZWNvbmQgaHVuayBpbiBiLnR4dCB0byAoRSksIHNpbmNlIGl0IHdhcyBjb3B5L3Bhc3RlZCBmcm9tCisJICogYS50eHQgaW4gKEMpLgorCSAqLworCW9wdHMuZmxhZ3MgPSBHSVRfQkxBTUVfVFJBQ0tfQ09QSUVTX1NBTUVfQ09NTUlUX0NPUElFUzsKK30KKwordm9pZCB0ZXN0X2JsYW1lX2hhcmRlcl9fY2NjKHZvaWQpCit7CisJZ2l0X2JsYW1lX29wdGlvbnMgb3B0cyA9IEdJVF9CTEFNRV9PUFRJT05TX0lOSVQ7CisJCisJLyogQXR0cmlidXRlIHRoZSB0aGlyZCBodW5rIGluIGIudHh0IHRvIChFKS4gIFRoaXMgaHVuayB3YXMgZGVsZXRlZCBmcm9tCisJICogYS50eHQgaW4gKEQpLCBidXQgcmVpbnRyb2R1Y2VkIGluIChCKS4KKwkgKi8KKwlvcHRzLmZsYWdzID0gR0lUX0JMQU1FX1RSQUNLX0NPUElFU19BTllfQ09NTUlUX0NPUElFUzsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2JsYW1lL3NpbXBsZS5jIGIvdGVzdHMvYmxhbWUvc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliZDU2YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JsYW1lL3NpbXBsZS5jCkBAIC0wLDAgKzEsMzA1IEBACisjaW5jbHVkZSAiYmxhbWVfaGVscGVycy5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbzsKK3N0YXRpYyBnaXRfYmxhbWUgKmdfYmxhbWU7CisKK3ZvaWQgdGVzdF9ibGFtZV9zaW1wbGVfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnX3JlcG8gPSBOVUxMOworCWdfYmxhbWUgPSBOVUxMOworfQorCit2b2lkIHRlc3RfYmxhbWVfc2ltcGxlX19jbGVhbnVwKHZvaWQpCit7CisJZ2l0X2JsYW1lX2ZyZWUoZ19ibGFtZSk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShnX3JlcG8pOworfQorCisvKgorICogJCBnaXQgYmxhbWUgLXMgYnJhbmNoX2ZpbGUudHh0CisgKiAgICBvcmlnIGxpbmUgbm8gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBsaW5lIG5vCisgKiBjb21taXQgICBWICBhdXRob3IgICAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICBWCisgKiBjNDc4MDBjNyAxIChTY290dCBDaGFjb24gMjAxMC0wNS0yNSAxMTo1ODoxNCAtMDcwMCAxCisgKiBhNjVmZWRmMyAyIChTY290dCBDaGFjb24gMjAxMS0wOC0wOSAxOTozMzo0NiAtMDcwMCAyCisgKi8KK3ZvaWQgdGVzdF9ibGFtZV9zaW1wbGVfX3RyaXZpYWxfdGVzdHJlcG8odm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoInRlc3RyZXBvLy5naXR0ZWQiKSkpOworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9maWxlKCZnX2JsYW1lLCBnX3JlcG8sICJicmFuY2hfZmlsZS50eHQiLCBOVUxMKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgyLCBnaXRfYmxhbWVfZ2V0X2h1bmtfY291bnQoZ19ibGFtZSkpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAwLCAxLCAxLCAwLCAiYzQ3ODAwYzciLCAiYnJhbmNoX2ZpbGUudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDEsIDIsIDEsIDAsICJhNjVmZWRmMyIsICJicmFuY2hfZmlsZS50eHQiKTsKK30KKworLyoKKyAqICQgZ2l0IGJsYW1lIC1uIGIudHh0CisgKiAgICBvcmlnIGxpbmUgbm8gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxpbmUgbm8KKyAqIGNvbW1pdCAgICBWICBhdXRob3IgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgIFYKKyAqIGRhMjM3Mzk0ICAxIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDEKKyAqIGRhMjM3Mzk0ICAyIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDIKKyAqIGRhMjM3Mzk0ICAzIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDMKKyAqIGRhMjM3Mzk0ICA0IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDQKKyAqIF5iOTlmN2FjICAxIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTA6MTIgLTA4MDAgIDUKKyAqIDYzZDY3MWViICA2IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgIDYKKyAqIDYzZDY3MWViICA3IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgIDcKKyAqIDYzZDY3MWViICA4IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgIDgKKyAqIDYzZDY3MWViICA5IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgIDkKKyAqIDYzZDY3MWViIDEwIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgMTAKKyAqIGFhMDZlY2NhICA2IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTQ6NDYgLTA4MDAgMTEKKyAqIGFhMDZlY2NhICA3IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTQ6NDYgLTA4MDAgMTIKKyAqIGFhMDZlY2NhICA4IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTQ6NDYgLTA4MDAgMTMKKyAqIGFhMDZlY2NhICA5IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTQ6NDYgLTA4MDAgMTQKKyAqIGFhMDZlY2NhIDEwIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTQ6NDYgLTA4MDAgMTUKKyAqLwordm9pZCB0ZXN0X2JsYW1lX3NpbXBsZV9fdHJpdmlhbF9ibGFtZXJlcG8odm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoImJsYW1ldGVzdC5naXQiKSkpOworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9maWxlKCZnX2JsYW1lLCBnX3JlcG8sICJiLnR4dCIsIE5VTEwpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDQsIGdpdF9ibGFtZV9nZXRfaHVua19jb3VudChnX2JsYW1lKSk7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDAsICAxLCA0LCAwLCAiZGEyMzczOTQiLCAiYi50eHQiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMSwgIDUsIDEsIDEsICJiOTlmN2FjMCIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyLCAgNiwgNSwgMCwgIjYzZDY3MWViIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDMsIDExLCA1LCAwLCAiYWEwNmVjY2EiLCAiYi50eHQiKTsKK30KKworCisvKgorICogJCBnaXQgYmxhbWUgLW4gMzU5ZmMyZCAtLSBpbmNsdWRlL2dpdDIuaAorICogICAgICAgICAgICAgICAgICAgICBvcmlnIGxpbmUgbm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxpbmUgbm8KKyAqIGNvbW1pdCAgIG9yaWcgcGF0aCAgICAgICBWICBhdXRob3IgICAgICAgICAgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgIFYKKyAqIGQxMjI5OWZlIHNyYy9naXQuaCAgICAgICAxIChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTAzIDIyOjIyOjEwICswMjAwICAxCisgKiAzNTlmYzJkMiBpbmNsdWRlL2dpdDIuaCAgMiAoRWR3YXJkIFRob21zb24gICAgICAyMDEzLTAxLTA4IDE3OjA3OjI1IC0wNjAwICAyCisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICAgNSAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCAgMworICogYmI3NDJlZGUgaW5jbHVkZS9naXQyLmggIDQgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTEtMDktMTkgMDE6NTQ6MzIgKzAzMDAgIDQKKyAqIGJiNzQyZWRlIGluY2x1ZGUvZ2l0Mi5oICA1IChWaWNlbnQgTWFydMOtICAgICAgICAyMDExLTA5LTE5IDAxOjU0OjMyICswMzAwICA1CisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICAyNCAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCAgNgorICogZDEyMjk5ZmUgc3JjL2dpdC5oICAgICAgMjUgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMDMgMjI6MjI6MTAgKzAyMDAgIDcKKyAqIGQxMjI5OWZlIHNyYy9naXQuaCAgICAgIDI2IChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTAzIDIyOjIyOjEwICswMjAwICA4CisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICAyNyAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCAgOQorICogZDEyMjk5ZmUgc3JjL2dpdC5oICAgICAgMjggKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMDMgMjI6MjI6MTAgKzAyMDAgMTAKKyAqIDk2ZmFiMDkzIGluY2x1ZGUvZ2l0Mi5oIDExIChTdmVuIFN0cmlja3JvdGggICAgIDIwMTEtMTAtMDkgMTg6Mzc6NDEgKzAyMDAgMTEKKyAqIDlkMWRjY2EyIHNyYy9naXQyLmggICAgIDMzIChWaWNlbnQgTWFydMOtICAgICAgICAyMDExLTAyLTA3IDEwOjM1OjU4ICswMjAwIDEyCisgKiA0NDkwOGZlNyBzcmMvZ2l0Mi5oICAgICAyOSAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wNiAyMzowMzoxNiArMDIwMCAxMworICogYTE1YzU1MGQgaW5jbHVkZS9naXQyLmggMTQgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTEtMTEtMTYgMTQ6MDk6NDQgKzAxMDAgMTQKKyAqIDQ0OTA4ZmU3IHNyYy9naXQyLmggICAgIDMwIChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTA2IDIzOjAzOjE2ICswMjAwIDE1CisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICAzMiAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCAxNgorICogNDQ5MDhmZTcgc3JjL2dpdDIuaCAgICAgMzMgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMDYgMjM6MDM6MTYgKzAyMDAgMTcKKyAqIGQxMjI5OWZlIHNyYy9naXQuaCAgICAgIDM0IChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTAzIDIyOjIyOjEwICswMjAwIDE4CisgKiA0NDkwOGZlNyBzcmMvZ2l0Mi5oICAgICAzNSAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wNiAyMzowMzoxNiArMDIwMCAxOQorICogNjM4YzJjYTQgc3JjL2dpdDIuaCAgICAgMzYgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMTggMDI6MTA6MjUgKzAyMDAgMjAKKyAqIDQ0OTA4ZmU3IHNyYy9naXQyLmggICAgIDM2IChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTA2IDIzOjAzOjE2ICswMjAwIDIxCisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICAzNyAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCAyMgorICogNDQ5MDhmZTcgc3JjL2dpdDIuaCAgICAgMzggKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMDYgMjM6MDM6MTYgKzAyMDAgMjMKKyAqIDQ0OTA4ZmU3IHNyYy9naXQyLmggICAgIDM5IChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTA2IDIzOjAzOjE2ICswMjAwIDI0CisgKiBiZjc4N2JkOCBpbmNsdWRlL2dpdDIuaCAyNSAoQ2FybG9zIE1hcnTDrW4gTmlldG8gMjAxMi0wNC0wOCAxODo1Njo1MCArMDIwMCAyNQorICogMDk4NGM4NzYgaW5jbHVkZS9naXQyLmggMjYgKFNjb3R0IEouIEdvbGRtYW4gICAgMjAxMi0xMS0yOCAxODoyNzo0MyAtMDgwMCAyNgorICogMmY4YThhYjIgc3JjL2dpdDIuaCAgICAgNDEgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTEtMDEtMjkgMDE6NTY6MjUgKzAyMDAgMjcKKyAqIDI3ZGY0Mjc1IGluY2x1ZGUvZ2l0Mi5oIDQ3IChNaWNoYWVsIFNjaHViZXJ0ICAgIDIwMTEtMDYtMjggMTQ6MTM6MTIgKzAyMDAgMjgKKyAqIGEzNDY5OTJmIGluY2x1ZGUvZ2l0Mi5oIDI4IChCZW4gU3RyYXViICAgICAgICAgIDIwMTItMDUtMTAgMDk6NDc6MTQgLTA3MDAgMjkKKyAqIGQxMjI5OWZlIHNyYy9naXQuaCAgICAgIDQwIChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTAzIDIyOjIyOjEwICswMjAwIDMwCisgKiA0NDkwOGZlNyBzcmMvZ2l0Mi5oICAgICA0MSAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wNiAyMzowMzoxNiArMDIwMCAzMQorICogNDQ5MDhmZTcgc3JjL2dpdDIuaCAgICAgNDIgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMDYgMjM6MDM6MTYgKzAyMDAgMzIKKyAqIDQ0OTA4ZmU3IHNyYy9naXQyLmggICAgIDQzIChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTA2IDIzOjAzOjE2ICswMjAwIDMzCisgKiA0NDkwOGZlNyBzcmMvZ2l0Mi5oICAgICA0NCAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wNiAyMzowMzoxNiArMDIwMCAzNAorICogNDQ5MDhmZTcgc3JjL2dpdDIuaCAgICAgNDUgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTAtMTItMDYgMjM6MDM6MTYgKzAyMDAgMzUKKyAqIDY1YjA5YjFkIGluY2x1ZGUvZ2l0Mi5oIDMzIChSdXNzZWxsIEJlbGZlciAgICAgIDIwMTItMDItMDIgMTg6MDM6NDMgLTA4MDAgMzYKKyAqIGQxMjI5OWZlIHNyYy9naXQuaCAgICAgIDQ2IChWaWNlbnQgTWFydMOtICAgICAgICAyMDEwLTEyLTAzIDIyOjIyOjEwICswMjAwIDM3CisgKiA0NDkwOGZlNyBzcmMvZ2l0Mi5oICAgICA0NyAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wNiAyMzowMzoxNiArMDIwMCAzOAorICogNWQ0Y2QwMDMgaW5jbHVkZS9naXQyLmggNTUgKENhcmxvcyBNYXJ0w61uIE5pZXRvIDIwMTEtMDMtMjggMTc6MDI6NDUgKzAyMDAgMzkKKyAqIDQxZmIxY2EwIGluY2x1ZGUvZ2l0Mi5oIDM5IChQaGlsaXAgS2VsbGV5ICAgICAgIDIwMTItMTAtMjkgMTM6NDE6MTQgLTA0MDAgNDAKKyAqIDJkYzMxMDQwIGluY2x1ZGUvZ2l0Mi5oIDU2IChDYXJsb3MgTWFydMOtbiBOaWV0byAyMDExLTA2LTIwIDE4OjU4OjU3ICswMjAwIDQxCisgKiA3NjRkZjU3ZSBpbmNsdWRlL2dpdDIuaCA0MCAoQmVuIFN0cmF1YiAgICAgICAgICAyMDEyLTA2LTE1IDEzOjE0OjQzIC0wNzAwIDQyCisgKiA1MjgwZjRlNiBpbmNsdWRlL2dpdDIuaCA0MSAoQmVuIFN0cmF1YiAgICAgICAgICAyMDEyLTA3LTMxIDE5OjM5OjA2IC0wNzAwIDQzCisgKiA2MTNkNWViOSBpbmNsdWRlL2dpdDIuaCA0MyAoUGhpbGlwIEtlbGxleSAgICAgICAyMDEyLTExLTI4IDExOjQyOjM3IC0wNTAwIDQ0CisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICA0OCAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCA0NQorICogMTExZWUzZmUgaW5jbHVkZS9naXQyLmggNDEgKFZpY2VudCBNYXJ0w60gICAgICAgIDIwMTItMDctMTEgMTQ6Mzc6MjYgKzAyMDAgNDYKKyAqIGYwMDRjNGE4IGluY2x1ZGUvZ2l0Mi5oIDQ0IChSdXNzZWxsIEJlbGZlciAgICAgIDIwMTItMDgtMjEgMTc6MjY6MzkgLTA3MDAgNDcKKyAqIDExMWVlM2ZlIGluY2x1ZGUvZ2l0Mi5oIDQyIChWaWNlbnQgTWFydMOtICAgICAgICAyMDEyLTA3LTExIDE0OjM3OjI2ICswMjAwIDQ4CisgKiA5YzgyMzU3YiBpbmNsdWRlL2dpdDIuaCA1OCAoQ2FybG9zIE1hcnTDrW4gTmlldG8gMjAxMS0wNi0xNyAxODoxMzoxNCArMDIwMCA0OQorICogZDYyNThkZWIgaW5jbHVkZS9naXQyLmggNjEgKENhcmxvcyBNYXJ0w61uIE5pZXRvIDIwMTEtMDYtMjUgMTU6MTA6MDkgKzAyMDAgNTAKKyAqIGIzMTFlMzEzIGluY2x1ZGUvZ2l0Mi5oIDYzIChKdWxpZW4gTWlvdHRlICAgICAgIDIwMTEtMDctMjcgMTg6MzE6MTMgKzAyMDAgNTEKKyAqIDM0MTIzOTFkIGluY2x1ZGUvZ2l0Mi5oIDYzIChDYXJsb3MgTWFydMOtbiBOaWV0byAyMDExLTA3LTA3IDExOjQ3OjMxICswMjAwIDUyCisgKiBiZmM5Y2E1OSBpbmNsdWRlL2dpdDIuaCA0MyAoUnVzc2VsbCBCZWxmZXIgICAgICAyMDEyLTAzLTI4IDE2OjQ1OjM2IC0wNzAwIDUzCisgKiBiZjQ3N2VkNCBpbmNsdWRlL2dpdDIuaCA0NCAoTWljaGFlbCBTY2h1YmVydCAgICAyMDEyLTAyLTE1IDAwOjMzOjM4ICswMTAwIDU0CisgKiBlZGViY2VmZiBpbmNsdWRlL2dpdDIuaCA0NiAobnVsbHRva2VuICAgICAgICAgICAyMDEyLTA1LTAxIDEzOjU3OjQ1ICswMjAwIDU1CisgKiA3NDNhNGIzYiBpbmNsdWRlL2dpdDIuaCA0OCAobnVsbHRva2VuICAgICAgICAgICAyMDEyLTA2LTE1IDIyOjI0OjU5ICswMjAwIDU2CisgKiAwYTMyZGNhNSBpbmNsdWRlL2dpdDIuaCA1NCAoTWljaGFlbCBTY2h1YmVydCAgICAyMDEyLTA4LTE5IDIyOjI2OjMyICswMjAwIDU3CisgKiA1OTBmYjY4YiBpbmNsdWRlL2dpdDIuaCA1NSAobnVsbHRva2VuICAgICAgICAgICAyMDEyLTEwLTA0IDEzOjQ3OjQ1ICswMjAwIDU4CisgKiBiZjQ3N2VkNCBpbmNsdWRlL2dpdDIuaCA0NSAoTWljaGFlbCBTY2h1YmVydCAgICAyMDEyLTAyLTE1IDAwOjMzOjM4ICswMTAwIDU5CisgKiBkMTIyOTlmZSBzcmMvZ2l0LmggICAgICA0OSAoVmljZW50IE1hcnTDrSAgICAgICAgMjAxMC0xMi0wMyAyMjoyMjoxMCArMDIwMCA2MAorICovCit2b2lkIHRlc3RfYmxhbWVfc2ltcGxlX190cml2aWFsX2xpYmdpdDIodm9pZCkKK3sKKwlnaXRfYmxhbWVfb3B0aW9ucyBvcHRzID0gR0lUX0JMQU1FX09QVElPTlNfSU5JVDsKKwlnaXRfb2JqZWN0ICpvYmo7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoIi4uLy4uIikpKTsKKworCS8qIFRoaXMgdGVzdCBjYW4ndCB3b3JrIG9uIGEgc2hhbGxvdyBjbG9uZSAqLworCWlmIChnaXRfcmVwb3NpdG9yeV9pc19zaGFsbG93KGdfcmVwbykpCisJCXJldHVybjsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJm9iaiwgZ19yZXBvLCAiMzU5ZmMyZCIpKTsKKwlnaXRfb2lkX2NweSgmb3B0cy5uZXdlc3RfY29tbWl0LCBnaXRfb2JqZWN0X2lkKG9iaikpOworCWdpdF9vYmplY3RfZnJlZShvYmopOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2JsYW1lX2ZpbGUoJmdfYmxhbWUsIGdfcmVwbywgImluY2x1ZGUvZ2l0Mi5oIiwgJm9wdHMpKTsKKworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAgMCwgIDEsIDEsIDAsICJkMTIyOTlmZSIsICJzcmMvZ2l0LmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgIDEsICAyLCAxLCAwLCAiMzU5ZmMyZDIiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgIDIsICAzLCAxLCAwLCAiZDEyMjk5ZmUiLCAic3JjL2dpdC5oIik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsICAzLCAgNCwgMiwgMCwgImJiNzQyZWRlIiwgImluY2x1ZGUvZ2l0Mi5oIik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsICA0LCAgNiwgNSwgMCwgImQxMjI5OWZlIiwgInNyYy9naXQuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAgNSwgMTEsIDEsIDAsICI5NmZhYjA5MyIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAgNiwgMTIsIDEsIDAsICI5ZDFkY2NhMiIsICJzcmMvZ2l0Mi5oIik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsICA3LCAxMywgMSwgMCwgIjQ0OTA4ZmU3IiwgInNyYy9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgIDgsIDE0LCAxLCAwLCAiYTE1YzU1MGQiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgIDksIDE1LCAxLCAwLCAiNDQ5MDhmZTciLCAic3JjL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAxMCwgMTYsIDEsIDAsICJkMTIyOTlmZSIsICJzcmMvZ2l0LmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMTEsIDE3LCAxLCAwLCAiNDQ5MDhmZTciLCAic3JjL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAxMiwgMTgsIDEsIDAsICJkMTIyOTlmZSIsICJzcmMvZ2l0LmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMTMsIDE5LCAxLCAwLCAiNDQ5MDhmZTciLCAic3JjL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAxNCwgMjAsIDEsIDAsICI2MzhjMmNhNCIsICJzcmMvZ2l0Mi5oIik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDE1LCAyMSwgMSwgMCwgIjQ0OTA4ZmU3IiwgInNyYy9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMTYsIDIyLCAxLCAwLCAiZDEyMjk5ZmUiLCAic3JjL2dpdC5oIik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDE3LCAyMywgMiwgMCwgIjQ0OTA4ZmU3IiwgInNyYy9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMTgsIDI1LCAxLCAwLCAiYmY3ODdiZDgiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMTksIDI2LCAxLCAwLCAiMDk4NGM4NzYiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMjAsIDI3LCAxLCAwLCAiMmY4YThhYjIiLCAic3JjL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyMSwgMjgsIDEsIDAsICIyN2RmNDI3NSIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyMiwgMjksIDEsIDAsICJhMzQ2OTkyZiIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyMywgMzAsIDEsIDAsICJkMTIyOTlmZSIsICJzcmMvZ2l0LmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMjQsIDMxLCA1LCAwLCAiNDQ5MDhmZTciLCAic3JjL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyNSwgMzYsIDEsIDAsICI2NWIwOWIxZCIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyNiwgMzcsIDEsIDAsICJkMTIyOTlmZSIsICJzcmMvZ2l0LmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMjcsIDM4LCAxLCAwLCAiNDQ5MDhmZTciLCAic3JjL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyOCwgMzksIDEsIDAsICI1ZDRjZDAwMyIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAyOSwgNDAsIDEsIDAsICI0MWZiMWNhMCIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAzMCwgNDEsIDEsIDAsICIyZGMzMTA0MCIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAzMSwgNDIsIDEsIDAsICI3NjRkZjU3ZSIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAzMiwgNDMsIDEsIDAsICI1MjgwZjRlNiIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAzMywgNDQsIDEsIDAsICI2MTNkNWViOSIsICJpbmNsdWRlL2dpdDIuaCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAzNCwgNDUsIDEsIDAsICJkMTIyOTlmZSIsICJzcmMvZ2l0LmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMzUsIDQ2LCAxLCAwLCAiMTExZWUzZmUiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMzYsIDQ3LCAxLCAwLCAiZjAwNGM0YTgiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMzcsIDQ4LCAxLCAwLCAiMTExZWUzZmUiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMzgsIDQ5LCAxLCAwLCAiOWM4MjM1N2IiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMzksIDUwLCAxLCAwLCAiZDYyNThkZWIiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDAsIDUxLCAxLCAwLCAiYjMxMWUzMTMiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDEsIDUyLCAxLCAwLCAiMzQxMjM5MWQiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDIsIDUzLCAxLCAwLCAiYmZjOWNhNTkiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDMsIDU0LCAxLCAwLCAiYmY0NzdlZDQiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDQsIDU1LCAxLCAwLCAiZWRlYmNlZmYiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDUsIDU2LCAxLCAwLCAiNzQzYTRiM2IiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDYsIDU3LCAxLCAwLCAiMGEzMmRjYTUiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDcsIDU4LCAxLCAwLCAiNTkwZmI2OGIiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDgsIDU5LCAxLCAwLCAiYmY0NzdlZDQiLCAiaW5jbHVkZS9naXQyLmgiKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgNDksIDYwLCAxLCAwLCAiZDEyMjk5ZmUiLCAic3JjL2dpdC5oIik7Cit9CisKKworLyoKKyAqICQgZ2l0IGJsYW1lIC1uIGIudHh0IC1MIDgKKyAqICAgIG9yaWcgbGluZSBubyAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbGluZSBubworICogY29tbWl0ICAgIFYgIGF1dGhvciAgICAgdGltZXN0YW1wICAgICAgICAgICAgICAgICAgVgorICogNjNkNjcxZWIgIDggKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxMzowNCAtMDgwMCAgOAorICogNjNkNjcxZWIgIDkgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxMzowNCAtMDgwMCAgOQorICogNjNkNjcxZWIgMTAgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxMzowNCAtMDgwMCAxMAorICogYWEwNmVjY2EgIDYgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxNDo0NiAtMDgwMCAxMQorICogYWEwNmVjY2EgIDcgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxNDo0NiAtMDgwMCAxMgorICogYWEwNmVjY2EgIDggKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxNDo0NiAtMDgwMCAxMworICogYWEwNmVjY2EgIDkgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxNDo0NiAtMDgwMCAxNAorICogYWEwNmVjY2EgMTAgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxNDo0NiAtMDgwMCAxNQorICovCit2b2lkIHRlc3RfYmxhbWVfc2ltcGxlX19jYW5fcmVzdHJpY3RfbGluZXNfbWluKHZvaWQpCit7CisJZ2l0X2JsYW1lX29wdGlvbnMgb3B0cyA9IEdJVF9CTEFNRV9PUFRJT05TX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoImJsYW1ldGVzdC5naXQiKSkpOworCisJb3B0cy5taW5fbGluZSA9IDg7CisJY2xfZ2l0X3Bhc3MoZ2l0X2JsYW1lX2ZpbGUoJmdfYmxhbWUsIGdfcmVwbywgImIudHh0IiwgJm9wdHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgyLCBnaXRfYmxhbWVfZ2V0X2h1bmtfY291bnQoZ19ibGFtZSkpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAwLCAgOCwgMywgMCwgIjYzZDY3MWViIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDEsIDExLCA1LCAwLCAiYWEwNmVjY2EiLCAiYi50eHQiKTsKK30KKworLyoKKyAqICQgZ2l0IGJsYW1lIC1uIGIudHh0IC1MICw2CisgKiAgICBvcmlnIGxpbmUgbm8gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxpbmUgbm8KKyAqIGNvbW1pdCAgICBWICBhdXRob3IgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgIFYKKyAqIGRhMjM3Mzk0ICAxIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDEKKyAqIGRhMjM3Mzk0ICAyIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDIKKyAqIGRhMjM3Mzk0ICAzIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDMKKyAqIGRhMjM3Mzk0ICA0IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgIDQKKyAqIF5iOTlmN2FjICAxIChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTA6MTIgLTA4MDAgIDUKKyAqIDYzZDY3MWViICA2IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgIDYKKyAqLwordm9pZCB0ZXN0X2JsYW1lX3NpbXBsZV9fY2FuX3Jlc3RyaWN0X2xpbmVzX21heCh2b2lkKQoreworCWdpdF9ibGFtZV9vcHRpb25zIG9wdHMgPSBHSVRfQkxBTUVfT1BUSU9OU19JTklUOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19yZXBvLCBjbF9maXh0dXJlKCJibGFtZXRlc3QuZ2l0IikpKTsKKworCW9wdHMubWF4X2xpbmUgPSA2OworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9maWxlKCZnX2JsYW1lLCBnX3JlcG8sICJiLnR4dCIsICZvcHRzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZ2l0X2JsYW1lX2dldF9odW5rX2NvdW50KGdfYmxhbWUpKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMCwgIDEsIDQsIDAsICJkYTIzNzM5NCIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAxLCAgNSwgMSwgMSwgImI5OWY3YWMwIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDIsICA2LCAxLCAwLCAiNjNkNjcxZWIiLCAiYi50eHQiKTsKK30KKworLyoKKyAqICQgZ2l0IGJsYW1lIC1uIGIudHh0IC1MIDIsNworICogICAgb3JpZyBsaW5lIG5vICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBsaW5lIG5vCisgKiBjb21taXQgICBWICBhdXRob3IgICAgIHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgVgorICogZGEyMzczOTQgMiAoQmVuIFN0cmF1YiAyMDEzLTAyLTEyIDE1OjExOjMwIC0wODAwIDIKKyAqIGRhMjM3Mzk0IDMgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxMTozMCAtMDgwMCAzCisgKiBkYTIzNzM5NCA0IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTE6MzAgLTA4MDAgNAorICogXmI5OWY3YWMgMSAoQmVuIFN0cmF1YiAyMDEzLTAyLTEyIDE1OjEwOjEyIC0wODAwIDUKKyAqIDYzZDY3MWViIDYgKEJlbiBTdHJhdWIgMjAxMy0wMi0xMiAxNToxMzowNCAtMDgwMCA2CisgKiA2M2Q2NzFlYiA3IChCZW4gU3RyYXViIDIwMTMtMDItMTIgMTU6MTM6MDQgLTA4MDAgNworICovCit2b2lkIHRlc3RfYmxhbWVfc2ltcGxlX19jYW5fcmVzdHJpY3RfbGluZXNfYm90aCh2b2lkKQoreworCWdpdF9ibGFtZV9vcHRpb25zIG9wdHMgPSBHSVRfQkxBTUVfT1BUSU9OU19JTklUOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19yZXBvLCBjbF9maXh0dXJlKCJibGFtZXRlc3QuZ2l0IikpKTsKKworCW9wdHMubWluX2xpbmUgPSAyOworCW9wdHMubWF4X2xpbmUgPSA3OworCWNsX2dpdF9wYXNzKGdpdF9ibGFtZV9maWxlKCZnX2JsYW1lLCBnX3JlcG8sICJiLnR4dCIsICZvcHRzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZ2l0X2JsYW1lX2dldF9odW5rX2NvdW50KGdfYmxhbWUpKTsKKwljaGVja19ibGFtZV9odW5rX2luZGV4KGdfcmVwbywgZ19ibGFtZSwgMCwgIDIsIDMsIDAsICJkYTIzNzM5NCIsICJiLnR4dCIpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAxLCAgNSwgMSwgMSwgImI5OWY3YWMwIiwgImIudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDIsICA2LCAyLCAwLCAiNjNkNjcxZWIiLCAiYi50eHQiKTsKK30KKworLyoKKyAqICQgZ2l0IGJsYW1lIC1uIGJyYW5jaF9maWxlLnR4dCBiZTM1NjNhLi5IRUFECisgKiAgICBvcmlnIGxpbmUgbm8gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxpbmUgbm8KKyAqIGNvbW1pdCAgIFYgIGF1dGhvciAgICAgICB0aW1lc3RhbXAgICAgICAgICAgICAgICAgIFYKKyAqIF5iZTM1NjNhIDEgKFNjb3R0IENoYWNvbiAyMDEwLTA1LTI1IDExOjU4OjI3IC0wNzAwIDEpIGhpCisgKiBhNjVmZWRmMyAyIChTY290dCBDaGFjb24gMjAxMS0wOC0wOSAxOTozMzo0NiAtMDcwMCAyKSBieWUhCisgKi8KK3ZvaWQgdGVzdF9ibGFtZV9zaW1wbGVfX2Nhbl9yZXN0cmljdF90b19uZXdpc2hfY29tbWl0cyh2b2lkKQoreworCWdpdF9ibGFtZV9vcHRpb25zIG9wdHMgPSBHSVRfQkxBTUVfT1BUSU9OU19JTklUOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19yZXBvLCBjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQiKSkpOworCisJeworCQlnaXRfb2JqZWN0ICpvYmo7CisJCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJm9iaiwgZ19yZXBvLCAiYmUzNTYzYSIpKTsKKwkJZ2l0X29pZF9jcHkoJm9wdHMub2xkZXN0X2NvbW1pdCwgZ2l0X29iamVjdF9pZChvYmopKTsKKwkJZ2l0X29iamVjdF9mcmVlKG9iaik7CisJfQorCisJY2xfZ2l0X3Bhc3MoZ2l0X2JsYW1lX2ZpbGUoJmdfYmxhbWUsIGdfcmVwbywgImJyYW5jaF9maWxlLnR4dCIsICZvcHRzKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgyLCBnaXRfYmxhbWVfZ2V0X2h1bmtfY291bnQoZ19ibGFtZSkpOworCWNoZWNrX2JsYW1lX2h1bmtfaW5kZXgoZ19yZXBvLCBnX2JsYW1lLCAwLCAgMSwgMSwgMSwgImJlMzU2M2EiLCAiYnJhbmNoX2ZpbGUudHh0Iik7CisJY2hlY2tfYmxhbWVfaHVua19pbmRleChnX3JlcG8sIGdfYmxhbWUsIDEsICAyLCAxLCAwLCAiYTY1ZmVkZiIsICJicmFuY2hfZmlsZS50eHQiKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvYnVmL2Jhc2ljLmMgYi90ZXN0cy9idWYvYmFzaWMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9idWYvYmFzaWMuYwpyZW5hbWUgdG8gdGVzdHMvYnVmL2Jhc2ljLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvYnVmL3NwbGljZS5jIGIvdGVzdHMvYnVmL3NwbGljZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2J1Zi9zcGxpY2UuYwpyZW5hbWUgdG8gdGVzdHMvYnVmL3NwbGljZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NoZWNrb3V0L2JpbmFyeXVuaWNvZGUuYyBiL3Rlc3RzL2NoZWNrb3V0L2JpbmFyeXVuaWNvZGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jaGVja291dC9iaW5hcnl1bmljb2RlLmMKcmVuYW1lIHRvIHRlc3RzL2NoZWNrb3V0L2JpbmFyeXVuaWNvZGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jaGVja291dC9jaGVja291dF9oZWxwZXJzLmMgYi90ZXN0cy9jaGVja291dC9jaGVja291dF9oZWxwZXJzLmMKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jaGVja291dC9jaGVja291dF9oZWxwZXJzLmMKcmVuYW1lIHRvIHRlc3RzL2NoZWNrb3V0L2NoZWNrb3V0X2hlbHBlcnMuYwppbmRleCA4ZGEwMjRkLi4wNmI0ZTA2IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2NoZWNrb3V0L2NoZWNrb3V0X2hlbHBlcnMuYworKysgYi90ZXN0cy9jaGVja291dC9jaGVja291dF9oZWxwZXJzLmMKQEAgLTMsMjIgKzMsNiBAQAogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJmaWxlb3BzLmgiCiAKLS8qIHRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIGNvZGUgZnJvbSBnaXRfX3VuZXNjYXBlIG1vZGlmaWVkIHNsaWdodGx5ICovCi12b2lkIHN0cmlwX2NyX2Zyb21fYnVmKGdpdF9idWYgKmJ1ZikKLXsKLQljaGFyICpzY2FuLCAqcG9zID0gYnVmLT5wdHIsICplbmQgPSBwb3MgKyBidWYtPnNpemU7Ci0KLQlmb3IgKHNjYW4gPSBwb3M7IHNjYW4gPCBlbmQ7IHBvcysrLCBzY2FuKyspIHsKLQkJaWYgKCpzY2FuID09ICdccicpCi0JCQlzY2FuKys7IC8qIHNraXAgJ1xyJyAqLwotCQlpZiAocG9zICE9IHNjYW4pCi0JCQkqcG9zID0gKnNjYW47Ci0JfQotCi0JKnBvcyA9ICdcMCc7Ci0JYnVmLT5zaXplID0gKHBvcyAtIGJ1Zi0+cHRyKTsKLX0KLQogdm9pZCBhc3NlcnRfb25fYnJhbmNoKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpicmFuY2gpCiB7CiAJZ2l0X3JlZmVyZW5jZSAqaGVhZDsKQEAgLTUwLDQ4ICszNCw2IEBACiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQogCi1zdGF0aWMgdm9pZCBjaGVja19maWxlX2NvbnRlbnRzX2ludGVybmFsKAotCWNvbnN0IGNoYXIgKnBhdGgsCi0JY29uc3QgY2hhciAqZXhwZWN0ZWRfY29udGVudCwKLQlib29sIHN0cmlwX2NyLAotCWNvbnN0IGNoYXIgKmZpbGUsCi0JaW50IGxpbmUsCi0JY29uc3QgY2hhciAqbXNnKQotewotCWludCBmZDsKLQljaGFyIGRhdGFbMTAyNF0gPSB7MH07Ci0JZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7Ci0Jc2l6ZV90IGV4cGVjdGVkX2xlbiA9IGV4cGVjdGVkX2NvbnRlbnQgPyBzdHJsZW4oZXhwZWN0ZWRfY29udGVudCkgOiAwOwotCi0JZmQgPSBwX29wZW4ocGF0aCwgT19SRE9OTFkpOwotCWNsX2Fzc2VydChmZCA+PSAwKTsKLQotCWJ1Zi5wdHIgPSBkYXRhOwotCWJ1Zi5zaXplID0gcF9yZWFkKGZkLCBidWYucHRyLCBzaXplb2YoZGF0YSkpOwotCi0JY2xfZ2l0X3Bhc3MocF9jbG9zZShmZCkpOwotCi0JaWYgKHN0cmlwX2NyKQotCQlzdHJpcF9jcl9mcm9tX2J1ZigmYnVmKTsKLQotCWNsYXJfX2Fzc2VydF9lcXVhbF9pKChpbnQpZXhwZWN0ZWRfbGVuLCAoaW50KWJ1Zi5zaXplLCBmaWxlLCBsaW5lLCAic3RybGVuKGV4cGVjdGVkX2NvbnRlbnQpICE9IHN0cmxlbihhY3R1YWxfY29udGVudCkiLCAxKTsKLQljbGFyX19hc3NlcnRfZXF1YWxfcyhleHBlY3RlZF9jb250ZW50LCBidWYucHRyLCBmaWxlLCBsaW5lLCBtc2csIDEpOwotfQotCi12b2lkIGNoZWNrX2ZpbGVfY29udGVudHNfYXRfbGluZSgKLQljb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpleHBlY3RlZCwKLQljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbXNnKQotewotCWNoZWNrX2ZpbGVfY29udGVudHNfaW50ZXJuYWwocGF0aCwgZXhwZWN0ZWQsIGZhbHNlLCBmaWxlLCBsaW5lLCBtc2cpOwotfQotCi12b2lkIGNoZWNrX2ZpbGVfY29udGVudHNfbm9jcl9hdF9saW5lKAotCWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmV4cGVjdGVkLAotCWNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptc2cpCi17Ci0JY2hlY2tfZmlsZV9jb250ZW50c19pbnRlcm5hbChwYXRoLCBleHBlY3RlZCwgdHJ1ZSwgZmlsZSwgbGluZSwgbXNnKTsKLX0KLQogaW50IGNoZWNrb3V0X2NvdW50X2NhbGxiYWNrKAogCWdpdF9jaGVja291dF9ub3RpZnlfdCB3aHksCiAJY29uc3QgY2hhciAqcGF0aCwKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrb3V0L2NoZWNrb3V0X2hlbHBlcnMuaCBiL3Rlc3RzL2NoZWNrb3V0L2NoZWNrb3V0X2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDVlZTkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hlY2tvdXQvY2hlY2tvdXRfaGVscGVycy5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJnaXQyL29iamVjdC5oIgorI2luY2x1ZGUgImdpdDIvcmVwb3NpdG9yeS5oIgorCitleHRlcm4gdm9pZCBhc3NlcnRfb25fYnJhbmNoKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpicmFuY2gpOworZXh0ZXJuIHZvaWQgcmVzZXRfaW5kZXhfdG9fdHJlZWlzaChnaXRfb2JqZWN0ICp0cmVlaXNoKTsKKworI2RlZmluZSBjaGVja19maWxlX2NvbnRlbnRzKFBBVEgsRVhQKSBcCisJY2xfYXNzZXJ0X2VxdWFsX2ZpbGUoRVhQLDAsUEFUSCkKKworI2RlZmluZSBjaGVja19maWxlX2NvbnRlbnRzX25vY3IoUEFUSCxFWFApIFwKKwljbF9hc3NlcnRfZXF1YWxfZmlsZV9pZ25vcmVfY3IoRVhQLDAsUEFUSCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBuX2NvbmZsaWN0czsKKwlpbnQgbl9kaXJ0eTsKKwlpbnQgbl91cGRhdGVzOworCWludCBuX3VudHJhY2tlZDsKKwlpbnQgbl9pZ25vcmVkOworCWludCBkZWJ1ZzsKK30gY2hlY2tvdXRfY291bnRzOworCitleHRlcm4gaW50IGNoZWNrb3V0X2NvdW50X2NhbGxiYWNrKAorCWdpdF9jaGVja291dF9ub3RpZnlfdCB3aHksCisJY29uc3QgY2hhciAqcGF0aCwKKwljb25zdCBnaXRfZGlmZl9maWxlICpiYXNlbGluZSwKKwljb25zdCBnaXRfZGlmZl9maWxlICp0YXJnZXQsCisJY29uc3QgZ2l0X2RpZmZfZmlsZSAqd29ya2RpciwKKwl2b2lkICpwYXlsb2FkKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrb3V0L2NvbmZsaWN0LmMgYi90ZXN0cy9jaGVja291dC9jb25mbGljdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OTY1YTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVja291dC9jb25mbGljdC5jCkBAIC0wLDAgKzEsMTEyNyBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImdpdDIvcmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImdpdDIvc3lzL2luZGV4LmgiCisjaW5jbHVkZSAiZmlsZW9wcy5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbzsKK3N0YXRpYyBnaXRfaW5kZXggKmdfaW5kZXg7CisKKyNkZWZpbmUgVEVTVF9SRVBPX1BBVEggIm1lcmdlLXJlc29sdmUiCisKKyNkZWZpbmUgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lEICAgImQ0MjdlMGIyZTEzODUwMWEzZDE1Y2MzNzYwNzdhMzYzMWUxNWJkNDYiCisjZGVmaW5lIENPTkZMSUNUSU5HX09VUlNfT0lEICAgICAgICI0ZTg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwIgorI2RlZmluZSBDT05GTElDVElOR19USEVJUlNfT0lEICAgICAiMmJkMGEzNDNhZWVmN2EyY2YwZDE1ODQ3ODk2NmE2ZTU4N2ZmMzg2MyIKKworI2RlZmluZSBBVVRPTUVSR0VBQkxFX0FOQ0VTVE9SX09JRCAiNjIxMmMzMWRhYjVlNDgyMjQ3ZDc5NzdlNGYwZGQzNjAxZGVjZjEzYiIKKyNkZWZpbmUgQVVUT01FUkdFQUJMRV9PVVJTX09JRCAgICAgImVlM2ZhMWI4YzAwYWZmN2ZlMDIwNjVmZGI1MDg2NGJiMGQ5MzJjY2YiCisjZGVmaW5lIEFVVE9NRVJHRUFCTEVfVEhFSVJTX09JRCAgICIwNTg1NDFmYzM3MTE0YmZjMWRkZGY2YmQ2YmZmYzdmYWU1YzJlNmZlIgorCisjZGVmaW5lIExJTktfQU5DRVNUT1JfT0lEICAgICAgICAgICIxYTAxMGIxYzBmMDgxYjJlODkwMWQ1NTMwN2ExNWMyOWZmMzBhZjBlIgorI2RlZmluZSBMSU5LX09VUlNfT0lEICAgICAgICAgICAgICAiNzJlYTQ5OWUxMDhkZjVmZjBhNGE5MTNlNzY1NWJiZWViMWZiNjlmMiIKKyNkZWZpbmUgTElOS19USEVJUlNfT0lEICAgICAgICAgICAgIjhiZmIwMTJhNmQ4MDllNDk5YmQ4ZDNlMTk0YTM5MjliYzg5OTViOTMiCisKKyNkZWZpbmUgTElOS19BTkNFU1RPUl9UQVJHRVQgICAgICAgImZpbGUiCisjZGVmaW5lIExJTktfT1VSU19UQVJHRVQgICAgICAgICAgICJvdGhlci1maWxlIgorI2RlZmluZSBMSU5LX1RIRUlSU19UQVJHRVQgICAgICAgICAic3RpbGwtYW5vdGhlci1maWxlIgorCisjZGVmaW5lIENPTkZMSUNUSU5HX09VUlNfRklMRSBcCisJInRoaXMgZmlsZSBpcyBjaGFuZ2VkIGluIG1hc3RlciBhbmQgYnJhbmNoXG4iCisjZGVmaW5lIENPTkZMSUNUSU5HX1RIRUlSU19GSUxFIFwKKwkidGhpcyBmaWxlIGlzIGNoYW5nZWQgaW4gYnJhbmNoIGFuZCBtYXN0ZXJcbiIKKyNkZWZpbmUgQ09ORkxJQ1RJTkdfRElGRjNfRklMRSBcCisJIjw8PDw8PDwgb3Vyc1xuIiBcCisJInRoaXMgZmlsZSBpcyBjaGFuZ2VkIGluIG1hc3RlciBhbmQgYnJhbmNoXG4iIFwKKwkiPT09PT09PVxuIiBcCisJInRoaXMgZmlsZSBpcyBjaGFuZ2VkIGluIGJyYW5jaCBhbmQgbWFzdGVyXG4iIFwKKwkiPj4+Pj4+PiB0aGVpcnNcbiIKKworI2RlZmluZSBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFIFwKKwkidGhpcyBmaWxlIGlzIGNoYW5nZWQgaW4gbWFzdGVyXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcbiIgXAorCSJ0aGlzIGZpbGUgaXMgYXV0b21lcmdlYWJsZVxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcbiIgXAorCSJ0aGlzIGZpbGUgaXMgYXV0b21lcmdlYWJsZVxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcbiIgXAorCSJ0aGlzIGZpbGUgaXMgY2hhbmdlZCBpbiBicmFuY2hcbiIKKworc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IHsKKwl1aW50MTZfdCBtb2RlOworCWNoYXIgb2lkX3N0cls0MV07CisJaW50IHN0YWdlOworCWNoYXIgcGF0aFsxMjhdOworfTsKKworc3RydWN0IGNoZWNrb3V0X25hbWVfZW50cnkgeworCWNoYXIgYW5jZXN0b3JbNjRdOworCWNoYXIgb3Vyc1s2NF07CisJY2hhciB0aGVpcnNbNjRdOworfTsKKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NvbmZsaWN0X19pbml0aWFsaXplKHZvaWQpCit7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdChURVNUX1JFUE9fUEFUSCk7CisJZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmdfaW5kZXgsIGdfcmVwbyk7CisKKwljbF9naXRfcmV3cml0ZWZpbGUoCisJCVRFU1RfUkVQT19QQVRIICIvLmdpdGF0dHJpYnV0ZXMiLAorCQkiKiB0ZXh0IGVvbD1sZlxuIik7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fY2xlYW51cCh2b2lkKQoreworCWdpdF9pbmRleF9mcmVlKGdfaW5kZXgpOworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2luZGV4KHN0cnVjdCBjaGVja291dF9pbmRleF9lbnRyeSAqZW50cmllcywgc2l6ZV90IGVudHJpZXNfbGVuKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzX2xlbjsgaSsrKSB7CisJCWdpdF9idWZfam9pbnBhdGgoJnBhdGgsIFRFU1RfUkVQT19QQVRILCBlbnRyaWVzW2ldLnBhdGgpOworCisJCWlmIChlbnRyaWVzW2ldLnN0YWdlID09IDMgJiYgKGkgPT0gMCB8fCBzdHJjbXAoZW50cmllc1tpLTFdLnBhdGgsIGVudHJpZXNbaV0ucGF0aCkgIT0gMCB8fCBlbnRyaWVzW2ktMV0uc3RhZ2UgIT0gMikpCisJCQlwX3VubGluayhnaXRfYnVmX2NzdHIoJnBhdGgpKTsKKworCQlnaXRfaW5kZXhfcmVtb3ZlX2J5cGF0aChnX2luZGV4LCBlbnRyaWVzW2ldLnBhdGgpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzX2xlbjsgaSsrKSB7CisJCWdpdF9pbmRleF9lbnRyeSBlbnRyeTsKKworCQltZW1zZXQoJmVudHJ5LCAweDAsIHNpemVvZihnaXRfaW5kZXhfZW50cnkpKTsKKworCQllbnRyeS5tb2RlID0gZW50cmllc1tpXS5tb2RlOworCQllbnRyeS5mbGFncyA9IGVudHJpZXNbaV0uc3RhZ2UgPDwgR0lUX0lEWEVOVFJZX1NUQUdFU0hJRlQ7CisJCWdpdF9vaWRfZnJvbXN0cigmZW50cnkub2lkLCBlbnRyaWVzW2ldLm9pZF9zdHIpOworCQllbnRyeS5wYXRoID0gZW50cmllc1tpXS5wYXRoOworCisJCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGQoZ19pbmRleCwgJmVudHJ5KSk7CisJfQorCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2luZGV4X25hbWVzKHN0cnVjdCBjaGVja291dF9uYW1lX2VudHJ5ICplbnRyaWVzLCBzaXplX3QgZW50cmllc19sZW4pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllc19sZW47IGkrKykgeworCQljbF9naXRfcGFzcyhnaXRfaW5kZXhfbmFtZV9hZGQoZ19pbmRleCwKKwkJCXN0cmxlbihlbnRyaWVzW2ldLmFuY2VzdG9yKSA9PSAwID8gTlVMTCA6IGVudHJpZXNbaV0uYW5jZXN0b3IsCisJCQlzdHJsZW4oZW50cmllc1tpXS5vdXJzKSA9PSAwID8gTlVMTCA6IGVudHJpZXNbaV0ub3VycywKKwkJCXN0cmxlbihlbnRyaWVzW2ldLnRoZWlycykgPT0gMCA/IE5VTEwgOiBlbnRyaWVzW2ldLnRoZWlycykpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2NvbmZsaWN0aW5nX2luZGV4KHZvaWQpCit7CisJc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IGNoZWNrb3V0X2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJjb25mbGljdGluZy50eHQiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJjb25mbGljdGluZy50eHQiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImNvbmZsaWN0aW5nLnR4dCIgfSwKKwl9OworCisJY3JlYXRlX2luZGV4KGNoZWNrb3V0X2luZGV4X2VudHJpZXMsIDMpOworCWdpdF9pbmRleF93cml0ZShnX2luZGV4KTsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlX3dvcmtkaXJfY29udGVudHMoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqY29udGVudHMpCit7CisJZ2l0X2J1ZiBmdWxscGF0aCA9IEdJVF9CVUZfSU5JVCwgZGF0YV9idWYgPSBHSVRfQlVGX0lOSVQ7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbHBhdGgsIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoZ19yZXBvKSwgcGF0aCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZkYXRhX2J1ZiwgZ2l0X2J1Zl9jc3RyKCZmdWxscGF0aCkpKTsKKwljbF9hc3NlcnQoc3RyY21wKGdpdF9idWZfY3N0cigmZGF0YV9idWYpLCBjb250ZW50cykgPT0gMCk7CisKKwlnaXRfYnVmX2ZyZWUoJmZ1bGxwYXRoKTsKKwlnaXRfYnVmX2ZyZWUoJmRhdGFfYnVmKTsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlX3dvcmtkaXJfb2lkKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm9pZF9zdHIpCit7CisJZ2l0X29pZCBleHBlY3RlZCwgYWN0dWFsOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZCwgb2lkX3N0cikpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hhc2hmaWxlKCZhY3R1YWwsIGdfcmVwbywgcGF0aCwgR0lUX09CSl9CTE9CLCBOVUxMKSk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfY21wKCZleHBlY3RlZCwgJmFjdHVhbCkgPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZV93b3JrZGlyX21vZGUoY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUpCit7CisjaWZuZGVmIEdJVF9XSU4zMgorCWdpdF9idWYgZnVsbHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbHBhdGgsIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoZ19yZXBvKSwgcGF0aCkpOworCisJY2xfZ2l0X3Bhc3MocF9zdGF0KGdpdF9idWZfY3N0cigmZnVsbHBhdGgpLCAmc3QpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShtb2RlLCBzdC5zdF9tb2RlKTsKKworCWdpdF9idWZfZnJlZSgmZnVsbHBhdGgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZV93b3JrZGlyKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCBjb25zdCBjaGFyICpvaWRfc3RyKQoreworCWVuc3VyZV93b3JrZGlyX21vZGUocGF0aCwgbW9kZSk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKHBhdGgsIG9pZF9zdHIpOworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVfd29ya2Rpcl9saW5rKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKyNpZmRlZiBHSVRfV0lOMzIKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cyhwYXRoLCB0YXJnZXQpOworI2Vsc2UKKwlnaXRfYnVmIGZ1bGxwYXRoID0gR0lUX0JVRl9JTklUOworCWNoYXIgYWN0dWFsWzEwMjRdOworCXN0cnVjdCBzdGF0IHN0OworCWludCBsZW47CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbHBhdGgsIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoZ19yZXBvKSwgcGF0aCkpOworCisJY2xfZ2l0X3Bhc3MocF9sc3RhdChnaXRfYnVmX2NzdHIoJmZ1bGxwYXRoKSwgJnN0KSk7CisJY2xfYXNzZXJ0KFNfSVNMTksoc3Quc3RfbW9kZSkpOworCisJY2xfYXNzZXJ0KChsZW4gPSBwX3JlYWRsaW5rKGdpdF9idWZfY3N0cigmZnVsbHBhdGgpLCBhY3R1YWwsIDEwMjQpKSA+IDApOworCWFjdHVhbFtsZW5dID0gJ1wwJzsKKwljbF9hc3NlcnQoc3RyY21wKGFjdHVhbCwgdGFyZ2V0KSA9PSAwKTsKKworCWdpdF9idWZfZnJlZSgmZnVsbHBhdGgpOworI2VuZGlmCit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9faWdub3JlZCh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSB8PSBHSVRfQ0hFQ0tPVVRfU0tJUF9VTk1FUkdFRDsKKworCWNyZWF0ZV9jb25mbGljdGluZ19pbmRleCgpOworCWNsX2dpdF9wYXNzKHBfdW5saW5rKFRFU1RfUkVQT19QQVRIICIvY29uZmxpY3RpbmcudHh0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKFRFU1RfUkVQT19QQVRIICIvY29uZmxpY3RpbmcudHh0IikpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY29uZmxpY3RfX291cnModm9pZCkKK3sKKwlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKKworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgfD0gR0lUX0NIRUNLT1VUX1VTRV9PVVJTOworCisJY3JlYXRlX2NvbmZsaWN0aW5nX2luZGV4KCk7CisKKwljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfaW5kZXgoZ19yZXBvLCBnX2luZGV4LCAmb3B0cykpOworCisJZW5zdXJlX3dvcmtkaXJfY29udGVudHMoImNvbmZsaWN0aW5nLnR4dCIsIENPTkZMSUNUSU5HX09VUlNfRklMRSk7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fdGhlaXJzKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5IHw9IEdJVF9DSEVDS09VVF9VU0VfVEhFSVJTOworCisJY3JlYXRlX2NvbmZsaWN0aW5nX2luZGV4KCk7CisKKwljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfaW5kZXgoZ19yZXBvLCBnX2luZGV4LCAmb3B0cykpOworCisJZW5zdXJlX3dvcmtkaXJfY29udGVudHMoImNvbmZsaWN0aW5nLnR4dCIsIENPTkZMSUNUSU5HX1RIRUlSU19GSUxFKTsKKworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY29uZmxpY3RfX2RpZmYzKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwljcmVhdGVfY29uZmxpY3RpbmdfaW5kZXgoKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9pbmRleChnX3JlcG8sIGdfaW5kZXgsICZvcHRzKSk7CisKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cygiY29uZmxpY3RpbmcudHh0IiwgQ09ORkxJQ1RJTkdfRElGRjNfRklMRSk7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fYXV0b21lcmdlKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgY2hlY2tvdXRfaW5kZXhfZW50cnkgY2hlY2tvdXRfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMDA2NDQsIEFVVE9NRVJHRUFCTEVfQU5DRVNUT1JfT0lELCAxLCAiYXV0b21lcmdlYWJsZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgQVVUT01FUkdFQUJMRV9PVVJTX09JRCwgMiwgImF1dG9tZXJnZWFibGUudHh0IiB9LAorCQl7IDAxMDA2NDQsIEFVVE9NRVJHRUFCTEVfVEhFSVJTX09JRCwgMywgImF1dG9tZXJnZWFibGUudHh0IiB9LAorCX07CisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgMyk7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCWVuc3VyZV93b3JrZGlyX2NvbnRlbnRzKCJhdXRvbWVyZ2VhYmxlLnR4dCIsIEFVVE9NRVJHRUFCTEVfTUVSR0VEX0ZJTEUpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY29uZmxpY3RfX2RpcmVjdG9yeV9maWxlKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgY2hlY2tvdXRfaW5kZXhfZW50cnkgY2hlY2tvdXRfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImRmLTEiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJkZi0xIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDAsICJkZi0xL2ZpbGUiIH0sCisKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJkZi0yIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJkZi0yIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAwLCAiZGYtMi9maWxlIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImRmLTMiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAiZGYtMy9maWxlIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAyLCAiZGYtMy9maWxlIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJkZi00IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImRmLTQvZmlsZSIgfSwKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19USEVJUlNfT0lELCAzLCAiZGYtNC9maWxlIiB9LAorCX07CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5IHw9IEdJVF9DSEVDS09VVF9TQUZFOworCisJY3JlYXRlX2luZGV4KGNoZWNrb3V0X2luZGV4X2VudHJpZXMsIDEyKTsKKwlnaXRfaW5kZXhfd3JpdGUoZ19pbmRleCk7CisKKwljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfaW5kZXgoZ19yZXBvLCBnX2luZGV4LCAmb3B0cykpOworCisJZW5zdXJlX3dvcmtkaXJfb2lkKCJkZi0xL2ZpbGUiLCBDT05GTElDVElOR19USEVJUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImRmLTF+b3VycyIsIENPTkZMSUNUSU5HX09VUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImRmLTIvZmlsZSIsIENPTkZMSUNUSU5HX09VUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImRmLTJ+dGhlaXJzIiwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKCJkZi0zL2ZpbGUiLCBDT05GTElDVElOR19PVVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKCJkZi0zfnRoZWlycyIsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQpOworCWVuc3VyZV93b3JrZGlyX29pZCgiZGYtNH5vdXJzIiwgQ09ORkxJQ1RJTkdfT1VSU19PSUQpOworCWVuc3VyZV93b3JrZGlyX29pZCgiZGYtNC9maWxlIiwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCk7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fZGlyZWN0b3J5X2ZpbGVfd2l0aF9jdXN0b21fbGFiZWxzKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgY2hlY2tvdXRfaW5kZXhfZW50cnkgY2hlY2tvdXRfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImRmLTEiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJkZi0xIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDAsICJkZi0xL2ZpbGUiIH0sCisKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJkZi0yIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJkZi0yIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAwLCAiZGYtMi9maWxlIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImRmLTMiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAiZGYtMy9maWxlIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAyLCAiZGYtMy9maWxlIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJkZi00IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImRmLTQvZmlsZSIgfSwKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19USEVJUlNfT0lELCAzLCAiZGYtNC9maWxlIiB9LAorCX07CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5IHw9IEdJVF9DSEVDS09VVF9TQUZFOworCW9wdHMub3VyX2xhYmVsID0gIkhFQUQiOworCW9wdHMudGhlaXJfbGFiZWwgPSAiYnJhbmNoIjsKKworCWNyZWF0ZV9pbmRleChjaGVja291dF9pbmRleF9lbnRyaWVzLCAxMik7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCWVuc3VyZV93b3JrZGlyX29pZCgiZGYtMS9maWxlIiwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKCJkZi0xfkhFQUQiLCBDT05GTElDVElOR19PVVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKCJkZi0yL2ZpbGUiLCBDT05GTElDVElOR19PVVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKCJkZi0yfmJyYW5jaCIsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQpOworCWVuc3VyZV93b3JrZGlyX29pZCgiZGYtMy9maWxlIiwgQ09ORkxJQ1RJTkdfT1VSU19PSUQpOworCWVuc3VyZV93b3JrZGlyX29pZCgiZGYtM35icmFuY2giLCBDT05GTElDVElOR19USEVJUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImRmLTR+SEVBRCIsIENPTkZMSUNUSU5HX09VUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImRmLTQvZmlsZSIsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY29uZmxpY3RfX2xpbmtfZmlsZSh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IGNoZWNrb3V0X2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJsaW5rLTEiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJsaW5rLTEiIH0sCisJCXsgMDEyMDAwMCwgTElOS19USEVJUlNfT0lELCAzLCAibGluay0xIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAibGluay0yIiB9LAorCQl7IDAxMjAwMDAsIExJTktfT1VSU19PSUQsIDIsICJsaW5rLTIiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImxpbmstMiIgfSwKKworCQl7IDAxMjAwMDAsIExJTktfQU5DRVNUT1JfT0lELCAxLCAibGluay0zIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAyLCAibGluay0zIiB9LAorCQl7IDAxMjAwMDAsIExJTktfVEhFSVJTX09JRCwgMywgImxpbmstMyIgfSwKKworCQl7IDAxMjAwMDAsIExJTktfQU5DRVNUT1JfT0lELCAxLCAibGluay00IiB9LAorCQl7IDAxMjAwMDAsIExJTktfT1VSU19PSUQsIDIsICJsaW5rLTQiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImxpbmstNCIgfSwKKwl9OworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSB8PSBHSVRfQ0hFQ0tPVVRfU0FGRTsKKworCWNyZWF0ZV9pbmRleChjaGVja291dF9pbmRleF9lbnRyaWVzLCAxMik7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCS8qIFR5cGVjaGFuZ2UgY29uZmxpY3RzIGFsd2F5cyBrZWVwIHRoZSBmaWxlIGluIHRoZSB3b3JrZGlyICovCisJZW5zdXJlX3dvcmtkaXJfb2lkKCJsaW5rLTEiLCBDT05GTElDVElOR19PVVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfb2lkKCJsaW5rLTIiLCBDT05GTElDVElOR19USEVJUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImxpbmstMyIsIENPTkZMSUNUSU5HX09VUlNfT0lEKTsKKwllbnN1cmVfd29ya2Rpcl9vaWQoImxpbmstNCIsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY29uZmxpY3RfX2xpbmtzKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgY2hlY2tvdXRfaW5kZXhfZW50cnkgY2hlY2tvdXRfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMjAwMDAsIExJTktfQU5DRVNUT1JfT0lELCAxLCAibGluay0xIiB9LAorCQl7IDAxMjAwMDAsIExJTktfT1VSU19PSUQsIDIsICJsaW5rLTEiIH0sCisJCXsgMDEyMDAwMCwgTElOS19USEVJUlNfT0lELCAzLCAibGluay0xIiB9LAorCisJCXsgMDEyMDAwMCwgTElOS19PVVJTX09JRCwgMiwgImxpbmstMiIgfSwKKwkJeyAwMTIwMDAwLCBMSU5LX1RIRUlSU19PSUQsIDMsICJsaW5rLTIiIH0sCisJfTsKKworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgfD0gR0lUX0NIRUNLT1VUX1NBRkU7CisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgNSk7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCS8qIENvbmZsaWN0cyB3aXRoIGxpbmtzIGFsd2F5cyBrZWVwIHRoZSBvdXJzIHNpZGUgKGV2ZW4gd2l0aCAtWHRoZWlycykgKi8KKwllbnN1cmVfd29ya2Rpcl9saW5rKCJsaW5rLTEiLCBMSU5LX09VUlNfVEFSR0VUKTsKKwllbnN1cmVfd29ya2Rpcl9saW5rKCJsaW5rLTIiLCBMSU5LX09VUlNfVEFSR0VUKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NvbmZsaWN0X19hZGRfYWRkKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgY2hlY2tvdXRfaW5kZXhfZW50cnkgY2hlY2tvdXRfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAyLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJjb25mbGljdGluZy50eHQiIH0sCisJfTsKKworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgfD0gR0lUX0NIRUNLT1VUX1NBRkU7CisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgMik7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCS8qIEFkZC9hZGQgd3JpdGVzIGRpZmYzIGZpbGVzICovCisJZW5zdXJlX3dvcmtkaXJfY29udGVudHMoImNvbmZsaWN0aW5nLnR4dCIsIENPTkZMSUNUSU5HX0RJRkYzX0ZJTEUpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY29uZmxpY3RfX21vZGVfY2hhbmdlKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgY2hlY2tvdXRfaW5kZXhfZW50cnkgY2hlY2tvdXRfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImV4ZWN1dGFibGUtMSIgfSwKKwkJeyAwMTAwNzU1LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDIsICJleGVjdXRhYmxlLTEiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImV4ZWN1dGFibGUtMSIgfSwKKworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImV4ZWN1dGFibGUtMiIgfSwKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19PVVJTX09JRCwgMiwgImV4ZWN1dGFibGUtMiIgfSwKKwkJeyAwMTAwNzU1LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDMsICJleGVjdXRhYmxlLTIiIH0sCisKKwkJeyAwMTAwNzU1LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJleGVjdXRhYmxlLTMiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAyLCAiZXhlY3V0YWJsZS0zIiB9LAorCQl7IDAxMDA3NTUsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJleGVjdXRhYmxlLTMiIH0sCisKKwkJeyAwMTAwNzU1LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJleGVjdXRhYmxlLTQiIH0sCisJCXsgMDEwMDc1NSwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJleGVjdXRhYmxlLTQiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAzLCAiZXhlY3V0YWJsZS00IiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAiZXhlY3V0YWJsZS01IiB9LAorCQl7IDAxMDA3NTUsIENPTkZMSUNUSU5HX09VUlNfT0lELCAyLCAiZXhlY3V0YWJsZS01IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJleGVjdXRhYmxlLTUiIH0sCisKKwkJeyAwMTAwNzU1LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJleGVjdXRhYmxlLTYiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJleGVjdXRhYmxlLTYiIH0sCisJCXsgMDEwMDc1NSwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImV4ZWN1dGFibGUtNiIgfSwKKwl9OworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSB8PSBHSVRfQ0hFQ0tPVVRfU0FGRTsKKworCWNyZWF0ZV9pbmRleChjaGVja291dF9pbmRleF9lbnRyaWVzLCAxOCk7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCS8qIEtlZXAgdGhlIG1vZGlmaWVkIG1vZGUgKi8KKwllbnN1cmVfd29ya2Rpcl9vaWQoImV4ZWN1dGFibGUtMSIsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQpOworCWVuc3VyZV93b3JrZGlyX21vZGUoImV4ZWN1dGFibGUtMSIsIDAxMDA3NTUpOworCisJZW5zdXJlX3dvcmtkaXJfb2lkKCJleGVjdXRhYmxlLTIiLCBDT05GTElDVElOR19PVVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfbW9kZSgiZXhlY3V0YWJsZS0yIiwgMDEwMDc1NSk7CisKKwllbnN1cmVfd29ya2Rpcl9vaWQoImV4ZWN1dGFibGUtMyIsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQpOworCWVuc3VyZV93b3JrZGlyX21vZGUoImV4ZWN1dGFibGUtMyIsIDAxMDA2NDQpOworCisJZW5zdXJlX3dvcmtkaXJfb2lkKCJleGVjdXRhYmxlLTQiLCBDT05GTElDVElOR19PVVJTX09JRCk7CisJZW5zdXJlX3dvcmtkaXJfbW9kZSgiZXhlY3V0YWJsZS00IiwgMDEwMDY0NCk7CisKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cygiZXhlY3V0YWJsZS01IiwgQ09ORkxJQ1RJTkdfRElGRjNfRklMRSk7CisJZW5zdXJlX3dvcmtkaXJfbW9kZSgiZXhlY3V0YWJsZS01IiwgMDEwMDc1NSk7CisKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cygiZXhlY3V0YWJsZS02IiwgQ09ORkxJQ1RJTkdfRElGRjNfRklMRSk7CisJZW5zdXJlX3dvcmtkaXJfbW9kZSgiZXhlY3V0YWJsZS02IiwgMDEwMDY0NCk7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fcmVuYW1lcyh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IGNoZWNrb3V0X2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCAiNjhjNmM4NGIwOTE5MjZjN2Q5MGFhNmE3OWIyYmMzYmI2YWRjY2Q4ZSIsIDAsICIwYS1uby1jaGFuZ2UudHh0IiB9LAorCQl7IDAxMDA2NDQsICJmMGNlMmI4ZTQ5ODYwODRkOWIzMDhmYjcyNzA5ZTQxNGMyM2ViNWU2IiwgMCwgIjBiLWR1cGxpY2F0ZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImYwY2UyYjhlNDk4NjA4NGQ5YjMwOGZiNzI3MDllNDE0YzIzZWI1ZTYiLCAxLCAiMGItcmV3cml0dGVuLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlMzc2ZmJkZDA2ZWJmMDIxYzkyNzI0ZGE5ZjI2ZjQ0MjEyNzM0ZTNlIiwgMiwgIjBiLXJld3JpdHRlbi1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjJkMzk5YWUxNTIyNGUxZDU4MDY2ZTNjOGRmNzBjZTM3ZGU3YTY1NiIsIDMsICIwYi1yZXdyaXR0ZW4taW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjJmNTYxMjAxMDdkNjgwMTI5YTVkOTc5MWI1MjFjYjFlNzNhMmVkMzEiLCAwLCAiMGMtZHVwbGljYXRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyZjU2MTIwMTA3ZDY4MDEyOWE1ZDk3OTFiNTIxY2IxZTczYTJlZDMxIiwgMSwgIjBjLXJld3JpdHRlbi1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlZmM5MTIxZmRlZGFmMDhiYTE4MGI1M2ViZmJjZjcxYmQ0ODhlZDA5IiwgMiwgIjBjLXJld3JpdHRlbi1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI3MTJlYmJhNjY2OWVhODQ3ZDk4MjllNGYxMDU5ZDZjODMwYzhiNTMxIiwgMywgIjBjLXJld3JpdHRlbi1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIwZDg3MmY4ZTg3MWEzMDIwODMwNTk3OGVjYmY5ZTY2ZDg2NGYxNjM4IiwgMCwgIjFhLW5ld25hbWUtaW4tb3Vycy1lZGl0ZWQtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZDBkNDU5NGUxNmYyZTE5MTA3ZTNmYTdlYTYzZTdhYWFmZjMwNWZmYiIsIDAsICIxYS1uZXduYW1lLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlZDk1MjNlNjJlNDUzZTUwZGQ5YmUxNjA2YWYxOTM5OWI5NmUzOTdhIiwgMCwgIjFiLW5ld25hbWUtaW4tdGhlaXJzLWVkaXRlZC1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMmI1ZjFmMTgxZWUzYjU4ZWE3NTFmNWRkNWQ4ZjliNDQ1NTIwYTEzNiIsIDAsICIxYi1uZXduYW1lLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjE3ODk0MGI0NTBmMjM4YTU2YzBkNzViNzk1NWNiNTdiMzgxOTE5ODIiLCAwLCAiMi1uZXduYW1lLWluLWJvdGgudHh0IiB9LAorCQl7IDAxMDA2NDQsICIxOGNiMzE2YjFjZWZhMGY4YTY5NDZmMGUyMDFhOGUxYTZmODQ1YWI5IiwgMiwgIjNhLW5ld25hbWUtaW4tb3Vycy1kZWxldGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjE4Y2IzMTZiMWNlZmEwZjhhNjk0NmYwZTIwMWE4ZTFhNmY4NDVhYjkiLCAxLCAiM2EtcmVuYW1lZC1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMzYyMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NSIsIDMsICIzYi1uZXduYW1lLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIzNjIxOWI0OTM2NzE0NmNiMmU2YTE1NTViNWE5ZWJkNGQwMzI4NDk1IiwgMSwgIjNiLXJlbmFtZWQtaW4tdGhlaXJzLWRlbGV0ZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjIyNzc5MmI1MmFhYTBiMjM4YmVhMDBlYzdlNTA5YjAyNjIzZjE2OGMiLCAyLCAiNGEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjhiNWI1M2NiMmFhOWNlYjExMzlmNTMxMmZjZmEzY2MzYzVhNDdjOWEiLCAzLCAiNGEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjIyNzc5MmI1MmFhYTBiMjM4YmVhMDBlYzdlNTA5YjAyNjIzZjE2OGMiLCAxLCAiNGEtcmVuYW1lZC1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImRlODcyZWUzNjE4Yjg5NDk5MmU5ZDFlMThiYTJlYmUyNTZhMTEyZjkiLCAyLCAiNGItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjk4ZDUyZDA3YzBiMGJiZjJiNDY1NDhmNmFhNTIxMjk1YzJjYjU1ZGIiLCAzLCAiNGItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjk4ZDUyZDA3YzBiMGJiZjJiNDY1NDhmNmFhNTIxMjk1YzJjYjU1ZGIiLCAxLCAiNGItcmVuYW1lZC1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQzNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYiLCAyLCAiNWEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjk4YmE0MjA1ZmNmMzFmNWRkOTNjOTE2ZDM1ZmUzZjNiM2QwZTY3MTQiLCAzLCAiNWEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQzNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYiLCAxLCAiNWEtcmVuYW1lZC1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQzNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYiLCAzLCAiNWEtcmVuYW1lZC1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjM4NWM4YTBmMjZkZGY3OWU5MDQxZTE1ZTE3ZGMzNTJlZDJjNGNjZWQiLCAyLCAiNWItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjYzMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgiLCAzLCAiNWItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjYzMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgiLCAxLCAiNWItcmVuYW1lZC1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjYzMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgiLCAyLCAiNWItcmVuYW1lZC1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQ4ZmE3N2I2ODMzMDgyYzFlYTM2Yjc4MjhhNTgyZDRjNDM4ODI0NTAiLCAyLCAiNi1ib3RoLXJlbmFtZWQtMS10by0yLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkOGZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwIiwgMywgIjYtYm90aC1yZW5hbWVkLTEtdG8tMi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkOGZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwIiwgMSwgIjYtYm90aC1yZW5hbWVkLTEtdG8tMi50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAxLCAiNy1ib3RoLXJlbmFtZWQtc2lkZS0xLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIsIDMsICI3LWJvdGgtcmVuYW1lZC1zaWRlLTEudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IiwgMSwgIjctYm90aC1yZW5hbWVkLXNpZGUtMi50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAyLCAiNy1ib3RoLXJlbmFtZWQtc2lkZS0yLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIsIDIsICI3LWJvdGgtcmVuYW1lZC50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAzLCAiNy1ib3RoLXJlbmFtZWQudHh0IiB9CisJfTsKKworCXN0cnVjdCBjaGVja291dF9uYW1lX2VudHJ5IGNoZWNrb3V0X25hbWVfZW50cmllc1tdID0geworCQl7CisJCQkiM2EtcmVuYW1lZC1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIsCisJCQkiM2EtbmV3bmFtZS1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIsCisJCQkiIgorCQl9LAorCisJCXsKKwkJCSIzYi1yZW5hbWVkLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IiwKKwkJCSIiLAorCQkJIjNiLW5ld25hbWUtaW4tdGhlaXJzLWRlbGV0ZWQtaW4tb3Vycy50eHQiCisJCX0sCisKKwkJeworCQkJIjRhLXJlbmFtZWQtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiwKKwkJCSI0YS1uZXduYW1lLWluLW91cnMtYWRkZWQtaW4tdGhlaXJzLnR4dCIsCisJCQkiIgorCQl9LAorCisJCXsKKwkJCSI0Yi1yZW5hbWVkLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dCIsCisJCQkiIiwKKwkJCSI0Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dCIKKwkJfSwKKworCQl7CisJCQkiNWEtcmVuYW1lZC1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiLAorCQkJIjVhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiwKKwkJCSI1YS1yZW5hbWVkLWluLW91cnMtYWRkZWQtaW4tdGhlaXJzLnR4dCIKKwkJfSwKKworCQl7CisJCQkiNWItcmVuYW1lZC1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiLAorCQkJIjViLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiwKKwkJCSI1Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dCIKKwkJfSwKKworCQl7CisJCQkiNi1ib3RoLXJlbmFtZWQtMS10by0yLnR4dCIsCisJCQkiNi1ib3RoLXJlbmFtZWQtMS10by0yLW91cnMudHh0IiwKKwkJCSI2LWJvdGgtcmVuYW1lZC0xLXRvLTItdGhlaXJzLnR4dCIKKwkJfSwKKworCQl7CisJCQkiNy1ib3RoLXJlbmFtZWQtc2lkZS0xLnR4dCIsCisJCQkiNy1ib3RoLXJlbmFtZWQudHh0IiwKKwkJCSI3LWJvdGgtcmVuYW1lZC1zaWRlLTEudHh0IgorCQl9LAorCisJCXsKKwkJCSI3LWJvdGgtcmVuYW1lZC1zaWRlLTIudHh0IiwKKwkJCSI3LWJvdGgtcmVuYW1lZC1zaWRlLTIudHh0IiwKKwkJCSI3LWJvdGgtcmVuYW1lZC50eHQiCisJCX0KKwl9OworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSB8PSBHSVRfQ0hFQ0tPVVRfU0FGRTsKKworCWNyZWF0ZV9pbmRleChjaGVja291dF9pbmRleF9lbnRyaWVzLCA0MSk7CisJY3JlYXRlX2luZGV4X25hbWVzKGNoZWNrb3V0X25hbWVfZW50cmllcywgOSk7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKworCWVuc3VyZV93b3JrZGlyKCIwYS1uby1jaGFuZ2UudHh0IiwKKwkJMDEwMDY0NCwgIjY4YzZjODRiMDkxOTI2YzdkOTBhYTZhNzliMmJjM2JiNmFkY2NkOGUiKTsKKworCWVuc3VyZV93b3JrZGlyKCIwYi1kdXBsaWNhdGVkLWluLW91cnMudHh0IiwKKwkJMDEwMDY0NCwgImYwY2UyYjhlNDk4NjA4NGQ5YjMwOGZiNzI3MDllNDE0YzIzZWI1ZTYiKTsKKworCWVuc3VyZV93b3JrZGlyKCIwYi1yZXdyaXR0ZW4taW4tb3Vycy50eHQiLAorCQkwMTAwNjQ0LCAiNGM3ZTUxNWQ2ZDUyZDgyMDQ5Njg1OGYyZjA1OWVjZTY5ZTk5ZTJlMyIpOworCisJZW5zdXJlX3dvcmtkaXIoIjBjLWR1cGxpY2F0ZWQtaW4tdGhlaXJzLnR4dCIsCisJCTAxMDA2NDQsICIyZjU2MTIwMTA3ZDY4MDEyOWE1ZDk3OTFiNTIxY2IxZTczYTJlZDMxIik7CisKKwllbnN1cmVfd29ya2RpcigiMGMtcmV3cml0dGVuLWluLXRoZWlycy50eHQiLAorCQkwMTAwNjQ0LCAiNDY0OGQ2NTg2ODJkMTE1NWMyYTNkYjViMGM1MzMwNWUyNjg4NGVhNSIpOworCisJZW5zdXJlX3dvcmtkaXIoIjFhLW5ld25hbWUtaW4tb3Vycy1lZGl0ZWQtaW4tdGhlaXJzLnR4dCIsCisJCTAxMDA2NDQsICIwZDg3MmY4ZTg3MWEzMDIwODMwNTk3OGVjYmY5ZTY2ZDg2NGYxNjM4Iik7CisKKwllbnN1cmVfd29ya2RpcigiMWEtbmV3bmFtZS1pbi1vdXJzLnR4dCIsCisJCTAxMDA2NDQsICJkMGQ0NTk0ZTE2ZjJlMTkxMDdlM2ZhN2VhNjNlN2FhYWZmMzA1ZmZiIik7CisKKwllbnN1cmVfd29ya2RpcigiMWItbmV3bmFtZS1pbi10aGVpcnMtZWRpdGVkLWluLW91cnMudHh0IiwKKwkJMDEwMDY0NCwgImVkOTUyM2U2MmU0NTNlNTBkZDliZTE2MDZhZjE5Mzk5Yjk2ZTM5N2EiKTsKKworCWVuc3VyZV93b3JrZGlyKCIxYi1uZXduYW1lLWluLXRoZWlycy50eHQiLAorCQkwMTAwNjQ0LCAiMmI1ZjFmMTgxZWUzYjU4ZWE3NTFmNWRkNWQ4ZjliNDQ1NTIwYTEzNiIpOworCisJZW5zdXJlX3dvcmtkaXIoIjItbmV3bmFtZS1pbi1ib3RoLnR4dCIsCisJCTAxMDA2NDQsICIxNzg5NDBiNDUwZjIzOGE1NmMwZDc1Yjc5NTVjYjU3YjM4MTkxOTgyIik7CisKKwllbnN1cmVfd29ya2RpcigiM2EtbmV3bmFtZS1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIsCisJCTAxMDA2NDQsICIxOGNiMzE2YjFjZWZhMGY4YTY5NDZmMGUyMDFhOGUxYTZmODQ1YWI5Iik7CisKKwllbnN1cmVfd29ya2RpcigiM2ItbmV3bmFtZS1pbi10aGVpcnMtZGVsZXRlZC1pbi1vdXJzLnR4dCIsCisJCTAxMDA2NDQsICIzNjIxOWI0OTM2NzE0NmNiMmU2YTE1NTViNWE5ZWJkNGQwMzI4NDk1Iik7CisKKwllbnN1cmVfd29ya2RpcigiNGEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHR+b3VycyIsCisJCTAxMDA2NDQsICIyMjc3OTJiNTJhYWEwYjIzOGJlYTAwZWM3ZTUwOWIwMjYyM2YxNjhjIik7CisKKwllbnN1cmVfd29ya2RpcigiNGEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHR+dGhlaXJzIiwKKwkJMDEwMDY0NCwgIjhiNWI1M2NiMmFhOWNlYjExMzlmNTMxMmZjZmEzY2MzYzVhNDdjOWEiKTsKKworCWVuc3VyZV93b3JrZGlyKCI0Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dH5vdXJzIiwKKwkJMDEwMDY0NCwgImRlODcyZWUzNjE4Yjg5NDk5MmU5ZDFlMThiYTJlYmUyNTZhMTEyZjkiKTsKKworCWVuc3VyZV93b3JrZGlyKCI0Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dH50aGVpcnMiLAorCQkwMTAwNjQ0LCAiOThkNTJkMDdjMGIwYmJmMmI0NjU0OGY2YWE1MjEyOTVjMmNiNTVkYiIpOworCisJZW5zdXJlX3dvcmtkaXIoIjVhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0fm91cnMiLAorCQkwMTAwNjQ0LCAiZDM3MTlhNWFlOGU0ZDkyMjc2YjUzMTNjZTk3NmY2ZWU1YWYyYjQzNiIpOworCisJZW5zdXJlX3dvcmtkaXIoIjVhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0fnRoZWlycyIsCisJCTAxMDA2NDQsICI5OGJhNDIwNWZjZjMxZjVkZDkzYzkxNmQzNWZlM2YzYjNkMGU2NzE0Iik7CisKKwllbnN1cmVfd29ya2RpcigiNWItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHR+b3VycyIsCisJCTAxMDA2NDQsICIzODVjOGEwZjI2ZGRmNzllOTA0MWUxNWUxN2RjMzUyZWQyYzRjY2VkIik7CisKKwllbnN1cmVfd29ya2RpcigiNWItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHR+dGhlaXJzIiwKKwkJMDEwMDY0NCwgIjYzMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgiKTsKKworCWVuc3VyZV93b3JrZGlyKCI2LWJvdGgtcmVuYW1lZC0xLXRvLTItb3Vycy50eHQiLAorCQkwMTAwNjQ0LCAiZDhmYTc3YjY4MzMwODJjMWVhMzZiNzgyOGE1ODJkNGM0Mzg4MjQ1MCIpOworCisJZW5zdXJlX3dvcmtkaXIoIjYtYm90aC1yZW5hbWVkLTEtdG8tMi10aGVpcnMudHh0IiwKKwkJMDEwMDY0NCwgImQ4ZmE3N2I2ODMzMDgyYzFlYTM2Yjc4MjhhNTgyZDRjNDM4ODI0NTAiKTsKKworCWVuc3VyZV93b3JrZGlyKCI3LWJvdGgtcmVuYW1lZC50eHR+b3VycyIsCisJCTAxMDA2NDQsICJiNDI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExIik7CisKKwllbnN1cmVfd29ya2RpcigiNy1ib3RoLXJlbmFtZWQudHh0fnRoZWlycyIsCisJCTAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3Iik7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fcmVuYW1lX2tlZXBfb3Vycyh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCQorCXN0cnVjdCBjaGVja291dF9pbmRleF9lbnRyeSBjaGVja291dF9pbmRleF9lbnRyaWVzW10gPSB7CisJCXsgMDEwMDY0NCwgIjY4YzZjODRiMDkxOTI2YzdkOTBhYTZhNzliMmJjM2JiNmFkY2NkOGUiLCAwLCAiMGEtbm8tY2hhbmdlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZjBjZTJiOGU0OTg2MDg0ZDliMzA4ZmI3MjcwOWU0MTRjMjNlYjVlNiIsIDAsICIwYi1kdXBsaWNhdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJmMGNlMmI4ZTQ5ODYwODRkOWIzMDhmYjcyNzA5ZTQxNGMyM2ViNWU2IiwgMSwgIjBiLXJld3JpdHRlbi1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZTM3NmZiZGQwNmViZjAyMWM5MjcyNGRhOWYyNmY0NDIxMjczNGUzZSIsIDIsICIwYi1yZXdyaXR0ZW4taW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImIyZDM5OWFlMTUyMjRlMWQ1ODA2NmUzYzhkZjcwY2UzN2RlN2E2NTYiLCAzLCAiMGItcmV3cml0dGVuLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyZjU2MTIwMTA3ZDY4MDEyOWE1ZDk3OTFiNTIxY2IxZTczYTJlZDMxIiwgMCwgIjBjLWR1cGxpY2F0ZWQtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMmY1NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMSIsIDEsICIwYy1yZXdyaXR0ZW4taW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZWZjOTEyMWZkZWRhZjA4YmExODBiNTNlYmZiY2Y3MWJkNDg4ZWQwOSIsIDIsICIwYy1yZXdyaXR0ZW4taW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiNzEyZWJiYTY2NjllYTg0N2Q5ODI5ZTRmMTA1OWQ2YzgzMGM4YjUzMSIsIDMsICIwYy1yZXdyaXR0ZW4taW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMGQ4NzJmOGU4NzFhMzAyMDgzMDU5NzhlY2JmOWU2NmQ4NjRmMTYzOCIsIDAsICIxYS1uZXduYW1lLWluLW91cnMtZWRpdGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQwZDQ1OTRlMTZmMmUxOTEwN2UzZmE3ZWE2M2U3YWFhZmYzMDVmZmIiLCAwLCAiMWEtbmV3bmFtZS1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZWQ5NTIzZTYyZTQ1M2U1MGRkOWJlMTYwNmFmMTkzOTliOTZlMzk3YSIsIDAsICIxYi1uZXduYW1lLWluLXRoZWlycy1lZGl0ZWQtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjJiNWYxZjE4MWVlM2I1OGVhNzUxZjVkZDVkOGY5YjQ0NTUyMGExMzYiLCAwLCAiMWItbmV3bmFtZS1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIxNzg5NDBiNDUwZjIzOGE1NmMwZDc1Yjc5NTVjYjU3YjM4MTkxOTgyIiwgMCwgIjItbmV3bmFtZS1pbi1ib3RoLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMThjYjMxNmIxY2VmYTBmOGE2OTQ2ZjBlMjAxYThlMWE2Zjg0NWFiOSIsIDIsICIzYS1uZXduYW1lLWluLW91cnMtZGVsZXRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIxOGNiMzE2YjFjZWZhMGY4YTY5NDZmMGUyMDFhOGUxYTZmODQ1YWI5IiwgMSwgIjNhLXJlbmFtZWQtaW4tb3Vycy1kZWxldGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjM2MjE5YjQ5MzY3MTQ2Y2IyZTZhMTU1NWI1YTllYmQ0ZDAzMjg0OTUiLCAzLCAiM2ItbmV3bmFtZS1pbi10aGVpcnMtZGVsZXRlZC1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMzYyMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NSIsIDEsICIzYi1yZW5hbWVkLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyMjc3OTJiNTJhYWEwYjIzOGJlYTAwZWM3ZTUwOWIwMjYyM2YxNjhjIiwgMiwgIjRhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI4YjViNTNjYjJhYTljZWIxMTM5ZjUzMTJmY2ZhM2NjM2M1YTQ3YzlhIiwgMywgIjRhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyMjc3OTJiNTJhYWEwYjIzOGJlYTAwZWM3ZTUwOWIwMjYyM2YxNjhjIiwgMSwgIjRhLXJlbmFtZWQtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkZTg3MmVlMzYxOGI4OTQ5OTJlOWQxZTE4YmEyZWJlMjU2YTExMmY5IiwgMiwgIjRiLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI5OGQ1MmQwN2MwYjBiYmYyYjQ2NTQ4ZjZhYTUyMTI5NWMyY2I1NWRiIiwgMywgIjRiLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI5OGQ1MmQwN2MwYjBiYmYyYjQ2NTQ4ZjZhYTUyMTI5NWMyY2I1NWRiIiwgMSwgIjRiLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMzcxOWE1YWU4ZTRkOTIyNzZiNTMxM2NlOTc2ZjZlZTVhZjJiNDM2IiwgMiwgIjVhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI5OGJhNDIwNWZjZjMxZjVkZDkzYzkxNmQzNWZlM2YzYjNkMGU2NzE0IiwgMywgIjVhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMzcxOWE1YWU4ZTRkOTIyNzZiNTMxM2NlOTc2ZjZlZTVhZjJiNDM2IiwgMSwgIjVhLXJlbmFtZWQtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMzcxOWE1YWU4ZTRkOTIyNzZiNTMxM2NlOTc2ZjZlZTVhZjJiNDM2IiwgMywgIjVhLXJlbmFtZWQtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIzODVjOGEwZjI2ZGRmNzllOTA0MWUxNWUxN2RjMzUyZWQyYzRjY2VkIiwgMiwgIjViLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI2MzI0NzEyNTM4NmRlOWVjOTBhMjdhZDM2MTY5MzA3YmY4YTExYTM4IiwgMywgIjViLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI2MzI0NzEyNTM4NmRlOWVjOTBhMjdhZDM2MTY5MzA3YmY4YTExYTM4IiwgMSwgIjViLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI2MzI0NzEyNTM4NmRlOWVjOTBhMjdhZDM2MTY5MzA3YmY4YTExYTM4IiwgMiwgIjViLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkOGZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwIiwgMiwgIjYtYm90aC1yZW5hbWVkLTEtdG8tMi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZDhmYTc3YjY4MzMwODJjMWVhMzZiNzgyOGE1ODJkNGM0Mzg4MjQ1MCIsIDMsICI2LWJvdGgtcmVuYW1lZC0xLXRvLTItdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZDhmYTc3YjY4MzMwODJjMWVhMzZiNzgyOGE1ODJkNGM0Mzg4MjQ1MCIsIDEsICI2LWJvdGgtcmVuYW1lZC0xLXRvLTIudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNDI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExIiwgMSwgIjctYm90aC1yZW5hbWVkLXNpZGUtMS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAzLCAiNy1ib3RoLXJlbmFtZWQtc2lkZS0xLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjY5ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNyIsIDEsICI3LWJvdGgtcmVuYW1lZC1zaWRlLTIudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IiwgMiwgIjctYm90aC1yZW5hbWVkLXNpZGUtMi50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAyLCAiNy1ib3RoLXJlbmFtZWQudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IiwgMywgIjctYm90aC1yZW5hbWVkLnR4dCIgfQorCX07CisJCisJc3RydWN0IGNoZWNrb3V0X25hbWVfZW50cnkgY2hlY2tvdXRfbmFtZV9lbnRyaWVzW10gPSB7CisJCXsKKwkJCSIzYS1yZW5hbWVkLWluLW91cnMtZGVsZXRlZC1pbi10aGVpcnMudHh0IiwKKwkJCSIzYS1uZXduYW1lLWluLW91cnMtZGVsZXRlZC1pbi10aGVpcnMudHh0IiwKKwkJCSIiCisJCX0sCisJCQorCQl7CisJCQkiM2ItcmVuYW1lZC1pbi10aGVpcnMtZGVsZXRlZC1pbi1vdXJzLnR4dCIsCisJCQkiIiwKKwkJCSIzYi1uZXduYW1lLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IgorCQl9LAorCQkKKwkJeworCQkJIjRhLXJlbmFtZWQtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiwKKwkJCSI0YS1uZXduYW1lLWluLW91cnMtYWRkZWQtaW4tdGhlaXJzLnR4dCIsCisJCQkiIgorCQl9LAorCQkKKwkJeworCQkJIjRiLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiwKKwkJCSIiLAorCQkJIjRiLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IgorCQl9LAorCQkKKwkJeworCQkJIjVhLXJlbmFtZWQtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiwKKwkJCSI1YS1uZXduYW1lLWluLW91cnMtYWRkZWQtaW4tdGhlaXJzLnR4dCIsCisJCQkiNWEtcmVuYW1lZC1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiCisJCX0sCisJCQorCQl7CisJCQkiNWItcmVuYW1lZC1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHQiLAorCQkJIjViLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiwKKwkJCSI1Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dCIKKwkJfSwKKwkJCisJCXsKKwkJCSI2LWJvdGgtcmVuYW1lZC0xLXRvLTIudHh0IiwKKwkJCSI2LWJvdGgtcmVuYW1lZC0xLXRvLTItb3Vycy50eHQiLAorCQkJIjYtYm90aC1yZW5hbWVkLTEtdG8tMi10aGVpcnMudHh0IgorCQl9LAorCQkKKwkJeworCQkJIjctYm90aC1yZW5hbWVkLXNpZGUtMS50eHQiLAorCQkJIjctYm90aC1yZW5hbWVkLnR4dCIsCisJCQkiNy1ib3RoLXJlbmFtZWQtc2lkZS0xLnR4dCIKKwkJfSwKKwkJCisJCXsKKwkJCSI3LWJvdGgtcmVuYW1lZC1zaWRlLTIudHh0IiwKKwkJCSI3LWJvdGgtcmVuYW1lZC1zaWRlLTIudHh0IiwKKwkJCSI3LWJvdGgtcmVuYW1lZC50eHQiCisJCX0KKwl9OworCQorCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgfD0gR0lUX0NIRUNLT1VUX1NBRkUgfCBHSVRfQ0hFQ0tPVVRfVVNFX09VUlM7CisJCisJY3JlYXRlX2luZGV4KGNoZWNrb3V0X2luZGV4X2VudHJpZXMsIDQxKTsKKwljcmVhdGVfaW5kZXhfbmFtZXMoY2hlY2tvdXRfbmFtZV9lbnRyaWVzLCA5KTsKKwlnaXRfaW5kZXhfd3JpdGUoZ19pbmRleCk7CisJCisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgZ19pbmRleCwgJm9wdHMpKTsKKwkJCisJZW5zdXJlX3dvcmtkaXIoIjBhLW5vLWNoYW5nZS50eHQiLAorCQkJCSAgIDAxMDA2NDQsICI2OGM2Yzg0YjA5MTkyNmM3ZDkwYWE2YTc5YjJiYzNiYjZhZGNjZDhlIik7CisJCisJZW5zdXJlX3dvcmtkaXIoIjBiLWR1cGxpY2F0ZWQtaW4tb3Vycy50eHQiLAorCQkJCSAgIDAxMDA2NDQsICJmMGNlMmI4ZTQ5ODYwODRkOWIzMDhmYjcyNzA5ZTQxNGMyM2ViNWU2Iik7CisJCisJZW5zdXJlX3dvcmtkaXIoIjBiLXJld3JpdHRlbi1pbi1vdXJzLnR4dCIsCisJCQkJICAgMDEwMDY0NCwgImUzNzZmYmRkMDZlYmYwMjFjOTI3MjRkYTlmMjZmNDQyMTI3MzRlM2UiKTsKKwkKKwllbnN1cmVfd29ya2RpcigiMGMtZHVwbGljYXRlZC1pbi10aGVpcnMudHh0IiwKKwkJCQkgICAwMTAwNjQ0LCAiMmY1NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMSIpOworCQorCWVuc3VyZV93b3JrZGlyKCIwYy1yZXdyaXR0ZW4taW4tdGhlaXJzLnR4dCIsCisJCQkJICAgMDEwMDY0NCwgImVmYzkxMjFmZGVkYWYwOGJhMTgwYjUzZWJmYmNmNzFiZDQ4OGVkMDkiKTsKKwkKKwllbnN1cmVfd29ya2RpcigiMWEtbmV3bmFtZS1pbi1vdXJzLWVkaXRlZC1pbi10aGVpcnMudHh0IiwKKwkJCQkgICAwMTAwNjQ0LCAiMGQ4NzJmOGU4NzFhMzAyMDgzMDU5NzhlY2JmOWU2NmQ4NjRmMTYzOCIpOworCQorCWVuc3VyZV93b3JrZGlyKCIxYS1uZXduYW1lLWluLW91cnMudHh0IiwKKwkJCQkgICAwMTAwNjQ0LCAiZDBkNDU5NGUxNmYyZTE5MTA3ZTNmYTdlYTYzZTdhYWFmZjMwNWZmYiIpOworCQorCWVuc3VyZV93b3JrZGlyKCIxYi1uZXduYW1lLWluLXRoZWlycy1lZGl0ZWQtaW4tb3Vycy50eHQiLAorCQkJCSAgIDAxMDA2NDQsICJlZDk1MjNlNjJlNDUzZTUwZGQ5YmUxNjA2YWYxOTM5OWI5NmUzOTdhIik7CisJCisJZW5zdXJlX3dvcmtkaXIoIjFiLW5ld25hbWUtaW4tdGhlaXJzLnR4dCIsCisJCQkJICAgMDEwMDY0NCwgIjJiNWYxZjE4MWVlM2I1OGVhNzUxZjVkZDVkOGY5YjQ0NTUyMGExMzYiKTsKKwkKKwllbnN1cmVfd29ya2RpcigiMi1uZXduYW1lLWluLWJvdGgudHh0IiwKKwkJCQkgICAwMTAwNjQ0LCAiMTc4OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MiIpOworCisJZW5zdXJlX3dvcmtkaXIoIjNhLW5ld25hbWUtaW4tb3Vycy1kZWxldGVkLWluLXRoZWlycy50eHQiLAorCQkJCSAgIDAxMDA2NDQsICIxOGNiMzE2YjFjZWZhMGY4YTY5NDZmMGUyMDFhOGUxYTZmODQ1YWI5Iik7CisJCisJZW5zdXJlX3dvcmtkaXIoIjNiLW5ld25hbWUtaW4tdGhlaXJzLWRlbGV0ZWQtaW4tb3Vycy50eHQiLAorCQkJCSAgIDAxMDA2NDQsICIzNjIxOWI0OTM2NzE0NmNiMmU2YTE1NTViNWE5ZWJkNGQwMzI4NDk1Iik7CisJCisJZW5zdXJlX3dvcmtkaXIoIjRhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiwKKwkJCQkgICAwMTAwNjQ0LCAiMjI3NzkyYjUyYWFhMGIyMzhiZWEwMGVjN2U1MDliMDI2MjNmMTY4YyIpOworCQorCWVuc3VyZV93b3JrZGlyKCI0Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dCIsCisJCQkJICAgMDEwMDY0NCwgImRlODcyZWUzNjE4Yjg5NDk5MmU5ZDFlMThiYTJlYmUyNTZhMTEyZjkiKTsKKwkKKwllbnN1cmVfd29ya2RpcigiNWEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHQiLAorCQkJCSAgIDAxMDA2NDQsICJkMzcxOWE1YWU4ZTRkOTIyNzZiNTMxM2NlOTc2ZjZlZTVhZjJiNDM2Iik7CisJCQorCWVuc3VyZV93b3JrZGlyKCI1Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dCIsCisJCQkJICAgMDEwMDY0NCwgIjM4NWM4YTBmMjZkZGY3OWU5MDQxZTE1ZTE3ZGMzNTJlZDJjNGNjZWQiKTsKKworCWVuc3VyZV93b3JrZGlyKCI2LWJvdGgtcmVuYW1lZC0xLXRvLTItb3Vycy50eHQiLAorCQkJCSAgIDAxMDA2NDQsICJkOGZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwIik7CisJCisJZW5zdXJlX3dvcmtkaXIoIjctYm90aC1yZW5hbWVkLnR4dCIsCisJCQkJICAgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NvbmZsaWN0X19uYW1lX21hbmdsZWRfZmlsZV9leGlzdHNfaW5fd29ya2Rpcih2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IGNoZWNrb3V0X2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIsIDEsICJ0ZXN0LW9uZS1zaWRlLW9uZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAzLCAidGVzdC1vbmUtc2lkZS1vbmUudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IiwgMSwgInRlc3Qtb25lLXNpZGUtdHdvLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjY5ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNyIsIDIsICJ0ZXN0LW9uZS1zaWRlLXR3by50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAyLCAidGVzdC1vbmUudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IiwgMywgInRlc3Qtb25lLnR4dCIgfSwKKworCQl7IDAxMDA2NDQsICJiNDI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExIiwgMSwgInRlc3QtdHdvLXNpZGUtb25lLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIsIDMsICJ0ZXN0LXR3by1zaWRlLW9uZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAxLCAidGVzdC10d28tc2lkZS10d28udHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IiwgMiwgInRlc3QtdHdvLXNpZGUtdHdvLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIsIDIsICJ0ZXN0LXR3by50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAzLCAidGVzdC10d28udHh0IiB9LAorCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAxLCAidGVzdC10aHJlZS1zaWRlLW9uZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAzLCAidGVzdC10aHJlZS1zaWRlLW9uZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAxLCAidGVzdC10aHJlZS1zaWRlLXR3by50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAyLCAidGVzdC10aHJlZS1zaWRlLXR3by50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAyLCAidGVzdC10aHJlZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAzLCAidGVzdC10aHJlZS50eHQiIH0sCisKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJkaXJlY3RvcnlfZmlsZS1vbmUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJkaXJlY3RvcnlfZmlsZS1vbmUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMCwgImRpcmVjdG9yeV9maWxlLW9uZS9maWxlIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAiZGlyZWN0b3J5X2ZpbGUtdHdvIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAwLCAiZGlyZWN0b3J5X2ZpbGUtdHdvL2ZpbGUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImRpcmVjdG9yeV9maWxlLXR3byIgfSwKKwl9OworCisJc3RydWN0IGNoZWNrb3V0X25hbWVfZW50cnkgY2hlY2tvdXRfbmFtZV9lbnRyaWVzW10gPSB7CisJCXsKKwkJCSJ0ZXN0LW9uZS1zaWRlLW9uZS50eHQiLAorCQkJInRlc3Qtb25lLnR4dCIsCisJCQkidGVzdC1vbmUtc2lkZS1vbmUudHh0IgorCQl9LAorCQl7CisJCQkidGVzdC1vbmUtc2lkZS10d28udHh0IiwKKwkJCSJ0ZXN0LW9uZS1zaWRlLXR3by50eHQiLAorCQkJInRlc3Qtb25lLnR4dCIKKwkJfSwKKworCQl7CisJCQkidGVzdC10d28tc2lkZS1vbmUudHh0IiwKKwkJCSJ0ZXN0LXR3by50eHQiLAorCQkJInRlc3QtdHdvLXNpZGUtb25lLnR4dCIKKwkJfSwKKwkJeworCQkJInRlc3QtdHdvLXNpZGUtdHdvLnR4dCIsCisJCQkidGVzdC10d28tc2lkZS10d28udHh0IiwKKwkJCSJ0ZXN0LXR3by50eHQiCisJCX0sCisKKwkJeworCQkJInRlc3QtdGhyZWUtc2lkZS1vbmUudHh0IiwKKwkJCSJ0ZXN0LXRocmVlLnR4dCIsCisJCQkidGVzdC10aHJlZS1zaWRlLW9uZS50eHQiCisJCX0sCisJCXsKKwkJCSJ0ZXN0LXRocmVlLXNpZGUtdHdvLnR4dCIsCisJCQkidGVzdC10aHJlZS1zaWRlLXR3by50eHQiLAorCQkJInRlc3QtdGhyZWUudHh0IgorCQl9CisJfTsKKworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgfD0gR0lUX0NIRUNLT1VUX1NBRkU7CisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgMjQpOworCWNyZWF0ZV9pbmRleF9uYW1lcyhjaGVja291dF9uYW1lX2VudHJpZXMsIDYpOworCWdpdF9pbmRleF93cml0ZShnX2luZGV4KTsKKworCS8qIEFkZCBzb21lIGZpbGVzIG9uIGRpc2sgdGhhdCBjb25mbGljdCB3aXRoIHRoZSBuYW1lcyB0aGF0IHdvdWxkIGJlIGNob3NlbgorCSAqIGZvciB0aGUgZmlsZXMgd3JpdHRlbiBmb3IgZWFjaCBzaWRlLiAqLworCisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL3Rlc3Qtb25lLnR4dH5vdXJzIiwKKwkJIkV4cGVjdCBpbmRleCBjb250ZW50cyB0byBiZSB3cml0dGVuIHRvIH5vdXJzXzAiKTsKKwljbF9naXRfcmV3cml0ZWZpbGUoIm1lcmdlLXJlc29sdmUvdGVzdC1vbmUudHh0fnRoZWlycyIsCisJCSJFeHBlY3QgaW5kZXggY29udGVudHMgdG8gYmUgd3JpdHRlbiB0byB+dGhlaXJzXzAiKTsKKworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS90ZXN0LXR3by50eHR+b3VycyIsCisJCSJFeHBlY3QgaW5kZXggY29udGVudHMgdG8gYmUgd3JpdHRlbiB0byB+b3Vyc18zIik7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL3Rlc3QtdHdvLnR4dH50aGVpcnMiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfnRoZWlyc18zIik7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL3Rlc3QtdHdvLnR4dH5vdXJzXzAiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfm91cnNfMyIpOworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS90ZXN0LXR3by50eHR+dGhlaXJzXzAiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfnRoZWlyc18zIik7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL3Rlc3QtdHdvLnR4dH5vdXJzXzEiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfm91cnNfMyIpOworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS90ZXN0LXR3by50eHR+dGhlaXJzXzEiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfnRoZWlyc18zIik7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL3Rlc3QtdHdvLnR4dH5vdXJzXzIiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfm91cnNfMyIpOworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS90ZXN0LXR3by50eHR+dGhlaXJzXzIiLAorCQkiRXhwZWN0IGluZGV4IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gfnRoZWlyc18zIik7CisKKwljbF9naXRfcmV3cml0ZWZpbGUoIm1lcmdlLXJlc29sdmUvdGVzdC10aHJlZS50eHR+T3VycyIsCisJCSJFeHBlY3QgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcyB0byBjcmVhdGUgfm91cnNfMCIpOworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS90ZXN0LXRocmVlLnR4dH5USEVJUlMiLAorCQkiRXhwZWN0IGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgdG8gY3JlYXRlIH50aGVpcnNfMCIpOworCisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL2RpcmVjdG9yeV9maWxlLW9uZX5vdXJzIiwKKwkJIkluZGV4IGNvbnRlbnRzIHdyaXR0ZW4gdG8gfm91cnNfMCBpbiB0aGlzIEQvRiBjb25mbGljdCIpOworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS9kaXJlY3RvcnlfZmlsZS10d29+dGhlaXJzIiwKKwkJIkluZGV4IGNvbnRlbnRzIHdyaXR0ZW4gdG8gfnRoZWlyc18wIGluIHRoaXMgRC9GIGNvbmZsaWN0Iik7CisKKwljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfaW5kZXgoZ19yZXBvLCBnX2luZGV4LCAmb3B0cykpOworCisJZW5zdXJlX3dvcmtkaXIoInRlc3Qtb25lLnR4dH5vdXJzXzAiLAorCQkwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIpOworCWVuc3VyZV93b3JrZGlyKCJ0ZXN0LW9uZS50eHR+dGhlaXJzXzAiLAorCQkwMTAwNjQ0LCAiYjY5ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNyIpOworCisJZW5zdXJlX3dvcmtkaXIoInRlc3QtdHdvLnR4dH5vdXJzXzMiLAorCQkwMTAwNjQ0LCAiYjQyNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMSIpOworCWVuc3VyZV93b3JrZGlyKCJ0ZXN0LXR3by50eHR+dGhlaXJzXzMiLAorCQkwMTAwNjQ0LCAiYjY5ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNyIpOworCisJLyogTmFtZSBpcyBtYW5nbGVkIG9uIGNhc2UgaW5zZW5zaXRpdmUgb25seSAqLworI2lmIGRlZmluZWQoR0lUX1dJTjMyKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwllbnN1cmVfd29ya2RpcigidGVzdC10aHJlZS50eHR+b3Vyc18wIiwKKwkJMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiKTsKKwllbnN1cmVfd29ya2RpcigidGVzdC10aHJlZS50eHR+dGhlaXJzXzAiLAorCQkwMTAwNjQ0LCAiYjY5ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNyIpOworI2Vsc2UKKwllbnN1cmVfd29ya2RpcigidGVzdC10aHJlZS50eHR+b3VycyIsCisJCTAxMDA2NDQsICJiNDI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExIik7CisJZW5zdXJlX3dvcmtkaXIoInRlc3QtdGhyZWUudHh0fnRoZWlycyIsCisJCTAxMDA2NDQsICJiNjlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3Iik7CisjZW5kaWYKKworCWVuc3VyZV93b3JrZGlyKCJkaXJlY3RvcnlfZmlsZS1vbmV+b3Vyc18wIiwgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQpOworCWVuc3VyZV93b3JrZGlyKCJkaXJlY3RvcnlfZmlsZS10d29+dGhlaXJzXzAiLCAwMTAwNjQ0LCBDT05GTElDVElOR19USEVJUlNfT0lEKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NvbmZsaWN0X191cGRhdGVfb25seSh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IGNoZWNrb3V0X2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCBBVVRPTUVSR0VBQkxFX0FOQ0VTVE9SX09JRCwgMSwgImF1dG9tZXJnZWFibGUudHh0IiB9LAorCQl7IDAxMDA2NDQsIEFVVE9NRVJHRUFCTEVfT1VSU19PSUQsIDIsICJhdXRvbWVyZ2VhYmxlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBBVVRPTUVSR0VBQkxFX1RIRUlSU19PSUQsIDMsICJhdXRvbWVyZ2VhYmxlLnR4dCIgfSwKKworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgIm1vZGlmeS1kZWxldGUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgIm1vZGlmeS1kZWxldGUiIH0sCisKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJkaXJlY3RvcnlfZmlsZS1vbmUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJkaXJlY3RvcnlfZmlsZS1vbmUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMCwgImRpcmVjdG9yeV9maWxlLW9uZS9maWxlIiB9LAorCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAiZGlyZWN0b3J5X2ZpbGUtdHdvIiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAwLCAiZGlyZWN0b3J5X2ZpbGUtdHdvL2ZpbGUiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImRpcmVjdG9yeV9maWxlLXR3byIgfSwKKwl9OworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSB8PSBHSVRfQ0hFQ0tPVVRfVVBEQVRFX09OTFk7CisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgMyk7CisJZ2l0X2luZGV4X3dyaXRlKGdfaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MocF9ta2RpcigibWVyZ2UtcmVzb2x2ZS9kaXJlY3RvcnlfZmlsZS10d28iLCAwNzc3KSk7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJtZXJnZS1yZXNvbHZlL2RpcmVjdG9yeV9maWxlLXR3by9maWxlIiwgQ09ORkxJQ1RJTkdfT1VSU19GSUxFKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9pbmRleChnX3JlcG8sIGdfaW5kZXgsICZvcHRzKSk7CisKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cygiYXV0b21lcmdlYWJsZS50eHQiLCBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFKTsKKwllbnN1cmVfd29ya2RpcigiZGlyZWN0b3J5X2ZpbGUtdHdvL2ZpbGUiLCAwMTAwNjQ0LCBDT05GTElDVElOR19PVVJTX09JRCk7CisKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygibWVyZ2UtcmVzb2x2ZS9tb2RpZnktZGVsZXRlIikpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJtZXJnZS1yZXNvbHZlL3Rlc3Qtb25lLnR4dCIpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygibWVyZ2UtcmVzb2x2ZS90ZXN0LW9uZS1zaWRlLW9uZS50eHQiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIm1lcmdlLXJlc29sdmUvdGVzdC1vbmUtc2lkZS10d28udHh0IikpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJtZXJnZS1yZXNvbHZlL3Rlc3Qtb25lLnR4dH5vdXJzIikpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJtZXJnZS1yZXNvbHZlL3Rlc3Qtb25lLnR4dH50aGVpcnMiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIm1lcmdlLXJlc29sdmUvZGlyZWN0b3J5X2ZpbGUtb25lL2ZpbGUiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIm1lcmdlLXJlc29sdmUvZGlyZWN0b3J5X2ZpbGUtb25lfm91cnMiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIm1lcmdlLXJlc29sdmUvZGlyZWN0b3J5X2ZpbGUtdHdvfnRoZWlycyIpKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NvbmZsaWN0X19wYXRoX2ZpbHRlcnModm9pZCkKK3sKKwlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKKwljaGFyICpwYXRoc1tdID0geyAiY29uZmxpY3RpbmctMS50eHQiLCAiY29uZmxpY3RpbmctMy50eHQiIH07CisJZ2l0X3N0cmFycmF5IHBhdGhhcnJheSA9IHswfTsKKworCXN0cnVjdCBjaGVja291dF9pbmRleF9lbnRyeSBjaGVja291dF9pbmRleF9lbnRyaWVzW10gPSB7CisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfQU5DRVNUT1JfT0lELCAxLCAiY29uZmxpY3RpbmctMS50eHQiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfT1VSU19PSUQsIDIsICJjb25mbGljdGluZy0xLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19USEVJUlNfT0lELCAzLCAiY29uZmxpY3RpbmctMS50eHQiIH0sCisKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJjb25mbGljdGluZy0yLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19PVVJTX09JRCwgMiwgImNvbmZsaWN0aW5nLTIudHh0IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJjb25mbGljdGluZy0yLnR4dCIgfSwKKworCQl7IDAxMDA2NDQsIEFVVE9NRVJHRUFCTEVfQU5DRVNUT1JfT0lELCAxLCAiY29uZmxpY3RpbmctMy50eHQiIH0sCisJCXsgMDEwMDY0NCwgQVVUT01FUkdFQUJMRV9PVVJTX09JRCwgMiwgImNvbmZsaWN0aW5nLTMudHh0IiB9LAorCQl7IDAxMDA2NDQsIEFVVE9NRVJHRUFCTEVfVEhFSVJTX09JRCwgMywgImNvbmZsaWN0aW5nLTMudHh0IiB9LAorCisJCXsgMDEwMDY0NCwgQVVUT01FUkdFQUJMRV9BTkNFU1RPUl9PSUQsIDEsICJjb25mbGljdGluZy00LnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBBVVRPTUVSR0VBQkxFX09VUlNfT0lELCAyLCAiY29uZmxpY3RpbmctNC50eHQiIH0sCisJCXsgMDEwMDY0NCwgQVVUT01FUkdFQUJMRV9USEVJUlNfT0lELCAzLCAiY29uZmxpY3RpbmctNC50eHQiIH0sCisJfTsKKworCXBhdGhhcnJheS5jb3VudCA9IDI7CisJcGF0aGFycmF5LnN0cmluZ3MgPSBwYXRoczsKKworCW9wdHMucGF0aHMgPSBwYXRoYXJyYXk7CisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgMTIpOworCWdpdF9pbmRleF93cml0ZShnX2luZGV4KTsKKworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9pbmRleChnX3JlcG8sIGdfaW5kZXgsICZvcHRzKSk7CisKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cygiY29uZmxpY3RpbmctMS50eHQiLCBDT05GTElDVElOR19ESUZGM19GSUxFKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygibWVyZ2UtcmVzb2x2ZS9jb25mbGljdGluZy0yLnR4dCIpKTsKKwllbnN1cmVfd29ya2Rpcl9jb250ZW50cygiY29uZmxpY3RpbmctMy50eHQiLCBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygibWVyZ2UtcmVzb2x2ZS9jb25mbGljdGluZy00LnR4dCIpKTsKK30KKworc3RhdGljIHZvaWQgY29sbGVjdF9wcm9ncmVzcygKKwljb25zdCBjaGFyICpwYXRoLAorCXNpemVfdCBjb21wbGV0ZWRfc3RlcHMsCisJc2l6ZV90IHRvdGFsX3N0ZXBzLAorCXZvaWQgKnBheWxvYWQpCit7CisJZ2l0X3ZlY3RvciAqcGF0aHMgPSBwYXlsb2FkOworCisJKHZvaWQpY29tcGxldGVkX3N0ZXBzOworCSh2b2lkKXRvdGFsX3N0ZXBzOworCisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZ2l0X3ZlY3Rvcl9pbnNlcnQocGF0aHMsIHN0cmR1cChwYXRoKSk7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9jb25mbGljdF9fcmVwb3J0X3Byb2dyZXNzKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisJZ2l0X3ZlY3RvciBwYXRocyA9IEdJVF9WRUNUT1JfSU5JVDsKKwljaGFyICpwYXRoOworCXNpemVfdCBpOworCisJc3RydWN0IGNoZWNrb3V0X2luZGV4X2VudHJ5IGNoZWNrb3V0X2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19BTkNFU1RPUl9PSUQsIDEsICJjb25mbGljdGluZy0xLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBDT05GTElDVElOR19PVVJTX09JRCwgMiwgImNvbmZsaWN0aW5nLTEudHh0IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX1RIRUlSU19PSUQsIDMsICJjb25mbGljdGluZy0xLnR4dCIgfSwKKworCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX0FOQ0VTVE9SX09JRCwgMSwgImNvbmZsaWN0aW5nLTIudHh0IiB9LAorCQl7IDAxMDA2NDQsIENPTkZMSUNUSU5HX09VUlNfT0lELCAyLCAiY29uZmxpY3RpbmctMi50eHQiIH0sCisJCXsgMDEwMDY0NCwgQ09ORkxJQ1RJTkdfVEhFSVJTX09JRCwgMywgImNvbmZsaWN0aW5nLTIudHh0IiB9LAorCisJCXsgMDEwMDY0NCwgQVVUT01FUkdFQUJMRV9BTkNFU1RPUl9PSUQsIDEsICJjb25mbGljdGluZy0zLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBBVVRPTUVSR0VBQkxFX09VUlNfT0lELCAyLCAiY29uZmxpY3RpbmctMy50eHQiIH0sCisJCXsgMDEwMDY0NCwgQVVUT01FUkdFQUJMRV9USEVJUlNfT0lELCAzLCAiY29uZmxpY3RpbmctMy50eHQiIH0sCisKKwkJeyAwMTAwNjQ0LCBBVVRPTUVSR0VBQkxFX0FOQ0VTVE9SX09JRCwgMSwgImNvbmZsaWN0aW5nLTQudHh0IiB9LAorCQl7IDAxMDA2NDQsIEFVVE9NRVJHRUFCTEVfT1VSU19PSUQsIDIsICJjb25mbGljdGluZy00LnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCBBVVRPTUVSR0VBQkxFX1RIRUlSU19PSUQsIDMsICJjb25mbGljdGluZy00LnR4dCIgfSwKKwl9OworCisJb3B0cy5wcm9ncmVzc19jYiA9IGNvbGxlY3RfcHJvZ3Jlc3M7CisJb3B0cy5wcm9ncmVzc19wYXlsb2FkID0gJnBhdGhzOworCisKKwljcmVhdGVfaW5kZXgoY2hlY2tvdXRfaW5kZXhfZW50cmllcywgMTIpOworCWdpdF9pbmRleF93cml0ZShnX2luZGV4KTsKKworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9pbmRleChnX3JlcG8sIGdfaW5kZXgsICZvcHRzKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSg0LCBnaXRfdmVjdG9yX2xlbmd0aCgmcGF0aHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY29uZmxpY3RpbmctMS50eHQiLCBnaXRfdmVjdG9yX2dldCgmcGF0aHMsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY29uZmxpY3RpbmctMi50eHQiLCBnaXRfdmVjdG9yX2dldCgmcGF0aHMsIDEpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY29uZmxpY3RpbmctMy50eHQiLCBnaXRfdmVjdG9yX2dldCgmcGF0aHMsIDIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY29uZmxpY3RpbmctNC50eHQiLCBnaXRfdmVjdG9yX2dldCgmcGF0aHMsIDMpKTsKKworCWdpdF92ZWN0b3JfZm9yZWFjaCgmcGF0aHMsIGksIHBhdGgpCisJCWdpdF9fZnJlZShwYXRoKTsKKworCWdpdF92ZWN0b3JfZnJlZSgmcGF0aHMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2tvdXQvY3JsZi5jIGIvdGVzdHMvY2hlY2tvdXQvY3JsZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNGNiZDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jaGVja291dC9jcmxmLmMKQEAgLTAsMCArMSwyMzEgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJjaGVja291dF9oZWxwZXJzLmgiCisjaW5jbHVkZSAiLi4vZmlsdGVyL2NybGYuaCIKKworI2luY2x1ZGUgImdpdDIvY2hlY2tvdXQuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAicG9zaXguaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87CisKK3ZvaWQgdGVzdF9jaGVja291dF9jcmxmX19pbml0aWFsaXplKHZvaWQpCit7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiY3JsZiIpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY3JsZl9fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX2RldGVjdF9jcmxmX2F1dG9jcmxmX2ZhbHNlKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIGZhbHNlKTsKKworCWdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpOworCisJY2hlY2tfZmlsZV9jb250ZW50cygiLi9jcmxmL2FsbC1sZiIsIEFMTF9MRl9URVhUX1JBVyk7CisJY2hlY2tfZmlsZV9jb250ZW50cygiLi9jcmxmL2FsbC1jcmxmIiwgQUxMX0NSTEZfVEVYVF9SQVcpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY3JsZl9fYXV0b2NybGZfZmFsc2VfaW5kZXhfc2l6ZV9pc191bmZpbHRlcmVkX3NpemUodm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIGZhbHNlKTsKKworCWdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpOworCisJZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pOworCisJY2xfYXNzZXJ0KChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCAiYWxsLWxmIiwgMCkpICE9IE5VTEwpOworCWNsX2Fzc2VydChlbnRyeS0+ZmlsZV9zaXplID09IHN0cmxlbihBTExfTEZfVEVYVF9SQVcpKTsKKworCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgImFsbC1jcmxmIiwgMCkpICE9IE5VTEwpOworCWNsX2Fzc2VydChlbnRyeS0+ZmlsZV9zaXplID09IHN0cmxlbihBTExfQ1JMRl9URVhUX1JBVykpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY3JsZl9fZGV0ZWN0X2NybGZfYXV0b2NybGZfdHJ1ZSh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEU7CisKKwljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCB0cnVlKTsKKworCWdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpOworCisJaWYgKEdJVF9FT0xfTkFUSVZFID09IEdJVF9FT0xfTEYpCisJCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9hbGwtbGYiLCBBTExfTEZfVEVYVF9SQVcpOworCWVsc2UKKwkJY2hlY2tfZmlsZV9jb250ZW50cygiLi9jcmxmL2FsbC1sZiIsIEFMTF9MRl9URVhUX0FTX0NSTEYpOworCisJY2hlY2tfZmlsZV9jb250ZW50cygiLi9jcmxmL2FsbC1jcmxmIiwgQUxMX0NSTEZfVEVYVF9SQVcpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY3JsZl9fbW9yZV9sZl9hdXRvY3JsZl90cnVlKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIHRydWUpOworCisJZ2l0X2NoZWNrb3V0X2hlYWQoZ19yZXBvLCAmb3B0cyk7CisKKwlpZiAoR0lUX0VPTF9OQVRJVkUgPT0gR0lUX0VPTF9MRikKKwkJY2hlY2tfZmlsZV9jb250ZW50cygiLi9jcmxmL21vcmUtbGYiLCBNT1JFX0xGX1RFWFRfUkFXKTsKKwllbHNlCisJCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9tb3JlLWxmIiwgTU9SRV9MRl9URVhUX0FTX0NSTEYpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfY3JsZl9fbW9yZV9jcmxmX2F1dG9jcmxmX3RydWUodm9pZCkKK3sKKwlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkVfQ1JFQVRFOworCisJY2xfcmVwb19zZXRfYm9vbChnX3JlcG8sICJjb3JlLmF1dG9jcmxmIiwgdHJ1ZSk7CisKKwlnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKTsKKworCWlmIChHSVRfRU9MX05BVElWRSA9PSBHSVRfRU9MX0xGKQorCQljaGVja19maWxlX2NvbnRlbnRzKCIuL2NybGYvbW9yZS1jcmxmIiwgTU9SRV9DUkxGX1RFWFRfUkFXKTsKKwllbHNlCisJCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9tb3JlLWNybGYiLCBNT1JFX0NSTEZfVEVYVF9BU19DUkxGKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX2FsbF9jcmxmX2F1dG9jcmxmX3RydWUodm9pZCkKK3sKKwlnaXRfY2hlY2tvdXRfb3B0cyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkVfQ1JFQVRFOworCisJY2xfcmVwb19zZXRfYm9vbChnX3JlcG8sICJjb3JlLmF1dG9jcmxmIiwgdHJ1ZSk7CisKKwlnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKTsKKworCWNoZWNrX2ZpbGVfY29udGVudHMoIi4vY3JsZi9hbGwtY3JsZiIsIEFMTF9DUkxGX1RFWFRfUkFXKTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX2F1dG9jcmxmX3RydWVfaW5kZXhfc2l6ZV9pc19maWx0ZXJlZF9zaXplKHZvaWQpCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEU7CisKKwljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCB0cnVlKTsKKworCWdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpOworCisJZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pOworCisJY2xfYXNzZXJ0KChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCAiYWxsLWxmIiwgMCkpICE9IE5VTEwpOworCisJaWYgKEdJVF9FT0xfTkFUSVZFID09IEdJVF9FT0xfTEYpCisJCWNsX2Fzc2VydF9lcXVhbF9zeihzdHJsZW4oQUxMX0xGX1RFWFRfUkFXKSwgZW50cnktPmZpbGVfc2l6ZSk7CisJZWxzZQorCQljbF9hc3NlcnRfZXF1YWxfc3ooc3RybGVuKEFMTF9MRl9URVhUX0FTX0NSTEYpLCBlbnRyeS0+ZmlsZV9zaXplKTsKKworCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgImFsbC1jcmxmIiwgMCkpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zeihzdHJsZW4oQUxMX0NSTEZfVEVYVF9SQVcpLCBlbnRyeS0+ZmlsZV9zaXplKTsKKworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2NybGZfX3dpdGhfaWRlbnQodm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF9ibG9iICpibG9iOworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRV9DUkVBVEU7CisKKwljbF9naXRfbWtmaWxlKCJjcmxmLy5naXRhdHRyaWJ1dGVzIiwKKwkJIioudHh0IHRleHRcbiouYmluIGJpbmFyeVxuIgorCQkiKi5jcmxmIHRleHQgZW9sPWNybGZcbiIKKwkJIioubGYgdGV4dCBlb2w9bGZcbiIKKwkJIiouaWRlbnQgdGV4dCBpZGVudFxuIgorCQkiKi5pZGVudGNybGYgaWRlbnQgdGV4dCBlb2w9Y3JsZlxuIgorCQkiKi5pZGVudGxmIGlkZW50IHRleHQgZW9sPWxmXG4iKTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIHRydWUpOworCisJLyogYWRkIGZpbGVzIHdpdGggJElkJCAqLworCisJY2xfZ2l0X21rZmlsZSgiY3JsZi9sZi5pZGVudCIsIEFMTF9MRl9URVhUX1JBVyAiXG4kSWQ6IGluaXRpYWwgY29udGVudCRcbiIpOworCWNsX2dpdF9ta2ZpbGUoImNybGYvY3JsZi5pZGVudCIsIEFMTF9DUkxGX1RFWFRfUkFXICJcclxuJElkJFxyXG5cclxuIik7CisJY2xfZ2l0X21rZmlsZSgiY3JsZi9tb3JlMS5pZGVudGxmIiwgIiRJZCRcbiIgTU9SRV9MRl9URVhUX1JBVyk7CisJY2xfZ2l0X21rZmlsZSgiY3JsZi9tb3JlMi5pZGVudGNybGYiLCAiXHJcbiRJZDogDCRcclxuIiBNT1JFX0NSTEZfVEVYVF9SQVcpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgImxmLmlkZW50IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAiY3JsZi5pZGVudCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgIm1vcmUxLmlkZW50bGYiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJtb3JlMi5pZGVudGNybGYiKSk7CisJY2xfcmVwb19jb21taXRfZnJvbV9pbmRleChOVUxMLCBnX3JlcG8sIE5VTEwsIDAsICJTb21lIGlkZW50IGZpbGVzXG4iKTsKKworCWdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpOworCisJLyogY2hlY2sgdGhhdCBibG9icyBoYXZlICRJZCQgKi8KKworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZ19yZXBvLAorCQkmIGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCAibGYuaWRlbnQiLCAwKS0+b2lkKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoCisJCUFMTF9MRl9URVhUX1JBVyAiXG4kSWQkXG4iLCBnaXRfYmxvYl9yYXdjb250ZW50KGJsb2IpKTsKKwlnaXRfYmxvYl9mcmVlKGJsb2IpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfbG9va3VwKCZibG9iLCBnX3JlcG8sCisJCSYgZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJtb3JlMi5pZGVudGNybGYiLCAwKS0+b2lkKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoCisJCSJcbiRJZCRcbiIgTU9SRV9DUkxGX1RFWFRfQVNfTEYsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYikpOworCWdpdF9ibG9iX2ZyZWUoYmxvYik7CisKKwkvKiBjaGVjayB0aGF0IGZpbGVzeXN0ZW0gaXMgaW5pdGlhbGx5IHVudG91Y2hlZCAtIG1hdGNoaW5nIGNvcmUgR2l0ICovCisKKwljbF9hc3NlcnRfZXF1YWxfZmlsZSgKKwkJQUxMX0xGX1RFWFRfUkFXICJcbiRJZDogaW5pdGlhbCBjb250ZW50JFxuIiwgMCwgImNybGYvbGYuaWRlbnQiKTsKKworCS8qIGNoZWNrIHRoYXQgZm9yY2VkIGNoZWNrb3V0IHJld3JpdGVzIGNvcnJlY3RseSAqLworCisJcF91bmxpbmsoImNybGYvbGYuaWRlbnQiKTsKKwlwX3VubGluaygiY3JsZi9jcmxmLmlkZW50Iik7CisJcF91bmxpbmsoImNybGYvbW9yZTEuaWRlbnRsZiIpOworCXBfdW5saW5rKCJjcmxmL21vcmUyLmlkZW50Y3JsZiIpOworCisJZ2l0X2NoZWNrb3V0X2hlYWQoZ19yZXBvLCAmb3B0cyk7CisKKwlpZiAoR0lUX0VPTF9OQVRJVkUgPT0gR0lUX0VPTF9MRikgeworCQljbF9hc3NlcnRfZXF1YWxfZmlsZSgKKwkJCUFMTF9MRl9URVhUX1JBVworCQkJIlxuJElkOiBmY2Y2ZDRkOWMyMTJkYzY2NTYzYjExNzFiMWNkOTk5NTNjNzU2NDY3JFxuIiwKKwkJCTAsICJjcmxmL2xmLmlkZW50Iik7CisJCWNsX2Fzc2VydF9lcXVhbF9maWxlKAorCQkJQUxMX0NSTEZfVEVYVF9BU19MRgorCQkJIlxuJElkOiBmMmM2NmFkOWIyYjVhNzM0ZDliZjAwZDUwMDBjYzEwYTYyYjhhODU3JFxuXG4iLAorCQkJMCwgImNybGYvY3JsZi5pZGVudCIpOworCX0gZWxzZSB7CisJCWNsX2Fzc2VydF9lcXVhbF9maWxlKAorCQkJQUxMX0xGX1RFWFRfQVNfQ1JMRgorCQkJIlxyXG4kSWQ6IGZjZjZkNGQ5YzIxMmRjNjY1NjNiMTE3MWIxY2Q5OTk1M2M3NTY0NjckXHJcbiIsCisJCQkwLCAiY3JsZi9sZi5pZGVudCIpOworCQljbF9hc3NlcnRfZXF1YWxfZmlsZSgKKwkJCUFMTF9DUkxGX1RFWFRfUkFXCisJCQkiXHJcbiRJZDogZjJjNjZhZDliMmI1YTczNGQ5YmYwMGQ1MDAwY2MxMGE2MmI4YTg1NyRcclxuXHJcbiIsCisJCQkwLCAiY3JsZi9jcmxmLmlkZW50Iik7CisJfQorCisJY2xfYXNzZXJ0X2VxdWFsX2ZpbGUoCisJCSIkSWQ6IGY3ODMwMzgyZGFjMWYxNTgzNDIyYmU1NTMwZmRmYmQyNjI4OTQzMWIkXG4iCisJCU1PUkVfTEZfVEVYVF9BU19MRiwgMCwgImNybGYvbW9yZTEuaWRlbnRsZiIpOworCisJY2xfYXNzZXJ0X2VxdWFsX2ZpbGUoCisJCSJcclxuJElkOiA3NDY3N2E2ODQxMzAxMmNlOGQ3ZTdjZmMzZjEyNjAzZGYzYTNlYWM0JFxyXG4iCisJCU1PUkVfQ1JMRl9URVhUX0FTX0NSTEYsIDAsICJjcmxmL21vcmUyLmlkZW50Y3JsZiIpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jaGVja291dC9oZWFkLmMgYi90ZXN0cy9jaGVja291dC9oZWFkLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jaGVja291dC9oZWFkLmMKcmVuYW1lIHRvIHRlc3RzL2NoZWNrb3V0L2hlYWQuYwppbmRleCA0NjY0NmY4Li5hN2E3ZTkwIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2NoZWNrb3V0L2hlYWQuYworKysgYi90ZXN0cy9jaGVja291dC9oZWFkLmMKQEAgLTE2LDExICsxNiwxMSBAQAogCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKIH0KIAotdm9pZCB0ZXN0X2NoZWNrb3V0X2hlYWRfX29ycGhhbmVkX2hlYWRfcmV0dXJuc19HSVRfRU9SUEhBTkVESEVBRCh2b2lkKQordm9pZCB0ZXN0X2NoZWNrb3V0X2hlYWRfX3VuYm9ybl9oZWFkX3JldHVybnNfR0lUX0VVTkJPUk5CUkFOQ0godm9pZCkKIHsKLQltYWtlX2hlYWRfb3JwaGFuZWQoZ19yZXBvLCBOT05fRVhJU1RJTkdfSEVBRCk7CisJbWFrZV9oZWFkX3VuYm9ybihnX3JlcG8sIE5PTl9FWElTVElOR19IRUFEKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FT1JQSEFORURIRUFELCBnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sIE5VTEwpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRVVOQk9STkJSQU5DSCwgZ2l0X2NoZWNrb3V0X2hlYWQoZ19yZXBvLCBOVUxMKSk7CiB9CiAKIHZvaWQgdGVzdF9jaGVja291dF9oZWFkX193aXRoX2luZGV4X29ubHlfdHJlZSh2b2lkKQpAQCAtNTQsNyArNTQsNiBAQAogCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgpKTsgLyogcmVsb2FkIGlmIG5lZWRlZCAqLwogCiAJY2xfYXNzZXJ0KCFnaXRfcGF0aF9pc2ZpbGUoInRlc3RyZXBvL25ld2Rpci9uZXdmaWxlLnR4dCIpKTsKIAljbF9hc3NlcnQoZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJuZXdkaXIvbmV3ZmlsZS50eHQiLCAwKSA9PSBOVUxMKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY2hlY2tvdXQvaW5kZXguYyBiL3Rlc3RzL2NoZWNrb3V0L2luZGV4LmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jaGVja291dC9pbmRleC5jCnJlbmFtZSB0byB0ZXN0cy9jaGVja291dC9pbmRleC5jCmluZGV4IDlkOGIzMjEuLjQ4ZDZkNzkgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY2hlY2tvdXQvaW5kZXguYworKysgYi90ZXN0cy9jaGVja291dC9pbmRleC5jCkBAIC0yMjQsMTEgKzIyNCwxNCBAQAogCiB2b2lkIHRlc3RfY2hlY2tvdXRfaW5kZXhfX29wdGlvbnNfZGlyX21vZGVzKHZvaWQpCiB7Ci0jaWZuZGVmIEdJVF9XSU4zMgogCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOwogCXN0cnVjdCBzdGF0IHN0OwogCWdpdF9vaWQgb2lkOwogCWdpdF9jb21taXQgKmNvbW1pdDsKKwltb2RlX3QgdW07CisKKwlpZiAoIWNsX2lzX2NobW9kX3N1cHBvcnRlZCgpKQorCQlyZXR1cm47CiAKIAljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJm9pZCwgZ19yZXBvLCAicmVmcy9oZWFkcy9kaXIiKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF9sb29rdXAoJmNvbW1pdCwgZ19yZXBvLCAmb2lkKSk7CkBAIC0yNDAsMzEgKzI0MywzNCBAQAogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2luZGV4KGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKIAorCS8qIHVtYXNrIHdpbGwgaW5mbHVlbmNlIGFjdHVhbCBkaXJlY3RvcnkgY3JlYXRpb24gbW9kZSAqLworCSh2b2lkKXBfdW1hc2sodW0gPSBwX3VtYXNrKDAyMikpOworCiAJY2xfZ2l0X3Bhc3MocF9zdGF0KCIuL3Rlc3RyZXBvL2EiLCAmc3QpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShzdC5zdF9tb2RlICYgMDc3NywgMDcwMSk7CisJY2xfYXNzZXJ0X2VxdWFsX2lfZm10KHN0LnN0X21vZGUsIChHSVRfRklMRU1PREVfVFJFRSB8IDA3MDEpICYgfnVtLCAiJTA3byIpOwogCiAJLyogRmlsZS1tb2RlIHRlc3QsIHNpbmNlIHdlJ3JlIG9uIHRoZSAnZGlyJyBicmFuY2ggKi8KIAljbF9naXRfcGFzcyhwX3N0YXQoIi4vdGVzdHJlcG8vYS9iLnR4dCIsICZzdCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKHN0LnN0X21vZGUgJiAwNzc3LCAwNzU1KTsKKwljbF9hc3NlcnRfZXF1YWxfaV9mbXQoc3Quc3RfbW9kZSwgR0lUX0ZJTEVNT0RFX0JMT0JfRVhFQ1VUQUJMRSwgIiUwN28iKTsKIAogCWdpdF9jb21taXRfZnJlZShjb21taXQpOwotI2VuZGlmCiB9CiAKIHZvaWQgdGVzdF9jaGVja291dF9pbmRleF9fb3B0aW9uc19vdmVycmlkZV9maWxlX21vZGVzKHZvaWQpCiB7Ci0jaWZuZGVmIEdJVF9XSU4zMgogCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOwogCXN0cnVjdCBzdGF0IHN0OwogCisJaWYgKCFjbF9pc19jaG1vZF9zdXBwb3J0ZWQoKSkKKwkJcmV0dXJuOworCiAJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKIAlvcHRzLmZpbGVfbW9kZSA9IDA3MDA7CiAKIAljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfaW5kZXgoZ19yZXBvLCBOVUxMLCAmb3B0cykpOwogCiAJY2xfZ2l0X3Bhc3MocF9zdGF0KCIuL3Rlc3RyZXBvL25ldy50eHQiLCAmc3QpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShzdC5zdF9tb2RlICYgMDc3NywgMDcwMCk7Ci0jZW5kaWYKKwljbF9hc3NlcnRfZXF1YWxfaV9mbXQoc3Quc3RfbW9kZSAmIEdJVF9NT0RFX1BFUk1TX01BU0ssIDA3MDAsICIlMDdvIik7CiB9CiAKIHZvaWQgdGVzdF9jaGVja291dF9pbmRleF9fb3B0aW9uc19vcGVuX2ZsYWdzKHZvaWQpCkBAIC01ODcsNiArNTkzLDggQEAKIAogCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfcm1kaXJfcigKIAkJImFsdGVybmF0aXZlIiwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpOworCisJZ2l0X29iamVjdF9mcmVlKGhlYWQpOwogfQogCiB2b2lkIHRlc3RfY2hlY2tvdXRfaW5kZXhfX2Nhbl9nZXRfcmVwb19mcm9tX2luZGV4KHZvaWQpCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NoZWNrb3V0L3RyZWUuYyBiL3Rlc3RzL2NoZWNrb3V0L3RyZWUuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NoZWNrb3V0L3RyZWUuYwpyZW5hbWUgdG8gdGVzdHMvY2hlY2tvdXQvdHJlZS5jCmluZGV4IGU0YmZiY2UuLjY2YjAxYmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY2hlY2tvdXQvdHJlZS5jCisrKyBiL3Rlc3RzL2NoZWNrb3V0L3RyZWUuYwpAQCAtNjc3LDMgKzY3Nyw2NiBAQAogCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfcm1kaXJfcigKIAkJImFsdGVybmF0aXZlIiwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpOwogfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfdHJlZV9fZXh0cmVtZWx5X2xvbmdfZmlsZV9uYW1lKHZvaWQpCit7CisJLy8gQSB1dGYtOCBzdHJpbmcgd2l0aCA4MyBjaGFyYWN0ZXJzLCBidXQgMjQ5IGJ5dGVzLgorCWNvbnN0IGNoYXIgKmxvbmduYW1lID0gIlx4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5NyI7CisJY2hhciBwYXRoWzEwMjRdOworCisJZ19vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJmdfb2JqZWN0LCBnX3JlcG8sICJsb25nLWZpbGUtbmFtZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfdHJlZShnX3JlcG8sIGdfb2JqZWN0LCAmZ19vcHRzKSk7CisKKwlzcHJpbnRmKHBhdGgsICJ0ZXN0cmVwby8lcy50eHQiLCBsb25nbmFtZSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cyhwYXRoKSk7CisKKwlnaXRfb2JqZWN0X2ZyZWUoZ19vYmplY3QpOworCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJmdfb2JqZWN0LCBnX3JlcG8sICJtYXN0ZXIiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X3RyZWUoZ19yZXBvLCBnX29iamVjdCwgJmdfb3B0cykpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKHBhdGgpKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2NvbmZsaWN0KHZvaWQpCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfaW5kZXhfZW50cnkgZW50cnk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJbWVtc2V0KCZlbnRyeSwgMHgwLCBzaXplb2YoZ2l0X2luZGV4X2VudHJ5KSk7CisJZW50cnkubW9kZSA9IDAxMDA2NDQ7CisJZW50cnkuZmxhZ3MgPSAxIDw8IEdJVF9JRFhFTlRSWV9TVEFHRVNISUZUOworCWdpdF9vaWRfZnJvbXN0cigmZW50cnkub2lkLCAiZDQyN2UwYjJlMTM4NTAxYTNkMTVjYzM3NjA3N2EzNjMxZTE1YmQ0NiIpOworCWVudHJ5LnBhdGggPSAiY29uZmxpY3RzLnR4dCI7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZChpbmRleCwgJmVudHJ5KSk7CisKKwllbnRyeS5mbGFncyA9IDIgPDwgR0lUX0lEWEVOVFJZX1NUQUdFU0hJRlQ7CisJZ2l0X29pZF9mcm9tc3RyKCZlbnRyeS5vaWQsICJlZTNmYTFiOGMwMGFmZjdmZTAyMDY1ZmRiNTA4NjRiYjBkOTMyY2NmIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZChpbmRleCwgJmVudHJ5KSk7CisKKwllbnRyeS5mbGFncyA9IDMgPDwgR0lUX0lEWEVOVFJZX1NUQUdFU0hJRlQ7CisJZ2l0X29pZF9mcm9tc3RyKCZlbnRyeS5vaWQsICIyYmQwYTM0M2FlZWY3YTJjZjBkMTU4NDc4OTY2YTZlNTg3ZmYzODYzIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZChpbmRleCwgJmVudHJ5KSk7CisKKwlnaXRfaW5kZXhfd3JpdGUoaW5kZXgpOworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KKwordm9pZCB0ZXN0X2NoZWNrb3V0X3RyZWVfX2ZhaWxzX3doZW5fY29uZmxpY3RzX2V4aXN0X2luX2luZGV4KHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisJZ2l0X29pZCBvaWQ7CisJZ2l0X29iamVjdCAqb2JqID0gTlVMTDsKKworCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbmFtZV90b19pZCgmb2lkLCBnX3JlcG8sICJIRUFEIikpOworCWNsX2dpdF9wYXNzKGdpdF9vYmplY3RfbG9va3VwKCZvYmosIGdfcmVwbywgJm9pZCwgR0lUX09CSl9BTlkpKTsKKworCWNyZWF0ZV9jb25mbGljdCgpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X2NoZWNrb3V0X3RyZWUoZ19yZXBvLCBvYmosICZvcHRzKSk7CisKKwlnaXRfb2JqZWN0X2ZyZWUob2JqKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY2hlY2tvdXQvdHlwZWNoYW5nZS5jIGIvdGVzdHMvY2hlY2tvdXQvdHlwZWNoYW5nZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NoZWNrb3V0L3R5cGVjaGFuZ2UuYwpyZW5hbWUgdG8gdGVzdHMvY2hlY2tvdXQvdHlwZWNoYW5nZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NsYXIuYyBiL3Rlc3RzL2NsYXIuYwpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NsYXIuYwpyZW5hbWUgdG8gdGVzdHMvY2xhci5jCmluZGV4IGZiMTBkZDMuLjZjNzM5OWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY2xhci5jCisrKyBiL3Rlc3RzL2NsYXIuYwpAQCAtMjQsMjggKzI0LDU5IEBACiAKICMJZGVmaW5lIF9NQUlOX0NDIF9fY2RlY2wKIAotIwlkZWZpbmUgc3RhdChwYXRoLCBzdCkgX3N0YXQocGF0aCwgc3QpCi0jCWRlZmluZSBta2RpcihwYXRoLCBtb2RlKSBfbWtkaXIocGF0aCkKLSMJZGVmaW5lIGNoZGlyKHBhdGgpIF9jaGRpcihwYXRoKQotIwlkZWZpbmUgYWNjZXNzKHBhdGgsIG1vZGUpIF9hY2Nlc3MocGF0aCwgbW9kZSkKLSMJZGVmaW5lIHN0cmR1cChzdHIpIF9zdHJkdXAoc3RyKQotIwlkZWZpbmUgc3RyY2FzZWNtcChhLGIpIF9zdHJpY21wKGEsYikKKyMJaWZuZGVmIHN0YXQKKyMJCWRlZmluZSBzdGF0KHBhdGgsIHN0KSBfc3RhdChwYXRoLCBzdCkKKyMJZW5kaWYKKyMJaWZuZGVmIG1rZGlyCisjCQlkZWZpbmUgbWtkaXIocGF0aCwgbW9kZSkgX21rZGlyKHBhdGgpCisjCWVuZGlmCisjCWlmbmRlZiBjaGRpcgorIwkJZGVmaW5lIGNoZGlyKHBhdGgpIF9jaGRpcihwYXRoKQorIwllbmRpZgorIwlpZm5kZWYgYWNjZXNzCisjCQlkZWZpbmUgYWNjZXNzKHBhdGgsIG1vZGUpIF9hY2Nlc3MocGF0aCwgbW9kZSkKKyMJZW5kaWYKKyMJaWZuZGVmIHN0cmR1cAorIwkJZGVmaW5lIHN0cmR1cChzdHIpIF9zdHJkdXAoc3RyKQorIwllbmRpZgorIwlpZm5kZWYgc3RyY2FzZWNtcAorIwkJZGVmaW5lIHN0cmNhc2VjbXAoYSxiKSBfc3RyaWNtcChhLGIpCisjCWVuZGlmCiAKICMJaWZuZGVmIF9fTUlOR1czMl9fCiAjCQlwcmFnbWEgY29tbWVudChsaWIsICJzaGVsbDMyIikKLSMJCWRlZmluZSBzdHJuY3B5KHRvLCBmcm9tLCB0b19zaXplKSBzdHJuY3B5X3ModG8sIHRvX3NpemUsIGZyb20sIF9UUlVOQ0FURSkKLSMJCWRlZmluZSBXX09LIDAyCi0jCQlkZWZpbmUgU19JU0RJUih4KSAoKHggJiBfU19JRkRJUikgIT0gMCkKLSMJCWRlZmluZSBzbnByaW50X2VxKGJ1ZixzeixmbXQsYSxiKSBfc25wcmludGZfcyhidWYsc3osX1RSVU5DQVRFLGZtdCxhLGIpCisjCQlpZm5kZWYgc3RybmNweQorIwkJCWRlZmluZSBzdHJuY3B5KHRvLCBmcm9tLCB0b19zaXplKSBzdHJuY3B5X3ModG8sIHRvX3NpemUsIGZyb20sIF9UUlVOQ0FURSkKKyMJCWVuZGlmCisjCQlpZm5kZWYgV19PSworIwkJCWRlZmluZSBXX09LIDAyCisjCQllbmRpZgorIwkJaWZuZGVmIFNfSVNESVIKKyMJCQlkZWZpbmUgU19JU0RJUih4KSAoKHggJiBfU19JRkRJUikgIT0gMCkKKyMJCWVuZGlmCisjCQlkZWZpbmUgcF9zbnByaW50ZihidWYsc3osZm10LC4uLikgX3NucHJpbnRmX3MoYnVmLHN6LF9UUlVOQ0FURSxmbXQsX19WQV9BUkdTX18pCiAjCWVsc2UKLSMJCWRlZmluZSBzbnByaW50X2VxIHNucHJpbnRmCisjCQlkZWZpbmUgcF9zbnByaW50ZiBzbnByaW50ZgorIwllbmRpZgorCisjCWlmbmRlZiBQUkl1WgorIwkJZGVmaW5lIFBSSXVaICJJdSIKKyMJZW5kaWYKKyMJaWZuZGVmIFBSSXhaCisjCQlkZWZpbmUgUFJJeFogIkl4IgogIwllbmRpZgogCXR5cGVkZWYgc3RydWN0IF9zdGF0IFNUQVRfVDsKICNlbHNlCiAjCWluY2x1ZGUgPHN5cy93YWl0Lmg+IC8qIHdhaXRwaWQoMikgKi8KICMJaW5jbHVkZSA8dW5pc3RkLmg+CiAjCWRlZmluZSBfTUFJTl9DQwotIwlkZWZpbmUgc25wcmludF9lcSBzbnByaW50ZgorIwlkZWZpbmUgcF9zbnByaW50ZiBzbnByaW50ZgorIwlpZm5kZWYgUFJJdVoKKyMJCWRlZmluZSBQUkl1WiAienUiCisjCWVuZGlmCisjCWlmbmRlZiBQUkl4WgorIwkJZGVmaW5lIFBSSXhaICJ6eCIKKyMJZW5kaWYKIAl0eXBlZGVmIHN0cnVjdCBzdGF0IFNUQVRfVDsKICNlbmRpZgogCkBAIC00MDYsNDUgKzQzNyw2NiBAQAogCWNsYXJfX2ZhaWwoZmlsZSwgbGluZSwgZXJyb3JfbXNnLCBkZXNjcmlwdGlvbiwgc2hvdWxkX2Fib3J0KTsKIH0KIAotdm9pZCBjbGFyX19hc3NlcnRfZXF1YWxfcygKLQljb25zdCBjaGFyICpzMSwKLQljb25zdCBjaGFyICpzMiwKK3ZvaWQgY2xhcl9fYXNzZXJ0X2VxdWFsKAogCWNvbnN0IGNoYXIgKmZpbGUsCiAJaW50IGxpbmUsCiAJY29uc3QgY2hhciAqZXJyLAotCWludCBzaG91bGRfYWJvcnQpCisJaW50IHNob3VsZF9hYm9ydCwKKwljb25zdCBjaGFyICpmbXQsCisJLi4uKQogewotCWludCBtYXRjaCA9IChzMSA9PSBOVUxMIHx8IHMyID09IE5VTEwpID8gKHMxID09IHMyKSA6IChzdHJjbXAoczEsIHMyKSA9PSAwKTsKKwl2YV9saXN0IGFyZ3M7CisJY2hhciBidWZbNDA5Nl07CisJaW50IGlzX2VxdWFsID0gMTsKIAotCWlmICghbWF0Y2gpIHsKLQkJY2hhciBidWZbNDA5Nl07CisJdmFfc3RhcnQoYXJncywgZm10KTsKIAotCQlpZiAoczEgJiYgczIpIHsKLQkJCWludCBwb3M7Ci0JCQlmb3IgKHBvcyA9IDA7IHMxW3Bvc10gPT0gczJbcG9zXSAmJiBzMVtwb3NdICYmIHMyW3Bvc107ICsrcG9zKQotCQkJCS8qIGZpbmQgZGlmZmVyaW5nIGJ5dGUgb2Zmc2V0ICovOwotCQkJc25wcmludF9lcShidWYsIHNpemVvZihidWYpLCAiJyVzJyAhPSAnJXMnIChhdCBieXRlICVkKSIsIHMxLCBzMiwgcG9zKTsKLQkJfSBlbHNlIHsKLQkJCXNucHJpbnRfZXEoYnVmLCBzaXplb2YoYnVmKSwgIiclcycgIT0gJyVzJyIsIHMxLCBzMik7CisJaWYgKCFzdHJjbXAoIiVzIiwgZm10KSkgeworCQljb25zdCBjaGFyICpzMSA9IHZhX2FyZyhhcmdzLCBjb25zdCBjaGFyICopOworCQljb25zdCBjaGFyICpzMiA9IHZhX2FyZyhhcmdzLCBjb25zdCBjaGFyICopOworCQlpc19lcXVhbCA9ICghczEgfHwgIXMyKSA/IChzMSA9PSBzMikgOiAhc3RyY21wKHMxLCBzMik7CisKKwkJaWYgKCFpc19lcXVhbCkgeworCQkJaWYgKHMxICYmIHMyKSB7CisJCQkJaW50IHBvczsKKwkJCQlmb3IgKHBvcyA9IDA7IHMxW3Bvc10gPT0gczJbcG9zXSAmJiBzMVtwb3NdICYmIHMyW3Bvc107ICsrcG9zKQorCQkJCQkvKiBmaW5kIGRpZmZlcmluZyBieXRlIG9mZnNldCAqLzsKKwkJCQlwX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICInJXMnICE9ICclcycgKGF0IGJ5dGUgJWQpIiwKKwkJCQkJczEsIHMyLCBwb3MpOworCQkJfSBlbHNlIHsKKwkJCQlwX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICInJXMnICE9ICclcyciLCBzMSwgczIpOworCQkJfQogCQl9Ci0KLQkJY2xhcl9fZmFpbChmaWxlLCBsaW5lLCBlcnIsIGJ1Ziwgc2hvdWxkX2Fib3J0KTsKIAl9Ci19Ci0KLXZvaWQgY2xhcl9fYXNzZXJ0X2VxdWFsX2koCi0JaW50IGkxLAotCWludCBpMiwKLQljb25zdCBjaGFyICpmaWxlLAotCWludCBsaW5lLAotCWNvbnN0IGNoYXIgKmVyciwKLQlpbnQgc2hvdWxkX2Fib3J0KQotewotCWlmIChpMSAhPSBpMikgewotCQljaGFyIGJ1ZlsxMjhdOwotCQlzbnByaW50X2VxKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCAhPSAlZCIsIGkxLCBpMik7Ci0JCWNsYXJfX2ZhaWwoZmlsZSwgbGluZSwgZXJyLCBidWYsIHNob3VsZF9hYm9ydCk7CisJZWxzZSBpZiAoIXN0cmNtcCgiJSJQUkl1WiwgZm10KSB8fCAhc3RyY21wKCIlIlBSSXhaLCBmbXQpKSB7CisJCXNpemVfdCBzejEgPSB2YV9hcmcoYXJncywgc2l6ZV90KSwgc3oyID0gdmFfYXJnKGFyZ3MsIHNpemVfdCk7CisJCWlzX2VxdWFsID0gKHN6MSA9PSBzejIpOworCQlpZiAoIWlzX2VxdWFsKSB7CisJCQlpbnQgb2Zmc2V0ID0gcF9zbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIHN6MSk7CisJCQlzdHJuY2F0KGJ1ZiwgIiAhPSAiLCBzaXplb2YoYnVmKSAtIG9mZnNldCk7CisJCQlwX3NucHJpbnRmKGJ1ZiArIG9mZnNldCArIDQsIHNpemVvZihidWYpIC0gb2Zmc2V0IC0gNCwgZm10LCBzejIpOworCQl9CiAJfQorCWVsc2UgaWYgKCFzdHJjbXAoIiVwIiwgZm10KSkgeworCQl2b2lkICpwMSA9IHZhX2FyZyhhcmdzLCB2b2lkICopLCAqcDIgPSB2YV9hcmcoYXJncywgdm9pZCAqKTsKKwkJaXNfZXF1YWwgPSAocDEgPT0gcDIpOworCQlpZiAoIWlzX2VxdWFsKQorCQkJcF9zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXAgIT0gJXAiLCBwMSwgcDIpOworCX0KKwllbHNlIHsKKwkJaW50IGkxID0gdmFfYXJnKGFyZ3MsIGludCksIGkyID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCWlzX2VxdWFsID0gKGkxID09IGkyKTsKKwkJaWYgKCFpc19lcXVhbCkgeworCQkJaW50IG9mZnNldCA9IHBfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBpMSk7CisJCQlzdHJuY2F0KGJ1ZiwgIiAhPSAiLCBzaXplb2YoYnVmKSAtIG9mZnNldCk7CisJCQlwX3NucHJpbnRmKGJ1ZiArIG9mZnNldCArIDQsIHNpemVvZihidWYpIC0gb2Zmc2V0IC0gNCwgZm10LCBpMik7CisJCX0KKwl9CisKKwl2YV9lbmQoYXJncyk7CisKKwlpZiAoIWlzX2VxdWFsKQorCQljbGFyX19mYWlsKGZpbGUsIGxpbmUsIGVyciwgYnVmLCBzaG91bGRfYWJvcnQpOwogfQogCiB2b2lkIGNsX3NldF9jbGVhbnVwKHZvaWQgKCpjbGVhbnVwKSh2b2lkICopLCB2b2lkICpvcGFxdWUpCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NsYXIuaCBiL3Rlc3RzL2NsYXIuaApzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NsYXIuaApyZW5hbWUgdG8gdGVzdHMvY2xhci5oCmluZGV4IGQ5MjMxOGIuLmUxZjI0NGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY2xhci5oCisrKyBiL3Rlc3RzL2NsYXIuaApAQCAtNTcsMTUgKzU3LDE3IEBACiAvKioKICAqIFR5cGVkIGFzc2VydGlvbiBtYWNyb3MKICAqLwotI2RlZmluZSBjbF9hc3NlcnRfZXF1YWxfcyhzMSxzMikgY2xhcl9fYXNzZXJ0X2VxdWFsX3MoKHMxKSwoczIpLF9fRklMRV9fLF9fTElORV9fLCJTdHJpbmcgbWlzbWF0Y2g6ICIgI3MxICIgIT0gIiAjczIsIDEpCi0jZGVmaW5lIGNsX2Fzc2VydF9lcXVhbF9zXyhzMSxzMixub3RlKSBjbGFyX19hc3NlcnRfZXF1YWxfcygoczEpLChzMiksX19GSUxFX18sX19MSU5FX18sIlN0cmluZyBtaXNtYXRjaDogIiAjczEgIiAhPSAiICNzMiAiICgiICNub3RlICIpIiwgMSkKKyNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX3MoczEsczIpIGNsYXJfX2Fzc2VydF9lcXVhbChfX0ZJTEVfXyxfX0xJTkVfXywiU3RyaW5nIG1pc21hdGNoOiAiICNzMSAiICE9ICIgI3MyLCAxLCAiJXMiLCAoczEpLCAoczIpKQorI2RlZmluZSBjbF9hc3NlcnRfZXF1YWxfc18oczEsczIsbm90ZSkgY2xhcl9fYXNzZXJ0X2VxdWFsKF9fRklMRV9fLF9fTElORV9fLCJTdHJpbmcgbWlzbWF0Y2g6ICIgI3MxICIgIT0gIiAjczIgIiAoIiAjbm90ZSAiKSIsIDEsICIlcyIsIChzMSksIChzMikpCiAKLSNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX2koaTEsaTIpIGNsYXJfX2Fzc2VydF9lcXVhbF9pKChpMSksKGkyKSxfX0ZJTEVfXyxfX0xJTkVfXywjaTEgIiAhPSAiICNpMiwgMSkKLSNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX2lfKGkxLGkyLG5vdGUpIGNsYXJfX2Fzc2VydF9lcXVhbF9pKChpMSksKGkyKSxfX0ZJTEVfXyxfX0xJTkVfXywjaTEgIiAhPSAiICNpMiAiICgiICNub3RlICIpIiwgMSkKKyNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX2koaTEsaTIpIGNsYXJfX2Fzc2VydF9lcXVhbChfX0ZJTEVfXyxfX0xJTkVfXywjaTEgIiAhPSAiICNpMiwgMSwgIiVkIiwgKGludCkoaTEpLCAoaW50KShpMikpCisjZGVmaW5lIGNsX2Fzc2VydF9lcXVhbF9pXyhpMSxpMixub3RlKSBjbGFyX19hc3NlcnRfZXF1YWwoX19GSUxFX18sX19MSU5FX18sI2kxICIgIT0gIiAjaTIgIiAoIiAjbm90ZSAiKSIsIDEsICIlZCIsIChpMSksIChpMikpCisjZGVmaW5lIGNsX2Fzc2VydF9lcXVhbF9pX2ZtdChpMSxpMixmbXQpIGNsYXJfX2Fzc2VydF9lcXVhbChfX0ZJTEVfXyxfX0xJTkVfXywjaTEgIiAhPSAiICNpMiwgMSwgKGZtdCksIChpbnQpKGkxKSwgKGludCkoaTIpKQogCi0jZGVmaW5lIGNsX2Fzc2VydF9lcXVhbF9iKGIxLGIyKSBjbGFyX19hc3NlcnRfZXF1YWxfaSghIShiMSksISEoYjIpLF9fRklMRV9fLF9fTElORV9fLCNiMSAiICE9ICIgI2IyLCAxKQorI2RlZmluZSBjbF9hc3NlcnRfZXF1YWxfYihiMSxiMikgY2xhcl9fYXNzZXJ0X2VxdWFsKF9fRklMRV9fLF9fTElORV9fLCNiMSAiICE9ICIgI2IyLCAxLCAiJWQiLCAoaW50KSgoYjEpICE9IDApLChpbnQpKChiMikgIT0gMCkpCiAKLSNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX3AocDEscDIpIGNsX2Fzc2VydCgocDEpID09IChwMikpCisjZGVmaW5lIGNsX2Fzc2VydF9lcXVhbF9wKHAxLHAyKSBjbGFyX19hc3NlcnRfZXF1YWwoX19GSUxFX18sX19MSU5FX18sIlBvaW50ZXIgbWlzbWF0Y2g6ICIgI3AxICIgIT0gIiAjcDIsIDEsICIlcCIsIChwMSksIChwMikpCisKIAogdm9pZCBjbGFyX19mYWlsKAogCWNvbnN0IGNoYXIgKmZpbGUsCkBAIC04Miw3ICs4NCwxMiBAQAogCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLAogCWludCBzaG91bGRfYWJvcnQpOwogCi12b2lkIGNsYXJfX2Fzc2VydF9lcXVhbF9zKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICosY29uc3QgY2hhciAqLGludCxjb25zdCBjaGFyICosaW50KTsKLXZvaWQgY2xhcl9fYXNzZXJ0X2VxdWFsX2koaW50LGludCxjb25zdCBjaGFyICosaW50LGNvbnN0IGNoYXIgKixpbnQpOwordm9pZCBjbGFyX19hc3NlcnRfZXF1YWwoCisJY29uc3QgY2hhciAqZmlsZSwKKwlpbnQgbGluZSwKKwljb25zdCBjaGFyICplcnIsCisJaW50IHNob3VsZF9hYm9ydCwKKwljb25zdCBjaGFyICpmbXQsCisJLi4uKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NsYXIvZml4dHVyZXMuaCBiL3Rlc3RzL2NsYXIvZml4dHVyZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jbGFyL2ZpeHR1cmVzLmgKcmVuYW1lIHRvIHRlc3RzL2NsYXIvZml4dHVyZXMuaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jbGFyL2ZzLmggYi90ZXN0cy9jbGFyL2ZzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY2xhci9mcy5oCnJlbmFtZSB0byB0ZXN0cy9jbGFyL2ZzLmgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY2xhci9wcmludC5oIGIvdGVzdHMvY2xhci9wcmludC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NsYXIvcHJpbnQuaApyZW5hbWUgdG8gdGVzdHMvY2xhci9wcmludC5oCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NsYXIvc2FuZGJveC5oIGIvdGVzdHMvY2xhci9zYW5kYm94LmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jbGFyL3NhbmRib3guaApyZW5hbWUgdG8gdGVzdHMvY2xhci9zYW5kYm94LmgKaW5kZXggMWNhNmZjYS4uZWU3NTY0MSAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9jbGFyL3NhbmRib3guaAorKysgYi90ZXN0cy9jbGFyL3NhbmRib3guaApAQCAtNDMsMTAgKzQzLDggQEAKIAl9CiAKICNlbHNlCi0JRFdPUkQgZW52X2xlbjsKLQotCWlmICgoZW52X2xlbiA9IEdldEVudmlyb25tZW50VmFyaWFibGUoIkNMQVJfVE1QIiwgYnVmZmVyLCBsZW5ndGgpKSA+IDAgJiYKLQkJZW52X2xlbiA8IGxlbmd0aCkKKwlEV09SRCBlbnZfbGVuID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiQ0xBUl9UTVAiLCBidWZmZXIsIChEV09SRClsZW5ndGgpOworCWlmIChlbnZfbGVuID4gMCAmJiBlbnZfbGVuIDwgKERXT1JEKWxlbmd0aCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoR2V0VGVtcFBhdGgoKERXT1JEKWxlbmd0aCwgYnVmZmVyKSkKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY2xhcl9saWJnaXQyLmMgYi90ZXN0cy9jbGFyX2xpYmdpdDIuYwpzaW1pbGFyaXR5IGluZGV4IDYxJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NsYXJfbGliZ2l0Mi5jCnJlbmFtZSB0byB0ZXN0cy9jbGFyX2xpYmdpdDIuYwppbmRleCBkZTBlNDFiLi41MDc2MmNkIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2NsYXJfbGliZ2l0Mi5jCisrKyBiL3Rlc3RzL2NsYXJfbGliZ2l0Mi5jCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgogI2luY2x1ZGUgInBvc2l4LmgiCiAjaW5jbHVkZSAicGF0aC5oIgorI2luY2x1ZGUgImdpdDIvc3lzL3JlcG9zaXRvcnkuaCIKIAogdm9pZCBjbF9naXRfcmVwb3J0X2ZhaWx1cmUoCiAJaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm5jYWxsKQpAQCAtMzAsMjQgKzMxLDI2IEBACiB9CiAKIHZvaWQgY2xfZ2l0X3dyaXRlMmZpbGUoCi0JY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19jb250ZW50LCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBtb2RlKQorCWNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmNvbnRlbnQsIHNpemVfdCBjb250ZW50X2xlbiwKKwlpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBtb2RlKQogewotCWludCBmZCA9IHBfb3BlbihmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOwotCWNsX2Fzc2VydChmZCA+PSAwKTsKLQlpZiAoIW5ld19jb250ZW50KQotCQluZXdfY29udGVudCA9ICJcbiI7Ci0JY2xfbXVzdF9wYXNzKHBfd3JpdGUoZmQsIG5ld19jb250ZW50LCBzdHJsZW4obmV3X2NvbnRlbnQpKSk7CisJaW50IGZkOworCWNsX2Fzc2VydChwYXRoICYmIGNvbnRlbnQpOworCWNsX2Fzc2VydCgoZmQgPSBwX29wZW4ocGF0aCwgZmxhZ3MsIG1vZGUpKSA+PSAwKTsKKwlpZiAoIWNvbnRlbnRfbGVuKQorCQljb250ZW50X2xlbiA9IHN0cmxlbihjb250ZW50KTsKKwljbF9tdXN0X3Bhc3MocF93cml0ZShmZCwgY29udGVudCwgY29udGVudF9sZW4pKTsKIAljbF9tdXN0X3Bhc3MocF9jbG9zZShmZCkpOwogfQogCi12b2lkIGNsX2dpdF9hcHBlbmQyZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbmV3X2NvbnRlbnQpCit2b2lkIGNsX2dpdF9hcHBlbmQyZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpjb250ZW50KQogewotCWNsX2dpdF93cml0ZTJmaWxlKGZpbGVuYW1lLCBuZXdfY29udGVudCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19BUFBFTkQsIDA2NDQpOworCWNsX2dpdF93cml0ZTJmaWxlKHBhdGgsIGNvbnRlbnQsIDAsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fQVBQRU5ELCAwNjQ0KTsKIH0KIAotdm9pZCBjbF9naXRfcmV3cml0ZWZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19jb250ZW50KQordm9pZCBjbF9naXRfcmV3cml0ZWZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqY29udGVudCkKIHsKLQljbF9naXRfd3JpdGUyZmlsZShmaWxlbmFtZSwgbmV3X2NvbnRlbnQsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOworCWNsX2dpdF93cml0ZTJmaWxlKHBhdGgsIGNvbnRlbnQsIDAsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOwogfQogCiAjaWZkZWYgR0lUX1dJTjMyCkBAIC01NiwyMyArNTksMjQgQEAKIAogY2hhciAqY2xfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jd2NoYXJfdCBuYW1lX3V0ZjE2W0dJVF9XSU5fUEFUSF07CisJZ2l0X3dpbjMyX3BhdGggbmFtZV91dGYxNjsKIAlEV09SRCBhbGxvY19sZW47CiAJd2NoYXJfdCAqdmFsdWVfdXRmMTY7CiAJY2hhciAqdmFsdWVfdXRmODsKIAotCWdpdF9fdXRmOF90b18xNihuYW1lX3V0ZjE2LCBHSVRfV0lOX1BBVEgsIG5hbWUpOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhuYW1lX3V0ZjE2LCBuYW1lKTsKIAlhbGxvY19sZW4gPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhuYW1lX3V0ZjE2LCBOVUxMLCAwKTsKIAlpZiAoYWxsb2NfbGVuIDw9IDApCiAJCXJldHVybiBOVUxMOwogCi0JYWxsb2NfbGVuID0gR0lUX1dJTl9QQVRIOwogCWNsX2Fzc2VydCh2YWx1ZV91dGYxNiA9IGdpdF9fY2FsbG9jKGFsbG9jX2xlbiwgc2l6ZW9mKHdjaGFyX3QpKSk7CiAKIAlHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhuYW1lX3V0ZjE2LCB2YWx1ZV91dGYxNiwgYWxsb2NfbGVuKTsKIAotCWNsX2Fzc2VydCh2YWx1ZV91dGY4ID0gZ2l0X19tYWxsb2MoYWxsb2NfbGVuKSk7Ci0JZ2l0X191dGYxNl90b184KHZhbHVlX3V0ZjgsIHZhbHVlX3V0ZjE2KTsKKwlhbGxvY19sZW4gPSBhbGxvY19sZW4gKiA0ICsgMTsgLyogd29yc3QgY2FzZSBVVEYxNi0+VVRGOCBncm93dGggKi8KKwljbF9hc3NlcnQodmFsdWVfdXRmOCA9IGdpdF9fY2FsbG9jKGFsbG9jX2xlbiwgMSkpOworCisJZ2l0X191dGYxNl90b184KHZhbHVlX3V0ZjgsIGFsbG9jX2xlbiwgdmFsdWVfdXRmMTYpOwogCiAJZ2l0X19mcmVlKHZhbHVlX3V0ZjE2KTsKIApAQCAtODEsMTMgKzg1LDEzIEBACiAKIGludCBjbF9zZXRlbnYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCiB7Ci0Jd2NoYXJfdCBuYW1lX3V0ZjE2W0dJVF9XSU5fUEFUSF07Ci0Jd2NoYXJfdCB2YWx1ZV91dGYxNltHSVRfV0lOX1BBVEhdOworCWdpdF93aW4zMl9wYXRoIG5hbWVfdXRmMTY7CisJZ2l0X3dpbjMyX3BhdGggdmFsdWVfdXRmMTY7CiAKLQlnaXRfX3V0ZjhfdG9fMTYobmFtZV91dGYxNiwgR0lUX1dJTl9QQVRILCBuYW1lKTsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2MobmFtZV91dGYxNiwgbmFtZSk7CiAKIAlpZiAodmFsdWUpIHsKLQkJZ2l0X191dGY4X3RvXzE2KHZhbHVlX3V0ZjE2LCBHSVRfV0lOX1BBVEgsIHZhbHVlKTsKKwkJZ2l0X3dpbjMyX3BhdGhfZnJvbV9jKHZhbHVlX3V0ZjE2LCB2YWx1ZSk7CiAJCWNsX2Fzc2VydChTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhuYW1lX3V0ZjE2LCB2YWx1ZV91dGYxNikpOwogCX0gZWxzZSB7CiAJCS8qIFdpbmRvd3MgWFAgcmV0dXJucyAwIChmYWlsZWQpIHdoZW4gcGFzc2luZyBOVUxMIGZvciBscFZhbHVlIHdoZW4KQEAgLTEwNywxMiArMTExLDEyIEBACiAgKiB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5LCBhIGNoaWxkIG9mIHRoZSBzb3VyY2UpLiAqLwogaW50IGNsX3JlbmFtZShjb25zdCBjaGFyICpzb3VyY2UsIGNvbnN0IGNoYXIgKmRlc3QpCiB7Ci0Jd2NoYXJfdCBzb3VyY2VfdXRmMTZbR0lUX1dJTl9QQVRIXTsKLQl3Y2hhcl90IGRlc3RfdXRmMTZbR0lUX1dJTl9QQVRIXTsKKwlnaXRfd2luMzJfcGF0aCBzb3VyY2VfdXRmMTY7CisJZ2l0X3dpbjMyX3BhdGggZGVzdF91dGYxNjsKIAl1bnNpZ25lZCByZXRyaWVzID0gMTsKIAotCWdpdF9fdXRmOF90b18xNihzb3VyY2VfdXRmMTYsIEdJVF9XSU5fUEFUSCwgc291cmNlKTsKLQlnaXRfX3V0ZjhfdG9fMTYoZGVzdF91dGYxNiwgR0lUX1dJTl9QQVRILCBkZXN0KTsKKwlnaXRfd2luMzJfcGF0aF9mcm9tX2Moc291cmNlX3V0ZjE2LCBzb3VyY2UpOworCWdpdF93aW4zMl9wYXRoX2Zyb21fYyhkZXN0X3V0ZjE2LCBkZXN0KTsKIAogCXdoaWxlICghTW92ZUZpbGVXKHNvdXJjZV91dGYxNiwgZGVzdF91dGYxNikpIHsKIAkJLyogT25seSByZXRyeSBpZiB0aGUgZXJyb3IgaXMgRVJST1JfQUNDRVNTX0RFTklFRDsKQEAgLTE4Nyw2ICsxOTEsOSBAQAogCS8qIE5vdyBvcGVuIHRoZSBzYW5kYm94IHJlcG9zaXRvcnkgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0ZXN0cyAqLwogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJl9jbF9yZXBvLCBzYW5kYm94KSk7CiAKKwkvKiBBZGp1c3QgY29uZmlncyBhZnRlciBjb3B5aW5nIHRvIG5ldyBmaWxlc3lzdGVtICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfcmVpbml0X2ZpbGVzeXN0ZW0oX2NsX3JlcG8sIDApKTsKKwogCXJldHVybiBfY2xfcmVwbzsKIH0KIApAQCAtMjk4LDcgKzMwNSw3IEBACiAJc2l6ZV90IHBhdGhsZW47CiAKIAlpZiAoZ2l0X3BhdGhfaXNkaXIocGF0aC0+cHRyKSA9PSB0cnVlKQotCQlyZXR1cm4gZ2l0X3BhdGhfZGlyZWFjaChwYXRoLCByZW1vdmVfcGxhY2Vob2xkZXJzX3JlY3VycywgZGF0YSk7CisJCXJldHVybiBnaXRfcGF0aF9kaXJlYWNoKHBhdGgsIDAsIHJlbW92ZV9wbGFjZWhvbGRlcnNfcmVjdXJzLCBkYXRhKTsKIAogCXBhdGhsZW4gPSBwYXRoLT5zaXplOwogCkBAIC0zMzYsNiArMzQzLDY1IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisjZGVmaW5lIENMX0NPTU1JVF9OQU1FICJMaWJnaXQyIFRlc3RlciIKKyNkZWZpbmUgQ0xfQ09NTUlUX0VNQUlMICJsaWJnaXQyLXRlc3RAZ2l0aHViLmNvbSIKKyNkZWZpbmUgQ0xfQ09NTUlUX01TRyAiVGVzdCBjb21taXQgb2YgdHJlZSAiCisKK3ZvaWQgY2xfcmVwb19jb21taXRfZnJvbV9pbmRleCgKKwlnaXRfb2lkICpvdXQsCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJZ2l0X3NpZ25hdHVyZSAqc2lnLAorCWdpdF90aW1lX3QgdGltZSwKKwljb25zdCBjaGFyICptc2cpCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfb2lkIGNvbW1pdF9pZCwgdHJlZV9pZDsKKwlnaXRfb2JqZWN0ICpwYXJlbnQgPSBOVUxMOworCWdpdF9yZWZlcmVuY2UgKnJlZiA9IE5VTEw7CisJZ2l0X3RyZWUgKnRyZWUgPSBOVUxMOworCWNoYXIgYnVmWzEyOF07CisJaW50IGZyZWVfc2lnID0gKHNpZyA9PSBOVUxMKTsKKworCS8qIGl0IGlzIGZpbmUgaWYgbG9va2luZyB1cCBIRUFEIGZhaWxzIC0gd2UgbWFrZSB0aGlzIHRoZSBmaXJzdCBjb21taXQgKi8KKwlnaXRfcmV2cGFyc2VfZXh0KCZwYXJlbnQsICZyZWYsIHJlcG8sICJIRUFEIik7CisKKwkvKiB3cml0ZSB0aGUgaW5kZXggY29udGVudCBhcyBhIHRyZWUgKi8KKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGVfdHJlZSgmdHJlZV9pZCwgaW5kZXgpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisKKwljbF9naXRfcGFzcyhnaXRfdHJlZV9sb29rdXAoJnRyZWUsIHJlcG8sICZ0cmVlX2lkKSk7CisKKwlpZiAoc2lnKQorCQljbF9hc3NlcnQoc2lnLT5uYW1lICYmIHNpZy0+ZW1haWwpOworCWVsc2UgaWYgKCF0aW1lKQorCQljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25vdygmc2lnLCBDTF9DT01NSVRfTkFNRSwgQ0xfQ09NTUlUX0VNQUlMKSk7CisJZWxzZQorCQljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25ldygKKwkJCSZzaWcsIENMX0NPTU1JVF9OQU1FLCBDTF9DT01NSVRfRU1BSUwsIHRpbWUsIDApKTsKKworCWlmICghbXNnKSB7CisJCXN0cmNweShidWYsIENMX0NPTU1JVF9NU0cpOworCQlnaXRfb2lkX3Rvc3RyKGJ1ZiArIHN0cmxlbihDTF9DT01NSVRfTVNHKSwKKwkJCXNpemVvZihidWYpIC0gc3RybGVuKENMX0NPTU1JVF9NU0cpLCAmdHJlZV9pZCk7CisJCW1zZyA9IGJ1ZjsKKwl9CisKKwljbF9naXRfcGFzcyhnaXRfY29tbWl0X2NyZWF0ZV92KAorCQkmY29tbWl0X2lkLCByZXBvLCByZWYgPyBnaXRfcmVmZXJlbmNlX25hbWUocmVmKSA6ICJIRUFEIiwKKwkJc2lnLCBzaWcsIE5VTEwsIG1zZywgdHJlZSwgcGFyZW50ID8gMSA6IDAsIHBhcmVudCkpOworCisJaWYgKG91dCkKKwkJZ2l0X29pZF9jcHkob3V0LCAmY29tbWl0X2lkKTsKKworCWdpdF9vYmplY3RfZnJlZShwYXJlbnQpOworCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworCWlmIChmcmVlX3NpZykKKwkJZ2l0X3NpZ25hdHVyZV9mcmVlKHNpZyk7CisJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKK30KKwogdm9pZCBjbF9yZXBvX3NldF9ib29sKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpjZmcsIGludCB2YWx1ZSkKIHsKIAlnaXRfY29uZmlnICpjb25maWc7CkBAIC0zNDMsMyArNDA5LDc1IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfYm9vbChjb25maWcsIGNmZywgdmFsdWUgIT0gMCkpOwogCWdpdF9jb25maWdfZnJlZShjb25maWcpOwogfQorCitpbnQgY2xfcmVwb19nZXRfYm9vbChnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqY2ZnKQoreworCWludCB2YWwgPSAwOworCWdpdF9jb25maWcgKmNvbmZpZzsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNvbmZpZywgcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X2Jvb2woJnZhbCwgY29uZmlnLCBjZmcpKTs7CisJZ2l0X2NvbmZpZ19mcmVlKGNvbmZpZyk7CisJcmV0dXJuIHZhbDsKK30KKworLyogdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgY29kZSBmcm9tIGdpdF9fdW5lc2NhcGUgbW9kaWZpZWQgc2xpZ2h0bHkgKi8KK3N0YXRpYyBzaXplX3Qgc3RyaXBfY3JfZnJvbV9idWYoY2hhciAqc3RhcnQsIHNpemVfdCBsZW4pCit7CisJY2hhciAqc2NhbiwgKnRyYWlsLCAqZW5kID0gc3RhcnQgKyBsZW47CisKKwlmb3IgKHNjYW4gPSB0cmFpbCA9IHN0YXJ0OyBzY2FuIDwgZW5kOyB0cmFpbCsrLCBzY2FuKyspIHsKKwkJd2hpbGUgKCpzY2FuID09ICdccicpCisJCQlzY2FuKys7IC8qIHNraXAgJ1xyJyAqLworCisJCWlmICh0cmFpbCAhPSBzY2FuKQorCQkJKnRyYWlsID0gKnNjYW47CisJfQorCisJKnRyYWlsID0gJ1wwJzsKKworCXJldHVybiAodHJhaWwgLSBzdGFydCk7Cit9CisKK3ZvaWQgY2xhcl9fYXNzZXJ0X2VxdWFsX2ZpbGUoCisJY29uc3QgY2hhciAqZXhwZWN0ZWRfZGF0YSwKKwlzaXplX3QgZXhwZWN0ZWRfYnl0ZXMsCisJaW50IGlnbm9yZV9jciwKKwljb25zdCBjaGFyICpwYXRoLAorCWNvbnN0IGNoYXIgKmZpbGUsCisJaW50IGxpbmUpCit7CisJY2hhciBidWZbNDAwMF07CisJc3NpemVfdCBieXRlcywgdG90YWxfYnl0ZXMgPSAwOworCWludCBmZCA9IHBfb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKwljbF9hc3NlcnQoZmQgPj0gMCk7CisKKwlpZiAoZXhwZWN0ZWRfZGF0YSAmJiAhZXhwZWN0ZWRfYnl0ZXMpCisJCWV4cGVjdGVkX2J5dGVzID0gc3RybGVuKGV4cGVjdGVkX2RhdGEpOworCisJd2hpbGUgKChieXRlcyA9IHBfcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpICE9IDApIHsKKwkJY2xhcl9fYXNzZXJ0KAorCQkJYnl0ZXMgPiAwLCBmaWxlLCBsaW5lLCAiZXJyb3IgcmVhZGluZyBmcm9tIGZpbGUiLCBwYXRoLCAxKTsKKworCQlpZiAoaWdub3JlX2NyKQorCQkJYnl0ZXMgPSBzdHJpcF9jcl9mcm9tX2J1ZihidWYsIGJ5dGVzKTsKKworCQlpZiAobWVtY21wKGV4cGVjdGVkX2RhdGEsIGJ1ZiwgYnl0ZXMpICE9IDApIHsKKwkJCWludCBwb3M7CisJCQlmb3IgKHBvcyA9IDA7IHBvcyA8IGJ5dGVzICYmIGV4cGVjdGVkX2RhdGFbcG9zXSA9PSBidWZbcG9zXTsgKytwb3MpCisJCQkJLyogZmluZCBkaWZmZXJpbmcgYnl0ZSBvZmZzZXQgKi87CisJCQlwX3NucHJpbnRmKAorCQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksICJmaWxlIGNvbnRlbnQgbWlzbWF0Y2ggYXQgYnl0ZSAlZCIsCisJCQkJKGludCkodG90YWxfYnl0ZXMgKyBwb3MpKTsKKwkJCWNsYXJfX2ZhaWwoZmlsZSwgbGluZSwgYnVmLCBwYXRoLCAxKTsKKwkJfQorCisJCWV4cGVjdGVkX2RhdGEgKz0gYnl0ZXM7CisJCXRvdGFsX2J5dGVzICAgKz0gYnl0ZXM7CisJfQorCisJcF9jbG9zZShmZCk7CisKKwljbGFyX19hc3NlcnQoIWJ5dGVzLCBmaWxlLCBsaW5lLCAiZXJyb3IgcmVhZGluZyBmcm9tIGZpbGUiLCBwYXRoLCAxKTsKKwljbGFyX19hc3NlcnRfZXF1YWwoZmlsZSwgbGluZSwgIm1pc21hdGNoZWQgZmlsZSBsZW5ndGgiLCAxLCAiJSJQUkl1WiwKKwkJKHNpemVfdClleHBlY3RlZF9ieXRlcywgKHNpemVfdCl0b3RhbF9ieXRlcyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9jbGFyX2xpYmdpdDIuaCBiL3Rlc3RzL2NsYXJfbGliZ2l0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZWY1NjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jbGFyX2xpYmdpdDIuaApAQCAtMCwwICsxLDExOSBAQAorI2lmbmRlZiBfX0NMQVJfTElCR0lUMl9fCisjZGVmaW5lIF9fQ0xBUl9MSUJHSVQyX18KKworI2luY2x1ZGUgImNsYXIuaCIKKyNpbmNsdWRlIDxnaXQyLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKy8qKgorICogUmVwbGFjZSBmb3IgYGNsYXJfbXVzdF9wYXNzYCB0aGF0IHBhc3NlcyB0aGUgbGFzdCBsaWJyYXJ5IGVycm9yIGFzIHRoZQorICogdGVzdCBmYWlsdXJlIG1lc3NhZ2UuCisgKgorICogVXNlIHRoaXMgd3JhcHBlciBhcm91bmQgYWxsIGBnaXRfYCBsaWJyYXJ5IGNhbGxzIHRoYXQgcmV0dXJuIGVycm9yIGNvZGVzIQorICovCisjZGVmaW5lIGNsX2dpdF9wYXNzKGV4cHIpIGRvIHsgXAorCWludCBfbGcyX2Vycm9yOyBcCisJZ2l0ZXJyX2NsZWFyKCk7IFwKKwlpZiAoKF9sZzJfZXJyb3IgPSAoZXhwcikpICE9IDApIFwKKwkJY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKF9sZzJfZXJyb3IsIF9fRklMRV9fLCBfX0xJTkVfXywgIkZ1bmN0aW9uIGNhbGwgZmFpbGVkOiAiICNleHByKTsgXAorCX0gd2hpbGUgKDApCisKKy8qKgorICogV3JhcHBlciBmb3IgYGNsYXJfbXVzdF9mYWlsYCAtLSB0aGlzIG9uZSBpcworICoganVzdCBmb3IgY29uc2lzdGVuY3kuIFVzZSB3aXRoIGBnaXRfYCBsaWJyYXJ5CisgKiBjYWxscyB0aGF0IGFyZSBzdXBwb3NlZCB0byBmYWlsIQorICovCisjZGVmaW5lIGNsX2dpdF9mYWlsKGV4cHIpIGNsX211c3RfZmFpbChleHByKQorCisjZGVmaW5lIGNsX2dpdF9mYWlsX3dpdGgoZXhwciwgZXJyb3IpIGNsX2Fzc2VydF9lcXVhbF9pKGVycm9yLGV4cHIpCisKK3ZvaWQgY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CisKKyNkZWZpbmUgY2xfYXNzZXJ0X2F0X2xpbmUoZXhwcixmaWxlLGxpbmUpIFwKKwljbGFyX19hc3NlcnQoKGV4cHIpICE9IDAsIGZpbGUsIGxpbmUsICJFeHByZXNzaW9uIGlzIG5vdCB0cnVlOiAiICNleHByLCBOVUxMLCAxKQorCitHSVRfSU5MSU5FKHZvaWQpIGNsYXJfX2Fzc2VydF9pbl9yYW5nZSgKKwlpbnQgbG8sIGludCB2YWwsIGludCBoaSwKKwljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZXJyLCBpbnQgc2hvdWxkX2Fib3J0KQoreworCWlmIChsbyA+IHZhbCB8fCBoaSA8IHZhbCkgeworCQljaGFyIGJ1ZlsxMjhdOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQgbm90IGluIFslZCwlZF0iLCB2YWwsIGxvLCBoaSk7CisJCWNsYXJfX2ZhaWwoZmlsZSwgbGluZSwgZXJyLCBidWYsIHNob3VsZF9hYm9ydCk7CisJfQorfQorCisjZGVmaW5lIGNsX2Fzc2VydF9lcXVhbF9zeihzejEsc3oyKSBkbyB7IFwKKwlzaXplX3QgX19zejEgPSAoc2l6ZV90KShzejEpLCBfX3N6MiA9IChzaXplX3QpKHN6Mik7IFwKKwljbGFyX19hc3NlcnRfZXF1YWwoX19GSUxFX18sX19MSU5FX18sI3N6MSAiICE9ICIgI3N6MiwgMSwgIiUiUFJJdVosIF9fc3oxLCBfX3N6Mik7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgY2xfYXNzZXJ0X2luX3JhbmdlKEwsVixIKSBcCisJY2xhcl9fYXNzZXJ0X2luX3JhbmdlKChMKSwoViksKEgpLF9fRklMRV9fLF9fTElORV9fLCJSYW5nZSBjaGVjazogIiAjViAiIGluIFsiICNMICIsIiAjSCAiXSIsIDEpCisKKyNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX2ZpbGUoREFUQSxTSVpFLFBBVEgpIFwKKwljbGFyX19hc3NlcnRfZXF1YWxfZmlsZShEQVRBLFNJWkUsMCxQQVRILF9fRklMRV9fLChpbnQpX19MSU5FX18pCisKKyNkZWZpbmUgY2xfYXNzZXJ0X2VxdWFsX2ZpbGVfaWdub3JlX2NyKERBVEEsU0laRSxQQVRIKSBcCisJY2xhcl9fYXNzZXJ0X2VxdWFsX2ZpbGUoREFUQSxTSVpFLDEsUEFUSCxfX0ZJTEVfXywoaW50KV9fTElORV9fKQorCit2b2lkIGNsYXJfX2Fzc2VydF9lcXVhbF9maWxlKAorCWNvbnN0IGNoYXIgKmV4cGVjdGVkX2RhdGEsCisJc2l6ZV90IGV4cGVjdGVkX3NpemUsCisJaW50IGlnbm9yZV9jciwKKwljb25zdCBjaGFyICpwYXRoLAorCWNvbnN0IGNoYXIgKmZpbGUsCisJaW50IGxpbmUpOworCisvKgorICogU29tZSB1dGlsaXR5IG1hY3JvcyBmb3IgYnVpbGRpbmcgbG9uZyBzdHJpbmdzCisgKi8KKyNkZWZpbmUgUkVQNChTVFIpCSBTVFIgU1RSIFNUUiBTVFIKKyNkZWZpbmUgUkVQMTUoU1RSKQkgUkVQNChTVFIpIFJFUDQoU1RSKSBSRVA0KFNUUikgU1RSIFNUUiBTVFIKKyNkZWZpbmUgUkVQMTYoU1RSKQkgUkVQNChSRVA0KFNUUikpCisjZGVmaW5lIFJFUDI1NihTVFIpICBSRVAxNihSRVAxNihTVFIpKQorI2RlZmluZSBSRVAxMDI0KFNUUikgUkVQNChSRVAyNTYoU1RSKSkKKworLyogV3JpdGUgdGhlIGNvbnRlbnRzIG9mIGEgYnVmZmVyIHRvIGRpc2sgKi8KK3ZvaWQgY2xfZ2l0X21rZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqY29udGVudCk7Cit2b2lkIGNsX2dpdF9hcHBlbmQyZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbmV3X2NvbnRlbnQpOwordm9pZCBjbF9naXRfcmV3cml0ZWZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm5ld19jb250ZW50KTsKK3ZvaWQgY2xfZ2l0X3dyaXRlMmZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZGF0YSwKKwlzaXplX3QgZGF0YWxlbiwgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgbW9kZSk7CisKK2Jvb2wgY2xfdG9nZ2xlX2ZpbGVtb2RlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2Jvb2wgY2xfaXNfY2htb2Rfc3VwcG9ydGVkKHZvaWQpOworCisvKiBFbnZpcm9ubWVudCB3cmFwcGVycyAqLworY2hhciAqY2xfZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGNsX3NldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKKy8qIFJlbGlhYmxlIHJlbmFtZSAqLworaW50IGNsX3JlbmFtZShjb25zdCBjaGFyICpzb3VyY2UsIGNvbnN0IGNoYXIgKmRlc3QpOworCisvKiBHaXQgc2FuZGJveCBzZXR1cCBoZWxwZXJzICovCisKK2dpdF9yZXBvc2l0b3J5ICpjbF9naXRfc2FuZGJveF9pbml0KGNvbnN0IGNoYXIgKnNhbmRib3gpOwordm9pZCBjbF9naXRfc2FuZGJveF9jbGVhbnVwKHZvaWQpOworZ2l0X3JlcG9zaXRvcnkgKmNsX2dpdF9zYW5kYm94X3Jlb3Blbih2b2lkKTsKKworLyogTG9jYWwtcmVwbyB1cmwgaGVscGVycyAqLworY29uc3QgY2hhciogY2xfZ2l0X2ZpeHR1cmVfdXJsKGNvbnN0IGNoYXIgKmZpeHR1cmVuYW1lKTsKK2NvbnN0IGNoYXIqIGNsX2dpdF9wYXRoX3VybChjb25zdCBjaGFyICpwYXRoKTsKKworLyogVGVzdCByZXBvc2l0b3J5IGNsZWFuZXIgKi8KK2ludCBjbF9naXRfcmVtb3ZlX3BsYWNlaG9sZGVycyhjb25zdCBjaGFyICpkaXJlY3RvcnlfcGF0aCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisvKiBjb21taXQgY3JlYXRpb24gaGVscGVycyAqLwordm9pZCBjbF9yZXBvX2NvbW1pdF9mcm9tX2luZGV4KAorCWdpdF9vaWQgKm91dCwKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwlnaXRfc2lnbmF0dXJlICpzaWcsCisJZ2l0X3RpbWVfdCB0aW1lLAorCWNvbnN0IGNoYXIgKm1zZyk7CisKKy8qIGNvbmZpZyBzZXR0aW5nIGhlbHBlcnMgKi8KK3ZvaWQgY2xfcmVwb19zZXRfYm9vbChnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqY2ZnLCBpbnQgdmFsdWUpOworaW50IGNsX3JlcG9fZ2V0X2Jvb2woZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmNmZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jbG9uZS9lbXB0eS5jIGIvdGVzdHMvY2xvbmUvZW1wdHkuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2Nsb25lL2VtcHR5LmMKcmVuYW1lIHRvIHRlc3RzL2Nsb25lL2VtcHR5LmMKaW5kZXggZjkyZmE2Yy4uNmQxOTI0NCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9jbG9uZS9lbXB0eS5jCisrKyBiL3Rlc3RzL2Nsb25lL2VtcHR5LmMKQEAgLTEwLDEyICsxMCwxNCBAQAogdm9pZCB0ZXN0X2Nsb25lX2VtcHR5X19pbml0aWFsaXplKHZvaWQpCiB7CiAJZ2l0X3JlcG9zaXRvcnkgKnNhbmRib3ggPSBjbF9naXRfc2FuZGJveF9pbml0KCJlbXB0eV9iYXJlLmdpdCIpOworCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGR1bW15X2NhbGxiYWNrcyA9IEdJVF9SRU1PVEVfQ0FMTEJBQ0tTX0lOSVQ7CiAJY2xfZ2l0X3JlbW92ZV9wbGFjZWhvbGRlcnMoZ2l0X3JlcG9zaXRvcnlfcGF0aChzYW5kYm94KSwgImR1bW15LW1hcmtlci50eHQiKTsKIAogCWdfcmVwbyA9IE5VTEw7CiAKIAltZW1zZXQoJmdfb3B0aW9ucywgMCwgc2l6ZW9mKGdpdF9jbG9uZV9vcHRpb25zKSk7CiAJZ19vcHRpb25zLnZlcnNpb24gPSBHSVRfQ0xPTkVfT1BUSU9OU19WRVJTSU9OOworCWdfb3B0aW9ucy5yZW1vdGVfY2FsbGJhY2tzID0gZHVtbXlfY2FsbGJhY2tzOwogfQogCiB2b2lkIHRlc3RfY2xvbmVfZW1wdHlfX2NsZWFudXAodm9pZCkKQEAgLTQ0LDcgKzQ2LDcgQEAKIAlnX29wdGlvbnMuYmFyZSA9IHRydWU7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG9fY2xvbmVkLCAiLi9lbXB0eV9iYXJlLmdpdCIsICIuL2VtcHR5IiwgJmdfb3B0aW9ucykpOwogCi0JLyogQWx0aG91Z2ggdGhlIEhFQUQgaXMgb3JwaGFuZWQuLi4gKi8KKwkvKiBBbHRob3VnaCB0aGUgSEVBRCBpcyB1bmJvcm4uLi4gKi8KIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfRU5PVEZPVU5ELCBnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCBnX3JlcG9fY2xvbmVkLCBsb2NhbF9uYW1lKSk7CiAKIAkvKiAuLi5vbmUgY2FuIHN0aWxsIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgdHJhY2tpbmcgcmVmZXJlbmNlICovCkBAIC01OSw3ICs2MSw3IEBACiAKIAljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZF9yZW1vdGVfbmFtZSwgYnVmZmVyKTsKIAotCS8qIC4uLmV2ZW4gd2hlbiB0aGUgcmVtb3RlIEhFQUQgaXMgb3JwaGFuZWQgYXMgd2VsbCAqLworCS8qIC4uLmV2ZW4gd2hlbiB0aGUgcmVtb3RlIEhFQUQgaXMgdW5ib3JuIGFzIHdlbGwgKi8KIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfRU5PVEZPVU5ELCBnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCBnX3JlcG9fY2xvbmVkLAogCQlleHBlY3RlZF90cmFja2VkX2JyYW5jaF9uYW1lKSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9jbG9uZS9ub25ldHdvcmsuYyBiL3Rlc3RzL2Nsb25lL25vbmV0d29yay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODZlMmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jbG9uZS9ub25ldHdvcmsuYwpAQCAtMCwwICsxLDE3OSBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorCisjaW5jbHVkZSAiZ2l0Mi9jbG9uZS5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImZpbGVvcHMuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKKyNkZWZpbmUgTElWRV9SRVBPX1VSTCAiZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL1Rlc3RHaXRSZXBvc2l0b3J5IgorCitzdGF0aWMgZ2l0X2Nsb25lX29wdGlvbnMgZ19vcHRpb25zOworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87CitzdGF0aWMgZ2l0X3JlZmVyZW5jZSogZ19yZWY7CitzdGF0aWMgZ2l0X3JlbW90ZSogZ19yZW1vdGU7CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnaXRfY2hlY2tvdXRfb3B0cyBkdW1teV9vcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKKwlnaXRfcmVtb3RlX2NhbGxiYWNrcyBkdW1teV9jYWxsYmFja3MgPSBHSVRfUkVNT1RFX0NBTExCQUNLU19JTklUOworCisJZ19yZXBvID0gTlVMTDsKKworCW1lbXNldCgmZ19vcHRpb25zLCAwLCBzaXplb2YoZ2l0X2Nsb25lX29wdGlvbnMpKTsKKwlnX29wdGlvbnMudmVyc2lvbiA9IEdJVF9DTE9ORV9PUFRJT05TX1ZFUlNJT047CisJZ19vcHRpb25zLmNoZWNrb3V0X29wdHMgPSBkdW1teV9vcHRzOworCWdfb3B0aW9ucy5jaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkU7CisJZ19vcHRpb25zLnJlbW90ZV9jYWxsYmFja3MgPSBkdW1teV9jYWxsYmFja3M7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2NsZWFudXAodm9pZCkKK3sKKwlpZiAoZ19yZXBvKSB7CisJCWdpdF9yZXBvc2l0b3J5X2ZyZWUoZ19yZXBvKTsKKwkJZ19yZXBvID0gTlVMTDsKKwl9CisKKwlpZiAoZ19yZWYpIHsKKwkJZ2l0X3JlZmVyZW5jZV9mcmVlKGdfcmVmKTsKKwkJZ19yZWYgPSBOVUxMOworCX0KKworCWlmIChnX3JlbW90ZSkgeworCQlnaXRfcmVtb3RlX2ZyZWUoZ19yZW1vdGUpOworCQlnX3JlbW90ZSA9IE5VTEw7CisJfQorCisJY2xfZml4dHVyZV9jbGVhbnVwKCIuL2ZvbyIpOworfQorCit2b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19iYWRfdXJscyh2b2lkKQoreworCS8qIENsb25lIHNob3VsZCBjbGVhbiB1cCB0aGUgbWVzcyBpZiB0aGUgVVJMIGlzbid0IGEgZ2l0IHJlcG9zaXRvcnkgKi8KKwljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgIm5vdF9hX3JlcG8iLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIi4vZm9vIikpOworCWdfb3B0aW9ucy5iYXJlID0gdHJ1ZTsKKwljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgIm5vdF9hX3JlcG8iLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIi4vZm9vIikpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X2Nsb25lKCZnX3JlcG8sICJnaXQ6Ly9leGFtcGxlLmNvbTphc2RmIiwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOworCWNsX2dpdF9mYWlsKGdpdF9jbG9uZSgmZ19yZXBvLCAiaHR0cHM6Ly9leGFtcGxlLmNvbTphc2RmL2ZvbyIsICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKKwljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgImdpdDovL2dpdGh1Yi5jb20vZ2l0Oi8vZ2l0aHViLmNvbS9mb28vYmFyLmdpdC5naXQiLAorCQkJCSIuL2ZvbyIsICZnX29wdGlvbnMpKTsKKwljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgImFycmJlZTpteS9iYWQ6cGFzc3dvcmRAZ2l0aHViLmNvbToxMTExL3N0cmFuZ2U6d29yZHMuZ2l0IiwKKwkJCQkiLi9mb28iLCAmZ19vcHRpb25zKSk7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2RvX25vdF9jbGVhbl9leGlzdGluZ19kaXJlY3Rvcnkodm9pZCkKK3sKKwkvKiBDbG9uZSBzaG91bGQgbm90IHJlbW92ZSB0aGUgZGlyZWN0b3J5IGlmIGl0IGFscmVhZHkgZXhpc3RzLCBidXQKKwkgKiBTaG91bGQgY2xlYW4gdXAgZW50cmllcyBpdCBjcmVhdGVzLiAqLworCXBfbWtkaXIoIi4vZm9vIiwgR0lUX0RJUl9NT0RFKTsKKwljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgIm5vdF9hX3JlcG8iLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoX2lzX2VtcHR5X2RpcigiLi9mb28iKSk7CisKKwkvKiBUcnkgYWdhaW4gd2l0aCBhIGJhcmUgcmVwb3NpdG9yeS4gKi8KKwlnX29wdGlvbnMuYmFyZSA9IHRydWU7CisJY2xfZ2l0X2ZhaWwoZ2l0X2Nsb25lKCZnX3JlcG8sICJub3RfYV9yZXBvIiwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOworCWNsX2Fzc2VydChnaXRfcGF0aF9pc19lbXB0eV9kaXIoIi4vZm9vIikpOworfQorCit2b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19sb2NhbCh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2xvY2FsX2Fic29sdXRlX3BhdGgodm9pZCkKK3sKKwljb25zdCBjaGFyICpsb2NhbF9zcmM7CisJbG9jYWxfc3JjID0gY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0Iik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIGxvY2FsX3NyYywgIi4vZm9vIiwgJmdfb3B0aW9ucykpOworfQorCit2b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19sb2NhbF9iYXJlKHZvaWQpCit7CisJZ19vcHRpb25zLmJhcmUgPSB0cnVlOworCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2ZhaWxfd2hlbl90aGVfdGFyZ2V0X2lzX2FfZmlsZSh2b2lkKQoreworCWNsX2dpdF9ta2ZpbGUoIi4vZm9vIiwgIkJhciEiKTsKKwljbF9naXRfZmFpbChnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOworfQorCit2b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19mYWlsX3dpdGhfYWxyZWFkeV9leGlzdGluZ19idXRfbm9uX2VtcHR5X2RpcmVjdG9yeSh2b2lkKQoreworCXBfbWtkaXIoIi4vZm9vIiwgR0lUX0RJUl9NT0RFKTsKKwljbF9naXRfbWtmaWxlKCIuL2Zvby9iYXIiLCAiQmF6ISIpOworCWNsX2dpdF9mYWlsKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2N1c3RvbV9vcmlnaW5fbmFtZSh2b2lkKQoreworICAgICAgIGdfb3B0aW9ucy5yZW1vdGVfbmFtZSA9ICJteV9vcmlnaW4iOworICAgICAgIGNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7CisKKyAgICAgICBjbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xvYWQoJmdfcmVtb3RlLCBnX3JlcG8sICJteV9vcmlnaW4iKSk7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2RlZmF1bHRzKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIGNsX2dpdF9maXh0dXJlX3VybCgidGVzdHJlcG8uZ2l0IiksICIuL2ZvbyIsIE5VTEwpKTsKKwljbF9hc3NlcnQoZ19yZXBvKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xvYWQoJmdfcmVtb3RlLCBnX3JlcG8sICJvcmlnaW4iKSk7Cit9CisKK3ZvaWQgdGVzdF9jbG9uZV9ub25ldHdvcmtfX2NvcGVfd2l0aF9hbHJlYWR5X2V4aXN0aW5nX2RpcmVjdG9yeSh2b2lkKQoreworCXBfbWtkaXIoIi4vZm9vIiwgR0lUX0RJUl9NT0RFKTsKKwljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgY2xfZ2l0X2ZpeHR1cmVfdXJsKCJ0ZXN0cmVwby5naXQiKSwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOworfQorCit2b2lkIHRlc3RfY2xvbmVfbm9uZXR3b3JrX19jYW5fcHJldmVudF90aGVfY2hlY2tvdXRfb2ZfYV9zdGFuZGFyZF9yZXBvKHZvaWQpCit7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOworCisJZ19vcHRpb25zLmNoZWNrb3V0X29wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSAwOworCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGdfcmVwbyksICJtYXN0ZXIudHh0IikpOworCWNsX2Fzc2VydF9lcXVhbF9pKGZhbHNlLCBnaXRfcGF0aF9pc2ZpbGUoZ2l0X2J1Zl9jc3RyKCZwYXRoKSkpOworCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKK30KKwordm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fY2FuX2NoZWNrb3V0X2dpdmVuX2JyYW5jaCh2b2lkKQoreworCWdfb3B0aW9ucy5jaGVja291dF9icmFuY2ggPSAidGVzdCI7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIGNsX2dpdF9maXh0dXJlX3VybCgidGVzdHJlcG8uZ2l0IiksICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGdpdF9yZXBvc2l0b3J5X2hlYWRfdW5ib3JuKGdfcmVwbykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaGVhZCgmZ19yZWYsIGdfcmVwbykpOworCWNsX2Fzc2VydF9lcXVhbF9zKGdpdF9yZWZlcmVuY2VfbmFtZShnX3JlZiksICJyZWZzL2hlYWRzL3Rlc3QiKTsKK30KKwordm9pZCB0ZXN0X2Nsb25lX25vbmV0d29ya19fY2FuX2RldGFjaGVkX2hlYWQodm9pZCkKK3sKKwlnaXRfb2JqZWN0ICpvYmo7CisJZ2l0X3JlcG9zaXRvcnkgKmNsb25lZDsKKwlnaXRfcmVmZXJlbmNlICpjbG9uZWRfaGVhZDsKKworCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpLCAiLi9mb28iLCAmZ19vcHRpb25zKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmV2cGFyc2Vfc2luZ2xlKCZvYmosIGdfcmVwbywgIm1hc3Rlcn4xIikpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkX2RldGFjaGVkKGdfcmVwbywgZ2l0X29iamVjdF9pZChvYmopKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmNsb25lZCwgIi4vZm9vIiwgIi4vZm9vMSIsICZnX29wdGlvbnMpKTsKKworCWNsX2Fzc2VydChnaXRfcmVwb3NpdG9yeV9oZWFkX2RldGFjaGVkKGNsb25lZCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaGVhZCgmY2xvbmVkX2hlYWQsIGNsb25lZCkpOworCWNsX2Fzc2VydCghZ2l0X29pZF9jbXAoZ2l0X29iamVjdF9pZChvYmopLCBnaXRfcmVmZXJlbmNlX3RhcmdldChjbG9uZWRfaGVhZCkpKTsKKworCWdpdF9vYmplY3RfZnJlZShvYmopOworCWdpdF9yZWZlcmVuY2VfZnJlZShjbG9uZWRfaGVhZCk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShjbG9uZWQpOworCisJY2xfZml4dHVyZV9jbGVhbnVwKCIuL2ZvbzEiKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29tbWl0L2NvbW1pdC5jIGIvdGVzdHMvY29tbWl0L2NvbW1pdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvbW1pdC9jb21taXQuYwpyZW5hbWUgdG8gdGVzdHMvY29tbWl0L2NvbW1pdC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbW1pdC9wYXJlbnQuYyBiL3Rlc3RzL2NvbW1pdC9wYXJlbnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb21taXQvcGFyZW50LmMKcmVuYW1lIHRvIHRlc3RzL2NvbW1pdC9wYXJlbnQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb21taXQvcGFyc2UuYyBiL3Rlc3RzL2NvbW1pdC9wYXJzZS5jCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29tbWl0L3BhcnNlLmMKcmVuYW1lIHRvIHRlc3RzL2NvbW1pdC9wYXJzZS5jCmluZGV4IDQxNTg2MGEuLjQxZTE2MjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY29tbWl0L3BhcnNlLmMKKysrIGIvdGVzdHMvY29tbWl0L3BhcnNlLmMKQEAgLTcsNzcgKzcsNzcgQEAKIHN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvOwogdm9pZCB0ZXN0X2NvbW1pdF9wYXJzZV9faW5pdGlhbGl6ZSh2b2lkKQogewotICAgZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8iKTsKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJ0ZXN0cmVwbyIpOwogfQogdm9pZCB0ZXN0X2NvbW1pdF9wYXJzZV9fY2xlYW51cCh2b2lkKQogewotICAgY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKIH0KIAogCiAvLyBIZWFkZXIgcGFyc2luZwogdHlwZWRlZiBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqbGluZTsKLSAgIGNvbnN0IGNoYXIgKmhlYWRlcjsKKwljb25zdCBjaGFyICpsaW5lOworCWNvbnN0IGNoYXIgKmhlYWRlcjsKIH0gcGFyc2VfdGVzdF9jYXNlOwogCiBzdGF0aWMgcGFyc2VfdGVzdF9jYXNlIHBhc3NpbmdfaGVhZGVyX2Nhc2VzW10gPSB7Ci0gICB7ICJwYXJlbnQgMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNlxuIiwgInBhcmVudCAiIH0sCi0gICB7ICJ0cmVlIDA1NDUyZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhMzZcbiIsICJ0cmVlICIgfSwKLSAgIHsgInJhbmRvbV9oZWFkaW5nIDA1NDUyZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhMzZcbiIsICJyYW5kb21faGVhZGluZyAiIH0sCi0gICB7ICJzdHVja19oZWFkaW5nMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNlxuIiwgInN0dWNrX2hlYWRpbmciIH0sCi0gICB7ICJ0cmVlIDVGNEJFRkZDMDc1OTI2MUQwMTVBQTYzQTNBODU2MTNGRjJGMjM1REVcbiIsICJ0cmVlICIgfSwKLSAgIHsgInRyZWUgMUE2NjlCOEFCODFCNUVCN0Q5REI2OTU2MkQzNDk1MkEzOEE5QjUwNFxuIiwgInRyZWUgIiB9LAotICAgeyAidHJlZSA1QjIwRENDNjExMEZDQzc1RDMxQzZDRURFQkQ3RjQzRUNBNjVCNTAzXG4iLCAidHJlZSAiIH0sCi0gICB7ICJ0cmVlIDE3M0U3QkYwMEVBNUMzMzQ0N0U5OUU2QzEyNTU5NTRBMTMwMjZCRTRcbiIsICJ0cmVlICIgfSwKLSAgIHsgTlVMTCwgTlVMTCB9CisJeyAicGFyZW50IDA1NDUyZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhMzZcbiIsICJwYXJlbnQgIiB9LAorCXsgInRyZWUgMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNlxuIiwgInRyZWUgIiB9LAorCXsgInJhbmRvbV9oZWFkaW5nIDA1NDUyZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhMzZcbiIsICJyYW5kb21faGVhZGluZyAiIH0sCisJeyAic3R1Y2tfaGVhZGluZzA1NDUyZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhMzZcbiIsICJzdHVja19oZWFkaW5nIiB9LAorCXsgInRyZWUgNUY0QkVGRkMwNzU5MjYxRDAxNUFBNjNBM0E4NTYxM0ZGMkYyMzVERVxuIiwgInRyZWUgIiB9LAorCXsgInRyZWUgMUE2NjlCOEFCODFCNUVCN0Q5REI2OTU2MkQzNDk1MkEzOEE5QjUwNFxuIiwgInRyZWUgIiB9LAorCXsgInRyZWUgNUIyMERDQzYxMTBGQ0M3NUQzMUM2Q0VERUJEN0Y0M0VDQTY1QjUwM1xuIiwgInRyZWUgIiB9LAorCXsgInRyZWUgMTczRTdCRjAwRUE1QzMzNDQ3RTk5RTZDMTI1NTk1NEExMzAyNkJFNFxuIiwgInRyZWUgIiB9LAorCXsgTlVMTCwgTlVMTCB9CiB9OwogCiBzdGF0aWMgcGFyc2VfdGVzdF9jYXNlIGZhaWxpbmdfaGVhZGVyX2Nhc2VzW10gPSB7Ci0gICB7ICJwYXJlbnQgMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNiIsICJwYXJlbnQgIiB9LAotICAgeyAiMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNlxuIiwgInRyZWUgIiB9LAotICAgeyAicGFyZW50MDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmE2YVxuIiwgInBhcmVudCAiIH0sCi0gICB7ICJwYXJlbnQgMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjgwZDc2NWQ4YjJhNlxuIiwgInBhcmVudCAiIH0sCi0gICB7ICJ0cmVlICAwNTQ1MmQ2MzQ5YWJjZDY3YWEzOTZkZmIyODY2MGQ3NjVkOGIyYTM2XG4iLCAidHJlZSAiIH0sCi0gICB7ICJwYXJlbnQgMDU0NXhkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNlxuIiwgInBhcmVudCAiIH0sCi0gICB7ICJwYXJlbnQgMDU0NXhkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNkZGXG4iLCAicGFyZW50ICIgfSwKLSAgIHsgIiIsICJ0cmVlICIgfSwKLSAgIHsgIiIsICIiIH0sCi0gICB7IE5VTEwsIE5VTEwgfQorCXsgInBhcmVudCAwNTQ1MmQ2MzQ5YWJjZDY3YWEzOTZkZmIyODY2MGQ3NjVkOGIyYTM2IiwgInBhcmVudCAiIH0sCisJeyAiMDU0NTJkNjM0OWFiY2Q2N2FhMzk2ZGZiMjg2NjBkNzY1ZDhiMmEzNlxuIiwgInRyZWUgIiB9LAorCXsgInBhcmVudDA1NDUyZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhNmFcbiIsICJwYXJlbnQgIiB9LAorCXsgInBhcmVudCAwNTQ1MmQ2MzQ5YWJjZDY3YWEzOTZkZmIyODBkNzY1ZDhiMmE2XG4iLCAicGFyZW50ICIgfSwKKwl7ICJ0cmVlICAwNTQ1MmQ2MzQ5YWJjZDY3YWEzOTZkZmIyODY2MGQ3NjVkOGIyYTM2XG4iLCAidHJlZSAiIH0sCisJeyAicGFyZW50IDA1NDV4ZDYzNDlhYmNkNjdhYTM5NmRmYjI4NjYwZDc2NWQ4YjJhMzZcbiIsICJwYXJlbnQgIiB9LAorCXsgInBhcmVudCAwNTQ1eGQ2MzQ5YWJjZDY3YWEzOTZkZmIyODY2MGQ3NjVkOGIyYTM2RkZcbiIsICJwYXJlbnQgIiB9LAorCXsgIiIsICJ0cmVlICIgfSwKKwl7ICIiLCAiIiB9LAorCXsgTlVMTCwgTlVMTCB9CiB9OwogCiB2b2lkIHRlc3RfY29tbWl0X3BhcnNlX19oZWFkZXIodm9pZCkKIHsKLSAgIGdpdF9vaWQgb2lkOworCWdpdF9vaWQgb2lkOwogCi0gICBwYXJzZV90ZXN0X2Nhc2UgKnRlc3RjYXNlOwotICAgZm9yICh0ZXN0Y2FzZSA9IHBhc3NpbmdfaGVhZGVyX2Nhc2VzOyB0ZXN0Y2FzZS0+bGluZSAhPSBOVUxMOyB0ZXN0Y2FzZSsrKQotICAgewotICAgICAgY29uc3QgY2hhciAqbGluZSA9IHRlc3RjYXNlLT5saW5lOwotICAgICAgY29uc3QgY2hhciAqbGluZV9lbmQgPSBsaW5lICsgc3RybGVuKGxpbmUpOworCXBhcnNlX3Rlc3RfY2FzZSAqdGVzdGNhc2U7CisJZm9yICh0ZXN0Y2FzZSA9IHBhc3NpbmdfaGVhZGVyX2Nhc2VzOyB0ZXN0Y2FzZS0+bGluZSAhPSBOVUxMOyB0ZXN0Y2FzZSsrKQorCXsKKwkJY29uc3QgY2hhciAqbGluZSA9IHRlc3RjYXNlLT5saW5lOworCQljb25zdCBjaGFyICpsaW5lX2VuZCA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgIGNsX2dpdF9wYXNzKGdpdF9vaWRfX3BhcnNlKCZvaWQsICZsaW5lLCBsaW5lX2VuZCwgdGVzdGNhc2UtPmhlYWRlcikpOwotICAgICAgY2xfYXNzZXJ0KGxpbmUgPT0gbGluZV9lbmQpOwotICAgfQorCQljbF9naXRfcGFzcyhnaXRfb2lkX19wYXJzZSgmb2lkLCAmbGluZSwgbGluZV9lbmQsIHRlc3RjYXNlLT5oZWFkZXIpKTsKKwkJY2xfYXNzZXJ0KGxpbmUgPT0gbGluZV9lbmQpOworCX0KIAotICAgZm9yICh0ZXN0Y2FzZSA9IGZhaWxpbmdfaGVhZGVyX2Nhc2VzOyB0ZXN0Y2FzZS0+bGluZSAhPSBOVUxMOyB0ZXN0Y2FzZSsrKQotICAgewotICAgICAgY29uc3QgY2hhciAqbGluZSA9IHRlc3RjYXNlLT5saW5lOwotICAgICAgY29uc3QgY2hhciAqbGluZV9lbmQgPSBsaW5lICsgc3RybGVuKGxpbmUpOworCWZvciAodGVzdGNhc2UgPSBmYWlsaW5nX2hlYWRlcl9jYXNlczsgdGVzdGNhc2UtPmxpbmUgIT0gTlVMTDsgdGVzdGNhc2UrKykKKwl7CisJCWNvbnN0IGNoYXIgKmxpbmUgPSB0ZXN0Y2FzZS0+bGluZTsKKwkJY29uc3QgY2hhciAqbGluZV9lbmQgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICBjbF9naXRfZmFpbChnaXRfb2lkX19wYXJzZSgmb2lkLCAmbGluZSwgbGluZV9lbmQsIHRlc3RjYXNlLT5oZWFkZXIpKTsKLSAgIH0KKwkJY2xfZ2l0X2ZhaWwoZ2l0X29pZF9fcGFyc2UoJm9pZCwgJmxpbmUsIGxpbmVfZW5kLCB0ZXN0Y2FzZS0+aGVhZGVyKSk7CisJfQogfQogCiAKIC8vIFNpZ25hdHVyZSBwYXJzaW5nCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICBjb25zdCBjaGFyICpzdHJpbmc7Ci0gICBjb25zdCBjaGFyICpoZWFkZXI7Ci0gICBjb25zdCBjaGFyICpuYW1lOwotICAgY29uc3QgY2hhciAqZW1haWw7Ci0gICBnaXRfdGltZV90IHRpbWU7Ci0gICBpbnQgb2Zmc2V0OworCWNvbnN0IGNoYXIgKnN0cmluZzsKKwljb25zdCBjaGFyICpoZWFkZXI7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICplbWFpbDsKKwlnaXRfdGltZV90IHRpbWU7CisJaW50IG9mZnNldDsKIH0gcGFzc2luZ19zaWduYXR1cmVfdGVzdF9jYXNlOwogCiBwYXNzaW5nX3NpZ25hdHVyZV90ZXN0X2Nhc2UgcGFzc2luZ19zaWduYXR1cmVfY2FzZXNbXSA9IHsKQEAgLTEyMiwxMiArMTIyLDEyIEBACiAJeyJhdXRob3IgVmljZW50IE1hcnRpIDx0YW5va3VAZ21haWwuY29tPiA0Mjk0OTY3Mjk2IFxuIiwgImF1dGhvciAiLCAiVmljZW50IE1hcnRpIiwgInRhbm9rdUBnbWFpbC5jb20iLCA0Mjk0OTY3Mjk2LCAwfSwKIAl7ImF1dGhvciBWaWNlbnQgTWFydGkgPHRhbm9rdUBnbWFpbC5jb20+IDg1ODk5MzQ1OTIgXG4iLCAiYXV0aG9yICIsICJWaWNlbnQgTWFydGkiLCAidGFub2t1QGdtYWlsLmNvbSIsIDg1ODk5MzQ1OTIsIDB9LAogCi0gICB7TlVMTCxOVUxMLE5VTEwsTlVMTCwwLDB9CisJe05VTEwsTlVMTCxOVUxMLE5VTEwsMCwwfQogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgY29uc3QgY2hhciAqc3RyaW5nOwotICAgY29uc3QgY2hhciAqaGVhZGVyOworCWNvbnN0IGNoYXIgKnN0cmluZzsKKwljb25zdCBjaGFyICpoZWFkZXI7CiB9IGZhaWxpbmdfc2lnbmF0dXJlX3Rlc3RfY2FzZTsKIAogZmFpbGluZ19zaWduYXR1cmVfdGVzdF9jYXNlIGZhaWxpbmdfc2lnbmF0dXJlX2Nhc2VzW10gPSB7CkBAIC0xNDMsMzEgKzE0MywzMSBAQAogCiB2b2lkIHRlc3RfY29tbWl0X3BhcnNlX19zaWduYXR1cmUodm9pZCkKIHsKLSAgIHBhc3Npbmdfc2lnbmF0dXJlX3Rlc3RfY2FzZSAqcGFzc2Nhc2U7Ci0gICBmYWlsaW5nX3NpZ25hdHVyZV90ZXN0X2Nhc2UgKmZhaWxjYXNlOworCXBhc3Npbmdfc2lnbmF0dXJlX3Rlc3RfY2FzZSAqcGFzc2Nhc2U7CisJZmFpbGluZ19zaWduYXR1cmVfdGVzdF9jYXNlICpmYWlsY2FzZTsKIAotICAgZm9yIChwYXNzY2FzZSA9IHBhc3Npbmdfc2lnbmF0dXJlX2Nhc2VzOyBwYXNzY2FzZS0+c3RyaW5nICE9IE5VTEw7IHBhc3NjYXNlKyspCi0gICB7Ci0gICAgICBjb25zdCBjaGFyICpzdHIgPSBwYXNzY2FzZS0+c3RyaW5nOwotICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihwYXNzY2FzZS0+c3RyaW5nKTsKLSAgICAgIHN0cnVjdCBnaXRfc2lnbmF0dXJlIHBlcnNvbiA9IHswfTsKKwlmb3IgKHBhc3NjYXNlID0gcGFzc2luZ19zaWduYXR1cmVfY2FzZXM7IHBhc3NjYXNlLT5zdHJpbmcgIT0gTlVMTDsgcGFzc2Nhc2UrKykKKwl7CisJCWNvbnN0IGNoYXIgKnN0ciA9IHBhc3NjYXNlLT5zdHJpbmc7CisJCXNpemVfdCBsZW4gPSBzdHJsZW4ocGFzc2Nhc2UtPnN0cmluZyk7CisJCXN0cnVjdCBnaXRfc2lnbmF0dXJlIHBlcnNvbiA9IHswfTsKIAotICAgICAgY2xfZ2l0X3Bhc3MoZ2l0X3NpZ25hdHVyZV9fcGFyc2UoJnBlcnNvbiwgJnN0ciwgc3RyICsgbGVuLCBwYXNzY2FzZS0+aGVhZGVyLCAnXG4nKSk7Ci0gICAgICBjbF9hc3NlcnRfZXF1YWxfcyhwYXNzY2FzZS0+bmFtZSwgcGVyc29uLm5hbWUpOwotICAgICAgY2xfYXNzZXJ0X2VxdWFsX3MocGFzc2Nhc2UtPmVtYWlsLCBwZXJzb24uZW1haWwpOwotICAgICAgY2xfYXNzZXJ0X2VxdWFsX2koKGludClwYXNzY2FzZS0+dGltZSwgKGludClwZXJzb24ud2hlbi50aW1lKTsKLSAgICAgIGNsX2Fzc2VydF9lcXVhbF9pKHBhc3NjYXNlLT5vZmZzZXQsIHBlcnNvbi53aGVuLm9mZnNldCk7Ci0gICAgICBnaXRfX2ZyZWUocGVyc29uLm5hbWUpOyBnaXRfX2ZyZWUocGVyc29uLmVtYWlsKTsKLSAgIH0KKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NpZ25hdHVyZV9fcGFyc2UoJnBlcnNvbiwgJnN0ciwgc3RyICsgbGVuLCBwYXNzY2FzZS0+aGVhZGVyLCAnXG4nKSk7CisJCWNsX2Fzc2VydF9lcXVhbF9zKHBhc3NjYXNlLT5uYW1lLCBwZXJzb24ubmFtZSk7CisJCWNsX2Fzc2VydF9lcXVhbF9zKHBhc3NjYXNlLT5lbWFpbCwgcGVyc29uLmVtYWlsKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX2koKGludClwYXNzY2FzZS0+dGltZSwgKGludClwZXJzb24ud2hlbi50aW1lKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX2kocGFzc2Nhc2UtPm9mZnNldCwgcGVyc29uLndoZW4ub2Zmc2V0KTsKKwkJZ2l0X19mcmVlKHBlcnNvbi5uYW1lKTsgZ2l0X19mcmVlKHBlcnNvbi5lbWFpbCk7CisJfQogCi0gICBmb3IgKGZhaWxjYXNlID0gZmFpbGluZ19zaWduYXR1cmVfY2FzZXM7IGZhaWxjYXNlLT5zdHJpbmcgIT0gTlVMTDsgZmFpbGNhc2UrKykKLSAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IGZhaWxjYXNlLT5zdHJpbmc7Ci0gICAgICBzaXplX3QgbGVuID0gc3RybGVuKGZhaWxjYXNlLT5zdHJpbmcpOwotICAgICAgZ2l0X3NpZ25hdHVyZSBwZXJzb24gPSB7MH07Ci0gICAgICBjbF9naXRfZmFpbChnaXRfc2lnbmF0dXJlX19wYXJzZSgmcGVyc29uLCAmc3RyLCBzdHIgKyBsZW4sIGZhaWxjYXNlLT5oZWFkZXIsICdcbicpKTsKLSAgICAgIGdpdF9fZnJlZShwZXJzb24ubmFtZSk7IGdpdF9fZnJlZShwZXJzb24uZW1haWwpOwotICAgfQorCWZvciAoZmFpbGNhc2UgPSBmYWlsaW5nX3NpZ25hdHVyZV9jYXNlczsgZmFpbGNhc2UtPnN0cmluZyAhPSBOVUxMOyBmYWlsY2FzZSsrKQorCXsKKwkJY29uc3QgY2hhciAqc3RyID0gZmFpbGNhc2UtPnN0cmluZzsKKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihmYWlsY2FzZS0+c3RyaW5nKTsKKwkJZ2l0X3NpZ25hdHVyZSBwZXJzb24gPSB7MH07CisJCWNsX2dpdF9mYWlsKGdpdF9zaWduYXR1cmVfX3BhcnNlKCZwZXJzb24sICZzdHIsIHN0ciArIGxlbiwgZmFpbGNhc2UtPmhlYWRlciwgJ1xuJykpOworCQlnaXRfX2ZyZWUocGVyc29uLm5hbWUpOyBnaXRfX2ZyZWUocGVyc29uLmVtYWlsKTsKKwl9CiB9CiAKIApAQCAtMzEyLDE3ICszMTIsMTcgQEAKIAogLy8gcXVlcnkgdGhlIGRldGFpbHMgb24gYSBwYXJzZWQgY29tbWl0CiB2b2lkIHRlc3RfY29tbWl0X3BhcnNlX19kZXRhaWxzMCh2b2lkKSB7Ci0gICBzdGF0aWMgY29uc3QgY2hhciAqY29tbWl0X2lkc1tdID0gewotICAgICAgImE0YTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYiLCAvKiAwICovCi0gICAgICAiOWZkNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YSIsIC8qIDEgKi8KLSAgICAgICI0YTIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1IiwgLyogMiAqLwotICAgICAgImM0NzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQiLCAvKiAzICovCi0gICAgICAiODQ5NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OSIsIC8qIDQgKi8KLSAgICAgICI1YjViMDI1YWZiMGI0YzkxM2I0YzMzOGE0MjkzNGEzODYzYmYzNjQ0IiwgLyogNSAqLwotICAgICAgImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLCAvKiA2ICovCi0gICB9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb21taXRfaWRzW10gPSB7CisJCSJhNGE3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmIiwgLyogMCAqLworCQkiOWZkNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YSIsIC8qIDEgKi8KKwkJIjRhMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUiLCAvKiAyICovCisJCSJjNDc4MDBjNzI2NmEyYmUwNGM1NzFjMDRkNWE2NjE0NjkxZWE5OWJkIiwgLyogMyAqLworCQkiODQ5NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OSIsIC8qIDQgKi8KKwkJIjViNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQiLCAvKiA1ICovCisJCSJhNjVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwIiwgLyogNiAqLworCX07CiAJY29uc3Qgc2l6ZV90IGNvbW1pdF9jb3VudCA9IHNpemVvZihjb21taXRfaWRzKSAvIHNpemVvZihjb25zdCBjaGFyICopOwotICAgdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29tbWl0X2NvdW50OyArK2kpIHsKIAkJZ2l0X29pZCBpZDsKQEAgLTM0OSw3ICszNDksNiBAQAogCQljbF9hc3NlcnRfZXF1YWxfcygiU2NvdHQgQ2hhY29uIiwgY29tbWl0dGVyLT5uYW1lKTsKIAkJY2xfYXNzZXJ0X2VxdWFsX3MoInNjaGFjb25AZ21haWwuY29tIiwgY29tbWl0dGVyLT5lbWFpbCk7CiAJCWNsX2Fzc2VydChtZXNzYWdlICE9IE5VTEwpOwotCQljbF9hc3NlcnQoc3RyY2hyKG1lc3NhZ2UsICdcbicpICE9IE5VTEwpOwogCQljbF9hc3NlcnQoY29tbWl0X3RpbWUgPiAwKTsKIAkJY2xfYXNzZXJ0KHBhcmVudHMgPD0gMik7CiAJCWZvciAocCA9IDA7cCA8IHBhcmVudHM7cCsrKSB7CkBAIC0zODIsMTEgKzM4MSwzMyBAQAogXG5cCiBUaGlzIGNvbW1pdCBoYXMgYSBmZXcgTEYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb21taXQgbWVzc2FnZSI7CiAJY29uc3QgY2hhciAqbWVzc2FnZSA9CisiVGhpcyBjb21taXQgaGFzIGEgZmV3IExGIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UiOworCWNvbnN0IGNoYXIgKnJhd19tZXNzYWdlID0KICJcblwKIFxuXAogVGhpcyBjb21taXQgaGFzIGEgZmV3IExGIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UiOworCWNsX2dpdF9wYXNzKHBhcnNlX2NvbW1pdCgmY29tbWl0LCBidWZmZXIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhtZXNzYWdlLCBnaXRfY29tbWl0X21lc3NhZ2UoY29tbWl0KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MocmF3X21lc3NhZ2UsIGdpdF9jb21taXRfbWVzc2FnZV9yYXcoY29tbWl0KSk7CisJZ2l0X2NvbW1pdF9fZnJlZShjb21taXQpOworfQorCit2b2lkIHRlc3RfY29tbWl0X3BhcnNlX19vbmx5X2xmKHZvaWQpCit7CisJZ2l0X2NvbW1pdCAqY29tbWl0OworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9CisidHJlZSAxODEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkXG5cCitwYXJlbnQgZTkwODEwYjhkZjNlODBjNDEzZDkwM2Y2MzE2NDNjNzE2ODg3MTM4ZFxuXAorYXV0aG9yIFZpY2VudCBNYXJ0aSA8dGFub2t1QGdtYWlsLmNvbT4gMTI3Mzg0ODU0NCArMDIwMFxuXAorY29tbWl0dGVyIFZpY2VudCBNYXJ0aSA8dGFub2t1QGdtYWlsLmNvbT4gMTI3Mzg0ODU0NCArMDIwMFxuXAorXG5cCitcblwKK1xuIjsKKwljb25zdCBjaGFyICptZXNzYWdlID0gIiI7CisJY29uc3QgY2hhciAqcmF3X21lc3NhZ2UgPSAiXG5cbiI7CiAKIAljbF9naXRfcGFzcyhwYXJzZV9jb21taXQoJmNvbW1pdCwgYnVmZmVyKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MobWVzc2FnZSwgZ2l0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKHJhd19tZXNzYWdlLCBnaXRfY29tbWl0X21lc3NhZ2VfcmF3KGNvbW1pdCkpOwogCWdpdF9jb21taXRfX2ZyZWUoY29tbWl0KTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29tbWl0L3NpZ25hdHVyZS5jIGIvdGVzdHMvY29tbWl0L3NpZ25hdHVyZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvbW1pdC9zaWduYXR1cmUuYwpyZW5hbWUgdG8gdGVzdHMvY29tbWl0L3NpZ25hdHVyZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbW1pdC93cml0ZS5jIGIvdGVzdHMvY29tbWl0L3dyaXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29tbWl0L3dyaXRlLmMKcmVuYW1lIHRvIHRlc3RzL2NvbW1pdC93cml0ZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9hZGQuYyBiL3Rlc3RzL2NvbmZpZy9hZGQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb25maWcvYWRkLmMKcmVuYW1lIHRvIHRlc3RzL2NvbmZpZy9hZGQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb25maWcvYmFja2VuZC5jIGIvdGVzdHMvY29uZmlnL2JhY2tlbmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb25maWcvYmFja2VuZC5jCnJlbmFtZSB0byB0ZXN0cy9jb25maWcvYmFja2VuZC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9jb25maWdfaGVscGVycy5jIGIvdGVzdHMvY29uZmlnL2NvbmZpZ19oZWxwZXJzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29uZmlnL2NvbmZpZ19oZWxwZXJzLmMKcmVuYW1lIHRvIHRlc3RzL2NvbmZpZy9jb25maWdfaGVscGVycy5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9jb25maWdfaGVscGVycy5oIGIvdGVzdHMvY29uZmlnL2NvbmZpZ19oZWxwZXJzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29uZmlnL2NvbmZpZ19oZWxwZXJzLmgKcmVuYW1lIHRvIHRlc3RzL2NvbmZpZy9jb25maWdfaGVscGVycy5oCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9jb25maWdsZXZlbC5jIGIvdGVzdHMvY29uZmlnL2NvbmZpZ2xldmVsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29uZmlnL2NvbmZpZ2xldmVsLmMKcmVuYW1lIHRvIHRlc3RzL2NvbmZpZy9jb25maWdsZXZlbC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9nbG9iYWwuYyBiL3Rlc3RzL2NvbmZpZy9nbG9iYWwuYwpzaW1pbGFyaXR5IGluZGV4IDY4JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvbmZpZy9nbG9iYWwuYwpyZW5hbWUgdG8gdGVzdHMvY29uZmlnL2dsb2JhbC5jCmluZGV4IDJlY2RmOTcuLmQ1Zjk1ZjUgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY29uZmlnL2dsb2JhbC5jCisrKyBiL3Rlc3RzL2NvbmZpZy9nbG9iYWwuYwpAQCAtNiwxOSArNiwyMiBAQAogewogCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAotCWNsX211c3RfcGFzcyhwX21rZGlyKCJob21lIiwgMDc3NykpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIHBfbWtkaXIoImhvbWUiLCAwNzc3KSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnkoJnBhdGgsICJob21lIiwgTlVMTCkpOwogCWNsX2dpdF9wYXNzKGdpdF9saWJnaXQyX29wdHMoCiAJCUdJVF9PUFRfU0VUX1NFQVJDSF9QQVRILCBHSVRfQ09ORklHX0xFVkVMX0dMT0JBTCwgcGF0aC5wdHIpKTsKIAotCWNsX211c3RfcGFzcyhwX21rZGlyKCJ4ZGciLCAwNzc3KSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnkoJnBhdGgsICJ4ZGciLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgcF9ta2RpcigieGRnIiwgMDc3NykpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIHBfbWtkaXIoInhkZy9naXQiLCAwNzc3KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnkoJnBhdGgsICJ4ZGcvZ2l0IiwgTlVMTCkpOworCWNsX2dpdF9wYXNzKGdpdF9saWJnaXQyX29wdHMoCisJCUdJVF9PUFRfU0VUX1NFQVJDSF9QQVRILCBHSVRfQ09ORklHX0xFVkVMX1hERywgcGF0aC5wdHIpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIHBfbWtkaXIoImV0YyIsIDA3NzcpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9wcmV0dGlmeSgmcGF0aCwgImV0YyIsIE5VTEwpKTsKIAljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKAogCQlHSVRfT1BUX1NFVF9TRUFSQ0hfUEFUSCwgR0lUX0NPTkZJR19MRVZFTF9TWVNURU0sIHBhdGgucHRyKSk7CiAKLQljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKAotCQlHSVRfT1BUX1NFVF9TRUFSQ0hfUEFUSCwgR0lUX0NPTkZJR19MRVZFTF9YREcsIE5VTEwpKTsKLQogCWdpdF9idWZfZnJlZSgmcGF0aCk7CiB9CiAKQEAgLTI2LDYgKzI5LDExIEBACiB7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ybWRpcl9yKCJob21lIiwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpOwogCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfcm1kaXJfcigieGRnIiwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpOworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfcm1kaXJfcigiZXRjIiwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpOworCisJZ2l0X2xpYmdpdDJfb3B0cyhHSVRfT1BUX1NFVF9TRUFSQ0hfUEFUSCwgR0lUX0NPTkZJR19MRVZFTF9TWVNURU0sIE5VTEwpOworCWdpdF9saWJnaXQyX29wdHMoR0lUX09QVF9TRVRfU0VBUkNIX1BBVEgsIEdJVF9DT05GSUdfTEVWRUxfWERHLCBOVUxMKTsKKwlnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfU0VUX1NFQVJDSF9QQVRILCBHSVRfQ09ORklHX0xFVkVMX0dMT0JBTCwgTlVMTCk7CiB9CiAKIHZvaWQgdGVzdF9jb25maWdfZ2xvYmFsX19vcGVuX2dsb2JhbCh2b2lkKQpAQCAtNDgsMTAgKzU2LDcgQEAKIAljb25zdCBjaGFyICp2YWwsICpzdHIgPSAidGVzdHN0cmluZyI7CiAJY29uc3QgY2hhciAqa2V5ID0gInRoaXMudmFyaWFibGUiOwogCi0JcF9zZXRlbnYoIlhER19DT05GSUdfSE9NRSIsICJ4ZGciLCAxKTsKLQotCWNsX211c3RfcGFzcyhwX21rZGlyKCJ4ZGcvZ2l0LyIsIDA3NzcpKTsKLQljbF9naXRfbWtmaWxlKCJ4ZGcvZ2l0L2NvbmZpZyIsICIiKTsKKwljbF9naXRfbWtmaWxlKCJ4ZGcvZ2l0L2NvbmZpZyIsICIjIFhERyBjb25maWdcbltjb3JlXVxuICB0ZXN0ID0gMVxuIik7CiAKIAljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fZGVmYXVsdCgmY2ZnKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX2xldmVsKCZ4ZGcsIGNmZywgR0lUX0NPTkZJR19MRVZFTF9YREcpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbmZpZy9pbmNsdWRlLmMgYi90ZXN0cy9jb25maWcvaW5jbHVkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTU3MzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb25maWcvaW5jbHVkZS5jCkBAIC0wLDAgKzEsMTA5IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiZmlsZW9wcy5oIgorCit2b2lkIHRlc3RfY29uZmlnX2luY2x1ZGVfX3JlbGF0aXZlKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWNvbnN0IGNoYXIgKnN0cjsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgY2xfZml4dHVyZSgiY29uZmlnL2NvbmZpZy1pbmNsdWRlIikpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X3N0cmluZygmc3RyLCBjZmcsICJmb28uYmFyLmJheiIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhzdHIsICJodXp6YWgiKTsKKworCWdpdF9jb25maWdfZnJlZShjZmcpOworfQorCit2b2lkIHRlc3RfY29uZmlnX2luY2x1ZGVfX2Fic29sdXRlKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWNvbnN0IGNoYXIgKnN0cjsKKwlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfcHJpbnRmKCZidWYsICJbaW5jbHVkZV1cbnBhdGggPSAlcy9jb25maWctaW5jbHVkZWQiLCBjbF9maXh0dXJlKCJjb25maWciKSkpOworCisJY2xfZ2l0X21rZmlsZSgiY29uZmlnLWluY2x1ZGUtYWJzb2x1dGUiLCBnaXRfYnVmX2NzdHIoJmJ1ZikpOworCWdpdF9idWZfZnJlZSgmYnVmKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWctaW5jbHVkZS1hYnNvbHV0ZSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X3N0cmluZygmc3RyLCBjZmcsICJmb28uYmFyLmJheiIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhzdHIsICJodXp6YWgiKTsKKworCWdpdF9jb25maWdfZnJlZShjZmcpOworfQorCit2b2lkIHRlc3RfY29uZmlnX2luY2x1ZGVfX2hvbWVkaXIodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJY29uc3QgY2hhciAqc3RyOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2xpYmdpdDJfb3B0cyhHSVRfT1BUX1NFVF9TRUFSQ0hfUEFUSCwgR0lUX0NPTkZJR19MRVZFTF9HTE9CQUwsIGNsX2ZpeHR1cmUoImNvbmZpZyIpKSk7CisJY2xfZ2l0X21rZmlsZSgiY29uZmlnLWluY2x1ZGUtaG9tZWRpciIsICAiW2luY2x1ZGVdXG5wYXRoID0gfi9jb25maWctaW5jbHVkZWQiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy1pbmNsdWRlLWhvbWVkaXIiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9zdHJpbmcoJnN0ciwgY2ZnLCAiZm9vLmJhci5iYXoiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3Moc3RyLCAiaHV6emFoIik7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19pbmNsdWRlX19yZWZyZXNoKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWNvbnN0IGNoYXIgKnN0cjsKKworCWNsX2ZpeHR1cmVfc2FuZGJveCgiY29uZmlnIik7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnLWluY2x1ZGUiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9zdHJpbmcoJnN0ciwgY2ZnLCAiZm9vLmJhci5iYXoiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3Moc3RyLCAiaHV6emFoIik7CisKKwkvKiBDaGFuZ2UgdGhlIGluY2x1ZGVkIGZpbGUgYW5kIHNlZSBpZiB3ZSByZWZyZXNoICovCisJY2xfZ2l0X21rZmlsZSgiY29uZmlnL2NvbmZpZy1pbmNsdWRlZCIsICJbZm9vIFwiYmFyXCJdXG5iYXogPSBodXJyYWgiKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3JlZnJlc2goY2ZnKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9zdHJpbmcoJnN0ciwgY2ZnLCAiZm9vLmJhci5iYXoiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3Moc3RyLCAiaHVycmFoIik7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKKwljbF9maXh0dXJlX2NsZWFudXAoImNvbmZpZyIpOworfQorCisvKiBXZSBuZWVkIHRvIHByZXRlbmQgdGhhdCB0aGUgdmFyaWFibGVzIHdlcmUgZGVmaW5lZCB3aGVyZSB0aGUgZmlsZSB3YXMgaW5jbHVkZWQgKi8KK3ZvaWQgdGVzdF9jb25maWdfaW5jbHVkZV9fb3JkZXJpbmcodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJY29uc3QgY2hhciAqc3RyOworCisJY2xfZ2l0X21rZmlsZSgiaW5jbHVkZWQiLCAiW2ZvbyBcImJhclwiXVxuYmF6ID0gaHVycmFoXG5mcm90eiA9IGhpeWEiKTsKKwljbF9naXRfbWtmaWxlKCJpbmNsdWRpbmciLAorCQkgICAgICAiW2ZvbyBcImJhclwiXVxuZnJvdHogPSBoZWxsb1xuIgorCQkgICAgICAiW2luY2x1ZGVdXG5wYXRoID0gaW5jbHVkZWRcbiIKKwkJICAgICAgIltmb28gXCJiYXJcIl1cbmJheiA9IGh1enphaFxuIik7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJpbmNsdWRpbmciKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9zdHJpbmcoJnN0ciwgY2ZnLCAiZm9vLmJhci5mcm90eiIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhzdHIsICJoaXlhIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCZzdHIsIGNmZywgImZvby5iYXIuYmF6IikpOworCWNsX2Fzc2VydF9lcXVhbF9zKHN0ciwgImh1enphaCIpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKKy8qIFdlIG5lZWQgdG8gcHJldGVuZCB0aGF0IHRoZSB2YXJpYWJsZXMgd2VyZSBkZWZpbmVkIHdoZXJlIHRoZSBmaWxlIHdhcyBpbmNsdWRlZCAqLwordm9pZCB0ZXN0X2NvbmZpZ19pbmNsdWRlX19kZXB0aCh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKworCWNsX2dpdF9ta2ZpbGUoImEiLCAiW2luY2x1ZGVdXG5wYXRoID0gYiIpOworCWNsX2dpdF9ta2ZpbGUoImIiLCAiW2luY2x1ZGVdXG5wYXRoID0gYSIpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiYSIpKTsKKworCXVubGluaygiYSIpOworCXVubGluaygiYiIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY29uZmlnL211bHRpdmFyLmMgYi90ZXN0cy9jb25maWcvbXVsdGl2YXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmRiMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY29uZmlnL211bHRpdmFyLmMKQEAgLTAsMCArMSwyODggQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKl9uYW1lID0gInJlbW90ZS5hYi51cmwiOworCit2b2lkIHRlc3RfY29uZmlnX211bHRpdmFyX19pbml0aWFsaXplKHZvaWQpCit7CisJY2xfZml4dHVyZV9zYW5kYm94KCJjb25maWciKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fY2xlYW51cCh2b2lkKQoreworCWNsX2ZpeHR1cmVfY2xlYW51cCgiY29uZmlnIik7Cit9CisKK3N0YXRpYyBpbnQgbXZfcmVhZF9jYihjb25zdCBnaXRfY29uZmlnX2VudHJ5ICplbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKm4gPSAoaW50ICopIGRhdGE7CisKKwlpZiAoIXN0cmNtcChlbnRyeS0+bmFtZSwgX25hbWUpKQorCQkoKm4pKys7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fZm9yZWFjaCh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwlpbnQgbiA9IDA7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsIGNsX2ZpeHR1cmUoImNvbmZpZy9jb25maWcxMSIpKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2ZvcmVhY2goY2ZnLCBtdl9yZWFkX2NiLCAmbikpOworCWNsX2Fzc2VydChuID09IDIpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3N0YXRpYyBpbnQgY2IoY29uc3QgZ2l0X2NvbmZpZ19lbnRyeSAqZW50cnksIHZvaWQgKmRhdGEpCit7CisJaW50ICpuID0gKGludCAqKSBkYXRhOworCisJR0lUX1VOVVNFRChlbnRyeSk7CisKKwkoKm4pKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZ2V0X211bHRpdmFyX2ZvcmVhY2goCisJZ2l0X2NvbmZpZyAqY2ZnLCBpbnQgZXhwZWN0ZWQsIGludCBleHBlY3RlZF9wYXR0ZXJuZWQpCit7CisJaW50IG4gPSAwOworCisJaWYgKGV4cGVjdGVkID4gMCkgeworCQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOworCQljbF9hc3NlcnRfZXF1YWxfaShleHBlY3RlZCwgbik7CisJfSBlbHNlIHsKKwkJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwKKwkJCWdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBfbmFtZSwgTlVMTCwgY2IsICZuKSk7CisJfQorCisJbiA9IDA7CisKKwlpZiAoZXhwZWN0ZWRfcGF0dGVybmVkID4gMCkgeworCQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsICJleGFtcGxlIiwgY2IsICZuKSk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX3BhdHRlcm5lZCwgbik7CisJfSBlbHNlIHsKKwkJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwKKwkJCWdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBfbmFtZSwgImV4YW1wbGUiLCBjYiwgJm4pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2dldF9tdWx0aXZhcihnaXRfY29uZmlnICpjZmcsIGludCBleHBlY3RlZCkKK3sKKwlnaXRfY29uZmlnX2l0ZXJhdG9yICppdGVyOworCWdpdF9jb25maWdfZW50cnkgKmVudHJ5OworCWludCBuID0gMDsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfbXVsdGl2YXJfaXRlcmF0b3JfbmV3KCZpdGVyLCBjZmcsIF9uYW1lLCBOVUxMKSk7CisKKwl3aGlsZSAoZ2l0X2NvbmZpZ19uZXh0KCZlbnRyeSwgaXRlcikgPT0gMCkKKwkJbisrOworCisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWQsIG4pOworCWdpdF9jb25maWdfaXRlcmF0b3JfZnJlZShpdGVyKTsKKworfQorCit2b2lkIHRlc3RfY29uZmlnX211bHRpdmFyX19nZXQodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7CisJY2hlY2tfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCAyLCAxKTsKKworCS8qIGFkZCBhbm90aGVyIHRoYXQgaGFzIHRoZSBfbmFtZSBlbnRyeSAqLworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfYWRkX2ZpbGVfb25kaXNrKGNmZywgImNvbmZpZy9jb25maWc5IiwgR0lUX0NPTkZJR19MRVZFTF9TWVNURU0sIDEpKTsKKwljaGVja19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIDMsIDIpOworCisJLyogYWRkIGFub3RoZXIgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSBfbmFtZSBlbnRyeSAqLworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfYWRkX2ZpbGVfb25kaXNrKGNmZywgImNvbmZpZy9jb25maWcwIiwgR0lUX0NPTkZJR19MRVZFTF9HTE9CQUwsIDEpKTsKKwljaGVja19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIDMsIDIpOworCisJLyogYWRkIGFub3RoZXIgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSBfbmFtZSBlbnRyeSBhdCB0aGUgZW5kICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19hZGRfZmlsZV9vbmRpc2soY2ZnLCAiY29uZmlnL2NvbmZpZzEiLCBHSVRfQ09ORklHX0xFVkVMX0FQUCwgMSkpOworCWNoZWNrX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgMywgMik7CisKKwkvKiBkcm9wIG9yaWdpbmFsIGZpbGUgKi8KKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2FkZF9maWxlX29uZGlzayhjZmcsICJjb25maWcvY29uZmlnMiIsIEdJVF9DT05GSUdfTEVWRUxfTE9DQUwsIDEpKTsKKwljaGVja19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIDEsIDEpOworCisJLyogZHJvcCBvdGhlciBmaWxlIHdpdGggbWF0Y2ggKi8KKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2FkZF9maWxlX29uZGlzayhjZmcsICJjb25maWcvY29uZmlnMyIsIEdJVF9DT05GSUdfTEVWRUxfU1lTVEVNLCAxKSk7CisJY2hlY2tfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCAwLCAwKTsKKworCS8qIHJlbG9hZCBvcmlnaW5hbCBmaWxlIChhZGQgZGlmZmVyZW50IHBsYWNlIGluIG9yZGVyKSAqLworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfYWRkX2ZpbGVfb25kaXNrKGNmZywgImNvbmZpZy9jb25maWcxMSIsIEdJVF9DT05GSUdfTEVWRUxfU1lTVEVNLCAxKSk7CisJY2hlY2tfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCAyLCAxKTsKKworCWNoZWNrX2dldF9tdWx0aXZhcihjZmcsIDIpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3ZvaWQgdGVzdF9jb25maWdfbXVsdGl2YXJfX2FkZCh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwlpbnQgbjsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjZmcsIF9uYW1lLCAibm9uZXhpc3RhbnQiLCAiZ2l0Oi8vZ2l0Lm90aGVycGxhY2Uub3JnL2xpYmdpdDIiKSk7CisKKwluID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOworCWNsX2Fzc2VydF9lcXVhbF9pKG4sIDMpOworCisJbiA9IDA7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIF9uYW1lLCAib3RoZXJwbGFjZSIsIGNiLCAmbikpOworCWNsX2Fzc2VydF9lcXVhbF9pKG4sIDEpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwkvKiBXZSBrbm93IGl0IHdvcmtzIGluIG1lbW9yeSwgbGV0J3Mgc2VlIGlmIHRoZSBmaWxlIGlzIHdyaXR0ZW4gY29ycmVjdGx5ICovCisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7CisKKwluID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOworCWNsX2Fzc2VydF9lcXVhbF9pKG4sIDMpOworCisJbiA9IDA7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIF9uYW1lLCAib3RoZXJwbGFjZSIsIGNiLCAmbikpOworCWNsX2Fzc2VydF9lcXVhbF9pKG4sIDEpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3ZvaWQgdGVzdF9jb25maWdfbXVsdGl2YXJfX2FkZF9uZXcodm9pZCkKK3sKKwljb25zdCBjaGFyICp2YXIgPSAiYS5icmFuZC5uZXciOworCWdpdF9jb25maWcgKmNmZzsKKwlpbnQgbjsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNmZywgdmFyLCAiIiwgInZhcmlhYmxlIikpOworCW4gPSAwOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCB2YXIsIE5VTEwsIGNiLCAmbikpOworCWNsX2Fzc2VydF9lcXVhbF9pKG4sIDEpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3ZvaWQgdGVzdF9jb25maWdfbXVsdGl2YXJfX3JlcGxhY2Uodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJaW50IG47CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7CisKKwluID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOworCWNsX2Fzc2VydChuID09IDIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY2ZnLCBfbmFtZSwgImdpdGh1YiIsICJnaXQ6Ly9naXQub3RoZXJwbGFjZS5vcmcvbGliZ2l0MiIpKTsKKworCW4gPSAwOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBfbmFtZSwgTlVMTCwgY2IsICZuKSk7CisJY2xfYXNzZXJ0KG4gPT0gMik7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKKworCW4gPSAwOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBfbmFtZSwgTlVMTCwgY2IsICZuKSk7CisJY2xfYXNzZXJ0KG4gPT0gMik7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fcmVwbGFjZV9tdWx0aXBsZSh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwlpbnQgbjsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjZmcsIF9uYW1lLCAiZ2l0Oi8vIiwgImdpdDovL2dpdC5vdGhlcnBsYWNlLm9yZy9saWJnaXQyIikpOworCisJbiA9IDA7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIF9uYW1lLCAib3RoZXJwbGFjZSIsIGNiLCAmbikpOworCWNsX2Fzc2VydF9lcXVhbF9pKG4sIDIpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7CisKKwluID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsICJvdGhlcnBsYWNlIiwgY2IsICZuKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2kobiwgMik7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fZGVsZXRlKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWludCBuOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiY29uZmlnL2NvbmZpZzExIikpOworCisJbiA9IDA7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfbXVsdGl2YXJfZm9yZWFjaChjZmcsIF9uYW1lLCBOVUxMLCBjYiwgJm4pKTsKKwljbF9hc3NlcnQobiA9PSAyKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZGVsZXRlX211bHRpdmFyKGNmZywgX25hbWUsICJnaXRodWIiKSk7CisKKwluID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOworCWNsX2Fzc2VydChuID09IDEpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7CisKKwluID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbikpOworCWNsX2Fzc2VydChuID09IDEpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3ZvaWQgdGVzdF9jb25maWdfbXVsdGl2YXJfX2RlbGV0ZV9tdWx0aXBsZSh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwlpbnQgbjsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZy9jb25maWcxMSIpKTsKKworCW4gPSAwOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBfbmFtZSwgTlVMTCwgY2IsICZuKSk7CisJY2xfYXNzZXJ0KG4gPT0gMik7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2RlbGV0ZV9tdWx0aXZhcihjZmcsIF9uYW1lLCAiZ2l0IikpOworCisJbiA9IDA7CisJY2xfZ2l0X2ZhaWxfd2l0aChnaXRfY29uZmlnX2dldF9tdWx0aXZhcl9mb3JlYWNoKGNmZywgX25hbWUsIE5VTEwsIGNiLCAmbiksIEdJVF9FTk9URk9VTkQpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWcvY29uZmlnMTEiKSk7CisKKwluID0gMDsKKwljbF9naXRfZmFpbF93aXRoKGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBfbmFtZSwgTlVMTCwgY2IsICZuKSwgR0lUX0VOT1RGT1VORCk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19tdWx0aXZhcl9fZGVsZXRlX25vdGZvdW5kKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiY29uZmlnL2NvbmZpZzExIikpOworCisJY2xfZ2l0X2ZhaWxfd2l0aChnaXRfY29uZmlnX2RlbGV0ZV9tdWx0aXZhcihjZmcsICJyZW1vdGUuYWIubm90dXJsIiwgImdpdCIpLCBHSVRfRU5PVEZPVU5EKTsKKworCWdpdF9jb25maWdfZnJlZShjZmcpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb25maWcvbmV3LmMgYi90ZXN0cy9jb25maWcvbmV3LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29uZmlnL25ldy5jCnJlbmFtZSB0byB0ZXN0cy9jb25maWcvbmV3LmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29uZmlnL3JlYWQuYyBiL3Rlc3RzL2NvbmZpZy9yZWFkLmMKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb25maWcvcmVhZC5jCnJlbmFtZSB0byB0ZXN0cy9jb25maWcvcmVhZC5jCmluZGV4IDlmOTQzZDAuLmFiYzA4OGQgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY29uZmlnL3JlYWQuYworKysgYi90ZXN0cy9jb25maWcvcmVhZC5jCkBAIC0xNjQsNiArMTY0LDEzIEBACiAJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CiB9CiAKK3ZvaWQgdGVzdF9jb25maWdfcmVhZF9fc3ltYm9sX2hlYWRlcnModm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCBjbF9maXh0dXJlKCJjb25maWcvY29uZmlnMjAiKSkpOworCWdpdF9jb25maWdfZnJlZShjZmcpOworfQorCiB2b2lkIHRlc3RfY29uZmlnX3JlYWRfX2hlYWRlcl9pbl9sYXN0X2xpbmUodm9pZCkKIHsKIAlnaXRfY29uZmlnICpjZmc7CkBAIC0yNDUsNiArMjUyLDM3IEBACiAJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CiB9CiAKK3ZvaWQgdGVzdF9jb25maWdfcmVhZF9faXRlcmF0b3Iodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJZ2l0X2NvbmZpZ19pdGVyYXRvciAqaXRlcjsKKwlnaXRfY29uZmlnX2VudHJ5ICplbnRyeTsKKwlpbnQgY291bnQsIHJldDsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfbmV3KCZjZmcpKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2FkZF9maWxlX29uZGlzayhjZmcsIGNsX2ZpeHR1cmUoImNvbmZpZy9jb25maWc5IiksCisJCUdJVF9DT05GSUdfTEVWRUxfU1lTVEVNLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19hZGRfZmlsZV9vbmRpc2soY2ZnLCBjbF9maXh0dXJlKCJjb25maWcvY29uZmlnMTUiKSwKKwkJR0lUX0NPTkZJR19MRVZFTF9HTE9CQUwsIDApKTsKKworCWNvdW50ID0gMDsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2l0ZXJhdG9yX25ldygmaXRlciwgY2ZnKSk7CisKKwl3aGlsZSAoKHJldCA9IGdpdF9jb25maWdfbmV4dCgmZW50cnksIGl0ZXIpKSA9PSAwKSB7CisJCWNvdW50Kys7CisJfQorCisJZ2l0X2NvbmZpZ19pdGVyYXRvcl9mcmVlKGl0ZXIpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9JVEVST1ZFUiwgcmV0KTsKKwljbF9hc3NlcnRfZXF1YWxfaSg3LCBjb3VudCk7CisKKwljb3VudCA9IDM7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19pdGVyYXRvcl9uZXcoJml0ZXIsIGNmZykpOworCisJZ2l0X2NvbmZpZ19pdGVyYXRvcl9mcmVlKGl0ZXIpOworCWdpdF9jb25maWdfZnJlZShjZmcpOworfQorCiBzdGF0aWMgaW50IGNvdW50X2NmZ19lbnRyaWVzKGNvbnN0IGdpdF9jb25maWdfZW50cnkgKmVudHJ5LCB2b2lkICpwYXlsb2FkKQogewogCWludCAqY291bnQgPSBwYXlsb2FkOwpAQCAtMjg4LDYgKzMyNiwzOCBAQAogCWdpdF9jb25maWdfZnJlZShjZmcpOwogfQogCitzdGF0aWMgdm9pZCBjaGVja19nbG9iX2l0ZXIoZ2l0X2NvbmZpZyAqY2ZnLCBjb25zdCBjaGFyICpyZWdleHAsIGludCBleHBlY3RlZCkKK3sKKwlnaXRfY29uZmlnX2l0ZXJhdG9yICppdGVyOworCWdpdF9jb25maWdfZW50cnkgKmVudHJ5OworCWludCBjb3VudCwgZXJyb3I7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2l0ZXJhdG9yX2dsb2JfbmV3KCZpdGVyLCBjZmcsIHJlZ2V4cCkpOworCisJY291bnQgPSAwOworCXdoaWxlICgoZXJyb3IgPSBnaXRfY29uZmlnX25leHQoJmVudHJ5LCBpdGVyKSkgPT0gMCkKKwkJY291bnQrKzsKKworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9JVEVST1ZFUiwgZXJyb3IpOworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkLCBjb3VudCk7CisJZ2l0X2NvbmZpZ19pdGVyYXRvcl9mcmVlKGl0ZXIpOworfQorCit2b2lkIHRlc3RfY29uZmlnX3JlYWRfX2l0ZXJhdG9yX2dsb2Iodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsIGNsX2ZpeHR1cmUoImNvbmZpZy9jb25maWc5IikpKTsKKworCWNoZWNrX2dsb2JfaXRlcihjZmcsICJjb3JlLioiLCAzKTsKKwljaGVja19nbG9iX2l0ZXIoY2ZnLCAicmVtb3RlXFwuYWIuKiIsIDIpOworCWNoZWNrX2dsb2JfaXRlcihjZmcsICIuKnVybCQiLCAyKTsKKwljaGVja19nbG9iX2l0ZXIoY2ZnLCAiLipkdW1teS4qIiwgMik7CisJY2hlY2tfZ2xvYl9pdGVyKGNmZywgIi4qbm9tYXRjaC4qIiwgMCk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwogdm9pZCB0ZXN0X2NvbmZpZ19yZWFkX193aGl0ZXNwYWNlX25vdF9yZXF1aXJlZF9hcm91bmRfYXNzaWdubWVudCh2b2lkKQogewogCWdpdF9jb25maWcgKmNmZzsKQEAgLTQzMSwxMCArNTAxLDEwIEBACiAJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFuX2VtcHR5X2NvbmZpZyh2b2lkICp1bnVzZWQpCitzdGF0aWMgdm9pZCBjbGVhbl90ZXN0X2NvbmZpZyh2b2lkICp1bnVzZWQpCiB7CiAJR0lUX1VOVVNFRCh1bnVzZWQpOwotCWNsX2ZpeHR1cmVfY2xlYW51cCgiLi9lbXB0eSIpOworCWNsX2ZpeHR1cmVfY2xlYW51cCgiLi90ZXN0Y29uZmlnIik7CiB9CiAKIHZvaWQgdGVzdF9jb25maWdfcmVhZF9fY2FuX2xvYWRfYW5kX3BhcnNlX2FuX2VtcHR5X2NvbmZpZ19maWxlKHZvaWQpCkBAIC00NDIsMTAgKzUxMiw1OCBAQAogCWdpdF9jb25maWcgKmNmZzsKIAlpbnQgaTsKIAotCWNsX3NldF9jbGVhbnVwKCZjbGVhbl9lbXB0eV9jb25maWcsIE5VTEwpOwotCWNsX2dpdF9ta2ZpbGUoIi4vZW1wdHkiLCAiIik7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiLi9lbXB0eSIpKTsKKwljbF9zZXRfY2xlYW51cCgmY2xlYW5fdGVzdF9jb25maWcsIE5VTEwpOworCWNsX2dpdF9ta2ZpbGUoIi4vdGVzdGNvbmZpZyIsICIiKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICIuL3Rlc3Rjb25maWciKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X2NvbmZpZ19nZXRfaW50MzIoJmksIGNmZywgIm5vcGUubmVpdGhlciIpKTsKIAogCWdpdF9jb25maWdfZnJlZShjZmcpOwogfQorCit2b2lkIHRlc3RfY29uZmlnX3JlYWRfX2NvcnJ1cHRfaGVhZGVyKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCisJY2xfc2V0X2NsZWFudXAoJmNsZWFuX3Rlc3RfY29uZmlnLCBOVUxMKTsKKwljbF9naXRfbWtmaWxlKCIuL3Rlc3Rjb25maWciLCAiW3NuZWFreSBdIFwicXVvdGVkIGNsb3NpbmcgcXVvdGUgbWFya1xcXCIiKTsKKwljbF9naXRfZmFpbChnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICIuL3Rlc3Rjb25maWciKSk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19yZWFkX19jb3JydXB0X2hlYWRlcjIodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisKKwljbF9zZXRfY2xlYW51cCgmY2xlYW5fdGVzdF9jb25maWcsIE5VTEwpOworCWNsX2dpdF9ta2ZpbGUoIi4vdGVzdGNvbmZpZyIsICJbdW5jbG9zZWQgXCJicmFja2V0XCJcbiAgICBsaWIgPSBnaXQyXG4iKTsKKwljbF9naXRfZmFpbChnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICIuL3Rlc3Rjb25maWciKSk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19yZWFkX19jb3JydXB0X2hlYWRlcjModm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisKKwljbF9zZXRfY2xlYW51cCgmY2xlYW5fdGVzdF9jb25maWcsIE5VTEwpOworCWNsX2dpdF9ta2ZpbGUoIi4vdGVzdGNvbmZpZyIsICJbdW5jbG9zZWQgXCJzbGFzaFxcXCJdXG4gICAgbGliID0gZ2l0MlxuIik7CisJY2xfZ2l0X2ZhaWwoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiLi90ZXN0Y29uZmlnIikpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3ZvaWQgdGVzdF9jb25maWdfcmVhZF9fb3ZlcnJpZGVfdmFyaWFibGUodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisJY29uc3QgY2hhciAqc3RyOworCisJY2xfc2V0X2NsZWFudXAoJmNsZWFuX3Rlc3RfY29uZmlnLCBOVUxMKTsKKwljbF9naXRfbWtmaWxlKCIuL3Rlc3Rjb25maWciLCAiW3NvbWVdIHZhciA9IG9uZVxudmFyID0gdHdvIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiLi90ZXN0Y29uZmlnIikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCZzdHIsIGNmZywgInNvbWUudmFyIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKHN0ciwgInR3byIpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy9yZWZyZXNoLmMgYi90ZXN0cy9jb25maWcvcmVmcmVzaC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvbmZpZy9yZWZyZXNoLmMKcmVuYW1lIHRvIHRlc3RzL2NvbmZpZy9yZWZyZXNoLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29uZmlnL3N0cmVzcy5jIGIvdGVzdHMvY29uZmlnL3N0cmVzcy5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29uZmlnL3N0cmVzcy5jCnJlbmFtZSB0byB0ZXN0cy9jb25maWcvc3RyZXNzLmMKaW5kZXggOGNjNjRkMi4uZWVjYTU0ZiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9jb25maWcvc3RyZXNzLmMKKysrIGIvdGVzdHMvY29uZmlnL3N0cmVzcy5jCkBAIC0xMCwxMiArMTAsMTIgQEAKIHsKIAlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKIAotCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIFRFU1RfQ09ORklHLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgVEVTVF9DT05GSUcsIDAsIDA2NjYpKTsKIAogCWdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIltjb2xvcl1cblx0dWkgPSBhdXRvXG4iKTsKIAlnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICJbY29yZV1cblx0ZWRpdG9yID0gXG4iKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSwgMDY2NikpOworCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSkpOwogfQogCiB2b2lkIHRlc3RfY29uZmlnX3N0cmVzc19fY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb25maWcvdmFsaWRrZXluYW1lLmMgYi90ZXN0cy9jb25maWcvdmFsaWRrZXluYW1lLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb25maWcvdmFsaWRrZXluYW1lLmMKcmVuYW1lIHRvIHRlc3RzL2NvbmZpZy92YWxpZGtleW5hbWUuYwppbmRleCAwM2MxM2Q3Li4zMzY5OTczIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2NvbmZpZy92YWxpZGtleW5hbWUuYworKysgYi90ZXN0cy9jb25maWcvdmFsaWRrZXluYW1lLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJR0lUX0VJTlZBTElEU1BFQyk7CiAJY2xfZ2l0X2ZhaWxfd2l0aChnaXRfY29uZmlnX2RlbGV0ZV9lbnRyeShjZmcsIG5hbWUpLAogCQlHSVRfRUlOVkFMSURTUEVDKTsKLQljbF9naXRfZmFpbF93aXRoKGdpdF9jb25maWdfZ2V0X211bHRpdmFyKGNmZywgbmFtZSwgIioiLCBOVUxMLCBOVUxMKSwKKwljbF9naXRfZmFpbF93aXRoKGdpdF9jb25maWdfZ2V0X211bHRpdmFyX2ZvcmVhY2goY2ZnLCBuYW1lLCAiKiIsIE5VTEwsIE5VTEwpLAogCQlHSVRfRUlOVkFMSURTUEVDKTsKIAljbF9naXRfZmFpbF93aXRoKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNmZywgbmFtZSwgIioiLCAiNDIiKSwKIAkJR0lUX0VJTlZBTElEU1BFQyk7CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvbmZpZy93cml0ZS5jIGIvdGVzdHMvY29uZmlnL3dyaXRlLmMKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb25maWcvd3JpdGUuYwpyZW5hbWUgdG8gdGVzdHMvY29uZmlnL3dyaXRlLmMKaW5kZXggZDcwNjEyYS4uMTVmNzUwZCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9jb25maWcvd3JpdGUuYworKysgYi90ZXN0cy9jb25maWcvd3JpdGUuYwpAQCAtMjI5LDYgKzIyOSwzNyBAQAogCWdpdF9jb25maWdfZnJlZShjZmcpOwogfQogCit2b2lkIHRlc3RfY29uZmlnX3dyaXRlX19hZGRfdmFsdWVfd2hpY2hfbmVlZHNfcXVvdGVzKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWNvbnN0IGNoYXIqIHN0cjE7CisJY29uc3QgY2hhciogc3RyMjsKKwljb25zdCBjaGFyKiBzdHIzOworCWNvbnN0IGNoYXIqIHN0cjQ7CisJY29uc3QgY2hhciogc3RyNTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImNvbmZpZzE3IikpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJjb3JlLnN0YXJ0d2l0aHNwYWNlIiwgIiBTb21ldGhpbmciKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNmZywgImNvcmUuZW5kd2l0aHNwYWNlIiwgIlNvbWV0aGluZyAiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNmZywgImNvcmUuY29udGFpbnNjb21tZW50Y2hhcjEiLCAic29tZSN0aGluZyIpKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY2ZnLCAiY29yZS5jb250YWluc2NvbW1lbnRjaGFyMiIsICJzb21lO3RoaW5nIikpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJjb3JlLnN0YXJ0d2hpdGhzYXBjZWFuZGNvbnRhaW5zZG91YmxlcXVvdGUiLCAiIHNvbWVcInRoaW5nIikpOworCWdpdF9jb25maWdfZnJlZShjZmcpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19vcGVuX29uZGlzaygmY2ZnLCAiY29uZmlnMTciKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCZzdHIxLCBjZmcsICJjb3JlLnN0YXJ0d2l0aHNwYWNlIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCIgU29tZXRoaW5nIiwgc3RyMSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCZzdHIyLCBjZmcsICJjb3JlLmVuZHdpdGhzcGFjZSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiU29tZXRoaW5nICIsIHN0cjIpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X3N0cmluZygmc3RyMywgY2ZnLCAiY29yZS5jb250YWluc2NvbW1lbnRjaGFyMSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic29tZSN0aGluZyIsIHN0cjMpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X3N0cmluZygmc3RyNCwgY2ZnLCAiY29yZS5jb250YWluc2NvbW1lbnRjaGFyMiIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic29tZTt0aGluZyIsIHN0cjQpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X3N0cmluZygmc3RyNSwgY2ZnLCAiY29yZS5zdGFydHdoaXRoc2FwY2VhbmRjb250YWluc2RvdWJsZXF1b3RlIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCIgc29tZVwidGhpbmciLCBzdHI1KTsKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwogdm9pZCB0ZXN0X2NvbmZpZ193cml0ZV9fY2FuX3NldF9hX3ZhbHVlX3RvX05VTEwodm9pZCkKIHsKICAgICBnaXRfcmVwb3NpdG9yeSAqcmVwb3NpdG9yeTsKQEAgLTI0MiwzICsyNzMsMzMgQEAKIAogICAgIGNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKIH0KKwordm9pZCB0ZXN0X2NvbmZpZ193cml0ZV9fY2FuX3NldF9hbl9lbXB0eV92YWx1ZSh2b2lkKQoreworCWdpdF9yZXBvc2l0b3J5ICpyZXBvc2l0b3J5OworCWdpdF9jb25maWcgKmNvbmZpZzsKKwljb25zdCBjaGFyICogc3RyOworCisJcmVwb3NpdG9yeSA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvLmdpdCIpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY29uZmlnLCByZXBvc2l0b3J5KSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY29uZmlnLCAiY29yZS5zb21ldmFyIiwgIiIpKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9zdHJpbmcoJnN0ciwgY29uZmlnLCAiY29yZS5zb21ldmFyIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKHN0ciwgIiIpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNvbmZpZyk7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworfQorCit2b2lkIHRlc3RfY29uZmlnX3dyaXRlX191cGRhdGluZ19hX2xvY2tlZF9jb25maWdfZmlsZV9yZXR1cm5zX0VMT0NLRUQodm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX29wZW5fb25kaXNrKCZjZmcsICJjb25maWc5IikpOworCisJY2xfZ2l0X21rZmlsZSgiY29uZmlnOS5sb2NrIiwgIltjb3JlXVxuIik7CisKKwljbF9naXRfZmFpbF93aXRoKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJjb3JlLmR1bXAiLCAiYm9vbSIpLCBHSVRfRUxPQ0tFRCk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcmUvYml0dmVjLmMgYi90ZXN0cy9jb3JlL2JpdHZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDdiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb3JlL2JpdHZlYy5jCkBAIC0wLDAgKzEsNjQgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJiaXR2ZWMuaCIKKworI2lmIDAKK3N0YXRpYyB2b2lkIHByaW50X2JpdHZlYyhnaXRfYml0dmVjICpidikKK3sKKwlpbnQgYjsKKworCWlmICghYnYtPmxlbmd0aCkgeworCQlmb3IgKGIgPSA2MzsgYiA+PSAwOyAtLWIpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVkIiwgKGJ2LT51LmJpdHMgJiAoMXVsIDw8IGIpKSA/IDEgOiAwKTsKKwl9IGVsc2UgeworCQlmb3IgKGIgPSBidi0+bGVuZ3RoICogODsgYiA+PSAwOyAtLWIpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVkIiwgKGJ2LT51LnB0cltiID4+IDNdICYgKGIgJiAweDBmZikpID8gMSA6IDApOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgc2V0X3NvbWVfYml0cyhnaXRfYml0dmVjICpidiwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworCQlpZiAoaSAlIDMgPT0gMCB8fCBpICUgNyA9PSAwKQorCQkJZ2l0X2JpdHZlY19zZXQoYnYsIGksIHRydWUpOworCX0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfc29tZV9iaXRzKGdpdF9iaXR2ZWMgKmJ2LCBzaXplX3QgbGVuZ3RoKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorCQljbF9hc3NlcnRfZXF1YWxfYihpICUgMyA9PSAwIHx8IGkgJSA3ID09IDAsIGdpdF9iaXR2ZWNfZ2V0KGJ2LCBpKSk7Cit9CisKK3ZvaWQgdGVzdF9jb3JlX2JpdHZlY19fMCh2b2lkKQoreworCWdpdF9iaXR2ZWMgYnY7CisKKwljbF9naXRfcGFzcyhnaXRfYml0dmVjX2luaXQoJmJ2LCAzMikpOworCXNldF9zb21lX2JpdHMoJmJ2LCAxNik7CisJY2hlY2tfc29tZV9iaXRzKCZidiwgMTYpOworCWdpdF9iaXR2ZWNfY2xlYXIoJmJ2KTsKKwlzZXRfc29tZV9iaXRzKCZidiwgMzIpOworCWNoZWNrX3NvbWVfYml0cygmYnYsIDMyKTsKKwlnaXRfYml0dmVjX2NsZWFyKCZidik7CisJc2V0X3NvbWVfYml0cygmYnYsIDY0KTsKKwljaGVja19zb21lX2JpdHMoJmJ2LCA2NCk7CisJZ2l0X2JpdHZlY19mcmVlKCZidik7CisKKwljbF9naXRfcGFzcyhnaXRfYml0dmVjX2luaXQoJmJ2LCAxMjgpKTsKKwlzZXRfc29tZV9iaXRzKCZidiwgMzIpOworCWNoZWNrX3NvbWVfYml0cygmYnYsIDMyKTsKKwlzZXRfc29tZV9iaXRzKCZidiwgMTI4KTsKKwljaGVja19zb21lX2JpdHMoJmJ2LCAxMjgpOworCWdpdF9iaXR2ZWNfZnJlZSgmYnYpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2JpdHZlY19pbml0KCZidiwgNDAwMCkpOworCXNldF9zb21lX2JpdHMoJmJ2LCA0MDAwKTsKKwljaGVja19zb21lX2JpdHMoJmJ2LCA0MDAwKTsKKwlnaXRfYml0dmVjX2ZyZWUoJmJ2KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS9idWZmZXIuYyBiL3Rlc3RzL2NvcmUvYnVmZmVyLmMKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL2J1ZmZlci5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL2J1ZmZlci5jCmluZGV4IDNkODIyMWUuLjExZDE3M2QgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY29yZS9idWZmZXIuYworKysgYi90ZXN0cy9jb3JlL2J1ZmZlci5jCkBAIC03MTgsNiArNzE4LDggQEAKIAlzaXplX3QgZGF0YTFsZW4gPSAzMTsKIAljaGFyICpkYXRhMiA9ICJJbnRlcm5hbCBOVUwhISFcMDAwXG5cbkkgc2VlIHlvdSFcbiI7CiAJc2l6ZV90IGRhdGEybGVuID0gMjk7CisJY2hhciAqZGF0YTMgPSAiXHhlZlx4YmJceGJmVGhpcyBpcyBVVEYtOCB3aXRoIGEgQk9NLlxuIjsKKwlzaXplX3QgZGF0YTNsZW4gPSAyMDsKIAlnaXRfYnVmIGI7CiAKIAliLnB0ciA9IGRhdGEwOyBiLnNpemUgPSBiLmFzaXplID0gZGF0YTBsZW47CkBAIC03MzEsMTMgKzczMywxOCBAQAogCWIucHRyID0gZGF0YTI7IGIuc2l6ZSA9IGIuYXNpemUgPSBkYXRhMmxlbjsKIAljbF9hc3NlcnQoZ2l0X2J1Zl90ZXh0X2lzX2JpbmFyeSgmYikpOwogCWNsX2Fzc2VydChnaXRfYnVmX3RleHRfY29udGFpbnNfbnVsKCZiKSk7CisKKwliLnB0ciA9IGRhdGEzOyBiLnNpemUgPSBiLmFzaXplID0gZGF0YTNsZW47CisJY2xfYXNzZXJ0KCFnaXRfYnVmX3RleHRfaXNfYmluYXJ5KCZiKSk7CisJY2xfYXNzZXJ0KCFnaXRfYnVmX3RleHRfY29udGFpbnNfbnVsKCZiKSk7CiB9CiAKICNkZWZpbmUgU0lNSUxBUklUWV9URVNUX0RBVEFfMSBcCi0JInRlc3QgZGF0YVxucmlnaHQgaGVyZVxuaW5saW5lXG50YWRhXG5uZWVkcyBtb3JlIGRhdGFcbmxvdHMgb2YgZGF0YVxuIiBcCi0JImlzIHRoaXMgZW5vdWdoP1xudGhlcmUgaGFzIHRvIGJlIGVub3VnaCBkYXRhIHRvIGZpbGwgdGhlIGhhc2ggYXJyYXkhXG4iIFwKLQkiQXBwYXJlbnRseSAxOTEgYnl0ZXMgaXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGRhdGEgbmVlZGVkLlxuSGVyZSBnb2VzIVxuIiBcCi0JIkxldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgcGxlbnR5IHRvIGdvIHdpdGggaGVyZS5cbiAgIHNtaWxlICAgXG4iCisJIjAwMFxuMDAxXG4wMDJcbjAwM1xuMDA0XG4wMDVcbjAwNlxuMDA3XG4wMDhcbjAwOVxuIiBcCisJIjAxMFxuMDExXG4wMTJcbjAxM1xuMDE0XG4wMTVcbjAxNlxuMDE3XG4wMThcbjAxOVxuIiBcCisJIjAyMFxuMDIxXG4wMjJcbjAyM1xuMDI0XG4wMjVcbjAyNlxuMDI3XG4wMjhcbjAyOVxuIiBcCisJIjAzMFxuMDMxXG4wMzJcbjAzM1xuMDM0XG4wMzVcbjAzNlxuMDM3XG4wMzhcbjAzOVxuIiBcCisJIjA0MFxuMDQxXG4wNDJcbjA0M1xuMDQ0XG4wNDVcbjA0NlxuMDQ3XG4wNDhcbjA0OVxuIgogCiB2b2lkIHRlc3RfY29yZV9idWZmZXJfX3NpbWlsYXJpdHlfbWV0cmljKHZvaWQpCiB7CkBAIC03NjEsMTUgKzc2OCwxNyBAQAogCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCBTSU1JTEFSSVRZX1RFU1RfREFUQV8xKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2hhc2hzaWdfY3JlYXRlKCZhLCBidWYucHRyLCBidWYuc2l6ZSwgR0lUX0hBU0hTSUdfTk9STUFMKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZidWYsCi0JCSJUZXN0IGRhdGFcbnJpZ2h0IGhlcmVcbmlubGluZVxudGFkYVxubmVlZHMgbW9yZSBkYXRhXG5sb3RzIG9mIGRhdGFcbiIKLQkJImlzIHRoaXMgZW5vdWdoP1xudGhlcmUgaGFzIHRvIGJlIGVub3VnaCBkYXRhIHRvIGZpbGwgdGhlIGhhc2ggYXJyYXkhXG4iCi0JCSJBcHBhcmVudGx5IDE5MSBieXRlcyBpcyB0aGUgbWluaW11bSBhbW91bnQgb2YgZGF0YSBuZWVkZWQuXG5IZXJlIGdvZXMhXG4iCi0JCSAiTGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBwbGVudHkgdG8gZ28gd2l0aCBoZXJlLlxuICAgc21pbGUgICBcbiIpKTsKKwkJIjAwMFxuMDAxXG4wMDJcbjAwM1xuMDA0XG4wMDVcbjAwNlxuMDA3XG4wMDhcbjAwOVxuIiBcCisJCSIwMTBcbjAxMVxuMDEyXG4wMTNcbjAxNFxuMDE1XG4wMTZcbjAxN1xuMDE4XG4wMTlcbiIgXAorCQkieDAyMHhcbjAyMVxuMDIyXG4wMjNcbjAyNFxuMDI1XG4wMjZcbjAyN1xuMDI4XG4wMjlcbiIgXAorCQkiMDMwXG4wMzFcbjAzMlxuMDMzXG4wMzRcbjAzNVxuMDM2XG4wMzdcbjAzOFxuMDM5XG4iIFwKKwkJIjA0MFxuMDQxXG4wNDJcbjA0M1xuMDQ0XG4wNDVcbjA0NlxuMDQ3XG4wNDhcbjA0OVxuIgorCQkpKTsKIAljbF9naXRfcGFzcyhnaXRfaGFzaHNpZ19jcmVhdGUoJmIsIGJ1Zi5wdHIsIGJ1Zi5zaXplLCBHSVRfSEFTSFNJR19OT1JNQUwpKTsKIAogCXNpbSA9IGdpdF9oYXNoc2lnX2NvbXBhcmUoYSwgYik7CiAKLQljbF9hc3NlcnQoOTUgPCBzaW0gJiYgc2ltIDwgMTAwKTsgLyogZXhwZWN0ID45NSUgc2ltaWxhcml0eSAqLworCWNsX2Fzc2VydF9pbl9yYW5nZSg5NSwgc2ltLCAxMDApOyAvKiBleHBlY3QgPjk1JSBzaW1pbGFyaXR5ICovCiAKIAlnaXRfaGFzaHNpZ19mcmVlKGEpOwogCWdpdF9oYXNoc2lnX2ZyZWUoYik7CkBAIC03NzksMTIgKzc4OCwxMyBAQAogCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCBTSU1JTEFSSVRZX1RFU1RfREFUQV8xKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2hhc2hzaWdfY3JlYXRlKCZhLCBidWYucHRyLCBidWYuc2l6ZSwgR0lUX0hBU0hTSUdfTk9STUFMKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZidWYsIFNJTUlMQVJJVFlfVEVTVF9EQVRBXzEKLQkJImFuZCBpZiBJIGFkZCBzb21lIG1vcmUsIGl0IHNob3VsZCBzdGlsbCBiZSBwcmV0dHkgc2ltaWxhciwgeWVzP1xuIikpOworCQkiMDUwXG4wNTFcbjA1MlxuMDUzXG4wNTRcbjA1NVxuMDU2XG4wNTdcbjA1OFxuMDU5XG4iKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2hhc2hzaWdfY3JlYXRlKCZiLCBidWYucHRyLCBidWYuc2l6ZSwgR0lUX0hBU0hTSUdfTk9STUFMKSk7CiAKIAlzaW0gPSBnaXRfaGFzaHNpZ19jb21wYXJlKGEsIGIpOworCS8qIDIwJSBsaW5lcyBhZGRlZCB+PSAxMCUgbGluZXMgY2hhbmdlZCAqLwogCi0JY2xfYXNzZXJ0KDcwIDwgc2ltICYmIHNpbSA8IDgwKTsgLyogZXhwZWN0IGluIHRoZSA3MC04MCUgc2ltaWxhcml0eSByYW5nZSAqLworCWNsX2Fzc2VydF9pbl9yYW5nZSg4NSwgc2ltLCA5NSk7IC8qIGV4cGVjdCBzaW1pbGFyaXR5IGFyb3VuZCA5MCUgKi8KIAogCWdpdF9oYXNoc2lnX2ZyZWUoYSk7CiAJZ2l0X2hhc2hzaWdfZnJlZShiKTsKQEAgLTc5NCwxNSArODA0LDE5IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZidWYsIFNJTUlMQVJJVFlfVEVTVF9EQVRBXzEpKTsKIAljbF9naXRfcGFzcyhnaXRfaGFzaHNpZ19jcmVhdGUoJmEsIGJ1Zi5wdHIsIGJ1Zi5zaXplLCBHSVRfSEFTSFNJR19OT1JNQUwpKTsKIAljbF9naXRfcGFzcyhnaXRfYnVmX3NldHMoJmJ1ZiwKLQkJInRlc3QgZGF0YVxucmlnaHQgaGVyZVxuaW5saW5lXG50YWRhXG5uZWVkcyBtb3JlIGRhdGFcbmxvdHMgb2YgZGF0YVxuIgotCQkiaXMgdGhpcyBlbm91Z2g/XG50aGVyZSBoYXMgdG8gYmUgZW5vdWdoIGRhdGEgdG8gZmlsbCB0aGUgaGFzaCBhcnJheSFcbiIKLQkJIm9rYXksIHRoYXQncyBoYWxmIHRoZSBvcmlnaW5hbFxud2hhdCBlbHNlIGNhbiB3ZSBhZGQ/XG5tb3JlIGRhdGFcbiIKLQkJICJvbmUgbW9yZSBsaW5lIHdpbGwgY29tcGxldGUgdGhpc1xuc2hvcnRcbmxpbmVzXG5kb24ndFxubWF0dGVyXG4iKSk7CisJCSIwMDBcbjAwMVxuMDAyXG4wMDNcbjAwNFxuMDA1XG4wMDZcbjAwN1xuMDA4XG4wMDlcbiIgXAorCQkiMDEwXG4wMTFcbjAxMlxuMDEzXG4wMTRcbjAxNVxuMDE2XG4wMTdcbjAxOFxuMDE5XG4iIFwKKwkJIjAyMHhcbjAyMVxuMDIyXG4wMjNcbjAyNFxuIiBcCisJCSJ4MjVcbngyNlxueDI3XG54MjhcbngyOVxuIiBcCisJCSJ4MzBcbngzMVxueDMyXG54MzNcbngzNFxueDM1XG54MzZcbngzN1xueDM4XG54MzlcbiIgXAorCQkieDQwXG54NDFcbng0MlxueDQzXG54NDRcbng0NVxueDQ2XG54NDdcbng0OFxueDQ5XG4iCisJCSkpOwogCWNsX2dpdF9wYXNzKGdpdF9oYXNoc2lnX2NyZWF0ZSgmYiwgYnVmLnB0ciwgYnVmLnNpemUsIEdJVF9IQVNIU0lHX05PUk1BTCkpOwogCiAJc2ltID0gZ2l0X2hhc2hzaWdfY29tcGFyZShhLCBiKTsKKwkvKiA1MCUgbGluZXMgY2hhbmdlZCAqLwogCi0JY2xfYXNzZXJ0KDQwIDwgc2ltICYmIHNpbSA8IDYwKTsgLyogZXhwZWN0IGluIHRoZSA0MC02MCUgc2ltaWxhcml0eSByYW5nZSAqLworCWNsX2Fzc2VydF9pbl9yYW5nZSg0MCwgc2ltLCA2MCk7IC8qIGV4cGVjdCBpbiB0aGUgNDAtNjAlIHNpbWlsYXJpdHkgcmFuZ2UgKi8KIAogCWdpdF9oYXNoc2lnX2ZyZWUoYSk7CiAJZ2l0X2hhc2hzaWdfZnJlZShiKTsKQEAgLTg5MSw3ICs5MDUsNyBAQAogCQkJCQlpZiAoaSA9PSBqKQogCQkJCQkJY2xfYXNzZXJ0X2VxdWFsX2koMTAwLCBzaW0pOwogCQkJCQllbHNlCi0JCQkJCQljbF9hc3NlcnQoc2ltIDwgMzApOyAvKiBleHBlY3QgcHJldHR5IGRpZmZlcmVudCAqLworCQkJCQkJY2xfYXNzZXJ0X2luX3JhbmdlKDAsIHNpbSwgMzApOyAvKiBwcmV0dHkgZGlmZmVyZW50ICovCiAJCQkJfSBlbHNlIHsKIAkJCQkJY2xfYXNzZXJ0X2VxdWFsX2koMTAwLCBzaW0pOwogCQkJCX0KQEAgLTkwNSw2ICs5MTksOCBAQAogCWdpdF9idWZfZnJlZSgmYnVmKTsKIH0KIAorI2luY2x1ZGUgIi4uL2ZpbHRlci9jcmxmLmgiCisKICNkZWZpbmUgY2hlY2tfYnVmKGV4cGVjdGVkLGJ1ZikgZG8geyBcCiAJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQsIGJ1Zi5wdHIpOyBcCiAJY2xfYXNzZXJ0X2VxdWFsX3N6KHN0cmxlbihleHBlY3RlZCksIGJ1Zi5zaXplKTsgfSB3aGlsZSAoMCkKQEAgLTkyMCwxNiArOTM2LDE2IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl90ZXh0X2xmX3RvX2NybGYoJnRndCwgJnNyYykpOwogCWNoZWNrX2J1ZigibGZcclxubGZcclxubGZcclxubGZcclxuIiwgdGd0KTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTk9URk9VTkQsIGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKCZ0Z3QsICZzcmMpKTsKLQkvKiBubyBjb252ZXJzaW9uIG5lZWRlZCBpZiBhbGwgTEZzIGFscmVhZHkgKi8KKwljbF9naXRfcGFzcyhnaXRfYnVmX3RleHRfY3JsZl90b19sZigmdGd0LCAmc3JjKSk7CisJY2hlY2tfYnVmKHNyYy5wdHIsIHRndCk7CiAKIAlnaXRfYnVmX3NldHMoJnNyYywgIlxubGZcbmxmXG5sZlxubGZcbmxmIik7CiAKIAljbF9naXRfcGFzcyhnaXRfYnVmX3RleHRfbGZfdG9fY3JsZigmdGd0LCAmc3JjKSk7CiAJY2hlY2tfYnVmKCJcclxubGZcclxubGZcclxubGZcclxubGZcclxubGYiLCB0Z3QpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X2J1Zl90ZXh0X2NybGZfdG9fbGYoJnRndCwgJnNyYykpOwotCS8qIG5vIGNvbnZlcnNpb24gbmVlZGVkIGlmIGFsbCBMRnMgYWxyZWFkeSAqLworCWNsX2dpdF9wYXNzKGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKCZ0Z3QsICZzcmMpKTsKKwljaGVja19idWYoc3JjLnB0ciwgdGd0KTsKIAogCS8qIENSTEYgc291cmNlICovCiAKQEAgLTk3OSwxMCArOTk1LDQ1IEBACiAJY2hlY2tfYnVmKCJccmNybGZcbmxmXG5sZlxuY3JccmNybGZcbmxmXG5jclxyIiwgdGd0KTsKIAogCWdpdF9idWZfc2V0cygmc3JjLCAiXHJjclxyIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X2J1Zl90ZXh0X2xmX3RvX2NybGYoJnRndCwgJnNyYykpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfdGV4dF9sZl90b19jcmxmKCZ0Z3QsICZzcmMpKTsKKwljaGVja19idWYoc3JjLnB0ciwgdGd0KTsKIAljbF9naXRfcGFzcyhnaXRfYnVmX3RleHRfY3JsZl90b19sZigmdGd0LCAmc3JjKSk7CiAJY2hlY2tfYnVmKCJccmNyXHIiLCB0Z3QpOwogCiAJZ2l0X2J1Zl9mcmVlKCZzcmMpOwogCWdpdF9idWZfZnJlZSgmdGd0KTsKKworCS8qIGJsb2IgY29ycmVzcG9uZGVuY2UgdGVzdHMgKi8KKworCWdpdF9idWZfc2V0cygmc3JjLCBBTExfQ1JMRl9URVhUX1JBVyk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl90ZXh0X2xmX3RvX2NybGYoJnRndCwgJnNyYykpOworCWNoZWNrX2J1ZihBTExfQ1JMRl9URVhUX0FTX0NSTEYsIHRndCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl90ZXh0X2NybGZfdG9fbGYoJnRndCwgJnNyYykpOworCWNoZWNrX2J1ZihBTExfQ1JMRl9URVhUX0FTX0xGLCB0Z3QpOworCWdpdF9idWZfZnJlZSgmc3JjKTsKKwlnaXRfYnVmX2ZyZWUoJnRndCk7CisKKwlnaXRfYnVmX3NldHMoJnNyYywgQUxMX0xGX1RFWFRfUkFXKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX3RleHRfbGZfdG9fY3JsZigmdGd0LCAmc3JjKSk7CisJY2hlY2tfYnVmKEFMTF9MRl9URVhUX0FTX0NSTEYsIHRndCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl90ZXh0X2NybGZfdG9fbGYoJnRndCwgJnNyYykpOworCWNoZWNrX2J1ZihBTExfTEZfVEVYVF9BU19MRiwgdGd0KTsKKwlnaXRfYnVmX2ZyZWUoJnNyYyk7CisJZ2l0X2J1Zl9mcmVlKCZ0Z3QpOworCisJZ2l0X2J1Zl9zZXRzKCZzcmMsIE1PUkVfQ1JMRl9URVhUX1JBVyk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl90ZXh0X2xmX3RvX2NybGYoJnRndCwgJnNyYykpOworCWNoZWNrX2J1ZihNT1JFX0NSTEZfVEVYVF9BU19DUkxGLCB0Z3QpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKCZ0Z3QsICZzcmMpKTsKKwljaGVja19idWYoTU9SRV9DUkxGX1RFWFRfQVNfTEYsIHRndCk7CisJZ2l0X2J1Zl9mcmVlKCZzcmMpOworCWdpdF9idWZfZnJlZSgmdGd0KTsKKworCWdpdF9idWZfc2V0cygmc3JjLCBNT1JFX0xGX1RFWFRfUkFXKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX3RleHRfbGZfdG9fY3JsZigmdGd0LCAmc3JjKSk7CisJY2hlY2tfYnVmKE1PUkVfTEZfVEVYVF9BU19DUkxGLCB0Z3QpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfdGV4dF9jcmxmX3RvX2xmKCZ0Z3QsICZzcmMpKTsKKwljaGVja19idWYoTU9SRV9MRl9URVhUX0FTX0xGLCB0Z3QpOworCWdpdF9idWZfZnJlZSgmc3JjKTsKKwlnaXRfYnVmX2ZyZWUoJnRndCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9jb3JlL2NhcHMuYyBiL3Rlc3RzL2NvcmUvY2Fwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTUxOGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb3JlL2NhcHMuYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisKK3ZvaWQgdGVzdF9jb3JlX2NhcHNfXzAodm9pZCkKK3sKKwlpbnQgbWFqb3IsIG1pbm9yLCByZXYsIGNhcHM7CisKKwlnaXRfbGliZ2l0Ml92ZXJzaW9uKCZtYWpvciwgJm1pbm9yLCAmcmV2KTsKKwljbF9hc3NlcnRfZXF1YWxfaShMSUJHSVQyX1ZFUl9NQUpPUiwgbWFqb3IpOworCWNsX2Fzc2VydF9lcXVhbF9pKExJQkdJVDJfVkVSX01JTk9SLCBtaW5vcik7CisJY2xfYXNzZXJ0X2VxdWFsX2koTElCR0lUMl9WRVJfUkVWSVNJT04sIHJldik7CisKKwljYXBzID0gZ2l0X2xpYmdpdDJfY2FwYWJpbGl0aWVzKCk7CisKKyNpZmRlZiBHSVRfVEhSRUFEUworCWNsX2Fzc2VydCgoY2FwcyAmIEdJVF9DQVBfVEhSRUFEUykgIT0gMCk7CisjZWxzZQorCWNsX2Fzc2VydCgoY2FwcyAmIEdJVF9DQVBfVEhSRUFEUykgPT0gMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoR0lUX1NTTCkgfHwgZGVmaW5lZChHSVRfV0lOSFRUUCkKKwljbF9hc3NlcnQoKGNhcHMgJiBHSVRfQ0FQX0hUVFBTKSAhPSAwKTsKKyNlbHNlCisJY2xfYXNzZXJ0KChjYXBzICYgR0lUX0NBUF9IVFRQUykgPT0gMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoR0lUX1NTSCkKKwljbF9hc3NlcnQoKGNhcHMgJiBHSVRfQ0FQX1NTSCkgIT0gMCk7CisjZWxzZQorCWNsX2Fzc2VydCgoY2FwcyAmIEdJVF9DQVBfU1NIKSA9PSAwKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL2NvcHkuYyBiL3Rlc3RzL2NvcmUvY29weS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvY29weS5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL2NvcHkuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL2RpcmVudC5jIGIvdGVzdHMvY29yZS9kaXJlbnQuYwpzaW1pbGFyaXR5IGluZGV4IDc4JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvZGlyZW50LmMKcmVuYW1lIHRvIHRlc3RzL2NvcmUvZGlyZW50LmMKaW5kZXggNWE3ODU5ZC4uZjE3MjYwMyAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9jb3JlL2RpcmVudC5jCisrKyBiL3Rlc3RzL2NvcmUvZGlyZW50LmMKQEAgLTg4LDE0ICs4OCw2IEBACiAJcmV0dXJuIEdJVF9FUlJPUjsKIH0KIAotc3RhdGljIGludCBkb250X2NhbGxfbWUodm9pZCAqc3RhdGUsIGdpdF9idWYgKnBhdGgpCi17Ci0JR0lUX1VOVVNFRChzdGF0ZSk7Ci0JR0lUX1VOVVNFRChwYXRoKTsKLQlyZXR1cm4gR0lUX0VSUk9SOwotfQotCi0KIAogc3RhdGljIG5hbWVfZGF0YSBkb3RfbmFtZXNbXSA9IHsKIAl7IDAsICIuL2EiIH0sCkBAIC0xMTUsOSArMTA3LDcgQEAKIAljbF9zZXRfY2xlYW51cCgmZGlyZW50X2NsZWFudXBfX2NiLCAmZG90KTsKIAlzZXR1cCgmZG90KTsKIAotCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2RpcmVhY2goJmRvdC5wYXRoLAotCQkJCQlvbmVfZW50cnksCi0JCQkJCSZkb3QpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9kaXJlYWNoKCZkb3QucGF0aCwgMCwgb25lX2VudHJ5LCAmZG90KSk7CiAKIAljaGVja19jb3VudHMoJmRvdCk7CiB9CkBAIC0xNDEsOSArMTMxLDcgQEAKIAljbF9zZXRfY2xlYW51cCgmZGlyZW50X2NsZWFudXBfX2NiLCAmc3ViKTsKIAlzZXR1cCgmc3ViKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2RpcmVhY2goJnN1Yi5wYXRoLAotCQkJCQlvbmVfZW50cnksCi0JCQkJCSZzdWIpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9kaXJlYWNoKCZzdWIucGF0aCwgMCwgb25lX2VudHJ5LCAmc3ViKSk7CiAKIAljaGVja19jb3VudHMoJnN1Yik7CiB9CkBAIC0xNjEsOSArMTQ5LDcgQEAKIAljbF9zZXRfY2xlYW51cCgmZGlyZW50X2NsZWFudXBfX2NiLCAmc3ViX3NsYXNoKTsKIAlzZXR1cCgmc3ViX3NsYXNoKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2RpcmVhY2goJnN1Yl9zbGFzaC5wYXRoLAotCQkJCQlvbmVfZW50cnksCi0JCQkJCSZzdWJfc2xhc2gpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9kaXJlYWNoKCZzdWJfc2xhc2gucGF0aCwgMCwgb25lX2VudHJ5LCAmc3ViX3NsYXNoKSk7CiAKIAljaGVja19jb3VudHMoJnN1Yl9zbGFzaCk7CiB9CkBAIC0xODQsMTYgKzE3MCwxMiBAQAogCWNsX3NldF9jbGVhbnVwKCZkaXJlbnRfY2xlYW51cF9fY2IsICZlbXB0eSk7CiAJc2V0dXAoJmVtcHR5KTsKIAotCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2RpcmVhY2goJmVtcHR5LnBhdGgsCi0JCQkJCW9uZV9lbnRyeSwKLQkJCQkJJmVtcHR5KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfZGlyZWFjaCgmZW1wdHkucGF0aCwgMCwgb25lX2VudHJ5LCAmZW1wdHkpKTsKIAogCWNoZWNrX2NvdW50cygmZW1wdHkpOwogCiAJLyogbWFrZSBzdXJlIGNhbGxiYWNrIG5vdCBjYWxsZWQgKi8KLQljbF9naXRfcGFzcyhnaXRfcGF0aF9kaXJlYWNoKCZlbXB0eS5wYXRoLAotCQkJCQlkb250X2NhbGxfbWUsCi0JCQkJCSZlbXB0eSkpOworCWNsX2Fzc2VydChnaXRfcGF0aF9pc19lbXB0eV9kaXIoZW1wdHkucGF0aC5wdHIpKTsKIH0KIAogc3RhdGljIG5hbWVfZGF0YSBvZGRfbmFtZXNbXSA9IHsKQEAgLTIxNiw5ICsxOTgsNyBAQAogCWNsX3NldF9jbGVhbnVwKCZkaXJlbnRfY2xlYW51cF9fY2IsICZvZGQpOwogCXNldHVwKCZvZGQpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfZGlyZWFjaCgmb2RkLnBhdGgsCi0JCQkJCW9uZV9lbnRyeSwKLQkJCQkJJm9kZCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2RpcmVhY2goJm9kZC5wYXRoLCAwLCBvbmVfZW50cnksICZvZGQpKTsKIAogCWNoZWNrX2NvdW50cygmb2RkKTsKIH0KQEAgLTIzMSw1ICsyMTEsMjYgQEAKIAliaWdfZmlsZW5hbWVbRklMRU5BTUVfTUFYXSA9IDA7CiAKIAljbF9tdXN0X2ZhaWwocF9jcmVhdChiaWdfZmlsZW5hbWUsIDA2NjYpKTsKKwogCWdpdF9fZnJlZShiaWdfZmlsZW5hbWUpOwogfQorCit2b2lkIHRlc3RfY29yZV9kaXJlbnRfX2VtcHR5X2Rpcih2b2lkKQoreworCWNsX211c3RfcGFzcyhwX21rZGlyKCJlbXB0eV9kaXIiLCAwNzc3KSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoX2lzX2VtcHR5X2RpcigiZW1wdHlfZGlyIikpOworCisJY2xfZ2l0X21rZmlsZSgiZW1wdHlfZGlyL2NvbnRlbnQiLCAid2hhdGV2ZXJcbiIpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhfaXNfZW1wdHlfZGlyKCJlbXB0eV9kaXIiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9pc19lbXB0eV9kaXIoImVtcHR5X2Rpci9jb250ZW50IikpOworCisJY2xfbXVzdF9wYXNzKHBfdW5saW5rKCJlbXB0eV9kaXIvY29udGVudCIpKTsKKworCWNsX211c3RfcGFzcyhwX21rZGlyKCJlbXB0eV9kaXIvY29udGVudCIsIDA3NzcpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2lzX2VtcHR5X2RpcigiZW1wdHlfZGlyIikpOworCWNsX2Fzc2VydChnaXRfcGF0aF9pc19lbXB0eV9kaXIoImVtcHR5X2Rpci9jb250ZW50IikpOworCisJY2xfbXVzdF9wYXNzKHBfcm1kaXIoImVtcHR5X2Rpci9jb250ZW50IikpOworCisJY2xfbXVzdF9wYXNzKHBfcm1kaXIoImVtcHR5X2RpciIpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS9lbnYuYyBiL3Rlc3RzL2NvcmUvZW52LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29yZS9lbnYuYwpyZW5hbWUgdG8gdGVzdHMvY29yZS9lbnYuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL2Vycm9ycy5jIGIvdGVzdHMvY29yZS9lcnJvcnMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL2Vycm9ycy5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL2Vycm9ycy5jCmRpZmYgLS1naXQgYS90ZXN0cy9jb3JlL2ZpbGVidWYuYyBiL3Rlc3RzL2NvcmUvZmlsZWJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhM2U3NTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb3JlL2ZpbGVidWYuYwpAQCAtMCwwICsxLDEyNiBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImZpbGVidWYuaCIKKworLyogbWFrZSBzdXJlIGdpdF9maWxlYnVmX29wZW4gZG9lc24ndCBkZWxldGUgYW4gZXhpc3RpbmcgbG9jayAqLwordm9pZCB0ZXN0X2NvcmVfZmlsZWJ1Zl9fMCh2b2lkKQoreworCWdpdF9maWxlYnVmIGZpbGUgPSBHSVRfRklMRUJVRl9JTklUOworCWludCBmZDsKKwljaGFyIHRlc3RbXSA9ICJ0ZXN0IiwgdGVzdGxvY2tbXSA9ICJ0ZXN0LmxvY2siOworCisJZmQgPSBwX2NyZWF0KHRlc3Rsb2NrLCAwNzQ0KTsgLy8tVjUzNgorCisJY2xfbXVzdF9wYXNzKGZkKTsKKwljbF9tdXN0X3Bhc3MocF9jbG9zZShmZCkpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgMCwgMDY2NikpOworCWNsX2Fzc2VydChnaXRfcGF0aF9leGlzdHModGVzdGxvY2spKTsKKworCWNsX211c3RfcGFzcyhwX3VubGluayh0ZXN0bG9jaykpOworfQorCisKKy8qIG1ha2Ugc3VyZSBHSVRfRklMRUJVRl9BUFBFTkQgd29ya3MgYXMgZXhwZWN0ZWQgKi8KK3ZvaWQgdGVzdF9jb3JlX2ZpbGVidWZfXzEodm9pZCkKK3sKKwlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwljaGFyIHRlc3RbXSA9ICJ0ZXN0IjsKKworCWNsX2dpdF9ta2ZpbGUodGVzdCwgImxpYmdpdDIgcm9ja3NcbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgR0lUX0ZJTEVCVUZfQVBQRU5ELCAwNjY2KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsICJsaWJnaXQyIHJvY2tzIikpOworCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2ZpbGUoImxpYmdpdDIgcm9ja3NcbmxpYmdpdDIgcm9ja3NcbiIsIDAsIHRlc3QpOworCisJY2xfbXVzdF9wYXNzKHBfdW5saW5rKHRlc3QpKTsKK30KKworCisvKiBtYWtlIHN1cmUgZ2l0X2ZpbGVidWZfd3JpdGUgd3JpdGVzIGxhcmdlIGJ1ZmZlciBjb3JyZWN0bHkgKi8KK3ZvaWQgdGVzdF9jb3JlX2ZpbGVidWZfXzIodm9pZCkKK3sKKwlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwljaGFyIHRlc3RbXSA9ICJ0ZXN0IjsKKwl1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2ICogNF07IC8qIDIgKiBXUklURV9CVUZGRVJfU0laRSAqLworCisJbWVtc2V0KGJ1ZiwgMHhmZSwgc2l6ZW9mKGJ1ZikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgMCwgMDY2NikpOworCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX3dyaXRlKCZmaWxlLCBidWYsIHNpemVvZihidWYpKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfZmlsZSgoY2hhciAqKWJ1Ziwgc2l6ZW9mKGJ1ZiksIHRlc3QpOworCisJY2xfbXVzdF9wYXNzKHBfdW5saW5rKHRlc3QpKTsKK30KKworLyogbWFrZSBzdXJlIGdpdF9maWxlYnVmX2NsZWFudXAgY2xlYXJzIHRoZSBidWZmZXIgKi8KK3ZvaWQgdGVzdF9jb3JlX2ZpbGVidWZfXzQodm9pZCkKK3sKKwlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwljaGFyIHRlc3RbXSA9ICJ0ZXN0IjsKKworCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciA9PSBOVUxMKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIHRlc3QsIDAsIDA2NjYpKTsKKwljbF9hc3NlcnQoZmlsZS5idWZmZXIgIT0gTlVMTCk7CisKKwlnaXRfZmlsZWJ1Zl9jbGVhbnVwKCZmaWxlKTsKKwljbF9hc3NlcnQoZmlsZS5idWZmZXIgPT0gTlVMTCk7Cit9CisKKworLyogbWFrZSBzdXJlIGdpdF9maWxlYnVmX2NvbW1pdCBjbGVhcnMgdGhlIGJ1ZmZlciAqLwordm9pZCB0ZXN0X2NvcmVfZmlsZWJ1Zl9fNSh2b2lkKQoreworCWdpdF9maWxlYnVmIGZpbGUgPSBHSVRfRklMRUJVRl9JTklUOworCWNoYXIgdGVzdFtdID0gInRlc3QiOworCisJY2xfYXNzZXJ0KGZpbGUuYnVmZmVyID09IE5VTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgdGVzdCwgMCwgMDY2NikpOworCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciAhPSBOVUxMKTsKKwljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICIlc1xuIiwgImxpYmdpdDIgcm9ja3MiKSk7CisJY2xfYXNzZXJ0KGZpbGUuYnVmZmVyICE9IE5VTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlKSk7CisJY2xfYXNzZXJ0KGZpbGUuYnVmZmVyID09IE5VTEwpOworCisJY2xfbXVzdF9wYXNzKHBfdW5saW5rKHRlc3QpKTsKK30KKworCisvKiBtYWtlIHN1cmUgZ2l0X2ZpbGVidWZfY29tbWl0IHRha2VzIHVtYXNrIGludG8gYWNjb3VudCAqLwordm9pZCB0ZXN0X2NvcmVfZmlsZWJ1Zl9fdW1hc2sodm9pZCkKK3sKKwlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwljaGFyIHRlc3RbXSA9ICJ0ZXN0IjsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCW1vZGVfdCBtYXNrLCBvc19tYXNrOworCisjaWZkZWYgR0lUX1dJTjMyCisJb3NfbWFzayA9IDA2MDA7CisjZWxzZQorCW9zX21hc2sgPSAwNzc3OworI2VuZGlmCisKKwlwX3VtYXNrKG1hc2sgPSBwX3VtYXNrKDApKTsKKworCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciA9PSBOVUxMKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIHRlc3QsIDAsIDA2NjYpKTsKKwljbF9hc3NlcnQoZmlsZS5idWZmZXIgIT0gTlVMTCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsICJsaWJnaXQyIHJvY2tzIikpOworCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciAhPSBOVUxMKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSkpOworCWNsX2Fzc2VydChmaWxlLmJ1ZmZlciA9PSBOVUxMKTsKKworCWNsX211c3RfcGFzcyhwX3N0YXQoInRlc3QiLCAmc3RhdGJ1ZikpOworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRidWYuc3RfbW9kZSAmIG9zX21hc2ssICgwNjY2ICYgfm1hc2spICYgb3NfbWFzayk7CisKKwljbF9tdXN0X3Bhc3MocF91bmxpbmsodGVzdCkpOworfQorCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvcmUvaGV4LmMgYi90ZXN0cy9jb3JlL2hleC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvaGV4LmMKcmVuYW1lIHRvIHRlc3RzL2NvcmUvaGV4LmMKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcmUvaWNvbnYuYyBiL3Rlc3RzL2NvcmUvaWNvbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWVkYWIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY29yZS9pY29udi5jCkBAIC0wLDAgKzEsNjggQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJwYXRoLmgiCisKKyNpZmRlZiBHSVRfVVNFX0lDT05WCitzdGF0aWMgZ2l0X3BhdGhfaWNvbnZfdCBpYzsKK3N0YXRpYyBjaGFyICpuZmMgPSAiXHhDM1x4ODVceDczXHg3NFx4NzJceEMzXHhCNlx4NkQiOworc3RhdGljIGNoYXIgKm5mZCA9ICJceDQxXHhDQ1x4OEFceDczXHg3NFx4NzJceDZGXHhDQ1x4ODhceDZEIjsKKyNlbmRpZgorCit2b2lkIHRlc3RfY29yZV9pY29udl9faW5pdGlhbGl6ZSh2b2lkKQoreworI2lmZGVmIEdJVF9VU0VfSUNPTlYKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9pY29udl9pbml0X3ByZWNvbXBvc2UoJmljKSk7CisjZW5kaWYKK30KKwordm9pZCB0ZXN0X2NvcmVfaWNvbnZfX2NsZWFudXAodm9pZCkKK3sKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJZ2l0X3BhdGhfaWNvbnZfY2xlYXIoJmljKTsKKyNlbmRpZgorfQorCit2b2lkIHRlc3RfY29yZV9pY29udl9fdW5jaGFuZ2VkKHZvaWQpCit7CisjaWZkZWYgR0lUX1VTRV9JQ09OVgorCWNoYXIgKmRhdGEgPSAiQXNjaWkgZGF0YSIsICpvcmlnaW5hbCA9IGRhdGE7CisJc2l6ZV90IGRhdGFsZW4gPSBzdHJsZW4oZGF0YSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9pY29udigmaWMsICZkYXRhLCAmZGF0YWxlbikpOworCUdJVF9VTlVTRUQoZGF0YWxlbik7CisKKwkvKiBUaGVyZSBhcmUgbm8gaGlnaCBiaXRzIHNldCwgc28gdGhpcyBzaG91bGQgbGVhdmUgZGF0YSB1bnRvdWNoZWQgKi8KKwljbF9hc3NlcnQoZGF0YSA9PSBvcmlnaW5hbCk7CisjZW5kaWYKK30KKwordm9pZCB0ZXN0X2NvcmVfaWNvbnZfX2RlY29tcG9zZWRfdG9fcHJlY29tcG9zZWQodm9pZCkKK3sKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJY2hhciAqZGF0YSA9IG5mZDsKKwlzaXplX3QgZGF0YWxlbiA9IHN0cmxlbihuZmQpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfaWNvbnYoJmljLCAmZGF0YSwgJmRhdGFsZW4pKTsKKwlHSVRfVU5VU0VEKGRhdGFsZW4pOworCisJLyogVGhlIGRlY29tcG9zZWQgbmZkIHN0cmluZyBzaG91bGQgYmUgdHJhbnNmb3JtZWQgdG8gdGhlIG5mYyBmb3JtCisJICogKG9uIHBsYXRmb3JtcyB3aGVyZSBpY29udiBpcyBlbmFibGVkLCBvZiBjb3Vyc2UpLgorCSAqLworCWNsX2Fzc2VydF9lcXVhbF9zKG5mYywgZGF0YSk7CisjZW5kaWYKK30KKwordm9pZCB0ZXN0X2NvcmVfaWNvbnZfX3ByZWNvbXBvc2VkX2lzX3VubW9kaWZpZWQodm9pZCkKK3sKKyNpZmRlZiBHSVRfVVNFX0lDT05WCisJY2hhciAqZGF0YSA9IG5mYzsKKwlzaXplX3QgZGF0YWxlbiA9IHN0cmxlbihuZmMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfaWNvbnYoJmljLCAmZGF0YSwgJmRhdGFsZW4pKTsKKwlHSVRfVU5VU0VEKGRhdGFsZW4pOworCisJLyogZGF0YSBpcyBhbHJlYWR5IGluIHByZWNvbXBvc2VkIGZvcm0sIHNvIGV2ZW4gdGhvdWdoIHNvbWUgYnl0ZXMgaGF2ZQorCSAqIHRoZSBoaWdoLWJpdCBzZXQsIHRoZSBpY29udiB0cmFuc2Zvcm0gc2hvdWxkIHJlc3VsdCBpbiBubyBjaGFuZ2UuCisJICovCisJY2xfYXNzZXJ0X2VxdWFsX3MobmZjLCBkYXRhKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL21rZGlyLmMgYi90ZXN0cy9jb3JlL21rZGlyLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL21rZGlyLmMKcmVuYW1lIHRvIHRlc3RzL2NvcmUvbWtkaXIuYwppbmRleCAxZTUwYjQzLi5hOGM1YjEwIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2NvcmUvbWtkaXIuYworKysgYi90ZXN0cy9jb3JlL21rZGlyLmMKQEAgLTExMSwxNCArMTExLDIwIEBACiAJZ2l0X2Z1dGlsc19ybWRpcl9yKCJyIiwgTlVMTCwgR0lUX1JNRElSX0VNUFRZX0hJRVJBUkNIWSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX21vZGUobW9kZV90IGV4cGVjdGVkLCBtb2RlX3QgYWN0dWFsKQorI2RlZmluZSBjaGVja19tb2RlKFgsQSkgY2hlY2tfbW9kZV9hdF9saW5lKChYKSwgKEEpLCBfX0ZJTEVfXywgX19MSU5FX18pCisKK3N0YXRpYyB2b2lkIGNoZWNrX21vZGVfYXRfbGluZSgKKwltb2RlX3QgZXhwZWN0ZWQsIG1vZGVfdCBhY3R1YWwsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQogewotI2lmZGVmIEdJVF9XSU4zMgotCS8qIGNobW9kIG9uIFdpbjMyIGRvZXNuJ3Qgc3VwcG9ydCBleGVjIGJpdCwgbm90IGdyb3VwL3dvcmxkIGJpdHMgKi8KLQljbF9hc3NlcnQoKGV4cGVjdGVkICYgMDYwMCkgPT0gKGFjdHVhbCAmIDA3NzcpKTsKLSNlbHNlCi0JY2xfYXNzZXJ0KGV4cGVjdGVkID09IChhY3R1YWwgJiAwNzc3KSk7Ci0jZW5kaWYKKwkvKiBGQVQgZmlsZXN5c3RlbXMgZG9uJ3Qgc3VwcG9ydCBleGVjIGJpdCwgbm9yIGdyb3VwL3dvcmxkIGJpdHMgKi8KKwlpZiAoIWNsX2lzX2NobW9kX3N1cHBvcnRlZCgpKSB7CisJCWV4cGVjdGVkICY9IDA2MDA7CisJCWFjdHVhbCAmPSAwNjAwOworCX0KKworCWNsYXJfX2Fzc2VydF9lcXVhbCgKKwkJZmlsZSwgbGluZSwgImV4cGVjdGVkX21vZGUgIT0gYWN0dWFsX21vZGUiLCAxLAorCQkiJTA3byIsIChpbnQpZXhwZWN0ZWQsIChpbnQpKGFjdHVhbCAmIDA3NzcpKTsKIH0KIAogdm9pZCB0ZXN0X2NvcmVfbWtkaXJfX2NobW9kcyh2b2lkKQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL29pZC5jIGIvdGVzdHMvY29yZS9vaWQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL29pZC5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL29pZC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvcmUvb2lkbWFwLmMgYi90ZXN0cy9jb3JlL29pZG1hcC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvb2lkbWFwLmMKcmVuYW1lIHRvIHRlc3RzL2NvcmUvb2lkbWFwLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS9vcHRzLmMgYi90ZXN0cy9jb3JlL29wdHMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL29wdHMuYwpyZW5hbWUgdG8gdGVzdHMvY29yZS9vcHRzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS9wYXRoLmMgYi90ZXN0cy9jb3JlL3BhdGguYwpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvcGF0aC5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL3BhdGguYwppbmRleCA0MDc3NzBiLi5jZjJkNWU5IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2NvcmUvcGF0aC5jCisrKyBiL3Rlc3RzL2NvcmUvcGF0aC5jCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgotI2luY2x1ZGUgPGZpbGVvcHMuaD4KKyNpbmNsdWRlICJmaWxlb3BzLmgiCiAKIHN0YXRpYyB2b2lkCiBjaGVja19kaXJuYW1lKGNvbnN0IGNoYXIgKkEsIGNvbnN0IGNoYXIgKkIpCkBAIC00NDYsMTYgKzQ0NiwxNSBAQAogCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2FwcGx5X3JlbGF0aXZlKCZwLCAiLi4vLi4vLi4vLi4vLi4vLi4iKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MoIi90aGlzLyIsIHAucHRyKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2FwcGx5X3JlbGF0aXZlKCZwLCAiLi4vLi4vLi4vLi4vLi4vIikpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2FwcGx5X3JlbGF0aXZlKCZwLCAiLi4vIikpOwogCWNsX2Fzc2VydF9lcXVhbF9zKCIvIiwgcC5wdHIpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfYXBwbHlfcmVsYXRpdmUoJnAsICIuLi8uLi8uLi8uLi8uLiIpKTsKLQljbF9hc3NlcnRfZXF1YWxfcygiLyIsIHAucHRyKTsKKwljbF9naXRfZmFpbChnaXRfcGF0aF9hcHBseV9yZWxhdGl2ZSgmcCwgIi4uLy4uLy4uIikpOwogCiAKIAljbF9naXRfcGFzcyhnaXRfYnVmX3NldHMoJnAsICJkOi9hbm90aGVyL3Rlc3QiKSk7CiAKLQljbF9naXRfcGFzcyhnaXRfcGF0aF9hcHBseV9yZWxhdGl2ZSgmcCwgIi4uLy4uLy4uLy4uLy4uIikpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2FwcGx5X3JlbGF0aXZlKCZwLCAiLi4vLi4iKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MoImQ6LyIsIHAucHRyKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9wYXRoX2FwcGx5X3JlbGF0aXZlKCZwLCAiZnJvbS9oZXJlL3RvLy4uL2FuZC8uL2JhY2svLiIpKTsKQEAgLTQ3Myw4ICs0NzIsMTEyIEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfYXBwbHlfcmVsYXRpdmUoJnAsICIuLiIpKTsKIAljbF9hc3NlcnRfZXF1YWxfcygiaHR0cHM6Ly9teS51cmwuY29tL2Z1bGwvcGF0aC8iLCBwLnB0cik7CiAKLQljbF9naXRfcGFzcyhnaXRfcGF0aF9hcHBseV9yZWxhdGl2ZSgmcCwgIi4uLy4uLy4uLy4uLy4uLyIpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9hcHBseV9yZWxhdGl2ZSgmcCwgIi4uLy4uLy4uLyIpKTsKIAljbF9hc3NlcnRfZXF1YWxfcygiaHR0cHM6Ly8iLCBwLnB0cik7CiAKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmcCwgIi4uLy4uL3RoaXMvaXMvcmVsYXRpdmUiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9hcHBseV9yZWxhdGl2ZSgmcCwgIi4uLy4uL3ByZXNlcnZlcy90aGUvcHJlZml4IikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCIuLi8uLi90aGlzL3ByZXNlcnZlcy90aGUvcHJlZml4IiwgcC5wdHIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfYXBwbHlfcmVsYXRpdmUoJnAsICIuLi8uLi8uLi8uLi90aGF0IikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCIuLi8uLi90aGF0IiwgcC5wdHIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfYXBwbHlfcmVsYXRpdmUoJnAsICIuLi90aGVyZSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiLi4vLi4vdGhlcmUiLCBwLnB0cik7CiAJZ2l0X2J1Zl9mcmVlKCZwKTsKIH0KKworc3RhdGljIHZvaWQgYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoCisJZ2l0X2J1ZiAqYnVmLCBjb25zdCBjaGFyICpleHBlY3RlZCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldHMoYnVmLCBwYXRoKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcmVzb2x2ZV9yZWxhdGl2ZShidWYsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZCwgYnVmLT5wdHIpOworfQorCit2b2lkIHRlc3RfY29yZV9wYXRoX18xNV9yZXNvbHZlX3JlbGF0aXZlKHZvaWQpCit7CisJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CisKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiIiwgIiIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIiLCAiLiIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIiLCAiLi8iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLi4iLCAiLi4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLi4vIiwgIi4uLyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIuLiIsICIuLy4uIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIi4uLyIsICIuLy4uLyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIuLi8iLCAiLi4vLiIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIuLi8iLCAiLi4vLi8iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLi4vLi4iLCAiLi4vLi4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLi4vLi4vIiwgIi4uLy4uLyIpOworCisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIi8iLCAiLyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvIiwgIi8uIik7CisKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiIiwgImEvLi4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiIiwgImEvLi4vIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIiIsICJhLy4uLy4iKTsKKworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvYSIsICIvYSIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvYS8iLCAiL2EvLiIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvIiwgIi9hLy4uLyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvIiwgIi9hLy4uLy4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLyIsICIvYS8uLi8uLyIpOworCisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgImEiLCAiYSIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICJhLyIsICJhLyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICJhLyIsICJhLy4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiYS8iLCAiYS8uLyIpOworCisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgImEvYiIsICJhLy9iIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgImEvYi9jIiwgImEvYi9jIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgImIvYyIsICIuL2IvYyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICJhL2MiLCAiYS8uL2MiKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiYS9iLyIsICJhL2IvLiIpOworCisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIi9hL2IvYyIsICIvLy9hL2IvYyIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvIiwgIi8vLy8iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiL2EiLCAiLy8vYSIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIvIiwgIi8vLy4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLyIsICIvLy9hLy4uIik7CisKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLi4vLi4vcGF0aCIsICIuLi8uLi90ZXN0Ly8uLi8uLy4vcGF0aCIpOworCWFzc2VydF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsICIuLi9kIiwgImEvYi8uLi8uLi8uLi9jLy4uL2QiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCAiLy4uIikpOworCWNsX2dpdF9mYWlsKGdpdF9wYXRoX3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgMCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZidWYsICIvLi8uLiIpKTsKKwljbF9naXRfZmFpbChnaXRfcGF0aF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsIDApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCAiLy4vLy4uIikpOworCWNsX2dpdF9mYWlsKGdpdF9wYXRoX3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgMCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZidWYsICIvLi4vLiIpKTsKKwljbF9naXRfZmFpbChnaXRfcGF0aF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsIDApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCAiLy4uLy4uLy4vLi4vYSIpKTsKKwljbF9naXRfZmFpbChnaXRfcGF0aF9yZXNvbHZlX3JlbGF0aXZlKCZidWYsIDApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCAiLy8vLy4uIikpOworCWNsX2dpdF9mYWlsKGdpdF9wYXRoX3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgMCkpOworCisJLyogdGhpbmdzIHRoYXQgc3RhcnQgd2l0aCBXaW5kb3dzIG5ldHdvcmsgcGF0aHMgKi8KKyNpZmRlZiBHSVRfV0lOMzIKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLy9hL2IvYyIsICIvL2EvYi9jIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIi8vYS8iLCAiLy9hL2IvLi4iKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiLy9hL2IvYyIsICIvL2EvUS8uLi9iL3gveS8uLi8uLi9jIik7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldHMoJmJ1ZiwgIi8vYS9iLy4uLy4uIikpOworCWNsX2dpdF9mYWlsKGdpdF9wYXRoX3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgMCkpOworI2Vsc2UKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiL2EvYi9jIiwgIi8vYS9iL2MiKTsKKwlhc3NlcnRfcmVzb2x2ZV9yZWxhdGl2ZSgmYnVmLCAiL2EvIiwgIi8vYS9iLy4uIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIi9hL2IvYyIsICIvL2EvUS8uLi9iL3gveS8uLi8uLi9jIik7CisJYXNzZXJ0X3Jlc29sdmVfcmVsYXRpdmUoJmJ1ZiwgIi8iLCAiLy9hL2IvLi4vLi4iKTsKKyNlbmRpZgorCisJZ2l0X2J1Zl9mcmVlKCZidWYpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL3Bvb2wuYyBiL3Rlc3RzL2NvcmUvcG9vbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvcG9vbC5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL3Bvb2wuYwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29yZS9wb3NpeC5jIGIvdGVzdHMvY29yZS9wb3NpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZWY5MzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb3JlL3Bvc2l4LmMKQEAgLTAsMCArMSw5OSBAQAorI2lmbmRlZiBfV0lOMzIKKyMgaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8d3MydGNwaXAuaD4KKyMgaWZkZWYgX01TQ19WRVIKKyMgIHByYWdtYSBjb21tZW50KGxpYiwgIndzMl8zMiIpCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgInBvc2l4LmgiCisKK3ZvaWQgdGVzdF9jb3JlX3Bvc2l4X19pbml0aWFsaXplKHZvaWQpCit7CisjaWZkZWYgR0lUX1dJTjMyCisJLyogb24gd2luMzIsIHRoZSBXU0EgY29udGV4dCBuZWVkcyB0byBiZSBpbml0aWFsaXplZAorCSAqIGJlZm9yZSBhbnkgc29ja2V0IGNhbGxzIGNhbiBiZSBwZXJmb3JtZWQgKi8KKwlXU0FEQVRBIHdzZDsKKworCWNsX2dpdF9wYXNzKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzZCkpOworCWNsX2Fzc2VydChMT0JZVEUod3NkLndWZXJzaW9uKSA9PSAyICYmIEhJQllURSh3c2Qud1ZlcnNpb24pID09IDIpOworI2VuZGlmCit9CisKK3N0YXRpYyBib29sIHN1cHBvcnRzX2lwdjYodm9pZCkKK3sKKyNpZmRlZiBHSVRfV0lOMzIKKwkvKiBJUHY2IGlzIHN1cHBvcnRlZCBvbiBWaXN0YSBhbmQgbmV3ZXIgKi8KKwlyZXR1cm4gZ2l0X2hhc193aW4zMl92ZXJzaW9uKDYsIDAsIDApOworI2Vsc2UKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQorCit2b2lkIHRlc3RfY29yZV9wb3NpeF9faW5ldF9wdG9uKHZvaWQpCit7CisJc3RydWN0IGluX2FkZHIgYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgYWRkcjY7CisJc2l6ZV90IGk7CisJCisJc3RydWN0IGluX2FkZHJfZGF0YSB7CisJCWNvbnN0IGNoYXIgKnA7CisJCWNvbnN0IHVpbnQ4X3Qgbls0XTsKKwl9OworCisJc3RydWN0IGluNl9hZGRyX2RhdGEgeworCQljb25zdCBjaGFyICpwOworCQljb25zdCB1aW50OF90IG5bMTZdOworCX07CisKKwlzdGF0aWMgc3RydWN0IGluX2FkZHJfZGF0YSBpbl9hZGRyX2RhdGFbXSA9IHsKKwkJeyAiMC4wLjAuMCIsIHsgMCwgMCwgMCwgMCB9IH0sCisJCXsgIjEwLjQyLjEwMS44IiwgeyAxMCwgNDIsIDEwMSwgOCB9IH0sCisJCXsgIjEyNy4wLjAuMSIsIHsgMTI3LCAwLCAwLCAxIH0gfSwKKwkJeyAiMTQwLjE3Ny4xMC4xMiIsIHsgMTQwLCAxNzcsIDEwLCAxMiB9IH0sCisJCXsgIjIwNC4yMzIuMTc1LjkwIiwgeyAyMDQsIDIzMiwgMTc1LCA5MCB9IH0sCisJCXsgIjI1NS4yNTUuMjU1LjI1NSIsIHsgMjU1LCAyNTUsIDI1NSwgMjU1IH0gfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBpbjZfYWRkcl9kYXRhIGluNl9hZGRyX2RhdGFbXSA9IHsKKwkJeyAiOjoiLCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAorCQl7ICI6OjEiLCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSB9LAorCQl7ICIwOjA6MDowOjA6MDowOjEiLCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSB9LAorCQl7ICIyMDAxOmRiODo4NzE0OjNhOTA6OjEyIiwgeyAweDIwLCAweDAxLCAweDBkLCAweGI4LCAweDg3LCAweDE0LCAweDNhLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyIH0gfSwKKwkJeyAiZmU4MDo6ZjhiYTpjMmQ2Ojg2YmU6MzY0NSIsIHsgMHhmZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYSwgMHhjMiwgMHhkNiwgMHg4NiwgMHhiZSwgMHgzNiwgMHg0NSB9IH0sCisJCXsgIjo6ZmZmZjoyMDQuMTUyLjE4OS4xMTYiLCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4Y2MsIDB4OTgsIDB4YmQsIDB4NzQgfSB9LAorCX07CisKKwkvKiBUZXN0IHNvbWUgaXB2NCBhZGRyZXNzZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWNsX2Fzc2VydChwX2luZXRfcHRvbihBRl9JTkVULCBpbl9hZGRyX2RhdGFbaV0ucCwgJmFkZHIpID09IDEpOworCQljbF9hc3NlcnQobWVtY21wKCZhZGRyLCBpbl9hZGRyX2RhdGFbaV0ubiwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPT0gMCk7CisJfQorCisJLyogVGVzdCBzb21lIGlwdjYgYWRkcmVzc2VzICovCisJaWYgKHN1cHBvcnRzX2lwdjYoKSkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJCWNsX2Fzc2VydChwX2luZXRfcHRvbihBRl9JTkVUNiwgaW42X2FkZHJfZGF0YVtpXS5wLCAmYWRkcjYpID09IDEpOworCQkJY2xfYXNzZXJ0KG1lbWNtcCgmYWRkcjYsIGluNl9hZGRyX2RhdGFbaV0ubiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApOworCQl9CisJfQorCisJLyogVGVzdCBzb21lIGludmFsaWQgc3RyaW5ncyAqLworCWNsX2Fzc2VydChwX2luZXRfcHRvbihBRl9JTkVULCAiIiwgJmFkZHIpID09IDApOworCWNsX2Fzc2VydChwX2luZXRfcHRvbihBRl9JTkVULCAiZm9vIiwgJmFkZHIpID09IDApOworCWNsX2Fzc2VydChwX2luZXRfcHRvbihBRl9JTkVULCAiIDEyNy4wLjAuMSIsICZhZGRyKSA9PSAwKTsKKwljbF9hc3NlcnQocF9pbmV0X3B0b24oQUZfSU5FVCwgImJhciIsICZhZGRyKSA9PSAwKTsKKwljbF9hc3NlcnQocF9pbmV0X3B0b24oQUZfSU5FVCwgIjEwLmZvby5iYXIuMSIsICZhZGRyKSA9PSAwKTsKKworCS8qIFRlc3QgdW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbGllcyAqLworCWNsX2dpdF9mYWlsKHBfaW5ldF9wdG9uKDEyLCAiNTIuNDcyIiwgTlVMTCkpOyAvKiBBRl9ERUNuZXQgKi8KKwljbF9hc3NlcnRfZXF1YWxfaShFQUZOT1NVUFBPUlQsIGVycm5vKTsKKworCWNsX2dpdF9mYWlsKHBfaW5ldF9wdG9uKDUsICIzMTUuMTI0IiwgTlVMTCkpOyAvKiBBRl9DSEFPUyAqLworCWNsX2Fzc2VydF9lcXVhbF9pKEVBRk5PU1VQUE9SVCwgZXJybm8pOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL3JtZGlyLmMgYi90ZXN0cy9jb3JlL3JtZGlyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29yZS9ybWRpci5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL3JtZGlyLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcmUvc29ydGVkY2FjaGUuYyBiL3Rlc3RzL2NvcmUvc29ydGVkY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg2OWJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY29yZS9zb3J0ZWRjYWNoZS5jCkBAIC0wLDAgKzEsMzYzIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAic29ydGVkY2FjaGUuaCIKKworc3RhdGljIGludCBuYW1lX29ubHlfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIHN0cmNtcChhLCBiKTsKK30KKwordm9pZCB0ZXN0X2NvcmVfc29ydGVkY2FjaGVfX25hbWVfb25seSh2b2lkKQoreworCWdpdF9zb3J0ZWRjYWNoZSAqc2M7CisJdm9pZCAqaXRlbTsKKwlzaXplX3QgcG9zOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX25ldygKKwkJJnNjLCAwLCBOVUxMLCBOVUxMLCBuYW1lX29ubHlfY21wLCBOVUxMKSk7CisKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfd2xvY2soc2MpKTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCZpdGVtLCBzYywgImFhYSIpKTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCZpdGVtLCBzYywgImJiYiIpKTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCZpdGVtLCBzYywgInp6eiIpKTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCZpdGVtLCBzYywgIm1tbSIpKTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCZpdGVtLCBzYywgImlpaSIpKTsKKwlnaXRfc29ydGVkY2FjaGVfd3VubG9jayhzYyk7CisKKwljbF9hc3NlcnRfZXF1YWxfc3ooNSwgZ2l0X3NvcnRlZGNhY2hlX2VudHJ5Y291bnQoc2MpKTsKKworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJhYWEiKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImFhYSIsIGl0ZW0pOworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJtbW0iKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIm1tbSIsIGl0ZW0pOworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJ6enoiKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInp6eiIsIGl0ZW0pOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAicXFxIikgPT0gTlVMTCk7CisKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYWFhIiwgaXRlbSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCAxKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImJiYiIsIGl0ZW0pOworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShzYywgMikpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJpaWkiLCBpdGVtKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDMpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibW1tIiwgaXRlbSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCA0KSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInp6eiIsIGl0ZW0pOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDUpID09IE5VTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgImFhYSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMCwgcG9zKTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfbG9va3VwX2luZGV4KCZwb3MsIHNjLCAiaWlpIikpOworCWNsX2Fzc2VydF9lcXVhbF9zeigyLCBwb3MpOworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV9sb29rdXBfaW5kZXgoJnBvcywgc2MsICJ6enoiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDQsIHBvcyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koCisJCUdJVF9FTk9URk9VTkQsIGdpdF9zb3J0ZWRjYWNoZV9sb29rdXBfaW5kZXgoJnBvcywgc2MsICJhYmMiKSk7CisKKwlnaXRfc29ydGVkY2FjaGVfY2xlYXIoc2MsIHRydWUpOworCisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9zb3J0ZWRjYWNoZV9lbnRyeWNvdW50KHNjKSk7CisJY2xfYXNzZXJ0KGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShzYywgMCkgPT0gTlVMTCk7CisJY2xfYXNzZXJ0KGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJhYWEiKSA9PSBOVUxMKTsKKwljbF9hc3NlcnQoZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCAwKSA9PSBOVUxMKTsKKworCWdpdF9zb3J0ZWRjYWNoZV9mcmVlKHNjKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCB2YWx1ZTsKKwljaGFyIHNtYWxsZXJfdmFsdWU7CisJY2hhciBwYXRoW0dJVF9GTEVYX0FSUkFZXTsKK30gc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3Q7CisKK3N0YXRpYyBpbnQgc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3RfY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzb3J0ZWRjYWNoZV90ZXN0X3N0cnVjdCAqYSA9IGFfLCAqYiA9IGJfOworCXJldHVybiBzdHJjbXAoYS0+cGF0aCwgYi0+cGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvcnRlZGNhY2hlX3Rlc3Rfc3RydWN0X2ZyZWUodm9pZCAqcGF5bG9hZCwgdm9pZCAqaXRlbV8pCit7CisJc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3QgKml0ZW0gPSBpdGVtXzsKKwlpbnQgKmNvdW50ID0gcGF5bG9hZDsKKwkoKmNvdW50KSsrOworCWl0ZW0tPnNtYWxsZXJfdmFsdWUgPSAwOworfQorCit2b2lkIHRlc3RfY29yZV9zb3J0ZWRjYWNoZV9faW5fbWVtb3J5KHZvaWQpCit7CisJZ2l0X3NvcnRlZGNhY2hlICpzYzsKKwlzb3J0ZWRjYWNoZV90ZXN0X3N0cnVjdCAqaXRlbTsKKwlpbnQgZnJlZV9jb3VudCA9IDA7CisKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfbmV3KAorCQkmc2MsIG9mZnNldG9mKHNvcnRlZGNhY2hlX3Rlc3Rfc3RydWN0LCBwYXRoKSwKKwkJc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3RfZnJlZSwgJmZyZWVfY291bnQsCisJCXNvcnRlZGNhY2hlX3Rlc3Rfc3RydWN0X2NtcCwgTlVMTCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX3dsb2NrKHNjKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX3Vwc2VydCgodm9pZCAqKikmaXRlbSwgc2MsICJhYWEiKSk7CisJaXRlbS0+dmFsdWUgPSAxMDsKKwlpdGVtLT5zbWFsbGVyX3ZhbHVlID0gMTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCh2b2lkICoqKSZpdGVtLCBzYywgImJiYiIpKTsKKwlpdGVtLT52YWx1ZSA9IDIwOworCWl0ZW0tPnNtYWxsZXJfdmFsdWUgPSAyOworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQoKHZvaWQgKiopJml0ZW0sIHNjLCAienp6IikpOworCWl0ZW0tPnZhbHVlID0gMzA7CisJaXRlbS0+c21hbGxlcl92YWx1ZSA9IDI2OworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQoKHZvaWQgKiopJml0ZW0sIHNjLCAibW1tIikpOworCWl0ZW0tPnZhbHVlID0gNDA7CisJaXRlbS0+c21hbGxlcl92YWx1ZSA9IDE0OworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQoKHZvaWQgKiopJml0ZW0sIHNjLCAiaWlpIikpOworCWl0ZW0tPnZhbHVlID0gNTA7CisJaXRlbS0+c21hbGxlcl92YWx1ZSA9IDk7CisJZ2l0X3NvcnRlZGNhY2hlX3d1bmxvY2soc2MpOworCisJY2xfYXNzZXJ0X2VxdWFsX3N6KDUsIGdpdF9zb3J0ZWRjYWNoZV9lbnRyeWNvdW50KHNjKSk7CisKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfcmxvY2soc2MpKTsKKworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJhYWEiKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImFhYSIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChzYywgIm1tbSIpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibW1tIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNDAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAienp6IikpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJ6enoiLCBpdGVtLT5wYXRoKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgzMCwgaXRlbS0+dmFsdWUpOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAiYWJjIikgPT0gTlVMTCk7CisKKwkvKiBub3Qgb24gV2luZG93czoKKwkgKiBjbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfcmxvY2soc2MpKTsgLS0gZ3JhYiBtb3JlIHRoYW4gb25lCisJICovCisKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYWFhIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMTAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDEpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYmJiIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMjAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDIpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiaWlpIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNTAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDMpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibW1tIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNDAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDQpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygienp6IiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMzAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCA1KSA9PSBOVUxMKTsKKworCWdpdF9zb3J0ZWRjYWNoZV9ydW5sb2NrKHNjKTsKKwkvKiBnaXRfc29ydGVkY2FjaGVfcnVubG9jayhzYyk7ICovCisKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBmcmVlX2NvdW50KTsKKworCWdpdF9zb3J0ZWRjYWNoZV9jbGVhcihzYywgdHJ1ZSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSg1LCBmcmVlX2NvdW50KTsKKworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfc29ydGVkY2FjaGVfZW50cnljb3VudChzYykpOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDApID09IE5VTEwpOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAiYWFhIikgPT0gTlVMTCk7CisJY2xfYXNzZXJ0KGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShzYywgMCkgPT0gTlVMTCk7CisKKwlmcmVlX2NvdW50ID0gMDsKKworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV93bG9jayhzYykpOworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQoKHZvaWQgKiopJml0ZW0sIHNjLCAidGVzdGluZyIpKTsKKwlpdGVtLT52YWx1ZSA9IDEwOworCWl0ZW0tPnNtYWxsZXJfdmFsdWUgPSAzOworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQoKHZvaWQgKiopJml0ZW0sIHNjLCAiYWdhaW4iKSk7CisJaXRlbS0+dmFsdWUgPSAyMDsKKwlpdGVtLT5zbWFsbGVyX3ZhbHVlID0gMTsKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfdXBzZXJ0KCh2b2lkICoqKSZpdGVtLCBzYywgImZpbmFsIikpOworCWl0ZW0tPnZhbHVlID0gMzA7CisJaXRlbS0+c21hbGxlcl92YWx1ZSA9IDI7CisJZ2l0X3NvcnRlZGNhY2hlX3d1bmxvY2soc2MpOworCisJY2xfYXNzZXJ0X2VxdWFsX3N6KDMsIGdpdF9zb3J0ZWRjYWNoZV9lbnRyeWNvdW50KHNjKSk7CisKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAidGVzdGluZyIpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygidGVzdGluZyIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChzYywgImFnYWluIikpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJhZ2FpbiIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDIwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChzYywgImZpbmFsIikpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJmaW5hbCIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDMwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJ6enoiKSA9PSBOVUxMKTsKKworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShzYywgMCkpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJhZ2FpbiIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDIwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCAxKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImZpbmFsIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMzAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDIpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygidGVzdGluZyIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KGdpdF9zb3J0ZWRjYWNoZV9lbnRyeShzYywgMykgPT0gTlVMTCk7CisKKwl7CisJCXNpemVfdCBwb3M7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX3dsb2NrKHNjKSk7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgImFnYWluIikpOworCQljbF9hc3NlcnRfZXF1YWxfc3ooMCwgcG9zKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX3JlbW92ZShzYywgcG9zKSk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKAorCQkJR0lUX0VOT1RGT1VORCwgZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgImFnYWluIikpOworCisJCWNsX2Fzc2VydF9lcXVhbF9zeigyLCBnaXRfc29ydGVkY2FjaGVfZW50cnljb3VudChzYykpOworCisJCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV9sb29rdXBfaW5kZXgoJnBvcywgc2MsICJ0ZXN0aW5nIikpOworCQljbF9hc3NlcnRfZXF1YWxfc3ooMSwgcG9zKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX3JlbW92ZShzYywgcG9zKSk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKAorCQkJR0lUX0VOT1RGT1VORCwgZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgInRlc3RpbmciKSk7CisKKwkJY2xfYXNzZXJ0X2VxdWFsX3N6KDEsIGdpdF9zb3J0ZWRjYWNoZV9lbnRyeWNvdW50KHNjKSk7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgImZpbmFsIikpOworCQljbF9hc3NlcnRfZXF1YWxfc3ooMCwgcG9zKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX3JlbW92ZShzYywgcG9zKSk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKAorCQkJR0lUX0VOT1RGT1VORCwgZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgImZpbmFsIikpOworCisJCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfc29ydGVkY2FjaGVfZW50cnljb3VudChzYykpOworCisJCWdpdF9zb3J0ZWRjYWNoZV93dW5sb2NrKHNjKTsKKwl9CisKKwlnaXRfc29ydGVkY2FjaGVfZnJlZShzYyk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgzLCBmcmVlX2NvdW50KTsKK30KKworc3RhdGljIHZvaWQgc29ydGVkY2FjaGVfdGVzdF9yZWxvYWQoZ2l0X3NvcnRlZGNhY2hlICpzYykKK3sKKwlpbnQgY291bnQgPSAwOworCWdpdF9idWYgYnVmID0gR0lUX0JVRl9JTklUOworCWNoYXIgKnNjYW4sICphZnRlcjsKKwlzb3J0ZWRjYWNoZV90ZXN0X3N0cnVjdCAqaXRlbTsKKworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfbG9ja2FuZGxvYWQoc2MsICZidWYpID4gMCk7CisKKwlnaXRfc29ydGVkY2FjaGVfY2xlYXIoc2MsIGZhbHNlKTsgLyogY2xlYXIgb25jZSB3ZSBhbHJlYWR5IGhhdmUgbG9jayAqLworCisJZm9yIChzY2FuID0gYnVmLnB0cjsgKnNjYW47IHNjYW4gPSBhZnRlciArIDEpIHsKKwkJaW50IHZhbCA9IHN0cnRvbChzY2FuLCAmYWZ0ZXIsIDApOworCQljbF9hc3NlcnQoYWZ0ZXIgPiBzY2FuKTsKKwkJc2NhbiA9IGFmdGVyOworCisJCWZvciAoc2NhbiA9IGFmdGVyOyBnaXRfX2lzc3BhY2UoKnNjYW4pOyArK3NjYW4pIC8qIGZpbmQgc3RhcnQgKi87CisJCWZvciAoYWZ0ZXIgPSBzY2FuOyAqYWZ0ZXIgJiYgKmFmdGVyICE9ICdcbic7ICsrYWZ0ZXIpIC8qIGZpbmQgZW9sICovOworCQkqYWZ0ZXIgPSAnXDAnOworCisJCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV91cHNlcnQoKHZvaWQgKiopJml0ZW0sIHNjLCBzY2FuKSk7CisKKwkJaXRlbS0+dmFsdWUgPSB2YWw7CisJCWl0ZW0tPnNtYWxsZXJfdmFsdWUgPSAoY2hhcikoY291bnQrKyk7CisJfQorCisJZ2l0X3NvcnRlZGNhY2hlX3d1bmxvY2soc2MpOworCisJZ2l0X2J1Zl9mcmVlKCZidWYpOworfQorCit2b2lkIHRlc3RfY29yZV9zb3J0ZWRjYWNoZV9fb25fZGlzayh2b2lkKQoreworCWdpdF9zb3J0ZWRjYWNoZSAqc2M7CisJc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3QgKml0ZW07CisJaW50IGZyZWVfY291bnQgPSAwOworCXNpemVfdCBwb3M7CisKKwljbF9naXRfbWtmaWxlKCJjYWNoZWl0ZW1zLnR4dCIsICIxMCBhYmNcbjIwIGJjZFxuMzAgY2RlXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV9uZXcoCisJCSZzYywgb2Zmc2V0b2Yoc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3QsIHBhdGgpLAorCQlzb3J0ZWRjYWNoZV90ZXN0X3N0cnVjdF9mcmVlLCAmZnJlZV9jb3VudCwKKwkJc29ydGVkY2FjaGVfdGVzdF9zdHJ1Y3RfY21wLCAiY2FjaGVpdGVtcy50eHQiKSk7CisKKwkvKiBzaG91bGQgbmVlZCB0byByZWxvYWQgdGhlIGZpcnN0IHRpbWUgKi8KKworCXNvcnRlZGNhY2hlX3Rlc3RfcmVsb2FkKHNjKTsKKworCS8qIHRlc3Qgd2hhdCB3ZSBsb2FkZWQgKi8KKworCWNsX2Fzc2VydF9lcXVhbF9zeigzLCBnaXRfc29ydGVkY2FjaGVfZW50cnljb3VudChzYykpOworCisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cChzYywgImFiYyIpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYWJjIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMTAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAiY2RlIikpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJjZGUiLCBpdGVtLT5wYXRoKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgzMCwgaXRlbS0+dmFsdWUpOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAiYWFhIikgPT0gTlVMTCk7CisKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYWJjIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMTAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDEpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYmNkIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMjAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCAzKSA9PSBOVUxMKTsKKworCS8qIHNob3VsZCBub3QgbmVlZCB0byByZWxvYWQgdGhpcyB0aW1lICovCisKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBnaXRfc29ydGVkY2FjaGVfbG9ja2FuZGxvYWQoc2MsIE5VTEwpKTsKKworCS8qIHJld3JpdGUgb25kaXNrIGZpbGUgYW5kIHJlbG9hZCAqLworCisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZnJlZV9jb3VudCk7CisKKwljbF9naXRfcmV3cml0ZWZpbGUoCisJCSJjYWNoZWl0ZW1zLnR4dCIsICIxMDAgYWJjXG4yMDAgenp6XG41MDAgYWFhXG4xMCBmaW5hbFxuIik7CisJc29ydGVkY2FjaGVfdGVzdF9yZWxvYWQoc2MpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZnJlZV9jb3VudCk7CisKKwkvKiB0ZXN0IHdoYXQgd2UgbG9hZGVkICovCisKKwljbF9hc3NlcnRfZXF1YWxfc3ooNCwgZ2l0X3NvcnRlZGNhY2hlX2VudHJ5Y291bnQoc2MpKTsKKworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJhYmMiKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImFiYyIsIGl0ZW0tPnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEwMCwgaXRlbS0+dmFsdWUpOworCWNsX2Fzc2VydCgoaXRlbSA9IGdpdF9zb3J0ZWRjYWNoZV9sb29rdXAoc2MsICJmaW5hbCIpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiZmluYWwiLCBpdGVtLT5wYXRoKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxMCwgaXRlbS0+dmFsdWUpOworCWNsX2Fzc2VydChnaXRfc29ydGVkY2FjaGVfbG9va3VwKHNjLCAiY2RlIikgPT0gTlVMTCk7CisKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiYWFhIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNTAwLCBpdGVtLT52YWx1ZSk7CisJY2xfYXNzZXJ0KChpdGVtID0gZ2l0X3NvcnRlZGNhY2hlX2VudHJ5KHNjLCAyKSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImZpbmFsIiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMTAsIGl0ZW0tPnZhbHVlKTsKKwljbF9hc3NlcnQoKGl0ZW0gPSBnaXRfc29ydGVkY2FjaGVfZW50cnkoc2MsIDMpKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygienp6IiwgaXRlbS0+cGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMjAwLCBpdGVtLT52YWx1ZSk7CisKKwljbF9naXRfcGFzcyhnaXRfc29ydGVkY2FjaGVfbG9va3VwX2luZGV4KCZwb3MsIHNjLCAiYWFhIikpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBwb3MpOworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV9sb29rdXBfaW5kZXgoJnBvcywgc2MsICJhYmMiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDEsIHBvcyk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3NvcnRlZGNhY2hlX2xvb2t1cF9pbmRleCgmcG9zLCBzYywgImZpbmFsIikpOworCWNsX2Fzc2VydF9lcXVhbF9zeigyLCBwb3MpOworCWNsX2dpdF9wYXNzKGdpdF9zb3J0ZWRjYWNoZV9sb29rdXBfaW5kZXgoJnBvcywgc2MsICJ6enoiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDMsIHBvcyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koCisJCUdJVF9FTk9URk9VTkQsIGdpdF9zb3J0ZWRjYWNoZV9sb29rdXBfaW5kZXgoJnBvcywgc2MsICJtaXNzaW5nIikpOworCWNsX2Fzc2VydF9lcXVhbF9pKAorCQlHSVRfRU5PVEZPVU5ELCBnaXRfc29ydGVkY2FjaGVfbG9va3VwX2luZGV4KCZwb3MsIHNjLCAiY2RlIikpOworCisJZ2l0X3NvcnRlZGNhY2hlX2ZyZWUoc2MpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koNywgZnJlZV9jb3VudCk7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS9zdGF0LmMgYi90ZXN0cy9jb3JlL3N0YXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL3N0YXQuYwpyZW5hbWUgdG8gdGVzdHMvY29yZS9zdGF0LmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS9zdHJpbmcuYyBiL3Rlc3RzL2NvcmUvc3RyaW5nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvY29yZS9zdHJpbmcuYwpyZW5hbWUgdG8gdGVzdHMvY29yZS9zdHJpbmcuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9jb3JlL3N0cm1hcC5jIGIvdGVzdHMvY29yZS9zdHJtYXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL3N0cm1hcC5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL3N0cm1hcC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2NvcmUvc3RydG9sLmMgYi90ZXN0cy9jb3JlL3N0cnRvbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2NvcmUvc3RydG9sLmMKcmVuYW1lIHRvIHRlc3RzL2NvcmUvc3RydG9sLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvY29yZS92ZWN0b3IuYyBiL3Rlc3RzL2NvcmUvdmVjdG9yLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9jb3JlL3ZlY3Rvci5jCnJlbmFtZSB0byB0ZXN0cy9jb3JlL3ZlY3Rvci5jCmluZGV4IGM5ZTQzYTEuLmRiNTJjMDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvY29yZS92ZWN0b3IuYworKysgYi90ZXN0cy9jb3JlL3ZlY3Rvci5jCkBAIC01NCw3ICs1NCw3IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X3ZlY3Rvcl9pbnNlcnQoJngsIHB0cnNbMV0pKTsKIAljbF9hc3NlcnQoeC5sZW5ndGggPT0gNSk7CiAKLQlnaXRfdmVjdG9yX3VuaXEoJngpOworCWdpdF92ZWN0b3JfdW5pcSgmeCwgTlVMTCk7CiAJY2xfYXNzZXJ0KHgubGVuZ3RoID09IDIpOwogCiAJZ2l0X3ZlY3Rvcl9mcmVlKCZ4KTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvZGF0ZS9kYXRlLmMgYi90ZXN0cy9kYXRlL2RhdGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9kYXRlL2RhdGUuYwpyZW5hbWUgdG8gdGVzdHMvZGF0ZS9kYXRlLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvZGlmZi9ibG9iLmMgYi90ZXN0cy9kaWZmL2Jsb2IuYwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2RpZmYvYmxvYi5jCnJlbmFtZSB0byB0ZXN0cy9kaWZmL2Jsb2IuYwppbmRleCA0MmI5ZmNkLi45M2YyMDcxIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2RpZmYvYmxvYi5jCisrKyBiL3Rlc3RzL2RpZmYvYmxvYi5jCkBAIC0yNiw5ICsyNiw4IEBACiAKIAlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJhdHRyIik7CiAKLQlHSVRfSU5JVF9TVFJVQ1RVUkUoJm9wdHMsIEdJVF9ESUZGX09QVElPTlNfVkVSU0lPTik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfb3B0aW9uc19pbml0KCZvcHRzLCBHSVRfRElGRl9PUFRJT05TX1ZFUlNJT04pKTsKIAlvcHRzLmNvbnRleHRfbGluZXMgPSAxOwotCW9wdHMuaW50ZXJodW5rX2xpbmVzID0gMDsKIAogCW1lbXNldCgmZXhwZWN0ZWQsIDAsIHNpemVvZihleHBlY3RlZCkpOwogCkBAIC0xNDIsNyArMTQxLDcgQEAKIHsKIAlnaXRfYmxvYiAqYSwgKmIsICpjOwogCWdpdF9vaWQgYV9vaWQsIGJfb2lkLCBjX29pZDsKLQlnaXRfZGlmZl9wYXRjaCAqcDsKKwlnaXRfcGF0Y2ggKnA7CiAJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOwogCXNpemVfdCB0YywgdGEsIHRkOwogCkBAIC0xNjEsMTEgKzE2MCwxMSBAQAogCS8qIERvaW5nIHRoZSBlcXVpdmFsZW50IG9mIGEgYGdpdCBkaWZmIC1VMWAgb24gdGhlc2UgZmlsZXMgKi8KIAogCS8qIGRpZmYgb24gdGVzdHMvcmVzb3VyY2VzL2F0dHIvcm9vdF90ZXN0MSAqLwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIGEsIE5VTEwsIGIsIE5VTEwsICZvcHRzKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fYmxvYnMoJnAsIGEsIE5VTEwsIGIsIE5VTEwsICZvcHRzKSk7CiAKIAljbF9hc3NlcnQocCAhPSBOVUxMKTsKIAotCWRlbHRhID0gZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocCk7CisJZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApOwogCWNsX2Fzc2VydChkZWx0YSAhPSBOVUxMKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIGRlbHRhLT5zdGF0dXMpOwogCWNsX2Fzc2VydChnaXRfb2lkX2VxdWFsKGdpdF9ibG9iX2lkKGEpLCAmZGVsdGEtPm9sZF9maWxlLm9pZCkpOwpAQCAtMTczLDIyICsxNzIsMjIgQEAKIAljbF9hc3NlcnQoZ2l0X29pZF9lcXVhbChnaXRfYmxvYl9pZChiKSwgJmRlbHRhLT5uZXdfZmlsZS5vaWQpKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooZ2l0X2Jsb2JfcmF3c2l6ZShiKSwgZGVsdGEtPm5ld19maWxlLnNpemUpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDYsIGdpdF9kaWZmX3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9wYXRjaF9udW1faHVua3MocCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDYsIGdpdF9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKSk7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9saW5lX3N0YXRzKCZ0YywgJnRhLCAmdGQsIHApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfbGluZV9zdGF0cygmdGMsICZ0YSwgJnRkLCBwKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludCl0Yyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNSwgKGludCl0YSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgKGludCl0ZCk7CiAKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHApOworCWdpdF9wYXRjaF9mcmVlKHApOwogCiAJLyogZGlmZiBvbiB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3QyICovCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZnJvbV9ibG9icygmcCwgYiwgTlVMTCwgYywgTlVMTCwgJm9wdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9icygmcCwgYiwgTlVMTCwgYywgTlVMTCwgJm9wdHMpKTsKIAogCWNsX2Fzc2VydChwICE9IE5VTEwpOwogCi0JZGVsdGEgPSBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKTsKKwlkZWx0YSA9IGdpdF9wYXRjaF9nZXRfZGVsdGEocCk7CiAJY2xfYXNzZXJ0KGRlbHRhICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9NT0RJRklFRCwgZGVsdGEtPnN0YXR1cyk7CiAJY2xfYXNzZXJ0KGdpdF9vaWRfZXF1YWwoZ2l0X2Jsb2JfaWQoYiksICZkZWx0YS0+b2xkX2ZpbGUub2lkKSk7CkBAIC0xOTYsMjIgKzE5NSwyMiBAQAogCWNsX2Fzc2VydChnaXRfb2lkX2VxdWFsKGdpdF9ibG9iX2lkKGMpLCAmZGVsdGEtPm5ld19maWxlLm9pZCkpOwogCWNsX2Fzc2VydF9lcXVhbF9zeihnaXRfYmxvYl9yYXdzaXplKGMpLCBkZWx0YS0+bmV3X2ZpbGUuc2l6ZSk7CiAKLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX3BhdGNoX251bV9odW5rcyhwKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMTUsIGdpdF9kaWZmX3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9wYXRjaF9udW1faHVua3MocCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDE1LCBnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocCwgMCkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfbGluZV9zdGF0cygmdGMsICZ0YSwgJnRkLCBwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2xpbmVfc3RhdHMoJnRjLCAmdGEsICZ0ZCwgcCkpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIChpbnQpdGMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDksIChpbnQpdGEpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIChpbnQpdGQpOwogCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAogCS8qIGRpZmYgb24gdGVzdHMvcmVzb3VyY2VzL2F0dHIvcm9vdF90ZXN0MyAqLwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIGEsIE5VTEwsIGMsIE5VTEwsICZvcHRzKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fYmxvYnMoJnAsIGEsIE5VTEwsIGMsIE5VTEwsICZvcHRzKSk7CiAKIAljbF9hc3NlcnQocCAhPSBOVUxMKTsKIAotCWRlbHRhID0gZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocCk7CisJZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApOwogCWNsX2Fzc2VydChkZWx0YSAhPSBOVUxMKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIGRlbHRhLT5zdGF0dXMpOwogCWNsX2Fzc2VydChnaXRfb2lkX2VxdWFsKGdpdF9ibG9iX2lkKGEpLCAmZGVsdGEtPm9sZF9maWxlLm9pZCkpOwpAQCAtMjE5LDE5ICsyMTgsMTkgQEAKIAljbF9hc3NlcnQoZ2l0X29pZF9lcXVhbChnaXRfYmxvYl9pZChjKSwgJmRlbHRhLT5uZXdfZmlsZS5vaWQpKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooZ2l0X2Jsb2JfcmF3c2l6ZShjKSwgZGVsdGEtPm5ld19maWxlLnNpemUpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfbGluZV9zdGF0cygmdGMsICZ0YSwgJnRkLCBwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2xpbmVfc3RhdHMoJnRjLCAmdGEsICZ0ZCwgcCkpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpdGMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEyLCAoaW50KXRhKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KXRkKTsKIAotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKIAkvKiBvbmUgbW9yZSAqLwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIGMsIE5VTEwsIGQsIE5VTEwsICZvcHRzKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fYmxvYnMoJnAsIGMsIE5VTEwsIGQsIE5VTEwsICZvcHRzKSk7CiAKIAljbF9hc3NlcnQocCAhPSBOVUxMKTsKIAotCWRlbHRhID0gZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocCk7CisJZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApOwogCWNsX2Fzc2VydChkZWx0YSAhPSBOVUxMKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIGRlbHRhLT5zdGF0dXMpOwogCWNsX2Fzc2VydChnaXRfb2lkX2VxdWFsKGdpdF9ibG9iX2lkKGMpLCAmZGVsdGEtPm9sZF9maWxlLm9pZCkpOwpAQCAtMjM5LDE2ICsyMzgsMTYgQEAKIAljbF9hc3NlcnQoZ2l0X29pZF9lcXVhbChnaXRfYmxvYl9pZChkKSwgJmRlbHRhLT5uZXdfZmlsZS5vaWQpKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooZ2l0X2Jsb2JfcmF3c2l6ZShkKSwgZGVsdGEtPm5ld19maWxlLnNpemUpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koMiwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDUsIGdpdF9kaWZmX3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg5LCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAxKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMiwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg1LCBnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocCwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDksIGdpdF9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAxKSk7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9saW5lX3N0YXRzKCZ0YywgJnRhLCAmdGQsIHApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfbGluZV9zdGF0cygmdGMsICZ0YSwgJnRkLCBwKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNCwgKGludCl0Yyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNiwgKGludCl0YSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNCwgKGludCl0ZCk7CiAKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHApOworCWdpdF9wYXRjaF9mcmVlKHApOwogCiAJZ2l0X2Jsb2JfZnJlZShhKTsKIAlnaXRfYmxvYl9mcmVlKGIpOwpAQCAtMzE3LDE2ICszMTYsMTYgQEAKIHZvaWQgdGVzdF9kaWZmX2Jsb2JfX2Nhbl9jb21wYXJlX2FnYWluc3RfbnVsbF9ibG9ic193aXRoX3BhdGNoKHZvaWQpCiB7CiAJZ2l0X2Jsb2IgKmUgPSBOVUxMOwotCWdpdF9kaWZmX3BhdGNoICpwOworCWdpdF9wYXRjaCAqcDsKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7Ci0JaW50IGxpbmU7Ci0JY2hhciBvcmlnaW47CisJY29uc3QgZ2l0X2RpZmZfbGluZSAqbGluZTsKKwlpbnQgbCwgbWF4X2w7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JzKCZwLCBkLCBOVUxMLCBlLCBOVUxMLCAmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JzKCZwLCBkLCBOVUxMLCBlLCBOVUxMLCAmb3B0cykpOwogCiAJY2xfYXNzZXJ0KHAgIT0gTlVMTCk7CiAKLQlkZWx0YSA9IGdpdF9kaWZmX3BhdGNoX2RlbHRhKHApOworCWRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwKTsKIAljbF9hc3NlcnQoZGVsdGEgIT0gTlVMTCk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX0RFTEVURUQsIGRlbHRhLT5zdGF0dXMpOwogCWNsX2Fzc2VydChnaXRfb2lkX2VxdWFsKGdpdF9ibG9iX2lkKGQpLCAmZGVsdGEtPm9sZF9maWxlLm9pZCkpOwpAQCAtMzM0LDI0ICszMzMsMjQgQEAKIAljbF9hc3NlcnQoZ2l0X29pZF9pc3plcm8oJmRlbHRhLT5uZXdfZmlsZS5vaWQpKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZGVsdGEtPm5ld19maWxlLnNpemUpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDE0LCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxNCwgZ2l0X3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKIAotCWZvciAobGluZSA9IDA7IGxpbmUgPCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKTsgKytsaW5lKSB7Ci0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCQkmb3JpZ2luLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBwLCAwLCBsaW5lKSk7Ci0JCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfREVMRVRJT04sIChpbnQpb3JpZ2luKTsKKwltYXhfbCA9IGdpdF9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKTsKKwlmb3IgKGwgPSAwOyBsIDwgbWF4X2w7ICsrbCkgeworCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcCwgMCwgbCkpOworCQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0RFTEVUSU9OLCAoaW50KWxpbmUtPm9yaWdpbik7CiAJfQogCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAogCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfUkVWRVJTRTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIGQsIE5VTEwsIGUsIE5VTEwsICZvcHRzKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fYmxvYnMoJnAsIGQsIE5VTEwsIGUsIE5VTEwsICZvcHRzKSk7CiAKIAljbF9hc3NlcnQocCAhPSBOVUxMKTsKIAotCWRlbHRhID0gZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocCk7CisJZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApOwogCWNsX2Fzc2VydChkZWx0YSAhPSBOVUxMKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfQURERUQsIGRlbHRhLT5zdGF0dXMpOwogCWNsX2Fzc2VydChnaXRfb2lkX2lzemVybygmZGVsdGEtPm9sZF9maWxlLm9pZCkpOwpAQCAtMzU5LDQ0ICszNTgsNDQgQEAKIAljbF9hc3NlcnQoZ2l0X29pZF9lcXVhbChnaXRfYmxvYl9pZChkKSwgJmRlbHRhLT5uZXdfZmlsZS5vaWQpKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooZ2l0X2Jsb2JfcmF3c2l6ZShkKSwgZGVsdGEtPm5ld19maWxlLnNpemUpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDE0LCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxNCwgZ2l0X3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKIAotCWZvciAobGluZSA9IDA7IGxpbmUgPCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKTsgKytsaW5lKSB7Ci0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCQkmb3JpZ2luLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBwLCAwLCBsaW5lKSk7Ci0JCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfQURESVRJT04sIChpbnQpb3JpZ2luKTsKKwltYXhfbCA9IGdpdF9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKTsKKwlmb3IgKGwgPSAwOyBsIDwgbWF4X2w7ICsrbCkgeworCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcCwgMCwgbCkpOworCQljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0FERElUSU9OLCAoaW50KWxpbmUtPm9yaWdpbik7CiAJfQogCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAogCW9wdHMuZmxhZ3MgXj0gR0lUX0RJRkZfUkVWRVJTRTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIGFsaWVuLCBOVUxMLCBOVUxMLCBOVUxMLCAmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JzKCZwLCBhbGllbiwgTlVMTCwgTlVMTCwgTlVMTCwgJm9wdHMpKTsKIAogCWNsX2Fzc2VydChwICE9IE5VTEwpOwogCi0JZGVsdGEgPSBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKTsKKwlkZWx0YSA9IGdpdF9wYXRjaF9nZXRfZGVsdGEocCk7CiAJY2xfYXNzZXJ0KGRlbHRhICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9ERUxFVEVELCBkZWx0YS0+c3RhdHVzKTsKIAljbF9hc3NlcnQoKGRlbHRhLT5mbGFncyAmIEdJVF9ESUZGX0ZMQUdfQklOQVJZKSAhPSAwKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCAoaW50KWdpdF9wYXRjaF9udW1faHVua3MocCkpOwogCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIE5VTEwsIE5VTEwsIGFsaWVuLCBOVUxMLCAmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JzKCZwLCBOVUxMLCBOVUxMLCBhbGllbiwgTlVMTCwgJm9wdHMpKTsKIAogCWNsX2Fzc2VydChwICE9IE5VTEwpOwogCi0JZGVsdGEgPSBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKTsKKwlkZWx0YSA9IGdpdF9wYXRjaF9nZXRfZGVsdGEocCk7CiAJY2xfYXNzZXJ0KGRlbHRhICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9BRERFRCwgZGVsdGEtPnN0YXR1cyk7CiAJY2xfYXNzZXJ0KChkZWx0YS0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX0JJTkFSWSkgIT0gMCk7CiAKLQljbF9hc3NlcnRfZXF1YWxfaSgwLCAoaW50KWdpdF9kaWZmX3BhdGNoX251bV9odW5rcyhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHApKTsKIAotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFzc2VydF9pZGVudGljYWxfYmxvYnNfY29tcGFyaXNvbihkaWZmX2V4cGVjdHMgKmV4cGVjdGVkKQpAQCAtNDM3LDEzICs0MzYsMTMgQEAKIAogdm9pZCB0ZXN0X2RpZmZfYmxvYl9fY2FuX2NvbXBhcmVfaWRlbnRpY2FsX2Jsb2JzX3dpdGhfcGF0Y2godm9pZCkKIHsKLQlnaXRfZGlmZl9wYXRjaCAqcDsKKwlnaXRfcGF0Y2ggKnA7CiAJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZnJvbV9ibG9icygmcCwgZCwgTlVMTCwgZCwgTlVMTCwgJm9wdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9icygmcCwgZCwgTlVMTCwgZCwgTlVMTCwgJm9wdHMpKTsKIAljbF9hc3NlcnQocCAhPSBOVUxMKTsKIAotCWRlbHRhID0gZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocCk7CisJZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApOwogCWNsX2Fzc2VydChkZWx0YSAhPSBOVUxMKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfVU5NT0RJRklFRCwgZGVsdGEtPnN0YXR1cyk7CiAJY2xfYXNzZXJ0X2VxdWFsX3N6KGRlbHRhLT5vbGRfZmlsZS5zaXplLCBnaXRfYmxvYl9yYXdzaXplKGQpKTsKQEAgLTQ1MSwxMyArNDUwLDEzIEBACiAJY2xfYXNzZXJ0X2VxdWFsX3N6KGRlbHRhLT5uZXdfZmlsZS5zaXplLCBnaXRfYmxvYl9yYXdzaXplKGQpKTsKIAljbF9hc3NlcnQoZ2l0X29pZF9lcXVhbChnaXRfYmxvYl9pZChkKSwgJmRlbHRhLT5uZXdfZmlsZS5vaWQpKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHApKTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHApOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwKSk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JzKCZwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JzKCZwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmb3B0cykpOwogCWNsX2Fzc2VydChwICE9IE5VTEwpOwogCi0JZGVsdGEgPSBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKTsKKwlkZWx0YSA9IGdpdF9wYXRjaF9nZXRfZGVsdGEocCk7CiAJY2xfYXNzZXJ0KGRlbHRhICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9VTk1PRElGSUVELCBkZWx0YS0+c3RhdHVzKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZGVsdGEtPm9sZF9maWxlLnNpemUpOwpAQCAtNDY1LDE0ICs0NjQsMTQgQEAKIAljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZGVsdGEtPm5ld19maWxlLnNpemUpOwogCWNsX2Fzc2VydChnaXRfb2lkX2lzemVybygmZGVsdGEtPm5ld19maWxlLm9pZCkpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koMCwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocCkpOwotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHApKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYnMoJnAsIGFsaWVuLCBOVUxMLCBhbGllbiwgTlVMTCwgJm9wdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9icygmcCwgYWxpZW4sIE5VTEwsIGFsaWVuLCBOVUxMLCAmb3B0cykpOwogCWNsX2Fzc2VydChwICE9IE5VTEwpOwotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9VTk1PRElGSUVELCBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKS0+c3RhdHVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgwLCAoaW50KWdpdF9kaWZmX3BhdGNoX251bV9odW5rcyhwKSk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfVU5NT0RJRklFRCwgZ2l0X3BhdGNoX2dldF9kZWx0YShwKS0+c3RhdHVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCAoaW50KWdpdF9wYXRjaF9udW1faHVua3MocCkpOworCWdpdF9wYXRjaF9mcmVlKHApOwogfQogCiBzdGF0aWMgdm9pZCBhc3NlcnRfYmluYXJ5X2Jsb2JzX2NvbXBhcmlzb24oZGlmZl9leHBlY3RzICpleHBlY3RlZCkKQEAgLTY5Myw3ICs2OTIsNyBAQAogCiB2b2lkIHRlc3RfZGlmZl9ibG9iX19jYW5fY29tcGFyZV9ibG9iX3RvX2J1ZmZlcl93aXRoX3BhdGNoKHZvaWQpCiB7Ci0JZ2l0X2RpZmZfcGF0Y2ggKnA7CisJZ2l0X3BhdGNoICpwOwogCWdpdF9ibG9iICphOwogCWdpdF9vaWQgYV9vaWQ7CiAJY29uc3QgY2hhciAqYV9jb250ZW50ID0gIkhlbGxvIGZyb20gdGhlIHJvb3RcbiI7CkBAIC03MDUsNTggKzcwNCw1OCBAQAogCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cF9wcmVmaXgoJmEsIGdfcmVwbywgJmFfb2lkLCA0KSk7CiAKIAkvKiBkaWZmIGZyb20gYmxvYiBhIHRvIGNvbnRlbnQgb2YgYiAqLwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIGEsIE5VTEwsIGJfY29udGVudCwgc3RybGVuKGJfY29udGVudCksIE5VTEwsICZvcHRzKSk7CiAKIAljbF9hc3NlcnQocCAhPSBOVUxMKTsKLQljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIGdpdF9kaWZmX3BhdGNoX2RlbHRhKHApLT5zdGF0dXMpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHApKTsKLQljbF9hc3NlcnRfZXF1YWxfaSg2LCBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX01PRElGSUVELCBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApLT5zdGF0dXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNiwgZ2l0X3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2xpbmVfc3RhdHMoJnRjLCAmdGEsICZ0ZCwgcCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9saW5lX3N0YXRzKCZ0YywgJnRhLCAmdGQsIHApKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KXRjKTsKIAljbF9hc3NlcnRfZXF1YWxfaSg1LCAoaW50KXRhKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCAoaW50KXRkKTsKIAotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKIAkvKiBkaWZmIGZyb20gYmxvYiBhIHRvIGNvbnRlbnQgb2YgYSAqLwogCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSU5DTFVERV9VTk1PRElGSUVEOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIGEsIE5VTEwsIGFfY29udGVudCwgc3RybGVuKGFfY29udGVudCksIE5VTEwsICZvcHRzKSk7CiAJY2xfYXNzZXJ0KHAgIT0gTlVMTCk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX1VOTU9ESUZJRUQsIGdpdF9kaWZmX3BhdGNoX2RlbHRhKHApLT5zdGF0dXMpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHApKTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHApOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9VTk1PRElGSUVELCBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApLT5zdGF0dXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwKSk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKIAkvKiBkaWZmIGZyb20gTlVMTCBibG9iIHRvIGNvbnRlbnQgb2YgYSAqLwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIE5VTEwsIE5VTEwsIGFfY29udGVudCwgc3RybGVuKGFfY29udGVudCksIE5VTEwsICZvcHRzKSk7CiAJY2xfYXNzZXJ0KHAgIT0gTlVMTCk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX0FEREVELCBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKS0+c3RhdHVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX3BhdGNoX251bV9odW5rcyhwKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgZ2l0X2RpZmZfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocCwgMCkpOwotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX0FEREVELCBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHApLT5zdGF0dXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZ2l0X3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAogCS8qIGRpZmYgZnJvbSBibG9iIGEgdG8gTlVMTCBidWZmZXIgKi8KLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9iX2FuZF9idWZmZXIoCiAJCSZwLCBhLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCAmb3B0cykpOwogCWNsX2Fzc2VydChwICE9IE5VTEwpOwotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9ERUxFVEVELCBnaXRfZGlmZl9wYXRjaF9kZWx0YShwKS0+c3RhdHVzKTsKLQljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX3BhdGNoX251bV9odW5rcyhwKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgZ2l0X2RpZmZfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocCwgMCkpOwotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX0RFTEVURUQsIGdpdF9wYXRjaF9nZXRfZGVsdGEocCktPnN0YXR1cyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCBnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocCwgMCkpOworCWdpdF9wYXRjaF9mcmVlKHApOwogCiAJLyogZGlmZiB3aXRoIHJldmVyc2UgKi8KIAlvcHRzLmZsYWdzIF49IEdJVF9ESUZGX1JFVkVSU0U7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9iX2FuZF9idWZmZXIoCiAJCSZwLCBhLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCAmb3B0cykpOwogCWNsX2Fzc2VydChwICE9IE5VTEwpOwotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9BRERFRCwgZ2l0X2RpZmZfcGF0Y2hfZGVsdGEocCktPnN0YXR1cyk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocCkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGdpdF9kaWZmX3BhdGNoX251bV9saW5lc19pbl9odW5rKHAsIDApKTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHApOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9BRERFRCwgZ2l0X3BhdGNoX2dldF9kZWx0YShwKS0+c3RhdHVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9wYXRjaF9udW1faHVua3MocCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGdpdF9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwLCAwKSk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKIAlnaXRfYmxvYl9mcmVlKGEpOwogfQpAQCAtODUzLDcgKzg1Miw3IEBACiAJCSIwMTIzNDU2Nzg5XG5ceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDAwXG4wMTIzNDU2Nzg5XG4iOwogCXNpemVfdCBiaW5fbGVuID0gMzM7CiAJY29uc3QgY2hhciAqY2hhbmdlZDsKLQlnaXRfZGlmZl9wYXRjaCAqcDsKKwlnaXRfcGF0Y2ggKnA7CiAJY2hhciAqcG91dDsKIAogCS8qIHNldCB1cCBjdXN0b20gZGlmZiBkcml2ZXJzIGFuZCAnZGlmZicgYXR0cmlidXRlIG1hcHBpbmdzIGZvciB0aGVtICovCkBAIC05NTAsOSArOTQ5LDkgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgzLCBleHBlY3RlZC5saW5lX2FkZHMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cGVjdGVkLmxpbmVfZGVscyk7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9iX2FuZF9idWZmZXIoCiAJCSZwLCBub25iaW4sICJ6enoubm9ybWFsIiwgY2hhbmdlZCwgc3RybGVuKGNoYW5nZWQpLCBOVUxMLCAmb3B0cykpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX3RvX3N0cigmcG91dCwgcCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF90b19zdHIoJnBvdXQsIHApKTsKIAljbF9hc3NlcnRfZXF1YWxfcygKIAkJImRpZmYgLS1naXQgYS96enoubm9ybWFsIGIvenp6Lm5vcm1hbFxuIgogCQkiaW5kZXggNDUxNDFhNy4uNzViMGRiYiAxMDA2NDRcbiIKQEAgLTk2MywyMSArOTYyLDIxIEBACiAJCSIrQW5kIG1vcmVcbiIKIAkJIitHbyBoZXJlXG4iLCBwb3V0KTsKIAlnaXRfX2ZyZWUocG91dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIG5vbmJpbiwgInp6ei5iaW5hcnkiLCBjaGFuZ2VkLCBzdHJsZW4oY2hhbmdlZCksIE5VTEwsICZvcHRzKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZwb3V0LCBwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmcG91dCwgcCkpOwogCWNsX2Fzc2VydF9lcXVhbF9zKAogCQkiZGlmZiAtLWdpdCBhL3p6ei5iaW5hcnkgYi96enouYmluYXJ5XG4iCiAJCSJpbmRleCA0NTE0MWE3Li43NWIwZGJiIDEwMDY0NFxuIgogCQkiQmluYXJ5IGZpbGVzIGEvenp6LmJpbmFyeSBhbmQgYi96enouYmluYXJ5IGRpZmZlclxuIiwgcG91dCk7CiAJZ2l0X19mcmVlKHBvdXQpOwotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9ibG9iX2FuZF9idWZmZXIoCiAJCSZwLCBub25iaW4sICJ6enouYWxwaGFyeSIsIGNoYW5nZWQsIHN0cmxlbihjaGFuZ2VkKSwgTlVMTCwgJm9wdHMpKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnBvdXQsIHApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZwb3V0LCBwKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MoCiAJCSJkaWZmIC0tZ2l0IGEvenp6LmFscGhhcnkgYi96enouYWxwaGFyeVxuIgogCQkiaW5kZXggNDUxNDFhNy4uNzViMGRiYiAxMDA2NDRcbiIKQEAgLTk4OCwxMSArOTg3LDExIEBACiAJCSIrQW5kIG1vcmVcbiIKIAkJIitHbyBoZXJlXG4iLCBwb3V0KTsKIAlnaXRfX2ZyZWUocG91dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIG5vbmJpbiwgInp6ei5udW1hcnkiLCBjaGFuZ2VkLCBzdHJsZW4oY2hhbmdlZCksIE5VTEwsICZvcHRzKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZwb3V0LCBwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmcG91dCwgcCkpOwogCWNsX2Fzc2VydF9lcXVhbF9zKAogCQkiZGlmZiAtLWdpdCBhL3p6ei5udW1hcnkgYi96enoubnVtYXJ5XG4iCiAJCSJpbmRleCA0NTE0MWE3Li43NWIwZGJiIDEwMDY0NFxuIgpAQCAtMTAwMyw3ICsxMDAyLDcgQEAKIAkJIitBbmQgbW9yZVxuIgogCQkiK0dvIGhlcmVcbiIsIHBvdXQpOwogCWdpdF9fZnJlZShwb3V0KTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHApOworCWdpdF9wYXRjaF9mcmVlKHApOwogCiAJLyogIjAxMjM0NTY3ODlcblx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MDBcbjAxMjM0NTY3ODlcbiIKIAkgKiAzMyBieXRlcwpAQCAtMTAxMSwxOSArMTAxMCwxOSBAQAogCiAJY2hhbmdlZCA9ICIwMTIzNDU2Nzg5XG5ceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDAwXG5yZXBsYWNlIGEgbGluZVxuIjsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIGJpbiwgInp6ei5ub3JtYWwiLCBjaGFuZ2VkLCAzNywgTlVMTCwgJm9wdHMpKTsKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnBvdXQsIHApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZwb3V0LCBwKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MoCiAJCSJkaWZmIC0tZ2l0IGEvenp6Lm5vcm1hbCBiL3p6ei5ub3JtYWxcbiIKIAkJImluZGV4IGI0MzVjZDUuLjE2MDQ1MTkgMTAwNjQ0XG4iCiAJCSJCaW5hcnkgZmlsZXMgYS96enoubm9ybWFsIGFuZCBiL3p6ei5ub3JtYWwgZGlmZmVyXG4iLCBwb3V0KTsKIAlnaXRfX2ZyZWUocG91dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIGJpbiwgInp6ei50ZXh0YXJ5IiwgY2hhbmdlZCwgMzcsIE5VTEwsICZvcHRzKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZwb3V0LCBwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmcG91dCwgcCkpOwogCWNsX2Fzc2VydF9lcXVhbF9zKAogCQkiZGlmZiAtLWdpdCBhL3p6ei50ZXh0YXJ5IGIvenp6LnRleHRhcnlcbiIKIAkJImluZGV4IGI0MzVjZDUuLjE2MDQ1MTkgMTAwNjQ0XG4iCkBAIC0xMDMzLDExICsxMDMyLDExIEBACiAJCSItMDEyMzQ1Njc4OVxuIgogCQkiK3JlcGxhY2UgYSBsaW5lXG4iLCBwb3V0KTsKIAlnaXRfX2ZyZWUocG91dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIGJpbiwgInp6ei50ZXh0YWxwaGFyeSIsIGNoYW5nZWQsIDM3LCBOVUxMLCAmb3B0cykpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX3RvX3N0cigmcG91dCwgcCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF90b19zdHIoJnBvdXQsIHApKTsKIAljbF9hc3NlcnRfZXF1YWxfcygKIAkJImRpZmYgLS1naXQgYS96enoudGV4dGFscGhhcnkgYi96enoudGV4dGFscGhhcnlcbiIKIAkJImluZGV4IGI0MzVjZDUuLjE2MDQ1MTkgMTAwNjQ0XG4iCkBAIC0xMDQ3LDExICsxMDQ2LDExIEBACiAJCSItMDEyMzQ1Njc4OVxuIgogCQkiK3JlcGxhY2UgYSBsaW5lXG4iLCBwb3V0KTsKIAlnaXRfX2ZyZWUocG91dCk7Ci0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwKTsKKwlnaXRfcGF0Y2hfZnJlZShwKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2Zyb21fYmxvYl9hbmRfYnVmZmVyKAorCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2Jsb2JfYW5kX2J1ZmZlcigKIAkJJnAsIGJpbiwgInp6ei50ZXh0bnVtYXJ5IiwgY2hhbmdlZCwgMzcsIE5VTEwsICZvcHRzKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfdG9fc3RyKCZwb3V0LCBwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmcG91dCwgcCkpOwogCWNsX2Fzc2VydF9lcXVhbF9zKAogCQkiZGlmZiAtLWdpdCBhL3p6ei50ZXh0bnVtYXJ5IGIvenp6LnRleHRudW1hcnlcbiIKIAkJImluZGV4IGI0MzVjZDUuLjE2MDQ1MTkgMTAwNjQ0XG4iCkBAIC0xMDYxLDcgKzEwNjAsNyBAQAogCQkiLTAxMjM0NTY3ODlcbiIKIAkJIityZXBsYWNlIGEgbGluZVxuIiwgcG91dCk7CiAJZ2l0X19mcmVlKHBvdXQpOwotCWdpdF9kaWZmX3BhdGNoX2ZyZWUocCk7CisJZ2l0X3BhdGNoX2ZyZWUocCk7CiAKIAlnaXRfYmxvYl9mcmVlKG5vbmJpbik7CiAJZ2l0X2Jsb2JfZnJlZShiaW4pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvZGlmZi9kaWZmX2hlbHBlcnMuYyBiL3Rlc3RzL2RpZmYvZGlmZl9oZWxwZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiYjU2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RpZmYvZGlmZl9oZWxwZXJzLmMKQEAgLTAsMCArMSwyNDYgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJkaWZmX2hlbHBlcnMuaCIKKworZ2l0X3RyZWUgKnJlc29sdmVfY29tbWl0X29pZF90b190cmVlKAorCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKnBhcnRpYWxfb2lkKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4ocGFydGlhbF9vaWQpOworCWdpdF9vaWQgb2lkOworCWdpdF9vYmplY3QgKm9iaiA9IE5VTEw7CisJZ2l0X3RyZWUgKnRyZWUgPSBOVUxMOworCisJaWYgKGdpdF9vaWRfZnJvbXN0cm4oJm9pZCwgcGFydGlhbF9vaWQsIGxlbikgPT0gMCkKKwkJZ2l0X29iamVjdF9sb29rdXBfcHJlZml4KCZvYmosIHJlcG8sICZvaWQsIGxlbiwgR0lUX09CSl9BTlkpOworCWNsX2Fzc2VydChvYmopOworCWlmIChnaXRfb2JqZWN0X3R5cGUob2JqKSA9PSBHSVRfT0JKX1RSRUUpCisJCXJldHVybiAoZ2l0X3RyZWUgKilvYmo7CisJY2xfYXNzZXJ0KGdpdF9vYmplY3RfdHlwZShvYmopID09IEdJVF9PQkpfQ09NTUlUKTsKKwljbF9naXRfcGFzcyhnaXRfY29tbWl0X3RyZWUoJnRyZWUsIChnaXRfY29tbWl0ICopb2JqKSk7CisJZ2l0X29iamVjdF9mcmVlKG9iaik7CisJcmV0dXJuIHRyZWU7Cit9CisKK3N0YXRpYyBjaGFyIGRpZmZfcGlja19zdWZmaXgoaW50IG1vZGUpCit7CisJaWYgKFNfSVNESVIobW9kZSkpCisJCXJldHVybiAnLyc7CisJZWxzZSBpZiAoR0lUX1BFUk1TX0lTX0VYRUMobW9kZSkpCisJCXJldHVybiAnKic7CisJZWxzZQorCQlyZXR1cm4gJyAnOworfQorCitzdGF0aWMgdm9pZCBmcHJpbnRmX2RlbHRhKEZJTEUgKmZwLCBjb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsIGZsb2F0IHByb2dyZXNzKQoreworCWNoYXIgY29kZSA9IGdpdF9kaWZmX3N0YXR1c19jaGFyKGRlbHRhLT5zdGF0dXMpOworCWNoYXIgb2xkX3N1ZmZpeCA9IGRpZmZfcGlja19zdWZmaXgoZGVsdGEtPm9sZF9maWxlLm1vZGUpOworCWNoYXIgbmV3X3N1ZmZpeCA9IGRpZmZfcGlja19zdWZmaXgoZGVsdGEtPm5ld19maWxlLm1vZGUpOworCisJZnByaW50ZihmcCwgIiVjXHQlcyIsIGNvZGUsIGRlbHRhLT5vbGRfZmlsZS5wYXRoKTsKKworCWlmICgoZGVsdGEtPm9sZF9maWxlLnBhdGggIT0gZGVsdGEtPm5ld19maWxlLnBhdGggJiYKKwkJIHN0cmNtcChkZWx0YS0+b2xkX2ZpbGUucGF0aCwgZGVsdGEtPm5ld19maWxlLnBhdGgpICE9IDApIHx8CisJCShkZWx0YS0+b2xkX2ZpbGUubW9kZSAhPSBkZWx0YS0+bmV3X2ZpbGUubW9kZSAmJgorCQkgZGVsdGEtPm9sZF9maWxlLm1vZGUgIT0gMCAmJiBkZWx0YS0+bmV3X2ZpbGUubW9kZSAhPSAwKSkKKwkJZnByaW50ZihmcCwgIiVjICVzJWMiLCBvbGRfc3VmZml4LCBkZWx0YS0+bmV3X2ZpbGUucGF0aCwgbmV3X3N1ZmZpeCk7CisJZWxzZSBpZiAob2xkX3N1ZmZpeCAhPSAnICcpCisJCWZwcmludGYoZnAsICIlYyIsIG9sZF9zdWZmaXgpOworCisJZnByaW50ZihmcCwgIlx0WyUuMmZdXG4iLCBwcm9ncmVzcyk7Cit9CisKK2ludCBkaWZmX2ZpbGVfY2IoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAorCWZsb2F0IHByb2dyZXNzLAorCXZvaWQgKnBheWxvYWQpCit7CisJZGlmZl9leHBlY3RzICplID0gcGF5bG9hZDsKKworCWlmIChlLT5kZWJ1ZykKKwkJZnByaW50Zl9kZWx0YShzdGRlcnIsIGRlbHRhLCBwcm9ncmVzcyk7CisKKwlpZiAoZS0+bmFtZXMpCisJCWNsX2Fzc2VydF9lcXVhbF9zKGUtPm5hbWVzW2UtPmZpbGVzXSwgZGVsdGEtPm9sZF9maWxlLnBhdGgpOworCWlmIChlLT5zdGF0dXNlcykKKwkJY2xfYXNzZXJ0X2VxdWFsX2koZS0+c3RhdHVzZXNbZS0+ZmlsZXNdLCAoaW50KWRlbHRhLT5zdGF0dXMpOworCisJZS0+ZmlsZXMrKzsKKworCWlmICgoZGVsdGEtPmZsYWdzICYgR0lUX0RJRkZfRkxBR19CSU5BUlkpICE9IDApCisJCWUtPmZpbGVzX2JpbmFyeSsrOworCisJY2xfYXNzZXJ0KGRlbHRhLT5zdGF0dXMgPD0gR0lUX0RFTFRBX1RZUEVDSEFOR0UpOworCisJZS0+ZmlsZV9zdGF0dXNbZGVsdGEtPnN0YXR1c10gKz0gMTsKKworCXJldHVybiAwOworfQorCitpbnQgZGlmZl9wcmludF9maWxlX2NiKAorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKKwlmbG9hdCBwcm9ncmVzcywKKwl2b2lkICpwYXlsb2FkKQoreworCWlmICghcGF5bG9hZCkgeworCQlmcHJpbnRmX2RlbHRhKHN0ZGVyciwgZGVsdGEsIHByb2dyZXNzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCEoKGRpZmZfZXhwZWN0cyAqKXBheWxvYWQpLT5kZWJ1ZykKKwkJZnByaW50Zl9kZWx0YShzdGRlcnIsIGRlbHRhLCBwcm9ncmVzcyk7CisKKwlyZXR1cm4gZGlmZl9maWxlX2NiKGRlbHRhLCBwcm9ncmVzcywgcGF5bG9hZCk7Cit9CisKK2ludCBkaWZmX2h1bmtfY2IoCisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLAorCWNvbnN0IGdpdF9kaWZmX2h1bmsgKmh1bmssCisJdm9pZCAqcGF5bG9hZCkKK3sKKwlkaWZmX2V4cGVjdHMgKmUgPSBwYXlsb2FkOworCWNvbnN0IGNoYXIgKnNjYW4gPSBodW5rLT5oZWFkZXIsICpzY2FuX2VuZCA9IHNjYW4gKyBodW5rLT5oZWFkZXJfbGVuOworCisJR0lUX1VOVVNFRChkZWx0YSk7CisKKwkvKiBjb25maXJtIG5vIE5VTCBieXRlcyBpbiBoZWFkZXIgdGV4dCAqLworCXdoaWxlIChzY2FuIDwgc2Nhbl9lbmQpCisJCWNsX2Fzc2VydCgnXDAnICE9ICpzY2FuKyspOworCisJZS0+aHVua3MrKzsKKwllLT5odW5rX29sZF9saW5lcyArPSBodW5rLT5vbGRfbGluZXM7CisJZS0+aHVua19uZXdfbGluZXMgKz0gaHVuay0+bmV3X2xpbmVzOworCXJldHVybiAwOworfQorCitpbnQgZGlmZl9saW5lX2NiKAorCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSwKKwljb25zdCBnaXRfZGlmZl9odW5rICpodW5rLAorCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmUsCisJdm9pZCAqcGF5bG9hZCkKK3sKKwlkaWZmX2V4cGVjdHMgKmUgPSBwYXlsb2FkOworCisJR0lUX1VOVVNFRChkZWx0YSk7CisJR0lUX1VOVVNFRChodW5rKTsKKworCWUtPmxpbmVzKys7CisJc3dpdGNoIChsaW5lLT5vcmlnaW4pIHsKKwljYXNlIEdJVF9ESUZGX0xJTkVfQ09OVEVYVDoKKwljYXNlIEdJVF9ESUZGX0xJTkVfQ09OVEVYVF9FT0ZOTDogLyogdGVjaGljYWxseSBub3QgYSBsaW5lICovCisJCWUtPmxpbmVfY3R4dCsrOworCQlicmVhazsKKwljYXNlIEdJVF9ESUZGX0xJTkVfQURESVRJT046CisJY2FzZSBHSVRfRElGRl9MSU5FX0FERF9FT0ZOTDogLyogdGVjaG5pY2FsbHkgbm90IGEgbGluZSBhZGQgKi8KKwkJZS0+bGluZV9hZGRzKys7CisJCWJyZWFrOworCWNhc2UgR0lUX0RJRkZfTElORV9ERUxFVElPTjoKKwljYXNlIEdJVF9ESUZGX0xJTkVfREVMX0VPRk5MOiAvKiB0ZWNobmljYWxseSBub3QgYSBsaW5lIGRlbGV0ZSAqLworCQllLT5saW5lX2RlbHMrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZGlmZl9mb3JlYWNoX3ZpYV9pdGVyYXRvcigKKwlnaXRfZGlmZiAqZGlmZiwKKwlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCisJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAorCWdpdF9kaWZmX2xpbmVfY2IgbGluZV9jYiwKKwl2b2lkICpkYXRhKQoreworCXNpemVfdCBkLCBudW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7CisKKwlmb3IgKGQgPSAwOyBkIDwgbnVtX2Q7ICsrZCkgeworCQlnaXRfcGF0Y2ggKnBhdGNoOworCQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CisJCXNpemVfdCBoLCBudW1faDsKKworCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgZCkpOworCQljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwYXRjaCkpICE9IE5VTEwpOworCisJCS8qIGNhbGwgZmlsZV9jYiBmb3IgdGhpcyBmaWxlICovCisJCWlmIChmaWxlX2NiICE9IE5VTEwgJiYgZmlsZV9jYihkZWx0YSwgKGZsb2F0KWQgLyBudW1fZCwgZGF0YSkgIT0gMCkgeworCQkJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCQkJZ290byBhYm9ydDsKKwkJfQorCisJCS8qIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VzLCB0aGVuIHRoZSBwYXRjaCB3aWxsIGJlIE5VTEwgKi8KKwkJaWYgKCFwYXRjaCkgeworCQkJY2xfYXNzZXJ0KGRlbHRhLT5zdGF0dXMgPT0gR0lUX0RFTFRBX1VOTU9ESUZJRUQgfHwKKwkJCQkJICAoZGVsdGEtPmZsYWdzICYgR0lUX0RJRkZfRkxBR19CSU5BUlkpICE9IDApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWh1bmtfY2IgJiYgIWxpbmVfY2IpIHsKKwkJCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbnVtX2ggPSBnaXRfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKTsKKworCQlmb3IgKGggPSAwOyBoIDwgbnVtX2g7IGgrKykgeworCQkJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuazsKKwkJCXNpemVfdCBsLCBudW1fbDsKKworCQkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2dldF9odW5rKCZodW5rLCAmbnVtX2wsIHBhdGNoLCBoKSk7CisKKwkJCWlmIChodW5rX2NiICYmIGh1bmtfY2IoZGVsdGEsIGh1bmssIGRhdGEpICE9IDApIHsKKwkJCQlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJCQkJZ290byBhYm9ydDsKKwkJCX0KKworCQkJZm9yIChsID0gMDsgbCA8IG51bV9sOyArK2wpIHsKKwkJCQljb25zdCBnaXRfZGlmZl9saW5lICpsaW5lOworCisJCQkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2dldF9saW5lX2luX2h1bmsoJmxpbmUsIHBhdGNoLCBoLCBsKSk7CisKKwkJCQlpZiAobGluZV9jYiAmJgorCQkJCQlsaW5lX2NiKGRlbHRhLCBodW5rLCBsaW5lLCBkYXRhKSAhPSAwKSB7CisJCQkJCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwkJCQkJZ290byBhYm9ydDsKKwkJCQl9CisJCQl9CisJCX0KKworCQlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Fib3J0OgorCWdpdGVycl9jbGVhcigpOworCXJldHVybiBHSVRfRVVTRVI7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9wcmludF9jYigKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuaywKKwljb25zdCBnaXRfZGlmZl9saW5lICpsaW5lLAorCXZvaWQgKnBheWxvYWQpCit7CisJRklMRSAqZnAgPSBwYXlsb2FkOworCisJR0lUX1VOVVNFRChkZWx0YSk7IEdJVF9VTlVTRUQoaHVuayk7CisKKwlpZiAobGluZS0+b3JpZ2luID09IEdJVF9ESUZGX0xJTkVfQ09OVEVYVCB8fAorCQlsaW5lLT5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9BRERJVElPTiB8fAorCQlsaW5lLT5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9ERUxFVElPTikKKwkJZnB1dGMobGluZS0+b3JpZ2luLCBmcCk7CisJZndyaXRlKGxpbmUtPmNvbnRlbnQsIDEsIGxpbmUtPmNvbnRlbnRfbGVuLCBmcCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlmZl9wcmludChGSUxFICpmcCwgZ2l0X2RpZmYgKmRpZmYpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcHJpbnQoCisJCWRpZmYsIEdJVF9ESUZGX0ZPUk1BVF9QQVRDSCwgZGlmZl9wcmludF9jYiwgZnAgPyBmcCA6IHN0ZGVycikpOworfQorCit2b2lkIGRpZmZfcHJpbnRfcmF3KEZJTEUgKmZwLCBnaXRfZGlmZiAqZGlmZikKK3sKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9wcmludCgKKwkJZGlmZiwgR0lUX0RJRkZfRk9STUFUX1JBVywgZGlmZl9wcmludF9jYiwgZnAgPyBmcCA6IHN0ZGVycikpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9kaWZmL2RpZmZfaGVscGVycy5oIGIvdGVzdHMvZGlmZi9kaWZmX2hlbHBlcnMuaApzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2RpZmYvZGlmZl9oZWxwZXJzLmgKcmVuYW1lIHRvIHRlc3RzL2RpZmYvZGlmZl9oZWxwZXJzLmgKaW5kZXggYmI3NmQwMC4uYmYyMWY0YiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9kaWZmL2RpZmZfaGVscGVycy5oCisrKyBiL3Rlc3RzL2RpZmYvZGlmZl9oZWxwZXJzLmgKQEAgLTQ0LDI1ICs0NCwyMSBAQAogCiBleHRlcm4gaW50IGRpZmZfaHVua19jYigKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlLAotCWNvbnN0IGNoYXIgKmhlYWRlciwKLQlzaXplX3QgaGVhZGVyX2xlbiwKKwljb25zdCBnaXRfZGlmZl9odW5rICpodW5rLAogCXZvaWQgKmNiX2RhdGEpOwogCiBleHRlcm4gaW50IGRpZmZfbGluZV9jYigKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCi0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlLAotCWNoYXIgbGluZV9vcmlnaW4sCi0JY29uc3QgY2hhciAqY29udGVudCwKLQlzaXplX3QgY29udGVudF9sZW4sCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuaywKKwljb25zdCBnaXRfZGlmZl9saW5lICpsaW5lLAogCXZvaWQgKmNiX2RhdGEpOwogCiBleHRlcm4gaW50IGRpZmZfZm9yZWFjaF92aWFfaXRlcmF0b3IoCi0JZ2l0X2RpZmZfbGlzdCAqZGlmZiwKKwlnaXRfZGlmZiAqZGlmZiwKIAlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCiAJZ2l0X2RpZmZfaHVua19jYiBodW5rX2NiLAotCWdpdF9kaWZmX2RhdGFfY2IgbGluZV9jYiwKKwlnaXRfZGlmZl9saW5lX2NiIGxpbmVfY2IsCiAJdm9pZCAqZGF0YSk7CiAKLWV4dGVybiB2b2lkIGRpZmZfcHJpbnQoRklMRSAqZnAsIGdpdF9kaWZmX2xpc3QgKmRpZmYpOwotZXh0ZXJuIHZvaWQgZGlmZl9wcmludF9yYXcoRklMRSAqZnAsIGdpdF9kaWZmX2xpc3QgKmRpZmYpOworZXh0ZXJuIHZvaWQgZGlmZl9wcmludChGSUxFICpmcCwgZ2l0X2RpZmYgKmRpZmYpOworZXh0ZXJuIHZvaWQgZGlmZl9wcmludF9yYXcoRklMRSAqZnAsIGdpdF9kaWZmICpkaWZmKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvZGlmZi9kaWZmaXRlci5jIGIvdGVzdHMvZGlmZi9kaWZmaXRlci5jCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvZGlmZi9kaWZmaXRlci5jCnJlbmFtZSB0byB0ZXN0cy9kaWZmL2RpZmZpdGVyLmMKaW5kZXggOTMyZDcyMC4uZjg4NmUxYiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9kaWZmL2RpZmZpdGVyLmMKKysrIGIvdGVzdHMvZGlmZi9kaWZmaXRlci5jCkBAIC0xMyw0NyArMTMsNDggQEAKIHZvaWQgdGVzdF9kaWZmX2RpZmZpdGVyX19jcmVhdGUodm9pZCkKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImF0dHIiKTsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCXNpemVfdCBkLCBudW1fZDsKIAogCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIHJlcG8sIE5VTEwsIE5VTEwpKTsKIAogCW51bV9kID0gZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKTsKIAlmb3IgKGQgPSAwOyBkIDwgbnVtX2Q7ICsrZCkgewotCQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7Ci0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaChOVUxMLCAmZGVsdGEsIGRpZmYsIGQpKTsKKwkJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhID0gZ2l0X2RpZmZfZ2V0X2RlbHRhKGRpZmYsIGQpOworCQljbF9hc3NlcnQoZGVsdGEgIT0gTlVMTCk7CiAJfQogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWNsX2Fzc2VydCghZ2l0X2RpZmZfZ2V0X2RlbHRhKGRpZmYsIG51bV9kKSk7CisKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogfQogCi12b2lkIHRlc3RfZGlmZl9kaWZmaXRlcl9faXRlcmF0ZV9maWxlcyh2b2lkKQordm9pZCB0ZXN0X2RpZmZfZGlmZml0ZXJfX2l0ZXJhdGVfZmlsZXNfMSh2b2lkKQogewogCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiYXR0ciIpOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJc2l6ZV90IGQsIG51bV9kOwotCWludCBjb3VudCA9IDA7CisJZGlmZl9leHBlY3RzIGV4cCA9IHsgMCB9OwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgcmVwbywgTlVMTCwgTlVMTCkpOwogCiAJbnVtX2QgPSBnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDYsIChpbnQpbnVtX2QpOwogCiAJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QpIHsKLQkJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOwotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goTlVMTCwgJmRlbHRhLCBkaWZmLCBkKSk7CisJCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSA9IGdpdF9kaWZmX2dldF9kZWx0YShkaWZmLCBkKTsKIAkJY2xfYXNzZXJ0KGRlbHRhICE9IE5VTEwpOwotCQljb3VudCsrOwotCX0KLQljbF9hc3NlcnRfZXF1YWxfaSg2LCBjb3VudCk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJCWRpZmZfZmlsZV9jYihkZWx0YSwgKGZsb2F0KWQgLyAoZmxvYXQpbnVtX2QsICZleHApOworCX0KKwljbF9hc3NlcnRfZXF1YWxfc3ooNiwgZXhwLmZpbGVzKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiB9CiAKIHZvaWQgdGVzdF9kaWZmX2RpZmZpdGVyX19pdGVyYXRlX2ZpbGVzXzIodm9pZCkKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN0YXR1cyIpOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJc2l6ZV90IGQsIG51bV9kOwogCWludCBjb3VudCA9IDA7CiAKQEAgLTYzLDIxICs2NCwyMCBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDgsIChpbnQpbnVtX2QpOwogCiAJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QpIHsKLQkJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOwotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goTlVMTCwgJmRlbHRhLCBkaWZmLCBkKSk7CisJCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YSA9IGdpdF9kaWZmX2dldF9kZWx0YShkaWZmLCBkKTsKIAkJY2xfYXNzZXJ0KGRlbHRhICE9IE5VTEwpOwogCQljb3VudCsrOwogCX0KIAljbF9hc3NlcnRfZXF1YWxfaSg4LCBjb3VudCk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIH0KIAogdm9pZCB0ZXN0X2RpZmZfZGlmZml0ZXJfX2l0ZXJhdGVfZmlsZXNfYW5kX2h1bmtzKHZvaWQpCiB7CiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCXNpemVfdCBkLCBudW1fZDsKIAlpbnQgZmlsZV9jb3VudCA9IDAsIGh1bmtfY291bnQgPSAwOwogCkBAIC05MCw0NyArOTAsMzkgQEAKIAludW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7CiAKIAlmb3IgKGQgPSAwOyBkIDwgbnVtX2Q7ICsrZCkgewotCQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7Ci0JCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKKwkJZ2l0X3BhdGNoICpwYXRjaDsKIAkJc2l6ZV90IGgsIG51bV9oOwogCi0JCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsICZkZWx0YSwgZGlmZiwgZCkpOwotCi0JCWNsX2Fzc2VydChkZWx0YSk7CisJCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCBkKSk7CiAJCWNsX2Fzc2VydChwYXRjaCk7CiAKIAkJZmlsZV9jb3VudCsrOwogCi0JCW51bV9oID0gZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKTsKKwkJbnVtX2ggPSBnaXRfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKTsKIAogCQlmb3IgKGggPSAwOyBoIDwgbnVtX2g7IGgrKykgewotCQkJY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlOwotCQkJY29uc3QgY2hhciAqaGVhZGVyOwotCQkJc2l6ZV90IGhlYWRlcl9sZW4sIG51bV9sOworCQkJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuazsKIAotCQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2h1bmsoCi0JCQkJJnJhbmdlLCAmaGVhZGVyLCAmaGVhZGVyX2xlbiwgJm51bV9sLCBwYXRjaCwgaCkpOwotCi0JCQljbF9hc3NlcnQocmFuZ2UpOwotCQkJY2xfYXNzZXJ0KGhlYWRlcik7CisJCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2h1bmsoJmh1bmssIE5VTEwsIHBhdGNoLCBoKSk7CisJCQljbF9hc3NlcnQoaHVuayk7CiAKIAkJCWh1bmtfY291bnQrKzsKIAkJfQogCi0JCWdpdF9kaWZmX3BhdGNoX2ZyZWUocGF0Y2gpOworCQlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CiAJfQogCiAJY2xfYXNzZXJ0X2VxdWFsX2koMTMsIGZpbGVfY291bnQpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDgsIGh1bmtfY291bnQpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiB9CiAKIHZvaWQgdGVzdF9kaWZmX2RpZmZpdGVyX19tYXhfc2l6ZV90aHJlc2hvbGQodm9pZCkKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN0YXR1cyIpOwogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJaW50IGZpbGVfY291bnQgPSAwLCBiaW5hcnlfY291bnQgPSAwLCBodW5rX2NvdW50ID0gMDsKIAlzaXplX3QgZCwgbnVtX2Q7CiAKQEAgLTE0MiwyNyArMTM0LDI4IEBACiAJbnVtX2QgPSBnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpOwogCiAJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QpIHsKLQkJZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoOworCQlnaXRfcGF0Y2ggKnBhdGNoOwogCQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CiAKLQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKCZwYXRjaCwgJmRlbHRhLCBkaWZmLCBkKSk7Ci0JCWNsX2Fzc2VydChkZWx0YSk7CisJCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCBkKSk7CiAJCWNsX2Fzc2VydChwYXRjaCk7CisJCWRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwYXRjaCk7CisJCWNsX2Fzc2VydChkZWx0YSk7CiAKIAkJZmlsZV9jb3VudCsrOwotCQlodW5rX2NvdW50ICs9IChpbnQpZ2l0X2RpZmZfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKTsKKwkJaHVua19jb3VudCArPSAoaW50KWdpdF9wYXRjaF9udW1faHVua3MocGF0Y2gpOwogCiAJCWFzc2VydCgoZGVsdGEtPmZsYWdzICYgKEdJVF9ESUZGX0ZMQUdfQklOQVJZfEdJVF9ESUZGX0ZMQUdfTk9UX0JJTkFSWSkpICE9IDApOwogCQliaW5hcnlfY291bnQgKz0gKChkZWx0YS0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX0JJTkFSWSkgIT0gMCk7CiAKLQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7CisJCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKIAl9CiAKIAljbF9hc3NlcnRfZXF1YWxfaSgxMywgZmlsZV9jb3VudCk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgYmluYXJ5X2NvdW50KTsKIAljbF9hc3NlcnRfZXF1YWxfaSg4LCBodW5rX2NvdW50KTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogdHJ5IGFnYWluIHdpdGggbG93IGZpbGUgc2l6ZSB0aHJlc2hvbGQgKi8KIApAQCAtMTc3LDE4ICsxNzAsMTkgQEAKIAludW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7CiAKIAlmb3IgKGQgPSAwOyBkIDwgbnVtX2Q7ICsrZCkgewotCQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7CisJCWdpdF9wYXRjaCAqcGF0Y2g7CiAJCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKIAotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCAmZGVsdGEsIGRpZmYsIGQpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIGQpKTsKKwkJZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHBhdGNoKTsKIAogCQlmaWxlX2NvdW50Kys7Ci0JCWh1bmtfY291bnQgKz0gKGludClnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocGF0Y2gpOworCQlodW5rX2NvdW50ICs9IChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwYXRjaCk7CiAKIAkJYXNzZXJ0KChkZWx0YS0+ZmxhZ3MgJiAoR0lUX0RJRkZfRkxBR19CSU5BUll8R0lUX0RJRkZfRkxBR19OT1RfQklOQVJZKSkgIT0gMCk7CiAJCWJpbmFyeV9jb3VudCArPSAoKGRlbHRhLT5mbGFncyAmIEdJVF9ESUZGX0ZMQUdfQklOQVJZKSAhPSAwKTsKIAotCQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKKwkJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOwogCX0KIAogCWNsX2Fzc2VydF9lcXVhbF9pKDEzLCBmaWxlX2NvdW50KTsKQEAgLTIwMCw3ICsxOTQsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGJpbmFyeV9jb3VudCk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNSwgaHVua19jb3VudCk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIH0KIAogCkBAIC0yMDgsNyArMjAyLDcgQEAKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN0YXR1cyIpOwogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJZGlmZl9leHBlY3RzIGV4cCA9IHswfTsKIAlzaXplX3QgZCwgbnVtX2Q7CiAKQEAgLTIyMCw1NyArMjE0LDUxIEBACiAKIAludW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7CiAJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QpIHsKLQkJZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoOwotCQljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CisJCWdpdF9wYXRjaCAqcGF0Y2g7CiAJCXNpemVfdCBoLCBudW1faDsKIAotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCAmZGVsdGEsIGRpZmYsIGQpKTsKLQkJY2xfYXNzZXJ0KHBhdGNoICYmIGRlbHRhKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIGQpKTsKKwkJY2xfYXNzZXJ0KHBhdGNoKTsKIAkJZXhwLmZpbGVzKys7CiAKLQkJbnVtX2ggPSBnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocGF0Y2gpOworCQludW1faCA9IGdpdF9wYXRjaF9udW1faHVua3MocGF0Y2gpOwogCQlmb3IgKGggPSAwOyBoIDwgbnVtX2g7IGgrKykgewotCQkJY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlOwotCQkJY29uc3QgY2hhciAqaGVhZGVyOwotCQkJc2l6ZV90IGhlYWRlcl9sZW4sIGwsIG51bV9sOworCQkJY29uc3QgZ2l0X2RpZmZfaHVuayAqcmFuZ2U7CisJCQlzaXplX3QgbCwgbnVtX2w7CiAKLQkJCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9odW5rKAotCQkJCSZyYW5nZSwgJmhlYWRlciwgJmhlYWRlcl9sZW4sICZudW1fbCwgcGF0Y2gsIGgpKTsKLQkJCWNsX2Fzc2VydChyYW5nZSAmJiBoZWFkZXIpOworCQkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2dldF9odW5rKCZyYW5nZSwgJm51bV9sLCBwYXRjaCwgaCkpOworCQkJY2xfYXNzZXJ0KHJhbmdlKTsKIAkJCWV4cC5odW5rcysrOwogCiAJCQlmb3IgKGwgPSAwOyBsIDwgbnVtX2w7ICsrbCkgewotCQkJCWNoYXIgb3JpZ2luOwotCQkJCWNvbnN0IGNoYXIgKmNvbnRlbnQ7Ci0JCQkJc2l6ZV90IGNvbnRlbnRfbGVuOworCQkJCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmU7CiAKLQkJCQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF9nZXRfbGluZV9pbl9odW5rKAotCQkJCQkmb3JpZ2luLCAmY29udGVudCwgJmNvbnRlbnRfbGVuLCBOVUxMLCBOVUxMLCBwYXRjaCwgaCwgbCkpOwotCQkJCWNsX2Fzc2VydChjb250ZW50KTsKKwkJCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcGF0Y2gsIGgsIGwpKTsKKwkJCQljbF9hc3NlcnQobGluZSAmJiBsaW5lLT5jb250ZW50KTsKIAkJCQlleHAubGluZXMrKzsKIAkJCX0KIAkJfQogCi0JCWdpdF9kaWZmX3BhdGNoX2ZyZWUocGF0Y2gpOworCQlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CiAJfQogCiAJY2xfYXNzZXJ0X2VxdWFsX2koMTMsIGV4cC5maWxlcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koOCwgZXhwLmh1bmtzKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgxNCwgZXhwLmxpbmVzKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogfQogCi1zdGF0aWMgdm9pZCBpdGVyYXRlX292ZXJfcGF0Y2goZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoLCBkaWZmX2V4cGVjdHMgKmV4cCkKK3N0YXRpYyB2b2lkIGl0ZXJhdGVfb3Zlcl9wYXRjaChnaXRfcGF0Y2ggKnBhdGNoLCBkaWZmX2V4cGVjdHMgKmV4cCkKIHsKLQlzaXplX3QgaCwgbnVtX2ggPSBnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocGF0Y2gpLCBudW1fbDsKKwlzaXplX3QgaCwgbnVtX2ggPSBnaXRfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKSwgbnVtX2w7CiAKIAlleHAtPmZpbGVzKys7CiAJZXhwLT5odW5rcyArPSAoaW50KW51bV9oOwogCiAJLyogbGV0J3MgaXRlcmF0ZSBpbiByZXZlcnNlLCBqdXN0IGJlY2F1c2Ugd2UgY2FuISAqLwogCWZvciAoaCA9IDEsIG51bV9sID0gMDsgaCA8PSBudW1faDsgKytoKQotCQludW1fbCArPSBnaXRfZGlmZl9wYXRjaF9udW1fbGluZXNfaW5faHVuayhwYXRjaCwgbnVtX2ggLSBoKTsKKwkJbnVtX2wgKz0gZ2l0X3BhdGNoX251bV9saW5lc19pbl9odW5rKHBhdGNoLCBudW1faCAtIGgpOwogCiAJZXhwLT5saW5lcyArPSAoaW50KW51bV9sOwogfQpAQCAtMjgxLDkgKzI2OSw5IEBACiB7CiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHAgPSB7MH07Ci0JZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoZXNbUEFUQ0hfQ0FDSEVdOworCWdpdF9wYXRjaCAqcGF0Y2hlc1tQQVRDSF9DQUNIRV07CiAJc2l6ZV90IHAsIGQsIG51bV9kOwogCiAJbWVtc2V0KHBhdGNoZXMsIDAsIHNpemVvZihwYXRjaGVzKSk7CkBAIC0zMDgsMzIgKzI5NiwzMiBAQAogCiAJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QpIHsKIAkJLyogdGFrZSBvbGQgcGF0Y2ggKi8KLQkJZ2l0X2RpZmZfcGF0Y2ggKnBhdGNoID0gcGF0Y2hlc1twXTsKKwkJZ2l0X3BhdGNoICpwYXRjaCA9IHBhdGNoZXNbcF07CiAJCXBhdGNoZXNbcF0gPSBOVUxMOwogCiAJCS8qIGNhY2hlIG5ldyBwYXRjaCAqLwotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoZXNbcF0sIE5VTEwsIGRpZmYsIGQpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2hlc1twXSwgZGlmZiwgZCkpOwogCQljbF9hc3NlcnQocGF0Y2hlc1twXSAhPSBOVUxMKTsKIAogCQkvKiBwcm9jZXNzIG9sZCBwYXRjaCBpZiBub24tTlVMTCAqLwogCQlpZiAocGF0Y2ggIT0gTlVMTCkgewogCQkJaXRlcmF0ZV9vdmVyX3BhdGNoKHBhdGNoLCAmZXhwKTsKLQkJCWdpdF9kaWZmX3BhdGNoX2ZyZWUocGF0Y2gpOworCQkJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOwogCQl9CiAKIAkJcCA9IHJhbmQoKSAlIFBBVENIX0NBQ0hFOwogCX0KIAogCS8qIGZyZWUgZGlmZiBsaXN0IG5vdyAtIHJlZmNvdW50cyBzaG91bGQga2VlcCB0aGluZ3Mgc2FmZSAqLwotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogcHJvY2VzcyByZW1haW5pbmcgdW5wcm9jZXNzZWQgcGF0Y2hlcyAqLwogCWZvciAocCA9IDA7IHAgPCBQQVRDSF9DQUNIRTsgcCsrKSB7Ci0JCWdpdF9kaWZmX3BhdGNoICpwYXRjaCA9IHBhdGNoZXNbcF07CisJCWdpdF9wYXRjaCAqcGF0Y2ggPSBwYXRjaGVzW3BdOwogCiAJCWlmIChwYXRjaCAhPSBOVUxMKSB7CiAJCQlpdGVyYXRlX292ZXJfcGF0Y2gocGF0Y2gsICZleHApOwotCQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7CisJCQlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CiAJCX0KIAl9CiAKQEAgLTQxNiw3ICs0MDQsNyBAQAogdm9pZCB0ZXN0X2RpZmZfZGlmZml0ZXJfX2l0ZXJhdGVfYW5kX2dlbmVyYXRlX3BhdGNoX3RleHQodm9pZCkKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN0YXR1cyIpOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJc2l6ZV90IGQsIG51bV9kOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgcmVwbywgTlVMTCwgTlVMTCkpOwpAQCAtNDI1LDI4ICs0MTMsMjggQEAKIAljbF9hc3NlcnRfZXF1YWxfaSg4LCAoaW50KW51bV9kKTsKIAogCWZvciAoZCA9IDA7IGQgPCBudW1fZDsgKytkKSB7Ci0JCWdpdF9kaWZmX3BhdGNoICpwYXRjaDsKKwkJZ2l0X3BhdGNoICpwYXRjaDsKIAkJY2hhciAqdGV4dDsKIAotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCBOVUxMLCBkaWZmLCBkKSk7CisJCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCBkKSk7CiAJCWNsX2Fzc2VydChwYXRjaCAhPSBOVUxMKTsKIAotCQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7CisJCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7CiAKIAkJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWRfcGF0Y2hfdGV4dFtkXSwgdGV4dCk7CiAKIAkJZ2l0X19mcmVlKHRleHQpOwotCQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKKwkJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogfQogCiB2b2lkIHRlc3RfZGlmZl9kaWZmaXRlcl9fY2hlY2tzX29wdGlvbnNfdmVyc2lvbih2b2lkKQogewogCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3RhdHVzIik7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKIAljb25zdCBnaXRfZXJyb3IgKmVycjsKIAogCW9wdHMudmVyc2lvbiA9IDA7CmRpZmYgLS1naXQgYS90ZXN0cy9kaWZmL2RyaXZlcnMuYyBiL3Rlc3RzL2RpZmYvZHJpdmVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDFkZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kaWZmL2RyaXZlcnMuYwpAQCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImRpZmZfaGVscGVycy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJkaWZmX2RyaXZlci5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7CisKK3ZvaWQgdGVzdF9kaWZmX2RyaXZlcnNfX2luaXRpYWxpemUodm9pZCkKK3sKK30KKwordm9pZCB0ZXN0X2RpZmZfZHJpdmVyc19fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKKwlnX3JlcG8gPSBOVUxMOworfQorCit2b2lkIHRlc3RfZGlmZl9kcml2ZXJzX19wYXR0ZXJucyh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwljb25zdCBjaGFyICpvbmVfc2hhID0gIjE5ZGQzMmRmYjE1MjBhNjRlNWJiYWFlOGRjZTZlZjQyM2RmYTJmMTMiOworCWdpdF90cmVlICpvbmU7CisJZ2l0X2RpZmYgKmRpZmY7CisJZ2l0X3BhdGNoICpwYXRjaDsKKwljaGFyICp0ZXh0OworCWNvbnN0IGNoYXIgKmV4cGVjdGVkMCA9ICJkaWZmIC0tZ2l0IGEvdW50aW1lbHkudHh0IGIvdW50aW1lbHkudHh0XG5pbmRleCA5YTY5ZDk2Li41N2ZkMGNmIDEwMDY0NFxuLS0tIGEvdW50aW1lbHkudHh0XG4rKysgYi91bnRpbWVseS50eHRcbkBAIC0yMiwzICsyMiw1IEBAIENvbWVzIHRocm91Z2ggdGhlIGJsb29kIG9mIHRoZSB2YW5ndWFyZHMgd2hvXG4gICBkcmVhbWVkLS10b28gc29vbi0taXQgaGFkIHNvdW5kZWQuXHJcbiBcclxuICAgICAgICAgICAgICAgICAtLSBSdWR5YXJkIEtpcGxpbmdcclxuK1xyXG4rU29tZSBuZXcgc3R1ZmZcclxuIjsKKwljb25zdCBjaGFyICpleHBlY3RlZDEgPSAiZGlmZiAtLWdpdCBhL3VudGltZWx5LnR4dCBiL3VudGltZWx5LnR4dFxuaW5kZXggOWE2OWQ5Ni4uNTdmZDBjZiAxMDA2NDRcbkJpbmFyeSBmaWxlcyBhL3VudGltZWx5LnR4dCBhbmQgYi91bnRpbWVseS50eHQgZGlmZmVyXG4iOworCWNvbnN0IGNoYXIgKmV4cGVjdGVkMiA9ICJkaWZmIC0tZ2l0IGEvdW50aW1lbHkudHh0IGIvdW50aW1lbHkudHh0XG5pbmRleCA5YTY5ZDk2Li41N2ZkMGNmIDEwMDY0NFxuLS0tIGEvdW50aW1lbHkudHh0XG4rKysgYi91bnRpbWVseS50eHRcbkBAIC0yMiwzICsyMiw1IEBAIEhlYXZlbiBkZWxpdmVycyBvbiBlYXJ0aCB0aGUgSG91ciB0aGF0IGNhbm5vdCBiZVxuICAgZHJlYW1lZC0tdG9vIHNvb24tLWl0IGhhZCBzb3VuZGVkLlxyXG4gXHJcbiAgICAgICAgICAgICAgICAgLS0gUnVkeWFyZCBLaXBsaW5nXHJcbitcclxuK1NvbWUgbmV3IHN0dWZmXHJcbiI7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJyZW5hbWVzIik7CisKKwlvbmUgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIG9uZV9zaGEpOworCisJLyogbm8gZGlmZiAqLworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIG9uZSwgTlVMTCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCS8qIGRlZmF1bHQgZGlmZiAqLworCisJY2xfZ2l0X2FwcGVuZDJmaWxlKCJyZW5hbWVzL3VudGltZWx5LnR4dCIsICJcclxuU29tZSBuZXcgc3R1ZmZcclxuIik7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZDAsIHRleHQpOworCisJZ2l0X19mcmVlKHRleHQpOworCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogYXR0cmlidXRlIGRpZmYgc2V0IHRvIGZhbHNlICovCisKKwljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvLmdpdGF0dHJpYnV0ZXMiLCAidW50aW1lbHkudHh0IC1kaWZmXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBvbmUsIE5VTEwpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkMSwgdGV4dCk7CisKKwlnaXRfX2ZyZWUodGV4dCk7CisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwkvKiBhdHRyaWJ1dGUgZGlmZiBzZXQgdG8gdW5jb25maWd1cmVkIHZhbHVlIChzaG91bGQgdXNlIGRlZmF1bHQpICovCisKKwljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvLmdpdGF0dHJpYnV0ZXMiLCAidW50aW1lbHkudHh0IGRpZmY9a2lwbGluZzBcbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIG9uZSwgTlVMTCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgMCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQwLCB0ZXh0KTsKKworCWdpdF9fZnJlZSh0ZXh0KTsKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCS8qIGxldCdzIGRlZmluZSB0aGF0IGRyaXZlciAqLworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfY29uZmlnKCZjZmcsIGdfcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X2Jvb2woY2ZnLCAiZGlmZi5raXBsaW5nMC5iaW5hcnkiLCAxKSk7CisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZDEsIHRleHQpOworCisJZ2l0X19mcmVlKHRleHQpOworCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogbGV0J3MgdXNlIGEgcmVhbCBkcml2ZXIgd2l0aCBzb21lIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKi8KKworCWdpdF9kaWZmX2RyaXZlcl9yZWdpc3RyeV9mcmVlKGdfcmVwby0+ZGlmZl9kcml2ZXJzKTsKKwlnX3JlcG8tPmRpZmZfZHJpdmVycyA9IE5VTEw7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNmZywgZ19yZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfYm9vbChjZmcsICJkaWZmLmtpcGxpbmcwLmJpbmFyeSIsIDApKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY2ZnLCAiZGlmZi5raXBsaW5nMC54ZnVuY25hbWUiLCAiXkgiKSk7CisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZDIsIHRleHQpOworCisJZ2l0X19mcmVlKHRleHQpOworCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJZ2l0X3RyZWVfZnJlZShvbmUpOworfQorCit2b2lkIHRlc3RfZGlmZl9kcml2ZXJzX19sb25nX2xpbmVzKHZvaWQpCit7CisJY29uc3QgY2hhciAqYmFzZSA9ICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBTZWQgbm9uIG5pc2kgbGlndWxhLiBVdCB2aXZlcnJhIGVuaW0gc2VkIGxvYm9ydGlzIHN1c2NpcGl0LlxuUGhhc2VsbHVzIGVnZXQgZXJhdCBvZGlvLiBQcmFlc2VudCBhdCBlc3QgaWFjdWxpcywgdWx0cmljaWVzIGF1Z3VlIHZlbCwgZGlnbmlzc2ltIHJpc3VzLiBTdXNwZW5kaXNzZSBhdCBuaXNpIHF1aXMgdHVycGlzIGZyaW5naWxsYSBydXRydW0gaWQgc2l0IGFtZXQgbnVsbGEuXG5OYW0gZWdldCBkb2xvciBmZXJtZW50dW0sIGFsaXF1ZXQgbmlzbCBhdCwgY29udmFsbGlzIHRlbGx1cy4gUGVsbGVudGVzcXVlIHJob25jdXMgZXJhdCBlbmltLCBpZCBwb3J0dGl0b3IgZWxpdCBldWlzbW9kIHF1aXMuXG5NYXVyaXMgc29sbGljaXR1ZGluIG1hZ25hIG9kaW8sIG5vbiBlZ2VzdGFzIGxpYmVybyB2ZWhpY3VsYSB1dC4gRXRpYW0gZXQgcXVhbSB2ZWxpdC4gRnVzY2UgZWdldCBsaWJlcm8gcmhvbmN1cywgdWx0cmljaWVzIGZlbGlzIHNpdCBhbWV0LCBlZ2VzdGFzIHB1cnVzLlxuQWxpcXVhbSBpbiBzZW1wZXIgdGVsbHVzLiBQZWxsZW50ZXNxdWUgYWRpcGlzY2luZyBydXRydW0gdmVsaXQsIHF1aXMgbWFsZXN1YWRhIGxhY3VzIGNvbnNlcXVhdCBlZ2V0LlxuIjsKKwlnaXRfaW5kZXggKmlkeDsKKwlnaXRfZGlmZiAqZGlmZjsKKwlnaXRfcGF0Y2ggKnBhdGNoOworCWNoYXIgKmFjdHVhbDsKKwljb25zdCBjaGFyICpleHBlY3RlZCA9ICJkaWZmIC0tZ2l0IGEvbG9uZ2xpbmVzLnR4dCBiL2xvbmdsaW5lcy50eHRcbmluZGV4IGMxY2U2ZWYuLjAxMzQ0MzEgMTAwNjQ0XG4tLS0gYS9sb25nbGluZXMudHh0XG4rKysgYi9sb25nbGluZXMudHh0XG5AQCAtMywzICszLDUgQEAgUGhhc2VsbHVzIGVnZXQgZXJhdCBvZGlvLiBQcmFlc2VudCBhdCBlc3QgaWFjdWxpcywgdWx0cmljaWVzIGF1Z3VlIHZlbCwgZGlnbmlzc2lcbiBOYW0gZWdldCBkb2xvciBmZXJtZW50dW0sIGFsaXF1ZXQgbmlzbCBhdCwgY29udmFsbGlzIHRlbGx1cy4gUGVsbGVudGVzcXVlIHJob25jdXMgZXJhdCBlbmltLCBpZCBwb3J0dGl0b3IgZWxpdCBldWlzbW9kIHF1aXMuXG4gTWF1cmlzIHNvbGxpY2l0dWRpbiBtYWduYSBvZGlvLCBub24gZWdlc3RhcyBsaWJlcm8gdmVoaWN1bGEgdXQuIEV0aWFtIGV0IHF1YW0gdmVsaXQuIEZ1c2NlIGVnZXQgbGliZXJvIHJob25jdXMsIHVsdHJpY2llcyBmZWxpcyBzaXQgYW1ldCwgZWdlc3RhcyBwdXJ1cy5cbiBBbGlxdWFtIGluIHNlbXBlciB0ZWxsdXMuIFBlbGxlbnRlc3F1ZSBhZGlwaXNjaW5nIHJ1dHJ1bSB2ZWxpdCwgcXVpcyBtYWxlc3VhZGEgbGFjdXMgY29uc2VxdWF0IGVnZXQuXG4rbmV3bGluZVxuK25ld2xpbmVcbiI7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJlbXB0eV9zdGFuZGFyZF9yZXBvIik7CisKKwljbF9naXRfbWtmaWxlKCJlbXB0eV9zdGFuZGFyZF9yZXBvL2xvbmdsaW5lcy50eHQiLCBiYXNlKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaWR4LCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpZHgsICJsb25nbGluZXMudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpZHgpKTsKKwlnaXRfaW5kZXhfZnJlZShpZHgpOworCisJY2xfZ2l0X2FwcGVuZDJmaWxlKCJlbXB0eV9zdGFuZGFyZF9yZXBvL2xvbmdsaW5lcy50eHQiLCAibmV3bGluZVxubmV3bGluZVxuIik7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsIE5VTEwpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMSwgZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZhY3R1YWwsIHBhdGNoKSk7CisKKwkvKiBpZiBjaG1vZCBub3Qgc3VwcG9ydGVkLCBvdmVyd3JpdGUgbW9kZSBiaXRzIHNpbmNlIGFueXRoaW5nIGlzIHBvc3NpYmxlICovCisJaWYgKCFjbF9pc19jaG1vZF9zdXBwb3J0ZWQoKSkgeworCQlzaXplX3QgYWN0dWFsX2xlbiA9IHN0cmxlbihhY3R1YWwpOworCQlpZiAoYWN0dWFsX2xlbiA+IDcyICYmIG1lbWNtcCgmYWN0dWFsWzY2XSwgIjEwMDY0NCIsIDYpICE9IDApCisJCQltZW1jcHkoJmFjdHVhbFs2Nl0sICIxMDA2NDQiLCA2KTsKKwl9CisKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZCwgYWN0dWFsKTsKKworCWZyZWUoYWN0dWFsKTsKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9kaWZmL2luZGV4LmMgYi90ZXN0cy9kaWZmL2luZGV4LmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9kaWZmL2luZGV4LmMKcmVuYW1lIHRvIHRlc3RzL2RpZmYvaW5kZXguYwppbmRleCBlMWM2MTdkLi44ZjQ1NjcxIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2RpZmYvaW5kZXguYworKysgYi90ZXN0cy9kaWZmL2luZGV4LmMKQEAgLTIxLDcgKzIxLDcgQEAKIAlnaXRfdHJlZSAqYSA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgYV9jb21taXQpOwogCWdpdF90cmVlICpiID0gcmVzb2x2ZV9jb21taXRfb2lkX3RvX3RyZWUoZ19yZXBvLCBiX2NvbW1pdCk7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKIAlkaWZmX2V4cGVjdHMgZXhwOwogCiAJY2xfYXNzZXJ0KGEpOwpAQCAtNTYsNyArNTYsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDYsIGV4cC5saW5lX2FkZHMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5saW5lX2RlbHMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZGlmZiA9IE5VTEw7CiAJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKIApAQCAtODQsNyArODQsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDExLCBleHAubGluZV9hZGRzKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAubGluZV9kZWxzKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCWRpZmYgPSBOVUxMOwogCiAJZ2l0X3RyZWVfZnJlZShhKTsKQEAgLTExNCw3ICsxMTQsNyBAQAogCWdpdF90cmVlICphID0gcmVzb2x2ZV9jb21taXRfb2lkX3RvX3RyZWUoZ19yZXBvLCBhX2NvbW1pdCk7CiAJZ2l0X3RyZWUgKmIgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIGJfY29tbWl0KTsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAKIAljbF9hc3NlcnQoYSk7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlcyk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlkaWZmID0gTlVMTDsKIAogCWdpdF90cmVlX2ZyZWUoYSk7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAljb25zdCBjaGFyICphX2NvbW1pdCA9ICIyNmExMjVlZTFiZiI7CiAJZ2l0X3RyZWUgKmEgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIGFfY29tbWl0KTsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWNvbnN0IGdpdF9lcnJvciAqZXJyOwogCiAJb3B0cy52ZXJzaW9uID0gMDsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvZGlmZi9pdGVyYXRvci5jIGIvdGVzdHMvZGlmZi9pdGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2RpZmYvaXRlcmF0b3IuYwpyZW5hbWUgdG8gdGVzdHMvZGlmZi9pdGVyYXRvci5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2RpZmYvbm90aWZ5LmMgYi90ZXN0cy9kaWZmL25vdGlmeS5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvZGlmZi9ub3RpZnkuYwpyZW5hbWUgdG8gdGVzdHMvZGlmZi9ub3RpZnkuYwppbmRleCA0MzNiNGE5Li5jYzMzY2I3IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2RpZmYvbm90aWZ5LmMKKysrIGIvdGVzdHMvZGlmZi9ub3RpZnkuYwpAQCAtMTMsNyArMTMsNyBAQAogfQogCiBzdGF0aWMgaW50IGFzc2VydF9jYWxsZWRfbm90aWZpY2F0aW9ucygKLQljb25zdCBnaXRfZGlmZl9saXN0ICpkaWZmX3NvX2ZhciwKKwljb25zdCBnaXRfZGlmZiAqZGlmZl9zb19mYXIsCiAJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhX3RvX2FkZCwKIAljb25zdCBjaGFyICptYXRjaGVkX3BhdGhzcGVjLAogCXZvaWQgKnBheWxvYWQpCkBAIC00NSw3ICs0NSw3IEBACiAJaW50IGV4cGVjdGVkX2RpZmZlZF9maWxlc19jb3VudCkKIHsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAKIAlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKQEAgLTYzLDcgKzYzLDcgQEAKIAogCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX2RpZmZlZF9maWxlc19jb3VudCwgZXhwLmZpbGVzKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogfQogCiB2b2lkIHRlc3RfZGlmZl9ub3RpZnlfX25vdGlmeV9zaW5nbGVfcGF0aHNwZWModm9pZCkKQEAgLTE1NSw3ICsxNTUsNyBAQAogfQogCiBzdGF0aWMgaW50IGFib3J0X2RpZmYoCi0JY29uc3QgZ2l0X2RpZmZfbGlzdCAqZGlmZl9zb19mYXIsCisJY29uc3QgZ2l0X2RpZmYgKmRpZmZfc29fZmFyLAogCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YV90b19hZGQsCiAJY29uc3QgY2hhciAqbWF0Y2hlZF9wYXRoc3BlYywKIAl2b2lkICpwYXlsb2FkKQpAQCAtMTcxLDcgKzE3MSw3IEBACiB2b2lkIHRlc3RfZGlmZl9ub3RpZnlfX25vdGlmeV9jYl9jYW5fYWJvcnRfZGlmZih2b2lkKQogewogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJY2hhciAqcGF0aHNwZWMgPSBOVUxMOwogCiAJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3RhdHVzIik7CkBAIC0xODksNyArMTg5LDcgQEAKIH0KIAogc3RhdGljIGludCBmaWx0ZXJfYWxsKAotCWNvbnN0IGdpdF9kaWZmX2xpc3QgKmRpZmZfc29fZmFyLAorCWNvbnN0IGdpdF9kaWZmICpkaWZmX3NvX2ZhciwKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGFfdG9fYWRkLAogCWNvbnN0IGNoYXIgKm1hdGNoZWRfcGF0aHNwZWMsCiAJdm9pZCAqcGF5bG9hZCkKQEAgLTIwNSw3ICsyMDUsNyBAQAogdm9pZCB0ZXN0X2RpZmZfbm90aWZ5X19ub3RpZnlfY2JfY2FuX2JlX3VzZWRfYXNfZmlsdGVyaW5nX2Z1bmN0aW9uKHZvaWQpCiB7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKIAljaGFyICpwYXRoc3BlYyA9IE5VTEw7CiAJZGlmZl9leHBlY3RzIGV4cDsKIApAQCAtMjI0LDUgKzIyNCw1IEBACiAKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZXMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9kaWZmL3BhdGNoLmMgYi90ZXN0cy9kaWZmL3BhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxNTk4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RpZmYvcGF0Y2guYwpAQCAtMCwwICsxLDU3NyBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImdpdDIvc3lzL3JlcG9zaXRvcnkuaCIKKworI2luY2x1ZGUgImRpZmZfaGVscGVycy5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJidWZfdGV4dC5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7CisKK3ZvaWQgdGVzdF9kaWZmX3BhdGNoX19pbml0aWFsaXplKHZvaWQpCit7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3BhdGNoX19jbGVhbnVwKHZvaWQpCit7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworfQorCisjZGVmaW5lIEVYUEVDVEVEX0hFQURFUiAiZGlmZiAtLWdpdCBhL3N1YmRpci50eHQgYi9zdWJkaXIudHh0XG4iIFwKKwkiZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG4iIFwKKwkiaW5kZXggZThlZTg5ZS4uMDAwMDAwMFxuIiBcCisJIi0tLSBhL3N1YmRpci50eHRcbiIgXAorCSIrKysgL2Rldi9udWxsXG4iCisKKyNkZWZpbmUgRVhQRUNURURfSFVOSyAiQEAgLTEsMiArMCwwIEBAXG4iCisKK3N0YXRpYyBpbnQgY2hlY2tfcmVtb3ZhbF9jYigKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGEsCisJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuaywKKwljb25zdCBnaXRfZGlmZl9saW5lICpsaW5lLAorCXZvaWQgKnBheWxvYWQpCit7CisJR0lUX1VOVVNFRChwYXlsb2FkKTsKKworCXN3aXRjaCAobGluZS0+b3JpZ2luKSB7CisJY2FzZSBHSVRfRElGRl9MSU5FX0ZJTEVfSERSOgorCQljbF9hc3NlcnRfZXF1YWxfcyhFWFBFQ1RFRF9IRUFERVIsIGxpbmUtPmNvbnRlbnQpOworCQljbF9hc3NlcnQoaHVuayA9PSBOVUxMKTsKKwkJZ290byBjaGVja19kZWx0YTsKKworCWNhc2UgR0lUX0RJRkZfTElORV9IVU5LX0hEUjoKKwkJY2xfYXNzZXJ0X2VxdWFsX3MoRVhQRUNURURfSFVOSywgbGluZS0+Y29udGVudCk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHSVRfRElGRl9MSU5FX0NPTlRFWFQ6CisJY2FzZSBHSVRfRElGRl9MSU5FX0RFTEVUSU9OOgorCQlnb3RvIGNoZWNrX2h1bms7CisKKwlkZWZhdWx0OgorCQkvKiB1bmV4cGVjdGVkIGNvZGUgcGF0aCAqLworCQlyZXR1cm4gLTE7CisJfQorCitjaGVja19odW5rOgorCWNsX2Fzc2VydChodW5rICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGh1bmstPm9sZF9zdGFydCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMiwgaHVuay0+b2xkX2xpbmVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBodW5rLT5uZXdfc3RhcnQpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGh1bmstPm5ld19saW5lcyk7CisKK2NoZWNrX2RlbHRhOgorCWNsX2Fzc2VydF9lcXVhbF9zKCJzdWJkaXIudHh0IiwgZGVsdGEtPm9sZF9maWxlLnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdWJkaXIudHh0IiwgZGVsdGEtPm5ld19maWxlLnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9ERUxFVEVELCBkZWx0YS0+c3RhdHVzKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHRlc3RfZGlmZl9wYXRjaF9fY2FuX3Byb3Blcmx5X2Rpc3BsYXlfdGhlX3JlbW92YWxfb2ZfYV9maWxlKHZvaWQpCit7CisJLyoKKwkqICQgZ2l0IGRpZmYgMjZhMTI1ZS4uNzM1YjZhMgorCSogZGlmZiAtLWdpdCBhL3N1YmRpci50eHQgYi9zdWJkaXIudHh0CisJKiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwkqIGluZGV4IGU4ZWU4OWUuLjAwMDAwMDAKKwkqIC0tLSBhL3N1YmRpci50eHQKKwkqICsrKyAvZGV2L251bGwKKwkqIEBAIC0xLDIgKzAsMCBAQAorCSogLUlzIGl0IGEgYmlyZD8KKwkqIC1JcyBpdCBhIHBsYW5lPworCSovCisKKwljb25zdCBjaGFyICpvbmVfc2hhID0gIjI2YTEyNWUiOworCWNvbnN0IGNoYXIgKmFub3RoZXJfc2hhID0gIjczNWI2YTIiOworCWdpdF90cmVlICpvbmUsICphbm90aGVyOworCWdpdF9kaWZmICpkaWZmOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3RhdHVzIik7CisKKwlvbmUgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIG9uZV9zaGEpOworCWFub3RoZXIgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIGFub3RoZXJfc2hhKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fdHJlZSgmZGlmZiwgZ19yZXBvLCBvbmUsIGFub3RoZXIsIE5VTEwpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3ByaW50KAorCQlkaWZmLCBHSVRfRElGRl9GT1JNQVRfUEFUQ0gsIGNoZWNrX3JlbW92YWxfY2IsIE5VTEwpKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlnaXRfdHJlZV9mcmVlKGFub3RoZXIpOworCWdpdF90cmVlX2ZyZWUob25lKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfcGF0Y2hfX3RvX3N0cmluZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKm9uZV9zaGEgPSAiMjZhMTI1ZSI7CisJY29uc3QgY2hhciAqYW5vdGhlcl9zaGEgPSAiNzM1YjZhMiI7CisJZ2l0X3RyZWUgKm9uZSwgKmFub3RoZXI7CisJZ2l0X2RpZmYgKmRpZmY7CisJZ2l0X3BhdGNoICpwYXRjaDsKKwljaGFyICp0ZXh0OworCWNvbnN0IGNoYXIgKmV4cGVjdGVkID0gImRpZmYgLS1naXQgYS9zdWJkaXIudHh0IGIvc3ViZGlyLnR4dFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBlOGVlODllLi4wMDAwMDAwXG4tLS0gYS9zdWJkaXIudHh0XG4rKysgL2Rldi9udWxsXG5AQCAtMSwyICswLDAgQEBcbi1JcyBpdCBhIGJpcmQ/XG4tSXMgaXQgYSBwbGFuZT9cbiI7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKKworCW9uZSA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgb25lX3NoYSk7CisJYW5vdGhlciA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgYW5vdGhlcl9zaGEpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b190cmVlKCZkaWZmLCBnX3JlcG8sIG9uZSwgYW5vdGhlciwgTlVMTCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCAwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQsIHRleHQpOworCisJY2xfYXNzZXJ0X2VxdWFsX3N6KDMxLCBnaXRfcGF0Y2hfc2l6ZShwYXRjaCwgMCwgMCwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9zeigzMSwgZ2l0X3BhdGNoX3NpemUocGF0Y2gsIDEsIDAsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMzEgKyAxNiwgZ2l0X3BhdGNoX3NpemUocGF0Y2gsIDEsIDEsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooc3RybGVuKGV4cGVjdGVkKSwgZ2l0X3BhdGNoX3NpemUocGF0Y2gsIDEsIDEsIDEpKTsKKworCWdpdF9fZnJlZSh0ZXh0KTsKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlnaXRfdHJlZV9mcmVlKGFub3RoZXIpOworCWdpdF90cmVlX2ZyZWUob25lKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfcGF0Y2hfX2NvbmZpZ19vcHRpb25zKHZvaWQpCit7CisJY29uc3QgY2hhciAqb25lX3NoYSA9ICIyNmExMjVlIjsgLyogY3VycmVudCBIRUFEICovCisJZ2l0X3RyZWUgKm9uZTsKKwlnaXRfY29uZmlnICpjZmc7CisJZ2l0X2RpZmYgKmRpZmY7CisJZ2l0X3BhdGNoICpwYXRjaDsKKwljaGFyICp0ZXh0OworCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwljaGFyICpvbmVmaWxlID0gInN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGUiOworCWNvbnN0IGNoYXIgKmV4cGVjdGVkMSA9ICJkaWZmIC0tZ2l0IGMvc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZSBpL3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbmluZGV4IDcwYmQ5NDQuLjkwNmVlNzcgMTAwNjQ0XG4tLS0gYy9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4rKysgaS9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG5AQCAtMSArMSwyIEBAXG4gc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuK3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbiI7CisJY29uc3QgY2hhciAqZXhwZWN0ZWQyID0gImRpZmYgLS1naXQgaS9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIHcvc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuaW5kZXggOTA2ZWU3Ny4uMDExYzM0NCAxMDA2NDRcbi0tLSBpL3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbisrKyB3L3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbkBAIC0xLDIgKzEsMyBAQFxuIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbiBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4rc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuIjsKKwljb25zdCBjaGFyICpleHBlY3RlZDMgPSAiZGlmZiAtLWdpdCBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbmluZGV4IDkwNmVlNzcuLjAxMWMzNDQgMTAwNjQ0XG4tLS0gc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuKysrIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbkBAIC0xLDIgKzEsMyBAQFxuIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbiBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG4rc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuIjsKKwljb25zdCBjaGFyICpleHBlY3RlZDQgPSAiZGlmZiAtLWdpdCBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbmluZGV4IDcwYmQ5NDQzYWRhMC4uOTA2ZWU3NzExZjRmIDEwMDY0NFxuLS0tIHN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbisrKyBzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlXG5AQCAtMSArMSwyIEBAXG4gc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZVxuK3N0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGVcbiI7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNmZywgZ19yZXBvKSk7CisJb25lID0gcmVzb2x2ZV9jb21taXRfb2lkX3RvX3RyZWUoZ19yZXBvLCBvbmVfc2hhKTsKKwlvcHRzLnBhdGhzcGVjLmNvdW50ID0gMTsKKwlvcHRzLnBhdGhzcGVjLnN0cmluZ3MgPSAmb25lZmlsZTsKKworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNmZywgImRpZmYubW5lbW9uaWNwcmVmaXgiLCAidHJ1ZSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9faW5kZXgoJmRpZmYsIGdfcmVwbywgb25lLCBOVUxMLCAmb3B0cykpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgMCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQxLCB0ZXh0KTsKKworCWdpdF9fZnJlZSh0ZXh0KTsKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkMiwgdGV4dCk7CisKKwlnaXRfX2ZyZWUodGV4dCk7CisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJkaWZmLm5vcHJlZml4IiwgInRydWUiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZDMsIHRleHQpOworCisJZ2l0X19mcmVlKHRleHQpOworCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9pbnQzMihjZmcsICJjb3JlLmFiYnJldiIsIDEyKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZkaWZmLCBnX3JlcG8sIG9uZSwgTlVMTCwgJm9wdHMpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZ0ZXh0LCBwYXRjaCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkNCwgdGV4dCk7CisKKwlnaXRfX2ZyZWUodGV4dCk7CisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlnaXRfdHJlZV9mcmVlKG9uZSk7CisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3BhdGNoX19odW5rc19oYXZlX2NvcnJlY3RfbGluZV9udW1iZXJzKHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWdpdF90cmVlICpoZWFkOworCWdpdF9kaWZmX29wdGlvbnMgb3B0ID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCWdpdF9kaWZmICpkaWZmOworCWdpdF9wYXRjaCAqcGF0Y2g7CisJY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhOworCWNvbnN0IGdpdF9kaWZmX2h1bmsgKmh1bms7CisJY29uc3QgZ2l0X2RpZmZfbGluZSAqbGluZTsKKwlzaXplX3QgaHVua2xlbjsKKwlnaXRfYnVmIG9sZF9jb250ZW50ID0gR0lUX0JVRl9JTklULCBhY3R1YWwgPSBHSVRfQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqbmV3X2NvbnRlbnQgPSAiVGhlIFNvbmcgb2YgU2V2ZW4gQ2l0aWVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSSBXQVMgTG9yZCBvZiBDaXRpZXMgdmVyeSBzdW1wdHVvdXNseSBidWlsZGVkLlxuU2V2ZW4gcm9hcmluZyBDaXRpZXMgcGFpZCBtZSB0cmlidXRlIGZyb20gYWZhci5cbkl2b3J5IHRoZWlyIG91dHBvc3RzIHdlcmUtLXRoZSBndWFyZHJvb21zIG9mIHRoZW0gZ2lsZGVkLFxuQW5kIGdhcnJpc29uZWQgd2l0aCBBbWF6b25zIGludmluY2libGUgaW4gd2FyLlxuXG5UaGlzIGlzIHNvbWUgbmV3IHRleHQ7XG5Ob3QgYXMgZ29vZCBhcyB0aGUgb2xkIHRleHQ7XG5CdXQgaGVyZSBpdCBpcy5cblxuU28gdGhleSB3YXJyZWQgYW5kIHRyYWZmaWNrZWQgb25seSB5ZXN0ZXJkYXksIG15IENpdGllcy5cblRvLWRheSB0aGVyZSBpcyBubyBtYXJrIG9yIG1vdW5kIG9mIHdoZXJlIG15IENpdGllcyBzdG9vZC5cbkZvciB0aGUgUml2ZXIgcm9zZSBhdCBtaWRuaWdodCBhbmQgaXQgd2FzaGVkIGF3YXkgbXkgQ2l0aWVzLlxuVGhleSBhcmUgZXZlbmVkIHdpdGggQXRsYW50aXMgYW5kIHRoZSB0b3ducyBiZWZvcmUgdGhlIEZsb29kLlxuXG5SYWluIG9uIHJhaW4tZ29yZ2VkIGNoYW5uZWxzIHJhaXNlZCB0aGUgd2F0ZXItbGV2ZWxzIHJvdW5kIHRoZW0sXG5GcmVzaGV0IGJhY2tlZCBvbiBmcmVzaGV0IHN3ZWxsZWQgYW5kIHN3ZXB0IHRoZWlyIHdvcmxkIGZyb20gc2lnaHQsXG5UaWxsIHRoZSBlbWJvbGRlbmVkIGZsb29kcyBsaW5rZWQgYXJtcyBhbmQsIGZsYXNoaW5nIGZvcndhcmQsIGRyb3duZWQgdGhlbS0tXG5Ecm93bmVkIG15IFNldmVuIENpdGllcyBhbmQgdGhlaXIgcGVvcGxlcyBpbiBvbmUgbmlnaHQhXG5cbkxvdyBhbW9uZyB0aGUgYWxkZXJzIGxpZSB0aGVpciBkZXJlbGljdCBmb3VuZGF0aW9ucyxcblRoZSBiZWFtcyB3aGVyZWluIHRoZXkgdHJ1c3RlZCBhbmQgdGhlIHBsaW50aHMgd2hlcmVvbiB0aGV5IGJ1aWx0LS1cbk15IHJ1bGVycyBhbmQgdGhlaXIgdHJlYXN1cmUgYW5kIHRoZWlyIHVuYm9ybiBwb3B1bGF0aW9ucyxcbkRlYWQsIGRlc3Ryb3llZCwgYWJvcnRlZCwgYW5kIGRlZmlsZWQgd2l0aCBtdWQgYW5kIHNpbHQhXG5cbkFub3RoZXIgcmVwbGFjZW1lbnQ7XG5CcmVha2luZyB1cCB0aGUgcG9lbTtcbkdlbmVyYXRpbmcgc29tZSBodW5rcy5cblxuVG8gdGhlIHNvdW5kIG9mIHRydW1wZXRzIHNoYWxsIHRoZWlyIHNlZWQgcmVzdG9yZSBteSBDaXRpZXNcbldlYWx0aHkgYW5kIHdlbGwtd2VhcG9uZWQsIHRoYXQgb25jZSBtb3JlIG1heSBJIGJlaG9sZFxuQWxsIHRoZSB3b3JsZCBnbyBzb2Z0bHkgd2hlbiBpdCB3YWxrcyBiZWZvcmUgbXkgQ2l0aWVzLFxuQW5kIHRoZSBob3JzZXMgYW5kIHRoZSBjaGFyaW90cyBmbGVlaW5nIGZyb20gdGhlbSBhcyBvZiBvbGQhXG5cbiAgLS0gUnVkeWFyZCBLaXBsaW5nXG4iOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgicmVuYW1lcyIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19uZXcoJmNmZykpOworCWdpdF9yZXBvc2l0b3J5X3NldF9jb25maWcoZ19yZXBvLCBjZmcpOworCWdpdF9jb25maWdfZnJlZShjZmcpOworCisJZ2l0X3JlcG9zaXRvcnlfcmVpbml0X2ZpbGVzeXN0ZW0oZ19yZXBvLCBmYWxzZSk7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZvbGRfY29udGVudCwgInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiKSk7CisKKwljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiLCBuZXdfY29udGVudCk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJmhlYWQsIGdfcmVwbykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIGhlYWQsICZvcHQpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgMCkpOworCWNsX2Fzc2VydCgoZGVsdGEgPSBnaXRfcGF0Y2hfZ2V0X2RlbHRhKHBhdGNoKSkgIT0gTlVMTCk7CisKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIChpbnQpZGVsdGEtPnN0YXR1cyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMiwgKGludClnaXRfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKSk7CisKKwkvKiBjaGVjayBodW5rIDAgKi8KKworCWNsX2dpdF9wYXNzKAorCQlnaXRfcGF0Y2hfZ2V0X2h1bmsoJmh1bmssICZodW5rbGVuLCBwYXRjaCwgMCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMTgsIChpbnQpaHVua2xlbik7CisKKwljbF9hc3NlcnRfZXF1YWxfaSg2LCAoaW50KWh1bmstPm9sZF9zdGFydCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMTUsIChpbnQpaHVuay0+b2xkX2xpbmVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg2LCAoaW50KWh1bmstPm5ld19zdGFydCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koOSwgKGludClodW5rLT5uZXdfbGluZXMpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMTgsIChpbnQpZ2l0X3BhdGNoX251bV9saW5lc19pbl9odW5rKHBhdGNoLCAwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcGF0Y2gsIDAsIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0NPTlRFWFQsIChpbnQpbGluZS0+b3JpZ2luKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCBsaW5lLT5jb250ZW50LCBsaW5lLT5jb250ZW50X2xlbikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJJdm9yeSB0aGVpciBvdXRwb3N0cyB3ZXJlLS10aGUgZ3VhcmRyb29tcyBvZiB0aGVtIGdpbGRlZCxcbiIsIGFjdHVhbC5wdHIpOworCWNsX2Fzc2VydF9lcXVhbF9pKDYsIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDYsIGxpbmUtPm5ld19saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKC0xLCBsaW5lLT5jb250ZW50X29mZnNldCk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcGF0Y2gsIDAsIDMpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0RFTEVUSU9OLCAoaW50KWxpbmUtPm9yaWdpbik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXQoJmFjdHVhbCwgbGluZS0+Y29udGVudCwgbGluZS0+Y29udGVudF9sZW4pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiQWxsIHRoZSB3b3JsZCB3ZW50IHNvZnRseSB3aGVuIGl0IHdhbGtlZCBiZWZvcmUgbXkgQ2l0aWVzLS1cbiIsIGFjdHVhbC5wdHIpOworCWNsX2Fzc2VydF9lcXVhbF9pKDksIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKC0xLCBsaW5lLT5uZXdfbGluZW5vKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgyNTIsIGxpbmUtPmNvbnRlbnRfb2Zmc2V0KTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMCwgMTIpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0FERElUSU9OLCAoaW50KWxpbmUtPm9yaWdpbik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXQoJmFjdHVhbCwgbGluZS0+Y29udGVudCwgbGluZS0+Y29udGVudF9sZW4pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiVGhpcyBpcyBzb21lIG5ldyB0ZXh0O1xuIiwgYWN0dWFsLnB0cik7CisJY2xfYXNzZXJ0X2VxdWFsX2koLTEsIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDksIGxpbmUtPm5ld19saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDI1MiwgbGluZS0+Y29udGVudF9vZmZzZXQpOworCisJLyogY2hlY2sgaHVuayAxICovCisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2h1bmsoJmh1bmssICZodW5rbGVuLCBwYXRjaCwgMSkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMTgsIChpbnQpaHVua2xlbik7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgzMSwgKGludClodW5rLT5vbGRfc3RhcnQpOworCWNsX2Fzc2VydF9lcXVhbF9pKDE1LCAoaW50KWh1bmstPm9sZF9saW5lcyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMjUsIChpbnQpaHVuay0+bmV3X3N0YXJ0KTsKKwljbF9hc3NlcnRfZXF1YWxfaSg5LCAoaW50KWh1bmstPm5ld19saW5lcyk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxOCwgKGludClnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocGF0Y2gsIDEpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMSwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfQ09OVEVYVCwgKGludClsaW5lLT5vcmlnaW4pOworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0KCZhY3R1YWwsIGxpbmUtPmNvbnRlbnQsIGxpbmUtPmNvbnRlbnRfbGVuKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIk15IHJ1bGVycyBhbmQgdGhlaXIgdHJlYXN1cmUgYW5kIHRoZWlyIHVuYm9ybiBwb3B1bGF0aW9ucyxcbiIsIGFjdHVhbC5wdHIpOworCWNsX2Fzc2VydF9lcXVhbF9pKDMxLCBsaW5lLT5vbGRfbGluZW5vKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgyNSwgbGluZS0+bmV3X2xpbmVubyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koLTEsIGxpbmUtPmNvbnRlbnRfb2Zmc2V0KTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMSwgMykpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfREVMRVRJT04sIChpbnQpbGluZS0+b3JpZ2luKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCBsaW5lLT5jb250ZW50LCBsaW5lLT5jb250ZW50X2xlbikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJUaGUgRGF1Z2h0ZXJzIG9mIHRoZSBQYWxhY2Ugd2hvbSB0aGV5IGNoZXJpc2hlZCBpbiBteSBDaXRpZXMsXG4iLCBhY3R1YWwucHRyKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgzNCwgbGluZS0+b2xkX2xpbmVubyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koLTEsIGxpbmUtPm5ld19saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDE0NjgsIGxpbmUtPmNvbnRlbnRfb2Zmc2V0KTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMSwgMTIpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0FERElUSU9OLCAoaW50KWxpbmUtPm9yaWdpbik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXQoJmFjdHVhbCwgbGluZS0+Y29udGVudCwgbGluZS0+Y29udGVudF9sZW4pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiQW5vdGhlciByZXBsYWNlbWVudDtcbiIsIGFjdHVhbC5wdHIpOworCWNsX2Fzc2VydF9lcXVhbF9pKC0xLCBsaW5lLT5vbGRfbGluZW5vKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgyOCwgbGluZS0+bmV3X2xpbmVubyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMTA2NiwgbGluZS0+Y29udGVudF9vZmZzZXQpOworCisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwkvKiBMZXQncyBjaGVjayBsaW5lIG51bWJlcnMgd2hlbiB0aGVyZSBpcyBubyBuZXdsaW5lICovCisKKwlnaXRfYnVmX3J0cmltKCZvbGRfY29udGVudCk7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0Iiwgb2xkX2NvbnRlbnQucHRyKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBoZWFkLCAmb3B0KSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwYXRjaCkpICE9IE5VTEwpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX01PRElGSUVELCAoaW50KWRlbHRhLT5zdGF0dXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwYXRjaCkpOworCisJLyogY2hlY2sgaHVuayAwICovCisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2h1bmsoJmh1bmssICZodW5rbGVuLCBwYXRjaCwgMCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koNiwgKGludClodW5rbGVuKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDQ2LCAoaW50KWh1bmstPm9sZF9zdGFydCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgKGludClodW5rLT5vbGRfbGluZXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDQ2LCAoaW50KWh1bmstPm5ld19zdGFydCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgKGludClodW5rLT5uZXdfbGluZXMpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koNiwgKGludClnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocGF0Y2gsIDApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMCwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfQ09OVEVYVCwgKGludClsaW5lLT5vcmlnaW4pOworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0KCZhY3R1YWwsIGxpbmUtPmNvbnRlbnQsIGxpbmUtPmNvbnRlbnRfbGVuKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIkFuZCB0aGUgaG9yc2VzIGFuZCB0aGUgY2hhcmlvdHMgZmxlZWluZyBmcm9tIHRoZW0gYXMgb2Ygb2xkIVxuIiwgYWN0dWFsLnB0cik7CisJY2xfYXNzZXJ0X2VxdWFsX2koNDcsIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDQ3LCBsaW5lLT5uZXdfbGluZW5vKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMCwgMikpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfQ09OVEVYVCwgKGludClsaW5lLT5vcmlnaW4pOworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0KCZhY3R1YWwsIGxpbmUtPmNvbnRlbnQsIGxpbmUtPmNvbnRlbnRfbGVuKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIlxuIiwgYWN0dWFsLnB0cik7CisJY2xfYXNzZXJ0X2VxdWFsX2koNDgsIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDQ4LCBsaW5lLT5uZXdfbGluZW5vKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMCwgMykpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfREVMRVRJT04sIChpbnQpbGluZS0+b3JpZ2luKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCBsaW5lLT5jb250ZW50LCBsaW5lLT5jb250ZW50X2xlbikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCIgIC0tIFJ1ZHlhcmQgS2lwbGluZ1xuIiwgYWN0dWFsLnB0cik7CisJY2xfYXNzZXJ0X2VxdWFsX2koNDksIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKC0xLCBsaW5lLT5uZXdfbGluZW5vKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgMCwgNCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ESUZGX0xJTkVfQURESVRJT04sIChpbnQpbGluZS0+b3JpZ2luKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgmYWN0dWFsLCBsaW5lLT5jb250ZW50LCBsaW5lLT5jb250ZW50X2xlbikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCIgIC0tIFJ1ZHlhcmQgS2lwbGluZyIsIGFjdHVhbC5wdHIpOworCWNsX2Fzc2VydF9lcXVhbF9pKC0xLCBsaW5lLT5vbGRfbGluZW5vKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg0OSwgbGluZS0+bmV3X2xpbmVubyk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcGF0Y2gsIDAsIDUpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRElGRl9MSU5FX0RFTF9FT0ZOTCwgKGludClsaW5lLT5vcmlnaW4pOworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0KCZhY3R1YWwsIGxpbmUtPmNvbnRlbnQsIGxpbmUtPmNvbnRlbnRfbGVuKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIlxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiwgYWN0dWFsLnB0cik7CisJY2xfYXNzZXJ0X2VxdWFsX2koLTEsIGxpbmUtPm9sZF9saW5lbm8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDQ5LCBsaW5lLT5uZXdfbGluZW5vKTsKKworCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJZ2l0X2J1Zl9mcmVlKCZhY3R1YWwpOworCWdpdF9idWZfZnJlZSgmb2xkX2NvbnRlbnQpOworCWdpdF90cmVlX2ZyZWUoaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3NpbmdsZV9wYXRjaF9zdGF0cygKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywgc2l6ZV90IGh1bmtzLAorCXNpemVfdCBhZGRzLCBzaXplX3QgZGVscywgc2l6ZV90IGN0eHQsIHNpemVfdCAqc2l6ZXMsCisJY29uc3QgY2hhciAqZXhwZWN0ZWQpCit7CisJZ2l0X2RpZmYgKmRpZmY7CisJZ2l0X3BhdGNoICpwYXRjaDsKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CisJc2l6ZV90IGFjdHVhbF9jdHh0LCBhY3R1YWxfYWRkcywgYWN0dWFsX2RlbHM7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCByZXBvLCBOVUxMLCBOVUxMKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwYXRjaCkpICE9IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9NT0RJRklFRCwgKGludClkZWx0YS0+c3RhdHVzKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKChpbnQpaHVua3MsIChpbnQpZ2l0X3BhdGNoX251bV9odW5rcyhwYXRjaCkpOworCisJY2xfZ2l0X3Bhc3MoIGdpdF9wYXRjaF9saW5lX3N0YXRzKAorCQkmYWN0dWFsX2N0eHQsICZhY3R1YWxfYWRkcywgJmFjdHVhbF9kZWxzLCBwYXRjaCkgKTsKKworCWNsX2Fzc2VydF9lcXVhbF9zeihjdHh0LCBhY3R1YWxfY3R4dCk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KGFkZHMsIGFjdHVhbF9hZGRzKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooZGVscywgYWN0dWFsX2RlbHMpOworCisJaWYgKGV4cGVjdGVkICE9IE5VTEwpIHsKKwkJY2hhciAqdGV4dDsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWQsIHRleHQpOworCQlnaXRfX2ZyZWUodGV4dCk7CisKKwkJY2xfYXNzZXJ0X2VxdWFsX3N6KAorCQkJc3RybGVuKGV4cGVjdGVkKSwgZ2l0X3BhdGNoX3NpemUocGF0Y2gsIDEsIDEsIDEpKTsKKwl9CisKKwlpZiAoc2l6ZXMpIHsKKwkJaWYgKHNpemVzWzBdKQorCQkJY2xfYXNzZXJ0X2VxdWFsX3N6KHNpemVzWzBdLCBnaXRfcGF0Y2hfc2l6ZShwYXRjaCwgMCwgMCwgMCkpOworCQlpZiAoc2l6ZXNbMV0pCisJCQljbF9hc3NlcnRfZXF1YWxfc3ooc2l6ZXNbMV0sIGdpdF9wYXRjaF9zaXplKHBhdGNoLCAxLCAwLCAwKSk7CisJCWlmIChzaXplc1syXSkKKwkJCWNsX2Fzc2VydF9lcXVhbF9zeihzaXplc1syXSwgZ2l0X3BhdGNoX3NpemUocGF0Y2gsIDEsIDEsIDApKTsKKwl9CisKKwkvKiB3YWxrIGxpbmVzIGluIGh1bmsgd2l0aCBiYXNpYyBzYW5pdHkgY2hlY2tzICovCisJZm9yICg7IGh1bmtzID4gMDsgLS1odW5rcykgeworCQlzaXplX3QgaSwgbWF4X2k7CisJCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmU7CisJCWludCBsYXN0X25ld19saW5lbm8gPSAtMSwgbGFzdF9vbGRfbGluZW5vID0gLTE7CisKKwkJbWF4X2kgPSBnaXRfcGF0Y2hfbnVtX2xpbmVzX2luX2h1bmsocGF0Y2gsIGh1bmtzIC0gMSk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1heF9pOyArK2kpIHsKKwkJCWludCBleHBlY3RlZCA9IDE7CisKKwkJCWNsX2dpdF9wYXNzKAorCQkJCWdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgaHVua3MgLSAxLCBpKSk7CisKKwkJCWlmIChsaW5lLT5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9BRERfRU9GTkwgfHwKKwkJCQlsaW5lLT5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9ERUxfRU9GTkwgfHwKKwkJCQlsaW5lLT5vcmlnaW4gPT0gR0lUX0RJRkZfTElORV9DT05URVhUX0VPRk5MKQorCQkJCWV4cGVjdGVkID0gMDsKKworCQkJaWYgKGxpbmUtPm9sZF9saW5lbm8gPj0gMCkgeworCQkJCWlmIChsYXN0X29sZF9saW5lbm8gPj0gMCkKKwkJCQkJY2xfYXNzZXJ0X2VxdWFsX2koCisJCQkJCQlleHBlY3RlZCwgbGluZS0+b2xkX2xpbmVubyAtIGxhc3Rfb2xkX2xpbmVubyk7CisJCQkJbGFzdF9vbGRfbGluZW5vID0gbGluZS0+b2xkX2xpbmVubzsKKwkJCX0KKworCQkJaWYgKGxpbmUtPm5ld19saW5lbm8gPj0gMCkgeworCQkJCWlmIChsYXN0X25ld19saW5lbm8gPj0gMCkKKwkJCQkJY2xfYXNzZXJ0X2VxdWFsX2koCisJCQkJCQlleHBlY3RlZCwgbGluZS0+bmV3X2xpbmVubyAtIGxhc3RfbmV3X2xpbmVubyk7CisJCQkJbGFzdF9uZXdfbGluZW5vID0gbGluZS0+bmV3X2xpbmVubzsKKwkJCX0KKwkJfQorCX0KKworCWdpdF9wYXRjaF9mcmVlKHBhdGNoKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworfQorCit2b2lkIHRlc3RfZGlmZl9wYXRjaF9fbGluZV9jb3VudHNfd2l0aF9lb2ZubCh2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwlnaXRfYnVmIGNvbnRlbnQgPSBHSVRfQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZW5kOworCWdpdF9pbmRleCAqaW5kZXg7CisJY29uc3QgY2hhciAqZXhwZWN0ZWQgPQorCQkvKiBiZWxvdyBpcyBwYXN0ZWQgb3V0cHV0IG9mICdnaXQgZGlmZicgd2l0aCBmbiBjb250ZXh0IHJlbW92ZWQgKi8KKwkJImRpZmYgLS1naXQgYS9zb25nb2Y3Y2l0aWVzLnR4dCBiL3NvbmdvZjdjaXRpZXMudHh0XG4iCisJCSJpbmRleCAzNzhhN2Q5Li4zZDAxNTRlIDEwMDY0NFxuIgorCQkiLS0tIGEvc29uZ29mN2NpdGllcy50eHRcbiIKKwkJIisrKyBiL3NvbmdvZjdjaXRpZXMudHh0XG4iCisJCSJAQCAtNDIsNyArNDIsNyBAQCBXaXRoIHBlb3BsZXMgdW5kZWZlYXRlZCBvZiB0aGUgZGFyaywgZW5kdXJpbmcgYmxvb2QuXG4iCisJCSIgXG4iCisJCSIgVG8gdGhlIHNvdW5kIG9mIHRydW1wZXRzIHNoYWxsIHRoZWlyIHNlZWQgcmVzdG9yZSBteSBDaXRpZXNcbiIKKwkJIiBXZWFsdGh5IGFuZCB3ZWxsLXdlYXBvbmVkLCB0aGF0IG9uY2UgbW9yZSBtYXkgSSBiZWhvbGRcbiIKKwkJIi1BbGwgdGhlIHdvcmxkIGdvIHNvZnRseSB3aGVuIGl0IHdhbGtzIGJlZm9yZSBteSBDaXRpZXMsXG4iCisJCSIrI0FsbCB0aGUgd29ybGQgZ28gc29mdGx5IHdoZW4gaXQgd2Fsa3MgYmVmb3JlIG15IENpdGllcyxcbiIKKwkJIiBBbmQgdGhlIGhvcnNlcyBhbmQgdGhlIGNoYXJpb3RzIGZsZWVpbmcgZnJvbSB0aGVtIGFzIG9mIG9sZCFcbiIKKwkJIiBcbiIKKwkJIiAgIC0tIFJ1ZHlhcmQgS2lwbGluZ1xuIgorCQkiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIjsKKwlzaXplX3QgZXhwZWN0ZWRfc2l6ZXNbM10gPSB7IDExNSwgMTE5ICsgMTE1ICsgMTE0LCAxMTkgKyAxMTUgKyAxMTQgKyA3MSB9OworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgicmVuYW1lcyIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19uZXcoJmNmZykpOworCWdpdF9yZXBvc2l0b3J5X3NldF9jb25maWcoZ19yZXBvLCBjZmcpOworCWdpdF9jb25maWdfZnJlZShjZmcpOworCisJZ2l0X3JlcG9zaXRvcnlfcmVpbml0X2ZpbGVzeXN0ZW0oZ19yZXBvLCBmYWxzZSk7CisKKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmNvbnRlbnQsICJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IikpOworCisJLyogcmVtb3ZlIGZpcnN0IGxpbmUgKi8KKworCWVuZCA9IGdpdF9idWZfY3N0cigmY29udGVudCkgKyBnaXRfYnVmX2ZpbmQoJmNvbnRlbnQsICdcbicpICsgMTsKKwlnaXRfYnVmX2NvbnN1bWUoJmNvbnRlbnQsIGVuZCk7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IiwgY29udGVudC5wdHIpOworCisJY2hlY2tfc2luZ2xlX3BhdGNoX3N0YXRzKGdfcmVwbywgMSwgMCwgMSwgMywgTlVMTCwgTlVMTCk7CisKKwkvKiByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCisJZ2l0X2J1Zl9ydHJpbSgmY29udGVudCk7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IiwgY29udGVudC5wdHIpOworCisJY2hlY2tfc2luZ2xlX3BhdGNoX3N0YXRzKGdfcmVwbywgMiwgMSwgMiwgNiwgTlVMTCwgTlVMTCk7CisKKwkvKiBhZGQgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInNvbmdvZjdjaXRpZXMudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfcHV0YygmY29udGVudCwgJ1xuJykpOworCWNsX2dpdF9yZXdyaXRlZmlsZSgicmVuYW1lcy9zb25nb2Y3Y2l0aWVzLnR4dCIsIGNvbnRlbnQucHRyKTsKKworCWNoZWNrX3NpbmdsZV9wYXRjaF9zdGF0cyhnX3JlcG8sIDEsIDEsIDEsIDMsIE5VTEwsIE5VTEwpOworCisJLyogbm8gdHJhaWxpbmcgd2hpdGVzcGFjZSBhcyBjb250ZXh0IGxpbmUgKi8KKworCXsKKwkJLyogd2FsayBiYWNrIGEgY291cGxlIGxpbmVzLCBtYWtlIHNwYWNlIGFuZCBpbnNlcnQgY2hhciAqLworCQljaGFyICpzY2FuID0gY29udGVudC5wdHIgKyBjb250ZW50LnNpemU7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHsKKwkJCWZvciAoLS1zY2FuOyBzY2FuID4gY29udGVudC5wdHIgJiYgKnNjYW4gIT0gJ1xuJzsgLS1zY2FuKQorCQkJCS8qIHNlZWsgdG8gcHJldiBcbiAqLzsKKwkJfQorCQljbF9hc3NlcnQoc2NhbiA+IGNvbnRlbnQucHRyKTsKKworCQkvKiBvdmVyd3JpdGUgdHJhaWxpbmcgXG4gd2l0aCByaWdodC1zaGlmdGVkIGNvbnRlbnQgKi8KKwkJbWVtbW92ZShzY2FuICsgMSwgc2NhbiwgY29udGVudC5zaXplIC0gKHNjYW4gLSBjb250ZW50LnB0cikgLSAxKTsKKwkJLyogaW5zZXJ0ICcjJyBjaGFyIGludG8gc3BhY2Ugd2UgY3JlYXRlZCAqLworCQlzY2FuWzFdID0gJyMnOworCX0KKwljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiLCBjb250ZW50LnB0cik7CisKKwljaGVja19zaW5nbGVfcGF0Y2hfc3RhdHMoCisJCWdfcmVwbywgMSwgMSwgMSwgNiwgZXhwZWN0ZWRfc2l6ZXMsIGV4cGVjdGVkKTsKKworCWdpdF9idWZfZnJlZSgmY29udGVudCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kaWZmL3BhdGhzcGVjLmMgYi90ZXN0cy9kaWZmL3BhdGhzcGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2MWQyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RpZmYvcGF0aHNwZWMuYwpAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiZGlmZl9oZWxwZXJzLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvID0gTlVMTDsKKwordm9pZCB0ZXN0X2RpZmZfcGF0aHNwZWNfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfcGF0aHNwZWNfX2NsZWFudXAodm9pZCkKK3sKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3BhdGhzcGVjX18wKHZvaWQpCit7CisJY29uc3QgY2hhciAqYV9jb21taXQgPSAiMjZhMTI1ZWUiOyAvKiB0aGUgY3VycmVudCBIRUFEICovCisJY29uc3QgY2hhciAqYl9jb21taXQgPSAiMDAxN2JkNGEiOyAvKiB0aGUgc3RhcnQgKi8KKwlnaXRfdHJlZSAqYSA9IHJlc29sdmVfY29tbWl0X29pZF90b190cmVlKGdfcmVwbywgYV9jb21taXQpOworCWdpdF90cmVlICpiID0gcmVzb2x2ZV9jb21taXRfb2lkX3RvX3RyZWUoZ19yZXBvLCBiX2NvbW1pdCk7CisJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKKwlnaXRfc3RyYXJyYXkgcGF0aHMgPSB7IE5VTEwsIDEgfTsKKwljaGFyICpwYXRoOworCWdpdF9wYXRoc3BlYyAqcHM7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm1hdGNoZXM7CisKKwljbF9hc3NlcnQoYSk7CisJY2xfYXNzZXJ0KGIpOworCisJcGF0aCA9ICIqX2ZpbGUiOworCXBhdGhzLnN0cmluZ3MgPSAmcGF0aDsKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbmV3KCZwcywgJnBhdGhzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfdHJlZSgmbWF0Y2hlcywgYSwgR0lUX1BBVEhTUEVDX0RFRkFVTFQsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNywgKGludClnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG1hdGNoZXMpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY3VycmVudF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobWF0Y2hlcywwKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2RpZmZfZW50cnkobWF0Y2hlcywwKSA9PSBOVUxMKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG1hdGNoZXMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b190cmVlKCZkaWZmLCBnX3JlcG8sIE5VTEwsIGEsICZvcHRzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfZGlmZigKKwkJJm1hdGNoZXMsIGRpZmYsIEdJVF9QQVRIU1BFQ19ERUZBVUxULCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9pKDcsIChpbnQpZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtYXRjaGVzKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2RpZmZfZW50cnkobWF0Y2hlcywgMCkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG1hdGNoZXMsIDApID09IE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJjdXJyZW50X2ZpbGUiLAorCQlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9kaWZmX2VudHJ5KG1hdGNoZXMsMCktPm5ld19maWxlLnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9BRERFRCwKKwkJKGludClnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9kaWZmX2VudHJ5KG1hdGNoZXMsMCktPnN0YXR1cyk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtYXRjaGVzKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisJZGlmZiA9IE5VTEw7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3RyZWUoJmRpZmYsIGdfcmVwbywgYSwgYiwgJm9wdHMpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF9kaWZmKAorCQkmbWF0Y2hlcywgZGlmZiwgR0lUX1BBVEhTUEVDX0RFRkFVTFQsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgKGludClnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG1hdGNoZXMpKTsKKwljbF9hc3NlcnQoZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZGlmZl9lbnRyeShtYXRjaGVzLCAwKSAhPSBOVUxMKTsKKwljbF9hc3NlcnQoZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobWF0Y2hlcywgMCkgPT0gTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN1YmRpci9jdXJyZW50X2ZpbGUiLAorCQlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9kaWZmX2VudHJ5KG1hdGNoZXMsMCktPm5ld19maWxlLnBhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9ERUxFVEVELAorCQkoaW50KWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2RpZmZfZW50cnkobWF0Y2hlcywwKS0+c3RhdHVzKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG1hdGNoZXMpOworCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlkaWZmID0gTlVMTDsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBhLCAmb3B0cykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX2RpZmYoCisJCSZtYXRjaGVzLCBkaWZmLCBHSVRfUEFUSFNQRUNfREVGQVVMVCwgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg0LCAoaW50KWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobWF0Y2hlcykpOworCWNsX2Fzc2VydChnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9kaWZmX2VudHJ5KG1hdGNoZXMsIDApICE9IE5VTEwpOworCWNsX2Fzc2VydChnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtYXRjaGVzLCAwKSA9PSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibW9kaWZpZWRfZmlsZSIsCisJCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2RpZmZfZW50cnkobWF0Y2hlcywwKS0+bmV3X2ZpbGUucGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0RFTFRBX01PRElGSUVELAorCQkoaW50KWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2RpZmZfZW50cnkobWF0Y2hlcywwKS0+c3RhdHVzKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG1hdGNoZXMpOworCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlkaWZmID0gTlVMTDsKKworCWdpdF90cmVlX2ZyZWUoYSk7CisJZ2l0X3RyZWVfZnJlZShiKTsKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2RpZmYvcmVuYW1lLmMgYi90ZXN0cy9kaWZmL3JlbmFtZS5jCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvZGlmZi9yZW5hbWUuYwpyZW5hbWUgdG8gdGVzdHMvZGlmZi9yZW5hbWUuYwppbmRleCAyYjE4NzNiLi40MmJiNjVhIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2RpZmYvcmVuYW1lLmMKKysrIGIvdGVzdHMvZGlmZi9yZW5hbWUuYwpAQCAtNyw2ICs3LDggQEAKIHZvaWQgdGVzdF9kaWZmX3JlbmFtZV9faW5pdGlhbGl6ZSh2b2lkKQogewogCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInJlbmFtZXMiKTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIGZhbHNlKTsKIH0KIAogdm9pZCB0ZXN0X2RpZmZfcmVuYW1lX19jbGVhbnVwKHZvaWQpCkBAIC00MSw3ICs0Myw3IEBACiAJY29uc3QgY2hhciAqb2xkX3NoYSA9ICIzMWU0N2Q4YzFmYTM2ZDdmOGQ1MzdiOTYxNThlM2YwMjRkZTBhOWYyIjsKIAljb25zdCBjaGFyICpuZXdfc2hhID0gIjJiYzdmMzUxZDIwYjUzZjFjNzJjMTZjNGIwMzZlNDkxYzQ3OGM0OWEiOwogCWdpdF90cmVlICpvbGRfdHJlZSwgKm5ld190cmVlOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKIAlnaXRfZGlmZl9maW5kX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUOwogCWRpZmZfZXhwZWN0cyBleHA7CkBAIC04Niw3ICs4OCw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9BRERFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfUkVOQU1FRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3RyZWUoCiAJCSZkaWZmLCBnX3JlcG8sIG9sZF90cmVlLCBuZXdfdHJlZSwgJmRpZmZvcHRzKSk7CkBAIC0xMDcsNyArMTA5LDcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0NPUElFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfUkVOQU1FRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAlnaXRfdHJlZV9mcmVlKG9sZF90cmVlKTsKIAlnaXRfdHJlZV9mcmVlKG5ld190cmVlKTsKQEAgLTExOCw3ICsxMjAsNyBAQAogCWNvbnN0IGNoYXIgKm9sZF9zaGEgPSAiMzFlNDdkOGMxZmEzNmQ3ZjhkNTM3Yjk2MTU4ZTNmMDI0ZGUwYTlmMiI7CiAJY29uc3QgY2hhciAqbmV3X3NoYSA9ICIyYmM3ZjM1MWQyMGI1M2YxYzcyYzE2YzRiMDM2ZTQ5MWM0NzhjNDlhIjsKIAlnaXRfdHJlZSAqb2xkX3RyZWUsICpuZXdfdHJlZTsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCWdpdF9kaWZmX29wdGlvbnMgZGlmZm9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CiAJZ2l0X2RpZmZfZmluZF9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKIAljb25zdCBnaXRfZXJyb3IgKmVycjsKQEAgLTE0MCw3ICsxNDIsNyBAQAogCWVyciA9IGdpdGVycl9sYXN0KCk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koR0lURVJSX0lOVkFMSUQsIGVyci0+a2xhc3MpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X3RyZWVfZnJlZShvbGRfdHJlZSk7CiAJZ2l0X3RyZWVfZnJlZShuZXdfdHJlZSk7CiB9CkBAIC0xNTEsNyArMTUzLDcgQEAKIAljb25zdCBjaGFyICpzaGExID0gIjFjMDY4ZGVlNTc5MGVmMTU4MGNmYzRjZDY3MDkxNWI0OGQ3OTAwODQiOwogCWNvbnN0IGNoYXIgKnNoYTIgPSAiMTlkZDMyZGZiMTUyMGE2NGU1YmJhYWU4ZGNlNmVmNDIzZGZhMmYxMyI7CiAJZ2l0X3RyZWUgKm9sZF90cmVlLCAqbmV3X3RyZWU7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CiAJZGlmZl9leHBlY3RzIGV4cDsKQEAgLTIwNSw3ICsyMDcsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfTU9ESUZJRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIGdpdCBkaWZmIC1NIC1DIFwKIAkgKiAgICAgICAgICAyYmM3ZjM1MWQyMGI1M2YxYzcyYzE2YzRiMDM2ZTQ5MWM0NzhjNDlhIFwKQEAgLTIyNiw3ICsyMjgsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfTU9ESUZJRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0NPUElFRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAkvKiBnaXQgZGlmZiAtTSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLWJyZWFrLXJld3JpdGVzIFwKIAkgKiAgICAgICAgICAyYmM3ZjM1MWQyMGI1M2YxYzcyYzE2YzRiMDM2ZTQ5MWM0NzhjNDlhIFwKQEAgLTIzNiw2ICsyMzgsOCBAQAogCQkmZGlmZiwgZ19yZXBvLCBvbGRfdHJlZSwgbmV3X3RyZWUsICZkaWZmb3B0cykpOwogCiAJb3B0cy5mbGFncyA9IEdJVF9ESUZGX0ZJTkRfQUxMOworCW9wdHMuYnJlYWtfcmV3cml0ZV90aHJlc2hvbGQgPSA3MDsKKwogCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZpbmRfc2ltaWxhcihkaWZmLCAmb3B0cykpOwogCiAJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKQEAgLTI0OSw3ICsyNTMsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfREVMRVRFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfQ09QSUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qID09IENoYW5nZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkgKiBzb25nb2ZzZXZlbi50eHQgLT4gdW50aW1lbHkudHh0ICAgIChyZW5hbWUsIGNvbnZlcnQgdG8gY3JsZikKQEAgLTI3Nyw3ICsyODEsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfTU9ESUZJRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAkvKiBnaXQgZGlmZiAtTSAtQyBcCiAJICogICAgICAgICAgMWMwNjhkZWU1NzkwZWYxNTgwY2ZjNGNkNjcwOTE1YjQ4ZDc5MDA4NCBcCkBAIC0yOTcsNyArMzAxLDcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX01PRElGSUVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9SRU5BTUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIGdpdCBkaWZmIC1NIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tYnJlYWstcmV3cml0ZXMgXAogCSAqICAgICAgICAgIDFjMDY4ZGVlNTc5MGVmMTU4MGNmYzRjZDY3MDkxNWI0OGQ3OTAwODQgXApAQCAtMzEyLDggKzMxNiw4IEBACiAKIAkvKiB0aGUgZGVmYXVsdCBtYXRjaCBhbGdvcml0aG0gaXMgZ29pbmcgdG8gZmluZCB0aGUgaW50ZXJuYWwKIAkgKiB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGluIHRoZSBsaW5lcyBvZiBzaXhzZXJ2aW5nLnR4dCB0byBiZQotCSAqIHNpZ25pZmljYW50IGVub3VnaCB0aGF0IHRoaXMgd2lsbCBkZWNpZGUgdG8gc3BsaXQgaXQgaW50bwotCSAqIGFuIEFERCBhbmQgYSBERUxFVEUKKwkgKiBzaWduaWZpY2FudCBlbm91Z2ggdGhhdCB0aGlzIHdpbGwgZGVjaWRlIHRvIHNwbGl0IGl0IGludG8gYW4gQURECisJICogYW5kIGEgREVMRVRFCiAJICovCiAKIAltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOwpAQCAtMzI2LDcgKzMzMCw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9SRU5BTUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIGdpdCBkaWZmIC1NIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tYnJlYWstcmV3cml0ZXMgXAogCSAqICAgICAgICAgIDFjMDY4ZGVlNTc5MGVmMTU4MGNmYzRjZDY3MDkxNWI0OGQ3OTAwODQgXApAQCAtMzQ5LDcgKzM1Myw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9NT0RJRklFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfUkVOQU1FRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAlnaXRfdHJlZV9mcmVlKG9sZF90cmVlKTsKIAlnaXRfdHJlZV9mcmVlKG5ld190cmVlKTsKQEAgLTM2MCw3ICszNjQsNyBAQAogCWNvbnN0IGNoYXIgKnRyZWVfc2hhID0gIjJiYzdmMzUxZDIwYjUzZjFjNzJjMTZjNGIwMzZlNDkxYzQ3OGM0OWEiOwogCWdpdF9pbmRleCAqaW5kZXg7CiAJZ2l0X3RyZWUgKnRyZWU7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CiAKQEAgLTM4NCw3ICszODgsNyBAQAogCQlHSVRfRElGRl9GSU5EX0FORF9CUkVBS19SRVdSSVRFUzsKIAljbF9naXRfcGFzcyhnaXRfZGlmZl9maW5kX3NpbWlsYXIoZGlmZiwgJm9wdHMpKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCWdpdF90cmVlX2ZyZWUodHJlZSk7CiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQpAQCAtMzk2LDcgKzQwMCw3IEBACiAJZ2l0X29pZCBpZDsKIAlnaXRfdHJlZSAqdHJlZTsKIAlnaXRfYmxvYiAqYmxvYjsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCWdpdF9kaWZmX29wdGlvbnMgZGlmZm9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CiAJZ2l0X2RpZmZfZmluZF9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKIAlkaWZmX2V4cGVjdHMgZXhwOwpAQCAtNDQ3LDcgKzQ1MSw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogcmV3cml0ZSBmaWxlcyBpbiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2l0aCAvIHdpdGhvdXQgQ1JMRiBjaGFuZ2VzICovCiAKQEAgLTQ3MywxMyArNDc3LDE0IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogdHJ5IGEgZGlmZmVyZW50IHdoaXRlc3BhY2Ugb3B0aW9uICovCiAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgdHJlZSwgJmRpZmZvcHRzKSk7CiAKIAlvcHRzLmZsYWdzID0gR0lUX0RJRkZfRklORF9BTEwgfCBHSVRfRElGRl9GSU5EX0RPTlRfSUdOT1JFX1dISVRFU1BBQ0U7CisJb3B0cy5yZW5hbWVfdGhyZXNob2xkID0gNzA7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZmluZF9zaW1pbGFyKGRpZmYsICZvcHRzKSk7CiAKIAltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOwpAQCAtNDkxLDcgKzQ5Niw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogdHJ5IGEgZGlmZmVyZW50IG1hdGNoaW5nIG9wdGlvbiAqLwogCkBAIC01MDksMTQgKzUxNCwxNCBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIGFnYWluIHdpdGggZXhhY3QgbWF0Y2ggYmxvYiAqLwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZpZCwgYmxvYnNoYSkpOwogCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZ19yZXBvLCAmaWQpKTsKIAljbF9naXRfcGFzcyhnaXRfYnVmX3NldCgKLQkJJmNvbnRlbnQsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYiksIGdpdF9ibG9iX3Jhd3NpemUoYmxvYikpKTsKKwkJJmNvbnRlbnQsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYiksIChzaXplX3QpZ2l0X2Jsb2JfcmF3c2l6ZShibG9iKSkpOwogCWNsX2dpdF9yZXdyaXRlZmlsZSgicmVuYW1lcy9zb25nb2Y3Y2l0aWVzLnR4dCIsIGNvbnRlbnQucHRyKTsKIAlnaXRfYmxvYl9mcmVlKGJsb2IpOwogCkBAIC01NDAsNyArNTQ1LDcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1JFTkFNRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAlnaXRfdHJlZV9mcmVlKHRyZWUpOwogCWdpdF9idWZfZnJlZSgmY29udGVudCk7CkBAIC01NTIsMTAgKzU1NywxMCBAQAogCWNvbnN0IGNoYXIgKnNoYTAgPSAiMmJjN2YzNTFkMjBiNTNmMWM3MmMxNmM0YjAzNmU0OTFjNDc4YzQ5YSI7CiAJY29uc3QgY2hhciAqc2hhMSA9ICIxYzA2OGRlZTU3OTBlZjE1ODBjZmM0Y2Q2NzA5MTViNDhkNzkwMDg0IjsKIAlnaXRfdHJlZSAqb2xkX3RyZWUsICpuZXdfdHJlZTsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCWdpdF9kaWZmX29wdGlvbnMgZGlmZm9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CiAJZ2l0X2RpZmZfZmluZF9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7CisJZ2l0X3BhdGNoICpwYXRjaDsKIAljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CiAJY2hhciAqdGV4dDsKIAljb25zdCBjaGFyICpleHBlY3RlZCA9ICJkaWZmIC0tZ2l0IGEvc2l4c2VydmluZy50eHQgYi9pa2VlcHNpeC50eHRcbmluZGV4IGFkMGE4ZTUuLjM2MDIwZGIgMTAwNjQ0XG4tLS0gYS9zaXhzZXJ2aW5nLnR4dFxuKysrIGIvaWtlZXBzaXgudHh0XG5AQCAtMSwzICsxLDYgQEBcbitJIEtlZXAgU2l4IEhvbmVzdCBTZXJ2aW5nLU1lblxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4gSSBLRUVQIHNpeCBob25lc3Qgc2VydmluZy1tZW5cbiAgKFRoZXkgdGF1Z2h0IG1lIGFsbCBJIGtuZXcpO1xuIFRoZWlyIG5hbWVzIGFyZSBXaGF0IGFuZCBXaHkgYW5kIFdoZW5cbkBAIC0yMSw0ICsyNCw0IEBAIFNoZSBzZW5kcydlbSBhYnJvYWQgb24gaGVyIG93biBhZmZhaXJzLFxuIE9uZSBtaWxsaW9uIEhvd3MsIHR3byBtaWxsaW9uIFdoZXJlcyxcbiBBbmQgc2V2ZW4gbWlsbGlvbiBXaHlzIVxuIFxuLSAgICAgICAgICAgICAgICAtLSBSdWR5YXJkIEtpcGxpbmdcbisgIC0tIFJ1ZHlhcmQgS2lwbGluZ1xuIjsKQEAgLTU3OSwyNSArNTg0LDI2IEBACiAKIAljbF9hc3NlcnRfZXF1YWxfaSg0LCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKCZwYXRjaCwgJmRlbHRhLCBkaWZmLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwYXRjaCkpICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9DT1BJRUQsIChpbnQpZGVsdGEtPnN0YXR1cyk7CiAKLQljbF9naXRfcGFzcyhnaXRfZGlmZl9wYXRjaF90b19zdHIoJnRleHQsIHBhdGNoKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmdGV4dCwgcGF0Y2gpKTsKIAljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZCwgdGV4dCk7CiAJZ2l0X19mcmVlKHRleHQpOwogCi0JZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKE5VTEwsICZkZWx0YSwgZGlmZiwgMSkpOworCWNsX2Fzc2VydCgoZGVsdGEgPSBnaXRfZGlmZl9nZXRfZGVsdGEoZGlmZiwgMSkpICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9VTk1PRElGSUVELCAoaW50KWRlbHRhLT5zdGF0dXMpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKE5VTEwsICZkZWx0YSwgZGlmZiwgMikpOworCWNsX2Fzc2VydCgoZGVsdGEgPSBnaXRfZGlmZl9nZXRfZGVsdGEoZGlmZiwgMikpICE9IE5VTEwpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9ERUxUQV9NT0RJRklFRCwgKGludClkZWx0YS0+c3RhdHVzKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaChOVUxMLCAmZGVsdGEsIGRpZmYsIDMpKTsKKwljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X2RpZmZfZ2V0X2RlbHRhKGRpZmYsIDMpKSAhPSBOVUxMKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfTU9ESUZJRUQsIChpbnQpZGVsdGEtPnN0YXR1cyk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfdHJlZV9mcmVlKG9sZF90cmVlKTsKIAlnaXRfdHJlZV9mcmVlKG5ld190cmVlKTsKIH0KQEAgLTYwNyw3ICs2MTMsNyBAQAogCWdpdF9idWYgYzEgPSBHSVRfQlVGX0lOSVQsIGMyID0gR0lUX0JVRl9JTklUOwogCWdpdF9pbmRleCAqaW5kZXg7CiAJZ2l0X3RyZWUgKnRyZWU7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CiAJZGlmZl9leHBlY3RzIGV4cDsKQEAgLTY0Miw3ICs2NDgsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9SRU5BTUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfdHJlZV9mcmVlKHRyZWUpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIApAQCAtNjU1LDcgKzY2MSw3IEBACiAJZ2l0X2J1ZiBjMSA9IEdJVF9CVUZfSU5JVCwgYzIgPSBHSVRfQlVGX0lOSVQsIGMzID0gR0lUX0JVRl9JTklUOwogCWdpdF9pbmRleCAqaW5kZXg7CiAJZ2l0X3RyZWUgKnRyZWU7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CiAJZGlmZl9leHBlY3RzIGV4cDsKQEAgLTY5NCw3ICs3MDAsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGV4cC5maWxlcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9SRU5BTUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfdHJlZV9mcmVlKHRyZWUpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIApAQCAtNzA4LDcgKzcxNCw3IEBACiAJZ2l0X2J1ZiBjMSA9IEdJVF9CVUZfSU5JVCwgYzIgPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X2luZGV4ICppbmRleDsKIAlnaXRfdHJlZSAqdHJlZTsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCWdpdF9kaWZmX29wdGlvbnMgZGlmZm9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CiAJZ2l0X2RpZmZfZmluZF9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKIAlkaWZmX2V4cGVjdHMgZXhwOwpAQCAtNzQ3LDcgKzc1Myw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9BRERFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfREVMRVRFRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKIAlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiAKQEAgLTc2MCw3ICs3NjYsNyBAQAogCWdpdF9idWYgYzEgPSBHSVRfQlVGX0lOSVQsIGMyID0gR0lUX0JVRl9JTklUOwogCWdpdF9pbmRleCAqaW5kZXg7CiAJZ2l0X3RyZWUgKnRyZWU7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CiAJZGlmZl9leHBlY3RzIGV4cDsKQEAgLTgwNCw3ICs4MTAsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfQ09QSUVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTk1PRElGSUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfdHJlZV9mcmVlKHRyZWUpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIApAQCAtODE3LDcgKzgyMyw3IEBACiAJZ2l0X2J1ZiBjMSA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfaW5kZXggKmluZGV4OwogCWdpdF90cmVlICp0cmVlOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKIAlnaXRfZGlmZl9maW5kX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUOwogCWRpZmZfZXhwZWN0cyBleHA7CkBAIC04NTgsNyArODY0LDcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1JFTkFNRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOTU9ESUZJRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCWdpdF90cmVlX2ZyZWUodHJlZSk7CiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogCkBAIC04NjgsNiArODc0LDggQEAKIHN0cnVjdCByZW5hbWVfZXhwZWN0ZWQKIHsKIAlzaXplX3QgbGVuOworCisJdW5zaWduZWQgaW50ICpzdGF0dXM7CiAJY29uc3QgY2hhciAqKnNvdXJjZXM7CiAJY29uc3QgY2hhciAqKnRhcmdldHM7CiAKQEAgLTg4Miw3ICs4OTAsNyBAQAogCiAJY2xfYXNzZXJ0KGV4cGVjdGVkLT5pZHggPCBleHBlY3RlZC0+bGVuKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKGRlbHRhLT5zdGF0dXMsIEdJVF9ERUxUQV9SRU5BTUVEKTsKKwljbF9hc3NlcnRfZXF1YWxfaShkZWx0YS0+c3RhdHVzLCBleHBlY3RlZC0+c3RhdHVzW2V4cGVjdGVkLT5pZHhdKTsKIAogCWNsX2Fzc2VydChnaXRfX3N0cmNtcChleHBlY3RlZC0+c291cmNlc1tleHBlY3RlZC0+aWR4XSwKIAkJZGVsdGEtPm9sZF9maWxlLnBhdGgpID09IDApOwpAQCAtOTAwLDEzICs5MDgsMTQgQEAKIAlnaXRfaW5kZXggKmluZGV4OwogCWdpdF90cmVlICp0cmVlOwogCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKIAlnaXRfZGlmZl9maW5kX29wdGlvbnMgZmluZG9wdHMgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKIAlnaXRfYnVmIG9uZSA9IEdJVF9CVUZfSU5JVCwgdHdvID0gR0lUX0JVRl9JTklUOworCXVuc2lnbmVkIGludCBzdGF0dXNbXSA9IHsgR0lUX0RFTFRBX1JFTkFNRUQsIEdJVF9ERUxUQV9SRU5BTUVEIH07CiAJY29uc3QgY2hhciAqc291cmNlc1tdID0geyAiQ2xhc3MxLmNzIiwgIkNsYXNzMi5jcyIgfTsKIAljb25zdCBjaGFyICp0YXJnZXRzW10gPSB7ICJDbGFzc0EuY3MiLCAiQ2xhc3NCLmNzIiB9OwotCXN0cnVjdCByZW5hbWVfZXhwZWN0ZWQgZXhwZWN0ID0geyAyLCBzb3VyY2VzLCB0YXJnZXRzIH07CisJc3RydWN0IHJlbmFtZV9leHBlY3RlZCBleHBlY3QgPSB7IDIsIHN0YXR1cywgc291cmNlcywgdGFyZ2V0cyB9OwogCWNoYXIgKnB0cjsKIAogCW9wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfRk9SQ0U7CkBAIC05NTMsNyArOTYyLDcgQEAKIAljbF9naXRfcGFzcygKIAkJZ2l0X2RpZmZfZm9yZWFjaChkaWZmLCB0ZXN0X25hbWVzX2V4cGVjdGVkLCBOVUxMLCBOVUxMLCAmZXhwZWN0KSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfdHJlZV9mcmVlKHRyZWUpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIAlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CkBAIC05ODUsMTIgKzk5NCwxMyBAQAogCWdpdF9pbmRleCAqaW5kZXg7CiAJZ2l0X3RyZWUgKnRyZWU7CiAJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjsKKwlnaXRfZGlmZiAqZGlmZjsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBmaW5kb3B0cyA9IEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUOworCXVuc2lnbmVkIGludCBzdGF0dXNbXSA9IHsgR0lUX0RFTFRBX1JFTkFNRUQsIEdJVF9ERUxUQV9SRU5BTUVEIH07CiAJY29uc3QgY2hhciAqc291cmNlc1tdID0geyAiYS50eHQiLCAiYi50eHQiIH07CiAJY29uc3QgY2hhciAqdGFyZ2V0c1tdID0geyAiYy50eHQiLCAiZC50eHQiIH07Ci0Jc3RydWN0IHJlbmFtZV9leHBlY3RlZCBleHBlY3QgPSB7IDIsIHNvdXJjZXMsIHRhcmdldHMgfTsKKwlzdHJ1Y3QgcmVuYW1lX2V4cGVjdGVkIGV4cGVjdCA9IHsgMiwgc3RhdHVzLCBzb3VyY2VzLCB0YXJnZXRzIH07CiAKIAlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOwogCkBAIC0xMDI2LDE4ICsxMDM2LDEyMSBAQAogCQlnaXRfZGlmZl9mb3JlYWNoKGRpZmYsIHRlc3RfbmFtZXNfZXhwZWN0ZWQsIE5VTEwsIE5VTEwsICZleHBlY3QpKTsKIAljbF9hc3NlcnQoZXhwZWN0LmlkeCA+IDApOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKIAlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiAJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOwogCWdpdF9yZWZlcmVuY2VfZnJlZShzZWxmc2ltaWxhcik7CiB9CiAKK3ZvaWQgdGVzdF9kaWZmX3JlbmFtZV9fcmVqZWN0ZWRfbWF0Y2hfY2FuX21hdGNoX290aGVyc190aHJlZSh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmhlYWQsICpzZWxmc2ltaWxhcjsKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF90cmVlICp0cmVlOworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCWdpdF9kaWZmICpkaWZmOworCWdpdF9kaWZmX29wdGlvbnMgZGlmZm9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmZfZmluZF9vcHRpb25zIGZpbmRvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CisKKwkvKiBCb3RoIGNhbm5vdCBiZSByZW5hbWVzIGZyb20gYS50eHQgKi8KKwl1bnNpZ25lZCBpbnQgc3RhdHVzW10gPSB7IEdJVF9ERUxUQV9BRERFRCwgR0lUX0RFTFRBX1JFTkFNRUQgfTsKKwljb25zdCBjaGFyICpzb3VyY2VzW10gPSB7ICIwMDAxLnR4dCIsICJhLnR4dCIgfTsKKwljb25zdCBjaGFyICp0YXJnZXRzW10gPSB7ICIwMDAxLnR4dCIsICIwMDAyLnR4dCIgfTsKKwlzdHJ1Y3QgcmVuYW1lX2V4cGVjdGVkIGV4cGVjdCA9IHsgMiwgc3RhdHVzLCBzb3VyY2VzLCB0YXJnZXRzIH07CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJmhlYWQsIGdfcmVwbywgIkhFQUQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY19zZXRfdGFyZ2V0KAorCQkmc2VsZnNpbWlsYXIsIGhlYWQsICJyZWZzL2hlYWRzL3JlbmFtZXNfc2ltaWxhcl90d28iKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2hlYWQoZ19yZXBvLCAmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisKKwljbF9naXRfcGFzcyhwX3VubGluaygicmVuYW1lcy9hLnR4dCIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9yZW1vdmVfYnlwYXRoKGluZGV4LCAiYS50eHQiKSk7CisKKwl3cml0ZV9zaW1pbGFyaXR5X2ZpbGVfdHdvKCJyZW5hbWVzLzAwMDEudHh0IiwgNyk7CisJd3JpdGVfc2ltaWxhcml0eV9maWxlX3R3bygicmVuYW1lcy8wMDAyLnR4dCIsIDApOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICIwMDAxLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgIjAwMDIudHh0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X3JldnBhcnNlX3NpbmdsZSgoZ2l0X29iamVjdCAqKikmdHJlZSwgZ19yZXBvLCAiSEVBRF57dHJlZX0iKSk7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgZ19yZXBvLCB0cmVlLCBpbmRleCwgJmRpZmZvcHRzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9maW5kX3NpbWlsYXIoZGlmZiwgJmZpbmRvcHRzKSk7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2RpZmZfZm9yZWFjaChkaWZmLCB0ZXN0X25hbWVzX2V4cGVjdGVkLCBOVUxMLCBOVUxMLCAmZXhwZWN0KSk7CisKKwljbF9hc3NlcnQoZXhwZWN0LmlkeCA9PSBleHBlY3QubGVuKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCWdpdF9yZWZlcmVuY2VfZnJlZShzZWxmc2ltaWxhcik7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3JlbmFtZV9fY2FuX3JlbmFtZV9mcm9tX3Jld3JpdGUodm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF90cmVlICp0cmVlOworCWdpdF9kaWZmICpkaWZmOworCWdpdF9kaWZmX29wdGlvbnMgZGlmZm9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmZfZmluZF9vcHRpb25zIGZpbmRvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CisKKwl1bnNpZ25lZCBpbnQgc3RhdHVzW10gPSB7IEdJVF9ERUxUQV9SRU5BTUVELCBHSVRfREVMVEFfUkVOQU1FRCB9OworCWNvbnN0IGNoYXIgKnNvdXJjZXNbXSA9IHsgImlrZWVwc2l4LnR4dCIsICJzb25nb2Y3Y2l0aWVzLnR4dCIgfTsKKwljb25zdCBjaGFyICp0YXJnZXRzW10gPSB7ICJzb25nb2Y3Y2l0aWVzLnR4dCIsICJ0aGlzLWlzLWEtcmVuYW1lLnR4dCIgfTsKKwlzdHJ1Y3QgcmVuYW1lX2V4cGVjdGVkIGV4cGVjdCA9IHsgMiwgc3RhdHVzLCBzb3VyY2VzLCB0YXJnZXRzIH07CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJY2xfZ2l0X3Bhc3MocF9yZW5hbWUoInJlbmFtZXMvc29uZ29mN2NpdGllcy50eHQiLCAicmVuYW1lcy90aGlzLWlzLWEtcmVuYW1lLnR4dCIpKTsKKwljbF9naXRfcGFzcyhwX3JlbmFtZSgicmVuYW1lcy9pa2VlcHNpeC50eHQiLCAicmVuYW1lcy9zb25nb2Y3Y2l0aWVzLnR4dCIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9yZW1vdmVfYnlwYXRoKGluZGV4LCAiaWtlZXBzaXgudHh0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJzb25nb2Y3Y2l0aWVzLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInRoaXMtaXMtYS1yZW5hbWUudHh0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X3JldnBhcnNlX3NpbmdsZSgoZ2l0X29iamVjdCAqKikmdHJlZSwgZ19yZXBvLCAiSEVBRF57dHJlZX0iKSk7CisKKwljbF9naXRfcGFzcygKKwkJZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgZ19yZXBvLCB0cmVlLCBpbmRleCwgJmRpZmZvcHRzKSk7CisKKwlmaW5kb3B0cy5mbGFncyB8PSBHSVRfRElGRl9GSU5EX0FORF9CUkVBS19SRVdSSVRFUyB8CisJCUdJVF9ESUZGX0ZJTkRfUkVXUklURVMgfAorCQlHSVRfRElGRl9GSU5EX1JFTkFNRVNfRlJPTV9SRVdSSVRFUzsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZpbmRfc2ltaWxhcihkaWZmLCAmZmluZG9wdHMpKTsKKworCWNsX2dpdF9wYXNzKAorCQlnaXRfZGlmZl9mb3JlYWNoKGRpZmYsIHRlc3RfbmFtZXNfZXhwZWN0ZWQsIE5VTEwsIE5VTEwsICZleHBlY3QpKTsKKworCWNsX2Fzc2VydChleHBlY3QuaWR4ID09IGV4cGVjdC5sZW4pOworCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlnaXRfdHJlZV9mcmVlKHRyZWUpOworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KKwogdm9pZCB0ZXN0X2RpZmZfcmVuYW1lX19jYXNlX2NoYW5nZXNfYXJlX3NwbGl0KHZvaWQpCiB7CiAJZ2l0X2luZGV4ICppbmRleDsKIAlnaXRfdHJlZSAqdHJlZTsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJZGlmZl9leHBlY3RzIGV4cDsKIAlnaXRfZGlmZl9maW5kX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUOwogCkBAIC0xMDcwLDcgKzExODMsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9SRU5BTUVEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiAJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKIH0KQEAgLTEwNzksNyArMTE5Miw3IEBACiB7CiAJZ2l0X2luZGV4ICppbmRleDsKIAlnaXRfdHJlZSAqdHJlZTsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJZGlmZl9leHBlY3RzIGV4cDsKIAlnaXRfZGlmZl9vcHRpb25zIGRpZmZvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCWdpdF9kaWZmX2ZpbmRfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfRklORF9PUFRJT05TX0lOSVQ7CkBAIC0xMTE4LDcgKzEyMzEsNTYgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZXMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfUkVOQU1FRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogCWdpdF90cmVlX2ZyZWUodHJlZSk7CiB9CisKK3ZvaWQgdGVzdF9kaWZmX3JlbmFtZV9fcmV3cml0ZV9vbl9zaW5nbGVfZmlsZSh2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWRpZmZfZXhwZWN0cyBleHA7CisJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZl9maW5kX29wdGlvbnMgZmluZG9wdHMgPSBHSVRfRElGRl9GSU5EX09QVElPTlNfSU5JVDsKKworCWRpZmZvcHRzLmZsYWdzID0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7CisKKwlmaW5kb3B0cy5mbGFncyA9IEdJVF9ESUZGX0ZJTkRfRk9SX1VOVFJBQ0tFRCB8CisJCUdJVF9ESUZGX0ZJTkRfQU5EX0JSRUFLX1JFV1JJVEVTIHwKKwkJR0lUX0RJRkZfRklORF9SRU5BTUVTX0ZST01fUkVXUklURVM7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJyZW5hbWVzL2lrZWVwc2l4LnR4dCIsCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgaW5kZXgsICZkaWZmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZpbmRfc2ltaWxhcihkaWZmLCAmZmluZG9wdHMpKTsKKworCW1lbXNldCgmZXhwLCAwLCBzaXplb2YoZXhwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKAorCQlkaWZmLCBkaWZmX2ZpbGVfY2IsIGRpZmZfaHVua19jYiwgZGlmZl9saW5lX2NiLCAmZXhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0RFTEVURURdKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOworCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kaWZmL3N1Ym1vZHVsZXMuYyBiL3Rlc3RzL2RpZmYvc3VibW9kdWxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTQ1YjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kaWZmL3N1Ym1vZHVsZXMuYwpAQCAtMCwwICsxLDQyMyBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJwb3NpeC5oIgorI2luY2x1ZGUgIi4uL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7CisKK3ZvaWQgdGVzdF9kaWZmX3N1Ym1vZHVsZXNfX2luaXRpYWxpemUodm9pZCkKK3sKK30KKwordm9pZCB0ZXN0X2RpZmZfc3VibW9kdWxlc19fY2xlYW51cCh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBjaGVja19kaWZmX3BhdGNoZXNfYXRfbGluZSgKKwlnaXRfZGlmZiAqZGlmZiwgY29uc3QgY2hhciAqKmV4cGVjdGVkLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKwljb25zdCBnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CisJZ2l0X3BhdGNoICpwYXRjaCA9IE5VTEw7CisJc2l6ZV90IGQsIG51bV9kID0gZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKTsKKwljaGFyICpwYXRjaF90ZXh0OworCisJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QsIGdpdF9wYXRjaF9mcmVlKHBhdGNoKSkgeworCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgZCkpOworCQljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X3BhdGNoX2dldF9kZWx0YShwYXRjaCkpICE9IE5VTEwpOworCisJCWlmIChkZWx0YS0+c3RhdHVzID09IEdJVF9ERUxUQV9VTk1PRElGSUVEKSB7CisJCQljbF9hc3NlcnRfYXRfbGluZShleHBlY3RlZFtkXSA9PSBOVUxMLCBmaWxlLCBsaW5lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGV4cGVjdGVkW2RdICYmICFzdHJjbXAoZXhwZWN0ZWRbZF0sICI8U0tJUD4iKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZXhwZWN0ZWRbZF0gJiYgIXN0cmNtcChleHBlY3RlZFtkXSwgIjxFTkQ+IikpIHsKKwkJCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF90b19zdHIoJnBhdGNoX3RleHQsIHBhdGNoKSk7CisJCQljbF9hc3NlcnRfYXRfbGluZSghc3RyY21wKGV4cGVjdGVkW2RdLCAiPEVORD4iKSwgZmlsZSwgbGluZSk7CisJCX0KKworCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZwYXRjaF90ZXh0LCBwYXRjaCkpOworCisJCWNsYXJfX2Fzc2VydF9lcXVhbCgKKwkJCWZpbGUsIGxpbmUsICJleHBlY3RlZCBkaWZmIGRpZCBub3QgbWF0Y2ggYWN0dWFsIGRpZmYiLCAxLAorCQkJIiVzIiwgZXhwZWN0ZWRbZF0sIHBhdGNoX3RleHQpOworCQlnaXRfX2ZyZWUocGF0Y2hfdGV4dCk7CisJfQorCisJY2xfYXNzZXJ0X2F0X2xpbmUoZXhwZWN0ZWRbZF0gJiYgIXN0cmNtcChleHBlY3RlZFtkXSwgIjxFTkQ+IiksIGZpbGUsIGxpbmUpOworfQorCisjZGVmaW5lIGNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHApIFwKKwljaGVja19kaWZmX3BhdGNoZXNfYXRfbGluZShkaWZmLCBleHAsIF9fRklMRV9fLCBfX0xJTkVfXykKKwordm9pZCB0ZXN0X2RpZmZfc3VibW9kdWxlc19fdW5tb2RpZmllZF9zdWJtb2R1bGUodm9pZCkKK3sKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZFtdID0geworCQkiPFNLSVA+IiwgLyogLmdpdG1vZHVsZXMgKi8KKwkJTlVMTCwgLyogYWRkZWQgKi8KKwkJTlVMTCwgLyogaWdub3JlZCAqLworCQkiZGlmZiAtLWdpdCBhL21vZGlmaWVkIGIvbW9kaWZpZWRcbmluZGV4IDA5MmJmYjkuLjQ1MjIxNmUgMTAwNjQ0XG4tLS0gYS9tb2RpZmllZFxuKysrIGIvbW9kaWZpZWRcbkBAIC0xICsxLDIgQEBcbi15b1xuK2NoYW5nZWRcbitcbiIsIC8qIG1vZGlmaWVkICovCisJCU5VTEwsIC8qIHRlc3RyZXBvLmdpdCAqLworCQlOVUxMLCAvKiB1bm1vZGlmaWVkICovCisJCU5VTEwsIC8qIHVudHJhY2tlZCAqLworCQkiPEVORD4iCisJfTsKKworCWdfcmVwbyA9IHNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcygpOworCisJb3B0cy5mbGFncyA9IEdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRCB8CisJCUdJVF9ESUZGX0lOQ0xVREVfVU5UUkFDS0VEIHwKKwkJR0lUX0RJRkZfSU5DTFVERV9VTk1PRElGSUVEOworCW9wdHMub2xkX3ByZWZpeCA9ICJhIjsgb3B0cy5uZXdfcHJlZml4ID0gImIiOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfc3VibW9kdWxlc19fZGlydHlfc3VibW9kdWxlKHZvaWQpCit7CisJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKKwlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRbXSA9IHsKKwkJIjxTS0lQPiIsIC8qIC5naXRtb2R1bGVzICovCisJCU5VTEwsIC8qIGFkZGVkICovCisJCU5VTEwsIC8qIGlnbm9yZWQgKi8KKwkJImRpZmYgLS1naXQgYS9tb2RpZmllZCBiL21vZGlmaWVkXG5pbmRleCAwOTJiZmI5Li40NTIyMTZlIDEwMDY0NFxuLS0tIGEvbW9kaWZpZWRcbisrKyBiL21vZGlmaWVkXG5AQCAtMSArMSwyIEBAXG4teW9cbitjaGFuZ2VkXG4rXG4iLCAvKiBtb2RpZmllZCAqLworCQkiZGlmZiAtLWdpdCBhL3Rlc3RyZXBvIGIvdGVzdHJlcG9cbmluZGV4IGE2NWZlZGYuLmE2NWZlZGYgMTYwMDAwXG4tLS0gYS90ZXN0cmVwb1xuKysrIGIvdGVzdHJlcG9cbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MFxuK1N1YnByb2plY3QgY29tbWl0IGE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAtZGlydHlcbiIsIC8qIHRlc3RyZXBvLmdpdCAqLworCQlOVUxMLCAvKiB1bm1vZGlmaWVkICovCisJCU5VTEwsIC8qIHVudHJhY2tlZCAqLworCQkiPEVORD4iCisJfTsKKworCWdfcmVwbyA9IHNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcygpOworCisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJzdWJtb2R1bGVzL3Rlc3RyZXBvL1JFQURNRSIsICJoZXloZXloZXkiKTsKKwljbF9naXRfbWtmaWxlKCJzdWJtb2R1bGVzL3Rlc3RyZXBvL2FsbF9uZXcudHh0IiwgIm5ldmVyIHNlZW4gYmVmb3JlIik7CisKKwlvcHRzLmZsYWdzID0gR0lUX0RJRkZfSU5DTFVERV9JR05PUkVEIHwKKwkJR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQgfAorCQlHSVRfRElGRl9JTkNMVURFX1VOTU9ESUZJRUQ7CisJb3B0cy5vbGRfcHJlZml4ID0gImEiOyBvcHRzLm5ld19wcmVmaXggPSAiYiI7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworfQorCit2b2lkIHRlc3RfZGlmZl9zdWJtb2R1bGVzX19kaXJ0eV9zdWJtb2R1bGVfMih2b2lkKQoreworCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEwsICpkaWZmMiA9IE5VTEw7CisJY2hhciAqc21wYXRoID0gInRlc3RyZXBvIjsKKwlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfbm9uZVtdID0geyAiPEVORD4iIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RpcnR5W10gPSB7CisJCSJkaWZmIC0tZ2l0IGEvdGVzdHJlcG8gYi90ZXN0cmVwb1xuaW5kZXggYTY1ZmVkZi4uYTY1ZmVkZiAxNjAwMDBcbi0tLSBhL3Rlc3RyZXBvXG4rKysgYi90ZXN0cmVwb1xuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCBhNjVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwXG4rU3VicHJvamVjdCBjb21taXQgYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MC1kaXJ0eVxuIiwgLyogdGVzdHJlcG8uZ2l0ICovCisJCSI8RU5EPiIKKwl9OworCisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2R1bGVzKCk7CisKKwljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX3JlbG9hZF9hbGwoZ19yZXBvKSk7CisKKwlvcHRzLmZsYWdzID0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQgfAorCQlHSVRfRElGRl9TSE9XX1VOVFJBQ0tFRF9DT05URU5UIHwKKwkJR0lUX0RJRkZfUkVDVVJTRV9VTlRSQUNLRURfRElSUyB8CisJCUdJVF9ESUZGX0RJU0FCTEVfUEFUSFNQRUNfTUFUQ0g7CisJb3B0cy5vbGRfcHJlZml4ID0gImEiOyBvcHRzLm5ld19wcmVmaXggPSAiYiI7CisJb3B0cy5wYXRoc3BlYy5jb3VudCA9IDE7CisJb3B0cy5wYXRoc3BlYy5zdHJpbmdzID0gJnNtcGF0aDsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfbm9uZSk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWNsX2dpdF9yZXdyaXRlZmlsZSgic3VibW9kdWxlcy90ZXN0cmVwby9SRUFETUUiLCAiaGV5aGV5aGV5Iik7CisJY2xfZ2l0X21rZmlsZSgic3VibW9kdWxlcy90ZXN0cmVwby9hbGxfbmV3LnR4dCIsICJuZXZlciBzZWVuIGJlZm9yZSIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF9kaXJ0eSk7CisKKwl7CisJCWdpdF90cmVlICpoZWFkOworCisJCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWRfdHJlZSgmaGVhZCwgZ19yZXBvKSk7CisJCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9faW5kZXgoJmRpZmYyLCBnX3JlcG8sIGhlYWQsIE5VTEwsICZvcHRzKSk7CisJCWNsX2dpdF9wYXNzKGdpdF9kaWZmX21lcmdlKGRpZmYsIGRpZmYyKSk7CisJCWdpdF9kaWZmX2ZyZWUoZGlmZjIpOworCQlnaXRfdHJlZV9mcmVlKGhlYWQpOworCisJCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF9kaXJ0eSk7CisJfQorCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfcmVsb2FkX2FsbChnX3JlcG8pKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfZGlydHkpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3N1Ym1vZHVsZXNfX3N1Ym1vZDJfaW5kZXhfdG9fd2Qodm9pZCkKK3sKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZFtdID0geworCQkiPFNLSVA+IiwgLyogLmdpdG1vZHVsZXMgKi8KKwkJImRpZmYgLS1naXQgYS9zbV9jaGFuZ2VkX2ZpbGUgYi9zbV9jaGFuZ2VkX2ZpbGVcbmluZGV4IDQ4MDA5NTguLjQ4MDA5NTggMTYwMDAwXG4tLS0gYS9zbV9jaGFuZ2VkX2ZpbGVcbisrKyBiL3NtX2NoYW5nZWRfZmlsZVxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMC1kaXJ0eVxuIiwgLyogc21fY2hhbmdlZF9maWxlICovCisJCSJkaWZmIC0tZ2l0IGEvc21fY2hhbmdlZF9oZWFkIGIvc21fY2hhbmdlZF9oZWFkXG5pbmRleCA0ODAwOTU4Li4zZDkzODZjIDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF9oZWFkXG4rKysgYi9zbV9jaGFuZ2VkX2hlYWRcbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMFxuK1N1YnByb2plY3QgY29tbWl0IDNkOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDdcbiIsIC8qIHNtX2NoYW5nZWRfaGVhZCAqLworCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfaW5kZXggYi9zbV9jaGFuZ2VkX2luZGV4XG5pbmRleCA0ODAwOTU4Li40ODAwOTU4IDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF9pbmRleFxuKysrIGIvc21fY2hhbmdlZF9pbmRleFxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMC1kaXJ0eVxuIiwgLyogc21fY2hhbmdlZF9pbmRleCAqLworCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUgYi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlXG5pbmRleCA0ODAwOTU4Li40ODAwOTU4IDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZVxuKysrIGIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZVxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMC1kaXJ0eVxuIiwgLyogc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZSAqLworCQkiZGlmZiAtLWdpdCBhL3NtX21pc3NpbmdfY29tbWl0cyBiL3NtX21pc3NpbmdfY29tbWl0c1xuaW5kZXggNDgwMDk1OC4uNWU0OTYzNSAxNjAwMDBcbi0tLSBhL3NtX21pc3NpbmdfY29tbWl0c1xuKysrIGIvc21fbWlzc2luZ19jb21taXRzXG5AQCAtMSArMSBAQFxuLVN1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbitTdWJwcm9qZWN0IGNvbW1pdCA1ZTQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkXG4iLCAvKiBzbV9taXNzaW5nX2NvbW1pdHMgKi8KKwkJIjxFTkQ+IgorCX07CisKKwlnX3JlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKKworCW9wdHMuZmxhZ3MgPSBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRDsKKwlvcHRzLm9sZF9wcmVmaXggPSAiYSI7IG9wdHMubmV3X3ByZWZpeCA9ICJiIjsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWQpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3N1Ym1vZHVsZXNfX3N1Ym1vZDJfaGVhZF90b19pbmRleCh2b2lkKQoreworCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfdHJlZSAqaGVhZDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CisJc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkW10gPSB7CisJCSI8U0tJUD4iLCAvKiAuZ2l0bW9kdWxlcyAqLworCQkiZGlmZiAtLWdpdCBhL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkIGIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWRcbm5ldyBmaWxlIG1vZGUgMTYwMDAwXG5pbmRleCAwMDAwMDAwLi40ODAwOTU4XG4tLS0gL2Rldi9udWxsXG4rKysgYi9zbV9hZGRlZF9hbmRfdW5jb21taXRlZFxuQEAgLTAsMCArMSBAQFxuK1N1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbiIsIC8qIHNtX2FkZGVkX2FuZF91bmNvbW1pdGVkICovCisJCSI8RU5EPiIKKwl9OworCisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2QyKCk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJmhlYWQsIGdfcmVwbykpOworCisJb3B0cy5mbGFncyA9IEdJVF9ESUZGX0lOQ0xVREVfVU5UUkFDS0VEOworCW9wdHMub2xkX3ByZWZpeCA9ICJhIjsgb3B0cy5uZXdfcHJlZml4ID0gImIiOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgZ19yZXBvLCBoZWFkLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWdpdF90cmVlX2ZyZWUoaGVhZCk7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3N1Ym1vZHVsZXNfX2ludmFsaWRfY2FjaGUodm9pZCkKK3sKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWdpdF9zdWJtb2R1bGUgKnNtOworCWNoYXIgKnNtcGF0aCA9ICJzbV9jaGFuZ2VkX2hlYWQiOworCWdpdF9yZXBvc2l0b3J5ICpzbXJlcG87CisJZ2l0X2luZGV4ICpzbWluZGV4OworCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9iYXNlbGluZVtdID0geworCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfaGVhZCBiL3NtX2NoYW5nZWRfaGVhZFxuaW5kZXggNDgwMDk1OC4uM2Q5Mzg2YyAxNjAwMDBcbi0tLSBhL3NtX2NoYW5nZWRfaGVhZFxuKysrIGIvc21fY2hhbmdlZF9oZWFkXG5AQCAtMSArMSBAQFxuLVN1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbitTdWJwcm9qZWN0IGNvbW1pdCAzZDkzODZjNTA3ZjZiMDkzNDcxYTNlMzI0MDg1NjU3YTNjMmI0MjQ3XG4iLCAvKiBzbV9jaGFuZ2VkX2hlYWQgKi8KKwkJIjxFTkQ+IgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3VuY2hhbmdlZFtdID0geyAiPEVORD4iIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2RpcnR5W10gPSB7CisJCSJkaWZmIC0tZ2l0IGEvc21fY2hhbmdlZF9oZWFkIGIvc21fY2hhbmdlZF9oZWFkXG5pbmRleCAzZDkzODZjLi4zZDkzODZjIDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF9oZWFkXG4rKysgYi9zbV9jaGFuZ2VkX2hlYWRcbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgM2Q5Mzg2YzUwN2Y2YjA5MzQ3MWEzZTMyNDA4NTY1N2EzYzJiNDI0N1xuK1N1YnByb2plY3QgY29tbWl0IDNkOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDctZGlydHlcbiIsCisJCSI8RU5EPiIKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9tb3ZlZFtdID0geworCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfaGVhZCBiL3NtX2NoYW5nZWRfaGVhZFxuaW5kZXggM2Q5Mzg2Yy4uNzAwMjM0OCAxNjAwMDBcbi0tLSBhL3NtX2NoYW5nZWRfaGVhZFxuKysrIGIvc21fY2hhbmdlZF9oZWFkXG5AQCAtMSArMSBAQFxuLVN1YnByb2plY3QgY29tbWl0IDNkOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDdcbitTdWJwcm9qZWN0IGNvbW1pdCA3MDAyMzQ4MzNmNmNjYzIwZDc0NGIyMzg2MTI2NDZiZTA3MWFjYWFlXG4iLAorCQkiPEVORD4iCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfbW92ZWRfZGlydHlbXSA9IHsKKwkJImRpZmYgLS1naXQgYS9zbV9jaGFuZ2VkX2hlYWQgYi9zbV9jaGFuZ2VkX2hlYWRcbmluZGV4IDNkOTM4NmMuLjcwMDIzNDggMTYwMDAwXG4tLS0gYS9zbV9jaGFuZ2VkX2hlYWRcbisrKyBiL3NtX2NoYW5nZWRfaGVhZFxuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCAzZDkzODZjNTA3ZjZiMDkzNDcxYTNlMzI0MDg1NjU3YTNjMmI0MjQ3XG4rU3VicHJvamVjdCBjb21taXQgNzAwMjM0ODMzZjZjY2MyMGQ3NDRiMjM4NjEyNjQ2YmUwNzFhY2FhZS1kaXJ0eVxuIiwKKwkJIjxFTkQ+IgorCX07CisKKwlnX3JlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKKworCW9wdHMuZmxhZ3MgPSBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRDsKKwlvcHRzLm9sZF9wcmVmaXggPSAiYSI7IG9wdHMubmV3X3ByZWZpeCA9ICJiIjsKKwlvcHRzLnBhdGhzcGVjLmNvdW50ID0gMTsKKwlvcHRzLnBhdGhzcGVjLnN0cmluZ3MgPSAmc21wYXRoOworCisJLyogYmFzZWxpbmUgKi8KKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX2Jhc2VsaW5lKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogdXBkYXRlIGluZGV4IHdpdGggbmV3IEhFQUQgKi8KKwljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgc21wYXRoKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9hZGRfdG9faW5kZXgoc20sIDEpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfdW5jaGFuZ2VkKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogY3JlYXRlIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZSB3b3JraW5nIGRpcmVjdG9yeSAqLworCWNsX2dpdF9ta2ZpbGUoInN1Ym1vZDIvc21fY2hhbmdlZF9oZWFkL25ld19hcm91bmRfaGVyZSIsICJoZWxsbyIpOworCWdpdF9zdWJtb2R1bGVfc2V0X2lnbm9yZShzbSwgR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX2RpcnR5KTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJZ2l0X3N1Ym1vZHVsZV9zZXRfaWdub3JlKHNtLCBHSVRfU1VCTU9EVUxFX0lHTk9SRV9VTlRSQUNLRUQpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF91bmNoYW5nZWQpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwkvKiBtb2RpZnkgdHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZSB3b3JraW5nIGRpcmVjdG9yeSAqLworCWNsX2dpdF9hcHBlbmQyZmlsZSgKKwkJInN1Ym1vZDIvc21fY2hhbmdlZF9oZWFkL2ZpbGVfdG9fbW9kaWZ5IiwgIlxubW9yZSBzdHVmZlxuIik7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX2RpcnR5KTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9yZWxvYWRfYWxsKGdfcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCBzbXBhdGgpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfZGlydHkpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoc20sIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RJUlRZKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfdW5jaGFuZ2VkKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogYWRkIGZpbGUgdG8gaW5kZXggaW4gc3VibW9kdWxlICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9vcGVuKCZzbXJlcG8sIHNtKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJnNtaW5kZXgsIHNtcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKHNtaW5kZXgsICJmaWxlX3RvX21vZGlmeSIpKTsKKworCWdpdF9zdWJtb2R1bGVfc2V0X2lnbm9yZShzbSwgR0lUX1NVQk1PRFVMRV9JR05PUkVfVU5UUkFDS0VEKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfZGlydHkpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoc20sIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RJUlRZKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfdW5jaGFuZ2VkKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogY29tbWl0IGNoYW5nZWQgaW5kZXggb2Ygc3VibW9kdWxlICovCisJY2xfcmVwb19jb21taXRfZnJvbV9pbmRleChOVUxMLCBzbXJlcG8sIE5VTEwsIDEzNzIzNTAwMDAsICJNb3ZlIGl0Iik7CisKKwlnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoc20sIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RJUlRZKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfbW92ZWQpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoc20sIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0FMTCk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX3VuY2hhbmdlZCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWdpdF9zdWJtb2R1bGVfc2V0X2lnbm9yZShzbSwgR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX21vdmVkX2RpcnR5KTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJcF91bmxpbmsoInN1Ym1vZDIvc21fY2hhbmdlZF9oZWFkL25ld19hcm91bmRfaGVyZSIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF9tb3ZlZCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWdpdF9pbmRleF9mcmVlKHNtaW5kZXgpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUoc21yZXBvKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfc3VibW9kdWxlc19fZGlmZl9pZ25vcmVfb3B0aW9ucyh2b2lkKQoreworCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CisJZ2l0X2NvbmZpZyAqY2ZnOworCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9ub3JtYWxbXSA9IHsKKwkJIjxTS0lQPiIsIC8qIC5naXRtb2R1bGVzICovCisJCSJkaWZmIC0tZ2l0IGEvc21fY2hhbmdlZF9maWxlIGIvc21fY2hhbmdlZF9maWxlXG5pbmRleCA0ODAwOTU4Li40ODAwOTU4IDE2MDAwMFxuLS0tIGEvc21fY2hhbmdlZF9maWxlXG4rKysgYi9zbV9jaGFuZ2VkX2ZpbGVcbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMFxuK1N1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAtZGlydHlcbiIsIC8qIHNtX2NoYW5nZWRfZmlsZSAqLworCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfaGVhZCBiL3NtX2NoYW5nZWRfaGVhZFxuaW5kZXggNDgwMDk1OC4uM2Q5Mzg2YyAxNjAwMDBcbi0tLSBhL3NtX2NoYW5nZWRfaGVhZFxuKysrIGIvc21fY2hhbmdlZF9oZWFkXG5AQCAtMSArMSBAQFxuLVN1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbitTdWJwcm9qZWN0IGNvbW1pdCAzZDkzODZjNTA3ZjZiMDkzNDcxYTNlMzI0MDg1NjU3YTNjMmI0MjQ3XG4iLCAvKiBzbV9jaGFuZ2VkX2hlYWQgKi8KKwkJImRpZmYgLS1naXQgYS9zbV9jaGFuZ2VkX2luZGV4IGIvc21fY2hhbmdlZF9pbmRleFxuaW5kZXggNDgwMDk1OC4uNDgwMDk1OCAxNjAwMDBcbi0tLSBhL3NtX2NoYW5nZWRfaW5kZXhcbisrKyBiL3NtX2NoYW5nZWRfaW5kZXhcbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMFxuK1N1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAtZGlydHlcbiIsIC8qIHNtX2NoYW5nZWRfaW5kZXggKi8KKwkJImRpZmYgLS1naXQgYS9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlIGIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZVxuaW5kZXggNDgwMDk1OC4uNDgwMDk1OCAxNjAwMDBcbi0tLSBhL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGVcbisrKyBiL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGVcbkBAIC0xICsxIEBAXG4tU3VicHJvamVjdCBjb21taXQgNDgwMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMFxuK1N1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAtZGlydHlcbiIsIC8qIHNtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUgKi8KKwkJImRpZmYgLS1naXQgYS9zbV9taXNzaW5nX2NvbW1pdHMgYi9zbV9taXNzaW5nX2NvbW1pdHNcbmluZGV4IDQ4MDA5NTguLjVlNDk2MzUgMTYwMDAwXG4tLS0gYS9zbV9taXNzaW5nX2NvbW1pdHNcbisrKyBiL3NtX21pc3NpbmdfY29tbWl0c1xuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNWU0OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZFxuIiwgLyogc21fbWlzc2luZ19jb21taXRzICovCisJCSI8RU5EPiIKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9pZ25vcmVfYWxsW10gPSB7CisJCSI8U0tJUD4iLCAvKiAuZ2l0bW9kdWxlcyAqLworCQkiPEVORD4iCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfaWdub3JlX2RpcnR5W10gPSB7CisJCSI8U0tJUD4iLCAvKiAuZ2l0bW9kdWxlcyAqLworCQkiZGlmZiAtLWdpdCBhL3NtX2NoYW5nZWRfaGVhZCBiL3NtX2NoYW5nZWRfaGVhZFxuaW5kZXggNDgwMDk1OC4uM2Q5Mzg2YyAxNjAwMDBcbi0tLSBhL3NtX2NoYW5nZWRfaGVhZFxuKysrIGIvc21fY2hhbmdlZF9oZWFkXG5AQCAtMSArMSBAQFxuLVN1YnByb2plY3QgY29tbWl0IDQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzBcbitTdWJwcm9qZWN0IGNvbW1pdCAzZDkzODZjNTA3ZjZiMDkzNDcxYTNlMzI0MDg1NjU3YTNjMmI0MjQ3XG4iLCAvKiBzbV9jaGFuZ2VkX2hlYWQgKi8KKwkJImRpZmYgLS1naXQgYS9zbV9taXNzaW5nX2NvbW1pdHMgYi9zbV9taXNzaW5nX2NvbW1pdHNcbmluZGV4IDQ4MDA5NTguLjVlNDk2MzUgMTYwMDAwXG4tLS0gYS9zbV9taXNzaW5nX2NvbW1pdHNcbisrKyBiL3NtX21pc3NpbmdfY29tbWl0c1xuQEAgLTEgKzEgQEBcbi1TdWJwcm9qZWN0IGNvbW1pdCA0ODAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwXG4rU3VicHJvamVjdCBjb21taXQgNWU0OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZFxuIiwgLyogc21fbWlzc2luZ19jb21taXRzICovCisJCSI8RU5EPiIKKwl9OworCisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2QyKCk7CisKKwlvcHRzLmZsYWdzID0gR0lUX0RJRkZfSU5DTFVERV9VTlRSQUNLRUQ7CisJb3B0cy5vbGRfcHJlZml4ID0gImEiOyBvcHRzLm5ld19wcmVmaXggPSAiYiI7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX25vcm1hbCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCW9wdHMuZmxhZ3MgfD0gR0lUX0RJRkZfSUdOT1JFX1NVQk1PRFVMRVM7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2hlY2tfZGlmZl9wYXRjaGVzKGRpZmYsIGV4cGVjdGVkX2lnbm9yZV9hbGwpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlvcHRzLmZsYWdzICY9IH5HSVRfRElGRl9JR05PUkVfU1VCTU9EVUxFUzsKKwlvcHRzLmlnbm9yZV9zdWJtb2R1bGVzID0gR0lUX1NVQk1PRFVMRV9JR05PUkVfQUxMOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF9pZ25vcmVfYWxsKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJb3B0cy5pZ25vcmVfc3VibW9kdWxlcyA9IEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RJUlRZOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF9pZ25vcmVfZGlydHkpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlvcHRzLmlnbm9yZV9zdWJtb2R1bGVzID0gMDsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNmZywgZ19yZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfYm9vbChjZmcsICJkaWZmLmlnbm9yZVN1Ym1vZHVsZXMiLCBmYWxzZSkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNoZWNrX2RpZmZfcGF0Y2hlcyhkaWZmLCBleHBlY3RlZF9ub3JtYWwpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9ib29sKGNmZywgImRpZmYuaWdub3JlU3VibW9kdWxlcyIsIHRydWUpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfaWdub3JlX2FsbCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJkaWZmLmlnbm9yZVN1Ym1vZHVsZXMiLCAibm9uZSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfbm9ybWFsKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNmZywgImRpZmYuaWdub3JlU3VibW9kdWxlcyIsICJkaXJ0eSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwljaGVja19kaWZmX3BhdGNoZXMoZGlmZiwgZXhwZWN0ZWRfaWdub3JlX2RpcnR5KTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2RpZmYvdHJlZS5jIGIvdGVzdHMvZGlmZi90cmVlLmMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9kaWZmL3RyZWUuYwpyZW5hbWUgdG8gdGVzdHMvZGlmZi90cmVlLmMKaW5kZXggZjA1Yzc4Ni4uNTgyMTc0YiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9kaWZmL3RyZWUuYworKysgYi90ZXN0cy9kaWZmL3RyZWUuYwpAQCAtMywxNSArMywxMyBAQAogCiBzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7CiBzdGF0aWMgZ2l0X2RpZmZfb3B0aW9ucyBvcHRzOwotc3RhdGljIGdpdF9kaWZmX2xpc3QgKmRpZmY7CitzdGF0aWMgZ2l0X2RpZmYgKmRpZmY7CiBzdGF0aWMgZ2l0X3RyZWUgKmEsICpiOwogc3RhdGljIGRpZmZfZXhwZWN0cyBleHBlY3Q7CiAKIHZvaWQgdGVzdF9kaWZmX3RyZWVfX2luaXRpYWxpemUodm9pZCkKIHsKLQlHSVRfSU5JVF9TVFJVQ1RVUkUoJm9wdHMsIEdJVF9ESUZGX09QVElPTlNfVkVSU0lPTik7Ci0JLyogVGhlIGRlZmF1bHQgY29udGV4dCBsaW5lcyBpcyBzZXQgYnkgX0lOSVQgd2hpY2ggd2UgY2FuJ3QgdXNlIGhlcmUgKi8KLQlvcHRzLmNvbnRleHRfbGluZXMgPSAzOworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX29wdGlvbnNfaW5pdCgmb3B0cywgR0lUX0RJRkZfT1BUSU9OU19WRVJTSU9OKSk7CiAKIAltZW1zZXQoJmV4cGVjdCwgMCwgc2l6ZW9mKGV4cGVjdCkpOwogCkBAIC0yMiw3ICsyMCw3IEBACiAKIHZvaWQgdGVzdF9kaWZmX3RyZWVfX2NsZWFudXAodm9pZCkKIHsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlnaXRfdHJlZV9mcmVlKGEpOwogCWdpdF90cmVlX2ZyZWUoYik7CiAKQEAgLTY1LDcgKzYzLDcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgyNCArIDEgKyA1ICsgNSwgZXhwZWN0LmxpbmVfYWRkcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koNyArIDEsIGV4cGVjdC5saW5lX2RlbHMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZGlmZiA9IE5VTEw7CiAKIAltZW1zZXQoJmV4cGVjdCwgMCwgc2l6ZW9mKGV4cGVjdCkpOwpAQCAtOTAsNiArODgsMTAgQEAKIAlnaXRfdHJlZV9mcmVlKGMpOwogfQogCisjZGVmaW5lIERJRkZfT1BUUyhGTEFHUywgQ1RYVCkgXAorCXtHSVRfRElGRl9PUFRJT05TX1ZFUlNJT04sIChGTEFHUyksIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RFRkFVTFQsIFwKKwl7TlVMTCwwfSwgTlVMTCwgTlVMTCwgKENUWFQpLCAxfQorCiB2b2lkIHRlc3RfZGlmZl90cmVlX19vcHRpb25zKHZvaWQpCiB7CiAJLyogZ3JhYmJlZCBhIGNvdXBsZSBvZiBjb21taXQgb2lkcyBmcm9tIHRoZSBoaXN0b3J5IG9mIHRoZSBhdHRyIHJlcG8gKi8KQEAgLTEwMiwxNiArMTA0LDE2IEBACiAJaW50IHRlc3RfYWJfb3JfY2RbXSA9IHsgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSB9OwogCWdpdF9kaWZmX29wdGlvbnMgdGVzdF9vcHRpb25zW10gPSB7CiAJCS8qIGEgdnMgYiB0ZXN0cyAqLwotCQl7IDEsIEdJVF9ESUZGX05PUk1BTCwgMSwgMSwgTlVMTCwgTlVMTCwgezB9IH0sCi0JCXsgMSwgR0lUX0RJRkZfTk9STUFMLCAzLCAxLCBOVUxMLCBOVUxMLCB7MH0gfSwKLQkJeyAxLCBHSVRfRElGRl9SRVZFUlNFLCAyLCAxLCBOVUxMLCBOVUxMLCB7MH0gfSwKLQkJeyAxLCBHSVRfRElGRl9GT1JDRV9URVhULCAyLCAxLCBOVUxMLCBOVUxMLCB7MH0gfSwKKwkJRElGRl9PUFRTKEdJVF9ESUZGX05PUk1BTCwgMSksCisJCURJRkZfT1BUUyhHSVRfRElGRl9OT1JNQUwsIDMpLAorCQlESUZGX09QVFMoR0lUX0RJRkZfUkVWRVJTRSwgMiksCisJCURJRkZfT1BUUyhHSVRfRElGRl9GT1JDRV9URVhULCAyKSwKIAkJLyogYyB2cyBkIHRlc3RzICovCi0JCXsgMSwgR0lUX0RJRkZfTk9STUFMLCAzLCAxLCBOVUxMLCBOVUxMLCB7MH0gfSwKLQkJeyAxLCBHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRSwgMywgMSwgTlVMTCwgTlVMTCwgezB9IH0sCi0JCXsgMSwgR0lUX0RJRkZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFLCAzLCAxLCBOVUxMLCBOVUxMLCB7MH0gfSwKLQkJeyAxLCBHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRV9FT0wsIDMsIDEsIE5VTEwsIE5VTEwsIHswfSB9LAotCQl7IDEsIEdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFIHwgR0lUX0RJRkZfUkVWRVJTRSwgMSwgMSwgTlVMTCwgTlVMTCwgezB9IH0sCisJCURJRkZfT1BUUyhHSVRfRElGRl9OT1JNQUwsIDMpLAorCQlESUZGX09QVFMoR0lUX0RJRkZfSUdOT1JFX1dISVRFU1BBQ0UsIDMpLAorCQlESUZGX09QVFMoR0lUX0RJRkZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFLCAzKSwKKwkJRElGRl9PUFRTKEdJVF9ESUZGX0lHTk9SRV9XSElURVNQQUNFX0VPTCwgMyksCisJCURJRkZfT1BUUyhHSVRfRElGRl9JR05PUkVfV0hJVEVTUEFDRSB8IEdJVF9ESUZGX1JFVkVSU0UsIDEpLAogCX07CiAKIAkvKiB0byBnZW5lcmF0ZSB0aGVzZSB2YWx1ZXM6CkBAIC0xNjgsNyArMTcwLDcgQEAKIAkJY2xfYXNzZXJ0X2VxdWFsX2koYWN0dWFsLmxpbmVfYWRkcywgZXhwZWN0ZWQtPmxpbmVfYWRkcyk7CiAJCWNsX2Fzc2VydF9lcXVhbF9pKGFjdHVhbC5saW5lX2RlbHMsIGV4cGVjdGVkLT5saW5lX2RlbHMpOwogCi0JCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwkJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAkJZGlmZiA9IE5VTEw7CiAJfQogCkBAIC0yMTQsNyArMjE2LDcgQEAKIAljb25zdCBjaGFyICpiX2NvbW1pdCA9ICIzNzBmZTllYzIyIjsKIAljb25zdCBjaGFyICpjX2NvbW1pdCA9ICJmNWIwYWYxZmI0ZjVjIjsKIAlnaXRfdHJlZSAqYzsKLQlnaXRfZGlmZl9saXN0ICpkaWZmMSA9IE5VTEwsICpkaWZmMiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYxID0gTlVMTCwgKmRpZmYyID0gTlVMTDsKIAogCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImF0dHIiKTsKIApAQCAtMjMwLDcgKzIzMiw3IEBACiAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl9tZXJnZShkaWZmMSwgZGlmZjIpKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmMik7CisJZ2l0X2RpZmZfZnJlZShkaWZmMik7CiAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKAogCQlkaWZmMSwgZGlmZl9maWxlX2NiLCBkaWZmX2h1bmtfY2IsIGRpZmZfbGluZV9jYiwgJmV4cGVjdCkpOwpAQCAtMjQ3LDE5ICsyNDksMTcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgzNiwgZXhwZWN0LmxpbmVfYWRkcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMjIsIGV4cGVjdC5saW5lX2RlbHMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYxKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYxKTsKIH0KIAogdm9pZCB0ZXN0X2RpZmZfdHJlZV9fbGFyZ2VyX2h1bmtzKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqYV9jb21taXQgPSAiZDcwZDI0NWVkOTdlZDJhYTU5NmRkMWFmNjUzNmU0YmZkYjA0N2I2OSI7CiAJY29uc3QgY2hhciAqYl9jb21taXQgPSAiN2E5ZTBiMDJlNjMxNzk5MjlmZWQyNGYwYTNlMGYxOTE2ODExNGQxMCI7Ci0Jc2l6ZV90IGQsIG51bV9kLCBoLCBudW1faCwgbCwgbnVtX2wsIGhlYWRlcl9sZW4sIGxpbmVfbGVuOwotCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKLQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7Ci0JY29uc3QgZ2l0X2RpZmZfcmFuZ2UgKnJhbmdlOwotCWNvbnN0IGNoYXIgKmhlYWRlciwgKmxpbmU7Ci0JY2hhciBvcmlnaW47CisJc2l6ZV90IGQsIG51bV9kLCBoLCBudW1faCwgbCwgbnVtX2w7CisJZ2l0X3BhdGNoICpwYXRjaDsKKwljb25zdCBnaXRfZGlmZl9odW5rICpodW5rOworCWNvbnN0IGdpdF9kaWZmX2xpbmUgKmxpbmU7CiAKIAlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJkaWZmIik7CiAKQEAgLTI3MywzMSArMjczLDI3IEBACiAKIAludW1fZCA9IGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZik7CiAJZm9yIChkID0gMDsgZCA8IG51bV9kOyArK2QpIHsKLQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZ2V0X3BhdGNoKCZwYXRjaCwgJmRlbHRhLCBkaWZmLCBkKSk7Ci0JCWNsX2Fzc2VydChwYXRjaCAmJiBkZWx0YSk7CisJCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCBkKSk7CisJCWNsX2Fzc2VydChwYXRjaCk7CiAKLQkJbnVtX2ggPSBnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocGF0Y2gpOworCQludW1faCA9IGdpdF9wYXRjaF9udW1faHVua3MocGF0Y2gpOwogCQlmb3IgKGggPSAwOyBoIDwgbnVtX2g7IGgrKykgewotCQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2h1bmsoCi0JCQkJJnJhbmdlLCAmaGVhZGVyLCAmaGVhZGVyX2xlbiwgJm51bV9sLCBwYXRjaCwgaCkpOworCQkJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2dldF9odW5rKCZodW5rLCAmbnVtX2wsIHBhdGNoLCBoKSk7CiAKIAkJCWZvciAobCA9IDA7IGwgPCBudW1fbDsgKytsKSB7Ci0JCQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygKLQkJCQkJJm9yaWdpbiwgJmxpbmUsICZsaW5lX2xlbiwgTlVMTCwgTlVMTCwgcGF0Y2gsIGgsIGwpKTsKKwkJCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcGF0Y2gsIGgsIGwpKTsKIAkJCQljbF9hc3NlcnQobGluZSk7CiAJCQl9CiAKLQkJCWNsX2dpdF9mYWlsKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCQkJJm9yaWdpbiwgJmxpbmUsICZsaW5lX2xlbiwgTlVMTCwgTlVMTCwgcGF0Y2gsIGgsIG51bV9sKSk7CisJCQljbF9naXRfZmFpbChnaXRfcGF0Y2hfZ2V0X2xpbmVfaW5faHVuaygmbGluZSwgcGF0Y2gsIGgsIG51bV9sKSk7CiAJCX0KIAotCQljbF9naXRfZmFpbChnaXRfZGlmZl9wYXRjaF9nZXRfaHVuaygKLQkJCSZyYW5nZSwgJmhlYWRlciwgJmhlYWRlcl9sZW4sICZudW1fbCwgcGF0Y2gsIG51bV9oKSk7CisJCWNsX2dpdF9mYWlsKGdpdF9wYXRjaF9nZXRfaHVuaygmaHVuaywgJm51bV9sLCBwYXRjaCwgbnVtX2gpKTsKIAotCQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKKwkJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOwogCX0KIAotCWNsX2dpdF9mYWlsKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsICZkZWx0YSwgZGlmZiwgbnVtX2QpKTsKKwljbF9naXRfZmFpbChnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgbnVtX2QpKTsKIAogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIChpbnQpbnVtX2QpOwogfQpAQCAtNDg3LDcgKzQ4Myw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koNywgZXhwZWN0LmxpbmVfYWRkcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMTUsIGV4cGVjdC5saW5lX2RlbHMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZGlmZiA9IE5VTEw7CiAKIAlzZXRfY29uZmlnX2ludChnX3JlcG8sICJkaWZmLmNvbnRleHQiLCAxKTsKQEAgLTUwNyw3ICs1MDMsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDcsIGV4cGVjdC5saW5lX2FkZHMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDE1LCBleHBlY3QubGluZV9kZWxzKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCWRpZmYgPSBOVUxMOwogCiAJc2V0X2NvbmZpZ19pbnQoZ19yZXBvLCAiZGlmZi5jb250ZXh0IiwgMCk7CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2RpZmYvd29ya2Rpci5jIGIvdGVzdHMvZGlmZi93b3JrZGlyLmMKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9kaWZmL3dvcmtkaXIuYwpyZW5hbWUgdG8gdGVzdHMvZGlmZi93b3JrZGlyLmMKaW5kZXggNmEyNTA0ZC4uN2NjMDMyMiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9kaWZmL3dvcmtkaXIuYworKysgYi90ZXN0cy9kaWZmL3dvcmtkaXIuYwpAQCAtMTYsNyArMTYsNyBAQAogdm9pZCB0ZXN0X2RpZmZfd29ya2Rpcl9fdG9faW5kZXgodm9pZCkKIHsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAJaW50IHVzZV9pdGVyYXRvcjsKIApAQCAtNjAsNyArNjAsNjEgQEAKIAkJY2xfYXNzZXJ0X2VxdWFsX2koNSwgZXhwLmxpbmVfZGVscyk7CiAJfQogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX3RvX2luZGV4X3dpdGhfYXNzdW1lX3VuY2hhbmdlZCh2b2lkKQoreworCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CisJZ2l0X2luZGV4ICppZHggPSBOVUxMOworCWRpZmZfZXhwZWN0cyBleHA7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICppZXA7CisJZ2l0X2luZGV4X2VudHJ5IGllOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3RhdHVzIik7CisKKwkvKiBkbyBpbml0aWFsIGRpZmYgKi8KKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKKwltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZvcmVhY2goCisJCWRpZmYsIGRpZmZfZmlsZV9jYiwgZGlmZl9odW5rX2NiLCBkaWZmX2xpbmVfY2IsICZleHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg4LCBleHAuZmlsZXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfQURERURdKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg0LCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0RFTEVURURdKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg0LCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX01PRElGSUVEXSk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCS8qIG1hcmsgYSBjb3VwbGUgb2YgZW50cmllcyB3aXRoIEFTU1VNRV9VTkNIQU5HRUQgKi8KKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpZHgsIGdfcmVwbykpOworCisJY2xfYXNzZXJ0KChpZXAgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpZHgsICJtb2RpZmllZF9maWxlIiwgMCkpICE9IE5VTEwpOworCW1lbWNweSgmaWUsIGllcCwgc2l6ZW9mKGllKSk7CisJaWUuZmxhZ3MgfD0gR0lUX0lEWEVOVFJZX1ZBTElEOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGQoaWR4LCAmaWUpKTsKKworCWNsX2Fzc2VydCgoaWVwID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaWR4LCAiZmlsZV9kZWxldGVkIiwgMCkpICE9IE5VTEwpOworCW1lbWNweSgmaWUsIGllcCwgc2l6ZW9mKGllKSk7CisJaWUuZmxhZ3MgfD0gR0lUX0lEWEVOVFJZX1ZBTElEOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGQoaWR4LCAmaWUpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpZHgpKTsKKwlnaXRfaW5kZXhfZnJlZShpZHgpOworCisJLyogcmVkbyBkaWZmIGFuZCBzZWUgdGhhdCBlbnRyaWVzIGFyZSBza2lwcGVkICovCisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKAorCQlkaWZmLCBkaWZmX2ZpbGVfY2IsIGRpZmZfaHVua19jYiwgZGlmZl9saW5lX2NiLCAmZXhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNiwgZXhwLmZpbGVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9NT0RJRklFRF0pOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKIH0KIAogdm9pZCB0ZXN0X2RpZmZfd29ya2Rpcl9fdG9fdHJlZSh2b2lkKQpAQCAtNzAsOCArMTI0LDggQEAKIAljb25zdCBjaGFyICpiX2NvbW1pdCA9ICIwMDE3YmQ0YWIxZWMzIjsgLyogdGhlIHN0YXJ0ICovCiAJZ2l0X3RyZWUgKmEsICpiOwogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmMiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmMiA9IE5VTEw7CiAJZGlmZl9leHBlY3RzIGV4cDsKIAlpbnQgdXNlX2l0ZXJhdG9yOwogCkBAIC0xMTksNyArMTczLDcgQEAKIAkgKiBkbyBtb3JlIGFwcGxlcy10by1hcHBsZXMgdGVzdCBjb21wYXJpc29uIGJlbG93LgogCSAqLwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZGlmZiA9IE5VTEw7CiAJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKIApAQCAtMTMwLDcgKzE4NCw3IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgZ19yZXBvLCBhLCBOVUxMLCAmb3B0cykpOwogCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYyLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfbWVyZ2UoZGlmZiwgZGlmZjIpKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZjIpOworCWdpdF9kaWZmX2ZyZWUoZGlmZjIpOwogCiAJZm9yICh1c2VfaXRlcmF0b3IgPSAwOyB1c2VfaXRlcmF0b3IgPD0gMTsgdXNlX2l0ZXJhdG9yKyspIHsKIAkJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKQEAgLTE1Nyw3ICsyMTEsNyBAQAogCQljbF9hc3NlcnRfZXF1YWxfaSg1LCBleHAubGluZV9kZWxzKTsKIAl9CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAlkaWZmID0gTlVMTDsKIAltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOwogCkBAIC0xNjcsNyArMjIxLDcgQEAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZkaWZmLCBnX3JlcG8sIGIsIE5VTEwsICZvcHRzKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZjIsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKIAljbF9naXRfcGFzcyhnaXRfZGlmZl9tZXJnZShkaWZmLCBkaWZmMikpOwotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmMik7CisJZ2l0X2RpZmZfZnJlZShkaWZmMik7CiAKIAlmb3IgKHVzZV9pdGVyYXRvciA9IDA7IHVzZV9pdGVyYXRvciA8PSAxOyB1c2VfaXRlcmF0b3IrKykgewogCQltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOwpAQCAtMTk0LDcgKzI0OCwzOSBAQAogCQljbF9hc3NlcnRfZXF1YWxfaSg0LCBleHAubGluZV9kZWxzKTsKIAl9CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKworCS8qIExldCdzIHRyeSB0aGF0IG9uY2UgbW9yZSB3aXRoIGEgcmV2ZXJzZWQgZGlmZiAqLworCisJb3B0cy5mbGFncyB8PSBHSVRfRElGRl9SRVZFUlNFOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b19pbmRleCgmZGlmZiwgZ19yZXBvLCBiLCBOVUxMLCAmb3B0cykpOworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYyLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfbWVyZ2UoZGlmZiwgZGlmZjIpKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYyKTsKKworCW1lbXNldCgmZXhwLCAwLCBzaXplb2YoZXhwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKAorCQlkaWZmLCBkaWZmX2ZpbGVfY2IsIGRpZmZfaHVua19jYiwgZGlmZl9saW5lX2NiLCAmZXhwKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxNiwgZXhwLmZpbGVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg1LCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0RFTEVURURdKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg0LCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9NT0RJRklFRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfSUdOT1JFRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxMiwgZXhwLmh1bmtzKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDE5LCBleHAubGluZXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGV4cC5saW5lX2N0eHQpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEyLCBleHAubGluZV9kZWxzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg0LCBleHAubGluZV9hZGRzKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwkvKiBhbGwgZG9uZSBub3cgKi8KIAogCWdpdF90cmVlX2ZyZWUoYSk7CiAJZ2l0X3RyZWVfZnJlZShiKTsKQEAgLTIwMyw3ICsyODksNyBAQAogdm9pZCB0ZXN0X2RpZmZfd29ya2Rpcl9fdG9faW5kZXhfd2l0aF9wYXRoc3BlYyh2b2lkKQogewogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJZGlmZl9leHBlY3RzIGV4cDsKIAljaGFyICpwYXRoc3BlYyA9IE5VTEw7CiAJaW50IHVzZV9pdGVyYXRvcjsKQEAgLTIzNSw3ICszMjEsNyBAQAogCQljbF9hc3NlcnRfZXF1YWxfaSg0LCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJcGF0aHNwZWMgPSAibW9kaWZpZWRfZmlsZSI7CiAKQEAgLTI1OCw3ICszNDQsNyBAQAogCQljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJcGF0aHNwZWMgPSAic3ViZGlyIjsKIApAQCAtMjgxLDcgKzM2Nyw3IEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CiAJfQogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAlwYXRoc3BlYyA9ICIqX2RlbGV0ZWQiOwogCkBAIC0zMDQsMTIgKzM5MCwxMiBAQAogCQljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogfQogCiB2b2lkIHRlc3RfZGlmZl93b3JrZGlyX19maWxlbW9kZV9jaGFuZ2VzKHZvaWQpCiB7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAJaW50IHVzZV9pdGVyYXRvcjsKIApAQCAtMzM5LDcgKzQyNSw3IEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5odW5rcyk7CiAJfQogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAkvKiBjaG1vZCBmaWxlIGFuZCB0ZXN0IGFnYWluICovCiAKQEAgLTM2MiwxNCArNDQ4LDE0IEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5odW5rcyk7CiAJfQogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAljbF9hc3NlcnQoY2xfdG9nZ2xlX2ZpbGVtb2RlKCJpc3N1ZV81OTIvYS50eHQiKSk7CiB9CiAKIHZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX2ZpbGVtb2RlX2NoYW5nZXNfd2l0aF9maWxlbW9kZV9mYWxzZSh2b2lkKQogewotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKIAlkaWZmX2V4cGVjdHMgZXhwOwogCiAJaWYgKCFjbF9pc19jaG1vZF9zdXBwb3J0ZWQoKSkKQEAgLTM5MSw3ICs0NzcsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfTU9ESUZJRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuaHVua3MpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAkvKiBjaG1vZCBmaWxlIGFuZCB0ZXN0IGFnYWluICovCiAKQEAgLTQwNyw3ICs0OTMsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfTU9ESUZJRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuaHVua3MpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAljbF9hc3NlcnQoY2xfdG9nZ2xlX2ZpbGVtb2RlKCJpc3N1ZV81OTIvYS50eHQiKSk7CiB9CkBAIC00MTUsNyArNTAxLDcgQEAKIHZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX2hlYWRfaW5kZXhfYW5kX3dvcmtkaXJfYWxsX2RpZmZlcih2b2lkKQogewogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmX2kydCA9IE5VTEwsICpkaWZmX3cyaSA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmZfaTJ0ID0gTlVMTCwgKmRpZmZfdzJpID0gTlVMTDsKIAlkaWZmX2V4cGVjdHMgZXhwOwogCWNoYXIgKnBhdGhzcGVjID0gInN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGUiOwogCWdpdF90cmVlICp0cmVlOwpAQCAtNTA0LDggKzU5MCw4IEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5saW5lX2RlbHMpOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmX2kydCk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmZfdzJpKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmZfaTJ0KTsKKwlnaXRfZGlmZl9mcmVlKGRpZmZfdzJpKTsKIAogCWdpdF90cmVlX2ZyZWUodHJlZSk7CiB9CkBAIC01MTMsNyArNTk5LDcgQEAKIHZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX2VvZl9uZXdsaW5lX2NoYW5nZXModm9pZCkKIHsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAJY2hhciAqcGF0aHNwZWMgPSAiY3VycmVudF9maWxlIjsKIAlpbnQgdXNlX2l0ZXJhdG9yOwpAQCAtNTQ2LDcgKzYzMiw3IEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5saW5lX2RlbHMpOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJY2xfZ2l0X2FwcGVuZDJmaWxlKCJzdGF0dXMvY3VycmVudF9maWxlIiwgIlxuIik7CiAKQEAgLTU3Myw3ICs2NTksNyBAQAogCQljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAubGluZV9kZWxzKTsKIAl9CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCWNsX2dpdF9yZXdyaXRlZmlsZSgic3RhdHVzL2N1cnJlbnRfZmlsZSIsICJjdXJyZW50X2ZpbGUiKTsKIApAQCAtNjAwLDcgKzY4Niw3IEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5saW5lX2RlbHMpOwogCX0KIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogfQogCiAvKiBQUkVQQVJBVElPTiBPRiBURVNUIERBVEEKQEAgLTY3Myw3ICs3NTksNyBAQAogCWNvbnN0IGNoYXIgKmJfY29tbWl0ID0gIjdhOWUwYjAyZTYzMTc5OTI5ZmVkMjRmMGEzZTBmMTkxNjgxMTRkMTAiOwogCWdpdF90cmVlICphLCAqYjsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0Jc2l6ZV90IGksIGQsIG51bV9kLCBoLCBudW1faCwgbCwgbnVtX2wsIGhlYWRlcl9sZW4sIGxpbmVfbGVuOworCXNpemVfdCBpLCBkLCBudW1fZCwgaCwgbnVtX2gsIGwsIG51bV9sOwogCiAJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiZGlmZiIpOwogCkBAIC02ODQsMTEgKzc3MCwxMCBAQAogCW9wdHMuaW50ZXJodW5rX2xpbmVzID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPD0gMjsgKytpKSB7Ci0JCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOwotCQlnaXRfZGlmZl9wYXRjaCAqcGF0Y2g7Ci0JCWNvbnN0IGdpdF9kaWZmX3JhbmdlICpyYW5nZTsKLQkJY29uc3QgY2hhciAqaGVhZGVyLCAqbGluZTsKLQkJY2hhciBvcmlnaW47CisJCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKKwkJZ2l0X3BhdGNoICpwYXRjaDsKKwkJY29uc3QgZ2l0X2RpZmZfaHVuayAqaHVuazsKKwkJY29uc3QgZ2l0X2RpZmZfbGluZSAqbGluZTsKIAogCQkvKiBva2F5LCB0aGlzIGlzIGEgYml0IHNpbGx5LCBidXQgb2ggd2VsbCAqLwogCQlzd2l0Y2ggKGkpIHsKQEAgLTcwNywzMyArNzkyLDMxIEBACiAJCWNsX2Fzc2VydF9lcXVhbF9pKDIsIChpbnQpbnVtX2QpOwogCiAJCWZvciAoZCA9IDA7IGQgPCBudW1fZDsgKytkKSB7Ci0JCQljbF9naXRfcGFzcyhnaXRfZGlmZl9nZXRfcGF0Y2goJnBhdGNoLCBOVUxMLCBkaWZmLCBkKSk7CisJCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZnJvbV9kaWZmKCZwYXRjaCwgZGlmZiwgZCkpOwogCQkJY2xfYXNzZXJ0KHBhdGNoKTsKIAotCQkJbnVtX2ggPSBnaXRfZGlmZl9wYXRjaF9udW1faHVua3MocGF0Y2gpOworCQkJbnVtX2ggPSBnaXRfcGF0Y2hfbnVtX2h1bmtzKHBhdGNoKTsKIAkJCWZvciAoaCA9IDA7IGggPCBudW1faDsgaCsrKSB7Ci0JCQkJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2h1bmsoCi0JCQkJCSZyYW5nZSwgJmhlYWRlciwgJmhlYWRlcl9sZW4sICZudW1fbCwgcGF0Y2gsIGgpKTsKKwkJCQljbF9naXRfcGFzcyhnaXRfcGF0Y2hfZ2V0X2h1bmsoJmh1bmssICZudW1fbCwgcGF0Y2gsIGgpKTsKIAogCQkJCWZvciAobCA9IDA7IGwgPCBudW1fbDsgKytsKSB7Ci0JCQkJCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3BhdGNoX2dldF9saW5lX2luX2h1bmsoCi0JCQkJCQkmb3JpZ2luLCAmbGluZSwgJmxpbmVfbGVuLCBOVUxMLCBOVUxMLCBwYXRjaCwgaCwgbCkpOworCQkJCQljbF9naXRfcGFzcygKKwkJCQkJCWdpdF9wYXRjaF9nZXRfbGluZV9pbl9odW5rKCZsaW5lLCBwYXRjaCwgaCwgbCkpOwogCQkJCQljbF9hc3NlcnQobGluZSk7CiAJCQkJfQogCiAJCQkJLyogY29uZmlybSBmYWlsIGFmdGVyIHRoZSBsYXN0IGl0ZW0gKi8KLQkJCQljbF9naXRfZmFpbChnaXRfZGlmZl9wYXRjaF9nZXRfbGluZV9pbl9odW5rKAotCQkJCQkmb3JpZ2luLCAmbGluZSwgJmxpbmVfbGVuLCBOVUxMLCBOVUxMLCBwYXRjaCwgaCwgbnVtX2wpKTsKKwkJCQljbF9naXRfZmFpbCgKKwkJCQkJZ2l0X3BhdGNoX2dldF9saW5lX2luX2h1bmsoJmxpbmUsIHBhdGNoLCBoLCBudW1fbCkpOwogCQkJfQogCiAJCQkvKiBjb25maXJtIGZhaWwgYWZ0ZXIgdGhlIGxhc3QgaXRlbSAqLwotCQkJY2xfZ2l0X2ZhaWwoZ2l0X2RpZmZfcGF0Y2hfZ2V0X2h1bmsoCi0JCQkJJnJhbmdlLCAmaGVhZGVyLCAmaGVhZGVyX2xlbiwgJm51bV9sLCBwYXRjaCwgbnVtX2gpKTsKKwkJCWNsX2dpdF9mYWlsKGdpdF9wYXRjaF9nZXRfaHVuaygmaHVuaywgJm51bV9sLCBwYXRjaCwgbnVtX2gpKTsKIAotCQkJZ2l0X2RpZmZfcGF0Y2hfZnJlZShwYXRjaCk7CisJCQlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CiAJCX0KIAotCQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJfQogCiAJZ2l0X3RyZWVfZnJlZShhKTsKQEAgLTc1OCwyNiArODQxLDE4IEBACiAJY29uc3QgY2hhciAqYV9jb21taXQgPSAiODczNTg1Yjk0YmRlYWJjY2VhOTkxZWE1ZTNlYzFhMjc3ODk1YjY5OCI7CiAJZ2l0X3RyZWUgKmE7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKIAlkaWZmX2V4cGVjdHMgZXhwOwogCi0JZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3VibW9kMiIpOwotCi0JY2xfZml4dHVyZV9zYW5kYm94KCJzdWJtb2QyX3RhcmdldCIpOwotCXBfcmVuYW1lKCJzdWJtb2QyX3RhcmdldC8uZ2l0dGVkIiwgInN1Ym1vZDJfdGFyZ2V0Ly5naXQiKTsKLQotCXJld3JpdGVfZ2l0bW9kdWxlcyhnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGdfcmVwbykpOwotCXBfcmVuYW1lKCJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZCIsICJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdCIpOwotCXBfcmVuYW1lKCJzdWJtb2QyL25vdC8uZ2l0dGVkIiwgInN1Ym1vZDIvbm90Ly5naXQiKTsKLQotCWNsX2ZpeHR1cmVfY2xlYW51cCgic3VibW9kMl90YXJnZXQiKTsKKwlnX3JlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKIAogCWEgPSByZXNvbHZlX2NvbW1pdF9vaWRfdG9fdHJlZShnX3JlcG8sIGFfY29tbWl0KTsKIAogCW9wdHMuZmxhZ3MgPQogCQlHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRCB8CisJCUdJVF9ESUZGX0lOQ0xVREVfSUdOT1JFRCB8CiAJCUdJVF9ESUZGX1JFQ1VSU0VfVU5UUkFDS0VEX0RJUlMgfAotCQlHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRF9DT05URU5UOworCQlHSVRfRElGRl9TSE9XX1VOVFJBQ0tFRF9DT05URU5UOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfdHJlZV90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIGEsICZvcHRzKSk7CiAKQEAgLTgwNiw3ICs4ODEsNyBAQAogCSAqIG9ubHkgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpcyB0aGF0IHRob3NlIEFkZGVkIGl0ZW1zIHdpbGwgc2hvdyB1cAogCSAqIGFzIFVudHJhY2tlZCBpdGVtcyBpbiB0aGUgcHVyZSBsaWJnaXQyIGRpZmYuCiAJICoKLQkgKiBUaGVuIGFkZCBpbiB0aGUgdHdvIGV4dHJhIHVudHJhY2tlZCBpdGVtcyAibm90IiBhbmQgIm5vdC1zdWJtb2R1bGUiCisJICogVGhlbiBhZGQgaW4gdGhlIHR3byBleHRyYSBpZ25vcmVkIGl0ZW1zICJub3QiIGFuZCAibm90LXN1Ym1vZHVsZSIKIAkgKiB0byBnZXQgdGhlIDEyIGZpbGVzIHJlcG9ydGVkIGhlcmUuCiAJICovCiAKQEAgLTgxNSw4ICs4OTAsOCBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfQURERURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0RFTEVURURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX01PRElGSUVEXSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9JR05PUkVEXSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMTAsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9JR05PUkVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koOCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAogCS8qIHRoZSBmb2xsb3dpbmcgbnVtYmVycyBtYXRjaCAiZ2l0IGRpZmYgODczNTg1IiBleGFjdGx5ICovCiAKQEAgLTgyNywxNCArOTAyLDE0IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMzAsIGV4cC5saW5lX2FkZHMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5saW5lX2RlbHMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X3RyZWVfZnJlZShhKTsKIH0KIAogdm9pZCB0ZXN0X2RpZmZfd29ya2Rpcl9fY2Fubm90X2RpZmZfYWdhaW5zdF9hX2JhcmVfcmVwb3NpdG9yeSh2b2lkKQogewogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKLQlnaXRfZGlmZl9saXN0ICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZiA9IE5VTEw7CiAJZ2l0X3RyZWUgKnRyZWU7CiAKIAlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJ0ZXN0cmVwby5naXQiKTsKQEAgLTg1Miw3ICs5MjcsNyBAQAogCiB2b2lkIHRlc3RfZGlmZl93b3JrZGlyX190b19udWxsX3RyZWUodm9pZCkKIHsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCWRpZmZfZXhwZWN0cyBleHA7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCkBAIC04NzAsMTIgKzk0NSwxMiBAQAogCiAJY2xfYXNzZXJ0X2VxdWFsX2koZXhwLmZpbGVzLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiB9CiAKIHZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX2NoZWNrc19vcHRpb25zX3ZlcnNpb24odm9pZCkKIHsKLQlnaXRfZGlmZl9saXN0ICpkaWZmOworCWdpdF9kaWZmICpkaWZmOwogCWdpdF9kaWZmX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKIAljb25zdCBnaXRfZXJyb3IgKmVycjsKIApAQCAtODk1LDExICs5NzAsMTEgQEAKIAogdm9pZCB0ZXN0X2RpZmZfd29ya2Rpcl9fY2FuX2RpZmZfZW1wdHlfZmlsZSh2b2lkKQogewotCWdpdF9kaWZmX2xpc3QgKmRpZmY7CisJZ2l0X2RpZmYgKmRpZmY7CiAJZ2l0X3RyZWUgKnRyZWU7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwogCXN0cnVjdCBzdGF0IHN0OwotCWdpdF9kaWZmX3BhdGNoICpwYXRjaDsKKwlnaXRfcGF0Y2ggKnBhdGNoOwogCiAJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiYXR0cl9pbmRleCIpOwogCkBAIC05MDksNyArOTg0LDcgQEAKIAogCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCB0cmVlLCAmb3B0cykpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7Ci0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAkvKiBlbXB0eSBjb250ZW50cyBvZiBmaWxlICovCiAKQEAgLTkyMCw5ICs5OTUsOSBAQAogCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCB0cmVlLCAmb3B0cykpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIChpbnQpZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CiAJLyogZGlmZnMgYXJlOiAuZ2l0YXR0cmlidXRlcywgUkVBRE1FLnR4dCwgc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcyAqLwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDEpKTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDEpKTsKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIHJlbW92ZSBhIGZpbGUgYWx0b2dldGhlciAqLwogCkBAIC05MzEsOSArMTAwNiw5IEBACiAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3dvcmtkaXIoJmRpZmYsIGdfcmVwbywgdHJlZSwgJm9wdHMpKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgzLCAoaW50KWdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOwotCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2dldF9wYXRjaCgmcGF0Y2gsIE5VTEwsIGRpZmYsIDEpKTsKLQlnaXRfZGlmZl9wYXRjaF9mcmVlKHBhdGNoKTsKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDEpKTsKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCWdpdF90cmVlX2ZyZWUodHJlZSk7CiB9CkBAIC05NDEsNyArMTAxNiw3IEBACiB2b2lkIHRlc3RfZGlmZl93b3JrZGlyX190b19pbmRleF9pc3N1ZV8xMzk3KHZvaWQpCiB7CiAJZ2l0X2RpZmZfb3B0aW9ucyBvcHRzID0gR0lUX0RJRkZfT1BUSU9OU19JTklUOwotCWdpdF9kaWZmX2xpc3QgKmRpZmYgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKIAlkaWZmX2V4cGVjdHMgZXhwOwogCiAJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiaXNzdWVfMTM5NyIpOwpAQCAtOTYxLDcgKzEwMzYsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5odW5rcyk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXhwLmxpbmVzKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCWRpZmYgPSBOVUxMOwogCiAJY2xfZ2l0X3Jld3JpdGVmaWxlKCJpc3N1ZV8xMzk3L2NybGZfZmlsZS50eHQiLApAQCAtOTgzLDcgKzEwNTgsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5saW5lX2FkZHMpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5saW5lX2RlbHMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiB9CiAKIHZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX3RvX3RyZWVfaXNzdWVfMTM5Nyh2b2lkKQpAQCAtOTkxLDggKzEwNjYsOCBAQAogCWNvbnN0IGNoYXIgKmFfY29tbWl0ID0gIjdmNDgzYTczOCI7IC8qIHRoZSBjdXJyZW50IEhFQUQgKi8KIAlnaXRfdHJlZSAqYTsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZjIgPSBOVUxMOworCWdpdF9kaWZmICpkaWZmID0gTlVMTDsKKwlnaXRfZGlmZiAqZGlmZjIgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAKIAlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJpc3N1ZV8xMzk3Iik7CkBAIC0xMDE0LDEzICsxMDg5LDEzIEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXhwLmh1bmtzKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAubGluZXMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZGlmZiA9IE5VTEw7CiAKIAljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX2luZGV4KCZkaWZmLCBnX3JlcG8sIGEsIE5VTEwsICZvcHRzKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZjIsIGdfcmVwbywgTlVMTCwgJm9wdHMpKTsKIAljbF9naXRfcGFzcyhnaXRfZGlmZl9tZXJnZShkaWZmLCBkaWZmMikpOwotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmMik7CisJZ2l0X2RpZmZfZnJlZShkaWZmMik7CiAKIAltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOwogCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZvcmVhY2goCkBAIC0xMDMwLDE0ICsxMTA1LDE0IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXhwLmh1bmtzKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAubGluZXMpOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAJZ2l0X3RyZWVfZnJlZShhKTsKIH0KIAogdm9pZCB0ZXN0X2RpZmZfd29ya2Rpcl9fdW50cmFja2VkX2RpcmVjdG9yeV9zY2VuYXJpb3Modm9pZCkKIHsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCWRpZmZfZXhwZWN0cyBleHA7CiAJY2hhciAqcGF0aHNwZWMgPSBOVUxMOwogCXN0YXRpYyBjb25zdCBjaGFyICpmaWxlczBbXSA9IHsKQEAgLTEwODcsNyArMTE2Miw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9JR05PUkVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogZW1wdHkgZGlyZWN0b3J5ICovCiAKQEAgLTExMDcsNyArMTE4Miw3IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9JR05PUkVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogZW1wdHkgZGlyZWN0b3J5IGluIGVtcHR5IGRpcmVjdG9yeSAqLwogCkBAIC0xMTI3LDcgKzEyMDIsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfSUdOT1JFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIGRpcmVjdG9yeSB3aXRoIG9ubHkgaWdub3JlZCBmaWxlcyAqLwogCkBAIC0xMTUxLDcgKzEyMjYsNyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfSUdOT1JFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIAogCS8qIGRpcmVjdG9yeSB3aXRoIGlnbm9yZWQgZGlyZWN0b3J5IChjb250ZW50cyBpcnJlbGV2YW50KSAqLwogCkBAIC0xMTc0LDExICsxMjQ5LDExIEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9JR05PUkVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogcXVpY2sgdmVyc2lvbiBhdm9pZHMgZGlyZWN0b3J5IHNjYW4gKi8KIAotCW9wdHMuZmxhZ3MgPSBvcHRzLmZsYWdzIHwgR0lUX0RJRkZfRkFTVF9VTlRSQUNLRURfRElSUzsKKwlvcHRzLmZsYWdzID0gb3B0cy5mbGFncyB8IEdJVF9ESUZGX0VOQUJMRV9GQVNUX1VOVFJBQ0tFRF9ESVJTOwogCiAJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKIAlleHAubmFtZXMgPSBmaWxlczE7CkBAIC0xMTk0LDExICsxMjY5LDExIEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9JR05PUkVEXSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTlRSQUNLRURdKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOwogCiAJLyogZGlyZWN0b3J5IHdpdGggbmVzdGVkIG5vbi1pZ25vcmVkIGNvbnRlbnQgKi8KIAotCW9wdHMuZmxhZ3MgPSBvcHRzLmZsYWdzICYgfkdJVF9ESUZGX0ZBU1RfVU5UUkFDS0VEX0RJUlM7CisJb3B0cy5mbGFncyA9IG9wdHMuZmxhZ3MgJiB+R0lUX0RJRkZfRU5BQkxFX0ZBU1RfVU5UUkFDS0VEX0RJUlM7CiAKIAljbF9naXRfbWtmaWxlKCJzdGF0dXMvc3ViZGlyL2RpcmVjdG9yeS9tb3JlL25vdGlnbm9yZWQiLAogCQkibm90IGlnbm9yZWQgZGVlcCB1bmRlciB1bnRyYWNrZWRcbiIpOwpAQCAtMTIxNyw3ICsxMjkyLDcgQEAKIAljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0lHTk9SRURdKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX1VOVFJBQ0tFRF0pOwogCi0JZ2l0X2RpZmZfbGlzdF9mcmVlKGRpZmYpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CiAKIAkvKiB1c2UgUkVDVVJTRV9VTlRSQUNLRURfRElSUyB0byBnZXQgYWN0dWFsIHVudHJhY2tlZCBmaWxlcyAobm8gaWdub3JlcykgKi8KIApAQCAtMTIzOCwxNCArMTMxMywxNCBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfSUdOT1JFRF0pOwogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CiAKLQlnaXRfZGlmZl9saXN0X2ZyZWUoZGlmZik7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKIH0KIAogCiB2b2lkIHRlc3RfZGlmZl93b3JrZGlyX191bnRyYWNrZWRfZGlyZWN0b3J5X2NvbWVzX2xhc3Qodm9pZCkKIHsKIAlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7Ci0JZ2l0X2RpZmZfbGlzdCAqZGlmZiA9IE5VTEw7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOwogCiAJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgicmVuYW1lcyIpOwogCkBAIC0xMjYzLDUgKzEzMzgsMTUzIEBACiAKIAljbF9hc3NlcnQoZGlmZiAhPSBOVUxMKTsKIAotCWdpdF9kaWZmX2xpc3RfZnJlZShkaWZmKTsKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworfQorCit2b2lkIHRlc3RfZGlmZl93b3JrZGlyX191bnRyYWNrZWRfd2l0aF9ib20odm9pZCkKK3sKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWNvbnN0IGdpdF9kaWZmX2RlbHRhICpkZWx0YTsKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImVtcHR5X3N0YW5kYXJkX3JlcG8iKTsKKwljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCB0cnVlKTsKKworCWNsX2dpdF93cml0ZTJmaWxlKCJlbXB0eV9zdGFuZGFyZF9yZXBvL2JvbS50eHQiLAorCQkiXHhGRlx4RkVceDMxXHgwMFx4MzJceDAwXHgzM1x4MDBceDM0XHgwMCIsIDEwLCBPX1dST05MWXxPX0NSRUFULCAwNjY0KTsKKworCW9wdHMuZmxhZ3MgPQorCQlHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRCB8IEdJVF9ESUZGX1NIT1dfVU5UUkFDS0VEX0NPTlRFTlQ7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCBnaXRfZGlmZl9udW1fZGVsdGFzKGRpZmYpKTsKKwljbF9hc3NlcnQoKGRlbHRhID0gZ2l0X2RpZmZfZ2V0X2RlbHRhKGRpZmYsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfREVMVEFfVU5UUkFDS0VELCBkZWx0YS0+c3RhdHVzKTsKKworCS8qIG5vdCBrbm93biBhdCB0aGlzIHBvaW50CisJICogY2xfYXNzZXJ0KChkZWx0YS0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX0JJTkFSWSkgIT0gMCk7CisJICovCisKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworfQorCit2b2lkIHRlc3RfZGlmZl93b3JrZGlyX19wYXRpZW5jZV9kaWZmKHZvaWQpCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWdpdF9wYXRjaCAqcGF0Y2ggPSBOVUxMOworCWNoYXIgKmFzX3N0ciA9IE5VTEw7CisJY29uc3QgY2hhciAqZXhwZWN0ZWRfbm9ybWFsID0gImRpZmYgLS1naXQgYS90ZXN0LnR4dCBiL3Rlc3QudHh0XG5pbmRleCAzNGE1YWNjLi5kNTI3MjVmIDEwMDY0NFxuLS0tIGEvdGVzdC50eHRcbisrKyBiL3Rlc3QudHh0XG5AQCAtMSwxMCArMSw3IEBAXG4gV2hlbiBJIHdyb3RlIHRoaXNcbiBJIGRpZCBub3Qga25vd1xuLWhvdyB0byBjcmVhdGVcbi1hIHBhdGllbmNlIGRpZmZcbiBJIGRpZCBub3Qga25vd1xuIGhvdyB0byBjcmVhdGVcbithIHBhdGllbmNlIGRpZmZcbiBhbm90aGVyIHByb2JsZW1cbi1JIGRpZCBub3Qga25vd1xuLWhvdyB0byBjcmVhdGVcbiBhIG1pbmltYWwgZGlmZlxuIjsKKwljb25zdCBjaGFyICpleHBlY3RlZF9wYXRpZW5jZSA9ICJkaWZmIC0tZ2l0IGEvdGVzdC50eHQgYi90ZXN0LnR4dFxuaW5kZXggMzRhNWFjYy4uZDUyNzI1ZiAxMDA2NDRcbi0tLSBhL3Rlc3QudHh0XG4rKysgYi90ZXN0LnR4dFxuQEAgLTEsMTAgKzEsNyBAQFxuIFdoZW4gSSB3cm90ZSB0aGlzXG4gSSBkaWQgbm90IGtub3dcbitJIGRpZCBub3Qga25vd1xuIGhvdyB0byBjcmVhdGVcbiBhIHBhdGllbmNlIGRpZmZcbi1JIGRpZCBub3Qga25vd1xuLWhvdyB0byBjcmVhdGVcbiBhbm90aGVyIHByb2JsZW1cbi1JIGRpZCBub3Qga25vd1xuLWhvdyB0byBjcmVhdGVcbiBhIG1pbmltYWwgZGlmZlxuIjsKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImVtcHR5X3N0YW5kYXJkX3JlcG8iKTsKKwljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuYXV0b2NybGYiLCB0cnVlKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJY2xfZ2l0X21rZmlsZSgKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vdGVzdC50eHQiLAorCQkiV2hlbiBJIHdyb3RlIHRoaXNcbkkgZGlkIG5vdCBrbm93XG5ob3cgdG8gY3JlYXRlXG5hIHBhdGllbmNlIGRpZmZcbkkgZGlkIG5vdCBrbm93XG5ob3cgdG8gY3JlYXRlXG5hbm90aGVyIHByb2JsZW1cbkkgZGlkIG5vdCBrbm93XG5ob3cgdG8gY3JlYXRlXG5hIG1pbmltYWwgZGlmZlxuIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJ0ZXN0LnR4dCIpKTsKKwljbF9yZXBvX2NvbW1pdF9mcm9tX2luZGV4KE5VTEwsIGdfcmVwbywgTlVMTCwgMTM3MjM1MDAwMCwgIkJhc2UiKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisKKwljbF9naXRfcmV3cml0ZWZpbGUoCisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL3Rlc3QudHh0IiwKKwkJIldoZW4gSSB3cm90ZSB0aGlzXG5JIGRpZCBub3Qga25vd1xuSSBkaWQgbm90IGtub3dcbmhvdyB0byBjcmVhdGVcbmEgcGF0aWVuY2UgZGlmZlxuYW5vdGhlciBwcm9ibGVtXG5hIG1pbmltYWwgZGlmZlxuIik7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIE5VTEwsICZvcHRzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZ2l0X2RpZmZfbnVtX2RlbHRhcyhkaWZmKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX2Zyb21fZGlmZigmcGF0Y2gsIGRpZmYsIDApKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fc3RyKCZhc19zdHIsIHBhdGNoKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZF9ub3JtYWwsIGFzX3N0cik7CisJZ2l0X19mcmVlKGFzX3N0cik7CisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwlvcHRzLmZsYWdzIHw9IEdJVF9ESUZGX1BBVElFTkNFOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGNoX3RvX3N0cigmYXNfc3RyLCBwYXRjaCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwZWN0ZWRfcGF0aWVuY2UsIGFzX3N0cik7CisJZ2l0X19mcmVlKGFzX3N0cik7CisJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCWdpdF9kaWZmX2ZyZWUoZGlmZik7Cit9CisKK3ZvaWQgdGVzdF9kaWZmX3dvcmtkaXJfX3dpdGhfc3RhbGVfaW5kZXgodm9pZCkKK3sKKwlnaXRfZGlmZl9vcHRpb25zIG9wdHMgPSBHSVRfRElGRl9PUFRJT05TX0lOSVQ7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWdpdF9pbmRleCAqaWR4ID0gTlVMTDsKKwlkaWZmX2V4cGVjdHMgZXhwOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3RhdHVzIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmlkeCwgZ19yZXBvKSk7CisKKwkvKiBtYWtlIHRoZSBpbi1tZW1vcnkgaW5kZXggaW52YWxpZCAqLworCXsKKwkJZ2l0X3JlcG9zaXRvcnkgKnIyOworCQlnaXRfaW5kZXggKmlkeDI7CisJCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnIyLCAic3RhdHVzIikpOworCQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaWR4MiwgcjIpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaWR4MiwgIm5ld19maWxlIikpOworCQljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpZHgyLCAic3ViZGlyL25ld19maWxlIikpOworCQljbF9naXRfcGFzcyhnaXRfaW5kZXhfcmVtb3ZlX2J5cGF0aChpZHgyLCAic3RhZ2VkX25ld19maWxlIikpOworCQljbF9naXRfcGFzcyhnaXRfaW5kZXhfcmVtb3ZlX2J5cGF0aChpZHgyLCAic3RhZ2VkX2NoYW5nZXNfZmlsZV9kZWxldGVkIikpOworCQljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaWR4MikpOworCQlnaXRfaW5kZXhfZnJlZShpZHgyKTsKKwkJZ2l0X3JlcG9zaXRvcnlfZnJlZShyMik7CisJfQorCisJb3B0cy5jb250ZXh0X2xpbmVzID0gMzsKKwlvcHRzLmludGVyaHVua19saW5lcyA9IDE7CisJb3B0cy5mbGFncyB8PSBHSVRfRElGRl9JTkNMVURFX1VOVFJBQ0tFRCB8IEdJVF9ESUZGX0lOQ0xVREVfVU5NT0RJRklFRDsKKworCS8qIGZpcnN0IHRyeSB3aXRoIGluZGV4IHBvaW50ZXIgd2hpY2ggc2hvdWxkIHByZXZlbnQgcmVsb2FkICovCisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9pbmRleF90b193b3JrZGlyKCZkaWZmLCBnX3JlcG8sIGlkeCwgJm9wdHMpKTsKKworCW1lbXNldCgmZXhwLCAwLCBzaXplb2YoZXhwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKAorCQlkaWZmLCBkaWZmX2ZpbGVfY2IsIGRpZmZfaHVua19jYiwgZGlmZl9saW5lX2NiLCAmZXhwKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxNywgZXhwLmZpbGVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9NT0RJRklFRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKDQsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTk1PRElGSUVEXSk7CisKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJLyogbm93IGxldCdzIHRyeSB3aXRob3V0IHRoZSBpbmRleCBwb2ludGVyIHdoaWNoIHNob3VsZCB0cmlnZ2VyIHJlbG9hZCAqLworCisJLyogdHdvIGZpbGVzIHRoYXQgd2VyZSBVTlRSQUNLRUQgc2hvdWxkIGhhdmUgYmVjb21lIFVOTU9ESUZJRUQgKi8KKwkvKiBvbmUgZmlsZSB0aGF0IHdhcyBVTk1PRElGSUVEIHNob3VsZCBub3cgaGF2ZSBiZWNvbWUgVU5UUkFDS0VEICovCisJLyogb25lIGZpbGUgdGhhdCB3YXMgREVMRVRFRCBzaG91bGQgbm93IGJlIGdvbmUgY29tcGxldGVseSAqLworCisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgZ19yZXBvLCBOVUxMLCAmb3B0cykpOworCisJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZvcmVhY2goCisJCWRpZmYsIGRpZmZfZmlsZV9jYiwgZGlmZl9odW5rX2NiLCBkaWZmX2xpbmVfY2IsICZleHApKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxNiwgZXhwLmZpbGVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9NT0RJRklFRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfVU5UUkFDS0VEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNiwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9VTk1PRElGSUVEXSk7CisKKwlnaXRfaW5kZXhfZnJlZShpZHgpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9mZXRjaGhlYWQvZmV0Y2hoZWFkX2RhdGEuaCBiL3Rlc3RzL2ZldGNoaGVhZC9mZXRjaGhlYWRfZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2ZldGNoaGVhZC9mZXRjaGhlYWRfZGF0YS5oCnJlbmFtZSB0byB0ZXN0cy9mZXRjaGhlYWQvZmV0Y2hoZWFkX2RhdGEuaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9mZXRjaGhlYWQvbm9uZXR3b3JrLmMgYi90ZXN0cy9mZXRjaGhlYWQvbm9uZXR3b3JrLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvZmV0Y2hoZWFkL25vbmV0d29yay5jCnJlbmFtZSB0byB0ZXN0cy9mZXRjaGhlYWQvbm9uZXR3b3JrLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbHRlci9ibG9iLmMgYi90ZXN0cy9maWx0ZXIvYmxvYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MDBhOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9maWx0ZXIvYmxvYi5jCkBAIC0wLDAgKzEsODQgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJjcmxmLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvID0gTlVMTDsKKwordm9pZCB0ZXN0X2ZpbHRlcl9ibG9iX19pbml0aWFsaXplKHZvaWQpCit7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiY3JsZiIpOworCWNsX2dpdF9ta2ZpbGUoImNybGYvLmdpdGF0dHJpYnV0ZXMiLAorCQkiKi50eHQgdGV4dFxuKi5iaW4gYmluYXJ5XG4iCisJCSIqLmNybGYgdGV4dCBlb2w9Y3JsZlxuIgorCQkiKi5sZiB0ZXh0IGVvbD1sZlxuIgorCQkiKi5pZGVudCB0ZXh0IGlkZW50XG4iCisJCSIqLmlkZW50Y3JsZiBpZGVudCB0ZXh0IGVvbD1jcmxmXG4iCisJCSIqLmlkZW50bGYgaWRlbnQgdGV4dCBlb2w9bGZcbiIpOworfQorCit2b2lkIHRlc3RfZmlsdGVyX2Jsb2JfX2NsZWFudXAodm9pZCkKK3sKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3ZvaWQgdGVzdF9maWx0ZXJfYmxvYl9fYWxsX2NybGYodm9pZCkKK3sKKwlnaXRfYmxvYiAqYmxvYjsKKwlnaXRfYnVmIGJ1ZiA9IHsgMCB9OworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JldnBhcnNlX3NpbmdsZSgKKwkJKGdpdF9vYmplY3QgKiopJmJsb2IsIGdfcmVwbywgImE5YTJlODkxIikpOyAvKiBhbGwtY3JsZiAqLworCisJY2xfYXNzZXJ0X2VxdWFsX3MoQUxMX0NSTEZfVEVYVF9SQVcsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfZmlsdGVyZWRfY29udGVudCgmYnVmLCBibG9iLCAiZmlsZS5iaW4iLCAxKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfcyhBTExfQ1JMRl9URVhUX1JBVywgYnVmLnB0cik7CisKKwljbF9naXRfcGFzcyhnaXRfYmxvYl9maWx0ZXJlZF9jb250ZW50KCZidWYsIGJsb2IsICJmaWxlLmNybGYiLCAxKSk7CisKKwkvKiBpbiB0aGlzIGNhc2UsIHJhdyBjb250ZW50IGhhcyBjcmxmIGluIGl0IGFscmVhZHkgKi8KKwljbF9hc3NlcnRfZXF1YWxfcyhBTExfQ1JMRl9URVhUX0FTX0NSTEYsIGJ1Zi5wdHIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfZmlsdGVyZWRfY29udGVudCgmYnVmLCBibG9iLCAiZmlsZS5sZiIsIDEpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9zKEFMTF9DUkxGX1RFWFRfQVNfTEYsIGJ1Zi5wdHIpOworCisJZ2l0X2J1Zl9mcmVlKCZidWYpOworCWdpdF9ibG9iX2ZyZWUoYmxvYik7Cit9CisKK3ZvaWQgdGVzdF9maWx0ZXJfYmxvYl9faWRlbnQodm9pZCkKK3sKKwlnaXRfb2lkIGlkOworCWdpdF9ibG9iICpibG9iOworCWdpdF9idWYgYnVmID0geyAwIH07CisKKwljbF9naXRfbWtmaWxlKCJjcmxmL3Rlc3QuaWRlbnQiLCAiU29tZSB0ZXh0XG4kSWQkXG5Hb2VzIHRoZXJlXG4iKTsKKwljbF9naXRfcGFzcyhnaXRfYmxvYl9jcmVhdGVfZnJvbXdvcmtkaXIoJmlkLCBnX3JlcG8sICJ0ZXN0LmlkZW50IikpOworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZ19yZXBvLCAmaWQpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygKKwkJIlNvbWUgdGV4dFxuJElkJFxuR29lcyB0aGVyZVxuIiwgZ2l0X2Jsb2JfcmF3Y29udGVudChibG9iKSk7CisJZ2l0X2Jsb2JfZnJlZShibG9iKTsKKworCWNsX2dpdF9ta2ZpbGUoImNybGYvdGVzdC5pZGVudCIsICJTb21lIHRleHRcbiRJZDogQW55IG9sZCBqdXN0IHlvdSB3YW50JFxuR29lcyB0aGVyZVxuIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfY3JlYXRlX2Zyb213b3JrZGlyKCZpZCwgZ19yZXBvLCAidGVzdC5pZGVudCIpKTsKKwljbF9naXRfcGFzcyhnaXRfYmxvYl9sb29rdXAoJmJsb2IsIGdfcmVwbywgJmlkKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoCisJCSJTb21lIHRleHRcbiRJZCRcbkdvZXMgdGhlcmVcbiIsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfZmlsdGVyZWRfY29udGVudCgmYnVmLCBibG9iLCAiZmlsdGVyLmJpbiIsIDEpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygKKwkJIlNvbWUgdGV4dFxuJElkJFxuR29lcyB0aGVyZVxuIiwgYnVmLnB0cik7CisKKwljbF9naXRfcGFzcyhnaXRfYmxvYl9maWx0ZXJlZF9jb250ZW50KCZidWYsIGJsb2IsICJmaWx0ZXIuaWRlbnRjcmxmIiwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKAorCQkiU29tZSB0ZXh0XHJcbiRJZDogMzE2NGY1ODVkNTQ4YWM2ODAyN2QyMmIxMDRmMmQ4MTAwYjJiNjg0NSRcclxuR29lcyB0aGVyZVxyXG4iLCBidWYucHRyKTsKKworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2ZpbHRlcmVkX2NvbnRlbnQoJmJ1ZiwgYmxvYiwgImZpbHRlci5pZGVudGxmIiwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKAorCQkiU29tZSB0ZXh0XG4kSWQ6IDMxNjRmNTg1ZDU0OGFjNjgwMjdkMjJiMTA0ZjJkODEwMGIyYjY4NDUkXG5Hb2VzIHRoZXJlXG4iLCBidWYucHRyKTsKKworCWdpdF9idWZfZnJlZSgmYnVmKTsKKwlnaXRfYmxvYl9mcmVlKGJsb2IpOworCit9CmRpZmYgLS1naXQgYS90ZXN0cy9maWx0ZXIvY3JsZi5jIGIvdGVzdHMvZmlsdGVyL2NybGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWZiOWNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZmlsdGVyL2NybGYuYwpAQCAtMCwwICsxLDcxIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiZ2l0Mi9zeXMvZmlsdGVyLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvID0gTlVMTDsKKwordm9pZCB0ZXN0X2ZpbHRlcl9jcmxmX19pbml0aWFsaXplKHZvaWQpCit7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiY3JsZiIpOworCisJY2xfZ2l0X21rZmlsZSgiY3JsZi8uZ2l0YXR0cmlidXRlcyIsCisJCSIqLnR4dCB0ZXh0XG4qLmJpbiBiaW5hcnlcbiouY3JsZiB0ZXh0IGVvbD1jcmxmXG4qLmxmIHRleHQgZW9sPWxmXG4iKTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIHRydWUpOworfQorCit2b2lkIHRlc3RfZmlsdGVyX2NybGZfX2NsZWFudXAodm9pZCkKK3sKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3ZvaWQgdGVzdF9maWx0ZXJfY3JsZl9fdG9fd29ya3RyZWUodm9pZCkKK3sKKwlnaXRfZmlsdGVyX2xpc3QgKmZsOworCWdpdF9maWx0ZXIgKmNybGY7CisJZ2l0X2J1ZiBpbiA9IHsgMCB9LCBvdXQgPSB7IDAgfTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9uZXcoJmZsLCBnX3JlcG8sIEdJVF9GSUxURVJfVE9fV09SS1RSRUUpKTsKKworCWNybGYgPSBnaXRfZmlsdGVyX2xvb2t1cChHSVRfRklMVEVSX0NSTEYpOworCWNsX2Fzc2VydChjcmxmICE9IE5VTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9saXN0X3B1c2goZmwsIGNybGYsIE5VTEwpKTsKKworCWluLnB0ciA9ICJTb21lIHRleHRcblJpZ2h0IGhlcmVcbiI7CisJaW4uc2l6ZSA9IHN0cmxlbihpbi5wdHIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9saXN0X2FwcGx5X3RvX2RhdGEoJm91dCwgZmwsICZpbikpOworCisjaWZkZWYgR0lUX1dJTjMyCisJY2xfYXNzZXJ0X2VxdWFsX3MoIlNvbWUgdGV4dFxyXG5SaWdodCBoZXJlXHJcbiIsIG91dC5wdHIpOworI2Vsc2UKKwljbF9hc3NlcnRfZXF1YWxfcygiU29tZSB0ZXh0XG5SaWdodCBoZXJlXG4iLCBvdXQucHRyKTsKKyNlbmRpZgorCisJZ2l0X2ZpbHRlcl9saXN0X2ZyZWUoZmwpOworCWdpdF9idWZfZnJlZSgmb3V0KTsKK30KKwordm9pZCB0ZXN0X2ZpbHRlcl9jcmxmX190b19vZGIodm9pZCkKK3sKKwlnaXRfZmlsdGVyX2xpc3QgKmZsOworCWdpdF9maWx0ZXIgKmNybGY7CisJZ2l0X2J1ZiBpbiA9IHsgMCB9LCBvdXQgPSB7IDAgfTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9uZXcoJmZsLCBnX3JlcG8sIEdJVF9GSUxURVJfVE9fT0RCKSk7CisKKwljcmxmID0gZ2l0X2ZpbHRlcl9sb29rdXAoR0lUX0ZJTFRFUl9DUkxGKTsKKwljbF9hc3NlcnQoY3JsZiAhPSBOVUxMKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9wdXNoKGZsLCBjcmxmLCBOVUxMKSk7CisKKwlpbi5wdHIgPSAiU29tZSB0ZXh0XHJcblJpZ2h0IGhlcmVcclxuIjsKKwlpbi5zaXplID0gc3RybGVuKGluLnB0cik7CisKKwljbF9naXRfcGFzcyhnaXRfZmlsdGVyX2xpc3RfYXBwbHlfdG9fZGF0YSgmb3V0LCBmbCwgJmluKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfcygiU29tZSB0ZXh0XG5SaWdodCBoZXJlXG4iLCBvdXQucHRyKTsKKworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKKwlnaXRfYnVmX2ZyZWUoJm91dCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9maWx0ZXIvY3JsZi5oIGIvdGVzdHMvZmlsdGVyL2NybGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2I5OGFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZmlsdGVyL2NybGYuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIElOQ0xVREVfZmlsdGVyX2NybGZfaF9fCisjZGVmaW5lIElOQ0xVREVfZmlsdGVyX2NybGZfaF9fCisKKy8qCisgKiBmaWxlIGNvbnRlbnQgZm9yIGZpbGVzIGluIHRoZSByZXNvdXJjZXMvY3JsZiByZXBvc2l0b3J5CisgKi8KKworI2RlZmluZSBVVEY4X0JPTSAiXHhFRlx4QkJceEJGIgorCisjZGVmaW5lIEFMTF9DUkxGX1RFWFRfUkFXCQkiY3JsZlxyXG5jcmxmXHJcbmNybGZcclxuY3JsZlxyXG4iCisjZGVmaW5lIEFMTF9MRl9URVhUX1JBVwkJCSJsZlxubGZcbmxmXG5sZlxubGZcbiIKKyNkZWZpbmUgTU9SRV9DUkxGX1RFWFRfUkFXCQkiY3JsZlxyXG5jcmxmXHJcbmxmXG5jcmxmXHJcbmNybGZcclxuIgorI2RlZmluZSBNT1JFX0xGX1RFWFRfUkFXCQkibGZcbmxmXG5jcmxmXHJcbmxmXG5sZlxuIgorCisjZGVmaW5lIEFMTF9DUkxGX1RFWFRfQVNfQ1JMRglBTExfQ1JMRl9URVhUX1JBVworI2RlZmluZSBBTExfTEZfVEVYVF9BU19DUkxGCQkibGZcclxubGZcclxubGZcclxubGZcclxubGZcclxuIgorI2RlZmluZSBNT1JFX0NSTEZfVEVYVF9BU19DUkxGCSJjcmxmXHJcbmNybGZcclxubGZcclxuY3JsZlxyXG5jcmxmXHJcbiIKKyNkZWZpbmUgTU9SRV9MRl9URVhUX0FTX0NSTEYJImxmXHJcbmxmXHJcbmNybGZcclxubGZcclxubGZcclxuIgorCisjZGVmaW5lIEFMTF9DUkxGX1RFWFRfQVNfTEYJCSJjcmxmXG5jcmxmXG5jcmxmXG5jcmxmXG4iCisjZGVmaW5lIEFMTF9MRl9URVhUX0FTX0xGCQlBTExfTEZfVEVYVF9SQVcKKyNkZWZpbmUgTU9SRV9DUkxGX1RFWFRfQVNfTEYJImNybGZcbmNybGZcbmxmXG5jcmxmXG5jcmxmXG4iCisjZGVmaW5lIE1PUkVfTEZfVEVYVF9BU19MRgkJImxmXG5sZlxuY3JsZlxubGZcbmxmXG4iCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsdGVyL2N1c3RvbS5jIGIvdGVzdHMvZmlsdGVyL2N1c3RvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTg4NWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9maWx0ZXIvY3VzdG9tLmMKQEAgLTAsMCArMSwzMzcgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJwb3NpeC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJmaWx0ZXIuaCIKKyNpbmNsdWRlICJidWZfdGV4dC5oIgorI2luY2x1ZGUgImdpdDIvc3lzL2ZpbHRlci5oIgorI2luY2x1ZGUgImdpdDIvc3lzL3JlcG9zaXRvcnkuaCIKKworLyogZ29pbmcgVE9fV09SS0RJUiwgZmlsdGVycyBhcmUgZXhlY3V0ZWQgbG93IHRvIGhpZ2gKKyAqIGdvaW5nIFRPX09EQiwgZmlsdGVycyBhcmUgZXhlY3V0ZWQgaGlnaCB0byBsb3cKKyAqLworI2RlZmluZSBCSVRGTElQX0ZJTFRFUl9QUklPUklUWSAtMQorI2RlZmluZSBSRVZFUlNFX0ZJTFRFUl9QUklPUklUWSAtMgorCisjZGVmaW5lIFZFUllfU0VDVVJFX0VOQ1JZUFRJT04oYikgKChiKSBeIDB4ZmYpCisKKyNpZmRlZiBHSVRfV0lOMzIKKyMgZGVmaW5lIE5FV0xJTkUgIlxyXG4iCisjZWxzZQorIyBkZWZpbmUgTkVXTElORSAiXG4iCisjZW5kaWYKKworc3RhdGljIGNoYXIgd29ya2Rpcl9kYXRhW10gPQorCSJzb21lIHNpbXBsZSIgTkVXTElORQorCSJkYXRhIiBORVdMSU5FCisJInRoYXQgd2lsbCBiZSIgTkVXTElORQorCSJ0cml2aWFsbHkiIE5FV0xJTkUKKwkic2NyYW1ibGVkLiIgTkVXTElORTsKKworLyogUmVwcmVzZW50cyB0aGUgZGF0YSBhYm92ZSBzY3JhbWJsZWQgKGJpdHMgZmxpcHBlZCkgYWZ0ZXIgXHJcbiAtPiBcbgorICogY29udmVyc2lvbiwgdGhlbiBieXRld2lzZSByZXZlcnNlZAorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBiaXRmbGlwcGVkX2FuZF9yZXZlcnNlZF9kYXRhW10gPQorCXsgMHhmNSwgMHhkMSwgMHg5YiwgMHg5YSwgMHg5MywgMHg5ZCwgMHg5MiwgMHg5ZSwgMHg4ZCwgMHg5YywgMHg4YywKKwkgIDB4ZjUsIDB4ODYsIDB4OTMsIDB4OTMsIDB4OWUsIDB4OTYsIDB4ODksIDB4OTYsIDB4OGQsIDB4OGIsIDB4ZjUsCisJICAweDlhLCAweDlkLCAweGRmLCAweDkzLCAweDkzLCAweDk2LCAweDg4LCAweGRmLCAweDhiLCAweDllLCAweDk3LAorCSAgMHg4YiwgMHhmNSwgMHg5ZSwgMHg4YiwgMHg5ZSwgMHg5YiwgMHhmNSwgMHg5YSwgMHg5MywgMHg4ZiwgMHg5MiwKKwkgIDB4OTYsIDB4OGMsIDB4ZGYsIDB4OWEsIDB4OTIsIDB4OTAsIDB4OGMgfTsKKworI2RlZmluZSBCSVRGTElQUEVEX0FORF9SRVZFUlNFRF9EQVRBX0xFTiA1MQorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2N1c3RvbV9maWx0ZXJzKHZvaWQpOworCit2b2lkIHRlc3RfZmlsdGVyX2N1c3RvbV9faW5pdGlhbGl6ZSh2b2lkKQoreworCXJlZ2lzdGVyX2N1c3RvbV9maWx0ZXJzKCk7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJlbXB0eV9zdGFuZGFyZF9yZXBvIik7CisKKwljbF9naXRfbWtmaWxlKAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0YXR0cmlidXRlcyIsCisJCSJoZXJvKiBiaXRmbGlwIHJldmVyc2VcbiIKKwkJImhlcm9maWxlIHRleHRcbiIKKwkJImhlcm9mbGlwIC1yZXZlcnNlIGJpbmFyeVxuIgorCQkiKi5iaW4gYmluYXJ5XG4iKTsKK30KKwordm9pZCB0ZXN0X2ZpbHRlcl9jdXN0b21fX2NsZWFudXAodm9pZCkKK3sKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7CisJZ19yZXBvID0gTlVMTDsKK30KKworc3RhdGljIGludCBiaXRmbGlwX2ZpbHRlcl9hcHBseSgKKwlnaXRfZmlsdGVyICAgICAqc2VsZiwKKwl2b2lkICAgICAgICAgICoqcGF5bG9hZCwKKwlnaXRfYnVmICAgICAgICAqdG8sCisJY29uc3QgZ2l0X2J1ZiAgKmZyb20sCisJY29uc3QgZ2l0X2ZpbHRlcl9zb3VyY2UgKnNvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKWZyb20tPnB0cjsKKwl1bnNpZ25lZCBjaGFyICpkc3Q7CisJc2l6ZV90IGk7CisKKwlHSVRfVU5VU0VEKHNlbGYpOyBHSVRfVU5VU0VEKHBheWxvYWQpOworCisJLyogdmVyaWZ5IHRoYXQgYXR0cmlidXRlIHBhdGggbWF0Y2ggd29ya2VkIGFzIGV4cGVjdGVkICovCisJY2xfYXNzZXJ0X2VxdWFsX2koCisJCTAsIGdpdF9fc3RybmNtcCgiaGVybyIsIGdpdF9maWx0ZXJfc291cmNlX3BhdGgoc291cmNlKSwgNCkpOworCisJaWYgKCFmcm9tLT5zaXplKQorCQlyZXR1cm4gMDsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfZ3Jvdyh0bywgZnJvbS0+c2l6ZSkpOworCisJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKil0by0+cHRyOworCisJZm9yIChpID0gMDsgaSA8IGZyb20tPnNpemU7IGkrKykKKwkJZHN0W2ldID0gVkVSWV9TRUNVUkVfRU5DUllQVElPTihzcmNbaV0pOworCisJdG8tPnNpemUgPSBmcm9tLT5zaXplOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJpdGZsaXBfZmlsdGVyX2ZyZWUoZ2l0X2ZpbHRlciAqZikKK3sKKwlnaXRfX2ZyZWUoZik7Cit9CisKK3N0YXRpYyBnaXRfZmlsdGVyICpjcmVhdGVfYml0ZmxpcF9maWx0ZXIodm9pZCkKK3sKKwlnaXRfZmlsdGVyICpmaWx0ZXIgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2ZpbHRlcikpOworCWNsX2Fzc2VydChmaWx0ZXIpOworCisJZmlsdGVyLT52ZXJzaW9uID0gR0lUX0ZJTFRFUl9WRVJTSU9OOworCWZpbHRlci0+YXR0cmlidXRlcyA9ICIrYml0ZmxpcCI7CisJZmlsdGVyLT5zaHV0ZG93biA9IGJpdGZsaXBfZmlsdGVyX2ZyZWU7CisJZmlsdGVyLT5hcHBseSA9IGJpdGZsaXBfZmlsdGVyX2FwcGx5OworCisJcmV0dXJuIGZpbHRlcjsKK30KKworCitzdGF0aWMgaW50IHJldmVyc2VfZmlsdGVyX2FwcGx5KAorCWdpdF9maWx0ZXIgICAgICpzZWxmLAorCXZvaWQgICAgICAgICAgKipwYXlsb2FkLAorCWdpdF9idWYgICAgICAgICp0bywKKwljb25zdCBnaXRfYnVmICAqZnJvbSwKKwljb25zdCBnaXRfZmlsdGVyX3NvdXJjZSAqc291cmNlKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZnJvbS0+cHRyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IHNyYyArIGZyb20tPnNpemU7CisJdW5zaWduZWQgY2hhciAqZHN0OworCisJR0lUX1VOVVNFRChzZWxmKTsgR0lUX1VOVVNFRChwYXlsb2FkKTsgR0lUX1VOVVNFRChzb3VyY2UpOworCisJLyogdmVyaWZ5IHRoYXQgYXR0cmlidXRlIHBhdGggbWF0Y2ggd29ya2VkIGFzIGV4cGVjdGVkICovCisJY2xfYXNzZXJ0X2VxdWFsX2koCisJCTAsIGdpdF9fc3RybmNtcCgiaGVybyIsIGdpdF9maWx0ZXJfc291cmNlX3BhdGgoc291cmNlKSwgNCkpOworCisJaWYgKCFmcm9tLT5zaXplKQorCQlyZXR1cm4gMDsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfZ3Jvdyh0bywgZnJvbS0+c2l6ZSkpOworCisJZHN0ID0gKHVuc2lnbmVkIGNoYXIgKil0by0+cHRyICsgZnJvbS0+c2l6ZSAtIDE7CisKKwl3aGlsZSAoc3JjIDwgZW5kKQorCQkqZHN0LS0gPSAqc3JjKys7CisKKwl0by0+c2l6ZSA9IGZyb20tPnNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJzZV9maWx0ZXJfZnJlZShnaXRfZmlsdGVyICpmKQoreworCWdpdF9fZnJlZShmKTsKK30KKworc3RhdGljIGdpdF9maWx0ZXIgKmNyZWF0ZV9yZXZlcnNlX2ZpbHRlcihjb25zdCBjaGFyICphdHRycykKK3sKKwlnaXRfZmlsdGVyICpmaWx0ZXIgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZ2l0X2ZpbHRlcikpOworCWNsX2Fzc2VydChmaWx0ZXIpOworCisJZmlsdGVyLT52ZXJzaW9uID0gR0lUX0ZJTFRFUl9WRVJTSU9OOworCWZpbHRlci0+YXR0cmlidXRlcyA9IGF0dHJzOworCWZpbHRlci0+c2h1dGRvd24gPSByZXZlcnNlX2ZpbHRlcl9mcmVlOworCWZpbHRlci0+YXBwbHkgPSByZXZlcnNlX2ZpbHRlcl9hcHBseTsKKworCXJldHVybiBmaWx0ZXI7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyX2N1c3RvbV9maWx0ZXJzKHZvaWQpCit7CisJc3RhdGljIGludCBmaWx0ZXJzX3JlZ2lzdGVyZWQgPSAwOworCisJaWYgKCFmaWx0ZXJzX3JlZ2lzdGVyZWQpIHsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9yZWdpc3RlcigKKwkJCSJiaXRmbGlwIiwgY3JlYXRlX2JpdGZsaXBfZmlsdGVyKCksIEJJVEZMSVBfRklMVEVSX1BSSU9SSVRZKSk7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9yZWdpc3RlcigKKwkJCSJyZXZlcnNlIiwgY3JlYXRlX3JldmVyc2VfZmlsdGVyKCIrcmV2ZXJzZSIpLAorCQkJUkVWRVJTRV9GSUxURVJfUFJJT1JJVFkpKTsKKworCQkvKiByZS1yZWdpc3RlciByZXZlcnNlIGZpbHRlciB3aXRoIHN0YW5kYXJkIGZpbHRlcj14eXogcHJpb3JpdHkgKi8KKwkJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9yZWdpc3RlcigKKwkJCSJwcmUtcmV2ZXJzZSIsCisJCQljcmVhdGVfcmV2ZXJzZV9maWx0ZXIoIitwcmVyZXZlcnNlIiksCisJCQlHSVRfRklMVEVSX0RSSVZFUl9QUklPUklUWSkpOworCisJCWZpbHRlcnNfcmVnaXN0ZXJlZCA9IDE7CisJfQorfQorCisKK3ZvaWQgdGVzdF9maWx0ZXJfY3VzdG9tX190b19vZGIodm9pZCkKK3sKKwlnaXRfZmlsdGVyX2xpc3QgKmZsOworCWdpdF9idWYgb3V0ID0geyAwIH07CisJZ2l0X2J1ZiBpbiA9IEdJVF9CVUZfSU5JVF9DT05TVCh3b3JrZGlyX2RhdGEsIHN0cmxlbih3b3JrZGlyX2RhdGEpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkmZmwsIGdfcmVwbywgTlVMTCwgImhlcm9maWxlIiwgR0lUX0ZJTFRFUl9UT19PREIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19kYXRhKCZvdXQsIGZsLCAmaW4pKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKEJJVEZMSVBQRURfQU5EX1JFVkVSU0VEX0RBVEFfTEVOLCBvdXQuc2l6ZSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgKKwkJMCwgbWVtY21wKGJpdGZsaXBwZWRfYW5kX3JldmVyc2VkX2RhdGEsIG91dC5wdHIsIG91dC5zaXplKSk7CisKKwlnaXRfZmlsdGVyX2xpc3RfZnJlZShmbCk7CisJZ2l0X2J1Zl9mcmVlKCZvdXQpOworfQorCit2b2lkIHRlc3RfZmlsdGVyX2N1c3RvbV9fdG9fd29ya2Rpcih2b2lkKQoreworCWdpdF9maWx0ZXJfbGlzdCAqZmw7CisJZ2l0X2J1ZiBvdXQgPSB7IDAgfTsKKwlnaXRfYnVmIGluID0gR0lUX0JVRl9JTklUX0NPTlNUKAorCQliaXRmbGlwcGVkX2FuZF9yZXZlcnNlZF9kYXRhLCBCSVRGTElQUEVEX0FORF9SRVZFUlNFRF9EQVRBX0xFTik7CisKKwljbF9naXRfcGFzcyhnaXRfZmlsdGVyX2xpc3RfbG9hZCgKKwkJJmZsLCBnX3JlcG8sIE5VTEwsICJoZXJvZmlsZSIsIEdJVF9GSUxURVJfVE9fV09SS1RSRUUpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19kYXRhKCZvdXQsIGZsLCAmaW4pKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKHN0cmxlbih3b3JrZGlyX2RhdGEpLCBvdXQuc2l6ZSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgKKwkJMCwgbWVtY21wKHdvcmtkaXJfZGF0YSwgb3V0LnB0ciwgb3V0LnNpemUpKTsKKworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKKwlnaXRfYnVmX2ZyZWUoJm91dCk7Cit9CisKK3ZvaWQgdGVzdF9maWx0ZXJfY3VzdG9tX19jYW5fcmVnaXN0ZXJfYV9jdXN0b21fZmlsdGVyX2luX3RoZV9yZXBvc2l0b3J5KHZvaWQpCit7CisJZ2l0X2ZpbHRlcl9saXN0ICpmbDsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkmZmwsIGdfcmVwbywgTlVMTCwgImhlcm9maWxlIiwgR0lUX0ZJTFRFUl9UT19XT1JLVFJFRSkpOworCS8qIGV4cGVjdDogYml0ZmxpcCwgcmV2ZXJzZSwgY3JsZiAqLworCWNsX2Fzc2VydF9lcXVhbF9zeigzLCBnaXRfZmlsdGVyX2xpc3RfbGVuZ3RoKGZsKSk7CisJZ2l0X2ZpbHRlcl9saXN0X2ZyZWUoZmwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9saXN0X2xvYWQoCisJCSZmbCwgZ19yZXBvLCBOVUxMLCAiaGVyb2NvcnAiLCBHSVRfRklMVEVSX1RPX1dPUktUUkVFKSk7CisJLyogZXhwZWN0OiBiaXRmbGlwLCByZXZlcnNlIC0gcG9zc2libHkgY3JsZiBkZXBlbmRpbmcgb24gZ2xvYmFsIGNvbmZpZyAqLworCXsKKwkJc2l6ZV90IGZsZW4gPSBnaXRfZmlsdGVyX2xpc3RfbGVuZ3RoKGZsKTsKKwkJY2xfYXNzZXJ0KGZsZW4gPT0gMiB8fCBmbGVuID09IDMpOworCX0KKwlnaXRfZmlsdGVyX2xpc3RfZnJlZShmbCk7CisKKwljbF9naXRfcGFzcyhnaXRfZmlsdGVyX2xpc3RfbG9hZCgKKwkJJmZsLCBnX3JlcG8sIE5VTEwsICJoZXJvLmJpbiIsIEdJVF9GSUxURVJfVE9fV09SS1RSRUUpKTsKKwkvKiBleHBlY3Q6IGJpdGZsaXAsIHJldmVyc2UgKi8KKwljbF9hc3NlcnRfZXF1YWxfc3ooMiwgZ2l0X2ZpbHRlcl9saXN0X2xlbmd0aChmbCkpOworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkmZmwsIGdfcmVwbywgTlVMTCwgImhlcm9mbGlwIiwgR0lUX0ZJTFRFUl9UT19XT1JLVFJFRSkpOworCS8qIGV4cGVjdDogYml0ZmxpcCAoYmVjYXVzZSBvZiAtcmV2ZXJzZSkgKi8KKwljbF9hc3NlcnRfZXF1YWxfc3ooMSwgZ2l0X2ZpbHRlcl9saXN0X2xlbmd0aChmbCkpOworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkmZmwsIGdfcmVwbywgTlVMTCwgImRvZXNudGFwcGx5dG9tZS5iaW4iLCBHSVRfRklMVEVSX1RPX1dPUktUUkVFKSk7CisJLyogZXhwZWN0OiBub25lICovCisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9maWx0ZXJfbGlzdF9sZW5ndGgoZmwpKTsKKwlnaXRfZmlsdGVyX2xpc3RfZnJlZShmbCk7Cit9CisKK3ZvaWQgdGVzdF9maWx0ZXJfY3VzdG9tX19vcmRlcl9kZXBlbmRlbmN5KHZvaWQpCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfYmxvYiAqYmxvYjsKKwlnaXRfYnVmIGJ1ZiA9IHsgMCB9OworCisJLyogc28gaWYgaWRlbnQgYW5kIHJldmVyc2UgYXJlIHVzZWQgdG9nZXRoZXIsIGFuIGludGVyZXN0aW5nIHRoaW5nCisJICogaGFwcGVucyAtIGEgcmV2ZXJzZWQgIiRJZCQiIHN0cmluZyBpcyBubyBsb25nZXIgZ29pbmcgdG8gdHJpZ2dlcgorCSAqIGlkZW50IGNvcnJlY3RseS4gIFdoZW4gY2hlY2tpbmcgb3V0LCB0aGUgZmlsdGVycyBzaG91bGQgYmUgYXBwbGllZAorCSAqIGluIG9yZGVyIENMUkYsIHRoZW4gaWRlbnQsIHRoZW4gcmV2ZXJzZSwgc28gaWRlbnQgZXhwYW5zaW9uIHNob3VsZAorCSAqIHdvcmsgY29ycmVjdGx5LiAgT24gY2hlY2sgaW4sIHRoZSBjb250ZW50IHNob3VsZCBiZSByZXZlcnNlZCwgdGhlbgorCSAqIGlkZW50LCB0aGVuIENSTEYgZmlsdGVyZWQuICBMZXQncyBtYWtlIHN1cmUgdGhhdCB3b3Jrcy4uLgorCSAqLworCisJY2xfZ2l0X21rZmlsZSgKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdGF0dHJpYnV0ZXMiLAorCQkiaGVyby4qLnJldi1pZGVudCB0ZXh0IGlkZW50IHByZXJldmVyc2UgZW9sPWxmXG4iKTsKKworCWNsX2dpdF9ta2ZpbGUoCisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL2hlcm8uMS5yZXYtaWRlbnQiLAorCQkiVGhpcyBpcyBhIHRlc3RcbiRJZCRcbkhhdmUgZnVuIVxuIik7CisKKwljbF9naXRfbWtmaWxlKAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9oZXJvLjIucmV2LWlkZW50IiwKKwkJIkFub3RoZXIgdGVzdFxuJGRJJFxuQ3JhenkhXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJoZXJvLjEucmV2LWlkZW50IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAiaGVyby4yLnJldi1pZGVudCIpKTsKKwljbF9yZXBvX2NvbW1pdF9mcm9tX2luZGV4KE5VTEwsIGdfcmVwbywgTlVMTCwgMCwgIkZpbHRlciBjaGFpbnNcbiIpOworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKKworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZ19yZXBvLAorCQkmIGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCAiaGVyby4xLnJldi1pZGVudCIsIDApLT5vaWQpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygKKwkJIlxuIW51ZiBldmFIXG4kZEkkXG50c2V0IGEgc2kgc2loVCIsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYikpOworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2ZpbHRlcmVkX2NvbnRlbnQoJmJ1ZiwgYmxvYiwgImhlcm8uMS5yZXYtaWRlbnQiLCAwKSk7CisJLyogbm8gZXhwYW5zaW9uIGJlY2F1c2UgaWQgd2FzIHJldmVyc2VkIGF0IGNoZWNraW4gYW5kIG5vdyBhdCBpZGVudAorCSAqIHRpbWUsIHJldmVyc2UgaXMgbm90IGFwcGxpZWQgeWV0ICovCisJY2xfYXNzZXJ0X2VxdWFsX3MoCisJCSJUaGlzIGlzIGEgdGVzdFxuJElkJFxuSGF2ZSBmdW4hXG4iLCBidWYucHRyKTsKKwlnaXRfYmxvYl9mcmVlKGJsb2IpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfbG9va3VwKCZibG9iLCBnX3JlcG8sCisJCSYgZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJoZXJvLjIucmV2LWlkZW50IiwgMCktPm9pZCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKAorCQkiXG4heXphckNcbiRJZCRcbnRzZXQgcmVodG9uQSIsIGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYikpOworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2ZpbHRlcmVkX2NvbnRlbnQoJmJ1ZiwgYmxvYiwgImhlcm8uMi5yZXYtaWRlbnQiLCAwKSk7CisJLyogZXhwYW5zaW9uIGJlY2F1c2UgcmV2ZXJzZSB3YXMgYXBwbGllZCBhdCBjaGVja2luIGFuZCBhdCBpZGVudCB0aW1lLAorCSAqIHJldmVyc2UgaXMgbm90IGFwcGxpZWQgeWV0ICovCisJY2xfYXNzZXJ0X2VxdWFsX3MoCisJCSJBbm90aGVyIHRlc3RcbiQ1OTAwMWZlMTkzMTAzYjEwMTZiMjcwMjdjMGM4MjdkMDM2ZmQwYWM4IDpkSSRcbkNyYXp5IVxuIiwgYnVmLnB0cik7CisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZ2l0X29pZF9zdHJjbXAoCisJCWdpdF9ibG9iX2lkKGJsb2IpLCAiOGNhMGRmNjMwZDcyOGMwYzcyMDcyYjYxMDFiMzAxMzkxZWYxMDA5NSIpKTsKKwlnaXRfYmxvYl9mcmVlKGJsb2IpOworCisJZ2l0X2J1Zl9mcmVlKCZidWYpOworfQorCit2b2lkIHRlc3RfZmlsdGVyX2N1c3RvbV9fZmlsdGVyX3JlZ2lzdHJ5X2ZhaWx1cmVfY2FzZXModm9pZCkKK3sKKwlnaXRfZmlsdGVyIGZha2UgPSB7IEdJVF9GSUxURVJfVkVSU0lPTiwgMCB9OworCisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VFWElTVFMsIGdpdF9maWx0ZXJfcmVnaXN0ZXIoImJpdGZsaXAiLCAmZmFrZSwgMCkpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X2ZpbHRlcl91bnJlZ2lzdGVyKEdJVF9GSUxURVJfQ1JMRikpOworCWNsX2dpdF9mYWlsKGdpdF9maWx0ZXJfdW5yZWdpc3RlcihHSVRfRklMVEVSX0lERU5UKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X2ZpbHRlcl91bnJlZ2lzdGVyKCJub3QtYS1maWx0ZXIiKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9maWx0ZXIvaWRlbnQuYyBiL3Rlc3RzL2ZpbHRlci9pZGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOGU2YWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9maWx0ZXIvaWRlbnQuYwpAQCAtMCwwICsxLDEzMSBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImdpdDIvc3lzL2ZpbHRlci5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbyA9IE5VTEw7CisKK3ZvaWQgdGVzdF9maWx0ZXJfaWRlbnRfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJjcmxmIik7Cit9CisKK3ZvaWQgdGVzdF9maWx0ZXJfaWRlbnRfX2NsZWFudXAodm9pZCkKK3sKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9ibG9iX2FuZF9maWx0ZXIoCisJY29uc3QgY2hhciAqZGF0YSwKKwlnaXRfZmlsdGVyX2xpc3QgKmZsLAorCWNvbnN0IGNoYXIgKmV4cGVjdGVkKQoreworCWdpdF9vaWQgaWQ7CisJZ2l0X2Jsb2IgKmJsb2I7CisJZ2l0X2J1ZiBvdXQgPSB7IDAgfTsKKworCWNsX2dpdF9ta2ZpbGUoImNybGYvaWRlbnR0ZXN0IiwgZGF0YSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfY3JlYXRlX2Zyb213b3JrZGlyKCZpZCwgZ19yZXBvLCAiaWRlbnR0ZXN0IikpOworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZ19yZXBvLCAmaWQpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19ibG9iKCZvdXQsIGZsLCBibG9iKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZCwgb3V0LnB0cik7CisKKwlnaXRfYmxvYl9mcmVlKGJsb2IpOworCWdpdF9idWZfZnJlZSgmb3V0KTsKK30KKwordm9pZCB0ZXN0X2ZpbHRlcl9pZGVudF9fdG9fd29ya3RyZWUodm9pZCkKK3sKKwlnaXRfZmlsdGVyX2xpc3QgKmZsOworCWdpdF9maWx0ZXIgKmlkZW50OworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9saXN0X25ldygmZmwsIGdfcmVwbywgR0lUX0ZJTFRFUl9UT19XT1JLVFJFRSkpOworCisJaWRlbnQgPSBnaXRfZmlsdGVyX2xvb2t1cChHSVRfRklMVEVSX0lERU5UKTsKKwljbF9hc3NlcnQoaWRlbnQgIT0gTlVMTCk7CisKKwljbF9naXRfcGFzcyhnaXRfZmlsdGVyX2xpc3RfcHVzaChmbCwgaWRlbnQsIE5VTEwpKTsKKworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSJIZWxsb1xuJElkJFxuRnVuIHN0dWZmXG4iLCBmbCwKKwkJIkhlbGxvXG4kSWQ6IGI2OWUyMzg3YWFmY2FmNzNjNGRlNWI5YWI1OWFiZTI3ZmRhZGVlMzAkXG5GdW4gc3R1ZmZcbiIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSJIZWxsb1xuJElkOiBKdW5reSRcbkZ1biBzdHVmZlxuIiwgZmwsCisJCSJIZWxsb1xuJElkOiA0NWNkMTA3YTcxMDI5MTFjYjJhN2RmMDg0MDQ2NzQzMjdmYTA1MGI5JFxuRnVuIHN0dWZmXG4iKTsKKwlhZGRfYmxvYl9hbmRfZmlsdGVyKAorCQkiJElkJFxuQXQgdGhlIHN0YXJ0XG4iLCBmbCwKKwkJIiRJZDogYjEzNDE1Yzc2N2FiYzE5NmZiOTViZDE3MDcwZThjMTExM2UzMjE2MCRcbkF0IHRoZSBzdGFydFxuIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkF0IHRoZSBlbmRcbiRJZCQiLCBmbCwKKwkJIkF0IHRoZSBlbmRcbiRJZDogMTM0NDkyNWM2YmM2NWIzNGM1YTdiNTBmODZiZjY4OGU0OGU5YTI3MiQiKTsKKwlhZGRfYmxvYl9hbmRfZmlsdGVyKAorCQkiJElkJCIsIGZsLAorCQkiJElkOiBiM2Y1ZWJmYjU4NDNiYzQzY2VlY2ZmNmQ0ZjI2YmIzN2M2MTViZWIxJCIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSIkSWQ6IFNvbWUgc29ydCBvZiBqdW5rIGdvZXMgaGVyZSQiLCBmbCwKKwkJIiRJZDogYWIyZGQzODUzYzdjOWE0YmZmNTVhY2EyYmVhMDc3YTczYzMyYWMwNiQiKTsKKworCWFkZF9ibG9iX2FuZF9maWx0ZXIoIiRJZDogIiwgZmwsICIkSWQ6ICIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoIiRJZCIsIGZsLCAiJElkIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigiJEkiLCBmbCwgIiRJIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigiSWQkIiwgZmwsICJJZCQiKTsKKworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKK30KKwordm9pZCB0ZXN0X2ZpbHRlcl9pZGVudF9fdG9fb2RiKHZvaWQpCit7CisJZ2l0X2ZpbHRlcl9saXN0ICpmbDsKKwlnaXRfZmlsdGVyICppZGVudDsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9uZXcoJmZsLCBnX3JlcG8sIEdJVF9GSUxURVJfVE9fT0RCKSk7CisKKwlpZGVudCA9IGdpdF9maWx0ZXJfbG9va3VwKEdJVF9GSUxURVJfSURFTlQpOworCWNsX2Fzc2VydChpZGVudCAhPSBOVUxMKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9wdXNoKGZsLCBpZGVudCwgTlVMTCkpOworCisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkhlbGxvXG4kSWQkXG5GdW4gc3R1ZmZcbiIsCisJCWZsLCAiSGVsbG9cbiRJZCRcbkZ1biBzdHVmZlxuIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkhlbGxvXG4kSWQ6IGI2OWUyMzg3YWFmY2FmNzNjNGRlNWI5YWI1OWFiZTI3ZmRhZGVlMzAkXG5GdW4gc3R1ZmZcbiIsCisJCWZsLCAiSGVsbG9cbiRJZCRcbkZ1biBzdHVmZlxuIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkhlbGxvXG4kSWQ6IEFueSBqdW5rIHlvdSBtYXkgaGF2ZSBsZWZ0IGhlcmUkXG5GdW4gc3R1ZmZcbiIsCisJCWZsLCAiSGVsbG9cbiRJZCRcbkZ1biBzdHVmZlxuIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkhlbGxvXG4kSWQ6JFxuRnVuIHN0dWZmXG4iLAorCQlmbCwgIkhlbGxvXG4kSWQkXG5GdW4gc3R1ZmZcbiIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSJIZWxsb1xuJElkOngkXG5GdW4gc3R1ZmZcbiIsCisJCWZsLCAiSGVsbG9cbiRJZCRcbkZ1biBzdHVmZlxuIik7CisKKwlhZGRfYmxvYl9hbmRfZmlsdGVyKAorCQkiJElkJFxuQXQgdGhlIHN0YXJ0XG4iLCBmbCwgIiRJZCRcbkF0IHRoZSBzdGFydFxuIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIiRJZDogbG90cyBvZiByYW5kb20gdGV4dCB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gaGVyZSRcbkF0IHRoZSBzdGFydFxuIiwgZmwsICIkSWQkXG5BdCB0aGUgc3RhcnRcbiIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSIkSWQ6IGxvdHMgb2YgcmFuZG9tIHRleHQgdGhhdCBzaG91bGQgbm90IGJlIHJlbW92ZWQgd2l0aG91dCBhIHRlcm1pbmF0b3JcbkF0IHRoZSBzdGFydFxuIiwgZmwsICIkSWQ6IGxvdHMgb2YgcmFuZG9tIHRleHQgdGhhdCBzaG91bGQgbm90IGJlIHJlbW92ZWQgd2l0aG91dCBhIHRlcm1pbmF0b3JcbkF0IHRoZSBzdGFydFxuIik7CisKKwlhZGRfYmxvYl9hbmRfZmlsdGVyKAorCQkiQXQgdGhlIGVuZFxuJElkJCIsIGZsLCAiQXQgdGhlIGVuZFxuJElkJCIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSJBdCB0aGUgZW5kXG4kSWQ6JCIsIGZsLCAiQXQgdGhlIGVuZFxuJElkJCIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoCisJCSJBdCB0aGUgZW5kXG4kSWQ6YXNkZmFzZGYkIiwgZmwsICJBdCB0aGUgZW5kXG4kSWQkIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkF0IHRoZSBlbmRcbiRJZCIsIGZsLCAiQXQgdGhlIGVuZFxuJElkIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigKKwkJIkF0IHRoZSBlbmRcbiRJZGRJIiwgZmwsICJBdCB0aGUgZW5kXG4kSWRkSSIpOworCisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigiJElkJCIsIGZsLCAiJElkJCIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoIiRJZDogYW55JCIsIGZsLCAiJElkJCIpOworCWFkZF9ibG9iX2FuZF9maWx0ZXIoIiRJZDogYW55IGxvbmcgc3R1ZmYgZ29lcyBoZXJlIHlvdSBzZWUkIiwgZmwsICIkSWQkIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigiJElkOiAiLCBmbCwgIiRJZDogIik7CisJYWRkX2Jsb2JfYW5kX2ZpbHRlcigiJElkIiwgZmwsICIkSWQiKTsKKwlhZGRfYmxvYl9hbmRfZmlsdGVyKCIkSSIsIGZsLCAiJEkiKTsKKwlhZGRfYmxvYl9hbmRfZmlsdGVyKCJJZCQiLCBmbCwgIklkJCIpOworCisJZ2l0X2ZpbHRlcl9saXN0X2ZyZWUoZmwpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9nZW5lcmF0ZS5weSBiL3Rlc3RzL2dlbmVyYXRlLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2dlbmVyYXRlLnB5CnJlbmFtZSB0byB0ZXN0cy9nZW5lcmF0ZS5weQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9pbmRleC9hZGRhbGwuYyBiL3Rlc3RzL2luZGV4L2FkZGFsbC5jCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvaW5kZXgvYWRkYWxsLmMKcmVuYW1lIHRvIHRlc3RzL2luZGV4L2FkZGFsbC5jCmluZGV4IGZjYTZlNzcuLjQ0YzUxMjcgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvaW5kZXgvYWRkYWxsLmMKKysrIGIvdGVzdHMvaW5kZXgvYWRkYWxsLmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCiAjaW5jbHVkZSAiLi4vc3RhdHVzL3N0YXR1c19oZWxwZXJzLmgiCiAjaW5jbHVkZSAicG9zaXguaCIKKyNpbmNsdWRlICJmaWxlb3BzLmgiCiAKIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG8gPSBOVUxMOwogCkBAIC02NywxMCArNjgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2hlY2tfc3RhdHVzKAorc3RhdGljIHZvaWQgY2hlY2tfc3RhdHVzX2F0X2xpbmUoCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCiAJc2l6ZV90IGluZGV4X2FkZHMsIHNpemVfdCBpbmRleF9kZWxzLCBzaXplX3QgaW5kZXhfbW9kcywKLQlzaXplX3Qgd3RfYWRkcywgc2l6ZV90IHd0X2RlbHMsIHNpemVfdCB3dF9tb2RzLCBzaXplX3QgaWdub3JlcykKKwlzaXplX3Qgd3RfYWRkcywgc2l6ZV90IHd0X2RlbHMsIHNpemVfdCB3dF9tb2RzLCBzaXplX3QgaWdub3JlcywKKwljb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKIHsKIAlpbmRleF9zdGF0dXNfY291bnRzIHZhbHM7CiAKQEAgLTc4LDE1ICs4MCwyNSBAQAogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19mb3JlYWNoKHJlcG8sIGluZGV4X3N0YXR1c19jYiwgJnZhbHMpKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9zeihpbmRleF9hZGRzLCB2YWxzLmluZGV4X2FkZHMpOwotCWNsX2Fzc2VydF9lcXVhbF9zeihpbmRleF9kZWxzLCB2YWxzLmluZGV4X2RlbHMpOwotCWNsX2Fzc2VydF9lcXVhbF9zeihpbmRleF9tb2RzLCB2YWxzLmluZGV4X21vZHMpOwotCWNsX2Fzc2VydF9lcXVhbF9zeih3dF9hZGRzLCB2YWxzLnd0X2FkZHMpOwotCWNsX2Fzc2VydF9lcXVhbF9zeih3dF9kZWxzLCB2YWxzLnd0X2RlbHMpOwotCWNsX2Fzc2VydF9lcXVhbF9zeih3dF9tb2RzLCB2YWxzLnd0X21vZHMpOwotCWNsX2Fzc2VydF9lcXVhbF9zeihpZ25vcmVzLCB2YWxzLmlnbm9yZXMpOworCWNsYXJfX2Fzc2VydF9lcXVhbCgKKwkJZmlsZSxsaW5lLCJ3cm9uZyBpbmRleCBhZGRzIiwgMSwgIiUiUFJJdVosIGluZGV4X2FkZHMsIHZhbHMuaW5kZXhfYWRkcyk7CisJY2xhcl9fYXNzZXJ0X2VxdWFsKAorCQlmaWxlLGxpbmUsIndyb25nIGluZGV4IGRlbHMiLCAxLCAiJSJQUkl1WiwgaW5kZXhfZGVscywgdmFscy5pbmRleF9kZWxzKTsKKwljbGFyX19hc3NlcnRfZXF1YWwoCisJCWZpbGUsbGluZSwid3JvbmcgaW5kZXggbW9kcyIsIDEsICIlIlBSSXVaLCBpbmRleF9tb2RzLCB2YWxzLmluZGV4X21vZHMpOworCWNsYXJfX2Fzc2VydF9lcXVhbCgKKwkJZmlsZSxsaW5lLCJ3cm9uZyB3b3JrZGlyIGFkZHMiLCAxLCAiJSJQUkl1Wiwgd3RfYWRkcywgdmFscy53dF9hZGRzKTsKKwljbGFyX19hc3NlcnRfZXF1YWwoCisJCWZpbGUsbGluZSwid3Jvbmcgd29ya2RpciBkZWxzIiwgMSwgIiUiUFJJdVosIHd0X2RlbHMsIHZhbHMud3RfZGVscyk7CisJY2xhcl9fYXNzZXJ0X2VxdWFsKAorCQlmaWxlLGxpbmUsIndyb25nIHdvcmtkaXIgbW9kcyIsIDEsICIlIlBSSXVaLCB3dF9tb2RzLCB2YWxzLnd0X21vZHMpOworCWNsYXJfX2Fzc2VydF9lcXVhbCgKKwkJZmlsZSxsaW5lLCJ3cm9uZyBpZ25vcmVzIiwgMSwgIiUiUFJJdVosIGlnbm9yZXMsIHZhbHMuaWdub3Jlcyk7CiB9CiAKKyNkZWZpbmUgY2hlY2tfc3RhdHVzKFIsSUEsSUQsSU0sV0EsV0QsV00sSUcpIFwKKwljaGVja19zdGF0dXNfYXRfbGluZShSLElBLElELElNLFdBLFdELFdNLElHLF9fRklMRV9fLF9fTElORV9fKQorCiBzdGF0aWMgdm9pZCBjaGVja19zdGF0X2RhdGEoZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCBtYXRjaCkKIHsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OwpAQCAtMTA4LDggKzEyMCwxMSBAQAogCQljbF9hc3NlcnQoc3Quc3Rfc2l6ZSA9PSBlbnRyeS0+ZmlsZV9zaXplKTsKIAkJY2xfYXNzZXJ0KHN0LnN0X3VpZCAgPT0gZW50cnktPnVpZCk7CiAJCWNsX2Fzc2VydChzdC5zdF9naWQgID09IGVudHJ5LT5naWQpOwotCQljbF9hc3NlcnRfZXF1YWxfYihzdC5zdF9tb2RlICYgfjA3NzcsIGVudHJ5LT5tb2RlICYgfjA3NzcpOwotCQljbF9hc3NlcnRfZXF1YWxfYihzdC5zdF9tb2RlICYgIDAxMTEsIGVudHJ5LT5tb2RlICYgIDAxMTEpOworCQljbF9hc3NlcnRfZXF1YWxfaV9mbXQoCisJCQlHSVRfTU9ERV9UWVBFKHN0LnN0X21vZGUpLCBHSVRfTU9ERV9UWVBFKGVudHJ5LT5tb2RlKSwgIiUwN28iKTsKKwkJaWYgKGNsX2lzX2NobW9kX3N1cHBvcnRlZCgpKQorCQkJY2xfYXNzZXJ0X2VxdWFsX2IoCisJCQkJR0lUX1BFUk1TX0lTX0VYRUMoc3Quc3RfbW9kZSksIEdJVF9QRVJNU19JU19FWEVDKGVudHJ5LT5tb2RlKSk7CiAJfSBlbHNlIHsKIAkJLyogbW9zdCB0aGluZ3Mgd2lsbCBzdGlsbCBtYXRjaCAqLwogCQljbF9hc3NlcnQoc3Quc3Rfc2l6ZSAhPSBlbnRyeS0+ZmlsZV9zaXplKTsKQEAgLTExNywzNyArMTMyLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbW1pdF9pbmRleF90b19oZWFkKAotCWdpdF9yZXBvc2l0b3J5ICpyZXBvLAotCWNvbnN0IGNoYXIgKmNvbW1pdF9tZXNzYWdlKQotewotCWdpdF9pbmRleCAqaW5kZXg7Ci0JZ2l0X29pZCB0cmVlX2lkLCBjb21taXRfaWQ7Ci0JZ2l0X3RyZWUgKnRyZWU7Ci0JZ2l0X3NpZ25hdHVyZSAqc2lnOwotCWdpdF9jb21taXQgKnBhcmVudCA9IE5VTEw7Ci0KLQlnaXRfcmV2cGFyc2Vfc2luZ2xlKChnaXRfb2JqZWN0ICoqKSZwYXJlbnQsIHJlcG8sICJIRUFEIik7Ci0JLyogaXQgaXMgb2theSBpZiBsb29raW5nIHVwIHRoZSBIRUFEIGZhaWxzICovCi0KLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pKTsKLQljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGVfdHJlZSgmdHJlZV9pZCwgaW5kZXgpKTsKLQljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsgLyogbm90IG5lZWRlZCwgYnV0IG1pZ2h0IGFzIHdlbGwgKi8KLQlnaXRfaW5kZXhfZnJlZShpbmRleCk7Ci0KLQljbF9naXRfcGFzcyhnaXRfdHJlZV9sb29rdXAoJnRyZWUsIHJlcG8sICZ0cmVlX2lkKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25vdygmc2lnLCAiVGVzdHkgTWNUZXN0ZXIiLCAidHRAdGVzdGVyLnRlc3QiKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29tbWl0X2NyZWF0ZV92KAotCQkmY29tbWl0X2lkLCByZXBvLCAiSEVBRCIsIHNpZywgc2lnLAotCQlOVUxMLCBjb21taXRfbWVzc2FnZSwgdHJlZSwgcGFyZW50ID8gMSA6IDAsIHBhcmVudCkpOwotCi0JZ2l0X2NvbW1pdF9mcmVlKHBhcmVudCk7Ci0JZ2l0X3RyZWVfZnJlZSh0cmVlKTsKLQlnaXRfc2lnbmF0dXJlX2ZyZWUoc2lnKTsKLX0KLQogdm9pZCB0ZXN0X2luZGV4X2FkZGFsbF9fcmVwb19saWZlY3ljbGUodm9pZCkKIHsKIAlpbnQgZXJyb3I7CkBAIC0xOTQsNyArMTc4LDcgQEAKIAljaGVja19zdGF0X2RhdGEoaW5kZXgsICJhZGRhbGwvZmlsZS56enoiLCB0cnVlKTsKIAljaGVja19zdGF0dXMoZ19yZXBvLCAyLCAwLCAwLCAzLCAwLCAwLCAxKTsKIAotCWNvbW1pdF9pbmRleF90b19oZWFkKGdfcmVwbywgImZpcnN0IGNvbW1pdCIpOworCWNsX3JlcG9fY29tbWl0X2Zyb21faW5kZXgoTlVMTCwgZ19yZXBvLCBOVUxMLCAwLCAiZmlyc3QgY29tbWl0Iik7CiAJY2hlY2tfc3RhdHVzKGdfcmVwbywgMCwgMCwgMCwgMywgMCwgMCwgMSk7CiAKIAkvKiBhdHRlbXB0IHRvIGFkZCBhbiBpZ25vcmVkIGZpbGUgLSBkb2VzIG5vdGhpbmcgKi8KQEAgLTI0MSw3ICsyMjUsNyBAQAogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAiZmlsZS56enoiKSk7CiAJY2hlY2tfc3RhdHVzKGdfcmVwbywgMSwgMCwgMSwgMywgMCwgMCwgMCk7CiAKLQljb21taXRfaW5kZXhfdG9faGVhZChnX3JlcG8sICJzZWNvbmQgY29tbWl0Iik7CisJY2xfcmVwb19jb21taXRfZnJvbV9pbmRleChOVUxMLCBnX3JlcG8sIE5VTEwsIDAsICJzZWNvbmQgY29tbWl0Iik7CiAJY2hlY2tfc3RhdHVzKGdfcmVwbywgMCwgMCwgMCwgMywgMCwgMCwgMCk7CiAKIAljbF9tdXN0X3Bhc3MocF91bmxpbmsoImFkZGFsbC9maWxlLnp6eiIpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvaW5kZXgvY29uZmxpY3RzLmMgYi90ZXN0cy9pbmRleC9jb25mbGljdHMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9pbmRleC9jb25mbGljdHMuYwpyZW5hbWUgdG8gdGVzdHMvaW5kZXgvY29uZmxpY3RzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvaW5kZXgvZmlsZW1vZGVzLmMgYi90ZXN0cy9pbmRleC9maWxlbW9kZXMuYwpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2luZGV4L2ZpbGVtb2Rlcy5jCnJlbmFtZSB0byB0ZXN0cy9pbmRleC9maWxlbW9kZXMuYwppbmRleCBlNTZhOWMwLi4wMTM5MzI2IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2luZGV4L2ZpbGVtb2Rlcy5jCisrKyBiL3Rlc3RzL2luZGV4L2ZpbGVtb2Rlcy5jCkBAIC00NCwzMCArNDQsMzYgQEAKIAogCWNsX2dpdF9wYXNzKHBfcmVuYW1lKHBhdGgucHRyLCBiYWNrdXApKTsKIAljbF9naXRfd3JpdGUyZmlsZSgKLQkJcGF0aC5wdHIsIGNvbnRlbnQucHRyLCBPX1dST05MWXxPX0NSRUFUfE9fVFJVTkMsIGNyZWF0ZV9tb2RlKTsKKwkJcGF0aC5wdHIsIGNvbnRlbnQucHRyLCBjb250ZW50LnNpemUsCisJCU9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgY3JlYXRlX21vZGUpOwogCiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKIAlnaXRfYnVmX2ZyZWUoJmNvbnRlbnQpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfYW5kX2NoZWNrX21vZGUoCi0JZ2l0X2luZGV4ICppbmRleCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBleHBlY3RfbW9kZSkKKyNkZWZpbmUgYWRkX2FuZF9jaGVja19tb2RlKEksRixYKSBhZGRfYW5kX2NoZWNrX21vZGVfKEksRixYLF9fRklMRV9fLF9fTElORV9fKQorCitzdGF0aWMgdm9pZCBhZGRfYW5kX2NoZWNrX21vZGVfKAorCWdpdF9pbmRleCAqaW5kZXgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZXhwZWN0X21vZGUsCisJY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCiB7CiAJc2l6ZV90IHBvczsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsIGZpbGVuYW1lKSk7CiAKLQljbF9hc3NlcnQoIWdpdF9pbmRleF9maW5kKCZwb3MsIGluZGV4LCBmaWxlbmFtZSkpOworCWNsYXJfX2Fzc2VydCghZ2l0X2luZGV4X2ZpbmQoJnBvcywgaW5kZXgsIGZpbGVuYW1lKSwKKwkJZmlsZSwgbGluZSwgIkNhbm5vdCBmaW5kIGluZGV4IGVudHJ5IiwgTlVMTCwgMSk7CiAKIAllbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlpbmRleChpbmRleCwgcG9zKTsKLQljbF9hc3NlcnQoZW50cnktPm1vZGUgPT0gZXhwZWN0X21vZGUpOworCisJY2xhcl9fYXNzZXJ0X2VxdWFsKGZpbGUsIGxpbmUsICJFeHBlY3RlZCBtb2RlIGRvZXMgbm90IG1hdGNoIGluZGV4IiwKKwkJMSwgIiUwN28iLCAodW5zaWduZWQgaW50KWVudHJ5LT5tb2RlLCAodW5zaWduZWQgaW50KWV4cGVjdF9tb2RlKTsKIH0KIAogdm9pZCB0ZXN0X2luZGV4X2ZpbGVtb2Rlc19fdW50cnVzdGVkKHZvaWQpCiB7CiAJZ2l0X2luZGV4ICppbmRleDsKLQlib29sIGNhbl9maWxlbW9kZSA9IGNsX2lzX2NobW9kX3N1cHBvcnRlZCgpOwogCiAJY2xfcmVwb19zZXRfYm9vbChnX3JlcG8sICJjb3JlLmZpbGVtb2RlIiwgZmFsc2UpOwogCkBAIC05MSwxOSArOTcsMTQgQEAKIAlhZGRfYW5kX2NoZWNrX21vZGUoaW5kZXgsICJleGVjX29uIiwgR0lUX0ZJTEVNT0RFX0JMT0JfRVhFQ1VUQUJMRSk7CiAKIAkvKiAgNSAtIGFkZCBuZXcgMDY0NCAtPiBleHBlY3QgMDY0NCAqLwotCWNsX2dpdF93cml0ZTJmaWxlKCJmaWxlbW9kZXMvbmV3X29mZiIsICJibGFoIiwKKwljbF9naXRfd3JpdGUyZmlsZSgiZmlsZW1vZGVzL25ld19vZmYiLCAiYmxhaCIsIDAsCiAJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOwogCWFkZF9hbmRfY2hlY2tfbW9kZShpbmRleCwgIm5ld19vZmYiLCBHSVRfRklMRU1PREVfQkxPQik7CiAKLQkvKiB0aGlzIHRlc3Qgd29uJ3QgZ2l2ZSBwcmVkaWN0YWJsZSByZXN1bHRzIG9uIGEgcGxhdGZvcm0KLQkgKiB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBmaWxlbW9kZXMgY29ycmVjdGx5LCBzbyBza2lwIGl0LgotCSAqLwotCWlmIChjYW5fZmlsZW1vZGUpIHsKLQkJLyogNiAtIGFkZCAwNzU1IC0+IGV4cGVjdCAwNzU1ICovCi0JCWNsX2dpdF93cml0ZTJmaWxlKCJmaWxlbW9kZXMvbmV3X29uIiwgImJsYWgiLAotCQkJT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDc1NSk7Ci0JCWFkZF9hbmRfY2hlY2tfbW9kZShpbmRleCwgIm5ld19vbiIsIEdJVF9GSUxFTU9ERV9CTE9CX0VYRUNVVEFCTEUpOwotCX0KKwkvKiA2IC0gYWRkIG5ldyAwNzU1IC0+IGV4cGVjdCAwNjQ0IGlmIGNvcmUuZmlsZW1vZGUgPT0gZmFsc2UgKi8KKwljbF9naXRfd3JpdGUyZmlsZSgiZmlsZW1vZGVzL25ld19vbiIsICJibGFoIiwgMCwKKwkJT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDc1NSk7CisJYWRkX2FuZF9jaGVja19tb2RlKGluZGV4LCAibmV3X29uIiwgR0lUX0ZJTEVNT0RFX0JMT0IpOwogCiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQpAQCAtMTQwLDEyICsxNDEsMTIgQEAKIAlhZGRfYW5kX2NoZWNrX21vZGUoaW5kZXgsICJleGVjX29uIiwgR0lUX0ZJTEVNT0RFX0JMT0JfRVhFQ1VUQUJMRSk7CiAKIAkvKiAgNSAtIGFkZCBuZXcgMDY0NCAtPiBleHBlY3QgMDY0NCAqLwotCWNsX2dpdF93cml0ZTJmaWxlKCJmaWxlbW9kZXMvbmV3X29mZiIsICJibGFoIiwKKwljbF9naXRfd3JpdGUyZmlsZSgiZmlsZW1vZGVzL25ld19vZmYiLCAiYmxhaCIsIDAsCiAJCU9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOwogCWFkZF9hbmRfY2hlY2tfbW9kZShpbmRleCwgIm5ld19vZmYiLCBHSVRfRklMRU1PREVfQkxPQik7CiAKIAkvKiA2IC0gYWRkIDA3NTUgLT4gZXhwZWN0IDA3NTUgKi8KLQljbF9naXRfd3JpdGUyZmlsZSgiZmlsZW1vZGVzL25ld19vbiIsICJibGFoIiwKKwljbF9naXRfd3JpdGUyZmlsZSgiZmlsZW1vZGVzL25ld19vbiIsICJibGFoIiwgMCwKIAkJT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDc1NSk7CiAJYWRkX2FuZF9jaGVja19tb2RlKGluZGV4LCAibmV3X29uIiwgR0lUX0ZJTEVNT0RFX0JMT0JfRVhFQ1VUQUJMRSk7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvaW5kZXgvaW5tZW1vcnkuYyBiL3Rlc3RzL2luZGV4L2lubWVtb3J5LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvaW5kZXgvaW5tZW1vcnkuYwpyZW5hbWUgdG8gdGVzdHMvaW5kZXgvaW5tZW1vcnkuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9pbmRleC9uYW1lcy5jIGIvdGVzdHMvaW5kZXgvbmFtZXMuYwpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2luZGV4L25hbWVzLmMKcmVuYW1lIHRvIHRlc3RzL2luZGV4L25hbWVzLmMKaW5kZXggOTVhNTYwZS4uOTAwN2IxYiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9pbmRleC9uYW1lcy5jCisrKyBiL3Rlc3RzL2luZGV4L25hbWVzLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAlnaXRfaW5kZXhfY2xlYXIocmVwb19pbmRleCk7CiAJY2xfYXNzZXJ0KGdpdF9pbmRleF9uYW1lX2VudHJ5Y291bnQocmVwb19pbmRleCkgPT0gMCk7CiAKLQljbF9naXRfcGFzcyhnaXRfaW5kZXhfcmVhZChyZXBvX2luZGV4KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQocmVwb19pbmRleCwgdHJ1ZSkpOwogCWNsX2Fzc2VydChnaXRfaW5kZXhfbmFtZV9lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDMpOwogCiAJY29uZmxpY3RfbmFtZSA9IGdpdF9pbmRleF9uYW1lX2dldF9ieWluZGV4KHJlcG9faW5kZXgsIDApOwpAQCAtODAsNSArODAsNjkgQEAKIAljbF9hc3NlcnQoc3RyY21wKGNvbmZsaWN0X25hbWUtPmFuY2VzdG9yLCAiYW5jZXN0b3IzIikgPT0gMCk7CiAJY2xfYXNzZXJ0KGNvbmZsaWN0X25hbWUtPm91cnMgPT0gTlVMTCk7CiAJY2xfYXNzZXJ0KHN0cmNtcChjb25mbGljdF9uYW1lLT50aGVpcnMsICJ0aGVpcnMzIikgPT0gMCk7Cit9CiAKK3ZvaWQgdGVzdF9pbmRleF9uYW1lc19fY2xlYW5lZF9vbl9yZXNldF9oYXJkKHZvaWQpCit7CisJZ2l0X29iamVjdCAqdGFyZ2V0OworCisJcmV0cmlldmVfdGFyZ2V0X2Zyb21fb2lkKCZ0YXJnZXQsIHJlcG8sICIzYTM0NTgwYTM1YWRkNDNhNGNmMzYxZThlOWEzMDA2MGE5MDVjODc2Iik7CisKKwl0ZXN0X2luZGV4X25hbWVzX19hZGQoKTsKKwljbF9naXRfcGFzcyhnaXRfcmVzZXQocmVwbywgdGFyZ2V0LCBHSVRfUkVTRVRfSEFSRCkpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfbmFtZV9lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCisJZ2l0X29iamVjdF9mcmVlKHRhcmdldCk7Cit9CisKK3ZvaWQgdGVzdF9pbmRleF9uYW1lc19fY2xlYW5lZF9vbl9yZXNldF9taXhlZCh2b2lkKQoreworCWdpdF9vYmplY3QgKnRhcmdldDsKKworCXJldHJpZXZlX3RhcmdldF9mcm9tX29pZCgmdGFyZ2V0LCByZXBvLCAiM2EzNDU4MGEzNWFkZDQzYTRjZjM2MWU4ZTlhMzAwNjBhOTA1Yzg3NiIpOworCisJdGVzdF9pbmRleF9uYW1lc19fYWRkKCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3Jlc2V0KHJlcG8sIHRhcmdldCwgR0lUX1JFU0VUX01JWEVEKSk7CisJY2xfYXNzZXJ0KGdpdF9pbmRleF9uYW1lX2VudHJ5Y291bnQocmVwb19pbmRleCkgPT0gMCk7CisKKwlnaXRfb2JqZWN0X2ZyZWUodGFyZ2V0KTsKK30KKwordm9pZCB0ZXN0X2luZGV4X25hbWVzX19jbGVhbmVkX29uX2NoZWNrb3V0X3RyZWUodm9pZCkKK3sKKwlnaXRfb2lkIG9pZDsKKwlnaXRfb2JqZWN0ICpvYmo7CisJZ2l0X2NoZWNrb3V0X29wdHMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRTX0lOSVQ7CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkUgfCBHSVRfQ0hFQ0tPVVRfVVBEQVRFX09OTFk7CisKKwl0ZXN0X2luZGV4X25hbWVzX19hZGQoKTsKKwlnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJm9pZCwgcmVwbywgInJlZnMvaGVhZHMvbWFzdGVyIik7CisJZ2l0X29iamVjdF9sb29rdXAoJm9iaiwgcmVwbywgJm9pZCwgR0lUX09CSl9BTlkpOworCWdpdF9jaGVja291dF90cmVlKHJlcG8sIG9iaiwgJm9wdHMpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfaW5kZXhfbmFtZV9lbnRyeWNvdW50KHJlcG9faW5kZXgpKTsKKworCWdpdF9vYmplY3RfZnJlZShvYmopOworfQorCit2b2lkIHRlc3RfaW5kZXhfbmFtZXNfX2NsZWFuZWRfb25fY2hlY2tvdXRfaGVhZCh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFIHwgR0lUX0NIRUNLT1VUX1VQREFURV9PTkxZOworCisJdGVzdF9pbmRleF9uYW1lc19fYWRkKCk7CisJZ2l0X2NoZWNrb3V0X2hlYWQocmVwbywgJm9wdHMpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfaW5kZXhfbmFtZV9lbnRyeWNvdW50KHJlcG9faW5kZXgpKTsKK30KKwordm9pZCB0ZXN0X2luZGV4X25hbWVzX19yZXRhaW5lZF9vbl9jaGVja291dF9pbmRleCh2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRzIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFIHwgR0lUX0NIRUNLT1VUX1VQREFURV9PTkxZOworCisJdGVzdF9pbmRleF9uYW1lc19fYWRkKCk7CisJZ2l0X2NoZWNrb3V0X2luZGV4KHJlcG8sIHJlcG9faW5kZXgsICZvcHRzKTsKKwljbF9hc3NlcnQoZ2l0X2luZGV4X25hbWVfZW50cnljb3VudChyZXBvX2luZGV4KSA+IDApOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9pbmRleC9yZWFkX3RyZWUuYyBiL3Rlc3RzL2luZGV4L3JlYWRfdHJlZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2luZGV4L3JlYWRfdHJlZS5jCnJlbmFtZSB0byB0ZXN0cy9pbmRleC9yZWFkX3RyZWUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9pbmRleC9yZW5hbWUuYyBiL3Rlc3RzL2luZGV4L3JlbmFtZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL2luZGV4L3JlbmFtZS5jCnJlbmFtZSB0byB0ZXN0cy9pbmRleC9yZW5hbWUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9pbmRleC9yZXVjLmMgYi90ZXN0cy9pbmRleC9yZXVjLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9pbmRleC9yZXVjLmMKcmVuYW1lIHRvIHRlc3RzL2luZGV4L3JldWMuYwppbmRleCA2OWVkNGE5Li5hMThkNTYwIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2luZGV4L3JldWMuYworKysgYi90ZXN0cy9pbmRleC9yZXVjLmMKQEAgLTI3Niw4ICsyNzYsNiBAQAogCQkwMTAwNjQ0LCAmdGhlaXJfb2lkKSk7CiAKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUocmVwb19pbmRleCkpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQocmVwb19pbmRleCkpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGdpdF9pbmRleF9yZXVjX2VudHJ5Y291bnQocmVwb19pbmRleCkpOwogCiAJLyogZW5zdXJlIHNvcnQgb3JkZXIgd2FzIHJvdW5kLXRyaXBwZWQgY29ycmVjdCAqLwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9pbmRleC9zdGFnZS5jIGIvdGVzdHMvaW5kZXgvc3RhZ2UuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9pbmRleC9zdGFnZS5jCnJlbmFtZSB0byB0ZXN0cy9pbmRleC9zdGFnZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL2luZGV4L3Rlc3RzLmMgYi90ZXN0cy9pbmRleC90ZXN0cy5jCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvaW5kZXgvdGVzdHMuYwpyZW5hbWUgdG8gdGVzdHMvaW5kZXgvdGVzdHMuYwppbmRleCAxYmM1ZTZhLi41YTA1YmQ4IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL2luZGV4L3Rlc3RzLmMKKysrIGIvdGVzdHMvaW5kZXgvdGVzdHMuYwpAQCAtNiw5ICs2LDEwIEBACiAjZGVmaW5lIFRFU1RfSU5ERVhfUEFUSCBjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQvaW5kZXgiKQogI2RlZmluZSBURVNUX0lOREVYMl9QQVRIIGNsX2ZpeHR1cmUoImdpdGdpdC5pbmRleCIpCiAjZGVmaW5lIFRFU1RfSU5ERVhCSUdfUEFUSCBjbF9maXh0dXJlKCJiaWcuaW5kZXgiKQorI2RlZmluZSBURVNUX0lOREVYQkFEX1BBVEggY2xfZml4dHVyZSgiYmFkLmluZGV4IikKIAogCi0vLyBTdWl0ZSBkYXRhCisvKiBTdWl0ZSBkYXRhICovCiBzdHJ1Y3QgdGVzdF9lbnRyeSB7CiAgICBzaXplX3QgaW5kZXg7CiAgICBjaGFyIHBhdGhbMTI4XTsKQEAgLTI0LDcgKzI1LDcgQEAKICAgIHs0OCwgInNyYy9yZXZvYmplY3QuaCIsIDE0NDgsIDB4NEMzRjdGRTJ9CiB9OwogCi0vLyBIZWxwZXJzCisvKiBIZWxwZXJzICovCiBzdGF0aWMgdm9pZCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpCiB7CiAJZ2l0X2J1ZiBzb3VyY2VfYnVmID0gR0lUX0JVRl9JTklUOwpAQCAtMzIsNyArMzMsNyBAQAogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZzb3VyY2VfYnVmLCBzcmMpKTsKIAotCWRzdF9mZCA9IGdpdF9mdXRpbHNfY3JlYXRfd2l0aHBhdGgoZHN0LCAwNzc3LCAwNjY2KTsgLy8tVjUzNgorCWRzdF9mZCA9IGdpdF9mdXRpbHNfY3JlYXRfd2l0aHBhdGgoZHN0LCAwNzc3LCAwNjY2KTsgLyogLVY1MzYgKi8KIAlpZiAoZHN0X2ZkIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC02Niw3ICs2Nyw3IEBACiB9CiAKIAotLy8gRml4dHVyZSBzZXR1cCBhbmQgdGVhcmRvd24KKy8qIEZpeHR1cmUgc2V0dXAgYW5kIHRlYXJkb3duICovCiB2b2lkIHRlc3RfaW5kZXhfdGVzdHNfX2luaXRpYWxpemUodm9pZCkKIHsKIH0KQEAgLTk5LDExICsxMDAsMTEgQEAKICAgIGVudHJpZXMgPSAoZ2l0X2luZGV4X2VudHJ5ICoqKWluZGV4LT5lbnRyaWVzLmNvbnRlbnRzOwogCiAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZXN0X2VudHJpZXMpOyArK2kpIHsKLSAgICAgIGdpdF9pbmRleF9lbnRyeSAqZSA9IGVudHJpZXNbdGVzdF9lbnRyaWVzW2ldLmluZGV4XTsKKwkJZ2l0X2luZGV4X2VudHJ5ICplID0gZW50cmllc1t0ZXN0X2VudHJpZXNbaV0uaW5kZXhdOwogCi0gICAgICBjbF9hc3NlcnRfZXF1YWxfcyhlLT5wYXRoLCB0ZXN0X2VudHJpZXNbaV0ucGF0aCk7Ci0gICAgICBjbF9hc3NlcnQoZS0+bXRpbWUuc2Vjb25kcyA9PSB0ZXN0X2VudHJpZXNbaV0ubXRpbWUpOwotICAgICAgY2xfYXNzZXJ0KGUtPmZpbGVfc2l6ZSA9PSB0ZXN0X2VudHJpZXNbaV0uZmlsZV9zaXplKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX3MoZS0+cGF0aCwgdGVzdF9lbnRyaWVzW2ldLnBhdGgpOworCQljbF9hc3NlcnQoZS0+bXRpbWUuc2Vjb25kcyA9PSB0ZXN0X2VudHJpZXNbaV0ubXRpbWUpOworCQljbF9hc3NlcnQoZS0+ZmlsZV9zaXplID09IHRlc3RfZW50cmllc1tpXS5maWxlX3NpemUpOwogICAgfQogCiAgICBnaXRfaW5kZXhfZnJlZShpbmRleCk7CkBAIC0xMzEsMTAgKzEzMiwxMCBAQAogICAgY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X29wZW4oJmluZGV4LCBURVNUX0lOREVYX1BBVEgpKTsKIAogICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVzdF9lbnRyaWVzKTsgKytpKSB7Ci0JICBzaXplX3QgaWR4OworCQlzaXplX3QgaWR4OwogCi0JICBjbF9hc3NlcnQoIWdpdF9pbmRleF9maW5kKCZpZHgsIGluZGV4LCB0ZXN0X2VudHJpZXNbaV0ucGF0aCkpOwotCSAgY2xfYXNzZXJ0KGlkeCA9PSB0ZXN0X2VudHJpZXNbaV0uaW5kZXgpOworCQljbF9hc3NlcnQoIWdpdF9pbmRleF9maW5kKCZpZHgsIGluZGV4LCB0ZXN0X2VudHJpZXNbaV0ucGF0aCkpOworCQljbF9hc3NlcnQoaWR4ID09IHRlc3RfZW50cmllc1tpXS5pbmRleCk7CiAgICB9CiAKICAgIGdpdF9pbmRleF9mcmVlKGluZGV4KTsKQEAgLTE0OCw3ICsxNDksNyBAQAogICAgY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X29wZW4oJmluZGV4LCAiZmFrZS1pbmRleCIpKTsKIAogICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVzdF9lbnRyaWVzKTsgKytpKSB7Ci0gICAgICBjbF9hc3NlcnQoR0lUX0VOT1RGT1VORCA9PSBnaXRfaW5kZXhfZmluZChOVUxMLCBpbmRleCwgdGVzdF9lbnRyaWVzW2ldLnBhdGgpKTsKKwkJY2xfYXNzZXJ0KEdJVF9FTk9URk9VTkQgPT0gZ2l0X2luZGV4X2ZpbmQoTlVMTCwgaW5kZXgsIHRlc3RfZW50cmllc1tpXS5wYXRoKSk7CiAgICB9CiAKICAgIGdpdF9pbmRleF9mcmVlKGluZGV4KTsKQEAgLTE3Myw3ICsxNzQsOCBAQAogCiB2b2lkIHRlc3RfaW5kZXhfdGVzdHNfX3NvcnQwKHZvaWQpCiB7Ci0gICAvLyBzb3J0IHRoZSBlbnRpcmVzIGluIGFuIGluZGV4CisJLyogc29ydCB0aGUgZW50aXJlcyBpbiBhbiBpbmRleCAqLworCiAgICAvKgogICAgKiBUT0RPOiBUaGlzIG5vIGxvbmdlciBhcHBsaWVzOgogICAgKiBpbmRleCBzb3J0aW5nIGluIEdpdCB1c2VzIHNvbWUgc3BlY2lmaWMgY2hhbmdlcyB0byB0aGUgd2F5CkBAIC0xODcsNyArMTg5LDcgQEAKIAogdm9pZCB0ZXN0X2luZGV4X3Rlc3RzX19zb3J0MSh2b2lkKQogewotICAgLy8gc29ydCB0aGUgZW50aXJlcyBpbiBhbiBlbXB0eSBpbmRleAorICAgLyogc29ydCB0aGUgZW50aXJlcyBpbiBhbiBlbXB0eSBpbmRleCAqLwogICAgZ2l0X2luZGV4ICppbmRleDsKIAogICAgY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X29wZW4oJmluZGV4LCAiZmFrZS1pbmRleCIpKTsKQEAgLTIyMyw5ICsyMjUsOSBAQAogCiAJLyogQ3JlYXRlIGEgbmV3IGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5ICovCiAJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta3BhdGgyZmlsZSgibXlyZXBvL3Rlc3QudHh0IiwgMDc3NykpOwotCWNsX2dpdF9wYXNzKGdpdF9maWxlYnVmX29wZW4oJmZpbGUsICJteXJlcG8vdGVzdC50eHQiLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgIm15cmVwby90ZXN0LnR4dCIsIDAsIDA2NjYpKTsKIAljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl93cml0ZSgmZmlsZSwgImhleSB0aGVyZVxuIiwgMTApKTsKLQljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUsIDA2NjYpKTsKKwljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUpKTsKIAogCS8qIFN0b3JlIHRoZSBleHBlY3RlZCBoYXNoIG9mIHRoZSBmaWxlL2Jsb2IKIAkgKiBUaGlzIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBleGVjdXRpbmcgdGhlIGZvbGxvd2luZwpAQCAtMzQ5LDE0ICszNTEsMTQgQEAKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgImhlbGxvIikpOwogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgpKTsgLyogcmVsb2FkICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgsIHRydWUpKTsgLyogcmVsb2FkICovCiAJY2xfYXNzZXJ0KGdpdF9pbmRleF9lbnRyeWNvdW50KGluZGV4KSA9PSAxKTsKIAljbF9hc3NlcnQoZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJoZWxsbyIsIDApICE9IE5VTEwpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlbW92ZShpbmRleCwgImhlbGxvIiwgMCkpOwogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgpKTsgLyogcmVsb2FkICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgsIHRydWUpKTsgLyogcmVsb2FkICovCiAJY2xfYXNzZXJ0KGdpdF9pbmRleF9lbnRyeWNvdW50KGluZGV4KSA9PSAwKTsKIAljbF9hc3NlcnQoZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJoZWxsbyIsIDApID09IE5VTEwpOwogCkBAIC0zODgsNyArMzkwLDcgQEAKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgImIudHh0IikpOwogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgpKTsgLyogcmVsb2FkICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgsIHRydWUpKTsgLyogcmVsb2FkICovCiAJY2xfYXNzZXJ0X2VxdWFsX2koNCwgKGludClnaXRfaW5kZXhfZW50cnljb3VudChpbmRleCkpOwogCWNsX2Fzc2VydChnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgImEvMS50eHQiLCAwKSAhPSBOVUxMKTsKIAljbF9hc3NlcnQoZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhLzIudHh0IiwgMCkgIT0gTlVMTCk7CkBAIC0zOTcsNyArMzk5LDcgQEAKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfcmVtb3ZlKGluZGV4LCAiYS8xLnR4dCIsIDApKTsKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9yZWFkKGluZGV4KSk7IC8qIHJlbG9hZCAqLworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9yZWFkKGluZGV4LCB0cnVlKSk7IC8qIHJlbG9hZCAqLwogCWNsX2Fzc2VydF9lcXVhbF9pKDMsIChpbnQpZ2l0X2luZGV4X2VudHJ5Y291bnQoaW5kZXgpKTsKIAljbF9hc3NlcnQoZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhLzEudHh0IiwgMCkgPT0gTlVMTCk7CiAJY2xfYXNzZXJ0KGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCAiYS8yLnR4dCIsIDApICE9IE5VTEwpOwpAQCAtNDA2LDcgKzQwOCw3IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlbW92ZV9kaXJlY3RvcnkoaW5kZXgsICJhIiwgMCkpOwogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgpKTsgLyogcmVsb2FkICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQoaW5kZXgsIHRydWUpKTsgLyogcmVsb2FkICovCiAJY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClnaXRfaW5kZXhfZW50cnljb3VudChpbmRleCkpOwogCWNsX2Fzc2VydChnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgImEvMS50eHQiLCAwKSA9PSBOVUxMKTsKIAljbF9hc3NlcnQoZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhLzIudHh0IiwgMCkgPT0gTlVMTCk7CkBAIC00NTksMyArNDYxLDg1IEBACiAJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKIH0KIAordm9pZCB0ZXN0X2luZGV4X3Rlc3RzX19lbG9ja2VkKHZvaWQpCit7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKKwljb25zdCBnaXRfZXJyb3IgKmVycjsKKwlpbnQgZXJyb3I7CisKKwljbF9zZXRfY2xlYW51cCgmY2xlYW51cF9teXJlcG8sIE5VTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5pdCgmcmVwbywgIi4vbXlyZXBvIiwgMCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgcmVwbykpOworCisJLyogTG9jayB0aGUgaW5kZXggZmlsZSBzbyB3ZSBmYWlsIHRvIGxvY2sgaXQgKi8KKwljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCBpbmRleC0+aW5kZXhfZmlsZV9wYXRoLCAwLCAwNjY2KSk7CisJZXJyb3IgPSBnaXRfaW5kZXhfd3JpdGUoaW5kZXgpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTE9DS0VELCBlcnJvcik7CisKKwllcnIgPSBnaXRlcnJfbGFzdCgpOworCWNsX2Fzc2VydF9lcXVhbF9pKGVyci0+a2xhc3MsIEdJVEVSUl9JTkRFWCk7CisKKwlnaXRfZmlsZWJ1Zl9jbGVhbnVwKCZmaWxlKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKK30KKwordm9pZCB0ZXN0X2luZGV4X3Rlc3RzX19yZWxvYWRfZnJvbV9kaXNrKHZvaWQpCit7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJZ2l0X2luZGV4ICpyZWFkX2luZGV4OworCWdpdF9pbmRleCAqd3JpdGVfaW5kZXg7CisKKwljbF9zZXRfY2xlYW51cCgmY2xlYW51cF9teXJlcG8sIE5VTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2RpcigiLi9teXJlcG8iLCBOVUxMLCAwNzc3LCBHSVRfTUtESVJfUEFUSCkpOworCWNsX2dpdF9ta2ZpbGUoIi4vbXlyZXBvL2EudHh0IiwgImFcbiIpOworCWNsX2dpdF9ta2ZpbGUoIi4vbXlyZXBvL2IudHh0IiwgImJcbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5pdCgmcmVwbywgIi4vbXlyZXBvIiwgMCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZ3cml0ZV9pbmRleCwgcmVwbykpOworCWNsX2Fzc2VydF9lcXVhbF9pKGZhbHNlLCB3cml0ZV9pbmRleC0+b25fZGlzayk7CisKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfb3BlbigmcmVhZF9pbmRleCwgd3JpdGVfaW5kZXgtPmluZGV4X2ZpbGVfcGF0aCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKGZhbHNlLCByZWFkX2luZGV4LT5vbl9kaXNrKTsKKworCS8qIFN0YWdlIHR3byBuZXcgZmlsZXMgYWdhaXNudCB0aGUgd3JpdGVfaW5kZXggKi8KKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aCh3cml0ZV9pbmRleCwgImEudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKHdyaXRlX2luZGV4LCAiYi50eHQiKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfc3ooMiwgZ2l0X2luZGV4X2VudHJ5Y291bnQod3JpdGVfaW5kZXgpKTsKKworCS8qIFBlcnNpc3QgdGhlIGluZGV4IGNoYW5nZXMgdG8gZGlzayAqLworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZSh3cml0ZV9pbmRleCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIHdyaXRlX2luZGV4LT5vbl9kaXNrKTsKKworCS8qIFN5bmMgdGhlIGNoYW5nZXMgYmFjayBpbnRvIHRoZSByZWFkX2luZGV4ICovCisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9pbmRleF9lbnRyeWNvdW50KHJlYWRfaW5kZXgpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9yZWFkKHJlYWRfaW5kZXgsIHRydWUpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSh0cnVlLCByZWFkX2luZGV4LT5vbl9kaXNrKTsKKworCWNsX2Fzc2VydF9lcXVhbF9zeigyLCBnaXRfaW5kZXhfZW50cnljb3VudChyZWFkX2luZGV4KSk7CisKKwkvKiBSZW1vdmUgdGhlIGluZGV4IGZpbGUgZnJvbSB0aGUgZmlsZXN5c3RlbSAqLworCWNsX2dpdF9wYXNzKHBfdW5saW5rKHdyaXRlX2luZGV4LT5pbmRleF9maWxlX3BhdGgpKTsKKworCS8qIFN5bmMgdGhlIGNoYW5nZXMgYmFjayBpbnRvIHRoZSByZWFkX2luZGV4ICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3JlYWQocmVhZF9pbmRleCwgdHJ1ZSkpOworCWNsX2Fzc2VydF9lcXVhbF9pKGZhbHNlLCByZWFkX2luZGV4LT5vbl9kaXNrKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZ2l0X2luZGV4X2VudHJ5Y291bnQocmVhZF9pbmRleCkpOworCisJZ2l0X2luZGV4X2ZyZWUocmVhZF9pbmRleCk7CisJZ2l0X2luZGV4X2ZyZWUod3JpdGVfaW5kZXgpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Cit9CisKK3ZvaWQgdGVzdF9pbmRleF90ZXN0c19fY29ycnVwdGVkX2V4dGVuc2lvbih2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisKKwljbF9naXRfZmFpbF93aXRoKGdpdF9pbmRleF9vcGVuKCZpbmRleCwgVEVTVF9JTkRFWEJBRF9QQVRIKSwgR0lUX0VSUk9SKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbWFpbi5jIGIvdGVzdHMvbWFpbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL21haW4uYwpyZW5hbWUgdG8gdGVzdHMvbWFpbi5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL21lcmdlL21lcmdlX2hlbHBlcnMuYyBiL3Rlc3RzL21lcmdlL21lcmdlX2hlbHBlcnMuYwpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL21lcmdlL21lcmdlX2hlbHBlcnMuYwpyZW5hbWUgdG8gdGVzdHMvbWVyZ2UvbWVyZ2VfaGVscGVycy5jCmluZGV4IGU0MDkyNzguLjQzNjE5YmUgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvbWVyZ2UvbWVyZ2VfaGVscGVycy5jCisrKyBiL3Rlc3RzL21lcmdlL21lcmdlX2hlbHBlcnMuYwpAQCAtNTIsNiArNTIsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IG1lcmdlX2JyYW5jaGVzKGdpdF9tZXJnZV9yZXN1bHQgKipyZXN1bHQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpvdXJzX2JyYW5jaCwgY29uc3QgY2hhciAqdGhlaXJzX2JyYW5jaCwgZ2l0X21lcmdlX29wdHMgKm9wdHMpCit7CisJZ2l0X3JlZmVyZW5jZSAqaGVhZF9yZWYsICp0aGVpcnNfcmVmOworCWdpdF9tZXJnZV9oZWFkICp0aGVpcnNfaGVhZDsKKwlnaXRfY2hlY2tvdXRfb3B0cyBoZWFkX2NoZWNrb3V0X29wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCisJaGVhZF9jaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY19jcmVhdGUoJmhlYWRfcmVmLCByZXBvLCAiSEVBRCIsIG91cnNfYnJhbmNoLCAxKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NoZWNrb3V0X2hlYWQocmVwbywgJmhlYWRfY2hlY2tvdXRfb3B0cykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnRoZWlyc19yZWYsIHJlcG8sIHRoZWlyc19icmFuY2gpKTsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfaGVhZF9mcm9tX3JlZigmdGhlaXJzX2hlYWQsIHJlcG8sIHRoZWlyc19yZWYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZShyZXN1bHQsIHJlcG8sIChjb25zdCBnaXRfbWVyZ2VfaGVhZCAqKikmdGhlaXJzX2hlYWQsIDEsIG9wdHMpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkX3JlZik7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHRoZWlyc19yZWYpOworCWdpdF9tZXJnZV9oZWFkX2ZyZWUodGhlaXJzX2hlYWQpOworCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgbWVyZ2VfX2R1bXBfaW5kZXhfZW50cmllcyhnaXRfdmVjdG9yICppbmRleF9lbnRyaWVzKQogewogCXNpemVfdCBpOwpAQCAtMjkxLDcgKzMxNCw3IEBACiAJZ2l0X2J1ZiB3ZCA9IEdJVF9CVUZfSU5JVDsKIAogCWdpdF9idWZfcHV0cygmd2QsIHJlcG8tPndvcmtkaXIpOwotCWdpdF9wYXRoX2RpcmVhY2goJndkLCBkaXJjb3VudCwgJmFjdHVhbF9sZW4pOworCWdpdF9wYXRoX2RpcmVhY2goJndkLCAwLCBkaXJjb3VudCwgJmFjdHVhbF9sZW4pOwogCiAJaWYgKGFjdHVhbF9sZW4gIT0gZXhwZWN0ZWRfbGVuKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbWVyZ2UvbWVyZ2VfaGVscGVycy5oIGIvdGVzdHMvbWVyZ2UvbWVyZ2VfaGVscGVycy5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvbWVyZ2UvbWVyZ2VfaGVscGVycy5oCnJlbmFtZSB0byB0ZXN0cy9tZXJnZS9tZXJnZV9oZWxwZXJzLmgKaW5kZXggY2I3MThlMC4uYWUzMjc0NCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9tZXJnZS9tZXJnZV9oZWxwZXJzLmgKKysrIGIvdGVzdHMvbWVyZ2UvbWVyZ2VfaGVscGVycy5oCkBAIC00NCw2ICs0NCw5IEBACiAJY29uc3QgY2hhciAqb3Vyc19uYW1lLCBjb25zdCBjaGFyICp0aGVpcnNfbmFtZSwKIAlnaXRfbWVyZ2VfdHJlZV9vcHRzICpvcHRzKTsKIAoraW50IG1lcmdlX2JyYW5jaGVzKGdpdF9tZXJnZV9yZXN1bHQgKipyZXN1bHQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKm91cnNfYnJhbmNoLCBjb25zdCBjaGFyICp0aGVpcnNfYnJhbmNoLCBnaXRfbWVyZ2Vfb3B0cyAqb3B0cyk7CisKIGludCBtZXJnZV90ZXN0X2RpZmZfbGlzdChnaXRfbWVyZ2VfZGlmZl9saXN0ICpkaWZmX2xpc3QsIGNvbnN0IHN0cnVjdCBtZXJnZV9pbmRleF9lbnRyeSBleHBlY3RlZFtdLCBzaXplX3QgZXhwZWN0ZWRfbGVuKTsKIAogaW50IG1lcmdlX3Rlc3RfbWVyZ2VfY29uZmxpY3RzKGdpdF92ZWN0b3IgKmNvbmZsaWN0cywgY29uc3Qgc3RydWN0IG1lcmdlX2luZGV4X2NvbmZsaWN0X2RhdGEgZXhwZWN0ZWRbXSwgc2l6ZV90IGV4cGVjdGVkX2xlbik7CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL21lcmdlL3RyZWVzL2F1dG9tZXJnZS5jIGIvdGVzdHMvbWVyZ2UvdHJlZXMvYXV0b21lcmdlLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9tZXJnZS90cmVlcy9hdXRvbWVyZ2UuYwpyZW5hbWUgdG8gdGVzdHMvbWVyZ2UvdHJlZXMvYXV0b21lcmdlLmMKaW5kZXggMDRhN2JlZi4uNzQ2Y2U1MCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9tZXJnZS90cmVlcy9hdXRvbWVyZ2UuYworKysgYi90ZXN0cy9tZXJnZS90cmVlcy9hdXRvbWVyZ2UuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJY2xfYXNzZXJ0KGVudHJ5LT5maWxlX3NpemUgPT0gc3RybGVuKEFVVE9NRVJHRUFCTEVfTUVSR0VEX0ZJTEUpKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9vYmplY3RfbG9va3VwKChnaXRfb2JqZWN0ICoqKSZibG9iLCByZXBvLCAmZW50cnktPm9pZCwgR0lUX09CSl9CTE9CKSk7Ci0JY2xfYXNzZXJ0KG1lbWNtcChnaXRfYmxvYl9yYXdjb250ZW50KGJsb2IpLCBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFLCBlbnRyeS0+ZmlsZV9zaXplKSA9PSAwKTsKKwljbF9hc3NlcnQobWVtY21wKGdpdF9ibG9iX3Jhd2NvbnRlbnQoYmxvYiksIEFVVE9NRVJHRUFCTEVfTUVSR0VEX0ZJTEUsIChzaXplX3QpZW50cnktPmZpbGVfc2l6ZSkgPT0gMCk7CiAKIAlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiAJZ2l0X2Jsb2JfZnJlZShibG9iKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbWVyZ2UvdHJlZXMvbW9kZWNvbmZsaWN0LmMgYi90ZXN0cy9tZXJnZS90cmVlcy9tb2RlY29uZmxpY3QuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9tZXJnZS90cmVlcy9tb2RlY29uZmxpY3QuYwpyZW5hbWUgdG8gdGVzdHMvbWVyZ2UvdHJlZXMvbW9kZWNvbmZsaWN0LmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbWVyZ2UvdHJlZXMvcmVuYW1lcy5jIGIvdGVzdHMvbWVyZ2UvdHJlZXMvcmVuYW1lcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL21lcmdlL3RyZWVzL3JlbmFtZXMuYwpyZW5hbWUgdG8gdGVzdHMvbWVyZ2UvdHJlZXMvcmVuYW1lcy5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL21lcmdlL3RyZWVzL3RyZWVkaWZmLmMgYi90ZXN0cy9tZXJnZS90cmVlcy90cmVlZGlmZi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL21lcmdlL3RyZWVzL3RyZWVkaWZmLmMKcmVuYW1lIHRvIHRlc3RzL21lcmdlL3RyZWVzL3RyZWVkaWZmLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbWVyZ2UvdHJlZXMvdHJpdmlhbC5jIGIvdGVzdHMvbWVyZ2UvdHJlZXMvdHJpdmlhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL21lcmdlL3RyZWVzL3RyaXZpYWwuYwpyZW5hbWUgdG8gdGVzdHMvbWVyZ2UvdHJlZXMvdHJpdmlhbC5jCmRpZmYgLS1naXQgYS90ZXN0cy9tZXJnZS93b3JrZGlyL2Zhc3Rmb3J3YXJkLmMgYi90ZXN0cy9tZXJnZS93b3JrZGlyL2Zhc3Rmb3J3YXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxZjM4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21lcmdlL3dvcmtkaXIvZmFzdGZvcndhcmQuYwpAQCAtMCwwICsxLDE0OCBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImdpdDIvcmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImdpdDIvbWVyZ2UuaCIKKyNpbmNsdWRlICJnaXQyL3N5cy9pbmRleC5oIgorI2luY2x1ZGUgIm1lcmdlLmgiCisjaW5jbHVkZSAiLi4vbWVyZ2VfaGVscGVycy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpyZXBvOworc3RhdGljIGdpdF9pbmRleCAqcmVwb19pbmRleDsKKworI2RlZmluZSBURVNUX1JFUE9fUEFUSCAibWVyZ2UtcmVzb2x2ZSIKKyNkZWZpbmUgVEVTVF9JTkRFWF9QQVRIIFRFU1RfUkVQT19QQVRIICIvLmdpdC9pbmRleCIKKworI2RlZmluZSBUSEVJUlNfRkFTVEZPUldBUkRfQlJBTkNICSJmZl9icmFuY2giCisjZGVmaW5lIFRIRUlSU19GQVNURk9SV0FSRF9PSUQJCSJmZDg5ZjhjZmZiNjYzYWM4OTA5NWEwZjk3NjQ5MDJlOTNjZWFjYTZhIgorCisjZGVmaW5lIFRIRUlSU19OT0ZBU1RGT1JXQVJEX0JSQU5DSAkiYnJhbmNoIgorI2RlZmluZSBUSEVJUlNfTk9GQVNURk9SV0FSRF9PSUQJIjdjYjYzZWVkNTk3MTMwYmE0YWJiODdiM2U1NDRiODUwMjE5MDU1MjAiCisKKworLy8gRml4dHVyZSBzZXR1cCBhbmQgdGVhcmRvd24KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX2Zhc3Rmb3J3YXJkX19pbml0aWFsaXplKHZvaWQpCit7CisJcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoVEVTVF9SRVBPX1BBVEgpOworCWdpdF9yZXBvc2l0b3J5X2luZGV4KCZyZXBvX2luZGV4LCByZXBvKTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfZmFzdGZvcndhcmRfX2NsZWFudXAodm9pZCkKK3sKKwlnaXRfaW5kZXhfZnJlZShyZXBvX2luZGV4KTsKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3N0YXRpYyBnaXRfbWVyZ2VfcmVzdWx0ICptZXJnZV9mYXN0Zm9yd2FyZF9icmFuY2goaW50IGZsYWdzKQoreworCWdpdF9yZWZlcmVuY2UgKnRoZWlyX3JlZjsKKwlnaXRfbWVyZ2VfaGVhZCAqdGhlaXJfaGVhZHNbMV07CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCWdpdF9tZXJnZV9vcHRzIG9wdHMgPSBHSVRfTUVSR0VfT1BUU19JTklUOworCisJb3B0cy5tZXJnZV9mbGFncyA9IGZsYWdzOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnRoZWlyX3JlZiwgcmVwbywgR0lUX1JFRlNfSEVBRFNfRElSIFRIRUlSU19GQVNURk9SV0FSRF9CUkFOQ0gpKTsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfaGVhZF9mcm9tX3JlZigmdGhlaXJfaGVhZHNbMF0sIHJlcG8sIHRoZWlyX3JlZikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlKCZyZXN1bHQsIHJlcG8sIChjb25zdCBnaXRfbWVyZ2VfaGVhZCAqKil0aGVpcl9oZWFkcywgMSwgJm9wdHMpKTsKKworCWdpdF9tZXJnZV9oZWFkX2ZyZWUodGhlaXJfaGVhZHNbMF0pOworCWdpdF9yZWZlcmVuY2VfZnJlZSh0aGVpcl9yZWYpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfZmFzdGZvcndhcmRfX2Zhc3Rmb3J3YXJkKHZvaWQpCit7CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCWdpdF9vaWQgZXhwZWN0ZWQsIGZmX29pZDsKKworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmZXhwZWN0ZWQsIFRIRUlSU19GQVNURk9SV0FSRF9PSUQpKTsKKworCWNsX2Fzc2VydChyZXN1bHQgPSBtZXJnZV9mYXN0Zm9yd2FyZF9icmFuY2goMCkpOworCWNsX2Fzc2VydChnaXRfbWVyZ2VfcmVzdWx0X2lzX2Zhc3Rmb3J3YXJkKHJlc3VsdCkpOworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9yZXN1bHRfZmFzdGZvcndhcmRfb2lkKCZmZl9vaWQsIHJlc3VsdCkpOworCWNsX2Fzc2VydChnaXRfb2lkX2NtcCgmZmZfb2lkLCAmZXhwZWN0ZWQpID09IDApOworCisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX2Zhc3Rmb3J3YXJkX19mYXN0Zm9yd2FyZF9vbmx5KHZvaWQpCit7CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCWdpdF9tZXJnZV9vcHRzIG9wdHMgPSBHSVRfTUVSR0VfT1BUU19JTklUOworCWdpdF9yZWZlcmVuY2UgKnRoZWlyX3JlZjsKKwlnaXRfbWVyZ2VfaGVhZCAqdGhlaXJfaGVhZDsKKwlpbnQgZXJyb3I7CisKKwlvcHRzLm1lcmdlX2ZsYWdzID0gR0lUX01FUkdFX0ZBU1RGT1JXQVJEX09OTFk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmdGhlaXJfcmVmLCByZXBvLCBHSVRfUkVGU19IRUFEU19ESVIgVEhFSVJTX05PRkFTVEZPUldBUkRfQlJBTkNIKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2hlYWRfZnJvbV9yZWYoJnRoZWlyX2hlYWQsIHJlcG8sIHRoZWlyX3JlZikpOworCisJY2xfZ2l0X2ZhaWwoKGVycm9yID0gZ2l0X21lcmdlKCZyZXN1bHQsIHJlcG8sIChjb25zdCBnaXRfbWVyZ2VfaGVhZCAqKikmdGhlaXJfaGVhZCwgMSwgJm9wdHMpKSk7CisJY2xfYXNzZXJ0KGVycm9yID09IEdJVF9FTk9ORkFTVEZPUldBUkQpOworCisJZ2l0X21lcmdlX2hlYWRfZnJlZSh0aGVpcl9oZWFkKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUodGhlaXJfcmVmKTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfZmFzdGZvcndhcmRfX25vX2Zhc3Rmb3J3YXJkKHZvaWQpCit7CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCisJc3RydWN0IG1lcmdlX2luZGV4X2VudHJ5IG1lcmdlX2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCAiMjMzYzA5MTljOTk4ZWQxMTBhNGI2ZmYzNmYzNTNhZWM4YjcxMzQ4NyIsIDAsICJhZGRlZC1pbi1tYXN0ZXIudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlZTNmYTFiOGMwMGFmZjdmZTAyMDY1ZmRiNTA4NjRiYjBkOTMyY2NmIiwgMCwgImF1dG9tZXJnZWFibGUudHh0IiB9LAorCQl7IDAxMDA2NDQsICJhYjZjNDRhMmU4NDQ5MmFkNGI0MWJiNmJhYzg3MzUzZTlkMDJhYzhiIiwgMCwgImNoYW5nZWQtaW4tYnJhbmNoLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYmQ5Y2I0Y2QwYTc3MGNiOWFkY2I1ZmNlMjEyMTQyZWY0MGVhMWMzNSIsIDAsICJjaGFuZ2VkLWluLW1hc3Rlci50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjRlODg2ZTYwMjUyOWNhYTlhYjExZDcxZjg2NjM0YmQxYjZlMGRlMTAiLCAwLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQl7IDAxMDA2NDQsICIzNjRiYmU0Y2U4MGM3YmQzMWU2MzA3ZGNlNzdkNDZlM2UxNzU5ZmIzIiwgMCwgIm5ldy1pbi1mZi50eHQiIH0sCisJCXsgMDEwMDY0NCwgImRmZTNmMjJiYWExZjZmY2U1NDQ3OTAxYzMwODZiYWUzNjhkZTZiZGQiLCAwLCAicmVtb3ZlZC1pbi1icmFuY2gudHh0IiB9LAorCQl7IDAxMDA2NDQsICJjOGYwNmYyZTNiYjI5NjQxNzQ2NzdlOTFmMGFiZWFkMGU0M2M5ZTVkIiwgMCwgInVuY2hhbmdlZC50eHQiIH0sCisJfTsKKworCWNsX2Fzc2VydChyZXN1bHQgPSBtZXJnZV9mYXN0Zm9yd2FyZF9icmFuY2goR0lUX01FUkdFX05PX0ZBU1RGT1JXQVJEKSk7CisJY2xfYXNzZXJ0KCFnaXRfbWVyZ2VfcmVzdWx0X2lzX2Zhc3Rmb3J3YXJkKHJlc3VsdCkpOworCisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfaW5kZXgocmVwb19pbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgOCkpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX2Zhc3Rmb3J3YXJkX191cHRvZGF0ZSh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKnRoZWlyX3JlZjsKKwlnaXRfbWVyZ2VfaGVhZCAqdGhlaXJfaGVhZHNbMV07CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnRoZWlyX3JlZiwgcmVwbywgR0lUX0hFQURfRklMRSkpOworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9oZWFkX2Zyb21fcmVmKCZ0aGVpcl9oZWFkc1swXSwgcmVwbywgdGhlaXJfcmVmKSk7CisKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2UoJnJlc3VsdCwgcmVwbywgKGNvbnN0IGdpdF9tZXJnZV9oZWFkICoqKXRoZWlyX2hlYWRzLCAxLCBOVUxMKSk7CisKKwljbF9hc3NlcnQoZ2l0X21lcmdlX3Jlc3VsdF9pc191cHRvZGF0ZShyZXN1bHQpKTsKKworCWdpdF9tZXJnZV9oZWFkX2ZyZWUodGhlaXJfaGVhZHNbMF0pOworCWdpdF9yZWZlcmVuY2VfZnJlZSh0aGVpcl9yZWYpOworCWdpdF9tZXJnZV9yZXN1bHRfZnJlZShyZXN1bHQpOworfQorCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl9mYXN0Zm9yd2FyZF9fdXB0b2RhdGVfbWVyZ2luZ19wcmV2X2NvbW1pdCh2b2lkKQoreworCWdpdF9vaWQgdGhlaXJfb2lkOworCWdpdF9tZXJnZV9oZWFkICp0aGVpcl9oZWFkc1sxXTsKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJnRoZWlyX29pZCwgImM2MDdmYzMwODgzZTMzNWRlZjI4Y2Q2ODZiNTFmNmNmYTAyYjA2ZWMiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2hlYWRfZnJvbV9vaWQoJnRoZWlyX2hlYWRzWzBdLCByZXBvLCAmdGhlaXJfb2lkKSk7CisKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2UoJnJlc3VsdCwgcmVwbywgKGNvbnN0IGdpdF9tZXJnZV9oZWFkICoqKXRoZWlyX2hlYWRzLCAxLCBOVUxMKSk7CisKKwljbF9hc3NlcnQoZ2l0X21lcmdlX3Jlc3VsdF9pc191cHRvZGF0ZShyZXN1bHQpKTsKKworCWdpdF9tZXJnZV9oZWFkX2ZyZWUodGhlaXJfaGVhZHNbMF0pOworCWdpdF9tZXJnZV9yZXN1bHRfZnJlZShyZXN1bHQpOworfQorCmRpZmYgLS1naXQgYS90ZXN0cy9tZXJnZS93b3JrZGlyL3JlbmFtZXMuYyBiL3Rlc3RzL21lcmdlL3dvcmtkaXIvcmVuYW1lcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODM5NzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tZXJnZS93b3JrZGlyL3JlbmFtZXMuYwpAQCAtMCwwICsxLDE1NiBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImdpdDIvcmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgImdpdDIvbWVyZ2UuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJtZXJnZS5oIgorI2luY2x1ZGUgIi4uL21lcmdlX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJmaWxlb3BzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisKKyNkZWZpbmUgVEVTVF9SRVBPX1BBVEggIm1lcmdlLXJlc29sdmUiCisKKyNkZWZpbmUgQlJBTkNIX1JFTkFNRV9PVVJTCQkJCQkicmVuYW1lX2NvbmZsaWN0X291cnMiCisjZGVmaW5lIEJSQU5DSF9SRU5BTUVfVEhFSVJTCQkJCSJyZW5hbWVfY29uZmxpY3RfdGhlaXJzIgorCisvLyBGaXh0dXJlIHNldHVwIGFuZCB0ZWFyZG93bgordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfcmVuYW1lc19faW5pdGlhbGl6ZSh2b2lkKQoreworCXJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KFRFU1RfUkVQT19QQVRIKTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfcmVuYW1lc19fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfcmVuYW1lc19fcmVuYW1lcyh2b2lkKQoreworCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdDsKKwlnaXRfbWVyZ2Vfb3B0cyBvcHRzID0gR0lUX01FUkdFX09QVFNfSU5JVDsKKworCXN0cnVjdCBtZXJnZV9pbmRleF9lbnRyeSBtZXJnZV9pbmRleF9lbnRyaWVzW10gPSB7CisJCXsgMDEwMDY0NCwgIjY4YzZjODRiMDkxOTI2YzdkOTBhYTZhNzliMmJjM2JiNmFkY2NkOGUiLCAwLCAiMGEtbm8tY2hhbmdlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZjBjZTJiOGU0OTg2MDg0ZDliMzA4ZmI3MjcwOWU0MTRjMjNlYjVlNiIsIDAsICIwYi1kdXBsaWNhdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI4YWFjNzVkZTJhMzRiNGQzNDBiZjYyYTZlNTgxOTcyNjljYjU1Nzk3IiwgMCwgIjBiLXJld3JpdHRlbi1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMmY1NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMSIsIDAsICIwYy1kdXBsaWNhdGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjdlZGM3MjYzMjVkYTcyNjc1MWE0MTk1ZTQzNGU0Mzc3YjBmNjdmOWEiLCAwLCAiMGMtcmV3cml0dGVuLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjBkODcyZjhlODcxYTMwMjA4MzA1OTc4ZWNiZjllNjZkODY0ZjE2MzgiLCAwLCAiMWEtbmV3bmFtZS1pbi1vdXJzLWVkaXRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMGQ0NTk0ZTE2ZjJlMTkxMDdlM2ZhN2VhNjNlN2FhYWZmMzA1ZmZiIiwgMCwgIjFhLW5ld25hbWUtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImVkOTUyM2U2MmU0NTNlNTBkZDliZTE2MDZhZjE5Mzk5Yjk2ZTM5N2EiLCAwLCAiMWItbmV3bmFtZS1pbi10aGVpcnMtZWRpdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyYjVmMWYxODFlZTNiNThlYTc1MWY1ZGQ1ZDhmOWI0NDU1MjBhMTM2IiwgMCwgIjFiLW5ld25hbWUtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMTc4OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MiIsIDAsICIyLW5ld25hbWUtaW4tYm90aC50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjE4Y2IzMTZiMWNlZmEwZjhhNjk0NmYwZTIwMWE4ZTFhNmY4NDVhYjkiLCAwLCAiM2EtbmV3bmFtZS1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMzYyMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NSIsIDAsICIzYi1uZXduYW1lLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyMjc3OTJiNTJhYWEwYjIzOGJlYTAwZWM3ZTUwOWIwMjYyM2YxNjhjIiwgMCwgIjRhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0fkhFQUQiIH0sCisJCXsgMDEwMDY0NCwgIjhiNWI1M2NiMmFhOWNlYjExMzlmNTMxMmZjZmEzY2MzYzVhNDdjOWEiLCAwLCAiNGEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHR+cmVuYW1lX2NvbmZsaWN0X3RoZWlycyIgfSwKKwkJeyAwMTAwNjQ0LCAiZGU4NzJlZTM2MThiODk0OTkyZTlkMWUxOGJhMmViZTI1NmExMTJmOSIsIDAsICI0Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dH5IRUFEIiB9LAorCQl7IDAxMDA2NDQsICI5OGQ1MmQwN2MwYjBiYmYyYjQ2NTQ4ZjZhYTUyMTI5NWMyY2I1NWRiIiwgMCwgIjRiLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0fnJlbmFtZV9jb25mbGljdF90aGVpcnMiIH0sCisJCXsgMDEwMDY0NCwgImQzNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYiLCAwLCAiNWEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHR+SEVBRCIgfSwKKwkJeyAwMTAwNjQ0LCAiOThiYTQyMDVmY2YzMWY1ZGQ5M2M5MTZkMzVmZTNmM2IzZDBlNjcxNCIsIDAsICI1YS1uZXduYW1lLWluLW91cnMtYWRkZWQtaW4tdGhlaXJzLnR4dH5yZW5hbWVfY29uZmxpY3RfdGhlaXJzIiB9LAorCQl7IDAxMDA2NDQsICIzODVjOGEwZjI2ZGRmNzllOTA0MWUxNWUxN2RjMzUyZWQyYzRjY2VkIiwgMCwgIjViLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0fkhFQUQiIH0sCisJCXsgMDEwMDY0NCwgIjYzMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgiLCAwLCAiNWItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHR+cmVuYW1lX2NvbmZsaWN0X3RoZWlycyIgfSwKKwkJeyAwMTAwNjQ0LCAiZDhmYTc3YjY4MzMwODJjMWVhMzZiNzgyOGE1ODJkNGM0Mzg4MjQ1MCIsIDAsICI2LWJvdGgtcmVuYW1lZC0xLXRvLTItb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQ4ZmE3N2I2ODMzMDgyYzFlYTM2Yjc4MjhhNTgyZDRjNDM4ODI0NTAiLCAwLCAiNi1ib3RoLXJlbmFtZWQtMS10by0yLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAwLCAiNy1ib3RoLXJlbmFtZWQudHh0fkhFQUQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAwLCAiNy1ib3RoLXJlbmFtZWQudHh0fnJlbmFtZV9jb25mbGljdF90aGVpcnMiIH0sCisJfTsKKworCW9wdHMubWVyZ2VfdHJlZV9vcHRzLmZsYWdzIHw9IEdJVF9NRVJHRV9UUkVFX0ZJTkRfUkVOQU1FUzsKKwlvcHRzLm1lcmdlX3RyZWVfb3B0cy5yZW5hbWVfdGhyZXNob2xkID0gNTA7CisKKwljbF9naXRfcGFzcyhtZXJnZV9icmFuY2hlcygmcmVzdWx0LCByZXBvLCBHSVRfUkVGU19IRUFEU19ESVIgQlJBTkNIX1JFTkFNRV9PVVJTLCBHSVRfUkVGU19IRUFEU19ESVIgQlJBTkNIX1JFTkFNRV9USEVJUlMsICZvcHRzKSk7CisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3Rfd29ya2RpcihyZXBvLCBtZXJnZV9pbmRleF9lbnRyaWVzLCAyNCkpOworCisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3JlbmFtZXNfX291cnModm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdDsKKwlnaXRfbWVyZ2Vfb3B0cyBvcHRzID0gR0lUX01FUkdFX09QVFNfSU5JVDsKKworCXN0cnVjdCBtZXJnZV9pbmRleF9lbnRyeSBtZXJnZV9pbmRleF9lbnRyaWVzW10gPSB7CisJCXsgMDEwMDY0NCwgIjY4YzZjODRiMDkxOTI2YzdkOTBhYTZhNzliMmJjM2JiNmFkY2NkOGUiLCAwLCAiMGEtbm8tY2hhbmdlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZjBjZTJiOGU0OTg2MDg0ZDliMzA4ZmI3MjcwOWU0MTRjMjNlYjVlNiIsIDAsICIwYi1kdXBsaWNhdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlMzc2ZmJkZDA2ZWJmMDIxYzkyNzI0ZGE5ZjI2ZjQ0MjEyNzM0ZTNlIiwgMCwgIjBiLXJld3JpdHRlbi1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMmY1NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMSIsIDAsICIwYy1kdXBsaWNhdGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImVmYzkxMjFmZGVkYWYwOGJhMTgwYjUzZWJmYmNmNzFiZDQ4OGVkMDkiLCAwLCAiMGMtcmV3cml0dGVuLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjBkODcyZjhlODcxYTMwMjA4MzA1OTc4ZWNiZjllNjZkODY0ZjE2MzgiLCAwLCAiMWEtbmV3bmFtZS1pbi1vdXJzLWVkaXRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMGQ0NTk0ZTE2ZjJlMTkxMDdlM2ZhN2VhNjNlN2FhYWZmMzA1ZmZiIiwgMCwgIjFhLW5ld25hbWUtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImVkOTUyM2U2MmU0NTNlNTBkZDliZTE2MDZhZjE5Mzk5Yjk2ZTM5N2EiLCAwLCAiMWItbmV3bmFtZS1pbi10aGVpcnMtZWRpdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyYjVmMWYxODFlZTNiNThlYTc1MWY1ZGQ1ZDhmOWI0NDU1MjBhMTM2IiwgMCwgIjFiLW5ld25hbWUtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMTc4OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MiIsIDAsICIyLW5ld25hbWUtaW4tYm90aC50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjE4Y2IzMTZiMWNlZmEwZjhhNjk0NmYwZTIwMWE4ZTFhNmY4NDVhYjkiLCAwLCAiM2EtbmV3bmFtZS1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMzYyMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NSIsIDAsICIzYi1uZXduYW1lLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyMjc3OTJiNTJhYWEwYjIzOGJlYTAwZWM3ZTUwOWIwMjYyM2YxNjhjIiwgMCwgIjRhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkZTg3MmVlMzYxOGI4OTQ5OTJlOWQxZTE4YmEyZWJlMjU2YTExMmY5IiwgMCwgIjRiLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMzcxOWE1YWU4ZTRkOTIyNzZiNTMxM2NlOTc2ZjZlZTVhZjJiNDM2IiwgMCwgIjVhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIzODVjOGEwZjI2ZGRmNzllOTA0MWUxNWUxN2RjMzUyZWQyYzRjY2VkIiwgMCwgIjViLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI2MzI0NzEyNTM4NmRlOWVjOTBhMjdhZDM2MTY5MzA3YmY4YTExYTM4IiwgMCwgIjViLXJlbmFtZWQtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkOGZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwIiwgMCwgIjYtYm90aC1yZW5hbWVkLTEtdG8tMi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYjY5ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNyIsIDAsICI3LWJvdGgtcmVuYW1lZC1zaWRlLTIudHh0IiB9LAorCQl7IDAxMDA2NDQsICJiNDI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExIiwgMCwgIjctYm90aC1yZW5hbWVkLnR4dCIgfSwKKwl9OworCisJb3B0cy5tZXJnZV90cmVlX29wdHMuZmxhZ3MgfD0gR0lUX01FUkdFX1RSRUVfRklORF9SRU5BTUVTOworCW9wdHMubWVyZ2VfdHJlZV9vcHRzLnJlbmFtZV90aHJlc2hvbGQgPSA1MDsKKwlvcHRzLmNoZWNrb3V0X29wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfU0FGRSB8IEdJVF9DSEVDS09VVF9VU0VfT1VSUzsKKworCWNsX2dpdF9wYXNzKG1lcmdlX2JyYW5jaGVzKCZyZXN1bHQsIHJlcG8sIEdJVF9SRUZTX0hFQURTX0RJUiBCUkFOQ0hfUkVOQU1FX09VUlMsIEdJVF9SRUZTX0hFQURTX0RJUiBCUkFOQ0hfUkVOQU1FX1RIRUlSUywgJm9wdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKwljbF9hc3NlcnQobWVyZ2VfdGVzdF93b3JrZGlyKHJlcG8sIG1lcmdlX2luZGV4X2VudHJpZXMsIDIwKSk7CisKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3JlbmFtZXNfX3NpbWlsYXIodm9pZCkKK3sKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisJZ2l0X21lcmdlX29wdHMgb3B0cyA9IEdJVF9NRVJHRV9PUFRTX0lOSVQ7CisKKwkvKgorCSAqIE5vdGU6IHRoaXMgZGlmZmVycyBzbGlnaHRseSBmcm9tIHRoZSBjb3JlIGdpdCBtZXJnZSByZXN1bHQgLSB0aGVyZSwgNGEgaXMKKwkgKiB0cmFja2VkIGFzIGEgcmVuYW1lL2RlbGV0ZSBpbnN0ZWFkIG9mIGEgcmVuYW1lL2FkZCBhbmQgdGhlIHRoZWlycyBzaWRlCisJICogaXMgbm90IHBsYWNlZCBpbiB3b3JrZGlyIGluIGFueSBmb3JtLgorCSAqLworCXN0cnVjdCBtZXJnZV9pbmRleF9lbnRyeSBtZXJnZV9pbmRleF9lbnRyaWVzW10gPSB7CisJCXsgMDEwMDY0NCwgIjY4YzZjODRiMDkxOTI2YzdkOTBhYTZhNzliMmJjM2JiNmFkY2NkOGUiLCAwLCAiMGEtbm8tY2hhbmdlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZjBjZTJiOGU0OTg2MDg0ZDliMzA4ZmI3MjcwOWU0MTRjMjNlYjVlNiIsIDAsICIwYi1kdXBsaWNhdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICI4YWFjNzVkZTJhMzRiNGQzNDBiZjYyYTZlNTgxOTcyNjljYjU1Nzk3IiwgMCwgIjBiLXJld3JpdHRlbi1pbi1vdXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMmY1NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMSIsIDAsICIwYy1kdXBsaWNhdGVkLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjdlZGM3MjYzMjVkYTcyNjc1MWE0MTk1ZTQzNGU0Mzc3YjBmNjdmOWEiLCAwLCAiMGMtcmV3cml0dGVuLWluLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjBkODcyZjhlODcxYTMwMjA4MzA1OTc4ZWNiZjllNjZkODY0ZjE2MzgiLCAwLCAiMWEtbmV3bmFtZS1pbi1vdXJzLWVkaXRlZC1pbi10aGVpcnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkMGQ0NTk0ZTE2ZjJlMTkxMDdlM2ZhN2VhNjNlN2FhYWZmMzA1ZmZiIiwgMCwgIjFhLW5ld25hbWUtaW4tb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImVkOTUyM2U2MmU0NTNlNTBkZDliZTE2MDZhZjE5Mzk5Yjk2ZTM5N2EiLCAwLCAiMWItbmV3bmFtZS1pbi10aGVpcnMtZWRpdGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyYjVmMWYxODFlZTNiNThlYTc1MWY1ZGQ1ZDhmOWI0NDU1MjBhMTM2IiwgMCwgIjFiLW5ld25hbWUtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMTc4OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MiIsIDAsICIyLW5ld25hbWUtaW4tYm90aC50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjE4Y2IzMTZiMWNlZmEwZjhhNjk0NmYwZTIwMWE4ZTFhNmY4NDVhYjkiLCAwLCAiM2EtbmV3bmFtZS1pbi1vdXJzLWRlbGV0ZWQtaW4tdGhlaXJzLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMzYyMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NSIsIDAsICIzYi1uZXduYW1lLWluLXRoZWlycy1kZWxldGVkLWluLW91cnMudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyMjc3OTJiNTJhYWEwYjIzOGJlYTAwZWM3ZTUwOWIwMjYyM2YxNjhjIiwgMCwgIjRhLW5ld25hbWUtaW4tb3Vycy1hZGRlZC1pbi10aGVpcnMudHh0fkhFQUQiIH0sCisJCXsgMDEwMDY0NCwgIjhiNWI1M2NiMmFhOWNlYjExMzlmNTMxMmZjZmEzY2MzYzVhNDdjOWEiLCAwLCAiNGEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHR+cmVuYW1lX2NvbmZsaWN0X3RoZWlycyIgfSwKKwkJeyAwMTAwNjQ0LCAiZGU4NzJlZTM2MThiODk0OTkyZTlkMWUxOGJhMmViZTI1NmExMTJmOSIsIDAsICI0Yi1uZXduYW1lLWluLXRoZWlycy1hZGRlZC1pbi1vdXJzLnR4dH5IRUFEIiB9LAorCQl7IDAxMDA2NDQsICI5OGQ1MmQwN2MwYjBiYmYyYjQ2NTQ4ZjZhYTUyMTI5NWMyY2I1NWRiIiwgMCwgIjRiLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0fnJlbmFtZV9jb25mbGljdF90aGVpcnMiIH0sCisJCXsgMDEwMDY0NCwgImQzNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYiLCAwLCAiNWEtbmV3bmFtZS1pbi1vdXJzLWFkZGVkLWluLXRoZWlycy50eHR+SEVBRCIgfSwKKwkJeyAwMTAwNjQ0LCAiOThiYTQyMDVmY2YzMWY1ZGQ5M2M5MTZkMzVmZTNmM2IzZDBlNjcxNCIsIDAsICI1YS1uZXduYW1lLWluLW91cnMtYWRkZWQtaW4tdGhlaXJzLnR4dH5yZW5hbWVfY29uZmxpY3RfdGhlaXJzIiB9LAorCQl7IDAxMDA2NDQsICIzODVjOGEwZjI2ZGRmNzllOTA0MWUxNWUxN2RjMzUyZWQyYzRjY2VkIiwgMCwgIjViLW5ld25hbWUtaW4tdGhlaXJzLWFkZGVkLWluLW91cnMudHh0fkhFQUQiIH0sCisJCXsgMDEwMDY0NCwgIjYzMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgiLCAwLCAiNWItbmV3bmFtZS1pbi10aGVpcnMtYWRkZWQtaW4tb3Vycy50eHR+cmVuYW1lX2NvbmZsaWN0X3RoZWlycyIgfSwKKwkJeyAwMTAwNjQ0LCAiZDhmYTc3YjY4MzMwODJjMWVhMzZiNzgyOGE1ODJkNGM0Mzg4MjQ1MCIsIDAsICI2LWJvdGgtcmVuYW1lZC0xLXRvLTItb3Vycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQ4ZmE3N2I2ODMzMDgyYzFlYTM2Yjc4MjhhNTgyZDRjNDM4ODI0NTAiLCAwLCAiNi1ib3RoLXJlbmFtZWQtMS10by0yLXRoZWlycy50eHQiIH0sCisJCXsgMDEwMDY0NCwgImI0MjcxMmNmZTk5YTFhNTAwYjJhNTFmZTk4NGUwYjhhNzcwMmJhMTEiLCAwLCAiNy1ib3RoLXJlbmFtZWQudHh0fkhFQUQiIH0sCisJCXsgMDEwMDY0NCwgImI2OWZlODM3ZTRjZWNmZDRjOWE0MGNkY2E3YzEzODQ2ODY4N2RmMDciLCAwLCAiNy1ib3RoLXJlbmFtZWQudHh0fnJlbmFtZV9jb25mbGljdF90aGVpcnMiIH0sCisJfTsKKworCW9wdHMubWVyZ2VfdHJlZV9vcHRzLmZsYWdzIHw9IEdJVF9NRVJHRV9UUkVFX0ZJTkRfUkVOQU1FUzsKKwlvcHRzLm1lcmdlX3RyZWVfb3B0cy5yZW5hbWVfdGhyZXNob2xkID0gNTA7CisKKwljbF9naXRfcGFzcyhtZXJnZV9icmFuY2hlcygmcmVzdWx0LCByZXBvLCBHSVRfUkVGU19IRUFEU19ESVIgQlJBTkNIX1JFTkFNRV9PVVJTLCBHSVRfUkVGU19IRUFEU19ESVIgQlJBTkNIX1JFTkFNRV9USEVJUlMsICZvcHRzKSk7CisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3Rfd29ya2RpcihyZXBvLCBtZXJnZV9pbmRleF9lbnRyaWVzLCAyNCkpOworCisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbWVyZ2Uvd29ya2Rpci9zZXR1cC5jIGIvdGVzdHMvbWVyZ2Uvd29ya2Rpci9zZXR1cC5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvbWVyZ2Uvd29ya2Rpci9zZXR1cC5jCnJlbmFtZSB0byB0ZXN0cy9tZXJnZS93b3JrZGlyL3NldHVwLmMKaW5kZXggMWM4NDAzMi4uODcwZDU1ZSAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9tZXJnZS93b3JrZGlyL3NldHVwLmMKKysrIGIvdGVzdHMvbWVyZ2Uvd29ya2Rpci9zZXR1cC5jCkBAIC03MSw3ICs3MSw3IEBACiAJZ2l0X2J1Zl9mcmVlKCZmaWxlX3BhdGhfYnVmKTsKIH0KIAotLyogZ2l0IG1lcmdlIC0tbm8tZmYgb2N0bzEgKi8KKy8qIGdpdCBtZXJnZSBvY3RvMSAqLwogdm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2V0dXBfX29uZV9icmFuY2godm9pZCkKIHsKIAlnaXRfb2lkIG91cl9vaWQ7CkBAIC05Nyw3ICs5NywzMyBAQAogCWdpdF9tZXJnZV9oZWFkX2ZyZWUodGhlaXJfaGVhZHNbMF0pOwogfQogCi0vKiBnaXQgbWVyZ2UgLS1uby1mZiAxNmY4MjU4MTVjZmQyMGEwN2E3NWM3MTU1NGU4MmQ4ZWVkZTBiMDYxICovCisvKiBnaXQgbWVyZ2UgLS1uby1mZiBvY3RvMSAqLwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2V0dXBfX25vX2Zhc3Rmb3J3YXJkKHZvaWQpCit7CisJZ2l0X29pZCBvdXJfb2lkOworCWdpdF9yZWZlcmVuY2UgKm9jdG8xX3JlZjsKKwlnaXRfbWVyZ2VfaGVhZCAqb3VyX2hlYWQsICp0aGVpcl9oZWFkc1sxXTsKKworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmb3VyX29pZCwgT1JJR19IRUFEKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2hlYWRfZnJvbV9vaWQoJm91cl9oZWFkLCByZXBvLCAmb3VyX29pZCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJm9jdG8xX3JlZiwgcmVwbywgR0lUX1JFRlNfSEVBRFNfRElSIE9DVE8xX0JSQU5DSCkpOworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9oZWFkX2Zyb21fcmVmKCZ0aGVpcl9oZWFkc1swXSwgcmVwbywgb2N0bzFfcmVmKSk7CisKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfX3NldHVwKHJlcG8sIG91cl9oZWFkLCAoY29uc3QgZ2l0X21lcmdlX2hlYWQgKiopdGhlaXJfaGVhZHMsIDEsIEdJVF9NRVJHRV9OT19GQVNURk9SV0FSRCkpOworCisJY2xfYXNzZXJ0KHRlc3RfZmlsZV9jb250ZW50cyhHSVRfTUVSR0VfSEVBRF9GSUxFLCBPQ1RPMV9PSUQgIlxuIikpOworCWNsX2Fzc2VydCh0ZXN0X2ZpbGVfY29udGVudHMoR0lUX09SSUdfSEVBRF9GSUxFLCBPUklHX0hFQUQgIlxuIikpOworCWNsX2Fzc2VydCh0ZXN0X2ZpbGVfY29udGVudHMoR0lUX01FUkdFX01PREVfRklMRSwgIm5vLWZmIikpOworCWNsX2Fzc2VydCh0ZXN0X2ZpbGVfY29udGVudHMoR0lUX01FUkdFX01TR19GSUxFLCAiTWVyZ2UgYnJhbmNoICciIE9DVE8xX0JSQU5DSCAiJ1xuIikpOworCisJZ2l0X3JlZmVyZW5jZV9mcmVlKG9jdG8xX3JlZik7CisKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKG91cl9oZWFkKTsKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKHRoZWlyX2hlYWRzWzBdKTsKK30KKworLyogZ2l0IG1lcmdlICAxNmY4MjU4MTVjZmQyMGEwN2E3NWM3MTU1NGU4MmQ4ZWVkZTBiMDYxICovCiB2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl9zZXR1cF9fb25lX29pZCh2b2lkKQogewogCWdpdF9vaWQgb3VyX29pZDsKQEAgLTk2NCwzICs5OTAsNjggQEAKIAogCWNsX2Fzc2VydChjYl9kYXRhLmkgPT0gY2JfZGF0YS5sZW4pOwogfQorCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl9zZXR1cF9fcmV0YWluZWRfYWZ0ZXJfc3VjY2Vzcyh2b2lkKQoreworCWdpdF9vaWQgb3VyX29pZDsKKwlnaXRfcmVmZXJlbmNlICpvY3RvMV9yZWY7CisJZ2l0X21lcmdlX2hlYWQgKm91cl9oZWFkLCAqdGhlaXJfaGVhZHNbMV07CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCWdpdF9tZXJnZV9vcHRzIG9wdHMgPSBHSVRfTUVSR0VfT1BUU19JTklUOworCisJb3B0cy5tZXJnZV9mbGFncyB8PSBHSVRfTUVSR0VfTk9fRkFTVEZPUldBUkQ7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJm91cl9vaWQsIE9SSUdfSEVBRCkpOworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9oZWFkX2Zyb21fb2lkKCZvdXJfaGVhZCwgcmVwbywgJm91cl9vaWQpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZvY3RvMV9yZWYsIHJlcG8sIEdJVF9SRUZTX0hFQURTX0RJUiBPQ1RPMV9CUkFOQ0gpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9oZWFkX2Zyb21fcmVmKCZ0aGVpcl9oZWFkc1swXSwgcmVwbywgb2N0bzFfcmVmKSk7CisKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2UoJnJlc3VsdCwgcmVwbywgKGNvbnN0IGdpdF9tZXJnZV9oZWFkICoqKSZ0aGVpcl9oZWFkc1swXSwgMSwgJm9wdHMpKTsKKworCWNsX2Fzc2VydCh0ZXN0X2ZpbGVfY29udGVudHMoR0lUX01FUkdFX0hFQURfRklMRSwgT0NUTzFfT0lEICJcbiIpKTsKKwljbF9hc3NlcnQodGVzdF9maWxlX2NvbnRlbnRzKEdJVF9PUklHX0hFQURfRklMRSwgT1JJR19IRUFEICJcbiIpKTsKKwljbF9hc3NlcnQodGVzdF9maWxlX2NvbnRlbnRzKEdJVF9NRVJHRV9NT0RFX0ZJTEUsICJuby1mZiIpKTsKKwljbF9hc3NlcnQodGVzdF9maWxlX2NvbnRlbnRzKEdJVF9NRVJHRV9NU0dfRklMRSwgIk1lcmdlIGJyYW5jaCAnIiBPQ1RPMV9CUkFOQ0ggIidcbiIpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShvY3RvMV9yZWYpOworCisJZ2l0X21lcmdlX2hlYWRfZnJlZShvdXJfaGVhZCk7CisJZ2l0X21lcmdlX2hlYWRfZnJlZSh0aGVpcl9oZWFkc1swXSk7CisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3NldHVwX19yZW1vdmVkX2FmdGVyX2ZhaWx1cmUodm9pZCkKK3sKKwlnaXRfb2lkIG91cl9vaWQ7CisJZ2l0X3JlZmVyZW5jZSAqb2N0bzFfcmVmOworCWdpdF9tZXJnZV9oZWFkICpvdXJfaGVhZCwgKnRoZWlyX2hlYWRzWzFdOworCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdDsKKwlnaXRfbWVyZ2Vfb3B0cyBvcHRzID0gR0lUX01FUkdFX09QVFNfSU5JVDsKKworCW9wdHMubWVyZ2VfZmxhZ3MgfD0gR0lUX01FUkdFX05PX0ZBU1RGT1JXQVJEOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZvdXJfb2lkLCBPUklHX0hFQUQpKTsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfaGVhZF9mcm9tX29pZCgmb3VyX2hlYWQsIHJlcG8sICZvdXJfb2lkKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmb2N0bzFfcmVmLCByZXBvLCBHSVRfUkVGU19IRUFEU19ESVIgT0NUTzFfQlJBTkNIKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2hlYWRfZnJvbV9yZWYoJnRoZWlyX2hlYWRzWzBdLCByZXBvLCBvY3RvMV9yZWYpKTsKKworCWNsX2dpdF9yZXdyaXRlZmlsZSgibWVyZ2UtcmVzb2x2ZS9uZXctaW4tb2N0bzEudHh0IiwKKwkJIkNvbmZsaWN0aW5nIGZpbGUhXG5cbk1lcmdlIHdpbGwgZmFpbCFcbiIpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X21lcmdlKAorCQkmcmVzdWx0LCByZXBvLCAoY29uc3QgZ2l0X21lcmdlX2hlYWQgKiopJnRoZWlyX2hlYWRzWzBdLCAxLCAmb3B0cykpOworCisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIm1lcmdlLXJlc29sdmUvIiBHSVRfTUVSR0VfSEVBRF9GSUxFKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoIm1lcmdlLXJlc29sdmUvIiBHSVRfT1JJR19IRUFEX0ZJTEUpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygibWVyZ2UtcmVzb2x2ZS8iIEdJVF9NRVJHRV9NT0RFX0ZJTEUpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygibWVyZ2UtcmVzb2x2ZS8iIEdJVF9NRVJHRV9NU0dfRklMRSkpOworCisJZ2l0X3JlZmVyZW5jZV9mcmVlKG9jdG8xX3JlZik7CisKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKG91cl9oZWFkKTsKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKHRoZWlyX2hlYWRzWzBdKTsKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lcmdlL3dvcmtkaXIvc2ltcGxlLmMgYi90ZXN0cy9tZXJnZS93b3JrZGlyL3NpbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2I4NmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tZXJnZS93b3JrZGlyL3NpbXBsZS5jCkBAIC0wLDAgKzEsNDkxIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiZ2l0Mi9yZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiZ2l0Mi9tZXJnZS5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgIm1lcmdlLmgiCisjaW5jbHVkZSAiLi4vbWVyZ2VfaGVscGVycy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJmaWxlb3BzLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqcmVwbzsKK3N0YXRpYyBnaXRfaW5kZXggKnJlcG9faW5kZXg7CisKKyNkZWZpbmUgVEVTVF9SRVBPX1BBVEggIm1lcmdlLXJlc29sdmUiCisjZGVmaW5lIFRFU1RfSU5ERVhfUEFUSCBURVNUX1JFUE9fUEFUSCAiLy5naXQvaW5kZXgiCisKKyNkZWZpbmUgVEhFSVJTX1NJTVBMRV9CUkFOQ0gJCSJicmFuY2giCisjZGVmaW5lIFRIRUlSU19TSU1QTEVfT0lECQkJIjdjYjYzZWVkNTk3MTMwYmE0YWJiODdiM2U1NDRiODUwMjE5MDU1MjAiCisKKyNkZWZpbmUgVEhFSVJTX1VOUkVMQVRFRF9CUkFOQ0gJCSJ1bnJlbGF0ZWQiCisjZGVmaW5lIFRIRUlSU19VTlJFTEFURURfT0lECQkiNTViNGU0Njg3ZTdhMGQ5Y2EzNjcwMTZlZDkzMGYzODVkNDAyMmU2ZiIKKyNkZWZpbmUgVEhFSVJTX1VOUkVMQVRFRF9QQVJFTlQJCSJkNmNmNmM3NzQxYjMzMTY4MjZhZjEzMTQwNDI1NTBjOTdkZWQxZDUwIgorCisjZGVmaW5lIE9VUlNfRElSRUNUT1JZX0ZJTEUJCQkiZGZfc2lkZTEiCisjZGVmaW5lIFRIRUlSU19ESVJFQ1RPUllfRklMRQkJImZjOTAyMzdkYzQ4OTFmYTZjNjk4MjdmYzQ2NTYzMjIyNWUzOTE2MTgiCisKKworLyogTm9uLWNvbmZsaWN0aW5nIGZpbGVzLCBpbmRleCBlbnRyaWVzIGFyZSBjb21tb24gdG8gZXZlcnkgbWVyZ2Ugb3BlcmF0aW9uICovCisjZGVmaW5lIEFEREVEX0lOX01BU1RFUl9JTkRFWF9FTlRSWQlcCisJeyAwMTAwNjQ0LCAiMjMzYzA5MTljOTk4ZWQxMTBhNGI2ZmYzNmYzNTNhZWM4YjcxMzQ4NyIsIDAsIFwKKwkgICJhZGRlZC1pbi1tYXN0ZXIudHh0IiB9CisjZGVmaW5lIEFVVE9NRVJHRUFCTEVfSU5ERVhfRU5UUlkgXAorCXsgMDEwMDY0NCwgImYyZTE1NTBhMGM5ZTUzZDU4MTExNzU4NjRhMjk1MzY2NDJhZTM4MjEiLCAwLCBcCisJICAiYXV0b21lcmdlYWJsZS50eHQiIH0KKyNkZWZpbmUgQ0hBTkdFRF9JTl9CUkFOQ0hfSU5ERVhfRU5UUlkgXAorCXsgMDEwMDY0NCwgIjRlYjA0YzllNzllODhmNjY0MGQwMWZmNWIyNWNhMmE2MDc2NGYyMTYiLCAwLCBcCisJICAiY2hhbmdlZC1pbi1icmFuY2gudHh0IiB9CisjZGVmaW5lIENIQU5HRURfSU5fTUFTVEVSX0lOREVYX0VOVFJZIFwKKwl7IDAxMDA2NDQsICIxMWRlYWIwMGIyZDNhNmY1YTMwNzM5ODhhYzA1MGMyZDdiNjY1NWUyIiwgMCwgXAorCSAgImNoYW5nZWQtaW4tbWFzdGVyLnR4dCIgfQorI2RlZmluZSBVTkNIQU5HRURfSU5ERVhfRU5UUlkgXAorCXsgMDEwMDY0NCwgImM4ZjA2ZjJlM2JiMjk2NDE3NDY3N2U5MWYwYWJlYWQwZTQzYzllNWQiLCAwLCBcCisJICAidW5jaGFuZ2VkLnR4dCIgfQorCisvKiBVbnJlbGF0ZWQgZmlsZXMgKi8KKyNkZWZpbmUgVU5SRUxBVEVEX05FVzEgXAorCXsgMDEwMDY0NCwgImVmNThmZGQ4MDg2YzI0M2JkYzgxZjk5ZTM3OWFjYWNmZDIxZDMyZDYiLCAwLCBcCisJICAibmV3LWluLXVucmVsYXRlZDEudHh0IiB9CisjZGVmaW5lIFVOUkVMQVRFRF9ORVcyIFwKKwl7IDAxMDA2NDQsICI5NDhiYTZlNzAxYzFlZGFiMGMyZDM5NGZiN2M1NTM4MzM0MTI5NzkzIiwgMCwgXAorCSAgIm5ldy1pbi11bnJlbGF0ZWQyLnR4dCIgfQorCisvKiBFeHBlY3RlZCBSRVVDIGVudHJpZXMgKi8KKyNkZWZpbmUgQVVUT01FUkdFQUJMRV9SRVVDX0VOVFJZIFwKKwl7ICJhdXRvbWVyZ2VhYmxlLnR4dCIsIDAxMDA2NDQsIDAxMDA2NDQsIDAxMDA2NDQsIFwKKwkgICI2MjEyYzMxZGFiNWU0ODIyNDdkNzk3N2U0ZjBkZDM2MDFkZWNmMTNiIiwgXAorCSAgImVlM2ZhMWI4YzAwYWZmN2ZlMDIwNjVmZGI1MDg2NGJiMGQ5MzJjY2YiLCBcCisJICAiMDU4NTQxZmMzNzExNGJmYzFkZGRmNmJkNmJmZmM3ZmFlNWMyZTZmZSIgfQorI2RlZmluZSBDT05GTElDVElOR19SRVVDX0VOVFJZIFwKKwl7ICJjb25mbGljdGluZy50eHQiLCAwMTAwNjQ0LCAwMTAwNjQ0LCAwMTAwNjQ0LCBcCisJICAiZDQyN2UwYjJlMTM4NTAxYTNkMTVjYzM3NjA3N2EzNjMxZTE1YmQ0NiIsIFwKKwkgICI0ZTg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwIiwgXAorCSAgIjJiZDBhMzQzYWVlZjdhMmNmMGQxNTg0Nzg5NjZhNmU1ODdmZjM4NjMiIH0KKyNkZWZpbmUgUkVNT1ZFRF9JTl9CUkFOQ0hfUkVVQ19FTlRSWSBcCisJeyAicmVtb3ZlZC1pbi1icmFuY2gudHh0IiwgMDEwMDY0NCwgMDEwMDY0NCwgMCwgXAorCSAgImRmZTNmMjJiYWExZjZmY2U1NDQ3OTAxYzMwODZiYWUzNjhkZTZiZGQiLCBcCisJICAiZGZlM2YyMmJhYTFmNmZjZTU0NDc5MDFjMzA4NmJhZTM2OGRlNmJkZCIsIFwKKwkgICIiIH0KKyNkZWZpbmUgUkVNT1ZFRF9JTl9NQVNURVJfUkVVQ19FTlRSWSBcCisJeyAicmVtb3ZlZC1pbi1tYXN0ZXIudHh0IiwgMDEwMDY0NCwgMCwgMDEwMDY0NCwgXAorCSAgIjVjM2I2OGE3MWZjNGZhNWQzNjJmZDM4NzVlNTMxMzdjNmE1YWI3YTUiLCBcCisJICAiIiwgXAorCSAgIjVjM2I2OGE3MWZjNGZhNWQzNjJmZDM4NzVlNTMxMzdjNmE1YWI3YTUiIH0KKworI2RlZmluZSBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFIFwKKwkidGhpcyBmaWxlIGlzIGNoYW5nZWQgaW4gbWFzdGVyXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcbiIgXAorCSJ0aGlzIGZpbGUgaXMgYXV0b21lcmdlYWJsZVxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcbiIgXAorCSJ0aGlzIGZpbGUgaXMgYXV0b21lcmdlYWJsZVxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcbiIgXAorCSJ0aGlzIGZpbGUgaXMgY2hhbmdlZCBpbiBicmFuY2hcbiIKKworI2RlZmluZSBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFX0NSTEYgXAorCSJ0aGlzIGZpbGUgaXMgY2hhbmdlZCBpbiBtYXN0ZXJcclxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXHJcbiIgXAorCSJ0aGlzIGZpbGUgaXMgYXV0b21lcmdlYWJsZVxyXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcclxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXHJcbiIgXAorCSJ0aGlzIGZpbGUgaXMgYXV0b21lcmdlYWJsZVxyXG4iIFwKKwkidGhpcyBmaWxlIGlzIGF1dG9tZXJnZWFibGVcclxuIiBcCisJInRoaXMgZmlsZSBpcyBhdXRvbWVyZ2VhYmxlXHJcbiIgXAorCSJ0aGlzIGZpbGUgaXMgY2hhbmdlZCBpbiBicmFuY2hcclxuIgorCisjZGVmaW5lIENPTkZMSUNUSU5HX0RJRkYzX0ZJTEUgXAorCSI8PDw8PDw8IEhFQURcbiIgXAorCSJ0aGlzIGZpbGUgaXMgY2hhbmdlZCBpbiBtYXN0ZXIgYW5kIGJyYW5jaFxuIiBcCisJIj09PT09PT1cbiIgXAorCSJ0aGlzIGZpbGUgaXMgY2hhbmdlZCBpbiBicmFuY2ggYW5kIG1hc3RlclxuIiBcCisJIj4+Pj4+Pj4gN2NiNjNlZWQ1OTcxMzBiYTRhYmI4N2IzZTU0NGI4NTAyMTkwNTUyMFxuIgorCisvLyBGaXh0dXJlIHNldHVwIGFuZCB0ZWFyZG93bgordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2ltcGxlX19pbml0aWFsaXplKHZvaWQpCit7CisJcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoVEVTVF9SRVBPX1BBVEgpOworCWdpdF9yZXBvc2l0b3J5X2luZGV4KCZyZXBvX2luZGV4LCByZXBvKTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2ltcGxlX19jbGVhbnVwKHZvaWQpCit7CisJZ2l0X2luZGV4X2ZyZWUocmVwb19pbmRleCk7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworfQorCitzdGF0aWMgZ2l0X21lcmdlX3Jlc3VsdCAqbWVyZ2Vfc2ltcGxlX2JyYW5jaChpbnQgYXV0b21lcmdlX2ZsYWdzLCBpbnQgY2hlY2tvdXRfc3RyYXRlZ3kpCit7CisJZ2l0X29pZCB0aGVpcl9vaWRzWzFdOworCWdpdF9tZXJnZV9oZWFkICp0aGVpcl9oZWFkc1sxXTsKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisJZ2l0X21lcmdlX29wdHMgb3B0cyA9IEdJVF9NRVJHRV9PUFRTX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJnRoZWlyX29pZHNbMF0sIFRIRUlSU19TSU1QTEVfT0lEKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2hlYWRfZnJvbV9vaWQoJnRoZWlyX2hlYWRzWzBdLCByZXBvLCAmdGhlaXJfb2lkc1swXSkpOworCisJb3B0cy5tZXJnZV90cmVlX29wdHMuYXV0b21lcmdlX2ZsYWdzID0gYXV0b21lcmdlX2ZsYWdzOworCW9wdHMuY2hlY2tvdXRfb3B0cy5jaGVja291dF9zdHJhdGVneSA9IGNoZWNrb3V0X3N0cmF0ZWd5OworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZSgmcmVzdWx0LCByZXBvLCAoY29uc3QgZ2l0X21lcmdlX2hlYWQgKiopdGhlaXJfaGVhZHMsIDEsICZvcHRzKSk7CisKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKHRoZWlyX2hlYWRzWzBdKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jb3JlX2F1dG9jcmxmX3RvKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBib29sIHZhbHVlKQoreworCWdpdF9jb25maWcgKmNmZzsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY2ZnLCByZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfYm9vbChjZmcsICJjb3JlLmF1dG9jcmxmIiwgdmFsdWUpKTsKKworCWdpdF9jb25maWdfZnJlZShjZmcpOworfQorCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl9zaW1wbGVfX2F1dG9tZXJnZSh2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisJZ2l0X2J1ZiBhdXRvbWVyZ2VhYmxlX2J1ZiA9IEdJVF9CVUZfSU5JVDsKKworCXN0cnVjdCBtZXJnZV9pbmRleF9lbnRyeSBtZXJnZV9pbmRleF9lbnRyaWVzW10gPSB7CisJCUFEREVEX0lOX01BU1RFUl9JTkRFWF9FTlRSWSwKKwkJQVVUT01FUkdFQUJMRV9JTkRFWF9FTlRSWSwKKwkJQ0hBTkdFRF9JTl9CUkFOQ0hfSU5ERVhfRU5UUlksCisJCUNIQU5HRURfSU5fTUFTVEVSX0lOREVYX0VOVFJZLAorCisJCXsgMDEwMDY0NCwgImQ0MjdlMGIyZTEzODUwMWEzZDE1Y2MzNzYwNzdhMzYzMWUxNWJkNDYiLCAxLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQl7IDAxMDA2NDQsICI0ZTg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwIiwgMiwgImNvbmZsaWN0aW5nLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiMmJkMGEzNDNhZWVmN2EyY2YwZDE1ODQ3ODk2NmE2ZTU4N2ZmMzg2MyIsIDMsICJjb25mbGljdGluZy50eHQiIH0sCisKKwkJVU5DSEFOR0VEX0lOREVYX0VOVFJZLAorCX07CisKKwlzdHJ1Y3QgbWVyZ2VfcmV1Y19lbnRyeSBtZXJnZV9yZXVjX2VudHJpZXNbXSA9IHsKKwkJQVVUT01FUkdFQUJMRV9SRVVDX0VOVFJZLAorCQlSRU1PVkVEX0lOX0JSQU5DSF9SRVVDX0VOVFJZLAorCQlSRU1PVkVEX0lOX01BU1RFUl9SRVVDX0VOVFJZCisJfTsKKworCisJc2V0X2NvcmVfYXV0b2NybGZfdG8ocmVwbywgZmFsc2UpOworCisJY2xfYXNzZXJ0KHJlc3VsdCA9IG1lcmdlX3NpbXBsZV9icmFuY2goMCwgMCkpOworCWNsX2Fzc2VydCghZ2l0X21lcmdlX3Jlc3VsdF9pc19mYXN0Zm9yd2FyZChyZXN1bHQpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcigmYXV0b21lcmdlYWJsZV9idWYsCisJCVRFU1RfUkVQT19QQVRIICIvYXV0b21lcmdlYWJsZS50eHQiKSk7CisJY2xfYXNzZXJ0KHN0cmNtcChhdXRvbWVyZ2VhYmxlX2J1Zi5wdHIsIEFVVE9NRVJHRUFCTEVfTUVSR0VEX0ZJTEUpID09IDApOworCWdpdF9idWZfZnJlZSgmYXV0b21lcmdlYWJsZV9idWYpOworCisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfaW5kZXgocmVwb19pbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgOCkpOworCWNsX2Fzc2VydChtZXJnZV90ZXN0X3JldWMocmVwb19pbmRleCwgbWVyZ2VfcmV1Y19lbnRyaWVzLCAzKSk7CisKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKKworCWdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgcmVwbyk7CisKKwljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhdXRvbWVyZ2VhYmxlLnR4dCIsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnQoZW50cnktPmZpbGVfc2l6ZSA9PSBzdHJsZW4oQVVUT01FUkdFQUJMRV9NRVJHRURfRklMRSkpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworfQorCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl9zaW1wbGVfX2F1dG9tZXJnZV9jcmxmKHZvaWQpCit7CisjaWZkZWYgR0lUX1dJTjMyCisJZ2l0X2luZGV4ICppbmRleDsKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCWdpdF9idWYgYXV0b21lcmdlYWJsZV9idWYgPSBHSVRfQlVGX0lOSVQ7CisKKwlzdHJ1Y3QgbWVyZ2VfaW5kZXhfZW50cnkgbWVyZ2VfaW5kZXhfZW50cmllc1tdID0geworCQlBRERFRF9JTl9NQVNURVJfSU5ERVhfRU5UUlksCisJCUFVVE9NRVJHRUFCTEVfSU5ERVhfRU5UUlksCisJCUNIQU5HRURfSU5fQlJBTkNIX0lOREVYX0VOVFJZLAorCQlDSEFOR0VEX0lOX01BU1RFUl9JTkRFWF9FTlRSWSwKKworCQl7IDAxMDA2NDQsICJkNDI3ZTBiMmUxMzg1MDFhM2QxNWNjMzc2MDc3YTM2MzFlMTViZDQ2IiwgMSwgImNvbmZsaWN0aW5nLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiNGU4ODZlNjAyNTI5Y2FhOWFiMTFkNzFmODY2MzRiZDFiNmUwZGUxMCIsIDIsICJjb25mbGljdGluZy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjJiZDBhMzQzYWVlZjdhMmNmMGQxNTg0Nzg5NjZhNmU1ODdmZjM4NjMiLCAzLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCisJCVVOQ0hBTkdFRF9JTkRFWF9FTlRSWSwKKwl9OworCisJc3RydWN0IG1lcmdlX3JldWNfZW50cnkgbWVyZ2VfcmV1Y19lbnRyaWVzW10gPSB7CisJCUFVVE9NRVJHRUFCTEVfUkVVQ19FTlRSWSwKKwkJUkVNT1ZFRF9JTl9CUkFOQ0hfUkVVQ19FTlRSWSwKKwkJUkVNT1ZFRF9JTl9NQVNURVJfUkVVQ19FTlRSWQorCX07CisKKwlzZXRfY29yZV9hdXRvY3JsZl90byhyZXBvLCB0cnVlKTsKKworCWNsX2Fzc2VydChyZXN1bHQgPSBtZXJnZV9zaW1wbGVfYnJhbmNoKDAsIDApKTsKKwljbF9hc3NlcnQoIWdpdF9tZXJnZV9yZXN1bHRfaXNfZmFzdGZvcndhcmQocmVzdWx0KSk7CisKKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmF1dG9tZXJnZWFibGVfYnVmLAorCQlURVNUX1JFUE9fUEFUSCAiL2F1dG9tZXJnZWFibGUudHh0IikpOworCWNsX2Fzc2VydChzdHJjbXAoYXV0b21lcmdlYWJsZV9idWYucHRyLCBBVVRPTUVSR0VBQkxFX01FUkdFRF9GSUxFX0NSTEYpID09IDApOworCWdpdF9idWZfZnJlZSgmYXV0b21lcmdlYWJsZV9idWYpOworCisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfaW5kZXgocmVwb19pbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgOCkpOworCWNsX2Fzc2VydChtZXJnZV90ZXN0X3JldWMocmVwb19pbmRleCwgbWVyZ2VfcmV1Y19lbnRyaWVzLCAzKSk7CisKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKKworCWdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgcmVwbyk7CisKKwljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJhdXRvbWVyZ2VhYmxlLnR4dCIsIDApKSAhPSBOVUxMKTsKKwljbF9hc3NlcnQoZW50cnktPmZpbGVfc2l6ZSA9PSBzdHJsZW4oQVVUT01FUkdFQUJMRV9NRVJHRURfRklMRV9DUkxGKSk7CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisjZW5kaWYgLyogR0lUX1dJTjMyICovCit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3NpbXBsZV9fZGlmZjModm9pZCkKK3sKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisJZ2l0X2J1ZiBjb25mbGljdGluZ19idWYgPSBHSVRfQlVGX0lOSVQ7CisKKwlzdHJ1Y3QgbWVyZ2VfaW5kZXhfZW50cnkgbWVyZ2VfaW5kZXhfZW50cmllc1tdID0geworCQlBRERFRF9JTl9NQVNURVJfSU5ERVhfRU5UUlksCisJCUFVVE9NRVJHRUFCTEVfSU5ERVhfRU5UUlksCisJCUNIQU5HRURfSU5fQlJBTkNIX0lOREVYX0VOVFJZLAorCQlDSEFOR0VEX0lOX01BU1RFUl9JTkRFWF9FTlRSWSwKKworCQl7IDAxMDA2NDQsICJkNDI3ZTBiMmUxMzg1MDFhM2QxNWNjMzc2MDc3YTM2MzFlMTViZDQ2IiwgMSwgImNvbmZsaWN0aW5nLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiNGU4ODZlNjAyNTI5Y2FhOWFiMTFkNzFmODY2MzRiZDFiNmUwZGUxMCIsIDIsICJjb25mbGljdGluZy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjJiZDBhMzQzYWVlZjdhMmNmMGQxNTg0Nzg5NjZhNmU1ODdmZjM4NjMiLCAzLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCisJCVVOQ0hBTkdFRF9JTkRFWF9FTlRSWSwKKwl9OworCisJc3RydWN0IG1lcmdlX3JldWNfZW50cnkgbWVyZ2VfcmV1Y19lbnRyaWVzW10gPSB7CisJCUFVVE9NRVJHRUFCTEVfUkVVQ19FTlRSWSwKKwkJUkVNT1ZFRF9JTl9CUkFOQ0hfUkVVQ19FTlRSWSwKKwkJUkVNT1ZFRF9JTl9NQVNURVJfUkVVQ19FTlRSWQorCX07CisKKwljbF9hc3NlcnQocmVzdWx0ID0gbWVyZ2Vfc2ltcGxlX2JyYW5jaCgwLCAwKSk7CisJY2xfYXNzZXJ0KCFnaXRfbWVyZ2VfcmVzdWx0X2lzX2Zhc3Rmb3J3YXJkKHJlc3VsdCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZjb25mbGljdGluZ19idWYsCisJCVRFU1RfUkVQT19QQVRIICIvY29uZmxpY3RpbmcudHh0IikpOworCWNsX2Fzc2VydChzdHJjbXAoY29uZmxpY3RpbmdfYnVmLnB0ciwgQ09ORkxJQ1RJTkdfRElGRjNfRklMRSkgPT0gMCk7CisJZ2l0X2J1Zl9mcmVlKCZjb25mbGljdGluZ19idWYpOworCisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfaW5kZXgocmVwb19pbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgOCkpOworCWNsX2Fzc2VydChtZXJnZV90ZXN0X3JldWMocmVwb19pbmRleCwgbWVyZ2VfcmV1Y19lbnRyaWVzLCAzKSk7CisKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2ltcGxlX19jaGVja291dF9vdXJzKHZvaWQpCit7CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCisJc3RydWN0IG1lcmdlX2luZGV4X2VudHJ5IG1lcmdlX2luZGV4X2VudHJpZXNbXSA9IHsKKwkJQURERURfSU5fTUFTVEVSX0lOREVYX0VOVFJZLAorCQlBVVRPTUVSR0VBQkxFX0lOREVYX0VOVFJZLAorCQlDSEFOR0VEX0lOX0JSQU5DSF9JTkRFWF9FTlRSWSwKKwkJQ0hBTkdFRF9JTl9NQVNURVJfSU5ERVhfRU5UUlksCisKKwkJeyAwMTAwNjQ0LCAiZDQyN2UwYjJlMTM4NTAxYTNkMTVjYzM3NjA3N2EzNjMxZTE1YmQ0NiIsIDEsICJjb25mbGljdGluZy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjRlODg2ZTYwMjUyOWNhYTlhYjExZDcxZjg2NjM0YmQxYjZlMGRlMTAiLCAyLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQl7IDAxMDA2NDQsICIyYmQwYTM0M2FlZWY3YTJjZjBkMTU4NDc4OTY2YTZlNTg3ZmYzODYzIiwgMywgImNvbmZsaWN0aW5nLnR4dCIgfSwKKworCQlVTkNIQU5HRURfSU5ERVhfRU5UUlksCisJfTsKKworCXN0cnVjdCBtZXJnZV9yZXVjX2VudHJ5IG1lcmdlX3JldWNfZW50cmllc1tdID0geworCQlBVVRPTUVSR0VBQkxFX1JFVUNfRU5UUlksCisJCVJFTU9WRURfSU5fQlJBTkNIX1JFVUNfRU5UUlksCisJCVJFTU9WRURfSU5fTUFTVEVSX1JFVUNfRU5UUlkKKwl9OworCisJY2xfYXNzZXJ0KHJlc3VsdCA9IG1lcmdlX3NpbXBsZV9icmFuY2goMCwgR0lUX0NIRUNLT1VUX1NBRkUgfCBHSVRfQ0hFQ0tPVVRfVVNFX09VUlMpKTsKKwljbF9hc3NlcnQoIWdpdF9tZXJnZV9yZXN1bHRfaXNfZmFzdGZvcndhcmQocmVzdWx0KSk7CisKKwljbF9hc3NlcnQobWVyZ2VfdGVzdF9pbmRleChyZXBvX2luZGV4LCBtZXJnZV9pbmRleF9lbnRyaWVzLCA4KSk7CisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfcmV1YyhyZXBvX2luZGV4LCBtZXJnZV9yZXVjX2VudHJpZXMsIDMpKTsKKworCWNsX2Fzc2VydChnaXRfcGF0aF9leGlzdHMoVEVTVF9SRVBPX1BBVEggIi9jb25mbGljdGluZy50eHQiKSk7CisKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2ltcGxlX19mYXZvcl9vdXJzKHZvaWQpCit7CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCisJc3RydWN0IG1lcmdlX2luZGV4X2VudHJ5IG1lcmdlX2luZGV4X2VudHJpZXNbXSA9IHsKKwkJQURERURfSU5fTUFTVEVSX0lOREVYX0VOVFJZLAorCQlBVVRPTUVSR0VBQkxFX0lOREVYX0VOVFJZLAorCQlDSEFOR0VEX0lOX0JSQU5DSF9JTkRFWF9FTlRSWSwKKwkJQ0hBTkdFRF9JTl9NQVNURVJfSU5ERVhfRU5UUlksCisJCXsgMDEwMDY0NCwgIjRlODg2ZTYwMjUyOWNhYTlhYjExZDcxZjg2NjM0YmQxYjZlMGRlMTAiLCAwLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQlVTkNIQU5HRURfSU5ERVhfRU5UUlksCisJfTsKKworCXN0cnVjdCBtZXJnZV9yZXVjX2VudHJ5IG1lcmdlX3JldWNfZW50cmllc1tdID0geworCQlBVVRPTUVSR0VBQkxFX1JFVUNfRU5UUlksCisJCUNPTkZMSUNUSU5HX1JFVUNfRU5UUlksCisJCVJFTU9WRURfSU5fQlJBTkNIX1JFVUNfRU5UUlksCisJCVJFTU9WRURfSU5fTUFTVEVSX1JFVUNfRU5UUlksCisJfTsKKworCWNsX2Fzc2VydChyZXN1bHQgPSBtZXJnZV9zaW1wbGVfYnJhbmNoKEdJVF9NRVJHRV9BVVRPTUVSR0VfRkFWT1JfT1VSUywgMCkpOworCWNsX2Fzc2VydCghZ2l0X21lcmdlX3Jlc3VsdF9pc19mYXN0Zm9yd2FyZChyZXN1bHQpKTsKKworCWNsX2Fzc2VydChtZXJnZV90ZXN0X2luZGV4KHJlcG9faW5kZXgsIG1lcmdlX2luZGV4X2VudHJpZXMsIDYpKTsKKwljbF9hc3NlcnQobWVyZ2VfdGVzdF9yZXVjKHJlcG9faW5kZXgsIG1lcmdlX3JldWNfZW50cmllcywgNCkpOworCisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3NpbXBsZV9fZmF2b3JfdGhlaXJzKHZvaWQpCit7CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCisJc3RydWN0IG1lcmdlX2luZGV4X2VudHJ5IG1lcmdlX2luZGV4X2VudHJpZXNbXSA9IHsKKwkJQURERURfSU5fTUFTVEVSX0lOREVYX0VOVFJZLAorCQlBVVRPTUVSR0VBQkxFX0lOREVYX0VOVFJZLAorCQlDSEFOR0VEX0lOX0JSQU5DSF9JTkRFWF9FTlRSWSwKKwkJQ0hBTkdFRF9JTl9NQVNURVJfSU5ERVhfRU5UUlksCisJCXsgMDEwMDY0NCwgIjJiZDBhMzQzYWVlZjdhMmNmMGQxNTg0Nzg5NjZhNmU1ODdmZjM4NjMiLCAwLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQlVTkNIQU5HRURfSU5ERVhfRU5UUlksCisJfTsKKworCXN0cnVjdCBtZXJnZV9yZXVjX2VudHJ5IG1lcmdlX3JldWNfZW50cmllc1tdID0geworCQlBVVRPTUVSR0VBQkxFX1JFVUNfRU5UUlksCisJCUNPTkZMSUNUSU5HX1JFVUNfRU5UUlksCisJCVJFTU9WRURfSU5fQlJBTkNIX1JFVUNfRU5UUlksCisJCVJFTU9WRURfSU5fTUFTVEVSX1JFVUNfRU5UUlksCisJfTsKKworCWNsX2Fzc2VydChyZXN1bHQgPSBtZXJnZV9zaW1wbGVfYnJhbmNoKEdJVF9NRVJHRV9BVVRPTUVSR0VfRkFWT1JfVEhFSVJTLCAwKSk7CisJY2xfYXNzZXJ0KCFnaXRfbWVyZ2VfcmVzdWx0X2lzX2Zhc3Rmb3J3YXJkKHJlc3VsdCkpOworCisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfaW5kZXgocmVwb19pbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgNikpOworCWNsX2Fzc2VydChtZXJnZV90ZXN0X3JldWMocmVwb19pbmRleCwgbWVyZ2VfcmV1Y19lbnRyaWVzLCA0KSk7CisKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2ltcGxlX19kaXJlY3RvcnlfZmlsZSh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmhlYWQ7CisJZ2l0X29pZCB0aGVpcl9vaWRzWzFdLCBoZWFkX2NvbW1pdF9pZDsKKwlnaXRfbWVyZ2VfaGVhZCAqdGhlaXJfaGVhZHNbMV07CisJZ2l0X21lcmdlX3Jlc3VsdCAqcmVzdWx0OworCWdpdF9tZXJnZV9vcHRzIG9wdHMgPSBHSVRfTUVSR0VfT1BUU19JTklUOworCWdpdF9jb21taXQgKmhlYWRfY29tbWl0OworCisJc3RydWN0IG1lcmdlX2luZGV4X2VudHJ5IG1lcmdlX2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCAiNDkxMzBhMjhlZjU2N2FmOWE2YTYxMDRjMzg3NzNmZWRmYTVmOTc0MiIsIDIsICJkaXItMTAiIH0sCisJCXsgMDEwMDY0NCwgIjZjMDZkY2QxNjM1ODdjMmNjMThiZTQ0ODU3ZTBiNzExMTYzODJhZWIiLCAzLCAiZGlyLTEwIiB9LAorCQl7IDAxMDA2NDQsICI0M2FhZmQ0M2JlYTc3OWVjNzQzMTdkYzM2MWY0NWFlM2Y1MzJhNTA1IiwgMCwgImRpci02IiB9LAorCQl7IDAxMDA2NDQsICJhMDMxYTI4YWU3MGUzM2E2NDFjZTRiOGE4ZjYzMTdmMWFiNzlkZWU0IiwgMywgImRpci03IiB9LAorCQl7IDAxMDA2NDQsICI1MDEyZmQ1NjViMTM5M2JkZmRhMTgwNWQ0ZWMzOGNlNjYxOWUxZmQxIiwgMSwgImRpci03L2ZpbGUudHh0IiB9LAorCQl7IDAxMDA2NDQsICJhNTU2MzMwNGRkZjZjYWJhMjVjYjUwMzIzYTJlYTZmN2RiZmNhZGNhIiwgMiwgImRpci03L2ZpbGUudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlOWFkNmVjM2UzODM2NGEzZDA3ZmVkYTdjNDE5N2Q0ZDg0NWM1M2I1IiwgMCwgImRpci04IiB9LAorCQl7IDAxMDA2NDQsICIzZWY0ZDMwMzgyY2EzM2ZkZWJhOWZkYTg5NWE5OWUwODkxYmEzN2FhIiwgMiwgImRpci05IiB9LAorCQl7IDAxMDA2NDQsICJmYzRjNjM2ZDY1MTVlOWUyNjFmOTI2MGRiY2YzY2M2ZWNhOTdlYTA4IiwgMSwgImRpci05L2ZpbGUudHh0IiB9LAorCQl7IDAxMDA2NDQsICI3NmFiMGUyODY4MTk3ZWMxNThkZGQ2Yzc4ZDhhMGQyZmQ3M2QzOGY5IiwgMywgImRpci05L2ZpbGUudHh0IiB9LAorCQl7IDAxMDA2NDQsICI1YzI0MTFmODA3NWY0OGE2YjJmZGI4NWViYzBkMzcxNzQ3YzRkZjE1IiwgMCwgImZpbGUtMS9uZXciIH0sCisJCXsgMDEwMDY0NCwgImEzOWE2MjBkYWU1YmM4YjRlNzcxY2Q0ZDI1MWI3ZDA4MDQwMWEyMWUiLCAxLCAiZmlsZS0yIiB9LAorCQl7IDAxMDA2NDQsICJkOTYzOTc5YzIzN2QwOGI2YmEzOTA2MmVlN2JmNjRjN2QzNGEyN2Y4IiwgMiwgImZpbGUtMiIgfSwKKwkJeyAwMTAwNjQ0LCAiNWMzNDFlYWQyYmE2ZjJhZjk4Y2U1ZWMzZmU4NGY2YjZkMjg5OWMwZCIsIDAsICJmaWxlLTIvbmV3IiB9LAorCQl7IDAxMDA2NDQsICI5ZWZlNzcyMzgwMmQ0MzA1MTQyZWVlMTc3ZTAxOGZlZTE1NzJjNGY0IiwgMCwgImZpbGUtMy9uZXciIH0sCisJCXsgMDEwMDY0NCwgImJhY2FjOWIzNDkzNTA5YWExNWUxNzMwZTE1NDVmYzA5MTlkMWRhZTAiLCAxLCAiZmlsZS00IiB9LAorCQl7IDAxMDA2NDQsICI3NjYzZmNlMDEzMGRiMDkyOTM2YjEzN2NhYmQ2OTNlYzIzNGViMDYwIiwgMywgImZpbGUtNCIgfSwKKwkJeyAwMTAwNjQ0LCAiZTQ5ZjkxN2I0NDhkMTM0MGIzMWQ3NmU1NGJhMzg4MjY4ZmQ0YzkyMiIsIDAsICJmaWxlLTQvbmV3IiB9LAorCQl7IDAxMDA2NDQsICJjYWIyY2YyMzk5OGI0MGYxYWYyZDlkOWE3NTZkYzllMjg1YThkZjRiIiwgMiwgImZpbGUtNS9uZXciIH0sCisJCXsgMDEwMDY0NCwgImY1NTA0ZjM2ZTZmNGViNzk3YTU2ZmM1YmFjNmM2YzdmMzI5NjliZjIiLCAzLCAiZmlsZS01L25ldyIgfSwKKwl9OworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY19jcmVhdGUoJmhlYWQsIHJlcG8sIEdJVF9IRUFEX0ZJTEUsIEdJVF9SRUZTX0hFQURTX0RJUiBPVVJTX0RJUkVDVE9SWV9GSUxFLCAxKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9uYW1lX3RvX2lkKCZoZWFkX2NvbW1pdF9pZCwgcmVwbywgR0lUX0hFQURfRklMRSkpOworCWNsX2dpdF9wYXNzKGdpdF9jb21taXRfbG9va3VwKCZoZWFkX2NvbW1pdCwgcmVwbywgJmhlYWRfY29tbWl0X2lkKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3Jlc2V0KHJlcG8sIChnaXRfb2JqZWN0ICopaGVhZF9jb21taXQsIEdJVF9SRVNFVF9IQVJEKSk7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJnRoZWlyX29pZHNbMF0sIFRIRUlSU19ESVJFQ1RPUllfRklMRSkpOworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9oZWFkX2Zyb21fb2lkKCZ0aGVpcl9oZWFkc1swXSwgcmVwbywgJnRoZWlyX29pZHNbMF0pKTsKKworCW9wdHMubWVyZ2VfdHJlZV9vcHRzLmF1dG9tZXJnZV9mbGFncyA9IDA7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlKCZyZXN1bHQsIHJlcG8sIChjb25zdCBnaXRfbWVyZ2VfaGVhZCAqKil0aGVpcl9oZWFkcywgMSwgJm9wdHMpKTsKKworCWNsX2Fzc2VydChtZXJnZV90ZXN0X2luZGV4KHJlcG9faW5kZXgsIG1lcmdlX2luZGV4X2VudHJpZXMsIDIwKSk7CisKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CisJZ2l0X2NvbW1pdF9mcmVlKGhlYWRfY29tbWl0KTsKKwlnaXRfbWVyZ2VfaGVhZF9mcmVlKHRoZWlyX2hlYWRzWzBdKTsKKwlnaXRfbWVyZ2VfcmVzdWx0X2ZyZWUocmVzdWx0KTsKK30KKwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfc2ltcGxlX191bnJlbGF0ZWQodm9pZCkKK3sKKwlnaXRfb2lkIHRoZWlyX29pZHNbMV07CisJZ2l0X21lcmdlX2hlYWQgKnRoZWlyX2hlYWRzWzFdOworCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdDsKKwlnaXRfbWVyZ2Vfb3B0cyBvcHRzID0gR0lUX01FUkdFX09QVFNfSU5JVDsKKworCXN0cnVjdCBtZXJnZV9pbmRleF9lbnRyeSBtZXJnZV9pbmRleF9lbnRyaWVzW10gPSB7CisJCXsgMDEwMDY0NCwgIjIzM2MwOTE5Yzk5OGVkMTEwYTRiNmZmMzZmMzUzYWVjOGI3MTM0ODciLCAwLCAiYWRkZWQtaW4tbWFzdGVyLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZWUzZmExYjhjMDBhZmY3ZmUwMjA2NWZkYjUwODY0YmIwZDkzMmNjZiIsIDAsICJhdXRvbWVyZ2VhYmxlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYWI2YzQ0YTJlODQ0OTJhZDRiNDFiYjZiYWM4NzM1M2U5ZDAyYWM4YiIsIDAsICJjaGFuZ2VkLWluLWJyYW5jaC50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjExZGVhYjAwYjJkM2E2ZjVhMzA3Mzk4OGFjMDUwYzJkN2I2NjU1ZTIiLCAwLCAiY2hhbmdlZC1pbi1tYXN0ZXIudHh0IiB9LAorCQl7IDAxMDA2NDQsICI0ZTg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwIiwgMCwgImNvbmZsaWN0aW5nLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiZWY1OGZkZDgwODZjMjQzYmRjODFmOTllMzc5YWNhY2ZkMjFkMzJkNiIsIDAsICJuZXctaW4tdW5yZWxhdGVkMS50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjk0OGJhNmU3MDFjMWVkYWIwYzJkMzk0ZmI3YzU1MzgzMzQxMjk3OTMiLCAwLCAibmV3LWluLXVucmVsYXRlZDIudHh0IiB9LAorCQl7IDAxMDA2NDQsICJkZmUzZjIyYmFhMWY2ZmNlNTQ0NzkwMWMzMDg2YmFlMzY4ZGU2YmRkIiwgMCwgInJlbW92ZWQtaW4tYnJhbmNoLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYzhmMDZmMmUzYmIyOTY0MTc0Njc3ZTkxZjBhYmVhZDBlNDNjOWU1ZCIsIDAsICJ1bmNoYW5nZWQudHh0IiB9LAorCX07CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJnRoZWlyX29pZHNbMF0sIFRIRUlSU19VTlJFTEFURURfUEFSRU5UKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2hlYWRfZnJvbV9vaWQoJnRoZWlyX2hlYWRzWzBdLCByZXBvLCAmdGhlaXJfb2lkc1swXSkpOworCisJb3B0cy5tZXJnZV90cmVlX29wdHMuYXV0b21lcmdlX2ZsYWdzID0gMDsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2UoJnJlc3VsdCwgcmVwbywgKGNvbnN0IGdpdF9tZXJnZV9oZWFkICoqKXRoZWlyX2hlYWRzLCAxLCAmb3B0cykpOworCisJY2xfYXNzZXJ0KG1lcmdlX3Rlc3RfaW5kZXgocmVwb19pbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgOSkpOworCisJZ2l0X21lcmdlX2hlYWRfZnJlZSh0aGVpcl9oZWFkc1swXSk7CisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3NpbXBsZV9fdW5yZWxhdGVkX3dpdGhfY29uZmxpY3RzKHZvaWQpCit7CisJZ2l0X29pZCB0aGVpcl9vaWRzWzFdOworCWdpdF9tZXJnZV9oZWFkICp0aGVpcl9oZWFkc1sxXTsKKwlnaXRfbWVyZ2VfcmVzdWx0ICpyZXN1bHQ7CisJZ2l0X21lcmdlX29wdHMgb3B0cyA9IEdJVF9NRVJHRV9PUFRTX0lOSVQ7CisKKwlzdHJ1Y3QgbWVyZ2VfaW5kZXhfZW50cnkgbWVyZ2VfaW5kZXhfZW50cmllc1tdID0geworCQl7IDAxMDA2NDQsICIyMzNjMDkxOWM5OThlZDExMGE0YjZmZjM2ZjM1M2FlYzhiNzEzNDg3IiwgMCwgImFkZGVkLWluLW1hc3Rlci50eHQiIH0sCisJCXsgMDEwMDY0NCwgImVlM2ZhMWI4YzAwYWZmN2ZlMDIwNjVmZGI1MDg2NGJiMGQ5MzJjY2YiLCAyLCAiYXV0b21lcmdlYWJsZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImQwN2VjMTkwYzMwNmVjNjkwYmFjMzQ5ZTg3ZDAxYzQzNThlNDliYjIiLCAzLCAiYXV0b21lcmdlYWJsZS50eHQiIH0sCisJCXsgMDEwMDY0NCwgImFiNmM0NGEyZTg0NDkyYWQ0YjQxYmI2YmFjODczNTNlOWQwMmFjOGIiLCAwLCAiY2hhbmdlZC1pbi1icmFuY2gudHh0IiB9LAorCQl7IDAxMDA2NDQsICIxMWRlYWIwMGIyZDNhNmY1YTMwNzM5ODhhYzA1MGMyZDdiNjY1NWUyIiwgMCwgImNoYW5nZWQtaW4tbWFzdGVyLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiNGU4ODZlNjAyNTI5Y2FhOWFiMTFkNzFmODY2MzRiZDFiNmUwZGUxMCIsIDIsICJjb25mbGljdGluZy50eHQiIH0sCisJCXsgMDEwMDY0NCwgIjRiMjUzZGEzNmEwYWU4YmZjZTYzYWVhYmQ4YzViNTg0Mjk5MjU1OTQiLCAzLCAiY29uZmxpY3RpbmcudHh0IiB9LAorCQl7IDAxMDA2NDQsICJlZjU4ZmRkODA4NmMyNDNiZGM4MWY5OWUzNzlhY2FjZmQyMWQzMmQ2IiwgMCwgIm5ldy1pbi11bnJlbGF0ZWQxLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiOTQ4YmE2ZTcwMWMxZWRhYjBjMmQzOTRmYjdjNTUzODMzNDEyOTc5MyIsIDAsICJuZXctaW4tdW5yZWxhdGVkMi50eHQiIH0sCisJCXsgMDEwMDY0NCwgImRmZTNmMjJiYWExZjZmY2U1NDQ3OTAxYzMwODZiYWUzNjhkZTZiZGQiLCAwLCAicmVtb3ZlZC1pbi1icmFuY2gudHh0IiB9LAorCQl7IDAxMDA2NDQsICJjOGYwNmYyZTNiYjI5NjQxNzQ2NzdlOTFmMGFiZWFkMGU0M2M5ZTVkIiwgMCwgInVuY2hhbmdlZC50eHQiIH0sCisJfTsKKworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmdGhlaXJfb2lkc1swXSwgVEhFSVJTX1VOUkVMQVRFRF9PSUQpKTsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfaGVhZF9mcm9tX29pZCgmdGhlaXJfaGVhZHNbMF0sIHJlcG8sICZ0aGVpcl9vaWRzWzBdKSk7CisKKwlvcHRzLm1lcmdlX3RyZWVfb3B0cy5hdXRvbWVyZ2VfZmxhZ3MgPSAwOworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZSgmcmVzdWx0LCByZXBvLCAoY29uc3QgZ2l0X21lcmdlX2hlYWQgKiopdGhlaXJfaGVhZHMsIDEsICZvcHRzKSk7CisKKwljbF9hc3NlcnQobWVyZ2VfdGVzdF9pbmRleChyZXBvX2luZGV4LCBtZXJnZV9pbmRleF9lbnRyaWVzLCAxMSkpOworCisJZ2l0X21lcmdlX2hlYWRfZnJlZSh0aGVpcl9oZWFkc1swXSk7CisJZ2l0X21lcmdlX3Jlc3VsdF9mcmVlKHJlc3VsdCk7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzL21lcmdlL3dvcmtkaXIvdHJpdmlhbC5jIGIvdGVzdHMvbWVyZ2Uvd29ya2Rpci90cml2aWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5NTY2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21lcmdlL3dvcmtkaXIvdHJpdmlhbC5jCkBAIC0wLDAgKzEsMzQxIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiZ2l0Mi9yZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiZ2l0Mi9tZXJnZS5oIgorI2luY2x1ZGUgImdpdDIvc3lzL2luZGV4LmgiCisjaW5jbHVkZSAibWVyZ2UuaCIKKyNpbmNsdWRlICIuLi9tZXJnZV9oZWxwZXJzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImZpbGVvcHMuaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpyZXBvOworc3RhdGljIGdpdF9pbmRleCAqcmVwb19pbmRleDsKKworI2RlZmluZSBURVNUX1JFUE9fUEFUSCAibWVyZ2UtcmVzb2x2ZSIKKyNkZWZpbmUgVEVTVF9JTkRFWF9QQVRIIFRFU1RfUkVQT19QQVRIICIvLmdpdC9pbmRleCIKKworCisvLyBGaXh0dXJlIHNldHVwIGFuZCB0ZWFyZG93bgordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfdHJpdmlhbF9faW5pdGlhbGl6ZSh2b2lkKQoreworCXJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KFRFU1RfUkVQT19QQVRIKTsKKwlnaXRfcmVwb3NpdG9yeV9pbmRleCgmcmVwb19pbmRleCwgcmVwbyk7Cit9CisKK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfX2NsZWFudXAodm9pZCkKK3sKKwlnaXRfaW5kZXhfZnJlZShyZXBvX2luZGV4KTsKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKKworc3RhdGljIGludCBtZXJnZV90cml2aWFsKGNvbnN0IGNoYXIgKm91cnMsIGNvbnN0IGNoYXIgKnRoZWlycywgYm9vbCBhdXRvbWVyZ2UpCit7CisJZ2l0X2J1ZiBicmFuY2hfYnVmID0gR0lUX0JVRl9JTklUOworCWdpdF9jaGVja291dF9vcHRzIGNoZWNrb3V0X29wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCWdpdF9yZWZlcmVuY2UgKm91cl9yZWYsICp0aGVpcl9yZWY7CisJZ2l0X21lcmdlX2hlYWQgKnRoZWlyX2hlYWRzWzFdOworCWdpdF9tZXJnZV9vcHRzIG9wdHMgPSBHSVRfTUVSR0VfT1BUU19JTklUOworCWdpdF9tZXJnZV9yZXN1bHQgKnJlc3VsdDsKKworCWNoZWNrb3V0X29wdHMuY2hlY2tvdXRfc3RyYXRlZ3kgPSBHSVRfQ0hFQ0tPVVRfRk9SQ0U7CisKKwlvcHRzLm1lcmdlX3RyZWVfb3B0cy5hdXRvbWVyZ2VfZmxhZ3MgfD0gYXV0b21lcmdlID8gMCA6IEdJVF9NRVJHRV9BVVRPTUVSR0VfTk9ORTsKKworCWdpdF9idWZfcHJpbnRmKCZicmFuY2hfYnVmLCAiJXMlcyIsIEdJVF9SRUZTX0hFQURTX0RJUiwgb3Vycyk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY19jcmVhdGUoJm91cl9yZWYsIHJlcG8sICJIRUFEIiwgYnJhbmNoX2J1Zi5wdHIsIDEpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9oZWFkKHJlcG8sICZjaGVja291dF9vcHRzKSk7CisKKwlnaXRfYnVmX2NsZWFyKCZicmFuY2hfYnVmKTsKKwlnaXRfYnVmX3ByaW50ZigmYnJhbmNoX2J1ZiwgIiVzJXMiLCBHSVRfUkVGU19IRUFEU19ESVIsIHRoZWlycyk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnRoZWlyX3JlZiwgcmVwbywgYnJhbmNoX2J1Zi5wdHIpKTsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfaGVhZF9mcm9tX3JlZigmdGhlaXJfaGVhZHNbMF0sIHJlcG8sIHRoZWlyX3JlZikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlKCZyZXN1bHQsIHJlcG8sIChjb25zdCBnaXRfbWVyZ2VfaGVhZCAqKil0aGVpcl9oZWFkcywgMSwgJm9wdHMpKTsKKworCWdpdF9idWZfZnJlZSgmYnJhbmNoX2J1Zik7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKG91cl9yZWYpOworCWdpdF9yZWZlcmVuY2VfZnJlZSh0aGVpcl9yZWYpOworCWdpdF9tZXJnZV9oZWFkX2ZyZWUodGhlaXJfaGVhZHNbMF0pOworCWdpdF9tZXJnZV9yZXN1bHRfZnJlZShyZXN1bHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgbWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KHZvaWQpCit7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKKwlzaXplX3QgY291bnQgPSAwOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGdpdF9pbmRleF9lbnRyeWNvdW50KHJlcG9faW5kZXgpOyBpKyspIHsKKwkJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieWluZGV4KHJlcG9faW5kZXgsIGkpKTsKKworCQlpZiAoZ2l0X2luZGV4X2VudHJ5X3N0YWdlKGVudHJ5KSA+IDApCisJCQljb3VudCsrOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyogMkFMVDogYW5jZXN0OihlbXB0eSkrLCBoZWFkOiplbXB0eSosIHJlbW90ZTpyZW1vdGUgPSByZXN1bHQ6cmVtb3RlICovCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl90cml2aWFsX18yYWx0KHZvaWQpCit7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKKworCWNsX2dpdF9wYXNzKG1lcmdlX3RyaXZpYWwoInRyaXZpYWwtMmFsdCIsICJ0cml2aWFsLTJhbHQtYnJhbmNoIiwgMCkpOworCisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgIm5ldy1pbi1icmFuY2gudHh0IiwgMCkpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAwKTsKK30KKworLyogM0FMVDogYW5jZXN0OihlbXB0eSkrLCBoZWFkOmhlYWQsIHJlbW90ZToqZW1wdHkqID0gcmVzdWx0OmhlYWQgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzNhbHQodm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC0zYWx0IiwgInRyaXZpYWwtM2FsdC1icmFuY2giLCAwKSk7CisKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAibmV3LWluLTNhbHQudHh0IiwgMCkpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAwKTsKK30KKworLyogNDogYW5jZXN0OihlbXB0eSleLCBoZWFkOmhlYWQsIHJlbW90ZTpyZW1vdGUgPSByZXN1bHQ6bm8gbWVyZ2UgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzQodm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC00IiwgInRyaXZpYWwtNC1icmFuY2giLCAwKSk7CisKKwljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgIm5ldy1hbmQtZGlmZmVyZW50LnR4dCIsIDApKSA9PSBOVUxMKTsKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAyKTsKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAibmV3LWFuZC1kaWZmZXJlbnQudHh0IiwgMikpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJuZXctYW5kLWRpZmZlcmVudC50eHQiLCAzKSk7Cit9CisKKy8qIDVBTFQ6IGFuY2VzdDoqLCBoZWFkOmhlYWQsIHJlbW90ZTpoZWFkID0gcmVzdWx0OmhlYWQgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzVhbHRfMSh2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTVhbHQtMSIsICJ0cml2aWFsLTVhbHQtMS1icmFuY2giLCAwKSk7CisKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAibmV3LWFuZC1zYW1lLnR4dCIsIDApKTsKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKwljbF9hc3NlcnQobWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KCkgPT0gMCk7Cit9CisKKy8qIDVBTFQ6IGFuY2VzdDoqLCBoZWFkOmhlYWQsIHJlbW90ZTpoZWFkID0gcmVzdWx0OmhlYWQgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzVhbHRfMih2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTVhbHQtMiIsICJ0cml2aWFsLTVhbHQtMi1icmFuY2giLCAwKSk7CisKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAibW9kaWZpZWQtdG8tc2FtZS50eHQiLCAwKSk7CisJY2xfYXNzZXJ0KGdpdF9pbmRleF9yZXVjX2VudHJ5Y291bnQocmVwb19pbmRleCkgPT0gMCk7CisJY2xfYXNzZXJ0KG1lcmdlX3RyaXZpYWxfY29uZmxpY3RfZW50cnljb3VudCgpID09IDApOworfQorCisvKiA2OiBhbmNlc3Q6YW5jZXN0KywgaGVhZDooZW1wdHkpLCByZW1vdGU6KGVtcHR5KSA9IHJlc3VsdDpubyBtZXJnZSAqLwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfdHJpdmlhbF9fNih2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTYiLCAidHJpdmlhbC02LWJyYW5jaCIsIDApKTsKKworCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi1ib3RoLnR4dCIsIDApKSA9PSBOVUxMKTsKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAxKTsKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi1ib3RoLnR4dCIsIDEpKTsKK30KKworLyogNjogYW5jZXN0OmFuY2VzdCssIGhlYWQ6KGVtcHR5KSwgcmVtb3RlOihlbXB0eSkgPSByZXN1bHQ6bm8gbWVyZ2UgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzZfYXV0b21lcmdlKHZvaWQpCit7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKKwljb25zdCBnaXRfaW5kZXhfcmV1Y19lbnRyeSAqcmV1YzsKKworCWNsX2dpdF9wYXNzKG1lcmdlX3RyaXZpYWwoInRyaXZpYWwtNiIsICJ0cml2aWFsLTYtYnJhbmNoIiwgMSkpOworCisJY2xfYXNzZXJ0KChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLWJvdGgudHh0IiwgMCkpID09IE5VTEwpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDEpOworCWNsX2Fzc2VydChyZXVjID0gZ2l0X2luZGV4X3JldWNfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi1ib3RoLnR4dCIpKTsKKworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAwKTsKK30KKworLyogODogYW5jZXN0OmFuY2VzdF4sIGhlYWQ6KGVtcHR5KSwgcmVtb3RlOmFuY2VzdCA9IHJlc3VsdDpubyBtZXJnZSAqLwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfdHJpdmlhbF9fOCh2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTgiLCAidHJpdmlhbC04LWJyYW5jaCIsIDApKTsKKworCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi04LnR4dCIsIDApKSA9PSBOVUxMKTsKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAyKTsKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi04LnR4dCIsIDEpKTsKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi04LnR4dCIsIDMpKTsKK30KKworLyogODogYW5jZXN0OmFuY2VzdF4sIGhlYWQ6KGVtcHR5KSwgcmVtb3RlOmFuY2VzdCA9IHJlc3VsdDpubyBtZXJnZSAqLwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfdHJpdmlhbF9fOF9hdXRvbWVyZ2Uodm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCWNvbnN0IGdpdF9pbmRleF9yZXVjX2VudHJ5ICpyZXVjOworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC04IiwgInRyaXZpYWwtOC1icmFuY2giLCAxKSk7CisKKwljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tOC50eHQiLCAwKSkgPT0gTlVMTCk7CisKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAxKTsKKwljbF9hc3NlcnQocmV1YyA9IGdpdF9pbmRleF9yZXVjX2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tOC50eHQiKSk7CisKKwljbF9hc3NlcnQobWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KCkgPT0gMCk7Cit9CisKKy8qIDc6IGFuY2VzdDphbmNlc3QrLCBoZWFkOihlbXB0eSksIHJlbW90ZTpyZW1vdGUgPSByZXN1bHQ6bm8gbWVyZ2UgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzcodm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC03IiwgInRyaXZpYWwtNy1icmFuY2giLCAwKSk7CisKKwljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tNy50eHQiLCAwKSkgPT0gTlVMTCk7CisJY2xfYXNzZXJ0KGdpdF9pbmRleF9yZXVjX2VudHJ5Y291bnQocmVwb19pbmRleCkgPT0gMCk7CisKKwljbF9hc3NlcnQobWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KCkgPT0gMik7CisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tNy50eHQiLCAxKSk7CisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tNy50eHQiLCAzKSk7Cit9CisKKy8qIDc6IGFuY2VzdDphbmNlc3QrLCBoZWFkOihlbXB0eSksIHJlbW90ZTpyZW1vdGUgPSByZXN1bHQ6bm8gbWVyZ2UgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzdfYXV0b21lcmdlKHZvaWQpCit7CisJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKKworCWNsX2dpdF9wYXNzKG1lcmdlX3RyaXZpYWwoInRyaXZpYWwtNyIsICJ0cml2aWFsLTctYnJhbmNoIiwgMCkpOworCisJY2xfYXNzZXJ0KChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTcudHh0IiwgMCkpID09IE5VTEwpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCisJY2xfYXNzZXJ0KG1lcmdlX3RyaXZpYWxfY29uZmxpY3RfZW50cnljb3VudCgpID09IDIpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTcudHh0IiwgMSkpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTcudHh0IiwgMykpOworfQorCisvKiAxMDogYW5jZXN0OmFuY2VzdF4sIGhlYWQ6YW5jZXN0LCByZW1vdGU6KGVtcHR5KSA9IHJlc3VsdDpubyBtZXJnZSAqLwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfdHJpdmlhbF9fMTAodm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC0xMCIsICJ0cml2aWFsLTEwLWJyYW5jaCIsIDApKTsKKworCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi0xMC1icmFuY2gudHh0IiwgMCkpID09IE5VTEwpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCisJY2xfYXNzZXJ0KG1lcmdlX3RyaXZpYWxfY29uZmxpY3RfZW50cnljb3VudCgpID09IDIpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTEwLWJyYW5jaC50eHQiLCAxKSk7CisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tMTAtYnJhbmNoLnR4dCIsIDIpKTsKK30KKworLyogMTA6IGFuY2VzdDphbmNlc3ReLCBoZWFkOmFuY2VzdCwgcmVtb3RlOihlbXB0eSkgPSByZXN1bHQ6bm8gbWVyZ2UgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzEwX2F1dG9tZXJnZSh2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisJY29uc3QgZ2l0X2luZGV4X3JldWNfZW50cnkgKnJldWM7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTEwIiwgInRyaXZpYWwtMTAtYnJhbmNoIiwgMSkpOworCisJY2xfYXNzZXJ0KChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTEwLWJyYW5jaC50eHQiLCAwKSkgPT0gTlVMTCk7CisKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAxKTsKKwljbF9hc3NlcnQocmV1YyA9IGdpdF9pbmRleF9yZXVjX2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tMTAtYnJhbmNoLnR4dCIpKTsKKworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAwKTsKK30KKworLyogOTogYW5jZXN0OmFuY2VzdCssIGhlYWQ6aGVhZCwgcmVtb3RlOihlbXB0eSkgPSByZXN1bHQ6bm8gbWVyZ2UgKi8KK3ZvaWQgdGVzdF9tZXJnZV93b3JrZGlyX3RyaXZpYWxfXzkodm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC05IiwgInRyaXZpYWwtOS1icmFuY2giLCAwKSk7CisKKwljbF9hc3NlcnQoKGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tOS1icmFuY2gudHh0IiwgMCkpID09IE5VTEwpOworCWNsX2Fzc2VydChnaXRfaW5kZXhfcmV1Y19lbnRyeWNvdW50KHJlcG9faW5kZXgpID09IDApOworCisJY2xfYXNzZXJ0KG1lcmdlX3RyaXZpYWxfY29uZmxpY3RfZW50cnljb3VudCgpID09IDIpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTktYnJhbmNoLnR4dCIsIDEpKTsKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi05LWJyYW5jaC50eHQiLCAyKSk7Cit9CisKKy8qIDk6IGFuY2VzdDphbmNlc3QrLCBoZWFkOmhlYWQsIHJlbW90ZTooZW1wdHkpID0gcmVzdWx0Om5vIG1lcmdlICovCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl90cml2aWFsX185X2F1dG9tZXJnZSh2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTkiLCAidHJpdmlhbC05LWJyYW5jaCIsIDEpKTsKKworCWNsX2Fzc2VydCgoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAicmVtb3ZlZC1pbi05LWJyYW5jaC50eHQiLCAwKSkgPT0gTlVMTCk7CisJY2xfYXNzZXJ0KGdpdF9pbmRleF9yZXVjX2VudHJ5Y291bnQocmVwb19pbmRleCkgPT0gMCk7CisKKwljbF9hc3NlcnQobWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KCkgPT0gMik7CisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgInJlbW92ZWQtaW4tOS1icmFuY2gudHh0IiwgMSkpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJyZW1vdmVkLWluLTktYnJhbmNoLnR4dCIsIDIpKTsKK30KKworLyogMTM6IGFuY2VzdDphbmNlc3QrLCBoZWFkOmhlYWQsIHJlbW90ZTphbmNlc3QgPSByZXN1bHQ6aGVhZCAqLwordm9pZCB0ZXN0X21lcmdlX3dvcmtkaXJfdHJpdmlhbF9fMTModm9pZCkKK3sKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCWdpdF9vaWQgZXhwZWN0ZWRfb2lkOworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJpdmlhbCgidHJpdmlhbC0xMyIsICJ0cml2aWFsLTEzLWJyYW5jaCIsIDApKTsKKworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJtb2RpZmllZC1pbi0xMy50eHQiLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZF9vaWQsICIxY2ZmOWVjNmE0N2E1MzczODBkZWRmZGQxN2M5ZTc2ZDc0MjU5YTJiIikpOworCWNsX2Fzc2VydChnaXRfb2lkX2NtcCgmZW50cnktPm9pZCwgJmV4cGVjdGVkX29pZCkgPT0gMCk7CisKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKwljbF9hc3NlcnQobWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KCkgPT0gMCk7Cit9CisKKy8qIDE0OiBhbmNlc3Q6YW5jZXN0KywgaGVhZDphbmNlc3QsIHJlbW90ZTpyZW1vdGUgPSByZXN1bHQ6cmVtb3RlICovCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl90cml2aWFsX18xNCh2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisJZ2l0X29pZCBleHBlY3RlZF9vaWQ7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTE0IiwgInRyaXZpYWwtMTQtYnJhbmNoIiwgMCkpOworCisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgIm1vZGlmaWVkLWluLTE0LWJyYW5jaC50eHQiLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZF9vaWQsICIyNjE1M2EzZmYzNjQ5YjZjMmJiNjUyZDNmMDY4NzhjNmUwYTE3MmY5IikpOworCWNsX2Fzc2VydChnaXRfb2lkX2NtcCgmZW50cnktPm9pZCwgJmV4cGVjdGVkX29pZCkgPT0gMCk7CisKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKwljbF9hc3NlcnQobWVyZ2VfdHJpdmlhbF9jb25mbGljdF9lbnRyeWNvdW50KCkgPT0gMCk7Cit9CisKKy8qIDExOiBhbmNlc3Q6YW5jZXN0KywgaGVhZDpoZWFkLCByZW1vdGU6cmVtb3RlID0gcmVzdWx0Om5vIG1lcmdlICovCit2b2lkIHRlc3RfbWVyZ2Vfd29ya2Rpcl90cml2aWFsX18xMSh2b2lkKQoreworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisKKwljbF9naXRfcGFzcyhtZXJnZV90cml2aWFsKCJ0cml2aWFsLTExIiwgInRyaXZpYWwtMTEtYnJhbmNoIiwgMCkpOworCisJY2xfYXNzZXJ0KChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJtb2RpZmllZC1pbi1ib3RoLnR4dCIsIDApKSA9PSBOVUxMKTsKKwljbF9hc3NlcnQoZ2l0X2luZGV4X3JldWNfZW50cnljb3VudChyZXBvX2luZGV4KSA9PSAwKTsKKworCWNsX2Fzc2VydChtZXJnZV90cml2aWFsX2NvbmZsaWN0X2VudHJ5Y291bnQoKSA9PSAzKTsKKwljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChyZXBvX2luZGV4LCAibW9kaWZpZWQtaW4tYm90aC50eHQiLCAxKSk7CisJY2xfYXNzZXJ0KGVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgocmVwb19pbmRleCwgIm1vZGlmaWVkLWluLWJvdGgudHh0IiwgMikpOworCWNsX2Fzc2VydChlbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKHJlcG9faW5kZXgsICJtb2RpZmllZC1pbi1ib3RoLnR4dCIsIDMpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbmV0d29yay9jcmVkLmMgYi90ZXN0cy9uZXR3b3JrL2NyZWQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9uZXR3b3JrL2NyZWQuYwpyZW5hbWUgdG8gdGVzdHMvbmV0d29yay9jcmVkLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbmV0d29yay9mZXRjaGxvY2FsLmMgYi90ZXN0cy9uZXR3b3JrL2ZldGNobG9jYWwuYwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL25ldHdvcmsvZmV0Y2hsb2NhbC5jCnJlbmFtZSB0byB0ZXN0cy9uZXR3b3JrL2ZldGNobG9jYWwuYwppbmRleCAwOTMzNWIzLi4yOGM3MTE1IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL25ldHdvcmsvZmV0Y2hsb2NhbC5jCisrKyBiL3Rlc3RzL25ldHdvcmsvZmV0Y2hsb2NhbC5jCkBAIC0yNSwxMyArMjUsMTggQEAKIAlnaXRfc3RyYXJyYXkgcmVmbmFtZXMgPSB7MH07CiAKIAljb25zdCBjaGFyICp1cmwgPSBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpOworCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGNhbGxiYWNrcyA9IEdJVF9SRU1PVEVfQ0FMTEJBQ0tTX0lOSVQ7CisKKwljYWxsYmFja3MudHJhbnNmZXJfcHJvZ3Jlc3MgPSB0cmFuc2Zlcl9jYjsKKwljYWxsYmFja3MucGF5bG9hZCA9ICZjYWxsY291bnQ7CiAKIAljbF9zZXRfY2xlYW51cCgmY2xlYW51cF9sb2NhbF9yZXBvLCAiZm9vIik7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5pdCgmcmVwbywgImZvbyIsIHRydWUpKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY3JlYXRlKCZvcmlnaW4sIHJlcG8sIEdJVF9SRU1PVEVfT1JJR0lOLCB1cmwpKTsKKwlnaXRfcmVtb3RlX3NldF9jYWxsYmFja3Mob3JpZ2luLCAmY2FsbGJhY2tzKTsKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Nvbm5lY3Qob3JpZ2luLCBHSVRfRElSRUNUSU9OX0ZFVENIKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChvcmlnaW4sIHRyYW5zZmVyX2NiLCAmY2FsbGNvdW50KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChvcmlnaW4pKTsKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX3VwZGF0ZV90aXBzKG9yaWdpbikpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9saXN0KCZyZWZuYW1lcywgcmVwbykpOwpAQCAtNTYsNiArNjEsMTAgQEAKIAlpbnQgY2FsbGNvdW50ID0gMDsKIAlnaXRfc3RyYXJyYXkgcmVmbmFtZXMgPSB7MH07CiAJY29uc3QgY2hhciAqdXJsOworCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGNhbGxiYWNrcyA9IEdJVF9SRU1PVEVfQ0FMTEJBQ0tTX0lOSVQ7CisKKwljYWxsYmFja3MudHJhbnNmZXJfcHJvZ3Jlc3MgPSB0cmFuc2Zlcl9jYjsKKwljYWxsYmFja3MucGF5bG9hZCA9ICZjYWxsY291bnQ7CiAKIAljbF9zZXRfY2xlYW51cCgmY2xlYW51cF9zYW5kYm94LCBOVUxMKTsKIAljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xpc3QoJnJlZm5hbWVzLCByZXBvKSk7CkBAIC02Myw4ICs3Miw5IEBACiAKIAl1cmwgPSBjbF9naXRfZml4dHVyZV91cmwoInRlc3RyZXBvLmdpdCIpOwogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY3JlYXRlKCZvcmlnaW4sIHJlcG8sIEdJVF9SRU1PVEVfT1JJR0lOLCB1cmwpKTsKKwlnaXRfcmVtb3RlX3NldF9jYWxsYmFja3Mob3JpZ2luLCAmY2FsbGJhY2tzKTsKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Nvbm5lY3Qob3JpZ2luLCBHSVRfRElSRUNUSU9OX0ZFVENIKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChvcmlnaW4sIHRyYW5zZmVyX2NiLCAmY2FsbGNvdW50KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChvcmlnaW4pKTsKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX3VwZGF0ZV90aXBzKG9yaWdpbikpOwogCiAJZ2l0X3N0cmFycmF5X2ZyZWUoJnJlZm5hbWVzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbmV0d29yay9yZWZzcGVjcy5jIGIvdGVzdHMvbmV0d29yay9yZWZzcGVjcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL25ldHdvcmsvcmVmc3BlY3MuYwpyZW5hbWUgdG8gdGVzdHMvbmV0d29yay9yZWZzcGVjcy5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL25ldHdvcmsvcmVtb3RlL2NyZWF0ZXRoZW5sb2FkLmMgYi90ZXN0cy9uZXR3b3JrL3JlbW90ZS9jcmVhdGV0aGVubG9hZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL25ldHdvcmsvcmVtb3RlL2NyZWF0ZXRoZW5sb2FkLmMKcmVuYW1lIHRvIHRlc3RzL25ldHdvcmsvcmVtb3RlL2NyZWF0ZXRoZW5sb2FkLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbmV0d29yay9yZW1vdGUvaXN2YWxpZG5hbWUuYyBiL3Rlc3RzL25ldHdvcmsvcmVtb3RlL2lzdmFsaWRuYW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvbmV0d29yay9yZW1vdGUvaXN2YWxpZG5hbWUuYwpyZW5hbWUgdG8gdGVzdHMvbmV0d29yay9yZW1vdGUvaXN2YWxpZG5hbWUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMvbmV0d29yay9yZW1vdGUvbG9jYWwuYyBiL3Rlc3RzL25ldHdvcmsvcmVtb3RlL2xvY2FsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5MTQyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25ldHdvcmsvcmVtb3RlL2xvY2FsLmMKQEAgLTAsMCArMSwyMzQgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJwYXRoLmgiCisjaW5jbHVkZSAicG9zaXguaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpyZXBvOworc3RhdGljIGdpdF9idWYgZmlsZV9wYXRoX2J1ZiA9IEdJVF9CVUZfSU5JVDsKK3N0YXRpYyBnaXRfcmVtb3RlICpyZW1vdGU7CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9faW5pdGlhbGl6ZSh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luaXQoJnJlcG8sICJyZW1vdGVsb2NhbC8iLCAwKSk7CisJY2xfYXNzZXJ0KHJlcG8gIT0gTlVMTCk7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fY2xlYW51cCh2b2lkKQoreworCWdpdF9idWZfZnJlZSgmZmlsZV9wYXRoX2J1Zik7CisKKwlnaXRfcmVtb3RlX2ZyZWUocmVtb3RlKTsKKwlyZW1vdGUgPSBOVUxMOworCisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKKwlyZXBvID0gTlVMTDsKKworCWNsX2ZpeHR1cmVfY2xlYW51cCgicmVtb3RlbG9jYWwiKTsKK30KKworc3RhdGljIHZvaWQgY29ubmVjdF90b19sb2NhbF9yZXBvc2l0b3J5KGNvbnN0IGNoYXIgKmxvY2FsX3JlcG9zaXRvcnkpCit7CisJZ2l0X2J1Zl9zZXRzKCZmaWxlX3BhdGhfYnVmLCBjbF9naXRfcGF0aF91cmwobG9jYWxfcmVwb3NpdG9yeSkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jcmVhdGVfaW5tZW1vcnkoJnJlbW90ZSwgcmVwbywgTlVMTCwgZ2l0X2J1Zl9jc3RyKCZmaWxlX3BhdGhfYnVmKSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY29ubmVjdChyZW1vdGUsIEdJVF9ESVJFQ1RJT05fRkVUQ0gpKTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfcmVtb3RlX2xvY2FsX19jb25uZWN0ZWQodm9pZCkKK3sKKwljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpOworCWNsX2Fzc2VydChnaXRfcmVtb3RlX2Nvbm5lY3RlZChyZW1vdGUpKTsKKworCWdpdF9yZW1vdGVfZGlzY29ubmVjdChyZW1vdGUpOworCWNsX2Fzc2VydCghZ2l0X3JlbW90ZV9jb25uZWN0ZWQocmVtb3RlKSk7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fcmV0cmlldmVfYWR2ZXJ0aXNlZF9yZWZlcmVuY2VzKHZvaWQpCit7CisJY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqcmVmczsKKwlzaXplX3QgcmVmc19sZW47CisKKwljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9scygmcmVmcywgJnJlZnNfbGVuLCByZW1vdGUpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKHJlZnNfbGVuLCAyOCk7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fcmV0cmlldmVfYWR2ZXJ0aXNlZF9yZWZlcmVuY2VzX2FmdGVyX2Rpc2Nvbm5lY3Qodm9pZCkKK3sKKwljb25zdCBnaXRfcmVtb3RlX2hlYWQgKipyZWZzOworCXNpemVfdCByZWZzX2xlbjsKKworCWNvbm5lY3RfdG9fbG9jYWxfcmVwb3NpdG9yeShjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQiKSk7CisJZ2l0X3JlbW90ZV9kaXNjb25uZWN0KHJlbW90ZSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xzKCZyZWZzLCAmcmVmc19sZW4sIHJlbW90ZSkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2kocmVmc19sZW4sIDI4KTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfcmVtb3RlX2xvY2FsX19yZXRyaWV2ZV9hZHZlcnRpc2VkX3JlZmVyZW5jZXNfZnJvbV9zcGFjZWRfcmVwb3NpdG9yeSh2b2lkKQoreworCWNvbnN0IGdpdF9yZW1vdGVfaGVhZCAqKnJlZnM7CisJc2l6ZV90IHJlZnNfbGVuOworCisJY2xfZml4dHVyZV9zYW5kYm94KCJ0ZXN0cmVwby5naXQiKTsKKwljbF9naXRfcGFzcyhwX3JlbmFtZSgidGVzdHJlcG8uZ2l0IiwgInNwYWNlZCB0ZXN0cmVwby5naXQiKSk7CisKKwljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoInNwYWNlZCB0ZXN0cmVwby5naXQiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbHMoJnJlZnMsICZyZWZzX2xlbiwgcmVtb3RlKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaShyZWZzX2xlbiwgMjgpOworCisJZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CS8qIERpc2Nvbm5lY3QgZnJvbSB0aGUgInNwYWNlZCByZXBvIiBiZWZvcmUgdGhlIGNsZWFudXAgKi8KKwlyZW1vdGUgPSBOVUxMOworCisJY2xfZml4dHVyZV9jbGVhbnVwKCJzcGFjZWQgdGVzdHJlcG8uZ2l0Iik7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fbmVzdGVkX3RhZ3NfYXJlX2NvbXBsZXRlbHlfcGVlbGVkKHZvaWQpCit7CisJY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqcmVmczsKKwlzaXplX3QgcmVmc19sZW4sIGk7CisKKwljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9scygmcmVmcywgJnJlZnNfbGVuLCByZW1vdGUpKTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZzX2xlbjsgaSsrKSB7CisJCWlmICghc3RyY21wKHJlZnNbaV0tPm5hbWUsICJyZWZzL3RhZ3MvdGVzdF57fSIpKQorCQkJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9zdHJlcSgmcmVmc1tpXS0+b2lkLCAiZTkwODEwYjhkZjNlODBjNDEzZDkwM2Y2MzE2NDNjNzE2ODg3MTM4ZCIpKTsKKwl9Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fc2hvcnRoYW5kX2ZldGNoX3JlZnNwZWMwKHZvaWQpCit7CisJY29uc3QgY2hhciAqcmVmc3BlYyA9ICJtYXN0ZXI6cmVtb3Rlcy9zbG9wcHkvbWFzdGVyIjsKKwljb25zdCBjaGFyICpyZWZzcGVjMiA9ICJtYXN0ZXI6Ym9oL3Nsb3BweS9tYXN0ZXIiOworCisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCisJY29ubmVjdF90b19sb2NhbF9yZXBvc2l0b3J5KGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2FkZF9mZXRjaChyZW1vdGUsIHJlZnNwZWMpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2FkZF9mZXRjaChyZW1vdGUsIHJlZnNwZWMyKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMocmVtb3RlKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCByZXBvLCAicmVmcy9yZW1vdGVzL3Nsb3BweS9tYXN0ZXIiKSk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCByZXBvLCAicmVmcy9oZWFkcy9ib2gvc2xvcHB5L21hc3RlciIpKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfcmVtb3RlX2xvY2FsX19zaG9ydGhhbmRfZmV0Y2hfcmVmc3BlYzEodm9pZCkKK3sKKwljb25zdCBjaGFyICpyZWZzcGVjID0gIm1hc3RlciI7CisJY29uc3QgY2hhciAqcmVmc3BlYzIgPSAiaGFyZF90YWciOworCisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCisJY29ubmVjdF90b19sb2NhbF9yZXBvc2l0b3J5KGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKTsKKwlnaXRfcmVtb3RlX2NsZWFyX3JlZnNwZWNzKHJlbW90ZSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9hZGRfZmV0Y2gocmVtb3RlLCByZWZzcGVjKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9hZGRfZmV0Y2gocmVtb3RlLCByZWZzcGVjMikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChyZW1vdGUpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX3VwZGF0ZV90aXBzKHJlbW90ZSkpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZiwgcmVwbywgInJlZnMvcmVtb3Rlcy9tYXN0ZXIiKSk7CisKKwljbF9naXRfZmFpbChnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCByZXBvLCAicmVmcy90YWdzL2hhcmRfdGFnIikpOworfQorCit2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfbG9jYWxfX3RhZ29wdCh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKnJlZjsKKworCWNvbm5lY3RfdG9fbG9jYWxfcmVwb3NpdG9yeShjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQiKSk7CisJZ2l0X3JlbW90ZV9zZXRfYXV0b3RhZyhyZW1vdGUsIEdJVF9SRU1PVEVfRE9XTkxPQURfVEFHU19BTEwpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChyZW1vdGUpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX3VwZGF0ZV90aXBzKHJlbW90ZSkpOworCisKKwljbF9naXRfZmFpbChnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCByZXBvLCAicmVmcy9yZW1vdGVzL21hc3RlciIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIHJlcG8sICJyZWZzL3RhZ3MvaGFyZF90YWciKSk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9sb2NhbF9fcHVzaF90b19iYXJlX3JlbW90ZSh2b2lkKQoreworCS8qIFNob3VsZCBiZSBhYmxlIHRvIHB1c2ggdG8gYSBiYXJlIHJlbW90ZSAqLworCWdpdF9yZW1vdGUgKmxvY2FscmVtb3RlOworCWdpdF9wdXNoICpwdXNoOworCisJLyogR2V0IHNvbWUgY29tbWl0cyAqLworCWNvbm5lY3RfdG9fbG9jYWxfcmVwb3NpdG9yeShjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9hZGRfZmV0Y2gocmVtb3RlLCAibWFzdGVyOm1hc3RlciIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMocmVtb3RlKSk7CisJZ2l0X3JlbW90ZV9kaXNjb25uZWN0KHJlbW90ZSk7CisKKwkvKiBTZXQgdXAgYW4gZW1wdHkgYmFyZSByZXBvIHRvIHB1c2ggaW50byAqLworCXsKKwkJZ2l0X3JlcG9zaXRvcnkgKmxvY2FsYmFyZXJlcG87CisJCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luaXQoJmxvY2FsYmFyZXJlcG8sICIuL2xvY2FsYmFyZS5naXQiLCAxKSk7CisJCWdpdF9yZXBvc2l0b3J5X2ZyZWUobG9jYWxiYXJlcmVwbyk7CisJfQorCisJLyogQ29ubmVjdCB0byB0aGUgYmFyZSByZXBvICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jcmVhdGVfaW5tZW1vcnkoJmxvY2FscmVtb3RlLCByZXBvLCBOVUxMLCAiLi9sb2NhbGJhcmUuZ2l0IikpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY29ubmVjdChsb2NhbHJlbW90ZSwgR0lUX0RJUkVDVElPTl9QVVNIKSk7CisKKwkvKiBUcnkgdG8gcHVzaCAqLworCWNsX2dpdF9wYXNzKGdpdF9wdXNoX25ldygmcHVzaCwgbG9jYWxyZW1vdGUpKTsKKwljbF9naXRfcGFzcyhnaXRfcHVzaF9hZGRfcmVmc3BlYyhwdXNoLCAicmVmcy9oZWFkcy9tYXN0ZXI6IikpOworCWNsX2dpdF9wYXNzKGdpdF9wdXNoX2ZpbmlzaChwdXNoKSk7CisJY2xfYXNzZXJ0KGdpdF9wdXNoX3VucGFja19vayhwdXNoKSk7CisKKwkvKiBDbGVhbiB1cCAqLworCWdpdF9wdXNoX2ZyZWUocHVzaCk7CisJZ2l0X3JlbW90ZV9mcmVlKGxvY2FscmVtb3RlKTsKKwljbF9maXh0dXJlX2NsZWFudXAoImxvY2FsYmFyZS5naXQiKTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfcmVtb3RlX2xvY2FsX19wdXNoX3RvX25vbl9iYXJlX3JlbW90ZSh2b2lkKQoreworCS8qIFNob3VsZG4ndCBiZSBhYmxlIHRvIHB1c2ggdG8gYSBub24tYmFyZSByZW1vdGUgKi8KKwlnaXRfcmVtb3RlICpsb2NhbHJlbW90ZTsKKwlnaXRfcHVzaCAqcHVzaDsKKworCS8qIEdldCBzb21lIGNvbW1pdHMgKi8KKwljb25uZWN0X3RvX2xvY2FsX3JlcG9zaXRvcnkoY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfYWRkX2ZldGNoKHJlbW90ZSwgIm1hc3RlcjptYXN0ZXIiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChyZW1vdGUpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX3VwZGF0ZV90aXBzKHJlbW90ZSkpOworCWdpdF9yZW1vdGVfZGlzY29ubmVjdChyZW1vdGUpOworCisJLyogU2V0IHVwIGFuIGVtcHR5IG5vbi1iYXJlIHJlcG8gdG8gcHVzaCBpbnRvICovCisJeworCQlnaXRfcmVwb3NpdG9yeSAqcmVtb3RlcmVwbyA9IE5VTEw7CisJCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luaXQoJnJlbW90ZXJlcG8sICJsb2NhbG5vbmJhcmUiLCAwKSk7CisJCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVtb3RlcmVwbyk7CisJfQorCisJLyogQ29ubmVjdCB0byB0aGUgYmFyZSByZXBvICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jcmVhdGVfaW5tZW1vcnkoJmxvY2FscmVtb3RlLCByZXBvLCBOVUxMLCAiLi9sb2NhbG5vbmJhcmUiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jb25uZWN0KGxvY2FscmVtb3RlLCBHSVRfRElSRUNUSU9OX1BVU0gpKTsKKworCS8qIFRyeSB0byBwdXNoICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3B1c2hfbmV3KCZwdXNoLCBsb2NhbHJlbW90ZSkpOworCWNsX2dpdF9wYXNzKGdpdF9wdXNoX2FkZF9yZWZzcGVjKHB1c2gsICJyZWZzL2hlYWRzL21hc3RlcjoiKSk7CisJY2xfZ2l0X2ZhaWxfd2l0aChnaXRfcHVzaF9maW5pc2gocHVzaCksIEdJVF9FQkFSRVJFUE8pOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGdpdF9wdXNoX3VucGFja19vayhwdXNoKSk7CisKKwkvKiBDbGVhbiB1cCAqLworCWdpdF9wdXNoX2ZyZWUocHVzaCk7CisJZ2l0X3JlbW90ZV9mcmVlKGxvY2FscmVtb3RlKTsKKwljbF9maXh0dXJlX2NsZWFudXAoImxvY2FsYmFyZS5naXQiKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvbmV0d29yay9yZW1vdGUvcmVtb3Rlcy5jIGIvdGVzdHMvbmV0d29yay9yZW1vdGUvcmVtb3Rlcy5jCnNpbWlsYXJpdHkgaW5kZXggODQlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvbmV0d29yay9yZW1vdGUvcmVtb3Rlcy5jCnJlbmFtZSB0byB0ZXN0cy9uZXR3b3JrL3JlbW90ZS9yZW1vdGVzLmMKaW5kZXggM2M0ZmE5Ni4uOTU0ZGVkOCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9uZXR3b3JrL3JlbW90ZS9yZW1vdGVzLmMKKysrIGIvdGVzdHMvbmV0d29yay9yZW1vdGUvcmVtb3Rlcy5jCkBAIC0xNTAsOCArMTUwLDEwIEBACiB2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3Rlc19fc2F2ZSh2b2lkKQogewogCWdpdF9zdHJhcnJheSBhcnJheTsKLQljb25zdCBjaGFyICpmZXRjaF9yZWZzcGVjID0gInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvdXBzdHJlYW0vKiI7Ci0JY29uc3QgY2hhciAqcHVzaF9yZWZzcGVjID0gInJlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyoiOworCWNvbnN0IGNoYXIgKmZldGNoX3JlZnNwZWMxID0gInJlZnMvaGVhZHMvbnMxLyo6cmVmcy9yZW1vdGVzL3Vwc3RyZWFtL25zMS8qIjsKKwljb25zdCBjaGFyICpmZXRjaF9yZWZzcGVjMiA9ICJyZWZzL2hlYWRzL25zMi8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS9uczIvKiI7CisJY29uc3QgY2hhciAqcHVzaF9yZWZzcGVjMSA9ICJyZWZzL2hlYWRzL25zMS8qOnJlZnMvaGVhZHMvbnMxLyoiOworCWNvbnN0IGNoYXIgKnB1c2hfcmVmc3BlYzIgPSAicmVmcy9oZWFkcy9uczIvKjpyZWZzL2hlYWRzL25zMi8qIjsKIAogCWdpdF9yZW1vdGVfZnJlZShfcmVtb3RlKTsKIAlfcmVtb3RlID0gTlVMTDsKQEAgLTE2MCw4ICsxNjIsMTAgQEAKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2NyZWF0ZSgmX3JlbW90ZSwgX3JlcG8sICJ1cHN0cmVhbSIsICJnaXQ6Ly9naXRodWIuY29tL2xpYmdpdDIvbGliZ2l0MiIpKTsKIAlnaXRfcmVtb3RlX2NsZWFyX3JlZnNwZWNzKF9yZW1vdGUpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9hZGRfZmV0Y2goX3JlbW90ZSwgZmV0Y2hfcmVmc3BlYykpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfYWRkX3B1c2goX3JlbW90ZSwgcHVzaF9yZWZzcGVjKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9hZGRfZmV0Y2goX3JlbW90ZSwgZmV0Y2hfcmVmc3BlYzEpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2FkZF9mZXRjaChfcmVtb3RlLCBmZXRjaF9yZWZzcGVjMikpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfYWRkX3B1c2goX3JlbW90ZSwgcHVzaF9yZWZzcGVjMSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfYWRkX3B1c2goX3JlbW90ZSwgcHVzaF9yZWZzcGVjMikpOwogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfc2V0X3B1c2h1cmwoX3JlbW90ZSwgImdpdDovL2dpdGh1Yi5jb20vbGliZ2l0Mi9saWJnaXQyX3B1c2giKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9zYXZlKF9yZW1vdGUpKTsKIAlnaXRfcmVtb3RlX2ZyZWUoX3JlbW90ZSk7CkBAIC0xNzEsMTYgKzE3NSwxOSBAQAogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbG9hZCgmX3JlbW90ZSwgX3JlcG8sICJ1cHN0cmVhbSIpKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfZ2V0X2ZldGNoX3JlZnNwZWNzKCZhcnJheSwgX3JlbW90ZSkpOwotCWNsX2Fzc2VydF9lcXVhbF9pKDEsIChpbnQpYXJyYXkuY291bnQpOwotCWNsX2Fzc2VydF9lcXVhbF9zKGZldGNoX3JlZnNwZWMsIGFycmF5LnN0cmluZ3NbMF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKDIsIChpbnQpYXJyYXkuY291bnQpOworCWNsX2Fzc2VydF9lcXVhbF9zKGZldGNoX3JlZnNwZWMxLCBhcnJheS5zdHJpbmdzWzBdKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhmZXRjaF9yZWZzcGVjMiwgYXJyYXkuc3RyaW5nc1sxXSk7CiAJZ2l0X3N0cmFycmF5X2ZyZWUoJmFycmF5KTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfZ2V0X3B1c2hfcmVmc3BlY3MoJmFycmF5LCBfcmVtb3RlKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koMSwgKGludClhcnJheS5jb3VudCk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3MocHVzaF9yZWZzcGVjLCBhcnJheS5zdHJpbmdzWzBdKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgyLCAoaW50KWFycmF5LmNvdW50KTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwdXNoX3JlZnNwZWMxLCBhcnJheS5zdHJpbmdzWzBdKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwdXNoX3JlZnNwZWMyLCBhcnJheS5zdHJpbmdzWzFdKTsKKwlnaXRfc3RyYXJyYXlfZnJlZSgmYXJyYXkpOworCiAJY2xfYXNzZXJ0X2VxdWFsX3MoZ2l0X3JlbW90ZV91cmwoX3JlbW90ZSksICJnaXQ6Ly9naXRodWIuY29tL2xpYmdpdDIvbGliZ2l0MiIpOwogCWNsX2Fzc2VydF9lcXVhbF9zKGdpdF9yZW1vdGVfcHVzaHVybChfcmVtb3RlKSwgImdpdDovL2dpdGh1Yi5jb20vbGliZ2l0Mi9saWJnaXQyX3B1c2giKTsKLQlnaXRfc3RyYXJyYXlfZnJlZSgmYXJyYXkpOwogCiAJLyogcmVtb3ZlIHRoZSBwdXNodXJsIGFnYWluIGFuZCBzZWUgaWYgd2UgY2FuIHNhdmUgdGhhdCB0b28gKi8KIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX3NldF9wdXNodXJsKF9yZW1vdGUsIE5VTEwpKTsKQEAgLTI0MywxMyArMjUwLDE5IEBACiAJZ2l0X2NvbmZpZyAqY2ZnOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9saXN0KCZsaXN0LCBfcmVwbykpOwotCWNsX2Fzc2VydChsaXN0LmNvdW50ID09IDQpOworCWNsX2Fzc2VydChsaXN0LmNvdW50ID09IDUpOwogCWdpdF9zdHJhcnJheV9mcmVlKCZsaXN0KTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY2ZnLCBfcmVwbykpOworCisJLyogQ3JlYXRlIGEgbmV3IHJlbW90ZSAqLwogCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJyZW1vdGUuc3BlY2xlc3MudXJsIiwgImh0dHA6Ly9leGFtcGxlLmNvbSIpKTsKKworCS8qIFVwZGF0ZSBhIHJlbW90ZSAocHJldmlvdXNseSB3aXRob3V0IGFueSB1cmwvcHVzaHVybCBlbnRyeSkgKi8KKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY2ZnLCAicmVtb3RlLm5vLXJlbW90ZS11cmwucHVzaHVybCIsICJodHRwOi8vZXhhbXBsZS5jb20iKSk7CisKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xpc3QoJmxpc3QsIF9yZXBvKSk7Ci0JY2xfYXNzZXJ0KGxpc3QuY291bnQgPT0gNSk7CisJY2xfYXNzZXJ0KGxpc3QuY291bnQgPT0gNyk7CiAJZ2l0X3N0cmFycmF5X2ZyZWUoJmxpc3QpOwogCiAJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CkBAIC0zNjEsMTMgKzM3NCw0MyBAQAogCWdpdF9jb25maWdfZnJlZShjZmcpOwogfQogCi12b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3Rlc19fY2Fubm90X2xvYWRfd2l0aF9hbl9lbXB0eV91cmwodm9pZCkKK3ZvaWQgdGVzdF9uZXR3b3JrX3JlbW90ZV9yZW1vdGVzX19jYW5fbG9hZF93aXRoX2FuX2VtcHR5X3VybCh2b2lkKQogewogCWdpdF9yZW1vdGUgKnJlbW90ZSA9IE5VTEw7CiAKLQljbF9naXRfZmFpbChnaXRfcmVtb3RlX2xvYWQoJnJlbW90ZSwgX3JlcG8sICJlbXB0eS1yZW1vdGUtdXJsIikpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbG9hZCgmcmVtb3RlLCBfcmVwbywgImVtcHR5LXJlbW90ZS11cmwiKSk7CisKKwljbF9hc3NlcnQocmVtb3RlLT51cmwgPT0gTlVMTCk7CisJY2xfYXNzZXJ0KHJlbW90ZS0+cHVzaHVybCA9PSBOVUxMKTsKKworCWNsX2dpdF9mYWlsKGdpdF9yZW1vdGVfY29ubmVjdChyZW1vdGUsIEdJVF9ESVJFQ1RJT05fRkVUQ0gpKTsKKworCWNsX2Fzc2VydChnaXRlcnJfbGFzdCgpICE9IE5VTEwpOwogCWNsX2Fzc2VydChnaXRlcnJfbGFzdCgpLT5rbGFzcyA9PSBHSVRFUlJfSU5WQUxJRCk7Ci0JY2xfYXNzZXJ0X2VxdWFsX3AocmVtb3RlLCBOVUxMKTsKKworCWdpdF9yZW1vdGVfZnJlZShyZW1vdGUpOworfQorCit2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3Rlc19fY2FuX2xvYWRfd2l0aF9vbmx5X2FuX2VtcHR5X3B1c2h1cmwodm9pZCkKK3sKKwlnaXRfcmVtb3RlICpyZW1vdGUgPSBOVUxMOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9sb2FkKCZyZW1vdGUsIF9yZXBvLCAiZW1wdHktcmVtb3RlLXB1c2h1cmwiKSk7CisKKwljbF9hc3NlcnQocmVtb3RlLT51cmwgPT0gTlVMTCk7CisJY2xfYXNzZXJ0KHJlbW90ZS0+cHVzaHVybCA9PSBOVUxMKTsKKworCWNsX2dpdF9mYWlsKGdpdF9yZW1vdGVfY29ubmVjdChyZW1vdGUsIEdJVF9ESVJFQ1RJT05fRkVUQ0gpKTsKKworCWdpdF9yZW1vdGVfZnJlZShyZW1vdGUpOworfQorCit2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3Rlc19fcmV0dXJuc19FTk9URk9VTkRfd2hlbl9uZWl0aGVyX3VybF9ub3JfcHVzaHVybCh2b2lkKQoreworCWdpdF9yZW1vdGUgKnJlbW90ZSA9IE5VTEw7CisKKwljbF9naXRfZmFpbF93aXRoKAorCQlnaXRfcmVtb3RlX2xvYWQoJnJlbW90ZSwgX3JlcG8sICJuby1yZW1vdGUtdXJsIiksIEdJVF9FTk9URk9VTkQpOwogfQogCiB2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3Rlc19fY2hlY2tfc3RydWN0dXJlX3ZlcnNpb24odm9pZCkKQEAgLTQwNyw3ICs0NTAsNiBAQAogCWFzc2VydF9jYW5ub3RfY3JlYXRlX3JlbW90ZSgidGVzdCIsIEdJVF9FRVhJU1RTKTsKIH0KIAotCiB2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3Rlc19fY2Fubm90X2NyZWF0ZV9hX3JlbW90ZV93aGljaF9uYW1lX2lzX2ludmFsaWQodm9pZCkKIHsKIAlhc3NlcnRfY2Fubm90X2NyZWF0ZV9yZW1vdGUoIi8iLCBHSVRfRUlOVkFMSURTUEVDKTsKQEAgLTQxNiw2ICs0NTgsMTcgQEAKIAlhc3NlcnRfY2Fubm90X2NyZWF0ZV9yZW1vdGUoImEubG9jayIsIEdJVF9FSU5WQUxJRFNQRUMpOwogfQogCit2b2lkIHRlc3RfbmV0d29ya19yZW1vdGVfcmVtb3RlX19naXRfcmVtb3RlX2NyZWF0ZV93aXRoX2ZldGNoc3BlYyh2b2lkKQoreworCWdpdF9yZW1vdGUgKnJlbW90ZTsKKwlnaXRfc3RyYXJyYXkgYXJyYXk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2NyZWF0ZV93aXRoX2ZldGNoc3BlYygmcmVtb3RlLCBfcmVwbywgInRlc3QtbmV3IiwgImdpdDovL2dpdGh1Yi5jb20vbGliZ2l0Mi9saWJnaXQyIiwgIityZWZzLyo6cmVmcy8qIikpOworCWdpdF9yZW1vdGVfZ2V0X2ZldGNoX3JlZnNwZWNzKCZhcnJheSwgcmVtb3RlKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiK3JlZnMvKjpyZWZzLyoiLCBhcnJheS5zdHJpbmdzWzBdKTsKKwlnaXRfcmVtb3RlX2ZyZWUocmVtb3RlKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKmZldGNoX3JlZnNwZWNzW10gPSB7CiAJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiwKIAkicmVmcy90YWdzLyo6cmVmcy90YWdzLyoiLApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9uZXR3b3JrL3JlbW90ZS9yZW5hbWUuYyBiL3Rlc3RzL25ldHdvcmsvcmVtb3RlL3JlbmFtZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL25ldHdvcmsvcmVtb3RlL3JlbmFtZS5jCnJlbmFtZSB0byB0ZXN0cy9uZXR3b3JrL3JlbW90ZS9yZW5hbWUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMvbmV0d29yay91cmxwYXJzZS5jIGIvdGVzdHMvbmV0d29yay91cmxwYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOWMyZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9uZXR3b3JrL3VybHBhcnNlLmMKQEAgLTAsMCArMSwxOTMgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJuZXRvcHMuaCIKKworc3RhdGljIGNoYXIgKmhvc3QsICpwb3J0LCAqcGF0aCwgKnVzZXIsICpwYXNzOworc3RhdGljIGdpdG5vX2Nvbm5lY3Rpb25fZGF0YSBjb25uZGF0YTsKKwordm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX2luaXRpYWxpemUodm9pZCkKK3sKKwlob3N0ID0gcG9ydCA9IHBhdGggPSB1c2VyID0gcGFzcyA9IE5VTEw7CisJbWVtc2V0KCZjb25uZGF0YSwgMCwgc2l6ZW9mKGNvbm5kYXRhKSk7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19jbGVhbnVwKHZvaWQpCit7CisjZGVmaW5lIEZSRUVfQU5EX05VTEwoeCkgaWYgKHgpIHsgZ2l0X19mcmVlKHgpOyB4ID0gTlVMTDsgfQorCUZSRUVfQU5EX05VTEwoaG9zdCk7CisJRlJFRV9BTkRfTlVMTChwb3J0KTsKKwlGUkVFX0FORF9OVUxMKHBhdGgpOworCUZSRUVfQU5EX05VTEwodXNlcik7CisJRlJFRV9BTkRfTlVMTChwYXNzKTsKKworCWdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcmVlX3B0cnMoJmNvbm5kYXRhKTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX3RyaXZpYWwodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZwYXRoLCAmdXNlciwgJnBhc3MsCisJCQkJImh0dHA6Ly9leGFtcGxlLmNvbS9yZXNvdXJjZSIsICI4MDgwIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKGhvc3QsICJleGFtcGxlLmNvbSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBvcnQsICI4MDgwIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MocGF0aCwgIi9yZXNvdXJjZSIpOworCWNsX2Fzc2VydF9lcXVhbF9wKHVzZXIsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9wKHBhc3MsIE5VTEwpOworfQorCit2b2lkIHRlc3RfbmV0d29ya191cmxwYXJzZV9fZW5jb2RlZF9wYXNzd29yZCh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdG5vX2V4dHJhY3RfdXJsX3BhcnRzKCZob3N0LCAmcG9ydCwgJnBhdGgsICZ1c2VyLCAmcGFzcywKKwkJCQkiaHR0cHM6Ly91c2VyOnBhc3MlMmZpcyU0MGJhZEBob3N0bmFtZS5jb206MTIzNC8iLCAiMSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhob3N0LCAiaG9zdG5hbWUuY29tIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MocG9ydCwgIjEyMzQiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwYXRoLCAiLyIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHVzZXIsICJ1c2VyIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MocGFzcywgInBhc3MvaXNAYmFkIik7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX191c2VyKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0bm9fZXh0cmFjdF91cmxfcGFydHMoJmhvc3QsICZwb3J0LCAmcGF0aCwgJnVzZXIsICZwYXNzLAorCQkJCSJodHRwczovL3VzZXJAZXhhbXBsZS5jb20vcmVzb3VyY2UiLCAiODA4MCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhob3N0LCAiZXhhbXBsZS5jb20iKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwb3J0LCAiODA4MCIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhdGgsICIvcmVzb3VyY2UiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh1c2VyLCAidXNlciIpOworCWNsX2Fzc2VydF9lcXVhbF9wKHBhc3MsIE5VTEwpOworfQorCit2b2lkIHRlc3RfbmV0d29ya191cmxwYXJzZV9fdXNlcl9wYXNzKHZvaWQpCit7CisJLyogdXNlcjpwYXNzQGhvc3RuYW1lLnRsZC9yZXNvdXJjZSAqLworCWNsX2dpdF9wYXNzKGdpdG5vX2V4dHJhY3RfdXJsX3BhcnRzKCZob3N0LCAmcG9ydCwgJnBhdGgsICZ1c2VyLCAmcGFzcywKKwkJCQkiaHR0cHM6Ly91c2VyOnBhc3NAZXhhbXBsZS5jb20vcmVzb3VyY2UiLCAiODA4MCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhob3N0LCAiZXhhbXBsZS5jb20iKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwb3J0LCAiODA4MCIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhdGgsICIvcmVzb3VyY2UiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh1c2VyLCAidXNlciIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhc3MsICJwYXNzIik7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19wb3J0KHZvaWQpCit7CisJLyogaG9zdG5hbWUudGxkOnBvcnQvcmVzb3VyY2UgKi8KKwljbF9naXRfcGFzcyhnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZwYXRoLCAmdXNlciwgJnBhc3MsCisJCQkJImh0dHBzOi8vZXhhbXBsZS5jb206OTE5MS9yZXNvdXJjZSIsICI4MDgwIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKGhvc3QsICJleGFtcGxlLmNvbSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBvcnQsICI5MTkxIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MocGF0aCwgIi9yZXNvdXJjZSIpOworCWNsX2Fzc2VydF9lcXVhbF9wKHVzZXIsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9wKHBhc3MsIE5VTEwpOworfQorCit2b2lkIHRlc3RfbmV0d29ya191cmxwYXJzZV9fdXNlcl9wb3J0KHZvaWQpCit7CisJLyogdXNlckBob3N0bmFtZS50bGQ6cG9ydC9yZXNvdXJjZSAqLworCWNsX2dpdF9wYXNzKGdpdG5vX2V4dHJhY3RfdXJsX3BhcnRzKCZob3N0LCAmcG9ydCwgJnBhdGgsICZ1c2VyLCAmcGFzcywKKwkJCQkiaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tOjkxOTEvcmVzb3VyY2UiLCAiODA4MCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhob3N0LCAiZXhhbXBsZS5jb20iKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwb3J0LCAiOTE5MSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhdGgsICIvcmVzb3VyY2UiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh1c2VyLCAidXNlciIpOworCWNsX2Fzc2VydF9lcXVhbF9wKHBhc3MsIE5VTEwpOworfQorCit2b2lkIHRlc3RfbmV0d29ya191cmxwYXJzZV9fdXNlcl9wYXNzX3BvcnQodm9pZCkKK3sKKwkvKiB1c2VyOnBhc3NAaG9zdG5hbWUudGxkOnBvcnQvcmVzb3VyY2UgKi8KKwljbF9naXRfcGFzcyhnaXRub19leHRyYWN0X3VybF9wYXJ0cygmaG9zdCwgJnBvcnQsICZwYXRoLCAmdXNlciwgJnBhc3MsCisJCQkJImh0dHBzOi8vdXNlcjpwYXNzQGV4YW1wbGUuY29tOjkxOTEvcmVzb3VyY2UiLCAiODA4MCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhob3N0LCAiZXhhbXBsZS5jb20iKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwb3J0LCAiOTE5MSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhdGgsICIvcmVzb3VyY2UiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh1c2VyLCAidXNlciIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhc3MsICJwYXNzIik7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19jb25uZWN0aW9uX2RhdGFfaHR0cCh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcm9tX3VybCgmY29ubmRhdGEsCisJCQkJImh0dHA6Ly9leGFtcGxlLmNvbS9mb28vYmFyL2JheiIsICJiYXIvYmF6IikpOworCWNsX2Fzc2VydF9lcXVhbF9zKGNvbm5kYXRhLmhvc3QsICJleGFtcGxlLmNvbSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKGNvbm5kYXRhLnBvcnQsICI4MCIpOworCWNsX2Fzc2VydF9lcXVhbF9zKGNvbm5kYXRhLnBhdGgsICIvZm9vLyIpOworCWNsX2Fzc2VydF9lcXVhbF9wKGNvbm5kYXRhLnVzZXIsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9wKGNvbm5kYXRhLnBhc3MsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9pKGNvbm5kYXRhLnVzZV9zc2wsIGZhbHNlKTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX2Nvbm5lY3Rpb25fZGF0YV9zc2wodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJmNvbm5kYXRhLAorCQkJCSJodHRwczovL2V4YW1wbGUuY29tL2Zvby9iYXIvYmF6IiwgImJhci9iYXoiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoY29ubmRhdGEuaG9zdCwgImV4YW1wbGUuY29tIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MoY29ubmRhdGEucG9ydCwgIjQ0MyIpOworCWNsX2Fzc2VydF9lcXVhbF9zKGNvbm5kYXRhLnBhdGgsICIvZm9vLyIpOworCWNsX2Fzc2VydF9lcXVhbF9wKGNvbm5kYXRhLnVzZXIsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9wKGNvbm5kYXRhLnBhc3MsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9pKGNvbm5kYXRhLnVzZV9zc2wsIHRydWUpOworfQorCit2b2lkIHRlc3RfbmV0d29ya191cmxwYXJzZV9fZW5jb2RlZF91c2VybmFtZV9wYXNzd29yZCh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcm9tX3VybCgmY29ubmRhdGEsCisJCQkJImh0dHBzOi8vdXNlciUyZm5hbWU6cGFzcyU0MHdvcmQlenl4JXZAZXhhbXBsZS5jb20vZm9vL2Jhci9iYXoiLCAiYmFyL2JheiIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhjb25uZGF0YS5ob3N0LCAiZXhhbXBsZS5jb20iKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhjb25uZGF0YS5wb3J0LCAiNDQzIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MoY29ubmRhdGEucGF0aCwgIi9mb28vIik7CisJY2xfYXNzZXJ0X2VxdWFsX3MoY29ubmRhdGEudXNlciwgInVzZXIvbmFtZSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKGNvbm5kYXRhLnBhc3MsICJwYXNzQHdvcmQlenl4JXYiKTsKKwljbF9hc3NlcnRfZXF1YWxfaShjb25uZGF0YS51c2Vfc3NsLCB0cnVlKTsKK30KKwordm9pZCB0ZXN0X25ldHdvcmtfdXJscGFyc2VfX2Nvbm5lY3Rpb25fZGF0YV9jcm9zc19ob3N0X3JlZGlyZWN0KHZvaWQpCit7CisJY29ubmRhdGEuaG9zdCA9IGdpdF9fc3RyZHVwKCJiYXIuY29tIik7CisJY2xfZ2l0X2ZhaWxfd2l0aChnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJmNvbm5kYXRhLAorCQkJCSJodHRwczovL2Zvby5jb20vYmFyL2JheiIsIE5VTEwpLAorCQkJLTEpOworfQorCit2b2lkIHRlc3RfbmV0d29ya191cmxwYXJzZV9fY29ubmVjdGlvbl9kYXRhX2h0dHBfZG93bmdyYWRlKHZvaWQpCit7CisJY29ubmRhdGEudXNlX3NzbCA9IHRydWU7CisJY2xfZ2l0X2ZhaWxfd2l0aChnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJmNvbm5kYXRhLAorCQkJCSJodHRwOi8vZm9vLmNvbS9iYXIvYmF6IiwgTlVMTCksCisJCQktMSk7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19jb25uZWN0aW9uX2RhdGFfcmVsYXRpdmVfcmVkaXJlY3Qodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJmNvbm5kYXRhLAorCQkJCSJodHRwOi8vZm9vLmNvbS9iYXIvYmF6L2JpZmYiLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0bm9fY29ubmVjdGlvbl9kYXRhX2Zyb21fdXJsKCZjb25uZGF0YSwKKwkJCQkiL3phcC9iYXovYmlmZj9iYW0iLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoY29ubmRhdGEuaG9zdCwgImZvby5jb20iKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhjb25uZGF0YS5wb3J0LCAiODAiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhjb25uZGF0YS5wYXRoLCAiL3phcC9iYXovYmlmZj9iYW0iKTsKKwljbF9hc3NlcnRfZXF1YWxfcChjb25uZGF0YS51c2VyLCBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcChjb25uZGF0YS5wYXNzLCBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfaShjb25uZGF0YS51c2Vfc3NsLCBmYWxzZSk7Cit9CisKK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19jb25uZWN0aW9uX2RhdGFfcmVsYXRpdmVfcmVkaXJlY3Rfc3NsKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0bm9fY29ubmVjdGlvbl9kYXRhX2Zyb21fdXJsKCZjb25uZGF0YSwKKwkJCQkiaHR0cHM6Ly9mb28uY29tL2Jhci9iYXovYmlmZiIsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJmNvbm5kYXRhLAorCQkJCSIvemFwL2Jhei9iaWZmP2JhbSIsIE5VTEwpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhjb25uZGF0YS5ob3N0LCAiZm9vLmNvbSIpOworCWNsX2Fzc2VydF9lcXVhbF9zKGNvbm5kYXRhLnBvcnQsICI0NDMiKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhjb25uZGF0YS5wYXRoLCAiL3phcC9iYXovYmlmZj9iYW0iKTsKKwljbF9hc3NlcnRfZXF1YWxfcChjb25uZGF0YS51c2VyLCBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcChjb25uZGF0YS5wYXNzLCBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfaShjb25uZGF0YS51c2Vfc3NsLCB0cnVlKTsKK30KKworLyogUnVuIHRoaXMgdW5kZXIgdmFsZ3JpbmQgKi8KK3ZvaWQgdGVzdF9uZXR3b3JrX3VybHBhcnNlX19jb25uZWN0aW9uX2RhdGFfY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdG5vX2Nvbm5lY3Rpb25fZGF0YV9mcm9tX3VybCgmY29ubmRhdGEsCisJCQkJImh0dHA6Ly9mb28uY29tL2Jhci9iYXovYmlmZiIsICJiYXovYmlmZiIpKTsKKwljbF9naXRfcGFzcyhnaXRub19jb25uZWN0aW9uX2RhdGFfZnJvbV91cmwoJmNvbm5kYXRhLAorCQkJCSJodHRwczovL2Zvby5jb20vYmFyL2Jhei9iaWZmIiwgImJhei9iaWZmIikpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9ub3Rlcy9ub3Rlcy5jIGIvdGVzdHMvbm90ZXMvbm90ZXMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9ub3Rlcy9ub3Rlcy5jCnJlbmFtZSB0byB0ZXN0cy9ub3Rlcy9ub3Rlcy5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL25vdGVzL25vdGVzcmVmLmMgYi90ZXN0cy9ub3Rlcy9ub3Rlc3JlZi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL25vdGVzL25vdGVzcmVmLmMKcmVuYW1lIHRvIHRlc3RzL25vdGVzL25vdGVzcmVmLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL29iamVjdC9ibG9iL2ZpbHRlci5jIGIvdGVzdHMvb2JqZWN0L2Jsb2IvZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyZDZiZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29iamVjdC9ibG9iL2ZpbHRlci5jCkBAIC0wLDAgKzEsMTQzIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAicG9zaXguaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiYnVmX3RleHQuaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG8gPSBOVUxMOworCisjZGVmaW5lIENSTEZfTlVNX1RFU1RfT0JKRUNUUwk5CisKK3N0YXRpYyBjb25zdCBjaGFyICpnX2NybGZfcmF3W0NSTEZfTlVNX1RFU1RfT0JKRUNUU10gPSB7CisJIiIsCisJImZvb1xuYmFyXG4iLAorCSJmb29ccmJhclxyIiwKKwkiZm9vXHJcbmJhclxyXG4iLAorCSJmb29cbmJhclxyYm90aFxyXG5yZXZlcnNlZFxuXHJhZ2FpblxucHJvYmxlbXNcciIsCisJIjEyM1xuXDAwMFwwMDFcMDAyXDAwM1wwMDRhYmNcMjU1XDI1NFwyNTNcclxuIiwKKwkiXHhFRlx4QkJceEJGVGhpcyBpcyBVVEYtOFxuIiwKKwkiXHhFRlx4QkJceEJGXHhFM1x4ODFceEJCXHhFM1x4ODFceDkyXHhFM1x4ODFceEJCXHhFM1x4ODFceDkyXHJcblx4RTNceDgxXHhCQlx4RTNceDgxXHg5Mlx4RTNceDgxXHhCQlx4RTNceDgxXHg5MlxyXG4iLAorCSJceEZFXHhGRlx4MDBUXHgwMGhceDAwaVx4MDBzXHgwMCEiCit9OworCitzdGF0aWMgZ2l0X29mZl90IGdfY3JsZl9yYXdfbGVuW0NSTEZfTlVNX1RFU1RfT0JKRUNUU10gPSB7CisJLTEsIC0xLCAtMSwgLTEsIC0xLCAxNywgLTEsIC0xLCAxMgorfTsKKworc3RhdGljIGdpdF9vaWQgZ19jcmxmX29pZHNbQ1JMRl9OVU1fVEVTVF9PQkpFQ1RTXTsKKworc3RhdGljIGdpdF9idWYgZ19jcmxmX2ZpbHRlcmVkW0NSTEZfTlVNX1RFU1RfT0JKRUNUU10gPSB7CisJeyAiIiwgMCwgMCB9LAorCXsgImZvb1xuYmFyXG4iLCAwLCA4IH0sCisJeyAiZm9vXHJiYXJcciIsIDAsIDggfSwKKwl7ICJmb29cbmJhclxuIiwgMCwgOCB9LAorCXsgImZvb1xuYmFyXHJib3RoXG5yZXZlcnNlZFxuXHJhZ2FpblxucHJvYmxlbXNcciIsIDAsIDM4IH0sCisJeyAiMTIzXG5cMDAwXDAwMVwwMDJcMDAzXDAwNGFiY1wyNTVcMjU0XDI1M1xuIiwgMCwgMTYgfSwKKwl7ICJceEVGXHhCQlx4QkZUaGlzIGlzIFVURi04XG4iLCAwLCAxNyB9LAorCXsgIlx4RUZceEJCXHhCRlx4RTNceDgxXHhCQlx4RTNceDgxXHg5Mlx4RTNceDgxXHhCQlx4RTNceDgxXHg5MlxuXHhFM1x4ODFceEJCXHhFM1x4ODFceDkyXHhFM1x4ODFceEJCXHhFM1x4ODFceDkyXG4iLCAwLCAyOSB9LAorCXsgIlx4RkVceEZGXHgwMFRceDAwaFx4MDBpXHgwMHNceDAwISIsIDAsIDEyIH0KK307CisKK3N0YXRpYyBnaXRfYnVmX3RleHRfc3RhdHMgZ19jcmxmX2ZpbHRlcmVkX3N0YXRzW0NSTEZfTlVNX1RFU1RfT0JKRUNUU10gPSB7CisJeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisJeyAwLCAwLCAwLCAyLCAwLCA2LCAwIH0sCisJeyAwLCAwLCAyLCAwLCAwLCA2LCAwIH0sCisJeyAwLCAwLCAyLCAyLCAyLCA2LCAwIH0sCisJeyAwLCAwLCA0LCA0LCAxLCAzMSwgMCB9LAorCXsgMCwgMSwgMSwgMiwgMSwgOSwgNSB9LAorCXsgR0lUX0JPTV9VVEY4LCAwLCAwLCAxLCAwLCAxNiwgMCB9LAorCXsgR0lUX0JPTV9VVEY4LCAwLCAyLCAyLCAyLCAyNywgMCB9LAorCXsgR0lUX0JPTV9VVEYxNl9CRSwgNSwgMCwgMCwgMCwgNywgNSB9LAorfTsKKwordm9pZCB0ZXN0X29iamVjdF9ibG9iX2ZpbHRlcl9faW5pdGlhbGl6ZSh2b2lkKQoreworCWludCBpOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiZW1wdHlfc3RhbmRhcmRfcmVwbyIpOworCisJZm9yIChpID0gMDsgaSA8IENSTEZfTlVNX1RFU1RfT0JKRUNUUzsgaSsrKSB7CisJCWlmIChnX2NybGZfcmF3X2xlbltpXSA8IDApCisJCQlnX2NybGZfcmF3X2xlbltpXSA9IHN0cmxlbihnX2NybGZfcmF3W2ldKTsKKworCQljbF9naXRfcGFzcyhnaXRfYmxvYl9jcmVhdGVfZnJvbWJ1ZmZlcigKKwkJCSZnX2NybGZfb2lkc1tpXSwgZ19yZXBvLCBnX2NybGZfcmF3W2ldLCAoc2l6ZV90KWdfY3JsZl9yYXdfbGVuW2ldKSk7CisJfQorfQorCit2b2lkIHRlc3Rfb2JqZWN0X2Jsb2JfZmlsdGVyX19jbGVhbnVwKHZvaWQpCit7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworfQorCit2b2lkIHRlc3Rfb2JqZWN0X2Jsb2JfZmlsdGVyX191bmZpbHRlcmVkKHZvaWQpCit7CisJaW50IGk7CisJZ2l0X2Jsb2IgKmJsb2I7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ1JMRl9OVU1fVEVTVF9PQkpFQ1RTOyBpKyspIHsKKwkJc2l6ZV90IHJhd19sZW4gPSAoc2l6ZV90KWdfY3JsZl9yYXdfbGVuW2ldOworCisJCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2xvb2t1cCgmYmxvYiwgZ19yZXBvLCAmZ19jcmxmX29pZHNbaV0pKTsKKworCQljbF9hc3NlcnRfZXF1YWxfc3oocmF3X2xlbiwgKHNpemVfdClnaXRfYmxvYl9yYXdzaXplKGJsb2IpKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX2koCisJCQkwLCBtZW1jbXAoZ19jcmxmX3Jhd1tpXSwgZ2l0X2Jsb2JfcmF3Y29udGVudChibG9iKSwgcmF3X2xlbikpOworCisJCWdpdF9ibG9iX2ZyZWUoYmxvYik7CisJfQorfQorCit2b2lkIHRlc3Rfb2JqZWN0X2Jsb2JfZmlsdGVyX19zdGF0cyh2b2lkKQoreworCWludCBpOworCWdpdF9ibG9iICpibG9iOworCWdpdF9idWYgYnVmID0gR0lUX0JVRl9JTklUOworCWdpdF9idWZfdGV4dF9zdGF0cyBzdGF0czsKKworCWZvciAoaSA9IDA7IGkgPCBDUkxGX05VTV9URVNUX09CSkVDVFM7IGkrKykgeworCQljbF9naXRfcGFzcyhnaXRfYmxvYl9sb29rdXAoJmJsb2IsIGdfcmVwbywgJmdfY3JsZl9vaWRzW2ldKSk7CisJCWNsX2dpdF9wYXNzKGdpdF9ibG9iX19nZXRidWYoJmJ1ZiwgYmxvYikpOworCQlnaXRfYnVmX3RleHRfZ2F0aGVyX3N0YXRzKCZzdGF0cywgJmJ1ZiwgZmFsc2UpOworCQljbF9hc3NlcnRfZXF1YWxfaSgKKwkJCTAsIG1lbWNtcCgmZ19jcmxmX2ZpbHRlcmVkX3N0YXRzW2ldLCAmc3RhdHMsIHNpemVvZihzdGF0cykpKTsKKwkJZ2l0X2Jsb2JfZnJlZShibG9iKTsKKwl9CisKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7Cit9CisKK3ZvaWQgdGVzdF9vYmplY3RfYmxvYl9maWx0ZXJfX3RvX29kYih2b2lkKQoreworCWdpdF9maWx0ZXJfbGlzdCAqZmwgPSBOVUxMOworCWdpdF9jb25maWcgKmNmZzsKKwlpbnQgaTsKKwlnaXRfYmxvYiAqYmxvYjsKKwlnaXRfYnVmIG91dCA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY2ZnLCBnX3JlcG8pKTsKKwljbF9hc3NlcnQoY2ZnKTsKKworCWdpdF9hdHRyX2NhY2hlX2ZsdXNoKGdfcmVwbyk7CisJY2xfZ2l0X2FwcGVuZDJmaWxlKCJlbXB0eV9zdGFuZGFyZF9yZXBvLy5naXRhdHRyaWJ1dGVzIiwgIioudHh0IHRleHRcbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9saXN0X2xvYWQoCisJCSZmbCwgZ19yZXBvLCBOVUxMLCAiZmlsZW5hbWUudHh0IiwgR0lUX0ZJTFRFUl9UT19PREIpKTsKKwljbF9hc3NlcnQoZmwgIT0gTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ1JMRl9OVU1fVEVTVF9PQkpFQ1RTOyBpKyspIHsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfbG9va3VwKCZibG9iLCBnX3JlcG8sICZnX2NybGZfb2lkc1tpXSkpOworCisJCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19ibG9iKCZvdXQsIGZsLCBibG9iKSk7CisKKwkJY2xfYXNzZXJ0X2VxdWFsX3N6KGdfY3JsZl9maWx0ZXJlZFtpXS5zaXplLCBvdXQuc2l6ZSk7CisKKwkJY2xfYXNzZXJ0X2VxdWFsX2koCisJCQkwLCBtZW1jbXAob3V0LnB0ciwgZ19jcmxmX2ZpbHRlcmVkW2ldLnB0ciwgb3V0LnNpemUpKTsKKworCQlnaXRfYmxvYl9mcmVlKGJsb2IpOworCX0KKworCWdpdF9maWx0ZXJfbGlzdF9mcmVlKGZsKTsKKwlnaXRfYnVmX2ZyZWUoJm91dCk7CisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29iamVjdC9ibG9iL2Zyb21jaHVua3MuYyBiL3Rlc3RzL29iamVjdC9ibG9iL2Zyb21jaHVua3MuYwpzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9ibG9iL2Zyb21jaHVua3MuYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L2Jsb2IvZnJvbWNodW5rcy5jCmluZGV4IGRjNTdkNGYuLjAzZWQ0ZWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvb2JqZWN0L2Jsb2IvZnJvbWNodW5rcy5jCisrKyBiL3Rlc3RzL29iamVjdC9ibG9iL2Zyb21jaHVua3MuYwpAQCAtNDEsMTQgKzQxLDQ2IEBACiAKIAljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmV4cGVjdGVkX29pZCwgIjMyMWNiZGYwODgwM2M3NDQwODIzMzIzMzI4MzhkZjZiZDE2MGY4ZjkiKSk7CiAKLQljbF9naXRfZmFpbChnaXRfb2JqZWN0X2xvb2t1cCgmYmxvYiwgcmVwbywgJmV4cGVjdGVkX29pZCwgR0lUX09CSl9BTlkpKTsKKwljbF9naXRfZmFpbF93aXRoKAorCQlnaXRfb2JqZWN0X2xvb2t1cCgmYmxvYiwgcmVwbywgJmV4cGVjdGVkX29pZCwgR0lUX09CSl9BTlkpLAorCQlHSVRfRU5PVEZPVU5EKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2NyZWF0ZV9mcm9tY2h1bmtzKCZvaWQsIHJlcG8sIE5VTEwsIHRleHRfY2h1bmtlZF9zb3VyY2VfY2IsICZob3dtYW55KSk7CiAKIAljbF9naXRfcGFzcyhnaXRfb2JqZWN0X2xvb2t1cCgmYmxvYiwgcmVwbywgJmV4cGVjdGVkX29pZCwgR0lUX09CSl9BTlkpKTsKKwljbF9hc3NlcnQoZ2l0X29pZF9jbXAoJmV4cGVjdGVkX29pZCwgZ2l0X29iamVjdF9pZChibG9iKSkgPT0gMCk7CisKIAlnaXRfb2JqZWN0X2ZyZWUoYmxvYik7CiB9CiAKK3ZvaWQgdGVzdF9vYmplY3RfYmxvYl9mcm9tY2h1bmtzX19kb2Vzbm90X292ZXJ3cml0ZV9hbl9hbHJlYWR5X2V4aXN0aW5nX29iamVjdCh2b2lkKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIGNvbnRlbnQgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X29pZCBleHBlY3RlZF9vaWQsIG9pZDsKKwlpbnQgaG93bWFueSA9IDc7CisJCisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZF9vaWQsICIzMjFjYmRmMDg4MDNjNzQ0MDgyMzMyMzMyODM4ZGY2YmQxNjBmOGY5IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfY3JlYXRlX2Zyb21jaHVua3MoJm9pZCwgcmVwbywgTlVMTCwgdGV4dF9jaHVua2VkX3NvdXJjZV9jYiwgJmhvd21hbnkpKTsKKworCS8qIExldCdzIHJlcGxhY2UgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2IgZmlsZSBzdG9yYWdlIHdpdGggc29tZXRoaW5nIGVsc2UuLi4gKi8KKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pLCAib2JqZWN0cy8zMi8xY2JkZjA4ODAzYzc0NDA4MjMzMjMzMjgzOGRmNmJkMTYwZjhmOSIpKTsKKwljbF9naXRfcGFzcyhwX3VubGluayhnaXRfYnVmX2NzdHIoJnBhdGgpKSk7CisJY2xfZ2l0X21rZmlsZShnaXRfYnVmX2NzdHIoJnBhdGgpLCAiYm9vbSIpOworCisJLyogLi4ucmVxdWVzdCBhIGNyZWF0aW9uIG9mIHRoZSBzYW1lIGJsb2IuLi4gKi8KKwlob3dtYW55ID0gNzsKKwljbF9naXRfcGFzcyhnaXRfYmxvYl9jcmVhdGVfZnJvbWNodW5rcygmb2lkLCByZXBvLCBOVUxMLCB0ZXh0X2NodW5rZWRfc291cmNlX2NiLCAmaG93bWFueSkpOworCisJLyogLi4uYW5kIGVuc3VyZSB0aGUgY29udGVudCBvZiB0aGUgZmFrZWQgYmxvYiBmaWxlIGhhc24ndCBiZWVuIGFsdGVyZWQgKi8KKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmNvbnRlbnQsIGdpdF9idWZfY3N0cigmcGF0aCkpKTsKKwljbF9hc3NlcnQoIWdpdF9fc3RyY21wKCJib29tIiwgZ2l0X2J1Zl9jc3RyKCZjb250ZW50KSkpOworCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlnaXRfYnVmX2ZyZWUoJmNvbnRlbnQpOworfQorCiAjZGVmaW5lIEdJVEFUVFIgIiogdGV4dD1hdXRvXG4iIFwKIAkiKi50eHQgdGV4dFxuIiBcCiAJIiouZGF0YSBiaW5hcnlcbiIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2JqZWN0L2Jsb2Ivd3JpdGUuYyBiL3Rlc3RzL29iamVjdC9ibG9iL3dyaXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L2Jsb2Ivd3JpdGUuYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L2Jsb2Ivd3JpdGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvY2FjaGUuYyBiL3Rlc3RzL29iamVjdC9jYWNoZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9jYWNoZS5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvY2FjaGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvY29tbWl0L2NvbW1pdHN0YWdlZGZpbGUuYyBiL3Rlc3RzL29iamVjdC9jb21taXQvY29tbWl0c3RhZ2VkZmlsZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9jb21taXQvY29tbWl0c3RhZ2VkZmlsZS5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvY29tbWl0L2NvbW1pdHN0YWdlZGZpbGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvbG9va3VwLmMgYi90ZXN0cy9vYmplY3QvbG9va3VwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L2xvb2t1cC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvbG9va3VwLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL29iamVjdC9sb29rdXBieXBhdGguYyBiL3Rlc3RzL29iamVjdC9sb29rdXBieXBhdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWFhYzc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb2JqZWN0L2xvb2t1cGJ5cGF0aC5jCkBAIC0wLDAgKzEsODMgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKworI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87CitzdGF0aWMgZ2l0X3RyZWUgKmdfcm9vdF90cmVlOworc3RhdGljIGdpdF9jb21taXQgKmdfaGVhZF9jb21taXQ7CitzdGF0aWMgZ2l0X29iamVjdCAqZ19leHBlY3RlZG9iamVjdCwKKwkJCQkJCSpnX2FjdHVhbG9iamVjdDsKKwordm9pZCB0ZXN0X29iamVjdF9sb29rdXBieXBhdGhfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpoZWFkOworCWdpdF90cmVlX2VudHJ5ICp0cmVlX2VudHJ5OworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19yZXBvLCBjbF9maXh0dXJlKCJhdHRyLy5naXR0ZWQiKSkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaGVhZCgmaGVhZCwgZ19yZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9wZWVsKChnaXRfb2JqZWN0KiopJmdfaGVhZF9jb21taXQsIGhlYWQsIEdJVF9PQkpfQ09NTUlUKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF90cmVlKCZnX3Jvb3RfdHJlZSwgZ19oZWFkX2NvbW1pdCkpOworCWNsX2dpdF9wYXNzKGdpdF90cmVlX2VudHJ5X2J5cGF0aCgmdHJlZV9lbnRyeSwgZ19yb290X3RyZWUsICJzdWJkaXIvc3ViZGlyX3Rlc3QyLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfb2JqZWN0X2xvb2t1cCgmZ19leHBlY3RlZG9iamVjdCwgZ19yZXBvLCBnaXRfdHJlZV9lbnRyeV9pZCh0cmVlX2VudHJ5KSwKKwkJCQlHSVRfT0JKX0FOWSkpOworCisJZ2l0X3RyZWVfZW50cnlfZnJlZSh0cmVlX2VudHJ5KTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CisKKwlnX2FjdHVhbG9iamVjdCA9IE5VTEw7Cit9Cit2b2lkIHRlc3Rfb2JqZWN0X2xvb2t1cGJ5cGF0aF9fY2xlYW51cCh2b2lkKQoreworCWdpdF9vYmplY3RfZnJlZShnX2FjdHVhbG9iamVjdCk7CisJZ2l0X29iamVjdF9mcmVlKGdfZXhwZWN0ZWRvYmplY3QpOworCWdpdF90cmVlX2ZyZWUoZ19yb290X3RyZWUpOworCWdpdF9jb21taXRfZnJlZShnX2hlYWRfY29tbWl0KTsKKwlnX2V4cGVjdGVkb2JqZWN0ID0gTlVMTDsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKGdfcmVwbyk7CisJZ19yZXBvID0gTlVMTDsKK30KKwordm9pZCB0ZXN0X29iamVjdF9sb29rdXBieXBhdGhfX2Vycm9ycyh2b2lkKQoreworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FSU5WQUxJRFNQRUMsCisJCQlnaXRfb2JqZWN0X2xvb2t1cF9ieXBhdGgoJmdfYWN0dWFsb2JqZWN0LCAoZ2l0X29iamVjdCopZ19yb290X3RyZWUsCisJCQkJInN1YmRpci9zdWJkaXJfdGVzdDIudHh0IiwgR0lUX09CSl9UUkVFKSk7IC8vIEl0J3Mgbm90IGEgdHJlZQorCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTk9URk9VTkQsCisJCQlnaXRfb2JqZWN0X2xvb2t1cF9ieXBhdGgoJmdfYWN0dWFsb2JqZWN0LCAoZ2l0X29iamVjdCopZ19yb290X3RyZWUsCisJCQkJImZpbGUvZG9lc250L2V4aXN0IiwgR0lUX09CSl9BTlkpKTsKK30KKwordm9pZCB0ZXN0X29iamVjdF9sb29rdXBieXBhdGhfX2Zyb21fcm9vdF90cmVlKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X29iamVjdF9sb29rdXBfYnlwYXRoKCZnX2FjdHVhbG9iamVjdCwgKGdpdF9vYmplY3QqKWdfcm9vdF90cmVlLAorCQkJCSJzdWJkaXIvc3ViZGlyX3Rlc3QyLnR4dCIsIEdJVF9PQkpfQkxPQikpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGdpdF9vaWRfY21wKGdpdF9vYmplY3RfaWQoZ19leHBlY3RlZG9iamVjdCksCisJCQkJZ2l0X29iamVjdF9pZChnX2FjdHVhbG9iamVjdCkpKTsKK30KKwordm9pZCB0ZXN0X29iamVjdF9sb29rdXBieXBhdGhfX2Zyb21faGVhZF9jb21taXQodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfb2JqZWN0X2xvb2t1cF9ieXBhdGgoJmdfYWN0dWFsb2JqZWN0LCAoZ2l0X29iamVjdCopZ19oZWFkX2NvbW1pdCwKKwkJCQkic3ViZGlyL3N1YmRpcl90ZXN0Mi50eHQiLCBHSVRfT0JKX0JMT0IpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBnaXRfb2lkX2NtcChnaXRfb2JqZWN0X2lkKGdfZXhwZWN0ZWRvYmplY3QpLAorCQkJCWdpdF9vYmplY3RfaWQoZ19hY3R1YWxvYmplY3QpKSk7Cit9CisKK3ZvaWQgdGVzdF9vYmplY3RfbG9va3VwYnlwYXRoX19mcm9tX3N1YmRpcl90cmVlKHZvaWQpCit7CisJZ2l0X3RyZWVfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlnaXRfdHJlZSAqdHJlZSA9IE5VTEw7CisKKwljbF9naXRfcGFzcyhnaXRfdHJlZV9lbnRyeV9ieXBhdGgoJmVudHJ5LCBnX3Jvb3RfdHJlZSwgInN1YmRpciIpKTsKKwljbF9naXRfcGFzcyhnaXRfdHJlZV9sb29rdXAoJnRyZWUsIGdfcmVwbywgZ2l0X3RyZWVfZW50cnlfaWQoZW50cnkpKSk7CisKKwljbF9naXRfcGFzcyhnaXRfb2JqZWN0X2xvb2t1cF9ieXBhdGgoJmdfYWN0dWFsb2JqZWN0LCAoZ2l0X29iamVjdCopdHJlZSwKKwkJCQkic3ViZGlyX3Rlc3QyLnR4dCIsIEdJVF9PQkpfQkxPQikpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGdpdF9vaWRfY21wKGdpdF9vYmplY3RfaWQoZ19leHBlY3RlZG9iamVjdCksCisJCQkJZ2l0X29iamVjdF9pZChnX2FjdHVhbG9iamVjdCkpKTsKKworCWdpdF90cmVlX2VudHJ5X2ZyZWUoZW50cnkpOworCWdpdF90cmVlX2ZyZWUodHJlZSk7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2JqZWN0L21lc3NhZ2UuYyBiL3Rlc3RzL29iamVjdC9tZXNzYWdlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L21lc3NhZ2UuYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L21lc3NhZ2UuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcGVlbC5jIGIvdGVzdHMvb2JqZWN0L3BlZWwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9vYmplY3QvcGVlbC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcGVlbC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29iamVjdC9yYXcvY2hhcnMuYyBiL3Rlc3RzL29iamVjdC9yYXcvY2hhcnMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9vYmplY3QvcmF3L2NoYXJzLmMKcmVuYW1lIHRvIHRlc3RzL29iamVjdC9yYXcvY2hhcnMuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcmF3L2NvbXBhcmUuYyBiL3Rlc3RzL29iamVjdC9yYXcvY29tcGFyZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvY29tcGFyZS5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcmF3L2NvbXBhcmUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcmF3L2NvbnZlcnQuYyBiL3Rlc3RzL29iamVjdC9yYXcvY29udmVydC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvY29udmVydC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcmF3L2NvbnZlcnQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcmF3L2RhdGEuaCBiL3Rlc3RzL29iamVjdC9yYXcvZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvZGF0YS5oCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcmF3L2RhdGEuaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcmF3L2Zyb21zdHIuYyBiL3Rlc3RzL29iamVjdC9yYXcvZnJvbXN0ci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvZnJvbXN0ci5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcmF3L2Zyb21zdHIuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcmF3L2hhc2guYyBiL3Rlc3RzL29iamVjdC9yYXcvaGFzaC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvaGFzaC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcmF3L2hhc2guYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvcmF3L3Nob3J0LmMgYi90ZXN0cy9vYmplY3QvcmF3L3Nob3J0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L3Jhdy9zaG9ydC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvcmF3L3Nob3J0LmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2JqZWN0L3Jhdy9zaXplLmMgYi90ZXN0cy9vYmplY3QvcmF3L3NpemUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9vYmplY3QvcmF3L3NpemUuYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L3Jhdy9zaXplLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2JqZWN0L3Jhdy90eXBlMnN0cmluZy5jIGIvdGVzdHMvb2JqZWN0L3Jhdy90eXBlMnN0cmluZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvdHlwZTJzdHJpbmcuYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L3Jhdy90eXBlMnN0cmluZy5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29iamVjdC9yYXcvd3JpdGUuYyBiL3Rlc3RzL29iamVjdC9yYXcvd3JpdGUuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC9yYXcvd3JpdGUuYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L3Jhdy93cml0ZS5jCmluZGV4IDk3MDljMDMuLjI3M2YwOGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvb2JqZWN0L3Jhdy93cml0ZS5jCisrKyBiL3Rlc3RzL29iamVjdC9yYXcvd3JpdGUuYwpAQCAtMzEsOSArMzEsOSBAQAogICAgaW50IGVycm9yOwogCiAgICBjbF9naXRfcGFzcyhnaXRfb2RiX29wZW5fd3N0cmVhbSgmc3RyZWFtLCBvZGIsIHJhdy0+bGVuLCByYXctPnR5cGUpKTsKLSAgIHN0cmVhbS0+d3JpdGUoc3RyZWFtLCByYXctPmRhdGEsIHJhdy0+bGVuKTsKLSAgIGVycm9yID0gc3RyZWFtLT5maW5hbGl6ZV93cml0ZShvaWQsIHN0cmVhbSk7Ci0gICBzdHJlYW0tPmZyZWUoc3RyZWFtKTsKKyAgIGdpdF9vZGJfc3RyZWFtX3dyaXRlKHN0cmVhbSwgcmF3LT5kYXRhLCByYXctPmxlbik7CisgICBlcnJvciA9IGdpdF9vZGJfc3RyZWFtX2ZpbmFsaXplX3dyaXRlKG9pZCwgc3RyZWFtKTsKKyAgIGdpdF9vZGJfc3RyZWFtX2ZyZWUoc3RyZWFtKTsKICAgIGNsX2dpdF9wYXNzKGVycm9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvdGFnL2xpc3QuYyBiL3Rlc3RzL29iamVjdC90YWcvbGlzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC90YWcvbGlzdC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdGFnL2xpc3QuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvdGFnL3BlZWwuYyBiL3Rlc3RzL29iamVjdC90YWcvcGVlbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC90YWcvcGVlbC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdGFnL3BlZWwuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvdGFnL3JlYWQuYyBiL3Rlc3RzL29iamVjdC90YWcvcmVhZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC90YWcvcmVhZC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdGFnL3JlYWQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvdGFnL3dyaXRlLmMgYi90ZXN0cy9vYmplY3QvdGFnL3dyaXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L3RhZy93cml0ZS5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdGFnL3dyaXRlLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2JqZWN0L3RyZWUvYXR0cmlidXRlcy5jIGIvdGVzdHMvb2JqZWN0L3RyZWUvYXR0cmlidXRlcy5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L3RyZWUvYXR0cmlidXRlcy5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdHJlZS9hdHRyaWJ1dGVzLmMKaW5kZXggY2M5M2I0NS4uODUyMTZjZCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9vYmplY3QvdHJlZS9hdHRyaWJ1dGVzLmMKKysrIGIvdGVzdHMvb2JqZWN0L3RyZWUvYXR0cmlidXRlcy5jCkBAIC0xMDcsNyArMTA3LDggQEAKIAljbF9naXRfcGFzcyhnaXRfdHJlZV9sb29rdXAoJnRyZWUsIHJlcG8sICZpZCkpOwogCiAJZW50cnkgPSBnaXRfdHJlZV9lbnRyeV9ieW5hbWUodHJlZSwgIkxpc3RhVGVzdGUueG1sIik7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koZW50cnktPmF0dHIsIEdJVF9GSUxFTU9ERV9CTE9CKTsKKwljbF9hc3NlcnRfZXF1YWxfaShnaXRfdHJlZV9lbnRyeV9maWxlbW9kZShlbnRyeSksIEdJVF9GSUxFTU9ERV9CTE9CKTsKKwljbF9hc3NlcnRfZXF1YWxfaShnaXRfdHJlZV9lbnRyeV9maWxlbW9kZV9yYXcoZW50cnkpLCAwMTAwNjAwKTsKIAogCWdpdF90cmVlX2ZyZWUodHJlZSk7CiAJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvdHJlZS9kdXBsaWNhdGVlbnRyaWVzLmMgYi90ZXN0cy9vYmplY3QvdHJlZS9kdXBsaWNhdGVlbnRyaWVzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L3RyZWUvZHVwbGljYXRlZW50cmllcy5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdHJlZS9kdXBsaWNhdGVlbnRyaWVzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2JqZWN0L3RyZWUvZnJvbXBhdGguYyBiL3Rlc3RzL29iamVjdC90cmVlL2Zyb21wYXRoLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L3RyZWUvZnJvbXBhdGguYwpyZW5hbWUgdG8gdGVzdHMvb2JqZWN0L3RyZWUvZnJvbXBhdGguYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vYmplY3QvdHJlZS9yZWFkLmMgYi90ZXN0cy9vYmplY3QvdHJlZS9yZWFkLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2JqZWN0L3RyZWUvcmVhZC5jCnJlbmFtZSB0byB0ZXN0cy9vYmplY3QvdHJlZS9yZWFkLmMKZGlmZiAtLWdpdCBhL3Rlc3RzL29iamVjdC90cmVlL3dhbGsuYyBiL3Rlc3RzL29iamVjdC90cmVlL3dhbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA3ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb2JqZWN0L3RyZWUvd2Fsay5jCkBAIC0wLDAgKzEsMTc3IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAidHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqdHJlZV9vaWQgPSAiMTgxMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZCI7CitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbzsKKwordm9pZCB0ZXN0X29iamVjdF90cmVlX3dhbGtfX2luaXRpYWxpemUodm9pZCkKK3sKKyAgIGdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvIik7Cit9CisKK3ZvaWQgdGVzdF9vYmplY3RfdHJlZV93YWxrX19jbGVhbnVwKHZvaWQpCit7CisgICBjbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3N0YXRpYyBpbnQgdHJlZXdhbGtfY291bnRfY2IoCisJY29uc3QgY2hhciAqcm9vdCwgY29uc3QgZ2l0X3RyZWVfZW50cnkgKmVudHJ5LCB2b2lkICpwYXlsb2FkKQoreworCWludCAqY291bnQgPSBwYXlsb2FkOworCisJR0lUX1VOVVNFRChyb290KTsKKwlHSVRfVU5VU0VEKGVudHJ5KTsKKworCSgqY291bnQpICs9IDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0X29iamVjdF90cmVlX3dhbGtfXzAodm9pZCkKK3sKKwlnaXRfb2lkIGlkOworCWdpdF90cmVlICp0cmVlOworCWludCBjdDsKKworCWdpdF9vaWRfZnJvbXN0cigmaWQsIHRyZWVfb2lkKTsKKworCWNsX2dpdF9wYXNzKGdpdF90cmVlX2xvb2t1cCgmdHJlZSwgZ19yZXBvLCAmaWQpKTsKKworCWN0ID0gMDsKKwljbF9naXRfcGFzcyhnaXRfdHJlZV93YWxrKHRyZWUsIEdJVF9UUkVFV0FMS19QUkUsIHRyZWV3YWxrX2NvdW50X2NiLCAmY3QpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgzLCBjdCk7CisKKwljdCA9IDA7CisJY2xfZ2l0X3Bhc3MoZ2l0X3RyZWVfd2Fsayh0cmVlLCBHSVRfVFJFRVdBTEtfUE9TVCwgdHJlZXdhbGtfY291bnRfY2IsICZjdCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGN0KTsKKworCWdpdF90cmVlX2ZyZWUodHJlZSk7Cit9CisKKworc3RhdGljIGludCB0cmVld2Fsa19zdG9wX2NiKAorCWNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGdpdF90cmVlX2VudHJ5ICplbnRyeSwgdm9pZCAqcGF5bG9hZCkKK3sKKwlpbnQgKmNvdW50ID0gcGF5bG9hZDsKKworCUdJVF9VTlVTRUQocm9vdCk7CisJR0lUX1VOVVNFRChlbnRyeSk7CisKKwkoKmNvdW50KSArPSAxOworCisJcmV0dXJuICgqY291bnQgPT0gMikgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJlZXdhbGtfc3RvcF9pbW1lZGlhdGVseV9jYigKKwljb25zdCBjaGFyICpyb290LCBjb25zdCBnaXRfdHJlZV9lbnRyeSAqZW50cnksIHZvaWQgKnBheWxvYWQpCit7CisJR0lUX1VOVVNFRChyb290KTsKKwlHSVRfVU5VU0VEKGVudHJ5KTsKKwlHSVRfVU5VU0VEKHBheWxvYWQpOworCXJldHVybiAtMTAwOworfQorCit2b2lkIHRlc3Rfb2JqZWN0X3RyZWVfd2Fsa19fMSh2b2lkKQoreworCWdpdF9vaWQgaWQ7CisJZ2l0X3RyZWUgKnRyZWU7CisJaW50IGN0OworCisJZ2l0X29pZF9mcm9tc3RyKCZpZCwgdHJlZV9vaWQpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3RyZWVfbG9va3VwKCZ0cmVlLCBnX3JlcG8sICZpZCkpOworCisJY3QgPSAwOworCWNsX2Fzc2VydF9lcXVhbF9pKAorCQlHSVRfRVVTRVIsIGdpdF90cmVlX3dhbGsodHJlZSwgR0lUX1RSRUVXQUxLX1BSRSwgdHJlZXdhbGtfc3RvcF9jYiwgJmN0KSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMiwgY3QpOworCisJY3QgPSAwOworCWNsX2Fzc2VydF9lcXVhbF9pKAorCQlHSVRfRVVTRVIsIGdpdF90cmVlX3dhbGsodHJlZSwgR0lUX1RSRUVXQUxLX1BPU1QsIHRyZWV3YWxrX3N0b3BfY2IsICZjdCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDIsIGN0KTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKAorCQlHSVRfRVVTRVIsIGdpdF90cmVlX3dhbGsoCisJCQl0cmVlLCBHSVRfVFJFRVdBTEtfUFJFLCB0cmVld2Fsa19zdG9wX2ltbWVkaWF0ZWx5X2NiLCBOVUxMKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgKKwkJR0lUX0VVU0VSLCBnaXRfdHJlZV93YWxrKAorCQkJdHJlZSwgR0lUX1RSRUVXQUxLX1BPU1QsIHRyZWV3YWxrX3N0b3BfaW1tZWRpYXRlbHlfY2IsIE5VTEwpKTsKKworCWdpdF90cmVlX2ZyZWUodHJlZSk7Cit9CisKKworc3RydWN0IHRyZWV3YWxrX3NraXBfZGF0YSB7CisJaW50IGZpbGVzOworCWludCBkaXJzOworCWNvbnN0IGNoYXIgKnNraXA7CisJY29uc3QgY2hhciAqc3RvcDsKK307CisKK3N0YXRpYyBpbnQgdHJlZXdhbGtfc2tpcF9kZV9jYigKKwljb25zdCBjaGFyICpyb290LCBjb25zdCBnaXRfdHJlZV9lbnRyeSAqZW50cnksIHZvaWQgKnBheWxvYWQpCit7CisJc3RydWN0IHRyZWV3YWxrX3NraXBfZGF0YSAqZGF0YSA9IHBheWxvYWQ7CisJY29uc3QgY2hhciAqbmFtZSA9IGdpdF90cmVlX2VudHJ5X25hbWUoZW50cnkpOworCisJR0lUX1VOVVNFRChyb290KTsKKworCWlmIChnaXRfdHJlZV9lbnRyeV90eXBlKGVudHJ5KSA9PSBHSVRfT0JKX1RSRUUpCisJCWRhdGEtPmRpcnMrKzsKKwllbHNlCisJCWRhdGEtPmZpbGVzKys7CisKKwlpZiAoZGF0YS0+c2tpcCAmJiAhc3RyY21wKG5hbWUsIGRhdGEtPnNraXApKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChkYXRhLT5zdG9wICYmICFzdHJjbXAobmFtZSwgZGF0YS0+c3RvcCkpCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCit2b2lkIHRlc3Rfb2JqZWN0X3RyZWVfd2Fsa19fMih2b2lkKQoreworCWdpdF9vaWQgaWQ7CisJZ2l0X3RyZWUgKnRyZWU7CisJc3RydWN0IHRyZWV3YWxrX3NraXBfZGF0YSBkYXRhOworCisJLyogbG9vayB1cCBhIGRlZXAgdHJlZSAqLworCWdpdF9vaWRfZnJvbXN0cigmaWQsICJhZTkwZjEyZWVhNjk5NzI5ZWQyNDU1NWU0MGI5ZmQ2NjlkYTEyYTEyIik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3RyZWVfbG9va3VwKCZ0cmVlLCBnX3JlcG8sICZpZCkpOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEuc2tpcCA9ICJkZSI7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBnaXRfdHJlZV93YWxrKAorCQl0cmVlLCBHSVRfVFJFRVdBTEtfUFJFLCB0cmVld2Fsa19za2lwX2RlX2NiLCAmZGF0YSkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDUsIGRhdGEuZmlsZXMpOworCWNsX2Fzc2VydF9lcXVhbF9pKDMsIGRhdGEuZGlycyk7CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5zdG9wID0gIjMudHh0IjsKKworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FVVNFUiwgZ2l0X3RyZWVfd2FsaygKKwkJdHJlZSwgR0lUX1RSRUVXQUxLX1BSRSwgdHJlZXdhbGtfc2tpcF9kZV9jYiwgJmRhdGEpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgzLCBkYXRhLmZpbGVzKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgyLCBkYXRhLmRpcnMpOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEuc2tpcCA9ICJuZXcudHh0IjsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGdpdF90cmVlX3dhbGsoCisJCXRyZWUsIEdJVF9UUkVFV0FMS19QUkUsIHRyZWV3YWxrX3NraXBfZGVfY2IsICZkYXRhKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNywgZGF0YS5maWxlcyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgZGF0YS5kaXJzKTsKKworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLnN0b3AgPSAibmV3LnR4dCI7CisKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRVVTRVIsIGdpdF90cmVlX3dhbGsoCisJCXRyZWUsIEdJVF9UUkVFV0FMS19QUkUsIHRyZWV3YWxrX3NraXBfZGVfY2IsICZkYXRhKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNywgZGF0YS5maWxlcyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koNCwgZGF0YS5kaXJzKTsKKworCWdpdF90cmVlX2ZyZWUodHJlZSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29iamVjdC90cmVlL3dyaXRlLmMgYi90ZXN0cy9vYmplY3QvdHJlZS93cml0ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29iamVjdC90cmVlL3dyaXRlLmMKcmVuYW1lIHRvIHRlc3RzL29iamVjdC90cmVlL3dyaXRlLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2RiL2FsdGVybmF0ZXMuYyBiL3Rlc3RzL29kYi9hbHRlcm5hdGVzLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9vZGIvYWx0ZXJuYXRlcy5jCnJlbmFtZSB0byB0ZXN0cy9vZGIvYWx0ZXJuYXRlcy5jCmluZGV4IDRlODc2YzIuLmM3NWY2ZmUgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvb2RiL2FsdGVybmF0ZXMuYworKysgYi90ZXN0cy9vZGIvYWx0ZXJuYXRlcy5jCkBAIC0zMiw5ICszMiw5IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2RpcihmaWxlcGF0aC5wdHIsIE5VTEwsIDA3NTUsIEdJVF9NS0RJUl9QQVRIKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZXBhdGgsIGZpbGVwYXRoLnB0ciAsICJhbHRlcm5hdGVzIikpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZ2l0X2J1Zl9jc3RyKCZmaWxlcGF0aCksIDApKTsKKwljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCBnaXRfYnVmX2NzdHIoJmZpbGVwYXRoKSwgMCwgMDY2NikpOwogCWdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIiVzXG4iLCBnaXRfYnVmX2NzdHIoJmRlc3RwYXRoKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlLCAwNjQ0KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlKSk7CiAKIAlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb2RiL2JhY2tlbmQvbm9ucmVmcmVzaGluZy5jIGIvdGVzdHMvb2RiL2JhY2tlbmQvbm9ucmVmcmVzaGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzUyOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vZGIvYmFja2VuZC9ub25yZWZyZXNoaW5nLmMKQEAgLTAsMCArMSwyNzQgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJnaXQyL3N5cy9vZGJfYmFja2VuZC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKwordHlwZWRlZiBzdHJ1Y3QgZmFrZV9iYWNrZW5kIHsKKwlnaXRfb2RiX2JhY2tlbmQgcGFyZW50OworCisJZ2l0X2Vycm9yX2NvZGUgZXJyb3JfY29kZTsKKworCWludCBleGlzdHNfY2FsbHM7CisJaW50IHJlYWRfY2FsbHM7CisJaW50IHJlYWRfaGVhZGVyX2NhbGxzOworCWludCByZWFkX3ByZWZpeF9jYWxsczsKK30gZmFrZV9iYWNrZW5kOworCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKl9yZXBvOworc3RhdGljIGZha2VfYmFja2VuZCAqX2Zha2U7CitzdGF0aWMgZ2l0X29pZCBfb2lkOworCitzdGF0aWMgaW50IGZha2VfYmFja2VuZF9fZXhpc3RzKGdpdF9vZGJfYmFja2VuZCAqYmFja2VuZCwgY29uc3QgZ2l0X29pZCAqb2lkKQoreworCWZha2VfYmFja2VuZCAqZmFrZTsKKworCUdJVF9VTlVTRUQob2lkKTsKKworCWZha2UgPSAoZmFrZV9iYWNrZW5kICopYmFja2VuZDsKKworCWZha2UtPmV4aXN0c19jYWxscysrOworCisJcmV0dXJuIChmYWtlLT5lcnJvcl9jb2RlID09IEdJVF9PSyk7Cit9CisKK3N0YXRpYyBpbnQgZmFrZV9iYWNrZW5kX19yZWFkKAorCXZvaWQgKipidWZmZXJfcCwgc2l6ZV90ICpsZW5fcCwgZ2l0X290eXBlICp0eXBlX3AsCisJZ2l0X29kYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBnaXRfb2lkICpvaWQpCit7CisJZmFrZV9iYWNrZW5kICpmYWtlOworCisJR0lUX1VOVVNFRChidWZmZXJfcCk7CisJR0lUX1VOVVNFRChsZW5fcCk7CisJR0lUX1VOVVNFRCh0eXBlX3ApOworCUdJVF9VTlVTRUQob2lkKTsKKworCWZha2UgPSAoZmFrZV9iYWNrZW5kICopYmFja2VuZDsKKworCWZha2UtPnJlYWRfY2FsbHMrKzsKKworCSpsZW5fcCA9IDA7CisJKmJ1ZmZlcl9wID0gTlVMTDsKKwkqdHlwZV9wID0gR0lUX09CSl9CTE9COworCisJcmV0dXJuIGZha2UtPmVycm9yX2NvZGU7Cit9CisKK3N0YXRpYyBpbnQgZmFrZV9iYWNrZW5kX19yZWFkX2hlYWRlcigKKwlzaXplX3QgKmxlbl9wLCBnaXRfb3R5cGUgKnR5cGVfcCwKKwlnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKm9pZCkKK3sKKwlmYWtlX2JhY2tlbmQgKmZha2U7CisKKwlHSVRfVU5VU0VEKGxlbl9wKTsKKwlHSVRfVU5VU0VEKHR5cGVfcCk7CisJR0lUX1VOVVNFRChvaWQpOworCisJZmFrZSA9IChmYWtlX2JhY2tlbmQgKiliYWNrZW5kOworCisJZmFrZS0+cmVhZF9oZWFkZXJfY2FsbHMrKzsKKworCSpsZW5fcCA9IDA7CisJKnR5cGVfcCA9IEdJVF9PQkpfQkxPQjsKKworCXJldHVybiBmYWtlLT5lcnJvcl9jb2RlOworfQorCitzdGF0aWMgaW50IGZha2VfYmFja2VuZF9fcmVhZF9wcmVmaXgoCisJZ2l0X29pZCAqb3V0X29pZCwgdm9pZCAqKmJ1ZmZlcl9wLCBzaXplX3QgKmxlbl9wLCBnaXRfb3R5cGUgKnR5cGVfcCwKKwlnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKnNob3J0X29pZCwJc2l6ZV90IGxlbikKK3sKKwlmYWtlX2JhY2tlbmQgKmZha2U7CisKKwlHSVRfVU5VU0VEKG91dF9vaWQpOworCUdJVF9VTlVTRUQoYnVmZmVyX3ApOworCUdJVF9VTlVTRUQobGVuX3ApOworCUdJVF9VTlVTRUQodHlwZV9wKTsKKwlHSVRfVU5VU0VEKHNob3J0X29pZCk7CisJR0lUX1VOVVNFRChsZW4pOworCisJZmFrZSA9IChmYWtlX2JhY2tlbmQgKiliYWNrZW5kOworCisJZmFrZS0+cmVhZF9wcmVmaXhfY2FsbHMrKzsKKworCSpsZW5fcCA9IDA7CisJKmJ1ZmZlcl9wID0gTlVMTDsKKwkqdHlwZV9wID0gR0lUX09CSl9CTE9COworCisJcmV0dXJuIGZha2UtPmVycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkIGZha2VfYmFja2VuZF9fZnJlZShnaXRfb2RiX2JhY2tlbmQgKl9iYWNrZW5kKQoreworCWZha2VfYmFja2VuZCAqYmFja2VuZDsKKworCWJhY2tlbmQgPSAoZmFrZV9iYWNrZW5kICopX2JhY2tlbmQ7CisKKwlnaXRfX2ZyZWUoYmFja2VuZCk7Cit9CisKK3N0YXRpYyBpbnQgYnVpbGRfZmFrZV9iYWNrZW5kKAorCWdpdF9vZGJfYmFja2VuZCAqKm91dCwKKwlnaXRfZXJyb3JfY29kZSBlcnJvcl9jb2RlKQoreworCWZha2VfYmFja2VuZCAqYmFja2VuZDsKKworCWJhY2tlbmQgPSBnaXRfX2NhbGxvYygxLCBzaXplb2YoZmFrZV9iYWNrZW5kKSk7CisJR0lURVJSX0NIRUNLX0FMTE9DKGJhY2tlbmQpOworCisJYmFja2VuZC0+cGFyZW50LnZlcnNpb24gPSBHSVRfT0RCX0JBQ0tFTkRfVkVSU0lPTjsKKworCWJhY2tlbmQtPnBhcmVudC5yZWZyZXNoID0gTlVMTDsKKwliYWNrZW5kLT5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKworCWJhY2tlbmQtPnBhcmVudC5yZWFkID0gZmFrZV9iYWNrZW5kX19yZWFkOworCWJhY2tlbmQtPnBhcmVudC5yZWFkX3ByZWZpeCA9IGZha2VfYmFja2VuZF9fcmVhZF9wcmVmaXg7CisJYmFja2VuZC0+cGFyZW50LnJlYWRfaGVhZGVyID0gZmFrZV9iYWNrZW5kX19yZWFkX2hlYWRlcjsKKwliYWNrZW5kLT5wYXJlbnQuZXhpc3RzID0gZmFrZV9iYWNrZW5kX19leGlzdHM7CisJYmFja2VuZC0+cGFyZW50LmZyZWUgPSAmZmFrZV9iYWNrZW5kX19mcmVlOworCisJKm91dCA9IChnaXRfb2RiX2JhY2tlbmQgKiliYWNrZW5kOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoZ2l0X2Vycm9yX2NvZGUgZXJyb3JfY29kZSkKK3sKKwlnaXRfb2RiICpvZGIgPSBOVUxMOworCWdpdF9vZGJfYmFja2VuZCAqYmFja2VuZCA9IE5VTEw7CisKKwlfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvLmdpdCIpOworCisJY2xfZ2l0X3Bhc3MoYnVpbGRfZmFrZV9iYWNrZW5kKCZiYWNrZW5kLCBlcnJvcl9jb2RlKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vZGJfX3dlYWtwdHIoJm9kYiwgX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfb2RiX2FkZF9iYWNrZW5kKG9kYiwgYmFja2VuZCwgMTApKTsKKworCV9mYWtlID0gKGZha2VfYmFja2VuZCAqKWJhY2tlbmQ7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJl9vaWQsICJkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmIikpOworfQorCit2b2lkIHRlc3Rfb2RiX2JhY2tlbmRfbm9ucmVmcmVzaGluZ19fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKwordm9pZCB0ZXN0X29kYl9iYWNrZW5kX25vbnJlZnJlc2hpbmdfX2V4aXN0c19pc19pbnZva2VkX29uY2Vfb25fZmFpbHVyZSh2b2lkKQoreworCWdpdF9vZGIgKm9kYjsKKworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX0VOT1RGT1VORCk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vZGJfX3dlYWtwdHIoJm9kYiwgX3JlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfYihmYWxzZSwgZ2l0X29kYl9leGlzdHMob2RiLCAmX29pZCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgX2Zha2UtPmV4aXN0c19jYWxscyk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfYmFja2VuZF9ub25yZWZyZXNoaW5nX19yZWFkX2lzX2ludm9rZWRfb25jZV9vbl9mYWlsdXJlKHZvaWQpCit7CisJZ2l0X29iamVjdCAqb2JqOworCisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfRU5PVEZPVU5EKTsKKworCWNsX2dpdF9mYWlsX3dpdGgoCisJCWdpdF9vYmplY3RfbG9va3VwKCZvYmosIF9yZXBvLCAmX29pZCwgR0lUX09CSl9BTlkpLAorCQlHSVRfRU5PVEZPVU5EKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIF9mYWtlLT5yZWFkX2NhbGxzKTsKK30KKwordm9pZCB0ZXN0X29kYl9iYWNrZW5kX25vbnJlZnJlc2hpbmdfX3JlYWRwcmVmaXhfaXNfaW52b2tlZF9vbmNlX29uX2ZhaWx1cmUodm9pZCkKK3sKKwlnaXRfb2JqZWN0ICpvYmo7CisKKwlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9FTk9URk9VTkQpOworCisJY2xfZ2l0X2ZhaWxfd2l0aCgKKwkJZ2l0X29iamVjdF9sb29rdXBfcHJlZml4KCZvYmosIF9yZXBvLCAmX29pZCwgNywgR0lUX09CSl9BTlkpLAorCQlHSVRfRU5PVEZPVU5EKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIF9mYWtlLT5yZWFkX3ByZWZpeF9jYWxscyk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfYmFja2VuZF9ub25yZWZyZXNoaW5nX19yZWFkaGVhZGVyX2lzX2ludm9rZWRfb25jZV9vbl9mYWlsdXJlKHZvaWQpCit7CisJZ2l0X29kYiAqb2RiOworCXNpemVfdCBsZW47CisJZ2l0X290eXBlIHR5cGU7CisKKwlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9FTk9URk9VTkQpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb2RiX193ZWFrcHRyKCZvZGIsIF9yZXBvKSk7CisKKwljbF9naXRfZmFpbF93aXRoKAorCQlnaXRfb2RiX3JlYWRfaGVhZGVyKCZsZW4sICZ0eXBlLCBvZGIsICZfb2lkKSwKKwkJR0lUX0VOT1RGT1VORCk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCBfZmFrZS0+cmVhZF9oZWFkZXJfY2FsbHMpOworfQorCit2b2lkIHRlc3Rfb2RiX2JhY2tlbmRfbm9ucmVmcmVzaGluZ19fZXhpc3RzX2lzX2ludm9rZWRfb25jZV9vbl9zdWNjZXNzKHZvaWQpCit7CisJZ2l0X29kYiAqb2RiOworCisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfT0spOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb2RiX193ZWFrcHRyKCZvZGIsIF9yZXBvKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2IodHJ1ZSwgZ2l0X29kYl9leGlzdHMob2RiLCAmX29pZCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgX2Zha2UtPmV4aXN0c19jYWxscyk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfYmFja2VuZF9ub25yZWZyZXNoaW5nX19yZWFkX2lzX2ludm9rZWRfb25jZV9vbl9zdWNjZXNzKHZvaWQpCit7CisJZ2l0X29iamVjdCAqb2JqOworCisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfT0spOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29iamVjdF9sb29rdXAoJm9iaiwgX3JlcG8sICZfb2lkLCBHSVRfT0JKX0FOWSkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgX2Zha2UtPnJlYWRfY2FsbHMpOworCisJZ2l0X29iamVjdF9mcmVlKG9iaik7Cit9CisKK3ZvaWQgdGVzdF9vZGJfYmFja2VuZF9ub25yZWZyZXNoaW5nX19yZWFkcHJlZml4X2lzX2ludm9rZWRfb25jZV9vbl9zdWNjZXNzKHZvaWQpCit7CisJZ2l0X29iamVjdCAqb2JqOworCisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfT0spOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29iamVjdF9sb29rdXBfcHJlZml4KCZvYmosIF9yZXBvLCAmX29pZCwgNywgR0lUX09CSl9BTlkpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIF9mYWtlLT5yZWFkX3ByZWZpeF9jYWxscyk7CisKKwlnaXRfb2JqZWN0X2ZyZWUob2JqKTsKK30KKwordm9pZCB0ZXN0X29kYl9iYWNrZW5kX25vbnJlZnJlc2hpbmdfX3JlYWRoZWFkZXJfaXNfaW52b2tlZF9vbmNlX29uX3N1Y2Nlc3Modm9pZCkKK3sKKwlnaXRfb2RiICpvZGI7CisJc2l6ZV90IGxlbjsKKwlnaXRfb3R5cGUgdHlwZTsKKworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX09LKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCBfcmVwbykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9yZWFkX2hlYWRlcigmbGVuLCAmdHlwZSwgb2RiLCAmX29pZCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgX2Zha2UtPnJlYWRfaGVhZGVyX2NhbGxzKTsKK30KKwordm9pZCB0ZXN0X29kYl9iYWNrZW5kX25vbnJlZnJlc2hpbmdfX3JlYWRfaXNfaW52b2tlZF9vbmNlX3doZW5fcmV2cGFyc2luZ19hX2Z1bGxfb2lkKHZvaWQpCit7CisJZ2l0X29iamVjdCAqb2JqOworCisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfRU5PVEZPVU5EKTsKKworCWNsX2dpdF9mYWlsX3dpdGgoCisJCWdpdF9yZXZwYXJzZV9zaW5nbGUoJm9iaiwgX3JlcG8sICJkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmIiksCisJCUdJVF9FTk9URk9VTkQpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgX2Zha2UtPnJlYWRfY2FsbHMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vZGIvZm9yZWFjaC5jIGIvdGVzdHMvb2RiL2ZvcmVhY2guYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29kYi9mb3JlYWNoLmMKcmVuYW1lIHRvIHRlc3RzL29kYi9mb3JlYWNoLmMKaW5kZXggZjY0M2Q5Ni4uZWJiODg2NiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9vZGIvZm9yZWFjaC5jCisrKyBiL3Rlc3RzL29kYi9mb3JlYWNoLmMKQEAgLTI3LDcgKzI3LDcgQEAKIH0KIAogLyoKLSAqICQgZ2l0IC0tZ2l0LWRpciB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQgY291bnQtb2JqZWN0cyAtLXZlcmJvc2UKKyAqICQgZ2l0IC0tZ2l0LWRpciB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0IGNvdW50LW9iamVjdHMgLS12ZXJib3NlCiAgKiBjb3VudDogNDcKICAqIHNpemU6IDQKICAqIGluLXBhY2s6IDE2NDAKZGlmZiAtLWdpdCBhL3Rlc3RzL29kYi9sb29zZS5jIGIvdGVzdHMvb2RiL2xvb3NlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg1ZjE0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29kYi9sb29zZS5jCkBAIC0wLDAgKzEsMTQ2IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAib2RiLmgiCisjaW5jbHVkZSAiZ2l0Mi9vZGJfYmFja2VuZC5oIgorI2luY2x1ZGUgInBvc2l4LmgiCisjaW5jbHVkZSAibG9vc2VfZGF0YS5oIgorCisjaWZkZWYgX19BTkRST0lEX0FQSV9fCisjIGRlZmluZSBTX0lSRUFEICAgICAgICBTX0lSVVNSCisjIGRlZmluZSBTX0lXUklURSAgICAgICBTX0lXVVNSCisjZW5kaWYKKworc3RhdGljIHZvaWQgd3JpdGVfb2JqZWN0X2ZpbGVzKG9iamVjdF9kYXRhICpkKQoreworCWludCBmZDsKKworCWlmIChwX21rZGlyKGQtPmRpciwgR0lUX09CSkVDVF9ESVJfTU9ERSkgPCAwKQorCQljbF9hc3NlcnQoZXJybm8gPT0gRUVYSVNUKTsKKworCWNsX2Fzc2VydCgoZmQgPSBwX2NyZWF0KGQtPmZpbGUsIFNfSVJFQUQgfCBTX0lXUklURSkpID49IDApOworCWNsX211c3RfcGFzcyhwX3dyaXRlKGZkLCBkLT5ieXRlcywgZC0+YmxlbikpOworCisJcF9jbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNtcF9vYmplY3RzKGdpdF9yYXdvYmogKm8sIG9iamVjdF9kYXRhICpkKQoreworCWNsX2Fzc2VydChvLT50eXBlID09IGdpdF9vYmplY3Rfc3RyaW5nMnR5cGUoZC0+dHlwZSkpOworCWNsX2Fzc2VydChvLT5sZW4gPT0gZC0+ZGxlbik7CisKKwlpZiAoby0+bGVuID4gMCkKKwkJY2xfYXNzZXJ0KG1lbWNtcChvLT5kYXRhLCBkLT5kYXRhLCBvLT5sZW4pID09IDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3JlYWRfb2JqZWN0KG9iamVjdF9kYXRhICpkYXRhKQoreworICAgIGdpdF9vaWQgaWQ7CisgICAgZ2l0X29kYl9vYmplY3QgKm9iajsKKwlnaXRfb2RiICpvZGI7CisJZ2l0X3Jhd29iaiB0bXA7CisKKyAgICB3cml0ZV9vYmplY3RfZmlsZXMoZGF0YSk7CisKKyAgICBjbF9naXRfcGFzcyhnaXRfb2RiX29wZW4oJm9kYiwgInRlc3Qtb2JqZWN0cyIpKTsKKyAgICBjbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmlkLCBkYXRhLT5pZCkpOworICAgIGNsX2dpdF9wYXNzKGdpdF9vZGJfcmVhZCgmb2JqLCBvZGIsICZpZCkpOworCisJdG1wLmRhdGEgPSBvYmotPmJ1ZmZlcjsKKwl0bXAubGVuID0gb2JqLT5jYWNoZWQuc2l6ZTsKKwl0bXAudHlwZSA9IG9iai0+Y2FjaGVkLnR5cGU7CisKKyAgICBjbXBfb2JqZWN0cygmdG1wLCBkYXRhKTsKKworICAgIGdpdF9vZGJfb2JqZWN0X2ZyZWUob2JqKTsKKwlnaXRfb2RiX2ZyZWUob2RiKTsKK30KKwordm9pZCB0ZXN0X29kYl9sb29zZV9faW5pdGlhbGl6ZSh2b2lkKQoreworCWNsX211c3RfcGFzcyhwX21rZGlyKCJ0ZXN0LW9iamVjdHMiLCBHSVRfT0JKRUNUX0RJUl9NT0RFKSk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfbG9vc2VfX2NsZWFudXAodm9pZCkKK3sKKwljbF9maXh0dXJlX2NsZWFudXAoInRlc3Qtb2JqZWN0cyIpOworfQorCit2b2lkIHRlc3Rfb2RiX2xvb3NlX19leGlzdHModm9pZCkKK3sKKyAgICBnaXRfb2lkIGlkLCBpZDI7CisJZ2l0X29kYiAqb2RiOworCisgICAgd3JpdGVfb2JqZWN0X2ZpbGVzKCZvbmUpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfb3Blbigmb2RiLCAidGVzdC1vYmplY3RzIikpOworCisgICAgY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZpZCwgb25lLmlkKSk7CisKKyAgICBjbF9hc3NlcnQoZ2l0X29kYl9leGlzdHMob2RiLCAmaWQpKTsKKworCS8qIFRlc3QgZm9yIGEgbm9uLWV4aXN0YW50IG9iamVjdCAqLworICAgIGNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmaWQyLCAiOGIxMzc4OTE3OTFmZTk2OTI3YWQ3OGU2NGIwYWFkN2JkZWQwOGJhYSIpKTsKKyAgICBjbF9hc3NlcnQoIWdpdF9vZGJfZXhpc3RzKG9kYiwgJmlkMikpOworCisJZ2l0X29kYl9mcmVlKG9kYik7Cit9CisKK3ZvaWQgdGVzdF9vZGJfbG9vc2VfX3NpbXBsZV9yZWFkcyh2b2lkKQoreworCXRlc3RfcmVhZF9vYmplY3QoJmNvbW1pdCk7CisJdGVzdF9yZWFkX29iamVjdCgmdHJlZSk7CisJdGVzdF9yZWFkX29iamVjdCgmdGFnKTsKKwl0ZXN0X3JlYWRfb2JqZWN0KCZ6ZXJvKTsKKwl0ZXN0X3JlYWRfb2JqZWN0KCZvbmUpOworCXRlc3RfcmVhZF9vYmplY3QoJnR3byk7CisJdGVzdF9yZWFkX29iamVjdCgmc29tZSk7Cit9CisKK3ZvaWQgdGVzdF93cml0ZV9vYmplY3RfcGVybWlzc2lvbigKKwltb2RlX3QgZGlyX21vZGUsIG1vZGVfdCBmaWxlX21vZGUsCisJbW9kZV90IGV4cGVjdGVkX2Rpcl9tb2RlLCBtb2RlX3QgZXhwZWN0ZWRfZmlsZV9tb2RlKQoreworCWdpdF9vZGIgKm9kYjsKKwlnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQ7CisJZ2l0X29pZCBvaWQ7CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwltb2RlX3QgbWFzaywgb3NfbWFzazsKKworCS8qIFdpbmRvd3MgZG9lcyBub3QgcmV0dXJuIGdyb3VwL3VzZXIgYml0cyBmcm9tIHN0YXQsCisJKiBmaWxlcyBhcmUgbmV2ZXIgZXhlY3V0YWJsZS4KKwkqLworI2lmZGVmIEdJVF9XSU4zMgorCW9zX21hc2sgPSAwNjAwOworI2Vsc2UKKwlvc19tYXNrID0gMDc3NzsKKyNlbmRpZgorCisJbWFzayA9IHBfdW1hc2soMCk7CisJcF91bWFzayhtYXNrKTsKKworCWNsX2dpdF9wYXNzKGdpdF9vZGJfbmV3KCZvZGIpKTsKKwljbF9naXRfcGFzcyhnaXRfb2RiX2JhY2tlbmRfbG9vc2UoJmJhY2tlbmQsICJ0ZXN0LW9iamVjdHMiLCAtMSwgMCwgZGlyX21vZGUsIGZpbGVfbW9kZSkpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfYWRkX2JhY2tlbmQob2RiLCBiYWNrZW5kLCAxKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl93cml0ZSgmb2lkLCBvZGIsICJUZXN0IGRhdGFcbiIsIDEwLCBHSVRfT0JKX0JMT0IpKTsKKworCWNsX2dpdF9wYXNzKHBfc3RhdCgidGVzdC1vYmplY3RzLzY3IiwgJnN0YXRidWYpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShzdGF0YnVmLnN0X21vZGUgJiBvc19tYXNrLCAoZXhwZWN0ZWRfZGlyX21vZGUgJiB+bWFzaykgJiBvc19tYXNrKTsKKworCWNsX2dpdF9wYXNzKHBfc3RhdCgidGVzdC1vYmplY3RzLzY3L2I4MDhmZWIzNjIwMTUwN2E3N2Y4NWU2ZDg5OGYwYTI4MzZlNGE1IiwgJnN0YXRidWYpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShzdGF0YnVmLnN0X21vZGUgJiBvc19tYXNrLCAoZXhwZWN0ZWRfZmlsZV9tb2RlICYgfm1hc2spICYgb3NfbWFzayk7CisKKwlnaXRfb2RiX2ZyZWUob2RiKTsKK30KKwordm9pZCB0ZXN0X29kYl9sb29zZV9fcGVybWlzc2lvbnNfc3RhbmRhcmQodm9pZCkKK3sKKwl0ZXN0X3dyaXRlX29iamVjdF9wZXJtaXNzaW9uKDAsIDAsIEdJVF9PQkpFQ1RfRElSX01PREUsIEdJVF9PQkpFQ1RfRklMRV9NT0RFKTsKK30KKwordm9pZCB0ZXN0X29kYl9sb29zZV9wZXJtaXNzaW9uc19yZWFkb25seSh2b2lkKQoreworCXRlc3Rfd3JpdGVfb2JqZWN0X3Blcm1pc3Npb24oMDc3NywgMDQ0NCwgMDc3NywgMDQ0NCk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfbG9vc2VfX3Blcm1pc3Npb25zX3JlYWR3cml0ZSh2b2lkKQoreworCXRlc3Rfd3JpdGVfb2JqZWN0X3Blcm1pc3Npb24oMDc3NywgMDY2NiwgMDc3NywgMDY2Nik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29kYi9sb29zZV9kYXRhLmggYi90ZXN0cy9vZGIvbG9vc2VfZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29kYi9sb29zZV9kYXRhLmgKcmVuYW1lIHRvIHRlc3RzL29kYi9sb29zZV9kYXRhLmgKZGlmZiAtLWdpdCBhL3Rlc3RzL29kYi9taXhlZC5jIGIvdGVzdHMvb2RiL21peGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5NzBjZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29kYi9taXhlZC5jCkBAIC0wLDAgKzEsOTMgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJvZGIuaCIKKworc3RhdGljIGdpdF9vZGIgKl9vZGI7CisKK3ZvaWQgdGVzdF9vZGJfbWl4ZWRfX2luaXRpYWxpemUodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfb2RiX29wZW4oJl9vZGIsIGNsX2ZpeHR1cmUoImR1cGxpY2F0ZS5naXQvb2JqZWN0cyIpKSk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfbWl4ZWRfX2NsZWFudXAodm9pZCkKK3sKKwlnaXRfb2RiX2ZyZWUoX29kYik7CisJX29kYiA9IE5VTEw7Cit9CisKK3ZvaWQgdGVzdF9vZGJfbWl4ZWRfX2R1cF9vaWQodm9pZCkgeworCWNvbnN0IGNoYXIgaGV4W10gPSAiY2UwMTM2MjUwMzBiYThkYmE5MDZmNzU2OTY3ZjllOWNhMzk0NDY0YSI7CisJY29uc3QgY2hhciBzaG9ydF9oZXhbXSA9ICJjZTAxMzYyIjsKKwlnaXRfb2lkIG9pZDsKKwlnaXRfb2RiX29iamVjdCAqb2JqOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZvaWQsIGhleCkpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfcmVhZF9wcmVmaXgoJm9iaiwgX29kYiwgJm9pZCwgR0lUX09JRF9IRVhTWikpOworCWdpdF9vZGJfb2JqZWN0X2ZyZWUob2JqKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHJuKCZvaWQsIHNob3J0X2hleCwgc2l6ZW9mKHNob3J0X2hleCkgLSAxKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9yZWFkX3ByZWZpeCgmb2JqLCBfb2RiLCAmb2lkLCBzaXplb2Yoc2hvcnRfaGV4KSAtIDEpKTsKKwlnaXRfb2RiX29iamVjdF9mcmVlKG9iaik7Cit9CisKKy8qIHNvbWUga25vd24gc2hhIGNvbGxpc2lvbnMgb2YgZmlsZSBjb250ZW50OgorICogICAnYWFicWhxJyBhbmQgJ2FhYXp2Yycgd2l0aCBwcmVmaXggJ2RlYTUwOWQwJyAoKyAnOScgYW5kICsgJ2InKQorICogICAnYWFldWZvJyBhbmQgJ2FhYW9ocycgd2l0aCBwcmVmaXggJzgxYjViZmY1JyAoKyAnZicgYW5kICsgJ2InKQorICogICAnYWFmZXd5JyBhbmQgJ2FhZXB0YScgd2l0aCBwcmVmaXggJzczOWUzYzRjJworICogICAnYWFoc3luJyBhbmQgJ2FhZHJqZycgd2l0aCBwcmVmaXggJzBkZGVhZGVkJyAoKyAnOScgYW5kICsgJ2UnKQorICovCisKK3ZvaWQgdGVzdF9vZGJfbWl4ZWRfX2R1cF9vaWRfcHJlZml4XzAodm9pZCkgeworCWNoYXIgaGV4WzEwXTsKKwlnaXRfb2lkIG9pZDsKKwlnaXRfb2RiX29iamVjdCAqb2JqOworCisJLyogYW1iaWd1b3VzIGluIHRoZSBzYW1lIHBhY2sgZmlsZSAqLworCisJc3RybmNweShoZXgsICJkZWE1MDlkMCIsIHNpemVvZihoZXgpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHJuKCZvaWQsIGhleCwgc3RybGVuKGhleCkpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgKKwkJR0lUX0VBTUJJR1VPVVMsIGdpdF9vZGJfcmVhZF9wcmVmaXgoJm9iaiwgX29kYiwgJm9pZCwgc3RybGVuKGhleCkpKTsKKworCXN0cm5jcHkoaGV4LCAiZGVhNTA5ZDA5Iiwgc2l6ZW9mKGhleCkpOworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cm4oJm9pZCwgaGV4LCBzdHJsZW4oaGV4KSkpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfcmVhZF9wcmVmaXgoJm9iaiwgX29kYiwgJm9pZCwgc3RybGVuKGhleCkpKTsKKwlnaXRfb2RiX29iamVjdF9mcmVlKG9iaik7CisKKwlzdHJuY3B5KGhleCwgImRlYTUwOWQwYiIsIHNpemVvZihoZXgpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHJuKCZvaWQsIGhleCwgc3RybGVuKGhleCkpKTsKKwljbF9naXRfcGFzcyhnaXRfb2RiX3JlYWRfcHJlZml4KCZvYmosIF9vZGIsICZvaWQsIHN0cmxlbihoZXgpKSk7CisJZ2l0X29kYl9vYmplY3RfZnJlZShvYmopOworCisJLyogYW1iaWd1b3VzIGluIGRpZmZlcmVudCBwYWNrIGZpbGVzICovCisKKwlzdHJuY3B5KGhleCwgIjgxYjViZmY1Iiwgc2l6ZW9mKGhleCkpOworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cm4oJm9pZCwgaGV4LCBzdHJsZW4oaGV4KSkpOworCWNsX2Fzc2VydF9lcXVhbF9pKAorCQlHSVRfRUFNQklHVU9VUywgZ2l0X29kYl9yZWFkX3ByZWZpeCgmb2JqLCBfb2RiLCAmb2lkLCBzdHJsZW4oaGV4KSkpOworCisJc3RybmNweShoZXgsICI4MWI1YmZmNWIiLCBzaXplb2YoaGV4KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3Rybigmb2lkLCBoZXgsIHN0cmxlbihoZXgpKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9yZWFkX3ByZWZpeCgmb2JqLCBfb2RiLCAmb2lkLCBzdHJsZW4oaGV4KSkpOworCWdpdF9vZGJfb2JqZWN0X2ZyZWUob2JqKTsKKworCXN0cm5jcHkoaGV4LCAiODFiNWJmZjVmIiwgc2l6ZW9mKGhleCkpOworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cm4oJm9pZCwgaGV4LCBzdHJsZW4oaGV4KSkpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfcmVhZF9wcmVmaXgoJm9iaiwgX29kYiwgJm9pZCwgc3RybGVuKGhleCkpKTsKKwlnaXRfb2RiX29iamVjdF9mcmVlKG9iaik7CisKKwkvKiBhbWJpZ3VvdXMgaW4gcGFjayBmaWxlIGFuZCBsb29zZSAqLworCisJc3RybmNweShoZXgsICIwZGRlYWRlZCIsIHNpemVvZihoZXgpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHJuKCZvaWQsIGhleCwgc3RybGVuKGhleCkpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgKKwkJR0lUX0VBTUJJR1VPVVMsIGdpdF9vZGJfcmVhZF9wcmVmaXgoJm9iaiwgX29kYiwgJm9pZCwgc3RybGVuKGhleCkpKTsKKworCXN0cm5jcHkoaGV4LCAiMGRkZWFkZWQ5Iiwgc2l6ZW9mKGhleCkpOworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cm4oJm9pZCwgaGV4LCBzdHJsZW4oaGV4KSkpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfcmVhZF9wcmVmaXgoJm9iaiwgX29kYiwgJm9pZCwgc3RybGVuKGhleCkpKTsKKwlnaXRfb2RiX29iamVjdF9mcmVlKG9iaik7CisKKwlzdHJuY3B5KGhleCwgIjBkZGVhZGVkZSIsIHNpemVvZihoZXgpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHJuKCZvaWQsIGhleCwgc3RybGVuKGhleCkpKTsKKwljbF9naXRfcGFzcyhnaXRfb2RiX3JlYWRfcHJlZml4KCZvYmosIF9vZGIsICZvaWQsIHN0cmxlbihoZXgpKSk7CisJZ2l0X29kYl9vYmplY3RfZnJlZShvYmopOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vZGIvcGFja19kYXRhLmggYi90ZXN0cy9vZGIvcGFja19kYXRhLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2RiL3BhY2tfZGF0YS5oCnJlbmFtZSB0byB0ZXN0cy9vZGIvcGFja19kYXRhLmgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2RiL3BhY2tfZGF0YV9vbmUuaCBiL3Rlc3RzL29kYi9wYWNrX2RhdGFfb25lLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2RiL3BhY2tfZGF0YV9vbmUuaApyZW5hbWUgdG8gdGVzdHMvb2RiL3BhY2tfZGF0YV9vbmUuaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vZGIvcGFja2VkLmMgYi90ZXN0cy9vZGIvcGFja2VkLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2RiL3BhY2tlZC5jCnJlbmFtZSB0byB0ZXN0cy9vZGIvcGFja2VkLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb2RiL3BhY2tlZF9vbmUuYyBiL3Rlc3RzL29kYi9wYWNrZWRfb25lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb2RiL3BhY2tlZF9vbmUuYwpyZW5hbWUgdG8gdGVzdHMvb2RiL3BhY2tlZF9vbmUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vZGIvc29ydGluZy5jIGIvdGVzdHMvb2RiL3NvcnRpbmcuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9vZGIvc29ydGluZy5jCnJlbmFtZSB0byB0ZXN0cy9vZGIvc29ydGluZy5jCmRpZmYgLS1naXQgYS90ZXN0cy9vZGIvc3RyZWFtd3JpdGUuYyBiL3Rlc3RzL29kYi9zdHJlYW13cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MWEyMDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vZGIvc3RyZWFtd3JpdGUuYwpAQCAtMCwwICsxLDU2IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiZ2l0Mi9vZGJfYmFja2VuZC5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKnJlcG87CitzdGF0aWMgZ2l0X29kYiAqb2RiOworc3RhdGljIGdpdF9vZGJfc3RyZWFtICpzdHJlYW07CisKK3ZvaWQgdGVzdF9vZGJfc3RyZWFtd3JpdGVfX2luaXRpYWxpemUodm9pZCkKK3sKKwlyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8uZ2l0Iik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb2RiKCZvZGIsIHJlcG8pKTsKKworCWNsX2dpdF9wYXNzKGdpdF9vZGJfb3Blbl93c3RyZWFtKCZzdHJlYW0sIG9kYiwgMTQsIEdJVF9PQkpfQkxPQikpOworCWNsX2Fzc2VydF9lcXVhbF9zeigxNCwgc3RyZWFtLT5kZWNsYXJlZF9zaXplKTsKK30KKwordm9pZCB0ZXN0X29kYl9zdHJlYW13cml0ZV9fY2xlYW51cCh2b2lkKQoreworCWdpdF9vZGJfc3RyZWFtX2ZyZWUoc3RyZWFtKTsKKwlnaXRfb2RiX2ZyZWUob2RiKTsKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfc3RyZWFtd3JpdGVfX2Nhbl9hY2NlcHRfY2h1bmtzKHZvaWQpCit7CisJZ2l0X29pZCBvaWQ7CisKKwljbF9naXRfcGFzcyhnaXRfb2RiX3N0cmVhbV93cml0ZShzdHJlYW0sICJkZWFkYmVlZiIsIDgpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooOCwgc3RyZWFtLT5yZWNlaXZlZF9ieXRlcyk7CisKKwljbF9naXRfcGFzcyhnaXRfb2RiX3N0cmVhbV93cml0ZShzdHJlYW0sICJkZWFkYmVlZiIsIDYpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooOCArIDYsIHN0cmVhbS0+cmVjZWl2ZWRfYnl0ZXMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9zdHJlYW1fZmluYWxpemVfd3JpdGUoJm9pZCwgc3RyZWFtKSk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfc3RyZWFtd3JpdGVfX2Nhbl9kZXRlY3RfbWlzc2luZ19ieXRlcyh2b2lkKQoreworCWdpdF9vaWQgb2lkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9zdHJlYW1fd3JpdGUoc3RyZWFtLCAiZGVhZGJlZWYiLCA4KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDgsIHN0cmVhbS0+cmVjZWl2ZWRfYnl0ZXMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9zdHJlYW1fd3JpdGUoc3RyZWFtLCAiZGVhZGJlZWYiLCA0KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDggKyA0LCBzdHJlYW0tPnJlY2VpdmVkX2J5dGVzKTsKKworCWNsX2dpdF9mYWlsKGdpdF9vZGJfc3RyZWFtX2ZpbmFsaXplX3dyaXRlKCZvaWQsIHN0cmVhbSkpOworfQorCit2b2lkIHRlc3Rfb2RiX3N0cmVhbXdyaXRlX19jYW5fZGV0ZWN0X2FkZGl0aW9uYWxfYnl0ZXModm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfb2RiX3N0cmVhbV93cml0ZShzdHJlYW0sICJkZWFkYmVlZiIsIDgpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooOCwgc3RyZWFtLT5yZWNlaXZlZF9ieXRlcyk7CisKKwljbF9naXRfZmFpbChnaXRfb2RiX3N0cmVhbV93cml0ZShzdHJlYW0sICJkZWFkYmVlZiIsIDcpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb25saW5lL2Nsb25lLmMgYi90ZXN0cy9vbmxpbmUvY2xvbmUuYwpzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29ubGluZS9jbG9uZS5jCnJlbmFtZSB0byB0ZXN0cy9vbmxpbmUvY2xvbmUuYwppbmRleCBiYzQyODVhLi5lZmM3NmQ5IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL29ubGluZS9jbG9uZS5jCisrKyBiL3Rlc3RzL29ubGluZS9jbG9uZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIEJCX1JFUE9fVVJMICJodHRwczovL2xpYmdpdDJAYml0YnVja2V0Lm9yZy9saWJnaXQyL3Rlc3RnaXRyZXBvc2l0b3J5LmdpdCIKICNkZWZpbmUgQkJfUkVQT19VUkxfV0lUSF9QQVNTICJodHRwczovL2xpYmdpdDI6bGliZ2l0MkBiaXRidWNrZXQub3JnL2xpYmdpdDIvdGVzdGdpdHJlcG9zaXRvcnkuZ2l0IgogI2RlZmluZSBCQl9SRVBPX1VSTF9XSVRIX1dST05HX1BBU1MgImh0dHBzOi8vbGliZ2l0Mjp3cm9uZ0BiaXRidWNrZXQub3JnL2xpYmdpdDIvdGVzdGdpdHJlcG9zaXRvcnkuZ2l0IgorI2RlZmluZSBBU1NFTUJMQV9SRVBPX1VSTCAiaHR0cHM6Ly9saWJnaXQyOl9MaWJnaXQyQGdpdC5hc3NlbWJsYS5jb20vbGliZ2l0Mi10ZXN0LXJlcG9zLmdpdCIKIAogc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87CiBzdGF0aWMgZ2l0X2Nsb25lX29wdGlvbnMgZ19vcHRpb25zOwpAQCAtMTgsNiArMTksNyBAQAogdm9pZCB0ZXN0X29ubGluZV9jbG9uZV9faW5pdGlhbGl6ZSh2b2lkKQogewogCWdpdF9jaGVja291dF9vcHRzIGR1bW15X29wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUU19JTklUOworCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGR1bW15X2NhbGxiYWNrcyA9IEdJVF9SRU1PVEVfQ0FMTEJBQ0tTX0lOSVQ7CiAKIAlnX3JlcG8gPSBOVUxMOwogCkBAIC0yNSw2ICsyNyw3IEBACiAJZ19vcHRpb25zLnZlcnNpb24gPSBHSVRfQ0xPTkVfT1BUSU9OU19WRVJTSU9OOwogCWdfb3B0aW9ucy5jaGVja291dF9vcHRzID0gZHVtbXlfb3B0czsKIAlnX29wdGlvbnMuY2hlY2tvdXRfb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFOworCWdfb3B0aW9ucy5yZW1vdGVfY2FsbGJhY2tzID0gZHVtbXlfY2FsbGJhY2tzOwogfQogCiB2b2lkIHRlc3Rfb25saW5lX2Nsb25lX19jbGVhbnVwKHZvaWQpCkBAIC02OSw3ICs3Miw3IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIExJVkVfRU1QVFlSRVBPX1VSTCwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwogCiAJY2xfYXNzZXJ0X2VxdWFsX2kodHJ1ZSwgZ2l0X3JlcG9zaXRvcnlfaXNfZW1wdHkoZ19yZXBvKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2kodHJ1ZSwgZ2l0X3JlcG9zaXRvcnlfaGVhZF9vcnBoYW4oZ19yZXBvKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2kodHJ1ZSwgZ2l0X3JlcG9zaXRvcnlfaGVhZF91bmJvcm4oZ19yZXBvKSk7CiAKIAljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmaGVhZCwgZ19yZXBvLCBHSVRfSEVBRF9GSUxFKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX1JFRl9TWU1CT0xJQywgZ2l0X3JlZmVyZW5jZV90eXBlKGhlYWQpKTsKQEAgLTEwMyw4ICsxMDYsOCBAQAogCWdfb3B0aW9ucy5jaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX1NBRkVfQ1JFQVRFOwogCWdfb3B0aW9ucy5jaGVja291dF9vcHRzLnByb2dyZXNzX2NiID0gJmNoZWNrb3V0X3Byb2dyZXNzOwogCWdfb3B0aW9ucy5jaGVja291dF9vcHRzLnByb2dyZXNzX3BheWxvYWQgPSAmY2hlY2tvdXRfcHJvZ3Jlc3NfY2Jfd2FzX2NhbGxlZDsKLQlnX29wdGlvbnMuZmV0Y2hfcHJvZ3Jlc3NfY2IgPSAmZmV0Y2hfcHJvZ3Jlc3M7Ci0JZ19vcHRpb25zLmZldGNoX3Byb2dyZXNzX3BheWxvYWQgPSAmZmV0Y2hfcHJvZ3Jlc3NfY2Jfd2FzX2NhbGxlZDsKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcy50cmFuc2Zlcl9wcm9ncmVzcyA9ICZmZXRjaF9wcm9ncmVzczsKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcy5wYXlsb2FkID0gJmZldGNoX3Byb2dyZXNzX2NiX3dhc19jYWxsZWQ7CiAKIAljbF9naXRfcGFzcyhnaXRfY2xvbmUoJmdfcmVwbywgTElWRV9SRVBPX1VSTCwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwogCkBAIC0xMjIsNiArMTI1LDQ1IEBACiAJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKIH0KIAordm9pZCB0ZXN0X29ubGluZV9jbG9uZV9fY2xvbmVfaW50byh2b2lkKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfcmVtb3RlICpyZW1vdGU7CisJZ2l0X3JlZmVyZW5jZSAqaGVhZDsKKwlnaXRfY2hlY2tvdXRfb3B0cyBjaGVja291dF9vcHRzID0gR0lUX0NIRUNLT1VUX09QVFNfSU5JVDsKKwlnaXRfcmVtb3RlX2NhbGxiYWNrcyBjYWxsYmFja3MgPSBHSVRfUkVNT1RFX0NBTExCQUNLU19JTklUOworCisJYm9vbCBjaGVja291dF9wcm9ncmVzc19jYl93YXNfY2FsbGVkID0gZmFsc2UsCisJCSAgZmV0Y2hfcHJvZ3Jlc3NfY2Jfd2FzX2NhbGxlZCA9IGZhbHNlOworCisJY2hlY2tvdXRfb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9TQUZFX0NSRUFURTsKKwljaGVja291dF9vcHRzLnByb2dyZXNzX2NiID0gJmNoZWNrb3V0X3Byb2dyZXNzOworCWNoZWNrb3V0X29wdHMucHJvZ3Jlc3NfcGF5bG9hZCA9ICZjaGVja291dF9wcm9ncmVzc19jYl93YXNfY2FsbGVkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5pdCgmZ19yZXBvLCAiLi9mb28iLCBmYWxzZSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY3JlYXRlKCZyZW1vdGUsIGdfcmVwbywgIm9yaWdpbiIsIExJVkVfUkVQT19VUkwpKTsKKworCWNhbGxiYWNrcy50cmFuc2Zlcl9wcm9ncmVzcyA9ICZmZXRjaF9wcm9ncmVzczsKKwljYWxsYmFja3MucGF5bG9hZCA9ICZmZXRjaF9wcm9ncmVzc19jYl93YXNfY2FsbGVkOworCWdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhyZW1vdGUsICZjYWxsYmFja3MpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lX2ludG8oZ19yZXBvLCByZW1vdGUsICZjaGVja291dF9vcHRzLCBOVUxMKSk7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGdfcmVwbyksICJtYXN0ZXIudHh0IikpOworCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIGdpdF9wYXRoX2lzZmlsZShnaXRfYnVmX2NzdHIoJnBhdGgpKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmaGVhZCwgZ19yZXBvLCAiSEVBRCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfUkVGX1NZTUJPTElDLCBnaXRfcmVmZXJlbmNlX3R5cGUoaGVhZCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJyZWZzL2hlYWRzL21hc3RlciIsIGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfdGFyZ2V0KGhlYWQpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIGNoZWNrb3V0X3Byb2dyZXNzX2NiX3dhc19jYWxsZWQpOworCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIGZldGNoX3Byb2dyZXNzX2NiX3dhc19jYWxsZWQpOworCisJZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCWdpdF9idWZfZnJlZSgmcGF0aCk7Cit9CisKIHN0YXRpYyBpbnQgdXBkYXRlX3RpcHMoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgZ2l0X29pZCAqYSwgY29uc3QgZ2l0X29pZCAqYiwgdm9pZCAqcGF5bG9hZCkKIHsKIAlpbnQgKmNhbGxjb3VudCA9IChpbnQqKXBheWxvYWQ7CkBAIC0xMzIsMTcgKzE3NCw1MCBAQAogCiB2b2lkIHRlc3Rfb25saW5lX2Nsb25lX19jdXN0b21fcmVtb3RlX2NhbGxiYWNrcyh2b2lkKQogewotCWdpdF9yZW1vdGVfY2FsbGJhY2tzIHJlbW90ZV9jYWxsYmFja3MgPSBHSVRfUkVNT1RFX0NBTExCQUNLU19JTklUOwogCWludCBjYWxsY291bnQgPSAwOwogCi0JZ19vcHRpb25zLnJlbW90ZV9jYWxsYmFja3MgPSAmcmVtb3RlX2NhbGxiYWNrczsKLQlyZW1vdGVfY2FsbGJhY2tzLnVwZGF0ZV90aXBzID0gdXBkYXRlX3RpcHM7Ci0JcmVtb3RlX2NhbGxiYWNrcy5wYXlsb2FkID0gJmNhbGxjb3VudDsKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcy51cGRhdGVfdGlwcyA9IHVwZGF0ZV90aXBzOworCWdfb3B0aW9ucy5yZW1vdGVfY2FsbGJhY2tzLnBheWxvYWQgPSAmY2FsbGNvdW50OwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIExJVkVfUkVQT19VUkwsICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKIAljbF9hc3NlcnQoY2FsbGNvdW50ID4gMCk7CiB9CiAKK3N0YXRpYyBpbnQgY3JlZF9mYWlsdXJlX2NiKAorCWdpdF9jcmVkICoqY3JlZCwKKwljb25zdCBjaGFyICp1cmwsCisJY29uc3QgY2hhciAqdXNlcm5hbWVfZnJvbV91cmwsCisJdW5zaWduZWQgaW50IGFsbG93ZWRfdHlwZXMsCisJdm9pZCAqZGF0YSkKK3sKKwlHSVRfVU5VU0VEKGNyZWQpOyBHSVRfVU5VU0VEKHVybCk7IEdJVF9VTlVTRUQodXNlcm5hbWVfZnJvbV91cmwpOworCUdJVF9VTlVTRUQoYWxsb3dlZF90eXBlcyk7IEdJVF9VTlVTRUQoZGF0YSk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIHRlc3Rfb25saW5lX2Nsb25lX19jcmVkX2NhbGxiYWNrX2ZhaWx1cmVfaXNfZXVzZXIodm9pZCkKK3sKKwljb25zdCBjaGFyICpyZW1vdGVfdXJsID0gY2xfZ2V0ZW52KCJHSVRURVNUX1JFTU9URV9VUkwiKTsKKwljb25zdCBjaGFyICpyZW1vdGVfdXNlciA9IGNsX2dldGVudigiR0lUVEVTVF9SRU1PVEVfVVNFUiIpOworCWNvbnN0IGNoYXIgKnJlbW90ZV9kZWZhdWx0ID0gY2xfZ2V0ZW52KCJHSVRURVNUX1JFTU9URV9ERUZBVUxUIik7CisJaW50IGVycm9yOworCisJaWYgKCFyZW1vdGVfdXJsKSB7CisJCXByaW50ZigiR0lUVEVTVF9SRU1PVEVfVVJMIHVuc2V0OyBza2lwcGluZyBjbG9uZSB0ZXN0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcmVtb3RlX3VzZXIgJiYgIXJlbW90ZV9kZWZhdWx0KSB7CisJCXByaW50ZigiR0lUVEVTVF9SRU1PVEVfVVNFUiBhbmQgR0lUVEVTVF9SRU1PVEVfREVGQVVMVCB1bnNldDsgc2tpcHBpbmcgY2xvbmUgdGVzdFxuIik7CisJCXJldHVybjsKKwl9CisKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcy5jcmVkZW50aWFscyA9IGNyZWRfZmFpbHVyZV9jYjsKKworCWNsX2dpdF9mYWlsKGVycm9yID0gZ2l0X2Nsb25lKCZnX3JlcG8sIHJlbW90ZV91cmwsICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShlcnJvciwgR0lUX0VVU0VSKTsKK30KKwogdm9pZCB0ZXN0X29ubGluZV9jbG9uZV9fY3JlZGVudGlhbHModm9pZCkKIHsKIAkvKiBSZW1vdGUgVVJMIGVudmlyb25tZW50IHZhcmlhYmxlIG11c3QgYmUgc2V0LiAgVXNlciBhbmQgcGFzc3dvcmQgYXJlIG9wdGlvbmFsLiAgKi8KQEAgLTE1NCw4ICsyMjksOCBAQAogCiAJaWYgKCFyZW1vdGVfdXJsKSByZXR1cm47CiAKLQlnX29wdGlvbnMuY3JlZF9hY3F1aXJlX2NiID0gZ2l0X2NyZWRfdXNlcnBhc3M7Ci0JZ19vcHRpb25zLmNyZWRfYWNxdWlyZV9wYXlsb2FkID0gJnVzZXJfcGFzczsKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcy5jcmVkZW50aWFscyA9IGdpdF9jcmVkX3VzZXJwYXNzOworCWdfb3B0aW9ucy5yZW1vdGVfY2FsbGJhY2tzLnBheWxvYWQgPSAmdXNlcl9wYXNzOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIHJlbW90ZV91cmwsICIuL2ZvbyIsICZnX29wdGlvbnMpKTsKIAlnaXRfcmVwb3NpdG9yeV9mcmVlKGdfcmVwbyk7IGdfcmVwbyA9IE5VTEw7CkBAIC0xNjgsOCArMjQzLDggQEAKIAkJImxpYmdpdDIiLCAibGliZ2l0MiIKIAl9OwogCi0JZ19vcHRpb25zLmNyZWRfYWNxdWlyZV9jYiA9IGdpdF9jcmVkX3VzZXJwYXNzOwotCWdfb3B0aW9ucy5jcmVkX2FjcXVpcmVfcGF5bG9hZCA9ICZ1c2VyX3Bhc3M7CisJZ19vcHRpb25zLnJlbW90ZV9jYWxsYmFja3MuY3JlZGVudGlhbHMgPSBnaXRfY3JlZF91c2VycGFzczsKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcy5wYXlsb2FkID0gJnVzZXJfcGFzczsKIAogCWNsX2dpdF9wYXNzKGdpdF9jbG9uZSgmZ19yZXBvLCBCQl9SRVBPX1VSTCwgIi4vZm9vIiwgJmdfb3B0aW9ucykpOwogCWdpdF9yZXBvc2l0b3J5X2ZyZWUoZ19yZXBvKTsgZ19yZXBvID0gTlVMTDsKQEAgLTE4OCw2ICsyNjMsMTEgQEAKIAljbF9maXh0dXJlX2NsZWFudXAoIi4vZm9vIik7CiB9CiAKK3ZvaWQgdGVzdF9vbmxpbmVfY2xvbmVfX2Fzc2VtYmxhX3N0eWxlKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Nsb25lKCZnX3JlcG8sIEFTU0VNQkxBX1JFUE9fVVJMLCAiLi9mb28iLCBOVUxMKSk7Cit9CisKIHN0YXRpYyBpbnQgY2FuY2VsX2F0X2hhbGYoY29uc3QgZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cywgdm9pZCAqcGF5bG9hZCkKIHsKIAlHSVRfVU5VU0VEKHBheWxvYWQpOwpAQCAtMTk5LDYgKzI3OSwxMyBAQAogCiB2b2lkIHRlc3Rfb25saW5lX2Nsb25lX19jYW5fY2FuY2VsKHZvaWQpCiB7Ci0JZ19vcHRpb25zLmZldGNoX3Byb2dyZXNzX2NiID0gY2FuY2VsX2F0X2hhbGY7CisJZ19vcHRpb25zLnJlbW90ZV9jYWxsYmFja3MudHJhbnNmZXJfcHJvZ3Jlc3MgPSBjYW5jZWxfYXRfaGFsZjsKKwogCWNsX2dpdF9mYWlsX3dpdGgoZ2l0X2Nsb25lKCZnX3JlcG8sIExJVkVfUkVQT19VUkwsICIuL2ZvbyIsICZnX29wdGlvbnMpLCBHSVRfRVVTRVIpOwogfQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9vbmxpbmUvZmV0Y2guYyBiL3Rlc3RzL29ubGluZS9mZXRjaC5jCnNpbWlsYXJpdHkgaW5kZXggNzglCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb25saW5lL2ZldGNoLmMKcmVuYW1lIHRvIHRlc3RzL29ubGluZS9mZXRjaC5jCmluZGV4IGJmYTFlYjkuLjUxNTNhN2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvb25saW5lL2ZldGNoLmMKKysrIGIvdGVzdHMvb25saW5lL2ZldGNoLmMKQEAgLTM4LDE0ICszOCwxNiBAQAogCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGNhbGxiYWNrcyA9IEdJVF9SRU1PVEVfQ0FMTEJBQ0tTX0lOSVQ7CiAJc2l6ZV90IGJ5dGVzX3JlY2VpdmVkID0gMDsKIAorCWNhbGxiYWNrcy50cmFuc2Zlcl9wcm9ncmVzcyA9IHByb2dyZXNzOwogCWNhbGxiYWNrcy51cGRhdGVfdGlwcyA9IHVwZGF0ZV90aXBzOworCWNhbGxiYWNrcy5wYXlsb2FkID0gJmJ5dGVzX3JlY2VpdmVkOwogCWNvdW50ZXIgPSAwOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jcmVhdGUoJnJlbW90ZSwgX3JlcG8sICJ0ZXN0IiwgdXJsKSk7CiAJZ2l0X3JlbW90ZV9zZXRfY2FsbGJhY2tzKHJlbW90ZSwgJmNhbGxiYWNrcyk7CiAJZ2l0X3JlbW90ZV9zZXRfYXV0b3RhZyhyZW1vdGUsIGZsYWcpOwogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY29ubmVjdChyZW1vdGUsIEdJVF9ESVJFQ1RJT05fRkVUQ0gpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSwgcHJvZ3Jlc3MsICZieXRlc19yZWNlaXZlZCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfZG93bmxvYWQocmVtb3RlKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV91cGRhdGVfdGlwcyhyZW1vdGUpKTsKIAlnaXRfcmVtb3RlX2Rpc2Nvbm5lY3QocmVtb3RlKTsKIAljbF9hc3NlcnRfZXF1YWxfaShjb3VudGVyLCBuKTsKQEAgLTY0LDYgKzY2LDExIEBACiAJZG9fZmV0Y2goImh0dHA6Ly9naXRodWIuY29tL2xpYmdpdDIvVGVzdEdpdFJlcG9zaXRvcnkuZ2l0IiwgR0lUX1JFTU9URV9ET1dOTE9BRF9UQUdTX0FVVE8sIDYpOwogfQogCit2b2lkIHRlc3Rfb25saW5lX2ZldGNoX19kZWZhdWx0X2h0dHBzKHZvaWQpCit7CisJZG9fZmV0Y2goImh0dHBzOi8vZ2l0aHViLmNvbS9saWJnaXQyL1Rlc3RHaXRSZXBvc2l0b3J5LmdpdCIsIEdJVF9SRU1PVEVfRE9XTkxPQURfVEFHU19BVVRPLCA2KTsKK30KKwogdm9pZCB0ZXN0X29ubGluZV9mZXRjaF9fbm9fdGFnc19naXQodm9pZCkKIHsKIAlkb19mZXRjaCgiZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL1Rlc3RHaXRSZXBvc2l0b3J5LmdpdCIsIEdJVF9SRU1PVEVfRE9XTkxPQURfVEFHU19OT05FLCAzKTsKQEAgLTg4LDYgKzk1LDcgQEAKIAlnaXRfcmVwb3NpdG9yeSAqX3JlcG9zaXRvcnk7CiAJYm9vbCBpbnZva2VkID0gZmFsc2U7CiAJZ2l0X3JlbW90ZSAqcmVtb3RlOworCWdpdF9yZW1vdGVfY2FsbGJhY2tzIGNhbGxiYWNrcyA9IEdJVF9SRU1PVEVfQ0FMTEJBQ0tTX0lOSVQ7CiAJZ2l0X2Nsb25lX29wdGlvbnMgb3B0cyA9IEdJVF9DTE9ORV9PUFRJT05TX0lOSVQ7CiAJb3B0cy5iYXJlID0gdHJ1ZTsKIApAQCAtMTAyLDcgKzExMCwxMCBAQAogCiAJY2xfYXNzZXJ0X2VxdWFsX2koZmFsc2UsIGludm9rZWQpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChyZW1vdGUsICZ0cmFuc2ZlclByb2dyZXNzQ2FsbGJhY2ssICZpbnZva2VkKSk7CisJY2FsbGJhY2tzLnRyYW5zZmVyX3Byb2dyZXNzID0gJnRyYW5zZmVyUHJvZ3Jlc3NDYWxsYmFjazsKKwljYWxsYmFja3MucGF5bG9hZCA9ICZpbnZva2VkOworCWdpdF9yZW1vdGVfc2V0X2NhbGxiYWNrcyhyZW1vdGUsICZjYWxsYmFja3MpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfZG93bmxvYWQocmVtb3RlKSk7CiAKIAljbF9hc3NlcnRfZXF1YWxfaShmYWxzZSwgaW52b2tlZCk7CiAKQEAgLTEyNiwzOCArMTM3LDM1IEBACiB7CiAJZ2l0X3JlbW90ZSAqcmVtb3RlOwogCXNpemVfdCBieXRlc19yZWNlaXZlZCA9IDA7CisJZ2l0X3JlbW90ZV9jYWxsYmFja3MgY2FsbGJhY2tzID0gR0lUX1JFTU9URV9DQUxMQkFDS1NfSU5JVDsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfY3JlYXRlKCZyZW1vdGUsIF9yZXBvLCAidGVzdCIsCiAJCQkJImh0dHA6Ly9naXRodWIuY29tL2xpYmdpdDIvVGVzdEdpdFJlcG9zaXRvcnkuZ2l0IikpOworCisJY2FsbGJhY2tzLnRyYW5zZmVyX3Byb2dyZXNzID0gY2FuY2VsX2F0X2hhbGY7CisJY2FsbGJhY2tzLnBheWxvYWQgPSAmYnl0ZXNfcmVjZWl2ZWQ7CisJZ2l0X3JlbW90ZV9zZXRfY2FsbGJhY2tzKHJlbW90ZSwgJmNhbGxiYWNrcyk7CisKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Nvbm5lY3QocmVtb3RlLCBHSVRfRElSRUNUSU9OX0ZFVENIKSk7Ci0JY2xfZ2l0X2ZhaWxfd2l0aChnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSwgY2FuY2VsX2F0X2hhbGYsICZieXRlc19yZWNlaXZlZCksIEdJVF9FVVNFUik7CisJY2xfZ2l0X2ZhaWxfd2l0aChnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSksIEdJVF9FVVNFUik7CiAJZ2l0X3JlbW90ZV9kaXNjb25uZWN0KHJlbW90ZSk7CiAJZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CiB9CiAKLWludCBsc19jYihnaXRfcmVtb3RlX2hlYWQgKnJoZWFkLCB2b2lkICpwYXlsb2FkKQotewotCWludCAqbnIgPSBwYXlsb2FkOwotCUdJVF9VTlVTRUQocmhlYWQpOwotCi0JKCpucikrKzsKLQotCXJldHVybiAwOwotfQotCiB2b2lkIHRlc3Rfb25saW5lX2ZldGNoX19sc19kaXNjb25uZWN0ZWQodm9pZCkKIHsKKwljb25zdCBnaXRfcmVtb3RlX2hlYWQgKipyZWZzOworCXNpemVfdCByZWZzX2xlbl9iZWZvcmUsIHJlZnNfbGVuX2FmdGVyOwogCWdpdF9yZW1vdGUgKnJlbW90ZTsKLQlpbnQgbnJfYmVmb3JlID0gMCwgbnJfYWZ0ZXIgPSAwOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jcmVhdGUoJnJlbW90ZSwgX3JlcG8sICJ0ZXN0IiwKIAkJCQkiaHR0cDovL2dpdGh1Yi5jb20vbGliZ2l0Mi9UZXN0R2l0UmVwb3NpdG9yeS5naXQiKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9jb25uZWN0KHJlbW90ZSwgR0lUX0RJUkVDVElPTl9GRVRDSCkpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbHMocmVtb3RlLCBsc19jYiwgJm5yX2JlZm9yZSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbHMoJnJlZnMsICZyZWZzX2xlbl9iZWZvcmUsIHJlbW90ZSkpOwogCWdpdF9yZW1vdGVfZGlzY29ubmVjdChyZW1vdGUpOwotCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfbHMocmVtb3RlLCBsc19jYiwgJm5yX2FmdGVyKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9scygmcmVmcywgJnJlZnNfbGVuX2FmdGVyLCByZW1vdGUpKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKG5yX2JlZm9yZSwgbnJfYWZ0ZXIpOworCWNsX2Fzc2VydF9lcXVhbF9pKHJlZnNfbGVuX2JlZm9yZSwgcmVmc19sZW5fYWZ0ZXIpOwogCiAJZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29ubGluZS9mZXRjaGhlYWQuYyBiL3Rlc3RzL29ubGluZS9mZXRjaGhlYWQuYwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29ubGluZS9mZXRjaGhlYWQuYwpyZW5hbWUgdG8gdGVzdHMvb25saW5lL2ZldGNoaGVhZC5jCmluZGV4IDU4NzE3ZWUuLjU3YjE4M2YgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvb25saW5lL2ZldGNoaGVhZC5jCisrKyBiL3Rlc3RzL29ubGluZS9mZXRjaGhlYWQuYwpAQCAtMTIsMTAgKzEyLDEyIEBACiAKIHZvaWQgdGVzdF9vbmxpbmVfZmV0Y2hoZWFkX19pbml0aWFsaXplKHZvaWQpCiB7CisJZ2l0X3JlbW90ZV9jYWxsYmFja3MgZHVtbXlfY2FsbGJhY2tzID0gR0lUX1JFTU9URV9DQUxMQkFDS1NfSU5JVDsKIAlnX3JlcG8gPSBOVUxMOwogCiAJbWVtc2V0KCZnX29wdGlvbnMsIDAsIHNpemVvZihnaXRfY2xvbmVfb3B0aW9ucykpOwogCWdfb3B0aW9ucy52ZXJzaW9uID0gR0lUX0NMT05FX09QVElPTlNfVkVSU0lPTjsKKwlnX29wdGlvbnMucmVtb3RlX2NhbGxiYWNrcyA9IGR1bW15X2NhbGxiYWNrczsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9mZXRjaGhlYWRfX2NsZWFudXAodm9pZCkKQEAgLTQ4LDcgKzUwLDcgQEAKIAl9CiAKIAljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Nvbm5lY3QocmVtb3RlLCBHSVRfRElSRUNUSU9OX0ZFVENIKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChyZW1vdGUsIE5VTEwsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKHJlbW90ZSkpOwogCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMocmVtb3RlKSk7CiAJZ2l0X3JlbW90ZV9kaXNjb25uZWN0KHJlbW90ZSk7CiAJZ2l0X3JlbW90ZV9mcmVlKHJlbW90ZSk7CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29ubGluZS9wdXNoLmMgYi90ZXN0cy9vbmxpbmUvcHVzaC5jCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb25saW5lL3B1c2guYwpyZW5hbWUgdG8gdGVzdHMvb25saW5lL3B1c2guYwppbmRleCA1ZGM3OTc0Li5iZTUwNWMzIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL29ubGluZS9wdXNoLmMKKysrIGIvdGVzdHMvb25saW5lL3B1c2guYwpAQCAtMTAsMTEgKzEwLDE5IEBACiBzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKl9yZXBvOwogCiBzdGF0aWMgY2hhciAqX3JlbW90ZV91cmw7CisKK3N0YXRpYyBjaGFyICpfcmVtb3RlX3NzaF9rZXk7CitzdGF0aWMgY2hhciAqX3JlbW90ZV9zc2hfcHVia2V5Oworc3RhdGljIGNoYXIgKl9yZW1vdGVfc3NoX3Bhc3NwaHJhc2U7CisKIHN0YXRpYyBjaGFyICpfcmVtb3RlX3VzZXI7CiBzdGF0aWMgY2hhciAqX3JlbW90ZV9wYXNzOwogCitzdGF0aWMgY2hhciAqX3JlbW90ZV9kZWZhdWx0OworCitzdGF0aWMgaW50IGNyZWRfYWNxdWlyZV9jYihnaXRfY3JlZCAqKiwJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgdm9pZCAqKTsKKwogc3RhdGljIGdpdF9yZW1vdGUgKl9yZW1vdGU7Ci1zdGF0aWMgYm9vbCBfY3JlZF9hY3F1aXJlX2NhbGxlZDsKIHN0YXRpYyByZWNvcmRfY2FsbGJhY2tzX2RhdGEgX3JlY29yZF9jYnNfZGF0YSA9IHt7IDAgfX07CiBzdGF0aWMgZ2l0X3JlbW90ZV9jYWxsYmFja3MgX3JlY29yZF9jYnMgPSBSRUNPUkRfQ0FMTEJBQ0tTX0lOSVQoJl9yZWNvcmRfY2JzX2RhdGEpOwogCkBAIC0yOSwyOCArMzcsNTQgQEAKIHN0YXRpYyBnaXRfb2lkIF90YWdfdHJlZTsKIHN0YXRpYyBnaXRfb2lkIF90YWdfYmxvYjsKIHN0YXRpYyBnaXRfb2lkIF90YWdfbGlnaHR3ZWlnaHQ7CitzdGF0aWMgZ2l0X29pZCBfdGFnX3RhZzsKIAogc3RhdGljIGludCBjcmVkX2FjcXVpcmVfY2IoCi0JCWdpdF9jcmVkICoqY3JlZCwKLQkJY29uc3QgY2hhciAqdXJsLAotCQljb25zdCBjaGFyICp1c2VyX2Zyb21fdXJsLAotCQl1bnNpZ25lZCBpbnQgYWxsb3dlZF90eXBlcywKLQkJdm9pZCAqcGF5bG9hZCkKKwlnaXRfY3JlZCAqKmNyZWQsCisJY29uc3QgY2hhciAqdXJsLAorCWNvbnN0IGNoYXIgKnVzZXJfZnJvbV91cmwsCisJdW5zaWduZWQgaW50IGFsbG93ZWRfdHlwZXMsCisJdm9pZCAqcGF5bG9hZCkKIHsKIAlHSVRfVU5VU0VEKHVybCk7CiAJR0lUX1VOVVNFRCh1c2VyX2Zyb21fdXJsKTsKKwlHSVRfVU5VU0VEKHBheWxvYWQpOwogCi0JKigoYm9vbCopcGF5bG9hZCkgPSB0cnVlOworCWlmIChHSVRfQ1JFRFRZUEVfREVGQVVMVCAmIGFsbG93ZWRfdHlwZXMpIHsKKwkJaWYgKCFfcmVtb3RlX2RlZmF1bHQpIHsKKwkJCXByaW50ZigiR0lUVEVTVF9SRU1PVEVfREVGQVVMVCBtdXN0IGJlIHNldCB0byB1c2UgTlRMTS9OZWdvdGlhdGUgY3JlZGVudGlhbHNcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CiAKLQlpZiAoKEdJVF9DUkVEVFlQRV9VU0VSUEFTU19QTEFJTlRFWFQgJiBhbGxvd2VkX3R5cGVzKSA9PSAwIHx8Ci0JCWdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dF9uZXcoY3JlZCwgX3JlbW90ZV91c2VyLCBfcmVtb3RlX3Bhc3MpIDwgMCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZ2l0X2NyZWRfZGVmYXVsdF9uZXcoY3JlZCk7CisJfQogCi0JcmV0dXJuIDA7CisJaWYgKEdJVF9DUkVEVFlQRV9TU0hfS0VZICYgYWxsb3dlZF90eXBlcykgeworCQlpZiAoIV9yZW1vdGVfdXNlciB8fCAhX3JlbW90ZV9zc2hfcHVia2V5IHx8ICFfcmVtb3RlX3NzaF9rZXkgfHwgIV9yZW1vdGVfc3NoX3Bhc3NwaHJhc2UpIHsKKwkJCXByaW50ZigiR0lUVEVTVF9SRU1PVEVfVVNFUiwgR0lUVEVTVF9SRU1PVEVfU1NIX1BVQktFWSwgR0lUVEVTVF9SRU1PVEVfU1NIX0tFWSBhbmQgR0lUVEVTVF9SRU1PVEVfU1NIX1BBU1NQSFJBU0UgbXVzdCBiZSBzZXRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJcmV0dXJuIGdpdF9jcmVkX3NzaF9rZXlfbmV3KGNyZWQsIF9yZW1vdGVfdXNlciwgX3JlbW90ZV9zc2hfcHVia2V5LCBfcmVtb3RlX3NzaF9rZXksIF9yZW1vdGVfc3NoX3Bhc3NwaHJhc2UpOworCX0KKworCWlmIChHSVRfQ1JFRFRZUEVfVVNFUlBBU1NfUExBSU5URVhUICYgYWxsb3dlZF90eXBlcykgeworCQlpZiAoIV9yZW1vdGVfdXNlciB8fCAhX3JlbW90ZV9wYXNzKSB7CisJCQlwcmludGYoIkdJVFRFU1RfUkVNT1RFX1VTRVIgYW5kIEdJVFRFU1RfUkVNT1RFX1BBU1MgbXVzdCBiZSBzZXRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJcmV0dXJuIGdpdF9jcmVkX3VzZXJwYXNzX3BsYWludGV4dF9uZXcoY3JlZCwgX3JlbW90ZV91c2VyLCBfcmVtb3RlX3Bhc3MpOworCX0KKworCXJldHVybiAtMTsKIH0KIAorLyogdGhlIHJlc3VsdHMgb2YgYSBwdXNoIHN0YXR1cy4gIHdoZW4gdXNlZCBmb3IgZXhwZWN0ZWQgdmFsdWVzLCBtc2cgbWF5IGJlIE5VTEwKKyAqIHRvIGluZGljYXRlIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkLiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgKnJlZjsKKwlpbnQgc3VjY2VzczsKIAljb25zdCBjaGFyICptc2c7CiB9IHB1c2hfc3RhdHVzOwogCkBAIC02NSw2ICs5OSw3IEBACiAKIAljbF9hc3NlcnQocyA9IGdpdF9fbWFsbG9jKHNpemVvZigqcykpKTsKIAlzLT5yZWYgPSByZWY7CisJcy0+c3VjY2VzcyA9IChtc2cgPT0gTlVMTCk7CiAJcy0+bXNnID0gbXNnOwogCiAJZ2l0X3ZlY3Rvcl9pbnNlcnQoc3RhdHVzZXMsIHMpOwpAQCAtODYsOSArMTIxLDggQEAKIAllbHNlCiAJCWdpdF92ZWN0b3JfZm9yZWFjaCgmYWN0dWFsLCBpLCBpdGVyKQogCQkJaWYgKHN0cmNtcChleHBlY3RlZFtpXS5yZWYsIGl0ZXItPnJlZikgfHwKLQkJCQkoZXhwZWN0ZWRbaV0ubXNnICYmICFpdGVyLT5tc2cpIHx8Ci0JCQkJKCFleHBlY3RlZFtpXS5tc2cgJiYgaXRlci0+bXNnKSB8fAotCQkJCShleHBlY3RlZFtpXS5tc2cgJiYgaXRlci0+bXNnICYmIHN0cmNtcChleHBlY3RlZFtpXS5tc2csIGl0ZXItPm1zZykpKSB7CisJCQkJKGV4cGVjdGVkW2ldLnN1Y2Nlc3MgIT0gaXRlci0+c3VjY2VzcykgfHwKKwkJCQkoZXhwZWN0ZWRbaV0ubXNnICYmICghaXRlci0+bXNnIHx8IHN0cmNtcChleHBlY3RlZFtpXS5tc2csIGl0ZXItPm1zZykpKSkgewogCQkJCWZhaWxlZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMDEsMTMgKzEzNSwxNyBAQAogCQlmb3IoaSA9IDA7IGkgPCBleHBlY3RlZF9sZW47IGkrKykgewogCQkJZ2l0X2J1Zl9wcmludGYoJm1zZywgIiVzOiAlc1xuIiwKIAkJCQlleHBlY3RlZFtpXS5yZWYsCi0JCQkJZXhwZWN0ZWRbaV0ubXNnID8gZXhwZWN0ZWRbaV0ubXNnIDogIjxOVUxMPiIpOworCQkJCWV4cGVjdGVkW2ldLnN1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiZmFpbGVkIik7CiAJCX0KIAogCQlnaXRfYnVmX3B1dHMoJm1zZywgIlxuQUNUVUFMOlxuIik7CiAKLQkJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZhY3R1YWwsIGksIGl0ZXIpCi0JCQlnaXRfYnVmX3ByaW50ZigmbXNnLCAiJXM6ICVzXG4iLCBpdGVyLT5yZWYsIGl0ZXItPm1zZyk7CisJCWdpdF92ZWN0b3JfZm9yZWFjaCgmYWN0dWFsLCBpLCBpdGVyKSB7CisJCQlpZiAoaXRlci0+c3VjY2VzcykKKwkJCQlnaXRfYnVmX3ByaW50ZigmbXNnLCAiJXM6IHN1Y2Nlc3NcbiIsIGl0ZXItPnJlZik7CisJCQllbHNlCisJCQkJZ2l0X2J1Zl9wcmludGYoJm1zZywgIiVzOiBmYWlsZWQgd2l0aCBtZXNzYWdlOiAlcyIsIGl0ZXItPnJlZiwgaXRlci0+bXNnKTsKKwkJfQogCiAJCWNsX2ZhaWwoZ2l0X2J1Zl9jc3RyKCZtc2cpKTsKIApAQCAtMTMwLDI0ICsxNjgsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgdmVyaWZ5X3JlZnMoZ2l0X3JlbW90ZSAqcmVtb3RlLCBleHBlY3RlZF9yZWYgZXhwZWN0ZWRfcmVmc1tdLCBzaXplX3QgZXhwZWN0ZWRfcmVmc19sZW4pCiB7Ci0JZ2l0X3ZlY3RvciBhY3R1YWxfcmVmcyA9IEdJVF9WRUNUT1JfSU5JVDsKKwljb25zdCBnaXRfcmVtb3RlX2hlYWQgKiphY3R1YWxfcmVmczsKKwlzaXplX3QgYWN0dWFsX3JlZnNfbGVuOwogCi0JZ2l0X3JlbW90ZV9scyhyZW1vdGUsIHJlY29yZF9yZWZfY2IsICZhY3R1YWxfcmVmcyk7Ci0JdmVyaWZ5X3JlbW90ZV9yZWZzKCZhY3R1YWxfcmVmcywgZXhwZWN0ZWRfcmVmcywgZXhwZWN0ZWRfcmVmc19sZW4pOwotCi0JZ2l0X3ZlY3Rvcl9mcmVlKCZhY3R1YWxfcmVmcyk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJhY2tpbmdfYnJhbmNoX2xpc3RfY2IoY29uc3QgY2hhciAqYnJhbmNoX25hbWUsIGdpdF9icmFuY2hfdCBicmFuY2hfdHlwZSwgdm9pZCAqcGF5bG9hZCkKLXsKLQlnaXRfdmVjdG9yICp0cmFja2luZyA9IChnaXRfdmVjdG9yICopcGF5bG9hZDsKLQotCWlmIChicmFuY2hfdHlwZSA9PSBHSVRfQlJBTkNIX1JFTU9URSkKLQkJZ2l0X3ZlY3Rvcl9pbnNlcnQodHJhY2tpbmcsIGdpdF9fc3RyZHVwKGJyYW5jaF9uYW1lKSk7Ci0JZWxzZQotCQlHSVRfVU5VU0VEKGJyYW5jaF9uYW1lKTsKLQotCXJldHVybiAwOworCWdpdF9yZW1vdGVfbHMoJmFjdHVhbF9yZWZzLCAmYWN0dWFsX3JlZnNfbGVuLCByZW1vdGUpOworCXZlcmlmeV9yZW1vdGVfcmVmcyhhY3R1YWxfcmVmcywgYWN0dWFsX3JlZnNfbGVuLCBleHBlY3RlZF9yZWZzLCBleHBlY3RlZF9yZWZzX2xlbik7CiB9CiAKIC8qKgpAQCAtMTY0LDE0ICsxODksMjQgQEAKIAlzaXplX3QgaSwgajsKIAlnaXRfYnVmIG1zZyA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfYnVmIHJlZl9uYW1lID0gR0lUX0JVRl9JTklUOwotCWdpdF9idWYgY2Fub25pY2FsX3JlZl9uYW1lID0gR0lUX0JVRl9JTklUOwogCWdpdF92ZWN0b3IgYWN0dWFsX3JlZnMgPSBHSVRfVkVDVE9SX0lOSVQ7CisJZ2l0X2JyYW5jaF9pdGVyYXRvciAqaXRlcjsKIAljaGFyICphY3R1YWxfcmVmOwogCWdpdF9vaWQgb2lkOwotCWludCBmYWlsZWQgPSAwOworCWludCBmYWlsZWQgPSAwLCBlcnJvcjsKKwlnaXRfYnJhbmNoX3QgYnJhbmNoX3R5cGU7CisJZ2l0X3JlZmVyZW5jZSAqcmVmOwogCiAJLyogR2V0IGN1cnJlbnQgcmVtb3RlIGJyYW5jaGVzICovCi0JY2xfZ2l0X3Bhc3MoZ2l0X2JyYW5jaF9mb3JlYWNoKHJlbW90ZS0+cmVwbywgR0lUX0JSQU5DSF9SRU1PVEUsIHRyYWNraW5nX2JyYW5jaF9saXN0X2NiLCAmYWN0dWFsX3JlZnMpKTsKKwljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2l0ZXJhdG9yX25ldygmaXRlciwgcmVtb3RlLT5yZXBvLCBHSVRfQlJBTkNIX1JFTU9URSkpOworCisJd2hpbGUgKChlcnJvciA9IGdpdF9icmFuY2hfbmV4dCgmcmVmLCAmYnJhbmNoX3R5cGUsIGl0ZXIpKSA9PSAwKSB7CisJCWNsX2Fzc2VydF9lcXVhbF9pKGJyYW5jaF90eXBlLCBHSVRfQlJBTkNIX1JFTU9URSk7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3ZlY3Rvcl9pbnNlcnQoJmFjdHVhbF9yZWZzLCBnaXRfX3N0cmR1cChnaXRfcmVmZXJlbmNlX25hbWUocmVmKSkpKTsKKwl9CisKKwljbF9hc3NlcnRfZXF1YWxfaShlcnJvciwgR0lUX0lURVJPVkVSKTsKIAogCS8qIExvb3AgdGhyb3VnaCBleHBlY3RlZCByZWZzLCBtYWtlIHN1cmUgdGhleSBleGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBleHBlY3RlZF9yZWZzX2xlbjsgaSsrKSB7CkBAIC0xODcsMTEgKzIyMiw3IEBACiAKIAkJLyogRmluZCBtYXRjaGluZyByZW1vdGUgYnJhbmNoICovCiAJCWdpdF92ZWN0b3JfZm9yZWFjaCgmYWN0dWFsX3JlZnMsIGosIGFjdHVhbF9yZWYpIHsKLQotCQkJLyogQ29uc3RydWN0IGNhbm9uaWNhbCByZWYgbmFtZSBmcm9tIHRoZSBhY3R1YWxfcmVmIG5hbWUgKi8KLQkJCWdpdF9idWZfY2xlYXIoJmNhbm9uaWNhbF9yZWZfbmFtZSk7Ci0JCQljbF9naXRfcGFzcyhnaXRfYnVmX3ByaW50ZigmY2Fub25pY2FsX3JlZl9uYW1lLCAicmVmcy9yZW1vdGVzLyVzIiwgYWN0dWFsX3JlZikpOwotCQkJaWYgKCFzdHJjbXAoZ2l0X2J1Zl9jc3RyKCZyZWZfbmFtZSksIGdpdF9idWZfY3N0cigmY2Fub25pY2FsX3JlZl9uYW1lKSkpCisJCQlpZiAoIXN0cmNtcChnaXRfYnVmX2NzdHIoJnJlZl9uYW1lKSwgYWN0dWFsX3JlZikpCiAJCQkJYnJlYWs7CiAJCX0KIApAQCAtMjAyLDcgKzIzMyw3IEBACiAJCX0KIAogCQkvKiBNYWtlIHN1cmUgdHJhY2tpbmcgYnJhbmNoIGlzIGF0IGV4cGVjdGVkIGNvbW1pdCBJRCAqLwotCQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJm9pZCwgcmVtb3RlLT5yZXBvLCBnaXRfYnVmX2NzdHIoJmNhbm9uaWNhbF9yZWZfbmFtZSkpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9uYW1lX3RvX2lkKCZvaWQsIHJlbW90ZS0+cmVwbywgYWN0dWFsX3JlZikpOwogCiAJCWlmIChnaXRfb2lkX2NtcChleHBlY3RlZF9yZWZzW2ldLm9pZCwgJm9pZCkgIT0gMCkgewogCQkJZ2l0X2J1Zl9wdXRzKCZtc2csICJUcmFja2luZyBicmFuY2ggY29tbWl0IGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIElELiIpOwpAQCAtMjMxLDcgKzI2Miw2IEBACiAKIAlnaXRfdmVjdG9yX2ZyZWUoJmFjdHVhbF9yZWZzKTsKIAlnaXRfYnVmX2ZyZWUoJm1zZyk7Ci0JZ2l0X2J1Zl9mcmVlKCZjYW5vbmljYWxfcmVmX25hbWUpOwogCWdpdF9idWZfZnJlZSgmcmVmX25hbWUpOwogCXJldHVybjsKIH0KQEAgLTIzOSw5ICsyNjksOSBAQAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19pbml0aWFsaXplKHZvaWQpCiB7CiAJZ2l0X3ZlY3RvciBkZWxldGVfc3BlY3MgPSBHSVRfVkVDVE9SX0lOSVQ7Ci0Jc2l6ZV90IGk7CisJY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqaGVhZHM7CisJc2l6ZV90IGksIGhlYWRzX2xlbjsKIAljaGFyICpjdXJyX2RlbF9zcGVjOwotCV9jcmVkX2FjcXVpcmVfY2FsbGVkID0gZmFsc2U7CiAKIAlfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInB1c2hfc3JjIik7CiAKQEAgLTI3MiwxNyArMzAyLDIxIEBACiAJZ2l0X29pZF9mcm9tc3RyKCZfdGFnX3RyZWUsICJmZjgzYWE0YzVlNWQyOGUzYmNiYTJmNWM2ZTJhZGM2MTI4NmE0ZTVlIik7CiAJZ2l0X29pZF9mcm9tc3RyKCZfdGFnX2Jsb2IsICJiNDgzYWU3YmE2NmRlY2VlOWFlZTk3MWY1MDEyMjFkZWE4NGIxNDk4Iik7CiAJZ2l0X29pZF9mcm9tc3RyKCZfdGFnX2xpZ2h0d2VpZ2h0LCAiOTUxYmJiYjkwZTIyNTlhNGM4OTUwZGI3ODk0Njc4NGZiNTNmY2JjZSIpOworCWdpdF9vaWRfZnJvbXN0cigmX3RhZ190YWcsICJlZWE0ZjI3MDVlZWVjMmRiMzgxM2YyNDMwODI5YWZjZTk5Y2QwMGI1Iik7CiAKIAkvKiBSZW1vdGUgVVJMIGVudmlyb25tZW50IHZhcmlhYmxlIG11c3QgYmUgc2V0LiAgVXNlciBhbmQgcGFzc3dvcmQgYXJlIG9wdGlvbmFsLiAgKi8KIAlfcmVtb3RlX3VybCA9IGNsX2dldGVudigiR0lUVEVTVF9SRU1PVEVfVVJMIik7CiAJX3JlbW90ZV91c2VyID0gY2xfZ2V0ZW52KCJHSVRURVNUX1JFTU9URV9VU0VSIik7CiAJX3JlbW90ZV9wYXNzID0gY2xfZ2V0ZW52KCJHSVRURVNUX1JFTU9URV9QQVNTIik7CisJX3JlbW90ZV9zc2hfa2V5ID0gY2xfZ2V0ZW52KCJHSVRURVNUX1JFTU9URV9TU0hfS0VZIik7CisJX3JlbW90ZV9zc2hfcHVia2V5ID0gY2xfZ2V0ZW52KCJHSVRURVNUX1JFTU9URV9TU0hfUFVCS0VZIik7CisJX3JlbW90ZV9zc2hfcGFzc3BocmFzZSA9IGNsX2dldGVudigiR0lUVEVTVF9SRU1PVEVfU1NIX1BBU1NQSFJBU0UiKTsKKwlfcmVtb3RlX2RlZmF1bHQgPSBjbF9nZXRlbnYoIkdJVFRFU1RfUkVNT1RFX0RFRkFVTFQiKTsKIAlfcmVtb3RlID0gTlVMTDsKIAogCWlmIChfcmVtb3RlX3VybCkgewogCQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2NyZWF0ZSgmX3JlbW90ZSwgX3JlcG8sICJ0ZXN0IiwgX3JlbW90ZV91cmwpKTsKIAotCQlnaXRfcmVtb3RlX3NldF9jcmVkX2FjcXVpcmVfY2IoX3JlbW90ZSwgY3JlZF9hY3F1aXJlX2NiLCAmX2NyZWRfYWNxdWlyZV9jYWxsZWQpOwogCQlyZWNvcmRfY2FsbGJhY2tzX2RhdGFfY2xlYXIoJl9yZWNvcmRfY2JzX2RhdGEpOwogCQlnaXRfcmVtb3RlX3NldF9jYWxsYmFja3MoX3JlbW90ZSwgJl9yZWNvcmRfY2JzKTsKIApAQCAtMjk0LDcgKzMyOCw4IEBACiAJCSAqIG9yZGVyIHRvIGRlbGV0ZSB0aGUgcmVtb3RlIGJyYW5jaCBwb2ludGVkIHRvIGJ5IEhFQUQgKHVzdWFsbHkgbWFzdGVyKS4KIAkJICogU2VlOiBodHRwczovL3Jhdy5naXRodWIuY29tL2dpdC9naXQvbWFzdGVyL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAudHh0CiAJCSAqLwotCQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2xzKF9yZW1vdGUsIGRlbGV0ZV9yZWZfY2IsICZkZWxldGVfc3BlY3MpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9scygmaGVhZHMsICZoZWFkc19sZW4sIF9yZW1vdGUpKTsKKwkJY2xfZ2l0X3Bhc3MoY3JlYXRlX2RlbGV0aW9uX3JlZnNwZWNzKCZkZWxldGVfc3BlY3MsIGhlYWRzLCBoZWFkc19sZW4pKTsKIAkJaWYgKGRlbGV0ZV9zcGVjcy5sZW5ndGgpIHsKIAkJCWdpdF9wdXNoICpwdXNoOwogCkBAIC0zMTQsNyArMzQ5LDcgQEAKIAogCQkvKiBOb3cgdGhhdCB3ZSd2ZSBkZWxldGVkIGV2ZXJ5dGhpbmcsIGZldGNoIGZyb20gdGhlIHJlbW90ZSAqLwogCQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Nvbm5lY3QoX3JlbW90ZSwgR0lUX0RJUkVDVElPTl9GRVRDSCkpOwotCQljbF9naXRfcGFzcyhnaXRfcmVtb3RlX2Rvd25sb2FkKF9yZW1vdGUsIE5VTEwsIE5VTEwpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3JlbW90ZV9kb3dubG9hZChfcmVtb3RlKSk7CiAJCWNsX2dpdF9wYXNzKGdpdF9yZW1vdGVfdXBkYXRlX3RpcHMoX3JlbW90ZSkpOwogCQlnaXRfcmVtb3RlX2Rpc2Nvbm5lY3QoX3JlbW90ZSk7CiAJfSBlbHNlCkBAIC0zMzYsNiArMzcxLDIyIEBACiAJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwogfQogCitzdGF0aWMgaW50IHB1c2hfcGFja19wcm9ncmVzc19jYihpbnQgc3RhZ2UsIHVuc2lnbmVkIGludCBjdXJyZW50LCB1bnNpZ25lZCBpbnQgdG90YWwsIHZvaWQqIHBheWxvYWQpCit7CisJaW50ICp3YXNfY2FsbGVkID0gKGludCAqKSBwYXlsb2FkOworCUdJVF9VTlVTRUQoc3RhZ2UpOyBHSVRfVU5VU0VEKGN1cnJlbnQpOyBHSVRfVU5VU0VEKHRvdGFsKTsKKwkqd2FzX2NhbGxlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF90cmFuc2Zlcl9wcm9ncmVzc19jYih1bnNpZ25lZCBpbnQgY3VycmVudCwgdW5zaWduZWQgaW50IHRvdGFsLCBzaXplX3QgYnl0ZXMsIHZvaWQqIHBheWxvYWQpCit7CisJaW50ICp3YXNfY2FsbGVkID0gKGludCAqKSBwYXlsb2FkOworCUdJVF9VTlVTRUQoY3VycmVudCk7IEdJVF9VTlVTRUQodG90YWwpOyBHSVRfVU5VU0VEKGJ5dGVzKTsKKwkqd2FzX2NhbGxlZCA9IDE7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogQ2FsbHMgcHVzaCBhbmQgcmVsaXN0cyByZWZzIG9uIHJlbW90ZSB0byB2ZXJpZnkgc3VjY2Vzcy4KICAqCkBAIC0zNDQsMTUgKzM5NSwxNyBAQAogICogQHBhcmFtIGV4cGVjdGVkX3JlZnMgZXhwZWN0ZWQgcmVtb3RlIHJlZnMgYWZ0ZXIgcHVzaAogICogQHBhcmFtIGV4cGVjdGVkX3JlZnNfbGVuIGxlbmd0aCBvZiBleHBlY3RlZF9yZWZzCiAgKiBAcGFyYW0gZXhwZWN0ZWRfcmV0IGV4cGVjdGVkIHJldHVybiB2YWx1ZSBmcm9tIGdpdF9wdXNoX2ZpbmlzaCgpCisgKiBAcGFyYW0gY2hlY2tfcHJvZ3Jlc3NfY2IgQ2hlY2sgdGhhdCB0aGUgcHVzaCBwcm9ncmVzcyBjYWxsYmFja3MgYXJlIGNhbGxlZAogICovCiBzdGF0aWMgdm9pZCBkb19wdXNoKGNvbnN0IGNoYXIgKnJlZnNwZWNzW10sIHNpemVfdCByZWZzcGVjc19sZW4sCiAJcHVzaF9zdGF0dXMgZXhwZWN0ZWRfc3RhdHVzZXNbXSwgc2l6ZV90IGV4cGVjdGVkX3N0YXR1c2VzX2xlbiwKLQlleHBlY3RlZF9yZWYgZXhwZWN0ZWRfcmVmc1tdLCBzaXplX3QgZXhwZWN0ZWRfcmVmc19sZW4sIGludCBleHBlY3RlZF9yZXQpCisJZXhwZWN0ZWRfcmVmIGV4cGVjdGVkX3JlZnNbXSwgc2l6ZV90IGV4cGVjdGVkX3JlZnNfbGVuLCBpbnQgZXhwZWN0ZWRfcmV0LCBpbnQgY2hlY2tfcHJvZ3Jlc3NfY2IpCiB7CiAJZ2l0X3B1c2ggKnB1c2g7CiAJZ2l0X3B1c2hfb3B0aW9ucyBvcHRzID0gR0lUX1BVU0hfT1BUSU9OU19JTklUOwogCXNpemVfdCBpOwogCWludCByZXQ7CisJaW50IHBhY2tfcHJvZ3Jlc3NfY2FsbGVkID0gMCwgdHJhbnNmZXJfcHJvZ3Jlc3NfY2FsbGVkID0gMDsKIAogCWlmIChfcmVtb3RlKSB7CiAJCS8qIEF1dG8tZGV0ZWN0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byB1c2UgKi8KQEAgLTM2Myw2ICs0MTYsOSBAQAogCQljbF9naXRfcGFzcyhnaXRfcHVzaF9uZXcoJnB1c2gsIF9yZW1vdGUpKTsKIAkJY2xfZ2l0X3Bhc3MoZ2l0X3B1c2hfc2V0X29wdGlvbnMocHVzaCwgJm9wdHMpKTsKIAorCQlpZiAoY2hlY2tfcHJvZ3Jlc3NfY2IpCisJCQljbF9naXRfcGFzcyhnaXRfcHVzaF9zZXRfY2FsbGJhY2tzKHB1c2gsIHB1c2hfcGFja19wcm9ncmVzc19jYiwgJnBhY2tfcHJvZ3Jlc3NfY2FsbGVkLCBwdXNoX3RyYW5zZmVyX3Byb2dyZXNzX2NiLCAmdHJhbnNmZXJfcHJvZ3Jlc3NfY2FsbGVkKSk7CisKIAkJZm9yIChpID0gMDsgaSA8IHJlZnNwZWNzX2xlbjsgaSsrKQogCQkJY2xfZ2l0X3Bhc3MoZ2l0X3B1c2hfYWRkX3JlZnNwZWMocHVzaCwgcmVmc3BlY3NbaV0pKTsKIApAQCAtMzc1LDYgKzQzMSwxMSBAQAogCQkJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZ2l0X3B1c2hfdW5wYWNrX29rKHB1c2gpKTsKIAkJfQogCisJCWlmIChjaGVja19wcm9ncmVzc19jYikgeworCQkJY2xfYXNzZXJ0X2VxdWFsX2koMSwgcGFja19wcm9ncmVzc19jYWxsZWQpOworCQkJY2xfYXNzZXJ0X2VxdWFsX2koMSwgdHJhbnNmZXJfcHJvZ3Jlc3NfY2FsbGVkKTsKKwkJfQorCiAJCWRvX3ZlcmlmeV9wdXNoX3N0YXR1cyhwdXNoLCBleHBlY3RlZF9zdGF0dXNlcywgZXhwZWN0ZWRfc3RhdHVzZXNfbGVuKTsKIAogCQljbF9hc3NlcnRfZXF1YWxfaShleHBlY3RlZF9yZXQsIHJldCk7CkBAIC0zOTMsNTcgKzQ1NCw1NyBAQAogLyogQ2FsbCBwdXNoX2ZpbmlzaCgpIHdpdGhvdXQgZXZlciBjYWxsaW5nIGdpdF9wdXNoX2FkZF9yZWZzcGVjKCkgKi8KIHZvaWQgdGVzdF9vbmxpbmVfcHVzaF9fbm9vcCh2b2lkKQogewotCWRvX3B1c2goTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgMCk7CisJZG9fcHVzaChOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCAwLCAwKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19iMSh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL2hlYWRzL2IxOnJlZnMvaGVhZHMvYjEiIH07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvaGVhZHMvYjEiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy9oZWFkcy9iMSIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0geyB7ICJyZWZzL2hlYWRzL2IxIiwgJl9vaWRfYjEgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19iMih2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL2hlYWRzL2IyOnJlZnMvaGVhZHMvYjIiIH07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvaGVhZHMvYjIiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy9oZWFkcy9iMiIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0geyB7ICJyZWZzL2hlYWRzL2IyIiwgJl9vaWRfYjIgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19iMyh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL2hlYWRzL2IzOnJlZnMvaGVhZHMvYjMiIH07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvaGVhZHMvYjMiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy9oZWFkcy9iMyIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0geyB7ICJyZWZzL2hlYWRzL2IzIiwgJl9vaWRfYjMgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19iNCh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL2hlYWRzL2I0OnJlZnMvaGVhZHMvYjQiIH07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvaGVhZHMvYjQiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy9oZWFkcy9iNCIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0geyB7ICJyZWZzL2hlYWRzL2I0IiwgJl9vaWRfYjQgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19iNSh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL2hlYWRzL2I1OnJlZnMvaGVhZHMvYjUiIH07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvaGVhZHMvYjUiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy9oZWFkcy9iNSIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0geyB7ICJyZWZzL2hlYWRzL2I1IiwgJl9vaWRfYjUgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19tdWx0aSh2b2lkKQpAQCAtNDU2LDExICs1MTcsMTEgQEAKIAkJInJlZnMvaGVhZHMvYjU6cmVmcy9oZWFkcy9iNSIKIAl9OwogCXB1c2hfc3RhdHVzIGV4cF9zdGF0c1tdID0gewotCQl7ICJyZWZzL2hlYWRzL2IxIiwgTlVMTCB9LAotCQl7ICJyZWZzL2hlYWRzL2IyIiwgTlVMTCB9LAotCQl7ICJyZWZzL2hlYWRzL2IzIiwgTlVMTCB9LAotCQl7ICJyZWZzL2hlYWRzL2I0IiwgTlVMTCB9LAotCQl7ICJyZWZzL2hlYWRzL2I1IiwgTlVMTCB9CisJCXsgInJlZnMvaGVhZHMvYjEiLCAxIH0sCisJCXsgInJlZnMvaGVhZHMvYjIiLCAxIH0sCisJCXsgInJlZnMvaGVhZHMvYjMiLCAxIH0sCisJCXsgInJlZnMvaGVhZHMvYjQiLCAxIH0sCisJCXsgInJlZnMvaGVhZHMvYjUiLCAxIH0KIAl9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0gewogCQl7ICJyZWZzL2hlYWRzL2IxIiwgJl9vaWRfYjEgfSwKQEAgLTQ3MSwxNyArNTMyLDE3IEBACiAJfTsKIAlkb19wdXNoKHNwZWNzLCBBUlJBWV9TSVpFKHNwZWNzKSwKIAkJZXhwX3N0YXRzLCBBUlJBWV9TSVpFKGV4cF9zdGF0cyksCi0JCWV4cF9yZWZzLCBBUlJBWV9TSVpFKGV4cF9yZWZzKSwgMCk7CisJCWV4cF9yZWZzLCBBUlJBWV9TSVpFKGV4cF9yZWZzKSwgMCwgMSk7CiB9CiAKIHZvaWQgdGVzdF9vbmxpbmVfcHVzaF9faW1wbGljaXRfdGd0KHZvaWQpCiB7CiAJY29uc3QgY2hhciAqc3BlY3MxW10gPSB7ICJyZWZzL2hlYWRzL2IxOiIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHMxW10gPSB7IHsgInJlZnMvaGVhZHMvYjEiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHMxW10gPSB7IHsgInJlZnMvaGVhZHMvYjEiLCAxIH0gfTsKIAlleHBlY3RlZF9yZWYgZXhwX3JlZnMxW10gPSB7IHsgInJlZnMvaGVhZHMvYjEiLCAmX29pZF9iMSB9IH07CiAKIAljb25zdCBjaGFyICpzcGVjczJbXSA9IHsgInJlZnMvaGVhZHMvYjI6IiB9OwotCXB1c2hfc3RhdHVzIGV4cF9zdGF0czJbXSA9IHsgeyAicmVmcy9oZWFkcy9iMiIsIE5VTEwgfSB9OworCXB1c2hfc3RhdHVzIGV4cF9zdGF0czJbXSA9IHsgeyAicmVmcy9oZWFkcy9iMiIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmczJbXSA9IHsKIAl7ICJyZWZzL2hlYWRzL2IxIiwgJl9vaWRfYjEgfSwKIAl7ICJyZWZzL2hlYWRzL2IyIiwgJl9vaWRfYjIgfQpAQCAtNDg5LDEwICs1NTAsMTAgQEAKIAogCWRvX3B1c2goc3BlY3MxLCBBUlJBWV9TSVpFKHNwZWNzMSksCiAJCWV4cF9zdGF0czEsIEFSUkFZX1NJWkUoZXhwX3N0YXRzMSksCi0JCWV4cF9yZWZzMSwgQVJSQVlfU0laRShleHBfcmVmczEpLCAwKTsKKwkJZXhwX3JlZnMxLCBBUlJBWV9TSVpFKGV4cF9yZWZzMSksIDAsIDEpOwogCWRvX3B1c2goc3BlY3MyLCBBUlJBWV9TSVpFKHNwZWNzMiksCiAJCWV4cF9zdGF0czIsIEFSUkFZX1NJWkUoZXhwX3N0YXRzMiksCi0JCWV4cF9yZWZzMiwgQVJSQVlfU0laRShleHBfcmVmczIpLCAwKTsKKwkJZXhwX3JlZnMyLCBBUlJBWV9TSVpFKGV4cF9yZWZzMiksIDAsIDApOwogfQogCiB2b2lkIHRlc3Rfb25saW5lX3B1c2hfX2Zhc3RfZndkKHZvaWQpCkBAIC01MDAsMTEgKzU2MSwxMSBAQAogCS8qIEZhc3QgZm9yd2FyZCBiMSBpbiB0Z3QgZnJvbSBfb2lkX2IxIHRvIF9vaWRfYjYuICovCiAKIAljb25zdCBjaGFyICpzcGVjc19pbml0W10gPSB7ICJyZWZzL2hlYWRzL2IxOnJlZnMvaGVhZHMvYjEiIH07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzX2luaXRbXSA9IHsgeyAicmVmcy9oZWFkcy9iMSIsIE5VTEwgfSB9OworCXB1c2hfc3RhdHVzIGV4cF9zdGF0c19pbml0W10gPSB7IHsgInJlZnMvaGVhZHMvYjEiLCAxIH0gfTsKIAlleHBlY3RlZF9yZWYgZXhwX3JlZnNfaW5pdFtdID0geyB7ICJyZWZzL2hlYWRzL2IxIiwgJl9vaWRfYjEgfSB9OwogCiAJY29uc3QgY2hhciAqc3BlY3NfZmZbXSA9IHsgInJlZnMvaGVhZHMvYjY6cmVmcy9oZWFkcy9iMSIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHNfZmZbXSA9IHsgeyAicmVmcy9oZWFkcy9iMSIsIE5VTEwgfSB9OworCXB1c2hfc3RhdHVzIGV4cF9zdGF0c19mZltdID0geyB7ICJyZWZzL2hlYWRzL2IxIiwgMSB9IH07CiAJZXhwZWN0ZWRfcmVmIGV4cF9yZWZzX2ZmW10gPSB7IHsgInJlZnMvaGVhZHMvYjEiLCAmX29pZF9iNiB9IH07CiAKIAkvKiBEbyBhIGZvcmNlIHB1c2ggdG8gcmVzZXQgYjEgaW4gdGFyZ2V0IGJhY2sgdG8gX29pZF9iMSAqLwpAQCAtNTE0LDg1ICs1NzUsOTUgQEAKIAogCWRvX3B1c2goc3BlY3NfaW5pdCwgQVJSQVlfU0laRShzcGVjc19pbml0KSwKIAkJZXhwX3N0YXRzX2luaXQsIEFSUkFZX1NJWkUoZXhwX3N0YXRzX2luaXQpLAotCQlleHBfcmVmc19pbml0LCBBUlJBWV9TSVpFKGV4cF9yZWZzX2luaXQpLCAwKTsKKwkJZXhwX3JlZnNfaW5pdCwgQVJSQVlfU0laRShleHBfcmVmc19pbml0KSwgMCwgMSk7CiAKIAlkb19wdXNoKHNwZWNzX2ZmLCBBUlJBWV9TSVpFKHNwZWNzX2ZmKSwKIAkJZXhwX3N0YXRzX2ZmLCBBUlJBWV9TSVpFKGV4cF9zdGF0c19mZiksCi0JCWV4cF9yZWZzX2ZmLCBBUlJBWV9TSVpFKGV4cF9yZWZzX2ZmKSwgMCk7CisJCWV4cF9yZWZzX2ZmLCBBUlJBWV9TSVpFKGV4cF9yZWZzX2ZmKSwgMCwgMCk7CiAKIAlkb19wdXNoKHNwZWNzX3Jlc2V0LCBBUlJBWV9TSVpFKHNwZWNzX3Jlc2V0KSwKIAkJZXhwX3N0YXRzX2luaXQsIEFSUkFZX1NJWkUoZXhwX3N0YXRzX2luaXQpLAotCQlleHBfcmVmc19pbml0LCBBUlJBWV9TSVpFKGV4cF9yZWZzX2luaXQpLCAwKTsKKwkJZXhwX3JlZnNfaW5pdCwgQVJSQVlfU0laRShleHBfcmVmc19pbml0KSwgMCwgMCk7CiAKIAlkb19wdXNoKHNwZWNzX2ZmX2ZvcmNlLCBBUlJBWV9TSVpFKHNwZWNzX2ZmX2ZvcmNlKSwKIAkJZXhwX3N0YXRzX2ZmLCBBUlJBWV9TSVpFKGV4cF9zdGF0c19mZiksCi0JCWV4cF9yZWZzX2ZmLCBBUlJBWV9TSVpFKGV4cF9yZWZzX2ZmKSwgMCk7CisJCWV4cF9yZWZzX2ZmLCBBUlJBWV9TSVpFKGV4cF9yZWZzX2ZmKSwgMCwgMCk7CiB9CiAKIHZvaWQgdGVzdF9vbmxpbmVfcHVzaF9fdGFnX2NvbW1pdCh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL3RhZ3MvdGFnLWNvbW1pdDpyZWZzL3RhZ3MvdGFnLWNvbW1pdCIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy1jb21taXQiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy1jb21taXQiLCAxIH0gfTsKIAlleHBlY3RlZF9yZWYgZXhwX3JlZnNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy1jb21taXQiLCAmX3RhZ19jb21taXQgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX190YWdfdHJlZSh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL3RhZ3MvdGFnLXRyZWU6cmVmcy90YWdzL3RhZy10cmVlIiB9OwotCXB1c2hfc3RhdHVzIGV4cF9zdGF0c1tdID0geyB7ICJyZWZzL3RhZ3MvdGFnLXRyZWUiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy10cmVlIiwgMSB9IH07CiAJZXhwZWN0ZWRfcmVmIGV4cF9yZWZzW10gPSB7IHsgInJlZnMvdGFncy90YWctdHJlZSIsICZfdGFnX3RyZWUgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX190YWdfYmxvYih2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL3RhZ3MvdGFnLWJsb2I6cmVmcy90YWdzL3RhZy1ibG9iIiB9OwotCXB1c2hfc3RhdHVzIGV4cF9zdGF0c1tdID0geyB7ICJyZWZzL3RhZ3MvdGFnLWJsb2IiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy1ibG9iIiwgMSB9IH07CiAJZXhwZWN0ZWRfcmVmIGV4cF9yZWZzW10gPSB7IHsgInJlZnMvdGFncy90YWctYmxvYiIsICZfdGFnX2Jsb2IgfSB9OwogCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAogCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKLQkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwKTsKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAxKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX190YWdfbGlnaHR3ZWlnaHQodm9pZCkKIHsKIAljb25zdCBjaGFyICpzcGVjc1tdID0geyAicmVmcy90YWdzL3RhZy1saWdodHdlaWdodDpyZWZzL3RhZ3MvdGFnLWxpZ2h0d2VpZ2h0IiB9OwotCXB1c2hfc3RhdHVzIGV4cF9zdGF0c1tdID0geyB7ICJyZWZzL3RhZ3MvdGFnLWxpZ2h0d2VpZ2h0IiwgTlVMTCB9IH07CisJcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvdGFncy90YWctbGlnaHR3ZWlnaHQiLCAxIH0gfTsKIAlleHBlY3RlZF9yZWYgZXhwX3JlZnNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy1saWdodHdlaWdodCIsICZfdGFnX2xpZ2h0d2VpZ2h0IH0gfTsKIAlkb19wdXNoKHNwZWNzLCBBUlJBWV9TSVpFKHNwZWNzKSwKIAkJZXhwX3N0YXRzLCBBUlJBWV9TSVpFKGV4cF9zdGF0cyksCi0JCWV4cF9yZWZzLCBBUlJBWV9TSVpFKGV4cF9yZWZzKSwgMCk7CisJCWV4cF9yZWZzLCBBUlJBWV9TSVpFKGV4cF9yZWZzKSwgMCwgMSk7Cit9CisKK3ZvaWQgdGVzdF9vbmxpbmVfcHVzaF9fdGFnX3RvX3RhZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKnNwZWNzW10gPSB7ICJyZWZzL3RhZ3MvdGFnLXRhZzpyZWZzL3RhZ3MvdGFnLXRhZyIgfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy10YWciLCAxIH0gfTsKKwlleHBlY3RlZF9yZWYgZXhwX3JlZnNbXSA9IHsgeyAicmVmcy90YWdzL3RhZy10YWciLCAmX3RhZ190YWcgfSB9OworCWRvX3B1c2goc3BlY3MsIEFSUkFZX1NJWkUoc3BlY3MpLAorCQlleHBfc3RhdHMsIEFSUkFZX1NJWkUoZXhwX3N0YXRzKSwKKwkJZXhwX3JlZnMsIEFSUkFZX1NJWkUoZXhwX3JlZnMpLCAwLCAwKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19mb3JjZSh2b2lkKQogewogCWNvbnN0IGNoYXIgKnNwZWNzMVtdID0geyJyZWZzL2hlYWRzL2IzOnJlZnMvaGVhZHMvdGd0In07Ci0JcHVzaF9zdGF0dXMgZXhwX3N0YXRzMVtdID0geyB7ICJyZWZzL2hlYWRzL3RndCIsIE5VTEwgfSB9OworCXB1c2hfc3RhdHVzIGV4cF9zdGF0czFbXSA9IHsgeyAicmVmcy9oZWFkcy90Z3QiLCAxIH0gfTsKIAlleHBlY3RlZF9yZWYgZXhwX3JlZnMxW10gPSB7IHsgInJlZnMvaGVhZHMvdGd0IiwgJl9vaWRfYjMgfSB9OwogCiAJY29uc3QgY2hhciAqc3BlY3MyW10gPSB7InJlZnMvaGVhZHMvYjQ6cmVmcy9oZWFkcy90Z3QifTsKIAogCWNvbnN0IGNoYXIgKnNwZWNzMl9mb3JjZVtdID0geyIrcmVmcy9oZWFkcy9iNDpyZWZzL2hlYWRzL3RndCJ9OwotCXB1c2hfc3RhdHVzIGV4cF9zdGF0czJfZm9yY2VbXSA9IHsgeyAicmVmcy9oZWFkcy90Z3QiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHMyX2ZvcmNlW10gPSB7IHsgInJlZnMvaGVhZHMvdGd0IiwgMSB9IH07CiAJZXhwZWN0ZWRfcmVmIGV4cF9yZWZzMl9mb3JjZVtdID0geyB7ICJyZWZzL2hlYWRzL3RndCIsICZfb2lkX2I0IH0gfTsKIAogCWRvX3B1c2goc3BlY3MxLCBBUlJBWV9TSVpFKHNwZWNzMSksCiAJCWV4cF9zdGF0czEsIEFSUkFZX1NJWkUoZXhwX3N0YXRzMSksCi0JCWV4cF9yZWZzMSwgQVJSQVlfU0laRShleHBfcmVmczEpLCAwKTsKKwkJZXhwX3JlZnMxLCBBUlJBWV9TSVpFKGV4cF9yZWZzMSksIDAsIDEpOwogCiAJZG9fcHVzaChzcGVjczIsIEFSUkFZX1NJWkUoc3BlY3MyKSwKIAkJTlVMTCwgMCwKLQkJZXhwX3JlZnMxLCBBUlJBWV9TSVpFKGV4cF9yZWZzMSksIEdJVF9FTk9ORkFTVEZPUldBUkQpOworCQlleHBfcmVmczEsIEFSUkFZX1NJWkUoZXhwX3JlZnMxKSwgR0lUX0VOT05GQVNURk9SV0FSRCwgMCk7CiAKIAkvKiBOb24tZmFzdC1mb3J3YXJkIHVwZGF0ZSB3aXRoIGZvcmNlIHNob3VsZCBwYXNzLiAqLwogCWRvX3B1c2goc3BlY3MyX2ZvcmNlLCBBUlJBWV9TSVpFKHNwZWNzMl9mb3JjZSksCiAJCWV4cF9zdGF0czJfZm9yY2UsIEFSUkFZX1NJWkUoZXhwX3N0YXRzMl9mb3JjZSksCi0JCWV4cF9yZWZzMl9mb3JjZSwgQVJSQVlfU0laRShleHBfcmVmczJfZm9yY2UpLCAwKTsKKwkJZXhwX3JlZnMyX2ZvcmNlLCBBUlJBWV9TSVpFKGV4cF9yZWZzMl9mb3JjZSksIDAsIDEpOwogfQogCiB2b2lkIHRlc3Rfb25saW5lX3B1c2hfX2RlbGV0ZSh2b2lkKQpAQCAtNjAyLDggKzY3Myw4IEBACiAJCSJyZWZzL2hlYWRzL2IxOnJlZnMvaGVhZHMvdGd0MiIKIAl9OwogCXB1c2hfc3RhdHVzIGV4cF9zdGF0czFbXSA9IHsKLQkJeyAicmVmcy9oZWFkcy90Z3QxIiwgTlVMTCB9LAotCQl7ICJyZWZzL2hlYWRzL3RndDIiLCBOVUxMIH0KKwkJeyAicmVmcy9oZWFkcy90Z3QxIiwgMSB9LAorCQl7ICJyZWZzL2hlYWRzL3RndDIiLCAxIH0KIAl9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmczFbXSA9IHsKIAkJeyAicmVmcy9oZWFkcy90Z3QxIiwgJl9vaWRfYjEgfSwKQEAgLTYxMywxNyArNjg0LDE3IEBACiAJY29uc3QgY2hhciAqc3BlY3NfZGVsX2Zha2VbXSA9IHsgIjpyZWZzL2hlYWRzL2Zha2UiIH07CiAJLyogRm9yY2UgaGFzIG5vIGVmZmVjdCBmb3IgZGVsZXRlLiAqLwogCWNvbnN0IGNoYXIgKnNwZWNzX2RlbF9mYWtlX2ZvcmNlW10gPSB7ICIrOnJlZnMvaGVhZHMvZmFrZSIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHNfZmFrZVtdID0geyB7ICJyZWZzL2hlYWRzL2Zha2UiLCBOVUxMIH0gfTsKKwlwdXNoX3N0YXR1cyBleHBfc3RhdHNfZmFrZVtdID0geyB7ICJyZWZzL2hlYWRzL2Zha2UiLCAxIH0gfTsKIAogCWNvbnN0IGNoYXIgKnNwZWNzX2RlbGV0ZVtdID0geyAiOnJlZnMvaGVhZHMvdGd0MSIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHNfZGVsZXRlW10gPSB7IHsgInJlZnMvaGVhZHMvdGd0MSIsIE5VTEwgfSB9OworCXB1c2hfc3RhdHVzIGV4cF9zdGF0c19kZWxldGVbXSA9IHsgeyAicmVmcy9oZWFkcy90Z3QxIiwgMSB9IH07CiAJZXhwZWN0ZWRfcmVmIGV4cF9yZWZzX2RlbGV0ZVtdID0geyB7ICJyZWZzL2hlYWRzL3RndDIiLCAmX29pZF9iMSB9IH07CiAJLyogRm9yY2UgaGFzIG5vIGVmZmVjdCBmb3IgZGVsZXRlLiAqLwogCWNvbnN0IGNoYXIgKnNwZWNzX2RlbGV0ZV9mb3JjZVtdID0geyAiKzpyZWZzL2hlYWRzL3RndDEiIH07CiAKIAlkb19wdXNoKHNwZWNzMSwgQVJSQVlfU0laRShzcGVjczEpLAogCQlleHBfc3RhdHMxLCBBUlJBWV9TSVpFKGV4cF9zdGF0czEpLAotCQlleHBfcmVmczEsIEFSUkFZX1NJWkUoZXhwX3JlZnMxKSwgMCk7CisJCWV4cF9yZWZzMSwgQVJSQVlfU0laRShleHBfcmVmczEpLCAwLCAxKTsKIAogCS8qIFdoZW4gZGVsZXRpbmcgYSBub24tZXhpc3RlbnQgYnJhbmNoLCB0aGUgZ2l0IGNsaWVudCBzZW5kcyB6ZXJvIGZvciBib3RoCiAJICogdGhlIG9sZCBhbmQgbmV3IGNvbW1pdCBpZC4gIFRoaXMgc2hvdWxkIHN1Y2NlZWQgb24gdGhlIHNlcnZlciB3aXRoIHRoZQpAQCAtNjMzLDIzICs3MDQsMjMgQEAKIAkgKi8KIAlkb19wdXNoKHNwZWNzX2RlbF9mYWtlLCBBUlJBWV9TSVpFKHNwZWNzX2RlbF9mYWtlKSwKIAkJZXhwX3N0YXRzX2Zha2UsIDEsCi0JCWV4cF9yZWZzMSwgQVJSQVlfU0laRShleHBfcmVmczEpLCAwKTsKKwkJZXhwX3JlZnMxLCBBUlJBWV9TSVpFKGV4cF9yZWZzMSksIDAsIDApOwogCWRvX3B1c2goc3BlY3NfZGVsX2Zha2VfZm9yY2UsIEFSUkFZX1NJWkUoc3BlY3NfZGVsX2Zha2VfZm9yY2UpLAogCQlleHBfc3RhdHNfZmFrZSwgMSwKLQkJZXhwX3JlZnMxLCBBUlJBWV9TSVpFKGV4cF9yZWZzMSksIDApOworCQlleHBfcmVmczEsIEFSUkFZX1NJWkUoZXhwX3JlZnMxKSwgMCwgMCk7CiAKIAkvKiBEZWxldGUgb25lIG9mIHRoZSBwdXNoZWQgYnJhbmNoZXMuICovCiAJZG9fcHVzaChzcGVjc19kZWxldGUsIEFSUkFZX1NJWkUoc3BlY3NfZGVsZXRlKSwKIAkJZXhwX3N0YXRzX2RlbGV0ZSwgQVJSQVlfU0laRShleHBfc3RhdHNfZGVsZXRlKSwKLQkJZXhwX3JlZnNfZGVsZXRlLCBBUlJBWV9TSVpFKGV4cF9yZWZzX2RlbGV0ZSksIDApOworCQlleHBfcmVmc19kZWxldGUsIEFSUkFZX1NJWkUoZXhwX3JlZnNfZGVsZXRlKSwgMCwgMCk7CiAKIAkvKiBSZS1wdXNoIGJyYW5jaGVzIGFuZCByZXRyeSBkZWxldGUgd2l0aCBmb3JjZS4gKi8KIAlkb19wdXNoKHNwZWNzMSwgQVJSQVlfU0laRShzcGVjczEpLAogCQlleHBfc3RhdHMxLCBBUlJBWV9TSVpFKGV4cF9zdGF0czEpLAotCQlleHBfcmVmczEsIEFSUkFZX1NJWkUoZXhwX3JlZnMxKSwgMCk7CisJCWV4cF9yZWZzMSwgQVJSQVlfU0laRShleHBfcmVmczEpLCAwLCAwKTsKIAlkb19wdXNoKHNwZWNzX2RlbGV0ZV9mb3JjZSwgQVJSQVlfU0laRShzcGVjc19kZWxldGVfZm9yY2UpLAogCQlleHBfc3RhdHNfZGVsZXRlLCBBUlJBWV9TSVpFKGV4cF9zdGF0c19kZWxldGUpLAotCQlleHBfcmVmc19kZWxldGUsIEFSUkFZX1NJWkUoZXhwX3JlZnNfZGVsZXRlKSwgMCk7CisJCWV4cF9yZWZzX2RlbGV0ZSwgQVJSQVlfU0laRShleHBfcmVmc19kZWxldGUpLCAwLCAwKTsKIH0KIAogdm9pZCB0ZXN0X29ubGluZV9wdXNoX19iYWRfcmVmc3BlY3Modm9pZCkKQEAgLTY3NSwxNyArNzQ2LDE5IEBACiAJLyogVE9ETzogRXhwcmVzc2lvbnMgaW4gcmVmc3BlY3MgZG9lc24ndCBhY3R1YWxseSB3b3JrIHlldCAqLwogCWNvbnN0IGNoYXIgKnNwZWNzX2xlZnRfZXhwcltdID0geyAicmVmcy9oZWFkcy9iMn4xOnJlZnMvaGVhZHMvYjIiIH07CiAKKwkvKiBleHBlY3Qgbm90IE5VTEwgdG8gaW5kaWNhdGUgZmFpbHVyZSAoY29yZSBnaXQgcmVwbGllcyAiZnVubnkgcmVmbmFtZSIsCisJICogb3RoZXIgc2VydmVycyBtYXkgYmUgbGVzcyBwaXRoeS4gKi8KIAljb25zdCBjaGFyICpzcGVjc19yaWdodF9leHByW10gPSB7ICJyZWZzL2hlYWRzL2IyOnJlZnMvaGVhZHMvYjJ+MSIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHNfcmlnaHRfZXhwcltdID0geyB7ICJyZWZzL2hlYWRzL2IyfjEiLCAiZnVubnkgcmVmbmFtZSIgfSB9OworCXB1c2hfc3RhdHVzIGV4cF9zdGF0c19yaWdodF9leHByW10gPSB7IHsgInJlZnMvaGVhZHMvYjJ+MSIsIDAgfSB9OwogCiAJLyogVE9ETzogRmluZCBhIG1vcmUgcHJlY2lzZSB3YXkgb2YgY2hlY2tpbmcgZXJyb3JzIHRoYW4gYSBleGl0IGNvZGUgb2YgLTEuICovCiAJZG9fcHVzaChzcGVjc19sZWZ0X2V4cHIsIEFSUkFZX1NJWkUoc3BlY3NfbGVmdF9leHByKSwKIAkJTlVMTCwgMCwKLQkJTlVMTCwgMCwgLTEpOworCQlOVUxMLCAwLCAtMSwgMCk7CiAKIAlkb19wdXNoKHNwZWNzX3JpZ2h0X2V4cHIsIEFSUkFZX1NJWkUoc3BlY3NfcmlnaHRfZXhwciksCiAJCWV4cF9zdGF0c19yaWdodF9leHByLCBBUlJBWV9TSVpFKGV4cF9zdGF0c19yaWdodF9leHByKSwKLQkJTlVMTCwgMCwgMCk7CisJCU5VTEwsIDAsIDAsIDEpOwogfQogCiB2b2lkIHRlc3Rfb25saW5lX3B1c2hfX25vdGVzKHZvaWQpCkBAIC02OTMsNyArNzY2LDcgQEAKIAlnaXRfb2lkIG5vdGVfb2lkLCAqdGFyZ2V0X29pZCwgZXhwZWN0ZWRfb2lkOwogCWdpdF9zaWduYXR1cmUgKnNpZ25hdHVyZTsKIAljb25zdCBjaGFyICpzcGVjc1tdID0geyAicmVmcy9ub3Rlcy9jb21taXRzOnJlZnMvbm90ZXMvY29tbWl0cyIgfTsKLQlwdXNoX3N0YXR1cyBleHBfc3RhdHNbXSA9IHsgeyAicmVmcy9ub3Rlcy9jb21taXRzIiwgTlVMTCB9IH07CisJcHVzaF9zdGF0dXMgZXhwX3N0YXRzW10gPSB7IHsgInJlZnMvbm90ZXMvY29tbWl0cyIsIDEgfSB9OwogCWV4cGVjdGVkX3JlZiBleHBfcmVmc1tdID0geyB7ICJyZWZzL25vdGVzL2NvbW1pdHMiLCAmZXhwZWN0ZWRfb2lkIH0gfTsKIAlnaXRfb2lkX2Zyb21zdHIoJmV4cGVjdGVkX29pZCwgIjg0NjFhOTliMjdiNzA0M2U1OGZmNmUxZjVkMmNmMDdkMjgyNTM0ZmIiKTsKIApAQCAtNzA1LDcgKzc3OCw3IEBACiAKIAlkb19wdXNoKHNwZWNzLCBBUlJBWV9TSVpFKHNwZWNzKSwKIAkJZXhwX3N0YXRzLCBBUlJBWV9TSVpFKGV4cF9zdGF0cyksCi0JCWV4cF9yZWZzLCBBUlJBWV9TSVpFKGV4cF9yZWZzKSwgMCk7CisJCWV4cF9yZWZzLCBBUlJBWV9TSVpFKGV4cF9yZWZzKSwgMCwgMSk7CiAKIAlnaXRfc2lnbmF0dXJlX2ZyZWUoc2lnbmF0dXJlKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvb25saW5lL3B1c2hfdXRpbC5jIGIvdGVzdHMvb25saW5lL3B1c2hfdXRpbC5jCnNpbWlsYXJpdHkgaW5kZXggNzAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvb25saW5lL3B1c2hfdXRpbC5jCnJlbmFtZSB0byB0ZXN0cy9vbmxpbmUvcHVzaF91dGlsLmMKaW5kZXggMmU0NTc4NC4uMDM4YzE0NCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9vbmxpbmUvcHVzaF91dGlsLmMKKysrIGIvdGVzdHMvb25saW5lL3B1c2hfdXRpbC5jCkBAIC00NCwyMCArNDQsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRlbGV0ZV9yZWZfY2IoZ2l0X3JlbW90ZV9oZWFkICpoZWFkLCB2b2lkICpwYXlsb2FkKQoraW50IGNyZWF0ZV9kZWxldGlvbl9yZWZzcGVjcyhnaXRfdmVjdG9yICpvdXQsIGNvbnN0IGdpdF9yZW1vdGVfaGVhZCAqKmhlYWRzLCBzaXplX3QgaGVhZHNfbGVuKQogewotCWdpdF92ZWN0b3IgKmRlbGV0ZV9zcGVjcyA9IChnaXRfdmVjdG9yICopcGF5bG9hZDsKIAlnaXRfYnVmIGRlbF9zcGVjID0gR0lUX0JVRl9JTklUOworCXNpemVfdCBpOwogCi0JLyogSWdub3JlIG1hbGZvcm1lZCByZWYgbmFtZXMgKHdoaWNoIGFsc28gc2F2ZXMgdXMgZnJvbSB0YWdee30gKi8KLQlpZiAoIWdpdF9yZWZlcmVuY2VfaXNfdmFsaWRfbmFtZShoZWFkLT5uYW1lKSkKLQkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IGhlYWRzX2xlbjsgaSsrKSB7CisJCWNvbnN0IGdpdF9yZW1vdGVfaGVhZCAqaGVhZCA9IGhlYWRzW2ldOworCQkvKiBJZ25vcmUgbWFsZm9ybWVkIHJlZiBuYW1lcyAod2hpY2ggYWxzbyBzYXZlcyB1cyBmcm9tIHRhZ157fSAqLworCQlpZiAoIWdpdF9yZWZlcmVuY2VfaXNfdmFsaWRfbmFtZShoZWFkLT5uYW1lKSkKKwkJCXJldHVybiAwOwogCi0JLyogQ3JlYXRlIGEgcmVmc3BlYyB0aGF0IGRlbGV0ZXMgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSAqLwotCWlmIChzdHJjbXAoaGVhZC0+bmFtZSwgInJlZnMvaGVhZHMvbWFzdGVyIikpIHsKLQkJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9wdXRjKCZkZWxfc3BlYywgJzonKSk7Ci0JCWNsX2dpdF9wYXNzKGdpdF9idWZfcHV0cygmZGVsX3NwZWMsIGhlYWQtPm5hbWUpKTsKLQkJY2xfZ2l0X3Bhc3MoZ2l0X3ZlY3Rvcl9pbnNlcnQoZGVsZXRlX3NwZWNzLCBnaXRfYnVmX2RldGFjaCgmZGVsX3NwZWMpKSk7CisJCS8qIENyZWF0ZSBhIHJlZnNwZWMgdGhhdCBkZWxldGVzIGEgYnJhbmNoIGluIHRoZSByZW1vdGUgKi8KKwkJaWYgKHN0cmNtcChoZWFkLT5uYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkgeworCQkJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9wdXRjKCZkZWxfc3BlYywgJzonKSk7CisJCQljbF9naXRfcGFzcyhnaXRfYnVmX3B1dHMoJmRlbF9zcGVjLCBoZWFkLT5uYW1lKSk7CisJCQljbF9naXRfcGFzcyhnaXRfdmVjdG9yX2luc2VydChvdXQsIGdpdF9idWZfZGV0YWNoKCZkZWxfc3BlYykpKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNjksMjYgKzcyLDI4IEBACiAJcmV0dXJuIGdpdF92ZWN0b3JfaW5zZXJ0KHJlZnMsIGhlYWQpOwogfQogCi12b2lkIHZlcmlmeV9yZW1vdGVfcmVmcyhnaXRfdmVjdG9yICphY3R1YWxfcmVmcywgY29uc3QgZXhwZWN0ZWRfcmVmIGV4cGVjdGVkX3JlZnNbXSwgc2l6ZV90IGV4cGVjdGVkX3JlZnNfbGVuKQordm9pZCB2ZXJpZnlfcmVtb3RlX3JlZnMoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICphY3R1YWxfcmVmc1tdLCBzaXplX3QgYWN0dWFsX3JlZnNfbGVuLCBjb25zdCBleHBlY3RlZF9yZWYgZXhwZWN0ZWRfcmVmc1tdLCBzaXplX3QgZXhwZWN0ZWRfcmVmc19sZW4pCiB7CiAJc2l6ZV90IGksIGogPSAwOwogCWdpdF9idWYgbXNnID0gR0lUX0JVRl9JTklUOwotCWdpdF9yZW1vdGVfaGVhZCAqYWN0dWFsOworCWNvbnN0IGdpdF9yZW1vdGVfaGVhZCAqYWN0dWFsOwogCWNoYXIgKm9pZF9zdHI7CiAJYm9vbCBtYXN0ZXJfcHJlc2VudCA9IGZhbHNlOwogCiAJLyogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyICJtYXN0ZXIiIGlzIHByZXNlbnQgb24gdGhlIG90aGVyIGVuZCBvciBub3QgKi8KLQlnaXRfdmVjdG9yX2ZvcmVhY2goYWN0dWFsX3JlZnMsIGksIGFjdHVhbCkgeworCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfcmVmc19sZW47IGkrKykgeworCQlhY3R1YWwgPSBhY3R1YWxfcmVmc1tpXTsKIAkJaWYgKCFzdHJjbXAoYWN0dWFsLT5uYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkgewogCQkJbWFzdGVyX3ByZXNlbnQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAoZXhwZWN0ZWRfcmVmc19sZW4gKyAobWFzdGVyX3ByZXNlbnQgPyAxIDogMCkgIT0gYWN0dWFsX3JlZnMtPmxlbmd0aCkKKwlpZiAoZXhwZWN0ZWRfcmVmc19sZW4gKyAobWFzdGVyX3ByZXNlbnQgPyAxIDogMCkgIT0gYWN0dWFsX3JlZnNfbGVuKQogCQlnb3RvIGZhaWxlZDsKIAotCWdpdF92ZWN0b3JfZm9yZWFjaChhY3R1YWxfcmVmcywgaSwgYWN0dWFsKSB7CisJZm9yIChpID0gMDsgaSA8IGFjdHVhbF9yZWZzX2xlbjsgaSsrKSB7CisJCWFjdHVhbCA9IGFjdHVhbF9yZWZzW2ldOwogCQlpZiAobWFzdGVyX3ByZXNlbnQgJiYgIXN0cmNtcChhY3R1YWwtPm5hbWUsICJyZWZzL2hlYWRzL21hc3RlciIpKQogCQkJY29udGludWU7CiAKQEAgLTExMSw3ICsxMTYsOCBAQAogCX0KIAogCWdpdF9idWZfcHV0cygmbXNnLCAiXG5BQ1RVQUw6XG4iKTsKLQlnaXRfdmVjdG9yX2ZvcmVhY2goYWN0dWFsX3JlZnMsIGksIGFjdHVhbCkgeworCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfcmVmc19sZW47IGkrKykgeworCQlhY3R1YWwgPSBhY3R1YWxfcmVmc1tpXTsKIAkJaWYgKG1hc3Rlcl9wcmVzZW50ICYmICFzdHJjbXAoYWN0dWFsLT5uYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL29ubGluZS9wdXNoX3V0aWwuaCBiL3Rlc3RzL29ubGluZS9wdXNoX3V0aWwuaApzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL29ubGluZS9wdXNoX3V0aWwuaApyZW5hbWUgdG8gdGVzdHMvb25saW5lL3B1c2hfdXRpbC5oCmluZGV4IDc1OTEyMmEuLmE3MjA3YzQgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvb25saW5lL3B1c2hfdXRpbC5oCisrKyBiL3Rlc3RzL29ubGluZS9wdXNoX3V0aWwuaApAQCAtMTIsNyArMTIsNyBAQAogICogQHBhcmFtIGRhdGEgcG9pbnRlciB0byBhIHJlY29yZF9jYWxsYmFja3NfZGF0YSBpbnN0YW5jZQogICovCiAjZGVmaW5lIFJFQ09SRF9DQUxMQkFDS1NfSU5JVChkYXRhKSBcCi0JeyBHSVRfUkVNT1RFX0NBTExCQUNLU19WRVJTSU9OLCBOVUxMLCBOVUxMLCByZWNvcmRfdXBkYXRlX3RpcHNfY2IsIGRhdGEgfQorCXsgR0lUX1JFTU9URV9DQUxMQkFDS1NfVkVSU0lPTiwgTlVMTCwgTlVMTCwgY3JlZF9hY3F1aXJlX2NiLCBOVUxMLCByZWNvcmRfdXBkYXRlX3RpcHNfY2IsIGRhdGEgfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJY2hhciAqbmFtZTsKQEAgLTQxLDEyICs0MSwxMyBAQAogaW50IHJlY29yZF91cGRhdGVfdGlwc19jYihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBnaXRfb2lkICphLCBjb25zdCBnaXRfb2lkICpiLCB2b2lkICpkYXRhKTsKIAogLyoqCi0gKiBDYWxsYmFjayBmb3IgZ2l0X3JlbW90ZV9saXN0IHRoYXQgYWRkcyByZWZzcGVjcyB0byBkZWxldGUgZWFjaCByZWYKKyAqIENyZWF0ZSBhIHNldCBvZiByZWZzcGVjcyB0aGF0IGRlbGV0ZXMgZWFjaCBvZiB0aGUgaW5wdXRzCiAgKgotICogQHBhcmFtIGhlYWQgYSByZWYgb24gdGhlIHJlbW90ZQotICogQHBhcmFtIHBheWxvYWQgYSBnaXRfcHVzaCBpbnN0YW5jZQorICogQHBhcmFtIG91dCB0aGUgdmVjdG9yIGluIHdoaWNoIHRvIHN0b3JlIHRoZSByZWZzcGVjcworICogQHBhcmFtIGhlYWRzIHRoZSByZW1vdGUgaGVhZHMKKyAqIEBwYXJhbSBoZWFkc19sZW4gdGhlIHNpemUgb2YgdGhlIGFycmF5CiAgKi8KLWludCBkZWxldGVfcmVmX2NiKGdpdF9yZW1vdGVfaGVhZCAqaGVhZCwgdm9pZCAqcGF5bG9hZCk7CitpbnQgY3JlYXRlX2RlbGV0aW9uX3JlZnNwZWNzKGdpdF92ZWN0b3IgKm91dCwgY29uc3QgZ2l0X3JlbW90ZV9oZWFkICoqaGVhZHMsIHNpemVfdCBoZWFkc19sZW4pOwogCiAvKioKICAqIENhbGxiYWNrIGZvciBnaXRfcmVtb3RlX2xpc3QgdGhhdCBhZGRzIHJlZnNwZWNzIHRvIHZlY3RvcgpAQCAtNjAsMTAgKzYxLDExIEBACiAgKiBWZXJpZmllcyB0aGF0IHJlZnMgb24gcmVtb3RlIHN0b3JlZCBieSByZWNvcmRfcmVmX2NiIG1hdGNoIHRoZSBleHBlY3RlZAogICogbmFtZXMsIG9pZHMsIGFuZCBvcmRlci4KICAqCi0gKiBAcGFyYW0gYWN0dWFsX3JlZnMgYWN0dWFsIHJlZnMgc3RvcmVkIGJ5IHJlY29yZF9yZWZfY2IoKQorICogQHBhcmFtIGFjdHVhbF9yZWZzIGFjdHVhbCByZWZzIGluIHRoZSByZW1vdGUKKyAqIEBwYXJhbSBhY3R1YWxfcmVmc19sZW4gbGVuZ3RoIG9mIGFjdHVhbF9yZWZzCiAgKiBAcGFyYW0gZXhwZWN0ZWRfcmVmcyBleHBlY3RlZCByZW1vdGUgcmVmcwogICogQHBhcmFtIGV4cGVjdGVkX3JlZnNfbGVuIGxlbmd0aCBvZiBleHBlY3RlZF9yZWZzCiAgKi8KLXZvaWQgdmVyaWZ5X3JlbW90ZV9yZWZzKGdpdF92ZWN0b3IgKmFjdHVhbF9yZWZzLCBjb25zdCBleHBlY3RlZF9yZWYgZXhwZWN0ZWRfcmVmc1tdLCBzaXplX3QgZXhwZWN0ZWRfcmVmc19sZW4pOwordm9pZCB2ZXJpZnlfcmVtb3RlX3JlZnMoY29uc3QgZ2l0X3JlbW90ZV9oZWFkICphY3R1YWxfcmVmc1tdLCBzaXplX3QgYWN0dWFsX3JlZnNfbGVuLCBjb25zdCBleHBlY3RlZF9yZWYgZXhwZWN0ZWRfcmVmc1tdLCBzaXplX3QgZXhwZWN0ZWRfcmVmc19sZW4pOwogCiAjZW5kaWYgLyogSU5DTFVERV9jbF9wdXNoX3V0aWxfaF9fICovCmRpZmYgLS1naXQgYS90ZXN0cy9wYWNrL2luZGV4ZXIuYyBiL3Rlc3RzL3BhY2svaW5kZXhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTYzYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wYWNrL2luZGV4ZXIuYwpAQCAtMCwwICsxLDEyNiBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgPGdpdDIuaD4KKyNpbmNsdWRlICJmaWxlb3BzLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgIml0ZXJhdG9yLmgiCisjaW5jbHVkZSAidmVjdG9yLmgiCisjaW5jbHVkZSAicG9zaXguaCIKKworCisvKgorICogVGhpcyBpcyBhIHBhY2tmaWxlIHdpdGggdGhyZWUgb2JqZWN0cy4gVGhlIHNlY29uZCBpcyBhIGRlbHRhIHdoaWNoCisgKiBkZXBlbmRzIG9uIHRoZSB0aGlyZCwgd2hpY2ggaXMgYWxzbyBhIGRlbHRhLgorICovCit1bnNpZ25lZCBjaGFyIG91dF9vZl9vcmRlcl9wYWNrW10gPSB7CisgIDB4NTAsIDB4NDEsIDB4NDMsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCisgIDB4MzIsIDB4NzgsIDB4OWMsIDB4NjMsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NzYsCisgIDB4ZTYsIDB4OGYsIDB4ZTgsIDB4MTIsIDB4OWIsIDB4NTQsIDB4NmIsIDB4MTAsIDB4MWEsIDB4ZWUsIDB4OTUsIDB4MTAsCisgIDB4YzUsIDB4MzIsIDB4OGUsIDB4N2YsIDB4MjEsIDB4Y2EsIDB4MWQsIDB4MTgsIDB4NzgsIDB4OWMsIDB4NjMsIDB4NjIsCisgIDB4NjYsIDB4NGUsIDB4Y2IsIDB4Y2YsIDB4MDcsIDB4MDAsIDB4MDIsIDB4YWMsIDB4MDEsIDB4NGQsIDB4NzUsIDB4MDEsCisgIDB4ZDcsIDB4NzEsIDB4MzYsIDB4NjYsIDB4ZjQsIDB4ZGUsIDB4ODIsIDB4MjcsIDB4NzYsIDB4YzcsIDB4NjIsIDB4MmMsCisgIDB4MTAsIDB4ZjEsIDB4YjAsIDB4N2QsIDB4ZTIsIDB4ODAsIDB4ZGMsIDB4NzgsIDB4OWMsIDB4NjMsIDB4NjIsIDB4NjIsCisgIDB4NjIsIDB4YjcsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NjksIDB4MDAsIDB4NGMsIDB4ZGUsIDB4N2QsIDB4YWEsIDB4ZTQsCisgIDB4MTksIDB4ODcsIDB4NTgsIDB4ODAsIDB4NjEsIDB4MDksIDB4OWEsIDB4MzMsIDB4Y2EsIDB4N2EsIDB4MzEsIDB4OTIsCisgIDB4NmYsIDB4YWUsIDB4NjYsIDB4NzUKK307Cit1bnNpZ25lZCBpbnQgb3V0X29mX29yZGVyX3BhY2tfbGVuID0gMTEyOworCisvKgorICogUGFja2ZpbGUgd2l0aCB0d28gb2JqZWN0cy4gVGhlIHNlY29uZCBpcyBhIGRlbHRhIGFnYWluc3QgYW4gb2JqZWN0CisgKiB3aGljaCBpcyBub3QgaW4gdGhlIHBhY2tmaWxlCisgKi8KK3Vuc2lnbmVkIGNoYXIgdGhpbl9wYWNrW10gPSB7CisgIDB4NTAsIDB4NDEsIDB4NDMsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCisgIDB4MzIsIDB4NzgsIDB4OWMsIDB4NjMsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NzYsCisgIDB4ZTYsIDB4OGYsIDB4ZTgsIDB4MTIsIDB4OWIsIDB4NTQsIDB4NmIsIDB4MTAsIDB4MWEsIDB4ZWUsIDB4OTUsIDB4MTAsCisgIDB4YzUsIDB4MzIsIDB4OGUsIDB4N2YsIDB4MjEsIDB4Y2EsIDB4MWQsIDB4MTgsIDB4NzgsIDB4OWMsIDB4NjMsIDB4NjIsCisgIDB4NjYsIDB4NGUsIDB4Y2IsIDB4Y2YsIDB4MDcsIDB4MDAsIDB4MDIsIDB4YWMsIDB4MDEsIDB4NGQsIDB4NDIsIDB4NTIsCisgIDB4M2EsIDB4NmYsIDB4MzksIDB4ZDEsIDB4ZmUsIDB4NjYsIDB4NjgsIDB4NmIsIDB4YTUsIDB4ZTUsIDB4ZTIsIDB4OTcsCisgIDB4YWMsIDB4OTQsIDB4NmMsIDB4NzYsIDB4MGIsIDB4MDQKK307Cit1bnNpZ25lZCBpbnQgdGhpbl9wYWNrX2xlbiA9IDc4OworCit1bnNpZ25lZCBjaGFyIGJhc2Vfb2JqW10gPSB7IDA3LCAwNzYgfTsKK3Vuc2lnbmVkIGludCBiYXNlX29ial9sZW4gPSAyOworCit2b2lkIHRlc3RfcGFja19pbmRleGVyX19vdXRfb2Zfb3JkZXIodm9pZCkKK3sKKwlnaXRfaW5kZXhlciAqaWR4OworCWdpdF90cmFuc2Zlcl9wcm9ncmVzcyBzdGF0czsKKworCWNsX2dpdF9wYXNzKGdpdF9pbmRleGVyX25ldygmaWR4LCAiLiIsIDAsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9hcHBlbmQoaWR4LCBvdXRfb2Zfb3JkZXJfcGFjaywgb3V0X29mX29yZGVyX3BhY2tfbGVuLCAmc3RhdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9jb21taXQoaWR4LCAmc3RhdHMpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLnRvdGFsX29iamVjdHMsIDMpOworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLnJlY2VpdmVkX29iamVjdHMsIDMpOworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLmluZGV4ZWRfb2JqZWN0cywgMyk7CisKKwlnaXRfaW5kZXhlcl9mcmVlKGlkeCk7Cit9CisKK3ZvaWQgdGVzdF9wYWNrX2luZGV4ZXJfX2ZpeF90aGluKHZvaWQpCit7CisJZ2l0X2luZGV4ZXIgKmlkeDsKKwlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3Mgc3RhdHM7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJZ2l0X29kYiAqb2RiOworCWdpdF9vaWQgaWQsIHNob3VsZF9pZDsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luaXQoJnJlcG8sICJ0aGluLmdpdCIsIHRydWUpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vZGIoJm9kYiwgcmVwbykpOworCisJLyogU3RvcmUgdGhlIG1pc3NpbmcgYmFzZSBpbnRvIHlvdXIgT0RCIHNvIHRoZSBpbmRleGVyIGNhbiBmaXggdGhlIHBhY2sgKi8KKwljbF9naXRfcGFzcyhnaXRfb2RiX3dyaXRlKCZpZCwgb2RiLCBiYXNlX29iaiwgYmFzZV9vYmpfbGVuLCBHSVRfT0JKX0JMT0IpKTsKKwlnaXRfb2lkX2Zyb21zdHIoJnNob3VsZF9pZCwgImU2OGZlODEyOWI1NDZiMTAxYWVlOTUxMGM1MzI4ZTdmMjFjYTFkMTgiKTsKKwljbF9hc3NlcnQoIWdpdF9vaWRfY21wKCZpZCwgJnNob3VsZF9pZCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfbmV3KCZpZHgsICIuIiwgMCwgb2RiLCBOVUxMLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfYXBwZW5kKGlkeCwgdGhpbl9wYWNrLCB0aGluX3BhY2tfbGVuLCAmc3RhdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9jb21taXQoaWR4LCAmc3RhdHMpKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLnRvdGFsX29iamVjdHMsIDIpOworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLnJlY2VpdmVkX29iamVjdHMsIDIpOworCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLmluZGV4ZWRfb2JqZWN0cywgMik7CisJY2xfYXNzZXJ0X2VxdWFsX2koc3RhdHMubG9jYWxfb2JqZWN0cywgMSk7CisKKwlnaXRfb2lkX2Zyb21zdHIoJnNob3VsZF9pZCwgIjExZjBmNjliMzM0NzI4ZmRkOGJjODZiODA0OTlmMjJmMjlkODViMTUiKTsKKwljbF9hc3NlcnQoIWdpdF9vaWRfY21wKGdpdF9pbmRleGVyX2hhc2goaWR4KSwgJnNob3VsZF9pZCkpOworCisJZ2l0X2luZGV4ZXJfZnJlZShpZHgpOworCWdpdF9vZGJfZnJlZShvZGIpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisKKwkvKgorCSAqIFRoZSBwYWNrJ3MgbmFtZS9oYXNoIG9ubHkgdGVsbHMgdXMgd2hhdCBvYmplY3RzIHRoZXJlIGFyZSwKKwkgKiBzbyB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHBhY2tmaWxlIGFnYWluIGluIG9yZGVyIHRvCisJICogZmlndXJlIG91dCB3aGV0aGVyIHdlIGNhbGN1bGF0ZWQgdGhlIHRyYWlsZXIgY29ycmVjdGx5LgorCSAqLworCXsKKwkJdW5zaWduZWQgY2hhciBidWZmZXJbMTI4XTsKKwkJaW50IGZkOworCQlzc2l6ZV90IHJlYWQ7CisJCXN0cnVjdCBzdGF0IHN0OworCQljb25zdCBjaGFyICpuYW1lID0gInBhY2stMTFmMGY2OWIzMzQ3MjhmZGQ4YmM4NmI4MDQ5OWYyMmYyOWQ4NWIxNS5wYWNrIjsKKworCQlmZCA9IHBfb3BlbihuYW1lLCBPX1JET05MWSk7CisJCWNsX2Fzc2VydChmZCAhPSAtMSk7CisKKwkJY2xfZ2l0X3Bhc3MocF9zdGF0KG5hbWUsICZzdCkpOworCisJCWNsX2dpdF9wYXNzKGdpdF9pbmRleGVyX25ldygmaWR4LCAiLiIsIDAsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKwkJcmVhZCA9IHBfcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWNsX2Fzc2VydChyZWFkICE9IC0xKTsKKwkJcF9jbG9zZShmZCk7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfYXBwZW5kKGlkeCwgYnVmZmVyLCByZWFkLCAmc3RhdHMpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfY29tbWl0KGlkeCwgJnN0YXRzKSk7CisKKwkJY2xfYXNzZXJ0X2VxdWFsX2koc3RhdHMudG90YWxfb2JqZWN0cywgMyk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXRzLnJlY2VpdmVkX29iamVjdHMsIDMpOworCQljbF9hc3NlcnRfZXF1YWxfaShzdGF0cy5pbmRleGVkX29iamVjdHMsIDMpOworCQljbF9hc3NlcnRfZXF1YWxfaShzdGF0cy5sb2NhbF9vYmplY3RzLCAwKTsKKworCQlnaXRfaW5kZXhlcl9mcmVlKGlkeCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9wYWNrL3BhY2tidWlsZGVyLmMgYi90ZXN0cy9wYWNrL3BhY2tidWlsZGVyLmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9wYWNrL3BhY2tidWlsZGVyLmMKcmVuYW1lIHRvIHRlc3RzL3BhY2svcGFja2J1aWxkZXIuYwppbmRleCA3NjRmYmEyLi4xYWUyMzIyIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3BhY2svcGFja2J1aWxkZXIuYworKysgYi90ZXN0cy9wYWNrL3BhY2tidWlsZGVyLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCiAjaW5jbHVkZSAiZmlsZW9wcy5oIgorI2luY2x1ZGUgInBhY2suaCIKICNpbmNsdWRlICJoYXNoLmgiCiAjaW5jbHVkZSAiaXRlcmF0b3IuaCIKICNpbmNsdWRlICJ2ZWN0b3IuaCIKQEAgLTgsNyArOSw3IEBACiBzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKl9yZXBvOwogc3RhdGljIGdpdF9yZXZ3YWxrICpfcmV2d2Fsa2VyOwogc3RhdGljIGdpdF9wYWNrYnVpbGRlciAqX3BhY2tidWlsZGVyOwotc3RhdGljIGdpdF9pbmRleGVyX3N0cmVhbSAqX2luZGV4ZXI7CitzdGF0aWMgZ2l0X2luZGV4ZXIgKl9pbmRleGVyOwogc3RhdGljIGdpdF92ZWN0b3IgX2NvbW1pdHM7CiBzdGF0aWMgaW50IF9jb21taXRzX2lzX2luaXRpYWxpemVkOwogCkBAIC00MCw3ICs0MSw3IEBACiAJZ2l0X3JldndhbGtfZnJlZShfcmV2d2Fsa2VyKTsKIAlfcmV2d2Fsa2VyID0gTlVMTDsKIAotCWdpdF9pbmRleGVyX3N0cmVhbV9mcmVlKF9pbmRleGVyKTsKKwlnaXRfaW5kZXhlcl9mcmVlKF9pbmRleGVyKTsKIAlfaW5kZXhlciA9IE5VTEw7CiAKIAljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7CkBAIC03OSw3ICs4MCw3IEBACiB7CiAJZ2l0X3RyYW5zZmVyX3Byb2dyZXNzICpzdGF0cyA9IChnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKilwYXlsb2FkOwogCi0JcmV0dXJuIGdpdF9pbmRleGVyX3N0cmVhbV9hZGQoX2luZGV4ZXIsIHB0ciwgbGVuLCBzdGF0cyk7CisJcmV0dXJuIGdpdF9pbmRleGVyX2FwcGVuZChfaW5kZXhlciwgcHRyLCBsZW4sIHN0YXRzKTsKIH0KIAogdm9pZCB0ZXN0X3BhY2tfcGFja2J1aWxkZXJfX2NyZWF0ZV9wYWNrKHZvaWQpCkBAIC05MiwxMSArOTMsMTEgQEAKIAogCXNlZWRfcGFja2J1aWxkZXIoKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9pbmRleGVyX3N0cmVhbV9uZXcoJl9pbmRleGVyLCAiLiIsIE5VTEwsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9uZXcoJl9pbmRleGVyLCAiLiIsIDAsIE5VTEwsIE5VTEwsIE5VTEwpKTsKIAljbF9naXRfcGFzcyhnaXRfcGFja2J1aWxkZXJfZm9yZWFjaChfcGFja2J1aWxkZXIsIGZlZWRfaW5kZXhlciwgJnN0YXRzKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfc3RyZWFtX2ZpbmFsaXplKF9pbmRleGVyLCAmc3RhdHMpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9jb21taXQoX2luZGV4ZXIsICZzdGF0cykpOwogCi0JZ2l0X29pZF9mbXQoaGV4LCBnaXRfaW5kZXhlcl9zdHJlYW1faGFzaChfaW5kZXhlcikpOworCWdpdF9vaWRfZm10KGhleCwgZ2l0X2luZGV4ZXJfaGFzaChfaW5kZXhlcikpOwogCWdpdF9idWZfcHJpbnRmKCZwYXRoLCAicGFjay0lcy5wYWNrIiwgaGV4KTsKIAogCS8qCkBAIC0xMDUsNyArMTA2LDcgQEAKIAkgKiB3ZSBjcmVhdGUgZXhhY3RseSB0aGUgc2FtZSBwYWNrIGFzIGdpdC5naXQgZG9lcyB3aGVuICpub3QqCiAJICogcmV1c2luZyBleGlzdGluZyBkZWx0YXMgKGFzIGxpYmdpdDIpLgogCSAqCi0JICogJCBjZCB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQKKwkgKiAkIGNkIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQKIAkgKiAkIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCB8IFwKIAkgKiAJZ2l0IHBhY2stb2JqZWN0cyAtcSAtLW5vLXJldXNlLWRlbHRhIC0tdGhyZWFkcz0xIHBhY2sKIAkgKiAkIHNoYTFzdW0gZ2l0LTgwZTYxZWIzMTUyMzllZjNjNTMwMzNlMzdmZWU0M2I3NDRkNTcxMjIucGFjawpAQCAtMTI4LDIxICsxMjksNzYgQEAKIAljbF9hc3NlcnRfZXF1YWxfcyhoZXgsICI1ZDQxMGJkZjk3Y2Y4OTZmOTAwNzY4MWI5Mjg2ODQ3MWQ2MzY5NTRiIik7CiB9CiAKK3ZvaWQgdGVzdF9wYWNrX3BhY2tidWlsZGVyX19nZXRfaGFzaCh2b2lkKQoreworCWNoYXIgaGV4WzQxXTsgaGV4WzQwXSA9ICdcMCc7CisKKwlzZWVkX3BhY2tidWlsZGVyKCk7CisKKwlnaXRfcGFja2J1aWxkZXJfd3JpdGUoX3BhY2tidWlsZGVyLCAiLiIsIDAsIE5VTEwsIE5VTEwpOworCWdpdF9vaWRfZm10KGhleCwgZ2l0X3BhY2tidWlsZGVyX2hhc2goX3BhY2tidWlsZGVyKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfcyhoZXgsICI4MGU2MWViMzE1MjM5ZWYzYzUzMDMzZTM3ZmVlNDNiNzQ0ZDU3MTIyIik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rfd3JpdGVfcGFja19wZXJtaXNzaW9uKG1vZGVfdCBnaXZlbiwgbW9kZV90IGV4cGVjdGVkKQoreworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJbW9kZV90IG1hc2ssIG9zX21hc2s7CisKKwlzZWVkX3BhY2tidWlsZGVyKCk7CisKKwlnaXRfcGFja2J1aWxkZXJfd3JpdGUoX3BhY2tidWlsZGVyLCAiLiIsIGdpdmVuLCBOVUxMLCBOVUxMKTsKKworCS8qIFdpbmRvd3MgZG9lcyBub3QgcmV0dXJuIGdyb3VwL3VzZXIgYml0cyBmcm9tIHN0YXQsCisJKiBmaWxlcyBhcmUgbmV2ZXIgZXhlY3V0YWJsZS4KKwkqLworI2lmZGVmIEdJVF9XSU4zMgorCW9zX21hc2sgPSAwNjAwOworI2Vsc2UKKwlvc19tYXNrID0gMDc3NzsKKyNlbmRpZgorCisJbWFzayA9IHBfdW1hc2soMCk7CisJcF91bWFzayhtYXNrKTsKKworCWNsX2dpdF9wYXNzKHBfc3RhdCgicGFjay04MGU2MWViMzE1MjM5ZWYzYzUzMDMzZTM3ZmVlNDNiNzQ0ZDU3MTIyLmlkeCIsICZzdGF0YnVmKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koc3RhdGJ1Zi5zdF9tb2RlICYgb3NfbWFzaywgKGV4cGVjdGVkICYgfm1hc2spICYgb3NfbWFzayk7CisKKwljbF9naXRfcGFzcyhwX3N0YXQoInBhY2stODBlNjFlYjMxNTIzOWVmM2M1MzAzM2UzN2ZlZTQzYjc0NGQ1NzEyMi5wYWNrIiwgJnN0YXRidWYpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShzdGF0YnVmLnN0X21vZGUgJiBvc19tYXNrLCAoZXhwZWN0ZWQgJiB+bWFzaykgJiBvc19tYXNrKTsKK30KKwordm9pZCB0ZXN0X3BhY2tfcGFja2J1aWxkZXJfX3Blcm1pc3Npb25zX3N0YW5kYXJkKHZvaWQpCit7CisJdGVzdF93cml0ZV9wYWNrX3Blcm1pc3Npb24oMCwgR0lUX1BBQ0tfRklMRV9NT0RFKTsKK30KKwordm9pZCB0ZXN0X3BhY2tfcGFja2J1aWxkZXJfX3Blcm1pc3Npb25zX3JlYWRvbmx5KHZvaWQpCit7CisJdGVzdF93cml0ZV9wYWNrX3Blcm1pc3Npb24oMDQ0NCwgMDQ0NCk7Cit9CisKK3ZvaWQgdGVzdF9wYWNrX3BhY2tidWlsZGVyX19wZXJtaXNzaW9uc19yZWFkd3JpdGUodm9pZCkKK3sKKwl0ZXN0X3dyaXRlX3BhY2tfcGVybWlzc2lvbigwNjY2LCAwNjY2KTsKK30KKwogc3RhdGljIGdpdF90cmFuc2Zlcl9wcm9ncmVzcyBzdGF0czsKIHN0YXRpYyBpbnQgZm9yZWFjaF9jYih2b2lkICpidWYsIHNpemVfdCBsZW4sIHZvaWQgKnBheWxvYWQpCiB7Ci0JZ2l0X2luZGV4ZXJfc3RyZWFtICppZHggPSAoZ2l0X2luZGV4ZXJfc3RyZWFtICopIHBheWxvYWQ7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfc3RyZWFtX2FkZChpZHgsIGJ1ZiwgbGVuLCAmc3RhdHMpKTsKKwlnaXRfaW5kZXhlciAqaWR4ID0gKGdpdF9pbmRleGVyICopIHBheWxvYWQ7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfYXBwZW5kKGlkeCwgYnVmLCBsZW4sICZzdGF0cykpOwogCXJldHVybiAwOwogfQogCiB2b2lkIHRlc3RfcGFja19wYWNrYnVpbGRlcl9fZm9yZWFjaCh2b2lkKQogewotCWdpdF9pbmRleGVyX3N0cmVhbSAqaWR4OworCWdpdF9pbmRleGVyICppZHg7CiAKIAlzZWVkX3BhY2tidWlsZGVyKCk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4ZXJfc3RyZWFtX25ldygmaWR4LCAiLiIsIE5VTEwsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9uZXcoJmlkeCwgIi4iLCAwLCBOVUxMLCBOVUxMLCBOVUxMKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3BhY2tidWlsZGVyX2ZvcmVhY2goX3BhY2tidWlsZGVyLCBmb3JlYWNoX2NiLCBpZHgpKTsKLQljbF9naXRfcGFzcyhnaXRfaW5kZXhlcl9zdHJlYW1fZmluYWxpemUoaWR4LCAmc3RhdHMpKTsKLQlnaXRfaW5kZXhlcl9zdHJlYW1fZnJlZShpZHgpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleGVyX2NvbW1pdChpZHgsICZzdGF0cykpOworCWdpdF9pbmRleGVyX2ZyZWUoaWR4KTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9icmFuY2hlcy9jcmVhdGUuYyBiL3Rlc3RzL3JlZnMvYnJhbmNoZXMvY3JlYXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9icmFuY2hlcy9jcmVhdGUuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9icmFuY2hlcy9jcmVhdGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2RlbGV0ZS5jIGIvdGVzdHMvcmVmcy9icmFuY2hlcy9kZWxldGUuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvZGVsZXRlLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvYnJhbmNoZXMvZGVsZXRlLmMKaW5kZXggN2FmNWEzZS4uZGU5MGNiNyAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2RlbGV0ZS5jCisrKyBiL3Rlc3RzL3JlZnMvYnJhbmNoZXMvZGVsZXRlLmMKQEAgLTU3LDExICs1NywxMSBAQAogCWdpdF9yZWZlcmVuY2VfZnJlZShicmFuY2gpOwogfQogCi12b2lkIHRlc3RfcmVmc19icmFuY2hlc19kZWxldGVfX2Nhbl9kZWxldGVfYV9icmFuY2hfd2hlbl9IRUFEX2lzX29ycGhhbmVkKHZvaWQpCit2b2lkIHRlc3RfcmVmc19icmFuY2hlc19kZWxldGVfX2Nhbl9kZWxldGVfYV9icmFuY2hfd2hlbl9IRUFEX2lzX3VuYm9ybih2b2lkKQogewogCWdpdF9yZWZlcmVuY2UgKmJyYW5jaDsKIAotCW1ha2VfaGVhZF9vcnBoYW5lZChyZXBvLCBOT05fRVhJU1RJTkdfSEVBRCk7CisJbWFrZV9oZWFkX3VuYm9ybihyZXBvLCBOT05fRVhJU1RJTkdfSEVBRCk7CiAKIAljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2xvb2t1cCgmYnJhbmNoLCByZXBvLCAiYnIyIiwgR0lUX0JSQU5DSF9MT0NBTCkpOwogCWNsX2dpdF9wYXNzKGdpdF9icmFuY2hfZGVsZXRlKGJyYW5jaCkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2lzaGVhZC5jIGIvdGVzdHMvcmVmcy9icmFuY2hlcy9pc2hlYWQuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvaXNoZWFkLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvYnJhbmNoZXMvaXNoZWFkLmMKaW5kZXggZGZjZjFiNS4uYjFhZDA5YyAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2lzaGVhZC5jCisrKyBiL3Rlc3RzL3JlZnMvYnJhbmNoZXMvaXNoZWFkLmMKQEAgLTI2LDEzICsyNiwxMyBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIGdpdF9icmFuY2hfaXNfaGVhZChicmFuY2gpKTsKIH0KIAotdm9pZCB0ZXN0X3JlZnNfYnJhbmNoZXNfaXNoZWFkX19jYW5fcHJvcGVybHlfaGFuZGxlX29ycGhhbmVkX0hFQUQodm9pZCkKK3ZvaWQgdGVzdF9yZWZzX2JyYW5jaGVzX2lzaGVhZF9fY2FuX3Byb3Blcmx5X2hhbmRsZV91bmJvcm5fSEVBRCh2b2lkKQogewogCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CiAKIAlyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8uZ2l0Iik7CiAKLQltYWtlX2hlYWRfb3JwaGFuZWQocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOworCW1ha2VfaGVhZF91bmJvcm4ocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJmJyYW5jaCwgcmVwbywgInJlZnMvaGVhZHMvbWFzdGVyIikpOwogCmRpZmYgLS1naXQgYS90ZXN0cy9yZWZzL2JyYW5jaGVzL2l0ZXJhdG9yLmMgYi90ZXN0cy9yZWZzL2JyYW5jaGVzL2l0ZXJhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0YzZhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JlZnMvYnJhbmNoZXMvaXRlcmF0b3IuYwpAQCAtMCwwICsxLDE1MSBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpyZXBvOworc3RhdGljIGdpdF9yZWZlcmVuY2UgKmZha2VfcmVtb3RlOworCit2b2lkIHRlc3RfcmVmc19icmFuY2hlc19pdGVyYXRvcl9faW5pdGlhbGl6ZSh2b2lkKQoreworCWdpdF9vaWQgaWQ7CisKKwljbF9maXh0dXJlX3NhbmRib3goInRlc3RyZXBvLmdpdCIpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8sICJ0ZXN0cmVwby5naXQiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmlkLCAiYmUzNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NCIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2NyZWF0ZSgmZmFrZV9yZW1vdGUsIHJlcG8sICJyZWZzL3JlbW90ZXMvbnVsbHRva2VuL21hc3RlciIsICZpZCwgMCkpOworfQorCit2b2lkIHRlc3RfcmVmc19icmFuY2hlc19pdGVyYXRvcl9fY2xlYW51cCh2b2lkKQoreworCWdpdF9yZWZlcmVuY2VfZnJlZShmYWtlX3JlbW90ZSk7CisJZmFrZV9yZW1vdGUgPSBOVUxMOworCisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKKwlyZXBvID0gTlVMTDsKKworCWNsX2ZpeHR1cmVfY2xlYW51cCgidGVzdHJlcG8uZ2l0Iik7CisKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9yZXRyaWV2YWwodW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfY291bnQpCit7CisJZ2l0X2JyYW5jaF9pdGVyYXRvciAqaXRlcjsKKwlnaXRfcmVmZXJlbmNlICpyZWY7CisJaW50IGNvdW50ID0gMCwgZXJyb3I7CisJZ2l0X2JyYW5jaF90IHR5cGU7CisKKwljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2l0ZXJhdG9yX25ldygmaXRlciwgcmVwbywgZmxhZ3MpKTsKKwl3aGlsZSAoKGVycm9yID0gZ2l0X2JyYW5jaF9uZXh0KCZyZWYsICZ0eXBlLCBpdGVyKSkgPT0gMCkgeworCQljb3VudCsrOworCQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKKwl9CisKKwlnaXRfYnJhbmNoX2l0ZXJhdG9yX2ZyZWUoaXRlcik7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXJyb3IsIEdJVF9JVEVST1ZFUik7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfY291bnQsIGNvdW50KTsKK30KKwordm9pZCB0ZXN0X3JlZnNfYnJhbmNoZXNfaXRlcmF0b3JfX3JldHJpZXZlX2FsbF9icmFuY2hlcyh2b2lkKQoreworCWFzc2VydF9yZXRyaWV2YWwoR0lUX0JSQU5DSF9MT0NBTCB8IEdJVF9CUkFOQ0hfUkVNT1RFLCAxNCk7Cit9CisKK3ZvaWQgdGVzdF9yZWZzX2JyYW5jaGVzX2l0ZXJhdG9yX19yZXRyaWV2ZV9yZW1vdGVfYnJhbmNoZXModm9pZCkKK3sKKwlhc3NlcnRfcmV0cmlldmFsKEdJVF9CUkFOQ0hfUkVNT1RFLCAyKTsKK30KKwordm9pZCB0ZXN0X3JlZnNfYnJhbmNoZXNfaXRlcmF0b3JfX3JldHJpZXZlX2xvY2FsX2JyYW5jaGVzKHZvaWQpCit7CisJYXNzZXJ0X3JldHJpZXZhbChHSVRfQlJBTkNIX0xPQ0FMLCAxMik7Cit9CisKK3N0cnVjdCBleHBlY3RhdGlvbnMgeworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCWludCBlbmNvdW50ZXJzOworfTsKKworc3RhdGljIHZvaWQgYXNzZXJ0X2JyYW5jaF9oYXNfYmVlbl9mb3VuZChzdHJ1Y3QgZXhwZWN0YXRpb25zICpmaW5kaW5ncywgY29uc3QgY2hhciogZXhwZWN0ZWRfYnJhbmNoX25hbWUpCit7CisJaW50IHBvcyA9IDA7CisKKwlmb3IgKHBvcyA9IDA7IGZpbmRpbmdzW3Bvc10uYnJhbmNoX25hbWU7ICsrcG9zKSB7CisJCWlmIChzdHJjbXAoZXhwZWN0ZWRfYnJhbmNoX25hbWUsIGZpbmRpbmdzW3Bvc10uYnJhbmNoX25hbWUpID09IDApIHsKKwkJCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGZpbmRpbmdzW3Bvc10uZW5jb3VudGVycyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwljbF9mYWlsKCJleHBlY3RlZCBicmFuY2ggbm90IGZvdW5kIGluIGxpc3QuIik7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRhaW5zX2JyYW5jaGVzKHN0cnVjdCBleHBlY3RhdGlvbnMgZXhwW10sIGdpdF9icmFuY2hfaXRlcmF0b3IgKml0ZXIpCit7CisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCWdpdF9icmFuY2hfdCB0eXBlOworCWludCBlcnJvciwgcG9zID0gMDsKKworCXdoaWxlICgoZXJyb3IgPSBnaXRfYnJhbmNoX25leHQoJnJlZiwgJnR5cGUsIGl0ZXIpKSA9PSAwKSB7CisJCWZvciAocG9zID0gMDsgZXhwW3Bvc10uYnJhbmNoX25hbWU7ICsrcG9zKSB7CisJCQlpZiAoc3RyY21wKGdpdF9yZWZlcmVuY2Vfc2hvcnRoYW5kKHJlZiksIGV4cFtwb3NdLmJyYW5jaF9uYW1lKSA9PSAwKQorCQkJCWV4cFtwb3NdLmVuY291bnRlcnMrKzsKKwkJfQorCisJCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworCX0KKworCWNsX2Fzc2VydF9lcXVhbF9pKGVycm9yLCBHSVRfSVRFUk9WRVIpOworfQorCisvKgorICogJCBnaXQgYnJhbmNoIC1yCisgKiAgbnVsbHRva2VuL0hFQUQgLT4gbnVsbHRva2VuL21hc3RlcgorICogIG51bGx0b2tlbi9tYXN0ZXIKKyAqLwordm9pZCB0ZXN0X3JlZnNfYnJhbmNoZXNfaXRlcmF0b3JfX3JldHJpZXZlX3JlbW90ZV9zeW1ib2xpY19IRUFEX3doZW5fcHJlc2VudCh2b2lkKQoreworCWdpdF9icmFuY2hfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IGV4cGVjdGF0aW9ucyBleHBbXSA9IHsKKwkJeyAibnVsbHRva2VuL0hFQUQiLCAwIH0sCisJCXsgIm51bGx0b2tlbi9tYXN0ZXIiLCAwIH0sCisJCXsgTlVMTCwgMCB9CisJfTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShmYWtlX3JlbW90ZSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY19jcmVhdGUoJmZha2VfcmVtb3RlLCByZXBvLCAicmVmcy9yZW1vdGVzL251bGx0b2tlbi9IRUFEIiwgInJlZnMvcmVtb3Rlcy9udWxsdG9rZW4vbWFzdGVyIiwgMCkpOworCisJYXNzZXJ0X3JldHJpZXZhbChHSVRfQlJBTkNIX1JFTU9URSwgMyk7CisKKwljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2l0ZXJhdG9yX25ldygmaXRlciwgcmVwbywgR0lUX0JSQU5DSF9SRU1PVEUpKTsKKwljb250YWluc19icmFuY2hlcyhleHAsIGl0ZXIpOworCWdpdF9icmFuY2hfaXRlcmF0b3JfZnJlZShpdGVyKTsKKworCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAibnVsbHRva2VuL0hFQUQiKTsKKwlhc3NlcnRfYnJhbmNoX2hhc19iZWVuX2ZvdW5kKGV4cCwgIm51bGx0b2tlbi9tYXN0ZXIiKTsKK30KKwordm9pZCB0ZXN0X3JlZnNfYnJhbmNoZXNfaXRlcmF0b3JfX21peF9vZl9wYWNrZWRfYW5kX2xvb3NlKHZvaWQpCit7CisJZ2l0X2JyYW5jaF9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3QgZXhwZWN0YXRpb25zIGV4cFtdID0geworCQl7ICJtYXN0ZXIiLCAwIH0sCisJCXsgIm9yaWdpbi9IRUFEIiwgMCB9LAorCQl7ICJvcmlnaW4vbWFzdGVyIiwgMCB9LAorCQl7ICJvcmlnaW4vcGFja2VkIiwgMCB9LAorCQl7IE5VTEwsIDAgfQorCX07CisJZ2l0X3JlcG9zaXRvcnkgKnIyOworCisJcjIgPSBjbF9naXRfc2FuZGJveF9pbml0KCJ0ZXN0cmVwbzIiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9icmFuY2hfaXRlcmF0b3JfbmV3KCZpdGVyLCByMiwgR0lUX0JSQU5DSF9MT0NBTCB8IEdJVF9CUkFOQ0hfUkVNT1RFKSk7CisJY29udGFpbnNfYnJhbmNoZXMoZXhwLCBpdGVyKTsKKworCWdpdF9icmFuY2hfaXRlcmF0b3JfZnJlZShpdGVyKTsKKworCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAibWFzdGVyIik7CisJYXNzZXJ0X2JyYW5jaF9oYXNfYmVlbl9mb3VuZChleHAsICJvcmlnaW4vSEVBRCIpOworCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAib3JpZ2luL21hc3RlciIpOworCWFzc2VydF9icmFuY2hfaGFzX2JlZW5fZm91bmQoZXhwLCAib3JpZ2luL3BhY2tlZCIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2xvb2t1cC5jIGIvdGVzdHMvcmVmcy9icmFuY2hlcy9sb29rdXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL2JyYW5jaGVzL2xvb2t1cC5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL2JyYW5jaGVzL2xvb2t1cC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvbW92ZS5jIGIvdGVzdHMvcmVmcy9icmFuY2hlcy9tb3ZlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9icmFuY2hlcy9tb3ZlLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvYnJhbmNoZXMvbW92ZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvbmFtZS5jIGIvdGVzdHMvcmVmcy9icmFuY2hlcy9uYW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9icmFuY2hlcy9uYW1lLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvYnJhbmNoZXMvbmFtZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvcmVtb3RlLmMgYi90ZXN0cy9yZWZzL2JyYW5jaGVzL3JlbW90ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvcmVtb3RlLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvYnJhbmNoZXMvcmVtb3RlLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9icmFuY2hlcy91cHN0cmVhbS5jIGIvdGVzdHMvcmVmcy9icmFuY2hlcy91cHN0cmVhbS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvdXBzdHJlYW0uYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9icmFuY2hlcy91cHN0cmVhbS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvdXBzdHJlYW1uYW1lLmMgYi90ZXN0cy9yZWZzL2JyYW5jaGVzL3Vwc3RyZWFtbmFtZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvYnJhbmNoZXMvdXBzdHJlYW1uYW1lLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvYnJhbmNoZXMvdXBzdHJlYW1uYW1lLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9jcmFzaGVzLmMgYi90ZXN0cy9yZWZzL2NyYXNoZXMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL2NyYXNoZXMuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9jcmFzaGVzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9jcmVhdGUuYyBiL3Rlc3RzL3JlZnMvY3JlYXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9jcmVhdGUuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9jcmVhdGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL2RlbGV0ZS5jIGIvdGVzdHMvcmVmcy9kZWxldGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL2RlbGV0ZS5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL2RlbGV0ZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvZm9yZWFjaGdsb2IuYyBiL3Rlc3RzL3JlZnMvZm9yZWFjaGdsb2IuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL2ZvcmVhY2hnbG9iLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvZm9yZWFjaGdsb2IuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL2lzdmFsaWRuYW1lLmMgYi90ZXN0cy9yZWZzL2lzdmFsaWRuYW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9pc3ZhbGlkbmFtZS5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL2lzdmFsaWRuYW1lLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9pdGVyYXRvci5jIGIvdGVzdHMvcmVmcy9pdGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvaXRlcmF0b3IuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9pdGVyYXRvci5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvbGlzdC5jIGIvdGVzdHMvcmVmcy9saXN0LmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL2xpc3QuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9saXN0LmMKaW5kZXggYzljMmFmNC4uZGU1YzBmZCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZWZzL2xpc3QuYworKysgYi90ZXN0cy9yZWZzL2xpc3QuYwpAQCAtMzYsNyArMzYsNyBAQAogCS8qIFdlIGhhdmUgZXhhY3RseSAxMiByZWZzIGluIHRvdGFsIGlmIHdlIGluY2x1ZGUgdGhlIHBhY2tlZCBvbmVzOgogCSAqIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRoYXQgZXhpc3RzIGJvdGggaW4gdGhlIHBhY2tmaWxlIGFuZCBhcwogCSAqIGxvb3NlLCBidXQgd2Ugb25seSBsaXN0IGl0IG9uY2UgKi8KLQljbF9hc3NlcnRfZXF1YWxfaSgoaW50KXJlZl9saXN0LmNvdW50LCAxMyk7CisJY2xfYXNzZXJ0X2VxdWFsX2koKGludClyZWZfbGlzdC5jb3VudCwgMTQpOwogCiAJZ2l0X3N0cmFycmF5X2ZyZWUoJnJlZl9saXN0KTsKIH0KQEAgLTUxLDcgKzUxLDcgQEAKIAkJIjE0NDM0NDA0M2JhNGQ0YTQwNWRhMDNkZTM4NDRhYTgyOWFlOGJlMGVcbiIpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9saXN0KCZyZWZfbGlzdCwgZ19yZXBvKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koKGludClyZWZfbGlzdC5jb3VudCwgMTMpOworCWNsX2Fzc2VydF9lcXVhbF9pKChpbnQpcmVmX2xpc3QuY291bnQsIDE0KTsKIAogCWdpdF9zdHJhcnJheV9mcmVlKCZyZWZfbGlzdCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvbGlzdGFsbC5jIGIvdGVzdHMvcmVmcy9saXN0YWxsLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9saXN0YWxsLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvbGlzdGFsbC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvbG9va3VwLmMgYi90ZXN0cy9yZWZzL2xvb2t1cC5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9sb29rdXAuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9sb29rdXAuYwppbmRleCAwZGJlYmM1Li4yZTMxY2YwIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3JlZnMvbG9va3VwLmMKKysrIGIvdGVzdHMvcmVmcy9sb29rdXAuYwpAQCAtNDYsMyArNDYsMTUgQEAKIAljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmV4cGVjdGVkLCAiMTM4NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOCIpKTsKIAljbF9hc3NlcnQoZ2l0X29pZF9jbXAoJnRhZywgJmV4cGVjdGVkKSA9PSAwKTsKIH0KKwordm9pZCB0ZXN0X3JlZnNfbG9va3VwX19uYW1lc3BhY2Uodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCisJZXJyb3IgPSBnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCBnX3JlcG8sICJyZWZzL2hlYWRzIik7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXJyb3IsIEdJVF9FTk9URk9VTkQpOworCisJZXJyb3IgPSBnaXRfcmVmZXJlbmNlX2xvb2t1cCgmcmVmLCBnX3JlcG8sICJyZWZzL2hlYWRzLyIpOworCWNsX2Fzc2VydF9lcXVhbF9pKGVycm9yLCBHSVRfRUlOVkFMSURTUEVDKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9ub3JtYWxpemUuYyBiL3Rlc3RzL3JlZnMvbm9ybWFsaXplLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9ub3JtYWxpemUuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9ub3JtYWxpemUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL292ZXJ3cml0ZS5jIGIvdGVzdHMvcmVmcy9vdmVyd3JpdGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL292ZXJ3cml0ZS5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL292ZXJ3cml0ZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvcGFjay5jIGIvdGVzdHMvcmVmcy9wYWNrLmMKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL3BhY2suYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9wYWNrLmMKaW5kZXggZDhkNWNjNi4uODQ5YTA1MiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZWZzL3BhY2suYworKysgYi90ZXN0cy9yZWZzL3BhY2suYwpAQCAtMzIsNyArMzIsNyBAQAogCiB2b2lkIHRlc3RfcmVmc19wYWNrX19lbXB0eSh2b2lkKQogewotICAgLy8gY3JlYXRlIGEgcGFja2ZpbGUgZm9yIGFuIGVtcHR5IGZvbGRlcgorCS8qIGNyZWF0ZSBhIHBhY2tmaWxlIGZvciBhbiBlbXB0eSBmb2xkZXIgKi8KIAlnaXRfYnVmIHRlbXBfcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAogCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbl9uKCZ0ZW1wX3BhdGgsICcvJywgMywgZ2l0X3JlcG9zaXRvcnlfcGF0aChnX3JlcG8pLCBHSVRfUkVGU19IRUFEU19ESVIsICJlbXB0eV9kaXIiKSk7CkBAIC00NCw3ICs0NCw3IEBACiAKIHZvaWQgdGVzdF9yZWZzX3BhY2tfX2xvb3NlKHZvaWQpCiB7Ci0gICAvLyBjcmVhdGUgYSBwYWNrZmlsZSBmcm9tIGFsbCB0aGUgbG9vc2Ugcm4gYSByZXBvCisJLyogY3JlYXRlIGEgcGFja2ZpbGUgZnJvbSBhbGwgdGhlIGxvb3NlIHJlZnMgaW4gYSByZXBvICovCiAJZ2l0X3JlZmVyZW5jZSAqcmVmZXJlbmNlOwogCWdpdF9idWYgdGVtcF9wYXRoID0gR0lUX0JVRl9JTklUOwogCkBAIC03NywzICs3NywyOSBAQAogCWdpdF9yZWZlcmVuY2VfZnJlZShyZWZlcmVuY2UpOwogCWdpdF9idWZfZnJlZSgmdGVtcF9wYXRoKTsKIH0KKwordm9pZCB0ZXN0X3JlZnNfcGFja19fc3ltYm9saWModm9pZCkKK3sKKwkvKiBjcmVhdGUgYSBwYWNrZmlsZSBmcm9tIGxvb3NlIHJlZnMgc2tpcHBpbmcgc3ltYm9saWMgcmVmcyAqLworCWludCBpOworCWdpdF9vaWQgaGVhZDsKKwlnaXRfcmVmZXJlbmNlICpyZWY7CisJY2hhciBuYW1lWzEyOF07CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJmhlYWQsIGdfcmVwbywgIkhFQUQiKSk7CisKKwkvKiBtYWtlIGEgYnVuY2ggb2YgcmVmZXJlbmNlcyAqLworCisJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJlZnMvaGVhZHMvc3ltYm9saWMtJTAzZCIsIGkpOworCQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX3N5bWJvbGljX2NyZWF0ZSgKKwkJCSZyZWYsIGdfcmVwbywgbmFtZSwgInJlZnMvaGVhZHMvbWFzdGVyIiwgMCkpOworCQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKKworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJyZWZzL2hlYWRzL2RpcmVjdC0lMDNkIiwgaSk7CisJCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfY3JlYXRlKCZyZWYsIGdfcmVwbywgbmFtZSwgJmhlYWQsIDApKTsKKwkJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisJfQorCisJcGFja2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL3BlZWwuYyBiL3Rlc3RzL3JlZnMvcGVlbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvcGVlbC5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL3BlZWwuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL3JlYWQuYyBiL3Rlc3RzL3JlZnMvcmVhZC5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9yZWFkLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvcmVhZC5jCmluZGV4IGFmYjZiZTAuLjM1Y2YxN2UgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvcmVmcy9yZWFkLmMKKysrIGIvdGVzdHMvcmVmcy9yZWFkLmMKQEAgLTI1NSw2ICsyNTUsMjIgQEAKIAlhc3NlcnRfaXNfYnJhbmNoKCJyZWZzL3RhZ3MvZTkwODEwYiIsIGZhbHNlKTsKIH0KIAorc3RhdGljIHZvaWQgYXNzZXJ0X2lzX3RhZyhjb25zdCBjaGFyICpuYW1lLCBib29sIGV4cGVjdGVkX3RhZ25lc3MpCit7CisJZ2l0X3JlZmVyZW5jZSAqcmVmZXJlbmNlOworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWZlcmVuY2UsIGdfcmVwbywgbmFtZSkpOworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX3RhZ25lc3MsIGdpdF9yZWZlcmVuY2VfaXNfdGFnKHJlZmVyZW5jZSkpOworCWdpdF9yZWZlcmVuY2VfZnJlZShyZWZlcmVuY2UpOworfQorCit2b2lkIHRlc3RfcmVmc19yZWFkX19jYW5fZGV0ZXJtaW5lX2lmX2FfcmVmZXJlbmNlX2lzX2FfdGFnKHZvaWQpCit7CisJYXNzZXJ0X2lzX3RhZygicmVmcy90YWdzL2U5MDgxMGIiLCB0cnVlKTsKKwlhc3NlcnRfaXNfdGFnKCJyZWZzL3RhZ3MvdGVzdCIsIHRydWUpOworCWFzc2VydF9pc190YWcoInJlZnMvaGVhZHMvcGFja2VkIiwgZmFsc2UpOworCWFzc2VydF9pc190YWcoInJlZnMvcmVtb3Rlcy90ZXN0L21hc3RlciIsIGZhbHNlKTsKK30KKwogdm9pZCB0ZXN0X3JlZnNfcmVhZF9faW52YWxpZF9uYW1lX3JldHVybnNfRUlOVkFMSURTUEVDKHZvaWQpCiB7CiAJZ2l0X3JlZmVyZW5jZSAqcmVmZXJlbmNlOwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL3JlZl9oZWxwZXJzLmMgYi90ZXN0cy9yZWZzL3JlZl9oZWxwZXJzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9yZWZfaGVscGVycy5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL3JlZl9oZWxwZXJzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9yZWZfaGVscGVycy5oIGIvdGVzdHMvcmVmcy9yZWZfaGVscGVycy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvcmVmX2hlbHBlcnMuaApyZW5hbWUgdG8gdGVzdHMvcmVmcy9yZWZfaGVscGVycy5oCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvcmVmbG9nL2Ryb3AuYyBiL3Rlc3RzL3JlZnMvcmVmbG9nL2Ryb3AuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvcmVmbG9nL2Ryb3AuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9yZWZsb2cvZHJvcC5jCmluZGV4IDIxY2M4NDcuLjkxNmJkOTkgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvcmVmcy9yZWZsb2cvZHJvcC5jCisrKyBiL3Rlc3RzL3JlZnMvcmVmbG9nL2Ryb3AuYwpAQCAtOCwxNSArOCwxMCBAQAogCiB2b2lkIHRlc3RfcmVmc19yZWZsb2dfZHJvcF9faW5pdGlhbGl6ZSh2b2lkKQogewotCWdpdF9yZWZlcmVuY2UgKnJlZjsKLQogCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvLmdpdCIpOwotCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIGdfcmVwbywgIkhFQUQiKSk7CiAKLQlnaXRfcmVmbG9nX3JlYWQoJmdfcmVmbG9nLCByZWYpOworCWdpdF9yZWZsb2dfcmVhZCgmZ19yZWZsb2csIGdfcmVwbywgIkhFQUQiKTsKIAllbnRyeWNvdW50ID0gZ2l0X3JlZmxvZ19lbnRyeWNvdW50KGdfcmVmbG9nKTsKLQotCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOwogfQogCiB2b2lkIHRlc3RfcmVmc19yZWZsb2dfZHJvcF9fY2xlYW51cCh2b2lkKQpAQCAtMTA2LDE5ICsxMDEsMTUgQEAKIAogdm9pZCB0ZXN0X3JlZnNfcmVmbG9nX2Ryb3BfX2Nhbl9wZXJzaXN0X2RlbGV0aW9uX29uX2Rpc2sodm9pZCkKIHsKLQlnaXRfcmVmZXJlbmNlICpyZWY7Ci0KIAljbF9hc3NlcnQoZW50cnljb3VudCA+IDIpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZiwgZ19yZXBvLCBnX3JlZmxvZy0+cmVmX25hbWUpKTsKIAljbF9naXRfcGFzcyhnaXRfcmVmbG9nX2Ryb3AoZ19yZWZsb2csIDAsIDEpKTsKIAljbF9hc3NlcnRfZXF1YWxfc3ooZW50cnljb3VudCAtIDEsIGdpdF9yZWZsb2dfZW50cnljb3VudChnX3JlZmxvZykpOwogCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfd3JpdGUoZ19yZWZsb2cpKTsKIAogCWdpdF9yZWZsb2dfZnJlZShnX3JlZmxvZyk7CiAKLQlnaXRfcmVmbG9nX3JlYWQoJmdfcmVmbG9nLCByZWYpOwotCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworCWdpdF9yZWZsb2dfcmVhZCgmZ19yZWZsb2csIGdfcmVwbywgIkhFQUQiKTsKIAogCWNsX2Fzc2VydF9lcXVhbF9zeihlbnRyeWNvdW50IC0gMSwgZ2l0X3JlZmxvZ19lbnRyeWNvdW50KGdfcmVmbG9nKSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvcmVmbG9nL3JlZmxvZy5jIGIvdGVzdHMvcmVmcy9yZWZsb2cvcmVmbG9nLmMKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL3JlZmxvZy9yZWZsb2cuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9yZWZsb2cvcmVmbG9nLmMKaW5kZXggMDk1Y2FiZi4uYmNkMjI0MiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZWZzL3JlZmxvZy9yZWZsb2cuYworKysgYi90ZXN0cy9yZWZzL3JlZmxvZy9yZWZsb2cuYwpAQCAtMTMsNyArMTMsNyBAQAogCiAKIC8vIGhlbHBlcnMKLXN0YXRpYyB2b2lkIGFzc2VydF9zaWduYXR1cmUoZ2l0X3NpZ25hdHVyZSAqZXhwZWN0ZWQsIGdpdF9zaWduYXR1cmUgKmFjdHVhbCkKK3N0YXRpYyB2b2lkIGFzc2VydF9zaWduYXR1cmUoY29uc3QgZ2l0X3NpZ25hdHVyZSAqZXhwZWN0ZWQsIGNvbnN0IGdpdF9zaWduYXR1cmUgKmFjdHVhbCkKIHsKIAljbF9hc3NlcnQoYWN0dWFsKTsKIAljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZC0+bmFtZSwgYWN0dWFsLT5uYW1lKTsKQEAgLTM0LDMwICszNCwxMyBAQAogICAgY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwogfQogCi12b2lkIHRlc3RfcmVmc19yZWZsb2dfcmVmbG9nX19hcHBlbmRfdGhlbl9yZWFkKHZvaWQpCitzdGF0aWMgdm9pZCBhc3NlcnRfYXBwZW5kcyhjb25zdCBnaXRfc2lnbmF0dXJlICpjb21taXR0ZXIsIGNvbnN0IGdpdF9vaWQgKm9pZCkKIHsKLSAgIC8vIHdyaXRlIGEgcmVmbG9nIGZvciBhIGdpdmVuIHJlZmVyZW5jZSBhbmQgZW5zdXJlIGl0IGNhbiBiZSByZWFkIGJhY2sKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbzI7Ci0JZ2l0X3JlZmVyZW5jZSAqcmVmLCAqbG9va2VkdXBfcmVmOwotCWdpdF9vaWQgb2lkOwotCWdpdF9zaWduYXR1cmUgKmNvbW1pdHRlcjsKKwlnaXRfcmVmZXJlbmNlICpsb29rZWR1cF9yZWY7CiAJZ2l0X3JlZmxvZyAqcmVmbG9nOwogCWNvbnN0IGdpdF9yZWZsb2dfZW50cnkgKmVudHJ5OwogCi0JLyogQ3JlYXRlIGEgbmV3IGJyYW5jaCBwb2ludGluZyBhdCB0aGUgSEVBRCAqLwotCWdpdF9vaWRfZnJvbXN0cigmb2lkLCBjdXJyZW50X21hc3Rlcl90aXApOwotCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfY3JlYXRlKCZyZWYsIGdfcmVwbywgbmV3X3JlZiwgJm9pZCwgMCkpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3NpZ25hdHVyZV9ub3coJmNvbW1pdHRlciwgImZvbyIsICJmb29AYmFyIikpOwotCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHJlZikpOwotCi0JY2xfZ2l0X2ZhaWwoZ2l0X3JlZmxvZ19hcHBlbmQocmVmbG9nLCAmb2lkLCBjb21taXR0ZXIsICJubyBpbm5lclxubmV3bGluZSIpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVmbG9nX2FwcGVuZChyZWZsb2csICZvaWQsIGNvbW1pdHRlciwgTlVMTCkpOwotCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfYXBwZW5kKHJlZmxvZywgJm9pZCwgY29tbWl0dGVyLCBjb21taXRfbXNnICJcbiIpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVmbG9nX3dyaXRlKHJlZmxvZykpOwotCWdpdF9yZWZsb2dfZnJlZShyZWZsb2cpOwotCiAJLyogUmVvcGVuIGEgbmV3IGluc3RhbmNlIG9mIHRoZSByZXBvc2l0b3J5ICovCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbzIsICJ0ZXN0cmVwby5naXQiKSk7CiAKQEAgLTY1LDI5ICs0OCw3OCBAQAogCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZsb29rZWR1cF9yZWYsIHJlcG8yLCBuZXdfcmVmKSk7CiAKIAkvKiBSZWFkIGFuZCBwYXJzZSB0aGUgcmVmbG9nIGZvciB0aGlzIGJyYW5jaCAqLwotCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCBsb29rZWR1cF9yZWYpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgcmVwbzIsIG5ld19yZWYpKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgyLCAoaW50KWdpdF9yZWZsb2dfZW50cnljb3VudChyZWZsb2cpKTsKIAogCWVudHJ5ID0gZ2l0X3JlZmxvZ19lbnRyeV9ieWluZGV4KHJlZmxvZywgMSk7CiAJYXNzZXJ0X3NpZ25hdHVyZShjb21taXR0ZXIsIGVudHJ5LT5jb21taXR0ZXIpOwogCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKCZlbnRyeS0+b2lkX29sZCwgR0lUX09JRF9IRVhfWkVSTykgPT0gMCk7Ci0JY2xfYXNzZXJ0KGdpdF9vaWRfY21wKCZvaWQsICZlbnRyeS0+b2lkX2N1cikgPT0gMCk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfY21wKG9pZCwgJmVudHJ5LT5vaWRfY3VyKSA9PSAwKTsKIAljbF9hc3NlcnQoZW50cnktPm1zZyA9PSBOVUxMKTsKIAogCWVudHJ5ID0gZ2l0X3JlZmxvZ19lbnRyeV9ieWluZGV4KHJlZmxvZywgMCk7CiAJYXNzZXJ0X3NpZ25hdHVyZShjb21taXR0ZXIsIGVudHJ5LT5jb21taXR0ZXIpOwotCWNsX2Fzc2VydChnaXRfb2lkX2NtcCgmb2lkLCAmZW50cnktPm9pZF9vbGQpID09IDApOwotCWNsX2Fzc2VydChnaXRfb2lkX2NtcCgmb2lkLCAmZW50cnktPm9pZF9jdXIpID09IDApOworCWNsX2Fzc2VydChnaXRfb2lkX2NtcChvaWQsICZlbnRyeS0+b2lkX29sZCkgPT0gMCk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfY21wKG9pZCwgJmVudHJ5LT5vaWRfY3VyKSA9PSAwKTsKIAljbF9hc3NlcnRfZXF1YWxfcyhjb21taXRfbXNnLCBlbnRyeS0+bXNnKTsKIAotCWdpdF9zaWduYXR1cmVfZnJlZShjb21taXR0ZXIpOwogCWdpdF9yZWZsb2dfZnJlZShyZWZsb2cpOwogCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbzIpOwogCi0JZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CiAJZ2l0X3JlZmVyZW5jZV9mcmVlKGxvb2tlZHVwX3JlZik7CiB9CiAKK3ZvaWQgdGVzdF9yZWZzX3JlZmxvZ19yZWZsb2dfX2FwcGVuZF90aGVuX3JlYWQodm9pZCkKK3sKKwkvKiB3cml0ZSBhIHJlZmxvZyBmb3IgYSBnaXZlbiByZWZlcmVuY2UgYW5kIGVuc3VyZSBpdCBjYW4gYmUgcmVhZCBiYWNrICovCisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCWdpdF9vaWQgb2lkOworCWdpdF9zaWduYXR1cmUgKmNvbW1pdHRlcjsKKwlnaXRfcmVmbG9nICpyZWZsb2c7CisKKwkvKiBDcmVhdGUgYSBuZXcgYnJhbmNoIHBvaW50aW5nIGF0IHRoZSBIRUFEICovCisJZ2l0X29pZF9mcm9tc3RyKCZvaWQsIGN1cnJlbnRfbWFzdGVyX3RpcCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9jcmVhdGUoJnJlZiwgZ19yZXBvLCBuZXdfcmVmLCAmb2lkLCAwKSk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisKKwljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25vdygmY29tbWl0dGVyLCAiZm9vIiwgImZvb0BiYXIiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgZ19yZXBvLCBuZXdfcmVmKSk7CisKKwljbF9naXRfZmFpbChnaXRfcmVmbG9nX2FwcGVuZChyZWZsb2csICZvaWQsIGNvbW1pdHRlciwgIm5vIGlubmVyXG5uZXdsaW5lIikpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfYXBwZW5kKHJlZmxvZywgJm9pZCwgY29tbWl0dGVyLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19hcHBlbmQocmVmbG9nLCAmb2lkLCBjb21taXR0ZXIsIGNvbW1pdF9tc2cgIlxuIikpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfd3JpdGUocmVmbG9nKSk7CisJZ2l0X3JlZmxvZ19mcmVlKHJlZmxvZyk7CisKKwlhc3NlcnRfYXBwZW5kcyhjb21taXR0ZXIsICZvaWQpOworCisJZ2l0X3NpZ25hdHVyZV9mcmVlKGNvbW1pdHRlcik7Cit9CisKK3ZvaWQgdGVzdF9yZWZzX3JlZmxvZ19yZWZsb2dfX2FwcGVuZF90b190aGVuX3JlYWQodm9pZCkKK3sKKwkvKiB3cml0ZSBhIHJlZmxvZyBmb3IgYSBnaXZlbiByZWZlcmVuY2UgYW5kIGVuc3VyZSBpdCBjYW4gYmUgcmVhZCBiYWNrICovCisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCWdpdF9vaWQgb2lkOworCWdpdF9zaWduYXR1cmUgKmNvbW1pdHRlcjsKKworCS8qIENyZWF0ZSBhIG5ldyBicmFuY2ggcG9pbnRpbmcgYXQgdGhlIEhFQUQgKi8KKwlnaXRfb2lkX2Zyb21zdHIoJm9pZCwgY3VycmVudF9tYXN0ZXJfdGlwKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2NyZWF0ZSgmcmVmLCBnX3JlcG8sIG5ld19yZWYsICZvaWQsIDApKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zaWduYXR1cmVfbm93KCZjb21taXR0ZXIsICJmb28iLCAiZm9vQGJhciIpKTsKKworCWNsX2dpdF9mYWlsKGdpdF9yZWZsb2dfYXBwZW5kX3RvKGdfcmVwbywgbmV3X3JlZiwgJm9pZCwgY29tbWl0dGVyLCAibm8gaW5uZXJcbm5ld2xpbmUiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19hcHBlbmRfdG8oZ19yZXBvLCBuZXdfcmVmLCAmb2lkLCBjb21taXR0ZXIsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmbG9nX2FwcGVuZF90byhnX3JlcG8sIG5ld19yZWYsICZvaWQsIGNvbW1pdHRlciwgY29tbWl0X21zZyAiXG4iKSk7CisKKwlhc3NlcnRfYXBwZW5kcyhjb21taXR0ZXIsICZvaWQpOworCisJZ2l0X3NpZ25hdHVyZV9mcmVlKGNvbW1pdHRlcik7Cit9CisKIHZvaWQgdGVzdF9yZWZzX3JlZmxvZ19yZWZsb2dfX3JlbmFtaW5nX3RoZV9yZWZlcmVuY2VfbW92ZXNfdGhlX3JlZmxvZyh2b2lkKQogewogCWdpdF9yZWZlcmVuY2UgKm1hc3RlciwgKm5ld19tYXN0ZXI7CkBAIC0xMzMsMjEgKzE2NSwxOCBAQAogCiB2b2lkIHRlc3RfcmVmc19yZWZsb2dfcmVmbG9nX19yZWFkaW5nX3RoZV9yZWZsb2dfZnJvbV9hX3JlZmVyZW5jZV93aXRoX25vX2xvZ19yZXR1cm5zX2FuX2VtcHR5X29uZSh2b2lkKQogewotCWdpdF9yZWZlcmVuY2UgKnN1YnRyZWVzOwogCWdpdF9yZWZsb2cgKnJlZmxvZzsKKwljb25zdCBjaGFyICpyZWZuYW1lID0gInJlZnMvaGVhZHMvc3VidHJlZXMiOwogCWdpdF9idWYgc3VidHJlZXNfbG9nX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAKLQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmc3VidHJlZXMsIGdfcmVwbywgInJlZnMvaGVhZHMvc3VidHJlZXMiKSk7Ci0KLQlnaXRfYnVmX2pvaW5fbigmc3VidHJlZXNfbG9nX3BhdGgsICcvJywgMywgZ2l0X3JlcG9zaXRvcnlfcGF0aChnX3JlcG8pLCBHSVRfUkVGTE9HX0RJUiwgZ2l0X3JlZmVyZW5jZV9uYW1lKHN1YnRyZWVzKSk7CisJZ2l0X2J1Zl9qb2luX24oJnN1YnRyZWVzX2xvZ19wYXRoLCAnLycsIDMsIGdpdF9yZXBvc2l0b3J5X3BhdGgoZ19yZXBvKSwgR0lUX1JFRkxPR19ESVIsIHJlZm5hbWUpOwogCWNsX2Fzc2VydF9lcXVhbF9pKGZhbHNlLCBnaXRfcGF0aF9pc2ZpbGUoZ2l0X2J1Zl9jc3RyKCZzdWJ0cmVlc19sb2dfcGF0aCkpKTsKIAotCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCBzdWJ0cmVlcykpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCBnX3JlcG8sIHJlZm5hbWUpKTsKIAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIChpbnQpZ2l0X3JlZmxvZ19lbnRyeWNvdW50KHJlZmxvZykpOwogCiAJZ2l0X3JlZmxvZ19mcmVlKHJlZmxvZyk7Ci0JZ2l0X3JlZmVyZW5jZV9mcmVlKHN1YnRyZWVzKTsKIAlnaXRfYnVmX2ZyZWUoJnN1YnRyZWVzX2xvZ19wYXRoKTsKIH0KIApAQCAtMTU4LDcgKzE4Nyw3IEBACiAJZ2l0X3JlZmxvZyAqcmVmbG9nOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJm1hc3RlciwgZ19yZXBvLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIG1hc3RlcikpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCBnX3JlcG8sICJyZWZzL2hlYWRzL21hc3RlciIpKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfd3JpdGUocmVmbG9nKSk7CiAKQEAgLTE3NSwxMiArMjA0LDYgQEAKIAogdm9pZCB0ZXN0X3JlZnNfcmVmbG9nX3JlZmxvZ19fcmVuYW1pbmdfd2l0aF9hbl9pbnZhbGlkX25hbWVfcmV0dXJuc19FSU5WQUxJRFNQRUModm9pZCkKIHsKLQlnaXRfcmVmZXJlbmNlICptYXN0ZXI7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmbWFzdGVyLCBnX3JlcG8sICJyZWZzL2hlYWRzL21hc3RlciIpKTsKLQogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FSU5WQUxJRFNQRUMsCi0JCWdpdF9yZWZsb2dfcmVuYW1lKG1hc3RlciwgInJlZnMvaGVhZHMvSW52QHtpZCIpKTsKLQotCWdpdF9yZWZlcmVuY2VfZnJlZShtYXN0ZXIpOworCQkJICBnaXRfcmVmbG9nX3JlbmFtZShnX3JlcG8sICJyZWZzL2hlYWRzL21hc3RlciIsICJyZWZzL2hlYWRzL0ludkB7aWQiKSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlZnMvcmVuYW1lLmMgYi90ZXN0cy9yZWZzL3JlbmFtZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlZnMvcmVuYW1lLmMKcmVuYW1lIHRvIHRlc3RzL3JlZnMvcmVuYW1lLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9yZXZwYXJzZS5jIGIvdGVzdHMvcmVmcy9yZXZwYXJzZS5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9yZXZwYXJzZS5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL3JldnBhcnNlLmMKaW5kZXggNjlkOTI3NC4uMzdkMzk4MSAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZWZzL3JldnBhcnNlLmMKKysrIGIvdGVzdHMvcmVmcy9yZXZwYXJzZS5jCkBAIC01NDQsNiArNTQ0LDM3IEBACiAJCUdJVF9FQU1CSUdVT1VTLCBnaXRfcmV2cGFyc2Vfc2luZ2xlKCZnX29iaiwgZ19yZXBvLCAiZTkwIikpOwogfQogCisvKgorICogJCBlY2hvICJhYWJxaHEiIHwgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLS1zdGRpbgorICogZGVhNTA5ZDBiM2NiOGVlMDY1MGY2Y2EyMTBiYzgzZjQ2Nzg4NTFiYQorICogCisgKiAkIGVjaG8gImFhYXp2YyIgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLXN0ZGluCisgKiBkZWE1MDlkMDk3Y2U2OTJlMTY3ZGZjNmE0OGE3YTI4MGNjNWU4NzdlCisgKi8KK3ZvaWQgdGVzdF9yZWZzX3JldnBhcnNlX19hX25vdF9wcmVjaXNlX2Vub3VnaF9vYmplY3RpZF9yZXR1cm5zX0VBTUJJR1VPVVModm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF9vYmplY3QgKm9iajsKKworCXJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJ0ZXN0cmVwbyIpOworCisJY2xfZ2l0X21rZmlsZSgidGVzdHJlcG8vb25lLnR4dCIsICJhYWJxaHFcbiIpOworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL3R3by50eHQiLCAiYWFhenZjXG4iKTsKKwkKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgIm9uZS50eHQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJ0d28udHh0IikpOworCQorCWNsX2dpdF9mYWlsX3dpdGgoZ2l0X3JldnBhcnNlX3NpbmdsZSgmb2JqLCByZXBvLCAiZGVhNTA5ZDAiKSwgR0lUX0VBTUJJR1VPVVMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JldnBhcnNlX3NpbmdsZSgmb2JqLCByZXBvLCAiZGVhNTA5ZDA5IikpOworCisJZ2l0X29iamVjdF9mcmVlKG9iaik7CisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKwogdm9pZCB0ZXN0X3JlZnNfcmV2cGFyc2VfX2lzc3VlXzk5NCh2b2lkKQogewogCWdpdF9yZXBvc2l0b3J5ICpyZXBvOwpAQCAtNzM4LDQgKzc2OSw0NSBAQAogCQkibWFzdGVyIiwKIAkJImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAogCQkicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKworCXRlc3Rfb2JqZWN0X2FuZF9yZWYoCisJCSJIRUFEIiwKKwkJImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAorCQkicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKworICAgIHRlc3Rfb2JqZWN0X2FuZF9yZWYoCisJCSJ0YWdzL3Rlc3QiLAorCQkiYjI1ZmEzNWIzODA1MWU0YWU0NWQ0MjIyZTc5NWY5ZGYyZTQzZjFkMSIsCisgICAgICAgICJyZWZzL3RhZ3MvdGVzdCIpOworfQorCit2b2lkIHRlc3RfcmVmc19yZXZwYXJzZV9fZXh0X3JldHVybnNfTlVMTF9yZWZlcmVuY2Vfd2hlbl9leHByZXNzaW9uX3BvaW50c19hdF9hX3JldmlzaW9uKHZvaWQpCit7CisgICAgdGVzdF9vYmplY3RfYW5kX3JlZigKKyAgICAgICAgIkhFQUR+MyIsCisgICAgICAgICI0YTIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1IiwKKyAgICAgICAgTlVMTCk7CisKKyAgICB0ZXN0X29iamVjdF9hbmRfcmVmKAorICAgICAgICAiSEVBRH4wIiwKKyAgICAgICAgImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAorICAgICAgICBOVUxMKTsKKworICAgIHRlc3Rfb2JqZWN0X2FuZF9yZWYoCisgICAgICAgICJIRUFEXjAiLAorICAgICAgICAiYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCIsCisgICAgICAgIE5VTEwpOworCisgICAgdGVzdF9vYmplY3RfYW5kX3JlZigKKwkJIkB7LTF9QHswfSIsCisJCSJhNGE3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmIiwKKwkJTlVMTCk7Cit9CisKK3ZvaWQgdGVzdF9yZWZzX3JldnBhcnNlX19leHRfcmV0dXJuc19OVUxMX3JlZmVyZW5jZV93aGVuX2V4cHJlc3Npb25fcG9pbnRzX2F0X2FfdHJlZV9jb250ZW50KHZvaWQpCit7CisgICAgdGVzdF9vYmplY3RfYW5kX3JlZigKKwkJInRhZ3MvdGVzdDpyZWFkbWUudHh0IiwKKwkJIjAyNjYxNjNhNDllMjgwYzRmNWVkMWUwOGZhY2QzNmEyYmQ3MTZiY2YiLAorICAgICAgICBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy9zZXR0ZXIuYyBiL3Rlc3RzL3JlZnMvc2V0dGVyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy9zZXR0ZXIuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy9zZXR0ZXIuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZWZzL3Nob3J0aGFuZC5jIGIvdGVzdHMvcmVmcy9zaG9ydGhhbmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZWZzL3Nob3J0aGFuZC5jCnJlbmFtZSB0byB0ZXN0cy9yZWZzL3Nob3J0aGFuZC5jCmRpZmYgLS1naXQgYS90ZXN0cy9yZWZzL3VuaWNvZGUuYyBiL3Rlc3RzL3JlZnMvdW5pY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjAxMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZWZzL3VuaWNvZGUuYwpAQCAtMCwwICsxLDU2IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwordm9pZCB0ZXN0X3JlZnNfdW5pY29kZV9faW5pdGlhbGl6ZSh2b2lkKQoreworCXJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJ0ZXN0cmVwby5naXQiKTsKK30KKwordm9pZCB0ZXN0X3JlZnNfdW5pY29kZV9fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKKwlyZXBvID0gTlVMTDsKK30KKwordm9pZCB0ZXN0X3JlZnNfdW5pY29kZV9fY3JlYXRlX2FuZF9sb29rdXAodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpyZWYwLCAqcmVmMSwgKnJlZjI7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8yOworCisJY29uc3QgY2hhciAqUkVGTkFNRSA9ICJyZWZzL2hlYWRzLyIgIlwzMDNcMjA1IiAibmdzdHIiICJcMzAzXDI2NiIgIm0iOworCWNvbnN0IGNoYXIgKm1hc3RlciA9ICJyZWZzL2hlYWRzL21hc3RlciI7CisKKwkvKiBDcmVhdGUgdGhlIHJlZmVyZW5jZSAqLworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYwLCByZXBvLCBtYXN0ZXIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2NyZWF0ZSgKKwkJJnJlZjEsIHJlcG8sIFJFRk5BTUUsIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZjApLCAwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoUkVGTkFNRSwgZ2l0X3JlZmVyZW5jZV9uYW1lKHJlZjEpKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmMCk7CisKKwkvKiBMb29rdXAgdGhlIHJlZmVyZW5jZSBpbiBhIGRpZmZlcmVudCBpbnN0YW5jZSBvZiB0aGUgcmVwb3NpdG9yeSAqLworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8yLCAidGVzdHJlcG8uZ2l0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZjIsIHJlcG8yLCBSRUZOQU1FKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koCisJCTAsIGdpdF9vaWRfY21wKGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZjEpLCBnaXRfcmVmZXJlbmNlX3RhcmdldChyZWYyKSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKFJFRk5BTUUsIGdpdF9yZWZlcmVuY2VfbmFtZShyZWYyKSk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZjIpOworCisjaWYgR0lUX1VTRV9JQ09OVgorCS8qIExvb2t1cCByZWZlcmVuY2UgYnkgZGVjb21wb3NlZCB1bmljb2RlIG5hbWUgKi8KKworI2RlZmluZSBSRUZOQU1FX0RFQ09NUE9TRUQgInJlZnMvaGVhZHMvIiAiQSIgIlwzMTRcMjEyIiAibmdzdHJvIiAiXDMxNFwyMTAiICJtIgorCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZjIsIHJlcG8yLCBSRUZOQU1FX0RFQ09NUE9TRUQpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgKKwkJMCwgZ2l0X29pZF9jbXAoZ2l0X3JlZmVyZW5jZV90YXJnZXQocmVmMSksIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZjIpKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoUkVGTkFNRSwgZ2l0X3JlZmVyZW5jZV9uYW1lKHJlZjIpKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmMik7CisjZW5kaWYKKworCS8qIENsZWFudXAgKi8KKworCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYxKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8yKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVmcy91cGRhdGUuYyBiL3Rlc3RzL3JlZnMvdXBkYXRlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVmcy91cGRhdGUuYwpyZW5hbWUgdG8gdGVzdHMvcmVmcy91cGRhdGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXBvL2NvbmZpZy5jIGIvdGVzdHMvcmVwby9jb25maWcuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlcG8vY29uZmlnLmMKcmVuYW1lIHRvIHRlc3RzL3JlcG8vY29uZmlnLmMKaW5kZXggYjg5NzFiYi4uZTc3YWNjOCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZXBvL2NvbmZpZy5jCisrKyBiL3Rlc3RzL3JlcG8vY29uZmlnLmMKQEAgLTIsNyArMiw3IEBACiAjaW5jbHVkZSAiZmlsZW9wcy5oIgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKLWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKK3N0YXRpYyBnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAKIHZvaWQgdGVzdF9yZXBvX2NvbmZpZ19faW5pdGlhbGl6ZSh2b2lkKQogewpAQCAtNDYsNiArNDYsOCBAQAogCWdpdF9jb25maWdfZnJlZShnbG9iYWwpOwogCWdpdF9jb25maWdfZnJlZShjb25maWcpOwogCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisKKwlnaXRfZnV0aWxzX2RpcnNfZ2xvYmFsX3NodXRkb3duKCk7CiB9CiAKIHZvaWQgdGVzdF9yZXBvX2NvbmZpZ19fb3Blbl9taXNzaW5nX2dsb2JhbF93aXRoX3NlcGFyYXRvcnModm9pZCkKQEAgLTczLDYgKzc1LDggQEAKIAlnaXRfY29uZmlnX2ZyZWUoZ2xvYmFsKTsKIAlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKIAlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworCisJZ2l0X2Z1dGlsc19kaXJzX2dsb2JhbF9zaHV0ZG93bigpOwogfQogCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgpAQCAtMTAxLDYgKzEwNSw4IEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0FCQlJFVl9ERUZBVUxULCB2YWwpOwogCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CiAKKwlnaXRfZnV0aWxzX2RpcnNfZ2xvYmFsX3NodXRkb3duKCk7CisKIAkvKiB3aXRoIGp1c3Qgc3lzdGVtICovCiAKIAljbF9tdXN0X3Bhc3MocF9ta2RpcigiYWx0ZXJuYXRlLzEiLCAwNzc3KSk7CkBAIC0xOTcsNCArMjAzLDYgQEAKIAogCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJlbXB0eV9zdGFuZGFyZF9yZXBvLy5naXQvY29uZmlnIikpOwogCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJhbHRlcm5hdGUvMy8uZ2l0Y29uZmlnIikpOworCisJZ2l0X2Z1dGlsc19kaXJzX2dsb2JhbF9zaHV0ZG93bigpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXBvL2Rpc2NvdmVyLmMgYi90ZXN0cy9yZXBvL2Rpc2NvdmVyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVwby9kaXNjb3Zlci5jCnJlbmFtZSB0byB0ZXN0cy9yZXBvL2Rpc2NvdmVyLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9nZXR0ZXJzLmMgYi90ZXN0cy9yZXBvL2dldHRlcnMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXBvL2dldHRlcnMuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9nZXR0ZXJzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9oYXNoZmlsZS5jIGIvdGVzdHMvcmVwby9oYXNoZmlsZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlcG8vaGFzaGZpbGUuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9oYXNoZmlsZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlcG8vaGVhZC5jIGIvdGVzdHMvcmVwby9oZWFkLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXBvL2hlYWQuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9oZWFkLmMKaW5kZXggYTlmNWNmYy4uNWE1NTk4NCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZXBvL2hlYWQuYworKysgYi90ZXN0cy9yZXBvL2hlYWQuYwpAQCAtMzIsMjAgKzMyLDIwIEBACiAJY2xfYXNzZXJ0X2VxdWFsX2koZmFsc2UsIGdpdF9yZXBvc2l0b3J5X2hlYWRfZGV0YWNoZWQocmVwbykpOwogfQogCi12b2lkIHRlc3RfcmVwb19oZWFkX19oZWFkX29ycGhhbih2b2lkKQordm9pZCB0ZXN0X3JlcG9faGVhZF9fdW5ib3JuX2hlYWQodm9pZCkKIHsKIAlnaXRfcmVmZXJlbmNlICpyZWY7CiAKIAljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkX2RldGFjaGVkKHJlcG8pKTsKIAotCW1ha2VfaGVhZF9vcnBoYW5lZChyZXBvLCBOT05fRVhJU1RJTkdfSEVBRCk7CisJbWFrZV9oZWFkX3VuYm9ybihyZXBvLCBOT05fRVhJU1RJTkdfSEVBRCk7CiAKLQljbF9hc3NlcnQoZ2l0X3JlcG9zaXRvcnlfaGVhZF9vcnBoYW4ocmVwbykgPT0gMSk7CisJY2xfYXNzZXJ0KGdpdF9yZXBvc2l0b3J5X2hlYWRfdW5ib3JuKHJlcG8pID09IDEpOwogCiAKIAkvKiB0YWtlIHRoZSByZXBvIGJhY2sgdG8gaXQncyBvcmlnaW5hbCBzdGF0ZSAqLwogCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfY3JlYXRlKCZyZWYsIHJlcG8sICJIRUFEIiwgInJlZnMvaGVhZHMvbWFzdGVyIiwgMSkpOwotCWNsX2Fzc2VydChnaXRfcmVwb3NpdG9yeV9oZWFkX29ycGhhbihyZXBvKSA9PSAwKTsKKwljbF9hc3NlcnQoZ2l0X3JlcG9zaXRvcnlfaGVhZF91bmJvcm4ocmVwbykgPT0gMCk7CiAKIAlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKIH0KQEAgLTU4LDcgKzU4LDcgQEAKIAogCWNsX2Fzc2VydF9lcXVhbF9pKGZhbHNlLCBnaXRfcmVwb3NpdG9yeV9oZWFkX2RldGFjaGVkKHJlcG8pKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FT1JQSEFORURIRUFELCBnaXRfcmVwb3NpdG9yeV9oZWFkKCZoZWFkLCByZXBvKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VVTkJPUk5CUkFOQ0gsIGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIHJlcG8pKTsKIH0KIAogdm9pZCB0ZXN0X3JlcG9faGVhZF9fc2V0X2hlYWRfUmV0dXJuc19FTk9URk9VTkRfd2hlbl90aGVfcmVmZXJlbmNlX2RvZXNudF9leGlzdCh2b2lkKQpAQCAtMTYzLDIwICsxNjMsMjAgQEAKIAlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CiB9CiAKLXZvaWQgdGVzdF9yZXBvX2hlYWRfX2RldGFjaGluZ19hbl9vcnBoYW5lZF9oZWFkX3JldHVybnNfR0lUX0VPUlBIQU5FREhFQUQodm9pZCkKK3ZvaWQgdGVzdF9yZXBvX2hlYWRfX2RldGFjaGluZ19hbl91bmJvcm5fYnJhbmNoX3JldHVybnNfR0lUX0VVTkJPUk5CUkFOQ0godm9pZCkKIHsKLQltYWtlX2hlYWRfb3JwaGFuZWQocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOworCW1ha2VfaGVhZF91bmJvcm4ocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VPUlBIQU5FREhFQUQsIGdpdF9yZXBvc2l0b3J5X2RldGFjaF9oZWFkKHJlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRVVOQk9STkJSQU5DSCwgZ2l0X3JlcG9zaXRvcnlfZGV0YWNoX2hlYWQocmVwbykpOwogfQogCi12b2lkIHRlc3RfcmVwb19oZWFkX19yZXRyaWV2aW5nX2FuX29ycGhhbmVkX2hlYWRfcmV0dXJuc19HSVRfRU9SUEhBTkVESEVBRCh2b2lkKQordm9pZCB0ZXN0X3JlcG9faGVhZF9fcmV0cmlldmluZ19hbl91bmJvcm5fYnJhbmNoX3JldHVybnNfR0lUX0VVTkJPUk5CUkFOQ0godm9pZCkKIHsKIAlnaXRfcmVmZXJlbmNlICpoZWFkOwogCi0JbWFrZV9oZWFkX29ycGhhbmVkKHJlcG8sIE5PTl9FWElTVElOR19IRUFEKTsKKwltYWtlX2hlYWRfdW5ib3JuKHJlcG8sIE5PTl9FWElTVElOR19IRUFEKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FT1JQSEFORURIRUFELCBnaXRfcmVwb3NpdG9yeV9oZWFkKCZoZWFkLCByZXBvKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VVTkJPUk5CUkFOQ0gsIGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIHJlcG8pKTsKIH0KIAogdm9pZCB0ZXN0X3JlcG9faGVhZF9fcmV0cmlldmluZ19hX21pc3NpbmdfaGVhZF9yZXR1cm5zX0dJVF9FTk9URk9VTkQodm9pZCkKQEAgLTE4OCw5ICsxODgsOSBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTk9URk9VTkQsIGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIHJlcG8pKTsKIH0KIAotdm9pZCB0ZXN0X3JlcG9faGVhZF9fY2FuX3RlbGxfaWZfYW5fb3JwaGFuZWRfaGVhZF9pc19kZXRhY2hlZCh2b2lkKQordm9pZCB0ZXN0X3JlcG9faGVhZF9fY2FuX3RlbGxfaWZfYW5fdW5ib3JuX2hlYWRfaXNfZGV0YWNoZWQodm9pZCkKIHsKLQltYWtlX2hlYWRfb3JwaGFuZWQocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOworCW1ha2VfaGVhZF91bmJvcm4ocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOwogCiAJY2xfYXNzZXJ0X2VxdWFsX2koZmFsc2UsIGdpdF9yZXBvc2l0b3J5X2hlYWRfZGV0YWNoZWQocmVwbykpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXBvL2hlYWR0cmVlLmMgYi90ZXN0cy9yZXBvL2hlYWR0cmVlLmMKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXBvL2hlYWR0cmVlLmMKcmVuYW1lIHRvIHRlc3RzL3JlcG8vaGVhZHRyZWUuYwppbmRleCAwZTdmZTkzLi5lODk5YWMzIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3JlcG8vaGVhZHRyZWUuYworKysgYi90ZXN0cy9yZXBvL2hlYWR0cmVlLmMKQEAgLTM2LDEzICszNiwxMyBAQAogCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF90cmVlX2lkKHRyZWUpLCAiYXoiKSk7CiB9CiAKLXZvaWQgdGVzdF9yZXBvX2hlYWR0cmVlX193aGVuX2hlYWRfaXNfb3JwaGFuZWRfcmV0dXJuc19FT1JQSEFORURIRUFEKHZvaWQpCit2b2lkIHRlc3RfcmVwb19oZWFkdHJlZV9fd2hlbl9oZWFkX2lzX3VuYm9ybl9yZXR1cm5zX0VVTkJPUk5CUkFOQ0godm9pZCkKIHsKLQltYWtlX2hlYWRfb3JwaGFuZWQocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOworCW1ha2VfaGVhZF91bmJvcm4ocmVwbywgTk9OX0VYSVNUSU5HX0hFQUQpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2kodHJ1ZSwgZ2l0X3JlcG9zaXRvcnlfaGVhZF9vcnBoYW4ocmVwbykpOworCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIGdpdF9yZXBvc2l0b3J5X2hlYWRfdW5ib3JuKHJlcG8pKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FT1JQSEFORURIRUFELCBnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoJnRyZWUsIHJlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRVVOQk9STkJSQU5DSCwgZ2l0X3JlcG9zaXRvcnlfaGVhZF90cmVlKCZ0cmVlLCByZXBvKSk7CiB9CiAKIHZvaWQgdGVzdF9yZXBvX2hlYWR0cmVlX193aGVuX2hlYWRfaXNfbWlzc2luZ19yZXR1cm5zX0VOT1RGT1VORCh2b2lkKQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXBvL2luaXQuYyBiL3Rlc3RzL3JlcG8vaW5pdC5jCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVwby9pbml0LmMKcmVuYW1lIHRvIHRlc3RzL3JlcG8vaW5pdC5jCmluZGV4IDhjZjczNzkuLmFlYTM4M2MgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvcmVwby9pbml0LmMKKysrIGIvdGVzdHMvcmVwby9pbml0LmMKQEAgLTEwLDEwICsxMCwxNyBAQAogfTsKIAogc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpfcmVwbyA9IE5VTEw7CitzdGF0aWMgbW9kZV90IGdfdW1hc2sgPSAwOwogCiB2b2lkIHRlc3RfcmVwb19pbml0X19pbml0aWFsaXplKHZvaWQpCiB7CiAJX3JlcG8gPSBOVUxMOworCisJLyogbG9hZCB1bWFzayBpZiBub3QgYWxyZWFkeSBsb2FkZWQgKi8KKwlpZiAoIWdfdW1hc2spIHsKKwkJZ191bWFzayA9IHBfdW1hc2soMDIyKTsKKwkJKHZvaWQpcF91bWFzayhnX3VtYXNrKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFudXBfcmVwb3NpdG9yeSh2b2lkICpwYXRoKQpAQCAtMTcyLDQxICsxNzksMzIgQEAKIAlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogfQogCi1zdGF0aWMgdm9pZCBhc3NlcnRfY29uZmlnX2VudHJ5X29uX2luaXRfYnl0eXBlKGNvbnN0IGNoYXIgKmNvbmZpZ19rZXksIGludCBleHBlY3RlZF92YWx1ZSwgYm9vbCBpc19iYXJlKQorc3RhdGljIHZvaWQgYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0X2J5dHlwZSgKKwljb25zdCBjaGFyICpjb25maWdfa2V5LCBpbnQgZXhwZWN0ZWRfdmFsdWUsIGJvb2wgaXNfYmFyZSkKIHsKIAlnaXRfY29uZmlnICpjb25maWc7Ci0JaW50IGN1cnJlbnRfdmFsdWU7Ci0JZ2l0X2J1ZiByZXBvX3BhdGggPSBHSVRfQlVGX0lOSVQ7CisJaW50IGVycm9yLCBjdXJyZW50X3ZhbHVlOworCWNvbnN0IGNoYXIgKnJlcG9fcGF0aCA9IGlzX2JhcmUgPworCQkiY29uZmlnX2VudHJ5L3Rlc3QuYmFyZS5naXQiIDogImNvbmZpZ19lbnRyeS90ZXN0Lm5vbi5iYXJlLmdpdCI7CiAKIAljbF9zZXRfY2xlYW51cCgmY2xlYW51cF9yZXBvc2l0b3J5LCAiY29uZmlnX2VudHJ5Iik7CiAKLQljbF9naXRfcGFzcyhnaXRfYnVmX3B1dHMoJnJlcG9fcGF0aCwgImNvbmZpZ19lbnRyeS90ZXN0LiIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbml0KCZfcmVwbywgcmVwb19wYXRoLCBpc19iYXJlKSk7CiAKLQlpZiAoIWlzX2JhcmUpCi0JCWNsX2dpdF9wYXNzKGdpdF9idWZfcHV0cygmcmVwb19wYXRoLCAibm9uLiIpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9idWZfcHV0cygmcmVwb19wYXRoLCAiYmFyZS5naXQiKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbml0KCZfcmVwbywgZ2l0X2J1Zl9jc3RyKCZyZXBvX3BhdGgpLCBpc19iYXJlKSk7Ci0KLQlnaXRfYnVmX2ZyZWUoJnJlcG9fcGF0aCk7Ci0KLQlnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNvbmZpZywgX3JlcG8pOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2NvbmZpZygmY29uZmlnLCBfcmVwbykpOworCWVycm9yID0gZ2l0X2NvbmZpZ19nZXRfYm9vbCgmY3VycmVudF92YWx1ZSwgY29uZmlnLCBjb25maWdfa2V5KTsKKwlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKIAogCWlmIChleHBlY3RlZF92YWx1ZSA+PSAwKSB7Ci0JCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X2Jvb2woJmN1cnJlbnRfdmFsdWUsIGNvbmZpZywgY29uZmlnX2tleSkpOwotCisJCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGVycm9yKTsKIAkJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfdmFsdWUsIGN1cnJlbnRfdmFsdWUpOwogCX0gZWxzZSB7Ci0JCWludCBlcnJvciA9IGdpdF9jb25maWdfZ2V0X2Jvb2woJmN1cnJlbnRfdmFsdWUsIGNvbmZpZywgY29uZmlnX2tleSk7Ci0KIAkJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfdmFsdWUsIGVycm9yKTsKIAl9Ci0KLQlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKIH0KIAotc3RhdGljIHZvaWQgYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0KGNvbnN0IGNoYXIgKmNvbmZpZ19rZXksIGludCBleHBlY3RlZF92YWx1ZSkKK3N0YXRpYyB2b2lkIGFzc2VydF9jb25maWdfZW50cnlfb25faW5pdCgKKwljb25zdCBjaGFyICpjb25maWdfa2V5LCBpbnQgZXhwZWN0ZWRfdmFsdWUpCiB7CiAJYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0X2J5dHlwZShjb25maWdfa2V5LCBleHBlY3RlZF92YWx1ZSwgdHJ1ZSk7CiAJZ2l0X3JlcG9zaXRvcnlfZnJlZShfcmVwbyk7CkBAIC0yMTYsMjEgKzIxNCwzNiBAQAogCiB2b2lkIHRlc3RfcmVwb19pbml0X19kZXRlY3RfZmlsZW1vZGUodm9pZCkKIHsKLSNpZmRlZiBHSVRfV0lOMzIKLQlhc3NlcnRfY29uZmlnX2VudHJ5X29uX2luaXQoImNvcmUuZmlsZW1vZGUiLCBmYWxzZSk7Ci0jZWxzZQotCWFzc2VydF9jb25maWdfZW50cnlfb25faW5pdCgiY29yZS5maWxlbW9kZSIsIHRydWUpOwotI2VuZGlmCisJYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0KCJjb3JlLmZpbGVtb2RlIiwgY2xfaXNfY2htb2Rfc3VwcG9ydGVkKCkpOwogfQogCi0jZGVmaW5lIENBU0VfSU5TRU5TSVRJVkVfRklMRVNZU1RFTSAoZGVmaW5lZCBHSVRfV0lOMzIgfHwgZGVmaW5lZCBfX0FQUExFX18pCi0KIHZvaWQgdGVzdF9yZXBvX2luaXRfX2RldGVjdF9pZ25vcmVjYXNlKHZvaWQpCiB7Ci0jaWYgQ0FTRV9JTlNFTlNJVElWRV9GSUxFU1lTVEVNCi0JYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0KCJjb3JlLmlnbm9yZWNhc2UiLCB0cnVlKTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlib29sIGZvdW5kX3dpdGhvdXRfbWF0Y2g7CisKKwljbF9naXRfd3JpdGUyZmlsZSgidGVzdENBUFMiLCAid2hhdGV2ZXJcbiIsIDAsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2Nik7CisJZm91bmRfd2l0aG91dF9tYXRjaCA9IChwX3N0YXQoIlRlc3RjYXBzIiwgJnN0KSA9PSAwKTsKKwljbF9tdXN0X3Bhc3MocF91bmxpbmsoInRlc3RDQVBTIikpOworCisJYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0KAorCQkiY29yZS5pZ25vcmVjYXNlIiwgZm91bmRfd2l0aG91dF9tYXRjaCA/IHRydWUgOiBHSVRfRU5PVEZPVU5EKTsKK30KKwordm9pZCB0ZXN0X3JlcG9faW5pdF9fZGV0ZWN0X3ByZWNvbXBvc2VfdW5pY29kZV9yZXF1aXJlZCh2b2lkKQoreworI2lmZGVmIEdJVF9VU0VfSUNPTlYKKwljaGFyICpjb21wb3NlZCA9ICLhuLHhubfhuZNuIiwgKmRlY29tcG9zZWQgPSAia8yBdcytb8yEzIFuIjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlib29sIGZvdW5kX3dpdGhfbmZkOworCisJY2xfZ2l0X3dyaXRlMmZpbGUoY29tcG9zZWQsICJ3aGF0ZXZlclxuIiwgMCwgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKKwlmb3VuZF93aXRoX25mZCA9IChwX3N0YXQoZGVjb21wb3NlZCwgJnN0KSA9PSAwKTsKKwljbF9tdXN0X3Bhc3MocF91bmxpbmsoY29tcG9zZWQpKTsKKworCWFzc2VydF9jb25maWdfZW50cnlfb25faW5pdCgiY29yZS5wcmVjb21wb3NldW5pY29kZSIsIGZvdW5kX3dpdGhfbmZkKTsKICNlbHNlCi0JYXNzZXJ0X2NvbmZpZ19lbnRyeV9vbl9pbml0KCJjb3JlLmlnbm9yZWNhc2UiLCBHSVRfRU5PVEZPVU5EKTsKKwlhc3NlcnRfY29uZmlnX2VudHJ5X29uX2luaXQoImNvcmUucHJlY29tcG9zZXVuaWNvZGUiLCBHSVRfRU5PVEZPVU5EKTsKICNlbmRpZgogfQogCkBAIC0yNjMsMTQgKzI3Niw3IEBACiAKIHZvaWQgdGVzdF9yZXBvX2luaXRfX3JlaW5pdF9vdmVyd3JpdGVzX2ZpbGVtb2RlKHZvaWQpCiB7Ci0JZ2l0X2NvbmZpZyAqY29uZmlnOwotCWludCBleHBlY3RlZCwgY3VycmVudF92YWx1ZTsKLQotI2lmZGVmIEdJVF9XSU4zMgotCWV4cGVjdGVkID0gZmFsc2U7Ci0jZWxzZQotCWV4cGVjdGVkID0gdHJ1ZTsKLSNlbmRpZgorCWludCBleHBlY3RlZCA9IGNsX2lzX2NobW9kX3N1cHBvcnRlZCgpLCBjdXJyZW50X3ZhbHVlOwogCiAJLyogSW5pdCBhIG5ldyByZXBvICovCiAJY2xfc2V0X2NsZWFudXAoJmNsZWFudXBfcmVwb3NpdG9yeSwgIm92ZXJ3cml0ZS5naXQiKTsKQEAgLTI4NCwxMyArMjkwLDEwIEBACiAKIAkvKiBSZWluaXQgdGhlIHJlcG9zaXRvcnkgKi8KIAljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbml0KCZfcmVwbywgIm92ZXJ3cml0ZS5naXQiLCAxKSk7Ci0JZ2l0X3JlcG9zaXRvcnlfY29uZmlnKCZjb25maWcsIF9yZXBvKTsKIAogCS8qIEVuc3VyZSB0aGUgImNvcmUuZmlsZW1vZGUiIGNvbmZpZyB2YWx1ZSBoYXMgYmVlbiByZXNldCAqLwotCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X2Jvb2woJmN1cnJlbnRfdmFsdWUsIGNvbmZpZywgImNvcmUuZmlsZW1vZGUiKSk7CisJY3VycmVudF92YWx1ZSA9IGNsX3JlcG9fZ2V0X2Jvb2woX3JlcG8sICJjb3JlLmZpbGVtb2RlIik7CiAJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWQsIGN1cnJlbnRfdmFsdWUpOwotCi0JZ2l0X2NvbmZpZ19mcmVlKGNvbmZpZyk7CiB9CiAKIHZvaWQgdGVzdF9yZXBvX2luaXRfX3NldHNfbG9nQWxsUmVmVXBkYXRlc19hY2NvcmRpbmdfdG9fdHlwZV9vZl9yZXBvc2l0b3J5KHZvaWQpCkBAIC0zNDUsNyArMzQ4LDEwIEBACiAKIAljbF9naXRfcGFzcyhnaXRfcGF0aF9sc3RhdChnaXRfcmVwb3NpdG9yeV9wYXRoKF9yZXBvKSwgJnN0KSk7CiAJY2xfYXNzZXJ0KFNfSVNESVIoc3Quc3RfbW9kZSkpOwotCWNsX2Fzc2VydCgoU19JU0dJRCAmIHN0LnN0X21vZGUpID09IFNfSVNHSUQpOworCWlmIChjbF9pc19jaG1vZF9zdXBwb3J0ZWQoKSkKKwkJY2xfYXNzZXJ0KChTX0lTR0lEICYgc3Quc3RfbW9kZSkgPT0gU19JU0dJRCk7CisJZWxzZQorCQljbF9hc3NlcnQoKFNfSVNHSUQgJiBzdC5zdF9tb2RlKSA9PSAwKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIF9yZXBvLCAiSEVBRCIpKTsKIAljbF9hc3NlcnQoZ2l0X3JlZmVyZW5jZV90eXBlKHJlZikgPT0gR0lUX1JFRl9TWU1CT0xJQyk7CkBAIC0zNjEsNiArMzY3LDggQEAKIAljbF9maXh0dXJlX2NsZWFudXAoInJvb3QiKTsKIH0KIAorI2RlZmluZSBDTEVBUl9GT1JfQ09SRV9GSUxFTU9ERShNKSAoKE0pICY9IH4wMTc3KQorCiBzdGF0aWMgdm9pZCBhc3NlcnRfaG9va3NfbWF0Y2goCiAJY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyLAogCWNvbnN0IGNoYXIgKnJlcG9fZGlyLApAQCAtMzc5LDEyICszODcsMTggQEAKIAogCWNsX2Fzc2VydChleHBlY3RlZF9zdC5zdF9zaXplID09IHN0LnN0X3NpemUpOwogCi0JaWYgKCFjb3JlX2ZpbGVtb2RlKSB7Ci0JCWV4cGVjdGVkX3N0LnN0X21vZGUgPSBleHBlY3RlZF9zdC5zdF9tb2RlICYgfjAxMTE7Ci0JCXN0LnN0X21vZGUgPSBzdC5zdF9tb2RlICYgfjAxMTE7Ci0JfQorCWlmIChHSVRfTU9ERV9UWVBFKGV4cGVjdGVkX3N0LnN0X21vZGUpICE9IEdJVF9GSUxFTU9ERV9MSU5LKSB7CisJCW1vZGVfdCBleHBlY3RlZF9tb2RlID0KKwkJCUdJVF9NT0RFX1RZUEUoZXhwZWN0ZWRfc3Quc3RfbW9kZSkgfAorCQkJKEdJVF9QRVJNU19GT1JfV1JJVEUoZXhwZWN0ZWRfc3Quc3RfbW9kZSkgJiB+Z191bWFzayk7CiAKLQljbF9hc3NlcnRfZXF1YWxfaSgoaW50KWV4cGVjdGVkX3N0LnN0X21vZGUsIChpbnQpc3Quc3RfbW9kZSk7CisJCWlmICghY29yZV9maWxlbW9kZSkgeworCQkJQ0xFQVJfRk9SX0NPUkVfRklMRU1PREUoZXhwZWN0ZWRfbW9kZSk7CisJCQlDTEVBUl9GT1JfQ09SRV9GSUxFTU9ERShzdC5zdF9tb2RlKTsKKwkJfQorCisJCWNsX2Fzc2VydF9lcXVhbF9pX2ZtdChleHBlY3RlZF9tb2RlLCBzdC5zdF9tb2RlLCAiJTA3byIpOworCX0KIAogCWdpdF9idWZfZnJlZSgmZXhwZWN0ZWQpOwogCWdpdF9idWZfZnJlZSgmYWN0dWFsKTsKQEAgLTQwMiwyNCArNDE2LDE5IEBACiAJZ2l0X2J1Zl9mcmVlKCZmdWxsKTsKIAogCWlmICghY29yZV9maWxlbW9kZSkgewotCQlleHBlY3RfbW9kZSA9IGV4cGVjdF9tb2RlICYgfjAxMTE7Ci0JCXN0LnN0X21vZGUgPSBzdC5zdF9tb2RlICYgfjAxMTE7CisJCUNMRUFSX0ZPUl9DT1JFX0ZJTEVNT0RFKGV4cGVjdF9tb2RlKTsKKwkJQ0xFQVJfRk9SX0NPUkVfRklMRU1PREUoc3Quc3RfbW9kZSk7CiAJCWV4cGVjdF9zZXRnaWQgPSBmYWxzZTsKIAl9CiAKLQlpZiAoU19JU0dJRCAhPSAwKSB7Ci0JCWlmIChleHBlY3Rfc2V0Z2lkKQotCQkJY2xfYXNzZXJ0KChzdC5zdF9tb2RlICYgU19JU0dJRCkgIT0gMCk7Ci0JCWVsc2UKLQkJCWNsX2Fzc2VydCgoc3Quc3RfbW9kZSAmIFNfSVNHSUQpID09IDApOwotCX0KKwlpZiAoU19JU0dJRCAhPSAwKQorCQljbF9hc3NlcnRfZXF1YWxfYihleHBlY3Rfc2V0Z2lkLCAoc3Quc3RfbW9kZSAmIFNfSVNHSUQpICE9IDApOwogCi0JaWYgKChleHBlY3RfbW9kZSAmIDAxMTEpICE9IDApCi0JCWNsX2Fzc2VydCgoc3Quc3RfbW9kZSAmIDAxMTEpICE9IDApOwotCWVsc2UKLQkJY2xfYXNzZXJ0KChzdC5zdF9tb2RlICYgMDExMSkgPT0gMCk7CisJY2xfYXNzZXJ0X2VxdWFsX2IoCisJCUdJVF9QRVJNU19JU19FWEVDKGV4cGVjdF9tb2RlKSwgR0lUX1BFUk1TX0lTX0VYRUMoc3Quc3RfbW9kZSkpOwogCi0JY2xfYXNzZXJ0KChleHBlY3RfbW9kZSAmIDAxNzAwMDApID09IChzdC5zdF9tb2RlICYgMDE3MDAwMCkpOworCWNsX2Fzc2VydF9lcXVhbF9pX2ZtdCgKKwkJR0lUX01PREVfVFlQRShleHBlY3RfbW9kZSksIEdJVF9NT0RFX1RZUEUoc3Quc3RfbW9kZSksICIlMDdvIik7CiB9CiAKIHZvaWQgdGVzdF9yZXBvX2luaXRfX2V4dGVuZGVkX3dpdGhfdGVtcGxhdGUodm9pZCkKQEAgLTQyNyw2ICs0MzYsNyBAQAogCWdpdF9idWYgZXhwZWN0ZWQgPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X2J1ZiBhY3R1YWwgPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X3JlcG9zaXRvcnlfaW5pdF9vcHRpb25zIG9wdHMgPSBHSVRfUkVQT1NJVE9SWV9JTklUX09QVElPTlNfSU5JVDsKKwlpbnQgZmlsZW1vZGU7CiAKIAljbF9zZXRfY2xlYW51cCgmY2xlYW51cF9yZXBvc2l0b3J5LCAidGVtcGxhdGVkLmdpdCIpOwogCkBAIC00NTAsMTMgKzQ2MCwxNSBAQAogCWdpdF9idWZfZnJlZSgmZXhwZWN0ZWQpOwogCWdpdF9idWZfZnJlZSgmYWN0dWFsKTsKIAotCWFzc2VydF9ob29rc19tYXRjaCgKLQkJY2xfZml4dHVyZSgidGVtcGxhdGUiKSwgZ2l0X3JlcG9zaXRvcnlfcGF0aChfcmVwbyksCi0JCSJob29rcy91cGRhdGUuc2FtcGxlIiwgdHJ1ZSk7CisJZmlsZW1vZGUgPSBjbF9yZXBvX2dldF9ib29sKF9yZXBvLCAiY29yZS5maWxlbW9kZSIpOwogCiAJYXNzZXJ0X2hvb2tzX21hdGNoKAogCQljbF9maXh0dXJlKCJ0ZW1wbGF0ZSIpLCBnaXRfcmVwb3NpdG9yeV9wYXRoKF9yZXBvKSwKLQkJImhvb2tzL2xpbmsuc2FtcGxlIiwgdHJ1ZSk7CisJCSJob29rcy91cGRhdGUuc2FtcGxlIiwgZmlsZW1vZGUpOworCisJYXNzZXJ0X2hvb2tzX21hdGNoKAorCQljbF9maXh0dXJlKCJ0ZW1wbGF0ZSIpLCBnaXRfcmVwb3NpdG9yeV9wYXRoKF9yZXBvKSwKKwkJImhvb2tzL2xpbmsuc2FtcGxlIiwgZmlsZW1vZGUpOwogfQogCiB2b2lkIHRlc3RfcmVwb19pbml0X19leHRlbmRlZF93aXRoX3RlbXBsYXRlX2FuZF9zaGFyZWRfbW9kZSh2b2lkKQpAQCAtNDY0LDcgKzQ3Niw2IEBACiAJZ2l0X2J1ZiBleHBlY3RlZCA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfYnVmIGFjdHVhbCA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfcmVwb3NpdG9yeV9pbml0X29wdGlvbnMgb3B0cyA9IEdJVF9SRVBPU0lUT1JZX0lOSVRfT1BUSU9OU19JTklUOwotCWdpdF9jb25maWcgKmNvbmZpZzsKIAlpbnQgZmlsZW1vZGUgPSB0cnVlOwogCWNvbnN0IGNoYXIgKnJlcG9fcGF0aCA9IE5VTEw7CiAKQEAgLTQ4MCw5ICs0OTEsNyBAQAogCWNsX2Fzc2VydCghZ2l0X3JlcG9zaXRvcnlfaXNfYmFyZShfcmVwbykpOwogCWNsX2Fzc2VydCghZ2l0X19zdWZmaXhjbXAoZ2l0X3JlcG9zaXRvcnlfcGF0aChfcmVwbyksICIvaW5pdF9zaGFyZWRfZnJvbV90cGwvLmdpdC8iKSk7CiAKLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNvbmZpZywgX3JlcG8pKTsKLQljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9ib29sKCZmaWxlbW9kZSwgY29uZmlnLCAiY29yZS5maWxlbW9kZSIpKTsKLQlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKKwlmaWxlbW9kZSA9IGNsX3JlcG9fZ2V0X2Jvb2woX3JlcG8sICJjb3JlLmZpbGVtb2RlIik7CiAKIAljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JlYWRidWZmZXIoCiAJCSZleHBlY3RlZCwgY2xfZml4dHVyZSgidGVtcGxhdGUvZGVzY3JpcHRpb24iKSkpOwpAQCAtNTMwLDMgKzUzOSw2OCBAQAogCiAJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZWluaXQpOwogfQorCit2b2lkIHRlc3RfcmVwb19pbml0X19pbml0X3dpdGhfaW5pdGlhbF9jb21taXQodm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCisJY2xfc2V0X2NsZWFudXAoJmNsZWFudXBfcmVwb3NpdG9yeSwgImNvbW1pdHRlZCIpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgcmVwb3NpdG9yeSAqLworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luaXQoJl9yZXBvLCAiY29tbWl0dGVkIiwgMCkpOworCisJLyogSW5pdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aGVuIHJlcXVlc3RlZCBmb3IgYSBuZXcgcmVwbyAqLworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgX3JlcG8pKTsKKworCS8qIENyZWF0ZSBhIGZpbGUgc28gd2UgY2FuIGNvbW1pdCBpdAorCSAqCisJICogSWYgeW91IGFyZSB3cml0aW5nIGNvZGUgb3V0c2lkZSB0aGUgdGVzdCBzdWl0ZSwgeW91IGNhbiBjcmVhdGUgdGhpcworCSAqIGZpbGUgYW55IHdheSB0aGF0IHlvdSBsaWtlLCBzdWNoIGFzOgorCSAqICAgICAgRklMRSAqZnAgPSBmb3BlbigiY29tbWl0dGVkL2ZpbGUudHh0IiwgInciKTsKKwkgKiAgICAgIGZwdXRzKCJzb21lIHN0dWZmXG4iLCBmcCk7CisJICogICAgICBmY2xvc2UoZnApOworCSAqIFdlIGxpa2UgdG8gdXNlIHRoZSBoZWxwIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgZG8gZXJyb3IgZGV0ZWN0aW9uCisJICogaW4gYSB3YXkgdGhhdCdzIGVhc2lseSBjb21wYXRpYmxlIHdpdGggb3VyIHRlc3Qgc3VpdGUuCisJICovCisJY2xfZ2l0X21rZmlsZSgiY29tbWl0dGVkL2ZpbGUudHh0IiwgInNvbWUgc3R1ZmZcbiIpOworCisJLyogQWRkIGZpbGUgdG8gdGhlIGluZGV4ICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJmaWxlLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKworCS8qIEludGVudGlvbmFsbHkgbm90IHVzaW5nIGNsX3JlcG9fY29tbWl0X2Zyb21faW5kZXggaGVyZSBzbyB0aGlzIGNvZGUKKwkgKiBjYW4gYmUgdXNlZCBhcyBhbiBleGFtcGxlIG9mIGhvdyBhbiBpbml0aWFsIGNvbW1pdCBpcyB0eXBpY2FsbHkKKwkgKiBtYWRlIHRvIGEgcmVwb3NpdG9yeS4uLgorCSAqLworCisJLyogTWFrZSBzdXJlIHdlJ3JlIHJlYWR5IHRvIHVzZSBnaXRfc2lnbmF0dXJlX2RlZmF1bHQgOi0pICovCisJeworCQlnaXRfY29uZmlnICpjZmcsICpsb2NhbDsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfY29uZmlnKCZjZmcsIF9yZXBvKSk7CisJCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9sZXZlbCgmbG9jYWwsIGNmZywgR0lUX0NPTkZJR19MRVZFTF9MT0NBTCkpOworCQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcobG9jYWwsICJ1c2VyLm5hbWUiLCAiVGVzdCBVc2VyIikpOworCQljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcobG9jYWwsICJ1c2VyLmVtYWlsIiwgInRAZXhhbXBsZS5jb20iKSk7CisJCWdpdF9jb25maWdfZnJlZShsb2NhbCk7CisJCWdpdF9jb25maWdfZnJlZShjZmcpOworCX0KKworCS8qIENyZWF0ZSBhIGNvbW1pdCB3aXRoIHRoZSBuZXcgY29udGVudHMgb2YgdGhlIGluZGV4ICovCisJeworCQlnaXRfc2lnbmF0dXJlICpzaWc7CisJCWdpdF9vaWQgdHJlZV9pZCwgY29tbWl0X2lkOworCQlnaXRfdHJlZSAqdHJlZTsKKworCQljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX2RlZmF1bHQoJnNpZywgX3JlcG8pKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlX3RyZWUoJnRyZWVfaWQsIGluZGV4KSk7CisJCWNsX2dpdF9wYXNzKGdpdF90cmVlX2xvb2t1cCgmdHJlZSwgX3JlcG8sICZ0cmVlX2lkKSk7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF9jcmVhdGVfdigKKwkJCSZjb21taXRfaWQsIF9yZXBvLCAiSEVBRCIsIHNpZywgc2lnLAorCQkJTlVMTCwgIkZpcnN0IiwgdHJlZSwgMCkpOworCisJCWdpdF90cmVlX2ZyZWUodHJlZSk7CisJCWdpdF9zaWduYXR1cmVfZnJlZShzaWcpOworCX0KKworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9pdGVyYXRvci5jIGIvdGVzdHMvcmVwby9pdGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVwby9pdGVyYXRvci5jCnJlbmFtZSB0byB0ZXN0cy9yZXBvL2l0ZXJhdG9yLmMKaW5kZXggMTFhN2QyYS4uNTZiNTE4NSAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZXBvL2l0ZXJhdG9yLmMKKysrIGIvdGVzdHMvcmVwby9pdGVyYXRvci5jCkBAIC05MDYsNiArOTA2LDcgQEAKIAlzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0X2Jhc2VbXSA9IHsKIAkJImhlYWRzL2JyMiIsCiAJCSJoZWFkcy9kaXIiLAorCQkiaGVhZHMvbG9uZy1maWxlLW5hbWUiLAogCQkiaGVhZHMvbWFzdGVyIiwKIAkJImhlYWRzL3BhY2tlZC10ZXN0IiwKIAkJImhlYWRzL3N1YnRyZWVzIiwKQEAgLTkyMiw2ICs5MjMsNDAgQEAKIAogCWNsX2dpdF9wYXNzKGdpdF9pdGVyYXRvcl9mb3JfZmlsZXN5c3RlbSgKIAkJJmksICJ0ZXN0cmVwby8uZ2l0L3JlZnMiLCAwLCBOVUxMLCBOVUxMKSk7Ci0JZXhwZWN0X2l0ZXJhdG9yX2l0ZW1zKGksIDExLCBleHBlY3RfYmFzZSwgMTEsIGV4cGVjdF9iYXNlKTsKKwlleHBlY3RfaXRlcmF0b3JfaXRlbXMoaSwgMTIsIGV4cGVjdF9iYXNlLCAxMiwgZXhwZWN0X2Jhc2UpOworCWdpdF9pdGVyYXRvcl9mcmVlKGkpOworfQorCit2b2lkIHRlc3RfcmVwb19pdGVyYXRvcl9fZnNfcHJlc2VydmVzX2Vycm9yKHZvaWQpCit7CisJZ2l0X2l0ZXJhdG9yICppOworCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZTsKKworCWlmICghY2xfaXNfY2htb2Rfc3VwcG9ydGVkKCkpCisJCXJldHVybjsKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImVtcHR5X3N0YW5kYXJkX3JlcG8iKTsKKworCWNsX211c3RfcGFzcyhwX21rZGlyKCJlbXB0eV9zdGFuZGFyZF9yZXBvL3IiLCAwNzc3KSk7CisJY2xfZ2l0X21rZmlsZSgiZW1wdHlfc3RhbmRhcmRfcmVwby9yL2EiLCAiaGVsbG8iKTsKKwljbF9tdXN0X3Bhc3MocF9ta2RpcigiZW1wdHlfc3RhbmRhcmRfcmVwby9yL2IiLCAwNzc3KSk7CisJY2xfZ2l0X21rZmlsZSgiZW1wdHlfc3RhbmRhcmRfcmVwby9yL2IvcHJvYmxlbSIsICJub3QgbWUiKTsKKwljbF9tdXN0X3Bhc3MocF9jaG1vZCgiZW1wdHlfc3RhbmRhcmRfcmVwby9yL2IiLCAwMDAwKSk7CisJY2xfbXVzdF9wYXNzKHBfbWtkaXIoImVtcHR5X3N0YW5kYXJkX3JlcG8vci9jIiwgMDc3NykpOworCWNsX2dpdF9ta2ZpbGUoImVtcHR5X3N0YW5kYXJkX3JlcG8vci9kIiwgImZpbmFsIik7CisKKwljbF9naXRfcGFzcyhnaXRfaXRlcmF0b3JfZm9yX2ZpbGVzeXN0ZW0oCisJCSZpLCAiZW1wdHlfc3RhbmRhcmRfcmVwby9yIiwgMCwgTlVMTCwgTlVMTCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2l0ZXJhdG9yX2FkdmFuY2UoJmUsIGkpKTsgLyogYSAqLworCWNsX2dpdF9mYWlsKGdpdF9pdGVyYXRvcl9hZHZhbmNlKCZlLCBpKSk7IC8qIGIgKi8KKwljbF9hc3NlcnQoZ2l0ZXJyX2xhc3QoKSk7CisJY2xfYXNzZXJ0KGdpdGVycl9sYXN0KCktPm1lc3NhZ2UgIT0gTlVMTCk7CisJLyogc2tpcCAnYy8nIGVtcHR5IGRpcmVjdG9yeSAqLworCWNsX2dpdF9wYXNzKGdpdF9pdGVyYXRvcl9hZHZhbmNlKCZlLCBpKSk7IC8qIGQgKi8KKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfSVRFUk9WRVIsIGdpdF9pdGVyYXRvcl9hZHZhbmNlKCZlLCBpKSk7CisKKwljbF9tdXN0X3Bhc3MocF9jaG1vZCgiZW1wdHlfc3RhbmRhcmRfcmVwby9yL2IiLCAwNzc3KSk7CisKIAlnaXRfaXRlcmF0b3JfZnJlZShpKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9tZXNzYWdlLmMgYi90ZXN0cy9yZXBvL21lc3NhZ2UuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXBvL21lc3NhZ2UuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9tZXNzYWdlLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9vcGVuLmMgYi90ZXN0cy9yZXBvL29wZW4uYwpzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlcG8vb3Blbi5jCnJlbmFtZSB0byB0ZXN0cy9yZXBvL29wZW4uYwppbmRleCA4NDA4NTg1Li43Y2ZlMDQxIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3JlcG8vb3Blbi5jCisrKyBiL3Rlc3RzL3JlcG8vb3Blbi5jCkBAIC02OSwxNCArNjksMjMgQEAKIAljbF9maXh0dXJlX2NsZWFudXAoImF0dHIiKTsKIH0KIAorc3RhdGljIHZvaWQgbWFrZV9naXRsaW5rX2Rpcihjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmxpbmt0ZXh0KQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfbWtkaXIoZGlyLCBOVUxMLCAwNzc3LCBHSVRfTUtESVJfVkVSSUZZX0RJUikpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIGRpciwgIi5naXQiKSk7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKHBhdGgucHRyLCBsaW5rdGV4dCk7CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKK30KKwogdm9pZCB0ZXN0X3JlcG9fb3Blbl9fZ2l0bGlua2VkKHZvaWQpCiB7CiAJLyogbmVlZCB0byBoYXZlIGJvdGggcmVwbyBkaXIgYW5kIHdvcmtkaXIgc2V0IHVwIGNvcnJlY3RseSAqLwogCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiZW1wdHlfc3RhbmRhcmRfcmVwbyIpOwogCWdpdF9yZXBvc2l0b3J5ICpyZXBvMjsKIAotCWNsX211c3RfcGFzcyhwX21rZGlyKCJhbHRlcm5hdGUiLCAwNzc3KSk7Ci0JY2xfZ2l0X21rZmlsZSgiYWx0ZXJuYXRlLy5naXQiLCAiZ2l0ZGlyOiAuLi9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXQiKTsKKwltYWtlX2dpdGxpbmtfZGlyKCJhbHRlcm5hdGUiLCAiZ2l0ZGlyOiAuLi9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXQiKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8yLCAiYWx0ZXJuYXRlIikpOwogCkBAIC0xOTMsMTIgKzIwMiwxMSBAQAogCiAJY2xfZ2l0X3NhbmRib3hfaW5pdCgiYXR0ciIpOwogCi0JY2xfZ2l0X3Bhc3MocF9ta2RpcigiYWx0ZXJuYXRlIiwgMDc3NykpOwogCWNsX2dpdF9wYXNzKHBfbWtkaXIoImludmFsaWQiLCAwNzc3KSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2Rpcl9yKCJpbnZhbGlkMi8uZ2l0IiwgTlVMTCwgMDc3NykpOwogCiAJZm9yIChzY2FuID0gYmFkX2xpbmtzOyAqc2NhbiAhPSBOVUxMOyBzY2FuKyspIHsKLQkJY2xfZ2l0X3Jld3JpdGVmaWxlKCJhbHRlcm5hdGUvLmdpdCIsICpzY2FuKTsKKwkJbWFrZV9naXRsaW5rX2RpcigiYWx0ZXJuYXRlIiwgKnNjYW4pOwogCQljbF9naXRfZmFpbChnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgmcmVwbywgImFsdGVybmF0ZSIsIDAsIE5VTEwpKTsKIAl9CiAKQEAgLTMxNCw0ICszMjIsNTUgQEAKIAlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKIAlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOwogCWNsX2ZpeHR1cmVfY2xlYW51cCgiZW1wdHlfc3RhbmRhcmRfcmVwbyIpOworCisJZ2l0X2Z1dGlsc19kaXJzX2dsb2JhbF9zaHV0ZG93bigpOworfQorCit2b2lkIHRlc3RfcmVwb19vcGVuX19mb3JjZV9iYXJlKHZvaWQpCit7CisJLyogbmVlZCB0byBoYXZlIGJvdGggcmVwbyBkaXIgYW5kIHdvcmtkaXIgc2V0IHVwIGNvcnJlY3RseSAqLworCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiZW1wdHlfc3RhbmRhcmRfcmVwbyIpOworCWdpdF9yZXBvc2l0b3J5ICpiYXJlcmVwbzsKKworCW1ha2VfZ2l0bGlua19kaXIoImFsdGVybmF0ZSIsICJnaXRkaXI6IC4uL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdCIpOworCisJY2xfYXNzZXJ0KCFnaXRfcmVwb3NpdG9yeV9pc19iYXJlKHJlcG8pKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJmJhcmVyZXBvLCAiYWx0ZXJuYXRlIikpOworCWNsX2Fzc2VydCghZ2l0X3JlcG9zaXRvcnlfaXNfYmFyZShiYXJlcmVwbykpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUoYmFyZXJlcG8pOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3Blbl9iYXJlKAorCQkmYmFyZXJlcG8sICJlbXB0eV9zdGFuZGFyZF9yZXBvLy5naXQiKSk7CisJY2xfYXNzZXJ0KGdpdF9yZXBvc2l0b3J5X2lzX2JhcmUoYmFyZXJlcG8pKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKGJhcmVyZXBvKTsKKworCWNsX2dpdF9mYWlsKGdpdF9yZXBvc2l0b3J5X29wZW5fYmFyZSgmYmFyZXJlcG8sICJhbHRlcm5hdGUvLmdpdCIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KAorCQkmYmFyZXJlcG8sICJhbHRlcm5hdGUvLmdpdCIsIEdJVF9SRVBPU0lUT1JZX09QRU5fQkFSRSwgTlVMTCkpOworCWNsX2Fzc2VydChnaXRfcmVwb3NpdG9yeV9pc19iYXJlKGJhcmVyZXBvKSk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShiYXJlcmVwbyk7CisKKwljbF9naXRfcGFzcyhwX21rZGlyKCJlbXB0eV9zdGFuZGFyZF9yZXBvL3N1YmRpciIsIDA3NzcpKTsKKwljbF9naXRfbWtmaWxlKCJlbXB0eV9zdGFuZGFyZF9yZXBvL3N1YmRpci9zb21ldGhpbmcudHh0IiwgInNvbWV0aGluZyIpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X3JlcG9zaXRvcnlfb3Blbl9iYXJlKAorCQkmYmFyZXJlcG8sICJlbXB0eV9zdGFuZGFyZF9yZXBvL3N1YmRpciIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW5fZXh0KAorCQkmYmFyZXJlcG8sICJlbXB0eV9zdGFuZGFyZF9yZXBvL3N1YmRpciIsIEdJVF9SRVBPU0lUT1JZX09QRU5fQkFSRSwgTlVMTCkpOworCWNsX2Fzc2VydChnaXRfcmVwb3NpdG9yeV9pc19iYXJlKGJhcmVyZXBvKSk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShiYXJlcmVwbyk7CisKKwljbF9naXRfcGFzcyhwX21rZGlyKCJhbHRlcm5hdGUvc3ViZGlyIiwgMDc3NykpOworCWNsX2dpdF9wYXNzKHBfbWtkaXIoImFsdGVybmF0ZS9zdWJkaXIvc3ViMiIsIDA3NzcpKTsKKwljbF9naXRfbWtmaWxlKCJhbHRlcm5hdGUvc3ViZGlyL3N1YjIvc29tZXRoaW5nLnR4dCIsICJzb21ldGhpbmciKTsKKworCWNsX2dpdF9mYWlsKGdpdF9yZXBvc2l0b3J5X29wZW5fYmFyZSgmYmFyZXJlcG8sICJhbHRlcm5hdGUvc3ViZGlyL3N1YjIiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgKKwkJJmJhcmVyZXBvLCAiYWx0ZXJuYXRlL3N1YmRpci9zdWIyIiwgR0lUX1JFUE9TSVRPUllfT1BFTl9CQVJFLCBOVUxMKSk7CisJY2xfYXNzZXJ0KGdpdF9yZXBvc2l0b3J5X2lzX2JhcmUoYmFyZXJlcG8pKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKGJhcmVyZXBvKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3JlcG8vcGF0aHNwZWMuYyBiL3Rlc3RzL3JlcG8vcGF0aHNwZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzQwNjZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVwby9wYXRoc3BlYy5jCkBAIC0wLDAgKzEsMzg1IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiZ2l0Mi9wYXRoc3BlYy5oIgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbzsKKwordm9pZCB0ZXN0X3JlcG9fcGF0aHNwZWNfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKK30KKwordm9pZCB0ZXN0X3JlcG9fcGF0aHNwZWNfX2NsZWFudXAodm9pZCkKK3sKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7CisJZ19yZXBvID0gTlVMTDsKK30KKworc3RhdGljIGNoYXIgKnN0cjBbXSA9IHsgIipfZmlsZSIsICJuZXdfZmlsZSIsICJnYXJiYWdlIiB9Oworc3RhdGljIGNoYXIgKnN0cjFbXSA9IHsgIipfRklMRSIsICJORVdfRklMRSIsICJHQVJCQUdFIiB9Oworc3RhdGljIGNoYXIgKnN0cjJbXSA9IHsgInN0YWdlZF8qIiB9Oworc3RhdGljIGNoYXIgKnN0cjNbXSA9IHsgIiFzdWJkaXIiLCAiKl9maWxlIiwgIm5ld19maWxlIiB9Oworc3RhdGljIGNoYXIgKnN0cjRbXSA9IHsgIioiIH07CitzdGF0aWMgY2hhciAqc3RyNVtdID0geyAiUyoiIH07CisKK3ZvaWQgdGVzdF9yZXBvX3BhdGhzcGVjX193b3JrZGlyMCh2b2lkKQoreworCWdpdF9zdHJhcnJheSBzOworCWdpdF9wYXRoc3BlYyAqcHM7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm07CisKKwkvKiB7ICIqX2ZpbGUiLCAibmV3X2ZpbGUiLCAiZ2FyYmFnZSIgfSAqLworCXMuc3RyaW5ncyA9IHN0cjA7IHMuY291bnQgPSBBUlJBWV9TSVpFKHN0cjApOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19uZXcoJnBzLCAmcykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywgMCwgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMTAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnljb3VudChtKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF93b3JrZGlyKCZtLCBnX3JlcG8sCisJCUdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTLCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9zeigxMCwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDEsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiZ2FyYmFnZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeShtLCAwKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF93b3JrZGlyKCZtLCBnX3JlcG8sCisJCUdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTIHwgR0lUX1BBVEhTUEVDX0ZBSUxVUkVTX09OTFksIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zeigxLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnljb3VudChtKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWdpdF9wYXRoc3BlY19mcmVlKHBzKTsKK30KKwordm9pZCB0ZXN0X3JlcG9fcGF0aHNwZWNfX3dvcmtkaXIxKHZvaWQpCit7CisJZ2l0X3N0cmFycmF5IHM7CisJZ2l0X3BhdGhzcGVjICpwczsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdCAqbTsKKworCS8qIHsgIipfRklMRSIsICJORVdfRklMRSIsICJHQVJCQUdFIiB9ICovCisJcy5zdHJpbmdzID0gc3RyMTsgcy5jb3VudCA9IEFSUkFZX1NJWkUoc3RyMSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX25ldygmcHMsICZzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfd29ya2RpcigmbSwgZ19yZXBvLAorCQlHSVRfUEFUSFNQRUNfSUdOT1JFX0NBU0UsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDEwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywKKwkJR0lUX1BBVEhTUEVDX1VTRV9DQVNFLCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJY2xfZ2l0X2ZhaWwoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywKKwkJR0lUX1BBVEhTUEVDX1VTRV9DQVNFIHwgR0lUX1BBVEhTUEVDX05PX01BVENIX0VSUk9SLCBwcykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywKKwkJR0lUX1BBVEhTUEVDX0lHTk9SRV9DQVNFIHwgR0lUX1BBVEhTUEVDX0ZJTkRfRkFJTFVSRVMsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDEwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMSwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfd29ya2RpcigmbSwgZ19yZXBvLAorCQlHSVRfUEFUSFNQRUNfVVNFX0NBU0UgfCBHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUywgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDMsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJZ2l0X3BhdGhzcGVjX2ZyZWUocHMpOworfQorCit2b2lkIHRlc3RfcmVwb19wYXRoc3BlY19fd29ya2RpcjIodm9pZCkKK3sKKwlnaXRfc3RyYXJyYXkgczsKKwlnaXRfcGF0aHNwZWMgKnBzOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptOworCisJLyogeyAic3RhZ2VkXyoiIH0gKi8KKwlzLnN0cmluZ3MgPSBzdHIyOyBzLmNvdW50ID0gQVJSQVlfU0laRShzdHIyKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbmV3KCZwcywgJnMpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF93b3JrZGlyKCZtLCBnX3JlcG8sIDAsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDUsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobSkpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfd29ya2RpcigmbSwgZ19yZXBvLAorCQlHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUywgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooNSwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJY2xfZ2l0X2ZhaWwoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywKKwkJR0lUX1BBVEhTUEVDX05PX0dMT0IgfCBHSVRfUEFUSFNQRUNfTk9fTUFUQ0hfRVJST1IsIHBzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfd29ya2RpcigmbSwgZ19yZXBvLAorCQlHSVRfUEFUSFNQRUNfTk9fR0xPQiB8IEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTLCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMSwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7Cit9CisKK3ZvaWQgdGVzdF9yZXBvX3BhdGhzcGVjX193b3JrZGlyMyh2b2lkKQoreworCWdpdF9zdHJhcnJheSBzOworCWdpdF9wYXRoc3BlYyAqcHM7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm07CisKKwkvKiB7ICIhc3ViZGlyIiwgIipfZmlsZSIsICJuZXdfZmlsZSIgfSAqLworCXMuc3RyaW5ncyA9IHN0cjM7IHMuY291bnQgPSBBUlJBWV9TSVpFKHN0cjMpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19uZXcoJnBzLCAmcykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywgMCwgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooNywgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF93b3JrZGlyKCZtLCBnX3JlcG8sCisJCUdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTLCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9zeig3LCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCisJY2xfYXNzZXJ0X2VxdWFsX3MoImN1cnJlbnRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibW9kaWZpZWRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDEpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibmV3X2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCAyKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN0YWdlZF9jaGFuZ2VzX21vZGlmaWVkX2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCAzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN0YWdlZF9kZWxldGVfbW9kaWZpZWRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDQpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic3RhZ2VkX25ld19maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgNSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfbmV3X2ZpbGVfbW9kaWZpZWRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDYpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhOVUxMLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCA3KSk7CisKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJZ2l0X3BhdGhzcGVjX2ZyZWUocHMpOworfQorCit2b2lkIHRlc3RfcmVwb19wYXRoc3BlY19fd29ya2RpcjQodm9pZCkKK3sKKwlnaXRfc3RyYXJyYXkgczsKKwlnaXRfcGF0aHNwZWMgKnBzOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptOworCisJLyogeyAiKiIgfSAqLworCXMuc3RyaW5ncyA9IHN0cjQ7IHMuY291bnQgPSBBUlJBWV9TSVpFKHN0cjQpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19uZXcoJnBzLCAmcykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX3dvcmtkaXIoJm0sIGdfcmVwbywgMCwgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMTMsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCLov5kiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCAxMikpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7Cit9CisKKwordm9pZCB0ZXN0X3JlcG9fcGF0aHNwZWNfX2luZGV4MCh2b2lkKQoreworCWdpdF9pbmRleCAqaWR4OworCWdpdF9zdHJhcnJheSBzOworCWdpdF9wYXRoc3BlYyAqcHM7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm07CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaWR4LCBnX3JlcG8pKTsKKworCS8qIHsgIipfZmlsZSIsICJuZXdfZmlsZSIsICJnYXJiYWdlIiB9ICovCisJcy5zdHJpbmdzID0gc3RyMDsgcy5jb3VudCA9IEFSUkFZX1NJWkUoc3RyMCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX25ldygmcHMsICZzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfaW5kZXgoJm0sIGlkeCwgMCwgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooOSwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY3VycmVudF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJtb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfbmV3X2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCAzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN0YWdlZF9uZXdfZmlsZV9kZWxldGVkX2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCA0KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN0YWdlZF9uZXdfZmlsZV9tb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgNSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdWJkaXIvY3VycmVudF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgNikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdWJkaXIvZGVsZXRlZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgNykpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdWJkaXIvbW9kaWZpZWRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDgpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhOVUxMLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCA5KSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF9pbmRleCgmbSwgaWR4LAorCQlHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUywgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooOSwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibmV3X2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnkobSwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJnYXJiYWdlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5KG0sIDEpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhOVUxMLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnkobSwgMikpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7CisJZ2l0X2luZGV4X2ZyZWUoaWR4KTsKK30KKwordm9pZCB0ZXN0X3JlcG9fcGF0aHNwZWNfX2luZGV4MSh2b2lkKQoreworCS8qIEN1cnJlbnRseSB0aGUgVVNFX0NBU0UgYW5kIElHTk9SRV9DQVNFIGZsYWdzIGRvbid0IHdvcmsgb24gdGhlCisJICogaW5kZXggYmVjYXVzZSB0aGUgaW5kZXggc29ydCBvcmRlciBmb3IgdGhlIGluZGV4IGl0ZXJhdG9yIGlzCisJICogc2V0IGJ5IHRoZSBpbmRleCBpdHNlbGYuICBJIHRoaW5rIHRoZSBjb3JyZWN0IGZpeCBpcyBmb3IgdGhlCisJICogaW5kZXggbm90IHRvIGVtYmVkIGEgZ2xvYmFsIHNvcnQgb3JkZXIgYnV0IHRvIHN1cHBvcnQgdHJhdmVyc2FsCisJICogaW4gZWl0aGVyIGNhc2Ugc2Vuc2l0aXZlIG9yIGluc2Vuc2l0aXZlIG9yZGVyIGluIGEgc3RhdGVsZXNzCisJICogbWFubmVyLgorCSAqCisJICogQW55aG93LCBhcyBpdCBpcywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gZG9pbmcgdGhpcyB0ZXN0LgorCSAqLworI2lmIDAKKwlnaXRfaW5kZXggKmlkeDsKKwlnaXRfc3RyYXJyYXkgczsKKwlnaXRfcGF0aHNwZWMgKnBzOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmlkeCwgZ19yZXBvKSk7CisKKwkvKiB7ICIqX0ZJTEUiLCAiTkVXX0ZJTEUiLCAiR0FSQkFHRSIgfSAqLworCXMuc3RyaW5ncyA9IHN0cjE7IHMuY291bnQgPSBBUlJBWV9TSVpFKHN0cjEpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19uZXcoJnBzLCAmcykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX2luZGV4KCZtLCBpZHgsCisJCUdJVF9QQVRIU1BFQ19VU0VfQ0FTRSwgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX2luZGV4KCZtLCBpZHgsCisJCUdJVF9QQVRIU1BFQ19VU0VfQ0FTRSB8IEdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTLCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9zeigwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMywgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfaW5kZXgoJm0sIGlkeCwKKwkJR0lUX1BBVEhTUEVDX0lHTk9SRV9DQVNFIHwgR0lUX1BBVEhTUEVDX0ZJTkRfRkFJTFVSRVMsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDEwLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7CisJZ2l0X2luZGV4X2ZyZWUoaWR4KTsKKyNlbmRpZgorfQorCit2b2lkIHRlc3RfcmVwb19wYXRoc3BlY19fdHJlZTAodm9pZCkKK3sKKwlnaXRfb2JqZWN0ICp0cmVlOworCWdpdF9zdHJhcnJheSBzOworCWdpdF9wYXRoc3BlYyAqcHM7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3QgKm07CisKKwkvKiB7ICIqX2ZpbGUiLCAibmV3X2ZpbGUiLCAiZ2FyYmFnZSIgfSAqLworCXMuc3RyaW5ncyA9IHN0cjA7IHMuY291bnQgPSBBUlJBWV9TSVpFKHN0cjApOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19uZXcoJnBzLCAmcykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JldnBhcnNlX3NpbmdsZSgmdHJlZSwgZ19yZXBvLCAiSEVBRH4yXnt0cmVlfSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF90cmVlKCZtLCAoZ2l0X3RyZWUgKil0cmVlLAorCQlHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUywgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooNCwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImN1cnJlbnRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfcygibW9kaWZpZWRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDEpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic3RhZ2VkX2RlbGV0ZV9tb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMykpOworCWNsX2Fzc2VydF9lcXVhbF9zKE5VTEwsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDQpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJuZXdfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeShtLCAwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImdhcmJhZ2UiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnkobSwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKE5VTEwsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeShtLCAyKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWdpdF9vYmplY3RfZnJlZSh0cmVlKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJnRyZWUsIGdfcmVwbywgIkhFQURee3RyZWV9IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhzcGVjX21hdGNoX3RyZWUoJm0sIChnaXRfdHJlZSAqKXRyZWUsCisJCUdJVF9QQVRIU1BFQ19GSU5EX0ZBSUxVUkVTLCBwcykpOworCWNsX2Fzc2VydF9lcXVhbF9zeig3LCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeWNvdW50KG0pKTsKKwljbF9hc3NlcnRfZXF1YWxfcygiY3VycmVudF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJtb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMikpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfZGVsZXRlX21vZGlmaWVkX2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCAzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN1YmRpci9jdXJyZW50X2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCA0KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN1YmRpci9kZWxldGVkX2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCA1KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN1YmRpci9tb2RpZmllZF9maWxlIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgNikpOworCWNsX2Fzc2VydF9lcXVhbF9zKE5VTEwsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDcpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJuZXdfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeShtLCAwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImdhcmJhZ2UiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnkobSwgMSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKE5VTEwsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeShtLCAyKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWdpdF9vYmplY3RfZnJlZSh0cmVlKTsKKworCWdpdF9wYXRoc3BlY19mcmVlKHBzKTsKK30KKwordm9pZCB0ZXN0X3JlcG9fcGF0aHNwZWNfX3RyZWU1KHZvaWQpCit7CisJZ2l0X29iamVjdCAqdHJlZTsKKwlnaXRfc3RyYXJyYXkgczsKKwlnaXRfcGF0aHNwZWMgKnBzOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0ICptOworCisJLyogeyAiUyoiIH0gKi8KKwlzLnN0cmluZ3MgPSBzdHI1OyBzLmNvdW50ID0gQVJSQVlfU0laRShzdHI1KTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbmV3KCZwcywgJnMpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJnRyZWUsIGdfcmVwbywgIkhFQUR+Ml57dHJlZX0iKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfdHJlZSgmbSwgKGdpdF90cmVlICopdHJlZSwKKwkJR0lUX1BBVEhTUEVDX1VTRV9DQVNFIHwgR0lUX1BBVEhTUEVDX0ZJTkRfRkFJTFVSRVMsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zeigxLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mYWlsZWRfZW50cnljb3VudChtKSk7CisJZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZnJlZShtKTsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRoc3BlY19tYXRjaF90cmVlKCZtLCAoZ2l0X3RyZWUgKil0cmVlLAorCQlHSVRfUEFUSFNQRUNfSUdOT1JFX0NBU0UgfCBHSVRfUEFUSFNQRUNfRklORF9GQUlMVVJFUywgcHMpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooNSwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnljb3VudChtKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInN0YWdlZF9jaGFuZ2VzIiwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZW50cnkobSwgMCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfZGVsZXRlX21vZGlmaWVkX2ZpbGUiLCBnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9lbnRyeShtLCA0KSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZhaWxlZF9lbnRyeWNvdW50KG0pKTsKKwlnaXRfcGF0aHNwZWNfbWF0Y2hfbGlzdF9mcmVlKG0pOworCisJZ2l0X29iamVjdF9mcmVlKHRyZWUpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JldnBhcnNlX3NpbmdsZSgmdHJlZSwgZ19yZXBvLCAiSEVBRF57dHJlZX0iKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbWF0Y2hfdHJlZSgmbSwgKGdpdF90cmVlICopdHJlZSwKKwkJR0lUX1BBVEhTUEVDX0lHTk9SRV9DQVNFIHwgR0lUX1BBVEhTUEVDX0ZJTkRfRkFJTFVSRVMsIHBzKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDksIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5Y291bnQobSkpOworCWNsX2Fzc2VydF9lcXVhbF9zKCJzdGFnZWRfY2hhbmdlcyIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDApKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic3ViZGlyLnR4dCIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDUpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic3ViZGlyL2N1cnJlbnRfZmlsZSIsIGdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2VudHJ5KG0sIDYpKTsKKwljbF9hc3NlcnRfZXF1YWxfc3ooMCwgZ2l0X3BhdGhzcGVjX21hdGNoX2xpc3RfZmFpbGVkX2VudHJ5Y291bnQobSkpOworCWdpdF9wYXRoc3BlY19tYXRjaF9saXN0X2ZyZWUobSk7CisKKwlnaXRfb2JqZWN0X2ZyZWUodHJlZSk7CisKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7Cit9CisKK3ZvaWQgdGVzdF9yZXBvX3BhdGhzcGVjX19pbl9tZW1vcnkodm9pZCkKK3sKKwlzdGF0aWMgY2hhciAqc3RyaW5nc1tdID0geyAib25lIiwgInR3byoiLCAiIXRocmVlKiIsICIqZm91ciIgfTsKKwlnaXRfc3RyYXJyYXkgcyA9IHsgc3RyaW5ncywgQVJSQVlfU0laRShzdHJpbmdzKSB9OworCWdpdF9wYXRoc3BlYyAqcHM7CisKKwljbF9naXRfcGFzcyhnaXRfcGF0aHNwZWNfbmV3KCZwcywgJnMpKTsKKworCWNsX2Fzc2VydChnaXRfcGF0aHNwZWNfbWF0Y2hlc19wYXRoKHBzLCAwLCAib25lIikpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhzcGVjX21hdGNoZXNfcGF0aChwcywgMCwgIk9ORSIpKTsKKwljbF9hc3NlcnQoZ2l0X3BhdGhzcGVjX21hdGNoZXNfcGF0aChwcywgR0lUX1BBVEhTUEVDX0lHTk9SRV9DQVNFLCAiT05FIikpOworCWNsX2Fzc2VydChnaXRfcGF0aHNwZWNfbWF0Y2hlc19wYXRoKHBzLCAwLCAidHdvIikpOworCWNsX2Fzc2VydChnaXRfcGF0aHNwZWNfbWF0Y2hlc19wYXRoKHBzLCAwLCAidHdvLnR4dCIpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoc3BlY19tYXRjaGVzX3BhdGgocHMsIDAsICJ0aHJlZS50eHQiKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoc3BlY19tYXRjaGVzX3BhdGgocHMsIDAsICJhbnl0aGluZy5mb3VyIikpOworCWNsX2Fzc2VydCghZ2l0X3BhdGhzcGVjX21hdGNoZXNfcGF0aChwcywgMCwgInRocmVlLmZvdXIiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aHNwZWNfbWF0Y2hlc19wYXRoKHBzLCAwLCAibm9tYXRjaCIpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoc3BlY19tYXRjaGVzX3BhdGgocHMsIEdJVF9QQVRIU1BFQ19OT19HTE9CLCAidHdvIikpOworCWNsX2Fzc2VydChnaXRfcGF0aHNwZWNfbWF0Y2hlc19wYXRoKHBzLCBHSVRfUEFUSFNQRUNfTk9fR0xPQiwgInR3byoiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aHNwZWNfbWF0Y2hlc19wYXRoKHBzLCBHSVRfUEFUSFNQRUNfTk9fR0xPQiwgImFueWZvdXIiKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoc3BlY19tYXRjaGVzX3BhdGgocHMsIEdJVF9QQVRIU1BFQ19OT19HTE9CLCAiKmZvdXIiKSk7CisKKwlnaXRfcGF0aHNwZWNfZnJlZShwcyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JlcG8vcmVwb19oZWxwZXJzLmMgYi90ZXN0cy9yZXBvL3JlcG9faGVscGVycy5jCnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVwby9yZXBvX2hlbHBlcnMuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9yZXBvX2hlbHBlcnMuYwppbmRleCA3NDkwMmU0Li4zZDQ3N2ZmIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3JlcG8vcmVwb19oZWxwZXJzLmMKKysrIGIvdGVzdHMvcmVwby9yZXBvX2hlbHBlcnMuYwpAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlICJyZXBvX2hlbHBlcnMuaCIKICNpbmNsdWRlICJwb3NpeC5oIgogCi12b2lkIG1ha2VfaGVhZF9vcnBoYW5lZChnaXRfcmVwb3NpdG9yeSogcmVwbywgY29uc3QgY2hhciAqdGFyZ2V0KQordm9pZCBtYWtlX2hlYWRfdW5ib3JuKGdpdF9yZXBvc2l0b3J5KiByZXBvLCBjb25zdCBjaGFyICp0YXJnZXQpCiB7CiAJZ2l0X3JlZmVyZW5jZSAqaGVhZDsKIApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXBvL3JlcG9faGVscGVycy5oIGIvdGVzdHMvcmVwby9yZXBvX2hlbHBlcnMuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlcG8vcmVwb19oZWxwZXJzLmgKcmVuYW1lIHRvIHRlc3RzL3JlcG8vcmVwb19oZWxwZXJzLmgKaW5kZXggMDliNWNhYy4uNjc4M2Q1NyAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZXBvL3JlcG9faGVscGVycy5oCisrKyBiL3Rlc3RzL3JlcG8vcmVwb19oZWxwZXJzLmgKQEAgLTIsNSArMiw1IEBACiAKICNkZWZpbmUgTk9OX0VYSVNUSU5HX0hFQUQgInJlZnMvaGVhZHMvaGlkZS9hbmQvc2VlayIKIAotZXh0ZXJuIHZvaWQgbWFrZV9oZWFkX29ycGhhbmVkKGdpdF9yZXBvc2l0b3J5KiByZXBvLCBjb25zdCBjaGFyICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgbWFrZV9oZWFkX3VuYm9ybihnaXRfcmVwb3NpdG9yeSogcmVwbywgY29uc3QgY2hhciAqdGFyZ2V0KTsKIGV4dGVybiB2b2lkIGRlbGV0ZV9oZWFkKGdpdF9yZXBvc2l0b3J5KiByZXBvKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9zZXR0ZXJzLmMgYi90ZXN0cy9yZXBvL3NldHRlcnMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXBvL3NldHRlcnMuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9zZXR0ZXJzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9zaGFsbG93LmMgYi90ZXN0cy9yZXBvL3NoYWxsb3cuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXBvL3NoYWxsb3cuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9zaGFsbG93LmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVwby9zdGF0ZS5jIGIvdGVzdHMvcmVwby9zdGF0ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JlcG8vc3RhdGUuYwpyZW5hbWUgdG8gdGVzdHMvcmVwby9zdGF0ZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc2V0L2RlZmF1bHQuYyBiL3Rlc3RzL3Jlc2V0L2RlZmF1bHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNldC9kZWZhdWx0LmMKcmVuYW1lIHRvIHRlc3RzL3Jlc2V0L2RlZmF1bHQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNldC9oYXJkLmMgYi90ZXN0cy9yZXNldC9oYXJkLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzZXQvaGFyZC5jCnJlbmFtZSB0byB0ZXN0cy9yZXNldC9oYXJkLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzZXQvbWl4ZWQuYyBiL3Rlc3RzL3Jlc2V0L21peGVkLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzZXQvbWl4ZWQuYwpyZW5hbWUgdG8gdGVzdHMvcmVzZXQvbWl4ZWQuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNldC9yZXNldF9oZWxwZXJzLmMgYi90ZXN0cy9yZXNldC9yZXNldF9oZWxwZXJzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzZXQvcmVzZXRfaGVscGVycy5jCnJlbmFtZSB0byB0ZXN0cy9yZXNldC9yZXNldF9oZWxwZXJzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzZXQvcmVzZXRfaGVscGVycy5oIGIvdGVzdHMvcmVzZXQvcmVzZXRfaGVscGVycy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc2V0L3Jlc2V0X2hlbHBlcnMuaApyZW5hbWUgdG8gdGVzdHMvcmVzZXQvcmVzZXRfaGVscGVycy5oCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc2V0L3NvZnQuYyBiL3Rlc3RzL3Jlc2V0L3NvZnQuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc2V0L3NvZnQuYwpyZW5hbWUgdG8gdGVzdHMvcmVzZXQvc29mdC5jCmluZGV4IDg4NDY5N2MuLmJkNmZjYzIgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvcmVzZXQvc29mdC5jCisrKyBiL3Rlc3RzL3Jlc2V0L3NvZnQuYwpAQCAtOTUsMTkgKzk1LDE5IEBACiAJY2xfZ2l0X2ZhaWwoZ2l0X3Jlc2V0KHJlcG8sIHRhcmdldCwgR0lUX1JFU0VUX1NPRlQpKTsKIH0KIAotdm9pZCB0ZXN0X3Jlc2V0X3NvZnRfX3Jlc2V0dGluZ19hZ2FpbnN0X2FuX29ycGhhbmVkX2hlYWRfcmVwb19tYWtlc190aGVfaGVhZF9ub19sb25nZXJfb3JwaGFuZWQodm9pZCkKK3ZvaWQgdGVzdF9yZXNldF9zb2Z0X19yZXNldHRpbmdfYWdhaW5zdF9hbl91bmJvcm5faGVhZF9yZXBvX21ha2VzX3RoZV9oZWFkX25vX2xvbmdlcl91bmJvcm4odm9pZCkKIHsKIAlnaXRfcmVmZXJlbmNlICpoZWFkOwogCiAJcmV0cmlldmVfdGFyZ2V0X2Zyb21fb2lkKCZ0YXJnZXQsIHJlcG8sIEtOT1dOX0NPTU1JVF9JTl9CQVJFX1JFUE8pOwogCi0JbWFrZV9oZWFkX29ycGhhbmVkKHJlcG8sIE5PTl9FWElTVElOR19IRUFEKTsKKwltYWtlX2hlYWRfdW5ib3JuKHJlcG8sIE5PTl9FWElTVElOR19IRUFEKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKHRydWUsIGdpdF9yZXBvc2l0b3J5X2hlYWRfb3JwaGFuKHJlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfaSh0cnVlLCBnaXRfcmVwb3NpdG9yeV9oZWFkX3VuYm9ybihyZXBvKSk7CiAKIAljbF9naXRfcGFzcyhnaXRfcmVzZXQocmVwbywgdGFyZ2V0LCBHSVRfUkVTRVRfU09GVCkpOwogCi0JY2xfYXNzZXJ0X2VxdWFsX2koZmFsc2UsIGdpdF9yZXBvc2l0b3J5X2hlYWRfb3JwaGFuKHJlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfaShmYWxzZSwgZ2l0X3JlcG9zaXRvcnlfaGVhZF91bmJvcm4ocmVwbykpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJmhlYWQsIHJlcG8sIE5PTl9FWElTVElOR19IRUFEKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZ2l0X29pZF9zdHJlcShnaXRfcmVmZXJlbmNlX3RhcmdldChoZWFkKSwgS05PV05fQ09NTUlUX0lOX0JBUkVfUkVQTykpOwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvLmdpdGF0dHJpYnV0ZXMgYi90ZXN0cy9yZXNvdXJjZXMvLmdpdGF0dHJpYnV0ZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzLy5naXRhdHRyaWJ1dGVzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvLmdpdGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzLy5naXRpZ25vcmUgYi90ZXN0cy9yZXNvdXJjZXMvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvLmdpdGlnbm9yZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvaW5mby9hdHRyaWJ1dGVzIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmZvL2F0dHJpYnV0ZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmZvL2F0dHJpYnV0ZXMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvaW5mby9hdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMTAvOGJiNGU3ZmQ3YjE2NDkwZGMzM2ZmN2Q5NzIxNTFlNzNkNzE2NmUgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMTAvOGJiNGU3ZmQ3YjE2NDkwZGMzM2ZmN2Q5NzIxNTFlNzNkNzE2NmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzEwLzhiYjRlN2ZkN2IxNjQ5MGRjMzNmZjdkOTcyMTUxZTczZDcxNjZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMTAvOGJiNGU3ZmQ3YjE2NDkwZGMzM2ZmN2Q5NzIxNTFlNzNkNzE2NmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMTYvOTgzZGE2NjQzNjU2YmI0NGM0Mzk2NWVjYjY4NTVjNmQ1NzQ1MTIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMTYvOTgzZGE2NjQzNjU2YmI0NGM0Mzk2NWVjYjY4NTVjNmQ1NzQ1MTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzE2Lzk4M2RhNjY0MzY1NmJiNDRjNDM5NjVlY2I2ODU1YzZkNTc0NTEyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMTYvOTgzZGE2NjQzNjU2YmI0NGM0Mzk2NWVjYjY4NTVjNmQ1NzQ1MTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjEvNzg3OGFiNDllMTMxNDM4OGVhMmUzMmRjNmZkYjU4YTFiOTY5ZTAgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjEvNzg3OGFiNDllMTMxNDM4OGVhMmUzMmRjNmZkYjU4YTFiOTY5ZTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzIxLzc4NzhhYjQ5ZTEzMTQzODhlYTJlMzJkYzZmZGI1OGExYjk2OWUwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjEvNzg3OGFiNDllMTMxNDM4OGVhMmUzMmRjNmZkYjU4YTFiOTY5ZTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjQvZmE5YTlmYzRlMjAyMzEzZTI0YjY0ODA4NzQ5NTQ0MWRhYjQzMmIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjQvZmE5YTlmYzRlMjAyMzEzZTI0YjY0ODA4NzQ5NTQ0MWRhYjQzMmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzI0L2ZhOWE5ZmM0ZTIwMjMxM2UyNGI2NDgwODc0OTU0NDFkYWI0MzJiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjQvZmE5YTlmYzRlMjAyMzEzZTI0YjY0ODA4NzQ5NTQ0MWRhYjQzMmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjkvMjlkZTI4MmNlOTk5ZTk1MTgzYWVkYWM2NDUxZDMzODQ1NTljNGIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjkvMjlkZTI4MmNlOTk5ZTk1MTgzYWVkYWM2NDUxZDMzODQ1NTljNGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzI5LzI5ZGUyODJjZTk5OWU5NTE4M2FlZGFjNjQ1MWQzMzg0NTU5YzRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMjkvMjlkZTI4MmNlOTk5ZTk1MTgzYWVkYWM2NDUxZDMzODQ1NTljNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMmIvNDBjNWFjYTE1OWIwNGVhOGQyMGZmZTM2Y2RmOGIwOTM2OWIxNGEgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMmIvNDBjNWFjYTE1OWIwNGVhOGQyMGZmZTM2Y2RmOGIwOTM2OWIxNGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJiLzQwYzVhY2ExNTliMDRlYThkMjBmZmUzNmNkZjhiMDkzNjliMTRhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvMmIvNDBjNWFjYTE1OWIwNGVhOGQyMGZmZTM2Y2RmOGIwOTM2OWIxNGEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJjLzY2ZTE0Zjc3MTk2ZWE3NjNmYjFlNDE2MTJjMWFhMmJjMmQ4ZWQyIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJjLzY2ZTE0Zjc3MTk2ZWE3NjNmYjFlNDE2MTJjMWFhMmJjMmQ4ZWQyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy8yYy82NmUxNGY3NzE5NmVhNzYzZmIxZTQxNjEyYzFhYTJiYzJkOGVkMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJjLzY2ZTE0Zjc3MTk2ZWE3NjNmYjFlNDE2MTJjMWFhMmJjMmQ4ZWQyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJkL2U3ZGZlMzU4OGYzYzdlOWFkNTllN2Q1MGJhOTBlMzMyOWRmOWQ5IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJkL2U3ZGZlMzU4OGYzYzdlOWFkNTllN2Q1MGJhOTBlMzMyOWRmOWQ5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy8yZC9lN2RmZTM1ODhmM2M3ZTlhZDU5ZTdkNTBiYTkwZTMzMjlkZjlkOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzJkL2U3ZGZlMzU4OGYzYzdlOWFkNTllN2Q1MGJhOTBlMzMyOWRmOWQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzM3LzBmZTllYzIyNGNlMzNlNzFmOWU1ZWMyYmQxMTQyY2U5OTM3YTZhIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzM3LzBmZTllYzIyNGNlMzNlNzFmOWU1ZWMyYmQxMTQyY2U5OTM3YTZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy8zNy8wZmU5ZWMyMjRjZTMzZTcxZjllNWVjMmJkMTE0MmNlOTkzN2E2YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzM3LzBmZTllYzIyNGNlMzNlNzFmOWU1ZWMyYmQxMTQyY2U5OTM3YTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNhLzZkZjAyNjQ2MmViYWZlNDU1YWY5ODY3ZDI3ZWRhMjBhOWUwOTc0IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNhLzZkZjAyNjQ2MmViYWZlNDU1YWY5ODY3ZDI3ZWRhMjBhOWUwOTc0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy8zYS82ZGYwMjY0NjJlYmFmZTQ1NWFmOTg2N2QyN2VkYTIwYTllMDk3NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNhLzZkZjAyNjQ2MmViYWZlNDU1YWY5ODY3ZDI3ZWRhMjBhOWUwOTc0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNiLzc0ZGI3YWIzODExMDVkYzBkMjhmODI5NWE3N2Y2YTgyOTg5MjkyIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNiLzc0ZGI3YWIzODExMDVkYzBkMjhmODI5NWE3N2Y2YTgyOTg5MjkyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy8zYi83NGRiN2FiMzgxMTA1ZGMwZDI4ZjgyOTVhNzdmNmE4Mjk4OTI5MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNiLzc0ZGI3YWIzODExMDVkYzBkMjhmODI5NWE3N2Y2YTgyOTg5MjkyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNlLzQyZmZjNTRhNjYzZjk0MDFjYzI1ODQzZDZjMGU3MWEzM2U0MjQ5IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNlLzQyZmZjNTRhNjYzZjk0MDFjYzI1ODQzZDZjMGU3MWEzM2U0MjQ5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy8zZS80MmZmYzU0YTY2M2Y5NDAxY2MyNTg0M2Q2YzBlNzFhMzNlNDI0OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzNlLzQyZmZjNTRhNjYzZjk0MDFjYzI1ODQzZDZjMGU3MWEzM2U0MjQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1LzE0MWE3OWE3Nzg0MmM1OWE2MzIyOTQwMzIyMGE0ZTRiZTc0ZTNkIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1LzE0MWE3OWE3Nzg0MmM1OWE2MzIyOTQwMzIyMGE0ZTRiZTc0ZTNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy80NS8xNDFhNzlhNzc4NDJjNTlhNjMyMjk0MDMyMjBhNGU0YmU3NGUzZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1LzE0MWE3OWE3Nzg0MmM1OWE2MzIyOTQwMzIyMGE0ZTRiZTc0ZTNkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1LzVhMzE0ZmE4NDhkNTJhZTFmMTFkMjU0ZGE0ZjYwODU4ZmM5N2Y0IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1LzVhMzE0ZmE4NDhkNTJhZTFmMTFkMjU0ZGE0ZjYwODU4ZmM5N2Y0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy80NS81YTMxNGZhODQ4ZDUyYWUxZjExZDI1NGRhNGY2MDg1OGZjOTdmNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1LzVhMzE0ZmE4NDhkNTJhZTFmMTFkMjU0ZGE0ZjYwODU4ZmM5N2Y0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzRkLzcxM2RjNDhlNmIxYmQ3NWIwZDYxYWQwNzhiYTljYTNhNTY3NDVkIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzRkLzcxM2RjNDhlNmIxYmQ3NWIwZDYxYWQwNzhiYTljYTNhNTY3NDVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy80ZC83MTNkYzQ4ZTZiMWJkNzViMGQ2MWFkMDc4YmE5Y2EzYTU2NzQ1ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzRkLzcxM2RjNDhlNmIxYmQ3NWIwZDYxYWQwNzhiYTljYTNhNTY3NDVkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzRlLzQ5YmE4YzViNmMzMmZmMjhjZDlkY2I2MGJlMzRkZjUwZmNjNDg1IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzRlLzQ5YmE4YzViNmMzMmZmMjhjZDlkY2I2MGJlMzRkZjUwZmNjNDg1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy80ZS80OWJhOGM1YjZjMzJmZjI4Y2Q5ZGNiNjBiZTM0ZGY1MGZjYzQ4NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzRlLzQ5YmE4YzViNmMzMmZmMjhjZDlkY2I2MGJlMzRkZjUwZmNjNDg1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzU1LzZmOGM4MjdiOGU0YTAyYWQ1Y2FiNzdkY2EyYmNiM2UyMjZiMGIzIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzU1LzZmOGM4MjdiOGU0YTAyYWQ1Y2FiNzdkY2EyYmNiM2UyMjZiMGIzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy81NS82ZjhjODI3YjhlNGEwMmFkNWNhYjc3ZGNhMmJjYjNlMjI2YjBiMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzU1LzZmOGM4MjdiOGU0YTAyYWQ1Y2FiNzdkY2EyYmNiM2UyMjZiMGIzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzU4LzE5YTE4NWQ3N2IwMzMyNWFhZjg3Y2FmYzc3MWRiMzZmNmRkY2E3IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzU4LzE5YTE4NWQ3N2IwMzMyNWFhZjg3Y2FmYzc3MWRiMzZmNmRkY2E3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy81OC8xOWExODVkNzdiMDMzMjVhYWY4N2NhZmM3NzFkYjM2ZjZkZGNhNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzU4LzE5YTE4NWQ3N2IwMzMyNWFhZjg3Y2FmYzc3MWRiMzZmNmRkY2E3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzYwLzU4MTJhYjdmZTQyMWZkZDMyNWE5MzVkMzVjYjA2YTkyMzRhN2Q3IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzYwLzU4MTJhYjdmZTQyMWZkZDMyNWE5MzVkMzVjYjA2YTkyMzRhN2Q3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy82MC81ODEyYWI3ZmU0MjFmZGQzMjVhOTM1ZDM1Y2IwNmE5MjM0YTdkNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzYwLzU4MTJhYjdmZTQyMWZkZDMyNWE5MzVkMzVjYjA2YTkyMzRhN2Q3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzZiL2FiNWM3OWNkNTE0MGQwZjgwMDkxN2Y1NTBlYjJhM2RjMzJiMGRhIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzZiL2FiNWM3OWNkNTE0MGQwZjgwMDkxN2Y1NTBlYjJhM2RjMzJiMGRhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy82Yi9hYjVjNzljZDUxNDBkMGY4MDA5MTdmNTUwZWIyYTNkYzMyYjBkYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzZiL2FiNWM3OWNkNTE0MGQwZjgwMDkxN2Y1NTBlYjJhM2RjMzJiMGRhCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy82ZC85NjhkNjJjODljN2Q5ZWEyM2E0YzlhN2I2NjVkMDE3YzNkOGZmZCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy82ZC85NjhkNjJjODljN2Q5ZWEyM2E0YzlhN2I2NjVkMDE3YzNkOGZmZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvNmQvOTY4ZDYyYzg5YzdkOWVhMjNhNGM5YTdiNjY1ZDAxN2MzZDhmZmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy82ZC85NjhkNjJjODljN2Q5ZWEyM2E0YzlhN2I2NjVkMDE3YzNkOGZmZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy83MS83ZmMzMWY2Yjg0ZjlkNmZjM2E0ZWRiY2EyNTlkN2ZjOTJiZWVlMiBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy83MS83ZmMzMWY2Yjg0ZjlkNmZjM2E0ZWRiY2EyNTlkN2ZjOTJiZWVlMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvNzEvN2ZjMzFmNmI4NGY5ZDZmYzNhNGVkYmNhMjU5ZDdmYzkyYmVlZTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy83MS83ZmMzMWY2Yjg0ZjlkNmZjM2E0ZWRiY2EyNTlkN2ZjOTJiZWVlMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy84ZC8wYjlkZjliZDMwYmU3OTEwZGRkYTYwNTQ4ZDQ4NWJjMzAyYjkxMSBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy84ZC8wYjlkZjliZDMwYmU3OTEwZGRkYTYwNTQ4ZDQ4NWJjMzAyYjkxMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOGQvMGI5ZGY5YmQzMGJlNzkxMGRkZGE2MDU0OGQ0ODViYzMwMmI5MTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy84ZC8wYjlkZjliZDMwYmU3OTEwZGRkYTYwNTQ4ZDQ4NWJjMzAyYjkxMQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTMvNjFmNDBiYjk3MjM5Y2Y1NTgxMTg5MmUxNGRlMmUzNDQxNjhiYTEgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTMvNjFmNDBiYjk3MjM5Y2Y1NTgxMTg5MmUxNGRlMmUzNDQxNjhiYTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzkzLzYxZjQwYmI5NzIzOWNmNTU4MTE4OTJlMTRkZTJlMzQ0MTY4YmExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTMvNjFmNDBiYjk3MjM5Y2Y1NTgxMTg5MmUxNGRlMmUzNDQxNjhiYTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTQvZGE0ZmFhMGE2YmZiOGVlNmNjZjcxNTM4MDFhNjkyMDJiMzE4NTcgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTQvZGE0ZmFhMGE2YmZiOGVlNmNjZjcxNTM4MDFhNjkyMDJiMzE4NTcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzk0L2RhNGZhYTBhNmJmYjhlZTZjY2Y3MTUzODAxYTY5MjAyYjMxODU3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTQvZGE0ZmFhMGE2YmZiOGVlNmNjZjcxNTM4MDFhNjkyMDJiMzE4NTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTYvMDg5ZmQzMWNlMWQzZWUyYWZiMGJhMDliYTA2MzA2NjkzMmYwMjcgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTYvMDg5ZmQzMWNlMWQzZWUyYWZiMGJhMDliYTA2MzA2NjkzMmYwMjcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzk2LzA4OWZkMzFjZTFkM2VlMmFmYjBiYTA5YmEwNjMwNjY5MzJmMDI3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTYvMDg5ZmQzMWNlMWQzZWUyYWZiMGJhMDliYTA2MzA2NjkzMmYwMjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTkvZWFlNDc2ODk2ZjQ5MDcyMjQ5NzhiODhlNWVjYWE2YzViYjY3YTkgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTkvZWFlNDc2ODk2ZjQ5MDcyMjQ5NzhiODhlNWVjYWE2YzViYjY3YTkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzk5L2VhZTQ3Njg5NmY0OTA3MjI0OTc4Yjg4ZTVlY2FhNmM1YmI2N2E5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOTkvZWFlNDc2ODk2ZjQ5MDcyMjQ5NzhiODhlNWVjYWE2YzViYjY3YTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOWUvNWJkYzQ3ZDZhODBmMmJlMGVhMzA0OWFkNzQyMzFiOTQ2MDkyNDIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOWUvNWJkYzQ3ZDZhODBmMmJlMGVhMzA0OWFkNzQyMzFiOTQ2MDkyNDIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzllLzViZGM0N2Q2YTgwZjJiZTBlYTMwNDlhZDc0MjMxYjk0NjA5MjQyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOWUvNWJkYzQ3ZDZhODBmMmJlMGVhMzA0OWFkNzQyMzFiOTQ2MDkyNDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOWYvYjQwYjY2NzVkZGU2MGI1Njk3YWZjZWFlOTFiNjZkOTA4YzAyZDkgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOWYvYjQwYjY2NzVkZGU2MGI1Njk3YWZjZWFlOTFiNjZkOTA4YzAyZDkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzLzlmL2I0MGI2Njc1ZGRlNjBiNTY5N2FmY2VhZTkxYjY2ZDkwOGMwMmQ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvOWYvYjQwYjY2NzVkZGU2MGI1Njk3YWZjZWFlOTFiNjZkOTA4YzAyZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTAvZjcyMTdhZTk5ZjVhYzNlODg1MzRmNWNlYTI2N2ZlYmM1ZmE4NWIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTAvZjcyMTdhZTk5ZjVhYzNlODg1MzRmNWNlYTI2N2ZlYmM1ZmE4NWIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2EwL2Y3MjE3YWU5OWY1YWMzZTg4NTM0ZjVjZWEyNjdmZWJjNWZhODViCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTAvZjcyMTdhZTk5ZjVhYzNlODg1MzRmNWNlYTI2N2ZlYmM1ZmE4NWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTUvNmJiY2VjYWVhYzc2MGNjMjYyMzkzODRkMmQ0YzYxNGU3ZTQzMjAgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTUvNmJiY2VjYWVhYzc2MGNjMjYyMzkzODRkMmQ0YzYxNGU3ZTQzMjAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2E1LzZiYmNlY2FlYWM3NjBjYzI2MjM5Mzg0ZDJkNGM2MTRlN2U0MzIwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTUvNmJiY2VjYWVhYzc2MGNjMjYyMzkzODRkMmQ0YzYxNGU3ZTQzMjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTUvZDc2Y2FkNTNmNjZmMTMxMmJkOTk1OTA5YTViYWIzYzA4MjA3NzAgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTUvZDc2Y2FkNTNmNjZmMTMxMmJkOTk1OTA5YTViYWIzYzA4MjA3NzAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2E1L2Q3NmNhZDUzZjY2ZjEzMTJiZDk5NTkwOWE1YmFiM2MwODIwNzcwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTUvZDc2Y2FkNTNmNjZmMTMxMmJkOTk1OTA5YTViYWIzYzA4MjA3NzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTkvN2NjMDE5ODUxZDQwMWE0ZjFkMDkxY2I5MWExNTg5MGEwZGQxYmEgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTkvN2NjMDE5ODUxZDQwMWE0ZjFkMDkxY2I5MWExNTg5MGEwZGQxYmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2E5LzdjYzAxOTg1MWQ0MDFhNGYxZDA5MWNiOTFhMTU4OTBhMGRkMWJhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYTkvN2NjMDE5ODUxZDQwMWE0ZjFkMDkxY2I5MWExNTg5MGEwZGQxYmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYjQvMzVjZDU2ODlhMGZiNTRhZmJlZGE0YWMyMDM2OGFhNDgwZThmMDQgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYjQvMzVjZDU2ODlhMGZiNTRhZmJlZGE0YWMyMDM2OGFhNDgwZThmMDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2I0LzM1Y2Q1Njg5YTBmYjU0YWZiZWRhNGFjMjAzNjhhYTQ4MGU4ZjA0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYjQvMzVjZDU2ODlhMGZiNTRhZmJlZGE0YWMyMDM2OGFhNDgwZThmMDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzAvMDkxODg5YzBjNzcxNDJiODdhMWZhNTEyM2E2Mzk4YTYxZDMzZTcgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzAvMDkxODg5YzBjNzcxNDJiODdhMWZhNTEyM2E2Mzk4YTYxZDMzZTcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2MwLzA5MTg4OWMwYzc3MTQyYjg3YTFmYTUxMjNhNjM5OGE2MWQzM2U3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzAvMDkxODg5YzBjNzcxNDJiODdhMWZhNTEyM2E2Mzk4YTYxZDMzZTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzQvODVhYmUzNWFiZDRhYTZmZDgzYjA3NmE3OGJiZWE5ZTJlN2UwNmMgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzQvODVhYmUzNWFiZDRhYTZmZDgzYjA3NmE3OGJiZWE5ZTJlN2UwNmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2M0Lzg1YWJlMzVhYmQ0YWE2ZmQ4M2IwNzZhNzhiYmVhOWUyZTdlMDZjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzQvODVhYmUzNWFiZDRhYTZmZDgzYjA3NmE3OGJiZWE5ZTJlN2UwNmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzcvYWFkZDc3MGQ1OTA3YTg0NzVjMjllOWVlMjFhMjdiODhiZjY3NWQgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzcvYWFkZDc3MGQ1OTA3YTg0NzVjMjllOWVlMjFhMjdiODhiZjY3NWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2M3L2FhZGQ3NzBkNTkwN2E4NDc1YzI5ZTllZTIxYTI3Yjg4YmY2NzVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzcvYWFkZDc3MGQ1OTA3YTg0NzVjMjllOWVlMjFhMjdiODhiZjY3NWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzkvNmJiYjJjMjU1N2E4MzI1YWUxNTU5ZTNiYTc5Y2RjZWNiMjMwNzYgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzkvNmJiYjJjMjU1N2E4MzI1YWUxNTU5ZTNiYTc5Y2RjZWNiMjMwNzYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2M5LzZiYmIyYzI1NTdhODMyNWFlMTU1OWUzYmE3OWNkY2VjYjIzMDc2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvYzkvNmJiYjJjMjU1N2E4MzI1YWUxNTU5ZTNiYTc5Y2RjZWNiMjMwNzYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2NlLzM5YTk3YTdmYjFmYTkwYmNmNWU3MTEyNDljMWU1MDc0NzZhZTBlIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2NlLzM5YTk3YTdmYjFmYTkwYmNmNWU3MTEyNDljMWU1MDc0NzZhZTBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9jZS8zOWE5N2E3ZmIxZmE5MGJjZjVlNzExMjQ5YzFlNTA3NDc2YWUwZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2NlLzM5YTk3YTdmYjFmYTkwYmNmNWU3MTEyNDljMWU1MDc0NzZhZTBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Q1LzdkYTMzYzE2YjE0MzI2ZWNiMDVkMTliYmVhOTA4ZjVlNGM0N2Q5IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Q1LzdkYTMzYzE2YjE0MzI2ZWNiMDVkMTliYmVhOTA4ZjVlNGM0N2Q5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9kNS83ZGEzM2MxNmIxNDMyNmVjYjA1ZDE5YmJlYTkwOGY1ZTRjNDdkOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Q1LzdkYTMzYzE2YjE0MzI2ZWNiMDVkMTliYmVhOTA4ZjVlNGM0N2Q5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Q4LzAwODg2ZDljODY3MzFhZTVjNGE2MmIwYjc3YzQzNzAxNWUwMGQyIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Q4LzAwODg2ZDljODY3MzFhZTVjNGE2MmIwYjc3YzQzNzAxNWUwMGQyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9kOC8wMDg4NmQ5Yzg2NzMxYWU1YzRhNjJiMGI3N2M0MzcwMTVlMDBkMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Q4LzAwODg2ZDljODY3MzFhZTVjNGE2MmIwYjc3YzQzNzAxNWUwMGQyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2RjL2NhZGE0NjJkM2RmOGFjNmRlNTk2ZmI4Yzg5NmFiYTkzNDRmOTQxIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2RjL2NhZGE0NjJkM2RmOGFjNmRlNTk2ZmI4Yzg5NmFiYTkzNDRmOTQxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9kYy9jYWRhNDYyZDNkZjhhYzZkZTU5NmZiOGM4OTZhYmE5MzQ0Zjk0MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2RjL2NhZGE0NjJkM2RmOGFjNmRlNTk2ZmI4Yzg5NmFiYTkzNDRmOTQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2RlLzg2M2JmZjQ5NzZjOWVkN2UxN2E0ZGEwZmQ1MjQ5MDhkYzg0MDQ5IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2RlLzg2M2JmZjQ5NzZjOWVkN2UxN2E0ZGEwZmQ1MjQ5MDhkYzg0MDQ5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9kZS84NjNiZmY0OTc2YzllZDdlMTdhNGRhMGZkNTI0OTA4ZGM4NDA0OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2RlLzg2M2JmZjQ5NzZjOWVkN2UxN2E0ZGEwZmQ1MjQ5MDhkYzg0MDQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2U1LzYzY2Y0NzU4ZjBkNjQ2ZjFiMTRiNzYwMTZhYTE3ZmE5ZTU0OWE0IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2U1LzYzY2Y0NzU4ZjBkNjQ2ZjFiMTRiNzYwMTZhYTE3ZmE5ZTU0OWE0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9lNS82M2NmNDc1OGYwZDY0NmYxYjE0Yjc2MDE2YWExN2ZhOWU1NDlhNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2U1LzYzY2Y0NzU4ZjBkNjQ2ZjFiMTRiNzYwMTZhYTE3ZmE5ZTU0OWE0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2VjL2I5N2RmMmExNzQ5ODc0NzVhYzgxNmUzODQ3ZmM4ZTlmNmM1OTZiIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2VjL2I5N2RmMmExNzQ5ODc0NzVhYzgxNmUzODQ3ZmM4ZTlmNmM1OTZiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9lYy9iOTdkZjJhMTc0OTg3NDc1YWM4MTZlMzg0N2ZjOGU5ZjZjNTk2YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2VjL2I5N2RmMmExNzQ5ODc0NzVhYzgxNmUzODQ3ZmM4ZTlmNmM1OTZiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2VkL2YzZGNlZTQwMDNkNzFmMTM5Nzc3ODk4ODgyY2NkMDk3ZTM0YzUzIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2VkL2YzZGNlZTQwMDNkNzFmMTM5Nzc3ODk4ODgyY2NkMDk3ZTM0YzUzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9lZC9mM2RjZWU0MDAzZDcxZjEzOTc3Nzg5ODg4MmNjZDA5N2UzNGM1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2VkL2YzZGNlZTQwMDNkNzFmMTM5Nzc3ODk4ODgyY2NkMDk3ZTM0YzUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2YyL2M2ZDcxN2NmNGE1YTNlNmIwMjY4NDE1NWFiMDdiNzY2OTgyMTY1IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2YyL2M2ZDcxN2NmNGE1YTNlNmIwMjY4NDE1NWFiMDdiNzY2OTgyMTY1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mMi9jNmQ3MTdjZjRhNWEzZTZiMDI2ODQxNTVhYjA3Yjc2Njk4MjE2NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2YyL2M2ZDcxN2NmNGE1YTNlNmIwMjY4NDE1NWFiMDdiNzY2OTgyMTY1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Y1L2IwYWYxZmI0ZjVjMGNkN2FhZDg4MDcxMWQzNjhhMDczMzNjMzA3IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Y1L2IwYWYxZmI0ZjVjMGNkN2FhZDg4MDcxMWQzNjhhMDczMzNjMzA3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mNS9iMGFmMWZiNGY1YzBjZDdhYWQ4ODA3MTFkMzY4YTA3MzMzYzMwNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2Y1L2IwYWYxZmI0ZjVjMGNkN2FhZDg4MDcxMWQzNjhhMDczMzNjMzA3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2ZiLzUwNjdiMWFlZjNhYzFhZGE0YjM3OWRiY2I3ZDE3MjU1ZGY3ZDc4IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2ZiLzUwNjdiMWFlZjNhYzFhZGE0YjM3OWRiY2I3ZDE3MjU1ZGY3ZDc4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mYi81MDY3YjFhZWYzYWMxYWRhNGIzNzlkYmNiN2QxNzI1NWRmN2Q3OApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2ZiLzUwNjdiMWFlZjNhYzFhZGE0YjM3OWRiY2I3ZDE3MjU1ZGY3ZDc4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2ZlLzc3Mzc3MGM1YTZjYzcxODU1ODBjOTIwNGIxZmYxOGEzM2ZmM2ZjIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2ZlLzc3Mzc3MGM1YTZjYzcxODU1ODBjOTIwNGIxZmYxOGEzM2ZmM2ZjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mZS83NzM3NzBjNWE2Y2M3MTg1NTgwYzkyMDRiMWZmMThhMzNmZjNmYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvLmdpdHRlZC9vYmplY3RzL2ZlLzc3Mzc3MGM1YTZjYzcxODU1ODBjOTIwNGIxZmYxOGEzM2ZmM2ZjCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mZi82OWY4NjM5Y2UyZTYwMTBiM2YzM2E3NDE2MGFhZDk4YjQ4ZGEyYiBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mZi82OWY4NjM5Y2UyZTYwMTBiM2YzM2E3NDE2MGFhZDk4YjQ4ZGEyYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL29iamVjdHMvZmYvNjlmODYzOWNlMmU2MDEwYjNmMzNhNzQxNjBhYWQ5OGI0OGRhMmIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvb2JqZWN0cy9mZi82OWY4NjM5Y2UyZTYwMTBiM2YzM2E3NDE2MGFhZDk4YjQ4ZGEyYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvYXR0cjAgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9hdHRyMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9hdHRyMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvYXR0cjAKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvYXR0cjEgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9hdHRyMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9hdHRyMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvYXR0cjEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvYXR0cjIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9hdHRyMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9hdHRyMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvYXR0cjIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvYXR0cjMgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9hdHRyMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9hdHRyMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvYXR0cjMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvYmluZmlsZSBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL2JpbmZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvYmluZmlsZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvYmluZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9kaXIvZmlsZSBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL2Rpci9maWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL2Rpci9maWxlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9kaXIvZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9maWxlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL2dpdGF0dHJpYnV0ZXMgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9naXRhdHRyaWJ1dGVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL2dpdGF0dHJpYnV0ZXMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyL2dpdGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvZ2l0aWdub3JlIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL2dpdGlnbm9yZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvZ2l0aWdub3JlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL2lnbiBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL2lnbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9pZ24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyL2lnbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9tYWNyb19iYWQgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9tYWNyb19iYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvbWFjcm9fYmFkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9tYWNyb19iYWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvbWFjcm9fdGVzdCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL21hY3JvX3Rlc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvbWFjcm9fdGVzdApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvbWFjcm9fdGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3QxIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvcm9vdF90ZXN0MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3QxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3QxCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3Jvb3RfdGVzdDIgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3QyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3Jvb3RfdGVzdDIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyL3Jvb3RfdGVzdDIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvcm9vdF90ZXN0MyBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL3Jvb3RfdGVzdDMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvcm9vdF90ZXN0MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvcm9vdF90ZXN0MwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3Q0LnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL3Jvb3RfdGVzdDQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3Jvb3RfdGVzdDQudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9yb290X3Rlc3Q0LnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9zdWIvLmdpdGF0dHJpYnV0ZXMgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvLmdpdGF0dHJpYnV0ZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViLy5naXRhdHRyaWJ1dGVzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvLmdpdGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL2FiYyBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL3N1Yi9hYmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL2FiYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL2FiYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9zdWIvZGlyL2ZpbGUgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvZGlyL2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL2Rpci9maWxlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvZGlyL2ZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL2ZpbGUgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9zdWIvZmlsZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL2ZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL2lnbi9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL2lnbi9maWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9pZ24vZmlsZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL2lnbi9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9pZ24vc3ViL2ZpbGUgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvaWduL3N1Yi9maWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9pZ24vc3ViL2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyL3N1Yi9pZ24vc3ViL2ZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcyBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWIvLmdpdGF0dHJpYnV0ZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViL2RpciBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWIvZGlyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWIvZGlyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViL2RpcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViL2ZpbGUgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViL2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi9maWxlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViL2ZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi9zdWJzdWIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi9zdWJzdWIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWIvc3Vic3ViLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL3N1Yi9zdWJzdWIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWJkaXJfdGVzdDEgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViZGlyX3Rlc3QxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWJkaXJfdGVzdDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyL3N1Yi9zdWJkaXJfdGVzdDEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHIvc3ViL3N1YmRpcl90ZXN0Mi50eHQgYi90ZXN0cy9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViZGlyX3Rlc3QyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0ci9zdWIvc3ViZGlyX3Rlc3QyLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHIvc3ViL3N1YmRpcl90ZXN0Mi50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvaW5mby9yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmZvL3JlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9pbmZvL3JlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvaW5mby9yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL29iamVjdHMvMzgvMTJjZmVmMzY2MTVkYjE3ODhkNGU2M2Y5MDAyODAwN2UxN2EzNDggYi90ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL29iamVjdHMvMzgvMTJjZmVmMzY2MTVkYjE3ODhkNGU2M2Y5MDAyODAwN2UxN2EzNDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzLzM4LzEyY2ZlZjM2NjE1ZGIxNzg4ZDRlNjNmOTAwMjgwMDdlMTdhMzQ4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL29iamVjdHMvMzgvMTJjZmVmMzY2MTVkYjE3ODhkNGU2M2Y5MDAyODAwN2UxN2EzNDgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzLzU5L2Q5NDJiOGJlMjc4NGJjOTZkYjliMjIyMDJjMTA4MTVjOWEwNzdiIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzLzU5L2Q5NDJiOGJlMjc4NGJjOTZkYjliMjIyMDJjMTA4MTVjOWEwNzdiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvb2JqZWN0cy81OS9kOTQyYjhiZTI3ODRiYzk2ZGI5YjIyMjAyYzEwODE1YzlhMDc3YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzLzU5L2Q5NDJiOGJlMjc4NGJjOTZkYjliMjIyMDJjMTA4MTVjOWEwNzdiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2NkL2YxN2VhM2ZlNjI1ZWY4MTJmNGRjZTdmNDIzZjRmMjk5Mjg3NTA1IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2NkL2YxN2VhM2ZlNjI1ZWY4MTJmNGRjZTdmNDIzZjRmMjk5Mjg3NTA1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvb2JqZWN0cy9jZC9mMTdlYTNmZTYyNWVmODEyZjRkY2U3ZjQyM2Y0ZjI5OTI4NzUwNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2NkL2YxN2VhM2ZlNjI1ZWY4MTJmNGRjZTdmNDIzZjRmMjk5Mjg3NTA1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2Y3LzI1MDJkZGQwMTQxMmJiMjA3OTZmZjgxMmFmNTZmZDUzYjgyYjUyIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2Y3LzI1MDJkZGQwMTQxMmJiMjA3OTZmZjgxMmFmNTZmZDUzYjgyYjUyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvb2JqZWN0cy9mNy8yNTAyZGRkMDE0MTJiYjIwNzk2ZmY4MTJhZjU2ZmQ1M2I4MmI1MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2Y3LzI1MDJkZGQwMTQxMmJiMjA3OTZmZjgxMmFmNTZmZDUzYjgyYjUyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2luZm8vcGFja3MgYi90ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL29iamVjdHMvaW5mby9wYWNrcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL29iamVjdHMvaW5mby9wYWNrcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL2luZm8vcGFja3MKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay00ZTY0Mzg2MDcyMDRjZTc4ODI3ZTM4ODU1OTRiMmMwYmI0ZjEzODk1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stNGU2NDM4NjA3MjA0Y2U3ODgyN2UzODg1NTk0YjJjMGJiNGYxMzg5NS5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay00ZTY0Mzg2MDcyMDRjZTc4ODI3ZTM4ODU1OTRiMmMwYmI0ZjEzODk1LmlkeApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay00ZTY0Mzg2MDcyMDRjZTc4ODI3ZTM4ODU1OTRiMmMwYmI0ZjEzODk1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stNGU2NDM4NjA3MjA0Y2U3ODgyN2UzODg1NTk0YjJjMGJiNGYxMzg5NS5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay00ZTY0Mzg2MDcyMDRjZTc4ODI3ZTM4ODU1OTRiMmMwYmI0ZjEzODk1LnBhY2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay00ZTY0Mzg2MDcyMDRjZTc4ODI3ZTM4ODU1OTRiMmMwYmI0ZjEzODk1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stNGU2NDM4NjA3MjA0Y2U3ODgyN2UzODg1NTk0YjJjMGJiNGYxMzg5NS5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9wYWNrZWQtcmVmcyBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4Ly5naXR0ZWQvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9wYWNrZWQtcmVmcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4L1JFQURNRS5tZCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4L1JFQURNRS5tZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC9SRUFETUUubWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4L1JFQURNRS5tZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC9SRUFETUUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvUkVBRE1FLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC9SRUFETUUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4L2dpdGF0dHJpYnV0ZXMgYi90ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC9naXRhdHRyaWJ1dGVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4L2dpdGF0dHJpYnV0ZXMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4L2dpdGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcyBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4L3N1Yi9zdWIvLmdpdGF0dHJpYnV0ZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2F0dHJfaW5kZXgvc3ViL3N1Yi8uZ2l0YXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC9zdWIvc3ViL1JFQURNRS5tZCBiL3Rlc3RzL3Jlc291cmNlcy9hdHRyX2luZGV4L3N1Yi9zdWIvUkVBRE1FLm1kCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9hdHRyX2luZGV4L3N1Yi9zdWIvUkVBRE1FLm1kCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC9zdWIvc3ViL1JFQURNRS5tZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYXR0cl9pbmRleC9zdWIvc3ViL1JFQURNRS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC9zdWIvc3ViL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2F0dHJfaW5kZXgvc3ViL3N1Yi9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYXR0cl9pbmRleC9zdWIvc3ViL1JFQURNRS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9iYWQuaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvYmFkLmluZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzQ2NTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvYmFkLmluZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvYmFkX3RhZy5naXQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmFkX3RhZy5naXQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9iYWRfdGFnLmdpdC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmFkX3RhZy5naXQvb2JqZWN0cy9wYWNrL3BhY2stN2EyOGY0ZTAwMGExN2Y0OWE0MWQ3YTc5ZmMyZjc2MmE4YTdkOTE2NC5pZHggYi90ZXN0cy9yZXNvdXJjZXMvYmFkX3RhZy5naXQvb2JqZWN0cy9wYWNrL3BhY2stN2EyOGY0ZTAwMGExN2Y0OWE0MWQ3YTc5ZmMyZjc2MmE4YTdkOTE2NC5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L29iamVjdHMvcGFjay9wYWNrLTdhMjhmNGUwMDBhMTdmNDlhNDFkN2E3OWZjMmY3NjJhOGE3ZDkxNjQuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmFkX3RhZy5naXQvb2JqZWN0cy9wYWNrL3BhY2stN2EyOGY0ZTAwMGExN2Y0OWE0MWQ3YTc5ZmMyZjc2MmE4YTdkOTE2NC5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmFkX3RhZy5naXQvb2JqZWN0cy9wYWNrL3BhY2stN2EyOGY0ZTAwMGExN2Y0OWE0MWQ3YTc5ZmMyZjc2MmE4YTdkOTE2NC5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L29iamVjdHMvcGFjay9wYWNrLTdhMjhmNGUwMDBhMTdmNDlhNDFkN2E3OWZjMmY3NjJhOGE3ZDkxNjQucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmFkX3RhZy5naXQvb2JqZWN0cy9wYWNrL3BhY2stN2EyOGY0ZTAwMGExN2Y0OWE0MWQ3YTc5ZmMyZjc2MmE4YTdkOTE2NC5wYWNrCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmFkX3RhZy5naXQvb2JqZWN0cy9wYWNrL3BhY2stN2EyOGY0ZTAwMGExN2Y0OWE0MWQ3YTc5ZmMyZjc2MmE4YTdkOTE2NC5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iYWRfdGFnLmdpdC9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9iYWRfdGFnLmdpdC9yZWZzL2R1bW15LW1hcmtlci50eHQgYi90ZXN0cy9yZXNvdXJjZXMvYmFkX3RhZy5naXQvcmVmcy9kdW1teS1tYXJrZXIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iYWRfdGFnLmdpdC9yZWZzL2R1bW15LW1hcmtlci50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9iYWRfdGFnLmdpdC9yZWZzL2R1bW15LW1hcmtlci50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2JpZy5pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9iaWcuaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2JpZy5pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2JpZy5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvLmdpdHRlZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2luZm8vcmVmcyBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5mby9yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvaW5mby9yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL2luZm8vcmVmcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvaW5mby9wYWNrcyBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvb2JqZWN0cy9pbmZvL3BhY2tzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvb2JqZWN0cy9pbmZvL3BhY2tzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvaW5mby9wYWNrcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWM1YmZjYTg3NWI0OTk1ZDdhYmE2ZTVhYmYzNjI0MWYzYzM5NzMyN2QuaWR4IGIvdGVzdHMvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1jNWJmY2E4NzViNDk5NWQ3YWJhNmU1YWJmMzYyNDFmM2MzOTczMjdkLmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWM1YmZjYTg3NWI0OTk1ZDdhYmE2ZTVhYmYzNjI0MWYzYzM5NzMyN2QuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWM1YmZjYTg3NWI0OTk1ZDdhYmE2ZTVhYmYzNjI0MWYzYzM5NzMyN2QuaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1jNWJmY2E4NzViNDk5NWQ3YWJhNmU1YWJmMzYyNDFmM2MzOTczMjdkLnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWM1YmZjYTg3NWI0OTk1ZDdhYmE2ZTVhYmYzNjI0MWYzYzM5NzMyN2QucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWM1YmZjYTg3NWI0OTk1ZDdhYmE2ZTVhYmYzNjI0MWYzYzM5NzMyN2QucGFjawpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1jNWJmY2E4NzViNDk5NWQ3YWJhNmU1YWJmMzYyNDFmM2MzOTczMjdkLnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoMSBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2gxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2gxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoMQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoMiBiL3Rlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2gyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2gyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoMgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvYmluYXJ5dW5pY29kZS8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlL2ZpbGUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvZmlsZS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2JpbmFyeXVuaWNvZGUvZmlsZS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9iaW5hcnl1bmljb2RlL2ZpbGUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9iYWRfdGFnLmdpdC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2JhZF90YWcuZ2l0L0hFQUQKY29weSB0byB0ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L2NvbmZpZwpjb3B5IHRvIHRlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9kZXNjcmlwdGlvbgpjb3B5IHRvIHRlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzBjL2JhYjRkNDVmZDYxZTU1YTFjOTY5N2Y5ZjljYjA3YTEyZTE1NDQ4IGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy8wYy9iYWI0ZDQ1ZmQ2MWU1NWExYzk2OTdmOWY5Y2IwN2ExMmUxNTQ0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDMzMWNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy8wYy9iYWI0ZDQ1ZmQ2MWU1NWExYzk2OTdmOWY5Y2IwN2ExMmUxNTQ0OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzFhL2FjNjlhZTVkOTY0NjFhZmM0ZDgxZDAwNjZjYjEyZjViMDVhMzViIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy8xYS9hYzY5YWU1ZDk2NDYxYWZjNGQ4MWQwMDY2Y2IxMmY1YjA1YTM1YgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg5MDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy8xYS9hYzY5YWU1ZDk2NDYxYWZjNGQ4MWQwMDY2Y2IxMmY1YjA1YTM1YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzFiLzVmMDc3NWFmMTY2MzMxYzg1NGJkOGQxYmNhMzQ1MGVhZjI1MzJhIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy8xYi81ZjA3NzVhZjE2NjMzMWM4NTRiZDhkMWJjYTM0NTBlYWYyNTMyYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY0MzA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy8xYi81ZjA3NzVhZjE2NjMzMWM4NTRiZDhkMWJjYTM0NTBlYWYyNTMyYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzQ4LzJmMmMzNzBlMzVjMmMzMTRmYzFmOTZkYjJiZWIzM2Y5NTVhMjZhIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy80OC8yZjJjMzcwZTM1YzJjMzE0ZmMxZjk2ZGIyYmViMzNmOTU1YTI2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE0Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy80OC8yZjJjMzcwZTM1YzJjMzE0ZmMxZjk2ZGIyYmViMzNmOTU1YTI2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzYzL2Q2NzFlYjMyZDI1MGU0YTgzNzY2ZWJiYzYwZTgxOGMxZTFlOTNhIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy82My9kNjcxZWIzMmQyNTBlNGE4Mzc2NmViYmM2MGU4MThjMWUxZTkzYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjQxZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy82My9kNjcxZWIzMmQyNTBlNGE4Mzc2NmViYmM2MGU4MThjMWUxZTkzYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzYzL2ViNTczMjJlMzYzZTE4ZDQ2MGRhNWVhODI4NGYzY2QyMzQwYjM2IGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy82My9lYjU3MzIyZTM2M2UxOGQ0NjBkYTVlYTgyODRmM2NkMjM0MGIzNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmMyODVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy82My9lYjU3MzIyZTM2M2UxOGQ0NjBkYTVlYTgyODRmM2NkMjM0MGIzNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzhiLzEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy84Yi8xMzc4OTE3OTFmZTk2OTI3YWQ3OGU2NGIwYWFkN2JkZWQwOGJkYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDhmNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy84Yi8xMzc4OTE3OTFmZTk2OTI3YWQ3OGU2NGIwYWFkN2JkZWQwOGJkYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzk2LzY3OWQ1OWNmOWY3NGQ2OWIzYzkyMGYyNTg1NTliNWU4YzlhMThhIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy85Ni82NzlkNTljZjlmNzRkNjliM2M5MjBmMjU4NTU5YjVlOGM5YTE4YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzE2ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy85Ni82NzlkNTljZjlmNzRkNjliM2M5MjBmMjU4NTU5YjVlOGM5YTE4YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzLzk4Lzg5ZDZlNTU1Nzc2MWFhOGUzNjA3ZTgwYzg3NGE2ZGM1MWFkYTdjIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy85OC84OWQ2ZTU1NTc3NjFhYThlMzYwN2U4MGM4NzRhNmRjNTFhZGE3YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQwN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy85OC84OWQ2ZTU1NTc3NjFhYThlMzYwN2U4MGM4NzRhNmRjNTFhZGE3YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2FhLzA2ZWNjYTZjNGFkNjQzMmFiOTMxM2U1NTZjYTkyYmE0YmNmOWU5IGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9hYS8wNmVjY2E2YzRhZDY0MzJhYjkzMTNlNTU2Y2E5MmJhNGJjZjllOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzEzYmFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9hYS8wNmVjY2E2YzRhZDY0MzJhYjkzMTNlNTU2Y2E5MmJhNGJjZjllOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2IxLzc2ZGZjM2E0ZGM4NzM0ZTRjNTc5Zjc3MjM2YTljOGQwYTk2NWQyIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iMS83NmRmYzNhNGRjODczNGU0YzU3OWY3NzIzNmE5YzhkMGE5NjVkMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWY1Y2MxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iMS83NmRmYzNhNGRjODczNGU0YzU3OWY3NzIzNmE5YzhkMGE5NjVkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2I5LzBiYjg4N2I3YzAzNzUwYWU2YjM1MmZmZTc2YWI5ZDJlODZlZTdkIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iOS8wYmI4ODdiN2MwMzc1MGFlNmIzNTJmZmU3NmFiOWQyZTg2ZWU3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGY5Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iOS8wYmI4ODdiN2MwMzc1MGFlNmIzNTJmZmU3NmFiOWQyZTg2ZWU3ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2I5LzlmN2FjMGI4ODkwOTI1M2Q4Mjk1NTRjMTRhZjQ4OGMzYjBmM2E1IGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iOS85ZjdhYzBiODg5MDkyNTNkODI5NTU0YzE0YWY0ODhjM2IwZjNhNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDI4ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iOS85ZjdhYzBiODg5MDkyNTNkODI5NTU0YzE0YWY0ODhjM2IwZjNhNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2JjLzdjNWFjMmJhZmU4MjhhNjhlOWQxZDQ2MDM0MzcxOGQ2ZmJlMTM2IGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iYy83YzVhYzJiYWZlODI4YTY4ZTlkMWQ0NjAzNDM3MThkNmZiZTEzNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZhZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9iYy83YzVhYzJiYWZlODI4YTY4ZTlkMWQ0NjAzNDM3MThkNmZiZTEzNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2NmL2UwZTFlMWUzYmExOGYxNDlmZDQ3ZjVlMWFlZjYwMTZiMjI2MGMzIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9jZi9lMGUxZTFlM2JhMThmMTQ5ZmQ0N2Y1ZTFhZWY2MDE2YjIyNjBjMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDQ4ZTgxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9jZi9lMGUxZTFlM2JhMThmMTQ5ZmQ0N2Y1ZTFhZWY2MDE2YjIyNjBjMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2QwLzY3NzI5OTMyMDU3Y2RiNzUyN2E4MzNkNjc5OWM0ZGRjNTIwNjQwIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9kMC82NzcyOTkzMjA1N2NkYjc1MjdhODMzZDY3OTljNGRkYzUyMDY0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjZjNGJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9kMC82NzcyOTkzMjA1N2NkYjc1MjdhODMzZDY3OTljNGRkYzUyMDY0MApAQCAtMCwwICsxIEBACit4ASspSk1VMDNjMDQwMDMxUUjUK6koYZjRee1paHniqj4z9hc87V65R6Vu1UAVJIEVSK3JXBc7zU3qj2/jBbacjfrRrIujAcakGxkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2RhLzIzNzM5NGU2MTMyZDIwZDMwZjE3NWI5YjczYzg2MzhmZGRkZGRhIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9kYS8yMzczOTRlNjEzMmQyMGQzMGYxNzViOWI3M2M4NjM4ZmRkZGRkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWUxMzgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvb2JqZWN0cy9kYS8yMzczOTRlNjEzMmQyMGQzMGYxNzViOWI3M2M4NjM4ZmRkZGRkYQpAQCAtMCwwICsxLDQgQEAKK3gBlY9LCivCMBBAXfcUs+tKmXwnAyKi3sATJJPUdtFWYnp/C57A7YMH78k6z1MDrfDQaimQ0RNpZqPRkeRETlMMxmRPzGJzFqfRW+zesZalQWIeKAorphAYWTuTg2bnrCgbBxuCmISDia6LWxvXCiu3ssCz1bglOKfP9TW1cUsnWecLKOORFHpGOGJA7Ha6t7Xyn9Xdf0v9o/8CY5Y/UwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L29iamVjdHMvZTUvYjQxYzFlYTUzM2Y4NzM4OGFiNjliMTNiYWYwYjVhNTYyZDYyNDMgYi90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2U1L2I0MWMxZWE1MzNmODczODhhYjY5YjEzYmFmMGI1YTU2MmQ2MjQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTU4NmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2U1L2I0MWMxZWE1MzNmODczODhhYjY5YjEzYmFmMGI1YTU2MmQ2MjQzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L29iamVjdHMvZWYvMzJkZjRkMjU5MTQzOTMzNzE1Yzc0OTUxZjkzMmQ5ODkyMzY0ZDEgYi90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2VmLzMyZGY0ZDI1OTE0MzkzMzcxNWM3NDk1MWY5MzJkOTg5MjM2NGQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjFjY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvYmxhbWV0ZXN0LmdpdC9vYmplY3RzL2VmLzMyZGY0ZDI1OTE0MzkzMzcxNWM3NDk1MWY5MzJkOTg5MjM2NGQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2JsYW1ldGVzdC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2MzAyNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9ibGFtZXRlc3QuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCkBAIC0wLDAgKzEgQEAKK2JjN2M1YWMyYmFmZTgyOGE2OGU5ZDFkNDYwMzQzNzE4ZDZmYmUxMzYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy8uZ2l0Y29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy8uZ2l0Y29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvLmdpdGNvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy8uZ2l0Y29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZy1pbmNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWctaW5jbHVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjVlNzlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWctaW5jbHVkZQpAQCAtMCwwICsxLDIgQEAKK1tpbmNsdWRlXQorCXBhdGggPSBjb25maWctaW5jbHVkZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnLWluY2x1ZGVkIGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWctaW5jbHVkZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5Y2EwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnLWluY2x1ZGVkCkBAIC0wLDAgKzEsMiBAQAorW2ZvbyAiYmFyIl0KKyAgICAgYmF6ID0gaHV6emFoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMCBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzEgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMCBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzExIGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMQpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTEKaW5kZXggNzMzMTg2Mi4uMWQ4YTc0NCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzExCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTEKQEAgLTEsNCArMSw0IEBACi1bcmVtb3RlICJmYW5jeSJdCitbcmVtb3RlICJhYiJdCiAgICAgdXJsID0gZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL2xpYmdpdDIKICAgICB1cmwgPSBnaXQ6Ly9naXQuZXhhbXBsZS5jb20vbGliZ2l0MgogCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTIgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzEyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMyBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxMwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE0IGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTUgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxNiBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxNgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE3IGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE3CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTggYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzE4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxOSBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMTkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcxOQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzIgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWcyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnMjAgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMGYxMmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzIwCkBAIC0wLDAgKzEsMTEgQEAKK1t2YWxpZCAiW3N1YnNlY3Rpb25dIl0KKyAgICBzb21ldGhpbmcgPSBhCis7IHdlIGRvbid0IGFsbG93IGFueXRoaW5nIGFmdGVyIGNsb3NpbmcgIgorW3NlYyAiW3N1YnNlY10vY2hpbGQiXQorICAgIHBhcmVudCA9IGdyYW5kCitbc2VjMiAiW3N1YnNlYzJdL2NoaWxkMiJdCisgICAgdHlwZSA9IGR2Y3MKK1tzZWMzICJlc2NhcGVcInF1b3RlIl0KKyAgICB2Y3MgPSBnaXQKK1tzZWM0ICJlc2NhcGluZ1xcc2xhc2giXQorICAgIGxpYiA9IGdpdDIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWczIGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWczCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWczCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnNCBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnNApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzUgYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc2IGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc2CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnNyBiL3Rlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jb25maWcvY29uZmlnNwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzggYi90ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY29uZmlnL2NvbmZpZzgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc5IGIvdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jb25maWcvY29uZmlnOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NvbmZpZy9jb25maWc5CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMDQvZGUwMGIzNThmMTMzODk5NDg3NTY3MzIxNThlYWFhZWZhMTQ0OGMgYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMDQvZGUwMGIzNThmMTMzODk5NDg3NTY3MzIxNThlYWFhZWZhMTQ0OGMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzA0L2RlMDBiMzU4ZjEzMzg5OTQ4NzU2NzMyMTU4ZWFhYWVmYTE0NDhjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMDQvZGUwMGIzNThmMTMzODk5NDg3NTY3MzIxNThlYWFhZWZhMTQ0OGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGEvYTc2ZTQ3NGQyNTliZDdjMTNlYjcyNmExMzk2YzM4MWRiNTVjODggYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGEvYTc2ZTQ3NGQyNTliZDdjMTNlYjcyNmExMzk2YzM4MWRiNTVjODgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzBhL2E3NmU0NzRkMjU5YmQ3YzEzZWI3MjZhMTM5NmMzODFkYjU1Yzg4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGEvYTc2ZTQ3NGQyNTliZDdjMTNlYjcyNmExMzk2YzM4MWRiNTVjODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGQvMDY4OTRlMTRkZjIyZTA2Njc2M2FlOTA2ZTBlZDNlYjc5YzIwNWYgYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGQvMDY4OTRlMTRkZjIyZTA2Njc2M2FlOTA2ZTBlZDNlYjc5YzIwNWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzBkLzA2ODk0ZTE0ZGYyMmUwNjY3NjNhZTkwNmUwZWQzZWI3OWMyMDVmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGQvMDY4OTRlMTRkZjIyZTA2Njc2M2FlOTA2ZTBlZDNlYjc5YzIwNWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGYvZjVhNTNmMTliZmQyYjVlZWExYmE1NTAyOTVjNDc1MTU2Nzg5ODcgYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGYvZjVhNTNmMTliZmQyYjVlZWExYmE1NTAyOTVjNDc1MTU2Nzg5ODcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzBmL2Y1YTUzZjE5YmZkMmI1ZWVhMWJhNTUwMjk1YzQ3NTE1Njc4OTg3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMGYvZjVhNTNmMTliZmQyYjVlZWExYmE1NTAyOTVjNDc1MTU2Nzg5ODcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMTIvZmFmM2MxZWE1NWY1NzI0NzNjZWM5MDUyZmNhNDY4YzM1ODRjY2IgYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMTIvZmFmM2MxZWE1NWY1NzI0NzNjZWM5MDUyZmNhNDY4YzM1ODRjY2IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzEyL2ZhZjNjMWVhNTVmNTcyNDczY2VjOTA1MmZjYTQ2OGMzNTg0Y2NiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvMTIvZmFmM2MxZWE1NWY1NzI0NzNjZWM5MDUyZmNhNDY4YzM1ODRjY2IKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzM4LzFjZmU2MzBkZjkwMmJjMjkyNzFhMjAyZDMyNzc5ODExODBlNGE2IGIvdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzM4LzFjZmU2MzBkZjkwMmJjMjkyNzFhMjAyZDMyNzc5ODExODBlNGE2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy8zOC8xY2ZlNjMwZGY5MDJiYzI5MjcxYTIwMmQzMjc3OTgxMTgwZTRhNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzM4LzFjZmU2MzBkZjkwMmJjMjkyNzFhMjAyZDMyNzc5ODExODBlNGE2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzc5Lzk3NzBkMWNmZjQ2NzUzYTU3ZGI3YTA2NjE1OWI1NjEwZGE2ZTNhIGIvdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzc5Lzk3NzBkMWNmZjQ2NzUzYTU3ZGI3YTA2NjE1OWI1NjEwZGE2ZTNhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy83OS85NzcwZDFjZmY0Njc1M2E1N2RiN2EwNjYxNTliNTYxMGRhNmUzYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzc5Lzk3NzBkMWNmZjQ2NzUzYTU3ZGI3YTA2NjE1OWI1NjEwZGE2ZTNhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzdjL2NlNjdlNTgxNzNlMmIwMWY3ZGIxMjRjZWFhYmUzMTgzZDE5YzQ5IGIvdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzdjL2NlNjdlNTgxNzNlMmIwMWY3ZGIxMjRjZWFhYmUzMTgzZDE5YzQ5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy83Yy9jZTY3ZTU4MTczZTJiMDFmN2RiMTI0Y2VhYWJlMzE4M2QxOWM0OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzLzdjL2NlNjdlNTgxNzNlMmIwMWY3ZGIxMjRjZWFhYmUzMTgzZDE5YzQ5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzL2E5L2EyZTg5MTNjMWRiZTI4MTJmYWM1ZTZiNGUwYTRiZDVkMGQ1OTY2IGIvdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzL2E5L2EyZTg5MTNjMWRiZTI4MTJmYWM1ZTZiNGUwYTRiZDVkMGQ1OTY2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9hOS9hMmU4OTEzYzFkYmUyODEyZmFjNWU2YjRlMGE0YmQ1ZDBkNTk2NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9vYmplY3RzL2E5L2EyZTg5MTNjMWRiZTI4MTJmYWM1ZTZiNGUwYTRiZDVkMGQ1OTY2CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9iYS9hYTA0MmFiMjk3NmY4MjY0ZTQ2Nzk4OGU2MTEyZWU1MThlYzYyZSBiL3Rlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9iYS9hYTA0MmFiMjk3NmY4MjY0ZTQ2Nzk4OGU2MTEyZWU1MThlYzYyZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvYmEvYWEwNDJhYjI5NzZmODI2NGU0Njc5ODhlNjExMmVlNTE4ZWM2MmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9iYS9hYTA0MmFiMjk3NmY4MjY0ZTQ2Nzk4OGU2MTEyZWU1MThlYzYyZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9kYy84OGUzYjkxN2RlODIxZTI1OTYyYmVhN2VjMWY1NWM0Y2UyMTEyYyBiL3Rlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9kYy84OGUzYjkxN2RlODIxZTI1OTYyYmVhN2VjMWY1NWM0Y2UyMTEyYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvZGMvODhlM2I5MTdkZTgyMWUyNTk2MmJlYTdlYzFmNTVjNGNlMjExMmMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9kYy84OGUzYjkxN2RlODIxZTI1OTYyYmVhN2VjMWY1NWM0Y2UyMTEyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9lYS8wMzBkM2M2Y2VjMjEyMDY5ZWNhNjk4Y2FiYWE1YjQ1NTBmMTUxMSBiL3Rlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9lYS8wMzBkM2M2Y2VjMjEyMDY5ZWNhNjk4Y2FiYWE1YjQ1NTBmMTUxMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvZWEvMDMwZDNjNmNlYzIxMjA2OWVjYTY5OGNhYmFhNWI0NTUwZjE1MTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9lYS8wMzBkM2M2Y2VjMjEyMDY5ZWNhNjk4Y2FiYWE1YjQ1NTBmMTUxMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9mZS8wODVkOWFjZTkwY2M2NzViODdkZjE1ZTFhZWVkMGMzYTMxNDA3ZiBiL3Rlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9mZS8wODVkOWFjZTkwY2M2NzViODdkZjE1ZTFhZWVkMGMzYTMxNDA3ZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL29iamVjdHMvZmUvMDg1ZDlhY2U5MGNjNjc1Yjg3ZGYxNWUxYWVlZDBjM2EzMTQwN2YKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvb2JqZWN0cy9mZS8wODVkOWFjZTkwY2M2NzViODdkZjE1ZTFhZWVkMGMzYTMxNDA3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9jcmxmLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9yZWZzL2hlYWRzL3V0ZjggYi90ZXN0cy9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL3JlZnMvaGVhZHMvdXRmOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvY3JsZi8uZ2l0dGVkL3JlZnMvaGVhZHMvdXRmOApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2NybGYvLmdpdHRlZC9yZWZzL2hlYWRzL3V0ZjgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8wNi8yNjJlZGMyNTc0MThlOTk4N2NhZjk5OWY5YTdhM2UxNTQ3YWRmZiBiL3Rlc3RzL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L29iamVjdHMvMDYvMjYyZWRjMjU3NDE4ZTk5ODdjYWY5OTlmOWE3YTNlMTU0N2FkZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8wNi8yNjJlZGMyNTc0MThlOTk4N2NhZjk5OWY5YTdhM2UxNTQ3YWRmZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8wNi8yNjJlZGMyNTc0MThlOTk4N2NhZjk5OWY5YTdhM2UxNTQ3YWRmZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L29iamVjdHMvMDgvMTBmYjc4MTgwODhmZjVhYzQxZWU0OTE5OWI1MTQ3M2IxYmQ2YzcgYi90ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9vYmplY3RzLzA4LzEwZmI3ODE4MDg4ZmY1YWM0MWVlNDkxOTliNTE0NzNiMWJkNmM3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L29iamVjdHMvMDgvMTBmYjc4MTgwODhmZjVhYzQxZWU0OTE5OWI1MTQ3M2IxYmQ2YzcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L29iamVjdHMvMDgvMTBmYjc4MTgwODhmZjVhYzQxZWU0OTE5OWI1MTQ3M2IxYmQ2YzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9vYmplY3RzLzFiLzA1ZmRhYTg4MWVlNDViNDhjYmFhNWU5YjAzN2Q2NjdhNDc3NDVlIGIvdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8xYi8wNWZkYWE4ODFlZTQ1YjQ4Y2JhYTVlOWIwMzdkNjY3YTQ3NzQ1ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9vYmplY3RzLzFiLzA1ZmRhYTg4MWVlNDViNDhjYmFhNWU5YjAzN2Q2NjdhNDc3NDVlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGVwcmVjYXRlZC1tb2RlLmdpdC9vYmplY3RzLzFiLzA1ZmRhYTg4MWVlNDViNDhjYmFhNWU5YjAzN2Q2NjdhNDc3NDVlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8zZC8wOTcwZWM1NDdmYzQxZWY4YTU4ODJkZGU5OWM2YWRjZTY1YjAyMSBiL3Rlc3RzL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L29iamVjdHMvM2QvMDk3MGVjNTQ3ZmM0MWVmOGE1ODgyZGRlOTljNmFkY2U2NWIwMjEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8zZC8wOTcwZWM1NDdmYzQxZWY4YTU4ODJkZGU5OWM2YWRjZTY1YjAyMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvb2JqZWN0cy8zZC8wOTcwZWM1NDdmYzQxZWY4YTU4ODJkZGU5OWM2YWRjZTY1YjAyMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RlcHJlY2F0ZWQtbW9kZS5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kZXByZWNhdGVkLW1vZGUuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzI5L2FiNzA1M2JiNGRkZTAyOThlMDNlMmMxNzllODkwYjdkZDQ2NWE3IGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzI5L2FiNzA1M2JiNGRkZTAyOThlMDNlMmMxNzllODkwYjdkZDQ2NWE3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy8yOS9hYjcwNTNiYjRkZGUwMjk4ZTAzZTJjMTc5ZTg5MGI3ZGQ0NjVhNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzI5L2FiNzA1M2JiNGRkZTAyOThlMDNlMmMxNzllODkwYjdkZDQ2NWE3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzNlLzViY2JhZDJhNjhlNWJjNjBhNTNiODM4OGVlYTUzYTFhN2FiODQ3IGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzNlLzViY2JhZDJhNjhlNWJjNjBhNTNiODM4OGVlYTUzYTFhN2FiODQ3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy8zZS81YmNiYWQyYTY4ZTViYzYwYTUzYjgzODhlZWE1M2ExYTdhYjg0NwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzNlLzViY2JhZDJhNjhlNWJjNjBhNTNiODM4OGVlYTUzYTFhN2FiODQ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzU0LzZjNzM1ZjE2YTNiNDRkOTc4NDA3NWMyYzBkYWIyYWM5YmYxOTg5IGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzU0LzZjNzM1ZjE2YTNiNDRkOTc4NDA3NWMyYzBkYWIyYWM5YmYxOTg5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy81NC82YzczNWYxNmEzYjQ0ZDk3ODQwNzVjMmMwZGFiMmFjOWJmMTk4OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzU0LzZjNzM1ZjE2YTNiNDRkOTc4NDA3NWMyYzBkYWIyYWM5YmYxOTg5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzdhLzllMGIwMmU2MzE3OTkyOWZlZDI0ZjBhM2UwZjE5MTY4MTE0ZDEwIGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzdhLzllMGIwMmU2MzE3OTkyOWZlZDI0ZjBhM2UwZjE5MTY4MTE0ZDEwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy83YS85ZTBiMDJlNjMxNzk5MjlmZWQyNGYwYTNlMGYxOTE2ODExNGQxMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzdhLzllMGIwMmU2MzE3OTkyOWZlZDI0ZjBhM2UwZjE5MTY4MTE0ZDEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzdiLzgwOGY3MjNhOGNhOTBkZjMxOTY4MmMyMjExODcyMzVhZjc2NjkzIGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzdiLzgwOGY3MjNhOGNhOTBkZjMxOTY4MmMyMjExODcyMzVhZjc2NjkzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy83Yi84MDhmNzIzYThjYTkwZGYzMTk2ODJjMjIxMTg3MjM1YWY3NjY5MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzdiLzgwOGY3MjNhOGNhOTBkZjMxOTY4MmMyMjExODcyMzVhZjc2NjkzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzg4Lzc4OTEwOTQzOWMxZTFjM2NkNDUyMjQwMDFlZGVlNTMwNGVkNTNjIGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzg4Lzc4OTEwOTQzOWMxZTFjM2NkNDUyMjQwMDFlZGVlNTMwNGVkNTNjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy84OC83ODkxMDk0MzljMWUxYzNjZDQ1MjI0MDAxZWRlZTUzMDRlZDUzYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9vYmplY3RzLzg4Lzc4OTEwOTQzOWMxZTFjM2NkNDUyMjQwMDFlZGVlNTMwNGVkNTNjCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy9jYi84Mjk0ZTY5NjMzOTg2M2RmNzYwYjJmZjVkMWUyNzViZWU3MjQ1NSBiL3Rlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy9jYi84Mjk0ZTY5NjMzOTg2M2RmNzYwYjJmZjVkMWUyNzViZWU3MjQ1NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL29iamVjdHMvY2IvODI5NGU2OTYzMzk4NjNkZjc2MGIyZmY1ZDFlMjc1YmVlNzI0NTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy9jYi84Mjk0ZTY5NjMzOTg2M2RmNzYwYjJmZjVkMWUyNzViZWU3MjQ1NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy9kNy8wZDI0NWVkOTdlZDJhYTU5NmRkMWFmNjUzNmU0YmZkYjA0N2I2OSBiL3Rlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy9kNy8wZDI0NWVkOTdlZDJhYTU5NmRkMWFmNjUzNmU0YmZkYjA0N2I2OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL29iamVjdHMvZDcvMGQyNDVlZDk3ZWQyYWE1OTZkZDFhZjY1MzZlNGJmZGIwNDdiNjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kaWZmLy5naXR0ZWQvb2JqZWN0cy9kNy8wZDI0NWVkOTdlZDJhYTU5NmRkMWFmNjUzNmU0YmZkYjA0N2I2OQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZGlmZi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmL2Fub3RoZXIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2RpZmYvYW5vdGhlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2RpZmYvYW5vdGhlci50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kaWZmL2Fub3RoZXIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmL3JlYWRtZS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvZGlmZi9yZWFkbWUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kaWZmL3JlYWRtZS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kaWZmL3JlYWRtZS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvQ09NTUlUX0VESVRNU0cgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9DT01NSVRfRURJVE1TRwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9DT01NSVRfRURJVE1TRwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvQ09NTUlUX0VESVRNU0cKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zaG9ydF90YWcuZ2l0L2NvbmZpZwpjb3B5IHRvIHRlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9pbmZvL3JlZnMgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9pbmZvL3JlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvaW5mby9yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9pbmZvL3JlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvMGQvZGVhZGVkZTllNmQ2Y2NkZGNlMGVlMWU1NzQ5ZWVkMDQ4NWU1ZWEgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzLzBkL2RlYWRlZGU5ZTZkNmNjZGRjZTBlZTFlNTc0OWVlZDA0ODVlNWVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzJhNjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzLzBkL2RlYWRlZGU5ZTZkNmNjZGRjZTBlZTFlNTc0OWVlZDA0ODVlNWVhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9jZS8wMTM2MjUwMzBiYThkYmE5MDZmNzU2OTY3ZjllOWNhMzk0NDY0YSBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvY2UvMDEzNjI1MDMwYmE4ZGJhOTA2Zjc1Njk2N2Y5ZTljYTM5NDQ2NGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9jZS8wMTM2MjUwMzBiYThkYmE5MDZmNzU2OTY3ZjllOWNhMzk0NDY0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9jZS8wMTM2MjUwMzBiYThkYmE5MDZmNzU2OTY3ZjllOWNhMzk0NDY0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL2luZm8vcGFja3MgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL2luZm8vcGFja3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmZGY5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvaW5mby9wYWNrcwpAQCAtMCwwICsxLDMgQEAKK1AgcGFjay1lODc5OTRhZDU4MWM5YWY5NDZkZTBlYjg5MDE3NWMwOGNkMDA1ZjM4LnBhY2sKK1AgcGFjay1mNGVmMWFhMzI2MjY1ZGU3ZDA1MDE4ZWU1MWFjYzBhODcxN2ZlMWVhLnBhY2sKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stMjlhNDg5NmYwYTBiOWM5OTQ3YjA5MjdjNTdhNWMwM2RjYWUwNTJlMy5pZHggYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay0yOWE0ODk2ZjBhMGI5Yzk5NDdiMDkyN2M1N2E1YzAzZGNhZTA1MmUzLmlkeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JlZDgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stMjlhNDg5NmYwYTBiOWM5OTQ3YjA5MjdjNTdhNWMwM2RjYWUwNTJlMy5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stMjlhNDg5NmYwYTBiOWM5OTQ3YjA5MjdjNTdhNWMwM2RjYWUwNTJlMy5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stMjlhNDg5NmYwYTBiOWM5OTQ3YjA5MjdjNTdhNWMwM2RjYWUwNTJlMy5wYWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MmIwYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay0yOWE0ODk2ZjBhMGI5Yzk5NDdiMDkyN2M1N2E1YzAzZGNhZTA1MmUzLnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stYjE4ZWVhY2JkNjVjYmQzMGEzNjVkNzU2NGI0NWE0NjhlOGJkNDNkNi5pZHggYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1iMThlZWFjYmQ2NWNiZDMwYTM2NWQ3NTY0YjQ1YTQ2OGU4YmQ0M2Q2LmlkeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmY2ODU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stYjE4ZWVhY2JkNjVjYmQzMGEzNjVkNzU2NGI0NWE0NjhlOGJkNDNkNi5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stYjE4ZWVhY2JkNjVjYmQzMGEzNjVkNzU2NGI0NWE0NjhlOGJkNDNkNi5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvb2JqZWN0cy9wYWNrL3BhY2stYjE4ZWVhY2JkNjVjYmQzMGEzNjVkNzU2NGI0NWE0NjhlOGJkNDNkNi5wYWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZTVmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1iMThlZWFjYmQ2NWNiZDMwYTM2NWQ3NTY0YjQ1YTQ2OGU4YmQ0M2Q2LnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1lODc5OTRhZDU4MWM5YWY5NDZkZTBlYjg5MDE3NWMwOGNkMDA1ZjM4LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4Nzk5NGFkNTgxYzlhZjk0NmRlMGViODkwMTc1YzA4Y2QwMDVmMzguaWR4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4Nzk5NGFkNTgxYzlhZjk0NmRlMGViODkwMTc1YzA4Y2QwMDVmMzguaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1lODc5OTRhZDU4MWM5YWY5NDZkZTBlYjg5MDE3NWMwOGNkMDA1ZjM4LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4Nzk5NGFkNTgxYzlhZjk0NmRlMGViODkwMTc1YzA4Y2QwMDVmMzgucGFjayBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4Nzk5NGFkNTgxYzlhZjk0NmRlMGViODkwMTc1YzA4Y2QwMDVmMzgucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1lODc5OTRhZDU4MWM5YWY5NDZkZTBlYjg5MDE3NWMwOGNkMDA1ZjM4LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4Nzk5NGFkNTgxYzlhZjk0NmRlMGViODkwMTc1YzA4Y2QwMDVmMzgucGFjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1mNGVmMWFhMzI2MjY1ZGU3ZDA1MDE4ZWU1MWFjYzBhODcxN2ZlMWVhLmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWY0ZWYxYWEzMjYyNjVkZTdkMDUwMThlZTUxYWNjMGE4NzE3ZmUxZWEuaWR4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzhmNmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1mNGVmMWFhMzI2MjY1ZGU3ZDA1MDE4ZWU1MWFjYzBhODcxN2ZlMWVhLmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1mNGVmMWFhMzI2MjY1ZGU3ZDA1MDE4ZWU1MWFjYzBhODcxN2ZlMWVhLnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9vYmplY3RzL3BhY2svcGFjay1mNGVmMWFhMzI2MjY1ZGU3ZDA1MDE4ZWU1MWFjYzBhODcxN2ZlMWVhLnBhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkZDNiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L29iamVjdHMvcGFjay9wYWNrLWY0ZWYxYWEzMjYyNjVkZTdkMDUwMThlZTUxYWNjMGE4NzE3ZmUxZWEucGFjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2R1cGxpY2F0ZS5naXQvcGFja2VkLXJlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9yZWZzL2hlYWRzL2R1bW15LW1hcmtlci50eHQgYi90ZXN0cy9yZXNvdXJjZXMvZHVwbGljYXRlLmdpdC9yZWZzL2hlYWRzL2R1bW15LW1hcmtlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxMzc2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9kdXBsaWNhdGUuZ2l0L3JlZnMvaGVhZHMvZHVtbXktbWFya2VyLnR4dApAQCAtMCwwICsxIEBACitkdW1teQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9vYmplY3RzL2luZm8vZHVtbXktbWFya2VyLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9vYmplY3RzL2luZm8vZHVtbXktbWFya2VyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvb2JqZWN0cy9pbmZvL2R1bW15LW1hcmtlci50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9vYmplY3RzL2luZm8vZHVtbXktbWFya2VyLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvb2JqZWN0cy9wYWNrL2R1bW15LW1hcmtlci50eHQgYi90ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvb2JqZWN0cy9wYWNrL2R1bW15LW1hcmtlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L29iamVjdHMvcGFjay9kdW1teS1tYXJrZXIudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvb2JqZWN0cy9wYWNrL2R1bW15LW1hcmtlci50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L3JlZnMvaGVhZHMvZHVtbXktbWFya2VyLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9lbXB0eV9iYXJlLmdpdC9yZWZzL2hlYWRzL2R1bW15LW1hcmtlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L3JlZnMvaGVhZHMvZHVtbXktbWFya2VyLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L3JlZnMvaGVhZHMvZHVtbXktbWFya2VyLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvcmVmcy90YWdzL2R1bW15LW1hcmtlci50eHQgYi90ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvcmVmcy90YWdzL2R1bW15LW1hcmtlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X2JhcmUuZ2l0L3JlZnMvdGFncy9kdW1teS1tYXJrZXIudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZW1wdHlfYmFyZS5naXQvcmVmcy90YWdzL2R1bW15LW1hcmtlci50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9vYmplY3RzL2luZm8vZHVtbXktbWFya2VyLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvb2JqZWN0cy9pbmZvL2R1bW15LW1hcmtlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9vYmplY3RzL2luZm8vZHVtbXktbWFya2VyLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9vYmplY3RzL2luZm8vZHVtbXktbWFya2VyLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9kdW1teS1tYXJrZXIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svZHVtbXktbWFya2VyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9kdW1teS1tYXJrZXIudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9kdW1teS1tYXJrZXIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9kdW1teS1tYXJrZXIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2R1bW15LW1hcmtlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2VtcHR5X3N0YW5kYXJkX3JlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2R1bW15LW1hcmtlci50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9kdW1teS1tYXJrZXIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvcmVmcy90YWdzL2R1bW15LW1hcmtlci50eHQgYi90ZXN0cy9yZXNvdXJjZXMvZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0dGVkL3JlZnMvdGFncy9kdW1teS1tYXJrZXIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvcmVmcy90YWdzL2R1bW15LW1hcmtlci50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9lbXB0eV9zdGFuZGFyZF9yZXBvLy5naXR0ZWQvcmVmcy90YWdzL2R1bW15LW1hcmtlci50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9vYmplY3RzLzk5LzYyYzg0NTNiYTZmMGNmOGRhYzdjNWRjYzJmYTI4OTdmYTk5NjRhIGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL29iamVjdHMvOTkvNjJjODQ1M2JhNmYwY2Y4ZGFjN2M1ZGNjMmZhMjg5N2ZhOTk2NGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL29iamVjdHMvOTkvNjJjODQ1M2JhNmYwY2Y4ZGFjN2M1ZGNjMmZhMjg5N2ZhOTk2NGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9vYmplY3RzLzk5LzYyYzg0NTNiYTZmMGNmOGRhYzdjNWRjYzJmYTI4OTdmYTk5NjRhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL29iamVjdHMvYTUvYzVkZDBmYzZjMzEzMTU5YTY5YjFkMTlkN2Y2MWE5Zjk3OGU4ZjEgYi90ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvb2JqZWN0cy9hNS9jNWRkMGZjNmMzMTMxNTlhNjliMWQxOWQ3ZjYxYTlmOTc4ZThmMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvb2JqZWN0cy9hNS9jNWRkMGZjNmMzMTMxNTlhNjliMWQxOWQ3ZjYxYTlmOTc4ZThmMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy8uZ2l0dGVkL29iamVjdHMvYTUvYzVkZDBmYzZjMzEzMTU5YTY5YjFkMTlkN2Y2MWE5Zjk3OGU4ZjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvb2JqZWN0cy9lNy80OGQxOTYzMzFiY2IyMDI2N2VhYWVlNGZmMzMyNmNiNzNiODE4MiBiL3Rlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9vYmplY3RzL2U3LzQ4ZDE5NjMzMWJjYjIwMjY3ZWFhZWU0ZmYzMzI2Y2I3M2I4MTgyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9vYmplY3RzL2U3LzQ4ZDE5NjMzMWJjYjIwMjY3ZWFhZWU0ZmYzMzI2Y2I3M2I4MTgyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvb2JqZWN0cy9lNy80OGQxOTYzMzFiY2IyMDI2N2VhYWVlNGZmMzMyNmNiNzNiODE4MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb2ZmIGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29mZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb2ZmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb2ZmCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmYyb25fc3RhZ2VkIGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29mZjJvbl9zdGFnZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29mZjJvbl9zdGFnZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmYyb25fc3RhZ2VkCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmYyb25fd29ya2RpciBiL3Rlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmYyb25fd29ya2RpcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb2ZmMm9uX3dvcmtkaXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmYyb25fd29ya2RpcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb2ZmX3VudHJhY2tlZCBiL3Rlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmZfdW50cmFja2VkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vZmZfdW50cmFja2VkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb2ZmX3VudHJhY2tlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb24gYi90ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29uMm9mZl9zdGFnZWQgYi90ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb24yb2ZmX3N0YWdlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb24yb2ZmX3N0YWdlZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29uMm9mZl9zdGFnZWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29uMm9mZl93b3JrZGlyIGIvdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29uMm9mZl93b3JrZGlyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vbjJvZmZfd29ya2RpcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ZpbGVtb2Rlcy9leGVjX29uMm9mZl93b3JrZGlyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vbl91bnRyYWNrZWQgYi90ZXN0cy9yZXNvdXJjZXMvZmlsZW1vZGVzL2V4ZWNfb25fdW50cmFja2VkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vbl91bnRyYWNrZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9maWxlbW9kZXMvZXhlY19vbl91bnRyYWNrZWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2dpdGdpdC5pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9naXRnaXQuaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2dpdGdpdC5pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2dpdGdpdC5pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvM2UvMjU3YzU3ZjEzNmExY2I4ZjJiOGU5YTJlNWJjOGVjMDI1OGJkY2UgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzLzNlLzI1N2M1N2YxMzZhMWNiOGYyYjhlOWEyZTViYzhlYzAyNThiZGNlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvM2UvMjU3YzU3ZjEzNmExY2I4ZjJiOGU5YTJlNWJjOGVjMDI1OGJkY2UKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvM2UvMjU3YzU3ZjEzNmExY2I4ZjJiOGU5YTJlNWJjOGVjMDI1OGJkY2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzLzRkL2Q2MDI3ZDA4MzU3NWM3NDMxMzk2ZGMyYTMxNzRhZmViMzkzYzkzIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvb2JqZWN0cy80ZC9kNjAyN2QwODM1NzVjNzQzMTM5NmRjMmEzMTc0YWZlYjM5M2M5MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzLzRkL2Q2MDI3ZDA4MzU3NWM3NDMxMzk2ZGMyYTMxNzRhZmViMzkzYzkzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzLzRkL2Q2MDI3ZDA4MzU3NWM3NDMxMzk2ZGMyYTMxNzRhZmViMzkzYzkzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvb2JqZWN0cy82Mi9lMGFmNTJjMTk5ZWM3MzFmZTRhZDIzMDA0MWNkMzI4NjE5MmQ0OSBiL3Rlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvNjIvZTBhZjUyYzE5OWVjNzMxZmU0YWQyMzAwNDFjZDMyODYxOTJkNDkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvb2JqZWN0cy82Mi9lMGFmNTJjMTk5ZWM3MzFmZTRhZDIzMDA0MWNkMzI4NjE5MmQ0OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvb2JqZWN0cy82Mi9lMGFmNTJjMTk5ZWM3MzFmZTRhZDIzMDA0MWNkMzI4NjE5MmQ0OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvNzYvZDZlMWQyMzFiMTA4NWZjY2UxNTE0MjdlOTg5OTMzNWRlNzRiZTYgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzLzc2L2Q2ZTFkMjMxYjEwODVmY2NlMTUxNDI3ZTk4OTkzMzVkZTc0YmU2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvNzYvZDZlMWQyMzFiMTA4NWZjY2UxNTE0MjdlOTg5OTMzNWRlNzRiZTYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS8uZ2l0dGVkL29iamVjdHMvNzYvZDZlMWQyMzFiMTA4NWZjY2UxNTE0MjdlOTg5OTMzNWRlNzRiZTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzL2Q0LzRlMThmYjkzYjcxMDdiNWNkMWI5NWQ2MDE1OTFkNzc4NjlhMWI2IGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvb2JqZWN0cy9kNC80ZTE4ZmI5M2I3MTA3YjVjZDFiOTVkNjAxNTkxZDc3ODY5YTFiNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzL2Q0LzRlMThmYjkzYjcxMDdiNWNkMWI5NWQ2MDE1OTFkNzc4NjlhMWI2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9vYmplY3RzL2Q0LzRlMThmYjkzYjcxMDdiNWNkMWI5NWQ2MDE1OTFkNzc4NjlhMWI2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0IgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvQgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvQgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0IKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0QgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0QKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0YgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvRgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0YKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0ggYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvSApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvSApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0ogYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvSgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvSgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0oKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0wvMSBiL3Rlc3RzL3Jlc291cmNlcy9pY2FzZS9MLzEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0wvMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0wvMQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvTC9CIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0wvQgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvTC9CCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaWNhc2UvTC9CCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9ML0QgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2UvTC9ECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9ML0QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9ML0QKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0wvYSBiL3Rlc3RzL3Jlc291cmNlcy9pY2FzZS9ML2EKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL0wvYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0wvYQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvTC9jIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL0wvYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2UvTC9jCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaWNhc2UvTC9jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9hIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2EKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2EKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9hCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9jIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9lIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2UKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9lCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9nIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2cKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2cKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9nCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9pIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2kKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2kKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9pCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9rLzEgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2Uvay8xCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9rLzEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9rLzEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2svQiBiL3Rlc3RzL3Jlc291cmNlcy9pY2FzZS9rL0IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2svQgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2svQgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2Uvay9EIGIvdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2svRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaWNhc2Uvay9ECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaWNhc2Uvay9ECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9rL2EgYi90ZXN0cy9yZXNvdXJjZXMvaWNhc2Uvay9hCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pY2FzZS9rL2EKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pY2FzZS9rL2EKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2svYyBiL3Rlc3RzL3Jlc291cmNlcy9pY2FzZS9rL2MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2ljYXNlL2svYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2ljYXNlL2svYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV8xMzk3Ly5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV8xMzk3Ly5naXR0ZWQvb2JqZWN0cy83Zi80ODNhNzM4Zjg2N2U1YjIxYzhmMzc3ZDcwMzExZjAxMWViNDhiNSBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV8xMzk3Ly5naXR0ZWQvb2JqZWN0cy83Zi80ODNhNzM4Zjg2N2U1YjIxYzhmMzc3ZDcwMzExZjAxMWViNDhiNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvN2YvNDgzYTczOGY4NjdlNWIyMWM4ZjM3N2Q3MDMxMWYwMTFlYjQ4YjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV8xMzk3Ly5naXR0ZWQvb2JqZWN0cy83Zi80ODNhNzM4Zjg2N2U1YjIxYzhmMzc3ZDcwMzExZjAxMWViNDhiNQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvODMvMTJlMDg4OWE5Y2JhYjc3YzczMmI2YmMzOWI1MWE2ODNlM2EzMTggYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvODMvMTJlMDg4OWE5Y2JhYjc3YzczMmI2YmMzOWI1MWE2ODNlM2EzMTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9vYmplY3RzLzgzLzEyZTA4ODlhOWNiYWI3N2M3MzJiNmJjMzliNTFhNjgzZTNhMzE4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvODMvMTJlMDg4OWE5Y2JhYjc3YzczMmI2YmMzOWI1MWE2ODNlM2EzMTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvOGEvN2VmMDQ3ZmM5MzNlZGI2MmU4NGU3OTc3YjA2MTJlYzNmNmYyODMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvOGEvN2VmMDQ3ZmM5MzNlZGI2MmU4NGU3OTc3YjA2MTJlYzNmNmYyODMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9vYmplY3RzLzhhLzdlZjA0N2ZjOTMzZWRiNjJlODRlNzk3N2IwNjEyZWMzZjZmMjgzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvOGEvN2VmMDQ3ZmM5MzNlZGI2MmU4NGU3OTc3YjA2MTJlYzNmNmYyODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvOGUvOGY4MDA4OGE5Mjc0ZmQyMzU4NDk5MmY1ODcwODNjYTFiY2JiYWMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvOGUvOGY4MDA4OGE5Mjc0ZmQyMzU4NDk5MmY1ODcwODNjYTFiY2JiYWMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9vYmplY3RzLzhlLzhmODAwODhhOTI3NGZkMjM1ODQ5OTJmNTg3MDgzY2ExYmNiYmFjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvOGUvOGY4MDA4OGE5Mjc0ZmQyMzU4NDk5MmY1ODcwODNjYTFiY2JiYWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvZjIvYzYyZGVhMDM3MmEwNTc4ZTA1MzY5N2Q1YzFiYTFhYzA1ZTc3NGEgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvZjIvYzYyZGVhMDM3MmEwNTc4ZTA1MzY5N2Q1YzFiYTFhYzA1ZTc3NGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9vYmplY3RzL2YyL2M2MmRlYTAzNzJhMDU3OGUwNTM2OTdkNWMxYmExYWMwNWU3NzRhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvZjIvYzYyZGVhMDM3MmEwNTc4ZTA1MzY5N2Q1YzFiYTFhYzA1ZTc3NGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvZmYvMzU3OGQ2NGQxOTlkNWI0OGQ5MmJiYjU2OWUwYTI3M2U0MTE3NDEgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvZmYvMzU3OGQ2NGQxOTlkNWI0OGQ5MmJiYjU2OWUwYTI3M2U0MTE3NDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9vYmplY3RzL2ZmLzM1NzhkNjRkMTk5ZDViNDhkOTJiYmI1NjllMGEyNzNlNDExNzQxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL29iamVjdHMvZmYvMzU3OGQ2NGQxOTlkNWI0OGQ5MmJiYjU2OWUwYTI3M2U0MTE3NDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzEzOTcvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV8xMzk3L2NybGZfZmlsZS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfMTM5Ny9jcmxmX2ZpbGUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV8xMzk3L2NybGZfZmlsZS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV8xMzk3L2NybGZfZmlsZS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzEzOTcvc29tZV9vdGhlcl9jcmxmX2ZpbGUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzEzOTcvc29tZV9vdGhlcl9jcmxmX2ZpbGUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV8xMzk3L3NvbWVfb3RoZXJfY3JsZl9maWxlLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzEzOTcvc29tZV9vdGhlcl9jcmxmX2ZpbGUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9DT01NSVRfRURJVE1TRyBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9DT01NSVRfRURJVE1TRwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvQ09NTUlUX0VESVRNU0cKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9DT01NSVRfRURJVE1TRwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy8wNi8wN2VlOWQ0Y2NjZThlNGM0ZmExM2MyYzdkNzI3ZTdmYWJhNGUwZSBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzLzA2LzA3ZWU5ZDRjY2NlOGU0YzRmYTEzYzJjN2Q3MjdlN2ZhYmE0ZTBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzLzA2LzA3ZWU5ZDRjY2NlOGU0YzRmYTEzYzJjN2Q3MjdlN2ZhYmE0ZTBlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy8wNi8wN2VlOWQ0Y2NjZThlNGM0ZmExM2MyYzdkNzI3ZTdmYWJhNGUwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzLzQ5LzM2M2E3MmE5MGQ5NDI0MjQwMjU4Y2QzNzU5ZjIzNzg4ZWNmMWQ4IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvNDkvMzYzYTcyYTkwZDk0MjQyNDAyNThjZDM3NTlmMjM3ODhlY2YxZDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvNDkvMzYzYTcyYTkwZDk0MjQyNDAyNThjZDM3NTlmMjM3ODhlY2YxZDgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzLzQ5LzM2M2E3MmE5MGQ5NDI0MjQwMjU4Y2QzNzU5ZjIzNzg4ZWNmMWQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvNGQvMzgzZTg3ZjAzNzFiYThmYTM1M2YzOTEyZGI2ODYyYjI2MjVlODUgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy80ZC8zODNlODdmMDM3MWJhOGZhMzUzZjM5MTJkYjY4NjJiMjYyNWU4NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy80ZC8zODNlODdmMDM3MWJhOGZhMzUzZjM5MTJkYjY4NjJiMjYyNWU4NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvNGQvMzgzZTg3ZjAzNzFiYThmYTM1M2YzOTEyZGI2ODYyYjI2MjVlODUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy83MS80NGJlMjY0YjYxODI1ZmJmZjY4MDQ2ZmU5OTliZGZlOTZhMTc5MiBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzLzcxLzQ0YmUyNjRiNjE4MjVmYmZmNjgwNDZmZTk5OWJkZmU5NmExNzkyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzLzcxLzQ0YmUyNjRiNjE4MjVmYmZmNjgwNDZmZTk5OWJkZmU5NmExNzkyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy83MS80NGJlMjY0YjYxODI1ZmJmZjY4MDQ2ZmU5OTliZGZlOTZhMTc5MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzL2JlL2RlODNlZTEwYjViM2YwMDIzOTY2MGIwMGFjZWMyZDU1ZmQwYjg0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvYmUvZGU4M2VlMTBiNWIzZjAwMjM5NjYwYjAwYWNlYzJkNTVmZDBiODQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvYmUvZGU4M2VlMTBiNWIzZjAwMjM5NjYwYjAwYWNlYzJkNTVmZDBiODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzL2JlL2RlODNlZTEwYjViM2YwMDIzOTY2MGIwMGFjZWMyZDU1ZmQwYjg0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvZTMvOGZjYzdhNjA2MGY1ZWI1Yjg3NmU4MzZiNTJhZTQ3NjkzNjNmMjEgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy9lMy84ZmNjN2E2MDYwZjVlYjViODc2ZTgzNmI1MmFlNDc2OTM2M2YyMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy9lMy84ZmNjN2E2MDYwZjVlYjViODc2ZTgzNmI1MmFlNDc2OTM2M2YyMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi8uZ2l0dGVkL29iamVjdHMvZTMvOGZjYzdhNjA2MGY1ZWI1Yjg3NmU4MzZiNTJhZTQ3NjkzNjNmMjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy9mMS9hZGVmNjNjYjA4ODkxYTA5NDJiNzZmYzRiOWM1MGM2YzQ5NGJjNyBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzL2YxL2FkZWY2M2NiMDg4OTFhMDk0MmI3NmZjNGI5YzUwYzZjNDk0YmM3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9vYmplY3RzL2YxL2FkZWY2M2NiMDg4OTFhMDk0MmI3NmZjNGI5YzUwYzZjNDk0YmM3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvb2JqZWN0cy9mMS9hZGVmNjNjYjA4ODkxYTA5NDJiNzZmYzRiOWM1MGM2YzQ5NGJjNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL2EudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi9hLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL2EudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyL2EudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvYy9hLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvYy9hLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL2MvYS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvYy9hLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL2wudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5Mi9sLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL2wudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyL2wudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTIvdC9hLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvdC9hLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL3QvYS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTIvdC9hLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyL3QvYi50eHQgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyL3QvYi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5Mi90L2IudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyL3QvYi50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvM2YvYmYxODUyZjcyZmQyNjhlMzY0NTdiMTNhMThjZGQ5YTRjOWVhMzUgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvM2YvYmYxODUyZjcyZmQyNjhlMzY0NTdiMTNhMThjZGQ5YTRjOWVhMzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzLzNmL2JmMTg1MmY3MmZkMjY4ZTM2NDU3YjEzYTE4Y2RkOWE0YzllYTM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvM2YvYmYxODUyZjcyZmQyNjhlMzY0NTdiMTNhMThjZGQ5YTRjOWVhMzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvNmYvYTg5MWQzZTU3OGM4M2UxYzAzYmRiOWUwZmRkOGU2ZTkzNDE1N2YgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvNmYvYTg5MWQzZTU3OGM4M2UxYzAzYmRiOWUwZmRkOGU2ZTkzNDE1N2YKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzLzZmL2E4OTFkM2U1NzhjODNlMWMwM2JkYjllMGZkZDhlNmU5MzQxNTdmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvNmYvYTg5MWQzZTU3OGM4M2UxYzAzYmRiOWUwZmRkOGU2ZTkzNDE1N2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvODAvMDdkNDFkNTc5NGU2Y2U0ZDRkMmM5N2UzNzBkNWE5YWE2ZDUyMTMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvODAvMDdkNDFkNTc5NGU2Y2U0ZDRkMmM5N2UzNzBkNWE5YWE2ZDUyMTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzLzgwLzA3ZDQxZDU3OTRlNmNlNGQ0ZDJjOTdlMzcwZDVhOWFhNmQ1MjEzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvODAvMDdkNDFkNTc5NGU2Y2U0ZDRkMmM5N2UzNzBkNWE5YWE2ZDUyMTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYTYvNWZiNjU4M2E3YzQyNTI4NDE0MmYyODViYzM1OWEyZDY1NjU1MTMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYTYvNWZiNjU4M2E3YzQyNTI4NDE0MmYyODViYzM1OWEyZDY1NjU1MTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzL2E2LzVmYjY1ODNhN2M0MjUyODQxNDJmMjg1YmMzNTlhMmQ2NTY1NTEzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYTYvNWZiNjU4M2E3YzQyNTI4NDE0MmYyODViYzM1OWEyZDY1NjU1MTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYWUvYmU3YTU1OTIyYzcwOTdlZjkxY2EzYTdiYzMyN2E5MDFkODdjMmMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYWUvYmU3YTU1OTIyYzcwOTdlZjkxY2EzYTdiYzMyN2E5MDFkODdjMmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzL2FlL2JlN2E1NTkyMmM3MDk3ZWY5MWNhM2E3YmMzMjdhOTAxZDg3YzJjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYWUvYmU3YTU1OTIyYzcwOTdlZjkxY2EzYTdiYzMyN2E5MDFkODdjMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYjMvNDRiMDU1ODY3ZmNkYzFmMDFlYWE3NTA1NmE0M2U4NjhlYjRmYmMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYjMvNDRiMDU1ODY3ZmNkYzFmMDFlYWE3NTA1NmE0M2U4NjhlYjRmYmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzL2IzLzQ0YjA1NTg2N2ZjZGMxZjAxZWFhNzUwNTZhNDNlODY4ZWI0ZmJjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvYjMvNDRiMDU1ODY3ZmNkYzFmMDFlYWE3NTA1NmE0M2U4NjhlYjRmYmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvZjcvZDc1ZmJmYWQ4YjFkMmUzMDdjZWQyODdlYTc4YWFkNDAzY2RjZTMgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvZjcvZDc1ZmJmYWQ4YjFkMmUzMDdjZWQyODdlYTc4YWFkNDAzY2RjZTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9vYmplY3RzL2Y3L2Q3NWZiZmFkOGIxZDJlMzA3Y2VkMjg3ZWE3OGFhZDQwM2NkY2UzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL29iamVjdHMvZjcvZDc1ZmJmYWQ4YjFkMmUzMDdjZWQyODdlYTc4YWFkNDAzY2RjZTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiL2dpdGlnbm9yZSBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiL2dpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi9naXRpZ25vcmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiL2dpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi9pZ25vcmVkL2NvbnRhaW5lZC9pZ25vcmVkMy50eHQgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi9pZ25vcmVkL2NvbnRhaW5lZC9pZ25vcmVkMy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC9jb250YWluZWQvaWdub3JlZDMudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi9pZ25vcmVkL2NvbnRhaW5lZC9pZ25vcmVkMy50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC9jb250YWluZWQvdHJhY2tlZDMudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC9jb250YWluZWQvdHJhY2tlZDMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQvY29udGFpbmVkL3RyYWNrZWQzLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC9jb250YWluZWQvdHJhY2tlZDMudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQvaWdub3JlZDIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC9pZ25vcmVkMi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC9pZ25vcmVkMi50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQvaWdub3JlZDIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQvdHJhY2tlZDIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC90cmFja2VkMi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvaWdub3JlZC90cmFja2VkMi50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQvdHJhY2tlZDIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQxLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQxLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi9pZ25vcmVkMS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9pc3N1ZV81OTJiL2lnbm9yZWQxLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvaXNzdWVfNTkyYi90cmFja2VkMS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi90cmFja2VkMS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL2lzc3VlXzU5MmIvdHJhY2tlZDEudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvaXNzdWVfNTkyYi90cmFja2VkMS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9DT01NSVRfRURJVE1TRyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvQ09NTUlUX0VESVRNU0cKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9DT01NSVRfRURJVE1TRwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9DT01NSVRfRURJVE1TRwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9PUklHX0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL09SSUdfSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL09SSUdfSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9PUklHX0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2JyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2RmX2FuY2VzdG9yIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvZGZfYW5jZXN0b3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvZGZfYW5jZXN0b3IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2RmX2FuY2VzdG9yCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2RmX3NpZGUxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvZGZfc2lkZTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvZGZfc2lkZTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2RmX3NpZGUxCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2RmX3NpZGUyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvZGZfc2lkZTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvZGZfc2lkZTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2RmX3NpZGUyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2ZmX2JyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2ZmX2JyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9mZl9icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2ZmX2JyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9vY3RvNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvb2N0bzYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvcmVuYW1lczEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9yZW5hbWVzMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9yZW5hbWVzMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvcmVuYW1lczEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvcmVuYW1lczIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9yZW5hbWVzMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9yZW5hbWVzMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvcmVuYW1lczIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTEwLWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTAtYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTAtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTEwLWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTExIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTExCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTEtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMS1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMS1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTEtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTEzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMy1icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTEzLWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTEzLWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xMy1icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xNCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0xNApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTE0LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTQtYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMTQtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTE0LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTJhbHQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTJhbHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTJhbHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtMmFsdC1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0LWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTNhbHQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTNhbHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTNhbHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtM2FsdC1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0LWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC00CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC00LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNC1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC00LWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC00LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0xCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0xCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMS1icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMS1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTEtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMS1icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTItYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTItYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0yLWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTItYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTYtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC02LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTYtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTYtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtNwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTctYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC03LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTctYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTctYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtOApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTgtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC04LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTgtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTgtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3RyaXZpYWwtOQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTktYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvdHJpdmlhbC05LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTktYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90cml2aWFsLTktYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3VucmVsYXRlZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3VucmVsYXRlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy91bnJlbGF0ZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3VucmVsYXRlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvNWI2ZmNjOGZlYzcxZDI1NTBiZWY4NDYyZDE2OWIzYzI2YWExNGIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvNWI2ZmNjOGZlYzcxZDI1NTBiZWY4NDYyZDE2OWIzYzI2YWExNGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAwLzViNmZjYzhmZWM3MWQyNTUwYmVmODQ2MmQxNjliM2MyNmFhMTRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvNWI2ZmNjOGZlYzcxZDI1NTBiZWY4NDYyZDE2OWIzYzI2YWExNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvOWI5Y2FiNmZkYWMwMjkxNWE4OGVjZDA3OGI3YTc5MmVkODAyZDggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvOWI5Y2FiNmZkYWMwMjkxNWE4OGVjZDA3OGI3YTc5MmVkODAyZDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAwLzliOWNhYjZmZGFjMDI5MTVhODhlY2QwNzhiN2E3OTJlZDgwMmQ4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvOWI5Y2FiNmZkYWMwMjkxNWE4OGVjZDA3OGI3YTc5MmVkODAyZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvYzdkMzNmMWZmYTc5ZDE5YzIyNzJiMzcwZmNhZWFhZGJhNDljMDggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvYzdkMzNmMWZmYTc5ZDE5YzIyNzJiMzcwZmNhZWFhZGJhNDljMDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAwL2M3ZDMzZjFmZmE3OWQxOWMyMjcyYjM3MGZjYWVhYWRiYTQ5YzA4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDAvYzdkMzNmMWZmYTc5ZDE5YzIyNzJiMzcwZmNhZWFhZGJhNDljMDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDEvZjE0OWUxYjhmODRiZDg4OTZhYWZmNmQ2YjIyYWY4ODQ1OWRlZDAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDEvZjE0OWUxYjhmODRiZDg4OTZhYWZmNmQ2YjIyYWY4ODQ1OWRlZDAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAxL2YxNDllMWI4Zjg0YmQ4ODk2YWFmZjZkNmIyMmFmODg0NTlkZWQwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDEvZjE0OWUxYjhmODRiZDg4OTZhYWZmNmQ2YjIyYWY4ODQ1OWRlZDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDIvMDRhODRmODIyYWNiZjYzODZiMzZkMzNmMWY2YmM2OGJiYmY4NTggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDIvMDRhODRmODIyYWNiZjYzODZiMzZkMzNmMWY2YmM2OGJiYmY4NTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAyLzA0YTg0ZjgyMmFjYmY2Mzg2YjM2ZDMzZjFmNmJjNjhiYmJmODU4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDIvMDRhODRmODIyYWNiZjYzODZiMzZkMzNmMWY2YmM2OGJiYmY4NTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDIvMjUxZjk5MGNhOGU5MmU3YWU2MWQzNDI2MTYzZmE4MjFjNjQwMDEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDIvMjUxZjk5MGNhOGU5MmU3YWU2MWQzNDI2MTYzZmE4MjFjNjQwMDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAyLzI1MWY5OTBjYThlOTJlN2FlNjFkMzQyNjE2M2ZhODIxYzY0MDAxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDIvMjUxZjk5MGNhOGU5MmU3YWU2MWQzNDI2MTYzZmE4MjFjNjQwMDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvMjE0MTU0MDVjYjkwNmM0Njg2OTkxOWFmNTZkNTFkYmJlNWU4NWMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvMjE0MTU0MDVjYjkwNmM0Njg2OTkxOWFmNTZkNTFkYmJlNWU4NWMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAzLzIxNDE1NDA1Y2I5MDZjNDY4Njk5MTlhZjU2ZDUxZGJiZTVlODVjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvMjE0MTU0MDVjYjkwNmM0Njg2OTkxOWFmNTZkNTFkYmJlNWU4NWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvMmViYzVhYjg1ZDk1NTNiYjE4N2QzY2Q0MDg3NWZmMjNhNjNlZDAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvMmViYzVhYjg1ZDk1NTNiYjE4N2QzY2Q0MDg3NWZmMjNhNjNlZDAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAzLzJlYmM1YWI4NWQ5NTUzYmIxODdkM2NkNDA4NzVmZjIzYTYzZWQwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvMmViYzVhYjg1ZDk1NTNiYjE4N2QzY2Q0MDg3NWZmMjNhNjNlZDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvYjg3NzA2NTU1YWNjYmY4NzRjY2Q0MTBkYmRhMDFlOGU3MGE2N2YgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvYjg3NzA2NTU1YWNjYmY4NzRjY2Q0MTBkYmRhMDFlOGU3MGE2N2YKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAzL2I4NzcwNjU1NWFjY2JmODc0Y2NkNDEwZGJkYTAxZThlNzBhNjdmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvYjg3NzA2NTU1YWNjYmY4NzRjY2Q0MTBkYmRhMDFlOGU3MGE2N2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvZGFkMTAwNWU1ZDA2ZDQxOGY1MGIxMmUwYmNkNDhmZjIzMDZhMDMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvZGFkMTAwNWU1ZDA2ZDQxOGY1MGIxMmUwYmNkNDhmZjIzMDZhMDMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzAzL2RhZDEwMDVlNWQwNmQ0MThmNTBiMTJlMGJjZDQ4ZmYyMzA2YTAzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDMvZGFkMTAwNWU1ZDA2ZDQxOGY1MGIxMmUwYmNkNDhmZjIzMDZhMDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvMWZmZDc5MDFhNDQyZmFmNTZiMjI2MTYxNjQ5MDc0ZjE1YzdjNDcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvMWZmZDc5MDFhNDQyZmFmNTZiMjI2MTYxNjQ5MDc0ZjE1YzdjNDcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA1LzFmZmQ3OTAxYTQ0MmZhZjU2YjIyNjE2MTY0OTA3NGYxNWM3YzQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvMWZmZDc5MDFhNDQyZmFmNTZiMjI2MTYxNjQ5MDc0ZjE1YzdjNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvODU0MWZjMzcxMTRiZmMxZGRkZjZiZDZiZmZjN2ZhZTVjMmU2ZmUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvODU0MWZjMzcxMTRiZmMxZGRkZjZiZDZiZmZjN2ZhZTVjMmU2ZmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA1Lzg1NDFmYzM3MTE0YmZjMWRkZGY2YmQ2YmZmYzdmYWU1YzJlNmZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvODU0MWZjMzcxMTRiZmMxZGRkZjZiZDZiZmZjN2ZhZTVjMmU2ZmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvZjNjMWEyYTU2Y2E5NWMzZDJlZjI4ZGM5ZGRmMzJiNWNkNmM5MWMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvZjNjMWEyYTU2Y2E5NWMzZDJlZjI4ZGM5ZGRmMzJiNWNkNmM5MWMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA1L2YzYzFhMmE1NmNhOTVjM2QyZWYyOGRjOWRkZjMyYjVjZDZjOTFjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDUvZjNjMWEyYTU2Y2E5NWMzZDJlZjI4ZGM5ZGRmMzJiNWNkNmM5MWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDcvYTc1OWRhOTE5ZjczNzIyMTc5MWQ1NDJmMTc2YWI0OWM4ODgzN2YgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDcvYTc1OWRhOTE5ZjczNzIyMTc5MWQ1NDJmMTc2YWI0OWM4ODgzN2YKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA3L2E3NTlkYTkxOWY3MzcyMjE3OTFkNTQyZjE3NmFiNDljODg4MzdmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDcvYTc1OWRhOTE5ZjczNzIyMTc5MWQ1NDJmMTc2YWI0OWM4ODgzN2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDcvYzUxNGIwNDY5OGUwNjg4OTJiMzFjOGQzNTJiODU4MTNiOTljNmUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDcvYzUxNGIwNDY5OGUwNjg4OTJiMzFjOGQzNTJiODU4MTNiOTljNmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA3L2M1MTRiMDQ2OThlMDY4ODkyYjMxYzhkMzUyYjg1ODEzYjk5YzZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDcvYzUxNGIwNDY5OGUwNjg4OTJiMzFjOGQzNTJiODU4MTNiOTljNmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMDU1MzAxNDYzYjdmMmY4ZWU1ZDM2OGY4ZWQ1YzBhNDBhZDg1MTUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMDU1MzAxNDYzYjdmMmY4ZWU1ZDM2OGY4ZWQ1YzBhNDBhZDg1MTUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA5LzA1NTMwMTQ2M2I3ZjJmOGVlNWQzNjhmOGVkNWMwYTQwYWQ4NTE1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMDU1MzAxNDYzYjdmMmY4ZWU1ZDM2OGY4ZWQ1YzBhNDBhZDg1MTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMTdiYjE1OTU5NmFlYTRkMjk1ZjQ4NTdkYTc3ZThmOTZiM2M3ZGMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMTdiYjE1OTU5NmFlYTRkMjk1ZjQ4NTdkYTc3ZThmOTZiM2M3ZGMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA5LzE3YmIxNTk1OTZhZWE0ZDI5NWY0ODU3ZGE3N2U4Zjk2YjNjN2RjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMTdiYjE1OTU5NmFlYTRkMjk1ZjQ4NTdkYTc3ZThmOTZiM2M3ZGMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMmNlODY4MmQ3ZjNhMmEzYTc2OWE2ZGFjYTU4OTUwMTY4YmE1YzQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMmNlODY4MmQ3ZjNhMmEzYTc2OWE2ZGFjYTU4OTUwMTY4YmE1YzQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA5LzJjZTg2ODJkN2YzYTJhM2E3NjlhNmRhY2E1ODk1MDE2OGJhNWM0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvMmNlODY4MmQ3ZjNhMmEzYTc2OWE2ZGFjYTU4OTUwMTY4YmE1YzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvM2JlYmYwNzJkZDRiYmJhODg4MzM2NjdkNmZmZTQ1NGRmMTk5ZTEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvM2JlYmYwNzJkZDRiYmJhODg4MzM2NjdkNmZmZTQ1NGRmMTk5ZTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA5LzNiZWJmMDcyZGQ0YmJiYTg4ODMzNjY3ZDZmZmU0NTRkZjE5OWUxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvM2JlYmYwNzJkZDRiYmJhODg4MzM2NjdkNmZmZTQ1NGRmMTk5ZTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvNzY4YmVkMjI2ODBjZGIwODU5NjgzZmE5Njc3Y2NjOGQ1YTI1YzEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvNzY4YmVkMjI2ODBjZGIwODU5NjgzZmE5Njc3Y2NjOGQ1YTI1YzEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzA5Lzc2OGJlZDIyNjgwY2RiMDg1OTY4M2ZhOTY3N2NjYzhkNWEyNWMxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMDkvNzY4YmVkMjI2ODBjZGIwODU5NjgzZmE5Njc3Y2NjOGQ1YTI1YzEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGEvNzVkOWFhYzFkYzg0ZmI1YWE1MWY3MzI1YzBhYjUzMjQyZGRlZjcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGEvNzVkOWFhYzFkYzg0ZmI1YWE1MWY3MzI1YzBhYjUzMjQyZGRlZjcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzBhLzc1ZDlhYWMxZGM4NGZiNWFhNTFmNzMyNWMwYWI1MzI0MmRkZWY3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGEvNzVkOWFhYzFkYzg0ZmI1YWE1MWY3MzI1YzBhYjUzMjQyZGRlZjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGMvZmQ2YzU0ZWY2NTMyZDg2MjQwOGY1NjIzMDlkYzljNzRhNDAxZTggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGMvZmQ2YzU0ZWY2NTMyZDg2MjQwOGY1NjIzMDlkYzljNzRhNDAxZTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzBjL2ZkNmM1NGVmNjUzMmQ4NjI0MDhmNTYyMzA5ZGM5Yzc0YTQwMWU4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGMvZmQ2YzU0ZWY2NTMyZDg2MjQwOGY1NjIzMDlkYzljNzRhNDAxZTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGQvNTJlM2E1NTZlMTg5YmEwOTQ4YWU1Njc4MDkxODAxMWMxYjE2N2QgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGQvNTJlM2E1NTZlMTg5YmEwOTQ4YWU1Njc4MDkxODAxMWMxYjE2N2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzBkLzUyZTNhNTU2ZTE4OWJhMDk0OGFlNTY3ODA5MTgwMTFjMWIxNjdkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGQvNTJlM2E1NTZlMTg5YmEwOTQ4YWU1Njc4MDkxODAxMWMxYjE2N2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGQvODcyZjhlODcxYTMwMjA4MzA1OTc4ZWNiZjllNjZkODY0ZjE2MzggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGQvODcyZjhlODcxYTMwMjA4MzA1OTc4ZWNiZjllNjZkODY0ZjE2MzgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzBkLzg3MmY4ZTg3MWEzMDIwODMwNTk3OGVjYmY5ZTY2ZDg2NGYxNjM4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGQvODcyZjhlODcxYTMwMjA4MzA1OTc4ZWNiZjllNjZkODY0ZjE2MzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGUvYzVmNDMzOTU5Y2Q0NjE3N2Y3NDU5MDMzNTNlZmI1YmUwOGQxNTEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGUvYzVmNDMzOTU5Y2Q0NjE3N2Y3NDU5MDMzNTNlZmI1YmUwOGQxNTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzBlL2M1ZjQzMzk1OWNkNDYxNzdmNzQ1OTAzMzUzZWZiNWJlMDhkMTUxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMGUvYzVmNDMzOTU5Y2Q0NjE3N2Y3NDU5MDMzNTNlZmI1YmUwOGQxNTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTEvZGVhYjAwYjJkM2E2ZjVhMzA3Mzk4OGFjMDUwYzJkN2I2NjU1ZTIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTEvZGVhYjAwYjJkM2E2ZjVhMzA3Mzk4OGFjMDUwYzJkN2I2NjU1ZTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzExL2RlYWIwMGIyZDNhNmY1YTMwNzM5ODhhYzA1MGMyZDdiNjY1NWUyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTEvZGVhYjAwYjJkM2E2ZjVhMzA3Mzk4OGFjMDUwYzJkN2I2NjU1ZTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTEvZjRmM2MwOGI3MzdmNWZkODk2Y2JlZmExNDI1ZWU2M2IyMWIyZmEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTEvZjRmM2MwOGI3MzdmNWZkODk2Y2JlZmExNDI1ZWU2M2IyMWIyZmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzExL2Y0ZjNjMDhiNzM3ZjVmZDg5NmNiZWZhMTQyNWVlNjNiMjFiMmZhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTEvZjRmM2MwOGI3MzdmNWZkODk2Y2JlZmExNDI1ZWU2M2IyMWIyZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTMvZDFiZTRlYTUyYTZjZWQxZDdhMWQ4MzJmMGVlM2MzOTkzNDhlNWUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTMvZDFiZTRlYTUyYTZjZWQxZDdhMWQ4MzJmMGVlM2MzOTkzNDhlNWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzEzL2QxYmU0ZWE1MmE2Y2VkMWQ3YTFkODMyZjBlZTNjMzk5MzQ4ZTVlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTMvZDFiZTRlYTUyYTZjZWQxZDdhMWQ4MzJmMGVlM2MzOTkzNDhlNWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTQvMzkwODhmNTA5Yjc5YjE1MzViNjQxOTMxMzdkM2NlNGIyNDA3MzQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTQvMzkwODhmNTA5Yjc5YjE1MzViNjQxOTMxMzdkM2NlNGIyNDA3MzQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzE0LzM5MDg4ZjUwOWI3OWIxNTM1YjY0MTkzMTM3ZDNjZTRiMjQwNzM0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTQvMzkwODhmNTA5Yjc5YjE1MzViNjQxOTMxMzdkM2NlNGIyNDA3MzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTUvOGRjN2JlZGIyMDJmNWIyNjUwMmJmMzU3NGZhYTdmNDIzOGQ1NmMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTUvOGRjN2JlZGIyMDJmNWIyNjUwMmJmMzU3NGZhYTdmNDIzOGQ1NmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzE1LzhkYzdiZWRiMjAyZjViMjY1MDJiZjM1NzRmYWE3ZjQyMzhkNTZjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTUvOGRjN2JlZGIyMDJmNWIyNjUwMmJmMzU3NGZhYTdmNDIzOGQ1NmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzE2L2Y4MjU4MTVjZmQyMGEwN2E3NWM3MTU1NGU4MmQ4ZWVkZTBiMDYxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzE2L2Y4MjU4MTVjZmQyMGEwN2E3NWM3MTU1NGU4MmQ4ZWVkZTBiMDYxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xNi9mODI1ODE1Y2ZkMjBhMDdhNzVjNzE1NTRlODJkOGVlZGUwYjA2MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzE2L2Y4MjU4MTVjZmQyMGEwN2E3NWM3MTU1NGU4MmQ4ZWVkZTBiMDYxCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xNy84OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xNy84OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTcvODk0MGI0NTBmMjM4YTU2YzBkNzViNzk1NWNiNTdiMzgxOTE5ODIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xNy84OTQwYjQ1MGYyMzhhNTZjMGQ3NWI3OTU1Y2I1N2IzODE5MTk4MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOC8zMzEwZTMwZmIxNDk5YWY4YzYxOTEwOGZmZWE0ZDMwMGI1ZTc3OCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOC8zMzEwZTMwZmIxNDk5YWY4YzYxOTEwOGZmZWE0ZDMwMGI1ZTc3OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTgvMzMxMGUzMGZiMTQ5OWFmOGM2MTkxMDhmZmVhNGQzMDBiNWU3NzgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOC8zMzEwZTMwZmIxNDk5YWY4YzYxOTEwOGZmZWE0ZDMwMGI1ZTc3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOC9jYjMxNmIxY2VmYTBmOGE2OTQ2ZjBlMjAxYThlMWE2Zjg0NWFiOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOC9jYjMxNmIxY2VmYTBmOGE2OTQ2ZjBlMjAxYThlMWE2Zjg0NWFiOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTgvY2IzMTZiMWNlZmEwZjhhNjk0NmYwZTIwMWE4ZTFhNmY4NDVhYjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOC9jYjMxNmIxY2VmYTBmOGE2OTQ2ZjBlMjAxYThlMWE2Zjg0NWFiOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOS9iN2FjNDg1MjY5YjY3MmExMDEwNjA4OTRkZTNiYTljMmEyNGRkMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOS9iN2FjNDg1MjY5YjY3MmExMDEwNjA4OTRkZTNiYTljMmEyNGRkMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMTkvYjdhYzQ4NTI2OWI2NzJhMTAxMDYwODk0ZGUzYmE5YzJhMjRkZDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xOS9iN2FjNDg1MjY5YjY3MmExMDEwNjA4OTRkZTNiYTljMmEyNGRkMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMWEvMDEwYjFjMGYwODFiMmU4OTAxZDU1MzA3YTE1YzI5ZmYzMGFmMGUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMWEvMDEwYjFjMGYwODFiMmU4OTAxZDU1MzA3YTE1YzI5ZmYzMGFmMGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzOWRmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xYS8wMTBiMWMwZjA4MWIyZTg5MDFkNTUzMDdhMTVjMjlmZjMwYWYwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xYy9mZjllYzZhNDdhNTM3MzgwZGVkZmRkMTdjOWU3NmQ3NDI1OWEyYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xYy9mZjllYzZhNDdhNTM3MzgwZGVkZmRkMTdjOWU3NmQ3NDI1OWEyYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMWMvZmY5ZWM2YTQ3YTUzNzM4MGRlZGZkZDE3YzllNzZkNzQyNTlhMmIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xYy9mZjllYzZhNDdhNTM3MzgwZGVkZmRkMTdjOWU3NmQ3NDI1OWEyYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xZS80ZmYwMjlhZWU2OGQwZDY5ZWY5ZWI2ZWZhNmNiZjFlYzczMmY5OSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xZS80ZmYwMjlhZWU2OGQwZDY5ZWY5ZWI2ZWZhNmNiZjFlYzczMmY5OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMWUvNGZmMDI5YWVlNjhkMGQ2OWVmOWViNmVmYTZjYmYxZWM3MzJmOTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xZS80ZmYwMjlhZWU2OGQwZDY5ZWY5ZWI2ZWZhNmNiZjFlYzczMmY5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xZi84MTQzM2UzMTYxZWZiZjI1MDU3NmM1OGZlZGU3ZjZiODM2ZjNkMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xZi84MTQzM2UzMTYxZWZiZjI1MDU3NmM1OGZlZGU3ZjZiODM2ZjNkMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMWYvODE0MzNlMzE2MWVmYmYyNTA1NzZjNThmZWRlN2Y2YjgzNmYzZDMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8xZi84MTQzM2UzMTYxZWZiZjI1MDU3NmM1OGZlZGU3ZjZiODM2ZjNkMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMC85MWQ5NGM4YmQzZWIwODM1ZGM1MjIwZGU1ZThiYjMxMGZhMTUxMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMC85MWQ5NGM4YmQzZWIwODM1ZGM1MjIwZGU1ZThiYjMxMGZhMTUxMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjAvOTFkOTRjOGJkM2ViMDgzNWRjNTIyMGRlNWU4YmIzMTBmYTE1MTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMC85MWQ5NGM4YmQzZWIwODM1ZGM1MjIwZGU1ZThiYjMxMGZhMTUxMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMS82NzFlMjkwMjc4Mjg2ZmIyY2U0YzYzZDAxNjk5YjY3YWRjZTMzMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMS82NzFlMjkwMjc4Mjg2ZmIyY2U0YzYzZDAxNjk5YjY3YWRjZTMzMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjEvNjcxZTI5MDI3ODI4NmZiMmNlNGM2M2QwMTY5OWI2N2FkY2UzMzEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMS82NzFlMjkwMjc4Mjg2ZmIyY2U0YzYzZDAxNjk5YjY3YWRjZTMzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMi83NzkyYjUyYWFhMGIyMzhiZWEwMGVjN2U1MDliMDI2MjNmMTY4YyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMi83NzkyYjUyYWFhMGIyMzhiZWEwMGVjN2U1MDliMDI2MjNmMTY4YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjIvNzc5MmI1MmFhYTBiMjM4YmVhMDBlYzdlNTA5YjAyNjIzZjE2OGMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMi83NzkyYjUyYWFhMGIyMzhiZWEwMGVjN2U1MDliMDI2MjNmMTY4YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMy8zYzA5MTljOTk4ZWQxMTBhNGI2ZmYzNmYzNTNhZWM4YjcxMzQ4NyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMy8zYzA5MTljOTk4ZWQxMTBhNGI2ZmYzNmYzNTNhZWM4YjcxMzQ4NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjMvM2MwOTE5Yzk5OGVkMTEwYTRiNmZmMzZmMzUzYWVjOGI3MTM0ODcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMy8zYzA5MTljOTk4ZWQxMTBhNGI2ZmYzNmYzNTNhZWM4YjcxMzQ4NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMy85MmEyZGFjYzllZmI1NjJiODYzNWQ2NTc5ZmI0NTg3NTFjN2M1YiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMy85MmEyZGFjYzllZmI1NjJiODYzNWQ2NTc5ZmI0NTg3NTFjN2M1YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjMvOTJhMmRhY2M5ZWZiNTYyYjg2MzVkNjU3OWZiNDU4NzUxYzdjNWIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yMy85MmEyZGFjYzllZmI1NjJiODYzNWQ2NTc5ZmI0NTg3NTFjN2M1YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC8xYTEwMDVjZDliOTgwNzMyNzQxYjc0Mzg1Yjg5MTE0MmJjYmEyOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC8xYTEwMDVjZDliOTgwNzMyNzQxYjc0Mzg1Yjg5MTE0MmJjYmEyOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjQvMWExMDA1Y2Q5Yjk4MDczMjc0MWI3NDM4NWI4OTExNDJiY2JhMjgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC8xYTEwMDVjZDliOTgwNzMyNzQxYjc0Mzg1Yjg5MTE0MmJjYmEyOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC8yNTkxZWIyODBlZTllZWIyY2U2MzUyNGI5YThiOWJjNGNiNTE1ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC8yNTkxZWIyODBlZTllZWIyY2U2MzUyNGI5YThiOWJjNGNiNTE1ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjQvMjU5MWViMjgwZWU5ZWViMmNlNjM1MjRiOWE4YjliYzRjYjUxNWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC8yNTkxZWIyODBlZTllZWIyY2U2MzUyNGI5YThiOWJjNGNiNTE1ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC85MGI5ZjFhMDc5NDIwODcwMDI3ZGVlZmI0OWY1MWQ2NjU2Y2Y3NCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC85MGI5ZjFhMDc5NDIwODcwMDI3ZGVlZmI0OWY1MWQ2NjU2Y2Y3NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjQvOTBiOWYxYTA3OTQyMDg3MDAyN2RlZWZiNDlmNTFkNjY1NmNmNzQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNC85MGI5ZjFhMDc5NDIwODcwMDI3ZGVlZmI0OWY1MWQ2NjU2Y2Y3NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNS85ZDA4Y2E0M2FmOTIwMGU5ZWE5YTA5OGU0NGE1YTM1MGViZDliMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNS85ZDA4Y2E0M2FmOTIwMGU5ZWE5YTA5OGU0NGE1YTM1MGViZDliMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjUvOWQwOGNhNDNhZjkyMDBlOWVhOWEwOThlNDRhNWEzNTBlYmQ5YjMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNS85ZDA4Y2E0M2FmOTIwMGU5ZWE5YTA5OGU0NGE1YTM1MGViZDliMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNS9jNDBiNzY2MGMwOGM4ZmI1ODFmNzcwMzEyZjQxYjliMDMxMTlkMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNS9jNDBiNzY2MGMwOGM4ZmI1ODFmNzcwMzEyZjQxYjliMDMxMTlkMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjUvYzQwYjc2NjBjMDhjOGZiNTgxZjc3MDMxMmY0MWI5YjAzMTE5ZDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNS9jNDBiNzY2MGMwOGM4ZmI1ODFmNzcwMzEyZjQxYjliMDMxMTlkMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNi8xNTNhM2ZmMzY0OWI2YzJiYjY1MmQzZjA2ODc4YzZlMGExNzJmOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNi8xNTNhM2ZmMzY0OWI2YzJiYjY1MmQzZjA2ODc4YzZlMGExNzJmOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjYvMTUzYTNmZjM2NDliNmMyYmI2NTJkM2YwNjg3OGM2ZTBhMTcyZjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNi8xNTNhM2ZmMzY0OWI2YzJiYjY1MmQzZjA2ODc4YzZlMGExNzJmOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNy8xMzNkYTcwMmJhM2M2MGFmMmEwMWU5NmMyNTU1ZmY0MDQ1ZDY5MiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNy8xMzNkYTcwMmJhM2M2MGFmMmEwMWU5NmMyNTU1ZmY0MDQ1ZDY5MgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMjcvMTMzZGE3MDJiYTNjNjBhZjJhMDFlOTZjMjU1NWZmNDA0NWQ2OTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yNy8xMzNkYTcwMmJhM2M2MGFmMmEwMWU5NmMyNTU1ZmY0MDQ1ZDY5MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi8wZGU1ZGMyNzUwNWRjZGQ4M2E3NWM4YmYxZmNkOTQ2MmNkN2FkZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi8wZGU1ZGMyNzUwNWRjZGQ4M2E3NWM4YmYxZmNkOTQ2MmNkN2FkZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmIvMGRlNWRjMjc1MDVkY2RkODNhNzVjOGJmMWZjZDk0NjJjZDdhZGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi8wZGU1ZGMyNzUwNWRjZGQ4M2E3NWM4YmYxZmNkOTQ2MmNkN2FkZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi81ZjFmMTgxZWUzYjU4ZWE3NTFmNWRkNWQ4ZjliNDQ1NTIwYTEzNiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi81ZjFmMTgxZWUzYjU4ZWE3NTFmNWRkNWQ4ZjliNDQ1NTIwYTEzNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmIvNWYxZjE4MWVlM2I1OGVhNzUxZjVkZDVkOGY5YjQ0NTUyMGExMzYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi81ZjFmMTgxZWUzYjU4ZWE3NTFmNWRkNWQ4ZjliNDQ1NTIwYTEzNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi9kMGEzNDNhZWVmN2EyY2YwZDE1ODQ3ODk2NmE2ZTU4N2ZmMzg2MyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi9kMGEzNDNhZWVmN2EyY2YwZDE1ODQ3ODk2NmE2ZTU4N2ZmMzg2MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmIvZDBhMzQzYWVlZjdhMmNmMGQxNTg0Nzg5NjZhNmU1ODdmZjM4NjMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYi9kMGEzNDNhZWVmN2EyY2YwZDE1ODQ3ODk2NmE2ZTU4N2ZmMzg2MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZC9hNTM4NTcwYmMxZTViMmMzZTg1NWJmNzAyZjM1MjQ4YWQwNzM1ZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZC9hNTM4NTcwYmMxZTViMmMzZTg1NWJmNzAyZjM1MjQ4YWQwNzM1ZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmQvYTUzODU3MGJjMWU1YjJjM2U4NTViZjcwMmYzNTI0OGFkMDczNWYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZC9hNTM4NTcwYmMxZTViMmMzZTg1NWJmNzAyZjM1MjQ4YWQwNzM1ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi8yZTM3YjdlYmJhZTQ2Nzk3ODYxMDg5NmNhM2FhZmNkYWQyZWU2NyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi8yZTM3YjdlYmJhZTQ2Nzk3ODYxMDg5NmNhM2FhZmNkYWQyZWU2NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmYvMmUzN2I3ZWJiYWU0Njc5Nzg2MTA4OTZjYTNhYWZjZGFkMmVlNjcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi8yZTM3YjdlYmJhZTQ2Nzk3ODYxMDg5NmNhM2FhZmNkYWQyZWU2NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi80MDI0Y2U1MjhkMzZkODY3MGMyODljY2U1YTc5NjNlNjI1YmIwYyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi80MDI0Y2U1MjhkMzZkODY3MGMyODljY2U1YTc5NjNlNjI1YmIwYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmYvNDAyNGNlNTI4ZDM2ZDg2NzBjMjg5Y2NlNWE3OTYzZTYyNWJiMGMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi80MDI0Y2U1MjhkMzZkODY3MGMyODljY2U1YTc5NjNlNjI1YmIwYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi81NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi81NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmYvNTYxMjAxMDdkNjgwMTI5YTVkOTc5MWI1MjFjYjFlNzNhMmVkMzEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yZi81NjEyMDEwN2Q2ODAxMjlhNWQ5NzkxYjUyMWNiMWU3M2EyZWQzMQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmYvNTk4MjQ4ZWVjY2ZjMjdlNWNhNDRkOWQ5NjM4M2Y2ZGZlYTdiMTYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmYvNTk4MjQ4ZWVjY2ZjMjdlNWNhNDRkOWQ5NjM4M2Y2ZGZlYTdiMTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzJmLzU5ODI0OGVlY2NmYzI3ZTVjYTQ0ZDlkOTYzODNmNmRmZWE3YjE2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMmYvNTk4MjQ4ZWVjY2ZjMjdlNWNhNDRkOWQ5NjM4M2Y2ZGZlYTdiMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzEvNjhkY2ExYTU2MTg4OWIwNDVhNjQ0MTkwOWY0YzU2MTQ1ZTY2NmQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzEvNjhkY2ExYTU2MTg4OWIwNDVhNjQ0MTkwOWY0YzU2MTQ1ZTY2NmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMxLzY4ZGNhMWE1NjE4ODliMDQ1YTY0NDE5MDlmNGM1NjE0NWU2NjZkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzEvNjhkY2ExYTU2MTg4OWIwNDVhNjQ0MTkwOWY0YzU2MTQ1ZTY2NmQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMxL2Q1NDcyNTM2MDQxYTgzZDk4NjgyOTI0MGJiYmRjODk3YzZmOGE2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMxL2Q1NDcyNTM2MDQxYTgzZDk4NjgyOTI0MGJiYmRjODk3YzZmOGE2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zMS9kNTQ3MjUzNjA0MWE4M2Q5ODY4MjkyNDBiYmJkYzg5N2M2ZjhhNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMxL2Q1NDcyNTM2MDQxYTgzZDk4NjgyOTI0MGJiYmRjODk3YzZmOGE2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMyLzIxZGQ1MTJiN2UyZGM0YjViZDAzMDQ2ZGY2YzgxYjJhYjIwNzBiIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMyLzIxZGQ1MTJiN2UyZGM0YjViZDAzMDQ2ZGY2YzgxYjJhYjIwNzBiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zMi8yMWRkNTEyYjdlMmRjNGI1YmQwMzA0NmRmNmM4MWIyYWIyMDcwYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMyLzIxZGQ1MTJiN2UyZGM0YjViZDAzMDQ2ZGY2YzgxYjJhYjIwNzBiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMzLzQ2ZDY0MzI1YjM5ZTUzMjM3MzM0OTJjZDU1ZjgwODk5NGEyNDc1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMzLzQ2ZDY0MzI1YjM5ZTUzMjM3MzM0OTJjZDU1ZjgwODk5NGEyNDc1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zMy80NmQ2NDMyNWIzOWU1MzIzNzMzNDkyY2Q1NWY4MDg5OTRhMjQ3NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMzLzQ2ZDY0MzI1YjM5ZTUzMjM3MzM0OTJjZDU1ZjgwODk5NGEyNDc1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMzL2Q1MDBmNTg4ZmJiZTY1OTAxZDgyYjRlNmIwMDhlNTQ5MDY0YmUwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMzL2Q1MDBmNTg4ZmJiZTY1OTAxZDgyYjRlNmIwMDhlNTQ5MDY0YmUwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zMy9kNTAwZjU4OGZiYmU2NTkwMWQ4MmI0ZTZiMDA4ZTU0OTA2NGJlMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzMzL2Q1MDBmNTg4ZmJiZTY1OTAxZDgyYjRlNmIwMDhlNTQ5MDY0YmUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzM0L2JmYWZmZjg4ZWFmMTE4NDAyYjQ0ZTZmM2UyZGJiZjFhNTgyYjA1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzM0L2JmYWZmZjg4ZWFmMTE4NDAyYjQ0ZTZmM2UyZGJiZjFhNTgyYjA1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNC9iZmFmZmY4OGVhZjExODQwMmI0NGU2ZjNlMmRiYmYxYTU4MmIwNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzM0L2JmYWZmZjg4ZWFmMTE4NDAyYjQ0ZTZmM2UyZGJiZjFhNTgyYjA1CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS8wYzZlYjMwMTBlZmM0MDNhNmJlZDY4MjMzMjYzNTMxNGU5ZWQ1OCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS8wYzZlYjMwMTBlZmM0MDNhNmJlZDY4MjMzMjYzNTMxNGU5ZWQ1OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzUvMGM2ZWIzMDEwZWZjNDAzYTZiZWQ2ODIzMzI2MzUzMTRlOWVkNTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS8wYzZlYjMwMTBlZmM0MDNhNmJlZDY4MjMzMjYzNTMxNGU5ZWQ1OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS80MTFiZmI3N2NkMmNjNDMxZjNhMDNhMmI0OTc2ZWQ5NGI1ZDI0MSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS80MTFiZmI3N2NkMmNjNDMxZjNhMDNhMmI0OTc2ZWQ5NGI1ZDI0MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzUvNDExYmZiNzdjZDJjYzQzMWYzYTAzYTJiNDk3NmVkOTRiNWQyNDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS80MTFiZmI3N2NkMmNjNDMxZjNhMDNhMmI0OTc2ZWQ5NGI1ZDI0MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS80NzA0ZDM2MTNhZDQyMjhlNDc4NmZjNzY2NTZiMTFlOTgyMzZjNCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS80NzA0ZDM2MTNhZDQyMjhlNDc4NmZjNzY2NTZiMTFlOTgyMzZjNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzUvNDcwNGQzNjEzYWQ0MjI4ZTQ3ODZmYzc2NjU2YjExZTk4MjM2YzQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS80NzA0ZDM2MTNhZDQyMjhlNDc4NmZjNzY2NTZiMTFlOTgyMzZjNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS82MzJlNDM2MTJjMDZhM2VhOTI0YmZiYWNkNDgzMzNkYTg3NGMyOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS82MzJlNDM2MTJjMDZhM2VhOTI0YmZiYWNkNDgzMzNkYTg3NGMyOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzUvNjMyZTQzNjEyYzA2YTNlYTkyNGJmYmFjZDQ4MzMzZGE4NzRjMjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS82MzJlNDM2MTJjMDZhM2VhOTI0YmZiYWNkNDgzMzNkYTg3NGMyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS83NTgyNmM5NmE5NzUwMzFkMmMxNDM2ODUyOWNjNWM0MzUzYThmZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS83NTgyNmM5NmE5NzUwMzFkMmMxNDM2ODUyOWNjNWM0MzUzYThmZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzUvNzU4MjZjOTZhOTc1MDMxZDJjMTQzNjg1MjljYzVjNDM1M2E4ZmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNS83NTgyNmM5NmE5NzUwMzFkMmMxNDM2ODUyOWNjNWM0MzUzYThmZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNi8yMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNi8yMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzYvMjE5YjQ5MzY3MTQ2Y2IyZTZhMTU1NWI1YTllYmQ0ZDAzMjg0OTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNi8yMTliNDkzNjcxNDZjYjJlNmExNTU1YjVhOWViZDRkMDMyODQ5NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNi80YmJlNGNlODBjN2JkMzFlNjMwN2RjZTc3ZDQ2ZTNlMTc1OWZiMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNi80YmJlNGNlODBjN2JkMzFlNjMwN2RjZTc3ZDQ2ZTNlMTc1OWZiMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzYvNGJiZTRjZTgwYzdiZDMxZTYzMDdkY2U3N2Q0NmUzZTE3NTlmYjMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNi80YmJlNGNlODBjN2JkMzFlNjMwN2RjZTc3ZDQ2ZTNlMTc1OWZiMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNy80ODg1OWIwMDFjNmU2MjdlNzEyYTA3OTUxYWVlNDBhZmQxOWI0MSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNy80ODg1OWIwMDFjNmU2MjdlNzEyYTA3OTUxYWVlNDBhZmQxOWI0MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzcvNDg4NTliMDAxYzZlNjI3ZTcxMmEwNzk1MWFlZTQwYWZkMTliNDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNy80ODg1OWIwMDFjNmU2MjdlNzEyYTA3OTUxYWVlNDBhZmQxOWI0MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zOC81YzhhMGYyNmRkZjc5ZTkwNDFlMTVlMTdkYzM1MmVkMmM0Y2NlZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zOC81YzhhMGYyNmRkZjc5ZTkwNDFlMTVlMTdkYzM1MmVkMmM0Y2NlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvMzgvNWM4YTBmMjZkZGY3OWU5MDQxZTE1ZTE3ZGMzNTJlZDJjNGNjZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zOC81YzhhMGYyNmRkZjc5ZTkwNDFlMTVlMTdkYzM1MmVkMmM0Y2NlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2IvNDdiMDMxYjNlNTVhZTExZTE0YTA1MjYwYjFjM2ZmZDY4MzhkNTUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2IvNDdiMDMxYjNlNTVhZTExZTE0YTA1MjYwYjFjM2ZmZDY4MzhkNTUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzNiLzQ3YjAzMWIzZTU1YWUxMWUxNGEwNTI2MGIxYzNmZmQ2ODM4ZDU1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2IvNDdiMDMxYjNlNTVhZTExZTE0YTA1MjYwYjFjM2ZmZDY4MzhkNTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2IvYmYwYmY1OWIyMGRmNWQ1ZmM1OGI5ZmMxZGMwN2JlNjM3YzMwMWYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2IvYmYwYmY1OWIyMGRmNWQ1ZmM1OGI5ZmMxZGMwN2JlNjM3YzMwMWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzNiL2JmMGJmNTliMjBkZjVkNWZjNThiOWZjMWRjMDdiZTYzN2MzMDFmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2IvYmYwYmY1OWIyMGRmNWQ1ZmM1OGI5ZmMxZGMwN2JlNjM3YzMwMWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2UvZjRkMzAzODJjYTMzZmRlYmE5ZmRhODk1YTk5ZTA4OTFiYTM3YWEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2UvZjRkMzAzODJjYTMzZmRlYmE5ZmRhODk1YTk5ZTA4OTFiYTM3YWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzNlL2Y0ZDMwMzgyY2EzM2ZkZWJhOWZkYTg5NWE5OWUwODkxYmEzN2FhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2UvZjRkMzAzODJjYTMzZmRlYmE5ZmRhODk1YTk5ZTA4OTFiYTM3YWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2UvZjliZmU4MmY5NjM1NTE4YWU4OTE1MjMyMmYzYjQ2ZmQ0YmEyNWIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2UvZjliZmU4MmY5NjM1NTE4YWU4OTE1MjMyMmYzYjQ2ZmQ0YmEyNWIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzNlL2Y5YmZlODJmOTYzNTUxOGFlODkxNTIzMjJmM2I0NmZkNGJhMjViCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvM2UvZjliZmU4MmY5NjM1NTE4YWU4OTE1MjMyMmYzYjQ2ZmQ0YmEyNWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNDAvMjc4NGE0NmE0YTM5ODIyOTQyMzE1OTRjYmViNDMxZjUwNmQyMmMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNDAvMjc4NGE0NmE0YTM5ODIyOTQyMzE1OTRjYmViNDMxZjUwNmQyMmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQwLzI3ODRhNDZhNGEzOTgyMjk0MjMxNTk0Y2JlYjQzMWY1MDZkMjJjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNDAvMjc4NGE0NmE0YTM5ODIyOTQyMzE1OTRjYmViNDMxZjUwNmQyMmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNDEvMmIzMmZiNjYxMzczNjYxNDdmMTgwMWVjYzk2MjQ1Mjc1N2Q0OGEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNDEvMmIzMmZiNjYxMzczNjYxNDdmMTgwMWVjYzk2MjQ1Mjc1N2Q0OGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQxLzJiMzJmYjY2MTM3MzY2MTQ3ZjE4MDFlY2M5NjI0NTI3NTdkNDhhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNDEvMmIzMmZiNjYxMzczNjYxNDdmMTgwMWVjYzk2MjQ1Mjc1N2Q0OGEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQzL2FhZmQ0M2JlYTc3OWVjNzQzMTdkYzM2MWY0NWFlM2Y1MzJhNTA1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQzL2FhZmQ0M2JlYTc3OWVjNzQzMTdkYzM2MWY0NWFlM2Y1MzJhNTA1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80My9hYWZkNDNiZWE3NzllYzc0MzE3ZGMzNjFmNDVhZTNmNTMyYTUwNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQzL2FhZmQ0M2JlYTc3OWVjNzQzMTdkYzM2MWY0NWFlM2Y1MzJhNTA1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQzL2MzMzg2NTYzNDIyMjdhM2EzY2QzYWE4NWNiZjc4NDA2MWY1NDI1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQzL2MzMzg2NTYzNDIyMjdhM2EzY2QzYWE4NWNiZjc4NDA2MWY1NDI1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80My9jMzM4NjU2MzQyMjI3YTNhM2NkM2FhODVjYmY3ODQwNjFmNTQyNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQzL2MzMzg2NTYzNDIyMjdhM2EzY2QzYWE4NWNiZjc4NDA2MWY1NDI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ1LzI5OWMxY2E1ZTA3YmJhMWZkOTA4NDMwNTZmYjU1OWY5NmIxZjVhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ1LzI5OWMxY2E1ZTA3YmJhMWZkOTA4NDMwNTZmYjU1OWY5NmIxZjVhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80NS8yOTljMWNhNWUwN2JiYTFmZDkwODQzMDU2ZmI1NTlmOTZiMWY1YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ1LzI5OWMxY2E1ZTA3YmJhMWZkOTA4NDMwNTZmYjU1OWY5NmIxZjVhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ2LzZkYWY4NTUyYjg5MWU1YzIyYmM1OGM5ZDdmYzFhMmViOGYwMjg5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ2LzZkYWY4NTUyYjg5MWU1YzIyYmM1OGM5ZDdmYzFhMmViOGYwMjg5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Ni82ZGFmODU1MmI4OTFlNWMyMmJjNThjOWQ3ZmMxYTJlYjhmMDI4OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ2LzZkYWY4NTUyYjg5MWU1YzIyYmM1OGM5ZDdmYzFhMmViOGYwMjg5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ3LzZkYmIzZTIwNzMxM2QxZDhhYWExMjBjNmFkMjA0YmYxMjk1ZTUzIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ3LzZkYmIzZTIwNzMxM2QxZDhhYWExMjBjNmFkMjA0YmYxMjk1ZTUzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Ny82ZGJiM2UyMDczMTNkMWQ4YWFhMTIwYzZhZDIwNGJmMTI5NWU1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ3LzZkYmIzZTIwNzMxM2QxZDhhYWExMjBjNmFkMjA0YmYxMjk1ZTUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ3LzgxNzJjYjJmNWZmOWI1MTRiYzlkMDRkM2JkNWVmNTg0MGNiM2IyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ3LzgxNzJjYjJmNWZmOWI1MTRiYzlkMDRkM2JkNWVmNTg0MGNiM2IyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Ny84MTcyY2IyZjVmZjliNTE0YmM5ZDA0ZDNiZDVlZjU4NDBjYjNiMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ3LzgxNzJjYjJmNWZmOWI1MTRiYzlkMDRkM2JkNWVmNTg0MGNiM2IyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ5LzEzMGEyOGVmNTY3YWY5YTZhNjEwNGMzODc3M2ZlZGZhNWY5NzQyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ5LzEzMGEyOGVmNTY3YWY5YTZhNjEwNGMzODc3M2ZlZGZhNWY5NzQyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80OS8xMzBhMjhlZjU2N2FmOWE2YTYxMDRjMzg3NzNmZWRmYTVmOTc0MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ5LzEzMGEyOGVmNTY3YWY5YTZhNjEwNGMzODc3M2ZlZGZhNWY5NzQyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ5LzlkZjgxNzE1NWU0YmRkM2M2ZWUxOTJhNzJjNTJmNDgxODE4MjMwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ5LzlkZjgxNzE1NWU0YmRkM2M2ZWUxOTJhNzJjNTJmNDgxODE4MjMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80OS85ZGY4MTcxNTVlNGJkZDNjNmVlMTkyYTcyYzUyZjQ4MTgxODIzMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzQ5LzlkZjgxNzE1NWU0YmRkM2M2ZWUxOTJhNzJjNTJmNDgxODE4MjMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRhLzk1NTBlYmNjOTdjZTIyYjIyZjQ1YWY3YjgyOWJiMDMwZDAwM2Y1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRhLzk1NTBlYmNjOTdjZTIyYjIyZjQ1YWY3YjgyOWJiMDMwZDAwM2Y1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80YS85NTUwZWJjYzk3Y2UyMmIyMmY0NWFmN2I4MjliYjAzMGQwMDNmNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRhLzk1NTBlYmNjOTdjZTIyYjIyZjQ1YWY3YjgyOWJiMDMwZDAwM2Y1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzI1M2RhMzZhMGFlOGJmY2U2M2FlYWJkOGM1YjU4NDI5OTI1NTk0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzI1M2RhMzZhMGFlOGJmY2U2M2FlYWJkOGM1YjU4NDI5OTI1NTk0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Yi8yNTNkYTM2YTBhZThiZmNlNjNhZWFiZDhjNWI1ODQyOTkyNTU5NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzI1M2RhMzZhMGFlOGJmY2U2M2FlYWJkOGM1YjU4NDI5OTI1NTk0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzQ4ZGVlZDNhNDMzOTA5YmZkNmI2YWIzZDRiOTEzNDhiNmFmNDY0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzQ4ZGVlZDNhNDMzOTA5YmZkNmI2YWIzZDRiOTEzNDhiNmFmNDY0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Yi80OGRlZWQzYTQzMzkwOWJmZDZiNmFiM2Q0YjkxMzQ4YjZhZjQ2NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzQ4ZGVlZDNhNDMzOTA5YmZkNmI2YWIzZDRiOTEzNDhiNmFmNDY0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Yi84MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRiLzgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRjLzlmYWMwNzA3ZjhkNDE5NTAzN2FlNWE2ODFhYTQ4NjI2NDkxNTQxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRjLzlmYWMwNzA3ZjhkNDE5NTAzN2FlNWE2ODFhYTQ4NjI2NDkxNTQxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Yy85ZmFjMDcwN2Y4ZDQxOTUwMzdhZTVhNjgxYWE0ODYyNjQ5MTU0MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRjLzlmYWMwNzA3ZjhkNDE5NTAzN2FlNWE2ODFhYTQ4NjI2NDkxNTQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRjL2E0MDhhOGM4ODY1NWY3NTg2YTFiNTgwYmU2ZmFkMTM4MTIxZTk4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRjL2E0MDhhOGM4ODY1NWY3NTg2YTFiNTgwYmU2ZmFkMTM4MTIxZTk4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Yy9hNDA4YThjODg2NTVmNzU4NmExYjU4MGJlNmZhZDEzODEyMWU5OApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRjL2E0MDhhOGM4ODY1NWY3NTg2YTFiNTgwYmU2ZmFkMTM4MTIxZTk4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlLzBkOTQwMWFlZTc4ZWIzNDVhODY4NWE4NTlkMzdjOGMzYzBiYmVkIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlLzBkOTQwMWFlZTc4ZWIzNDVhODY4NWE4NTlkMzdjOGMzYzBiYmVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80ZS8wZDk0MDFhZWU3OGViMzQ1YTg2ODVhODU5ZDM3YzhjM2MwYmJlZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlLzBkOTQwMWFlZTc4ZWIzNDVhODY4NWE4NTlkMzdjOGMzYzBiYmVkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlLzg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlLzg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80ZS84ODZlNjAyNTI5Y2FhOWFiMTFkNzFmODY2MzRiZDFiNmUwZGUxMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlLzg4NmU2MDI1MjljYWE5YWIxMWQ3MWY4NjYzNGJkMWI2ZTBkZTEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlL2IwNGM5ZTc5ZTg4ZjY2NDBkMDFmZjViMjVjYTJhNjA3NjRmMjE2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlL2IwNGM5ZTc5ZTg4ZjY2NDBkMDFmZjViMjVjYTJhNjA3NjRmMjE2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80ZS9iMDRjOWU3OWU4OGY2NjQwZDAxZmY1YjI1Y2EyYTYwNzY0ZjIxNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRlL2IwNGM5ZTc5ZTg4ZjY2NDBkMDFmZjViMjVjYTJhNjA3NjRmMjE2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRmL2U5M2MwZWM4M2ViNjMwNWNiYWNlM2RhY2U4OGVjZWUxYjYzY2I2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRmL2U5M2MwZWM4M2ViNjMwNWNiYWNlM2RhY2U4OGVjZWUxYjYzY2I2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy80Zi9lOTNjMGVjODNlYjYzMDVjYmFjZTNkYWNlODhlY2VlMWI2M2NiNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRmL2U5M2MwZWM4M2ViNjMwNWNiYWNlM2RhY2U4OGVjZWUxYjYzY2I2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzEyZmQ1NjViMTM5M2JkZmRhMTgwNWQ0ZWMzOGNlNjYxOWUxZmQxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzEyZmQ1NjViMTM5M2JkZmRhMTgwNWQ0ZWMzOGNlNjYxOWUxZmQxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81MC8xMmZkNTY1YjEzOTNiZGZkYTE4MDVkNGVjMzhjZTY2MTllMWZkMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzEyZmQ1NjViMTM5M2JkZmRhMTgwNWQ0ZWMzOGNlNjYxOWUxZmQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzRmNzVhYzk1YTcxZWY5ODA1MTgxNzYxODU3NmE2ODUwNWI5MmY5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzRmNzVhYzk1YTcxZWY5ODA1MTgxNzYxODU3NmE2ODUwNWI5MmY5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81MC80Zjc1YWM5NWE3MWVmOTgwNTE4MTc2MTg1NzZhNjg1MDViOTJmOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzRmNzVhYzk1YTcxZWY5ODA1MTgxNzYxODU3NmE2ODUwNWI5MmY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzg0ZmMyYTg4YjZiZGJhOGRiOTNiZDM5NTNhOGY0ZmRiNDcwMjM4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzg0ZmMyYTg4YjZiZGJhOGRiOTNiZDM5NTNhOGY0ZmRiNDcwMjM4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81MC84NGZjMmE4OGI2YmRiYThkYjkzYmQzOTUzYThmNGZkYjQ3MDIzOApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwLzg0ZmMyYTg4YjZiZGJhOGRiOTNiZDM5NTNhOGY0ZmRiNDcwMjM4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwL2NlN2Q3ZDAxMjE3Njc5ZTI2YzU1OTM5ZWVmMTE5ZTBjOTNlMjcyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwL2NlN2Q3ZDAxMjE3Njc5ZTI2YzU1OTM5ZWVmMTE5ZTBjOTNlMjcyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81MC9jZTdkN2QwMTIxNzY3OWUyNmM1NTkzOWVlZjExOWUwYzkzZTI3MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUwL2NlN2Q3ZDAxMjE3Njc5ZTI2YzU1OTM5ZWVmMTE5ZTBjOTNlMjcyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUxLzk1YTFiNDgwZjY2NjkxYjY2N2YxMGE5ZTQxZTcwMTE1YTc4MzUxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUxLzk1YTFiNDgwZjY2NjkxYjY2N2YxMGE5ZTQxZTcwMTE1YTc4MzUxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81MS85NWExYjQ4MGY2NjY5MWI2NjdmMTBhOWU0MWU3MDExNWE3ODM1MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUxLzk1YTFiNDgwZjY2NjkxYjY2N2YxMGE5ZTQxZTcwMTE1YTc4MzUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUyL2Q4YmM1NzJhZjJiNmQ0ZWUwZDVlNjJlZDVkMWZiYWQ5MjIxMGE5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUyL2Q4YmM1NzJhZjJiNmQ0ZWUwZDVlNjJlZDVkMWZiYWQ5MjIxMGE5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Mi9kOGJjNTcyYWYyYjZkNGVlMGQ1ZTYyZWQ1ZDFmYmFkOTIyMTBhOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUyL2Q4YmM1NzJhZjJiNmQ0ZWUwZDVlNjJlZDVkMWZiYWQ5MjIxMGE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUzLzgyNWY0MWFjOGQ2NDA2MTJmOTQyM2EyZjAzYTY5ZjNkOTY4MDlhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUzLzgyNWY0MWFjOGQ2NDA2MTJmOTQyM2EyZjAzYTY5ZjNkOTY4MDlhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81My84MjVmNDFhYzhkNjQwNjEyZjk0MjNhMmYwM2E2OWYzZDk2ODA5YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzUzLzgyNWY0MWFjOGQ2NDA2MTJmOTQyM2EyZjAzYTY5ZjNkOTY4MDlhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0LzI2OWIzZjZlYzNkN2Q0ZWRlMjRkZDM1MGRkNWQ2MDU0OTVjM2FlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0LzI2OWIzZjZlYzNkN2Q0ZWRlMjRkZDM1MGRkNWQ2MDU0OTVjM2FlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81NC8yNjliM2Y2ZWMzZDdkNGVkZTI0ZGQzNTBkZDVkNjA1NDk1YzNhZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0LzI2OWIzZjZlYzNkN2Q0ZWRlMjRkZDM1MGRkNWQ2MDU0OTVjM2FlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0LzU5Yzg5YWEwMDI2ZDU0M2NlODM0M2JkODk4NzFiY2U1NDNmOWMyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0LzU5Yzg5YWEwMDI2ZDU0M2NlODM0M2JkODk4NzFiY2U1NDNmOWMyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81NC81OWM4OWFhMDAyNmQ1NDNjZTgzNDNiZDg5ODcxYmNlNTQzZjljMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0LzU5Yzg5YWEwMDI2ZDU0M2NlODM0M2JkODk4NzFiY2U1NDNmOWMyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0Lzc2MDdjNjkwMzcyZmU4MWZhYjhlM2JiNDRjNTMwZTEyOTExOGZkIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0Lzc2MDdjNjkwMzcyZmU4MWZhYjhlM2JiNDRjNTMwZTEyOTExOGZkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81NC83NjA3YzY5MDM3MmZlODFmYWI4ZTNiYjQ0YzUzMGUxMjkxMThmZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU0Lzc2MDdjNjkwMzcyZmU4MWZhYjhlM2JiNDRjNTMwZTEyOTExOGZkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU1L2I0ZTQ2ODdlN2EwZDljYTM2NzAxNmVkOTMwZjM4NWQ0MDIyZTZmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU1L2I0ZTQ2ODdlN2EwZDljYTM2NzAxNmVkOTMwZjM4NWQ0MDIyZTZmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81NS9iNGU0Njg3ZTdhMGQ5Y2EzNjcwMTZlZDkzMGYzODVkNDAyMmU2ZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU1L2I0ZTQ2ODdlN2EwZDljYTM2NzAxNmVkOTMwZjM4NWQ0MDIyZTZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU2LzZhYjUzYzIyMGEyZWFmYzEyMTJhZjFhMDI0NTEzMjMwMjgwYWI5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU2LzZhYjUzYzIyMGEyZWFmYzEyMTJhZjFhMDI0NTEzMjMwMjgwYWI5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Ni82YWI1M2MyMjBhMmVhZmMxMjEyYWYxYTAyNDUxMzIzMDI4MGFiOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU2LzZhYjUzYzIyMGEyZWFmYzEyMTJhZjFhMDI0NTEzMjMwMjgwYWI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU2L2E2MzhiNzZiNzVlMDY4NTkwYWM5OTljMmY4NjIxZTdmM2UyNjRjIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU2L2E2MzhiNzZiNzVlMDY4NTkwYWM5OTljMmY4NjIxZTdmM2UyNjRjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Ni9hNjM4Yjc2Yjc1ZTA2ODU5MGFjOTk5YzJmODYyMWU3ZjNlMjY0YwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzU2L2E2MzhiNzZiNzVlMDY4NTkwYWM5OTljMmY4NjIxZTdmM2UyNjRjCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Ny8wNzlhNDYyMzNhZTJiNmRmNjJlOWFkZTcxYzQ5NDg1MTJhYmVmYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Ny8wNzlhNDYyMzNhZTJiNmRmNjJlOWFkZTcxYzQ5NDg1MTJhYmVmYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNTcvMDc5YTQ2MjMzYWUyYjZkZjYyZTlhZGU3MWM0OTQ4NTEyYWJlZmIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Ny8wNzlhNDYyMzNhZTJiNmRmNjJlOWFkZTcxYzQ5NDg1MTJhYmVmYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OC80M2ZlYmNiMjM0ODBkZjBiNWVkYjIyYTIxYzU5Yzc3MmJiOGUyOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OC80M2ZlYmNiMjM0ODBkZjBiNWVkYjIyYTIxYzU5Yzc3MmJiOGUyOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNTgvNDNmZWJjYjIzNDgwZGYwYjVlZGIyMmEyMWM1OWM3NzJiYjhlMjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OC80M2ZlYmNiMjM0ODBkZjBiNWVkYjIyYTIxYzU5Yzc3MmJiOGUyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OC9lODUzZjY2Njk5ZmQwMjYyOWZkNTBiZGUwODA4MmJjMDA1OTMzYSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OC9lODUzZjY2Njk5ZmQwMjYyOWZkNTBiZGUwODA4MmJjMDA1OTMzYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNTgvZTg1M2Y2NjY5OWZkMDI2MjlmZDUwYmRlMDgwODJiYzAwNTkzM2EKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OC9lODUzZjY2Njk5ZmQwMjYyOWZkNTBiZGUwODA4MmJjMDA1OTMzYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OS82ODAzYjUyMzIwM2E0ODUxYzgyNGMwNzM2NjkwNmY4MzUzZjRhZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OS82ODAzYjUyMzIwM2E0ODUxYzgyNGMwNzM2NjkwNmY4MzUzZjRhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNTkvNjgwM2I1MjMyMDNhNDg1MWM4MjRjMDczNjY5MDZmODM1M2Y0YWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81OS82ODAzYjUyMzIwM2E0ODUxYzgyNGMwNzM2NjkwNmY4MzUzZjRhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8yNDExZjgwNzVmNDhhNmIyZmRiODVlYmMwZDM3MTc0N2M0ZGYxNSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8yNDExZjgwNzVmNDhhNmIyZmRiODVlYmMwZDM3MTc0N2M0ZGYxNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWMvMjQxMWY4MDc1ZjQ4YTZiMmZkYjg1ZWJjMGQzNzE3NDdjNGRmMTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8yNDExZjgwNzVmNDhhNmIyZmRiODVlYmMwZDM3MTc0N2M0ZGYxNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8zNDFlYWQyYmE2ZjJhZjk4Y2U1ZWMzZmU4NGY2YjZkMjg5OWMwZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8zNDFlYWQyYmE2ZjJhZjk4Y2U1ZWMzZmU4NGY2YjZkMjg5OWMwZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWMvMzQxZWFkMmJhNmYyYWY5OGNlNWVjM2ZlODRmNmI2ZDI4OTljMGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8zNDFlYWQyYmE2ZjJhZjk4Y2U1ZWMzZmU4NGY2YjZkMjg5OWMwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8zYjY4YTcxZmM0ZmE1ZDM2MmZkMzg3NWU1MzEzN2M2YTVhYjdhNSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8zYjY4YTcxZmM0ZmE1ZDM2MmZkMzg3NWU1MzEzN2M2YTVhYjdhNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWMvM2I2OGE3MWZjNGZhNWQzNjJmZDM4NzVlNTMxMzdjNmE1YWI3YTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Yy8zYjY4YTcxZmM0ZmE1ZDM2MmZkMzg3NWU1MzEzN2M2YTVhYjdhNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZC9jMTAxOGU5MGIxOTY1NGJlZTk4NmI3YTBjMjY4ODA0ZDM5NjU5ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZC9jMTAxOGU5MGIxOTY1NGJlZTk4NmI3YTBjMjY4ODA0ZDM5NjU5ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWQvYzEwMThlOTBiMTk2NTRiZWU5ODZiN2EwYzI2ODgwNGQzOTY1OWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZC9jMTAxOGU5MGIxOTY1NGJlZTk4NmI3YTBjMjY4ODA0ZDM5NjU5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZC9kZDBmZTY2Zjk5MGRjMGU1Y2Y5ZmVjNmQ5YjQ2NTI0MGU5NTM3ZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZC9kZDBmZTY2Zjk5MGRjMGU1Y2Y5ZmVjNmQ5YjQ2NTI0MGU5NTM3ZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWQvZGQwZmU2NmY5OTBkYzBlNWNmOWZlYzZkOWI0NjUyNDBlOTUzN2YKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZC9kZDBmZTY2Zjk5MGRjMGU1Y2Y5ZmVjNmQ5YjQ2NTI0MGU5NTM3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZS9iN2JiNmExNDZlYjNjN2ZkMzk5MGIyNDBhMjMwOGVjZWIxY2Y4ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZS9iN2JiNmExNDZlYjNjN2ZkMzk5MGIyNDBhMjMwOGVjZWIxY2Y4ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWUvYjdiYjZhMTQ2ZWIzYzdmZDM5OTBiMjQwYTIzMDhlY2ViMWNmOGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81ZS9iN2JiNmExNDZlYjNjN2ZkMzk5MGIyNDBhMjMwOGVjZWIxY2Y4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Zi9iZmJkYzA0YjRlY2E0NmY1NGY0ODUzYTNjNWExZGNlMjhmNTE2NSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Zi9iZmJkYzA0YjRlY2E0NmY1NGY0ODUzYTNjNWExZGNlMjhmNTE2NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNWYvYmZiZGMwNGI0ZWNhNDZmNTRmNDg1M2EzYzVhMWRjZTI4ZjUxNjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy81Zi9iZmJkYzA0YjRlY2E0NmY1NGY0ODUzYTNjNWExZGNlMjhmNTE2NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MC85MWZjMmMwMzZhMzgyYTY5NDg5ZTNmNTE4ZWU1YWFlOWE0ZTU2NyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MC85MWZjMmMwMzZhMzgyYTY5NDg5ZTNmNTE4ZWU1YWFlOWE0ZTU2NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjAvOTFmYzJjMDM2YTM4MmE2OTQ4OWUzZjUxOGVlNWFhZTlhNGU1NjcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MC85MWZjMmMwMzZhMzgyYTY5NDg5ZTNmNTE4ZWU1YWFlOWE0ZTU2NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MS8zNDBlZWVkNzM0MGZhNmE4NzkyZGVmOWE1OTM4YmI1ZDQ0MzRiYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MS8zNDBlZWVkNzM0MGZhNmE4NzkyZGVmOWE1OTM4YmI1ZDQ0MzRiYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjEvMzQwZWVlZDczNDBmYTZhODc5MmRlZjlhNTkzOGJiNWQ0NDM0YmIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MS8zNDBlZWVkNzM0MGZhNmE4NzkyZGVmOWE1OTM4YmI1ZDQ0MzRiYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MS83ODg4NWIzOGZlOTZlODI1YWMwZjQ5MmMwYTk0MWYyODhiMzdmNiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MS83ODg4NWIzOGZlOTZlODI1YWMwZjQ5MmMwYTk0MWYyODhiMzdmNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjEvNzg4ODViMzhmZTk2ZTgyNWFjMGY0OTJjMGE5NDFmMjg4YjM3ZjYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82MS83ODg4NWIzOGZlOTZlODI1YWMwZjQ5MmMwYTk0MWYyODhiMzdmNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi8xMmMzMWRhYjVlNDgyMjQ3ZDc5NzdlNGYwZGQzNjAxZGVjZjEzYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi8xMmMzMWRhYjVlNDgyMjQ3ZDc5NzdlNGYwZGQzNjAxZGVjZjEzYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjIvMTJjMzFkYWI1ZTQ4MjI0N2Q3OTc3ZTRmMGRkMzYwMWRlY2YxM2IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi8xMmMzMWRhYjVlNDgyMjQ3ZDc5NzdlNGYwZGQzNjAxZGVjZjEzYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi8yNjkxMTFjM2IwMmE5MzU1YmFkY2I5ZGE4Njc4YjFiZjQxNzg3YiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi8yNjkxMTFjM2IwMmE5MzU1YmFkY2I5ZGE4Njc4YjFiZjQxNzg3YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjIvMjY5MTExYzNiMDJhOTM1NWJhZGNiOWRhODY3OGIxYmY0MTc4N2IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi8yNjkxMTFjM2IwMmE5MzU1YmFkY2I5ZGE4Njc4YjFiZjQxNzg3YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi9jNGY2NTMzYzlhMzg5NDE5MWZkY2I5NmEzYmU5MzVhZGU2M2YxYSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi9jNGY2NTMzYzlhMzg5NDE5MWZkY2I5NmEzYmU5MzVhZGU2M2YxYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjIvYzRmNjUzM2M5YTM4OTQxOTFmZGNiOTZhM2JlOTM1YWRlNjNmMWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Mi9jNGY2NTMzYzlhMzg5NDE5MWZkY2I5NmEzYmU5MzVhZGU2M2YxYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82My8yNDcxMjUzODZkZTllYzkwYTI3YWQzNjE2OTMwN2JmOGExMWEzOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82My8yNDcxMjUzODZkZTllYzkwYTI3YWQzNjE2OTMwN2JmOGExMWEzOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjMvMjQ3MTI1Mzg2ZGU5ZWM5MGEyN2FkMzYxNjkzMDdiZjhhMTFhMzgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82My8yNDcxMjUzODZkZTllYzkwYTI3YWQzNjE2OTMwN2JmOGExMWEzOApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjcvMThhNDU5MDk1MzJkMWZjZjU2MDBkMDg3N2Y3ZmU3ZTc4ZjBiODYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjcvMThhNDU5MDk1MzJkMWZjZjU2MDBkMDg3N2Y3ZmU3ZTc4ZjBiODYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY3LzE4YTQ1OTA5NTMyZDFmY2Y1NjAwZDA4NzdmN2ZlN2U3OGYwYjg2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjcvMThhNDU5MDk1MzJkMWZjZjU2MDBkMDg3N2Y3ZmU3ZTc4ZjBiODYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY4L2M2Yzg0YjA5MTkyNmM3ZDkwYWE2YTc5YjJiYzNiYjZhZGNjZDhlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY4L2M2Yzg0YjA5MTkyNmM3ZDkwYWE2YTc5YjJiYzNiYjZhZGNjZDhlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82OC9jNmM4NGIwOTE5MjZjN2Q5MGFhNmE3OWIyYmMzYmI2YWRjY2Q4ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY4L2M2Yzg0YjA5MTkyNmM3ZDkwYWE2YTc5YjJiYzNiYjZhZGNjZDhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY5L2Y1NzBjNTdiMjRlYTdjMDg2ZTk0YzVlNTc0OTY0Nzk4MzIxNDM1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY5L2Y1NzBjNTdiMjRlYTdjMDg2ZTk0YzVlNTc0OTY0Nzk4MzIxNDM1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82OS9mNTcwYzU3YjI0ZWE3YzA4NmU5NGM1ZTU3NDk2NDc5ODMyMTQzNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY5L2Y1NzBjNTdiMjRlYTdjMDg2ZTk0YzVlNTc0OTY0Nzk4MzIxNDM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZhL2UxYTM5NjcwMzFhNDJjZjk1NWQ5ZDVjMjM5NTIxMWFjODJmNmNmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZhL2UxYTM5NjcwMzFhNDJjZjk1NWQ5ZDVjMjM5NTIxMWFjODJmNmNmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82YS9lMWEzOTY3MDMxYTQyY2Y5NTVkOWQ1YzIzOTUyMTFhYzgyZjZjZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZhL2UxYTM5NjcwMzFhNDJjZjk1NWQ5ZDVjMjM5NTIxMWFjODJmNmNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZiLzdlMzdiZThjZTBiODk3MDkzZjI4NzhhOWRjZDhmMzk2YmVkYTJjIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZiLzdlMzdiZThjZTBiODk3MDkzZjI4NzhhOWRjZDhmMzk2YmVkYTJjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Yi83ZTM3YmU4Y2UwYjg5NzA5M2YyODc4YTlkY2Q4ZjM5NmJlZGEyYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZiLzdlMzdiZThjZTBiODk3MDkzZjI4NzhhOWRjZDhmMzk2YmVkYTJjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZjLzA2ZGNkMTYzNTg3YzJjYzE4YmU0NDg1N2UwYjcxMTE2MzgyYWViIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZjLzA2ZGNkMTYzNTg3YzJjYzE4YmU0NDg1N2UwYjcxMTE2MzgyYWViCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Yy8wNmRjZDE2MzU4N2MyY2MxOGJlNDQ4NTdlMGI3MTExNjM4MmFlYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZjLzA2ZGNkMTYzNTg3YzJjYzE4YmU0NDg1N2UwYjcxMTE2MzgyYWViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmLzMyNzM5YzM3MjRkMWQ1Zjg1NTI5OTMwOWYzODg2MDZmNDA3NDY4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmLzMyNzM5YzM3MjRkMWQ1Zjg1NTI5OTMwOWYzODg2MDZmNDA3NDY4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Zi8zMjczOWMzNzI0ZDFkNWY4NTUyOTkzMDlmMzg4NjA2ZjQwNzQ2OApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmLzMyNzM5YzM3MjRkMWQ1Zjg1NTI5OTMwOWYzODg2MDZmNDA3NDY4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmL2EzMzAxNDc2NGJmMTEyMGE0NTRlYjg0MzdhZTA5ODIzOGU0MDliIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmL2EzMzAxNDc2NGJmMTEyMGE0NTRlYjg0MzdhZTA5ODIzOGU0MDliCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Zi9hMzMwMTQ3NjRiZjExMjBhNDU0ZWI4NDM3YWUwOTgyMzhlNDA5YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmL2EzMzAxNDc2NGJmMTEyMGE0NTRlYjg0MzdhZTA5ODIzOGU0MDliCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmL2JlOWZiODVjODZkN2QxNDM1ZjcyOGRhNDE4YmRmZjUyYzY0MGE5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmL2JlOWZiODVjODZkN2QxNDM1ZjcyOGRhNDE4YmRmZjUyYzY0MGE5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy82Zi9iZTlmYjg1Yzg2ZDdkMTQzNWY3MjhkYTQxOGJkZmY1MmM2NDBhOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzZmL2JlOWZiODVjODZkN2QxNDM1ZjcyOGRhNDE4YmRmZjUyYzY0MGE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxLzE3NDY3YjE4NjA1YTY2MGViZTU1ODZkZjY5ZTIzMTFlZDU2MDlmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxLzE3NDY3YjE4NjA1YTY2MGViZTU1ODZkZjY5ZTIzMTFlZDU2MDlmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83MS8xNzQ2N2IxODYwNWE2NjBlYmU1NTg2ZGY2OWUyMzExZWQ1NjA5ZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxLzE3NDY3YjE4NjA1YTY2MGViZTU1ODZkZjY5ZTIzMTFlZDU2MDlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxLzJlYmJhNjY2OWVhODQ3ZDk4MjllNGYxMDU5ZDZjODMwYzhiNTMxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxLzJlYmJhNjY2OWVhODQ3ZDk4MjllNGYxMDU5ZDZjODMwYzhiNTMxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83MS8yZWJiYTY2NjllYTg0N2Q5ODI5ZTRmMTA1OWQ2YzgzMGM4YjUzMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxLzJlYmJhNjY2OWVhODQ3ZDk4MjllNGYxMDU5ZDZjODMwYzhiNTMxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxL2FkZDJkN2I5M2Q1NWJmMzYwMGY4YTE1ODJiZWNlZWJiZDA1MGM4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxL2FkZDJkN2I5M2Q1NWJmMzYwMGY4YTE1ODJiZWNlZWJiZDA1MGM4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83MS9hZGQyZDdiOTNkNTViZjM2MDBmOGExNTgyYmVjZWViYmQwNTBjOApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcxL2FkZDJkN2I5M2Q1NWJmMzYwMGY4YTE1ODJiZWNlZWJiZDA1MGM4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Mi9lYTQ5OWUxMDhkZjVmZjBhNGE5MTNlNzY1NWJiZWViMWZiNjlmMiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Mi9lYTQ5OWUxMDhkZjVmZjBhNGE5MTNlNzY1NWJiZWViMWZiNjlmMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODg2ZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzcyL2VhNDk5ZTEwOGRmNWZmMGE0YTkxM2U3NjU1YmJlZWIxZmI2OWYyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc0L2RmMTNmMDc5M2FmZGFhOTcyMTUwYmJhOTc2ZjdkZTgyODQ5MTRlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc0L2RmMTNmMDc5M2FmZGFhOTcyMTUwYmJhOTc2ZjdkZTgyODQ5MTRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83NC9kZjEzZjA3OTNhZmRhYTk3MjE1MGJiYTk3NmY3ZGU4Mjg0OTE0ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc0L2RmMTNmMDc5M2FmZGFhOTcyMTUwYmJhOTc2ZjdkZTgyODQ5MTRlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc1L2E4MTFiZjZiYzU3Njk0YWRiM2ZlNjA0Nzg2ZjNhNGVmZDFjZDFiIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc1L2E4MTFiZjZiYzU3Njk0YWRiM2ZlNjA0Nzg2ZjNhNGVmZDFjZDFiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83NS9hODExYmY2YmM1NzY5NGFkYjNmZTYwNDc4NmYzYTRlZmQxY2QxYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc1L2E4MTFiZjZiYzU3Njk0YWRiM2ZlNjA0Nzg2ZjNhNGVmZDFjZDFiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc2LzYzZmNlMDEzMGRiMDkyOTM2YjEzN2NhYmQ2OTNlYzIzNGViMDYwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc2LzYzZmNlMDEzMGRiMDkyOTM2YjEzN2NhYmQ2OTNlYzIzNGViMDYwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Ni82M2ZjZTAxMzBkYjA5MjkzNmIxMzdjYWJkNjkzZWMyMzRlYjA2MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc2LzYzZmNlMDEzMGRiMDkyOTM2YjEzN2NhYmQ2OTNlYzIzNGViMDYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc2L2FiMGUyODY4MTk3ZWMxNThkZGQ2Yzc4ZDhhMGQyZmQ3M2QzOGY5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc2L2FiMGUyODY4MTk3ZWMxNThkZGQ2Yzc4ZDhhMGQyZmQ3M2QzOGY5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Ni9hYjBlMjg2ODE5N2VjMTU4ZGRkNmM3OGQ4YTBkMmZkNzNkMzhmOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzc2L2FiMGUyODY4MTk3ZWMxNThkZGQ2Yzc4ZDhhMGQyZmQ3M2QzOGY5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdhL2EzZWRmMmJjZmVlMjIzOThlNmI1NTI5NWFhNTYzNjZiN2FhZjc2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdhL2EzZWRmMmJjZmVlMjIzOThlNmI1NTI5NWFhNTYzNjZiN2FhZjc2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83YS9hM2VkZjJiY2ZlZTIyMzk4ZTZiNTUyOTVhYTU2MzY2YjdhYWY3NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdhL2EzZWRmMmJjZmVlMjIzOThlNmI1NTI5NWFhNTYzNjZiN2FhZjc2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdjLzJjNTIyOGM5ZTkwMTcwZDRhMzVlNjU1OGU0NzE2M2RhZjA5MmU1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdjLzJjNTIyOGM5ZTkwMTcwZDRhMzVlNjU1OGU0NzE2M2RhZjA5MmU1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Yy8yYzUyMjhjOWU5MDE3MGQ0YTM1ZTY1NThlNDcxNjNkYWYwOTJlNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdjLzJjNTIyOGM5ZTkwMTcwZDRhMzVlNjU1OGU0NzE2M2RhZjA5MmU1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdjL2I2M2VlZDU5NzEzMGJhNGFiYjg3YjNlNTQ0Yjg1MDIxOTA1NTIwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdjL2I2M2VlZDU5NzEzMGJhNGFiYjg3YjNlNTQ0Yjg1MDIxOTA1NTIwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Yy9iNjNlZWQ1OTcxMzBiYTRhYmI4N2IzZTU0NGI4NTAyMTkwNTUyMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzdjL2I2M2VlZDU5NzEzMGJhNGFiYjg3YjNlNTQ0Yjg1MDIxOTA1NTIwCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83ZS8yZDA1OGQ1ZmVkZjgzMjlkYjQ0ZGI0ZmFjNjEwZDZiMWE4OTE1OSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83ZS8yZDA1OGQ1ZmVkZjgzMjlkYjQ0ZGI0ZmFjNjEwZDZiMWE4OTE1OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvN2UvMmQwNThkNWZlZGY4MzI5ZGI0NGRiNGZhYzYxMGQ2YjFhODkxNTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83ZS8yZDA1OGQ1ZmVkZjgzMjlkYjQ0ZGI0ZmFjNjEwZDZiMWE4OTE1OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Zi83YTJkYTU4MTI2MjI2OTg2ZDcxYzZkZGZhYjRhZmJhNjkzMjgwZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Zi83YTJkYTU4MTI2MjI2OTg2ZDcxYzZkZGZhYjRhZmJhNjkzMjgwZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvN2YvN2EyZGE1ODEyNjIyNjk4NmQ3MWM2ZGRmYWI0YWZiYTY5MzI4MGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy83Zi83YTJkYTU4MTI2MjI2OTg2ZDcxYzZkZGZhYjRhZmJhNjkzMjgwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84MC9hOGZiYjNhYmIxYmE0MjNkNTU0ZTk2MzBiOGZjMmU1Njk4Zjg2YiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84MC9hOGZiYjNhYmIxYmE0MjNkNTU0ZTk2MzBiOGZjMmU1Njk4Zjg2YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODAvYThmYmIzYWJiMWJhNDIzZDU1NGU5NjMwYjhmYzJlNTY5OGY4NmIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84MC9hOGZiYjNhYmIxYmE0MjNkNTU0ZTk2MzBiOGZjMmU1Njk4Zjg2YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84MS84NzExNzA2MmI3NTBlZWQ0ZjkzZmQ3ZTg5OWYxN2I1MmNlNTU0ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84MS84NzExNzA2MmI3NTBlZWQ0ZjkzZmQ3ZTg5OWYxN2I1MmNlNTU0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODEvODcxMTcwNjJiNzUwZWVkNGY5M2ZkN2U4OTlmMTdiNTJjZTU1NGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84MS84NzExNzA2MmI3NTBlZWQ0ZjkzZmQ3ZTg5OWYxN2I1MmNlNTU0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84My8wN2Q5M2ExNTU5MDNhNWM0OTU3NjU4M2YwY2UxZjZmZjg5N2MwZSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84My8wN2Q5M2ExNTU5MDNhNWM0OTU3NjU4M2YwY2UxZjZmZjg5N2MwZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODMvMDdkOTNhMTU1OTAzYTVjNDk1NzY1ODNmMGNlMWY2ZmY4OTdjMGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84My8wN2Q5M2ExNTU5MDNhNWM0OTU3NjU4M2YwY2UxZjZmZjg5N2MwZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84My84MjRhOGM2NjU4NzY4ZTIwMTM5MDUyMTljYzhjNjRjYzNkOWEyZSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84My84MjRhOGM2NjU4NzY4ZTIwMTM5MDUyMTljYzhjNjRjYzNkOWEyZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODMvODI0YThjNjY1ODc2OGUyMDEzOTA1MjE5Y2M4YzY0Y2MzZDlhMmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84My84MjRhOGM2NjU4NzY4ZTIwMTM5MDUyMTljYzhjNjRjYzNkOWEyZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84NC85NjE5YjAzYWU1NDBhY2VlNGQxZWRlYzk2Yjg2OTkzZGE2YjQ5NyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84NC85NjE5YjAzYWU1NDBhY2VlNGQxZWRlYzk2Yjg2OTkzZGE2YjQ5NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODQvOTYxOWIwM2FlNTQwYWNlZTRkMWVkZWM5NmI4Njk5M2RhNmI0OTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84NC85NjE5YjAzYWU1NDBhY2VlNGQxZWRlYzk2Yjg2OTkzZGE2YjQ5NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84NC9kZTg0ZjhmM2E2ZDYzZTYzNmVlOWFkODFmNGI4MDUxMmZhOWJiZSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84NC9kZTg0ZjhmM2E2ZDYzZTYzNmVlOWFkODFmNGI4MDUxMmZhOWJiZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODQvZGU4NGY4ZjNhNmQ2M2U2MzZlZTlhZDgxZjRiODA1MTJmYTliYmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84NC9kZTg0ZjhmM2E2ZDYzZTYzNmVlOWFkODFmNGI4MDUxMmZhOWJiZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Ni8wODhkYWU4YmFkZTQ1NDk5NWIyMWExYzg4MTA3YjBlMWFjY2RhYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Ni8wODhkYWU4YmFkZTQ1NDk5NWIyMWExYzg4MTA3YjBlMWFjY2RhYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODYvMDg4ZGFlOGJhZGU0NTQ5OTViMjFhMWM4ODEwN2IwZTFhY2NkYWIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Ni8wODhkYWU4YmFkZTQ1NDk5NWIyMWExYzg4MTA3YjBlMWFjY2RhYgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Ny9iNDkyNjI2MGQ3N2EzYjg1MWU3MWVjY2UwNjgzOWJkNjUwYjIzMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Ny9iNDkyNjI2MGQ3N2EzYjg1MWU3MWVjY2UwNjgzOWJkNjUwYjIzMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODcvYjQ5MjYyNjBkNzdhM2I4NTFlNzFlY2NlMDY4MzliZDY1MGIyMzEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Ny9iNDkyNjI2MGQ3N2EzYjg1MWU3MWVjY2UwNjgzOWJkNjUwYjIzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84OC9lMTg1OTEwYTE1Y2QxM2JkZjQ0ODU0YWQwMzdmNDg0MmIwM2IyOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84OC9lMTg1OTEwYTE1Y2QxM2JkZjQ0ODU0YWQwMzdmNDg0MmIwM2IyOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvODgvZTE4NTkxMGExNWNkMTNiZGY0NDg1NGFkMDM3ZjQ4NDJiMDNiMjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84OC9lMTg1OTEwYTE1Y2QxM2JkZjQ0ODU0YWQwMzdmNDg0MmIwM2IyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84YS9hZDlkMGVhMzM0OTUxZGE0N2I2MjFhNDc1YjM5Y2M2ZWQ3NTliZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84YS9hZDlkMGVhMzM0OTUxZGE0N2I2MjFhNDc1YjM5Y2M2ZWQ3NTliZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGEvYWQ5ZDBlYTMzNDk1MWRhNDdiNjIxYTQ3NWIzOWNjNmVkNzU5YmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84YS9hZDlkMGVhMzM0OTUxZGE0N2I2MjFhNDc1YjM5Y2M2ZWQ3NTliZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84YS9hZTcxNGY3ZDkzOTMwOWQ3ZjEzMmIzMDY0NmQ5Njc0MzEzNGE5ZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84YS9hZTcxNGY3ZDkzOTMwOWQ3ZjEzMmIzMDY0NmQ5Njc0MzEzNGE5ZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGEvYWU3MTRmN2Q5MzkzMDlkN2YxMzJiMzA2NDZkOTY3NDMxMzRhOWYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84YS9hZTcxNGY3ZDkzOTMwOWQ3ZjEzMmIzMDY0NmQ5Njc0MzEzNGE5ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Yi8wOTVkOGZkMDE1OTRmNGQxNDQ1NGQwNzNlM2FjNTdiOWNlNDg1ZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Yi8wOTVkOGZkMDE1OTRmNGQxNDQ1NGQwNzNlM2FjNTdiOWNlNDg1ZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGIvMDk1ZDhmZDAxNTk0ZjRkMTQ0NTRkMDczZTNhYzU3YjljZTQ4NWYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Yi8wOTVkOGZkMDE1OTRmNGQxNDQ1NGQwNzNlM2FjNTdiOWNlNDg1ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Yi81YjUzY2IyYWE5Y2ViMTEzOWY1MzEyZmNmYTNjYzNjNWE0N2M5YSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Yi81YjUzY2IyYWE5Y2ViMTEzOWY1MzEyZmNmYTNjYzNjNWE0N2M5YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGIvNWI1M2NiMmFhOWNlYjExMzlmNTMxMmZjZmEzY2MzYzVhNDdjOWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Yi81YjUzY2IyYWE5Y2ViMTEzOWY1MzEyZmNmYTNjYzNjNWE0N2M5YQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzhiL2ZiMDEyYTZkODA5ZTQ5OWJkOGQzZTE5NGEzOTI5YmM4OTk1YjkzIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzhiL2ZiMDEyYTZkODA5ZTQ5OWJkOGQzZTE5NGEzOTI5YmM4OTk1YjkzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MGVlMDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGIvZmIwMTJhNmQ4MDllNDk5YmQ4ZDNlMTk0YTM5MjliYzg5OTViOTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGMvNzQ5ZDk5NjhkNGIxMGRjZmIwNmM5Zjk3ZDBlNWQ5MmQzMzcwNzEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGMvNzQ5ZDk5NjhkNGIxMGRjZmIwNmM5Zjk3ZDBlNWQ5MmQzMzcwNzEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzhjLzc0OWQ5OTY4ZDRiMTBkY2ZiMDZjOWY5N2QwZTVkOTJkMzM3MDcxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOGMvNzQ5ZDk5NjhkNGIxMGRjZmIwNmM5Zjk3ZDBlNWQ5MmQzMzcwNzEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzhmLzQ0MzNmODU5M2RkZDY1YjdkZDQzZGQ0NTY0ZDg0MWY0ZDljOGFhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzhmLzQ0MzNmODU5M2RkZDY1YjdkZDQzZGQ0NTY0ZDg0MWY0ZDljOGFhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy84Zi80NDMzZjg1OTNkZGQ2NWI3ZGQ0M2RkNDU2NGQ4NDFmNGQ5YzhhYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzhmLzQ0MzNmODU5M2RkZDY1YjdkZDQzZGQ0NTY0ZDg0MWY0ZDljOGFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkwL2EzMzZjN2RhY2JlMjk1MTU5NDEzNTU5YjAwNDNiOGJkYzYwZDU3IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkwL2EzMzZjN2RhY2JlMjk1MTU5NDEzNTU5YjAwNDNiOGJkYzYwZDU3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85MC9hMzM2YzdkYWNiZTI5NTE1OTQxMzU1OWIwMDQzYjhiZGM2MGQ1NwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkwL2EzMzZjN2RhY2JlMjk1MTU5NDEzNTU5YjAwNDNiOGJkYzYwZDU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkxLzJiMmQ3ODE5Y2Y5YzEwMjllNDE0ODgzODU3ZWQ2MWQ1OTdhMWE1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkxLzJiMmQ3ODE5Y2Y5YzEwMjllNDE0ODgzODU3ZWQ2MWQ1OTdhMWE1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85MS8yYjJkNzgxOWNmOWMxMDI5ZTQxNDg4Mzg1N2VkNjFkNTk3YTFhNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkxLzJiMmQ3ODE5Y2Y5YzEwMjllNDE0ODgzODU3ZWQ2MWQ1OTdhMWE1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkxLzhiYjNlMDkwOTBhOTk5NWQ0OGFmOWEyYTYyOTZkN2U2MDg4ZDFjIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkxLzhiYjNlMDkwOTBhOTk5NWQ0OGFmOWEyYTYyOTZkN2U2MDg4ZDFjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85MS84YmIzZTA5MDkwYTk5OTVkNDhhZjlhMmE2Mjk2ZDdlNjA4OGQxYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkxLzhiYjNlMDkwOTBhOTk5NWQ0OGFmOWEyYTYyOTZkN2U2MDg4ZDFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkyLzdkNDk0M2NkYmRjOWE2NjdkYjhlNjJjZmQwYTQxODcwMjM1YzUxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkyLzdkNDk0M2NkYmRjOWE2NjdkYjhlNjJjZmQwYTQxODcwMjM1YzUxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85Mi83ZDQ5NDNjZGJkYzlhNjY3ZGI4ZTYyY2ZkMGE0MTg3MDIzNWM1MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkyLzdkNDk0M2NkYmRjOWE2NjdkYjhlNjJjZmQwYTQxODcwMjM1YzUxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkzLzc3ZmNjZGIyMTA1NDBiOGMwNTIwY2M2ZTgwZWI2MzJjMjBiZDI1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkzLzc3ZmNjZGIyMTA1NDBiOGMwNTIwY2M2ZTgwZWI2MzJjMjBiZDI1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85My83N2ZjY2RiMjEwNTQwYjhjMDUyMGNjNmU4MGViNjMyYzIwYmQyNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzkzLzc3ZmNjZGIyMTA1NDBiOGMwNTIwY2M2ZTgwZWI2MzJjMjBiZDI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk0LzRmNWRkMWE4NjdjYWI0YzJiYmNiODk2NDkzNDM1Y2FlMWRjYzFhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk0LzRmNWRkMWE4NjdjYWI0YzJiYmNiODk2NDkzNDM1Y2FlMWRjYzFhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NC80ZjVkZDFhODY3Y2FiNGMyYmJjYjg5NjQ5MzQzNWNhZTFkY2MxYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk0LzRmNWRkMWE4NjdjYWI0YzJiYmNiODk2NDkzNDM1Y2FlMWRjYzFhCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NC84YmE2ZTcwMWMxZWRhYjBjMmQzOTRmYjdjNTUzODMzNDEyOTc5MyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NC84YmE2ZTcwMWMxZWRhYjBjMmQzOTRmYjdjNTUzODMzNDEyOTc5MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTQvOGJhNmU3MDFjMWVkYWIwYzJkMzk0ZmI3YzU1MzgzMzQxMjk3OTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NC84YmE2ZTcwMWMxZWRhYjBjMmQzOTRmYjdjNTUzODMzNDEyOTc5MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NS82NDYxNDlhYjZiNmJhNmVkYzgzY2ZmNjc4NTgyNTM4YjQ1N2IyYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NS82NDYxNDlhYjZiNmJhNmVkYzgzY2ZmNjc4NTgyNTM4YjQ1N2IyYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTUvNjQ2MTQ5YWI2YjZiYTZlZGM4M2NmZjY3ODU4MjUzOGI0NTdiMmIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy85NS82NDYxNDlhYjZiNmJhNmVkYzgzY2ZmNjc4NTgyNTM4YjQ1N2IyYgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTUvOWRlNjVlNTY4Mjc0MTIwZmRmOWUzYWY5Zjc3YjE1NTAxMjIxNDkgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTUvOWRlNjVlNTY4Mjc0MTIwZmRmOWUzYWY5Zjc3YjE1NTAxMjIxNDkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk1LzlkZTY1ZTU2ODI3NDEyMGZkZjllM2FmOWY3N2IxNTUwMTIyMTQ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTUvOWRlNjVlNTY4Mjc0MTIwZmRmOWUzYWY5Zjc3YjE1NTAxMjIxNDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTYvOGNhNzk0YTQ1OTdmN2Y2YWJiYjJiOGQ5NDBiNDA3OGEwZjNmZDQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTYvOGNhNzk0YTQ1OTdmN2Y2YWJiYjJiOGQ5NDBiNDA3OGEwZjNmZDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk2LzhjYTc5NGE0NTk3ZjdmNmFiYmIyYjhkOTQwYjQwNzhhMGYzZmQ0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTYvOGNhNzk0YTQ1OTdmN2Y2YWJiYjJiOGQ5NDBiNDA3OGEwZjNmZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTcvN2M2OTY1MTljNWEzMDA0YzVmMWQxNWQ2MGM4OWRiZWI4ZjIzNWYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTcvN2M2OTY1MTljNWEzMDA0YzVmMWQxNWQ2MGM4OWRiZWI4ZjIzNWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk3LzdjNjk2NTE5YzVhMzAwNGM1ZjFkMTVkNjBjODlkYmViOGYyMzVmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTcvN2M2OTY1MTljNWEzMDA0YzVmMWQxNWQ2MGM4OWRiZWI4ZjIzNWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTgvYmE0MjA1ZmNmMzFmNWRkOTNjOTE2ZDM1ZmUzZjNiM2QwZTY3MTQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTgvYmE0MjA1ZmNmMzFmNWRkOTNjOTE2ZDM1ZmUzZjNiM2QwZTY3MTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk4L2JhNDIwNWZjZjMxZjVkZDkzYzkxNmQzNWZlM2YzYjNkMGU2NzE0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTgvYmE0MjA1ZmNmMzFmNWRkOTNjOTE2ZDM1ZmUzZjNiM2QwZTY3MTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTgvZDUyZDA3YzBiMGJiZjJiNDY1NDhmNmFhNTIxMjk1YzJjYjU1ZGIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTgvZDUyZDA3YzBiMGJiZjJiNDY1NDhmNmFhNTIxMjk1YzJjYjU1ZGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk4L2Q1MmQwN2MwYjBiYmYyYjQ2NTQ4ZjZhYTUyMTI5NWMyY2I1NWRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTgvZDUyZDA3YzBiMGJiZjJiNDY1NDhmNmFhNTIxMjk1YzJjYjU1ZGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTkvYjRmN2U0ZjI0NDcwZmEwNmI5ODBiYzIxZjEwOTVjMmE5NDI1YzAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTkvYjRmN2U0ZjI0NDcwZmEwNmI5ODBiYzIxZjEwOTVjMmE5NDI1YzAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk5L2I0ZjdlNGYyNDQ3MGZhMDZiOTgwYmMyMWYxMDk1YzJhOTQyNWMwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTkvYjRmN2U0ZjI0NDcwZmEwNmI5ODBiYzIxZjEwOTVjMmE5NDI1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWEvMzAxZmJlNmZhZGE3ZGNiNzRmY2Q3YzIwMjY5YjVjNzQzNDU5YTcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWEvMzAxZmJlNmZhZGE3ZGNiNzRmY2Q3YzIwMjY5YjVjNzQzNDU5YTcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzlhLzMwMWZiZTZmYWRhN2RjYjc0ZmNkN2MyMDI2OWI1Yzc0MzQ1OWE3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWEvMzAxZmJlNmZhZGE3ZGNiNzRmY2Q3YzIwMjY5YjVjNzQzNDU5YTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWEvZjczMWZhMTE2ZDFlYjlhNmMwMTA5NTYyNDcyY2ZlZTZmNWE5NzkgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWEvZjczMWZhMTE2ZDFlYjlhNmMwMTA5NTYyNDcyY2ZlZTZmNWE5NzkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzlhL2Y3MzFmYTExNmQxZWI5YTZjMDEwOTU2MjQ3MmNmZWU2ZjVhOTc5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWEvZjczMWZhMTE2ZDFlYjlhNmMwMTA5NTYyNDcyY2ZlZTZmNWE5NzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWMvMGI2YzM0ZWYzNzlhNDJkODU4ZjAzZmVmMzg2MzBmNDc2YjkxMDIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWMvMGI2YzM0ZWYzNzlhNDJkODU4ZjAzZmVmMzg2MzBmNDc2YjkxMDIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzljLzBiNmMzNGVmMzc5YTQyZDg1OGYwM2ZlZjM4NjMwZjQ3NmI5MTAyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWMvMGI2YzM0ZWYzNzlhNDJkODU4ZjAzZmVmMzg2MzBmNDc2YjkxMDIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWUvN2Y0MzU5YzQ2OWYzMDliNjA1N2ZlYmY0YzZlODA3NDJjYmVkNWIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWUvN2Y0MzU5YzQ2OWYzMDliNjA1N2ZlYmY0YzZlODA3NDJjYmVkNWIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzllLzdmNDM1OWM0NjlmMzA5YjYwNTdmZWJmNGM2ZTgwNzQyY2JlZDViCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWUvN2Y0MzU5YzQ2OWYzMDliNjA1N2ZlYmY0YzZlODA3NDJjYmVkNWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWUvZmU3NzIzODAyZDQzMDUxNDJlZWUxNzdlMDE4ZmVlMTU3MmM0ZjQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWUvZmU3NzIzODAyZDQzMDUxNDJlZWUxNzdlMDE4ZmVlMTU3MmM0ZjQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzllL2ZlNzcyMzgwMmQ0MzA1MTQyZWVlMTc3ZTAxOGZlZTE1NzJjNGY0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWUvZmU3NzIzODAyZDQzMDUxNDJlZWUxNzdlMDE4ZmVlMTU3MmM0ZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWYvNzQzOTdhMzM5N2IzNTg1ZmFmMDllOTkyNmIxMTBkN2Y2NTQyNTQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWYvNzQzOTdhMzM5N2IzNTg1ZmFmMDllOTkyNmIxMTBkN2Y2NTQyNTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzlmLzc0Mzk3YTMzOTdiMzU4NWZhZjA5ZTk5MjZiMTEwZDdmNjU0MjU0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOWYvNzQzOTdhMzM5N2IzNTg1ZmFmMDllOTkyNmIxMTBkN2Y2NTQyNTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTAvMzFhMjhhZTcwZTMzYTY0MWNlNGI4YThmNjMxN2YxYWI3OWRlZTQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTAvMzFhMjhhZTcwZTMzYTY0MWNlNGI4YThmNjMxN2YxYWI3OWRlZTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2EwLzMxYTI4YWU3MGUzM2E2NDFjZTRiOGE4ZjYzMTdmMWFiNzlkZWU0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTAvMzFhMjhhZTcwZTMzYTY0MWNlNGI4YThmNjMxN2YxYWI3OWRlZTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTMvOWE2MjBkYWU1YmM4YjRlNzcxY2Q0ZDI1MWI3ZDA4MDQwMWEyMWUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTMvOWE2MjBkYWU1YmM4YjRlNzcxY2Q0ZDI1MWI3ZDA4MDQwMWEyMWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2EzLzlhNjIwZGFlNWJjOGI0ZTc3MWNkNGQyNTFiN2QwODA0MDFhMjFlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTMvOWE2MjBkYWU1YmM4YjRlNzcxY2Q0ZDI1MWI3ZDA4MDQwMWEyMWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTMvZmFiZWNlOWViODc0OGRhODEwZTFlMDgyNjZmZWY5YjcxMzZhZDQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTMvZmFiZWNlOWViODc0OGRhODEwZTFlMDgyNjZmZWY5YjcxMzZhZDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2EzL2ZhYmVjZTllYjg3NDhkYTgxMGUxZTA4MjY2ZmVmOWI3MTM2YWQ0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTMvZmFiZWNlOWViODc0OGRhODEwZTFlMDgyNjZmZWY5YjcxMzZhZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTQvMWIxYmI2ZDBiZTNjMjJmYjY1NDIzNGMzM2I0MjhlMTVjOGNjMjcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTQvMWIxYmI2ZDBiZTNjMjJmYjY1NDIzNGMzM2I0MjhlMTVjOGNjMjcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E0LzFiMWJiNmQwYmUzYzIyZmI2NTQyMzRjMzNiNDI4ZTE1YzhjYzI3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTQvMWIxYmI2ZDBiZTNjMjJmYjY1NDIzNGMzM2I0MjhlMTVjOGNjMjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTQvMzE1MGE3Mzg4NDljNTkzNzZjZjMwYmIyYTY4MzQ4YTgzYzhmNDggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTQvMzE1MGE3Mzg4NDljNTkzNzZjZjMwYmIyYTY4MzQ4YTgzYzhmNDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E0LzMxNTBhNzM4ODQ5YzU5Mzc2Y2YzMGJiMmE2ODM0OGE4M2M4ZjQ4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTQvMzE1MGE3Mzg4NDljNTkzNzZjZjMwYmIyYTY4MzQ4YTgzYzhmNDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTUvNTYzMzA0ZGRmNmNhYmEyNWNiNTAzMjNhMmVhNmY3ZGJmY2FkY2EgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTUvNTYzMzA0ZGRmNmNhYmEyNWNiNTAzMjNhMmVhNmY3ZGJmY2FkY2EKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E1LzU2MzMwNGRkZjZjYWJhMjVjYjUwMzIzYTJlYTZmN2RiZmNhZGNhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTUvNTYzMzA0ZGRmNmNhYmEyNWNiNTAzMjNhMmVhNmY3ZGJmY2FkY2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvMDhiMjUzYmQ1MDc0MTdlYzQyZDE0NjdhN2ZkMmQ3NTE5YzQ5NTYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvMDhiMjUzYmQ1MDc0MTdlYzQyZDE0NjdhN2ZkMmQ3NTE5YzQ5NTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E3LzA4YjI1M2JkNTA3NDE3ZWM0MmQxNDY3YTdmZDJkNzUxOWM0OTU2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvMDhiMjUzYmQ1MDc0MTdlYzQyZDE0NjdhN2ZkMmQ3NTE5YzQ5NTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvNjVmYjg3ZWIyZjdhMTkyMGI3M2IyZDVhMDU3ZjhmODQ3NmE0MmIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvNjVmYjg3ZWIyZjdhMTkyMGI3M2IyZDVhMDU3ZjhmODQ3NmE0MmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E3LzY1ZmI4N2ViMmY3YTE5MjBiNzNiMmQ1YTA1N2Y4Zjg0NzZhNDJiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvNjVmYjg3ZWIyZjdhMTkyMGI3M2IyZDVhMDU3ZjhmODQ3NmE0MmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvN2E1NmE0OWY4ZjNhZTI0MmUwMjcxN2YxOGViYmM2MGM1Y2M1NDMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvN2E1NmE0OWY4ZjNhZTI0MmUwMjcxN2YxOGViYmM2MGM1Y2M1NDMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E3LzdhNTZhNDlmOGYzYWUyNDJlMDI3MTdmMThlYmJjNjBjNWNjNTQzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvN2E1NmE0OWY4ZjNhZTI0MmUwMjcxN2YxOGViYmM2MGM1Y2M1NDMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvZGJmY2JmYzFhNjA3MDljYjgwYjVjYTI0NTM5MDA4NDU2NTMxZDAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvZGJmY2JmYzFhNjA3MDljYjgwYjVjYTI0NTM5MDA4NDU2NTMxZDAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E3L2RiZmNiZmMxYTYwNzA5Y2I4MGI1Y2EyNDUzOTAwODQ1NjUzMWQwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTcvZGJmY2JmYzFhNjA3MDljYjgwYjVjYTI0NTM5MDA4NDU2NTMxZDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTgvMDJlMDZmMTc4MmE5NjQ1Yjk4NTFiYzcyMDJjZWU3NGE4YTQ5NzIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTgvMDJlMDZmMTc4MmE5NjQ1Yjk4NTFiYzcyMDJjZWU3NGE4YTQ5NzIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E4LzAyZTA2ZjE3ODJhOTY0NWI5ODUxYmM3MjAyY2VlNzRhOGE0OTcyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTgvMDJlMDZmMTc4MmE5NjQ1Yjk4NTFiYzcyMDJjZWU3NGE4YTQ5NzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTgvODdkZDM5YWQzZWRkNjEwZmM5MDgzZGNiNjFlNDBhYjUwNjczZDEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTgvODdkZDM5YWQzZWRkNjEwZmM5MDgzZGNiNjFlNDBhYjUwNjczZDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E4Lzg3ZGQzOWFkM2VkZDYxMGZjOTA4M2RjYjYxZTQwYWI1MDY3M2QxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTgvODdkZDM5YWQzZWRkNjEwZmM5MDgzZGNiNjFlNDBhYjUwNjczZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTkvMGJjM2ZiNmYxNTE4MTk3MmEyOTU5YTkyMTQyOWVmYmQ4MWE0NzMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTkvMGJjM2ZiNmYxNTE4MTk3MmEyOTU5YTkyMTQyOWVmYmQ4MWE0NzMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2E5LzBiYzNmYjZmMTUxODE5NzJhMjk1OWE5MjE0MjllZmJkODFhNDczCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTkvMGJjM2ZiNmYxNTE4MTk3MmEyOTU5YTkyMTQyOWVmYmQ4MWE0NzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvNDBhZjNjYjhhM2VkMmUyODQzZTk2ZDlhYTc4NzEzMzZiOTQ1NzMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvNDBhZjNjYjhhM2VkMmUyODQzZTk2ZDlhYTc4NzEzMzZiOTQ1NzMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2FiLzQwYWYzY2I4YTNlZDJlMjg0M2U5NmQ5YWE3ODcxMzM2Yjk0NTczCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvNDBhZjNjYjhhM2VkMmUyODQzZTk2ZDlhYTc4NzEzMzZiOTQ1NzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvNmM0NGEyZTg0NDkyYWQ0YjQxYmI2YmFjODczNTNlOWQwMmFjOGIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvNmM0NGEyZTg0NDkyYWQ0YjQxYmI2YmFjODczNTNlOWQwMmFjOGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2FiLzZjNDRhMmU4NDQ5MmFkNGI0MWJiNmJhYzg3MzUzZTlkMDJhYzhiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvNmM0NGEyZTg0NDkyYWQ0YjQxYmI2YmFjODczNTNlOWQwMmFjOGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvOTI5MzkxYWM0MjU3MmY5MjExMGYzZGVlYjRmMDg0NGE5NTFlMjIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvOTI5MzkxYWM0MjU3MmY5MjExMGYzZGVlYjRmMDg0NGE5NTFlMjIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2FiLzkyOTM5MWFjNDI1NzJmOTIxMTBmM2RlZWI0ZjA4NDRhOTUxZTIyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWIvOTI5MzkxYWM0MjU3MmY5MjExMGYzZGVlYjRmMDg0NGE5NTFlMjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWMvNDA0NWY5NjUxMTllNjk5OGY0MzQwZWQwZjQxMWRlY2ZiM2VjMDUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWMvNDA0NWY5NjUxMTllNjk5OGY0MzQwZWQwZjQxMWRlY2ZiM2VjMDUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2FjLzQwNDVmOTY1MTE5ZTY5OThmNDM0MGVkMGY0MTFkZWNmYjNlYzA1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWMvNDA0NWY5NjUxMTllNjk5OGY0MzQwZWQwZjQxMWRlY2ZiM2VjMDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWQvYTE0NDkyNDk4MTM2NzcxZjY5ZGQ0NTE4NjZjYWJjYjBlOWVmOWEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWQvYTE0NDkyNDk4MTM2NzcxZjY5ZGQ0NTE4NjZjYWJjYjBlOWVmOWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2FkL2ExNDQ5MjQ5ODEzNjc3MWY2OWRkNDUxODY2Y2FiY2IwZTllZjlhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWQvYTE0NDkyNDk4MTM2NzcxZjY5ZGQ0NTE4NjZjYWJjYjBlOWVmOWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWQvYTU1YTQ1ZDE0NTI3ZGMzZGZjNzE0ZWExYzY1ZDJlMWU2ZmJlODcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWQvYTU1YTQ1ZDE0NTI3ZGMzZGZjNzE0ZWExYzY1ZDJlMWU2ZmJlODcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2FkL2E1NWE0NWQxNDUyN2RjM2RmYzcxNGVhMWM2NWQyZTFlNmZiZTg3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYWQvYTU1YTQ1ZDE0NTI3ZGMzZGZjNzE0ZWExYzY1ZDJlMWU2ZmJlODcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYjIvZDM5OWFlMTUyMjRlMWQ1ODA2NmUzYzhkZjcwY2UzN2RlN2E2NTYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYjIvZDM5OWFlMTUyMjRlMWQ1ODA2NmUzYzhkZjcwY2UzN2RlN2E2NTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2IyL2QzOTlhZTE1MjI0ZTFkNTgwNjZlM2M4ZGY3MGNlMzdkZTdhNjU2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYjIvZDM5OWFlMTUyMjRlMWQ1ODA2NmUzYzhkZjcwY2UzN2RlN2E2NTYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2I0LzI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2I0LzI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNC8yNzEyY2ZlOTlhMWE1MDBiMmE1MWZlOTg0ZTBiOGE3NzAyYmExMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2I0LzI3MTJjZmU5OWExYTUwMGIyYTUxZmU5ODRlMGI4YTc3MDJiYTExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2I2LzlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2I2LzlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNi85ZmU4MzdlNGNlY2ZkNGM5YTQwY2RjYTdjMTM4NDY4Njg3ZGYwNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2I2LzlmZTgzN2U0Y2VjZmQ0YzlhNDBjZGNhN2MxMzg0Njg2ODdkZjA3CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNi9mNjEwYWVmNTNiZDM0M2U2Yzk2MjI3ZGU4NzRjNjZmMDBlZThlOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNi9mNjEwYWVmNTNiZDM0M2U2Yzk2MjI3ZGU4NzRjNjZmMDBlZThlOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYjYvZjYxMGFlZjUzYmQzNDNlNmM5NjIyN2RlODc0YzY2ZjAwZWU4ZTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNi9mNjEwYWVmNTNiZDM0M2U2Yzk2MjI3ZGU4NzRjNjZmMDBlZThlOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNy9hMjU3NmY5ZmMyMDAyNGFjOWVmMTdjYjEzNGFjYmQxYWM3MzEyNyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNy9hMjU3NmY5ZmMyMDAyNGFjOWVmMTdjYjEzNGFjYmQxYWM3MzEyNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYjcvYTI1NzZmOWZjMjAwMjRhYzllZjE3Y2IxMzRhY2JkMWFjNzMxMjcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iNy9hMjU3NmY5ZmMyMDAyNGFjOWVmMTdjYjEzNGFjYmQxYWM3MzEyNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iOC9hM2E4MDZkMzk1MGU4YzBhMDNhMzRmMjM0YTkyZWZmMGUyYzY4ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iOC9hM2E4MDZkMzk1MGU4YzBhMDNhMzRmMjM0YTkyZWZmMGUyYzY4ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYjgvYTNhODA2ZDM5NTBlOGMwYTAzYTM0ZjIzNGE5MmVmZjBlMmM2OGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iOC9hM2E4MDZkMzk1MGU4YzBhMDNhMzRmMjM0YTkyZWZmMGUyYzY4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYS9jYWM5YjM0OTM1MDlhYTE1ZTE3MzBlMTU0NWZjMDkxOWQxZGFlMCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYS9jYWM5YjM0OTM1MDlhYTE1ZTE3MzBlMTU0NWZjMDkxOWQxZGFlMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmEvY2FjOWIzNDkzNTA5YWExNWUxNzMwZTE1NDVmYzA5MTlkMWRhZTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYS9jYWM5YjM0OTM1MDlhYTE1ZTE3MzBlMTU0NWZjMDkxOWQxZGFlMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYy83NDQ3MDVlMWQ4YTAxOTk5M2NmODhmNjJiYzQwMjBmMWI4MDkxOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYy83NDQ3MDVlMWQ4YTAxOTk5M2NmODhmNjJiYzQwMjBmMWI4MDkxOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmMvNzQ0NzA1ZTFkOGEwMTk5OTNjZjg4ZjYyYmM0MDIwZjFiODA5MTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYy83NDQ3MDVlMWQ4YTAxOTk5M2NmODhmNjJiYzQwMjBmMWI4MDkxOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYy85NWM3NWQ1OTM4NjE0N2QxZTc5YTg3YzMzMDY4ZDhkYmZkNzFmMiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYy85NWM3NWQ1OTM4NjE0N2QxZTc5YTg3YzMzMDY4ZDhkYmZkNzFmMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmMvOTVjNzVkNTkzODYxNDdkMWU3OWE4N2MzMzA2OGQ4ZGJmZDcxZjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iYy85NWM3NWQ1OTM4NjE0N2QxZTc5YTg3YzMzMDY4ZDhkYmZkNzFmMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC81OTMyODVmYzdmZTRjYTE4Y2NkYmFiZjAyN2Y1ZDY4OTEwMTQ1MiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC81OTMyODVmYzdmZTRjYTE4Y2NkYmFiZjAyN2Y1ZDY4OTEwMTQ1MgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmQvNTkzMjg1ZmM3ZmU0Y2ExOGNjZGJhYmYwMjdmNWQ2ODkxMDE0NTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC81OTMyODVmYzdmZTRjYTE4Y2NkYmFiZjAyN2Y1ZDY4OTEwMTQ1MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC84NjdmYmFlMmZhYTgwYjkyMGIwMDJiODBiMWM5MWJjYWRlNzc4NCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC84NjdmYmFlMmZhYTgwYjkyMGIwMDJiODBiMWM5MWJjYWRlNzc4NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmQvODY3ZmJhZTJmYWE4MGI5MjBiMDAyYjgwYjFjOTFiY2FkZTc3ODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC84NjdmYmFlMmZhYTgwYjkyMGIwMDJiODBiMWM5MWJjYWRlNzc4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC85Y2I0Y2QwYTc3MGNiOWFkY2I1ZmNlMjEyMTQyZWY0MGVhMWMzNSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC85Y2I0Y2QwYTc3MGNiOWFkY2I1ZmNlMjEyMTQyZWY0MGVhMWMzNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmQvOWNiNGNkMGE3NzBjYjlhZGNiNWZjZTIxMjE0MmVmNDBlYTFjMzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZC85Y2I0Y2QwYTc3MGNiOWFkY2I1ZmNlMjEyMTQyZWY0MGVhMWMzNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZS9mNmUzN2IzZWU2MzJiYTc0MTU5MTY4ODM2ZjM4MmZlZDIxZDc3ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZS9mNmUzN2IzZWU2MzJiYTc0MTU5MTY4ODM2ZjM4MmZlZDIxZDc3ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmUvZjZlMzdiM2VlNjMyYmE3NDE1OTE2ODgzNmYzODJmZWQyMWQ3N2QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9iZS9mNmUzN2IzZWU2MzJiYTc0MTU5MTY4ODM2ZjM4MmZlZDIxZDc3ZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzAvNmE5YmU1ODRhYzQ5YWEwMmM1NTUxMzEyZDllMjk4MmM5MWRmMTAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzAvNmE5YmU1ODRhYzQ5YWEwMmM1NTUxMzEyZDllMjk4MmM5MWRmMTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2MwLzZhOWJlNTg0YWM0OWFhMDJjNTU1MTMxMmQ5ZTI5ODJjOTFkZjEwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzAvNmE5YmU1ODRhYzQ5YWEwMmM1NTUxMzEyZDllMjk4MmM5MWRmMTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzEvYjE3OTgxZGIwODQwMTA5YTgyMGRhZTg2NzRlZTI5Njg0MTM0ZmYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzEvYjE3OTgxZGIwODQwMTA5YTgyMGRhZTg2NzRlZTI5Njg0MTM0ZmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2MxL2IxNzk4MWRiMDg0MDEwOWE4MjBkYWU4Njc0ZWUyOTY4NDEzNGZmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzEvYjE3OTgxZGIwODQwMTA5YTgyMGRhZTg2NzRlZTI5Njg0MTM0ZmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzEvYjZhNTFiYmI4N2MyZjgyYjE2MTQxMmMzZDIwYjU5ZmM2OWIwOTAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzEvYjZhNTFiYmI4N2MyZjgyYjE2MTQxMmMzZDIwYjU5ZmM2OWIwOTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2MxL2I2YTUxYmJiODdjMmY4MmIxNjE0MTJjM2QyMGI1OWZjNjliMDkwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzEvYjZhNTFiYmI4N2MyZjgyYjE2MTQxMmMzZDIwYjU5ZmM2OWIwOTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzMvNWRlZTliY2MwZTk4OWYzYjBjNDBmNjgzNzJhOWE1MWI2YzRlNmEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzMvNWRlZTliY2MwZTk4OWYzYjBjNDBmNjgzNzJhOWE1MWI2YzRlNmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2MzLzVkZWU5YmNjMGU5ODlmM2IwYzQwZjY4MzcyYTlhNTFiNmM0ZTZhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzMvNWRlZTliY2MwZTk4OWYzYjBjNDBmNjgzNzJhOWE1MWI2YzRlNmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzMvZDAyZWVlZjc1MTgzZGY3NTg0ZDhkMTNhYzAzMDUzOTEwYzEzMDEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzMvZDAyZWVlZjc1MTgzZGY3NTg0ZDhkMTNhYzAzMDUzOTEwYzEzMDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2MzL2QwMmVlZWY3NTE4M2RmNzU4NGQ4ZDEzYWMwMzA1MzkxMGMxMzAxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzMvZDAyZWVlZjc1MTgzZGY3NTg0ZDhkMTNhYzAzMDUzOTEwYzEzMDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzQvZWZlMzFlOWRlY2NjYzhiMmI0ZDNkZjlhYWMyY2RmZTI5OTU2MTggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzQvZWZlMzFlOWRlY2NjYzhiMmI0ZDNkZjlhYWMyY2RmZTI5OTU2MTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M0L2VmZTMxZTlkZWNjY2M4YjJiNGQzZGY5YWFjMmNkZmUyOTk1NjE4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzQvZWZlMzFlOWRlY2NjYzhiMmI0ZDNkZjlhYWMyY2RmZTI5OTU2MTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzUvMGQwZjFjYjYwYjhiMGZlMTYxNWFkMjBhY2U1NTdlOWQ2OGQ3YmQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzUvMGQwZjFjYjYwYjhiMGZlMTYxNWFkMjBhY2U1NTdlOWQ2OGQ3YmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M1LzBkMGYxY2I2MGI4YjBmZTE2MTVhZDIwYWNlNTU3ZTlkNjhkN2JkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzUvMGQwZjFjYjYwYjhiMGZlMTYxNWFkMjBhY2U1NTdlOWQ2OGQ3YmQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M1L2JiZTU1MGI5ZjA5NDQ0YmRkZGQzZWNmM2Q5N2MwYjQyYWE3ODZjIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M1L2JiZTU1MGI5ZjA5NDQ0YmRkZGQzZWNmM2Q5N2MwYjQyYWE3ODZjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jNS9iYmU1NTBiOWYwOTQ0NGJkZGRkM2VjZjNkOTdjMGI0MmFhNzg2YwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M1L2JiZTU1MGI5ZjA5NDQ0YmRkZGQzZWNmM2Q5N2MwYjQyYWE3ODZjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M2LzA3ZmMzMDg4M2UzMzVkZWYyOGNkNjg2YjUxZjZjZmEwMmIwNmVjIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M2LzA3ZmMzMDg4M2UzMzVkZWYyOGNkNjg2YjUxZjZjZmEwMmIwNmVjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jNi8wN2ZjMzA4ODNlMzM1ZGVmMjhjZDY4NmI1MWY2Y2ZhMDJiMDZlYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M2LzA3ZmMzMDg4M2UzMzVkZWYyOGNkNjg2YjUxZjZjZmEwMmIwNmVjCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jNi85MmVjZjYyMDA3YzBhYzlmYjI2ZTJhYTg4NGRlMjkzM2RlMTVlZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jNi85MmVjZjYyMDA3YzBhYzlmYjI2ZTJhYTg4NGRlMjkzM2RlMTVlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzYvOTJlY2Y2MjAwN2MwYWM5ZmIyNmUyYWE4ODRkZTI5MzNkZTE1ZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jNi85MmVjZjYyMDA3YzBhYzlmYjI2ZTJhYTg4NGRlMjkzM2RlMTVlZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jOC9mMDZmMmUzYmIyOTY0MTc0Njc3ZTkxZjBhYmVhZDBlNDNjOWU1ZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jOC9mMDZmMmUzYmIyOTY0MTc0Njc3ZTkxZjBhYmVhZDBlNDNjOWU1ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzgvZjA2ZjJlM2JiMjk2NDE3NDY3N2U5MWYwYWJlYWQwZTQzYzllNWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jOC9mMDZmMmUzYmIyOTY0MTc0Njc3ZTkxZjBhYmVhZDBlNDNjOWU1ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jOS8xNzRjZWY1NDllYzk0ZWNiYzQzZWYwM2NkYzc3NWI0OTUwYmVjYiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jOS8xNzRjZWY1NDllYzk0ZWNiYzQzZWYwM2NkYzc3NWI0OTUwYmVjYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzkvMTc0Y2VmNTQ5ZWM5NGVjYmM0M2VmMDNjZGM3NzViNDk1MGJlY2IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9jOS8xNzRjZWY1NDllYzk0ZWNiYzQzZWYwM2NkYzc3NWI0OTUwYmVjYgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzkvNGIyN2U0MTA2NGM1MjExMjA2MjdlMDdlMjAzNWNjYTFkMjRmZmEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzkvNGIyN2U0MTA2NGM1MjExMjA2MjdlMDdlMjAzNWNjYTFkMjRmZmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M5LzRiMjdlNDEwNjRjNTIxMTIwNjI3ZTA3ZTIwMzVjY2ExZDI0ZmZhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzkvNGIyN2U0MTA2NGM1MjExMjA2MjdlMDdlMjAzNWNjYTFkMjRmZmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2EvYjJjZjIzOTk4YjQwZjFhZjJkOWQ5YTc1NmRjOWUyODVhOGRmNGIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2EvYjJjZjIzOTk4YjQwZjFhZjJkOWQ5YTc1NmRjOWUyODVhOGRmNGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NhL2IyY2YyMzk5OGI0MGYxYWYyZDlkOWE3NTZkYzllMjg1YThkZjRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2EvYjJjZjIzOTk4YjQwZjFhZjJkOWQ5YTc1NmRjOWUyODVhOGRmNGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2IvNDkxNzgwZDgyZTQ2ZGM4OGEwNjViOTY1YWIzMDdhMDM4ZjJiYzIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2IvNDkxNzgwZDgyZTQ2ZGM4OGEwNjViOTY1YWIzMDdhMDM4ZjJiYzIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NiLzQ5MTc4MGQ4MmU0NmRjODhhMDY1Yjk2NWFiMzA3YTAzOGYyYmMyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2IvNDkxNzgwZDgyZTQ2ZGM4OGEwNjViOTY1YWIzMDdhMDM4ZjJiYzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2IvNjY5M2E3ODg3MTViODI0NDBhNTRlMGVhY2QxOWJhOWY2ZWM1NTkgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2IvNjY5M2E3ODg3MTViODI0NDBhNTRlMGVhY2QxOWJhOWY2ZWM1NTkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NiLzY2OTNhNzg4NzE1YjgyNDQwYTU0ZTBlYWNkMTliYTlmNmVjNTU5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2IvNjY5M2E3ODg3MTViODI0NDBhNTRlMGVhY2QxOWJhOWY2ZWM1NTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2MvM2UzMDA5MTM0Y2I4ODAxNDEyOWZjODg1OGQxMTAxMzU5ZTVlMmYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2MvM2UzMDA5MTM0Y2I4ODAxNDEyOWZjODg1OGQxMTAxMzU5ZTVlMmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NjLzNlMzAwOTEzNGNiODgwMTQxMjlmYzg4NThkMTEwMTM1OWU1ZTJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2MvM2UzMDA5MTM0Y2I4ODAxNDEyOWZjODg1OGQxMTAxMzU5ZTVlMmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2UvODg2MGQ0OWUzYmVhNmZkNzQ1ODc0YTAxYjdjM2U0NmRhOGNiYzMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2UvODg2MGQ0OWUzYmVhNmZkNzQ1ODc0YTAxYjdjM2U0NmRhOGNiYzMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NlLzg4NjBkNDllM2JlYTZmZDc0NTg3NGEwMWI3YzNlNDZkYThjYmMzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2UvODg2MGQ0OWUzYmVhNmZkNzQ1ODc0YTAxYjdjM2U0NmRhOGNiYzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2UvZTY1NmMzOTJhZDA1NTdiM2FhZTBmYjQxMTQ3NWMyMDZlMjkyNmYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2UvZTY1NmMzOTJhZDA1NTdiM2FhZTBmYjQxMTQ3NWMyMDZlMjkyNmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NlL2U2NTZjMzkyYWQwNTU3YjNhYWUwZmI0MTE0NzVjMjA2ZTI5MjZmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2UvZTY1NmMzOTJhZDA1NTdiM2FhZTBmYjQxMTQ3NWMyMDZlMjkyNmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2YvOGM1Y2M4YTg1YTFmZjVhNGJhNTFlMGJjN2NmNTY2NTY2OTkyNGQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2YvOGM1Y2M4YTg1YTFmZjVhNGJhNTFlMGJjN2NmNTY2NTY2OTkyNGQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NmLzhjNWNjOGE4NWExZmY1YTRiYTUxZTBiYzdjZjU2NjU2Njk5MjRkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2YvOGM1Y2M4YTg1YTFmZjVhNGJhNTFlMGJjN2NmNTY2NTY2OTkyNGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDAvN2VjMTkwYzMwNmVjNjkwYmFjMzQ5ZTg3ZDAxYzQzNThlNDliYjIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDAvN2VjMTkwYzMwNmVjNjkwYmFjMzQ5ZTg3ZDAxYzQzNThlNDliYjIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2QwLzdlYzE5MGMzMDZlYzY5MGJhYzM0OWU4N2QwMWM0MzU4ZTQ5YmIyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDAvN2VjMTkwYzMwNmVjNjkwYmFjMzQ5ZTg3ZDAxYzQzNThlNDliYjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDAvZDQ1OTRlMTZmMmUxOTEwN2UzZmE3ZWE2M2U3YWFhZmYzMDVmZmIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDAvZDQ1OTRlMTZmMmUxOTEwN2UzZmE3ZWE2M2U3YWFhZmYzMDVmZmIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2QwL2Q0NTk0ZTE2ZjJlMTkxMDdlM2ZhN2VhNjNlN2FhYWZmMzA1ZmZiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDAvZDQ1OTRlMTZmMmUxOTEwN2UzZmE3ZWE2M2U3YWFhZmYzMDVmZmIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDIvZjg2MzdmMmVhYjI1MDdhMWUxM2NiYzlkZjQ3MjllYzM4NjYyN2UgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDIvZjg2MzdmMmVhYjI1MDdhMWUxM2NiYzlkZjQ3MjllYzM4NjYyN2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2QyL2Y4NjM3ZjJlYWIyNTA3YTFlMTNjYmM5ZGY0NzI5ZWMzODY2MjdlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDIvZjg2MzdmMmVhYjI1MDdhMWUxM2NiYzlkZjQ3MjllYzM4NjYyN2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2QzLzcxOWE1YWU4ZTRkOTIyNzZiNTMxM2NlOTc2ZjZlZTVhZjJiNDM2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvNzE5YTVhZThlNGQ5MjI3NmI1MzEzY2U5NzZmNmVlNWFmMmI0MzYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvN2FhM2JiZmUxYzBjNDliOTA5NzgxMjUxYjk1NmRiYWJlODVmOTYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvN2FhM2JiZmUxYzBjNDliOTA5NzgxMjUxYjk1NmRiYWJlODVmOTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2QzLzdhYTNiYmZlMWMwYzQ5YjkwOTc4MTI1MWI5NTZkYmFiZTg1Zjk2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvN2FhM2JiZmUxYzBjNDliOTA5NzgxMjUxYjk1NmRiYWJlODVmOTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvN2FkNzJhMjA1MjY4NWZjNjIwMWMyYWY5MDEwM2FkNDJkMjA3OWIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvN2FkNzJhMjA1MjY4NWZjNjIwMWMyYWY5MDEwM2FkNDJkMjA3OWIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2QzLzdhZDcyYTIwNTI2ODVmYzYyMDFjMmFmOTAxMDNhZDQyZDIwNzliCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDMvN2FkNzJhMjA1MjY4NWZjNjIwMWMyYWY5MDEwM2FkNDJkMjA3OWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDQvMjA3Zjc3MjQzNTAwYmVjMzM1YWI0NzdmOTIyN2ZjZGIxZTI3MWEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDQvMjA3Zjc3MjQzNTAwYmVjMzM1YWI0NzdmOTIyN2ZjZGIxZTI3MWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q0LzIwN2Y3NzI0MzUwMGJlYzMzNWFiNDc3ZjkyMjdmY2RiMWUyNzFhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDQvMjA3Zjc3MjQzNTAwYmVjMzM1YWI0NzdmOTIyN2ZjZGIxZTI3MWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDQvMjdlMGIyZTEzODUwMWEzZDE1Y2MzNzYwNzdhMzYzMWUxNWJkNDYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDQvMjdlMGIyZTEzODUwMWEzZDE1Y2MzNzYwNzdhMzYzMWUxNWJkNDYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q0LzI3ZTBiMmUxMzg1MDFhM2QxNWNjMzc2MDc3YTM2MzFlMTViZDQ2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDQvMjdlMGIyZTEzODUwMWEzZDE1Y2MzNzYwNzdhMzYzMWUxNWJkNDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvMDkzNzg3ZWYzMDJiOTQxYjZhYWIwODFiOTlmYjQ4ODAwMzhiZDggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvMDkzNzg3ZWYzMDJiOTQxYjZhYWIwODFiOTlmYjQ4ODAwMzhiZDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q1LzA5Mzc4N2VmMzAyYjk0MWI2YWFiMDgxYjk5ZmI0ODgwMDM4YmQ4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvMDkzNzg3ZWYzMDJiOTQxYjZhYWIwODFiOTlmYjQ4ODAwMzhiZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvYTYxYjBiNDk5MmE0ZjBjYWE4ODdmYTA4YjUyNDMxZTcyN2JiNmYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvYTYxYjBiNDk5MmE0ZjBjYWE4ODdmYTA4YjUyNDMxZTcyN2JiNmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q1L2E2MWIwYjQ5OTJhNGYwY2FhODg3ZmEwOGI1MjQzMWU3MjdiYjZmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvYTYxYjBiNDk5MmE0ZjBjYWE4ODdmYTA4YjUyNDMxZTcyN2JiNmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvYjZmYzk2NWM5MjZhMWJmYzllZTQ1NjA0MmI5NDA4OGI1YzVkMjEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvYjZmYzk2NWM5MjZhMWJmYzllZTQ1NjA0MmI5NDA4OGI1YzVkMjEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q1L2I2ZmM5NjVjOTI2YTFiZmM5ZWU0NTYwNDJiOTQwODhiNWM1ZDIxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvYjZmYzk2NWM5MjZhMWJmYzllZTQ1NjA0MmI5NDA4OGI1YzVkMjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvZWMxMTUyZmUyNWU5ZmVjMDAxODllYjAwYjNkYjcxZGIyNGMyMTggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvZWMxMTUyZmUyNWU5ZmVjMDAxODllYjAwYjNkYjcxZGIyNGMyMTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q1L2VjMTE1MmZlMjVlOWZlYzAwMTg5ZWIwMGIzZGI3MWRiMjRjMjE4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDUvZWMxMTUyZmUyNWU5ZmVjMDAxODllYjAwYjNkYjcxZGIyNGMyMTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvNDJiOTc3MGM2NmJiYTk0YTA4ZGYwOWI1ZWZiMDk1MDAxZjc2ZDcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvNDJiOTc3MGM2NmJiYTk0YTA4ZGYwOWI1ZWZiMDk1MDAxZjc2ZDcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q2LzQyYjk3NzBjNjZiYmE5NGEwOGRmMDliNWVmYjA5NTAwMWY3NmQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvNDJiOTc3MGM2NmJiYTk0YTA4ZGYwOWI1ZWZiMDk1MDAxZjc2ZDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvNDYyZmEzZjUyOTI4NTdkYjU5OWM1NGFlYTJiZjkxNjE2MjMwYzUgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvNDYyZmEzZjUyOTI4NTdkYjU5OWM1NGFlYTJiZjkxNjE2MjMwYzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q2LzQ2MmZhM2Y1MjkyODU3ZGI1OTljNTRhZWEyYmY5MTYxNjIzMGM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvNDYyZmEzZjUyOTI4NTdkYjU5OWM1NGFlYTJiZjkxNjE2MjMwYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvY2Y2Yzc3NDFiMzMxNjgyNmFmMTMxNDA0MjU1MGM5N2RlZDFkNTAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvY2Y2Yzc3NDFiMzMxNjgyNmFmMTMxNDA0MjU1MGM5N2RlZDFkNTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q2L2NmNmM3NzQxYjMzMTY4MjZhZjEzMTQwNDI1NTBjOTdkZWQxZDUwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDYvY2Y2Yzc3NDFiMzMxNjgyNmFmMTMxNDA0MjU1MGM5N2RlZDFkNTAKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q4Lzc0NjcxZWY1YjIwMTg0ODM2Y2I5ODNiYjI3M2U1MjgwMzg0ZDBiIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q4Lzc0NjcxZWY1YjIwMTg0ODM2Y2I5ODNiYjI3M2U1MjgwMzg0ZDBiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kOC83NDY3MWVmNWIyMDE4NDgzNmNiOTgzYmIyNzNlNTI4MDM4NGQwYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q4Lzc0NjcxZWY1YjIwMTg0ODM2Y2I5ODNiYjI3M2U1MjgwMzg0ZDBiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q4L2ZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q4L2ZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kOC9mYTc3YjY4MzMwODJjMWVhMzZiNzgyOGE1ODJkNGM0Mzg4MjQ1MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Q4L2ZhNzdiNjgzMzA4MmMxZWEzNmI3ODI4YTU4MmQ0YzQzODgyNDUwCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kOS82Mzk3OWMyMzdkMDhiNmJhMzkwNjJlZTdiZjY0YzdkMzRhMjdmOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kOS82Mzk3OWMyMzdkMDhiNmJhMzkwNjJlZTdiZjY0YzdkMzRhMjdmOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZDkvNjM5NzljMjM3ZDA4YjZiYTM5MDYyZWU3YmY2NGM3ZDM0YTI3ZjgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kOS82Mzk3OWMyMzdkMDhiNmJhMzkwNjJlZTdiZjY0YzdkMzRhMjdmOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kYS8xNzgyMDgxNDVlZjU4NWExYmQ1Y2E1ZjRjOTc4NWQ3MzhkZjJjZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kYS8xNzgyMDgxNDVlZjU4NWExYmQ1Y2E1ZjRjOTc4NWQ3MzhkZjJjZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZGEvMTc4MjA4MTQ1ZWY1ODVhMWJkNWNhNWY0Yzk3ODVkNzM4ZGYyY2YKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kYS8xNzgyMDgxNDVlZjU4NWExYmQ1Y2E1ZjRjOTc4NWQ3MzhkZjJjZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kYi82MjYxYTdjNjVjN2ZkNjc4NTIwYzliYjZmMmM0NzU4MmFiOWVkNSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kYi82MjYxYTdjNjVjN2ZkNjc4NTIwYzliYjZmMmM0NzU4MmFiOWVkNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZGIvNjI2MWE3YzY1YzdmZDY3ODUyMGM5YmI2ZjJjNDc1ODJhYjllZDUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kYi82MjYxYTdjNjVjN2ZkNjc4NTIwYzliYjZmMmM0NzU4MmFiOWVkNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZC85YTU3MGMzNDAwZTZlMDdiYzRkNzY1MWQ2ZTIwYjA4OTI2YjNkOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZC85YTU3MGMzNDAwZTZlMDdiYzRkNzY1MWQ2ZTIwYjA4OTI2YjNkOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZGQvOWE1NzBjMzQwMGU2ZTA3YmM0ZDc2NTFkNmUyMGIwODkyNmIzZDkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZC85YTU3MGMzNDAwZTZlMDdiYzRkNzY1MWQ2ZTIwYjA4OTI2YjNkOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZS84NzJlZTM2MThiODk0OTkyZTlkMWUxOGJhMmViZTI1NmExMTJmOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZS84NzJlZTM2MThiODk0OTkyZTlkMWUxOGJhMmViZTI1NmExMTJmOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZGUvODcyZWUzNjE4Yjg5NDk5MmU5ZDFlMThiYTJlYmUyNTZhMTEyZjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZS84NzJlZTM2MThiODk0OTkyZTlkMWUxOGJhMmViZTI1NmExMTJmOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZi9lM2YyMmJhYTFmNmZjZTU0NDc5MDFjMzA4NmJhZTM2OGRlNmJkZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZi9lM2YyMmJhYTFmNmZjZTU0NDc5MDFjMzA4NmJhZTM2OGRlNmJkZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZGYvZTNmMjJiYWExZjZmY2U1NDQ3OTAxYzMwODZiYWUzNjhkZTZiZGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9kZi9lM2YyMmJhYTFmNmZjZTU0NDc5MDFjMzA4NmJhZTM2OGRlNmJkZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMC82N2Y5MzYxMTQwZjE5MzkxNDcyZGY4YTgyZDY2MTA4MTNjNzNiNyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMC82N2Y5MzYxMTQwZjE5MzkxNDcyZGY4YTgyZDY2MTA4MTNjNzNiNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTAvNjdmOTM2MTE0MGYxOTM5MTQ3MmRmOGE4MmQ2NjEwODEzYzczYjcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMC82N2Y5MzYxMTQwZjE5MzkxNDcyZGY4YTgyZDY2MTA4MTNjNzNiNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMS8xMjliM2NmYjU4OThlMGZiZDYwNmUwY2I4MGIyNzU1ZTUwZDE2MSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMS8xMjliM2NmYjU4OThlMGZiZDYwNmUwY2I4MGIyNzU1ZTUwZDE2MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTEvMTI5YjNjZmI1ODk4ZTBmYmQ2MDZlMGNiODBiMjc1NWU1MGQxNjEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMS8xMjliM2NmYjU4OThlMGZiZDYwNmUwY2I4MGIyNzU1ZTUwZDE2MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMS83YWNlMTQ5MjY0OGM5ZGM1NzAxYmFkNWM0N2FmOWQxYjYwYzRlOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMS83YWNlMTQ5MjY0OGM5ZGM1NzAxYmFkNWM0N2FmOWQxYjYwYzRlOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTEvN2FjZTE0OTI2NDhjOWRjNTcwMWJhZDVjNDdhZjlkMWI2MGM0ZTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMS83YWNlMTQ5MjY0OGM5ZGM1NzAxYmFkNWM0N2FmOWQxYjYwYzRlOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMi9jNmFiYmQ1NWZlZDVhYzcxYTVmMjc1MWUyOWI0YTM0NzI2YTU5NSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMi9jNmFiYmQ1NWZlZDVhYzcxYTVmMjc1MWUyOWI0YTM0NzI2YTU5NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTIvYzZhYmJkNTVmZWQ1YWM3MWE1ZjI3NTFlMjliNGEzNDcyNmE1OTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMi9jNmFiYmQ1NWZlZDVhYzcxYTVmMjc1MWUyOWI0YTM0NzI2YTU5NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMy8xZTdhZDNlZDI5OGYyNGUzODNjNDk1MGY0NjcxOTkzZWMwNzhlNCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMy8xZTdhZDNlZDI5OGYyNGUzODNjNDk1MGY0NjcxOTkzZWMwNzhlNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTMvMWU3YWQzZWQyOThmMjRlMzgzYzQ5NTBmNDY3MTk5M2VjMDc4ZTQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMy8xZTdhZDNlZDI5OGYyNGUzODNjNDk1MGY0NjcxOTkzZWMwNzhlNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMy83NmZiZGQwNmViZjAyMWM5MjcyNGRhOWYyNmY0NDIxMjczNGUzZSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMy83NmZiZGQwNmViZjAyMWM5MjcyNGRhOWYyNmY0NDIxMjczNGUzZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTMvNzZmYmRkMDZlYmYwMjFjOTI3MjRkYTlmMjZmNDQyMTI3MzRlM2UKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lMy83NmZiZGQwNmViZjAyMWM5MjcyNGRhOWYyNmY0NDIxMjczNGUzZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTQvOWY5MTdiNDQ4ZDEzNDBiMzFkNzZlNTRiYTM4ODI2OGZkNGM5MjIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTQvOWY5MTdiNDQ4ZDEzNDBiMzFkNzZlNTRiYTM4ODI2OGZkNGM5MjIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U0LzlmOTE3YjQ0OGQxMzQwYjMxZDc2ZTU0YmEzODgyNjhmZDRjOTIyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTQvOWY5MTdiNDQ4ZDEzNDBiMzFkNzZlNTRiYTM4ODI2OGZkNGM5MjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTQvZjYxOGEyYzNlZDA2NjkzMDg3MzU3MjdkZjVlYmYyNDQ3ZjAyMmYgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTQvZjYxOGEyYzNlZDA2NjkzMDg3MzU3MjdkZjVlYmYyNDQ3ZjAyMmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U0L2Y2MThhMmMzZWQwNjY5MzA4NzM1NzI3ZGY1ZWJmMjQ0N2YwMjJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTQvZjYxOGEyYzNlZDA2NjkzMDg3MzU3MjdkZjVlYmYyNDQ3ZjAyMmYKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U2LzVhOWJiMmFmOWY0YzJkMWMzNzVkZDBmOGY4YTQ2Y2Y5YzY4ODEyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U2LzVhOWJiMmFmOWY0YzJkMWMzNzVkZDBmOGY4YTQ2Y2Y5YzY4ODEyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lNi81YTliYjJhZjlmNGMyZDFjMzc1ZGQwZjhmOGE0NmNmOWM2ODgxMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U2LzVhOWJiMmFmOWY0YzJkMWMzNzVkZDBmOGY4YTQ2Y2Y5YzY4ODEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U4LzEwN2YyNDE5NjczNmI4NzBhMzE4YTBlMjhmMDQ4ZTI5ZjZmZWZmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U4LzEwN2YyNDE5NjczNmI4NzBhMzE4YTBlMjhmMDQ4ZTI5ZjZmZWZmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lOC8xMDdmMjQxOTY3MzZiODcwYTMxOGEwZTI4ZjA0OGUyOWY2ZmVmZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U4LzEwN2YyNDE5NjczNmI4NzBhMzE4YTBlMjhmMDQ4ZTI5ZjZmZWZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5LzJjZGI3MDE3ZGM2YzVhZWQyNWNiNDIwMmM1YjAxMDRiODcyMjQ2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5LzJjZGI3MDE3ZGM2YzVhZWQyNWNiNDIwMmM1YjAxMDRiODcyMjQ2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lOS8yY2RiNzAxN2RjNmM1YWVkMjVjYjQyMDJjNWIwMTA0Yjg3MjI0NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5LzJjZGI3MDE3ZGM2YzVhZWQyNWNiNDIwMmM1YjAxMDRiODcyMjQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5L2FkNmVjM2UzODM2NGEzZDA3ZmVkYTdjNDE5N2Q0ZDg0NWM1M2I1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5L2FkNmVjM2UzODM2NGEzZDA3ZmVkYTdjNDE5N2Q0ZDg0NWM1M2I1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lOS9hZDZlYzNlMzgzNjRhM2QwN2ZlZGE3YzQxOTdkNGQ4NDVjNTNiNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5L2FkNmVjM2UzODM2NGEzZDA3ZmVkYTdjNDE5N2Q0ZDg0NWM1M2I1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5L2Y0OGJlY2NjNjJkNTM1NzM5YmZiZGViZTBhNTVlZDcxNmQ4MzY2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5L2Y0OGJlY2NjNjJkNTM1NzM5YmZiZGViZTBhNTVlZDcxNmQ4MzY2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lOS9mNDhiZWNjYzYyZDUzNTczOWJmYmRlYmUwYTU1ZWQ3MTZkODM2NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U5L2Y0OGJlY2NjNjJkNTM1NzM5YmZiZGViZTBhNTVlZDcxNmQ4MzY2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ViL2MwOWQwMTM3Y2ZiMGMyNjY5N2FlZDAxMDlmYjk0M2FkOTA2ZjNmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ViL2MwOWQwMTM3Y2ZiMGMyNjY5N2FlZDAxMDlmYjk0M2FkOTA2ZjNmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lYi9jMDlkMDEzN2NmYjBjMjY2OTdhZWQwMTA5ZmI5NDNhZDkwNmYzZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ViL2MwOWQwMTM3Y2ZiMGMyNjY5N2FlZDAxMDlmYjk0M2FkOTA2ZjNmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VjLzY3ZTVhODZhZGZmNDY1MzU5ZjFjOGY5OTVlMTJkYmRmYTA4ZDhhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VjLzY3ZTVhODZhZGZmNDY1MzU5ZjFjOGY5OTVlMTJkYmRmYTA4ZDhhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lYy82N2U1YTg2YWRmZjQ2NTM1OWYxYzhmOTk1ZTEyZGJkZmEwOGQ4YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VjLzY3ZTVhODZhZGZmNDY1MzU5ZjFjOGY5OTVlMTJkYmRmYTA4ZDhhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VkLzk1MjNlNjJlNDUzZTUwZGQ5YmUxNjA2YWYxOTM5OWI5NmUzOTdhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VkLzk1MjNlNjJlNDUzZTUwZGQ5YmUxNjA2YWYxOTM5OWI5NmUzOTdhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZC85NTIzZTYyZTQ1M2U1MGRkOWJlMTYwNmFmMTkzOTliOTZlMzk3YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VkLzk1MjNlNjJlNDUzZTUwZGQ5YmUxNjA2YWYxOTM5OWI5NmUzOTdhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlLzFkNmYxNjQ4OTNjMTg2NmEzMjNmMDcyZWVlZDM2Yjg1NTY1NmJlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlLzFkNmYxNjQ4OTNjMTg2NmEzMjNmMDcyZWVlZDM2Yjg1NTY1NmJlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZS8xZDZmMTY0ODkzYzE4NjZhMzIzZjA3MmVlZWQzNmI4NTU2NTZiZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlLzFkNmYxNjQ4OTNjMTg2NmEzMjNmMDcyZWVlZDM2Yjg1NTY1NmJlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlLzNmYTFiOGMwMGFmZjdmZTAyMDY1ZmRiNTA4NjRiYjBkOTMyY2NmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlLzNmYTFiOGMwMGFmZjdmZTAyMDY1ZmRiNTA4NjRiYjBkOTMyY2NmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZS8zZmExYjhjMDBhZmY3ZmUwMjA2NWZkYjUwODY0YmIwZDkzMmNjZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlLzNmYTFiOGMwMGFmZjdmZTAyMDY1ZmRiNTA4NjRiYjBkOTMyY2NmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlL2E5Mjg2ZGY1NDI0NWZlYTcyYzViNTU3MjkxNDcwZWI4MjVmMzhmIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlL2E5Mjg2ZGY1NDI0NWZlYTcyYzViNTU3MjkxNDcwZWI4MjVmMzhmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZS9hOTI4NmRmNTQyNDVmZWE3MmM1YjU1NzI5MTQ3MGViODI1ZjM4ZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VlL2E5Mjg2ZGY1NDI0NWZlYTcyYzViNTU3MjkxNDcwZWI4MjVmMzhmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmLzU4ZmRkODA4NmMyNDNiZGM4MWY5OWUzNzlhY2FjZmQyMWQzMmQ2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmLzU4ZmRkODA4NmMyNDNiZGM4MWY5OWUzNzlhY2FjZmQyMWQzMmQ2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZi81OGZkZDgwODZjMjQzYmRjODFmOTllMzc5YWNhY2ZkMjFkMzJkNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmLzU4ZmRkODA4NmMyNDNiZGM4MWY5OWUzNzlhY2FjZmQyMWQzMmQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmL2M0OTk1MjRjZjEwNWQ1MjY0YWM3ZmM1NGUwN2U5NTc2NGU4MDc1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmL2M0OTk1MjRjZjEwNWQ1MjY0YWM3ZmM1NGUwN2U5NTc2NGU4MDc1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZi9jNDk5NTI0Y2YxMDVkNTI2NGFjN2ZjNTRlMDdlOTU3NjRlODA3NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmL2M0OTk1MjRjZjEwNWQ1MjY0YWM3ZmM1NGUwN2U5NTc2NGU4MDc1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmL2M5MTIxZmRlZGFmMDhiYTE4MGI1M2ViZmJjZjcxYmQ0ODhlZDA5IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmL2M5MTIxZmRlZGFmMDhiYTE4MGI1M2ViZmJjZjcxYmQ0ODhlZDA5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9lZi9jOTEyMWZkZWRhZjA4YmExODBiNTNlYmZiY2Y3MWJkNDg4ZWQwOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2VmL2M5MTIxZmRlZGFmMDhiYTE4MGI1M2ViZmJjZjcxYmQ0ODhlZDA5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YwLzA1M2I4MDYwYmIzZjBiZTVjYmNjMzE0N2EwN2VjZTI2YmYwOTdlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YwLzA1M2I4MDYwYmIzZjBiZTVjYmNjMzE0N2EwN2VjZTI2YmYwOTdlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMC8wNTNiODA2MGJiM2YwYmU1Y2JjYzMxNDdhMDdlY2UyNmJmMDk3ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YwLzA1M2I4MDYwYmIzZjBiZTVjYmNjMzE0N2EwN2VjZTI2YmYwOTdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YwL2NlMmI4ZTQ5ODYwODRkOWIzMDhmYjcyNzA5ZTQxNGMyM2ViNWU2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YwL2NlMmI4ZTQ5ODYwODRkOWIzMDhmYjcyNzA5ZTQxNGMyM2ViNWU2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMC9jZTJiOGU0OTg2MDg0ZDliMzA4ZmI3MjcwOWU0MTRjMjNlYjVlNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YwL2NlMmI4ZTQ5ODYwODRkOWIzMDhmYjcyNzA5ZTQxNGMyM2ViNWU2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YyLzBjOTA2M2ZhMGJkYTlhMzk3Yzk2OTQ3YTdiNjg3MzA1YzQ5NzUzIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YyLzBjOTA2M2ZhMGJkYTlhMzk3Yzk2OTQ3YTdiNjg3MzA1YzQ5NzUzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMi8wYzkwNjNmYTBiZGE5YTM5N2M5Njk0N2E3YjY4NzMwNWM0OTc1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YyLzBjOTA2M2ZhMGJkYTlhMzk3Yzk2OTQ3YTdiNjg3MzA1YzQ5NzUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YyLzllN2ZiNTkwNTUxMDk1MjMwYzYxNDljYmU3MmYyZTkxMDRhNzk2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YyLzllN2ZiNTkwNTUxMDk1MjMwYzYxNDljYmU3MmYyZTkxMDRhNzk2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMi85ZTdmYjU5MDU1MTA5NTIzMGM2MTQ5Y2JlNzJmMmU5MTA0YTc5NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YyLzllN2ZiNTkwNTUxMDk1MjMwYzYxNDljYmU3MmYyZTkxMDRhNzk2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YzLzI5MzU3MWRjZDcwOGI2YTNmYWYwMzgxOGNkMjg0NGQwMDBlMTk4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YzLzI5MzU3MWRjZDcwOGI2YTNmYWYwMzgxOGNkMjg0NGQwMDBlMTk4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMy8yOTM1NzFkY2Q3MDhiNmEzZmFmMDM4MThjZDI4NDRkMDAwZTE5OApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2YzLzI5MzU3MWRjZDcwOGI2YTNmYWYwMzgxOGNkMjg0NGQwMDBlMTk4CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMy9mMTE2NGI2OGI1N2IxOTk1YjY1OGE4MjgzMjBlNmRmMzA4MWZhZSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMy9mMTE2NGI2OGI1N2IxOTk1YjY1OGE4MjgzMjBlNmRmMzA4MWZhZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjMvZjExNjRiNjhiNTdiMTk5NWI2NThhODI4MzIwZTZkZjMwODFmYWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mMy9mMTE2NGI2OGI1N2IxOTk1YjY1OGE4MjgzMjBlNmRmMzA4MWZhZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNC8xNWNhZjNmY2FkMTYzMDRjYjQyNGI2N2YwZWU2YjEyZGMwM2FhZSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNC8xNWNhZjNmY2FkMTYzMDRjYjQyNGI2N2YwZWU2YjEyZGMwM2FhZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjQvMTVjYWYzZmNhZDE2MzA0Y2I0MjRiNjdmMGVlNmIxMmRjMDNhYWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNC8xNWNhZjNmY2FkMTYzMDRjYjQyNGI2N2YwZWU2YjEyZGMwM2FhZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNC84MDk3ZWIzNDBkYzVhN2NhZTU1YWFiY2YxZmFmNDU0OGFhODIxZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNC84MDk3ZWIzNDBkYzVhN2NhZTU1YWFiY2YxZmFmNDU0OGFhODIxZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjQvODA5N2ViMzQwZGM1YTdjYWU1NWFhYmNmMWZhZjQ1NDhhYTgyMWYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNC84MDk3ZWIzNDBkYzVhN2NhZTU1YWFiY2YxZmFmNDU0OGFhODIxZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS81MDRmMzZlNmY0ZWI3OTdhNTZmYzViYWM2YzZjN2YzMjk2OWJmMiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS81MDRmMzZlNmY0ZWI3OTdhNTZmYzViYWM2YzZjN2YzMjk2OWJmMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjUvNTA0ZjM2ZTZmNGViNzk3YTU2ZmM1YmFjNmM2YzdmMzI5NjliZjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS81MDRmMzZlNmY0ZWI3OTdhNTZmYzViYWM2YzZjN2YzMjk2OWJmMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS9iNTBjODVhODdjYWM2NGQ3ZWIzMjU0Y2RkMWFlYzk1NjRjMDI5MyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS9iNTBjODVhODdjYWM2NGQ3ZWIzMjU0Y2RkMWFlYzk1NjRjMDI5MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjUvYjUwYzg1YTg3Y2FjNjRkN2ViMzI1NGNkZDFhZWM5NTY0YzAyOTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS9iNTBjODVhODdjYWM2NGQ3ZWIzMjU0Y2RkMWFlYzk1NjRjMDI5MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS9mOWRkNTg4NmE2ZWUyMDI3MmJlMGFhZmM3OTBjYmE0M2IzMTkzMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS9mOWRkNTg4NmE2ZWUyMDI3MmJlMGFhZmM3OTBjYmE0M2IzMTkzMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjUvZjlkZDU4ODZhNmVlMjAyNzJiZTBhYWZjNzkwY2JhNDNiMzE5MzEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNS9mOWRkNTg4NmE2ZWUyMDI3MmJlMGFhZmM3OTBjYmE0M2IzMTkzMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNi9iZTA0OWUyODRjMGY5ZGNiYmM3NDU1NDM4ODViZTM1MDJlYTUyMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNi9iZTA0OWUyODRjMGY5ZGNiYmM3NDU1NDM4ODViZTM1MDJlYTUyMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjYvYmUwNDllMjg0YzBmOWRjYmJjNzQ1NTQzODg1YmUzNTAyZWE1MjEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNi9iZTA0OWUyODRjMGY5ZGNiYmM3NDU1NDM4ODViZTM1MDJlYTUyMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNy9jMzMyYmQ0ZDRkNGI3NzczNjZjYWU0ZDI0ZDE2ODc0Nzc1NzZiZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNy9jMzMyYmQ0ZDRkNGI3NzczNjZjYWU0ZDI0ZDE2ODc0Nzc1NzZiZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjcvYzMzMmJkNGQ0ZDRiNzc3MzY2Y2FlNGQyNGQxNjg3NDc3NTc2YmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mNy9jMzMyYmQ0ZDRkNGI3NzczNjZjYWU0ZDI0ZDE2ODc0Nzc1NzZiZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mOC85NThiZGY0ZDM2NWE4NGE5YTE3OGIxZjVmMzVmZjFkYWNiZDg4NCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mOC85NThiZGY0ZDM2NWE4NGE5YTE3OGIxZjVmMzVmZjFkYWNiZDg4NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjgvOTU4YmRmNGQzNjVhODRhOWExNzhiMWY1ZjM1ZmYxZGFjYmQ4ODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mOC85NThiZGY0ZDM2NWE4NGE5YTE3OGIxZjVmMzVmZjFkYWNiZDg4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYS9jMDNmMmM1MTM5NjE4ZDg3ZDUzNjE0YzE1MzgyM2JmMWYzMTM5NiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYS9jMDNmMmM1MTM5NjE4ZDg3ZDUzNjE0YzE1MzgyM2JmMWYzMTM5NgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmEvYzAzZjJjNTEzOTYxOGQ4N2Q1MzYxNGMxNTM4MjNiZjFmMzEzOTYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYS9jMDNmMmM1MTM5NjE4ZDg3ZDUzNjE0YzE1MzgyM2JmMWYzMTM5NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYS9kYTkzNTZhYTNmNzQ2MjIzMjdhMzAzOGFlOWM2ZjkyZTFjNWMxZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYS9kYTkzNTZhYTNmNzQ2MjIzMjdhMzAzOGFlOWM2ZjkyZTFjNWMxZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmEvZGE5MzU2YWEzZjc0NjIyMzI3YTMwMzhhZTljNmY5MmUxYzVjMWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYS9kYTkzNTZhYTNmNzQ2MjIzMjdhMzAzOGFlOWM2ZjkyZTFjNWMxZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYi83MzhhMTA2Y2ZkMDk3YTRhY2I5NmNlMTMyZWNiMWFkNmM0NmIwMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYi83MzhhMTA2Y2ZkMDk3YTRhY2I5NmNlMTMyZWNiMWFkNmM0NmIwMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmIvNzM4YTEwNmNmZDA5N2E0YWNiOTZjZTEzMmVjYjFhZDZjNDZiMDMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYi83MzhhMTA2Y2ZkMDk3YTRhY2I5NmNlMTMyZWNiMWFkNmM0NmIwMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy80YzYzNmQ2NTE1ZTllMjYxZjkyNjBkYmNmM2NjNmVjYTk3ZWEwOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy80YzYzNmQ2NTE1ZTllMjYxZjkyNjBkYmNmM2NjNmVjYTk3ZWEwOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmMvNGM2MzZkNjUxNWU5ZTI2MWY5MjYwZGJjZjNjYzZlY2E5N2VhMDgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy80YzYzNmQ2NTE1ZTllMjYxZjkyNjBkYmNmM2NjNmVjYTk3ZWEwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy83ZDdiODA1ZjdhOTQyODU3NGY0ZjgwMmIyZTM0Y2QyMGFiOWQ5OSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy83ZDdiODA1ZjdhOTQyODU3NGY0ZjgwMmIyZTM0Y2QyMGFiOWQ5OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmMvN2Q3YjgwNWY3YTk0Mjg1NzRmNGY4MDJiMmUzNGNkMjBhYjlkOTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy83ZDdiODA1ZjdhOTQyODU3NGY0ZjgwMmIyZTM0Y2QyMGFiOWQ5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy85MDIzN2RjNDg5MWZhNmM2OTgyN2ZjNDY1NjMyMjI1ZTM5MTYxOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy85MDIzN2RjNDg5MWZhNmM2OTgyN2ZjNDY1NjMyMjI1ZTM5MTYxOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmMvOTAyMzdkYzQ4OTFmYTZjNjk4MjdmYzQ2NTYzMjIyNWUzOTE2MTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mYy85MDIzN2RjNDg5MWZhNmM2OTgyN2ZjNDY1NjMyMjI1ZTM5MTYxOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mZC81N2QyZDY3NzBmYWQ4ZTk5NTkxMjQ3OTNhMTdmNDQxYjU3MWU2NiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mZC81N2QyZDY3NzBmYWQ4ZTk5NTkxMjQ3OTNhMTdmNDQxYjU3MWU2NgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmQvNTdkMmQ2NzcwZmFkOGU5OTU5MTI0NzkzYTE3ZjQ0MWI1NzFlNjYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mZC81N2QyZDY3NzBmYWQ4ZTk5NTkxMjQ3OTNhMTdmNDQxYjU3MWU2NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mZC84OWY4Y2ZmYjY2M2FjODkwOTVhMGY5NzY0OTAyZTkzY2VhY2E2YSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mZC84OWY4Y2ZmYjY2M2FjODkwOTVhMGY5NzY0OTAyZTkzY2VhY2E2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmQvODlmOGNmZmI2NjNhYzg5MDk1YTBmOTc2NDkwMmU5M2NlYWNhNmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy9mZC84OWY4Y2ZmYjY2M2FjODkwOTVhMGY5NzY0OTAyZTkzY2VhY2E2YQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmUvNTQwN2ZjNTBhNTNhZWNiNDFkMWE2ZTllYTdiNjEyZTU4MWFmODcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmUvNTQwN2ZjNTBhNTNhZWNiNDFkMWE2ZTllYTdiNjEyZTU4MWFmODcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ZlLzU0MDdmYzUwYTUzYWVjYjQxZDFhNmU5ZWE3YjYxMmU1ODFhZjg3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmUvNTQwN2ZjNTBhNTNhZWNiNDFkMWE2ZTllYTdiNjEyZTU4MWFmODcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmYvNDlkMDc4Njk4MzFhZDc2MWJiZGFlYTAyNjA4NmY4Nzg5YmNiMDAgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmYvNDlkMDc4Njk4MzFhZDc2MWJiZGFlYTAyNjA4NmY4Nzg5YmNiMDAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ZmLzQ5ZDA3ODY5ODMxYWQ3NjFiYmRhZWEwMjYwODZmODc4OWJjYjAwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmYvNDlkMDc4Njk4MzFhZDc2MWJiZGFlYTAyNjA4NmY4Nzg5YmNiMDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmYvYjMxMjI0OGQ2MDcyODRjMjkwMDIzZjk1MDJlZWEwMTBkMzRlZmQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmYvYjMxMjI0OGQ2MDcyODRjMjkwMDIzZjk1MDJlZWEwMTBkMzRlZmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ZmL2IzMTIyNDhkNjA3Mjg0YzI5MDAyM2Y5NTAyZWVhMDEwZDM0ZWZkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZmYvYjMxMjI0OGQ2MDcyODRjMjkwMDIzZjk1MDJlZWEwMTBkMzRlZmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL2JyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9kZl9hbmNlc3RvciBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9kZl9hbmNlc3RvcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvZGZfYW5jZXN0b3IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9kZl9hbmNlc3RvcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvZGZfc2lkZTEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvZGZfc2lkZTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL2RmX3NpZGUxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvZGZfc2lkZTEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL2RmX3NpZGUyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL2RmX3NpZGUyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9kZl9zaWRlMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL2RmX3NpZGUyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9mZl9icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvZmZfYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9mZl9icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9mZl9icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG8xCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG8yIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG8yCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG8yCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvMwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG80CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG81IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG81CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL29jdG81CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvNiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvb2N0bzYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9vY3RvNgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lX2NvbmZsaWN0X2FuY2VzdG9yIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZV9jb25mbGljdF9hbmNlc3RvcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lX2NvbmZsaWN0X2FuY2VzdG9yCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lX2NvbmZsaWN0X2FuY2VzdG9yCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVfY29uZmxpY3Rfb3VycyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVfY29uZmxpY3Rfb3VycwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lX2NvbmZsaWN0X291cnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVfY29uZmxpY3Rfb3VycwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lX2NvbmZsaWN0X3RoZWlycyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVfY29uZmxpY3RfdGhlaXJzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVfY29uZmxpY3RfdGhlaXJzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lX2NvbmZsaWN0X3RoZWlycwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lczEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lczEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZXMxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lczEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZXMyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZXMyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVzMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZXMyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTEwIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTEwCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTEwLWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTEwLWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMC1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTEwLWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTExCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMS1icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMS1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTEtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMS1icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTMgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTMtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTMtYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTEzLWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTMtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTE0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMTQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTE0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTE0LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTE0LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0xNC1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTE0LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMmFsdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0yYWx0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTJhbHQtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMmFsdC1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtMmFsdC1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTJhbHQtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTNhbHQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTNhbHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTNhbHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtM2FsdC1icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC0zYWx0LWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtM2FsdC1icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC00LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTQtYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTQtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC00LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTEgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0xCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0xLWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMS1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0xLWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0xLWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0yCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC01YWx0LTIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0yLWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTVhbHQtMi1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0yLWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNWFsdC0yLWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC02IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC02CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC02CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTYtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNi1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNi1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTYtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTcgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC03CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNy1icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC03LWJyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC03LWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtNy1icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtOApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtOApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC04LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTgtYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTgtYnJhbmNoCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC04LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC05IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC05CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdHJpdmlhbC05CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTktYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtOS1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3RyaXZpYWwtOS1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy90cml2aWFsLTktYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy91bnJlbGF0ZWQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvdW5yZWxhdGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy91bnJlbGF0ZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvcmVmcy9oZWFkcy91bnJlbGF0ZWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvYWRkZWQtaW4tbWFzdGVyLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2FkZGVkLWluLW1hc3Rlci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvYWRkZWQtaW4tbWFzdGVyLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvYWRkZWQtaW4tbWFzdGVyLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9hdXRvbWVyZ2VhYmxlLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2F1dG9tZXJnZWFibGUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2F1dG9tZXJnZWFibGUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9hdXRvbWVyZ2VhYmxlLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9jaGFuZ2VkLWluLWJyYW5jaC50eHQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9jaGFuZ2VkLWluLWJyYW5jaC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvY2hhbmdlZC1pbi1icmFuY2gudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9jaGFuZ2VkLWluLWJyYW5jaC50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvY2hhbmdlZC1pbi1tYXN0ZXIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvY2hhbmdlZC1pbi1tYXN0ZXIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2NoYW5nZWQtaW4tbWFzdGVyLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvY2hhbmdlZC1pbi1tYXN0ZXIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2NvbmZsaWN0aW5nLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2NvbmZsaWN0aW5nLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9jb25mbGljdGluZy50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL2NvbmZsaWN0aW5nLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9yZW1vdmVkLWluLWJyYW5jaC50eHQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9yZW1vdmVkLWluLWJyYW5jaC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvcmVtb3ZlZC1pbi1icmFuY2gudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS9yZW1vdmVkLWluLWJyYW5jaC50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvdW5jaGFuZ2VkLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlL3VuY2hhbmdlZC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvdW5jaGFuZ2VkLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvdW5jaGFuZ2VkLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9DT01NSVRfRURJVE1TRwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL01FUkdFX0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL01FUkdFX0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9NRVJHRV9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL01FUkdFX0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9NRVJHRV9NT0RFIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9NRVJHRV9NT0RFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvTUVSR0VfTU9ERQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9NRVJHRV9NT0RFCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvTUVSR0VfTVNHIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9NRVJHRV9NU0cKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9NRVJHRV9NU0cKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvTUVSR0VfTVNHCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvT1JJR19IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9PUklHX0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9PUklHX0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvT1JJR19IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2JyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2JyYW5jaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2JyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzAzL2RiMWQzNzUwNGNhMGM0ZjdjMjZkNzc3NmIwZTI4YmRlYTA4NzEyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzAzL2RiMWQzNzUwNGNhMGM0ZjdjMjZkNzc3NmIwZTI4YmRlYTA4NzEyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8wMy9kYjFkMzc1MDRjYTBjNGY3YzI2ZDc3NzZiMGUyOGJkZWEwODcxMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzAzL2RiMWQzNzUwNGNhMGM0ZjdjMjZkNzc3NmIwZTI4YmRlYTA4NzEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzE3LzBlZmMxMDIzZTBlZDIzOTAxNTBiYjQ0NjljODQ1NmI2M2U4ZjkxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzE3LzBlZmMxMDIzZTBlZDIzOTAxNTBiYjQ0NjljODQ1NmI2M2U4ZjkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8xNy8wZWZjMTAyM2UwZWQyMzkwMTUwYmI0NDY5Yzg0NTZiNjNlOGY5MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzE3LzBlZmMxMDIzZTBlZDIzOTAxNTBiYjQ0NjljODQ1NmI2M2U4ZjkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzFmLzg1Y2E1MWI4ZTBhYWM4OTNhNjIxYjYxYTljMjY2MWQ2YWE2ZDgxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzFmLzg1Y2E1MWI4ZTBhYWM4OTNhNjIxYjYxYTljMjY2MWQ2YWE2ZDgxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi84NWNhNTFiOGUwYWFjODkzYTYyMWI2MWE5YzI2NjFkNmFhNmQ4MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzFmLzg1Y2E1MWI4ZTBhYWM4OTNhNjIxYjYxYTljMjY2MWQ2YWE2ZDgxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzIyLzBiZDYyNjMxYzhjZjdhODNlZjM5YzZiOTQ1OTVmMDA1MTcyMTFlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzIyLzBiZDYyNjMxYzhjZjdhODNlZjM5YzZiOTQ1OTVmMDA1MTcyMTFlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8yMi8wYmQ2MjYzMWM4Y2Y3YTgzZWYzOWM2Yjk0NTk1ZjAwNTE3MjExZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzIyLzBiZDYyNjMxYzhjZjdhODNlZjM5YzZiOTQ1OTVmMDA1MTcyMTFlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzMyL2Q1NWQ1OTI2NWRiODZkZDY5MGYwYTdmYzU2M2RiNDNlMmJjNmE2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzMyL2Q1NWQ1OTI2NWRiODZkZDY5MGYwYTdmYzU2M2RiNDNlMmJjNmE2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8zMi9kNTVkNTkyNjVkYjg2ZGQ2OTBmMGE3ZmM1NjNkYjQzZTJiYzZhNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzMyL2Q1NWQ1OTI2NWRiODZkZDY5MGYwYTdmYzU2M2RiNDNlMmJjNmE2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzM4L2UyZDgyYjkwNjVhMjM3OTA0YWY0Yjc4MGI0ZDY4ZGE2OTUwNTM0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzM4L2UyZDgyYjkwNjVhMjM3OTA0YWY0Yjc4MGI0ZDY4ZGE2OTUwNTM0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8zOC9lMmQ4MmI5MDY1YTIzNzkwNGFmNGI3ODBiNGQ2OGRhNjk1MDUzNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzM4L2UyZDgyYjkwNjVhMjM3OTA0YWY0Yjc4MGI0ZDY4ZGE2OTUwNTM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzNhLzM0NTgwYTM1YWRkNDNhNGNmMzYxZThlOWEzMDA2MGE5MDVjODc2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzNhLzM0NTgwYTM1YWRkNDNhNGNmMzYxZThlOWEzMDA2MGE5MDVjODc2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy8zYS8zNDU4MGEzNWFkZDQzYTRjZjM2MWU4ZTlhMzAwNjBhOTA1Yzg3NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9vYmplY3RzLzNhLzM0NTgwYTM1YWRkNDNhNGNmMzYxZThlOWEzMDA2MGE5MDVjODc2CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy80NC81OGI4YmM5ZTcyYjZjODc1NWFlNDU2ZjYwZTk4NDRkMDUzOGQ4YyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy80NC81OGI4YmM5ZTcyYjZjODc1NWFlNDU2ZjYwZTk4NDRkMDUzOGQ4YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNDQvNThiOGJjOWU3MmI2Yzg3NTVhZTQ1NmY2MGU5ODQ0ZDA1MzhkOGMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy80NC81OGI4YmM5ZTcyYjZjODc1NWFlNDU2ZjYwZTk4NDRkMDUzOGQ4YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy80Ny84ODcxMzg1YjljZDAzOTA4YzUzODNhY2ZkNTY4YmVmMDIzYzZiMyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy80Ny84ODcxMzg1YjljZDAzOTA4YzUzODNhY2ZkNTY4YmVmMDIzYzZiMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNDcvODg3MTM4NWI5Y2QwMzkwOGM1MzgzYWNmZDU2OGJlZjAyM2M2YjMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy80Ny84ODcxMzg1YjljZDAzOTA4YzUzODNhY2ZkNTY4YmVmMDIzYzZiMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy81MS82YmQ4NWY3ODA2MWUwOWNjYzcxNDU2MWQ3YjUwNDY3MmNiNTJkYSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy81MS82YmQ4NWY3ODA2MWUwOWNjYzcxNDU2MWQ3YjUwNDY3MmNiNTJkYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNTEvNmJkODVmNzgwNjFlMDljY2M3MTQ1NjFkN2I1MDQ2NzJjYjUyZGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy81MS82YmQ4NWY3ODA2MWUwOWNjYzcxNDU2MWQ3YjUwNDY3MmNiNTJkYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy81My9jMWQ5NWEwMWY0NTE0YjE2MjA2NmZjOTg1NjQ1MDBjOTZjNDZhZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy81My9jMWQ5NWEwMWY0NTE0YjE2MjA2NmZjOTg1NjQ1MDBjOTZjNDZhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNTMvYzFkOTVhMDFmNDUxNGIxNjIwNjZmYzk4NTY0NTAwYzk2YzQ2YWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy81My9jMWQ5NWEwMWY0NTE0YjE2MjA2NmZjOTg1NjQ1MDBjOTZjNDZhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy82YS9lYTVmMjk1MzA0YzM2MTQ0YWQ2ZTkyNDdhMjkxYjdmODExMjM5OSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy82YS9lYTVmMjk1MzA0YzM2MTQ0YWQ2ZTkyNDdhMjkxYjdmODExMjM5OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNmEvZWE1ZjI5NTMwNGMzNjE0NGFkNmU5MjQ3YTI5MWI3ZjgxMTIzOTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy82YS9lYTVmMjk1MzA0YzM2MTQ0YWQ2ZTkyNDdhMjkxYjdmODExMjM5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83MC82OGUzMGE3ZjAwOTBhZTMyZGIzNWRmYTFlNDE4OWQ4NzgwZmNiOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83MC82OGUzMGE3ZjAwOTBhZTMyZGIzNWRmYTFlNDE4OWQ4NzgwZmNiOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNzAvNjhlMzBhN2YwMDkwYWUzMmRiMzVkZmExZTQxODlkODc4MGZjYjgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83MC82OGUzMGE3ZjAwOTBhZTMyZGIzNWRmYTFlNDE4OWQ4NzgwZmNiOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS85MzhkZTFlMzY3MDk4YjNlOWE3YjFlYzNjNGFjNDU0OGFmZmZlNCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS85MzhkZTFlMzY3MDk4YjNlOWE3YjFlYzNjNGFjNDU0OGFmZmZlNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvNzUvOTM4ZGUxZTM2NzA5OGIzZTlhN2IxZWMzYzRhYzQ1NDhhZmZmZTQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS85MzhkZTFlMzY3MDk4YjNlOWE3YjFlYzNjNGFjNDU0OGFmZmZlNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi8yNjkyM2FhZjQ1MmIxOTc3ZWIwODYxN2M1OTQ3NWZiM2Y3NGI3MSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi8yNjkyM2FhZjQ1MmIxOTc3ZWIwODYxN2M1OTQ3NWZiM2Y3NGI3MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvN2IvMjY5MjNhYWY0NTJiMTk3N2ViMDg2MTdjNTk0NzVmYjNmNzRiNzEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi8yNjkyM2FhZjQ1MmIxOTc3ZWIwODYxN2M1OTQ3NWZiM2Y3NGI3MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC9hZjYyODQwYmUxYjFjNDdiNzc4YThhMjQ5ZjNmZjQ1MTU1MDM4YyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC9hZjYyODQwYmUxYjFjNDdiNzc4YThhMjQ5ZjNmZjQ1MTU1MDM4YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvODQvYWY2Mjg0MGJlMWIxYzQ3Yjc3OGE4YTI0OWYzZmY0NTE1NTAzOGMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC9hZjYyODQwYmUxYjFjNDdiNzc4YThhMjQ5ZjNmZjQ1MTU1MDM4YwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84OC83MWY3YTJlZTNhZGRmYzRiYTM5ZmJkMDc4M2M4ZTczOGQwNGNkYSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84OC83MWY3YTJlZTNhZGRmYzRiYTM5ZmJkMDc4M2M4ZTczOGQwNGNkYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvODgvNzFmN2EyZWUzYWRkZmM0YmEzOWZiZDA3ODNjOGU3MzhkMDRjZGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84OC83MWY3YTJlZTNhZGRmYzRiYTM5ZmJkMDc4M2M4ZTczOGQwNGNkYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84OC83YjE1M2IxNjVkMzI0MDljNzAxNjNlMGY3MzRjMDkwZjEyZjY3MyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84OC83YjE1M2IxNjVkMzI0MDljNzAxNjNlMGY3MzRjMDkwZjEyZjY3MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvODgvN2IxNTNiMTY1ZDMyNDA5YzcwMTYzZTBmNzM0YzA5MGYxMmY2NzMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84OC83YjE1M2IxNjVkMzI0MDljNzAxNjNlMGY3MzRjMDkwZjEyZjY3MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84YS9hZDM0Y2M4MzczMzU5MGU3NGI5M2QwZjdjZjAwMzc1ZTJhNzM1YSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84YS9hZDM0Y2M4MzczMzU5MGU3NGI5M2QwZjdjZjAwMzc1ZTJhNzM1YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOGEvYWQzNGNjODM3MzM1OTBlNzRiOTNkMGY3Y2YwMDM3NWUyYTczNWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84YS9hZDM0Y2M4MzczMzU5MGU3NGI5M2QwZjdjZjAwMzc1ZTJhNzM1YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Yi8zZjQzZDI0MDI4MjVjMjAwZjgzNWNhMTc2MjQxM2UzODZmZDBiMiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Yi8zZjQzZDI0MDI4MjVjMjAwZjgzNWNhMTc2MjQxM2UzODZmZDBiMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOGIvM2Y0M2QyNDAyODI1YzIwMGY4MzVjYTE3NjI0MTNlMzg2ZmQwYjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Yi8zZjQzZDI0MDI4MjVjMjAwZjgzNWNhMTc2MjQxM2UzODZmZDBiMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Yi83MjQxNjU0NWM3ZTc2MWI2NGNlY2FkNGYxNjg2ZWFlNDA3OGFhOCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Yi83MjQxNjU0NWM3ZTc2MWI2NGNlY2FkNGYxNjg2ZWFlNDA3OGFhOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOGIvNzI0MTY1NDVjN2U3NjFiNjRjZWNhZDRmMTY4NmVhZTQwNzhhYTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Yi83MjQxNjU0NWM3ZTc2MWI2NGNlY2FkNGYxNjg2ZWFlNDA3OGFhOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Zi8zYzA2Y2ZmOWE4Mzc1N2NlYzQwYzgwYmM5YmYzMWEyNTgyYmRlOSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Zi8zYzA2Y2ZmOWE4Mzc1N2NlYzQwYzgwYmM5YmYzMWEyNTgyYmRlOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOGYvM2MwNmNmZjlhODM3NTdjZWM0MGM4MGJjOWJmMzFhMjU4MmJkZTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Zi8zYzA2Y2ZmOWE4Mzc1N2NlYzQwYzgwYmM5YmYzMWEyNTgyYmRlOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Zi9mY2M0MDU5MjU1MTE4MjRhMjI0MGE2ZDM2ODZhYTdmOGM3YWM1MCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Zi9mY2M0MDU5MjU1MTE4MjRhMjI0MGE2ZDM2ODZhYTdmOGM3YWM1MApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOGYvZmNjNDA1OTI1NTExODI0YTIyNDBhNmQzNjg2YWE3ZjhjN2FjNTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy84Zi9mY2M0MDU5MjU1MTE4MjRhMjI0MGE2ZDM2ODZhYTdmOGM3YWM1MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wNWNjYjRlMGY5NDhkZTAzMTI4ZTA5NWYzOWRhZTY5NzY3NTFjNSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wNWNjYjRlMGY5NDhkZTAzMTI4ZTA5NWYzOWRhZTY5NzY3NTFjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOWEvMDVjY2I0ZTBmOTQ4ZGUwMzEyOGUwOTVmMzlkYWU2OTc2NzUxYzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wNWNjYjRlMGY5NDhkZTAzMTI4ZTA5NWYzOWRhZTY5NzY3NTFjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy85ZC84MWY4MmZjY2M3ZGNkN2RlN2ExZmZlYWQxODE1Mjk0YzJlMDkyYyBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy85ZC84MWY4MmZjY2M3ZGNkN2RlN2ExZmZlYWQxODE1Mjk0YzJlMDkyYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvOWQvODFmODJmY2NjN2RjZDdkZTdhMWZmZWFkMTgxNTI5NGMyZTA5MmMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy85ZC84MWY4MmZjY2M3ZGNkN2RlN2ExZmZlYWQxODE1Mjk0YzJlMDkyYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNy9jZWRiOGFkNGNiYjIyYjYzNjNmOTU3OGNiZDc0OTc5N2Y3ZWYwZCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNy9jZWRiOGFkNGNiYjIyYjYzNjNmOTU3OGNiZDc0OTc5N2Y3ZWYwZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvYjcvY2VkYjhhZDRjYmIyMmI2MzYzZjk1NzhjYmQ3NDk3OTdmN2VmMGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNy9jZWRiOGFkNGNiYjIyYjYzNjNmOTU3OGNiZDc0OTc5N2Y3ZWYwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9kMC8xODg1ZWE1OTQ5MjZlYWU5YmE1YjU0YWQ3NjY5MmFmNTk2OWY1MSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9kMC8xODg1ZWE1OTQ5MjZlYWU5YmE1YjU0YWQ3NjY5MmFmNTk2OWY1MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvZDAvMTg4NWVhNTk0OTI2ZWFlOWJhNWI1NGFkNzY2OTJhZjU5NjlmNTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9kMC8xODg1ZWE1OTQ5MjZlYWU5YmE1YjU0YWQ3NjY5MmFmNTk2OWY1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9lMi84MDkxNTdhNzc2NmYyNzJlNGNmZTI2ZTYxZWYyNjc4YTUzNTdmZiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9lMi84MDkxNTdhNzc2NmYyNzJlNGNmZTI2ZTYxZWYyNjc4YTUzNTdmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvZTIvODA5MTU3YTc3NjZmMjcyZTRjZmUyNmU2MWVmMjY3OGE1MzU3ZmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9lMi84MDkxNTdhNzc2NmYyNzJlNGNmZTI2ZTYxZWYyNjc4YTUzNTdmZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNi8yY2FjNWM4OGI5OTI4ZjI2OTViOTM0YzcwZWZhNDI4NTMyNDQ3OCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNi8yY2FjNWM4OGI5OTI4ZjI2OTViOTM0YzcwZWZhNDI4NTMyNDQ3OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvZTYvMmNhYzVjODhiOTkyOGYyNjk1YjkzNGM3MGVmYTQyODUzMjQ0NzgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNi8yY2FjNWM4OGI5OTI4ZjI2OTViOTM0YzcwZWZhNDI4NTMyNDQ3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9mNy8yNzg0MjkwYzE1MTA5MmFiZjA0Y2U2Yjg3NTA2ODU0N2Y3MDQwNiBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9mNy8yNzg0MjkwYzE1MTA5MmFiZjA0Y2U2Yjg3NTA2ODU0N2Y3MDQwNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL29iamVjdHMvZjcvMjc4NDI5MGMxNTEwOTJhYmYwNGNlNmI4NzUwNjg1NDdmNzA0MDYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvb2JqZWN0cy9mNy8yNzg0MjkwYzE1MTA5MmFiZjA0Y2U2Yjg3NTA2ODU0N2Y3MDQwNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2ggYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvYnJhbmNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9icmFuY2gKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby9jb25mbGljdHMtb25lLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvL2NvbmZsaWN0cy1vbmUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvL2NvbmZsaWN0cy1vbmUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby9jb25mbGljdHMtb25lLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby9jb25mbGljdHMtdHdvLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvL2NvbmZsaWN0cy10d28udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvL2NvbmZsaWN0cy10d28udHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby9jb25mbGljdHMtdHdvLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby9vbmUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlZHJlcG8vb25lLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvbWVyZ2VkcmVwby9vbmUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby9vbmUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvL3R3by50eHQgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2VkcmVwby90d28udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9tZXJnZWRyZXBvL3R3by50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9tZXJnZWRyZXBvL3R3by50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDggYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzEzLzg1ZjI2NGFmYjc1YTU2YTViZWM3NDI0M2JlOWIzNjdiYTRjYTA4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTQvNDM0NDA0M2JhNGQ0YTQwNWRhMDNkZTM4NDRhYTgyOWFlOGJlMGUgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTQvNDM0NDA0M2JhNGQ0YTQwNWRhMDNkZTM4NDRhYTgyOWFlOGJlMGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE0LzQzNDQwNDNiYTRkNGE0MDVkYTAzZGUzODQ0YWE4MjlhZThiZTBlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTQvNDM0NDA0M2JhNGQ0YTQwNWRhMDNkZTM4NDRhYTgyOWFlOGJlMGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTYvOGU0ZWJkMWM2Njc0OTk1NDhhZTEyNDAzYjE5YjIyYTVjNWU5MjUgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTYvOGU0ZWJkMWM2Njc0OTk1NDhhZTEyNDAzYjE5YjIyYTVjNWU5MjUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE2LzhlNGViZDFjNjY3NDk5NTQ4YWUxMjQwM2IxOWIyMmE1YzVlOTI1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTYvOGU0ZWJkMWM2Njc0OTk1NDhhZTEyNDAzYjE5YjIyYTVjNWU5MjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE4LzEwMzcwNDlhNTRhMWViNWZhYjQwNDY1OGEzYTI1MGI0NDMzNWQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRhLzIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRlLzA4ODNlZWVlZWJjMWZiMTczNTE2MWNlYTgyZjdjYjVmYWI3ZTYzIGIvdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRlLzA4ODNlZWVlZWJjMWZiMTczNTE2MWNlYTgyZjdjYjVmYWI3ZTYzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80ZS8wODgzZWVlZWViYzFmYjE3MzUxNjFjZWE4MmY3Y2I1ZmFiN2U2MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRlLzA4ODNlZWVlZWJjMWZiMTczNTE2MWNlYTgyZjdjYjVmYWI3ZTYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzViLzViMDI1YWZiMGI0YzkxM2I0YzMzOGE0MjkzNGEzODYzYmYzNjQ0IGIvdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzViLzViMDI1YWZiMGI0YzkxM2I0YzMzOGE0MjkzNGEzODYzYmYzNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzViLzViMDI1YWZiMGI0YzkxM2I0YzMzOGE0MjkzNGEzODYzYmYzNjQ0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Mi9lYjU2ZGFiYjRiOTkyOWJjMTVkZDkyNjNjMmM3MzNiMTNkMmRjYyBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Mi9lYjU2ZGFiYjRiOTkyOWJjMTVkZDkyNjNjMmM3MzNiMTNkMmRjYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNjIvZWI1NmRhYmI0Yjk5MjliYzE1ZGQ5MjYzYzJjNzMzYjEzZDJkY2MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Mi9lYjU2ZGFiYjRiOTkyOWJjMTVkZDkyNjNjMmM3MzNiMTNkMmRjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Ni8zYWRiMDkxNDM3Njc5ODRmN2JlODNhOTFlZmZhNDdlMTI4YzczNSBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Ni8zYWRiMDkxNDM3Njc5ODRmN2JlODNhOTFlZmZhNDdlMTI4YzczNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNjYvM2FkYjA5MTQzNzY3OTg0ZjdiZTgzYTkxZWZmYTQ3ZTEyOGM3MzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Ni8zYWRiMDkxNDM3Njc5ODRmN2JlODNhOTFlZmZhNDdlMTI4YzczNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYSBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNzUvMDU3ZGQ0MTE0ZTc0Y2NhMWQ3NTBkMGFlZTE2NDdjOTAzY2I2MGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZCBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvODEvNDg4OWEwNzhjMDMxZjYxZWQwOGFiNWZhODYzYWVhOTMxNDM0NGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OSBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvODQvOTYwNzFjMWI0NmM4NTRiMzExODVlYTk3NzQzYmU2YTg3NzQ0NzkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YSBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZiBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTQvYTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZCBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTcvMTU4NmMxZGZlOGE3MWM2Y2JmNmMxMjlmNDA0YzU2NDJmZjMxYmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNiBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTgvMjMzMTIwZjZhZDcwOGY4NDNkODYxY2UyYjcyMjhlYzRlM2RlYzYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZCBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvY2YvODBmOGRlOWYxMTg1YmYzYTA1Zjk5M2Y2MTIxODgwZGQwY2ZiYzkgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvY2YvODBmOGRlOWYxMTg1YmYzYTA1Zjk5M2Y2MTIxODgwZGQwY2ZiYzkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2NmLzgwZjhkZTlmMTE4NWJmM2EwNWY5OTNmNjEyMTg4MGRkMGNmYmM5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvY2YvODBmOGRlOWYxMTg1YmYzYTA1Zjk5M2Y2MTIxODgwZGQwY2ZiYzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDUvMmE4ZmU4NGNlZWRmMjYwYWZlNGYwMjg3YmJmY2EwNGExMTdlODMgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDUvMmE4ZmU4NGNlZWRmMjYwYWZlNGYwMjg3YmJmY2EwNGExMTdlODMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Q1LzJhOGZlODRjZWVkZjI2MGFmZTRmMDI4N2JiZmNhMDRhMTE3ZTgzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDUvMmE4ZmU4NGNlZWRmMjYwYWZlNGYwMjg3YmJmY2EwNGExMTdlODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZhLzQ5YjA3Nzk3MjM5MWFkNTgwMzcwNTBmMmE3NWY3NGUzNjcxZTkyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUgYi90ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay8uZ2l0a2VlcCBiL3Rlc3RzL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrLy5naXRrZWVwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wYXJ0aWFsLXRlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrLy5naXRrZWVwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay8uZ2l0a2VlcApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvZGlyIGIvdGVzdHMvcmVzb3VyY2VzL3BhcnRpYWwtdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2RpcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvZGlyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGFydGlhbC10ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvZGlyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvcGVlbGVkLmdpdC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3BlZWxlZC5naXQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3BlZWxlZC5naXQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3BlZWxlZC5naXQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvaW5mby9wYWNrcyBiL3Rlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvaW5mby9wYWNrcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGVlbGVkLmdpdC9vYmplY3RzL2luZm8vcGFja3MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvaW5mby9wYWNrcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcGVlbGVkLmdpdC9vYmplY3RzL3BhY2svcGFjay1lODQ3NzNlYWYzZmNlMTc3NDc1NTU4MGUzZGJiOGQ5ZjNhMWFkYzQ1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4NDc3M2VhZjNmY2UxNzc0NzU1NTgwZTNkYmI4ZDlmM2ExYWRjNDUuaWR4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4NDc3M2VhZjNmY2UxNzc0NzU1NTgwZTNkYmI4ZDlmM2ExYWRjNDUuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcGVlbGVkLmdpdC9vYmplY3RzL3BhY2svcGFjay1lODQ3NzNlYWYzZmNlMTc3NDc1NTU4MGUzZGJiOGQ5ZjNhMWFkYzQ1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4NDc3M2VhZjNmY2UxNzc0NzU1NTgwZTNkYmI4ZDlmM2ExYWRjNDUucGFjayBiL3Rlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4NDc3M2VhZjNmY2UxNzc0NzU1NTgwZTNkYmI4ZDlmM2ExYWRjNDUucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcGVlbGVkLmdpdC9vYmplY3RzL3BhY2svcGFjay1lODQ3NzNlYWYzZmNlMTc3NDc1NTU4MGUzZGJiOGQ5ZjNhMWFkYzQ1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L29iamVjdHMvcGFjay9wYWNrLWU4NDc3M2VhZjNmY2UxNzc0NzU1NTgwZTNkYmI4ZDlmM2ExYWRjNDUucGFjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3BlZWxlZC5naXQvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BlZWxlZC5naXQvcGFja2VkLXJlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wZWVsZWQuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3BlZWxlZC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3BlZWxlZC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wZWVsZWQuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoLnNoIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2guc2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2guc2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoLnNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvQ09NTUlUX0VESVRNU0cKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvQ09NTUlUX0VESVRNU0cKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvT1JJR19IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvT1JJR19IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL09SSUdfSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvT1JJR19IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2IxIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2IxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2IxCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iMiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iMgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYjMgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYjMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2IzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYjMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2I0IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2I0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL2I0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iNSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvYjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9iNQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMDgvYjA0MTc4M2Y0MGVkZmUxMmJiNDA2YzljOWE4YTA0MDE3N2MxMjUgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzA4L2IwNDE3ODNmNDBlZGZlMTJiYjQwNmM5YzlhOGEwNDAxNzdjMTI1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMDgvYjA0MTc4M2Y0MGVkZmUxMmJiNDA2YzljOWE4YTA0MDE3N2MxMjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMDgvYjA0MTc4M2Y0MGVkZmUxMmJiNDA2YzljOWE4YTA0MDE3N2MxMjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzEzLzg1ZjI2NGFmYjc1YTU2YTViZWM3NDI0M2JlOWIzNjdiYTRjYTA4IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzEzLzg1ZjI2NGFmYjc1YTU2YTViZWM3NDI0M2JlOWIzNjdiYTRjYTA4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzEzLzg1ZjI2NGFmYjc1YTU2YTViZWM3NDI0M2JlOWIzNjdiYTRjYTA4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzFhLzQ0MzAyMzE4M2UzZjJiZmJlZjhhYzkyM2NkODFjMTAxOGExOGZkIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xYS80NDMwMjMxODNlM2YyYmZiZWY4YWM5MjNjZDgxYzEwMThhMThmZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzFhLzQ0MzAyMzE4M2UzZjJiZmJlZjhhYzkyM2NkODFjMTAxOGExOGZkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzFhLzQ0MzAyMzE4M2UzZjJiZmJlZjhhYzkyM2NkODFjMTAxOGExOGZkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xYi84Y2JhZDQzZTg2NzY3NmRmNjAxMzA2Njg5ZmU3YzNkZWY1ZTY4OSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMWIvOGNiYWQ0M2U4Njc2NzZkZjYwMTMwNjY4OWZlN2MzZGVmNWU2ODkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xYi84Y2JhZDQzZTg2NzY3NmRmNjAxMzA2Njg5ZmU3YzNkZWY1ZTY4OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8xYi84Y2JhZDQzZTg2NzY3NmRmNjAxMzA2Njg5ZmU3YzNkZWY1ZTY4OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMWYvNjdmYzQzODZiMmQxNzFlMGQyMWJlMWM0NDdlMTI2NjA1NjFmOWIgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzFmLzY3ZmM0Mzg2YjJkMTcxZTBkMjFiZTFjNDQ3ZTEyNjYwNTYxZjliCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMWYvNjdmYzQzODZiMmQxNzFlMGQyMWJlMWM0NDdlMTI2NjA1NjFmOWIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMWYvNjdmYzQzODZiMmQxNzFlMGQyMWJlMWM0NDdlMTI2NjA1NjFmOWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzI1LzhmMGUyYTk1OWEzNjRlNDBlZDY2MDNkNWQ0NGZiYjI0NzY1YjEwIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8yNS84ZjBlMmE5NTlhMzY0ZTQwZWQ2NjAzZDVkNDRmYmIyNDc2NWIxMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzI1LzhmMGUyYTk1OWEzNjRlNDBlZDY2MDNkNWQ0NGZiYjI0NzY1YjEwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzI1LzhmMGUyYTk1OWEzNjRlNDBlZDY2MDNkNWQ0NGZiYjI0NzY1YjEwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMjcvMGI4ZWE3NjA1NmQ1Y2FkODNhZjkyMTgzNzcwMmQzZTNjMjkyNGQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMmQvNTkwNzVlMDY4MWY1NDA0ODJkNGY2MjIzYTY4ZTBmZWY3OTBiYzcgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzJkLzU5MDc1ZTA2ODFmNTQwNDgyZDRmNjIyM2E2OGUwZmVmNzkwYmM3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMmQvNTkwNzVlMDY4MWY1NDA0ODJkNGY2MjIzYTY4ZTBmZWY3OTBiYzcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMmQvNTkwNzVlMDY4MWY1NDA0ODJkNGY2MjIzYTY4ZTBmZWY3OTBiYzcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzMyLzU5YTZiZDViNTdmYjljMTI4MWJiN2VkMzE2N2I1MGYyMjRjYjU0IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzMyLzU5YTZiZDViNTdmYjljMTI4MWJiN2VkMzE2N2I1MGYyMjRjYjU0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzMyLzU5YTZiZDViNTdmYjljMTI4MWJiN2VkMzE2N2I1MGYyMjRjYjU0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvMzYvOTdkNjRiZTk0MWE1M2Q0YWU4ZjZhMjcxZTRlM2ZhNTZiMDIyY2MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzRhLzIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzRhLzIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzRhLzIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNGIvMjJiMzVkNDRiNWE0ZjU4OWVkZjNkYzg5MTk2Mzk5NzcxNzk2ZWEgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzRiLzIyYjM1ZDQ0YjVhNGY1ODllZGYzZGM4OTE5NjM5OTc3MTc5NmVhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNGIvMjJiMzVkNDRiNWE0ZjU4OWVkZjNkYzg5MTk2Mzk5NzcxNzk2ZWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNGIvMjJiMzVkNDRiNWE0ZjU4OWVkZjNkYzg5MTk2Mzk5NzcxNzk2ZWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzUyLzFkODdjMWVjM2FlZjk4MjRkYWY2ZDk2Y2MwYWUzNzEwNzY2ZDkxIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy81Mi8xZDg3YzFlYzNhZWY5ODI0ZGFmNmQ5NmNjMGFlMzcxMDc2NmQ5MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzUyLzFkODdjMWVjM2FlZjk4MjRkYWY2ZDk2Y2MwYWUzNzEwNzY2ZDkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzUyLzFkODdjMWVjM2FlZjk4MjRkYWY2ZDk2Y2MwYWUzNzEwNzY2ZDkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy83Ni8zZDcxYWFkZjA5YTc5NTE1OTZjOTc0NmMwMjRlN2VlY2U3YzdhZiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvNzYvM2Q3MWFhZGYwOWE3OTUxNTk2Yzk3NDZjMDI0ZTdlZWNlN2M3YWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy83Ni8zZDcxYWFkZjA5YTc5NTE1OTZjOTc0NmMwMjRlN2VlY2U3YzdhZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy83Ni8zZDcxYWFkZjA5YTc5NTE1OTZjOTc0NmMwMjRlN2VlY2U3YzdhZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvN2IvNDM4NDk3OGQyNDkzZTg1MWY5Y2NhNzg1ODgxNWZhYzliMTA5ODAgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvN2IvNDM4NDk3OGQyNDkzZTg1MWY5Y2NhNzg1ODgxNWZhYzliMTA5ODAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvN2IvNDM4NDk3OGQyNDkzZTg1MWY5Y2NhNzg1ODgxNWZhYzliMTA5ODAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvODQvOTYwNzFjMWI0NmM4NTRiMzExODVlYTk3NzQzYmU2YTg3NzQ0NzkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvODQvOWE1ZTM0YTI2ODE1ZTgyMWY4NjViODQ3OWY1ODE1YTQ3YWYwZmUgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzg0LzlhNWUzNGEyNjgxNWU4MjFmODY1Yjg0NzlmNTgxNWE0N2FmMGZlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvODQvOWE1ZTM0YTI2ODE1ZTgyMWY4NjViODQ3OWY1ODE1YTQ3YWYwZmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvODQvOWE1ZTM0YTI2ODE1ZTgyMWY4NjViODQ3OWY1ODE1YTQ3YWYwZmUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvOTQvNGMwZjZlNGRmYTQxNTk1ZTZlYjNjZWVjZGIxNGY1MGZlMTgxNjIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzlhLzAzMDc5YjhhOGVlODVhMGJlZTU4YmY5YmUzZGE4YjYyNDE0ZWQ0IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzlhLzAzMDc5YjhhOGVlODVhMGJlZTU4YmY5YmUzZGE4YjYyNDE0ZWQ0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzlhLzAzMDc5YjhhOGVlODVhMGJlZTU4YmY5YmUzZGE4YjYyNDE0ZWQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85Zi8xM2Y3ZDBhOTQwMmM2ODFmOTFkYzU5MGNmN2I1NDcwZTZhNzdkMiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvOWYvMTNmN2QwYTk0MDJjNjgxZjkxZGM1OTBjZjdiNTQ3MGU2YTc3ZDIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85Zi8xM2Y3ZDBhOTQwMmM2ODFmOTFkYzU5MGNmN2I1NDcwZTZhNzdkMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85Zi8xM2Y3ZDBhOTQwMmM2ODFmOTFkYzU5MGNmN2I1NDcwZTZhNzdkMgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYTQvYTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYTYvNWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2E2LzVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYTYvNWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYTYvNWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYTgvMjMzMTIwZjZhZDcwOGY4NDNkODYxY2UyYjcyMjhlYzRlM2RlYzYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYWUvOTBmMTJlZWE2OTk3MjllZDI0NTU1ZTQwYjlmZDY2OWRhMTJhMTIgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2FlLzkwZjEyZWVhNjk5NzI5ZWQyNDU1NWU0MGI5ZmQ2NjlkYTEyYTEyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYWUvOTBmMTJlZWE2OTk3MjllZDI0NTU1ZTQwYjlmZDY2OWRhMTJhMTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYWUvOTBmMTJlZWE2OTk3MjllZDI0NTU1ZTQwYjlmZDY2OWRhMTJhMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9iMi81ZmEzNWIzODA1MWU0YWU0NWQ0MjIyZTc5NWY5ZGYyZTQzZjFkMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYjYvMzYxZmM2YTk3MTc4ZDhmYzg2MzlmZGVlZDcxYzc3NWFiNTI1OTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2JlLzM1NjNhZTNmNzk1YjJiNDM1M2JjY2UzYTUyN2FkMGE0ZjdmNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2QwLzdiMGY5YThjODlmMWQ5ZTc0ZGM0ZmNlNjQyMWRlYzVlZjhhNjU5IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9kMC83YjBmOWE4Yzg5ZjFkOWU3NGRjNGZjZTY0MjFkZWM1ZWY4YTY1OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2QwLzdiMGY5YThjODlmMWQ5ZTc0ZGM0ZmNlNjQyMWRlYzVlZjhhNjU5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2QwLzdiMGY5YThjODlmMWQ5ZTc0ZGM0ZmNlNjQyMWRlYzVlZjhhNjU5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9kNi9jOTMxNjRjMjQ5YzgwMDAyMDVkZDRlYzVjYmNhMWI1MTZkNDg3ZiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9kNi9jOTMxNjRjMjQ5YzgwMDAyMDVkZDRlYzVjYmNhMWI1MTZkNDg3ZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9kNi9jOTMxNjRjMjQ5YzgwMDAyMDVkZDRlYzVjYmNhMWI1MTZkNDg3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZDcvMWFhYjRmOWIwNGI0NWNlMDliY2FhNjM2YTliZTYyMzE0NzQ3NTkgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2Q3LzFhYWI0ZjliMDRiNDVjZTA5YmNhYTYzNmE5YmU2MjMxNDc0NzU5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZDcvMWFhYjRmOWIwNGI0NWNlMDliY2FhNjM2YTliZTYyMzE0NzQ3NTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZDcvMWFhYjRmOWIwNGI0NWNlMDliY2FhNjM2YTliZTYyMzE0NzQ3NTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZTcvYjRhZDM4MjM0OWZmOTZkZDgxOTkwMDA1ODBiOWIxZTIwNDJlYjAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2YxLzQyNWNlZjIxMWNjMDhjYWEzMWU3YjU0NWZmYjIzMmFjYjA5OGMzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9mNi8wMDc5MDE4YjY2NGU0ZTc5MzI5YTdlZjk1NTljOGQ5ZTAzNzhkMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2ZkLzQ5NTljZTc1MTBkYjA5ZDRkODIxN2ZhMmQxNzgwNDEzZTA1YTA5IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9mZC80OTU5Y2U3NTEwZGIwOWQ0ZDgyMTdmYTJkMTc4MDQxM2UwNWEwOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2ZkLzQ5NTljZTc1MTBkYjA5ZDRkODIxN2ZhMmQxNzgwNDEzZTA1YTA5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL2ZkLzQ5NTljZTc1MTBkYjA5ZDRkODIxN2ZhMmQxNzgwNDEzZTA1YTA5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stYTgxZTQ4OTY3OWI3ZDM0MThmOWFiNTk0YmRhOGNlYjM3ZGQ0YzY5NS5pZHggYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stYTgxZTQ4OTY3OWI3ZDM0MThmOWFiNTk0YmRhOGNlYjM3ZGQ0YzY5NS5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stYTgxZTQ4OTY3OWI3ZDM0MThmOWFiNTk0YmRhOGNlYjM3ZGQ0YzY5NS5wYWNrCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUucGFjayBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUucGFjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EuaWR4IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5pZHgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EuaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5wYWNrCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EucGFjawpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9tb2R1bGVzL3N1Ym1vZHVsZS9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL21vZHVsZXMvc3VibW9kdWxlL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvbW9kdWxlcy9zdWJtb2R1bGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMDgvNTg1NjkyY2UwNjQ1MmRhNmY4MmFlNjZiOTBkOThiNTU1MzZmY2EgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzA4LzU4NTY5MmNlMDY0NTJkYTZmODJhZTY2YjkwZDk4YjU1NTM2ZmNhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMDgvNTg1NjkyY2UwNjQ1MmRhNmY4MmFlNjZiOTBkOThiNTU1MzZmY2EKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMDgvNTg1NjkyY2UwNjQ1MmRhNmY4MmFlNjZiOTBkOThiNTU1MzZmY2EKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy8yNy9iN2NlNjYyNDNlYjE0MDM4NjJkMDVmOTU4YzAwMjMxMmRmMTczZCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMjcvYjdjZTY2MjQzZWIxNDAzODYyZDA1Zjk1OGMwMDIzMTJkZjE3M2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy8yNy9iN2NlNjYyNDNlYjE0MDM4NjJkMDVmOTU4YzAwMjMxMmRmMTczZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy8yNy9iN2NlNjYyNDNlYjE0MDM4NjJkMDVmOTU4YzAwMjMxMmRmMTczZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMjgvOTA1YzU0ZWE0NWE0YmVkOGQ3YjkwZjUxYmQ4YmQ4MWVlYzg4NDAgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzI4LzkwNWM1NGVhNDVhNGJlZDhkN2I5MGY1MWJkOGJkODFlZWM4ODQwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMjgvOTA1YzU0ZWE0NWE0YmVkOGQ3YjkwZjUxYmQ4YmQ4MWVlYzg4NDAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMjgvOTA1YzU0ZWE0NWE0YmVkOGQ3YjkwZjUxYmQ4YmQ4MWVlYzg4NDAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzM2LzYyMjZmYjk3MGFjMGNhYTlkM2Y1NTk2N2FiMDEzMzRhNTQ4ZjYwIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy8zNi82MjI2ZmI5NzBhYzBjYWE5ZDNmNTU5NjdhYjAxMzM0YTU0OGY2MApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzM2LzYyMjZmYjk3MGFjMGNhYTlkM2Y1NTk2N2FiMDEzMzRhNTQ4ZjYwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzM2LzYyMjZmYjk3MGFjMGNhYTlkM2Y1NTk2N2FiMDEzMzRhNTQ4ZjYwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvMzYvZjc5YjI4NDYwMTdkMzc2MWUwYTAyZDBiY2NkNTczZTBmOTBjNTcgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzM2L2Y3OWIyODQ2MDE3ZDM3NjFlMGEwMmQwYmNjZDU3M2UwZjkwYzU3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzU3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzM2L2Y3OWIyODQ2MDE3ZDM3NjFlMGEwMmQwYmNjZDU3M2UwZjkwYzU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy81Yy8wYmIzZDFiOTQ0OWQxY2M2OWQ3NTE5ZmQwNTE2NmYwMTg0MDkxNSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvNWMvMGJiM2QxYjk0NDlkMWNjNjlkNzUxOWZkMDUxNjZmMDE4NDA5MTUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy81Yy8wYmIzZDFiOTQ0OWQxY2M2OWQ3NTE5ZmQwNTE2NmYwMTg0MDkxNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy81Yy8wYmIzZDFiOTQ0OWQxY2M2OWQ3NTE5ZmQwNTE2NmYwMTg0MDkxNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvNjEvNzgwNzk4MjI4ZDE3YWYyZDM0ZmNlNGNmYmRmMzU1NTY4MzI0NzIgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzYxLzc4MDc5ODIyOGQxN2FmMmQzNGZjZTRjZmJkZjM1NTU2ODMyNDcyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvNjEvNzgwNzk4MjI4ZDE3YWYyZDM0ZmNlNGNmYmRmMzU1NTY4MzI0NzIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvNjEvNzgwNzk4MjI4ZDE3YWYyZDM0ZmNlNGNmYmRmMzU1NTY4MzI0NzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzY0L2ZkNTVmOWI2MzkwMjAyZGI1ZTU2NjZmZDFmYjMzOTA4OWZiYTRkIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy82NC9mZDU1ZjliNjM5MDIwMmRiNWU1NjY2ZmQxZmIzMzkwODlmYmE0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzY0L2ZkNTVmOWI2MzkwMjAyZGI1ZTU2NjZmZDFmYjMzOTA4OWZiYTRkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzY0L2ZkNTVmOWI2MzkwMjAyZGI1ZTU2NjZmZDFmYjMzOTA4OWZiYTRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy83OC85ODE5MjI2MTNiMmFmYjYwMjUwNDJmZjZiZDg3OGFjMTk5NGU4NSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvNzgvOTgxOTIyNjEzYjJhZmI2MDI1MDQyZmY2YmQ4NzhhYzE5OTRlODUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy83OC85ODE5MjI2MTNiMmFmYjYwMjUwNDJmZjZiZDg3OGFjMTk5NGU4NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy83OC85ODE5MjI2MTNiMmFmYjYwMjUwNDJmZjZiZDg3OGFjMTk5NGU4NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvODAvNWM1NDUyMmU2MTRmMjlmNzBkMjQxM2EwNDcwMjQ3ZDhiNDI0YWMgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzgwLzVjNTQ1MjJlNjE0ZjI5ZjcwZDI0MTNhMDQ3MDI0N2Q4YjQyNGFjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvODAvNWM1NDUyMmU2MTRmMjlmNzBkMjQxM2EwNDcwMjQ3ZDhiNDI0YWMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvODAvNWM1NDUyMmU2MTRmMjlmNzBkMjQxM2EwNDcwMjQ3ZDhiNDI0YWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzk1LzFiYmJiOTBlMjI1OWE0Yzg5NTBkYjc4OTQ2Nzg0ZmI1M2ZjYmNlIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy85NS8xYmJiYjkwZTIyNTlhNGM4OTUwZGI3ODk0Njc4NGZiNTNmY2JjZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzk1LzFiYmJiOTBlMjI1OWE0Yzg5NTBkYjc4OTQ2Nzg0ZmI1M2ZjYmNlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzLzk1LzFiYmJiOTBlMjI1OWE0Yzg5NTBkYjc4OTQ2Nzg0ZmI1M2ZjYmNlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYTcvODcwNWMzYjI3MjVmOTMxZDNlZTA1MzQ4ZDgzY2MyNjcwMGYyNDcgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2E3Lzg3MDVjM2IyNzI1ZjkzMWQzZWUwNTM0OGQ4M2NjMjY3MDBmMjQ3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYTcvODcwNWMzYjI3MjVmOTMxZDNlZTA1MzQ4ZDgzY2MyNjcwMGYyNDcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYTcvODcwNWMzYjI3MjVmOTMxZDNlZTA1MzQ4ZDgzY2MyNjcwMGYyNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2I0LzgzYWU3YmE2NmRlY2VlOWFlZTk3MWY1MDEyMjFkZWE4NGIxNDk4IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9iNC84M2FlN2JhNjZkZWNlZTlhZWU5NzFmNTAxMjIxZGVhODRiMTQ5OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2I0LzgzYWU3YmE2NmRlY2VlOWFlZTk3MWY1MDEyMjFkZWE4NGIxNDk4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2I0LzgzYWU3YmE2NmRlY2VlOWFlZTk3MWY1MDEyMjFkZWE4NGIxNDk4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9iNC9lMWYyYjM3NWE2NGMxY2NkNDBjNWZmNmFhOGJjOTY4MzliYTRmZCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYjQvZTFmMmIzNzVhNjRjMWNjZDQwYzVmZjZhYThiYzk2ODM5YmE0ZmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9iNC9lMWYyYjM3NWE2NGMxY2NkNDBjNWZmNmFhOGJjOTY4MzliYTRmZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9iNC9lMWYyYjM3NWE2NGMxY2NkNDBjNWZmNmFhOGJjOTY4MzliYTRmZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYzEvMDQwOTEzNmE3YTc1ZTAyNWZhNTAyYTFiMmZkN2I2MmI3N2QyNzkgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2MxLzA0MDkxMzZhN2E3NWUwMjVmYTUwMmExYjJmZDdiNjJiNzdkMjc5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYzEvMDQwOTEzNmE3YTc1ZTAyNWZhNTAyYTFiMmZkN2I2MmI3N2QyNzkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvYzEvMDQwOTEzNmE3YTc1ZTAyNWZhNTAyYTFiMmZkN2I2MmI3N2QyNzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2NkLzg4MWY5MGYyOTMzZGIyZTRjYzI2YjhjNzFmZTYwMzdhYzdmZTRjIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9jZC84ODFmOTBmMjkzM2RiMmU0Y2MyNmI4YzcxZmU2MDM3YWM3ZmU0YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2NkLzg4MWY5MGYyOTMzZGIyZTRjYzI2YjhjNzFmZTYwMzdhYzdmZTRjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2NkLzg4MWY5MGYyOTMzZGIyZTRjYzI2YjhjNzFmZTYwMzdhYzdmZTRjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9kOS9iNjNhODgyMjNkODM2NzUxNmY1MGJkMTMxYTVmNzM0OWI3ZjNlNCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZDkvYjYzYTg4MjIzZDgzNjc1MTZmNTBiZDEzMWE1ZjczNDliN2YzZTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9kOS9iNjNhODgyMjNkODM2NzUxNmY1MGJkMTMxYTVmNzM0OWI3ZjNlNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9kOS9iNjNhODgyMjNkODM2NzUxNmY1MGJkMTMxYTVmNzM0OWI3ZjNlNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZGMvYWI4MzI0OWY2ZjlkMWVkNzM1ZDY1MTM1MmE4MDUxOTMzOWI1OTEgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2RjL2FiODMyNDlmNmY5ZDFlZDczNWQ2NTEzNTJhODA1MTkzMzliNTkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZGMvYWI4MzI0OWY2ZjlkMWVkNzM1ZDY1MTM1MmE4MDUxOTMzOWI1OTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZGMvYWI4MzI0OWY2ZjlkMWVkNzM1ZDY1MTM1MmE4MDUxOTMzOWI1OTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9lZS9hNGYyNzA1ZWVlYzJkYjM4MTNmMjQzMDgyOWFmY2U5OWNkMDBiNSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZWUvYTRmMjcwNWVlZWMyZGIzODEzZjI0MzA4MjlhZmNlOTljZDAwYjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiODFkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZWUvYTRmMjcwNWVlZWMyZGIzODEzZjI0MzA4MjlhZmNlOTljZDAwYjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2Y3LzhhMzEwNmM4NWZiNTQ5YzY1MTk4YjJhMjA4NjI3NmM2MTc0OTI4IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mNy84YTMxMDZjODVmYjU0OWM2NTE5OGIyYTIwODYyNzZjNjE3NDkyOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2Y3LzhhMzEwNmM4NWZiNTQ5YzY1MTk4YjJhMjA4NjI3NmM2MTc0OTI4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2Y3LzhhMzEwNmM4NWZiNTQ5YzY1MTk4YjJhMjA4NjI3NmM2MTc0OTI4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mOC9mN2FlZmMyOTAwYTNkNzM3Y2VhOWVlZTQ1NzI5ZmQ1NTc2MWUxYSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZjgvZjdhZWZjMjkwMGEzZDczN2NlYTllZWU0NTcyOWZkNTU3NjFlMWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mOC9mN2FlZmMyOTAwYTNkNzM3Y2VhOWVlZTQ1NzI5ZmQ1NTc2MWUxYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mOC9mN2FlZmMyOTAwYTNkNzM3Y2VhOWVlZTQ1NzI5ZmQ1NTc2MWUxYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZmEvMzhiOTFmMTk5OTM0Njg1ODE5YmVhMzE2MTg2ZDhiMDA4YzUyYTIgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2ZhLzM4YjkxZjE5OTkzNDY4NTgxOWJlYTMxNjE4NmQ4YjAwOGM1MmEyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZmEvMzhiOTFmMTk5OTM0Njg1ODE5YmVhMzE2MTg2ZDhiMDA4YzUyYTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZmEvMzhiOTFmMTk5OTM0Njg1ODE5YmVhMzE2MTg2ZDhiMDA4YzUyYTIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mZi84M2FhNGM1ZTVkMjhlM2JjYmEyZjVjNmUyYWRjNjEyODZhNGU1ZSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvZmYvODNhYTRjNWU1ZDI4ZTNiY2JhMmY1YzZlMmFkYzYxMjg2YTRlNWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mZi84M2FhNGM1ZTVkMjhlM2JjYmEyZjVjNmUyYWRjNjEyODZhNGU1ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mZi84M2FhNGM1ZTVkMjhlM2JjYmEyZjVjNmUyYWRjNjEyODZhNGU1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2ZmL2ZlOTVjN2ZkMGEzN2ZhMmVkNzAyZjhmOTNiNTZiMjE5NmIzOTI1IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9mZi9mZTk1YzdmZDBhMzdmYTJlZDcwMmY4ZjkzYjU2YjIxOTZiMzkyNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2ZmL2ZlOTVjN2ZkMGEzN2ZhMmVkNzAyZjhmOTNiNTZiMjE5NmIzOTI1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9vYmplY3RzL2ZmL2ZlOTVjN2ZkMGEzN2ZhMmVkNzAyZjhmOTNiNTZiMjE5NmIzOTI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9wYWNrL2R1bW15IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9wYWNrL2R1bW15CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL29iamVjdHMvcGFjay9kdW1teQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvb2JqZWN0cy9wYWNrL2R1bW15CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjEgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2IxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iMiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iMgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2IzIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2IzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2IzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2I0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iNSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvaGVhZHMvYjUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iNQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2I2IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy9oZWFkcy9iNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2I2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL2hlYWRzL2I2CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctYmxvYiBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctYmxvYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWJsb2IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctYmxvYgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWNvbW1pdCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctY29tbWl0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctY29tbWl0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWNvbW1pdApkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy90YWdzL3RhZy1jb21taXQtdHdvIGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy90YWdzL3RhZy1jb21taXQtdHdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYjM2NTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWNvbW1pdC10d28KQEAgLTAsMCArMSBAQAorMzZmNzliMjg0NjAxN2QzNzYxZTBhMDJkMGJjY2Q1NzNlMGY5MGM1NwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWxpZ2h0d2VpZ2h0IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjLy5naXR0ZWQvcmVmcy90YWdzL3RhZy1saWdodHdlaWdodApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWxpZ2h0d2VpZ2h0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLWxpZ2h0d2VpZ2h0CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLXRhZyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctdGFnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2Q3NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLXRhZwpAQCAtMCwwICsxIEBACitlZWE0ZjI3MDVlZWVjMmRiMzgxM2YyNDMwODI5YWZjZTk5Y2QwMGI1CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctdHJlZSBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctdHJlZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvLmdpdHRlZC9yZWZzL3RhZ3MvdGFnLXRyZWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy8uZ2l0dGVkL3JlZnMvdGFncy90YWctdHJlZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvYS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvYS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL2EudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvYS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL2ZvbGQvYi50eHQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvZm9sZC9iLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvZm9sZC9iLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjL2ZvbGQvYi50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL2ZvbGRiLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy9mb2xkYi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL2ZvbGRiLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjL2ZvbGRiLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvZ2l0bW9kdWxlcyBiL3Rlc3RzL3Jlc291cmNlcy9wdXNoX3NyYy9naXRtb2R1bGVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy9naXRtb2R1bGVzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvZ2l0bW9kdWxlcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlLy5naXR0ZWQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlLy5naXR0ZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS8uZ2l0dGVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlLy5naXR0ZWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9SRUFETUUgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlL1JFQURNRQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9SRUFETUUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9icmFuY2hfZmlsZS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlL2JyYW5jaF9maWxlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcHVzaF9zcmMvc3VibW9kdWxlL2JyYW5jaF9maWxlLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9icmFuY2hfZmlsZS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9uZXcudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9uZXcudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9wdXNoX3NyYy9zdWJtb2R1bGUvbmV3LnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3B1c2hfc3JjL3N1Ym1vZHVsZS9uZXcudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzAzL2RhN2FkODcyNTM2YmQ0NDhkYThkODhlYjcxNjUzMzhiZjkyM2E3IGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzAzL2RhN2FkODcyNTM2YmQ0NDhkYThkODhlYjcxNjUzMzhiZjkyM2E3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8wMy9kYTdhZDg3MjUzNmJkNDQ4ZGE4ZDg4ZWI3MTY1MzM4YmY5MjNhNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzAzL2RhN2FkODcyNTM2YmQ0NDhkYThkODhlYjcxNjUzMzhiZjkyM2E3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzE3LzU4YmRkN2MxNmE3MmZmN2MxN2Q4ZGUwYzk1N2NlZDNjY2FkNjQ1IGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzE3LzU4YmRkN2MxNmE3MmZmN2MxN2Q4ZGUwYzk1N2NlZDNjY2FkNjQ1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8xNy81OGJkZDdjMTZhNzJmZjdjMTdkOGRlMGM5NTdjZWQzY2NhZDY0NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzE3LzU4YmRkN2MxNmE3MmZmN2MxN2Q4ZGUwYzk1N2NlZDNjY2FkNjQ1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzE5L2RkMzJkZmIxNTIwYTY0ZTViYmFhZThkY2U2ZWY0MjNkZmEyZjEzIGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzE5L2RkMzJkZmIxNTIwYTY0ZTViYmFhZThkY2U2ZWY0MjNkZmEyZjEzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8xOS9kZDMyZGZiMTUyMGE2NGU1YmJhYWU4ZGNlNmVmNDIzZGZhMmYxMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzE5L2RkMzJkZmIxNTIwYTY0ZTViYmFhZThkY2U2ZWY0MjNkZmEyZjEzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8xYy8wNjhkZWU1NzkwZWYxNTgwY2ZjNGNkNjcwOTE1YjQ4ZDc5MDA4NCBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8xYy8wNjhkZWU1NzkwZWYxNTgwY2ZjNGNkNjcwOTE1YjQ4ZDc5MDA4NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvMWMvMDY4ZGVlNTc5MGVmMTU4MGNmYzRjZDY3MDkxNWI0OGQ3OTAwODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8xYy8wNjhkZWU1NzkwZWYxNTgwY2ZjNGNkNjcwOTE1YjQ4ZDc5MDA4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8yYi9jN2YzNTFkMjBiNTNmMWM3MmMxNmM0YjAzNmU0OTFjNDc4YzQ5YSBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8yYi9jN2YzNTFkMjBiNTNmMWM3MmMxNmM0YjAzNmU0OTFjNDc4YzQ5YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvMmIvYzdmMzUxZDIwYjUzZjFjNzJjMTZjNGIwMzZlNDkxYzQ3OGM0OWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8yYi9jN2YzNTFkMjBiNTNmMWM3MmMxNmM0YjAzNmU0OTFjNDc4YzQ5YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zMS9lNDdkOGMxZmEzNmQ3ZjhkNTM3Yjk2MTU4ZTNmMDI0ZGUwYTlmMiBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zMS9lNDdkOGMxZmEzNmQ3ZjhkNTM3Yjk2MTU4ZTNmMDI0ZGUwYTlmMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvMzEvZTQ3ZDhjMWZhMzZkN2Y4ZDUzN2I5NjE1OGUzZjAyNGRlMGE5ZjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zMS9lNDdkOGMxZmEzNmQ3ZjhkNTM3Yjk2MTU4ZTNmMDI0ZGUwYTlmMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zNS85Mjk1M2ZmM2VhNWU4YmE3MDBjNDI5ZjNhZWZlMzNjODgwNjc1NCBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zNS85Mjk1M2ZmM2VhNWU4YmE3MDBjNDI5ZjNhZWZlMzNjODgwNjc1NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvMzUvOTI5NTNmZjNlYTVlOGJhNzAwYzQyOWYzYWVmZTMzYzg4MDY3NTQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zNS85Mjk1M2ZmM2VhNWU4YmE3MDBjNDI5ZjNhZWZlMzNjODgwNjc1NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zNi8wMjBkYjZjZGFjYWE5MzQ5N2YzMWVkY2Q4ZjI0MmZmOWJjMzY2ZCBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zNi8wMjBkYjZjZGFjYWE5MzQ5N2YzMWVkY2Q4ZjI0MmZmOWJjMzY2ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvMzYvMDIwZGI2Y2RhY2FhOTM0OTdmMzFlZGNkOGYyNDJmZjliYzM2NmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zNi8wMjBkYjZjZGFjYWE5MzQ5N2YzMWVkY2Q4ZjI0MmZmOWJjMzY2ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zYy8wNDc0MWRkNGI5NmM0YWU0YjAwZWMwZjZlMTBjODE2YTMwYWFkMiBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zYy8wNDc0MWRkNGI5NmM0YWU0YjAwZWMwZjZlMTBjODE2YTMwYWFkMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvM2MvMDQ3NDFkZDRiOTZjNGFlNGIwMGVjMGY2ZTEwYzgxNmEzMGFhZDIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy8zYy8wNDc0MWRkNGI5NmM0YWU0YjAwZWMwZjZlMTBjODE2YTMwYWFkMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80Mi8xMGZmZDVjMzkwYjIxZGQ1NDgzMzc1ZTc1Mjg4ZGVhOWVkZTUxMiBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80Mi8xMGZmZDVjMzkwYjIxZGQ1NDgzMzc1ZTc1Mjg4ZGVhOWVkZTUxMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNDIvMTBmZmQ1YzM5MGIyMWRkNTQ4MzM3NWU3NTI4OGRlYTllZGU1MTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80Mi8xMGZmZDVjMzkwYjIxZGQ1NDgzMzc1ZTc1Mjg4ZGVhOWVkZTUxMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80NC80YTc2ZWQzZTQ1YjE4Mzc1M2Y0OTM3NmFmMzBkYThjM2ZlMjc2YSBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80NC80YTc2ZWQzZTQ1YjE4Mzc1M2Y0OTM3NmFmMzBkYThjM2ZlMjc2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNDQvNGE3NmVkM2U0NWIxODM3NTNmNDkzNzZhZjMwZGE4YzNmZTI3NmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80NC80YTc2ZWQzZTQ1YjE4Mzc1M2Y0OTM3NmFmMzBkYThjM2ZlMjc2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80Ny8xODRjMWU3ZWIyMmFiY2JlZDJiZjRlZTg3ZDRlMzgwOTZmNzk1MSBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80Ny8xODRjMWU3ZWIyMmFiY2JlZDJiZjRlZTg3ZDRlMzgwOTZmNzk1MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNDcvMTg0YzFlN2ViMjJhYmNiZWQyYmY0ZWU4N2Q0ZTM4MDk2Zjc5NTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80Ny8xODRjMWU3ZWIyMmFiY2JlZDJiZjRlZTg3ZDRlMzgwOTZmNzk1MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80ZS80Y2FlM2U3ZGQ1NmVkNzRiZmYzOTUyNmQwNDY5ZTU1NDQzMjk1MyBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80ZS80Y2FlM2U3ZGQ1NmVkNzRiZmYzOTUyNmQwNDY5ZTU1NDQzMjk1MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNGUvNGNhZTNlN2RkNTZlZDc0YmZmMzk1MjZkMDQ2OWU1NTQ0MzI5NTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy80ZS80Y2FlM2U3ZGQ1NmVkNzRiZmYzOTUyNmQwNDY5ZTU1NDQzMjk1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy81MC9lOTAyNzNhZjdkODI2ZmYwYTk1ODY1YmNkM2JhODQxMmM0NDdkOSBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy81MC9lOTAyNzNhZjdkODI2ZmYwYTk1ODY1YmNkM2JhODQxMmM0NDdkOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNTAvZTkwMjczYWY3ZDgyNmZmMGE5NTg2NWJjZDNiYTg0MTJjNDQ3ZDkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvb2JqZWN0cy81MC9lOTAyNzNhZjdkODI2ZmYwYTk1ODY1YmNkM2JhODQxMmM0NDdkOQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNWUvMjZhYmM1NmE1YTg0ZDg5NzkwZjQ1NDE2NjQ4ODk5Y2JlMTMxMDkgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNWUvMjZhYmM1NmE1YTg0ZDg5NzkwZjQ1NDE2NjQ4ODk5Y2JlMTMxMDkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzVlLzI2YWJjNTZhNWE4NGQ4OTc5MGY0NTQxNjY0ODg5OWNiZTEzMTA5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNWUvMjZhYmM1NmE1YTg0ZDg5NzkwZjQ1NDE2NjQ4ODk5Y2JlMTMxMDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNjEvOGM2ZjJmODc0MGJkNjA0OWIyZmI5ZWI5M2ZjMTU3MjY0NjI3NDUgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNjEvOGM2ZjJmODc0MGJkNjA0OWIyZmI5ZWI5M2ZjMTU3MjY0NjI3NDUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzYxLzhjNmYyZjg3NDBiZDYwNDliMmZiOWViOTNmYzE1NzI2NDYyNzQ1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNjEvOGM2ZjJmODc0MGJkNjA0OWIyZmI5ZWI5M2ZjMTU3MjY0NjI3NDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNjYvMzExZjVjZmJlNzgzNmMyNzUxMGEzYmEyZjQzZTI4MmUyYzhiYmEgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNjYvMzExZjVjZmJlNzgzNmMyNzUxMGEzYmEyZjQzZTI4MmUyYzhiYmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzY2LzMxMWY1Y2ZiZTc4MzZjMjc1MTBhM2JhMmY0M2UyODJlMmM4YmJhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvNjYvMzExZjVjZmJlNzgzNmMyNzUxMGEzYmEyZjQzZTI4MmUyYzhiYmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvOTMvZjUzOGM0NWE1N2E4N2ViNGMxZTg2ZjkxYzZlZTQxZDY2YzdiYTcgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvOTMvZjUzOGM0NWE1N2E4N2ViNGMxZTg2ZjkxYzZlZTQxZDY2YzdiYTcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzkzL2Y1MzhjNDVhNTdhODdlYjRjMWU4NmY5MWM2ZWU0MWQ2NmM3YmE3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvOTMvZjUzOGM0NWE1N2E4N2ViNGMxZTg2ZjkxYzZlZTQxZDY2YzdiYTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvOWEvNjlkOTYwYWU5NGIwNjBmNTZjMmE4NzAyNTQ1ZTJiYjFhYmI5MzUgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvOWEvNjlkOTYwYWU5NGIwNjBmNTZjMmE4NzAyNTQ1ZTJiYjFhYmI5MzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzLzlhLzY5ZDk2MGFlOTRiMDYwZjU2YzJhODcwMjU0NWUyYmIxYWJiOTM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvOWEvNjlkOTYwYWU5NGIwNjBmNTZjMmE4NzAyNTQ1ZTJiYjFhYmI5MzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvYWQvMGE4ZTU1YTEwNGFjNTRhOGEyOWVkNGI4NGI0OWU3NjgzN2ExMTMgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvYWQvMGE4ZTU1YTEwNGFjNTRhOGEyOWVkNGI4NGI0OWU3NjgzN2ExMTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzL2FkLzBhOGU1NWExMDRhYzU0YThhMjllZDRiODRiNDllNzY4MzdhMTEzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvYWQvMGE4ZTU1YTEwNGFjNTRhOGEyOWVkNGI4NGI0OWU3NjgzN2ExMTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvYjkvMjViMjI0Y2M5MWY4OTcwMDFhOTk5M2ZiY2UxNjlmZGFhODg1OGYgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvYjkvMjViMjI0Y2M5MWY4OTcwMDFhOTk5M2ZiY2UxNjlmZGFhODg1OGYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzL2I5LzI1YjIyNGNjOTFmODk3MDAxYTk5OTNmYmNlMTY5ZmRhYTg4NThmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvYjkvMjViMjI0Y2M5MWY4OTcwMDFhOTk5M2ZiY2UxNjlmZGFhODg1OGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZDcvOWIyMDJkZTE5OGZhNjFiMDI0MjRiOWUyNWU4NDBkYzc1ZTEzMjMgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZDcvOWIyMDJkZTE5OGZhNjFiMDI0MjRiOWUyNWU4NDBkYzc1ZTEzMjMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzL2Q3LzliMjAyZGUxOThmYTYxYjAyNDI0YjllMjVlODQwZGM3NWUxMzIzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZDcvOWIyMDJkZTE5OGZhNjFiMDI0MjRiOWUyNWU4NDBkYzc1ZTEzMjMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZWEvYzQzZjUxOTVhMmNlZTUzYjc0NThkOGRhZDE2YWVkZGUxMDcxMWIgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZWEvYzQzZjUxOTVhMmNlZTUzYjc0NThkOGRhZDE2YWVkZGUxMDcxMWIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzL2VhL2M0M2Y1MTk1YTJjZWU1M2I3NDU4ZDhkYWQxNmFlZGRlMTA3MTFiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZWEvYzQzZjUxOTVhMmNlZTUzYjc0NThkOGRhZDE2YWVkZGUxMDcxMWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZWEvZjRhM2UzYmZlNjg1ODVlOTBjYWRhMjA3MzZhY2U0OTFjZDEwMGIgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZWEvZjRhM2UzYmZlNjg1ODVlOTBjYWRhMjA3MzZhY2U0OTFjZDEwMGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzL2VhL2Y0YTNlM2JmZTY4NTg1ZTkwY2FkYTIwNzM2YWNlNDkxY2QxMDBiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZWEvZjRhM2UzYmZlNjg1ODVlOTBjYWRhMjA3MzZhY2U0OTFjZDEwMGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZjkvMGQ0ZmMyMGVjZGRmMjFlZWJlNmEzN2U5MjI1ZDI0NDMzOWQyYjUgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZjkvMGQ0ZmMyMGVjZGRmMjFlZWJlNmEzN2U5MjI1ZDI0NDMzOWQyYjUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9vYmplY3RzL2Y5LzBkNGZjMjBlY2RkZjIxZWViZTZhMzdlOTIyNWQyNDQzMzlkMmI1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL29iamVjdHMvZjkvMGQ0ZmMyMGVjZGRmMjFlZWJlNmEzN2U5MjI1ZDI0NDMzOWQyYjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVzX3NpbWlsYXIgYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lc19zaW1pbGFyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVzX3NpbWlsYXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzLy5naXR0ZWQvcmVmcy9oZWFkcy9yZW5hbWVzX3NpbWlsYXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZXNfc2ltaWxhcl90d28gYi90ZXN0cy9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lc19zaW1pbGFyX3R3bwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy8uZ2l0dGVkL3JlZnMvaGVhZHMvcmVuYW1lc19zaW1pbGFyX3R3bwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvLmdpdHRlZC9yZWZzL2hlYWRzL3JlbmFtZXNfc2ltaWxhcl90d28KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvaWtlZXBzaXgudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvaWtlZXBzaXgudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzL2lrZWVwc2l4LnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvaWtlZXBzaXgudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzL3NpeHNlcnZpbmcudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvc2l4c2VydmluZy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvc2l4c2VydmluZy50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzL3NpeHNlcnZpbmcudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3JlbmFtZXMvc29uZ29mN2NpdGllcy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3JlbmFtZXMvc29uZ29mN2NpdGllcy50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzL3NvbmdvZjdjaXRpZXMudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9yZW5hbWVzL3VudGltZWx5LnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9yZW5hbWVzL3VudGltZWx5LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvcmVuYW1lcy91bnRpbWVseS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9yZW5hbWVzL3VudGltZWx5LnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zaGFsbG93LmdpdC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zaGFsbG93LmdpdC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3NoYWxsb3cuZ2l0L2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zaGFsbG93LmdpdC9vYmplY3RzL3BhY2svcGFjay03MDZlNDliMTYxNzAwOTQ2NDg5NTcwZDk2MTUzZTViZTRkYzMxYWQ0LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9zaGFsbG93LmdpdC9vYmplY3RzL3BhY2svcGFjay03MDZlNDliMTYxNzAwOTQ2NDg5NTcwZDk2MTUzZTViZTRkYzMxYWQ0LmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvb2JqZWN0cy9wYWNrL3BhY2stNzA2ZTQ5YjE2MTcwMDk0NjQ4OTU3MGQ5NjE1M2U1YmU0ZGMzMWFkNC5pZHgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zaGFsbG93LmdpdC9vYmplY3RzL3BhY2svcGFjay03MDZlNDliMTYxNzAwOTQ2NDg5NTcwZDk2MTUzZTViZTRkYzMxYWQ0LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zaGFsbG93LmdpdC9vYmplY3RzL3BhY2svcGFjay03MDZlNDliMTYxNzAwOTQ2NDg5NTcwZDk2MTUzZTViZTRkYzMxYWQ0LnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvb2JqZWN0cy9wYWNrL3BhY2stNzA2ZTQ5YjE2MTcwMDk0NjQ4OTU3MGQ5NjE1M2U1YmU0ZGMzMWFkNC5wYWNrCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zaGFsbG93LmdpdC9vYmplY3RzL3BhY2svcGFjay03MDZlNDliMTYxNzAwOTQ2NDg5NTcwZDk2MTUzZTViZTRkYzMxYWQ0LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zaGFsbG93LmdpdC9vYmplY3RzL3BhY2svcGFjay03MDZlNDliMTYxNzAwOTQ2NDg5NTcwZDk2MTUzZTViZTRkYzMxYWQ0LnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3NoYWxsb3cuZ2l0L3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3NoYWxsb3cuZ2l0L3JlZnMvLmdpdGtlZXAgYi90ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvcmVmcy8uZ2l0a2VlcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvcmVmcy8uZ2l0a2VlcApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3NoYWxsb3cuZ2l0L3JlZnMvLmdpdGtlZXAKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3NoYWxsb3cuZ2l0L3NoYWxsb3cgYi90ZXN0cy9yZXNvdXJjZXMvc2hhbGxvdy5naXQvc2hhbGxvdwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hhbGxvdy5naXQvc2hhbGxvdwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3NoYWxsb3cuZ2l0L3NoYWxsb3cKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zaG9ydF90YWcuZ2l0L0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzLzRhLzVlZDYwYmFmY2Y0NjM4YjdjODM1NmJkNGNlMTkxNmJmZWRlOTNjIGIvdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvb2JqZWN0cy80YS81ZWQ2MGJhZmNmNDYzOGI3YzgzNTZiZDRjZTE5MTZiZmVkZTkzYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzLzRhLzVlZDYwYmFmY2Y0NjM4YjdjODM1NmJkNGNlMTkxNmJmZWRlOTNjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzLzRhLzVlZDYwYmFmY2Y0NjM4YjdjODM1NmJkNGNlMTkxNmJmZWRlOTNjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvb2JqZWN0cy80ZC81ZmNhZGMyOTNhMzQ4ZTg4Zjc3N2RjMDkyMGYxMWU3ZDcxNDQxYyBiL3Rlc3RzL3Jlc291cmNlcy9zaG9ydF90YWcuZ2l0L29iamVjdHMvNGQvNWZjYWRjMjkzYTM0OGU4OGY3NzdkYzA5MjBmMTFlN2Q3MTQ0MWMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvb2JqZWN0cy80ZC81ZmNhZGMyOTNhMzQ4ZTg4Zjc3N2RjMDkyMGYxMWU3ZDcxNDQxYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvb2JqZWN0cy80ZC81ZmNhZGMyOTNhMzQ4ZTg4Zjc3N2RjMDkyMGYxMWU3ZDcxNDQxYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zaG9ydF90YWcuZ2l0L29iamVjdHMvNWQvYTc3NjA1MTJhOTUzZTNjN2M0ZTQ3ZTQzOTJjN2E0MzM4ZmI3MjkgYi90ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzLzVkL2E3NzYwNTEyYTk1M2UzYzdjNGU0N2U0MzkyYzdhNDMzOGZiNzI5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zaG9ydF90YWcuZ2l0L29iamVjdHMvNWQvYTc3NjA1MTJhOTUzZTNjN2M0ZTQ3ZTQzOTJjN2E0MzM4ZmI3MjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zaG9ydF90YWcuZ2l0L29iamVjdHMvNWQvYTc3NjA1MTJhOTUzZTNjN2M0ZTQ3ZTQzOTJjN2E0MzM4ZmI3MjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc2hvcnRfdGFnLmdpdC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Nob3J0X3RhZy5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9DT01NSVRfRURJVE1TRwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL0NPTU1JVF9FRElUTVNHCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9PUklHX0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvT1JJR19IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9PUklHX0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9PUklHX0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzAwLzE3YmQ0YWIxZWMzMDQ0MGIxN2JhZTE2ODBjZmYxMjRhYjVmMWY2IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMDAvMTdiZDRhYjFlYzMwNDQwYjE3YmFlMTY4MGNmZjEyNGFiNWYxZjYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMDAvMTdiZDRhYjFlYzMwNDQwYjE3YmFlMTY4MGNmZjEyNGFiNWYxZjYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzAwLzE3YmQ0YWIxZWMzMDQ0MGIxN2JhZTE2ODBjZmYxMjRhYjVmMWY2CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzA2LzFkNDJhNDRjYWNkZTU3MjYwNTdiNjc1NTg4MjFkOTVkYjk2ZjE5IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMDYvMWQ0MmE0NGNhY2RlNTcyNjA1N2I2NzU1ODgyMWQ5NWRiOTZmMTkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMDYvMWQ0MmE0NGNhY2RlNTcyNjA1N2I2NzU1ODgyMWQ5NWRiOTZmMTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzA2LzFkNDJhNDRjYWNkZTU3MjYwNTdiNjc1NTg4MjFkOTVkYjk2ZjE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMTgvODhjODA1MzQ1YmEyNjViMGVlOTQ0OWI4ODc3YjYwNjQ1OTIwNTggYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8xOC84OGM4MDUzNDViYTI2NWIwZWU5NDQ5Yjg4NzdiNjA2NDU5MjA1OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8xOC84OGM4MDUzNDViYTI2NWIwZWU5NDQ5Yjg4NzdiNjA2NDU5MjA1OApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMTgvODhjODA1MzQ1YmEyNjViMGVlOTQ0OWI4ODc3YjYwNjQ1OTIwNTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8xOS9kOWNjODU4NGFjMmM3ZGNmNTdkMjY4MDM3NWU4MGYwOTlkYzQ4MSBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzE5L2Q5Y2M4NTg0YWMyYzdkY2Y1N2QyNjgwMzc1ZTgwZjA5OWRjNDgxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzE5L2Q5Y2M4NTg0YWMyYzdkY2Y1N2QyNjgwMzc1ZTgwZjA5OWRjNDgxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8xOS9kOWNjODU4NGFjMmM3ZGNmNTdkMjY4MDM3NWU4MGYwOTlkYzQ4MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzI2L2ExMjVlZTFiZmM1ZGYxZTFiMmU5NDQxYmJlNjNjOGE3YWU5ODlmIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMjYvYTEyNWVlMWJmYzVkZjFlMWIyZTk0NDFiYmU2M2M4YTdhZTk4OWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMjYvYTEyNWVlMWJmYzVkZjFlMWIyZTk0NDFiYmU2M2M4YTdhZTk4OWYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzI2L2ExMjVlZTFiZmM1ZGYxZTFiMmU5NDQxYmJlNjNjOGE3YWU5ODlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMzIvNTA0YjcyNzM4MjU0MmY5ZjA4OWUyNGZkZGFjNWU3ODUzM2U5NmMgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8zMi81MDRiNzI3MzgyNTQyZjlmMDg5ZTI0ZmRkYWM1ZTc4NTMzZTk2YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8zMi81MDRiNzI3MzgyNTQyZjlmMDg5ZTI0ZmRkYWM1ZTc4NTMzZTk2YwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvMzIvNTA0YjcyNzM4MjU0MmY5ZjA4OWUyNGZkZGFjNWU3ODUzM2U5NmMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8zNy9mY2IwMmNjYzFhODVkMTk0MWU3ZjEwNmQ1MmRjMzcwMmRjZjBkMCBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzM3L2ZjYjAyY2NjMWE4NWQxOTQxZTdmMTA2ZDUyZGMzNzAyZGNmMGQwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzM3L2ZjYjAyY2NjMWE4NWQxOTQxZTdmMTA2ZDUyZGMzNzAyZGNmMGQwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy8zNy9mY2IwMmNjYzFhODVkMTk0MWU3ZjEwNmQ1MmRjMzcwMmRjZjBkMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzQ1LzJlNDI0NGI1ZDA4M2RkZjA0NjBhY2YxZWNjNzRkYjlkY2ZhMTFhIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNDUvMmU0MjQ0YjVkMDgzZGRmMDQ2MGFjZjFlY2M3NGRiOWRjZmExMWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNDUvMmU0MjQ0YjVkMDgzZGRmMDQ2MGFjZjFlY2M3NGRiOWRjZmExMWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzQ1LzJlNDI0NGI1ZDA4M2RkZjA0NjBhY2YxZWNjNzRkYjlkY2ZhMTFhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNTIvOWExNmU4ZTc2MmQ0YWNiN2I5NjM2ZmY1NDBhMDA4MzFmOTE1NWEgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy81Mi85YTE2ZThlNzYyZDRhY2I3Yjk2MzZmZjU0MGEwMDgzMWY5MTU1YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy81Mi85YTE2ZThlNzYyZDRhY2I3Yjk2MzZmZjU0MGEwMDgzMWY5MTU1YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNTIvOWExNmU4ZTc2MmQ0YWNiN2I5NjM2ZmY1NDBhMDA4MzFmOTE1NWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy81My9hY2UwZDFjYzExNDVhNWY0ZmU0Zjc4YTE4NmE2MDI2MzE5MDczMyBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzUzL2FjZTBkMWNjMTE0NWE1ZjRmZTRmNzhhMTg2YTYwMjYzMTkwNzMzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzUzL2FjZTBkMWNjMTE0NWE1ZjRmZTRmNzhhMTg2YTYwMjYzMTkwNzMzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy81My9hY2UwZDFjYzExNDVhNWY0ZmU0Zjc4YTE4NmE2MDI2MzE5MDczMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzU0LzUyZDMyZjFkZDUzOGViMDQwNWU4YTgzY2MxODVmNzllMjVlODBmIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNTQvNTJkMzJmMWRkNTM4ZWIwNDA1ZThhODNjYzE4NWY3OWUyNWU4MGYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNTQvNTJkMzJmMWRkNTM4ZWIwNDA1ZThhODNjYzE4NWY3OWUyNWU4MGYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzU0LzUyZDMyZjFkZDUzOGViMDQwNWU4YTgzY2MxODVmNzllMjVlODBmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNTUvZDMxNmM5YmE3MDg5OTlmMTkxOGU5Njc3ZDAxZGZjYWU2OWM2YjkgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy81NS9kMzE2YzliYTcwODk5OWYxOTE4ZTk2NzdkMDFkZmNhZTY5YzZiOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy81NS9kMzE2YzliYTcwODk5OWYxOTE4ZTk2NzdkMDFkZmNhZTY5YzZiOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNTUvZDMxNmM5YmE3MDg5OTlmMTkxOGU5Njc3ZDAxZGZjYWU2OWM2YjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy83MC9iZDk0NDNhZGEwNzA2M2U3ZmJmMGIzZmY1YzEzZjc0OTRkODljMiBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzcwL2JkOTQ0M2FkYTA3MDYzZTdmYmYwYjNmZjVjMTNmNzQ5NGQ4OWMyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzcwL2JkOTQ0M2FkYTA3MDYzZTdmYmYwYjNmZjVjMTNmNzQ5NGQ4OWMyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy83MC9iZDk0NDNhZGEwNzA2M2U3ZmJmMGIzZmY1YzEzZjc0OTRkODljMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzczLzViNmEyNThjZDE5NmE4ZjdjOTQyODQxOWIwMmMxZGNhOTNmZDc1IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNzMvNWI2YTI1OGNkMTk2YThmN2M5NDI4NDE5YjAyYzFkY2E5M2ZkNzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNzMvNWI2YTI1OGNkMTk2YThmN2M5NDI4NDE5YjAyYzFkY2E5M2ZkNzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzczLzViNmEyNThjZDE5NmE4ZjdjOTQyODQxOWIwMmMxZGNhOTNmZDc1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNzUvNmUyNzYyN2U2N2JmYmMwNDhkMDFlY2U1ODE5YzZkZTczM2Q3ZWEgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy83NS82ZTI3NjI3ZTY3YmZiYzA0OGQwMWVjZTU4MTljNmRlNzMzZDdlYQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy83NS82ZTI3NjI3ZTY3YmZiYzA0OGQwMWVjZTU4MTljNmRlNzMzZDdlYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvNzUvNmUyNzYyN2U2N2JmYmMwNDhkMDFlY2U1ODE5YzZkZTczM2Q3ZWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy85MC82ZWU3NzExZjRmNDkyOGRkY2IyYTVmOGZiYzUwMGRlYmEwZDJhOCBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzkwLzZlZTc3MTFmNGY0OTI4ZGRjYjJhNWY4ZmJjNTAwZGViYTBkMmE4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzkwLzZlZTc3MTFmNGY0OTI4ZGRjYjJhNWY4ZmJjNTAwZGViYTBkMmE4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy85MC82ZWU3NzExZjRmNDkyOGRkY2IyYTVmOGZiYzUwMGRlYmEwZDJhOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzkwL2I4YzI5ZDhiYTM5NDM0ZDFjNjNlMWIwOTNkYWFhMjZlNWJkOTcyIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvOTAvYjhjMjlkOGJhMzk0MzRkMWM2M2UxYjA5M2RhYWEyNmU1YmQ5NzIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvOTAvYjhjMjlkOGJhMzk0MzRkMWM2M2UxYjA5M2RhYWEyNmU1YmQ5NzIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzLzkwL2I4YzI5ZDhiYTM5NDM0ZDFjNjNlMWIwOTNkYWFhMjZlNWJkOTcyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvOWMvMmUwMmNkZmZhOGQ3M2U2YzE4OTA3NDU5NDQ3N2E2YmFmODc5NjAgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy85Yy8yZTAyY2RmZmE4ZDczZTZjMTg5MDc0NTk0NDc3YTZiYWY4Nzk2MApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy85Yy8yZTAyY2RmZmE4ZDczZTZjMTg5MDc0NTk0NDc3YTZiYWY4Nzk2MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvOWMvMmUwMmNkZmZhOGQ3M2U2YzE4OTA3NDU5NDQ3N2E2YmFmODc5NjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9hMC9kZTdlMGFjMjAwYzQ4OWM0MWM1OWRmYTkxMDE1NGE3MDI2NGU2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2EwL2RlN2UwYWMyMDBjNDg5YzQxYzU5ZGZhOTEwMTU0YTcwMjY0ZTZlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2EwL2RlN2UwYWMyMDBjNDg5YzQxYzU5ZGZhOTEwMTU0YTcwMjY0ZTZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9hMC9kZTdlMGFjMjAwYzQ4OWM0MWM1OWRmYTkxMDE1NGE3MDI2NGU2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2E2LzE5MTk4MjcwOWI3NDZkNTY1MGU5M2MyYWNmMzRlZjc0ZTExNTA0IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvYTYvMTkxOTgyNzA5Yjc0NmQ1NjUwZTkzYzJhY2YzNGVmNzRlMTE1MDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvYTYvMTkxOTgyNzA5Yjc0NmQ1NjUwZTkzYzJhY2YzNGVmNzRlMTE1MDQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2E2LzE5MTk4MjcwOWI3NDZkNTY1MGU5M2MyYWNmMzRlZjc0ZTExNTA0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvYTYvYmU2MjM1MjJjZTg3YTFkODYyMTI4YWM0MjY3MjYwNGY3YjQ2OGIgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9hNi9iZTYyMzUyMmNlODdhMWQ4NjIxMjhhYzQyNjcyNjA0ZjdiNDY4YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9hNi9iZTYyMzUyMmNlODdhMWQ4NjIxMjhhYzQyNjcyNjA0ZjdiNDY4YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvYTYvYmU2MjM1MjJjZTg3YTFkODYyMTI4YWM0MjY3MjYwNGY3YjQ2OGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9hYS8yN2E2NDE0NTY4NDgyMDBmZGI3ZjdjOTliYTM2ZjhhMDk1Mjg3NyBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2FhLzI3YTY0MTQ1Njg0ODIwMGZkYjdmN2M5OWJhMzZmOGEwOTUyODc3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2FhLzI3YTY0MTQ1Njg0ODIwMGZkYjdmN2M5OWJhMzZmOGEwOTUyODc3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9hYS8yN2E2NDE0NTY4NDgyMDBmZGI3ZjdjOTliYTM2ZjhhMDk1Mjg3NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2RhL2JjOGFmOWJkNmU5ZjViYmU5NmExNzZmMWEyNGJhZjNkMWY4OTE2IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvZGEvYmM4YWY5YmQ2ZTlmNWJiZTk2YTE3NmYxYTI0YmFmM2QxZjg5MTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvZGEvYmM4YWY5YmQ2ZTlmNWJiZTk2YTE3NmYxYTI0YmFmM2QxZjg5MTYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2RhL2JjOGFmOWJkNmU5ZjViYmU5NmExNzZmMWEyNGJhZjNkMWY4OTE2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvZTgvZWU4OWUxNWJiZTliMjAxMzc3MTUyMzIzODdiM2RlNWIyODk3MmUgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9lOC9lZTg5ZTE1YmJlOWIyMDEzNzcxNTIzMjM4N2IzZGU1YjI4OTcyZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9lOC9lZTg5ZTE1YmJlOWIyMDEzNzcxNTIzMjM4N2IzZGU1YjI4OTcyZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvZTgvZWU4OWUxNWJiZTliMjAxMzc3MTUyMzIzODdiM2RlNWIyODk3MmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9lOS9iOTEwN2YyOTA2MjdjMDRkMDk3NzMzYTEwMDU1YWY5NDFmNmJjYSBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2U5L2I5MTA3ZjI5MDYyN2MwNGQwOTc3MzNhMTAwNTVhZjk0MWY2YmNhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2U5L2I5MTA3ZjI5MDYyN2MwNGQwOTc3MzNhMTAwNTVhZjk0MWY2YmNhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzLy5naXR0ZWQvb2JqZWN0cy9lOS9iOTEwN2YyOTA2MjdjMDRkMDk3NzMzYTEwMDU1YWY5NDFmNmJjYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2VkLzA2MjkwM2I4ZjZmM2RjY2IyZmE4MTExN2JhNjU5MDk0NGVmOWJkIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvZWQvMDYyOTAzYjhmNmYzZGNjYjJmYTgxMTE3YmE2NTkwOTQ0ZWY5YmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL29iamVjdHMvZWQvMDYyOTAzYjhmNmYzZGNjYjJmYTgxMTE3YmE2NTkwOTQ0ZWY5YmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9vYmplY3RzL2VkLzA2MjkwM2I4ZjZmM2RjY2IyZmE4MTExN2JhNjU5MDk0NGVmOWJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvY3VycmVudF9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9jdXJyZW50X2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9jdXJyZW50X2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvY3VycmVudF9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvaWdub3JlZF9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9pZ25vcmVkX2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9pZ25vcmVkX2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvaWdub3JlZF9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvbW9kaWZpZWRfZmlsZSBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvbW9kaWZpZWRfZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL21vZGlmaWVkX2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvbW9kaWZpZWRfZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL25ld19maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9uZXdfZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL25ld19maWxlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzL25ld19maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX2NoYW5nZXMgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzL3N0YWdlZF9jaGFuZ2VzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX2NoYW5nZXMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX2NoYW5nZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX2NoYW5nZXNfbW9kaWZpZWRfZmlsZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX2RlbGV0ZV9tb2RpZmllZF9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfZGVsZXRlX21vZGlmaWVkX2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfZGVsZXRlX21vZGlmaWVkX2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX2RlbGV0ZV9tb2RpZmllZF9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX25ld19maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfbmV3X2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9zdGFnZWRfbmV3X2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX25ld19maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX25ld19maWxlX21vZGlmaWVkX2ZpbGUgYi90ZXN0cy9yZXNvdXJjZXMvc3RhdHVzL3N0YWdlZF9uZXdfZmlsZV9tb2RpZmllZF9maWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX25ld19maWxlX21vZGlmaWVkX2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3RhZ2VkX25ld19maWxlX21vZGlmaWVkX2ZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9zdWJkaXIudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdWJkaXIudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3ViZGlyLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdWJkaXIudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3ViZGlyL2N1cnJlbnRfZmlsZSBiL3Rlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3ViZGlyL2N1cnJlbnRfZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL3N1YmRpci9jdXJyZW50X2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3ViZGlyL2N1cnJlbnRfZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL3N1YmRpci9tb2RpZmllZF9maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdWJkaXIvbW9kaWZpZWRfZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL3N1YmRpci9tb2RpZmllZF9maWxlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzL3N1YmRpci9tb2RpZmllZF9maWxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdGF0dXMvc3ViZGlyL25ld19maWxlIGIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9zdWJkaXIvbmV3X2ZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N0YXR1cy9zdWJkaXIvbmV3X2ZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMvc3ViZGlyL25ld19maWxlCmRpZmYgLS1naXQgImEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL1wzNTBcMjc3XDIzMSIgImIvdGVzdHMvcmVzb3VyY2VzL3N0YXR1cy9cMzUwXDI3N1wyMzEiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSAidGVzdHMtY2xhci9yZXNvdXJjZXMvc3RhdHVzL1wzNTBcMjc3XDIzMSIKcmVuYW1lIHRvICJ0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzL1wzNTBcMjc3XDIzMSIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9sb2dzL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9sb2dzL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvcGFja2VkLXJlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfZmlsZS9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2ZpbGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9maWxlL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL0NPTU1JVF9FRElUTVNHIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9DT01NSVRfRURJVE1TRwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL0NPTU1JVF9FRElUTVNHCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL0NPTU1JVF9FRElUTVNHCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvM2QvOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDcgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvM2QvOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzNkLzkzODZjNTA3ZjZiMDkzNDcxYTNlMzI0MDg1NjU3YTNjMmI0MjQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvM2QvOTM4NmM1MDdmNmIwOTM0NzFhM2UzMjQwODU2NTdhM2MyYjQyNDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzc3L2ZiMGVkM2U1ODU2OGQ2YWQzNjJjNzhkZTA4YWI4NjQ5ZDc2ZTI5IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzc3L2ZiMGVkM2U1ODU2OGQ2YWQzNjJjNzhkZTA4YWI4NjQ5ZDc2ZTI5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy83Ny9mYjBlZDNlNTg1NjhkNmFkMzYyYzc4ZGUwOGFiODY0OWQ3NmUyOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzc3L2ZiMGVkM2U1ODU2OGQ2YWQzNjJjNzhkZTA4YWI4NjQ5ZDc2ZTI5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy84ZS9iMWU2MzdlZDlmYzhlNTQ1NGZhMjBkMzhmODA5MDkxZjkzOTVmNCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy84ZS9iMWU2MzdlZDlmYzhlNTQ1NGZhMjBkMzhmODA5MDkxZjkzOTVmNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvOGUvYjFlNjM3ZWQ5ZmM4ZTU0NTRmYTIwZDM4ZjgwOTA5MWY5Mzk1ZjQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvb2JqZWN0cy84ZS9iMWU2MzdlZDlmYzhlNTQ1NGZhMjBkMzhmODA5MDkxZjkzOTVmNApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2hlYWQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9oZWFkL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaGVhZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvYTAvMmQzMTc3MDY4Nzk2NTU0N2FiN2EwNGNlZTE5OWIyOWVlNDU4ZDYgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzL2EwLzJkMzE3NzA2ODc5NjU1NDdhYjdhMDRjZWUxOTliMjllZTQ1OGQ2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvYTAvMmQzMTc3MDY4Nzk2NTU0N2FiN2EwNGNlZTE5OWIyOWVlNDU4ZDYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L29iamVjdHMvYTAvMmQzMTc3MDY4Nzk2NTU0N2FiN2EwNGNlZTE5OWIyOWVlNDU4ZDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF9pbmRleC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX2luZGV4L3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfaW5kZXgvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2xvZ3MvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2xvZ3MvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvcGFja2VkLXJlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX21pc3NpbmdfY29tbWl0cy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV9taXNzaW5nX2NvbW1pdHMvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fbWlzc2luZ19jb21taXRzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9sb2dzL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9sb2dzL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvbW9kdWxlcy9zbV91bmNoYW5nZWQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL21vZHVsZXMvc21fdW5jaGFuZ2VkL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9tb2R1bGVzL3NtX3VuY2hhbmdlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzA5LzQ2MGU1YjZjYmNiMDVhM2U0MDQ1OTNjMzJhM2FhNzIyMWVjYTBlIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzA5LzQ2MGU1YjZjYmNiMDVhM2U0MDQ1OTNjMzJhM2FhNzIyMWVjYTBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8wOS80NjBlNWI2Y2JjYjA1YTNlNDA0NTkzYzMyYTNhYTcyMjFlY2EwZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzA5LzQ2MGU1YjZjYmNiMDVhM2U0MDQ1OTNjMzJhM2FhNzIyMWVjYTBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzE0L2ZlOWNjZjEwNDA1OGRmMjVlMGEwODM2MWM0NDk0ZTE2N2VmMjQzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzE0L2ZlOWNjZjEwNDA1OGRmMjVlMGEwODM2MWM0NDk0ZTE2N2VmMjQzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8xNC9mZTljY2YxMDQwNThkZjI1ZTBhMDgzNjFjNDQ5NGUxNjdlZjI0MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzE0L2ZlOWNjZjEwNDA1OGRmMjVlMGEwODM2MWM0NDk0ZTE2N2VmMjQzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yMi9jZTNlMDMxMWRkYTczYTU5OTJkNTRhNGE1OTU1MThkMzg3NmVhNyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yMi9jZTNlMDMxMWRkYTczYTU5OTJkNTRhNGE1OTU1MThkMzg3NmVhNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvMjIvY2UzZTAzMTFkZGE3M2E1OTkyZDU0YTRhNTk1NTE4ZDM4NzZlYTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yMi9jZTNlMDMxMWRkYTczYTU5OTJkNTRhNGE1OTU1MThkMzg3NmVhNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yNS81NTQ2NDI0YjBlZmI4NDdiMWJmYzkxZGJmNzM0OGIyNzdmODk3MCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yNS81NTQ2NDI0YjBlZmI4NDdiMWJmYzkxZGJmNzM0OGIyNzdmODk3MApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvMjUvNTU0NjQyNGIwZWZiODQ3YjFiZmM5MWRiZjczNDhiMjc3Zjg5NzAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yNS81NTQ2NDI0YjBlZmI4NDdiMWJmYzkxZGJmNzM0OGIyNzdmODk3MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yYS8zMGYxZTZmOTRiMjA5MTcwMDVhMjEyNzNmNjViNDA2ZDBmOGJhZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yYS8zMGYxZTZmOTRiMjA5MTcwMDVhMjEyNzNmNjViNDA2ZDBmOGJhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvMmEvMzBmMWU2Zjk0YjIwOTE3MDA1YTIxMjczZjY1YjQwNmQwZjhiYWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy8yYS8zMGYxZTZmOTRiMjA5MTcwMDVhMjEyNzNmNjViNDA2ZDBmOGJhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy80Mi9jZmI5NWNkMDFiZjkyMjViNjU5YjVlZTNlZGNjNzhlOGVlYjQ3OCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy80Mi9jZmI5NWNkMDFiZjkyMjViNjU5YjVlZTNlZGNjNzhlOGVlYjQ3OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNDIvY2ZiOTVjZDAxYmY5MjI1YjY1OWI1ZWUzZWRjYzc4ZThlZWI0NzgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy80Mi9jZmI5NWNkMDFiZjkyMjViNjU5YjVlZTNlZGNjNzhlOGVlYjQ3OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy81Ny85NTg2OTljMmRjMzk0ZjgxY2ZjNzY5NTBlOWMzYWMzMDI1YzM5OCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy81Ny85NTg2OTljMmRjMzk0ZjgxY2ZjNzY5NTBlOWMzYWMzMDI1YzM5OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNTcvOTU4Njk5YzJkYzM5NGY4MWNmYzc2OTUwZTljM2FjMzAyNWMzOTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy81Ny85NTg2OTljMmRjMzk0ZjgxY2ZjNzY5NTBlOWMzYWMzMDI1YzM5OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy81OS8wMWRhNGYxYzY3NzU2ZWVhZGM1MTIxZDIwNmJlYzI0MzFmMjUzYiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy81OS8wMWRhNGYxYzY3NzU2ZWVhZGM1MTIxZDIwNmJlYzI0MzFmMjUzYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNTkvMDFkYTRmMWM2Nzc1NmVlYWRjNTEyMWQyMDZiZWMyNDMxZjI1M2IKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy81OS8wMWRhNGYxYzY3NzU2ZWVhZGM1MTIxZDIwNmJlYzI0MzFmMjUzYgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNjAvN2Q5NjY1M2Q0ZDBhNGY3MzMxMDdmNzg5MGMyZTY3YjU1YjYyMGQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNjAvN2Q5NjY1M2Q0ZDBhNGY3MzMxMDdmNzg5MGMyZTY3YjU1YjYyMGQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzYwLzdkOTY2NTNkNGQwYTRmNzMzMTA3Zjc4OTBjMmU2N2I1NWI2MjBkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNjAvN2Q5NjY1M2Q0ZDBhNGY3MzMxMDdmNzg5MGMyZTY3YjU1YjYyMGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNzQvODQ0ODJlYjhkYjczOGNhZmE2OTY5OTM2NjQ2MDc1MDBhM2YyYjkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNzQvODQ0ODJlYjhkYjczOGNhZmE2OTY5OTM2NjQ2MDc1MDBhM2YyYjkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzc0Lzg0NDgyZWI4ZGI3MzhjYWZhNjk2OTkzNjY0NjA3NTAwYTNmMmI5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvNzQvODQ0ODJlYjhkYjczOGNhZmE2OTY5OTM2NjQ2MDc1MDBhM2YyYjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvN2IvYTRjNWMzNTYxZGFhNWFiMWE4NjIxNWNmYjA1ODdlOTZkNDA0ZDYgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvN2IvYTRjNWMzNTYxZGFhNWFiMWE4NjIxNWNmYjA1ODdlOTZkNDA0ZDYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzdiL2E0YzVjMzU2MWRhYTVhYjFhODYyMTVjZmIwNTg3ZTk2ZDQwNGQ2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvN2IvYTRjNWMzNTYxZGFhNWFiMWE4NjIxNWNmYjA1ODdlOTZkNDA0ZDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvODcvMzU4NWI5NGJkZWFiY2NlYTk5MWVhNWUzZWMxYTI3Nzg5NWI2OTggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvODcvMzU4NWI5NGJkZWFiY2NlYTk5MWVhNWUzZWMxYTI3Nzg5NWI2OTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzg3LzM1ODViOTRiZGVhYmNjZWE5OTFlYTVlM2VjMWEyNzc4OTViNjk4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvODcvMzU4NWI5NGJkZWFiY2NlYTk5MWVhNWUzZWMxYTI3Nzg5NWI2OTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvOTcvNGNmN2M3M2RlMzM2YjBjNGUwMTlmOTE4ZjNjZWUzNjdkNzJlODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvOTcvNGNmN2M3M2RlMzM2YjBjNGUwMTlmOTE4ZjNjZWUzNjdkNzJlODQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzk3LzRjZjdjNzNkZTMzNmIwYzRlMDE5ZjkxOGYzY2VlMzY3ZDcyZTg0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvOTcvNGNmN2M3M2RlMzM2YjBjNGUwMTlmOTE4ZjNjZWUzNjdkNzJlODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvOWQvYmMyOTliYzAxM2VhMjUzNTgzYjQwYmYzMjdiNWE2ZTQwMzdiODkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvOWQvYmMyOTliYzAxM2VhMjUzNTgzYjQwYmYzMjdiNWE2ZTQwMzdiODkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzLzlkL2JjMjk5YmMwMTNlYTI1MzU4M2I0MGJmMzI3YjVhNmU0MDM3Yjg5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvOWQvYmMyOTliYzAxM2VhMjUzNTgzYjQwYmYzMjdiNWE2ZTQwMzdiODkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvYTkvMTA0YmY4OWU5MTEzODcyNDRlZjQ5OTQxMzk2MGJhNDcyMDY2ZDkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvYTkvMTA0YmY4OWU5MTEzODcyNDRlZjQ5OTQxMzk2MGJhNDcyMDY2ZDkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2E5LzEwNGJmODllOTExMzg3MjQ0ZWY0OTk0MTM5NjBiYTQ3MjA2NmQ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvYTkvMTA0YmY4OWU5MTEzODcyNDRlZjQ5OTQxMzk2MGJhNDcyMDY2ZDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvYjYvMTQwODg2MjBiYmRjMWQyOTU0OWQyMjNjZWJhMGY0NDE5ZmQ0Y2IgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvYjYvMTQwODg2MjBiYmRjMWQyOTU0OWQyMjNjZWJhMGY0NDE5ZmQ0Y2IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2I2LzE0MDg4NjIwYmJkYzFkMjk1NDlkMjIzY2ViYTBmNDQxOWZkNGNiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvYjYvMTQwODg2MjBiYmRjMWQyOTU0OWQyMjNjZWJhMGY0NDE5ZmQ0Y2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZDQvMDdmMTllNTBjMWRhMWZmNTg0YmVhZmUwZDZkYWM3MjM3YzVkMDYgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZDQvMDdmMTllNTBjMWRhMWZmNTg0YmVhZmUwZDZkYWM3MjM3YzVkMDYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2Q0LzA3ZjE5ZTUwYzFkYTFmZjU4NGJlYWZlMGQ2ZGFjNzIzN2M1ZDA2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZDQvMDdmMTllNTBjMWRhMWZmNTg0YmVhZmUwZDZkYWM3MjM3YzVkMDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZDkvM2U5NTU3MWQ5MmNjZWI1ZGUyOGMyMDVmMWQ1ZjNjYzhiODhiYzggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZDkvM2U5NTU3MWQ5MmNjZWI1ZGUyOGMyMDVmMWQ1ZjNjYzhiODhiYzgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2Q5LzNlOTU1NzFkOTJjY2ViNWRlMjhjMjA1ZjFkNWYzY2M4Yjg4YmM4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZDkvM2U5NTU3MWQ5MmNjZWI1ZGUyOGMyMDVmMWQ1ZjNjYzhiODhiYzgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZTMvYjgzYmYyNzRlZTA2NWVlZTQ4NzM0Y2Y4YzZkZmFmNWU4MTQ3MWMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZTMvYjgzYmYyNzRlZTA2NWVlZTQ4NzM0Y2Y4YzZkZmFmNWU4MTQ3MWMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2UzL2I4M2JmMjc0ZWUwNjVlZWU0ODczNGNmOGM2ZGZhZjVlODE0NzFjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZTMvYjgzYmYyNzRlZTA2NWVlZTQ4NzM0Y2Y4YzZkZmFmNWU4MTQ3MWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZjUvNDQxNGMyNWU2ZDI0ZmUzOWY1YzNmMTI4ZDdjOGExN2JjMjM4MzMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZjUvNDQxNGMyNWU2ZDI0ZmUzOWY1YzNmMTI4ZDdjOGExN2JjMjM4MzMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2Y1LzQ0MTRjMjVlNmQyNGZlMzlmNWMzZjEyOGQ3YzhhMTdiYzIzODMzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL29iamVjdHMvZjUvNDQxNGMyNWU2ZDI0ZmUzOWY1YzNmMTI4ZDdjOGExN2JjMjM4MzMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2Y5LzkwYTI1YTc0ZDFhODI4MWNlMmFiMDE4ZWE4ZGY2Njc5NWNkNjBiIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2Y5LzkwYTI1YTc0ZDFhODI4MWNlMmFiMDE4ZWE4ZGY2Njc5NWNkNjBiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvb2JqZWN0cy9mOS85MGEyNWE3NGQxYTgyODFjZTJhYjAxOGVhOGRmNjY3OTVjZDYwYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvLmdpdHRlZC9vYmplY3RzL2Y5LzkwYTI1YTc0ZDFhODI4MWNlMmFiMDE4ZWE4ZGY2Njc5NWNkNjBiCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvUkVBRE1FLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvUkVBRE1FLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9naXRtb2R1bGVzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvZ2l0bW9kdWxlcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9naXRtb2R1bGVzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9naXRtb2R1bGVzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL2p1c3RfYV9kaXIvY29udGVudHMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9qdXN0X2FfZGlyL2NvbnRlbnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL2p1c3RfYV9kaXIvY29udGVudHMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL2p1c3RfYV9kaXIvY29udGVudHMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvanVzdF9hX2ZpbGUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9qdXN0X2FfZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9qdXN0X2FfZmlsZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvanVzdF9hX2ZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvbG9ncy9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzY4L2U5MmM2MTFiODBlZTFlZDhmMzgzMTRmZjk1NzdmMGQxNWIyNDQ0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNjgvZTkyYzYxMWI4MGVlMWVkOGYzODMxNGZmOTU3N2YwZDE1YjI0NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNjgvZTkyYzYxMWI4MGVlMWVkOGYzODMxNGZmOTU3N2YwZDE1YjI0NDQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzY4L2U5MmM2MTFiODBlZTFlZDhmMzgzMTRmZjk1NzdmMGQxNWIyNDQ0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNzEvZmY5OTI3ZDdjOGE1NjM5ZTA2MmMzOGE3ZDM1YzQzM2M0MjQ2MjcgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy83MS9mZjk5MjdkN2M4YTU2MzllMDYyYzM4YTdkMzVjNDMzYzQyNDYyNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy83MS9mZjk5MjdkN2M4YTU2MzllMDYyYzM4YTdkMzVjNDMzYzQyNDYyNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNzEvZmY5OTI3ZDdjOGE1NjM5ZTA2MmMzOGE3ZDM1YzQzM2M0MjQ2MjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy9mMC8xZDU2YjE4ZWZkMzUzZWYyYmI5M2E0NTg1ZDU5MGEwODQ3MTk1ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2YwLzFkNTZiMThlZmQzNTNlZjJiYjkzYTQ1ODVkNTkwYTA4NDcxOTVlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2YwLzFkNTZiMThlZmQzNTNlZjJiYjkzYTQ1ODVkNTkwYTA4NDcxOTVlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy9mMC8xZDU2YjE4ZWZkMzUzZWYyYmI5M2E0NTg1ZDU5MGEwODQ3MTk1ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlL1JFQURNRS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90LXN1Ym1vZHVsZS9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3Qtc3VibW9kdWxlL1JFQURNRS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90Ly5naXR0ZWQvbm90ZW1wdHkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3QvLmdpdHRlZC9ub3RlbXB0eQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3QvLmdpdHRlZC9ub3RlbXB0eQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90Ly5naXR0ZWQvbm90ZW1wdHkKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvbm90L1JFQURNRS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9ub3QvUkVBRE1FLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9ub3QvUkVBRE1FLnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvbm90L1JFQURNRS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvLmdpdHRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkLy5naXR0ZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvLmdpdHRlZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvLmdpdHRlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9SRUFETUUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvUkVBRE1FLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9hZGRlZF9hbmRfdW5jb21taXRlZC9SRUFETUUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2ZpbGVfdG9fbW9kaWZ5IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvZmlsZV90b19tb2RpZnkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fYWRkZWRfYW5kX3VuY29tbWl0ZWQvZmlsZV90b19tb2RpZnkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2FkZGVkX2FuZF91bmNvbW1pdGVkL2ZpbGVfdG9fbW9kaWZ5CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS8uZ2l0dGVkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9maWxlLy5naXR0ZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9maWxlLy5naXR0ZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS8uZ2l0dGVkCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS9SRUFETUUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9maWxlL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9maWxlL1JFQURNRS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS9SRUFETUUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS9maWxlX3RvX21vZGlmeSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS9maWxlX3RvX21vZGlmeQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2ZpbGUvZmlsZV90b19tb2RpZnkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfZmlsZS9maWxlX3RvX21vZGlmeQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvLmdpdHRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaGVhZC8uZ2l0dGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaGVhZC8uZ2l0dGVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvLmdpdHRlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvUkVBRE1FLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaGVhZC9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaGVhZC9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvZmlsZV90b19tb2RpZnkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvZmlsZV90b19tb2RpZnkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9oZWFkL2ZpbGVfdG9fbW9kaWZ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2hlYWQvZmlsZV90b19tb2RpZnkKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9pbmRleC8uZ2l0dGVkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9pbmRleC8uZ2l0dGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaW5kZXgvLmdpdHRlZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9pbmRleC8uZ2l0dGVkCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaW5kZXgvUkVBRE1FLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaW5kZXgvUkVBRE1FLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2luZGV4L1JFQURNRS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfaW5kZXgvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2luZGV4L2ZpbGVfdG9fbW9kaWZ5IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF9pbmRleC9maWxlX3RvX21vZGlmeQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2luZGV4L2ZpbGVfdG9fbW9kaWZ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX2luZGV4L2ZpbGVfdG9fbW9kaWZ5CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvLmdpdHRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvLmdpdHRlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlLy5naXR0ZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvLmdpdHRlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL1JFQURNRS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL1JFQURNRS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9maWxlX3RvX21vZGlmeSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX2NoYW5nZWRfdW50cmFja2VkX2ZpbGUvZmlsZV90b19tb2RpZnkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9maWxlX3RvX21vZGlmeQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9maWxlX3RvX21vZGlmeQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2lfYW1fdW50cmFja2VkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fY2hhbmdlZF91bnRyYWNrZWRfZmlsZS9pX2FtX3VudHJhY2tlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2lfYW1fdW50cmFja2VkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlL2lfYW1fdW50cmFja2VkCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy8uZ2l0dGVkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fbWlzc2luZ19jb21taXRzLy5naXR0ZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fbWlzc2luZ19jb21taXRzLy5naXR0ZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy8uZ2l0dGVkCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy9SRUFETUUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDIvc21fbWlzc2luZ19jb21taXRzL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fbWlzc2luZ19jb21taXRzL1JFQURNRS50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy9SRUFETUUudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy9maWxlX3RvX21vZGlmeSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy9maWxlX3RvX21vZGlmeQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV9taXNzaW5nX2NvbW1pdHMvZmlsZV90b19tb2RpZnkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX21pc3NpbmdfY29tbWl0cy9maWxlX3RvX21vZGlmeQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvLmdpdHRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX3VuY2hhbmdlZC8uZ2l0dGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX3VuY2hhbmdlZC8uZ2l0dGVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvLmdpdHRlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvUkVBRE1FLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyL3NtX3VuY2hhbmdlZC9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyL3NtX3VuY2hhbmdlZC9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvZmlsZV90b19tb2RpZnkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvZmlsZV90b19tb2RpZnkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDIvc21fdW5jaGFuZ2VkL2ZpbGVfdG9fbW9kaWZ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMi9zbV91bmNoYW5nZWQvZmlsZV90b19tb2RpZnkKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvUkVBRE1FLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2QyX3RhcmdldC9SRUFETUUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvZmlsZV90b19tb2RpZnkgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvZmlsZV90b19tb2RpZnkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZDJfdGFyZ2V0L2ZpbGVfdG9fbW9kaWZ5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kMl90YXJnZXQvZmlsZV90b19tb2RpZnkKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvaW5mby9yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmZvL3JlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9pbmZvL3JlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvaW5mby9yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvMjYvYTNiMzJhOWI3ZDk3NDg2YzU1NTdmNTkwMmU4YWM5NDYzODE0NWUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvMjYvYTNiMzJhOWI3ZDk3NDg2YzU1NTdmNTkwMmU4YWM5NDYzODE0NWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzI2L2EzYjMyYTliN2Q5NzQ4NmM1NTU3ZjU5MDJlOGFjOTQ2MzgxNDVlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvMjYvYTNiMzJhOWI3ZDk3NDg2YzU1NTdmNTkwMmU4YWM5NDYzODE0NWUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzc4LzMwOGM5MjUxY2Y0ZWVlOGIyNWE3NmM3ZDI3OTBjNzNkNzk3MzU3IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzc4LzMwOGM5MjUxY2Y0ZWVlOGIyNWE3NmM3ZDI3OTBjNzNkNzk3MzU3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy83OC8zMDhjOTI1MWNmNGVlZThiMjVhNzZjN2QyNzkwYzczZDc5NzM1NwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzc4LzMwOGM5MjUxY2Y0ZWVlOGIyNWE3NmM3ZDI3OTBjNzNkNzk3MzU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzk3Lzg5NjgxMGIzMjEwMjQ0YTYyYTgyNDU4YjhlMDgxOWVjZmM2ODUwIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzk3Lzg5NjgxMGIzMjEwMjQ0YTYyYTgyNDU4YjhlMDgxOWVjZmM2ODUwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy85Ny84OTY4MTBiMzIxMDI0NGE2MmE4MjQ1OGI4ZTA4MTllY2ZjNjg1MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzLzk3Lzg5NjgxMGIzMjEwMjQ0YTYyYTgyNDU4YjhlMDgxOWVjZmM2ODUwCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9iNi8wZmQ5ODY2OTliYTRlOWU2OGJlYTA3Y2Y4ZTc5M2YzMjNlZjg4OCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9iNi8wZmQ5ODY2OTliYTRlOWU2OGJlYTA3Y2Y4ZTc5M2YzMjNlZjg4OApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvYjYvMGZkOTg2Njk5YmE0ZTllNjhiZWEwN2NmOGU3OTNmMzIzZWY4ODgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9iNi8wZmQ5ODY2OTliYTRlOWU2OGJlYTA3Y2Y4ZTc5M2YzMjNlZjg4OApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9kNS9mN2ZjM2Y3NGY3ZGVjMDgyODBmMzcwYTk3NWIxMTJlOGY2MDgxOCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9kNS9mN2ZjM2Y3NGY3ZGVjMDgyODBmMzcwYTk3NWIxMTJlOGY2MDgxOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvZDUvZjdmYzNmNzRmN2RlYzA4MjgwZjM3MGE5NzViMTEyZThmNjA4MTgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9kNS9mN2ZjM2Y3NGY3ZGVjMDgyODBmMzcwYTk3NWIxMTJlOGY2MDgxOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9lMy81MDA1MmNjNzY3Y2QxZmNiMzdlODRlOWE4OWU3MDE5MjViZTRhZSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9lMy81MDA1MmNjNzY3Y2QxZmNiMzdlODRlOWE4OWU3MDE5MjViZTRhZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvZTMvNTAwNTJjYzc2N2NkMWZjYjM3ZTg0ZTlhODllNzAxOTI1YmU0YWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9lMy81MDA1MmNjNzY3Y2QxZmNiMzdlODRlOWE4OWU3MDE5MjViZTRhZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9pbmZvL3BhY2tzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzL2luZm8vcGFja3MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9vYmplY3RzL2luZm8vcGFja3MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9pbmZvL3BhY2tzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYjY5ZDA0YmIzOWFjMjc0NjY5ZTIxODRlNDViZDkwMDE1ZDAyZWY1Yi5pZHggYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWI2OWQwNGJiMzlhYzI3NDY2OWUyMTg0ZTQ1YmQ5MDAxNWQwMmVmNWIuaWR4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYjY5ZDA0YmIzOWFjMjc0NjY5ZTIxODRlNDViZDkwMDE1ZDAyZWY1Yi5pZHgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYjY5ZDA0YmIzOWFjMjc0NjY5ZTIxODRlNDViZDkwMDE1ZDAyZWY1Yi5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWI2OWQwNGJiMzlhYzI3NDY2OWUyMTg0ZTQ1YmQ5MDAxNWQwMmVmNWIucGFjayBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYjY5ZDA0YmIzOWFjMjc0NjY5ZTIxODRlNDViZDkwMDE1ZDAyZWY1Yi5wYWNrCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYjY5ZDA0YmIzOWFjMjc0NjY5ZTIxODRlNDViZDkwMDE1ZDAyZWY1Yi5wYWNrCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWI2OWQwNGJiMzlhYzI3NDY2OWUyMTg0ZTQ1YmQ5MDAxNWQwMmVmNWIucGFjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvcGFja2VkLXJlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy9hZGRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL2FkZGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL2FkZGVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy9hZGRlZApkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvZ2l0bW9kdWxlcyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL2dpdG1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5OGI2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL2dpdG1vZHVsZXMKQEAgLTAsMCArMSw2IEBACitbc3VibW9kdWxlICJ0ZXN0cmVwbyJdCisJcGF0aCA9IHRlc3RyZXBvCisJdXJsID0gCitbc3VibW9kdWxlICIiXQorCXBhdGggPSB0ZXN0cmVwbworCXVybCA9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvaWdub3JlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL2lnbm9yZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvaWdub3JlZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvaWdub3JlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy9tb2RpZmllZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL21vZGlmaWVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL21vZGlmaWVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy9tb2RpZmllZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9sb2dzL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2xvZ3MvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2xvZ3MvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9sb2dzL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMWYvNjdmYzQzODZiMmQxNzFlMGQyMWJlMWM0NDdlMTI2NjA1NjFmOWIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMjcvMGI4ZWE3NjA1NmQ1Y2FkODNhZjkyMTgzNzcwMmQzZTNjMjkyNGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMzIvNTlhNmJkNWI1N2ZiOWMxMjgxYmI3ZWQzMTY3YjUwZjIyNGNiNTQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMzYvOTdkNjRiZTk0MWE1M2Q0YWU4ZjZhMjcxZTRlM2ZhNTZiMDIyY2MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzViLzViMDI1YWZiMGI0YzkxM2I0YzMzOGE0MjkzNGEzODYzYmYzNjQ0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83Ni8zZDcxYWFkZjA5YTc5NTE1OTZjOTc0NmMwMjRlN2VlY2U3YzdhZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi80Mzg0OTc4ZDI0OTNlODUxZjljY2E3ODU4ODE1ZmFjOWIxMDk4MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzk0LzRjMGY2ZTRkZmE0MTU5NWU2ZWIzY2VlY2RiMTRmNTBmZTE4MTYyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzk0LzRjMGY2ZTRkZmE0MTU5NWU2ZWIzY2VlY2RiMTRmNTBmZTE4MTYyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzk0LzRjMGY2ZTRkZmE0MTU5NWU2ZWIzY2VlY2RiMTRmNTBmZTE4MTYyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWEvMDMwNzliOGE4ZWU4NWEwYmVlNThiZjliZTNkYThiNjI0MTRlZDQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTQvYTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTYvNWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTcvMTU4NmMxZGZlOGE3MWM2Y2JmNmMxMjlmNDA0YzU2NDJmZjMxYmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTgvMjMzMTIwZjZhZDcwOGY4NDNkODYxY2UyYjcyMjhlYzRlM2RlYzYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMiBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYWUvOTBmMTJlZWE2OTk3MjllZDI0NTU1ZTQwYjlmZDY2OWRhMTJhMTIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iMi81ZmEzNWIzODA1MWU0YWU0NWQ0MjIyZTc5NWY5ZGYyZTQzZjFkMSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iMi81ZmEzNWIzODA1MWU0YWU0NWQ0MjIyZTc5NWY5ZGYyZTQzZjFkMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYjIvNWZhMzViMzgwNTFlNGFlNDVkNDIyMmU3OTVmOWRmMmU0M2YxZDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iMi81ZmEzNWIzODA1MWU0YWU0NWQ0MjIyZTc5NWY5ZGYyZTQzZjFkMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYjYvMzYxZmM2YTk3MTc4ZDhmYzg2MzlmZGVlZDcxYzc3NWFiNTI1OTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2M0Lzc4MDBjNzI2NmEyYmUwNGM1NzFjMDRkNWE2NjE0NjkxZWE5OWJkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Q2L2M5MzE2NGMyNDljODAwMDIwNWRkNGVjNWNiY2ExYjUxNmQ0ODdmIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Q2L2M5MzE2NGMyNDljODAwMDIwNWRkNGVjNWNiY2ExYjUxNmQ0ODdmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9kNi9jOTMxNjRjMjQ5YzgwMDAyMDVkZDRlYzVjYmNhMWI1MTZkNDg3ZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Q2L2M5MzE2NGMyNDljODAwMDIwNWRkNGVjNWNiY2ExYjUxNmQ0ODdmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U3L2I0YWQzODIzNDlmZjk2ZGQ4MTk5MDAwNTgwYjliMWUyMDQyZWIwIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U3L2I0YWQzODIzNDlmZjk2ZGQ4MTk5MDAwNTgwYjliMWUyMDQyZWIwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U3L2I0YWQzODIzNDlmZjk2ZGQ4MTk5MDAwNTgwYjliMWUyMDQyZWIwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2YxLzQyNWNlZjIxMWNjMDhjYWEzMWU3YjU0NWZmYjIzMmFjYjA5OGMzIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2YxLzQyNWNlZjIxMWNjMDhjYWEzMWU3YjU0NWZmYjIzMmFjYjA5OGMzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mMS80MjVjZWYyMTFjYzA4Y2FhMzFlN2I1NDVmZmIyMzJhY2IwOThjMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2YxLzQyNWNlZjIxMWNjMDhjYWEzMWU3YjU0NWZmYjIzMmFjYjA5OGMzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mNi8wMDc5MDE4YjY2NGU0ZTc5MzI5YTdlZjk1NTljOGQ5ZTAzNzhkMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZhLzQ5YjA3Nzk3MjM5MWFkNTgwMzcwNTBmMmE3NWY3NGUzNjcxZTkyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZhLzQ5YjA3Nzk3MjM5MWFkNTgwMzcwNTBmMmE3NWY3NGUzNjcxZTkyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZhLzQ5YjA3Nzk3MjM5MWFkNTgwMzcwNTBmMmE3NWY3NGUzNjcxZTkyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mZC8wOTNiZmY3MDkwNjE3NTMzNTY1NmU2Y2U2YWUwNTc4MzcwODc2NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYTgxZTQ4OTY3OWI3ZDM0MThmOWFiNTk0YmRhOGNlYjM3ZGQ0YzY5NS5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYTgxZTQ4OTY3OWI3ZDM0MThmOWFiNTk0YmRhOGNlYjM3ZGQ0YzY5NS5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stYTgxZTQ4OTY3OWI3ZDM0MThmOWFiNTk0YmRhOGNlYjM3ZGQ0YzY5NS5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLmlkeCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLmlkeApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9wYWNrZWQtcmVmcyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9wYWNrZWQtcmVmcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvL1JFQURNRSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby9SRUFETUUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvL1JFQURNRQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby9icmFuY2hfZmlsZS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby9icmFuY2hfZmlsZS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vYnJhbmNoX2ZpbGUudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby9icmFuY2hfZmlsZS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vbmV3LnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvL25ldy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vbmV3LnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vbmV3LnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy91bm1vZGlmaWVkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdW5tb2RpZmllZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy91bm1vZGlmaWVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy91bm1vZGlmaWVkCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy9zdWJtb2R1bGVzL3VudHJhY2tlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3VudHJhY2tlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvc3VibW9kdWxlcy91bnRyYWNrZWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3VudHJhY2tlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVtcGxhdGUvYnJhbmNoZXMvLmdpdGlnbm9yZSBiL3Rlc3RzL3Jlc291cmNlcy90ZW1wbGF0ZS9icmFuY2hlcy8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZW1wbGF0ZS9icmFuY2hlcy8uZ2l0aWdub3JlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVtcGxhdGUvYnJhbmNoZXMvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVtcGxhdGUvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvdGVtcGxhdGUvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3RlbXBsYXRlL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVtcGxhdGUvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3RlbXBsYXRlL2hvb2tzL2xpbmsuc2FtcGxlIGIvdGVzdHMvcmVzb3VyY2VzL3RlbXBsYXRlL2hvb2tzL2xpbmsuc2FtcGxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZW1wbGF0ZS9ob29rcy9saW5rLnNhbXBsZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3RlbXBsYXRlL2hvb2tzL2xpbmsuc2FtcGxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZW1wbGF0ZS9ob29rcy91cGRhdGUuc2FtcGxlIGIvdGVzdHMvcmVzb3VyY2VzL3RlbXBsYXRlL2hvb2tzL3VwZGF0ZS5zYW1wbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3RlbXBsYXRlL2hvb2tzL3VwZGF0ZS5zYW1wbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZW1wbGF0ZS9ob29rcy91cGRhdGUuc2FtcGxlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZW1wbGF0ZS9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvdGVtcGxhdGUvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZW1wbGF0ZS9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZW1wbGF0ZS9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9GRVRDSF9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9GRVRDSF9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvRkVUQ0hfSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9GRVRDSF9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L0hFQURfVFJBQ0tFUiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvSEVBRF9UUkFDS0VSCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvSEVBRF9UUkFDS0VSCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L0hFQURfVFJBQ0tFUgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvY29uZmlnCmluZGV4IDkwNGE0ZTMuLmRmYWI0ZWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9jb25maWcKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9jb25maWcKQEAgLTEwLDcgKzEwLDExIEBACiAJdXJsID0gZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL2xpYmdpdDIKIFtyZW1vdGUgImVtcHR5LXJlbW90ZS11cmwiXQogCXVybCA9IAotCisJcHVzaHVybCA9CitbcmVtb3RlICJlbXB0eS1yZW1vdGUtcHVzaHVybCJdCisJcHVzaHVybCA9CitbcmVtb3RlICJuby1yZW1vdGUtdXJsIl0KKwlmZXRjaCA9CiBbcmVtb3RlICJ0ZXN0X3dpdGhfcHVzaHVybCJdCiAJdXJsID0gZ2l0Oi8vZ2l0aHViLmNvbS9saWJnaXQyL2ZldGNobGliZ2l0MgogCXB1c2h1cmwgPSBnaXQ6Ly9naXRodWIuY29tL2xpYmdpdDIvcHVzaGxpYmdpdDIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvbG9ncy9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvbG9ncy9yZWZzL2hlYWRzL2JyMiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvbG9ncy9yZWZzL2hlYWRzL2JyMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9icjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvbG9ncy9yZWZzL2hlYWRzL2JyMgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvaGVhZHMvbm90LWdvb2QgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9ub3QtZ29vZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9oZWFkcy9ub3QtZ29vZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvaGVhZHMvbm90LWdvb2QKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvbG9ncy9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9yZW1vdGVzL3Rlc3QvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9sb2dzL3JlZnMvcmVtb3Rlcy90ZXN0L21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9yZW1vdGVzL3Rlc3QvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L2xvZ3MvcmVmcy9yZW1vdGVzL3Rlc3QvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8wOC9iMDQxNzgzZjQwZWRmZTEyYmI0MDZjOWM5YThhMDQwMTc3YzEyNSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8wOC9iMDQxNzgzZjQwZWRmZTEyYmI0MDZjOWM5YThhMDQwMTc3YzEyNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMDgvYjA0MTc4M2Y0MGVkZmUxMmJiNDA2YzljOWE4YTA0MDE3N2MxMjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8wOC9iMDQxNzgzZjQwZWRmZTEyYmI0MDZjOWM5YThhMDQwMTc3YzEyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xYS80NDMwMjMxODNlM2YyYmZiZWY4YWM5MjNjZDgxYzEwMThhMThmZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xYS80NDMwMjMxODNlM2YyYmZiZWY4YWM5MjNjZDgxYzEwMThhMThmZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMWEvNDQzMDIzMTgzZTNmMmJmYmVmOGFjOTIzY2Q4MWMxMDE4YTE4ZmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xYS80NDMwMjMxODNlM2YyYmZiZWY4YWM5MjNjZDgxYzEwMThhMThmZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xYi84Y2JhZDQzZTg2NzY3NmRmNjAxMzA2Njg5ZmU3YzNkZWY1ZTY4OSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xYi84Y2JhZDQzZTg2NzY3NmRmNjAxMzA2Njg5ZmU3YzNkZWY1ZTY4OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMWIvOGNiYWQ0M2U4Njc2NzZkZjYwMTMwNjY4OWZlN2MzZGVmNWU2ODkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xYi84Y2JhZDQzZTg2NzY3NmRmNjAxMzA2Njg5ZmU3YzNkZWY1ZTY4OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMWYvNjdmYzQzODZiMmQxNzFlMGQyMWJlMWM0NDdlMTI2NjA1NjFmOWIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yNS84ZjBlMmE5NTlhMzY0ZTQwZWQ2NjAzZDVkNDRmYmIyNDc2NWIxMCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yNS84ZjBlMmE5NTlhMzY0ZTQwZWQ2NjAzZDVkNDRmYmIyNDc2NWIxMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMjUvOGYwZTJhOTU5YTM2NGU0MGVkNjYwM2Q1ZDQ0ZmJiMjQ3NjViMTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yNS84ZjBlMmE5NTlhMzY0ZTQwZWQ2NjAzZDVkNDRmYmIyNDc2NWIxMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMjcvMGI4ZWE3NjA1NmQ1Y2FkODNhZjkyMTgzNzcwMmQzZTNjMjkyNGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yNy8wYjhlYTc2MDU2ZDVjYWQ4M2FmOTIxODM3NzAyZDNlM2MyOTI0ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yZC81OTA3NWUwNjgxZjU0MDQ4MmQ0ZjYyMjNhNjhlMGZlZjc5MGJjNyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yZC81OTA3NWUwNjgxZjU0MDQ4MmQ0ZjYyMjNhNjhlMGZlZjc5MGJjNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMmQvNTkwNzVlMDY4MWY1NDA0ODJkNGY2MjIzYTY4ZTBmZWY3OTBiYzcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8yZC81OTA3NWUwNjgxZjU0MDQ4MmQ0ZjYyMjNhNjhlMGZlZjc5MGJjNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMzIvNTlhNmJkNWI1N2ZiOWMxMjgxYmI3ZWQzMTY3YjUwZjIyNGNiNTQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvMzYvOTdkNjRiZTk0MWE1M2Q0YWU4ZjZhMjcxZTRlM2ZhNTZiMDIyY2MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy80NS9iOTgzYmUzNmI3M2MwNzg4ZGM5Y2JjYjc2Y2JiODBmYzdiYjA1NwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGEvMjNlMmU2NWFkNGUzMWM0YzlkYjdkYzc0NjY1MGJmYWQwODI2NzkgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGEvMjNlMmU2NWFkNGUzMWM0YzlkYjdkYzc0NjY1MGJmYWQwODI2NzkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzRhLzIzZTJlNjVhZDRlMzFjNGM5ZGI3ZGM3NDY2NTBiZmFkMDgyNjc5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGEvMjNlMmU2NWFkNGUzMWM0YzlkYjdkYzc0NjY1MGJmYWQwODI2NzkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGIvMjJiMzVkNDRiNWE0ZjU4OWVkZjNkYzg5MTk2Mzk5NzcxNzk2ZWEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGIvMjJiMzVkNDRiNWE0ZjU4OWVkZjNkYzg5MTk2Mzk5NzcxNzk2ZWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzRiLzIyYjM1ZDQ0YjVhNGY1ODllZGYzZGM4OTE5NjM5OTc3MTc5NmVhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNGIvMjJiMzVkNDRiNWE0ZjU4OWVkZjNkYzg5MTk2Mzk5NzcxNzk2ZWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNTIvMWQ4N2MxZWMzYWVmOTgyNGRhZjZkOTZjYzBhZTM3MTA3NjZkOTEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNTIvMWQ4N2MxZWMzYWVmOTgyNGRhZjZkOTZjYzBhZTM3MTA3NjZkOTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzUyLzFkODdjMWVjM2FlZjk4MjRkYWY2ZDk2Y2MwYWUzNzEwNzY2ZDkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNTIvMWQ4N2MxZWMzYWVmOTgyNGRhZjZkOTZjYzBhZTM3MTA3NjZkOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzViLzViMDI1YWZiMGI0YzkxM2I0YzMzOGE0MjkzNGEzODYzYmYzNjQ0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy83Ni8zZDcxYWFkZjA5YTc5NTE1OTZjOTc0NmMwMjRlN2VlY2U3YzdhZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy83Yi80Mzg0OTc4ZDI0OTNlODUxZjljY2E3ODU4ODE1ZmFjOWIxMDk4MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzdiLzQzODQ5NzhkMjQ5M2U4NTFmOWNjYTc4NTg4MTVmYWM5YjEwOTgwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzg0LzlhNWUzNGEyNjgxNWU4MjFmODY1Yjg0NzlmNTgxNWE0N2FmMGZlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzg0LzlhNWUzNGEyNjgxNWU4MjFmODY1Yjg0NzlmNTgxNWE0N2FmMGZlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy84NC85YTVlMzRhMjY4MTVlODIxZjg2NWI4NDc5ZjU4MTVhNDdhZjBmZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzg0LzlhNWUzNGEyNjgxNWU4MjFmODY1Yjg0NzlmNTgxNWE0N2FmMGZlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOTQvNGMwZjZlNGRmYTQxNTk1ZTZlYjNjZWVjZGIxNGY1MGZlMTgxNjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy85NC80YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOWEvMDMwNzliOGE4ZWU4NWEwYmVlNThiZjliZTNkYThiNjI0MTRlZDQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOWEvMDMwNzliOGE4ZWU4NWEwYmVlNThiZjliZTNkYThiNjI0MTRlZDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzlhLzAzMDc5YjhhOGVlODVhMGJlZTU4YmY5YmUzZGE4YjYyNDE0ZWQ0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOWEvMDMwNzliOGE4ZWU4NWEwYmVlNThiZjliZTNkYThiNjI0MTRlZDQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOWYvMTNmN2QwYTk0MDJjNjgxZjkxZGM1OTBjZjdiNTQ3MGU2YTc3ZDIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOWYvMTNmN2QwYTk0MDJjNjgxZjkxZGM1OTBjZjdiNTQ3MGU2YTc3ZDIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzlmLzEzZjdkMGE5NDAyYzY4MWY5MWRjNTkwY2Y3YjU0NzBlNmE3N2QyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvOWYvMTNmN2QwYTk0MDJjNjgxZjkxZGM1OTBjZjdiNTQ3MGU2YTc3ZDIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy85Zi9kNzM4ZThmNzk2N2MwNzhkY2VlZDgxOTAzMzBmYzg2NDhlZTU2YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E0L2E3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E0L2E3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E0L2E3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E2LzVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E2LzVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E2LzVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2FlLzkwZjEyZWVhNjk5NzI5ZWQyNDU1NWU0MGI5ZmQ2NjlkYTEyYTEyIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2FlLzkwZjEyZWVhNjk5NzI5ZWQyNDU1NWU0MGI5ZmQ2NjlkYTEyYTEyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2FlLzkwZjEyZWVhNjk5NzI5ZWQyNDU1NWU0MGI5ZmQ2NjlkYTEyYTEyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9iMi81ZmEzNWIzODA1MWU0YWU0NWQ0MjIyZTc5NWY5ZGYyZTQzZjFkMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2I2LzM2MWZjNmE5NzE3OGQ4ZmM4NjM5ZmRlZWQ3MWM3NzVhYjUyNTkzIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2I2LzM2MWZjNmE5NzE3OGQ4ZmM4NjM5ZmRlZWQ3MWM3NzVhYjUyNTkzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2I2LzM2MWZjNmE5NzE3OGQ4ZmM4NjM5ZmRlZWQ3MWM3NzVhYjUyNTkzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2JlLzM1NjNhZTNmNzk1YjJiNDM1M2JjY2UzYTUyN2FkMGE0ZjdmNjQ0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2JlLzM1NjNhZTNmNzk1YjJiNDM1M2JjY2UzYTUyN2FkMGE0ZjdmNjQ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2JlLzM1NjNhZTNmNzk1YjJiNDM1M2JjY2UzYTUyN2FkMGE0ZjdmNjQ0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDAvN2IwZjlhOGM4OWYxZDllNzRkYzRmY2U2NDIxZGVjNWVmOGE2NTkgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDAvN2IwZjlhOGM4OWYxZDllNzRkYzRmY2U2NDIxZGVjNWVmOGE2NTkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2QwLzdiMGY5YThjODlmMWQ5ZTc0ZGM0ZmNlNjQyMWRlYzVlZjhhNjU5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDAvN2IwZjlhOGM4OWYxZDllNzRkYzRmY2U2NDIxZGVjNWVmOGE2NTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2Q2L2M5MzE2NGMyNDljODAwMDIwNWRkNGVjNWNiY2ExYjUxNmQ0ODdmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDcvMWFhYjRmOWIwNGI0NWNlMDliY2FhNjM2YTliZTYyMzE0NzQ3NTkgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDcvMWFhYjRmOWIwNGI0NWNlMDliY2FhNjM2YTliZTYyMzE0NzQ3NTkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2Q3LzFhYWI0ZjliMDRiNDVjZTA5YmNhYTYzNmE5YmU2MjMxNDc0NzU5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZDcvMWFhYjRmOWIwNGI0NWNlMDliY2FhNjM2YTliZTYyMzE0NzQ3NTkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZTcvYjRhZDM4MjM0OWZmOTZkZDgxOTkwMDA1ODBiOWIxZTIwNDJlYjAgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZTcvYjRhZDM4MjM0OWZmOTZkZDgxOTkwMDA1ODBiOWIxZTIwNDJlYjAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2U3L2I0YWQzODIzNDlmZjk2ZGQ4MTk5MDAwNTgwYjliMWUyMDQyZWIwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZTcvYjRhZDM4MjM0OWZmOTZkZDgxOTkwMDA1ODBiOWIxZTIwNDJlYjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2YxLzQyNWNlZjIxMWNjMDhjYWEzMWU3YjU0NWZmYjIzMmFjYjA5OGMzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2ZhLzQ5YjA3Nzk3MjM5MWFkNTgwMzcwNTBmMmE3NWY3NGUzNjcxZTkyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmQvNDk1OWNlNzUxMGRiMDlkNGQ4MjE3ZmEyZDE3ODA0MTNlMDVhMDkgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmQvNDk1OWNlNzUxMGRiMDlkNGQ4MjE3ZmEyZDE3ODA0MTNlMDVhMDkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL2ZkLzQ5NTljZTc1MTBkYjA5ZDRkODIxN2ZhMmQxNzgwNDEzZTA1YTA5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvZmQvNDk1OWNlNzUxMGRiMDlkNGQ4MjE3ZmEyZDE3ODA0MTNlMDVhMDkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUuaWR4IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUuaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUucGFjawpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUucGFjawpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EuaWR4IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EuaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L29iamVjdHMvcGFjay9wYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EucGFjawpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9icjIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvYnIyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9icjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9icjIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL2Nhbm5vdC1mZXRjaCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9jYW5ub3QtZmV0Y2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL2Nhbm5vdC1mZXRjaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL2Nhbm5vdC1mZXRjaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvY2hvbXBlZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9jaG9tcGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9jaG9tcGVkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvY2hvbXBlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvaGFhY2tlZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9oYWFja2VkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9oYWFja2VkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvaGFhY2tlZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9ub3QtZ29vZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9ub3QtZ29vZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvbm90LWdvb2QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9ub3QtZ29vZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvcGFja2VkLXRlc3QgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvcGFja2VkLXRlc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3BhY2tlZC10ZXN0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvcGFja2VkLXRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3N1YnRyZWVzIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3N1YnRyZWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy9zdWJ0cmVlcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3N1YnRyZWVzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy90ZXN0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3Rlc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3Rlc3QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy90ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy90cmFjay1sb2NhbCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy90cmFjay1sb2NhbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvdHJhY2stbG9jYWwKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9oZWFkcy90cmFjay1sb2NhbApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvdHJhaWxpbmcgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvdHJhaWxpbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL2hlYWRzL3RyYWlsaW5nCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvaGVhZHMvdHJhaWxpbmcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL25vdGVzL2Zhbm91dCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9ub3Rlcy9mYW5vdXQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL25vdGVzL2Zhbm91dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL25vdGVzL2Zhbm91dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvcmVtb3Rlcy90ZXN0L21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9yZW1vdGVzL3Rlc3QvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy9yZW1vdGVzL3Rlc3QvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvcmVtb3Rlcy90ZXN0L21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9hbm5vdGF0ZWRfdGFnX3RvX2Jsb2IgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9hbm5vdGF0ZWRfdGFnX3RvX2Jsb2IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvYW5ub3RhdGVkX3RhZ190b19ibG9iCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9hbm5vdGF0ZWRfdGFnX3RvX2Jsb2IKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvZTkwODEwYiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL2U5MDgxMGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvZTkwODEwYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvZTkwODEwYgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9oYXJkX3RhZyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL2hhcmRfdGFnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL2hhcmRfdGFnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9oYXJkX3RhZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9wb2ludF90b19ibG9iIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvcG9pbnRfdG9fYmxvYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9wb2ludF90b19ibG9iCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy9wb2ludF90b19ibG9iCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL3RhZ2dlcmxlc3MgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy90YWdnZXJsZXNzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL3RhZ2dlcmxlc3MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL3RhZ2dlcmxlc3MKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvdGVzdCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL3Rlc3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvdGVzdApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLmdpdC9yZWZzL3RhZ3MvdGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy93cmFwcGVkX3RhZyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL3dyYXBwZWRfdGFnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby5naXQvcmVmcy90YWdzL3dyYXBwZWRfdGFnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0L3JlZnMvdGFncy93cmFwcGVkX3RhZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL0hFQURfVFJBQ0tFUiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL0hFQURfVFJBQ0tFUgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9IRUFEX1RSQUNLRVIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL0hFQURfVFJBQ0tFUgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzA5LzlmYWJhYzNhOWVhOTM1NTk4NTI4YzI3Zjg2NmUzNDA4OWMyZWZmIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8wOS85ZmFiYWMzYTllYTkzNTU5ODUyOGMyN2Y4NjZlMzQwODljMmVmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzA5LzlmYWJhYzNhOWVhOTM1NTk4NTI4YzI3Zjg2NmUzNDA4OWMyZWZmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzA5LzlmYWJhYzNhOWVhOTM1NTk4NTI4YzI3Zjg2NmUzNDA4OWMyZWZmCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDggYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzEzLzg1ZjI2NGFmYjc1YTU2YTViZWM3NDI0M2JlOWIzNjdiYTRjYTA4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE0LzQzNDQwNDNiYTRkNGE0MDVkYTAzZGUzODQ0YWE4MjlhZThiZTBlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xNC80MzQ0MDQzYmE0ZDRhNDA1ZGEwM2RlMzg0NGFhODI5YWU4YmUwZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE0LzQzNDQwNDNiYTRkNGE0MDVkYTAzZGUzODQ0YWE4MjlhZThiZTBlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE0LzQzNDQwNDNiYTRkNGE0MDVkYTAzZGUzODQ0YWE4MjlhZThiZTBlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xNi84ZTRlYmQxYzY2NzQ5OTU0OGFlMTI0MDNiMTliMjJhNWM1ZTkyNSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTYvOGU0ZWJkMWM2Njc0OTk1NDhhZTEyNDAzYjE5YjIyYTVjNWU5MjUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xNi84ZTRlYmQxYzY2NzQ5OTU0OGFlMTI0MDNiMTliMjJhNWM1ZTkyNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xNi84ZTRlYmQxYzY2NzQ5OTU0OGFlMTI0MDNiMTliMjJhNWM1ZTkyNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE4LzEwMzcwNDlhNTRhMWViNWZhYjQwNDY1OGEzYTI1MGI0NDMzNWQ3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMTgvMTAzNzA0OWE1NGExZWI1ZmFiNDA0NjU4YTNhMjUwYjQ0MzM1ZDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xOC8xMGRmZjU4ZDhhNjYwNTEyZDQ4MzJlNzQwZjY5Mjg4NDMzOGNjZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMWYvNjdmYzQzODZiMmQxNzFlMGQyMWJlMWM0NDdlMTI2NjA1NjFmOWIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8xZi82N2ZjNDM4NmIyZDE3MWUwZDIxYmUxYzQ0N2UxMjY2MDU2MWY5YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMjcvMGI4ZWE3NjA1NmQ1Y2FkODNhZjkyMTgzNzcwMmQzZTNjMjkyNGQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzI3LzBiOGVhNzYwNTZkNWNhZDgzYWY5MjE4Mzc3MDJkM2UzYzI5MjRkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMjcvMGI4ZWE3NjA1NmQ1Y2FkODNhZjkyMTgzNzcwMmQzZTNjMjkyNGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMjcvMGI4ZWE3NjA1NmQ1Y2FkODNhZjkyMTgzNzcwMmQzZTNjMjkyNGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzMyLzU5YTZiZDViNTdmYjljMTI4MWJiN2VkMzE2N2I1MGYyMjRjYjU0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zMi81OWE2YmQ1YjU3ZmI5YzEyODFiYjdlZDMxNjdiNTBmMjI0Y2I1NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzMyLzU5YTZiZDViNTdmYjljMTI4MWJiN2VkMzE2N2I1MGYyMjRjYjU0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzMyLzU5YTZiZDViNTdmYjljMTI4MWJiN2VkMzE2N2I1MGYyMjRjYjU0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvMzYvOTdkNjRiZTk0MWE1M2Q0YWU4ZjZhMjcxZTRlM2ZhNTZiMDIyY2MKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy8zNi85N2Q2NGJlOTQxYTUzZDRhZThmNmEyNzFlNGUzZmE1NmIwMjJjYwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzQ1L2RkODU2ZmRkNGQ4OWI4ODRjMzQwYmEwZTA0Nzc1MmQ5YjA4NWQ2IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80NS9kZDg1NmZkZDRkODliODg0YzM0MGJhMGUwNDc3NTJkOWIwODVkNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzQ1L2RkODU2ZmRkNGQ4OWI4ODRjMzQwYmEwZTA0Nzc1MmQ5YjA4NWQ2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzQ1L2RkODU2ZmRkNGQ4OWI4ODRjMzQwYmEwZTA0Nzc1MmQ5YjA4NWQ2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRlLzA4ODNlZWVlZWJjMWZiMTczNTE2MWNlYTgyZjdjYjVmYWI3ZTYzIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy80ZS8wODgzZWVlZWViYzFmYjE3MzUxNjFjZWE4MmY3Y2I1ZmFiN2U2MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRlLzA4ODNlZWVlZWJjMWZiMTczNTE2MWNlYTgyZjdjYjVmYWI3ZTYzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzRlLzA4ODNlZWVlZWJjMWZiMTczNTE2MWNlYTgyZjdjYjVmYWI3ZTYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzYyL2ViNTZkYWJiNGI5OTI5YmMxNWRkOTI2M2MyYzczM2IxM2QyZGNjIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Mi9lYjU2ZGFiYjRiOTkyOWJjMTVkZDkyNjNjMmM3MzNiMTNkMmRjYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzYyL2ViNTZkYWJiNGI5OTI5YmMxNWRkOTI2M2MyYzczM2IxM2QyZGNjCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzYyL2ViNTZkYWJiNGI5OTI5YmMxNWRkOTI2M2MyYzczM2IxM2QyZGNjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Ni8zYWRiMDkxNDM3Njc5ODRmN2JlODNhOTFlZmZhNDdlMTI4YzczNSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNjYvM2FkYjA5MTQzNzY3OTg0ZjdiZTgzYTkxZWZmYTQ3ZTEyOGM3MzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Ni8zYWRiMDkxNDM3Njc5ODRmN2JlODNhOTFlZmZhNDdlMTI4YzczNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Ni8zYWRiMDkxNDM3Njc5ODRmN2JlODNhOTFlZmZhNDdlMTI4YzczNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzZiLzM3Nzk1OGQ4YzZhNDkwNmU4NTczYjUzNjcyYTFhMjNhNGU4Y2U2IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Yi8zNzc5NThkOGM2YTQ5MDZlODU3M2I1MzY3MmExYTIzYTRlOGNlNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTdjNzgxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Yi8zNzc5NThkOGM2YTQ5MDZlODU3M2I1MzY3MmExYTIzYTRlOGNlNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzZiLzliNzY3YWY5OTkyYjRhYmFkNWUyNGZmYjFiYTJkNjg4Y2E2MDJlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Yi85Yjc2N2FmOTk5MmI0YWJhZDVlMjRmZmIxYmEyZDY4OGNhNjAyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc2ODViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy82Yi85Yjc2N2FmOTk5MmI0YWJhZDVlMjRmZmIxYmEyZDY4OGNhNjAyZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNzUvMDU3ZGQ0MTE0ZTc0Y2NhMWQ3NTBkMGFlZTE2NDdjOTAzY2I2MGEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNzUvMDU3ZGQ0MTE0ZTc0Y2NhMWQ3NTBkMGFlZTE2NDdjOTAzY2I2MGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvNzUvMDU3ZGQ0MTE0ZTc0Y2NhMWQ3NTBkMGFlZTE2NDdjOTAzY2I2MGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83Ni8zZDcxYWFkZjA5YTc5NTE1OTZjOTc0NmMwMjRlN2VlY2U3YzdhZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzc2LzNkNzFhYWRmMDlhNzk1MTU5NmM5NzQ2YzAyNGU3ZWVjZTdjN2FmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvN2IvMjQxN2EyM2I2M2UxZmRkZTg4YzgwZTE0YjMzMjQ3YzZlNTc4NWEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzdiLzI0MTdhMjNiNjNlMWZkZGU4OGM4MGUxNGIzMzI0N2M2ZTU3ODVhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzc4YWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzdiLzI0MTdhMjNiNjNlMWZkZGU4OGM4MGUxNGIzMzI0N2M2ZTU3ODVhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi80Mzg0OTc4ZDI0OTNlODUxZjljY2E3ODU4ODE1ZmFjOWIxMDk4MCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvN2IvNDM4NDk3OGQyNDkzZTg1MWY5Y2NhNzg1ODgxNWZhYzliMTA5ODAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi80Mzg0OTc4ZDI0OTNlODUxZjljY2E3ODU4ODE1ZmFjOWIxMDk4MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy83Yi80Mzg0OTc4ZDI0OTNlODUxZjljY2E3ODU4ODE1ZmFjOWIxMDk4MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvODEvNDg4OWEwNzhjMDMxZjYxZWQwOGFiNWZhODYzYWVhOTMxNDM0NGQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzgxLzQ4ODlhMDc4YzAzMWY2MWVkMDhhYjVmYTg2M2FlYTkzMTQzNDRkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvODEvNDg4OWEwNzhjMDMxZjYxZWQwOGFiNWZhODYzYWVhOTMxNDM0NGQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvODEvNDg4OWEwNzhjMDMxZjYxZWQwOGFiNWZhODYzYWVhOTMxNDM0NGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84Ny8zODBhZTg0MDA5ZTljNTAzNTA2YzJmNjE0M2E0ZmM2YzYwYmY4MCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvODcvMzgwYWU4NDAwOWU5YzUwMzUwNmMyZjYxNDNhNGZjNmM2MGJmODAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84Ny8zODBhZTg0MDA5ZTljNTAzNTA2YzJmNjE0M2E0ZmM2YzYwYmY4MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy84Ny8zODBhZTg0MDA5ZTljNTAzNTA2YzJmNjE0M2E0ZmM2YzYwYmY4MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOTQvNGMwZjZlNGRmYTQxNTk1ZTZlYjNjZWVjZGIxNGY1MGZlMTgxNjIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzk0LzRjMGY2ZTRkZmE0MTU5NWU2ZWIzY2VlY2RiMTRmNTBmZTE4MTYyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOTQvNGMwZjZlNGRmYTQxNTk1ZTZlYjNjZWVjZGIxNGY1MGZlMTgxNjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOTQvNGMwZjZlNGRmYTQxNTk1ZTZlYjNjZWVjZGIxNGY1MGZlMTgxNjIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWEvMDMwNzliOGE4ZWU4NWEwYmVlNThiZjliZTNkYThiNjI0MTRlZDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85YS8wMzA3OWI4YThlZTg1YTBiZWU1OGJmOWJlM2RhOGI2MjQxNGVkNApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E0L2E3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E0L2E3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E0L2E3ZGNlODVjZjYzODc0ZTk4NDcxOWY0ZmRkMjM5ZjUxNDUwNTJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTYvNWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hNi81ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTcvMTU4NmMxZGZlOGE3MWM2Y2JmNmMxMjlmNDA0YzU2NDJmZjMxYmQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTcvMTU4NmMxZGZlOGE3MWM2Y2JmNmMxMjlmNDA0YzU2NDJmZjMxYmQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYTcvMTU4NmMxZGZlOGE3MWM2Y2JmNmMxMjlmNDA0YzU2NDJmZjMxYmQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hOC8yMzMxMjBmNmFkNzA4Zjg0M2Q4NjFjZTJiNzIyOGVjNGUzZGVjNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYWUvOTBmMTJlZWE2OTk3MjllZDI0NTU1ZTQwYjlmZDY2OWRhMTJhMTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZS85MGYxMmVlYTY5OTcyOWVkMjQ1NTVlNDBiOWZkNjY5ZGExMmExMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYjIvNWZhMzViMzgwNTFlNGFlNDVkNDIyMmU3OTVmOWRmMmU0M2YxZDEgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2IyLzVmYTM1YjM4MDUxZTRhZTQ1ZDQyMjJlNzk1ZjlkZjJlNDNmMWQxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYjIvNWZhMzViMzgwNTFlNGFlNDVkNDIyMmU3OTVmOWRmMmU0M2YxZDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYjIvNWZhMzViMzgwNTFlNGFlNDVkNDIyMmU3OTVmOWRmMmU0M2YxZDEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2I2LzM2MWZjNmE5NzE3OGQ4ZmM4NjM5ZmRlZWQ3MWM3NzVhYjUyNTkzIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iNi8zNjFmYzZhOTcxNzhkOGZjODYzOWZkZWVkNzFjNzc1YWI1MjU5MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2I2LzM2MWZjNmE5NzE3OGQ4ZmM4NjM5ZmRlZWQ3MWM3NzVhYjUyNTkzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2I2LzM2MWZjNmE5NzE3OGQ4ZmM4NjM5ZmRlZWQ3MWM3NzVhYjUyNTkzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2MwLzUyOGZkNmNjOTg4YzBhNDBjZTBiZTExYmMxOTJmYzhkYzUzNDZlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jMC81MjhmZDZjYzk4OGMwYTQwY2UwYmUxMWJjMTkyZmM4ZGM1MzQ2ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2MwLzUyOGZkNmNjOTg4YzBhNDBjZTBiZTExYmMxOTJmYzhkYzUzNDZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2MwLzUyOGZkNmNjOTg4YzBhNDBjZTBiZTExYmMxOTJmYzhkYzUzNDZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2NmLzgwZjhkZTlmMTE4NWJmM2EwNWY5OTNmNjEyMTg4MGRkMGNmYmM5IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9jZi84MGY4ZGU5ZjExODViZjNhMDVmOTkzZjYxMjE4ODBkZDBjZmJjOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2NmLzgwZjhkZTlmMTE4NWJmM2EwNWY5OTNmNjEyMTg4MGRkMGNmYmM5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2NmLzgwZjhkZTlmMTE4NWJmM2EwNWY5OTNmNjEyMTg4MGRkMGNmYmM5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9kNS8yYThmZTg0Y2VlZGYyNjBhZmU0ZjAyODdiYmZjYTA0YTExN2U4MyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDUvMmE4ZmU4NGNlZWRmMjYwYWZlNGYwMjg3YmJmY2EwNGExMTdlODMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9kNS8yYThmZTg0Y2VlZGYyNjBhZmU0ZjAyODdiYmZjYTA0YTExN2U4MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9kNS8yYThmZTg0Y2VlZGYyNjBhZmU0ZjAyODdiYmZjYTA0YTExN2U4MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Q2L2M5MzE2NGMyNDljODAwMDIwNWRkNGVjNWNiY2ExYjUxNmQ0ODdmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZDYvYzkzMTY0YzI0OWM4MDAwMjA1ZGQ0ZWM1Y2JjYTFiNTE2ZDQ4N2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZTcvYjRhZDM4MjM0OWZmOTZkZDgxOTkwMDA1ODBiOWIxZTIwNDJlYjAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9lNy9iNGFkMzgyMzQ5ZmY5NmRkODE5OTAwMDU4MGI5YjFlMjA0MmViMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2YxLzQyNWNlZjIxMWNjMDhjYWEzMWU3YjU0NWZmYjIzMmFjYjA5OGMzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZjEvNDI1Y2VmMjExY2MwOGNhYTMxZTdiNTQ1ZmZiMjMyYWNiMDk4YzMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mNi8wMDc5MDE4YjY2NGU0ZTc5MzI5YTdlZjk1NTljOGQ5ZTAzNzhkMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvZmQvMDkzYmZmNzA5MDYxNzUzMzU2NTZlNmNlNmFlMDU3ODM3MDg3NjUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUuaWR4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUuaWR4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUucGFjayBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUucGFjawpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1hODFlNDg5Njc5YjdkMzQxOGY5YWI1OTRiZGE4Y2ViMzdkZDRjNjk1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWE4MWU0ODk2NzliN2QzNDE4ZjlhYjU5NGJkYThjZWIzN2RkNGM2OTUucGFjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5pZHgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5pZHgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUuaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5wYWNrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5wYWNrCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL29iamVjdHMvcGFjay9wYWNrLWQ3YzZhZGY5ZjYxMzE4ZjA0MTg0NWIwMTQ0MGQwOWFhN2E5MWUxYjUucGFjawpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5wYWNrCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5pZHggYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLmlkeApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDg1ZjVkNDgzMjczMTA4YzlkOGRkMGU0NzI4Y2NmMGIyOTgyNDIzYS5wYWNrCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kODVmNWQ0ODMyNzMxMDhjOWQ4ZGQwZTQ3MjhjY2YwYjI5ODI0MjNhLnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9wYWNrZWQtcmVmcyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9wYWNrZWQtcmVmcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2JyMiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvYnIyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvYnIyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2JyMgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2RpciBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvZGlyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvZGlyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL2RpcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9sb25nLWZpbGUtbmFtZSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbG9uZy1maWxlLW5hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5NDJhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbG9uZy1maWxlLW5hbWUKQEAgLTAsMCArMSBAQAorNmIzNzc5NThkOGM2YTQ5MDZlODU3M2I1MzY3MmExYTIzYTRlOGNlNgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL3BhY2tlZC10ZXN0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9wYWNrZWQtdGVzdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL3BhY2tlZC10ZXN0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL3BhY2tlZC10ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VidHJlZXMgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL3N1YnRyZWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VidHJlZXMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VidHJlZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy90ZXN0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy90ZXN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvdGVzdApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy90ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9lOTA4MTBiIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy90YWdzL2U5MDgxMGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy90YWdzL2U5MDgxMGIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9lOTA4MTBiCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9mb28vYmFyIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy90YWdzL2Zvby9iYXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy90YWdzL2Zvby9iYXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9mb28vYmFyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9mb28vZm9vL2JhciBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9mb28vZm9vL2JhcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3RhZ3MvZm9vL2Zvby9iYXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9mb28vZm9vL2JhcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3RhZ3MvcG9pbnRfdG9fYmxvYiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9wb2ludF90b19ibG9iCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy9wb2ludF90b19ibG9iCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3RhZ3MvcG9pbnRfdG9fYmxvYgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3RhZ3MvdGVzdCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy90ZXN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvdGFncy90ZXN0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL3RhZ3MvdGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9sb2dzL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvbG9ncy9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9sb2dzL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9sb2dzL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9sb2dzL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL2xvZ3MvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzBjLzM3YTUzOTFiYmZmNDNjMzdmMGQwMzcxODIzYTU1MDllZWQ1YjFkIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMGMvMzdhNTM5MWJiZmY0M2MzN2YwZDAzNzE4MjNhNTUwOWVlZDViMWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMGMvMzdhNTM5MWJiZmY0M2MzN2YwZDAzNzE4MjNhNTUwOWVlZDViMWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzBjLzM3YTUzOTFiYmZmNDNjMzdmMGQwMzcxODIzYTU1MDllZWQ1YjFkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDggYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8xMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMTMvODVmMjY0YWZiNzVhNTZhNWJlYzc0MjQzYmU5YjM2N2JhNGNhMDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzE4LzEwMzcwNDlhNTRhMWViNWZhYjQwNDY1OGEzYTI1MGI0NDMzNWQ3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzE4LzEwMzcwNDlhNTRhMWViNWZhYjQwNDY1OGEzYTI1MGI0NDMzNWQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8xOC8xMDM3MDQ5YTU0YTFlYjVmYWI0MDQ2NThhM2EyNTBiNDQzMzVkNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMTgvMTBkZmY1OGQ4YTY2MDUxMmQ0ODMyZTc0MGY2OTI4ODQzMzhjY2QKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzE4LzEwZGZmNThkOGE2NjA1MTJkNDgzMmU3NDBmNjkyODg0MzM4Y2NkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMmQvMmVmZjYzMzcyYjA4YWRmMGE5ZWI4NDEwOWNjZjdkMTllMmYzYTIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8yZC8yZWZmNjMzNzJiMDhhZGYwYTllYjg0MTA5Y2NmN2QxOWUyZjNhMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8yZC8yZWZmNjMzNzJiMDhhZGYwYTllYjg0MTA5Y2NmN2QxOWUyZjNhMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvMmQvMmVmZjYzMzcyYjA4YWRmMGE5ZWI4NDEwOWNjZjdkMTllMmYzYTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8zNi8wNjBjNTg3MDJlZDRjMmE0MDgzMmM1MTc1OGQ1MzQ0MjAxZDg5YSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzM2LzA2MGM1ODcwMmVkNGMyYTQwODMyYzUxNzU4ZDUzNDQyMDFkODlhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzM2LzA2MGM1ODcwMmVkNGMyYTQwODMyYzUxNzU4ZDUzNDQyMDFkODlhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy8zNi8wNjBjNTg3MDJlZDRjMmE0MDgzMmM1MTc1OGQ1MzQ0MjAxZDg5YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNDUvYjk4M2JlMzZiNzNjMDc4OGRjOWNiY2I3NmNiYjgwZmM3YmIwNTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzQ1L2I5ODNiZTM2YjczYzA3ODhkYzljYmNiNzZjYmI4MGZjN2JiMDU3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy80YS8yMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNGEvMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy81Yi81YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNWIvNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNjEvOWY5OTM1OTU3ZTAxMGM0MTljYjlkMTU2MjE5MTZkZGZjYzBiOTYgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy82MS85Zjk5MzU5NTdlMDEwYzQxOWNiOWQxNTYyMTkxNmRkZmNjMGI5NgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy82MS85Zjk5MzU5NTdlMDEwYzQxOWNiOWQxNTYyMTkxNmRkZmNjMGI5NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvNjEvOWY5OTM1OTU3ZTAxMGM0MTljYjlkMTU2MjE5MTZkZGZjYzBiOTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzc1LzA1N2RkNDExNGU3NGNjYTFkNzUwZDBhZWUxNjQ3YzkwM2NiNjBhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy83NS8wNTdkZDQxMTRlNzRjY2ExZDc1MGQwYWVlMTY0N2M5MDNjYjYwYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzdmLzA0MzI2OGVhNDNjZTE4ZTM1NDBhY2FhYmY5ZTA5MGM5MTk2NWIwIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvN2YvMDQzMjY4ZWE0M2NlMThlMzU0MGFjYWFiZjllMDkwYzkxOTY1YjAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvN2YvMDQzMjY4ZWE0M2NlMThlMzU0MGFjYWFiZjllMDkwYzkxOTY1YjAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzdmLzA0MzI2OGVhNDNjZTE4ZTM1NDBhY2FhYmY5ZTA5MGM5MTk2NWIwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvODEvNDg4OWEwNzhjMDMxZjYxZWQwOGFiNWZhODYzYWVhOTMxNDM0NGQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy84MS80ODg5YTA3OGMwMzFmNjFlZDA4YWI1ZmE4NjNhZWE5MzE0MzQ0ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvODEvNDg4OWEwNzhjMDMxZjYxZWQwOGFiNWZhODYzYWVhOTMxNDM0NGQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzg0Lzk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy84NC85NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvOWYvZDczOGU4Zjc5NjdjMDc4ZGNlZWQ4MTkwMzMwZmM4NjQ4ZWU1NmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzLzlmL2Q3MzhlOGY3OTY3YzA3OGRjZWVkODE5MDMzMGZjODY0OGVlNTZhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYTQvYTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9hNC9hN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYTQvYTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2E3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9hNy8xNTg2YzFkZmU4YTcxYzZjYmY2YzEyOWY0MDRjNTY0MmZmMzFiZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYTgvMjMzMTIwZjZhZDcwOGY4NDNkODYxY2UyYjcyMjhlYzRlM2RlYzYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYTgvMjMzMTIwZjZhZDcwOGY4NDNkODYxY2UyYjcyMjhlYzRlM2RlYzYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2E4LzIzMzEyMGY2YWQ3MDhmODQzZDg2MWNlMmI3MjI4ZWM0ZTNkZWM2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9iZS8zNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYmUvMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9jNC83ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYzQvNzgwMGM3MjY2YTJiZTA0YzU3MWMwNGQ1YTY2MTQ2OTFlYTk5YmQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYzQvZGMxNTU1ZTRkNGZhMGUwYzljM2ZjNDY3MzRjN2MzNWIzY2U5MGIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9jNC9kYzE1NTVlNGQ0ZmEwZTBjOWMzZmM0NjczNGM3YzM1YjNjZTkwYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9jNC9kYzE1NTVlNGQ0ZmEwZTBjOWMzZmM0NjczNGM3YzM1YjNjZTkwYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvYzQvZGMxNTU1ZTRkNGZhMGUwYzljM2ZjNDY3MzRjN2MzNWIzY2U5MGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvZjYvMDA3OTAxOGI2NjRlNGU3OTMyOWE3ZWY5NTU5YzhkOWUwMzc4ZDEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2Y2LzAwNzkwMThiNjY0ZTRlNzkzMjlhN2VmOTU1OWM4ZDllMDM3OGQxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9mYS80OWIwNzc5NzIzOTFhZDU4MDM3MDUwZjJhNzVmNzRlMzY3MWU5MgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL29iamVjdHMvZmEvNDliMDc3OTcyMzkxYWQ1ODAzNzA1MGYyYTc1Zjc0ZTM2NzFlOTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9mZC8wOTNiZmY3MDkwNjE3NTMzNTY1NmU2Y2U2YWUwNTc4MzcwODc2NSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL2ZkLzA5M2JmZjcwOTA2MTc1MzM1NjU2ZTZjZTZhZTA1NzgzNzA4NzY1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9mZC8wOTNiZmY3MDkwNjE3NTMzNTY1NmU2Y2U2YWUwNTc4MzcwODc2NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5pZHgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LmlkeApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvb2JqZWN0cy9wYWNrL3BhY2stZDdjNmFkZjlmNjEzMThmMDQxODQ1YjAxNDQwZDA5YWE3YTkxZTFiNS5wYWNrCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9vYmplY3RzL3BhY2svcGFjay1kN2M2YWRmOWY2MTMxOGYwNDE4NDViMDE0NDBkMDlhYTdhOTFlMWI1LnBhY2sKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yLy5naXR0ZWQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvLmdpdHRlZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi9SRUFETUUgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yL1JFQURNRQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi9SRUFETUUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi9uZXcudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi9uZXcudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvbmV3LnR4dApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi9uZXcudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL1JFQURNRSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yL3N1YmRpci9SRUFETUUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL1JFQURNRQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yL3N1YmRpci9uZXcudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi9zdWJkaXIvbmV3LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yL3N1YmRpci9uZXcudHh0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8yL3N1YmRpci9uZXcudHh0CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL3N1YmRpcjIvUkVBRE1FIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvMi9zdWJkaXIvc3ViZGlyMi9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Rlc3RyZXBvMi9zdWJkaXIvc3ViZGlyMi9SRUFETUUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL3N1YmRpcjIvUkVBRE1FCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL3N1YmRpcjIvbmV3LnR4dCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL3N1YmRpcjIvbmV3LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdGVzdHJlcG8yL3N1YmRpci9zdWJkaXIyL25ldy50eHQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90ZXN0cmVwbzIvc3ViZGlyL3N1YmRpcjIvbmV3LnR4dApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMGMvOGEzZjFmM2Q1ZjQyMWNmODMwNDhjN2M3M2VlM2I1NWE1ZTBmMjkgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMGMvOGEzZjFmM2Q1ZjQyMWNmODMwNDhjN2M3M2VlM2I1NWE1ZTBmMjkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzBjLzhhM2YxZjNkNWY0MjFjZjgzMDQ4YzdjNzNlZTNiNTVhNWUwZjI5CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMGMvOGEzZjFmM2Q1ZjQyMWNmODMwNDhjN2M3M2VlM2I1NWE1ZTBmMjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMTAvMmRjZThlMzA4MWYzOThlNGJkZDlmZDg5NGRjODVhYzNjYTZhNjcgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMTAvMmRjZThlMzA4MWYzOThlNGJkZDlmZDg5NGRjODVhYzNjYTZhNjcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzEwLzJkY2U4ZTMwODFmMzk4ZTRiZGQ5ZmQ4OTRkYzg1YWMzY2E2YTY3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMTAvMmRjZThlMzA4MWYzOThlNGJkZDlmZDg5NGRjODVhYzNjYTZhNjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMTcvN2Q4NjM0YTI4ZTI2ZWM3ODE5Mjg0NzUyNzU3ZWJlMDFhNDc5ZDUgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMTcvN2Q4NjM0YTI4ZTI2ZWM3ODE5Mjg0NzUyNzU3ZWJlMDFhNDc5ZDUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzE3LzdkODYzNGEyOGUyNmVjNzgxOTI4NDc1Mjc1N2ViZTAxYTQ3OWQ1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMTcvN2Q4NjM0YTI4ZTI2ZWM3ODE5Mjg0NzUyNzU3ZWJlMDFhNDc5ZDUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMWMvMzBiODhmNWYzZWU2NmQ3OGRmNjUyMGE3ZGU5ZTg5Yjg5MDgxOGIgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMWMvMzBiODhmNWYzZWU2NmQ3OGRmNjUyMGE3ZGU5ZTg5Yjg5MDgxOGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzFjLzMwYjg4ZjVmM2VlNjZkNzhkZjY1MjBhN2RlOWU4OWI4OTA4MThiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMWMvMzBiODhmNWYzZWU2NmQ3OGRmNjUyMGE3ZGU5ZTg5Yjg5MDgxOGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMWYvNGMwMzExYTI0YjYzZjZmYzIwOWE1OWExZTQwNDk0MmQ0YTUwMDYgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMWYvNGMwMzExYTI0YjYzZjZmYzIwOWE1OWExZTQwNDk0MmQ0YTUwMDYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzFmLzRjMDMxMWEyNGI2M2Y2ZmMyMDlhNTlhMWU0MDQ5NDJkNGE1MDA2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMWYvNGMwMzExYTI0YjYzZjZmYzIwOWE1OWExZTQwNDk0MmQ0YTUwMDYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMjIvMjRlMTkxNTE0Y2I0YmQ4YzU2NmQ4MGRhYzIyZGZjYjFlOWJiODMgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMjIvMjRlMTkxNTE0Y2I0YmQ4YzU2NmQ4MGRhYzIyZGZjYjFlOWJiODMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzIyLzI0ZTE5MTUxNGNiNGJkOGM1NjZkODBkYWMyMmRmY2IxZTliYjgzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMjIvMjRlMTkxNTE0Y2I0YmQ4YzU2NmQ4MGRhYzIyZGZjYjFlOWJiODMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMjkvNmU1NjAyM2NkYzAzNGQyNzM1ZmVlOGMwZDg1YTY1OWQxYjA3ZjQgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMjkvNmU1NjAyM2NkYzAzNGQyNzM1ZmVlOGMwZDg1YTY1OWQxYjA3ZjQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzI5LzZlNTYwMjNjZGMwMzRkMjczNWZlZThjMGQ4NWE2NTlkMWIwN2Y0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMjkvNmU1NjAyM2NkYzAzNGQyNzM1ZmVlOGMwZDg1YTY1OWQxYjA3ZjQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMzEvNTE4ODBhZTJiMzYzZjFjMjYyY2Y5OGI3NTBjMWYxNjlhMGQ0MzIgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMzEvNTE4ODBhZTJiMzYzZjFjMjYyY2Y5OGI3NTBjMWYxNjlhMGQ0MzIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzMxLzUxODgwYWUyYjM2M2YxYzI2MmNmOThiNzUwYzFmMTY5YTBkNDMyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvMzEvNTE4ODBhZTJiMzYzZjFjMjYyY2Y5OGI3NTBjMWYxNjlhMGQ0MzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvM2IvMjg3Zjg3MzBjODFkMGI3NjNjMmQyOTQ2MThhNWUzMmI2N2I0ZjggYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvM2IvMjg3Zjg3MzBjODFkMGI3NjNjMmQyOTQ2MThhNWUzMmI2N2I0ZjgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzNiLzI4N2Y4NzMwYzgxZDBiNzYzYzJkMjk0NjE4YTVlMzJiNjdiNGY4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvM2IvMjg3Zjg3MzBjODFkMGI3NjNjMmQyOTQ2MThhNWUzMmI2N2I0ZjgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNDIvYjczMTFhYTYyNmU3MTI4OTE5NDBjMWVjNWQ1Y2JhMjAxOTQ2YTQgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNDIvYjczMTFhYTYyNmU3MTI4OTE5NDBjMWVjNWQ1Y2JhMjAxOTQ2YTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzQyL2I3MzExYWE2MjZlNzEyODkxOTQwYzFlYzVkNWNiYTIwMTk0NmE0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNDIvYjczMTFhYTYyNmU3MTI4OTE5NDBjMWVjNWQ1Y2JhMjAxOTQ2YTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNDkvNmQ2NDI4YjljZjkyOTgxZGM5NDk1MjExZTZlMTEyMGZiNmYyYmEgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNDkvNmQ2NDI4YjljZjkyOTgxZGM5NDk1MjExZTZlMTEyMGZiNmYyYmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzQ5LzZkNjQyOGI5Y2Y5Mjk4MWRjOTQ5NTIxMWU2ZTExMjBmYjZmMmJhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNDkvNmQ2NDI4YjljZjkyOTgxZGM5NDk1MjExZTZlMTEyMGZiNmYyYmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNTkvYjBjZjdkNzQ2NTllMWNkYjEzMzA1MzE5ZDZkNGNlMjczM2MxMTggYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNTkvYjBjZjdkNzQ2NTllMWNkYjEzMzA1MzE5ZDZkNGNlMjczM2MxMTgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzU5L2IwY2Y3ZDc0NjU5ZTFjZGIxMzMwNTMxOWQ2ZDRjZTI3MzNjMTE4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNTkvYjBjZjdkNzQ2NTllMWNkYjEzMzA1MzE5ZDZkNGNlMjczM2MxMTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNmEvYjVkMjhhY2JmM2MzYmRmZjI3NmY3Y2NmZGYyOWMxNTIwZTU0MmYgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNmEvYjVkMjhhY2JmM2MzYmRmZjI3NmY3Y2NmZGYyOWMxNTIwZTU0MmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzZhL2I1ZDI4YWNiZjNjM2JkZmYyNzZmN2NjZmRmMjljMTUyMGU1NDJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNmEvYjVkMjhhY2JmM2MzYmRmZjI3NmY3Y2NmZGYyOWMxNTIwZTU0MmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNmMvZmNhNTQyYjU1YjhiMzcwMTdlNjEyNWE0YjhmNTlhNmVhZTZmMTEgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNmMvZmNhNTQyYjU1YjhiMzcwMTdlNjEyNWE0YjhmNTlhNmVhZTZmMTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzZjL2ZjYTU0MmI1NWI4YjM3MDE3ZTYxMjVhNGI4ZjU5YTZlYWU2ZjExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNmMvZmNhNTQyYjU1YjhiMzcwMTdlNjEyNWE0YjhmNTlhNmVhZTZmMTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNzYvNWIzMmM2NWQzOGYwNGM0ZjI4N2FiZGEwNTU4MThlYzBmMjY5MTIgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNzYvNWIzMmM2NWQzOGYwNGM0ZjI4N2FiZGEwNTU4MThlYzBmMjY5MTIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzc2LzViMzJjNjVkMzhmMDRjNGYyODdhYmRhMDU1ODE4ZWMwZjI2OTEyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvNzYvNWIzMmM2NWQzOGYwNGM0ZjI4N2FiZGEwNTU4MThlYzBmMjY5MTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvN2IvOGMzMzZjNDVmYzY4OTVjMWM2MDgyNzI2MGZlNWQ3OThlNWQyNDcgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvN2IvOGMzMzZjNDVmYzY4OTVjMWM2MDgyNzI2MGZlNWQ3OThlNWQyNDcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzdiLzhjMzM2YzQ1ZmM2ODk1YzFjNjA4MjcyNjBmZTVkNzk4ZTVkMjQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvN2IvOGMzMzZjNDVmYzY4OTVjMWM2MDgyNzI2MGZlNWQ3OThlNWQyNDcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzgyL2JmOWExYTEwYTRiMjVjMWYxNGM5NjA3YjYwOTcwNzA1ZTkyNTQ1IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzgyL2JmOWExYTEwYTRiMjVjMWYxNGM5NjA3YjYwOTcwNzA1ZTkyNTQ1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy84Mi9iZjlhMWExMGE0YjI1YzFmMTRjOTYwN2I2MDk3MDcwNWU5MjU0NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzgyL2JmOWExYTEwYTRiMjVjMWYxNGM5NjA3YjYwOTcwNzA1ZTkyNTQ1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzhiLzgyZmIxNzk0Y2IxYzhjN2YxNzJlYzczMGE0YzJkYjBhZTNlNjUwIGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzhiLzgyZmIxNzk0Y2IxYzhjN2YxNzJlYzczMGE0YzJkYjBhZTNlNjUwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy84Yi84MmZiMTc5NGNiMWM4YzdmMTcyZWM3MzBhNGMyZGIwYWUzZTY1MApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzhiLzgyZmIxNzk0Y2IxYzhjN2YxNzJlYzczMGE0YzJkYjBhZTNlNjUwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzlhLzQwYTJmMTFjMTkxZjE4MGM0N2U1NGIxMTU2N2NiM2MxZTg5YjMwIGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzlhLzQwYTJmMTFjMTkxZjE4MGM0N2U1NGIxMTU2N2NiM2MxZTg5YjMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy85YS80MGEyZjExYzE5MWYxODBjNDdlNTRiMTE1NjdjYjNjMWU4OWIzMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzlhLzQwYTJmMTFjMTkxZjE4MGM0N2U1NGIxMTU2N2NiM2MxZTg5YjMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzliLzIxOTM0MzYxMGM4OGExMTg3Yzk5NmQwZGM1ODMzMGI1NWNlZTI4IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzliLzIxOTM0MzYxMGM4OGExMTg3Yzk5NmQwZGM1ODMzMGI1NWNlZTI4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy85Yi8yMTkzNDM2MTBjODhhMTE4N2M5OTZkMGRjNTgzMzBiNTVjZWUyOApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzliLzIxOTM0MzYxMGM4OGExMTg3Yzk5NmQwZGM1ODMzMGI1NWNlZTI4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzlmL2UwNmE1MGY0ZDE2MzRkNmM2ODc5ODU0ZDAxZDgwODU3Mzg4NzA2IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzlmL2UwNmE1MGY0ZDE2MzRkNmM2ODc5ODU0ZDAxZDgwODU3Mzg4NzA2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy85Zi9lMDZhNTBmNGQxNjM0ZDZjNjg3OTg1NGQwMWQ4MDg1NzM4ODcwNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzLzlmL2UwNmE1MGY0ZDE2MzRkNmM2ODc5ODU0ZDAxZDgwODU3Mzg4NzA2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2E0LzFhNDlmOGY1Y2Q5YjZjYjE0YTA3NmJmODM5NDg4MWVkMGI0ZDE5IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2E0LzFhNDlmOGY1Y2Q5YjZjYjE0YTA3NmJmODM5NDg4MWVkMGI0ZDE5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9hNC8xYTQ5ZjhmNWNkOWI2Y2IxNGEwNzZiZjgzOTQ4ODFlZDBiNGQxOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2E0LzFhNDlmOGY1Y2Q5YjZjYjE0YTA3NmJmODM5NDg4MWVkMGI0ZDE5CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2E5LzUzYTAxOGM1YjEwYjIwYzg2ZTY5ZmVmNTVlYmM4YWQ0YzVhNDE3IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2E5LzUzYTAxOGM1YjEwYjIwYzg2ZTY5ZmVmNTVlYmM4YWQ0YzVhNDE3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9hOS81M2EwMThjNWIxMGIyMGM4NmU2OWZlZjU1ZWJjOGFkNGM1YTQxNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2E5LzUzYTAxOGM1YjEwYjIwYzg2ZTY5ZmVmNTVlYmM4YWQ0YzVhNDE3CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9hOS9jY2UzY2QxYjNlZmJkYTViMWY0YTZkY2MzZjE1NzBiMmQzZDc0YyBiL3Rlc3RzL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9hOS9jY2UzY2QxYjNlZmJkYTViMWY0YTZkY2MzZjE1NzBiMmQzZDc0YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYTkvY2NlM2NkMWIzZWZiZGE1YjFmNGE2ZGNjM2YxNTcwYjJkM2Q3NGMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9hOS9jY2UzY2QxYjNlZmJkYTViMWY0YTZkY2MzZjE1NzBiMmQzZDc0YwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYmQvMTczMmM0M2M2OGQ3MTJhZDA5ZTFkODcyYjliZTZkNGI5ZWZkYzQgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYmQvMTczMmM0M2M2OGQ3MTJhZDA5ZTFkODcyYjliZTZkNGI5ZWZkYzQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2JkLzE3MzJjNDNjNjhkNzEyYWQwOWUxZDg3MmI5YmU2ZDRiOWVmZGM0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYmQvMTczMmM0M2M2OGQ3MTJhZDA5ZTFkODcyYjliZTZkNGI5ZWZkYzQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYzMvN2E3ODNjMjBkOTJhYzkyMzYyYTc4YTMyODYwZjdlZWJmOTM4ZWYgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYzMvN2E3ODNjMjBkOTJhYzkyMzYyYTc4YTMyODYwZjdlZWJmOTM4ZWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2MzLzdhNzgzYzIwZDkyYWM5MjM2MmE3OGEzMjg2MGY3ZWViZjkzOGVmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvYzMvN2E3ODNjMjBkOTJhYzkyMzYyYTc4YTMyODYwZjdlZWJmOTM4ZWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvY2IvZGQ0MGZhY2FiMTY4Mjc1NGViNjdmN2E0M2YyOWU2NzI5MDNjZjYgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvY2IvZGQ0MGZhY2FiMTY4Mjc1NGViNjdmN2E0M2YyOWU2NzI5MDNjZjYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2NiL2RkNDBmYWNhYjE2ODI3NTRlYjY3ZjdhNDNmMjllNjcyOTAzY2Y2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvY2IvZGQ0MGZhY2FiMTY4Mjc1NGViNjdmN2E0M2YyOWU2NzI5MDNjZjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvY2QvZjk3ZmQzYmI0OGViMzgyNzYzOGJiMzNkMjA4ZjVmZDMyZDBhYTYgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvY2QvZjk3ZmQzYmI0OGViMzgyNzYzOGJiMzNkMjA4ZjVmZDMyZDBhYTYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2NkL2Y5N2ZkM2JiNDhlYjM4Mjc2MzhiYjMzZDIwOGY1ZmQzMmQwYWE2CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvY2QvZjk3ZmQzYmI0OGViMzgyNzYzOGJiMzNkMjA4ZjVmZDMyZDBhYTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvZDYvZjEwZDU0OWNiMzM1YjllNmQzOGFmYzFmMDA4OGJlNjliNTA0OTQgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvZDYvZjEwZDU0OWNiMzM1YjllNmQzOGFmYzFmMDA4OGJlNjliNTA0OTQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2Q2L2YxMGQ1NDljYjMzNWI5ZTZkMzhhZmMxZjAwODhiZTY5YjUwNDk0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvZDYvZjEwZDU0OWNiMzM1YjllNmQzOGFmYzFmMDA4OGJlNjliNTA0OTQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvZDkvYWNkYzdhZTc2MzJhZGZlZWM2N2ZhNzNjMWUzNDNjZjRkMWY0N2UgYi90ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvZDkvYWNkYzdhZTc2MzJhZGZlZWM2N2ZhNzNjMWUzNDNjZjRkMWY0N2UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2Q5L2FjZGM3YWU3NjMyYWRmZWVjNjdmYTczYzFlMzQzY2Y0ZDFmNDdlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L29iamVjdHMvZDkvYWNkYzdhZTc2MzJhZGZlZWM2N2ZhNzNjMWUzNDNjZjRkMWY0N2UKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2VmLzA0ODhmMGI3MjJmMGJlOGJjYjkwYTc3MzBhYzdlZmFmZDFkNjk0IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2VmLzA0ODhmMGI3MjJmMGJlOGJjYjkwYTc3MzBhYzdlZmFmZDFkNjk0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9lZi8wNDg4ZjBiNzIyZjBiZThiY2I5MGE3NzMwYWM3ZWZhZmQxZDY5NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2VmLzA0ODhmMGI3MjJmMGJlOGJjYjkwYTc3MzBhYzdlZmFmZDFkNjk0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2ZjL2Y3ZTNmNTFjMTFkMTk5YWI3YTc4NDAzZWU0ZjljY2QwMjhkYTI1IGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2ZjL2Y3ZTNmNTFjMTFkMTk5YWI3YTc4NDAzZWU0ZjljY2QwMjhkYTI1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvb2JqZWN0cy9mYy9mN2UzZjUxYzExZDE5OWFiN2E3ODQwM2VlNGY5Y2NkMDI4ZGEyNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9vYmplY3RzL2ZjL2Y3ZTNmNTFjMTFkMTk5YWI3YTc4NDAzZWU0ZjljY2QwMjhkYTI1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9yZWZzL2hlYWRzL2ZpcnN0LWJyYW5jaCBiL3Rlc3RzL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvcmVmcy9oZWFkcy9maXJzdC1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9yZWZzL2hlYWRzL2ZpcnN0LWJyYW5jaApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9yZWZzL2hlYWRzL2ZpcnN0LWJyYW5jaApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHdvd2F5bWVyZ2UuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvcmVmcy9oZWFkcy9zZWNvbmQtYnJhbmNoIGIvdGVzdHMvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9yZWZzL2hlYWRzL3NlY29uZC1icmFuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R3b3dheW1lcmdlLmdpdC9yZWZzL2hlYWRzL3NlY29uZC1icmFuY2gKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90d293YXltZXJnZS5naXQvcmVmcy9oZWFkcy9zZWNvbmQtYnJhbmNoCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9jb25maWcKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL2Rlc2NyaXB0aW9uIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9kZXNjcmlwdGlvbgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL2Rlc2NyaXB0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9pbmRleApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvaW5kZXgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvaW5mby9leGNsdWRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9pbmZvL2V4Y2x1ZGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YiBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Ivb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvcGFja2VkLXJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL3BhY2tlZC1yZWZzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvcGFja2VkLXJlZnMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL3JlZnMvaGVhZHMvbWFzdGVyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9yZWZzL2hlYWRzL21hc3RlcgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9iL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2IvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvYi9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL0hFQUQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2NvbmZpZwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2NvbmZpZwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvZGVzY3JpcHRpb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2Rlc2NyaXB0aW9uCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2luZGV4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9pbmRleApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2luZGV4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2luZm8vZXhjbHVkZSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9pbmZvL2V4Y2x1ZGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL2luZm8vZXhjbHVkZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy8wNi8zNjJmZTJmZGI3MDEwZDBlNDQ3YjRmYjQ1MGQ0MDU0MjA0NzlhMQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzBlLzZhM2NhNDhiZDQ3Y2ZlNjc2ODFhY2YzOWFhMGIxMGEwYjkyNDg0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvMTcvZDBlY2U2ZTk2NDYwYTA2NTkyZDlkOWQwMDBkZTM3YmE0MjMyYzUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MyBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy80MS9iZDRiYzNkZjk3OGRlNjk1ZjY3YWNlNjRjNTYwOTEzZGExMTY1MwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzQ4LzAwOTU4ODJkMjgxZWQ2NzZmZTViODYzNTY5NTIwZTU0YTdkNWMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNWUvNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy82Yi8zMWM2NTk1NDU1MDdjMzgxZTljZDM0ZWM1MDhmMTZjMDRlMTQ5ZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZiBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy83My9iYTkyNGE4MDQzNzA5Nzc5NWFlODM5ZTY2ZTE4N2M1NWQzYmFiZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzc4LzBkNzM5N2Y1ZThmOGY0NzdmYjU1YjdhZjNhY2NjMjE1NGIyZDRhCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzLzc4LzllZmJkYWRhYTRhNTgyNzc4ZDQ1ODQzODU0OTU1NTllYTA5OTRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL29iamVjdHMvODgvMzRiNjM1ZGQ0NjhhODNjYjAxMmY2ZmVhY2U5NjhjMWM5ZjVkNmUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Qvb2JqZWN0cy9kMC81ZjJjZDVjYzc3YWRkZjY4ZWQ2ZjUwZDYyMmM5YTRmNzMyZTZjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9wYWNrZWQtcmVmcyBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9wYWNrZWQtcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvcGFja2VkLXJlZnMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9wYWNrZWQtcmVmcwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2QvcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZC9yZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9kL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvSEVBRApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvY29uZmlnCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9kZXNjcmlwdGlvbiBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9kZXNjcmlwdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9kZXNjcmlwdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvaW5kZXgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL2luZGV4CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvaW5mby9leGNsdWRlIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvaW5mby9leGNsdWRlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvaW5mby9leGNsdWRlCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvMDYvMzYyZmUyZmRiNzAxMGQwZTQ0N2I0ZmI0NTBkNDA1NDIwNDc5YTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzA2LzM2MmZlMmZkYjcwMTBkMGU0NDdiNGZiNDUwZDQwNTQyMDQ3OWExCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy8wZS82YTNjYTQ4YmQ0N2NmZTY3NjgxYWNmMzlhYTBiMTBhMGI5MjQ4NApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvMGUvNmEzY2E0OGJkNDdjZmU2NzY4MWFjZjM5YWEwYjEwYTBiOTI0ODQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzE3L2QwZWNlNmU5NjQ2MGEwNjU5MmQ5ZDlkMDAwZGUzN2JhNDIzMmM1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy8xNy9kMGVjZTZlOTY0NjBhMDY1OTJkOWQ5ZDAwMGRlMzdiYTQyMzJjNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNDEvYmQ0YmMzZGY5NzhkZTY5NWY2N2FjZTY0YzU2MDkxM2RhMTE2NTMKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzQxL2JkNGJjM2RmOTc4ZGU2OTVmNjdhY2U2NGM1NjA5MTNkYTExNjUzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy80OC8wMDk1ODgyZDI4MWVkNjc2ZmU1Yjg2MzU2OTUyMGU1NGE3ZDVjMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNDgvMDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzVlLzQ5NjM1OTVhOTc3NGI5MDUyNGQzNWE4MDcxNjkwNDlkZThjY2FkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy81ZS80OTYzNTk1YTk3NzRiOTA1MjRkMzVhODA3MTY5MDQ5ZGU4Y2NhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNmIvMzFjNjU5NTQ1NTA3YzM4MWU5Y2QzNGVjNTA4ZjE2YzA0ZTE0OWUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzZiLzMxYzY1OTU0NTUwN2MzODFlOWNkMzRlYzUwOGYxNmMwNGUxNDllCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNzMvYmE5MjRhODA0MzcwOTc3OTVhZTgzOWU2NmUxODdjNTVkM2JhYmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzczL2JhOTI0YTgwNDM3MDk3Nzk1YWU4MzllNjZlMTg3YzU1ZDNiYWJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy83OC8wZDczOTdmNWU4ZjhmNDc3ZmI1NWI3YWYzYWNjYzIxNTRiMmQ0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNzgvMGQ3Mzk3ZjVlOGY4ZjQ3N2ZiNTViN2FmM2FjY2MyMTU0YjJkNGEKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy83OC85ZWZiZGFkYWE0YTU4Mjc3OGQ0NTg0Mzg1NDk1NTU5ZWEwOTk0YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvNzgvOWVmYmRhZGFhNGE1ODI3NzhkNDU4NDM4NTQ5NTU1OWVhMDk5NGIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzLzg4LzM0YjYzNWRkNDY4YTgzY2IwMTJmNmZlYWNlOTY4YzFjOWY1ZDZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2Uvb2JqZWN0cy84OC8zNGI2MzVkZDQ2OGE4M2NiMDEyZjZmZWFjZTk2OGMxYzlmNWQ2ZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL29iamVjdHMvZDAvNWYyY2Q1Y2M3N2FkZGY2OGVkNmY1MGQ2MjJjOWE0ZjczMmU2YzUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9vYmplY3RzL2QwLzVmMmNkNWNjNzdhZGRmNjhlZDZmNTBkNjIyYzlhNGY3MzJlNmM1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL3BhY2tlZC1yZWZzIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL3BhY2tlZC1yZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9wYWNrZWQtcmVmcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL3BhY2tlZC1yZWZzCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9yZWZzL2hlYWRzL21hc3RlciBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL21vZHVsZXMvZS9yZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvbW9kdWxlcy9lL3JlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9tb2R1bGVzL2UvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMGQvNzg1Nzg3OTViN2NhNDlmZDhkZjZjNGI2ZDI3YzVjMDJkOTkxZDggYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzBkLzc4NTc4Nzk1YjdjYTQ5ZmQ4ZGY2YzRiNmQyN2M1YzAyZDk5MWQ4CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMGQvNzg1Nzg3OTViN2NhNDlmZDhkZjZjNGI2ZDI3YzVjMDJkOTkxZDgKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMGQvNzg1Nzg3OTViN2NhNDlmZDhkZjZjNGI2ZDI3YzVjMDJkOTkxZDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzBlLzdlZDE0MGI1MTRiOGNhZTIzMjU0Y2I4NjU2ZmUxNjc0NDAzYWZmIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8wZS83ZWQxNDBiNTE0YjhjYWUyMzI1NGNiODY1NmZlMTY3NDQwM2FmZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzBlLzdlZDE0MGI1MTRiOGNhZTIzMjU0Y2I4NjU2ZmUxNjc0NDAzYWZmCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzBlLzdlZDE0MGI1MTRiOGNhZTIzMjU0Y2I4NjU2ZmUxNjc0NDAzYWZmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8wZi9mNDYxZGE5Njg5MjY2ZjQ4MmQ4ZjY2NTRhNDQwMGI0ZTMzYzU4NiBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMGYvZjQ2MWRhOTY4OTI2NmY0ODJkOGY2NjU0YTQ0MDBiNGUzM2M1ODYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8wZi9mNDYxZGE5Njg5MjY2ZjQ4MmQ4ZjY2NTRhNDQwMGI0ZTMzYzU4NgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8wZi9mNDYxZGE5Njg5MjY2ZjQ4MmQ4ZjY2NTRhNDQwMGI0ZTMzYzU4NgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMTgvYWE3ZTQ1YmJlNGMzY2MyNGEwYjA3OTY5NmM1OWQzNjY3NWFmOTcgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzE4L2FhN2U0NWJiZTRjM2NjMjRhMGIwNzk2OTZjNTlkMzY2NzVhZjk3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMTgvYWE3ZTQ1YmJlNGMzY2MyNGEwYjA3OTY5NmM1OWQzNjY3NWFmOTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMTgvYWE3ZTQ1YmJlNGMzY2MyNGEwYjA3OTY5NmM1OWQzNjY3NWFmOTcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzFiLzYzY2FhZTRhNWNhOTZmNzhlOGRmZWZjMzc2YzZhMzlhMTQyNDc1IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8xYi82M2NhYWU0YTVjYTk2Zjc4ZThkZmVmYzM3NmM2YTM5YTE0MjQ3NQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzFiLzYzY2FhZTRhNWNhOTZmNzhlOGRmZWZjMzc2YzZhMzlhMTQyNDc1CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzFiLzYzY2FhZTRhNWNhOTZmNzhlOGRmZWZjMzc2YzZhMzlhMTQyNDc1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8xZS9hYmU4MmFhM2IyMzY1YTM5NGY2MTA4ZjI0NDM1ZGY2ZTE5M2QwMiBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvMWUvYWJlODJhYTNiMjM2NWEzOTRmNjEwOGYyNDQzNWRmNmUxOTNkMDIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8xZS9hYmU4MmFhM2IyMzY1YTM5NGY2MTA4ZjI0NDM1ZGY2ZTE5M2QwMgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy8xZS9hYmU4MmFhM2IyMzY1YTM5NGY2MTA4ZjI0NDM1ZGY2ZTE5M2QwMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNDIvMDYxYzAxYTFjNzAwOTdkMWU0NTc5ZjI5YTVhZGY0MGFiZGVjOTUgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzQyLzA2MWMwMWExYzcwMDk3ZDFlNDU3OWYyOWE1YWRmNDBhYmRlYzk1CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNDIvMDYxYzAxYTFjNzAwOTdkMWU0NTc5ZjI5YTVhZGY0MGFiZGVjOTUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNDIvMDYxYzAxYTFjNzAwOTdkMWU0NTc5ZjI5YTVhZGY0MGFiZGVjOTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzQ2LzI4MzhjZWU0NzZhODdlN2NmZjMyMTk2YjY2ZmExOGVkNzU2NTkyIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy80Ni8yODM4Y2VlNDc2YTg3ZTdjZmYzMjE5NmI2NmZhMThlZDc1NjU5MgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzQ2LzI4MzhjZWU0NzZhODdlN2NmZjMyMTk2YjY2ZmExOGVkNzU2NTkyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzQ2LzI4MzhjZWU0NzZhODdlN2NmZjMyMTk2YjY2ZmExOGVkNzU2NTkyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82My80OTllNGVhOGUwOTZiODMxNTE1Y2ViMWQ1YTc1OTNlNGQ4N2FlNSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNjMvNDk5ZTRlYThlMDk2YjgzMTUxNWNlYjFkNWE3NTkzZTRkODdhZTUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82My80OTllNGVhOGUwOTZiODMxNTE1Y2ViMWQ1YTc1OTNlNGQ4N2FlNQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82My80OTllNGVhOGUwOTZiODMxNTE1Y2ViMWQ1YTc1OTNlNGQ4N2FlNQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNjgvMWFmOTRlMTBlYWYyNjJmM2FiN2NiOWI4ZmQ1ZjQxNThiYTRkM2UgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzY4LzFhZjk0ZTEwZWFmMjYyZjNhYjdjYjliOGZkNWY0MTU4YmE0ZDNlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNjgvMWFmOTRlMTBlYWYyNjJmM2FiN2NiOWI4ZmQ1ZjQxNThiYTRkM2UKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNjgvMWFmOTRlMTBlYWYyNjJmM2FiN2NiOWI4ZmQ1ZjQxNThiYTRkM2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzZhLzkwMDg2MDJiODExZTY5YTliN2EyZDgzNDk2ZjM5YTc5NGZkZWViIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82YS85MDA4NjAyYjgxMWU2OWE5YjdhMmQ4MzQ5NmYzOWE3OTRmZGVlYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzZhLzkwMDg2MDJiODExZTY5YTliN2EyZDgzNDk2ZjM5YTc5NGZkZWViCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzZhLzkwMDg2MDJiODExZTY5YTliN2EyZDgzNDk2ZjM5YTc5NGZkZWViCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82ZS9hZTI2YzkwZThjY2M0ZDE2MjA4OTcyMTE5YzQwNjM1NDg5YzZmMCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNmUvYWUyNmM5MGU4Y2NjNGQxNjIwODk3MjExOWM0MDYzNTQ4OWM2ZjAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82ZS9hZTI2YzkwZThjY2M0ZDE2MjA4OTcyMTE5YzQwNjM1NDg5YzZmMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy82ZS9hZTI2YzkwZThjY2M0ZDE2MjA4OTcyMTE5YzQwNjM1NDg5YzZmMApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNmYvMzllYWJiYjhhNzU0MTUxNWUwZDM1OTcxMDc4YmNjYjUwMmU3ZTAgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzZmLzM5ZWFiYmI4YTc1NDE1MTVlMGQzNTk3MTA3OGJjY2I1MDJlN2UwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNmYvMzllYWJiYjhhNzU0MTUxNWUwZDM1OTcxMDc4YmNjYjUwMmU3ZTAKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNmYvMzllYWJiYjhhNzU0MTUxNWUwZDM1OTcxMDc4YmNjYjUwMmU3ZTAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzcxLzU0ZDMwODM0NjE1MzZkZmM3MWFkNTU0MmYzZTY1ZTcyM2EwNmM0IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy83MS81NGQzMDgzNDYxNTM2ZGZjNzFhZDU1NDJmM2U2NWU3MjNhMDZjNApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzcxLzU0ZDMwODM0NjE1MzZkZmM3MWFkNTU0MmYzZTY1ZTcyM2EwNmM0CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzcxLzU0ZDMwODM0NjE1MzZkZmM3MWFkNTU0MmYzZTY1ZTcyM2EwNmM0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy83NS81NmMxZDg5M2E0YzBjYTg1YWM4YWM1MWRlNDdmZjM5OTc1ODcyOSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNzUvNTZjMWQ4OTNhNGMwY2E4NWFjOGFjNTFkZTQ3ZmYzOTk3NTg3MjkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy83NS81NmMxZDg5M2E0YzBjYTg1YWM4YWM1MWRlNDdmZjM5OTc1ODcyOQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy83NS81NmMxZDg5M2E0YzBjYTg1YWM4YWM1MWRlNDdmZjM5OTc1ODcyOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNzYvZmVmODQ0MDY0YzI2ZDVlMDZjMjUwODI0MGRhZTY2MWU3MjMxYjIgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzc2L2ZlZjg0NDA2NGMyNmQ1ZTA2YzI1MDgyNDBkYWU2NjFlNzIzMWIyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNzYvZmVmODQ0MDY0YzI2ZDVlMDZjMjUwODI0MGRhZTY2MWU3MjMxYjIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvNzYvZmVmODQ0MDY0YzI2ZDVlMDZjMjUwODI0MGRhZTY2MWU3MjMxYjIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzc5L2I5ZjIzZTg1ZjU1ZWEzNmE0NzJhOTAyZTg3NWJjMTEyMWE5NGNiIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy83OS9iOWYyM2U4NWY1NWVhMzZhNDcyYTkwMmU4NzViYzExMjFhOTRjYgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzc5L2I5ZjIzZTg1ZjU1ZWEzNmE0NzJhOTAyZTg3NWJjMTEyMWE5NGNiCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzc5L2I5ZjIzZTg1ZjU1ZWEzNmE0NzJhOTAyZTg3NWJjMTEyMWE5NGNiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy84NS8yOGRhMGVhNjVlYWNmMWY3NGY5ZWQ2Njk2YWRiYWM1NDc5NjNhZCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvODUvMjhkYTBlYTY1ZWFjZjFmNzRmOWVkNjY5NmFkYmFjNTQ3OTYzYWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy84NS8yOGRhMGVhNjVlYWNmMWY3NGY5ZWQ2Njk2YWRiYWM1NDc5NjNhZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy84NS8yOGRhMGVhNjVlYWNmMWY3NGY5ZWQ2Njk2YWRiYWM1NDc5NjNhZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOGIvMzcyNmIzNjU4MjRhZDVhMDdjNTM3MjQ3ZjRiYzczZWQ3ZDM3ZWEgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzhiLzM3MjZiMzY1ODI0YWQ1YTA3YzUzNzI0N2Y0YmM3M2VkN2QzN2VhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOGIvMzcyNmIzNjU4MjRhZDVhMDdjNTM3MjQ3ZjRiYzczZWQ3ZDM3ZWEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOGIvMzcyNmIzNjU4MjRhZDVhMDdjNTM3MjQ3ZjRiYzczZWQ3ZDM3ZWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzkzLzNlMjhjMWM4YTY4ODM4YTc2M2QyNTBiZGYwYjJjNjA2ODI4OWMzIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85My8zZTI4YzFjOGE2ODgzOGE3NjNkMjUwYmRmMGIyYzYwNjgyODljMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzkzLzNlMjhjMWM4YTY4ODM4YTc2M2QyNTBiZGYwYjJjNjA2ODI4OWMzCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzkzLzNlMjhjMWM4YTY4ODM4YTc2M2QyNTBiZGYwYjJjNjA2ODI4OWMzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85Ni8yNzEwZmU1YjRlNDUzZTllODI3OTQ1YjM0ODdjNTI1OTY4ZWM0YSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOTYvMjcxMGZlNWI0ZTQ1M2U5ZTgyNzk0NWIzNDg3YzUyNTk2OGVjNGEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85Ni8yNzEwZmU1YjRlNDUzZTllODI3OTQ1YjM0ODdjNTI1OTY4ZWM0YQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85Ni8yNzEwZmU1YjRlNDUzZTllODI3OTQ1YjM0ODdjNTI1OTY4ZWM0YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOTYvNmNmMWIzNTk4ZTE5NWIzMWIyY2RlMzc4NGY5YTE5ZjA3MjhhNmYgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzk2LzZjZjFiMzU5OGUxOTViMzFiMmNkZTM3ODRmOWExOWYwNzI4YTZmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOTYvNmNmMWIzNTk4ZTE5NWIzMWIyY2RlMzc4NGY5YTE5ZjA3MjhhNmYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOTYvNmNmMWIzNTk4ZTE5NWIzMWIyY2RlMzc4NGY5YTE5ZjA3MjhhNmYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzk5L2U4YmFiOWVjZTAwOWYwZmJhN2ViNDFmODUwZjRjMTJiZWRiOWI3IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85OS9lOGJhYjllY2UwMDlmMGZiYTdlYjQxZjg1MGY0YzEyYmVkYjliNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzk5L2U4YmFiOWVjZTAwOWYwZmJhN2ViNDFmODUwZjRjMTJiZWRiOWI3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzk5L2U4YmFiOWVjZTAwOWYwZmJhN2ViNDFmODUwZjRjMTJiZWRiOWI3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85Yi8xOWVkZjMzYTAzYTBjNTljZGZjMTEzYmZhNWMwNjE3OWJmOWIxYSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOWIvMTllZGYzM2EwM2EwYzU5Y2RmYzExM2JmYTVjMDYxNzliZjliMWEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85Yi8xOWVkZjMzYTAzYTBjNTljZGZjMTEzYmZhNWMwNjE3OWJmOWIxYQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85Yi8xOWVkZjMzYTAzYTBjNTljZGZjMTEzYmZhNWMwNjE3OWJmOWIxYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOWIvZGI3NWI3MzgzNmE5OWUzZGJlZWE2NDBhODFkZTgxMDMxZmRjMjkgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzliL2RiNzViNzM4MzZhOTllM2RiZWVhNjQwYTgxZGU4MTAzMWZkYzI5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOWIvZGI3NWI3MzgzNmE5OWUzZGJlZWE2NDBhODFkZTgxMDMxZmRjMjkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOWIvZGI3NWI3MzgzNmE5OWUzZGJlZWE2NDBhODFkZTgxMDMxZmRjMjkKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzlkLzAyMzVjN2E3ZWRjMDg4OWExOGY5N2E0MmVlNmRiOWZlNjg4NDQ3IGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85ZC8wMjM1YzdhN2VkYzA4ODlhMThmOTdhNDJlZTZkYjlmZTY4ODQ0NwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzlkLzAyMzVjN2E3ZWRjMDg4OWExOGY5N2E0MmVlNmRiOWZlNjg4NDQ3CnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzLzlkLzAyMzVjN2E3ZWRjMDg4OWExOGY5N2E0MmVlNmRiOWZlNjg4NDQ3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85ZS9mZmM0NTc4NzdmMTA5YjJhNDMxOWUxNGJlZTYxM2ExNWYyYTAwZCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvOWUvZmZjNDU3ODc3ZjEwOWIyYTQzMTllMTRiZWU2MTNhMTVmMmEwMGQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85ZS9mZmM0NTc4NzdmMTA5YjJhNDMxOWUxNGJlZTYxM2ExNWYyYTAwZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy85ZS9mZmM0NTc4NzdmMTA5YjJhNDMxOWUxNGJlZTYxM2ExNWYyYTAwZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvYTAvYTliYWQ2ZjZmNDAzMjUxOThmOTM4YTBlM2FlOTgxNjIyZDc3MDcgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2EwL2E5YmFkNmY2ZjQwMzI1MTk4ZjkzOGEwZTNhZTk4MTYyMmQ3NzA3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvYTAvYTliYWQ2ZjZmNDAzMjUxOThmOTM4YTBlM2FlOTgxNjIyZDc3MDcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvYTAvYTliYWQ2ZjZmNDAzMjUxOThmOTM4YTBlM2FlOTgxNjIyZDc3MDcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2IxLzk3N2RjNGU1NzNiODEyZDQ2MTk3NTRjOTgxMzhjNTY5OTlkYzBkIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9iMS85NzdkYzRlNTczYjgxMmQ0NjE5NzU0Yzk4MTM4YzU2OTk5ZGMwZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2IxLzk3N2RjNGU1NzNiODEyZDQ2MTk3NTRjOTgxMzhjNTY5OTlkYzBkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2IxLzk3N2RjNGU1NzNiODEyZDQ2MTk3NTRjOTgxMzhjNTY5OTlkYzBkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9kNy81OTkyZGQwMjM5MWUxMjhkYWMzMzJkY2M3OGQ2NDlkZDlhYjA5NSBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZDcvNTk5MmRkMDIzOTFlMTI4ZGFjMzMyZGNjNzhkNjQ5ZGQ5YWIwOTUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9kNy81OTkyZGQwMjM5MWUxMjhkYWMzMzJkY2M3OGQ2NDlkZDlhYjA5NQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9kNy81OTkyZGQwMjM5MWUxMjhkYWMzMzJkY2M3OGQ2NDlkZDlhYjA5NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZGEvZTI3MDlkNjM4ZGY1MjIxMmIxZjQzZmY2MTc5N2ViZmVkZmNjN2MgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2RhL2UyNzA5ZDYzOGRmNTIyMTJiMWY0M2ZmNjE3OTdlYmZlZGZjYzdjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZGEvZTI3MDlkNjM4ZGY1MjIxMmIxZjQzZmY2MTc5N2ViZmVkZmNjN2MKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZGEvZTI3MDlkNjM4ZGY1MjIxMmIxZjQzZmY2MTc5N2ViZmVkZmNjN2MKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2UxLzE1MmFkY2I5YWRmMzdlYzU1MWFkYTliYTM3N2FiNTNhZWMzYmFkIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9lMS8xNTJhZGNiOWFkZjM3ZWM1NTFhZGE5YmEzNzdhYjUzYWVjM2JhZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2UxLzE1MmFkY2I5YWRmMzdlYzU1MWFkYTliYTM3N2FiNTNhZWMzYmFkCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2UxLzE1MmFkY2I5YWRmMzdlYzU1MWFkYTliYTM3N2FiNTNhZWMzYmFkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9lNC9lZDQzNmE5ZWIwZjE5OGNkYTcyMjg4NmE1ZjhkNmQ2YzgzNmI3YiBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZTQvZWQ0MzZhOWViMGYxOThjZGE3MjI4ODZhNWY4ZDZkNmM4MzZiN2IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9lNC9lZDQzNmE5ZWIwZjE5OGNkYTcyMjg4NmE1ZjhkNmQ2YzgzNmI3YgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9lNC9lZDQzNmE5ZWIwZjE5OGNkYTcyMjg4NmE1ZjhkNmQ2YzgzNmI3YgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2YyLzBiNzkzNDI3MTJlMGIyMzE1NjQ3Y2Q4MjI3YTU3M2ZkM2JjNDZlIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9mMi8wYjc5MzQyNzEyZTBiMjMxNTY0N2NkODIyN2E1NzNmZDNiYzQ2ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2YyLzBiNzkzNDI3MTJlMGIyMzE1NjQ3Y2Q4MjI3YTU3M2ZkM2JjNDZlCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvLmdpdHRlZC9vYmplY3RzL2YyLzBiNzkzNDI3MTJlMGIyMzE1NjQ3Y2Q4MjI3YTU3M2ZkM2JjNDZlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9mZC9lMDE0N2UzYjU5ZjM4MTYzNWEzYjAxNmUzZmU2ZGFjYjcwNzc5ZCBiL3Rlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL29iamVjdHMvZmQvZTAxNDdlM2I1OWYzODE2MzVhM2IwMTZlM2ZlNmRhY2I3MDc3OWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9mZC9lMDE0N2UzYjU5ZjM4MTYzNWEzYjAxNmUzZmU2ZGFjYjcwNzc5ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvb2JqZWN0cy9mZC9lMDE0N2UzYjU5ZjM4MTYzNWEzYjAxNmUzZmU2ZGFjYjcwNzc5ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy9SRUFETUUubWQgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvUkVBRE1FLm1kCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy90eXBlY2hhbmdlcy9SRUFETUUubWQKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy90eXBlY2hhbmdlcy9SRUFETUUubWQKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzL2dpdG1vZHVsZXMgYi90ZXN0cy9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvZ2l0bW9kdWxlcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdHlwZWNoYW5nZXMvZ2l0bW9kdWxlcwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3R5cGVjaGFuZ2VzL2dpdG1vZHVsZXMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9IRUFECnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvSEVBRApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9IRUFECmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvY29uZmlnIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9jb25maWcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L2Rlc2NyaXB0aW9uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvZGVzY3JpcHRpb24KcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L2luZm8vZXhjbHVkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L2luZm8vZXhjbHVkZQpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9pbmZvL2V4Y2x1ZGUKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzA4LzhiNjQ3MDRlMGQ2YjhiZDA2MWRlYTg3OTQxOGNiNTQ0MmEzZmJmIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzA4LzhiNjQ3MDRlMGQ2YjhiZDA2MWRlYTg3OTQxOGNiNTQ0MmEzZmJmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy8wOC84YjY0NzA0ZTBkNmI4YmQwNjFkZWE4Nzk0MThjYjU0NDJhM2ZiZgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzA4LzhiNjQ3MDRlMGQ2YjhiZDA2MWRlYTg3OTQxOGNiNTQ0MmEzZmJmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzEzL2E1ZTkzOWJjYTI1OTQwYzA2OWZkMjE2OWQ5OTNkYmEzMjhlMzBiIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzEzL2E1ZTkzOWJjYTI1OTQwYzA2OWZkMjE2OWQ5OTNkYmEzMjhlMzBiCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy8xMy9hNWU5MzliY2EyNTk0MGMwNjlmZDIxNjlkOTkzZGJhMzI4ZTMwYgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzEzL2E1ZTkzOWJjYTI1OTQwYzA2OWZkMjE2OWQ5OTNkYmEzMjhlMzBiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzE5L2JmNTY4ZTU5ZTNhMGIzNjNjYWZiNDEwNjIyNmU2MmQ0YTRjNDFjIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzE5L2JmNTY4ZTU5ZTNhMGIzNjNjYWZiNDEwNjIyNmU2MmQ0YTRjNDFjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy8xOS9iZjU2OGU1OWUzYTBiMzYzY2FmYjQxMDYyMjZlNjJkNGE0YzQxYwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzE5L2JmNTY4ZTU5ZTNhMGIzNjNjYWZiNDEwNjIyNmU2MmQ0YTRjNDFjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzU4LzFmYWRkMzViNGNmMzIwZDEwMmExNTJmOTE4NzI5MDExNjA0NzczIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzU4LzFmYWRkMzViNGNmMzIwZDEwMmExNTJmOTE4NzI5MDExNjA0NzczCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy81OC8xZmFkZDM1YjRjZjMyMGQxMDJhMTUyZjkxODcyOTAxMTYwNDc3MwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzU4LzFmYWRkMzViNGNmMzIwZDEwMmExNTJmOTE4NzI5MDExNjA0NzczCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzVjLzg3YjY3OTFlOGIxM2RhNjU4YTE0ZDFlZjdlMDliNWRjM2JhYzhjIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzVjLzg3YjY3OTFlOGIxM2RhNjU4YTE0ZDFlZjdlMDliNWRjM2JhYzhjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy81Yy84N2I2NzkxZThiMTNkYTY1OGExNGQxZWY3ZTA5YjVkYzNiYWM4YwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzVjLzg3YjY3OTFlOGIxM2RhNjU4YTE0ZDFlZjdlMDliNWRjM2JhYzhjCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzZmL2U1ZjUzOThhZjg1ZmIzZGU4YTZhYmEwMzM5YjZkM2JmYTI2YTI3IGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzZmL2U1ZjUzOThhZjg1ZmIzZGU4YTZhYmEwMzM5YjZkM2JmYTI2YTI3CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy82Zi9lNWY1Mzk4YWY4NWZiM2RlOGE2YWJhMDMzOWI2ZDNiZmEyNmEyNwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzZmL2U1ZjUzOThhZjg1ZmIzZGU4YTZhYmEwMzM5YjZkM2JmYTI2YTI3CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzdmL2NjZDc1NjE2ZWMxODhiOGYxYjIzZDY3NTA2YTMzNGNjMzRhNDlkIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzdmL2NjZDc1NjE2ZWMxODhiOGYxYjIzZDY3NTA2YTMzNGNjMzRhNDlkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy83Zi9jY2Q3NTYxNmVjMTg4YjhmMWIyM2Q2NzUwNmEzMzRjYzM0YTQ5ZApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzdmL2NjZDc1NjE2ZWMxODhiOGYxYjIzZDY3NTA2YTMzNGNjMzRhNDlkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzgwLzY5OTk4ODJiZjkxZDI0MjQxZTQwNzc5MDZiOTAxNzYwNWViMWYzIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzgwLzY5OTk4ODJiZjkxZDI0MjQxZTQwNzc5MDZiOTAxNzYwNWViMWYzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy84MC82OTk5ODgyYmY5MWQyNDI0MWU0MDc3OTA2YjkwMTc2MDVlYjFmMwpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzgwLzY5OTk4ODJiZjkxZDI0MjQxZTQwNzc5MDZiOTAxNzYwNWViMWYzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzgzLzdkMTc2MzAzYzUwMDU1MDVlYzFlNGEzMDIzMWM0MDkzMGMwMjMwIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzgzLzdkMTc2MzAzYzUwMDU1MDVlYzFlNGEzMDIzMWM0MDkzMGMwMjMwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy84My83ZDE3NjMwM2M1MDA1NTA1ZWMxZTRhMzAyMzFjNDA5MzBjMDIzMApyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzLzgzLzdkMTc2MzAzYzUwMDU1MDVlYzFlNGEzMDIzMWM0MDkzMGMwMjMwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzL2E4LzU5NWNjY2EwNGY0MDgxOGFlMDE1NWM4ZjljNzdhMjMwZTU5N2I2IGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzL2E4LzU5NWNjY2EwNGY0MDgxOGFlMDE1NWM4ZjljNzdhMjMwZTU5N2I2CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9hOC81OTVjY2NhMDRmNDA4MThhZTAxNTVjOGY5Yzc3YTIzMGU1OTdiNgpyZW5hbWUgdG8gdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9vYmplY3RzL2E4LzU5NWNjY2EwNGY0MDgxOGFlMDE1NWM4ZjljNzdhMjMwZTU5N2I2CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9jZi84ZjFjZjVjY2U4NTljNDM4ZDZjYzA2NzI4NGNiNWUxNjEyMDZlNyBiL3Rlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9jZi84ZjFjZjVjY2U4NTljNDM4ZDZjYzA2NzI4NGNiNWUxNjEyMDZlNwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L29iamVjdHMvY2YvOGYxY2Y1Y2NlODU5YzQzOGQ2Y2MwNjcyODRjYjVlMTYxMjA2ZTcKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9jZi84ZjFjZjVjY2U4NTljNDM4ZDZjYzA2NzI4NGNiNWUxNjEyMDZlNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9kNS8yNzhkMDVjODYwN2VjNDIwYmZlZTRjZjIxOWZiYzBlZWViZmQ2YSBiL3Rlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9kNS8yNzhkMDVjODYwN2VjNDIwYmZlZTRjZjIxOWZiYzBlZWViZmQ2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L29iamVjdHMvZDUvMjc4ZDA1Yzg2MDdlYzQyMGJmZWU0Y2YyMTlmYmMwZWVlYmZkNmEKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9kNS8yNzhkMDVjODYwN2VjNDIwYmZlZTRjZjIxOWZiYzBlZWViZmQ2YQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9mNC9lMTZmYjc2NTM2NTkxYTQxNDU0MTk0MDU4ZDA0OGQ4ZTRkZDJlOSBiL3Rlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9mNC9lMTZmYjc2NTM2NTkxYTQxNDU0MTk0MDU4ZDA0OGQ4ZTRkZDJlOQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L29iamVjdHMvZjQvZTE2ZmI3NjUzNjU5MWE0MTQ1NDE5NDA1OGQwNDhkOGU0ZGQyZTkKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9mNC9lMTZmYjc2NTM2NTkxYTQxNDU0MTk0MDU4ZDA0OGQ4ZTRkZDJlOQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9mOS9lNjU2MTlkOTNmZGYyNjczODgyZTBhMjYxYzVlOTNiMWE4NDAwNiBiL3Rlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9mOS9lNjU2MTlkOTNmZGYyNjczODgyZTBhMjYxYzVlOTNiMWE4NDAwNgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L29iamVjdHMvZjkvZTY1NjE5ZDkzZmRmMjY3Mzg4MmUwYTI2MWM1ZTkzYjFhODQwMDYKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvb2JqZWN0cy9mOS9lNjU2MTlkOTNmZGYyNjczODgyZTBhMjYxYzVlOTNiMWE4NDAwNgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvcmVmcy9oZWFkcy9leGUtZmlsZSBiL3Rlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvcmVmcy9oZWFkcy9leGUtZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L3JlZnMvaGVhZHMvZXhlLWZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvcmVmcy9oZWFkcy9leGUtZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL3Vuc3ltbGlua2VkLmdpdC9yZWZzL2hlYWRzL21hc3RlcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCnJlbmFtZSB0byB0ZXN0cy9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvcmVmcy9oZWFkcy9yZWctZmlsZSBiL3Rlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvcmVmcy9oZWFkcy9yZWctZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXNvdXJjZXMvdW5zeW1saW5rZWQuZ2l0L3JlZnMvaGVhZHMvcmVnLWZpbGUKcmVuYW1lIHRvIHRlc3RzL3Jlc291cmNlcy91bnN5bWxpbmtlZC5naXQvcmVmcy9oZWFkcy9yZWctZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXZ3YWxrL2Jhc2ljLmMgYi90ZXN0cy9yZXZ3YWxrL2Jhc2ljLmMKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9yZXZ3YWxrL2Jhc2ljLmMKcmVuYW1lIHRvIHRlc3RzL3JldndhbGsvYmFzaWMuYwppbmRleCBlODI3NzYyLi42ZDU1YWVkIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3JldndhbGsvYmFzaWMuYworKysgYi90ZXN0cy9yZXZ3YWxrL2Jhc2ljLmMKQEAgLTk4LDI3ICs5OCw0NiBAQAogCXJldHVybiB0ZXN0X3dhbGtfb25seSh3YWxrLCBwb3NzaWJsZV9yZXN1bHRzLCByZXN1bHRzX2NvdW50KTsKIH0KIAotc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpfcmVwbzsKLXN0YXRpYyBnaXRfcmV2d2FsayAqX3dhbGs7CitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKl9yZXBvID0gTlVMTDsKK3N0YXRpYyBnaXRfcmV2d2FsayAqX3dhbGsgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKl9maXh0dXJlID0gTlVMTDsKIAogdm9pZCB0ZXN0X3JldndhbGtfYmFzaWNfX2luaXRpYWxpemUodm9pZCkKIHsKLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZfcmVwbywgY2xfZml4dHVyZSgidGVzdHJlcG8uZ2l0IikpKTsKLQljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19uZXcoJl93YWxrLCBfcmVwbykpOwogfQogCiB2b2lkIHRlc3RfcmV2d2Fsa19iYXNpY19fY2xlYW51cCh2b2lkKQogewogCWdpdF9yZXZ3YWxrX2ZyZWUoX3dhbGspOwotCV93YWxrID0gTlVMTDsKLQlnaXRfcmVwb3NpdG9yeV9mcmVlKF9yZXBvKTsKKworCWlmIChfZml4dHVyZSkKKwkJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworCWVsc2UKKwkJZ2l0X3JlcG9zaXRvcnlfZnJlZShfcmVwbyk7CisKKwlfZml4dHVyZSA9IE5VTEw7CiAJX3JlcG8gPSBOVUxMOworCV93YWxrID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmV2d2Fsa19iYXNpY19zZXR1cF93YWxrKGNvbnN0IGNoYXIgKmZpeHR1cmUpCit7CisJaWYgKGZpeHR1cmUpIHsKKwkJX2ZpeHR1cmUgPSBmaXh0dXJlOworCQlfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoZml4dHVyZSk7CisJfSBlbHNlIHsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmX3JlcG8sIGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKSk7CisJfQorCisJY2xfZ2l0X3Bhc3MoZ2l0X3JldndhbGtfbmV3KCZfd2FsaywgX3JlcG8pKTsKIH0KIAogdm9pZCB0ZXN0X3JldndhbGtfYmFzaWNfX3NvcnRpbmdfbW9kZXModm9pZCkKIHsKIAlnaXRfb2lkIGlkOwogCisJcmV2d2Fsa19iYXNpY19zZXR1cF93YWxrKE5VTEwpOworCiAJZ2l0X29pZF9mcm9tc3RyKCZpZCwgY29tbWl0X2hlYWQpOwogCiAJY2xfZ2l0X3Bhc3ModGVzdF93YWxrKF93YWxrLCAmaWQsIEdJVF9TT1JUX1RJTUUsIGNvbW1pdF9zb3J0aW5nX3RpbWUsIDEpKTsKQEAgLTEzMiw2ICsxNTEsOCBAQAogCWludCBpID0gMDsKIAlnaXRfb2lkIG9pZDsKIAorCXJldndhbGtfYmFzaWNfc2V0dXBfd2FsayhOVUxMKTsKKwogCWNsX2dpdF9wYXNzKGdpdF9yZXZ3YWxrX3B1c2hfZ2xvYihfd2FsaywgImhlYWRzIikpOwogCiAJd2hpbGUgKGdpdF9yZXZ3YWxrX25leHQoJm9pZCwgX3dhbGspID09IDApIHsKQEAgLTE0MiwxMSArMTYzLDMwIEBACiAJY2xfYXNzZXJ0KGkgPT0gMTQpOwogfQogCit2b2lkIHRlc3RfcmV2d2Fsa19iYXNpY19fZ2xvYl9oZWFkc193aXRoX2ludmFsaWQodm9pZCkKK3sKKwlpbnQgaTsKKwlnaXRfb2lkIG9pZDsKKworCXJldndhbGtfYmFzaWNfc2V0dXBfd2FsaygidGVzdHJlcG8iKTsKKworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvLy5naXQvcmVmcy9oZWFkcy9nYXJiYWdlIiwgIm5vdC1hLXJlZiIpOworCWNsX2dpdF9wYXNzKGdpdF9yZXZ3YWxrX3B1c2hfZ2xvYihfd2FsaywgImhlYWRzIikpOworCisJZm9yIChpID0gMDsgIWdpdF9yZXZ3YWxrX25leHQoJm9pZCwgX3dhbGspOyArK2kpCisJCS8qIHdhbGtpbmcgKi87CisKKwkvKiBnaXQgbG9nIC0tYnJhbmNoZXMgLS1vbmVsaW5lIHwgd2MgLWwgPT4gMTYgKi8KKwljbF9hc3NlcnRfZXF1YWxfaSgxNywgaSk7Cit9CisKIHZvaWQgdGVzdF9yZXZ3YWxrX2Jhc2ljX19wdXNoX2hlYWQodm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAJZ2l0X29pZCBvaWQ7CiAKKwlyZXZ3YWxrX2Jhc2ljX3NldHVwX3dhbGsoTlVMTCk7CisKIAljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19wdXNoX2hlYWQoX3dhbGspKTsKIAogCXdoaWxlIChnaXRfcmV2d2Fsa19uZXh0KCZvaWQsIF93YWxrKSA9PSAwKSB7CkBAIC0xNjIsNiArMjAyLDggQEAKIAlpbnQgaSA9IDA7CiAJZ2l0X29pZCBvaWQ7CiAKKwlyZXZ3YWxrX2Jhc2ljX3NldHVwX3dhbGsoTlVMTCk7CisKIAljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19wdXNoX2hlYWQoX3dhbGspKTsKIAljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19oaWRlX3JlZihfd2FsaywgInJlZnMvaGVhZHMvcGFja2VkLXRlc3QiKSk7CiAKQEAgLTE3OCw2ICsyMjAsOCBAQAogCWludCBpID0gMDsKIAlnaXRfb2lkIG9pZDsKIAorCXJldndhbGtfYmFzaWNfc2V0dXBfd2FsayhOVUxMKTsKKwogCWNsX2dpdF9wYXNzKGdpdF9yZXZ3YWxrX3B1c2hfaGVhZChfd2FsaykpOwogCWNsX2dpdF9wYXNzKGdpdF9yZXZ3YWxrX2hpZGVfcmVmKF93YWxrLCAicmVmcy9oZWFkcy9wYWNrZWQiKSk7CiAKQEAgLTE5MywxMiArMjM3LDE2IEBACiB7CiAJZ2l0X29pZCBvaWQ7CiAKKwlyZXZ3YWxrX2Jhc2ljX3NldHVwX3dhbGsoTlVMTCk7CisKIAljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJm9pZCwgIjUyMWQ4N2MxZWMzYWVmOTgyNGRhZjZkOTZjYzBhZTM3MTA3NjZkOTEiKSk7CiAJY2xfZ2l0X2ZhaWwoZ2l0X3JldndhbGtfcHVzaChfd2FsaywgJm9pZCkpOwogfQogCiB2b2lkIHRlc3RfcmV2d2Fsa19iYXNpY19fcHVzaF9yYW5nZSh2b2lkKQogeworCXJldndhbGtfYmFzaWNfc2V0dXBfd2FsayhOVUxMKTsKKwogCWdpdF9yZXZ3YWxrX3Jlc2V0KF93YWxrKTsKIAlnaXRfcmV2d2Fsa19zb3J0aW5nKF93YWxrLCAwKTsKIAljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19wdXNoX3JhbmdlKF93YWxrLCAiOWZkNzM4ZX4yLi45ZmQ3MzhlIikpOwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9yZXZ3YWxrL21lcmdlYmFzZS5jIGIvdGVzdHMvcmV2d2Fsay9tZXJnZWJhc2UuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3JldndhbGsvbWVyZ2ViYXNlLmMKcmVuYW1lIHRvIHRlc3RzL3JldndhbGsvbWVyZ2ViYXNlLmMKaW5kZXggZTI2MTdhYi4uMmQwMTY0NyAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9yZXZ3YWxrL21lcmdlYmFzZS5jCisrKyBiL3Rlc3RzL3JldndhbGsvbWVyZ2ViYXNlLmMKQEAgLTEyMyw2ICsxMjMsMTggQEAKIAljbF9hc3NlcnRfZXF1YWxfc3ooNCwgYmVoaW5kKTsKIH0KIAordm9pZCB0ZXN0X3JldndhbGtfbWVyZ2ViYXNlX19wcmVmZXJfeW91bmdlc3RfbWVyZ2VfYmFzZSh2b2lkKQoreworCWdpdF9vaWQgcmVzdWx0LCBvbmUsIHR3bywgZXhwZWN0ZWQ7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJm9uZSwgImE0YTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYgIikpOworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmdHdvLCAiYmUzNTYzYWUzZjc5NWIyYjQzNTNiY2NlM2E1MjdhZDBhNGY3ZjY0NCIpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmV4cGVjdGVkLCAiYzQ3ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZCIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZV9iYXNlKCZyZXN1bHQsIF9yZXBvLCAmb25lLCAmdHdvKSk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfY21wKCZyZXN1bHQsICZleHBlY3RlZCkgPT0gMCk7Cit9CisKIHZvaWQgdGVzdF9yZXZ3YWxrX21lcmdlYmFzZV9fbm9fb2ZmX2J5X29uZV9taXNzaW5nKHZvaWQpCiB7CiAJZ2l0X29pZCByZXN1bHQsIG9uZSwgdHdvOwpAQCAtMTYwLDkgKzE3Miw5IEBACiAJdmFfZW5kKGFwKTsKIAogCWlmIChleHBlY3RlZF9zaGEgPT0gTlVMTCkKLQkJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X21lcmdlX2Jhc2VfbWFueSgmb2lkLCBfcmVwbywgb2lkcywgY291bnQpKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X21lcmdlX2Jhc2VfbWFueSgmb2lkLCBfcmVwbywgY291bnQsIG9pZHMpKTsKIAllbHNlIHsKLQkJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2Jhc2VfbWFueSgmb2lkLCBfcmVwbywgb2lkcywgY291bnQpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X21lcmdlX2Jhc2VfbWFueSgmb2lkLCBfcmVwbywgY291bnQsIG9pZHMpKTsKIAkJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZCwgZXhwZWN0ZWRfc2hhKSk7CiAKIAkJY2xfYXNzZXJ0KGdpdF9vaWRfY21wKCZleHBlY3RlZCwgJm9pZCkgPT0gMCk7CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3JldndhbGsvc2lnbmF0dXJlcGFyc2luZy5jIGIvdGVzdHMvcmV2d2Fsay9zaWduYXR1cmVwYXJzaW5nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvcmV2d2Fsay9zaWduYXR1cmVwYXJzaW5nLmMKcmVuYW1lIHRvIHRlc3RzL3JldndhbGsvc2lnbmF0dXJlcGFyc2luZy5jCmRpZmYgLS1naXQgYS90ZXN0cy9yZXZ3YWxrL3NpbXBsaWZ5LmMgYi90ZXN0cy9yZXZ3YWxrL3NpbXBsaWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMTlkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3JldndhbGsvc2ltcGxpZnkuYwpAQCAtMCwwICsxLDU1IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisKK3ZvaWQgdGVzdF9yZXZ3YWxrX3NpbXBsaWZ5X19jbGVhbnVwKHZvaWQpCit7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworfQorCisvKgorCSogICBhNGE3ZGNlIFswXSBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byBicjIKKwl8XAorCXwgKiA5ZmQ3MzhlIFsxXSBhIGZvdXJ0aCBjb21taXQKKwl8ICogNGEyMDJiMyBbMl0gYSB0aGlyZCBjb21taXQKKwkqIHwgYzQ3ODAwYyBbM10gYnJhbmNoIGNvbW1pdCBvbmUKKwl8LworCSogNWI1YjAyNSBbNV0gYW5vdGhlciBjb21taXQKKwkqIDg0OTYwNzEgWzRdIHRlc3RpbmcKKyovCitzdGF0aWMgY29uc3QgY2hhciAqY29tbWl0X2hlYWQgPSAiYTRhN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9zdHJbXSA9IHsKKwkiYTRhN2RjZTg1Y2Y2Mzg3NGU5ODQ3MTlmNGZkZDIzOWY1MTQ1MDUyZiIsIC8qIDAgKi8KKwkiYzQ3ODAwYzcyNjZhMmJlMDRjNTcxYzA0ZDVhNjYxNDY5MWVhOTliZCIsIC8qIDMgKi8KKwkiODQ5NjA3MWMxYjQ2Yzg1NGIzMTE4NWVhOTc3NDNiZTZhODc3NDQ3OSIsIC8qIDQgKi8KKwkiNWI1YjAyNWFmYjBiNGM5MTNiNGMzMzhhNDI5MzRhMzg2M2JmMzY0NCIsIC8qIDUgKi8KK307CisKK3ZvaWQgdGVzdF9yZXZ3YWxrX3NpbXBsaWZ5X19maXJzdF9wYXJlbnQodm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfcmV2d2FsayAqd2FsazsKKwlnaXRfb2lkIGlkLCBleHBlY3RlZFs0XTsKKwlpbnQgaSwgZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWdpdF9vaWRfZnJvbXN0cigmZXhwZWN0ZWRbaV0sIGV4cGVjdGVkX3N0cltpXSk7CisJfQorCisJcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvLmdpdCIpOworCWNsX2dpdF9wYXNzKGdpdF9yZXZ3YWxrX25ldygmd2FsaywgcmVwbykpOworCisJZ2l0X29pZF9mcm9tc3RyKCZpZCwgY29tbWl0X2hlYWQpOworCWNsX2dpdF9wYXNzKGdpdF9yZXZ3YWxrX3B1c2god2FsaywgJmlkKSk7CisJZ2l0X3JldndhbGtfc2ltcGxpZnlfZmlyc3RfcGFyZW50KHdhbGspOworCisJaSA9IDA7CisJd2hpbGUgKChlcnJvciA9IGdpdF9yZXZ3YWxrX25leHQoJmlkLCB3YWxrKSkgPT0gMCkgeworCQlnaXRfb2lkX2NtcCgmaWQsICZleHBlY3RlZFtpXSk7CisJCWkrKzsKKwl9CisKKwljbF9hc3NlcnRfZXF1YWxfaShpLCA0KTsKKwljbF9hc3NlcnRfZXF1YWxfaShlcnJvciwgR0lUX0lURVJPVkVSKTsKKworCWdpdF9yZXZ3YWxrX2ZyZWUod2Fsayk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3N0YXNoL2Ryb3AuYyBiL3Rlc3RzL3N0YXNoL2Ryb3AuYwpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N0YXNoL2Ryb3AuYwpyZW5hbWUgdG8gdGVzdHMvc3Rhc2gvZHJvcC5jCmluZGV4IDYwYjNjNzIuLjYzZmYwMzcgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvc3Rhc2gvZHJvcC5jCisrKyBiL3Rlc3RzL3N0YXNoL2Ryb3AuYwpAQCAtMzYsMjUgKzM2LDI3IEBACiAJY2xfZ2l0X21rZmlsZSgic3Rhc2gvemVyby50eHQiLCAiY29udGVudFxuIik7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCByZXBvKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJ6ZXJvLnR4dCIpKTsKLQljb21taXRfc3RhZ2VkX2ZpbGVzKCZvaWQsIGluZGV4LCBzaWduYXR1cmUpOworCWNsX3JlcG9fY29tbWl0X2Zyb21faW5kZXgoTlVMTCwgcmVwbywgc2lnbmF0dXJlLCAwLCAiSW5pdGlhbCBjb21taXQiKTsKIAljbF9hc3NlcnQoZ2l0X3BhdGhfZXhpc3RzKCJzdGFzaC96ZXJvLnR4dCIpKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiAKIAljbF9naXRfbWtmaWxlKCJzdGFzaC9vbmUudHh0IiwgImNvbnRlbnRcbiIpOwotCWNsX2dpdF9wYXNzKGdpdF9zdGFzaF9zYXZlKCZvaWQsIHJlcG8sIHNpZ25hdHVyZSwgIkZpcnN0IiwgR0lUX1NUQVNIX0lOQ0xVREVfVU5UUkFDS0VEKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXNoX3NhdmUoCisJCSZvaWQsIHJlcG8sIHNpZ25hdHVyZSwgIkZpcnN0IiwgR0lUX1NUQVNIX0lOQ0xVREVfVU5UUkFDS0VEKSk7CiAJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoInN0YXNoL29uZS50eHQiKSk7CiAJY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cygic3Rhc2gvemVyby50eHQiKSk7CiAKIAljbF9naXRfbWtmaWxlKCJzdGFzaC90d28udHh0IiwgImNvbnRlbnRcbiIpOwotCWNsX2dpdF9wYXNzKGdpdF9zdGFzaF9zYXZlKCZvaWQsIHJlcG8sIHNpZ25hdHVyZSwgIlNlY29uZCIsIEdJVF9TVEFTSF9JTkNMVURFX1VOVFJBQ0tFRCkpOworCWNsX2dpdF9wYXNzKGdpdF9zdGFzaF9zYXZlKAorCQkmb2lkLCByZXBvLCBzaWduYXR1cmUsICJTZWNvbmQiLCBHSVRfU1RBU0hfSU5DTFVERV9VTlRSQUNLRUQpKTsKIAljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygic3Rhc2gvdHdvLnR4dCIpKTsKIAljbF9hc3NlcnQoZ2l0X3BhdGhfZXhpc3RzKCJzdGFzaC96ZXJvLnR4dCIpKTsKIAogCWNsX2dpdF9ta2ZpbGUoInN0YXNoL3RocmVlLnR4dCIsICJjb250ZW50XG4iKTsKLQljbF9naXRfcGFzcyhnaXRfc3Rhc2hfc2F2ZSgmb2lkLCByZXBvLCBzaWduYXR1cmUsICJUaGlyZCIsIEdJVF9TVEFTSF9JTkNMVURFX1VOVFJBQ0tFRCkpOworCWNsX2dpdF9wYXNzKGdpdF9zdGFzaF9zYXZlKAorCQkmb2lkLCByZXBvLCBzaWduYXR1cmUsICJUaGlyZCIsIEdJVF9TVEFTSF9JTkNMVURFX1VOVFJBQ0tFRCkpOwogCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJzdGFzaC90aHJlZS50eHQiKSk7CiAJY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cygic3Rhc2gvemVyby50eHQiKSk7Ci0KLQlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiB9CiAKIHZvaWQgdGVzdF9zdGFzaF9kcm9wX19jYW5ub3RfZHJvcF9hX25vbl9leGlzdGluZ19zdGFzaGVkX3N0YXRlKHZvaWQpCkBAIC0xMDAsNyArMTAyLDcgQEAKIAogCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZzdGFzaCwgcmVwbywgR0lUX1JFRlNfU1RBU0hfRklMRSkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHN0YXNoKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHJlcG8sIEdJVF9SRUZTX1NUQVNIX0ZJTEUpKTsKIAllbnRyeSA9IGdpdF9yZWZsb2dfZW50cnlfYnlpbmRleChyZWZsb2csIDEpOwogCiAJZ2l0X29pZF9jcHkoJm9pZCwgZ2l0X3JlZmxvZ19lbnRyeV9pZF9vbGQoZW50cnkpKTsKQEAgLTExMCw3ICsxMTIsNyBAQAogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXNoX2Ryb3AocmVwbywgMSkpOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHN0YXNoKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19yZWFkKCZyZWZsb2csIHJlcG8sIEdJVF9SRUZTX1NUQVNIX0ZJTEUpKTsKIAllbnRyeSA9IGdpdF9yZWZsb2dfZW50cnlfYnlpbmRleChyZWZsb2csIDApOwogCiAJY2xfYXNzZXJ0X2VxdWFsX2koMCwgZ2l0X29pZF9jbXAoJm9pZCwgZ2l0X3JlZmxvZ19lbnRyeV9pZF9vbGQoZW50cnkpKSk7CkBAIC0xNjAsNyArMTYyLDcgQEAKIAlyZXRyaWV2ZV90b3Bfc3Rhc2hfaWQoJm9pZCk7CiAKIAljbF9naXRfcGFzcyhnaXRfcmV2cGFyc2Vfc2luZ2xlKCZuZXh0X3RvcF9zdGFzaCwgcmVwbywgInN0YXNoQHsxfSIpKTsKLQljbF9hc3NlcnRfZXF1YWxfaShmYWxzZSwgZ2l0X29pZF9jbXAoJm9pZCwgZ2l0X29iamVjdF9pZChuZXh0X3RvcF9zdGFzaCkpID09IDApOworCWNsX2Fzc2VydChnaXRfb2lkX2NtcCgmb2lkLCBnaXRfb2JqZWN0X2lkKG5leHRfdG9wX3N0YXNoKSkgIT0gMCk7CiAKIAljbF9naXRfcGFzcyhnaXRfc3Rhc2hfZHJvcChyZXBvLCAwKSk7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3Rhc2gvZm9yZWFjaC5jIGIvdGVzdHMvc3Rhc2gvZm9yZWFjaC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N0YXNoL2ZvcmVhY2guYwpyZW5hbWUgdG8gdGVzdHMvc3Rhc2gvZm9yZWFjaC5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3N0YXNoL3NhdmUuYyBiL3Rlc3RzL3N0YXNoL3NhdmUuYwpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N0YXNoL3NhdmUuYwpyZW5hbWUgdG8gdGVzdHMvc3Rhc2gvc2F2ZS5jCmluZGV4IGVhZTExNmEuLjNkOTJiMjYgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvc3Rhc2gvc2F2ZS5jCisrKyBiL3Rlc3RzL3N0YXNoL3NhdmUuYwpAQCAtMTEzLDMzICsxMTMsMTUgQEAKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfU1RBVFVTX1dUX05FVywgc3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgYXNzZXJ0X3N0YXR1cygKLQljb25zdCBjaGFyICpwYXRoLAotCWludCBzdGF0dXNfZmxhZ3MpCi17Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdpdF9zdGF0dXNfZmlsZSgmc3RhdHVzLCByZXBvLCBwYXRoKTsKLQotCWlmIChzdGF0dXNfZmxhZ3MgPCAwKSB7Ci0JCWNsX2Fzc2VydF9lcXVhbF9pKHN0YXR1c19mbGFncywgZXJyb3IpOwotCQlyZXR1cm47Ci0JfQotCi0JY2xfYXNzZXJ0X2VxdWFsX2koMCwgZXJyb3IpOwotCWNsX2Fzc2VydF9lcXVhbF9pKCh1bnNpZ25lZCBpbnQpc3RhdHVzX2ZsYWdzLCBzdGF0dXMpOwotfQotCiB2b2lkIHRlc3Rfc3Rhc2hfc2F2ZV9fY2FuX2tlZXBfaW5kZXgodm9pZCkKIHsKIAljbF9naXRfcGFzcyhnaXRfc3Rhc2hfc2F2ZSgmc3Rhc2hfdGlwX29pZCwgcmVwbywgc2lnbmF0dXJlLCBOVUxMLCBHSVRfU1RBU0hfS0VFUF9JTkRFWCkpOwogCi0JYXNzZXJ0X3N0YXR1cygid2hhdCIsIEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOwotCWFzc2VydF9zdGF0dXMoImhvdyIsIEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOwotCWFzc2VydF9zdGF0dXMoIndobyIsIEdJVF9TVEFUVVNfQ1VSUkVOVCk7Ci0JYXNzZXJ0X3N0YXR1cygid2hlbiIsIEdJVF9TVEFUVVNfV1RfTkVXKTsKLQlhc3NlcnRfc3RhdHVzKCJqdXN0Lmlnbm9yZSIsIEdJVF9TVEFUVVNfSUdOT1JFRCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAid2hhdCIsIEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOworCWFzc2VydF9zdGF0dXMocmVwbywgImhvdyIsIEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOworCWFzc2VydF9zdGF0dXMocmVwbywgIndobyIsIEdJVF9TVEFUVVNfQ1VSUkVOVCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAid2hlbiIsIEdJVF9TVEFUVVNfV1RfTkVXKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJqdXN0Lmlnbm9yZSIsIEdJVF9TVEFUVVNfSUdOT1JFRCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFzc2VydF9jb21taXRfbWVzc2FnZV9jb250YWlucyhjb25zdCBjaGFyICpyZXZpc2lvbiwgY29uc3QgY2hhciAqZnJhZ21lbnQpCkBAIC0xOTQsNyArMTc2LDcgQEAKIAogCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfY3JlYXRlKCZoZWFkLCByZXBvLCAiSEVBRCIsICJyZWZzL2hlYWRzL3VuYm9ybiIsIDEpKTsKIAotCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FT1JQSEFORURIRUFELAorCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FVU5CT1JOQlJBTkNILAogCQlnaXRfc3Rhc2hfc2F2ZSgmc3Rhc2hfdGlwX29pZCwgcmVwbywgc2lnbmF0dXJlLCBOVUxMLCBHSVRfU1RBU0hfREVGQVVMVCkpOwogCiAJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOwpAQCAtMjQxLDcgKzIyMyw3IEBACiB2b2lkIHRlc3Rfc3Rhc2hfc2F2ZV9fY2Fubm90X3N0YXNoX3doZW5fdGhlcmVfYXJlX25vX2xvY2FsX2NoYW5nZSh2b2lkKQogewogCWdpdF9pbmRleCAqaW5kZXg7Ci0JZ2l0X29pZCBjb21taXRfb2lkLCBzdGFzaF90aXBfb2lkOworCWdpdF9vaWQgc3Rhc2hfdGlwX29pZDsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgcmVwbykpOwogCkBAIC0yNTEsOCArMjMzLDcgQEAKIAkgKi8KIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgIndoYXQiKSk7CiAJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJ3aG8iKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7Ci0JY29tbWl0X3N0YWdlZF9maWxlcygmY29tbWl0X29pZCwgaW5kZXgsIHNpZ25hdHVyZSk7CisJY2xfcmVwb19jb21taXRfZnJvbV9pbmRleChOVUxMLCByZXBvLCBzaWduYXR1cmUsIDAsICJJbml0aWFsIGNvbW1pdCIpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIAogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTk9URk9VTkQsCkBAIC0zMDksMjUgKzI5MCwyNSBAQAogCSAqIDEwMDY0NCBibG9iIGI2ZWQxNWU4MWUyNTkzZDdiYjYyNjVlYjRhOTkxZDI5ZGMzZTYyOGIgICAgd2hlbgogCSovCiAKLQlhc3NlcnRfc3RhdHVzKCJ3aGF0IiwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCB8IEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOwotCWFzc2VydF9zdGF0dXMoImhvdyIsIEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOwotCWFzc2VydF9zdGF0dXMoIndobyIsIEdJVF9TVEFUVVNfV1RfTU9ESUZJRUQpOwotCWFzc2VydF9zdGF0dXMoIndoZW4iLCBHSVRfU1RBVFVTX1dUX05FVyk7Ci0JYXNzZXJ0X3N0YXR1cygianVzdC5pZ25vcmUiLCBHSVRfU1RBVFVTX0lHTk9SRUQpOworCWFzc2VydF9zdGF0dXMocmVwbywgIndoYXQiLCBHSVRfU1RBVFVTX1dUX01PRElGSUVEIHwgR0lUX1NUQVRVU19JTkRFWF9NT0RJRklFRCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAiaG93IiwgR0lUX1NUQVRVU19JTkRFWF9NT0RJRklFRCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAid2hvIiwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAid2hlbiIsIEdJVF9TVEFUVVNfV1RfTkVXKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJqdXN0Lmlnbm9yZSIsIEdJVF9TVEFUVVNfSUdOT1JFRCk7CiAKIAljbF9naXRfcGFzcyhnaXRfc3Rhc2hfc2F2ZSgmc3Rhc2hfdGlwX29pZCwgcmVwbywgc2lnbmF0dXJlLCBOVUxMLCBHSVRfU1RBU0hfREVGQVVMVCkpOwotCWFzc2VydF9zdGF0dXMoIndoYXQiLCBHSVRfU1RBVFVTX0NVUlJFTlQpOwotCWFzc2VydF9zdGF0dXMoImhvdyIsIEdJVF9TVEFUVVNfQ1VSUkVOVCk7Ci0JYXNzZXJ0X3N0YXR1cygid2hvIiwgR0lUX1NUQVRVU19DVVJSRU5UKTsKLQlhc3NlcnRfc3RhdHVzKCJ3aGVuIiwgR0lUX1NUQVRVU19XVF9ORVcpOwotCWFzc2VydF9zdGF0dXMoImp1c3QuaWdub3JlIiwgR0lUX1NUQVRVU19JR05PUkVEKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJ3aGF0IiwgR0lUX1NUQVRVU19DVVJSRU5UKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJob3ciLCBHSVRfU1RBVFVTX0NVUlJFTlQpOworCWFzc2VydF9zdGF0dXMocmVwbywgIndobyIsIEdJVF9TVEFUVVNfQ1VSUkVOVCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAid2hlbiIsIEdJVF9TVEFUVVNfV1RfTkVXKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJqdXN0Lmlnbm9yZSIsIEdJVF9TVEFUVVNfSUdOT1JFRCk7CiAKIAljbF9naXRfcGFzcyhnaXRfc3Rhc2hfc2F2ZSgmc3Rhc2hfdGlwX29pZCwgcmVwbywgc2lnbmF0dXJlLCBOVUxMLCBHSVRfU1RBU0hfSU5DTFVERV9VTlRSQUNLRUQpKTsKLQlhc3NlcnRfc3RhdHVzKCJ3aGF0IiwgR0lUX1NUQVRVU19DVVJSRU5UKTsKLQlhc3NlcnRfc3RhdHVzKCJob3ciLCBHSVRfU1RBVFVTX0NVUlJFTlQpOwotCWFzc2VydF9zdGF0dXMoIndobyIsIEdJVF9TVEFUVVNfQ1VSUkVOVCk7Ci0JYXNzZXJ0X3N0YXR1cygid2hlbiIsIEdJVF9FTk9URk9VTkQpOwotCWFzc2VydF9zdGF0dXMoImp1c3QuaWdub3JlIiwgR0lUX1NUQVRVU19JR05PUkVEKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJ3aGF0IiwgR0lUX1NUQVRVU19DVVJSRU5UKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJob3ciLCBHSVRfU1RBVFVTX0NVUlJFTlQpOworCWFzc2VydF9zdGF0dXMocmVwbywgIndobyIsIEdJVF9TVEFUVVNfQ1VSUkVOVCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAid2hlbiIsIEdJVF9FTk9URk9VTkQpOworCWFzc2VydF9zdGF0dXMocmVwbywgImp1c3QuaWdub3JlIiwgR0lUX1NUQVRVU19JR05PUkVEKTsKIAogCiAJYXNzZXJ0X2Jsb2Jfb2lkKCJzdGFzaEB7MX1eMDp3aGF0IiwgImJjOTlkYzk4YjNlYmEwZTkxNTdlOTQ3NjljZDRkNDljYjQ5ZGU0NDkiKTsJLyogc2VlIHlvdSBsYXRlciAqLwpAQCAtMzYxLDExICszNDIsMTEgQEAKIHsKIAljbF9naXRfcGFzcyhwX3VubGluaygic3Rhc2gvd2hlbiIpKTsKIAotCWFzc2VydF9zdGF0dXMoIndoYXQiLCBHSVRfU1RBVFVTX1dUX01PRElGSUVEIHwgR0lUX1NUQVRVU19JTkRFWF9NT0RJRklFRCk7Ci0JYXNzZXJ0X3N0YXR1cygiaG93IiwgR0lUX1NUQVRVU19JTkRFWF9NT0RJRklFRCk7Ci0JYXNzZXJ0X3N0YXR1cygid2hvIiwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCk7Ci0JYXNzZXJ0X3N0YXR1cygid2hlbiIsIEdJVF9FTk9URk9VTkQpOwotCWFzc2VydF9zdGF0dXMoImp1c3QuaWdub3JlIiwgR0lUX1NUQVRVU19JR05PUkVEKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJ3aGF0IiwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCB8IEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOworCWFzc2VydF9zdGF0dXMocmVwbywgImhvdyIsIEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQpOworCWFzc2VydF9zdGF0dXMocmVwbywgIndobyIsIEdJVF9TVEFUVVNfV1RfTU9ESUZJRUQpOworCWFzc2VydF9zdGF0dXMocmVwbywgIndoZW4iLCBHSVRfRU5PVEZPVU5EKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJqdXN0Lmlnbm9yZSIsIEdJVF9TVEFUVVNfSUdOT1JFRCk7CiAKIAljbF9naXRfcGFzcyhnaXRfc3Rhc2hfc2F2ZSgmc3Rhc2hfdGlwX29pZCwgcmVwbywgc2lnbmF0dXJlLCBOVUxMLCBHSVRfU1RBU0hfSU5DTFVERV9VTlRSQUNLRUQpKTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9zdGFzaC9zdGFzaF9oZWxwZXJzLmMgYi90ZXN0cy9zdGFzaC9zdGFzaF9oZWxwZXJzLmMKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9zdGFzaC9zdGFzaF9oZWxwZXJzLmMKcmVuYW1lIHRvIHRlc3RzL3N0YXNoL3N0YXNoX2hlbHBlcnMuYwppbmRleCBmNDYyYTEzLi44YjdkNjg1IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3N0YXNoL3N0YXNoX2hlbHBlcnMuYworKysgYi90ZXN0cy9zdGFzaC9zdGFzaF9oZWxwZXJzLmMKQEAgLTIsMzggKzIsOCBAQAogI2luY2x1ZGUgImZpbGVvcHMuaCIKICNpbmNsdWRlICJzdGFzaF9oZWxwZXJzLmgiCiAKLXZvaWQgY29tbWl0X3N0YWdlZF9maWxlcygKLQlnaXRfb2lkICpjb21taXRfb2lkLAotCWdpdF9pbmRleCAqaW5kZXgsCi0JZ2l0X3NpZ25hdHVyZSAqc2lnbmF0dXJlKQotewotCWdpdF90cmVlICp0cmVlOwotCWdpdF9vaWQgdHJlZV9vaWQ7Ci0JZ2l0X3JlcG9zaXRvcnkgKnJlcG87Ci0KLQlyZXBvID0gZ2l0X2luZGV4X293bmVyKGluZGV4KTsKLQotCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZV90cmVlKCZ0cmVlX29pZCwgaW5kZXgpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF90cmVlX2xvb2t1cCgmdHJlZSwgcmVwbywgJnRyZWVfb2lkKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfY29tbWl0X2NyZWF0ZV92KAotCQljb21taXRfb2lkLAotCQlyZXBvLAotCQkiSEVBRCIsCi0JCXNpZ25hdHVyZSwKLQkJc2lnbmF0dXJlLAotCQlOVUxMLAotCQkiSW5pdGlhbCBjb21taXQiLAotCQl0cmVlLAotCQkwKSk7Ci0KLQlnaXRfdHJlZV9mcmVlKHRyZWUpOwotfQotCiB2b2lkIHNldHVwX3N0YXNoKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfc2lnbmF0dXJlICpzaWduYXR1cmUpCiB7Ci0JZ2l0X29pZCBjb21taXRfb2lkOwogCWdpdF9pbmRleCAqaW5kZXg7CiAKIAljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIHJlcG8pKTsKQEAgLTUwLDkgKzIwLDggQEAKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgImhvdyIpKTsKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgIndobyIpKTsKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgIi5naXRpZ25vcmUiKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7CiAKLQljb21taXRfc3RhZ2VkX2ZpbGVzKCZjb21taXRfb2lkLCBpbmRleCwgc2lnbmF0dXJlKTsKKwljbF9yZXBvX2NvbW1pdF9mcm9tX2luZGV4KE5VTEwsIHJlcG8sIHNpZ25hdHVyZSwgMCwgIkluaXRpYWwgY29tbWl0Iik7CiAKIAljbF9naXRfcmV3cml0ZWZpbGUoInN0YXNoL3doYXQiLCAiZ29vZGJ5ZVxuIik7CQkJLyogZGQ3ZTFjNmYwZmVmZTExOGYwYjYzZDlmMTA5MDhjNDYwYWEzMTdhNiAqLwogCWNsX2dpdF9yZXdyaXRlZmlsZSgic3Rhc2gvaG93IiwgIm5vdCBzbyBzbWFsbCBhbmRcbiIpOwkvKiBlNmQ2NGFkYjJjN2YzZWI4ZmViNDkzYjU1NmNjODA3MGRjYTM3OWEzICovCkBAIC02NiwzICszNSwyMiBAQAogCiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQorCit2b2lkIGFzc2VydF9zdGF0dXMoCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqcGF0aCwKKwlpbnQgc3RhdHVzX2ZsYWdzKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnaXRfc3RhdHVzX2ZpbGUoJnN0YXR1cywgcmVwbywgcGF0aCk7CisKKwlpZiAoc3RhdHVzX2ZsYWdzIDwgMCkgeworCQljbF9hc3NlcnRfZXF1YWxfaShzdGF0dXNfZmxhZ3MsIGVycm9yKTsKKwkJcmV0dXJuOworCX0KKworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGVycm9yKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgodW5zaWduZWQgaW50KXN0YXR1c19mbGFncywgc3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0YXNoL3N0YXNoX2hlbHBlcnMuaCBiL3Rlc3RzL3N0YXNoL3N0YXNoX2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQ3NThmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3Rhc2gvc3Rhc2hfaGVscGVycy5oCkBAIC0wLDAgKzEsOCBAQAordm9pZCBzZXR1cF9zdGFzaCgKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywKKwlnaXRfc2lnbmF0dXJlICpzaWduYXR1cmUpOworCit2b2lkIGFzc2VydF9zdGF0dXMoCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqcGF0aCwKKwlpbnQgc3RhdHVzX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0YXNoL3N1Ym1vZHVsZXMuYyBiL3Rlc3RzL3N0YXNoL3N1Ym1vZHVsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzdjNDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3Rhc2gvc3VibW9kdWxlcy5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJzdGFzaF9oZWxwZXJzLmgiCisjaW5jbHVkZSAiLi4vc3VibW9kdWxlL3N1Ym1vZHVsZV9oZWxwZXJzLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqcmVwbzsKK3N0YXRpYyBnaXRfc2lnbmF0dXJlICpzaWduYXR1cmU7CitzdGF0aWMgZ2l0X29pZCBzdGFzaF90aXBfb2lkOworCitzdGF0aWMgZ2l0X3N1Ym1vZHVsZSAqc207CisKK3ZvaWQgdGVzdF9zdGFzaF9zdWJtb2R1bGVzX19pbml0aWFsaXplKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X3NpZ25hdHVyZV9uZXcoJnNpZ25hdHVyZSwgIm51bGx0b2tlbiIsICJlbWVyaWMuZmVybWFzQGdtYWlsLmNvbSIsIDEzMjM4NDc3NDMsIDYwKSk7IC8qIFdlZCBEZWMgMTQgMDg6Mjk6MDMgMjAxMSArMDEwMCAqLworCisJcmVwbyA9IHNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcygpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCByZXBvLCAidGVzdHJlcG8iKSk7Cit9CisKK3ZvaWQgdGVzdF9zdGFzaF9zdWJtb2R1bGVzX19jbGVhbnVwKHZvaWQpCit7CisJZ2l0X3NpZ25hdHVyZV9mcmVlKHNpZ25hdHVyZSk7CisJc2lnbmF0dXJlID0gTlVMTDsKK30KKwordm9pZCB0ZXN0X3N0YXNoX3N1Ym1vZHVsZXNfX2RvZXNfbm90X3N0YXNoX21vZGlmaWVkX3N1Ym1vZHVsZXModm9pZCkKK3sKKwlzdGF0aWMgZ2l0X2luZGV4ICpzbWluZGV4OworCXN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqc21yZXBvOworCisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAibW9kaWZpZWQiLCBHSVRfU1RBVFVTX1dUX01PRElGSUVEKTsKKworCS8qIG1vZGlmeSBmaWxlIGluIHN1Ym1vZHVsZSAqLworCWNsX2dpdF9yZXdyaXRlZmlsZSgic3VibW9kdWxlcy90ZXN0cmVwby9SRUFETUUiLCAiaGV5aGV5aGV5Iik7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAidGVzdHJlcG8iLCBHSVRfU1RBVFVTX1dUX01PRElGSUVEKTsKKworCS8qIGFkZCBmaWxlIHRvIGluZGV4IGluIHN1Ym1vZHVsZSAqLworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfb3Blbigmc21yZXBvLCBzbSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZzbWluZGV4LCBzbXJlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChzbWluZGV4LCAiUkVBRE1FIikpOworCisJLyogY29tbWl0IGNoYW5nZWQgaW5kZXggb2Ygc3VibW9kdWxlICovCisJY2xfcmVwb19jb21taXRfZnJvbV9pbmRleChOVUxMLCBzbXJlcG8sIE5VTEwsIDEzNzIzNTAwMDAsICJNb2RpZnkgaXQiKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJ0ZXN0cmVwbyIsIEdJVF9TVEFUVVNfV1RfTU9ESUZJRUQpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXNoX3NhdmUoJnN0YXNoX3RpcF9vaWQsIHJlcG8sIHNpZ25hdHVyZSwgTlVMTCwgR0lUX1NUQVNIX0RFRkFVTFQpKTsKKworCWFzc2VydF9zdGF0dXMocmVwbywgInRlc3RyZXBvIiwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAibW9kaWZpZWQiLCBHSVRfU1RBVFVTX0NVUlJFTlQpOworCisJZ2l0X2luZGV4X2ZyZWUoc21pbmRleCk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShzbXJlcG8pOworfQorCit2b2lkIHRlc3Rfc3Rhc2hfc3VibW9kdWxlc19fc3Rhc2hfaXNfZW1wdHlfd2l0aF9tb2RpZmllZF9zdWJtb2R1bGVzKHZvaWQpCit7CisJc3RhdGljIGdpdF9pbmRleCAqc21pbmRleDsKKwlzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKnNtcmVwbzsKKworCWNsX2dpdF9wYXNzKGdpdF9zdGFzaF9zYXZlKCZzdGFzaF90aXBfb2lkLCByZXBvLCBzaWduYXR1cmUsIE5VTEwsIEdJVF9TVEFTSF9ERUZBVUxUKSk7CisJYXNzZXJ0X3N0YXR1cyhyZXBvLCAibW9kaWZpZWQiLCBHSVRfU1RBVFVTX0NVUlJFTlQpOworCisJLyogbW9kaWZ5IGZpbGUgaW4gc3VibW9kdWxlICovCisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJzdWJtb2R1bGVzL3Rlc3RyZXBvL1JFQURNRSIsICJoZXloZXloZXkiKTsKKwlhc3NlcnRfc3RhdHVzKHJlcG8sICJ0ZXN0cmVwbyIsIEdJVF9TVEFUVVNfV1RfTU9ESUZJRUQpOworCisJLyogYWRkIGZpbGUgdG8gaW5kZXggaW4gc3VibW9kdWxlICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9vcGVuKCZzbXJlcG8sIHNtKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJnNtaW5kZXgsIHNtcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKHNtaW5kZXgsICJSRUFETUUiKSk7CisKKwkvKiBjb21taXQgY2hhbmdlZCBpbmRleCBvZiBzdWJtb2R1bGUgKi8KKwljbF9yZXBvX2NvbW1pdF9mcm9tX2luZGV4KE5VTEwsIHNtcmVwbywgTlVMTCwgMTM3MjM1MDAwMCwgIk1vZGlmeSBpdCIpOworCWFzc2VydF9zdGF0dXMocmVwbywgInRlc3RyZXBvIiwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCk7CisKKwljbF9naXRfZmFpbF93aXRoKGdpdF9zdGFzaF9zYXZlKCZzdGFzaF90aXBfb2lkLCByZXBvLCBzaWduYXR1cmUsIE5VTEwsIEdJVF9TVEFTSF9ERUZBVUxUKSwgR0lUX0VOT1RGT1VORCk7CisKKwlnaXRfaW5kZXhfZnJlZShzbWluZGV4KTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHNtcmVwbyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3N0YXR1cy9pZ25vcmUuYyBiL3Rlc3RzL3N0YXR1cy9pZ25vcmUuYwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N0YXR1cy9pZ25vcmUuYwpyZW5hbWUgdG8gdGVzdHMvc3RhdHVzL2lnbm9yZS5jCmluZGV4IDRmNjg3OWMuLmFjZGM4ZmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvc3RhdHVzL2lnbm9yZS5jCisrKyBiL3Rlc3RzL3N0YXR1cy9pZ25vcmUuYwpAQCAtNDU5LDMgKzQ1OSwxMjQgQEAKIAljbF9naXRfcGFzcyhnaXRfc3RhdHVzX3Nob3VsZF9pZ25vcmUoJmlnbm9yZWQsIGdfcmVwbywgInBhdGgvd2hhdGV2ZXIuYyIpKTsKIAljbF9hc3NlcnQoIWlnbm9yZWQpOwogfQorCit2b2lkIHRlc3Rfc3RhdHVzX2lnbm9yZV9fZmlsZW5hbWVzX3dpdGhfc3BlY2lhbF9wcmVmaXhlc19kb19ub3RfaW50ZXJmZXJlX3dpdGhfc3RhdHVzX3JldHJpZXZhbCh2b2lkKQoreworCXN0YXR1c19lbnRyeV9zaW5nbGUgc3Q7CisJY2hhciAqdGVzdF9jYXNlc1tdID0geworCQkiIWZpbGUiLAorCQkiI2JsYWgiLAorCQkiW2JsYWhdIiwKKwkJIlthdHRyXSIsCisJCSJbYXR0cl1ibGFoIiwKKwkJTlVMTAorCX07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyAqKHRlc3RfY2FzZXMgKyBpKSAhPSBOVUxMOyBpKyspIHsKKwkJZ2l0X2J1ZiBmaWxlID0gR0lUX0JVRl9JTklUOworCQljaGFyICpmaWxlX25hbWUgPSAqKHRlc3RfY2FzZXMgKyBpKTsKKwkJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJlbXB0eV9zdGFuZGFyZF9yZXBvIik7CisKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZSwgImVtcHR5X3N0YW5kYXJkX3JlcG8iLCBmaWxlX25hbWUpKTsKKwkJY2xfZ2l0X21rZmlsZShnaXRfYnVmX2NzdHIoJmZpbGUpLCAiUGxlYXNlIGRvbid0IGlnbm9yZSBtZSEiKTsKKworCQltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19mb3JlYWNoKHJlcG8sIGNiX3N0YXR1c19fc2luZ2xlLCAmc3QpKTsKKwkJY2xfYXNzZXJ0KHN0LmNvdW50ID09IDEpOworCQljbF9hc3NlcnQoc3Quc3RhdHVzID09IEdJVF9TVEFUVVNfV1RfTkVXKTsKKworCQljbF9naXRfcGFzcyhnaXRfc3RhdHVzX2ZpbGUoJnN0LnN0YXR1cywgcmVwbywgZmlsZV9uYW1lKSk7CisJCWNsX2Fzc2VydChzdC5zdGF0dXMgPT0gR0lUX1NUQVRVU19XVF9ORVcpOworCisJCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKKwkJZ2l0X2J1Zl9mcmVlKCZmaWxlKTsKKwl9Cit9CisKK3ZvaWQgdGVzdF9zdGF0dXNfaWdub3JlX19pc3N1ZV8xNzY2X25lZ2F0ZWRfaWdub3Jlcyh2b2lkKQoreworCWludCBpZ25vcmVkID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgiZW1wdHlfc3RhbmRhcmRfcmVwbyIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2Rpcl9yKAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9hIiwgTlVMTCwgMDc3NSkpOworCWNsX2dpdF9ta2ZpbGUoCisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL2EvLmdpdGlnbm9yZSIsICIqXG4hLmdpdGlnbm9yZVxuIik7CisJY2xfZ2l0X21rZmlsZSgKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vYS9pZ25vcmVtZSIsICJJIHNob3VsZCBiZSBpZ25vcmVkXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfc2hvdWxkX2lnbm9yZSgmaWdub3JlZCwgZ19yZXBvLCAiYS8uZ2l0aWdub3JlIikpOworCWNsX2Fzc2VydCghaWdub3JlZCk7CisKKwljbF9naXRfcGFzcyhnaXRfc3RhdHVzX3Nob3VsZF9pZ25vcmUoJmlnbm9yZWQsIGdfcmVwbywgImEvaWdub3JlbWUiKSk7CisJY2xfYXNzZXJ0KGlnbm9yZWQpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2Rpcl9yKAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9iIiwgTlVMTCwgMDc3NSkpOworCWNsX2dpdF9ta2ZpbGUoCisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL2IvLmdpdGlnbm9yZSIsICIqXG4hLmdpdGlnbm9yZVxuIik7CisJY2xfZ2l0X21rZmlsZSgKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vYi9pZ25vcmVtZSIsICJJIHNob3VsZCBiZSBpZ25vcmVkXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfc2hvdWxkX2lnbm9yZSgmaWdub3JlZCwgZ19yZXBvLCAiYi8uZ2l0aWdub3JlIikpOworCWNsX2Fzc2VydCghaWdub3JlZCk7CisKKwljbF9naXRfcGFzcyhnaXRfc3RhdHVzX3Nob3VsZF9pZ25vcmUoJmlnbm9yZWQsIGdfcmVwbywgImIvaWdub3JlbWUiKSk7CisJY2xfYXNzZXJ0KGlnbm9yZWQpOworCisJLyogc2hvdWxkbid0IGhhdmUgY2hhbmdlZCByZXN1bHRzIGZyb20gZmlyc3QgY291cGxlIGVpdGhlciAqLworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19zaG91bGRfaWdub3JlKCZpZ25vcmVkLCBnX3JlcG8sICJhLy5naXRpZ25vcmUiKSk7CisJY2xfYXNzZXJ0KCFpZ25vcmVkKTsKKwljbF9naXRfcGFzcyhnaXRfc3RhdHVzX3Nob3VsZF9pZ25vcmUoJmlnbm9yZWQsIGdfcmVwbywgImEvaWdub3JlbWUiKSk7CisJY2xfYXNzZXJ0KGlnbm9yZWQpOworCisJLyogc3RhdHVzIHNob3VsZCBmaW5kIHRoZSB0d28gaWdub3JlIGZpbGVzIGFuZCBub3RoaW5nIGVsc2UgKi8KKworCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfZmlsZSgmc3RhdHVzLCBnX3JlcG8sICJhLy5naXRpZ25vcmUiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX1NUQVRVU19XVF9ORVcsIChpbnQpc3RhdHVzKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfZmlsZSgmc3RhdHVzLCBnX3JlcG8sICJhL2lnbm9yZW1lIikpOworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9TVEFUVVNfSUdOT1JFRCwgKGludClzdGF0dXMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19maWxlKCZzdGF0dXMsIGdfcmVwbywgImIvLmdpdGlnbm9yZSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfU1RBVFVTX1dUX05FVywgKGludClzdGF0dXMpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19maWxlKCZzdGF0dXMsIGdfcmVwbywgImIvaWdub3JlbWUiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX1NUQVRVU19JR05PUkVELCAoaW50KXN0YXR1cyk7CisKKwl7CisJCWdpdF9zdGF0dXNfb3B0aW9ucyBvcHRzID0gR0lUX1NUQVRVU19PUFRJT05TX0lOSVQ7CisJCXN0YXR1c19lbnRyeV9jb3VudHMgY291bnRzOworCQlzdGF0aWMgY29uc3QgY2hhciAqcGF0aHNbXSA9IHsKKwkJCSJhLy5naXRpZ25vcmUiLAorCQkJImEvaWdub3JlbWUiLAorCQkJImIvLmdpdGlnbm9yZSIsCisJCQkiYi9pZ25vcmVtZSIsCisJCX07CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RhdHVzZXNbXSA9IHsKKwkJCUdJVF9TVEFUVVNfV1RfTkVXLAorCQkJR0lUX1NUQVRVU19JR05PUkVELAorCQkJR0lUX1NUQVRVU19XVF9ORVcsCisJCQlHSVRfU1RBVFVTX0lHTk9SRUQsCisJCX07CisKKwkJbWVtc2V0KCZjb3VudHMsIDB4MCwgc2l6ZW9mKHN0YXR1c19lbnRyeV9jb3VudHMpKTsKKwkJY291bnRzLmV4cGVjdGVkX2VudHJ5X2NvdW50ID0gNDsKKwkJY291bnRzLmV4cGVjdGVkX3BhdGhzID0gcGF0aHM7CisJCWNvdW50cy5leHBlY3RlZF9zdGF0dXNlcyA9IHN0YXR1c2VzOworCisJCW9wdHMuZmxhZ3MgPSBHSVRfU1RBVFVTX09QVF9ERUZBVUxUUzsKKworCQljbF9naXRfcGFzcyhnaXRfc3RhdHVzX2ZvcmVhY2hfZXh0KAorCQkJZ19yZXBvLCAmb3B0cywgY2Jfc3RhdHVzX19ub3JtYWwsICZjb3VudHMpKTsKKworCQljbF9hc3NlcnRfZXF1YWxfaShjb3VudHMuZXhwZWN0ZWRfZW50cnlfY291bnQsIGNvdW50cy5lbnRyeV9jb3VudCk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvdW50cy53cm9uZ19zdGF0dXNfZmxhZ3NfY291bnQpOworCQljbF9hc3NlcnRfZXF1YWxfaSgwLCBjb3VudHMud3Jvbmdfc29ydGVkX3BhdGgpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9zdGF0dXMvcmVuYW1lcy5jIGIvdGVzdHMvc3RhdHVzL3JlbmFtZXMuYwpzaW1pbGFyaXR5IGluZGV4IDY3JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N0YXR1cy9yZW5hbWVzLmMKcmVuYW1lIHRvIHRlc3RzL3N0YXR1cy9yZW5hbWVzLmMKaW5kZXggODBmZjI2MC4uMTZmZDAyNiAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9zdGF0dXMvcmVuYW1lcy5jCisrKyBiL3Rlc3RzL3N0YXR1cy9yZW5hbWVzLmMKQEAgLTExLDYgKzExLDggQEAKIHZvaWQgdGVzdF9zdGF0dXNfcmVuYW1lc19faW5pdGlhbGl6ZSh2b2lkKQogewogCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInJlbmFtZXMiKTsKKworCWNsX3JlcG9fc2V0X2Jvb2woZ19yZXBvLCAiY29yZS5hdXRvY3JsZiIsIGZhbHNlKTsKIH0KIAogdm9pZCB0ZXN0X3N0YXR1c19yZW5hbWVzX19jbGVhbnVwKHZvaWQpCkBAIC02NywxNCArNjksMTQgQEAKIAkJYWN0dWFsID0gZ2l0X3N0YXR1c19ieWluZGV4KHN0YXR1c19saXN0LCBpKTsKIAkJZXhwZWN0ZWQgPSAmZXhwZWN0ZWRfbGlzdFtpXTsKIAotCQljbF9hc3NlcnRfZXF1YWxfaSgoaW50KWV4cGVjdGVkLT5zdGF0dXMsIChpbnQpYWN0dWFsLT5zdGF0dXMpOwotCiAJCW9sZG5hbWUgPSBhY3R1YWwtPmhlYWRfdG9faW5kZXggPyBhY3R1YWwtPmhlYWRfdG9faW5kZXgtPm9sZF9maWxlLnBhdGggOgogCQkJYWN0dWFsLT5pbmRleF90b193b3JrZGlyID8gYWN0dWFsLT5pbmRleF90b193b3JrZGlyLT5vbGRfZmlsZS5wYXRoIDogTlVMTDsKIAogCQluZXduYW1lID0gYWN0dWFsLT5pbmRleF90b193b3JrZGlyID8gYWN0dWFsLT5pbmRleF90b193b3JrZGlyLT5uZXdfZmlsZS5wYXRoIDoKIAkJCWFjdHVhbC0+aGVhZF90b19pbmRleCA/IGFjdHVhbC0+aGVhZF90b19pbmRleC0+bmV3X2ZpbGUucGF0aCA6IE5VTEw7CiAKKwkJY2xfYXNzZXJ0X2VxdWFsX2lfZm10KGV4cGVjdGVkLT5zdGF0dXMsIGFjdHVhbC0+c3RhdHVzLCAiJTA0eCIpOworCiAJCWlmIChvbGRuYW1lKQogCQkJY2xfYXNzZXJ0KGdpdF9fc3RyY21wKG9sZG5hbWUsIGV4cGVjdGVkLT5vbGRuYW1lKSA9PSAwKTsKIAkJZWxzZQpAQCAtMTUzLDYgKzE1NSw2NSBAQAogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIH0KIAordm9pZCB0ZXN0X3N0YXR1c19yZW5hbWVzX19oZWFkMmluZGV4X25vX3JlbmFtZV9mcm9tX3Jld3JpdGUodm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF9zdGF0dXNfbGlzdCAqc3RhdHVzbGlzdDsKKwlnaXRfc3RhdHVzX29wdGlvbnMgb3B0cyA9IEdJVF9TVEFUVVNfT1BUSU9OU19JTklUOworCXN0cnVjdCBzdGF0dXNfZW50cnkgZXhwZWN0ZWRbXSA9IHsKKwkJeyBHSVRfU1RBVFVTX0lOREVYX01PRElGSUVELCAiaWtlZXBzaXgudHh0IiwgImlrZWVwc2l4LnR4dCIgfSwKKwkJeyBHSVRfU1RBVFVTX0lOREVYX01PRElGSUVELCAic2l4c2VydmluZy50eHQiLCAic2l4c2VydmluZy50eHQiIH0sCisJfTsKKworCW9wdHMuZmxhZ3MgfD0gR0lUX1NUQVRVU19PUFRfUkVOQU1FU19IRUFEX1RPX0lOREVYOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKKworCXJlbmFtZV9maWxlKGdfcmVwbywgImlrZWVwc2l4LnR4dCIsICJfdGVtcF8udHh0Iik7CisJcmVuYW1lX2ZpbGUoZ19yZXBvLCAic2l4c2VydmluZy50eHQiLCAiaWtlZXBzaXgudHh0Iik7CisJcmVuYW1lX2ZpbGUoZ19yZXBvLCAiX3RlbXBfLnR4dCIsICJzaXhzZXJ2aW5nLnR4dCIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJpa2VlcHNpeC50eHQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJzaXhzZXJ2aW5nLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfbGlzdF9uZXcoJnN0YXR1c2xpc3QsIGdfcmVwbywgJm9wdHMpKTsKKwl0ZXN0X3N0YXR1cyhzdGF0dXNsaXN0LCBleHBlY3RlZCwgMik7CisJZ2l0X3N0YXR1c19saXN0X2ZyZWUoc3RhdHVzbGlzdCk7CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7Cit9CisKK3ZvaWQgdGVzdF9zdGF0dXNfcmVuYW1lc19faGVhZDJpbmRleF9yZW5hbWVfZnJvbV9yZXdyaXRlKHZvaWQpCit7CisJZ2l0X2luZGV4ICppbmRleDsKKwlnaXRfc3RhdHVzX2xpc3QgKnN0YXR1c2xpc3Q7CisJZ2l0X3N0YXR1c19vcHRpb25zIG9wdHMgPSBHSVRfU1RBVFVTX09QVElPTlNfSU5JVDsKKwlzdHJ1Y3Qgc3RhdHVzX2VudHJ5IGV4cGVjdGVkW10gPSB7CisJCXsgR0lUX1NUQVRVU19JTkRFWF9SRU5BTUVELCAic2l4c2VydmluZy50eHQiLCAiaWtlZXBzaXgudHh0IiB9LAorCQl7IEdJVF9TVEFUVVNfSU5ERVhfUkVOQU1FRCwgImlrZWVwc2l4LnR4dCIsICJzaXhzZXJ2aW5nLnR4dCIgfSwKKwl9OworCisJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0hFQURfVE9fSU5ERVg7CisJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0ZST01fUkVXUklURVM7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJcmVuYW1lX2ZpbGUoZ19yZXBvLCAiaWtlZXBzaXgudHh0IiwgIl90ZW1wXy50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJzaXhzZXJ2aW5nLnR4dCIsICJpa2VlcHNpeC50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJfdGVtcF8udHh0IiwgInNpeHNlcnZpbmcudHh0Iik7CisKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgImlrZWVwc2l4LnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInNpeHNlcnZpbmcudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19saXN0X25ldygmc3RhdHVzbGlzdCwgZ19yZXBvLCAmb3B0cykpOworCXRlc3Rfc3RhdHVzKHN0YXR1c2xpc3QsIGV4cGVjdGVkLCAyKTsKKwlnaXRfc3RhdHVzX2xpc3RfZnJlZShzdGF0dXNsaXN0KTsKKworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KKwogdm9pZCB0ZXN0X3N0YXR1c19yZW5hbWVzX19pbmRleDJ3b3JrZGlyX29uZSh2b2lkKQogewogCWdpdF9zdGF0dXNfbGlzdCAqc3RhdHVzbGlzdDsKQEAgLTE5Nyw2ICsyNTgsMzIgQEAKIAlnaXRfc3RhdHVzX2xpc3RfZnJlZShzdGF0dXNsaXN0KTsKIH0KIAordm9pZCB0ZXN0X3N0YXR1c19yZW5hbWVzX19pbmRleDJ3b3JrZGlyX3JlbmFtZV9mcm9tX3Jld3JpdGUodm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF9zdGF0dXNfbGlzdCAqc3RhdHVzbGlzdDsKKwlnaXRfc3RhdHVzX29wdGlvbnMgb3B0cyA9IEdJVF9TVEFUVVNfT1BUSU9OU19JTklUOworCXN0cnVjdCBzdGF0dXNfZW50cnkgZXhwZWN0ZWRbXSA9IHsKKwkJeyBHSVRfU1RBVFVTX1dUX1JFTkFNRUQsICJzaXhzZXJ2aW5nLnR4dCIsICJpa2VlcHNpeC50eHQiIH0sCisJCXsgR0lUX1NUQVRVU19XVF9SRU5BTUVELCAiaWtlZXBzaXgudHh0IiwgInNpeHNlcnZpbmcudHh0IiB9LAorCX07CisKKwlvcHRzLmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfSU5ERVhfVE9fV09SS0RJUjsKKwlvcHRzLmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfRlJPTV9SRVdSSVRFUzsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJpa2VlcHNpeC50eHQiLCAiX3RlbXBfLnR4dCIpOworCXJlbmFtZV9maWxlKGdfcmVwbywgInNpeHNlcnZpbmcudHh0IiwgImlrZWVwc2l4LnR4dCIpOworCXJlbmFtZV9maWxlKGdfcmVwbywgIl90ZW1wXy50eHQiLCAic2l4c2VydmluZy50eHQiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfbGlzdF9uZXcoJnN0YXR1c2xpc3QsIGdfcmVwbywgJm9wdHMpKTsKKwl0ZXN0X3N0YXR1cyhzdGF0dXNsaXN0LCBleHBlY3RlZCwgMik7CisJZ2l0X3N0YXR1c19saXN0X2ZyZWUoc3RhdHVzbGlzdCk7CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7Cit9CisKIHZvaWQgdGVzdF9zdGF0dXNfcmVuYW1lc19fYm90aF9vbmUodm9pZCkKIHsKIAlnaXRfaW5kZXggKmluZGV4OwpAQCAtMjc0LDYgKzM2MSw5MSBAQAogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIH0KIAorCit2b2lkIHRlc3Rfc3RhdHVzX3JlbmFtZXNfX2JvdGhfcmVuYW1lX2Zyb21fcmV3cml0ZSh2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisJZ2l0X3N0YXR1c19saXN0ICpzdGF0dXNsaXN0OworCWdpdF9zdGF0dXNfb3B0aW9ucyBvcHRzID0gR0lUX1NUQVRVU19PUFRJT05TX0lOSVQ7CisJc3RydWN0IHN0YXR1c19lbnRyeSBleHBlY3RlZFtdID0geworCQl7IEdJVF9TVEFUVVNfSU5ERVhfUkVOQU1FRCB8IEdJVF9TVEFUVVNfV1RfUkVOQU1FRCwKKwkJICAic29uZ29mN2NpdGllcy50eHQiLCAiaWtlZXBzaXgudHh0IiB9LAorCQl7IEdJVF9TVEFUVVNfSU5ERVhfUkVOQU1FRCB8IEdJVF9TVEFUVVNfV1RfUkVOQU1FRCwKKwkJICAiaWtlZXBzaXgudHh0IiwgInNpeHNlcnZpbmcudHh0IiB9LAorCQl7IEdJVF9TVEFUVVNfSU5ERVhfUkVOQU1FRCB8IEdJVF9TVEFUVVNfV1RfUkVOQU1FRCwKKwkJICAic2l4c2VydmluZy50eHQiLCAic29uZ29mN2NpdGllcy50eHQiIH0sCisJfTsKKworCW9wdHMuZmxhZ3MgfD0gR0lUX1NUQVRVU19PUFRfSU5DTFVERV9VTlRSQUNLRUQ7CisJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0hFQURfVE9fSU5ERVg7CisJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0lOREVYX1RPX1dPUktESVI7CisJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9SRU5BTUVTX0ZST01fUkVXUklURVM7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJcmVuYW1lX2ZpbGUoZ19yZXBvLCAiaWtlZXBzaXgudHh0IiwgIl90ZW1wXy50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJzaXhzZXJ2aW5nLnR4dCIsICJpa2VlcHNpeC50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJzb25nb2Y3Y2l0aWVzLnR4dCIsICJzaXhzZXJ2aW5nLnR4dCIpOworCXJlbmFtZV9maWxlKGdfcmVwbywgIl90ZW1wXy50eHQiLCAic29uZ29mN2NpdGllcy50eHQiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAiaWtlZXBzaXgudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAic2l4c2VydmluZy50eHQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJzb25nb2Y3Y2l0aWVzLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKworCXJlbmFtZV9maWxlKGdfcmVwbywgInNvbmdvZjdjaXRpZXMudHh0IiwgIl90ZW1wXy50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJpa2VlcHNpeC50eHQiLCAic29uZ29mN2NpdGllcy50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJzaXhzZXJ2aW5nLnR4dCIsICJpa2VlcHNpeC50eHQiKTsKKwlyZW5hbWVfZmlsZShnX3JlcG8sICJfdGVtcF8udHh0IiwgInNpeHNlcnZpbmcudHh0Iik7CisKKwljbF9naXRfcGFzcyhnaXRfc3RhdHVzX2xpc3RfbmV3KCZzdGF0dXNsaXN0LCBnX3JlcG8sICZvcHRzKSk7CisJdGVzdF9zdGF0dXMoc3RhdHVzbGlzdCwgZXhwZWN0ZWQsIDMpOworCWdpdF9zdGF0dXNfbGlzdF9mcmVlKHN0YXR1c2xpc3QpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworfQorCit2b2lkIHRlc3Rfc3RhdHVzX3JlbmFtZXNfX3Jld3JpdGVzX29ubHlfZm9yX3JlbmFtZXModm9pZCkKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF9zdGF0dXNfbGlzdCAqc3RhdHVzbGlzdDsKKwlnaXRfc3RhdHVzX29wdGlvbnMgb3B0cyA9IEdJVF9TVEFUVVNfT1BUSU9OU19JTklUOworCXN0cnVjdCBzdGF0dXNfZW50cnkgZXhwZWN0ZWRbXSA9IHsKKwkJeyBHSVRfU1RBVFVTX1dUX01PRElGSUVELCAiaWtlZXBzaXgudHh0IiwgImlrZWVwc2l4LnR4dCIgfSwKKwl9OworCisJb3B0cy5mbGFncyB8PSBHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOVFJBQ0tFRDsKKwlvcHRzLmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfSEVBRF9UT19JTkRFWDsKKwlvcHRzLmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfSU5ERVhfVE9fV09SS0RJUjsKKwlvcHRzLmZsYWdzIHw9IEdJVF9TVEFUVVNfT1BUX1JFTkFNRVNfRlJPTV9SRVdSSVRFUzsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisKKwljbF9naXRfcmV3cml0ZWZpbGUoInJlbmFtZXMvaWtlZXBzaXgudHh0IiwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIgXAorCQkiVGhpcyBpcyBlbm91Z2ggY29udGVudCBmb3IgdGhlIGZpbGUgdG8gYmUgcmV3cml0dGVuLlxuIiBcCisJCSJUaGlzIGlzIGVub3VnaCBjb250ZW50IGZvciB0aGUgZmlsZSB0byBiZSByZXdyaXR0ZW4uXG4iIFwKKwkJIlRoaXMgaXMgZW5vdWdoIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHRvIGJlIHJld3JpdHRlbi5cbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N0YXR1c19saXN0X25ldygmc3RhdHVzbGlzdCwgZ19yZXBvLCAmb3B0cykpOworCXRlc3Rfc3RhdHVzKHN0YXR1c2xpc3QsIGV4cGVjdGVkLCAxKTsKKwlnaXRfc3RhdHVzX2xpc3RfZnJlZShzdGF0dXNsaXN0KTsKKworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KKwogdm9pZCB0ZXN0X3N0YXR1c19yZW5hbWVzX19ib3RoX2Nhc2VjaGFuZ2Vfb25lKHZvaWQpCiB7CiAJZ2l0X2luZGV4ICppbmRleDsKQEAgLTMzNSwxNCArNTA3LDE0IEBACiAJCSAgInVudGltZWx5LnR4dCIsICJ1bnRpbWVsaWVzdC50eHQiIH0KIAl9OwogCXN0cnVjdCBzdGF0dXNfZW50cnkgZXhwZWN0ZWRfY2FzZVtdID0gewotCQl7IEdJVF9TVEFUVVNfSU5ERVhfUkVOQU1FRCB8IEdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQgfAotCQkgIEdJVF9TVEFUVVNfV1RfUkVOQU1FRCB8IEdJVF9TVEFUVVNfV1RfTU9ESUZJRUQsCi0JCSAgImlrZWVwc2l4LnR4dCIsICJpa2VlcHNpeC50eHQiIH0sCi0JCXsgR0lUX1NUQVRVU19JTkRFWF9NT0RJRklFRCB8IEdJVF9TVEFUVVNfV1RfUkVOQU1FRCwKLQkJICAic2l4c2VydmluZy50eHQiLCAiU2l4U2VydmluZy50eHQiIH0sCiAJCXsgR0lUX1NUQVRVU19JTkRFWF9SRU5BTUVEIHwKIAkJICBHSVRfU1RBVFVTX1dUX01PRElGSUVEIHwgR0lUX1NUQVRVU19XVF9SRU5BTUVELAogCQkgICJzb25nb2Y3Y2l0aWVzLnR4dCIsICJTT05HT0Y3LnR4dCIgfSwKKwkJeyBHSVRfU1RBVFVTX0lOREVYX01PRElGSUVEIHwgR0lUX1NUQVRVU19XVF9SRU5BTUVELAorCQkgICJzaXhzZXJ2aW5nLnR4dCIsICJTaXhTZXJ2aW5nLnR4dCIgfSwKKwkJeyBHSVRfU1RBVFVTX0lOREVYX1JFTkFNRUQgfCBHSVRfU1RBVFVTX0lOREVYX01PRElGSUVEIHwKKwkJICBHSVRfU1RBVFVTX1dUX1JFTkFNRUQgfCBHSVRfU1RBVFVTX1dUX01PRElGSUVELAorCQkgICJpa2VlcHNpeC50eHQiLCAiaWtlZXBzaXgudHh0IiB9LAogCQl7IEdJVF9TVEFUVVNfSU5ERVhfUkVOQU1FRCB8IEdJVF9TVEFUVVNfV1RfUkVOQU1FRCwKIAkJICAidW50aW1lbHkudHh0IiwgInVudGltZWxpZXN0LnR4dCIgfQogCX07CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3N0YXR1cy9zaW5nbGUuYyBiL3Rlc3RzL3N0YXR1cy9zaW5nbGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9zdGF0dXMvc2luZ2xlLmMKcmVuYW1lIHRvIHRlc3RzL3N0YXR1cy9zaW5nbGUuYwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9zdGF0dXMvc3RhdHVzX2RhdGEuaCBiL3Rlc3RzL3N0YXR1cy9zdGF0dXNfZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvc3RhdHVzL3N0YXR1c19kYXRhLmgKcmVuYW1lIHRvIHRlc3RzL3N0YXR1cy9zdGF0dXNfZGF0YS5oCmluZGV4IGE0MWJkZTcuLjhhZDQyMzUgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvc3RhdHVzL3N0YXR1c19kYXRhLmgKKysrIGIvdGVzdHMvc3RhdHVzL3N0YXR1c19kYXRhLmgKQEAgLTEsNSArMSw5IEBACiAjaW5jbHVkZSAic3RhdHVzX2hlbHBlcnMuaCIKIAorLy8gQSB1dGYtOCBzdHJpbmcgd2l0aCA4MyBjaGFyYWN0ZXJzLCBidXQgMjQ5IGJ5dGVzLgorc3RhdGljIGNvbnN0IGNoYXIgKmxvbmduYW1lID0gIlx4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5N1x4ZTVceDhmXHg5NyI7CisKKwogLyogZW50cmllcyBmb3IgYSBwbGFpbiBjb3B5IG9mIHRlc3RzL3Jlc291cmNlcy9zdGF0dXMgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3BhdGhzMFtdID0gewpAQCAtMjUwLDMgKzI1NCw3MyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGludCBlbnRyeV9jb3VudDQgPSAyMzsKKworCisvKiBlbnRyaWVzIGZvciBhIGNvcHkgb2YgdGVzdHMvcmVzb3VyY2VzL3N0YXR1cyB3aXRoIG9wdGlvbnMKKyAqIHBhc3NlZCB0byB0aGUgc3RhdHVzIGNhbGwgaW4gb3JkZXIgdG8gb25seSBnZXQgdGhlIGRpZmZlcmVuY2VzCisgKiBiZXR3ZWVuIHRoZSBIRUFEIGFuZCB0aGUgaW5kZXggKGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkKQorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICplbnRyeV9wYXRoczVbXSA9IHsKKwkic3RhZ2VkX2NoYW5nZXMiLAorCSJzdGFnZWRfY2hhbmdlc19maWxlX2RlbGV0ZWQiLAorCSJzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIiwKKwkic3RhZ2VkX2RlbGV0ZV9maWxlX2RlbGV0ZWQiLAorCSJzdGFnZWRfZGVsZXRlX21vZGlmaWVkX2ZpbGUiLAorCSJzdGFnZWRfbmV3X2ZpbGUiLAorCSJzdGFnZWRfbmV3X2ZpbGVfZGVsZXRlZF9maWxlIiwKKwkic3RhZ2VkX25ld19maWxlX21vZGlmaWVkX2ZpbGUiLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBlbnRyeV9zdGF0dXNlczVbXSA9IHsKKwlHSVRfU1RBVFVTX0lOREVYX01PRElGSUVELAorCUdJVF9TVEFUVVNfSU5ERVhfTU9ESUZJRUQsCisJR0lUX1NUQVRVU19JTkRFWF9NT0RJRklFRCwKKwlHSVRfU1RBVFVTX0lOREVYX0RFTEVURUQsCisJR0lUX1NUQVRVU19JTkRFWF9ERUxFVEVELAorCUdJVF9TVEFUVVNfSU5ERVhfTkVXLAorCUdJVF9TVEFUVVNfSU5ERVhfTkVXLAorCUdJVF9TVEFUVVNfSU5ERVhfTkVXLAorfTsKKworc3RhdGljIGNvbnN0IGludCBlbnRyeV9jb3VudDUgPSA4OworCisKKy8qIGVudHJpZXMgZm9yIGEgY29weSBvZiB0ZXN0cy9yZXNvdXJjZXMvc3RhdHVzIHdpdGggb3B0aW9ucworICogcGFzc2VkIHRvIHRoZSBzdGF0dXMgY2FsbCBpbiBvcmRlciB0byBvbmx5IGdldCB0aGUgZGlmZmVyZW5jZXMKKyAqIGJldHdlZW4gdGhlIHdvcmtkaXIgYW5kIHRoZSBpbmRleCAoY2hhbmdlcyBub3Qgc3RhZ2VkLCB1bnRyYWNrZWQgZmlsZXMpCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3BhdGhzNltdID0geworCSJmaWxlX2RlbGV0ZWQiLAorCSJpZ25vcmVkX2ZpbGUiLAorCSJtb2RpZmllZF9maWxlIiwKKwkibmV3X2ZpbGUiLAorCSJzdGFnZWRfY2hhbmdlc19maWxlX2RlbGV0ZWQiLAorCSJzdGFnZWRfY2hhbmdlc19tb2RpZmllZF9maWxlIiwKKwkic3RhZ2VkX2RlbGV0ZV9tb2RpZmllZF9maWxlIiwKKwkic3RhZ2VkX25ld19maWxlX2RlbGV0ZWRfZmlsZSIsCisJInN0YWdlZF9uZXdfZmlsZV9tb2RpZmllZF9maWxlIiwKKwkic3ViZGlyL2RlbGV0ZWRfZmlsZSIsCisJInN1YmRpci9tb2RpZmllZF9maWxlIiwKKwkic3ViZGlyL25ld19maWxlIiwKKwkiXHhlOFx4YmZceDk5IiwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZW50cnlfc3RhdHVzZXM2W10gPSB7CisJR0lUX1NUQVRVU19XVF9ERUxFVEVELAorCUdJVF9TVEFUVVNfSUdOT1JFRCwKKwlHSVRfU1RBVFVTX1dUX01PRElGSUVELAorCUdJVF9TVEFUVVNfV1RfTkVXLAorCUdJVF9TVEFUVVNfV1RfREVMRVRFRCwKKwlHSVRfU1RBVFVTX1dUX01PRElGSUVELAorCUdJVF9TVEFUVVNfV1RfTkVXLAorCUdJVF9TVEFUVVNfV1RfREVMRVRFRCwKKwlHSVRfU1RBVFVTX1dUX01PRElGSUVELAorCUdJVF9TVEFUVVNfV1RfREVMRVRFRCwKKwlHSVRfU1RBVFVTX1dUX01PRElGSUVELAorCUdJVF9TVEFUVVNfV1RfTkVXLAorCUdJVF9TVEFUVVNfV1RfTkVXLAorfTsKKworc3RhdGljIGNvbnN0IGludCBlbnRyeV9jb3VudDYgPSAxMzsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3RhdHVzL3N0YXR1c19oZWxwZXJzLmMgYi90ZXN0cy9zdGF0dXMvc3RhdHVzX2hlbHBlcnMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9zdGF0dXMvc3RhdHVzX2hlbHBlcnMuYwpyZW5hbWUgdG8gdGVzdHMvc3RhdHVzL3N0YXR1c19oZWxwZXJzLmMKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3RhdHVzL3N0YXR1c19oZWxwZXJzLmggYi90ZXN0cy9zdGF0dXMvc3RhdHVzX2hlbHBlcnMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9zdGF0dXMvc3RhdHVzX2hlbHBlcnMuaApyZW5hbWUgdG8gdGVzdHMvc3RhdHVzL3N0YXR1c19oZWxwZXJzLmgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3RhdHVzL3N1Ym1vZHVsZXMuYyBiL3Rlc3RzL3N0YXR1cy9zdWJtb2R1bGVzLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9zdGF0dXMvc3VibW9kdWxlcy5jCnJlbmFtZSB0byB0ZXN0cy9zdGF0dXMvc3VibW9kdWxlcy5jCmluZGV4IGFmODcwNzcuLmVmMjg4OGYgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvc3RhdHVzL3N1Ym1vZHVsZXMuYworKysgYi90ZXN0cy9zdGF0dXMvc3VibW9kdWxlcy5jCkBAIC05LDI1ICs5LDE4IEBACiAKIHZvaWQgdGVzdF9zdGF0dXNfc3VibW9kdWxlc19faW5pdGlhbGl6ZSh2b2lkKQogewotCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInN1Ym1vZHVsZXMiKTsKLQotCWNsX2ZpeHR1cmVfc2FuZGJveCgidGVzdHJlcG8uZ2l0Iik7Ci0KLQlyZXdyaXRlX2dpdG1vZHVsZXMoZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihnX3JlcG8pKTsKLQotCXBfcmVuYW1lKCJzdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQiLCAic3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0Iik7CiB9CiAKIHZvaWQgdGVzdF9zdGF0dXNfc3VibW9kdWxlc19fY2xlYW51cCh2b2lkKQogewotCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKLQljbF9maXh0dXJlX2NsZWFudXAoInRlc3RyZXBvLmdpdCIpOwogfQogCiB2b2lkIHRlc3Rfc3RhdHVzX3N1Ym1vZHVsZXNfX2FwaSh2b2lkKQogewogCWdpdF9zdWJtb2R1bGUgKnNtOwogCisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2R1bGVzKCk7CisKIAljbF9hc3NlcnQoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoTlVMTCwgZ19yZXBvLCAibm9uZXhpc3RlbnQiKSA9PSBHSVRfRU5PVEZPVU5EKTsKIAogCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX2xvb2t1cChOVUxMLCBnX3JlcG8sICJtb2RpZmllZCIpID09IEdJVF9FTk9URk9VTkQpOwpAQCAtNDIsNiArMzUsOCBAQAogewogCWludCBjb3VudHMgPSAwOwogCisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2R1bGVzKCk7CisKIAljbF9hc3NlcnQoZ2l0X3BhdGhfaXNkaXIoInN1Ym1vZHVsZXMvLmdpdCIpKTsKIAljbF9hc3NlcnQoZ2l0X3BhdGhfaXNkaXIoInN1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdCIpKTsKIAljbF9hc3NlcnQoZ2l0X3BhdGhfaXNmaWxlKCJzdWJtb2R1bGVzLy5naXRtb2R1bGVzIikpOwpAQCAtODYsNiArODEsOCBAQAogewogCXN0YXR1c19lbnRyeV9jb3VudHMgY291bnRzOwogCisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2R1bGVzKCk7CisKIAljbF9hc3NlcnQoZ2l0X3BhdGhfaXNkaXIoInN1Ym1vZHVsZXMvLmdpdCIpKTsKIAljbF9hc3NlcnQoZ2l0X3BhdGhfaXNkaXIoInN1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdCIpKTsKIAljbF9hc3NlcnQoZ2l0X3BhdGhfaXNmaWxlKCJzdWJtb2R1bGVzLy5naXRtb2R1bGVzIikpOwpAQCAtMTA0LDYgKzEwMSw3IEBACiB2b2lkIHRlc3Rfc3RhdHVzX3N1Ym1vZHVsZXNfX3NpbmdsZV9maWxlKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisJZ19yZXBvID0gc2V0dXBfZml4dHVyZV9zdWJtb2R1bGVzKCk7CiAJY2xfZ2l0X3Bhc3MoIGdpdF9zdGF0dXNfZmlsZSgmc3RhdHVzLCBnX3JlcG8sICJ0ZXN0cmVwbyIpICk7CiAJY2xfYXNzZXJ0KCFzdGF0dXMpOwogfQpAQCAtMTM0LDYgKzEzMiw4IEBACiAJCUdJVF9TVEFUVVNfV1RfTkVXCiAJfTsKIAorCWdfcmVwbyA9IHNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcygpOworCiAJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJ0ZXN0cmVwbyIpKTsKIAljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX29wZW4oJnNtcmVwbywgc20pKTsKIApAQCAtMTkyLDYgKzE5Miw4IEBACiAJCUdJVF9TVEFUVVNfV1RfTkVXCiAJfTsKIAorCWdfcmVwbyA9IHNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcygpOworCiAJY2xfZ2l0X3Jld3JpdGVmaWxlKCJzdWJtb2R1bGVzL3Rlc3RyZXBvL1JFQURNRSIsICJoZXloZXloZXkiKTsKIAljbF9naXRfbWtmaWxlKCJzdWJtb2R1bGVzL3Rlc3RyZXBvL2FsbF9uZXcudHh0IiwgIm5ldmVyIHNlZW4gYmVmb3JlIik7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3RhdHVzL3dvcmt0cmVlLmMgYi90ZXN0cy9zdGF0dXMvd29ya3RyZWUuYwpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N0YXR1cy93b3JrdHJlZS5jCnJlbmFtZSB0byB0ZXN0cy9zdGF0dXMvd29ya3RyZWUuYwppbmRleCA5MjA2NzFlLi4zNGJlNmQzIDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3N0YXR1cy93b3JrdHJlZS5jCisrKyBiL3Rlc3RzL3N0YXR1cy93b3JrdHJlZS5jCkBAIC00MCw2ICs0MCw0OCBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvdW50cy53cm9uZ19zb3J0ZWRfcGF0aCk7CiB9CiAKK3ZvaWQgYXNzZXJ0X3Nob3coY29uc3QgaW50IGVudHJ5X2NvdW50cywgY29uc3QgY2hhciAqZW50cnlfcGF0aHNbXSwKKwkJCQkgY29uc3QgdW5zaWduZWQgaW50IGVudHJ5X3N0YXR1c2VzW10sIGdpdF9zdGF0dXNfc2hvd190IHNob3cpCit7CisJc3RhdHVzX2VudHJ5X2NvdW50cyBjb3VudHM7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdGF0dXMiKTsKKwlnaXRfc3RhdHVzX29wdGlvbnMgb3B0cyA9IEdJVF9TVEFUVVNfT1BUSU9OU19JTklUOworCisJbWVtc2V0KCZjb3VudHMsIDB4MCwgc2l6ZW9mKHN0YXR1c19lbnRyeV9jb3VudHMpKTsKKwljb3VudHMuZXhwZWN0ZWRfZW50cnlfY291bnQgPSBlbnRyeV9jb3VudHM7CisJY291bnRzLmV4cGVjdGVkX3BhdGhzID0gZW50cnlfcGF0aHM7CisJY291bnRzLmV4cGVjdGVkX3N0YXR1c2VzID0gZW50cnlfc3RhdHVzZXM7CisKKwlvcHRzLmZsYWdzID0gR0lUX1NUQVRVU19PUFRfREVGQVVMVFM7CisJb3B0cy5zaG93ID0gc2hvdzsKKworCWNsX2dpdF9wYXNzKAorCQlnaXRfc3RhdHVzX2ZvcmVhY2hfZXh0KHJlcG8sICZvcHRzLCBjYl9zdGF0dXNfX25vcm1hbCwgJmNvdW50cykKKwkpOworCisJY2xfYXNzZXJ0X2VxdWFsX2koY291bnRzLmV4cGVjdGVkX2VudHJ5X2NvdW50LCBjb3VudHMuZW50cnlfY291bnQpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvdW50cy53cm9uZ19zdGF0dXNfZmxhZ3NfY291bnQpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvdW50cy53cm9uZ19zb3J0ZWRfcGF0aCk7Cit9CisKK3ZvaWQgdGVzdF9zdGF0dXNfd29ya3RyZWVfX3Nob3dfaW5kZXhfYW5kX3dvcmtkaXIodm9pZCkKK3sKKwlhc3NlcnRfc2hvdyhlbnRyeV9jb3VudDAsIGVudHJ5X3BhdGhzMCwgZW50cnlfc3RhdHVzZXMwLAorCQlHSVRfU1RBVFVTX1NIT1dfSU5ERVhfQU5EX1dPUktESVIpOworfQorCit2b2lkIHRlc3Rfc3RhdHVzX3dvcmt0cmVlX19zaG93X2luZGV4X29ubHkodm9pZCkKK3sKKwlhc3NlcnRfc2hvdyhlbnRyeV9jb3VudDUsIGVudHJ5X3BhdGhzNSwgZW50cnlfc3RhdHVzZXM1LAorCQlHSVRfU1RBVFVTX1NIT1dfSU5ERVhfT05MWSk7Cit9CisKK3ZvaWQgdGVzdF9zdGF0dXNfd29ya3RyZWVfX3Nob3dfd29ya2Rpcl9vbmx5KHZvaWQpCit7CisJYXNzZXJ0X3Nob3coZW50cnlfY291bnQ2LCBlbnRyeV9wYXRoczYsIGVudHJ5X3N0YXR1c2VzNiwKKwkJR0lUX1NUQVRVU19TSE9XX1dPUktESVJfT05MWSk7Cit9CisKIC8qIHRoaXMgdGVzdCBpcyBlcXVpdmFsZW50IHRvIHQxOC1zdGF0dXMuYzpzdGF0dXNjYjEgKi8KIHZvaWQgdGVzdF9zdGF0dXNfd29ya3RyZWVfX2VtcHR5X3JlcG9zaXRvcnkodm9pZCkKIHsKQEAgLTc3LDcgKzExOSw3IEBACiAKIAkvKiBmaXJzdCBwdXJnZSB0aGUgY29udGVudHMgb2YgdGhlIHdvcmt0cmVlICovCiAJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZ3b3JrZGlyLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfZGlyZWFjaCgmd29ya2RpciwgcmVtb3ZlX2ZpbGVfY2IsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9kaXJlYWNoKCZ3b3JrZGlyLCAwLCByZW1vdmVfZmlsZV9jYiwgTlVMTCkpOwogCWdpdF9idWZfZnJlZSgmd29ya2Rpcik7CiAKIAkvKiBub3cgZ2V0IHN0YXR1cyAqLwpAQCAtNDI4LDE2ICs0NzAsMTUgQEAKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfU1RBVFVTX1dUX01PRElGSUVELCBzdGF0dXMpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCByZXBvKSk7Ci0KIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfcmVtb3ZlKGluZGV4LCAibW9kaWZpZWRfZmlsZSIsIDApKTsKLQljbF9naXRfcGFzcyhnaXRfaW5kZXhfY29uZmxpY3RfYWRkKGluZGV4LCAmYW5jZXN0b3JfZW50cnksCi0JCSZvdXJfZW50cnksICZ0aGVpcl9lbnRyeSkpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9jb25mbGljdF9hZGQoCisJCWluZGV4LCAmYW5jZXN0b3JfZW50cnksICZvdXJfZW50cnksICZ0aGVpcl9lbnRyeSkpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIAogCWNsX2dpdF9wYXNzKGdpdF9zdGF0dXNfZmlsZSgmc3RhdHVzLCByZXBvLCAibW9kaWZpZWRfZmlsZSIpKTsKIAogCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9TVEFUVVNfSU5ERVhfREVMRVRFRCB8IEdJVF9TVEFUVVNfV1RfTkVXLCBzdGF0dXMpOwotCi0JZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqZmlsZW1vZGVfcGF0aHNbXSA9IHsKQEAgLTU5MCwzNSArNjMxLDEyIEBACiAKIHN0YXRpYyB2b2lkIHN0YWdlX2FuZF9jb21taXQoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JZ2l0X29pZCB0cmVlX29pZCwgY29tbWl0X29pZDsKLQlnaXRfdHJlZSAqdHJlZTsKLQlnaXRfc2lnbmF0dXJlICpzaWduYXR1cmU7CiAJZ2l0X2luZGV4ICppbmRleDsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgcmVwbykpOwogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCBwYXRoKSk7Ci0JY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGVfdHJlZSgmdHJlZV9vaWQsIGluZGV4KSk7CisJY2xfcmVwb19jb21taXRfZnJvbV9pbmRleChOVUxMLCByZXBvLCBOVUxMLCAxMzIzODQ3NzQzLCAiSW5pdGlhbCBjb21taXRcbiIpOwogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKLQotCWNsX2dpdF9wYXNzKGdpdF90cmVlX2xvb2t1cCgmdHJlZSwgcmVwbywgJnRyZWVfb2lkKSk7Ci0KLQljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25ldygmc2lnbmF0dXJlLCAibnVsbHRva2VuIiwgImVtZXJpYy5mZXJtYXNAZ21haWwuY29tIiwgMTMyMzg0Nzc0MywgNjApKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9jb21taXRfY3JlYXRlX3YoCi0JCSZjb21taXRfb2lkLAotCQlyZXBvLAotCQkiSEVBRCIsCi0JCXNpZ25hdHVyZSwKLQkJc2lnbmF0dXJlLAotCQlOVUxMLAotCQkiSW5pdGlhbCBjb21taXRcblwwIiwKLQkJdHJlZSwKLQkJMCkpOwotCi0JZ2l0X3RyZWVfZnJlZSh0cmVlKTsKLQlnaXRfc2lnbmF0dXJlX2ZyZWUoc2lnbmF0dXJlKTsKIH0KIAogc3RhdGljIHZvaWQgYXNzZXJ0X2lnbm9yZV9jYXNlKApAQCAtODIzLDMgKzg0MSwzNSBAQAogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvdW50cy53cm9uZ19zdGF0dXNfZmxhZ3NfY291bnQpOwogCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvdW50cy53cm9uZ19zb3J0ZWRfcGF0aCk7CiB9CisKK3ZvaWQgdGVzdF9zdGF0dXNfd29ya3RyZWVfX2xvbmdfZmlsZW5hbWVzKHZvaWQpCit7CisJY2hhciBwYXRoWzI2MCo0KzFdOworCWNvbnN0IGNoYXIgKmV4cGVjdGVkX3BhdGhzW10gPSB7cGF0aH07CisJY29uc3QgdW5zaWduZWQgaW50IGV4cGVjdGVkX3N0YXR1c2VzW10gPSB7R0lUX1NUQVRVU19XVF9ORVd9OworCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJlbXB0eV9zdGFuZGFyZF9yZXBvIik7CisJZ2l0X3N0YXR1c19vcHRpb25zIG9wdHMgPSBHSVRfU1RBVFVTX09QVElPTlNfSU5JVDsKKwlzdGF0dXNfZW50cnlfY291bnRzIGNvdW50cyA9IHswfTsKKworCS8vIENyZWF0ZSBkaXJlY3Rvcnkgd2l0aCBhbWF6aW5nbHkgbG9uZyBmaWxlbmFtZQorCXNwcmludGYocGF0aCwgImVtcHR5X3N0YW5kYXJkX3JlcG8vJXMiLCBsb25nbmFtZSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2Rpcl9yKHBhdGgsIE5VTEwsIDA3NzcpKTsKKwlzcHJpbnRmKHBhdGgsICJlbXB0eV9zdGFuZGFyZF9yZXBvLyVzL2ZvbyIsIGxvbmduYW1lKTsKKwljbF9naXRfbWtmaWxlKHBhdGgsICJkdW1teSIpOworCisJc3ByaW50ZihwYXRoLCAiJXMvZm9vIiwgbG9uZ25hbWUpOworCWNvdW50cy5leHBlY3RlZF9lbnRyeV9jb3VudCA9IDE7CisJY291bnRzLmV4cGVjdGVkX3BhdGhzID0gZXhwZWN0ZWRfcGF0aHM7CisJY291bnRzLmV4cGVjdGVkX3N0YXR1c2VzID0gZXhwZWN0ZWRfc3RhdHVzZXM7CisKKwlvcHRzLnNob3cgPSBHSVRfU1RBVFVTX1NIT1dfV09SS0RJUl9PTkxZOworCW9wdHMuZmxhZ3MgPSBHSVRfU1RBVFVTX09QVF9ERUZBVUxUUzsKKworCWNsX2dpdF9wYXNzKAorCQlnaXRfc3RhdHVzX2ZvcmVhY2hfZXh0KHJlcG8sICZvcHRzLCBjYl9zdGF0dXNfX25vcm1hbCwgJmNvdW50cykgKTsKKwljbF9hc3NlcnRfZXF1YWxfaShjb3VudHMuZXhwZWN0ZWRfZW50cnlfY291bnQsIGNvdW50cy5lbnRyeV9jb3VudCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgY291bnRzLndyb25nX3N0YXR1c19mbGFnc19jb3VudCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMCwgY291bnRzLndyb25nX3NvcnRlZF9wYXRoKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci9zdGF0dXMvd29ya3RyZWVfaW5pdC5jIGIvdGVzdHMvc3RhdHVzL3dvcmt0cmVlX2luaXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci9zdGF0dXMvd29ya3RyZWVfaW5pdC5jCnJlbmFtZSB0byB0ZXN0cy9zdGF0dXMvd29ya3RyZWVfaW5pdC5jCmRpZmYgLS1naXQgYS90ZXN0cy9zdHJlc3MvZGlmZi5jIGIvdGVzdHMvc3RyZXNzL2RpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDIwOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RyZXNzL2RpZmYuYwpAQCAtMCwwICsxLDE0NiBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgIi4uL2RpZmYvZGlmZl9oZWxwZXJzLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvID0gTlVMTDsKKwordm9pZCB0ZXN0X3N0cmVzc19kaWZmX19pbml0aWFsaXplKHZvaWQpCit7Cit9CisKK3ZvaWQgdGVzdF9zdHJlc3NfZGlmZl9fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKworI2RlZmluZSBBTk9USEVSX1BPRU0gXAorIk9ILCBnbG9yaW91cyBhcmUgdGhlIGd1YXJkZWQgaGVpZ2h0c1xuV2hlcmUgZ3VhcmRpYW4gc291bHMgYWJpZGXigJRcblNlbGYtZXhpbGVkIGZyb20gb3VyIGdyb3NzIGRlbGlnaHRz4oCUXG5BYm92ZSwgYmV5b25kLCBvdXRzaWRlOlxuQW4gYW1wbGVyIGFyYyB0aGVpciBzcGlyaXQgc3dpbmdz4oCUXG5Db21tYW5kcyBhIGp1c3RlciB2aWV34oCUXG5XZSBoYXZlIHRoZWlyIHdvcmQgZm9yIGFsbCB0aGVzZSB0aGluZ3MsXG5ObyBkb3VidCB0aGVpciB3b3JkcyBhcmUgdHJ1ZS5cblxuWWV0IHdlLCB0aGUgYm9uZCBzbGF2ZXMgb2Ygb3VyIGRheSxcbldob20gZGlydCBhbmQgZGFuZ2VyIHByZXNz4oCUXG5Dby1oZWlycyBvZiBpbnNvbGVuY2UsIGRlbGF5LFxuQW5kIGxlYWd1ZWQgdW5mYWl0aGZ1bG5lc3PigJRcblN1Y2ggaXMgb3VyIG5lZWQgbXVzdCBzZWVrIGluZGVlZFxuQW5kLCBoYXZpbmcgZm91bmQsIGVuZ2FnZVxuVGhlIG1lbiB3aG8gbWVyZWx5IGRvIHRoZSB3b3JrXG5Gb3Igd2hpY2ggdGhleSBkcmF3IHRoZSB3YWdlLlxuXG5Gcm9tIGZvcmdlIGFuZCBmYXJtIGFuZCBtaW5lIGFuZCBiZW5jaCxcbkRlY2ssIGFsdGFyLCBvdXRwb3N0IGxvbmXigJRcbk1pbGwsIHNjaG9vbCwgYmF0dGFsaW9uLCBjb3VudGVyLCB0cmVuY2gsXG5SYWlsLCBzZW5hdGUsIHNoZWVwZm9sZCwgdGhyb25l4oCUXG5DcmVhdGlvbidzIGNyeSBnb2VzIHVwIG9uIGhpZ2hcbkZyb20gYWdlIHRvIGNoZWF0ZWQgYWdlOlxuXCJTZW5kIHVzIHRoZSBtZW4gd2hvIGRvIHRoZSB3b3JrXG5cIkZvciB3aGljaCB0aGV5IGRyYXcgdGhlIHdhZ2UhXCJcbiIKKworc3RhdGljIHZvaWQgdGVzdF93aXRoX21hbnkoaW50IGV4cGVjdGVkX25ldykKK3sKKwlnaXRfaW5kZXggKmluZGV4OworCWdpdF90cmVlICp0cmVlLCAqbmV3X3RyZWU7CisJZ2l0X2RpZmYgKmRpZmYgPSBOVUxMOworCWRpZmZfZXhwZWN0cyBleHA7CisJZ2l0X2RpZmZfb3B0aW9ucyBkaWZmb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwlnaXRfZGlmZl9maW5kX29wdGlvbnMgb3B0cyA9IEdJVF9ESUZGX0ZJTkRfT1BUSU9OU19JTklUOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcygKKwkJZ2l0X3JldnBhcnNlX3NpbmdsZSgoZ2l0X29iamVjdCAqKikmdHJlZSwgZ19yZXBvLCAiSEVBRF57dHJlZX0iKSk7CisKKwljbF9naXRfcGFzcyhwX3JlbmFtZSgicmVuYW1lcy9pa2VlcHNpeC50eHQiLCAicmVuYW1lcy9pa2VlcHNpeDIudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9yZW1vdmVfYnlwYXRoKGluZGV4LCAiaWtlZXBzaXgudHh0IikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAiaWtlZXBzaXgyLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RyZWVfdG9faW5kZXgoJmRpZmYsIGdfcmVwbywgdHJlZSwgaW5kZXgsICZkaWZmb3B0cykpOworCisJbWVtc2V0KCZleHAsIDAsIHNpemVvZihleHApKTsKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKAorCQlkaWZmLCBkaWZmX2ZpbGVfY2IsIE5VTEwsIE5VTEwsICZleHApKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0RFTEVURURdKTsKKwljbF9hc3NlcnRfZXF1YWxfaShleHBlY3RlZF9uZXcgKyAxLCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfbmV3ICsgMiwgZXhwLmZpbGVzKTsKKworCW9wdHMuZmxhZ3MgPSBHSVRfRElGRl9GSU5EX0FMTDsKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9maW5kX3NpbWlsYXIoZGlmZiwgJm9wdHMpKTsKKworCW1lbXNldCgmZXhwLCAwLCBzaXplb2YoZXhwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZm9yZWFjaCgKKwkJZGlmZiwgZGlmZl9maWxlX2NiLCBOVUxMLCBOVUxMLCAmZXhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9SRU5BTUVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfbmV3LCBleHAuZmlsZV9zdGF0dXNbR0lUX0RFTFRBX0FEREVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfbmV3ICsgMSwgZXhwLmZpbGVzKTsKKworCWdpdF9kaWZmX2ZyZWUoZGlmZik7CisKKwljbF9yZXBvX2NvbW1pdF9mcm9tX2luZGV4KE5VTEwsIGdfcmVwbywgTlVMTCwgMTM3MjM1MDAwMCwgInlveW95byIpOworCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoCisJCShnaXRfb2JqZWN0ICoqKSZuZXdfdHJlZSwgZ19yZXBvLCAiSEVBRF57dHJlZX0iKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90cmVlX3RvX3RyZWUoCisJCSZkaWZmLCBnX3JlcG8sIHRyZWUsIG5ld190cmVlLCAmZGlmZm9wdHMpKTsKKworCW1lbXNldCgmZXhwLCAwLCBzaXplb2YoZXhwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZm9yZWFjaCgKKwkJZGlmZiwgZGlmZl9maWxlX2NiLCBOVUxMLCBOVUxMLCAmZXhwKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9ERUxFVEVEXSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfbmV3ICsgMSwgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9BRERFRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX25ldyArIDIsIGV4cC5maWxlcyk7CisKKwlvcHRzLmZsYWdzID0gR0lUX0RJRkZfRklORF9BTEw7CisJY2xfZ2l0X3Bhc3MoZ2l0X2RpZmZfZmluZF9zaW1pbGFyKGRpZmYsICZvcHRzKSk7CisKKwltZW1zZXQoJmV4cCwgMCwgc2l6ZW9mKGV4cCkpOworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2ZvcmVhY2goCisJCWRpZmYsIGRpZmZfZmlsZV9jYiwgTlVMTCwgTlVMTCwgJmV4cCkpOworCWNsX2Fzc2VydF9lcXVhbF9pKDEsIGV4cC5maWxlX3N0YXR1c1tHSVRfREVMVEFfUkVOQU1FRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX25ldywgZXhwLmZpbGVfc3RhdHVzW0dJVF9ERUxUQV9BRERFRF0pOworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX25ldyArIDEsIGV4cC5maWxlcyk7CisKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCisJZ2l0X3RyZWVfZnJlZShuZXdfdHJlZSk7CisJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7Cit9CisKK3ZvaWQgdGVzdF9zdHJlc3NfZGlmZl9fcmVuYW1lX2JpZ19maWxlcyh2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisJY2hhciB0bXBbNjRdOworCWludCBpLCBqOworCWdpdF9idWYgYiA9IEdJVF9CVUZfSU5JVDsKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInJlbmFtZXMiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpICs9IDEpIHsKKwkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgInJlbmFtZXMvbmV3ZmlsZSUwM2QiLCBpKTsKKwkJZm9yIChqID0gaSAqIDI1NjsgaiA+IDA7IC0taikKKwkJCWdpdF9idWZfcHJpbnRmKCZiLCAibW9yZSBjb250ZW50ICVkXG4iLCBpKTsKKwkJY2xfZ2l0X21rZmlsZSh0bXAsIGIucHRyKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpICs9IDEpIHsKKwkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgInJlbmFtZXMvbmV3ZmlsZSUwM2QiLCBpKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsIHRtcCArIHN0cmxlbigicmVuYW1lcy8iKSkpOworCX0KKworCWdpdF9idWZfZnJlZSgmYik7CisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCisJdGVzdF93aXRoX21hbnkoMTAwKTsKK30KKwordm9pZCB0ZXN0X3N0cmVzc19kaWZmX19yZW5hbWVfbWFueV9maWxlcyh2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisJY2hhciB0bXBbNjRdOworCWludCBpOworCWdpdF9idWYgYiA9IEdJVF9CVUZfSU5JVDsKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInJlbmFtZXMiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisKKwlnaXRfYnVmX3ByaW50ZigmYiwgIiUwOGRcbiIgQU5PVEhFUl9QT0VNICIlMDhkXG4iIEFOT1RIRVJfUE9FTSBBTk9USEVSX1BPRU0sIDAsIDApOworCisJZm9yIChpID0gMDsgaSA8IDI1MDA7IGkgKz0gMSkgeworCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAicmVuYW1lcy9uZXdmaWxlJTAzZCIsIGkpOworCQlzbnByaW50ZihiLnB0ciwgOSwgIiUwOGQiLCBpKTsKKwkJYi5wdHJbOF0gPSAnXG4nOworCQljbF9naXRfbWtmaWxlKHRtcCwgYi5wdHIpOworCX0KKwlnaXRfYnVmX2ZyZWUoJmIpOworCisJZm9yIChpID0gMDsgaSA8IDI1MDA7IGkgKz0gMSkgeworCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAicmVuYW1lcy9uZXdmaWxlJTAzZCIsIGkpOworCQljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgdG1wICsgc3RybGVuKCJyZW5hbWVzLyIpKSk7CisJfQorCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCisJdGVzdF93aXRoX21hbnkoMjUwMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdWJtb2R1bGUvbG9va3VwLmMgYi90ZXN0cy9zdWJtb2R1bGUvbG9va3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzMjBlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N1Ym1vZHVsZS9sb29rdXAuYwpAQCAtMCwwICsxLDE3MiBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZV9oZWxwZXJzLmgiCisjaW5jbHVkZSAicG9zaXguaCIKKyNpbmNsdWRlICJnaXQyL3N5cy9yZXBvc2l0b3J5LmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvID0gTlVMTDsKKwordm9pZCB0ZXN0X3N1Ym1vZHVsZV9sb29rdXBfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnX3JlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKK30KKwordm9pZCB0ZXN0X3N1Ym1vZHVsZV9sb29rdXBfX3NpbXBsZV9sb29rdXAodm9pZCkKK3sKKwlnaXRfc3VibW9kdWxlICpzbTsKKworCS8qIGxvb2t1cCBleGlzdGluZyAqLworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fdW5jaGFuZ2VkIikpOworCWNsX2Fzc2VydChzbSk7CisKKwkvKiBsb29rdXAgcGVuZGluZyBjaGFuZ2UgaW4gLmdpdG1vZHVsZXMgdGhhdCBpcyBub3QgaW4gSEVBRCAqLworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fYWRkZWRfYW5kX3VuY29tbWl0ZWQiKSk7CisJY2xfYXNzZXJ0KHNtKTsKKworCS8qIGxvb2t1cCBwZW5kaW5nIGNoYW5nZSBpbiAuZ2l0bW9kdWxlcyB0aGF0IGlzIG5laXRoZXIgaW4gSEVBRCBub3IgaW5kZXggKi8KKwljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgInNtX2dpdG1vZHVsZXNfb25seSIpKTsKKwljbF9hc3NlcnQoc20pOworCisJLyogbG9va3VwIGdpdCByZXBvIHN1YmRpciB0aGF0IGlzIG5vdCBhZGRlZCBhcyBzdWJtb2R1bGUgKi8KKwljbF9hc3NlcnQoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJub3Qtc3VibW9kdWxlIikgPT0gR0lUX0VFWElTVFMpOworCisJLyogbG9va3VwIGV4aXN0aW5nIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBhIHN1Ym1vZHVsZSAqLworCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgImp1c3RfYV9kaXIiKSA9PSBHSVRfRU5PVEZPVU5EKTsKKworCS8qIGxvb2t1cCBleGlzdGluZyBmaWxlIHRoYXQgaXMgbm90IGEgc3VibW9kdWxlICovCisJY2xfYXNzZXJ0KGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAianVzdF9hX2ZpbGUiKSA9PSBHSVRfRU5PVEZPVU5EKTsKKworCS8qIGxvb2t1cCBub24tZXhpc3RlbnQgaXRlbSAqLworCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgIm5vX3N1Y2hfZmlsZSIpID09IEdJVF9FTk9URk9VTkQpOworfQorCit2b2lkIHRlc3Rfc3VibW9kdWxlX2xvb2t1cF9fYWNjZXNzb3JzKHZvaWQpCit7CisJZ2l0X3N1Ym1vZHVsZSAqc207CisJY29uc3QgY2hhciAqb2lkID0gIjQ4MDA5NTg4MmQyODFlZDY3NmZlNWI4NjM1Njk1MjBlNTRhN2Q1YzAiOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV91bmNoYW5nZWQiKSk7CisJY2xfYXNzZXJ0KGdpdF9zdWJtb2R1bGVfb3duZXIoc20pID09IGdfcmVwbyk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInNtX3VuY2hhbmdlZCIsIGdpdF9zdWJtb2R1bGVfbmFtZShzbSkpOworCWNsX2Fzc2VydChnaXRfX3N1ZmZpeGNtcChnaXRfc3VibW9kdWxlX3BhdGgoc20pLCAic21fdW5jaGFuZ2VkIikgPT0gMCk7CisJY2xfYXNzZXJ0KGdpdF9fc3VmZml4Y21wKGdpdF9zdWJtb2R1bGVfdXJsKHNtKSwgIi9zdWJtb2QyX3RhcmdldCIpID09IDApOworCisJY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV9pbmRleF9pZChzbSksIG9pZCkgPT0gMCk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV9oZWFkX2lkKHNtKSwgb2lkKSA9PSAwKTsKKwljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX3dkX2lkKHNtKSwgb2lkKSA9PSAwKTsKKworCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX2lnbm9yZShzbSkgPT0gR0lUX1NVQk1PRFVMRV9JR05PUkVfTk9ORSk7CisJY2xfYXNzZXJ0KGdpdF9zdWJtb2R1bGVfdXBkYXRlKHNtKSA9PSBHSVRfU1VCTU9EVUxFX1VQREFURV9DSEVDS09VVCk7CisKKwljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgInNtX2NoYW5nZWRfaGVhZCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic21fY2hhbmdlZF9oZWFkIiwgZ2l0X3N1Ym1vZHVsZV9uYW1lKHNtKSk7CisKKwljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX2luZGV4X2lkKHNtKSwgb2lkKSA9PSAwKTsKKwljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX2hlYWRfaWQoc20pLCBvaWQpID09IDApOworCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfd2RfaWQoc20pLAorCQkiM2Q5Mzg2YzUwN2Y2YjA5MzQ3MWEzZTMyNDA4NTY1N2EzYzJiNDI0NyIpID09IDApOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV9hZGRlZF9hbmRfdW5jb21taXRlZCIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcygic21fYWRkZWRfYW5kX3VuY29tbWl0ZWQiLCBnaXRfc3VibW9kdWxlX25hbWUoc20pKTsKKworCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfaW5kZXhfaWQoc20pLCBvaWQpID09IDApOworCWNsX2Fzc2VydChnaXRfc3VibW9kdWxlX2hlYWRfaWQoc20pID09IE5VTEwpOworCWNsX2Fzc2VydChnaXRfb2lkX3N0cmVxKGdpdF9zdWJtb2R1bGVfd2RfaWQoc20pLCBvaWQpID09IDApOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV9taXNzaW5nX2NvbW1pdHMiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoInNtX21pc3NpbmdfY29tbWl0cyIsIGdpdF9zdWJtb2R1bGVfbmFtZShzbSkpOworCisJY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV9pbmRleF9pZChzbSksIG9pZCkgPT0gMCk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfc3RyZXEoZ2l0X3N1Ym1vZHVsZV9oZWFkX2lkKHNtKSwgb2lkKSA9PSAwKTsKKwljbF9hc3NlcnQoZ2l0X29pZF9zdHJlcShnaXRfc3VibW9kdWxlX3dkX2lkKHNtKSwKKwkJIjVlNDk2MzU5NWE5Nzc0YjkwNTI0ZDM1YTgwNzE2OTA0OWRlOGNjYWQiKSA9PSAwKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBjb3VudDsKK30gc21fbG9va3VwX2RhdGE7CisKK3N0YXRpYyBpbnQgc21fbG9va3VwX2NiKGdpdF9zdWJtb2R1bGUgKnNtLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwYXlsb2FkKQoreworCXNtX2xvb2t1cF9kYXRhICpkYXRhID0gcGF5bG9hZDsKKwlkYXRhLT5jb3VudCArPSAxOworCWNsX2Fzc2VydF9lcXVhbF9zKGdpdF9zdWJtb2R1bGVfbmFtZShzbSksIG5hbWUpOworCXJldHVybiAwOworfQorCit2b2lkIHRlc3Rfc3VibW9kdWxlX2xvb2t1cF9fZm9yZWFjaCh2b2lkKQoreworCXNtX2xvb2t1cF9kYXRhIGRhdGE7CisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfZm9yZWFjaChnX3JlcG8sIHNtX2xvb2t1cF9jYiwgJmRhdGEpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSg4LCBkYXRhLmNvdW50KTsKK30KKwordm9pZCB0ZXN0X3N1Ym1vZHVsZV9sb29rdXBfX2xvb2t1cF9ldmVuX3dpdGhfdW5ib3JuX2hlYWQodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpoZWFkOworCWdpdF9zdWJtb2R1bGUgKnNtOworCisJLyogcHV0IHVzIG9uIGFuIHVuYm9ybiBicmFuY2ggKi8KKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX3N5bWJvbGljX2NyZWF0ZSgKKwkJJmhlYWQsIGdfcmVwbywgIkhFQUQiLCAicmVmcy9oZWFkcy9nYXJiYWdlIiwgMSkpOworCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKKworCS8qIGxvb2t1cCBleGlzdGluZyAqLworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fdW5jaGFuZ2VkIikpOworCWNsX2Fzc2VydChzbSk7CisKKwkvKiBsb29rdXAgcGVuZGluZyBjaGFuZ2UgaW4gLmdpdG1vZHVsZXMgdGhhdCBpcyBub3QgaW4gSEVBRCAqLworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fYWRkZWRfYW5kX3VuY29tbWl0ZWQiKSk7CisJY2xfYXNzZXJ0KHNtKTsKKworCS8qIGxvb2t1cCBwZW5kaW5nIGNoYW5nZSBpbiAuZ2l0bW9kdWxlcyB0aGF0IGlzIG5laXRoZXIgaW4gSEVBRCBub3IgaW5kZXggKi8KKwljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgInNtX2dpdG1vZHVsZXNfb25seSIpKTsKKwljbF9hc3NlcnQoc20pOworCisJLyogbG9va3VwIGdpdCByZXBvIHN1YmRpciB0aGF0IGlzIG5vdCBhZGRlZCBhcyBzdWJtb2R1bGUgKi8KKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRUVYSVNUUywgZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJub3Qtc3VibW9kdWxlIikpOworCisJLyogbG9va3VwIGV4aXN0aW5nIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBhIHN1Ym1vZHVsZSAqLworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTk9URk9VTkQsIGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAianVzdF9hX2RpciIpKTsKKworCS8qIGxvb2t1cCBleGlzdGluZyBmaWxlIHRoYXQgaXMgbm90IGEgc3VibW9kdWxlICovCisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJqdXN0X2FfZmlsZSIpKTsKKworCS8qIGxvb2t1cCBub24tZXhpc3RlbnQgaXRlbSAqLworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FTk9URk9VTkQsIGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAibm9fc3VjaF9maWxlIikpOworfQorCit2b2lkIHRlc3Rfc3VibW9kdWxlX2xvb2t1cF9fbG9va3VwX2V2ZW5fd2l0aF9taXNzaW5nX2luZGV4KHZvaWQpCit7CisJZ2l0X2luZGV4ICppZHg7CisJZ2l0X3N1Ym1vZHVsZSAqc207CisKKwkvKiBnaXZlIHRoZSByZXBvIGFuIGVtcHR5IGluZGV4ICovCisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X25ldygmaWR4KSk7CisJZ2l0X3JlcG9zaXRvcnlfc2V0X2luZGV4KGdfcmVwbywgaWR4KTsKKwlnaXRfaW5kZXhfZnJlZShpZHgpOworCisJLyogbG9va3VwIGV4aXN0aW5nICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV91bmNoYW5nZWQiKSk7CisJY2xfYXNzZXJ0KHNtKTsKKworCS8qIGxvb2t1cCBwZW5kaW5nIGNoYW5nZSBpbiAuZ2l0bW9kdWxlcyB0aGF0IGlzIG5vdCBpbiBIRUFEICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJzbV9hZGRlZF9hbmRfdW5jb21taXRlZCIpKTsKKwljbF9hc3NlcnQoc20pOworCisJLyogbG9va3VwIHBlbmRpbmcgY2hhbmdlIGluIC5naXRtb2R1bGVzIHRoYXQgaXMgbmVpdGhlciBpbiBIRUFEIG5vciBpbmRleCAqLworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzbSwgZ19yZXBvLCAic21fZ2l0bW9kdWxlc19vbmx5IikpOworCWNsX2Fzc2VydChzbSk7CisKKwkvKiBsb29rdXAgZ2l0IHJlcG8gc3ViZGlyIHRoYXQgaXMgbm90IGFkZGVkIGFzIHN1Ym1vZHVsZSAqLworCWNsX2Fzc2VydF9lcXVhbF9pKEdJVF9FRVhJU1RTLCBnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgIm5vdC1zdWJtb2R1bGUiKSk7CisKKwkvKiBsb29rdXAgZXhpc3RpbmcgZGlyZWN0b3J5IHRoYXQgaXMgbm90IGEgc3VibW9kdWxlICovCisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJqdXN0X2FfZGlyIikpOworCisJLyogbG9va3VwIGV4aXN0aW5nIGZpbGUgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUgKi8KKwljbF9hc3NlcnRfZXF1YWxfaShHSVRfRU5PVEZPVU5ELCBnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIGdfcmVwbywgImp1c3RfYV9maWxlIikpOworCisJLyogbG9va3VwIG5vbi1leGlzdGVudCBpdGVtICovCisJY2xfYXNzZXJ0X2VxdWFsX2koR0lUX0VOT1RGT1VORCwgZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJnNtLCBnX3JlcG8sICJub19zdWNoX2ZpbGUiKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3N1Ym1vZHVsZS9tb2RpZnkuYyBiL3Rlc3RzL3N1Ym1vZHVsZS9tb2RpZnkuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N1Ym1vZHVsZS9tb2RpZnkuYwpyZW5hbWUgdG8gdGVzdHMvc3VibW9kdWxlL21vZGlmeS5jCmluZGV4IDk0ZWIzNzMuLmUzMjYyODcgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvc3VibW9kdWxlL21vZGlmeS5jCisrKyBiL3Rlc3RzL3N1Ym1vZHVsZS9tb2RpZnkuYwpAQCAtMTEsMjAgKzExLDcgQEAKIAogdm9pZCB0ZXN0X3N1Ym1vZHVsZV9tb2RpZnlfX2luaXRpYWxpemUodm9pZCkKIHsKLQlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdWJtb2QyIik7Ci0KLQljbF9maXh0dXJlX3NhbmRib3goInN1Ym1vZDJfdGFyZ2V0Iik7Ci0JcF9yZW5hbWUoInN1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQiLCAic3VibW9kMl90YXJnZXQvLmdpdCIpOwotCi0JLyogbXVzdCBjcmVhdGUgc3VibW9kMl90YXJnZXQgYmVmb3JlIHJld3JpdGUgc28gcHJldHRpZnkgd2lsbCB3b3JrICovCi0JcmV3cml0ZV9naXRtb2R1bGVzKGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoZ19yZXBvKSk7Ci0JcF9yZW5hbWUoInN1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0dGVkIiwgInN1Ym1vZDIvbm90LXN1Ym1vZHVsZS8uZ2l0Iik7Ci19Ci0KLXZvaWQgdGVzdF9zdWJtb2R1bGVfbW9kaWZ5X19jbGVhbnVwKHZvaWQpCi17Ci0JY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwotCWNsX2ZpeHR1cmVfY2xlYW51cCgic3VibW9kMl90YXJnZXQiKTsKKwlnX3JlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKIH0KIAogdm9pZCB0ZXN0X3N1Ym1vZHVsZV9tb2RpZnlfX2FkZCh2b2lkKQpAQCAtMjA0LDEwICsxOTEsMTAgQEAKIAljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX3NldF91cmwoc20xLCBvbGRfdXJsKSk7CiAJY2xfYXNzZXJ0X2VxdWFsX2koCiAJCShpbnQpR0lUX1NVQk1PRFVMRV9JR05PUkVfVU5UUkFDS0VELAotCQkoaW50KWdpdF9zdWJtb2R1bGVfc2V0X2lnbm9yZShzbTEsIEdJVF9TVUJNT0RVTEVfSUdOT1JFX0RFRkFVTFQpKTsKKwkJKGludClnaXRfc3VibW9kdWxlX3NldF9pZ25vcmUoc20xLCBHSVRfU1VCTU9EVUxFX0lHTk9SRV9SRVNFVCkpOwogCWNsX2Fzc2VydF9lcXVhbF9pKAogCQkoaW50KUdJVF9TVUJNT0RVTEVfVVBEQVRFX1JFQkFTRSwKLQkJKGludClnaXRfc3VibW9kdWxlX3NldF91cGRhdGUoc20xLCBHSVRfU1VCTU9EVUxFX1VQREFURV9ERUZBVUxUKSk7CisJCShpbnQpZ2l0X3N1Ym1vZHVsZV9zZXRfdXBkYXRlKHNtMSwgR0lUX1NVQk1PRFVMRV9VUERBVEVfUkVTRVQpKTsKIAljbF9hc3NlcnRfZXF1YWxfaSgKIAkJMSwgZ2l0X3N1Ym1vZHVsZV9zZXRfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzKHNtMSwgb2xkX2ZldGNocmVjdXJzZSkpOwogCkBAIC0yMjgsMTAgKzIxNSwxMCBAQAogCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfc2F2ZShzbTEpKTsKIAogCS8qIGF0dGVtcHQgdG8gInJldmVydCIgdmFsdWVzICovCi0JZ2l0X3N1Ym1vZHVsZV9zZXRfaWdub3JlKHNtMSwgR0lUX1NVQk1PRFVMRV9JR05PUkVfREVGQVVMVCk7Ci0JZ2l0X3N1Ym1vZHVsZV9zZXRfdXBkYXRlKHNtMSwgR0lUX1NVQk1PRFVMRV9VUERBVEVfREVGQVVMVCk7CisJZ2l0X3N1Ym1vZHVsZV9zZXRfaWdub3JlKHNtMSwgR0lUX1NVQk1PRFVMRV9JR05PUkVfUkVTRVQpOworCWdpdF9zdWJtb2R1bGVfc2V0X3VwZGF0ZShzbTEsIEdJVF9TVUJNT0RVTEVfVVBEQVRFX1JFU0VUKTsKIAotCS8qIGJ1dCBpZ25vcmUgYW5kIHVwZGF0ZSBzaG91bGQgTk9UIHJldmVydCBiZWNhdXNlIHRoZSBERUZBVUxUCisJLyogYnV0IGlnbm9yZSBhbmQgdXBkYXRlIHNob3VsZCBOT1QgcmV2ZXJ0IGJlY2F1c2UgdGhlIFJFU0VUCiAJICogc2hvdWxkIG5vdyBiZSB0aGUgbmV3bHkgc2F2ZWQgdmFsdWUuLi4KIAkgKi8KIAljbF9hc3NlcnRfZXF1YWxfaSgKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3VibW9kdWxlL3N0YXR1cy5jIGIvdGVzdHMvc3VibW9kdWxlL3N0YXR1cy5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIHRlc3RzLWNsYXIvc3VibW9kdWxlL3N0YXR1cy5jCnJlbmFtZSB0byB0ZXN0cy9zdWJtb2R1bGUvc3RhdHVzLmMKaW5kZXggNjgxMTBiZC4uZjUxMTFjOCAxMDA2NDQKLS0tIGEvdGVzdHMtY2xhci9zdWJtb2R1bGUvc3RhdHVzLmMKKysrIGIvdGVzdHMvc3VibW9kdWxlL3N0YXR1cy5jCkBAIC05LDIxICs5LDExIEBACiAKIHZvaWQgdGVzdF9zdWJtb2R1bGVfc3RhdHVzX19pbml0aWFsaXplKHZvaWQpCiB7Ci0JZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3VibW9kMiIpOwotCi0JY2xfZml4dHVyZV9zYW5kYm94KCJzdWJtb2QyX3RhcmdldCIpOwotCXBfcmVuYW1lKCJzdWJtb2QyX3RhcmdldC8uZ2l0dGVkIiwgInN1Ym1vZDJfdGFyZ2V0Ly5naXQiKTsKLQotCS8qIG11c3QgY3JlYXRlIHN1Ym1vZDJfdGFyZ2V0IGJlZm9yZSByZXdyaXRlIHNvIHByZXR0aWZ5IHdpbGwgd29yayAqLwotCXJld3JpdGVfZ2l0bW9kdWxlcyhnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGdfcmVwbykpOwotCXBfcmVuYW1lKCJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZCIsICJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdCIpOwotCXBfcmVuYW1lKCJzdWJtb2QyL25vdC8uZ2l0dGVkIiwgInN1Ym1vZDIvbm90Ly5naXQiKTsKKwlnX3JlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKIH0KIAogdm9pZCB0ZXN0X3N1Ym1vZHVsZV9zdGF0dXNfX2NsZWFudXAodm9pZCkKIHsKLQljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Ci0JY2xfZml4dHVyZV9jbGVhbnVwKCJzdWJtb2QyX3RhcmdldCIpOwogfQogCiB2b2lkIHRlc3Rfc3VibW9kdWxlX3N0YXR1c19fdW5jaGFuZ2VkKHZvaWQpCkBAIC0zMjYsNiArMzE2LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAlzaXplX3QgY291bnRlcjsKIAljb25zdCBjaGFyICoqcGF0aHM7CisJaW50ICpzdGF0dXNlczsKIH0gc3VibW9kdWxlX2V4cGVjdGF0aW9uczsKIAogc3RhdGljIGludCBjb25maXJtX3N1Ym1vZHVsZV9zdGF0dXMoCkBAIC0zMzYsNiArMzI3LDcgQEAKIAl3aGlsZSAoZ2l0X19zdWZmaXhjbXAoZXhwLT5wYXRoc1tleHAtPmNvdW50ZXJdLCAiLyIpID09IDApCiAJCWV4cC0+Y291bnRlcisrOwogCisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwLT5zdGF0dXNlc1tleHAtPmNvdW50ZXJdLCAoaW50KXN0YXR1c19mbGFncyk7CiAJY2xfYXNzZXJ0X2VxdWFsX3MoZXhwLT5wYXRoc1tleHAtPmNvdW50ZXIrK10sIHBhdGgpOwogCiAJR0lUX1VOVVNFRChzdGF0dXNfZmxhZ3MpOwpAQCAtMzY1LDcgKzM1NywyNCBAQAogCQkic21fdW5jaGFuZ2VkIiwKIAkJTlVMTAogCX07Ci0Jc3VibW9kdWxlX2V4cGVjdGF0aW9ucyBleHAgPSB7IDAsIGV4cGVjdGVkIH07CisJc3RhdGljIGludCBleHBlY3RlZF9mbGFnc1tdID0geworCQlHSVRfU1RBVFVTX0lOREVYX01PRElGSUVEIHwgR0lUX1NUQVRVU19XVF9NT0RJRklFRCwgLyogIi5naXRtb2R1bGVzIiAqLworCQkwLAkJCQkJICAgIC8qICJqdXN0X2FfZGlyLyIgd2lsbCBiZSBza2lwcGVkICovCisJCUdJVF9TVEFUVVNfQ1VSUkVOVCwgICAgIC8qICJqdXN0X2FfZGlyL2NvbnRlbnRzIiAqLworCQlHSVRfU1RBVFVTX0NVUlJFTlQsCSAgICAvKiAianVzdF9hX2ZpbGUiICovCisJCUdJVF9TVEFUVVNfSUdOT1JFRCwJICAgIC8qICJub3QiIChjb250YWlucyAuZ2l0KSAqLworCQlHSVRfU1RBVFVTX0lHTk9SRUQsICAgICAvKiAibm90LXN1Ym1vZHVsZSIgKGNvbnRhaW5zIC5naXQpICovCisJCUdJVF9TVEFUVVNfQ1VSUkVOVCwgICAgIC8qICJSRUFETUUudHh0ICovCisJCUdJVF9TVEFUVVNfSU5ERVhfTkVXLCAgIC8qICJzbV9hZGRlZF9hbmRfdW5jb21taXRlZCIgKi8KKwkJR0lUX1NUQVRVU19XVF9NT0RJRklFRCwgLyogInNtX2NoYW5nZWRfZmlsZSIgKi8KKwkJR0lUX1NUQVRVU19XVF9NT0RJRklFRCwgLyogInNtX2NoYW5nZWRfaGVhZCIgKi8KKwkJR0lUX1NUQVRVU19XVF9NT0RJRklFRCwgLyogInNtX2NoYW5nZWRfaW5kZXgiICovCisJCUdJVF9TVEFUVVNfV1RfTU9ESUZJRUQsIC8qICJzbV9jaGFuZ2VkX3VudHJhY2tlZF9maWxlIiAqLworCQlHSVRfU1RBVFVTX1dUX01PRElGSUVELCAvKiAic21fbWlzc2luZ19jb21taXRzIiAqLworCQlHSVRfU1RBVFVTX0NVUlJFTlQsICAgICAvKiAic21fdW5jaGFuZ2VkIiAqLworCQkwCisJfTsKKwlzdWJtb2R1bGVfZXhwZWN0YXRpb25zIGV4cCA9IHsgMCwgZXhwZWN0ZWQsIGV4cGVjdGVkX2ZsYWdzIH07CiAJZ2l0X3N0YXR1c19vcHRpb25zIG9wdHMgPSBHSVRfU1RBVFVTX09QVElPTlNfSU5JVDsKIAogCWNsX2dpdF9wYXNzKGdpdF9pdGVyYXRvcl9mb3Jfd29ya2RpcigmaXRlciwgZ19yZXBvLApAQCAtMzc4LDcgKzM4Nyw5IEBACiAKIAlvcHRzLmZsYWdzID0gR0lUX1NUQVRVU19PUFRfSU5DTFVERV9VTlRSQUNLRUQgfAogCQlHSVRfU1RBVFVTX09QVF9JTkNMVURFX1VOTU9ESUZJRUQgfAotCQlHSVRfU1RBVFVTX09QVF9SRUNVUlNFX1VOVFJBQ0tFRF9ESVJTOworCQlHSVRfU1RBVFVTX09QVF9JTkNMVURFX0lHTk9SRUQgfAorCQlHSVRfU1RBVFVTX09QVF9SRUNVUlNFX1VOVFJBQ0tFRF9ESVJTIHwKKwkJR0lUX1NUQVRVU19PUFRfU09SVF9DQVNFX0lOU0VOU0lUSVZFTFk7CiAKIAljbF9naXRfcGFzcyhnaXRfc3RhdHVzX2ZvcmVhY2hfZXh0KAogCQlnX3JlcG8sICZvcHRzLCBjb25maXJtX3N1Ym1vZHVsZV9zdGF0dXMsICZleHApKTsKZGlmZiAtLWdpdCBhL3Rlc3RzLWNsYXIvc3VibW9kdWxlL3N1Ym1vZHVsZV9oZWxwZXJzLmMgYi90ZXN0cy9zdWJtb2R1bGUvc3VibW9kdWxlX2hlbHBlcnMuYwpzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5jCnJlbmFtZSB0byB0ZXN0cy9zdWJtb2R1bGUvc3VibW9kdWxlX2hlbHBlcnMuYwppbmRleCAwYzNlNzlmLi5kNTc1MDY3IDEwMDY0NAotLS0gYS90ZXN0cy1jbGFyL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5jCisrKyBiL3Rlc3RzL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJwb3NpeC5oIgogI2luY2x1ZGUgInN1Ym1vZHVsZV9oZWxwZXJzLmgiCisjaW5jbHVkZSAiZ2l0Mi9zeXMvcmVwb3NpdG9yeS5oIgogCiAvKiByZXdyaXRlIGdpdG1vZHVsZXMgLT4gLmdpdG1vZHVsZXMKICAqIHJld3JpdGUgdGhlIGVtcHR5IG9yIHJlbGF0aXZlIHVybHMgaW5zaWRlIGVhY2ggbW9kdWxlCkBAIC04MiwzICs4Myw0NSBAQAogCWdpdF9idWZfZnJlZSgmb3V0X2YpOwogCWdpdF9idWZfZnJlZSgmcGF0aCk7CiB9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfZml4dHVyZV9zdWJtb2R1bGVzKHZvaWQgKnBheWxvYWQpCit7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOyAvKiBlaXRoZXIgInN1Ym1vZHVsZXMiIG9yICJzdWJtb2QyIiAqLworCisJaWYgKHBheWxvYWQpCisJCWNsX2ZpeHR1cmVfY2xlYW51cChwYXlsb2FkKTsKK30KKworZ2l0X3JlcG9zaXRvcnkgKnNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcyh2b2lkKQoreworCWdpdF9yZXBvc2l0b3J5ICpyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgic3VibW9kdWxlcyIpOworCisJY2xfZml4dHVyZV9zYW5kYm94KCJ0ZXN0cmVwby5naXQiKTsKKworCXJld3JpdGVfZ2l0bW9kdWxlcyhnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pKTsKKwlwX3JlbmFtZSgic3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkIiwgInN1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdCIpOworCisJY2xfc2V0X2NsZWFudXAoY2xlYW51cF9maXh0dXJlX3N1Ym1vZHVsZXMsICJ0ZXN0cmVwby5naXQiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3JlaW5pdF9maWxlc3lzdGVtKHJlcG8sIDEpKTsKKworCXJldHVybiByZXBvOworfQorCitnaXRfcmVwb3NpdG9yeSAqc2V0dXBfZml4dHVyZV9zdWJtb2QyKHZvaWQpCit7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJzdWJtb2QyIik7CisKKwljbF9maXh0dXJlX3NhbmRib3goInN1Ym1vZDJfdGFyZ2V0Iik7CisJcF9yZW5hbWUoInN1Ym1vZDJfdGFyZ2V0Ly5naXR0ZWQiLCAic3VibW9kMl90YXJnZXQvLmdpdCIpOworCisJcmV3cml0ZV9naXRtb2R1bGVzKGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbykpOworCXBfcmVuYW1lKCJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdHRlZCIsICJzdWJtb2QyL25vdC1zdWJtb2R1bGUvLmdpdCIpOworCXBfcmVuYW1lKCJzdWJtb2QyL25vdC8uZ2l0dGVkIiwgInN1Ym1vZDIvbm90Ly5naXQiKTsKKworCWNsX3NldF9jbGVhbnVwKGNsZWFudXBfZml4dHVyZV9zdWJtb2R1bGVzLCAic3VibW9kMl90YXJnZXQiKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3JlaW5pdF9maWxlc3lzdGVtKHJlcG8sIDEpKTsKKworCXJldHVybiByZXBvOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3VibW9kdWxlL3N1Ym1vZHVsZV9oZWxwZXJzLmggYi90ZXN0cy9zdWJtb2R1bGUvc3VibW9kdWxlX2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTBjNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3VibW9kdWxlL3N1Ym1vZHVsZV9oZWxwZXJzLmgKQEAgLTAsMCArMSw1IEBACitleHRlcm4gdm9pZCByZXdyaXRlX2dpdG1vZHVsZXMoY29uc3QgY2hhciAqd29ya2Rpcik7CisKKy8qIHRoZXNlIHdpbGwgYXV0b21hdGljYWxseSBzZXQgYSBjbGVhbnVwIGNhbGxiYWNrICovCitleHRlcm4gZ2l0X3JlcG9zaXRvcnkgKnNldHVwX2ZpeHR1cmVfc3VibW9kdWxlcyh2b2lkKTsKK2V4dGVybiBnaXRfcmVwb3NpdG9yeSAqc2V0dXBfZml4dHVyZV9zdWJtb2QyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvdGhyZWFkcy9iYXNpYy5jIGIvdGVzdHMvdGhyZWFkcy9iYXNpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjllZTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90aHJlYWRzL2Jhc2ljLmMKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorCisjaW5jbHVkZSAiY2FjaGUuaCIKKworCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfcmVwbzsKKwordm9pZCB0ZXN0X3RocmVhZHNfYmFzaWNfX2luaXRpYWxpemUodm9pZCkKK3sKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJ0ZXN0cmVwbyIpOworfQorCit2b2lkIHRlc3RfdGhyZWFkc19iYXNpY19fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKworCit2b2lkIHRlc3RfdGhyZWFkc19iYXNpY19fY2FjaGUodm9pZCkKK3sKKwkvLyBydW4gc2V2ZXJhbCB0aHJlYWRzIHBvbGxpbmcgdGhlIGNhY2hlIGF0IHRoZSBzYW1lIHRpbWUKKwljbF9hc3NlcnQoMSA9PSAxKTsKK30KKwordm9pZCB0ZXN0X3RocmVhZHNfYmFzaWNfX211bHRpcGxlX2luaXQodm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqbmVzdGVkX3JlcG87CisKKwlnaXRfdGhyZWFkc19pbml0KCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmbmVzdGVkX3JlcG8sIGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKSk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShuZXN0ZWRfcmVwbyk7CisKKwlnaXRfdGhyZWFkc19zaHV0ZG93bigpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJm5lc3RlZF9yZXBvLCBjbF9maXh0dXJlKCJ0ZXN0cmVwby5naXQiKSkpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUobmVzdGVkX3JlcG8pOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdGhyZWFkcy9yZWZkYi5jIGIvdGVzdHMvdGhyZWFkcy9yZWZkYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNjUxZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90aHJlYWRzL3JlZmRiLmMKQEAgLTAsMCArMSwyMTMgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJnaXQyL3JlZmRiLmgiCisjaW5jbHVkZSAicmVmZGIuaCIKKworc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87CitzdGF0aWMgaW50IGdfZXhwZWN0ZWQgPSAwOworCit2b2lkIHRlc3RfdGhyZWFkc19yZWZkYl9faW5pdGlhbGl6ZSh2b2lkKQoreworCWdfcmVwbyA9IE5VTEw7Cit9CisKK3ZvaWQgdGVzdF90aHJlYWRzX3JlZmRiX19jbGVhbnVwKHZvaWQpCit7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworCWdfcmVwbyA9IE5VTEw7Cit9CisKKyNkZWZpbmUgUkVQRUFUIDIwCisjZGVmaW5lIFRIUkVBRFMgMjAKKworc3RhdGljIHZvaWQgKml0ZXJhdGVfcmVmcyh2b2lkICphcmcpCit7CisJZ2l0X3JlZmVyZW5jZV9pdGVyYXRvciAqaTsKKwlnaXRfcmVmZXJlbmNlICpyZWY7CisJaW50IGNvdW50ID0gMDsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfaXRlcmF0b3JfbmV3KCZpLCBnX3JlcG8pKTsKKworCWZvciAoY291bnQgPSAwOyAhZ2l0X3JlZmVyZW5jZV9uZXh0KCZyZWYsIGkpOyArK2NvdW50KSB7CisJCWNsX2Fzc2VydChyZWYgIT0gTlVMTCk7CisJCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworCX0KKworCWlmIChnX2V4cGVjdGVkID4gMCkKKwkJY2xfYXNzZXJ0X2VxdWFsX2koZ19leHBlY3RlZCwgY291bnQpOworCisJZ2l0X3JlZmVyZW5jZV9pdGVyYXRvcl9mcmVlKGkpOworCisJcmV0dXJuIGFyZzsKK30KKwordm9pZCB0ZXN0X3RocmVhZHNfcmVmZGJfX2l0ZXJhdG9yKHZvaWQpCit7CisJaW50IHIsIHQ7CisJZ2l0X3RocmVhZCB0aFtUSFJFQURTXTsKKwlpbnQgaWRbVEhSRUFEU107CisJZ2l0X29pZCBoZWFkOworCWdpdF9yZWZlcmVuY2UgKnJlZjsKKwljaGFyIG5hbWVbMTI4XTsKKwlnaXRfcmVmZGIgKnJlZmRiOworCisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8yIik7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJmhlYWQsIGdfcmVwbywgIkhFQUQiKSk7CisKKwkvKiBtYWtlIGEgYnVuY2ggb2YgcmVmZXJlbmNlcyAqLworCisJZm9yIChyID0gMDsgciA8IDIwMDsgKytyKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJlZnMvaGVhZHMvZGlyZWN0LSUwM2QiLCByKTsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9jcmVhdGUoJnJlZiwgZ19yZXBvLCBuYW1lLCAmaGVhZCwgMCkpOworCQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKKwl9CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9yZWZkYigmcmVmZGIsIGdfcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZkYl9jb21wcmVzcyhyZWZkYikpOworCWdpdF9yZWZkYl9mcmVlKHJlZmRiKTsKKworCWdfZXhwZWN0ZWQgPSAyMDY7CisKKwlmb3IgKHIgPSAwOyByIDwgUkVQRUFUOyArK3IpIHsKKwkJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfcmVvcGVuKCk7IC8qIHJlb3BlbiB0byBmbHVzaCBjYWNoZXMgKi8KKworCQlmb3IgKHQgPSAwOyB0IDwgVEhSRUFEUzsgKyt0KSB7CisJCQlpZFt0XSA9IHQ7CisjaWZkZWYgR0lUX1RIUkVBRFMKKwkJCWNsX2dpdF9wYXNzKGdpdF90aHJlYWRfY3JlYXRlKCZ0aFt0XSwgTlVMTCwgaXRlcmF0ZV9yZWZzLCAmaWRbdF0pKTsKKyNlbHNlCisJCQl0aFt0XSA9IHQ7CisJCQlpdGVyYXRlX3JlZnMoJmlkW3RdKTsKKyNlbmRpZgorCQl9CisKKyNpZmRlZiBHSVRfVEhSRUFEUworCQlmb3IgKHQgPSAwOyB0IDwgVEhSRUFEUzsgKyt0KSB7CisJCQljbF9naXRfcGFzcyhnaXRfdGhyZWFkX2pvaW4odGhbdF0sIE5VTEwpKTsKKwkJfQorI2VuZGlmCisKKwkJbWVtc2V0KHRoLCAwLCBzaXplb2YodGgpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkICpjcmVhdGVfcmVmcyh2b2lkICphcmcpCit7CisJaW50ICppZCA9IGFyZywgaTsKKwlnaXRfb2lkIGhlYWQ7CisJY2hhciBuYW1lWzEyOF07CisJZ2l0X3JlZmVyZW5jZSAqcmVmWzEwXTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbmFtZV90b19pZCgmaGVhZCwgZ19yZXBvLCAiSEVBRCIpKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJlZnMvaGVhZHMvdGhyZWFkLSUwM2QtJTAyZCIsICppZCwgaSk7CisJCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfY3JlYXRlKCZyZWZbaV0sIGdfcmVwbywgbmFtZSwgJmhlYWQsIDApKTsKKworCQlpZiAoaSA9PSA1KSB7CisJCQlnaXRfcmVmZGIgKnJlZmRiOworCQkJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfcmVmZGIoJnJlZmRiLCBnX3JlcG8pKTsKKwkJCWNsX2dpdF9wYXNzKGdpdF9yZWZkYl9jb21wcmVzcyhyZWZkYikpOworCQkJZ2l0X3JlZmRiX2ZyZWUocmVmZGIpOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpCisJCWdpdF9yZWZlcmVuY2VfZnJlZShyZWZbaV0pOworCisJcmV0dXJuIGFyZzsKK30KKworc3RhdGljIHZvaWQgKmRlbGV0ZV9yZWZzKHZvaWQgKmFyZykKK3sKKwlpbnQgKmlkID0gYXJnLCBpOworCWdpdF9yZWZlcmVuY2UgKnJlZjsKKwljaGFyIG5hbWVbMTI4XTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCXNucHJpbnRmKAorCQkJbmFtZSwgc2l6ZW9mKG5hbWUpLCAicmVmcy9oZWFkcy90aHJlYWQtJTAzZC0lMDJkIiwgKCppZCkgJiB+MHgzLCBpKTsKKworCQlpZiAoIWdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIGdfcmVwbywgbmFtZSkpIHsKKwkJCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfZGVsZXRlKHJlZikpOworCQkJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisJCX0KKworCQlpZiAoaSA9PSA1KSB7CisJCQlnaXRfcmVmZGIgKnJlZmRiOworCQkJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfcmVmZGIoJnJlZmRiLCBnX3JlcG8pKTsKKwkJCWNsX2dpdF9wYXNzKGdpdF9yZWZkYl9jb21wcmVzcyhyZWZkYikpOworCQkJZ2l0X3JlZmRiX2ZyZWUocmVmZGIpOworCQl9CisJfQorCisJcmV0dXJuIGFyZzsKK30KKwordm9pZCB0ZXN0X3RocmVhZHNfcmVmZGJfX2VkaXRfd2hpbGVfaXRlcmF0ZSh2b2lkKQoreworCWludCByLCB0OworCWludCBpZFtUSFJFQURTXTsKKwlnaXRfb2lkIGhlYWQ7CisJZ2l0X3JlZmVyZW5jZSAqcmVmOworCWNoYXIgbmFtZVsxMjhdOworCWdpdF9yZWZkYiAqcmVmZGI7CisKKyNpZmRlZiBHSVRfVEhSRUFEUworCWdpdF90aHJlYWQgdGhbVEhSRUFEU107CisjZW5kaWYKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvMiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9uYW1lX3RvX2lkKCZoZWFkLCBnX3JlcG8sICJIRUFEIikpOworCisJLyogbWFrZSBhIGJ1bmNoIG9mIHJlZmVyZW5jZXMgKi8KKworCWZvciAociA9IDA7IHIgPCA1MDsgKytyKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJlZnMvaGVhZHMvc3RhcnRlci0lMDNkIiwgcik7CisJCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfY3JlYXRlKCZyZWYsIGdfcmVwbywgbmFtZSwgJmhlYWQsIDApKTsKKwkJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisJfQorCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfcmVmZGIoJnJlZmRiLCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZGJfY29tcHJlc3MocmVmZGIpKTsKKwlnaXRfcmVmZGJfZnJlZShyZWZkYik7CisKKwlnX2V4cGVjdGVkID0gLTE7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9yZW9wZW4oKTsgLyogcmVvcGVuIHRvIGZsdXNoIGNhY2hlcyAqLworCisJZm9yICh0ID0gMDsgdCA8IFRIUkVBRFM7ICsrdCkgeworCQl2b2lkICooKmZuKSh2b2lkICphcmcpOworCisJCXN3aXRjaCAodCAmIDB4MykgeworCQljYXNlIDA6ICBmbiA9IGNyZWF0ZV9yZWZzOyAgYnJlYWs7CisJCWNhc2UgMTogIGZuID0gZGVsZXRlX3JlZnM7ICBicmVhazsKKwkJZGVmYXVsdDogZm4gPSBpdGVyYXRlX3JlZnM7IGJyZWFrOworCQl9CisKKwkJaWRbdF0gPSB0OworI2lmZGVmIEdJVF9USFJFQURTCisJCWNsX2dpdF9wYXNzKGdpdF90aHJlYWRfY3JlYXRlKCZ0aFt0XSwgTlVMTCwgZm4sICZpZFt0XSkpOworI2Vsc2UKKwkJZm4oJmlkW3RdKTsKKyNlbmRpZgorCX0KKworI2lmZGVmIEdJVF9USFJFQURTCisJZm9yICh0ID0gMDsgdCA8IFRIUkVBRFM7ICsrdCkgeworCQljbF9naXRfcGFzcyhnaXRfdGhyZWFkX2pvaW4odGhbdF0sIE5VTEwpKTsKKwl9CisKKwltZW1zZXQodGgsIDAsIHNpemVvZih0aCkpOworCisJZm9yICh0ID0gMDsgdCA8IFRIUkVBRFM7ICsrdCkgeworCQlpZFt0XSA9IHQ7CisJCWNsX2dpdF9wYXNzKGdpdF90aHJlYWRfY3JlYXRlKCZ0aFt0XSwgTlVMTCwgaXRlcmF0ZV9yZWZzLCAmaWRbdF0pKTsKKwl9CisKKwlmb3IgKHQgPSAwOyB0IDwgVEhSRUFEUzsgKyt0KSB7CisJCWNsX2dpdF9wYXNzKGdpdF90aHJlYWRfam9pbih0aFt0XSwgTlVMTCkpOworCX0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdHMtY2xhci90cmFjZS90cmFjZS5jIGIvdGVzdHMvdHJhY2UvdHJhY2UuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdHMtY2xhci90cmFjZS90cmFjZS5jCnJlbmFtZSB0byB0ZXN0cy90cmFjZS90cmFjZS5jCmRpZmYgLS1naXQgYS90ZXN0cy1jbGFyL3ZhbGdyaW5kLXN1cHAtbWFjLnR4dCBiL3Rlc3RzL3ZhbGdyaW5kLXN1cHAtbWFjLnR4dApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSB0ZXN0cy1jbGFyL3ZhbGdyaW5kLXN1cHAtbWFjLnR4dApyZW5hbWUgdG8gdGVzdHMvdmFsZ3JpbmQtc3VwcC1tYWMudHh0CmluZGV4IGZjYzdlZGUuLjk5ODMzZDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzLWNsYXIvdmFsZ3JpbmQtc3VwcC1tYWMudHh0CisrKyBiL3Rlc3RzL3ZhbGdyaW5kLXN1cHAtbWFjLnR4dApAQCAtMTU0LDMgKzE1NCwzMSBAQAogCWZ1bjpwcmludGYKIAlmdW46Y2xhcl9wcmludF9pbml0CiB9Cit7CisJbW9sby0xCisJTWVtY2hlY2s6TGVhaworCWZ1bjptYWxsb2Nfem9uZV9tYWxsb2MKKwkuLi4KKwlmdW46X29iamNfaW5pdAorfQoreworCW1vbG8tMgorCU1lbWNoZWNrOkxlYWsKKwlmdW46bWFsbG9jX3pvbmVfY2FsbG9jCisJLi4uCisJZnVuOl9vYmpjX2luaXQKK30KK3sKKwltb2xvLTMKKwlNZW1jaGVjazpMZWFrCisJZnVuOm1hbGxvYworCS4uLgorCWZ1bjpfb2JqY19pbml0Cit9Cit7CisJbW9sby00CisJTWVtY2hlY2s6TGVhaworCWZ1bjptYWxsb2MKKwkuLi4KKwlmdW46ZHlsZF9yZWdpc3Rlcl9pbWFnZV9zdGF0ZV9jaGFuZ2VfaGFuZGxlcgorfQo=