OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbZXhwZXJpbWVudGFsLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhdIFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxpYnx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1rcmI1XSBbc2N0cF0gWzM4Nl0gWy0tcHJlZml4PURJUl0gWy0tb3BlbnNzbGRpcj1PUEVOU1NMRElSXSBbLS13aXRoLXh4eFs9dnZ2XV0gWy0tdGVzdC1zYW5pdHldIG9zL2NvbXBpbGVyWzpmbGFnc11cbiI7CgojIE9wdGlvbnM6CiMKIyAtLW9wZW5zc2xkaXIgIGluc3RhbGwgT3BlblNTTCBpbiBPUEVOU1NMRElSIChEZWZhdWx0OiBESVIvc3NsIGlmIHRoZQojICAgICAgICAgICAgICAgLS1wcmVmaXggb3B0aW9uIGlzIGdpdmVuOyAvdXNyL2xvY2FsL3NzbCBvdGhlcndpc2UpCiMgLS1wcmVmaXggICAgICBwcmVmaXggZm9yIHRoZSBPcGVuU1NMIGluY2x1ZGUsIGxpYiBhbmQgYmluIGRpcmVjdG9yaWVzCiMgICAgICAgICAgICAgICAoRGVmYXVsdDogdGhlIE9QRU5TU0xESVIgZGlyZWN0b3J5KQojCiMgLS1pbnN0YWxsX3ByZWZpeCAgQWRkaXRpb25hbCBwcmVmaXggZm9yIHBhY2thZ2UgYnVpbGRlcnMgKGVtcHR5IGJ5CiMgICAgICAgICAgICAgICBkZWZhdWx0KS4gIFRoaXMgbmVlZG4ndCBiZSBzZXQgaW4gYWR2YW5jZSwgeW91IGNhbgojICAgICAgICAgICAgICAganVzdCBhcyB3ZWxsIHVzZSAibWFrZSBJTlNUQUxMX1BSRUZJWD0vd2hhdGV2ZXIgaW5zdGFsbCIuCiMKIyAtLXdpdGgta3JiNS1kaXIgIERlY2xhcmUgd2hlcmUgS2VyYmVyb3MgNSBsaXZlcy4gIFRoZSBsaWJyYXJpZXMgYXJlIGV4cGVjdGVkCiMJCXRvIGxpdmUgaW4gdGhlIHN1YmRpcmVjdG9yeSBsaWIvIGFuZCB0aGUgaGVhZGVyIGZpbGVzIGluCiMJCWluY2x1ZGUvLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIyAtLXdpdGgta3JiNS1saWIgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgbGlicmFyaWVzIGxpdmUuICBBIHZhbHVlIGlzCiMJCXJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvbGliKQojIC0td2l0aC1rcmI1LWluY2x1ZGUgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgaGVhZGVyIGZpbGVzIGxpdmUuICBBCiMJCXZhbHVlIGlzIHJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvaW5jbHVkZSkKIyAtLXdpdGgta3JiNS1mbGF2b3IgIERlY2xhcmUgd2hhdCBmbGF2b3Igb2YgS2VyYmVyb3MgNSBpcyB1c2VkLiAgQ3VycmVudGx5CiMJCXN1cHBvcnRlZCB2YWx1ZXMgYXJlICJNSVQiIGFuZCAiSGVpbWRhbCIuICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojCiMgLS10ZXN0LXNhbml0eSBNYWtlIGEgbnVtYmVyIG9mIHNhbml0eSBjaGVja3Mgb24gdGhlIGRhdGEgaW4gdGhpcyBmaWxlLgojICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRlYnVnZ2luZyB0b29sIGZvciBPcGVuU1NMIGRldmVsb3BlcnMuCiMKIyAtLWNyb3NzLWNvbXBpbGUtcHJlZml4IEFkZCBzcGVjaWZpZWQgcHJlZml4IHRvIGJpbnV0aWxzIGNvbXBvbmVudHMuCiMKIyBuby1ody14eHggICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZS4KIyAgICAgICAgICAgICAgIEdlbmVyaWMgT3BlblNTTC1zdHlsZSBtZXRob2RzIHJlbGF0aW5nIHRvIHRoaXMgc3VwcG9ydAojICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBjb21waWxlZCBidXQgcmV0dXJuIE5VTEwgaWYgdGhlIGhhcmR3YXJlCiMgICAgICAgICAgICAgICBzdXBwb3J0IGlzbid0IGNvbXBpbGVkLgojIG5vLWh3ICAgICAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3IgYW55IGNyeXB0byBoYXJkd2FyZS4KIyBbbm8tXXRocmVhZHMgIFtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBhIGxpYnJhcnkgdGhhdCBpcyBzdWl0YWJsZSBmb3IKIyAgICAgICAgICAgICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zIChkZWZhdWx0IGlzICJ0aHJlYWRzIiBpZiB3ZQojICAgICAgICAgICAgICAga25vdyBob3cgdG8gZG8gaXQpCiMgW25vLV1zaGFyZWQJW2Rvbid0XSB0cnkgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgd2hlbiBzdXBwb3J0ZWQuCiMgbm8tYXNtICAgICAgICBkbyBub3QgdXNlIGFzc2VtYmxlcgojIG5vLWRzbyAgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IG5hdGl2ZSBzaGFyZWQtbGlicmFyeSBtZXRob2RzLiBUaGlzCiMgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGF0IGFsbCBtZXRob2RzIGp1c3QgcmV0dXJuIE5VTEwuCiMgbm8ta3JiNSAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgS1JCNSBsaWJyYXJ5IG9yIGNvZGUuCiMgW25vLV16bGliICAgICBbZG9uJ3RdIGNvbXBpbGUgc3VwcG9ydCBmb3IgemxpYiBjb21wcmVzc2lvbi4KIyB6bGliLWR5bmFtaWMJTGlrZSAiemxpYiIsIGJ1dCB0aGUgemxpYiBsaWJyYXJ5IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2hhcmVkCiMJCWxpYnJhcnkgYW5kIHdpbGwgYmUgbG9hZGVkIGluIHJ1bi10aW1lIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcnkuCiMgc2N0cCAgICAgICAgICBpbmNsdWRlIFNDVFAgc3VwcG9ydAojIDM4NiAgICAgICAgICAgZ2VuZXJhdGUgODAzODYgY29kZQojIG5vLXNzZTIJZGlzYWJsZXMgSUEtMzIgU1NFMiBjb2RlLCBhYm92ZSBvcHRpb24gaW1wbGllcyBuby1zc2UyCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCiMgTWluaW11bSB3YXJuaW5nIG9wdGlvbnMuLi4gYW55IGNvbnRyaWJ1dGlvbnMgdG8gT3BlblNTTCBzaG91bGQgYXQgbGVhc3QgZ2V0CiMgcGFzdCB0aGVzZS4gCgpteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMgLURQRURBTlRJQyAtV25vLWxvbmctbG9uZyAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV3NoYWRvdyAtV2Zvcm1hdCAtV2Vycm9yIC1EQ1JZUFRPX01ERUJVR19BTEwgLURDUllQVE9fTURFQlVHX0FCT1JUIC1EUkVGX0NIRUNLIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIjsKCm15ICRzdHJpY3Rfd2FybmluZ3MgPSAwOwoKbXkgJHg4Nl9nY2NfZGVzPSJERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIjsKCiMgTUQyX0NIQVIgc2xhZ3MgcGVudGl1bSBwcm9zCm15ICR4ODZfZ2NjX29wdHM9IlJDNF9JTkRFWCBNRDJfSU5UIjsKCiMgTU9ESUZZIFRIRVNFIFBBUkFNRVRFUlMgSUYgWU9VIEFSRSBHT0lORyBUTyBVU0UgVEhFICd1dGlsL3NwZWVkLnNoIFNDUklQVAojIERvbid0IHdvcnJ5IGFib3V0IHRoZXNlIG5vcm1hbGx5CgpteSAkdGNjPSJjYyI7Cm15ICR0ZmxhZ3M9Ii1mYXN0IC1YYSI7Cm15ICR0Ym5fbXVsPSIiOwpteSAkdGxpYj0iLWxuc2wgLWxzb2NrZXQiOwojJGJpdHMxPSJTSVhURUVOX0JJVCAiOwojJGJpdHMyPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czE9IlRISVJUWV9UV09fQklUICI7Cm15ICRiaXRzMj0iU0lYVFlfRk9VUl9CSVQgIjsKCm15ICR4ODZfYXNtPSJ4ODZjcHVpZC5vOmJuLTU4Ni5vIGNvLTU4Ni5vIHg4Ni1tb250Lm8geDg2LWdmMm0ubzpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXMtNTg2Lm8gdnBhZXMteDg2Lm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86Y21sbC14ODYubzpnaGFzaC14ODYubzoiOwoKbXkgJHg4Nl9lbGZfYXNtPSIkeDg2X2FzbTplbGYiOwoKbXkgJHg4Nl82NF9hc209Ing4Nl82NGNwdWlkLm86eDg2XzY0LWdjYy5vIHg4Nl82NC1tb250Lm8geDg2XzY0LW1vbnQ1Lm8geDg2XzY0LWdmMm0ubyBtb2RleHA1MTIteDg2XzY0Lm86OmFlcy14ODZfNjQubyB2cGFlcy14ODZfNjQubyBic2Flcy14ODZfNjQubyBhZXNuaS14ODZfNjQubyBhZXNuaS1zaGExLXg4Nl82NC5vOjptZDUteDg2XzY0Lm86c2hhMS14ODZfNjQubyBzaGEyNTYteDg2XzY0Lm8gc2hhNTEyLXg4Nl82NC5vOjpyYzQteDg2XzY0Lm8gcmM0LW1kNS14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNjLm86Z2hhc2gteDg2XzY0Lm86IjsKbXkgJGlhNjRfYXNtPSJpYTY0Y3B1aWQubzpibi1pYTY0Lm8gaWE2NC1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vIHJjNF9za2V5Lm86Ojo6OmdoYXNoLWlhNjQubzo6dm9pZCI7Cm15ICRzcGFyY3Y5X2FzbT0ic3BhcmN2OWNhcC5vIHNwYXJjY3B1aWQubzpibi1zcGFyY3Y5Lm8gc3BhcmN2OS1tb250Lm8gc3BhcmN2OWEtbW9udC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1zcGFyY3Y5Lm86OjpzaGExLXNwYXJjdjkubyBzaGEyNTYtc3BhcmN2OS5vIHNoYTUxMi1zcGFyY3Y5Lm86Ojo6Ojo6Z2hhc2gtc3BhcmN2OS5vOjp2b2lkIjsKbXkgJHNwYXJjdjhfYXNtPSI6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6Ojo6OnZvaWQiOwpteSAkYWxwaGFfYXNtPSJhbHBoYWNwdWlkLm86Ym5fYXNtLm8gYWxwaGEtbW9udC5vOjo6OjpzaGExLWFscGhhLm86Ojo6Ojo6Z2hhc2gtYWxwaGEubzo6dm9pZCI7Cm15ICRtaXBzMzJfYXNtPSI6Ym4tbWlwcy5vOjphZXNfY2JjLm8gYWVzLW1pcHMubzo6OnNoYTEtbWlwcy5vIHNoYTI1Ni1taXBzLm86Ojo6Ojo6OiI7Cm15ICRtaXBzNjRfYXNtPSI6Ym4tbWlwcy5vIG1pcHMtbW9udC5vOjphZXNfY2JjLm8gYWVzLW1pcHMubzo6OnNoYTEtbWlwcy5vIHNoYTI1Ni1taXBzLm8gc2hhNTEyLW1pcHMubzo6Ojo6Ojo6IjsKbXkgJHMzOTB4X2FzbT0iczM5MHhjYXAubyBzMzkweGNwdWlkLm86Ym4tczM5MHgubyBzMzkweC1tb250Lm8gczM5MHgtZ2YybS5vOjphZXMtczM5MHgubyBhZXMtY3RyLm8gYWVzLXh0cy5vOjo6c2hhMS1zMzkweC5vIHNoYTI1Ni1zMzkweC5vIHNoYTUxMi1zMzkweC5vOjpyYzQtczM5MHgubzo6Ojo6Z2hhc2gtczM5MHgubzoiOwpteSAkYXJtdjRfYXNtPSJhcm1jYXAubyBhcm12NGNwdWlkLm86Ym5fYXNtLm8gYXJtdjQtbW9udC5vIGFybXY0LWdmMm0ubzo6YWVzX2NiYy5vIGFlcy1hcm12NC5vOjo6c2hhMS1hcm12NC1sYXJnZS5vIHNoYTI1Ni1hcm12NC5vIHNoYTUxMi1hcm12NC5vOjo6Ojo6OmdoYXNoLWFybXY0Lm86OnZvaWQiOwpteSAkcGFyaXNjMTFfYXNtPSJwYXJpc2NpZC5vOmJuX2FzbS5vIHBhcmlzYy1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wYXJpc2Mubzo6OnNoYTEtcGFyaXNjLm8gc2hhMjU2LXBhcmlzYy5vIHNoYTUxMi1wYXJpc2Mubzo6cmM0LXBhcmlzYy5vOjo6OjpnaGFzaC1wYXJpc2Mubzo6MzIiOwpteSAkcGFyaXNjMjBfYXNtPSJwYXJpc2NpZC5vOnBhLXJpc2MyVy5vIHBhcmlzYy1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wYXJpc2Mubzo6OnNoYTEtcGFyaXNjLm8gc2hhMjU2LXBhcmlzYy5vIHNoYTUxMi1wYXJpc2Mubzo6cmM0LXBhcmlzYy5vOjo6OjpnaGFzaC1wYXJpc2Mubzo6NjQiOwpteSAkcHBjMzJfYXNtPSJwcGNjcHVpZC5vIHBwY2NhcC5vOmJuLXBwYy5vIHBwYy1tb250Lm8gcHBjNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcHBjLm86OjpzaGExLXBwYy5vIHNoYTI1Ni1wcGMubzo6Ojo6Ojo6IjsKbXkgJHBwYzY0X2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBwYy5vOjo6c2hhMS1wcGMubyBzaGEyNTYtcHBjLm8gc2hhNTEyLXBwYy5vOjo6Ojo6OjoiOwpteSAkbm9fYXNtPSI6Ojo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKCiMgQXMgZm9yICRCU0R0aHJlYWRzLiBJZGVhIGlzIHRvIG1haW50YWluICJjb2xsZWN0aXZlIiBzZXQgb2YgZmxhZ3MsCiMgd2hpY2ggd291bGQgY292ZXIgYWxsIEJTRCBmbGF2b3JzLiAtcHRocmVhZCBhcHBsaWVzIHRvIHRoZW0gYWxsLCAKIyBidXQgaXMgdHJlYXRlZCBkaWZmZXJlbnRseS4gT3BlbkJTRCBleHBhbmRzIGlzIGFzIC1EX1BPU0lYX1RIUkVBRAojIC1sY19yLCB3aGljaCBpcyBzdWZmaWNpZW50LiBGcmVlQlNEIDQueCBleHBhbmRzIGl0IGFzIC1sY19yLAojIHdoaWNoIGhhcyB0byBiZSBhY2NvbXBhbmllZCBieSBleHBsaWNpdCAtRF9USFJFQURfU0FGRSBhbmQKIyBzb21ldGltZXMgLURfUkVFTlRSQU5ULiBGcmVlQlNEIDUueCBleHBhbmRzIGl0IGFzIC1sY19yLCB3aGljaAojIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnQ/Cm15ICRCU0R0aHJlYWRzPSItcHRocmVhZCAtRF9USFJFQURfU0FGRSAtRF9SRUVOVFJBTlQiOwoKI2NvbmZpZy1zdHJpbmcJJGNjIDogJGNmbGFncyA6ICR1bmlzdGQgOiAkdGhyZWFkX2NmbGFnIDogJHN5c19pZCA6ICRsZmxhZ3MgOiAkYm5fb3BzIDogJGNwdWlkX29iaiA6ICRibl9vYmogOiAkZGVzX29iaiA6ICRhZXNfb2JqIDogJGJmX29iaiA6ICRtZDVfb2JqIDogJHNoYTFfb2JqIDogJGNhc3Rfb2JqIDogJHJjNF9vYmogOiAkcm1kMTYwX29iaiA6ICRyYzVfb2JqIDogJHdwX29iaiA6ICRjbWxsX29iaiA6ICRtb2Rlc19vYmogOiAkZW5naW5lc19vYmogOiAkZHNvX3NjaGVtZSA6ICRzaGFyZWRfdGFyZ2V0IDogJHNoYXJlZF9jZmxhZyA6ICRzaGFyZWRfbGRmbGFnIDogJHNoYXJlZF9leHRlbnNpb24gOiAkcmFubGliIDogJGFyZmxhZ3MgOiAkbXVsdGlsaWIKCm15ICV0YWJsZT0oCiMgRmlsZSAnVEFCTEUnIChjcmVhdGVkIGJ5ICdtYWtlIFRBQkxFJykgY29udGFpbnMgdGhlIGRhdGEgZnJvbSB0aGlzIGxpc3QsCiMgZm9ybWF0dGVkIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCgoKIyJiIiwJCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9OiR7dGJuX211bH06OiIsCiMiYmwtNGMtMmMiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIE1EMl9DSEFSOiR7dGJuX211bH06OiIsCiMiYmwtNGMtcmkiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIFJDNF9JTkRFWDoke3Ribl9tdWx9OjoiLAojImIyLWlzLXJpLWRwIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMn1JREVBX1NIT1JUIFJDNF9JTkRFWCBERVNfUFRSOiR7dGJuX211bH06OiIsCgojIE91ciBkZXZlbG9wbWVudCBjb25maWdzCiJwdXJpZnkiLAkicHVyaWZ5IGdjYzotZyAtRFBVUklGWSAtV2FsbDo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDo6OjoiLAoiZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nZ2RiIC1nMiAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6Oih1bmtub3duKTo6LWxlZmVuY2U6Ojo6IiwKImRlYnVnLWJlbiIsCSJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1PMiAtcGlwZTo6KHVua25vd24pOjo6OjoiLAoiZGVidWctYmVuLW9wZW5ic2QiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZC1kZWJ1ZyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tZGVidWciLAkiZ2NjNDQ6JGdjY19kZXZ0ZWFtX3dhcm4gLURCTl9ERUJVRyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURERUJVR19VTlVTRUQgLWczIC1PMiAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1tYWNvcyIsCSJjYzokZ2NjX2RldnRlYW1fd2FybiAtYXJjaCBpMzg2IC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1ET1BFTlNTTF9USFJFQURTIC1EX1JFRU5UUkFOVCAtRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCAtTzMgLURMX0VORElBTiAtZzMgLXBpcGU6Oih1bmtub3duKTo6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3Q6Ojo6IiwKImRlYnVnLWJlbi1tYWNvcy1nY2M0NiIsCSJnY2MtbXAtNC42OiRnY2NfZGV2dGVhbV93YXJuIC1XY29udmVyc2lvbiAtREJOX0RFQlVHIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRERFQlVHX1VOVVNFRCAtRE9QRU5TU0xfVEhSRUFEUyAtRF9SRUVOVFJBTlQgLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0ggLU8zIC1ETF9FTkRJQU4gLWczIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLW5vLW9wdCIsCSJnY2M6IC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUcgLVdlcnJvciAtRExfRU5ESUFOIC1EVEVSTUlPUyAtV2FsbCAtZzM6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXJzZSIsImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1waXBlIC1PIC1nIC1nZ2RiMyAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLWJvZG8iLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ09ORl9ERUJVRyAtREJJT19QQUlSX0RFQlVHIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiZGVidWctdWxmIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9uczo6OkNZR1dJTjMyOjo6JHtub19hc219OndpbjMyOmN5Z3dpbi1zaGFyZWQ6OjouZGxsIiwKImRlYnVnLXN0ZXZlNjQiLCAiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLWc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUzMiIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW0zMiAtRExfRU5ESUFOIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUtb3B0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1PMyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZiIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1lbGYtZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmYzMiIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtTzEgLWdnZGIyIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZjY0IiwiZ2NjOi1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQk5fU1RSSUNUIC1EUFVSSUZZIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIC1ET1BFTlNTTF9OT19BU00gLURPUEVOU1NMX05PX0lOTElORV9BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRFBFREFOVElDIC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1pYTMyLWFlcyIsICJnY2M6LURBRVNfRVhQRVJJTUVOVEFMIC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ong4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubzpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXNfeDg2Y29yZS5vIGFlc19jYmMubyBhZXNuaS14ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYtNTg2Lm8gc2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2Lm86d3BfYmxvY2subyB3cC1tbXgubzo6Z2hhc2gteDg2Lm86OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWdlbmVyaWMzMiIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURURVJNSU8gLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1nZW5lcmljNjQiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EVEVSTUlPIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC14ODZfNjQiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImRpc3QiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyBCYXNpYyBjb25maWdzIHRoYXQgc2hvdWxkIHdvcmsgb24gYW55ICgzMiBhbmQgbGVzcyBiaXQpIGJveAoiZ2NjIiwJCSJnY2M6LU8zOjoodW5rbm93bik6OjpCTl9MTE9ORzo6OiIsCiJjYyIsCQkiY2M6LU86Oih1bmtub3duKTo6Ojo6OiIsCgojIyMjVk9TIENvbmZpZ3VyYXRpb25zCiJ2b3MtZ2NjIiwiZ2NjOi1PMyAtV2FsbCAtRE9QRU5TU0xfU1lTTkFNRV9WT1MgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURfVk9TX0VYVEVOREVEX05BTUVTIC1EQl9FTkRJQU46Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKImRlYnVnLXZvcy1nY2MiLCJnY2M6LU8wIC1nIC1XYWxsIC1ET1BFTlNTTF9TWVNOQU1FX1ZPUyAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtRF9WT1NfRVhURU5ERURfTkFNRVMgLURCX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUc6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBHTlUgQyBzZXR1cHMKIyAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSBzd2l0Y2hlcyBvZmYgaW5saW5lIGFzc2VtYmxlci4gV2UgaGF2ZSB0byBkbyBpdAojIGhlcmUgYmVjYXVzZSB3aGVuZXZlciBHTlUgQyBpbnN0YW50aWF0ZXMgYW4gYXNzZW1ibGVyIHRlbXBsYXRlIGl0CiMgc3Vycm91bmRzIGl0IHdpdGggI0FQUCAjTk9fQVBQIGNvbW1lbnQgcGFpciB3aGljaCAoYXQgbGVhc3QgU29sYXJpcwojIDdfeDg2KSAvdXNyL2Njcy9iaW4vYXMgZmFpbHMgdG8gYXNzZW1ibGUgd2l0aCAiSWxsZWdhbCBtbmVtb25pYyIKIyBlcnJvciBtZXNzYWdlLgoic29sYXJpcy14ODYtZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbCAtRExfRU5ESUFOIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1zaGFyZWQgLXN0YXRpYy1saWJnY2MgbWlnaHQgYXBwZWFyIGNvbnRyb3ZlcnNpYWwsIGJ1dCBtb2R1bGVzIHRha2VuCiMgZnJvbSBzdGF0aWMgbGliZ2NjIGRvIG5vdCBoYXZlIHJlbG9jYXRpb25zIGFuZCBsaW5raW5nIHRoZW0gaW50byBvdXIKIyBzaGFyZWQgb2JqZWN0cyBkb2Vzbid0IGhhdmUgYW55IG5lZ2F0aXZlIHNpZGUtZWZmZWN0cy4gT24gdGhlIGNvbnRyYXJ5LAojIGRvaW5nIHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBnY2Mgc2hhcmVkIGJ1aWxkIHdpdGggU3VuIEMuIEdpdmVuCiMgdGhhdCBnY2MgZ2VuZXJhdGVzIGZhc3RlciBjb2RlIFt0aGFua3MgdG8gaW5saW5lIGFzc2VtYmxlcl0sIEkgd291bGQKIyBhY3R1YWxseSByZWNvbW1lbmQgdG8gY29uc2lkZXIgdXNpbmcgZ2NjIHNoYXJlZCBidWlsZCBldmVuIHdpdGggdmVuZG9yCiMgY29tcGlsZXI6LSkKIwkJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KInNvbGFyaXM2NC14ODZfNjQtZ2NjIiwiZ2NjOi1tNjQgLU8zIC1XYWxsIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6LzY0IiwKIAojIyMjIFNvbGFyaXMgeDg2IHdpdGggU3VuIEMgc2V0dXBzCiJzb2xhcmlzLXg4Ni1jYyIsImNjOi1mYXN0IC1PIC1YYTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQteDg2XzY0LWNjIiwiY2M6LWZhc3QgLXhhcmNoPWFtZDY0IC14c3RyY29uc3QgLVhhIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LXhhcmNoPWFtZDY0IC1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6LzY0IiwKCiMjIyMgU1BBUkMgU29sYXJpcyB3aXRoIEdOVSBDIHNldHVwcwoic29sYXJpcy1zcGFyY3Y3LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LW12OCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1tMzIgc2hvdWxkIGJlIHNhZmUgdG8gYWRkIGFzIGxvbmcgYXMgZHJpdmVyIHJlY29nbml6ZXMgLW1jcHU9dWx0cmFzcGFyYwoic29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQtc3BhcmN2OS1nY2MiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1PMyAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCiMjIyMKImRlYnVnLXNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtTyAtZyAtbXY4IC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLURQRURBTlRJQyAtTyAtZyAtbWNwdT11bHRyYXNwYXJjIC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV25vLWxvbmctbG9uZyAtRF9fRVhURU5TSU9OU19fIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBTdW4gQyBzZXR1cHMKIyBTQzQuMCBkb2Vzbid0IHBhc3MgJ21ha2UgdGVzdCcsIHVwZ3JhZGUgdG8gU0M1LjAgb3IgU0M0LjIuCiMgU0M0LjIgaXMgb2ssIGJldHRlciB0aGFuIGdjYyBldmVuIG9uIGJuIGFzIGxvbmcgYXMgeW91IHRlbGwgaXQgLXhhcmNoPXY4CiMgU0M1LjAgbm90ZTogQ29tcGlsZXIgY29tbW9uIHBhdGNoIDEwNzM1Ny0wMSBvciBsYXRlciBpcyByZXF1aXJlZCEKInNvbGFyaXMtc3BhcmN2Ny1jYyIsImNjOi14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzoteGFyY2g9djggLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY4cGx1cyAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djkgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD12OSAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTovdXNyL2Njcy9iaW4vYXIgcnM6Oi82NCIsCiMjIyMKImRlYnVnLXNvbGFyaXMtc3BhcmN2OC1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLXhhcmNoPXY4IC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsIAoKIyMjIyBTdW5PUyBjb25maWdzLCBhc3N1bWluZyBzcGFyYyBmb3IgdGhlIGdjYyBvbmUuCiMic3Vub3MtY2MiLCAiY2M6LU80IC1ETk9QUk9UTyAtRE5PQ09OU1Q6Oih1bmtub3duKTpTVU5PUzo6REVTX1VOUk9MTDoke25vX2FzbX06OiIsCiJzdW5vcy1nY2MiLCJnY2M6LU8zIC1tdjggLURzc2l6ZV90PWludDo6KHVua25vd24pOlNVTk9TOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUFRSIERFU19SSVNDMToke25vX2FzbX06OiIsCgojIyMjIElSSVggNS54IGNvbmZpZ3MKIyAtbWlwczIgZmxhZyBpcyBhZGRlZCBieSAuL2NvbmZpZyB3aGVuIGFwcHJvcHJpYXRlLgoiaXJpeC1nY2MiLCJnY2M6LU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElSSVggNi54IGNvbmZpZ3MKIyBPbmx5IE4zMiBhbmQgTjY0IEFCSXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgTzMyIEFCSSBidWlsZCwgaW52b2tlCiMgJy4vQ29uZmlndXJlIGlyaXgtY2MgLW8zMicgbWFudWFsbHkuCiJpcml4LW1pcHMzLWdjYyIsImdjYzotbWFiaT1uMzIgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiJpcml4LW1pcHMzLWNjIiwgImNjOi1uMzIgLW1pcHMzIC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1HMCAtcmRhdGFfc2hhcmVkIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpERVNfUFRSIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6JHttaXBzNjRfYXNtfTpuMzI6ZGxmY246aXJpeC1zaGFyZWQ6Oi1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiMgTjY0IEFCSSBidWlsZHMuCiJpcml4NjQtbWlwczQtZ2NjIiwiZ2NjOi1tYWJpPTY0IC1taXBzNCAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiaXJpeDY0LW1pcHM0LWNjIiwgImNjOi02NCAtbWlwczQgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKCiMjIyMgVW5pZmllZCBIUC1VWCBBTlNJIEMgY29uZmlncy4KIyBTcGVjaWFsIG5vdGVzOgojIC0gT3JpZ2luYWxseSB3ZSB3ZXJlIG9wdGltaXppbmcgYXQgK080IGxldmVsLiBJdCBzaG91bGQgYmUgbm90ZWQKIyAgIHRoYXQgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuICtPMyBhbmQgK080IGlzIGdsb2JhbCBpbnRlci0KIyAgIHByb2NlZHVyYWwgYW5hbHlzaXMuIEFzIGl0IGhhcyB0byBiZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBsaW5rCiMgICBzdGFnZSB0aGUgY29tcGlsZXIgbGVhdmVzIGJlaGluZCBjZXJ0YWluIHBzZXVkby1jb2RlIGluIGxpYiouYQojICAgd2hpY2ggbWlnaHQgYmUgcmVsZWFzZSBvciBldmVuIHBhdGNoIGxldmVsIHNwZWNpZmljLiBHZW5lcmF0aW5nCiMgICB0aGUgbWFjaGluZSBjb2RlIGZvciBhbmQgYW5hbHl6aW5nIHRoZSAqd2hvbGUqIHByb2dyYW0gYXBwZWFycwojICAgdG8gYmUgKmV4dHJlbWVseSogbWVtb3J5IGRlbWFuZGluZyB3aGlsZSB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBpcwojICAgYWN0dWFsbHkgcXVlc3Rpb25hYmxlLiBUaGUgc2l0dWF0aW9uIGlzIGludGVuc2lmaWVkIGJ5IHRoZSBkZWZhdWx0CiMgICBIUC1VWCBkYXRhIHNldCBzaXplIGxpbWl0IChpbmZhbW91cyAnbWF4ZHNpeicgdHVuYWJsZSkgb2YgNjRNQgojICAgd2hpY2ggaXMgd2F5IHRvbyBsb3cgZm9yICtPNC4gSW4gb3RoZXIgd29yZHMsIGRvZXNuJ3QgK08zIG1ha2UKIyAgIG1vcmUgc2Vuc2U/CiMgLSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSFAgY29tcGlsZXIgYnkgZGVmYXVsdCBnZW5lcmF0ZXMgY29kZQojICAgc3VpdGFibGUgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgaG9zdCB5b3UncmUgY3VycmVudGx5IGNvbXBpbGluZyBhdC4KIyAgIElmIHRoZSB0b29sa2l0IGlzIG1lbnQgdG8gYmUgdXNlZCBvbiB2YXJpb3VzIFBBLVJJU0MgcHJvY2Vzc29ycwojICAgY29uc2lkZXIgJy4vY29uZmlnICtEQXBvcnRhYmxlJy4KIyAtICtERDY0IGlzIGNob3NlbiBpbiBmYXZvdXIgb2YgK0RBMi4wVyBiZWNhdXNlIGl0J3MgbWVhbnQgdG8gYmUKIyAgIGNvbXBhdGlibGUgd2l0aCAqZnV0dXJlKiByZWxlYXNlcy4KIyAtIElmIHlvdSBydW4gLi9Db25maWd1cmUgaHB1eC1wYXJpc2MtW2ddY2MgbWFudWFsbHkgZG9uJ3QgZm9yZ2V0IHRvCiMgICBwYXNzIC1EX1JFRU5UUkFOVCBvbiBIUC1VWCAxMCBhbmQgbGF0ZXIuCiMgLSAtRE1EMzJfWEFSUkFZIHRyaWdnZXJzIHdvcmthcm91bmQgZm9yIGNvbXBpbGVyIGJ1ZyB3ZSByYW4gaW50byBpbgojICAgMzItYml0IG1lc3NhZ2UgZGlnZXN0cy4gKEZvciB0aGUgbW9tZW50IG9mIHRoaXMgd3JpdGluZykgSFAgQwojICAgZG9lc24ndCBzZWVtIHRvICJkaWdlc3QiIHRvbyBtYW55IGxvY2FsIHZhcmlhYmxlcyAodGhleSBtYWtlICJoaW0iCiMgICBjaGV3IGZvcmV2ZXI6LSkuIEZvciBtb3JlIGRldGFpbHMgbG9vay11cCBNRDMyX1hBUlJBWSBjb21tZW50IGluCiMgICBjcnlwdG8vc2hhL3NoYV9sY2wuaC4KIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiMgU2luY2UgdGhlcmUgaXMgbWVudGlvbiBvZiB0aGlzIGluIHNobGliL2hwdXgxMC1jYy5zaAoiaHB1eC1wYXJpc2MtY2MtbzQiLCJjYzotQWUgK080ICtFU2xpdCAteiAtREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYy1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMS1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke3BhcmlzYzExX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTEuMSIsCiJocHV4LXBhcmlzYzItZ2NjIiwiZ2NjOi1tYXJjaD0yLjAgLU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToiLmV2YWx7bXkgJGFzbT0kcGFyaXNjMjBfYXNtOyRhc209fnMvMldcLi8yXC4vOyRhc209fnMvOjY0LzozMi87JGFzbX0uIjpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfMzIiLAoiaHB1eDY0LXBhcmlzYzItZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6Ojo6Ojp2b2lkOmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF82NCIsCgojIE1vcmUgYXR0ZW1wdHMgYXQgdW5pZmllZCAxMC5YIGFuZCAxMS5YIHRhcmdldHMgZm9yIEhQIEMgY29tcGlsZXIuCiMKIyBDaHJpcyBSdWVtbWxlciA8cnVlbW1sZXJAY3VwLmhwLmNvbT4KIyBLZXZpbiBTdGV2ZXMgPGtzQGhwLnNlPgoiaHB1eC1wYXJpc2MtY2MiLCJjYzorTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMS1jYyIsImNjOitEQTEuMSArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke3BhcmlzYzExX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGExLjEiLAoiaHB1eC1wYXJpc2MyLWNjIiwiY2M6K0RBMi4wICtEUzIuMCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6Ii5ldmFse215ICRhc209JHBhcmlzYzIwX2FzbTskYXNtPX5zLzJXXC4vMlwuLzskYXNtPX5zLzo2NC86MzIvOyRhc219LiI6ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF8zMiIsCiJocHV4NjQtcGFyaXNjMi1jYyIsImNjOitERDY0ICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke3BhcmlzYzIwX2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF82NCIsCgojIEhQL1VYIElBLTY0IHRhcmdldHMKImhwdXgtaWE2NC1jYyIsImNjOi1BZSArREQzMiArTzIgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0REMzIgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDMyIiwKIyBGcmFuayBHZXVydHMgPGZyYW5rLmdldXJ0c0BubC5hYm5hbXJvLmNvbT4gaGFzIHBhdGllbnRseSBhc3Npc3RlZCB3aXRoCiMgd2l0aCBkZWJ1Z2dpbmcgb2YgdGhlIGZvbGxvd2luZyBjb25maWcuCiJocHV4NjQtaWE2NC1jYyIsImNjOi1BZSArREQ2NCArTzMgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4NjQiLAojIEdDQyBidWlsZHMuLi4KImhwdXgtaWE2NC1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4MzIiLAoiaHB1eDY0LWlhNjQtZ2NjIiwiZ2NjOi1tbHA2NCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1tbHA2NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXg2NCIsIAoKIyBMZWdhY3kgSFBVWCA5LlggY29uZmlncy4uLgoiaHB1eC1jYyIsCSJjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWSAtQWUgK0VTbGl0ICtPMiAtejo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1nY2MiLAkiZ2NjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtTzM6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBIUCBNUEUvaVggaHR0cDovL2phenouZXh0ZXJuYWwuaHAuY29tL3NyYy9vcGVuc3NsLwoiTVBFL2lYLWdjYyIsCSJnY2M6LURfRU5ESUFOIC1EQk5fRElWMlcgLU8zIC1EX1BPU0lYX1NPVVJDRSAtRF9TT0NLRVRfU09VUkNFIC1JL1NZU0xPRy9QVUI6Oih1bmtub3duKTpNUEU6LUwvU1lTTE9HL1BVQiAtbHN5c2xvZyAtbHNvY2tldCAtbGN1cnNlczpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6IiwKCiMgREVDIEFscGhhIE9TRi8xL1RydTY0IHRhcmdldHMuCiMKIwkiV2hhdCdzIGluIGEgbmFtZT8gVGhhdCB3aGljaCB3ZSBjYWxsIGEgcm9zZQojCSBCeSBhbnkgb3RoZXIgd29yZCB3b3VsZCBzbWVsbCBhcyBzd2VldC4iCiMKIyAtIFdpbGxpYW0gU2hha2VzcGVhcmUsICJSb21lbyAmIEp1bGlldCIsIEFjdCBJSSwgc2NlbmUgSUkuCiMKIyBGb3IgZ2NjLCB0aGUgZm9sbG93aW5nIGdhdmUgYSAlNTAgc3BlZWR1cCBvbiBhIDE2NCBvdmVyIHRoZSAnREVTX0lOVCcgdmVyc2lvbgojCiJvc2YxLWFscGhhLWdjYyIsICJnY2M6LU8zOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMToke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoib3NmMS1hbHBoYS1jYyIsICAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtTzQgLXJlYWRvbmx5X3N0cmluZ3M6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJ0cnU2NC1hbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6LW1zeW06LnNvIiwKCiMjIyMKIyMjIyBWYXJpZXR5IG9mIExJTlVYOi0pCiMjIyMKIyAqLWdlbmVyaWMqIGlzIGVuZGlhbi1uZXV0cmFsIHRhcmdldCwgYnV0IC4vY29uZmlnIGlzIGZyZWUgdG8KIyB0aHJvdyBpbiAtRFtCTF1fRU5ESUFOLCB3aGljaGV2ZXIgYXBwcm9wcmlhdGUuLi4KImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZpbmUgYXBwcm9wcmlhdGUgLW1hcmNoLgojIElmIHlvdSBjb21waWxlciBkb2VzIG5vdCwgZG8gY29tcGxlbWVudCBjb25maWcgY29tbWFuZCBsaW5lIHdpdGggb25lIQoibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJQS0zMiB0YXJnZXRzLi4uCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFvdXQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dCIsCiMjIyMKImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYzY0IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImxpbnV4NjQtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkweF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAojIyMjIFNvIGNhbGxlZCAiaGlnaGdwcnMiIHRhcmdldCBmb3Igei9BcmNoaXRlY3R1cmUgQ1BVcwojICJIaWdoZ3BycyIgaXMga2VybmVsIGZlYXR1cmUgZmlyc3QgaW1wbGVtZW50ZWQgaW4gTGludXggMi42LjMyLCBzZWUKIyAvcHJvYy9jcHVpbmZvLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YKIyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIG5vdCBvbmx5IHVwb24gMzItYml0IHByb2Nlc3MgY29udGV4dAojIHN3aXRjaCwgYnV0IGV2ZW4gb24gYXN5bmNocm9ub3VzIHNpZ25hbCBkZWxpdmVyeSB0byBzdWNoIHByb2Nlc3MuCiMgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkZXBsb3kgNjQtYml0IGluc3RydWN0aW9ucyBldmVuIGluIGxlZ2FjeQojIGFwcGxpY2F0aW9uIGNvbnRleHQgYW5kIGFjaGlldmUgYmV0dGVyIFtvciBzaG91bGQgd2Ugc2F5IGFkZXF1YXRlXQojIHBlcmZvcm1hbmNlLiBUaGUgYnVpbGQgaXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBsaW51eC1nZW5lcmljMzIsCiMgYW5kIHRoZSBpZGVhIGlzIHRvIGJlIGFibGUgdG8gaW5zdGFsbCB0aGUgcmVzdWx0aW5nIGxpYmNyeXB0by5zbwojIGFsb25nc2lkZSBnZW5lcmljIG9uZSwgZS5nLiBhcyAvbGliL2hpZ2hncHJzL2xpYmNyeXB0by5zby54LnksIGZvcgojIGxkY29uZmlnIGFuZCBydW4tdGltZSBsaW5rZXIgdG8gYXV0b2Rpc2NvdmVyLiBVbmZvcnR1bmF0ZWx5IGl0CiMgZG9lc24ndCB3b3JrIGp1c3QgeWV0LCBiZWNhdXNlIG9mIGNvdXBsZSBvZiBidWdzIGluIGdsaWJjCiMgc3lzZGVwcy9zMzkwL2RsLXByb2NpbmZvLmMgYWZmZWN0aW5nIGxkY29uZmlnIGFuZCBsZC5zby4xLi4uCiJsaW51eDMyLXMzOTB4IiwJImdjYzotbTMxIC1XYSwtbXphcmNoIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoiLmV2YWx7bXkgJGFzbT0kczM5MHhfYXNtOyRhc209fnMvYm5cLXMzOTB4XC5vL2JuX2FzbS5vLzskYXNtfS4iOjMxOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMxOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hpZ2hncHJzIiwKIyMjIyBTUEFSQyBMaW51eCBzZXR1cHMKIyBSYXkgTWlsbGVyIDxyYXkubWlsbGVyQGNvbXB1dGluZy1zZXJ2aWNlcy5veGZvcmQuYWMudWs+IGhhcyBwYXRpZW50bHkKIyBhc3Npc3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCiJsaW51eC1zcGFyY3Y4IiwiZ2NjOi1tdjggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBpdCdzIGEgcmVhbCBtZXNzIHdpdGggLW1jcHU9dWx0cmFzcGFyYyBvcHRpb24gdW5kZXIgTGludXgsIGJ1dAojIC1XYSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgoibGludXgtc3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCiMgU3BlY2lhbCBub3RlczoKIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CiMgICBvdWdodCB0byBydW4gJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhK2J3eC1nY2MnIG1hbnVhbGx5LCBkbwojICAgY29tcGxlbWVudCB0aGUgY29tbWFuZCBsaW5lIHdpdGggLW1jcHU9ZXY1NiwgLW1jcHU9ZXY2IG9yIHdoYXRldmVyCiMgICB3aGljaCBpcyBhcHByb3ByaWF0ZS4KIyAtIElmIHlvdSB1c2UgY2NjIGtlZXAgaW4gbWluZCB0aGF0IC1mYXN0IGltcGxpZXMgLWFyY2ggaG9zdCBhbmQgdGhlCiMgICBjb21waWxlciBpcyBmcmVlIHRvIGlzc3VlIGluc3RydWN0aW9ucyB3aGljaCBnb25uYSBtYWtlIGVsZGVyIENQVQojICAgY2hva2UuIElmIHlvdSB3aXNoIHRvIGJ1aWxkICJibGVuZGVkIiB0b29sa2l0LCBhZGQgLWFyY2ggZ2VuZXJpYwojICAgKmFmdGVyKiAtZmFzdCBhbmQgaW52b2tlICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYS1jY2MnIG1hbnVhbGx5LgojCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwoibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCgojIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgLURURVJNSU8gYW5kIHBvaW50ZXJzIHRvIGhlYWRlcnMgYW5kIGxpYnMuCiJhbmRyb2lkIiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImFuZHJvaWQtYXJtdjciLCJnY2M6LW1hcmNoPWFybXY3LWEgLW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgKkJTRCBbZG8gc2VlIGNvbW1lbnQgYWJvdXQgJHtCU0R0aHJlYWRzfSBhYm92ZSFdCiJCU0QtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4NiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1CU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsIC1nOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1zcGFyY3Y4IiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLW12OCAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEw6JHtzcGFyY3Y4X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMiBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODZfNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKImJzZGktZWxmLWdjYyIsICAgICAiZ2NjOi1EUEVSTDUgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJuZXh0c3RlcCIsCSJjYzotTyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoibmV4dHN0ZXAzLjMiLAkiY2M6LU8zIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIE5DUiBNUC1SQVMgVU5JWCB2ZXIgMDIuMDMuMDEKIm5jci1zY2RlIiwiY2M6LU82IC1YYSAtSG9mZj1CRUhBVkVEIC02ODYgLUh3aWRlIC1IaXc6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2wgLWxjODk6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgUU5YCiJxbng0IiwJImNjOi1ETF9FTkRJQU4gLURURVJNSU86Oih1bmtub3duKTo6OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLAoiUU5YNiIsICAgICAgICJnY2M6LURURVJNSU9TOjo6Oi1sc29ja2V0Ojoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIlFOWDYtaTM4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMiAtV2FsbDo6OjotbHNvY2tldDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMgQmVPUwoiYmVvcy14ODYtcjUiLCAgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tY3B1PXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDpCRU9TOi1sYmUgLWxuZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmJlb3M6YmVvcy1zaGFyZWQ6LWZQSUMgLURQSUM6LXNoYXJlZDouc28iLAoiYmVvcy14ODYtYm9uZSIsICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tY3B1PXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDpCRU9TOi1sYmUgLWxiaW5kIC1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpiZW9zOmJlb3Mtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvIiwKCiMjIyMgU0NPL0NhbGRlcmEgdGFyZ2V0cy4KIwojIE9yaWdpbmFsbHkgd2UgaGFkIGxpa2UgdW5peHdhcmUtKiwgdW5peHdhcmUtKi1wZW50aXVtLCB1bml4d2FyZS0qLXA2LCBldGMuCiMgTm93IHdlIG9ubHkgaGF2ZSBibGVuZGVkIHVuaXh3YXJlLSogYXMgaXQncyB0aGUgb25seSBvbmUgdXNlZCBieSAuL2NvbmZpZy4KIyBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSBmb3IgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZSwgYnlwYXNzIC4vY29uZmlnCiMgYW5kICcuL0NvbmZpZ3VyZSB1bml4d2FyZS03IC1LcGVudGl1bV9wcm8nIG9yIHdoYXRldmVyIGFwcHJvcHJpYXRlLgojIE5vdGUgdGhhdCBub3QgYWxsIHRhcmdldHMgaW5jbHVkZSBhc3NlbWJsZXIgc3VwcG9ydC4gTW9zdGx5IGJlY2F1c2Ugb2YKIyBsYWNrIG9mIG1vdGl2YXRpb24gdG8gc3VwcG9ydCBvdXQtb2YtZGF0ZSBwbGF0Zm9ybXMgd2l0aCBvdXQtb2YtZGF0ZQojIGNvbXBpbGVyIGRyaXZlcnMgYW5kIGFzc2VtYmxlcnMuIFRpbSBSaWNlIDx0aW1AbXVsdGl0YWxlbnRzLm5ldD4gaGFzCiMgcGF0aWVudGx5IGFzc2lzdGVkIHRvIGRlYnVnIG1vc3Qgb2YgaXQuCiMKIyBVbml4V2FyZSAyLjB4IGZhaWxzIGRlc3Rlc3Qgd2l0aCAtTy4KInVuaXh3YXJlLTIuMCIsImNjOi1ERklMSU9fSCAtRE5PX1NUUklOR1NfSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtMi4xIiwiY2M6LU8gLURGSUxJT19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS03IiwiY2M6LU8gLURGSUxJT19IIC1LYWxsb2NhOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYICR7eDg2X2djY19kZXN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjUtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJ1bml4d2FyZS03LWdjYyIsImdjYzotRExfRU5ESUFOIC1ERklMSU9fSCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmdudS1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBTQ08gNSAtIEJlbiBMYXVyaWUgPGJlbkBhbGdyb3VwLmNvLnVrPiBzYXlzIHRoZSAtTyBicmVha3MgdGhlIFNDTyBjYy4KInNjbzUtY2MiLCAgImNjOi1iZWxmOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic2NvNS1nY2MiLCAgImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIElCTSdzIEFJWC4KImFpeDMtY2MiLCAgImNjOi1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQ6Oih1bmtub3duKTpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOjo6IiwKImFpeC1nY2MiLCAgImdjYzotTyAtREJfRU5ESUFOOjotcHRocmVhZDpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOiR7cHBjMzJfYXNtfTphaXgzMjpkbGZjbjphaXgtc2hhcmVkOjotc2hhcmVkIC1XbCwtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVgzMiIsCiJhaXg2NC1nY2MiLCJnY2M6LW1haXg2NCAtTyAtREJfRU5ESUFOOjotcHRocmVhZDpBSVg6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVI6JHtwcGM2NF9hc219OmFpeDY0OmRsZmNuOmFpeC1zaGFyZWQ6Oi1tYWl4NjQgLXNoYXJlZCAtV2wsLUc6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YNjQiLAojIEJlbG93IHRhcmdldHMgYXNzdW1lIEFJWCA1LiBJZGVhIGlzIHRvIGVmZmVjdGl2ZWx5IGRpc3JlZ2FyZCAkT0JKRUNUX01PREUKIyBhdCBidWlsZCB0aW1lLiAkT0JKRUNUX01PREUgaXMgcmVzcGVjdGVkIGF0IC4vY29uZmlnIHN0YWdlIQoiYWl4LWNjIiwgICAiY2M6LXEzMiAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0IC1xcm8gLXFyb2NvbnN0OjotcXRocmVhZGVkOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6JHtwcGMzMl9hc219OmFpeDMyOmRsZmNuOmFpeC1zaGFyZWQ6Oi1xMzIgLUc6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YIDMyIiwKImFpeDY0LWNjIiwgImNjOi1xNjQgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NCAtcXJvIC1xcm9jb25zdDo6LXF0aHJlYWRlZDpBSVg6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVI6JHtwcGM2NF9hc219OmFpeDY0OmRsZmNuOmFpeC1zaGFyZWQ6Oi1xNjQgLUc6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YIDY0IiwKCiMKIyBDcmF5IFQ5MCBhbmQgc2ltaWxhciAoU0RTQykKIyBJdCdzIEJpZy1lbmRpYW4sIGJ1dCB0aGUgYWxnb3JpdGhtcyB3b3JrIHByb3Blcmx5IHdoZW4gQl9FTkRJQU4gaXMgTk9UCiMgZGVmaW5lZC4gIFRoZSBUOTAgaW50cyBhbmQgbG9uZ3MgYXJlIDggYnl0ZXMgbG9uZywgYW5kIGFwcGFyZW50bHkgdGhlCiMgQl9FTkRJQU4gY29kZSBhc3N1bWVzIDQgYnl0ZSBpbnRzLiAgRm9ydHVuYXRlbHksIHRoZSBub24tQl9FTkRJQU4gYW5kCiMgbm9uIExfRU5ESUFOIGNvZGUgYWxpZ25zIHRoZSBieXRlcyBpbiBlYWNoIHdvcmQgY29ycmVjdGx5LgojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIGlzIHRvIGF2b2lkIHR3byBmYXRhbCBjb21waWxlciBlcnJvcnM6CiMnVGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgYml0IGZpZWxkIGlzIG5vdCBhbGxvd2VkLiAnCiMnQW4gZXhwcmVzc2lvbiB3aXRoIGJpdCBmaWVsZCBleGlzdHMgYXMgdGhlIG9wZXJhbmQgb2YgInNpemVvZiIgJwojICh3cml0dGVuIGJ5IFdheW5lIFNjaHJvZWRlciA8c2Nocm9lZGVAU0RTQy5FRFU+KQojCiMgajkwIGlzIGNvbnNpZGVyZWQgdGhlIGJhc2UgbWFjaGluZSB0eXBlIGZvciB1bmljb3MgbWFjaGluZXMsCiMgc28gdGhpcyBjb25maWd1cmF0aW9uIGlzIG5vdyBjYWxsZWQgImNyYXktajkwIiAuLi4KImNyYXktajkwIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBERVNfSU5UOjo6IiwKCiMKIyBDcmF5IFQzRSAoUmVzZWFyY2ggQ2VudGVyIEp1ZWxpY2gsIGJlY2ttYW5AYWNsLmxhbmwuZ292KQojCiMgVGhlIEJJVF9GSUVMRF9MSU1JVFMgZGVmaW5lIHdhcyB3cml0dGVuIGZvciB0aGUgQzkwIChpdCBzZWVtcykuICBJIGFkZGVkCiMgYW5vdGhlciB1c2UuICBCYXNpY2FsbHksIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIFQzRSB1c2VzIHNvbWUgYml0IGZpZWxkcwojIGZvciBzb21lIHN0X2FkZHIgc3R1ZmYsIGFuZCB0aGVuIHNpemVvZiBhbmQgYWRkcmVzcy1vZiBmYWlscwojIEkgY291bGQgbm90IHVzZSB0aGUgYW1zL2FscGhhLm8gb3B0aW9uIGJlY2F1c2UgdGhlIENyYXkgYXNzZW1ibGVyLCAnY2FtJwojIGRpZCBub3QgbGlrZSBpdC4KImNyYXktdDNlIiwgImNjOiAtREJJVF9GSUVMRF9MSU1JVFMgLURURVJNSU9TOjoodW5rbm93bik6Q1JBWTo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVDo6OiIsCgojIERHVVgsIDg4MTAwLgoiZGd1eC1SMy1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjo6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LXg4Ni1nY2MiLAkiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCgojIFNpbml4L1JlbGlhbnRVTklYIFJNNDAwCiMgTk9URTogVGhlIENEUysrIENvbXBpbGVyIHVwIHRvIFYyLjBCc29tZXRoaW5nIGhhcyB0aGUgSVJJWF9DQ19CVUcgb3B0aW1pemVyIHByb2JsZW0uIEJldHRlciB1c2UgLWcgICovCiJSZWxpYW50VU5JWCIsImNjOi1LUElDIC1nIC1EVEVSTUlPUyAtREJfRU5ESUFOOjotS3RocmVhZDpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6Qk5fTExPTkcgREVTX1BUUiBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnJlbGlhbnR1bml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIlNJTklYIiwiY2M6LU86Oih1bmtub3duKTpTTkk6LWxzb2NrZXQgLWxuc2wgLWxjIC1ML3Vzci91Y2JsaWIgLWx1Y2I6UkM0X0lOREVYIFJDNF9DSEFSOjo6IiwKIlNJTklYLU4iLCIvdXNyL3VjYi9jYzotTzIgLW1pc2FsaWduZWQ6Oih1bmtub3duKTo6LWx1Y2I6UkM0X0lOREVYIFJDNF9DSEFSOjo6IiwKCiMgU0lFTUVOUyBCUzIwMDAvT1NEOiBhbiBFQkNESUMtYmFzZWQgbWFpbmZyYW1lCiJCUzIwMDAtT1NEIiwiYzg5Oi1PIC1YTExNTCAtWExMTUsgLVhMIC1EQl9FTkRJQU4gLURURVJNSU9TIC1EQ0hBUlNFVF9FQkNESUM6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBPUy8zOTAgVW5peCBhbiBFQkNESUMtYmFzZWQgVW5peCBzeXN0ZW0gb24gSUJNIG1haW5mcmFtZQojIFlvdSBuZWVkIHRvIGNvbXBpbGUgdXNpbmcgdGhlIGM4OS5zaCB3cmFwcGVyIGluIHRoZSB0b29scyBkaXJlY3RvcnksIGJlY2F1c2UgdGhlCiMgSUJNIGNvbXBpbGVyIGRvZXMgbm90IGxpa2UgdGhlIC1MIHN3aXRjaCBhZnRlciBhbnkgb2JqZWN0IG1vZHVsZXMuCiMKIk9TMzkwLVVuaXgiLCJjODkuc2g6LU8gLURCX0VORElBTiAtRENIQVJTRVRfRUJDRElDIC1ETk9fU1lTX1BBUkFNX0ggIC1EX0FMTF9TT1VSQ0U6Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgVmlzdWFsIEMgdGFyZ2V0cwojCiMgV2luNjQgdGFyZ2V0cywgV0lONjRJIGRlbm90ZXMgSUEtNjQgYW5kIFdJTjY0QSAtIEFNRDY0CiJWQy1XSU42NEkiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0STo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjppYTY0Y3B1aWQubzppYTY0Lm8gaWE2NC1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjo6Ojo6OmdoYXNoLWlhNjQubzo6aWFzOndpbjMyIiwKIlZDLVdJTjY0QSIsImNsOi1XMyAtR3MwIC1HeSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRBOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOiIuZXZhbHtteSAkYXNtPSR4ODZfNjRfYXNtOyRhc209fnMveDg2XzY0LWdjY1wuby9ibl9hc20uby87JGFzbX0uIjphdXRvOndpbjMyIiwKImRlYnVnLVZDLVdJTjY0SSIsImNsOi1XMyAtR3MwIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0STo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjppYTY0Y3B1aWQubzppYTY0Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjo6Ojo6OmdoYXNoLWlhNjQubzo6aWFzOndpbjMyIiwKImRlYnVnLVZDLVdJTjY0QSIsImNsOi1XMyAtR3MwIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3g4Nl82NC1nY2NcLm8vYm5fYXNtLm8vOyRhc219LiI6YXV0bzp3aW4zMiIsCiMgeDg2IFdpbjMyIHRhcmdldCBkZWZhdWx0cyB0byBBTlNJIEFQSSwgaWYgeW91IHdhbnQgVU5JQ09ERSwgY29tcGxlbWVudAojICdwZXJsIENvbmZpZ3VyZSBWQy1XSU4zMicgd2l0aCAnLURVTklDT0RFIC1EX1VOSUNPREUnCiJWQy1XSU4zMiIsImNsOi1XMyAtR3MwIC1HRiAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjMyOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTp3aW4zMm46d2luMzIiLAojIFVuaWZpZWQgQ0UgdGFyZ2V0CiJkZWJ1Zy1WQy1XSU4zMiIsImNsOi1XMyAtV1ggLUdzMCAtR0YgLUd5IC1aaSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OndpbjMybjp3aW4zMiIsCiJWQy1DRSIsImNsOjo6OldJTkNFOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQm9ybGFuZCBDKysgNC41CiJCQy0zMiIsImJjYzMyOjo6OldJTjMyOjpCTl9MTE9ORyBERVNfUFRSIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCgojIE1pbkdXCiJtaW5ndyIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9NVDpNSU5HVzMyOi1sd3MyXzMyIC1sZ2RpMzIgLWxjcnlwdDMyOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfSBFWFBPUlRfVkFSX0FTX0ZOOiR7eDg2X2FzbX06Y29mZjp3aW4zMjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTCAtRE9QRU5TU0xfVVNFX0FQUExJTks6LW1uby1jeWd3aW46LmRsbC5hIiwKIyBBcyBmb3IgT1BFTlNTTF9VU0VfQVBQTElOSy4gQXBwbGluayBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgLmRsbAojIGNvbXBpbGVkIHdpdGggb25lIGNvbXBpbGVyIHdpdGggYXBwbGljYXRpb24gY29tcGlsZWQgd2l0aCBhbm90aGVyCiMgY29tcGlsZXIuIEl0J3MgcG9zc2libGUgdG8gZW5nYWdlIEFwcGxpbmsgc3VwcG9ydCBpbiBtaW5ndzY0IGJ1aWxkLAojIGJ1dCBpdCdzIG5vdCBkb25lLCBiZWNhdXNlIHRpbGwgbWluZ3c2NCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGV4Y2VwdGlvbgojIGhhbmRsaW5nLCBvbmUgY2FuJ3Qgc2VyaW91c2x5IGNvbnNpZGVyIGl0cyBiaW5hcmllcyBmb3IgdXNpbmcgd2l0aAojIG5vbi1taW5ndzY0IHJ1bi10aW1lIGVudmlyb25tZW50LiBBbmQgYXMgbWluZ3c2NCBpcyBhbHdheXMgY29uc2lzdGVudAojIHdpdGggaXRzZWxmLCBBcHBsaW5rIGlzIG5ldmVyIGVuZ2FnZWQgYW5kIGNhbiBhcyB3ZWxsIGJlIG9taXR0ZWQuCiJtaW5ndzY0IiwgImdjYzotbW5vLWN5Z3dpbiAtRExfRU5ESUFOIC1PMyAtV2FsbCAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURVTklDT0RFIC1EX1VOSUNPREU6Oi1EX01UOk1JTkdXNjQ6LWx3czJfMzIgLWxnZGkzMiAtbGNyeXB0MzI6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoke3g4Nl82NF9hc219Om1pbmd3NjQ6d2luMzI6Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LW1uby1jeWd3aW46LmRsbC5hIiwKCiMgVVdJTiAKIlVXSU4iLCAiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLU8gLVdhbGw6OjpVV0lOOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQ3lnd2luCiJDeWd3aW4tcHJlMS4zIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW00ODYgLVdhbGw6Oih1bmtub3duKTpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJDeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6OkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTpjb2ZmOmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKImRlYnVnLUN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoKIyBOZXRXYXJlIGZyb20gRGF2aWQgV2FyZCAoZHN3YXJkQG5vdmVsbC5jb20pCiMgcmVxdWlyZXMgZWl0aGVyIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzLCBvciBnY2MgLyBubG1jb252CiMgTmV0V2FyZSBkZWZhdWx0cyBzb2NrZXQgYmlvIHRvIFdpblNvY2sgc29ja2V0cy4gSG93ZXZlciwKIyB0aGUgYnVpbGRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBCU0Qgc29ja2V0cyBpbnN0ZWFkLgojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLUkvbmRrL3dzMjk1c2RrL2luY2x1ZGUgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9ud3Nkay9pbmNsdWRlL25sbSAtRE5FVFdBUkVfQlNEU09DSyAtRE5FVERCX1VTRV9JTlRFUk5FVCAtRExfRU5ESUFOIC1ETkVUV0FSRV9DTElCIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLU8yIC1XYWxsOjo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIm5ldHdhcmUtbGliYyIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL2xpYmMvaW5jbHVkZSAtSS9uZGsvbGliYy9pbmNsdWRlL3dpbnNvY2sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLURORVRXQVJFX0JTRFNPQ0sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoKIyBESkdQUAoiREpHUFAiLCAiZ2NjOi1JL2Rldi9lbnYvV0FUVF9ST09UL2luYyAtRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzIgLVdhbGw6OjpNU0RPUzotTC9kZXYvZW52L1dBVFRfUk9PVC9saWIgLWx3YXR0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OiIsCgojIFVsdHJpeCBmcm9tIEJlcm5oYXJkIFNpbW9uIDxzaW1vbkB6aWQudHV3aWVuLmFjLmF0PgoidWx0cml4LWNjIiwiY2M6LXN0ZDEgLU8gLU9saW1pdCAyNTAwIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoidWx0cml4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkc6Ojo6IiwKIyBLJlIgQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkOyB5b3UgbmVlZCBnY2Mgb24gb2xkIFVsdHJpeCBpbnN0YWxsYXRpb25zCiMjInVsdHJpeCIsImNjOi1PMiAtRE5PUFJPVE8gLUROT0NPTlNUIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoKIyMjIyMgTWFjT1MgWCAoYS5rLmEuIFJoYXBzb2R5IG9yIERhcndpbikgc2V0dXAKInJoYXBzb2R5LXBwYy1jYyIsImNjOi1PMyAtREJfRU5ESUFOOjoodW5rbm93bik6TUFDT1NYX1JIQVBTT0RZOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OjoiLAoiZGFyd2luLXBwYy1jYyIsImNjOi1hcmNoIHBwYyAtTzMgLURCX0VORElBTiAtV2EsLWZvcmNlX2NwdXN1YnR5cGVfQUxMOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjIC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbjY0LXBwYy1jYyIsImNjOi1hcmNoIHBwYzY0IC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzY0X2FzbX06b3N4NjQ6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGM2NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiIuZXZhbHtteSAkYXNtPSR4ODZfYXNtOyRhc209fnMvY2FzdFwtNTg2XC5vLy87JGFzbX0uIjptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtZzMgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHt4ODZfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbjY0LXg4Nl82NC1jYyIsImNjOi1hcmNoIHg4Nl82NCAtTzMgLURMX0VORElBTiAtV2FsbDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiIuZXZhbHtteSAkYXNtPSR4ODZfNjRfYXNtOyRhc209fnMvcmM0XC1bXjpdKy8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggeDg2XzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1wcGMtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURCX0VORElBTiAtZyAtV2FsbCAtTzo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKIyBpUGhvbmVPUy9pT1MKImlwaG9uZW9zLWNyb3NzIiwibGx2bS1nY2M6LU8zIC1pc3lzcm9vdCBcJChDUk9TU19UT1ApL1NES3MvXCQoQ1JPU1NfU0RLKSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLWNvbW1vbjo6LURfUkVFTlRSQU5UOmlPUzotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKCiMjIyMjIEEvVVgKImF1eDMtZ2NjIiwiZ2NjOi1PMiAtRFRFUk1JTzo6KHVua25vd24pOkFVWDotbGJzZDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OjoiLAoKIyMjIyMgU29ueSBORVdTLU9TIDQueAoibmV3c29zNC1nY2MiLCJnY2M6LU8gLURCX0VORElBTjo6KHVua25vd24pOk5FV1M0Oi1sbWxkIC1saWJlcnR5OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OjoiLAoKIyMjIyMgR05VIEh1cmQKImh1cmQteDg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQyIsCgojIyMjIyBPUy8yIEVNWAoiT1MyLUVNWCIsICJnY2M6Ojo6Ojo6OiIsCgojIyMjIyBWeFdvcmtzIGZvciB2YXJpb3VzIHRhcmdldHMKInZ4d29ya3MtcHBjNjB4IiwiY2NwcGM6LURfUkVFTlRSQU5UIC1tcnRwIC1taGFyZC1mbG9hdCAtbXN0cmljdC1hbGlnbiAtZm5vLWltcGxpY2l0LWZwIC1EUFBDMzJfZnA2MHggLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2FsbCAtRENQVT1QUEMzMiAtRFRPT0xfRkFNSUxZPWdudSAtRFRPT0w9Z251IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvaC93cm4vY29yZWlwOjo6VlhXT1JLUzotV2wsLS1kZWZzeW0sX193cnNfcnRwX2Jhc2U9MHhlMDAwMDAwMCAtTCBcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvbGliL3BwYy9QUEMzMi9jb21tb246Ojo6OiIsCiJ2eHdvcmtzLXBwY2dlbiIsImNjcHBjOi1EX1JFRU5UUkFOVCAtbXJ0cCAtbXNvZnQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLU8xIC1mbm8tYnVpbHRpbiAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2FsbCAtRENQVT1QUEMzMiAtRFRPT0xfRkFNSUxZPWdudSAtRFRPT0w9Z251IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvaC93cm4vY29yZWlwOjo6VlhXT1JLUzotV2wsLS1kZWZzeW0sX193cnNfcnRwX2Jhc2U9MHhlMDAwMDAwMCAtTCBcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvbGliL3BwYy9QUEMzMi9zZmNvbW1vbjo6Ojo6IiwKInZ4d29ya3MtcHBjNDA1IiwiY2NwcGM6LWcgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNDA1IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MCIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIFwkKERFQlVHX0ZMQUcpOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3MtcHBjNzUwLWRlYnVnIiwiY2NwcGM6LWFuc2kgLW5vc3RkaW5jIC1EUFBDNzUwIC1EX1JFRU5UUkFOVCAtZnZvbGF0aWxlIC1mbm8tYnVpbHRpbiAtZm5vLWZvci1zY29wZSAtZnNpZ25lZC1jaGFyIC1XYWxsIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURERUJVRyAtZzo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzg2MCIsImNjcHBjOi1ub3N0ZGluYyAtbXNvZnQtZmxvYXQgLURDUFU9UFBDODYwIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXNpbWxpbnV4IiwiY2NwZW50aXVtOi1CXCQoV0lORF9CQVNFKS9ob3N0L1wkKFdJTkRfSE9TVF9UWVBFKS9saWIvZ2NjLWxpYi8gLURfVlNCX0NPTkZJR19GSUxFPVwiXCQoV0lORF9CQVNFKS90YXJnZXQvbGliL2gvY29uZmlnL3ZzYkNvbmZpZy5oXCIgLURMX0VORElBTiAtRENQVT1TSU1MSU5VWCAtRFRPT0xfRkFNSUxZPWdudSAtRFRPT0w9Z251IC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgLURPUEVOU1NMX05PX0hXX1BBRExPQ0s6OjpWWFdPUktTOi1yOjoke25vX2FzbX06Ojo6OjpyYW5saWJwZW50aXVtOiIsCiJ2eHdvcmtzLW1pcHMiLCJjY21pcHM6LW1ydHAgLW1pcHMyIC1PIC1HIDAgLUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRF9WU0JfQ09ORklHX0ZJTEU9XCJcJChXSU5EX0JBU0UpL3RhcmdldC9saWIvaC9jb25maWcvdnNiQ29uZmlnLmhcIiAtRENQVT1NSVBTMzIgLW1zb2Z0LWZsb2F0IC1tbm8tYnJhbmNoLWxpa2VseSAtRFRPT0xfRkFNSUxZPWdudSAtRFRPT0w9Z251IC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwOjotRF9SRUVOVFJBTlQ6VlhXT1JLUzotV2wsLS1kZWZzeW0sX193cnNfcnRwX2Jhc2U9MHhlMDAwMDAwMCAtTCBcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvbGliL21pcHMvTUlQU0kzMi9zZmNvbW1vbjo6JHttaXBzMzJfYXNtfTpvMzI6Ojo6OjpyYW5saWJtaXBzOiIsCgojIyMjIyBDb21wYXEgTm9uLVN0b3AgS2VybmVsIChUYW5kZW0pCiJ0YW5kZW0tYzg5IiwiYzg5Oi1XdyAtRF9fVEFOREVNIC1EX1hPUEVOX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSAtRF9UQU5ERU1fU09VUkNFIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUOjo6IiwKCiMgdUNsaW51eAoidUNsaW51eC1kaXN0IiwiJEVOVnsnQ0MnfTpcJChDRkxBR1MpOjotRF9SRUVOVFJBTlQ6OlwkKExERkxBR1MpIFwkKExETElCUyk6Qk5fTExPTkc6JHtub19hc219OiRFTlZ7J0xJQlNTTF9kbGZjbid9OmxpbnV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOiRFTlZ7J1JBTkxJQid9OjoiLAoidUNsaW51eC1kaXN0NjQiLCIkRU5WeydDQyd9OlwkKENGTEFHUyk6Oi1EX1JFRU5UUkFOVDo6XCQoTERGTEFHUykgXCQoTERMSUJTKTpTSVhUWV9GT1VSX0JJVF9MT05HOiR7bm9fYXNtfTokRU5WeydMSUJTU0xfZGxmY24nfTpsaW51eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTokRU5WeydSQU5MSUInfTo6IiwKCik7CgpteSBATUsxTUZfQnVpbGRzPXF3KFZDLVdJTjY0SSBWQy1XSU42NEEKCQkgICAgZGVidWctVkMtV0lONjRJIGRlYnVnLVZDLVdJTjY0QQoJCSAgICBWQy1OVCBWQy1DRSBWQy1XSU4zMiBkZWJ1Zy1WQy1XSU4zMgoJCSAgICBCQy0zMiAKCQkgICAgbmV0d2FyZS1jbGliIG5ldHdhcmUtY2xpYi1ic2Rzb2NrCgkJICAgIG5ldHdhcmUtbGliYyBuZXR3YXJlLWxpYmMtYnNkc29jayk7CgpteSAkaWR4ID0gMDsKbXkgJGlkeF9jYyA9ICRpZHgrKzsKbXkgJGlkeF9jZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfdW5pc3RkID0gJGlkeCsrOwpteSAkaWR4X3RocmVhZF9jZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zeXNfaWQgPSAkaWR4Kys7Cm15ICRpZHhfbGZsYWdzID0gJGlkeCsrOwpteSAkaWR4X2JuX29wcyA9ICRpZHgrKzsKbXkgJGlkeF9jcHVpZF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfYm5fb2JqID0gJGlkeCsrOwpteSAkaWR4X2Rlc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfYWVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9iZl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfbWQ1X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9zaGExX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9jYXN0X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzRfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JtZDE2MF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcmM1X29iaiA9ICRpZHgrKzsKbXkgJGlkeF93cF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfY21sbF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfbW9kZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2VuZ2luZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X3Blcmxhc21fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X2Rzb19zY2hlbWUgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX3RhcmdldCA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2xkZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfZXh0ZW5zaW9uID0gJGlkeCsrOwpteSAkaWR4X3JhbmxpYiA9ICRpZHgrKzsKbXkgJGlkeF9hcmZsYWdzID0gJGlkeCsrOwpteSAkaWR4X211bHRpbGliID0gJGlkeCsrOwoKbXkgJHByZWZpeD0iIjsKbXkgJGxpYmRpcj0iIjsKbXkgJG9wZW5zc2xkaXI9IiI7Cm15ICRleGVfZXh0PSIiOwpteSAkaW5zdGFsbF9wcmVmaXg9ICIkRU5WeydJTlNUQUxMX1BSRUZJWCd9IjsKbXkgJGNyb3NzX2NvbXBpbGVfcHJlZml4PSIiOwpteSAkZmlwc2Rpcj0iL3Vzci9sb2NhbC9zc2wvZmlwcy0yLjAiOwpteSAkZmlwc2xpYmRpcj0iIjsKbXkgJGJhc2VhZGRyPSIweEZCMDAwMDAiOwpteSAkbm9fdGhyZWFkcz0wOwpteSAkdGhyZWFkcz0wOwpteSAkbm9fc2hhcmVkPTA7ICMgYnV0ICJuby1zaGFyZWQiIGlzIGRlZmF1bHQKbXkgJHpsaWI9MTsgICAgICAjIGJ1dCAibm8temxpYiIgaXMgZGVmYXVsdApteSAkbm9fa3JiNT0wOyAgICMgYnV0ICJuby1rcmI1IiBpcyBpbXBsaWVkIHVubGVzcyAiLS13aXRoLWtyYjUtLi4uIiBpcyB1c2VkCm15ICRub19yZmMzNzc5PTE7ICMgYnV0ICJuby1yZmMzNzc5IiBpcyBkZWZhdWx0Cm15ICRub19hc209MDsKbXkgJG5vX2Rzbz0wOwpteSAkbm9fZ21wPTA7Cm15IEBza2lwPSgpOwpteSAkTWFrZWZpbGU9Ik1ha2VmaWxlIjsKbXkgJGRlc19sb2NsPSJjcnlwdG8vZGVzL2Rlc19sb2NsLmgiOwpteSAkZGVzCT0iY3J5cHRvL2Rlcy9kZXMuaCI7Cm15ICRibgk9ImNyeXB0by9ibi9ibi5oIjsKbXkgJG1kMgk9ImNyeXB0by9tZDIvbWQyLmgiOwpteSAkcmM0CT0iY3J5cHRvL3JjNC9yYzQuaCI7Cm15ICRyYzRfbG9jbD0iY3J5cHRvL3JjNC9yYzRfbG9jbC5oIjsKbXkgJGlkZWEJPSJjcnlwdG8vaWRlYS9pZGVhLmgiOwpteSAkcmMyCT0iY3J5cHRvL3JjMi9yYzIuaCI7Cm15ICRiZgk9ImNyeXB0by9iZi9iZl9sb2NsLmgiOwpteSAkYm5fYXNtCT0iYm5fYXNtLm8iOwpteSAkZGVzX2VuYz0iZGVzX2VuYy5vIGZjcnlwdF9iLm8iOwpteSAkYWVzX2VuYz0iYWVzX2NvcmUubyBhZXNfY2JjLm8iOwpteSAkYmZfZW5jCT0iYmZfZW5jLm8iOwpteSAkY2FzdF9lbmM9ImNfZW5jLm8iOwpteSAkcmM0X2VuYz0icmM0X2VuYy5vIHJjNF9za2V5Lm8iOwpteSAkcmM1X2VuYz0icmM1X2VuYy5vIjsKbXkgJG1kNV9vYmo9IiI7Cm15ICRzaGExX29iaj0iIjsKbXkgJHJtZDE2MF9vYmo9IiI7Cm15ICRjbWxsX2VuYz0iY2FtZWxsaWEubyBjbWxsX21pc2MubyBjbWxsX2NiYy5vIjsKbXkgJHByb2Nlc3Nvcj0iIjsKbXkgJGRlZmF1bHRfcmFubGliOwpteSAkcGVybDsKbXkgJGZpcHM9MDsKCmlmIChleGlzdHMgJEVOVntGSVBTRElSfSkKCXsKCSRmaXBzZGlyID0gJEVOVntGSVBTRElSfTsKCSRmaXBzZGlyID1+IHMvXC8kLy87Cgl9CgojIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgoKbXkgJWRpc2FibGVkID0gKCAjICJ3aGF0IiAgICAgICAgID0+ICJjb21tZW50IiBbb3Igc3BlY2lhbCBrZXl3b3JkICJleHBlcmltZW50YWwiXQoJCSAiZWNfbmlzdHBfNjRfZ2NjXzEyOCIgPT4gImRlZmF1bHQiLAoJCSAiZ21wIgkJICA9PiAiZGVmYXVsdCIsCgkJICJqcGFrZSIgICAgICAgICAgPT4gImV4cGVyaW1lbnRhbCIsCgkJICJtZDIiICAgICAgICAgICAgPT4gImRlZmF1bHQiLAoJCSAicmM1IiAgICAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInJmYzM3NzkiCSAgPT4gImRlZmF1bHQiLAoJCSAic2N0cCIgICAgICAgPT4gImRlZmF1bHQiLAoJCSAic2hhcmVkIiAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInN0b3JlIgkgID0+ICJleHBlcmltZW50YWwiLAoJCSAiemxpYiIgICAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInpsaWItZHluYW1pYyIgICA9PiAiZGVmYXVsdCIKCSAgICAgICApOwpteSBAZXhwZXJpbWVudGFsID0gKCk7CgojIFRoaXMgaXMgd2hhdCAkZGVwZmxhZ3Mgd2lsbCBsb29rIGxpa2Ugd2l0aCB0aGUgYWJvdmUgZGVmYXVsdHMKIyAod2UgbmVlZCB0aGlzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWR2aXNlIHRoZSB1c2VyIHRvIHJ1biAibWFrZSBkZXBlbmQiKToKbXkgJGRlZmF1bHRfZGVwZmxhZ3MgPSAiIC1ET1BFTlNTTF9OT19FQ19OSVNUUF82NF9HQ0NfMTI4IC1ET1BFTlNTTF9OT19HTVAgLURPUEVOU1NMX05PX0pQQUtFIC1ET1BFTlNTTF9OT19NRDIgLURPUEVOU1NMX05PX1JDNSAtRE9QRU5TU0xfTk9fUkZDMzc3OSAtRE9QRU5TU0xfTk9fU0NUUCAtRE9QRU5TU0xfTk9fU1RPUkUiOwoKIyBFeHBsaWNpdCAibm8tLi4uIiBvcHRpb25zIHdpbGwgYmUgY29sbGVjdGVkIGluICVkaXNhYmxlZCBhbG9uZyB3aXRoIHRoZSBkZWZhdWx0cy4KIyBUbyByZW1vdmUgc29tZXRoaW5nIGZyb20gJWRpc2FibGVkLCB1c2UgImVuYWJsZS1mb28iICh1bmxlc3MgaXQncyBleHBlcmltZW50YWwpLgojIEZvciBzeW1tZXRyeSwgImRpc2FibGUtZm9vIiBpcyBhIHN5bm9ueW0gZm9yICJuby1mb28iLgoKIyBGb3IgZmVhdHVyZXMgY2FsbGVkICJleHBlcmltZW50YWwiIGhlcmUsIGEgbW9yZSBleHBsaWNpdCAiZXhwZXJpbWVudGFsLWZvbyIgaXMgbmVlZGVkIHRvIGVuYWJsZS4KIyBXZSB3aWxsIGNvbGxlY3Qgc3VjaCByZXF1ZXN0cyBpbiBAZXhwZXJpbWVudGFsLgojIFRvIGF2b2lkIGFjY2lkZW50YWwgdXNlIG9mIGV4cGVyaW1lbnRhbCBmZWF0dXJlcywgYXBwbGljYXRpb25zIHdpbGwgaGF2ZSB0byB1c2UgLURPUEVOU1NMX0VYUEVSSU1FTlRBTF9GT08uCgoKbXkgJG5vX3NzZTI9MDsKCiZ1c2FnZSBpZiAoJCNBUkdWIDwgMCk7CgpteSAkZmxhZ3M7Cm15ICRkZXBmbGFnczsKbXkgJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpteSAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKbXkgJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cm15ICRvcGVuc3NsX290aGVyX2RlZmluZXM7Cm15ICRsaWJzOwpteSAkbGlia3JiNT0iIjsKbXkgJHRhcmdldDsKbXkgJG9wdGlvbnM7Cm15ICRzeW1saW5rOwpteSAkbWFrZV9kZXBlbmQ9MDsKbXkgJXdpdGhhcmdzPSgpOwoKbXkgQGFyZ3Zjb3B5PUBBUkdWOwpteSAkYXJndnN0cmluZz0iIjsKbXkgJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCndoaWxlKCRhcmd2X3VucHJvY2Vzc2VkKQoJewoJJGZsYWdzPSIiOwoJJGRlcGZsYWdzPSIiOwoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzPSIiOwoJJGxpYnM9IiI7CgkkdGFyZ2V0PSIiOwoJJG9wdGlvbnM9IiI7Cgkkc3ltbGluaz0xOwoKCSRhcmd2X3VucHJvY2Vzc2VkPTA7CgkkYXJndnN0cmluZz1qb2luKCcgJyxAYXJndmNvcHkpOwoKUFJPQ0VTU19BUkdTOgoJZm9yZWFjaCAoQGFyZ3Zjb3B5KQoJCXsKCQlzIC9eLW5vLS9uby0vOyAjIHNvbWUgcGVvcGxlIGp1c3QgY2FuJ3QgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zCgoJCSMgcmV3cml0ZSBzb21lIG9wdGlvbnMgaW4gImVuYWJsZS0uLi4iIGZvcm0KCQlzIC9eLT8tP3NoYXJlZCQvZW5hYmxlLXNoYXJlZC87CgkJcyAvXnNjdHAkL2VuYWJsZS1zY3RwLzsKCQlzIC9edGhyZWFkcyQvZW5hYmxlLXRocmVhZHMvOwoJCXMgL156bGliJC9lbmFibGUtemxpYi87CgkJcyAvXnpsaWItZHluYW1pYyQvZW5hYmxlLXpsaWItZHluYW1pYy87CgoJCWlmICgvXm5vLSguKykkLyB8fCAvXmRpc2FibGUtKC4rKSQvKQoJCQl7CgkJCWlmICghKCRkaXNhYmxlZHskMX0gZXEgImV4cGVyaW1lbnRhbCIpKQoJCQkJewoJCQkJaWYgKCQxIGVxICJzc2wiKQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7InNzbDIifSA9ICJvcHRpb24oc3NsKSI7CgkJCQkJJGRpc2FibGVkeyJzc2wzIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCX0KCQkJCWVsc2lmICgkMSBlcSAidGxzIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJ0bHMxIn0gPSAib3B0aW9uKHRscykiCgkJCQkJfQoJCQkJZWxzZQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7JDF9ID0gIm9wdGlvbiI7CgkJCQkJfQoJCQkJfQkJCQoJCQl9CgkJZWxzaWYgKC9eZW5hYmxlLSguKykkLyB8fCAvXmV4cGVyaW1lbnRhbC0oLispJC8pCgkJCXsKCQkJbXkgJGFsZ28gPSAkMTsKCQkJaWYgKCRkaXNhYmxlZHskYWxnb30gZXEgImV4cGVyaW1lbnRhbCIpCgkJCQl7CgkJCQlkaWUgIllvdSBhcmUgcmVxdWVzdGluZyBhbiBleHBlcmltZW50YWwgZmVhdHVyZTsgcGxlYXNlIHNheSAnZXhwZXJpbWVudGFsLSRhbGdvJyBpZiB5b3UgYXJlIHN1cmVcbiIKCQkJCQl1bmxlc3MgKC9eZXhwZXJpbWVudGFsLS8pOwoJCQkJcHVzaCBAZXhwZXJpbWVudGFsLCAkYWxnbzsKCQkJCX0KCQkJZGVsZXRlICRkaXNhYmxlZHskYWxnb307CgoJCQkkdGhyZWFkcyA9IDEgaWYgKCRhbGdvIGVxICJ0aHJlYWRzIik7CgkJCX0KCQllbHNpZiAoL14tLXRlc3Qtc2FuaXR5JC8pCgkJCXsKCQkJZXhpdCgmdGVzdF9zYW5pdHkoKSk7CgkJCX0KCQllbHNpZiAoL14tLXN0cmljdC13YXJuaW5ncy8pCgkJCXsKCQkJJHN0cmljdF93YXJuaW5ncyA9IDE7CgkJCX0KCQllbHNpZiAoL15yZWNvbmZpZ3VyZS8gfHwgL15yZWNvbmYvKQoJCQl7CgkJCWlmIChvcGVuKElOLCI8JE1ha2VmaWxlIikpCgkJCQl7CgkJCQl3aGlsZSAoPElOPikKCQkJCQl7CgkJCQkJY2hvbXA7CgkJCQkJaWYgKC9eQ09ORklHVVJFX0FSR1M9KC4qKS8pCgkJCQkJCXsKCQkJCQkJJGFyZ3ZzdHJpbmc9JDE7CgkJCQkJCUBhcmd2Y29weT1zcGxpdCgnICcsJGFyZ3ZzdHJpbmcpOwoJCQkJCQlkaWUgIkluY29ycmVjdCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIgoJCQkJCQkJaWYgKGdyZXAoL15yZWNvbmYvLEBhcmd2Y29weSkpOwoJCQkJCQlwcmludCAiUmVjb25maWd1cmluZyB3aXRoOiAkYXJndnN0cmluZ1xuIjsKCQkJCQkJJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCQkJCQkJY2xvc2UoSU4pOwoJCQkJCQlsYXN0IFBST0NFU1NfQVJHUzsKCQkJCQkJfQoJCQkJCX0KCQkJCWNsb3NlKElOKTsKCQkJCX0KCQkJZGllICJJbnN1ZmZpY2llbnQgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiI7CgkJCX0KCQllbHNpZiAoL14zODYkLykKCQkJeyAkcHJvY2Vzc29yPTM4NjsgfQoJCWVsc2lmICgvXmZpcHMkLykKCQkJewoJCQkkZmlwcz0xOwoJCQl9CgkJZWxzaWYgKC9ecnNhcmVmJC8pCgkJCXsKCQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9yZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCgkJCSMgVGhlIGNoZWNrIGZvciB0aGUgb3B0aW9uIGlzIHRoZXJlIHNvIHNjcmlwdHMgYXJlbid0CgkJCSMgYnJva2VuCgkJCX0KCQllbHNpZiAoL15bLStdLykKCQkJewoJCQlpZiAoL14tW2xMXSguKikkLyBvciAvXi1XbCwvKQoJCQkJewoJCQkJJGxpYnMuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLVteLV0vIG9yIC9eXCsvKQoJCQkJewoJCQkJJF8gPX4gcy8lKFswLTlhLWZdezEsMn0pL2NocihoZXgoJDEpKS9nZWk7CgkJCQkkZmxhZ3MuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS1wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJHByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1saWJkaXI9KC4qKSQvKQoJCQkJewoJCQkJJGxpYmRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1vcGVuc3NsZGlyPSguKikkLykKCQkJCXsKCQkJCSRvcGVuc3NsZGlyPSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLWluc3RhbGwucHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRpbnN0YWxsX3ByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWtyYjUtKGRpcnxsaWJ8aW5jbHVkZXxmbGF2b3IpPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3sia3JiNS0iLiQxfT0kMjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLXpsaWItbGliPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3siemxpYi1saWIifT0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLXpsaWItaW5jbHVkZT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9PSItSSQxIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWZpcHNkaXI9KC4qKSQvKQoJCQkJewoJCQkJJGZpcHNkaXI9IiQxIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWZpcHNsaWJkaXI9KC4qKSQvKQoJCQkJewoJCQkJJGZpcHNsaWJkaXI9IiQxIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWJhc2VhZGRyPSguKikkLykKCQkJCXsKCQkJCSRiYXNlYWRkcj0iJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLWNyb3NzLWNvbXBpbGUtcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRjcm9zc19jb21waWxlX3ByZWZpeD0kMTsKCQkJCX0KCQkJZWxzZQoJCQkJewoJCQkJcHJpbnQgU1RERVJSICR1c2FnZTsKCQkJCWV4aXQoMSk7CgkJCQl9CgkJCX0KCQllbHNpZiAoJF8gPX4gL14oW146XSspOiguKykkLykKCQkJewoJCQlldmFsICJcJHRhYmxle1wkMX0gPSBcIiQyXCIiOyAjIGFsbG93ICR4eHggY29uc3RydWN0cyBpbiB0aGUgc3RyaW5nCgkJCSR0YXJnZXQ9JDE7CgkJCX0KCQllbHNlCgkJCXsKCQkJZGllICJ0YXJnZXQgYWxyZWFkeSBkZWZpbmVkIC0gJHRhcmdldCAob2ZmZW5kaW5nIGFyZzogJF8pXG4iIGlmICgkdGFyZ2V0IG5lICIiKTsKCQkJJHRhcmdldD0kXzsKCQkJfQoKCQl1bmxlc3MgKCRfIGVxICR0YXJnZXQgfHwgL15uby0vIHx8IC9eZGlzYWJsZS0vKQoJCQl7CgkJCSMgIm5vLS4uLiIgZm9sbG93cyBsYXRlciBhZnRlciBpbXBsaWVkIGRpc2FjdGl2YXRpb25zCgkJCSMgaGF2ZSBiZWVuIGRlcml2ZWQuICAoRG9uJ3QgdGFrZSB0aGlzIHRvbyBzZXJvaXVzbHksCgkJCSMgd2UgcmVhbGx5IG9ubHkgd3JpdGUgT1BUSU9OUyB0byB0aGUgTWFrZWZpbGUgb3V0IG9mCgkJCSMgbm9zdGFsZ2lhLikKCgkJCWlmICgkb3B0aW9ucyBlcSAiIikKCQkJCXsgJG9wdGlvbnMgPSAkXzsgfQoJCQllbHNlCgkJCQl7ICRvcHRpb25zIC49ICIgIi4kXzsgfQoJCQl9CgkJfQoJfQoKCgppZiAoJHByb2Nlc3NvciBlcSAiMzg2IikKCXsKCSRkaXNhYmxlZHsic3NlMiJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoIWRlZmluZWQoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9KSB8fCAkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gZXEgIiIpCgl7CgkkZGlzYWJsZWR7ImtyYjUifSA9ICJrcmI1LWZsYXZvciBub3Qgc3BlY2lmaWVkIjsKCX0KCmlmICghZGVmaW5lZCgkZGlzYWJsZWR7InpsaWItZHluYW1pYyJ9KSkKCXsKCSMgInpsaWItZHluYW1pYyIgd2FzIHNwZWNpZmljYWxseSBlbmFibGVkLCBzbyBlbmFibGUgInpsaWIiCglkZWxldGUgJGRpc2FibGVkeyJ6bGliIn07Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InJpam5kYWVsIn0pKQoJewoJJGRpc2FibGVkeyJhZXMifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImRlcyJ9KSkKCXsKCSRkaXNhYmxlZHsibWRjMiJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZWMifSkpCgl7CgkkZGlzYWJsZWR7ImVjZHNhIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsiZWNkaCJ9ID0gImZvcmNlZCI7Cgl9CgojIFNTTCAyLjAgcmVxdWlyZXMgTUQ1IGFuZCBSU0EKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KSkKCXsKCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoJGZpcHMgJiYgJGZpcHNsaWJkaXIgZXEgIiIpCgl7CgkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKCX0KCiMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCmlmICgkZmlwcykKCXsKCSRkaXNhYmxlZHsicnNheCJ9ID0gImZvcmNlZCI7Cgl9CgojIFNTTCAzLjAgYW5kIFRMUyByZXF1aXJlcyBNRDUgYW5kIFNIQSBhbmQgZWl0aGVyIFJTQSBvciBEU0ErREgKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7InNoYSJ9KQogICAgfHwgKGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkKICAgICAgICAmJiAoZGVmaW5lZCgkZGlzYWJsZWR7ImRzYSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZGgifSkpKSkKCXsKCSRkaXNhYmxlZHsic3NsMyJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7InRsczEifSA9ICJmb3JjZWQiOwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJ0bHMxIn0pKQoJewoJJGRpc2FibGVkeyJ0bHNleHQifSA9ICJmb3JjZWQiOwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJlYyJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZHNhIn0pCiAgICB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZGgifSkpCgl7CgkkZGlzYWJsZWR7Imdvc3QifSA9ICJmb3JjZWQiOwoJfQoKIyBTUlAgYW5kIEhFQVJUQkVBVFMgcmVxdWlyZSBUTFNFWFQKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJ0bHNleHQifSkpCgl7CgkkZGlzYWJsZWR7InNycCJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7ImhlYXJ0YmVhdHMifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCR0YXJnZXQgZXEgIlRBQkxFIikgewoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnRfdGFibGVfZW50cnkoJHRhcmdldCk7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0IGVxICJMSVNUIikgewoJZm9yZWFjaCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50OwoJCXByaW50ICJcbiI7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0ID1+IG0vXkN5Z1dpbjMyKC0uKikkLykgewoJJHRhcmdldCA9ICJDeWd3aW4iLiQxOwp9CgpwcmludCAiQ29uZmlndXJpbmcgZm9yICR0YXJnZXRcbiI7CgomdXNhZ2UgaWYgKCFkZWZpbmVkKCR0YWJsZXskdGFyZ2V0fSkpOwoKCmZvcmVhY2ggKHNvcnQgKGtleXMgJWRpc2FibGVkKSkKCXsKCSRvcHRpb25zIC49ICIgbm8tJF8iOwoKCXByaW50ZiAiICAgIG5vLSUtMTJzICUtMTBzIiwgJF8sICJbJGRpc2FibGVkeyRffV0iOwoKCWlmICgvXmRzbyQvKQoJCXsgJG5vX2RzbyA9IDE7IH0KCWVsc2lmICgvXnRocmVhZHMkLykKCQl7ICRub190aHJlYWRzID0gMTsgfQoJZWxzaWYgKC9ec2hhcmVkJC8pCgkJeyAkbm9fc2hhcmVkID0gMTsgfQoJZWxzaWYgKC9eemxpYiQvKQoJCXsgJHpsaWIgPSAwOyB9CgllbHNpZiAoL15zdGF0aWMtZW5naW5lJC8pCgkJeyB9CgllbHNpZiAoL156bGliLWR5bmFtaWMkLykKCQl7IH0KCWVsc2lmICgvXnN5bWxpbmtzJC8pCgkJeyAkc3ltbGluayA9IDA7IH0KCWVsc2lmICgvXnNzZTIkLykKCQl7ICRub19zc2UyID0gMTsgfQoJZWxzZQoJCXsKCQlteSAoJEFMR08sICRhbGdvKTsKCQkoJEFMR08gPSAkYWxnbyA9ICRfKSA9fiB0ci9bXC1hLXpdL1tfQS1aXS87CgoJCWlmICgvXmFzbSQvIHx8IC9eZXJyJC8gfHwgL15odyQvIHx8IC9eaHctLykKCQkJewoJCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgkJCgkJCWlmICgvXmVyciQvKQl7ICRmbGFncyAuPSAiLURPUEVOU1NMX05PX0VSUiAiOyB9CgkJCWVsc2lmICgvXmFzbSQvKQl7ICRub19hc20gPSAxOyB9CgkJCX0KCQllbHNlCgkJCXsKCQkJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCgkJCWlmICgvXmtyYjUkLykKCQkJCXsgJG5vX2tyYjUgPSAxOyB9CgkJCWVsc2UKCQkJCXsKCQkJCXB1c2ggQHNraXAsICRhbGdvOwoJCQkJIyBmaXgtdXAgY3J5cHRvL2RpcmVjdG9yeSBuYW1lKHMpCgkJCQlAc2tpcFskI3NraXBdPSJ3aHJscG9vbCIgaWYgJGFsZ28gZXEgIndoaXJscG9vbCI7CgkJCQlwcmludCAiIChza2lwIGRpcikiOwoKCQkJCSRkZXBmbGFncyAuPSAiIC1ET1BFTlNTTF9OT18kQUxHTyI7CgkJCQl9CgkJCX0KCQl9CgoJcHJpbnQgIlxuIjsKCX0KCm15ICRleHBfY2ZsYWdzID0gIiI7CmZvcmVhY2ggKHNvcnQgQGV4cGVyaW1lbnRhbCkKCXsKCW15ICRBTEdPOwoJKCRBTEdPID0gJF8pID1+IHRyL1thLXpdL1tBLVpdLzsKCgkjIG9wZW5zc2xjb25mLmggd2lsbCBzZXQgT1BFTlNTTF9OT18uLi4gdW5sZXNzIE9QRU5TU0xfRVhQRVJJTUVOVEFMXy4uLiBpcyBkZWZpbmVkCgkkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJJGV4cF9jZmxhZ3MgLj0gIiAtRE9QRU5TU0xfRVhQRVJJTUVOVEFMXyRBTEdPIjsKCX0KCm15ICRJc01LMU1GPXNjYWxhciBncmVwIC9eJHRhcmdldCQvLEBNSzFNRl9CdWlsZHM7CgokZXhlX2V4dD0iLmV4ZSIgaWYgKCR0YXJnZXQgZXEgIkN5Z3dpbiIgfHwgJHRhcmdldCBlcSAiREpHUFAiIHx8ICR0YXJnZXQgPX4gL15taW5ndy8pOwokZXhlX2V4dD0iLm5sbSIgaWYgKCR0YXJnZXQgPX4gL25ldHdhcmUvKTsKJGV4ZV9leHQ9Ii5wbSIgIGlmICgkdGFyZ2V0ID1+IC92b3MvKTsKJG9wZW5zc2xkaXI9Ii91c3IvbG9jYWwvc3NsIiBpZiAoJG9wZW5zc2xkaXIgZXEgIiIgYW5kICRwcmVmaXggZXEgIiIpOwokcHJlZml4PSRvcGVuc3NsZGlyIGlmICRwcmVmaXggZXEgIiI7CgokZGVmYXVsdF9yYW5saWI9ICZ3aGljaCgicmFubGliIikgb3IgJGRlZmF1bHRfcmFubGliPSJ0cnVlIjsKJHBlcmw9JEVOVnsnUEVSTCd9IG9yICRwZXJsPSZ3aGljaCgicGVybDUiKSBvciAkcGVybD0md2hpY2goInBlcmwiKQogIG9yICRwZXJsPSJwZXJsIjsKbXkgJG1ha2UgPSAkRU5WeydNQUtFJ30gfHwgIm1ha2UiOwoKJGNyb3NzX2NvbXBpbGVfcHJlZml4PSRFTlZ7J0NST1NTX0NPTVBJTEUnfSBpZiAkY3Jvc3NfY29tcGlsZV9wcmVmaXggZXEgIiI7CgpjaG9wICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyID1+IC9cLyQvOwpjaG9wICRwcmVmaXggaWYgJHByZWZpeCA9fiAvLlwvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKIyBBbGxvdyBlbnZpcm9ubWVudCBDQyB0byBvdmVycmlkZSBjb21waWxlci4uLgppZigkRU5We0NDfSkgewogICAgJGNjID0gJEVOVntDQ307Cn0KbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRkZXNfb2JqID0gJGZpZWxkc1skaWR4X2Rlc19vYmpdOwpteSAkYWVzX29iaiA9ICRmaWVsZHNbJGlkeF9hZXNfb2JqXTsKbXkgJGJmX29iaiA9ICRmaWVsZHNbJGlkeF9iZl9vYmpdOwpteSAkbWQ1X29iaiA9ICRmaWVsZHNbJGlkeF9tZDVfb2JqXTsKbXkgJHNoYTFfb2JqID0gJGZpZWxkc1skaWR4X3NoYTFfb2JqXTsKbXkgJGNhc3Rfb2JqID0gJGZpZWxkc1skaWR4X2Nhc3Rfb2JqXTsKbXkgJHJjNF9vYmogPSAkZmllbGRzWyRpZHhfcmM0X29ial07Cm15ICRybWQxNjBfb2JqID0gJGZpZWxkc1skaWR4X3JtZDE2MF9vYmpdOwpteSAkcmM1X29iaiA9ICRmaWVsZHNbJGlkeF9yYzVfb2JqXTsKbXkgJHdwX29iaiA9ICRmaWVsZHNbJGlkeF93cF9vYmpdOwpteSAkY21sbF9vYmogPSAkZmllbGRzWyRpZHhfY21sbF9vYmpdOwpteSAkbW9kZXNfb2JqID0gJGZpZWxkc1skaWR4X21vZGVzX29ial07Cm15ICRlbmdpbmVzX29iaiA9ICRmaWVsZHNbJGlkeF9lbmdpbmVzX29ial07Cm15ICRwZXJsYXNtX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9wZXJsYXNtX3NjaGVtZV07Cm15ICRkc29fc2NoZW1lID0gJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdOwpteSAkc2hhcmVkX3RhcmdldCA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfdGFyZ2V0XTsKbXkgJHNoYXJlZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfY2ZsYWddOwpteSAkc2hhcmVkX2xkZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfbGRmbGFnXTsKbXkgJHNoYXJlZF9leHRlbnNpb24gPSAkZmllbGRzWyRpZHhfc2hhcmVkX2V4dGVuc2lvbl07Cm15ICRyYW5saWIgPSAkRU5WeydSQU5MSUInfSB8fCAkZmllbGRzWyRpZHhfcmFubGliXTsKbXkgJGFyID0gJEVOVnsnQVInfSB8fCAiYXIiOwpteSAkYXJmbGFncyA9ICRmaWVsZHNbJGlkeF9hcmZsYWdzXTsKbXkgJG11bHRpbGliID0gJGZpZWxkc1skaWR4X211bHRpbGliXTsKCiMgaWYgJHByZWZpeC9saWIkbXVsdGlsaWIgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhlbgojIGFzc3VtZSB0aGF0IGl0J3Mgbm90IHNlYXJjaGVkIGJ5IGxpbmtlciBhdXRvbWF0aWNhbGx5LCBpbgojIHdoaWNoIGNhc2UgYWRkaW5nICRtdWx0aWxpYiBzdWZmaXggY2F1c2VzIG1vcmUgZ3JpZWYgdGhhbgojIHdlJ3JlIHJlYWR5IHRvIHRvbGVyYXRlLCBzbyBkb24ndC4uLgokbXVsdGlsaWI9IiIgaWYgIS1kICIkcHJlZml4L2xpYiRtdWx0aWxpYiI7CgokbGliZGlyPSJsaWIkbXVsdGlsaWIiIGlmICRsaWJkaXIgZXEgIiI7CgokY2ZsYWdzID0gIiRjZmxhZ3MkZXhwX2NmbGFncyI7CgojICclJyBpbiAkbGZsYWdzIGlzIHVzZWQgdG8gc3BsaXQgZmxhZ3MgdG8gInByZS0iIGFuZCBwb3N0LWZsYWdzCm15ICgkcHJlbGZsYWdzLCRwb3N0bGZsYWdzKT1zcGxpdCgnJScsJGxmbGFncyk7CmlmIChkZWZpbmVkKCRwb3N0bGZsYWdzKSkJeyAkbGZsYWdzPSRwb3N0bGZsYWdzOwl9CmVsc2UJCQkJeyAkbGZsYWdzPSRwcmVsZmxhZ3M7IHVuZGVmICRwcmVsZmxhZ3M7CX0KCmlmICgkdGFyZ2V0ID1+IC9ebWluZ3cvICYmIGAkY2MgLS10YXJnZXQtaGVscCAyPiYxYCAhfiBtL1wtbW5vXC1jeWd3aW4vbSkKCXsKCSRjZmxhZ3MgPX4gcy9cLW1ub1wtY3lnd2luXHMqLy87Cgkkc2hhcmVkX2xkZmxhZyA9fiBzL1wtbW5vXC1jeWd3aW5ccyovLzsKCX0KCm15ICRub19zaGFyZWRfd2Fybj0wOwpteSAkbm9fdXNlcl9jZmxhZ3M9MDsKCmlmICgkZmxhZ3MgbmUgIiIpCXsgJGNmbGFncz0iJGZsYWdzJGNmbGFncyI7IH0KZWxzZQkJCXsgJG5vX3VzZXJfY2ZsYWdzPTE7ICAgICAgIH0KCiMgS2VyYmVyb3Mgc2V0dGluZ3MuICBUaGUgZmxhdm9yIG11c3QgYmUgcHJvdmlkZWQgZnJvbSBvdXRzaWRlLCBlaXRoZXIgdGhyb3VnaAojIHRoZSBzY3JpcHQgImNvbmZpZyIgb3IgbWFudWFsbHkuCmlmICghJG5vX2tyYjUpCgl7CglteSAoJGxyZXNvbHYsICRscGF0aCwgJGxleHQpOwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltIaF1laW1kYWwkLykKCQl7CgkJZGllICJTb3JyeSwgSGVpbWRhbCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIjsKCQl9CgkjIyMjIyBIQUNLIHRvIGZvcmNlIHVzZSBvZiBIZWltZGFsLgoJIyMjIyMgV0FSTklORzogU2luY2Ugd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYWRlcXVhdGUgc3VwcG9ydCBmb3IgSGVpbWRhbCwKCSMjIyMjICAgICAgICAgIHVzaW5nIHRoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQuICBZb3UnbGwgaGF2ZSB0byBtYWtlCgkjIyMjIyAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiB5b3UgZG8sIHBsZWFzZSBzZW5kCgkjIyMjIyAgICAgICAgICBwYXRjaGVzIHRvIG9wZW5zc2wtZGV2QG9wZW5zc2wub3JnCglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eZm9yY2UtW0hoXWVpbWRhbCQvKQoJCXsKCQl3YXJuICJIZWltZGFsIGlzbid0IHJlYWxseSBzdXBwb3J0ZWQuICBZb3VyIGJ1aWxkIFdJTEwgYnJlYWtcbiI7CgkJd2FybiAiSWYgeW91IGZpeCB0aGUgcHJvYmxlbXMsIHBsZWFzZSBzZW5kIGEgcGF0Y2ggdG8gb3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnXG4iOwoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2hlaW1kYWwiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGkgLWxrcmI1IC1sY29tX2VyciIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfSEVJTURBTCAkY2ZsYWdzIjsKCQl9CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW01tXVtJaV1bVHRdLykKCQl7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3Iva2VyYmVyb3MiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8iCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X01JVCAkY2ZsYWdzIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gcy9eW01tXVtJaV1bVHRdWy5fLV0qLy87CgkJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXjFbLl8tXSpbMDFdLykKCQkJewoJCQkkY2ZsYWdzPSItREtSQjVfTUlUX09MRDExICRjZmxhZ3MiOwoJCQl9CgkJfQoJTFJFU09MVjoKCWZvcmVhY2ggJGxwYXRoICgiL2xpYiIsICIvdXNyL2xpYiIpCgkJewoJCWZvcmVhY2ggJGxleHQgKCJhIiwgInNvIikKCQkJewoJCQkkbHJlc29sdiA9ICIkbHBhdGgvbGlicmVzb2x2LiRsZXh0IjsKCQkJbGFzdCBMUkVTT0xWCWlmICgtciAiJGxyZXNvbHYiKTsKCQkJJGxyZXNvbHYgPSAiIjsKCQkJfQoJCX0KCSR3aXRoYXJnc3sia3JiNS1saWIifSAuPSAiIC1scmVzb2x2IgoJCWlmICgiJGxyZXNvbHYiIG5lICIiKTsKCSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gPSAiLUkiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4iL2luY2x1ZGUiCgkJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBlcSAiIiAmJgoJCSAgICR3aXRoYXJnc3sia3JiNS1kaXIifSBuZSAiIjsKCX0KCiMgVGhlIERTTyBjb2RlIGN1cnJlbnRseSBhbHdheXMgaW1wbGVtZW50cyBhbGwgZnVuY3Rpb25zIHNvIHRoYXQgbm8KIyBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgZnJvbSBhIGNvbXBpbGF0aW9uIHBvaW50CiMgb2Ygdmlldy4gSG93ZXZlciwgdGhlICJtZXRob2QicyBtYXkgcmV0dXJuIHplcm8gdW5sZXNzIHRoYXQgcGxhdGZvcm0KIyBoYXMgc3VwcG9ydCBjb21waWxlZCBpbiBmb3IgdGhlbS4gQ3VycmVudGx5IGVhY2ggbWV0aG9kIGlzIGVuYWJsZWQKIyBieSBhIGRlZmluZSAiRFNPXzxuYW1lPiIgLi4uIHdlIHRyYW5zbGF0ZSB0aGUgImRzb19zY2hlbWUiIGNvbmZpZwojIHN0cmluZyBlbnRyeSBpbnRvIHVzaW5nIHRoZSBmb2xsb3dpbmcgbG9naWM7Cm15ICRkc29fY2ZsYWdzOwppZiAoISRub19kc28gJiYgJGRzb19zY2hlbWUgbmUgIiIpCgl7CgkkZHNvX3NjaGVtZSA9fiB0ci9bYS16XS9bQS1aXS87CglpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0giOwoJCX0KCWVsc2lmICgkZHNvX3NjaGVtZSBlcSAiRExGQ05fTk9fSCIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIjsKCQl9CgllbHNlCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPXyRkc29fc2NoZW1lIjsKCQl9CgkkY2ZsYWdzID0gIiRkc29fY2ZsYWdzICRjZmxhZ3MiOwoJfQoKbXkgJHRocmVhZF9jZmxhZ3M7Cm15ICR0aHJlYWRfZGVmaW5lczsKaWYgKCR0aHJlYWRfY2ZsYWcgbmUgIih1bmtub3duKSIgJiYgISRub190aHJlYWRzKQoJewoJIyBJZiB3ZSBrbm93IGhvdyB0byBkbyBpdCwgc3VwcG9ydCB0aHJlYWRzIGJ5IGRlZmF1bHQuCgkkdGhyZWFkcyA9IDE7Cgl9CmlmICgkdGhyZWFkX2NmbGFnIGVxICIodW5rbm93bikiICYmICR0aHJlYWRzKQoJewoJIyBJZiB0aGUgdXNlciBhc2tlZCBmb3IgInRocmVhZHMiLCBbc11oZSBpcyBhbHNvIGV4cGVjdGVkIHRvCgkjIHByb3ZpZGUgYW55IHN5c3RlbS1kZXBlbmRlbnQgY29tcGlsZXIgb3B0aW9ucyB0aGF0IGFyZQoJIyBuZWNlc3NhcnkuCglpZiAoJG5vX3VzZXJfY2ZsYWdzKQoJCXsKCQlwcmludCAiWW91IGFza2VkIGZvciBtdWx0aS10aHJlYWRpbmcgc3VwcG9ydCwgYnV0IGRpZG4ndFxuIjsKCQlwcmludCAicHJvdmlkZSBhbnkgc3lzdGVtLXNwZWNpZmljIGNvbXBpbGVyIG9wdGlvbnNcbiI7CgkJZXhpdCgxKTsKCQl9CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJGNmbGFncyIgOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKCX0KZWxzZQoJewoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICR0aHJlYWRfY2ZsYWcgJGNmbGFncyI7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwojCW15ICRkZWY7CiMJZm9yZWFjaCAkZGVmIChzcGxpdCAnICcsJHRocmVhZF9jZmxhZykKIwkJewojCQlpZiAoJGRlZiA9fiBzL14tRC8vICYmICRkZWYgIX4gL15fLykKIwkJCXsKIwkJCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSAkZGVmXG4iOwojCQkJfQojCQl9Cgl9CQoKJGxmbGFncz0iJGxpYnMkbGZsYWdzIiBpZiAoJGxpYnMgbmUgIiIpOwoKaWYgKCRub19hc20pCgl7CgkkY3B1aWRfb2JqPSRibl9vYmo9CgkkZGVzX29iaj0kYWVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0kY21sbF9vYmo9CgkkbW9kZXNfb2JqPSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSRlbmdpbmVzX29iaj0iIjsKCX0KCmlmICghJG5vX3NoYXJlZCkKCXsKCSRjYXN0X29iaj0iIjsJIyBDQVNUIGFzc2VtYmxlciBpcyBub3QgUElDCgl9CgppZiAoJHRocmVhZHMpCgl7CgkkY2ZsYWdzPSR0aHJlYWRfY2ZsYWdzOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgLj0gJHRocmVhZF9kZWZpbmVzOwoJfQoKaWYgKCR6bGliKQoJewoJJGNmbGFncyA9ICItRFpMSUIgJGNmbGFncyI7CglpZiAoZGVmaW5lZCgkZGlzYWJsZWR7InpsaWItZHluYW1pYyJ9KSkKCQl7CgkJaWYgKGRlZmluZWQoJHdpdGhhcmdzeyJ6bGliLWxpYiJ9KSkKCQkJewoJCQkkbGZsYWdzID0gIiRsZmxhZ3MgLUwiIC4gJHdpdGhhcmdzeyJ6bGliLWxpYiJ9IC4gIiAtbHoiOwoJCQl9CgkJZWxzZQoJCQl7CgkJCSRsZmxhZ3MgPSAiJGxmbGFncyAtbHoiOwoJCQl9CgkJfQoJZWxzZQoJCXsKCQkkY2ZsYWdzID0gIi1EWkxJQl9TSEFSRUQgJGNmbGFncyI7CgkJfQoJfQoKIyBZb3Ugd2lsbCBmaW5kIHNobGliX21hcmsxIGFuZCBzaGxpYl9tYXJrMiBleHBsYWluZWQgaW4gTWFrZWZpbGUub3JnCm15ICRzaGFyZWRfbWFyayA9ICIiOwppZiAoJHNoYXJlZF90YXJnZXQgZXEgIiIpCgl7Cgkkbm9fc2hhcmVkX3dhcm4gPSAxIGlmICEkbm9fc2hhcmVkOwoJJG5vX3NoYXJlZCA9IDE7Cgl9CmlmICghJG5vX3NoYXJlZCkKCXsKCWlmICgkc2hhcmVkX2NmbGFnIG5lICIiKQoJCXsKCQkkY2ZsYWdzID0gIiRzaGFyZWRfY2ZsYWcgLURPUEVOU1NMX1BJQyAkY2ZsYWdzIjsKCQl9Cgl9CgppZiAoISRJc01LMU1GKQoJewoJIyBhZGQge25vLX1zdGF0aWMtZW5naW5lIHRvIG9wdGlvbnMgdG8gYWxsb3cgbWtkZWYucGwgdG8gd29yayB3aXRob3V0IGV4dHJhIGFyZ3VtZW50cwoJaWYgKCRub19zaGFyZWQpCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fRFlOQU1JQ19FTkdJTkVcbiI7CgkJJG9wdGlvbnMuPSIgc3RhdGljLWVuZ2luZSI7CgkJfQoJZWxzZQoJCXsKCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkVcbiI7CgkJJG9wdGlvbnMuPSIgbm8tc3RhdGljLWVuZ2luZSI7CgkJfQoJfQoKJGNwdWlkX29iai49IiB1cGxpbmsubyB1cGxpbmsteDg2Lm8iIGlmICgkY2ZsYWdzID1+IC9cLURPUEVOU1NMX1VTRV9BUFBMSU5LLyk7CgojCiMgUGxhdGZvcm0gZml4LXVwcwojCmlmICgkdGFyZ2V0ID1+IC9cLWljYyQvKQkjIEludGVsIEMgY29tcGlsZXIKCXsKCW15ICRpY2N2ZXI9MDsKCWlmIChvcGVuKEZELCIkY2MgLVYgMj4mMSB8IikpCgkJewoJCXdoaWxlKDxGRD4pIHsgJGljY3Zlcj0kMSBpZiAoL1ZlcnNpb24gKFswLTldKylcLi8pOyB9CgkJY2xvc2UoRkQpOwoJCX0KCWlmICgkaWNjdmVyPj04KQoJCXsKCQkjIEVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IGZyb20gbGliaXJjLmEuIFRoaXMgaXMKCQkjIGVzc2VudGlhbCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCwgYXMgb3RoZXJ3aXNlCgkJIyBhcHBzL29wZW5zc2wgY2FuIGVuZCB1cCBpbiBlbmRsZXNzIGxvb3AgdXBvbiBzdGFydHVwLi4uCgkJJGNmbGFncy49IiAtRG1lbWNweT1fX2J1aWx0aW5fbWVtY3B5IC1EbWVtc2V0PV9fYnVpbHRpbl9tZW1zZXQiOwoJCX0KCWlmICgkaWNjdmVyPj05KQoJCXsKCQkkY2ZsYWdzLj0iIC1pLXN0YXRpYyI7CgkJJGNmbGFncz1+cy9cLW5vX2NwcHJ0Ly1uby1jcHBydC87CgkJfQoJaWYgKCRpY2N2ZXI+PTEwKQoJCXsKCQkkY2ZsYWdzPX5zL1wtaVwtc3RhdGljLy1zdGF0aWMtaW50ZWwvOwoJCX0KCX0KCiMgVW5saWtlIG90aGVyIE9TZXMgKGxpa2UgU29sYXJpcywgTGludXgsIFRydTY0LCBJUklYKSBCU0QgcnVuLXRpbWUKIyBsaW5rZXJzICh0ZXN0ZWQgT3BlbkJTRCwgTmV0QlNEIGFuZCBGcmVlQlNEKSAiZGVtYW5kIiBSUEFUSCBzZXQgb24KIyAuc28gb2JqZWN0cy4gQXBwYXJlbnRseSBhcHBsaWNhdGlvbiBSUEFUSCBpcyBub3QgZ2xvYmFsIGFuZCBkb2VzCiMgbm90IGFwcGx5IHRvIC5zbyBsaW5rZWQgd2l0aCBvdGhlciAuc28uIFByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZgojIHdoZW4gbGlic3NsLnNvIGZhaWxzIHRvIGxvYWQgbGliY3J5cHRvLnNvLiBPbmUgY2FuIGFyZ3VlIHRoYXQgd2UKIyBzaG91bGQgZW5ncmF2ZSB0aGlzIGludG8gTWFrZWZpbGUuc2hhcmVkIHJ1bGVzIG9yIGludG8gQlNELSogY29uZmlnCiMgbGluZXMgYWJvdmUuIE1lYW53aGlsZSBsZXQncyB0cnkgdG8gYmUgY2F1dGlvdXMgYW5kIHBhc3MgLXJwYXRoIHRvCiMgbGlua2VyIG9ubHkgd2hlbiAtLXByZWZpeCBpcyBub3QgL3Vzci4KaWYgKCR0YXJnZXQgPX4gL15CU0RcLS8pCgl7Cgkkc2hhcmVkX2xkZmxhZy49IiAtV2wsLXJwYXRoLFwkKExJQlJQQVRIKSIgaWYgKCRwcmVmaXggIX4gbXxeL3VzclsvXSokfCk7Cgl9CgppZiAoJHN5c19pZCBuZSAiIikKCXsKCSMkY2ZsYWdzPSItRE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkICRjZmxhZ3MiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiNkZWZpbmUgT1BFTlNTTF9TWVNOQU1FXyRzeXNfaWRcbiI7Cgl9CgppZiAoJHJhbmxpYiBlcSAiIikKCXsKCSRyYW5saWIgPSAkZGVmYXVsdF9yYW5saWI7Cgl9CgojbXkgKCRibjEpPXNwbGl0KC9ccysvLCRibl9vYmopOwojJGJuMSA9ICIiIHVubGVzcyBkZWZpbmVkICRibjE7CiMkYm4xPSRibl9hc20gdW5sZXNzICgkYm4xID1+IC9cLm8kLyk7CiMkYm5fb2JqPSIkYm4xIjsKCiRjcHVpZF9vYmo9IiIgaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpOwoKJGJuX29iaiA9ICRibl9hc20gdW5sZXNzICRibl9vYmogbmUgIiI7CiMgYm4tNTg2IGlzIHRoZSBvbmx5IG9uZSBpbXBsZW1lbnRpbmcgYm5fKl9wYXJ0X3dvcmRzCiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9QQVJUX1dPUkRTIiBpZiAoJGJuX29iaiA9fiAvYm4tNTg2Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm9fc3NlMiAmJiAkYm5fb2JqID1+IC84Ni8pOwoKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8tbW9udC8pOwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVDUiIGlmICgkYm5fb2JqID1+IC8tbW9udDUvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYm5fb2JqID1+IC8tZ2YybS8pOwoKaWYgKCRmaXBzKQoJewoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwoJJGNmbGFncyAuPSAiIC1JXCQoRklQU0RJUikvaW5jbHVkZSI7Cgl9CgokY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOwokZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7CiRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7CiRjYXN0X29iaj0kY2FzdF9lbmMJdW5sZXNzICgkY2FzdF9vYmogPX4gL1wubyQvKTsKJHJjNF9vYmo9JHJjNF9lbmMJdW5sZXNzICgkcmM0X29iaiA9fiAvXC5vJC8pOwokcmM1X29iaj0kcmM1X2VuYwl1bmxlc3MgKCRyYzVfb2JqID1+IC9cLm8kLyk7CmlmICgkc2hhMV9vYmogPX4gL1wubyQvKQoJewojCSRzaGExX29iaj0kc2hhMV9lbmM7CgkkY2ZsYWdzLj0iIC1EU0hBMV9BU00iICAgaWYgKCRzaGExX29iaiA9fiAvc3g4Ni8gfHwgJHNoYTFfb2JqID1+IC9zaGExLyk7CgkkY2ZsYWdzLj0iIC1EU0hBMjU2X0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhMjU2Lyk7CgkkY2ZsYWdzLj0iIC1EU0hBNTEyX0FTTSIgaWYgKCRzaGExX29iaiA9fiAvc2hhNTEyLyk7CglpZiAoJHNoYTFfb2JqID1+IC9zc2UyLykKCSAgICB7CWlmICgkbm9fc3NlMikKCQl7ICAgJHNoYTFfb2JqID1+IHMvXFMqc3NlMlxTKy8vOyAgICAgICAgfQoJCWVsc2lmICgkY2ZsYWdzICF+IC9PUEVOU1NMX0lBMzJfU1NFMi8pCgkJeyAgICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiI7ICAgIH0KCSAgICB9Cgl9CmlmICgkbWQ1X29iaiA9fiAvXC5vJC8pCgl7CiMJJG1kNV9vYmo9JG1kNV9lbmM7CgkkY2ZsYWdzLj0iIC1ETUQ1X0FTTSI7Cgl9CmlmICgkcm1kMTYwX29iaiA9fiAvXC5vJC8pCgl7CiMJJHJtZDE2MF9vYmo9JHJtZDE2MF9lbmM7CgkkY2ZsYWdzLj0iIC1EUk1EMTYwX0FTTSI7Cgl9CmlmICgkYWVzX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EQUVTX0FTTSI7CgkjIGFlcy1jdHIubyBpcyBub3QgYSByZWFsIGZpbGUsIG9ubHkgaW5kaWNhdGlvbiB0aGF0IGFzc2VtYmxlcgoJIyBtb2R1bGUgaW1wbGVtZW50cyBBRVNfY3RyMzJfZW5jcnlwdC4uLgoJJGNmbGFncy49IiAtREFFU19DVFJfQVNNIiBpZiAoJGFlc19vYmogPX4gcy9ccyphZXNcLWN0clwuby8vKTsKCSMgYWVzLXh0cy5vIGluZGljYXRlcyBwcmVzZW5zZSBvZiBBRVNfeHRzX1tlbnxkZV1jcnlwdC4uLgoJJGNmbGFncy49IiAtREFFU19YVFNfQVNNIiBpZiAoJGFlc19vYmogPX4gcy9ccyphZXNcLXh0c1wuby8vKTsKCSRhZXNfb2JqID1+IHMvXHMqKHZwYWVzfGFlc25pKVwteDg2XC5vLy9nIGlmICgkbm9fc3NlMik7CgkkY2ZsYWdzLj0iIC1EVlBBRVNfQVNNIiBpZiAoJGFlc19vYmogPX4gbS92cGFlcy8pOwoJJGNmbGFncy49IiAtREJTQUVTX0FTTSIgaWYgKCRhZXNfb2JqID1+IG0vYnNhZXMvKTsKCX0KZWxzZQl7CgkkYWVzX29iaj0kYWVzX2VuYzsKCX0KJHdwX29iaj0iIiBpZiAoJHdwX29iaiA9fiAvbW14LyAmJiAkcHJvY2Vzc29yIGVxICIzODYiKTsKaWYgKCR3cF9vYmogPX4gL1wubyQvICYmICEkZGlzYWJsZWR7IndoaXJscG9vbCJ9KQoJewoJJGNmbGFncy49IiAtRFdISVJMUE9PTF9BU00iOwoJfQplbHNlCXsKCSR3cF9vYmo9IndwX2Jsb2NrLm8iOwoJfQokY21sbF9vYmo9JGNtbGxfZW5jCXVubGVzcyAoJGNtbGxfb2JqID1+IC8ubyQvKTsKaWYgKCRtb2Rlc19vYmogPX4gL2doYXNoLykKCXsKCSRjZmxhZ3MuPSIgLURHSEFTSF9BU00iOwoJfQoKIyAiU3RyaW5naWZ5IiB0aGUgQyBmbGFncyBzdHJpbmcuICBUaGlzIHBlcm1pdHMgaXQgdG8gYmUgbWFkZSBwYXJ0IG9mIGEgc3RyaW5nCiMgYW5kIHdvcmtzIGFzIHdlbGwgb24gY29tbWFuZCBsaW5lcy4KJGNmbGFncyA9fiBzLyhbXFxcIl0pL1xcXDEvZzsKCm15ICR2ZXJzaW9uID0gInVua25vd24iOwpteSAkdmVyc2lvbl9udW0gPSAidW5rbm93biI7Cm15ICRtYWpvciA9ICJ1bmtub3duIjsKbXkgJG1pbm9yID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9udW1iZXIgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgPSAidW5rbm93biI7Cm15ICRzaGxpYl9tYWpvciA9ICJ1bmtub3duIjsKbXkgJHNobGliX21pbm9yID0gInVua25vd24iOwoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3Nsdi5oJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBvcGVuc3Nsdi5oOiQhXG4iOwp3aGlsZSAoPElOPikKCXsKCSR2ZXJzaW9uPSQxIGlmIC9PUEVOU1NMLlZFUlNJT04uVEVYVC4qT3BlblNTTCAoXFMrKSAvOwoJJHZlcnNpb25fbnVtPSQxIGlmIC9PUEVOU1NMLlZFUlNJT04uTlVNQkVSLioweChcUyspLzsKCSRzaGxpYl92ZXJzaW9uX251bWJlcj0kMSBpZiAvU0hMSUJfVkVSU0lPTl9OVU1CRVIgKiIoW14iXSspIi87Cgkkc2hsaWJfdmVyc2lvbl9oaXN0b3J5PSQxIGlmIC9TSExJQl9WRVJTSU9OX0hJU1RPUlkgKiIoW14iXSopIi87Cgl9CmNsb3NlKElOKTsKaWYgKCRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgbmUgIiIpIHsgJHNobGliX3ZlcnNpb25faGlzdG9yeSAuPSAiOiI7IH0KCmlmICgkdmVyc2lvbiA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRtYWpvcj0kMTsKCSRtaW5vcj0kMjsKCX0KCmlmICgkc2hsaWJfdmVyc2lvbl9udW1iZXIgPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7Cgkkc2hsaWJfbWFqb3I9JDE7Cgkkc2hsaWJfbWlub3I9JDI7Cgl9CgppZiAoJHN0cmljdF93YXJuaW5ncykKCXsKCW15ICR3b3B0OwoJZGllICJFUlJPUiAtLXN0cmljdC13YXJuaW5ncyByZXF1aXJlcyBnY2MiIHVubGVzcyAoJGNjID1+IC9nY2MkLyk7Cglmb3JlYWNoICR3b3B0IChzcGxpdCAvXHMrLywgJGdjY19kZXZ0ZWFtX3dhcm4pCgkJewoJCSRjZmxhZ3MgLj0gIiAkd29wdCIgdW5sZXNzICgkY2ZsYWdzID1+IC8kd29wdC8pCgkJfQoJfQoKb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOwp1bmxpbmsoIiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkICRNYWtlZmlsZS5uZXc6JCFcbiIgaWYgLWUgIiRNYWtlZmlsZS5uZXciOwpvcGVuKE9VVCwiPiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgJE1ha2VmaWxlLm5ldzokIVxuIjsKcHJpbnQgT1VUICIjIyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBNYWtlZmlsZS5vcmcgYnkgQ29uZmlndXJlLlxuXG4iOwpteSAkc2RpcnM9MDsKd2hpbGUgKDxJTj4pCgl7CgljaG9tcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhccykkZGlyIC8kMS87CgkJCXMvXHMkZGlyJC8vOwoJCQl9CgkJfQoJJHNkaXJzID0gMCB1bmxlc3MgL1xcJC87CiAgICAgICAgcy9lbmdpbmVzIC8vIGlmICgvXkRJUlM9LyAmJiAkZGlzYWJsZWR7ImVuZ2luZSJ9KTsKCXMvY2Nnb3N0Ly8gaWYgKC9eRU5HRElSUz0vICYmICRkaXNhYmxlZHsiZ29zdCJ9KTsKCXMvXlZFUlNJT049LiovVkVSU0lPTj0kdmVyc2lvbi87CglzL15NQUpPUj0uKi9NQUpPUj0kbWFqb3IvOwoJcy9eTUlOT1I9LiovTUlOT1I9JG1pbm9yLzsKCXMvXlNITElCX1ZFUlNJT05fTlVNQkVSPS4qL1NITElCX1ZFUlNJT05fTlVNQkVSPSRzaGxpYl92ZXJzaW9uX251bWJlci87CglzL15TSExJQl9WRVJTSU9OX0hJU1RPUlk9LiovU0hMSUJfVkVSU0lPTl9ISVNUT1JZPSRzaGxpYl92ZXJzaW9uX2hpc3RvcnkvOwoJcy9eU0hMSUJfTUFKT1I9LiovU0hMSUJfTUFKT1I9JHNobGliX21ham9yLzsKCXMvXlNITElCX01JTk9SPS4qL1NITElCX01JTk9SPSRzaGxpYl9taW5vci87CglzL15TSExJQl9FWFQ9LiovU0hMSUJfRVhUPSRzaGFyZWRfZXh0ZW5zaW9uLzsKCXMvXklOU1RBTExUT1A9LiokL0lOU1RBTExUT1A9JHByZWZpeC87CglzL15NVUxUSUxJQj0uKiQvTVVMVElMSUI9JG11bHRpbGliLzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eTElCRElSPS4qJC9MSUJESVI9JGxpYmRpci87CglzL15JTlNUQUxMX1BSRUZJWD0uKiQvSU5TVEFMTF9QUkVGSVg9JGluc3RhbGxfcHJlZml4LzsKCXMvXlBMQVRGT1JNPS4qJC9QTEFURk9STT0kdGFyZ2V0LzsKCXMvXk9QVElPTlM9LiokL09QVElPTlM9JG9wdGlvbnMvOwoJcy9eQ09ORklHVVJFX0FSR1M9LiokL0NPTkZJR1VSRV9BUkdTPSRhcmd2c3RyaW5nLzsKCWlmICgkY3Jvc3NfY29tcGlsZV9wcmVmaXgpCgkJewoJCXMvXkNDPS4qJC9DUk9TU19DT01QSUxFPSAkY3Jvc3NfY29tcGlsZV9wcmVmaXhcbkNDPSBcJFwoQ1JPU1NfQ09NUElMRVwpJGNjLzsKCQlzL15BUj1ccyovQVI9IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXk5NPVxzKi9OTT0gXCRcKENST1NTX0NPTVBJTEVcKS87CgkJcy9eUkFOTElCPVxzKi9SQU5MSUI9IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXk1BS0VERVBQUk9HPS4qJC9NQUtFREVQUFJPRz0gXCRcKENST1NTX0NPTVBJTEVcKSRjYy8gaWYgJGNjIGVxICJnY2MiOwoJCX0KCWVsc2UJewoJCXMvXkNDPS4qJC9DQz0gJGNjLzsKCQlzL15BUj1ccyphci9BUj0gJGFyLzsKCQlzL15SQU5MSUI9LiovUkFOTElCPSAkcmFubGliLzsKCQlzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJCX0KCXMvXkNGTEFHPS4qJC9DRkxBRz0gJGNmbGFncy87CglzL15ERVBGTEFHPS4qJC9ERVBGTEFHPSRkZXBmbGFncy87CglzL15QRVhfTElCUz0uKiQvUEVYX0xJQlM9ICRwcmVsZmxhZ3MvOwoJcy9eRVhfTElCUz0uKiQvRVhfTElCUz0gJGxmbGFncy87CglzL15FWEVfRVhUPS4qJC9FWEVfRVhUPSAkZXhlX2V4dC87CglzL15DUFVJRF9PQko9LiokL0NQVUlEX09CSj0gJGNwdWlkX29iai87CglzL15CTl9BU009LiokL0JOX0FTTT0gJGJuX29iai87CglzL15ERVNfRU5DPS4qJC9ERVNfRU5DPSAkZGVzX29iai87CglzL15BRVNfRU5DPS4qJC9BRVNfRU5DPSAkYWVzX29iai87CglzL15CRl9FTkM9LiokL0JGX0VOQz0gJGJmX29iai87CglzL15DQVNUX0VOQz0uKiQvQ0FTVF9FTkM9ICRjYXN0X29iai87CglzL15SQzRfRU5DPS4qJC9SQzRfRU5DPSAkcmM0X29iai87CglzL15SQzVfRU5DPS4qJC9SQzVfRU5DPSAkcmM1X29iai87CglzL15NRDVfQVNNX09CSj0uKiQvTUQ1X0FTTV9PQko9ICRtZDVfb2JqLzsKCXMvXlNIQTFfQVNNX09CSj0uKiQvU0hBMV9BU01fT0JKPSAkc2hhMV9vYmovOwoJcy9eUk1EMTYwX0FTTV9PQko9LiokL1JNRDE2MF9BU01fT0JKPSAkcm1kMTYwX29iai87CglzL15XUF9BU01fT0JKPS4qJC9XUF9BU01fT0JKPSAkd3Bfb2JqLzsKCXMvXkNNTExfRU5DPS4qJC9DTUxMX0VOQz0gJGNtbGxfb2JqLzsKCXMvXk1PREVTX0FTTV9PQkouPSokL01PREVTX0FTTV9PQko9ICRtb2Rlc19vYmovOwoJcy9eRU5HSU5FU19BU01fT0JKLj0qJC9FTkdJTkVTX0FTTV9PQko9ICRlbmdpbmVzX29iai87CglzL15QRVJMQVNNX1NDSEVNRT0uKiQvUEVSTEFTTV9TQ0hFTUU9ICRwZXJsYXNtX3NjaGVtZS87CglzL15QUk9DRVNTT1I9LiovUFJPQ0VTU09SPSAkcHJvY2Vzc29yLzsKCXMvXkFSRkxBR1M9LiovQVJGTEFHUz0gJGFyZmxhZ3MvOwoJcy9eUEVSTD0uKi9QRVJMPSAkcGVybC87CglzL15LUkI1X0lOQ0xVREVTPS4qL0tSQjVfSU5DTFVERVM9JHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifS87CglzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKCXMvXkxJQlpMSUI9LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGliIn0vOwoJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKCglzL15GSVBTRElSPS4qL0ZJUFNESVI9JGZpcHNkaXIvOwoJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwoJcy9eQkFTRUFERFI9LiovQkFTRUFERFI9JGJhc2VhZGRyLzsKCglzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwoJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CglpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uZHlsaWIvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC5cJChTSExJQl9NQUpPUikgLnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LlwkKFNITElCX01BSk9SKS5keWxpYiAuZHlsaWIvOwoJCX0KCXMvXlNIQVJFRF9MREZMQUdTPS4qL1NIQVJFRF9MREZMQUdTPSRzaGFyZWRfbGRmbGFnLzsKCXByaW50IE9VVCAkXy4iXG4iOwoJfQpjbG9zZShJTik7CmNsb3NlKE9VVCk7CnJlbmFtZSgkTWFrZWZpbGUsIiRNYWtlZmlsZS5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlXG4iIGlmIC1lICRNYWtlZmlsZTsKcmVuYW1lKCIkTWFrZWZpbGUubmV3IiwkTWFrZWZpbGUpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkTWFrZWZpbGUubmV3XG4iOwoKcHJpbnQgIkNDICAgICAgICAgICAgPSRjY1xuIjsKcHJpbnQgIkNGTEFHICAgICAgICAgPSRjZmxhZ3NcbiI7CnByaW50ICJFWF9MSUJTICAgICAgID0kbGZsYWdzXG4iOwpwcmludCAiQ1BVSURfT0JKICAgICA9JGNwdWlkX29ialxuIjsKcHJpbnQgIkJOX0FTTSAgICAgICAgPSRibl9vYmpcbiI7CnByaW50ICJERVNfRU5DICAgICAgID0kZGVzX29ialxuIjsKcHJpbnQgIkFFU19FTkMgICAgICAgPSRhZXNfb2JqXG4iOwpwcmludCAiQkZfRU5DICAgICAgICA9JGJmX29ialxuIjsKcHJpbnQgIkNBU1RfRU5DICAgICAgPSRjYXN0X29ialxuIjsKcHJpbnQgIlJDNF9FTkMgICAgICAgPSRyYzRfb2JqXG4iOwpwcmludCAiUkM1X0VOQyAgICAgICA9JHJjNV9vYmpcbiI7CnByaW50ICJNRDVfT0JKX0FTTSAgID0kbWQ1X29ialxuIjsKcHJpbnQgIlNIQTFfT0JKX0FTTSAgPSRzaGExX29ialxuIjsKcHJpbnQgIlJNRDE2MF9PQkpfQVNNPSRybWQxNjBfb2JqXG4iOwpwcmludCAiQ01MTF9FTkMgICAgICA9JGNtbGxfb2JqXG4iOwpwcmludCAiTU9ERVNfT0JKICAgICA9JG1vZGVzX29ialxuIjsKcHJpbnQgIkVOR0lORVNfT0JKICAgPSRlbmdpbmVzX29ialxuIjsKcHJpbnQgIlBST0NFU1NPUiAgICAgPSRwcm9jZXNzb3JcbiI7CnByaW50ICJSQU5MSUIgICAgICAgID0kcmFubGliXG4iOwpwcmludCAiQVJGTEFHUyAgICAgICA9JGFyZmxhZ3NcbiI7CnByaW50ICJQRVJMICAgICAgICAgID0kcGVybFxuIjsKcHJpbnQgIktSQjVfSU5DTFVERVMgPSIsJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSwiXG4iCglpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IG5lICIiOwoKbXkgJGRlc19wdHI9MDsKbXkgJGRlc19yaXNjMT0wOwpteSAkZGVzX3Jpc2MyPTA7Cm15ICRkZXNfdW5yb2xsPTA7Cm15ICRibl9sbD0wOwpteSAkZGVmX2ludD0yOwpteSAkcmM0X2ludD0kZGVmX2ludDsKbXkgJG1kMl9pbnQ9JGRlZl9pbnQ7Cm15ICRpZGVhX2ludD0kZGVmX2ludDsKbXkgJHJjMl9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzRfaWR4PTA7Cm15ICRyYzRfY2h1bms9MDsKbXkgJGJmX3B0cj0wOwpteSBAdHlwZT0oImNoYXIiLCJzaG9ydCIsImludCIsImxvbmciKTsKbXkgKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCk7Cm15ICRleHBvcnRfdmFyX2FzX2ZuPTA7CgpteSAkZGVzX2ludDsKCmZvcmVhY2ggKHNvcnQgc3BsaXQoL1xzKy8sJGJuX29wcykpCgl7CgkkZGVzX3B0cj0xIGlmIC9ERVNfUFRSLzsKCSRkZXNfcmlzYzE9MSBpZiAvREVTX1JJU0MxLzsKCSRkZXNfcmlzYzI9MSBpZiAvREVTX1JJU0MyLzsKCSRkZXNfdW5yb2xsPTEgaWYgL0RFU19VTlJPTEwvOwoJJGRlc19pbnQ9MSBpZiAvREVTX0lOVC87CgkkYm5fbGw9MSBpZiAvQk5fTExPTkcvOwoJJHJjNF9pbnQ9MCBpZiAvUkM0X0NIQVIvOwoJJHJjNF9pbnQ9MyBpZiAvUkM0X0xPTkcvOwoJJHJjNF9pZHg9MSBpZiAvUkM0X0lOREVYLzsKCSRyYzRfY2h1bms9MSBpZiAvUkM0X0NIVU5LLzsKCSRyYzRfY2h1bms9MiBpZiAvUkM0X0NIVU5LX0xMLzsKCSRtZDJfaW50PTAgaWYgL01EMl9DSEFSLzsKCSRtZDJfaW50PTMgaWYgL01EMl9MT05HLzsKCSRpZGVhX2ludD0xIGlmIC9JREVBX1NIT1JULzsKCSRpZGVhX2ludD0zIGlmIC9JREVBX0xPTkcvOwoJJHJjMl9pbnQ9MSBpZiAvUkMyX1NIT1JULzsKCSRyYzJfaW50PTMgaWYgL1JDMl9MT05HLzsKCSRiZl9wdHI9MSBpZiAkXyBlcSAiQkZfUFRSIjsKCSRiZl9wdHI9MiBpZiAkXyBlcSAiQkZfUFRSMiI7CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwxLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDEsMCwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklUX0xPTkcvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCkgaWYgL1RISVJUWV9UV09fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwxLDApIGlmIC9TSVhURUVOX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMCwxKSBpZiAvRUlHSFRfQklULzsKCSRleHBvcnRfdmFyX2FzX2ZuPTEgaWYgL0VYUE9SVF9WQVJfQVNfRk4vOwoJfQoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3NsY29uZi5oLmluJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbjokIVxuIjsKdW5saW5rKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IjsKb3BlbihPVVQsJz5jcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXcnKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iOwpwcmludCBPVVQgIi8qIG9wZW5zc2xjb25mLmggKi9cbiI7CnByaW50IE9VVCAiLyogV0FSTklORzogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBvcGVuc3NsY29uZi5oLmluIGJ5IENvbmZpZ3VyZS4gKi9cblxuIjsKCnByaW50IE9VVCAiLyogT3BlblNTTCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczogKi9cbiI7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID0gJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CiRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMX05PXyguKikvI2lmbmRlZiBPUEVOU1NMX0VYUEVSSU1FTlRBTF8kMVxuIyBpZm5kZWYgT1BFTlNTTF9OT18kMVxuIyAgZGVmaW5lIE9QRU5TU0xfTk9fJDFcbiMgZW5kaWZcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfKC4qKS8jIGlmIGRlZmluZWQoT1BFTlNTTF8kMSkgXCZcJiAhZGVmaW5lZCgkMSlcbiMgIGRlZmluZSAkMVxuIyBlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPSAiICAgLyogbm8gY2lwaGVycyBleGNsdWRlZCAqL1xuIiBpZiAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyBlcSAiIjsKJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfc3lzX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwpwcmludCBPVVQgJG9wZW5zc2xfc3lzX2RlZmluZXM7CnByaW50IE9VVCAiI2lmbmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkRcblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzOwpwcmludCBPVVQgIlxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpwcmludCBPVVQgIlxuI2VuZGlmIC8qIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORCAqL1xuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7CnByaW50IE9VVCAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLCJcbiI7CgpwcmludCBPVVQgIi8qIFRoZSBPUEVOU1NMX05PXyogbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgYXMgTk9fKiBpZiB0aGUgYXBwbGljYXRpb25cbiI7CnByaW50IE9VVCAiICAgYXNrcyBmb3IgaXQuICBUaGlzIGlzIGEgdHJhbnNpZW50IGZlYXR1cmUgdGhhdCBpcyBwcm92aWRlZCBmb3IgdGhvc2VcbiI7CnByaW50IE9VVCAiICAgd2hvIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZWlyXG4iOwpwcmludCBPVVQgIiAgIGFwcGxpY2F0aW9ucy4gICovXG4iOwpwcmludCBPVVQgIiNpZmRlZiBPUEVOU1NMX0FMR09SSVRITV9ERUZJTkVTXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnM7CnByaW50IE9VVCAiI2VuZGlmXG5cbiI7CgpwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9DUFVJRF9PQkpcblxuIiBpZiAoJGNwdWlkX29iaiBuZSAibWVtX2Nsci5vIik7Cgp3aGlsZSAoPElOPikKCXsKCWlmCSgvXiNkZWZpbmVccytPUEVOU1NMRElSLykKCQl7CgkJbXkgJGZvbyA9ICRvcGVuc3NsZGlyOwoJCSRmb28gPX4gcy9cXC9cXFxcL2c7CgkJcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xESVIgXCIkZm9vXCJcbiI7CgkJfQoJZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQoJCXsKCQlteSAkZm9vID0gIiRwcmVmaXgvJGxpYmRpci9lbmdpbmVzIjsKCQkkZm9vID1+IHMvXFwvXFxcXC9nOwoJCXByaW50IE9VVCAiI2RlZmluZSBFTkdJTkVTRElSIFwiJGZvb1wiXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yIGVxICIzODYiKT8KCQkJImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK01EMl9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIE1EMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJG1kMl9pbnRdOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrSURFQV9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgSURFQV9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJGlkZWFfaW50XTt9CgllbHNpZgkoL14jZGVmaW5lXHMrUkMyX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBSQzJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzJfaW50XTt9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytCRl9QVFIvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMDsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFIyXG4iIGlmICRiZl9wdHIgPT0gMjsKCSAgICAgICAgfQoJZWxzZQoJCXsgcHJpbnQgT1VUICRfOyB9Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZSBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIiRtYWtlIFBFUkw9XCckcGVybFwnIjsKCW15ICRtYWtlX3RhcmdldHMgPSAiIjsKCSRtYWtlX3RhcmdldHMgLj0gIiBsaW5rcyIgaWYgJHN5bWxpbms7CgkkbWFrZV90YXJnZXRzIC49ICIgZGVwZW5kIiBpZiAkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgJG1ha2VfZGVwZW5kOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGdlbnRlc3RzIiBpZiAkc3ltbGluazsKCShzeXN0ZW0gJG1ha2VfY29tbWFuZC4kbWFrZV90YXJnZXRzKSA9PSAwIG9yIGV4aXQgJD8KCQlpZiAkbWFrZV90YXJnZXRzIG5lICIiOwoJaWYgKCAkcGVybCA9fiBtQF4vQCkgewoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwkcGVybCwnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnLCAnXm15IFwkcHJlZml4OyQnLCAnbXkgJHByZWZpeCA9ICInIC4gJHByZWZpeCAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7JywgICdebXkgXCRwcmVmaXg7JCcsICdteSAkcHJlZml4ID0gIicgLiAkcHJlZml4IC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCX0KCWlmICgkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgISRtYWtlX2RlcGVuZCkgewoJCXByaW50IDw8RU9GOwoKU2luY2UgeW91J3ZlIGRpc2FibGVkIG9yIGVuYWJsZWQgYXQgbGVhc3Qgb25lIGFsZ29yaXRobSwgeW91IG5lZWQgdG8gZG8KdGhlIGZvbGxvd2luZyBiZWZvcmUgYnVpbGRpbmc6CgoJbWFrZSBkZXBlbmQKRU9GCgl9Cn0KCiMgY3JlYXRlIHRoZSBtcy92ZXJzaW9uMzIucmMgZmlsZSBpZiBuZWVkZWQKaWYgKCRJc01LMU1GICYmICgkdGFyZ2V0ICF+IC9ebmV0d2FyZS8pKSB7CglteSAoJHYxLCAkdjIsICR2MywgJHY0KTsKCWlmICgkdmVyc2lvbl9udW0gPX4gLyheWzAtOWEtZl17MX0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pL2kpIHsKCQkkdjE9aGV4ICQxOwoJCSR2Mj1oZXggJDI7CgkJJHYzPWhleCAkMzsKCQkkdjQ9aGV4ICQ0OwoJfQoJb3BlbiAoT1VULCI+bXMvdmVyc2lvbjMyLnJjIikgfHwgZGllICJDYW4ndCBvcGVuIG1zL3ZlcnNpb24zMi5yYyI7CglwcmludCBPVVQgPDxFT0Y7CiNpbmNsdWRlIDx3aW52ZXIuaD4KCkxBTkdVQUdFIDB4MDksMHgwMQoKMSBWRVJTSU9OSU5GTwogIEZJTEVWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIFBST0RVQ1RWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIEZJTEVGTEFHU01BU0sgMHgzZkwKI2lmZGVmIF9ERUJVRwogIEZJTEVGTEFHUyAweDAxTAojZWxzZQogIEZJTEVGTEFHUyAweDAwTAojZW5kaWYKICBGSUxFT1MgVk9TX19XSU5ET1dTMzIKICBGSUxFVFlQRSBWRlRfRExMCiAgRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KCUJMT0NLICIwNDA5MDRiMCIKCUJFR0lOCgkgICAgLy8gUmVxdWlyZWQ6CSAgICAKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgoJICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIkdmVyc2lvblxcMCIKI2lmIGRlZmluZWQoQ1JZUFRPKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZWF5MzIuZGxsXFwwIgojZWxpZiBkZWZpbmVkKFNTTCkKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgInNzbGVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgInNzbGVheTMyLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQogIApwcmludCA8PEVPRjsKCkNvbmZpZ3VyZWQgZm9yICR0YXJnZXQuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICghJG5vX3RocmVhZHMgJiYgISR0aHJlYWRzKTsKClRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIG11bHRpLXRocmVhZGVkCmFwcGxpY2F0aW9ucyBhcyB0aGUgY29tcGlsZXIgb3B0aW9ucyByZXF1aXJlZCBvbiB0aGlzIHN5c3RlbSBhcmUgbm90IGtub3duLgpTZWUgZmlsZSBJTlNUQUxMIGZvciBkZXRhaWxzIGlmIHlvdSBuZWVkIG11bHRpLXRocmVhZGluZy4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRub19zaGFyZWRfd2Fybik7CgpZb3UgZ2F2ZSB0aGUgb3B0aW9uICdzaGFyZWQnLiAgTm9ybWFsbHksIHRoYXQgd291bGQgZ2l2ZSB5b3Ugc2hhcmVkIGxpYnJhcmllcy4KVW5mb3J0dW5hdGVseSwgdGhlIE9wZW5TU0wgY29uZmlndXJhdGlvbiBkb2Vzbid0IGluY2x1ZGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydApmb3IgdGhpcyBwbGF0Zm9ybSB5ZXQsIHNvIGl0IHdpbGwgcHJldGVuZCB5b3UgZ2F2ZSB0aGUgb3B0aW9uICduby1zaGFyZWQnLiAgSWYKeW91IGNhbiBpbmZvcm0gdGhlIGRldmVsb3BwZXJzIChvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmcpIGhvdyB0byBzdXBwb3J0IHNoYXJlZApsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSwgdGhleSB3aWxsIGF0IGxlYXN0IGxvb2sgYXQgaXQgYW5kIHRyeSB0aGVpciBiZXN0CihidXQgcGxlYXNlIGZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSB0cmllZCB3aXRoIGEgY3VycmVudCB2ZXJzaW9uIG9mIE9wZW5TU0wpLgpFT0YKCmV4aXQoMCk7CgpzdWIgdXNhZ2UKCXsKCXByaW50IFNUREVSUiAkdXNhZ2U7CglwcmludCBTVERFUlIgIlxucGljayBvcy9jb21waWxlciBmcm9tOlxuIjsKCW15ICRqPTA7CglteSAkaTsKICAgICAgICBteSAkaz0wOwoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSA9fiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpICF+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCXByaW50IFNUREVSUiAiXG5cbk5PVEU6IElmIGluIGRvdWJ0LCBvbiBVbml4LWlzaCBzeXN0ZW1zIHVzZSAnLi9jb25maWcnLlxuIjsKCWV4aXQoMSk7Cgl9CgpzdWIgd2hpY2gKCXsKCW15KCRuYW1lKT1AXzsKCW15ICRwYXRoOwoJZm9yZWFjaCAkcGF0aCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KQoJCXsKCQlpZiAoLWYgIiRwYXRoLyRuYW1lJGV4ZV9leHQiIGFuZCAteCBfKQoJCQl7CgkJCXJldHVybiAiJHBhdGgvJG5hbWUkZXhlX2V4dCIgdW5sZXNzICgkbmFtZSBlcSAicGVybCIgYW5kCgkJCSBzeXN0ZW0oIiRwYXRoLyRuYW1lJGV4ZV9leHQgLWUgIiAuICdcJ2V4aXQoJF08NS4wKTtcJycpKTsKCQkJfQoJCX0KCX0KCnN1YiBkb2ZpbGUKCXsKCW15ICRmOyBteSAkcDsgbXkgJW07IG15IEBhOyBteSAkazsgbXkgJGZmOwoJKCRmLCRwLCVtKT1AXzsKCglvcGVuKElOLCI8JGYuaW4iKSB8fCBvcGVuKElOLCI8JGYiKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmOiQhXG4iOwoJQGE9PElOPjsKCWNsb3NlKElOKTsKCWZvcmVhY2ggJGsgKGtleXMgJW0pCgkJewoJCWdyZXAoLyRrLyAmJiAoJF89c3ByaW50ZigkbXska30uIlxuIiwkcCkpLEBhKTsKCQl9CglvcGVuKE9VVCwiPiRmLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGYubmV3OiQhXG4iOwoJcHJpbnQgT1VUIEBhOwoJY2xvc2UoT1VUKTsKCXJlbmFtZSgkZiwiJGYuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmXG4iIGlmIC1lICRmOwoJcmVuYW1lKCIkZi5uZXciLCRmKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGYubmV3XG4iOwoJfQoKc3ViIHByaW50X3RhYmxlX2VudHJ5Cgl7CglteSAkdGFyZ2V0ID0gc2hpZnQ7CgoJKG15ICRjYyxteSAkY2ZsYWdzLG15ICR1bmlzdGQsbXkgJHRocmVhZF9jZmxhZyxteSAkc3lzX2lkLG15ICRsZmxhZ3MsCglteSAkYm5fb3BzLG15ICRjcHVpZF9vYmosbXkgJGJuX29iaixteSAkZGVzX29iaixteSAkYWVzX29iaiwgbXkgJGJmX29iaiwKCW15ICRtZDVfb2JqLG15ICRzaGExX29iaixteSAkY2FzdF9vYmosbXkgJHJjNF9vYmosbXkgJHJtZDE2MF9vYmosCglteSAkcmM1X29iaixteSAkd3Bfb2JqLG15ICRjbWxsX29iaixteSAkbW9kZXNfb2JqLCBteSAkZW5naW5lc19vYmosCglteSAkcGVybGFzbV9zY2hlbWUsbXkgJGRzb19zY2hlbWUsbXkgJHNoYXJlZF90YXJnZXQsbXkgJHNoYXJlZF9jZmxhZywKCW15ICRzaGFyZWRfbGRmbGFnLG15ICRzaGFyZWRfZXh0ZW5zaW9uLG15ICRyYW5saWIsbXkgJGFyZmxhZ3MsbXkgJG11bHRpbGliKT0KCXNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKCQkJCglwcmludCA8PEVPRgoKKioqICR0YXJnZXQKXCRjYyAgICAgICAgICAgPSAkY2MKXCRjZmxhZ3MgICAgICAgPSAkY2ZsYWdzClwkdW5pc3RkICAgICAgID0gJHVuaXN0ZApcJHRocmVhZF9jZmxhZyA9ICR0aHJlYWRfY2ZsYWcKXCRzeXNfaWQgICAgICAgPSAkc3lzX2lkClwkbGZsYWdzICAgICAgID0gJGxmbGFncwpcJGJuX29wcyAgICAgICA9ICRibl9vcHMKXCRjcHVpZF9vYmogICAgPSAkY3B1aWRfb2JqClwkYm5fb2JqICAgICAgID0gJGJuX29iagpcJGRlc19vYmogICAgICA9ICRkZXNfb2JqClwkYWVzX29iaiAgICAgID0gJGFlc19vYmoKXCRiZl9vYmogICAgICAgPSAkYmZfb2JqClwkbWQ1X29iaiAgICAgID0gJG1kNV9vYmoKXCRzaGExX29iaiAgICAgPSAkc2hhMV9vYmoKXCRjYXN0X29iaiAgICAgPSAkY2FzdF9vYmoKXCRyYzRfb2JqICAgICAgPSAkcmM0X29iagpcJHJtZDE2MF9vYmogICA9ICRybWQxNjBfb2JqClwkcmM1X29iaiAgICAgID0gJHJjNV9vYmoKXCR3cF9vYmogICAgICAgPSAkd3Bfb2JqClwkY21sbF9vYmogICAgID0gJGNtbGxfb2JqClwkbW9kZXNfb2JqICAgID0gJG1vZGVzX29iagpcJGVuZ2luZXNfb2JqICA9ICRlbmdpbmVzX29iagpcJHBlcmxhc21fc2NoZW1lID0gJHBlcmxhc21fc2NoZW1lClwkZHNvX3NjaGVtZSAgID0gJGRzb19zY2hlbWUKXCRzaGFyZWRfdGFyZ2V0PSAkc2hhcmVkX3RhcmdldApcJHNoYXJlZF9jZmxhZyA9ICRzaGFyZWRfY2ZsYWcKXCRzaGFyZWRfbGRmbGFnID0gJHNoYXJlZF9sZGZsYWcKXCRzaGFyZWRfZXh0ZW5zaW9uID0gJHNoYXJlZF9leHRlbnNpb24KXCRyYW5saWIgICAgICAgPSAkcmFubGliClwkYXJmbGFncyAgICAgID0gJGFyZmxhZ3MKXCRtdWx0aWxpYiAgICAgPSAkbXVsdGlsaWIKRU9GCgl9CgpzdWIgdGVzdF9zYW5pdHkKCXsKCW15ICRlcnJvcmNudCA9IDA7CgoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gU0FOSVRZIFRFU1RJTkchXG4iOwoJcHJpbnQgU1RERVJSICI9PT0gTm8gY29uZmlndXJhdGlvbiB3aWxsIGJlIGRvbmUsIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBpZ25vcmVkIVxuIjsKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCUBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgoJCWlmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZS0xXSA9fiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lKzFdID1+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgZm9sbG93aW5nIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSAhfiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtc3wpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIGZpZWxkID0gIiwkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0sIlxuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcyBhcmUgJ2Jlb3MnLCAnZGwnLCAnZGxmY24nLCAnd2luMzInIGFuZCAndm1zJ1xuIjsKCQkJfQoJCX0KCXByaW50IFNUREVSUiAiTm8gc2FuaXR5IGVycm9ycyBkZXRlY3RlZCFcbiIgaWYgJGVycm9yY250ID09IDA7CglyZXR1cm4gJGVycm9yY250OwoJfQo=