IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBSaWdodHMgZm9yIHJlZGlzdHJpYnV0aW9uIGFuZCB1c2FnZSBpbiBzb3VyY2UgYW5kIGJpbmFyeQojIGZvcm1zIGFyZSBncmFudGVkIGFjY29yZGluZyB0byB0aGUgT3BlblNTTCBsaWNlbnNlLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMKIyBWZXJzaW9uIDMuNi4KIwojIFlvdSBtaWdodCBmYWlsIHRvIGFwcHJlY2lhdGUgdGhpcyBtb2R1bGUgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZmlyc3QKIyB0cnkuIElmIGNvbXBhcmVkIHRvICJ2YW5pbGxhIiBsaW51eC1pYTMyLWljYyB0YXJnZXQsIGkuZS4gY29uc2lkZXJlZAojIHRvIGJlICp0aGUqIGJlc3QgSW50ZWwgQyBjb21waWxlciB3aXRob3V0IC1LUElDLCBwZXJmb3JtYW5jZSBhcHBlYXJzCiMgdG8gYmUgdmlydHVhbGx5IGlkZW50aWNhbC4uLiBCdXQgdHJ5IHRvIHJlLWNvbmZpZ3VyZSB3aXRoIHNoYXJlZAojIGxpYnJhcnkgc3VwcG9ydC4uLiBBaGEhIEludGVsIGNvbXBpbGVyICJzdWRkZW5seSIgbGFncyBiZWhpbmQgYnkgMzAlCiMgW29uIFA0LCBtb3JlIG9uIG90aGVyc106LSkgQW5kIGlmIGNvbXBhcmVkIHRvIHBvc2l0aW9uLWluZGVwZW5kZW50CiMgY29kZSBnZW5lcmF0ZWQgYnkgR05VIEMsIHRoaXMgY29kZSBwZXJmb3JtcyAqbW9yZSogdGhhbiAqdHdpY2UqIGFzCiMgZmFzdCEgWWVzLCBhbGwgdGhpcyBidXp6IGFib3V0IFBJQyBtZWFucyB0aGF0IHVubGlrZSBvdGhlciBoYW5kLQojIGNvZGVkIGltcGxlbWVudGF0aW9ucywgdGhpcyBvbmUgd2FzIGV4cGxpY2l0bHkgZGVzaWduZWQgdG8gYmUgc2FmZQojIHRvIHVzZSBldmVuIGluIHNoYXJlZCBsaWJyYXJ5IGNvbnRleHQuLi4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhpcwojIGNvZGUgaXNuJ3QgbmVjZXNzYXJpbHkgYWJzb2x1dGVseSBmYXN0ZXN0ICJldmVyLCIgYmVjYXVzZSBpbiBvcmRlcgojIHRvIGFjaGlldmUgcG9zaXRpb24gaW5kZXBlbmRlbmNlIGFuIGV4dHJhIHJlZ2lzdGVyIGhhcyB0byBiZQojIG9mZi1sb2FkZWQgdG8gc3RhY2ssIHdoaWNoIGFmZmVjdHMgdGhlIGJlbmNobWFyayByZXN1bHQuCiMKIyBTcGVjaWFsIG5vdGUgYWJvdXQgaW5zdHJ1Y3Rpb24gY2hvaWNlLiBEbyB5b3UgcmVjYWxsIFJDNF9JTlQgY29kZQojIHBlcmZvcm1pbmcgcG9vcmx5IG9uIFA0PyBJdCBtaWdodCBiZSB0aGUgdGltZSB0byBmaWd1cmUgb3V0IHdoeS4KIyBSQzRfSU5UIGNvZGUgaW1wbGllcyBlZmZlY3RpdmUgYWRkcmVzcyBjYWxjdWxhdGlvbnMgaW4gYmFzZStvZmZzZXQqNAojIGZvcm0uIFRyb3VibGUgaXMgdGhhdCBpdCBzZWVtcyB0aGF0IG9mZnNldCBzY2FsaW5nIHR1cm5lZCB0byBiZQojIGNyaXRpY2FsIHBhdGguLi4gQXQgbGVhc3QgZWxpbWluYXRpbmcgc2NhbGluZyByZXN1bHRlZCBpbiAyLjh4IFJDNAojIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IFthcyB5b3UgbWlnaHQgcmVjYWxsXS4gQXMgQUVTIGNvZGUgaXMgaHVuZ3J5CiMgZm9yIHNjYWxpbmcgdG9vLCBJIFt0cnkgdG9dIGF2b2lkIHRoZSBsYXR0ZXIgYnkgZmF2b3Jpbmcgb2ZmLWJ5LTIKIyBzaGlmdHMgYW5kIG1hc2tpbmcgdGhlIHJlc3VsdCB3aXRoIDB4RkY8PDIgaW5zdGVhZCBvZiAiYm9yaW5nIiAweEZGLgojCiMgQXMgd2FzIHNob3duIGJ5IERlYW4gR2F1ZGV0IDxkZWFuQGFyY3RpYy5vcmc+LCB0aGUgYWJvdmUgbm90ZSB0dXJuZWQKIyB2b2lkLiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3aXRoIG9mZi1ieS0yIHNoaWZ0cyB3YXMgb2JzZXJ2ZWQgb24KIyBpbnRlcm1lZGlhdGUgaW1wbGVtZW50YXRpb24sIHdoaWNoIHdhcyBzcGlsbGluZyB5ZXQgYW5vdGhlciByZWdpc3RlcgojIHRvIHN0YWNrLi4uIEZpbmFsIG9mZnNldCo0IGNvZGUgYmVsb3cgcnVucyBqdXN0IGEgdGFkIGZhc3RlciBvbiBQNCwKIyBidXQgZXhoaWJpdHMgdXAgdG8gMTAlIGltcHJvdmVtZW50IG9uIG90aGVyIGNvcmVzLgojCiMgU2Vjb25kIHZlcnNpb24gaXMgIm1vbm9saXRoaWMiIHJlcGxhY2VtZW50IGZvciBhZXNfY29yZS5jLCB3aGljaCBpbgojIGFkZGl0aW9uIHRvIEFFU19bZGV8ZW5dY3J5cHQgaW1wbGVtZW50cyBBRVNfc2V0X1tkZXxlbl1jcnlwdGlvbl9rZXkuCiMgVGhpcyBtYWRlIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsaXR0bGUtZW5kaWFuIHZhcmlhbnQgb2YgdGhlCiMgYWxnb3JpdGhtIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBiYXNlIEMgY29kZS4gTW90aXZhdGluZyBmYWN0b3IgZm9yCiMgdGhlIHVuZGVydGFrZW4gZWZmb3J0IHdhcyB0aGF0IGl0IGFwcGVhcmVkIHRoYXQgaW4gdGlnaHQgSUEtMzIKIyByZWdpc3RlciB3aW5kb3cgbGl0dGxlLWVuZGlhbiBmbGF2b3IgY291bGQgYWNoaWV2ZSBzbGlnaHRseSBoaWdoZXIKIyBJbnN0cnVjdGlvbiBMZXZlbCBQYXJhbGxlbGlzbSwgYW5kIGl0IGluZGVlZCByZXN1bHRlZCBpbiB1cCB0byAxNSUKIyBiZXR0ZXIgcGVyZm9ybWFuY2Ugb24gbW9zdCByZWNlbnQgtS1hcmNocy4uLgojCiMgVGhpcmQgdmVyc2lvbiBhZGRzIEFFU19jYmNfZW5jcnlwdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggcmVzdWx0ZWQgaW4KIyB1cCB0byA0MCUgcGVyZm9ybWFuY2UgaW1yb3ZlbWVudCBvZiBDQkMgYmVuY2htYXJrIHJlc3VsdHMuIDQwJSB3YXMKIyBvYnNlcnZlZCBvbiBQNCBjb3JlLCB3aGVyZSAib3ZlcmFsbCIgaW1yb3ZlbWVudCBjb2VmZmljaWVudCwgaS5lLiBpZgojIGNvbXBhcmVkIHRvIFBJQyBnZW5lcmF0ZWQgYnkgR0NDIGFuZCBpbiBDQkMgbW9kZSwgd2FzIG9ic2VydmVkIHRvIGJlCiMgYXMgbGFyZ2UgYXMgNHg6LSkgQ0JDIHBlcmZvcm1hbmNlIGlzIHZpcnR1YWxseSBpZGVudGljYWwgdG8gRUNCIG5vdwojIGFuZCBvbiBzb21lIHBsYXRmb3JtcyBldmVuIGJldHRlciwgZS5nLiAxNy42ICJzbWFsbCIgY3ljbGVzL2J5dGUgb24KIyBPcHRlcm9uLCBiZWNhdXNlIGNlcnRhaW4gZnVuY3Rpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMgYXJlCiMgZWZmZWN0aXZlbHkgdGFrZW4gb3V0IG9mIHRoZSBsb29wLi4uCiMKIyBWZXJzaW9uIDMuMiBpbXBsZW1lbnRzIGNvbXByZXNzZWQgdGFibGVzIGFuZCBwcmVmZXRjaCBvZiB0aGVzZSB0YWJsZXMKIyBpbiBDQkNbIV0gbW9kZS4gRm9ybWVyIG1lYW5zIHRoYXQgMy80IG9mIHRhYmxlIHJlZmVyZW5jZXMgYXJlIG5vdwojIG1pc2FsaWduZWQsIHdoaWNoIHVuZm9ydHVuYXRlbHkgaGFzIG5lZ2F0aXZlIGltcGFjdCBvbiBlbGRlciBJQS0zMgojIGltcGxlbWVudGF0aW9ucywgUGVudGl1bSBzdWZmZXJlZCAzMCUgcGVuYWx0eSwgUElJSSAtIDEwJS4KIwojIFZlcnNpb24gMy4zIGF2b2lkcyBMMSBjYWNoZSBhbGlhc2luZyBiZXR3ZWVuIHN0YWNrIGZyYW1lIGFuZAojIFMtYm94ZXMsIGFuZCAzLjQgLSBMMSBjYWNoZSBhbGlhc2luZyBldmVuIGJldHdlZW4ga2V5IHNjaGVkdWxlLiBUaGUKIyBsYXR0ZXIgaXMgYWNoaWV2ZWQgYnkgY29weWluZyB0aGUga2V5IHNjaGVkdWxlIHRvIGNvbnRyb2xsZWQgcGxhY2UgaW4KIyBzdGFjay4gVGhpcyB1bmZvcnR1bmF0ZWx5IGhhcyByYXRoZXIgc3Ryb25nIGltcGFjdCBvbiBzbWFsbCBibG9jayBDQkMKIyBwZXJmb3JtYW5jZSwgfjJ4IGRldGVyaW9yYXRpb24gb24gMTYtYnl0ZSBibG9jayBpZiBjb21wYXJlZCB0byAzLjMuCiMKIyBWZXJzaW9uIDMuNSBjaGVja3MgaWYgdGhlcmUgaXMgTDEgY2FjaGUgYWxpYXNpbmcgYmV0d2VlbiB1c2VyLXN1cHBsaWVkCiMga2V5IHNjaGVkdWxlIGFuZCBTLWJveGVzIGFuZCBhYnN0YWlucyBmcm9tIGNvcHlpbmcgdGhlIGZvcm1lciBpZgojIHRoZXJlIGlzIG5vLiBUaGlzIGFsbG93cyBlbmQtdXNlciB0byBjb25zY2lvdXNseSByZXRhaW4gc21hbGwgYmxvY2sKIyBwZXJmb3JtYW5jZSBieSBhbGlnbmluZyBrZXkgc2NoZWR1bGUgaW4gc3BlY2lmaWMgbWFubmVyLgojCiMgVmVyc2lvbiAzLjYgY29tcHJlc3NlcyBUZDQgdG8gMjU2IGJ5dGVzIGFuZCBwcmVmZXRjaGVzIGl0IGluIEVDQi4KIwojIEN1cnJlbnQgRUNCIHBlcmZvcm1hbmNlIG51bWJlcnMgZm9yIDEyOC1iaXQga2V5IGluIENQVSBjeWNsZXMgcGVyCiMgcHJvY2Vzc2VkIGJ5dGUgW21lYXN1cmUgY29tbW9ubHkgdXNlZCBieSBBRVMgYmVuY2htYXJrZXJzXSBhcmU6CiMKIwkJc21hbGwgZm9vdHByaW50CQlmdWxseSB1bnJvbGxlZAojIFA0CQkyNAkJCTIyCiMgQU1EIEs4CTIwCQkJMTkKIyBQSUlJCQkyNQkJCTIzCiMgUGVudGl1bQk4MQkJCTc4CgpwdXNoKEBJTkMsInBlcmxhc20iLCIuLi8uLi9wZXJsYXNtIik7CnJlcXVpcmUgIng4NmFzbS5wbCI7CgomYXNtX2luaXQoJEFSR1ZbMF0sImFlcy01ODYucGwiLCRBUkdWWyQjQVJHVl0gZXEgIjM4NiIpOwoKJHMwPSJlYXgiOwokczE9ImVieCI7CiRzMj0iZWN4IjsKJHMzPSJlZHgiOwoka2V5PSJlZGkiOwokYWNjPSJlc2kiOwoKJGNvbXByb21pc2U9MDsJCSMgJGNvbXByb21pc2U9MTI4IGFic3RhaW5zIGZyb20gY29weWluZyBrZXkKCQkJIyBzY2hlZHVsZSB0byBzdGFjayB3aGVuIGVuY3J5cHRpbmcgaW5wdXRzCgkJCSMgc2hvcnRlciB0aGFuIDEyOCBieXRlcyBhdCB0aGUgY29zdCBvZgoJCQkjIHJpc2tzaW5nIGFsaWFzaW5nIHdpdGggUy1ib3hlcy4gSW4gcmV0dXJuCgkJCSMgeW91IGdldCB3YXkgYmV0dGVyLCB1cCB0byArNzAlLCBzbWFsbCBibG9jawoJCQkjIHBlcmZvcm1hbmNlLgokc21hbGxfZm9vdHByaW50PTE7CSMgJHNtYWxsX2Zvb3RwcmludD0xIGNvZGUgaXMgfjUlIHNsb3dlciBbb24KCQkJIyByZWNlbnQgtS1hcmNoc10sIGJ1dCB+NSB0aW1lcyBzbWFsbGVyIQoJCQkjIEkgZmF2b3IgY29tcGFjdCBjb2RlIHRvIG1pbmltaXplIGNhY2hlCgkJCSMgY29udGVudGlvbiBhbmQgaW4gaG9wZSB0byAiY29sbGVjdCIgNSUgYmFjawoJCQkjIGluIHJlYWwtbGlmZSBhcHBsaWNhdGlvbnMuLi4KJHZlcnRpY2FsX3NwaW49MDsJIyBzaGlmdCAidmVydGljYWx5IiBkZWZhdWx0cyB0byAwLCBiZWNhdXNlIG9mCgkJCSMgaXRzIHByb29mLW9mLWNvbmNlcHQgc3RhdHVzLi4uCgojIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBkZWN2ZXJ0KCksIGFzIHdlbGwgYXMgbGFzdCBlbmNyeXB0aW9uIHJvdW5kIGlzCiMgcGVyZm9ybWVkIHdpdGggImhvcml6b250YWwiIHNoaWZ0cy4gVGhpcyBpcyBiZWNhdXNlIHRoaXMgInZlcnRpY2FsIgojIGltcGxlbWVudGF0aW9uIFtvbmUgd2hpY2ggZ3JvdXBzIHNoaWZ0cyBvbiBhIGdpdmVuICRzW2ldIHRvIGZvcm0gYQojICJjb2x1bW4sIiB1bmxpa2UgImhvcml6b250YWwiIG9uZSwgd2hpY2ggZ3JvdXBzIHNoaWZ0cyBvbiBkaWZmZXJlbnQKIyAkc1tpXSB0byBmb3JtIGEgInJvdyJdIGlzIHdvcmsgaW4gcHJvZ3Jlc3MuIEl0IHdhcyBvYnNlcnZlZCB0byBydW4KIyBmZXcgcGVyY2VudHMgZmFzdGVyIG9uIEludGVsIGNvcmVzLCBidXQgbm90IEFNRC4gT24gQU1EIEs4IGNvcmUgaXQncwojIHdob2xlIDEyJSBzbG93ZXI6LSggU28gd2UgZmFjZSBhIHRyYWRlLW9mZi4uLiBTaGFsbCBpdCBiZSByZXNvbHZlZAojIHNvbWUgZGF5PyBUaWxsIHRoZW4gdGhlIGNvZGUgaXMgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYW5kIGJ5CiMgZGVmYXVsdCByZW1haW5zIGRvcm1hbnQuLi4KCnN1YiBlbmN2ZXJ0KCkKeyBteSAoJHRlLEBzKSA9IEBfOwogIG15ICR2MCA9ICRhY2MsICR2MSA9ICRrZXk7CgoJJm1vdgkoJHYwLCRzWzNdKTsJCQkJIyBjb3B5IHMzCgkmbW92CSgmRFdQKDQsImVzcCIpLCRzWzJdKTsJCQkjIHNhdmUgczIKCSZtb3YJKCR2MSwkc1swXSk7CQkJCSMgY29weSBzMAoJJm1vdgkoJkRXUCg4LCJlc3AiKSwkc1sxXSk7CQkJIyBzYXZlIHMxCgoJJm1vdnoJKCRzWzJdLCZIQigkc1swXSkpOwoJJmFuZAkoJHNbMF0sMHhGRik7CgkmbW92CSgkc1swXSwmRFdQKDAsJHRlLCRzWzBdLDgpKTsJCSMgczA+PjAKCSZzaHIJKCR2MSwxNik7CgkmbW92CSgkc1szXSwmRFdQKDMsJHRlLCRzWzJdLDgpKTsJCSMgczA+PjgKCSZtb3Z6CSgkc1sxXSwmSEIoJHYxKSk7CgkmYW5kCSgkdjEsMHhGRik7CgkmbW92CSgkc1syXSwmRFdQKDIsJHRlLCR2MSw4KSk7CQkjIHMwPj4xNgoJICZtb3YJKCR2MSwkdjApOwoJJm1vdgkoJHNbMV0sJkRXUCgxLCR0ZSwkc1sxXSw4KSk7CQkjIHMwPj4yNAoKCSZhbmQJKCR2MCwweEZGKTsKCSZ4b3IJKCRzWzNdLCZEV1AoMCwkdGUsJHYwLDgpKTsJCSMgczM+PjAKCSZtb3Z6CSgkdjAsJkhCKCR2MSkpOwoJJnNocgkoJHYxLDE2KTsKCSZ4b3IJKCRzWzJdLCZEV1AoMywkdGUsJHYwLDgpKTsJCSMgczM+PjgKCSZtb3Z6CSgkdjAsJkhCKCR2MSkpOwoJJmFuZAkoJHYxLDB4RkYpOwoJJnhvcgkoJHNbMV0sJkRXUCgyLCR0ZSwkdjEsOCkpOwkJIyBzMz4+MTYKCSAmbW92CSgkdjEsJkRXUCg0LCJlc3AiKSk7CQkJIyByZXN0b3JlIHMyCgkmeG9yCSgkc1swXSwmRFdQKDEsJHRlLCR2MCw4KSk7CQkjIHMzPj4yNAoKCSZtb3YJKCR2MCwkdjEpOwoJJmFuZAkoJHYxLDB4RkYpOwoJJnhvcgkoJHNbMl0sJkRXUCgwLCR0ZSwkdjEsOCkpOwkJIyBzMj4+MAoJJm1vdnoJKCR2MSwmSEIoJHYwKSk7Cgkmc2hyCSgkdjAsMTYpOwoJJnhvcgkoJHNbMV0sJkRXUCgzLCR0ZSwkdjEsOCkpOwkJIyBzMj4+OAoJJm1vdnoJKCR2MSwmSEIoJHYwKSk7CgkmYW5kCSgkdjAsMHhGRik7CgkmeG9yCSgkc1swXSwmRFdQKDIsJHRlLCR2MCw4KSk7CQkjIHMyPj4xNgoJICZtb3YJKCR2MCwmRFdQKDgsImVzcCIpKTsJCQkjIHJlc3RvcmUgczEKCSZ4b3IJKCRzWzNdLCZEV1AoMSwkdGUsJHYxLDgpKTsJCSMgczI+PjI0CgoJJm1vdgkoJHYxLCR2MCk7CgkmYW5kCSgkdjAsMHhGRik7CgkmeG9yCSgkc1sxXSwmRFdQKDAsJHRlLCR2MCw4KSk7CQkjIHMxPj4wCgkmbW92egkoJHYwLCZIQigkdjEpKTsKCSZzaHIJKCR2MSwxNik7CgkmeG9yCSgkc1swXSwmRFdQKDMsJHRlLCR2MCw4KSk7CQkjIHMxPj44CgkmbW92egkoJHYwLCZIQigkdjEpKTsKCSZhbmQJKCR2MSwweEZGKTsKCSZ4b3IJKCRzWzNdLCZEV1AoMiwkdGUsJHYxLDgpKTsJCSMgczE+PjE2CgkgJm1vdgkoJGtleSwmRFdQKDEyLCJlc3AiKSk7CQkJIyByZWluY2FybmF0ZSB2MSBhcyBrZXkKCSZ4b3IJKCRzWzJdLCZEV1AoMSwkdGUsJHYwLDgpKTsJCSMgczE+PjI0Cn0KCnN1YiBlbmNzdGVwKCkKeyBteSAoJGksJHRlLEBzKSA9IEBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCSMgbGluZXMgbWFya2VkIHdpdGggIyVlP3hbaV0gZGVub3RlICJyZW9yZGVyZWQiIGluc3RydWN0aW9ucy4uLgoJaWYgKCRpPT0zKSAgewkmbW92CSgka2V5LCZEV1AoMTIsImVzcCIpKTsJCX0jIyVlZHgKCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CgkJCSZhbmQJKCRvdXQsMHhGRik7CQkJfQoJaWYgKCRpPT0xKSAgewkmc2hyCSgkc1swXSwxNik7CQkJfSMlZWJ4WzFdCglpZiAoJGk9PTIpICB7CSZzaHIJKCRzWzBdLDI0KTsJCQl9IyVlY3hbMl0KCQkJJm1vdgkoJG91dCwmRFdQKDAsJHRlLCRvdXQsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfSMjJWVheAoJCQkmbW92egkoJHRtcCwmSEIoJHNbMV0pKTsKCQkJJnhvcgkoJG91dCwmRFdQKDMsJHRlLCR0bXAsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJkRXUCg0LCJlc3AiKSk7CX0jIyVlYngKCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1syXSk7CgkJCSZzaHIJKCR0bXAsMTYpOwkJCX0KCWlmICgkaT09MikgIHsJJmFuZAkoJHNbMV0sMHhGRik7CQkJfSMlZWR4WzJdCgkJCSZhbmQJKCR0bXAsMHhGRik7CgkJCSZ4b3IJKCRvdXQsJkRXUCgyLCR0ZSwkdG1wLDgpKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCZEV1AoOCwiZXNwIikpOwl9IyMlZWN4CgllbHNpZigkaT09Mil7CSZtb3Z6CSgkdG1wLCZIQigkc1szXSkpOwkJfSMlZWJ4WzJdCgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOyAKCQkJJnNocgkoJHRtcCwyNCkJCQl9CgkJCSZ4b3IJKCRvdXQsJkRXUCgxLCR0ZSwkdG1wLDgpKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRhY2MpOwkJCX0KCQkJJmNvbW1lbnQoKTsKfQoKc3ViIGVuY2xhc3QoKQp7IG15ICgkaSwkdGUsQHMpPUBfOwogIG15ICR0bXAgPSAka2V5OwogIG15ICRvdXQgPSAkaT09Mz8kc1swXTokYWNjOwoKCWlmICgkaT09MykgIHsJJm1vdgkoJGtleSwmRFdQKDEyLCJlc3AiKSk7CQl9IyMlZWR4CgllbHNlICAgICAgICB7CSZtb3YJKCRvdXQsJHNbMF0pOwkJCX0KCQkJJmFuZAkoJG91dCwweEZGKTsKCWlmICgkaT09MSkgIHsJJnNocgkoJHNbMF0sMTYpOwkJCX0jJWVieFsxXQoJaWYgKCRpPT0yKSAgewkmc2hyCSgkc1swXSwyNCk7CQkJfSMlZWN4WzJdCgkJCSZtb3YJKCRvdXQsJkRXUCgyLCR0ZSwkb3V0LDgpKTsKCQkJJmFuZAkoJG91dCwweDAwMDAwMGZmKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMV07CQkJCX0jIyVlYXgKCQkJJm1vdnoJKCR0bXAsJkhCKCRzWzFdKSk7CgkJCSZtb3YJKCR0bXAsJkRXUCgwLCR0ZSwkdG1wLDgpKTsKCQkJJmFuZAkoJHRtcCwweDAwMDBmZjAwKTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbMl07ICZtb3YgKCRzWzFdLCZEV1AoNCwiZXNwIikpOwl9IyMlZWJ4CgllbHNlICAgICAgICB7CW1vdgkoJHRtcCwkc1syXSk7CgkJCSZzaHIJKCR0bXAsMTYpOwkJCX0KCWlmICgkaT09MikgIHsJJmFuZAkoJHNbMV0sMHhGRik7CQkJfSMlZWR4WzJdCgkJCSZhbmQJKCR0bXAsMHhGRik7CgkJCSZtb3YJKCR0bXAsJkRXUCgwLCR0ZSwkdG1wLDgpKTsKCQkJJmFuZAkoJHRtcCwweDAwZmYwMDAwKTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCZEV1AoOCwiZXNwIikpOwl9IyMlZWN4CgllbHNpZigkaT09Mil7CSZtb3Z6CSgkdG1wLCZIQigkc1szXSkpOwkJfSMlZWJ4WzJdCgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwoJCQkmc2hyCSgkdG1wLDI0KTsJCQl9CgkJCSZtb3YJKCR0bXAsJkRXUCgyLCR0ZSwkdG1wLDgpKTsKCQkJJmFuZAkoJHRtcCwweGZmMDAwMDAwKTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCRhY2MpOwkJCX0KfQoKc3ViIF9kYXRhX3dvcmQoKSB7IG15ICRpOyB3aGlsZShkZWZpbmVkKCRpPXNoaWZ0KSkgeyAmZGF0YV93b3JkKCRpLCRpKTsgfSB9CgomcHVibGljX2xhYmVsKCJBRVNfVGUiKTsKJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2VuY3J5cHQiKTsKCWlmICgkdmVydGljYWxfc3BpbikgewoJCSMgSSBuZWVkIGhpZ2ggcGFydHMgb2Ygdm9sYXRpbGUgcmVnaXN0ZXJzIHRvIGJlIGFjY2Vzc2libGUuLi4KCQkmZXhjaAkoJHMxPSJlZGkiLCRrZXk9ImVieCIpOwoJCSZtb3YJKCRzMj0iZXNpIiwkYWNjPSJlY3giKTsKCX0KCgkjIG5vdGUgdGhhdCBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gYWxsb2NhdGUgc3RhY2sgZnJhbWUgZm9yIG1lIQoJJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CQkjIHNhdmUga2V5CgoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIHhvciB3aXRoIGtleQoJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmbW92CSgkYWNjLCZEV1AoMjQwLCRrZXkpKTsJCSMgbG9hZCBrZXktPnJvdW5kcwoKCWlmICgkc21hbGxfZm9vdHByaW50KSB7CgkgICAgJmxlYQkoJGFjYywmRFdQKC0yLCRhY2MsJGFjYykpOwoJICAgICZsZWEJKCRhY2MsJkRXUCgwLCRrZXksJGFjYyw4KSk7CgkgICAgJm1vdgkoJkRXUCgxNiwiZXNwIiksJGFjYyk7CSMgZW5kIG9mIGtleSBzY2hlZHVsZQoJICAgICZhbGlnbgkoNCk7CgkgICAgJnNldF9sYWJlbCgibG9vcCIpOwoJCWlmICgkdmVydGljYWxfc3BpbikgewoJCSAgICAmZW5jdmVydCgiZWJwIiwkczAsJHMxLCRzMiwkczMpOwoJCX0gZWxzZSB7CgkJICAgICZlbmNzdGVwKDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwiZWJwIiwkczEsJHMyLCRzMywkczApOwoJCSAgICAmZW5jc3RlcCgyLCJlYnAiLCRzMiwkczMsJHMwLCRzMSk7CgkJICAgICZlbmNzdGVwKDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJmFkZAkoJGtleSwxNik7CQkjIGFkdmFuY2UgcmRfa2V5CgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJICAgICZjbXAJKCRrZXksJkRXUCgxNiwiZXNwIikpOwoJICAgICZtb3YJKCZEV1AoMTIsImVzcCIpLCRrZXkpOwoJICAgICZqYgkJKCZsYWJlbCgibG9vcCIpKTsKCX0KCWVsc2UgewoJICAgICZjbXAJKCRhY2MsMTApOwoJICAgICZqbGUJKCZsYWJlbCgiMTByb3VuZHMiKSk7CgkgICAgJmNtcAkoJGFjYywxMik7CgkgICAgJmpsZQkoJmxhYmVsKCIxMnJvdW5kcyIpKTsKCgkmc2V0X2xhYmVsKCIxNHJvdW5kcyIpOwoJICAgIGZvciAoJGk9MTskaTwzOyRpKyspIHsKCQlpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCQkgICAgJmVuY3ZlcnQoImVicCIsJHMwLCRzMSwkczIsJHMzKTsKCQl9IGVsc2UgewoJCSAgICAmZW5jc3RlcCgwLCJlYnAiLCRzMCwkczEsJHMyLCRzMyk7CgkJICAgICZlbmNzdGVwKDEsImVicCIsJHMxLCRzMiwkczMsJHMwKTsKCQkgICAgJmVuY3N0ZXAoMiwiZWJwIiwkczIsJHMzLCRzMCwkczEpOwoJCSAgICAmZW5jc3RlcCgzLCJlYnAiLCRzMywkczAsJHMxLCRzMik7CgkJfQoJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDE2KiRpKzQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKCSAgICB9CgkgICAgJmFkZAkoJGtleSwzMik7CgkgICAgJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CSMgYWR2YW5jZSByZF9rZXkKCSZzZXRfbGFiZWwoIjEycm91bmRzIik7CgkgICAgZm9yICgkaT0xOyRpPDM7JGkrKykgewoJCWlmICgkdmVydGljYWxfc3BpbikgewoJCSAgICAmZW5jdmVydCgiZWJwIiwkczAsJHMxLCRzMiwkczMpOwoJCX0gZWxzZSB7CgkJICAgICZlbmNzdGVwKDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwiZWJwIiwkczEsJHMyLCRzMywkczApOwoJCSAgICAmZW5jc3RlcCgyLCJlYnAiLCRzMiwkczMsJHMwLCRzMSk7CgkJICAgICZlbmNzdGVwKDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJnhvcgkoJHMwLCZEV1AoMTYqJGkrMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTYqJGkrMTIsJGtleSkpOwoJICAgIH0KCSAgICAmYWRkCSgka2V5LDMyKTsKCSAgICAmbW92CSgmRFdQKDEyLCJlc3AiKSwka2V5KTsJIyBhZHZhbmNlIHJkX2tleQoJJnNldF9sYWJlbCgiMTByb3VuZHMiKTsKCSAgICBmb3IgKCRpPTE7JGk8MTA7JGkrKykgewoJCWlmICgkdmVydGljYWxfc3BpbikgewoJCSAgICAmZW5jdmVydCgiZWJwIiwkczAsJHMxLCRzMiwkczMpOwoJCX0gZWxzZSB7CgkJICAgICZlbmNzdGVwKDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKCQkgICAgJmVuY3N0ZXAoMSwiZWJwIiwkczEsJHMyLCRzMywkczApOwoJCSAgICAmZW5jc3RlcCgyLCJlYnAiLCRzMiwkczMsJHMwLCRzMSk7CgkJICAgICZlbmNzdGVwKDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKCQl9CgkJJnhvcgkoJHMwLCZEV1AoMTYqJGkrMCwka2V5KSk7CgkJJnhvcgkoJHMxLCZEV1AoMTYqJGkrNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoMTYqJGkrOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTYqJGkrMTIsJGtleSkpOwoJICAgIH0KCX0KCglpZiAoJHZlcnRpY2FsX3NwaW4pIHsKCSAgICAjICJyZWluY2FybmF0ZSIgc29tZSByZWdpc3RlcnMgZm9yICJob3Jpem9udGFsIiBzcGluLi4uCgkgICAgJm1vdgkoJHMxPSJlYngiLCRrZXk9ImVkaSIpOwoJICAgICZtb3YJKCRzMj0iZWN4IiwkYWNjPSJlc2kiKTsKCX0KCSZlbmNsYXN0KDAsImVicCIsJHMwLCRzMSwkczIsJHMzKTsKCSZlbmNsYXN0KDEsImVicCIsJHMxLCRzMiwkczMsJHMwKTsKCSZlbmNsYXN0KDIsImVicCIsJHMyLCRzMywkczAsJHMxKTsKCSZlbmNsYXN0KDMsImVicCIsJHMzLCRzMCwkczEsJHMyKTsKCgkmYWRkCSgka2V5LCRzbWFsbF9mb290cHJpbnQ/MTY6MTYwKTsKCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwoJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkmcmV0CSgpOwoKJnNldF9sYWJlbCgiQUVTX1RlIiw2NCk7CSMgWWVzISBJIGtlZXAgaXQgaW4gdGhlIGNvZGUgc2VnbWVudCEKCSZfZGF0YV93b3JkKDB4YTU2MzYzYzYsIDB4ODQ3YzdjZjgsIDB4OTk3Nzc3ZWUsIDB4OGQ3YjdiZjYpOwoJJl9kYXRhX3dvcmQoMHgwZGYyZjJmZiwgMHhiZDZiNmJkNiwgMHhiMTZmNmZkZSwgMHg1NGM1YzU5MSk7CgkmX2RhdGFfd29yZCgweDUwMzAzMDYwLCAweDAzMDEwMTAyLCAweGE5Njc2N2NlLCAweDdkMmIyYjU2KTsKCSZfZGF0YV93b3JkKDB4MTlmZWZlZTcsIDB4NjJkN2Q3YjUsIDB4ZTZhYmFiNGQsIDB4OWE3Njc2ZWMpOwoJJl9kYXRhX3dvcmQoMHg0NWNhY2E4ZiwgMHg5ZDgyODIxZiwgMHg0MGM5Yzk4OSwgMHg4NzdkN2RmYSk7CgkmX2RhdGFfd29yZCgweDE1ZmFmYWVmLCAweGViNTk1OWIyLCAweGM5NDc0NzhlLCAweDBiZjBmMGZiKTsKCSZfZGF0YV93b3JkKDB4ZWNhZGFkNDEsIDB4NjdkNGQ0YjMsIDB4ZmRhMmEyNWYsIDB4ZWFhZmFmNDUpOwoJJl9kYXRhX3dvcmQoMHhiZjljOWMyMywgMHhmN2E0YTQ1MywgMHg5NjcyNzJlNCwgMHg1YmMwYzA5Yik7CgkmX2RhdGFfd29yZCgweGMyYjdiNzc1LCAweDFjZmRmZGUxLCAweGFlOTM5MzNkLCAweDZhMjYyNjRjKTsKCSZfZGF0YV93b3JkKDB4NWEzNjM2NmMsIDB4NDEzZjNmN2UsIDB4MDJmN2Y3ZjUsIDB4NGZjY2NjODMpOwoJJl9kYXRhX3dvcmQoMHg1YzM0MzQ2OCwgMHhmNGE1YTU1MSwgMHgzNGU1ZTVkMSwgMHgwOGYxZjFmOSk7CgkmX2RhdGFfd29yZCgweDkzNzE3MWUyLCAweDczZDhkOGFiLCAweDUzMzEzMTYyLCAweDNmMTUxNTJhKTsKCSZfZGF0YV93b3JkKDB4MGMwNDA0MDgsIDB4NTJjN2M3OTUsIDB4NjUyMzIzNDYsIDB4NWVjM2MzOWQpOwoJJl9kYXRhX3dvcmQoMHgyODE4MTgzMCwgMHhhMTk2OTYzNywgMHgwZjA1MDUwYSwgMHhiNTlhOWEyZik7CgkmX2RhdGFfd29yZCgweDA5MDcwNzBlLCAweDM2MTIxMjI0LCAweDliODA4MDFiLCAweDNkZTJlMmRmKTsKCSZfZGF0YV93b3JkKDB4MjZlYmViY2QsIDB4NjkyNzI3NGUsIDB4Y2RiMmIyN2YsIDB4OWY3NTc1ZWEpOwoJJl9kYXRhX3dvcmQoMHgxYjA5MDkxMiwgMHg5ZTgzODMxZCwgMHg3NDJjMmM1OCwgMHgyZTFhMWEzNCk7CgkmX2RhdGFfd29yZCgweDJkMWIxYjM2LCAweGIyNmU2ZWRjLCAweGVlNWE1YWI0LCAweGZiYTBhMDViKTsKCSZfZGF0YV93b3JkKDB4ZjY1MjUyYTQsIDB4NGQzYjNiNzYsIDB4NjFkNmQ2YjcsIDB4Y2ViM2IzN2QpOwoJJl9kYXRhX3dvcmQoMHg3YjI5Mjk1MiwgMHgzZWUzZTNkZCwgMHg3MTJmMmY1ZSwgMHg5Nzg0ODQxMyk7CgkmX2RhdGFfd29yZCgweGY1NTM1M2E2LCAweDY4ZDFkMWI5LCAweDAwMDAwMDAwLCAweDJjZWRlZGMxKTsKCSZfZGF0YV93b3JkKDB4NjAyMDIwNDAsIDB4MWZmY2ZjZTMsIDB4YzhiMWIxNzksIDB4ZWQ1YjViYjYpOwoJJl9kYXRhX3dvcmQoMHhiZTZhNmFkNCwgMHg0NmNiY2I4ZCwgMHhkOWJlYmU2NywgMHg0YjM5Mzk3Mik7CgkmX2RhdGFfd29yZCgweGRlNGE0YTk0LCAweGQ0NGM0Yzk4LCAweGU4NTg1OGIwLCAweDRhY2ZjZjg1KTsKCSZfZGF0YV93b3JkKDB4NmJkMGQwYmIsIDB4MmFlZmVmYzUsIDB4ZTVhYWFhNGYsIDB4MTZmYmZiZWQpOwoJJl9kYXRhX3dvcmQoMHhjNTQzNDM4NiwgMHhkNzRkNGQ5YSwgMHg1NTMzMzM2NiwgMHg5NDg1ODUxMSk7CgkmX2RhdGFfd29yZCgweGNmNDU0NThhLCAweDEwZjlmOWU5LCAweDA2MDIwMjA0LCAweDgxN2Y3ZmZlKTsKCSZfZGF0YV93b3JkKDB4ZjA1MDUwYTAsIDB4NDQzYzNjNzgsIDB4YmE5ZjlmMjUsIDB4ZTNhOGE4NGIpOwoJJl9kYXRhX3dvcmQoMHhmMzUxNTFhMiwgMHhmZWEzYTM1ZCwgMHhjMDQwNDA4MCwgMHg4YThmOGYwNSk7CgkmX2RhdGFfd29yZCgweGFkOTI5MjNmLCAweGJjOWQ5ZDIxLCAweDQ4MzgzODcwLCAweDA0ZjVmNWYxKTsKCSZfZGF0YV93b3JkKDB4ZGZiY2JjNjMsIDB4YzFiNmI2NzcsIDB4NzVkYWRhYWYsIDB4NjMyMTIxNDIpOwoJJl9kYXRhX3dvcmQoMHgzMDEwMTAyMCwgMHgxYWZmZmZlNSwgMHgwZWYzZjNmZCwgMHg2ZGQyZDJiZik7CgkmX2RhdGFfd29yZCgweDRjY2RjZDgxLCAweDE0MGMwYzE4LCAweDM1MTMxMzI2LCAweDJmZWNlY2MzKTsKCSZfZGF0YV93b3JkKDB4ZTE1ZjVmYmUsIDB4YTI5Nzk3MzUsIDB4Y2M0NDQ0ODgsIDB4MzkxNzE3MmUpOwoJJl9kYXRhX3dvcmQoMHg1N2M0YzQ5MywgMHhmMmE3YTc1NSwgMHg4MjdlN2VmYywgMHg0NzNkM2Q3YSk7CgkmX2RhdGFfd29yZCgweGFjNjQ2NGM4LCAweGU3NWQ1ZGJhLCAweDJiMTkxOTMyLCAweDk1NzM3M2U2KTsKCSZfZGF0YV93b3JkKDB4YTA2MDYwYzAsIDB4OTg4MTgxMTksIDB4ZDE0ZjRmOWUsIDB4N2ZkY2RjYTMpOwoJJl9kYXRhX3dvcmQoMHg2NjIyMjI0NCwgMHg3ZTJhMmE1NCwgMHhhYjkwOTAzYiwgMHg4Mzg4ODgwYik7CgkmX2RhdGFfd29yZCgweGNhNDY0NjhjLCAweDI5ZWVlZWM3LCAweGQzYjhiODZiLCAweDNjMTQxNDI4KTsKCSZfZGF0YV93b3JkKDB4NzlkZWRlYTcsIDB4ZTI1ZTVlYmMsIDB4MWQwYjBiMTYsIDB4NzZkYmRiYWQpOwoJJl9kYXRhX3dvcmQoMHgzYmUwZTBkYiwgMHg1NjMyMzI2NCwgMHg0ZTNhM2E3NCwgMHgxZTBhMGExNCk7CgkmX2RhdGFfd29yZCgweGRiNDk0OTkyLCAweDBhMDYwNjBjLCAweDZjMjQyNDQ4LCAweGU0NWM1Y2I4KTsKCSZfZGF0YV93b3JkKDB4NWRjMmMyOWYsIDB4NmVkM2QzYmQsIDB4ZWZhY2FjNDMsIDB4YTY2MjYyYzQpOwoJJl9kYXRhX3dvcmQoMHhhODkxOTEzOSwgMHhhNDk1OTUzMSwgMHgzN2U0ZTRkMywgMHg4Yjc5NzlmMik7CgkmX2RhdGFfd29yZCgweDMyZTdlN2Q1LCAweDQzYzhjODhiLCAweDU5MzczNzZlLCAweGI3NmQ2ZGRhKTsKCSZfZGF0YV93b3JkKDB4OGM4ZDhkMDEsIDB4NjRkNWQ1YjEsIDB4ZDI0ZTRlOWMsIDB4ZTBhOWE5NDkpOwoJJl9kYXRhX3dvcmQoMHhiNDZjNmNkOCwgMHhmYTU2NTZhYywgMHgwN2Y0ZjRmMywgMHgyNWVhZWFjZik7CgkmX2RhdGFfd29yZCgweGFmNjU2NWNhLCAweDhlN2E3YWY0LCAweGU5YWVhZTQ3LCAweDE4MDgwODEwKTsKCSZfZGF0YV93b3JkKDB4ZDViYWJhNmYsIDB4ODg3ODc4ZjAsIDB4NmYyNTI1NGEsIDB4NzIyZTJlNWMpOwoJJl9kYXRhX3dvcmQoMHgyNDFjMWMzOCwgMHhmMWE2YTY1NywgMHhjN2I0YjQ3MywgMHg1MWM2YzY5Nyk7CgkmX2RhdGFfd29yZCgweDIzZThlOGNiLCAweDdjZGRkZGExLCAweDljNzQ3NGU4LCAweDIxMWYxZjNlKTsKCSZfZGF0YV93b3JkKDB4ZGQ0YjRiOTYsIDB4ZGNiZGJkNjEsIDB4ODY4YjhiMGQsIDB4ODU4YThhMGYpOwoJJl9kYXRhX3dvcmQoMHg5MDcwNzBlMCwgMHg0MjNlM2U3YywgMHhjNGI1YjU3MSwgMHhhYTY2NjZjYyk7CgkmX2RhdGFfd29yZCgweGQ4NDg0ODkwLCAweDA1MDMwMzA2LCAweDAxZjZmNmY3LCAweDEyMGUwZTFjKTsKCSZfZGF0YV93b3JkKDB4YTM2MTYxYzIsIDB4NWYzNTM1NmEsIDB4Zjk1NzU3YWUsIDB4ZDBiOWI5NjkpOwoJJl9kYXRhX3dvcmQoMHg5MTg2ODYxNywgMHg1OGMxYzE5OSwgMHgyNzFkMWQzYSwgMHhiOTllOWUyNyk7CgkmX2RhdGFfd29yZCgweDM4ZTFlMWQ5LCAweDEzZjhmOGViLCAweGIzOTg5ODJiLCAweDMzMTExMTIyKTsKCSZfZGF0YV93b3JkKDB4YmI2OTY5ZDIsIDB4NzBkOWQ5YTksIDB4ODk4ZThlMDcsIDB4YTc5NDk0MzMpOwoJJl9kYXRhX3dvcmQoMHhiNjliOWIyZCwgMHgyMjFlMWUzYywgMHg5Mjg3ODcxNSwgMHgyMGU5ZTljOSk7CgkmX2RhdGFfd29yZCgweDQ5Y2VjZTg3LCAweGZmNTU1NWFhLCAweDc4MjgyODUwLCAweDdhZGZkZmE1KTsKCSZfZGF0YV93b3JkKDB4OGY4YzhjMDMsIDB4ZjhhMWExNTksIDB4ODA4OTg5MDksIDB4MTcwZDBkMWEpOwoJJl9kYXRhX3dvcmQoMHhkYWJmYmY2NSwgMHgzMWU2ZTZkNywgMHhjNjQyNDI4NCwgMHhiODY4NjhkMCk7CgkmX2RhdGFfd29yZCgweGMzNDE0MTgyLCAweGIwOTk5OTI5LCAweDc3MmQyZDVhLCAweDExMGYwZjFlKTsKCSZfZGF0YV93b3JkKDB4Y2JiMGIwN2IsIDB4ZmM1NDU0YTgsIDB4ZDZiYmJiNmQsIDB4M2ExNjE2MmMpOwojcmNvbjoKCSZkYXRhX3dvcmQoMHgwMDAwMDAwMSwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwOCk7CgkmZGF0YV93b3JkKDB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwODApOwoJJmRhdGFfd29yZCgweDAwMDAwMDFiLCAweDAwMDAwMDM2LCAwLCAwLCAwLCAwLCAwLCAwKTsKJmZ1bmN0aW9uX2VuZF9CKCJfeDg2X0FFU19lbmNyeXB0Iik7CgojIHZvaWQgQUVTX2VuY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKJnB1YmxpY19sYWJlbCgiQUVTX1RlIik7CiZmdW5jdGlvbl9iZWdpbigiQUVTX2VuY3J5cHQiKTsKCSZtb3YJKCRhY2MsJndwYXJhbSgwKSk7CQkjIGxvYWQgaW5wCgkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwkJIyBsb2FkIGtleQoKCSZtb3YJKCRzMCwiZXNwIik7Cgkmc3ViCSgiZXNwIiwyNCk7CgkmYW5kCSgiZXNwIiwtNjQpOwoJJmFkZAkoImVzcCIsNCk7CgkmbW92CSgmRFdQKDE2LCJlc3AiKSwkczApOwoKCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOyAgICAgICAgICAjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoImVicCIpOwoJJmxlYSAgICAoImVicCIsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYnAiKSk7CgoJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CQkjIGxvYWQgaW5wdXQgZGF0YQoJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkmbW92CSgkczIsJkRXUCg4LCRhY2MpKTsKCSZtb3YJKCRzMywmRFdQKDEyLCRhY2MpKTsKCgkmY2FsbAkoIl94ODZfQUVTX2VuY3J5cHQiKTsKCgkmbW92CSgiZXNwIiwmRFdQKDE2LCJlc3AiKSk7CgoJJm1vdgkoJGFjYywmd3BhcmFtKDEpKTsJCSMgbG9hZCBvdXQKCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkJIyB3cml0ZSBvdXRwdXQgZGF0YQoJJm1vdgkoJkRXUCg0LCRhY2MpLCRzMSk7CgkmbW92CSgmRFdQKDgsJGFjYyksJHMyKTsKCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKJmZ1bmN0aW9uX2VuZCgiQUVTX2VuY3J5cHQiKTsKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCgpzdWIgZGVjc3RlcCgpCnsgbXkgKCRpLCR0ZCxAcykgPSBAXzsKICBteSAkdG1wID0gJGtleTsKICBteSAkb3V0ID0gJGk9PTM/JHNbMF06JGFjYzsKCgkjIG5vIGluc3RydWN0aW9ucyBhcmUgcmVvcmRlcmVkLCBhcyBwZXJmb3JtYW5jZSBhcHBlYXJzCgkjIG9wdGltYWwuLi4gb3IgcmF0aGVyIHRoYXQgYWxsIGF0dGVtcHRzIHRvIHJlb3JkZXIgZGlkbid0CgkjIHJlc3VsdCBpbiBiZXR0ZXIgcGVyZm9ybWFuY2UgW3doaWNoIGJ5IHRoZSB3YXkgaXMgbm90IGEKCSMgYml0IGxvd2VyIHRoYW4gZWNyeXB0aW9uXS4KCWlmKCRpPT0zKSAgIHsJJm1vdgkoJGtleSwmRFdQKDEyLCJlc3AiKSk7CQl9CgllbHNlICAgICAgICB7CSZtb3YJKCRvdXQsJHNbMF0pOwkJCX0KCQkJJmFuZAkoJG91dCwweEZGKTsKCQkJJm1vdgkoJG91dCwmRFdQKDAsJHRkLCRvdXQsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1sxXTsJCQkJfQoJCQkmbW92egkoJHRtcCwmSEIoJHNbMV0pKTsKCQkJJnhvcgkoJG91dCwmRFdQKDMsJHRkLCR0bXAsOCkpOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1syXTsgJm1vdiAoJHNbMV0sJGFjYyk7CQl9CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbMl0pOwkJCX0KCQkJJnNocgkoJHRtcCwxNik7CgkJCSZhbmQJKCR0bXAsMHhGRik7CgkJCSZ4b3IJKCRvdXQsJkRXUCgyLCR0ZCwkdG1wLDgpKTsKCglpZiAoJGk9PTMpICB7CSR0bXA9JHNbM107ICZtb3YgKCRzWzJdLCZEV1AoOCwiZXNwIikpOwl9CgllbHNlICAgICAgICB7CSZtb3YJKCR0bXAsJHNbM10pOwkJCX0KCQkJJnNocgkoJHRtcCwyNCk7CgkJCSZ4b3IJKCRvdXQsJkRXUCgxLCR0ZCwkdG1wLDgpKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCZEV1AoNCwiZXNwIikpOwkJfQoJCQkmY29tbWVudCgpOwp9CgpzdWIgZGVjbGFzdCgpCnsgbXkgKCRpLCR0ZCxAcyk9QF87CiAgbXkgJHRtcCA9ICRrZXk7CiAgbXkgJG91dCA9ICRpPT0zPyRzWzBdOiRhY2M7CgoJaWYoJGk9PTMpICAgewkmbW92CSgka2V5LCZEV1AoMTIsImVzcCIpKTsJCX0KCWVsc2UgICAgICAgIHsJJm1vdgkoJG91dCwkc1swXSk7CQkJfQoJCQkmYW5kCSgkb3V0LDB4RkYpOwoJCQkmbW92egkoJG91dCwmQlAoMjA0OCwkdGQsJG91dCwxKSk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzFdOwkJCQl9CgkJCSZtb3Z6CSgkdG1wLCZIQigkc1sxXSkpOwoJCQkmbW92egkoJHRtcCwmQlAoMjA0OCwkdGQsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsOCk7CgkJCSZ4b3IJKCRvdXQsJHRtcCk7CgoJaWYgKCRpPT0zKSAgewkkdG1wPSRzWzJdOyAmbW92ICgkc1sxXSwkYWNjKTsJCX0KCWVsc2UgICAgICAgIHsJbW92CSgkdG1wLCRzWzJdKTsJCQl9CgkJCSZzaHIJKCR0bXAsMTYpOwoJCQkmYW5kCSgkdG1wLDB4RkYpOwoJCQkmbW92egkoJHRtcCwmQlAoMjA0OCwkdGQsJHRtcCwxKSk7CgkJCSZzaGwJKCR0bXAsMTYpOwoJCQkmeG9yCSgkb3V0LCR0bXApOwoKCWlmICgkaT09MykgIHsJJHRtcD0kc1szXTsgJm1vdiAoJHNbMl0sJkRXUCg4LCJlc3AiKSk7CX0KCWVsc2UgICAgICAgIHsJJm1vdgkoJHRtcCwkc1szXSk7CQkJfQoJCQkmc2hyCSgkdG1wLDI0KTsKCQkJJm1vdnoJKCR0bXAsJkJQKDIwNDgsJHRkLCR0bXAsMSkpOwoJCQkmc2hsCSgkdG1wLDI0KTsKCQkJJnhvcgkoJG91dCwkdG1wKTsKCWlmICgkaTwyKSAgIHsJJm1vdgkoJkRXUCg0KzQqJGksImVzcCIpLCRvdXQpOwl9CglpZiAoJGk9PTMpICB7CSZtb3YJKCRzWzNdLCZEV1AoNCwiZXNwIikpOwkJfQp9CgomcHVibGljX2xhYmVsKCJBRVNfVGQiKTsKJmZ1bmN0aW9uX2JlZ2luX0IoIl94ODZfQUVTX2RlY3J5cHQiKTsKCSMgbm90ZSB0aGF0IGNhbGxlciBpcyBleHBlY3RlZCB0byBhbGxvY2F0ZSBzdGFjayBmcmFtZSBmb3IgbWUhCgkmbW92CSgmRFdQKDEyLCJlc3AiKSwka2V5KTsJCSMgc2F2ZSBrZXkKCgkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsJCSMgeG9yIHdpdGgga2V5CgkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCSZtb3YJKCRhY2MsJkRXUCgyNDAsJGtleSkpOwkJIyBsb2FkIGtleS0+cm91bmRzCgoJaWYgKCRzbWFsbF9mb290cHJpbnQpIHsKCSAgICAmbGVhCSgkYWNjLCZEV1AoLTIsJGFjYywkYWNjKSk7CgkgICAgJmxlYQkoJGFjYywmRFdQKDAsJGtleSwkYWNjLDgpKTsKCSAgICAmbW92CSgmRFdQKDE2LCJlc3AiKSwkYWNjKTsJIyBlbmQgb2Yga2V5IHNjaGVkdWxlCgkgICAgJmFsaWduCSg0KTsKCSAgICAmc2V0X2xhYmVsKCJsb29wIik7CgkJJmRlY3N0ZXAoMCwiZWJwIiwkczAsJHMzLCRzMiwkczEpOwoJCSZkZWNzdGVwKDEsImVicCIsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCJlYnAiLCRzMiwkczEsJHMwLCRzMyk7CgkJJmRlY3N0ZXAoMywiZWJwIiwkczMsJHMyLCRzMSwkczApOwoJCSZhZGQJKCRrZXksMTYpOwkJIyBhZHZhbmNlIHJkX2tleQoJCSZ4b3IJKCRzMCwmRFdQKDAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDEyLCRrZXkpKTsKCSAgICAmY21wCSgka2V5LCZEV1AoMTYsImVzcCIpKTsKCSAgICAmbW92CSgmRFdQKDEyLCJlc3AiKSwka2V5KTsKCSAgICAmamIJCSgmbGFiZWwoImxvb3AiKSk7Cgl9CgllbHNlIHsKCSAgICAmY21wCSgkYWNjLDEwKTsKCSAgICAmamxlCSgmbGFiZWwoIjEwcm91bmRzIikpOwoJICAgICZjbXAJKCRhY2MsMTIpOwoJICAgICZqbGUJKCZsYWJlbCgiMTJyb3VuZHMiKSk7CgoJJnNldF9sYWJlbCgiMTRyb3VuZHMiKTsKCSAgICBmb3IgKCRpPTE7JGk8MzskaSsrKSB7CgkJJmRlY3N0ZXAoMCwiZWJwIiwkczAsJHMzLCRzMiwkczEpOwoJCSZkZWNzdGVwKDEsImVicCIsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCJlYnAiLCRzMiwkczEsJHMwLCRzMyk7CgkJJmRlY3N0ZXAoMywiZWJwIiwkczMsJHMyLCRzMSwkczApOwoJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDE2KiRpKzQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKCSAgICB9CgkgICAgJmFkZAkoJGtleSwzMik7CgkgICAgJm1vdgkoJkRXUCgxMiwiZXNwIiksJGtleSk7CSMgYWR2YW5jZSByZF9rZXkKCSZzZXRfbGFiZWwoIjEycm91bmRzIik7CgkgICAgZm9yICgkaT0xOyRpPDM7JGkrKykgewoJCSZkZWNzdGVwKDAsImVicCIsJHMwLCRzMywkczIsJHMxKTsKCQkmZGVjc3RlcCgxLCJlYnAiLCRzMSwkczAsJHMzLCRzMik7CgkJJmRlY3N0ZXAoMiwiZWJwIiwkczIsJHMxLCRzMCwkczMpOwoJCSZkZWNzdGVwKDMsImVicCIsJHMzLCRzMiwkczEsJHMwKTsKCQkmeG9yCSgkczAsJkRXUCgxNiokaSswLCRrZXkpKTsKCQkmeG9yCSgkczEsJkRXUCgxNiokaSs0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCgxNiokaSs4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxNiokaSsxMiwka2V5KSk7CgkgICAgfQoJICAgICZhZGQJKCRrZXksMzIpOwoJICAgICZtb3YJKCZEV1AoMTIsImVzcCIpLCRrZXkpOwkjIGFkdmFuY2UgcmRfa2V5Cgkmc2V0X2xhYmVsKCIxMHJvdW5kcyIpOwoJICAgIGZvciAoJGk9MTskaTwxMDskaSsrKSB7CgkJJmRlY3N0ZXAoMCwiZWJwIiwkczAsJHMzLCRzMiwkczEpOwoJCSZkZWNzdGVwKDEsImVicCIsJHMxLCRzMCwkczMsJHMyKTsKCQkmZGVjc3RlcCgyLCJlYnAiLCRzMiwkczEsJHMwLCRzMyk7CgkJJmRlY3N0ZXAoMywiZWJwIiwkczMsJHMyLCRzMSwkczApOwoJCSZ4b3IJKCRzMCwmRFdQKDE2KiRpKzAsJGtleSkpOwoJCSZ4b3IJKCRzMSwmRFdQKDE2KiRpKzQsJGtleSkpOwoJCSZ4b3IJKCRzMiwmRFdQKDE2KiRpKzgsJGtleSkpOwoJCSZ4b3IJKCRzMywmRFdQKDE2KiRpKzEyLCRrZXkpKTsKCSAgICB9Cgl9CgoJJmRlY2xhc3QoMCwiZWJwIiwkczAsJHMzLCRzMiwkczEpOwoJJmRlY2xhc3QoMSwiZWJwIiwkczEsJHMwLCRzMywkczIpOwoJJmRlY2xhc3QoMiwiZWJwIiwkczIsJHMxLCRzMCwkczMpOwoJJmRlY2xhc3QoMywiZWJwIiwkczMsJHMyLCRzMSwkczApOwoKCSZhZGQJKCRrZXksJHNtYWxsX2Zvb3RwcmludD8xNjoxNjApOwoJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CgkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCSZ4b3IJKCRzMiwmRFdQKDgsJGtleSkpOwoJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCSZyZXQJKCk7Cgomc2V0X2xhYmVsKCJBRVNfVGQiLDY0KTsJIyBZZXMhIEkga2VlcCBpdCBpbiB0aGUgY29kZSBzZWdtZW50IQoJJl9kYXRhX3dvcmQoMHg1MGE3ZjQ1MSwgMHg1MzY1NDE3ZSwgMHhjM2E0MTcxYSwgMHg5NjVlMjczYSk7CgkmX2RhdGFfd29yZCgweGNiNmJhYjNiLCAweGYxNDU5ZDFmLCAweGFiNThmYWFjLCAweDkzMDNlMzRiKTsKCSZfZGF0YV93b3JkKDB4NTVmYTMwMjAsIDB4ZjY2ZDc2YWQsIDB4OTE3NmNjODgsIDB4MjU0YzAyZjUpOwoJJl9kYXRhX3dvcmQoMHhmY2Q3ZTU0ZiwgMHhkN2NiMmFjNSwgMHg4MDQ0MzUyNiwgMHg4ZmEzNjJiNSk7CgkmX2RhdGFfd29yZCgweDQ5NWFiMWRlLCAweDY3MWJiYTI1LCAweDk4MGVlYTQ1LCAweGUxYzBmZTVkKTsKCSZfZGF0YV93b3JkKDB4MDI3NTJmYzMsIDB4MTJmMDRjODEsIDB4YTM5NzQ2OGQsIDB4YzZmOWQzNmIpOwoJJl9kYXRhX3dvcmQoMHhlNzVmOGYwMywgMHg5NTljOTIxNSwgMHhlYjdhNmRiZiwgMHhkYTU5NTI5NSk7CgkmX2RhdGFfd29yZCgweDJkODNiZWQ0LCAweGQzMjE3NDU4LCAweDI5NjllMDQ5LCAweDQ0YzhjOThlKTsKCSZfZGF0YV93b3JkKDB4NmE4OWMyNzUsIDB4Nzg3OThlZjQsIDB4NmIzZTU4OTksIDB4ZGQ3MWI5MjcpOwoJJl9kYXRhX3dvcmQoMHhiNjRmZTFiZSwgMHgxN2FkODhmMCwgMHg2NmFjMjBjOSwgMHhiNDNhY2U3ZCk7CgkmX2RhdGFfd29yZCgweDE4NGFkZjYzLCAweDgyMzExYWU1LCAweDYwMzM1MTk3LCAweDQ1N2Y1MzYyKTsKCSZfZGF0YV93b3JkKDB4ZTA3NzY0YjEsIDB4ODRhZTZiYmIsIDB4MWNhMDgxZmUsIDB4OTQyYjA4ZjkpOwoJJl9kYXRhX3dvcmQoMHg1ODY4NDg3MCwgMHgxOWZkNDU4ZiwgMHg4NzZjZGU5NCwgMHhiN2Y4N2I1Mik7CgkmX2RhdGFfd29yZCgweDIzZDM3M2FiLCAweGUyMDI0YjcyLCAweDU3OGYxZmUzLCAweDJhYWI1NTY2KTsKCSZfZGF0YV93b3JkKDB4MDcyOGViYjIsIDB4MDNjMmI1MmYsIDB4OWE3YmM1ODYsIDB4YTUwODM3ZDMpOwoJJl9kYXRhX3dvcmQoMHhmMjg3MjgzMCwgMHhiMmE1YmYyMywgMHhiYTZhMDMwMiwgMHg1YzgyMTZlZCk7CgkmX2RhdGFfd29yZCgweDJiMWNjZjhhLCAweDkyYjQ3OWE3LCAweGYwZjIwN2YzLCAweGExZTI2OTRlKTsKCSZfZGF0YV93b3JkKDB4Y2RmNGRhNjUsIDB4ZDViZTA1MDYsIDB4MWY2MjM0ZDEsIDB4OGFmZWE2YzQpOwoJJl9kYXRhX3dvcmQoMHg5ZDUzMmUzNCwgMHhhMDU1ZjNhMiwgMHgzMmUxOGEwNSwgMHg3NWViZjZhNCk7CgkmX2RhdGFfd29yZCgweDM5ZWM4MzBiLCAweGFhZWY2MDQwLCAweDA2OWY3MTVlLCAweDUxMTA2ZWJkKTsKCSZfZGF0YV93b3JkKDB4Zjk4YTIxM2UsIDB4M2QwNmRkOTYsIDB4YWUwNTNlZGQsIDB4NDZiZGU2NGQpOwoJJl9kYXRhX3dvcmQoMHhiNThkNTQ5MSwgMHgwNTVkYzQ3MSwgMHg2ZmQ0MDYwNCwgMHhmZjE1NTA2MCk7CgkmX2RhdGFfd29yZCgweDI0ZmI5ODE5LCAweDk3ZTliZGQ2LCAweGNjNDM0MDg5LCAweDc3OWVkOTY3KTsKCSZfZGF0YV93b3JkKDB4YmQ0MmU4YjAsIDB4ODg4Yjg5MDcsIDB4Mzg1YjE5ZTcsIDB4ZGJlZWM4NzkpOwoJJl9kYXRhX3dvcmQoMHg0NzBhN2NhMSwgMHhlOTBmNDI3YywgMHhjOTFlODRmOCwgMHgwMDAwMDAwMCk7CgkmX2RhdGFfd29yZCgweDgzODY4MDA5LCAweDQ4ZWQyYjMyLCAweGFjNzAxMTFlLCAweDRlNzI1YTZjKTsKCSZfZGF0YV93b3JkKDB4ZmJmZjBlZmQsIDB4NTYzODg1MGYsIDB4MWVkNWFlM2QsIDB4MjczOTJkMzYpOwoJJl9kYXRhX3dvcmQoMHg2NGQ5MGYwYSwgMHgyMWE2NWM2OCwgMHhkMTU0NWI5YiwgMHgzYTJlMzYyNCk7CgkmX2RhdGFfd29yZCgweGIxNjcwYTBjLCAweDBmZTc1NzkzLCAweGQyOTZlZWI0LCAweDllOTE5YjFiKTsKCSZfZGF0YV93b3JkKDB4NGZjNWMwODAsIDB4YTIyMGRjNjEsIDB4Njk0Yjc3NWEsIDB4MTYxYTEyMWMpOwoJJl9kYXRhX3dvcmQoMHgwYWJhOTNlMiwgMHhlNTJhYTBjMCwgMHg0M2UwMjIzYywgMHgxZDE3MWIxMik7CgkmX2RhdGFfd29yZCgweDBiMGQwOTBlLCAweGFkYzc4YmYyLCAweGI5YThiNjJkLCAweGM4YTkxZTE0KTsKCSZfZGF0YV93b3JkKDB4ODUxOWYxNTcsIDB4NGMwNzc1YWYsIDB4YmJkZDk5ZWUsIDB4ZmQ2MDdmYTMpOwoJJl9kYXRhX3dvcmQoMHg5ZjI2MDFmNywgMHhiY2Y1NzI1YywgMHhjNTNiNjY0NCwgMHgzNDdlZmI1Yik7CgkmX2RhdGFfd29yZCgweDc2Mjk0MzhiLCAweGRjYzYyM2NiLCAweDY4ZmNlZGI2LCAweDYzZjFlNGI4KTsKCSZfZGF0YV93b3JkKDB4Y2FkYzMxZDcsIDB4MTA4NTYzNDIsIDB4NDAyMjk3MTMsIDB4MjAxMWM2ODQpOwoJJl9kYXRhX3dvcmQoMHg3ZDI0NGE4NSwgMHhmODNkYmJkMiwgMHgxMTMyZjlhZSwgMHg2ZGExMjljNyk7CgkmX2RhdGFfd29yZCgweDRiMmY5ZTFkLCAweGYzMzBiMmRjLCAweGVjNTI4NjBkLCAweGQwZTNjMTc3KTsKCSZfZGF0YV93b3JkKDB4NmMxNmIzMmIsIDB4OTliOTcwYTksIDB4ZmE0ODk0MTEsIDB4MjI2NGU5NDcpOwoJJl9kYXRhX3dvcmQoMHhjNDhjZmNhOCwgMHgxYTNmZjBhMCwgMHhkODJjN2Q1NiwgMHhlZjkwMzMyMik7CgkmX2RhdGFfd29yZCgweGM3NGU0OTg3LCAweGMxZDEzOGQ5LCAweGZlYTJjYThjLCAweDM2MGJkNDk4KTsKCSZfZGF0YV93b3JkKDB4Y2Y4MWY1YTYsIDB4MjhkZTdhYTUsIDB4MjY4ZWI3ZGEsIDB4YTRiZmFkM2YpOwoJJl9kYXRhX3dvcmQoMHhlNDlkM2EyYywgMHgwZDkyNzg1MCwgMHg5YmNjNWY2YSwgMHg2MjQ2N2U1NCk7CgkmX2RhdGFfd29yZCgweGMyMTM4ZGY2LCAweGU4YjhkODkwLCAweDVlZjczOTJlLCAweGY1YWZjMzgyKTsKCSZfZGF0YV93b3JkKDB4YmU4MDVkOWYsIDB4N2M5M2QwNjksIDB4YTkyZGQ1NmYsIDB4YjMxMjI1Y2YpOwoJJl9kYXRhX3dvcmQoMHgzYjk5YWNjOCwgMHhhNzdkMTgxMCwgMHg2ZTYzOWNlOCwgMHg3YmJiM2JkYik7CgkmX2RhdGFfd29yZCgweDA5NzgyNmNkLCAweGY0MTg1OTZlLCAweDAxYjc5YWVjLCAweGE4OWE0ZjgzKTsKCSZfZGF0YV93b3JkKDB4NjU2ZTk1ZTYsIDB4N2VlNmZmYWEsIDB4MDhjZmJjMjEsIDB4ZTZlODE1ZWYpOwoJJl9kYXRhX3dvcmQoMHhkOTliZTdiYSwgMHhjZTM2NmY0YSwgMHhkNDA5OWZlYSwgMHhkNjdjYjAyOSk7CgkmX2RhdGFfd29yZCgweGFmYjJhNDMxLCAweDMxMjMzZjJhLCAweDMwOTRhNWM2LCAweGMwNjZhMjM1KTsKCSZfZGF0YV93b3JkKDB4MzdiYzRlNzQsIDB4YTZjYTgyZmMsIDB4YjBkMDkwZTAsIDB4MTVkOGE3MzMpOwoJJl9kYXRhX3dvcmQoMHg0YTk4MDRmMSwgMHhmN2RhZWM0MSwgMHgwZTUwY2Q3ZiwgMHgyZmY2OTExNyk7CgkmX2RhdGFfd29yZCgweDhkZDY0ZDc2LCAweDRkYjBlZjQzLCAweDU0NGRhYWNjLCAweGRmMDQ5NmU0KTsKCSZfZGF0YV93b3JkKDB4ZTNiNWQxOWUsIDB4MWI4ODZhNGMsIDB4YjgxZjJjYzEsIDB4N2Y1MTY1NDYpOwoJJl9kYXRhX3dvcmQoMHgwNGVhNWU5ZCwgMHg1ZDM1OGMwMSwgMHg3Mzc0ODdmYSwgMHgyZTQxMGJmYik7CgkmX2RhdGFfd29yZCgweDVhMWQ2N2IzLCAweDUyZDJkYjkyLCAweDMzNTYxMGU5LCAweDEzNDdkNjZkKTsKCSZfZGF0YV93b3JkKDB4OGM2MWQ3OWEsIDB4N2EwY2ExMzcsIDB4OGUxNGY4NTksIDB4ODkzYzEzZWIpOwoJJl9kYXRhX3dvcmQoMHhlZTI3YTljZSwgMHgzNWM5NjFiNywgMHhlZGU1MWNlMSwgMHgzY2IxNDc3YSk7CgkmX2RhdGFfd29yZCgweDU5ZGZkMjljLCAweDNmNzNmMjU1LCAweDc5Y2UxNDE4LCAweGJmMzdjNzczKTsKCSZfZGF0YV93b3JkKDB4ZWFjZGY3NTMsIDB4NWJhYWZkNWYsIDB4MTQ2ZjNkZGYsIDB4ODZkYjQ0NzgpOwoJJl9kYXRhX3dvcmQoMHg4MWYzYWZjYSwgMHgzZWM0NjhiOSwgMHgyYzM0MjQzOCwgMHg1ZjQwYTNjMik7CgkmX2RhdGFfd29yZCgweDcyYzMxZDE2LCAweDBjMjVlMmJjLCAweDhiNDkzYzI4LCAweDQxOTUwZGZmKTsKCSZfZGF0YV93b3JkKDB4NzEwMWE4MzksIDB4ZGViMzBjMDgsIDB4OWNlNGI0ZDgsIDB4OTBjMTU2NjQpOwoJJl9kYXRhX3dvcmQoMHg2MTg0Y2I3YiwgMHg3MGI2MzJkNSwgMHg3NDVjNmM0OCwgMHg0MjU3YjhkMCk7CiNUZDQ6CgkmZGF0YV9ieXRlKDB4NTIsIDB4MDksIDB4NmEsIDB4ZDUsIDB4MzAsIDB4MzYsIDB4YTUsIDB4MzgpOwoJJmRhdGFfYnl0ZSgweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiKTsKCSZkYXRhX2J5dGUoMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4Nyk7CgkmZGF0YV9ieXRlKDB4MzQsIDB4OGUsIDB4NDMsIDB4NDQsIDB4YzQsIDB4ZGUsIDB4ZTksIDB4Y2IpOwoJJmRhdGFfYnl0ZSgweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkKTsKCSZkYXRhX2J5dGUoMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSk7CgkmZGF0YV9ieXRlKDB4MDgsIDB4MmUsIDB4YTEsIDB4NjYsIDB4MjgsIDB4ZDksIDB4MjQsIDB4YjIpOwoJJmRhdGFfYnl0ZSgweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1KTsKCSZkYXRhX2J5dGUoMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNik7CgkmZGF0YV9ieXRlKDB4ZDQsIDB4YTQsIDB4NWMsIDB4Y2MsIDB4NWQsIDB4NjUsIDB4YjYsIDB4OTIpOwoJJmRhdGFfYnl0ZSgweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhKTsKCSZkYXRhX2J5dGUoMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCk7CgkmZGF0YV9ieXRlKDB4OTAsIDB4ZDgsIDB4YWIsIDB4MDAsIDB4OGMsIDB4YmMsIDB4ZDMsIDB4MGEpOwoJJmRhdGFfYnl0ZSgweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2KTsKCSZkYXRhX2J5dGUoMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMik7CgkmZGF0YV9ieXRlKDB4YzEsIDB4YWYsIDB4YmQsIDB4MDMsIDB4MDEsIDB4MTMsIDB4OGEsIDB4NmIpOwoJJmRhdGFfYnl0ZSgweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhKTsKCSZkYXRhX2J5dGUoMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3Myk7CgkmZGF0YV9ieXRlKDB4OTYsIDB4YWMsIDB4NzQsIDB4MjIsIDB4ZTcsIDB4YWQsIDB4MzUsIDB4ODUpOwoJJmRhdGFfYnl0ZSgweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlKTsKCSZkYXRhX2J5dGUoMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSk7CgkmZGF0YV9ieXRlKDB4NmYsIDB4YjcsIDB4NjIsIDB4MGUsIDB4YWEsIDB4MTgsIDB4YmUsIDB4MWIpOwoJJmRhdGFfYnl0ZSgweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwKTsKCSZkYXRhX2J5dGUoMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCk7CgkmZGF0YV9ieXRlKDB4MWYsIDB4ZGQsIDB4YTgsIDB4MzMsIDB4ODgsIDB4MDcsIDB4YzcsIDB4MzEpOwoJJmRhdGFfYnl0ZSgweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmKTsKCSZkYXRhX2J5dGUoMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCk7CgkmZGF0YV9ieXRlKDB4MmQsIDB4ZTUsIDB4N2EsIDB4OWYsIDB4OTMsIDB4YzksIDB4OWMsIDB4ZWYpOwoJJmRhdGFfYnl0ZSgweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwKTsKCSZkYXRhX2J5dGUoMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSk7CgkmZGF0YV9ieXRlKDB4MTcsIDB4MmIsIDB4MDQsIDB4N2UsIDB4YmEsIDB4NzcsIDB4ZDYsIDB4MjYpOwoJJmRhdGFfYnl0ZSgweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkKTsKJmZ1bmN0aW9uX2VuZF9CKCJfeDg2X0FFU19kZWNyeXB0Iik7CgojIHZvaWQgQUVTX2RlY3J5cHQgKGNvbnN0IHZvaWQgKmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKJnB1YmxpY19sYWJlbCgiQUVTX1RkIik7CiZmdW5jdGlvbl9iZWdpbigiQUVTX2RlY3J5cHQiKTsKCSZtb3YJKCRhY2MsJndwYXJhbSgwKSk7CQkjIGxvYWQgaW5wCgkmbW92CSgka2V5LCZ3cGFyYW0oMikpOwkJIyBsb2FkIGtleQoKCSZtb3YJKCRzMCwiZXNwIik7Cgkmc3ViCSgiZXNwIiwyNCk7CgkmYW5kCSgiZXNwIiwtNjQpOwoJJmFkZAkoImVzcCIsNCk7CgkmbW92CSgmRFdQKDE2LCJlc3AiKSwkczApOwoKCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOyAgICAgICAgICAjIG1ha2UgaXQgUElDIQoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoImVicCIpOwoJJmxlYSAgICAoImVicCIsJkRXUCgmbGFiZWwoIkFFU19UZCIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYnAiKSk7CgoJIyBwcmVmZXRjaCBUZDQKCSZsZWEJKCJlYnAiLCZEV1AoMjA0OCsxMjgsImVicCIpKTsKCSZtb3YJKCRzMCwmRFdQKDAtMTI4LCJlYnAiKSk7CgkmbW92CSgkczEsJkRXUCgzMi0xMjgsImVicCIpKTsKCSZtb3YJKCRzMiwmRFdQKDY0LTEyOCwiZWJwIikpOwoJJm1vdgkoJHMzLCZEV1AoOTYtMTI4LCJlYnAiKSk7CgkmbW92CSgkczAsJkRXUCgxMjgtMTI4LCJlYnAiKSk7CgkmbW92CSgkczEsJkRXUCgxNjAtMTI4LCJlYnAiKSk7CgkmbW92CSgkczIsJkRXUCgxOTItMTI4LCJlYnAiKSk7CgkmbW92CSgkczMsJkRXUCgyMjQtMTI4LCJlYnAiKSk7CgkmbGVhCSgiZWJwIiwmRFdQKC0yMDQ4LTEyOCwiZWJwIikpOwoKCSZtb3YJKCRzMCwmRFdQKDAsJGFjYykpOwkJIyBsb2FkIGlucHV0IGRhdGEKCSZtb3YJKCRzMSwmRFdQKDQsJGFjYykpOwoJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkmbW92CSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJJmNhbGwJKCJfeDg2X0FFU19kZWNyeXB0Iik7CgoJJm1vdgkoImVzcCIsJkRXUCgxNiwiZXNwIikpOwoKCSZtb3YJKCRhY2MsJndwYXJhbSgxKSk7CQkjIGxvYWQgb3V0CgkmbW92CSgmRFdQKDAsJGFjYyksJHMwKTsJCSMgd3JpdGUgb3V0cHV0IGRhdGEKCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7CiZmdW5jdGlvbl9lbmQoIkFFU19kZWNyeXB0Iik7CgojIHZvaWQgQUVTX2NiY19lbmNyeXB0IChjb25zdCB2b2lkIGNoYXIgKmlucCwgdW5zaWduZWQgY2hhciAqb3V0LAojCQkJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAojCQkJdW5zaWduZWQgY2hhciAqaXZwLGNvbnN0IGludCBlbmMpOwp7CiMgc3RhY2sgZnJhbWUgbGF5b3V0CiMgLTQoJWVzcCkJMCglZXNwKQkJcmV0dXJuIGFkZHJlc3MKIyAwKCVlc3ApCTQoJWVzcCkJCXRtcDEKIyA0KCVlc3ApCTgoJWVzcCkJCXRtcDIKIyA4KCVlc3ApCTEyKCVlc3ApCWtleQojIDEyKCVlc3ApCTE2KCVlc3ApCWVuZCBvZiBrZXkgc2NoZWR1bGUKbXkgJF9lc3A9JkRXUCgxNiwiZXNwIik7CSNzYXZlZCAlZXNwCm15ICRfaW5wPSZEV1AoMjAsImVzcCIpOwkjY29weSBvZiB3cGFyYW0oMCkKbXkgJF9vdXQ9JkRXUCgyNCwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSgxKQpteSAkX2xlbj0mRFdQKDI4LCJlc3AiKTsJI2NvcHkgb2Ygd3BhcmFtKDIpCm15ICRfa2V5PSZEV1AoMzIsImVzcCIpOwkjY29weSBvZiB3cGFyYW0oMykKbXkgJF9pdnA9JkRXUCgzNiwiZXNwIik7CSNjb3B5IG9mIHdwYXJhbSg0KQpteSAkX3RtcD0mRFdQKDQwLCJlc3AiKTsJI3ZvbGF0aWxlIHZhcmlhYmxlCm15ICRpdmVjPSZEV1AoNDQsImVzcCIpOwkjaXZlY1sxNl0KbXkgJGFlc19rZXk9JkRXUCg2MCwiZXNwIik7CSNjb3B5IG9mIGFlc19rZXkKbXkgJG1hcms9JkRXUCg2MCsyNDAsImVzcCIpOwkjY29weSBvZiBhZXNfa2V5LT5yb3VuZHMKCiZwdWJsaWNfbGFiZWwoIkFFU19UZSIpOwomcHVibGljX2xhYmVsKCJBRVNfVGQiKTsKJmZ1bmN0aW9uX2JlZ2luKCJBRVNfY2JjX2VuY3J5cHQiKTsKCSZtb3YJKCRzMiBlcSAiZWN4Ij8gJHMyIDogIiIsJndwYXJhbSgyKSk7CSMgbG9hZCBsZW4KCSZjbXAJKCRzMiwwKTsKCSZqZQkoJmxhYmVsKCJlbmNfb3V0IikpOwoKCSZjYWxsICAgKCZsYWJlbCgicGljX3BvaW50IikpOwkJIyBtYWtlIGl0IFBJQyEKCSZzZXRfbGFiZWwoInBpY19wb2ludCIpOwoJJmJsaW5kcG9wKCJlYnAiKTsKCgkmcHVzaGYJKCk7CgkmY2xkCSgpOwoKCSZjbXAJKCZ3cGFyYW0oNSksMCk7CgkmamUJKCZsYWJlbCgiREVDUllQVCIpKTsKCgkmbGVhICAgICgiZWJwIiwmRFdQKCZsYWJlbCgiQUVTX1RlIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVicCIpKTsKCgkjIGFsbG9jYXRlIGFsaWduZWQgc3RhY2sgZnJhbWUuLi4KCSZsZWEJKCRrZXksJkRXUCgtNjQtMjQ0LCJlc3AiKSk7CgkmYW5kCSgka2V5LC02NCk7CgoJIyAuLi4gYW5kIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGFsaWFzIHdpdGggQUVTX1RlIG1vZHVsbyA0MDk2CgkmbW92CSgkczAsImVicCIpOwoJJmxlYQkoJHMxLCZEV1AoMjA0OCwiZWJwIikpOwoJJm1vdgkoJHMzLCRrZXkpOwoJJmFuZAkoJHMwLDB4ZmZmKTsJCSMgcyA9ICVlYnAmMHhmZmYKCSZhbmQJKCRzMSwweGZmZik7CQkjIGUgPSAoJWVicCsyMDQ4KSYweGZmZgoJJmFuZAkoJHMzLDB4ZmZmKTsJCSMgcCA9ICVlc3AmMHhmZmYKCgkmY21wCSgkczMsJHMxKTsJCSMgaWYgKHA+PWUpICVlc3AgPS0gKHAtZSk7CgkmamIJKCZsYWJlbCgidGVfYnJlYWtfb3V0IikpOwoJJnN1YgkoJHMzLCRzMSk7Cgkmc3ViCSgka2V5LCRzMyk7Cgkmam1wCSgmbGFiZWwoInRlX29rIikpOwoJJnNldF9sYWJlbCgidGVfYnJlYWtfb3V0Iik7CSMgZWxzZSAlZXNwIC09IChwLXMpJjB4ZmZmICsgZnJhbWVzejsKCSZzdWIJKCRzMywkczApOwoJJmFuZAkoJHMzLDB4ZmZmKTsKCSZhZGQJKCRzMyw2NCsyNTYpOwoJJnN1YgkoJGtleSwkczMpOwoJJmFsaWduCSg0KTsKCSZzZXRfbGFiZWwoInRlX29rIik7CgoJJm1vdgkoJHMwLCZ3cGFyYW0oMCkpOwkjIGxvYWQgaW5wCgkmbW92CSgkczEsJndwYXJhbSgxKSk7CSMgbG9hZCBvdXQKCSZtb3YJKCRzMywmd3BhcmFtKDMpKTsJIyBsb2FkIGtleQoJJm1vdgkoJGFjYywmd3BhcmFtKDQpKTsJIyBsb2FkIGl2cAoKCSZleGNoCSgiZXNwIiwka2V5KTsKCSZhZGQJKCJlc3AiLDQpOwkJIyByZXNlcnZlIGZvciByZXR1cm4gYWRkcmVzcyEKCSZtb3YJKCRfZXNwLCRrZXkpOwkJIyBzYXZlICVlc3AKCgkmbW92CSgkX2lucCwkczApOwkJIyBzYXZlIGNvcHkgb2YgaW5wCgkmbW92CSgkX291dCwkczEpOwkJIyBzYXZlIGNvcHkgb2Ygb3V0CgkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGNvcHkgb2YgbGVuCgkmbW92CSgkX2tleSwkczMpOwkJIyBzYXZlIGNvcHkgb2Yga2V5CgkmbW92CSgkX2l2cCwkYWNjKTsJCSMgc2F2ZSBjb3B5IG9mIGl2cAoKCSZtb3YJKCRtYXJrLDApOwkJIyBjb3B5IG9mIGFlc19rZXktPnJvdW5kcyA9IDA7CglpZiAoJGNvbXByb21pc2UpIHsKCQkmY21wCSgkczIsJGNvbXByb21pc2UpOwoJCSZqYgkoJmxhYmVsKCJza2lwX2Vjb3B5IikpOwoJfQoJIyBkbyB3ZSBjb3B5IGtleSBzY2hlZHVsZSB0byBzdGFjaz8KCSZtb3YJKCRzMSBlcSAiZWJ4IiA/ICRzMSA6ICIiLCRzMyk7CgkmbW92CSgkczIgZXEgImVjeCIgPyAkczIgOiAiIiwyNDQvNCk7Cgkmc3ViCSgkczEsImVicCIpOwoJJm1vdgkoImVzaSIsJHMzKTsKCSZhbmQJKCRzMSwweGZmZik7CgkmbGVhCSgiZWRpIiwkYWVzX2tleSk7CgkmY21wCSgkczEsMjA0OCk7CgkmamIJKCZsYWJlbCgiZG9fZWNvcHkiKSk7CgkmY21wCSgkczEsNDA5Ni0yNDQpOwoJJmpiCSgmbGFiZWwoInNraXBfZWNvcHkiKSk7CgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiZG9fZWNvcHkiKTsKCQkmbW92CSgkX2tleSwiZWRpIik7CgkJJmRhdGFfd29yZCgweEE1RjNGNjg5KTsJIyByZXAgbW92c2QKCSZzZXRfbGFiZWwoInNraXBfZWNvcHkiKTsKCgkmbW92CSgkYWNjLCRzMCk7CgkmbW92CSgka2V5LDE2KTsKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCJwcmVmZXRjaF90ZSIpOwoJCSZtb3YJKCRzMCwmRFdQKDAsImVicCIpKTsKCQkmbW92CSgkczEsJkRXUCgzMiwiZWJwIikpOwoJCSZtb3YJKCRzMiwmRFdQKDY0LCJlYnAiKSk7CgkJJm1vdgkoJHMzLCZEV1AoOTYsImVicCIpKTsKCQkmbGVhCSgiZWJwIiwmRFdQKDEyOCwiZWJwIikpOwoJCSZkZWMJKCRrZXkpOwoJJmpuegkoJmxhYmVsKCJwcmVmZXRjaF90ZSIpKTsKCSZzdWIJKCJlYnAiLDIwNDgpOwoKCSZtb3YJKCRzMiwkX2xlbik7CgkmbW92CSgka2V5LCRfaXZwKTsKCSZ0ZXN0CSgkczIsMHhGRkZGRkZGMCk7CgkmanoJKCZsYWJlbCgiZW5jX3RhaWwiKSk7CQkjIHNob3J0IGlucHV0Li4uCgoJJm1vdgkoJHMwLCZEV1AoMCwka2V5KSk7CQkjIGxvYWQgaXYKCSZtb3YJKCRzMSwmRFdQKDQsJGtleSkpOwoKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCJlbmNfbG9vcCIpOwoJCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwoJCSZtb3YJKCRzMywmRFdQKDEyLCRrZXkpKTsKCgkJJnhvcgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgeG9yIGlucHV0IGRhdGEKCQkmeG9yCSgkczEsJkRXUCg0LCRhY2MpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRhY2MpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwkYWNjKSk7CgoJCSZtb3YJKCRrZXksJF9rZXkpOwkJIyBsb2FkIGtleQoJCSZjYWxsCSgiX3g4Nl9BRVNfZW5jcnlwdCIpOwoKCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKCQkmbW92CSgka2V5LCRfb3V0KTsJCSMgbG9hZCBvdXQKCgkJJm1vdgkoJkRXUCgwLCRrZXkpLCRzMCk7CSMgc2F2ZSBvdXRwdXQgZGF0YQoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJHMyLCRfbGVuKTsJCSMgbG9hZCBsZW4KCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCgkJJmxlYQkoJHMzLCZEV1AoMTYsJGtleSkpOwoJCSZtb3YJKCRfb3V0LCRzMyk7CQkjIHNhdmUgb3V0CgoJCSZzdWIJKCRzMiwxNik7CgkJJnRlc3QJKCRzMiwweEZGRkZGRkYwKTsKCQkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGxlbgoJJmpuegkoJmxhYmVsKCJlbmNfbG9vcCIpKTsKCSZ0ZXN0CSgkczIsMTUpOwoJJmpuegkoJmxhYmVsKCJlbmNfdGFpbCIpKTsKCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIGl2cAoJJm1vdgkoJHMyLCZEV1AoOCwka2V5KSk7CSMgcmVzdG9yZSBsYXN0IGR3b3JkcwoJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgc2F2ZSBpdmVjCgkmbW92CSgmRFdQKDQsJGFjYyksJHMxKTsKCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJJm1vdgkoJkRXUCgxMiwkYWNjKSwkczMpOwoKCSZjbXAJKCRtYXJrLDApOwkJIyB3YXMgdGhlIGtleSBzY2hlZHVsZSBjb3BpZWQ/CgkmbW92CSgiZWRpIiwkX2tleSk7CgkmamUJKCZsYWJlbCgic2tpcF9lemVybyIpKTsKCSMgemVybyBjb3B5IG9mIGtleSBzY2hlZHVsZQoJJm1vdgkoImVjeCIsMjQwLzQpOwoJJnhvcgkoImVheCIsImVheCIpOwoJJmFsaWduCSg0KTsKCSZkYXRhX3dvcmQoMHhBQkYzRjY4OSk7CSMgcmVwIHN0b3NkCgkmc2V0X2xhYmVsKCJza2lwX2V6ZXJvIikKCSZtb3YJKCJlc3AiLCRfZXNwKTsKCSZwb3BmCSgpOwogICAgJnNldF9sYWJlbCgiZW5jX291dCIpOwoJJmZ1bmN0aW9uX2VuZF9BKCk7CgkmcHVzaGYJKCk7CQkJIyBrbHVkZ2UsIG5ldmVyIGV4ZWN1dGVkCgogICAgJmFsaWduCSg0KTsKICAgICZzZXRfbGFiZWwoImVuY190YWlsIik7CgkmbW92CSgkczAsJGtleSBlcSAiZWRpIiA/ICRrZXkgOiAiIik7CgkmbW92CSgka2V5LCRfb3V0KTsJCQkjIGxvYWQgb3V0CgkmcHVzaAkoJHMwKTsJCQkJIyBwdXNoIGl2cAoJJm1vdgkoJHMxLDE2KTsKCSZzdWIJKCRzMSwkczIpOwoJJmNtcAkoJGtleSwkYWNjKTsJCQkjIGNvbXBhcmUgd2l0aCBpbnAKCSZqZQkoJmxhYmVsKCJlbmNfaW5fcGxhY2UiKSk7CgkmYWxpZ24JKDQpOwoJJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJIyByZXAgbW92c2IJIyBjb3B5IGlucHV0Cgkmam1wCSgmbGFiZWwoImVuY19za2lwX2luX3BsYWNlIikpOwogICAgJnNldF9sYWJlbCgiZW5jX2luX3BsYWNlIik7CgkmbGVhCSgka2V5LCZEV1AoMCwka2V5LCRzMikpOwogICAgJnNldF9sYWJlbCgiZW5jX3NraXBfaW5fcGxhY2UiKTsKCSZtb3YJKCRzMiwkczEpOwoJJnhvcgkoJHMwLCRzMCk7CgkmYWxpZ24JKDQpOwoJJmRhdGFfd29yZCgweEFBRjNGNjg5KTsJIyByZXAgc3Rvc2IJIyB6ZXJvIHRhaWwKCSZwb3AJKCRrZXkpOwkJCQkjIHBvcCBpdnAKCgkmbW92CSgkYWNjLCRfb3V0KTsJCQkjIG91dHB1dCBhcyBpbnB1dAoJJm1vdgkoJHMwLCZEV1AoMCwka2V5KSk7CgkmbW92CSgkczEsJkRXUCg0LCRrZXkpKTsKCSZtb3YJKCRfbGVuLDE2KTsJCQkjIGxlbj0xNgoJJmptcAkoJmxhYmVsKCJlbmNfbG9vcCIpKTsJCSMgb25lIG1vcmUgc3Bpbi4uLgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiZhbGlnbgkoNCk7CiZzZXRfbGFiZWwoIkRFQ1JZUFQiKTsKCSZsZWEgICAgKCJlYnAiLCZEV1AoJmxhYmVsKCJBRVNfVGQiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWJwIikpOwoKCSMgYWxsb2NhdGUgYWxpZ25lZCBzdGFjayBmcmFtZS4uLgoJJmxlYQkoJGtleSwmRFdQKC02NC0yNDQsImVzcCIpKTsKCSZhbmQJKCRrZXksLTY0KTsKCgkjIC4uLiBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgYWxpYXMgd2l0aCBBRVNfVGQgbW9kdWxvIDQwOTYKCSZtb3YJKCRzMCwiZWJwIik7CgkmbGVhCSgkczEsJkRXUCgyMDQ4KzI1NiwiZWJwIikpOwoJJm1vdgkoJHMzLCRrZXkpOwoJJmFuZAkoJHMwLDB4ZmZmKTsJCSMgcyA9ICVlYnAmMHhmZmYKCSZhbmQJKCRzMSwweGZmZik7CQkjIGUgPSAoJWVicCsyMDQ4KzI1NikmMHhmZmYKCSZhbmQJKCRzMywweGZmZik7CQkjIHAgPSAlZXNwJjB4ZmZmCgoJJmNtcAkoJHMzLCRzMSk7CQkjIGlmIChwPj1lKSAlZXNwID0tIChwLWUpOwoJJmpiCSgmbGFiZWwoInRkX2JyZWFrX291dCIpKTsKCSZzdWIJKCRzMywkczEpOwoJJnN1YgkoJGtleSwkczMpOwoJJmptcAkoJmxhYmVsKCJ0ZF9vayIpKTsKCSZzZXRfbGFiZWwoInRkX2JyZWFrX291dCIpOwkjIGVsc2UgJWVzcCAtPSAocC1zKSYweGZmZiArIGZyYW1lc3o7Cgkmc3ViCSgkczMsJHMwKTsKCSZhbmQJKCRzMywweGZmZik7CgkmYWRkCSgkczMsNjQrMjU2KTsKCSZzdWIJKCRrZXksJHMzKTsKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCJ0ZF9vayIpOwoKCSZtb3YJKCRzMCwmd3BhcmFtKDApKTsJIyBsb2FkIGlucAoJJm1vdgkoJHMxLCZ3cGFyYW0oMSkpOwkjIGxvYWQgb3V0CgkmbW92CSgkczMsJndwYXJhbSgzKSk7CSMgbG9hZCBrZXkKCSZtb3YJKCRhY2MsJndwYXJhbSg0KSk7CSMgbG9hZCBpdnAKCgkmZXhjaAkoImVzcCIsJGtleSk7CgkmYWRkCSgiZXNwIiw0KTsJCSMgcmVzZXJ2ZSBmb3IgcmV0dXJuIGFkZHJlc3MhCgkmbW92CSgkX2VzcCwka2V5KTsJCSMgc2F2ZSAlZXNwCgoJJm1vdgkoJF9pbnAsJHMwKTsJCSMgc2F2ZSBjb3B5IG9mIGlucAoJJm1vdgkoJF9vdXQsJHMxKTsJCSMgc2F2ZSBjb3B5IG9mIG91dAoJJm1vdgkoJF9sZW4sJHMyKTsJCSMgc2F2ZSBjb3B5IG9mIGxlbgoJJm1vdgkoJF9rZXksJHMzKTsJCSMgc2F2ZSBjb3B5IG9mIGtleQoJJm1vdgkoJF9pdnAsJGFjYyk7CQkjIHNhdmUgY29weSBvZiBpdnAKCgkmbW92CSgkbWFyaywwKTsJCSMgY29weSBvZiBhZXNfa2V5LT5yb3VuZHMgPSAwOwoJaWYgKCRjb21wcm9taXNlKSB7CgkJJmNtcAkoJHMyLCRjb21wcm9taXNlKTsKCQkmamIJKCZsYWJlbCgic2tpcF9kY29weSIpKTsKCX0KCSMgZG8gd2UgY29weSBrZXkgc2NoZWR1bGUgdG8gc3RhY2s/CgkmbW92CSgkczEgZXEgImVieCIgPyAkczEgOiAiIiwkczMpOwoJJm1vdgkoJHMyIGVxICJlY3giID8gJHMyIDogIiIsMjQ0LzQpOwoJJnN1YgkoJHMxLCJlYnAiKTsKCSZtb3YJKCJlc2kiLCRzMyk7CgkmYW5kCSgkczEsMHhmZmYpOwoJJmxlYQkoImVkaSIsJGFlc19rZXkpOwoJJmNtcAkoJHMxLDIwNDgrMjU2KTsKCSZqYgkoJmxhYmVsKCJkb19kY29weSIpKTsKCSZjbXAJKCRzMSw0MDk2LTI0NCk7CgkmamIJKCZsYWJlbCgic2tpcF9kY29weSIpKTsKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCJkb19kY29weSIpOwoJCSZtb3YJKCRfa2V5LCJlZGkiKTsKCQkmZGF0YV93b3JkKDB4QTVGM0Y2ODkpOwkjIHJlcCBtb3ZzZAoJJnNldF9sYWJlbCgic2tpcF9kY29weSIpOwoKCSZtb3YJKCRhY2MsJHMwKTsKCSZtb3YJKCRrZXksMTgpOwoJJmFsaWduCSg0KTsKCSZzZXRfbGFiZWwoInByZWZldGNoX3RkIik7CgkJJm1vdgkoJHMwLCZEV1AoMCwiZWJwIikpOwoJCSZtb3YJKCRzMSwmRFdQKDMyLCJlYnAiKSk7CgkJJm1vdgkoJHMyLCZEV1AoNjQsImVicCIpKTsKCQkmbW92CSgkczMsJkRXUCg5NiwiZWJwIikpOwoJCSZsZWEJKCJlYnAiLCZEV1AoMTI4LCJlYnAiKSk7CgkJJmRlYwkoJGtleSk7Cgkmam56CSgmbGFiZWwoInByZWZldGNoX3RkIikpOwoJJnN1YgkoImVicCIsMjA0OCsyNTYpOwoKCSZjbXAJKCRhY2MsJF9vdXQpOwoJJmplCSgmbGFiZWwoImRlY19pbl9wbGFjZSIpKTsJIyBpbi1wbGFjZSBwcm9jZXNzaW5nLi4uCgoJJm1vdgkoJGtleSwkX2l2cCk7CQkjIGxvYWQgaXZwCgkmbW92CSgkX3RtcCwka2V5KTsKCgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiZGVjX2xvb3AiKTsKCQkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJIyByZWFkIGlucHV0CgkJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgka2V5LCRfa2V5KTsJCSMgbG9hZCBrZXkKCQkmY2FsbAkoIl94ODZfQUVTX2RlY3J5cHQiKTsKCgkJJm1vdgkoJGtleSwkX3RtcCk7CQkjIGxvYWQgaXZwCgkJJm1vdgkoJGFjYywkX2xlbik7CQkjIGxvYWQgbGVuCgkJJnhvcgkoJHMwLCZEV1AoMCwka2V5KSk7CSMgeG9yIGl2CgkJJnhvcgkoJHMxLCZEV1AoNCwka2V5KSk7CgkJJnhvcgkoJHMyLCZEV1AoOCwka2V5KSk7CgkJJnhvcgkoJHMzLCZEV1AoMTIsJGtleSkpOwoKCQkmc3ViCSgkYWNjLDE2KTsKCQkmamMJKCZsYWJlbCgiZGVjX3BhcnRpYWwiKSk7CgkJJm1vdgkoJF9sZW4sJGFjYyk7CQkjIHNhdmUgbGVuCgkJJm1vdgkoJGFjYywkX2lucCk7CQkjIGxvYWQgaW5wCgkJJm1vdgkoJGtleSwkX291dCk7CQkjIGxvYWQgb3V0CgoJCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIHdyaXRlIG91dHB1dAoJCSZtb3YJKCZEV1AoNCwka2V5KSwkczEpOwoJCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGtleSksJHMzKTsKCgkJJm1vdgkoJF90bXAsJGFjYyk7CQkjIHNhdmUgaXZwCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCgkJJmxlYQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKCQkmbW92CSgkX291dCwka2V5KTsJCSMgc2F2ZSBvdXQKCgkmam56CSgmbGFiZWwoImRlY19sb29wIikpOwoJJm1vdgkoJGtleSwkX3RtcCk7CQkjIGxvYWQgdGVtcCBpdnAKICAgICZzZXRfbGFiZWwoImRlY19lbmQiKTsKCSZtb3YJKCRhY2MsJF9pdnApOwkJIyBsb2FkIHVzZXIgaXZwCgkmbW92CSgkczAsJkRXUCgwLCRrZXkpKTsJIyBsb2FkIGl2CgkmbW92CSgkczEsJkRXUCg0LCRrZXkpKTsKCSZtb3YJKCRzMiwmRFdQKDgsJGtleSkpOwoJJm1vdgkoJHMzLCZEV1AoMTIsJGtleSkpOwoJJm1vdgkoJkRXUCgwLCRhY2MpLCRzMCk7CSMgY29weSBiYWNrIHRvIHVzZXIKCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJJm1vdgkoJkRXUCg4LCRhY2MpLCRzMik7CgkmbW92CSgmRFdQKDEyLCRhY2MpLCRzMyk7Cgkmam1wCSgmbGFiZWwoImRlY19vdXQiKSk7CgogICAgJmFsaWduCSg0KTsKICAgICZzZXRfbGFiZWwoImRlY19wYXJ0aWFsIik7CgkmbGVhCSgka2V5LCRpdmVjKTsKCSZtb3YJKCZEV1AoMCwka2V5KSwkczApOwkjIGR1bXAgb3V0cHV0IHRvIHN0YWNrCgkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKCSZtb3YJKCZEV1AoOCwka2V5KSwkczIpOwoJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoJJmxlYQkoJHMyIGVxICJlY3giID8gJHMyIDogIiIsJkRXUCgxNiwkYWNjKSk7CgkmbW92CSgkYWNjIGVxICJlc2kiID8gJGFjYyA6ICIiLCRrZXkpOwoJJm1vdgkoJGtleSBlcSAiZWRpIiA/ICRrZXkgOiAiIiwkX291dCk7CSMgbG9hZCBvdXQKCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CSMgcmVwIG1vdnNiCQkjIGNvcHkgb3V0cHV0CgkmbW92CSgka2V5LCRfaW5wKTsJCQkJIyB1c2UgaW5wIGFzIHRlbXAgaXZwCgkmam1wCSgmbGFiZWwoImRlY19lbmQiKSk7CgogICAgJmFsaWduCSg0KTsKICAgICZzZXRfbGFiZWwoImRlY19pbl9wbGFjZSIpOwoJJnNldF9sYWJlbCgiZGVjX2luX3BsYWNlX2xvb3AiKTsKCQkmbGVhCSgka2V5LCRpdmVjKTsKCQkmbW92CSgkczAsJkRXUCgwLCRhY2MpKTsJIyByZWFkIGlucHV0CgkJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IHRvIHRlbXAKCQkmbW92CSgmRFdQKDQsJGtleSksJHMxKTsKCQkmbW92CSgmRFdQKDgsJGtleSksJHMyKTsKCQkmbW92CSgmRFdQKDEyLCRrZXkpLCRzMyk7CgoJCSZtb3YJKCRrZXksJF9rZXkpOwkJIyBsb2FkIGtleQoJCSZjYWxsCSgiX3g4Nl9BRVNfZGVjcnlwdCIpOwoKCQkmbW92CSgka2V5LCRfaXZwKTsJCSMgbG9hZCBpdnAKCQkmbW92CSgkYWNjLCRfb3V0KTsJCSMgbG9hZCBvdXQKCQkmeG9yCSgkczAsJkRXUCgwLCRrZXkpKTsJIyB4b3IgaXYKCQkmeG9yCSgkczEsJkRXUCg0LCRrZXkpKTsKCQkmeG9yCSgkczIsJkRXUCg4LCRrZXkpKTsKCQkmeG9yCSgkczMsJkRXUCgxMiwka2V5KSk7CgoJCSZtb3YJKCZEV1AoMCwkYWNjKSwkczApOwkjIHdyaXRlIG91dHB1dAoJCSZtb3YJKCZEV1AoNCwkYWNjKSwkczEpOwoJCSZtb3YJKCZEV1AoOCwkYWNjKSwkczIpOwoJCSZtb3YJKCZEV1AoMTIsJGFjYyksJHMzKTsKCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsKCQkmbW92CSgkX291dCwkYWNjKTsJCSMgc2F2ZSBvdXQKCgkJJmxlYQkoJGFjYywkaXZlYyk7CgkJJm1vdgkoJHMwLCZEV1AoMCwkYWNjKSk7CSMgcmVhZCB0ZW1wCgkJJm1vdgkoJHMxLCZEV1AoNCwkYWNjKSk7CgkJJm1vdgkoJHMyLCZEV1AoOCwkYWNjKSk7CgkJJm1vdgkoJHMzLCZEV1AoMTIsJGFjYykpOwoKCQkmbW92CSgmRFdQKDAsJGtleSksJHMwKTsJIyBjb3B5IGl2CgkJJm1vdgkoJkRXUCg0LCRrZXkpLCRzMSk7CgkJJm1vdgkoJkRXUCg4LCRrZXkpLCRzMik7CgkJJm1vdgkoJkRXUCgxMiwka2V5KSwkczMpOwoKCQkmbW92CSgkYWNjLCRfaW5wKTsJCSMgbG9hZCBpbnAKCgkJJmxlYQkoJGFjYywmRFdQKDE2LCRhY2MpKTsKCQkmbW92CSgkX2lucCwkYWNjKTsJCSMgc2F2ZSBpbnAKCgkJJm1vdgkoJHMyLCRfbGVuKTsJCSMgbG9hZCBsZW4KCQkmc3ViCSgkczIsMTYpOwoJCSZqYwkoJmxhYmVsKCJkZWNfaW5fcGxhY2VfcGFydGlhbCIpKTsKCQkmbW92CSgkX2xlbiwkczIpOwkJIyBzYXZlIGxlbgoJJmpuegkoJmxhYmVsKCJkZWNfaW5fcGxhY2VfbG9vcCIpKTsKCSZqbXAJKCZsYWJlbCgiZGVjX291dCIpKTsKCiAgICAmYWxpZ24JKDQpOwogICAgJnNldF9sYWJlbCgiZGVjX2luX3BsYWNlX3BhcnRpYWwiKTsKCSMgb25lIGNhbiBhcmd1ZSBpZiB0aGlzIGlzIGFjdHVhbGx5IHJlcXVpcmVkLi4uCgkmbW92CSgka2V5IGVxICJlZGkiID8gJGtleSA6ICIiLCRfb3V0KTsKCSZsZWEJKCRhY2MgZXEgImVzaSIgPyAkYWNjIDogIiIsJGl2ZWMpOwoJJmxlYQkoJGtleSwmRFdQKDAsJGtleSwkczIpKTsKCSZsZWEJKCRhY2MsJkRXUCgxNiwkYWNjLCRzMikpOwoJJm5lZwkoJHMyIGVxICJlY3giID8gJHMyIDogIiIpOwoJJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJIyByZXAgbW92c2IJIyByZXN0b3JlIHRhaWwKCiAgICAmYWxpZ24JKDQpOwogICAgJnNldF9sYWJlbCgiZGVjX291dCIpOwogICAgJmNtcAkoJG1hcmssMCk7CQkjIHdhcyB0aGUga2V5IHNjaGVkdWxlIGNvcGllZD8KICAgICZtb3YJKCJlZGkiLCRfa2V5KTsKICAgICZqZQkJKCZsYWJlbCgic2tpcF9kemVybyIpKTsKICAgICMgemVybyBjb3B5IG9mIGtleSBzY2hlZHVsZQogICAgJm1vdgkoImVjeCIsMjQwLzQpOwogICAgJnhvcgkoImVheCIsImVheCIpOwogICAgJmFsaWduCSg0KTsKICAgICZkYXRhX3dvcmQoMHhBQkYzRjY4OSk7CSMgcmVwIHN0b3NkCiAgICAmc2V0X2xhYmVsKCJza2lwX2R6ZXJvIikKICAgICZtb3YJKCJlc3AiLCRfZXNwKTsKICAgICZwb3BmCSgpOwomZnVuY3Rpb25fZW5kKCJBRVNfY2JjX2VuY3J5cHQiKTsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKCnN1YiBlbmNrZXkoKQp7CgkmbW92egkoImVzaSIsJkxCKCJlZHgiKSk7CQkjIHJrW2ldPj4wCgkmbW92CSgiZWJ4IiwmRFdQKDIsImVicCIsImVzaSIsOCkpOwoJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1tpXT4+OAoJJmFuZAkoImVieCIsMHhGRjAwMDAwMCk7CgkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJJm1vdgkoImVieCIsJkRXUCgyLCJlYnAiLCJlc2kiLDgpKTsKCSZzaHIJKCJlZHgiLDE2KTsKCSZhbmQJKCJlYngiLDB4MDAwMDAwRkYpOwoJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1tpXT4+MTYKCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkmbW92CSgiZWJ4IiwmRFdQKDAsImVicCIsImVzaSIsOCkpOwoJJm1vdnoJKCJlc2kiLCZIQigiZWR4IikpOwkJIyBya1tpXT4+MjQKCSZhbmQJKCJlYngiLDB4MDAwMEZGMDApOwoJJnhvcgkoImVheCIsImVieCIpOwoKCSZtb3YJKCJlYngiLCZEV1AoMCwiZWJwIiwiZXNpIiw4KSk7CgkmYW5kCSgiZWJ4IiwweDAwRkYwMDAwKTsKCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkmeG9yCSgiZWF4IiwmRFdQKDIwNDgsImVicCIsImVjeCIsNCkpOwkjIHJjb24KfQoKIyBpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKIyAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKJnB1YmxpY19sYWJlbCgiQUVTX1RlIik7CiZmdW5jdGlvbl9iZWdpbigiQUVTX3NldF9lbmNyeXB0X2tleSIpOwoJJm1vdgkoImVzaSIsJndwYXJhbSgwKSk7CQkjIHVzZXIgc3VwcGxpZWQga2V5CgkmbW92CSgiZWRpIiwmd3BhcmFtKDIpKTsJCSMgcHJpdmF0ZSBrZXkgc2NoZWR1bGUKCgkmdGVzdAkoImVzaSIsLTEpOwoJJmp6CSgmbGFiZWwoImJhZHBvaW50ZXIiKSk7CgkmdGVzdAkoImVkaSIsLTEpOwoJJmp6CSgmbGFiZWwoImJhZHBvaW50ZXIiKSk7CgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CgkmYmxpbmRwb3AoImVicCIpOwoJJmxlYQkoImVicCIsJkRXUCgmbGFiZWwoIkFFU19UZSIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCJlYnAiKSk7CgoJJm1vdgkoImVjeCIsJndwYXJhbSgxKSk7CQkjIG51bWJlciBvZiBiaXRzIGluIGtleQoJJmNtcAkoImVjeCIsMTI4KTsKCSZqZQkoJmxhYmVsKCIxMHJvdW5kcyIpKTsKCSZjbXAJKCJlY3giLDE5Mik7CgkmamUJKCZsYWJlbCgiMTJyb3VuZHMiKSk7CgkmY21wCSgiZWN4IiwyNTYpOwoJJmplCSgmbGFiZWwoIjE0cm91bmRzIikpOwoJJm1vdgkoImVheCIsLTIpOwkJCSMgaW52YWxpZCBudW1iZXIgb2YgYml0cwoJJmptcAkoJmxhYmVsKCJleGl0IikpOwoKICAgICZzZXRfbGFiZWwoIjEwcm91bmRzIik7CgkmbW92CSgiZWF4IiwmRFdQKDAsImVzaSIpKTsJCSMgY29weSBmaXJzdCA0IGR3b3JkcwoJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZtb3YJKCJlZHgiLCZEV1AoMTIsImVzaSIpKTsKCSZtb3YJKCZEV1AoMCwiZWRpIiksImVheCIpOwoJJm1vdgkoJkRXUCg0LCJlZGkiKSwiZWJ4Iik7CgkmbW92CSgmRFdQKDgsImVkaSIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMTIsImVkaSIpLCJlZHgiKTsKCgkmeG9yCSgiZWN4IiwiZWN4Iik7Cgkmam1wCSgmbGFiZWwoIjEwc2hvcnRjdXQiKSk7CgoJJmFsaWduCSg0KTsKCSZzZXRfbGFiZWwoIjEwbG9vcCIpOwoJCSZtb3YJKCJlYXgiLCZEV1AoMCwiZWRpIikpOwkJIyBya1swXQoJCSZtb3YJKCJlZHgiLCZEV1AoMTIsImVkaSIpKTsJCSMgcmtbM10KCSZzZXRfbGFiZWwoIjEwc2hvcnRjdXQiKTsKCQkmZW5ja2V5CSgpOwoKCQkmbW92CSgmRFdQKDE2LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzRdCgkJJnhvcgkoImVheCIsJkRXUCg0LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgyMCwiZWRpIiksImVheCIpOwkJIyBya1s1XQoJCSZ4b3IJKCJlYXgiLCZEV1AoOCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMjQsImVkaSIpLCJlYXgiKTsJCSMgcmtbNl0KCQkmeG9yCSgiZWF4IiwmRFdQKDEyLCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgyOCwiZWRpIiksImVheCIpOwkJIyBya1s3XQoJCSZpbmMJKCJlY3giKTsKCQkmYWRkCSgiZWRpIiwxNik7CgkJJmNtcAkoImVjeCIsMTApOwoJJmpsCSgmbGFiZWwoIjEwbG9vcCIpKTsKCgkmbW92CSgmRFdQKDgwLCJlZGkiKSwxMCk7CQkjIHNldHVwIG51bWJlciBvZiByb3VuZHMKCSZ4b3IJKCJlYXgiLCJlYXgiKTsKCSZqbXAJKCZsYWJlbCgiZXhpdCIpKTsKCQkKICAgICZzZXRfbGFiZWwoIjEycm91bmRzIik7CgkmbW92CSgiZWF4IiwmRFdQKDAsImVzaSIpKTsJCSMgY29weSBmaXJzdCA2IGR3b3JkcwoJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZtb3YJKCJlZHgiLCZEV1AoMTIsImVzaSIpKTsKCSZtb3YJKCZEV1AoMCwiZWRpIiksImVheCIpOwoJJm1vdgkoJkRXUCg0LCJlZGkiKSwiZWJ4Iik7CgkmbW92CSgmRFdQKDgsImVkaSIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMTIsImVkaSIpLCJlZHgiKTsKCSZtb3YJKCJlY3giLCZEV1AoMTYsImVzaSIpKTsKCSZtb3YJKCJlZHgiLCZEV1AoMjAsImVzaSIpKTsKCSZtb3YJKCZEV1AoMTYsImVkaSIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjAsImVkaSIpLCJlZHgiKTsKCgkmeG9yCSgiZWN4IiwiZWN4Iik7Cgkmam1wCSgmbGFiZWwoIjEyc2hvcnRjdXQiKSk7CgoJJmFsaWduCSg0KTsKCSZzZXRfbGFiZWwoIjEybG9vcCIpOwoJCSZtb3YJKCJlYXgiLCZEV1AoMCwiZWRpIikpOwkJIyBya1swXQoJCSZtb3YJKCJlZHgiLCZEV1AoMjAsImVkaSIpKTsJCSMgcmtbNV0KCSZzZXRfbGFiZWwoIjEyc2hvcnRjdXQiKTsKCQkmZW5ja2V5CSgpOwoKCQkmbW92CSgmRFdQKDI0LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzZdCgkJJnhvcgkoImVheCIsJkRXUCg0LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgyOCwiZWRpIiksImVheCIpOwkJIyBya1s3XQoJCSZ4b3IJKCJlYXgiLCZEV1AoOCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoMzIsImVkaSIpLCJlYXgiKTsJCSMgcmtbOF0KCQkmeG9yCSgiZWF4IiwmRFdQKDEyLCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgzNiwiZWRpIiksImVheCIpOwkJIyBya1s5XQoKCQkmY21wCSgiZWN4Iiw3KTsKCQkmamUJKCZsYWJlbCgiMTJicmVhayIpKTsKCQkmaW5jCSgiZWN4Iik7CgoJCSZ4b3IJKCJlYXgiLCZEV1AoMTYsImVkaSIpKTsKCQkmbW92CSgmRFdQKDQwLCJlZGkiKSwiZWF4Iik7CQkjIHJrWzEwXQoJCSZ4b3IJKCJlYXgiLCZEV1AoMjAsImVkaSIpKTsKCQkmbW92CSgmRFdQKDQ0LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzExXQoKCQkmYWRkCSgiZWRpIiwyNCk7Cgkmam1wCSgmbGFiZWwoIjEybG9vcCIpKTsKCgkmc2V0X2xhYmVsKCIxMmJyZWFrIik7CgkmbW92CSgmRFdQKDcyLCJlZGkiKSwxMik7CQkjIHNldHVwIG51bWJlciBvZiByb3VuZHMKCSZ4b3IJKCJlYXgiLCJlYXgiKTsKCSZqbXAJKCZsYWJlbCgiZXhpdCIpKTsKCiAgICAmc2V0X2xhYmVsKCIxNHJvdW5kcyIpOwoJJm1vdgkoImVheCIsJkRXUCgwLCJlc2kiKSk7CQkjIGNvcHkgZmlyc3QgOCBkd29yZHMKCSZtb3YJKCJlYngiLCZEV1AoNCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CgkmbW92CSgiZWR4IiwmRFdQKDEyLCJlc2kiKSk7CgkmbW92CSgmRFdQKDAsImVkaSIpLCJlYXgiKTsKCSZtb3YJKCZEV1AoNCwiZWRpIiksImVieCIpOwoJJm1vdgkoJkRXUCg4LCJlZGkiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDEyLCJlZGkiKSwiZWR4Iik7CgkmbW92CSgiZWF4IiwmRFdQKDE2LCJlc2kiKSk7CgkmbW92CSgiZWJ4IiwmRFdQKDIwLCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDI0LCJlc2kiKSk7CgkmbW92CSgiZWR4IiwmRFdQKDI4LCJlc2kiKSk7CgkmbW92CSgmRFdQKDE2LCJlZGkiKSwiZWF4Iik7CgkmbW92CSgmRFdQKDIwLCJlZGkiKSwiZWJ4Iik7CgkmbW92CSgmRFdQKDI0LCJlZGkiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDI4LCJlZGkiKSwiZWR4Iik7CgoJJnhvcgkoImVjeCIsImVjeCIpOwoJJmptcAkoJmxhYmVsKCIxNHNob3J0Y3V0IikpOwoKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCIxNGxvb3AiKTsKCQkmbW92CSgiZWR4IiwmRFdQKDI4LCJlZGkiKSk7CQkjIHJrWzddCgkmc2V0X2xhYmVsKCIxNHNob3J0Y3V0Iik7CgkJJm1vdgkoImVheCIsJkRXUCgwLCJlZGkiKSk7CQkjIHJrWzBdCgoJCSZlbmNrZXkJKCk7CgoJCSZtb3YJKCZEV1AoMzIsImVkaSIpLCJlYXgiKTsJCSMgcmtbOF0KCQkmeG9yCSgiZWF4IiwmRFdQKDQsImVkaSIpKTsKCQkmbW92CSgmRFdQKDM2LCJlZGkiKSwiZWF4Iik7CQkjIHJrWzldCgkJJnhvcgkoImVheCIsJkRXUCg4LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg0MCwiZWRpIiksImVheCIpOwkJIyBya1sxMF0KCQkmeG9yCSgiZWF4IiwmRFdQKDEyLCJlZGkiKSk7CgkJJm1vdgkoJkRXUCg0NCwiZWRpIiksImVheCIpOwkJIyBya1sxMV0KCgkJJmNtcAkoImVjeCIsNik7CgkJJmplCSgmbGFiZWwoIjE0YnJlYWsiKSk7CgkJJmluYwkoImVjeCIpOwoKCQkmbW92CSgiZWR4IiwiZWF4Iik7CgkJJm1vdgkoImVheCIsJkRXUCgxNiwiZWRpIikpOwkJIyBya1s0XQoJCSZtb3Z6CSgiZXNpIiwmTEIoImVkeCIpKTsJCSMgcmtbMTFdPj4wCgkJJm1vdgkoImVieCIsJkRXUCgyLCJlYnAiLCJlc2kiLDgpKTsKCQkmbW92egkoImVzaSIsJkhCKCJlZHgiKSk7CQkjIHJrWzExXT4+OAoJCSZhbmQJKCJlYngiLDB4MDAwMDAwRkYpOwoJCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkJJm1vdgkoImVieCIsJkRXUCgwLCJlYnAiLCJlc2kiLDgpKTsKCQkmc2hyCSgiZWR4IiwxNik7CgkJJmFuZAkoImVieCIsMHgwMDAwRkYwMCk7CgkJJm1vdnoJKCJlc2kiLCZMQigiZWR4IikpOwkJIyBya1sxMV0+PjE2CgkJJnhvcgkoImVheCIsImVieCIpOwoKCQkmbW92CSgiZWJ4IiwmRFdQKDAsImVicCIsImVzaSIsOCkpOwoJCSZtb3Z6CSgiZXNpIiwmSEIoImVkeCIpKTsJCSMgcmtbMTFdPj4yNAoJCSZhbmQJKCJlYngiLDB4MDBGRjAwMDApOwoJCSZ4b3IJKCJlYXgiLCJlYngiKTsKCgkJJm1vdgkoImVieCIsJkRXUCgyLCJlYnAiLCJlc2kiLDgpKTsKCQkmYW5kCSgiZWJ4IiwweEZGMDAwMDAwKTsKCQkmeG9yCSgiZWF4IiwiZWJ4Iik7CgoJCSZtb3YJKCZEV1AoNDgsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTJdCgkJJnhvcgkoImVheCIsJkRXUCgyMCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNTIsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTNdCgkJJnhvcgkoImVheCIsJkRXUCgyNCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNTYsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTRdCgkJJnhvcgkoImVheCIsJkRXUCgyOCwiZWRpIikpOwoJCSZtb3YJKCZEV1AoNjAsImVkaSIpLCJlYXgiKTsJCSMgcmtbMTVdCgoJCSZhZGQJKCJlZGkiLDMyKTsKCSZqbXAJKCZsYWJlbCgiMTRsb29wIikpOwoKCSZzZXRfbGFiZWwoIjE0YnJlYWsiKTsKCSZtb3YJKCZEV1AoNDgsImVkaSIpLDE0KTsJCSMgc2V0dXAgbnVtYmVyIG9mIHJvdW5kcwoJJnhvcgkoImVheCIsImVheCIpOwoJJmptcAkoJmxhYmVsKCJleGl0IikpOwoKICAgICZzZXRfbGFiZWwoImJhZHBvaW50ZXIiKTsKCSZtb3YJKCJlYXgiLC0xKTsKICAgICZzZXRfbGFiZWwoImV4aXQiKTsKJmZ1bmN0aW9uX2VuZCgiQUVTX3NldF9lbmNyeXB0X2tleSIpOwoKc3ViIGRlY2tleSgpCnsgbXkgKCRpLCRwdHIsJHRlLCR0ZCkgPSBAXzsKCgkmbW92CSgiZWF4IiwmRFdQKCRpLCRwdHIpKTsKCSZtb3YJKCJlZHgiLCJlYXgiKTsKCSZtb3Z6CSgiZWJ4IiwmSEIoImVheCIpKTsKCSZzaHIJKCJlZHgiLDE2KTsKCSZhbmQJKCJlYXgiLDB4RkYpOwoJJm1vdnoJKCJlYXgiLCZCUCgyLCR0ZSwiZWF4Iiw4KSk7CgkmbW92egkoImVieCIsJkJQKDIsJHRlLCJlYngiLDgpKTsKCSZtb3YJKCJlYXgiLCZEV1AoMCwkdGQsImVheCIsOCkpOwoJJnhvcgkoImVheCIsJkRXUCgzLCR0ZCwiZWJ4Iiw4KSk7CgkmbW92egkoImVieCIsJkhCKCJlZHgiKSk7CgkmYW5kCSgiZWR4IiwweEZGKTsKCSZtb3Z6CSgiZWR4IiwmQlAoMiwkdGUsImVkeCIsOCkpOwoJJm1vdnoJKCJlYngiLCZCUCgyLCR0ZSwiZWJ4Iiw4KSk7CgkmeG9yCSgiZWF4IiwmRFdQKDIsJHRkLCJlZHgiLDgpKTsKCSZ4b3IJKCJlYXgiLCZEV1AoMSwkdGQsImVieCIsOCkpOwoJJm1vdgkoJkRXUCgkaSwkcHRyKSwiZWF4Iik7Cn0KCiMgaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCiMgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCiZwdWJsaWNfbGFiZWwoIkFFU19UZCIpOwomcHVibGljX2xhYmVsKCJBRVNfVGUiKTsKJmZ1bmN0aW9uX2JlZ2luX0IoIkFFU19zZXRfZGVjcnlwdF9rZXkiKTsKCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMCkpOwoJJm1vdgkoImVjeCIsJndwYXJhbSgxKSk7CgkmbW92CSgiZWR4Iiwmd3BhcmFtKDIpKTsKCSZzdWIJKCJlc3AiLDEyKTsKCSZtb3YJKCZEV1AoMCwiZXNwIiksImVheCIpOwoJJm1vdgkoJkRXUCg0LCJlc3AiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDgsImVzcCIpLCJlZHgiKTsKCSZjYWxsCSgiQUVTX3NldF9lbmNyeXB0X2tleSIpOwoJJmFkZAkoImVzcCIsMTIpOwoJJmNtcAkoImVheCIsMCk7CgkmamUJKCZsYWJlbCgicHJvY2VlZCIpKTsKCSZyZXQJKCk7CgogICAgJnNldF9sYWJlbCgicHJvY2VlZCIpOwoJJnB1c2gJKCJlYnAiKTsKCSZwdXNoCSgiZWJ4Iik7CgkmcHVzaAkoImVzaSIpOwoJJnB1c2gJKCJlZGkiKTsKCgkmbW92CSgiZXNpIiwmd3BhcmFtKDIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMjQwLCJlc2kiKSk7CSMgcHVsbCBudW1iZXIgb2Ygcm91bmRzCgkmbGVhCSgiZWN4IiwmRFdQKDAsIiIsImVjeCIsNCkpOwoJJmxlYQkoImVkaSIsJkRXUCgwLCJlc2kiLCJlY3giLDQpKTsJIyBwb2ludGVyIHRvIGxhc3QgY2h1bmsKCgkmYWxpZ24JKDQpOwoJJnNldF9sYWJlbCgiaW52ZXJ0Iik7CQkJIyBpbnZlcnQgb3JkZXIgb2YgY2h1bmtzCgkJJm1vdgkoImVheCIsJkRXUCgwLCJlc2kiKSk7CgkJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkJJm1vdgkoImVjeCIsJkRXUCgwLCJlZGkiKSk7CgkJJm1vdgkoImVkeCIsJkRXUCg0LCJlZGkiKSk7CgkJJm1vdgkoJkRXUCgwLCJlZGkiKSwiZWF4Iik7CgkJJm1vdgkoJkRXUCg0LCJlZGkiKSwiZWJ4Iik7CgkJJm1vdgkoJkRXUCgwLCJlc2kiKSwiZWN4Iik7CgkJJm1vdgkoJkRXUCg0LCJlc2kiKSwiZWR4Iik7CgkJJm1vdgkoImVheCIsJkRXUCg4LCJlc2kiKSk7CgkJJm1vdgkoImVieCIsJkRXUCgxMiwiZXNpIikpOwoJCSZtb3YJKCJlY3giLCZEV1AoOCwiZWRpIikpOwoJCSZtb3YJKCJlZHgiLCZEV1AoMTIsImVkaSIpKTsKCQkmbW92CSgmRFdQKDgsImVkaSIpLCJlYXgiKTsKCQkmbW92CSgmRFdQKDEyLCJlZGkiKSwiZWJ4Iik7CgkJJm1vdgkoJkRXUCg4LCJlc2kiKSwiZWN4Iik7CgkJJm1vdgkoJkRXUCgxMiwiZXNpIiksImVkeCIpOwoJCSZhZGQJKCJlc2kiLDE2KTsKCQkmc3ViCSgiZWRpIiwxNik7CgkJJmNtcAkoImVzaSIsImVkaSIpOwoJJmpuZQkoJmxhYmVsKCJpbnZlcnQiKSk7CgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwoJJnNldF9sYWJlbCgicGljX3BvaW50Iik7CglibGluZHBvcCgiZWJwIik7CgkmbGVhCSgiZWRpIiwmRFdQKCZsYWJlbCgiQUVTX1RkIikuIi0iLiZsYWJlbCgicGljX3BvaW50IiksImVicCIpKTsKCSZsZWEJKCJlYnAiLCZEV1AoJmxhYmVsKCJBRVNfVGUiKS4iLSIuJmxhYmVsKCJwaWNfcG9pbnQiKSwiZWJwIikpOwoKCSZtb3YJKCJlc2kiLCZ3cGFyYW0oMikpOwoJJm1vdgkoImVjeCIsJkRXUCgyNDAsImVzaSIpKTsJIyBwdWxsIG51bWJlciBvZiByb3VuZHMKCSZkZWMJKCJlY3giKTsKCSZhbGlnbgkoNCk7Cgkmc2V0X2xhYmVsKCJwZXJtdXRlIik7CQkJIyBwZXJtdXRlIHRoZSBrZXkgc2NoZWR1bGUKCQkmYWRkCSgiZXNpIiwxNik7CgkJJmRlY2tleQkoMCwiZXNpIiwiZWJwIiwiZWRpIik7CgkJJmRlY2tleQkoNCwiZXNpIiwiZWJwIiwiZWRpIik7CgkJJmRlY2tleQkoOCwiZXNpIiwiZWJwIiwiZWRpIik7CgkJJmRlY2tleQkoMTIsImVzaSIsImVicCIsImVkaSIpOwoJCSZkZWMJKCJlY3giKTsKCSZqbnoJKCZsYWJlbCgicGVybXV0ZSIpKTsKCgkmeG9yCSgiZWF4IiwiZWF4Iik7CQkJIyByZXR1cm4gc3VjY2VzcwomZnVuY3Rpb25fZW5kKCJBRVNfc2V0X2RlY3J5cHRfa2V5Iik7CgomYXNtX2ZpbmlzaCgpOwo=